Merge mozilla-central to mozilla-inbound
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Thu, 20 Oct 2016 16:50:23 +0200
changeset 318848 1bbe7ddb93dae920f21cd4f62e0c51084a5281e7
parent 318847 9831e7338e37a7a80bda9f3e60f6462ae534ca41 (current diff)
parent 318739 3f0aeafe59c40c5e92ba9636fa718cf26088e127 (diff)
child 318849 25f254fd1948b8472b338059284d12c0b324d951
push id30854
push userryanvm@gmail.com
push dateFri, 21 Oct 2016 21:08:02 +0000
treeherdermozilla-central@806054dd12bd [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone52.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to mozilla-inbound
new file mode 100644
--- /dev/null
+++ b/browser/components/migration/.eslintrc.js
@@ -0,0 +1,82 @@
+"use strict";
+
+module.exports = { // eslint-disable-line no-undef
+  "extends": [
+    "../../.eslintrc.js"
+  ],
+
+  "globals": {
+    "Components": true,
+    "dump": true,
+    "Iterator": true
+  },
+
+  "env": { "browser": true },
+
+  "rules": {
+    "block-scoped-var": 2,
+    // "brace-style": [1, "1tbs", {"allowSingleLine": true}],
+    "comma-dangle": 0,
+    "comma-spacing": [1, {"before": false, "after": true}],
+    "comma-style": [1, "last"],
+    // "complexity": 1,
+    "consistent-return": 2,
+    //"curly": 2,
+    "dot-notation": 2,
+    "eol-last": 2,
+    "indent": [1, 2, {"SwitchCase": 1}],
+    // "key-spacing": [1, {"beforeColon": false, "afterColon": true}],
+    "keyword-spacing": 1,
+    "max-nested-callbacks": [2, 3],
+    "new-parens": 2,
+    "no-array-constructor": 2,
+    "no-cond-assign": 2,
+    "no-control-regex": 2,
+    "no-debugger": 2,
+    "no-delete-var": 2,
+    "no-dupe-args": 2,
+    "no-dupe-keys": 2,
+    "no-duplicate-case": 2,
+    "no-else-return": 2,
+    "no-eval": 2,
+    "no-extend-native": 2,
+    // "no-extra-bind": 2,
+    "no-extra-boolean-cast": 2,
+    "no-extra-semi": 1,
+    "no-fallthrough": ["error", { "commentPattern": ".*[Ii]ntentional(?:ly)?\\s+fall(?:ing)?[\\s-]*through.*" }],
+    "no-lonely-if": 2,
+    "no-mixed-spaces-and-tabs": 2,
+    "no-multi-spaces": 1,
+    "no-multi-str": 1,
+    "no-native-reassign": 2,
+    "no-nested-ternary": 2,
+    "no-redeclare": 2,
+    "no-return-assign": 2,
+    "no-self-compare": 2,
+    "no-sequences": 2,
+    "no-shadow": 1,
+    "no-shadow-restricted-names": 2,
+    // "no-spaced-func": 1,
+    "no-throw-literal": 2,
+    "no-trailing-spaces": 2,
+    "no-undef": 2,
+    "no-unneeded-ternary": 2,
+    "no-unreachable": 2,
+    "no-unused-vars": ["error", { "varsIgnorePattern": "^C[ciur]$" }],
+    "no-with": 2,
+    "padded-blocks": [1, "never"],
+    "quotes": ["error", "double", { "avoidEscape": true, "allowTemplateLiterals": true }],
+    "semi": [2, "always", {"omitLastInOneLineBlock": true }],
+    "semi-spacing": [1, {"before": false, "after": true}],
+    "space-before-blocks": [1, "always"],
+    // "space-before-function-paren": [1, "never"],
+    "space-in-parens": [1, "never"],
+    "space-infix-ops": [1, {"int32Hint": true}],
+    // "space-unary-ops": [1, { "words": true, "nonwords": false }],
+    "strict": [2, "global"],
+    "use-isnan": 2,
+    "valid-typeof": 2,
+    "yoda": 2
+  }
+};
+
--- a/browser/components/migration/360seProfileMigrator.js
+++ b/browser/components/migration/360seProfileMigrator.js
@@ -6,18 +6,18 @@
 
 const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/NetUtil.jsm");
 Cu.import("resource://gre/modules/FileUtils.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
-Cu.import("resource://gre/modules/osfile.jsm");
-Cu.import("resource:///modules/MigrationUtils.jsm");
+Cu.import("resource://gre/modules/osfile.jsm"); /* globals OS */
+Cu.import("resource:///modules/MigrationUtils.jsm"); /* globals MigratorPrototype */
 
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
                                   "resource://gre/modules/PlacesUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "Sqlite",
                                   "resource://gre/modules/Sqlite.jsm");
 
 const kBookmarksFileName = "360sefav.db";
 
@@ -104,17 +104,17 @@ function Bookmarks(aProfileFolder) {
 }
 Bookmarks.prototype = {
   type: MigrationUtils.resourceTypes.BOOKMARKS,
 
   get exists() {
     return this._file.exists() && this._file.isReadable();
   },
 
-  migrate: function (aCallback) {
+  migrate(aCallback) {
     return Task.spawn(function* () {
       let idToGuid = new Map();
       let folderGuid = PlacesUtils.bookmarks.toolbarGuid;
       if (!MigrationUtils.isStartupMigration) {
         folderGuid =
           yield MigrationUtils.createImportedBookmarksFolder("360se", folderGuid);
       }
       idToGuid.set(0, folderGuid);
@@ -132,21 +132,21 @@ Bookmarks.prototype = {
              SELECT f.id, f.parent_id, f.is_folder, f.title, f.url, f.pos
              FROM tb_fav AS f
              JOIN bookmark AS b ON f.parent_id = b.id
              ORDER BY f.pos ASC
            )
            SELECT id, parent_id, is_folder, title, url FROM bookmark WHERE id`);
 
         for (let row of rows) {
-          let id = parseInt(row.getResultByName("id"), 10),
-              parent_id = parseInt(row.getResultByName("parent_id"), 10),
-              is_folder = parseInt(row.getResultByName("is_folder"), 10),
-              title = row.getResultByName("title"),
-              url = row.getResultByName("url");
+          let id = parseInt(row.getResultByName("id"), 10);
+          let parent_id = parseInt(row.getResultByName("parent_id"), 10);
+          let is_folder = parseInt(row.getResultByName("is_folder"), 10);
+          let title = row.getResultByName("title");
+          let url = row.getResultByName("url");
 
           let parentGuid = idToGuid.get(parent_id) || idToGuid.get("fallback");
           if (!parentGuid) {
             parentGuid = PlacesUtils.bookmarks.unfiledGuid;
             if (!MigrationUtils.isStartupMigration) {
               parentGuid =
                 yield MigrationUtils.createImportedBookmarksFolder("360se", parentGuid);
             }
@@ -208,18 +208,20 @@ function Qihoo360seProfileMigrator() {
 
 Qihoo360seProfileMigrator.prototype = Object.create(MigratorPrototype);
 
 Object.defineProperty(Qihoo360seProfileMigrator.prototype, "sourceProfiles", {
   get: function() {
     if ("__sourceProfiles" in this)
       return this.__sourceProfiles;
 
-    if (!this._usersDir)
-      return this.__sourceProfiles = [];
+    if (!this._usersDir) {
+      this.__sourceProfiles = [];
+      return this.__sourceProfiles;
+    }
 
     let profiles = [];
     let noLoggedInUser = true;
     try {
       let loginIni = this._usersDir.clone();
       loginIni.append("login.ini");
       if (!loginIni.exists()) {
         throw new Error("360 Secure Browser's 'login.ini' does not exist.");
@@ -271,20 +273,21 @@ Object.defineProperty(Qihoo360seProfileM
       Cu.reportError("Error detecting 360 Secure Browser profiles: " + e);
     } finally {
       profiles[noLoggedInUser ? "unshift" : "push"]({
         id: this._defaultUserPath,
         name: "Default",
       });
     }
 
-    return this.__sourceProfiles = profiles.filter(profile => {
+    this.__sourceProfiles = profiles.filter(profile => {
       let resources = this.getResources(profile);
       return resources && resources.length > 0;
     });
+    return this.__sourceProfiles;
   }
 });
 
 Qihoo360seProfileMigrator.prototype._getIdFromConfig = function(aConfig) {
   return aConfig.UserMd5 || getHash(aConfig.email);
 };
 
 Qihoo360seProfileMigrator.prototype.getResources = function(aProfile) {
@@ -304,17 +307,17 @@ Qihoo360seProfileMigrator.prototype.getR
 Qihoo360seProfileMigrator.prototype.getLastUsedDate = function() {
   let bookmarksPaths = this.sourceProfiles.map(({id}) => {
     return OS.Path.join(this._usersDir.path, id, kBookmarksFileName);
   });
   if (!bookmarksPaths.length) {
     return Promise.resolve(new Date(0));
   }
   let datePromises = bookmarksPaths.map(path => {
-    return OS.File.stat(path).catch(_ => null).then(info => {
+    return OS.File.stat(path).catch(() => null).then(info => {
       return info ? info.lastModificationDate : 0;
     });
   });
   return Promise.all(datePromises).then(dates => {
     return new Date(Math.max.apply(Math, dates));
   });
 };
 
--- a/browser/components/migration/AutoMigrate.jsm
+++ b/browser/components/migration/AutoMigrate.jsm
@@ -117,17 +117,17 @@ const AutoMigrate = {
 
     let resourceTypes = migrator.getMigrateData(profileToMigrate, profileStartup);
     if (!(resourceTypes & this.resourceTypesToUse)) {
       throw new Error("No usable resources were found for the selected browser!");
     }
     histogram.add(15);
 
     let sawErrors = false;
-    let migrationObserver = (subject, topic, data) => {
+    let migrationObserver = (subject, topic) => {
       if (topic == "Migration:ItemError") {
         sawErrors = true;
       } else if (topic == "Migration:Ended") {
         histogram.add(25);
         if (sawErrors) {
           histogram.add(26);
         }
         Services.obs.removeObserver(migrationObserver, "Migration:Ended");
--- a/browser/components/migration/ChromeProfileMigrator.js
+++ b/browser/components/migration/ChromeProfileMigrator.js
@@ -19,19 +19,19 @@ const AUTH_TYPE = {
   SCHEME_DIGEST: 2
 };
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/NetUtil.jsm");
 Cu.import("resource://gre/modules/FileUtils.jsm");
-Cu.import("resource://gre/modules/osfile.jsm");
+Cu.import("resource://gre/modules/osfile.jsm"); /* globals OS */
 Cu.import("resource://gre/modules/Task.jsm");
-Cu.import("resource:///modules/MigrationUtils.jsm");
+Cu.import("resource:///modules/MigrationUtils.jsm"); /* globals MigratorPrototype */
 
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
                                   "resource://gre/modules/PlacesUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "OSCrypto",
                                   "resource://gre/modules/OSCrypto.jsm");
 /**
  * Get an nsIFile instance representing the expected location of user data
  * for this copy of Chrome/Chromium/Canary on different OSes.
@@ -61,17 +61,17 @@ function getDataFolder(subfoldersWin, su
  * @param   aTime
  *          Chrome time
  * @return  converted Date object
  * @note    Google Chrome uses FILETIME / 10 as time.
  *          FILETIME is based on same structure of Windows.
  */
 function chromeTimeToDate(aTime)
 {
-  return new Date((aTime * S100NS_PER_MS - S100NS_FROM1601TO1970 ) / 10000);
+  return new Date((aTime * S100NS_PER_MS - S100NS_FROM1601TO1970) / 10000);
 }
 
 /**
  * Insert bookmark items into specific folder.
  *
  * @param   parentGuid
  *          GUID of the folder where items will be inserted
  * @param   items
@@ -132,21 +132,20 @@ ChromeProfileMigrator.prototype.getResou
       }
     }
     return [];
   };
 
 ChromeProfileMigrator.prototype.getLastUsedDate =
   function Chrome_getLastUsedDate() {
     let datePromises = this.sourceProfiles.map(profile => {
-      let profileFolder = this._chromeUserDataFolder.clone();
       let basePath = OS.Path.join(this._chromeUserDataFolder.path, profile.id);
       let fileDatePromises = ["Bookmarks", "History", "Cookies"].map(leafName => {
         let path = OS.Path.join(basePath, leafName);
-        return OS.File.stat(path).catch(_ => null).then(info => {
+        return OS.File.stat(path).catch(() => null).then(info => {
           return info ? info.lastModificationDate : 0;
         });
       });
       return Promise.all(fileDatePromises).then(dates => {
         return Math.max.apply(Math, dates);
       });
     });
     return Promise.all(datePromises).then(dates => {
@@ -195,32 +194,33 @@ Object.defineProperty(ChromeProfileMigra
         profiles = [{
           id: "Default",
           name: "Default",
         }];
       }
     }
 
     // Only list profiles from which any data can be imported
-    return this.__sourceProfiles = profiles.filter(function(profile) {
+    this.__sourceProfiles = profiles.filter(function(profile) {
       let resources = this.getResources(profile);
       return resources && resources.length > 0;
     }, this);
+    return this.__sourceProfiles;
   }
 });
 
 Object.defineProperty(ChromeProfileMigrator.prototype, "sourceHomePageURL", {
   get: function Chrome_sourceHomePageURL() {
     let prefsFile = this._chromeUserDataFolder.clone();
     prefsFile.append("Preferences");
     if (prefsFile.exists()) {
       // XXX reading and parsing JSON is synchronous.
       let fstream = Cc[FILE_INPUT_STREAM_CID].
                     createInstance(Ci.nsIFileInputStream);
-      fstream.init(file, -1, 0, 0);
+      fstream.init(prefsFile, -1, 0, 0);
       try {
         return JSON.parse(
           NetUtil.readInputStreamToString(fstream, fstream.available(),
                                           { charset: "UTF-8" })
             ).homepage;
       }
       catch (e) {
         Cu.reportError("Error parsing Chrome's preferences file: " + e);
@@ -244,30 +244,30 @@ function GetBookmarksResource(aProfileFo
     return null;
 
   return {
     type: MigrationUtils.resourceTypes.BOOKMARKS,
 
     migrate: function(aCallback) {
       return Task.spawn(function* () {
         let gotErrors = false;
-        let errorGatherer = () => gotErrors = true;
-        let jsonStream = yield new Promise(resolve =>
-          NetUtil.asyncFetch({ uri: NetUtil.newURI(bookmarksFile),
-                               loadUsingSystemPrincipal: true
-                             },
-                             (inputStream, resultCode) => {
-                               if (Components.isSuccessCode(resultCode)) {
-                                 resolve(inputStream);
-                               } else {
-                                 reject(new Error("Could not read Bookmarks file"));
-                               }
-                             }
-          )
-        );
+        let errorGatherer = function() { gotErrors = true };
+        let jsonStream = yield new Promise((resolve, reject) => {
+          let options = {
+            uri: NetUtil.newURI(bookmarksFile),
+            loadUsingSystemPrincipal: true
+          };
+          NetUtil.asyncFetch(options, (inputStream, resultCode) => {
+            if (Components.isSuccessCode(resultCode)) {
+              resolve(inputStream);
+            } else {
+              reject(new Error("Could not read Bookmarks file"));
+            }
+          });
+        });
 
         // Parse Chrome bookmark file that is JSON format
         let bookmarkJSON = NetUtil.readInputStreamToString(
           jsonStream, jsonStream.available(), { charset : "UTF-8" });
         let roots = JSON.parse(bookmarkJSON).roots;
 
         // Importing bookmark bar items
         if (roots.bookmark_bar.children &&
@@ -288,41 +288,35 @@ function GetBookmarksResource(aProfileFo
           let parentGuid = PlacesUtils.bookmarks.menuGuid;
           if (!MigrationUtils.isStartupMigration) {
             parentGuid =
               yield MigrationUtils.createImportedBookmarksFolder("Chrome", parentGuid);
           }
           yield insertBookmarkItems(parentGuid, roots.other.children, errorGatherer);
         }
         if (gotErrors) {
-          throw "The migration included errors.";
+          throw new Error("The migration included errors.");
         }
       }.bind(this)).then(() => aCallback(true),
-                          e => aCallback(false));
+                         () => aCallback(false));
     }
   };
 }
 
 function GetHistoryResource(aProfileFolder) {
   let historyFile = aProfileFolder.clone();
   historyFile.append("History");
   if (!historyFile.exists())
     return null;
 
   return {
     type: MigrationUtils.resourceTypes.HISTORY,
 
     migrate(aCallback) {
       Task.spawn(function* () {
-        let dbOptions = {
-          readOnly: true,
-          ignoreLockingMode: true,
-          path: historyFile.path
-        };
-
         let rows = yield MigrationUtils.getRowsFromDBWithoutLocks(historyFile.path, "Chrome history",
           `SELECT url, title, last_visit_time, typed_count FROM urls WHERE hidden = 0`);
         let places = [];
         for (let row of rows) {
           try {
             // if having typed_count, we changes transition type to typed.
             let transType = PlacesUtils.history.TRANSITION_LINK;
             if (row.getResultByName("typed_count") > 0)
@@ -357,17 +351,17 @@ function GetHistoryResource(aProfileFold
                   resolve();
                 } else {
                   reject(new Error("Couldn't add visits"));
                 }
               }
             });
           });
         }
-      }).then(() => { aCallback(true); },
+      }).then(() => { aCallback(true) },
               ex => {
                 Cu.reportError(ex);
                 aCallback(false);
               });
     }
   };
 }
 
@@ -381,19 +375,19 @@ function GetCookiesResource(aProfileFold
     type: MigrationUtils.resourceTypes.COOKIES,
 
     migrate: Task.async(function* (aCallback) {
       // We don't support decrypting cookies yet so only import plaintext ones.
       let rows = yield MigrationUtils.getRowsFromDBWithoutLocks(cookiesFile.path, "Chrome cookies",
        `SELECT host_key, name, value, path, expires_utc, secure, httponly, encrypted_value
         FROM cookies
         WHERE length(encrypted_value) = 0`).catch(ex => {
-        Cu.reportError(ex);
-        aCallback(false);
-      });
+          Cu.reportError(ex);
+          aCallback(false);
+        });
       // If the promise was rejected we will have already called aCallback,
       // so we can just return here.
       if (!rows) {
         return;
       }
 
       for (let row of rows) {
         let host_key = row.getResultByName("host_key");
@@ -432,19 +426,19 @@ function GetWindowsPasswordsResource(aPr
   return {
     type: MigrationUtils.resourceTypes.PASSWORDS,
 
     migrate: Task.async(function* (aCallback) {
       let rows = yield MigrationUtils.getRowsFromDBWithoutLocks(loginFile.path, "Chrome passwords",
        `SELECT origin_url, action_url, username_element, username_value,
         password_element, password_value, signon_realm, scheme, date_created,
         times_used FROM logins WHERE blacklisted_by_user = 0`).catch(ex => {
-        Cu.reportError(ex);
-        aCallback(false);
-      });
+          Cu.reportError(ex);
+          aCallback(false);
+        });
       // If the promise was rejected we will have already called aCallback,
       // so we can just return here.
       if (!rows) {
         return;
       }
       let crypto = new OSCrypto();
 
       for (let row of rows) {
--- a/browser/components/migration/ESEDBReader.jsm
+++ b/browser/components/migration/ESEDBReader.jsm
@@ -1,15 +1,15 @@
 /* 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";
 
-this.EXPORTED_SYMBOLS = ["ESEDBReader"];
+this.EXPORTED_SYMBOLS = ["ESEDBReader"]; /* exported ESEDBReader */
 
 const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 Cu.import("resource://gre/modules/ctypes.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 XPCOMUtils.defineLazyGetter(this, "log", () => {
   let ConsoleAPI = Cu.import("resource://gre/modules/Console.jsm", {}).ConsoleAPI;
@@ -384,17 +384,17 @@ ESEDB.prototype = {
           let [buffer, bufferSize] = this._getBufferForColumn(column);
           // We handle errors manually so we accurately deal with NULL values.
           let err = ESE.ManualRetrieveColumn(this._sessionId, tableId,
                                              column.id, buffer.address(),
                                              bufferSize, null, 0, null);
           rowContents[column.name] = this._convertResult(column, buffer, err);
         }
         yield rowContents;
-      } while (0 === ESE.ManualMove(this._sessionId, tableId, 1 /* JET_MoveNext */, 0));
+      } while (ESE.ManualMove(this._sessionId, tableId, 1 /* JET_MoveNext */, 0) === 0);
     } catch (ex) {
       if (tableOpened) {
         this._closeTable(tableId);
       }
       throw ex;
     }
     this._closeTable(tableId);
   },
@@ -435,17 +435,17 @@ ESEDB.prototype = {
         Cu.reportError("Unexpected JET error: " + err + ";" + " retrieving value for column " + column.name);
         throw new Error(convertESEError(err));
       }
     }
     if (column.type == "string") {
       return buffer ? buffer.readString() : "";
     }
     if (column.type == "boolean") {
-      return buffer ? (255 == buffer.value) : false;
+      return buffer ? (buffer.value == 255) : false;
     }
     if (column.type == "guid") {
       if (buffer.length != 16) {
         Cu.reportError("Buffer size for guid field " + column.id + " should have been 16!");
         return "";
       }
       let rv = "{";
       for (let i = 0; i < 16; i++) {
--- a/browser/components/migration/EdgeProfileMigrator.js
+++ b/browser/components/migration/EdgeProfileMigrator.js
@@ -1,20 +1,22 @@
 /* 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 { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
-Cu.import("resource://gre/modules/osfile.jsm");
+Cu.import("resource://gre/modules/osfile.jsm"); /* globals OS */
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource:///modules/MigrationUtils.jsm");
+Cu.import("resource:///modules/MigrationUtils.jsm"); /* globals MigratorPrototype */
 Cu.import("resource:///modules/MSMigrationUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
                                   "resource://gre/modules/PlacesUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "ESEDBReader",
                                   "resource:///modules/ESEDBReader.jsm");
 
 const kEdgeRegistryRoot = "SOFTWARE\\Classes\\Local Settings\\Software\\" +
   "Microsoft\\Windows\\CurrentVersion\\AppContainer\\Storage\\" +
@@ -52,17 +54,17 @@ XPCOMUtils.defineLazyGetter(this, "gEdge
  *                                      reference once opened.
  * @param {function}          filterFn  a function that is called for each row.
  *                                      Only rows for which it returns a truthy
  *                                      value are included in the result.
  * @param {nsIFile}           dbFile    the database file to use. Defaults to
  *                                      the main Edge database.
  * @returns {Array} An array of row objects.
  */
-function readTableFromEdgeDB(tableName, columns, filterFn, dbFile=gEdgeDatabase) {
+function readTableFromEdgeDB(tableName, columns, filterFn, dbFile = gEdgeDatabase) {
   let database;
   let rows = [];
   try {
     let logFile = dbFile.parent;
     logFile.append("LogFiles");
     database = ESEDBReader.openDB(dbFile.parent, dbFile, logFile);
 
     if (typeof columns == "function") {
@@ -101,17 +103,16 @@ EdgeTypedURLMigrator.prototype = {
     return this.__typedURLs;
   },
 
   get exists() {
     return this._typedURLs.size > 0;
   },
 
   migrate: function(aCallback) {
-    let rv = true;
     let typedURLs = this._typedURLs;
     let places = [];
     for (let [urlString, time] of typedURLs) {
       let uri;
       try {
         uri = Services.io.newURI(urlString, null, null);
         if (["http", "https", "ftp"].indexOf(uri.scheme) == -1) {
           continue;
@@ -144,17 +145,17 @@ EdgeTypedURLMigrator.prototype = {
         this._success = true;
       },
       handleError: function() {},
       handleCompletion: function() {
         aCallback(this._success);
       }
     });
   },
-}
+};
 
 function EdgeReadingListMigrator() {
 }
 
 EdgeReadingListMigrator.prototype = {
   type: MigrationUtils.resourceTypes.BOOKMARKS,
 
   get exists() {
@@ -226,25 +227,25 @@ EdgeReadingListMigrator.prototype = {
 
 function EdgeBookmarksMigrator(dbOverride) {
   this.dbOverride = dbOverride;
 }
 
 EdgeBookmarksMigrator.prototype = {
   type: MigrationUtils.resourceTypes.BOOKMARKS,
 
-  get db() { return this.dbOverride || gEdgeDatabase; },
+  get db() { return this.dbOverride || gEdgeDatabase },
 
   get TABLE_NAME() { return "Favorites" },
 
   get exists() {
-    if ("_exists" in this) {
-      return this._exists;
+    if (!("_exists" in this)) {
+      this._exists = !!this.db && this._checkTableExists();
     }
-    return this._exists = (!!this.db && this._checkTableExists());
+    return this._exists;
   },
 
   _checkTableExists() {
     let database;
     let rv;
     try {
       let logFile = this.db.parent;
       logFile.append("LogFiles");
@@ -314,17 +315,17 @@ EdgeBookmarksMigrator.prototype = {
         // If we couldn't sort out a parent, fall back to importing on the root:
         parentGuid = rootGuid;
       }
       let placesInfo = {
         parentGuid,
         url: bookmark.URL,
         dateAdded: bookmark.DateUpdated || new Date(),
         title: bookmark.Title,
-      }
+      };
 
       yield PlacesUtils.bookmarks.insert(placesInfo).catch(ex => {
         if (!exceptionThrown) {
           exceptionThrown = ex;
         }
         Cu.reportError(ex);
       });
     }
@@ -348,17 +349,17 @@ EdgeBookmarksMigrator.prototype = {
     let filterFn = row => {
       if (row.IsDeleted) {
         return false;
       }
       if (row.IsFolder) {
         folderMap.set(row.ItemId, row);
       }
       return true;
-    }
+    };
     let bookmarks = readTableFromEdgeDB(this.TABLE_NAME, columns, filterFn, this.db);
     return {bookmarks, folderMap};
   },
 
   _getGuidForFolder: Task.async(function*(folderId, folderMap, rootGuid) {
     // If the folderId is not known as a folder in the folder map, we assume
     // we just need the root
     if (!folderMap.has(folderId)) {
@@ -372,31 +373,33 @@ EdgeBookmarksMigrator.prototype = {
 
     // Hacks! The bookmarks bar is special:
     if (folder.Title == "_Favorites_Bar_") {
       let toolbarGuid = PlacesUtils.bookmarks.toolbarGuid;
       if (!MigrationUtils.isStartupMigration) {
         toolbarGuid =
           yield MigrationUtils.createImportedBookmarksFolder("Edge", toolbarGuid);
       }
-      return folder._guid = toolbarGuid;
+      folder._guid = toolbarGuid;
+      return folder._guid;
     }
     // Otherwise, get the right parent guid recursively:
     let parentGuid = yield this._getGuidForFolder(folder.ParentId, folderMap, rootGuid);
     let folderInfo = {
       title: folder.Title,
       type: PlacesUtils.bookmarks.TYPE_FOLDER,
       dateAdded: folder.DateUpdated || new Date(),
       parentGuid,
     };
     // and add ourselves as a kid, and return the guid we got.
     let parentBM = yield PlacesUtils.bookmarks.insert(folderInfo);
-    return folder._guid = parentBM.guid;
+    folder._guid = parentBM.guid;
+    return folder._guid;
   }),
-}
+};
 
 function EdgeProfileMigrator() {
   this.wrappedJSObject = this;
 }
 
 EdgeProfileMigrator.prototype = Object.create(MigratorPrototype);
 
 EdgeProfileMigrator.prototype.getESEMigratorForTesting = function(dbOverride) {
@@ -427,17 +430,17 @@ EdgeProfileMigrator.prototype.getLastUse
   if (this.sourceProfiles !== null || !gEdgeDatabase) {
     return Promise.resolve(new Date(0));
   }
   let logFilePath = OS.Path.join(gEdgeDatabase.parent.path, "LogFiles", "edb.log");
   let dbPath = gEdgeDatabase.path;
   let cookieMigrator = MSMigrationUtils.getCookiesMigrator(MSMigrationUtils.MIGRATION_TYPE_EDGE);
   let cookiePaths = cookieMigrator._cookiesFolders.map(f => f.path);
   let datePromises = [logFilePath, dbPath, ... cookiePaths].map(path => {
-    return OS.File.stat(path).catch(_ => null).then(info => {
+    return OS.File.stat(path).catch(() => null).then(info => {
       return info ? info.lastModificationDate : 0;
     });
   });
   datePromises.push(new Promise(resolve => {
     let typedURLs = new Map();
     try {
       typedURLs = MSMigrationUtils.getTypedURLs(kEdgeRegistryRoot);
     } catch (ex) {}
@@ -455,18 +458,18 @@ EdgeProfileMigrator.prototype.getLastUse
  * See MigrationUtils.jsm for slightly more info on how sourceProfiles is used.
  */
 EdgeProfileMigrator.prototype.__defineGetter__("sourceProfiles", function() {
   let isWin10OrHigher = AppConstants.isPlatformAndVersionAtLeast("win", "10");
   return isWin10OrHigher ? null : [];
 });
 
 EdgeProfileMigrator.prototype.__defineGetter__("sourceLocked", function() {
-    // There is an exclusive lock on some databases. Assume they are locked for now.
-    return true;
+  // There is an exclusive lock on some databases. Assume they are locked for now.
+  return true;
 });
 
 
 EdgeProfileMigrator.prototype.classDescription = "Edge Profile Migrator";
 EdgeProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=edge";
 EdgeProfileMigrator.prototype.classID = Components.ID("{62e8834b-2d17-49f5-96ff-56344903a2ae}");
 
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([EdgeProfileMigrator]);
--- a/browser/components/migration/FirefoxProfileMigrator.js
+++ b/browser/components/migration/FirefoxProfileMigrator.js
@@ -11,17 +11,17 @@
  * user's profile.  Data is only migrated where the benefits outweigh the
  * potential problems caused by importing undesired/invalid configurations
  * from the source profile.
  */
 
 const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource:///modules/MigrationUtils.jsm");
+Cu.import("resource:///modules/MigrationUtils.jsm"); /* globals MigratorPrototype */
 Cu.import("resource://gre/modules/Services.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesBackups",
                                   "resource://gre/modules/PlacesBackups.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "SessionMigration",
                                   "resource:///modules/sessionstore/SessionMigration.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "OS",
                                   "resource://gre/modules/osfile.jsm");
@@ -34,17 +34,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 
 
 function FirefoxProfileMigrator() {
   this.wrappedJSObject = this; // for testing...
 }
 
 FirefoxProfileMigrator.prototype = Object.create(MigratorPrototype);
 
-FirefoxProfileMigrator.prototype._getAllProfiles = function () {
+FirefoxProfileMigrator.prototype._getAllProfiles = function() {
   let allProfiles = new Map();
   let profiles =
     Components.classes["@mozilla.org/toolkit/profile-service;1"]
               .getService(Components.interfaces.nsIToolkitProfileService)
               .profiles;
   while (profiles.hasMoreElements()) {
     let profile = profiles.getNext().QueryInterface(Ci.nsIToolkitProfile);
     let rootDir = profile.rootDir;
@@ -89,27 +89,27 @@ FirefoxProfileMigrator.prototype.getReso
   // Being a startup-only migrator, we can rely on
   // MigrationUtils.profileStartup being set.
   let currentProfileDir = MigrationUtils.profileStartup.directory;
 
   // Surely data cannot be imported from the current profile.
   if (sourceProfileDir.equals(currentProfileDir))
     return null;
 
-  return this._getResourcesInternal(sourceProfileDir, currentProfileDir, aProfile);
+  return this._getResourcesInternal(sourceProfileDir, currentProfileDir);
 };
 
 FirefoxProfileMigrator.prototype.getLastUsedDate = function() {
   // We always pretend we're really old, so that we don't mess
   // up the determination of which browser is the most 'recent'
   // to import from.
   return Promise.resolve(new Date(0));
 };
 
-FirefoxProfileMigrator.prototype._getResourcesInternal = function(sourceProfileDir, currentProfileDir, aProfile) {
+FirefoxProfileMigrator.prototype._getResourcesInternal = function(sourceProfileDir, currentProfileDir) {
   let getFileResource = function(aMigrationType, aFileNames) {
     let files = [];
     for (let fileName of aFileNames) {
       let file = this._getFileObject(sourceProfileDir, fileName);
       if (file)
         files.push(file);
     }
     if (!files.length) {
@@ -195,23 +195,23 @@ FirefoxProfileMigrator.prototype._getRes
         let dir = currentProfileDir.clone();
         dir.append(name);
         dir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
         return dir;
       };
 
       // If the 'datareporting' directory exists we migrate files from it.
       let haveStateFile = false;
-      let subdir = this._getFileObject(sourceProfileDir, "datareporting");
-      if (subdir && subdir.isDirectory()) {
+      let dataReportingDir = this._getFileObject(sourceProfileDir, "datareporting");
+      if (dataReportingDir && dataReportingDir.isDirectory()) {
         // Copy only specific files.
         let toCopy = ["state.json", "session-state.json"];
 
         let dest = createSubDir("datareporting");
-        let enumerator = subdir.directoryEntries;
+        let enumerator = dataReportingDir.directoryEntries;
         while (enumerator.hasMoreElements()) {
           let file = enumerator.getNext().QueryInterface(Ci.nsIFile);
           if (file.isDirectory() || toCopy.indexOf(file.leafName) == -1) {
             continue;
           }
 
           if (file.leafName == "state.json") {
             haveStateFile = true;
@@ -220,29 +220,29 @@ FirefoxProfileMigrator.prototype._getRes
         }
       }
 
       if (!haveStateFile) {
         // Fall back to migrating the state file that contains the client id from healthreport/.
         // We first moved the client id management from the FHR implementation to the datareporting
         // service.
         // Consequently, we try to migrate an existing FHR state file here as a fallback.
-        let subdir = this._getFileObject(sourceProfileDir, "healthreport");
-        if (subdir && subdir.isDirectory()) {
-          let stateFile = this._getFileObject(subdir, "state.json");
+        let healthReportDir = this._getFileObject(sourceProfileDir, "healthreport");
+        if (healthReportDir && healthReportDir.isDirectory()) {
+          let stateFile = this._getFileObject(healthReportDir, "state.json");
           if (stateFile) {
             let dest = createSubDir("healthreport");
             stateFile.copyTo(dest, "");
           }
         }
       }
 
       aCallback(true);
     }
-  }
+  };
 
   return [places, cookies, passwords, formData, dictionary, bookmarksBackups,
           session, times, telemetry].filter(r => r);
 };
 
 Object.defineProperty(FirefoxProfileMigrator.prototype, "startupOnlyMigrator", {
   get: () => true
 });
--- a/browser/components/migration/IEProfileMigrator.js
+++ b/browser/components/migration/IEProfileMigrator.js
@@ -8,40 +8,38 @@ const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 const Cr = Components.results;
 
 const kLoginsKey = "Software\\Microsoft\\Internet Explorer\\IntelliForms\\Storage2";
 const kMainKey = "Software\\Microsoft\\Internet Explorer\\Main";
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
-Cu.import("resource://gre/modules/osfile.jsm");
+Cu.import("resource://gre/modules/osfile.jsm"); /* globals OS */
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource:///modules/MigrationUtils.jsm");
+Cu.import("resource:///modules/MigrationUtils.jsm"); /* globals MigratorPrototype */
 Cu.import("resource:///modules/MSMigrationUtils.jsm");
 Cu.import("resource://gre/modules/LoginHelper.jsm");
 
 
 XPCOMUtils.defineLazyModuleGetter(this, "ctypes",
                                   "resource://gre/modules/ctypes.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
                                   "resource://gre/modules/PlacesUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "OSCrypto",
                                   "resource://gre/modules/OSCrypto.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "WindowsRegistry",
                                   "resource://gre/modules/WindowsRegistry.jsm");
 
 Cu.importGlobalProperties(["URL"]);
 
-var CtypesKernelHelpers = MSMigrationUtils.CtypesKernelHelpers;
-
 ////////////////////////////////////////////////////////////////////////////////
-//// Resources
+// Resources
 
 
 function History() {
 }
 
 History.prototype = {
   type: MigrationUtils.resourceTypes.HISTORY,
 
@@ -105,17 +103,17 @@ History.prototype = {
       handleCompletion: function() {
         aCallback(this._success);
       }
     });
   }
 };
 
 // IE form password migrator supporting windows from XP until 7 and IE from 7 until 11
-function IE7FormPasswords () {
+function IE7FormPasswords() {
   // used to distinguish between this migrator and other passwords migrators in tests.
   this.name = "IE7FormPasswords";
 }
 
 IE7FormPasswords.prototype = {
   type: MigrationUtils.resourceTypes.PASSWORDS,
 
   get exists() {
@@ -245,17 +243,17 @@ IE7FormPasswords.prototype = {
     for (let ieLogin of ieLogins) {
       try {
         // create a new login
         let login = {
           username: ieLogin.username,
           password: ieLogin.password,
           hostname: ieLogin.url,
           timeCreated: ieLogin.creation,
-          };
+        };
         LoginHelper.maybeImportLogin(login);
       } catch (e) {
         Cu.reportError(e);
       }
     }
   },
 
   /**
@@ -358,17 +356,17 @@ Settings.prototype = {
     // Converts from yes/no to a boolean.
     let yesNoToBoolean = v => v == "yes";
 
     // Converts source format like "en-us,ar-kw;q=0.7,ar-om;q=0.3" into
     // destination format like "en-us, ar-kw, ar-om".
     // Final string is sorted by quality (q=) param.
     function parseAcceptLanguageList(v) {
       return v.match(/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/gi)
-              .sort(function (a, b) {
+              .sort(function(a, b) {
                 let qA = parseFloat(a.split(";q=")[1]) || 1.0;
                 let qB = parseFloat(b.split(";q=")[1]) || 1.0;
                 return qB - qA;
               })
               .map(a => a.split(";")[0]);
     }
 
     // For reference on some of the available IE Registry settings:
@@ -403,33 +401,33 @@ Settings.prototype = {
               v => yesNoToBoolean(v) ? 1 : 2);
     this._set(kMainKey,
               "Move System Caret",
               "accessibility.browsewithcaret",
               yesNoToBoolean);
     this._set("Software\\Microsoft\\Internet Explorer\\Settings",
               "Always Use My Colors",
               "browser.display.document_color_use",
-              v => !Boolean(v) ? 0 : 2);
+              v => (!v ? 0 : 2));
     this._set("Software\\Microsoft\\Internet Explorer\\Settings",
               "Always Use My Font Face",
               "browser.display.use_document_fonts",
-              v => !Boolean(v));
+              v => !v);
     this._set(kMainKey,
               "SmoothScroll",
               "general.smoothScroll",
               Boolean);
     this._set("Software\\Microsoft\\Internet Explorer\\TabbedBrowsing\\",
               "WarnOnClose",
               "browser.tabs.warnOnClose",
               Boolean);
     this._set("Software\\Microsoft\\Internet Explorer\\TabbedBrowsing\\",
               "OpenInForeground",
               "browser.tabs.loadInBackground",
-              v => !Boolean(v));
+              v => !v);
 
     aCallback(true);
   },
 
   /**
    * Reads a setting from the Registry and stores the converted result into
    * the appropriate Firefox preference.
    *
@@ -447,64 +445,64 @@ Settings.prototype = {
                                            aPath, aKey);
     // Don't import settings that have never been flipped.
     if (value === undefined)
       return;
 
     if (aTransformFn)
       value = aTransformFn(value);
 
-    switch (typeof(value)) {
+    switch (typeof value) {
       case "string":
         Services.prefs.setCharPref(aPref, value);
         break;
       case "number":
         Services.prefs.setIntPref(aPref, value);
         break;
       case "boolean":
         Services.prefs.setBoolPref(aPref, value);
         break;
       default:
-        throw new Error("Unexpected value type: " + typeof(value));
+        throw new Error("Unexpected value type: " + (typeof value));
     }
   }
 };
 
 ////////////////////////////////////////////////////////////////////////////////
 //// Migrator
 
 function IEProfileMigrator()
 {
   this.wrappedJSObject = this; // export this to be able to use it in the unittest.
 }
 
 IEProfileMigrator.prototype = Object.create(MigratorPrototype);
 
 IEProfileMigrator.prototype.getResources = function IE_getResources() {
   let resources = [
-    MSMigrationUtils.getBookmarksMigrator()
-  , new History()
-  , MSMigrationUtils.getCookiesMigrator()
-  , new Settings()
+    MSMigrationUtils.getBookmarksMigrator(),
+    new History(),
+    MSMigrationUtils.getCookiesMigrator(),
+    new Settings(),
   ];
   // Only support the form password migrator for Windows XP to 7.
   if (AppConstants.isPlatformAndVersionAtMost("win", "6.1")) {
     resources.push(new IE7FormPasswords());
   }
   let windowsVaultFormPasswordsMigrator =
     MSMigrationUtils.getWindowsVaultFormPasswordsMigrator();
   windowsVaultFormPasswordsMigrator.name = "IEVaultFormPasswords";
   resources.push(windowsVaultFormPasswordsMigrator);
   return resources.filter(r => r.exists);
 };
 
 IEProfileMigrator.prototype.getLastUsedDate = function IE_getLastUsedDate() {
   let datePromises = ["Favs", "CookD"].map(dirId => {
     let {path} = Services.dirsvc.get(dirId, Ci.nsIFile);
-    return OS.File.stat(path).catch(_ => null).then(info => {
+    return OS.File.stat(path).catch(() => null).then(info => {
       return info ? info.lastModificationDate : 0;
     });
   });
   datePromises.push(new Promise(resolve => {
     let typedURLs = new Map();
     try {
       typedURLs = MSMigrationUtils.getTypedURLs("Software\\Microsoft\\Internet Explorer");
     } catch (ex) {}
--- a/browser/components/migration/MSMigrationUtils.jsm
+++ b/browser/components/migration/MSMigrationUtils.jsm
@@ -10,17 +10,17 @@ const { classes: Cc, interfaces: Ci, uti
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
 Cu.import("resource:///modules/MigrationUtils.jsm");
 Cu.import("resource://gre/modules/LoginHelper.jsm");
 
-Cu.importGlobalProperties(['FileReader']);
+Cu.importGlobalProperties(["FileReader"]);
 
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
                                   "resource://gre/modules/PlacesUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "WindowsRegistry",
                                   "resource://gre/modules/WindowsRegistry.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "ctypes",
                                   "resource://gre/modules/ctypes.jsm");
 
@@ -49,17 +49,17 @@ const wintypes = {
   DWORD: ctypes.uint32_t,
   DWORDLONG: ctypes.uint64_t,
   CHAR: ctypes.char,
   PCHAR: ctypes.char.ptr,
   LPCWSTR: ctypes.char16_t.ptr,
   PDWORD: ctypes.uint32_t.ptr,
   VOIDP: ctypes.voidptr_t,
   WORD: ctypes.uint16_t,
-}
+};
 
 // TODO: Bug 1202978 - Refactor MSMigrationUtils ctypes helpers
 function CtypesKernelHelpers() {
   this._structs = {};
   this._functions = {};
   this._libs = {};
 
   this._structs.SYSTEMTIME = new ctypes.StructType("SYSTEMTIME", [
@@ -257,17 +257,17 @@ CtypesVaultHelpers.prototype = {
   finalize() {
     this._structs = {};
     this._functions = {};
     try {
       this._vaultcliLib.close();
     } catch (ex) {}
     this._vaultcliLib = null;
   }
-}
+};
 
 /**
  * Checks whether an host is an IP (v4 or v6) address.
  *
  * @param aHost
  *        The host to check.
  * @return whether aHost is an IP address.
  */
@@ -328,25 +328,25 @@ Bookmarks.prototype = {
     return this._migrationType == MSMigrationUtils.MIGRATION_TYPE_IE ? "IE" : "Edge";
   },
 
   __favoritesFolder: null,
   get _favoritesFolder() {
     if (!this.__favoritesFolder) {
       if (this._migrationType == MSMigrationUtils.MIGRATION_TYPE_IE) {
         let favoritesFolder = Services.dirsvc.get("Favs", Ci.nsIFile);
-        if (favoritesFolder.exists() && favoritesFolder.isReadable())
-          return this.__favoritesFolder = favoritesFolder;
-      }
-      if (this._migrationType == MSMigrationUtils.MIGRATION_TYPE_EDGE) {
+        if (favoritesFolder.exists() && favoritesFolder.isReadable()) {
+          this.__favoritesFolder = favoritesFolder;
+        }
+      } else if (this._migrationType == MSMigrationUtils.MIGRATION_TYPE_EDGE) {
         let edgeDir = getEdgeLocalDataFolder();
         if (edgeDir) {
           edgeDir.appendRelativePath(EDGE_FAVORITES);
           if (edgeDir.exists() && edgeDir.isReadable() && edgeDir.isDirectory()) {
-            return this.__favoritesFolder = edgeDir;
+            this.__favoritesFolder = edgeDir;
           }
         }
       }
     }
     return this.__favoritesFolder;
   },
 
   __toolbarFolderName: null,
@@ -372,17 +372,17 @@ Bookmarks.prototype = {
       // Import to the bookmarks menu.
       let folderGuid = PlacesUtils.bookmarks.menuGuid;
       if (!MigrationUtils.isStartupMigration) {
         folderGuid =
           yield MigrationUtils.createImportedBookmarksFolder(this.importedAppLabel, folderGuid);
       }
       yield this._migrateFolder(this._favoritesFolder, folderGuid);
     }.bind(this)).then(() => aCallback(true),
-                        e => { Cu.reportError(e); aCallback(false) });
+                       e => { Cu.reportError(e); aCallback(false) });
   },
 
   _migrateFolder: Task.async(function* (aSourceFolder, aDestFolderGuid) {
     // TODO (bug 741993): the favorites order is stored in the Registry, at
     // HCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Favorites
     // for IE, and in a similar location for Edge.
     // Until we support it, bookmarks are imported in alphabetical order.
     let entries = aSourceFolder.directoryEntries;
@@ -502,17 +502,18 @@ Cookies.prototype = {
         let folder = edgeDir.clone();
         let fullPath = path + EDGE_COOKIES_SUFFIX;
         folder.appendRelativePath(fullPath);
         if (folder.exists() && folder.isReadable() && folder.isDirectory()) {
           folders.push(folder);
         }
       }
     }
-    return this.__cookiesFolders = folders.length ? folders : null;
+    this.__cookiesFolders = folders.length ? folders : null;
+    return this.__cookiesFolders;
   },
 
   migrate(aCallback) {
     this.ctypesKernelHelpers = new CtypesKernelHelpers();
 
     let cookiesGenerator = (function* genCookie() {
       let success = false;
       let folders = this._migrationType == MSMigrationUtils.MIGRATION_TYPE_EDGE ?
@@ -689,18 +690,18 @@ function getTypedURLs(registryKeyPath) {
           let urlTimeHex = [];
           for (let i = 0; i < 8; i++) {
             let c = urlTime.charCodeAt(i).toString(16);
             if (c.length == 1)
               c = "0" + c;
             urlTimeHex.unshift(c);
           }
           try {
-            let hi = parseInt(urlTimeHex.slice(0, 4).join(''), 16);
-            let lo = parseInt(urlTimeHex.slice(4, 8).join(''), 16);
+            let hi = parseInt(urlTimeHex.slice(0, 4).join(""), 16);
+            let lo = parseInt(urlTimeHex.slice(4, 8).join(""), 16);
             // Convert to seconds since epoch:
             timeTyped = cTypes.fileTimeToSecondsSinceEpoch(hi, lo);
             // Callers expect PRTime, which is microseconds since epoch:
             timeTyped *= 1000 * 1000;
           } catch (ex) {
             // Ignore conversion exceptions. Callers will have to deal
             // with the fallback value (0).
           }
@@ -760,33 +761,30 @@ WindowsVaultFormPasswords.prototype = {
     }
 
     let ctypesVaultHelpers = new CtypesVaultHelpers();
     let ctypesKernelHelpers = new CtypesKernelHelpers();
     let migrationSucceeded = true;
     let successfulVaultOpen = false;
     let error, vault;
     try {
-
       // web credentials vault id
       let vaultGuid = new ctypesVaultHelpers._structs.GUID(WEB_CREDENTIALS_VAULT_ID);
-      // number of available vaults
-      let vaultCount = new wintypes.DWORD;
-      error = new wintypes.DWORD;
+      error = new wintypes.DWORD();
       // web credentials vault
-      vault = new wintypes.VOIDP;
+      vault = new wintypes.VOIDP();
       // open the current vault using the vaultGuid
       error = ctypesVaultHelpers._functions.VaultOpenVault(vaultGuid.address(), 0, vault.address());
       if (error != RESULT_SUCCESS) {
         throw new Error("Unable to open Vault: " + error);
       }
       successfulVaultOpen = true;
 
-      let item = new ctypesVaultHelpers._structs.VAULT_ELEMENT.ptr;
-      let itemCount = new wintypes.DWORD;
+      let item = new ctypesVaultHelpers._structs.VAULT_ELEMENT.ptr();
+      let itemCount = new wintypes.DWORD();
       // enumerate all the available items. This api is going to return a table of all the
       // available items and item is going to point to the first element of this table.
       error = ctypesVaultHelpers._functions.VaultEnumerateItems(vault, VAULT_ENUMERATE_ALL_ITEMS,
                                                                 itemCount.address(),
                                                                 item.address());
       if (error != RESULT_SUCCESS) {
         throw new Error("Unable to enumerate Vault items: " + error);
       }
@@ -808,17 +806,17 @@ WindowsVaultFormPasswords.prototype = {
 
           // if aOnlyCheckExists is set to true, the purpose of the call is to return true if there is at
           // least a password which is true in this case because a password was by now already found
           if (aOnlyCheckExists) {
             return true;
           }
           let username = item.contents.pIdentityElement.contents.itemValue.readString();
           // the current login credential object
-          let credential = new ctypesVaultHelpers._structs.VAULT_ELEMENT.ptr;
+          let credential = new ctypesVaultHelpers._structs.VAULT_ELEMENT.ptr();
           error = ctypesVaultHelpers._functions.VaultGetItem(vault,
                                                              item.contents.schemaId.address(),
                                                              item.contents.pResourceElement,
                                                              item.contents.pIdentityElement, null,
                                                              0, 0, credential.address());
           if (error != RESULT_SUCCESS) {
             throw new Error("Unable to get item: " + error);
           }
--- a/browser/components/migration/MigrationUtils.jsm
+++ b/browser/components/migration/MigrationUtils.jsm
@@ -135,17 +135,17 @@ this.MigratorPrototype = {
    *
    * @param aProfile
    *        The profile from which data may be imported, or an empty string
    *        in the case of a single-profile migrator.
    *        In the case of multiple-profiles migrator, it is guaranteed that
    *        aProfile is a value returned by the sourceProfiles getter (see
    *        above).
    */
-  getResources: function MP_getResources(aProfile) {
+  getResources: function MP_getResources(/* aProfile */) {
     throw new Error("getResources must be overridden");
   },
 
   /**
    * OVERRIDE in order to provide an estimate of when the last time was
    * that somebody used the browser. It is OK that this is somewhat fuzzy -
    * history may not be available (or be wiped or not present due to e.g.
    * incognito mode).
@@ -196,17 +196,17 @@ this.MigratorPrototype = {
    * @see nsIBrowserProfileMigrator
    */
   getMigrateData: function MP_getMigrateData(aProfile) {
     let resources = this._getMaybeCachedResources(aProfile);
     if (!resources) {
       return [];
     }
     let types = resources.map(r => r.type);
-    return types.reduce((a, b) => a |= b, 0);
+    return types.reduce((a, b) => { a |= b; return a }, 0);
   },
 
   getKey: function MP_getKey() {
     return this.contractID.match(/\=([^\=]+)$/)[1];
   },
 
   /**
    * DO NOT OVERRIDE - After deCOMing migration, the UI will just call
@@ -256,25 +256,25 @@ this.MigratorPrototype = {
 
     // Called either directly or through the bookmarks import callback.
     let doMigrate = Task.async(function*() {
       let resourcesGroupedByItems = new Map();
       resources.forEach(function(resource) {
         if (!resourcesGroupedByItems.has(resource.type)) {
           resourcesGroupedByItems.set(resource.type, new Set());
         }
-        resourcesGroupedByItems.get(resource.type).add(resource)
+        resourcesGroupedByItems.get(resource.type).add(resource);
       });
 
       if (resourcesGroupedByItems.size == 0)
         throw new Error("No items to import");
 
       let notify = function(aMsg, aItemType) {
         Services.obs.notifyObservers(null, aMsg, aItemType);
-      }
+      };
 
       notify("Migration:Started");
       for (let [key, value] of resourcesGroupedByItems) {
         // Workaround bug 449811.
         let migrationType = key, itemResources = value;
 
         notify("Migration:ItemBeforeMigrate", migrationType);
 
@@ -293,17 +293,17 @@ this.MigratorPrototype = {
                      "Migration:ItemAfterMigrate" : "Migration:ItemError",
                      migrationType);
               resourcesGroupedByItems.delete(migrationType);
               if (resourcesGroupedByItems.size == 0) {
                 notify("Migration:Ended");
               }
             }
             completeDeferred.resolve();
-          }
+          };
 
           // If migrate throws, an error occurred, and the callback
           // (itemMayBeDone) might haven't been called.
           try {
             resource.migrate(resourceDone);
           }
           catch (ex) {
             Cu.reportError(ex);
@@ -393,17 +393,18 @@ this.MigratorPrototype = {
     let profileKey = aProfile ? aProfile.id : "";
     if (this._resourcesByProfile) {
       if (profileKey in this._resourcesByProfile)
         return this._resourcesByProfile[profileKey];
     }
     else {
       this._resourcesByProfile = { };
     }
-    return this._resourcesByProfile[profileKey] = this.getResources(aProfile);
+    this._resourcesByProfile[profileKey] = this.getResources(aProfile);
+    return this._resourcesByProfile[profileKey];
   }
 };
 
 this.MigrationUtils = Object.freeze({
   resourceTypes: {
     SETTINGS:   Ci.nsIBrowserProfileMigrator.SETTINGS,
     COOKIES:    Ci.nsIBrowserProfileMigrator.COOKIES,
     HISTORY:    Ci.nsIBrowserProfileMigrator.HISTORY,
@@ -458,17 +459,17 @@ this.MigrationUtils = Object.freeze({
       }
       catch (ex) {
         Cu.reportError(ex);
       }
       // Do not change this to call aCallback directly in try try & catch
       // blocks, because if aCallback throws, we may end up calling aCallback
       // twice.
       aCallback(success);
-    }
+    };
   },
 
   /**
    * Gets a string from the migration bundle.  Shorthand for
    * nsIStringBundle.GetStringFromName, if aReplacements isn't passed, or for
    * nsIStringBundle.formatStringFromName if it is.
    *
    * This method also takes care of "bumped" keys (See bug 737381 comment 8 for
@@ -607,17 +608,20 @@ this.MigrationUtils = Object.freeze({
       if (!rows) {
         throw new Error("Couldn't get rows from the " + description + " database.");
       }
       return rows;
     });
   },
 
   get _migrators() {
-    return gMigrators ? gMigrators : gMigrators = new Map();
+    if (!gMigrators) {
+      gMigrators = new Map();
+    }
+    return gMigrators;
   },
 
   /*
    * Returns the migrator for the given source, if any data is available
    * for this source, or null otherwise.
    *
    * @param aKey internal name of the migration source.
    *             Supported values: ie (windows),
@@ -672,23 +676,22 @@ this.MigrationUtils = Object.freeze({
       "Firefox":                           "firefox",
       "Google Chrome":                     "chrome",  // Windows, Linux
       "Chrome":                            "chrome",  // OS X
       "Chromium":                          "chromium", // Windows, OS X
       "Chromium Web Browser":              "chromium", // Linux
       "360\u5b89\u5168\u6d4f\u89c8\u5668": "360se",
     };
 
-    let browserDesc = "";
     let key = "";
     try {
       let browserDesc =
-        Cc["@mozilla.org/uriloader/external-protocol-service;1"].
-        getService(Ci.nsIExternalProtocolService).
-        getApplicationDescription("http");
+        Cc["@mozilla.org/uriloader/external-protocol-service;1"]
+          .getService(Ci.nsIExternalProtocolService)
+          .getApplicationDescription("http");
       key = APP_DESC_TO_KEY[browserDesc] || "";
     }
     catch (ex) {
       Cu.reportError("Could not detect default browser: " + ex);
     }
 
     // "firefox" is the least useful entry here, and might just be because we've set
     // ourselves as the default (on Windows 7 and below). In that case, check if we
@@ -790,16 +793,18 @@ this.MigrationUtils = Object.freeze({
               break;
 
             case "undefined":
             case "object":
               if (!item) {
                 comtaminatedVal = null;
                 break;
               }
+              /* intentionally falling through to error out here for
+                 non-null/undefined things: */
             default:
               throw new Error("Unexpected parameter type " + (typeof item) + ": " + item);
           }
         }
         params.appendElement(comtaminatedVal, false);
       }
     } else {
       params = aParams;
--- a/browser/components/migration/SafariProfileMigrator.js
+++ b/browser/components/migration/SafariProfileMigrator.js
@@ -5,21 +5,21 @@
 "use strict";
 
 var Cc = Components.classes;
 var Ci = Components.interfaces;
 var Cu = Components.utils;
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
 Cu.import("resource://gre/modules/FileUtils.jsm");
-Cu.import("resource://gre/modules/osfile.jsm");
+Cu.import("resource://gre/modules/osfile.jsm"); /* globals OS */
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/Task.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource:///modules/MigrationUtils.jsm");
+Cu.import("resource:///modules/MigrationUtils.jsm"); /* globals MigratorPrototype */
 
 XPCOMUtils.defineLazyModuleGetter(this, "Downloads",
                                   "resource://gre/modules/Downloads.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PropertyListUtils",
                                   "resource://gre/modules/PropertyListUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
                                   "resource://gre/modules/PlacesUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
@@ -127,20 +127,20 @@ Bookmarks.prototype = {
         }
         break;
       }
       case this.READING_LIST_COLLECTION: {
         // Reading list items are imported as regular bookmarks.
         // They are imported under their own folder, created either under the
         // bookmarks menu (in the case of startup migration).
         folderGuid = (yield PlacesUtils.bookmarks.insert({
-            parentGuid: PlacesUtils.bookmarks.menuGuid,
-            type: PlacesUtils.bookmarks.TYPE_FOLDER,
-            title: MigrationUtils.getLocalizedString("importedSafariReadingList"),
-          })).guid;
+          parentGuid: PlacesUtils.bookmarks.menuGuid,
+          type: PlacesUtils.bookmarks.TYPE_FOLDER,
+          title: MigrationUtils.getLocalizedString("importedSafariReadingList"),
+        })).guid;
         break;
       }
       default:
         throw new Error("Unexpected value for aCollection!");
     }
     if (folderGuid == -1)
       throw new Error("Invalid folder GUID");
 
@@ -220,17 +220,17 @@ History.prototype = {
               places.push({ uri: NetUtil.newURI(entry.get("")),
                             title: entry.get("title"),
                             visits: [{ transitionType: transType,
                                        visitDate: visitDate }] });
             }
             catch (ex) {
               // Safari's History file may contain malformed URIs which
               // will be ignored.
-              Cu.reportError(ex)
+              Cu.reportError(ex);
             }
           }
         }
         if (places.length > 0) {
           PlacesUtils.asyncHistory.updatePlaces(places, {
             _success: false,
             handleResult: function() {
               // Importing any entry is considered a successful import.
@@ -343,17 +343,16 @@ Preferences.prototype = {
         // Blocked                          FALSE     2
         // Allowed                          TRUE      1
         // Allowed, originating site only   --        3
         this._set("WebKitDisplayImagesKey", "permissions.default.image",
                   webkitVal => webkitVal ? 1 : 2);
 
         this._migrateFontSettings();
         yield this._migrateDownloadsFolder();
-
       }.bind(this)).then(() => aCallback(true), ex => {
         Cu.reportError(ex);
         aCallback(false);
       }).catch(Cu.reportError);
     });
   },
 
   /**
@@ -371,30 +370,30 @@ Preferences.prototype = {
    *        at all.
    * @return whether or not aMozPref was set.
    */
   _set: function MPR_set(aSafariKey, aMozPref, aConvertFunction) {
     if (this._dict.has(aSafariKey)) {
       let safariVal = this._dict.get(aSafariKey);
       let mozVal = aConvertFunction !== undefined ?
                    aConvertFunction(safariVal) : safariVal;
-      switch (typeof(mozVal)) {
+      switch (typeof mozVal) {
         case "string":
           Services.prefs.setCharPref(aMozPref, mozVal);
           break;
         case "number":
           Services.prefs.setIntPref(aMozPref, mozVal);
           break;
         case "boolean":
           Services.prefs.setBoolPref(aMozPref, mozVal);
           break;
         case "undefined":
           return false;
         default:
-          throw new Error("Unexpected value type: " + typeof(mozVal));
+          throw new Error("Unexpected value type: " + (typeof mozVal));
       }
     }
     return true;
   },
 
   // Fonts settings are quite problematic for migration, for a couple of
   // reasons:
   // (a) Every font preference in Gecko is set for a particular language.
@@ -418,17 +417,17 @@ Preferences.prototype = {
   // we set it for all languages.
   // As for the font type of the default font (serif/sans-serif), the default
   // type for the given language is used (set in font.default.LANGGROUP).
   _migrateFontSettings: function MPR__migrateFontSettings() {
     // If "Never use font sizes smaller than [ ] is set", migrate it for all
     // languages.
     if (this._dict.has("WebKitMinimumFontSize")) {
       let minimumSize = this._dict.get("WebKitMinimumFontSize");
-      if (typeof(minimumSize) == "number") {
+      if (typeof minimumSize == "number") {
         let prefs = Services.prefs.getChildList("font.minimum-size");
         for (let pref of prefs) {
           Services.prefs.setIntPref(pref, minimumSize);
         }
       }
       else {
         Cu.reportError("WebKitMinimumFontSize was set to an invalid value: " +
                        minimumSize);
@@ -583,18 +582,16 @@ SafariProfileMigrator.prototype.getResou
 
   // The Reading List feature was introduced at the same time in Windows and
   // Mac versions of Safari.  Not surprisingly, they are stored in the same
   // format in both versions.  Surpsingly, only on Windows there is a
   // separate property list for it.  This code is used on mac too, because
   // Apple may fix this at some point.
   pushProfileFileResource("ReadingList.plist", Bookmarks);
 
-  let prefsDir = FileUtils.getDir("UsrPrfs", [], false);
-
   let prefs = this.mainPreferencesPropertyList;
   if (prefs) {
     resources.push(new Preferences(prefs));
     resources.push(new SearchStrings(prefs));
   }
 
   let wfFile = FileUtils.getFile("UsrPrfs", ["com.apple.WebFoundation.plist"]);
   if (wfFile.exists())
@@ -602,37 +599,39 @@ SafariProfileMigrator.prototype.getResou
 
   return resources;
 };
 
 SafariProfileMigrator.prototype.getLastUsedDate = function SM_getLastUsedDate() {
   let profileDir = FileUtils.getDir("ULibDir", ["Safari"], false);
   let datePromises = ["Bookmarks.plist", "History.plist"].map(file => {
     let path = OS.Path.join(profileDir.path, file);
-    return OS.File.stat(path).catch(_ => null).then(info => {
+    return OS.File.stat(path).catch(() => null).then(info => {
       return info ? info.lastModificationDate : 0;
     });
   });
   return Promise.all(datePromises).then(dates => {
     return new Date(Math.max.apply(Math, dates));
   });
 };
 
 Object.defineProperty(SafariProfileMigrator.prototype, "mainPreferencesPropertyList", {
   get: function get_mainPreferencesPropertyList() {
     if (this._mainPreferencesPropertyList === undefined) {
       let file = FileUtils.getDir("UsrPrfs", [], false);
       if (file.exists()) {
         file.append("com.apple.Safari.plist");
         if (file.exists()) {
-          return this._mainPreferencesPropertyList =
+          this._mainPreferencesPropertyList =
             new MainPreferencesPropertyList(file);
+          return this._mainPreferencesPropertyList;
         }
       }
-      return this._mainPreferencesPropertyList = null;
+      this._mainPreferencesPropertyList = null;
+      return this._mainPreferencesPropertyList;
     }
     return this._mainPreferencesPropertyList;
   }
 });
 
 Object.defineProperty(SafariProfileMigrator.prototype, "sourceHomePageURL", {
   get: function get_sourceHomePageURL() {
     if (this.mainPreferencesPropertyList) {
--- a/browser/components/migration/content/migration.js
+++ b/browser/components/migration/content/migration.js
@@ -1,23 +1,25 @@
 /* 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";
+
 var Cc = Components.classes;
 var Ci = Components.interfaces;
 var Cu = Components.utils;
 
 const kIMig = Ci.nsIBrowserProfileMigrator;
 const kIPStartup = Ci.nsIProfileStartup;
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource:///modules/MigrationUtils.jsm");
 
-var MigrationWizard = {
+var MigrationWizard = { /* exported MigrationWizard */
   _source: "",                  // Source Profile Migrator ContractID suffix
   _itemsFlags: kIMig.ALL,       // Selected Import Data Sources (16-bit bitfield)
   _selectedProfile: null,       // Selected Profile name to import from
   _wiz: null,
   _migrator: null,
   _autoMigrate: null,
 
   init: function ()
@@ -33,17 +35,17 @@ var MigrationWizard = {
 
     let args = window.arguments;
     let entryPointId = args[0] || MigrationUtils.MIGRATION_ENTRYPOINT_UNKNOWN;
     Services.telemetry.getHistogramById("FX_MIGRATION_ENTRY_POINT").add(entryPointId);
     this.isInitialMigration = entryPointId == MigrationUtils.MIGRATION_ENTRYPOINT_FIRSTRUN;
 
     if (args.length > 1) {
       this._source = args[1];
-      this._migrator = args[2] instanceof kIMig ?  args[2] : null;
+      this._migrator = args[2] instanceof kIMig ? args[2] : null;
       this._autoMigrate = args[3].QueryInterface(kIPStartup);
       this._skipImportSourcePage = args[4];
       if (this._migrator && args[5]) {
         let sourceProfiles = this._migrator.sourceProfiles;
         this._selectedProfile = sourceProfiles.find(profile => profile.id == args[5]);
       }
 
       if (this._autoMigrate) {
@@ -262,17 +264,17 @@ var MigrationWizard = {
     this._itemsFlags = 0;
     for (var i = 0; i < dataSources.childNodes.length; ++i) {
       var checkbox = dataSources.childNodes[i];
       if (checkbox.localName == "checkbox" && checkbox.checked)
         this._itemsFlags |= parseInt(checkbox.id);
     }
   },
 
-  onImportItemCommand: function (aEvent)
+  onImportItemCommand: function ()
   {
     var items = document.getElementById("dataSources");
     var checkboxes = items.getElementsByTagName("checkbox");
 
     var oneChecked = false;
     for (var i = 0; i < checkboxes.length; ++i) {
       if (checkboxes[i].checked) {
         oneChecked = true;
@@ -288,22 +290,23 @@ var MigrationWizard = {
   {
     // only want this on the first run
     if (!this._autoMigrate) {
       this._wiz.advance();
       return;
     }
 
     var brandBundle = document.getElementById("brandBundle");
+    var pageTitle, pageDesc, mainStr;
     // These strings don't exist when not using official branding. If that's
     // the case, just skip this page.
     try {
-      var pageTitle = brandBundle.getString("homePageMigrationPageTitle");
-      var pageDesc = brandBundle.getString("homePageMigrationDescription");
-      var mainStr = brandBundle.getString("homePageSingleStartMain");
+      pageTitle = brandBundle.getString("homePageMigrationPageTitle");
+      pageDesc = brandBundle.getString("homePageMigrationDescription");
+      mainStr = brandBundle.getString("homePageSingleStartMain");
     }
     catch (e) {
       this._wiz.advance();
       return;
     }
 
     document.getElementById("homePageImport").setAttribute("label", pageTitle);
     document.getElementById("homePageImportDesc").setAttribute("value", pageDesc);
@@ -370,28 +373,27 @@ var MigrationWizard = {
       let hist = Services.telemetry.getKeyedHistogramById("FX_MIGRATION_USAGE");
       let exp = 0;
       let items = this._itemsFlags;
       while (items) {
         if (items & 1) {
           hist.add(this._source, exp);
         }
         items = items >> 1;
-        exp++
+        exp++;
       }
     }
   },
 
   _listItems: function (aID)
   {
     var items = document.getElementById(aID);
     while (items.hasChildNodes())
       items.removeChild(items.firstChild);
 
-    var brandBundle = document.getElementById("brandBundle");
     var itemID;
     for (var i = 0; i < 16; ++i) {
       itemID = (this._itemsFlags >> i) & 0x1 ? Math.pow(2, i) : 0;
       if (itemID > 0) {
         var label = document.createElement("label");
         label.id = itemID + "_migrated";
         try {
           label.setAttribute("value",
@@ -406,114 +408,114 @@ var MigrationWizard = {
       }
     }
   },
 
   observe: function (aSubject, aTopic, aData)
   {
     var label;
     switch (aTopic) {
-    case "Migration:Started":
-      break;
-    case "Migration:ItemBeforeMigrate":
-      label = document.getElementById(aData + "_migrated");
-      if (label)
-        label.setAttribute("style", "font-weight: bold");
-      break;
-    case "Migration:ItemAfterMigrate":
-      label = document.getElementById(aData + "_migrated");
-      if (label)
-        label.removeAttribute("style");
-      break;
-    case "Migration:Ended":
-      if (this.isInitialMigration) {
-        // Ensure errors in reporting data recency do not affect the rest of the migration.
-        try {
-          this.reportDataRecencyTelemetry();
-        } catch (ex) {
-          Cu.reportError(ex);
-        }
-      }
-      if (this._autoMigrate) {
-        let hasImportedHomepage = !!(this._newHomePage && this._newHomePage != "DEFAULT");
-        Services.telemetry.getKeyedHistogramById("FX_MIGRATION_IMPORTED_HOMEPAGE")
-                          .add(this._source, hasImportedHomepage);
-        if (this._newHomePage) {
+      case "Migration:Started":
+        break;
+      case "Migration:ItemBeforeMigrate":
+        label = document.getElementById(aData + "_migrated");
+        if (label)
+          label.setAttribute("style", "font-weight: bold");
+        break;
+      case "Migration:ItemAfterMigrate":
+        label = document.getElementById(aData + "_migrated");
+        if (label)
+          label.removeAttribute("style");
+        break;
+      case "Migration:Ended":
+        if (this.isInitialMigration) {
+          // Ensure errors in reporting data recency do not affect the rest of the migration.
           try {
-            // set homepage properly
-            var prefSvc = Components.classes["@mozilla.org/preferences-service;1"]
-                                    .getService(Components.interfaces.nsIPrefService);
-            var prefBranch = prefSvc.getBranch(null);
-
-            if (this._newHomePage == "DEFAULT") {
-              prefBranch.clearUserPref("browser.startup.homepage");
-            }
-            else {
-              var str = Components.classes["@mozilla.org/supports-string;1"]
-                                .createInstance(Components.interfaces.nsISupportsString);
-              str.data = this._newHomePage;
-              prefBranch.setComplexValue("browser.startup.homepage",
-                                         Components.interfaces.nsISupportsString,
-                                         str);
-            }
-
-            var dirSvc = Components.classes["@mozilla.org/file/directory_service;1"]
-                                   .getService(Components.interfaces.nsIProperties);
-            var prefFile = dirSvc.get("ProfDS", Components.interfaces.nsIFile);
-            prefFile.append("prefs.js");
-            prefSvc.savePrefFile(prefFile);
+            this.reportDataRecencyTelemetry();
           } catch (ex) {
-            dump(ex);
+            Cu.reportError(ex);
           }
         }
-
-        // We're done now.
-        this._wiz.canAdvance = true;
-        this._wiz.advance();
+        if (this._autoMigrate) {
+          let hasImportedHomepage = !!(this._newHomePage && this._newHomePage != "DEFAULT");
+          Services.telemetry.getKeyedHistogramById("FX_MIGRATION_IMPORTED_HOMEPAGE")
+                            .add(this._source, hasImportedHomepage);
+          if (this._newHomePage) {
+            try {
+              // set homepage properly
+              var prefSvc = Components.classes["@mozilla.org/preferences-service;1"]
+                                      .getService(Components.interfaces.nsIPrefService);
+              var prefBranch = prefSvc.getBranch(null);
 
-        setTimeout(close, 5000);
-      }
-      else {
-        this._wiz.canAdvance = true;
-        var nextButton = this._wiz.getButton("next");
-        nextButton.click();
-      }
-      break;
-    case "Migration:ItemError":
-      let type = "undefined";
-      let numericType = parseInt(aData);
-      switch (numericType) {
-      case Ci.nsIBrowserProfileMigrator.SETTINGS:
-        type = "settings";
-        break;
-      case Ci.nsIBrowserProfileMigrator.COOKIES:
-        type = "cookies";
+              if (this._newHomePage == "DEFAULT") {
+                prefBranch.clearUserPref("browser.startup.homepage");
+              }
+              else {
+                var str = Components.classes["@mozilla.org/supports-string;1"]
+                                  .createInstance(Components.interfaces.nsISupportsString);
+                str.data = this._newHomePage;
+                prefBranch.setComplexValue("browser.startup.homepage",
+                                           Components.interfaces.nsISupportsString,
+                                           str);
+              }
+
+              var dirSvc = Components.classes["@mozilla.org/file/directory_service;1"]
+                                     .getService(Components.interfaces.nsIProperties);
+              var prefFile = dirSvc.get("ProfDS", Components.interfaces.nsIFile);
+              prefFile.append("prefs.js");
+              prefSvc.savePrefFile(prefFile);
+            } catch (ex) {
+              dump(ex);
+            }
+          }
+
+          // We're done now.
+          this._wiz.canAdvance = true;
+          this._wiz.advance();
+
+          setTimeout(close, 5000);
+        }
+        else {
+          this._wiz.canAdvance = true;
+          var nextButton = this._wiz.getButton("next");
+          nextButton.click();
+        }
         break;
-      case Ci.nsIBrowserProfileMigrator.HISTORY:
-        type = "history";
-        break;
-      case Ci.nsIBrowserProfileMigrator.FORMDATA:
-        type = "form data";
-        break;
-      case Ci.nsIBrowserProfileMigrator.PASSWORDS:
-        type = "passwords";
+      case "Migration:ItemError":
+        let type = "undefined";
+        let numericType = parseInt(aData);
+        switch (numericType) {
+          case Ci.nsIBrowserProfileMigrator.SETTINGS:
+            type = "settings";
+            break;
+          case Ci.nsIBrowserProfileMigrator.COOKIES:
+            type = "cookies";
+            break;
+          case Ci.nsIBrowserProfileMigrator.HISTORY:
+            type = "history";
+            break;
+          case Ci.nsIBrowserProfileMigrator.FORMDATA:
+            type = "form data";
+            break;
+          case Ci.nsIBrowserProfileMigrator.PASSWORDS:
+            type = "passwords";
+            break;
+          case Ci.nsIBrowserProfileMigrator.BOOKMARKS:
+            type = "bookmarks";
+            break;
+          case Ci.nsIBrowserProfileMigrator.OTHERDATA:
+            type = "misc. data";
+            break;
+        }
+        Cc["@mozilla.org/consoleservice;1"]
+          .getService(Ci.nsIConsoleService)
+          .logStringMessage("some " + type + " did not successfully migrate.");
+        Services.telemetry.getKeyedHistogramById("FX_MIGRATION_ERRORS")
+                          .add(this._source, Math.log2(numericType));
         break;
-      case Ci.nsIBrowserProfileMigrator.BOOKMARKS:
-        type = "bookmarks";
-        break;
-      case Ci.nsIBrowserProfileMigrator.OTHERDATA:
-        type = "misc. data";
-        break;
-      }
-      Cc["@mozilla.org/consoleservice;1"]
-        .getService(Ci.nsIConsoleService)
-        .logStringMessage("some " + type + " did not successfully migrate.");
-      Services.telemetry.getKeyedHistogramById("FX_MIGRATION_ERRORS")
-                        .add(this._source, Math.log2(numericType));
-      break;
     }
   },
 
   onDonePageShow: function ()
   {
     this._wiz.getButton("cancel").disabled = true;
     this._wiz.canRewind = false;
     this._listItems("doneItems");
@@ -532,16 +534,16 @@ var MigrationWizard = {
           diffInHours = ONE_YEAR;
         }
         histogram.add(localKey, diffInHours);
         return [localKey, diffInHours];
       }));
     }
     Promise.all(lastUsedPromises).then(migratorUsedTimeDiff => {
       // Sort low to high.
-      migratorUsedTimeDiff.sort(([keyA, diffA], [keyB, diffB]) => diffA - diffB);
+      migratorUsedTimeDiff.sort(([keyA, diffA], [keyB, diffB]) => diffA - diffB); /* eslint no-unused-vars: off */
       let usedMostRecentBrowser = migratorUsedTimeDiff.length && this._source == migratorUsedTimeDiff[0][0];
       let usedRecentBrowser =
         Services.telemetry.getKeyedHistogramById("FX_STARTUP_MIGRATION_USED_RECENT_BROWSER");
       usedRecentBrowser.add(this._source, usedMostRecentBrowser);
     });
   },
 };
--- a/browser/components/migration/tests/unit/.eslintrc.js
+++ b/browser/components/migration/tests/unit/.eslintrc.js
@@ -1,7 +1,7 @@
 "use strict";
 
-module.exports = {
+module.exports = { // eslint-disable-line no-undef
   "extends": [
     "../../../../../testing/xpcshell/xpcshell.eslintrc.js"
   ]
 };
--- a/browser/components/migration/tests/unit/head_migration.js
+++ b/browser/components/migration/tests/unit/head_migration.js
@@ -1,8 +1,12 @@
+"use strict";
+
+/* exported gProfD, promiseMigration, registerFakePath */
+
 var { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
 
 Cu.importGlobalProperties([ "URL" ]);
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
@@ -10,17 +14,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyModuleGetter(this, "FileUtils",
                                   "resource://gre/modules/FileUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "MigrationUtils",
                                   "resource:///modules/MigrationUtils.jsm");
 
 // Initialize profile.
 var gProfD = do_get_profile();
 
-Cu.import("resource://testing-common/AppInfo.jsm");
+Cu.import("resource://testing-common/AppInfo.jsm"); /* globals updateAppInfo */
 updateAppInfo();
 
 /**
  * Migrates the requested resource and waits for the migration to be complete.
  */
 function promiseMigration(migrator, resourceType, aProfile = null) {
   // Ensure resource migration is available.
   let availableSources = migrator.getMigrateData(aProfile, false);
--- a/browser/components/migration/tests/unit/test_Chrome_cookies.js
+++ b/browser/components/migration/tests/unit/test_Chrome_cookies.js
@@ -1,8 +1,10 @@
+"use strict";
+
 Cu.import("resource://gre/modules/ForgetAboutSite.jsm");
 
 add_task(function* () {
   registerFakePath("ULibDir", do_get_file("Library/"));
   let migrator = MigrationUtils.getMigrator("chrome");
 
   Assert.ok(migrator.sourceExists, "Sanity check the source exists");
 
@@ -41,10 +43,9 @@ add_task(function* () {
   for (let prop of Object.keys(COOKIE)) {
     Assert.equal(foundCookie[prop], COOKIE[prop], "Check cookie " + prop);
   }
 
   // Cleanup.
   ForgetAboutSite.removeDataFromDomain(COOKIE.host);
   Assert.equal(Services.cookies.countCookiesFromHost(COOKIE.host), 0,
                "There are no cookies after cleanup");
-
 });
--- a/browser/components/migration/tests/unit/test_Chrome_passwords.js
+++ b/browser/components/migration/tests/unit/test_Chrome_passwords.js
@@ -1,8 +1,10 @@
+"use strict";
+
 Cu.import("resource://gre/modules/OSCrypto.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 const PROFILE = {
   id: "Default",
   name: "Person 1",
 };
 
--- a/browser/components/migration/tests/unit/test_Edge_availability.js
+++ b/browser/components/migration/tests/unit/test_Edge_availability.js
@@ -1,8 +1,10 @@
+"use strict";
+
 const EDGE_AVAILABLE_MIGRATIONS =
   MigrationUtils.resourceTypes.COOKIES |
   MigrationUtils.resourceTypes.BOOKMARKS |
   MigrationUtils.resourceTypes.HISTORY |
   MigrationUtils.resourceTypes.PASSWORDS;
 
 add_task(function* () {
   let migrator = MigrationUtils.getMigrator("edge");
--- a/browser/components/migration/tests/unit/test_Edge_db_migration.js
+++ b/browser/components/migration/tests/unit/test_Edge_db_migration.js
@@ -35,30 +35,31 @@ function createColumnCreationWrapper({na
   wrapper.name = new wchar_tArray(name.length + 1);
   wrapper.name.value = String(name);
   wrapper.column.szColumnName = wrapper.name;
   wrapper.column.coltyp = type;
   let fallback = 0;
   switch (type) {
     case COLUMN_TYPES.JET_coltypText:
       fallback = 255;
+      // Intentional fall-through
     case COLUMN_TYPES.JET_coltypLongText:
       wrapper.column.cbMax = cbMax || fallback || 64 * 1024;
       break;
     case COLUMN_TYPES.JET_coltypGUID:
       wrapper.column.cbMax = 16;
       break;
     case COLUMN_TYPES.JET_coltypBit:
       wrapper.column.cbMax = 1;
       break;
     case COLUMN_TYPES.JET_coltypLongLong:
       wrapper.column.cbMax = 8;
       break;
     default:
-      throw "Unknown column type!";
+      throw new Error("Unknown column type!");
   }
 
   wrapper.column.columnid = new ESE.JET_COLUMNID();
   wrapper.column.grbit = 0;
   wrapper.column.pvDefault = null;
   wrapper.column.cbDefault = 0;
   wrapper.column.cp = 0;
 
@@ -231,18 +232,18 @@ let eseDBWritingHelpers = {
         // created column ids.
         let columnCount = ctypes.UInt64.lo(tableCreationWrapper.table.cColumns);
         let columnsPassed = tableCreationWrapper.table.rgcolumncreate;
         for (let i = 0; i < columnCount; i++) {
           let column = columnsPassed.contents;
           columnIdMap.set(column.szColumnName.readString(), column);
           columnsPassed = columnsPassed.increment();
         }
-        let rv = ESE.ManualMove(this._sessionId, this._tableId,
-                                -2147483648 /* JET_MoveFirst */, 0);
+        ESE.ManualMove(this._sessionId, this._tableId,
+                       -2147483648 /* JET_MoveFirst */, 0);
         ESE.BeginTransaction(this._sessionId);
         for (let row of rows) {
           ESE.PrepareUpdate(this._sessionId, this._tableId, 0 /* JET_prepInsert */);
           for (let columnName in row) {
             let col = columnIdMap.get(columnName);
             let colId = col.columnid;
             let [val, valSize] = convertValueForWriting(row[columnName], col.coltyp);
             /* JET_bitSetOverwriteLV */
@@ -255,17 +256,16 @@ let eseDBWritingHelpers = {
       }
     } finally {
       try {
         this._close();
       } catch (ex) {
         Cu.reportError(ex);
       }
     }
-
   },
 
   _close() {
     if (this._tableId) {
       ESE.FailSafeCloseTable(this._sessionId, this._tableId);
       delete this._tableId;
     }
     if (this._opened) {
@@ -396,17 +396,17 @@ add_task(function*() {
       seenBookmarks.push({itemId, parentId, index, itemType, url, title, dateAdded, itemGuid, parentGuid});
     },
     onBeginUpdateBatch() {},
     onEndUpdateBatch() {},
     onItemRemoved() {},
     onItemChanged() {},
     onItemVisited() {},
     onItemMoved() {},
-  }
+  };
   PlacesUtils.bookmarks.addObserver(bookmarkObserver, false);
 
   let migrateResult = yield new Promise(resolve => bookmarksMigrator.migrate(resolve)).catch(ex => {
     Cu.reportError(ex);
     Assert.ok(false, "Got an exception trying to migrate data! " + ex);
     return false;
   });
   PlacesUtils.bookmarks.removeObserver(bookmarkObserver);
@@ -447,17 +447,17 @@ add_task(function*() {
       Assert.ok(true, "Expect toolbar and menu folders to not be in menu or toolbar");
     } else {
       // Bit hacky, but we do need to check this.
       Assert.equal(bookmark.title, "Item in folder", "Subfoldered item shouldn't be in menu or toolbar");
       let parent = seenBookmarks.find(maybeParent => maybeParent.itemGuid == bookmark.parentGuid);
       Assert.equal(parent && parent.title, "Folder", "Subfoldered item should be in subfolder labeled 'Folder'");
     }
 
-    let dbItem = itemsInDB.find(dbItem => bookmark.title == dbItem.Title);
+    let dbItem = itemsInDB.find(someItem => bookmark.title == someItem.Title);
     if (!dbItem) {
       Assert.equal(bookmark.title, importParentFolderName, "Only the extra layer of folders isn't in the input we stuck in the DB.");
       Assert.ok([menuParentGuid, toolbarParentGuid].includes(bookmark.itemGuid), "This item should be one of the containers");
     } else {
       Assert.equal(dbItem.URL || null, bookmark.url && bookmark.url.spec, "URL is correct");
       Assert.equal(dbItem.DateUpdated.valueOf(), (new Date(bookmark.dateAdded / 1000)).valueOf(), "Date added is correct");
     }
   }
--- a/browser/components/migration/tests/unit/test_IE7_passwords.js
+++ b/browser/components/migration/tests/unit/test_IE7_passwords.js
@@ -1,19 +1,20 @@
+"use strict";
+
 Cu.import("resource://gre/modules/AppConstants.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "WindowsRegistry",
                                   "resource://gre/modules/WindowsRegistry.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "OSCrypto",
                                   "resource://gre/modules/OSCrypto.jsm");
 
-const CRYPT_PROTECT_UI_FORBIDDEN = 1;
 const IE7_FORM_PASSWORDS_MIGRATOR_NAME = "IE7FormPasswords";
-const LOGINS_KEY =  "Software\\Microsoft\\Internet Explorer\\IntelliForms\\Storage2";
+const LOGINS_KEY = "Software\\Microsoft\\Internet Explorer\\IntelliForms\\Storage2";
 const EXTENSION = "-backup";
 const TESTED_WEBSITES = {
   twitter: {
     uri: makeURI("https://twitter.com"),
     hash: "A89D42BC6406E27265B1AD0782B6F376375764A301",
     data: [12, 0, 0, 0, 56, 0, 0, 0, 38, 0, 0, 0, 87, 73, 67, 75, 24, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 36, 67, 124, 118, 212, 208, 1, 8, 0, 0, 0, 18, 0, 0, 0, 68, 36, 67, 124, 118, 212, 208, 1, 9, 0, 0, 0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 0, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, 0, 57, 0, 0, 0],
     logins: [
       {
@@ -43,18 +44,18 @@ const TESTED_WEBSITES = {
         formSubmitURL: "",
         httpRealm: null,
         usernameField: "",
         passwordField: "",
         timeCreated: 1439326966000,
         timeLastUsed: 1439326966000,
         timePasswordChanged: 1439326966000,
         timesUsed: 1,
-     },
-     {
+      },
+      {
         username: "username1",
         password: "password1",
         hostname: "https://www.facebook.com",
         formSubmitURL: "",
         httpRealm: null,
         usernameField: "",
         passwordField: "",
         timeCreated: 1439326997000,
@@ -102,17 +103,17 @@ const TESTED_WEBSITES = {
         formSubmitURL: "",
         httpRealm: null,
         usernameField: "",
         passwordField: "",
         timeCreated: 1439338767000,
         timeLastUsed: 1439338767000,
         timePasswordChanged: 1439338767000,
         timesUsed: 1,
-       },
+      },
     ],
   },
   reddit: {
     uri: makeURI("http://www.reddit.com/"),
     hash: "B644028D1C109A91EC2C4B9D1F145E55A1FAE42065",
     data: [12, 0, 0, 0, 152, 0, 0, 0, 212, 0, 0, 0, 87, 73, 67, 75, 24, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 8, 234, 114, 153, 212, 208, 1, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 97, 93, 131, 116, 153, 212, 208, 1, 3, 0, 0, 0, 14, 0, 0, 0, 97, 93, 131, 116, 153, 212, 208, 1, 16, 0, 0, 0, 48, 0, 0, 0, 88, 150, 78, 174, 153, 212, 208, 1, 4, 0, 0, 0, 58, 0, 0, 0, 88, 150, 78, 174, 153, 212, 208, 1, 29, 0, 0, 0, 118, 0, 0, 0, 79, 102, 137, 34, 154, 212, 208, 1, 15, 0, 0, 0, 150, 0, 0, 0, 79, 102, 137, 34, 154, 212, 208, 1, 30, 0, 0, 0, 97, 0, 0, 0, 0, 0, 252, 140, 173, 138, 146, 48, 0, 0, 66, 0, 105, 0, 116, 0, 116, 0, 101, 0, 32, 0, 98, 0, 101, 0, 115, 0, 116, 0, 228, 0, 116, 0, 105, 0, 103, 0, 101, 0, 110, 0, 0, 0, 205, 145, 110, 127, 198, 91, 1, 120, 0, 0, 31, 4, 48, 4, 64, 4, 62, 4, 59, 4, 76, 4, 32, 0, 67, 4, 65, 4, 63, 4, 53, 4, 72, 4, 61, 4, 62, 4, 32, 0, 65, 4, 49, 4, 64, 4, 62, 4, 72, 4, 53, 4, 61, 4, 46, 0, 32, 0, 18, 4, 62, 4, 57, 4, 66, 4, 56, 4, 0, 0, 40, 6, 51, 6, 69, 6, 32, 0, 39, 6, 68, 6, 68, 6, 71, 6, 32, 0, 39, 6, 68, 6, 49, 6, 45, 6, 69, 6, 70, 6, 0, 0, 118, 0, 101, 0, 117, 0, 105, 0, 108, 0, 108, 0, 101, 0, 122, 0, 32, 0, 108, 0, 101, 0, 32, 0, 118, 0, 233, 0, 114, 0, 105, 0, 102, 0, 105, 0, 101, 0, 114, 0, 32, 0, 224, 0, 32, 0, 110, 0, 111, 0, 117, 0, 118, 0, 101, 0, 97, 0, 117, 0, 0, 0],
     logins: [
       {
@@ -148,17 +149,17 @@ const TESTED_WEBSITES = {
         formSubmitURL: "",
         httpRealm: null,
         usernameField: "",
         passwordField: "",
         timeCreated: 1439341166000,
         timeLastUsed: 1439341166000,
         timePasswordChanged: 1439341166000,
         timesUsed: 1,
-     },
+      },
     ],
   },
 };
 
 const TESTED_URLS = [
   "http://a.foo.com",
   "http://b.foo.com",
   "http://c.foo.com",
@@ -250,17 +251,17 @@ function checkLoginsAreEqual(passwordMan
                  "The two logins ID " + id + " have the same " + attribute);
   }
 }
 
 function createRegistryPath(path) {
   let loginPath = path.split("\\");
   let parentKey = Cc["@mozilla.org/windows-registry-key;1"].
                   createInstance(nsIWindowsRegKey);
-  let currentPath =[];
+  let currentPath = [];
   for (let currentKey of loginPath) {
     parentKey.open(nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, currentPath.join("\\"),
                    nsIWindowsRegKey.ACCESS_ALL);
 
     if (!parentKey.hasChild(currentKey)) {
       parentKey.createChild(currentKey, 0);
     }
     currentPath.push(currentKey);
--- a/browser/components/migration/tests/unit/test_IE_bookmarks.js
+++ b/browser/components/migration/tests/unit/test_IE_bookmarks.js
@@ -1,8 +1,10 @@
+"use strict";
+
 add_task(function* () {
   let migrator = MigrationUtils.getMigrator("ie");
   // Sanity check for the source.
   Assert.ok(migrator.sourceExists);
 
   // Wait for the imported bookmarks.  Check that "From Internet Explorer"
   // folders are created in the menu and on the toolbar.
   let source = MigrationUtils.getLocalizedString("sourceNameIE");
--- a/browser/components/migration/tests/unit/test_IE_cookies.js
+++ b/browser/components/migration/tests/unit/test_IE_cookies.js
@@ -1,8 +1,10 @@
+"use strict";
+
 XPCOMUtils.defineLazyModuleGetter(this, "ctypes",
                                   "resource://gre/modules/ctypes.jsm");
 
 add_task(function* () {
   let migrator = MigrationUtils.getMigrator("ie");
   // Sanity check for the source.
   Assert.ok(migrator.sourceExists);
 
--- a/browser/components/migration/tests/unit/test_Safari_bookmarks.js
+++ b/browser/components/migration/tests/unit/test_Safari_bookmarks.js
@@ -1,8 +1,10 @@
+"use strict";
+
 add_task(function* () {
   registerFakePath("ULibDir", do_get_file("Library/"));
 
   let migrator = MigrationUtils.getMigrator("safari");
   // Sanity check for the source.
   Assert.ok(migrator.sourceExists);
 
   // Wait for the imported bookmarks.  Check that "From Safari"
--- a/browser/components/migration/tests/unit/test_automigration.js
+++ b/browser/components/migration/tests/unit/test_automigration.js
@@ -1,14 +1,16 @@
+"use strict";
+
 Cu.import("resource:///modules/MigrationUtils.jsm");
 Cu.import("resource://gre/modules/PlacesUtils.jsm");
 Cu.import("resource://gre/modules/Preferences.jsm");
 Cu.import("resource://testing-common/TestUtils.jsm");
 Cu.import("resource://testing-common/PlacesTestUtils.jsm");
-let AutoMigrateBackstage = Cu.import("resource:///modules/AutoMigrate.jsm");
+let AutoMigrateBackstage = Cu.import("resource:///modules/AutoMigrate.jsm"); /* globals AutoMigrate */
 
 let gShimmedMigratorKeyPicker = null;
 let gShimmedMigrator = null;
 
 const kUsecPerMin = 60 * 1000000;
 
 // This is really a proxy on MigrationUtils, but if we specify that directly,
 // we get in trouble because the object itself is frozen, and Proxies can't
--- a/browser/components/migration/tests/unit/test_fx_telemetry.js
+++ b/browser/components/migration/tests/unit/test_fx_telemetry.js
@@ -1,19 +1,22 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
-var {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {});
+/* globals do_get_tempdir */
 
+"use strict";
+
+/* exported run_test */
 function run_test() {
   run_next_test();
 }
 
 function readFile(file) {
-  let stream = Cc['@mozilla.org/network/file-input-stream;1']
+  let stream = Cc["@mozilla.org/network/file-input-stream;1"]
                .createInstance(Ci.nsIFileInputStream);
   stream.init(file, -1, -1, Ci.nsIFileInputStream.CLOSE_ON_EOF);
 
   let sis = Cc["@mozilla.org/scriptableinputstream;1"]
             .createInstance(Ci.nsIScriptableInputStream);
   sis.init(stream);
   let contents = sis.read(file.fileSize);
   sis.close();
@@ -86,19 +89,17 @@ function createSubDir(dir, subDirName) {
 
 function promiseMigrator(name, srcDir, targetDir) {
   let migrator = Cc["@mozilla.org/profile/migrator;1?app=browser&type=firefox"]
                  .createInstance(Ci.nsISupports)
                  .wrappedJSObject;
   let migrators = migrator._getResourcesInternal(srcDir, targetDir);
   for (let m of migrators) {
     if (m.name == name) {
-      return new Promise((resolve, reject) => {
-        m.migrate(resolve);
-      });
+      return new Promise(resolve => m.migrate(resolve));
     }
   }
   throw new Error("failed to find the " + name + " migrator");
 }
 
 function promiseTelemetryMigrator(srcDir, targetDir) {
   return promiseMigrator("telemetry", srcDir, targetDir);
 }
@@ -180,31 +181,31 @@ add_task(function* test_datareporting_no
 
   checkDirectoryContains(targetDir, {});
 });
 
 add_task(function* test_datareporting_empty() {
   let [srcDir, targetDir] = getTestDirs();
 
   // Migrate with an empty 'datareporting' subdir.
-  let subDir = createSubDir(srcDir, "datareporting");
+  createSubDir(srcDir, "datareporting");
   let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
   Assert.ok(ok, "callback should have been true");
 
   // We should end up with no migrated files.
   checkDirectoryContains(targetDir, {
     "datareporting": {},
   });
 });
 
 add_task(function* test_healthreport_empty() {
   let [srcDir, targetDir] = getTestDirs();
 
   // Migrate with no 'datareporting' and an empty 'healthreport' subdir.
-  let subDir = createSubDir(srcDir, "healthreport");
+  createSubDir(srcDir, "healthreport");
   let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
   Assert.ok(ok, "callback should have been true");
 
   // We should end up with no migrated files.
   checkDirectoryContains(targetDir, {});
 });
 
 add_task(function* test_datareporting_many() {
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/content/FormAutofillContent.jsm
@@ -0,0 +1,134 @@
+/* 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/. */
+
+/*
+ * Implements a service used by DOM content to request Form Autofill.
+ */
+
+"use strict";
+
+const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
+
+/**
+ * Handles profile autofill for a DOM Form element.
+ * @param {HTMLFormElement} form Form that need to be auto filled
+ */
+function FormAutofillHandler(form) {
+  this.form = form;
+  this.fieldDetails = [];
+}
+
+FormAutofillHandler.prototype = {
+  /**
+   * DOM Form element to which this object is attached.
+   */
+  form: null,
+
+  /**
+   * Array of collected data about relevant form fields.  Each item is an object
+   * storing the identifying details of the field and a reference to the
+   * originally associated element from the form.
+   *
+   * The "section", "addressType", "contactType", and "fieldName" values are
+   * used to identify the exact field when the serializable data is received
+   * from the backend.  There cannot be multiple fields which have
+   * the same exact combination of these values.
+   *
+   * A direct reference to the associated element cannot be sent to the user
+   * interface because processing may be done in the parent process.
+   */
+  fieldDetails: null,
+
+  /**
+   * Returns information from the form about fields that can be autofilled, and
+   * populates the fieldDetails array on this object accordingly.
+   *
+   * @returns {Array<Object>} Serializable data structure that can be sent to the user
+   *          interface, or null if the operation failed because the constraints
+   *          on the allowed fields were not honored.
+   */
+  collectFormFields() {
+    let autofillData = [];
+
+    for (let element of this.form.elements) {
+      // Query the interface and exclude elements that cannot be autocompleted.
+      if (!(element instanceof Ci.nsIDOMHTMLInputElement)) {
+        continue;
+      }
+
+      // Exclude elements to which no autocomplete field has been assigned.
+      let info = element.getAutocompleteInfo();
+      if (!info.fieldName || ["on", "off"].includes(info.fieldName)) {
+        continue;
+      }
+
+      // Store the association between the field metadata and the element.
+      if (this.fieldDetails.some(f => f.section == info.section &&
+                                      f.addressType == info.addressType &&
+                                      f.contactType == info.contactType &&
+                                      f.fieldName == info.fieldName)) {
+        // A field with the same identifier already exists.
+        return null;
+      }
+
+      let inputFormat = {
+        section: info.section,
+        addressType: info.addressType,
+        contactType: info.contactType,
+        fieldName: info.fieldName,
+      };
+      // Clone the inputFormat for caching the fields and elements together
+      let formatWithElement = Object.assign({}, inputFormat);
+
+      inputFormat.index = autofillData.length;
+      autofillData.push(inputFormat);
+
+      formatWithElement.element = element;
+      this.fieldDetails.push(formatWithElement);
+    }
+
+    return autofillData;
+  },
+
+  /**
+   * Processes form fields that can be autofilled, and populates them with the
+   * data provided by backend.
+   *
+   * @param {Array<Object>} autofillResult
+   *        Data returned by the user interface.
+   *        [{
+   *          section: Value originally provided to the user interface.
+   *          addressType: Value originally provided to the user interface.
+   *          contactType: Value originally provided to the user interface.
+   *          fieldName: Value originally provided to the user interface.
+   *          value: String with which the field should be updated.
+   *          index: Index to match the input in fieldDetails
+   *        }],
+   *        }
+   */
+  autofillFormFields(autofillResult) {
+    for (let field of autofillResult) {
+      // Get the field details, if it was processed by the user interface.
+      let fieldDetail = this.fieldDetails[field.index];
+
+      // Avoid the invalid value set
+      if (!fieldDetail || !field.value) {
+        continue;
+      }
+
+      let info = fieldDetail.element.getAutocompleteInfo();
+      if (field.section != info.section ||
+          field.addressType != info.addressType ||
+          field.contactType != info.contactType ||
+          field.fieldName != info.fieldName) {
+        Cu.reportError("Autocomplete tokens mismatched");
+        continue;
+      }
+
+      fieldDetail.element.setUserInput(field.value);
+    }
+  },
+};
+
+this.EXPORTED_SYMBOLS = ["FormAutofillHandler"];
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/jar.mn
@@ -0,0 +1,7 @@
+# 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/.
+
+[features/formautofill@mozilla.org] chrome.jar:
+% resource formautofill %content/
+ content/ (content/*)
--- a/browser/extensions/formautofill/moz.build
+++ b/browser/extensions/formautofill/moz.build
@@ -11,8 +11,12 @@ FINAL_TARGET_FILES.features['formautofil
   'bootstrap.js'
 ]
 
 FINAL_TARGET_PP_FILES.features['formautofill@mozilla.org'] += [
   'install.rdf.in'
 ]
 
 BROWSER_CHROME_MANIFESTS += ['test/browser/browser.ini']
+
+XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
+
+JAR_MANIFESTS += ['jar.mn']
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/.eslintrc
@@ -0,0 +1,5 @@
+{
+  "extends": [
+    "../../../../../testing/xpcshell/xpcshell.eslintrc"
+  ],
+}
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/head.js
@@ -0,0 +1,26 @@
+/**
+ * Provides infrastructure for automated login components tests.
+ */
+
+ /* exported importAutofillModule */
+
+"use strict";
+
+const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
+
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://testing-common/MockDocument.jsm");
+
+// Load the module by Service newFileURI API for running extension's XPCShell test
+function importAutofillModule(module) {
+  return Cu.import(Services.io.newFileURI(do_get_file(module)).spec);
+}
+
+add_task(function* test_common_initialize() {
+  Services.prefs.setBoolPref("dom.forms.autocomplete.experimental", true);
+
+  // Clean up after every test.
+  do_register_cleanup(() => {
+    Services.prefs.setBoolPref("dom.forms.autocomplete.experimental", false);
+  });
+});
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/test_autofillFormFields.js
@@ -0,0 +1,200 @@
+/*
+ * Test for form auto fill content helper fill all inputs function.
+ */
+
+"use strict";
+
+let {FormAutofillHandler} = importAutofillModule("FormAutofillContent.jsm");
+
+const TESTCASES = [
+  {
+    description: "Form without autocomplete property",
+    document: `<form><input id="given-name"><input id="family-name">
+               <input id="street-addr"><input id="city"><input id="country">
+               <input id='email'><input id="tel"></form>`,
+    fieldDetails: [],
+    profileData: [],
+    expectedResult: {
+      "given-name": "",
+      "family-name": "",
+      "street-addr": "",
+      "city": "",
+      "country": "",
+      "email": "",
+      "tel": "",
+    },
+  },
+  {
+    description: "Form with autocomplete properties and 1 token",
+    document: `<form><input id="given-name" autocomplete="given-name">
+               <input id="family-name" autocomplete="family-name">
+               <input id="street-addr" autocomplete="street-address">
+               <input id="city" autocomplete="address-level2">
+               <input id="country" autocomplete="country">
+               <input id="email" autocomplete="email">
+               <input id="tel" autocomplete="tel"></form>`,
+    fieldDetails: [
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "street-address", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "country", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "email", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel", "element": {}},
+    ],
+    profileData: [
+      {"section": "", "addressType": "", "fieldName": "given-name", "contactType": "", "index": 0, "value": "foo"},
+      {"section": "", "addressType": "", "fieldName": "family-name", "contactType": "", "index": 1, "value": "bar"},
+      {"section": "", "addressType": "", "fieldName": "street-address", "contactType": "", "index": 2, "value": "2 Harrison St"},
+      {"section": "", "addressType": "", "fieldName": "address-level2", "contactType": "", "index": 3, "value": "San Francisco"},
+      {"section": "", "addressType": "", "fieldName": "country", "contactType": "", "index": 4, "value": "US"},
+      {"section": "", "addressType": "", "fieldName": "email", "contactType": "", "index": 5, "value": "foo@mozilla.com"},
+      {"section": "", "addressType": "", "fieldName": "tel", "contactType": "", "index": 6, "value": "1234567"},
+    ],
+    expectedResult: {
+      "given-name": "foo",
+      "family-name": "bar",
+      "street-addr": "2 Harrison St",
+      "city": "San Francisco",
+      "country": "US",
+      "email": "foo@mozilla.com",
+      "tel": "1234567",
+    },
+  },
+  {
+    description: "Form with autocomplete properties and 2 tokens",
+    document: `<form><input id="given-name" autocomplete="shipping given-name">
+               <input id="family-name" autocomplete="shipping family-name">
+               <input id="street-addr" autocomplete="shipping street-address">
+               <input id="city" autocomplete="shipping address-level2">
+               <input id="country" autocomplete="shipping country">
+               <input id='email' autocomplete="shipping email">
+               <input id="tel" autocomplete="shipping tel"></form>`,
+    fieldDetails: [
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "given-name", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "family-name", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "street-address", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "address-level2", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "country", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "email", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "tel", "element": {}},
+    ],
+    profileData: [
+      {"section": "", "addressType": "shipping", "fieldName": "given-name", "contactType": "", "index": 0, "value": "foo"},
+      {"section": "", "addressType": "shipping", "fieldName": "family-name", "contactType": "", "index": 1, "value": "bar"},
+      {"section": "", "addressType": "shipping", "fieldName": "street-address", "contactType": "", "index": 2, "value": "2 Harrison St"},
+      {"section": "", "addressType": "shipping", "fieldName": "address-level2", "contactType": "", "index": 3, "value": "San Francisco"},
+      {"section": "", "addressType": "shipping", "fieldName": "country", "contactType": "", "index": 4, "value": "US"},
+      {"section": "", "addressType": "shipping", "fieldName": "email", "contactType": "", "index": 5, "value": "foo@mozilla.com"},
+      {"section": "", "addressType": "shipping", "fieldName": "tel", "contactType": "", "index": 6, "value": "1234567"},
+    ],
+    expectedResult: {
+      "given-name": "foo",
+      "family-name": "bar",
+      "street-addr": "2 Harrison St",
+      "city": "San Francisco",
+      "country": "US",
+      "email": "foo@mozilla.com",
+      "tel": "1234567",
+    },
+  },
+  {
+    description: "Form with autocomplete properties and profile is partly matched",
+    document: `<form><input id="given-name" autocomplete="shipping given-name">
+               <input id="family-name" autocomplete="shipping family-name">
+               <input id="street-addr" autocomplete="shipping street-address">
+               <input id="city" autocomplete="shipping address-level2">
+               <input id="country" autocomplete="shipping country">
+               <input id='email' autocomplete="shipping email">
+               <input id="tel" autocomplete="shipping tel"></form>`,
+    fieldDetails: [
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "given-name", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "family-name", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "street-address", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "address-level2", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "country", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "email", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "tel", "element": {}},
+    ],
+    profileData: [
+      {"section": "", "addressType": "shipping", "fieldName": "given-name", "contactType": "", "index": 0, "value": "foo"},
+      {"section": "", "addressType": "shipping", "fieldName": "family-name", "contactType": "", "index": 1, "value": "bar"},
+      {"section": "", "addressType": "shipping", "fieldName": "street-address", "contactType": "", "index": 2, "value": "2 Harrison St"},
+      {"section": "", "addressType": "shipping", "fieldName": "address-level2", "contactType": "", "index": 3, "value": "San Francisco"},
+      {"section": "", "addressType": "shipping", "fieldName": "country", "contactType": "", "index": 4, "value": "US"},
+      {"section": "", "addressType": "shipping", "fieldName": "email", "contactType": "", "index": 5},
+      {"section": "", "addressType": "shipping", "fieldName": "tel", "contactType": "", "index": 6},
+    ],
+    expectedResult: {
+      "given-name": "foo",
+      "family-name": "bar",
+      "street-addr": "2 Harrison St",
+      "city": "San Francisco",
+      "country": "US",
+      "email": "",
+      "tel": "",
+    },
+  },
+  {
+    description: "Form with autocomplete properties but mismatched",
+    document: `<form><input id="given-name" autocomplete="shipping given-name">
+               <input id="family-name" autocomplete="shipping family-name">
+               <input id="street-addr" autocomplete="billing street-address">
+               <input id="city" autocomplete="billing address-level2">
+               <input id="country" autocomplete="billing country">
+               <input id='email' autocomplete="shipping email">
+               <input id="tel" autocomplete="shipping tel"></form>`,
+    fieldDetails: [
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "given-name", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "family-name", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "street-address", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "address-level2", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "country", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "email", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "tel", "element": {}},
+    ],
+    profileData: [
+      {"section": "", "addressType": "shipping", "fieldName": "given-name", "contactType": "", "index": 0, "value": "foo"},
+      {"section": "", "addressType": "shipping", "fieldName": "family-name", "contactType": "", "index": 1, "value": "bar"},
+      {"section": "", "addressType": "shipping", "fieldName": "street-address", "contactType": "", "index": 2, "value": "2 Harrison St"},
+      {"section": "", "addressType": "shipping", "fieldName": "address-level2", "contactType": "", "index": 3, "value": "San Francisco"},
+      {"section": "", "addressType": "shipping", "fieldName": "country", "contactType": "", "index": 4, "value": "US"},
+      {"section": "", "addressType": "shipping", "fieldName": "email", "contactType": "", "index": 5, "value": "foo@mozilla.com"},
+      {"section": "", "addressType": "shipping", "fieldName": "tel", "contactType": "", "index": 6, "value": "1234567"},
+    ],
+    expectedResult: {
+      "given-name": "foo",
+      "family-name": "bar",
+      "street-addr": "",
+      "city": "",
+      "country": "",
+      "email": "foo@mozilla.com",
+      "tel": "1234567",
+    },
+  },
+];
+
+for (let tc of TESTCASES) {
+  (function() {
+    let testcase = tc;
+    add_task(function* () {
+      do_print("Starting testcase: " + testcase.description);
+
+      let doc = MockDocument.createTestDocument("http://localhost:8080/test/",
+                                                testcase.document);
+      let form = doc.querySelector("form");
+      let handler = new FormAutofillHandler(form);
+
+      handler.fieldDetails = testcase.fieldDetails;
+      handler.fieldDetails.forEach((field, index) => {
+        field.element = doc.querySelectorAll("input")[index];
+      });
+
+      handler.autofillFormFields(testcase.profileData);
+      for (let id in testcase.expectedResult) {
+        Assert.equal(doc.getElementById(id).value, testcase.expectedResult[id],
+                    "Check the " + id + " fields were filled with correct data");
+      }
+    });
+  })();
+}
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/test_collectFormFields.js
@@ -0,0 +1,122 @@
+/*
+ * Test for form auto fill content helper collectFormFields functions.
+ */
+
+"use strict";
+
+let {FormAutofillHandler} = importAutofillModule("FormAutofillContent.jsm");
+
+const TESTCASES = [
+  {
+    description: "Form without autocomplete property",
+    document: `<form><input id="given-name"><input id="family-name">
+               <input id="street-addr"><input id="city"><input id="country">
+               <input id='email'><input id="tel"></form>`,
+    returnedFormat: [],
+    fieldDetails: [],
+  },
+  {
+    description: "Form with autocomplete properties and 1 token",
+    document: `<form><input id="given-name" autocomplete="given-name">
+               <input id="family-name" autocomplete="family-name">
+               <input id="street-addr" autocomplete="street-address">
+               <input id="city" autocomplete="address-level2">
+               <input id="country" autocomplete="country">
+               <input id="email" autocomplete="email">
+               <input id="tel" autocomplete="tel"></form>`,
+    returnedFormat: [
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name", "index": 0},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name", "index": 1},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "street-address", "index": 2},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2", "index": 3},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "country", "index": 4},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "email", "index": 5},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel", "index": 6},
+    ],
+    fieldDetails: [
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "street-address", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "country", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "email", "element": {}},
+      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel", "element": {}},
+    ],
+  },
+  {
+    description: "Form with autocomplete properties and 2 tokens",
+    document: `<form><input id="given-name" autocomplete="shipping given-name">
+               <input id="family-name" autocomplete="shipping family-name">
+               <input id="street-addr" autocomplete="shipping street-address">
+               <input id="city" autocomplete="shipping address-level2">
+               <input id="country" autocomplete="shipping country">
+               <input id='email' autocomplete="shipping email">
+               <input id="tel" autocomplete="shipping tel"></form>`,
+    returnedFormat: [
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "given-name", "index": 0},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "family-name", "index": 1},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "street-address", "index": 2},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "address-level2", "index": 3},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "country", "index": 4},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "email", "index": 5},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "tel", "index": 6},
+    ],
+    fieldDetails: [
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "given-name", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "family-name", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "street-address", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "address-level2", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "country", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "email", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "tel", "element": {}},
+    ],
+  },
+  {
+    description: "Form with autocomplete properties and profile is partly matched",
+    document: `<form><input id="given-name" autocomplete="shipping given-name">
+               <input id="family-name" autocomplete="shipping family-name">
+               <input id="street-addr" autocomplete="shipping street-address">
+               <input id="city" autocomplete="shipping address-level2">
+               <input id="country" autocomplete="shipping country">
+               <input id='email' autocomplete="shipping email">
+               <input id="tel" autocomplete="shipping tel"></form>`,
+    returnedFormat: [
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "given-name", "index": 0},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "family-name", "index": 1},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "street-address", "index": 2},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "address-level2", "index": 3},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "country", "index": 4},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "email", "index": 5},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "tel", "index": 6},
+    ],
+    fieldDetails: [
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "given-name", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "family-name", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "street-address", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "address-level2", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "country", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "email", "element": {}},
+      {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "tel", "element": {}},
+    ],
+  },
+];
+
+for (let tc of TESTCASES) {
+  (function() {
+    let testcase = tc;
+    add_task(function* () {
+      do_print("Starting testcase: " + testcase.description);
+
+      let doc = MockDocument.createTestDocument("http://localhost:8080/test/",
+                                                testcase.document);
+      let form = doc.querySelector("form");
+      let handler = new FormAutofillHandler(form);
+
+      Assert.deepEqual(handler.collectFormFields(), testcase.returnedFormat,
+                         "Check the format of form autofill were returned correctly");
+
+      Assert.deepEqual(handler.fieldDetails, testcase.fieldDetails,
+                         "Check the fieldDetails were set correctly");
+    });
+  })();
+}
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/xpcshell.ini
@@ -0,0 +1,7 @@
+[DEFAULT]
+head = head.js
+tail =
+support-files = ../../content/FormAutofillContent.jsm
+
+[test_autofillFormFields.js]
+[test_collectFormFields.js]
--- a/devtools/client/locales/en-US/netmonitor.properties
+++ b/devtools/client/locales/en-US/netmonitor.properties
@@ -474,17 +474,20 @@ netmonitor.footer.filterWS=WS
 
 # LOCALIZATION NOTE (netmonitor.footer.filterOther): This is the label displayed
 # in the network details footer for the "Other" filtering button.
 netmonitor.footer.filterOther=Other
 
 # LOCALIZATION NOTE (netmonitor.footer.filterFreetext): This is the label displayed
 # in the network details footer for the url filtering textbox.
 netmonitor.footer.filterFreetext.label=Filter URLs
-netmonitor.footer.filterFreetext.key=F
+
+# LOCALIZATION NOTE (netmonitor.toolbar.filterFreetext.key): This is the
+# shortcut key to focus on the toolbar url filtering textbox
+netmonitor.toolbar.filterFreetext.key=CmdOrCtrl+F
 
 # LOCALIZATION NOTE (netmonitor.footer.clear): This is the label displayed
 # in the network details footer for the "Clear" button.
 netmonitor.footer.clear=Clear
 
 # LOCALIZATION NOTE (netmonitor.footer.clear): This is the label displayed
 # in the network details footer for the performance analysis button.
 netmonitor.footer.perf=Toggle performance analysis…
--- a/devtools/client/netmonitor/netmonitor.xul
+++ b/devtools/client/netmonitor/netmonitor.xul
@@ -53,28 +53,16 @@
       <menuseparator class="request-menu-context-separator"/>
       <menuitem id="request-menu-context-newtab"
                 data-localization="label=netmonitor.context.newTab;accesskey=netmonitor.context.newTab.accesskey"/>
       <menuitem id="request-menu-context-perf"
                 data-localization="label=netmonitor.context.perfTools;accesskey=netmonitor.context.perfTools.accesskey"/>
     </menupopup>
   </popupset>
 
-  <commandset>
-    <command id="freeTextFilterCommand"
-             oncommand="NetMonitorView.RequestsMenu.freetextFilterBox.focus()"/>
-  </commandset>
-
-  <keyset>
-    <key id="freeTextFilterKey"
-         data-localization="key=netmonitor.footer.filterFreetext.key"
-         modifiers="accel"
-         command="freeTextFilterCommand"/>
-  </keyset>
-
   <deck id="body" class="theme-sidebar" flex="1">
 
     <vbox id="network-inspector-view" flex="1">
       <hbox id="netmonitor-toolbar" class="devtools-toolbar">
         <toolbarbutton id="requests-menu-clear-button"
                        class="devtools-toolbarbutton devtools-clear-icon"
                        data-localization="tooltiptext=netmonitor.footer.clear"/>
         <hbox id="requests-menu-filter-buttons">
--- a/devtools/client/netmonitor/panel.js
+++ b/devtools/client/netmonitor/panel.js
@@ -4,28 +4,38 @@
  * 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 promise = require("promise");
 const EventEmitter = require("devtools/shared/event-emitter");
 const { Task } = require("devtools/shared/task");
 const { localizeMarkup } = require("devtools/shared/l10n");
+const {KeyShortcuts} = require("devtools/client/shared/key-shortcuts");
+const {L10N} = require("./l10n");
 
 function NetMonitorPanel(iframeWindow, toolbox) {
   this.panelWin = iframeWindow;
   this.panelDoc = iframeWindow.document;
   this._toolbox = toolbox;
 
   this._view = this.panelWin.NetMonitorView;
   this._controller = this.panelWin.NetMonitorController;
   this._controller._target = this.target;
   this._controller._toolbox = this._toolbox;
 
   EventEmitter.decorate(this);
+
+  this.shortcuts = new KeyShortcuts({
+    window: this.panelDoc.defaultView,
+  });
+  this.shortcuts.on(L10N.getStr("netmonitor.toolbar.filterFreetext.key"), (name, event) => {
+    event.preventDefault();
+    this._view.RequestsMenu.freetextFilterBox.focus();
+  });
 }
 
 exports.NetMonitorPanel = NetMonitorPanel;
 
 NetMonitorPanel.prototype = {
   /**
    * Open is effectively an asynchronous constructor.
    *
@@ -63,15 +73,17 @@ NetMonitorPanel.prototype = {
 
   destroy: Task.async(function* () {
     if (this._destroying) {
       return this._destroying;
     }
     let deferred = promise.defer();
     this._destroying = deferred.promise;
 
+    this.shortcuts.destroy();
+
     yield this._controller.shutdownNetMonitor();
     this.emit("destroyed");
 
     deferred.resolve();
     return this._destroying;
   })
 };
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -461,16 +461,18 @@ public:
   bool HandleEndOfStream() override
   {
     MaybeFinishDecodeFirstFrame();
     return true;
   }
 
   RefPtr<MediaDecoder::SeekPromise> HandleSeek(SeekTarget aTarget) override;
 
+  bool HandleDormant(bool aDormant) override;
+
   void HandleVideoSuspendTimeout() override
   {
     // Do nothing for we need to decode the 1st video frame to get the dimensions.
   }
 
   void HandleResumeVideoDecoding() override
   {
     // We never suspend video decoding in this state.
@@ -1247,16 +1249,31 @@ DecodingFirstFrameState::HandleSeek(Seek
   MOZ_ASSERT(!mMaster->mQueuedSeek.Exists());
 
   SLOG("Changed state to SEEKING (to %lld)", aTarget.GetTime().ToMicroseconds());
   SeekJob seekJob;
   seekJob.mTarget = aTarget;
   return SetState<SeekingState>(Move(seekJob));
 }
 
+bool
+MediaDecoderStateMachine::
+DecodingFirstFrameState::HandleDormant(bool aDormant)
+{
+  if (aDormant) {
+    // Don't store mQueuedSeek because:
+    // 1. if mQueuedSeek is not empty, respect the latest seek request
+    //    and don't overwrite it.
+    // 2. if mQueuedSeek is empty, there is no need to seek when exiting
+    //    the dormant state for we are at position 0.
+    SetState<DormantState>();
+  }
+  return true;
+}
+
 void
 MediaDecoderStateMachine::
 DecodingFirstFrameState::MaybeFinishDecodeFirstFrame()
 {
   MOZ_ASSERT(!mMaster->mSentFirstFrameLoadedEvent);
 
   if ((mMaster->IsAudioDecoding() && mMaster->AudioQueue().GetSize() == 0) ||
       (mMaster->IsVideoDecoding() && mMaster->VideoQueue().GetSize() == 0)) {
--- a/dom/media/eme/MediaKeySession.cpp
+++ b/dom/media/eme/MediaKeySession.cpp
@@ -64,17 +64,17 @@ MediaKeySession::MediaKeySession(JSConte
   , mCDMVersion(aCDMVersion)
   , mSessionType(aSessionType)
   , mToken(sMediaKeySessionNum++)
   , mIsClosed(false)
   , mUninitialized(true)
   , mKeyStatusMap(new MediaKeyStatusMap(aParent))
   , mExpiration(JS::GenericNaN())
 {
-  EME_LOG("MediaKeySession[%p,''] session Id set", this);
+  EME_LOG("MediaKeySession[%p,''] ctor", this);
 
   MOZ_ASSERT(aParent);
   if (aRv.Failed()) {
     return;
   }
   mClosed = MakePromise(aRv, NS_LITERAL_CSTRING("MediaKeys.createSession"));
 }
 
@@ -320,16 +320,17 @@ MediaKeySession::GenerateRequest(const n
   Telemetry::Accumulate(Telemetry::VIDEO_CDM_GENERATE_REQUEST_CALLED,
                         ToCDMTypeTelemetryEnum(mKeySystem));
 
   // Convert initData to base64 for easier logging.
   // Note: CreateSession() Move()s the data out of the array, so we have
   // to copy it here.
   nsAutoCString base64InitData(ToBase64(data));
   PromiseId pid = mKeys->StorePromise(promise);
+  mKeys->ConnectPendingPromiseIdWithToken(pid, Token());
   mKeys->GetCDMProxy()->CreateSession(Token(),
                                       mSessionType,
                                       pid,
                                       aInitDataType, data);
 
   EME_LOG("MediaKeySession[%p,'%s'] GenerateRequest() sent, "
           "promiseId=%d initData(base64)='%s' initDataType='%s'",
           this,
@@ -385,16 +386,17 @@ MediaKeySession::Load(const nsAString& a
   // session from its owning MediaKey's set of sessions awaiting a sessionId.
   RefPtr<MediaKeySession> session(mKeys->GetPendingSession(Token()));
   MOZ_ASSERT(session == this, "Session should be awaiting id on its own token");
 
   // Associate with the known sessionId.
   SetSessionId(aSessionId);
 
   PromiseId pid = mKeys->StorePromise(promise);
+  mKeys->ConnectPendingPromiseIdWithToken(pid, Token());
   mKeys->GetCDMProxy()->LoadSession(pid, aSessionId);
 
   EME_LOG("MediaKeySession[%p,'%s'] Load() sent to CDM, promiseId=%d",
     this, NS_ConvertUTF16toUTF8(mSessionId).get(), pid);
 
   return promise.forget();
 }
 
--- a/dom/media/eme/MediaKeys.cpp
+++ b/dom/media/eme/MediaKeys.cpp
@@ -191,16 +191,26 @@ MediaKeys::StorePromise(DetailedPromise*
     MOZ_ASSERT(iter.Data() != aPromise);
   }
 #endif
 
   mPromises.Put(id, aPromise);
   return id;
 }
 
+void
+MediaKeys::ConnectPendingPromiseIdWithToken(PromiseId aId, uint32_t aToken)
+{
+  // Should only be called from MediaKeySession::GenerateRequest and
+  // MediaKeySession::Load.
+  mPromiseIdToken.Put(aId, aToken);
+  EME_LOG("MediaKeys[%p]::ConnectPendingPromiseIdWithToken() id=%u => token(%u)",
+          this, aId, aToken);
+}
+
 already_AddRefed<DetailedPromise>
 MediaKeys::RetrievePromise(PromiseId aId)
 {
   if (!mPromises.Contains(aId)) {
     NS_WARNING(nsPrintfCString("Tried to retrieve a non-existent promise id=%d", aId).get());
     return nullptr;
   }
   RefPtr<DetailedPromise> promise;
@@ -214,22 +224,26 @@ MediaKeys::RejectPromise(PromiseId aId, 
                          const nsCString& aReason)
 {
   EME_LOG("MediaKeys[%p]::RejectPromise(%d, 0x%x)", this, aId, aExceptionCode);
 
   RefPtr<DetailedPromise> promise(RetrievePromise(aId));
   if (!promise) {
     return;
   }
-  if (mPendingSessions.Contains(aId)) {
-    // This promise could be a createSession or loadSession promise,
-    // so we might have a pending session waiting to be resolved into
-    // the promise on success. We've been directed to reject to promise,
-    // so we can throw away the corresponding session object.
-    mPendingSessions.Remove(aId);
+
+  // This promise could be a createSession or loadSession promise,
+  // so we might have a pending session waiting to be resolved into
+  // the promise on success. We've been directed to reject to promise,
+  // so we can throw away the corresponding session object.
+  uint32_t token = 0;
+  if (mPromiseIdToken.Get(aId, &token)) {
+    MOZ_ASSERT(mPendingSessions.Contains(token));
+    mPendingSessions.Remove(token);
+    mPromiseIdToken.Remove(aId);
   }
 
   MOZ_ASSERT(NS_FAILED(aExceptionCode));
   promise->MaybeReject(aExceptionCode, aReason);
 
   if (mCreatePromiseId == aId) {
     // Note: This will probably destroy the MediaKeys object!
     Release();
@@ -259,39 +273,46 @@ MediaKeys::OnSessionIdReady(MediaKeySess
 }
 
 void
 MediaKeys::ResolvePromise(PromiseId aId)
 {
   EME_LOG("MediaKeys[%p]::ResolvePromise(%d)", this, aId);
 
   RefPtr<DetailedPromise> promise(RetrievePromise(aId));
+  MOZ_ASSERT(!mPromises.Contains(aId));
   if (!promise) {
     return;
   }
-  if (mPendingSessions.Contains(aId)) {
-    // We should only resolve LoadSession calls via this path,
-    // not CreateSession() promises.
-    RefPtr<MediaKeySession> session;
-    if (!mPendingSessions.Get(aId, getter_AddRefs(session)) ||
-        !session ||
-        session->GetSessionId().IsEmpty()) {
-      NS_WARNING("Received activation for non-existent session!");
-      promise->MaybeReject(NS_ERROR_DOM_INVALID_ACCESS_ERR,
-                           NS_LITERAL_CSTRING("CDM LoadSession() returned a different session ID than requested"));
-      mPendingSessions.Remove(aId);
-      return;
-    }
-    mPendingSessions.Remove(aId);
-    mKeySessions.Put(session->GetSessionId(), session);
-    promise->MaybeResolve(session);
-  } else {
+
+  uint32_t token = 0;
+  if (!mPromiseIdToken.Get(aId, &token)) {
+    promise->MaybeResolveWithUndefined();
+    return;
+  } else if (!mPendingSessions.Contains(token)) {
+    // Pending session for CreateSession() should be removed when sessionId
+    // is ready.
     promise->MaybeResolveWithUndefined();
+    mPromiseIdToken.Remove(aId);
+    return;
   }
-  MOZ_ASSERT(!mPromises.Contains(aId));
+  mPromiseIdToken.Remove(aId);
+
+  // We should only resolve LoadSession calls via this path,
+  // not CreateSession() promises.
+  RefPtr<MediaKeySession> session;
+  mPendingSessions.Remove(token, getter_AddRefs(session));
+  if (!session || session->GetSessionId().IsEmpty()) {
+    NS_WARNING("Received activation for non-existent session!");
+    promise->MaybeReject(NS_ERROR_DOM_INVALID_ACCESS_ERR,
+                         NS_LITERAL_CSTRING("CDM LoadSession() returned a different session ID than requested"));
+    return;
+  }
+  mKeySessions.Put(session->GetSessionId(), session);
+  promise->MaybeResolve(session);
 }
 
 class MediaKeysGMPCrashHelper : public GMPCrashHelper
 {
 public:
   explicit MediaKeysGMPCrashHelper(MediaKeys* aMediaKeys)
     : mMediaKeys(aMediaKeys)
   {
--- a/dom/media/eme/MediaKeys.h
+++ b/dom/media/eme/MediaKeys.h
@@ -28,16 +28,17 @@ namespace dom {
 
 class ArrayBufferViewOrArrayBuffer;
 class MediaKeySession;
 class HTMLMediaElement;
 
 typedef nsRefPtrHashtable<nsStringHashKey, MediaKeySession> KeySessionHashMap;
 typedef nsRefPtrHashtable<nsUint32HashKey, dom::DetailedPromise> PromiseHashMap;
 typedef nsRefPtrHashtable<nsUint32HashKey, MediaKeySession> PendingKeySessionsHashMap;
+typedef nsDataHashtable<nsUint32HashKey, uint32_t> PendingPromiseIdTokenHashMap;
 typedef uint32_t PromiseId;
 
 // This class is used on the main thread only.
 // Note: its addref/release is not (and can't be) thread safe!
 class MediaKeys final : public nsISupports,
                         public nsWrapperCache,
                         public SupportsWeakPtr<MediaKeys>
 {
@@ -102,16 +103,21 @@ public:
   // Makes a new promise, or nullptr on failure.
   already_AddRefed<DetailedPromise> MakePromise(ErrorResult& aRv,
                                                 const nsACString& aName);
   // Stores promise in mPromises, returning an ID that can be used to retrieve
   // it later. The ID is passed to the CDM, so that it can signal specific
   // promises to be resolved.
   PromiseId StorePromise(DetailedPromise* aPromise);
 
+  // Stores a map for promise id and session token, and it will be used to
+  // remove the pending sessions by promise id while creating/loading various
+  // sessions in the same time.
+  void ConnectPendingPromiseIdWithToken(PromiseId aId, uint32_t aToken);
+
   // Reject promise with DOMException corresponding to aExceptionCode.
   void RejectPromise(PromiseId aId, nsresult aExceptionCode,
                      const nsCString& aReason);
   // Resolves promise with "undefined".
   void ResolvePromise(PromiseId aId);
 
   const nsCString& GetNodeId() const;
 
@@ -146,14 +152,16 @@ private:
   PendingKeySessionsHashMap mPendingSessions;
   PromiseId mCreatePromiseId;
 
   RefPtr<nsIPrincipal> mPrincipal;
   RefPtr<nsIPrincipal> mTopLevelPrincipal;
 
   const bool mDistinctiveIdentifierRequired;
   const bool mPersistentStateRequired;
+
+  PendingPromiseIdTokenHashMap mPromiseIdToken;
 };
 
 } // namespace dom
 } // namespace mozilla
 
 #endif // mozilla_dom_mediakeys_h__
--- a/dom/media/systemservices/CamerasChild.cpp
+++ b/dom/media/systemservices/CamerasChild.cpp
@@ -82,19 +82,20 @@ public:
     ipc::PBackgroundChild* existingBackgroundChild =
       ipc::BackgroundChild::GetForCurrentThread();
     // If it's not spun up yet, block until it is, and retry
     if (!existingBackgroundChild) {
       LOG(("No existingBackgroundChild"));
       existingBackgroundChild =
         ipc::BackgroundChild::SynchronouslyCreateForCurrentThread();
       LOG(("BackgroundChild: %p", existingBackgroundChild));
+      if (!existingBackgroundChild) {
+        return NS_ERROR_FAILURE;
+      }
     }
-    // By now PBackground is guaranteed to be up
-    MOZ_RELEASE_ASSERT(existingBackgroundChild);
 
     // Create CamerasChild
     // We will be returning the resulting pointer (synchronously) to our caller.
     mCamerasChild =
       static_cast<mozilla::camera::CamerasChild*>(existingBackgroundChild->SendPCamerasConstructor());
 
     return NS_OK;
   }
--- a/dom/media/test/mochitest.ini
+++ b/dom/media/test/mochitest.ini
@@ -487,16 +487,17 @@ support-files =
   owl-funnier-id3.mp3^headers^
   owl-funny-id3.mp3
   owl-funny-id3.mp3^headers^
   owl.mp3
   owl.mp3^headers^
   owl-short.mp3
   owl-short.mp3^headers^
   parser.vtt
+  pixel_aspect_ratio.mp4
   r11025_msadpcm_c1.wav
   r11025_msadpcm_c1.wav^headers^
   r11025_s16_c1.wav
   r11025_s16_c1.wav^headers^
   r11025_s16_c1_trailing.wav
   r11025_s16_c1_trailing.wav^headers^
   r11025_s16_c1-short.wav
   r11025_s16_c1-short.wav^headers^
@@ -791,17 +792,17 @@ tags=msg capturestream
 [test_mediatrack_consuming_mediastream.html]
 tags=msg
 [test_mediatrack_events.html]
 skip-if = toolkit == 'gonk' && debug # bug 1065924
 [test_mediatrack_parsing_ogg.html]
 [test_mediatrack_replay_from_end.html]
 [test_metadata.html]
 [test_mixed_principals.html]
-skip-if = true # bug 567954 and intermittent leaks
+skip-if = os == 'win' && os_version == '5.1' # Skip XP. See bug Bug 1311231
 [test_mozHasAudio.html]
 [test_multiple_mediastreamtracks.html]
 [test_networkState.html]
 [test_new_audio.html]
 [test_no_load_event.html]
 [test_paused.html]
 [test_paused_after_ended.html]
 [test_play_events.html]
--- a/dom/media/test/test_mixed_principals.html
+++ b/dom/media/test/test_mixed_principals.html
@@ -9,67 +9,86 @@ https://bugzilla.mozilla.org/show_bug.cg
   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
   <script type="text/javascript" src="manifest.js"></script>
 </head>
 <body>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=489415">Mozilla Bug 489415</a>
 <p id="display"></p>
 
-<video id="v1" autoplay onended="loaded('v1')"></video>
-<video id="v2" autoplay onended="loaded('v2')"></video>
+<video id="v1" preload="metadata" onended="onendedcb('v1')"></video>
+<video id="v2" preload="metadata" onended="onendedcb('v2')"></video>
 
 <pre id="test">
 <script type="text/javascript">
 SimpleTest.waitForExplicitFinish();
 
+var pushPrefs = (...p) => new Promise(r => SpecialPowers.pushPrefEnv({set: p}, r));
+var throwOutside = e => setTimeout(() => { throw e; });
+
 var v1 = document.getElementById("v1");
 var v2 = document.getElementById("v2");
-
-var resource = getPlayableVideo(gSeekTests);
-
-if (resource != null) {
-  var count = 0;
+var count = 0;
 
-  function loaded(id) {
-    var c = document.createElement("canvas");
-    var ctx = c.getContext("2d");
-    var v = document.getElementById(id);
-    ctx.drawImage(v, 0, 0);
-    try {
-      c.toDataURL();
-      ok(false, "Failed to throw exception in toDataURL for " + id);
-    } catch (ex) {
-      ok(true, "Threw exception in toDataURL for " + id);
-    }
-    if (++count == 2) {
-      SimpleTest.finish();
-    }
+function onendedcb(id) {
+  var c = document.createElement("canvas");
+  var ctx = c.getContext("2d");
+  var v = document.getElementById(id);
+  ctx.drawImage(v, 0, 0);
+  try {
+    c.toDataURL();
+    ok(false, "Failed to throw exception in toDataURL for " + id);
+  } catch (ex) {
+    ok(true, "Threw exception in toDataURL for " + id);
   }
+  if (++count == 2) {
+    SimpleTest.finish();
+  }
+}
+
+function testMixedPrincipals(resource) {
+  if (!resource) {
+    todo(false, "No types supported");
+    return;
+  }
+  // Make sure the media cache size(50MB) is large enough that the data could
+  // be download in MediaCache completely.
+  return pushPrefs(['media.cache_size', 50*1024])
+  .then(() => {
 
-  // Generate a random key. The first load with that key will return
-  // data, the second and subsequent loads with that key will return a redirect
-  // to a different origin ('localhost:8888' will be redirected to 'example.org',
-  // and 'example.org' will be redirected to 'localhost:8888'). We rely on the
-  // fact that Ogg will do a seek to the end of the resource, triggering a new
-  // load with the same key which will return a same-origin resource.
-  // Loading data from two different origins should be detected by the media
-  // cache and result in a null principal so that the canvas usage above fails.
-  var key = Math.floor(Math.random()*100000000);
+    // Generate a random key. The first load with that key will return
+    // data, the second and subsequent loads with that key will return a redirect
+    // to a different origin ('localhost:8888' will be redirected to 'example.org',
+    // and 'example.org' will be redirected to 'localhost:8888'). We rely on the
+    // fact that Ogg will do a seek to the end of the resource, triggering a new
+    // load with the same key which will return a same-origin resource.
+    // Loading data from two different origins should be detected by the media
+    // cache and result in a null principal so that the canvas usage above fails.
+    var key = Math.floor(Math.random()*100000000);
 
-  // In v1, try loading from same-origin first and then getting redirected to
-  // another origin.
-  v1.src = "http://mochi.test:8888/tests/dom/media/test/dynamic_redirect.sjs?key=v1_" + key + "&res=" + resource.name;
-  v1.load();
+    // In v1, try loading from same-origin first and then getting redirected to
+    // another origin.
+    v1.src =
+        "http://mochi.test:8888/tests/dom/media/test/dynamic_redirect.sjs?key=v1_" +
+        key + "&res=" + resource.name;
+    v1.onloadeddata = function () {
+      // To limit readahead, avoid racing with playback and "catching up" mode.
+      v1.play();
+    }
 
-  // In v2, try loading cross-origin first and then getting redirected to
-  // our origin.
-  v2.src = "http://example.org/tests/dom/media/test/dynamic_redirect.sjs?key=v2_" + key + "&res=" + resource.name;
-  v2.load();
-  
-} else {
-  todo(false, "No types supported");
+    // In v2, try loading cross-origin first and then getting redirected to
+    // our origin.
+    v2.src = "http://example.org/tests/dom/media/test/dynamic_redirect.sjs?key=v2_" + key + "&res=" + resource.name;
+    v2.onloadeddata = function () {
+      // To limit readahead, avoid racing with playback and "catching up" mode.
+      v2.play();
+    }
+  });
 }
+
+testMixedPrincipals({ name:"pixel_aspect_ratio.mp4", type:"video/mp4", duration:28})
+.catch(e => throwOutside(e));
+
 </script>
 </pre>
 
 </body>
 </html>
--- a/dom/security/test/hsts/browser.ini
+++ b/dom/security/test/hsts/browser.ini
@@ -9,8 +9,9 @@ support-files =
 
 [browser_hsts-priming_allow_active.js]
 [browser_hsts-priming_block_active.js]
 [browser_hsts-priming_hsts_after_mixed.js]
 [browser_hsts-priming_allow_display.js]
 [browser_hsts-priming_block_display.js]
 [browser_hsts-priming_block_active_css.js]
 [browser_hsts-priming_block_active_with_redir_same.js]
+[browser_hsts-priming_no-duplicates.js]
new file mode 100644
--- /dev/null
+++ b/dom/security/test/hsts/browser_hsts-priming_no-duplicates.js
@@ -0,0 +1,28 @@
+/*
+ * Description of the test:
+ *   Only one request should be sent per host, even if we run the test more
+ *   than once.
+ */
+'use strict';
+
+//jscs:disable
+add_task(function*() {
+  //jscs:enable
+  Observer.add_observers(Services);
+  registerCleanupFunction(do_cleanup);
+
+  let which = "block_display";
+
+  SetupPrefTestEnvironment(which);
+
+  for (let server of Object.keys(test_servers)) {
+    yield execute_test(server, test_settings[which].mimetype);
+  }
+
+  // run the tests twice to validate the cache is being used
+  for (let server of Object.keys(test_servers)) {
+    yield execute_test(server, test_settings[which].mimetype);
+  }
+
+  SpecialPowers.popPrefEnv();
+});
--- a/dom/security/test/hsts/head.js
+++ b/dom/security/test/hsts/head.js
@@ -140,19 +140,26 @@ var which_test = "";
 
 const Observer = {
   observe: function (subject, topic, data) {
     switch (topic) {
       case 'console-api-log-event':
         return Observer.console_api_log_event(subject, topic, data);
       case 'http-on-examine-response':
         return Observer.http_on_examine_response(subject, topic, data);
+      case 'http-on-modify-request':
+        return Observer.http_on_modify_request(subject, topic, data);
     }
     throw "Can't handle topic "+topic;
   },
+  add_observers: function (services) {
+    services.obs.addObserver(Observer, "console-api-log-event", false);
+    services.obs.addObserver(Observer, "http-on-examine-response", false);
+    services.obs.addObserver(Observer, "http-on-modify-request", false);
+  },
   // When a load is blocked which results in an error event within a page, the
   // test logs to the console.
   console_api_log_event: function (subject, topic, data) {
     var message = subject.wrappedJSObject.arguments[0];
     // when we are blocked, this will match the message we sent to the console,
     // ignore everything else.
     var re = RegExp(/^HSTS_PRIMING: Blocked ([-\w]+).*$/);
     if (!re.test(message)) {
@@ -168,40 +175,56 @@ const Observer = {
       return;
     }
 
     is("blocked", test_settings[which_test].result[curTest.id], "HSTS priming "+
         which_test+":"+curTest.id+" expected "+
         test_settings[which_test].result[curTest.id]+", got blocked");
     test_settings[which_test].finished[curTest.id] = "blocked";
   },
+  get_current_test: function(uri) {
+    for (let item in test_servers) {
+      let re = RegExp('https?://'+test_servers[item].host);
+      if (re.test(uri)) {
+        return test_servers[item];
+      }
+    }
+    return null;
+  },
+  http_on_modify_request: function (subject, topic, data) {
+    let channel = subject.QueryInterface(Ci.nsIHttpChannel);
+    if (channel.requestMethod != 'HEAD') {
+      return;
+    }
+
+    let curTest = this.get_current_test(channel.URI.asciiSpec);
+
+    if (!curTest) {
+      return;
+    }
+
+    ok(!(curTest.id in test_settings[which_test].priming), "Already saw a priming request for " + curTest.id);
+    test_settings[which_test].priming[curTest.id] = true;
+  },
   // When we see a response come back, peek at the response and test it is secure
   // or insecure as needed. Addtionally, watch the response for priming requests.
   http_on_examine_response: function (subject, topic, data) {
-    let curTest = null;
     let channel = subject.QueryInterface(Ci.nsIHttpChannel);
-    for (let item in test_servers) {
-      let re = RegExp('https?://'+test_servers[item].host);
-      if (re.test(channel.URI.asciiSpec)) {
-        curTest = test_servers[item];
-        break;
-      }
-    }
+    let curTest = this.get_current_test(channel.URI.asciiSpec);
 
     if (!curTest) {
       return;
     }
 
     let result = (channel.URI.asciiSpec.startsWith('https:')) ? "secure" : "insecure";
 
     // This is a priming request, go ahead and validate we were supposed to see
     // a response from the server
     if (channel.requestMethod == 'HEAD') {
       is(true, curTest.response, "HSTS priming response found " + curTest.id);
-      test_settings[which_test].priming[curTest.id] = true;
       return;
     }
 
     // This is the response to our query, make sure it matches
     is(result, test_settings[which_test].result[curTest.id],
         "HSTS priming result " + which_test + ":" + curTest.id);
     test_settings[which_test].finished[curTest.id] = result;
   },
--- a/dom/workers/RuntimeService.cpp
+++ b/dom/workers/RuntimeService.cpp
@@ -2803,17 +2803,18 @@ WorkerThreadPrimaryRunnable::Run()
 
   profiler_register_thread(threadName.get(), &stackBaseGuess);
 
   // Note: SynchronouslyCreateForCurrentThread() must be called prior to
   //       mWorkerPrivate->SetThread() in order to avoid accidentally consuming
   //       worker messages here.
   if (NS_WARN_IF(!BackgroundChild::SynchronouslyCreateForCurrentThread())) {
     // XXX need to fire an error at parent.
-    return NS_ERROR_UNEXPECTED;
+    // Failed in creating BackgroundChild: probably in shutdown. Continue to run
+    // without BackgroundChild created.
   }
 
   class MOZ_STACK_CLASS SetThreadHelper final
   {
     // Raw pointer: this class is on the stack.
     WorkerPrivate* mWorkerPrivate;
 
   public:
--- a/gfx/layers/apz/test/reftest/reftest.list
+++ b/gfx/layers/apz/test/reftest/reftest.list
@@ -1,19 +1,19 @@
 # The following tests test the async positioning of the scrollbars.
 # Basic root-frame scrollbar with async scrolling
-skip-if(!asyncPan) fuzzy-if(Android,6,8) == async-scrollbar-1-v.html async-scrollbar-1-v-ref.html
-skip-if(!asyncPan) fuzzy-if(Android,6,8) == async-scrollbar-1-h.html async-scrollbar-1-h-ref.html
-skip-if(!asyncPan) fuzzy-if(Android,6,8) == async-scrollbar-1-vh.html async-scrollbar-1-vh-ref.html
-skip-if(!asyncPan) fuzzy-if(Android,6,8) == async-scrollbar-1-v-rtl.html async-scrollbar-1-v-rtl-ref.html
-skip-if(!asyncPan) fuzzy-if(Android,13,8) == async-scrollbar-1-h-rtl.html async-scrollbar-1-h-rtl-ref.html
-skip-if(!asyncPan) fuzzy-if(Android,8,11) == async-scrollbar-1-vh-rtl.html async-scrollbar-1-vh-rtl-ref.html
+fuzzy-if(Android,1,2) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-1-v.html async-scrollbar-1-v-ref.html
+fuzzy-if(Android,4,5) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-1-h.html async-scrollbar-1-h-ref.html
+fuzzy-if(Android,3,5) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-1-vh.html async-scrollbar-1-vh-ref.html
+fuzzy-if(Android,1,2) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-1-v-rtl.html async-scrollbar-1-v-rtl-ref.html
+fuzzy-if(Android,4,5) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-1-h-rtl.html async-scrollbar-1-h-rtl-ref.html
+fuzzy-if(Android,3,7) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-1-vh-rtl.html async-scrollbar-1-vh-rtl-ref.html
 
 # Different async zoom levels. Since the scrollthumb gets async-scaled in the
 # compositor, the border-radius ends of the scrollthumb are going to be a little
 # off, hence the fuzzy-if clauses.
-skip-if(!asyncZoom) fuzzy-if(B2G,98,82) == async-scrollbar-zoom-1.html async-scrollbar-zoom-1-ref.html
-skip-if(!asyncZoom) fuzzy-if(B2G,94,146) == async-scrollbar-zoom-2.html async-scrollbar-zoom-2-ref.html
+fuzzy-if(Android,54,18) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-zoom-1.html async-scrollbar-zoom-1-ref.html
+fuzzy-if(Android,45,21) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-zoom-2.html async-scrollbar-zoom-2-ref.html
 
 # Meta-viewport tag support
-skip-if(!asyncZoom) == initial-scale-1.html initial-scale-1-ref.html
+skip-if(!Android) pref(apz.allow_zooming,true) == initial-scale-1.html initial-scale-1-ref.html
 
 skip-if(!asyncPan) == frame-reconstruction-scroll-clamping.html frame-reconstruction-scroll-clamping-ref.html
--- a/gfx/src/nsDeviceContext.cpp
+++ b/gfx/src/nsDeviceContext.cpp
@@ -1,9 +1,10 @@
 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim: set sw=4 ts=4 expandtab: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsDeviceContext.h"
 #include <algorithm>                    // for max
 #include "gfxASurface.h"                // for gfxASurface, etc
 #include "gfxContext.h"
@@ -606,17 +607,25 @@ nsDeviceContext::FindScreen(nsIScreen** 
     if (mWidget->GetOwningTabChild()) {
         mScreenManager->ScreenForNativeWidget((void *)mWidget->GetOwningTabChild(),
                                               outScreen);
     }
     else if (mWidget->GetNativeData(NS_NATIVE_WINDOW)) {
         mScreenManager->ScreenForNativeWidget(mWidget->GetNativeData(NS_NATIVE_WINDOW),
                                               outScreen);
     }
-    else {
+
+#ifdef MOZ_WIDGET_ANDROID
+    if (!(*outScreen)) {
+        nsCOMPtr<nsIScreen> screen = mWidget->GetWidgetScreen();
+        screen.forget(outScreen);
+    }
+#endif
+
+    if (!(*outScreen)) {
         mScreenManager->GetPrimaryScreen(outScreen);
     }
 }
 
 bool
 nsDeviceContext::CalcPrintingSize()
 {
     if (!mPrintTarget) {
--- a/ipc/glue/BackgroundImpl.cpp
+++ b/ipc/glue/BackgroundImpl.cpp
@@ -2028,16 +2028,23 @@ ChildImpl::OpenProtocolOnMainThread(nsIE
     }
 
     return true;
   }
 
   ContentChild* content = ContentChild::GetSingleton();
   MOZ_ASSERT(content);
 
+  if (content->IsShuttingDown()) {
+    // The transport for ContentChild is shut down and can't be used to open
+    // PBackground.
+    DispatchFailureCallback(aEventTarget);
+    return false;
+  }
+
   if (!PBackground::Open(content)) {
     MOZ_CRASH("Failed to create top level actor!");
     return false;
   }
 
   if (!sPendingTargets) {
     sPendingTargets = new nsTArray<nsCOMPtr<nsIEventTarget>>(1);
     ClearOnShutdown(&sPendingTargets);
--- a/layout/reftests/reftest-sanity/async-zoom-2.html
+++ b/layout/reftests/reftest-sanity/async-zoom-2.html
@@ -1,11 +1,6 @@
 <!DOCTYPE HTML>
 <html reftest-async-zoom="2">
-<!-- There is a bug with MultiTiledContentClient that causes improper painting;
-     bug 1204076 is on file for this issue. As a temporary workaround, we set
-     user-scalable=no here so that WantAsyncZoom() returns false and we don't
-     use a MultiTiledContentClient. Once bug 1204076 is fixed, we can remove this. -->
-<meta name="viewport" content="user-scalable=no">
 <body>
 <div style="position:absolute; top: 0; left: 0; width: 100px; height: 100px; background: red;"></div>
 </body>
 </html>
--- a/layout/reftests/reftest-sanity/reftest.list
+++ b/layout/reftests/reftest-sanity/reftest.list
@@ -161,18 +161,18 @@ fails == reftest-no-paint.html reftest-n
 skip-if(!asyncPan||!browserIsRemote) == async-scroll-1a.html async-scroll-1-ref.html
 
 # Disable low-res painting for this test as it will cause more to
 # be drawn than we want.
 default-preferences pref(layers.low-precision-buffer,false)
 skip-if(!asyncPan||!browserIsRemote) != async-scroll-1b.html async-scroll-1-ref.html
 default-preferences
 
-skip-if(!asyncZoom) != async-zoom-1.html async-zoom-1-ref.html
-fuzzy(112,1197) skip-if(!asyncZoom) == async-zoom-2.html async-zoom-2-ref.html
+skip-if(!Android) pref(apz.allow_zooming,true) != async-zoom-1.html async-zoom-1-ref.html
+fuzzy(112,800) skip-if(!Android) pref(apz.allow_zooming,true) == async-zoom-2.html async-zoom-2-ref.html
 
 # reftest-opaque-layer
 == reftest-opaque-layer-pass.html reftest-opaque-layer-pass.html
 != reftest-opaque-layer-pass.html about:blank
 != about:blank reftest-opaque-layer-pass.html
 fails == reftest-opaque-layer-fail.html reftest-opaque-layer-fail.html
 
 # If reftest-opaque-layer fails (no matter whether it fails in the test or in the reference),
--- a/layout/reftests/web-animations/1267937-1.html
+++ b/layout/reftests/web-animations/1267937-1.html
@@ -12,17 +12,17 @@
 </style>
 </head>
 <body>
 <div id="target"></div>
 <script>
   var target = document.getElementById("target");
   var anim = target.animate(
     { marginLeft: [ "0px", "10px" ] },
-    { duration: 100000 /* 100s */, easing: "steps(2, start)" });
+    { duration: 500000 /* 500s */, easing: "steps(2, start)" });
 
   anim.ready.then(function() {
     // Set currentTime in before phase, i.e., GetComputedTimingAt() returns
     // null progress in the phase so that we can skip ComposeStyle().
     // This currentTime value should be far from zero in order to skip
     // restyles requested by setting currentTime or frames in a next tick.
     // If this value is near by zero, say -1, the restyles will be processed in
     // the next tick and current time in the next tick must be greater than
--- a/layout/tools/reftest/README.txt
+++ b/layout/tools/reftest/README.txt
@@ -550,17 +550,17 @@ offset (in CSS pixels) added to the asyn
 Testing Async Zooming: reftest-async-zoom="<float>"
 =========================================================
 
 When the "reftest-async-zoom" attribute is present on the root element then at
 the end of the test take the snapshot with the given async zoom on top of any
 existing zoom. Content is not re-rendered at the new zoom level. This
 corresponds to the mobile style "pinch zoom" style of zoom. This is unsupported
 in many configurations, and any tests using this will probably want to have
-skip-if(!asyncPanZoom) on them.
+pref(apz.allow_zooming,true) on them.
 
 Printing Tests: class="reftest-print"
 =====================================
 
 Now that the patch for bug 374050 has landed
 (https://bugzilla.mozilla.org/show_bug.cgi?id=374050), it is possible to
 create reftests that run in a paginated context.
 
--- a/layout/tools/reftest/reftest.jsm
+++ b/layout/tools/reftest/reftest.jsm
@@ -742,21 +742,16 @@ function BuildConditionSandbox(aURL) {
     sandbox.browserIsRemote = gBrowserIsRemote;
     sandbox.Mulet = gB2GisMulet;
 
     try {
         sandbox.asyncPan = gContainingWindow.document.docShell.asyncPanZoomEnabled;
     } catch (e) {
         sandbox.asyncPan = false;
     }
-    try {
-        sandbox.asyncZoom = sandbox.asyncPan && prefs.getBoolPref("apz.allow_zooming");
-    } catch (e) {
-        sandbox.asyncZoom = false;
-    }
 
     if (!gDumpedConditionSandbox) {
         logger.info("Dumping JSON representation of sandbox");
         logger.info(JSON.stringify(CU.waiveXrays(sandbox)));
         gDumpedConditionSandbox = true;
     }
 
     // Graphics features
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/ScreenManagerHelper.java
@@ -0,0 +1,43 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * vim: ts=4 sw=4 expandtab:
+ * 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/. */
+
+package org.mozilla.gecko;
+
+import org.mozilla.gecko.annotation.WrapForJNI;
+
+class ScreenManagerHelper {
+
+    /**
+     * The following display types use the same definition in nsIScreen.idl
+     */
+    final static int DISPLAY_PRIMARY  = 0; // primary screen
+    final static int DISPLAY_EXTERNAL = 1; // wired displays, such as HDMI, DisplayPort, etc.
+    final static int DISPLAY_VIRTUAL  = 2; // wireless displays, such as Chromecast, WiFi-Display, etc.
+
+    /**
+     * Add a new nsScreen when a new display in Android is available.
+     *
+     * @param displayType the display type of the nsScreen would be added
+     * @param width       the width of the new nsScreen
+     * @param height      the height of the new nsScreen
+     * @param density     the density of the new nsScreen
+     *
+     * @return            return the ID of the added nsScreen
+     */
+    @WrapForJNI
+    public native static int addDisplay(int displayType,
+                                        int width,
+                                        int height,
+                                        float density);
+
+    /**
+     * Remove the nsScreen by the specific screen ID.
+     *
+     * @param screenId    the ID of the screen would be removed.
+     */
+    @WrapForJNI
+    public native static void removeDisplay(int screenId);
+}
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -643,16 +643,17 @@ gbjar.sources += ['java/org/mozilla/geck
     'restrictions/DefaultConfiguration.java',
     'restrictions/GuestProfileConfiguration.java',
     'restrictions/Restrictable.java',
     'restrictions/RestrictedProfileConfiguration.java',
     'restrictions/RestrictionCache.java',
     'restrictions/RestrictionConfiguration.java',
     'restrictions/RestrictionProvider.java',
     'restrictions/Restrictions.java',
+    'ScreenManagerHelper.java',
     'ScreenshotObserver.java',
     'search/SearchEngine.java',
     'search/SearchEngineManager.java',
     'SessionParser.java',
     'SharedPreferencesHelper.java',
     'SiteIdentity.java',
     'SnackbarBuilder.java',
     'SuggestClient.java',
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoView.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoView.java
@@ -1,9 +1,10 @@
 /* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * vim: ts=4 sw=4 expandtab:
  * 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/. */
 
 package org.mozilla.gecko;
 
 import java.util.Set;
 
@@ -43,16 +44,17 @@ public class GeckoView extends LayerView
     private static final String LOGTAG = "GeckoView";
 
     private ChromeDelegate mChromeDelegate;
     private ContentDelegate mContentDelegate;
 
     private InputConnectionListener mInputConnectionListener;
 
     private boolean onAttachedToWindowCalled;
+    private int screenId = 0; // default to the primary screen
 
     @Override
     public void handleMessage(final String event, final JSONObject message) {
         ThreadUtils.postToUiThread(new Runnable() {
             @Override
             public void run() {
                 try {
                     if (event.equals("Gecko:Ready")) {
@@ -109,17 +111,17 @@ public class GeckoView extends LayerView
     }
 
     @WrapForJNI(dispatchTo = "proxy")
     private static final class Window extends JNIObject {
         @WrapForJNI(skip = true)
         /* package */ Window() {}
 
         static native void open(Window instance, GeckoView view, Object compositor,
-                                String chromeURI);
+                                String chromeURI, int screenId);
 
         @Override protected native void disposeNative();
         native void close();
         native void reattach(GeckoView view, Object compositor);
         native void loadUri(String uri, int flags);
     }
 
     // Object to hold onto our nsWindow connection when GeckoView gets destroyed.
@@ -224,21 +226,21 @@ public class GeckoView extends LayerView
         super.onRestoreInstanceState(stateBinder.superState);
     }
 
     private void openWindow() {
         final String chromeURI = getGeckoInterface().getDefaultChromeURI();
 
         if (GeckoThread.isStateAtLeast(GeckoThread.State.PROFILE_READY)) {
             Window.open(window, this, getCompositor(),
-                        chromeURI);
+                        chromeURI, screenId);
         } else {
             GeckoThread.queueNativeCallUntil(GeckoThread.State.PROFILE_READY, Window.class,
                     "open", window, GeckoView.class, this, Object.class, getCompositor(),
-                    String.class, chromeURI);
+                    String.class, chromeURI, screenId);
         }
     }
 
     private void reattachWindow() {
         if (GeckoThread.isStateAtLeast(GeckoThread.State.PROFILE_READY)) {
             window.reattach(this, getCompositor());
         } else {
             GeckoThread.queueNativeCallUntil(GeckoThread.State.PROFILE_READY,
--- a/old-configure.in
+++ b/old-configure.in
@@ -3501,38 +3501,19 @@ if test -n "$MOZ_ANGLE_RENDERER"; then
 fi # MOZ_ANGLE_RENDERER
 
 fi # COMPILE_ENVIRONMENT
 
 
 dnl ========================================================
 dnl Gamepad support
 dnl ========================================================
-MOZ_GAMEPAD=
+MOZ_GAMEPAD=1
 MOZ_GAMEPAD_BACKEND=stub
 
-# Gamepad DOM is built on supported platforms by default.
-case "$OS_TARGET" in
-     WINNT|Linux)
-       MOZ_GAMEPAD=1
-       ;;
-     Darwin)
-       if test -z "$MOZ_IOS"; then
-         MOZ_GAMEPAD=1
-       fi
-       ;;
-     Android)
-       if test "$MOZ_WIDGET_TOOLKIT" != "gonk"; then
-         MOZ_GAMEPAD=1
-       fi
-       ;;
-     *)
-       ;;
-esac
-
 MOZ_ARG_DISABLE_BOOL(gamepad,
 [  --disable-gamepad   Disable gamepad support],
     MOZ_GAMEPAD=,
     MOZ_GAMEPAD=1)
 
 if test "$MOZ_GAMEPAD"; then
     case "$OS_TARGET" in
     Darwin)
--- a/python/mozbuild/mozbuild/configure/__init__.py
+++ b/python/mozbuild/mozbuild/configure/__init__.py
@@ -470,18 +470,23 @@ class ConfigureSandbox(dict):
                 % (e.arg, reason, e.old_arg, e.old_origin))
 
         if option_string:
             self._raw_options[option] = option_string
 
         when = self._conditions.get(option)
         if (when and not self._value_for(when, need_help_dependency=True) and
             value is not None and value.origin != 'default'):
+            if value.origin == 'environment':
+                # The value we return doesn't really matter, because of the
+                # requirement for @depends to have the same when.
+                return None
             raise InvalidOptionError(
-                '%s is not available in this configuration' % option_string)
+                '%s is not available in this configuration'
+                % option_string.split('=', 1)[0])
 
         return value
 
     def _dependency(self, arg, callee_name, arg_name=None):
         if isinstance(arg, types.StringTypes):
             prefix, name, values = Option.split_option(arg)
             if values != ():
                 raise ConfigureError("Option must not contain an '='")
--- a/python/mozbuild/mozbuild/test/configure/test_configure.py
+++ b/python/mozbuild/mozbuild/test/configure/test_configure.py
@@ -769,17 +769,17 @@ class TestConfigure(unittest.TestCase):
             @depends('--help')
             def always(_):
                 return True
             @depends('--help')
             def never(_):
                 return False
             option('--with-foo', help='foo', when=always)
             option('--with-bar', help='bar', when=never)
-            option('--with-qux', help='qux', when='--with-foo')
+            option('--with-qux', env="QUX", help='qux', when='--with-foo')
 
             set_config('FOO', depends('--with-foo', when=always)(lambda x: x))
             set_config('BAR', depends('--with-bar', when=never)(lambda x: x))
             set_config('QUX', depends('--with-qux', when='--with-foo')(lambda x: x))
         '''):
             config = self.get_config()
             self.assertEquals(config, {
                 'FOO': NegativeOptionValue(),
@@ -808,16 +808,29 @@ class TestConfigure(unittest.TestCase):
             with self.assertRaises(InvalidOptionError) as e:
                 self.get_config(['--with-qux'])
 
             self.assertEquals(
                 e.exception.message,
                 '--with-qux is not available in this configuration'
             )
 
+            with self.assertRaises(InvalidOptionError) as e:
+                self.get_config(['QUX=1'])
+
+            self.assertEquals(
+                e.exception.message,
+                'QUX is not available in this configuration'
+            )
+
+            config = self.get_config(env={'QUX': '1'})
+            self.assertEquals(config, {
+                'FOO': NegativeOptionValue(),
+            })
+
             help, config = self.get_config(['--help'])
             self.assertEquals(help, textwrap.dedent('''\
                 Usage: configure [options]
 
                 Options: [defaults in brackets after descriptions]
                   --help                    print this message
                   --with-foo                foo
 
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1159,9 +1159,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 = 463;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1485350356111000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1485436069485000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -1,16 +1,14 @@
 0.me.uk: could not connect to host
 020wifi.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]
 0p.no: did not receive HSTS header
 0x.sk: could not connect to host
 0x1337.eu: could not connect to host
 0x44.net: did not receive HSTS header
-0xAA55.me: could not connect to host
-0xaa55.me: could not connect to host
 0xb612.org: could not connect to host
 1018hosting.nl: did not receive HSTS header
 1022996493.rsc.cdn77.org: could not connect to host
 10seos.com: did not receive HSTS header
 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]
 12vpnchina.com: could not connect to host
 18f.gsa.gov: did not receive HSTS header
 1a-jva.de: did not receive HSTS header
@@ -30,17 +28,16 @@ 3chit.cf: could not connect to host
 420dongstorm.com: could not connect to host
 42ms.org: could not connect to host
 4455software.com: did not receive HSTS header
 4679.space: could not connect to host
 47ronin.com: did not receive HSTS header
 4elements.com: max-age too low: 0
 4mm.org: did not receive HSTS header
 4sqsu.eu: could not connect to host
-4vf.de: could not connect to host
 50millionablaze.org: did not receive HSTS header
 56ct.com: could not connect to host
 60ych.net: did not receive HSTS header
 7kovrikov.ru: did not receive HSTS header
 808.lv: could not connect to host
 83i.net: could not connect to host
 8ack.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]
 911911.pw: could not connect to host
@@ -48,17 +45,16 @@ 9point6.com: could not connect to host
 a-plus.space: could not connect to host
 a9c.co: could not connect to host
 aaeblog.com: could not connect to host
 aaeblog.net: could not connect to host
 aaeblog.org: could not connect to host
 aaron-gustafson.com: could not connect to host
 abearofsoap.com: did not receive HSTS header
 abecodes.net: did not receive HSTS header
-abeestrada.com: did not receive HSTS header
 abilitylist.org: did not receive HSTS header
 abioniere.de: could not connect to host
 aboutyou-deals.de: did not receive HSTS header
 abtom.de: did not receive HSTS header
 abury.fr: did not receive HSTS header
 abury.me: did not receive HSTS header
 accelerole.com: did not receive HSTS header
 accountradar.com: could not connect to host
@@ -119,17 +115,16 @@ alanlee.net: could not connect to host
 alanrickmanflipstable.com: could not connect to host
 alariel.de: could not connect to host
 alarmsystemreviews.com: did not receive HSTS header
 albertopimienta.com: did not receive HSTS header
 alcazaar.com: could not connect to host
 aleax.me: could not connect to host
 alecvannoten.be: did not receive HSTS header
 alela.fr: could not connect to host
-alenan.org: could not connect to host
 alessandro.pw: did not receive HSTS header
 alethearose.com: did not receive HSTS header
 alexisabarca.com: did not receive HSTS header
 alfredxing.com: did not receive HSTS header
 alkami.com: did not receive HSTS header
 alkamitech.com: did not receive HSTS header
 all-subtitles.com: did not receive HSTS header
 allinnote.com: could not connect to host
@@ -173,17 +168,16 @@ ankakaak.com: could not connect to host
 ankaraprofesyonelnakliyat.com: did not receive HSTS header
 annabellaw.com: max-age too low: 0
 anomaly.ws: did not receive HSTS header
 anonboards.com: did not receive HSTS header
 anook.com: max-age too low: 0
 ant.land: [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]
 antimine.kr: could not connect to host
 antocom.com: did not receive HSTS header
-antoinedeschenes.com: could not connect to host
 antoniomarques.eu: did not receive HSTS header
 antoniorequena.com.ve: max-age too low: 0
 antscript.com: did not receive HSTS header
 any.pm: could not connect to host
 anycoin.me: could not connect to host
 apachelounge.com: did not receive HSTS header
 apeasternpower.com: max-age too low: 0
 api.lookout.com: could not connect to host
@@ -201,18 +195,18 @@ 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
 appseccalifornia.org: 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
+arboineuropa.nl: did not receive HSTS header
 arbu.eu: max-age too low: 2419200
-arksan.com.tr: 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
 arrayify.com: could not connect to host
 ars-design.net: could not connect to host
 ars.toscana.it: max-age too low: 0
 art2web.net: could not connect to host
@@ -224,16 +218,17 @@ askme24.de: could not connect to host
 asmui.ml: could not connect to host
 ass.org.au: did not receive HSTS header
 assdecoeur.org: could not connect to host
 asset-alive.com: did not receive HSTS header
 asset-alive.net: did not receive HSTS header
 astrolpost.com: could not connect to host
 atavio.at: could not connect to host
 atavio.ch: could not connect to host
+atavio.de: did not receive HSTS header
 athul.xyz: did not receive HSTS header
 atlex.nl: 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
 auditmatrix.com: did not receive HSTS header
@@ -277,17 +272,16 @@ balcan-underground.net: could not connec
 baldwinkoo.com: could not connect to host
 bandb.xyz: could not connect to host
 barely.sexy: did not receive HSTS header
 bashcode.ninja: could not connect to host
 basicsolutionsus.com: did not receive HSTS header
 bassh.net: did not receive HSTS header
 baumstark.ca: did not receive HSTS header
 bazarstupava.sk: did not receive HSTS header
-bazdell.com: could not connect to host
 bcbsmagentprofile.com: could not connect to host
 bccx.com: could not connect to host
 bckp.de: could not connect to host
 bcm.com.au: max-age too low: 0
 bcnx.de: did not receive HSTS header
 bcsytv.com: could not connect to host
 be.search.yahoo.com: did not receive HSTS header
 beach-inspector.com: did not receive HSTS header
@@ -329,17 +323,17 @@ bieberium.de: did not receive HSTS heade
 bienenblog.cc: could not connect to host
 bigbrownpromotions.com.au: did not receive HSTS header
 bigdinosaur.org: did not receive HSTS header
 bigshinylock.minazo.net: could not connect to host
 bikiniseli.com: could not connect to host
 bildiri.ci: did not receive HSTS header
 bildschirmflackern.de: did not receive HSTS header
 billin.net: did not receive HSTS header
-billkiss.com: could not connect to host
+billkiss.com: max-age too low: 300
 billninja.com: could not connect to host
 binderapp.net: could not connect to host
 biophysik-ssl.de: did not receive HSTS header
 biou.me: could not connect to host
 birkman.com: did not receive HSTS header
 bismarck.moe: did not receive HSTS header
 bitchan.it: could not connect to host
 bitcoinworld.me: could not connect to host
@@ -366,16 +360,17 @@ blaudev.es: could not connect to host
 blenheimchalcot.com: did not receive HSTS header
 blha303.com.au: could not connect to host
 blindsexdate.nl: could not connect to host
 blog.cyveillance.com: did not receive HSTS header
 blog.lookout.com: did not receive HSTS header
 bloglikepro.com: did not receive HSTS header
 blubbablasen.de: could not connect to host
 blucas.org: did not receive HSTS header
+blue-leaf81.net: could not connect to host
 blueliv.com: did not receive HSTS header
 bluetenmeer.com: did not receive HSTS header
 bm-trading.nl: did not receive HSTS header
 bngsecure.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]
 bobiji.com: did not receive HSTS header
 bockenauer.at: max-age too low: 0
 bodo-wolff.de: could not connect to host
 bodyblog.nl: did not receive HSTS header
@@ -395,17 +390,16 @@ boomerang.com: could not connect to host
 bootjp.me: did not receive HSTS header
 boringsecurity.net: could not connect to host
 boris.one: did not receive HSTS header
 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]
-brage.info: could not connect to host
 braineet.com: did not receive HSTS header
 brainfork.ml: 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
 brandon.so: could not connect to host
@@ -420,16 +414,17 @@ browserid.org: did not receive HSTS head
 brunix.net: did not receive HSTS header
 bsagan.fr: could not connect to host
 bsdtips.com: could not connect to host
 btcdlc.com: could not connect to host
 buch-cuber.de: could not connect to host
 buchheld.at: did not receive HSTS header
 budgetthostels.nl: did not receive HSTS header
 budskap.eu: did not receive HSTS header
+bugtrack.io: could not connect to host
 buhler.pro: did not receive HSTS header
 buildsaver.co.za: did not receive HSTS header
 built.by: did not receive HSTS header
 bulletpoint.cz: did not receive HSTS header
 bumarkamoda.com: did not receive HSTS header
 bunaken.asia: could not connect to host
 burian-server.cz: could not connect to host
 burrow.ovh: could not connect to host
@@ -450,16 +445,17 @@ bysymphony.com: max-age too low: 0
 bytepark.de: did not receive HSTS header
 c1yd3i.me: could not connect to host
 c3b.info: could not connect to host
 cabarave.com: could not connect to host
 cabusar.fr: could not connect to host
 caconnect.org: could not connect to host
 cadao.me: did not receive HSTS header
 cadusilva.com: did not receive HSTS header
+caesreon.com: did not receive HSTS header
 cafe-scientifique.org.ec: could not connect to host
 caim.cz: did not receive HSTS header
 caizx.com: did not receive HSTS header
 cajapopcorn.com: did not receive HSTS header
 cake.care: could not connect to host
 calgaryconstructionjobs.com: could not connect to host
 calix.com: max-age too low: 0
 calltrackingreports.com: could not connect to host
@@ -486,44 +482,42 @@ casedi.org: max-age too low: 0
 casinostest.com: did not receive HSTS header
 casovi.cf: could not connect to host
 catcontent.cloud: could not connect to host
 catinmay.com: did not receive HSTS header
 catnapstudios.com: could not connect to host
 caveclan.org: did not receive HSTS header
 cavedroid.xyz: could not connect to host
 cbhq.net: could not connect to host
+ccayearbook.com: could not connect to host
 ccsys.com: could not connect to host
 cctech.ph: did not receive HSTS header
 cd.search.yahoo.com: did not receive HSTS header
 cd0.us: could not connect to host
 cdkeykopen.com: did not receive HSTS header
 cdnb.co: could not connect to host
 cdndepo.com: did not receive HSTS header
 cdreporting.co.uk: did not receive HSTS header
 cejhon.cz: could not connect to host
 ceml.ch: did not receive HSTS header
 centralvacsunlimited.net: did not receive HSTS header
 centrepoint-community.com: could not connect to host
-centricweb.com: could not connect to host
 cerize.love: could not connect to host
 cert.se: max-age too low: 2628001
 certmgr.org: could not connect to host
 cesal.net: could not connect to host
 cesidianroot.eu: could not connect to host
 cevrimici.com: could not connect to host
 cfetengineering.com: could not connect to host
 cg.search.yahoo.com: did not receive HSTS header
 chainmonitor.com: could not connect to host
 championsofregnum.com: did not receive HSTS header
 changelab.cc: max-age too low: 0
 chaos.fail: did not receive HSTS header
 chargejuice.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]
-charl.eu: could not connect to host
-charmyadesara.com: could not connect to host
 charnleyhouse.co.uk: max-age too low: 604800
 chartpen.com: did not receive HSTS header
 chartstoffarm.de: max-age too low: 10
 chatbot.me: did not receive HSTS header
 chateauconstellation.ch: did not receive HSTS header
 chatup.cf: could not connect to host
 chaulootz.com: could not connect to host
 cheapestgamecards.de: did not receive HSTS header
@@ -552,36 +546,36 @@ christophheich.me: could not connect to 
 chrisupjohn.com: could not connect to host
 chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
 chrome.google.com: did not receive HSTS header (error ignored - included regardless)
 chroniclesofgeorge.com: did not receive HSTS header
 chua.cf: could not connect to host
 cidr.ml: could not connect to host
 cip.md: did not receive HSTS header
 ciplanutrition.com: did not receive HSTS header
+cirfi.com: could not connect to host
 citiagent.cz: could not connect to host
 cityoflaurel.org: did not receive HSTS header
 clara-baumert.de: could not connect to host
 classicspublishing.com: could not connect to host
-claudio4.com: did not receive HSTS header
 clcleaningco.com: could not connect to host
 cleaningsquad.ca: max-age too low: 0
 clemovementlaw.com: could not connect to host
 clerkendweller.uk: could not connect to host
 clickandgo.com: did not receive HSTS header
+clickphish.com: 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
 cloud.wtf: could not connect to host
 cloudapi.vc: could not connect to host
-cloudapps.digital: could not connect to host
 cloudcert.org: did not receive HSTS header
 cloudcy.net: could not connect to host
-clouddesktop.co.nz: did not receive HSTS header
+clouddesktop.co.nz: could not connect to host
 cloudey.net: did not receive HSTS header
 cloudflare.com: did not receive HSTS header
 cloudimag.es: could not connect to host
 cloudns.com.au: could not connect to host
 cloudstoragemaus.com: could not connect to host
 cloudwalk.io: did not receive HSTS header
 cloverleaf.net: max-age too low: 0
 cmacacias.ch: did not receive HSTS header
@@ -603,16 +597,17 @@ codeco.pw: could not connect to host
 codeforce.io: did not receive HSTS header
 codefoundry.it: did not receive HSTS header
 codepx.com: did not receive HSTS header
 codewiththepros.org: could not connect to host
 codiva.io: max-age too low: 2592000
 coffeeetc.co.uk: did not receive HSTS header
 coffeestrategies.com: max-age too low: 2592000
 coiffeurschnittstelle.ch: did not receive HSTS header
+coinapult.com: did not receive HSTS header
 coindam.com: could not connect to host
 coldfff.com: could not connect to host
 colengo.com: did not receive HSTS header
 colisfrais.com: did not receive HSTS header
 collegepulse.org: could not connect to host
 collies.eu: did not receive HSTS header
 collins.kg: did not receive HSTS header
 colmexpro.com: max-age too low: 2592000
@@ -625,17 +620,16 @@ comiteshopping.com: could not connect to
 compalytics.com: could not connect to host
 completionist.audio: could not connect to host
 computeremergency.com.au: did not receive HSTS header
 concord-group.co.jp: did not receive HSTS header
 confirm365.com: could not connect to host
 conformal.com: could not connect to host
 consciousandglamorous.com: could not connect to host
 console.python.org: did not receive HSTS header
-console.support: could not connect to host
 constructionjobs.com: did not receive HSTS header
 contactbig.com: did not receive HSTS header
 content-api-dev.azurewebsites.net: could not connect to host
 continuumgaming.com: could not connect to host
 coolchevy.org.ua: did not receive HSTS header
 coralproject.net: did not receive HSTS header
 coralrosado.com.br: did not receive HSTS header
 cordial-restaurant.com: did not receive HSTS header
@@ -659,31 +653,33 @@ cr.search.yahoo.com: did not receive HST
 cracking.org: did not receive HSTS header
 craftbeerbarn.co.uk: could not connect to host
 crate.io: did not receive HSTS header
 cravelyrics.com: could not connect to host
 crazycen.com: did not receive HSTS header
 crazyhotseeds.com: did not receive HSTS header
 creativephysics.ml: could not connect to host
 creativeplayuk.com: did not receive HSTS header
+crestoncottage.com: could not connect to host
 criena.net: could not connect to host
 crizk.com: could not connect to host
 crosssec.com: did not receive HSTS header
 crow.tw: could not connect to host
 crowd.supply: could not connect to host
 crowdcurity.com: did not receive HSTS header
 crowdjuris.com: could not connect to host
 crudysql.com: could not connect to host
 cruzr.xyz: could not connect to host
 crvv.me: did not receive HSTS header
 crypt.guru: could not connect to host
 cryptify.eu: did not receive HSTS header
 cryptobells.com: did not receive HSTS header
 cryptobin.org: could not connect to host
 cryptojar.io: did not receive HSTS header
+cryptoparty.dk: did not receive HSTS header
 cryptopush.com: could not connect to host
 crysadm.com: max-age too low: 1
 crystalchandelierservices.com: could not connect to host
 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
@@ -776,16 +772,18 @@ depijl-mz.nl: did not receive HSTS heade
 depixion.agency: could not connect to host
 dequehablamos.es: could not connect to host
 derevtsov.com: did not receive HSTS header
 derwolfe.net: did not receive HSTS header
 designgears.com: could not connect to host
 destinationbijoux.fr: could not connect to host
 detector.exposed: could not connect to host
 detutorial.com: max-age too low: 0
+deusu.de: could not connect to host
+deusu.org: could not connect to host
 devh.de: did not receive HSTS header
 devincrow.me: could not connect to host
 devinfo.net: did not receive HSTS header
 devuan.org: did not receive HSTS header
 diablotine.rocks: 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]
 diasp.org: did not receive HSTS header
@@ -799,19 +797,17 @@ discoveringdocker.com: did not receive H
 discovery.lookout.com: did not receive HSTS header
 dislocated.de: did not receive HSTS header
 dissimulo.me: could not connect to host
 dittvertshus.no: could not connect to host
 dizihocasi.com: did not receive HSTS header
 dizorg.net: could not connect to host
 dj4et.de: could not connect to host
 dl.google.com: did not receive HSTS header (error ignored - included regardless)
-dmz.ninja: could not connect to host
 dn42.eu: could not connect to host
-dne.lu: did not receive HSTS header
 dns.google.com: did not receive HSTS header (error ignored - included regardless)
 do-do.tk: could not connect to host
 do.search.yahoo.com: did not receive HSTS header
 dobet.in: could not connect to host
 docket.news: could not connect to host
 docs.google.com: did not receive HSTS header (error ignored - included regardless)
 doeswindowssuckforeveryoneorjustme.com: could not connect to host
 dogbox.se: did not receive HSTS header
@@ -834,17 +830,17 @@ download.jitsi.org: did not receive HSTS
 downsouthweddings.com.au: did not receive HSTS header
 doyoucheck.com: did not receive HSTS header
 dpratt.de: could not connect to host
 dprd-wonogirikab.go.id: did not receive HSTS header
 dragonisles.net: could not connect to host
 dragons-of-highlands.cz: could not connect to host
 dragontrainingmobilezoo.com.au: max-age too low: 0
 dranek.com: could not connect to host
-draw.uy: did not receive HSTS header
+draw.uy: could not connect to host
 drbethanybarnes.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]
 dreadbyte.com: could not connect to host
 dreamlinehost.com: did not receive HSTS header
 dreizwosechs.de: did not receive HSTS header
 drishti.guru: could not connect to host
 drive.google.com: did not receive HSTS header (error ignored - included regardless)
 driving-lessons.co.uk: did not receive HSTS header
 droidboss.com: could not connect to host
@@ -857,16 +853,17 @@ dubrovskiy.pro: could not connect to hos
 duesee.org: could not connect to host
 dullsir.com: did not receive HSTS header
 duria.de: max-age too low: 3600
 dutch1.nl: did not receive HSTS header
 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]
 dycontrol.de: could not connect to host
 dylanscott.com.au: did not receive HSTS header
 dynamize.solutions: could not connect to host
+dziekonski.com: could not connect to host
 dzimejl.sk: did not receive HSTS header
 dzlibs.io: could not connect to host
 e-aut.net: could not connect to host
 e-deca2.org: did not receive HSTS header
 earga.sm: could not connect to host
 earlybirdsnacks.com: did not receive HSTS header
 easychiller.org: could not connect to host
 easyhaul.com: did not receive HSTS header
@@ -884,30 +881,32 @@ ecg.fr: could not connect to host
 ecole-en-danger.fr: could not connect to host
 edcphenix.tk: could not connect to host
 edelsteincosmetic.com: max-age too low: 0
 edissecurity.sk: did not receive HSTS header
 edix.ru: could not connect to host
 edk.com.tr: did not receive HSTS header
 edmodo.com: did not receive HSTS header
 eduvance.in: did not receive HSTS header
+eeqj.com: could not connect to host
 effectiveosgi.com: could not connect to host
 efficienthealth.com: could not connect to host
 egg-ortho.ch: did not receive HSTS header
 egit.co: could not connect to host
 ego-world.org: could not connect to host
 ehrenamt-skpfcw.de: could not connect to host
 eicfood.com: could not connect to host
 elaintehtaat.fi: did not receive HSTS header
 elanguest.pl: could not connect to host
 electricianforum.co.uk: could not connect to host
 electromc.com: could not connect to host
 elemprendedor.com.ve: could not connect to host
 elenag.ga: could not connect to host
 elenoon.ir: did not receive HSTS header
+elgacien.de: could not connect to host
 elimdengelen.com: did not receive HSTS header
 elitefishtank.com: could not connect to host
 elnutricionista.es: did not receive HSTS header
 elpo.xyz: could not connect to host
 elsamakhin.com: could not connect to host
 elsitar.com: could not connect to host
 email.lookout.com: could not connect to host
 emeldi-commerce.com: max-age too low: 0
@@ -943,31 +942,32 @@ eressea.xyz: could not connect to host
 ericyl.com: 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]
 errolz.com: could not connect to host
 errors.zenpayroll.com: could not connect to host
+ersindemirtas.com: could not connect to host
 esclear.de: did not receive HSTS header
 escotour.com: did not receive HSTS header
 esec.rs: did not receive HSTS header
 espra.com: could not connect to host
 essexcosmeticdentists.co.uk: did not receive HSTS header
 essexghosthunters.co.uk: did not receive HSTS header
 estan.cn: did not receive HSTS header
 estilosapeca.com: could not connect to host
 et-buchholz.de: could not connect to host
 etdonline.co.uk: did not receive HSTS header
 eternitylove.us: could not connect to host
 ethack.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]
 etsysecure.com: could not connect to host
 etula.ga: could not connect to host
-euanbaines.com: did not receive HSTS header
+euanbaines.com: could not connect to host
 eucl3d.com: did not receive HSTS header
 eulerpi.io: could not connect to host
 euph.eu: could not connect to host
 euren.se: could not connect to host
 euroshop24.net: could not connect to host
 evantage.org: could not connect to host
 everybooks.com: max-age too low: 60
 evi.be: did not receive HSTS header
@@ -1000,16 +1000,17 @@ factorygw.com: did not receive HSTS head
 fadilus.com: did not receive HSTS header
 faesser.com: did not receive HSTS header
 fail4free.de: did not receive HSTS header
 faizan.net: did not receive HSTS header
 faizan.xyz: could not connect to host
 fakeletters.org: could not connect to host
 falkena.net: max-age too low: 5184000
 falkp.no: did not receive HSTS header
+familie-zimmermann.at: could not connect to host
 fanyl.cn: did not receive HSTS header
 fashioncare.cz: did not receive HSTS header
 fasset.jp: 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
 fatox.de: could not connect to host
 fatwin.pw: could not connect to host
@@ -1043,17 +1044,17 @@ firebaseio-demo.com: could not connect t
 firebaseio.com: could not connect to host (error ignored - included regardless)
 firefall.rocks: could not connect to host
 firemail.io: could not connect to host
 firstforex.co.uk: did not receive HSTS header
 fish2.me: did not receive HSTS header
 fit4medien.de: did not receive HSTS header
 fitnesswerk.de: could not connect to host
 fivestarsitters.com: did not receive HSTS header
-fixatom.com: max-age too low: 604800
+fixatom.com: did not receive HSTS header
 fixingdns.com: did not receive HSTS header
 fj.search.yahoo.com: did not receive HSTS header
 flags.ninja: could not connect to host
 flam.io: could not connect to host
 flamewall.net: could not connect to host
 fliexer.com: did not receive HSTS header
 floless.co.uk: did not receive HSTS header
 florian-lillpopp.de: max-age too low: 10
@@ -1073,22 +1074,20 @@ food4health.guide: could not connect to 
 footballmapped.com: could not connect to host
 foraje-profesionale.ro: did not receive HSTS header
 forbook.net: 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
 formini.dz: did not receive HSTS header
 formula.cf: could not connect to host
-fortworth.ch: could not connect to host
 fotiu.com: could not connect to host
 fotm.net: did not receive HSTS header
 fotografosexpertos.com: did not receive HSTS header
 fotopasja.info: could not connect to host
-fourchin.net: could not connect to host
 foxdev.io: could not connect to host
 foxelbox.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]
 foxtrot.pw: could not connect to host
 fr33d0m.link: could not connect to host
 francevpn.xyz: could not connect to host
 frangor.info: did not receive HSTS header
 frank.fyi: could not connect to host
 fransallen.com: did not receive HSTS header
@@ -1104,16 +1103,18 @@ freeutopia.org: did not receive HSTS hea
 freshfind.xyz: could not connect to host
 frezbo.com: did not receive HSTS header
 friendica.ch: could not connect to host
 froggstack.de: did not receive HSTS header
 frontmin.com: did not receive HSTS header
 frost-ci.xyz: could not connect to host
 fruitusers.com: could not connect to host
 frusky.net: could not connect to host
+ftctele.com: did not receive HSTS header
+fundacionhijosdelsol.org: could not connect to host
 funkyweddingideas.com.au: could not connect to host
 funrun.com: did not receive HSTS header
 furiffic.com: did not receive HSTS header
 furry.be: max-age too low: 86400
 fusionmate.com: could not connect to host
 futbol11.com: did not receive HSTS header
 futuretechnologi.es: could not connect to host
 fx-rk.com: did not receive HSTS header
@@ -1137,24 +1138,24 @@ gameink.net: max-age too low: 0
 gamenected.com: could not connect to host
 gamenected.de: could not connect to host
 gamerslair.org: did not receive HSTS header
 gamesdepartment.co.uk: max-age too low: 0
 gamingmedia.eu: could not connect to host
 gampenhof.de: did not receive HSTS header
 gaptek.id: did not receive HSTS header
 gatilagata.com.br: did not receive HSTS header
-gcsepod.com: did not receive HSTS header
 gdpventure.com: max-age too low: 0
 gedankenbude.info: did not receive HSTS header
 geekcast.co.uk: could not connect to host
 geli-graphics.com: did not receive HSTS header
 gem-indonesia.net: could not connect to host
 genuu.com: could not connect to host
 genuxation.com: could not connect to host
+genuxtsg.com: could not connect to host
 genyaa.com: could not connect to host
 gerencianet.com.br: did not receive HSTS header
 get.zenpayroll.com: did not receive HSTS header
 getable.com: did not receive HSTS header
 getbooks.co.il: did not receive HSTS header
 getcarefirst.com: could not connect to host
 getcolor.com: max-age too low: 86400
 getinternet.de: max-age too low: 0
@@ -1165,16 +1166,17 @@ getmassage.com.ng: did not receive HSTS 
 getsello.com: did not receive HSTS header
 getwashdaddy.com: could not connect to host
 gfhgiro.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]
 gfm.tech: could not connect to host
 gfournier.ca: could not connect to host
 gfwsb.ml: could not connect to host
 gheorghesarcov.ga: could not connect to host
 gheorghesarcov.tk: could not connect to host
+ghostblog.info: could not connect to host
 gigacloud.org: did not receive HSTS header
 gilgaz.com: did not receive HSTS header
 gilly.berlin: did not receive HSTS header
 gingali.de: did not receive HSTS header
 gipsamsfashion.com: could not connect to host
 gistfy.com: could not connect to host
 github.party: could not connect to host
 givemyanswer.com: did not receive HSTS header
@@ -1336,17 +1338,17 @@ hn.search.yahoo.com: did not receive HST
 hoerbuecher-und-hoerspiele.de: could not connect to host
 hogar123.es: could not connect to host
 hohm.in: did not receive HSTS header
 holifestival-freyung.de: could not connect to host
 holymoly.lu: did not receive HSTS header
 homa.website: could not connect to host
 honeytracks.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]
 hongzhaxiaofendui.com: could not connect to host
-honoo.com: did not receive HSTS header
+honoo.com: could not connect to host
 hookandloom.com: did not receive HSTS header
 horosho.in: could not connect to host
 horseboners.xxx: did not receive HSTS header
 hortifarm.ro: could not connect to host
 hosted-service.com: did not receive HSTS header
 hostedtalkgadget.google.com: did not receive HSTS header (error ignored - included regardless)
 hostgarou.com: did not receive HSTS header
 hostinaus.com.au: could not connect to host
@@ -1366,18 +1368,16 @@ huarongdao.com: did not receive HSTS hea
 hugosleep.com.au: did not receive HSTS header
 huiser.nl: could not connect to host
 humblefinances.com: could not connect to host
 humpteedumptee.in: did not receive HSTS header
 hurricanelabs.com: did not receive HSTS header
 hydra.ws: could not connect to host
 i-jp.net: could not connect to host
 i-partners.sk: did not receive HSTS header
-i1314.gdn: did not receive HSTS header
-i95.me: did not receive HSTS header
 iamokay.nl: did not receive HSTS header
 iamveto.com: could not connect to host
 iapws.com: did not receive HSTS header
 iban.is: could not connect to host
 icewoman.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]
 ichnichtskaufmann.de: could not connect to host
 icreative.nl: did not receive HSTS header
 ictual.com: max-age too low: 0
@@ -1389,31 +1389,30 @@ ideal-envelopes.co.uk: did not receive H
 ideasmeetingpoint.com: could not connect to host
 ideation-inc.co.jp: did not receive HSTS header
 identitylabs.uk: did not receive HSTS header
 idgsupply.com: could not connect to host
 ie.search.yahoo.com: did not receive HSTS header
 ies-italia.it: did not receive HSTS header
 ies.id.lv: could not connect to host
 ifleurs.com: could not connect to host
-ifoss.me: could not connect to host
-igk.de: 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
 ihuanmeng.com: 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
 imakepoems.net: could not connect to host
+imanolbarba.net: could not connect to host
 ime.moe: could not connect to host
 imguoguo.com: did not receive HSTS header
 imim.pw: did not receive HSTS header
 imjiangtao.com: did not receive HSTS header
 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
@@ -1453,16 +1452,17 @@ instacart.com: did not receive HSTS head
 instantdev.io: could not connect to host
 intarweb.ca: could not connect to host
 intel.li: could not connect to host
 intercom.io: did not receive HSTS header
 interference.io: [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]
 interlun.com: could not connect to host
 internetcensus.org: could not connect to host
 interserved.com: did not receive HSTS header
+intervisteperstrada.com: did not receive HSTS header
 intex.es: max-age too low: 0
 intim-uslugi-kazan.net: could not connect to host
 intimtoy.com.ua: could not connect to host
 inverselink-user-content.com: could not connect to host
 inverselink.com: could not connect to host
 invitescene.com: could not connect to host
 inwesttitle.com: max-age too low: 0
 ionx.co.uk: did not receive HSTS header
@@ -1494,16 +1494,18 @@ it-go.net: did not receive HSTS header
 itechgeek.com: max-age too low: 0
 itfh.eu: could not connect to host
 itos.asia: did not receive HSTS header
 itos.pl: did not receive HSTS header
 its4living.com: could not connect to host
 itsamurai.ru: max-age too low: 2592000
 itsecurityassurance.pw: did not receive HSTS header
 itshost.ru: could not connect to host
+itskayla.com: did not receive HSTS header
+itsryan.com: did not receive HSTS header
 ivi-fertility.com: max-age too low: 0
 ivi.es: max-age too low: 0
 ivk.website: could not connect to host
 iww.mx: could not connect to host
 izdiwho.com: could not connect to host
 izzzorgconcerten.nl: could not connect to host
 ja-publications.com: did not receive HSTS header
 jaba.hosting: did not receive HSTS header
@@ -1588,37 +1590,36 @@ josahrens.me: 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
 jrvar.com: did not receive HSTS header
 jsanders.us: did not receive HSTS header
 jualssh.com: could not connect to host
-juchit.at: did not receive HSTS header
 juliamweber.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]
-julian-kipka.de: could not connect to host
+julian-kipka.de: did not receive HSTS header
 jumbox.xyz: could not connect to host
 junaos.xyz: did not receive HSTS header
 junge-selbsthilfe.info: could not connect to host
 junqtion.com: could not connect to host
 jupp0r.de: did not receive HSTS header
 justlikethat.hosting: did not receive HSTS header
 justnaw.co.uk: could not connect to host
 justudin.com: did not receive HSTS header
 juwairen.cn: could not connect to host
 jvoice.net: could not connect to host
 jwilsson.me: could not connect to host
 jxm.in: could not connect to host
 k-dev.de: could not connect to host
 ka-clan.com: could not connect to host
-kabus.org: could not connect to host
 kadioglumakina.com.tr: did not receive HSTS header
 kahopoon.net: could not connect to host
 kaisers.de: did not receive HSTS header
+kaizenreporting.com: did not receive HSTS header
 kalami.nl: did not receive HSTS header
 kamikano.com: could not connect to host
 kaplatz.is: could not connect to host
 kapucini.si: max-age too low: 0
 karaoketonight.com: could not connect to host
 katiaetdavid.fr: could not connect to host
 katproxy.online: could not connect to host
 katproxy.site: could not connect to host
@@ -1629,16 +1630,17 @@ kawaiiku.com: could not connect to host
 kawaiiku.de: could not connect to host
 kayon.cf: could not connect to host
 kdata.it: did not receive HSTS header
 kdm-online.de: did not receive HSTS header
 keeley.gq: could not connect to host
 keeley.ml: could not connect to host
 keeleysam.me: could not connect to host
 keepclean.me: could not connect to host
+kepkonyvtar.hu: could not connect to host
 kerangalam.com: did not receive HSTS header
 kerksanders.nl: did not receive HSTS header
 kermadec.net: could not connect to host
 kernl.us: did not receive HSTS header
 kevinapease.com: max-age too low: 0
 keymaster.lookout.com: did not receive HSTS header
 kg-rating.com: did not receive HSTS header
 kgxtech.com: max-age too low: 2592000
@@ -1650,16 +1652,17 @@ kinderwagen-test24.de: did not receive H
 kingmanhall.org: could not connect to host
 kinnon.enterprises: could not connect to host
 kinogb.net: did not receive HSTS header
 kionetworks.com: did not receive HSTS header
 kirkforcongress.com: could not connect to host
 kirkforsenate.com: did not receive HSTS header
 kirkpatrickdavis.com: could not connect to host
 kisa.io: could not connect to host
+kisalt.im: could not connect to host
 kissart.net: did not receive HSTS header
 kitakemon.com: could not connect to host
 kitchenpunx.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]
 kitk.at: could not connect to host
 kitsta.com: could not connect to host
 kiwiirc.com: max-age too low: 5256000
 kizil.net: could not connect to host
 kjaermaxi.me: did not receive HSTS header
@@ -1673,16 +1676,17 @@ kletterkater.com: did not receive HSTS h
 klicktojob.de: could not connect to host
 kmartin.io: did not receive HSTS header
 knccloud.com: did not receive HSTS header
 kodokushi.fr: could not connect to host
 kolaykaydet.com: did not receive HSTS header
 kollabria.com: max-age too low: 0
 komandakovalchuk.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]
 komikito.com: could not connect to host
+kommune42.org: did not receive HSTS header
 kompetenzwerft.de: did not receive HSTS header
 kontaxis.network: could not connect to host
 kontorhaus-schlachte.de: could not connect to host
 koop-bremen.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]
 koordinate.net: could not connect to host
 korni22.org: did not receive HSTS header
 korsanparti.org: could not connect to host
 kr.search.yahoo.com: did not receive HSTS header
@@ -1709,25 +1713,25 @@ kylinj.com: could not connect to host
 kz.search.yahoo.com: did not receive HSTS header
 labaia.info: could not connect to host
 labina.com.tr: did not receive HSTS header
 laboiteapc.fr: did not receive HSTS header
 labordata.io: could not connect to host
 labrador-retrievers.com.au: did not receive HSTS header
 labs.moscow: did not receive HSTS header
 lachlankidson.net: did not receive HSTS header
+lacicloud.net: could not connect to host
 lacliniquefinanciere.com: did not receive HSTS header
 laf.in.net: did not receive HSTS header
 lagalerievirtuelle.fr: did not receive HSTS header
 lagarderob.ru: max-age too low: 0
 lagoza.name: could not connect to host
 lambdafive.co.uk: could not connect to host
 lampl.info: did not receive HSTS header
 landscape.canonical.com: max-age too low: 2592000
-langatang.com: could not connect to host
 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
 laserfuchs.de: did not receive HSTS header
 lask.in: did not receive HSTS header
 latinred.com: did not receive HSTS header
 latus.xyz: could not connect to host
@@ -1821,40 +1825,39 @@ lookout.com: did not receive HSTS header
 lookzook.com: did not receive HSTS header
 loophost.com.br: did not receive HSTS header
 lostinsecurity.com: could not connect to host
 lothai.re: could not connect to host
 lotsencafe.de: did not receive HSTS header
 lovelifelovelive.com: could not connect to host
 lovelycorral.com: did not receive HSTS header
 loveto.at: could not connect to host
-lovizaim.ru: did not receive HSTS header
 lpak.nl: could not connect to host
 lrhsclubs.com: could not connect to host
 lrhstsa.com: could not connect to host
 ls-a.org: did not receive HSTS header
 lsky.cn: did not receive HSTS header
 lsp-sports.de: did not receive HSTS header
 lt.search.yahoo.com: did not receive HSTS header
-ltbytes.com: could not connect to host
 lu.search.yahoo.com: did not receive HSTS header
 luine.xyz: could not connect to host
 luis-checa.com: could not connect to host
 lukas.im: did not receive HSTS header
 lukeng.me: could not connect to host
 lukeng.net: could not connect to host
 lukonet.com: did not receive HSTS header
 lumi.do: did not receive HSTS header
 lunix.io: did not receive HSTS header
 luoe.ml: could not connect to host
 luoxiao.im: could not connect to host
 lusis.fr: did not receive HSTS header
 lusis.net: did not receive HSTS header
 lustrumxi.nl: could not connect to host
 luther.fi: did not receive HSTS header
+luukdebruincv.nl: could not connect to host
 luxus-russen.de: did not receive HSTS header
 lv.search.yahoo.com: did not receive HSTS header
 lzkill.com: did not receive HSTS header
 m-ali.xyz: did not receive HSTS header
 m.gparent.org: 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
@@ -1942,17 +1945,17 @@ 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]
 meinebo.it: could not connect to host
 meizufans.eu: [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]
 melted.pw: could not connect to host
 members.mayfirst.org: did not receive HSTS header
 mensmaximus.de: did not receive HSTS header
 menthix.net: could not connect to host
-mereckas.com: could not connect to host
+mereckas.com: did not receive HSTS header
 meritz.rocks: could not connect to host
 merson.me: could not connect to host
 meshok.ru: did not receive HSTS header
 mesmoque.com: did not receive HSTS header
 meta-db.com: could not connect to host
 metagrader.com: did not receive HSTS header
 metebalci.com: could not connect to host
 meteosherbrooke.com: could not connect to host
@@ -2082,17 +2085,16 @@ mykolab.com: did not receive HSTS header
 mykreuzfahrt.de: could not connect to host
 myni.io: could not connect to host
 mypagella.com: could not connect to host
 mypagella.eu: could not connect to host
 mypagella.it: could not connect to host
 myplaceonline.com: did not receive HSTS header
 mysecretrewards.com: did not receive HSTS header
 mystudy.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]
-mythslegendscollection.com: did not receive HSTS header
 myvirtualserver.com: max-age too low: 2592000
 myzone.com: did not receive HSTS header
 mziulu.me: could not connect to host
 n2x.in: could not connect to host
 n4l.pw: did not receive HSTS header
 nagelfam.com: could not connect to host
 naiharngym.com: did not receive HSTS header
 najedlo.sk: did not receive HSTS header
@@ -2106,17 +2108,17 @@ natalia.io: could not connect to host
 natalt.org: did not receive HSTS header
 naturesystems.cz: max-age too low: 0
 natuurbehangnederland.nl: could not connect to host
 nauck.org: did not receive HSTS header
 nav.jobs: could not connect to host
 naval.tf: could not connect to host
 navigate-it-services.de: max-age too low: 0
 navjobs.com: did not receive HSTS header
-nbb.io: did not receive HSTS header
+nbb.io: could not connect to host
 nbg-ha.de: could not connect to host
 ncc60205.info: could not connect to host
 nct.org.uk: max-age too low: 1
 nctx.co.uk: did not receive HSTS header
 neel.ch: could not connect to host
 neftaly.com: did not receive HSTS header
 neilgreen.net: could not connect to host
 neko-system.com: did not receive HSTS header
@@ -2124,17 +2126,16 @@ nemno.de: could not connect to host
 nemovement.org: did not receive HSTS header
 neonisi.com: could not connect to host
 nepustil.net: did not receive HSTS header
 neris.io: could not connect to host
 nerven.se: could not connect to host
 nestedquotes.ca: could not connect to host
 netbox.cc: could not connect to host
 netherwind.eu: did not receive HSTS header
-nethruster.com: could not connect to host
 netlilo.com: could not connect to host
 netsight.org: 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
 neuhaus-city.de: could not connect to host
 neuralgic.net: could not connect to host
@@ -2154,17 +2155,17 @@ ng-security.com: could not connect to ho
 ngine.ch: did not receive HSTS header
 nginxnudes.com: could not connect to host
 ni.search.yahoo.com: did not receive HSTS header
 nicestresser.fr: could not connect to host
 nicky.io: did not receive HSTS header
 nicolaelmer.ch: 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
+niconode.com: did not receive HSTS header
 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]
 nikomo.fi: could not connect to host
 ninhs.org: could not connect to host
 nippler.org: did not receive HSTS header
 nippombashi.net: did not receive HSTS header
 nipponcareers.com: did not receive HSTS header
 nmctest.net: could not connect to host
@@ -2209,31 +2210,32 @@ numericacu.com: did not receive HSTS hea
 nuos.org: could not connect to host
 nutleyeducationalfoundation.org: did not receive HSTS header
 nutleyef.org: did not receive HSTS header
 nutrienti.eu: did not receive HSTS header
 nutritionculture.com: could not connect to host
 nutsandboltsmedia.com: did not receive HSTS header
 nwgh.org: max-age too low: 86400
 nyantec.com: did not receive HSTS header
-nysepho.pw: did not receive HSTS header
-nystart.no: did not receive HSTS header
+nysepho.pw: could not connect to host
+nystart.no: could not connect to host
 nz.search.yahoo.com: max-age too low: 172800
 nzb.cat: max-age too low: 7776000
 o0o.one: did not receive HSTS header
 oasis.mobi: did not receive HSTS header
 obsydian.org: could not connect to host
 occentus.net: did not receive HSTS header
 ochaken.cf: could not connect to host
 odin.xxx: did not receive HSTS header
 oe8.bet: could not connect to host
 ofcourselanguages.com: could not connect to host
 offshore-firma.org: could not connect to host
 oishioffice.com: did not receive HSTS header
 okane.love: could not connect to host
+okok.rent: could not connect to host
 okutama.in.th: could not connect to host
 oliver-pietsch.de: did not receive HSTS header
 oliverdunk.com: did not receive HSTS header
 omgaanmetidealen.com: could not connect to host
 ominto.com: max-age too low: 0
 omniti.com: max-age too low: 1
 omquote.gq: could not connect to host
 oneb4nk.com: could not connect to host
@@ -2263,16 +2265,17 @@ oopsmycase.com: could not connect to hos
 oost.io: could not connect to host
 open-to-repair.fr: did not receive HSTS header
 opendesk.cc: did not receive HSTS header
 openmind-shop.de: did not receive HSTS header
 opennippon.ru: could not connect to host
 openprovider.nl: did not receive HSTS header
 openquery.com.au: did not receive HSTS header
 openshift.redhat.com: did not receive HSTS header
+opensourcehouse.net: could not connect to host
 opensrd.com: could not connect to host
 openxmpp.com: could not connect to host
 oprbox.com: could not connect to host
 opsbears.com: did not receive HSTS header
 optenhoefel.de: could not connect to host
 optometriepunt.nl: did not receive HSTS header
 optumrxhealthstore.com: did not receive HSTS header
 orbiosales.com: could not connect to host
@@ -2305,27 +2308,28 @@ owncloud.help: could not connect to host
 ownmovies.fr: could not connect to host
 oxynux.fr: could not connect to host
 p.linode.com: could not connect to host
 p8r.de: did not receive HSTS header
 pa.search.yahoo.com: did not receive HSTS header
 packlane.com: did not receive HSTS header
 pader-deko.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]
 paestbin.com: could not connect to host
+pagerate.io: could not connect to host
 pagetoimage.com: could not connect to host
 paisaone.com: did not receive HSTS header
 paku.me: could not connect to host
 pamsoft.pl: max-age too low: 0
 panaceallc.net: could not connect to host
 pantsu.cat: did not receive HSTS header
 papeda.net: did not receive HSTS header
 papercard.co.uk: did not receive HSTS header
 papierniak.net: could not connect to host
-paragonie.com: could not connect to host
 parentmail.co.uk: did not receive HSTS header
+parkingpoint.co.uk: could not connect to host
 particonpsplus.it: could not connect to host
 partijtjevoordevrijheid.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]
 partyvan.it: could not connect to host
 partyvan.moe: could not connect to host
 partyvan.nl: could not connect to host
 partyvan.se: could not connect to host
 passwordbox.com: did not receive HSTS header
 passwordrevelator.net: did not receive HSTS header
@@ -2346,16 +2350,17 @@ paulshir.com: could not connect to host
 paulyang.cn: did not receive HSTS header
 paxwinkel.nl: did not receive HSTS header
 pay.gigahost.dk: did not receive HSTS header
 payments.google.com: did not receive HSTS header (error ignored - included regardless)
 payroll.ch: did not receive HSTS header
 pbapp.net: did not receive HSTS header
 pbprint.ru: max-age too low: 0
 pc-nf.de: could not connect to host
+pcfun.net: did not receive HSTS header
 peissen.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]
 pekkapikkarainen.fi: could not connect to host
 pekkarik.ru: could not connect to host
 pentagram.me: did not receive HSTS header
 pepperworldhotshop.de: did not receive HSTS header
 perfectionis.me: could not connect to host
 performous.org: could not connect to host
 perlwork.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]
@@ -2416,17 +2421,17 @@ politologos.org: could not connect to ho
 polypho.nyc: could not connect to host
 pompompoes.com: could not connect to host
 pontokay.com.br: did not receive HSTS header
 pontualcomp.com: max-age too low: 2592000
 poolsandstuff.com: did not receive HSTS header
 poris.web.id: did not receive HSTS header
 portalplatform.net: did not receive HSTS header
 poshpak.com: did not receive HSTS header
-posterspy.com: did not receive HSTS header
+postcodewise.co.uk: could not connect to host
 postscheduler.org: could not connect to host
 posylka.de: did not receive HSTS header
 potatofrom.space: could not connect to host
 poussinooz.fr: could not connect to host
 povitria.net: could not connect to host
 power99press.com: could not connect to host
 powerplannerapp.com: did not receive HSTS header
 powerxequality.com: could not connect to host
@@ -2468,34 +2473,37 @@ psncardplus.be: did not receive HSTS hea
 psncardplus.com: did not receive HSTS header
 psncardplus.dk: did not receive HSTS header
 psncardplus.nl: did not receive HSTS header
 psncardplus.se: did not receive HSTS header
 psw.academy: did not receive HSTS header
 psw.consulting: did not receive HSTS header
 ptm.ro: max-age too low: 0
 ptn.moscow: could not connect to host
+ptonet.com: could not connect to host
 pubkey.is: 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
 purewebmasters.com: could not connect to host
 purplemoon.mobi: did not receive HSTS header
 purplestar.mobi: did not receive HSTS header
 pushapp.org: did not receive HSTS header
 pwnies.dk: could not connect to host
 py.search.yahoo.com: did not receive HSTS header
 pypi-mirrors.org: could not connect to host
 pypi-status.org: could not connect to host
 pyplo.org: did not receive HSTS header
 pypt.lt: did not receive HSTS header
 q2.si: could not connect to host
+qandavision.com: could not connect to host
 qingxuan.info: max-age too low: 864000
 qinxi1992.com: did not receive HSTS header
 qiwi.be: did not receive HSTS header
+qorm.co.uk: could not connect to host
 qrara.net: did not receive HSTS header
 qrlending.com: did not receive HSTS header
 qtxh.net: could not connect to host
 quail.solutions: could not connect to host
 quantacloud.ch: could not connect to host
 quantumcourse.org: did not receive HSTS header
 queercoders.com: did not receive HSTS header
 questsandrewards.com: could not connect to host
@@ -2513,17 +2521,17 @@ ramonj.nl: could not connect to host
 rapidresearch.me: could not connect to host
 rapidthunder.io: could not connect to host
 rasing.me: could not connect to host
 ratajczak.fr: could not connect to host
 raulfraile.net: could not connect to host
 rawet.se: did not receive HSTS header
 rawstorieslondon.com: could not connect to host
 raydobe.me: could not connect to host
-rc4.io: did not receive HSTS header
+rc4.io: could not connect to host
 rcafox.com: could not connect to host
 rcpcbd.com: did not receive HSTS header
 rdns.im: did not receive HSTS header
 readr.pw: could not connect to host
 realmic.net: could not connect to host
 realmofespionage.com: could not connect to host
 reardenporn.com: could not connect to host
 recommended.reviews: could not connect to host
@@ -2553,26 +2561,26 @@ reprolife.co.uk: max-age too low: 0
 res-rheingau.de: did not receive HSTS header
 res42.com: did not receive HSTS header
 reserve-online.net: did not receive HSTS header
 respice.xyz: could not connect to host
 restchart.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: could not connect to host
+revtut.net: did not receive HSTS header
 rewardstock.com: max-age too low: 0
 rewrite3.com: could not connect to host
 rgavmf.ru: did not receive HSTS header
 rhapsodhy.hu: could not connect to host
 rhdigital.pro: could not connect to host
 riaucybersolution.net: did not receive HSTS header
 richiemail.net: did not receive HSTS header
 richmondsunlight.com: did not receive HSTS header
-richmtdriver.com: did not receive HSTS header
+richmtdriver.com: could not connect to host
 rid-wan.com: could not connect to host
 rideworks.com: did not receive HSTS header
 righttoknow.ie: did not receive HSTS header
 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
 ringingliberty.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]
@@ -2625,17 +2633,17 @@ ruqu.nl: could not connect to host
 rusadmin.biz: did not receive HSTS header
 rusl.me: could not connect to host
 russmarshall.com: could not connect to host
 ruxit.com: did not receive HSTS header
 rw.search.yahoo.com: did not receive HSTS header
 rxbusiness.com: could not connect to host
 rxprep.com: did not receive HSTS header
 rxv.cc: could not connect to host
-ryankearney.com: could not connect to host
+ryansmithphotography.com: did not receive HSTS header
 ryanteck.uk: did not receive HSTS header
 s007.co: could not connect to host
 safematix.com: could not connect to host
 sageth.com: max-age too low: 0
 sah3.net: could not connect to host
 saikarra.com: could not connect to host
 sakaki.anime.my: max-age too low: 5184000
 sakaserver.com: did not receive HSTS header
@@ -2718,16 +2726,17 @@ semenkovich.com: did not receive HSTS he
 semps-servers.de: could not connect to host
 semps.de: did not receive HSTS header
 senedirect.com: did not receive HSTS header
 sensibus.com: did not receive HSTS header
 seo.consulting: did not receive HSTS header
 seomobo.com: could not connect to host
 seowarp.net: did not receive HSTS header
 seq.tf: did not receive HSTS header
+serfdom.io: did not receive HSTS header
 serized.pw: could not connect to host
 servecrypt.com: could not connect to host
 servecrypt.net: could not connect to host
 servecrypt.ru: could not connect to host
 servercode.ca: did not receive HSTS header
 serverdensity.io: did not receive HSTS header
 servergno.me: did not receive HSTS header
 setphaserstostun.org: could not connect to host
@@ -2740,17 +2749,17 @@ shakepeers.org: did not receive HSTS hea
 shakespearesolutions.com.au: did not receive HSTS header
 shanesage.com: could not connect to host
 shaobin.wang: could not connect to host
 shareimg.xyz: did not receive HSTS header
 sharescope.co.uk: max-age too low: 14400
 shareworx.net: could not connect to host
 shauncrowley.co.uk: could not connect to host
 shaunwheelhou.se: could not connect to host
-shawnh.net: did not receive HSTS header
+shawnh.net: could not connect to host
 shellsec.pw: did not receive HSTS header
 shibe.club: could not connect to host
 shiftins.com: did not receive HSTS header
 shiinko.com: could not connect to host
 shinju.moe: could not connect to host
 shiona.xyz: did not receive HSTS header
 shocksrv.com: did not receive HSTS header
 shooshosha.com: did not receive HSTS header
@@ -2776,18 +2785,17 @@ simon.butcher.name: max-age too low: 262
 simplefraud.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]
 simplelearner.com: could not connect to host
 simplepractice.com: did not receive HSTS header
 simply-premium.com: did not receive HSTS header
 sincron.org: could not connect to host
 sinful.pw: could not connect to host
 siriad.com: did not receive HSTS header
 sirius-lee.net: could not connect to host
-sistem-maklumat.com: did not receive HSTS header
-sistemy48.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]
+sistemy48.ru: did not receive HSTS header
 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
 skhosting.eu: did not receive HSTS header
 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
@@ -2798,16 +2806,17 @@ slashem.me: did not receive HSTS header
 slattery.co: could not connect to host
 slicketl.com: did not receive HSTS header
 slightfuture.click: could not connect to host
 slix.io: could not connect to host
 slope.haus: could not connect to host
 slovakiana.sk: did not receive HSTS header
 sluitkampzeist.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]
 slycurity.de: did not receive HSTS header
+smart-mirror.de: did not receive HSTS header
 smart-ov.nl: could not connect to host
 smartcoin.com.br: could not connect to host
 smartofficesandsmarthomes.com: did not receive HSTS header
 smatch.com: did not receive HSTS header
 smet.us: could not connect to host
 smirkingwhorefromhighgarden.pro: could not connect to host
 smkn1lengkong.sch.id: did not receive HSTS header
 smksi2.com: max-age too low: 0
@@ -2826,29 +2835,29 @@ sobabox.ru: could not connect to host
 sobie.ch: could not connect to host
 sobotkama.eu: did not receive HSTS header
 soccergif.com: could not connect to host
 soci.ml: did not receive HSTS header
 socialbillboard.com: could not connect to host
 socialdevelop.biz: did not receive HSTS header
 socialhams.net: did not receive HSTS header
 socialhead.io: could not connect to host
+socialnous.co: could not connect to host
 socialspirit.com.br: did not receive HSTS header
 sockeye.cc: could not connect to host
 sockeye.io: did not receive HSTS header
 socomponents.co.uk: did not receive HSTS header
 solidfuelappliancespares.co.uk: did not receive HSTS header
 solinter.com.br: 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: did not receive HSTS header
 songzhuolun.com: did not receive HSTS header
 sonic.sk: max-age too low: 0
-sotiran.com: did not receive HSTS header
 sotor.de: did not receive HSTS header
 soulboy.io: 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
@@ -2864,29 +2873,27 @@ spartantheatre.org: max-age too low: 172
 spauted.com: could not connect to host
 spdysync.com: could not connect to host
 speed-mailer.com: could not connect to host
 speedcounter.net: did not receive HSTS header
 speedmann.de: did not receive HSTS header
 speedtest-russia.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]
 speidel.com.tr: did not receive HSTS header
 spencerbaer.com: did not receive HSTS header
-sperrstun.de: did not receive HSTS header
 spideroak.com: did not receive HSTS header
 spiegels.nl: did not receive HSTS header
 spitefultowel.com: could not connect to host
 spongepowered.org: did not receive HSTS header
 sportwette.eu: did not receive HSTS header
 spot-events.com: could not connect to host
 spotlightsrule.ddns.net: could not connect to host
 spreadsheets.google.com: did not receive HSTS header (error ignored - included regardless)
 spreed.me: did not receive HSTS header
 sproutconnections.com: did not receive HSTS header
 sprybear.com: did not receive HSTS header
-spyprofit.ru: could not connect to host
 square.gs: could not connect to host
 squatldf.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]
 sqzryang.com: max-age too low: 604800
 srna.sk: could not connect to host
 ss.wtf: did not receive HSTS header
 ssersay.com: did not receive HSTS header
 ssl.panoramio.com: did not receive HSTS header
 ssl.rip: could not connect to host
@@ -2947,17 +2954,19 @@ sumoscout.de: did not receive HSTS heade
 suncountrymarine.com: did not receive HSTS header
 sunshinepress.org: could not connect to host
 superbabysitting.ch: could not connect to host
 supereight.net: did not receive HSTS header
 superiorfloridavacation.com: did not receive HSTS header
 supersalescontest.nl: did not receive HSTS header
 superwally.org: could not connect to host
 suprlink.net: could not connect to host
+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
 suzukikenichi.com: did not receive HSTS header
 sv.search.yahoo.com: 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
@@ -2993,17 +3002,18 @@ tarhauskielto.fi: did not receive HSTS h
 tartaros.fi: could not connect to host
 taskstats.com: could not connect to host
 taskulu.ir: could not connect to host
 tasmansecurity.com: could not connect to host
 tastyyy.co: could not connect to host
 tauchkater.de: could not connect to host
 tavopica.lt: did not receive HSTS header
 taxbench.com: could not connect to host
-tazemama.biz: could not connect to host
+taxsnaps.co.nz: could not connect to host
+tazemama.biz: did not receive HSTS header
 tazz.in: could not connect to host
 tcao.info: could not connect to host
 tcl.ath.cx: did not receive HSTS header
 tcomms.org: max-age too low: 0
 tcp.expert: max-age too low: 2592000
 teachforcanada.ca: did not receive HSTS header
 teamblueridge.org: could not connect to host
 teamsocial.co: did not receive HSTS header
@@ -3017,16 +3027,17 @@ techvalue.gr: did not receive HSTS heade
 tegelsensanitaironline.nl: did not receive HSTS header
 tekshrek.com: max-age too low: 0
 temehu.com: did not receive HSTS header
 tempcraft.net: could not connect to host
 tendertool.nl: could not connect to host
 tenni.xyz: could not connect to host
 tensionup.com: could not connect to host
 teodio.cl: did not receive HSTS header
+terracloud.de: did not receive HSTS header
 terrax.berlin: could not connect to host
 terrax.info: could not connect to host
 testandroid.xyz: could not connect to host
 testbawks.com: did not receive HSTS header
 testnode.xyz: could not connect to host
 teunstuinposters.nl: did not receive HSTS header
 textoplano.xyz: could not connect to host
 textracer.dk: could not connect to host
@@ -3057,32 +3068,30 @@ themillerslive.com: could not connect to
 theodorejones.info: could not connect to host
 thepartywarehouse.co.uk: did not receive HSTS header
 thepiratebay.al: could not connect to host
 therapyportal.com: did not receive HSTS header
 therewill.be: could not connect to host
 thestack.xyz: could not connect to host
 thestagchorleywood.co.uk: did not receive HSTS header
 thetomharling.com: max-age too low: 86400
-thetradinghall.com: could not connect to host
 theurbanyoga.com: did not receive HSTS header
 thevintagenews.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]
 thewhitneypaige.com: could not connect to host
 thezonders.com: did not receive HSTS header
 thierfreund.de: could not connect to host
 thijsalders.nl: did not receive HSTS header
 thinkcoding.de: could not connect to host
 thinkcoding.org: could not connect to host
 thinlyveiledcontempt.com: could not connect to host
 thirdpartytrade.com: did not receive HSTS header
 thirty5.net: did not receive HSTS header
 thomasschweizer.net: could not connect to host
 thorncreek.net: did not receive HSTS header
 thumbtack.com: did not receive HSTS header
-ticfleet.com: could not connect to host
 tickopa.co.uk: could not connect to host
 tickreport.com: did not receive HSTS header
 tictactux.de: could not connect to host
 tiensnet.com: did not receive HSTS header
 tikutiku.pl: max-age too low: 0
 timbeilby.com: could not connect to host
 timcamara.com: did not receive HSTS header
 time-river.xyz: could not connect to host
@@ -3101,23 +3110,25 @@ tlo.network: could not connect to host
 tls.li: could not connect to host
 tm-solutions.eu: [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]
 tmprod.com: did not receive HSTS header
 tncnanet.com.br: could not connect to host
 tnrsca.jp: did not receive HSTS header
 tobiasmathes.com: could not connect to host
 tobiasmathes.name: could not connect to host
 tobiasofficial.at: could not connect to host
-todo.is: did not receive HSTS header
+todo.is: could not connect to host
 todobazar.es: could not connect to host
 tokyopopline.com: did not receive HSTS header
 tollmanz.com: did not receive HSTS header
 tomharling.co.uk: max-age too low: 86400
 tomharling.uk: max-age too low: 86400
 tommsy.com: did not receive HSTS header
+tommyads.com: could not connect to host
+tomudding.nl: 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
 toomanypillows.com: could not connect to host
 topbargains.com.au: did not receive HSTS header
 topmarine.se: could not connect to host
 topnewstoday.org: could not connect to host
 topodin.com: did not receive HSTS header
 topshelfguild.com: could not connect to host
@@ -3185,42 +3196,38 @@ ubicloud.de: could not connect to host
 ublox.com: did not receive HSTS header
 ubuntuhot.com: did not receive HSTS header
 uega.net: did not receive HSTS header
 ufotable.uk: max-age too low: 0
 ui8.net: did not receive HSTS header
 ukas.com: did not receive HSTS header
 ukrgadget.com: could not connect to host
 ulmo.dk: could not connect to host
-ulrik.moe: could not connect to host
 ultros.io: did not receive HSTS header
 umidev.com: could not connect to host
 umie.cc: did not receive HSTS header
 unapp.me: could not connect to host
 unbanthe.net: could not connect to host
 unblocked.host: could not connect to host
 unccdesign.club: could not connect to host
 undernet.uy: did not receive HSTS header
-underskatten.tk: could not connect to host
 unfiltered.nyc: did not receive HSTS header
 uni-games.com: could not connect to host
 unicooo.com: could not connect to host
 unison.com: could not connect to host
-unitedcyberdevelopment.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]
 university4industry.com: did not receive HSTS header
 universogay.com: did not receive HSTS header
-univz.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]
+univz.com: could not connect to host
 unknownphenomena.net: could not connect to host
 unplugg3r.dk: could not connect to host
 unravel.ie: did not receive HSTS header
 unterschicht.tv: did not receive HSTS header
 unwiredbrain.com: could not connect to host
 uonstaffhub.com: could not connect to host
 uow.ninja: could not connect to host
-upaknship.com: did not receive HSTS header
 upani.net: could not connect to host
 upldr.pw: could not connect to host
 upr.com.ua: could not connect to host
 uprotect.it: could not connect to host
 upstats.eu: could not connect to host
 urphp.com: could not connect to host
 us-immigration.com: did not receive HSTS header
 usaa.com: did not receive HSTS header
@@ -3250,16 +3257,17 @@ vaur.fr: could not connect to host
 vbh2o.com: did not receive HSTS header
 vbulletin-russia.com: could not connect to host
 vbulletinrussia.com: could not connect to host
 vcr.re: could not connect to host
 vdcomp.cz: could not connect to host
 vechkasov.ru: did not receive HSTS header
 vemokin.net: did not receive HSTS header
 verifikatorindonesia.com: could not connect to host
+veriny.tf: did not receive HSTS header
 vermontcareergateway.org: could not connect to host
 versia.ru: did not receive HSTS header
 veryhax.de: could not connect to host
 vfree.org: could not connect to host
 vgatest.nl: could not connect to host
 vglimg.com: could not connect to host
 vhost.co.id: could not connect to host
 vidbuchanan.co.uk: could not connect to host
@@ -3315,16 +3323,17 @@ warhistoryonline.com: [Exception... "Com
 warmlyyours.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]
 warped.com: did not receive HSTS header
 wassim.is: could not connect to host
 watchium.com: did not receive HSTS header
 watchweasel.com: did not receive HSTS header
 watsonhall.uk: could not connect to host
 wave.is: could not connect to host
 wavefrontsystemstech.com: could not connect to host
+wbuntu.com: did not receive HSTS header
 wdbgroup.co.uk: could not connect to host
 wealthfactory.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]
 wear2work.nl: did not receive HSTS header
 weaverhairextensions.nl: did not receive HSTS header
 web4all.fr: max-age too low: 0
 web4pro.fr: could not connect to host
 webassadors.com: could not connect to host
 webdesign-kronberg.de: did not receive HSTS header
@@ -3353,16 +3362,17 @@ wesleyharris.ca: did not receive HSTS he
 westendzone.com: max-age too low: 0
 westerhoud.nl: did not receive HSTS header
 wettbuero.de: did not receive HSTS header
 wetten.eu: did not receive HSTS header
 wettertoertchen.com: did not receive HSTS header
 wetttipps.com: did not receive HSTS header
 wetttipps.de: did not receive HSTS header
 wevahoo.com: could not connect to host
+whatnext.limited: could not connect to host
 whats.io: could not connect to host
 whatsstalk.me: could not connect to host
 when-release.com: did not receive HSTS header
 whiterabbitcakery.com: could not connect to host
 whitestagforge.com: could not connect to host
 whoclicks.net: could not connect to host
 whoisapi.online: could not connect to host
 wholebites.com: did not receive HSTS header
@@ -3464,17 +3474,16 @@ xn--neb-tma3u8u.xyz: could not connect t
 xng.io: did not receive HSTS header
 xombra.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]
 xplore-dna.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]
 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
-xtremegaming.it: could not connect to host
 xuri.me: max-age too low: 2592000
 xxbase.com: could not connect to host
 y-o-w.com: did not receive HSTS header
 y-s.pw: did not receive HSTS header
 yal.sh: did not receive HSTS header
 yalook.com: did not receive HSTS header
 yamaken.jp: did not receive HSTS header
 yamamo10.com: could not connect to host
@@ -3531,16 +3540,17 @@ zh.search.yahoo.com: did not receive HST
 zhaochen.xyz: could not connect to host
 zhaojin97.cn: max-age too low: 604800
 zhendingresources.com: max-age too low: 0
 zigcore.com.br: could not connect to host
 zirtue.io: could not connect to host
 ziyuanabc.xyz: could not connect to host
 zking.ga: could not connect to host
 zocken.com: could not connect to host
+zombiesecured.com: could not connect to host
 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]
 zoo24.de: did not receive HSTS header
 zoomingin.net: max-age too low: 2592000
 zorium.org: did not receive HSTS header
 zoznamrealit.sk: did not receive HSTS header
 zqhong.com: could not connect to host
 zrn.in: could not connect to host
 ztan.tk: 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(1487769544843000);
+const PRTime gPreloadListExpirationTime = INT64_C(1487855259840000);
 
 static const char kSTSHostTable[] = {
   /* "007sascha.de", true */ '0', '0', '7', 's', 'a', 's', 'c', 'h', 'a', '.', 'd', 'e', '\0',
   /* "00f.net", true */ '0', '0', 'f', '.', 'n', 'e', 't', '\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',
   /* "050media.nl", true */ '0', '5', '0', 'm', 'e', 'd', 'i', 'a', '.', 'n', 'l', '\0',
   /* "0513c.com", true */ '0', '5', '1', '3', 'c', '.', 'c', 'o', 'm', '\0',
@@ -24,17 +24,19 @@ static const char kSTSHostTable[] = {
   /* "0x.cx", true */ '0', 'x', '.', 'c', 'x', '\0',
   /* "0x0a.net", true */ '0', 'x', '0', 'a', '.', 'n', 'e', 't', '\0',
   /* "0x17.de", true */ '0', 'x', '1', '7', '.', 'd', 'e', '\0',
   /* "0x52.net", true */ '0', 'x', '5', '2', '.', 'n', 'e', 't', '\0',
   /* "0x52.org", true */ '0', 'x', '5', '2', '.', 'o', 'r', 'g', '\0',
   /* "0x539.pw", true */ '0', 'x', '5', '3', '9', '.', 'p', 'w', '\0',
   /* "0x90.fi", true */ '0', 'x', '9', '0', '.', 'f', 'i', '\0',
   /* "0x90.io", true */ '0', 'x', '9', '0', '.', 'i', 'o', '\0',
+  /* "0xAA55.me", true */ '0', 'x', 'A', 'A', '5', '5', '.', 'm', 'e', '\0',
   /* "0xa.in", true */ '0', 'x', 'a', '.', 'i', 'n', '\0',
+  /* "0xaa55.me", true */ '0', 'x', 'a', 'a', '5', '5', '.', 'm', 'e', '\0',
   /* "0xacab.org", true */ '0', 'x', 'a', 'c', 'a', 'b', '.', 'o', 'r', 'g', '\0',
   /* "0xdefaced.de", true */ '0', 'x', 'd', 'e', 'f', 'a', 'c', 'e', 'd', '.', 'd', 'e', '\0',
   /* "0xee.eu", true */ '0', 'x', 'e', 'e', '.', 'e', 'u', '\0',
   /* "0xf00.ch", true */ '0', 'x', 'f', '0', '0', '.', 'c', 'h', '\0',
   /* "0xfc.de", true */ '0', 'x', 'f', 'c', '.', 'd', 'e', '\0',
   /* "0xn.de", true */ '0', 'x', 'n', '.', 'd', 'e', '\0',
   /* "1000minds.com", true */ '1', '0', '0', '0', 'm', 'i', 'n', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "1001.best", true */ '1', '0', '0', '1', '.', 'b', 'e', 's', 't', '\0',
@@ -145,16 +147,17 @@ static const char kSTSHostTable[] = {
   /* "4cclothing.com", true */ '4', 'c', 'c', 'l', 'o', 't', 'h', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "4d2.xyz", true */ '4', 'd', '2', '.', 'x', 'y', 'z', '\0',
   /* "4eyes.ch", true */ '4', 'e', 'y', 'e', 's', '.', 'c', 'h', '\0',
   /* "4g-server.eu", false */ '4', 'g', '-', 's', 'e', 'r', 'v', 'e', 'r', '.', 'e', 'u', '\0',
   /* "4loc.us", true */ '4', 'l', 'o', 'c', '.', 'u', 's', '\0',
   /* "4ourty2.org", true */ '4', 'o', 'u', 'r', 't', 'y', '2', '.', 'o', 'r', 'g', '\0',
   /* "4project.co.il", true */ '4', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'c', 'o', '.', 'i', 'l', '\0',
   /* "4th-ave-studio.com", true */ '4', 't', 'h', '-', 'a', 'v', 'e', '-', 's', 't', 'u', 'd', 'i', 'o', '.', 'c', 'o', 'm', '\0',
+  /* "4vf.de", true */ '4', 'v', 'f', '.', 'd', 'e', '\0',
   /* "4w-performers.link", false */ '4', 'w', '-', 'p', 'e', 'r', 'f', 'o', 'r', 'm', 'e', 'r', 's', '.', 'l', 'i', 'n', 'k', '\0',
   /* "4winds.pt", true */ '4', 'w', 'i', 'n', 'd', 's', '.', 'p', 't', '\0',
   /* "4x.fi", true */ '4', 'x', '.', 'f', 'i', '\0',
   /* "500p.xyz", true */ '5', '0', '0', 'p', '.', 'x', 'y', 'z', '\0',
   /* "50plusnet.nl", true */ '5', '0', 'p', 'l', 'u', 's', 'n', 'e', 't', '.', 'n', 'l', '\0',
   /* "540.co", false */ '5', '4', '0', '.', 'c', 'o', '\0',
   /* "54below.com", true */ '5', '4', 'b', 'e', 'l', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "54bf.com", true */ '5', '4', 'b', 'f', '.', 'c', 'o', 'm', '\0',
@@ -203,16 +206,17 @@ static const char kSTSHostTable[] = {
   /* "aaronsilber.me", true */ 'a', 'a', 'r', 'o', 'n', 's', 'i', 'l', 'b', 'e', 'r', '.', 'm', 'e', '\0',
   /* "aatf.us", true */ 'a', 'a', 't', 'f', '.', 'u', 's', '\0',
   /* "aati.info", true */ 'a', 'a', 't', 'i', '.', 'i', 'n', 'f', 'o', '\0',
   /* "abacustech.co.jp", true */ 'a', 'b', 'a', 'c', 'u', 's', 't', 'e', 'c', 'h', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "abareplace.com", true */ 'a', 'b', 'a', 'r', 'e', 'p', 'l', 'a', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "abc.li", true */ 'a', 'b', 'c', '.', 'l', 'i', '\0',
   /* "abcheck.se", false */ 'a', 'b', 'c', 'h', 'e', 'c', 'k', '.', 's', 'e', '\0',
   /* "abe-elektro.de", true */ 'a', 'b', 'e', '-', 'e', 'l', 'e', 'k', 't', 'r', 'o', '.', 'd', 'e', '\0',
+  /* "abeestrada.com", false */ 'a', 'b', 'e', 'e', 's', 't', 'r', 'a', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "aberdeenjudo.co.uk", true */ 'a', 'b', 'e', 'r', 'd', 'e', 'e', 'n', 'j', 'u', 'd', 'o', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "abeus.com", true */ 'a', 'b', 'e', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "abiapp.net", true */ 'a', 'b', 'i', 'a', 'p', 'p', '.', 'n', 'e', 't', '\0',
   /* "abilitynet.org.uk", true */ 'a', 'b', 'i', 'l', 'i', 't', 'y', 'n', 'e', 't', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "abilymp06.net", true */ 'a', 'b', 'i', 'l', 'y', 'm', 'p', '0', '6', '.', 'n', 'e', 't', '\0',
   /* "abiturma.de", true */ 'a', 'b', 'i', 't', 'u', 'r', 'm', 'a', '.', 'd', 'e', '\0',
   /* "ablogagency.net", true */ 'a', 'b', 'l', 'o', 'g', 'a', 'g', 'e', 'n', 'c', 'y', '.', 'n', 'e', 't', '\0',
   /* "abloop.com", true */ 'a', 'b', 'l', 'o', 'o', 'p', '.', 'c', 'o', 'm', '\0',
@@ -452,16 +456,17 @@ static const char kSTSHostTable[] = {
   /* "albion2.org", true */ 'a', 'l', 'b', 'i', 'o', 'n', '2', '.', 'o', 'r', 'g', '\0',
   /* "albuic.tk", true */ 'a', 'l', 'b', 'u', 'i', 'c', '.', 't', 'k', '\0',
   /* "alcorao.org", true */ 'a', 'l', 'c', 'o', 'r', 'a', 'o', '.', 'o', 'r', 'g', '\0',
   /* "aldes.co.za", true */ 'a', 'l', 'd', 'e', 's', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "alecpap.com", true */ 'a', 'l', 'e', 'c', 'p', 'a', 'p', '.', 'c', 'o', 'm', '\0',
   /* "alecpapierniak.com", true */ 'a', 'l', 'e', 'c', 'p', 'a', 'p', 'i', 'e', 'r', 'n', 'i', 'a', 'k', '.', 'c', 'o', 'm', '\0',
   /* "alecrust.com", true */ 'a', 'l', 'e', 'c', 'r', 'u', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "aleksib.fi", true */ 'a', 'l', 'e', 'k', 's', 'i', 'b', '.', 'f', 'i', '\0',
+  /* "alenan.org", true */ 'a', 'l', 'e', 'n', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "alertwire.com", true */ 'a', 'l', 'e', 'r', 't', 'w', 'i', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "alex-ross.co.uk", true */ 'a', 'l', 'e', 'x', '-', 'r', 'o', 's', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "alexanderschimpf.de", true */ 'a', 'l', 'e', 'x', 'a', 'n', 'd', 'e', 'r', 's', 'c', 'h', 'i', 'm', 'p', 'f', '.', 'd', 'e', '\0',
   /* "alexandra-schulze.de", true */ 'a', 'l', 'e', 'x', 'a', 'n', 'd', 'r', 'a', '-', 's', 'c', 'h', 'u', 'l', 'z', 'e', '.', 'd', 'e', '\0',
   /* "alexandre.sh", true */ 'a', 'l', 'e', 'x', 'a', 'n', 'd', 'r', 'e', '.', 's', 'h', '\0',
   /* "alexbaker.org", true */ 'a', 'l', 'e', 'x', 'b', 'a', 'k', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "alexberts.ch", true */ 'a', 'l', 'e', 'x', 'b', 'e', 'r', 't', 's', '.', 'c', 'h', '\0',
   /* "alexei.su", true */ 'a', 'l', 'e', 'x', 'e', 'i', '.', 's', 'u', '\0',
@@ -668,16 +673,17 @@ static const char kSTSHostTable[] = {
   /* "ansogning-sg.dk", true */ 'a', 'n', 's', 'o', 'g', 'n', 'i', 'n', 'g', '-', 's', 'g', '.', 'd', 'k', '\0',
   /* "anstoncs.com.au", true */ 'a', 'n', 's', 't', 'o', 'n', 'c', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "antarcti.co", true */ 'a', 'n', 't', 'a', 'r', 'c', 't', 'i', '.', 'c', 'o', '\0',
   /* "anthenor.co.uk", true */ 'a', 'n', 't', 'h', 'e', 'n', 'o', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "anthonyavon.com", true */ 'a', 'n', 't', 'h', 'o', 'n', 'y', 'a', 'v', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "anthonygaidot.fr", true */ 'a', 'n', 't', 'h', 'o', 'n', 'y', 'g', 'a', 'i', 'd', 'o', 't', '.', 'f', 'r', '\0',
   /* "antipolygraph.org", true */ 'a', 'n', 't', 'i', 'p', 'o', 'l', 'y', 'g', 'r', 'a', 'p', 'h', '.', 'o', 'r', 'g', '\0',
   /* "antoine-roux.fr", true */ 'a', 'n', 't', 'o', 'i', 'n', 'e', '-', 'r', 'o', 'u', 'x', '.', 'f', 'r', '\0',
+  /* "antoinedeschenes.com", true */ 'a', 'n', 't', 'o', 'i', 'n', 'e', 'd', 'e', 's', 'c', 'h', 'e', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "antons.io", true */ 'a', 'n', 't', 'o', 'n', 's', '.', 'i', 'o', '\0',
   /* "anxietyspace.com", true */ 'a', 'n', 'x', 'i', 'e', 't', 'y', 's', 'p', 'a', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "anyprime.net", true */ 'a', 'n', 'y', 'p', 'r', 'i', 'm', 'e', '.', 'n', 'e', 't', '\0',
   /* "anystack.xyz", true */ 'a', 'n', 'y', 's', 't', 'a', 'c', 'k', '.', 'x', 'y', 'z', '\0',
   /* "anytonetech.com", true */ 'a', 'n', 'y', 't', 'o', 'n', 'e', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "anyways.at", true */ 'a', 'n', 'y', 'w', 'a', 'y', 's', '.', 'a', 't', '\0',
   /* "anzeiger.ag", true */ 'a', 'n', 'z', 'e', 'i', 'g', 'e', 'r', '.', 'a', 'g', '\0',
   /* "ao-dev.com", true */ 'a', 'o', '-', 'd', 'e', 'v', '.', 'c', 'o', 'm', '\0',
@@ -752,17 +758,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',
   /* "aranycsillag.net", false */ '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.com", true */ 'a', 'r', 'a', 'w', 'a', 'z', 'a', '.', 'c', 'o', 'm', '\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',
   /* "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',
-  /* "arboineuropa.nl", true */ 'a', 'r', 'b', 'o', 'i', 'n', 'e', 'u', 'r', 'o', 'p', 'a', '.', 'n', 'l', '\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',
   /* "archlinux.de", true */ 'a', 'r', 'c', 'h', 'l', 'i', 'n', 'u', 'x', '.', 'd', 'e', '\0',
   /* "arctic.gov", true */ 'a', 'r', 'c', 't', 'i', 'c', '.', 'g', 'o', 'v', '\0',
   /* "ardtrade.ru", true */ 'a', 'r', 'd', 't', 'r', 'a', 'd', 'e', '.', 'r', 'u', '\0',
   /* "areafiftylan.nl", true */ 'a', 'r', 'e', 'a', 'f', 'i', 'f', 't', 'y', 'l', 'a', 'n', '.', 'n', 'l', '\0',
   /* "areatrend.com", true */ 'a', 'r', 'e', 'a', 't', 'r', 'e', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "arendburgers.nl", true */ 'a', 'r', 'e', 'n', 'd', 'b', 'u', 'r', 'g', 'e', 'r', 's', '.', 'n', 'l', '\0',
@@ -770,16 +775,17 @@ static const char kSTSHostTable[] = {
   /* "argh.io", true */ 'a', 'r', 'g', 'h', '.', 'i', 'o', '\0',
   /* "arguggi.co.uk", true */ 'a', 'r', 'g', 'u', 'g', 'g', 'i', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "ariege-pyrenees.net", true */ 'a', 'r', 'i', 'e', 'g', 'e', '-', 'p', 'y', 'r', 'e', 'n', 'e', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "arima.co.ke", true */ 'a', 'r', 'i', 'm', 'a', '.', 'c', 'o', '.', 'k', 'e', '\0',
   /* "aristocrates.co", true */ 'a', 'r', 'i', 's', 't', 'o', 'c', 'r', 'a', 't', 'e', 's', '.', 'c', 'o', '\0',
   /* "aritec-la.com", true */ 'a', 'r', 'i', 't', 'e', 'c', '-', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "arivo.com.br", false */ 'a', 'r', 'i', 'v', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "arjandejong.eu", true */ 'a', 'r', 'j', 'a', 'n', 'd', 'e', 'j', 'o', 'n', 'g', '.', 'e', 'u', '\0',
+  /* "arksan.com.tr", true */ 'a', 'r', 'k', 's', 'a', 'n', '.', 'c', 'o', 'm', '.', 't', 'r', '\0',
   /* "arlen.io", true */ 'a', 'r', 'l', 'e', 'n', '.', 'i', 'o', '\0',
   /* "arlet.click", true */ 'a', 'r', 'l', 'e', 't', '.', 'c', 'l', 'i', 'c', 'k', '\0',
   /* "armadaquadrat.com", true */ 'a', 'r', 'm', 'a', 'd', 'a', 'q', 'u', 'a', 'd', 'r', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "armingrodon.de", true */ 'a', 'r', 'm', 'i', 'n', 'g', 'r', 'o', 'd', 'o', 'n', '.', 'd', 'e', '\0',
   /* "armor.com", true */ 'a', 'r', 'm', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "armored.ninja", true */ 'a', 'r', 'm', 'o', 'r', 'e', 'd', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "armstrongsengineering.com", true */ 'a', 'r', 'm', 's', 't', 'r', 'o', 'n', 'g', 's', 'e', 'n', 'g', 'i', 'n', 'e', 'e', 'r', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "army24.cz", true */ 'a', 'r', 'm', 'y', '2', '4', '.', 'c', 'z', '\0',
@@ -860,17 +866,16 @@ static const char kSTSHostTable[] = {
   /* "asrob.eu", true */ 'a', 's', 'r', 'o', 'b', '.', 'e', 'u', '\0',
   /* "assekuranzjobs.de", true */ 'a', 's', 's', 'e', 'k', 'u', 'r', 'a', 'n', 'z', 'j', 'o', 'b', 's', '.', 'd', 'e', '\0',
   /* "assemble-together.org", true */ 'a', 's', 's', 'e', 'm', 'b', 'l', 'e', '-', 't', 'o', 'g', 'e', 't', 'h', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "astengox.com", true */ 'a', 's', 't', 'e', 'n', 'g', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "astromelody.com", true */ 'a', 's', 't', 'r', 'o', 'm', 'e', 'l', 'o', 'd', 'y', '.', 'c', 'o', 'm', '\0',
   /* "asun.co", true */ 'a', 's', 'u', 'n', '.', 'c', 'o', '\0',
   /* "asurepay.cc", true */ 'a', 's', 'u', 'r', 'e', 'p', 'a', 'y', '.', 'c', 'c', '\0',
   /* "at.search.yahoo.com", false */ 'a', 't', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "atavio.de", true */ 'a', 't', 'a', 'v', 'i', 'o', '.', 'd', 'e', '\0',
   /* "atbeckett.com", true */ 'a', 't', 'b', 'e', 'c', 'k', 'e', 't', 't', '.', 'c', 'o', 'm', '\0',
   /* "atc.io", true */ 'a', 't', 'c', '.', 'i', 'o', '\0',
   /* "atchleyjazz.com", true */ 'a', 't', 'c', 'h', 'l', 'e', 'y', 'j', 'a', 'z', 'z', '.', 'c', 'o', 'm', '\0',
   /* "atchleyjazz.org", true */ 'a', 't', 'c', 'h', 'l', 'e', 'y', 'j', 'a', 'z', 'z', '.', 'o', 'r', 'g', '\0',
   /* "atchleylab.org", true */ 'a', 't', 'c', 'h', 'l', 'e', 'y', 'l', 'a', 'b', '.', 'o', 'r', 'g', '\0',
   /* "ateli.com", true */ 'a', 't', 'e', 'l', 'i', '.', 'c', 'o', 'm', '\0',
   /* "atelier-naruby.cz", true */ 'a', 't', 'e', 'l', 'i', 'e', 'r', '-', 'n', 'a', 'r', 'u', 'b', 'y', '.', 'c', 'z', '\0',
   /* "atelierdesflammesnoires.fr", true */ 'a', 't', 'e', 'l', 'i', 'e', 'r', 'd', 'e', 's', 'f', 'l', 'a', 'm', 'm', 'e', 's', 'n', 'o', 'i', 'r', 'e', 's', '.', 'f', 'r', '\0',
@@ -1097,16 +1102,17 @@ static const char kSTSHostTable[] = {
   /* "batschu.de", true */ 'b', 'a', 't', 's', 'c', 'h', 'u', '.', 'd', 'e', '\0',
   /* "batten.eu.org", true */ 'b', 'a', 't', 't', 'e', 'n', '.', 'e', 'u', '.', 'o', 'r', 'g', '\0',
   /* "baud.ninja", true */ 'b', 'a', 'u', 'd', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "bautied.de", true */ 'b', 'a', 'u', 't', 'i', 'e', 'd', '.', 'd', 'e', '\0',
   /* "bayden.com", true */ 'b', 'a', 'y', 'd', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "bayrisch-fuer-anfaenger.de", true */ 'b', 'a', 'y', 'r', 'i', 's', 'c', 'h', '-', 'f', 'u', 'e', 'r', '-', 'a', 'n', 'f', 'a', 'e', 'n', 'g', 'e', 'r', '.', 'd', 'e', '\0',
   /* "baysse.eu", true */ 'b', 'a', 'y', 's', 's', 'e', '.', 'e', 'u', '\0',
   /* "baywatch.io", true */ 'b', 'a', 'y', 'w', 'a', 't', 'c', 'h', '.', 'i', 'o', '\0',
+  /* "bazdell.com", true */ 'b', 'a', 'z', 'd', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "bazos.at", true */ 'b', 'a', 'z', 'o', 's', '.', 'a', 't', '\0',
   /* "bazos.cz", true */ 'b', 'a', 'z', 'o', 's', '.', 'c', 'z', '\0',
   /* "bazos.sk", true */ 'b', 'a', 'z', 'o', 's', '.', 's', 'k', '\0',
   /* "bb-shiokaze.jp", true */ 'b', 'b', '-', 's', 'h', 'i', 'o', 'k', 'a', 'z', 'e', '.', 'j', 'p', '\0',
   /* "bbb1991.me", true */ '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',
@@ -1465,17 +1471,16 @@ static const char kSTSHostTable[] = {
   /* "blog.torproject.org", false */ 'b', 'l', 'o', 'g', '.', 't', 'o', 'r', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "blogarts.net", true */ 'b', 'l', 'o', 'g', 'a', 'r', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "blogcuaviet.com", true */ 'b', 'l', 'o', 'g', 'c', 'u', 'a', 'v', 'i', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "blognone.com", true */ 'b', 'l', 'o', 'g', 'n', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "blogreen.org", true */ 'b', 'l', 'o', 'g', 'r', 'e', 'e', 'n', '.', 'o', 'r', 'g', '\0',
   /* "blowjs.com", true */ 'b', 'l', 'o', 'w', 'j', 's', '.', 'c', 'o', 'm', '\0',
   /* "blubberladen.de", true */ 'b', 'l', 'u', 'b', 'b', 'e', 'r', 'l', 'a', 'd', 'e', 'n', '.', 'd', 'e', '\0',
   /* "blue-labs.org", true */ 'b', 'l', 'u', 'e', '-', 'l', 'a', 'b', 's', '.', 'o', 'r', 'g', '\0',
-  /* "blue-leaf81.net", true */ 'b', 'l', 'u', 'e', '-', 'l', 'e', 'a', 'f', '8', '1', '.', 'n', 'e', 't', '\0',
   /* "blue42.net", true */ 'b', 'l', 'u', 'e', '4', '2', '.', 'n', 'e', 't', '\0',
   /* "bluebill.net", true */ 'b', 'l', 'u', 'e', 'b', 'i', 'l', 'l', '.', 'n', 'e', 't', '\0',
   /* "bluechilli.com", true */ 'b', 'l', 'u', 'e', 'c', 'h', 'i', 'l', 'l', 'i', '.', 'c', 'o', 'm', '\0',
   /* "blueflare.org", true */ 'b', 'l', 'u', 'e', 'f', 'l', 'a', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "bluefuzz.nl", true */ 'b', 'l', 'u', 'e', 'f', 'u', 'z', 'z', '.', 'n', 'l', '\0',
   /* "blueglobalmedia.com", true */ 'b', 'l', 'u', 'e', 'g', 'l', 'o', 'b', 'a', 'l', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "blueimp.net", true */ 'b', 'l', 'u', 'e', 'i', 'm', 'p', '.', 'n', 'e', 't', '\0',
   /* "bluemosh.com", true */ 'b', 'l', 'u', 'e', 'm', 'o', 's', 'h', '.', 'c', 'o', 'm', '\0',
@@ -1563,16 +1568,17 @@ static const char kSTSHostTable[] = {
   /* "bp-wahl.at", true */ 'b', 'p', '-', 'w', 'a', 'h', 'l', '.', 'a', 't', '\0',
   /* "bpadvisors.eu", true */ 'b', 'p', 'a', 'd', 'v', 'i', 's', 'o', 'r', 's', '.', 'e', 'u', '\0',
   /* "bpastudies.org", true */ 'b', 'p', 'a', 's', 't', 'u', 'd', 'i', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "bpol-forum.de", true */ 'b', 'p', 'o', 'l', '-', 'f', 'o', 'r', 'u', 'm', '.', 'd', 'e', '\0',
   /* "bqtoolbox.com", true */ 'b', 'q', 't', 'o', 'o', 'l', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "br.search.yahoo.com", false */ 'b', 'r', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "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',
+  /* "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',
   /* "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',
@@ -1667,17 +1673,16 @@ static const char kSTSHostTable[] = {
   /* "buettgens.net", true */ 'b', 'u', 'e', 't', 't', 'g', 'e', 'n', 's', '.', 'n', 'e', 't', '\0',
   /* "buffaloautomation.com", true */ 'b', 'u', 'f', 'f', 'a', 'l', 'o', 'a', 'u', 't', 'o', 'm', 'a', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "buffalodrinkinggame.beer", true */ 'b', 'u', 'f', 'f', 'a', 'l', 'o', 'd', 'r', 'i', 'n', 'k', 'i', 'n', 'g', 'g', 'a', 'm', 'e', '.', 'b', 'e', 'e', 'r', '\0',
   /* "buffhack.com", true */ 'b', 'u', 'f', 'f', 'h', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "bugcrowd.com", true */ 'b', 'u', 'g', 'c', 'r', 'o', 'w', 'd', '.', 'c', 'o', 'm', '\0',
   /* "bugginslab.co.uk", true */ 'b', 'u', 'g', 'g', 'i', 'n', 's', 'l', 'a', 'b', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "bugs.chromium.org", true */ 'b', 'u', 'g', 's', '.', 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "bugtrack.co.uk", true */ 'b', 'u', 'g', 't', 'r', 'a', 'c', 'k', '.', 'c', 'o', '.', 'u', 'k', '\0',
-  /* "bugtrack.io", true */ 'b', 'u', 'g', 't', 'r', 'a', 'c', 'k', '.', 'i', 'o', '\0',
   /* "bugzil.la", true */ 'b', 'u', 'g', 'z', 'i', 'l', '.', 'l', 'a', '\0',
   /* "bugzilla.mozilla.org", true */ 'b', 'u', 'g', 'z', 'i', 'l', 'l', 'a', '.', 'm', 'o', 'z', 'i', 'l', 'l', 'a', '.', 'o', 'r', 'g', '\0',
   /* "buiko.com", true */ 'b', 'u', 'i', 'k', 'o', '.', 'c', 'o', 'm', '\0',
   /* "build.chromium.org", false */ 'b', 'u', 'i', 'l', 'd', '.', 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "buildbox.io", true */ 'b', 'u', 'i', 'l', 'd', 'b', 'o', 'x', '.', 'i', 'o', '\0',
   /* "building-cost-estimators.com", true */ 'b', 'u', 'i', 'l', 'd', 'i', 'n', 'g', '-', 'c', 'o', 's', 't', '-', 'e', 's', 't', 'i', 'm', 'a', 't', 'o', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "builditsolutions.net", true */ 'b', 'u', 'i', 'l', 'd', 'i', 't', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'n', 'e', 't', '\0',
   /* "buildkite.com", true */ 'b', 'u', 'i', 'l', 'd', 'k', 'i', 't', 'e', '.', 'c', 'o', 'm', '\0',
@@ -1778,17 +1783,16 @@ static const char kSTSHostTable[] = {
   /* "cablesandkits.com", true */ 'c', 'a', 'b', 'l', 'e', 's', 'a', 'n', 'd', 'k', 'i', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "cabsites.com", true */ 'c', 'a', 'b', 's', 'i', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "cacaolalina.com", true */ 'c', 'a', 'c', 'a', 'o', 'l', 'a', 'l', 'i', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "cachethq.io", true */ 'c', 'a', 'c', 'h', 'e', 't', 'h', 'q', '.', 'i', 'o', '\0',
   /* "cackette.com", true */ 'c', 'a', 'c', 'k', 'e', 't', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cadmail.nl", true */ 'c', 'a', 'd', 'm', 'a', 'i', 'l', '.', 'n', 'l', '\0',
   /* "cadoth.net", true */ 'c', 'a', 'd', 'o', 't', 'h', '.', 'n', 'e', 't', '\0',
   /* "caesarkabalan.com", true */ 'c', 'a', 'e', 's', 'a', 'r', 'k', 'a', 'b', 'a', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "caesreon.com", true */ 'c', 'a', 'e', 's', 'r', 'e', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "cafe-murr.de", true */ 'c', 'a', 'f', 'e', '-', 'm', 'u', 'r', 'r', '.', 'd', 'e', '\0',
   /* "caffeinatedcode.com", true */ 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd', 'c', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cainhosting.com", true */ 'c', 'a', 'i', 'n', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "cais.de", true */ 'c', 'a', 'i', 's', '.', 'd', 'e', '\0',
   /* "caitcs.com", true */ 'c', 'a', 'i', 't', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "caja-pdf.es", true */ 'c', 'a', 'j', 'a', '-', 'p', 'd', 'f', '.', 'e', 's', '\0',
   /* "cajunuk.co.uk", true */ 'c', 'a', 'j', 'u', 'n', 'u', 'k', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "calaborlawnews.com", true */ 'c', 'a', 'l', 'a', 'b', 'o', 'r', 'l', 'a', 'w', 'n', 'e', 'w', 's', '.', 'c', 'o', 'm', '\0',
@@ -1921,17 +1925,16 @@ static const char kSTSHostTable[] = {
   /* "catsmagic.pp.ua", true */ 'c', 'a', 't', 's', 'm', 'a', 'g', 'i', 'c', '.', 'p', 'p', '.', 'u', 'a', '\0',
   /* "cattivo.nl", true */ 'c', 'a', 't', 't', 'i', 'v', 'o', '.', 'n', 'l', '\0',
   /* "cavac.at", true */ 'c', 'a', 'v', 'a', 'c', '.', 'a', 't', '\0',
   /* "cazes.info", true */ 'c', 'a', 'z', 'e', 's', '.', 'i', 'n', 'f', 'o', '\0',
   /* "cbamo.org", true */ 'c', 'b', 'a', 'm', 'o', '.', 'o', 'r', 'g', '\0',
   /* "cbbank.com", true */ 'c', 'b', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "cbecrft.net", true */ 'c', 'b', 'e', 'c', 'r', 'f', 't', '.', 'n', 'e', 't', '\0',
   /* "cbtistexcalac.mx", true */ 'c', 'b', 't', 'i', 's', 't', 'e', 'x', 'c', 'a', 'l', 'a', 'c', '.', 'm', 'x', '\0',
-  /* "ccayearbook.com", true */ 'c', 'c', 'a', 'y', 'e', 'a', 'r', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "ccblog.de", true */ 'c', 'c', 'b', 'l', 'o', 'g', '.', 'd', 'e', '\0',
   /* "ccgn.co", true */ 'c', 'c', 'g', 'n', '.', 'c', 'o', '\0',
   /* "ccja.ro", false */ 'c', 'c', 'j', 'a', '.', 'r', 'o', '\0',
   /* "cdkeyworld.de", true */ 'c', 'd', 'k', 'e', 'y', 'w', 'o', 'r', 'l', 'd', '.', 'd', 'e', '\0',
   /* "cdlcenter.com", true */ 'c', 'd', 'l', 'c', 'e', 'n', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "cdnjs.com", true */ 'c', 'd', 'n', 'j', 's', '.', 'c', 'o', 'm', '\0',
   /* "cdt.org", true */ 'c', 'd', 't', '.', 'o', 'r', 'g', '\0',
   /* "cecipu.gob.cl", true */ 'c', 'e', 'c', 'i', 'p', 'u', '.', 'g', 'o', 'b', '.', 'c', 'l', '\0',
@@ -1946,16 +1949,17 @@ static const char kSTSHostTable[] = {
   /* "centennialrewards.com", true */ 'c', 'e', 'n', 't', 'e', 'n', 'n', 'i', 'a', 'l', 'r', 'e', 'w', 'a', 'r', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "centerpereezd.ru", false */ 'c', 'e', 'n', 't', 'e', 'r', 'p', 'e', 'r', 'e', 'e', 'z', 'd', '.', 'r', 'u', '\0',
   /* "centillien.com", true */ 'c', 'e', 'n', 't', 'i', 'l', 'l', 'i', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "centralpoint.be", true */ 'c', 'e', 'n', 't', 'r', 'a', 'l', 'p', 'o', 'i', 'n', 't', '.', 'b', 'e', '\0',
   /* "centralpoint.nl", true */ 'c', 'e', 'n', 't', 'r', 'a', 'l', 'p', 'o', 'i', 'n', 't', '.', 'n', 'l', '\0',
   /* "centralstatecu.org", true */ 'c', 'e', 'n', 't', 'r', 'a', 'l', 's', 't', 'a', 't', 'e', 'c', 'u', '.', 'o', 'r', 'g', '\0',
   /* "centralvoice.org", true */ 'c', 'e', 'n', 't', 'r', 'a', 'l', 'v', 'o', 'i', 'c', 'e', '.', 'o', 'r', 'g', '\0',
   /* "centralync.com", true */ 'c', 'e', 'n', 't', 'r', 'a', 'l', 'y', 'n', 'c', '.', 'c', 'o', 'm', '\0',
+  /* "centricweb.com", true */ 'c', 'e', 'n', 't', 'r', 'i', 'c', 'w', 'e', 'b', '.', 'c', 'o', 'm', '\0',
   /* "centrobill.com", true */ 'c', 'e', 'n', 't', 'r', 'o', 'b', 'i', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "centrojovencuenca.es", true */ 'c', 'e', 'n', 't', 'r', 'o', 'j', 'o', 'v', 'e', 'n', 'c', 'u', 'e', 'n', 'c', 'a', '.', 'e', 's', '\0',
   /* "centrumhodinek.cz", true */ 'c', 'e', 'n', 't', 'r', 'u', 'm', 'h', 'o', 'd', 'i', 'n', 'e', 'k', '.', 'c', 'z', '\0',
   /* "ceoimon.com", true */ 'c', 'e', 'o', 'i', 'm', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "ceopedia.org", true */ 'c', 'e', 'o', 'p', 'e', 'd', 'i', 'a', '.', 'o', 'r', 'g', '\0',
   /* "cerastar.com", true */ 'c', 'e', 'r', 'a', 's', 't', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "cerebelo.info", true */ 'c', 'e', 'r', 'e', 'b', 'e', 'l', 'o', '.', 'i', 'n', 'f', 'o', '\0',
   /* "ceritamalam.net", false */ 'c', 'e', 'r', 'i', 't', 'a', 'm', 'a', 'l', 'a', 'm', '.', 'n', 'e', 't', '\0',
@@ -1999,20 +2003,22 @@ static const char kSTSHostTable[] = {
   /* "chaoschemnitz.de", true */ 'c', 'h', 'a', 'o', 's', 'c', 'h', 'e', 'm', 'n', 'i', 't', 'z', '.', 'd', 'e', '\0',
   /* "chaosdorf.de", true */ 'c', 'h', 'a', 'o', 's', 'd', 'o', 'r', 'f', '.', 'd', 'e', '\0',
   /* "chaosfield.at", true */ 'c', 'h', 'a', 'o', 's', 'f', 'i', 'e', 'l', 'd', '.', 'a', 't', '\0',
   /* "chaoslab.org", true */ 'c', 'h', 'a', 'o', 's', 'l', 'a', 'b', '.', 'o', 'r', 'g', '\0',
   /* "chaoswebs.net", true */ 'c', 'h', 'a', 'o', 's', 'w', 'e', 'b', 's', '.', 'n', 'e', 't', '\0',
   /* "charge.co", true */ 'c', 'h', 'a', 'r', 'g', 'e', '.', 'c', 'o', '\0',
   /* "charityclear.com", true */ 'c', 'h', 'a', 'r', 'i', 't', 'y', 'c', 'l', 'e', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "charitystreet.co.uk", true */ 'c', 'h', 'a', 'r', 'i', 't', 'y', 's', 't', 'r', 'e', 'e', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
+  /* "charl.eu", true */ 'c', 'h', 'a', 'r', 'l', '.', 'e', 'u', '\0',
   /* "charlesbwise.com", true */ 'c', 'h', 'a', 'r', 'l', 'e', 's', 'b', 'w', 'i', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "charlierogers.co.uk", true */ 'c', 'h', 'a', 'r', 'l', 'i', 'e', 'r', 'o', 'g', 'e', 'r', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "charlierogers.com", true */ 'c', 'h', 'a', 'r', 'l', 'i', 'e', 'r', 'o', 'g', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "charmander.me", true */ 'c', 'h', 'a', 'r', 'm', 'a', 'n', 'd', 'e', 'r', '.', 'm', 'e', '\0',
+  /* "charmyadesara.com", true */ 'c', 'h', 'a', 'r', 'm', 'y', 'a', 'd', 'e', 's', 'a', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "charteroak.org", true */ 'c', 'h', 'a', 'r', 't', 'e', 'r', 'o', 'a', 'k', '.', 'o', 'r', 'g', '\0',
   /* "chat-porc.eu", true */ 'c', 'h', 'a', 't', '-', 'p', 'o', 'r', 'c', '.', 'e', 'u', '\0',
   /* "chatbelgie.eu", true */ 'c', 'h', 'a', 't', 'b', 'e', 'l', 'g', 'i', 'e', '.', 'e', 'u', '\0',
   /* "chatear.social", true */ 'c', 'h', 'a', 't', 'e', 'a', 'r', '.', 's', 'o', 'c', 'i', 'a', 'l', '\0',
   /* "chateau-belvoir.com", true */ 'c', 'h', 'a', 't', 'e', 'a', 'u', '-', 'b', 'e', 'l', 'v', 'o', 'i', 'r', '.', 'c', 'o', 'm', '\0',
   /* "chatme.im", false */ 'c', 'h', 'a', 't', 'm', 'e', '.', 'i', 'm', '\0',
   /* "chatnederland.eu", true */ 'c', 'h', 'a', 't', 'n', 'e', 'd', 'e', 'r', 'l', 'a', 'n', 'd', '.', 'e', 'u', '\0',
   /* "chaz6.com", true */ 'c', 'h', 'a', 'z', '6', '.', 'c', 'o', 'm', '\0',
@@ -2123,17 +2129,16 @@ static const char kSTSHostTable[] = {
   /* "cinemaclub.co", true */ 'c', 'i', 'n', 'e', 'm', 'a', 'c', 'l', 'u', 'b', '.', 'c', 'o', '\0',
   /* "cinsects.de", true */ 'c', 'i', 'n', 's', 'e', 'c', 't', 's', '.', 'd', 'e', '\0',
   /* "cintdirect.com", true */ 'c', 'i', 'n', 't', 'd', 'i', 'r', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "cio.gov", true */ 'c', 'i', 'o', '.', 'g', 'o', 'v', '\0',
   /* "cipherboy.com", true */ 'c', 'i', 'p', 'h', 'e', 'r', 'b', 'o', 'y', '.', 'c', 'o', 'm', '\0',
   /* "cipherli.st", true */ 'c', 'i', 'p', 'h', 'e', 'r', 'l', 'i', '.', 's', 't', '\0',
   /* "ciphrex.com", true */ 'c', 'i', 'p', 'h', 'r', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "circara.com", true */ 'c', 'i', 'r', 'c', 'a', 'r', 'a', '.', 'c', 'o', 'm', '\0',
-  /* "cirfi.com", true */ 'c', 'i', 'r', 'f', 'i', '.', 'c', 'o', 'm', '\0',
   /* "cirope.com", true */ 'c', 'i', 'r', 'o', 'p', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cirrus0.de", true */ 'c', 'i', 'r', 'r', 'u', 's', '0', '.', 'd', 'e', '\0',
   /* "ciscodude.net", true */ 'c', 'i', 's', 'c', 'o', 'd', 'u', 'd', 'e', '.', 'n', 'e', 't', '\0',
   /* "ciscohomeanalytics.com", true */ 'c', 'i', 's', 'c', 'o', 'h', 'o', 'm', 'e', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "ciscommerce.net", true */ 'c', 'i', 's', 'c', 'o', 'm', 'm', 'e', 'r', 'c', 'e', '.', 'n', 'e', 't', '\0',
   /* "cisy.me", true */ 'c', 'i', 's', 'y', '.', 'm', 'e', '\0',
   /* "citizen-cam.de", true */ 'c', 'i', 't', 'i', 'z', 'e', 'n', '-', 'c', 'a', 'm', '.', 'd', 'e', '\0',
   /* "citizensbankal.com", true */ 'c', 'i', 't', 'i', 'z', 'e', 'n', 's', 'b', 'a', 'n', 'k', 'a', 'l', '.', 'c', 'o', 'm', '\0',
@@ -2160,31 +2165,31 @@ static const char kSTSHostTable[] = {
   /* "claralabs.com", true */ 'c', 'l', 'a', 'r', 'a', 'l', 'a', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "clarkeaward.com", true */ 'c', 'l', 'a', 'r', 'k', 'e', 'a', 'w', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "classdojo.com", true */ 'c', 'l', 'a', 's', 's', 'd', 'o', 'j', 'o', '.', 'c', 'o', 'm', '\0',
   /* "classicalpilates.ca", true */ 'c', 'l', 'a', 's', 's', 'i', 'c', 'a', 'l', 'p', 'i', 'l', 'a', 't', 'e', 's', '.', 'c', 'a', '\0',
   /* "classicday.nl", true */ 'c', 'l', 'a', 's', 's', 'i', 'c', 'd', 'a', 'y', '.', 'n', 'l', '\0',
   /* "classicsandexotics.com", true */ 'c', 'l', 'a', 's', 's', 'i', 'c', 's', 'a', 'n', 'd', 'e', 'x', 'o', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "classicshop.ua", true */ 'c', 'l', 'a', 's', 's', 'i', 'c', 's', 'h', 'o', 'p', '.', 'u', 'a', '\0',
   /* "classpoint.cz", true */ 'c', 'l', 'a', 's', 's', 'p', 'o', 'i', 'n', 't', '.', 'c', 'z', '\0',
+  /* "claudio4.com", true */ 'c', 'l', 'a', 'u', 'd', 'i', 'o', '4', '.', 'c', 'o', 'm', '\0',
   /* "clawe.de", true */ 'c', 'l', 'a', 'w', 'e', '.', 'd', 'e', '\0',
   /* "cldly.com", true */ 'c', 'l', 'd', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "clearc.tk", false */ 'c', 'l', 'e', 'a', 'r', 'c', '.', 't', 'k', '\0',
   /* "clearkonjac.com", true */ 'c', 'l', 'e', 'a', 'r', 'k', 'o', 'n', 'j', 'a', 'c', '.', 'c', 'o', 'm', '\0',
   /* "clearsettle-admin.com", true */ 'c', 'l', 'e', 'a', 'r', 's', 'e', 't', 't', 'l', 'e', '-', 'a', 'd', 'm', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "clearviewwealthprojector.com.au", true */ 'c', 'l', 'e', 'a', 'r', 'v', 'i', 'e', 'w', 'w', 'e', 'a', 'l', 't', 'h', 'p', 'r', 'o', 'j', 'e', 'c', 't', 'o', 'r', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "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',
   /* "clickandshoot.nl", true */ 'c', 'l', 'i', 'c', 'k', 'a', 'n', 'd', 's', 'h', 'o', 'o', 't', '.', 'n', 'l', '\0',
   /* "clickclickphish.com", true */ 'c', 'l', 'i', 'c', 'k', 'c', 'l', 'i', 'c', 'k', 'p', 'h', 'i', 's', 'h', '.', 'c', 'o', 'm', '\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',
-  /* "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',
   /* "clientboss.com", true */ 'c', 'l', 'i', 'e', 'n', 't', 'b', 'o', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "clientsecure.me", true */ 'c', 'l', 'i', 'e', 'n', 't', 's', 'e', 'c', 'u', 'r', 'e', '.', 'm', 'e', '\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',
   /* "climatestew.com", true */ 'c', 'l', 'i', 'm', 'a', 't', 'e', 's', 't', 'e', 'w', '.', 'c', 'o', 'm', '\0',
   /* "cliniko.com", true */ 'c', 'l', 'i', 'n', 'i', 'k', 'o', '.', 'c', 'o', 'm', '\0',
@@ -2199,16 +2204,17 @@ static const char kSTSHostTable[] = {
   /* "close.com", false */ 'c', 'l', 'o', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "closeli.cn", true */ 'c', 'l', 'o', 's', 'e', 'l', 'i', '.', 'c', 'n', '\0',
   /* "closeli.com", true */ 'c', 'l', 'o', 's', 'e', 'l', 'i', '.', 'c', 'o', 'm', '\0',
   /* "closient.com", true */ 'c', 'l', 'o', 's', 'i', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "cloud-project.com", true */ 'c', 'l', 'o', 'u', 'd', '-', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "cloud-surfer.net", true */ 'c', 'l', 'o', 'u', 'd', '-', 's', 'u', 'r', 'f', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "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',
   /* "cloudbolin.es", true */ 'c', 'l', 'o', 'u', 'd', 'b', 'o', 'l', 'i', 'n', '.', 'e', 's', '\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',
   /* "cloudily.com", true */ 'c', 'l', 'o', 'u', 'd', 'i', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "cloudlink.club", true */ 'c', 'l', 'o', 'u', 'd', 'l', 'i', 'n', 'k', '.', 'c', 'l', 'u', 'b', '\0',
   /* "cloudmigrator365.com", true */ 'c', 'l', 'o', 'u', 'd', 'm', 'i', 'g', 'r', 'a', 't', 'o', 'r', '3', '6', '5', '.', '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',
@@ -2284,17 +2290,16 @@ static const char kSTSHostTable[] = {
   /* "codymoniz.com", true */ 'c', 'o', 'd', 'y', 'm', 'o', 'n', 'i', 'z', '.', 'c', 'o', 'm', '\0',
   /* "coffee-mamenoki.jp", true */ 'c', 'o', 'f', 'f', 'e', 'e', '-', 'm', 'a', 'm', 'e', 'n', 'o', 'k', 'i', '.', 'j', 'p', '\0',
   /* "cogent.cc", true */ 'c', 'o', 'g', 'e', 'n', 't', '.', 'c', 'c', '\0',
   /* "cogitoltd.com", true */ 'c', 'o', 'g', 'i', 't', 'o', 'l', 't', 'd', '.', 'c', 'o', 'm', '\0',
   /* "cogumelosmagicos.org", true */ 'c', 'o', 'g', 'u', 'm', 'e', 'l', 'o', 's', 'm', 'a', 'g', 'i', 'c', 'o', 's', '.', 'o', 'r', 'g', '\0',
   /* "coi-verify.com", true */ 'c', 'o', 'i', '-', 'v', 'e', 'r', 'i', 'f', 'y', '.', 'c', 'o', 'm', '\0',
   /* "coimmvest.com", true */ 'c', 'o', 'i', 'm', 'm', 'v', 'e', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "coin.dance", true */ 'c', 'o', 'i', 'n', '.', 'd', 'a', 'n', 'c', 'e', '\0',
-  /* "coinapult.com", true */ 'c', 'o', 'i', 'n', 'a', 'p', 'u', 'l', 't', '.', 'c', 'o', 'm', '\0',
   /* "coinbase.com", true */ 'c', 'o', 'i', 'n', 'b', 'a', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "coinessa.com", true */ 'c', 'o', 'i', 'n', 'e', 's', 's', 'a', '.', 'c', 'o', 'm', '\0',
   /* "coinjar-sandbox.com", true */ 'c', 'o', 'i', 'n', 'j', 'a', 'r', '-', 's', 'a', 'n', 'd', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "cojo.eu", true */ 'c', 'o', 'j', 'o', '.', 'e', 'u', '\0',
   /* "coldawn.com", true */ 'c', 'o', 'l', 'd', 'a', 'w', 'n', '.', 'c', 'o', 'm', '\0',
   /* "coldhak.ca", true */ 'c', 'o', 'l', 'd', 'h', 'a', 'k', '.', 'c', 'a', '\0',
   /* "coldlostsick.net", true */ 'c', 'o', 'l', 'd', 'l', 'o', 's', 't', 's', 'i', 'c', 'k', '.', 'n', 'e', 't', '\0',
   /* "coldwatericecream.com", true */ 'c', 'o', 'l', 'd', 'w', 'a', 't', 'e', 'r', 'i', 'c', 'e', 'c', 'r', 'e', 'a', 'm', '.', 'c', 'o', 'm', '\0',
@@ -2378,16 +2383,17 @@ static const char kSTSHostTable[] = {
   /* "connext.de", true */ 'c', 'o', 'n', 'n', 'e', 'x', 't', '.', 'd', 'e', '\0',
   /* "connyduck.at", true */ 'c', 'o', 'n', 'n', 'y', 'd', 'u', 'c', 'k', '.', 'a', 't', '\0',
   /* "conrad-kostecki.de", true */ 'c', 'o', 'n', 'r', 'a', 'd', '-', 'k', 'o', 's', 't', 'e', 'c', 'k', 'i', '.', 'd', 'e', '\0',
   /* "consciousbrand.co", true */ 'c', 'o', 'n', 's', 'c', 'i', 'o', 'u', 's', 'b', 'r', 'a', 'n', 'd', '.', 'c', 'o', '\0',
   /* "consciousbrand.org.au", true */ 'c', 'o', 'n', 's', 'c', 'i', 'o', 'u', 's', 'b', 'r', 'a', 'n', 'd', '.', 'o', 'r', 'g', '.', 'a', 'u', '\0',
   /* "consciousbranding.org.au", true */ 'c', 'o', 'n', 's', 'c', 'i', 'o', 'u', 's', 'b', 'r', 'a', 'n', 'd', 'i', 'n', 'g', '.', 'o', 'r', 'g', '.', 'a', 'u', '\0',
   /* "consciousbrands.net.au", true */ 'c', 'o', 'n', 's', 'c', 'i', 'o', 'u', 's', 'b', 'r', 'a', 'n', 'd', 's', '.', 'n', 'e', 't', '.', 'a', 'u', '\0',
   /* "console.ninja", true */ 'c', 'o', 'n', 's', 'o', 'l', 'e', '.', 'n', 'i', 'n', 'j', 'a', '\0',
+  /* "console.support", true */ 'c', 'o', 'n', 's', 'o', 'l', 'e', '.', 's', 'u', 'p', 'p', 'o', 'r', 't', '\0',
   /* "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',
   /* "consumersentinel.gov", true */ 'c', 'o', 'n', 's', 'u', 'm', 'e', 'r', 's', 'e', 'n', 't', 'i', 'n', 'e', 'l', '.', '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',
   /* "contarkos.xyz", true */ 'c', 'o', 'n', 't', 'a', 'r', 'k', 'o', 's', '.', 'x', 'y', 'z', '\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',
@@ -2488,17 +2494,16 @@ static const char kSTSHostTable[] = {
   /* "creativecaptiv.es", true */ 'c', 'r', 'e', 'a', 't', 'i', 'v', 'e', 'c', 'a', 'p', 't', 'i', 'v', '.', 'e', 's', '\0',
   /* "creditkarma.com", true */ 'c', 'r', 'e', 'd', 'i', 't', 'k', 'a', 'r', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "creditproautos.com", false */ 'c', 'r', 'e', 'd', 'i', 't', 'p', 'r', 'o', 'a', 'u', 't', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "creep.im", true */ 'c', 'r', 'e', 'e', 'p', '.', 'i', 'm', '\0',
   /* "crefelder.com", true */ 'c', 'r', 'e', 'f', 'e', 'l', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "crendontech.com", true */ 'c', 'r', 'e', 'n', 'd', 'o', 'n', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "crepererum.net", true */ 'c', 'r', 'e', 'p', 'e', 'r', 'e', 'r', 'u', 'm', '.', 'n', 'e', 't', '\0',
   /* "crestasantos.com", true */ 'c', 'r', 'e', 's', 't', 'a', 's', 'a', 'n', 't', 'o', 's', '.', 'c', 'o', 'm', '\0',
-  /* "crestoncottage.com", true */ 'c', 'r', 'e', 's', 't', 'o', 'n', 'c', 'o', 't', 't', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "crimson.no", true */ 'c', 'r', 'i', 'm', 's', 'o', 'n', '.', 'n', 'o', '\0',
   /* "cristiandeluxe.com", true */ 'c', 'r', 'i', 's', 't', 'i', 'a', 'n', 'd', 'e', 'l', 'u', 'x', 'e', '.', 'c', 'o', 'm', '\0',
   /* "critcola.com", true */ 'c', 'r', 'i', 't', 'c', 'o', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "critical.today", true */ 'c', 'r', 'i', 't', 'i', 'c', 'a', 'l', '.', 't', 'o', 'd', 'a', 'y', '\0',
   /* "criticalaim.com", true */ 'c', 'r', 'i', 't', 'i', 'c', 'a', 'l', 'a', 'i', 'm', '.', 'c', 'o', 'm', '\0',
   /* "criticalsurveys.co.uk", true */ 'c', 'r', 'i', 't', 'i', 'c', 'a', 'l', 's', 'u', 'r', 'v', 'e', 'y', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "crl-autos.com", true */ 'c', 'r', 'l', '-', 'a', 'u', 't', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "crm.onlime.ch", false */ 'c', 'r', 'm', '.', 'o', 'n', 'l', 'i', 'm', 'e', '.', 'c', 'h', '\0',
@@ -2527,17 +2532,16 @@ static const char kSTSHostTable[] = {
   /* "cryptography.io", true */ 'c', 'r', 'y', 'p', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'i', 'o', '\0',
   /* "cryptoisnotacrime.org", true */ 'c', 'r', 'y', 'p', 't', 'o', 'i', 's', 'n', 'o', 't', 'a', 'c', 'r', 'i', 'm', 'e', '.', 'o', 'r', 'g', '\0',
   /* "cryptoki.fr", true */ 'c', 'r', 'y', 'p', 't', 'o', 'k', 'i', '.', 'f', 'r', '\0',
   /* "cryptolab.pro", true */ 'c', 'r', 'y', 'p', 't', 'o', 'l', 'a', 'b', '.', 'p', 'r', 'o', '\0',
   /* "cryptolab.tk", true */ 'c', 'r', 'y', 'p', 't', 'o', 'l', 'a', 'b', '.', 't', 'k', '\0',
   /* "cryptonit.net", true */ 'c', 'r', 'y', 'p', 't', 'o', 'n', 'i', 't', '.', 'n', 'e', 't', '\0',
   /* "cryptonym.com", true */ 'c', 'r', 'y', 'p', 't', 'o', 'n', 'y', 'm', '.', 'c', 'o', 'm', '\0',
   /* "cryptoparty.at", true */ 'c', 'r', 'y', 'p', 't', 'o', 'p', 'a', 'r', 't', 'y', '.', 'a', 't', '\0',
-  /* "cryptoparty.dk", true */ 'c', 'r', 'y', 'p', 't', 'o', 'p', 'a', 'r', 't', 'y', '.', 'd', 'k', '\0',
   /* "cryptopartyatx.org", true */ 'c', 'r', 'y', 'p', 't', 'o', 'p', 'a', 'r', 't', 'y', 'a', 't', 'x', '.', 'o', 'r', 'g', '\0',
   /* "cryptopartynewcastle.org", true */ 'c', 'r', 'y', 'p', 't', 'o', 'p', 'a', 'r', 't', 'y', 'n', 'e', 'w', 'c', 'a', 's', 't', 'l', 'e', '.', 'o', 'r', 'g', '\0',
   /* "cryptopartyutah.org", true */ 'c', 'r', 'y', 'p', 't', 'o', 'p', 'a', 'r', 't', 'y', 'u', 't', 'a', 'h', '.', 'o', 'r', 'g', '\0',
   /* "cryptophobia.nl", true */ 'c', 'r', 'y', 'p', 't', 'o', 'p', 'h', 'o', 'b', 'i', 'a', '.', 'n', 'l', '\0',
   /* "cryptoseb.pw", true */ 'c', 'r', 'y', 'p', 't', 'o', 's', 'e', 'b', '.', 'p', 'w', '\0',
   /* "crystone.me", true */ 'c', 'r', 'y', 's', 't', 'o', 'n', 'e', '.', 'm', 'e', '\0',
   /* "cs-ubladego.pl", true */ 'c', 's', '-', 'u', 'b', 'l', 'a', 'd', 'e', 'g', 'o', '.', 'p', 'l', '\0',
   /* "csacongress.org", true */ 'c', 's', 'a', 'c', 'o', 'n', 'g', 'r', 'e', 's', 's', '.', 'o', 'r', 'g', '\0',
@@ -2918,18 +2922,16 @@ static const char kSTSHostTable[] = {
   /* "desserteagleselvenar.tk", true */ 'd', 'e', 's', 's', 'e', 'r', 't', 'e', 'a', 'g', 'l', 'e', 's', 'e', 'l', 'v', 'e', 'n', 'a', 'r', '.', 't', 'k', '\0',
   /* "desterman.ru", true */ 'd', 'e', 's', 't', 'e', 'r', 'm', 'a', 'n', '.', 'r', 'u', '\0',
   /* "destom.be", true */ 'd', 'e', 's', 't', 'o', 'm', '.', 'b', 'e', '\0',
   /* "detectify.com", false */ 'd', 'e', 't', 'e', 'c', 't', 'i', 'f', 'y', '.', 'c', 'o', 'm', '\0',
   /* "detest.org", true */ 'd', 'e', 't', 'e', 's', 't', '.', 'o', 'r', 'g', '\0',
   /* "dethemium.com", true */ 'd', 'e', 't', 'h', 'e', 'm', 'i', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "detoxsinutritie.ro", true */ 'd', 'e', 't', 'o', 'x', 's', 'i', 'n', 'u', 't', 'r', 'i', 't', 'i', 'e', '.', 'r', 'o', '\0',
   /* "detteflies.com", true */ 'd', 'e', 't', 't', 'e', 'f', 'l', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
-  /* "deusu.de", true */ 'd', 'e', 'u', 's', 'u', '.', 'd', 'e', '\0',
-  /* "deusu.org", true */ 'd', 'e', 'u', 's', 'u', '.', 'o', 'r', 'g', '\0',
   /* "deux.solutions", true */ 'd', 'e', 'u', 'x', '.', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '\0',
   /* "deuxsol.com", true */ 'd', 'e', 'u', 'x', 's', 'o', 'l', '.', 'c', 'o', 'm', '\0',
   /* "deuxsolutions.com", true */ 'd', 'e', 'u', 'x', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "dev-tek.de", true */ 'd', 'e', 'v', '-', 't', 'e', 'k', '.', 'd', 'e', '\0',
   /* "devb.nl", true */ 'd', 'e', 'v', 'b', '.', 'n', 'l', '\0',
   /* "devcu.com", true */ 'd', 'e', 'v', 'c', 'u', '.', 'c', 'o', 'm', '\0',
   /* "devcu.net", true */ 'd', 'e', 'v', 'c', 'u', '.', 'n', 'e', 't', '\0',
   /* "devdom.io", true */ 'd', 'e', 'v', 'd', 'o', 'm', '.', 'i', 'o', '\0',
@@ -3099,21 +3101,23 @@ static const char kSTSHostTable[] = {
   /* "dmeevalumate.com", true */ 'd', 'm', 'e', 'e', 'v', 'a', 'l', 'u', 'm', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dmfd.net", true */ 'd', 'm', 'f', 'd', '.', 'n', 'e', 't', '\0',
   /* "dmi.es", true */ 'd', 'm', 'i', '.', 'e', 's', '\0',
   /* "dmix.ca", true */ 'd', 'm', 'i', 'x', '.', 'c', 'a', '\0',
   /* "dmlogic.com", true */ 'd', 'm', 'l', 'o', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "dmtry.me", true */ 'd', 'm', 't', 'r', 'y', '.', 'm', 'e', '\0',
   /* "dmwall.cn", true */ 'd', 'm', 'w', 'a', 'l', 'l', '.', 'c', 'n', '\0',
   /* "dmxledlights.com", true */ 'd', 'm', 'x', 'l', 'e', 'd', 'l', 'i', 'g', 'h', 't', 's', '.', 'c', 'o', 'm', '\0',
+  /* "dmz.ninja", true */ 'd', 'm', 'z', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "dn3s.me", true */ 'd', 'n', '3', 's', '.', 'm', 'e', '\0',
   /* "dn42.us", true */ 'd', 'n', '4', '2', '.', 'u', 's', '\0',
   /* "dna.li", true */ 'd', 'n', 'a', '.', 'l', 'i', '\0',
   /* "dnc.org.nz", true */ 'd', 'n', 'c', '.', 'o', 'r', 'g', '.', 'n', 'z', '\0',
   /* "dndtools.net", true */ 'd', 'n', 'd', 't', 'o', 'o', 'l', 's', '.', 'n', 'e', 't', '\0',
+  /* "dne.lu", true */ 'd', 'n', 'e', '.', 'l', 'u', '\0',
   /* "dnmlab.it", true */ 'd', 'n', 'm', 'l', 'a', 'b', '.', 'i', 't', '\0',
   /* "dns-control.eu", true */ 'd', 'n', 's', '-', 'c', 'o', 'n', 't', 'r', 'o', 'l', '.', 'e', 'u', '\0',
   /* "dns.google.com", true */ 'd', 'n', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dnscrypt.org", true */ 'd', 'n', 's', 'c', 'r', 'y', 'p', 't', '.', 'o', 'r', 'g', '\0',
   /* "dnscurve.io", true */ 'd', 'n', 's', 'c', 'u', 'r', 'v', 'e', '.', 'i', 'o', '\0',
   /* "dnshallinta.fi", true */ 'd', 'n', 's', 'h', 'a', 'l', 'l', 'i', 'n', 't', 'a', '.', 'f', 'i', '\0',
   /* "dnslog.com", true */ 'd', 'n', 's', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "dnsman.se", true */ 'd', 'n', 's', 'm', 'a', 'n', '.', 's', 'e', '\0',
@@ -3314,17 +3318,16 @@ static const char kSTSHostTable[] = {
   /* "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',
   /* "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',
   /* "dyrenesverden.no", true */ 'd', 'y', 'r', 'e', 'n', 'e', 's', 'v', 'e', 'r', 'd', 'e', 'n', '.', 'n', 'o', '\0',
-  /* "dziekonski.com", true */ 'd', 'z', 'i', 'e', 'k', 'o', 'n', 's', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "dzyabchenko.com", true */ 'd', 'z', 'y', 'a', 'b', 'c', 'h', 'e', 'n', 'k', 'o', '.', 'c', 'o', 'm', '\0',
   /* "e-kontakti.fi", true */ 'e', '-', 'k', 'o', 'n', 't', 'a', 'k', 't', 'i', '.', 'f', 'i', '\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-sa.com", true */ 'e', '-', 's', 'a', '.', 'c', 'o', 'm', '\0',
   /* "e-teacher.pl", true */ 'e', '-', 't', 'e', 'a', 'c', 'h', 'e', 'r', '.', 'p', 'l', '\0',
   /* "e-tmf.org", true */ 'e', '-', 't', 'm', 'f', '.', 'o', 'r', 'g', '\0',
   /* "e-tresor.at", true */ 'e', '-', 't', 'r', 'e', 's', 'o', 'r', '.', 'a', 't', '\0',
@@ -3424,17 +3427,16 @@ static const char kSTSHostTable[] = {
   /* "edvmesstec.de", true */ 'e', 'd', 'v', 'm', 'e', 's', 's', 't', 'e', 'c', '.', 'd', 'e', '\0',
   /* "edwards.me.uk", true */ 'e', 'd', 'w', 'a', 'r', 'd', 's', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "edwardsnowden.com", true */ 'e', 'd', 'w', 'a', 'r', 'd', 's', 'n', 'o', 'w', 'd', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "edxg.de", false */ 'e', 'd', 'x', 'g', '.', 'd', 'e', '\0',
   /* "edyou.eu", true */ 'e', 'd', 'y', 'o', 'u', '.', 'e', 'u', '\0',
   /* "edzilla.info", true */ 'e', 'd', 'z', 'i', 'l', 'l', 'a', '.', 'i', 'n', 'f', 'o', '\0',
   /* "eelsden.net", true */ 'e', 'e', 'l', 's', 'd', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "eelzak.nl", true */ 'e', 'e', 'l', 'z', 'a', 'k', '.', 'n', 'l', '\0',
-  /* "eeqj.com", true */ 'e', 'e', 'q', 'j', '.', 'c', 'o', 'm', '\0',
   /* "eery.de", true */ 'e', 'e', 'r', 'y', '.', 'd', 'e', '\0',
   /* "eewna.org", true */ 'e', 'e', 'w', 'n', 'a', '.', 'o', 'r', 'g', '\0',
   /* "ef.gy", true */ 'e', 'f', '.', 'g', 'y', '\0',
   /* "eff.org", true */ 'e', 'f', 'f', '.', 'o', 'r', 'g', '\0',
   /* "effortlesshr.com", true */ 'e', 'f', 'f', 'o', 'r', 't', 'l', 'e', 's', 's', 'h', 'r', '.', 'c', 'o', 'm', '\0',
   /* "egfl.org.uk", true */ 'e', 'g', 'f', 'l', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "egge.com", true */ 'e', 'g', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "eggplant.today", true */ 'e', 'g', 'g', 'p', 'l', 'a', 'n', 't', '.', 't', 'o', 'd', 'a', 'y', '\0',
@@ -3492,17 +3494,16 @@ static const char kSTSHostTable[] = {
   /* "element-43.com", true */ 'e', 'l', 'e', 'm', 'e', 'n', 't', '-', '4', '3', '.', 'c', 'o', 'm', '\0',
   /* "elemental.software", true */ 'e', 'l', 'e', 'm', 'e', 'n', 't', 'a', 'l', '.', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '\0',
   /* "elementalrobotics.com", true */ 'e', 'l', 'e', 'm', 'e', 'n', 't', 'a', 'l', 'r', 'o', 'b', 'o', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "elemenx.com", true */ 'e', 'l', 'e', 'm', 'e', 'n', 'x', '.', 'c', 'o', 'm', '\0',
   /* "elena-baykova.ru", true */ 'e', 'l', 'e', 'n', 'a', '-', 'b', 'a', 'y', 'k', 'o', 'v', 'a', '.', 'r', 'u', '\0',
   /* "elenagherta.ga", true */ 'e', 'l', 'e', 'n', 'a', 'g', 'h', 'e', 'r', 't', 'a', '.', 'g', 'a', '\0',
   /* "elenorsmadness.org", true */ 'e', 'l', 'e', 'n', 'o', 'r', 's', 'm', 'a', 'd', 'n', 'e', 's', 's', '.', 'o', 'r', 'g', '\0',
   /* "elephpant.cz", true */ 'e', 'l', 'e', 'p', 'h', 'p', 'a', 'n', 't', '.', 'c', 'z', '\0',
-  /* "elgacien.de", true */ 'e', 'l', 'g', 'a', 'c', 'i', 'e', 'n', '.', 'd', 'e', '\0',
   /* "elglobo.com.mx", true */ 'e', 'l', 'g', 'l', 'o', 'b', 'o', '.', 'c', 'o', 'm', '.', 'm', 'x', '\0',
   /* "elgosblanc.com", true */ 'e', 'l', 'g', 'o', 's', 'b', 'l', 'a', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "eligible.com", true */ 'e', 'l', 'i', 'g', 'i', 'b', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "eligibleapi.com", true */ 'e', 'l', 'i', 'g', 'i', 'b', 'l', 'e', 'a', 'p', 'i', '.', 'c', 'o', 'm', '\0',
   /* "eligrey.com", true */ 'e', 'l', 'i', 'g', 'r', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "eliolita.com", true */ 'e', 'l', 'i', 'o', 'l', 'i', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "eliott.be", true */ 'e', 'l', 'i', 'o', 't', 't', '.', 'b', 'e', '\0',
   /* "elisa.ee", false */ 'e', 'l', 'i', 's', 'a', '.', 'e', 'e', '\0',
@@ -3667,17 +3668,16 @@ static const char kSTSHostTable[] = {
   /* "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',
   /* "ernesto.at", true */ 'e', 'r', 'n', 'e', 's', 't', 'o', '.', 'a', 't', '\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',
-  /* "ersindemirtas.com", true */ 'e', 'r', 's', 'i', 'n', 'd', 'e', 'm', 'i', 'r', 't', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "eru.me", true */ 'e', 'r', 'u', '.', 'm', 'e', '\0',
   /* "erudikum.cz", true */ 'e', 'r', 'u', 'd', 'i', 'k', 'u', 'm', '.', 'c', 'z', '\0',
   /* "erwanlepape.com", true */ 'e', 'r', 'w', 'a', 'n', 'l', 'e', 'p', 'a', 'p', 'e', '.', 'c', 'o', 'm', '\0',
   /* "erwinwensveen.nl", true */ 'e', 'r', 'w', 'i', 'n', 'w', 'e', 'n', 's', 'v', 'e', 'e', 'n', '.', 'n', 'l', '\0',
   /* "es-geenen.de", true */ 'e', 's', '-', 'g', 'e', 'e', 'n', 'e', 'n', '.', 'd', 'e', '\0',
   /* "es.search.yahoo.com", false */ 'e', 's', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "escalate.eu", true */ 'e', 's', 'c', 'a', 'l', 'a', 't', 'e', '.', 'e', 'u', '\0',
   /* "escapees.com", true */ 'e', 's', 'c', 'a', 'p', 'e', 'e', 's', '.', 'c', 'o', 'm', '\0',
@@ -3710,17 +3710,17 @@ static const char kSTSHostTable[] = {
   /* "estateczech-eu.ru", true */ 'e', 's', 't', 'a', 't', 'e', 'c', 'z', 'e', 'c', 'h', '-', 'e', 'u', '.', 'r', 'u', '\0',
   /* "esteam.se", true */ 'e', 's', 't', 'e', 'a', 'm', '.', 's', 'e', '\0',
   /* "estebanborges.com", true */ 'e', 's', 't', 'e', 'b', 'a', 'n', 'b', 'o', 'r', 'g', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "estoic.net", true */ 'e', 's', 't', 'o', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "estrietoit.com", false */ 'e', 's', 't', 'r', 'i', 'e', 't', 'o', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "etaes.eu", true */ 'e', 't', 'a', 'e', 's', '.', 'e', 'u', '\0',
   /* "etaxi.tn", true */ 'e', 't', 'a', 'x', 'i', '.', 't', 'n', '\0',
   /* "eteesheet.com", true */ 'e', 't', 'e', 'e', 's', 'h', 'e', 'e', 't', '.', 'c', 'o', 'm', '\0',
-  /* "etelej.com", true */ 'e', 't', 'e', 'l', 'e', 'j', '.', 'c', 'o', 'm', '\0',
+  /* "etelej.com", false */ 'e', 't', 'e', 'l', 'e', 'j', '.', 'c', 'o', 'm', '\0',
   /* "eth0.nl", true */ 'e', 't', 'h', '0', '.', 'n', 'l', '\0',
   /* "etha.nz", true */ 'e', 't', 'h', 'a', '.', 'n', 'z', '\0',
   /* "ethan.pm", true */ 'e', 't', 'h', 'a', 'n', '.', 'p', 'm', '\0',
   /* "ethanfaust.com", true */ 'e', 't', 'h', 'a', 'n', 'f', 'a', 'u', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "ethanlew.is", true */ 'e', 't', 'h', 'a', 'n', 'l', 'e', 'w', '.', 'i', 's', '\0',
   /* "ethercalc.com", true */ 'e', 't', 'h', 'e', 'r', 'c', 'a', 'l', 'c', '.', 'c', 'o', 'm', '\0',
   /* "ethercalc.org", true */ 'e', 't', 'h', 'e', 'r', 'c', 'a', 'l', 'c', '.', 'o', 'r', 'g', '\0',
   /* "etherpad.fr", true */ 'e', 't', 'h', 'e', 'r', 'p', 'a', 'd', '.', 'f', 'r', '\0',
@@ -3877,17 +3877,16 @@ static const char kSTSHostTable[] = {
   /* "fallenangelspirits.com", true */ 'f', 'a', 'l', 'l', 'e', 'n', 'a', 'n', 'g', 'e', 'l', 's', 'p', 'i', 'r', 'i', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "fallenangelspirits.uk", true */ 'f', 'a', 'l', 'l', 'e', 'n', 'a', 'n', 'g', 'e', 'l', 's', 'p', 'i', 'r', 'i', 't', 's', '.', 'u', 'k', '\0',
   /* "fallenspirits.co.uk", true */ 'f', 'a', 'l', 'l', 'e', 'n', 's', 'p', 'i', 'r', 'i', 't', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "falsum.net", true */ 'f', 'a', 'l', 's', 'u', 'm', '.', 'n', 'e', 't', '\0',
   /* "familie-kupschke.de", true */ 'f', 'a', 'm', 'i', 'l', 'i', 'e', '-', 'k', 'u', 'p', 's', 'c', 'h', 'k', 'e', '.', 'd', 'e', '\0',
   /* "familie-monka.de", true */ 'f', 'a', 'm', 'i', 'l', 'i', 'e', '-', 'm', 'o', 'n', 'k', 'a', '.', 'd', 'e', '\0',
   /* "familie-sander.rocks", true */ 'f', 'a', 'm', 'i', 'l', 'i', 'e', '-', 's', 'a', 'n', 'd', 'e', 'r', '.', 'r', 'o', 'c', 'k', 's', '\0',
   /* "familie-sprink.de", true */ 'f', 'a', 'm', 'i', 'l', 'i', 'e', '-', 's', 'p', 'r', 'i', 'n', 'k', '.', 'd', 'e', '\0',
-  /* "familie-zimmermann.at", true */ 'f', 'a', 'm', 'i', 'l', 'i', 'e', '-', 'z', 'i', 'm', 'm', 'e', 'r', 'm', 'a', 'n', 'n', '.', 'a', 't', '\0',
   /* "familiegrottendieck.de", true */ 'f', 'a', 'm', 'i', 'l', 'i', 'e', 'g', 'r', 'o', 't', 't', 'e', 'n', 'd', 'i', 'e', 'c', 'k', '.', 'd', 'e', '\0',
   /* "familieholme.de", true */ 'f', 'a', 'm', 'i', 'l', 'i', 'e', 'h', 'o', 'l', 'm', 'e', '.', 'd', 'e', '\0',
   /* "familjenfrodlund.se", true */ 'f', 'a', 'm', 'i', 'l', 'j', 'e', 'n', 'f', 'r', 'o', 'd', 'l', 'u', 'n', 'd', '.', 's', 'e', '\0',
   /* "familjenm.se", true */ 'f', 'a', 'm', 'i', 'l', 'j', 'e', 'n', 'm', '.', 's', 'e', '\0',
   /* "fanboi.ch", true */ 'f', 'a', 'n', 'b', 'o', 'i', '.', 'c', 'h', '\0',
   /* "fandler.cz", true */ 'f', 'a', 'n', 'd', 'l', 'e', 'r', '.', 'c', 'z', '\0',
   /* "fandomservices.com", true */ 'f', 'a', 'n', 'd', 'o', 'm', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "fangs.ink", true */ 'f', 'a', 'n', 'g', 's', '.', 'i', 'n', 'k', '\0',
@@ -4044,17 +4043,17 @@ static const char kSTSHostTable[] = {
   /* "firstdogonthemoon.com.au", true */ 'f', 'i', 'r', 's', 't', 'd', 'o', 'g', 'o', 'n', 't', 'h', 'e', 'm', 'o', 'o', 'n', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "firstlook.org", true */ 'f', 'i', 'r', 's', 't', 'l', 'o', 'o', 'k', '.', 'o', 'r', 'g', '\0',
   /* "firstmall.de", true */ 'f', 'i', 'r', 's', 't', 'm', 'a', 'l', 'l', '.', 'd', 'e', '\0',
   /* "fischer-its.com", false */ 'f', 'i', 's', 'c', 'h', 'e', 'r', '-', 'i', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "fischers.cc", true */ 'f', 'i', 's', 'c', 'h', 'e', 'r', 's', '.', 'c', 'c', '\0',
   /* "fish-hook.ru", true */ 'f', 'i', 's', 'h', '-', 'h', 'o', 'o', 'k', '.', 'r', 'u', '\0',
   /* "fitbylo.com", true */ 'f', 'i', 't', 'b', 'y', 'l', 'o', '.', 'c', 'o', 'm', '\0',
   /* "fitiapp.com", true */ 'f', 'i', 't', 'i', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
-  /* "fitkram.cz", true */ 'f', 'i', 't', 'k', 'r', 'a', 'm', '.', 'c', 'z', '\0',
+  /* "fitkram.cz", false */ 'f', 'i', 't', 'k', 'r', 'a', 'm', '.', 'c', 'z', '\0',
   /* "fittelo.cz", true */ 'f', 'i', 't', 't', 'e', 'l', 'o', '.', 'c', 'z', '\0',
   /* "fitzsim.org", true */ 'f', 'i', 't', 'z', 's', 'i', 'm', '.', 'o', 'r', 'g', '\0',
   /* "fiws.net", true */ 'f', 'i', 'w', 's', '.', 'n', 'e', 't', '\0',
   /* "fixel.express", true */ 'f', 'i', 'x', 'e', 'l', '.', 'e', 'x', 'p', 'r', 'e', 's', 's', '\0',
   /* "fixforce.nl", true */ 'f', 'i', 'x', 'f', 'o', 'r', 'c', 'e', '.', 'n', 'l', '\0',
   /* "fixhotsauce.com", true */ 'f', 'i', 'x', 'h', 'o', 't', 's', 'a', 'u', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fixmycomputerdude.com", true */ 'f', 'i', 'x', 'm', 'y', 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r', 'd', 'u', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fizz.buzz", true */ 'f', 'i', 'z', 'z', '.', 'b', 'u', 'z', 'z', '\0',
@@ -4161,29 +4160,31 @@ static const char kSTSHostTable[] = {
   /* "forodeespanol.com", true */ 'f', 'o', 'r', 'o', 'd', 'e', 'e', 's', 'p', 'a', 'n', 'o', 'l', '.', 'c', 'o', 'm', '\0',
   /* "forplanetsake.com", true */ 'f', 'o', 'r', 'p', 'l', 'a', 'n', 'e', 't', 's', 'a', 'k', 'e', '.', 'c', 'o', 'm', '\0',
   /* "forsakringsarkivet.se", true */ 'f', 'o', 'r', 's', 'a', 'k', 'r', 'i', 'n', 'g', 's', 'a', 'r', 'k', 'i', 'v', 'e', 't', '.', 's', 'e', '\0',
   /* "forschbach-janssen.de", true */ 'f', 'o', 'r', 's', 'c', 'h', 'b', 'a', 'c', 'h', '-', 'j', 'a', 'n', 's', 's', 'e', 'n', '.', 'd', 'e', '\0',
   /* "fortesanshop.it", true */ 'f', 'o', 'r', 't', 'e', 's', 'a', 'n', 's', 'h', 'o', 'p', '.', 'i', 't', '\0',
   /* "fortnine.ca", true */ 'f', 'o', 'r', 't', 'n', 'i', 'n', 'e', '.', 'c', 'a', '\0',
   /* "fortress.sk", true */ 'f', 'o', 'r', 't', 'r', 'e', 's', 's', '.', 's', 'k', '\0',
   /* "fortuna-s.com", true */ 'f', 'o', 'r', 't', 'u', 'n', 'a', '-', 's', '.', 'c', 'o', 'm', '\0',
+  /* "fortworth.ch", true */ 'f', 'o', 'r', 't', 'w', 'o', 'r', 't', 'h', '.', 'c', 'h', '\0',
   /* "forum.linode.com", false */ 'f', 'o', 'r', 'u', 'm', '.', 'l', 'i', 'n', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fossewayflowers.co.uk", true */ 'f', 'o', 's', 's', 'e', 'w', 'a', 'y', 'f', 'l', 'o', 'w', 'e', 'r', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "fossewayflowers.com", true */ 'f', 'o', 's', 's', 'e', 'w', 'a', 'y', 'f', 'l', 'o', 'w', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "fossewaygardencentre.co.uk", true */ 'f', 'o', 's', 's', 'e', 'w', 'a', 'y', 'g', 'a', 'r', 'd', 'e', 'n', 'c', 'e', 'n', 't', 'r', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "fossilfreeyale.org", true */ 'f', 'o', 's', 's', 'i', 'l', 'f', 'r', 'e', 'e', 'y', 'a', 'l', 'e', '.', 'o', 'r', 'g', '\0',
   /* "foto-janvanaefst.nl", true */ 'f', 'o', 't', 'o', '-', 'j', 'a', 'n', 'v', 'a', 'n', 'a', 'e', 'f', 's', 't', '.', 'n', 'l', '\0',
   /* "foto4.cz", true */ 'f', 'o', 't', 'o', '4', '.', 'c', 'z', '\0',
   /* "fotocerita.net", false */ 'f', 'o', 't', 'o', 'c', 'e', 'r', 'i', 't', 'a', '.', 'n', 'e', 't', '\0',
   /* "fotofaerie.net", true */ 'f', 'o', 't', 'o', 'f', 'a', 'e', 'r', 'i', 'e', '.', 'n', 'e', 't', '\0',
   /* "fotografiadellalucerossa.com", true */ 'f', 'o', 't', 'o', 'g', 'r', 'a', 'f', 'i', 'a', 'd', 'e', 'l', 'l', 'a', 'l', 'u', 'c', 'e', 'r', 'o', 's', 's', 'a', '.', 'c', 'o', 'm', '\0',
   /* "fotostudio-schweiz.ch", true */ 'f', 'o', 't', 'o', 's', 't', 'u', 'd', 'i', 'o', '-', 's', 'c', 'h', 'w', 'e', 'i', 'z', '.', 'c', 'h', '\0',
   /* "fotowettbewerb.co", true */ 'f', 'o', 't', 'o', 'w', 'e', 't', 't', 'b', 'e', 'w', 'e', 'r', 'b', '.', 'c', 'o', '\0',
   /* "fotowolfy.com", true */ 'f', 'o', 't', 'o', 'w', 'o', 'l', 'f', 'y', '.', 'c', 'o', 'm', '\0',
+  /* "fourchin.net", true */ 'f', 'o', 'u', 'r', 'c', 'h', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "foxbnc.co.uk", true */ 'f', 'o', 'x', 'b', 'n', 'c', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "foxdev.co", true */ 'f', 'o', 'x', 'd', 'e', 'v', '.', 'c', 'o', '\0',
   /* "foxley-farm.co.uk", true */ 'f', 'o', 'x', 'l', 'e', 'y', '-', 'f', 'a', 'r', 'm', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "foxley-seeds.co.uk", true */ 'f', 'o', 'x', 'l', 'e', 'y', '-', 's', 'e', 'e', 'd', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "foxleyseeds.co.uk", true */ 'f', 'o', 'x', 'l', 'e', 'y', 's', 'e', 'e', 'd', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "fpy.cz", true */ 'f', 'p', 'y', '.', 'c', 'z', '\0',
   /* "fr.search.yahoo.com", false */ 'f', 'r', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "frack.nl", true */ 'f', 'r', 'a', 'c', 'k', '.', 'n', 'l', '\0',
@@ -4283,30 +4284,28 @@ static const char kSTSHostTable[] = {
   /* "fsbturton.com", true */ 'f', 's', 'b', 't', 'u', 'r', 't', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "fsf.moe", true */ 'f', 's', 'f', '.', 'm', 'o', 'e', '\0',
   /* "fsfi.is", true */ 'f', 's', 'f', 'i', '.', 'i', 's', '\0',
   /* "fsinf.at", true */ 'f', 's', 'i', 'n', 'f', '.', 'a', 't', '\0',
   /* "fsm2016.org", true */ 'f', 's', 'm', '2', '0', '1', '6', '.', 'o', 'r', 'g', '\0',
   /* "fspphoto.com", true */ 'f', 's', 'p', 'p', 'h', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "ftc.gov", false */ 'f', 't', 'c', '.', 'g', 'o', 'v', '\0',
   /* "ftccomplaintassistant.gov", true */ 'f', 't', 'c', 'c', 'o', 'm', 'p', 'l', 'a', 'i', 'n', 't', 'a', 's', 's', 'i', 's', 't', 'a', 'n', 't', '.', 'g', 'o', 'v', '\0',
-  /* "ftctele.com", true */ 'f', 't', 'c', 't', 'e', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fteproxy.org", true */ 'f', 't', 'e', 'p', 'r', 'o', 'x', 'y', '.', 'o', 'r', 'g', '\0',
   /* "ftrsecure.com", true */ 'f', 't', 'r', 's', 'e', 'c', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fuckav.ru", true */ 'f', 'u', 'c', 'k', 'a', 'v', '.', 'r', 'u', '\0',
   /* "fuckgfw233.org", true */ 'f', 'u', 'c', 'k', 'g', 'f', 'w', '2', '3', '3', '.', 'o', 'r', 'g', '\0',
   /* "fugle.de", true */ 'f', 'u', 'g', 'l', 'e', '.', 'd', 'e', '\0',
   /* "fuglede.dk", true */ 'f', 'u', 'g', 'l', 'e', 'd', 'e', '.', 'd', 'k', '\0',
   /* "fukushima-web.com", true */ 'f', 'u', 'k', 'u', 's', 'h', 'i', 'm', 'a', '-', 'w', 'e', 'b', '.', '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',
   /* "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',
-  /* "fundacionhijosdelsol.org", true */ 'f', 'u', 'n', 'd', 'a', 'c', 'i', 'o', 'n', 'h', 'i', 'j', 'o', 's', 'd', 'e', 'l', 's', 'o', 'l', '.', 'o', 'r', 'g', '\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',
   /* "funktionel.co", true */ 'f', 'u', 'n', 'k', 't', 'i', 'o', 'n', 'e', 'l', '.', 'c', 'o', '\0',
   /* "funnyang.com", true */ 'f', 'u', 'n', 'n', 'y', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "furgo.love", true */ 'f', 'u', 'r', 'g', 'o', '.', 'l', 'o', 'v', 'e', '\0',
   /* "furkancaliskan.com", true */ 'f', 'u', 'r', 'k', 'a', 'n', 'c', 'a', 'l', 'i', 's', 'k', 'a', 'n', '.', 'c', 'o', 'm', '\0',
@@ -4419,16 +4418,17 @@ static const char kSTSHostTable[] = {
   /* "gautvedt.no", true */ 'g', 'a', 'u', 't', 'v', 'e', 'd', 't', '.', 'n', 'o', '\0',
   /* "gavick.com", true */ 'g', 'a', 'v', 'i', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "gaytorrent.ru", true */ 'g', 'a', 'y', 't', 'o', 'r', 'r', 'e', 'n', 't', '.', 'r', 'u', '\0',
   /* "gazee.net", true */ 'g', 'a', 'z', 'e', 'e', '.', 'n', 'e', 't', '\0',
   /* "gc-mc.de", true */ 'g', 'c', '-', 'm', 'c', '.', 'd', 'e', '\0',
   /* "gc.net", true */ 'g', 'c', '.', 'n', 'e', 't', '\0',
   /* "gchq.wtf", true */ 'g', 'c', 'h', 'q', '.', 'w', 't', 'f', '\0',
   /* "gcs-ventures.com", true */ 'g', 'c', 's', '-', 'v', 'e', 'n', 't', 'u', 'r', 'e', 's', '.', 'c', 'o', 'm', '\0',
+  /* "gcsepod.com", true */ 'g', 'c', 's', 'e', 'p', 'o', 'd', '.', 'c', 'o', 'm', '\0',
   /* "gdax.com", true */ 'g', 'd', 'a', 'x', '.', 'c', 'o', 'm', '\0',
   /* "gdegem.org", true */ 'g', 'd', 'e', 'g', 'e', 'm', '.', 'o', 'r', 'g', '\0',
   /* "gdutnic.com", true */ 'g', 'd', 'u', 't', 'n', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "gdv.me", true */ 'g', 'd', 'v', '.', 'm', 'e', '\0',
   /* "ge1.me", false */ 'g', 'e', '1', '.', 'm', 'e', '\0',
   /* "ge3k.net", false */ 'g', 'e', '3', 'k', '.', 'n', 'e', 't', '\0',
   /* "gearset.com", true */ 'g', 'e', 'a', 'r', 's', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "geblitzt.de", true */ 'g', 'e', 'b', 'l', 'i', 't', 'z', 't', '.', 'd', 'e', '\0',
@@ -4465,17 +4465,16 @@ static const char kSTSHostTable[] = {
   /* "generic.cx", true */ 'g', 'e', 'n', 'e', 'r', 'i', 'c', '.', 'c', 'x', '\0',
   /* "genesiseureka.com", true */ 'g', 'e', 'n', 'e', 's', 'i', 's', 'e', 'u', 'r', 'e', 'k', 'a', '.', 'c', 'o', 'm', '\0',
   /* "genie-seiner-generation.de", true */ 'g', 'e', 'n', 'i', 'e', '-', 's', 'e', 'i', 'n', 'e', 'r', '-', 'g', 'e', 'n', 'e', 'r', 'a', 't', 'i', 'o', 'n', '.', 'd', 'e', '\0',
   /* "genossen.ru", true */ 'g', 'e', 'n', 'o', 's', 's', 'e', 'n', '.', 'r', 'u', '\0',
   /* "genshiken-itb.org", true */ 'g', 'e', 'n', 's', 'h', 'i', 'k', 'e', 'n', '-', 'i', 't', 'b', '.', 'o', 'r', 'g', '\0',
   /* "genshiken.org", true */ 'g', 'e', 'n', 's', 'h', 'i', 'k', 'e', 'n', '.', 'o', 'r', 'g', '\0',
   /* "genslerapps.com", true */ 'g', 'e', 'n', 's', 'l', 'e', 'r', 'a', 'p', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "genslerwisp.com", true */ 'g', 'e', 'n', 's', 'l', 'e', 'r', 'w', 'i', 's', 'p', '.', 'c', 'o', 'm', '\0',
-  /* "genuxtsg.com", true */ 'g', 'e', 'n', 'u', 'x', 't', 's', 'g', '.', 'c', 'o', 'm', '\0',
   /* "genxbeats.com", true */ 'g', 'e', 'n', 'x', 'b', 'e', 'a', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "genxnotes.com", true */ 'g', 'e', 'n', 'x', 'n', 'o', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "genyhitch.com", true */ 'g', 'e', 'n', 'y', 'h', 'i', 't', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "geoip.fedoraproject.org", true */ 'g', 'e', 'o', 'i', 'p', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "geoip.stg.fedoraproject.org", true */ 'g', 'e', 'o', 'i', 'p', '.', 's', 't', 'g', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "geolad.com", false */ 'g', 'e', 'o', 'l', 'a', 'd', '.', 'c', 'o', 'm', '\0',
   /* "georgemaschke.com", true */ 'g', 'e', 'o', 'r', 'g', 'e', 'm', 'a', 's', 'c', 'h', 'k', 'e', '.', 'c', 'o', 'm', '\0',
   /* "georgemaschke.net", true */ 'g', 'e', 'o', 'r', 'g', 'e', 'm', 'a', 's', 'c', 'h', 'k', 'e', '.', 'n', 'e', 't', '\0',
@@ -4537,17 +4536,16 @@ static const char kSTSHostTable[] = {
   /* "ggservers.com", true */ 'g', 'g', 's', 'e', 'r', 'v', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "ggss.cf", true */ 'g', 'g', 's', 's', '.', 'c', 'f', '\0',
   /* "ggss.ml", true */ 'g', 'g', 's', 's', '.', 'm', 'l', '\0',
   /* "ggx.us", true */ 'g', 'g', 'x', '.', 'u', 's', '\0',
   /* "gh16.com.ar", true */ 'g', 'h', '1', '6', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
   /* "gha.st", true */ 'g', 'h', 'a', '.', 's', 't', '\0',
   /* "ghcif.de", true */ 'g', 'h', 'c', 'i', 'f', '.', 'd', 'e', '\0',
   /* "gheorghe-sarcov.ga", true */ 'g', 'h', 'e', 'o', 'r', 'g', 'h', 'e', '-', 's', 'a', 'r', 'c', 'o', 'v', '.', 'g', 'a', '\0',
-  /* "ghostblog.info", true */ 'g', 'h', 'o', 's', 't', 'b', 'l', 'o', 'g', '.', 'i', 'n', 'f', 'o', '\0',
   /* "ghostwritershigh.com", true */ 'g', 'h', 'o', 's', 't', 'w', 'r', 'i', 't', 'e', 'r', 's', 'h', 'i', 'g', 'h', '.', 'c', 'o', 'm', '\0',
   /* "ghrelinblocker.info", true */ 'g', 'h', 'r', 'e', 'l', 'i', 'n', 'b', 'l', 'o', 'c', 'k', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0',
   /* "giacomodrago.com", true */ 'g', 'i', 'a', 'c', 'o', 'm', 'o', 'd', 'r', 'a', 'g', 'o', '.', 'c', 'o', 'm', '\0',
   /* "giacomodrago.it", true */ 'g', 'i', 'a', 'c', 'o', 'm', 'o', 'd', 'r', 'a', 'g', 'o', '.', 'i', 't', '\0',
   /* "giacomopelagatti.it", true */ 'g', 'i', 'a', 'c', 'o', 'm', 'o', 'p', 'e', 'l', 'a', 'g', 'a', 't', 't', 'i', '.', 'i', 't', '\0',
   /* "giakki.eu", true */ 'g', 'i', 'a', 'k', 'k', 'i', '.', 'e', 'u', '\0',
   /* "gianproperties.com", true */ 'g', 'i', 'a', 'n', 'p', 'r', 'o', 'p', 'e', 'r', 't', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "giant-powerfit.co.uk", true */ 'g', 'i', 'a', 'n', 't', '-', 'p', 'o', 'w', 'e', 'r', 'f', 'i', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
@@ -5294,17 +5292,19 @@ static const char kSTSHostTable[] = {
   /* "hyper-matrix.org", true */ 'h', 'y', 'p', 'e', 'r', '-', 'm', 'a', 't', 'r', 'i', 'x', '.', 'o', 'r', 'g', '\0',
   /* "hyper-text.org", true */ 'h', 'y', 'p', 'e', 'r', '-', 't', 'e', 'x', 't', '.', 'o', 'r', 'g', '\0',
   /* "hyper69.com", true */ 'h', 'y', 'p', 'e', 'r', '6', '9', '.', 'c', 'o', 'm', '\0',
   /* "hypotecnicentrum.cz", true */ 'h', 'y', 'p', 'o', 't', 'e', 'c', 'n', 'i', 'c', 'e', 'n', 't', 'r', 'u', 'm', '.', 'c', 'z', '\0',
   /* "hzsh.xyz", true */ 'h', 'z', 's', 'h', '.', 'x', 'y', 'z', '\0',
   /* "i--b.com", true */ 'i', '-', '-', 'b', '.', 'c', 'o', 'm', '\0',
   /* "i-stats.net", true */ 'i', '-', 's', 't', 'a', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "i10z.com", false */ 'i', '1', '0', 'z', '.', 'c', 'o', 'm', '\0',
+  /* "i1314.gdn", true */ 'i', '1', '3', '1', '4', '.', 'g', 'd', 'n', '\0',
   /* "i5y.co.uk", true */ 'i', '5', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
+  /* "i95.me", false */ 'i', '9', '5', '.', 'm', 'e', '\0',
   /* "iactu.info", true */ 'i', 'a', 'c', 't', 'u', '.', 'i', 'n', 'f', 'o', '\0',
   /* "iainsimms.me", true */ 'i', 'a', 'i', 'n', 's', 'i', 'm', 'm', 's', '.', 'm', 'e', '\0',
   /* "iamcarrico.com", true */ 'i', 'a', 'm', 'c', 'a', 'r', 'r', 'i', 'c', 'o', '.', 'c', 'o', 'm', '\0',
   /* "iamusingtheinter.net", true */ 'i', 'a', 'm', 'u', 's', 'i', 'n', 'g', 't', 'h', 'e', 'i', 'n', 't', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "ian.sh", true */ 'i', 'a', 'n', '.', 's', 'h', '\0',
   /* "iandouglasscott.com", true */ 'i', 'a', 'n', 'd', 'o', 'u', 'g', 'l', 'a', 's', 's', 'c', 'o', 't', 't', '.', 'c', 'o', 'm', '\0',
   /* "ianix.com", true */ 'i', 'a', 'n', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "iavian.com", true */ 'i', 'a', 'v', 'i', 'a', 'n', '.', 'c', 'o', 'm', '\0',
@@ -5365,25 +5365,27 @@ static const char kSTSHostTable[] = {
   /* "ierna.com", true */ 'i', 'e', 'r', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "ieval.ro", true */ 'i', 'e', 'v', 'a', 'l', '.', 'r', 'o', '\0',
   /* "ifad.org", true */ 'i', 'f', 'a', 'd', '.', 'o', 'r', 'g', '\0',
   /* "ifasec.de", false */ 'i', 'f', 'a', 's', 'e', 'c', '.', 'd', 'e', '\0',
   /* "ifcfg.me", true */ 'i', 'f', 'c', 'f', 'g', '.', 'm', 'e', '\0',
   /* "ifconfig.co", true */ 'i', 'f', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', '\0',
   /* "iflare.de", true */ 'i', 'f', 'l', 'a', 'r', 'e', '.', 'd', 'e', '\0',
   /* "iformbuilder.com", false */ 'i', 'f', 'o', 'r', 'm', 'b', 'u', 'i', 'l', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
+  /* "ifoss.me", true */ 'i', 'f', 'o', 's', 's', '.', 'm', 'e', '\0',
   /* "ifsac.org", true */ 'i', 'f', 's', 'a', 'c', '.', 'o', 'r', 'g', '\0',
   /* "ifsr.de", true */ 'i', 'f', 's', 'r', '.', 'd', 'e', '\0',
   /* "iftrue.de", true */ 'i', 'f', 't', 'r', 'u', 'e', '.', 'd', 'e', '\0',
   /* "ifxor.com", true */ 'i', 'f', 'x', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "igforums.com", true */ 'i', 'g', 'f', 'o', 'r', 'u', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "iggprivate.com", true */ 'i', 'g', 'g', 'p', 'r', 'i', 'v', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "iggsoft.com", true */ 'i', 'g', 'g', 's', 'o', 'f', 't', '.', 'c', 'o', 'm', '\0',
   /* "iggsoftware.com", true */ 'i', 'g', 'g', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "igiftcards.nl", true */ 'i', 'g', 'i', 'f', 't', 'c', 'a', 'r', 'd', 's', '.', 'n', 'l', '\0',
+  /* "igk.de", true */ 'i', 'g', 'k', '.', 'd', 'e', '\0',
   /* "ignace72.eu", true */ 'i', 'g', 'n', 'a', 'c', 'e', '7', '2', '.', 'e', 'u', '\0',
   /* "ignitedmindz.in", true */ 'i', 'g', 'n', 'i', 't', 'e', 'd', 'm', 'i', 'n', 'd', 'z', '.', 'i', 'n', '\0',
   /* "igotoffer.com", true */ 'i', 'g', 'o', 't', 'o', 'f', 'f', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "igrivi.com", true */ 'i', 'g', 'r', 'i', 'v', 'i', '.', 'c', 'o', 'm', '\0',
   /* "ihkk.net", true */ 'i', 'h', 'k', 'k', '.', 'n', 'e', 't', '\0',
   /* "ihostup.net", true */ 'i', 'h', 'o', 's', 't', 'u', 'p', '.', 'n', 'e', 't', '\0',
   /* "ihsbsd.me", true */ 'i', 'h', 's', 'b', 's', 'd', '.', 'm', 'e', '\0',
   /* "iirii.com", true */ 'i', 'i', 'r', 'i', 'i', '.', 'c', 'o', 'm', '\0',
@@ -5412,17 +5414,16 @@ static const char kSTSHostTable[] = {
   /* "iltisim.ch", true */ 'i', 'l', 't', 'i', 's', 'i', 'm', '.', 'c', 'h', '\0',
   /* "iluvscotland.co.uk", true */ 'i', 'l', 'u', 'v', 's', 'c', 'o', 't', 'l', 'a', 'n', 'd', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "im-c-shop.com", true */ 'i', 'm', '-', 'c', '-', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "im2net.com", true */ 'i', 'm', '2', 'n', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "imagefu.com", true */ 'i', 'm', 'a', 'g', 'e', 'f', 'u', '.', 'c', 'o', 'm', '\0',
   /* "imagescostumes.com", true */ 'i', 'm', 'a', 'g', 'e', 's', 'c', 'o', 's', 't', 'u', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "imaginary.ca", true */ 'i', 'm', 'a', 'g', 'i', 'n', 'a', 'r', 'y', '.', 'c', 'a', '\0',
   /* "imagr.io", true */ 'i', 'm', 'a', 'g', 'r', '.', 'i', 'o', '\0',
-  /* "imanolbarba.net", true */ 'i', 'm', 'a', 'n', 'o', 'l', 'b', 'a', 'r', 'b', 'a', '.', 'n', 'e', 't', '\0',
   /* "imanudin.net", true */ 'i', 'm', 'a', 'n', 'u', 'd', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "imbrian.org", true */ 'i', 'm', 'b', 'r', 'i', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "imbushuo.net", true */ 'i', 'm', 'b', 'u', 's', 'h', 'u', 'o', '.', 'n', 'e', 't', '\0',
   /* "imed.pt", true */ 'i', 'm', 'e', 'd', '.', 'p', 't', '\0',
   /* "imedi.co.uk", true */ 'i', 'm', 'e', 'd', 'i', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "imedi.it", true */ 'i', 'm', 'e', 'd', 'i', '.', 'i', 't', '\0',
   /* "imedikament.de", true */ 'i', 'm', 'e', 'd', 'i', 'k', 'a', 'm', 'e', 'n', 't', '.', 'd', 'e', '\0',
   /* "imeds.pl", true */ 'i', 'm', 'e', 'd', 's', '.', 'p', 'l', '\0',
@@ -5563,17 +5564,16 @@ static const char kSTSHostTable[] = {
   /* "internetdentalalliance.com", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'd', 'e', 'n', 't', 'a', 'l', 'a', 'l', 'l', 'i', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "internethering.de", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'h', 'e', 'r', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "internetofdon.gs", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'o', 'f', 'd', 'o', 'n', '.', 'g', 's', '\0',
   /* "internetpro.me", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'p', 'r', 'o', '.', 'm', 'e', '\0',
   /* "internetstaff.com", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 's', 't', 'a', 'f', 'f', '.', 'c', 'o', 'm', '\0',
   /* "internetzentrale.net", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'z', 'e', 'n', 't', 'r', 'a', 'l', 'e', '.', 'n', 'e', 't', '\0',
   /* "interociter-enterprises.com", true */ 'i', 'n', 't', 'e', 'r', 'o', 'c', 'i', 't', 'e', 'r', '-', 'e', 'n', 't', 'e', 'r', 'p', 'r', 'i', 's', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "interviewpipeline.co.uk", true */ 'i', 'n', 't', 'e', 'r', 'v', 'i', 'e', 'w', 'p', 'i', 'p', 'e', 'l', 'i', 'n', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
-  /* "intervisteperstrada.com", true */ 'i', 'n', 't', 'e', 'r', 'v', 'i', 's', 't', 'e', 'p', 'e', 'r', 's', 't', 'r', 'a', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "interways.de", true */ 'i', 'n', 't', 'e', 'r', 'w', 'a', 'y', 's', '.', 'd', 'e', '\0',
   /* "intheater.de", true */ 'i', 'n', 't', 'h', 'e', 'a', 't', 'e', 'r', '.', 'd', 'e', '\0',
   /* "inthepicture.com", true */ 'i', 'n', 't', 'h', 'e', 'p', 'i', 'c', 't', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "inthouse.cloud", true */ 'i', 'n', 't', 'h', 'o', 'u', 's', 'e', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "intimateperrierjouet.com", true */ 'i', 'n', 't', 'i', 'm', 'a', 't', 'e', 'p', 'e', 'r', 'r', 'i', 'e', 'r', 'j', 'o', 'u', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "intocities.de", false */ 'i', 'n', 't', 'o', 'c', 'i', 't', 'i', 'e', 's', '.', 'd', 'e', '\0',
   /* "inton.biz", true */ 'i', 'n', 't', 'o', 'n', '.', 'b', 'i', 'z', '\0',
   /* "intramanager.co.uk", true */ 'i', 'n', 't', 'r', 'a', 'm', 'a', 'n', 'a', 'g', 'e', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
@@ -5712,21 +5712,19 @@ static const char kSTSHostTable[] = {
   /* "its-gutachten.de", true */ 'i', 't', 's', '-', 'g', 'u', 't', 'a', 'c', 'h', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "its-schindler.de", true */ 'i', 't', 's', '-', 's', 'c', 'h', 'i', 'n', 'd', 'l', 'e', 'r', '.', 'd', 'e', '\0',
   /* "its-v.de", true */ 'i', 't', 's', '-', 'v', '.', 'd', 'e', '\0',
   /* "itsadog.co.uk", true */ 'i', 't', 's', 'a', 'd', 'o', 'g', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "itsagadget.com", true */ 'i', 't', 's', 'a', 'g', 'a', 'd', 'g', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "itsatrap.nl", true */ 'i', 't', 's', 'a', 't', 'r', 'a', 'p', '.', 'n', 'l', '\0',
   /* "itsecguy.com", true */ 'i', 't', 's', 'e', 'c', 'g', 'u', 'y', '.', 'c', 'o', 'm', '\0',
   /* "itsg-faq.de", true */ 'i', 't', 's', 'g', '-', 'f', 'a', 'q', '.', 'd', 'e', '\0',
-  /* "itskayla.com", true */ 'i', 't', 's', 'k', 'a', 'y', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "itsok.de", true */ 'i', 't', 's', 'o', 'k', '.', 'd', 'e', '\0',
   /* "itspawned.com", true */ 'i', 't', 's', 'p', 'a', 'w', 'n', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "itspersonaltraining.nl", true */ 'i', 't', 's', 'p', 'e', 'r', 's', 'o', 'n', 'a', 'l', 't', 'r', 'a', 'i', 'n', 'i', 'n', 'g', '.', 'n', 'l', '\0',
-  /* "itsryan.com", true */ 'i', 't', 's', 'r', 'y', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "itu2015.de", true */ 'i', 't', 'u', '2', '0', '1', '5', '.', 'd', 'e', '\0',
   /* "iuscommunity.org", true */ 'i', 'u', 's', 'c', 'o', 'm', 'm', 'u', 'n', 'i', 't', 'y', '.', 'o', 'r', 'g', '\0',
   /* "ivancacic.com", true */ 'i', 'v', 'a', 'n', 'c', 'a', 'c', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "ivi-fertilite.fr", true */ 'i', 'v', 'i', '-', 'f', 'e', 'r', 't', 'i', 'l', 'i', 't', 'e', '.', 'f', 'r', '\0',
   /* "ivi-fruchtbarkeit.de", true */ 'i', 'v', 'i', '-', 'f', 'r', 'u', 'c', 'h', 't', 'b', 'a', 'r', 'k', 'e', 'i', 't', '.', 'd', 'e', '\0',
   /* "ivi.com.ar", true */ 'i', 'v', 'i', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
   /* "ivi.com.pa", true */ 'i', 'v', 'i', '.', 'c', 'o', 'm', '.', 'p', 'a', '\0',
   /* "ivi.mx", true */ 'i', 'v', 'i', '.', 'm', 'x', '\0',
@@ -6014,16 +6012,17 @@ static const char kSTSHostTable[] = {
   /* "json-viewer.com", true */ 'j', 's', 'o', 'n', '-', 'v', 'i', 'e', 'w', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "jsteward.moe", true */ 'j', 's', 't', 'e', 'w', 'a', 'r', 'd', '.', 'm', 'o', 'e', '\0',
   /* "jstore.ch", true */ 'j', 's', 't', 'o', 'r', 'e', '.', 'c', 'h', '\0',
   /* "jthackery.com", false */ 'j', 't', 'h', 'a', 'c', 'k', 'e', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "jtslay.com", true */ 'j', 't', 's', 'l', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "jualautoclave.com", true */ 'j', 'u', 'a', 'l', 'a', 'u', 't', 'o', 'c', 'l', 'a', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "jubileum.online", true */ 'j', 'u', 'b', 'i', 'l', 'e', 'u', 'm', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "juch.cc", true */ 'j', 'u', 'c', 'h', '.', 'c', 'c', '\0',
+  /* "juchit.at", true */ 'j', 'u', 'c', 'h', 'i', 't', '.', 'a', 't', '\0',
   /* "judoprodeti.cz", true */ 'j', 'u', 'd', 'o', 'p', 'r', 'o', 'd', 'e', 't', 'i', '.', 'c', 'z', '\0',
   /* "juergenhecht.de", true */ 'j', 'u', 'e', 'r', 'g', 'e', 'n', 'h', 'e', 'c', 'h', 't', '.', 'd', 'e', '\0',
   /* "jugendsuenden.info", true */ 'j', 'u', 'g', 'e', 'n', 'd', 's', 'u', 'e', 'n', 'd', 'e', 'n', '.', 'i', 'n', 'f', 'o', '\0',
   /* "juhakoho.com", true */ 'j', 'u', 'h', 'a', 'k', 'o', 'h', 'o', '.', 'c', 'o', 'm', '\0',
   /* "juliangonggrijp.com", true */ 'j', 'u', 'l', 'i', 'a', 'n', 'g', 'o', 'n', 'g', 'g', 'r', 'i', 'j', 'p', '.', 'c', 'o', 'm', '\0',
   /* "julianmeyer.de", true */ 'j', 'u', 'l', 'i', 'a', 'n', 'm', 'e', 'y', 'e', 'r', '.', 'd', 'e', '\0',
   /* "juliansimioni.com", true */ 'j', 'u', 'l', 'i', 'a', 'n', 's', 'i', 'm', 'i', 'o', 'n', 'i', '.', 'c', 'o', 'm', '\0',
   /* "julibear.com", true */ 'j', 'u', 'l', 'i', 'b', 'e', 'a', 'r', '.', 'c', 'o', 'm', '\0',
@@ -6065,27 +6064,27 @@ static const char kSTSHostTable[] = {
   /* "k-tube.com", true */ 'k', '-', 't', 'u', 'b', 'e', '.', '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',
   /* "kabuabc.com", true */ 'k', 'a', 'b', 'u', 'a', 'b', 'c', '.', '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',
   /* "kaela.design", true */ 'k', 'a', 'e', 'l', 'a', '.', 'd', 'e', 's', 'i', 'g', 'n', '\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',
   /* "kainz.be", true */ 'k', 'a', 'i', 'n', 'z', '.', 'b', 'e', '\0',
   /* "kairion.de", true */ 'k', 'a', 'i', 'r', 'i', 'o', 'n', '.', 'd', 'e', '\0',
   /* "kaiusaltd.com", true */ 'k', 'a', 'i', 'u', 's', 'a', 'l', 't', 'd', '.', 'c', 'o', 'm', '\0',
-  /* "kaizenreporting.com", true */ 'k', 'a', 'i', 'z', 'e', 'n', 'r', 'e', 'p', 'o', 'r', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "kaizeronion.com", true */ 'k', 'a', 'i', 'z', 'e', 'r', 'o', 'n', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "kajak.land", true */ 'k', 'a', 'j', 'a', 'k', '.', 'l', 'a', 'n', 'd', '\0',
   /* "kakao-karten.de", true */ 'k', 'a', 'k', 'a', 'o', '-', 'k', 'a', 'r', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "kakaomilchkuh.de", true */ 'k', 'a', 'k', 'a', 'o', 'm', 'i', 'l', 'c', 'h', 'k', 'u', 'h', '.', 'd', 'e', '\0',
   /* "kakaravaara.fi", true */ 'k', 'a', 'k', 'a', 'r', 'a', 'v', 'a', 'a', 'r', 'a', '.', 'f', 'i', '\0',
   /* "kalender.com", true */ 'k', 'a', 'l', 'e', 'n', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "kalevlamps.co.uk", true */ 'k', 'a', 'l', 'e', 'v', 'l', 'a', 'm', 'p', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "kaliaa.fi", true */ 'k', 'a', 'l', 'i', 'a', 'a', '.', 'f', 'i', '\0',
@@ -6200,17 +6199,16 @@ static const char kSTSHostTable[] = {
   /* "kenners.org", true */ 'k', 'e', 'n', 'n', 'e', 'r', 's', '.', 'o', 'r', 'g', '\0',
   /* "kennethaasan.no", true */ 'k', 'e', 'n', 'n', 'e', 't', 'h', 'a', 'a', 's', 'a', 'n', '.', 'n', 'o', '\0',
   /* "kennethlim.me", true */ 'k', 'e', 'n', 'n', 'e', 't', 'h', 'l', 'i', 'm', '.', 'm', 'e', '\0',
   /* "kenoschwalb.com", true */ 'k', 'e', 'n', 'o', 's', 'c', 'h', 'w', 'a', 'l', 'b', '.', 'c', 'o', 'm', '\0',
   /* "kentacademiestrust.org.uk", true */ 'k', 'e', 'n', 't', 'a', 'c', 'a', 'd', 'e', 'm', 'i', 'e', 's', 't', 'r', 'u', 's', 't', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "kentec.net", true */ 'k', 'e', 'n', 't', 'e', 'c', '.', 'n', 'e', 't', '\0',
   /* "keops-spine.fr", true */ 'k', 'e', 'o', 'p', 's', '-', 's', 'p', 'i', 'n', 'e', '.', 'f', 'r', '\0',
   /* "keops-spine.us", true */ 'k', 'e', 'o', 'p', 's', '-', 's', 'p', 'i', 'n', 'e', '.', 'u', 's', '\0',
-  /* "kepkonyvtar.hu", true */ 'k', 'e', 'p', 'k', 'o', 'n', 'y', 'v', 't', 'a', 'r', '.', 'h', 'u', '\0',
   /* "kerforhome.com", true */ 'k', 'e', 'r', 'f', 'o', 'r', 'h', 'o', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "kermadec.com", true */ 'k', 'e', 'r', 'm', 'a', 'd', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "kernel-error.de", true */ 'k', 'e', 'r', 'n', 'e', 'l', '-', 'e', 'r', 'r', 'o', 'r', '.', 'd', 'e', '\0',
   /* "kerrfrequencycombs.org", true */ 'k', 'e', 'r', 'r', 'f', 'r', 'e', 'q', 'u', 'e', 'n', 'c', 'y', 'c', 'o', 'm', 'b', 's', '.', 'o', 'r', 'g', '\0',
   /* "keskeces.com", true */ 'k', 'e', 's', 'k', 'e', 'c', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "kesteren.com", true */ 'k', 'e', 's', 't', 'e', 'r', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "kesteren.org", true */ 'k', 'e', 's', 't', 'e', 'r', 'e', 'n', '.', 'o', 'r', 'g', '\0',
   /* "ketosecology.co.uk", true */ 'k', 'e', 't', 'o', 's', 'e', 'c', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
@@ -6288,17 +6286,16 @@ static const char kSTSHostTable[] = {
   /* "kirei.se", true */ 'k', 'i', 'r', 'e', 'i', '.', 's', 'e', '\0',
   /* "kirinas.com", true */ 'k', 'i', 'r', 'i', 'n', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "kirkovsky.com", true */ 'k', 'i', 'r', 'k', 'o', 'v', 's', 'k', 'y', '.', 'c', 'o', 'm', '\0',
   /* "kirsch-gestaltung.de", true */ 'k', 'i', 'r', 's', 'c', 'h', '-', 'g', 'e', 's', 't', 'a', 'l', 't', 'u', 'n', 'g', '.', 'd', 'e', '\0',
   /* "kirschbaum.me", true */ 'k', 'i', 'r', 's', 'c', 'h', 'b', 'a', 'u', 'm', '.', 'm', 'e', '\0',
   /* "kirstenbos.ca", true */ 'k', 'i', 'r', 's', 't', 'e', 'n', 'b', 'o', 's', '.', 'c', 'a', '\0',
   /* "kirstin-peters.de", true */ 'k', 'i', 'r', 's', 't', 'i', 'n', '-', 'p', 'e', 't', 'e', 'r', 's', '.', 'd', 'e', '\0',
   /* "kis-toitoidixi.de", true */ 'k', 'i', 's', '-', 't', 'o', 'i', 't', 'o', 'i', 'd', 'i', 'x', 'i', '.', 'd', 'e', '\0',
-  /* "kisalt.im", true */ 'k', 'i', 's', 'a', 'l', 't', '.', 'i', 'm', '\0',
   /* "kissflow.com", true */ 'k', 'i', 's', 's', 'f', 'l', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "kisskiss.ch", true */ 'k', 'i', 's', 's', 'k', 'i', 's', 's', '.', 'c', 'h', '\0',
   /* "kisstyle.ru", true */ 'k', 'i', 's', 's', 't', 'y', 'l', 'e', '.', 'r', 'u', '\0',
   /* "kisun.co.jp", true */ 'k', 'i', 's', 'u', 'n', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "kita.id", true */ 'k', 'i', 't', 'a', '.', 'i', 'd', '\0',
   /* "kitabgaul.com", true */ 'k', 'i', 't', 'a', 'b', 'g', 'a', 'u', 'l', '.', 'c', 'o', 'm', '\0',
   /* "kitsostech.com", true */ 'k', 'i', 't', 's', 'o', 's', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "kittmedia.com", true */ 'k', 'i', 't', 't', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
@@ -6377,17 +6374,16 @@ static const char kSTSHostTable[] = {
   /* "kolmann.eu", true */ 'k', 'o', 'l', 'm', 'a', 'n', 'n', '.', 'e', 'u', '\0',
   /* "koluke.co", true */ 'k', 'o', 'l', 'u', 'k', 'e', '.', 'c', 'o', '\0',
   /* "koluke.com", true */ 'k', 'o', 'l', 'u', 'k', 'e', '.', 'c', 'o', 'm', '\0',
   /* "komget.net", true */ 'k', 'o', 'm', 'g', 'e', 't', '.', 'n', 'e', 't', '\0',
   /* "komicloud.com", true */ 'k', 'o', 'm', 'i', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "komidoc.com", true */ 'k', 'o', 'm', 'i', 'd', 'o', 'c', '.', 'c', 'o', 'm', '\0',
   /* "komiksbaza.pl", true */ 'k', 'o', 'm', 'i', 'k', 's', 'b', 'a', 'z', 'a', '.', 'p', 'l', '\0',
   /* "komischkeszeug.de", true */ 'k', 'o', 'm', 'i', 's', 'c', 'h', 'k', 'e', 's', 'z', 'e', 'u', 'g', '.', 'd', 'e', '\0',
-  /* "kommune42.org", true */ 'k', 'o', 'm', 'm', 'u', 'n', 'e', '4', '2', '.', 'o', 'r', 'g', '\0',
   /* "komoju.com", true */ 'k', 'o', 'm', 'o', 'j', 'u', '.', 'c', 'o', 'm', '\0',
   /* "kompetenzkurs.de", true */ 'k', 'o', 'm', 'p', 'e', 't', 'e', 'n', 'z', 'k', 'u', 'r', 's', '.', 'd', 'e', '\0',
   /* "kon-sil.de", true */ 'k', 'o', 'n', '-', 's', 'i', 'l', '.', 'd', 'e', '\0',
   /* "konata.us", true */ 'k', 'o', 'n', 'a', 't', 'a', '.', 'u', 's', '\0',
   /* "koniecfica.sk", true */ 'k', 'o', 'n', 'i', 'e', 'c', 'f', 'i', 'c', 'a', '.', 's', 'k', '\0',
   /* "konijntjes.nl", true */ 'k', 'o', 'n', 'i', 'j', 'n', 't', 'j', 'e', 's', '.', 'n', 'l', '\0',
   /* "konklone.com", true */ 'k', 'o', 'n', 'k', 'l', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "konkurs.ba", true */ 'k', 'o', 'n', 'k', 'u', 'r', 's', '.', 'b', 'a', '\0',
@@ -6523,17 +6519,16 @@ static const char kSTSHostTable[] = {
   /* "labourreedevergheas.fr", true */ 'l', 'a', 'b', 'o', 'u', 'r', 'r', 'e', 'e', 'd', 'e', 'v', 'e', 'r', 'g', 'h', 'e', 'a', 's', '.', 'f', 'r', '\0',
   /* "labradorpuppiesforsalebyregisteredlabradorbreeders.com", true */ 'l', 'a', 'b', 'r', 'a', 'd', 'o', 'r', 'p', 'u', 'p', 'p', 'i', 'e', 's', 'f', 'o', 'r', 's', 'a', 'l', 'e', 'b', 'y', 'r', 'e', 'g', 'i', 's', 't', 'e', 'r', 'e', 'd', 'l', 'a', 'b', 'r', 'a', 'd', 'o', 'r', 'b', 'r', 'e', 'e', 'd', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "labs.directory", true */ 'l', 'a', 'b', 's', '.', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', '\0',
   /* "lacasa.fr", true */ 'l', 'a', 'c', 'a', 's', 'a', '.', 'f', 'r', '\0',
   /* "lacasabelucci.com", true */ 'l', 'a', 'c', 'a', 's', 'a', 'b', 'e', 'l', 'u', 'c', 'c', 'i', '.', 'c', 'o', 'm', '\0',
   /* "lacasseroy.com", true */ 'l', 'a', 'c', 'a', 's', 's', 'e', 'r', 'o', 'y', '.', 'c', 'o', 'm', '\0',
   /* "lacaverne.nl", true */ 'l', 'a', 'c', 'a', 'v', 'e', 'r', 'n', 'e', '.', 'n', 'l', '\0',
   /* "lacentral.com", false */ 'l', 'a', 'c', 'e', 'n', 't', 'r', 'a', 'l', '.', 'c', 'o', 'm', '\0',
-  /* "lacicloud.net", true */ 'l', 'a', 'c', 'i', 'c', 'l', 'o', 'u', 'd', '.', 'n', 'e', 't', '\0',
   /* "lacledeslan.com", false */ 'l', 'a', 'c', 'l', 'e', 'd', 'e', 's', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "lacledeslan.ninja", true */ 'l', 'a', 'c', 'l', 'e', 'd', 'e', 's', 'l', 'a', 'n', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "lacocinadelila.com", true */ 'l', 'a', 'c', 'o', 'c', 'i', 'n', 'a', 'd', 'e', 'l', 'i', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "lacyc3.eu", true */ 'l', 'a', 'c', 'y', 'c', '3', '.', 'e', 'u', '\0',
   /* "ladbroke.net", true */ 'l', 'a', 'd', 'b', 'r', 'o', 'k', 'e', '.', 'n', 'e', 't', '\0',
   /* "laextra.mx", true */ 'l', 'a', 'e', 'x', 't', 'r', 'a', '.', 'm', 'x', '\0',
   /* "lafillepolyvalente.ca", true */ 'l', 'a', 'f', 'i', 'l', 'l', 'e', 'p', 'o', 'l', 'y', 'v', 'a', 'l', 'e', 'n', 't', 'e', '.', 'c', 'a', '\0',
   /* "lafillepolyvalente.com", true */ 'l', 'a', 'f', 'i', 'l', 'l', 'e', 'p', 'o', 'l', 'y', 'v', 'a', 'l', 'e', 'n', 't', 'e', '.', 'c', 'o', 'm', '\0',
@@ -6558,16 +6553,17 @@ static const char kSTSHostTable[] = {
   /* "lana.swedbank.se", true */ 'l', 'a', 'n', 'a', '.', 's', 'w', 'e', 'd', 'b', 'a', 'n', 'k', '.', 's', 'e', '\0',
   /* "lanbyte.se", true */ 'l', 'a', 'n', 'b', 'y', 't', 'e', '.', 's', 'e', '\0',
   /* "lancehoteis.com", true */ 'l', 'a', 'n', 'c', 'e', 'h', 'o', 't', 'e', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "lancehoteis.com.br", true */ 'l', 'a', 'n', 'c', 'e', 'h', 'o', 't', 'e', 'i', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "lancejames.com", true */ 'l', 'a', 'n', 'c', 'e', 'j', 'a', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "lancork.net", true */ 'l', 'a', 'n', 'c', 'o', 'r', 'k', '.', 'n', 'e', 't', '\0',
   /* "land.nrw", true */ 'l', 'a', 'n', 'd', '.', 'n', 'r', 'w', '\0',
   /* "landofelves.net", true */ 'l', 'a', 'n', 'd', 'o', 'f', 'e', 'l', 'v', 'e', 's', '.', 'n', 'e', 't', '\0',
+  /* "langatang.com", true */ 'l', 'a', 'n', 'g', 'a', 't', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "langbein.org", true */ 'l', 'a', 'n', 'g', 'b', 'e', 'i', 'n', '.', 'o', 'r', 'g', '\0',
   /* "langendries.eu", true */ 'l', 'a', 'n', 'g', 'e', 'n', 'd', 'r', 'i', 'e', 's', '.', 'e', 'u', '\0',
   /* "langguth.io", true */ 'l', 'a', 'n', 'g', 'g', 'u', 't', 'h', '.', 'i', 'o', '\0',
   /* "langly.fr", true */ 'l', 'a', 'n', 'g', 'l', 'y', '.', 'f', 'r', '\0',
   /* "langworth.com", true */ 'l', 'a', 'n', 'g', 'w', 'o', 'r', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "lansinoh.co.uk", true */ 'l', 'a', 'n', 's', 'i', 'n', 'o', 'h', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "lanuovariviera.it", true */ 'l', 'a', 'n', 'u', 'o', 'v', 'a', 'r', 'i', 'v', 'i', 'e', 'r', 'a', '.', 'i', 't', '\0',
   /* "laos.dating", true */ 'l', 'a', 'o', 's', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
@@ -6933,24 +6929,26 @@ static const char kSTSHostTable[] = {
   /* "loveisourweapon.com", true */ 'l', 'o', 'v', 'e', 'i', 's', 'o', 'u', 'r', 'w', 'e', 'a', 'p', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "lovelive.us", true */ 'l', 'o', 'v', 'e', 'l', 'i', 'v', 'e', '.', 'u', 's', '\0',
   /* "lovelivewiki.com", true */ 'l', 'o', 'v', 'e', 'l', 'i', 'v', 'e', 'w', 'i', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "lovemomiji.com", true */ 'l', 'o', 'v', 'e', 'm', 'o', 'm', 'i', 'j', 'i', '.', 'c', 'o', 'm', '\0',
   /* "lover-bg.com", true */ 'l', 'o', 'v', 'e', 'r', '-', 'b', 'g', '.', 'c', 'o', 'm', '\0',
   /* "loveyounastya.com", true */ 'l', 'o', 'v', 'e', 'y', 'o', 'u', 'n', 'a', 's', 't', 'y', 'a', '.', 'c', 'o', 'm', '\0',
   /* "lovingearth.co", true */ 'l', 'o', 'v', 'i', 'n', 'g', 'e', 'a', 'r', 't', 'h', '.', 'c', 'o', '\0',
   /* "lovingearth.net", true */ 'l', 'o', 'v', 'i', 'n', 'g', 'e', 'a', 'r', 't', 'h', '.', 'n', 'e', 't', '\0',
+  /* "lovizaim.ru", true */ 'l', 'o', 'v', 'i', 'z', 'a', 'i', 'm', '.', 'r', 'u', '\0',
   /* "lowhangingfruitgrabber.com", true */ 'l', 'o', 'w', 'h', 'a', 'n', 'g', 'i', 'n', 'g', 'f', 'r', 'u', 'i', 't', 'g', 'r', 'a', 'b', 'b', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "lowmagnitude.com", true */ 'l', 'o', 'w', 'm', 'a', 'g', 'n', 'i', 't', 'u', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "lowsidetna.com", true */ 'l', 'o', 'w', 's', 'i', 'd', 'e', 't', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "loxis.be", true */ 'l', 'o', 'x', 'i', 's', '.', 'b', 'e', '\0',
   /* "lpbk-bethel.de", false */ 'l', 'p', 'b', 'k', '-', 'b', 'e', 't', 'h', 'e', 'l', '.', 'd', 'e', '\0',
   /* "lpm-uk.com", true */ 'l', 'p', 'm', '-', 'u', 'k', '.', 'c', 'o', 'm', '\0',
   /* "ls-alarm.de", true */ 'l', 's', '-', 'a', 'l', 'a', 'r', 'm', '.', 'd', 'e', '\0',
   /* "ltba.org", true */ 'l', 't', 'b', 'a', '.', 'o', 'r', 'g', '\0',
+  /* "ltbytes.com", false */ 'l', 't', 'b', 'y', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "ltn-tom-morel.fr", true */ 'l', 't', 'n', '-', 't', 'o', 'm', '-', 'm', 'o', 'r', 'e', 'l', '.', 'f', 'r', '\0',
   /* "lubot.net", false */ 'l', 'u', 'b', 'o', 't', '.', 'n', 'e', 't', '\0',
   /* "lucaterzini.com", true */ 'l', 'u', 'c', 'a', 't', 'e', 'r', 'z', 'i', 'n', 'i', '.', 'c', 'o', 'm', '\0',
   /* "luce.life", true */ 'l', 'u', 'c', 'e', '.', 'l', 'i', 'f', 'e', '\0',
   /* "luchscheider.de", true */ 'l', 'u', 'c', 'h', 's', 'c', 'h', 'e', 'i', 'd', 'e', 'r', '.', 'd', 'e', '\0',
   /* "lucidframeworks.com", true */ 'l', 'u', 'c', 'i', 'd', 'f', 'r', 'a', 'm', 'e', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "lucidlight.de", true */ 'l', 'u', 'c', 'i', 'd', 'l', 'i', 'g', 'h', 't', '.', 'd', 'e', '\0',
   /* "lucidlogs.com", true */ 'l', 'u', 'c', 'i', 'd', 'l', 'o', 'g', 's', '.', 'c', 'o', 'm', '\0',
@@ -6983,17 +6981,16 @@ static const char kSTSHostTable[] = {
   /* "luoe.me", true */ 'l', 'u', 'o', 'e', '.', 'm', 'e', '\0',
   /* "luoh.cc", true */ 'l', 'u', 'o', 'h', '.', 'c', 'c', '\0',
   /* "luoh.me", true */ 'l', 'u', 'o', 'h', '.', 'm', 'e', '\0',
   /* "luohua.im", true */ 'l', 'u', 'o', 'h', 'u', 'a', '.', 'i', 'm', '\0',
   /* "luom.net", true */ 'l', 'u', 'o', 'm', '.', 'n', 'e', 't', '\0',
   /* "luongvu.com", true */ 'l', 'u', 'o', 'n', 'g', 'v', 'u', '.', 'c', 'o', 'm', '\0',
   /* "luripump.se", true */ 'l', 'u', 'r', 'i', 'p', 'u', 'm', 'p', '.', 's', 'e', '\0',
   /* "lustrum.ch", true */ 'l', 'u', 's', 't', 'r', 'u', 'm', '.', 'c', 'h', '\0',
-  /* "luukdebruincv.nl", true */ 'l', 'u', 'u', 'k', 'd', 'e', 'b', 'r', 'u', 'i', 'n', 'c', 'v', '.', 'n', 'l', '\0',
   /* "luukklene.nl", true */ 'l', 'u', 'u', 'k', 'k', 'l', 'e', 'n', 'e', '.', 'n', 'l', '\0',
   /* "luuppi.fi", true */ 'l', 'u', 'u', 'p', 'p', 'i', '.', 'f', 'i', '\0',
   /* "luxsci.com", true */ 'l', 'u', 'x', 's', 'c', 'i', '.', 'c', 'o', 'm', '\0',
   /* "luxvacuos.net", true */ 'l', 'u', 'x', 'v', 'a', 'c', 'u', 'o', 's', '.', 'n', 'e', 't', '\0',
   /* "luxwatch.com", true */ 'l', 'u', 'x', 'w', 'a', 't', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "luzat.com", true */ 'l', 'u', 'z', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "lv0.it", true */ 'l', 'v', '0', '.', 'i', 't', '\0',
   /* "lvrsystems.com", true */ 'l', 'v', 'r', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'c', 'o', 'm', '\0',
@@ -7887,16 +7884,17 @@ static const char kSTSHostTable[] = {
   /* "myshirtsize.com", true */ 'm', 'y', 's', 'h', 'i', 'r', 't', 's', 'i', 'z', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mysignal.com", true */ 'm', 'y', 's', 'i', 'g', 'n', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "mysmelly.com", true */ 'm', 'y', 's', 'm', 'e', 'l', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "mysoundtalks.com", true */ 'm', 'y', 's', 'o', 'u', 'n', 'd', 't', 'a', 'l', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "mystery-science-theater-3000.de", true */ 'm', 'y', 's', 't', 'e', 'r', 'y', '-', 's', 'c', 'i', 'e', 'n', 'c', 'e', '-', 't', 'h', 'e', 'a', 't', 'e', 'r', '-', '3', '0', '0', '0', '.', 'd', 'e', '\0',
   /* "mysticplumes.com", true */ 'm', 'y', 's', 't', 'i', 'c', 'p', 'l', 'u', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "mytc.fr", true */ 'm', 'y', 't', 'c', '.', 'f', 'r', '\0',
   /* "mythengay.ch", true */ 'm', 'y', 't', 'h', 'e', 'n', 'g', 'a', 'y', '.', 'c', 'h', '\0',
+  /* "mythslegendscollection.com", true */ 'm', 'y', 't', 'h', 's', 'l', 'e', 'g', 'e', 'n', 'd', 's', 'c', 'o', 'l', 'l', 'e', 'c', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "mytraiteurs.com", true */ 'm', 'y', 't', 'r', 'a', 'i', 't', 'e', 'u', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "mytripcar.co.uk", true */ 'm', 'y', 't', 'r', 'i', 'p', 'c', 'a', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "mytripcar.com", true */ 'm', 'y', 't', 'r', 'i', 'p', 'c', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "mytripcar.de", true */ 'm', 'y', 't', 'r', 'i', 'p', 'c', 'a', 'r', '.', 'd', 'e', '\0',
   /* "mytripcar.es", true */ 'm', 'y', 't', 'r', 'i', 'p', 'c', 'a', 'r', '.', 'e', 's', '\0',
   /* "mytty.net", true */ 'm', 'y', 't', 't', 'y', '.', 'n', 'e', 't', '\0',
   /* "mytweeps.com", true */ 'm', 'y', 't', 'w', 'e', 'e', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "myvpl.com", true */ 'm', 'y', 'v', 'p', 'l', '.', 'c', 'o', 'm', '\0',
@@ -8052,16 +8050,17 @@ static const char kSTSHostTable[] = {
   /* "netbrief.ml", true */ 'n', 'e', 't', 'b', 'r', 'i', 'e', 'f', '.', 'm', 'l', '\0',
   /* "netbulls.io", true */ 'n', 'e', 't', 'b', 'u', 'l', 'l', 's', '.', 'i', 'o', '\0',
   /* "netconnect.at", true */ 'n', 'e', 't', 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'a', 't', '\0',
   /* "netcoolusers.org", true */ 'n', 'e', 't', 'c', 'o', 'o', 'l', 'u', 's', 'e', 'r', 's', '.', 'o', 'r', 'g', '\0',
   /* "netera.se", true */ 'n', 'e', 't', 'e', 'r', 'a', '.', 's', 'e', '\0',
   /* "netfs.pl", false */ 'n', 'e', 't', 'f', 's', '.', 'p', 'l', '\0',
   /* "netfxharmonics.com", false */ 'n', 'e', 't', 'f', 'x', 'h', 'a', 'r', 'm', 'o', 'n', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "nethackwiki.com", true */ 'n', 'e', 't', 'h', 'a', 'c', 'k', 'w', 'i', 'k', 'i', '.', 'c', 'o', 'm', '\0',
+  /* "nethruster.com", true */ 'n', 'e', 't', 'h', 'r', 'u', 's', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "netloanusa.com", true */ 'n', 'e', 't', 'l', 'o', 'a', 'n', 'u', 's', 'a', '.', 'c', 'o', 'm', '\0',
   /* "netlocal.ru", true */ 'n', 'e', 't', 'l', 'o', 'c', 'a', 'l', '.', 'r', 'u', '\0',
   /* "netmagik.com", true */ 'n', 'e', 't', 'm', 'a', 'g', 'i', 'k', '.', 'c', 'o', 'm', '\0',
   /* "netmazk.net", true */ 'n', 'e', 't', 'm', 'a', 'z', 'k', '.', 'n', 'e', 't', '\0',
   /* "netnodes.net", true */ 'n', 'e', 't', 'n', 'o', 'd', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "netprofile.com.au", true */ 'n', 'e', 't', 'p', 'r', 'o', 'f', 'i', 'l', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "netraising.com", true */ 'n', 'e', 't', 'r', 'a', 'i', 's', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "netrelay.email", true */ 'n', 'e', 't', 'r', 'e', 'l', 'a', 'y', '.', 'e', 'm', 'a', 'i', 'l', '\0',
@@ -8192,17 +8191,17 @@ static const char kSTSHostTable[] = {
   /* "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',
   /* "ninchat.com", true */ 'n', 'i', 'n', 'c', 'h', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "ninchisho-online.com", true */ 'n', 'i', 'n', 'c', 'h', 'i', 's', 'h', 'o', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "nine-hells.net", false */ 'n', 'i', 'n', 'e', '-', 'h', 'e', 'l', 'l', 's', '.', 'n', 'e', 't', '\0',
   /* "ninespec.com", true */ 'n', 'i', 'n', 'e', 's', 'p', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "ninjan.co", true */ 'n', 'i', 'n', 'j', 'a', 'n', '.', 'c', 'o', '\0',
   /* "ninthfloor.org", true */ 'n', 'i', 'n', 't', 'h', 'f', 'l', 'o', 'o', 'r', '.', 'o', 'r', 'g', '\0',
-  /* "ninux.ch", false */ 'n', 'i', 'n', 'u', 'x', '.', 'c', 'h', '\0',
+  /* "ninux.ch", true */ 'n', 'i', 'n', 'u', 'x', '.', 'c', 'h', '\0',
   /* "niouininon.eu", true */ 'n', 'i', 'o', 'u', 'i', 'n', 'i', 'n', 'o', 'n', '.', 'e', 'u', '\0',
   /* "nippon-oku.com", true */ 'n', 'i', 'p', 'p', 'o', 'n', '-', 'o', 'k', 'u', '.', 'c', 'o', 'm', '\0',
   /* "nippon.fr", true */ 'n', 'i', 'p', 'p', 'o', 'n', '.', 'f', 'r', '\0',
   /* "nirada.info", true */ 'n', 'i', 'r', 'a', 'd', 'a', '.', 'i', 'n', 'f', 'o', '\0',
   /* "nitrix.me", true */ 'n', 'i', 't', 'r', 'i', 'x', '.', 'm', 'e', '\0',
   /* "nitropur.com", true */ 'n', 'i', 't', 'r', 'o', 'p', 'u', 'r', '.', 'c', 'o', 'm', '\0',
   /* "nitropur.de", true */ 'n', 'i', 't', 'r', 'o', 'p', 'u', 'r', '.', 'd', 'e', '\0',
   /* "nivi.ca", true */ 'n', 'i', 'v', 'i', '.', 'c', 'a', '\0',
@@ -8399,17 +8398,16 @@ static const char kSTSHostTable[] = {
   /* "oiepoie.nl", false */ 'o', 'i', 'e', 'p', 'o', 'i', 'e', '.', 'n', 'l', '\0',
   /* "ojls.co", true */ 'o', 'j', 'l', 's', '.', 'c', 'o', '\0',
   /* "okay.coffee", true */ 'o', 'k', 'a', 'y', '.', 'c', 'o', 'f', 'f', 'e', 'e', '\0',
   /* "oke.com.tw", true */ 'o', 'k', 'e', '.', 'c', 'o', 'm', '.', 't', 'w', '\0',
   /* "okhrana.agency", true */ 'o', 'k', 'h', 'r', 'a', 'n', 'a', '.', 'a', 'g', 'e', 'n', 'c', 'y', '\0',
   /* "oklahomatickets.com", true */ 'o', 'k', 'l', 'a', 'h', 'o', 'm', 'a', 't', 'i', 'c', 'k', 'e', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "okmx.de", true */ 'o', 'k', 'm', 'x', '.', 'd', 'e', '\0',
   /* "okok-rent.com", true */ 'o', 'k', 'o', 'k', '-', 'r', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
-  /* "okok.rent", true */ 'o', 'k', 'o', 'k', '.', 'r', 'e', 'n', 't', '\0',
   /* "okonetwork.org.uk", true */ 'o', 'k', 'o', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "olafnorge.de", false */ 'o', 'l', 'a', 'f', 'n', 'o', 'r', 'g', 'e', '.', 'd', 'e', '\0',
   /* "olcso-vps-szerver.hu", true */ 'o', 'l', 'c', 's', 'o', '-', 'v', 'p', 's', '-', 's', 'z', 'e', 'r', 'v', 'e', 'r', '.', 'h', 'u', '\0',
   /* "olegon.ru", true */ 'o', 'l', 'e', 'g', 'o', 'n', '.', 'r', 'u', '\0',
   /* "oleksii.name", true */ 'o', 'l', 'e', 'k', 's', 'i', 'i', '.', 'n', 'a', 'm', 'e', '\0',
   /* "oliveraiedelabastideblanche.fr", true */ 'o', 'l', 'i', 'v', 'e', 'r', 'a', 'i', 'e', 'd', 'e', 'l', 'a', 'b', 'a', 's', 't', 'i', 'd', 'e', 'b', 'l', 'a', 'n', 'c', 'h', 'e', '.', 'f', 'r', '\0',
   /* "olivierlemoal.fr", true */ 'o', 'l', 'i', 'v', 'i', 'e', 'r', 'l', 'e', 'm', 'o', 'a', 'l', '.', 'f', 'r', '\0',
   /* "ollehbizev.co.kr", true */ 'o', 'l', 'l', 'e', 'h', 'b', 'i', 'z', 'e', 'v', '.', 'c', 'o', '.', 'k', 'r', '\0',
@@ -8499,17 +8497,16 @@ static const char kSTSHostTable[] = {
   /* "openbsd.id", true */ 'o', 'p', 'e', 'n', 'b', 's', 'd', '.', 'i', 'd', '\0',
   /* "openconnect.com.au", true */ 'o', 'p', 'e', 'n', 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "openkvk.nl", true */ 'o', 'p', 'e', 'n', 'k', 'v', 'k', '.', 'n', 'l', '\0',
   /* "openmtbmap.org", true */ 'o', 'p', 'e', 'n', 'm', 't', 'b', 'm', 'a', 'p', '.', 'o', 'r', 'g', '\0',
   /* "opennippon.com", true */ 'o', 'p', 'e', 'n', 'n', 'i', 'p', 'p', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "openpriv.pw", false */ 'o', 'p', 'e', 'n', 'p', 'r', 'i', 'v', '.', 'p', 'w', '\0',
   /* "openrtv.com", true */ 'o', 'p', 'e', 'n', 'r', 't', 'v', '.', 'c', 'o', 'm', '\0',
   /* "opensource-cms.nl", true */ 'o', 'p', 'e', 'n', 's', 'o', 'u', 'r', 'c', 'e', '-', 'c', 'm', 's', '.', 'n', 'l', '\0',
-  /* "opensourcehouse.net", true */ 'o', 'p', 'e', 'n', 's', 'o', 'u', 'r', 'c', 'e', 'h', 'o', 'u', 's', 'e', '.', 'n', 'e', 't', '\0',
   /* "openssl.org", true */ 'o', 'p', 'e', 'n', 's', 's', 'l', '.', 'o', 'r', 'g', '\0',
   /* "openstreetmap.is", true */ 'o', 'p', 'e', 'n', 's', 't', 'r', 'e', 'e', 't', 'm', 'a', 'p', '.', 'i', 's', '\0',
   /* "opentrack.info", true */ 'o', 'p', 'e', 'n', 't', 'r', 'a', 'c', 'k', '.', 'i', 'n', 'f', 'o', '\0',
   /* "opentrash.org", true */ 'o', 'p', 'e', 'n', 't', 'r', 'a', 's', 'h', '.', 'o', 'r', 'g', '\0',
   /* "openverse.com", true */ 'o', 'p', 'e', 'n', 'v', 'e', 'r', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "openvz.org", true */ 'o', 'p', 'e', 'n', 'v', 'z', '.', 'o', 'r', 'g', '\0',
   /* "opim.ca", true */ 'o', 'p', 'i', 'm', '.', 'c', 'a', '\0',
   /* "opium.io", true */ 'o', 'p', 'i', 'u', 'm', '.', 'i', 'o', '\0',
@@ -8608,17 +8605,16 @@ static const char kSTSHostTable[] = {
   /* "p3in.com", true */ 'p', '3', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "pa-w.de", true */ 'p', 'a', '-', 'w', '.', 'd', 'e', '\0',
   /* "pace.car", true */ 'p', 'a', 'c', 'e', '.', 'c', 'a', 'r', '\0',
   /* "pacelink.de", true */ 'p', 'a', 'c', 'e', 'l', 'i', 'n', 'k', '.', 'd', 'e', '\0',
   /* "packagist.org", false */ 'p', 'a', 'c', 'k', 'a', 'g', 'i', 's', 't', '.', 'o', 'r', 'g', '\0',
   /* "packer.io", true */ 'p', 'a', 'c', 'k', 'e', 'r', '.', 'i', 'o', '\0',
   /* "pacoda.de", true */ 'p', 'a', 'c', 'o', 'd', 'a', '.', 'd', 'e', '\0',
   /* "pactf.com", true */ 'p', 'a', 'c', 't', 'f', '.', 'c', 'o', 'm', '\0',
-  /* "pagerate.io", true */ 'p', 'a', 'g', 'e', 'r', 'a', 't', 'e', '.', 'i', 'o', '\0',
   /* "pagewizz.com", false */ 'p', 'a', 'g', 'e', 'w', 'i', 'z', 'z', '.', 'c', 'o', 'm', '\0',
   /* "paginapolitica.ro", true */ 'p', 'a', 'g', 'i', 'n', 'a', 'p', 'o', 'l', 'i', 't', 'i', 'c', 'a', '.', 'r', 'o', '\0',
   /* "pagure.io", true */ 'p', 'a', 'g', 'u', 'r', 'e', '.', 'i', 'o', '\0',
   /* "pagure.org", true */ 'p', 'a', 'g', 'u', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "pahae.de", true */ 'p', 'a', 'h', 'a', 'e', '.', 'd', 'e', '\0',
   /* "painosso.org", true */ 'p', 'a', 'i', 'n', 'o', 's', 's', 'o', '.', 'o', 'r', 'g', '\0',
   /* "paintingat.com", true */ 'p', 'a', 'i', 'n', 't', 'i', 'n', 'g', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "pajonzeck.de", true */ 'p', 'a', 'j', 'o', 'n', 'z', 'e', 'c', 'k', '.', 'd', 'e', '\0',
@@ -8653,28 +8649,28 @@ static const char kSTSHostTable[] = {
   /* "papermasters.com", true */ 'p', 'a', 'p', 'e', 'r', 'm', 'a', 's', 't', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "paperturn.com", true */ 'p', 'a', 'p', 'e', 'r', 't', 'u', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "paperwork.co.za", true */ 'p', 'a', 'p', 'e', 'r', 'w', 'o', 'r', 'k', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "papygeek.com", true */ 'p', 'a', 'p', 'y', 'g', 'e', 'e', 'k', '.', 'c', 'o', 'm', '\0',
   /* "paraborsa.net", true */ 'p', 'a', 'r', 'a', 'b', 'o', 'r', 's', 'a', '.', 'n', 'e', 't', '\0',
   /* "paradiselost.com", true */ 'p', 'a', 'r', 'a', 'd', 'i', 's', 'e', 'l', 'o', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "paradoxdesigns.org", true */ 'p', 'a', 'r', 'a', 'd', 'o', 'x', 'd', 'e', 's', 'i', 'g', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "paragon.com.sg", true */ 'p', 'a', 'r', 'a', 'g', 'o', 'n', '.', 'c', 'o', 'm', '.', 's', 'g', '\0',
+  /* "paragonie.com", false */ 'p', 'a', 'r', 'a', 'g', 'o', 'n', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "paragreen.net", true */ 'p', 'a', 'r', 'a', 'g', 'r', 'e', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "paranoxer.hu", true */ 'p', 'a', 'r', 'a', 'n', 'o', 'x', 'e', 'r', '.', 'h', 'u', '\0',
   /* "parasitologyclub.org", true */ 'p', 'a', 'r', 'a', 's', 'i', 't', 'o', 'l', 'o', 'g', 'y', 'c', 'l', 'u', 'b', '.', 'o', 'r', 'g', '\0',
   /* "paratlan.hu", true */ 'p', 'a', 'r', 'a', 't', 'l', 'a', 'n', '.', 'h', 'u', '\0',
   /* "parckwart.de", true */ 'p', 'a', 'r', 'c', 'k', 'w', 'a', 'r', 't', '.', 'd', 'e', '\0',
   /* "parcon.it", true */ 'p', 'a', 'r', 'c', 'o', 'n', '.', 'i', 't', '\0',
   /* "parent5446.us", true */ 'p', 'a', 'r', 'e', 'n', 't', '5', '4', '4', '6', '.', 'u', 's', '\0',
   /* "parentinterview.com", true */ 'p', 'a', 'r', 'e', 'n', 't', 'i', 'n', 't', 'e', 'r', 'v', 'i', 'e', 'w', '.', 'c', 'o', 'm', '\0',
   /* "pariga.co.uk", true */ 'p', 'a', 'r', 'i', 'g', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "parithy.net", true */ 'p', 'a', 'r', 'i', 't', 'h', 'y', '.', 'n', 'e', 't', '\0',
   /* "parkingplus.co.il", true */ 'p', 'a', 'r', 'k', 'i', 'n', 'g', 'p', 'l', 'u', 's', '.', 'c', 'o', '.', 'i', 'l', '\0',
-  /* "parkingpoint.co.uk", true */ 'p', 'a', 'r', 'k', 'i', 'n', 'g', 'p', 'o', 'i', 'n', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "parlamento.gub.uy", true */ 'p', 'a', 'r', 'l', 'a', 'm', 'e', 'n', 't', 'o', '.', 'g', 'u', 'b', '.', 'u', 'y', '\0',
   /* "parleu2016.nl", true */ 'p', 'a', 'r', 'l', 'e', 'u', '2', '0', '1', '6', '.', 'n', 'l', '\0',
   /* "parleur.net", true */ 'p', 'a', 'r', 'l', 'e', 'u', 'r', '.', 'n', 'e', 't', '\0',
   /* "parodybit.net", true */ 'p', 'a', 'r', 'o', 'd', 'y', 'b', 'i', 't', '.', 'n', 'e', 't', '\0',
   /* "parpaing-paillette.net", true */ 'p', 'a', 'r', 'p', 'a', 'i', 'n', 'g', '-', 'p', 'a', 'i', 'l', 'l', 'e', 't', 't', 'e', '.', 'n', 'e', 't', '\0',
   /* "parsemail.org", true */ 'p', 'a', 'r', 's', 'e', 'm', 'a', 'i', 'l', '.', 'o', 'r', 'g', '\0',
   /* "parser.nu", true */ 'p', 'a', 'r', 's', 'e', 'r', '.', 'n', 'u', '\0',
   /* "partirkyoto.jp", true */ 'p', 'a', 'r', 't', 'i', 'r', 'k', 'y', 'o', 't', 'o', '.', 'j', 'p', '\0',
@@ -8755,17 +8751,16 @@ static const char kSTSHostTable[] = {
   /* "paytwopay.com", true */ 'p', 'a', 'y', 't', 'w', 'o', 'p', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "payupay.ru", true */ 'p', 'a', 'y', 'u', 'p', 'a', 'y', '.', 'r', 'u', '\0',
   /* "pbraunschdash.com", true */ 'p', 'b', 'r', 'a', 'u', 'n', 's', 'c', 'h', 'd', 'a', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "pbscreens.com", true */ 'p', 'b', 's', 'c', 'r', 'e', 'e', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "pccentral.nl", true */ 'p', 'c', 'c', 'e', 'n', 't', 'r', 'a', 'l', '.', 'n', 'l', '\0',
   /* "pcel.com", true */ 'p', 'c', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "pcfeuerwehr.de", true */ 'p', 'c', 'f', 'e', 'u', 'e', 'r', 'w', 'e', 'h', 'r', '.', 'd', 'e', '\0',
   /* "pcforum.sk", true */ 'p', 'c', 'f', 'o', 'r', 'u', 'm', '.', 's', 'k', '\0',
-  /* "pcfun.net", true */ 'p', 'c', 'f', 'u', 'n', '.', 'n', 'e', 't', '\0',
   /* "pchax.net", true */ 'p', 'c', 'h', 'a', 'x', '.', 'n', 'e', 't', '\0',
   /* "pciconcursos.com.br", true */ 'p', 'c', 'i', 'c', 'o', 'n', 'c', 'u', 'r', 's', 'o', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "pclob.gov", true */ 'p', 'c', 'l', 'o', 'b', '.', 'g', 'o', 'v', '\0',
   /* "pcloud.com", true */ 'p', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "pcnotdienst-oldenburg-rastede.de", true */ 'p', 'c', 'n', 'o', 't', 'd', 'i', 'e', 'n', 's', 't', '-', 'o', 'l', 'd', 'e', 'n', 'b', 'u', 'r', 'g', '-', 'r', 'a', 's', 't', 'e', 'd', 'e', '.', 'd', 'e', '\0',
   /* "pctonic.net", true */ 'p', 'c', 't', 'o', 'n', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "pdamsidoarjo.co.id", true */ 'p', 'd', 'a', 'm', 's', 'i', 'd', 'o', 'a', 'r', 'j', 'o', '.', 'c', 'o', '.', 'i', 'd', '\0',
   /* "pdevio.com", true */ 'p', 'd', 'e', 'v', 'i', 'o', '.', 'c', 'o', 'm', '\0',
@@ -9108,18 +9103,18 @@ static const char kSTSHostTable[] = {
   /* "porybox.com", true */ 'p', 'o', 'r', 'y', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "positivesobrietyinstitute.com", true */ 'p', 'o', 's', 'i', 't', 'i', 'v', 'e', 's', 'o', 'b', 'r', 'i', 'e', 't', 'y', 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "posobota.cz", true */ 'p', 'o', 's', 'o', 'b', 'o', 't', 'a', '.', 'c', 'z', '\0',
   /* "post4me.at", true */ 'p', 'o', 's', 't', '4', 'm', 'e', '.', 'a', 't', '\0',
   /* "postal.dk", true */ 'p', 'o', 's', 't', 'a', 'l', '.', 'd', 'k', '\0',
   /* "postblue.info", true */ 'p', 'o', 's', 't', 'b', 'l', 'u', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "postbox.life", true */ 'p', 'o', 's', 't', 'b', 'o', 'x', '.', 'l', 'i', 'f', 'e', '\0',
   /* "postcodegarant.nl", true */ 'p', 'o', 's', 't', 'c', 'o', 'd', 'e', 'g', 'a', 'r', 'a', 'n', 't', '.', 'n', 'l', '\0',
-  /* "postcodewise.co.uk", true */ 'p', 'o', 's', 't', 'c', 'o', 'd', 'e', 'w', 'i', 's', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "posteo.de", false */ 'p', 'o', 's', 't', 'e', 'o', '.', 'd', 'e', '\0',
+  /* "posterspy.com", true */ 'p', 'o', 's', 't', 'e', 'r', 's', 'p', 'y', '.', 'c', 'o', 'm', '\0',
   /* "postfinance.ch", true */ 'p', 'o', 's', 't', 'f', 'i', 'n', 'a', 'n', 'c', 'e', '.', 'c', 'h', '\0',
   /* "postn.eu", true */ 'p', 'o', 's', 't', 'n', '.', 'e', 'u', '\0',
   /* "posttigo.com", true */ 'p', 'o', 's', 't', 't', 'i', 'g', 'o', '.', 'c', 'o', 'm', '\0',
   /* "potatoheads.net", true */ 'p', 'o', 't', 'a', 't', 'o', 'h', 'e', 'a', 'd', 's', '.', 'n', 'e', 't', '\0',
   /* "potbar.com", true */ 'p', 'o', 't', 'b', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "potbox.com", true */ 'p', 'o', 't', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "pothe.com", true */ 'p', 'o', 't', 'h', 'e', '.', 'c', 'o', 'm', '\0',
   /* "pothe.de", true */ 'p', 'o', 't', 'h', 'e', '.', 'd', 'e', '\0',
@@ -9290,33 +9285,32 @@ static const char kSTSHostTable[] = {
   /* "psw.net", true */ 'p', 's', 'w', '.', 'n', 'e', 't', '\0',
   /* "psxtr.com", true */ 'p', 's', 'x', 't', 'r', '.', 'c', 'o', 'm', '\0',
   /* "psychotherapie-kp.de", true */ 'p', 's', 'y', 'c', 'h', 'o', 't', 'h', 'e', 'r', 'a', 'p', 'i', 'e', '-', 'k', 'p', '.', 'd', 'e', '\0',
   /* "pt-server.de", true */ 'p', 't', '-', 's', 'e', 'r', 'v', 'e', 'r', '.', 'd', 'e', '\0',
   /* "ptbi.org.pl", true */ 'p', 't', 'b', 'i', '.', 'o', 'r', 'g', '.', 'p', 'l', '\0',
   /* "ptbx.co", true */ 'p', 't', 'b', 'x', '.', 'c', 'o', '\0',
   /* "pterodactylus.cz", true */ 'p', 't', 'e', 'r', 'o', 'd', 'a', 'c', 't', 'y', 'l', 'u', 's', '.', 'c', 'z', '\0',
   /* "ptgoldensun.com", true */ 'p', 't', 'g', 'o', 'l', 'd', 'e', 'n', 's', 'u', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "ptonet.com", true */ 'p', 't', 'o', 'n', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "puac.de", true */ 'p', 'u', 'a', 'c', '.', 'd', 'e', '\0',
   /* "publications.qld.gov.au", false */ 'p', 'u', 'b', 'l', 'i', 'c', 'a', 't', 'i', 'o', 'n', 's', '.', 'q', 'l', 'd', '.', 'g', 'o', 'v', '.', 'a', 'u', '\0',
   /* "publiccarauctionscalifornia.com", true */ 'p', 'u', 'b', 'l', 'i', 'c', 'c', 'a', 'r', 'a', 'u', 'c', 't', 'i', 'o', 'n', 's', 'c', 'a', 'l', 'i', 'f', 'o', 'r', 'n', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "publicintegrity.org", true */ 'p', 'u', 'b', 'l', 'i', 'c', 'i', 'n', 't', 'e', 'g', 'r', 'i', 't', 'y', '.', 'o', 'r', 'g', '\0',
   /* "publicspeakingcamps.com", true */ 'p', 'u', 'b', 'l', 'i', 'c', 's', 'p', 'e', 'a', 'k', 'i', 'n', 'g', 'c', 'a', 'm', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "publicsuffix.org", true */ 'p', 'u', 'b', 'l', 'i', 'c', 's', 'u', 'f', 'f', 'i', 'x', '.', 'o', 'r', 'g', '\0',
   /* "pubreviews.com", true */ 'p', 'u', 'b', 'r', 'e', 'v', 'i', 'e', 'w', 's', '.', 'c', 'o', 'm', '\0',
   /* "pucchi.net", true */ 'p', 'u', 'c', 'c', 'h', 'i', '.', 'n', 'e', 't', '\0',
   /* "pucssa.org", true */ 'p', 'u', 'c', 's', 's', 'a', '.', 'o', 'r', 'g', '\0',
   /* "puddis.de", true */ 'p', 'u', 'd', 'd', 'i', 's', '.', 'd', 'e', '\0',
   /* "pugliese.fr", true */ 'p', 'u', 'g', 'l', 'i', 'e', 's', 'e', '.', 'f', 'r', '\0',
   /* "puhe.se", true */ 'p', 'u', 'h', 'e', '.', 's', 'e', '\0',
   /* "puikheid.nl", true */ 'p', 'u', 'i', 'k', 'h', 'e', 'i', 'd', '.', 'n', 'l', '\0',
   /* "pulsar.guru", false */ 'p', 'u', 'l', 's', 'a', 'r', '.', 'g', 'u', 'r', 'u', '\0',
   /* "pult.co", false */ 'p', 'u', 'l', 't', '.', 'c', 'o', '\0',
-  /* "punchkickinteractive.com", true */ 'p', 'u', 'n', 'c', 'h', 'k', 'i', 'c', 'k', 'i', 'n', 't', 'e', 'r', 'a', 'c', 't', 'i', 'v', 'e', '.', 'c', 'o', 'm', '\0',
+  /* "punchkickinteractive.com", false */ 'p', 'u', 'n', 'c', 'h', 'k', 'i', 'c', 'k', 'i', 'n', 't', 'e', 'r', 'a', 'c', 't', 'i', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "punikonta.de", true */ 'p', 'u', 'n', 'i', 'k', 'o', 'n', 't', 'a', '.', 'd', 'e', '\0',
   /* "punitsheth.com", true */ 'p', 'u', 'n', 'i', 't', 's', 'h', 'e', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "punkapoule.fr", true */ 'p', 'u', 'n', 'k', 'a', 'p', 'o', 'u', 'l', 'e', '.', 'f', 'r', '\0',
   /* "punknews.org", true */ 'p', 'u', 'n', 'k', 'n', 'e', 'w', 's', '.', 'o', 'r', 'g', '\0',
   /* "pupboss.com", true */ 'p', 'u', 'p', 'b', 'o', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "puppydns.com", true */ 'p', 'u', 'p', 'p', 'y', 'd', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "purplebricks.com", true */ 'p', 'u', 'r', 'p', 'l', 'e', 'b', 'r', 'i', 'c', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "purplemoon.ch", true */ 'p', 'u', 'r', 'p', 'l', 'e', 'm', 'o', 'o', 'n', '.', 'c', 'h', '\0',
@@ -9342,17 +9336,16 @@ static const char kSTSHostTable[] = {
   /* "pypi.io", true */ 'p', 'y', 'p', 'i', '.', 'i', 'o', '\0',
   /* "pypi.org", true */ 'p', 'y', 'p', 'i', '.', 'o', 'r', 'g', '\0',
   /* "pypi.python.org", true */ 'p', 'y', 'p', 'i', '.', 'p', 'y', 't', 'h', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "pysays.net", true */ 'p', 'y', 's', 'a', 'y', 's', '.', 'n', 'e', 't', '\0',
   /* "python.org", false */ 'p', 'y', 't', 'h', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "pzme.me", true */ 'p', 'z', 'm', 'e', '.', 'm', 'e', '\0',
   /* "qa.fedoraproject.org", true */ 'q', 'a', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "qa.stg.fedoraproject.org", true */ 'q', 'a', '.', 's', 't', 'g', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
-  /* "qandavision.com", true */ 'q', 'a', 'n', 'd', 'a', 'v', 'i', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "qapital.com", true */ 'q', 'a', 'p', 'i', 't', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "qbeing.info", true */ 'q', 'b', 'e', 'i', 'n', 'g', '.', 'i', 'n', 'f', 'o', '\0',
   /* "qbiju.com.br", true */ 'q', 'b', 'i', 'j', 'u', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "qbin.io", true */ 'q', 'b', 'i', 'n', '.', 'i', 'o', '\0',
   /* "qc.search.yahoo.com", false */ 'q', 'c', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "qccareerschool.com", true */ 'q', 'c', 'c', 'a', 'r', 'e', 'e', 'r', 's', 'c', 'h', 'o', 'o', 'l', '.', 'c', 'o', 'm', '\0',
   /* "qccqld.org.au", true */ 'q', 'c', 'c', 'q', 'l', 'd', '.', 'o', 'r', 'g', '.', 'a', 'u', '\0',
   /* "qcdesignschool.com", true */ 'q', 'c', 'd', 'e', 's', 'i', 'g', 'n', 's', 'c', 'h', 'o', 'o', 'l', '.', 'c', 'o', 'm', '\0',
@@ -9376,17 +9369,16 @@ static const char kSTSHostTable[] = {
   /* "qkka.org", true */ 'q', 'k', 'k', 'a', '.', 'o', 'r', 'g', '\0',
   /* "qldconservation.org", true */ 'q', 'l', 'd', 'c', 'o', 'n', 's', 'e', 'r', 'v', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "qldconservation.org.au", true */ 'q', 'l', 'd', 'c', 'o', 'n', 's', 'e', 'r', 'v', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '.', 'a', 'u', '\0',
   /* "qldformulaford.org", true */ 'q', 'l', 'd', 'f', 'o', 'r', 'm', 'u', 'l', 'a', 'f', 'o', 'r', 'd', '.', 'o', 'r', 'g', '\0',
   /* "qlrace.com", false */ 'q', 'l', 'r', 'a', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "qm-marzahnnordwest.de", true */ 'q', 'm', '-', 'm', 'a', 'r', 'z', 'a', 'h', 'n', 'n', 'o', 'r', 'd', 'w', 'e', 's', 't', '.', 'd', 'e', '\0',
   /* "qonqa.de", true */ 'q', 'o', 'n', 'q', 'a', '.', 'd', 'e', '\0',
   /* "qop.io", true */ 'q', 'o', 'p', '.', 'i', 'o', '\0',
-  /* "qorm.co.uk", true */ 'q', 'o', 'r', 'm', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "qqq.gg", true */ 'q', 'q', 'q', '.', 'g', 'g', '\0',
   /* "qr-city.org", true */ 'q', 'r', '-', 'c', 'i', 't', 'y', '.', 'o', 'r', 'g', '\0',
   /* "qrlfinancial.com", true */ 'q', 'r', 'l', 'f', 'i', 'n', 'a', 'n', 'c', 'i', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "qtl.me", true */ 'q', 't', 'l', '.', 'm', 'e', '\0',
   /* "qto.com", true */ 'q', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "qtpass.org", true */ 'q', 't', 'p', 'a', 's', 's', '.', 'o', 'r', 'g', '\0',
   /* "qtpower.co.uk", true */ 'q', 't', 'p', 'o', 'w', 'e', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "qtpower.net", true */ 'q', 't', 'p', 'o', 'w', 'e', 'r', '.', 'n', 'e', 't', '\0',
@@ -9913,25 +9905,25 @@ static const char kSTSHostTable[] = {
   /* "russia.dating", true */ 'r', 'u', 's', 's', 'i', 'a', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "rustable.com", true */ 'r', 'u', 's', 't', 'a', 'b', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "rustfanatic.com", true */ 'r', 'u', 's', 't', 'f', 'a', 'n', 'a', 't', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "rustyrambles.com", true */ 'r', 'u', 's', 't', 'y', 'r', 'a', 'm', 'b', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "rusxakep.com", true */ 'r', 'u', 's', 'x', 'a', 'k', 'e', 'p', '.', 'c', 'o', 'm', '\0',
   /* "rutgerschimmel.nl", true */ 'r', 'u', 't', 'g', 'e', 'r', 's', 'c', 'h', 'i', 'm', 'm', 'e', 'l', '.', 'n', 'l', '\0',
   /* "ruudkoot.nl", true */ 'r', 'u', 'u', 'd', 'k', 'o', 'o', 't', '.', 'n', 'l', '\0',
   /* "rva-asbestgroep.nl", true */ 'r', 'v', 'a', '-', 'a', 's', 'b', 'e', 's', 't', 'g', 'r', 'o', 'e', 'p', '.', 'n', 'l', '\0',
-  /* "rwanderlust.com", true */ 'r', 'w', 'a', 'n', 'd', 'e', 'r', 'l', 'u', 's', 't', '.', 'c', 'o', 'm', '\0',
+  /* "rwanderlust.com", false */ 'r', 'w', 'a', 'n', 'd', 'e', 'r', 'l', 'u', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "rws-vertriebsportal.de", true */ 'r', 'w', 's', '-', 'v', 'e', 'r', 't', 'r', 'i', 'e', 'b', 's', 'p', 'o', 'r', 't', 'a', 'l', '.', 'd', 'e', '\0',
   /* "rww.name", true */ 'r', 'w', 'w', '.', 'n', 'a', 'm', 'e', '\0',
   /* "rx-contact.com", true */ 'r', 'x', '-', 'c', 'o', 'n', 't', 'a', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "rxbn.de", true */ 'r', 'x', 'b', 'n', '.', 'd', 'e', '\0',
   /* "ryan-goldstein.com", true */ 'r', 'y', 'a', 'n', '-', 'g', 'o', 'l', 'd', 's', 't', 'e', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "ryanhowell.io", true */ 'r', 'y', 'a', 'n', 'h', 'o', 'w', 'e', 'l', 'l', '.', 'i', 'o', '\0',
+  /* "ryankearney.com", true */ 'r', 'y', 'a', 'n', 'k', 'e', 'a', 'r', 'n', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "ryanmcdonough.co.uk", true */ 'r', 'y', 'a', 'n', 'm', 'c', 'd', 'o', 'n', 'o', 'u', 'g', 'h', '.', 'c', 'o', '.', 'u', 'k', '\0',
-  /* "ryansmithphotography.com", true */ 'r', 'y', 'a', 'n', 's', 'm', 'i', 't', 'h', 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'c', 'o', 'm', '\0',
   /* "rylin.net", true */ 'r', 'y', 'l', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "rynekpierwotny.pl", true */ 'r', 'y', 'n', 'e', 'k', 'p', 'i', 'e', 'r', 'w', 'o', 't', 'n', 'y', '.', 'p', 'l', '\0',
   /* "s-c.se", true */ 's', '-', 'c', '.', 's', 'e', '\0',
   /* "s-cubed.net", true */ 's', '-', 'c', 'u', 'b', 'e', 'd', '.', 'n', 'e', 't', '\0',
   /* "s-mainte.com", true */ 's', '-', 'm', 'a', 'i', 'n', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "s-mdb.com", true */ 's', '-', 'm', 'd', 'b', '.', 'c', 'o', 'm', '\0',
   /* "s.how", true */ 's', '.', 'h', 'o', 'w', '\0',
   /* "s13d.fr", true */ 's', '1', '3', 'd', '.', 'f', 'r', '\0',
@@ -10285,17 +10277,16 @@ static const char kSTSHostTable[] = {
   /* "septs.pw", true */ 's', 'e', 'p', 't', 's', '.', 'p', 'w', '\0',
   /* "sequencing.com", true */ 's', 'e', 'q', 'u', 'e', 'n', 'c', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "sequiturs.com", true */ 's', 'e', 'q', 'u', 'i', 't', 'u', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "serafin.tech", true */ 's', 'e', 'r', 'a', 'f', 'i', 'n', '.', 't', 'e', 'c', 'h', '\0',
   /* "serathius.ovh", true */ 's', 'e', 'r', 'a', 't', 'h', 'i', 'u', 's', '.', 'o', 'v', 'h', '\0',
   /* "serbanpaun.ro", true */ 's', 'e', 'r', 'b', 'a', 'n', 'p', 'a', 'u', 'n', '.', 'r', 'o', '\0',
   /* "serenitycreams.com", true */ 's', 'e', 'r', 'e', 'n', 'i', 't', 'y', 'c', 'r', 'e', 'a', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "serf.io", true */ 's', 'e', 'r', 'f', '.', 'i', 'o', '\0',
-  /* "serfdom.io", true */ 's', 'e', 'r', 'f', 'd', 'o', 'm', '.', 'i', 'o', '\0',
   /* "servdiscount.com", true */ 's', 'e', 'r', 'v', 'd', 'i', 's', 'c', 'o', 'u', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "servepublic.com", true */ 's', 'e', 'r', 'v', 'e', 'p', 'u', 'b', 'l', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "servepublic.org", true */ 's', 'e', 'r', 'v', 'e', 'p', 'u', 'b', 'l', 'i', 'c', '.', 'o', 'r', 'g', '\0',
   /* "server-bg.net", true */ 's', 'e', 'r', 'v', 'e', 'r', '-', 'b', 'g', '.', 'n', 'e', 't', '\0',
   /* "server-daten.de", true */ 's', 'e', 'r', 'v', 'e', 'r', '-', 'd', 'a', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "serveradminz.com", true */ 's', 'e', 'r', 'v', 'e', 'r', 'a', 'd', 'm', 'i', 'n', 'z', '.', 'c', 'o', 'm', '\0',
   /* "serverco.com", true */ 's', 'e', 'r', 'v', 'e', 'r', 'c', 'o', '.', 'c', 'o', 'm', '\0',
   /* "serverfrog.de", true */ 's', 'e', 'r', 'v', 'e', 'r', 'f', 'r', 'o', 'g', '.', 'd', 'e', '\0',
@@ -10506,16 +10497,17 @@ static const char kSTSHostTable[] = {
   /* "singul4rity.com", true */ 's', 'i', 'n', 'g', 'u', 'l', '4', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "sinneserweiterung.de", true */ 's', 'i', 'n', 'n', 'e', 's', 'e', 'r', 'w', 'e', 'i', 't', 'e', 'r', 'u', 'n', 'g', '.', 'd', 'e', '\0',
   /* "sinoscandinavia.se", true */ 's', 'i', 'n', 'o', 's', 'c', 'a', 'n', 'd', 'i', 'n', 'a', 'v', 'i', 'a', '.', 's', 'e', '\0',
   /* "sinosky.org", true */ 's', 'i', 'n', 'o', 's', 'k', 'y', '.', 'o', 'r', 'g', '\0',
   /* "sinquin.eu", true */ 's', 'i', 'n', 'q', 'u', 'i', 'n', '.', 'e', 'u', '\0',
   /* "siraweb.org", true */ 's', 'i', 'r', 'a', 'w', 'e', 'b', '.', 'o', 'r', 'g', '\0',
   /* "sirenslove.com", true */ 's', 'i', 'r', 'e', 'n', 's', 'l', 'o', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "siriuspup.com", true */ 's', 'i', 'r', 'i', 'u', 's', 'p', 'u', 'p', '.', 'c', 'o', 'm', '\0',
+  /* "sistem-maklumat.com", true */ 's', 'i', 's', 't', 'e', 'm', '-', 'm', 'a', 'k', 'l', 'u', 'm', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "sistem-maklumat.com.my", true */ 's', 'i', 's', 't', 'e', 'm', '-', 'm', 'a', 'k', 'l', 'u', 'm', 'a', 't', '.', 'c', 'o', 'm', '.', 'm', 'y', '\0',
   /* "sistersurprise.de", true */ 's', 'i', 's', 't', 'e', 'r', 's', 'u', 'r', 'p', 'r', 'i', 's', 'e', '.', 'd', 'e', '\0',
   /* "sisv.eu", true */ 's', 'i', 's', 'v', '.', 'e', 'u', '\0',
   /* "sitc.sk", true */ 's', 'i', 't', 'c', '.', 's', 'k', '\0',
   /* "sitehost.io", true */ 's', 'i', 't', 'e', 'h', 'o', 's', 't', '.', 'i', 'o', '\0',
   /* "sitennisclub.com", true */ 's', 'i', 't', 'e', 'n', 'n', 'i', 's', 'c', 'l', 'u', 'b', '.', 'c', 'o', 'm', '\0',
   /* "sites.google.com", true */ 's', 'i', 't', 'e', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "sitesko.de", true */ 's', 'i', 't', 'e', 's', 'k', 'o', '.', 'd', 'e', '\0',
@@ -10602,17 +10594,16 @@ static const char kSTSHostTable[] = {
   /* "slxh.nl", true */ 's', 'l', 'x', 'h', '.', 'n', 'l', '\0',
   /* "sm.ms", true */ 's', 'm', '.', 'm', 's', '\0',
   /* "smallchat.nl", true */ 's', 'm', 'a', 'l', 'l', 'c', 'h', 'a', 't', '.', 'n', 'l', '\0',
   /* "smalldata.tech", true */ 's', 'm', 'a', 'l', 'l', 'd', 'a', 't', 'a', '.', 't', 'e', 'c', 'h', '\0',
   /* "smalldogbreeds.net", true */ 's', 'm', 'a', 'l', 'l', 'd', 'o', 'g', 'b', 'r', 'e', 'e', 'd', 's', '.', 'n', 'e', 't', '\0',
   /* "smallplanet.ch", true */ 's', 'm', 'a', 'l', 'l', 'p', 'l', 'a', 'n', 'e', 't', '.', 'c', 'h', '\0',
   /* "smalltalkconsulting.com", true */ 's', 'm', 'a', 'l', 'l', 't', 'a', 'l', 'k', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "smares.de", true */ 's', 'm', 'a', 'r', 'e', 's', '.', 'd', 'e', '\0',
-  /* "smart-mirror.de", true */ 's', 'm', 'a', 'r', 't', '-', 'm', 'i', 'r', 'r', 'o', 'r', '.', 'd', 'e', '\0',
   /* "smartairkey.com", true */ 's', 'm', 'a', 'r', 't', 'a', 'i', 'r', 'k', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "smartcleaningcenter.nl", true */ 's', 'm', 'a', 'r', 't', 'c', 'l', 'e', 'a', 'n', 'i', 'n', 'g', 'c', 'e', 'n', 't', 'e', 'r', '.', 'n', 'l', '\0',
   /* "smartest-trading.com", true */ 's', 'm', 'a', 'r', 't', 'e', 's', 't', '-', 't', 'r', 'a', 'd', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "smartftp.com", true */ 's', 'm', 'a', 'r', 't', 'f', 't', 'p', '.', 'c', 'o', 'm', '\0',
   /* "smarthdd.com", true */ 's', 'm', 'a', 'r', 't', 'h', 'd', 'd', '.', 'c', 'o', 'm', '\0',
   /* "smarthomedna.com", true */ 's', 'm', 'a', 'r', 't', 'h', 'o', 'm', 'e', 'd', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "smarthouse.de", true */ 's', 'm', 'a', 'r', 't', 'h', 'o', 'u', 's', 'e', '.', 'd', 'e', '\0',
   /* "smartit.pro", true */ 's', 'm', 'a', 'r', 't', 'i', 't', '.', 'p', 'r', 'o', '\0',
@@ -10680,17 +10671,16 @@ static const char kSTSHostTable[] = {
   /* "sny.no", true */ 's', 'n', 'y', '.', 'n', 'o', '\0',
   /* "so-healthy.co.uk", true */ 's', 'o', '-', 'h', 'e', 'a', 'l', 't', 'h', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "sobaya-gohei.com", true */ 's', 'o', 'b', 'a', 'y', 'a', '-', 'g', 'o', 'h', 'e', 'i', '.', 'c', 'o', 'm', '\0',
   /* "sobieray.dyndns.org", true */ 's', 'o', 'b', 'i', 'e', 'r', 'a', 'y', '.', 'd', 'y', 'n', 'd', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "soboleva-pr.com.ua", true */ 's', 'o', 'b', 'o', 'l', 'e', 'v', 'a', '-', 'p', 'r', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "social-events.net", false */ 's', 'o', 'c', 'i', 'a', 'l', '-', 'e', 'v', 'e', 'n', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "social-media-strategies.it", true */ 's', 'o', 'c', 'i', 'a', 'l', '-', 'm', 'e', 'd', 'i', 'a', '-', 's', 't', 'r', 'a', 't', 'e', 'g', 'i', 'e', 's', '.', 'i', 't', '\0',
   /* "socialgrowing.cl", true */ 's', 'o', 'c', 'i', 'a', 'l', 'g', 'r', 'o', 'w', 'i', 'n', 'g', '.', 'c', 'l', '\0',
-  /* "socialnous.co", true */ 's', 'o', 'c', 'i', 'a', 'l', 'n', 'o', 'u', 's', '.', 'c', 'o', '\0',
   /* "socialrank.com", true */ 's', 'o', 'c', 'i', 'a', 'l', 'r', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "socialsecurity.gov", false */ 's', 'o', 'c', 'i', 'a', 'l', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'g', 'o', 'v', '\0',
   /* "socialworkout.com", true */ 's', 'o', 'c', 'i', 'a', 'l', 'w', 'o', 'r', 'k', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "socialworkout.net", true */ 's', 'o', 'c', 'i', 'a', 'l', 'w', 'o', 'r', 'k', 'o', 'u', 't', '.', 'n', 'e', 't', '\0',
   /* "socialworkout.org", true */ 's', 'o', 'c', 'i', 'a', 'l', 'w', 'o', 'r', 'k', 'o', 'u', 't', '.', 'o', 'r', 'g', '\0',
   /* "socialworkout.tv", true */ 's', 'o', 'c', 'i', 'a', 'l', 'w', 'o', 'r', 'k', 'o', 'u', 't', '.', 't', 'v', '\0',
   /* "societyhilldance.com", true */ 's', 'o', 'c', 'i', 'e', 't', 'y', 'h', 'i', 'l', 'l', 'd', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "socioambiental.org", true */ 's', 'o', 'c', 'i', 'o', 'a', 'm', 'b', 'i', 'e', 'n', 't', 'a', 'l', '.', 'o', 'r', 'g', '\0',
@@ -10753,16 +10743,17 @@ static const char kSTSHostTable[] = {
   /* "sorcix.com", true */ 's', 'o', 'r', 'c', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "sorn.service.gov.uk", true */ 's', 'o', 'r', 'n', '.', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'g', 'o', 'v', '.', 'u', 'k', '\0',
   /* "sortaweird.net", true */ 's', 'o', 'r', 't', 'a', 'w', 'e', 'i', 'r', 'd', '.', 'n', 'e', 't', '\0',
   /* "sorz.org", true */ 's', 'o', 'r', 'z', '.', 'o', 'r', 'g', '\0',
   /* "sos.sk", true */ 's', 'o', 's', '.', 's', 'k', '\0',
   /* "sosaka.ml", true */ 's', 'o', 's', 'a', 'k', 'a', '.', 'm', 'l', '\0',
   /* "sosecu.red", true */ 's', 'o', 's', 'e', 'c', 'u', '.', 'r', 'e', 'd', '\0',
   /* "sotar.us", true */ 's', 'o', 't', 'a', 'r', '.', 'u', 's', '\0',
+  /* "sotiran.com", true */ 's', 'o', 't', 'i', 'r', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "sou-co.jp", true */ 's', 'o', 'u', '-', 'c', 'o', '.', 'j', 'p', '\0',
   /* "soucorneteiro.com.br", true */ 's', 'o', 'u', 'c', 'o', 'r', 'n', 'e', 't', 'e', 'i', 'r', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "souki.cz", true */ 's', 'o', 'u', 'k', 'i', '.', 'c', 'z', '\0',
   /* "soulogic.com", false */ 's', 'o', 'u', 'l', 'o', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "soumikghosh.com", true */ 's', 'o', 'u', 'm', 'i', 'k', 'g', 'h', 'o', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "soundforsound.co.uk", true */ 's', 'o', 'u', 'n', 'd', 'f', 'o', 'r', 's', 'o', 'u', 'n', 'd', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "soundgasm.net", true */ 's', 'o', 'u', 'n', 'd', 'g', 'a', 's', 'm', '.', 'n', 'e', 't', '\0',
   /* "soundhunter.xyz", true */ 's', 'o', 'u', 'n', 'd', 'h', 'u', 'n', 't', 'e', 'r', '.', 'x', 'y', 'z', '\0',
@@ -10807,16 +10798,17 @@ static const char kSTSHostTable[] = {
   /* "speeds.vip", true */ 's', 'p', 'e', 'e', 'd', 's', '.', 'v', 'i', 'p', '\0',
   /* "speedy.lt", true */ 's', 'p', 'e', 'e', 'd', 'y', '.', 'l', 't', '\0',
   /* "speedyprep.com", true */ 's', 'p', 'e', 'e', 'd', 'y', 'p', 'r', 'e', 'p', '.', 'c', 'o', 'm', '\0',
   /* "speich.net", true */ 's', 'p', 'e', 'i', 'c', 'h', '.', 'n', 'e', 't', '\0',
   /* "spenglerei-shop.de", true */ 's', 'p', 'e', 'n', 'g', 'l', 'e', 'r', 'e', 'i', '-', 's', 'h', 'o', 'p', '.', 'd', 'e', '\0',
   /* "sperohub.com", true */ 's', 'p', 'e', 'r', 'o', 'h', 'u', 'b', '.', 'c', 'o', 'm', '\0',
   /* "sperohub.io", true */ 's', 'p', 'e', 'r', 'o', 'h', 'u', 'b', '.', 'i', 'o', '\0',
   /* "sperohub.lt", true */ 's', 'p', 'e', 'r', 'o', 'h', 'u', 'b', '.', 'l', 't', '\0',
+  /* "sperrstun.de", true */ 's', 'p', 'e', 'r', 'r', 's', 't', 'u', 'n', '.', 'd', 'e', '\0',
   /* "sphereblur.com", true */ 's', 'p', 'h', 'e', 'r', 'e', 'b', 'l', 'u', 'r', '.', 'c', 'o', 'm', '\0',
   /* "spherenix.org", true */ 's', 'p', 'h', 'e', 'r', 'e', 'n', 'i', 'x', '.', 'o', 'r', 'g', '\0',
   /* "spibe.is", true */ 's', 'p', 'i', 'b', 'e', '.', 'i', 's', '\0',
   /* "spicydog.org", true */ 's', 'p', 'i', 'c', 'y', 'd', 'o', 'g', '.', 'o', 'r', 'g', '\0',
   /* "spicydog.tk", true */ 's', 'p', 'i', 'c', 'y', 'd', 'o', 'g', '.', 't', 'k', '\0',
   /* "spicymatch.com", true */ 's', 'p', 'i', 'c', 'y', 'm', 'a', 't', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "spicywombat.com", true */ 's', 'p', 'i', 'c', 'y', 'w', 'o', 'm', 'b', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "spielcasinos.com", true */ 's', 'p', 'i', 'e', 'l', 'c', 'a', 's', 'i', 'n', 'o', 's', '.', 'c', 'o', 'm', '\0',
@@ -10859,16 +10851,17 @@ static const char kSTSHostTable[] = {
   /* "sprueche-zur-konfirmation.de", true */ 's', 'p', 'r', 'u', 'e', 'c', 'h', 'e', '-', 'z', 'u', 'r', '-', 'k', 'o', 'n', 'f', 'i', 'r', 'm', 'a', 't', 'i', 'o', 'n', '.', 'd', 'e', '\0',
   /* "sprutech.de", true */ 's', 'p', 'r', 'u', 't', 'e', 'c', 'h', '.', 'd', 'e', '\0',
   /* "sps-lehrgang.de", true */ 's', 'p', 's', '-', 'l', 'e', 'h', 'r', 'g', 'a', 'n', 'g', '.', 'd', 'e', '\0',
   /* "sptk.org", true */ 's', 'p', 't', 'k', '.', 'o', 'r', 'g', '\0',
   /* "spuffin.com", true */ 's', 'p', 'u', 'f', 'f', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "spydar007.com", true */ 's', 'p', 'y', 'd', 'a', 'r', '0', '0', '7', '.', 'c', 'o', 'm', '\0',
   /* "spydar007.net", true */ 's', 'p', 'y', 'd', 'a', 'r', '0', '0', '7', '.', 'n', 'e', 't', '\0',
   /* "spydersec.com", true */ 's', 'p', 'y', 'd', 'e', 'r', 's', 'e', 'c', '.', 'c', 'o', 'm', '\0',
+  /* "spyprofit.ru", true */ 's', 'p', 'y', 'p', 'r', 'o', 'f', 'i', 't', '.', 'r', 'u', '\0',
   /* "spyroszarzonis.com", true */ 's', 'p', 'y', 'r', 'o', 's', 'z', 'a', 'r', 'z', 'o', 'n', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "sqlapius.net", true */ 's', 'q', 'l', 'a', 'p', 'i', 'u', 's', '.', 'n', 'e', 't', '\0',
   /* "sqr-training.com", true */ 's', 'q', 'r', '-', 't', 'r', 'a', 'i', 'n', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "sqshq.de", true */ 's', 'q', 's', 'h', 'q', '.', 'd', 'e', '\0',
   /* "square-gaming.org", true */ 's', 'q', 'u', 'a', 'r', 'e', '-', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "square-src.de", true */ 's', 'q', 'u', 'a', 'r', 'e', '-', 's', 'r', 'c', '.', 'd', 'e', '\0',
   /* "square.com", false */ 's', 'q', 'u', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "squareup.com", false */ 's', 'q', 'u', 'a', 'r', 'e', 'u', 'p', '.', 'c', 'o', 'm', '\0',
@@ -11140,19 +11133,17 @@ static const char kSTSHostTable[] = {
   /* "supersonnig-festival.de", true */ 's', 'u', 'p', 'e', 'r', 's', 'o', 'n', 'n', 'i', 'g', '-', 'f', 'e', 's', 't', 'i', 'v', 'a', 'l', '.', 'd', 'e', '\0',
   /* "supersonnigfestival.de", true */ 's', 'u', 'p', 'e', 'r', 's', 'o', 'n', 'n', 'i', 'g', 'f', 'e', 's', 't', 'i', 'v', 'a', 'l', '.', 'd', 'e', '\0',
   /* "superswingtrainer.com", true */ 's', 'u', 'p', 'e', 'r', 's', 'w', 'i', 'n', 'g', 't', 'r', 'a', 'i', 'n', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "superuser.fi", true */ 's', 'u', 'p', 'e', 'r', 'u', 's', 'e', 'r', '.', 'f', 'i', '\0',
   /* "supinbot.ovh", false */ 's', 'u', 'p', 'i', 'n', 'b', 'o', 't', '.', 'o', 'v', 'h', '\0',
   /* "supplies24.at", true */ 's', 'u', 'p', 'p', 'l', 'i', 'e', 's', '2', '4', '.', 'a', 't', '\0',
   /* "supplies24.es", true */ 's', 'u', 'p', 'p', 'l', 'i', 'e', 's', '2', '4', '.', 'e', 's', '\0',
   /* "support.mayfirst.org", false */ 's', 'u', 'p', 'p', 'o', 'r', 't', '.', 'm', 'a', 'y', 'f', 'i', 'r', 's', 't', '.', 'o', 'r', 'g', '\0',
-  /* "supweb.ovh", true */ 's', 'u', 'p', 'w', 'e', 'b', '.', 'o', 'v', 'h', '\0',
   /* "sur-v.com", true */ 's', 'u', 'r', '-', 'v', '.', 'c', 'o', 'm', '\0',
-  /* "surfone-leucate.com", true */ 's', 'u', 'r', 'f', 'o', 'n', 'e', '-', 'l', 'e', 'u', 'c', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "surgenet.nl", true */ 's', 'u', 'r', 'g', 'e', 'n', 'e', 't', '.', 'n', 'l', '\0',
   /* "surgicalassociateswny.com", true */ 's', 'u', 'r', 'g', 'i', 'c', 'a', 'l', 'a', 's', 's', 'o', 'c', 'i', 'a', 't', 'e', 's', 'w', 'n', 'y', '.', 'c', 'o', 'm', '\0',
   /* "surkatty.org", true */ 's', 'u', 'r', 'k', 'a', 't', 't', 'y', '.', 'o', 'r', 'g', '\0',
   /* "survature.com", true */ 's', 'u', 'r', 'v', 'a', 't', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "survivalmonkey.com", true */ 's', 'u', 'r', 'v', 'i', 'v', 'a', 'l', 'm', 'o', 'n', 'k', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "susanbpilates.co", true */ 's', 'u', 's', 'a', 'n', 'b', 'p', 'i', 'l', 'a', 't', 'e', 's', '.', 'c', 'o', '\0',
   /* "susanbpilates.com", true */ 's', 'u', 's', 'a', 'n', 'b', 'p', 'i', 'l', 'a', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "susastudentenjobs.de", true */ 's', 'u', 's', 'a', 's', 't', 'u', 'd', 'e', 'n', 't', 'e', 'n', 'j', 'o', 'b', 's', '.', 'd', 'e', '\0',
@@ -11307,17 +11298,16 @@ static const char kSTSHostTable[] = {
   /* "tastycake.net", true */ 't', 'a', 's', 't', 'y', 'c', 'a', 'k', 'e', '.', 'n', 'e', 't', '\0',
   /* "tatilbus.com", false */ 't', 'a', 't', 'i', 'l', 'b', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "tatort-fanpage.de", true */ 't', 'a', 't', 'o', 'r', 't', '-', 'f', 'a', 'n', 'p', 'a', 'g', 'e', '.', 'd', 'e', '\0',
   /* "tatt.io", true */ 't', 'a', 't', 't', '.', 'i', 'o', '\0',
   /* "tattoo.dating", true */ 't', 'a', 't', 't', 'o', 'o', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "tavoittaja.fi", true */ 't', 'a', 'v', 'o', 'i', 't', 't', 'a', 'j', 'a', '.', 'f', 'i', '\0',
   /* "taxaroo.com", true */ 't', 'a', 'x', 'a', 'r', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "taxisafmatosinhos.pt", true */ 't', 'a', 'x', 'i', 's', 'a', 'f', 'm', 'a', 't', 'o', 's', 'i', 'n', 'h', 'o', 's', '.', 'p', 't', '\0',
-  /* "taxsnaps.co.nz", true */ 't', 'a', 'x', 's', 'n', 'a', 'p', 's', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "taxspeaker.com", true */ 't', 'a', 'x', 's', 'p', 'e', 'a', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "taxsquirrel.com", true */ 't', 'a', 'x', 's', 'q', 'u', 'i', 'r', 'r', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "tazj.in", false */ 't', 'a', 'z', 'j', '.', 'i', 'n', '\0',
   /* "tbarter.com", false */ 't', 'b', 'a', 'r', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "tbitc.ch", true */ 't', 'b', 'i', 't', 'c', '.', 'c', 'h', '\0',
   /* "tbrss.com", true */ 't', 'b', 'r', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "tbspace.de", true */ 't', 'b', 's', 'p', 'a', 'c', 'e', '.', 'd', 'e', '\0',
   /* "tbuchloh.de", true */ 't', 'b', 'u', 'c', 'h', 'l', 'o', 'h', '.', 'd', 'e', '\0',
@@ -11420,17 +11410,16 @@ static const char kSTSHostTable[] = {
   /* "tentations-voyages.com", true */ 't', 'e', 'n', 't', 'a', 't', 'i', 'o', 'n', 's', '-', 'v', 'o', 'y', 'a', 'g', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "tenyx.de", true */ 't', 'e', 'n', 'y', 'x', '.', 'd', 'e', '\0',
   /* "teos.online", true */ 't', 'e', 'o', 's', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "teoskanta.fi", true */ 't', 'e', 'o', 's', 'k', 'a', 'n', 't', 'a', '.', 'f', 'i', '\0',
   /* "tepid.org", true */ 't', 'e', 'p', 'i', 'd', '.', 'o', 'r', 'g', '\0',
   /* "teracloud.at", true */ 't', 'e', 'r', 'a', 'c', 'l', 'o', 'u', 'd', '.', 'a', 't', '\0',
   /* "teriiphotography.com", true */ 't', 'e', 'r', 'i', 'i', 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'c', 'o', 'm', '\0',
   /* "terrab.de", true */ 't', 'e', 'r', 'r', 'a', 'b', '.', 'd', 'e', '\0',
-  /* "terracloud.de", true */ 't', 'e', 'r', 'r', 'a', 'c', 'l', 'o', 'u', 'd', '.', 'd', 'e', '\0',
   /* "terraelectronica.ru", true */ 't', 'e', 'r', 'r', 'a', 'e', 'l', 'e', 'c', 't', 'r', 'o', 'n', 'i', 'c', 'a', '.', 'r', 'u', '\0',
   /* "terraform.io", true */ 't', 'e', 'r', 'r', 'a', 'f', 'o', 'r', 'm', '.', 'i', 'o', '\0',
   /* "terragni-sarasin.ch", true */ 't', 'e', 'r', 'r', 'a', 'g', 'n', 'i', '-', 's', 'a', 'r', 'a', 's', 'i', 'n', '.', 'c', 'h', '\0',
   /* "terrastaffinggroup.com", false */ 't', 'e', 'r', 'r', 'a', 's', 't', 'a', 'f', 'f', 'i', 'n', 'g', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "terraweb.net", true */ 't', 'e', 'r', 'r', 'a', 'w', 'e', 'b', '.', 'n', 'e', 't', '\0',
   /* "terrax.net", true */ 't', 'e', 'r', 'r', 'a', 'x', '.', 'n', 'e', 't', '\0',
   /* "terrty.net", true */ 't', 'e', 'r', 'r', 't', 'y', '.', 'n', 'e', 't', '\0',
   /* "terry.pub", true */ 't', 'e', 'r', 'r', 'y', '.', 'p', 'u', 'b', '\0',
@@ -11564,16 +11553,17 @@ static const char kSTSHostTable[] = {
   /* "thesession.org", false */ 't', 'h', 'e', 's', 'e', 's', 's', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "theshadestore.com", true */ 't', 'h', 'e', 's', 'h', 'a', 'd', 'e', 's', 't', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "thesharepointfarm.com", true */ 't', 'h', 'e', 's', 'h', 'a', 'r', 'e', 'p', 'o', 'i', 'n', 't', 'f', 'a', 'r', 'm', '.', 'c', 'o', 'm', '\0',
   /* "theshopally.com", true */ 't', 'h', 'e', 's', 'h', 'o', 'p', 'a', 'l', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "thesled.net", true */ 't', 'h', 'e', 's', 'l', 'e', 'd', '.', 'n', 'e', 't', '\0',
   /* "thesplit.is", true */ 't', 'h', 'e', 's', 'p', 'l', 'i', 't', '.', 'i', 's', '\0',
   /* "thestory.ie", true */ 't', 'h', 'e', 's', 't', 'o', 'r', 'y', '.', 'i', 'e', '\0',
   /* "thetechnical.me", true */ 't', 'h', 'e', 't', 'e', 'c', 'h', 'n', 'i', 'c', 'a', 'l', '.', 'm', 'e', '\0',
+  /* "thetradinghall.com", true */ 't', 'h', 'e', 't', 'r', 'a', 'd', 'i', 'n', 'g', 'h', 'a', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "thetuxkeeper.de", true */ 't', 'h', 'e', 't', 'u', 'x', 'k', 'e', 'e', 'p', 'e', 'r', '.', 'd', 'e', '\0',
   /* "theunitedstates.io", true */ 't', 'h', 'e', 'u', 'n', 'i', 't', 'e', 'd', 's', 't', 'a', 't', 'e', 's', '.', 'i', 'o', '\0',
   /* "theweilai.com", false */ 't', 'h', 'e', 'w', 'e', 'i', 'l', 'a', 'i', '.', 'c', 'o', 'm', '\0',
   /* "thewhitehat.club", true */ 't', 'h', 'e', 'w', 'h', 'i', 't', 'e', 'h', 'a', 't', '.', 'c', 'l', 'u', 'b', '\0',
   /* "thewhiterabbit.space", true */ 't', 'h', 'e', 'w', 'h', 'i', 't', 'e', 'r', 'a', 'b', 'b', 'i', 't', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "thewindow.com", true */ 't', 'h', 'e', 'w', 'i', 'n', 'd', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "thewoodkid.com.au", true */ 't', 'h', 'e', 'w', 'o', 'o', 'd', 'k', 'i', 'd', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "theworldsend.eu", true */ 't', 'h', 'e', 'w', 'o', 'r', 'l', 'd', 's', 'e', 'n', 'd', '.', 'e', 'u', '\0',
@@ -11629,16 +11619,17 @@ static const char kSTSHostTable[] = {
   /* "thusoy.com", true */ 't', 'h', 'u', 's', 'o', 'y', '.', 'c', 'o', 'm', '\0',
   /* "thyngster.com", false */ 't', 'h', 'y', 'n', 'g', 's', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "thynx.io", true */ 't', 'h', 'y', 'n', 'x', '.', 'i', 'o', '\0',
   /* "ti-pla.net", true */ 't', 'i', '-', 'p', 'l', 'a', '.', 'n', 'e', 't', '\0',
   /* "ti.blog.br", true */ 't', 'i', '.', 'b', 'l', 'o', 'g', '.', 'b', 'r', '\0',
   /* "tiacollection.com", true */ 't', 'i', 'a', 'c', 'o', 'l', 'l', 'e', 'c', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "tianshili.me", true */ 't', 'i', 'a', 'n', 's', 'h', 'i', 'l', 'i', '.', 'm', 'e', '\0',
   /* "tibbitshall.ca", true */ 't', 'i', 'b', 'b', 'i', 't', 's', 'h', 'a', 'l', 'l', '.', 'c', 'a', '\0',
+  /* "ticfleet.com", true */ 't', 'i', 'c', 'f', 'l', 'e', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "ticketmates.com.au", true */ 't', 'i', 'c', 'k', 'e', 't', 'm', 'a', 't', 'e', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "ticketoplichting.nl", true */ 't', 'i', 'c', 'k', 'e', 't', 'o', 'p', 'l', 'i', 'c', 'h', 't', 'i', 'n', 'g', '.', 'n', 'l', '\0',
   /* "tickettoaster.de", true */ 't', 'i', 'c', 'k', 'e', 't', 't', 'o', 'a', 's', 't', 'e', 'r', '.', 'd', 'e', '\0',
   /* "tid.jp", true */ 't', 'i', 'd', '.', 'j', 'p', '\0',
   /* "tidmore.us", true */ 't', 'i', 'd', 'm', 'o', 'r', 'e', '.', 'u', 's', '\0',
   /* "tidycustoms.net", true */ 't', 'i', 'd', 'y', 'c', 'u', 's', 't', 'o', 'm', 's', '.', 'n', 'e', 't', '\0',
   /* "tiendavertigo.com", true */ 't', 'i', 'e', 'n', 'd', 'a', 'v', 'e', 'r', 't', 'i', 'g', 'o', '.', 'c', 'o', 'm', '\0',
   /* "tiendschuurstraat.nl", true */ 't', 'i', 'e', 'n', 'd', 's', 'c', 'h', 'u', 'u', 'r', 's', 't', 'r', 'a', 'a', 't', '.', 'n', 'l', '\0',
@@ -11752,22 +11743,20 @@ static const char kSTSHostTable[] = {
   /* "tombaker.me", true */ 't', 'o', 'm', 'b', 'a', 'k', 'e', 'r', '.', 'm', 'e', '\0',
   /* "tombrossman.com", true */ 't', 'o', 'm', 'b', 'r', 'o', 's', 's', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "tomcort.com", true */ 't', 'o', 'm', 'c', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "tomeara.net", true */ 't', 'o', 'm', 'e', 'a', 'r', 'a', '.', 'n', 'e', 't', '\0',
   /* "tomend.es", true */ 't', 'o', 'm', 'e', 'n', 'd', '.', 'e', 's', '\0',
   /* "tomfisher.eu", true */ 't', 'o', 'm', 'f', 'i', 's', 'h', 'e', 'r', '.', 'e', 'u', '\0',
   /* "tomlankhorst.nl", true */ 't', 'o', 'm', 'l', 'a', 'n', 'k', 'h', 'o', 'r', 's', 't', '.', 'n', 'l', '\0',
   /* "tomli.me", true */ 't', 'o', 'm', 'l', 'i', '.', 'm', 'e', '\0',
-  /* "tommyads.com", true */ 't', 'o', 'm', 'm', 'y', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "tomo.gr", false */ 't', 'o', 'm', 'o', '.', 'g', 'r', '\0',
   /* "tomrei.com", true */ 't', 'o', 'm', 'r', 'e', 'i', '.', 'c', 'o', 'm', '\0',
   /* "tomrichards.net", true */ 't', 'o', 'm', 'r', 'i', 'c', 'h', 'a', 'r', 'd', 's', '.', 'n', 'e', 't', '\0',
   /* "tomssl.com", true */ 't', 'o', 'm', 's', 's', 'l', '.', 'c', 'o', 'm', '\0',
-  /* "tomudding.nl", true */ 't', 'o', 'm', 'u', 'd', 'd', 'i', 'n', 'g', '.', 'n', 'l', '\0',
   /* "tomvote.com", true */ 't', 'o', 'm', 'v', 'o', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "tomwiggers.nl", false */ 't', 'o', 'm', 'w', 'i', 'g', 'g', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "tomwilson.io", true */ 't', 'o', 'm', 'w', 'i', 'l', 's', 'o', 'n', '.', 'i', 'o', '\0',
   /* "tonabor.ru", true */ 't', 'o', 'n', 'a', 'b', 'o', 'r', '.', 'r', 'u', '\0',
   /* "tonage.de", true */ 't', 'o', 'n', 'a', 'g', 'e', '.', 'd', 'e', '\0',
   /* "toncusters.nl", true */ 't', 'o', 'n', 'c', 'u', 's', 't', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "tonegidoarchief.nl", true */ 't', 'o', 'n', 'e', 'g', 'i', 'd', 'o', 'a', 'r', 'c', 'h', 'i', 'e', 'f', '.', 'n', 'l', '\0',
   /* "toner24.at", true */ 't', 'o', 'n', 'e', 'r', '2', '4', '.', 'a', 't', '\0',
@@ -12087,16 +12076,17 @@ static const char kSTSHostTable[] = {
   /* "ukdropshipment.com", true */ 'u', 'k', 'd', 'r', 'o', 'p', 's', 'h', 'i', 'p', 'm', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "ukhas.net", true */ 'u', 'k', 'h', 'a', 's', '.', 'n', 'e', 't', '\0',
   /* "ukpirate.org", true */ 'u', 'k', 'p', 'i', 'r', 'a', 't', 'e', '.', 'o', 'r', 'g', '\0',
   /* "ukrainians.ch", true */ 'u', 'k', 'r', 'a', 'i', 'n', 'i', 'a', 'n', 's', '.', 'c', 'h', '\0',
   /* "ukwct.org.uk", true */ 'u', 'k', 'w', 'c', 't', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "ulabox.cat", true */ 'u', 'l', 'a', 'b', 'o', 'x', '.', 'c', 'a', 't', '\0',
   /* "ulabox.com", true */ 'u', 'l', 'a', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "ulabox.es", true */ 'u', 'l', 'a', 'b', 'o', 'x', '.', 'e', 's', '\0',
+  /* "ulrik.moe", true */ 'u', 'l', 'r', 'i', 'k', '.', 'm', 'o', 'e', '\0',
   /* "ultieme.be", true */ 'u', 'l', 't', 'i', 'e', 'm', 'e', '.', 'b', 'e', '\0',
   /* "umassfive.coop", true */ 'u', 'm', 'a', 's', 's', 'f', 'i', 'v', 'e', '.', 'c', 'o', 'o', 'p', '\0',
   /* "umenlisam.com", true */ 'u', 'm', 'e', 'n', 'l', 'i', 's', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "umgardi.ca", true */ 'u', 'm', 'g', 'a', 'r', 'd', 'i', '.', 'c', 'a', '\0',
   /* "umisonoda.com", true */ 'u', 'm', 'i', 's', 'o', 'n', 'o', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "umwandeln-online.de", true */ 'u', 'm', 'w', 'a', 'n', 'd', 'e', 'l', 'n', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0',
   /* "un-zero-un.fr", true */ 'u', 'n', '-', 'z', 'e', 'r', 'o', '-', 'u', 'n', '.', 'f', 'r', '\0',
   /* "unblockall.xyz", true */ 'u', 'n', 'b', 'l', 'o', 'c', 'k', 'a', 'l', 'l', '.', 'x', 'y', 'z', '\0',
@@ -12116,16 +12106,17 @@ static const char kSTSHostTable[] = {
   /* "unblockmy.party", true */ 'u', 'n', 'b', 'l', 'o', 'c', 'k', 'm', 'y', '.', 'p', 'a', 'r', 't', 'y', '\0',
   /* "unblockmy.tech", true */ 'u', 'n', 'b', 'l', 'o', 'c', 'k', 'm', 'y', '.', 't', 'e', 'c', 'h', '\0',
   /* "unblockmy.xyz", true */ 'u', 'n', 'b', 'l', 'o', 'c', 'k', 'm', 'y', '.', 'x', 'y', 'z', '\0',
   /* "unblockmyproxy.site", true */ 'u', 'n', 'b', 'l', 'o', 'c', 'k', 'm', 'y', 'p', 'r', 'o', 'x', 'y', '.', 's', 'i', 't', 'e', '\0',
   /* "unblockthe.site", true */ 'u', 'n', 'b', 'l', 'o', 'c', 'k', 't', 'h', 'e', '.', 's', 'i', 't', 'e', '\0',
   /* "unblockthe.top", true */ 'u', 'n', 'b', 'l', 'o', 'c', 'k', 't', 'h', 'e', '.', 't', 'o', 'p', '\0',
   /* "unblockweb.co", true */ 'u', 'n', 'b', 'l', 'o', 'c', 'k', 'w', 'e', 'b', '.', 'c', 'o', '\0',
   /* "under30stravelinsurance.com.au", true */ 'u', 'n', 'd', 'e', 'r', '3', '0', 's', 't', 'r', 'a', 'v', 'e', 'l', 'i', 'n', 's', 'u', 'r', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
+  /* "underskatten.tk", true */ 'u', 'n', 'd', 'e', 'r', 's', 'k', 'a', 't', 't', 'e', 'n', '.', 't', 'k', '\0',
   /* "undo.co.il", true */ 'u', 'n', 'd', 'o', '.', 'c', 'o', '.', 'i', 'l', '\0',
   /* "undone.me", true */ 'u', 'n', 'd', 'o', 'n', 'e', '.', 'm', 'e', '\0',
   /* "unearaigneeauplafond.fr", false */ 'u', 'n', 'e', 'a', 'r', 'a', 'i', 'g', 'n', 'e', 'e', 'a', 'u', 'p', 'l', 'a', 'f', 'o', 'n', 'd', '.', 'f', 'r', '\0',
   /* "unexpected.nu", true */ 'u', 'n', 'e', 'x', 'p', 'e', 'c', 't', 'e', 'd', '.', 'n', 'u', '\0',
   /* "ungegamere.dk", true */ 'u', 'n', 'g', 'e', 'g', 'a', 'm', 'e', 'r', 'e', '.', 'd', 'k', '\0',
   /* "unicef.pl", true */ 'u', 'n', 'i', 'c', 'e', 'f', '.', 'p', 'l', '\0',
   /* "unicorncloud.org", true */ 'u', 'n', 'i', 'c', 'o', 'r', 'n', 'c', 'l', 'o', 'u', 'd', '.', 'o', 'r', 'g', '\0',
   /* "unicredit.ba", true */ 'u', 'n', 'i', 'c', 'r', 'e', 'd', 'i', 't', '.', 'b', 'a', '\0',
@@ -12142,16 +12133,17 @@ static const char kSTSHostTable[] = {
   /* "uniprimebr.com.br", true */ 'u', 'n', 'i', 'p', 'r', 'i', 'm', 'e', 'b', 'r', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "uniq.site", true */ 'u', 'n', 'i', 'q', '.', 's', 'i', 't', 'e', '\0',
   /* "unirenter.ru", true */ 'u', 'n', 'i', 'r', 'e', 'n', 't', 'e', 'r', '.', 'r', 'u', '\0',
   /* "unisyssecurity.com", true */ 'u', 'n', 'i', 's', 'y', 's', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "unit7jazz.com", true */ 'u', 'n', 'i', 't', '7', 'j', 'a', 'z', 'z', '.', 'c', 'o', 'm', '\0',
   /* "unit7jazz.org", true */ 'u', 'n', 'i', 't', '7', 'j', 'a', 'z', 'z', '.', 'o', 'r', 'g', '\0',
   /* "united.com", false */ 'u', 'n', 'i', 't', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "unitedadmins.com", true */ 'u', 'n', 'i', 't', 'e', 'd', 'a', 'd', 'm', 'i', 'n', 's', '.', 'c', 'o', 'm', '\0',
+  /* "unitedcyberdevelopment.com", true */ 'u', 'n', 'i', 't', 'e', 'd', 'c', 'y', 'b', 'e', 'r', 'd', 'e', 'v', 'e', 'l', 'o', 'p', 'm', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "unitel2000.de", true */ 'u', 'n', 'i', 't', 'e', 'l', '2', '0', '0', '0', '.', 'd', 'e', '\0',
   /* "unitlabs.net", true */ 'u', 'n', 'i', 't', 'l', 'a', 'b', 's', '.', 'n', 'e', 't', '\0',
   /* "universalcarremote.com", true */ 'u', 'n', 'i', 'v', 'e', 'r', 's', 'a', 'l', 'c', 'a', 'r', 'r', 'e', 'm', 'o', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "universalpaymentgateway.com", true */ 'u', 'n', 'i', 'v', 'e', 'r', 's', 'a', 'l', 'p', 'a', 'y', 'm', 'e', 'n', 't', 'g', 'a', 't', 'e', 'w', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "unixadm.org", true */ 'u', 'n', 'i', 'x', 'a', 'd', 'm', '.', 'o', 'r', 'g', '\0',
   /* "unixattic.com", true */ 'u', 'n', 'i', 'x', 'a', 't', 't', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "unixcorn.org", true */ 'u', 'n', 'i', 'x', 'c', 'o', 'r', 'n', '.', 'o', 'r', 'g', '\0',
   /* "unlocken.nl", true */ 'u', 'n', 'l', 'o', 'c', 'k', 'e', 'n', '.', 'n', 'l', '\0',
@@ -12171,16 +12163,17 @@ static const char kSTSHostTable[] = {
   /* "unsuspicious.click", true */ 'u', 'n', 's', 'u', 's', 'p', 'i', 'c', 'i', 'o', 'u', 's', '.', 'c', 'l', 'i', 'c', 'k', '\0',
   /* "unsystem.net", true */ 'u', 'n', 's', 'y', 's', 't', 'e', 'm', '.', 'n', 'e', 't', '\0',
   /* "unterfrankenclan.de", true */ 'u', 'n', 't', 'e', 'r', 'f', 'r', 'a', 'n', 'k', 'e', 'n', 'c', 'l', 'a', 'n', '.', 'd', 'e', '\0',
   /* "untoldstory.eu", true */ 'u', 'n', 't', 'o', 'l', 'd', 's', 't', 'o', 'r', 'y', '.', 'e', 'u', '\0',
   /* "unun.fi", true */ 'u', 'n', 'u', 'n', '.', 'f', 'i', '\0',
   /* "unveiledgnosis.com", true */ 'u', 'n', 'v', 'e', 'i', 'l', 'e', 'd', 'g', 'n', 'o', 's', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "unyq.me", false */ 'u', 'n', 'y', 'q', '.', 'm', 'e', '\0',
   /* "up1.ca", true */ 'u', 'p', '1', '.', 'c', 'a', '\0',
+  /* "upaknship.com", true */ 'u', 'p', 'a', 'k', 'n', 's', 'h', 'i', 'p', '.', 'c', 'o', 'm', '\0',
   /* "upandclear.org", true */ 'u', 'p', 'a', 'n', 'd', 'c', 'l', 'e', 'a', 'r', '.', 'o', 'r', 'g', '\0',
   /* "upay.ru", true */ 'u', 'p', 'a', 'y', '.', 'r', 'u', '\0',
   /* "upboard.jp", true */ 'u', 'p', 'b', 'o', 'a', 'r', 'd', '.', 'j', 'p', '\0',
   /* "upitnik.rs", true */ 'u', 'p', 'i', 't', 'n', 'i', 'k', '.', 'r', 's', '\0',
   /* "uplinklabs.net", true */ 'u', 'p', 'l', 'i', 'n', 'k', 'l', 'a', 'b', 's', '.', 'n', 'e', 't', '\0',
   /* "upload.facebook.com", false */ 'u', 'p', 'l', 'o', 'a', 'd', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "uploadbeta.com", true */ 'u', 'p', 'l', 'o', 'a', 'd', 'b', 'e', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "upplevelse.com", true */ 'u', 'p', 'p', 'l', 'e', 'v', 'e', 'l', 's', 'e', '.', 'c', 'o', 'm', '\0',
@@ -12318,17 +12311,16 @@ static const char kSTSHostTable[] = {
   /* "veramagazine.jp", true */ 'v', 'e', 'r', 'a', 'm', 'a', 'g', 'a', 'z', 'i', 'n', 'e', '.', 'j', 'p', '\0',
   /* "verdeandco.co.uk", true */ 'v', 'e', 'r', 'd', 'e', 'a', 'n', 'd', 'c', 'o', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "verdict.gg", true */ 'v', 'e', 'r', 'd', 'i', 'c', 't', '.', 'g', 'g', '\0',
   /* "verein-kiekin.de", true */ 'v', 'e', 'r', 'e', 'i', 'n', '-', 'k', 'i', 'e', 'k', 'i', 'n', '.', 'd', 'e', '\0',
   /* "vereinscheck.de", true */ 'v', 'e', 'r', 'e', 'i', 'n', 's', 'c', 'h', 'e', 'c', 'k', '.', 'd', 'e', '\0',
   /* "verfassungsklage.at", true */ 'v', 'e', 'r', 'f', 'a', 's', 's', 'u', 'n', 'g', 's', 'k', 'l', 'a', 'g', 'e', '.', 'a', 't', '\0',
   /* "verifiedinvesting.com", true */ 'v', 'e', 'r', 'i', 'f', 'i', 'e', 'd', 'i', 'n', 'v', 'e', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "verifyos.com", true */ 'v', 'e', 'r', 'i', 'f', 'y', 'o', 's', '.', 'c', 'o', 'm', '\0',
-  /* "veriny.tf", true */ 'v', 'e', 'r', 'i', 'n', 'y', '.', 't', 'f', '\0',
   /* "verizonguidelines.com", true */ 'v', 'e', 'r', 'i', 'z', 'o', 'n', 'g', 'u', 'i', 'd', 'e', 'l', 'i', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "veronique-schmitz.de", true */ 'v', 'e', 'r', 'o', 'n', 'i', 'q', 'u', 'e', '-', 's', 'c', 'h', 'm', 'i', 't', 'z', '.', 'd', 'e', '\0',
   /* "versbeton.nl", true */ 'v', 'e', 'r', 's', 'b', 'e', 't', 'o', 'n', '.', 'n', 'l', '\0',
   /* "versicherungskontor.net", true */ 'v', 'e', 'r', 's', 'i', 'c', 'h', 'e', 'r', 'u', 'n', 'g', 's', 'k', 'o', 'n', 't', 'o', 'r', '.', 'n', 'e', 't', '\0',
   /* "vertner.net", true */ 'v', 'e', 'r', 't', 'n', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "veryapt.com", true */ 'v', 'e', 'r', 'y', 'a', 'p', 't', '.', 'c', 'o', 'm', '\0',
   /* "ves.vn.ua", true */ 'v', 'e', 's', '.', 'v', 'n', '.', 'u', 'a', '\0',
   /* "vespacascadia.com", true */ 'v', 'e', 's', 'p', 'a', 'c', 'a', 's', 'c', 'a', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
@@ -12543,17 +12535,16 @@ static const char kSTSHostTable[] = {
   /* "waylaydesign.com", true */ 'w', 'a', 'y', 'l', 'a', 'y', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
   /* "wayne.cloud", true */ 'w', 'a', 'y', 'n', 'e', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "wayohoo.com", true */ 'w', 'a', 'y', 'o', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "wayohoo.net", true */ 'w', 'a', 'y', 'o', 'h', 'o', 'o', '.', 'n', 'e', 't', '\0',
   /* "waze.com", true */ 'w', 'a', 'z', 'e', '.', 'c', 'o', 'm', '\0',
   /* "wbg-vs.de", true */ 'w', 'b', 'g', '-', 'v', 's', '.', 'd', 'e', '\0',
   /* "wbt-solutions.ch", true */ 'w', 'b', 't', '-', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'h', '\0',
   /* "wbt-solutions.net", true */ 'w', 'b', 't', '-', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'n', 'e', 't', '\0',
-  /* "wbuntu.com", true */ 'w', 'b', 'u', 'n', 't', 'u', '.', 'c', 'o', 'm', '\0',
   /* "wcbook.ru", true */ 'w', 'c', 'b', 'o', 'o', 'k', '.', 'r', 'u', '\0',
   /* "wdesk.com", true */ 'w', 'd', 'e', 's', 'k', '.', 'c', 'o', 'm', '\0',
   /* "wdrl.info", true */ 'w', 'd', 'r', 'l', '.', 'i', 'n', 'f', 'o', '\0',
   /* "wdt.cz", false */ 'w', 'd', 't', '.', 'c', 'z', '\0',
   /* "we-bb.com", true */ 'w', 'e', '-', 'b', 'b', '.', 'c', 'o', 'm', '\0',
   /* "wealthcentral.com.au", true */ 'w', 'e', 'a', 'l', 't', 'h', 'c', 'e', 'n', 't', 'r', 'a', 'l', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "wealthprojector.com", true */ 'w', 'e', 'a', 'l', 't', 'h', 'p', 'r', 'o', 'j', 'e', 'c', 't', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "wealthprojector.com.au", true */ 'w', 'e', 'a', 'l', 't', 'h', 'p', 'r', 'o', 'j', 'e', 'c', 't', 'o', 'r', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
@@ -12695,17 +12686,16 @@ static const char kSTSHostTable[] = {
   /* "wf-trial-hrd.appspot.com", true */ 'w', 'f', '-', 't', 'r', 'i', 'a', 'l', '-', 'h', 'r', 'd', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "wfh.ovh", true */ 'w', 'f', 'h', '.', 'o', 'v', 'h', '\0',
   /* "wfh.se", true */ 'w', 'f', 'h', '.', 's', 'e', '\0',
   /* "wftda.com", true */ 'w', 'f', 't', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "wg-tools.de", true */ 'w', 'g', '-', 't', 'o', 'o', 'l', 's', '.', 'd', 'e', '\0',
   /* "wh-guide.de", true */ 'w', 'h', '-', 'g', 'u', 'i', 'd', 'e', '.', 'd', 'e', '\0',
   /* "whatanime.ga", true */ 'w', 'h', 'a', 't', 'a', 'n', 'i', 'm', 'e', '.', 'g', 'a', '\0',
   /* "whatismyipaddress.ca", true */ 'w', 'h', 'a', 't', 'i', 's', 'm', 'y', 'i', 'p', 'a', 'd', 'd', 'r', 'e', 's', 's', '.', 'c', 'a', '\0',
-  /* "whatnext.limited", true */ 'w', 'h', 'a', 't', 'n', 'e', 'x', 't', '.', 'l', 'i', 'm', 'i', 't', 'e', 'd', '\0',
   /* "whatsapp.com", true */ 'w', 'h', 'a', 't', 's', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "whatsmychaincert.com", true */ 'w', 'h', 'a', 't', 's', 'm', 'y', 'c', 'h', 'a', 'i', 'n', 'c', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "whatsupgold.com.tw", true */ 'w', 'h', 'a', 't', 's', 'u', 'p', 'g', 'o', 'l', 'd', '.', 'c', 'o', 'm', '.', 't', 'w', '\0',
   /* "whatwebcando.today", true */ 'w', 'h', 'a', 't', 'w', 'e', 'b', 'c', 'a', 'n', 'd', 'o', '.', 't', 'o', 'd', 'a', 'y', '\0',
   /* "whatwg.org", true */ 'w', 'h', 'a', 't', 'w', 'g', '.', 'o', 'r', 'g', '\0',
   /* "whd-guide.de", true */ 'w', 'h', 'd', '-', 'g', 'u', 'i', 'd', 'e', '.', 'd', 'e', '\0',
   /* "wheeler.kiwi.nz", true */ 'w', 'h', 'e', 'e', 'l', 'e', 'r', '.', 'k', 'i', 'w', 'i', '.', 'n', 'z', '\0',
   /* "when-release.ru", false */ 'w', 'h', 'e', 'n', '-', 'r', 'e', 'l', 'e', 'a', 's', 'e', '.', 'r', 'u', '\0',
@@ -13079,16 +13069,17 @@ static const char kSTSHostTable[] = {
   /* "xps2pdf.co.uk", true */ 'x', 'p', 's', '2', 'p', 'd', 'f', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "xqin.net", true */ 'x', 'q', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "xrippedhd.com", true */ 'x', 'r', 'i', 'p', 'p', 'e', 'd', 'h', 'd', '.', 'c', 'o', 'm', '\0',
   /* "xrockx.de", true */ 'x', 'r', 'o', 'c', 'k', 'x', '.', 'd', 'e', '\0',
   /* "xroot.org", true */ 'x', 'r', 'o', 'o', 't', '.', 'o', 'r', 'g', '\0',
   /* "xscapers.com", true */ 'x', 's', 'c', 'a', 'p', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "xss.ht", true */ 'x', 's', 's', '.', 'h', 't', '\0',
   /* "xss.sk", true */ 'x', 's', 's', '.', 's', 'k', '\0',
+  /* "xtremegaming.it", true */ 'x', 't', 'r', 'e', 'm', 'e', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'i', 't', '\0',
   /* "xtrim.ru", true */ 'x', 't', 'r', 'i', 'm', '.', 'r', 'u', '\0',
   /* "xtronics.com", true */ 'x', 't', 'r', 'o', 'n', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "xuc.me", true */ 'x', 'u', 'c', '.', 'm', 'e', '\0',
   /* "xuexb.com", true */ 'x', 'u', 'e', 'x', 'b', '.', 'c', 'o', 'm', '\0',
   /* "xunn.io", true */ 'x', 'u', 'n', 'n', '.', 'i', 'o', '\0',
   /* "xuntier.ch", true */ 'x', 'u', 'n', 't', 'i', 'e', 'r', '.', 'c', 'h', '\0',
   /* "xuyh0120.win", true */ 'x', 'u', 'y', 'h', '0', '1', '2', '0', '.', 'w', 'i', 'n', '\0',
   /* "xwalck.se", true */ 'x', 'w', 'a', 'l', 'c', 'k', '.', 's', 'e', '\0',
@@ -13302,17 +13293,16 @@ static const char kSTSHostTable[] = {
   /* "zlavomat.sk", true */ 'z', 'l', 'a', 'v', 'o', 'm', 'a', 't', '.', 's', 'k', '\0',
   /* "zmy.im", true */ 'z', 'm', 'y', '.', 'i', 'm', '\0',
   /* "znation.nl", true */ 'z', 'n', 'a', 't', 'i', 'o', 'n', '.', 'n', 'l', '\0',
   /* "zning.net.cn", true */ 'z', 'n', 'i', 'n', 'g', '.', 'n', 'e', 't', '.', 'c', 'n', '\0',
   /* "zockenbiszumumfallen.de", true */ 'z', 'o', 'c', 'k', 'e', 'n', 'b', 'i', 's', 'z', 'u', 'm', 'u', 'm', 'f', 'a', 'l', 'l', 'e', 'n', '.', 'd', 'e', '\0',
   /* "zoe.vc", true */ 'z', 'o', 'e', '.', 'v', 'c', '\0',
   /* "zoeller.me", true */ 'z', 'o', 'e', 'l', 'l', 'e', 'r', '.', 'm', 'e', '\0',
   /* "zohar.wang", true */ 'z', 'o', 'h', 'a', 'r', '.', 'w', 'a', 'n', 'g', '\0',
-  /* "zombiesecured.com", true */ 'z', 'o', 'm', 'b', 'i', 'e', 's', 'e', 'c', 'u', 'r', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "zomiac.pp.ua", true */ 'z', 'o', 'm', 'i', 'a', 'c', '.', 'p', 'p', '.', 'u', 'a', '\0',
   /* "zonemaster.net", true */ 'z', 'o', 'n', 'e', 'm', 'a', 's', 't', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "zoneminder.com", true */ 'z', 'o', 'n', 'e', 'm', 'i', 'n', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "zonglovani.info", true */ 'z', 'o', 'n', 'g', 'l', 'o', 'v', 'a', 'n', 'i', '.', 'i', 'n', 'f', 'o', '\0',
   /* "zoom.earth", true */ 'z', 'o', 'o', 'm', '.', 'e', 'a', 'r', 't', 'h', '\0',
   /* "zoommailing.com", true */ 'z', 'o', 'o', 'm', 'm', 'a', 'i', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "zooom.azurewebsites.net", true */ 'z', 'o', 'o', 'o', 'm', '.', 'a', 'z', 'u', 'r', 'e', 'w', 'e', 'b', 's', 'i', 't', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "zooparadies.eu", true */ 'z', 'o', 'o', 'p', 'a', 'r', 'a', 'd', 'i', 'e', 's', '.', 'e', 'u', '\0',
@@ -13366,13322 +13356,13312 @@ static const nsSTSPreload kSTSPreloadLis
   { 128, true },
   { 137, true },
   { 145, true },
   { 154, true },
   { 163, true },
   { 172, true },
   { 180, true },
   { 188, true },
-  { 195, true },
-  { 206, true },
-  { 219, true },
-  { 227, true },
-  { 236, true },
-  { 244, true },
-  { 251, true },
-  { 265, true },
-  { 275, false },
-  { 298, true },
-  { 314, true },
-  { 326, true },
-  { 342, true },
-  { 350, true },
-  { 358, true },
-  { 368, true },
-  { 375, true },
-  { 390, true },
-  { 401, true },
-  { 412, true },
-  { 431, true },
-  { 441, true },
+  { 198, true },
+  { 205, true },
+  { 215, true },
+  { 226, true },
+  { 239, true },
+  { 247, true },
+  { 256, true },
+  { 264, true },
+  { 271, true },
+  { 285, true },
+  { 295, false },
+  { 318, true },
+  { 334, true },
+  { 346, true },
+  { 362, true },
+  { 370, true },
+  { 378, true },
+  { 388, true },
+  { 395, true },
+  { 410, true },
+  { 421, true },
+  { 432, true },
   { 451, true },
-  { 476, true },
-  { 484, true },
-  { 492, true },
-  { 506, true },
-  { 517, true },
-  { 533, true },
-  { 544, true },
-  { 565, true },
-  { 581, false },
-  { 589, true },
-  { 614, true },
-  { 636, true },
-  { 653, true },
-  { 676, true },
-  { 686, true },
-  { 697, true },
-  { 708, true },
-  { 722, true },
-  { 744, true },
-  { 756, true },
-  { 765, true },
-  { 772, true },
-  { 783, true },
-  { 794, true },
-  { 801, true },
-  { 808, true },
-  { 819, true },
-  { 826, true },
-  { 843, true },
-  { 861, true },
-  { 875, true },
-  { 887, true },
-  { 898, true },
-  { 908, true },
-  { 917, true },
-  { 923, true },
-  { 938, true },
-  { 946, true },
-  { 955, true },
-  { 973, true },
-  { 985, true },
-  { 1001, true },
-  { 1010, true },
-  { 1018, true },
-  { 1026, true },
-  { 1037, true },
-  { 1049, true },
+  { 461, true },
+  { 471, true },
+  { 496, true },
+  { 504, true },
+  { 512, true },
+  { 526, true },
+  { 537, true },
+  { 553, true },
+  { 564, true },
+  { 585, true },
+  { 601, false },
+  { 609, true },
+  { 634, true },
+  { 656, true },
+  { 673, true },
+  { 696, true },
+  { 706, true },
+  { 717, true },
+  { 728, true },
+  { 742, true },
+  { 764, true },
+  { 776, true },
+  { 785, true },
+  { 792, true },
+  { 803, true },
+  { 814, true },
+  { 821, true },
+  { 828, true },
+  { 839, true },
+  { 846, true },
+  { 863, true },
+  { 881, true },
+  { 895, true },
+  { 907, true },
+  { 918, true },
+  { 928, true },
+  { 937, true },
+  { 943, true },
+  { 958, true },
+  { 966, true },
+  { 975, true },
+  { 993, true },
+  { 1005, true },
+  { 1021, true },
+  { 1030, true },
+  { 1038, true },
+  { 1046, true },
   { 1057, true },
-  { 1067, true },
-  { 1083, false },
-  { 1096, true },
-  { 1105, true },
-  { 1119, true },
-  { 1128, true },
-  { 1149, true },
-  { 1158, true },
-  { 1168, true },
-  { 1183, true },
-  { 1200, true },
-  { 1207, true },
+  { 1069, true },
+  { 1077, true },
+  { 1087, true },
+  { 1103, false },
+  { 1116, true },
+  { 1125, true },
+  { 1139, true },
+  { 1148, true },
+  { 1169, true },
+  { 1178, true },
+  { 1188, true },
+  { 1203, true },
   { 1220, true },
-  { 1229, true },
-  { 1241, false },
-  { 1253, true },
-  { 1261, true },
-  { 1272, true },
+  { 1227, true },
+  { 1240, true },
+  { 1249, true },
+  { 1261, false },
+  { 1273, true },
   { 1281, true },
-  { 1290, false },
-  { 1306, true },
-  { 1319, true },
-  { 1328, true },
-  { 1347, true },
-  { 1366, true },
-  { 1378, true },
-  { 1391, true },
-  { 1407, true },
-  { 1422, true },
-  { 1435, true },
-  { 1445, true },
-  { 1459, true },
-  { 1475, true },
-  { 1489, true },
-  { 1504, true },
-  { 1512, true },
-  { 1519, true },
-  { 1526, true },
-  { 1538, true },
-  { 1549, true },
+  { 1292, true },
+  { 1301, true },
+  { 1310, false },
+  { 1326, true },
+  { 1339, true },
+  { 1348, true },
+  { 1367, true },
+  { 1386, true },
+  { 1398, true },
+  { 1411, true },
+  { 1427, true },
+  { 1442, true },
+  { 1455, true },
+  { 1465, true },
+  { 1479, true },
+  { 1495, true },
+  { 1509, true },
+  { 1524, true },
+  { 1532, true },
+  { 1539, true },
+  { 1546, true },
   { 1558, true },
   { 1569, true },
-  { 1584, true },
-  { 1592, true },
-  { 1601, false },
-  { 1614, true },
-  { 1622, true },
+  { 1578, true },
+  { 1589, true },
+  { 1604, true },
+  { 1612, true },
+  { 1621, false },
   { 1634, true },
-  { 1649, true },
-  { 1668, false },
-  { 1687, true },
-  { 1697, true },
-  { 1703, true },
-  { 1712, true },
-  { 1725, false },
-  { 1732, true },
-  { 1744, true },
-  { 1753, true },
-  { 1766, true },
-  { 1776, true },
-  { 1784, false },
-  { 1791, true },
-  { 1802, true },
-  { 1814, true },
-  { 1822, true },
-  { 1835, true },
-  { 1842, true },
-  { 1851, true },
-  { 1863, true },
-  { 1872, true },
-  { 1893, true },
-  { 1917, true },
-  { 1928, true },
-  { 1934, true },
-  { 1947, true },
-  { 1959, true },
-  { 1971, true },
-  { 1981, true },
+  { 1642, true },
+  { 1654, true },
+  { 1669, true },
+  { 1688, true },
+  { 1695, false },
+  { 1714, true },
+  { 1724, true },
+  { 1730, true },
+  { 1739, true },
+  { 1752, false },
+  { 1759, true },
+  { 1771, true },
+  { 1780, true },
+  { 1793, true },
+  { 1803, true },
+  { 1811, false },
+  { 1818, true },
+  { 1829, true },
+  { 1841, true },
+  { 1849, true },
+  { 1862, true },
+  { 1869, true },
+  { 1878, true },
+  { 1890, true },
+  { 1899, true },
+  { 1920, true },
+  { 1944, true },
+  { 1955, true },
+  { 1961, true },
+  { 1974, true },
+  { 1986, true },
   { 1998, true },
-  { 2005, true },
-  { 2014, true },
-  { 2035, false },
-  { 2048, true },
-  { 2055, true },
-  { 2065, true },
-  { 2076, true },
-  { 2088, true },
-  { 2097, true },
-  { 2107, true },
-  { 2118, true },
-  { 2126, true },
-  { 2138, true },
-  { 2148, true },
-  { 2167, true },
-  { 2178, true },
-  { 2189, true },
-  { 2198, true },
-  { 2211, true },
-  { 2222, true },
-  { 2237, true },
-  { 2252, true },
-  { 2260, true },
-  { 2270, true },
+  { 2008, true },
+  { 2025, true },
+  { 2032, true },
+  { 2041, true },
+  { 2062, false },
+  { 2075, true },
+  { 2082, true },
+  { 2092, true },
+  { 2103, true },
+  { 2115, true },
+  { 2124, true },
+  { 2134, true },
+  { 2145, true },
+  { 2153, true },
+  { 2165, true },
+  { 2175, true },
+  { 2194, true },
+  { 2205, true },
+  { 2216, true },
+  { 2225, true },
+  { 2238, true },
+  { 2249, true },
+  { 2264, true },
+  { 2279, true },
   { 2287, true },
-  { 2302, true },
-  { 2309, false },
-  { 2320, true },
-  { 2335, true },
-  { 2354, true },
-  { 2364, true },
-  { 2375, true },
-  { 2393, true },
-  { 2407, true },
-  { 2419, true },
+  { 2297, true },
+  { 2314, true },
+  { 2329, true },
+  { 2336, false },
+  { 2347, true },
+  { 2362, false },
+  { 2377, true },
+  { 2396, true },
+  { 2406, true },
+  { 2417, true },
   { 2435, true },
-  { 2446, false },
-  { 2462, false },
-  { 2474, true },
-  { 2487, true },
-  { 2500, false },
-  { 2508, true },
-  { 2517, true },
-  { 2541, true },
-  { 2556, true },
-  { 2575, true },
-  { 2588, true },
-  { 2600, true },
-  { 2611, true },
-  { 2635, true },
-  { 2648, true },
-  { 2657, true },
-  { 2674, true },
-  { 2686, true },
-  { 2705, true },
+  { 2449, true },
+  { 2461, true },
+  { 2477, true },
+  { 2488, false },
+  { 2504, false },
+  { 2516, true },
+  { 2529, true },
+  { 2542, false },
+  { 2550, true },
+  { 2559, true },
+  { 2583, true },
+  { 2598, true },
+  { 2617, true },
+  { 2630, true },
+  { 2642, true },
+  { 2653, true },
+  { 2677, true },
+  { 2690, true },
+  { 2699, true },
+  { 2716, true },
   { 2728, true },
-  { 2744, true },
-  { 2761, true },
-  { 2781, true },
-  { 2796, true },
-  { 2817, true },
-  { 2837, true },
-  { 2849, true },
-  { 2860, true },
-  { 2867, true },
+  { 2747, true },
+  { 2770, true },
+  { 2786, true },
+  { 2803, true },
+  { 2823, true },
+  { 2838, true },
+  { 2859, true },
   { 2879, true },
-  { 2900, true },
-  { 2912, true },
-  { 2929, true },
+  { 2891, true },
+  { 2902, true },
+  { 2909, true },
+  { 2921, true },
   { 2942, true },
-  { 2958, true },
-  { 2970, true },
-  { 2983, true },
-  { 2998, false },
-  { 3007, true },
-  { 3022, true },
-  { 3039, true },
-  { 3053, true },
-  { 3069, true },
-  { 3080, true },
-  { 3092, true },
-  { 3113, true },
-  { 3130, false },
-  { 3140, true },
+  { 2954, true },
+  { 2971, true },
+  { 2984, true },
+  { 3000, true },
+  { 3012, true },
+  { 3025, true },
+  { 3040, false },
+  { 3049, true },
+  { 3064, true },
+  { 3081, true },
+  { 3095, true },
+  { 3111, true },
+  { 3122, true },
+  { 3134, true },
   { 3155, true },
-  { 3169, false },
+  { 3172, false },
   { 3182, true },
-  { 3191, true },
-  { 3205, true },
-  { 3217, true },
-  { 3232, true },
-  { 3245, true },
-  { 3257, true },
-  { 3269, true },
-  { 3281, true },
-  { 3293, true },
-  { 3305, true },
-  { 3316, true },
-  { 3333, true },
+  { 3197, true },
+  { 3211, false },
+  { 3224, true },
+  { 3233, true },
+  { 3247, true },
+  { 3259, true },
+  { 3274, true },
+  { 3287, true },
+  { 3299, true },
+  { 3311, true },
+  { 3323, true },
+  { 3335, true },
   { 3347, true },
-  { 3363, true },
-  { 3376, true },
-  { 3393, true },
-  { 3409, true },
-  { 3424, true },
-  { 3439, true },
-  { 3457, true },
+  { 3358, true },
+  { 3375, true },
+  { 3389, true },
+  { 3405, true },
+  { 3418, true },
+  { 3435, true },
+  { 3451, true },
   { 3466, true },
-  { 3479, true },
-  { 3500, true },
-  { 3509, true },
-  { 3519, true },
-  { 3544, true },
-  { 3555, true },
-  { 3574, true },
+  { 3481, true },
+  { 3499, true },
+  { 3508, true },
+  { 3521, true },
+  { 3542, true },
+  { 3551, true },
+  { 3561, true },
   { 3586, true },
-  { 3605, true },
-  { 3624, true },
-  { 3643, true },
-  { 3662, true },
-  { 3677, true },
-  { 3688, true },
-  { 3701, true },
-  { 3713, true },
-  { 3726, true },
-  { 3740, true },
-  { 3753, true },
-  { 3764, true },
-  { 3773, true },
-  { 3787, true },
-  { 3799, true },
-  { 3826, true },
-  { 3852, true },
-  { 3863, true },
-  { 3876, true },
-  { 3887, true },
-  { 3911, true },
-  { 3928, true },
-  { 3956, true },
-  { 3972, true },
-  { 3981, true },
-  { 3991, true },
-  { 4005, true },
-  { 4015, true },
-  { 4029, false },
-  { 4050, true },
-  { 4068, true },
-  { 4076, true },
-  { 4085, true },
-  { 4104, true },
-  { 4123, true },
-  { 4136, true },
-  { 4147, true },
-  { 4167, true },
-  { 4185, false },
-  { 4204, true },
-  { 4218, true },
-  { 4228, true },
-  { 4249, true },
-  { 4265, true },
-  { 4275, true },
-  { 4288, true },
-  { 4301, true },
-  { 4315, true },
-  { 4329, true },
-  { 4339, true },
-  { 4349, true },
-  { 4359, true },
-  { 4369, true },
-  { 4379, true },
-  { 4389, true },
-  { 4406, false },
-  { 4414, true },
-  { 4425, true },
-  { 4444, true },
-  { 4455, true },
-  { 4466, true },
-  { 4475, true },
-  { 4495, true },
-  { 4506, true },
-  { 4530, true },
-  { 4544, true },
-  { 4560, true },
+  { 3597, true },
+  { 3616, true },
+  { 3628, true },
+  { 3647, true },
+  { 3666, true },
+  { 3685, true },
+  { 3704, true },
+  { 3719, true },
+  { 3730, true },
+  { 3743, true },
+  { 3755, true },
+  { 3768, true },
+  { 3782, true },
+  { 3795, true },
+  { 3806, true },
+  { 3815, true },
+  { 3829, true },
+  { 3841, true },
+  { 3868, true },
+  { 3894, true },
+  { 3905, true },
+  { 3918, true },
+  { 3929, true },
+  { 3953, true },
+  { 3970, true },
+  { 3998, true },
+  { 4014, true },
+  { 4023, true },
+  { 4033, true },
+  { 4047, true },
+  { 4057, true },
+  { 4071, false },
+  { 4092, true },
+  { 4110, true },
+  { 4118, true },
+  { 4127, true },
+  { 4146, true },
+  { 4165, true },
+  { 4178, true },
+  { 4189, true },
+  { 4209, true },
+  { 4227, false },
+  { 4246, true },
+  { 4260, true },
+  { 4270, true },
+  { 4291, true },
+  { 4307, true },
+  { 4317, true },
+  { 4330, true },
+  { 4343, true },
+  { 4357, true },
+  { 4371, true },
+  { 4381, true },
+  { 4391, true },
+  { 4401, true },
+  { 4411, true },
+  { 4421, true },
+  { 4431, true },
+  { 4448, false },
+  { 4456, true },
+  { 4467, true },
+  { 4486, true },
+  { 4497, true },
+  { 4508, true },
+  { 4517, true },
+  { 4537, true },
+  { 4548, true },
   { 4572, true },
-  { 4588, true },
-  { 4599, true },
-  { 4613, true },
-  { 4629, true },
-  { 4644, true },
-  { 4652, true },
-  { 4669, false },
-  { 4693, true },
-  { 4710, true },
-  { 4718, true },
-  { 4734, true },
-  { 4742, true },
-  { 4756, true },
-  { 4768, true },
-  { 4780, true },
-  { 4792, true },
-  { 4804, true },
-  { 4814, true },
+  { 4586, true },
+  { 4602, true },
+  { 4614, true },
+  { 4630, true },
+  { 4641, true },
+  { 4655, true },
+  { 4671, true },
+  { 4686, true },
+  { 4694, true },
+  { 4711, false },
+  { 4735, true },
+  { 4752, true },
+  { 4760, true },
+  { 4776, true },
+  { 4784, true },
+  { 4798, true },
+  { 4810, true },
   { 4822, true },
-  { 4836, true },
-  { 4849, true },
-  { 4861, true },
-  { 4880, true },
-  { 4899, true },
-  { 4932, true },
-  { 4942, true },
-  { 4949, true },
-  { 4966, true },
-  { 4981, true },
-  { 4990, true },
-  { 4997, true },
-  { 5011, true },
-  { 5019, true },
-  { 5030, true },
-  { 5045, true },
-  { 5060, true },
-  { 5070, true },
-  { 5081, true },
-  { 5096, true },
-  { 5108, true },
-  { 5119, true },
-  { 5139, true },
+  { 4834, true },
+  { 4846, true },
+  { 4856, true },
+  { 4864, true },
+  { 4878, true },
+  { 4891, true },
+  { 4903, true },
+  { 4922, true },
+  { 4941, true },
+  { 4974, true },
+  { 4984, true },
+  { 4991, true },
+  { 5008, true },
+  { 5023, true },
+  { 5032, true },
+  { 5039, true },
+  { 5053, true },
+  { 5061, true },
+  { 5072, true },
+  { 5087, true },
+  { 5102, true },
+  { 5112, true },
+  { 5123, true },
+  { 5138, true },
   { 5150, true },
-  { 5163, true },
-  { 5174, true },
-  { 5185, true },
-  { 5198, true },
+  { 5161, true },
+  { 5181, true },
+  { 5192, true },
+  { 5205, true },
   { 5216, true },
-  { 5228, true },
-  { 5237, true },
-  { 5251, true },
-  { 5263, true },
-  { 5274, true },
-  { 5291, true },
-  { 5302, true },
-  { 5310, true },
-  { 5319, true },
-  { 5345, true },
-  { 5356, true },
-  { 5366, false },
-  { 5383, true },
-  { 5393, true },
-  { 5407, true },
-  { 5420, true },
-  { 5432, true },
-  { 5441, true },
-  { 5458, true },
-  { 5482, true },
-  { 5498, true },
-  { 5518, true },
-  { 5543, true },
-  { 5568, true },
-  { 5593, true },
-  { 5605, true },
-  { 5617, true },
-  { 5626, true },
-  { 5637, true },
-  { 5664, true },
-  { 5677, true },
-  { 5693, true },
-  { 5709, true },
-  { 5721, true },
+  { 5227, true },
+  { 5240, true },
+  { 5258, true },
+  { 5270, true },
+  { 5279, true },
+  { 5293, true },
+  { 5305, true },
+  { 5316, true },
+  { 5333, true },
+  { 5344, true },
+  { 5352, true },
+  { 5361, true },
+  { 5387, true },
+  { 5398, true },
+  { 5408, false },
+  { 5425, true },
+  { 5435, true },
+  { 5449, true },
+  { 5462, true },
+  { 5474, true },
+  { 5483, true },
+  { 5500, true },
+  { 5524, true },
+  { 5540, true },
+  { 5560, true },
+  { 5585, true },
+  { 5610, true },
+  { 5635, true },
+  { 5647, true },
+  { 5659, true },
+  { 5668, true },
+  { 5679, true },
+  { 5706, true },
+  { 5719, true },
   { 5735, true },
-  { 5755, true },
-  { 5770, false },
-  { 5791, true },
-  { 5803, true },
-  { 5813, true },
-  { 5825, true },
-  { 5837, true },
-  { 5849, true },
-  { 5868, true },
-  { 5881, true },
-  { 5892, true },
-  { 5906, true },
-  { 5922, true },
-  { 5942, true },
-  { 5963, true },
-  { 5976, true },
-  { 5990, true },
-  { 6003, true },
-  { 6013, true },
-  { 6028, true },
-  { 6046, true },
+  { 5751, true },
+  { 5763, true },
+  { 5777, true },
+  { 5797, true },
+  { 5812, false },
+  { 5833, true },
+  { 5845, true },
+  { 5855, true },
+  { 5867, true },
+  { 5879, true },
+  { 5891, true },
+  { 5910, true },
+  { 5923, true },
+  { 5934, true },
+  { 5945, true },
+  { 5959, true },
+  { 5975, true },
+  { 5995, true },
+  { 6016, true },
+  { 6029, true },
+  { 6043, true },
   { 6056, true },
-  { 6071, true },
-  { 6089, true },
-  { 6103, true },
-  { 6118, true },
-  { 6132, true },
-  { 6147, true },
-  { 6157, true },
+  { 6066, true },
+  { 6081, true },
+  { 6099, true },
+  { 6109, true },
+  { 6124, true },
+  { 6142, true },
+  { 6156, true },
   { 6171, true },
-  { 6188, true },
-  { 6203, true },
-  { 6217, true },
-  { 6231, true },
-  { 6247, true },
-  { 6259, true },
-  { 6271, true },
-  { 6286, true },
+  { 6185, true },
+  { 6200, true },
+  { 6210, true },
+  { 6224, true },
+  { 6241, true },
+  { 6256, true },
+  { 6270, true },
+  { 6284, true },
   { 6300, true },
-  { 6322, true },
-  { 6343, false },
-  { 6364, true },
-  { 6377, true },
-  { 6389, true },
-  { 6402, true },
-  { 6413, true },
-  { 6429, false },
-  { 6436, true },
-  { 6447, true },
-  { 6459, true },
-  { 6472, true },
-  { 6492, true },
-  { 6513, true },
-  { 6526, true },
-  { 6539, false },
-  { 6557, true },
-  { 6574, true },
-  { 6598, true },
-  { 6617, true },
-  { 6628, true },
-  { 6642, true },
-  { 6658, true },
-  { 6677, true },
-  { 6698, true },
-  { 6718, true },
-  { 6738, true },
-  { 6751, false },
-  { 6764, true },
-  { 6776, true },
-  { 6786, true },
-  { 6799, true },
-  { 6813, true },
+  { 6312, true },
+  { 6324, true },
+  { 6339, true },
+  { 6353, true },
+  { 6375, true },
+  { 6396, false },
+  { 6417, true },
+  { 6430, true },
+  { 6442, true },
+  { 6455, true },
+  { 6466, true },
+  { 6482, false },
+  { 6489, true },
+  { 6500, true },
+  { 6512, true },
+  { 6525, true },
+  { 6545, true },
+  { 6566, true },
+  { 6579, true },
+  { 6592, false },
+  { 6610, true },
+  { 6627, true },
+  { 6651, true },
+  { 6670, true },
+  { 6681, true },
+  { 6695, true },
+  { 6711, true },
+  { 6730, true },
+  { 6751, true },
+  { 6771, true },
+  { 6791, true },
+  { 6804, false },
+  { 6817, true },
   { 6829, true },
-  { 6843, true },
-  { 6859, true },
-  { 6871, true },
-  { 6885, true },
-  { 6898, true },
+  { 6839, true },
+  { 6852, true },
+  { 6866, true },
+  { 6882, true },
+  { 6896, true },
   { 6912, true },
-  { 6920, true },
-  { 6935, true },
-  { 6949, true },
-  { 6968, true },
-  { 6980, true },
-  { 6994, true },
-  { 7008, true },
-  { 7020, true },
-  { 7031, true },
-  { 7042, true },
-  { 7056, true },
-  { 7064, true },
-  { 7075, true },
-  { 7083, true },
-  { 7091, true },
-  { 7099, true },
-  { 7107, true },
-  { 7120, true },
-  { 7127, true },
-  { 7137, true },
-  { 7150, true },
-  { 7162, true },
-  { 7175, false },
-  { 7195, true },
-  { 7207, true },
-  { 7218, true },
-  { 7236, true },
-  { 7249, true },
-  { 7258, true },
-  { 7270, true },
-  { 7284, true },
-  { 7297, true },
-  { 7306, true },
-  { 7322, true },
+  { 6924, true },
+  { 6938, true },
+  { 6951, true },
+  { 6965, true },
+  { 6973, true },
+  { 6988, true },
+  { 7002, true },
+  { 7021, true },
+  { 7033, true },
+  { 7047, true },
+  { 7061, true },
+  { 7073, true },
+  { 7084, true },
+  { 7095, true },
+  { 7109, true },
+  { 7117, true },
+  { 7128, true },
+  { 7136, true },
+  { 7144, true },
+  { 7152, true },
+  { 7160, true },
+  { 7173, true },
+  { 7180, true },
+  { 7190, true },
+  { 7203, true },
+  { 7215, true },
+  { 7228, false },
+  { 7248, true },
+  { 7260, true },
+  { 7271, true },
+  { 7289, true },
+  { 7302, true },
+  { 7311, true },
+  { 7323, true },
+  { 7337, true },
   { 7350, true },
-  { 7370, true },
-  { 7389, true },
-  { 7404, true },
-  { 7424, true },
-  { 7436, true },
-  { 7448, true },
-  { 7459, true },
-  { 7470, true },
-  { 7480, true },
-  { 7500, true },
-  { 7518, true },
-  { 7528, false },
-  { 7539, true },
-  { 7549, true },
-  { 7558, true },
-  { 7569, true },
-  { 7588, true },
-  { 7599, true },
-  { 7617, true },
-  { 7643, true },
-  { 7653, true },
-  { 7667, true },
-  { 7689, true },
-  { 7703, true },
-  { 7718, true },
-  { 7732, true },
-  { 7746, true },
-  { 7761, true },
-  { 7782, true },
-  { 7792, true },
-  { 7803, true },
-  { 7824, true },
-  { 7842, true },
-  { 7855, true },
-  { 7863, true },
+  { 7359, true },
+  { 7375, true },
+  { 7403, true },
+  { 7423, true },
+  { 7442, true },
+  { 7457, true },
+  { 7477, true },
+  { 7489, true },
+  { 7501, true },
+  { 7512, true },
+  { 7523, true },
+  { 7533, true },
+  { 7553, true },
+  { 7571, true },
+  { 7581, false },
+  { 7592, true },
+  { 7602, true },
+  { 7611, true },
+  { 7622, true },
+  { 7641, true },
+  { 7652, true },
+  { 7670, true },
+  { 7696, true },
+  { 7706, true },
+  { 7720, true },
+  { 7742, true },
+  { 7756, true },
+  { 7771, true },
+  { 7785, true },
+  { 7799, true },
+  { 7814, true },
+  { 7835, true },
+  { 7845, true },
+  { 7856, true },
   { 7877, true },
-  { 7893, true },
-  { 7911, true },
-  { 7933, true },
-  { 7948, true },
-  { 7965, true },
-  { 7981, true },
-  { 7997, true },
-  { 8014, true },
-  { 8033, true },
-  { 8047, true },
-  { 8062, true },
-  { 8081, true },
-  { 8098, true },
+  { 7895, true },
+  { 7908, true },
+  { 7916, true },
+  { 7930, true },
+  { 7946, true },
+  { 7964, true },
+  { 7986, true },
+  { 8001, true },
+  { 8018, true },
+  { 8034, true },
+  { 8050, true },
+  { 8067, true },
+  { 8086, true },
+  { 8100, true },
   { 8115, true },
-  { 8133, true },
-  { 8148, true },
-  { 8162, true },
-  { 8179, true },
-  { 8197, true },
-  { 8212, true },
-  { 8224, true },
-  { 8237, true },
-  { 8257, true },
-  { 8268, true },
-  { 8279, true },
+  { 8134, true },
+  { 8151, true },
+  { 8168, true },
+  { 8186, true },
+  { 8201, true },
+  { 8215, true },
+  { 8232, true },
+  { 8250, true },
+  { 8265, true },
+  { 8277, true },
   { 8290, true },
-  { 8301, true },
-  { 8312, true },
-  { 8323, true },
-  { 8335, true },
-  { 8350, true },
-  { 8363, true },
-  { 8382, true },
-  { 8393, true },
-  { 8406, true },
-  { 8420, false },
-  { 8433, false },
-  { 8442, true },
+  { 8310, true },
+  { 8321, true },
+  { 8332, true },
+  { 8343, true },
+  { 8354, true },
+  { 8365, true },
+  { 8376, true },
+  { 8388, true },
+  { 8403, true },
+  { 8416, true },
+  { 8435, true },
+  { 8446, true },
   { 8459, true },
-  { 8479, true },
-  { 8490, true },
-  { 8508, false },
-  { 8541, true },
-  { 8573, true },
-  { 8600, true },
-  { 8610, true },
-  { 8628, true },
-  { 8643, true },
-  { 8655, true },
-  { 8667, true },
-  { 8687, true },
-  { 8706, true },
-  { 8726, true },
-  { 8749, true },
-  { 8773, true },
-  { 8785, true },
-  { 8796, true },
-  { 8808, true },
-  { 8820, true },
-  { 8836, true },
-  { 8853, true },
-  { 8872, true },
-  { 8886, true },
-  { 8897, true },
-  { 8930, true },
-  { 8941, true },
-  { 8954, true },
-  { 8966, false },
-  { 8990, true },
-  { 9006, true },
-  { 9022, true },
-  { 9034, true },
-  { 9049, true },
-  { 9065, true },
-  { 9082, true },
-  { 9100, true },
-  { 9116, true },
-  { 9126, true },
-  { 9143, true },
-  { 9156, true },
+  { 8473, false },
+  { 8486, false },
+  { 8495, true },
+  { 8512, true },
+  { 8532, true },
+  { 8543, true },
+  { 8561, false },
+  { 8594, true },
+  { 8626, true },
+  { 8653, true },
+  { 8663, true },
+  { 8681, true },
+  { 8696, true },
+  { 8708, true },
+  { 8720, true },
+  { 8740, true },
+  { 8759, true },
+  { 8779, true },
+  { 8802, true },
+  { 8826, true },
+  { 8838, true },
+  { 8849, true },
+  { 8861, true },
+  { 8873, true },
+  { 8889, true },
+  { 8906, true },
+  { 8925, true },
+  { 8939, true },
+  { 8950, true },
+  { 8983, true },
+  { 8994, true },
+  { 9007, true },
+  { 9019, false },
+  { 9043, true },
+  { 9059, true },
+  { 9075, true },
+  { 9087, true },
+  { 9102, true },
+  { 9118, true },
+  { 9135, true },
+  { 9153, true },
   { 9169, true },
-  { 9185, true },
-  { 9196, true },
-  { 9208, true },
-  { 9219, true },
-  { 9226, true },
-  { 9234, true },
-  { 9245, true },
-  { 9258, false },
-  { 9266, true },
-  { 9276, true },
-  { 9290, false },
-  { 9304, true },
-  { 9320, true },
+  { 9190, true },
+  { 9200, true },
+  { 9217, true },
+  { 9230, true },
+  { 9243, true },
+  { 9259, true },
+  { 9270, true },
+  { 9282, true },
+  { 9293, true },
+  { 9300, true },
+  { 9308, true },
+  { 9319, true },
+  { 9332, false },
+  { 9340, true },
   { 9350, true },
-  { 9373, true },
-  { 9386, true },
-  { 9405, true },
-  { 9418, false },
-  { 9437, true },
-  { 9453, false },
-  { 9468, false },
-  { 9481, true },
-  { 9497, true },
-  { 9508, true },
-  { 9520, true },
-  { 9539, true },
-  { 9558, true },
-  { 9573, true },
-  { 9594, false },
-  { 9609, true },
-  { 9622, true },
+  { 9364, false },
+  { 9378, true },
+  { 9394, true },
+  { 9424, true },
+  { 9447, true },
+  { 9460, true },
+  { 9479, true },
+  { 9492, false },
+  { 9511, true },
+  { 9527, false },
+  { 9542, false },
+  { 9555, true },
+  { 9571, true },
+  { 9582, true },
+  { 9594, true },
+  { 9613, true },
   { 9632, true },
-  { 9643, true },
-  { 9654, true },
-  { 9668, true },
-  { 9684, true },
-  { 9701, false },
-  { 9718, true },
-  { 9731, true },
-  { 9757, true },
-  { 9770, true },
-  { 9784, true },
-  { 9803, true },
-  { 9824, true },
-  { 9836, true },
-  { 9850, true },
-  { 9874, true },
-  { 9887, true },
-  { 9900, true },
-  { 9914, true },
-  { 9925, true },
-  { 9934, true },
-  { 9947, true },
-  { 9960, true },
-  { 9972, false },
-  { 9990, true },
-  { 10013, true },
-  { 10040, true },
-  { 10059, true },
-  { 10071, true },
-  { 10084, true },
-  { 10104, true },
-  { 10115, true },
-  { 10127, true },
-  { 10141, true },
-  { 10149, true },
-  { 10166, true },
+  { 9647, true },
+  { 9668, false },
+  { 9683, true },
+  { 9696, true },
+  { 9706, true },
+  { 9717, true },
+  { 9728, true },
+  { 9742, true },
+  { 9758, true },
+  { 9775, false },
+  { 9792, true },
+  { 9805, true },
+  { 9831, true },
+  { 9844, true },
+  { 9858, true },
+  { 9877, true },
+  { 9898, true },
+  { 9910, true },
+  { 9924, true },
+  { 9948, true },
+  { 9961, true },
+  { 9974, true },
+  { 9988, true },
+  { 9999, true },
+  { 10008, true },
+  { 10021, true },
+  { 10034, true },
+  { 10046, false },
+  { 10064, true },
+  { 10087, true },
+  { 10114, true },
+  { 10133, true },
+  { 10145, true },
+  { 10158, true },
   { 10178, true },
-  { 10196, true },
-  { 10219, false },
-  { 10235, true },
-  { 10241, true },
-  { 10253, true },
-  { 10264, false },
-  { 10281, true },
-  { 10300, true },
-  { 10312, true },
-  { 10341, true },
-  { 10357, true },
-  { 10370, true },
+  { 10189, true },
+  { 10201, true },
+  { 10215, true },
+  { 10223, true },
+  { 10240, true },
+  { 10252, true },
+  { 10270, true },
+  { 10293, false },
+  { 10309, true },
+  { 10315, true },
+  { 10327, true },
+  { 10338, false },
+  { 10355, true },
+  { 10374, true },
   { 10386, true },
-  { 10400, true },
-  { 10416, true },
-  { 10429, true },
-  { 10440, true },
-  { 10452, true },
-  { 10468, true },
-  { 10482, true },
+  { 10415, true },
+  { 10431, true },
+  { 10444, true },
+  { 10458, true },
+  { 10474, true },
+  { 10487, true },
   { 10498, true },
-  { 10512, true },
-  { 10520, true },
-  { 10534, true },
-  { 10554, true },
-  { 10566, true },
-  { 10582, true },
-  { 10596, false },
-  { 10609, true },
+  { 10510, true },
+  { 10526, true },
+  { 10540, true },
+  { 10556, true },
+  { 10570, true },
+  { 10578, true },
+  { 10592, true },
+  { 10612, true },
   { 10624, true },
-  { 10633, true },
-  { 10645, true },
-  { 10663, true },
-  { 10678, true },
-  { 10688, true },
-  { 10702, true },
-  { 10728, true },
-  { 10738, true },
-  { 10752, true },
-  { 10766, true },
-  { 10784, true },
-  { 10802, true },
-  { 10818, true },
-  { 10828, true },
-  { 10839, true },
-  { 10855, true },
-  { 10863, true },
-  { 10871, true },
-  { 10882, true },
-  { 10892, true },
-  { 10907, true },
-  { 10926, true },
-  { 10939, true },
+  { 10640, true },
+  { 10654, false },
+  { 10667, true },
+  { 10682, true },
+  { 10696, true },
+  { 10705, true },
+  { 10717, true },
+  { 10735, true },
+  { 10750, true },
+  { 10760, true },
+  { 10774, true },
+  { 10800, true },
+  { 10810, true },
+  { 10824, true },
+  { 10838, true },
+  { 10856, true },
+  { 10874, true },
+  { 10890, true },
+  { 10900, true },
+  { 10911, true },
+  { 10927, true },
+  { 10935, true },
+  { 10943, true },
   { 10954, true },
-  { 10969, true },
-  { 10989, true },
-  { 11000, true },
-  { 11013, true },
-  { 11033, false },
-  { 11047, true },
-  { 11060, true },
-  { 11078, true },
-  { 11092, true },
-  { 11105, true },
+  { 10964, true },
+  { 10979, true },
+  { 10998, true },
+  { 11011, true },
+  { 11026, true },
+  { 11041, true },
+  { 11061, true },
+  { 11072, true },
+  { 11085, true },
+  { 11105, false },
   { 11119, true },
-  { 11133, true },
-  { 11145, true },
-  { 11156, true },
-  { 11167, true },
-  { 11180, true },
-  { 11195, true },
-  { 11206, true },
+  { 11132, true },
+  { 11150, true },
+  { 11164, true },
+  { 11177, true },
+  { 11191, true },
+  { 11205, true },
   { 11217, true },
-  { 11232, true },
-  { 11243, true },
-  { 11253, true },
-  { 11274, true },
-  { 11285, true },
-  { 11294, true },
-  { 11301, true },
-  { 11315, false },
-  { 11328, true },
-  { 11338, true },
-  { 11344, true },
+  { 11228, true },
+  { 11239, true },
+  { 11252, true },
+  { 11267, true },
+  { 11278, true },
+  { 11289, true },
+  { 11304, true },
+  { 11315, true },
+  { 11325, true },
+  { 11346, true },
   { 11357, true },
-  { 11370, true },
-  { 11381, true },
-  { 11393, true },
-  { 11407, true },
-  { 11417, true },
-  { 11435, true },
-  { 11445, true },
-  { 11457, true },
-  { 11471, true },
-  { 11481, true },
-  { 11497, true },
-  { 11508, true },
-  { 11525, true },
-  { 11544, true },
-  { 11558, true },
+  { 11366, true },
+  { 11373, true },
+  { 11387, false },
+  { 11400, true },
+  { 11410, true },
+  { 11416, true },
+  { 11429, true },
+  { 11442, true },
+  { 11453, true },
+  { 11465, true },
+  { 11479, true },
+  { 11489, true },
+  { 11507, true },
+  { 11517, true },
+  { 11529, true },
+  { 11543, true },
+  { 11553, true },
+  { 11569, true },
   { 11580, true },
-  { 11606, true },
+  { 11597, true },
   { 11616, true },
-  { 11634, true },
-  { 11644, true },
-  { 11654, true },
-  { 11664, true },
-  { 11683, true },
-  { 11703, true },
-  { 11717, true },
-  { 11724, true },
-  { 11734, true },
-  { 11743, true },
-  { 11761, true },
-  { 11783, true },
+  { 11630, true },
+  { 11652, true },
+  { 11678, true },
+  { 11688, true },
+  { 11706, true },
+  { 11716, true },
+  { 11726, true },
+  { 11736, true },
+  { 11755, true },
+  { 11775, true },
+  { 11789, true },
   { 11796, true },
-  { 11812, true },
-  { 11820, true },
-  { 11832, false },
-  { 11852, true },
-  { 11862, true },
-  { 11876, true },
-  { 11883, true },
-  { 11899, true },
-  { 11915, true },
-  { 11930, true },
-  { 11940, true },
-  { 11958, true },
-  { 11985, true },
+  { 11806, true },
+  { 11815, true },
+  { 11833, true },
+  { 11855, true },
+  { 11868, true },
+  { 11884, true },
+  { 11892, true },
+  { 11904, false },
+  { 11924, true },
+  { 11938, true },
+  { 11945, true },
+  { 11961, true },
+  { 11977, true },
+  { 11992, true },
   { 12002, true },
   { 12020, true },
-  { 12028, true },
-  { 12042, true },
-  { 12053, true },
-  { 12062, true },
-  { 12077, true },
+  { 12047, true },
+  { 12064, true },
+  { 12082, true },
+  { 12090, true },
   { 12104, true },<