Merge m-c to inbound, a=merge
authorWes Kocher <wkocher@mozilla.com>
Wed, 22 Feb 2017 15:06:46 -0800
changeset 373449 8cc3aeab4bd114af858aaf3d3690e289932153bb
parent 373448 b332dd08b31628be2e4c2996efd67cac6a79a15e (current diff)
parent 373341 32dcdde1fc64fc39a9065dc4218265dbc727673f (diff)
child 373450 9b98ddcdbfdae76e5cd45decbc2249e5b7df837a
push id10863
push userjlorenzo@mozilla.com
push dateMon, 06 Mar 2017 23:02:23 +0000
treeherdermozilla-aurora@0931190cd725 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone54.0a1
Merge m-c to inbound, a=merge MozReview-Commit-ID: HDHJC8X9xWG
js/src/jit/IonBuilder.cpp
js/src/jit/VMFunctions.cpp
js/src/jit/VMFunctions.h
taskcluster/taskgraph/decision.py
taskcluster/taskgraph/transforms/signing.py
taskcluster/taskgraph/util/taskcluster.py
toolkit/components/extensions/test/mochitest/test_clipboard.html
toolkit/components/telemetry/Histograms.json
widget/gtk/mozcontainer.c
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -455,48 +455,49 @@ const gStoragePressureObserver = {
 
     const BYTES_IN_GIGABYTE = 1073741824;
     const USAGE_THRESHOLD_BYTES = BYTES_IN_GIGABYTE *
       Services.prefs.getIntPref("browser.storageManager.pressureNotification.usageThresholdGB");
     let msg = "";
     let buttons = [];
     let usage = parseInt(data);
     let prefStrBundle = document.getElementById("bundle_preferences");
+    let brandShortName = document.getElementById("bundle_brand").getString("brandShortName");
     let notificationBox = document.getElementById("high-priority-global-notificationbox");
     buttons.push({
       label: prefStrBundle.getString("spaceAlert.learnMoreButton.label"),
       accessKey: prefStrBundle.getString("spaceAlert.learnMoreButton.accesskey"),
       callback(notificationBar, button) {
         let learnMoreURL = Services.urlFormatter.formatURLPref("app.support.baseURL") + "storage-permissions";
         gBrowser.selectedTab = gBrowser.addTab(learnMoreURL);
       }
     });
     if (usage < USAGE_THRESHOLD_BYTES) {
       // The firefox-used space < 5GB, then warn user to free some disk space.
       // This is because this usage is small and not the main cause for space issue.
       // In order to avoid the bad and wrong impression among users that
       // firefox eats disk space a lot, indicate users to clean up other disk space.
-      msg = prefStrBundle.getString("spaceAlert.under5GB.description");
+      msg = prefStrBundle.getFormattedString("spaceAlert.under5GB.message", [brandShortName]);
       buttons.push({
         label: prefStrBundle.getString("spaceAlert.under5GB.okButton.label"),
         accessKey: prefStrBundle.getString("spaceAlert.under5GB.okButton.accesskey"),
         callback() {}
       });
     } else {
       // The firefox-used space >= 5GB, then guide users to about:preferences
       // to clear some data stored on firefox by websites.
-      let descriptionStringID = "spaceAlert.over5GB.description";
+      let descriptionStringID = "spaceAlert.over5GB.message";
       let prefButtonLabelStringID = "spaceAlert.over5GB.prefButton.label";
       let prefButtonAccesskeyStringID = "spaceAlert.over5GB.prefButton.accesskey";
       if (AppConstants.platform == "win") {
-        descriptionStringID = "spaceAlert.over5GB.descriptionWin";
+        descriptionStringID = "spaceAlert.over5GB.messageWin";
         prefButtonLabelStringID = "spaceAlert.over5GB.prefButtonWin.label";
         prefButtonAccesskeyStringID = "spaceAlert.over5GB.prefButtonWin.accesskey";
       }
-      msg = prefStrBundle.getString(descriptionStringID);
+      msg = prefStrBundle.getFormattedString(descriptionStringID, [brandShortName]);
       buttons.push({
         label: prefStrBundle.getString(prefButtonLabelStringID),
         accessKey: prefStrBundle.getString(prefButtonAccesskeyStringID),
         callback(notificationBar, button) {
           gBrowser.ownerGlobal.openPreferences("advanced", { advancedTab: "networkTab" });
         }
       });
     }
@@ -3430,28 +3431,28 @@ var PrintPreviewListener = {
   _tabBeforePrintPreview: null,
   _simplifyPageTab: null,
 
   getPrintPreviewBrowser() {
     if (!this._printPreviewTab) {
       let browser = gBrowser.selectedBrowser;
       let preferredRemoteType = browser.remoteType;
       this._tabBeforePrintPreview = gBrowser.selectedTab;
-      this._printPreviewTab = gBrowser.loadOneTab("about:blank", {
+      this._printPreviewTab = gBrowser.loadOneTab("about:printpreview", {
         inBackground: false,
         preferredRemoteType,
         sameProcessAsFrameLoader: browser.frameLoader
       });
       gBrowser.selectedTab = this._printPreviewTab;
     }
     return gBrowser.getBrowserForTab(this._printPreviewTab);
   },
   createSimplifiedBrowser() {
     let browser = this._tabBeforePrintPreview.linkedBrowser;
-    this._simplifyPageTab = gBrowser.loadOneTab("about:blank", {
+    this._simplifyPageTab = gBrowser.loadOneTab("about:printpreview", {
       inBackground: true,
       sameProcessAsFrameLoader: browser.frameLoader
      });
     return this.getSimplifiedSourceBrowser();
   },
   getSourceBrowser() {
     return this._tabBeforePrintPreview ?
       this._tabBeforePrintPreview.linkedBrowser : gBrowser.selectedBrowser;
--- a/browser/components/sessionstore/SessionStore.jsm
+++ b/browser/components/sessionstore/SessionStore.jsm
@@ -383,17 +383,17 @@ this.SessionStore = {
    *        The browser state for which we remove worth-saving tabs.
    *        The given object will be modified.
    */
   keepOnlyWorthSavingTabs: function (aState) {
     for (let i = aState.windows.length - 1; i >= 0; i--) {
       let win = aState.windows[i];
       for (let j = win.tabs.length - 1; j >= 0; j--) {
         let tab = win.tabs[j];
-        if (!SessionStoreInternal._shouldSaveTabState(tab)) {
+        if (!SessionStoreInternal._shouldSaveTab(tab)) {
           win.tabs.splice(j, 1);
           if (win.selected > j) {
             win.selected--;
           }
         }
       }
       if (!win.tabs.length) {
         aState.windows.splice(i, 1);
@@ -4193,21 +4193,40 @@ var SessionStoreInternal = {
   _shouldSaveTabState: function ssi_shouldSaveTabState(aTabState) {
     // If the tab has only a transient about: history entry, no other
     // session history, and no userTypedValue, then we don't actually want to
     // store this tab's data.
     return aTabState.entries.length &&
            !(aTabState.entries.length == 1 &&
                 (aTabState.entries[0].url == "about:blank" ||
                  aTabState.entries[0].url == "about:newtab" ||
+                 aTabState.entries[0].url == "about:printpreview" ||
                  aTabState.entries[0].url == "about:privatebrowsing") &&
                  !aTabState.userTypedValue);
   },
 
   /**
+   * Determine if the tab state we're passed is something we should keep to be
+   * reopened at session restore. This is used when we are saving the current
+   * session state to disk. This method is very similar to _shouldSaveTabState,
+   * however, "about:blank" and "about:newtab" tabs will still be saved to disk.
+   *
+   * @param aTabState
+   *        The current tab state
+   * @returns boolean
+   */
+  _shouldSaveTab: function ssi_shouldSaveTab(aTabState) {
+    // If the tab has one of the following transient about: history entry,
+    // then we don't actually want to write this tab's data to disk.
+    return aTabState.entries.length &&
+           !(aTabState.entries[0].url == "about:printpreview" ||
+             aTabState.entries[0].url == "about:privatebrowsing");
+  },
+
+  /**
    * This is going to take a state as provided at startup (via
    * nsISessionStartup.state) and split it into 2 parts. The first part
    * (defaultState) will be a state that should still be restored at startup,
    * while the second part (state) is a state that should be saved for later.
    * defaultState will be comprised of windows with only pinned tabs, extracted
    * from state. It will contain the cookies that go along with the history
    * entries in those tabs. It will also contain window position information.
    *
--- a/browser/extensions/formautofill/FormAutofillContent.jsm
+++ b/browser/extensions/formautofill/FormAutofillContent.jsm
@@ -266,19 +266,20 @@ var FormAutofillContent = {
 
     Services.cpmm.addMessageListener("FormAutofill:enabledStatus", (result) => {
       if (result.data) {
         ProfileAutocomplete.ensureRegistered();
       } else {
         ProfileAutocomplete.ensureUnregistered();
       }
     });
-    Services.cpmm.sendAsyncMessage("FormAutofill:getEnabledStatus");
-    // TODO: use initialProcessData:
-    // Services.cpmm.initialProcessData.autofillEnabled
+
+    if (Services.cpmm.initialProcessData.autofillEnabled) {
+      ProfileAutocomplete.ensureRegistered();
+    }
   },
 
   /**
    * Get the input's information from cache which is created after page identified.
    *
    * @param {HTMLInputElement} element Focused input which triggered profile searching
    * @returns {Object|null}
    *          Return target input's information that cloned from content cache
--- a/browser/extensions/formautofill/FormAutofillParent.jsm
+++ b/browser/extensions/formautofill/FormAutofillParent.jsm
@@ -75,21 +75,20 @@ FormAutofillParent.prototype = {
     this._profileStore = new ProfileStorage(storePath);
     this._profileStore.initialize();
 
     Services.obs.addObserver(this, "advanced-pane-loaded", false);
 
     // Observing the pref and storage changes
     Services.prefs.addObserver(ENABLED_PREF, this, false);
     Services.obs.addObserver(this, "formautofill-storage-changed", false);
-    this._enabled = this._getStatus();
+
     // Force to trigger the onStatusChanged function for setting listeners properly
     // while initizlization
-    this._onStatusChanged();
-    Services.ppmm.addMessageListener("FormAutofill:getEnabledStatus", this);
+    this._setStatus(this._getStatus());
   },
 
   observe(subject, topic, data) {
     log.debug("observe:", topic, "with data:", data);
     switch (topic) {
       case "advanced-pane-loaded": {
         let formAutofillPreferences = new FormAutofillPreferences();
         let document = subject.document;
@@ -99,32 +98,30 @@ FormAutofillParent.prototype = {
         parentNode.insertBefore(prefGroup, insertBeforeNode);
         break;
       }
 
       case "nsPref:changed": {
         // Observe pref changes and update _enabled cache if status is changed.
         let currentStatus = this._getStatus();
         if (currentStatus !== this._enabled) {
-          this._enabled = currentStatus;
-          this._onStatusChanged();
+          this._setStatus(currentStatus);
         }
         break;
       }
 
       case "formautofill-storage-changed": {
         // Early exit if the action is not "add" nor "remove"
         if (data != "add" && data != "remove") {
           break;
         }
 
         let currentStatus = this._getStatus();
         if (currentStatus !== this._enabled) {
-          this._enabled = currentStatus;
-          this._onStatusChanged();
+          this._setStatus(currentStatus);
         }
         break;
       }
 
       default: {
         throw new Error(`FormAutofillParent: Unexpected topic observed: ${topic}`);
       }
     }
@@ -138,16 +135,19 @@ FormAutofillParent.prototype = {
     log.debug("_onStatusChanged: Status changed to", this._enabled);
     if (this._enabled) {
       Services.ppmm.addMessageListener("FormAutofill:GetProfiles", this);
     } else {
       Services.ppmm.removeMessageListener("FormAutofill:GetProfiles", this);
     }
 
     Services.ppmm.broadcastAsyncMessage("FormAutofill:enabledStatus", this._enabled);
+    // Sync process data autofillEnabled to make sure the value up to date
+    // no matter when the new content process is initialized.
+    Services.ppmm.initialProcessData.autofillEnabled = this._enabled;
   },
 
   /**
    * Query pref and storage status to determine the overall status for
    * form autofill feature.
    *
    * @returns {boolean} status of form autofill feature
    */
@@ -155,31 +155,37 @@ FormAutofillParent.prototype = {
     if (!Services.prefs.getBoolPref(ENABLED_PREF)) {
       return false;
     }
 
     return this._profileStore.getAll().length > 0;
   },
 
   /**
+   * Set status and trigger _onStatusChanged.
+   *
+   * @param {boolean} newStatus The latest status we want to set for _enabled
+   */
+  _setStatus(newStatus) {
+    this._enabled = newStatus;
+    this._onStatusChanged();
+  },
+
+  /**
    * Handles the message coming from FormAutofillContent.
    *
    * @param   {string} message.name The name of the message.
    * @param   {object} message.data The data of the message.
    * @param   {nsIFrameMessageManager} message.target Caller's message manager.
    */
   receiveMessage({name, data, target}) {
     switch (name) {
       case "FormAutofill:GetProfiles":
         this._getProfiles(data, target);
         break;
-      case "FormAutofill:getEnabledStatus":
-        Services.ppmm.broadcastAsyncMessage("FormAutofill:enabledStatus",
-                                            this._enabled);
-        break;
     }
   },
 
   /**
    * Returns the instance of ProfileStorage. To avoid syncing issues, anyone
    * who needs to access the profile should request the instance by this instead
    * of creating a new one.
    *
--- a/browser/extensions/formautofill/ProfileAutoCompleteResult.jsm
+++ b/browser/extensions/formautofill/ProfileAutoCompleteResult.jsm
@@ -64,21 +64,21 @@ ProfileAutoCompleteResult.prototype = {
 
   // An array of primary and secondary labels for each profiles.
   _popupLabels: null,
 
   /**
    * @returns {number} The number of results
    */
   get matchCount() {
-    return this._matchingProfiles.length;
+    return this._popupLabels.length;
   },
 
   _checkIndexBounds(index) {
-    if (index < 0 || index >= this._matchingProfiles.length) {
+    if (index < 0 || index >= this._popupLabels.length) {
       throw Components.Exception("Index out of range.", Cr.NS_ERROR_ILLEGAL_VALUE);
     }
   },
 
   /**
    * Get the secondary label based on the focused field name and related field names
    * in the same form.
    * @param   {string} focusedFieldName The field name of the focused input
@@ -118,17 +118,20 @@ ProfileAutoCompleteResult.prototype = {
         return profile[currentFieldName];
       }
     }
 
     return ""; // Nothing matched.
   },
 
   _generateLabels(focusedFieldName, allFieldNames, profiles) {
-    return profiles.map(profile => {
+    // Skip results without a primary label.
+    return profiles.filter(profile => {
+      return !!profile[focusedFieldName];
+    }).map(profile => {
       return {
         primary: profile[focusedFieldName],
         secondary: this._getSecondaryLabel(focusedFieldName,
                                            allFieldNames,
                                            profile),
       };
     });
   },
--- a/browser/extensions/formautofill/test/unit/test_enabledStatus.js
+++ b/browser/extensions/formautofill/test/unit/test_enabledStatus.js
@@ -3,60 +3,62 @@
  */
 
 "use strict";
 
 Cu.import("resource://formautofill/FormAutofillParent.jsm");
 
 add_task(function* test_enabledStatus_init() {
   let formAutofillParent = new FormAutofillParent();
-  sinon.spy(formAutofillParent, "_onStatusChanged");
+  sinon.spy(formAutofillParent, "_setStatus");
 
   // Default status is false before initialization
   do_check_eq(formAutofillParent._enabled, false);
+  do_check_eq(Services.ppmm.initialProcessData.autofillEnabled, undefined);
 
   formAutofillParent.init();
-  do_check_eq(formAutofillParent._onStatusChanged.called, true);
+  do_check_eq(formAutofillParent._setStatus.called, true);
+  do_check_eq(Services.ppmm.initialProcessData.autofillEnabled, false);
 
   formAutofillParent._uninit();
 });
 
 add_task(function* test_enabledStatus_observe() {
   let formAutofillParent = new FormAutofillParent();
   sinon.stub(formAutofillParent, "_getStatus");
-  sinon.spy(formAutofillParent, "_onStatusChanged");
+  sinon.spy(formAutofillParent, "_setStatus");
 
   // _enabled = _getStatus() => No need to trigger onStatusChanged
   formAutofillParent._enabled = true;
   formAutofillParent._getStatus.returns(true);
   formAutofillParent.observe(null, "nsPref:changed", "browser.formautofill.enabled");
-  do_check_eq(formAutofillParent._onStatusChanged.called, false);
+  do_check_eq(formAutofillParent._setStatus.called, false);
 
   // _enabled != _getStatus() => Need to trigger onStatusChanged
   formAutofillParent._getStatus.returns(false);
   formAutofillParent.observe(null, "nsPref:changed", "browser.formautofill.enabled");
-  do_check_eq(formAutofillParent._onStatusChanged.called, true);
+  do_check_eq(formAutofillParent._setStatus.called, true);
 
   // profile added => Need to trigger onStatusChanged
   formAutofillParent._getStatus.returns(!formAutofillParent._enabled);
-  formAutofillParent._onStatusChanged.reset();
+  formAutofillParent._setStatus.reset();
   formAutofillParent.observe(null, "formautofill-storage-changed", "add");
-  do_check_eq(formAutofillParent._onStatusChanged.called, true);
+  do_check_eq(formAutofillParent._setStatus.called, true);
 
   // profile removed => Need to trigger onStatusChanged
   formAutofillParent._getStatus.returns(!formAutofillParent._enabled);
-  formAutofillParent._onStatusChanged.reset();
+  formAutofillParent._setStatus.reset();
   formAutofillParent.observe(null, "formautofill-storage-changed", "remove");
-  do_check_eq(formAutofillParent._onStatusChanged.called, true);
+  do_check_eq(formAutofillParent._setStatus.called, true);
 
   // profile updated => no need to trigger onStatusChanged
   formAutofillParent._getStatus.returns(!formAutofillParent._enabled);
-  formAutofillParent._onStatusChanged.reset();
+  formAutofillParent._setStatus.reset();
   formAutofillParent.observe(null, "formautofill-storage-changed", "update");
-  do_check_eq(formAutofillParent._onStatusChanged.called, false);
+  do_check_eq(formAutofillParent._setStatus.called, false);
 });
 
 add_task(function* test_enabledStatus_getStatus() {
   let formAutofillParent = new FormAutofillParent();
   do_register_cleanup(function cleanup() {
     Services.prefs.clearUserPref("browser.formautofill.enabled");
   });
 
@@ -77,8 +79,24 @@ add_task(function* test_enabledStatus_ge
   // pref is enabled and profile is not empty.
   Services.prefs.setBoolPref("browser.formautofill.enabled", true);
   do_check_eq(formAutofillParent._getStatus(), true);
 
   // pref is disabled and profile is not empty.
   Services.prefs.setBoolPref("browser.formautofill.enabled", false);
   do_check_eq(formAutofillParent._getStatus(), false);
 });
+
+add_task(function* test_enabledStatus_setStatus() {
+  let formAutofillParent = new FormAutofillParent();
+  sinon.spy(formAutofillParent, "_onStatusChanged");
+
+  formAutofillParent._setStatus(true);
+  do_check_eq(formAutofillParent._enabled, true);
+  do_check_eq(Services.ppmm.initialProcessData.autofillEnabled, true);
+  do_check_eq(formAutofillParent._onStatusChanged.called, true);
+
+  formAutofillParent._onStatusChanged.reset();
+  formAutofillParent._setStatus(false);
+  do_check_eq(formAutofillParent._enabled, false);
+  do_check_eq(Services.ppmm.initialProcessData.autofillEnabled, false);
+  do_check_eq(formAutofillParent._onStatusChanged.called, true);
+});
--- a/browser/extensions/formautofill/test/unit/test_profileAutocompleteResult.js
+++ b/browser/extensions/formautofill/test/unit/test_profileAutocompleteResult.js
@@ -7,21 +7,27 @@ let matchingProfiles = [{
   organization: "Sesame Street",
   "street-address": "123 Sesame Street.",
   tel: "1-345-345-3456.",
 }, {
   guid: "test-guid-2",
   organization: "Mozilla",
   "street-address": "331 E. Evelyn Avenue",
   tel: "1-650-903-0800",
+}, {
+  guid: "test-guid-3",
+  organization: "",
+  "street-address": "321, No Name St.",
+  tel: "1-000-000-0000",
 }];
 
 let allFieldNames = ["street-address", "organization", "tel"];
 
 let testCases = [{
+  description: "Focus on an `organization` field",
   options: {},
   matchingProfiles,
   allFieldNames,
   searchString: "",
   fieldName: "organization",
   expected: {
     searchResult: Ci.nsIAutoCompleteResult.RESULT_SUCCESS,
     defaultIndex: 0,
@@ -41,16 +47,17 @@ let testCases = [{
       label: JSON.stringify({
         primary: "Mozilla",
         secondary: "331 E. Evelyn Avenue",
       }),
       image: "",
     }],
   },
 }, {
+  description: "Focus on an `tel` field",
   options: {},
   matchingProfiles,
   allFieldNames,
   searchString: "",
   fieldName: "tel",
   expected: {
     searchResult: Ci.nsIAutoCompleteResult.RESULT_SUCCESS,
     defaultIndex: 0,
@@ -67,19 +74,29 @@ let testCases = [{
       value: "1-650-903-0800",
       style: "autofill-profile",
       comment: JSON.stringify(matchingProfiles[1]),
       label: JSON.stringify({
         primary: "1-650-903-0800",
         secondary: "331 E. Evelyn Avenue",
       }),
       image: "",
+    }, {
+      value: "1-000-000-0000",
+      style: "autofill-profile",
+      comment: JSON.stringify(matchingProfiles[2]),
+      label: JSON.stringify({
+        primary: "1-000-000-0000",
+        secondary: "321, No Name St.",
+      }),
+      image: "",
     }],
   },
 }, {
+  description: "Focus on an `street-address` field",
   options: {},
   matchingProfiles,
   allFieldNames,
   searchString: "",
   fieldName: "street-address",
   expected: {
     searchResult: Ci.nsIAutoCompleteResult.RESULT_SUCCESS,
     defaultIndex: 0,
@@ -96,50 +113,62 @@ let testCases = [{
       value: "331 E. Evelyn Avenue",
       style: "autofill-profile",
       comment: JSON.stringify(matchingProfiles[1]),
       label: JSON.stringify({
         primary: "331 E. Evelyn Avenue",
         secondary: "Mozilla",
       }),
       image: "",
+    }, {
+      value: "321, No Name St.",
+      style: "autofill-profile",
+      comment: JSON.stringify(matchingProfiles[2]),
+      label: JSON.stringify({
+        primary: "321, No Name St.",
+        secondary: "1-000-000-0000",
+      }),
+      image: "",
     }],
   },
 }, {
+  description: "No matching profiles",
   options: {},
   matchingProfiles: [],
   allFieldNames,
   searchString: "",
   fieldName: "",
   expected: {
     searchResult: Ci.nsIAutoCompleteResult.RESULT_NOMATCH,
     defaultIndex: 0,
     items: [],
   },
 }, {
+  description: "Search with failure",
   options: {resultCode: Ci.nsIAutoCompleteResult.RESULT_FAILURE},
   matchingProfiles: [],
   allFieldNames,
   searchString: "",
   fieldName: "",
   expected: {
     searchResult: Ci.nsIAutoCompleteResult.RESULT_FAILURE,
     defaultIndex: 0,
     items: [],
   },
 }];
 
 add_task(function* test_all_patterns() {
-  testCases.forEach(pattern => {
-    let actual = new ProfileAutoCompleteResult(pattern.searchString,
-                                               pattern.fieldName,
-                                               pattern.allFieldNames,
-                                               pattern.matchingProfiles,
-                                               pattern.options);
-    let expectedValue = pattern.expected;
+  testCases.forEach(testCase => {
+    do_print("Starting testcase: " + testCase.description);
+    let actual = new ProfileAutoCompleteResult(testCase.searchString,
+                                               testCase.fieldName,
+                                               testCase.allFieldNames,
+                                               testCase.matchingProfiles,
+                                               testCase.options);
+    let expectedValue = testCase.expected;
     equal(actual.searchResult, expectedValue.searchResult);
     equal(actual.defaultIndex, expectedValue.defaultIndex);
     equal(actual.matchCount, expectedValue.items.length);
     expectedValue.items.forEach((item, index) => {
       equal(actual.getValueAt(index), item.value);
       equal(actual.getCommentAt(index), item.comment);
       equal(actual.getLabelAt(index), item.label);
       equal(actual.getStyleAt(index), item.style);
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -631,16 +631,17 @@
 
 ; [Default Preferences]
 ; All the pref files must be part of base to prevent migration bugs
 @RESPATH@/browser/@PREF_DIR@/firefox.js
 @RESPATH@/browser/@PREF_DIR@/firefox-branding.js
 @RESPATH@/greprefs.js
 @RESPATH@/defaults/autoconfig/prefcalls.js
 @RESPATH@/browser/defaults/permissions
+@RESPATH@/browser/defaults/blocklists
 
 ; Warning: changing the path to channel-prefs.js can cause bugs (Bug 756325)
 ; Technically this is an app pref file, but we are keeping it in the original
 ; gre location for now.
 @RESPATH@/defaults/pref/channel-prefs.js
 
 ; Services (gre) prefs
 @RESPATH@/defaults/pref/services-sync.js
--- a/browser/locales/en-US/chrome/browser/preferences/preferences.properties
+++ b/browser/locales/en-US/chrome/browser/preferences/preferences.properties
@@ -202,22 +202,26 @@ removeAllSiteDataShown.label=Remove All 
 removeAllSiteDataShown.accesskey=e
 spaceAlert.learnMoreButton.label=Learn More
 spaceAlert.learnMoreButton.accesskey=L
 spaceAlert.over5GB.prefButton.label=Open Preferences
 spaceAlert.over5GB.prefButton.accesskey=O
 # LOCALIZATION NOTE (spaceAlert.over5GB.prefButtonWin.label): On Windows Preferences is called Options
 spaceAlert.over5GB.prefButtonWin.label=Open Options
 spaceAlert.over5GB.prefButtonWin.accesskey=O
-spaceAlert.over5GB.description=Firefox is running out of disk space. Website contents may not display properly. You can clear stored site data in Preferences > Advanced > Site Data.
-# LOCALIZATION NOTE (spaceAlert.over5GB.descriptionWin): On Windows Preferences is called Options
-spaceAlert.over5GB.descriptionWin=Firefox is running out of disk space. Website contents may not display properly. You can clear stored site data in Options > Advanced > Site Data.
+# LOCALIZATION NOTE (spaceAlert.over5GB.message): %S = brandShortName
+spaceAlert.over5GB.message=%S is running out of disk space. Website contents may not display properly. You can clear stored site data in Preferences > Advanced > Site Data.
+# LOCALIZATION NOTE (spaceAlert.over5GB.messageWin):
+# - On Windows Preferences is called Options
+# - %S = brandShortName
+spaceAlert.over5GB.messageWin=%S is running out of disk space. Website contents may not display properly. You can clear stored site data in Options > Advanced > Site Data.
 spaceAlert.under5GB.okButton.label=OK, Got it
 spaceAlert.under5GB.okButton.accesskey=K
-spaceAlert.under5GB.description=Firefox is running out of disk space. Website contents may not display properly. Visit “Learn More” to optimize your disk usage for better browsing experience.
+# LOCALIZATION NOTE (spaceAlert.under5GB.message): %S = brandShortName
+spaceAlert.under5GB.message=%S is running out of disk space. Website contents may not display properly. Visit “Learn More” to optimize your disk usage for better browsing experience.
 
 # LOCALIZATION NOTE (featureEnableRequiresRestart, featureDisableRequiresRestart, restartTitle): %S = brandShortName
 featureEnableRequiresRestart=%S must restart to enable this feature.
 featureDisableRequiresRestart=%S must restart to disable this feature.
 shouldRestartTitle=Restart %S
 okToRestartButton=Restart %S now
 revertNoRestartButton=Revert
 
--- a/devtools/client/framework/target-from-url.js
+++ b/devtools/client/framework/target-from-url.js
@@ -1,45 +1,48 @@
 /* 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/. */
 
 "use strict";
 
-const { Cu, Ci } = require("chrome");
-
 const { TargetFactory } = require("devtools/client/framework/target");
 const { DebuggerServer } = require("devtools/server/main");
 const { DebuggerClient } = require("devtools/shared/client/main");
 const { Task } = require("devtools/shared/task");
 
 /**
  * Construct a Target for a given URL object having various query parameters:
  *
  * host:
  *    {String} The hostname or IP address to connect to.
  * port:
  *    {Number} The TCP port to connect to, to use with `host` argument.
  * ws:
  *    {Boolean} If true, connect via websocket instread of regular TCP connection.
  *
- * type: tab, process
- *    {String} The type of target to connect to.  Currently tabs and processes are supported types.
+ * type: tab, process, window
+ *    {String} The type of target to connect to.
  *
- * If type="tab":
+ * If type == "tab":
  * id:
  *    {Number} the tab outerWindowID
  * chrome: Optional
- *    {Boolean} Force the creation of a chrome target. Gives more privileges to the tab
- *    actor. Allows chrome execution in the webconsole and see chrome files in
- *    the debugger. (handy when contributing to firefox)
+ *    {Boolean} Force the creation of a chrome target. Gives more privileges to
+ *    the tab actor. Allows chrome execution in the webconsole and see chrome
+ *    files in the debugger. (handy when contributing to firefox)
  *
- * If type="process":
+ * If type == "process":
  * id:
- *    {Number} the process id to debug. Default to 0, which is the parent process.
+ *    {Number} the process id to debug. Default to 0, which is the parent
+ *    process.
+ *
+ * If type == "window":
+ * id:
+ *    {Number} the window outerWindowID
  *
  * @param {URL} url
  *        The url to fetch query params from.
  *
  * @return A target object
  */
 exports.targetFromURL = Task.async(function* (url) {
   let params = url.searchParams;
@@ -88,16 +91,36 @@ exports.targetFromURL = Task.async(funct
         isTabActor = false;
       }
     } catch (ex) {
       if (ex.error == "noProcess") {
         throw new Error("targetFromURL, process with id:'" + id + "' doesn't exist");
       }
       throw ex;
     }
+  } else if (type == "window") {
+    // Fetch target for a remote window actor
+    DebuggerServer.allowChromeProcess = true;
+    try {
+      id = parseInt(id, 10);
+      if (isNaN(id)) {
+        throw new Error("targetFromURL, window requires id parameter");
+      }
+      let response = yield client.mainRoot.getWindow({
+        outerWindowID: id,
+      });
+      form = response.window;
+      chrome = true;
+    } catch (ex) {
+      if (ex.error == "notFound") {
+        throw new Error(`targetFromURL, window with id:'${id}' ` +
+                        "doesn't exist");
+      }
+      throw ex;
+    }
   } else {
     throw new Error("targetFromURL, unsupported type='" + type + "' parameter");
   }
 
   return TargetFactory.forRemoteTab({ client, form, chrome, isTabActor });
 });
 
 function* createClient(params) {
--- a/devtools/client/framework/test/browser_target_from_url.js
+++ b/devtools/client/framework/test/browser_target_from_url.js
@@ -31,18 +31,29 @@ add_task(function* () {
   info("Test invalid type");
   try {
     yield targetFromURL(new URL("http://foo?type=x"));
     ok(false, "Shouldn't pass");
   } catch (e) {
     is(e.message, "targetFromURL, unsupported type='x' parameter");
   }
 
+  info("Test browser window");
+  let windowId = window.QueryInterface(Ci.nsIInterfaceRequestor)
+                       .getInterface(Ci.nsIDOMWindowUtils)
+                       .outerWindowID;
+  target = yield targetFromURL(new URL("http://foo?type=window&id=" + windowId));
+  is(target.url, window.location.href);
+  is(target.isLocalTab, false);
+  is(target.chrome, true);
+  is(target.isTabActor, true);
+  is(target.isRemote, true);
+
   info("Test tab");
-  let windowId = browser.outerWindowID;
+  windowId = browser.outerWindowID;
   target = yield targetFromURL(new URL("http://foo?type=tab&id=" + windowId));
   assertIsTabTarget(target, TEST_URI);
 
   info("Test tab with chrome privileges");
   target = yield targetFromURL(new URL("http://foo?type=tab&id=" + windowId + "&chrome"));
   assertIsTabTarget(target, TEST_URI, true);
 
   info("Test invalid tab id");
--- a/devtools/client/framework/toolbox-init.js
+++ b/devtools/client/framework/toolbox-init.js
@@ -1,12 +1,14 @@
 /* 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/. */
 
+/* eslint-env browser */
+
 "use strict";
 
 // URL constructor doesn't support about: scheme
 let href = window.location.href.replace("about:", "http://");
 let url = new window.URL(href);
 
 // Only use this method to attach the toolbox if some query parameters are given
 if (url.search.length > 1) {
@@ -21,16 +23,33 @@ if (url.search.length > 1) {
   const { DebuggerClient } = require("devtools/shared/client/main");
   const { Task } = require("devtools/shared/task");
 
   // `host` is the frame element loading the toolbox.
   let host = window.QueryInterface(Ci.nsIInterfaceRequestor)
                    .getInterface(Ci.nsIDOMWindowUtils)
                    .containerElement;
 
+  // If there's no containerElement (which happens when loading about:devtools-toolbox as
+  // a top level document), use the current window.
+  if (!host) {
+    host = {
+      contentWindow: window,
+      contentDocument: document,
+      // toolbox-host-manager.js wants to set attributes on the frame that contains it,
+      // but that is fine to skip and doesn't make sense when using the current window.
+      setAttribute() {},
+      ownerDocument: document,
+      // toolbox-host-manager.js wants to listen for unload events from outside the frame,
+      // but this is fine to skip since the toolbox code listens inside the frame as well,
+      // and there is no outer document in this case.
+      addEventListener() {},
+    };
+  }
+
   // Specify the default tool to open
   let tool = url.searchParams.get("tool");
 
   Task.spawn(function* () {
     let target;
     if (url.searchParams.has("target")) {
       // Attach toolbox to a given browser iframe (<xul:browser> or <html:iframe
       // mozbrowser>) whose reference is set on the host iframe.
--- a/devtools/client/inspector/layout/actions/grids.js
+++ b/devtools/client/inspector/layout/actions/grids.js
@@ -1,34 +1,51 @@
 /* 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/. */
 
 "use strict";
 
 const {
+  UPDATE_GRID_COLOR,
   UPDATE_GRID_HIGHLIGHTED,
   UPDATE_GRIDS,
 } = require("./index");
 
 module.exports = {
 
   /**
+   * Update the color used for the grid's highlighter.
+   *
+   * @param  {NodeFront} nodeFront
+   *         The NodeFront of the DOM node to toggle the grid highlighter.
+   * @param  {String} color
+   *         The color to use for thie nodeFront's grid highlighter.
+   */
+  updateGridColor(nodeFront, color) {
+    return {
+      type: UPDATE_GRID_COLOR,
+      color,
+      nodeFront,
+    };
+  },
+
+  /**
    * Update the grid highlighted state.
    *
    * @param  {NodeFront} nodeFront
    *         The NodeFront of the DOM node to toggle the grid highlighter.
    * @param  {Boolean} highlighted
    *         Whether or not the grid highlighter is highlighting the grid.
    */
   updateGridHighlighted(nodeFront, highlighted) {
     return {
       type: UPDATE_GRID_HIGHLIGHTED,
+      highlighted,
       nodeFront,
-      highlighted,
     };
   },
 
   /**
    * Update the grid state with the new list of grids.
    */
   updateGrids(grids) {
     return {
--- a/devtools/client/inspector/layout/actions/index.js
+++ b/devtools/client/inspector/layout/actions/index.js
@@ -3,16 +3,19 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
 const { createEnum } = require("devtools/client/shared/enum");
 
 createEnum([
 
+  // Update the color used for the overlay of a grid.
+  "UPDATE_GRID_COLOR",
+
   // Update the grid highlighted state.
   "UPDATE_GRID_HIGHLIGHTED",
 
   // Update the entire grids state with the new list of grids.
   "UPDATE_GRIDS",
 
   // Update the layout state with the latest layout properties.
   "UPDATE_LAYOUT",
--- a/devtools/client/inspector/layout/components/App.js
+++ b/devtools/client/inspector/layout/components/App.js
@@ -21,21 +21,23 @@ const BOXMODEL_STRINGS_URI = "devtools/c
 const BOXMODEL_L10N = new LocalizationHelper(BOXMODEL_STRINGS_URI);
 
 const App = createClass({
 
   displayName: "App",
 
   propTypes: {
     boxModel: PropTypes.shape(Types.boxModel).isRequired,
+    getSwatchColorPickerTooltip: PropTypes.func.isRequired,
     grids: PropTypes.arrayOf(PropTypes.shape(Types.grid)).isRequired,
     highlighterSettings: PropTypes.shape(Types.highlighterSettings).isRequired,
     showBoxModelProperties: PropTypes.bool.isRequired,
+    onHideBoxModelHighlighter: PropTypes.func.isRequired,
+    onSetGridOverlayColor: PropTypes.func.isRequired,
     onShowBoxModelEditor: PropTypes.func.isRequired,
-    onHideBoxModelHighlighter: PropTypes.func.isRequired,
     onShowBoxModelHighlighter: PropTypes.func.isRequired,
     onToggleGridHighlighter: PropTypes.func.isRequired,
     onToggleShowGridLineNumbers: PropTypes.func.isRequired,
     onToggleShowInfiniteLines: PropTypes.func.isRequired,
   },
 
   mixins: [ addons.PureRenderMixin ],
 
--- a/devtools/client/inspector/layout/components/Grid.js
+++ b/devtools/client/inspector/layout/components/Grid.js
@@ -13,41 +13,47 @@ const GridList = createFactory(require("
 const Types = require("../types");
 const { getStr } = require("../utils/l10n");
 
 module.exports = createClass({
 
   displayName: "Grid",
 
   propTypes: {
+    getSwatchColorPickerTooltip: PropTypes.func.isRequired,
     grids: PropTypes.arrayOf(PropTypes.shape(Types.grid)).isRequired,
     highlighterSettings: PropTypes.shape(Types.highlighterSettings).isRequired,
+    onSetGridOverlayColor: PropTypes.func.isRequired,
     onToggleGridHighlighter: PropTypes.func.isRequired,
     onToggleShowGridLineNumbers: PropTypes.func.isRequired,
     onToggleShowInfiniteLines: PropTypes.func.isRequired,
   },
 
   mixins: [ addons.PureRenderMixin ],
 
   render() {
     let {
+      getSwatchColorPickerTooltip,
       grids,
       highlighterSettings,
+      onSetGridOverlayColor,
       onToggleGridHighlighter,
       onToggleShowGridLineNumbers,
       onToggleShowInfiniteLines,
     } = this.props;
 
     return grids.length ?
       dom.div(
         {
           id: "layout-grid-container",
         },
         GridList({
+          getSwatchColorPickerTooltip,
           grids,
+          onSetGridOverlayColor,
           onToggleGridHighlighter,
         }),
         GridDisplaySettings({
           highlighterSettings,
           onToggleShowGridLineNumbers,
           onToggleShowInfiniteLines,
         })
       )
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/layout/components/GridItem.js
@@ -0,0 +1,118 @@
+/* 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/. */
+
+"use strict";
+
+const { addons, createClass, DOM: dom, PropTypes } = require("devtools/client/shared/vendor/react");
+const { findDOMNode } = require("devtools/client/shared/vendor/react-dom");
+
+const Types = require("../types");
+
+module.exports = createClass({
+
+  displayName: "GridItem",
+
+  propTypes: {
+    getSwatchColorPickerTooltip: PropTypes.func.isRequired,
+    grid: PropTypes.shape(Types.grid).isRequired,
+    onSetGridOverlayColor: PropTypes.func.isRequired,
+    onToggleGridHighlighter: PropTypes.func.isRequired,
+  },
+
+  mixins: [ addons.PureRenderMixin ],
+
+  componentDidMount() {
+    let tooltip = this.props.getSwatchColorPickerTooltip();
+    let swatchEl = findDOMNode(this).querySelector(".grid-color-swatch");
+
+    let previousColor;
+    tooltip.addSwatch(swatchEl, {
+      onCommit: this.setGridColor,
+      onPreview: this.setGridColor,
+      onRevert: () => {
+        this.props.onSetGridOverlayColor(this.props.grid.nodeFront, previousColor);
+      },
+      onShow: () => {
+        previousColor = this.props.grid.color;
+      },
+    });
+  },
+
+  componentWillUnmount() {
+    let tooltip = this.props.getSwatchColorPickerTooltip();
+    let swatchEl = findDOMNode(this).querySelector(".grid-color-swatch");
+    tooltip.removeSwatch(swatchEl);
+  },
+
+  setGridColor() {
+    let color = findDOMNode(this).querySelector(".grid-color-value").textContent;
+    this.props.onSetGridOverlayColor(this.props.grid.nodeFront, color);
+  },
+
+  onGridCheckboxClick() {
+    let {
+      grid,
+      onToggleGridHighlighter,
+    } = this.props;
+
+    onToggleGridHighlighter(grid.nodeFront);
+  },
+
+  render() {
+    let { grid } = this.props;
+    let { nodeFront } = grid;
+    let { displayName, attributes } = nodeFront;
+
+    let gridName = displayName;
+
+    let idIndex = attributes.findIndex(({ name }) => name === "id");
+    if (idIndex > -1 && attributes[idIndex].value) {
+      gridName += "#" + attributes[idIndex].value;
+    }
+
+    let classIndex = attributes.findIndex(({name}) => name === "class");
+    if (classIndex > -1 && attributes[classIndex].value) {
+      gridName += "." + attributes[classIndex].value.split(" ").join(".");
+    }
+
+    return dom.li(
+      {
+        key: grid.id,
+        className: "grid-item",
+      },
+      dom.label(
+        {},
+        dom.input(
+          {
+            type: "checkbox",
+            value: grid.id,
+            checked: grid.highlighted,
+            onChange: this.onGridCheckboxClick,
+          }
+        ),
+        gridName
+      ),
+      dom.div(
+        {
+          className: "grid-color-swatch",
+          style: {
+            backgroundColor: grid.color,
+          },
+          title: grid.color,
+        }
+      ),
+      // The SwatchColorPicker relies on the nextSibling of the swatch element to apply
+      // the selected color. This is why we use a span in display: none for now.
+      // Ideally we should modify the SwatchColorPickerTooltip to bypass this requirement.
+      // See https://bugzilla.mozilla.org/show_bug.cgi?id=1341578
+      dom.span(
+        {
+          className: "grid-color-value"
+        },
+        grid.color
+      )
+    );
+  },
+
+});
--- a/devtools/client/inspector/layout/components/GridList.js
+++ b/devtools/client/inspector/layout/components/GridList.js
@@ -1,87 +1,56 @@
 /* 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/. */
 
 "use strict";
 
-const { addons, createClass, DOM: dom, PropTypes } =
+const { addons, createClass, createFactory, DOM: dom, PropTypes } =
   require("devtools/client/shared/vendor/react");
 
+const GridItem = createFactory(require("./GridItem"));
+
 const Types = require("../types");
 const { getStr } = require("../utils/l10n");
 
 module.exports = createClass({
 
   displayName: "GridList",
 
   propTypes: {
+    getSwatchColorPickerTooltip: PropTypes.func.isRequired,
     grids: PropTypes.arrayOf(PropTypes.shape(Types.grid)).isRequired,
+    onSetGridOverlayColor: PropTypes.func.isRequired,
     onToggleGridHighlighter: PropTypes.func.isRequired,
   },
 
   mixins: [ addons.PureRenderMixin ],
 
-  onGridCheckboxClick({ target }) {
-    let {
-      grids,
-      onToggleGridHighlighter,
-    } = this.props;
-
-    onToggleGridHighlighter(grids[target.value].nodeFront);
-  },
-
   render() {
     let {
+      getSwatchColorPickerTooltip,
       grids,
+      onSetGridOverlayColor,
+      onToggleGridHighlighter,
     } = this.props;
 
     return dom.div(
       {
         className: "grid-container",
       },
       dom.span(
         {},
         getStr("layout.overlayGrid")
       ),
       dom.ul(
         {},
-        grids.map(grid => {
-          let { nodeFront } = grid;
-          let { displayName, attributes } = nodeFront;
-
-          let gridName = displayName;
-
-          let idIndex = attributes.findIndex(({ name }) => name === "id");
-          if (idIndex > -1 && attributes[idIndex].value) {
-            gridName += "#" + attributes[idIndex].value;
-          }
-
-          let classIndex = attributes.findIndex(({name}) => name === "class");
-          if (classIndex > -1 && attributes[classIndex].value) {
-            gridName += "." + attributes[classIndex].value.split(" ").join(".");
-          }
-
-          return dom.li(
-            {
-              key: grid.id,
-            },
-            dom.label(
-              {},
-              dom.input(
-                {
-                  type: "checkbox",
-                  value: grid.id,
-                  checked: grid.highlighted,
-                  onChange: this.onGridCheckboxClick,
-                }
-              ),
-              gridName
-            )
-          );
-        })
+        grids.map(grid => GridItem({
+          getSwatchColorPickerTooltip,
+          grid,
+          onSetGridOverlayColor,
+          onToggleGridHighlighter,
+        }))
       )
     );
   },
 
 });
-
--- a/devtools/client/inspector/layout/components/moz.build
+++ b/devtools/client/inspector/layout/components/moz.build
@@ -11,10 +11,11 @@ DevToolsModules(
     'BoxModel.js',
     'BoxModelEditable.js',
     'BoxModelInfo.js',
     'BoxModelMain.js',
     'BoxModelProperties.js',
     'ComputedProperty.js',
     'Grid.js',
     'GridDisplaySettings.js',
+    'GridItem.js',
     'GridList.js',
 )
--- a/devtools/client/inspector/layout/layout.js
+++ b/devtools/client/inspector/layout/layout.js
@@ -8,20 +8,23 @@ const Services = require("Services");
 const { Task } = require("devtools/shared/task");
 const { getCssProperties } = require("devtools/shared/fronts/css-properties");
 const { ReflowFront } = require("devtools/shared/fronts/reflow");
 
 const { InplaceEditor } = require("devtools/client/shared/inplace-editor");
 const { createFactory, createElement } = require("devtools/client/shared/vendor/react");
 const { Provider } = require("devtools/client/shared/vendor/react-redux");
 
+const SwatchColorPickerTooltip = require("devtools/client/shared/widgets/tooltip/SwatchColorPickerTooltip");
+
 const {
   updateLayout,
 } = require("./actions/box-model");
 const {
+  updateGridColor,
   updateGridHighlighted,
   updateGrids,
 } = require("./actions/grids");
 const {
   updateShowGridLineNumbers,
   updateShowInfiniteLines,
 } = require("./actions/highlighter-settings");
 
@@ -32,16 +35,28 @@ const EditingSession = require("./utils/
 const { LocalizationHelper } = require("devtools/shared/l10n");
 const INSPECTOR_L10N =
   new LocalizationHelper("devtools/client/locales/inspector.properties");
 
 const NUMERIC = /^-?[\d\.]+$/;
 const SHOW_GRID_LINE_NUMBERS = "devtools.gridinspector.showGridLineNumbers";
 const SHOW_INFINITE_LINES_PREF = "devtools.gridinspector.showInfiniteLines";
 
+// Default grid colors.
+const GRID_COLORS = [
+  "#05E4EE",
+  "#BB9DFF",
+  "#FFB53B",
+  "#71F362",
+  "#FF90FF",
+  "#FF90FF",
+  "#1B80FF",
+  "#FF2647"
+];
+
 function LayoutView(inspector, window) {
   this.document = window.document;
   this.highlighters = inspector.highlighters;
   this.inspector = inspector;
   this.store = inspector.store;
   this.walker = this.inspector.walker;
 
   this.updateBoxModel = this.updateBoxModel.bind(this);
@@ -69,32 +84,71 @@ LayoutView.prototype = {
     if (!this.inspector) {
       return;
     }
 
     this.layoutInspector = yield this.inspector.walker.getLayoutInspector();
 
     this.loadHighlighterSettings();
 
+    // Create a shared SwatchColorPicker instance to be reused by all GridItem components.
+    this.swatchColorPickerTooltip = new SwatchColorPickerTooltip(
+      this.inspector.toolbox.doc,
+      this.inspector,
+      {
+        supportsCssColor4ColorFunction: () => false
+      }
+    );
+
     let app = App({
       /**
+       * Retrieve the shared SwatchColorPicker instance.
+       */
+      getSwatchColorPickerTooltip: () => {
+        return this.swatchColorPickerTooltip;
+      },
+
+      /**
        * Shows the box model properties under the box model if true, otherwise, hidden by
        * default.
        */
       showBoxModelProperties: true,
 
       /**
        * Hides the box-model highlighter on the currently selected element.
        */
       onHideBoxModelHighlighter: () => {
         let toolbox = this.inspector.toolbox;
         toolbox.highlighterUtils.unhighlight();
       },
 
       /**
+       * Handler for a change in the grid overlay color picker for a grid container.
+       *
+       * @param  {NodeFront} node
+       *         The NodeFront of the grid container element for which the grid color is
+       *         being updated.
+       * @param  {String} color
+       *         A hex string representing the color to use.
+       */
+      onSetGridOverlayColor: (node, color) => {
+        this.store.dispatch(updateGridColor(node, color));
+        let { grids } = this.store.getState();
+
+        // If the grid for which the color was updated currently has a highlighter, update
+        // the color.
+        for (let grid of grids) {
+          if (grid.nodeFront === node && grid.highlighted) {
+            let highlighterSettings = this.getGridHighlighterSettings(node);
+            this.highlighters.showGridHighlighter(node, highlighterSettings);
+          }
+        }
+      },
+
+      /**
        * Shows the inplace editor when a box model editable value is clicked on the
        * box model panel.
        *
        * @param  {DOMNode} element
        *         The element that was clicked.
        * @param  {Event} event
        *         The event object.
        * @param  {String} property
@@ -175,37 +229,38 @@ LayoutView.prototype = {
        * Handler for a change in the input checkboxes in the GridList component.
        * Toggles on/off the grid highlighter for the provided grid container element.
        *
        * @param  {NodeFront} node
        *         The NodeFront of the grid container element for which the grid
        *         highlighter is toggled on/off for.
        */
       onToggleGridHighlighter: node => {
-        let { highlighterSettings } = this.store.getState();
+        let highlighterSettings = this.getGridHighlighterSettings(node);
         this.highlighters.toggleGridHighlighter(node, highlighterSettings);
       },
 
       /**
        * Handler for a change in the show grid line numbers checkbox in the
-       * GridDisplaySettings component. TOggles on/off the option to show the grid line
+       * GridDisplaySettings component. Toggles on/off the option to show the grid line
        * numbers in the grid highlighter. Refreshes the shown grid highlighter for the
        * grids currently highlighted.
        *
        * @param  {Boolean} enabled
        *         Whether or not the grid highlighter should show the grid line numbers.
        */
       onToggleShowGridLineNumbers: enabled => {
         this.store.dispatch(updateShowGridLineNumbers(enabled));
         Services.prefs.setBoolPref(SHOW_GRID_LINE_NUMBERS, enabled);
 
-        let { grids, highlighterSettings } = this.store.getState();
+        let { grids } = this.store.getState();
 
         for (let grid of grids) {
           if (grid.highlighted) {
+            let highlighterSettings = this.getGridHighlighterSettings(grid.nodeFront);
             this.highlighters.showGridHighlighter(grid.nodeFront, highlighterSettings);
           }
         }
       },
 
       /**
        * Handler for a change in the extend grid lines infinitely checkbox in the
        * GridDisplaySettings component. Toggles on/off the option to extend the grid
@@ -214,24 +269,25 @@ LayoutView.prototype = {
        *
        * @param  {Boolean} enabled
        *         Whether or not the grid highlighter should extend grid lines infinitely.
        */
       onToggleShowInfiniteLines: enabled => {
         this.store.dispatch(updateShowInfiniteLines(enabled));
         Services.prefs.setBoolPref(SHOW_INFINITE_LINES_PREF, enabled);
 
-        let { grids, highlighterSettings } = this.store.getState();
+        let { grids } = this.store.getState();
 
         for (let grid of grids) {
           if (grid.highlighted) {
+            let highlighterSettings = this.getGridHighlighterSettings(grid.nodeFront);
             this.highlighters.showGridHighlighter(grid.nodeFront, highlighterSettings);
           }
         }
-      },
+      }
     });
 
     let provider = createElement(Provider, {
       store: this.store,
       id: "layoutview",
       title: INSPECTOR_L10N.getStr("inspector.sidebar.layoutViewTitle2"),
       key: "layoutview",
     }, app);
@@ -266,16 +322,53 @@ LayoutView.prototype = {
     this.document = null;
     this.inspector = null;
     this.layoutInspector = null;
     this.store = null;
     this.walker = null;
   },
 
   /**
+   * Returns the color set for the grid highlighter associated with the provided
+   * nodeFront.
+   *
+   * @param  {NodeFront} nodeFront
+   *         The NodeFront for which we need the color.
+   */
+  getGridColorForNodeFront(nodeFront) {
+    let { grids } = this.store.getState();
+
+    for (let grid of grids) {
+      if (grid.nodeFront === nodeFront) {
+        return grid.color;
+      }
+    }
+
+    return null;
+  },
+
+  /**
+   * Create a highlighter settings object for the provided nodeFront.
+   *
+   * @param  {NodeFront} nodeFront
+   *         The NodeFront for which we need highlighter settings.
+   */
+  getGridHighlighterSettings(nodeFront) {
+    let { highlighterSettings } = this.store.getState();
+
+    // Get the grid color for the provided nodeFront.
+    let color = this.getGridColorForNodeFront(nodeFront);
+
+    // Merge the grid color to the generic highlighter settings.
+    return Object.assign({}, highlighterSettings, {
+      color
+    });
+  },
+
+  /**
    * Returns true if the layout panel is visible, and false otherwise.
    */
   isPanelVisible() {
     return this.inspector.toolbox.currentToolId === "inspector" &&
            this.inspector.sidebar &&
            this.inspector.sidebar.getCurrentTabID() === "layoutview";
   },
 
@@ -386,18 +479,22 @@ LayoutView.prototype = {
       gridFronts = yield this.layoutInspector.getAllGrids(this.walker.rootNode);
     }
 
     let grids = [];
     for (let i = 0; i < gridFronts.length; i++) {
       let grid = gridFronts[i];
       let nodeFront = yield this.walker.getNodeFromActor(grid.actorID, ["containerEl"]);
 
+      let fallbackColor = GRID_COLORS[i % GRID_COLORS.length];
+      let color = this.getGridColorForNodeFront(nodeFront) || fallbackColor;
+
       grids.push({
         id: i,
+        color,
         gridFragments: grid.gridFragments,
         highlighted: nodeFront == this.highlighters.gridHighlighterShown,
         nodeFront,
       });
     }
 
     this.store.dispatch(updateGrids(grids));
   }),
--- a/devtools/client/inspector/layout/reducers/grids.js
+++ b/devtools/client/inspector/layout/reducers/grids.js
@@ -1,37 +1,44 @@
 /* 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/. */
 
 "use strict";
 
 const {
+  UPDATE_GRID_COLOR,
   UPDATE_GRID_HIGHLIGHTED,
   UPDATE_GRIDS,
 } = require("../actions/index");
 
 const INITIAL_GRIDS = [];
 
 let reducers = {
 
-  [UPDATE_GRID_HIGHLIGHTED](grids, { nodeFront, highlighted }) {
+  [UPDATE_GRID_COLOR](grids, { nodeFront, color }) {
     let newGrids = grids.map(g => {
       if (g.nodeFront == nodeFront) {
-        g.highlighted = highlighted;
-      } else {
-        g.highlighted = false;
+        g.color = color;
       }
 
       return g;
     });
 
     return newGrids;
   },
 
+  [UPDATE_GRID_HIGHLIGHTED](grids, { nodeFront, highlighted }) {
+    return grids.map(g => {
+      return Object.assign({}, g, {
+        highlighted: g.nodeFront === nodeFront ? highlighted : false
+      });
+    });
+  },
+
   [UPDATE_GRIDS](_, { grids }) {
     return grids;
   },
 
 };
 
 module.exports = function (grids = INITIAL_GRIDS, action) {
   let reducer = reducers[action.type];
--- a/devtools/client/inspector/layout/types.js
+++ b/devtools/client/inspector/layout/types.js
@@ -19,16 +19,19 @@ exports.boxModel = {
 /**
  * A single grid container in the document.
  */
 exports.grid = {
 
   // The id of the grid
   id: PropTypes.number,
 
+  // The color for the grid overlay highlighter
+  color: PropTypes.string,
+
   // The grid fragment object of the grid container
   gridFragments: PropTypes.array,
 
   // Whether or not the grid highlighter is highlighting the grid
   highlighted: PropTypes.bool,
 
   // The node front of the grid container
   nodeFront: PropTypes.object,
--- a/devtools/client/themes/layout.css
+++ b/devtools/client/themes/layout.css
@@ -47,8 +47,34 @@
  * Container when no grids are present
  */
 
 .layout-no-grids {
   font-style: italic;
   text-align: center;
   padding: 0.5em;
 }
+
+/**
+ * Grid Item
+ */
+
+.grid-item {
+  display: flex;
+  align-items: center;
+}
+
+.grid-item input {
+  margin: 0 5px;
+}
+
+.grid-color-swatch {
+  width: 12px;
+  height: 12px;
+  margin-left: 5px;
+  border: 1px solid var(--theme-highlight-gray);
+  border-radius: 50%;
+  cursor: pointer;
+}
+
+.grid-color-value {
+  display: none;
+}
--- a/devtools/server/actors/highlighters/css-grid.js
+++ b/devtools/server/actors/highlighters/css-grid.js
@@ -16,38 +16,40 @@ const {
 const {
   getCurrentZoom,
   setIgnoreLayoutChanges,
   getWindowDimensions
 } = require("devtools/shared/layout/utils");
 const { stringifyGridFragments } = require("devtools/server/actors/utils/css-grid-utils");
 
 const CSS_GRID_ENABLED_PREF = "layout.css.grid.enabled";
+const DEFAULT_GRID_COLOR = "#4B0082";
 const ROWS = "rows";
 const COLUMNS = "cols";
+
 const GRID_LINES_PROPERTIES = {
   "edge": {
     lineDash: [0, 0],
-    strokeStyle: "#4B0082"
+    alpha: 1,
   },
   "explicit": {
     lineDash: [5, 3],
-    strokeStyle: "#8A2BE2"
+    alpha: 0.75,
   },
   "implicit": {
     lineDash: [2, 2],
-    strokeStyle: "#9370DB"
+    alpha: 0.5,
   }
 };
 
 // px
 const GRID_GAP_PATTERN_WIDTH = 14;
 const GRID_GAP_PATTERN_HEIGHT = 14;
 const GRID_GAP_PATTERN_LINE_DASH = [5, 3];
-const GRID_GAP_PATTERN_STROKE_STYLE = "#9370DB";
+const GRID_GAP_ALPHA = 0.5;
 
 /**
  * Cached used by `CssGridHighlighter.getGridGapPattern`.
  */
 const gCachedGridPattern = new WeakMap();
 // WeakMap key for the Row grid pattern.
 const ROW_KEY = {};
 // WeakMap key for the Column grid pattern.
@@ -59,16 +61,19 @@ const COLUMN_KEY = {};
  *
  * Usage example:
  * let h = new CssGridHighlighter(env);
  * h.show(node, options);
  * h.hide();
  * h.destroy();
  *
  * Available Options:
+ * - color(colorValue)
+ *     @param  {String} colorValue
+ *     The color that should be used to draw the highlighter for this grid.
  * - showGridArea(areaName)
  *     @param  {String} areaName
  *     Shows the grid area highlight for the given area name.
  * - showAllGridAreas
  *     Shows all the grid area highlights for the current grid.
  * - showGridLineNumbers(isShown)
  *     @param  {Boolean}
  *     Displays the grid line numbers on the grid lines if isShown is true.
@@ -246,16 +251,20 @@ CssGridHighlighter.prototype = extend(Au
   get ctx() {
     return this.canvas.getCanvasContext("2d");
   },
 
   get canvas() {
     return this.getElement("canvas");
   },
 
+  get color() {
+    return this.options.color || DEFAULT_GRID_COLOR;
+  },
+
   /**
    * Gets the grid gap pattern used to render the gap regions.
    *
    * @param  {Object} dimension
    *         Refers to the WeakMap key for the grid dimension type which is either the
    *         constant COLUMN or ROW.
    * @return {CanvasPattern} grid gap pattern.
    */
@@ -265,60 +274,70 @@ CssGridHighlighter.prototype = extend(Au
     }
 
     // Create the diagonal lines pattern for the rendering the grid gaps.
     let canvas = createNode(this.win, { nodeType: "canvas" });
     canvas.width = GRID_GAP_PATTERN_WIDTH;
     canvas.height = GRID_GAP_PATTERN_HEIGHT;
 
     let ctx = canvas.getContext("2d");
+    ctx.save();
     ctx.setLineDash(GRID_GAP_PATTERN_LINE_DASH);
     ctx.beginPath();
     ctx.translate(.5, .5);
 
     if (dimension === COLUMN_KEY) {
       ctx.moveTo(0, 0);
       ctx.lineTo(GRID_GAP_PATTERN_WIDTH, GRID_GAP_PATTERN_HEIGHT);
     } else {
       ctx.moveTo(GRID_GAP_PATTERN_WIDTH, 0);
       ctx.lineTo(0, GRID_GAP_PATTERN_HEIGHT);
     }
 
-    ctx.strokeStyle = GRID_GAP_PATTERN_STROKE_STYLE;
+    ctx.strokeStyle = this.color;
+    ctx.globalAlpha = GRID_GAP_ALPHA;
     ctx.stroke();
+    ctx.restore();
 
     let pattern = ctx.createPattern(canvas, "repeat");
     gCachedGridPattern.set(dimension, pattern);
     return pattern;
   },
 
   /**
    * Called when the page navigates. Used to clear the cached gap patterns and avoid
    * using DeadWrapper objects as gap patterns the next time.
    */
   onNavigate() {
-    gCachedGridPattern.delete(ROW_KEY);
-    gCachedGridPattern.delete(COLUMN_KEY);
+    this._clearCache();
   },
 
   onWillNavigate({ isTopLevel }) {
     if (isTopLevel) {
       this.hide();
     }
   },
 
   _show() {
     if (Services.prefs.getBoolPref(CSS_GRID_ENABLED_PREF) && !this.isGrid()) {
       this.hide();
       return false;
     }
 
+    // The grid pattern cache should be cleared in case the color changed.
+    this._clearCache();
+
     return this._update();
   },
 
+  _clearCache() {
+    gCachedGridPattern.delete(ROW_KEY);
+    gCachedGridPattern.delete(COLUMN_KEY);
+  },
+
   /**
    * Shows the grid area highlight for the given area name.
    *
    * @param  {String} areaName
    *         Grid area name.
    */
   showGridArea(areaName) {
     this.renderGridArea(areaName);
@@ -605,17 +624,19 @@ CssGridHighlighter.prototype = extend(Au
     if (dimensionType === COLUMNS) {
       this.ctx.moveTo(linePos, startPos);
       this.ctx.lineTo(linePos, endPos);
     } else {
       this.ctx.moveTo(startPos, linePos);
       this.ctx.lineTo(endPos, linePos);
     }
 
-    this.ctx.strokeStyle = GRID_LINES_PROPERTIES[lineType].strokeStyle;
+    this.ctx.strokeStyle = this.color;
+    this.ctx.globalAlpha = GRID_LINES_PROPERTIES[lineType].alpha;
+
     this.ctx.stroke();
     this.ctx.restore();
   },
 
   /**
    * Render the grid line number on the css grid highlighter canvas.
    *
    * @param  {Number} lineNumber
@@ -626,21 +647,26 @@ CssGridHighlighter.prototype = extend(Au
    * @param  {Number} startPos
    *         The start position of the cross side of the grid line.
    * @param  {String} dimensionType
    *         The grid dimension type which is either the constant COLUMNS or ROWS.
    */
   renderGridLineNumber(lineNumber, linePos, startPos, dimensionType) {
     this.ctx.save();
 
+    let textWidth = this.ctx.measureText(lineNumber).width;
+    // Guess the font height based on the measured width
+    let textHeight = textWidth * 2;
+
     if (dimensionType === COLUMNS) {
-      this.ctx.fillText(lineNumber, linePos, startPos);
+      let yPos = Math.max(startPos, textHeight);
+      this.ctx.fillText(lineNumber, linePos, yPos);
     } else {
-      let textWidth = this.ctx.measureText(lineNumber).width;
-      this.ctx.fillText(lineNumber, startPos - textWidth, linePos);
+      let xPos = Math.max(startPos, textWidth);
+      this.ctx.fillText(lineNumber, xPos - textWidth, linePos);
     }
 
     this.ctx.restore();
   },
 
   /**
    * Render the grid gap area on the css grid highlighter canvas.
    *
--- a/devtools/server/actors/moz.build
+++ b/devtools/server/actors/moz.build
@@ -61,16 +61,17 @@ DevToolsModules(
     'tab.js',
     'timeline.js',
     'webaudio.js',
     'webbrowser.js',
     'webconsole.js',
     'webextension-inspected-window.js',
     'webextension.js',
     'webgl.js',
+    'window.js',
     'worker-list.js',
     'worker.js',
 )
 
 with Files('animation.js'):
     BUG_COMPONENT = ('Firefox', 'Developer Tools: Animation Inspector')
 
 with Files('breakpoint.js'):
--- a/devtools/server/actors/root.js
+++ b/devtools/server/actors/root.js
@@ -2,23 +2,26 @@
 /* vim: set ft=javascript ts=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/. */
 
 "use strict";
 
 const { Cc, Ci, Cu } = require("chrome");
+const Services = require("Services");
 const { ActorPool, appendExtraActors, createExtraActors } = require("devtools/server/actors/common");
 const { DebuggerServer } = require("devtools/server/main");
 
 loader.lazyGetter(this, "ppmm", () => {
   return Cc["@mozilla.org/parentprocessmessagemanager;1"].getService(
     Ci.nsIMessageBroadcaster);
 });
+loader.lazyRequireGetter(this, "WindowActor",
+  "devtools/server/actors/window", true);
 
 /* Root actor for the remote debugging protocol. */
 
 /**
  * Create a remote debugging protocol root actor.
  *
  * @param connection
  *     The DebuggerServerConnection whose root actor we are constructing.
@@ -162,22 +165,25 @@ RootActor.prototype = {
     // grabbing allocations from the MemoryActor are available for the performance tool
     memoryActorAllocations: true,
     // Added in Gecko 40, indicating that the backend isn't stupid about
     // sending resumption packets on tab navigation.
     noNeedToFakeResumptionOnNavigation: true,
     // Added in Firefox 40. Indicates that the backend supports registering custom
     // commands through the WebConsoleCommands API.
     webConsoleCommands: true,
-    // Whether root actor exposes tab actors
-    // if allowChromeProcess is true, you can fetch a ChromeActor instance
-    // to debug chrome and any non-content ressource via getProcess request
-    // if allocChromeProcess is defined, but not true, it means that root actor
-    // no longer expose tab actors, but also that getProcess forbids
-    // exposing actors for security reasons
+    // Whether root actor exposes tab actors and access to any window.
+    // If allowChromeProcess is true, you can:
+    // * get a ChromeActor instance to debug chrome and any non-content
+    //   resource via getProcess requests
+    // * get a WindowActor instance to debug windows which could be chrome,
+    //   like browser windows via getWindow requests
+    // If allowChromeProcess is defined, but not true, it means that root actor
+    // no longer expose tab actors, but also that the above requests are
+    // forbidden for security reasons.
     get allowChromeProcess() {
       return DebuggerServer.allowChromeProcess;
     },
     // Whether or not `getProfile()` supports specifying a `startTime`
     // and `endTime` to filter out samples. Fx40+
     profilerDataFilterable: true,
     // Whether or not the MemoryActor's heap snapshot abilities are
     // fully equipped to handle heap snapshots for the memory tool. Fx44+
@@ -227,16 +233,17 @@ RootActor.prototype = {
     }
     if (typeof this._parameters.onShutdown === "function") {
       this._parameters.onShutdown();
     }
     this._extraActors = null;
     this.conn = null;
     this._tabActorPool = null;
     this._globalActorPool = null;
+    this._windowActorPool = null;
     this._parameters = null;
     this._chromeActor = null;
     this._processActors.clear();
   },
 
   /* The 'listTabs' request and the 'tabListChanged' notification. */
 
   /**
@@ -333,16 +340,48 @@ RootActor.prototype = {
                     }
                     return {
                       error: "noTab",
                       message: "Unexpected error while calling getTab(): " + error
                     };
                   });
   },
 
+  onGetWindow: function ({ outerWindowID }) {
+    if (!DebuggerServer.allowChromeProcess) {
+      return {
+        from: this.actorID,
+        error: "forbidden",
+        message: "You are not allowed to debug windows."
+      };
+    }
+    let window = Services.wm.getOuterWindowWithId(outerWindowID);
+    if (!window) {
+      return {
+        from: this.actorID,
+        error: "notFound",
+        message: `No window found with outerWindowID ${outerWindowID}`,
+      };
+    }
+
+    if (!this._windowActorPool) {
+      this._windowActorPool = new ActorPool(this.conn);
+      this.conn.addActorPool(this._windowActorPool);
+    }
+
+    let actor = new WindowActor(this.conn, window);
+    actor.parentID = this.actorID;
+    this._windowActorPool.addActor(actor);
+
+    return {
+      from: this.actorID,
+      window: actor.form(),
+    };
+  },
+
   onTabListChanged: function () {
     this.conn.send({ from: this.actorID, type: "tabListChanged" });
     /* It's a one-shot notification; no need to watch any more. */
     this._parameters.tabList.onListChanged = null;
   },
 
   onListAddons: function () {
     let addonList = this._parameters.addonList;
@@ -534,16 +573,17 @@ RootActor.prototype = {
       delete this._extraActors[name];
     }
   }
 };
 
 RootActor.prototype.requestTypes = {
   "listTabs": RootActor.prototype.onListTabs,
   "getTab": RootActor.prototype.onGetTab,
+  "getWindow": RootActor.prototype.onGetWindow,
   "listAddons": RootActor.prototype.onListAddons,
   "listWorkers": RootActor.prototype.onListWorkers,
   "listServiceWorkerRegistrations": RootActor.prototype.onListServiceWorkerRegistrations,
   "listProcesses": RootActor.prototype.onListProcesses,
   "getProcess": RootActor.prototype.onGetProcess,
   "echo": RootActor.prototype.onEcho,
   "protocolDescription": RootActor.prototype.onProtocolDescription
 };
new file mode 100644
--- /dev/null
+++ b/devtools/server/actors/window.js
@@ -0,0 +1,83 @@
+/* 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/. */
+
+"use strict";
+
+const { Ci } = require("chrome");
+const Services = require("Services");
+const { TabActor } = require("./tab");
+
+/**
+ * Creates a WindowActor for debugging a single window, like a browser window in Firefox,
+ * but it can be used to reach any window in the process.  (Currently this is parent
+ * process only because the root actor's `onGetWindow` doesn't try to cross process
+ * boundaries.)  Both chrome and content windows are supported.
+ *
+ * Most of the implementation is inherited from TabActor.  WindowActor exposes all tab
+ * actors via its form() request, like TabActor.
+ *
+ * You can request a specific window's actor via RootActor.getWindow().
+ *
+ * @param connection DebuggerServerConnection
+ *        The connection to the client.
+ * @param window DOMWindow
+ *        The window.
+ */
+function WindowActor(connection, window) {
+  TabActor.call(this, connection);
+
+  let docShell = window.QueryInterface(Ci.nsIInterfaceRequestor)
+                       .getInterface(Ci.nsIDocShell);
+  Object.defineProperty(this, "docShell", {
+    value: docShell,
+    configurable: true
+  });
+}
+
+WindowActor.prototype = Object.create(TabActor.prototype);
+
+// Bug 1266561: This setting is mysteriously named, we should split up the
+// functionality that is triggered by it.
+WindowActor.prototype.isRootActor = true;
+
+WindowActor.prototype.observe = function (subject, topic, data) {
+  TabActor.prototype.observe.call(this, subject, topic, data);
+  if (!this.attached) {
+    return;
+  }
+  if (topic == "chrome-webnavigation-destroy") {
+    this._onDocShellDestroy(subject);
+  }
+};
+
+WindowActor.prototype._attach = function () {
+  if (this.attached) {
+    return false;
+  }
+
+  TabActor.prototype._attach.call(this);
+
+  // Listen for chrome docshells in addition to content docshells
+  if (this.docShell.itemType == Ci.nsIDocShellTreeItem.typeChrome) {
+    Services.obs.addObserver(this, "chrome-webnavigation-destroy", false);
+  }
+
+  return true;
+};
+
+WindowActor.prototype._detach = function () {
+  if (!this.attached) {
+    return false;
+  }
+
+  if (this.docShell.itemType == Ci.nsIDocShellTreeItem.typeChrome) {
+    Services.obs.removeObserver(this, "chrome-webnavigation-destroy");
+  }
+
+  TabActor.prototype._detach.call(this);
+
+  return true;
+};
+
+exports.WindowActor = WindowActor;
--- a/devtools/server/docs/actor-hierarchy.md
+++ b/devtools/server/docs/actor-hierarchy.md
@@ -2,17 +2,18 @@
 
 To start with, actors are living within /devtools/server/actors/ folder.
 They are organized in a hierarchy for easier lifecycle/memory management:
 once a parent is removed from the pool, its children are removed as well.
 (See actor-registration.md for more information about how to implement one)
 
 The overall hierarchy of actors looks like this:
 
-  RootActor: First one, automatically instantiated when we start connecting.
+```
+RootActor: First one, automatically instantiated when we start connecting.
    |         Mostly meant to instantiate new actors.
    |
    |--> Global-scoped actors:
    |    Actors exposing features related to the main process,
    |    that are not specific to any particular context (document, tab, app,
    |    add-on, or worker).
    |    A good example is the preference actor.
    |
@@ -22,26 +23,28 @@ The overall hierarchy of actors looks li
           |    one of these for each thing you can point a toolbox at.
           |
           \--> Tab-scoped actors:
                Actors exposing one particular feature set, this time,
                specific to a given context (document, tab, app, add-on, or
                worker).  Examples include the console and inspector actors.
                These actors may extend this hierarchy by having their
                own children, like LongStringActor, WalkerActor, etc.
+```
 
 ## RootActor
 
 The root actor is special. It is automatically created when a client connects.
 It has a special `actorID` which is unique and is "root".
 All other actors have an `actorID` which is computed dynamically,
 so that you need to ask an existing actor to create an Actor
 and returns its `actorID`. That's the main role of RootActor.
 
-  RootActor (root.js)
+```
+RootActor (root.js)
    |
    |-- BrowserTabActor (webbrowser.js)
    |   Targets tabs living in the parent or child process. Note that this is
    |   just a proxy for ContentActor, which is loaded via the tab's message
    |   manager as a frame script in the process containing the tab. This proxy
    |   via message manager is always used, even when e10s is disabled.
    |   Returned by "listTabs" or "getTab" requests.
    |   |
@@ -55,29 +58,35 @@ and returns its `actorID`. That's the ma
    |   Targets a worker (applies to various kinds like web worker, service
    |   worker, etc.).
    |   Returned by "listWorkers" request to the root actor to get all workers.
    |   Returned by "listWorkers" request to a BrowserTabActor to get workers for
    |   a specific tab.
    |   Returned by "listWorkers" request to a ChildProcessActor to get workers
    |   for the chrome of the child process.
    |
+   |-- WindowActor (window.js)
+   |   Targets a single window, such as a browser window in Firefox, but it can
+   |   be used to reach any window in the parent process.
+   |   Returned by "getWindow" request to the root actor.
+   |
    |-- ChromeActor (chrome.js)
    |   Targets all resources in the parent process of firefox
    |   (chrome documents, JSM, JS XPCOM, etc.).
    |   Returned by "getProcess" request without any argument.
    |
    |-- ChildProcessActor (child-process.js)
    |   Targets the chrome of the child process (e10s).
    |   Returned by "getProcess" request with a id argument,
    |   matching the targeted process.
    |
    \-- BrowserAddonActor (addon.js)
        Targets the javascript of add-ons.
        Returned by "listAddons" request.
+```
 
 ## "TabActor"
 
 Those are the actors exposed by the root actors which are meant to track the
 lifetime of a given context: tab, app, process, add-on, or worker. It also
 allows to fetch the tab-scoped actors connected to this context. Actors like
 console, inspector, thread (for debugger), styleinspector, etc. Most of them
 inherit from TabActor (defined in tab.js) which is document centric. It
--- a/devtools/server/tests/browser/animation.html
+++ b/devtools/server/tests/browser/animation.html
@@ -7,18 +7,18 @@
     height: 50px;
     border-radius: 50%;
     background: #eee;
   }
 
   .simple-animation {
     display: inline-block;
 
-    width: 50px;
-    height: 50px;
+    width: 64px;
+    height: 64px;
     border-radius: 50%;
     background: red;
 
     animation: move 200s infinite;
   }
 
   .multiple-animations {
     display: inline-block;
--- a/devtools/shared/client/main.js
+++ b/devtools/shared/client/main.js
@@ -1737,16 +1737,37 @@ RootClient.prototype = {
         throw new Error("Unsupported argument given to getTab request");
       }
     }
 
     return this.request(packet);
   },
 
   /**
+   * Fetch the WindowActor for a specific window, like a browser window in
+   * Firefox, but it can be used to reach any window in the process.
+   *
+   * @param number outerWindowID
+   *        The outerWindowID of the top level window you are looking for.
+   */
+  getWindow: function ({ outerWindowID }) {
+    if (!outerWindowID) {
+      throw new Error("Must specify outerWindowID");
+    }
+
+    let packet = {
+      to: this.actor,
+      type: "getWindow",
+      outerWindowID,
+    };
+
+    return this.request(packet);
+  },
+
+  /**
    * Description of protocol's actors and methods.
    *
    * @param function onResponse
    *        Called with the response packet.
    */
   protocolDescription: DebuggerClient.requester({ type: "protocolDescription" }),
 
   /*
--- a/docshell/base/nsAboutRedirector.cpp
+++ b/docshell/base/nsAboutRedirector.cpp
@@ -133,16 +133,22 @@ static const RedirEntry kRedirMap[] = {
   },
   {
     "telemetry", "chrome://global/content/aboutTelemetry.xhtml",
     nsIAboutModule::ALLOW_SCRIPT
   },
   {
     "webrtc", "chrome://global/content/aboutwebrtc/aboutWebrtc.html",
     nsIAboutModule::ALLOW_SCRIPT
+  },
+  {
+    "printpreview", "about:blank",
+    nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+    nsIAboutModule::HIDE_FROM_ABOUTABOUT |
+    nsIAboutModule::URI_CAN_LOAD_IN_CHILD
   }
 };
 static const int kRedirTotal = mozilla::ArrayLength(kRedirMap);
 
 NS_IMETHODIMP
 nsAboutRedirector::NewChannel(nsIURI* aURI,
                               nsILoadInfo* aLoadInfo,
                               nsIChannel** aResult)
@@ -168,19 +174,21 @@ nsAboutRedirector::NewChannel(nsIURI* aU
       // chrome:// or resource://) then set the LOAD_REPLACE flag on the
       // channel which forces the channel owner to reflect the displayed
       // URL rather then being the systemPrincipal.
       bool isUIResource = false;
       rv = NS_URIChainHasFlags(tempURI, nsIProtocolHandler::URI_IS_UI_RESOURCE,
                                &isUIResource);
       NS_ENSURE_SUCCESS(rv, rv);
 
-      nsLoadFlags loadFlags =
-        isUIResource ? static_cast<nsLoadFlags>(nsIChannel::LOAD_NORMAL)
-                     : static_cast<nsLoadFlags>(nsIChannel::LOAD_REPLACE);
+      bool isAboutBlank = NS_IsAboutBlank(tempURI);
+
+      nsLoadFlags loadFlags = isUIResource || isAboutBlank
+                    ? static_cast<nsLoadFlags>(nsIChannel::LOAD_NORMAL)
+                    : static_cast<nsLoadFlags>(nsIChannel::LOAD_REPLACE);
 
       rv = NS_NewChannelInternal(getter_AddRefs(tempChannel),
                                  tempURI,
                                  aLoadInfo,
                                  nullptr, // aLoadGroup
                                  nullptr, // aCallbacks
                                  loadFlags);
       NS_ENSURE_SUCCESS(rv, rv);
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -14359,20 +14359,29 @@ nsDocShell::StopDocumentLoad(void)
 
 NS_IMETHODIMP
 nsDocShell::GetPrintPreview(nsIWebBrowserPrint** aPrintPreview)
 {
   *aPrintPreview = nullptr;
 #if NS_PRINT_PREVIEW
   nsCOMPtr<nsIDocumentViewerPrint> print = do_QueryInterface(mContentViewer);
   if (!print || !print->IsInitializedForPrintPreview()) {
+    // XXX: Creating a brand new content viewer to host preview every
+    // time we enter here seems overwork. We could skip ahead to where
+    // we QI the mContentViewer if the current URI is either about:blank
+    // or about:printpreview.
     Stop(nsIWebNavigation::STOP_ALL);
     nsCOMPtr<nsIPrincipal> principal = nsNullPrincipal::CreateWithInheritedAttributes(this);
-    nsresult rv = CreateAboutBlankContentViewer(principal, nullptr);
+    nsCOMPtr<nsIURI> uri;
+    NS_NewURI(getter_AddRefs(uri), NS_LITERAL_CSTRING("about:printpreview"));
+    nsresult rv = CreateAboutBlankContentViewer(principal, uri);
     NS_ENSURE_SUCCESS(rv, rv);
+    // Here we manually set current URI since we have just created a
+    // brand new content viewer (about:blank) to host preview.
+    SetCurrentURI(uri, nullptr, true, 0);
     print = do_QueryInterface(mContentViewer);
     NS_ENSURE_STATE(print);
     print->InitializeForPrintPreview();
   }
   nsCOMPtr<nsIWebBrowserPrint> result = do_QueryInterface(print);
   result.forget(aPrintPreview);
   return NS_OK;
 #else
--- a/docshell/build/nsDocShellModule.cpp
+++ b/docshell/build/nsDocShellModule.cpp
@@ -184,16 +184,17 @@ const mozilla::Module::ContractIDEntry k
   { NS_ABOUT_MODULE_CONTRACTID_PREFIX "serviceworkers", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
 #ifndef ANDROID
   { NS_ABOUT_MODULE_CONTRACTID_PREFIX "profiles", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
 #endif
   { NS_ABOUT_MODULE_CONTRACTID_PREFIX "srcdoc", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
   { NS_ABOUT_MODULE_CONTRACTID_PREFIX "support", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
   { NS_ABOUT_MODULE_CONTRACTID_PREFIX "telemetry", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
   { NS_ABOUT_MODULE_CONTRACTID_PREFIX "webrtc", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
+  { NS_ABOUT_MODULE_CONTRACTID_PREFIX "printpreview", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
   { NS_URI_LOADER_CONTRACTID, &kNS_URI_LOADER_CID },
   { NS_DOCUMENTLOADER_SERVICE_CONTRACTID, &kNS_DOCUMENTLOADER_SERVICE_CID },
   { NS_HANDLERSERVICE_CONTRACTID, &kNS_CONTENTHANDLERSERVICE_CID, mozilla::Module::CONTENT_PROCESS_ONLY },
   { NS_EXTERNALHELPERAPPSERVICE_CONTRACTID, &kNS_EXTERNALHELPERAPPSERVICE_CID },
   { NS_EXTERNALPROTOCOLSERVICE_CONTRACTID, &kNS_EXTERNALHELPERAPPSERVICE_CID },
   { NS_MIMESERVICE_CONTRACTID, &kNS_EXTERNALHELPERAPPSERVICE_CID },
   { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX"default", &kNS_EXTERNALPROTOCOLHANDLER_CID },
   { NS_PREFETCHSERVICE_CONTRACTID, &kNS_PREFETCHSERVICE_CID },
--- a/dom/animation/AnimationPerformanceWarning.cpp
+++ b/dom/animation/AnimationPerformanceWarning.cpp
@@ -28,23 +28,16 @@ AnimationPerformanceWarning::ToLocalized
 
 bool
 AnimationPerformanceWarning::ToLocalizedString(
   nsXPIDLString& aLocalizedString) const
 {
   const char* key = nullptr;
 
   switch (mType) {
-    case Type::ContentTooSmall:
-      MOZ_ASSERT(mParams && mParams->Length() == 2,
-                 "Parameter's length should be 2 for ContentTooSmall");
-
-      return NS_SUCCEEDED(
-        ToLocalizedStringWithIntParams<2>(
-          "CompositorAnimationWarningContentTooSmall", aLocalizedString));
     case Type::ContentTooLarge:
       MOZ_ASSERT(mParams && mParams->Length() == 6,
                  "Parameter's length should be 6 for ContentTooLarge");
 
       return NS_SUCCEEDED(
         ToLocalizedStringWithIntParams<7>(
           "CompositorAnimationWarningContentTooLarge2", aLocalizedString));
     case Type::TransformBackfaceVisibilityHidden:
--- a/dom/animation/AnimationPerformanceWarning.h
+++ b/dom/animation/AnimationPerformanceWarning.h
@@ -15,17 +15,16 @@
 class nsXPIDLString;
 
 namespace mozilla {
 
 // Represents the reason why we can't run the CSS property on the compositor.
 struct AnimationPerformanceWarning
 {
   enum class Type : uint8_t {
-    ContentTooSmall,
     ContentTooLarge,
     TransformBackfaceVisibilityHidden,
     TransformPreserve3D,
     TransformSVG,
     TransformWithGeometricProperties,
     TransformWithSyncGeometricAnimations,
     TransformFrameInactive,
     OpacityFrameInactive,
--- a/dom/animation/test/chrome/file_animation_performance_warning.html
+++ b/dom/animation/test/chrome/file_animation_performance_warning.html
@@ -835,47 +835,45 @@ function testMultipleAnimationsWithGeome
       });
     }, 'Multiple async animations and geometric animation: ' + subtest.desc);
   });
 }
 
 function testSmallElements() {
   [
     {
-      desc: 'opacity on too small element',
+      desc: 'opacity on small element',
       frames: {
         opacity: [0, 1]
       },
       style: { style: 'width: 8px; height: 8px; background-color: red;' +
                       // We need to set transform here to try creating an
                       // individual frame for this opacity element.
                       // Without this, this small element is created on the same
                       // nsIFrame of mochitest iframe, i.e. the document which are
                       // running this test, as a result the layer corresponding
                       // to the frame is sent to compositor.
                       'transform: translateX(100px);' },
       expected: [
         {
           property: 'opacity',
-          runningOnCompositor: false,
-          warning: /Animation cannot be run on the compositor because frame size \(8, 8\) is smaller than \(16, 16\)/
+          runningOnCompositor: true
         }
       ]
     },
     {
-      desc: 'transform on too small element',
+      desc: 'transform on small element',
       frames: {
         transform: ['translate(0px)', 'translate(100px)']
       },
       style: { style: 'width: 8px; height: 8px; background-color: red;' },
       expected: [
         {
           property: 'transform',
-          runningOnCompositor: false,
-          warning: /Animation cannot be run on the compositor because frame size \(8, 8\) is smaller than \(16, 16\)/
+          runningOnCompositor: true
         }
       ]
     },
   ].forEach(subtest => {
     promise_test(function(t) {
     var div = addDiv(t, subtest.style);
     var animation = div.animate(subtest.frames, 100 * MS_PER_SEC);
       return animation.ready.then(function() {
--- a/dom/locales/en-US/chrome/layout/layout_errors.properties
+++ b/dom/locales/en-US/chrome/layout/layout_errors.properties
@@ -6,19 +6,16 @@ ImageMapRectBoundsError=The “coords” attribute of the <area shape="rect"> tag is not in the “left,top,right,bottom” format.
 ImageMapCircleWrongNumberOfCoords=The “coords” attribute of the <area shape="circle"> tag is not in the “center-x,center-y,radius” format.
 ImageMapCircleNegativeRadius=The “coords” attribute of the <area shape="circle"> tag has a negative radius.
 ImageMapPolyWrongNumberOfCoords=The “coords” attribute of the <area shape="poly"> tag is not in the “x1,y1,x2,y2 …” format.
 ImageMapPolyOddNumberOfCoords=The “coords” attribute of the <area shape="poly"> tag is missing the last “y” coordinate (the correct format is “x1,y1,x2,y2 …”).
 
 TablePartRelPosWarning=Relative positioning of table rows and row groups is now supported. This site may need to be updated because it may depend on this feature having no effect.
 ScrollLinkedEffectFound2=This site appears to use a scroll-linked positioning effect. This may not work well with asynchronous panning; see https://developer.mozilla.org/docs/Mozilla/Performance/ScrollLinkedEffects for further details and to join the discussion on related tools and features!
 
-## LOCALIZATION NOTE(CompositorAnimationWarningContentTooSmall):
-## (%1$S, %2$S) is a pair of integer values of the frame size
-CompositorAnimationWarningContentTooSmall=Animation cannot be run on the compositor because frame size (%1$S, %2$S) is smaller than (16, 16)
 ## LOCALIZATION NOTE(CompositorAnimationWarningContentTooLarge2):
 ## (%1$S, %2$S) is a pair of integer values of the frame size
 ## (%3$S, %4$S) is a pair of integer values of a limit based on the viewport size
 ## (%5$S, %6$S) is a pair of integer values of an absolute limit
 CompositorAnimationWarningContentTooLarge2=Animation cannot be run on the compositor because the frame size (%1$S, %2$S) is too large relative to the viewport (larger than (%3$S, %4$S)) or larger than the maximum allowed value (%5$S, %6$S)
 ## LOCALIZATION NOTE(CompositorAnimationWarningTransformBackfaceVisibilityHidden):
 ## 'backface-visibility: hidden' is a CSS property, don't translate it.
 CompositorAnimationWarningTransformBackfaceVisibilityHidden=Animations of ‘backface-visibility: hidden’ transforms cannot be run on the compositor
--- a/dom/media/MediaPrefs.h
+++ b/dom/media/MediaPrefs.h
@@ -85,20 +85,21 @@ private:
   };
 
   // This is where DECL_MEDIA_PREF for each of the preferences should go.
 
   // AudioSink
   DECL_MEDIA_PREF("accessibility.monoaudio.enable",           MonoAudio, bool, false);
   DECL_MEDIA_PREF("media.resampling.enabled",                 AudioSinkResampling, bool, false);
   DECL_MEDIA_PREF("media.resampling.rate",                    AudioSinkResampleRate, uint32_t, 48000);
-#if defined(ANDROID)
+#if defined(XP_WIN) || defined(XP_DARWIN) || defined(MOZ_PULSEAUDIO)
+  // libcubeb backend implement .get_preferred_channel_layout
+  DECL_MEDIA_PREF("media.forcestereo.enabled",                AudioSinkForceStereo, bool, false);
+#else
   DECL_MEDIA_PREF("media.forcestereo.enabled",                AudioSinkForceStereo, bool, true);
-#else
-  DECL_MEDIA_PREF("media.forcestereo.enabled",                AudioSinkForceStereo, bool, false);
 #endif
   // VideoSink
   DECL_MEDIA_PREF("media.ruin-av-sync.enabled",               RuinAvSync, bool, false);
 
   // Encrypted Media Extensions
   DECL_MEDIA_PREF("media.clearkey.persistent-license.enabled", ClearKeyPersistentLicenseEnabled, bool, false);
 
   // PlatformDecoderModule
--- a/gfx/thebes/gfxPrefs.h
+++ b/gfx/thebes/gfxPrefs.h
@@ -551,16 +551,17 @@ private:
   DECL_GFX_PREF(Live, "layout.css.scroll-snap.prediction-max-velocity", ScrollSnapPredictionMaxVelocity, int32_t, 2000);
   DECL_GFX_PREF(Live, "layout.css.scroll-snap.prediction-sensitivity", ScrollSnapPredictionSensitivity, float, 0.750f);
   DECL_GFX_PREF(Live, "layout.css.scroll-snap.proximity-threshold", ScrollSnapProximityThreshold, int32_t, 200);
   DECL_GFX_PREF(Live, "layout.css.touch_action.enabled",       TouchActionEnabled, bool, false);
   DECL_GFX_PREF(Live, "layout.display-list.dump",              LayoutDumpDisplayList, bool, false);
   DECL_GFX_PREF(Live, "layout.display-list.dump-content",      LayoutDumpDisplayListContent, bool, false);
   DECL_GFX_PREF(Live, "layout.event-regions.enabled",          LayoutEventRegionsEnabledDoNotUseDirectly, bool, false);
   DECL_GFX_PREF(Once, "layout.frame_rate",                     LayoutFrameRate, int32_t, -1);
+  DECL_GFX_PREF(Live, "layout.min-active-layer-size",          LayoutMinActiveLayerSize, int, 64);
   DECL_GFX_PREF(Once, "layout.paint_rects_separately",         LayoutPaintRectsSeparately, bool, true);
 
   // This and code dependent on it should be removed once containerless scrolling looks stable.
   DECL_GFX_PREF(Once, "layout.scroll.root-frame-containers",   LayoutUseContainersForRootFrames, bool, true);
   DECL_GFX_PREF(Live, "layout.smaller-painted-layers",         LayoutSmallerPaintedLayers, bool, false);
 
   DECL_GFX_PREF(Once, "media.hardware-video-decoding.force-enabled",
                                                                HardwareVideoDecodingForceEnabled, bool, false);
new file mode 100644
--- /dev/null
+++ b/js/src/jit-test/tests/ion/bug1273858-1.js
@@ -0,0 +1,53 @@
+// |jit-test| --no-threads
+
+function t1() {
+    let x = [];
+
+    for (let k = 0; k < 100; ++k)
+        x[k] = () => k; // Lexical capture
+
+    try {
+        eval("k");
+        throw false;
+    }
+    catch (e) {
+        if (!(e instanceof ReferenceError))
+            throw "Loop index escaped block";
+    }
+
+    for (var i = 0; i < 100; ++i)
+        if (x[i]() != i)
+            throw "Bad let capture";
+}
+t1();
+t1();
+t1();
+t1();
+
+function t2() {
+    let x = [];
+    let y = {};
+
+    for (var i = 0; i < 100; ++i)
+        x[i] = i;
+
+    for (const k of x)
+        y[k] = () => k; // Lexical capture
+
+    try {
+        eval("k");
+        throw false;
+    }
+    catch (e) {
+        if (!(e instanceof ReferenceError))
+            throw "Loop index escaped block";
+    }
+
+    for (var i = 0; i < 100; ++i)
+        if (y[i]() != i)
+            throw "Bad const capture";
+}
+t2();
+t2();
+t2();
+t2();
new file mode 100644
--- /dev/null
+++ b/js/src/jit-test/tests/ion/bug1273858-2.js
@@ -0,0 +1,46 @@
+// |jit-test| --no-threads
+
+function t1() {
+    let x = [];
+
+    try
+    {
+        for (let k = 0; k < 100; ++k)
+        {
+            let w = () => k; // Lexical capture
+
+            if (w() > 10)
+            {
+                throw () => w; // Lexical capture
+            }
+
+            x[k] = w;
+        }
+    }
+    catch (e)
+    {
+        // 'w' and 'k' should leave scope as exception unwinds
+
+        try {
+            eval("k");
+            throw false;
+        }
+        catch (e) {
+            if (!(e instanceof ReferenceError))
+                throw "Loop index escaped block";
+        }
+
+        try {
+            eval("w");
+            throw false;
+        }
+        catch (e) {
+            if (!(e instanceof ReferenceError))
+                throw "Local name escaped block";
+        }
+    }
+}
+t1();
+t1();
+t1();
+t1();
--- a/js/src/jit/BaselineBailouts.cpp
+++ b/js/src/jit/BaselineBailouts.cpp
@@ -132,16 +132,18 @@ struct BaselineStackBuilder
         header_->copyStackBottom = header_->copyStackTop;
         header_->setR0 = 0;
         header_->valueR0 = UndefinedValue();
         header_->setR1 = 0;
         header_->valueR1 = UndefinedValue();
         header_->resumeFramePtr = nullptr;
         header_->resumeAddr = nullptr;
         header_->resumePC = nullptr;
+        header_->tryPC = nullptr;
+        header_->faultPC = nullptr;
         header_->monitorStub = nullptr;
         header_->numFrames = 0;
         header_->checkGlobalDeclarationConflicts = false;
         return true;
     }
 
     MOZ_MUST_USE bool enlarge() {
         MOZ_ASSERT(buffer_ != nullptr);
@@ -724,24 +726,22 @@ InitFromBailout(JSContext* cx, HandleScr
                     "      Bailout_ArgumentCheck for script with argumentsHasVarBinding!"
                     "Using empty arguments object");
             iter.skip();
         }
     } else {
         Value v = iter.read();
         if (v.isObject()) {
             envChain = &v.toObject();
-            if (fun &&
-                ((fun->needsCallObject() && envChain->is<CallObject>()) ||
-                 (fun->needsNamedLambdaEnvironment() &&
-                  !fun->needsCallObject() &&
-                  envChain->is<LexicalEnvironmentObject>() &&
-                  &envChain->as<LexicalEnvironmentObject>().scope() ==
-                  script->maybeNamedLambdaScope())))
-            {
+
+            // If Ion has updated env slot from UndefinedValue, it will be the
+            // complete initial environment, so we can set the HAS_INITIAL_ENV
+            // flag if needed.
+            if (fun && fun->needsFunctionEnvironmentObjects()) {
+                MOZ_ASSERT(fun->nonLazyScript()->initialEnvironmentShape());
                 MOZ_ASSERT(!fun->needsExtraBodyVarEnvironment());
                 flags |= BaselineFrame::HAS_INITIAL_ENV;
             }
         } else {
             MOZ_ASSERT(v.isUndefined() || v.isMagic(JS_OPTIMIZED_OUT));
 
             // Get env chain from function or script.
             if (fun) {
@@ -1817,16 +1817,18 @@ jit::FinishBailoutToBaseline(BaselineBai
 
     // The current native code pc may not have a corresponding ICEntry, so we
     // store the bytecode pc in the frame for frame iterators. This pc is
     // cleared at the end of this function. If we return false, we don't clear
     // it: the exception handler also needs it and will clear it for us.
     BaselineFrame* topFrame = GetTopBaselineFrame(cx);
     topFrame->setOverridePc(bailoutInfo->resumePC);
 
+    jsbytecode* faultPC = bailoutInfo->faultPC;
+    jsbytecode* tryPC = bailoutInfo->tryPC;
     uint32_t numFrames = bailoutInfo->numFrames;
     MOZ_ASSERT(numFrames > 0);
     BailoutKind bailoutKind = bailoutInfo->bailoutKind;
     bool checkGlobalDeclarationConflicts = bailoutInfo->checkGlobalDeclarationConflicts;
 
     // Free the bailout buffer.
     js_free(bailoutInfo);
     bailoutInfo = nullptr;
@@ -1934,16 +1936,23 @@ jit::FinishBailoutToBaseline(BaselineBai
         // After copying from all the rematerialized frames, remove them from
         // the table to keep the table up to date.
         act->removeRematerializedFrame(outerFp);
 
         if (!ok)
             return false;
     }
 
+    // If we are catching an exception, we need to unwind scopes.
+    // See |SettleOnTryNote|
+    if (cx->isExceptionPending() && faultPC) {
+        EnvironmentIter ei(cx, topFrame, faultPC);
+        UnwindEnvironment(cx, ei, tryPC);
+    }
+
     JitSpew(JitSpew_BaselineBailouts,
             "  Restored outerScript=(%s:%" PRIuSIZE ",%u) innerScript=(%s:%" PRIuSIZE ",%u) (bailoutKind=%u)",
             outerScript->filename(), outerScript->lineno(), outerScript->getWarmUpCount(),
             innerScript->filename(), innerScript->lineno(), innerScript->getWarmUpCount(),
             (unsigned) bailoutKind);
 
     switch (bailoutKind) {
       // Normal bailouts.
--- a/js/src/jit/BaselineJIT.h
+++ b/js/src/jit/BaselineJIT.h
@@ -587,16 +587,20 @@ struct BaselineBailoutInfo
     void* resumeFramePtr;
 
     // The native code address to resume into.
     void* resumeAddr;
 
     // The bytecode pc where we will resume.
     jsbytecode* resumePC;
 
+    // The bytecode pc of try block and fault block.
+    jsbytecode* tryPC;
+    jsbytecode* faultPC;
+
     // If resuming into a TypeMonitor IC chain, this field holds the
     // address of the first stub in that chain.  If this field is
     // set, then the actual jitcode resumed into is the jitcode for
     // the first stub, not the resumeAddr above.  The resumeAddr
     // above, in this case, is pushed onto the stack so that the
     // TypeMonitor chain can tail-return into the main jitcode when done.
     ICStub* monitorStub;
 
--- a/js/src/jit/BytecodeAnalysis.cpp
+++ b/js/src/jit/BytecodeAnalysis.cpp
@@ -163,16 +163,18 @@ BytecodeAnalysis::init(TempAllocator& al
           case JSOP_STRICTSETNAME:
           case JSOP_DELNAME:
           case JSOP_GETALIASEDVAR:
           case JSOP_SETALIASEDVAR:
           case JSOP_LAMBDA:
           case JSOP_LAMBDA_ARROW:
           case JSOP_DEFFUN:
           case JSOP_DEFVAR:
+          case JSOP_PUSHLEXICALENV:
+          case JSOP_POPLEXICALENV:
             usesEnvironmentChain_ = true;
             break;
 
           case JSOP_GETGNAME:
           case JSOP_SETGNAME:
           case JSOP_STRICTSETGNAME:
             if (script_->hasNonSyntacticScope())
                 usesEnvironmentChain_ = true;
--- a/js/src/jit/CodeGenerator.cpp
+++ b/js/src/jit/CodeGenerator.cpp
@@ -3428,16 +3428,45 @@ CodeGenerator::visitMaybeCopyElementsFor
 
 void
 CodeGenerator::visitFunctionEnvironment(LFunctionEnvironment* lir)
 {
     Address environment(ToRegister(lir->function()), JSFunction::offsetOfEnvironment());
     masm.loadPtr(environment, ToRegister(lir->output()));
 }
 
+typedef LexicalEnvironmentObject* (*NewLexicalEnvironmentObjectFn)(JSContext*,
+                                                                   Handle<LexicalScope*>,
+                                                                   HandleObject, gc::InitialHeap);
+static const VMFunction NewLexicalEnvironmentObjectInfo =
+    FunctionInfo<NewLexicalEnvironmentObjectFn>(LexicalEnvironmentObject::create,
+                                                "LexicalEnvironmentObject::create");
+
+void
+CodeGenerator::visitNewLexicalEnvironmentObject(LNewLexicalEnvironmentObject* lir)
+{
+    pushArg(Imm32(gc::DefaultHeap));
+    pushArg(ToRegister(lir->enclosing()));
+    pushArg(ImmGCPtr(lir->mir()->scope()));
+    callVM(NewLexicalEnvironmentObjectInfo, lir);
+}
+
+typedef JSObject* (*CopyLexicalEnvironmentObjectFn)(JSContext*, HandleObject, bool);
+static const VMFunction CopyLexicalEnvironmentObjectInfo =
+    FunctionInfo<CopyLexicalEnvironmentObjectFn>(js::jit::CopyLexicalEnvironmentObject,
+                                                "js::jit::CopyLexicalEnvironmentObject");
+
+void
+CodeGenerator::visitCopyLexicalEnvironmentObject(LCopyLexicalEnvironmentObject* lir)
+{
+    pushArg(Imm32(lir->mir()->copySlots()));
+    pushArg(ToRegister(lir->env()));
+    callVM(CopyLexicalEnvironmentObjectInfo, lir);
+}
+
 void
 CodeGenerator::visitGuardObjectIdentity(LGuardObjectIdentity* guard)
 {
     Register input = ToRegister(guard->input());
     Register expected = ToRegister(guard->expected());
 
     Assembler::Condition cond =
         guard->mir()->bailOnEquality() ? Assembler::Equal : Assembler::NotEqual;
--- a/js/src/jit/CodeGenerator.h
+++ b/js/src/jit/CodeGenerator.h
@@ -282,16 +282,18 @@ class CodeGenerator final : public CodeG
     void emitConcat(LInstruction* lir, Register lhs, Register rhs, Register output);
     void visitConcat(LConcat* lir);
     void visitCharCodeAt(LCharCodeAt* lir);
     void visitFromCharCode(LFromCharCode* lir);
     void visitFromCodePoint(LFromCodePoint* lir);
     void visitSinCos(LSinCos *lir);
     void visitStringSplit(LStringSplit* lir);
     void visitFunctionEnvironment(LFunctionEnvironment* lir);
+    void visitNewLexicalEnvironmentObject(LNewLexicalEnvironmentObject* lir);
+    void visitCopyLexicalEnvironmentObject(LCopyLexicalEnvironmentObject* lir);
     void visitCallGetProperty(LCallGetProperty* lir);
     void visitCallGetElement(LCallGetElement* lir);
     void visitCallSetElement(LCallSetElement* lir);
     void visitCallInitElementArray(LCallInitElementArray* lir);
     void visitThrow(LThrow* lir);
     void visitTypeOfV(LTypeOfV* lir);
     void visitOutOfLineTypeOfV(OutOfLineTypeOfV* ool);
     void visitToAsync(LToAsync* lir);
--- a/js/src/jit/IonBuilder.cpp
+++ b/js/src/jit/IonBuilder.cpp
@@ -1170,16 +1170,19 @@ IonBuilder::initEnvironmentChain(MDefini
     } else {
         // For global scripts without a non-syntactic global scope, the env
         // chain is the global lexical env.
         MOZ_ASSERT(!script()->isForEval());
         MOZ_ASSERT(!script()->hasNonSyntacticScope());
         env = constant(ObjectValue(script()->global().lexicalEnvironment()));
     }
 
+    // Update the environment slot from UndefinedValue only after initial
+    // environment is created so that bailout doesn't see a partial env.
+    // See: |InitFromBailout|
     current->setEnvironmentChain(env);
     return Ok();
 }
 
 void
 IonBuilder::initArgumentsObject()
 {
     JitSpew(JitSpew_IonMIR, "%s:%" PRIuSIZE " - Emitting code to initialize arguments object! block=%p",
@@ -2202,16 +2205,29 @@ IonBuilder::inspectOpcode(JSOp op)
         return jsop_lambda(info().getFunction(pc));
 
       case JSOP_LAMBDA_ARROW:
         return jsop_lambda_arrow(info().getFunction(pc));
 
       case JSOP_SETFUNNAME:
         return jsop_setfunname(GET_UINT8(pc));
 
+      case JSOP_PUSHLEXICALENV:
+        return jsop_pushlexicalenv(GET_UINT32_INDEX(pc));
+
+      case JSOP_POPLEXICALENV:
+        current->setEnvironmentChain(walkEnvironmentChain(1));
+        return Ok();
+
+      case JSOP_FRESHENLEXICALENV:
+        return jsop_copylexicalenv(true);
+
+      case JSOP_RECREATELEXICALENV:
+        return jsop_copylexicalenv(false);
+
       case JSOP_ITER:
         return jsop_iter(GET_INT8(pc));
 
       case JSOP_MOREITER:
         return jsop_itermore();
 
       case JSOP_ISNOITER:
         return jsop_isnoiter();
@@ -2264,28 +2280,16 @@ IonBuilder::inspectOpcode(JSOp op)
 #endif
         return Ok();
       }
 
       case JSOP_IS_CONSTRUCTING:
         pushConstant(MagicValue(JS_IS_CONSTRUCTING));
         return Ok();
 
-#ifdef DEBUG
-      case JSOP_PUSHLEXICALENV:
-      case JSOP_FRESHENLEXICALENV:
-      case JSOP_RECREATELEXICALENV:
-      case JSOP_POPLEXICALENV:
-        // These opcodes are currently unhandled by Ion, but in principle
-        // there's no reason they couldn't be.  Whenever this happens, OSR
-        // will have to consider that JSOP_{FRESHEN,RECREATE}LEXICALENV
-        // mutates the env chain -- right now MBasicBlock::environmentChain()
-        // caches the env chain.  JSOP_{FRESHEN,RECREATE}LEXICALENV must
-        // update that stale value.
-#endif
       default:
         break;
     }
 
     // Track a simpler message, since the actionable abort message is a
     // static string, and the internal opcode name isn't an actionable
     // thing anyways.
     trackActionableAbort("Unsupported bytecode");
@@ -11845,16 +11849,45 @@ IonBuilder::jsop_setfunname(uint8_t pref
 
     current->add(ins);
     current->push(fun);
 
     return resumeAfter(ins);
 }
 
 AbortReasonOr<Ok>
+IonBuilder::jsop_pushlexicalenv(uint32_t index)
+{
+    MOZ_ASSERT(analysis().usesEnvironmentChain());
+
+    LexicalScope* scope = &script()->getScope(index)->as<LexicalScope>();
+    MNewLexicalEnvironmentObject* ins =
+        MNewLexicalEnvironmentObject::New(alloc(), current->environmentChain(), scope);
+
+    current->add(ins);
+    current->setEnvironmentChain(ins);
+
+    return resumeAfter(ins);
+}
+
+AbortReasonOr<Ok>
+IonBuilder::jsop_copylexicalenv(bool copySlots)
+{
+    MOZ_ASSERT(analysis().usesEnvironmentChain());
+
+    MCopyLexicalEnvironmentObject* ins =
+        MCopyLexicalEnvironmentObject::New(alloc(), current->environmentChain(), copySlots);
+
+    current->add(ins);
+    current->setEnvironmentChain(ins);
+
+    return resumeAfter(ins);
+}
+
+AbortReasonOr<Ok>
 IonBuilder::jsop_setarg(uint32_t arg)
 {
     // To handle this case, we should spill the arguments to the space where
     // actual arguments are stored. The tricky part is that if we add a MIR
     // to wrap the spilling action, we don't want the spilling to be
     // captured by the GETARG and by the resume point, only by
     // MGetFrameArgument.
     MOZ_ASSERT(analysis_.hasSetArg());
--- a/js/src/jit/IonBuilder.h
+++ b/js/src/jit/IonBuilder.h
@@ -556,16 +556,18 @@ class IonBuilder
     AbortReasonOr<Ok> jsop_mutateproto();
     AbortReasonOr<Ok> jsop_initprop(PropertyName* name);
     AbortReasonOr<Ok> jsop_initprop_getter_setter(PropertyName* name);
     AbortReasonOr<Ok> jsop_regexp(RegExpObject* reobj);
     AbortReasonOr<Ok> jsop_object(JSObject* obj);
     AbortReasonOr<Ok> jsop_lambda(JSFunction* fun);
     AbortReasonOr<Ok> jsop_lambda_arrow(JSFunction* fun);
     AbortReasonOr<Ok> jsop_setfunname(uint8_t prefixKind);
+    AbortReasonOr<Ok> jsop_pushlexicalenv(uint32_t index);
+    AbortReasonOr<Ok> jsop_copylexicalenv(bool copySlots);
     AbortReasonOr<Ok> jsop_functionthis();
     AbortReasonOr<Ok> jsop_globalthis();
     AbortReasonOr<Ok> jsop_typeof();
     AbortReasonOr<Ok> jsop_toasync();
     AbortReasonOr<Ok> jsop_toid();
     AbortReasonOr<Ok> jsop_iter(uint8_t flags);
     AbortReasonOr<Ok> jsop_itermore();
     AbortReasonOr<Ok> jsop_isnoiter();
--- a/js/src/jit/JitFrames.cpp
+++ b/js/src/jit/JitFrames.cpp
@@ -459,18 +459,24 @@ HandleExceptionIon(JSContext* cx, const 
                 // exceptions is slow. Reset the warm-up counter so that if we
                 // catch many exceptions we won't Ion-compile the script.
                 script->resetWarmUpCounter();
 
                 // Bailout at the start of the catch block.
                 jsbytecode* catchPC = script->main() + tn->start + tn->length;
                 ExceptionBailoutInfo excInfo(frame.frameNo(), catchPC, tn->stackDepth);
                 uint32_t retval = ExceptionHandlerBailout(cx, frame, rfe, excInfo, overrecursed);
-                if (retval == BAILOUT_RETURN_OK)
+                if (retval == BAILOUT_RETURN_OK) {
+                    // Record exception locations to allow scope unwinding in
+                    // |FinishBailoutToBaseline|
+                    MOZ_ASSERT(cx->isExceptionPending());
+                    rfe->bailoutInfo->tryPC = UnwindEnvironmentToTryPc(frame.script(), tn);
+                    rfe->bailoutInfo->faultPC = frame.pc();
                     return;
+                }
 
                 // Error on bailout clears pending exception.
                 MOZ_ASSERT(!cx->isExceptionPending());
             }
             break;
 
           default:
             MOZ_CRASH("Unexpected try note");
--- a/js/src/jit/Lowering.cpp
+++ b/js/src/jit/Lowering.cpp
@@ -2513,16 +2513,42 @@ LIRGenerator::visitSetFunName(MSetFunNam
 
     LSetFunName* lir = new(alloc()) LSetFunName(useRegisterAtStart(ins->fun()),
                                                 useBoxAtStart(ins->name()));
     add(lir, ins);
     assignSafepoint(lir, ins);
 }
 
 void
+LIRGenerator::visitNewLexicalEnvironmentObject(MNewLexicalEnvironmentObject* ins)
+{
+    MDefinition* enclosing = ins->enclosing();
+    MOZ_ASSERT(enclosing->type() == MIRType::Object);
+
+    LNewLexicalEnvironmentObject* lir =
+        new(alloc()) LNewLexicalEnvironmentObject(useRegisterAtStart(enclosing));
+
+    defineReturn(lir, ins);
+    assignSafepoint(lir, ins);
+}
+
+void
+LIRGenerator::visitCopyLexicalEnvironmentObject(MCopyLexicalEnvironmentObject* ins)
+{
+    MDefinition* env = ins->env();
+    MOZ_ASSERT(env->type() == MIRType::Object);
+
+    LCopyLexicalEnvironmentObject* lir =
+        new(alloc()) LCopyLexicalEnvironmentObject(useRegisterAtStart(env));
+
+    defineReturn(lir, ins);
+    assignSafepoint(lir, ins);
+}
+
+void
 LIRGenerator::visitKeepAliveObject(MKeepAliveObject* ins)
 {
     MDefinition* obj = ins->object();
     MOZ_ASSERT(obj->type() == MIRType::Object);
 
     add(new(alloc()) LKeepAliveObject(useKeepalive(obj)), ins);
 }
 
--- a/js/src/jit/Lowering.h
+++ b/js/src/jit/Lowering.h
@@ -181,16 +181,18 @@ class LIRGenerator : public LIRGenerator
     void visitGetFirstDollarIndex(MGetFirstDollarIndex* ins);
     void visitStringReplace(MStringReplace* ins);
     void visitBinarySharedStub(MBinarySharedStub* ins);
     void visitUnarySharedStub(MUnarySharedStub* ins);
     void visitNullarySharedStub(MNullarySharedStub* ins);
     void visitLambda(MLambda* ins);
     void visitLambdaArrow(MLambdaArrow* ins);
     void visitSetFunName(MSetFunName* ins);
+    void visitNewLexicalEnvironmentObject(MNewLexicalEnvironmentObject* ins);
+    void visitCopyLexicalEnvironmentObject(MCopyLexicalEnvironmentObject* ins);
     void visitKeepAliveObject(MKeepAliveObject* ins);
     void visitSlots(MSlots* ins);
     void visitElements(MElements* ins);
     void visitConstantElements(MConstantElements* ins);
     void visitConvertElementsToDoubles(MConvertElementsToDoubles* ins);
     void visitMaybeToDoubleElement(MMaybeToDoubleElement* ins);
     void visitMaybeCopyElementsForWrite(MMaybeCopyElementsForWrite* ins);
     void visitLoadSlot(MLoadSlot* ins);
--- a/js/src/jit/MIR.h
+++ b/js/src/jit/MIR.h
@@ -11525,16 +11525,73 @@ class MFunctionEnvironment
     MDefinition* foldsTo(TempAllocator& alloc) override;
 
     // A function's environment is fixed.
     AliasSet getAliasSet() const override {
         return AliasSet::None();
     }
 };
 
+// Allocate a new LexicalEnvironmentObject.
+class MNewLexicalEnvironmentObject
+  : public MUnaryInstruction,
+    public SingleObjectPolicy::Data
+{
+    CompilerGCPointer<LexicalScope*> scope_;
+
+    MNewLexicalEnvironmentObject(MDefinition* enclosing, LexicalScope* scope)
+      : MUnaryInstruction(enclosing),
+        scope_(scope)
+    {
+        setResultType(MIRType::Object);
+    }
+
+  public:
+    INSTRUCTION_HEADER(NewLexicalEnvironmentObject)
+    TRIVIAL_NEW_WRAPPERS
+    NAMED_OPERANDS((0, enclosing))
+
+    LexicalScope* scope() const {
+        return scope_;
+    }
+    bool possiblyCalls() const override {
+        return true;
+    }
+    bool appendRoots(MRootList& roots) const override {
+        return roots.append(scope_);
+    }
+};
+
+// Allocate a new LexicalEnvironmentObject from existing one
+class MCopyLexicalEnvironmentObject
+  : public MUnaryInstruction,
+    public SingleObjectPolicy::Data
+{
+    bool copySlots_;
+
+    MCopyLexicalEnvironmentObject(MDefinition* env, bool copySlots)
+      : MUnaryInstruction(env),
+        copySlots_(copySlots)
+    {
+        setResultType(MIRType::Object);
+    }
+
+  public:
+    INSTRUCTION_HEADER(CopyLexicalEnvironmentObject)
+    TRIVIAL_NEW_WRAPPERS
+    NAMED_OPERANDS((0, env))
+
+    bool copySlots() const {
+        return copySlots_;
+    }
+    bool possiblyCalls() const override {
+        return true;
+    }
+};
+
 // Store to vp[slot] (slots that are not inline in an object).
 class MStoreSlot
   : public MBinaryInstruction,
     public MixPolicy<ObjectPolicy<0>, NoFloatPolicy<1> >::Data
 {
     uint32_t slot_;
     MIRType slotType_;
     bool needsBarrier_;
--- a/js/src/jit/MOpcodes.h
+++ b/js/src/jit/MOpcodes.h
@@ -167,16 +167,18 @@ namespace jit {
     _(Elements)                                                             \
     _(ConstantElements)                                                     \
     _(ConvertElementsToDoubles)                                             \
     _(MaybeToDoubleElement)                                                 \
     _(MaybeCopyElementsForWrite)                                            \
     _(LoadSlot)                                                             \
     _(StoreSlot)                                                            \
     _(FunctionEnvironment)                                                  \
+    _(NewLexicalEnvironmentObject)                                          \
+    _(CopyLexicalEnvironmentObject)                                         \
     _(FilterTypeSet)                                                        \
     _(TypeBarrier)                                                          \
     _(MonitorTypes)                                                         \
     _(PostWriteBarrier)                                                     \
     _(PostWriteElementBarrier)                                              \
     _(GetPropertyCache)                                                     \
     _(GetPropertyPolymorphic)                                               \
     _(SetPropertyPolymorphic)                                               \
--- a/js/src/jit/VMFunctions.cpp
+++ b/js/src/jit/VMFunctions.cpp
@@ -952,16 +952,27 @@ NewArgumentsObject(JSContext* cx, Baseli
     ArgumentsObject* obj = ArgumentsObject::createExpected(cx, frame);
     if (!obj)
         return false;
     res.setObject(*obj);
     return true;
 }
 
 JSObject*
+CopyLexicalEnvironmentObject(JSContext* cx, HandleObject env, bool copySlots)
+{
+    Handle<LexicalEnvironmentObject*> lexicalEnv = env.as<LexicalEnvironmentObject>();
+
+    if (copySlots)
+        return LexicalEnvironmentObject::clone(cx, lexicalEnv);
+
+    return LexicalEnvironmentObject::recreate(cx, lexicalEnv);
+}
+
+JSObject*
 InitRestParameter(JSContext* cx, uint32_t length, Value* rest, HandleObject templateObj,
                   HandleObject objRes)
 {
     if (objRes) {
         Rooted<ArrayObject*> arrRes(cx, &objRes->as<ArrayObject>());
 
         MOZ_ASSERT(!arrRes->getDenseInitializedLength());
         MOZ_ASSERT(arrRes->group() == templateObj->group());
--- a/js/src/jit/VMFunctions.h
+++ b/js/src/jit/VMFunctions.h
@@ -273,16 +273,17 @@ struct VMFunction
 
 template <class> struct TypeToDataType { /* Unexpected return type for a VMFunction. */ };
 template <> struct TypeToDataType<bool> { static const DataType result = Type_Bool; };
 template <> struct TypeToDataType<JSObject*> { static const DataType result = Type_Object; };
 template <> struct TypeToDataType<NativeObject*> { static const DataType result = Type_Object; };
 template <> struct TypeToDataType<PlainObject*> { static const DataType result = Type_Object; };
 template <> struct TypeToDataType<InlineTypedObject*> { static const DataType result = Type_Object; };
 template <> struct TypeToDataType<NamedLambdaObject*> { static const DataType result = Type_Object; };
+template <> struct TypeToDataType<LexicalEnvironmentObject*> { static const DataType result = Type_Object; };
 template <> struct TypeToDataType<ArrayObject*> { static const DataType result = Type_Object; };
 template <> struct TypeToDataType<TypedArrayObject*> { static const DataType result = Type_Object; };
 template <> struct TypeToDataType<JSString*> { static const DataType result = Type_Object; };
 template <> struct TypeToDataType<JSFlatString*> { static const DataType result = Type_Object; };
 template <> struct TypeToDataType<HandleObject> { static const DataType result = Type_Handle; };
 template <> struct TypeToDataType<HandleString> { static const DataType result = Type_Handle; };
 template <> struct TypeToDataType<HandlePropertyName> { static const DataType result = Type_Handle; };
 template <> struct TypeToDataType<HandleFunction> { static const DataType result = Type_Handle; };
@@ -710,16 +711,18 @@ GlobalNameConflictsCheckFromIon(JSContex
 MOZ_MUST_USE bool
 CheckGlobalOrEvalDeclarationConflicts(JSContext* cx, BaselineFrame* frame);
 MOZ_MUST_USE bool
 InitFunctionEnvironmentObjects(JSContext* cx, BaselineFrame* frame);
 
 MOZ_MUST_USE bool
 NewArgumentsObject(JSContext* cx, BaselineFrame* frame, MutableHandleValue res);
 
+JSObject* CopyLexicalEnvironmentObject(JSContext* cx, HandleObject env, bool copySlots);
+
 JSObject* InitRestParameter(JSContext* cx, uint32_t length, Value* rest, HandleObject templateObj,
                             HandleObject res);
 
 MOZ_MUST_USE bool
 HandleDebugTrap(JSContext* cx, BaselineFrame* frame, uint8_t* retAddr, bool* mustReturn);
 MOZ_MUST_USE bool
 OnDebuggerStatement(JSContext* cx, BaselineFrame* frame, jsbytecode* pc, bool* mustReturn);
 MOZ_MUST_USE bool
--- a/js/src/jit/shared/LIR-shared.h
+++ b/js/src/jit/shared/LIR-shared.h
@@ -7045,16 +7045,52 @@ class LFunctionEnvironment : public LIns
     explicit LFunctionEnvironment(const LAllocation& function) {
         setOperand(0, function);
     }
     const LAllocation* function() {
         return getOperand(0);
     }
 };
 
+// Allocate a new LexicalEnvironmentObject.
+class LNewLexicalEnvironmentObject : public LCallInstructionHelper<1, 1, 0>
+{
+  public:
+    LIR_HEADER(NewLexicalEnvironmentObject)
+
+    explicit LNewLexicalEnvironmentObject(const LAllocation& enclosing) {
+        setOperand(0, enclosing);
+    }
+    const LAllocation* enclosing() {
+        return getOperand(0);
+    }
+
+    MNewLexicalEnvironmentObject* mir() const {
+        return mir_->toNewLexicalEnvironmentObject();
+    }
+};
+
+// Copy a LexicalEnvironmentObject.
+class LCopyLexicalEnvironmentObject : public LCallInstructionHelper<1, 1, 0>
+{
+  public:
+    LIR_HEADER(CopyLexicalEnvironmentObject)
+
+    explicit LCopyLexicalEnvironmentObject(const LAllocation& env) {
+        setOperand(0, env);
+    }
+    const LAllocation* env() {
+        return getOperand(0);
+    }
+
+    MCopyLexicalEnvironmentObject* mir() const {
+        return mir_->toCopyLexicalEnvironmentObject();
+    }
+};
+
 class LCallGetProperty : public LCallInstructionHelper<BOX_PIECES, BOX_PIECES, 0>
 {
   public:
     LIR_HEADER(CallGetProperty)
 
     static const size_t Value = 0;
 
     explicit LCallGetProperty(const LBoxAllocation& val) {
--- a/js/src/jit/shared/LOpcodes-shared.h
+++ b/js/src/jit/shared/LOpcodes-shared.h
@@ -314,16 +314,18 @@
     _(ClampDToUint8)                \
     _(ClampVToUint8)                \
     _(LoadFixedSlotV)               \
     _(LoadFixedSlotT)               \
     _(LoadFixedSlotAndUnbox)        \
     _(StoreFixedSlotV)              \
     _(StoreFixedSlotT)              \
     _(FunctionEnvironment)          \
+    _(NewLexicalEnvironmentObject)  \
+    _(CopyLexicalEnvironmentObject) \
     _(GetPropertyCacheV)            \
     _(GetPropertyCacheT)            \
     _(GetPropertyPolymorphicV)      \
     _(GetPropertyPolymorphicT)      \
     _(BindNameCache)                \
     _(CallBindVar)                  \
     _(CallGetProperty)              \
     _(GetNameCache)                 \
--- a/js/src/vm/EnvironmentObject.cpp
+++ b/js/src/vm/EnvironmentObject.cpp
@@ -884,18 +884,18 @@ LexicalEnvironmentObject::createTemplate
 
     if (enclosing)
         env->initEnclosingEnvironment(enclosing);
 
     return env;
 }
 
 /* static */ LexicalEnvironmentObject*
-LexicalEnvironmentObject::createTemplateObject(JSContext* cx, Handle<LexicalScope*> scope,
-                                               HandleObject enclosing, gc::InitialHeap heap)
+LexicalEnvironmentObject::create(JSContext* cx, Handle<LexicalScope*> scope,
+                                 HandleObject enclosing, gc::InitialHeap heap)
 {
     assertSameCompartment(cx, enclosing);
     MOZ_ASSERT(scope->hasEnvironment());
 
     RootedShape shape(cx, scope->environmentShape());
     LexicalEnvironmentObject* env = createTemplateObject(cx, shape, enclosing, heap);
     if (!env)
         return nullptr;
@@ -910,17 +910,17 @@ LexicalEnvironmentObject::createTemplate
     return env;
 }
 
 /* static */ LexicalEnvironmentObject*
 LexicalEnvironmentObject::create(JSContext* cx, Handle<LexicalScope*> scope,
                                  AbstractFramePtr frame)
 {
     RootedObject enclosing(cx, frame.environmentChain());
-    return createTemplateObject(cx, scope, enclosing, gc::DefaultHeap);
+    return create(cx, scope, enclosing, gc::DefaultHeap);
 }
 
 /* static */ LexicalEnvironmentObject*
 LexicalEnvironmentObject::createGlobal(JSContext* cx, Handle<GlobalObject*> global)
 {
     MOZ_ASSERT(global);
 
     RootedShape shape(cx, LexicalScope::getEmptyExtensibleEnvironmentShape(cx));
@@ -992,18 +992,17 @@ LexicalEnvironmentObject::createHollowFo
     return env;
 }
 
 /* static */ LexicalEnvironmentObject*
 LexicalEnvironmentObject::clone(JSContext* cx, Handle<LexicalEnvironmentObject*> env)
 {
     Rooted<LexicalScope*> scope(cx, &env->scope());
     RootedObject enclosing(cx, &env->enclosingEnvironment());
-    Rooted<LexicalEnvironmentObject*> copy(cx, createTemplateObject(cx, scope, enclosing,
-                                                                    gc::TenuredHeap));
+    Rooted<LexicalEnvironmentObject*> copy(cx, create(cx, scope, enclosing, gc::TenuredHeap));
     if (!copy)
         return nullptr;
 
     // We can't assert that the clone has the same shape, because it could
     // have been reshaped by PurgeEnvironmentChain.
     MOZ_ASSERT(env->slotSpan() == copy->slotSpan());
     for (uint32_t i = JSSLOT_FREE(&class_); i < copy->slotSpan(); i++)
         copy->setSlot(i, env->getSlot(i));
@@ -1011,17 +1010,17 @@ LexicalEnvironmentObject::clone(JSContex
     return copy;
 }
 
 /* static */ LexicalEnvironmentObject*
 LexicalEnvironmentObject::recreate(JSContext* cx, Handle<LexicalEnvironmentObject*> env)
 {
     Rooted<LexicalScope*> scope(cx, &env->scope());
     RootedObject enclosing(cx, &env->enclosingEnvironment());
-    return createTemplateObject(cx, scope, enclosing, gc::TenuredHeap);
+    return create(cx, scope, enclosing, gc::TenuredHeap);
 }
 
 bool
 LexicalEnvironmentObject::isExtensible() const
 {
     return nonProxyIsExtensible();
 }
 
@@ -1066,18 +1065,17 @@ NamedLambdaObject::create(JSContext* cx,
 #ifdef DEBUG
     // There should be exactly one binding in the named lambda scope.
     BindingIter bi(scope);
     bi++;
     MOZ_ASSERT(bi.done());
 #endif
 
     LexicalEnvironmentObject* obj =
-        LexicalEnvironmentObject::createTemplateObject(cx, scope.as<LexicalScope>(),
-                                                       enclosing, heap);
+        LexicalEnvironmentObject::create(cx, scope.as<LexicalScope>(), enclosing, heap);
     if (!obj)
         return nullptr;
 
     obj->initFixedSlot(lambdaSlot(), ObjectValue(*func));
     return static_cast<NamedLambdaObject*>(obj);
 }
 
 /* static */ NamedLambdaObject*
--- a/js/src/vm/EnvironmentObject.h
+++ b/js/src/vm/EnvironmentObject.h
@@ -472,21 +472,18 @@ class LexicalEnvironmentObject : public 
 
     void initScope(LexicalScope* scope) {
         MOZ_ASSERT(!isGlobal());
         MOZ_ASSERT(isSyntactic());
         initScopeUnchecked(scope);
     }
 
   public:
-    static LexicalEnvironmentObject* createTemplateObject(JSContext* cx,
-                                                          Handle<LexicalScope*> scope,
-                                                          HandleObject enclosing,
-                                                          gc::InitialHeap heap);
-
+    static LexicalEnvironmentObject* create(JSContext* cx, Handle<LexicalScope*> scope,
+                                            HandleObject enclosing, gc::InitialHeap heap);
     static LexicalEnvironmentObject* create(JSContext* cx, Handle<LexicalScope*> scope,
                                             AbstractFramePtr frame);
     static LexicalEnvironmentObject* createGlobal(JSContext* cx, Handle<GlobalObject*> global);
     static LexicalEnvironmentObject* createNonSyntactic(JSContext* cx, HandleObject enclosing);
     static LexicalEnvironmentObject* createHollowForDebug(JSContext* cx,
                                                           Handle<LexicalScope*> scope);
 
     // Create a new LexicalEnvironmentObject with the same enclosing env and
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -5207,53 +5207,30 @@ nsDisplayOpacity::BuildLayer(nsDisplayLi
  * rendered at a higher (or lower) resolution, affecting the retained layer
  * size --- but this should be good enough.
  */
 static bool
 IsItemTooSmallForActiveLayer(nsIFrame* aFrame)
 {
   nsIntRect visibleDevPixels = aFrame->GetVisualOverflowRectRelativeToSelf().ToOutsidePixels(
           aFrame->PresContext()->AppUnitsPerDevPixel());
-  static const int MIN_ACTIVE_LAYER_SIZE_DEV_PIXELS = 16;
   return visibleDevPixels.Size() <
-    nsIntSize(MIN_ACTIVE_LAYER_SIZE_DEV_PIXELS, MIN_ACTIVE_LAYER_SIZE_DEV_PIXELS);
-}
-
-static void
-SetAnimationPerformanceWarningForTooSmallItem(nsIFrame* aFrame,
-                                              nsCSSPropertyID aProperty)
-{
-  // We use ToNearestPixels() here since ToOutsidePixels causes some sort of
-  // errors. See https://bugzilla.mozilla.org/show_bug.cgi?id=1258904#c19
-  nsIntRect visibleDevPixels = aFrame->GetVisualOverflowRectRelativeToSelf().ToNearestPixels(
-          aFrame->PresContext()->AppUnitsPerDevPixel());
-
-  // Set performance warning only if the visible dev pixels is not empty
-  // because dev pixels is empty if the frame has 'preserve-3d' style.
-  if (visibleDevPixels.IsEmpty()) {
-    return;
-  }
-
-  EffectCompositor::SetPerformanceWarning(aFrame, aProperty,
-      AnimationPerformanceWarning(
-        AnimationPerformanceWarning::Type::ContentTooSmall,
-        { visibleDevPixels.Width(), visibleDevPixels.Height() }));
+    nsIntSize(gfxPrefs::LayoutMinActiveLayerSize(),
+              gfxPrefs::LayoutMinActiveLayerSize());
 }
 
 /* static */ bool
 nsDisplayOpacity::NeedsActiveLayer(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame)
 {
-  if (ActiveLayerTracker::IsStyleAnimated(aBuilder, aFrame,
-                                          eCSSProperty_opacity) ||
-      EffectCompositor::HasAnimationsForCompositor(aFrame,
-                                                   eCSSProperty_opacity)) {
-    if (!IsItemTooSmallForActiveLayer(aFrame)) {
-      return true;
-    }
-    SetAnimationPerformanceWarningForTooSmallItem(aFrame, eCSSProperty_opacity);
+  if (EffectCompositor::HasAnimationsForCompositor(aFrame,
+                                                   eCSSProperty_opacity) ||
+      (ActiveLayerTracker::IsStyleAnimated(aBuilder, aFrame,
+                                           eCSSProperty_opacity) &&
+       !IsItemTooSmallForActiveLayer(aFrame))) {
+    return true;
   }
   return false;
 }
 
 void
 nsDisplayOpacity::ApplyOpacity(nsDisplayListBuilder* aBuilder,
                              float aOpacity,
                              const DisplayItemClipChain* aClip)
@@ -6876,27 +6853,30 @@ already_AddRefed<Layer> nsDisplayTransfo
     container->SetContentFlags(container->GetContentFlags() & ~Layer::CONTENT_MAY_CHANGE_TRANSFORM);
   }
   return container.forget();
 }
 
 bool
 nsDisplayTransform::MayBeAnimated(nsDisplayListBuilder* aBuilder)
 {
-  // Here we check if the *post-transform* bounds of this item are big enough
-  // to justify an active layer.
-  if (ActiveLayerTracker::IsStyleAnimated(aBuilder,
-                                          mFrame,
-                                          eCSSProperty_transform) ||
-      EffectCompositor::HasAnimationsForCompositor(mFrame,
-                                                   eCSSProperty_transform)) {
-    if (!IsItemTooSmallForActiveLayer(mFrame)) {
-      return true;
-    }
-    SetAnimationPerformanceWarningForTooSmallItem(mFrame, eCSSProperty_transform);
+  // If EffectCompositor::HasAnimationsForCompositor() is true then we can
+  // completely bypass the main thread for this animation, so it is always
+  // worthwhile.
+  // For ActiveLayerTracker::IsStyleAnimated() cases the main thread is
+  // already involved so there is less to be gained.
+  // Therefore we check that the *post-transform* bounds of this item are
+  // big enough to justify an active layer.
+  if (EffectCompositor::HasAnimationsForCompositor(mFrame,
+                                                   eCSSProperty_transform) ||
+      (ActiveLayerTracker::IsStyleAnimated(aBuilder,
+                                           mFrame,
+                                           eCSSProperty_transform) &&
+       !IsItemTooSmallForActiveLayer(mFrame))) {
+    return true;
   }
   return false;
 }
 
 nsDisplayItem::LayerState
 nsDisplayTransform::GetLayerState(nsDisplayListBuilder* aBuilder,
                                   LayerManager* aManager,
                                   const ContainerLayerParameters& aParameters) {
--- a/layout/svg/nsSVGIntegrationUtils.cpp
+++ b/layout/svg/nsSVGIntegrationUtils.cpp
@@ -50,134 +50,82 @@ public:
    * If the pre-effects visual overflow rect of the frame being examined
    * happens to be known, it can be passed in as aCurrentFrame and its
    * pre-effects visual overflow rect can be passed in as
    * aCurrentFrameOverflowArea. This is just an optimization to save a
    * frame property lookup - these arguments are optional.
    */
   PreEffectsVisualOverflowCollector(nsIFrame* aFirstContinuation,
                                     nsIFrame* aCurrentFrame,
-                                    const nsRect& aCurrentFrameOverflowArea,
-                                    bool aCheckPreEffectsBBoxPropCache)
+                                    const nsRect& aCurrentFrameOverflowArea)
     : mFirstContinuation(aFirstContinuation)
     , mCurrentFrame(aCurrentFrame)
     , mCurrentFrameOverflowArea(aCurrentFrameOverflowArea)
-    , mCheckPreEffectsBBoxPropCache(aCheckPreEffectsBBoxPropCache)
   {
     NS_ASSERTION(!mFirstContinuation->GetPrevContinuation(),
                  "We want the first continuation here");
   }
 
   virtual void AddBox(nsIFrame* aFrame) override {
     nsRect overflow = (aFrame == mCurrentFrame)
       ? mCurrentFrameOverflowArea
-      : GetPreEffectsVisualOverflowRect(aFrame, mCheckPreEffectsBBoxPropCache);
+      : GetPreEffectsVisualOverflowRect(aFrame);
     mResult.UnionRect(mResult, overflow + aFrame->GetOffsetTo(mFirstContinuation));
   }
 
   nsRect GetResult() const {
     return mResult;
   }
 
 private:
 
-  static nsRect GetPreEffectsVisualOverflowRect(nsIFrame* aFrame,
-                                                bool aCheckPropCache) {
+  static nsRect GetPreEffectsVisualOverflowRect(nsIFrame* aFrame) {
     nsRect* r = aFrame->Properties().Get(nsIFrame::PreEffectsBBoxProperty());
     if (r) {
       return *r;
     }
-    // Despite the fact that we're invoked for frames with SVG effects applied,
-    // we can actually get here. All continuations and IB split siblings of a
-    // frame with SVG effects applied will have the PreEffectsBBoxProperty
-    // property set on them. Therefore, the frames that are passed to us will
-    // always have that property set...well, with one exception. If the frames
-    // for an element with SVG effects applied have been subject to an "IB
-    // split", then the block frame(s) that caused the split will have been
-    // wrapped in anonymous, inline-block, nsBlockFrames of pseudo-type
-    // nsCSSAnonBoxes::mozAnonymousBlock. These "IB split sibling" anonymous
-    // blocks will have the PreEffectsBBoxProperty property set on them, but
-    // they will never be passed to us. Instead, we'll be passed the block
-    // children that they wrap, which don't have the PreEffectsBBoxProperty
-    // property set on them. This is actually okay. What we care about is
-    // collecting the _pre_ effects visual overflow rects of the frames to
-    // which the SVG effects have been applied. Since the IB split results in
-    // any overflow rect adjustments for transforms, effects, etc. taking
-    // place on the anonymous block wrappers, the wrapped children are left
-    // with their overflow rects unaffected. In other words, calling
-    // GetVisualOverflowRect() on the children will return their pre-effects
-    // visual overflow rects, just as we need.
-    //
-    // A couple of tests that demonstrate the IB split and cause us to get here
-    // are:
-    //
-    //  * reftests/svg/svg-integration/clipPath-html-06.xhtml
-    //  * reftests/svg/svg-integration/clipPath-html-06-extref.xhtml
-    //
-    // If we ever got passed a frame with the PreTransformOverflowAreasProperty
-    // property set, that would be bad, since then our GetVisualOverflowRect()
-    // call would give us the post-effects, and post-transform, overflow rect.
-    //
-    // There is one more exceptions, in
-    // nsStyleImageLayers::Layer::CalcDifference, we do not add
-    // nsChangeHint_UpdateOverflow hint when image mask(not SVG mask) property
-    // value changed, since replace image mask does not cause layout change.
-    // So even if we apply a new mask image to this frame,
-    // PreEffectsBBoxProperty might still left empty.
+
 #ifdef DEBUG
-    if (aCheckPropCache) {
-      nsIFrame* firstFrame =
-        nsLayoutUtils::FirstContinuationOrIBSplitSibling(aFrame);
-      bool mightHaveNoneSVGMask =
-        nsSVGEffects::GetEffectProperties(firstFrame).MightHaveNoneSVGMask();
+    // Having PreTransformOverflowAreasProperty cached means
+    // GetVisualOverflowRect() will return post-effect rect, which is not what
+    // we want. This function intentional reports pre-effect rect. But it does
+    // not matter if there is no SVG effect on this frame, since no effect
+    // means post-effect rect matches pre-effect rect.
+    if (nsSVGIntegrationUtils::UsingEffectsForFrame(aFrame)) {
+      nsOverflowAreas* preTransformOverflows =
+        aFrame->Properties().Get(aFrame->PreTransformOverflowAreasProperty());
 
-      NS_ASSERTION(mightHaveNoneSVGMask ||
-                   aFrame->GetParent()->StyleContext()->GetPseudo() ==
-                   nsCSSAnonBoxes::mozAnonymousBlock,
-                   "How did we getting here, then?");
+      MOZ_ASSERT(!preTransformOverflows,
+                 "GetVisualOverflowRect() won't return the pre-effects rect!");
     }
-
-    bool hasEffect = nsSVGIntegrationUtils::UsingEffectsForFrame(aFrame);
-    nsOverflowAreas* preTransformOverflows =
-      aFrame->Properties().Get(aFrame->PreTransformOverflowAreasProperty());
-    // Having PreTransformOverflowAreasProperty means GetVisualOverflowRect()
-    // will return post-effect rect, which is not what we want, this function
-    // intentional reports pre-effect rect. But it does not matter if there is
-    // no SVG effect on this frame, since no effect means post-effect rect
-    // matches pre-effect rect.
-    MOZ_ASSERT(!hasEffect || !preTransformOverflows,
-               "GetVisualOverflowRect() won't return the pre-effects rect!");
 #endif
     return aFrame->GetVisualOverflowRect();
   }
 
   nsIFrame*     mFirstContinuation;
   nsIFrame*     mCurrentFrame;
   const nsRect& mCurrentFrameOverflowArea;
   nsRect        mResult;
-  bool          mCheckPreEffectsBBoxPropCache;
 };
 
 /**
  * Gets the union of the pre-effects visual overflow rects of all of a frame's
  * continuations, in "user space".
  */
 static nsRect
 GetPreEffectsVisualOverflowUnion(nsIFrame* aFirstContinuation,
                                  nsIFrame* aCurrentFrame,
                                  const nsRect& aCurrentFramePreEffectsOverflow,
-                                 const nsPoint& aFirstContinuationToUserSpace,
-                                 bool aCheckPreEffectsBBoxPropCache)
+                                 const nsPoint& aFirstContinuationToUserSpace)
 {
   NS_ASSERTION(!aFirstContinuation->GetPrevContinuation(),
                "Need first continuation here");
   PreEffectsVisualOverflowCollector collector(aFirstContinuation,
                                               aCurrentFrame,
-                                              aCurrentFramePreEffectsOverflow,
-                                              aCheckPreEffectsBBoxPropCache);
+                                              aCurrentFramePreEffectsOverflow);
   // Compute union of all overflow areas relative to aFirstContinuation:
   nsLayoutUtils::GetAllInFlowBoxes(aFirstContinuation, &collector);
   // Return the result in user space:
   return collector.GetResult() + aFirstContinuationToUserSpace;
 }
 
 
 bool
@@ -245,18 +193,17 @@ gfxRect
 nsSVGIntegrationUtils::GetSVGBBoxForNonSVGFrame(nsIFrame* aNonSVGFrame)
 {
   NS_ASSERTION(!aNonSVGFrame->IsFrameOfType(nsIFrame::eSVG),
                "SVG frames should not get here");
   nsIFrame* firstFrame =
     nsLayoutUtils::FirstContinuationOrIBSplitSibling(aNonSVGFrame);
   // 'r' is in "user space":
   nsRect r = GetPreEffectsVisualOverflowUnion(firstFrame, nullptr, nsRect(),
-                                              GetOffsetToBoundingBox(firstFrame),
-                                              true);
+                                              GetOffsetToBoundingBox(firstFrame));
   return nsLayoutUtils::RectToGfxRect(r,
            aNonSVGFrame->PresContext()->AppUnitsPerCSSPixel());
 }
 
 // XXX Since we're called during reflow, this method is broken for frames with
 // continuations. When we're called for a frame with continuations, we're
 // called for each continuation in turn as it's reflowed. However, it isn't
 // until the last continuation is reflowed that this method's
@@ -308,21 +255,17 @@ nsRect
   nsPoint firstFrameToBoundingBox = GetOffsetToBoundingBox(firstFrame);
   // overrideBBox is in "user space", in _CSS_ pixels:
   // XXX Why are we rounding out to pixel boundaries? We don't do that in
   // GetSVGBBoxForNonSVGFrame, and it doesn't appear to be necessary.
   gfxRect overrideBBox =
     nsLayoutUtils::RectToGfxRect(
       GetPreEffectsVisualOverflowUnion(firstFrame, aFrame,
                                        aPreEffectsOverflowRect,
-                                       firstFrameToBoundingBox,
-                                       false /* See the beginning of the
-                                                comment above this function to
-                                                know why we skip this
-                                                checking. */),
+                                       firstFrameToBoundingBox),
       aFrame->PresContext()->AppUnitsPerCSSPixel());
   overrideBBox.RoundOut();
 
   nsRect overflowRect =
     nsFilterInstance::GetPostFilterBounds(firstFrame, &overrideBBox);
 
   // Return overflowRect relative to aFrame, rather than "user space":
   return overflowRect - (aFrame->GetOffsetTo(firstFrame) + firstFrameToBoundingBox);
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/activities/FxAccountStatusFragment.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/activities/FxAccountStatusFragment.java
@@ -466,20 +466,16 @@ public class FxAccountStatusFragment
     FxAccountSyncStatusHelper.getInstance().startObserving(syncStatusDelegate);
 
     // Register a local broadcast receiver to get profile cached notification.
     final IntentFilter intentFilter = new IntentFilter();
     intentFilter.addAction(FxAccountConstants.ACCOUNT_PROFILE_JSON_UPDATED_ACTION);
     accountProfileInformationReceiver = new FxAccountProfileInformationReceiver();
     LocalBroadcastManager.getInstance(getActivity()).registerReceiver(accountProfileInformationReceiver, intentFilter);
 
-    // profilePreference is set during onCreate, so it's definitely not null here.
-    final float cornerRadius = getResources().getDimension(R.dimen.fxaccount_profile_image_width) / 2;
-    profileAvatarTarget = new PicassoPreferenceIconTarget(getResources(), profilePreference, cornerRadius);
-
     refresh();
   }
 
   @Override
   public void onPause() {
     super.onPause();
     FxAccountSyncStatusHelper.getInstance().stopObserving(syncStatusDelegate);
 
@@ -513,16 +509,20 @@ public class FxAccountStatusFragment
   protected void refresh() {
     // refresh is called from our onResume, which can happen before the owning
     // Activity tells us about an account (via our public
     // refresh(AndroidFxAccount) method).
     if (fxAccount == null) {
       throw new IllegalArgumentException("fxAccount must not be null");
     }
 
+    // profilePreference is set during onCreate, so it's definitely not null here.
+    final float cornerRadius = getResources().getDimension(R.dimen.fxaccount_profile_image_width) / 2;
+    profileAvatarTarget = new PicassoPreferenceIconTarget(getResources(), profilePreference, cornerRadius);
+
     updateProfileInformation();
     updateAuthServerPreference();
     updateSyncServerPreference();
 
     try {
       // There are error states determined by Android, not the login state
       // machine, and we have a chance to present these states here. We handle
       // them specially, since we can't surface these states as part of syncing,
--- a/security/manager/ssl/SSLServerCertVerification.cpp
+++ b/security/manager/ssl/SSLServerCertVerification.cpp
@@ -1278,16 +1278,17 @@ GatherTelemetryForSingleSCT(const ct::Ve
       MOZ_ASSERT_UNREACHABLE("Unexpected VerifiedSCT::Status type");
   }
   Telemetry::Accumulate(Telemetry::SSL_SCTS_VERIFICATION_STATUS,
                         verificationStatus);
 }
 
 void
 GatherCertificateTransparencyTelemetry(const UniqueCERTCertList& certList,
+                                       bool isEV,
                                        const CertificateTransparencyInfo& info)
 {
   if (!info.enabled) {
     // No telemetry is gathered when CT is disabled.
     return;
   }
 
   for (const ct::VerifiedSCT& sct : info.verifyResult.verifiedScts) {
@@ -1301,16 +1302,69 @@ GatherCertificateTransparencyTelemetry(c
   }
 
   // Handle the histogram of SCTs counts.
   uint32_t sctsCount =
     static_cast<uint32_t>(info.verifyResult.verifiedScts.length());
   // Note that sctsCount can also be 0 in case we've received SCT binary data,
   // but it failed to parse (e.g. due to unsupported CT protocol version).
   Telemetry::Accumulate(Telemetry::SSL_SCTS_PER_CONNECTION, sctsCount);
+
+  // Report CT Policy compliance of EV certificates.
+  if (isEV) {
+    uint32_t evCompliance = 0;
+    switch (info.policyCompliance) {
+      case ct::CTPolicyCompliance::Compliant:
+        evCompliance = 1;
+        break;
+      case ct::CTPolicyCompliance::NotEnoughScts:
+        evCompliance = 2;
+        break;
+      case ct::CTPolicyCompliance::NotDiverseScts:
+        evCompliance = 3;
+        break;
+      case ct::CTPolicyCompliance::Unknown:
+      default:
+        MOZ_ASSERT_UNREACHABLE("Unexpected CTPolicyCompliance type");
+    }
+    Telemetry::Accumulate(Telemetry::SSL_CT_POLICY_COMPLIANCE_OF_EV_CERTS,
+                          evCompliance);
+  }
+
+  // Get the root cert.
+  CERTCertListNode* rootNode = CERT_LIST_TAIL(certList);
+  MOZ_ASSERT(rootNode);
+  if (!rootNode) {
+    return;
+  }
+  MOZ_ASSERT(!CERT_LIST_END(rootNode, certList));
+  if (CERT_LIST_END(rootNode, certList)) {
+    return;
+  }
+  CERTCertificate* rootCert = rootNode->cert;
+  MOZ_ASSERT(rootCert);
+  if (!rootCert) {
+    return;
+  }
+
+  // Report CT Policy compliance by CA.
+  switch (info.policyCompliance) {
+    case ct::CTPolicyCompliance::Compliant:
+      AccumulateTelemetryForRootCA(
+        Telemetry::SSL_CT_POLICY_COMPLIANT_CONNECTIONS_BY_CA, rootCert);
+      break;
+    case ct::CTPolicyCompliance::NotEnoughScts:
+    case ct::CTPolicyCompliance::NotDiverseScts:
+      AccumulateTelemetryForRootCA(
+        Telemetry::SSL_CT_POLICY_NON_COMPLIANT_CONNECTIONS_BY_CA, rootCert);
+      break;
+    case ct::CTPolicyCompliance::Unknown:
+    default:
+      MOZ_ASSERT_UNREACHABLE("Unexpected CTPolicyCompliance type");
+  }
 }
 
 // Note: Takes ownership of |peerCertChain| if SECSuccess is not returned.
 SECStatus
 AuthCertificate(CertVerifier& certVerifier,
                 nsNSSSocketInfo* infoObject,
                 const UniqueCERTCertificate& cert,
                 UniqueCERTCertList& peerCertChain,
@@ -1385,16 +1439,17 @@ AuthCertificate(CertVerifier& certVerifi
   if (rv == Success) {
     // Certificate verification succeeded. Delete any potential record of
     // certificate error bits.
     RememberCertErrorsTable::GetInstance().RememberCertHasError(infoObject,
                                                                 nullptr,
                                                                 SECSuccess);
     GatherSuccessfulValidationTelemetry(certList);
     GatherCertificateTransparencyTelemetry(certList,
+                                  /*isEV*/ evOidPolicy != SEC_OID_UNKNOWN,
                                            certificateTransparencyInfo);
 
     // The connection may get terminated, for example, if the server requires
     // a client cert. Let's provide a minimal SSLStatus
     // to the caller that contains at least the cert and its status.
     RefPtr<nsSSLStatus> status(infoObject->SSLStatus());
     if (!status) {
       status = new nsSSLStatus();
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1152,9 +1152,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 = 477;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1496157927859000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1496246555187000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -11,17 +11,17 @@ 0xf00.ch: did not receive HSTS header
 100dayloans.com: max-age too low: 0
 1018hosting.nl: did not receive HSTS header
 1022996493.rsc.cdn77.org: could not connect to host
 10seos.com: did not receive HSTS header
 10tacle.io: could not connect to host
 123plons.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 123test.de: did not receive HSTS header
 126ium.moe: could not connect to host
-127011-networks.ch: could not connect to host
+127011-networks.ch: did not receive HSTS header
 12vpnchina.com: could not connect to host
 16packets.com: could not connect to host
 1a-jva.de: did not receive HSTS header
 1p.ro: could not connect to host
 1password.com: did not receive HSTS header
 1xcess.com: did not receive HSTS header
 1years.cc: did not receive HSTS header
 206rc.net: max-age too low: 2592000
@@ -152,17 +152,17 @@ aircomms.com: did not receive HSTS heade
 airproto.com: did not receive HSTS header
 aishnair.com: could not connect to host
 aiticon.de: did not receive HSTS header
 aiw-thkoeln.online: could not connect to host
 ajmahal.com: could not connect to host
 akclinics.org: did not receive HSTS header
 akombakom.net: did not receive HSTS header
 akselimedia.fi: did not receive HSTS header
-akutun.cl: did not receive HSTS header
+akutun.cl: could not connect to host
 al-shami.net: could not connect to host
 aladdin.ie: did not receive HSTS header
 alainwolf.net: could not connect to host
 alanlee.net: could not connect to host
 alanrickmanflipstable.com: could not connect to host
 alariel.de: did not receive HSTS header
 alarmsystemreviews.com: did not receive HSTS header
 albertopimienta.com: did not receive HSTS header
@@ -192,16 +192,17 @@ alphabuild.io: did not receive HSTS head
 alphalabs.xyz: could not connect to host
 alt33c3.org: could not connect to host
 alterbaum.net: did not receive HSTS header
 altfire.ca: could not connect to host
 altmv.com: max-age too low: 7776000
 amaforums.org: could not connect to host
 amandaonishi.com: could not connect to host
 amavis.org: did not receive HSTS header
+amazingfloridagulfhomes.com: could not connect to host
 ameho.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 american-truck-simulator.de: could not connect to host
 american-truck-simulator.net: could not connect to host
 americanworkwear.nl: did not receive HSTS header
 amigogeek.net: could not connect to host
 amilx.com: could not connect to host
 amilx.org: could not connect to host
 amimoto-ami.com: max-age too low: 3153600
@@ -258,32 +259,33 @@ apeasternpower.com: could not connect to
 api.mega.co.nz: could not connect to host
 apibot.de: could not connect to host
 apis.google.com: did not receive HSTS header (error ignored - included regardless)
 apis.world: did not receive HSTS header
 apmg-certified.com: did not receive HSTS header
 apmg-cyber.com: did not receive HSTS header
 apnakliyat.com: did not receive HSTS header
 aponkralsunucu.com: could not connect to host
-app.lookout.com: could not connect to host
+app.lookout.com: did not receive HSTS header
 app.manilla.com: could not connect to host
 appart.ninja: could not connect to host
 appengine.google.com: did not receive HSTS header (error ignored - included regardless)
 applez.xyz: could not connect to host
 applic8.com: did not receive HSTS header
 appraisal-comps.com: could not connect to host
 appreciationkards.com: could not connect to host
 approlys.fr: did not receive HSTS header
 apps-for-fishing.com: could not connect to host
 appsdash.io: could not connect to host
 appseccalifornia.org: did not receive HSTS header
 appson.co.uk: did not receive HSTS header
 arabdigitalexpression.org: did not receive HSTS header
 aradulconteaza.ro: could not connect to host
 aran.me.uk: could not connect to host
+arbeitskreis-asyl-eningen.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 arboineuropa.nl: did not receive HSTS header
 arbu.eu: could not connect to host
 arlen.se: could not connect to host
 armory.consulting: could not connect to host
 armory.supplies: could not connect to host
 armytricka.cz: did not receive HSTS header
 arnaudfeld.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 arpr.co: did not receive HSTS header
@@ -320,38 +322,41 @@ asuhe.win: did not receive HSTS header
 atavio.at: could not connect to host
 atavio.ch: could not connect to host
 atavio.de: did not receive HSTS header
 atbeckett.com: did not receive HSTS header
 athaliasoft.com: did not receive HSTS header
 athenelive.com: could not connect to host
 athul.xyz: did not receive HSTS header
 atlex.nl: did not receive HSTS header
+atlseccon.com: did not receive HSTS header
 atomik.pro: could not connect to host
 atop.io: could not connect to host
 attimidesigns.com: did not receive HSTS header
 au.search.yahoo.com: max-age too low: 172800
 aubiosales.com: did not receive HSTS header
 aucubin.moe: could not connect to host
 audiovisualdevices.com.au: did not receive HSTS header
 aufmerksamkeitsstudie.com: could not connect to host
+augiero.it: could not connect to host
 aujapan.ru: could not connect to host
 aurainfosec.com: did not receive HSTS header
 aurainfosec.com.au: could not connect to host
 auraredeye.com: did not receive HSTS header
 auraredshield.com: did not receive HSTS header
 auroratownshipfd.org: could not connect to host
 ausnah.me: could not connect to host
 ausoptic.com.au: max-age too low: 2592000
 auszeit.bio: did not receive HSTS header
 auth.mail.ru: did not receive HSTS header
 authentication.io: could not connect to host
 authoritynutrition.com: did not receive HSTS header
 auto-serwis.zgorzelec.pl: did not receive HSTS header
 auto4trade.nl: could not connect to host
+autodeploy.it: could not connect to host
 autoepc.ro: did not receive HSTS header
 autojuhos.sk: could not connect to host
 autokovrik-diskont.ru: did not receive HSTS header
 autotsum.com: could not connect to host
 autumnwindsagility.com: could not connect to host
 auverbox.ovh: could not connect to host
 auxiliumincrementum.co.uk: could not connect to host
 av.de: did not receive HSTS header
@@ -367,16 +372,17 @@ axado.com.br: did not receive HSTS heade
 axeny.com: did not receive HSTS header
 aymerick.fr: could not connect to host
 az.search.yahoo.com: did not receive HSTS header
 azprep.us: could not connect to host
 azuxul.fr: could not connect to host
 b303.me: did not receive HSTS header
 b3orion.com: max-age too low: 0
 b64.club: could not connect to host
+babelfisch.eu: could not connect to host
 baby-click.de: did not receive HSTS header
 babybic.hu: did not receive HSTS header
 babyhouse.xyz: could not connect to host
 babysaying.me: max-age too low: 6000
 bacchanallia.com: could not connect to host
 back-bone.nl: did not receive HSTS header
 bacon-monitoring.org: could not connect to host
 badcronjob.com: could not connect to host
@@ -398,16 +404,17 @@ bashcode.ninja: could not connect to hos
 basicsolutionsus.com: did not receive HSTS header
 basilisk.io: could not connect to host
 bassh.net: could not connect to host
 baud.ninja: could not connect to host
 baumstark.ca: could not connect to host
 baysse.eu: could not connect to host
 bazarstupava.sk: could not connect to host
 bcbsmagentprofile.com: could not connect to host
+bcchack.com: could not connect to host
 bccx.com: could not connect to host
 bckp.de: did not receive HSTS header
 bcm.com.au: max-age too low: 0
 bcnx.de: max-age too low: 0
 bcsytv.com: could not connect to host
 bcweightlifting.ca: could not connect to host
 be.search.yahoo.com: did not receive HSTS header
 beach-inspector.com: did not receive HSTS header
@@ -492,16 +499,17 @@ bitsafe.systems: did not receive HSTS he
 bittmann.me: could not connect to host
 bitvigor.com: could not connect to host
 bityes.org: could not connect to host
 bivsi.com: could not connect to host
 bizcms.com: did not receive HSTS header
 bizon.sk: did not receive HSTS header
 black-armada.com.pl: could not connect to host
 black-armada.pl: could not connect to host
+black-octopus.ru: could not connect to host
 blackburn.link: could not connect to host
 blacklane.com: did not receive HSTS header
 blackly.uk: max-age too low: 0
 blackpayment.ru: could not connect to host
 blackscytheconsulting.com: could not connect to host
 blackunicorn.wtf: could not connect to host
 blakerandall.xyz: could not connect to host
 blantik.net: could not connect to host
@@ -535,31 +543,30 @@ bogosity.se: could not connect to host
 bohan.life: could not connect to host
 bombsquad.studio: could not connect to host
 bonapp.restaurant: could not connect to host
 bonfi.net: did not receive HSTS header
 bonigo.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 bonitabrazilian.co.nz: did not receive HSTS header
 bookcelerator.com: did not receive HSTS header
 booked.holiday: could not connect to host
-bookourdjs.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
+bookourdjs.com: could not connect to host
 boomerang.com: could not connect to host
 boosterlearnpro.com: did not receive HSTS header
 bootjp.me: did not receive HSTS header
 boringsecurity.net: could not connect to host
 boris.one: did not receive HSTS header
 borisbesemer.com: could not connect to host
 botox.bz: did not receive HSTS header
 bouwbedrijfpurmerend.nl: did not receive HSTS header
 bowlroll.net: max-age too low: 0
 boxcryptor.com: did not receive HSTS header
 br3in.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 braineet.com: did not receive HSTS header
 brainfork.ml: could not connect to host
-brainster.co: could not connect to host
 braintreegateway.com: did not receive HSTS header
 braintreepayments.com: did not receive HSTS header
 brainvation.de: did not receive HSTS header
 bran.cc: could not connect to host
 branchtrack.com: did not receive HSTS header
 branchzero.com: did not receive HSTS header
 brandnewdays.nl: could not connect to host
 brandon.so: could not connect to host
@@ -604,16 +611,17 @@ businesshosting.nl: did not receive HSTS
 businessloanstoday.com: max-age too low: 0
 busold.ws: could not connect to host
 bustimes.org: could not connect to host
 butchersworkshop.com: did not receive HSTS header
 buttercoin.com: could not connect to host
 butterfieldstraining.com: did not receive HSTS header
 buybaby.eu: did not receive HSTS header
 buyfox.de: did not receive HSTS header
+buzzconcert.com: could not connect to host
 bws16.de: did not receive HSTS header
 by4cqb.cn: could not connect to host
 bypassed.press: could not connect to host
 bypassed.today: did not receive HSTS header
 bypassed.works: did not receive HSTS header
 bypassed.world: did not receive HSTS header
 bypro.xyz: could not connect to host
 bysymphony.com: max-age too low: 0
@@ -629,16 +637,17 @@ cadao.me: did not receive HSTS header
 cafe-scientifique.org.ec: could not connect to host
 caim.cz: did not receive HSTS header
 cainhosting.com: did not receive HSTS header
 cajapopcorn.com: did not receive HSTS header
 cake.care: could not connect to host
 calendarr.com: did not receive HSTS header
 calgaryconstructionjobs.com: did not receive HSTS header
 calix.com: max-age too low: 0
+call.me: did not receive HSTS header
 calltrackingreports.com: could not connect to host
 calvin.me: max-age too low: 2592000
 calvinallen.net: did not receive HSTS header
 calyxinstitute.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 camolist.com: could not connect to host
 canadiangamblingchoice.com: did not receive HSTS header
 cancelmyprofile.com: did not receive HSTS header
 candicontrols.com: did not receive HSTS header
@@ -720,30 +729,30 @@ chcemvediet.sk: max-age too low: 1555200
 cheapdns.org: could not connect to host
 chebedara.com: could not connect to host
 checkout.google.com: did not receive HSTS header (error ignored - included regardless)
 cheerflow.com: could not connect to host
 cheesetart.my: could not connect to host
 cheetah85.de: could not connect to host
 chejianer.cn: did not receive HSTS header
 chensir.net: could not connect to host
+chepaofen.com: could not connect to host
 cherysunzhang.com: max-age too low: 7776000
 chihiro.xyz: could not connect to host
 chijiokeindustries.co.uk: could not connect to host
 childcaresolutionscny.org: did not receive HSTS header
 chinacdn.org: could not connect to host
 chinawhale.com: did not receive HSTS header
 chirgui.eu: could not connect to host
 chm.vn: did not receive HSTS header
 chontalpa.pw: could not connect to host
 chopperforums.com: did not receive HSTS header
 chotu.net: could not connect to host
 chris-web.info: could not connect to host
 chrisandsarahinasia.com: did not receive HSTS header
-chrisbrown.id.au: could not connect to host
 chrisfaber.com: could not connect to host
 chriskyrouac.com: could not connect to host
 christiaandruif.nl: could not connect to host
 christianbargon.de: did not receive HSTS header
 christianbro.gq: could not connect to host
 christophercolumbusfoundation.gov: could not connect to host
 christophheich.me: could not connect to host
 chrisupjohn.com: could not connect to host
@@ -773,29 +782,31 @@ cldly.com: could not connect to host
 cleanexperts.co.uk: could not connect to host
 cleaningsquad.ca: could not connect to host
 cleanmta.com: could not connect to host
 clearc.tk: could not connect to host
 clemovementlaw.com: could not connect to host
 clerkendweller.uk: could not connect to host
 clickandgo.com: did not receive HSTS header
 clickandshoot.nl: did not receive HSTS header
+clickgram.biz: could not connect to host
 clientsecure.me: could not connect to host
 clint.id.au: max-age too low: 0
 clintonbloodworth.com: could not connect to host
 clintonbloodworth.io: could not connect to host
 clintwilson.technology: max-age too low: 2592000
 clip.mx: did not receive HSTS header
 cloud.wtf: could not connect to host
 cloudapi.vc: could not connect to host
 cloudcert.org: did not receive HSTS header
 cloudcy.net: could not connect to host
 clouddesktop.co.nz: could not connect to host
 cloudey.net: did not receive HSTS header
 cloudflare.com: did not receive HSTS header
+cloudily.com: could not connect to host
 cloudimag.es: could not connect to host
 cloudlink.club: could not connect to host
 cloudns.com.au: could not connect to host
 cloudspotterapp.com: did not receive HSTS header
 cloudstoragemaus.com: could not connect to host
 cloudstorm.me: could not connect to host
 cloudwalk.io: did not receive HSTS header
 cloverleaf.net: max-age too low: 0
@@ -808,31 +819,30 @@ cmci.dk: did not receive HSTS header
 cmlachapelle.ch: did not receive HSTS header
 cmlancy.ch: did not receive HSTS header
 cmlignon.ch: did not receive HSTS header
 cmplainpalais.ch: did not receive HSTS header
 cmsbattle.com: could not connect to host
 cmscafe.ru: did not receive HSTS header
 cn.search.yahoo.com: did not receive HSTS header
 cni-certing.it: max-age too low: 0
-cnwage.com: could not connect to host
-cnwarn.com: could not connect to host
 co50.com: did not receive HSTS header
 cocaine-import.agency: could not connect to host
 cocktailfuture.fr: could not connect to host
 codabix.com: did not receive HSTS header
 codabix.de: could not connect to host
 codabix.net: could not connect to host
 code.google.com: did not receive HSTS header (error ignored - included regardless)
 codeco.pw: could not connect to host
 codecontrollers.de: could not connect to host
 codeforce.io: could not connect to host
 codelayer.ca: could not connect to host
 codemonkeyrawks.net: did not receive HSTS header
 codepoet.de: could not connect to host
+codepult.com: could not connect to host
 codepx.com: did not receive HSTS header
 codewiththepros.org: could not connect to host
 codiva.io: max-age too low: 2592000
 codymoniz.com: could not connect to host
 coffeeetc.co.uk: did not receive HSTS header
 coffeestrategies.com: max-age too low: 2592000
 coiffeurschnittstelle.ch: did not receive HSTS header
 coindam.com: could not connect to host
@@ -861,39 +871,40 @@ concord-group.co.jp: did not receive HST
 condesaelectronics.com: max-age too low: 0
 confirm365.com: could not connect to host
 conformal.com: could not connect to host
 connect.ua: did not receive HSTS header
 consciousandglamorous.com: could not connect to host
 console.python.org: did not receive HSTS header
 constructionjobs.com: did not receive HSTS header
 contactbig.com: did not receive HSTS header
+containerstatistics.com: could not connect to host
 contarkos.xyz: could not connect to host
 content-api-dev.azurewebsites.net: could not connect to host
 continuumgaming.com: could not connect to host
 controlcenter.gigahost.dk: did not receive HSTS header
 coolchevy.org.ua: did not receive HSTS header
 cor-ser.es: could not connect to host
 coralproject.net: did not receive HSTS header
 coralrosado.com.br: did not receive HSTS header
 cordial-restaurant.com: did not receive HSTS header
 core.mx: could not connect to host
 core4system.de: could not connect to host
 corenetworking.de: could not connect to host
-corgicloud.com: could not connect to host
+corgicloud.com: did not receive HSTS header
+cormactagging.ie: could not connect to host
 cormilu.com.br: did not receive HSTS header
 correctpaardbatterijnietje.nl: did not receive HSTS header
 corruption-mc.net: could not connect to host
 corruption-rsps.net: could not connect to host
 corruption-server.net: could not connect to host
 count.sh: could not connect to host
 couragewhispers.ca: did not receive HSTS header
 coursdeprogrammation.com: could not connect to host
 coursella.com: did not receive HSTS header
-cousincouples.com: did not receive HSTS header
 covenantbank.net: could not connect to host
 coverduck.ru: could not connect to host
 cpuvinf.eu.org: could not connect to host
 cr.search.yahoo.com: did not receive HSTS header
 cracking.org: did not receive HSTS header
 craftbeerbarn.co.uk: could not connect to host
 craftedge.xyz: could not connect to host
 craftmine.cz: did not receive HSTS header
@@ -932,18 +943,20 @@ crysadm.com: max-age too low: 1
 crystalclassics.co.uk: did not receive HSTS header
 csapak.com: max-age too low: 0
 csawctf.poly.edu: could not connect to host
 csfs.org.uk: could not connect to host
 csgodicegame.com: did not receive HSTS header
 csgoelemental.com: could not connect to host
 csgokings.eu: could not connect to host
 csohack.tk: could not connect to host
+csokolade.hu: could not connect to host
 cspbuilder.info: could not connect to host
 cspvalidator.org: did not receive HSTS header
+csru.net: could not connect to host
 csvape.com: did not receive HSTS header
 ct-status.org: could not connect to host
 ct.search.yahoo.com: did not receive HSTS header
 cthulhuden.com: could not connect to host
 cubeserver.eu: could not connect to host
 cubewano.com: could not connect to host
 cujanovic.com: did not receive HSTS header
 cumshots-video.ru: could not connect to host
@@ -1076,16 +1089,17 @@ devuan.org: did not receive HSTS header
 dewin.io: could not connect to host
 dhpcs.com: did not receive HSTS header
 dhpiggott.net: did not receive HSTS header
 diablotine.rocks: could not connect to host
 diamante.ro: could not connect to host
 diarbag.us: did not receive HSTS header
 diasp.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 dick.red: could not connect to host
+die-partei-reutlingen.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 diedrich.co: did not receive HSTS header
 digidroom.be: did not receive HSTS header
 digioccumss.ddns.net: could not connect to host
 digitalbank.kz: could not connect to host
 digitaldaddy.net: could not connect to host
 digitalriver.tk: could not connect to host
 digitalskillswap.com: could not connect to host
 dim.lighting: could not connect to host
@@ -1156,36 +1170,40 @@ drishti.guru: could not connect to host
 drive.google.com: did not receive HSTS header (error ignored - included regardless)
 drobniuch.pl: could not connect to host
 droidboss.com: could not connect to host
 dropcam.com: did not receive HSTS header
 drtroyhendrickson.com: could not connect to host
 drumbandesperanto.nl: could not connect to host
 ds-christiansen.de: did not receive HSTS header
 dshiv.io: could not connect to host
+dubrovskiy.net: could not connect to host
+dubrovskiy.pro: could not connect to host
 duesee.org: could not connect to host
 dullsir.com: did not receive HSTS header
 duria.de: max-age too low: 3600
 dustri.org: did not receive HSTS header
+dutchessuganda.com: did not receive HSTS header
 dutchrank.com: could not connect to host
 dwhd.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 dworzak.ch: could not connect to host
 dycontrol.de: could not connect to host
 dylanscott.com.au: did not receive HSTS header
-dymersion.com: did not receive HSTS header
+dynamic-innovations.net: could not connect to host
 dzimejl.sk: did not receive HSTS header
 dzlibs.io: could not connect to host
+dzndk.net: could not connect to host
 dzndk.org: could not connect to host
 e-aut.net: did not receive HSTS header
 e-deca2.org: did not receive HSTS header
 e-sa.com: did not receive HSTS header
 e3amn2l.com: could not connect to host
 earlybirdsnacks.com: could not connect to host
+earthrise16.com: could not connect to host
 easez.net: did not receive HSTS header
-eason-yang.com: could not connect to host
 easychiller.org: could not connect to host
 easyhaul.com: did not receive HSTS header
 eatlowcarb.de: did not receive HSTS header
 eauclairecommerce.com: could not connect to host
 ebankcbt.com: could not connect to host
 ebecs.com: did not receive HSTS header
 ebermannstadt.de: max-age too low: 0
 ebonyriddle.com: could not connect to host
@@ -1255,16 +1273,17 @@ empleostampico.com: did not receive HSTS
 enaah.de: could not connect to host
 enaia.fr: could not connect to host
 enargia.jp: max-age too low: 0
 encode.host: did not receive HSTS header
 encode.space: did not receive HSTS header
 encoder.pw: could not connect to host
 encontrebarato.com.br: did not receive HSTS header
 encrypted.google.com: did not receive HSTS header (error ignored - included regardless)
+encryptedaudience.com: could not connect to host
 end.pp.ua: could not connect to host
 endlessdark.net: max-age too low: 600
 endlessdiy.ca: could not connect to host
 endlesstone.com: did not receive HSTS header
 enersec.co.uk: could not connect to host
 engelwerbung.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 enigmacpt.com: did not receive HSTS header
 enigmail.net: did not receive HSTS header
@@ -1288,16 +1307,17 @@ ephry.com: could not connect to host
 epoxate.com: could not connect to host
 eq8.net.au: could not connect to host
 equate.net.au: max-age too low: 3600
 equatetechnologies.com.au: max-age too low: 3600
 equilibre-yoga-jennifer-will.com: could not connect to host
 erawanarifnugroho.com: did not receive HSTS header
 eressea.xyz: could not connect to host
 eridanus.uk: could not connect to host
+erikhubers.nl: could not connect to host
 ernaehrungsberatung-rapperswil.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 ernaehrungsberatung-zurich.ch: could not connect to host
 ernesto.at: could not connect to host
 eromixx.com: did not receive HSTS header
 erotalia.es: could not connect to host
 eroticen.com: did not receive HSTS header
 erotische-aanbiedingen.nl: could not connect to host
 errlytics.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
@@ -1336,16 +1356,17 @@ evites.me: could not connect to host
 evomon.com: could not connect to host
 evossd.tk: could not connect to host
 ewuchuan.com: could not connect to host
 excelgum.ca: did not receive HSTS header
 exfiles.cz: did not receive HSTS header
 exgravitus.com: could not connect to host
 exitus.jp: max-age too low: 0
 exno.co: could not connect to host
+expatads.com: could not connect to host
 expertmile.com: did not receive HSTS header
 expoundite.net: did not receive HSTS header
 expressfinance.co.za: did not receive HSTS header
 extreemhost.nl: did not receive HSTS header
 extremenetworking.net: could not connect to host
 exy.pw: could not connect to host
 eyeglassuniverse.com: did not receive HSTS header
 ez.fi: could not connect to host
@@ -1379,18 +1400,16 @@ farhadexchange.com: did not receive HSTS
 fashioncare.cz: did not receive HSTS header
 fasset.jp: could not connect to host
 fastograph.com: could not connect to host
 fastopen.ml: could not connect to host
 fatgeekflix.net: could not connect to host
 fatherhood.gov: did not receive HSTS header
 fatlossguide.xyz: could not connect to host
 fatox.de: could not connect to host
-fatzebra.com.au: could not connect to host
-fawkex.me: could not connect to host
 fayolle.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 fbox.li: could not connect to host
 fdj.im: could not connect to host
 feard.space: could not connect to host
 feastr.de: did not receive HSTS header
 fedux.com.ar: could not connect to host
 feezmodo.com: max-age too low: 0
 felisslovakia.sk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
@@ -1401,23 +1420,24 @@ feragon.net: did not receive HSTS header
 fernseher-kauf.de: could not connect to host
 ferrolatino.com: could not connect to host
 festember.com: did not receive HSTS header
 festrip.com: could not connect to host
 fexmen.com: could not connect to host
 ffmradio.de: did not receive HSTS header
 fhdhelp.de: could not connect to host
 fhdhilft.de: could not connect to host
+fierman.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 fifieldtech.com: could not connect to host
 fiftyshadesofluca.ml: could not connect to host
 fig.co: did not receive HSTS header
 fightr.co: could not connect to host
 fikt.space: could not connect to host
 filmipop.com: max-age too low: 0
-finalgear.com: could not connect to host
+finalgear.com: did not receive HSTS header
 financieringsportaal.nl: did not receive HSTS header
 finanzkontor.net: could not connect to host
 findtutorsnearme.com: did not receive HSTS header
 finfev.de: could not connect to host
 finiteheap.com: did not receive HSTS header
 finneas.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 finpt.com: could not connect to host
 firebaseio-demo.com: could not connect to host
@@ -1447,29 +1467,31 @@ fleximus.org: could not connect to host
 fliexer.com: could not connect to host
 flirchi.com: did not receive HSTS header
 floless.co.uk: did not receive HSTS header
 florian-lillpopp.de: max-age too low: 10
 florianlillpopp.de: max-age too low: 10
 floridaescapes.co.uk: did not receive HSTS header
 flouartistique.ch: could not connect to host
 flow.pe: could not connect to host
+flow.su: could not connect to host
 flowersandclouds.com: could not connect to host
 flowlo.me: could not connect to host
 flushstudios.com: did not receive HSTS header
 flyaces.com: did not receive HSTS header
 fm83.nl: could not connect to host
 fndout.com: did not receive HSTS header
 fnvsecurity.com: could not connect to host
 fonetiq.io: could not connect to host
 food4health.guide: could not connect to host
 foodievenues.com: could not connect to host
 footballmapped.com: could not connect to host
 foraje-profesionale.ro: did not receive HSTS header
 forbook.net: could not connect to host
+fordbydesign.com: could not connect to host
 foreignexchangeresource.com: did not receive HSTS header
 foreveralone.io: could not connect to host
 forex-dan.com: did not receive HSTS header
 forextimes.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 formazioneopen.it: did not receive HSTS header
 formbetter.com: could not connect to host
 formula.cf: could not connect to host
 fotiu.com: could not connect to host
@@ -1515,17 +1537,16 @@ frosty-gaming.xyz: did not receive HSTS 
 fruitusers.com: could not connect to host
 frusky.de: did not receive HSTS header
 frusky.net: could not connect to host
 fspphoto.com: could not connect to host
 ftctele.com: did not receive HSTS header
 fuckbilibili.com: did not receive HSTS header
 fuckgfw233.org: could not connect to host
 fukushima-web.com: did not receive HSTS header
-fumo.se: could not connect to host
 fundacionhijosdelsol.org: could not connect to host
 funkyweddingideas.com.au: could not connect to host
 funnyang.com: could not connect to host
 funrun.com: did not receive HSTS header
 furiffic.com: did not receive HSTS header
 furnation.com: could not connect to host
 furry.be: max-age too low: 86400
 fusionmate.com: could not connect to host
@@ -1619,17 +1640,16 @@ getwashdaddy.com: could not connect to h
 gfm.tech: could not connect to host
 gfournier.ca: could not connect to host
 gfwsb.ml: could not connect to host
 gglks.com: did not receive HSTS header
 gh16.com.ar: could not connect to host
 gheorghesarcov.ga: could not connect to host
 gheorghesarcov.tk: could not connect to host
 gietvloergarant.nl: did not receive HSTS header
-gifzilla.net: could not connect to host
 gigacloud.org: max-age too low: 0
 gilgaz.com: did not receive HSTS header
 gilly.berlin: did not receive HSTS header
 gingali.de: did not receive HSTS header
 gintenreiter-photography.com: did not receive HSTS header
 giogadesign.com: did not receive HSTS header
 gipsamsfashion.com: could not connect to host
 gipsic.com: did not receive HSTS header
@@ -1688,16 +1708,17 @@ gov.ax: could not connect to host
 govillemo.ca: did not receive HSTS header
 gozel.com.tr: did not receive HSTS header
 gparent.org: did not receive HSTS header
 gpfclan.de: could not connect to host
 gpsfix.cz: could not connect to host
 gpstuner.com: did not receive HSTS header
 gracesofgrief.com: max-age too low: 86400
 gradienthosting.co.uk: did not receive HSTS header
+graffen.dk: did not receive HSTS header
 grandmascookieblog.com: did not receive HSTS header
 grantedby.me: could not connect to host
 graph.no: did not receive HSTS header
 graphsearchengine.com: could not connect to host
 gravito.nl: did not receive HSTS header
 gravity-net.de: could not connect to host
 graycell.net: could not connect to host
 grazetech.com: could not connect to host
@@ -1744,16 +1765,17 @@ gw2reload.eu: could not connect to host
 gwijaya.com: could not connect to host
 gwtest.us: could not connect to host
 gxlrx.net: could not connect to host
 gyboche.com: could not connect to host
 gyboche.science: could not connect to host
 gycis.me: could not connect to host
 gypthecat.com: max-age too low: 604800
 gyz.io: could not connect to host
+gzitech.com: could not connect to host
 h2check.org: could not connect to host
 haarkliniek.com: did not receive HSTS header
 habanaavenue.com: did not receive HSTS header
 habbo.life: did not receive HSTS header
 hablemosdetecnologia.com.ve: could not connect to host
 hack.cz: could not connect to host
 hack.li: did not receive HSTS header
 hacker.one: could not connect to host
@@ -1783,16 +1805,17 @@ hapissl.com: could not connect to host
 happyfabric.me: did not receive HSTS header
 happygastro.com: could not connect to host
 harabuhouse.com: did not receive HSTS header
 harbor-light.net: could not connect to host
 hardfalcon.net: could not connect to host
 hardline.xyz: could not connect to host
 haribosupermix.com: could not connect to host
 harmonycosmetic.com: max-age too low: 300
+harrisonsand.com: could not connect to host
 harristony.com: could not connect to host
 hartmancpa.com: did not receive HSTS header
 harvestrenewal.org: did not receive HSTS header
 harz.cloud: could not connect to host
 has.vision: could not connect to host
 hash-list.com: could not connect to host
 hasilocke.de: did not receive HSTS header
 haste.ch: could not connect to host
@@ -1819,26 +1842,28 @@ heartlandrentals.com: did not receive HS
 heftkaufen.de: did not receive HSTS header
 helloworldhost.com: did not receive HSTS header
 helpadmin.net: could not connect to host
 helpium.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 helpmebuild.com: did not receive HSTS header
 hemdal.se: could not connect to host
 hencagon.com: could not connect to host
 henriknoerr.com: could not connect to host
+heritagedentistry.ca: could not connect to host
 hermes-net.de: could not connect to host
 herrenfahrt.com: did not receive HSTS header
 herzbotschaft.de: did not receive HSTS header
 heutger.net: did not receive HSTS header
 heywoodtown.co.uk: could not connect to host
 hibilog.com: could not connect to host
 hicn.gq: could not connect to host
 hiddendepth.ie: max-age too low: 0
 hiddenmail.xyz: could not connect to host
 hiddenrefuge.eu.org: could not connect to host
+hideftv.deals: did not receive HSTS header
 highseer.com: did not receive HSTS header
 highsurf-miyazaki.com: did not receive HSTS header
 highvelocitydesign.com: could not connect to host
 hiitcentre.com: did not receive HSTS header
 hikariempire.com: could not connect to host
 hillcity.org.nz: did not receive HSTS header
 hilnu.tk: could not connect to host
 hipercultura.com: did not receive HSTS header
@@ -1883,22 +1908,24 @@ hr-intranet.com: did not receive HSTS he
 hsandbox.tech: max-age too low: 2592000
 hsir.me: could not connect to host
 hsts.date: could not connect to host
 html-lab.tk: could not connect to host
 http418.xyz: could not connect to host
 httpstatuscode418.xyz: could not connect to host
 hu.search.yahoo.com: did not receive HSTS header
 huarongdao.com: max-age too low: 1
+huffduffer.com: could not connect to host
 hugocollignon.fr: could not connect to host
 hugosleep.com.au: did not receive HSTS header
 humblefinances.com: could not connect to host
 humeurs.net: could not connect to host
 humpteedumptee.in: did not receive HSTS header
 huntshomeinspections.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
+hupp.se: could not connect to host
 hurricanelabs.com: did not receive HSTS header
 huskybutt.dog: could not connect to host
 hydra.ws: could not connect to host
 hydronium.cf: could not connect to host
 hydronium.ga: could not connect to host
 hydronium.me: could not connect to host
 hydronium.tk: could not connect to host
 hyper69.com: did not receive HSTS header
@@ -1938,27 +1965,28 @@ ifleurs.com: could not connect to host
 ifx.ee: could not connect to host
 ignatisd.gr: did not receive HSTS header
 igule.net: could not connect to host
 ihrlotto.de: could not connect to host
 ihrnationalrat.ch: could not connect to host
 ihsbsd.me: could not connect to host
 ihsbsd.tk: could not connect to host
 ihuanmeng.com: did not receive HSTS header
+ikkatsu-satei.jp: did not receive HSTS header
 ikujii.com: max-age too low: 0
 ikwilguidobellen.nl: did not receive HSTS header
 ilbuongiorno.it: did not receive HSTS header
 ilikerainbows.co: could not connect to host
 ilikerainbows.co.uk: could not connect to host
 ilmconpm.de: did not receive HSTS header
 ilona.graphics: max-age too low: 3600
 iluvscotland.co.uk: did not receive HSTS header
 imakepoems.net: could not connect to host
 ime.moe: could not connect to host
-imguoguo.com: could not connect to host
+imguoguo.com: did not receive HSTS header
 imim.pw: did not receive HSTS header
 immersionwealth.com: could not connect to host
 immoprotect.ca: did not receive HSTS header
 immortals-co.com: did not receive HSTS header
 immoverkauf24.at: did not receive HSTS header
 immoverkauf24.de: did not receive HSTS header
 immunicity.info: could not connect to host
 immunicity.press: could not connect to host
@@ -1972,16 +2000,17 @@ imperialwebsolutions.com: did not receiv
 imu.li: did not receive HSTS header
 imusic.dk: did not receive HSTS header
 inb4.us: could not connect to host
 inbox.li: did not receive HSTS header
 incendiary-arts.com: could not connect to host
 inchomatic.com: did not receive HSTS header
 indoorskiassen.nl: did not receive HSTS header
 indust.me: did not receive HSTS header
+inexpensivecomputers.net: could not connect to host
 infcof.com: max-age too low: 0
 infilock.com: could not connect to host
 infinitude.xyz: could not connect to host
 infinitudecloud.com: could not connect to host
 infinitusgaming.eu: could not connect to host
 inflation.ml: could not connect to host
 infogrfx.com: did not receive HSTS header
 infosec.rip: could not connect to host
@@ -2041,17 +2070,17 @@ irelandesign.com: did not receive HSTS h
 irmtrudjurke.de: did not receive HSTS header
 ischool.co.jp: did not receive HSTS header
 iseek.biz: max-age too low: 0
 iseulde.com: could not connect to host
 ishillaryclintoninprisonyet.com: could not connect to host
 isitamor.pm: could not connect to host
 iskaz.rs: did not receive HSTS header
 isogram.nl: could not connect to host
-israkurort.com: did not receive HSTS header
+israkurort.com: could not connect to host
 isslshop.com: could not connect to host
 istaspirtslietas.lv: did not receive HSTS header
 it-go.net: did not receive HSTS header
 itechgeek.com: max-age too low: 0
 itos.asia: did not receive HSTS header
 itos.pl: did not receive HSTS header
 itriskltd.com: could not connect to host
 itsadog.co.uk: did not receive HSTS header
@@ -2096,20 +2125,20 @@ janbrodda.de: max-age too low: 2592000
 jannyrijneveld.nl: did not receive HSTS header
 janus-engineering.de: did not receive HSTS header
 japlex.com: could not connect to host
 jaqen.ch: could not connect to host
 jardins-utopie.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 jaredeberle.org: did not receive HSTS header
 jaroslavtrsek.cz: did not receive HSTS header
 jartza.org: could not connect to host
-jasmineconseil.com: did not receive HSTS header
+jasmineconseil.com: could not connect to host
 jasonrobinson.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 jasonroe.me: did not receive HSTS header
-jasonsansone.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
+jasonsansone.com: could not connect to host
 jastoria.pl: could not connect to host
 jayblock.com: did not receive HSTS header
 jayschulman.com: did not receive HSTS header
 jayscoaching.com: did not receive HSTS header
 jayshao.com: did not receive HSTS header
 jazzinutrecht.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 jazzncheese.com: could not connect to host
 jbn.mx: could not connect to host
@@ -2119,17 +2148,17 @@ jcoscia.com: could not connect to host
 jctf.io: could not connect to host
 jeff393.com: could not connect to host
 jenjoit.de: could not connect to host
 jensenbanden.no: could not connect to host
 jeremye77.com: could not connect to host
 jesorsenville.com: did not receive HSTS header
 jessicabenedictus.nl: could not connect to host
 jesuisformidable.nl: could not connect to host
-jetaprices.com: could not connect to host
+jetaprices.com: max-age too low: 0
 jetsetcharge.com: could not connect to host
 jetsetpay.com: could not connect to host
 jettshome.org: could not connect to host
 jeugdkans.nl: did not receive HSTS header
 jf.duckdns.org: max-age too low: 0
 jfmel.com: did not receive HSTS header
 jfx.space: did not receive HSTS header
 jh-media.eu: could not connect to host
@@ -2157,16 +2186,17 @@ johnrom.com: did not receive HSTS header
 jonas-keidel.de: did not receive HSTS header
 jonasgroth.se: did not receive HSTS header
 jonathan.ir: could not connect to host
 jonathancarter.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 jonn.me: could not connect to host
 joostbovee.nl: did not receive HSTS header
 jordanhamilton.me: could not connect to host
 joretapo.fr: did not receive HSTS header
+jornadasciberdefensa2016.es: did not receive HSTS header
 josahrens.me: could not connect to host
 joshi.su: could not connect to host
 joshstroup.me: could not connect to host
 jottit.com: could not connect to host
 jpbike.cz: could not connect to host
 jrc9.ca: did not receive HSTS header
 jrgold.me: could not connect to host
 jrmd.io: could not connect to host
@@ -2190,17 +2220,16 @@ justudin.com: did not receive HSTS heade
 juwairen.cn: did not receive HSTS header
 jvoice.net: could not connect to host
 jwilsson.me: could not connect to host
 jxm.in: could not connect to host
 jznet.org: max-age too low: 86400
 k-dev.de: could not connect to host
 ka-clan.com: could not connect to host
 kabuabc.com: did not receive HSTS header
-kabus.org: could not connect to host
 kadioglumakina.com.tr: did not receive HSTS header
 kaela.design: could not connect to host
 kahopoon.net: could not connect to host
 kaisers.de: did not receive HSTS header
 kalami.nl: did not receive HSTS header
 kamikano.com: could not connect to host
 kaneo-gmbh.de: did not receive HSTS header
 kaplatz.is: could not connect to host
@@ -2298,17 +2327,16 @@ kostya.net: could not connect to host
 kotonehoko.net: could not connect to host
 kotovstyle.ru: could not connect to host
 kr.search.yahoo.com: did not receive HSTS header
 kramsj.uk: could not connect to host
 krayx.com: could not connect to host
 kreavis.com: did not receive HSTS header
 kredite.sale: could not connect to host
 kriegt.es: could not connect to host
-kristikala.nl: could not connect to host
 krmela.com: could not connect to host
 kroetenfuchs.de: could not connect to host
 kropkait.pl: could not connect to host
 krouzkyliduska.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 krunut.com: did not receive HSTS header
 krypteia.org: could not connect to host
 kryptomech.com: could not connect to host
 kschv-rdeck.de: did not receive HSTS header
@@ -2349,16 +2377,17 @@ lagoza.name: could not connect to host
 lambdafive.co.uk: could not connect to host
 lampl.info: did not receive HSTS header
 lancehoteis.com.br: could not connect to host
 landscape.canonical.com: max-age too low: 2592000
 langenbach.rocks: could not connect to host
 langhun.me: did not receive HSTS header
 laobox.fr: could not connect to host
 laozhu.me: did not receive HSTS header
+laquack.com: did not receive HSTS header
 laserfuchs.de: did not receive HSTS header
 lashstuff.com: did not receive HSTS header
 lask.in: did not receive HSTS header
 latinred.com: could not connect to host
 latour-managedcare.ch: did not receive HSTS header
 latus.xyz: could not connect to host
 lausitzer-widerstand.de: could not connect to host
 lavine.ch: did not receive HSTS header
@@ -2403,16 +2432,17 @@ letsmultiplayerplay.com: did not receive
 letustravel.tk: could not connect to host
 levelum.com: did not receive HSTS header
 lfullerdesign.com: did not receive HSTS header
 lgiswa.com.au: did not receive HSTS header
 lgrs.com.au: did not receive HSTS header
 lgts.se: could not connect to host
 li.search.yahoo.com: did not receive HSTS header
 liaillustr.at: did not receive HSTS header
+liam-w.com: did not receive HSTS header
 liamjack.fr: could not connect to host
 lianye.in: could not connect to host
 lianye1.cc: could not connect to host
 lianye2.cc: could not connect to host
 lianye3.cc: could not connect to host
 lianye4.cc: could not connect to host
 lianye5.cc: could not connect to host
 lianye6.cc: could not connect to host
@@ -2438,16 +2468,17 @@ lillpopp.eu: max-age too low: 10
 lilpwny.com: could not connect to host
 lim-light.com: could not connect to host
 limalama.eu: max-age too low: 1
 limeyeti.com: could not connect to host
 limiteddata.co.uk: could not connect to host
 limpido.it: could not connect to host
 lincolnwayflorist.com: could not connect to host
 lindberg.io: did not receive HSTS header
+lingerie.com.br: could not connect to host
 lingotaxi.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 lingros-test.tk: could not connect to host
 linguaquote.com: did not receive HSTS header
 link2serve.com: did not receive HSTS header
 linmi.cc: did not receive HSTS header
 lintmx.com: could not connect to host
 linuxeyecandy.com: could not connect to host
 linuxfixed.it: could not connect to host
@@ -2531,29 +2562,29 @@ m.nu: did not receive HSTS header
 m2epro.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 m2tc.fr: could not connect to host
 m3-gmbh.de: did not receive HSTS header
 m82labs.com: did not receive HSTS header
 maarten.nyc: did not receive HSTS header
 maartenvandekamp.nl: did not receive HSTS header
 mac-torrents.me: did not receive HSTS header
 macchaberrycream.com: could not connect to host
+macchedil.com: did not receive HSTS header
 macdj.tk: could not connect to host
 macgeneral.de: did not receive HSTS header
 machon.biz: could not connect to host
 madars.org: did not receive HSTS header
 maddin.ga: could not connect to host
 madebymagnitude.com: did not receive HSTS header
 maderwin.com: could not connect to host
 mae-berlinistanbul.com: could not connect to host
 mafamane.com: could not connect to host
 maff.scot: did not receive HSTS header
 mafiareturns.com: max-age too low: 2592000
 magenx.com: did not receive HSTS header
-magicbroccoli.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 mahamed91.pw: could not connect to host
 mail-settings.google.com: did not receive HSTS header (error ignored - included regardless)
 mail.google.com: did not receive HSTS header (error ignored - included regardless)
 maildragon.com: could not connect to host
 mailhost.it: could not connect to host
 makeitdynamic.com: could not connect to host
 makerstuff.net: did not receive HSTS header
 malerversand.de: did not receive HSTS header
@@ -2579,16 +2610,17 @@ marcush.de: did not receive HSTS header
 marcuskoh.com: did not receive HSTS header
 mariannematthew.com: could not connect to host
 marie-curie.fr: could not connect to host
 marie-elisabeth.dk: did not receive HSTS header
 mario.party: did not receive HSTS header
 markaconnor.com: could not connect to host
 markayapilandirma.com: could not connect to host
 market.android.com: did not receive HSTS header (error ignored - included regardless)
+markprof.ru: could not connect to host
 markrego.com: could not connect to host
 marktboten.de: did not receive HSTS header
 markus-dev.com: did not receive HSTS header
 markusweimar.de: did not receive HSTS header
 marleyresort.com: did not receive HSTS header
 marshut.net: could not connect to host
 martiert.com: could not connect to host
 martijnvhoof.nl: could not connect to host
@@ -2603,16 +2635,17 @@ matchneedle.com: could not connect to ho
 maternalsafety.org: did not receive HSTS header
 matrip.de: could not connect to host
 matrix.ac: could not connect to host
 matrixcheats.net: could not connect to host
 matsuz.com: could not connect to host
 mattberryman.com: did not receive HSTS header
 mattcoles.io: did not receive HSTS header
 mattfin.ch: could not connect to host
+matthewkenny.co.uk: could not connect to host
 matthewprenger.com: could not connect to host
 matthiassteen.be: max-age too low: 0
 mattressinsider.com: max-age too low: 3153600
 mattsvensson.com: did not receive HSTS header
 mattwb65.com: could not connect to host
 matty.digital: max-age too low: 3600
 maultrom.ml: could not connect to host
 maur.cz: did not receive HSTS header
@@ -2640,17 +2673,16 @@ mediastorm.us: could not connect to host
 mediawikicn.org: could not connect to host
 medirich.co: could not connect to host
 meditek-dv.ru: could not connect to host
 medm-test.com: could not connect to host
 medwayindia.com: could not connect to host
 meedoenzaanstad.nl: did not receive HSTS header
 meetings2.com: did not receive HSTS header
 meetscompany.jp: did not receive HSTS header
-megablogging.org: could not connect to host
 megakiste.de: could not connect to host
 megashur.se: did not receive HSTS header
 megaxchange.com: did not receive HSTS header
 meghudson.com: could not connect to host
 mein-gesundheitsmanager.com: did not receive HSTS header
 meincenter-meinemeinung.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 meincloudspeicher.de: could not connect to host
 meinebo.it: could not connect to host
@@ -2676,17 +2708,17 @@ metin2blog.de: did not receive HSTS head
 metis.pw: could not connect to host
 meuemail.pro: could not connect to host
 mexbt.com: could not connect to host
 mfcatalin.com: could not connect to host
 mfiles.pl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 mh-bloemen.co.jp: could not connect to host
 mhdsyarif.com: did not receive HSTS header
 mhealthdemocamp.com: could not connect to host
-mhertel.com: could not connect to host
+mhertel.com: did not receive HSTS header
 mhict.nl: max-age too low: 0
 mhx.pw: could not connect to host
 mia.to: could not connect to host
 michaelfitzpatrickruth.com: did not receive HSTS header
 michaelwaite.org: could not connect to host
 michal-kral.cz: could not connect to host
 michalborka.cz: could not connect to host
 michelchouinard.ca: could not connect to host
@@ -2758,17 +2790,16 @@ moho.kr: did not receive HSTS header
 monarca.systems: could not connect to host
 monasterialis.eu: could not connect to host
 mondar.io: did not receive HSTS header
 mondopoint.com: did not receive HSTS header
 moneytoday.com: max-age too low: 0
 monitman.com: could not connect to host
 montenero.pl: could not connect to host
 moon.lc: could not connect to host
-moonless.net: could not connect to host
 moov.is: could not connect to host
 moparisthebest.biz: could not connect to host
 moparisthebest.info: could not connect to host
 moparscape.org: did not receive HSTS header
 mor.gl: could not connect to host
 morethanadream.lv: could not connect to host
 moriz.net: could not connect to host
 morningcalculation.com: could not connect to host
@@ -2778,20 +2809,22 @@ morz.org: could not connect to host
 mostwuat.com: could not connect to host
 motherbase.io: could not connect to host
 motionpicturesolutions.com: did not receive HSTS header
 motocyklovedily.cz: did not receive HSTS header
 motoryz.com: max-age too low: 300
 mottvd.com: could not connect to host
 moula.com.au: did not receive HSTS header
 mountainmusicpromotions.com: did not receive HSTS header
+movepin.com: did not receive HSTS header
 moviesabout.net: could not connect to host
 moy-gorod.od.ua: did not receive HSTS header
 moy.cat: did not receive HSTS header
 mp3juices.is: could not connect to host
+mpintaamalabanna.it: could not connect to host
 mqas.net: could not connect to host
 mrdani.net: could not connect to host
 mrettich.org: did not receive HSTS header
 mrnonz.com: max-age too low: 0
 mrpopat.in: did not receive HSTS header
 mrs-shop.com: did not receive HSTS header
 msc-seereisen.net: could not connect to host
 msno.no: did not receive HSTS header
@@ -2903,16 +2936,17 @@ neonisi.com: could not connect to host
 nepustil.net: did not receive HSTS header
 netba.net: could not connect to host
 netbox.cc: could not connect to host
 netherwind.eu: did not receive HSTS header
 netloanusa.com: max-age too low: 0
 netmagik.com: did not receive HSTS header
 nettefoundation.com: could not connect to host
 netulo.com: could not connect to host
+networx-online.de: could not connect to host
 netzbit.de: could not connect to host
 netzpolitik.org: did not receive HSTS header
 netztest.at: did not receive HSTS header
 neueonlinecasino2016.com: could not connect to host
 neuralgic.net: could not connect to host
 neutralox.com: did not receive HSTS header
 never-afk.de: did not receive HSTS header
 neveta.com: could not connect to host
@@ -2939,29 +2973,31 @@ nicky.io: did not receive HSTS header
 nicoborghuis.nl: could not connect to host
 nicolasbettag.me: did not receive HSTS header
 niconiconi.xyz: could not connect to host
 niconode.com: could not connect to host
 nien.chat: could not connect to host
 nightwinds.tk: could not connect to host
 nightx.uk: could not connect to host
 niho.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
+niklas.pw: could not connect to host
 nikomo.fi: could not connect to host
 ninchisho-online.com: did not receive HSTS header
 ninhs.org: did not receive HSTS header
 nippler.org: did not receive HSTS header
 nippombashi.net: did not receive HSTS header
 nipponcareers.com: did not receive HSTS header
 nixien.fr: could not connect to host
 nkinka.de: did not receive HSTS header
 nlegall.fr: did not receive HSTS header
 nmctest.net: could not connect to host
 nnya.cat: could not connect to host
 no17sifangjie.cc: could not connect to host
 nocallaghan.com: could not connect to host
+noclegi-online.pl: did not receive HSTS header
 noctinus.tk: could not connect to host
 nodebrewery.com: could not connect to host
 nodetemple.com: could not connect to host
 nodi.at: could not connect to host
 noexpect.org: could not connect to host
 noima.com: did not receive HSTS header
 nolatepayments.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 nolberg.net: did not receive HSTS header
@@ -3001,27 +3037,29 @@ nu3.se: did not receive HSTS header
 nufla.de: could not connect to host
 null-sec.ru: could not connect to host
 null.cat: could not connect to host
 null.tips: could not connect to host
 nullpoint.at: did not receive HSTS header
 number.me: did not receive HSTS header
 numericacu.com: did not receive HSTS header
 numero-di-telefono.it: could not connect to host
+numista.com: did not receive HSTS header
 nuos.org: could not connect to host
 nurserybook.co: did not receive HSTS header
 nutleyeducationalfoundation.org: did not receive HSTS header
 nutleyef.org: did not receive HSTS header
 nutritionculture.com: could not connect to host
 nutsandboltsmedia.com: did not receive HSTS header
 nuxer.fr: could not connect to host
 nwa.xyz: could not connect to host
 nwgh.org: max-age too low: 86400
 nwork.media: could not connect to host
 nyantec.com: did not receive HSTS header
+nys-hk.com: could not connect to host
 nysepho.pw: could not connect to host
 nystart.no: did not receive HSTS header
 nz.search.yahoo.com: max-age too low: 172800
 nzb.cat: max-age too low: 7776000
 nzquakes.maori.nz: did not receive HSTS header
 o0o.one: did not receive HSTS header
 oasis.mobi: did not receive HSTS header
 oasisim.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
@@ -3249,27 +3287,27 @@ physicalist.com: could not connect to ho
 pickr.co: could not connect to host
 picotronic.biz: could not connect to host
 picscare.co.uk: did not receive HSTS header
 pieperhome.de: could not connect to host
 piggott.me.uk: did not receive HSTS header
 pilgermaske.org: did not receive HSTS header
 piligrimname.com: could not connect to host
 pillowandpepper.com: did not receive HSTS header
+pincodeit.com: could not connect to host
 pippen.io: could not connect to host
 piratedb.com: could not connect to host
 piratedot.com: could not connect to host
 piratelist.online: did not receive HSTS header
 piratenlogin.de: could not connect to host
 pirateproxy.sx: could not connect to host
 pirati.cz: max-age too low: 604800
 pirlitu.com: did not receive HSTS header
 pisexy.me: did not receive HSTS header
 pisidia.de: could not connect to host
-pittaya.com: could not connect to host
 pittonpreschool.com: did not receive HSTS header
 pixel.google.com: did not receive HSTS header (error ignored - included regardless)
 pixelcode.com.au: could not connect to host
 pixelhero.co.uk: did not receive HSTS header
 pixi.chat: could not connect to host
 pixi.me: could not connect to host
 pj83.duckdns.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 pk.search.yahoo.com: did not receive HSTS header
@@ -3340,37 +3378,41 @@ printfn.com: could not connect to host
 priolkar.com: did not receive HSTS header
 privacylabs.io: did not receive HSTS header
 privacyrup.net: could not connect to host
 prnt.li: did not receive HSTS header
 pro-zone.com: could not connect to host
 prodpad.com: did not receive HSTS header
 professionalboundaries.com: did not receive HSTS header
 profi-durchgangsmelder.de: did not receive HSTS header
+profpay.com: could not connect to host
 profundr.com: could not connect to host
 progblog.net: could not connect to host
 progg.no: could not connect to host
 progress-technologies.com: could not connect to host
 prohostonline.fi: could not connect to host
 projectdp.net: could not connect to host
+projectmercury.space: could not connect to host
 promecon-gmbh.de: did not receive HSTS header
 prontocleaners.co.uk: could not connect to host
 prontolight.com: did not receive HSTS header
 prontomovers.co.uk: could not connect to host
 propactrading.com: could not connect to host
 prosocialmachines.com: could not connect to host
 prosoft.sk: did not receive HSTS header
 prosperident.com: did not receive HSTS header
 prowhisky.de: did not receive HSTS header
 proximato.com: could not connect to host
 proxybay.al: could not connect to host
 proxybay.club: could not connect to host
 proxybay.info: did not receive HSTS header
+proxybay.top: could not connect to host
 prxio.site: did not receive HSTS header
 prytkov.com: did not receive HSTS header
+psicologia.co.ve: could not connect to host
 psw.academy: did not receive HSTS header
 psw.consulting: did not receive HSTS header
 ptn.moscow: could not connect to host
 pubkey.is: could not connect to host
 pugliese.fr: could not connect to host
 puiterwijk.org: could not connect to host
 pumpgames.net: could not connect to host
 punchr-kamikazee.rhcloud.com: did not receive HSTS header
@@ -3414,17 +3456,16 @@ qwilink.me: did not receive HSTS header
 r10n.com: did not receive HSTS header
 r15.me: could not connect to host
 r3bl.me: did not receive HSTS header
 ra-schaal.de: could not connect to host
 raajheshkannaa.com: could not connect to host
 radicaleducation.net: could not connect to host
 rafaelcz.de: could not connect to host
 railgun.com.cn: could not connect to host
-railjob.cn: could not connect to host
 rainbowbarracuda.com: could not connect to host
 ramonj.nl: could not connect to host
 randomcage.com: did not receive HSTS header
 randomcloud.net: could not connect to host
 randomhero.cloud: could not connect to host
 rankthespot.com: could not connect to host
 rannseier.org: did not receive HSTS header
 rapido.nu: did not receive HSTS header
@@ -3493,16 +3534,17 @@ res-rheingau.de: did not receive HSTS he
 res42.com: could not connect to host
 research.facebook.com: did not receive HSTS header
 reserve-online.net: did not receive HSTS header
 respice.xyz: could not connect to host
 respostas.com.br: did not receive HSTS header
 restchart.com: did not receive HSTS header
 retcor.net: could not connect to host
 retrotracks.net: max-age too low: 0
+reulitz.de: could not connect to host
 revealdata.com: did not receive HSTS header
 revello.org: did not receive HSTS header
 reverie.pw: could not connect to host
 reviews.anime.my: max-age too low: 5184000
 revtut.net: did not receive HSTS header
 rewardstock.com: max-age too low: 0
 rex.st: could not connect to host
 rhapsodhy.hu: could not connect to host
@@ -3513,17 +3555,16 @@ richardb.me: could not connect to host
 richiemail.net: did not receive HSTS header
 richmondsunlight.com: did not receive HSTS header
 richsiciliano.com: could not connect to host
 rid-wan.com: could not connect to host
 rideworks.com: did not receive HSTS header
 riesenweber.id.au: did not receive HSTS header
 right2.org: could not connect to host
 righttoknow.ie: did not receive HSTS header
-rigolitch.fr: did not receive HSTS header
 riiconnect24.net: could not connect to host
 rijndael.xyz: could not connect to host
 rika.me: could not connect to host
 ring0.xyz: did not receive HSTS header
 ringh.am: could not connect to host
 rippleunion.com: could not connect to host
 riskmgt.com.au: could not connect to host
 rj.gg: could not connect to host
@@ -3535,24 +3576,26 @@ rngmeme.com: could not connect to host
 roadfeast.com: could not connect to host
 roan24.pl: did not receive HSTS header
 robertglastra.com: could not connect to host
 robigalia.org: did not receive HSTS header
 robteix.com: did not receive HSTS header
 robtex.net: did not receive HSTS header
 robtex.org: did not receive HSTS header
 rochman.id: could not connect to host
+rocketr.net: did not receive HSTS header
 rocksberg.net: could not connect to host
 rockstarloan.com: max-age too low: 0
 roddis.net: did not receive HSTS header
 rodney.id.au: did not receive HSTS header
 rodosto.com: did not receive HSTS header
 roeper.party: could not connect to host
 roesemann.email: could not connect to host
 roguelikecenter.fr: did not receive HSTS header
+rolandreed.cn: could not connect to host
 romans-place.me.uk: did not receive HSTS header
 romulusapp.com: could not connect to host
 ronvandordt.info: could not connect to host
 ronwo.de: max-age too low: 1
 room-checkin24.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 roosterpgplus.nl: could not connect to host
 rootforum.org: did not receive HSTS header
 rootservice.org: did not receive HSTS header
@@ -3614,17 +3657,17 @@ saml2.com: could not connect to host
 sampoznay.ru: did not receive HSTS header
 samraskauskas.com: could not connect to host
 samsen.club: did not receive HSTS header
 sanasalud.org: could not connect to host
 sandrolittke.de: did not receive HSTS header
 sandviks.com: did not receive HSTS header
 sangwon.org: could not connect to host
 sansemea.com: did not receive HSTS header
-sansonehowell.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
+sansonehowell.com: could not connect to host
 sarah-beckett-harpist.com: did not receive HSTS header
 sarahsweetlife.com: could not connect to host
 sarakas.com: could not connect to host
 sarisonproductions.com: did not receive HSTS header
 saruwebshop.co.za: could not connect to host
 sash.pw: could not connect to host
 sat.rent: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 satinn.pl: did not receive HSTS header
@@ -3805,21 +3848,21 @@ siriad.com: did not receive HSTS header
 sirius-lee.net: could not connect to host
 sitennisclub.com: did not receive HSTS header
 siterip.org: could not connect to host
 sites.google.com: did not receive HSTS header (error ignored - included regardless)
 sitesten.com: did not receive HSTS header
 sitsy.ru: did not receive HSTS header
 sixtwentyten.com: did not receive HSTS header
 skhosting.eu: did not receive HSTS header
-skidstresser.com: could not connect to host
 skile.ru: could not connect to host
 skk.io: could not connect to host
 skoda-clever-lead.de: could not connect to host
 skoda-im-dialog.de: could not connect to host
+skotty.io: did not receive HSTS header
 skullhouse.nyc: did not receive HSTS header
 skyflix.me: could not connect to host
 skyoy.com: did not receive HSTS header
 slash-dev.de: did not receive HSTS header
 slashand.co: did not receive HSTS header
 slashem.me: did not receive HSTS header
 slattery.co: could not connect to host
 sleep10.com: could not connect to host
@@ -3878,29 +3921,30 @@ solinter.com.br: did not receive HSTS he
 solit.systems: did not receive HSTS header
 soll-i.ch: did not receive HSTS header
 solsystems.ru: could not connect to host
 someshit.xyz: could not connect to host
 somethingnew.xyz: could not connect to host
 sonicrainboom.rocks: could not connect to host
 soobi.org: did not receive HSTS header
 soondy.com: did not receive HSTS header
-sotiran.com: did not receive HSTS header
+sotiran.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 sotor.de: did not receive HSTS header
 soulema.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 soulfulglamour.uk: could not connect to host
 sourcelair.com: did not receive HSTS header
 southside-crew.club: could not connect to host
 southworcestershiregpservices.co.uk: could not connect to host
 souyar.de: could not connect to host
 souyar.net: could not connect to host
 souyar.us: could not connect to host
 sovereignshare.com: could not connect to host
 sown.dyndns.org: could not connect to host
 spacehq.org: max-age too low: 0
+spaggel.nl: could not connect to host
 sparelib.com: max-age too low: 3650
 spark.team: could not connect to host
 sparkbase.cn: could not connect to host
 sparklingsparklers.com: did not receive HSTS header
 sparsa.army: could not connect to host
 spartantheatre.org: max-age too low: 172800
 spauted.com: could not connect to host
 spdysync.com: could not connect to host
@@ -3911,17 +3955,17 @@ speedtest-russia.com: [Exception... "Com
 speedy.lt: max-age too low: 0
 speedyprep.com: did not receive HSTS header
 speidel.com.tr: did not receive HSTS header
 spencerbaer.com: could not connect to host
 sperohub.io: could not connect to host
 spherenix.org: could not connect to host
 spicydog.tk: could not connect to host
 spiegels.nl: could not connect to host
-spikeykc.me: could not connect to host
+spikeykc.me: did not receive HSTS header
 spillmaker.no: did not receive HSTS header
 spilsbury.io: could not connect to host
 spititout.it: could not connect to host
 spittersberger.recipes: did not receive HSTS header
 split.is: did not receive HSTS header
 sponsortobias.com: did not receive HSTS header
 sportwette.eu: did not receive HSTS header
 spot-events.com: could not connect to host
@@ -3969,16 +4013,18 @@ stephenschrauger.com: did not receive HS
 stephenschrauger.info: did not receive HSTS header
 stephenschrauger.net: did not receive HSTS header
 stephenschrauger.org: did not receive HSTS header
 stevensononthe.net: did not receive HSTS header
 stewartremodelingadvantage.com: did not receive HSTS header
 stig.io: did not receive HSTS header
 stigroom.com: could not connect to host
 stillblackhat.id: could not connect to host
+stirlingpoon.com: did not receive HSTS header
+stirlingpoon.net: did not receive HSTS header
 stirlingpoon.xyz: could not connect to host
 stkbn.com: did not receive HSTS header
 stmbgr.com: could not connect to host
 stn.me.uk: did not receive HSTS header
 stocktrade.de: could not connect to host
 stoffe-monster.de: did not receive HSTS header
 stole-my.bike: could not connect to host
 stole-my.tv: could not connect to host
@@ -4000,16 +4046,17 @@ stroeercrm.de: could not connect to host
 strom.family: could not connect to host
 strongest-privacy.com: could not connect to host
 stuartbaxter.co: could not connect to host
 student-scientist.org: did not receive HSTS header
 student.andover.edu: did not receive HSTS header
 studentresearcher.org: did not receive HSTS header
 studentskydenik.cz: could not connect to host
 studenttravel.cz: did not receive HSTS header
+studinf.xyz: did not receive HSTS header
 studiozelden.com: did not receive HSTS header
 studybay.com: did not receive HSTS header
 studydrive.net: did not receive HSTS header
 stugb.de: did not receive HSTS header
 stw-group.at: could not connect to host
 stylenda.com: could not connect to host
 subbing.work: could not connect to host
 subdimension.org: could not connect to host
@@ -4040,17 +4087,16 @@ supweb.ovh: did not receive HSTS header
 surfeasy.com: did not receive HSTS header
 surfone-leucate.com: did not receive HSTS header
 sushi101tempe.com: did not receive HSTS header
 sushifrick.de: could not connect to host
 suzukikenichi.com: did not receive HSTS header
 sv.search.yahoo.com: did not receive HSTS header
 svarovani.tk: could not connect to host
 svatba-frantovi.cz: did not receive HSTS header
-sweetll.me: could not connect to host
 sweetstreats.ca: could not connect to host
 swimbee.nl: did not receive HSTS header
 swimming.ca: did not receive HSTS header
 swimturk.com.tr: did not receive HSTS header
 swmd5c.org: did not receive HSTS header
 sxbk.pw: could not connect to host
 syam.cc: could not connect to host
 sydgrabber.tk: could not connect to host
@@ -4063,27 +4109,25 @@ syncserve.net: did not receive HSTS head
 syneic.com: did not receive HSTS header
 syno.gq: could not connect to host
 syntheticmotoroil.org: did not receive HSTS header
 syriatalk.biz: could not connect to host
 syriatalk.org: could not connect to host
 sysadmin.xyz: did not receive HSTS header
 syso.name: could not connect to host
 szaszm.tk: max-age too low: 0
-t-shirts4less.nl: did not receive HSTS header
 t-tz.com: could not connect to host
 ta-65.com: could not connect to host
 ta65.com: could not connect to host
 taabe.xyz: did not receive HSTS header
 tacomafia.net: did not receive HSTS header
 tadigitalstore.com: could not connect to host
 tafoma.com: did not receive HSTS header
 tageau.com: could not connect to host
 taglondon.org: did not receive HSTS header
-tahf.net: could not connect to host
 tails.com.ar: did not receive HSTS header
 talk.google.com: did not receive HSTS header (error ignored - included regardless)
 talktwincities.com: could not connect to host
 tallr.se: could not connect to host
 tallshoe.com: could not connect to host
 tandarts-haarlem.nl: did not receive HSTS header
 tangibilizing.com: could not connect to host
 tapfinder.ca: could not connect to host
@@ -4108,28 +4152,28 @@ tcdw.net: could not connect to host
 tcl.ath.cx: did not receive HSTS header
 tcomms.org: max-age too low: 0
 tcp.expert: did not receive HSTS header
 teachforcanada.ca: did not receive HSTS header
 team-teasers.com: could not connect to host
 teamsocial.co: did not receive HSTS header
 teamzeus.cz: could not connect to host
 tech55i.com: did not receive HSTS header
-techassist.io: did not receive HSTS header
+techassist.io: could not connect to host
 techelements.co: could not connect to host
 techhipster.net: could not connect to host
 techhub.ml: could not connect to host
 techllage.com: could not connect to host
 techloaner.com: could not connect to host
 techmatehq.com: could not connect to host
 technogroup.cz: did not receive HSTS header
 technosavvyport.com: did not receive HSTS header
 techpointed.com: could not connect to host
+techreview.link: could not connect to host
 tedb.us: could not connect to host
-teemo.gg: did not receive HSTS header
 tegelsensanitaironline.nl: did not receive HSTS header
 tekshrek.com: did not receive HSTS header
 telefonnummer.online: could not connect to host
 telefoonnummerinfo.nl: could not connect to host
 telling.xyz: could not connect to host
 temehu.com: did not receive HSTS header
 tempcraft.net: could not connect to host
 tendertool.nl: could not connect to host
@@ -4283,16 +4327,17 @@ tomharling.uk: max-age too low: 86400
 tomharris.tech: did not receive HSTS header
 tomlankhorst.nl: did not receive HSTS header
 tommsy.com: did not receive HSTS header
 tommyads.com: could not connect to host
 tonburi.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 tonyfantjr.com: could not connect to host
 tonyw.xyz: could not connect to host
 toomanypillows.com: could not connect to host
+top-stage.net: could not connect to host
 topbargains.com.au: did not receive HSTS header
 topdeskdev.net: could not connect to host
 topmarine.se: could not connect to host
 topnewstoday.org: could not connect to host
 topshelfguild.com: could not connect to host
 torahanytime.com: did not receive HSTS header
 tosecure.link: could not connect to host
 toshnix.com: could not connect to host
@@ -4441,17 +4486,16 @@ utvbloggen.se: [Exception... "Component 
 uvarov.pw: did not receive HSTS header
 uy.search.yahoo.com: did not receive HSTS header
 uz.search.yahoo.com: did not receive HSTS header
 uzmandroid.net: could not connect to host
 uzmandroid.top: could not connect to host
 v2.pw: did not receive HSTS header
 v4veedu.com: could not connect to host
 vaddder.com: could not connect to host
-valasi.eu: could not connect to host
 valethound.com: could not connect to host
 valis.sx: could not connect to host
 valkyrja.xyz: did not receive HSTS header
 valleyridgepta.org: could not connect to host
 vallis.net: did not receive HSTS header
 valmagus.com: could not connect to host
 vampirism.eu: could not connect to host
 vanacht.co.za: did not receive HSTS header
@@ -4509,32 +4553,33 @@ vitalorange.com: did not receive HSTS he
 vitapingu.de: could not connect to host
 viva-french.com: did not receive HSTS header
 vlastimilburian.cz: did not receive HSTS header
 vlora.city: could not connect to host
 vm0.eu: did not receive HSTS header
 vmc.co.id: could not connect to host
 vmrdev.com: could not connect to host
 voceinveste.com: did not receive HSTS header
+vodpay.com: could not connect to host
 vodpay.net: could not connect to host
 vodpay.org: could not connect to host
 voicesuk.co.uk: did not receive HSTS header
 voidpay.com: could not connect to host
 voidpay.net: could not connect to host
 voidpay.org: could not connect to host
 volcrado.com: did not receive HSTS header
 vortexhobbies.com: did not receive HSTS header
 voshod.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 vosjesweb.nl: could not connect to host
 vox.vg: did not receive HSTS header
 vpl.me: did not receive HSTS header
 vpn-byen.dk: did not receive HSTS header
 vratny.space: could not connect to host
 vrobert.fr: could not connect to host
-vvl.me: could not connect to host
+vvl.me: did not receive HSTS header
 vxstream-sandbox.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 vyncke.org: max-age too low: 2678400
 vzk.io: could not connect to host
 w4a.fr: did not receive HSTS header
 w4xzr.top: could not connect to host
 w4xzr.xyz: could not connect to host
 wachtwoordencheck.nl: could not connect to host
 waixingrenfuli7.vip: could not connect to host
@@ -4583,17 +4628,17 @@ webnosql.com: could not connect to host
 webperformance.ru: max-age too low: 3600
 websenat.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 webstory.xyz: could not connect to host
 webswitch.io: could not connect to host
 webtechgadgetry.com: did not receive HSTS header
 webtiles.co.uk: could not connect to host
 webwork.pw: could not connect to host
 weddingenvelopes.co.uk: did not receive HSTS header
-weicn.org: did not receive HSTS header
+weiyuz.com: could not connect to host
 weizenke.im: could not connect to host
 wellastore.ru: did not receive HSTS header
 wellsolveit.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 weltmeisterschaft.net: could not connect to host
 weltverschwoerung.de: did not receive HSTS header
 weme.eu: could not connect to host
 wendalyncheng.com: did not receive HSTS header
 werdeeintimo.de: did not receive HSTS header
@@ -4757,17 +4802,17 @@ xombra.com: [Exception... "Component ret
 xpi.fr: could not connect to host
 xsmobile.de: could not connect to host
 xtream-hosting.com: could not connect to host
 xtream-hosting.de: could not connect to host
 xtream-hosting.eu: could not connect to host
 xtreamhosting.eu: could not connect to host
 xuri.me: max-age too low: 2592000
 xuwei.de: could not connect to host
-xuyh0120.win: could not connect to host
+xuyh0120.win: did not receive HSTS header
 xxbase.com: could not connect to host
 xyndrac.net: did not receive HSTS header
 y-o-w.com: did not receive HSTS header
 y-s.pw: max-age too low: 0
 yabrt.cn: could not connect to host
 yalook.com: did not receive HSTS header
 yamamo10.com: could not connect to host
 yanwh.xyz: did not receive HSTS header
@@ -4783,26 +4828,25 @@ yenniferallulli.de: could not connect to
 yenniferallulli.es: did not receive HSTS header
 yenniferallulli.moda: could not connect to host
 yenniferallulli.nl: could not connect to host
 yestees.com: did not receive HSTS header
 yetcore.io: could not connect to host
 yhaupenthal.org: could not connect to host
 yingyj.com: could not connect to host
 yippie.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
-yizhu.com: could not connect to host
 yjsoft.me: did not receive HSTS header
 yjsw.sh.cn: could not connect to host
 ynode.co: did not receive HSTS header
 ynsn.nl: did not receive HSTS header
+yoga.is-an-engineer.com: could not connect to host
 yokeepo.com: max-age too low: 0
 yoloboatrentals.com: did not receive HSTS header
 yoloprod.fr: could not connect to host
 yoloseo.com: could not connect to host
-yombo.net: could not connect to host
 youcontrol.ru: could not connect to host
 youngandunited.nl: did not receive HSTS header
 yourbapp.ch: could not connect to host
 yourcomputer.expert: did not receive HSTS header
 yoursecondphone.co: could not connect to host
 yourstrongbox.com: could not connect to host
 ypiresia.fr: could not connect to host
 ytcuber.xyz: could not connect to host
@@ -4840,16 +4884,17 @@ zentralwolke.de: did not receive HSTS he
 zera.com.au: could not connect to host
 zerolab.org: could not connect to host
 zerudi.com: did not receive HSTS header
 zett4.me: could not connect to host
 zeytin.pro: could not connect to host
 zh.search.yahoo.com: did not receive HSTS header
 zhaojin97.cn: did not receive HSTS header
 zhendingresources.com: could not connect to host
+zinenapse.info: could not connect to host
 zirtue.io: could not connect to host
 ziyuanabc.xyz: could not connect to host
 zkillboard.com: did not receive HSTS header
 zking.ga: could not connect to host
 zmy.im: did not receive HSTS header
 zocken.com: did not receive HSTS header
 zomerschoen.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 zoneminder.com: did not receive HSTS header
@@ -4861,9 +4906,8 @@ zoznamrealit.sk: did not receive HSTS he
 zqhong.com: could not connect to host
 ztan.tk: could not connect to host
 ztcaoll222.cn: did not receive HSTS header
 zten.org: could not connect to host
 zvncloud.com: did not receive HSTS header
 zwollemagazine.nl: did not receive HSTS header
 zwy.me: did not receive HSTS header
 zyf.pw: could not connect to host
-zymbit.com: could not connect to host
--- 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(1498577117309000);
+const PRTime gPreloadListExpirationTime = INT64_C(1498665744919000);
 
 static const char kSTSHostTable[] = {
   /* "0.me.uk", true */ '0', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "007-preisvergleich.de", true */ '0', '0', '7', '-', 'p', 'r', 'e', 'i', 's', 'v', 'e', 'r', 'g', 'l', 'e', 'i', 'c', 'h', '.', 'd', 'e', '\0',
   /* "0100dev.com", true */ '0', '1', '0', '0', 'd', 'e', 'v', '.', 'c', 'o', 'm', '\0',
   /* "0100dev.nl", true */ '0', '1', '0', '0', 'd', 'e', 'v', '.', 'n', 'l', '\0',
   /* "01electronica.com.ar", true */ '0', '1', 'e', 'l', 'e', 'c', 't', 'r', 'o', 'n', 'i', 'c', 'a', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
   /* "01seguridad.com.ar", true */ '0', '1', 's', 'e', 'g', 'u', 'r', 'i', 'd', 'a', 'd', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
@@ -111,17 +111,17 @@ static const char kSTSHostTable[] = {
   /* "21lg.co", true */ '2', '1', 'l', 'g', '.', 'c', 'o', '\0',
   /* "21stnc.com", true */ '2', '1', 's', 't', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "246060.ru", true */ '2', '4', '6', '0', '6', '0', '.', 'r', 'u', '\0',
   /* "247healthshop.com", true */ '2', '4', '7', 'h', 'e', 'a', 'l', 't', 'h', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "24hourpaint.com", true */ '2', '4', 'h', 'o', 'u', 'r', 'p', 'a', 'i', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "24ip.com", true */ '2', '4', 'i', 'p', '.', 'c', 'o', 'm', '\0',
   /* "24ip.de", true */ '2', '4', 'i', 'p', '.', 'd', 'e', '\0',
   /* "24ip.fr", true */ '2', '4', 'i', 'p', '.', 'f', 'r', '\0',
-  /* "24sihu.com", false */ '2', '4', 's', 'i', 'h', 'u', '.', 'c', 'o', 'm', '\0',
+  /* "24sihu.com", true */ '2', '4', 's', 'i', 'h', 'u', '.', 'c', 'o', 'm', '\0',
   /* "2600edinburgh.org", true */ '2', '6', '0', '0', 'e', 'd', 'i', 'n', 'b', 'u', 'r', 'g', 'h', '.', 'o', 'r', 'g', '\0',
   /* "2600hq.com", true */ '2', '6', '0', '0', 'h', 'q', '.', 'c', 'o', 'm', '\0',
   /* "263.info", true */ '2', '6', '3', '.', 'i', 'n', 'f', 'o', '\0',
   /* "28spots.net", true */ '2', '8', 's', 'p', 'o', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "2acbi-asso.fr", true */ '2', 'a', 'c', 'b', 'i', '-', 'a', 's', 's', 'o', '.', 'f', 'r', '\0',
   /* "2bas.nl", true */ '2', 'b', 'a', 's', '.', 'n', 'l', '\0',
   /* "2bis10.de", true */ '2', 'b', 'i', 's', '1', '0', '.', 'd', 'e', '\0',
   /* "2carpros.com", false */ '2', 'c', 'a', 'r', 'p', 'r', 'o', 's', '.', 'c', 'o', 'm', '\0',
@@ -145,19 +145,19 @@ static const char kSTSHostTable[] = {
   /* "33-km.ru", true */ '3', '3', '-', 'k', 'm', '.', 'r', 'u', '\0',
   /* "3473-wiki.de", true */ '3', '4', '7', '3', '-', 'w', 'i', 'k', 'i', '.', 'd', 'e', '\0',
   /* "35792.de", true */ '3', '5', '7', '9', '2', '.', 'd', 'e', '\0',
   /* "365beautyworld.com", true */ '3', '6', '5', 'b', 'e', 'a', 'u', 't', 'y', 'w', 'o', 'r', 'l', 'd', '.', 'c', 'o', 'm', '\0',
   /* "365healthworld.com", true */ '3', '6', '5', 'h', 'e', 'a', 'l', 't', 'h', 'w', 'o', 'r', 'l', 'd', '.', 'c', 'o', 'm', '\0',
   /* "365maya.com", true */ '3', '6', '5', 'm', 'a', 'y', 'a', '.', 'c', 'o', 'm', '\0',
   /* "365skulls.com", true */ '3', '6', '5', 's', 'k', 'u', 'l', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "368mibn.com", true */ '3', '6', '8', 'm', 'i', 'b', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "38sihu.com", false */ '3', '8', 's', 'i', 'h', 'u', '.', 'c', 'o', 'm', '\0',
+  /* "38sihu.com", true */ '3', '8', 's', 'i', 'h', 'u', '.', 'c', 'o', 'm', '\0',
   /* "398.info", true */ '3', '9', '8', '.', 'i', 'n', 'f', 'o', '\0',
-  /* "39sihu.com", false */ '3', '9', 's', 'i', 'h', 'u', '.', 'c', 'o', 'm', '\0',
+  /* "39sihu.com", true */ '3', '9', 's', 'i', 'h', 'u', '.', 'c', 'o', 'm', '\0',
   /* "3bigking.com", true */ '3', 'b', 'i', 'g', 'k', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "3c-d.de", true */ '3', 'c', '-', 'd', '.', 'd', 'e', '\0',
   /* "3delivered.com", true */ '3', 'd', 'e', 'l', 'i', 'v', 'e', 'r', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "3dmedium.de", true */ '3', 'd', 'm', 'e', 'd', 'i', 'u', 'm', '.', 'd', 'e', '\0',
   /* "3do3dont.com", true */ '3', 'd', 'o', '3', 'd', 'o', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "3r.org.uk", true */ '3', 'r', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "3s-hosting.de", true */ '3', 's', '-', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "3timegear.com", true */ '3', 't', 'i', 'm', 'e', 'g', 'e', 'a', 'r', '.', 'c', 'o', 'm', '\0',
@@ -653,17 +653,16 @@ static const char kSTSHostTable[] = {
   /* "ama.ne.jp", true */ 'a', 'm', 'a', '.', 'n', 'e', '.', 'j', 'p', '\0',
   /* "amadvice.com", true */ 'a', 'm', 'a', 'd', 'v', 'i', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "amagdic.com", true */ 'a', 'm', 'a', 'g', 'd', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "amagical.net", true */ 'a', 'm', 'a', 'g', 'i', 'c', 'a', 'l', '.', 'n', 'e', 't', '\0',
   /* "amani-kinderdorf.de", true */ 'a', 'm', 'a', 'n', 'i', '-', 'k', 'i', 'n', 'd', 'e', 'r', 'd', 'o', 'r', 'f', '.', 'd', 'e', '\0',
   /* "amartinz.at", true */ 'a', 'm', 'a', 'r', 't', 'i', 'n', 'z', '.', 'a', 't', '\0',
   /* "amateri.com", true */ 'a', 'm', 'a', 't', 'e', 'r', 'i', '.', 'c', 'o', 'm', '\0',
   /* "amazing-gaming.fr", true */ 'a', 'm', 'a', 'z', 'i', 'n', 'g', '-', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'f', 'r', '\0',
-  /* "amazingfloridagulfhomes.com", true */ 'a', 'm', 'a', 'z', 'i', 'n', 'g', 'f', 'l', 'o', 'r', 'i', 'd', 'a', 'g', 'u', 'l', 'f', 'h', 'o', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "ambiente.one", true */ 'a', 'm', 'b', 'i', 'e', 'n', 't', 'e', '.', 'o', 'n', 'e', '\0',
   /* "ambiq.nl", true */ 'a', 'm', 'b', 'i', 'q', '.', 'n', 'l', '\0',
   /* "amcfirst.com", true */ 'a', 'm', 'c', 'f', 'i', 'r', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "amcvega.com", true */ 'a', 'm', 'c', 'v', 'e', 'g', 'a', '.', 'c', 'o', 'm', '\0',
   /* "amdouglas.com", true */ 'a', 'm', 'd', 'o', 'u', 'g', 'l', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "amdouglas.uk", true */ 'a', 'm', 'd', 'o', 'u', 'g', 'l', 'a', 's', '.', 'u', 'k', '\0',
   /* "ameego.com", true */ 'a', 'm', 'e', 'e', 'g', 'o', '.', 'c', 'o', 'm', '\0',
   /* "ameego.it", true */ 'a', 'm', 'e', 'e', 'g', 'o', '.', 'i', 't', '\0',
@@ -901,17 +900,16 @@ static const char kSTSHostTable[] = {
   /* "aramado.com", true */ 'a', 'r', 'a', 'm', 'a', 'd', 'o', '.', 'c', 'o', 'm', '\0',
   /* "aramido.de", true */ 'a', 'r', 'a', 'm', 'i', 'd', 'o', '.', 'd', 'e', '\0',
   /* "aranel.me", true */ 'a', 'r', 'a', 'n', 'e', 'l', '.', 'm', 'e', '\0',
   /* "aranycsillag.net", true */ 'a', 'r', 'a', 'n', 'y', 'c', 's', 'i', 'l', 'l', 'a', 'g', '.', 'n', 'e', 't', '\0',
   /* "araseifudousan.com", true */ 'a', 'r', 'a', 's', 'e', 'i', 'f', 'u', 'd', 'o', 'u', 's', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "arawaza.biz", true */ 'a', 'r', 'a', 'w', 'a', 'z', 'a', '.', 'b', 'i', 'z', '\0',
   /* "arawaza.com", true */ 'a', 'r', 'a', 'w', 'a', 'z', 'a', '.', 'c', 'o', 'm', '\0',
   /* "arawaza.info", true */ 'a', 'r', 'a', 'w', 'a', 'z', 'a', '.', 'i', 'n', 'f', 'o', '\0',
-  /* "arbeitskreis-asyl-eningen.de", true */ 'a', 'r', 'b', 'e', 'i', 't', 's', 'k', 'r', 'e', 'i', 's', '-', 'a', 's', 'y', 'l', '-', 'e', 'n', 'i', 'n', 'g', 'e', 'n', '.', 'd', 'e', '\0',
   /* "arbeitslosenverwaltung.de", true */ 'a', 'r', 'b', 'e', 'i', 't', 's', 'l', 'o', 's', 'e', 'n', 'v', 'e', 'r', 'w', 'a', 'l', 't', 'u', 'n', 'g', '.', 'd', 'e', '\0',
   /* "arbitrarion.com", true */ 'a', 'r', 'b', 'i', 't', 'r', 'a', 'r', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "arbitrary.ch", true */ 'a', 'r', 'b', 'i', 't', 'r', 'a', 'r', 'y', '.', 'c', 'h', '\0',
   /* "arboworks.com", true */ 'a', 'r', 'b', 'o', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "archimedicx.com", true */ 'a', 'r', 'c', 'h', 'i', 'm', 'e', 'd', 'i', 'c', 'x', '.', 'c', 'o', 'm', '\0',
   /* "architectdirect.nl", true */ 'a', 'r', 'c', 'h', 'i', 't', 'e', 'c', 't', 'd', 'i', 'r', 'e', 'c', 't', '.', 'n', 'l', '\0',
   /* "architecte-interieur.be", true */ 'a', 'r', 'c', 'h', 'i', 't', 'e', 'c', 't', 'e', '-', 'i', 'n', 't', 'e', 'r', 'i', 'e', 'u', 'r', '.', 'b', 'e', '\0',
   /* "archlinux.de", true */ 'a', 'r', 'c', 'h', 'l', 'i', 'n', 'u', 'x', '.', 'd', 'e', '\0',
@@ -1061,17 +1059,16 @@ static const char kSTSHostTable[] = {
   /* "atisoft.net", true */ 'a', 't', 'i', 's', 'o', 'f', 't', '.', 'n', 'e', 't', '\0',
   /* "atisoft.net.tr", true */ 'a', 't', 'i', 's', 'o', 'f', 't', '.', 'n', 'e', 't', '.', 't', 'r', '\0',
   /* "atisoft.web.tr", true */ 'a', 't', 'i', 's', 'o', 'f', 't', '.', 'w', 'e', 'b', '.', 't', 'r', '\0',
   /* "atitude.com", true */ 'a', 't', 'i', 't', 'u', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "atlantichomes.com.au", true */ 'a', 't', 'l', 'a', 'n', 't', 'i', 'c', 'h', 'o', 'm', 'e', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "atlantischild.hu", true */ 'a', 't', 'l', 'a', 'n', 't', 'i', 's', 'c', 'h', 'i', 'l', 'd', '.', 'h', 'u', '\0',
   /* "atlassian.net", true */ 'a', 't', 'l', 'a', 's', 's', 'i', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "atletika.hu", true */ 'a', 't', 'l', 'e', 't', 'i', 'k', 'a', '.', 'h', 'u', '\0',
-  /* "atlseccon.com", true */ 'a', 't', 'l', 's', 'e', 'c', 'c', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "atnis.com", true */ 'a', 't', 'n', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "atolm.net", true */ 'a', 't', 'o', 'l', 'm', '.', 'n', 'e', 't', '\0',
   /* "atom-china.org", true */ 'a', 't', 'o', 'm', '-', 'c', 'h', 'i', 'n', 'a', '.', 'o', 'r', 'g', '\0',
   /* "atom.solutions", true */ 'a', 't', 'o', 'm', '.', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '\0',
   /* "atom86.net", true */ 'a', 't', 'o', 'm', '8', '6', '.', 'n', 'e', 't', '\0',
   /* "atombase.org", true */ 'a', 't', 'o', 'm', 'b', 'a', 's', 'e', '.', 'o', 'r', 'g', '\0',
   /* "atraining.ru", true */ 'a', 't', 'r', 'a', 'i', 'n', 'i', 'n', 'g', '.', 'r', 'u', '\0',
   /* "atrinik.org", true */ 'a', 't', 'r', 'i', 'n', 'i', 'k', '.', 'o', 'r', 'g', '\0',
@@ -1093,17 +1090,16 @@ static const char kSTSHostTable[] = {
   /* "audio-detector.com", true */ 'a', 'u', 'd', 'i', 'o', '-', 'd', 'e', 't', 'e', 'c', 't', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "audisto.com", true */ 'a', 'u', 'd', 'i', 's', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "auditmatrix.com", true */ 'a', 'u', 'd', 'i', 't', 'm', 'a', 't', 'r', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "auditos.com", true */ 'a', 'u', 'd', 'i', 't', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "auditsquare.com", true */ 'a', 'u', 'd', 'i', 't', 's', 'q', 'u', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "auf-feindgebiet.de", true */ 'a', 'u', 'f', '-', 'f', 'e', 'i', 'n', 'd', 'g', 'e', 'b', 'i', 'e', 't', '.', 'd', 'e', '\0',
   /* "augaware.org", true */ 'a', 'u', 'g', 'a', 'w', 'a', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "augias.org", true */ 'a', 'u', 'g', 'i', 'a', 's', '.', 'o', 'r', 'g', '\0',
-  /* "augiero.it", true */ 'a', 'u', 'g', 'i', 'e', 'r', 'o', '.', 'i', 't', '\0',
   /* "augustian-life.cz", true */ 'a', 'u', 'g', 'u', 's', 't', 'i', 'a', 'n', '-', 'l', 'i', 'f', 'e', '.', 'c', 'z', '\0',
   /* "augustiner-kantorei-erfurt.de", true */ 'a', 'u', 'g', 'u', 's', 't', 'i', 'n', 'e', 'r', '-', 'k', 'a', 'n', 't', 'o', 'r', 'e', 'i', '-', 'e', 'r', 'f', 'u', 'r', 't', '.', 'd', 'e', '\0',
   /* "augustiner-kantorei.de", true */ 'a', 'u', 'g', 'u', 's', 't', 'i', 'n', 'e', 'r', '-', 'k', 'a', 'n', 't', 'o', 'r', 'e', 'i', '.', 'd', 'e', '\0',
   /* "aukaraoke.su", true */ 'a', 'u', 'k', 'a', 'r', 'a', 'o', 'k', 'e', '.', 's', 'u', '\0',
   /* "aulo.in", false */ 'a', 'u', 'l', 'o', '.', 'i', 'n', '\0',
   /* "aunali1.com", true */ 'a', 'u', 'n', 'a', 'l', 'i', '1', '.', 'c', 'o', 'm', '\0',
   /* "aur.rocks", true */ 'a', 'u', 'r', '.', 'r', 'o', 'c', 'k', 's', '\0',
   /* "aureus.pw", true */ 'a', 'u', 'r', 'e', 'u', 's', '.', 'p', 'w', '\0',
@@ -1117,17 +1113,16 @@ static const char kSTSHostTable[] = {
   /* "auth.adult", true */ 'a', 'u', 't', 'h', '.', 'a', 'd', 'u', 'l', 't', '\0',
   /* "authint.com", true */ 'a', 'u', 't', 'h', 'i', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "author24.ru", true */ 'a', 'u', 't', 'h', 'o', 'r', '2', '4', '.', 'r', 'u', '\0',
   /* "autimatisering.nl", true */ 'a', 'u', 't', 'i', 'm', 'a', 't', 'i', 's', 'e', 'r', 'i', 'n', 'g', '.', 'n', 'l', '\0',
   /* "auto-anleitung.de", true */ 'a', 'u', 't', 'o', '-', 'a', 'n', 'l', 'e', 'i', 't', 'u', 'n', 'g', '.', 'd', 'e', '\0',
   /* "autoauctionsohio.com", true */ 'a', 'u', 't', 'o', 'a', 'u', 'c', 't', 'i', 'o', 'n', 's', 'o', 'h', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "autoauctionsvirginia.com", true */ 'a', 'u', 't', 'o', 'a', 'u', 'c', 't', 'i', 'o', 'n', 's', 'v', 'i', 'r', 'g', 'i', 'n', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "autodalmacija.com", true */ 'a', 'u', 't', 'o', 'd', 'a', 'l', 'm', 'a', 'c', 'i', 'j', 'a', '.', 'c', 'o', 'm', '\0',
-  /* "autodeploy.it", true */ 'a', 'u', 't', 'o', 'd', 'e', 'p', 'l', 'o', 'y', '.', 'i', 't', '\0',
   /* "autoentrepreneurinfo.com", true */ 'a', 'u', 't', 'o', 'e', 'n', 't', 'r', 'e', 'p', 'r', 'e', 'n', 'e', 'u', 'r', 'i', 'n', 'f', 'o', '.', 'c', 'o', 'm', '\0',
   /* "autoledky.sk", true */ 'a', 'u', 't', 'o', 'l', 'e', 'd', 'k', 'y', '.', 's', 'k', '\0',
   /* "automacity.com", true */ 'a', 'u', 't', 'o', 'm', 'a', 'c', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "autoosijek.com", true */ 'a', 'u', 't', 'o', 'o', 's', 'i', 'j', 'e', 'k', '.', 'c', 'o', 'm', '\0',
   /* "autoparts.im", true */ 'a', 'u', 't', 'o', 'p', 'a', 'r', 't', 's', '.', 'i', 'm', '\0',
   /* "autoparts.sh", true */ 'a', 'u', 't', 'o', 'p', 'a', 'r', 't', 's', '.', 's', 'h', '\0',
   /* "autoparts.wf", true */ 'a', 'u', 't', 'o', 'p', 'a', 'r', 't', 's', '.', 'w', 'f', '\0',
   /* "autosiero.nl", true */ 'a', 'u', 't', 'o', 's', 'i', 'e', 'r', 'o', '.', 'n', 'l', '\0',
@@ -1198,17 +1193,16 @@ static const char kSTSHostTable[] = {
   /* "b1c1l1.com", true */ 'b', '1', 'c', '1', 'l', '1', '.', 'c', 'o', 'm', '\0',
   /* "b2and.com", false */ 'b', '2', 'a', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "b2bmuzikbank.com", true */ 'b', '2', 'b', 'm', 'u', 'z', 'i', 'k', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "baalsworld.de", true */ 'b', 'a', 'a', 'l', 's', 'w', 'o', 'r', 'l', 'd', '.', 'd', 'e', '\0',
   /* "baas-becking.biology.utah.edu", true */ 'b', 'a', 'a', 's', '-', 'b', 'e', 'c', 'k', 'i', 'n', 'g', '.', 'b', 'i', 'o', 'l', 'o', 'g', 'y', '.', 'u', 't', 'a', 'h', '.', 'e', 'd', 'u', '\0',
   /* "babacasino.net", true */ 'b', 'a', 'b', 'a', 'c', 'a', 's', 'i', 'n', 'o', '.', 'n', 'e', 't', '\0',
   /* "babak.de", false */ 'b', 'a', 'b', 'a', 'k', '.', 'd', 'e', '\0',
   /* "babarkata.com", true */ 'b', 'a', 'b', 'a', 'r', 'k', 'a', 't', 'a', '.', 'c', 'o', 'm', '\0',
-  /* "babelfisch.eu", true */ 'b', 'a', 'b', 'e', 'l', 'f', 'i', 's', 'c', 'h', '.', 'e', 'u', '\0',
   /* "babettelandmesser.de", true */ 'b', 'a', 'b', 'e', 't', 't', 'e', 'l', 'a', 'n', 'd', 'm', 'e', 's', 's', 'e', 'r', '.', 'd', 'e', '\0',
   /* "babybee.ie", true */ 'b', 'a', 'b', 'y', 'b', 'e', 'e', '.', 'i', 'e', '\0',
   /* "babycs.house", true */ 'b', 'a', 'b', 'y', 'c', 's', '.', 'h', 'o', 'u', 's', 'e', '\0',
   /* "babyfotograf-schweiz.ch", true */ 'b', 'a', 'b', 'y', 'f', 'o', 't', 'o', 'g', 'r', 'a', 'f', '-', 's', 'c', 'h', 'w', 'e', 'i', 'z', '.', 'c', 'h', '\0',
   /* "babymasaze.cz", true */ 'b', 'a', 'b', 'y', 'm', 'a', 's', 'a', 'z', 'e', '.', 'c', 'z', '\0',
   /* "babypibu.com", true */ 'b', 'a', 'b', 'y', 'p', 'i', 'b', 'u', '.', 'c', 'o', 'm', '\0',
   /* "babystep.tv", true */ 'b', 'a', 'b', 'y', 's', 't', 'e', 'p', '.', 't', 'v', '\0',
   /* "bacgrouppublishing.com", true */ 'b', 'a', 'c', 'g', 'r', 'o', 'u', 'p', 'p', 'u', 'b', 'l', 'i', 's', 'h', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
@@ -1333,17 +1327,16 @@ static const char kSTSHostTable[] = {
   /* "bbb1991.me", false */ 'b', 'b', 'b', '1', '9', '9', '1', '.', 'm', 'e', '\0',
   /* "bbdos.ru", true */ 'b', 'b', 'd', 'o', 's', '.', 'r', 'u', '\0',
   /* "bblovess.cn", true */ 'b', 'b', 'l', 'o', 'v', 'e', 's', 's', '.', 'c', 'n', '\0',
   /* "bbnx.net", true */ 'b', 'b', 'n', 'x', '.', 'n', 'e', 't', '\0',
   /* "bbuio.com", true */ 'b', 'b', 'u', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "bbw.dating", true */ 'b', 'b', 'w', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "bbwcs.co.uk", true */ 'b', 'b', 'w', 'c', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "bc-bd.org", true */ 'b', 'c', '-', 'b', 'd', '.', 'o', 'r', 'g', '\0',
-  /* "bcchack.com", true */ 'b', 'c', 'c', 'h', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "bcdonadio.com", true */ 'b', 'c', 'd', 'o', 'n', 'a', 'd', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "bcheng.cf", true */ 'b', 'c', 'h', 'e', 'n', 'g', '.', 'c', 'f', '\0',
   /* "bchep.com", true */ 'b', 'c', 'h', 'e', 'p', '.', 'c', 'o', 'm', '\0',
   /* "bcmguide.com", true */ 'b', 'c', 'm', 'g', 'u', 'i', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "bcmlu.org", true */ 'b', 'c', 'm', 'l', 'u', '.', 'o', 'r', 'g', '\0',
   /* "bcrook.com", false */ 'b', 'c', 'r', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "bcswampcabins.com", true */ 'b', 'c', 's', 'w', 'a', 'm', 'p', 'c', 'a', 'b', 'i', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "bcvps.com", true */ 'b', 'c', 'v', 'p', 's', '.', 'c', 'o', 'm', '\0',
@@ -1676,17 +1669,16 @@ static const char kSTSHostTable[] = {
   /* "blablacar.nl", true */ 'b', 'l', 'a', 'b', 'l', 'a', 'c', 'a', 'r', '.', 'n', 'l', '\0',
   /* "blablacar.pl", true */ 'b', 'l', 'a', 'b', 'l', 'a', 'c', 'a', 'r', '.', 'p', 'l', '\0',
   /* "blablacar.pt", true */ 'b', 'l', 'a', 'b', 'l', 'a', 'c', 'a', 'r', '.', 'p', 't', '\0',
   /* "blablacar.ro", true */ 'b', 'l', 'a', 'b', 'l', 'a', 'c', 'a', 'r', '.', 'r', 'o', '\0',
   /* "blablacar.rs", true */ 'b', 'l', 'a', 'b', 'l', 'a', 'c', 'a', 'r', '.', 'r', 's', '\0',
   /* "blablacar.ru", true */ 'b', 'l', 'a', 'b', 'l', 'a', 'c', 'a', 'r', '.', 'r', 'u', '\0',
   /* "black-armada.com", true */ 'b', 'l', 'a', 'c', 'k', '-', 'a', 'r', 'm', 'a', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "black-khat.com", true */ 'b', 'l', 'a', 'c', 'k', '-', 'k', 'h', 'a', 't', '.', 'c', 'o', 'm', '\0',
-  /* "black-octopus.ru", true */ 'b', 'l', 'a', 'c', 'k', '-', 'o', 'c', 't', 'o', 'p', 'u', 's', '.', 'r', 'u', '\0',
   /* "black.dating", true */ 'b', 'l', 'a', 'c', 'k', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "blackbag.nl", true */ 'b', 'l', 'a', 'c', 'k', 'b', 'a', 'g', '.', 'n', 'l', '\0',
   /* "blackberrycentral.com", true */ 'b', 'l', 'a', 'c', 'k', 'b', 'e', 'r', 'r', 'y', 'c', 'e', 'n', 't', 'r', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "blackcat.ca", true */ 'b', 'l', 'a', 'c', 'k', 'c', 'a', 't', '.', 'c', 'a', '\0',
   /* "blackcatinformatics.ca", true */ 'b', 'l', 'a', 'c', 'k', 'c', 'a', 't', 'i', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'c', 's', '.', 'c', 'a', '\0',
   /* "blackcatinformatics.com", true */ 'b', 'l', 'a', 'c', 'k', 'c', 'a', 't', 'i', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "blackdesertsp.com", true */ 'b', 'l', 'a', 'c', 'k', 'd', 'e', 's', 'e', 'r', 't', 's', 'p', '.', 'c', 'o', 'm', '\0',
   /* "blackdown.de", true */ 'b', 'l', 'a', 'c', 'k', 'd', 'o', 'w', 'n', '.', 'd', 'e', '\0',
@@ -1862,16 +1854,17 @@ static const char kSTSHostTable[] = {
   /* "bradbrockmeyer.com", true */ 'b', 'r', 'a', 'd', 'b', 'r', 'o', 'c', 'k', 'm', 'e', 'y', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "bradkovach.com", true */ 'b', 'r', 'a', 'd', 'k', 'o', 'v', 'a', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "bradler.net", true */ 'b', 'r', 'a', 'd', 'l', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "braemer-it-consulting.de", true */ 'b', 'r', 'a', 'e', 'm', 'e', 'r', '-', 'i', 't', '-', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "brage.info", true */ 'b', 'r', 'a', 'g', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "brain-e.co", true */ 'b', 'r', 'a', 'i', 'n', '-', 'e', '.', 'c', 'o', '\0',
   /* "brainhub.nl", true */ 'b', 'r', 'a', 'i', 'n', 'h', 'u', 'b', '.', 'n', 'l', '\0',
   /* "brainlag.org", true */ 'b', 'r', 'a', 'i', 'n', 'l', 'a', 'g', '.', 'o', 'r', 'g', '\0',
+  /* "brainster.co", false */ 'b', 'r', 'a', 'i', 'n', 's', 't', 'e', 'r', '.', 'c', 'o', '\0',
   /* "braintensive.com", true */ 'b', 'r', 'a', 'i', 'n', 't', 'e', 'n', 's', 'i', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "brakemanpro.com", true */ 'b', 'r', 'a', 'k', 'e', 'm', 'a', 'n', 'p', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "brakstad.org", true */ 'b', 'r', 'a', 'k', 's', 't', 'a', 'd', '.', 'o', 'r', 'g', '\0',
   /* "bralnik.com", true */ 'b', 'r', 'a', 'l', 'n', 'i', 'k', '.', 'c', 'o', 'm', '\0',
   /* "bramvanaken.be", true */ 'b', 'r', 'a', 'm', 'v', 'a', 'n', 'a', 'k', 'e', 'n', '.', 'b', 'e', '\0',
   /* "bran.land", true */ 'b', 'r', 'a', 'n', '.', 'l', 'a', 'n', 'd', '\0',
   /* "brandbuilderwebsites.com", true */ 'b', 'r', 'a', 'n', 'd', 'b', 'u', 'i', 'l', 'd', 'e', 'r', 'w', 'e', 'b', 's', 'i', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "brandongomez.me", true */ 'b', 'r', 'a', 'n', 'd', 'o', 'n', 'g', 'o', 'm', 'e', 'z', '.', 'm', 'e', '\0',
@@ -2053,17 +2046,16 @@ static const char kSTSHostTable[] = {
   /* "businesshub.cz", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'h', 'u', 'b', '.', 'c', 'z', '\0',
   /* "businessimmigration-eu.com", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'i', 'm', 'm', 'i', 'g', 'r', 'a', 't', 'i', 'o', 'n', '-', 'e', 'u', '.', 'c', 'o', 'm', '\0',
   /* "businessimmigration-eu.ru", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'i', 'm', 'm', 'i', 'g', 'r', 'a', 't', 'i', 'o', 'n', '-', 'e', 'u', '.', 'r', 'u', '\0',
   /* "businessloanconnection.org", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'l', 'o', 'a', 'n', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "bustimes.org.uk", true */ 'b', 'u', 's', 't', 'i', 'm', 'e', 's', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "buyaccessible.gov", true */ 'b', 'u', 'y', 'a', 'c', 'c', 'e', 's', 's', 'i', 'b', 'l', 'e', '.', 'g', 'o', 'v', '\0',
   /* "buyinginvestmentproperty.com", true */ 'b', 'u', 'y', 'i', 'n', 'g', 'i', 'n', 'v', 'e', 's', 't', 'm', 'e', 'n', 't', 'p', 'r', 'o', 'p', 'e', 'r', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "buytheway.co.za", true */ 'b', 'u', 'y', 't', 'h', 'e', 'w', 'a', 'y', '.', 'c', 'o', '.', 'z', 'a', '\0',
-  /* "buzzconcert.com", true */ 'b', 'u', 'z', 'z', 'c', 'o', 'n', 'c', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "buzzconf.io", true */ 'b', 'u', 'z', 'z', 'c', 'o', 'n', 'f', '.', 'i', 'o', '\0',
   /* "buzzdeck.com", true */ 'b', 'u', 'z', 'z', 'd', 'e', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "bvalle.com", true */ 'b', 'v', 'a', 'l', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "bvexplained.co.uk", true */ 'b', 'v', 'e', 'x', 'p', 'l', 'a', 'i', 'n', 'e', 'd', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "bvionline.eu", true */ 'b', 'v', 'i', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'e', 'u', '\0',
   /* "bw.codes", true */ 'b', 'w', '.', 'c', 'o', 'd', 'e', 's', '\0',
   /* "bw81.xyz", true */ 'b', 'w', '8', '1', '.', 'x', 'y', 'z', '\0',
   /* "bwcscorecard.org", true */ 'b', 'w', 'c', 's', 'c', 'o', 'r', 'e', 'c', 'a', 'r', 'd', '.', 'o', 'r', 'g', '\0',
@@ -2160,17 +2152,16 @@ static const char kSTSHostTable[] = {
   /* "calculator-imt.com", true */ 'c', 'a', 'l', 'c', 'u', 'l', 'a', 't', 'o', 'r', '-', 'i', 'm', 't', '.', 'c', 'o', 'm', '\0',
   /* "calculator.tf", true */ 'c', 'a', 'l', 'c', 'u', 'l', 'a', 't', 'o', 'r', '.', 't', 'f', '\0',
   /* "calebmorris.com", false */ 'c', 'a', 'l', 'e', 'b', 'm', 'o', 'r', 'r', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "caletka.cz", true */ 'c', 'a', 'l', 'e', 't', 'k', 'a', '.', 'c', 'z', '\0',
   /* "calgoty.com", true */ 'c', 'a', 'l', 'g', 'o', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "calibreapp.com", false */ 'c', 'a', 'l', 'i', 'b', 'r', 'e', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "calibso.net", true */ 'c', 'a', 'l', 'i', 'b', 's', 'o', '.', 'n', 'e', 't', '\0',
   /* "calixte-concept.fr", true */ 'c', 'a', 'l', 'i', 'x', 't', 'e', '-', 'c', 'o', 'n', 'c', 'e', 'p', 't', '.', 'f', 'r', '\0',
-  /* "call.me", false */ 'c', 'a', 'l', 'l', '.', 'm', 'e', '\0',
   /* "callabs.net", true */ 'c', 'a', 'l', 'l', 'a', 'b', 's', '.', 'n', 'e', 't', '\0',
   /* "callaction.co", true */ 'c', 'a', 'l', 'l', 'a', 'c', 't', 'i', 'o', 'n', '.', 'c', 'o', '\0',
   /* "callear.org", true */ 'c', 'a', 'l', 'l', 'e', 'a', 'r', '.', 'o', 'r', 'g', '\0',
   /* "callhub.io", true */ 'c', 'a', 'l', 'l', 'h', 'u', 'b', '.', 'i', 'o', '\0',
   /* "callision.com", true */ 'c', 'a', 'l', 'l', 'i', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "callsigns.ca", true */ 'c', 'a', 'l', 'l', 's', 'i', 'g', 'n', 's', '.', 'c', 'a', '\0',
   /* "calomel.org", true */ 'c', 'a', 'l', 'o', 'm', 'e', 'l', '.', 'o', 'r', 'g', '\0',
   /* "calories.org", true */ 'c', 'a', 'l', 'o', 'r', 'i', 'e', 's', '.', 'o', 'r', 'g', '\0',
@@ -2458,17 +2449,16 @@ static const char kSTSHostTable[] = {
   /* "cheetahwerx.com", true */ 'c', 'h', 'e', 'e', 't', 'a', 'h', 'w', 'e', 'r', 'x', '.', 'c', 'o', 'm', '\0',
   /* "cheez.systems", true */ 'c', 'h', 'e', 'e', 'z', '.', 's', 'y', 's', 't', 'e', 'm', 's', '\0',
   /* "chelseafs.co.uk", true */ 'c', 'h', 'e', 'l', 's', 'e', 'a', 'f', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "chenapartment.com", true */ 'c', 'h', 'e', 'n', 'a', 'p', 'a', 'r', 't', 'm', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "chengl.com", true */ 'c', 'h', 'e', 'n', 'g', 'l', '.', 'c', 'o', 'm', '\0',
   /* "chenky.com", true */ 'c', 'h', 'e', 'n', 'k', 'y', '.', 'c', 'o', 'm', '\0',
   /* "chennien.com", true */ 'c', 'h', 'e', 'n', 'n', 'i', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "chenzhekl.me", true */ 'c', 'h', 'e', 'n', 'z', 'h', 'e', 'k', 'l', '.', 'm', 'e', '\0',
-  /* "chepaofen.com", true */ 'c', 'h', 'e', 'p', 'a', 'o', 'f', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "cherryonit.com", true */ 'c', 'h', 'e', 'r', 'r', 'y', 'o', 'n', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "cherrywoodtech.com", true */ 'c', 'h', 'e', 'r', 'r', 'y', 'w', 'o', 'o', 'd', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "chesterbrass.uk", true */ 'c', 'h', 'e', 's', 't', 'e', 'r', 'b', 'r', 'a', 's', 's', '.', 'u', 'k', '\0',
   /* "chestnut.cf", true */ 'c', 'h', 'e', 's', 't', 'n', 'u', 't', '.', 'c', 'f', '\0',
   /* "chewey.de", true */ 'c', 'h', 'e', 'w', 'e', 'y', '.', 'd', 'e', '\0',
   /* "chewey.org", true */ 'c', 'h', 'e', 'w', 'e', 'y', '.', 'o', 'r', 'g', '\0',
   /* "chfr.search.yahoo.com", false */ 'c', 'h', 'f', 'r', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "chhy.at", true */ 'c', 'h', 'h', 'y', '.', 'a', 't', '\0',
@@ -2505,16 +2495,17 @@ static const char kSTSHostTable[] = {
   /* "chonghe.org", true */ 'c', 'h', 'o', 'n', 'g', 'h', 'e', '.', 'o', 'r', 'g', '\0',
   /* "choosemypc.net", true */ 'c', 'h', 'o', 'o', 's', 'e', 'm', 'y', 'p', 'c', '.', 'n', 'e', 't', '\0',
   /* "chorkley.co.uk", true */ 'c', 'h', 'o', 'r', 'k', 'l', 'e', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "chorkley.uk", true */ 'c', 'h', 'o', 'r', 'k', 'l', 'e', 'y', '.', 'u', 'k', '\0',
   /* "chorpinkpoemps.de", true */ 'c', 'h', 'o', 'r', 'p', 'i', 'n', 'k', 'p', 'o', 'e', 'm', 'p', 's', '.', 'd', 'e', '\0',
   /* "chosenplaintext.org", true */ 'c', 'h', 'o', 's', 'e', 'n', 'p', 'l', 'a', 'i', 'n', 't', 'e', 'x', 't', '.', 'o', 'r', 'g', '\0',
   /* "chourishi-shigoto.com", true */ 'c', 'h', 'o', 'u', 'r', 'i', 's', 'h', 'i', '-', 's', 'h', 'i', 'g', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "chris-edwards.net", true */ 'c', 'h', 'r', 'i', 's', '-', 'e', 'd', 'w', 'a', 'r', 'd', 's', '.', 'n', 'e', 't', '\0',
+  /* "chrisbrown.id.au", true */ 'c', 'h', 'r', 'i', 's', 'b', 'r', 'o', 'w', 'n', '.', 'i', 'd', '.', 'a', 'u', '\0',
   /* "chriscarey.com", true */ 'c', 'h', 'r', 'i', 's', 'c', 'a', 'r', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "chrisebert.net", true */ 'c', 'h', 'r', 'i', 's', 'e', 'b', 'e', 'r', 't', '.', 'n', 'e', 't', '\0',
   /* "chrisfinazzo.com", true */ 'c', 'h', 'r', 'i', 's', 'f', 'i', 'n', 'a', 'z', 'z', 'o', '.', 'c', 'o', 'm', '\0',
   /* "chrishamper.com", false */ 'c', 'h', 'r', 'i', 's', 'h', 'a', 'm', 'p', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "chrisirwin.ca", true */ 'c', 'h', 'r', 'i', 's', 'i', 'r', 'w', 'i', 'n', '.', 'c', 'a', '\0',
   /* "chrisjean.com", true */ 'c', 'h', 'r', 'i', 's', 'j', 'e', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "chrismcclendon.com", true */ 'c', 'h', 'r', 'i', 's', 'm', 'c', 'c', 'l', 'e', 'n', 'd', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "chrismckee.co.uk", true */ 'c', 'h', 'r', 'i', 's', 'm', 'c', 'k', 'e', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
@@ -2622,17 +2613,16 @@ static const char kSTSHostTable[] = {
   /* "clevertarget.ru", true */ 'c', 'l', 'e', 'v', 'e', 'r', 't', 'a', 'r', 'g', 'e', 't', '.', 'r', 'u', '\0',
   /* "cleververmarkten.com", true */ 'c', 'l', 'e', 'v', 'e', 'r', 'v', 'e', 'r', 'm', 'a', 'r', 'k', 't', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "cleververmarkten.de", true */ 'c', 'l', 'e', 'v', 'e', 'r', 'v', 'e', 'r', 'm', 'a', 'r', 'k', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "clevisto.com", true */ 'c', 'l', 'e', 'v', 'i', 's', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "clickclickphish.com", true */ 'c', 'l', 'i', 'c', 'k', 'c', 'l', 'i', 'c', 'k', 'p', 'h', 'i', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "clickclock.cc", true */ 'c', 'l', 'i', 'c', 'k', 'c', 'l', 'o', 'c', 'k', '.', 'c', 'c', '\0',
   /* "clickenergy.com.au", true */ 'c', 'l', 'i', 'c', 'k', 'e', 'n', 'e', 'r', 'g', 'y', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "clickforclever.com", true */ 'c', 'l', 'i', 'c', 'k', 'f', 'o', 'r', 'c', 'l', 'e', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
-  /* "clickgram.biz", true */ 'c', 'l', 'i', 'c', 'k', 'g', 'r', 'a', 'm', '.', 'b', 'i', 'z', '\0',
   /* "clickphish.com", true */ 'c', 'l', 'i', 'c', 'k', 'p', 'h', 'i', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "clicks.co.za", true */ 'c', 'l', 'i', 'c', 'k', 's', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "clicn.bio", true */ 'c', 'l', 'i', 'c', 'n', '.', 'b', 'i', 'o', '\0',
   /* "clicnbio.com", true */ 'c', 'l', 'i', 'c', 'n', 'b', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "clientboss.com", true */ 'c', 'l', 'i', 'e', 'n', 't', 'b', 'o', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "clifflu.net", true */ 'c', 'l', 'i', 'f', 'f', 'l', 'u', '.', 'n', 'e', 't', '\0',
   /* "climaprecio.es", true */ 'c', 'l', 'i', 'm', 'a', 'p', 'r', 'e', 'c', 'i', 'o', '.', 'e', 's', '\0',
   /* "climateinteractive.org", true */ 'c', 'l', 'i', 'm', 'a', 't', 'e', 'i', 'n', 't', 'e', 'r', 'a', 'c', 't', 'i', 'v', 'e', '.', 'o', 'r', 'g', '\0',
@@ -2657,17 +2647,16 @@ static const char kSTSHostTable[] = {
   /* "cloud.google.com", true */ 'c', 'l', 'o', 'u', 'd', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cloud.gov", false */ 'c', 'l', 'o', 'u', 'd', '.', 'g', 'o', 'v', '\0',
   /* "cloudapps.digital", true */ 'c', 'l', 'o', 'u', 'd', 'a', 'p', 'p', 's', '.', 'd', 'i', 'g', 'i', 't', 'a', 'l', '\0',
   /* "cloudbasedsite.com", true */ 'c', 'l', 'o', 'u', 'd', 'b', 'a', 's', 'e', 'd', 's', 'i', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cloudbolin.es", true */ 'c', 'l', 'o', 'u', 'd', 'b', 'o', 'l', 'i', 'n', '.', 'e', 's', '\0',
   /* "cloudcaprice.net", true */ 'c', 'l', 'o', 'u', 'd', 'c', 'a', 'p', 'r', 'i', 'c', 'e', '.', 'n', 'e', 't', '\0',
   /* "cloudflareonazure.com", true */ 'c', 'l', 'o', 'u', 'd', 'f', 'l', 'a', 'r', 'e', 'o', 'n', 'a', 'z', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cloudia.org", true */ 'c', 'l', 'o', 'u', 'd', 'i', 'a', '.', 'o', 'r', 'g', '\0',
-  /* "cloudily.com", true */ 'c', 'l', 'o', 'u', 'd', 'i', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "cloudmigrator365.com", true */ 'c', 'l', 'o', 'u', 'd', 'm', 'i', 'g', 'r', 'a', 't', 'o', 'r', '3', '6', '5', '.', 'c', 'o', 'm', '\0',
   /* "cloudoptimus.com", true */ 'c', 'l', 'o', 'u', 'd', 'o', 'p', 't', 'i', 'm', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "cloudpagesforwork.com", true */ 'c', 'l', 'o', 'u', 'd', 'p', 'a', 'g', 'e', 's', 'f', 'o', 'r', 'w', 'o', 'r', 'k', '.', 'c', 'o', 'm', '\0',
   /* "cloudpebble.net", true */ 'c', 'l', 'o', 'u', 'd', 'p', 'e', 'b', 'b', 'l', 'e', '.', 'n', 'e', 't', '\0',
   /* "cloudpipes.com", true */ 'c', 'l', 'o', 'u', 'd', 'p', 'i', 'p', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "clouds.webcam", true */ 'c', 'l', 'o', 'u', 'd', 's', '.', 'w', 'e', 'b', 'c', 'a', 'm', '\0',
   /* "cloudsecurityalliance.org", true */ 'c', 'l', 'o', 'u', 'd', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'a', 'l', 'l', 'i', 'a', 'n', 'c', 'e', '.', 'o', 'r', 'g', '\0',
   /* "cloudspace-analytics.com", true */ 'c', 'l', 'o', 'u', 'd', 's', 'p', 'a', 'c', 'e', '-', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
@@ -2691,16 +2680,18 @@ static const char kSTSHostTable[] = {
   /* "clvs7.com", true */ 'c', 'l', 'v', 's', '7', '.', 'c', 'o', 'm', '\0',
   /* "cmahy.be", true */ 'c', 'm', 'a', 'h', 'y', '.', 'b', 'e', '\0',
   /* "cmdline.org", true */ 'c', 'm', 'd', 'l', 'i', 'n', 'e', '.', 'o', 'r', 'g', '\0',
   /* "cmylife.nl", true */ 'c', 'm', 'y', 'l', 'i', 'f', 'e', '.', 'n', 'l', '\0',
   /* "cnam.net", true */ 'c', 'n', 'a', 'm', '.', 'n', 'e', 't', '\0',
   /* "cnc-lehrgang.de", true */ 'c', 'n', 'c', '-', 'l', 'e', 'h', 'r', 'g', 'a', 'n', 'g', '.', 'd', 'e', '\0',
   /* "cncn.us", true */ 'c', 'n', 'c', 'n', '.', 'u', 's', '\0',
   /* "cnlic.com", true */ 'c', 'n', 'l', 'i', 'c', '.', 'c', 'o', 'm', '\0',
+  /* "cnwage.com", true */ 'c', 'n', 'w', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
+  /* "cnwarn.com", true */ 'c', 'n', 'w', 'a', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "co.search.yahoo.com", false */ 'c', 'o', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "coachingconsultancy.com", true */ 'c', 'o', 'a', 'c', 'h', 'i', 'n', 'g', 'c', 'o', 'n', 's', 'u', 'l', 't', 'a', 'n', 'c', 'y', '.', 'c', 'o', 'm', '\0',
   /* "coalpointcottage.com", true */ 'c', 'o', 'a', 'l', 'p', 'o', 'i', 'n', 't', 'c', 'o', 't', 't', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "coam.co", true */ 'c', 'o', 'a', 'm', '.', 'c', 'o', '\0',
   /* "coatl-industries.com", true */ 'c', 'o', 'a', 't', 'l', '-', 'i', 'n', 'd', 'u', 's', 't', 'r', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "cobalt.io", true */ 'c', 'o', 'b', 'a', 'l', 't', '.', 'i', 'o', '\0',
   /* "cobrasystems.nl", true */ 'c', 'o', 'b', 'r', 'a', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'n', 'l', '\0',
   /* "cocaine.ninja", true */ 'c', 'o', 'c', 'a', 'i', 'n', 'e', '.', 'n', 'i', 'n', 'j', 'a', '\0',
@@ -2725,17 +2716,16 @@ static const char kSTSHostTable[] = {
   /* "codeforhakodate.org", true */ 'c', 'o', 'd', 'e', 'f', 'o', 'r', 'h', 'a', 'k', 'o', 'd', 'a', 't', 'e', '.', 'o', 'r', 'g', '\0',
   /* "codefoundry.it", false */ 'c', 'o', 'd', 'e', 'f', 'o', 'u', 'n', 'd', 'r', 'y', '.', 'i', 't', '\0',
   /* "codeit.guru", true */ 'c', 'o', 'd', 'e', 'i', 't', '.', 'g', 'u', 'r', 'u', '\0',
   /* "codelove.de", true */ 'c', 'o', 'd', 'e', 'l', 'o', 'v', 'e', '.', 'd', 'e', '\0',
   /* "codenode.io", true */ 'c', 'o', 'd', 'e', 'n', 'o', 'd', 'e', '.', 'i', 'o', '\0',
   /* "codeplay.org", true */ 'c', 'o', 'd', 'e', 'p', 'l', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "codepoints.net", true */ 'c', 'o', 'd', 'e', 'p', 'o', 'i', 'n', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "codepref.com", true */ 'c', 'o', 'd', 'e', 'p', 'r', 'e', 'f', '.', 'c', 'o', 'm', '\0',
-  /* "codepult.com", true */ 'c', 'o', 'd', 'e', 'p', 'u', 'l', 't', '.', 'c', 'o', 'm', '\0',
   /* "codera.co.uk", true */ 'c', 'o', 'd', 'e', 'r', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "codereview.appspot.com", false */ 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "codereview.chromium.org", false */ 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "coderhangout.com", true */ 'c', 'o', 'd', 'e', 'r', 'h', 'a', 'n', 'g', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "codesport.io", true */ 'c', 'o', 'd', 'e', 's', 'p', 'o', 'r', 't', '.', 'i', 'o', '\0',
   /* "codeux.com", true */ 'c', 'o', 'd', 'e', 'u', 'x', '.', 'c', 'o', 'm', '\0',
   /* "codewild.de", true */ 'c', 'o', 'd', 'e', 'w', 'i', 'l', 'd', '.', 'd', 'e', '\0',
   /* "codewiz.xyz", true */ 'c', 'o', 'd', 'e', 'w', 'i', 'z', '.', 'x', 'y', 'z', '\0',
@@ -2868,17 +2858,16 @@ static const char kSTSHostTable[] = {
   /* "consonare.de", true */ 'c', 'o', 'n', 's', 'o', 'n', 'a', 'r', 'e', '.', 'd', 'e', '\0',
   /* "constant-rough.de", true */ 'c', 'o', 'n', 's', 't', 'a', 'n', 't', '-', 'r', 'o', 'u', 'g', 'h', '.', 'd', 'e', '\0',
   /* "consul.io", true */ 'c', 'o', 'n', 's', 'u', 'l', '.', 'i', 'o', '\0',
   /* "consumer.gov", true */ 'c', 'o', 'n', 's', 'u', 'm', 'e', 'r', '.', 'g', 'o', 'v', '\0',
   /* "consumeractionlawgroup.com", true */ 'c', 'o', 'n', 's', 'u', 'm', 'e', 'r', 'a', 'c', 't', 'i', 'o', 'n', 'l', 'a', 'w', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "consumerfiles.com", true */ 'c', 'o', 'n', 's', 'u', 'm', 'e', 'r', 'f', 'i', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "consumersentinel.gov", true */ 'c', 'o', 'n', 's', 'u', 'm', 'e', 'r', 's', 'e', 'n', 't', 'i', 'n', 'e', 'l', '.', 'g', 'o', 'v', '\0',
   /* "consumidor.gov", true */ 'c', 'o', 'n', 's', 'u', 'm', 'i', 'd', 'o', 'r', '.', 'g', 'o', 'v', '\0',
-  /* "containerstatistics.com", true */ 'c', 'o', 'n', 't', 'a', 'i', 'n', 'e', 'r', 's', 't', 'a', 't', 'i', 's', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "content-design.de", true */ 'c', 'o', 'n', 't', 'e', 'n', 't', '-', 'd', 'e', 's', 'i', 'g', 'n', '.', 'd', 'e', '\0',
   /* "contessa32experience.com", true */ 'c', 'o', 'n', 't', 'e', 's', 's', 'a', '3', '2', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "contrabass.net", true */ 'c', 'o', 'n', 't', 'r', 'a', 'b', 'a', 's', 's', '.', 'n', 'e', 't', '\0',
   /* "contributor.google.com", false */ 'c', 'o', 'n', 't', 'r', 'i', 'b', 'u', 't', 'o', 'r', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "conve.eu", false */ 'c', 'o', 'n', 'v', 'e', '.', 'e', 'u', '\0',
   /* "convergemagazine.com", true */ 'c', 'o', 'n', 'v', 'e', 'r', 'g', 'e', 'm', 'a', 'g', 'a', 'z', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "conversiones.com", true */ 'c', 'o', 'n', 'v', 'e', 'r', 's', 'i', 'o', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "convert.im", true */ 'c', 'o', 'n', 'v', 'e', 'r', 't', '.', 'i', 'm', '\0',
@@ -2912,17 +2901,16 @@ static const char kSTSHostTable[] = {
   /* "coredump.gr", true */ 'c', 'o', 'r', 'e', 'd', 'u', 'm', 'p', '.', 'g', 'r', '\0',
   /* "coreinfrastructure.org", true */ 'c', 'o', 'r', 'e', 'i', 'n', 'f', 'r', 'a', 's', 't', 'r', 'u', 'c', 't', 'u', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "coreless-stretchfilm.com", true */ 'c', 'o', 'r', 'e', 'l', 'e', 's', 's', '-', 's', 't', 'r', 'e', 't', 'c', 'h', 'f', 'i', 'l', 'm', '.', 'c', 'o', 'm', '\0',
   /* "corepartners.com.ua", true */ 'c', 'o', 'r', 'e', 'p', 'a', 'r', 't', 'n', 'e', 'r', 's', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "coresolutions.ca", true */ 'c', 'o', 'r', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'a', '\0',
   /* "corex.io", true */ 'c', 'o', 'r', 'e', 'x', '.', 'i', 'o', '\0',
   /* "coreyjmahler.com", true */ 'c', 'o', 'r', 'e', 'y', 'j', 'm', 'a', 'h', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "corgi.party", true */ 'c', 'o', 'r', 'g', 'i', '.', 'p', 'a', 'r', 't', 'y', '\0',
-  /* "cormactagging.ie", true */ 'c', 'o', 'r', 'm', 'a', 'c', 't', 'a', 'g', 'g', 'i', 'n', 'g', '.', 'i', 'e', '\0',
   /* "cornercircle.co.uk", true */ 'c', 'o', 'r', 'n', 'e', 'r', 'c', 'i', 'r', 'c', 'l', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "corniche.com", true */ 'c', 'o', 'r', 'n', 'i', 'c', 'h', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cornishcamels.com", true */ 'c', 'o', 'r', 'n', 'i', 's', 'h', 'c', 'a', 'm', 'e', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "cornodo.com", true */ 'c', 'o', 'r', 'n', 'o', 'd', 'o', '.', 'c', 'o', 'm', '\0',
   /* "corona-academy.com", true */ 'c', 'o', 'r', 'o', 'n', 'a', '-', 'a', 'c', 'a', 'd', 'e', 'm', 'y', '.', 'c', 'o', 'm', '\0',
   /* "coronelpicanha.com.br", true */ 'c', 'o', 'r', 'o', 'n', 'e', 'l', 'p', 'i', 'c', 'a', 'n', 'h', 'a', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "corpfin.net", true */ 'c', 'o', 'r', 'p', 'f', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "corporatesubscriptions.com.au", true */ 'c', 'o', 'r', 'p', 'o', 'r', 'a', 't', 'e', 's', 'u', 'b', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
@@ -2947,16 +2935,17 @@ static const char kSTSHostTable[] = {
   /* "countryoutlaws.ca", true */ 'c', 'o', 'u', 'n', 't', 'r', 'y', 'o', 'u', 't', 'l', 'a', 'w', 's', '.', 'c', 'a', '\0',
   /* "countybankdel.com", true */ 'c', 'o', 'u', 'n', 't', 'y', 'b', 'a', 'n', 'k', 'd', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "couponcodeq.com", true */ 'c', 'o', 'u', 'p', 'o', 'n', 'c', 'o', 'd', 'e', 'q', '.', 'c', 'o', 'm', '\0',
   /* "couragefound.org", true */ 'c', 'o', 'u', 'r', 'a', 'g', 'e', 'f', 'o', 'u', 'n', 'd', '.', 'o', 'r', 'g', '\0',
   /* "courageousparentsnetwork.org", true */ 'c', 'o', 'u', 'r', 'a', 'g', 'e', 'o', 'u', 's', 'p', 'a', 'r', 'e', 'n', 't', 's', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'o', 'r', 'g', '\0',
   /* "coursera.org", true */ 'c', 'o', 'u', 'r', 's', 'e', 'r', 'a', '.', 'o', 'r', 'g', '\0',
   /* "courses.nl", true */ 'c', 'o', 'u', 'r', 's', 'e', 's', '.', 'n', 'l', '\0',
   /* "courtlistener.com", true */ 'c', 'o', 'u', 'r', 't', 'l', 'i', 's', 't', 'e', 'n', 'e', 'r', '.', 'c', 'o', 'm', '\0',
+  /* "cousincouples.com", true */ 'c', 'o', 'u', 's', 'i', 'n', 'c', 'o', 'u', 'p', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "covenantoftheriver.org", true */ 'c', 'o', 'v', 'e', 'n', 'a', 'n', 't', 'o', 'f', 't', 'h', 'e', 'r', 'i', 'v', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "covershousing.nl", true */ 'c', 'o', 'v', 'e', 'r', 's', 'h', 'o', 'u', 's', 'i', 'n', 'g', '.', 'n', 'l', '\0',
   /* "covoiturage.fr", false */ 'c', 'o', 'v', 'o', 'i', 't', 'u', 'r', 'a', 'g', 'e', '.', 'f', 'r', '\0',
   /* "covybrat.cz", true */ 'c', 'o', 'v', 'y', 'b', 'r', 'a', 't', '.', 'c', 'z', '\0',
   /* "cowbird.org", true */ 'c', 'o', 'w', 'b', 'i', 'r', 'd', '.', 'o', 'r', 'g', '\0',
   /* "cowboyim.com", true */ 'c', 'o', 'w', 'b', 'o', 'y', 'i', 'm', '.', 'c', 'o', 'm', '\0',
   /* "coweo.cz", true */ 'c', 'o', 'w', 'e', 'o', '.', 'c', 'z', '\0',
   /* "cozmaadrian.ro", true */ 'c', 'o', 'z', 'm', 'a', 'a', 'd', 'r', 'i', 'a', 'n', '.', 'r', 'o', '\0',
@@ -3065,18 +3054,16 @@ static const char kSTSHostTable[] = {
   /* "csengle.de", true */ 'c', 's', 'e', 'n', 'g', 'l', 'e', '.', 'd', 'e', '\0',
   /* "csfm.com", true */ 'c', 's', 'f', 'm', '.', 'c', 'o', 'm', '\0',
   /* "csgo.help", true */ 'c', 's', 'g', 'o', '.', 'h', 'e', 'l', 'p', '\0',
   /* "csgogamers.com", true */ 'c', 's', 'g', 'o', 'g', 'a', 'm', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "csgohandouts.com", true */ 'c', 's', 'g', 'o', 'h', 'a', 'n', 'd', 'o', 'u', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "csgotwister.com", true */ 'c', 's', 'g', 'o', 't', 'w', 'i', 's', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "cshopify.com", true */ 'c', 's', 'h', 'o', 'p', 'i', 'f', 'y', '.', 'c', 'o', 'm', '\0',
   /* "csmainframe.com", true */ 'c', 's', 'm', 'a', 'i', 'n', 'f', 'r', 'a', 'm', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "csokolade.hu", true */ 'c', 's', 'o', 'k', 'o', 'l', 'a', 'd', 'e', '.', 'h', 'u', '\0',
-  /* "csru.net", true */ 'c', 's', 'r', 'u', '.', 'n', 'e', 't', '\0',
   /* "css.net", true */ 'c', 's', 's', '.', 'n', 'e', 't', '\0',
   /* "cssu.in", true */ 'c', 's', 's', 'u', '.', 'i', 'n', '\0',
   /* "cstkit.com", true */ 'c', 's', 't', 'k', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "csuw.net", true */ 'c', 's', 'u', 'w', '.', 'n', 'e', 't', '\0',
   /* "cthomas.work", true */ 'c', 't', 'h', 'o', 'm', 'a', 's', '.', 'w', 'o', 'r', 'k', '\0',
   /* "ctns.de", true */ 'c', 't', 'n', 's', '.', 'd', 'e', '\0',
   /* "ctoforhire.com.au", true */ 'c', 't', 'o', 'f', 'o', 'r', 'h', 'i', 'r', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "ctpe.net", true */ 'c', 't', 'p', 'e', '.', 'n', 'e', 't', '\0',
@@ -3614,17 +3601,16 @@ static const char kSTSHostTable[] = {
   /* "dicionariodesimbolos.com.br", true */ 'd', 'i', 'c', 'i', 'o', 'n', 'a', 'r', 'i', 'o', 'd', 'e', 's', 'i', 'm', 'b', 'o', 'l', 'o', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "dicionariofinanceiro.com", true */ 'd', 'i', 'c', 'i', 'o', 'n', 'a', 'r', 'i', 'o', 'f', 'i', 'n', 'a', 'n', 'c', 'e', 'i', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "dickieslife.com", true */ 'd', 'i', 'c', 'k', 'i', 'e', 's', 'l', 'i', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "didacte.com", true */ 'd', 'i', 'd', 'a', 'c', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "diddens.de", true */ 'd', 'i', 'd', 'd', 'e', 'n', 's', '.', 'd', 'e', '\0',
   /* "die-besten-weisheiten.de", true */ 'd', 'i', 'e', '-', 'b', 'e', 's', 't', 'e', 'n', '-', 'w', 'e', 'i', 's', 'h', 'e', 'i', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "die-blahuts.de", true */ 'd', 'i', 'e', '-', 'b', 'l', 'a', 'h', 'u', 't', 's', '.', 'd', 'e', '\0',
   /* "die-gruenen-teufel.de", true */ 'd', 'i', 'e', '-', 'g', 'r', 'u', 'e', 'n', 'e', 'n', '-', 't', 'e', 'u', 'f', 'e', 'l', '.', 'd', 'e', '\0',
-  /* "die-partei-reutlingen.de", true */ 'd', 'i', 'e', '-', 'p', 'a', 'r', 't', 'e', 'i', '-', 'r', 'e', 'u', 't', 'l', 'i', 'n', 'g', 'e', 'n', '.', 'd', 'e', '\0',
   /* "die-speisekammer-reutlingen.de", true */ 'd', 'i', 'e', '-', 's', 'p', 'e', 'i', 's', 'e', 'k', 'a', 'm', 'm', 'e', 'r', '-', 'r', 'e', 'u', 't', 'l', 'i', 'n', 'g', 'e', 'n', '.', 'd', 'e', '\0',
   /* "dieb.photo", true */ 'd', 'i', 'e', 'b', '.', 'p', 'h', 'o', 't', 'o', '\0',
   /* "diegelernten.de", true */ 'd', 'i', 'e', 'g', 'e', 'l', 'e', 'r', 'n', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "diegerbers.de", true */ 'd', 'i', 'e', 'g', 'e', 'r', 'b', 'e', 'r', 's', '.', 'd', 'e', '\0',
   /* "diehl.io", true */ 'd', 'i', 'e', 'h', 'l', '.', 'i', 'o', '\0',
   /* "diemogebhardt.com", true */ 'd', 'i', 'e', 'm', 'o', 'g', 'e', 'b', 'h', 'a', 'r', 'd', 't', '.', 'c', 'o', 'm', '\0',
   /* "dienstplan.cc", true */ 'd', 'i', 'e', 'n', 's', 't', 'p', 'l', 'a', 'n', '.', 'c', 'c', '\0',
   /* "dienstplan.one", true */ 'd', 'i', 'e', 'n', 's', 't', 'p', 'l', 'a', 'n', '.', 'o', 'n', 'e', '\0',
@@ -3967,18 +3953,16 @@ static const char kSTSHostTable[] = {
   /* "drweissbrot.net", true */ 'd', 'r', 'w', 'e', 'i', 's', 's', 'b', 'r', 'o', 't', '.', 'n', 'e', 't', '\0',
   /* "drycreekphoto.com", true */ 'd', 'r', 'y', 'c', 'r', 'e', 'e', 'k', 'p', 'h', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "ds67.de", true */ 'd', 's', '6', '7', '.', 'd', 'e', '\0',
   /* "dsbrowser.com", true */ 'd', 's', 'b', 'r', 'o', 'w', 's', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "dsebastien.net", true */ 'd', 's', 'e', 'b', 'a', 's', 't', 'i', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "dsol.hu", true */ 'd', 's', 'o', 'l', '.', 'h', 'u', '\0',
   /* "dt27.org", true */ 'd', 't', '2', '7', '.', 'o', 'r', 'g', '\0',
   /* "dubaieveningsafari.com", true */ 'd', 'u', 'b', 'a', 'i', 'e', 'v', 'e', 'n', 'i', 'n', 'g', 's', 'a', 'f', 'a', 'r', 'i', '.', 'c', 'o', 'm', '\0',
-  /* "dubrovskiy.net", true */ 'd', 'u', 'b', 'r', 'o', 'v', 's', 'k', 'i', 'y', '.', 'n', 'e', 't', '\0',
-  /* "dubrovskiy.pro", true */ 'd', 'u', 'b', 'r', 'o', 'v', 's', 'k', 'i', 'y', '.', 'p', 'r', 'o', '\0',
   /* "duch.cloud", true */ 'd', 'u', 'c', 'h', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "duckasylum.com", true */ 'd', 'u', 'c', 'k', 'a', 's', 'y', 'l', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "duckduckstart.com", true */ 'd', 'u', 'c', 'k', 'd', 'u', 'c', 'k', 's', 't', 'a', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "duckinc.net", true */ 'd', 'u', 'c', 'k', 'i', 'n', 'c', '.', 'n', 'e', 't', '\0',
   /* "ducohosting.com", true */ 'd', 'u', 'c', 'o', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "duelysthub.com", true */ 'd', 'u', 'e', 'l', 'y', 's', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '\0',
   /* "duernberg.at", false */ 'd', 'u', 'e', 'r', 'n', 'b', 'e', 'r', 'g', '.', 'a', 't', '\0',
   /* "duijf.info", true */ 'd', 'u', 'i', 'j', 'f', '.', 'i', 'n', 'f', 'o', '\0',
@@ -3997,46 +3981,44 @@ static const char kSTSHostTable[] = {
   /* "dungi.org", true */ 'd', 'u', 'n', 'g', 'i', '.', 'o', 'r', 'g', '\0',
   /* "duo.money", true */ 'd', 'u', 'o', '.', 'm', 'o', 'n', 'e', 'y', '\0',
   /* "duoluodeyu.com", true */ 'd', 'u', 'o', 'l', 'u', 'o', 'd', 'e', 'y', 'u', '.', 'c', 'o', 'm', '\0',
   /* "dupree.co", true */ 'd', 'u', 'p', 'r', 'e', 'e', '.', 'c', 'o', '\0',
   /* "durangoenergyllc.com", true */ 'd', 'u', 'r', 'a', 'n', 'g', 'o', 'e', 'n', 'e', 'r', 'g', 'y', 'l', 'l', 'c', '.', 'c', 'o', 'm', '\0',
   /* "durys.be", true */ 'd', 'u', 'r', 'y', 's', '.', 'b', 'e', '\0',
   /* "dustygroove.com", true */ 'd', 'u', 's', 't', 'y', 'g', 'r', 'o', 'o', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dutch1.nl", true */ 'd', 'u', 't', 'c', 'h', '1', '.', 'n', 'l', '\0',
-  /* "dutchessuganda.com", true */ 'd', 'u', 't', 'c', 'h', 'e', 's', 's', 'u', 'g', 'a', 'n', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "dutchrank.nl", true */ 'd', 'u', 't', 'c', 'h', 'r', 'a', 'n', 'k', '.', 'n', 'l', '\0',
   /* "dutchwanderers.nl", true */ 'd', 'u', 't', 'c', 'h', 'w', 'a', 'n', 'd', 'e', 'r', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "dutchweballiance.nl", true */ 'd', 'u', 't', 'c', 'h', 'w', 'e', 'b', 'a', 'l', 'l', 'i', 'a', 'n', 'c', 'e', '.', 'n', 'l', '\0',
   /* "dutyfreeonboard.com", true */ 'd', 'u', 't', 'y', 'f', 'r', 'e', 'e', 'o', 'n', 'b', 'o', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "duuu.ch", true */ 'd', 'u', 'u', 'u', '.', 'c', 'h', '\0',
   /* "dvbris.co.uk", true */ 'd', 'v', 'b', 'r', 'i', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "dvbris.com", true */ 'd', 'v', 'b', 'r', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "dvorupotocnych.sk", true */ 'd', 'v', 'o', 'r', 'u', 'p', 'o', 't', 'o', 'c', 'n', 'y', 'c', 'h', '.', 's', 'k', '\0',
   /* "dvotx.org", true */ 'd', 'v', 'o', 't', 'x', '.', 'o', 'r', 'g', '\0',
   /* "dvwc.org", true */ 'd', 'v', 'w', 'c', '.', 'o', 'r', 'g', '\0',
   /* "dwnld.me", true */ 'd', 'w', 'n', 'l', 'd', '.', 'm', 'e', '\0',
   /* "dwtm.ch", true */ 'd', 'w', 't', 'm', '.', 'c', 'h', '\0',
   /* "dxa.io", false */ 'd', 'x', 'a', '.', 'i', 'o', '\0',
   /* "dxgl.info", true */ 'd', 'x', 'g', 'l', '.', 'i', 'n', 'f', 'o', '\0',
   /* "dyeager.org", true */ 'd', 'y', 'e', 'a', 'g', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "dyktig.as", true */ 'd', 'y', 'k', 't', 'i', 'g', '.', 'a', 's', '\0',
+  /* "dymersion.com", true */ 'd', 'y', 'm', 'e', 'r', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "dyn-nserve.net", true */ 'd', 'y', 'n', '-', 'n', 's', 'e', 'r', 'v', 'e', '.', 'n', 'e', 't', '\0',
   /* "dyn.im", true */ 'd', 'y', 'n', '.', 'i', 'm', '\0',
   /* "dynaloop.net", true */ 'd', 'y', 'n', 'a', 'l', 'o', 'o', 'p', '.', 'n', 'e', 't', '\0',
-  /* "dynamic-innovations.net", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', '-', 'i', 'n', 'n', 'o', 'v', 'a', 't', 'i', 'o', 'n', 's', '.', 'n', 'e', 't', '\0',
   /* "dynamicnet.net", false */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', 'n', 'e', 't', '.', 'n', 'e', 't', '\0',
   /* "dynamicsnetwork.net", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', 's', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'n', 'e', 't', '\0',
   /* "dynamictostatic.com", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', 't', 'o', 's', 't', 'a', 't', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "dynamize.solutions", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'z', 'e', '.', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '\0',
   /* "dyrenesverden.no", true */ 'd', 'y', 'r', 'e', 'n', 'e', 's', 'v', 'e', 'r', 'd', 'e', 'n', '.', 'n', 'o', '\0',
   /* "dyrkar.com", true */ 'd', 'y', 'r', 'k', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "dziekonski.com", true */ 'd', 'z', 'i', 'e', 'k', 'o', 'n', 's', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "dzndk.com", true */ 'd', 'z', 'n', 'd', 'k', '.', 'c', 'o', 'm', '\0',
-  /* "dzndk.net", true */ 'd', 'z', 'n', 'd', 'k', '.', 'n', 'e', 't', '\0',
   /* "dzyabchenko.com", true */ 'd', 'z', 'y', 'a', 'b', 'c', 'h', 'e', 'n', 'k', 'o', '.', 'c', 'o', 'm', '\0',
   /* "e-biografias.net", true */ 'e', '-', 'b', 'i', 'o', 'g', 'r', 'a', 'f', 'i', 'a', 's', '.', 'n', 'e', 't', '\0',
   /* "e-isfa.eu", true */ 'e', '-', 'i', 's', 'f', 'a', '.', 'e', 'u', '\0',
   /* "e-kontakti.fi", true */ 'e', '-', 'k', 'o', 'n', 't', 'a', 'k', 't', 'i', '.', 'f', 'i', '\0',
   /* "e-learningbs.com", true */ 'e', '-', 'l', 'e', 'a', 'r', 'n', 'i', 'n', 'g', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "e-lifetechnology.com", true */ 'e', '-', 'l', 'i', 'f', 'e', 't', 'e', 'c', 'h', 'n', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'o', 'm', '\0',
   /* "e-mak.eu", true */ 'e', '-', 'm', 'a', 'k', '.', 'e', 'u', '\0',
   /* "e-rickroll-r.pw", true */ 'e', '-', 'r', 'i', 'c', 'k', 'r', 'o', 'l', 'l', '-', 'r', '.', 'p', 'w', '\0',
@@ -4055,18 +4037,18 @@ static const char kSTSHostTable[] = {
   /* "eagletechz.com.br", true */ 'e', 'a', 'g', 'l', 'e', 't', 'e', 'c', 'h', 'z', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "eagleyecs.com", true */ 'e', 'a', 'g', 'l', 'e', 'y', 'e', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "ealev.de", true */ 'e', 'a', 'l', 'e', 'v', '.', 'd', 'e', '\0',
   /* "eam-gmbh.com", true */ 'e', 'a', 'm', '-', 'g', 'm', 'b', 'h', '.', 'c', 'o', 'm', '\0',
   /* "eames-clayton.us", true */ 'e', 'a', 'm', 'e', 's', '-', 'c', 'l', 'a', 'y', 't', 'o', 'n', '.', 'u', 's', '\0',
   /* "earga.sm", true */ 'e', 'a', 'r', 'g', 'a', '.', 's', 'm', '\0',
   /* "earmarks.gov", true */ 'e', 'a', 'r', 'm', 'a', 'r', 'k', 's', '.', 'g', 'o', 'v', '\0',
   /* "earth-people.org", true */ 'e', 'a', 'r', 't', 'h', '-', 'p', 'e', 'o', 'p', 'l', 'e', '.', 'o', 'r', 'g', '\0',
-  /* "earthrise16.com", true */ 'e', 'a', 'r', 't', 'h', 'r', 'i', 's', 'e', '1', '6', '.', 'c', 'o', 'm', '\0',
   /* "earticleblog.com", true */ 'e', 'a', 'r', 't', 'i', 'c', 'l', 'e', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
+  /* "eason-yang.com", true */ 'e', 'a', 's', 'o', 'n', '-', 'y', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "eastmanbusinessinstitute.com", true */ 'e', 'a', 's', 't', 'm', 'a', 'n', 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "eastmontgroup.com", true */ 'e', 'a', 's', 't', 'm', 'o', 'n', 't', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "easy-rpg.org", false */ 'e', 'a', 's', 'y', '-', 'r', 'p', 'g', '.', 'o', 'r', 'g', '\0',
   /* "easyconstat.com", true */ 'e', 'a', 's', 'y', 'c', 'o', 'n', 's', 't', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "easycosmetic.ch", true */ 'e', 'a', 's', 'y', 'c', 'o', 's', 'm', 'e', 't', 'i', 'c', '.', 'c', 'h', '\0',
   /* "easyfiles.ch", true */ 'e', 'a', 's', 'y', 'f', 'i', 'l', 'e', 's', '.', 'c', 'h', '\0',
   /* "easykonto.de", true */ 'e', 'a', 's', 'y', 'k', 'o', 'n', 't', 'o', '.', 'd', 'e', '\0',
   /* "easyocm.hu", true */ 'e', 'a', 's', 'y', 'o', 'c', 'm', '.', 'h', 'u', '\0',
@@ -4318,17 +4300,16 @@ static const char kSTSHostTable[] = {
   /* "encfs.win", true */ 'e', 'n', 'c', 'f', 's', '.', 'w', 'i', 'n', '\0',
   /* "encircleapp.com", true */ 'e', 'n', 'c', 'i', 'r', 'c', 'l', 'e', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "encnet.de", true */ 'e', 'n', 'c', 'n', 'e', 't', '.', 'd', 'e', '\0',
   /* "encode.uk.com", true */ 'e', 'n', 'c', 'o', 'd', 'e', '.', 'u', 'k', '.', 'c', 'o', 'm', '\0',
   /* "encredible.de", false */ 'e', 'n', 'c', 'r', 'e', 'd', 'i', 'b', 'l', 'e', '.', 'd', 'e', '\0',
   /* "encredible.org", false */ 'e', 'n', 'c', 'r', 'e', 'd', 'i', 'b', 'l', 'e', '.', 'o', 'r', 'g', '\0',
   /* "encryptallthethings.net", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'a', 'l', 'l', 't', 'h', 'e', 't', 'h', 'i', 'n', 'g', 's', '.', 'n', 'e', 't', '\0',
   /* "encrypted.google.com", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'e', 'd', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "encryptedaudience.com", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'e', 'd', 'a', 'u', 'd', 'i', 'e', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "encryptio.com", true */ 'e', 'n', 'c', 'r', 'y', 'p', 't', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "endeal.nl", true */ 'e', 'n', 'd', 'e', 'a', 'l', '.', 'n', 'l', '\0',
   /* "ender.co.at", true */ 'e', 'n', 'd', 'e', 'r', '.', 'c', 'o', '.', 'a', 't', '\0',
   /* "endlesshorizon.net", true */ 'e', 'n', 'd', 'l', 'e', 's', 's', 'h', 'o', 'r', 'i', 'z', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "endlessvideo.com", true */ 'e', 'n', 'd', 'l', 'e', 's', 's', 'v', 'i', 'd', 'e', 'o', '.', 'c', 'o', 'm', '\0',
   /* "endofnet.org", true */ 'e', 'n', 'd', 'o', 'f', 'n', 'e', 't', '.', 'o', 'r', 'g', '\0',
   /* "endohaus.ca", true */ 'e', 'n', 'd', 'o', 'h', 'a', 'u', 's', '.', 'c', 'a', '\0',
   /* "endohaus.com", true */ 'e', 'n', 'd', 'o', 'h', 'a', 'u', 's', '.', 'c', 'o', 'm', '\0',
@@ -4424,17 +4405,16 @@ static const char kSTSHostTable[] = {
   /* "erick.blog", true */ 'e', 'r', 'i', 'c', 'k', '.', 'b', 'l', 'o', 'g', '\0',
   /* "ericleuthardt.com", true */ 'e', 'r', 'i', 'c', 'l', 'e', 'u', 't', 'h', 'a', 'r', 'd', 't', '.', 'c', 'o', 'm', '\0',
   /* "erico.jp", true */ 'e', 'r', 'i', 'c', 'o', '.', 'j', 'p', '\0',
   /* "ericoc.com", true */ 'e', 'r', 'i', 'c', 'o', 'c', '.', 'c', 'o', 'm', '\0',
   /* "ericwie.se", true */ 'e', 'r', 'i', 'c', 'w', 'i', 'e', '.', 's', 'e', '\0',
   /* "ericyl.com", true */ 'e', 'r', 'i', 'c', 'y', 'l', '.', 'c', 'o', 'm', '\0',
   /* "erigrid.eu", true */ 'e', 'r', 'i', 'g', 'r', 'i', 'd', '.', 'e', 'u', '\0',
   /* "eriix.org", true */ 'e', 'r', 'i', 'i', 'x', '.', 'o', 'r', 'g', '\0',
-  /* "erikhubers.nl", true */ 'e', 'r', 'i', 'k', 'h', 'u', 'b', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "erikseth.de", true */ 'e', 'r', 'i', 'k', 's', 'e', 't', 'h', '.', 'd', 'e', '\0',
   /* "eriner.me", true */ 'e', 'r', 'i', 'n', 'e', 'r', '.', 'm', 'e', '\0',
   /* "erisrenee.com", true */ 'e', 'r', 'i', 's', 'r', 'e', 'n', 'e', 'e', '.', 'c', 'o', 'm', '\0',
   /* "ernest.ly", true */ 'e', 'r', 'n', 'e', 's', 't', '.', 'l', 'y', '\0',
   /* "erp-band.ru", true */ 'e', 'r', 'p', '-', 'b', 'a', 'n', 'd', '.', 'r', 'u', '\0',
   /* "erp.band", true */ 'e', 'r', 'p', '.', 'b', 'a', 'n', 'd', '\0',
   /* "erpband.ru", true */ 'e', 'r', 'p', 'b', 'a', 'n', 'd', '.', 'r', 'u', '\0',
   /* "erpcargo.com", false */ 'e', 'r', 'p', 'c', 'a', 'r', 'g', 'o', '.', 'c', 'o', 'm', '\0',
@@ -4607,17 +4587,16 @@ static const char kSTSHostTable[] = {
   /* "exhibityour.com", true */ 'e', 'x', 'h', 'i', 'b', 'i', 't', 'y', 'o', 'u', 'r', '.', 'c', 'o', 'm', '\0',
   /* "exiahost.com", true */ 'e', 'x', 'i', 'a', 'h', 'o', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "exon.io", true */ 'e', 'x', 'o', 'n', '.', 'i', 'o', '\0',
   /* "exoscale.ch", true */ 'e', 'x', 'o', 's', 'c', 'a', 'l', 'e', '.', 'c', 'h', '\0',
   /* "exoticads.com", true */ 'e', 'x', 'o', 't', 'i', 'c', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "exousiakaidunamis.xyz", true */ 'e', 'x', 'o', 'u', 's', 'i', 'a', 'k', 'a', 'i', 'd', 'u', 'n', 'a', 'm', 'i', 's', '.', 'x', 'y', 'z', '\0',
   /* "exp.de", true */ 'e', 'x', 'p', '.', 'd', 'e', '\0',
   /* "expancio.com", true */ 'e', 'x', 'p', 'a', 'n', 'c', 'i', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "expatads.com", true */ 'e', 'x', 'p', 'a', 't', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "experienceoz.com.au", true */ 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', 'o', 'z', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "experteasy.com.au", true */ 'e', 'x', 'p', 'e', 'r', 't', 'e', 'a', 's', 'y', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "experts-en-gestion.fr", true */ 'e', 'x', 'p', 'e', 'r', 't', 's', '-', 'e', 'n', '-', 'g', 'e', 's', 't', 'i', 'o', 'n', '.', 'f', 'r', '\0',
   /* "explodie.org", true */ 'e', 'x', 'p', 'l', 'o', 'd', 'i', 'e', '.', 'o', 'r', 'g', '\0',
   /* "exploit-db.com", true */ 'e', 'x', 'p', 'l', 'o', 'i', 't', '-', 'd', 'b', '.', 'c', 'o', 'm', '\0',
   /* "exploit.cz", true */ 'e', 'x', 'p', 'l', 'o', 'i', 't', '.', 'c', 'z', '\0',
   /* "exploit.party", true */ 'e', 'x', 'p', 'l', 'o', 'i', 't', '.', 'p', 'a', 'r', 't', 'y', '\0',
   /* "exploited.cz", true */ 'e', 'x', 'p', 'l', 'o', 'i', 't', 'e', 'd', '.', 'c', 'z', '\0',
@@ -4753,18 +4732,20 @@ static const char kSTSHostTable[] = {
   /* "fassadenverkleidung24.de", true */ 'f', 'a', 's', 's', 'a', 'd', 'e', 'n', 'v', 'e', 'r', 'k', 'l', 'e', 'i', 'd', 'u', 'n', 'g', '2', '4', '.', 'd', 'e', '\0',
   /* "fastaim.de", true */ 'f', 'a', 's', 't', 'a', 'i', 'm', '.', 'd', 'e', '\0',
   /* "fastcomcorp.com", true */ 'f', 'a', 's', 't', 'c', 'o', 'm', 'c', 'o', 'r', 'p', '.', 'c', 'o', 'm', '\0',
   /* "fastcomcorp.net", true */ 'f', 'a', 's', 't', 'c', 'o', 'm', 'c', 'o', 'r', 'p', '.', 'n', 'e', 't', '\0',
   /* "fastconfirm.com", true */ 'f', 'a', 's', 't', 'c', 'o', 'n', 'f', 'i', 'r', 'm', '.', 'c', 'o', 'm', '\0',
   /* "fastdigitizing.com", true */ 'f', 'a', 's', 't', 'd', 'i', 'g', 'i', 't', 'i', 'z', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "fastmail.com", false */ 'f', 'a', 's', 't', 'm', 'a', 'i', 'l', '.', 'c', 'o', 'm', '\0',
   /* "fatwin.pw", true */ 'f', 'a', 't', 'w', 'i', 'n', '.', 'p', 'w', '\0',
+  /* "fatzebra.com.au", false */ 'f', 'a', 't', 'z', 'e', 'b', 'r', 'a', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "faucetbox.com", true */ 'f', 'a', 'u', 'c', 'e', 't', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "favorit.club", true */ 'f', 'a', 'v', 'o', 'r', 'i', 't', '.', 'c', 'l', 'u', 'b', '\0',
+  /* "fawkex.me", true */ 'f', 'a', 'w', 'k', 'e', 'x', '.', 'm', 'e', '\0',
   /* "fawong.com", true */ 'f', 'a', 'w', 'o', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "faxreader.net", true */ 'f', 'a', 'x', 'r', 'e', 'a', 'd', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "fbijobs.gov", true */ 'f', 'b', 'i', 'j', 'o', 'b', 's', '.', 'g', 'o', 'v', '\0',
   /* "fca-tools.com", true */ 'f', 'c', 'a', '-', 't', 'o', 'o', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "fcburk.de", true */ 'f', 'c', 'b', 'u', 'r', 'k', '.', 'd', 'e', '\0',
   /* "fdsys.gov", false */ 'f', 'd', 's', 'y', 's', '.', 'g', 'o', 'v', '\0',
   /* "fdt.name", true */ 'f', 'd', 't', '.', 'n', 'a', 'm', 'e', '\0',
   /* "feaden.me", true */ 'f', 'e', 'a', 'd', 'e', 'n', '.', 'm', 'e', '\0',
@@ -4832,17 +4813,16 @@ static const char kSTSHostTable[] = {
   /* "fid.to", true */ 'f', 'i', 'd', '.', 't', 'o', '\0',
   /* "fidanza.eu", true */ 'f', 'i', 'd', 'a', 'n', 'z', 'a', '.', 'e', 'u', '\0',
   /* "fidel.uk", true */ 'f', 'i', 'd', 'e', 'l', '.', 'u', 'k', '\0',
   /* "fidelapp.com", true */ 'f', 'i', 'd', 'e', 'l', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "fieldclockapp.com", true */ 'f', 'i', 'e', 'l', 'd', 'c', 'l', 'o', 'c', 'k', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "fiendishmasterplan.com", true */ 'f', 'i', 'e', 'n', 'd', 'i', 's', 'h', 'm', 'a', 's', 't', 'e', 'r', 'p', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "fierlafijn.net", true */ 'f', 'i', 'e', 'r', 'l', 'a', 'f', 'i', 'j', 'n', '.', 'n', 'e', 't', '\0',
   /* "fierman.eu", false */ 'f', 'i', 'e', 'r', 'm', 'a', 'n', '.', 'e', 'u', '\0',
-  /* "fierman.net", false */ 'f', 'i', 'e', 'r', 'm', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "fierman.us", false */ 'f', 'i', 'e', 'r', 'm', 'a', 'n', '.', 'u', 's', '\0',
   /* "figurasdelinguagem.com.br", true */ 'f', 'i', 'g', 'u', 'r', 'a', 's', 'd', 'e', 'l', 'i', 'n', 'g', 'u', 'a', 'g', 'e', 'm', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "figuurzagers.nl", false */ 'f', 'i', 'g', 'u', 'u', 'r', 'z', 'a', 'g', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "fiilr.com", true */ 'f', 'i', 'i', 'l', 'r', '.', 'c', 'o', 'm', '\0',
   /* "fiix.io", true */ 'f', 'i', 'i', 'x', '.', 'i', 'o', '\0',
   /* "fiken.no", true */ 'f', 'i', 'k', 'e', 'n', '.', 'n', 'o', '\0',
   /* "fiksel.info", true */ 'f', 'i', 'k', 's', 'e', 'l', '.', 'i', 'n', 'f', 'o', '\0',
   /* "file-pdf.it", true */ 'f', 'i', 'l', 'e', '-', 'p', 'd', 'f', '.', 'i', 't', '\0',
@@ -4963,17 +4943,16 @@ static const char kSTSHostTable[] = {
   /* "floridafieros.org", true */ 'f', 'l', 'o', 'r', 'i', 'd', 'a', 'f', 'i', 'e', 'r', 'o', 's', '.', 'o', 'r', 'g', '\0',
   /* "florismoo.nl", true */ 'f', 'l', 'o', 'r', 'i', 's', 'm', 'o', 'o', '.', 'n', 'l', '\0',
   /* "florismouwen.com", true */ 'f', 'l', 'o', 'r', 'i', 's', 'm', 'o', 'u', 'w', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "florispoort.nl", true */ 'f', 'l', 'o', 'r', 'i', 's', 'p', 'o', 'o', 'r', 't', '.', 'n', 'l', '\0',
   /* "florisvdk.net", true */ 'f', 'l', 'o', 'r', 'i', 's', 'v', 'd', 'k', '.', 'n', 'e', 't', '\0',
   /* "floseed.fr", true */ 'f', 'l', 'o', 's', 'e', 'e', 'd', '.', 'f', 'r', '\0',
   /* "floskelwolke.de", true */ 'f', 'l', 'o', 's', 'k', 'e', 'l', 'w', 'o', 'l', 'k', 'e', '.', 'd', 'e', '\0',
   /* "floth.at", true */ 'f', 'l', 'o', 't', 'h', '.', 'a', 't', '\0',
-  /* "flow.su", true */ 'f', 'l', 'o', 'w', '.', 's', 'u', '\0',
   /* "floweslawncare.com", true */ 'f', 'l', 'o', 'w', 'e', 's', 'l', 'a', 'w', 'n', 'c', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "flox.io", true */ 'f', 'l', 'o', 'x', '.', 'i', 'o', '\0',
   /* "flra.gov", true */ 'f', 'l', 'r', 'a', '.', 'g', 'o', 'v', '\0',
   /* "flucky.xyz", true */ 'f', 'l', 'u', 'c', 'k', 'y', '.', 'x', 'y', 'z', '\0',
   /* "fluffycloud.de", true */ 'f', 'l', 'u', 'f', 'f', 'y', 'c', 'l', 'o', 'u', 'd', '.', 'd', 'e', '\0',
   /* "fluidojobs.com", true */ 'f', 'l', 'u', 'i', 'd', 'o', 'j', 'o', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "flukethoughts.com", true */ 'f', 'l', 'u', 'k', 'e', 't', 'h', 'o', 'u', 'g', 'h', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "flurrybridge.com", true */ 'f', 'l', 'u', 'r', 'r', 'y', 'b', 'r', 'i', 'd', 'g', 'e', '.', 'c', 'o', 'm', '\0',
@@ -5024,17 +5003,16 @@ static const char kSTSHostTable[] = {
   /* "foolip.org", true */ 'f', 'o', 'o', 'l', 'i', 'p', '.', 'o', 'r', 'g', '\0',
   /* "foolwealth.com", true */ 'f', 'o', 'o', 'l', 'w', 'e', 'a', 'l', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "foorack.com", true */ 'f', 'o', 'o', 'r', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "fooster.io", true */ 'f', 'o', 'o', 's', 't', 'e', 'r', '.', 'i', 'o', '\0',
   /* "footlegende.fr", true */ 'f', 'o', 'o', 't', 'l', 'e', 'g', 'e', 'n', 'd', 'e', '.', 'f', 'r', '\0',
   /* "forafifty.co.za", true */ 'f', 'o', 'r', 'a', 'f', 'i', 'f', 't', 'y', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "foray-jero.me", true */ 'f', 'o', 'r', 'a', 'y', '-', 'j', 'e', 'r', 'o', '.', 'm', 'e', '\0',
   /* "forcewave.com", true */ 'f', 'o', 'r', 'c', 'e', 'w', 'a', 'v', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "fordbydesign.com", true */ 'f', 'o', 'r', 'd', 'b', 'y', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
   /* "forewordreviews.com", true */ 'f', 'o', 'r', 'e', 'w', 'o', 'r', 'd', 'r', 'e', 'v', 'i', 'e', 'w', 's', '.', 'c', 'o', 'm', '\0',
   /* "forex.ee", true */ 'f', 'o', 'r', 'e', 'x', '.', 'e', 'e', '\0',
   /* "forgix.com", true */ 'f', 'o', 'r', 'g', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "formationseeker.com", true */ 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', 's', 'e', 'e', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "formationsfactory.co.uk", false */ 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', 's', 'f', 'a', 'c', 't', 'o', 'r', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "formini.dz", true */ 'f', 'o', 'r', 'm', 'i', 'n', 'i', '.', 'd', 'z', '\0',
   /* "foro.io", false */ 'f', 'o', 'r', 'o', '.', 'i', 'o', '\0',
   /* "forodeespanol.com", true */ 'f', 'o', 'r', 'o', 'd', 'e', 'e', 's', 'p', 'a', 'n', 'o', 'l', '.', 'c', 'o', 'm', '\0',
@@ -5192,16 +5170,17 @@ static const char kSTSHostTable[] = {
   /* "fugle.de", true */ 'f', 'u', 'g', 'l', 'e', '.', 'd', 'e', '\0',
   /* "fuglede.dk", true */ 'f', 'u', 'g', 'l', 'e', 'd', 'e', '.', 'd', 'k', '\0',
   /* "fukuko.biz", true */ 'f', 'u', 'k', 'u', 'k', 'o', '.', 'b', 'i', 'z', '\0',
   /* "fukuko.xyz", true */ 'f', 'u', 'k', 'u', 'k', 'o', '.', 'x', 'y', 'z', '\0',
   /* "fullbundle.com", true */ 'f', 'u', 'l', 'l', 'b', 'u', 'n', 'd', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fullyint.com", true */ 'f', 'u', 'l', 'l', 'y', 'i', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "fumblers.ca", true */ 'f', 'u', 'm', 'b', 'l', 'e', 'r', 's', '.', 'c', 'a', '\0',
   /* "fumiware.com", true */ 'f', 'u', 'm', 'i', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
+  /* "fumo.se", true */ 'f', 'u', 'm', 'o', '.', 's', 'e', '\0',
   /* "fun-stamps.de", true */ 'f', 'u', 'n', '-', 's', 't', 'a', 'm', 'p', 's', '.', 'd', 'e', '\0',
   /* "fun-stempel.de", true */ 'f', 'u', 'n', '-', 's', 't', 'e', 'm', 'p', 'e', 'l', '.', 'd', 'e', '\0',
   /* "funchestra.at", false */ 'f', 'u', 'n', 'c', 'h', 'e', 's', 't', 'r', 'a', '.', 'a', 't', '\0',
   /* "functions-online.com", true */ 'f', 'u', 'n', 'c', 't', 'i', 'o', 'n', 's', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fundays.nl", true */ 'f', 'u', 'n', 'd', 'a', 'y', 's', '.', 'n', 'l', '\0',
   /* "funderburg.me", true */ 'f', 'u', 'n', 'd', 'e', 'r', 'b', 'u', 'r', 'g', '.', 'm', 'e', '\0',
   /* "fundingempire.com", true */ 'f', 'u', 'n', 'd', 'i', 'n', 'g', 'e', 'm', 'p', 'i', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "funi4u.com", true */ 'f', 'u', 'n', 'i', '4', 'u', '.', 'c', 'o', 'm', '\0',
@@ -5482,16 +5461,17 @@ static const char kSTSHostTable[] = {
   /* "giantmicrobes.de", true */ 'g', 'i', 'a', 'n', 't', 'm', 'i', 'c', 'r', 'o', 'b', 'e', 's', '.', 'd', 'e', '\0',
   /* "gianttree.de", true */ 'g', 'i', 'a', 'n', 't', 't', 'r', 'e', 'e', '.', 'd', 'e', '\0',
   /* "gibraltar.at", true */ 'g', 'i', 'b', 'r', 'a', 'l', 't', 'a', 'r', '.', 'a', 't', '\0',
   /* "giddyaunt.net", true */ 'g', 'i', 'd', 'd', 'y', 'a', 'u', 'n', 't', '.', 'n', 'e', 't', '\0',
   /* "giftgofers.com", true */ 'g', 'i', 'f', 't', 'g', 'o', 'f', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "giftking.nl", true */ 'g', 'i', 'f', 't', 'k', 'i', 'n', 'g', '.', 'n', 'l', '\0',
   /* "giftservices.nl", true */ 'g', 'i', 'f', 't', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'n', 'l', '\0',
   /* "giftsn.com.sg", false */ 'g', 'i', 'f', 't', 's', 'n', '.', 'c', 'o', 'm', '.', 's', 'g', '\0',
+  /* "gifzilla.net", false */ 'g', 'i', 'f', 'z', 'i', 'l', 'l', 'a', '.', 'n', 'e', 't', '\0',
   /* "gig.ru", false */ 'g', 'i', 'g', '.', 'r', 'u', '\0',
   /* "giga.nl", true */ 'g', 'i', 'g', 'a', '.', 'n', 'l', '\0',
   /* "gigacog.com", true */ 'g', 'i', 'g', 'a', 'c', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "gigawa.lt", true */ 'g', 'i', 'g', 'a', 'w', 'a', '.', 'l', 't', '\0',
   /* "gijsbertus.com", true */ 'g', 'i', 'j', 's', 'b', 'e', 'r', 't', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "gilcloud.com", true */ 'g', 'i', 'l', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "gillet-cros.fr", true */ 'g', 'i', 'l', 'l', 'e', 't', '-', 'c', 'r', 'o', 's', '.', 'f', 'r', '\0',
   /* "gillmanandsoame.co.uk", true */ 'g', 'i', 'l', 'l', 'm', 'a', 'n', 'a', 'n', 'd', 's', 'o', 'a', 'm', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
@@ -5652,17 +5632,16 @@ static const char kSTSHostTable[] = {
   /* "gracethrufaith.com", true */ 'g', 'r', 'a', 'c', 'e', 't', 'h', 'r', 'u', 'f', 'a', 'i', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "gracetini.com", true */ 'g', 'r', 'a', 'c', 'e', 't', 'i', 'n', 'i', '.', 'c', 'o', 'm', '\0',
   /* "graciousmay.com", true */ 'g', 'r', 'a', 'c', 'i', 'o', 'u', 's', 'm', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "grademymac.com", true */ 'g', 'r', 'a', 'd', 'e', 'm', 'y', 'm', 'a', 'c', '.', 'c', 'o', 'm', '\0',
   /* "grademypc.com", true */ 'g', 'r', 'a', 'd', 'e', 'm', 'y', 'p', 'c', '.', 'c', 'o', 'm', '\0',
   /* "gradients.com", true */ 'g', 'r', 'a', 'd', 'i', 'e', 'n', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "graf.re", true */ 'g', 'r', 'a', 'f', '.', 'r', 'e', '\0',
   /* "grafcaps.com", true */ 'g', 'r', 'a', 'f', 'c', 'a', 'p', 's', '.', 'c', 'o', 'm', '\0',
-  /* "graffen.dk", true */ 'g', 'r', 'a', 'f', 'f', 'e', 'n', '.', 'd', 'k', '\0',
   /* "grafitec.ru", true */ 'g', 'r', 'a', 'f', 'i', 't', 'e', 'c', '.', 'r', 'u', '\0',
   /* "grafmurr.de", true */ 'g', 'r', 'a', 'f', 'm', 'u', 'r', 'r', '.', 'd', 'e', '\0',
   /* "graingert.co.uk", true */ 'g', 'r', 'a', 'i', 'n', 'g', 'e', 'r', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "graliv.net", true */ 'g', 'r', 'a', 'l', 'i', 'v', '.', 'n', 'e', 't', '\0',
   /* "gramati.com.br", true */ 'g', 'r', 'a', 'm', 'a', 't', 'i', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "granary-demo.appspot.com", true */ 'g', 'r', 'a', 'n', 'a', 'r', 'y', '-', 'd', 'e', 'm', 'o', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "grandcapital.id", true */ 'g', 'r', 'a', 'n', 'd', 'c', 'a', 'p', 'i', 't', 'a', 'l', '.', 'i', 'd', '\0',
   /* "grandcapital.ru", true */ 'g', 'r', 'a', 'n', 'd', 'c', 'a', 'p', 'i', 't', 'a', 'l', '.', 'r', 'u', '\0',
@@ -5827,17 +5806,16 @@ static const char kSTSHostTable[] = {
   /* "gyas.nl", true */ 'g', 'y', 'a', 's', '.', 'n', 'l', '\0',
   /* "gymnasium-farmsen.de", true */ 'g', 'y', 'm', 'n', 'a', 's', 'i', 'u', 'm', '-', 'f', 'a', 'r', 'm', 's', 'e', 'n', '.', 'd', 'e', '\0',
   /* "gypsycatdreams.com", true */ 'g', 'y', 'p', 's', 'y', 'c', 'a', 't', 'd', 'r', 'e', 'a', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "gyu-raku.jp", true */ 'g', 'y', 'u', '-', 'r', 'a', 'k', 'u', '.', 'j', 'p', '\0',
   /* "gz-architekten.de", true */ 'g', 'z', '-', 'a', 'r', 'c', 'h', 'i', 't', 'e', 'k', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "gz-benz.com", true */ 'g', 'z', '-', 'b', 'e', 'n', 'z', '.', 'c', 'o', 'm', '\0',
   /* "gz-bmw.com", true */ 'g', 'z', '-', 'b', 'm', 'w', '.', 'c', 'o', 'm', '\0',
   /* "gza.jp", true */ 'g', 'z', 'a', '.', 'j', 'p', '\0',
-  /* "gzitech.com", true */ 'g', 'z', 'i', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "h-jo.net", true */ 'h', '-', 'j', 'o', '.', 'n', 'e', 't', '\0',
   /* "h-og.com", true */ 'h', '-', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "h-rickroll-n.pw", true */ 'h', '-', 'r', 'i', 'c', 'k', 'r', 'o', 'l', 'l', '-', 'n', '.', 'p', 'w', '\0',
   /* "h11.io", true */ 'h', '1', '1', '.', 'i', 'o', '\0',
   /* "h11.moe", true */ 'h', '1', '1', '.', 'm', 'o', 'e', '\0',
   /* "h3artbl33d.nl", true */ 'h', '3', 'a', 'r', 't', 'b', 'l', '3', '3', 'd', '.', 'n', 'l', '\0',
   /* "h404bi.com", false */ 'h', '4', '0', '4', 'b', 'i', '.', 'c', 'o', 'm', '\0',
   /* "haavard.me", true */ 'h', 'a', 'a', 'v', 'a', 'r', 'd', '.', 'm', 'e', '\0',
@@ -5929,17 +5907,16 @@ static const char kSTSHostTable[] = {
   /* "hardertimes.com", true */ 'h', 'a', 'r', 'd', 'e', 'r', 't', 'i', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "hardh.at", true */ 'h', 'a', 'r', 'd', 'h', '.', 'a', 't', '\0',
   /* "hardtfrieden.de", true */ 'h', 'a', 'r', 'd', 't', 'f', 'r', 'i', 'e', 'd', 'e', 'n', '.', 'd', 'e', '\0',
   /* "harlentimberproducts.co.uk", true */ 'h', 'a', 'r', 'l', 'e', 'n', 't', 'i', 'm', 'b', 'e', 'r', 'p', 'r', 'o', 'd', 'u', 'c', 't', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "harmoney.co.nz", true */ 'h', 'a', 'r', 'm', 'o', 'n', 'e', 'y', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "harmoney.com", true */ 'h', 'a', 'r', 'm', 'o', 'n', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "harmoney.com.au", true */ 'h', 'a', 'r', 'm', 'o', 'n', 'e', 'y', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "harringtonca.com", true */ 'h', 'a', 'r', 'r', 'i', 'n', 'g', 't', 'o', 'n', 'c', 'a', '.', 'c', 'o', 'm', '\0',
-  /* "harrisonsand.com", false */ 'h', 'a', 'r', 'r', 'i', 's', 'o', 'n', 's', 'a', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "harrisonsdirect.co.uk", true */ 'h', 'a', 'r', 'r', 'i', 's', 'o', 'n', 's', 'd', 'i', 'r', 'e', 'c', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "harrisonswebsites.com", true */ 'h', 'a', 'r', 'r', 'i', 's', 'o', 'n', 's', 'w', 'e', 'b', 's', 'i', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "harrysmallbones.co.uk", true */ 'h', 'a', 'r', 'r', 'y', 's', 'm', 'a', 'l', 'l', 'b', 'o', 'n', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "hartie95.de", true */ 'h', 'a', 'r', 't', 'i', 'e', '9', '5', '.', 'd', 'e', '\0',
   /* "hartlep.email", true */ 'h', 'a', 'r', 't', 'l', 'e', 'p', '.', 'e', 'm', 'a', 'i', 'l', '\0',
   /* "harvestapp.com", true */ 'h', 'a', 'r', 'v', 'e', 's', 't', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "harvester.fr", true */ 'h', 'a', 'r', 'v', 'e', 's', 't', 'e', 'r', '.', 'f', 'r', '\0',
   /* "hasdf.de", true */ 'h', 'a', 's', 'd', 'f', '.', 'd', 'e', '\0',
@@ -6085,17 +6062,16 @@ static const char kSTSHostTable[] = {
   /* "herbert.io", true */ 'h', 'e', 'r', 'b', 'e', 'r', 't', '.', 'i', 'o', '\0',
   /* "herbertmouwen.nl", true */ 'h', 'e', 'r', 'b', 'e', 'r', 't', 'm', 'o', 'u', 'w', 'e', 'n', '.', 'n', 'l', '\0',
   /* "herbweb.net", true */ 'h', 'e', 'r', 'b', 'w', 'e', 'b', '.', 'n', 'e', 't', '\0',
   /* "herbweb.org", true */ 'h', 'e', 'r', 'b', 'w', 'e', 'b', '.', 'o', 'r', 'g', '\0',
   /* "herculex.fi", true */ 'h', 'e', 'r', 'c', 'u', 'l', 'e', 'x', '.', 'f', 'i', '\0',
   /* "herds.eu", true */ 'h', 'e', 'r', 'd', 's', '.', 'e', 'u', '\0',
   /* "herebedragons.io", true */ 'h', 'e', 'r', 'e', 'b', 'e', 'd', 'r', 'a', 'g', 'o', 'n', 's', '.', 'i', 'o', '\0',
   /* "herecsrymy.cz", true */ 'h', 'e', 'r', 'e', 'c', 's', 'r', 'y', 'm', 'y', '.', 'c', 'z', '\0',
-  /* "heritagedentistry.ca", true */ 'h', 'e', 'r', 'i', 't', 'a', 'g', 'e', 'd', 'e', 'n', 't', 'i', 's', 't', 'r', 'y', '.', 'c', 'a', '\0',
   /* "herocentral.de", true */ 'h', 'e', 'r', 'o', 'c', 'e', 'n', 't', 'r', 'a', 'l', '.', 'd', 'e', '\0',
   /* "herpaderp.net", true */ 'h', 'e', 'r', 'p', 'a', 'd', 'e', 'r', 'p', '.', 'n', 'e', 't', '\0',
   /* "herr-webdesign.de", true */ 'h', 'e', 'r', 'r', '-', 'w', 'e', 'b', 'd', 'e', 's', 'i', 'g', 'n', '.', 'd', 'e', '\0',
   /* "herringsresidence.be", true */ 'h', 'e', 'r', 'r', 'i', 'n', 'g', 's', 'r', 'e', 's', 'i', 'd', 'e', 'n', 'c', 'e', '.', 'b', 'e', '\0',
   /* "herrsmith.com", true */ 'h', 'e', 'r', 'r', 's', 'm', 'i', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "hesaplama.net", true */ 'h', 'e', 's', 'a', 'p', 'l', 'a', 'm', 'a', '.', 'n', 'e', 't', '\0',
   /* "hethely.ch", true */ 'h', 'e', 't', 'h', 'e', 'l', 'y', '.', 'c', 'h', '\0',
   /* "hetmer.com", true */ 'h', 'e', 't', 'm', 'e', 'r', '.', 'c', 'o', 'm', '\0',
@@ -6114,17 +6090,16 @@ static const char kSTSHostTable[] = {
   /* "heyguevara.com", true */ 'h', 'e', 'y', 'g', 'u', 'e', 'v', 'a', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "hg.python.org", true */ 'h', 'g', '.', 'p', 'y', 't', 'h', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "hhhdb.com", true */ 'h', 'h', 'h', 'd', 'b', '.', 'c', 'o', 'm', '\0',
   /* "hhmmmm.de", true */ 'h', 'h', 'm', 'm', 'm', 'm', '.', 'd', 'e', '\0',
   /* "hhs.gov", true */ 'h', 'h', 's', '.', 'g', 'o', 'v', '\0',
   /* "hicl.org", true */ 'h', 'i', 'c', 'l', '.', 'o', 'r', 'g', '\0',
   /* "hicoria.com", true */ 'h', 'i', 'c', 'o', 'r', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "hidbo.de", true */ 'h', 'i', 'd', 'b', 'o', '.', 'd', 'e', '\0',
-  /* "hideftv.deals", true */ 'h', 'i', 'd', 'e', 'f', 't', 'v', '.', 'd', 'e', 'a', 'l', 's', '\0',
   /* "hiexmerida-mailing.com", true */ 'h', 'i', 'e', 'x', 'm', 'e', 'r', 'i', 'd', 'a', '-', 'm', 'a', 'i', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "higgstools.org", true */ 'h', 'i', 'g', 'g', 's', 't', 'o', 'o', 'l', 's', '.', 'o', 'r', 'g', '\0',
   /* "higp.de", true */ 'h', 'i', 'g', 'p', '.', 'd', 'e', '\0',
   /* "hiisukun.com", true */ 'h', 'i', 'i', 's', 'u', 'k', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "hilahdih.cz", true */ 'h', 'i', 'l', 'a', 'h', 'd', 'i', 'h', '.', 'c', 'z', '\0',
   /* "hilaolu.com", true */ 'h', 'i', 'l', 'a', 'o', 'l', 'u', '.', 'c', 'o', 'm', '\0',
   /* "hilchenba.ch", true */ 'h', 'i', 'l', 'c', 'h', 'e', 'n', 'b', 'a', '.', 'c', 'h', '\0',
   /* "hilnu.com", true */ 'h', 'i', 'l', 'n', 'u', '.', 'c', 'o', 'm', '\0',
@@ -6328,31 +6303,29 @@ static const char kSTSHostTable[] = {
   /* "huaxueba.com", true */ 'h', 'u', 'a', 'x', 'u', 'e', 'b', 'a', '.', 'c', 'o', 'm', '\0',
   /* "hubert.systems", true */ 'h', 'u', 'b', 'e', 'r', 't', '.', 's', 'y', 's', 't', 'e', 'm', 's', '\0',
   /* "huberulrich.de", true */ 'h', 'u', 'b', 'e', 'r', 'u', 'l', 'r', 'i', 'c', 'h', '.', 'd', 'e', '\0',
   /* "huchet.me", true */ 'h', 'u', 'c', 'h', 'e', 't', '.', 'm', 'e', '\0',
   /* "hudhaifahgoga.co.za", true */ 'h', 'u', 'd', 'h', 'a', 'i', 'f', 'a', 'h', 'g', 'o', 'g', 'a', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "hudingyuan.cn", true */ 'h', 'u', 'd', 'i', 'n', 'g', 'y', 'u', 'a', 'n', '.', 'c', 'n', '\0',
   /* "huendeleskopfhuette.de", true */ 'h', 'u', 'e', 'n', 'd', 'e', 'l', 'e', 's', 'k', 'o', 'p', 'f', 'h', 'u', 'e', 't', 't', 'e', '.', 'd', 'e', '\0',
   /* "huersch.com", true */ 'h', 'u', 'e', 'r', 's', 'c', 'h', '.', 'c', 'o', 'm', '\0',
-  /* "huffduffer.com", true */ 'h', 'u', 'f', 'f', 'd', 'u', 'f', 'f', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "hugofs.com", true */ 'h', 'u', 'g', 'o', 'f', 's', '.', 'c', 'o', 'm', '\0',
   /* "huguesblanchard.paris", true */ 'h', 'u', 'g', 'u', 'e', 's', 'b', 'l', 'a', 'n', 'c', 'h', 'a', 'r', 'd', '.', 'p', 'a', 'r', 'i', 's', '\0',
   /* "huihui.moe", true */ 'h', 'u', 'i', 'h', 'u', 'i', '.', 'm', 'o', 'e', '\0',
   /* "huiser.nl", true */ 'h', 'u', 'i', 's', 'e', 'r', '.', 'n', 'l', '\0',
   /* "humankode.com", true */ 'h', 'u', 'm', 'a', 'n', 'k', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "hump.dk", true */ 'h', 'u', 'm', 'p', '.', 'd', 'k', '\0',
   /* "humpi.at", true */ 'h', 'u', 'm', 'p', 'i', '.', 'a', 't', '\0',
   /* "hund.io", true */ 'h', 'u', 'n', 'd', '.', 'i', 'o', '\0',
   /* "hundeformel.de", true */ 'h', 'u', 'n', 'd', 'e', 'f', 'o', 'r', 'm', 'e', 'l', '.', 'd', 'e', '\0',
   /* "hunger.im", true */ 'h', 'u', 'n', 'g', 'e', 'r', '.', 'i', 'm', '\0',
   /* "hunter.io", true */ 'h', 'u', 'n', 't', 'e', 'r', '.', 'i', 'o', '\0',
   /* "huodongweb.com", true */ 'h', 'u', 'o', 'd', 'o', 'n', 'g', 'w', 'e', 'b', '.', 'c', 'o', 'm', '\0',
   /* "hup.blue", true */ 'h', 'u', 'p', '.', 'b', 'l', 'u', 'e', '\0',
-  /* "hupp.se", true */ 'h', 'u', 'p', 'p', '.', 's', 'e', '\0',
   /* "hurd.is", true */ 'h', 'u', 'r', 'd', '.', 'i', 's', '\0',
   /* "huren.nl", true */ 'h', 'u', 'r', 'e', 'n', '.', 'n', 'l', '\0',
   /* "huroji.com", true */ 'h', 'u', 'r', 'o', 'j', 'i', '.', 'c', 'o', 'm', '\0',
   /* "husakbau.at", true */ 'h', 'u', 's', 'a', 'k', 'b', 'a', 'u', '.', 'a', 't', '\0',
   /* "hushfile.it", true */ 'h', 'u', 's', 'h', 'f', 'i', 'l', 'e', '.', 'i', 't', '\0',
   /* "husic.net", true */ 'h', 'u', 's', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "husky.xyz", true */ 'h', 'u', 's', 'k', 'y', '.', 'x', 'y', 'z', '\0',
   /* "huskyinc.us", true */ 'h', 'u', 's', 'k', 'y', 'i', 'n', 'c', '.', 'u', 's', '\0',
@@ -6499,17 +6472,16 @@ static const char kSTSHostTable[] = {
   /* "iispeed.com", true */ 'i', 'i', 's', 'p', 'e', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "ijoda.com", true */ 'i', 'j', 'o', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "ijohan.nl", true */ 'i', 'j', 'o', 'h', 'a', 'n', '.', 'n', 'l', '\0',
   /* "ijsclubtilburg.nl", true */ 'i', 'j', 's', 'c', 'l', 'u', 'b', 't', 'i', 'l', 'b', 'u', 'r', 'g', '.', 'n', 'l', '\0',
   /* "ikachalife.com", true */ 'i', 'k', 'a', 'c', 'h', 'a', 'l', 'i', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "ikarate.ru", true */ 'i', 'k', 'a', 'r', 'a', 't', 'e', '.', 'r', 'u', '\0',
   /* "ikeyless.com", true */ 'i', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "ikk.me", true */ 'i', 'k', 'k', '.', 'm', 'e', '\0',
-  /* "ikkatsu-satei.jp", true */ 'i', 'k', 'k', 'a', 't', 's', 'u', '-', 's', 'a', 't', 'e', 'i', '.', 'j', 'p', '\0',
   /* "iklive.org", false */ 'i', 'k', 'l', 'i', 'v', 'e', '.', 'o', 'r', 'g', '\0',
   /* "ikocik.sk", true */ 'i', 'k', 'o', 'c', 'i', 'k', '.', 's', 'k', '\0',
   /* "ikon.name", true */ 'i', 'k', 'o', 'n', '.', 'n', 'a', 'm', 'e', '\0',
   /* "ikulist.me", true */ 'i', 'k', 'u', 'l', 'i', 's', 't', '.', 'm', 'e', '\0',
   /* "ikvts.de", true */ 'i', 'k', 'v', 't', 's', '.', 'd', 'e', '\0',
   /* "ikwilthepiratebay.org", true */ 'i', 'k', 'w', 'i', 'l', 't', 'h', 'e', 'p', 'i', 'r', 'a', 't', 'e', 'b', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "ikzoekeengoedkopeauto.nl", true */ 'i', 'k', 'z', 'o', 'e', 'k', 'e', 'e', 'n', 'g', 'o', 'e', 'd', 'k', 'o', 'p', 'e', 'a', 'u', 't', 'o', '.', 'n', 'l', '\0',
   /* "ikzoekjeugdhulp.nl", true */ 'i', 'k', 'z', 'o', 'e', 'k', 'j', 'e', 'u', 'g', 'd', 'h', 'u', 'l', 'p', '.', 'n', 'l', '\0',
@@ -6602,17 +6574,16 @@ static const char kSTSHostTable[] = {
   /* "indusfastremit-us.com", true */ 'i', 'n', 'd', 'u', 's', 'f', 'a', 's', 't', 'r', 'e', 'm', 'i', 't', '-', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "indusfastremit.com", true */ 'i', 'n', 'd', 'u', 's', 'f', 'a', 's', 't', 'r', 'e', 'm', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "industreiler.com", true */ 'i', 'n', 'd', 'u', 's', 't', 'r', 'e', 'i', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "indybay.org", true */ 'i', 'n', 'd', 'y', 'b', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "inebula.it", true */ 'i', 'n', 'e', 'b', 'u', 'l', 'a', '.', 'i', 't', '\0',
   /* "ineed.coffee", true */ 'i', 'n', 'e', 'e', 'd', '.', 'c', 'o', 'f', 'f', 'e', 'e', '\0',
   /* "inertianetworks.com", true */ 'i', 'n', 'e', 'r', 't', 'i', 'a', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "inetpub.cn", true */ 'i', 'n', 'e', 't', 'p', 'u', 'b', '.', 'c', 'n', '\0',
-  /* "inexpensivecomputers.net", true */ 'i', 'n', 'e', 'x', 'p', 'e', 'n', 's', 'i', 'v', 'e', 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "infinether.net", true */ 'i', 'n', 'f', 'i', 'n', 'e', 't', 'h', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "infinitude.me.uk", true */ 'i', 'n', 'f', 'i', 'n', 'i', 't', 'u', 'd', 'e', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "infinity-freedom.com", true */ 'i', 'n', 'f', 'i', 'n', 'i', 't', 'y', '-', 'f', 'r', 'e', 'e', 'd', 'o', 'm', '.', 'c', 'o', 'm', '\0',
   /* "infinity-freedom.de", true */ 'i', 'n', 'f', 'i', 'n', 'i', 't', 'y', '-', 'f', 'r', 'e', 'e', 'd', 'o', 'm', '.', 'd', 'e', '\0',
   /* "infinity-lifestyle.de", true */ 'i', 'n', 'f', 'i', 'n', 'i', 't', 'y', '-', 'l', 'i', 'f', 'e', 's', 't', 'y', 'l', 'e', '.', 'd', 'e', '\0',
   /* "influxus.com", false */ 'i', 'n', 'f', 'l', 'u', 'x', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "infmed.com", true */ 'i', 'n', 'f', 'm', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "info-beamer.com", true */ 'i', 'n', 'f', 'o', '-', 'b', 'e', 'a', 'm', 'e', 'r', '.', 'c', 'o', 'm', '\0',
@@ -7225,17 +7196,16 @@ static const char kSTSHostTable[] = {
   /* "jonpads.com", true */ 'j', 'o', 'n', 'p', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "jonsno.ws", true */ 'j', 'o', 'n', 's', 'n', 'o', '.', 'w', 's', '\0',
   /* "joostrijneveld.nl", true */ 'j', 'o', 'o', 's', 't', 'r', 'i', 'j', 'n', 'e', 'v', 'e', 'l', 'd', '.', 'n', 'l', '\0',
   /* "jooto.com", true */ 'j', 'o', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "jopsens.de", true */ 'j', 'o', 'p', 's', 'e', 'n', 's', '.', 'd', 'e', '\0',
   /* "joran.org", true */ 'j', 'o', 'r', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "jordans.co.uk", true */ 'j', 'o', 'r', 'd', 'a', 'n', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "jorgemesa.me", true */ 'j', 'o', 'r', 'g', 'e', 'm', 'e', 's', 'a', '.', 'm', 'e', '\0',
-  /* "jornadasciberdefensa2016.es", true */ 'j', 'o', 'r', 'n', 'a', 'd', 'a', 's', 'c', 'i', 'b', 'e', 'r', 'd', 'e', 'f', 'e', 'n', 's', 'a', '2', '0', '1', '6', '.', 'e', 's', '\0',
   /* "jornane.me", true */ 'j', 'o', 'r', 'n', 'a', 'n', 'e', '.', 'm', 'e', '\0',
   /* "jornane.nl", true */ 'j', 'o', 'r', 'n', 'a', 'n', 'e', '.', 'n', 'l', '\0',
   /* "jornane.no", true */ 'j', 'o', 'r', 'n', 'a', 'n', 'e', '.', 'n', 'o', '\0',
   /* "joscares.com", true */ 'j', 'o', 's', 'c', 'a', 'r', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "josecage.com", true */ 'j', 'o', 's', 'e', 'c', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "josefjanosec.com", true */ 'j', 'o', 's', 'e', 'f', 'j', 'a', 'n', 'o', 's', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "josephrees.uk", true */ 'j', 'o', 's', 'e', 'p', 'h', 'r', 'e', 'e', 's', '.', 'u', 'k', '\0',
   /* "joshgrancell.com", false */ 'j', 'o', 's', 'h', 'g', 'r', 'a', 'n', 'c', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
@@ -7324,16 +7294,17 @@ static const char kSTSHostTable[] = {
   /* "k-tube.com", true */ 'k', '-', 't', 'u', 'b', 'e', '.', 'c', 'o', 'm', '\0',
   /* "k-wallet.com", true */ 'k', '-', 'w', 'a', 'l', 'l', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "k2mts.org", true */ 'k', '2', 'm', 't', 's', '.', 'o', 'r', 'g', '\0',
   /* "kaangenc.me", true */ 'k', 'a', 'a', 'n', 'g', 'e', 'n', 'c', '.', 'm', 'e', '\0',
   /* "kaasbijwijn.nl", true */ 'k', 'a', 'a', 's', 'b', 'i', 'j', 'w', 'i', 'j', 'n', '.', 'n', 'l', '\0',
   /* "kab-s.de", true */ 'k', 'a', 'b', '-', 's', '.', 'd', 'e', '\0',
   /* "kabat-fans.cz", true */ 'k', 'a', 'b', 'a', 't', '-', 'f', 'a', 'n', 's', '.', 'c', 'z', '\0',
   /* "kabeuchi.com", true */ 'k', 'a', 'b', 'e', 'u', 'c', 'h', 'i', '.', 'c', 'o', 'm', '\0',
+  /* "kabus.org", true */ 'k', 'a', 'b', 'u', 's', '.', 'o', 'r', 'g', '\0',
   /* "kachlikova2.cz", true */ 'k', 'a', 'c', 'h', 'l', 'i', 'k', 'o', 'v', 'a', '2', '.', 'c', 'z', '\0',
   /* "kackscharf.de", true */ 'k', 'a', 'c', 'k', 's', 'c', 'h', 'a', 'r', 'f', '.', 'd', 'e', '\0',
   /* "kadmec.com", true */ 'k', 'a', 'd', 'm', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "kaffeekrone.de", true */ 'k', 'a', 'f', 'f', 'e', 'e', 'k', 'r', 'o', 'n', 'e', '.', 'd', 'e', '\0',
   /* "kafoom.de", true */ 'k', 'a', 'f', 'o', 'o', 'm', '.', 'd', 'e', '\0',
   /* "kaheim.de", false */ 'k', 'a', 'h', 'e', 'i', 'm', '.', 'd', 'e', '\0',
   /* "kaileymslusser.com", true */ 'k', 'a', 'i', 'l', 'e', 'y', 'm', 's', 'l', 'u', 's', 's', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "kainz.bayern", true */ 'k', 'a', 'i', 'n', 'z', '.', 'b', 'a', 'y', 'e', 'r', 'n', '\0',
@@ -7758,16 +7729,17 @@ static const char kSTSHostTable[] = {
   /* "kredite24.de", true */ 'k', 'r', 'e', 'd', 'i', 't', 'e', '2', '4', '.', 'd', 'e', '\0',
   /* "kreditkacs.cz", true */ 'k', 'r', 'e', 'd', 'i', 't', 'k', 'a', 'c', 's', '.', 'c', 'z', '\0',
   /* "kreen.org", true */ 'k', 'r', 'e', 'e', 'n', '.', 'o', 'r', 'g', '\0',
   /* "kriechel.de", true */ 'k', 'r', 'i', 'e', 'c', 'h', 'e', 'l', '.', 'd', 'e', '\0',
   /* "kriegskindernothilfe.de", true */ 'k', 'r', 'i', 'e', 'g', 's', 'k', 'i', 'n', 'd', 'e', 'r', 'n', 'o', 't', 'h', 'i', 'l', 'f', 'e', '.', 'd', 'e', '\0',
   /* "kriptosec.com", true */ 'k', 'r', 'i', 'p', 't', 'o', 's', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "krislamoureux.com", true */ 'k', 'r', 'i', 's', 'l', 'a', 'm', 'o', 'u', 'r', 'e', 'u', 'x', '.', 'c', 'o', 'm', '\0',
   /* "krisstarkey.co.uk", true */ 'k', 'r', 'i', 's', 's', 't', 'a', 'r', 'k', 'e', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
+  /* "kristikala.nl", true */ 'k', 'r', 'i', 's', 't', 'i', 'k', 'a', 'l', 'a', '.', 'n', 'l', '\0',
   /* "kristinbailey.com", true */ 'k', 'r', 'i', 's', 't', 'i', 'n', 'b', 'a', 'i', 'l', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "kristjanrang.eu", true */ 'k', 'r', 'i', 's', 't', 'j', 'a', 'n', 'r', 'a', 'n', 'g', '.', 'e', 'u', '\0',
   /* "kristofferkoch.com", true */ 'k', 'r', 'i', 's', 't', 'o', 'f', 'f', 'e', 'r', 'k', 'o', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "krizek.cc", true */ 'k', 'r', 'i', 'z', 'e', 'k', '.', 'c', 'c', '\0',
   /* "krizevackapajdasija.hr", true */ 'k', 'r', 'i', 'z', 'e', 'v', 'a', 'c', 'k', 'a', 'p', 'a', 'j', 'd', 'a', 's', 'i', 'j', 'a', '.', 'h', 'r', '\0',
   /* "krizevci.info", true */ 'k', 'r', 'i', 'z', 'e', 'v', 'c', 'i', '.', 'i', 'n', 'f', 'o', '\0',
   /* "krk-media.pl", false */ 'k', 'r', 'k', '-', 'm', 'e', 'd', 'i', 'a', '.', 'p', 'l', '\0',
   /* "krmeni.cz", true */ 'k', 'r', 'm', 'e', 'n', 'i', '.', 'c', 'z', '\0',
@@ -7923,17 +7895,16 @@ static const char kSTSHostTable[] = {
   /* "lanyang.tk", true */ 'l', 'a', 'n', 'y', 'a', 'n', 'g', '.', 't', 'k', '\0',
   /* "lanzainc.xyz", true */ 'l', 'a', 'n', 'z', 'a', 'i', 'n', 'c', '.', 'x', 'y', 'z', '\0',
   /* "laos.dating", true */ 'l', 'a', 'o', 's', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "lapetition.be", true */ 'l', 'a', 'p', 'e', 't', 'i', 't', 'i', 'o', 'n', '.', 'b', 'e', '\0',
   /* "lapidge.net", true */ 'l', 'a', 'p', 'i', 'd', 'g', 'e', '.', 'n', 'e', 't', '\0',
   /* "laplanetebleue.com", true */ 'l', 'a', 'p', 'l', 'a', 'n', 'e', 't', 'e', 'b', 'l', 'e', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "lapolla.com", true */ 'l', 'a', 'p', 'o', 'l', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "laposte.net", true */ 'l', 'a', 'p', 'o', 's', 't', 'e', '.', 'n', 'e', 't', '\0',
-  /* "laquack.com", true */ 'l', 'a', 'q', 'u', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "largescaleforums.com", true */ 'l', 'a', 'r', 'g', 'e', 's', 'c', 'a', 'l', 'e', 'f', 'o', 'r', 'u', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "largeviewer.com", true */ 'l', 'a', 'r', 'g', 'e', 'v', 'i', 'e', 'w', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "larptreff.de", true */ 'l', 'a', 'r', 'p', 't', 'r', 'e', 'f', 'f', '.', 'd', 'e', '\0',
   /* "larrysalibra.com", true */ 'l', 'a', 'r', 'r', 'y', 's', 'a', 'l', 'i', 'b', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "lars-ewald.com", true */ 'l', 'a', 'r', 's', '-', 'e', 'w', 'a', 'l', 'd', '.', 'c', 'o', 'm', '\0',
   /* "lars-mense.de", true */ 'l', 'a', 'r', 's', '-', 'm', 'e', 'n', 's', 'e', '.', 'd', 'e', '\0',
   /* "larsklene.nl", true */ 'l', 'a', 'r', 's', 'k', 'l', 'e', 'n', 'e', '.', 'n', 'l', '\0',
   /* "larsmerke.de", true */ 'l', 'a', 'r', 's', 'm', 'e', 'r', 'k', 'e', '.', 'd', 'e', '\0',
@@ -8108,17 +8079,16 @@ static const char kSTSHostTable[] = {
   /* "lexico.pt", true */ 'l', 'e', 'x', 'i', 'c', 'o', '.', 'p', 't', '\0',
   /* "lexicography.online", true */ 'l', 'e', 'x', 'i', 'c', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "lexway.pk", true */ 'l', 'e', 'x', 'w', 'a', 'y', '.', 'p', 'k', '\0',
   /* "lfgss.com", true */ 'l', 'f', 'g', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "lg21.co", true */ 'l', 'g', '2', '1', '.', 'c', 'o', '\0',
   /* "lhalbert.xyz", true */ 'l', 'h', 'a', 'l', 'b', 'e', 'r', 't', '.', 'x', 'y', 'z', '\0',
   /* "lhasaapso.com.br", true */ 'l', 'h', 'a', 's', 'a', 'a', 'p', 's', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "li-ke.co.jp", true */ 'l', 'i', '-', 'k', 'e', '.', 'c', 'o', '.', 'j', 'p', '\0',
-  /* "liam-w.com", false */ 'l', 'i', 'a', 'm', '-', 'w', '.', 'c', 'o', 'm', '\0',
   /* "liangji.com.tw", false */ 'l', 'i', 'a', 'n', 'g', 'j', 'i', '.', 'c', 'o', 'm', '.', 't', 'w', '\0',
   /* "libanco.com", true */ 'l', 'i', 'b', 'a', 'n', 'c', 'o', '.', 'c', 'o', 'm', '\0',
   /* "libbitcoin.org", true */ 'l', 'i', 'b', 'b', 'i', 't', 'c', 'o', 'i', 'n', '.', 'o', 'r', 'g', '\0',
   /* "libble.eu", true */ 'l', 'i', 'b', 'b', 'l', 'e', '.', 'e', 'u', '\0',
   /* "libertas-tech.com", true */ 'l', 'i', 'b', 'e', 'r', 't', 'a', 's', '-', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "libfte.org", true */ 'l', 'i', 'b', 'f', 't', 'e', '.', 'o', 'r', 'g', '\0',
   /* "libnull.com", true */ 'l', 'i', 'b', 'n', 'u', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "libraryextension.com", true */ 'l', 'i', 'b', 'r', 'a', 'r', 'y', 'e', 'x', 't', 'e', 'n', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
@@ -8167,17 +8137,16 @@ static const char kSTSHostTable[] = {
   /* "limawi.io", true */ 'l', 'i', 'm', 'a', 'w', 'i', '.', 'i', 'o', '\0',
   /* "limitededitioncomputers.com", true */ 'l', 'i', 'm', 'i', 't', 'e', 'd', 'e', 'd', 'i', 't', 'i', 'o', 'n', 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "limitededitionsolutions.com", true */ 'l', 'i', 'm', 'i', 't', 'e', 'd', 'e', 'd', 'i', 't', 'i', 'o', 'n', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "limix.com", true */ 'l', 'i', 'm', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "limpens.net", true */ 'l', 'i', 'm', 'p', 'e', 'n', 's', '.', 'n', 'e', 't', '\0',
   /* "limpid.nl", true */ 'l', 'i', 'm', 'p', 'i', 'd', '.', 'n', 'l', '\0',
   /* "linden.me", true */ 'l', 'i', 'n', 'd', 'e', 'n', '.', 'm', 'e', '\0',
   /* "lindeskar.se", true */ 'l', 'i', 'n', 'd', 'e', 's', 'k', 'a', 'r', '.', 's', 'e', '\0',
-  /* "lingerie.com.br", true */ 'l', 'i', 'n', 'g', 'e', 'r', 'i', 'e', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "lingolia.com", true */ 'l', 'i', 'n', 'g', 'o', 'l', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "linguamilla.com", true */ 'l', 'i', 'n', 'g', 'u', 'a', 'm', 'i', 'l', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "linguatrip.com", false */ 'l', 'i', 'n', 'g', 'u', 'a', 't', 'r', 'i', 'p', '.', 'c', 'o', 'm', '\0',
   /* "lingvo-svoboda.ru", true */ 'l', 'i', 'n', 'g', 'v', 'o', '-', 's', 'v', 'o', 'b', 'o', 'd', 'a', '.', 'r', 'u', '\0',
   /* "link-sanitizer.com", true */ 'l', 'i', 'n', 'k', '-', 's', 'a', 'n', 'i', 't', 'i', 'z', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "link.ba", true */ 'l', 'i', 'n', 'k', '.', 'b', 'a', '\0',
   /* "linkages.org", true */ 'l', 'i', 'n', 'k', 'a', 'g', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "linkenheil.org", true */ 'l', 'i', 'n', 'k', 'e', 'n', 'h', 'e', 'i', 'l', '.', 'o', 'r', 'g', '\0',
@@ -8490,17 +8459,16 @@ static const char kSTSHostTable[] = {
   /* "m0wef.uk", true */ 'm', '0', 'w', 'e', 'f', '.', 'u', 'k', '\0',
   /* "m132.eu", true */ 'm', '1', '3', '2', '.', 'e', 'u', '\0',
   /* "m2os.com", true */ 'm', '2', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "ma2t.com", true */ 'm', 'a', '2', 't', '.', 'c', 'o', 'm', '\0',
   /* "maartenterpstra.xyz", true */ 'm', 'a', 'a', 'r', 't', 'e', 'n', 't', 'e', 'r', 'p', 's', 't', 'r', 'a', '.', 'x', 'y', 'z', '\0',
   /* "mac1.net", true */ 'm', 'a', 'c', '1', '.', 'n', 'e', 't', '\0',
   /* "macaque.io", false */ 'm', 'a', 'c', 'a', 'q', 'u', 'e', '.', 'i', 'o', '\0',
   /* "macbolo.com", true */ 'm', 'a', 'c', 'b', 'o', 'l', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "macchedil.com", false */ 'm', 'a', 'c', 'c', 'h', 'e', 'd', 'i', 'l', '.', 'c', 'o', 'm', '\0',
   /* "mach-politik.ch", true */ 'm', 'a', 'c', 'h', '-', 'p', 'o', 'l', 'i', 't', 'i', 'k', '.', 'c', 'h', '\0',
   /* "machbach.com", true */ 'm', 'a', 'c', 'h', 'b', 'a', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "machbach.net", true */ 'm', 'a', 'c', 'h', 'b', 'a', 'c', 'h', '.', 'n', 'e', 't', '\0',
   /* "machtweb.de", true */ 'm', 'a', 'c', 'h', 't', 'w', 'e', 'b', '.', 'd', 'e', '\0',
   /* "macinyasha.net", true */ 'm', 'a', 'c', 'i', 'n', 'y', 'a', 's', 'h', 'a', '.', 'n', 'e', 't', '\0',
   /* "macker.io", true */ 'm', 'a', 'c', 'k', 'e', 'r', '.', 'i', 'o', '\0',
   /* "mackey7.net", true */ 'm', 'a', 'c', 'k', 'e', 'y', '7', '.', 'n', 'e', 't', '\0',
   /* "maclemon.at", true */ 'm', 'a', 'c', 'l', 'e', 'm', 'o', 'n', '.', 'a', 't', '\0',
@@ -8524,16 +8492,17 @@ static const char kSTSHostTable[] = {
   /* "maestrano.com", true */ 'm', 'a', 'e', 's', 't', 'r', 'a', 'n', 'o', '.', 'c', 'o', 'm', '\0',
   /* "mafiaforum.de", true */ 'm', 'a', 'f', 'i', 'a', 'f', 'o', 'r', 'u', 'm', '.', 'd', 'e', '\0',
   /* "mafiasi.de", true */ 'm', 'a', 'f', 'i', 'a', 's', 'i', '.', 'd', 'e', '\0',
   /* "magdic.eu", true */ 'm', 'a', 'g', 'd', 'i', 'c', '.', 'e', 'u', '\0',
   /* "magenbrot.net", true */ 'm', 'a', 'g', 'e', 'n', 'b', 'r', 'o', 't', '.', 'n', 'e', 't', '\0',
   /* "magenda.sk", true */ 'm', 'a', 'g', 'e', 'n', 'd', 'a', '.', 's', 'k', '\0',
   /* "magia360.com", true */ 'm', 'a', 'g', 'i', 'a', '3', '6', '0', '.', 'c', 'o', 'm', '\0',
   /* "magicball.co", true */ 'm', 'a', 'g', 'i', 'c', 'b', 'a', 'l', 'l', '.', 'c', 'o', '\0',
+  /* "magicbroccoli.de", true */ 'm', 'a', 'g', 'i', 'c', 'b', 'r', 'o', 'c', 'c', 'o', 'l', 'i', '.', 'd', 'e', '\0',
   /* "magilio.com", true */ 'm', 'a', 'g', 'i', 'l', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "magnacumlaude.co", true */ 'm', 'a', 'g', 'n', 'a', 'c', 'u', 'm', 'l', 'a', 'u', 'd', 'e', '.', 'c', 'o', '\0',
   /* "magneticanvil.com", true */ 'm', 'a', 'g', 'n', 'e', 't', 'i', 'c', 'a', 'n', 'v', 'i', 'l', '.', 'c', 'o', 'm', '\0',
   /* "magnets.jp", true */ 'm', 'a', 'g', 'n', 'e', 't', 's', '.', 'j', 'p', '\0',
   /* "mahefa.co.uk", true */ 'm', 'a', 'h', 'e', 'f', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "mahfouzadedimeji.com", true */ 'm', 'a', 'h', 'f', 'o', 'u', 'z', 'a', 'd', 'e', 'd', 'i', 'm', 'e', 'j', 'i', '.', 'c', 'o', 'm', '\0',
   /* "mahrer.net", true */ 'm', 'a', 'h', 'r', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "maidofhonorcleaning.net", true */ 'm', 'a', 'i', 'd', 'o', 'f', 'h', 'o', 'n', 'o', 'r', 'c', 'l', 'e', 'a', 'n', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0',
@@ -8675,17 +8644,16 @@ static const char kSTSHostTable[] = {
   /* "marketingdesignu.cz", true */ 'm', 'a', 'r', 'k', 'e', 't', 'i', 'n', 'g', 'd', 'e', 's', 'i', 'g', 'n', 'u', '.', 'c', 'z', '\0',
   /* "marketio.co", true */ 'm', 'a', 'r', 'k', 'e', 't', 'i', 'o', '.', 'c', 'o', '\0',
   /* "marketnsight.com", true */ 'm', 'a', 'r', 'k', 'e', 't', 'n', 's', 'i', 'g', 'h', 't', '.', 'c', 'o', 'm', '\0',
   /* "markhaehnel.de", false */ 'm', 'a', 'r', 'k', 'h', 'a', 'e', 'h', 'n', 'e', 'l', '.', 'd', 'e', '\0',
   /* "markido.com", true */ 'm', 'a', 'r', 'k', 'i', 'd', 'o', '.', 'c', 'o', 'm', '\0',
   /* "markoh.co.uk", true */ 'm', 'a', 'r', 'k', 'o', 'h', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "markom.rs", true */ 'm', 'a', 'r', 'k', 'o', 'm', '.', 'r', 's', '\0',
   /* "markorszulak.com", true */ 'm', 'a', 'r', 'k', 'o', 'r', 's', 'z', 'u', 'l', 'a', 'k', '.', 'c', 'o', 'm', '\0',
-  /* "markprof.ru", true */ 'm', 'a', 'r', 'k', 'p', 'r', 'o', 'f', '.', 'r', 'u', '\0',
   /* "markri.nl", false */ 'm', 'a', 'r', 'k', 'r', 'i', '.', 'n', 'l', '\0',
   /* "marksill.com", true */ 'm', 'a', 'r', 'k', 's', 'i', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "marksouthall.com", true */ 'm', 'a', 'r', 'k', 's', 'o', 'u', 't', 'h', 'a', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "markt-heiligenstadt.de", true */ 'm', 'a', 'r', 'k', 't', '-', 'h', 'e', 'i', 'l', 'i', 'g', 'e', 'n', 's', 't', 'a', 'd', 't', '.', 'd', 'e', '\0',
   /* "marktcontact.com", true */ 'm', 'a', 'r', 'k', 't', 'c', 'o', 'n', 't', 'a', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "marktissink.nl", true */ 'm', 'a', 'r', 'k', 't', 'i', 's', 's', 'i', 'n', 'k', '.', 'n', 'l', '\0',
   /* "markusehrlicher.de", true */ 'm', 'a', 'r', 'k', 'u', 's', 'e', 'h', 'r', 'l', 'i', 'c', 'h', 'e', 'r', '.', 'd', 'e', '\0',
   /* "markuskeppeler.no-ip.biz", true */ 'm', 'a', 'r', 'k', 'u', 's', 'k', 'e', 'p', 'p', 'e', 'l', 'e', 'r', '.', 'n', 'o', '-', 'i', 'p', '.', 'b', 'i', 'z', '\0',
@@ -8746,17 +8714,16 @@ static const char kSTSHostTable[] = {
   /* "matrict.com", true */ 'm', 'a', 't', 'r', 'i', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "matt.tf", true */ 'm', 'a', 't', 't', '.', 't', 'f', '\0',
   /* "mattandreko.com", true */ 'm', 'a', 't', 't', 'a', 'n', 'd', 'r', 'e', 'k', 'o', '.', 'c', 'o', 'm', '\0',
   /* "mattandyana.com", true */ 'm', 'a', 't', 't', 'a', 'n', 'd', 'y', 'a', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "matteomarescotti.it", true */ 'm', 'a', 't', 't', 'e', 'o', 'm', 'a', 'r', 'e', 's', 'c', 'o', 't', 't', 'i', '.', 'i', 't', '\0',
   /* "matterconcern.com", true */ 'm', 'a', 't', 't', 'e', 'r', 'c', 'o', 'n', 'c', 'e', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "matthecat.com", true */ 'm', 'a', 't', 't', 'h', 'e', 'c', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "matthewgrill.com", false */ 'm', 'a', 't', 't', 'h', 'e', 'w', 'g', 'r', 'i', 'l', 'l', '.', 'c', 'o', 'm', '\0',
-  /* "matthewkenny.co.uk", true */ 'm', 'a', 't', 't', 'h', 'e', 'w', 'k', 'e', 'n', 'n', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "matthewohare.com", true */ 'm', 'a', 't', 't', 'h', 'e', 'w', 'o', 'h', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "matthi.coffee", true */ 'm', 'a', 't', 't', 'h', 'i', '.', 'c', 'o', 'f', 'f', 'e', 'e', '\0',
   /* "matthias-muenzner.de", true */ 'm', 'a', 't', 't', 'h', 'i', 'a', 's', '-', 'm', 'u', 'e', 'n', 'z', 'n', 'e', 'r', '.', 'd', 'e', '\0',
   /* "matthiasadler.info", true */ 'm', 'a', 't', 't', 'h', 'i', 'a', 's', 'a', 'd', 'l', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0',
   /* "matthiasschwab.de", true */ 'm', 'a', 't', 't', 'h', 'i', 'a', 's', 's', 'c', 'h', 'w', 'a', 'b', '.', 'd', 'e', '\0',
   /* "mattia98.org", true */ 'm', 'a', 't', 't', 'i', 'a', '9', '8', '.', 'o', 'r', 'g', '\0',
   /* "mattli.us", true */ 'm', 'a', 't', 't', 'l', 'i', '.', 'u', 's', '\0',
   /* "mattmccutchen.net", true */ 'm', 'a', 't', 't', 'm', 'c', 'c', 'u', 't', 'c', 'h', 'e', 'n', '.', 'n', 'e', 't', '\0',
@@ -8889,16 +8856,17 @@ static const char kSTSHostTable[] = {
   /* "meetfinch.com", true */ 'm', 'e', 'e', 't', 'f', 'i', 'n', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "meetingmanage.nl", true */ 'm', 'e', 'e', 't', 'i', 'n', 'g', 'm', 'a', 'n', 'a', 'g', 'e', '.', 'n', 'l', '\0',
   /* "meetingmanager.ovh", true */ 'm', 'e', 'e', 't', 'i', 'n', 'g', 'm', 'a', 'n', 'a', 'g', 'e', 'r', '.', 'o', 'v', 'h', '\0',
   /* "meetmibaby.co.uk", true */ 'm', 'e', 'e', 't', 'm', 'i', 'b', 'a', 'b', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "mega-feeling.de", true */ 'm', 'e', 'g', 'a', '-', 'f', 'e', 'e', 'l', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "mega.co.nz", true */ 'm', 'e', 'g', 'a', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "mega.nz", true */ 'm', 'e', 'g', 'a', '.', 'n', 'z', '\0',
   /* "mega.online", true */ 'm', 'e', 'g', 'a', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
+  /* "megablogging.org", true */ 'm', 'e', 'g', 'a', 'b', 'l', 'o', 'g', 'g', 'i', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "megadrol.com", true */ 'm', 'e', 'g', 'a', 'd', 'r', 'o', 'l', '.', 'c', 'o', 'm', '\0',
   /* "megaflowers.ru", true */ 'm', 'e', 'g', 'a', 'f', 'l', 'o', 'w', 'e', 'r', 's', '.', 'r', 'u', '\0',
   /* "megamisja.pl", true */ 'm', 'e', 'g', 'a', 'm', 'i', 's', 'j', 'a', '.', 'p', 'l', '\0',
   /* "meganreel.com", true */ 'm', 'e', 'g', 'a', 'n', 'r', 'e', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "megaplan.cz", true */ 'm', 'e', 'g', 'a', 'p', 'l', 'a', 'n', '.', 'c', 'z', '\0',
   /* "megaplan.ru", true */ 'm', 'e', 'g', 'a', 'p', 'l', 'a', 'n', '.', 'r', 'u', '\0',
   /* "megaplonk.com", true */ 'm', 'e', 'g', 'a', 'p', 'l', 'o', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "megasslstore.com", true */ 'm', 'e', 'g', 'a', 's', 's', 'l', 's', 't', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
@@ -9288,16 +9256,17 @@ static const char kSTSHostTable[] = {
   /* "montarfotoaki.com", true */ 'm', 'o', 'n', 't', 'a', 'r', 'f', 'o', 't', 'o', 'a', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "montazer.net", true */ 'm', 'o', 'n', 't', 'a', 'z', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "montonicms.com", true */ 'm', 'o', 'n', 't', 'o', 'n', 'i', 'c', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "moo.la", true */ 'm', 'o', 'o', '.', 'l', 'a', '\0',
   /* "moobo.co.jp", true */ 'm', 'o', 'o', 'b', 'o', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "moobo.xyz", true */ 'm', 'o', 'o', 'b', 'o', '.', 'x', 'y', 'z', '\0',
   /* "moodfoods.com", true */ 'm', 'o', 'o', 'd', 'f', 'o', 'o', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "moonagic.com", true */ 'm', 'o', 'o', 'n', 'a', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0',
+  /* "moonless.net", true */ 'm', 'o', 'o', 'n', 'l', 'e', 's', 's', '.', 'n', 'e', 't', '\0',
   /* "moonloupe.com", true */ 'm', 'o', 'o', 'n', 'l', 'o', 'u', 'p', 'e', '.', 'c', 'o', 'm', '\0',
   /* "moonraptor.co.uk", true */ 'm', 'o', 'o', 'n', 'r', 'a', 'p', 't', 'o', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "moonraptor.com", true */ 'm', 'o', 'o', 'n', 'r', 'a', 'p', 't', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "moonshyne.org", true */ 'm', 'o', 'o', 'n', 's', 'h', 'y', 'n', 'e', '.', 'o', 'r', 'g', '\0',
   /* "moonvpn.org", true */ 'm', 'o', 'o', 'n', 'v', 'p', 'n', '.', 'o', 'r', 'g', '\0',
   /* "mooselook.de", true */ 'm', 'o', 'o', 's', 'e', 'l', 'o', 'o', 'k', '.', 'd', 'e', '\0',
   /* "moovablestorage.com", true */ 'm', 'o', 'o', 'v', 'a', 'b', 'l', 'e', 's', 't', 'o', 'r', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "moparcraft.com", true */ 'm', 'o', 'p', 'a', 'r', 'c', 'r', 'a', 'f', 't', '.', 'c', 'o', 'm', '\0',
@@ -9333,32 +9302,30 @@ static const char kSTSHostTable[] = {
   /* "motorbiketourhanoi.com", true */ 'm', 'o', 't', 'o', 'r', 'b', 'i', 'k', 'e', 't', 'o', 'u', 'r', 'h', 'a', 'n', 'o', 'i', '.', 'c', 'o', 'm', '\0',
   /* "moulinaparoles.ca", true */ 'm', 'o', 'u', 'l', 'i', 'n', 'a', 'p', 'a', 'r', 'o', 'l', 'e', 's', '.', 'c', 'a', '\0',
   /* "mountainactivitysection.org.uk", true */ 'm', 'o', 'u', 'n', 't', 'a', 'i', 'n', 'a', 'c', 't', 'i', 'v', 'i', 't', 'y', 's', 'e', 'c', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "mountainadventureseminars.com", true */ 'm', 'o', 'u', 'n', 't', 'a', 'i', 'n', 'a', 'd', 'v', 'e', 'n', 't', 'u', 'r', 'e', 's', 'e', 'm', 'i', 'n', 'a', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "mountainroseherbs.com", true */ 'm', 'o', 'u', 'n', 't', 'a', 'i', 'n', 'r', 'o', 's', 'e', 'h', 'e', 'r', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "movabletype.net", true */ 'm', 'o', 'v', 'a', 'b', 'l', 'e', 't', 'y', 'p', 'e', '.', 'n', 'e', 't', '\0',
   /* "moveek.com", true */ 'm', 'o', 'v', 'e', 'e', 'k', '.', 'c', 'o', 'm', '\0',
   /* "movember.com", false */ 'm', 'o', 'v', 'e', 'm', 'b', 'e', 'r', '.', 'c', 'o', 'm', '\0',
-  /* "movepin.com", true */ 'm', 'o', 'v', 'e', 'p', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "movie4kto.site", true */ 'm', 'o', 'v', 'i', 'e', '4', 'k', 't', 'o', '.', 's', 'i', 't', 'e', '\0',
   /* "moviedollars.com", true */ 'm', 'o', 'v', 'i', 'e', 'd', 'o', 'l', 'l', 'a', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "movinglogistics.nl", false */ 'm', 'o', 'v', 'i', 'n', 'g', 'l', 'o', 'g', 'i', 's', 't', 'i', 'c', 's', '.', 'n', 'l', '\0',
   /* "movlib.org", true */ 'm', 'o', 'v', 'l', 'i', 'b', '.', 'o', 'r', 'g', '\0',
   /* "moylen.eu", true */ 'm', 'o', 'y', 'l', 'e', 'n', '.', 'e', 'u', '\0',
   /* "moyoo.net", true */ 'm', 'o', 'y', 'o', 'o', '.', 'n', 'e', 't', '\0',
   /* "mozart-game.cz", true */ 'm', 'o', 'z', 'a', 'r', 't', '-', 'g', 'a', 'm', 'e', '.', 'c', 'z', '\0',
   /* "mozartgame.cz", true */ 'm', 'o', 'z', 'a', 'r', 't', 'g', 'a', 'm', 'e', '.', 'c', 'z', '\0',
   /* "mozoa.net", true */ 'm', 'o', 'z', 'o', 'a', '.', 'n', 'e', 't', '\0',
   /* "mozzilla.cz", true */ 'm', 'o', 'z', 'z', 'i', 'l', 'l', 'a', '.', 'c', 'z', '\0',
   /* "mp3gratuiti.com", true */ 'm', 'p', '3', 'g', 'r', 'a', 't', 'u', 'i', 't', 'i', '.', 'c', 'o', 'm', '\0',
   /* "mpc-hc.org", true */ 'm', 'p', 'c', '-', 'h', 'c', '.', 'o', 'r', 'g', '\0',
   /* "mpcompliance.com", true */ 'm', 'p', 'c', 'o', 'm', 'p', 'l', 'i', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mpetroff.net", true */ 'm', 'p', 'e', 't', 'r', 'o', 'f', 'f', '.', 'n', 'e', 't', '\0',
-  /* "mpintaamalabanna.it", true */ 'm', 'p', 'i', 'n', 't', 'a', 'a', 'm', 'a', 'l', 'a', 'b', 'a', 'n', 'n', 'a', '.', 'i', 't', '\0',
   /* "mplant.io", true */ 'm', 'p', 'l', 'a', 'n', 't', '.', 'i', 'o', '\0',
   /* "mplicka.cz", true */ 'm', 'p', 'l', 'i', 'c', 'k', 'a', '.', 'c', 'z', '\0',
   /* "mplusm.eu", true */ 'm', 'p', 'l', 'u', 's', 'm', '.', 'e', 'u', '\0',
   /* "mpreserver.com", false */ 'm', 'p', 'r', 'e', 's', 'e', 'r', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "mpserver12.org", true */ 'm', 'p', 's', 'e', 'r', 'v', 'e', 'r', '1', '2', '.', 'o', 'r', 'g', '\0',
   /* "mpsgarage.com.au", true */ 'm', 'p', 's', 'g', 'a', 'r', 'a', 'g', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "mr-hosting.com", true */ 'm', 'r', '-', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "mrdayman.com", false */ 'm', 'r', 'd', 'a', 'y', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0',
@@ -9761,17 +9728,16 @@ static const char kSTSHostTable[] = {
   /* "netwerkmanager.nl", true */ 'n', 'e', 't', 'w', 'e', 'r', 'k', 'm', 'a', 'n', 'a', 'g', 'e', 'r', '.', 'n', 'l', '\0',
   /* "network-notes.com", true */ 'n', 'e', 't', 'w', 'o', 'r', 'k', '-', 'n', 'o', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "network23.nl", true */ 'n', 'e', 't', 'w', 'o', 'r', 'k', '2', '3', '.', 'n', 'l', '\0',
   /* "networkalarmcorp.com", true */ 'n', 'e', 't', 'w', 'o', 'r', 'k', 'a', 'l', 'a', 'r', 'm', 'c', 'o', 'r', 'p', '.', 'c', 'o', 'm', '\0',
   /* "networking4all.com", false */ 'n', 'e', 't', 'w', 'o', 'r', 'k', 'i', 'n', 'g', '4', 'a', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "networkingnexus.net", true */ 'n', 'e', 't', 'w', 'o', 'r', 'k', 'i', 'n', 'g', 'n', 'e', 'x', 'u', 's', '.', 'n', 'e', 't', '\0',
   /* "networkingphoenix.com", true */ 'n', 'e', 't', 'w', 'o', 'r', 'k', 'i', 'n', 'g', 'p', 'h', 'o', 'e', 'n', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "networth.at", true */ 'n', 'e', 't', 'w', 'o', 'r', 't', 'h', '.', 'a', 't', '\0',
-  /* "networx-online.de", true */ 'n', 'e', 't', 'w', 'o', 'r', 'x', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0',
   /* "netzfrauen.org", true */ 'n', 'e', 't', 'z', 'f', 'r', 'a', 'u', 'e', 'n', '.', 'o', 'r', 'g', '\0',
   /* "netzvieh.de", true */ 'n', 'e', 't', 'z', 'v', 'i', 'e', 'h', '.', 'd', 'e', '\0',
   /* "netzwerkwerk.de", true */ 'n', 'e', 't', 'z', 'w', 'e', 'r', 'k', 'w', 'e', 'r', 'k', '.', 'd', 'e', '\0',
   /* "netzzwerg4u.de", true */ 'n', 'e', 't', 'z', 'z', 'w', 'e', 'r', 'g', '4', 'u', '.', 'd', 'e', '\0',
   /* "neuflizeobc.net", true */ 'n', 'e', 'u', 'f', 'l', 'i', 'z', 'e', 'o', 'b', 'c', '.', 'n', 'e', 't', '\0',
   /* "neuhaus-city.de", true */ 'n', 'e', 'u', 'h', 'a', 'u', 's', '-', 'c', 'i', 't', 'y', '.', 'd', 'e', '\0',
   /* "neurobiology.com", true */ 'n', 'e', 'u', 'r', 'o', 'b', 'i', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'o', 'm', '\0',
   /* "neuroethics.com", true */ 'n', 'e', 'u', 'r', 'o', 'e', 't', 'h', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
@@ -9877,17 +9843,16 @@ static const char kSTSHostTable[] = {
   /* "nightsnack.cf", true */ 'n', 'i', 'g', 'h', 't', 's', 'n', 'a', 'c', 'k', '.', 'c', 'f', '\0',
   /* "nijiero-ch.com", false */ 'n', 'i', 'j', 'i', 'e', 'r', 'o', '-', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "nijm.nl", true */ 'n', 'i', 'j', 'm', '.', 'n', 'l', '\0',
   /* "nikandcara.com", true */ 'n', 'i', 'k', 'a', 'n', 'd', 'c', 'a', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "nikao-tech.com", true */ 'n', 'i', 'k', 'a', 'o', '-', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "nikcub.com", true */ 'n', 'i', 'k', 'c', 'u', 'b', '.', 'c', 'o', 'm', '\0',
   /* "nikklassen.ca", true */ 'n', 'i', 'k', 'k', 'l', 'a', 's', 's', 'e', 'n', '.', 'c', 'a', '\0',
   /* "nikksno.io", true */ 'n', 'i', 'k', 'k', 's', 'n', 'o', '.', 'i', 'o', '\0',
-  /* "niklas.pw", true */ 'n', 'i', 'k', 'l', 'a', 's', '.', 'p', 'w', '\0',
   /* "niklaslindblad.se", true */ 'n', 'i', 'k', 'l', 'a', 's', 'l', 'i', 'n', 'd', 'b', 'l', 'a', 'd', '.', 's', 'e', '\0',
   /* "nikobradshaw.com", true */ 'n', 'i', 'k', 'o', 'b', 'r', 'a', 'd', 's', 'h', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "nikolasbradshaw.com", true */ 'n', 'i', 'k', 'o', 'l', 'a', 's', 'b', 'r', 'a', 'd', 's', 'h', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "nikolasgrottendieck.com", true */ 'n', 'i', 'k', 'o', 'l', 'a', 's', 'g', 'r', 'o', 't', 't', 'e', 'n', 'd', 'i', 'e', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "nil.gs", true */ 'n', 'i', 'l', '.', 'g', 's', '\0',
   /* "niloxy.com", true */ 'n', 'i', 'l', 'o', 'x', 'y', '.', 'c', 'o', 'm', '\0',
   /* "nilrem.org", true */ 'n', 'i', 'l', 'r', 'e', 'm', '.', 'o', 'r', 'g', '\0',
   /* "nimeshjm.com", true */ 'n', 'i', 'm', 'e', 's', 'h', 'j', 'm', '.', 'c', 'o', 'm', '\0',
@@ -9918,17 +9883,16 @@ static const char kSTSHostTable[] = {
   /* "nmsnj.com", true */ 'n', 'm', 's', 'n', 'j', '.', 'c', 'o', 'm', '\0',
   /* "nn.cz", true */ 'n', 'n', '.', 'c', 'z', '\0',
   /* "nnote.net", true */ 'n', 'n', 'o', 't', 'e', '.', 'n', 'e', 't', '\0',
   /* "nnqc.nl", true */ 'n', 'n', 'q', 'c', '.', 'n', 'l', '\0',
   /* "no-ip.cz", true */ 'n', 'o', '-', 'i', 'p', '.', 'c', 'z', '\0',
   /* "no.search.yahoo.com", false */ 'n', 'o', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "nobly.de", true */ 'n', 'o', 'b', 'l', 'y', '.', 'd', 'e', '\0',
   /* "nocit.dk", true */ 'n', 'o', 'c', 'i', 't', '.', 'd', 'k', '\0',
-  /* "noclegi-online.pl", true */ 'n', 'o', 'c', 'l', 'e', 'g', 'i', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'p', 'l', '\0',
   /* "nocs.cn", true */ 'n', 'o', 'c', 's', '.', 'c', 'n', '\0',
   /* "nodari.com.ar", true */ 'n', 'o', 'd', 'a', 'r', 'i', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
   /* "nodecompat.com", true */ 'n', 'o', 'd', 'e', 'c', 'o', 'm', 'p', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "nodelia.com", true */ 'n', 'o', 'd', 'e', 'l', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "nodespin.com", true */ 'n', 'o', 'd', 'e', 's', 'p', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "noedidacticos.com", true */ 'n', 'o', 'e', 'd', 'i', 'd', 'a', 'c', 't', 'i', 'c', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "noemax.com", true */ 'n', 'o', 'e', 'm', 'a', 'x', '.', 'c', 'o', 'm', '\0',
   /* "noez.de", true */ 'n', 'o', 'e', 'z', '.', 'd', 'e', '\0',
@@ -10039,17 +10003,16 @@ static const char kSTSHostTable[] = {
   /* "null-life.com", true */ 'n', 'u', 'l', 'l', '-', 'l', 'i', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "null-pointer.eu", true */ 'n', 'u', 'l', 'l', '-', 'p', 'o', 'i', 'n', 't', 'e', 'r', '.', 'e', 'u', '\0',
   /* "nullpro.com", true */ 'n', 'u', 'l', 'l', 'p', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "nullroute.com", true */ 'n', 'u', 'l', 'l', 'r', 'o', 'u', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "numatic.co.uk", true */ 'n', 'u', 'm', 'a', 't', 'i', 'c', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "numberoneshoes.co.nz", true */ 'n', 'u', 'm', 'b', 'e', 'r', 'o', 'n', 'e', 's', 'h', 'o', 'e', 's', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "numberzero.org", true */ 'n', 'u', 'm', 'b', 'e', 'r', 'z', 'e', 'r', 'o', '.', 'o', 'r', 'g', '\0',
   /* "numero-aleatorio.com", true */ 'n', 'u', 'm', 'e', 'r', 'o', '-', 'a', 'l', 'e', 'a', 't', 'o', 'r', 'i', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "numista.com", true */ 'n', 'u', 'm', 'i', 's', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "numm.fr", true */ 'n', 'u', 'm', 'm', '.', 'f', 'r', '\0',
   /* "nunomoura.com", true */ 'n', 'u', 'n', 'o', 'm', 'o', 'u', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "nup.pw", true */ 'n', 'u', 'p', '.', 'p', 'w', '\0',
   /* "nursejj.com", true */ 'n', 'u', 'r', 's', 'e', 'j', 'j', '.', 'c', 'o', 'm', '\0',
   /* "nurses.dating", true */ 'n', 'u', 'r', 's', 'e', 's', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "nusatrip-api.com", true */ 'n', 'u', 's', 'a', 't', 'r', 'i', 'p', '-', 'a', 'p', 'i', '.', 'c', 'o', 'm', '\0',
   /* "nutikell.com", true */ 'n', 'u', 't', 'i', 'k', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "nutricuerpo.com", true */ 'n', 'u', 't', 'r', 'i', 'c', 'u', 'e', 'r', 'p', 'o', '.', 'c', 'o', 'm', '\0',
@@ -10069,17 +10032,16 @@ static const char kSTSHostTable[] = {
   /* "nyffo.com", false */ 'n', 'y', 'f', 'f', 'o', '.', 'c', 'o', 'm', '\0',
   /* "nyiad.edu", true */ 'n', 'y', 'i', 'a', 'd', '.', 'e', 'd', 'u', '\0',
   /* "nyip.co.uk", true */ 'n', 'y', 'i', 'p', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "nyip.edu", true */ 'n', 'y', 'i', 'p', '.', 'e', 'd', 'u', '\0',
   /* "nymphetomania.net", true */ 'n', 'y', 'm', 'p', 'h', 'e', 't', 'o', 'm', 'a', 'n', 'i', 'a', '.', 'n', 'e', 't', '\0',
   /* "nynex.net", true */ 'n', 'y', 'n', 'e', 'x', '.', 'n', 'e', 't', '\0',
   /* "nyphox.net", true */ 'n', 'y', 'p', 'h', 'o', 'x', '.', 'n', 'e', 't', '\0',
   /* "nyronet.de", false */ 'n', 'y', 'r', 'o', 'n', 'e', 't', '.', 'd', 'e', '\0',
-  /* "nys-hk.com", true */ 'n', 'y', 's', '-', 'h', 'k', '.', 'c', 'o', 'm', '\0',
   /* "nysifclaimcentral.com", true */ 'n', 'y', 's', 'i', 'f', 'c', 'l', 'a', 'i', 'm', 'c', 'e', 'n', 't', 'r', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "nyxi.eu", true */ 'n', 'y', 'x', 'i', '.', 'e', 'u', '\0',
   /* "nyyu.tk", true */ 'n', 'y', 'y', 'u', '.', 't', 'k', '\0',
   /* "nzbs.io", false */ 'n', 'z', 'b', 's', '.', 'i', 'o', '\0',
   /* "nzmk.cz", true */ 'n', 'z', 'm', 'k', '.', 'c', 'z', '\0',
   /* "o-rickroll-y.pw", true */ 'o', '-', 'r', 'i', 'c', 'k', 'r', 'o', 'l', 'l', '-', 'y', '.', 'p', 'w', '\0',
   /* "o2careers.co.uk", true */ 'o', '2', 'c', 'a', 'r', 'e', 'e', 'r', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "o3wallet.com", true */ 'o', '3', 'w', 'a', 'l', 'l', 'e', 't', '.', 'c', 'o', 'm', '\0',
@@ -10787,17 +10749,16 @@ static const char kSTSHostTable[] = {
   /* "piliszek.net", true */ 'p', 'i', 'l', 'i', 's', 'z', 'e', 'k', '.', 'n', 'e', 't', '\0',
   /* "pimhaarsma.nl", true */ 'p', 'i', 'm', 'h', 'a', 'a', 'r', 's', 'm', 'a', '.', 'n', 'l', '\0',
   /* "pimhaarsmamedia.nl", true */ 'p', 'i', 'm', 'h', 'a', 'a', 'r', 's', 'm', 'a', 'm', 'e', 'd', 'i', 'a', '.', 'n', 'l', '\0',
   /* "pimpmymac.ru", true */ 'p', 'i', 'm', 'p', 'm', 'y', 'm', 'a', 'c', '.', 'r', 'u', '\0',
   /* "pims.global", true */ 'p', 'i', 'm', 's', '.', 'g', 'l', 'o', 'b', 'a', 'l', '\0',
   /* "pimspage.nl", true */ 'p', 'i', 'm', 's', 'p', 'a', 'g', 'e', '.', 'n', 'l', '\0',
   /* "pin.net.au", true */ 'p', 'i', 'n', '.', 'n', 'e', 't', '.', 'a', 'u', '\0',
   /* "pincha.com.tw", true */ 'p', 'i', 'n', 'c', 'h', 'a', '.', 'c', 'o', 'm', '.', 't', 'w', '\0',
-  /* "pincodeit.com", true */ 'p', 'i', 'n', 'c', 'o', 'd', 'e', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "pindanutjes.be", false */ 'p', 'i', 'n', 'd', 'a', 'n', 'u', 't', 'j', 'e', 's', '.', 'b', 'e', '\0',
   /* "pinesandneedles.com", true */ 'p', 'i', 'n', 'e', 's', 'a', 'n', 'd', 'n', 'e', 'e', 'd', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "pinkcasino.co.uk", true */ 'p', 'i', 'n', 'k', 'c', 'a', 's', 'i', 'n', 'o', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "pinkfis.ch", true */ 'p', 'i', 'n', 'k', 'f', 'i', 's', '.', 'c', 'h', '\0',
   /* "pinkhq.com", true */ 'p', 'i', 'n', 'k', 'h', 'q', '.', 'c', 'o', 'm', '\0',
   /* "pinkinked.com", true */ 'p', 'i', 'n', 'k', 'i', 'n', 'k', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "pinkladyapples.co.uk", true */ 'p', 'i', 'n', 'k', 'l', 'a', 'd', 'y', 'a', 'p', 'p', 'l', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "pinklecfest.org", true */ 'p', 'i', 'n', 'k', 'l', 'e', 'c', 'f', 'e', 's', 't', '.', 'o', 'r', 'g', '\0',
@@ -10825,16 +10786,17 @@ static const char kSTSHostTable[] = {
   /* "pirman.es", true */ 'p', 'i', 'r', 'm', 'a', 'n', '.', 'e', 's', '\0',
   /* "pirxpilot.me", true */ 'p', 'i', 'r', 'x', 'p', 'i', 'l', 'o', 't', '.', 'm', 'e', '\0',
   /* "pissblau.com", true */ 'p', 'i', 's', 's', 'b', 'l', 'a', 'u', '.', 'c', 'o', 'm', '\0',
   /* "pisupp.ly", true */ 'p', 'i', 's', 'u', 'p', 'p', '.', 'l', 'y', '\0',
   /* "pitchpinecapital.com", true */ 'p', 'i', 't', 'c', 'h', 'p', 'i', 'n', 'e', 'c', 'a', 'p', 'i', 't', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "pitchup.com", true */ 'p', 'i', 't', 'c', 'h', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "pitfire.io", false */ 'p', 'i', 't', 'f', 'i', 'r', 'e', '.', 'i', 'o', '\0',
   /* "pitonarms.com", true */ 'p', 'i', 't', 'o', 'n', 'a', 'r', 'm', 's', '.', 'c', 'o', 'm', '\0',
+  /* "pittaya.com", true */ 'p', 'i', 't', 't', 'a', 'y', 'a', '.', 'c', 'o', 'm', '\0',
   /* "piwko.co", true */ 'p', 'i', 'w', 'k', 'o', '.', 'c', 'o', '\0',
   /* "pixdigital.net", true */ 'p', 'i', 'x', 'd', 'i', 'g', 'i', 't', 'a', 'l', '.', 'n', 'e', 't', '\0',
   /* "pixel.facebook.com", false */ 'p', 'i', 'x', 'e', 'l', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "pixel.google.com", true */ 'p', 'i', 'x', 'e', 'l', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "pixelbash.de", true */ 'p', 'i', 'x', 'e', 'l', 'b', 'a', 's', 'h', '.', 'd', 'e', '\0',
   /* "pixelcubed.com", true */ 'p', 'i', 'x', 'e', 'l', 'c', 'u', 'b', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "pixelminers.net", true */ 'p', 'i', 'x', 'e', 'l', 'm', 'i', 'n', 'e', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "pixipics.com", false */ 'p', 'i', 'x', 'i', 'p', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
@@ -11091,31 +11053,29 @@ static const char kSTSHostTable[] = {
   /* "producto8.com", true */ 'p', 'r', 'o', 'd', 'u', 'c', 't', 'o', '8', '.', 'c', 'o', 'm', '\0',
   /* "proefteksten.nl", true */ 'p', 'r', 'o', 'e', 'f', 't', 'e', 'k', 's', 't', 'e', 'n', '.', 'n', 'l', '\0',
   /* "profection.biz", true */ 'p', 'r', 'o', 'f', 'e', 'c', 't', 'i', 'o', 'n', '.', 'b', 'i', 'z', '\0',
   /* "professors.ee", true */ 'p', 'r', 'o', 'f', 'e', 's', 's', 'o', 'r', 's', '.', 'e', 'e', '\0',
   /* "profidea.cz", true */ 'p', 'r', 'o', 'f', 'i', 'd', 'e', 'a', '.', 'c', 'z', '\0',
   /* "profiles.google.com", true */ 'p', 'r', 'o', 'f', 'i', 'l', 'e', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "profitopia.de", true */ 'p', 'r', 'o', 'f', 'i', 't', 'o', 'p', 'i', 'a', '.', 'd', 'e', '\0',
   /* "profivps.com", true */ 'p', 'r', 'o', 'f', 'i', 'v', 'p', 's', '.', 'c', 'o', 'm', '\0',
-  /* "profpay.com", true */ 'p', 'r', 'o', 'f', 'p', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "profusion.io", true */ 'p', 'r', 'o', 'f', 'u', 's', 'i', 'o', 'n', '.', 'i', 'o', '\0',
   /* "progarm.org", true */ 'p', 'r', 'o', 'g', 'a', 'r', 'm', '.', 'o', 'r', 'g', '\0',
   /* "proggersession.de", true */ 'p', 'r', 'o', 'g', 'g', 'e', 'r', 's', 'e', 's', 's', 'i', 'o', 'n', '.', 'd', 'e', '\0',
   /* "progreso.pl", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 'o', '.', 'p', 'l', '\0',
   /* "progress-linux.org", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 's', '-', 'l', 'i', 'n', 'u', 'x', '.', 'o', 'r', 'g', '\0',
   /* "progressiveplanning.com", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 's', 'i', 'v', 'e', 'p', 'l', 'a', 'n', 'n', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "proitconsulting.com.au", true */ 'p', 'r', 'o', 'i', 't', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "proj.org.cn", true */ 'p', 'r', 'o', 'j', '.', 'o', 'r', 'g', '.', 'c', 'n', '\0',
   /* "project-sparks.eu", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', '-', 's', 'p', 'a', 'r', 'k', 's', '.', 'e', 'u', '\0',
   /* "projectarmy.net", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'a', 'r', 'm', 'y', '.', 'n', 'e', 't', '\0',
   /* "projectascension.io", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'a', 's', 'c', 'e', 'n', 's', 'i', 'o', 'n', '.', 'i', 'o', '\0',
   /* "projectbenson.com", false */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'b', 'e', 'n', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "projectblackbook.us", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'b', 'l', 'a', 'c', 'k', 'b', 'o', 'o', 'k', '.', 'u', 's', '\0',
-  /* "projectmercury.space", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'm', 'e', 'r', 'c', 'u', 'r', 'y', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "projektik.cz", true */ 'p', 'r', 'o', 'j', 'e', 'k', 't', 'i', 'k', '.', 'c', 'z', '\0',
   /* "projektzentrisch.de", true */ 'p', 'r', 'o', 'j', 'e', 'k', 't', 'z', 'e', 'n', 't', 'r', 'i', 's', 'c', 'h', '.', 'd', 'e', '\0',
   /* "prok.pw", true */ 'p', 'r', 'o', 'k', '.', 'p', 'w', '\0',
   /* "prolan.pw", true */ 'p', 'r', 'o', 'l', 'a', 'n', '.', 'p', 'w', '\0',
   /* "prometheanfire.net", true */ 'p', 'r', 'o', 'm', 'e', 't', 'h', 'e', 'a', 'n', 'f', 'i', 'r', 'e', '.', 'n', 'e', 't', '\0',
   /* "prometheanfire.org", true */ 'p', 'r', 'o', 'm', 'e', 't', 'h', 'e', 'a', 'n', 'f', 'i', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "promhadan.com", true */ 'p', 'r', 'o', 'm', 'h', 'a', 'd', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "promisesaplus.com", true */ 'p', 'r', 'o', 'm', 'i', 's', 'e', 's', 'a', 'p', 'l', 'u', 's', '.', 'c', 'o', 'm', '\0',
@@ -11143,34 +11103,32 @@ static const char kSTSHostTable[] = {
   /* "proust.ch", false */ 'p', 'r', 'o', 'u', 's', 't', '.', 'c', 'h', '\0',
   /* "proust.media", false */ 'p', 'r', 'o', 'u', 's', 't', '.', 'm', 'e', 'd', 'i', 'a', '\0',
   /* "proustmedia.de", false */ 'p', 'r', 'o', 'u', 's', 't', 'm', 'e', 'd', 'i', 'a', '.', 'd', 'e', '\0',
   /* "proweser.de", true */ 'p', 'r', 'o', 'w', 'e', 's', 'e', 'r', '.', 'd', 'e', '\0',
   /* "prowise.com", true */ 'p', 'r', 'o', 'w', 'i', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "proxybay.co", true */ 'p', 'r', 'o', 'x', 'y', 'b', 'a', 'y', '.', 'c', 'o', '\0',
   /* "proxybay.la", true */ 'p', 'r', 'o', 'x', 'y', 'b', 'a', 'y', '.', 'l', 'a', '\0',
   /* "proxybay.one", true */ 'p', 'r', 'o', 'x', 'y', 'b', 'a', 'y', '.', 'o', 'n', 'e', '\0',
-  /* "proxybay.top", true */ 'p', 'r', 'o', 'x', 'y', 'b', 'a', 'y', '.', 't', 'o', 'p', '\0',
   /* "proxybay.tv", true */ 'p', 'r', 'o', 'x', 'y', 'b', 'a', 'y', '.', 't', 'v', '\0',
   /* "proxyowl.pw", true */ 'p', 'r', 'o', 'x', 'y', 'o', 'w', 'l', '.', 'p', 'w', '\0',
   /* "proxyportal.org", true */ 'p', 'r', 'o', 'x', 'y', 'p', 'o', 'r', 't', 'a', 'l', '.', 'o', 'r', 'g', '\0',
   /* "proxyweb.us", true */ 'p', 'r', 'o', 'x', 'y', 'w', 'e', 'b', '.', 'u', 's', '\0',
   /* "prstatic.com", true */ 'p', 'r', 's', 't', 'a', 't', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "prt.in.th", true */ 'p', 'r', 't', '.', 'i', 'n', '.', 't', 'h', '\0',
   /* "prtpe.com", true */ 'p', 'r', 't', 'p', 'e', '.', 'c', 'o', 'm', '\0',
   /* "pruikshop.nl", true */ 'p', 'r', 'u', 'i', 'k', 's', 'h', 'o', 'p', '.', 'n', 'l', '\0',
   /* "prvikvadrat.hr", true */ 'p', 'r', 'v', 'i', 'k', 'v', 'a', 'd', 'r', 'a', 't', '.', 'h', 'r', '\0',
   /* "prxio.date", true */ 'p', 'r', 'x', 'i', 'o', '.', 'd', 'a', 't', 'e', '\0',
   /* "przemas.pl", true */ 'p', 'r', 'z', 'e', 'm', 'a', 's', '.', 'p', 'l', '\0',
   /* "ps-provider.co.jp", true */ 'p', 's', '-', 'p', 'r', 'o', 'v', 'i', 'd', 'e', 'r', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "ps-w.ru", true */ 'p', 's', '-', 'w', '.', 'r', 'u', '\0',
   /* "ps-x.ru", true */ 'p', 's', '-', 'x', '.', 'r', 'u', '\0',
   /* "psb1911.com", true */ 'p', 's', 'b', '1', '9', '1', '1', '.', 'c', 'o', 'm', '\0',
   /* "psbarrett.com", true */ 'p', 's', 'b', 'a', 'r', 'r', 'e', 't', 't', '.', 'c', 'o', 'm', '\0',
-  /* "psicologia.co.ve", true */ 'p', 's', 'i', 'c', 'o', 'l', 'o', 'g', 'i', 'a', '.', 'c', 'o', '.', 'v', 'e', '\0',
   /* "psicologoforensebarcelona.com", true */ 'p', 's', 'i', 'c', 'o', 'l', 'o', 'g', 'o', 'f', 'o', 'r', 'e', 'n', 's', 'e', 'b', 'a', 'r', 'c', 'e', 'l', 'o', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "psncardplus.be", true */ 'p', 's', 'n', 'c', 'a', 'r', 'd', 'p', 'l', 'u', 's', '.', 'b', 'e', '\0',
   /* "psncardplus.com", true */ 'p', 's', 'n', 'c', 'a', 'r', 'd', 'p', 'l', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "psncardplus.dk", true */ 'p', 's', 'n', 'c', 'a', 'r', 'd', 'p', 'l', 'u', 's', '.', 'd', 'k', '\0',
   /* "psncardplus.nl", true */ 'p', 's', 'n', 'c', 'a', 'r', 'd', 'p', 'l', 'u', 's', '.', 'n', 'l', '\0',
   /* "psncardplus.se", true */ 'p', 's', 'n', 'c', 'a', 'r', 'd', 'p', 'l', 'u', 's', '.', 's', 'e', '\0',
   /* "pste.pw", true */ 'p', 's', 't', 'e', '.', 'p', 'w', '\0',
   /* "pstrozniak.com", true */ 'p', 's', 't', 'r', 'o', 'z', 'n', 'i', 'a', 'k', '.', 'c', 'o', 'm', '\0',
@@ -11377,16 +11335,17 @@ static const char kSTSHostTable[] = {
   /* "radyn.com", true */ 'r', 'a', 'd', 'y', 'n', '.', 'c', 'o', 'm', '\0',
   /* "rafting-japan.com", true */ 'r', 'a', 'f', 't', 'i', 'n', 'g', '-', 'j', 'a', 'p', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "rage4.com", true */ 'r', 'a', 'g', 'e', '4', '.', 'c', 'o', 'm', '\0',
   /* "ragingserenity.com", true */ 'r', 'a', 'g', 'i', 'n', 'g', 's', 'e', 'r', 'e', 'n', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "raidstone.com", true */ 'r', 'a', 'i', 'd', 's', 't', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "raidstone.net", true */ 'r', 'a', 'i', 'd', 's', 't', 'o', 'n', 'e', '.', 'n', 'e', 't', '\0',
   /* "raidstone.rocks", true */ 'r', 'a', 'i', 'd', 's', 't', 'o', 'n', 'e', '.', 'r', 'o', 'c', 'k', 's', '\0',
   /* "railgun.ac", true */ 'r', 'a', 'i', 'l', 'g', 'u', 'n', '.', 'a', 'c', '\0',
+  /* "railjob.cn", true */ 'r', 'a', 'i', 'l', 'j', 'o', 'b', '.', 'c', 'n', '\0',
   /* "railyardurgentcare.com", true */ 'r', 'a', 'i', 'l', 'y', 'a', 'r', 'd', 'u', 'r', 'g', 'e', 'n', 't', 'c', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "rainbowbay.org", true */ 'r', 'a', 'i', 'n', 'b', 'o', 'w', 'b', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "rainforest.engineering", true */ 'r', 'a', 'i', 'n', 'f', 'o', 'r', 'e', 's', 't', '.', 'e', 'n', 'g', 'i', 'n', 'e', 'e', 'r', 'i', 'n', 'g', '\0',
   /* "rainm.eu", true */ 'r', 'a', 'i', 'n', 'm', '.', 'e', 'u', '\0',
   /* "raiseyourflag.com", true */ 'r', 'a', 'i', 's', 'e', 'y', 'o', 'u', 'r', 'f', 'l', 'a', 'g', '.', 'c', 'o', 'm', '\0',
   /* "raissarobles.com", true */ 'r', 'a', 'i', 's', 's', 'a', 'r', 'o', 'b', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "raitza.de", true */ 'r', 'a', 'i', 't', 'z', 'a', '.', 'd', 'e', '\0',
   /* "rak-business-service.com", true */ 'r', 'a', 'k', '-', 'b', 'u', 's', 'i', 'n', 'e', 's', 's', '-', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'c', 'o', 'm', '\0',
@@ -11624,17 +11583,16 @@ static const char kSTSHostTable[] = {
   /* "restrito.org", true */ 'r', 'e', 's', 't', 'r', 'i', 't', 'o', '.', 'o', 'r', 'g', '\0',
   /* "reth.ch", true */ 'r', 'e', 't', 'h', '.', 'c', 'h', '\0',
   /* "reto.com", true */ 'r', 'e', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "retroarms.com", true */ 'r', 'e', 't', 'r', 'o', 'a', 'r', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "retroarms.cz", true */ 'r', 'e', 't', 'r', 'o', 'a', 'r', 'm', 's', '.', 'c', 'z', '\0',
   /* "retrofitlab.com", true */ 'r', 'e', 't', 'r', 'o', 'f', 'i', 't', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "retube.ga", true */ 'r', 'e', 't', 'u', 'b', 'e', '.', 'g', 'a', '\0',
   /* "reucon.com", true */ 'r', 'e', 'u', 'c', 'o', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "reulitz.de", true */ 'r', 'e', 'u', 'l', 'i', 't', 'z', '.', 'd', 'e', '\0',
   /* "reuter-shop.com", true */ 'r', 'e', 'u', 't', 'e', 'r', '-', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "reuter.de", true */ 'r', 'e', 'u', 't', 'e', 'r', '.', 'd', 'e', '\0',
   /* "revamed.com", false */ 'r', 'e', 'v', 'a', 'm', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "revapost.ch", true */ 'r', 'e', 'v', 'a', 'p', 'o', 's', 't', '.', 'c', 'h', '\0',
   /* "revensoftware.com", true */ 'r', 'e', 'v', 'e', 'n', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "revlect.com", true */ 'r', 'e', 'v', 'l', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "revolt.tv", true */ 'r', 'e', 'v', 'o', 'l', 't', '.', 't', 'v', '\0',
   /* "revthefox.co.uk", true */ 'r', 'e', 'v', 't', 'h', 'e', 'f', 'o', 'x', '.', 'c', 'o', '.', 'u', 'k', '\0',
@@ -11691,16 +11649,17 @@ static const char kSTSHostTable[] = {
   /* "rigart-michael.be", true */ 'r', 'i', 'g', 'a', 'r', 't', '-', 'm', 'i', 'c', 'h', 'a', 'e', 'l', '.', 'b', 'e', '\0',
   /* "rigartmichael.be", true */ 'r', 'i', 'g', 'a', 'r', 't', 'm', 'i', 'c', 'h', 'a', 'e', 'l', '.', 'b', 'e', '\0',
   /* "righettod.eu", true */ 'r', 'i', 'g', 'h', 'e', 't', 't', 'o', 'd', '.', 'e', 'u', '\0',
   /* "right-to-love.name", true */ 'r', 'i', 'g', 'h', 't', '-', 't', 'o', '-', 'l', 'o', 'v', 'e', '.', 'n', 'a', 'm', 'e', '\0',
   /* "rightbrain.training", true */ 'r', 'i', 'g', 'h', 't', 'b', 'r', 'a', 'i', 'n', '.', 't', 'r', 'a', 'i', 'n', 'i', 'n', 'g', '\0',
   /* "rightcapital.com", true */ 'r', 'i', 'g', 'h', 't', 'c', 'a', 'p', 'i', 't', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "rightstuff.link", true */ 'r', 'i', 'g', 'h', 't', 's', 't', 'u', 'f', 'f', '.', 'l', 'i', 'n', 'k', '\0',
   /* "righttobuy.gov.uk", true */ 'r', 'i', 'g', 'h', 't', 't', 'o', 'b', 'u', 'y', '.', 'g', 'o', 'v', '.', 'u', 'k', '\0',
+  /* "rigolitch.fr", true */ 'r', 'i', 'g', 'o', 'l', 'i', 't', 'c', 'h', '.', 'f', 'r', '\0',
   /* "rijk-catering.nl", false */ 'r', 'i', 'j', 'k', '-', 'c', 'a', 't', 'e', 'r', 'i', 'n', 'g', '.', 'n', 'l', '\0',
   /* "rijschoolgevonden.nl", false */ 'r', 'i', 'j', 's', 'c', 'h', 'o', 'o', 'l', 'g', 'e', 'v', 'o', 'n', 'd', 'e', 'n', '.', 'n', 'l', '\0',
   /* "rileyevans.co.uk", true */ 'r', 'i', 'l', 'e', 'y', 'e', 'v', 'a', 'n', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "rimo.site", true */ 'r', 'i', 'm', 'o', '.', 's', 'i', 't', 'e', '\0',
   /* "ringingliberty.com", true */ 'r', 'i', 'n', 'g', 'i', 'n', 'g', 'l', 'i', 'b', 'e', 'r', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "rio-weimar.de", true */ 'r', 'i', 'o', '-', 'w', 'e', 'i', 'm', 'a', 'r', '.', 'd', 'e', '\0',
   /* "rip-sport.cz", true */ 'r', 'i', 'p', '-', 's', 'p', 'o', 'r', 't', '.', 'c', 'z', '\0',
   /* "ripple.com", true */ 'r', 'i', 'p', 'p', 'l', 'e', '.', 'c', 'o', 'm', '\0',
@@ -11747,17 +11706,16 @@ static const char kSTSHostTable[] = {
   /* "robodeidentidad.gov", true */ 'r', 'o', 'b', 'o', 'd', 'e', 'i', 'd', 'e', 'n', 't', 'i', 'd', 'a', 'd', '.', 'g', 'o', 'v', '\0',
   /* "robohash.org", true */ 'r', 'o', 'b', 'o', 'h', 'a', 's', 'h', '.', 'o', 'r', 'g', '\0',
   /* "robototes.com", true */ 'r', 'o', 'b', 'o', 't', 'o', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "robspc.repair", true */ 'r', 'o', 'b', 's', 'p', 'c', '.', 'r', 'e', 'p', 'a', 'i', 'r', '\0',
   /* "robtex.com", true */ 'r', 'o', 'b', 't', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "robud.info", true */ 'r', 'o', 'b', 'u', 'd', '.', 'i', 'n', 'f', 'o', '\0',
   /* "robust.ga", true */ 'r', 'o', 'b', 'u', 's', 't', '.', 'g', 'a', '\0',
   /* "rockcanyonbank.com", true */ 'r', 'o', 'c', 'k', 'c', 'a', 'n', 'y', 'o', 'n', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
-  /* "rocketr.net", true */ 'r', 'o', 'c', 'k', 'e', 't', 'r', '.', 'n', 'e', 't', '\0',
   /* "rockeyscrivo.com", true */ 'r', 'o', 'c', 'k', 'e', 'y', 's', 'c', 'r', 'i', 'v', 'o', '.', 'c', 'o', 'm', '\0',
   /* "rocssti.net", true */ 'r', 'o', 'c', 's', 's', 't', 'i', '.', 'n', 'e', 't', '\0',
   /* "rodehutskors.net", true */ 'r', 'o', 'd', 'e', 'h', 'u', 't', 's', 'k', 'o', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "rodolfo.gs", true */ 'r', 'o', 'd', 'o', 'l', 'f', 'o', '.', 'g', 's', '\0',
   /* "rodrigocarvalho.blog.br", true */ 'r', 'o', 'd', 'r', 'i', 'g', 'o', 'c', 'a', 'r', 'v', 'a', 'l', 'h', 'o', '.', 'b', 'l', 'o', 'g', '.', 'b', 'r', '\0',
   /* "roeckx.be", true */ 'r', 'o', 'e', 'c', 'k', 'x', '.', 'b', 'e', '\0',
   /* "roeitijd.nl", true */ 'r', 'o', 'e', 'i', 't', 'i', 'j', 'd', '.', 'n', 'l', '\0',
   /* "roelf.org", true */ 'r', 'o', 'e', 'l', 'f', '.', 'o', 'r', 'g', '\0',
@@ -11775,17 +11733,16 @@ static const char kSTSHostTable[] = {
   /* "rohitagr.com", true */ 'r', 'o', 'h', 'i', 't', 'a', 'g', 'r', '.', 'c', 'o', 'm', '\0',
   /* "rohlik.cz", true */ 'r', 'o', 'h', 'l', 'i', 'k', '.', 'c', 'z', '\0',
   /* "rointe.online", true */ 'r', 'o', 'i', 'n', 't', 'e', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "roketix.co.uk", true */ 'r', 'o', 'k', 'e', 't', 'i', 'x', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "rokki.ch", true */ 'r', 'o', 'k', 'k', 'i', '.', 'c', 'h', '\0',
   /* "rokort.dk", true */ 'r', 'o', 'k', 'o', 'r', 't', '.', 'd', 'k', '\0',
   /* "rokudenashi.de", true */ 'r', 'o', 'k', 'u', 'd', 'e', 'n', 'a', 's', 'h', 'i', '.', 'd', 'e', '\0',
   /* "roland.io", true */ 'r', 'o', 'l', 'a', 'n', 'd', '.', 'i', 'o', '\0',
-  /* "rolandreed.cn", true */ 'r', 'o', 'l', 'a', 'n', 'd', 'r', 'e', 'e', 'd', '.', 'c', 'n', '\0',
   /* "rolandszabo.com", true */ 'r', 'o', 'l', 'a', 'n', 'd', 's', 'z', 'a', 'b', 'o', '.', 'c', 'o', 'm', '\0',
   /* "rolemaster.net", true */ 'r', 'o', 'l', 'e', 'm', 'a', 's', 't', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "roleplayhome.com", true */ 'r', 'o', 'l', 'e', 'p', 'l', 'a', 'y', 'h', 'o', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "rolodato.com", true */ 'r', 'o', 'l', 'o', 'd', 'a', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "romab.com", true */ 'r', 'o', 'm', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "romaimperator.com", true */ 'r', 'o', 'm', 'a', 'i', 'm', 'p', 'e', 'r', 'a', 't', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "romainmuller.xyz", true */ 'r', 'o', 'm', 'a', 'i', 'n', 'm', 'u', 'l', 'l', 'e', 'r', '.', 'x', 'y', 'z', '\0',
   /* "roman-pavlik.cz", true */ 'r', 'o', 'm', 'a', 'n', '-', 'p', 'a', 'v', 'l', 'i', 'k', '.', 'c', 'z', '\0',
@@ -12636,16 +12593,17 @@ static const char kSTSHostTable[] = {
   /* "skatclub-beratzhausen.de", true */ 's', 'k', 'a', 't', 'c', 'l', 'u', 'b', '-', 'b', 'e', 'r', 'a', 't', 'z', 'h', 'a', 'u', 's', 'e', 'n', '.', 'd', 'e', '\0',
   /* "skatn.de", true */ 's', 'k', 'a', 't', 'n', '.', 'd', 'e', '\0',
   /* "skeeley.com", true */ 's', 'k', 'e', 'e', 'l', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "skepticalsports.com", true */ 's', 'k', 'e', 'p', 't', 'i', 'c', 'a', 'l', 's', 'p', 'o', 'r', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "sketchmyroom.com", true */ 's', 'k', 'e', 't', 'c', 'h', 'm', 'y', 'r', 'o', 'o', 'm', '.', 'c', 'o', 'm', '\0',
   /* "skhoop.cz", true */ 's', 'k', 'h', 'o', 'o', 'p', '.', 'c', 'z', '\0',
   /* "ski-insurance.com.au", true */ 's', 'k', 'i', '-', 'i', 'n', 's', 'u', 'r', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "skia.org", true */ 's', 'k', 'i', 'a', '.', 'o', 'r', 'g', '\0',
+  /* "skidstresser.com", true */ 's', 'k', 'i', 'd', 's', 't', 'r', 'e', 's', 's', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "skigebiete-test.de", true */ 's', 'k', 'i', 'g', 'e', 'b', 'i', 'e', 't', 'e', '-', 't', 'e', 's', 't', '.', 'd', 'e', '\0',
   /* "skilldetector.com", true */ 's', 'k', 'i', 'l', 'l', 'd', 'e', 't', 'e', 'c', 't', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "skilletfood.com", true */ 's', 'k', 'i', 'l', 'l', 'e', 't', 'f', 'o', 'o', 'd', '.', 'c', 'o', 'm', '\0',
   /* "skillproxy.com", true */ 's', 'k', 'i', 'l', 'l', 'p', 'r', 'o', 'x', 'y', '.', 'c', 'o', 'm', '\0',
   /* "skillproxy.net", true */ 's', 'k', 'i', 'l', 'l', 'p', 'r', 'o', 'x', 'y', '.', 'n', 'e', 't', '\0',
   /* "skillproxy.org", true */ 's', 'k', 'i', 'l', 'l', 'p', 'r', 'o', 'x', 'y', '.', 'o', 'r', 'g', '\0',
   /* "skills2services.com", true */ 's', 'k', 'i', 'l', 'l', 's', '2', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "skillseo.com", true */ 's', 'k', 'i', 'l', 'l', 's', 'e', 'o', '.', 'c', 'o', 'm', '\0',
@@ -12657,17 +12615,16 @@ static const char kSTSHostTable[] = {
   /* "skoda-service-team-cup.de", true */ 's', 'k', 'o', 'd', 'a', '-', 's', 'e', 'r', 'v', 'i', 'c', 'e', '-', 't', 'e', 'a', 'm', '-', 'c', 'u', 'p', '.', 'd', 'e', '\0',
   /* "skogsbruket.fi", true */ 's', 'k', 'o', 'g', 's', 'b', 'r', 'u', 'k', 'e', 't', '.', 'f', 'i', '\0',
   /* "skogskultur.fi", true */ 's', 'k', 'o', 'g', 's', 'k', 'u', 'l', 't', 'u', 'r', '.', 'f', 'i', '\0',
   /* "skolem.de", true */ 's', 'k', 'o', 'l', 'e', 'm', '.', 'd', 'e', '\0',
   /* "skoleniphp.cz", true */ 's', 'k', 'o', 'l', 'e', 'n', 'i', 'p', 'h', 'p', '.', 'c', 'z', '\0',
   /* "skontakt.cz", true */ 's', 'k', 'o', 'n', 't', 'a', 'k', 't', '.', 'c', 'z', '\0',
   /* "skontorp-enterprise.no", true */ 's', 'k', 'o', 'n', 't', 'o', 'r', 'p', '-', 'e', 'n', 't', 'e', 'r', 'p', 'r', 'i', 's', 'e', '.', 'n', 'o', '\0',
   /* "skory.us", true */ 's', 'k', 'o', 'r', 'y', '.', 'u', 's', '\0',
-  /* "skotty.io", true */ 's', 'k', 'o', 't', 't', 'y', '.', 'i', 'o', '\0',
   /* "skou.dk", true */ 's', 'k', 'o', 'u', '.', 'd', 'k', '\0',
   /* "sktsolution.com", true */ 's', 'k', 't', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "sky-aroma.com", true */ 's', 'k', 'y', '-', 'a', 'r', 'o', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "skyasker.cn", true */ 's', 'k', 'y', 'a', 's', 'k', 'e', 'r', '.', 'c', 'n', '\0',
   /* "skyasker.com", true */ 's', 'k', 'y', 'a', 's', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "skydragoness.com", true */ 's', 'k', 'y', 'd', 'r', 'a', 'g', 'o', 'n', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "skydrive.live.com", false */ 's', 'k', 'y', 'd', 'r', 'i', 'v', 'e', '.', 'l', 'i', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "skyline.link", true */ 's', 'k', 'y', 'l', 'i', 'n', 'e', '.', 'l', 'i', 'n', 'k', '\0',
@@ -12950,17 +12907,16 @@ static const char kSTSHostTable[] = {
   /* "spacedust.xyz", true */ 's', 'p', 'a', 'c', 'e', 'd', 'u', 's', 't', '.', 'x', 'y', 'z', '\0',
   /* "spacefish.biz", true */ 's', 'p', 'a', 'c', 'e', 'f', 'i', 's', 'h', '.', 'b', 'i', 'z', '\0',
   /* "spacehost.de", false */ 's', 'p', 'a', 'c', 'e', 'h', 'o', 's', 't', '.', 'd', 'e', '\0',
   /* "spacelabs.io", true */ 's', 'p', 'a', 'c', 'e', 'l', 'a', 'b', 's', '.', 'i', 'o', '\0',
   /* "spacepage.be", true */ 's', 'p', 'a', 'c', 'e', 'p', 'a', 'g', 'e', '.', 'b', 'e', '\0',
   /* "spaceweather.live", true */ 's', 'p', 'a', 'c', 'e', 'w', 'e', 'a', 't', 'h', 'e', 'r', '.', 'l', 'i', 'v', 'e', '\0',
   /* "spaceweatherlive.com", true */ 's', 'p', 'a', 'c', 'e', 'w', 'e', 'a', 't', 'h', 'e', 'r', 'l', 'i', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "spacountryexplorer.org.au", true */ 's', 'p', 'a', 'c', 'o', 'u', 'n', 't', 'r', 'y', 'e', 'x', 'p', 'l', 'o', 'r', 'e', 'r', '.', 'o', 'r', 'g', '.', 'a', 'u', '\0',
-  /* "spaggel.nl", false */ 's', 'p', 'a', 'g', 'g', 'e', 'l', '.', 'n', 'l', '\0',
   /* "spamloco.net", true */ 's', 'p', 'a', 'm', 'l', 'o', 'c', 'o', '.', 'n', 'e', 't', '\0',
   /* "spamwc.de", true */ 's', 'p', 'a', 'm', 'w', 'c', '.', 'd', 'e', '\0',
   /* "sparkforautism.org", true */ 's', 'p', 'a', 'r', 'k', 'f', 'o', 'r', 'a', 'u', 't', 'i', 's', 'm', '.', 'o', 'r', 'g', '\0',
   /* "sparklebastard.com", true */ 's', 'p', 'a', 'r', 'k', 'l', 'e', 'b', 'a', 's', 't', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "sparta-trade.com", true */ 's', 'p', 'a', 'r', 't', 'a', '-', 't', 'r', 'a', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "spartaconsulting.fi", true */ 's', 'p', 'a', 'r', 't', 'a', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 'f', 'i', '\0',
   /* "spassstempel.de", true */ 's', 'p', 'a', 's', 's', 's', 't', 'e', 'm', 'p', 'e', 'l', '.', 'd', 'e', '\0',
   /* "spatzenwerkstatt.de", true */ 's', 'p', 'a', 't', 'z', 'e', 'n', 'w', 'e', 'r', 'k', 's', 't', 'a', 't', 't', '.', 'd', 'e', '\0',
@@ -13201,18 +13157,16 @@ static const char kSTSHostTable[] = {
   /* "sticklerjs.org", true */ 's', 't', 'i', 'c', 'k', 'l', 'e', 'r', 'j', 's', '.', 'o', 'r', 'g', '\0',
   /* "stigharder.com", true */ 's', 't', 'i', 'g', 'h', 'a', 'r', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "stikonas.eu", false */ 's', 't', 'i', 'k', 'o', 'n', 'a', 's', '.', 'e', 'u', '\0',
   /* "stilartmoebel.de", true */ 's', 't', 'i', 'l', 'a', 'r', 't', 'm', 'o', 'e', 'b', 'e', 'l', '.', 'd', 'e', '\0',
   /* "stillyarts.com", false */ 's', 't', 'i', 'l', 'l', 'y', 'a', 'r', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "stilmobil.se", true */ 's', 't', 'i', 'l', 'm', 'o', 'b', 'i', 'l', '.', 's', 'e', '\0',
   /* "stinkytrashhound.com", true */ 's', 't', 'i', 'n', 'k', 'y', 't', 'r', 'a', 's', 'h', 'h', 'o', 'u', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "stirling.co", false */ 's', 't', 'i', 'r', 'l', 'i', 'n', 'g', '.', 'c', 'o', '\0',
-  /* "stirlingpoon.com", false */ 's', 't', 'i', 'r', 'l', 'i', 'n', 'g', 'p', 'o', 'o', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "stirlingpoon.net", true */ 's', 't', 'i', 'r', 'l', 'i', 'n', 'g', 'p', 'o', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "stitchfiddle.com", true */ 's', 't', 'i', 't', 'c', 'h', 'f', 'i', 'd', 'd', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "stjohnin.com", true */ 's', 't', 'j', 'o', 'h', 'n', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "stjohnmiami.org", true */ 's', 't', 'j', 'o', 'h', 'n', 'm', 'i', 'a', 'm', 'i', '.', 'o', 'r', 'g', '\0',
   /* "stmsolutions.pl", true */ 's', 't', 'm', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'p', 'l', '\0',
   /* "stnl.de", true */ 's', 't', 'n', 'l', '.', 'd', 'e', '\0',
   /* "stocktrader.com", true */ 's', 't', 'o', 'c', 'k', 't', 'r', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "stoffelen.nl", true */ 's', 't', 'o', 'f', 'f', 'e', 'l', 'e', 'n', '.', 'n', 'l', '\0',
   /* "stoianlawfirm.com", true */ 's', 't', 'o', 'i', 'a', 'n', 'l', 'a', 'w', 'f', 'i', 'r', 'm', '.', 'c', 'o', 'm', '\0',
@@ -13267,17 +13221,16 @@ static const char kSTSHostTable[] = {
   /* "stuco.co", true */ 's', 't', 'u', 'c', 'o', '.', 'c', 'o', '\0',
   /* "studenckiemetody.pl", true */ 's', 't', 'u', 'd', 'e', 'n', 'c', 'k', 'i', 'e', 'm', 'e', 't', 'o', 'd', 'y', '.', 'p', 'l', '\0',
   /* "studentloans.gov", true */ 's', 't', 'u', 'd', 'e', 'n', 't', 'l', 'o', 'a', 'n', 's', '.', 'g', 'o', 'v', '\0',
   /* "studentrdh.com", true */ 's', 't', 'u', 'd', 'e', 'n', 't', 'r', 'd', 'h', '.', 'c', 'o', 'm', '\0',
   /* "studentrightsadvocate.org", true */ 's', 't', 'u', 'd', 'e', 'n', 't', 'r', 'i', 'g', 'h', 't', 's', 'a', 'd', 'v', 'o', 'c', 'a', 't', 'e', '.', 'o', 'r', 'g', '\0',
   /* "studenttenant.com", true */ 's', 't', 'u', 'd', 'e', 'n', 't', 't', 'e', 'n', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "studer.su", true */ 's', 't', 'u', 'd', 'e', 'r', '.', 's', 'u', '\0',
   /* "studienportal.eu", true */ 's', 't', 'u', 'd', 'i', 'e', 'n', 'p', 'o', 'r', 't', 'a', 'l', '.', 'e', 'u', '\0',
-  /* "studinf.xyz", true */ 's', 't', 'u', 'd', 'i', 'n', 'f', '.', 'x', 'y', 'z', '\0',
   /* "studio-panic.com", true */ 's', 't', 'u', 'd', 'i', 'o', '-', 'p', 'a', 'n', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "studiodewit.nl", true */ 's', 't', 'u', 'd', 'i', 'o', 'd', 'e', 'w', 'i', 't', '.', 'n', 'l', '\0',
   /* "studiomarcella.com", true */ 's', 't', 'u', 'd', 'i', 'o', 'm', 'a', 'r', 'c', 'e', 'l', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "studiostawki.com", true */ 's', 't', 'u', 'd', 'i', 'o', 's', 't', 'a', 'w', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "studiostudio.net", true */ 's', 't', 'u', 'd', 'i', 'o', 's', 't', 'u', 'd', 'i', 'o', '.', 'n', 'e', 't', '\0',
   /* "studlan.no", true */ 's', 't', 'u', 'd', 'l', 'a', 'n', '.', 'n', 'o', '\0',
   /* "studyhub.cf", true */ 's', 't', 'u', 'd', 'y', 'h', 'u', 'b', '.', 'c', 'f', '\0',
   /* "stuermer.me", true */ 's', 't', 'u', 'e', 'r', 'm', 'e', 'r', '.', 'm', 'e', '\0',
@@ -13385,16 +13338,17 @@ static const char kSTSHostTable[] = {
   /* "swapadoodle.com", true */ 's', 'w', 'a', 'p', 'a', 'd', 'o', 'o', 'd', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "swat4stats.com", true */ 's', 'w', 'a', 't', '4', 's', 't', 'a', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "sway-cdn.com", true */ 's', 'w', 'a', 'y', '-', 'c', 'd', 'n', '.', 'c', 'o', 'm', '\0',
   /* "sway.com", true */ 's', 'w', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "swedishhost.com", true */ 's', 'w', 'e', 'd', 'i', 's', 'h', 'h', 'o', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "swedishhost.se", true */ 's', 'w', 'e', 'd', 'i', 's', 'h', 'h', 'o', 's', 't', '.', 's', 'e', '\0',
   /* "sweep-me.net", true */ 's', 'w', 'e', 'e', 'p', '-', 'm', 'e', '.', 'n', 'e', 't', '\0',
   /* "sweetlegs.jp", true */ 's', 'w', 'e', 'e', 't', 'l', 'e', 'g', 's', '.', 'j', 'p', '\0',
+  /* "sweetll.me", false */ 's', 'w', 'e', 'e', 't', 'l', 'l', '.', 'm', 'e', '\0',
   /* "sweetvanilla.jp", true */ 's', 'w', 'e', 'e', 't', 'v', 'a', 'n', 'i', 'l', 'l', 'a', '.', 'j', 'p', '\0',
   /* "swehack.org", true */ 's', 'w', 'e', 'h', 'a', 'c', 'k', '.', 'o', 'r', 'g', '\0',
   /* "swift-devedge.de", true */ 's', 'w', 'i', 'f', 't', '-', 'd', 'e', 'v', 'e', 'd', 'g', 'e', '.', 'd', 'e', '\0',
   /* "swiftqueue.com", true */ 's', 'w', 'i', 'f', 't', 'q', 'u', 'e', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "swiggy.com", true */ 's', 'w', 'i', 'g', 'g', 'y', '.', 'c', 'o', 'm', '\0',
   /* "swineson.me", true */ 's', 'w', 'i', 'n', 'e', 's', 'o', 'n', '.', 'm', 'e', '\0',
   /* "swingmonkey.com", true */ 's', 'w', 'i', 'n', 'g', 'm', 'o', 'n', 'k', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "swiss-cyber-experts.ch", true */ 's', 'w', 'i', 's', 's', '-', 'c', 'y', 'b', 'e', 'r', '-', 'e', 'x', 'p', 'e', 'r', 't', 's', '.', 'c', 'h', '\0',
@@ -13454,16 +13408,17 @@ static const char kSTSHostTable[] = {
   /* "szaydon.me", false */ 's', 'z', 'a', 'y', 'd', 'o', 'n', '.', 'm', 'e', '\0',
   /* "szechenyi2020.hu", true */ 's', 'z', 'e', 'c', 'h', 'e', 'n', 'y', 'i', '2', '0', '2', '0', '.', 'h', 'u', '\0',
   /* "szentistvanpt.sk", true */ 's', 'z', 'e', 'n', 't', 'i', 's', 't', 'v', 'a', 'n', 'p', 't', '.', 's', 'k', '\0',
   /* "szongott.net", true */ 's', 'z', 'o', 'n', 'g', 'o', 't', 't', '.', 'n', 'e', 't', '\0',
   /* "t-complex.space", true */ 't', '-', 'c', 'o', 'm', 'p', 'l', 'e', 'x', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "t-hawk.com", true */ 't', '-', 'h', 'a', 'w', 'k', '.', 'c', 'o', 'm', '\0',
   /* "t-ken.xyz", true */ 't', '-', 'k', 'e', 'n', '.', 'x', 'y', 'z', '\0',
   /* "t-point.eu", true */ 't', '-', 'p', 'o', 'i', 'n', 't', '.', 'e', 'u', '\0',
+  /* "t-shirts4less.nl", true */ 't', '-', 's', 'h', 'i', 'r', 't', 's', '4', 'l', 'e', 's', 's', '.', 'n', 'l', '\0',
   /* "t-stonegroup.com", true */ 't', '-', 's', 't', 'o', 'n', 'e', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "t.facebook.com", false */ 't', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "t0dd.eu", false */ 't', '0', 'd', 'd', '.', 'e', 'u', '\0',
   /* "t0ne.net", true */ 't', '0', 'n', 'e', '.', 'n', 'e', 't', '\0',
   /* "t23m-navi.jp", false */ 't', '2', '3', 'm', '-', 'n', 'a', 'v', 'i', '.', 'j', 'p', '\0',
   /* "t3rror.net", true */ 't', '3', 'r', 'r', 'o', 'r', '.', 'n', 'e', 't', '\0',
   /* "t7e.de", false */ 't', '7', 'e', '.', 'd', 'e', '\0',
   /* "ta-sports.net", true */ 't', 'a', '-', 's', 'p', 'o', 'r', 't', 's', '.', 'n', 'e', 't', '\0',
@@ -13476,16 +13431,17 @@ static const char kSTSHostTable[] = {
   /* "tacticalsquare.com", true */ 't', 'a', 'c', 't', 'i', 'c', 'a', 'l', 's', 'q', 'u', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "tadata.me", true */ 't', 'a', 'd', 'a', 't', 'a', '.', 'm', 'e', '\0',
   /* "tadcastercircuit.org.uk", true */ 't', 'a', 'd', 'c', 'a', 's', 't', 'e', 'r', 'c', 'i', 'r', 'c', 'u', 'i', 't', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "tadu.de", true */ 't', 'a', 'd', 'u', '.', 'd', 'e', '\0',
   /* "taglioepiega.com", true */ 't', 'a', 'g', 'l', 'i', 'o', 'e', 'p', 'i', 'e', 'g', 'a', '.', 'c', 'o', 'm', '\0',
   /* "taglioepiega.eu", true */ 't', 'a', 'g', 'l', 'i', 'o', 'e', 'p', 'i', 'e', 'g', 'a', '.', 'e', 'u', '\0',
   /* "taglioepiega.it", true */ 't', 'a', 'g', 'l', 'i', 'o', 'e', 'p', 'i', 'e', 'g', 'a', '.', 'i', 't', '\0',
   /* "tahakomat.cz", true */ 't', 'a', 'h', 'a', 'k', 'o', 'm', 'a', 't', '.', 'c', 'z', '\0',
+  /* "tahf.net", true */ 't', 'a', 'h', 'f', '.', 'n', 'e', 't', '\0',
   /* "tailify.com", true */ 't', 'a', 'i', 'l', 'i', 'f', 'y', '.', 'c', 'o', 'm', '\0',
   /* "tailpuff.net", true */ 't', 'a', 'i', 'l', 'p', 'u', 'f', 'f', '.', 'n', 'e', 't', '\0',
   /* "tails.boum.org", true */ 't', 'a', 'i', 'l', 's', '.', 'b', 'o', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "taiwan.dating", true */ 't', 'a', 'i', 'w', 'a', 'n', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "taiwantour.info", true */ 't', 'a', 'i', 'w', 'a', 'n', 't', 'o', 'u', 'r', '.', 'i', 'n', 'f', 'o', '\0',
   /* "take1give1.com", false */ 't', 'a', 'k', 'e', '1', 'g', 'i', 'v', 'e', '1', '.', 'c', 'o', 'm', '\0',
   /* "taken.pl", true */ 't', 'a', 'k', 'e', 'n', '.', 'p', 'l', '\0',
   /* "takeshifujimoto.com", true */ 't', 'a', 'k', 'e', 's', 'h', 'i', 'f', 'u', 'j', 'i', 'm', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0',
@@ -13608,30 +13564,30 @@ static const char kSTSHostTable[] = {
   /* "technologysi.com", true */ 't', 'e', 'c', 'h', 'n', 'o', 'l', 'o', 'g', 'y', 's', 'i', '.', 'c', 'o', 'm', '\0',
   /* "technoparcepsilon.fr", true */ 't', 'e', 'c', 'h', 'n', 'o', 'p', 'a', 'r', 'c', 'e', 'p', 's', 'i', 'l', 'o', 'n', '.', 'f', 'r', '\0',
   /* "technoscoots.com", true */ 't', 'e', 'c', 'h', 'n', 'o', 's', 'c', 'o', 'o', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "technosorcery.net", true */ 't', 'e', 'c', 'h', 'n', 'o', 's', 'o', 'r', 'c', 'e', 'r', 'y', '.', 'n', 'e', 't', '\0',
   /* "technotonic.com.au", false */ 't', 'e', 'c', 'h', 'n', 'o', 't', 'o', 'n', 'i', 'c', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "techold.ru", true */ 't', 'e', 'c', 'h', 'o', 'l', 'd', '.', 'r', 'u', '\0',
   /* "techorbiter.com", true */ 't', 'e', 'c', 'h', 'o', 'r', 'b', 'i', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "techpivot.net", true */ 't', 'e', 'c', 'h', 'p', 'i', 'v', 'o', 't', '.', 'n', 'e', 't', '\0',
-  /* "techreview.link", true */ 't', 'e', 'c', 'h', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'l', 'i', 'n', 'k', '\0',
   /* "techtalks.no", true */ 't', 'e', 'c', 'h', 't', 'a', 'l', 'k', 's', '.', 'n', 'o', '\0',
   /* "techtoy.store", true */ 't', 'e', 'c', 'h', 't', 'o', 'y', '.', 's', 't', 'o', 'r', 'e', '\0',
   /* "techvalue.gr", true */ 't', 'e', 'c', 'h', 'v', 'a', 'l', 'u', 'e', '.', 'g', 'r', '\0',
   /* "techwords.io", true */ 't', 'e', 'c', 'h', 'w', 'o', 'r', 'd', 's', '.', 'i', 'o', '\0',
   /* "tecnogaming.com", true */ 't', 'e', 'c', 'n', 'o', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "tecture.de", true */ 't', 'e', 'c', 't', 'u', 'r', 'e', '.', 'd', 'e', '\0',
   /* "teddy.ch", true */ 't', 'e', 'd', 'd', 'y', '.', 'c', 'h', '\0',
   /* "tedeh.net", true */ 't', 'e', 'd', 'e', 'h', '.', 'n', 'e', 't', '\0',
   /* "tedovo.com", true */ 't', 'e', 'd', 'o', 'v', 'o', '.', 'c', 'o', 'm', '\0',
   /* "tee-idf.net", true */ 't', 'e', 'e', '-', 'i', 'd', 'f', '.', 'n', 'e', 't', '\0',
   /* "teebeedee.org", true */ 't', 'e', 'e', 'b', 'e', 'e', 'd', 'e', 'e', '.', 'o', 'r', 'g', '\0',
   /* "teedb.de", true */ 't', 'e', 'e', 'd', 'b', '.', 'd', 'e', '\0',
   /* "teehaus-shila.de", true */ 't', 'e', 'e', 'h', 'a', 'u', 's', '-', 's', 'h', 'i', 'l', 'a', '.', 'd', 'e', '\0',
+  /* "teemo.gg", true */ 't', 'e', 'e', 'm', 'o', '.', 'g', 'g', '\0',
   /* "teemperor.de", true */ 't', 'e', 'e', 'm', 'p', 'e', 'r', 'o', 'r', '.', 'd', 'e', '\0',
   /* "teencounseling.com", true */ 't', 'e', 'e', 'n', 'c', 'o', 'u', 'n', 's', 'e', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "teeworlds-friends.de", true */ 't', 'e', 'e', 'w', 'o', 'r', 'l', 'd', 's', '-', 'f', 'r', 'i', 'e', 'n', 'd', 's', '.', 'd', 'e', '\0',
   /* "tege-elektronik.hu", true */ 't', 'e', 'g', 'e', '-', 'e', 'l', 'e', 'k', 't', 'r', 'o', 'n', 'i', 'k', '.', 'h', 'u', '\0',
   /* "tehotuotanto.net", true */ 't', 'e', 'h', 'o', 't', 'u', 'o', 't', 'a', 'n', 't', 'o', '.', 'n', 'e', 't', '\0',
   /* "tehrabbitt.com", false */ 't', 'e', 'h', 'r', 'a', 'b', 'b', 'i', 't', 't', '.', 'c', 'o', 'm', '\0',
   /* "teknologi.or.id", false */ 't', 'e', 'k', 'n', 'o', 'l', 'o', 'g', 'i', '.', 'o', 'r', '.', 'i', 'd', '\0',
   /* "tektoria.de", false */ 't', 'e', 'k', 't', 'o', 'r', 'i', 'a', '.', 'd', 'e', '\0',
@@ -14085,17 +14041,16 @@ static const char kSTSHostTable[] = {
   /* "tonytan.io", true */ 't', 'o', 'n', 'y', 't', 'a', 'n', '.', 'i', 'o', '\0',
   /* "tonywebster.com", true */ 't', 'o', 'n', 'y', 'w', 'e', 'b', 's', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "toolbox.ninja", false */ 't', 'o', 'o', 'l', 'b', 'o', 'x', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "toonpool.com", true */ 't', 'o', 'o', 'n', 'p', 'o', 'o', 'l', '.', 'c', 'o', 'm', '\0',
   /* "toool.nl", true */ 't', 'o', 'o', 'o', 'l', '.', 'n', 'l', '\0',
   /* "toool.org", true */ 't', 'o', 'o', 'o', 'l', '.', 'o', 'r', 'g', '\0',
   /* "tooolroc.org", true */ 't', 'o', 'o', 'o', 'l', 'r', 'o', 'c', '.', 'o', 'r', 'g', '\0',
   /* "tooti.biz", true */ 't', 'o', 'o', 't', 'i', '.', 'b', 'i', 'z', '\0',
-  /* "top-stage.net", true */ 't', 'o', 'p', '-', 's', 't', 'a', 'g', 'e', '.', 'n', 'e', 't', '\0',
   /* "topaxi.ch", true */ 't', 'o', 'p', 'a', 'x', 'i', '.', 'c', 'h', '\0',
   /* "topaxi.codes", true */ 't', 'o', 'p', 'a', 'x', 'i', '.', 'c', 'o', 'd', 'e', 's', '\0',
   /* "topbrakes.com", true */ 't', 'o', 'p', 'b', 'r', 'a', 'k', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "topdesk.net", true */ 't', 'o', 'p', 'd', 'e', 's', 'k', '.', 'n', 'e', 't', '\0',
   /* "topdevbox.net", true */ 't', 'o', 'p', 'd', 'e', 'v', 'b', 'o', 'x', '.', 'n', 'e', 't', '\0',
   /* "topfivepercent.co.uk", true */ 't', 'o', 'p', 'f', 'i', 'v', 'e', 'p', 'e', 'r', 'c', 'e', 'n', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "topnotepad.com", true */ 't', 'o', 'p', 'n', 'o', 't', 'e', 'p', 'a', 'd', '.', 'c', 'o', 'm', '\0',
   /* "topnovini.com", true */ 't', 'o', 'p', 'n', 'o', 'v', 'i', 'n', 'i', '.', 'c', 'o', 'm', '\0',
@@ -14635,16 +14590,17 @@ static const char kSTSHostTable[] = {
   /* "v2ex.com", true */ 'v', '2', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "v2ex.us", true */ 'v', '2', 'e', 'x', '.', 'u', 's', '\0',
   /* "va-reitartikel.com", true */ 'v', 'a', '-', 'r', 'e', 'i', 't', 'a', 'r', 't', 'i', 'k', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "vaccines.gov", true */ 'v', 'a', 'c', 'c', 'i', 'n', 'e', 's', '.', 'g', 'o', 'v', '\0',
   /* "vadik.me", true */ 'v', 'a', 'd', 'i', 'k', '.', 'm', 'e', '\0',
   /* "vagrantup.com", true */ 'v', 'a', 'g', 'r', 'a', 'n', 't', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "vakuutuskanava.fi", true */ 'v', 'a', 'k', 'u', 'u', 't', 'u', 's', 'k', 'a', 'n', 'a', 'v', 'a', '.', 'f', 'i', '\0',
   /* "val-sec.com", true */ 'v', 'a', 'l', '-', 's', 'e', 'c', '.', 'c', 'o', 'm', '\0',
+  /* "valasi.eu", true */ 'v', 'a', 'l', 'a', 's', 'i', '.', 'e', 'u', '\0',
   /* "valbonne-consulting.com", true */ 'v', 'a', 'l', 'b', 'o', 'n', 'n', 'e', '-', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "valentin-sundermann.de", true */ 'v', 'a', 'l', 'e', 'n', 't', 'i', 'n', '-', 's', 'u', 'n', 'd', 'e', 'r', 'm', 'a', 'n', 'n', '.', 'd', 'e', '\0',
   /* "valeriansaliou.name", true */ 'v', 'a', 'l', 'e', 'r', 'i', 'a', 'n', 's', 'a', 'l', 'i', 'o', 'u', '.', 'n', 'a', 'm', 'e', '\0',
   /* "validator.nu", true */ 'v', 'a', 'l', 'i', 'd', 'a', 't', 'o', 'r', '.', 'n', 'u', '\0',
   /* "validbrands.com", true */ 'v', 'a', 'l', 'i', 'd', 'b', 'r', 'a', 'n', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "valitron.se", true */ 'v', 'a', 'l', 'i', 't', 'r', 'o', 'n', '.', 's', 'e', '\0',
   /* "valkohattu.fi", true */ 'v', 'a', 'l', 'k', 'o', 'h', 'a', 't', 't', 'u', '.', 'f', 'i', '\0',
   /* "valokuva-albumi.fi", true */ 'v', 'a', 'l', 'o', 'k', 'u', 'v', 'a', '-', 'a', 'l', 'b', 'u', 'm', 'i', '.', 'f', 'i', '\0',
@@ -14873,17 +14829,16 @@ static const char kSTSHostTable[] = {
   /* "vmug.pl", true */ 'v', 'm', 'u', 'g', '.', 'p', 'l', '\0',
   /* "vn.search.yahoo.com", false */ 'v', 'n', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "vnd.cloud", true */ 'v', 'n', 'd', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "vnfs-team.com", true */ 'v', 'n', 'f', 's', '-', 't', 'e', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "vnvisa.center", true */ 'v', 'n', 'v', 'i', 's', 'a', '.', 'c', 'e', 'n', 't', 'e', 'r', '\0',
   /* "vnvisa.ru", true */ 'v', 'n', 'v', 'i', 's', 'a', '.', 'r', 'u', '\0',
   /* "vocab.guru", true */ 'v', 'o', 'c', 'a', 'b', '.', 'g', 'u', 'r', 'u', '\0',
   /* "vocaloid.my", true */ 'v', 'o', 'c', 'a', 'l', 'o', 'i', 'd', '.', 'm', 'y', '\0',
-  /* "vodpay.com", true */ 'v', 'o', 'd', 'p', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "vogler.name", true */ 'v', 'o', 'g', 'l', 'e', 'r', '.', 'n', 'a', 'm', 'e', '\0',
   /* "vogt.tech", true */ 'v', 'o', 'g', 't', '.', 't', 'e', 'c', 'h', '\0',
   /* "voidi.ca", true */ 'v', 'o', 'i', 'd', 'i', '.', 'c', 'a', '\0',
   /* "voidserv.net", true */ 'v', 'o', 'i', 'd', 's', 'e', 'r', 'v', '.', 'n', 'e', 't', '\0',
   /* "vokativy.cz", true */ 'v', 'o', 'k', 'a', 't', 'i', 'v', 'y', '.', 'c', 'z', '\0',
   /* "vokeapp.com", true */ 'v', 'o', 'k', 'e', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "volcain.io", true */ 'v', 'o', 'l', 'c', 'a', 'i', 'n', '.', 'i', 'o', '\0',
   /* "volgavibes.ru", true */ 'v', 'o', 'l', 'g', 'a', 'v', 'i', 'b', 'e', 's', '.', 'r', 'u', '\0',
@@ -15120,24 +15075,24 @@ static const char kSTSHostTable[] = {
   /* "weekly-residence.com", true */ 'w', 'e', 'e', 'k', 'l', 'y', '-', 'r', 'e', 's', 'i', 'd', 'e', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "weekly.fyi", true */ 'w', 'e', 'e', 'k', 'l', 'y', '.', 'f', 'y', 'i', '\0',
   /* "weerstatistieken.nl", true */ 'w', 'e', 'e', 'r', 's', 't', 'a', 't', 'i', 's', 't', 'i', 'e', 'k', 'e', 'n', '.', 'n', 'l', '\0',
   /* "wefinanceinc.com", true */ 'w', 'e', 'f', 'i', 'n', 'a', 'n', 'c', 'e', 'i', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "wegenaer.nl", true */ 'w', 'e', 'g', 'e', 'n', 'a', 'e', 'r', '.', 'n', 'l', '\0',
   /* "weggeweest.nl", true */ 'w', 'e', 'g', 'g', 'e', 'w', 'e', 'e', 's', 't', '.', 'n', 'l', '\0',
   /* "wegner.no", true */ 'w', 'e', 'g', 'n', 'e', 'r', '.', 'n', 'o', '\0',
   /* "weibomiaopai.com", true */ 'w', 'e', 'i', 'b', 'o', 'm', 'i', 'a', 'o', 'p', 'a', 'i', '.', 'c', 'o', 'm', '\0',
+  /* "weicn.org", true */ 'w', 'e', 'i', 'c', 'n', '.', 'o', 'r', 'g', '\0',
   /* "weiji.ga", true */ 'w', 'e', 'i', 'j', 'i', '.', 'g', 'a', '\0',
   /* "weimaraner.com.br", true */ 'w', 'e', 'i', 'm', 'a', 'r', 'a', 'n', 'e', 'r', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "wein.cc", true */ 'w', 'e', 'i', 'n', '.', 'c', 'c', '\0',
   /* "weirdesigns.com", true */ 'w', 'e', 'i', 'r', 'd', 'e', 's', 'i', 'g', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "weisse-liste.de", true */ 'w', 'e', 'i', 's', 's', 'e', '-', 'l', 'i', 's', 't', 'e', '.', 'd', 'e', '\0',
   /* "weissman.agency", true */ 'w', 'e', 'i', 's', 's', 'm', 'a', 'n', '.', 'a', 'g', 'e', 'n', 'c', 'y', '\0',
   /* "weiterbildung-vdz.de", true */ 'w', 'e', 'i', 't', 'e', 'r', 'b', 'i', 'l', 'd', 'u', 'n', 'g', '-', 'v', 'd', 'z', '.', 'd', 'e', '\0',
-  /* "weiyuz.com", true */ 'w', 'e', 'i', 'y', 'u', 'z', '.', 'c', 'o', 'm', '\0',
   /* "weizenspr.eu", true */ 'w', 'e', 'i', 'z', 'e', 'n', 's', 'p', 'r', '.', 'e', 'u', '\0',
   /* "welches-kinderfahrrad.de", true */ 'w', 'e', 'l', 'c', 'h', 'e', 's', '-', 'k', 'i', 'n', 'd', 'e', 'r', 'f', 'a', 'h', 'r', 'r', 'a', 'd', '.', 'd', 'e', '\0',
   /* "welcomehelp.de", true */ 'w', 'e', 'l', 'c', 'o', 'm', 'e', 'h', 'e', 'l', 'p', '.', 'd', 'e', '\0',
   /* "wellacapability.com", true */ 'w', 'e', 'l', 'l', 'a', 'c', 'a', 'p', 'a', 'b', 'i', 'l', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "welldrake.com", true */ 'w', 'e', 'l', 'l', 'd', 'r', 'a', 'k', 'e', '.', 'c', 'o', 'm', '\0',
   /* "wellensteyn.ru", true */ 'w', 'e', 'l', 'l', 'e', 'n', 's', 't', 'e', 'y', 'n', '.', 'r', 'u', '\0',
   /* "wellproducedwines.com", true */ 'w', 'e', 'l', 'l', 'p', 'r', 'o', 'd', 'u', 'c', 'e', 'd', 'w', 'i', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "wellspringcamps.com", true */ 'w', 'e', 'l', 'l', 's', 'p', 'r', 'i', 'n', 'g', 'c', 'a', 'm', 'p', 's', '.', 'c', 'o', 'm', '\0',
@@ -15708,33 +15663,34 @@ static const char kSTSHostTable[] = {
   /* "yhb.io", true */ 'y', 'h', 'b', '.', 'i', 'o', '\0',
   /* "yhori.xyz", true */ 'y', 'h', 'o', 'r', 'i', '.', 'x', 'y', 'z', '\0',
   /* "yhrd.org", true */ 'y', 'h', 'r', 'd', '.', 'o', 'r', 'g', '\0',
   /* "yii2.cc", true */ 'y', 'i', 'i', '2', '.', 'c', 'c', '\0',
   /* "yikzu.cn", true */ 'y', 'i', 'k', 'z', 'u', '.', 'c', 'n', '\0',
   /* "yinfor.com", true */ 'y', 'i', 'n', 'f', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "yingatech.com", true */ 'y', 'i', 'n', 'g', 'a', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "yinlei.org", true */ 'y', 'i', 'n', 'l', 'e', 'i', '.', 'o', 'r', 'g', '\0',
+  /* "yizhu.com", true */ 'y', 'i', 'z', 'h', 'u', '.', 'c', 'o', 'm', '\0',
   /* "yksityisyydensuoja.fi", true */ 'y', 'k', 's', 'i', 't', 'y', 'i', 's', 'y', 'y', 'd', 'e', 'n', 's', 'u', 'o', 'j', 'a', '.', 'f', 'i', '\0',
   /* "ylinternal.com", true */ 'y', 'l', 'i', 'n', 't', 'e', 'r', 'n', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "ylk.io", true */ 'y', 'l', 'k', '.', 'i', 'o', '\0',
   /* "ymarion.de", true */ 'y', 'm', 'a', 'r', 'i', 'o', 'n', '.', 'd', 'e', '\0',
   /* "ympl.de", true */ 'y', 'm', 'p', 'l', '.', 'd', 'e', '\0',
   /* "ynode.com", true */ 'y', 'n', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "yntongji.com", true */ 'y', 'n', 't', 'o', 'n', 'g', 'j', 'i', '.', 'c', 'o', 'm', '\0',
   /* "yobai-grouprec.jp", true */ 'y', 'o', 'b', 'a', 'i', '-', 'g', 'r', 'o', 'u', 'p', 'r', 'e', 'c', '.', 'j', 'p', '\0',
   /* "yobai28.com", true */ 'y', 'o', 'b', 'a', 'i', '2', '8', '.', 'c', 'o', 'm', '\0',
   /* "yobst.tk", false */ 'y', 'o', 'b', 's', 't', '.', 't', 'k', '\0',
   /* "yoga-prive.de", true */ 'y', 'o', 'g', 'a', '-', 'p', 'r', 'i', 'v', 'e', '.', 'd', 'e', '\0',
   /* "yoga-school.xyz", true */ 'y', 'o', 'g', 'a', '-', 's', 'c', 'h', 'o', 'o', 'l', '.', 'x', 'y', 'z', '\0',
-  /* "yoga.is-an-engineer.com", true */ 'y', 'o', 'g', 'a', '.', 'i', 's', '-', 'a', 'n', '-', 'e', 'n', 'g', 'i', 'n', 'e', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "yogeshbeniwal.com", true */ 'y', 'o', 'g', 'e', 's', 'h', 'b', 'e', 'n', 'i', 'w', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "yoitsu.moe", true */ 'y', 'o', 'i', 't', 's', 'u', '.', 'm', 'o', 'e', '\0',
   /* "yolobert.de", true */ 'y', 'o', 'l', 'o', 'b', 'e', 'r', 't', '.', 'd', 'e', '\0',
   /* "yolocelebs.com", false */ 'y', 'o', 'l', 'o', 'c', 'e', 'l', 'e', 'b', 's', '.', 'c', 'o', 'm', '\0',
+  /* "yombo.net", true */ 'y', 'o', 'm', 'b', 'o', '.', 'n', 'e', 't', '\0',
   /* "yooooex.com", true */ 'y', 'o', 'o', 'o', 'o', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "yoramvandevelde.net", true */ 'y', 'o', 'r', 'a', 'm', 'v', 'a', 'n', 'd', 'e', 'v', 'e', 'l', 'd', 'e', '.', 'n', 'e', 't', '\0',
   /* "yorcom.nl", false */ 'y', 'o', 'r', 'c', 'o', 'm', '.', 'n', 'l', '\0',
   /* "yorkshireterrier.com.br", true */ 'y', 'o', 'r', 'k', 's', 'h', 'i', 'r', 'e', 't', 'e', 'r', 'r', 'i', 'e', 'r', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "yorname.ml", true */ 'y', 'o', 'r', 'n', 'a', 'm', 'e', '.', 'm', 'l', '\0',
   /* "yosemo.de", true */ 'y', 'o', 's', 'e', 'm', 'o', '.', 'd', 'e', '\0',
   /* "yotilab.com", true */ 'y', 'o', 't', 'i', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "yotilabs.com", true */ 'y', 'o', 't', 'i', 'l', 'a', 'b', 's', '.', 'c', 'o', 'm', '\0',
@@ -15756,17 +15712,17 @@ static const char kSTSHostTable[] = {
   /* "yourgame.co.il", true */ 'y', 'o', 'u', 'r', 'g', 'a', 'm', 'e', '.', 'c', 'o', '.', 'i', 'l', '\0',
   /* "yourself.today", true */ 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', '.', 't', 'o', 'd', 'a', 'y', '\0',
   /* "yourznc.com", true */ 'y', 'o', 'u', 'r', 'z', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "yout.com", true */ 'y', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "youtous.me", true */ 'y', 'o', 'u', 't', 'o', 'u', 's', '.', 'm', 'e', '\0',
   /* "youtubedownloader.com", true */ 'y', 'o', 'u', 't', 'u', 'b', 'e', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "youyoulemon.com", true */ 'y', 'o', 'u', 'y', 'o', 'u', 'l', 'e', 'm', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "yoyoost.duckdns.org", true */ 'y', 'o', 'y', 'o', 'o', 's', 't', '.', 'd', 'u', 'c', 'k', 'd', 'n', 's', '.', 'o', 'r', 'g', '\0',
-  /* "ypart.eu", true */ 'y', 'p', 'a', 'r', 't', '.', 'e', 'u', '\0',
+  /* "ypart.eu", false */ 'y', 'p', 'a', 'r', 't', '.', 'e', 'u', '\0',
   /* "ypcs.fi", true */ 'y', 'p', 'c', 's', '.', 'f', 'i', '\0',
   /* "ypid.de", true */ 'y', 'p', 'i', 'd', '.', 'd', 'e', '\0',
   /* "yplanapp.com", true */ 'y', 'p', 'l', 'a', 'n', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "ys-shop.biz", true */ 'y', 's', '-', 's', 'h', 'o', 'p', '.', 'b', 'i', 'z', '\0',
   /* "ytec.ca", true */ 'y', 't', 'e', 'c', '.', 'c', 'a', '\0',
   /* "ytuquelees.net", true */ 'y', 't', 'u', 'q', 'u', 'e', 'l', 'e', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "ytvwld.de", true */ 'y', 't', 'v', 'w', 'l', 'd', '.', 'd', 'e', '\0',
   /* "yuanben.io", true */ 'y', 'u', 'a', 'n', 'b', 'e', 'n', '.', 'i', 'o', '\0',
@@ -15894,17 +15850,16 @@ static const char kSTSHostTable[] = {
   /* "zigcore.com.br", true */ 'z', 'i', 'g', 'c', 'o', 'r', 'e', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "zigzagmart.com", true */ 'z', 'i', 'g', 'z', 'a', 'g', 'm', 'a', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "zihao.me", true */ 'z', 'i', 'h', 'a', 'o', '.', 'm', 'e', '\0',
   /* "ziin.de", false */ 'z', 'i', 'i', 'n', '.', 'd', 'e', '\0',
   /* "zilore.com", true */ 'z', 'i', 'l', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "zima.io", true */ 'z', 'i', 'm', 'a', '.', 'i', 'o', '\0',
   /* "zimiao.moe", true */ 'z', 'i', 'm', 'i', 'a', 'o', '.', 'm', 'o', 'e', '\0',
   /* "zinc-x.com", true */ 'z', 'i', 'n', 'c', '-', 'x', '.', 'c', 'o', 'm', '\0',
-  /* "zinenapse.info", true */ 'z', 'i', 'n', 'e', 'n', 'a', 'p', 's', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "zingarastore.com", true */ 'z', 'i', 'n', 'g', 'a', 'r', 'a', 's', 't', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "zingjerijk.nl", true */ 'z', 'i', 'n', 'g', 'j', 'e', 'r', 'i', 'j', 'k', '.', 'n', 'l', '\0',
   /* "zionvps.com", false */ 'z', 'i', 'o', 'n', 'v', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "zippy-download.com", true */ 'z', 'i', 'p', 'p', 'y', '-', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', '.', 'c', 'o', 'm', '\0',
   /* "zippy-download.de", true */ 'z', 'i', 'p', 'p', 'y', '-', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', '.', 'd', 'e', '\0',
   /* "ziptie.com", true */ 'z', 'i', 'p', 't', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "zittingskalender.be", true */ 'z', 'i', 't', 't', 'i', 'n', 'g', 's', 'k', 'a', 'l', 'e', 'n', 'd', 'e', 'r', '.', 'b', 'e', '\0',
   /* "zivy-ruzenec.cz", true */ 'z', 'i', 'v', 'y', '-', 'r', 'u', 'z', 'e', 'n', 'e', 'c', '.', 'c', 'z', '\0',
@@ -15967,16 +15922,17 @@ static const char kSTSHostTable[] = {
   /* "zuram.net", true */ 'z', 'u', 'r', 'a', 'm', '.', 'n', 'e', 't', '\0',
   /* "zuviel.space", true */ 'z', 'u', 'v', 'i', 'e', 'l', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "zvps.uk", true */ 'z', 'v', 'p', 's', '.', 'u', 'k', '\0',
   /* "zvxr.net", true */ 'z', 'v', 'x', 'r', '.', 'n', 'e', 't', '\0',
   /* "zwerimex.com", true */ 'z', 'w', 'e', 'r', 'i', 'm', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "zwollemag.nl", true */ 'z', 'w', 'o', 'l', 'l', 'e', 'm', 'a', 'g', '.', 'n', 'l', '\0',
   /* "zx6rninja.de", true */ 'z', 'x', '6', 'r', 'n', 'i', 'n', 'j', 'a', '.', 'd', 'e', '\0',
   /* "zybbo.com", true */ 'z', 'y', 'b', 'b', 'o', '.', 'c', 'o', 'm', '\0',
+  /* "zymbit.com", true */ 'z', 'y', 'm', 'b', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "zypgr.com", true */ 'z', 'y', 'p', 'g', 'r', '.', 'c', 'o', 'm', '\0',
   /* "zyria.de", true */ 'z', 'y', 'r', 'i', 'a', '.', 'd', 'e', '\0',
   /* "zzsec.org", true */ 'z', 'z', 's', 'e', 'c', '.', 'o', 'r', 'g', '\0',
   /* "zzw.ca", true */ 'z', 'z', 'w', '.', 'c', 'a', '\0',
 };
 
 struct nsSTSPreload
 {
@@ -16086,17 +16042,17 @@ static const nsSTSPreload kSTSPreloadLis
   { 1142, true },
   { 1150, true },
   { 1161, true },
   { 1171, true },
   { 1189, true },
   { 1205, true },
   { 1214, true },
   { 1222, true },
-  { 1230, false },
+  { 1230, true },
   { 1241, true },
   { 1259, true },
   { 1270, true },
   { 1279, true },
   { 1291, true },
   { 1305, true },
   { 1313, true },
   { 1323, false },
@@ -16120,19 +16076,19 @@ static const nsSTSPreload kSTSPreloadLis
   { 1537, true },
   { 1546, true },
   { 1559, true },
   { 1568, true },
   { 1587, true },
   { 1606, true },
   { 1618, true },
   { 1632, true },
-  { 1644, false },
+  { 1644, true },
   { 1655, true },
-  { 1664, false },
+  { 1664, true },
   { 1675, true },
   { 1688, true },
   { 1696, true },
   { 1711, true },
   { 1723, true },
   { 1736, true },
   { 1746, true },
   { 1760, true },
@@ -16629,15326 +16585,15282 @@ static const nsSTSPreload kSTSPreloadLis
   { 8632, true },
   { 8645, true },
   { 8657, true },
   { 8670, true },
   { 8690, true },
   { 8702, true },
   { 8714, true },
   { 8732, true },
-  { 8760, true },
-  { 8773, true },
-  { 8782, true },
-  { 8795, true },
-  { 8807, true },
-  { 8821, true },
-  { 8834, true },
-  { 8845, true },
-  { 8855, true },
-  { 8866, true },
-  { 8876, true },
-  { 8887, true },
-  { 8896, true },
-  { 8912, true },
+  { 8745, true },
+  { 8754, true },
+  { 8767, true },
+  { 8779, true },
+  { 8793, true },
+  { 8806, true },
+  { 8817, true },
+  { 8827, true },
+  { 8838, true },
+  { 8848, true },
+  { 8859, true },
+  { 8868, true },
+  { 8884, true },
+  { 8900, true },
   { 8928, true },
-  { 8956, true },
-  { 8975, true },
-  { 8990, true },
-  { 9010, true },
-  { 9022, true },
-  { 9034, true },
-  { 9047, true },
+  { 8947, true },
+  { 8962, true },
+  { 8982, true },
+  { 8994, true },
+  { 9006, true },
+  { 9019, true },
+  { 9028, true },
+  { 9037, true },
   { 9056, true },
-  { 9065, true },
-  { 9084, true },
-  { 9095, true },
-  { 9106, true },
-  { 9121, true },
+  { 9067, true },
+  { 9078, true },
+  { 9093, true },
+  { 9113, true },
+  { 9131, true },
   { 9141, true },
-  { 9159, true },
+  { 9158, true },
   { 9169, true },
-  { 9186, true },
-  { 9197, true },
-  { 9207, true },
-  { 9221, true },
-  { 9238, true },
-  { 9247, true },
-  { 9258, true },
-  { 9278, true },
-  { 9297, true },
-  { 9308, true },
-  { 9319, true },
-  { 9337, true },
-  { 9363, false },
-  { 9374, true },
-  { 9396, true },
-  { 9418, true },
-  { 9432, true },
+  { 9179, true },
+  { 9193, true },
+  { 9210, true },
+  { 9219, true },
+  { 9230, true },
+  { 9250, true },
+  { 9269, true },
+  { 9280, true },
+  { 9291, true },
+  { 9309, true },
+  { 9335, false },
+  { 9346, true },
+  { 9368, true },
+  { 9390, true },
+  { 9404, true },
+  { 9419, true },
+  { 9433, true },
   { 9447, true },
-  { 9461, true },
-  { 9475, true },
-  { 9490, true },
-  { 9511, true },
-  { 9521, true },
-  { 9532, true },
-  { 9553, true },
-  { 9571, true },
-  { 9589, true },
-  { 9602, true },
-  { 9610, true },
-  { 9623, true },
-  { 9637, true },
-  { 9655, true },
-  { 9677, true },
-  { 9692, true },
-  { 9709, true },
-  { 9731, true },
-  { 9746, true },
-  { 9763, true },
-  { 9784, true },
-  { 9800, true },
-  { 9827, true },
-  { 9843, true },
-  { 9860, true },
-  { 9875, true },
-  { 9889, true },
-  { 9906, true },
-  { 9923, true },
-  { 9935, true },
-  { 9953, true },
-  { 9970, true },
-  { 9985, true },
-  { 9999, true },
-  { 10016, true },
-  { 10034, true },
+  { 9462, true },
+  { 9483, true },
+  { 9493, true },
+  { 9504, true },
+  { 9525, true },
+  { 9543, true },
+  { 9561, true },
+  { 9574, true },
+  { 9582, true },
+  { 9595, true },
+  { 9609, true },
+  { 9627, true },
+  { 9649, true },
+  { 9664, true },
+  { 9681, true },
+  { 9703, true },
+  { 9718, true },
+  { 9735, true },
+  { 9756, true },
+  { 9772, true },
+  { 9799, true },
+  { 9815, true },
+  { 9832, true },
+  { 9847, true },
+  { 9861, true },
+  { 9878, true },
+  { 9895, true },
+  { 9907, true },
+  { 9925, true },
+  { 9942, true },
+  { 9957, true },
+  { 9971, true },
+  { 9988, true },
+  { 10006, true },
+  { 10021, true },
+  { 10033, true },
   { 10049, true },
-  { 10061, true },
-  { 10077, true },
-  { 10090, true },
-  { 10110, true },
-  { 10130, true },
-  { 10141, true },
-  { 10152, true },
-  { 10163, true },
+  { 10062, true },
+  { 10082, true },
+  { 10102, true },
+  { 10113, true },
+  { 10124, true },
+  { 10135, true },
+  { 10150, true },
+  { 10161, true },
   { 10178, true },
-  { 10189, true },
-  { 10206, true },
-  { 10222, true },
-  { 10233, true },
-  { 10244, true },
-  { 10256, true },
-  { 10269, true },
-  { 10288, true },
-  { 10299, true },
-  { 10312, true },
-  { 10326, true },
-  { 10344, false },
-  { 10357, false },
-  { 10366, true },
-  { 10383, true },
-  { 10400, true },
-  { 10420, true },
-  { 10431, true },
-  { 10442, true },
-  { 10460, true },
-  { 10492, true },
-  { 10519, true },
+  { 10194, true },
+  { 10205, true },
+  { 10216, true },
+  { 10228, true },
+  { 10241, true },
+  { 10260, true },
+  { 10271, true },
+  { 10284, true },
+  { 10298, true },
+  { 10316, false },
+  { 10329, false },
+  { 10338, true },
+  { 10355, true },
+  { 10372, true },
+  { 10392, true },
+  { 10403, true },
+  { 10414, true },
+  { 10432, true },
+  { 10464, true },
+  { 10491, true },
+  { 10503, true },
+  { 10513, true },
   { 10531, true },
-  { 10541, true },
-  { 10559, true },
-  { 10574, true },
-  { 10586, true },
-  { 10598, true },
-  { 10618, true },
-  { 10637, true },
-  { 10657, true },
-  { 10680, false },
-  { 10704, true },
-  { 10716, true },
-  { 10727, true },
+  { 10546, true },
+  { 10558, true },
+  { 10570, true },
+  { 10590, true },
+  { 10609, true },
+  { 10629, true },
+  { 10652, false },
+  { 10676, true },
+  { 10688, true },
+  { 10699, true },
+  { 10711, true },
+  { 10723, true },
   { 10739, true },
-  { 10751, true },
-  { 10767, true },
-  { 10784, true },
-  { 10803, true },
-  { 10817, true },
-  { 10828, true },
-  { 10844, true },
-  { 10863, true },
-  { 10876, true },
-  { 10889, true },
-  { 10901, false },
-  { 10925, true },
+  { 10756, true },
+  { 10775, true },
+  { 10789, true },
+  { 10800, true },
+  { 10816, true },
+  { 10835, true },
+  { 10848, true },
+  { 10861, true },
+  { 10873, false },
+  { 10897, true },
+  { 10913, true },
+  { 10929, true },
   { 10941, true },
   { 10957, true },
-  { 10969, true },
-  { 10985, true },
-  { 11002, true },
-  { 11016, true },
-  { 11031, true },
-  { 11046, true },
-  { 11057, true },
-  { 11075, true },
-  { 11091, true },
-  { 11112, true },
-  { 11126, true },
-  { 11141, true },
-  { 11151, true },
-  { 11164, true },
-  { 11181, false },
-  { 11188, true },
-  { 11201, true },
-  { 11214, true },
-  { 11230, true },
-  { 11241, true },
-  { 11253, true },
-  { 11264, true },
-  { 11271, true },
-  { 11279, false },
-  { 11290, true },
-  { 11301, true },
-  { 11314, false },
-  { 11322, true },
-  { 11332, true },
+  { 10974, true },
+  { 10988, true },
+  { 11003, true },
+  { 11018, true },
+  { 11029, true },
+  { 11047, true },
+  { 11063, true },
+  { 11084, true },
+  { 11098, true },
+  { 11113, true },
+  { 11123, true },
+  { 11136, true },
+  { 11153, false },
+  { 11160, true },
+  { 11173, true },
+  { 11186, true },
+  { 11202, true },
+  { 11213, true },
+  { 11225, true },
+  { 11236, true },
+  { 11243, true },
+  { 11251, false },
+  { 11262, true },
+  { 11273, true },
+  { 11286, false },
+  { 11294, true },
+  { 11304, true },
+  { 11311, true },
+  { 11325, false },
   { 11339, true },
-  { 11353, false },
-  { 11367, true },
-  { 11383, true },
-  { 11392, true },
-  { 11422, true },
-  { 11445, true },
-  { 11458, true },
-  { 11477, true },
-  { 11490, false },
-  { 11509, true },
-  { 11525, false },
-  { 11541, true },
-  { 11557, false },
-  { 11572, false },
+  { 11355, true },
+  { 11364, true },
+  { 11394, true },
+  { 11417, true },
+  { 11430, true },
+  { 11449, true },
+  { 11462, false },
+  { 11481, true },
+  { 11497, false },
+  { 11513, true },
+  { 11529, false },
+  { 11544, false },
+  { 11557, true },
+  { 11573, true },
   { 11585, true },
-  { 11601, true },
-  { 11613, true },
-  { 11632, true },
-  { 11653, true },
-  { 11666, true },
-  { 11679, true },
-  { 11689, true },
-  { 11700, true },
-  { 11711, true },
-  { 11725, true },
-  { 11741, true },
-  { 11758, false },
-  { 11775, true },
-  { 11801, true },
-  { 11814, true },
-  { 11828, true },
-  { 11847, true },
-  { 11868, true },
-  { 11880, true },
-  { 11894, true },
-  { 11918, true },
-  { 11927, true },
-  { 11940, true },
-  { 11953, true },
-  { 11967, true },
-  { 11978, true },
-  { 11987, true },
-  { 12000, true },
-  { 12013, true },
-  { 12025, true },
-  { 12046, false },
-  { 12064, true },
-  { 12087, true },
-  { 12114, true },
-  { 12133, true },
+  { 11604, true },
+  { 11625, true },
+  { 11638, true },
+  { 11651, true },
+  { 11661, true },
+  { 11672, true },
+  { 11683, true },
+  { 11697, true },
+  { 11713, true },
+  { 11730, false },
+  { 11747, true },
+  { 11773, true },
+  { 11786, true },
+  { 11800, true },
+  { 11819, true },
+  { 11840, true },
+  { 11852, true },
+  { 11866, true },
+  { 11890, true },
+  { 11899, true },
+  { 11912, true },
+  { 11925, true },
+  { 11939, true },
+  { 11950, true },
+  { 11959, true },
+  { 11972, true },
+  { 11985, true },
+  { 11997, true },
+  { 12018, false },
+  { 12036, true },
+  { 12059, true },
+  { 12086, true },
+  { 12105, true },
+  { 12125, true },
+  { 12136, true },
   { 12153, true },
-  { 12164, true },
-  { 12181, true },
-  { 12193, true },
-  { 12207, true },
-  { 12215, true },
-  { 12232, true },
-  { 12245, true },
-  { 12257, true },
-  { 12275, true },
-  { 12298, false },
+  { 12165, true },
+  { 12179, true },
+  { 12187, true },
+  { 12204, true },
+  { 12217, true },
+  { 12229, true },
+  { 12247, true },
+  { 12270, false },
+  { 12286, true },
+  { 12292, true },
+  { 12304, true },
   { 12314, true },
-  { 12320, true },
-  { 12332, true },
-  { 12342, true },
-  { 12354, true },
-  { 12365, true },
-  { 12375, true },
-  { 12392, true },
-  { 12411, true },
-  { 12423, true },
-  { 12435, true },
-  { 12448, true },
-  { 12477, true },
-  { 12503, true },
-  { 12519, true },
-  { 12532, true },
-  { 12546, true },
-  { 12562, true },
+  { 12326, true },
+  { 12337, true },
+  { 12347, true },
+  { 12364, true },
+  { 12383, true },
+  { 12395, true },
+  { 12407, true },
+  { 12420, true },
+  { 12446, true },
+  { 12462, true },
+  { 12475, true },
+  { 12489, true },
+  { 12505, true },
+  { 12524, true },
+  { 12548, true },
+  { 12561, true },
+  { 12572, true },
   { 12581, true },
-  { 12605, true },
-  { 12618, true },
-  { 12629, true },
-  { 12638, true },
-  { 12650, true },
-  { 12666, true },
-  { 12680, true },
-  { 12696, true },
-  { 12716, true },
-  { 12730, true },
-  { 12738, true },
-  { 12752, true },
-  { 12770, true },
-  { 12790, true },
-  { 12812, true },
-  { 12824, true },
-  { 12840, true },
-  { 12854, false },
-  { 12867, true },
-  { 12882, true },
-  { 12900, true },
-  { 12914, true },
-  { 12923, true },
-  { 12935, true },
-  { 12953, true },
-  { 12973, false },
-  { 12988, true },
-  { 13001, true },
-  { 13011, true },
-  { 13025, true },
-  { 13051, true },
-  { 13061, true },
-  { 13075, true },
-  { 13087, true },
-  { 13105, true },
-  { 13123, false },
-  { 13139, true },
-  { 13149, true },
-  { 13160, true },
-  { 13173, true },
-  { 13189, true },
-  { 13197, true },
+  { 12593, true },
+  { 12609, true },
+  { 12623, true },
+  { 12639, true },
+  { 12659, true },
+  { 12673, true },
+  { 12681, true },
+  { 12695, true },
+  { 12713, true },
+  { 12733, true },
+  { 12755, true },
+  { 12767, true },
+  { 12783, true },
+  { 12797, false },
+  { 12810, true },
+  { 12825, true },
+  { 12843, true },
+  { 12857, true },
+  { 12866, true },
+  { 12878, true },
+  { 12896, true },
+  { 12916, false },
+  { 12931, true },
+  { 12944, true },
+  { 12954, true },
+  { 12968, true },
+  { 12994, true },
+  { 13004, true },
+  { 13018, true },
+  { 13030, true },
+  { 13048, true },
+  { 13066, false },
+  { 13082, true },
+  { 13092, true },
+  { 13103, true },
+  { 13116, true },
+  { 13132, true },
+  { 13140, true },
+  { 13151, true },
+  { 13161, true },
+  { 13176, true },
+  { 13195, true },
   { 13208, true },
-  { 13218, true },
-  { 13233, true },
-  { 13252, true },
-  { 13265, true },
-  { 13283, false },
-  { 13298, true },
-  { 13318, true },
-  { 13329, true },
-  { 13341, true },
-  { 13354, true },
-  { 13374, false },
-  { 13388, true },
+  { 13226, false },
+  { 13241, true },
+  { 13261, true },
+  { 13272, true },
+  { 13284, true },
+  { 13297, true },
+  { 13317, false },
+  { 13331, true },
+  { 13344, true },
+  { 13362, true },
+  { 13376, true },
+  { 13389, true },
   { 13401, true },
-  { 13419, true },
-  { 13433, true },
-  { 13446, true },
-  { 13458, true },
+  { 13415, true },
+  { 13428, true },
+  { 13442, true },
+  { 13454, true },
   { 13472, true },
-  { 13485, true },
-  { 13499, true },
-  { 13511, true },
-  { 13529, true },
-  { 13541, true },
-  { 13552, true },
-  { 13563, true },
-  { 13576, true },
-  { 13589, true },
-  { 13604, true },
-  { 13615, true },
-  { 13626, true },
-  { 13637, true },
-  { 13647, true },
-  { 13668, true },
+  { 13484, true },
+  { 13495, true },
+  { 13506, true },
+  { 13519, true },
+  { 13532, true },
+  { 13547, true },
+  { 13558, true },
+  { 13569, true },
+  { 13580, true },
+  { 13590, true },
+  { 13611, true },
+  { 13620, true },
+  { 13627, true },
+  { 13641, false },
+  { 13654, true },
+  { 13664, true },
   { 13677, true },
-  { 13684, true },
-  { 13698, false },
-  { 13711, true },
-  { 13721, true },
-  { 13734, true },
-  { 13747, true },
-  { 13759, true },
-  { 13776, true },
-  { 13787, true },
-  { 13801, true },
-  { 13811, true },
-  { 13829, true },
+  { 13690, true },
+  { 13702, true },
+  { 13719, true },
+  { 13730, true },
+  { 13744, true },
+  { 13754, true },
+  { 13772, true },
+  { 13782, true },
+  { 13794, true },
+  { 13808, true },
+  { 13825, true },
   { 13839, true },
-  { 13851, true },
+  { 13849, true },
   { 13865, true },
-  { 13882, true },
-  { 13896, true },
-  { 13906, true },
-  { 13922, true },
-  { 13933, true },
-  { 13950, true },
-  { 13962, true },
-  { 13984, true },
+  { 13876, true },
+  { 13893, true },
+  { 13905, true },
+  { 13927, true },
+  { 13953, true },
+  { 13968, true },
+  { 13981, true },
+  { 13999, true },
   { 14010, true },
-  { 14025, true },
-  { 14038, true },
-  { 14056, true },
-  { 14067, true },
-  { 14077, true },
-  { 14087, true },
-  { 14106, true },
-  { 14126, true },
-  { 14138, true },
-  { 14152, true },
-  { 14159, true },
-  { 14169, true },
-  { 14179, true },
-  { 14201, true },
-  { 14213, true },
-  { 14231, true },
-  { 14243, true },
-  { 14256, true },
-  { 14284, true },
+  { 14020, true },
+  { 14030, true },
+  { 14049, true },
+  { 14069, true },
+  { 14081, true },
+  { 14095, true },
+  { 14102, true },
+  { 14112, true },
+  { 14122, true },
+  { 14144, true },
+  { 14156, true },
+  { 14174, true },
+  { 14186, true },
+  { 14199, true },
+  { 14227, true },
+  { 14236, true },
+  { 14246, true },
+  { 14254, true },
+  { 14266, false },
+  { 14286, true },
   { 14293, true },
-  { 14303, true },
-  { 14311, true },
-  { 14323, false },
-  { 14343, true },
+  { 14309, true },
+  { 14325, true },
+  { 14340, true },
   { 14350, true },
-  { 14366, true },
-  { 14382, true },
-  { 14397, true },
-  { 14407, true },
-  { 14425, true },
-  { 14440, true },
+  { 14368, true },
+  { 14383, true },
+  { 14410, true },
+  { 14427, true },
+  { 14445, true },
+  { 14453, true },
   { 14467, true },
-  { 14484, true },
-  { 14502, true },
-  { 14510, true },
-  { 14524, true },
-  { 14535, true },
-  { 14544, true },
-  { 14571, true },
-  { 14579, true },
-  { 14589, true },
-  { 14605, true },
+  { 14478, true },
+  { 14487, true },
+  { 14514, true },
+  { 14522, true },
+  { 14532, true },
+  { 14548, true },
+  { 14560, true },
+  { 14575, true },
+  { 14587, true },
+  { 14602, true },
   { 14617, true },
-  { 14632, true },
-  { 14644, true },
-  { 14659, true },
-  { 14674, true },
-  { 14686, true },
-  { 14707, true },
-  { 14724, true },
-  { 14738, true },
-  { 14750, true },
-  { 14764, true },
-  { 14774, true },
-  { 14784, true },
-  { 14799, true },
-  { 14814, true },
-  { 14825, true },
-  { 14838, true },
-  { 14851, true },
-  { 14863, true },
-  { 14871, true },
-  { 14884, true },
-  { 14902, true },
-  { 14923, true },
-  { 14937, true },
-  { 14953, true },
-  { 14965, true },
-  { 14977, true },
+  { 14629, true },
+  { 14650, true },
+  { 14667, true },
+  { 14681, true },
+  { 14693, true },
+  { 14703, true },
+  { 14713, true },
+  { 14728, true },
+  { 14743, true },
+  { 14754, true },
+  { 14767, true },
+  { 14780, true },
+  { 14792, true },
+  { 14800, true },
+  { 14813, true },
+  { 14831, true },
+  { 14852, true },
+  { 14866, true },
+  { 14882, true },
+  { 14894, true },
+  { 14906, true },
+  { 14918, true },
+  { 14930, true },
+  { 14940, true },
+  { 14950, true },
+  { 14961, true },
+  { 14976, true },
   { 14989, true },
-  { 15001, true },
-  { 15011, true },
-  { 15021, true },
-  { 15032, true },
-  { 15047, true },
-  { 15060, true },
-  { 15079, true },
-  { 15091, true },
+  { 15008, true },
+  { 15020, true },
+  { 15036, true },
+  { 15048, true },
+  { 15064, true },
+  { 15083, true },
+  { 15096, true },
   { 15107, true },
-  { 15119, true },
-  { 15135, true },
-  { 15154, true },
-  { 15167, true },
+  { 15125, true },
+  { 15155, true },
   { 15178, true },
-  { 15189, true },
-  { 15207, true },
-  { 15237, true },
-  { 15260, true },
-  { 15273, false },
-  { 15281, true },
-  { 15293, true },
-  { 15303, true },
-  { 15313, true },
-  { 15327, true },
-  { 15343, true },
+  { 15191, false },
+  { 15199, true },
+  { 15211, true },
+  { 15221, true },
+  { 15231, true },
+  { 15245, true },
+  { 15261, true },
+  { 15290, true },
+  { 15306, true },
+  { 15322, true },
+  { 15340, true },
+  { 15361, true },
   { 15372, true },
-  { 15388, true },
-  { 15404, true },
-  { 15422, true },
-  { 15443, true },
-  { 15454, true },
-  { 15466, true },
+  { 15384, true },
+  { 15396, true },
+  { 15414, true },
+  { 15432, true },
+  { 15453, true },
   { 15478, true },
   { 15496, true },
-  { 15514, true },
-  { 15535, true },
-  { 15560, true },
-  { 15578, true },
-  { 15592, true },
-  { 15617, true },
-  { 15630, true },
-  { 15645, true },
-  { 15660, true },
-  { 15673, true },
-  { 15686, true },
-  { 15699, true },
-  { 15712, true },
-  { 15725, true },
-  { 15738, true },
-  { 15749, true },
-  { 15765, true },
-  { 15775, true },
-  { 15787, true },
-  { 15804, true },
-  { 15816, true },
-  { 15829, true },
-  { 15837, true },
-  { 15848, true },
-  { 15859, true },
-  { 15877, true },
-  { 15892, true },
-  { 15910, true },
+  { 15521, true },
+  { 15534, true },
+  { 15549, true },
+  { 15564, true },
+  { 15577, true },
+  { 15590, true },
+  { 15603, true },
+  { 15616, true },
+  { 15629, true },
+  { 15642, true },
+  { 15653, true },
+  { 15669, true },
+  { 15679, true },
+  { 15691, true },
+  { 15708, true },
+  { 15720, true },
+  { 15733, true },
+  { 15741, true },
+  { 15752, true },
+  { 15763, true },
+  { 15781, true },
+  { 15796, true },
+  { 15814, true },
+  { 15824, true },
+  { 15834, true },
+  { 15843, true },
+  { 15865, true },
+  { 15879, true },
+  { 15890, true },
+  { 15898, true },
+  { 15908, true },
   { 15920, true },
-  { 15930, true },
-  { 15939, true },
+  { 15928, true },
+  { 15938, true },
+  { 15953, true },
   { 15961, true },
-  { 15975, true },
   { 15986, true },
-  { 15994, true },
-  { 16004, true },
-  { 16016, true },
-  { 16024, true },
-  { 16034, true },
-  { 16049, true },
+  { 16002, true },
+  { 16026, true },
+  { 16033, true },
+  { 16041, true },
+  { 16050, true },
   { 16057, true },
-  { 16082, true },
-  { 16098, true },
-  { 16122, true },
-  { 16129, true },
-  { 16137, true },
-  { 16146, true },
+  { 16069, true },
+  { 16080, true },
+  { 16091, true },
+  { 16103, true },
+  { 16115, false },
+  { 16124, true },
+  { 16140, true },
   { 16153, true },
-  { 16165, true },
-  { 16176, true },
-  { 16187, true },
-  { 16199, true },
-  { 16211, false },
-  { 16220, true },
-  { 16236, true },
-  { 16249, true },
-  { 16258, true },
-  { 16267, true },
-  { 16282, true },
-  { 16292, true },
-  { 16310, false },
-  { 16326, true },
+  { 16162, true },
+  { 16171, true },
+  { 16186, true },
+  { 16196, true },
+  { 16214, false },
+  { 16230, true },
+  { 16242, true },
+  { 16252, true },
+  { 16262, true },
+  { 16272, true },
+  { 16284, true },
+  { 16297, true },
+  { 16310, true },
+  { 16320, true },
+  { 16330, true },
   { 16338, true },
-  { 16348, true },
-  { 16358, true },
-  { 16368, true },
-  { 16380, true },
-  { 16393, true },
-  { 16406, true },
-  { 16416, true },
-  { 16426, true },
-  { 16434, true },
-  { 16446, true },
-  { 16458, true },
-  { 16471, true },
-  { 16487, true },
-  { 16503, true },
-  { 16514, false },
-  { 16524, true },
-  { 16541, true },
-  { 16555, true },
-  { 16585, true },
-  { 16600, false },
-  { 16609, true },
+  { 16350, true },
+  { 16362, true },
+  { 16375, true },
+  { 16391, true },
+  { 16407, true },
+  { 16418, false },
+  { 16428, true },
+  { 16445, true },
+  { 16459, true },
+  { 16489, true },
+  { 16504, false },
+  { 16513, true },
+  { 16527, true },
+  { 16548, true },
+  { 16559, true },
+  { 16572, true },
+  { 16596, true },
+  { 16610, true },
   { 16623, true },
-  { 16637, true },
+  { 16635, true },
   { 16658, true },
   { 16669, true },
-  { 16682, true },
-  { 16706, true },
-  { 16720, true },
-  { 16733, true },
-  { 16745, true },
-  { 16768, true },
+  { 16689, true },
+  { 16707, true },
+  { 16725, true },
+  { 16740, true },
+  { 16755, true },
   { 16779, true },
+  { 16789, true },
   { 16799, true },
-  { 16817, true },
-  { 16835, true },
-  { 16850, true },
-  { 16865, true },
-  { 16889, true },
-  { 16899, true },
-  { 16909, true },
-  { 16919, true },
-  { 16932, true },
-  { 16943, true },
-  { 16968, true },
-  { 16997, true },
-  { 17010, true },
-  { 17020, true },
-  { 17028, true },
-  { 17037, true },
-  { 17051, false },
-  { 17068, true },
-  { 17080, true },
-  { 17095, true },
-  { 17102, true },
-  { 17115, true },
-  { 17127, true },
-  { 17141, true },
+  { 16809, true },
+  { 16822, true },
+  { 16833, true },
+  { 16858, true },
+  { 16887, true },
+  { 16900, true },
+  { 16910, true },
+  { 16918, true },
+  { 16927, true },
+  { 16941, false },
+  { 16958, true },
+  { 16970, true },
+  { 16985, true },
+  { 16992, true },
+  { 17005, true },
+  { 17017, true },
+  { 17031, true },
+  { 17039, true },
+  { 17048, true },
+  { 17061, true },
+  { 17073, true },
+  { 17084, true },
+  { 17094, true },
+  { 17109, true },
+  { 17126, true },
+  { 17139, true },
   { 17149, true },
-  { 17158, true },
-  { 17171, true },
-  { 17183, true },
-  { 17194, true },
-  { 17204, true },
-  { 17219, true },
-  { 17236, true },
-  { 17249, true },
-  { 17259, true },
-  { 17272, true },
-  { 17286, true },
-  { 17300, true },
-  { 17312, true },
-  { 17327, true },
-  { 17343, true },
-  { 17358, true },
-  { 17372, true },
-  { 17385, true },
-  { 17401, true },
-  { 17413, true },
-  { 17427, true },
-  { 17439, true },
-  { 17451, true },
-  { 17462, true },
-  { 17473, true },
-  { 17488, false },
-  { 17503, false },
-  { 17519, true },
+  { 17162, true },
+  { 17176, true },
+  { 17190, true },
+  { 17202, true },
+  { 17217, true },
+  { 17233, true },
+  { 17248, true },
+  { 17262, true },
+  { 17275, true },
+  { 17291, true },
+  { 17303, true },
+  { 17317, true },
+  { 17329, true },
+  { 17341, true },
+  { 17352, true },
+  { 17363, true },
+  { 17378, false },
+  { 17393, false },
+  { 17409, true },
+  { 17431, true },
+  { 17449, true },
+  { 17466, true },
+  { 17484, true },
+  { 17495, true },
+  { 17508, true },
+  { 17525, true },
   { 17541, true },
-  { 17559, true },
+  { 17561, true },
   { 17576, true },
-  { 17594, true },
+  { 17591, true },
   { 17605, true },
-  { 17618, true },
-  { 17635, true },
-  { 17651, true },
-  { 17671, true },
-  { 17686, true },
-  { 17701, true },
-  { 17715, true },
-  { 17726, true },
-  { 17738, true },
-  { 17751, true },
-  { 17764, true },
-  { 17778, true },
-  { 17791, true },
-  { 17809, true },
-  { 17827, true },
+  { 17616, true },
+  { 17628, true },
+  { 17641, true },
+  { 17654, true },
+  { 17668, true },
+  { 17681, true },
+  { 17699, true },
+  { 17717, true },
+  { 17735, true },
+  { 17752, true },
+  { 17762, true },
+  { 17775, true },
+  { 17784, true },
+  { 17799, true },
+  { 17810, false },
+  { 17820, true },
+  { 17831, true },
   { 17845, true },
-  { 17862, true },
-  { 17872, true },
-  { 17885, true },
-  { 17894, true },
-  { 17909, true },
-  { 17920, false },
-  { 17930, true },
-  { 17941, true },
-  { 17955, true },
-  { 17968, true },
-  { 17978, true },
-  { 17991, true },
-  { 18005, true },
-  { 18016, true },
-  { 18026, true },
-  { 18044, true },
-  { 18053, true },
-  { 18070, true },
-  { 18090, true },
-  { 18109, true },
-  { 18124, true },
-  { 18144, true },
-  { 18162, true },
-  { 18173, true },
-  { 18186, true },
-  { 18201, true },
-  { 18214, true },
-  { 18225, true },
-  { 18239, true },
-  { 18263, true },
-  { 18289, true },
+  { 17858, true },
+  { 17868, true },
+  { 17881, true },
+  { 17895, true },
+  { 17906, true },
+  { 17916, true },
+  { 17934, true },
+  { 17943, true },
+  { 17960, true },
+  { 17980, true },
+  { 17999, true },
+  { 18014, true },
+  { 18034, true },
+  { 18052, true },
+  { 18063, true },
+  { 18076, true },
+  { 18091, true },
+  { 18104, true },
+  { 18115, true },
+  { 18129, true },
+  { 18153, true },
+  { 18179, true },
+  { 18187, true },
+  { 18197, true },
+  { 18208, true },
+  { 18219, true },
+  { 18246, true },
+  { 18258, true },
+  { 18270, true },
+  { 18279, true },
+  { 18288, true },
   { 18297, true },
-  { 18307, true },
-  { 18318, true },
-  { 18329, true },
-  { 18356, true },
-  { 18368, true },
-  { 18380, true },
-  { 18389, true },
-  { 18398, true },
-  { 18407, true },
-  { 18422, false },
-  { 18433, true },
-  { 18442, true },
-  { 18454, true },
-  { 18463, true },
-  { 18473, true },
-  { 18484, true },
-  { 18496, true },
-  { 18506, true },
-  { 18518, true },
-  { 18532, true },
-  { 18542, true },
-  { 18552, true },
-  { 18565, true },
-  { 18575, false },
-  { 18586, true },
-  { 18604, true },
-  { 18614, true },
-  { 18621, true },
-  { 18633, true },
-  { 18648, true },
-  { 18669, true },
-  { 18682, true },
-  { 18695, true },
-  { 18712, true },
-  { 18724, true },
-  { 18737, false },
-  { 18751, true },
-  { 18763, true },
-  { 18777, true },
-  { 18795, true },
-  { 18807, true },
-  { 18820, true },
-  { 18829, true },
-  { 18847, true },
-  { 18858, true },
-  { 18869, true },
+  { 18312, false },
+  { 18323, true },
+  { 18332, true },
+  { 18344, true },
+  { 18353, true },
+  { 18363, true },
+  { 18374, true },
+  { 18386, true },
+  { 18396, true },
+  { 18410, true },
+  { 18420, true },
+  { 18430, true },
+  { 18443, true },
+  { 18453, false },
+  { 18464, true },
+  { 18482, true },
+  { 18492, true },
+  { 18499, true },
+  { 18511, true },
+  { 18526, true },
+  { 18547, true },
+  { 18560, true },
+  { 18573, true },
+  { 18590, true },
+  { 18602, true },
+  { 18615, false },
+  { 18629, true },
+  { 18641, true },
+  { 18655, true },
+  { 18673, true },
+  { 18685, true },
+  { 18698, true },
+  { 18707, true },
+  { 18725, true },
+  { 18736, true },
+  { 18747, true },
+  { 18772, true },
+  { 18786, true },
+  { 18799, true },
+  { 18813, true },
+  { 18826, true },
+  { 18840, true },
+  { 18852, true },
+  { 18868, false },
+  { 18879, true },
   { 18894, true },
-  { 18908, true },
-  { 18921, true },
-  { 18935, true },
-  { 18948, true },
-  { 18962, true },
-  { 18974, true },
-  { 18990, false },
-  { 19001, true },
-  { 19016, true },
-  { 19029, true },
-  { 19042, true },
-  { 19058, true },
-  { 19080, true },
+  { 18907, true },
+  { 18920, true },
+  { 18936, true },
+  { 18958, true },
+  { 18970, true },
+  { 18983, true },
+  { 18998, true },
+  { 19010, true },
+  { 19026, true },
+  { 19039, true },
+  { 19049, true },
+  { 19077, true },
   { 19092, true },
-  { 19105, true },
-  { 19120, true },
-  { 19132, true },
-  { 19148, true },
-  { 19161, true },
-  { 19171, true },
-  { 19199, true },
-  { 19214, true },
-  { 19230, true },
-  { 19241, true },
-  { 19252, true },
-  { 19262, true },
-  { 19275, true },
-  { 19285, false },
-  { 19299, true },
-  { 19308, true },
-  { 19320, false },
-  { 19339, true },
+  { 19108, true },
+  { 19119, true },
+  { 19130, true },
+  { 19140, true },
+  { 19153, true },
+  { 19163, false },
+  { 19177, true },
+  { 19186, true },
+  { 19198, false },
+  { 19217, true },
+  { 19244, true },
+  { 19265, true },
+  { 19281, true },
+  { 19292, true },
+  { 19310, true },
+  { 19325, true },
+  { 19336, true },
+  { 19351, false },
   { 19366, true },
+  { 19376, true },
   { 19387, true },
-  { 19403, true },
-  { 19414, true },
-  { 19432, true },
-  { 19447, true },
-  { 19458, true },
-  { 19473, false },
-  { 19488, true },
-  { 19498, true },
-  { 19509, true },
-  { 19523, true },
-  { 19545, true },
-  { 19558, true },
-  { 19573, true },
-  { 19588, true },
-  { 19609, true },
-  { 19619, true },
-  { 19633, true },
-  { 19646, true },
-  { 19661, true },
-  { 19682, true },
-  { 19700, true },
-  { 19712, true },
-  { 19730, true },
-  { 19748, true },
-  { 19762, true },
-  { 19781, false },
-  { 19795, true },
+  { 19401, true },
+  { 19423, true },
+  { 19436, true },
+  { 19451, true },
+  { 19466, true },
+  { 19487, true },
+  { 19497, true },
+  { 19511, true },
+  { 19524, true },
+  { 19539, true },
+  { 19560, true },
+  { 19578, true },
+  { 19590, true },
+  { 19608, true },
+  { 19626, true },
+  { 19640, true },
+  { 19659, false },
+  { 19673, true },
+  { 19683, true },
+  { 19694, true },
+  { 19704, true },
+  { 19717, true },
+  { 19732, true },
+  { 19746, true },
+  { 19759, true },
+  { 19772, true },
+  { 19789, true },
   { 19805, true },
-  { 19816, true },
-  { 19826, true },
-  { 19839, true },
-  { 19854, true },
-  { 19868, true },
-  { 19881, true },
-  { 19894, true },
+  { 19815, true },
+  { 19828, true },
+  { 19845, true },
+  { 19859, true },
+  { 19877, true },
+  { 19897, true },
   { 19911, true },
   { 19927, true },
-  { 19937, true },
-  { 19950, true },
-  { 19967, true },
-  { 19981, true },
-  { 19999, true },
-  { 20019, true },
-  { 20033, true },
-  { 20049, true },
-  { 20058, true },
-  { 20066, true },
-  { 20075, true },
-  { 20084, true },
-  { 20101, true },
-  { 20114, true },
-  { 20124, true },
-  { 20134, true },
-  { 20144, true },
+  { 19936, true },
+  { 19944, true },
+  { 19953, true },
+  { 19962, true },
+  { 19979, true },
+  { 19992, true },
+  { 20002, true },
+  { 20012, true },
+  { 20022, true },
+  { 20040, true },
+  { 20059, true },
+  { 20083, true },
+  { 20098, true },
+  { 20116, true },
+  { 20132, true },
+  { 20150, true },
   { 20162, true },
-  { 20181, true },
-  { 20205, true },
-  { 20220, true },
-  { 20238, true },
-  { 20254, true },
-  { 20272, true },
-  { 20284, true },
-  { 20307, true },
-  { 20329, true },
-  { 20355, true },
-  { 20373, true },
-  { 20395, true },
-  { 20409, true },
-  { 20422, true },
-  { 20436, true },
-  { 20454, true },
-  { 20469, true },
-  { 20481, true },
-  { 20503, true },
-  { 20520, true },
-  { 20535, true },
-  { 20556, true },
-  { 20570, true },
-  { 20589, true },
-  { 20610, true },
-  { 20627, true },
-  { 20641, true },
-  { 20662, true },
-  { 20675, true },
-  { 20691, true },
-  { 20704, true },
-  { 20723, true },
-  { 20740, true },
-  { 20758, true },
-  { 20776, true },
+  { 20185, true },
+  { 20207, true },
+  { 20233, true },
+  { 20251, true },
+  { 20273, true },
+  { 20287, true },
+  { 20300, true },
+  { 20314, true },
+  { 20332, true },
+  { 20347, true },
+  { 20359, true },
+  { 20381, true },
+  { 20398, true },
+  { 20413, true },
+  { 20434, true },
+  { 20448, true },
+  { 20467, true },
+  { 20488, true },
+  { 20505, true },
+  { 20519, true },
+  { 20540, true },
+  { 20553, true },
+  { 20569, true },
+  { 20582, true },
+  { 20601, true },
+  { 20618, true },
+  { 20636, true },
+  { 20654, true },
+  { 20663, true },
+  { 20679, true },
+  { 20695, true },
+  { 20714, true },
+  { 20732, true },
+  { 20748, true },
+  { 20762, true },
+  { 20774, true },
   { 20785, true },
-  { 20801, true },
-  { 20817, true },
-  { 20836, true },
-  { 20854, true },
-  { 20870, true },
-  { 20884, true },
-  { 20896, true },
-  { 20907, true },
-  { 20921, true },
-  { 20931, true },
-  { 20942, true },
-  { 20951, false },
-  { 20960, true },
-  { 20974, true },
-  { 20988, true },
-  { 21000, true },
-  { 21015, true },
-  { 21027, true },
-  { 21042, true },
-  { 21055, true },
-  { 21066, true },
-  { 21089, true },
+  { 20799, true },
+  { 20809, true },
+  { 20820, true },
+  { 20829, false },
+  { 20838, true },
+  { 20852, true },
+  { 20866, true },
+  { 20878, true },
+  { 20893, true },
+  { 20905, true },
+  { 20920, true },
+  { 20933, true },
+  { 20944, true },
+  { 20967, true },
+  { 20979, true },
+  { 20994, true },
+  { 21010, true },
+  { 21019, true },
+  { 21034, true },
+  { 21050, true },
+  { 21063, true },
+  { 21078, true },
+  { 21091, true },
   { 21101, true },
-  { 21116, true },
-  { 21132, true },
-  { 21141, true },
-  { 21156, true },
-  { 21172, true },
+  { 21121, true },
+  { 21134, true },
+  { 21153, true },
+  { 21163, true },
+  { 21173, true },
   { 21185, true },
   { 21200, true },
-  { 21213, true },
-  { 21223, true },
-  { 21243, true },
-  { 21256, true },
-  { 21275, true },
-  { 21285, true },
-  { 21295, true },
-  { 21307, true },
-  { 21322, true },
-  { 21337, true },
-  { 21352, true },
-  { 21362, true },
-  { 21377, true },
-  { 21393, true },
-  { 21412, true },
-  { 21421, true },
-  { 21450, true },
-  { 21463, true },
-  { 21483, true },
-  { 21498, true },
-  { 21511, true },
-  { 21526, true },
-  { 21541, true },
-  { 21556, true },
-  { 21566, true },
-  { 21576, true },
-  { 21591, true },
-  { 21613, true },
-  { 21628, true },
-  { 21641, true },
-  { 21668, true },
-  { 21682, true },
-  { 21694, true },
-  { 21709, true },
-  { 21723, true },
-  { 21733, true },
-  { 21754, true },
-  { 21771, true },
-  { 21793, true },
-  { 21811, false },
-  { 21830, true },
-  { 21844, true },
-  { 21856, true },
-  { 21871, true },
-  { 21888, true },
-  { 21903, true },
-  { 21914, true },
-  { 21924, true },
-  { 21940, true },
-  { 21958, true },
-  { 21970, true },
-  { 21982, true },
-  { 22012, true },
-  { 22026, false },
-  { 22039, true },
-  { 22057, true },
-  { 22070, true },
-  { 22082, true },
-  { 22105, true },
-  { 22124, true },
-  { 22137, true },
-  { 22145, false },
-  { 22156, true },
-  { 22174, true },
-  { 22198, true },
+  { 21215, true },
+  { 21230, true },
+  { 21240, true },
+  { 21255, true },
+  { 21271, true },
+  { 21290, true },
+  { 21299, true },
+  { 21328, true },
+  { 21341, true },
+  { 21361, true },
+  { 21376, true },
+  { 21389, true },
+  { 21404, true },
+  { 21419, true },
+  { 21434, true },
+  { 21444, true },
+  { 21454, true },
+  { 21469, true },
+  { 21491, true },
+  { 21506, true },
+  { 21519, true },
+  { 21546, true },
+  { 21560, true },
+  { 21572, true },
+  { 21587, true },
+  { 21601, true },
+  { 21611, true },
+  { 21632, true },
+  { 21649, true },
+  { 21671, true },
+  { 21689, false },
+  { 21708, true },
+  { 21722, true },
+  { 21734, true },
+  { 21749, true },
+  { 21766, true },
+  { 21781, true },
+  { 21792, true },
+  { 21802, true },
+  { 21818, true },
+  { 21836, true },
+  { 21848, true },
+  { 21860, true },
+  { 21890, true },
+  { 21904, false },
+  { 21917, true },
+  { 21935, true },
+  { 21948, true },
+  { 21960, true },
+  { 21983, true },
+  { 22002, true },
+  { 22015, true },
+  { 22023, false },
+  { 22034, true },
+  { 22052, true },
+  { 22076, true },
+  { 22096, true },
+  { 22108, true },
+  { 22129, true },
+  { 22140, true },
+  { 22157, true },
+  { 22175, true },
+  { 22188, true },
+  { 22204, true },
   { 22218, true },
-  { 22230, true },
-  { 22251, true },
-  { 22262, true },
-  { 22279, true },
-  { 22297, true },
-  { 22310, true },
-  { 22326, true },
-  { 22340, true },
-  { 22357, true },
-  { 22368, true },
-  { 22377, true },
-  { 22389, true },
-  { 22400, true },
-  { 22410, true },
-  { 22424, true },
-  { 22442, true },
-  { 22455, true },
-  { 22466, true },
-  { 22480, true },
-  { 22492, true },
-  { 22503, true },
-  { 22514, true },
-  { 22527, true },
-  { 22539, true },
-  { 22550, true },
-  { 22569, true },
-  { 22585, true },
-  { 22599, true },
-  { 22611, true },
-  { 22626, true },
-  { 22635, true },
+  { 22235, true },
+  { 22246, true },
+  { 22255, true },
+  { 22267, true },
+  { 22278, true },
+  { 22288, true },
+  { 22302, true },
+  { 22320, true },
+  { 22333, true },
+  { 22344, true },
+  { 22358, true },
+  { 22370, true },
+  { 22381, true },
+  { 22392, true },
+  { 22405, true },
+  { 22417, true },
+  { 22428, true },
+  { 22447, true },
+  { 22463, true },
+  { 22477, true },
+  { 22489, true },
+  { 22504, true },
+  { 22513, true },
+  { 22528, true },
+  { 22542, true },
+  { 22555, true },
+  { 22567, true },
+  { 22579, true },
+  { 22593, true },
+  { 22604, true },
+  { 22618, true },
+  { 22629, true },
+  { 22640, true },
   { 22650, true },
-  { 22664, true },
-  { 22677, true },
-  { 22689, true },
-  { 22701, true },
-  { 22715, true },
-  { 22726, true },
-  { 22740, true },
-  { 22751, true },
-  { 22762, true },
-  { 22772, true },
-  { 22782, true },
-  { 22795, true },
-  { 22806, true },
-  { 22817, true },
-  { 22828, true },
-  { 22841, true },
-  { 22855, true },
+  { 22660, true },
+  { 22673, true },
+  { 22684, true },
+  { 22695, true },
+  { 22706, true },
+  { 22719, true },
+  { 22733, true },
+  { 22745, true },
+  { 22759, true },
+  { 22771, true },
+  { 22784, true },
+  { 22809, true },
+  { 22826, true },
+  { 22837, true },
+  { 22848, true },
   { 22867, true },
-  { 22881, true },
+  { 22883, true },
   { 22893, true },
-  { 22906, true },
+  { 22904, true },
+  { 22916, true },
   { 22931, true },
-  { 22948, true },
-  { 22959, true },
-  { 22970, true },
-  { 22989, true },
-  { 23005, true },
-  { 23015, true },
-  { 23026, true },
-  { 23038, true },
-  { 23053, true },
-  { 23072, true },
-  { 23089, true },
-  { 23107, false },
-  { 23115, true },
-  { 23128, true },
-  { 23140, true },
-  { 23152, true },
-  { 23166, true },
-  { 23179, true },
-  { 23192, true },
-  { 23208, true },
-  { 23222, true },
-  { 23239, true },
-  { 23256, true },
-  { 23269, true },
-  { 23282, true },
-  { 23295, true },
-  { 23308, true },
-  { 23321, true },
-  { 23334, true },
-  { 23347, true },
-  { 23360, true },
+  { 22950, true },
+  { 22967, true },
+  { 22985, false },
+  { 22993, true },
+  { 23006, true },
+  { 23018, true },
+  { 23030, true },
+  { 23044, true },
+  { 23057, true },
+  { 23070, true },
+  { 23086, true },
+  { 23100, true },
+  { 23117, true },
+  { 23134, true },
+  { 23147, true },
+  { 23160, true },
+  { 23173, true },
+  { 23186, true },
+  { 23199, true },
+  { 23212, true },
+  { 23225, true },
+  { 23238, true },
+  { 23251, true },
+  { 23264, true },
+  { 23277, true },
+  { 23290, true },
+  { 23303, true },
+  { 23316, true },
+  { 23333, true },
+  { 23348, true },
+  { 23361, true },
   { 23373, true },
-  { 23386, true },
-  { 23399, true },
-  { 23412, true },
-  { 23425, true },
-  { 23438, true },
-  { 23455, true },
-  { 23470, true },
-  { 23487, true },
-  { 23500, true },
-  { 23512, true },
-  { 23534, true },
-  { 23546, true },
-  { 23569, true },
-  { 23593, true },
-  { 23611, true },
-  { 23624, true },
-  { 23643, true },
-  { 23664, true },
-  { 23677, true },
-  { 23692, true },
-  { 23710, true },
-  { 23726, true },
-  { 23742, true },
-  { 23752, true },
-  { 23766, true },
-  { 23781, true },
-  { 23800, true },
-  { 23817, true },
-  { 23828, true },
-  { 23844, true },
-  { 23856, true },
-  { 23866, true },
-  { 23882, true },
-  { 23892, true },
-  { 23913, true },
-  { 23935, true },
-  { 23947, true },
-  { 23958, true },
-  { 23973, true },
-  { 23984, true },
-  { 23999, true },
-  { 24014, true },
-  { 24026, true },
-  { 24045, true },
-  { 24058, true },
-  { 24072, true },
-  { 24094, true },
+  { 23395, true },
+  { 23407, true },
+  { 23430, true },
+  { 23454, true },
+  { 23472, true },
+  { 23485, true },
+  { 23504, true },
+  { 23525, true },
+  { 23538, true },
+  { 23553, true },
+  { 23571, true },
+  { 23587, true },
+  { 23603, true },
+  { 23613, true },
+  { 23627, true },
+  { 23642, true },
+  { 23661, true },
+  { 23678, true },
+  { 23689, true },
+  { 23705, true },
+  { 23717, true },
+  { 23727, true },
+  { 23743, true },
+  { 23753, true },
+  { 23774, true },
+  { 23796, true },
+  { 23808, true },
+  { 23819, true },
+  { 23834, true },
+  { 23845, true },
+  { 23860, true },
+  { 23875, true },
+  { 23887, true },
+  { 23906, true },
+  { 23919, true },
+  { 23933, true },
+  { 23955, true },
+  { 23974, true },
+  { 23994, true },
+  { 24002, true },
+  { 24015, true },
+  { 24029, true },
+  { 24040, true },
+  { 24053, true },
+  { 24068, true },
+  { 24084, true },
+  { 24099, true },
   { 24113, true },
-  { 24133, true },
-  { 24141, true },
-  { 24154, true },
-  { 24168, true },
-  { 24179, true },
-  { 24192, true },
+  { 24125, true },
+  { 24142, false },
+  { 24158, false },
+  { 24178, true },
+  { 24191, true },
   { 24207, true },
-  { 24223, true },
-  { 24238, true },
-  { 24252, true },
-  { 24264, true },
-  { 24281, false },
-  { 24297, false },
+  { 24232, true },
+  { 24245, true },
+  { 24258, true },
+  { 24269, true },
+  { 24278, true },
+  { 24287, true },