merge mozilla-central to mozilla-inbound. r=merge a=merge
authorSebastian Hengst <archaeopteryx@coole-files.de>
Mon, 17 Jul 2017 14:08:27 +0200
changeset 369268 94916f5a6dcbe73bc1f6986e228e0dbaf4490e6f
parent 369267 e8ee58818e46e0d0f4fffccf430701e888dacf5a (current diff)
parent 369154 d43779e278d2e4d3e21dba2fcb585a3bf4b1288e (diff)
child 369269 5d9a6384bf513139ca33f54825db4f035ebdbdab
push id46631
push userkwierso@gmail.com
push dateTue, 18 Jul 2017 00:38:28 +0000
treeherderautoland@216a5bf264b2 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge, merge
milestone56.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. r=merge a=merge
layout/painting/FrameLayerBuilder.h
layout/painting/nsDisplayList.h
--- a/.eslintignore
+++ b/.eslintignore
@@ -73,16 +73,18 @@ browser/extensions/pocket/content/panels
 browser/extensions/pocket/content/panels/js/vendor/**
 # generated or library files in activity-stream
 browser/extensions/activity-stream/data/content/activity-stream.bundle.js
 browser/extensions/activity-stream/vendor/**
 # The only file in browser/locales/ is pre-processed.
 browser/locales/**
 # imported from chromium
 browser/extensions/mortar/**
+# Generated data files
+browser/extensions/formautofill/phonenumberutils/PhoneNumberMetaData.jsm
 
 # devtools/ exclusions
 devtools/client/canvasdebugger/**
 devtools/client/commandline/**
 devtools/client/debugger/**
 devtools/client/framework/**
 !devtools/client/framework/devtools.js
 !devtools/client/framework/devtools-browser.js
--- a/browser/extensions/formautofill/FormAutofillUtils.jsm
+++ b/browser/extensions/formautofill/FormAutofillUtils.jsm
@@ -24,16 +24,22 @@ this.FormAutofillUtils = {
     "address-line2": "address",
     "address-line3": "address",
     "address-level1": "address",
     "address-level2": "address",
     "postal-code": "address",
     "country": "address",
     "country-name": "address",
     "tel": "tel",
+    "tel-country-code": "tel",
+    "tel-national": "tel",
+    "tel-area-code": "tel",
+    "tel-local": "tel",
+    "tel-local-prefix": "tel",
+    "tel-local-suffix": "tel",
     "email": "email",
     "cc-name": "creditCard",
     "cc-number": "creditCard",
     "cc-exp-month": "creditCard",
     "cc-exp-year": "creditCard",
   },
   _addressDataLoaded: false,
 
--- a/browser/extensions/formautofill/ProfileStorage.jsm
+++ b/browser/extensions/formautofill/ProfileStorage.jsm
@@ -21,26 +21,32 @@
  *       additional-name,
  *       family-name,
  *       organization,         // Company
  *       street-address,       // (Multiline)
  *       address-level2,       // City/Town
  *       address-level1,       // Province (Standardized code if possible)
  *       postal-code,
  *       country,              // ISO 3166
- *       tel,
+ *       tel,                  // Stored in E.164 format
  *       email,
  *
- *       // computed fields (These fields are not stored in the file as they are
- *       // generated at runtime.)
+ *       // computed fields (These fields are computed based on the above fields
+ *       // and are not allowed to be modified directly.)
  *       name,
  *       address-line1,
  *       address-line2,
  *       address-line3,
  *       country-name,
+ *       tel-country-code,
+ *       tel-national,
+ *       tel-area-code,
+ *       tel-local,
+ *       tel-local-prefix,
+ *       tel-local-suffix,
  *
  *       // metadata
  *       timeCreated,          // in ms
  *       timeLastUsed,         // in ms
  *       timeLastModified,     // in ms
  *       timesUsed
  *     }
  *   ],
@@ -52,18 +58,18 @@
  *       // credit card fields
  *       cc-name,
  *       cc-number-encrypted,
  *       cc-number-masked,     // e.g. ************1234
  *       cc-exp-month,
  *       cc-exp-year,          // 2-digit year will be converted to 4 digits
  *                             // upon saving
  *
- *       // computed fields (These fields are not stored in the file as they are
- *       // generated at runtime.)
+ *       // computed fields (These fields are computed based on the above fields
+ *       // and are not allowed to be modified directly.)
  *       cc-given-name,
  *       cc-additional-name,
  *       cc-family-name,
  *
  *       // metadata
  *       timeCreated,          // in ms
  *       timeLastUsed,         // in ms
  *       timeLastModified,     // in ms
@@ -86,16 +92,18 @@ Cu.import("resource://gre/modules/Servic
 Cu.import("resource://gre/modules/osfile.jsm");
 
 Cu.import("resource://formautofill/FormAutofillUtils.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "JSONFile",
                                   "resource://gre/modules/JSONFile.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "FormAutofillNameUtils",
                                   "resource://formautofill/FormAutofillNameUtils.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "PhoneNumber",
+                                  "resource://formautofill/phonenumberutils/PhoneNumber.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "gUUIDGenerator",
                                    "@mozilla.org/uuid-generator;1",
                                    "nsIUUIDGenerator");
 
 XPCOMUtils.defineLazyGetter(this, "REGION_NAMES", function() {
   let regionNames = {};
   let countries = Services.strings.createBundle("chrome://global/locale/regionNames.properties").getSimpleEnumeration();
@@ -127,20 +135,29 @@ const VALID_ADDRESS_FIELDS = [
 ];
 
 const STREET_ADDRESS_COMPONENTS = [
   "address-line1",
   "address-line2",
   "address-line3",
 ];
 
+const TEL_COMPONENTS = [
+  "tel-country-code",
+  "tel-national",
+  "tel-area-code",
+  "tel-local",
+  "tel-local-prefix",
+  "tel-local-suffix",
+];
+
 const VALID_ADDRESS_COMPUTED_FIELDS = [
   "name",
   "country-name",
-].concat(STREET_ADDRESS_COMPONENTS);
+].concat(STREET_ADDRESS_COMPONENTS, TEL_COMPONENTS);
 
 const VALID_CREDIT_CARD_FIELDS = [
   "cc-name",
   "cc-number-encrypted",
   "cc-number-masked",
   "cc-exp-month",
   "cc-exp-year",
 ];
@@ -548,54 +565,104 @@ class Addresses extends AutofillRecords 
       if (address.country && REGION_NAMES[address.country]) {
         address["country-name"] = REGION_NAMES[address.country];
       } else {
         address["country-name"] = "";
       }
       hasNewComputedFields = true;
     }
 
+    // Compute tel
+    if (!("tel-national" in address)) {
+      if (address.tel) {
+        // Set "US" as the default region as we only support "en-US" for now.
+        let browserCountryCode = Services.prefs.getCharPref("browser.search.countryCode", "US");
+        let tel = PhoneNumber.Parse(address.tel, address.country || browserCountryCode);
+        if (tel) {
+          if (tel.countryCode) {
+            address["tel-country-code"] = tel.countryCode;
+          }
+          if (tel.nationalNumber) {
+            address["tel-national"] = tel.nationalNumber;
+          }
+
+          // PhoneNumberUtils doesn't support parsing the components of a telephone
+          // number so we hard coded the parser for US numbers only. We will need
+          // to figure out how to parse numbers from other regions when we support
+          // new countries in the future.
+          if (tel.nationalNumber && tel.countryCode == "+1") {
+            let telComponents = tel.nationalNumber.match(/(\d{3})((\d{3})(\d{4}))$/);
+            if (telComponents) {
+              address["tel-area-code"] = telComponents[1];
+              address["tel-local"] = telComponents[2];
+              address["tel-local-prefix"] = telComponents[3];
+              address["tel-local-suffix"] = telComponents[4];
+            }
+          }
+        } else {
+          // Treat "tel" as "tel-national" directly if it can't be parsed.
+          address["tel-national"] = address.tel;
+        }
+      }
+
+      TEL_COMPONENTS.forEach(c => {
+        address[c] = address[c] || "";
+      });
+    }
+
     return hasNewComputedFields;
   }
 
   _normalizeFields(address) {
-    // Normalize name
-    if (address.name) {
-      let nameParts = FormAutofillNameUtils.splitName(address.name);
-      if (!address["given-name"] && nameParts.given) {
-        address["given-name"] = nameParts.given;
-      }
-      if (!address["additional-name"] && nameParts.middle) {
-        address["additional-name"] = nameParts.middle;
-      }
-      if (!address["family-name"] && nameParts.family) {
-        address["family-name"] = nameParts.family;
-      }
-      delete address.name;
+    this._normalizeName(address);
+    this._normalizeAddress(address);
+    this._normalizeCountry(address);
+    this._normalizeTel(address);
+  }
+
+  _normalizeName(address) {
+    if (!address.name) {
+      return;
     }
 
-    // Normalize address lines
-    if (STREET_ADDRESS_COMPONENTS.some(c => address[c])) {
-      // Treat "street-address" as "address-line1" if it contains only one line
-      // and "address-line1" is omitted.
-      if (!address["address-line1"] && address["street-address"] &&
-          !address["street-address"].includes("\n")) {
-        address["address-line1"] = address["street-address"];
-        delete address["street-address"];
-      }
+    let nameParts = FormAutofillNameUtils.splitName(address.name);
+    if (!address["given-name"] && nameParts.given) {
+      address["given-name"] = nameParts.given;
+    }
+    if (!address["additional-name"] && nameParts.middle) {
+      address["additional-name"] = nameParts.middle;
+    }
+    if (!address["family-name"] && nameParts.family) {
+      address["family-name"] = nameParts.family;
+    }
+    delete address.name;
+  }
 
-      // Concatenate "address-line*" if "street-address" is omitted.
-      if (!address["street-address"]) {
-        address["street-address"] = STREET_ADDRESS_COMPONENTS.map(c => address[c]).join("\n");
-      }
-
-      STREET_ADDRESS_COMPONENTS.forEach(c => delete address[c]);
+  _normalizeAddress(address) {
+    if (STREET_ADDRESS_COMPONENTS.every(c => !address[c])) {
+      return;
     }
 
-    // Normalize country
+    // Treat "street-address" as "address-line1" if it contains only one line
+    // and "address-line1" is omitted.
+    if (!address["address-line1"] && address["street-address"] &&
+        !address["street-address"].includes("\n")) {
+      address["address-line1"] = address["street-address"];
+      delete address["street-address"];
+    }
+
+    // Concatenate "address-line*" if "street-address" is omitted.
+    if (!address["street-address"]) {
+      address["street-address"] = STREET_ADDRESS_COMPONENTS.map(c => address[c]).join("\n");
+    }
+
+    STREET_ADDRESS_COMPONENTS.forEach(c => delete address[c]);
+  }
+
+  _normalizeCountry(address) {
     if (address.country) {
       let country = address.country.toUpperCase();
       // Only values included in the region list will be saved.
       if (REGION_NAMES[country]) {
         address.country = country;
       } else {
         delete address.country;
       }
@@ -605,16 +672,48 @@ class Addresses extends AutofillRecords 
           address.country = region;
           break;
         }
       }
     }
     delete address["country-name"];
   }
 
+  _normalizeTel(address) {
+    if (!address.tel && TEL_COMPONENTS.every(c => !address[c])) {
+      return;
+    }
+
+    // Set "US" as the default region as we only support "en-US" for now.
+    let browserCountryCode = Services.prefs.getCharPref("browser.search.countryCode", "US");
+    let region = address["tel-country-code"] || address.country || browserCountryCode;
+    let number;
+
+    if (address.tel) {
+      number = address.tel;
+    } else if (address["tel-national"]) {
+      number = address["tel-national"];
+    } else if (address["tel-local"]) {
+      number = (address["tel-area-code"] || "") + address["tel-local"];
+    } else if (address["tel-local-prefix"] && address["tel-local-suffix"]) {
+      number = (address["tel-area-code"] || "") + address["tel-local-prefix"] + address["tel-local-suffix"];
+    }
+
+    let tel = PhoneNumber.Parse(number, region);
+    if (tel) {
+      // Force to save numbers in E.164 format if parse success.
+      address.tel = tel.internationalNumber;
+    } else if (!address.tel) {
+      // Save the original number anyway if "tel" is omitted.
+      address.tel = number;
+    }
+
+    TEL_COMPONENTS.forEach(c => delete address[c]);
+  }
+
   /**
    * Merge new address into the specified address if mergeable.
    *
    * @param  {string} guid
    *         Indicates which address to merge.
    * @param  {Object} address
    *         The new address used to merge into the old one.
    * @returns {boolean}
--- a/browser/extensions/formautofill/jar.mn
+++ b/browser/extensions/formautofill/jar.mn
@@ -1,15 +1,16 @@
 # 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 %res/
   res/ (*.jsm)
+  res/phonenumberutils/ (phonenumberutils/*.jsm)
 
 % content formautofill %content/
   content/ (content/*)
 
 % skin formautofill classic/1.0 %skin/linux/ os=LikeUnix
 % skin formautofill classic/1.0 %skin/osx/ os=Darwin
 % skin formautofill classic/1.0 %skin/windows/ os=WINNT
 % skin formautofill-shared classic/1.0 %skin/shared/
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/phonenumberutils/PhoneNumber.jsm
@@ -0,0 +1,455 @@
+/* This Source Code Form is subject to the terms of the Apache License, Version
+ * 2.0. If a copy of the Apache License was not distributed with this file, You
+ * can obtain one at https://www.apache.org/licenses/LICENSE-2.0 */
+
+// This library came from https://github.com/andreasgal/PhoneNumber.js but will
+// be further maintained by our own in Form Autofill codebase.
+
+"use strict";
+
+this.EXPORTED_SYMBOLS = ["PhoneNumber"];
+
+const Cu = Components.utils;
+
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "PHONE_NUMBER_META_DATA",
+                                  "resource://formautofill/phonenumberutils/PhoneNumberMetaData.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "PhoneNumberNormalizer",
+                                  "resource://formautofill/phonenumberutils/PhoneNumberNormalizer.jsm");
+this.PhoneNumber = (function(dataBase) {
+  const MAX_PHONE_NUMBER_LENGTH = 50;
+  const NON_ALPHA_CHARS = /[^a-zA-Z]/g;
+  const NON_DIALABLE_CHARS = /[^,#+\*\d]/g;
+  const NON_DIALABLE_CHARS_ONCE = new RegExp(NON_DIALABLE_CHARS.source);
+  const BACKSLASH = /\\/g;
+  const SPLIT_FIRST_GROUP = /^(\d+)(.*)$/;
+  const LEADING_PLUS_CHARS_PATTERN = /^[+\uFF0B]+/g;
+
+  // Format of the string encoded meta data. If the name contains "^" or "$"
+  // we will generate a regular expression from the value, with those special
+  // characters as prefix/suffix.
+  const META_DATA_ENCODING = [
+    "region",
+    "^(?:internationalPrefix)",
+    "nationalPrefix",
+    "^(?:nationalPrefixForParsing)",
+    "nationalPrefixTransformRule",
+    "nationalPrefixFormattingRule",
+    "^possiblePattern$",
+    "^nationalPattern$",
+    "formats",
+  ];
+
+  const FORMAT_ENCODING = [
+    "^pattern$",
+    "nationalFormat",
+    "^leadingDigits",
+    "nationalPrefixFormattingRule",
+    "internationalFormat",
+  ];
+
+  let regionCache = Object.create(null);
+
+  // Parse an array of strings into a convenient object. We store meta
+  // data as arrays since thats much more compact than JSON.
+  function ParseArray(array, encoding, obj) {
+    for (let n = 0; n < encoding.length; ++n) {
+      let value = array[n];
+      if (!value) {
+        continue;
+      }
+      let field = encoding[n];
+      let fieldAlpha = field.replace(NON_ALPHA_CHARS, "");
+      if (field != fieldAlpha) {
+        value = new RegExp(field.replace(fieldAlpha, value));
+      }
+      obj[fieldAlpha] = value;
+    }
+    return obj;
+  }
+
+  // Parse string encoded meta data into a convenient object
+  // representation.
+  function ParseMetaData(countryCode, md) {
+    /* eslint-disable no-eval */
+    let array = eval(md.replace(BACKSLASH, "\\\\"));
+    md = ParseArray(array,
+                    META_DATA_ENCODING,
+                    {countryCode});
+    regionCache[md.region] = md;
+    return md;
+  }
+
+  // Parse string encoded format data into a convenient object
+  // representation.
+  function ParseFormat(md) {
+    let formats = md.formats;
+    if (!formats) {
+      return;
+    }
+    // Bail if we already parsed the format definitions.
+    if (!(Array.isArray(formats[0]))) {
+      return;
+    }
+    for (let n = 0; n < formats.length; ++n) {
+      formats[n] = ParseArray(formats[n],
+                              FORMAT_ENCODING,
+                              {});
+    }
+  }
+
+  // Search for the meta data associated with a region identifier ("US") in
+  // our database, which is indexed by country code ("1"). Since we have
+  // to walk the entire database for this, we cache the result of the lookup
+  // for future reference.
+  function FindMetaDataForRegion(region) {
+    // Check in the region cache first. This will find all entries we have
+    // already resolved (parsed from a string encoding).
+    let md = regionCache[region];
+    if (md) {
+      return md;
+    }
+    for (let countryCode in dataBase) {
+      let entry = dataBase[countryCode];
+      // Each entry is a string encoded object of the form '["US..', or
+      // an array of strings. We don't want to parse the string here
+      // to save memory, so we just substring the region identifier
+      // and compare it. For arrays, we compare against all region
+      // identifiers with that country code. We skip entries that are
+      // of type object, because they were already resolved (parsed into
+      // an object), and their country code should have been in the cache.
+      if (Array.isArray(entry)) {
+        for (let n = 0; n < entry.length; n++) {
+          if (typeof entry[n] == "string" && entry[n].substr(2, 2) == region) {
+            if (n > 0) {
+              // Only the first entry has the formats field set.
+              // Parse the main country if we haven't already and use
+              // the formats field from the main country.
+              if (typeof entry[0] == "string") {
+                entry[0] = ParseMetaData(countryCode, entry[0]);
+              }
+              let formats = entry[0].formats;
+              let current = ParseMetaData(countryCode, entry[n]);
+              current.formats = formats;
+              entry[n] = current;
+              return entry[n];
+            }
+
+            entry[n] = ParseMetaData(countryCode, entry[n]);
+            return entry[n];
+          }
+        }
+        continue;
+      }
+      if (typeof entry == "string" && entry.substr(2, 2) == region) {
+        dataBase[countryCode] = ParseMetaData(countryCode, entry);
+        return dataBase[countryCode];
+      }
+    }
+  }
+
+  // Format a national number for a given region. The boolean flag "intl"
+  // indicates whether we want the national or international format.
+  function FormatNumber(regionMetaData, number, intl) {
+    // We lazily parse the format description in the meta data for the region,
+    // so make sure to parse it now if we haven't already done so.
+    ParseFormat(regionMetaData);
+    let formats = regionMetaData.formats;
+    if (!formats) {
+      return null;
+    }
+    for (let n = 0; n < formats.length; ++n) {
+      let format = formats[n];
+      // The leading digits field is optional. If we don't have it, just
+      // use the matching pattern to qualify numbers.
+      if (format.leadingDigits && !format.leadingDigits.test(number)) {
+        continue;
+      }
+      if (!format.pattern.test(number)) {
+        continue;
+      }
+      if (intl) {
+        // If there is no international format, just fall back to the national
+        // format.
+        let internationalFormat = format.internationalFormat;
+        if (!internationalFormat) {
+          internationalFormat = format.nationalFormat;
+        }
+        // Some regions have numbers that can't be dialed from outside the
+        // country, indicated by "NA" for the international format of that
+        // number format pattern.
+        if (internationalFormat == "NA") {
+          return null;
+        }
+        // Prepend "+" and the country code.
+        number = "+" + regionMetaData.countryCode + " " +
+                 number.replace(format.pattern, internationalFormat);
+      } else {
+        number = number.replace(format.pattern, format.nationalFormat);
+        // The region has a national prefix formatting rule, and it can be overwritten
+        // by each actual number format rule.
+        let nationalPrefixFormattingRule = regionMetaData.nationalPrefixFormattingRule;
+        if (format.nationalPrefixFormattingRule) {
+          nationalPrefixFormattingRule = format.nationalPrefixFormattingRule;
+        }
+        if (nationalPrefixFormattingRule) {
+          // The prefix formatting rule contains two magic markers, "$NP" and "$FG".
+          // "$NP" will be replaced by the national prefix, and "$FG" with the
+          // first group of numbers.
+          let match = number.match(SPLIT_FIRST_GROUP);
+          if (match) {
+            let firstGroup = match[1];
+            let rest = match[2];
+            let prefix = nationalPrefixFormattingRule;
+            prefix = prefix.replace("$NP", regionMetaData.nationalPrefix);
+            prefix = prefix.replace("$FG", firstGroup);
+            number = prefix + rest;
+          }
+        }
+      }
+      return (number == "NA") ? null : number;
+    }
+    return null;
+  }
+
+  function NationalNumber(regionMetaData, number) {
+    this.region = regionMetaData.region;
+    this.regionMetaData = regionMetaData;
+    this.number = number;
+  }
+
+  // NationalNumber represents the result of parsing a phone number. We have
+  // three getters on the prototype that format the number in national and
+  // international format. Once called, the getters put a direct property
+  // onto the object, caching the result.
+  NationalNumber.prototype = {
+    // +1 949-726-2896
+    get internationalFormat() {
+      let value = FormatNumber(this.regionMetaData, this.number, true);
+      Object.defineProperty(this, "internationalFormat", {value, enumerable: true});
+      return value;
+    },
+    // (949) 726-2896
+    get nationalFormat() {
+      let value = FormatNumber(this.regionMetaData, this.number, false);
+      Object.defineProperty(this, "nationalFormat", {value, enumerable: true});
+      return value;
+    },
+    // +19497262896
+    get internationalNumber() {
+      let value = this.internationalFormat ? this.internationalFormat.replace(NON_DIALABLE_CHARS, "")
+                                           : null;
+      Object.defineProperty(this, "internationalNumber", {value, enumerable: true});
+      return value;
+    },
+    // 9497262896
+    get nationalNumber() {
+      let value = this.nationalFormat ? this.nationalFormat.replace(NON_DIALABLE_CHARS, "")
+                                      : null;
+      Object.defineProperty(this, "nationalNumber", {value, enumerable: true});
+      return value;
+    },
+    // country name 'US'
+    get countryName() {
+      let value = this.region ? this.region : null;
+      Object.defineProperty(this, "countryName", {value, enumerable: true});
+      return value;
+    },
+    // country code '+1'
+    get countryCode() {
+      let value = this.regionMetaData.countryCode ? "+" + this.regionMetaData.countryCode : null;
+      Object.defineProperty(this, "countryCode", {value, enumerable: true});
+      return value;
+    },
+  };
+
+  // Check whether the number is valid for the given region.
+  function IsValidNumber(number, md) {
+    return md.possiblePattern.test(number);
+  }
+
+  // Check whether the number is a valid national number for the given region.
+  /* eslint-disable no-unused-vars */
+  function IsNationalNumber(number, md) {
+    return IsValidNumber(number, md) && md.nationalPattern.test(number);
+  }
+
+  // Determine the country code a number starts with, or return null if
+  // its not a valid country code.
+  function ParseCountryCode(number) {
+    for (let n = 1; n <= 3; ++n) {
+      let cc = number.substr(0, n);
+      if (dataBase[cc]) {
+        return cc;
+      }
+    }
+    return null;
+  }
+
+  // Parse a national number for a specific region. Return null if the
+  // number is not a valid national number (it might still be a possible
+  // number for parts of that region).
+  function ParseNationalNumber(number, md) {
+    if (!md.possiblePattern.test(number) ||
+        !md.nationalPattern.test(number)) {
+      return null;
+    }
+    // Success.
+    return new NationalNumber(md, number);
+  }
+
+  function ParseNationalNumberAndCheckNationalPrefix(number, md) {
+    let ret;
+
+    // This is not an international number. See if its a national one for
+    // the current region. National numbers can start with the national
+    // prefix, or without.
+    if (md.nationalPrefixForParsing) {
+      // Some regions have specific national prefix parse rules. Apply those.
+      let withoutPrefix = number.replace(md.nationalPrefixForParsing,
+                                         md.nationalPrefixTransformRule || "");
+      ret = ParseNationalNumber(withoutPrefix, md);
+      if (ret) {
+        return ret;
+      }
+    } else {
+      // If there is no specific national prefix rule, just strip off the
+      // national prefix from the beginning of the number (if there is one).
+      let nationalPrefix = md.nationalPrefix;
+      if (nationalPrefix && number.indexOf(nationalPrefix) == 0 &&
+          (ret = ParseNationalNumber(number.substr(nationalPrefix.length), md))) {
+        return ret;
+      }
+    }
+    ret = ParseNationalNumber(number, md);
+    if (ret) {
+      return ret;
+    }
+  }
+
+  function ParseNumberByCountryCode(number, countryCode) {
+    let ret;
+
+    // Lookup the meta data for the region (or regions) and if the rest of
+    // the number parses for that region, return the parsed number.
+    let entry = dataBase[countryCode];
+    if (Array.isArray(entry)) {
+      for (let n = 0; n < entry.length; ++n) {
+        if (typeof entry[n] == "string") {
+          entry[n] = ParseMetaData(countryCode, entry[n]);
+        }
+        if (n > 0) {
+          entry[n].formats = entry[0].formats;
+        }
+        ret = ParseNationalNumberAndCheckNationalPrefix(number, entry[n]);
+        if (ret) {
+          return ret;
+        }
+      }
+      return null;
+    }
+    if (typeof entry == "string") {
+      entry = dataBase[countryCode] = ParseMetaData(countryCode, entry);
+    }
+    return ParseNationalNumberAndCheckNationalPrefix(number, entry);
+  }
+
+  // Parse an international number that starts with the country code. Return
+  // null if the number is not a valid international number.
+  function ParseInternationalNumber(number) {
+    // Parse and strip the country code.
+    let countryCode = ParseCountryCode(number);
+    if (!countryCode) {
+      return null;
+    }
+    number = number.substr(countryCode.length);
+
+    return ParseNumberByCountryCode(number, countryCode);
+  }
+
+  // Parse a number and transform it into the national format, removing any
+  // international dial prefixes and country codes.
+  function ParseNumber(number, defaultRegion) {
+    let ret;
+
+    // Remove formating characters and whitespace.
+    number = PhoneNumberNormalizer.Normalize(number);
+
+    // If there is no defaultRegion or the defaultRegion is the global region,
+    // we can't parse international access codes.
+    if ((!defaultRegion || defaultRegion === "001") && number[0] !== "+") {
+      return null;
+    }
+
+    // Detect and strip leading '+'.
+    if (number[0] === "+") {
+      return ParseInternationalNumber(number.replace(LEADING_PLUS_CHARS_PATTERN, ""));
+    }
+
+    // If "defaultRegion" is a country code, use it to parse the number directly.
+    let matches = String(defaultRegion).match(/^\+?(\d+)/);
+    if (matches) {
+      let countryCode = ParseCountryCode(matches[1]);
+      if (!countryCode) {
+        return null;
+      }
+      return ParseNumberByCountryCode(number, countryCode);
+    }
+
+    // Lookup the meta data for the given region.
+    let md = FindMetaDataForRegion(defaultRegion.toUpperCase());
+
+    if (!md) {
+      dump("Couldn't find Meta Data for region: " + defaultRegion + "\n");
+      return null;
+    }
+
+    // See if the number starts with an international prefix, and if the
+    // number resulting from stripping the code is valid, then remove the
+    // prefix and flag the number as international.
+    if (md.internationalPrefix.test(number)) {
+      let possibleNumber = number.replace(md.internationalPrefix, "");
+      ret = ParseInternationalNumber(possibleNumber);
+      if (ret) {
+        return ret;
+      }
+    }
+
+    ret = ParseNationalNumberAndCheckNationalPrefix(number, md);
+    if (ret) {
+      return ret;
+    }
+
+    // Now lets see if maybe its an international number after all, but
+    // without '+' or the international prefix.
+    ret = ParseInternationalNumber(number);
+    if (ret) {
+      return ret;
+    }
+
+    // If the number matches the possible numbers of the current region,
+    // return it as a possible number.
+    if (md.possiblePattern.test(number)) {
+      return new NationalNumber(md, number);
+    }
+
+    // We couldn't parse the number at all.
+    return null;
+  }
+
+  function IsPlainPhoneNumber(number) {
+    if (typeof number !== "string") {
+      return false;
+    }
+
+    let length = number.length;
+    let isTooLong = (length > MAX_PHONE_NUMBER_LENGTH);
+    let isEmpty = (length === 0);
+    return !(isTooLong || isEmpty || NON_DIALABLE_CHARS_ONCE.test(number));
+  }
+
+  return {
+    IsPlain: IsPlainPhoneNumber,
+    Parse: ParseNumber,
+  };
+})(PHONE_NUMBER_META_DATA);
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/phonenumberutils/PhoneNumberMetaData.jsm
@@ -0,0 +1,230 @@
+/* This Source Code Form is subject to the terms of the Apache License, Version
+ * 2.0. If a copy of the Apache License was not distributed with this file, You
+ * can obtain one at https://www.apache.org/licenses/LICENSE-2.0 */
+
+/*
+ * This data was generated base on libphonenumber v8.4.1 via the script in
+ * https://github.com/andreasgal/PhoneNumber.js
+ *
+ * The XML format of libphonenumber has changed since v8.4.2 so we can only stay
+ * in this version for now.
+ */
+
+this.EXPORTED_SYMBOLS = ["PHONE_NUMBER_META_DATA"];
+
+this.PHONE_NUMBER_META_DATA = {
+"46": '["SE","00","0",,,"$NP$FG","\\d{6,12}","[1-35-9]\\d{5,11}|4\\d{6,8}",[["(8)(\\d{2,3})(\\d{2,3})(\\d{2})","$1-$2 $3 $4","8",,"$1 $2 $3 $4"],["([1-69]\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4","1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90",,"$1 $2 $3 $4"],["([1-469]\\d)(\\d{3})(\\d{2})","$1-$2 $3","1[136]|2[136]|3[356]|4[0246]|6[03]|90",,"$1 $2 $3"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1-$2 $3 $4","1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[0-5]|4[0-3])",,"$1 $2 $3 $4"],["(\\d{3})(\\d{2,3})(\\d{2})","$1-$2 $3","1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[0-5]|4[0-3])",,"$1 $2 $3"],["(7\\d)(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4","7",,"$1 $2 $3 $4"],["(77)(\\d{2})(\\d{2})","$1-$2$3","7",,"$1 $2 $3"],["(20)(\\d{2,3})(\\d{2})","$1-$2 $3","20",,"$1 $2 $3"],["(9[034]\\d)(\\d{2})(\\d{2})(\\d{3})","$1-$2 $3 $4","9[034]",,"$1 $2 $3 $4"],["(9[034]\\d)(\\d{4})","$1-$2","9[034]",,"$1 $2"],["(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4 $5","25[245]|67[3-6]",,"$1 $2 $3 $4 $5"]]]',
+"299": '["GL","00",,,,,"\\d{6}","[1-689]\\d{5}",[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,,]]]',
+"385": '["HR","00","0",,,"$NP$FG","\\d{6,9}","[1-7]\\d{5,8}|[89]\\d{6,8}",[["(1)(\\d{4})(\\d{3})","$1 $2 $3","1",,],["([2-5]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","[2-5]",,],["(9\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","9",,],["(6[01])(\\d{2})(\\d{2,3})","$1 $2 $3","6[01]",,],["([67]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","[67]",,],["(80[01])(\\d{2})(\\d{2,3})","$1 $2 $3","8",,],["(80[01])(\\d{3})(\\d{3})","$1 $2 $3","8",,]]]',
+"670": '["TL","00",,,,,"\\d{7,8}","[2-489]\\d{6}|7\\d{6,7}",[["(\\d{3})(\\d{4})","$1 $2","[2-489]",,],["(\\d{4})(\\d{4})","$1 $2","7",,]]]',
+"258": '["MZ","00",,,,,"\\d{8,9}","[28]\\d{7,8}",[["([28]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","2|8[2-7]",,],["(80\\d)(\\d{3})(\\d{3})","$1 $2 $3","80",,]]]',
+"359": '["BG","00","0",,,"$NP$FG","\\d{5,9}","[23567]\\d{5,7}|[489]\\d{6,8}",[["(2)(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4","2",,],["(2)(\\d{3})(\\d{3,4})","$1 $2 $3","2",,],["(\\d{3})(\\d{4})","$1 $2","43[124-7]|70[1-9]",,],["(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3","43[124-7]|70[1-9]",,],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3","[78]00",,],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","999",,],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3","[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]",,],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3","48|8[7-9]|9[08]",,]]]',
+"682": '["CK","00",,,,,"\\d{5}","[2-8]\\d{4}",[["(\\d{2})(\\d{3})","$1 $2",,,]]]',
+"852": '["HK","00(?:[126-9]|30|5[09])?",,,,,"\\d{5,11}","[235-7]\\d{7}|8\\d{7,8}|9\\d{4,10}",[["(\\d{4})(\\d{4})","$1 $2","[235-7]|[89](?:0[1-9]|[1-9])",,],["(800)(\\d{3})(\\d{3})","$1 $2 $3","800",,],["(900)(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4","900",,],["(900)(\\d{2,5})","$1 $2","900",,]]]',
+"998": '["UZ","810","8",,,"$NP $FG","\\d{7,9}","[679]\\d{8}",[["([679]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"291": '["ER","00","0",,,"$NP$FG","\\d{6,7}","[178]\\d{6}",[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",,,]]]',
+"95": '["MM","00","0",,,"$NP$FG","\\d{5,10}","[1478]\\d{5,7}|[256]\\d{5,8}|9(?:[279]\\d{0,2}|[58]|[34]\\d{1,2}|6\\d?)\\d{6}",[["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","1|2[245]",,],["(2)(\\d{4})(\\d{4})","$1 $2 $3","251",,],["(\\d)(\\d{2})(\\d{3})","$1 $2 $3","16|2",,],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3","67|81",,],["(\\d{2})(\\d{2})(\\d{3,4})","$1 $2 $3","[4-8]",,],["(9)(\\d{3})(\\d{4,6})","$1 $2 $3","9(?:2[0-4]|[35-9]|4[137-9])",,],["(9)([34]\\d{4})(\\d{4})","$1 $2 $3","9(?:3[0-36]|4[0-57-9])",,],["(9)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4","92[56]",,],["(9)(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3 $4","93",,]]]',
+"266": '["LS","00",,,,,"\\d{8}","[2568]\\d{7}",[["(\\d{4})(\\d{4})","$1 $2",,,]]]',
+"245": '["GW","00",,,,,"\\d{7,9}","(?:4(?:0\\d{5}|4\\d{7})|9\\d{8})",[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","44|9[567]",,],["(\\d{3})(\\d{4})","$1 $2","40",,]]]',
+"374": '["AM","00","0",,,"($NP$FG)","\\d{5,8}","[1-9]\\d{7}",[["(\\d{2})(\\d{6})","$1 $2","1|47",,],["(\\d{2})(\\d{6})","$1 $2","4[1349]|[5-7]|9[1-9]","$NP$FG",],["(\\d{3})(\\d{5})","$1 $2","[23]",,],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3","8|90","$NP $FG",]]]',
+"61": ['["AU","(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,,"\\d{6,10}","1\\d{4,9}|[2-578]\\d{8}",[["([2378])(\\d{4})(\\d{4})","$1 $2 $3","[2378]","($NP$FG)",],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","[45]|14","$NP$FG",],["(16)(\\d{3,4})","$1 $2","16","$NP$FG",],["(16)(\\d{3})(\\d{2,4})","$1 $2 $3","16","$NP$FG",],["(1[389]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","1(?:[38]0|90)","$FG",],["(180)(2\\d{3})","$1 $2","180","$FG",],["(19\\d)(\\d{3})","$1 $2","19[13]","$FG",],["(19\\d{2})(\\d{4})","$1 $2","19[679]","$FG",],["(13)(\\d{2})(\\d{2})","$1 $2 $3","13[1-9]","$FG",]]]','["CC","(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,,"\\d{6,10}","[1458]\\d{5,9}",]','["CX","(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,,"\\d{6,10}","[1458]\\d{5,9}",]'],
+"500": '["FK","00",,,,,"\\d{5}","[2-7]\\d{4}",]',
+"261": '["MG","00","0",,,"$NP$FG","\\d{7,9}","[23]\\d{8}",[["([23]\\d)(\\d{2})(\\d{3})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"92": '["PK","00","0",,,"($NP$FG)","\\d{6,12}","1\\d{8}|[2-8]\\d{5,11}|9(?:[013-9]\\d{4,9}|2\\d(?:111\\d{6}|\\d{3,7}))",[["(\\d{2})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1",,],["(\\d{3})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4","2[349]|45|54|60|72|8[2-5]|9[2-9]",,],["(\\d{2})(\\d{7,8})","$1 $2","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]",,],["(\\d{3})(\\d{6,7})","$1 $2","2[349]|45|54|60|72|8[2-5]|9[2-9]",,],["(3\\d{2})(\\d{7})","$1 $2","3","$NP$FG",],["([15]\\d{3})(\\d{5,6})","$1 $2","58[12]|1",,],["(586\\d{2})(\\d{5})","$1 $2","586",,],["([89]00)(\\d{3})(\\d{2})","$1 $2 $3","[89]00","$NP$FG",]]]',
+"234": '["NG","009","0",,,"$NP$FG","\\d{5,14}","[1-6]\\d{5,8}|9\\d{5,9}|[78]\\d{5,13}",[["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","[12]|9(?:0[3-9]|[1-9])",,],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3","[3-6]|7(?:[1-79]|0[1-9])|8[2-9]",,],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3","70|8[01]|90[235-9]",,],["([78]00)(\\d{4})(\\d{4,5})","$1 $2 $3","[78]00",,],["([78]00)(\\d{5})(\\d{5,6})","$1 $2 $3","[78]00",,],["(78)(\\d{2})(\\d{3})","$1 $2 $3","78",,]]]',
+"350": '["GI","00",,,,,"\\d{8}","[2568]\\d{7}",[["(\\d{3})(\\d{5})","$1 $2","2",,]]]',
+"45": '["DK","00",,,,,"\\d{8}","[2-9]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"963": '["SY","00","0",,,"$NP$FG","\\d{6,9}","[1-59]\\d{7,8}",[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3","[1-5]",,],["(9\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","9",,]]]',
+"226": '["BF","00",,,,,"\\d{8}","[25-7]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"974": '["QA","00",,,,,"\\d{7,8}","[2-8]\\d{6,7}",[["([28]\\d{2})(\\d{4})","$1 $2","[28]",,],["([3-7]\\d{3})(\\d{4})","$1 $2","[3-7]",,]]]',
+"218": '["LY","00","0",,,"$NP$FG","\\d{7,9}","[25679]\\d{8}",[["([25679]\\d)(\\d{7})","$1-$2",,,]]]',
+"51": '["PE","19(?:1[124]|77|90)00","0",,,"($NP$FG)","\\d{6,9}","[14-9]\\d{7,8}",[["(1)(\\d{7})","$1 $2","1",,],["([4-8]\\d)(\\d{6})","$1 $2","[4-7]|8[2-4]",,],["(\\d{3})(\\d{5})","$1 $2","80",,],["(9\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","9","$FG",]]]',
+"62": '["ID","0(?:0[1789]|10(?:00|1[67]))","0",,,"$NP$FG","\\d{5,12}","(?:[1-79]\\d{6,10}|8\\d{7,11})",[["(\\d{2})(\\d{5,8})","$1 $2","2[124]|[36]1","($NP$FG)",],["(\\d{3})(\\d{5,8})","$1 $2","[4579]|2[035-9]|[36][02-9]","($NP$FG)",],["(8\\d{2})(\\d{3,4})(\\d{3})","$1-$2-$3","8[1-35-9]",,],["(8\\d{2})(\\d{4})(\\d{4,5})","$1-$2-$3","8[1-35-9]",,],["(1)(500)(\\d{3})","$1 $2 $3","15","$FG",],["(177)(\\d{6,8})","$1 $2","17",,],["(800)(\\d{5,7})","$1 $2","800",,],["(804)(\\d{3})(\\d{4})","$1 $2 $3","804",,],["(80\\d)(\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4","80[79]",,]]]',
+"298": '["FO","00",,"(10(?:01|[12]0|88))",,,"\\d{6}","[2-9]\\d{5}",[["(\\d{6})","$1",,,]]]',
+"381": '["RS","00","0",,,"$NP$FG","\\d{5,12}","[126-9]\\d{4,11}|3(?:[0-79]\\d{3,10}|8[2-9]\\d{2,9})",[["([23]\\d{2})(\\d{4,9})","$1 $2","(?:2[389]|39)0",,],["([1-3]\\d)(\\d{5,10})","$1 $2","1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])",,],["(6\\d)(\\d{6,8})","$1 $2","6",,],["([89]\\d{2})(\\d{3,9})","$1 $2","[89]",,],["(7[26])(\\d{4,9})","$1 $2","7[26]",,],["(7[08]\\d)(\\d{4,9})","$1 $2","7[08]",,]]]',
+"975": '["BT","00",,,,,"\\d{6,8}","[1-8]\\d{6,7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","1|77",,],["([2-8])(\\d{3})(\\d{3})","$1 $2 $3","[2-68]|7[246]",,]]]',
+"34": '["ES","00",,,,,"\\d{9}","[5-9]\\d{8}",[["([89]00)(\\d{3})(\\d{3})","$1 $2 $3","[89]00",,],["([5-9]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[568]|[79][0-8]",,]]]',
+"881": '["001",,,,,,"\\d{9}","[67]\\d{8}",[["(\\d)(\\d{3})(\\d{5})","$1 $2 $3","[67]",,]]]',
+"855": '["KH","00[14-9]","0",,,,"\\d{6,10}","[1-9]\\d{7,9}",[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3","1\\d[1-9]|[2-9]","$NP$FG",],["(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3","1[89]0",,]]]',
+"420": '["CZ","00",,,,,"\\d{9,12}","[2-8]\\d{8}|9\\d{8,11}",[["([2-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[2-8]|9[015-7]",,],["(96\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4","96",,],["(9\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4","9[36]",,]]]',
+"216": '["TN","00",,,,,"\\d{8}","[2-57-9]\\d{7}",[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",,,]]]',
+"673": '["BN","00",,,,,"\\d{7}","[2-578]\\d{6}",[["([2-578]\\d{2})(\\d{4})","$1 $2",,,]]]',
+"290": ['["SH","00",,,,,"\\d{4,5}","[256]\\d{4}",]','["TA","00",,,,,"\\d{4}","8\\d{3}",]'],
+"882": '["001",,,,,,"\\d{7,12}","[13]\\d{6,11}",[["(\\d{2})(\\d{4})(\\d{3})","$1 $2 $3","3[23]",,],["(\\d{2})(\\d{5})","$1 $2","16|342",,],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3","34[57]",,],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3","348",,],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3","1",,],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3","16",,],["(\\d{2})(\\d{4,5})(\\d{5})","$1 $2 $3","16|39",,]]]',
+"267": '["BW","00",,,,,"\\d{7,8}","[2-79]\\d{6,7}",[["(\\d{3})(\\d{4})","$1 $2","[2-6]",,],["(7\\d)(\\d{3})(\\d{3})","$1 $2 $3","7",,],["(90)(\\d{5})","$1 $2","9",,]]]',
+"94": '["LK","00","0",,,"$NP$FG","\\d{7,9}","[1-9]\\d{8}",[["(\\d{2})(\\d{1})(\\d{6})","$1 $2 $3","[1-689]",,],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","7",,]]]',
+"356": '["MT","00",,,,,"\\d{8}","[2357-9]\\d{7}",[["(\\d{4})(\\d{4})","$1 $2",,,]]]',
+"375": '["BY","810","8","8?0?",,,"\\d{5,11}","[1-4]\\d{8}|800\\d{3,7}|[89]\\d{9,10}",[["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4","17[0-3589]|2[4-9]|[34]","$NP 0$FG",],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4","1(?:5[24]|6[235]|7[467])|2(?:1[246]|2[25]|3[26])","$NP 0$FG",],["(\\d{4})(\\d{2})(\\d{3})","$1 $2-$3","1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])","$NP 0$FG",],["([89]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","8[01]|9","$NP $FG",],["(82\\d)(\\d{4})(\\d{4})","$1 $2 $3","82","$NP $FG",],["(800)(\\d{3})","$1 $2","800","$NP $FG",],["(800)(\\d{2})(\\d{2,4})","$1 $2 $3","800","$NP $FG",]]]',
+"690": '["TK","00",,,,,"\\d{4,7}","[2-47]\\d{3,6}",]',
+"507": '["PA","00",,,,,"\\d{7,8}","[1-9]\\d{6,7}",[["(\\d{3})(\\d{4})","$1-$2","[1-57-9]",,],["(\\d{4})(\\d{4})","$1-$2","6",,]]]',
+"692": '["MH","011","1",,,,"\\d{7}","[2-6]\\d{6}",[["(\\d{3})(\\d{4})","$1-$2",,,]]]',
+"250": '["RW","00","0",,,,"\\d{8,9}","[027-9]\\d{7,8}",[["(2\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","2","$FG",],["([7-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[7-9]","$NP$FG",],["(0\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","0",,]]]',
+"81": '["JP","010","0",,,"$NP$FG","\\d{8,17}","[1-9]\\d{8,9}|00(?:[36]\\d{7,14}|7\\d{5,7}|8\\d{7})",[["(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3","(?:12|57|99)0",,],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3","800",,],["(\\d{4})(\\d{4})","$1-$2","0077","$FG","NA"],["(\\d{4})(\\d{2})(\\d{3,4})","$1-$2-$3","0077","$FG","NA"],["(\\d{4})(\\d{2})(\\d{4})","$1-$2-$3","0088","$FG","NA"],["(\\d{4})(\\d{3})(\\d{3,4})","$1-$2-$3","00(?:37|66)","$FG","NA"],["(\\d{4})(\\d{4})(\\d{4,5})","$1-$2-$3","00(?:37|66)","$FG","NA"],["(\\d{4})(\\d{5})(\\d{5,6})","$1-$2-$3","00(?:37|66)","$FG","NA"],["(\\d{4})(\\d{6})(\\d{6,7})","$1-$2-$3","00(?:37|66)","$FG","NA"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3","[2579]0|80[1-9]",,],["(\\d{4})(\\d)(\\d{4})","$1-$2-$3","1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])",,],["(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3","1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[03-689]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[024-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])",,],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3","1|2(?:2[37]|5[5-9]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5(?:[2-589]|39)|60|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93)",,],["(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3","2(?:9[14-79]|74|[34]7|[56]9)|82|993",,],["(\\d)(\\d{4})(\\d{4})","$1-$2-$3","3|4(?:2[09]|7[01])|6[1-9]",,],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3","[2479][1-9]",,]]]',
+"237": '["CM","00",,,,,"\\d{8,9}","[2368]\\d{7,8}",[["([26])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5","[26]",,],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[23]|88",,],["(800)(\\d{2})(\\d{3})","$1 $2 $3","80",,]]]',
+"351": '["PT","00",,,,,"\\d{9}","[2-46-9]\\d{8}",[["(2\\d)(\\d{3})(\\d{4})","$1 $2 $3","2[12]",,],["([2-46-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","2[3-9]|[346-9]",,]]]',
+"246": '["IO","00",,,,,"\\d{7}","3\\d{6}",[["(\\d{3})(\\d{4})","$1 $2",,,]]]',
+"227": '["NE","00",,,,,"\\d{8}","[0289]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[289]|09",,],["(08)(\\d{3})(\\d{3})","$1 $2 $3","08",,]]]',
+"27": '["ZA","00","0",,,"$NP$FG","\\d{5,9}","[1-79]\\d{8}|8\\d{4,8}",[["(860)(\\d{3})(\\d{3})","$1 $2 $3","860",,],["(\\d{2})(\\d{3,4})","$1 $2","8[1-4]",,],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3","8[1-4]",,],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","[1-79]|8(?:[0-57]|6[1-9])",,]]]',
+"962": '["JO","00","0",,,"$NP$FG","\\d{8,9}","[235-9]\\d{7,8}",[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3","[2356]|87","($NP$FG)",],["(7)(\\d{4})(\\d{4})","$1 $2 $3","7[457-9]",,],["(\\d{3})(\\d{5,6})","$1 $2","70|8[0158]|9",,]]]',
+"387": '["BA","00","0",,,"$NP$FG","\\d{6,9}","[3-9]\\d{7,8}",[["(\\d{2})(\\d{3})(\\d{3})","$1 $2-$3","[3-5]",,],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","6[1-356]|[7-9]",,],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4","6[047]",,]]]',
+"33": '["FR","00","0",,,"$NP$FG","\\d{9}","[1-9]\\d{8}",[["([1-79])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5","[1-79]",,],["(1\\d{2})(\\d{3})","$1 $2","11","$FG","NA"],["(8\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","8","$NP $FG",]]]',
+"972": '["IL","0(?:0|1[2-9])","0",,,"$FG","\\d{4,12}","1\\d{6,11}|[2-589]\\d{3}(?:\\d{3,6})?|6\\d{3}|7\\d{6,9}",[["([2-489])(\\d{3})(\\d{4})","$1-$2-$3","[2-489]","$NP$FG",],["([57]\\d)(\\d{3})(\\d{4})","$1-$2-$3","[57]","$NP$FG",],["(153)(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4","153",,],["(1)([7-9]\\d{2})(\\d{3})(\\d{3})","$1-$2-$3-$4","1[7-9]",,],["(1255)(\\d{3})","$1-$2","125",,],["(1200)(\\d{3})(\\d{3})","$1-$2-$3","120",,],["(1212)(\\d{2})(\\d{2})","$1-$2-$3","121",,],["(1599)(\\d{6})","$1-$2","15",,],["(\\d{4})","*$1","[2-689]",,]]]',
+"248": '["SC","0(?:[02]|10?)",,,,,"\\d{6,7}","[24689]\\d{5,6}",[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3","[246]",,]]]',
+"297": '["AW","00",,,,,"\\d{7}","[25-9]\\d{6}",[["(\\d{3})(\\d{4})","$1 $2",,,]]]',
+"421": '["SK","00","0",,,"$NP$FG","\\d{6,9}","(?:[2-68]\\d{5,8}|9\\d{6,8})",[["(2)(1[67])(\\d{3,4})","$1 $2 $3","21[67]",,],["([3-5]\\d)(1[67])(\\d{2,3})","$1 $2 $3","[3-5]",,],["(2)(\\d{3})(\\d{3})(\\d{2})","$1/$2 $3 $4","2",,],["([3-5]\\d)(\\d{3})(\\d{2})(\\d{2})","$1/$2 $3 $4","[3-5]",,],["([689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[689]",,],["(9090)(\\d{3})","$1 $2","9090",,]]]',
+"672": '["NF","00",,,,,"\\d{5,6}","[13]\\d{5}",[["(\\d{2})(\\d{4})","$1 $2","1",,],["(\\d)(\\d{5})","$1 $2","3",,]]]',
+"870": '["001",,,,,,"\\d{9}","[35-7]\\d{8}",[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,,]]]',
+"883": '["001",,,,,,"\\d{9}(?:\\d{3})?","51\\d{7}(?:\\d{3})?",[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","510",,],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4","510",,],["(\\d{4})(\\d{4})(\\d{4})","$1 $2 $3","51[13]",,]]]',
+"264": '["NA","00","0",,,"$NP$FG","\\d{8,9}","[68]\\d{7,8}",[["(8\\d)(\\d{3})(\\d{4})","$1 $2 $3","8[1235]",,],["(6\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","6",,],["(88)(\\d{3})(\\d{3})","$1 $2 $3","88",,],["(870)(\\d{3})(\\d{3})","$1 $2 $3","870",,]]]',
+"878": '["001",,,,,,"\\d{12}","1\\d{11}",[["(\\d{2})(\\d{5})(\\d{5})","$1 $2 $3",,,]]]',
+"239": '["ST","00",,,,,"\\d{7}","[29]\\d{6}",[["(\\d{3})(\\d{4})","$1 $2",,,]]]',
+"357": '["CY","00",,,,,"\\d{8}","[257-9]\\d{7}",[["(\\d{2})(\\d{6})","$1 $2",,,]]]',
+"240": '["GQ","00",,,,,"\\d{9}","[23589]\\d{8}",[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","[235]",,],["(\\d{3})(\\d{6})","$1 $2","[89]",,]]]',
+"506": '["CR","00",,"(19(?:0[012468]|1[09]|20|66|77|99))",,,"\\d{8,10}","[24-9]\\d{7,9}",[["(\\d{4})(\\d{4})","$1 $2","[24-7]|8[3-9]",,],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3","[89]0",,]]]',
+"86": '["CN","(1(?:[129]\\d{3}|79\\d{2}))?00","0","(1(?:[129]\\d{3}|79\\d{2}))|0",,,"\\d{4,12}","[1-7]\\d{6,11}|8[0-357-9]\\d{6,9}|9\\d{7,10}",[["(80\\d{2})(\\d{4})","$1 $2","80[2678]","$NP$FG",],["([48]00)(\\d{3})(\\d{4})","$1 $2 $3","[48]00",,],["(\\d{5,6})","$1","100|95",,"NA"],["(\\d{2})(\\d{5,6})","$1 $2","(?:10|2\\d)[19]","$NP$FG",],["(\\d{3})(\\d{5,6})","$1 $2","[3-9]","$NP$FG",],["(\\d{3,4})(\\d{4})","$1 $2","[2-9]",,"NA"],["(21)(\\d{4})(\\d{4,6})","$1 $2 $3","21","$NP$FG",],["([12]\\d)(\\d{4})(\\d{4})","$1 $2 $3","10[1-9]|2[02-9]","$NP$FG",],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|3|5[1-9]|7[02-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])","$NP$FG",],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3","3(?:11|7[179])|4(?:[15]1|3[1-35])|5(?:1|2[37]|3[12]|51|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|8(?:[57]1|98)","$NP$FG",],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3","807","$NP$FG",],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3","1[3-578]",,],["(10800)(\\d{3})(\\d{4})","$1 $2 $3","108",,],["(\\d{3})(\\d{7,8})","$1 $2","950",,]]]',
+"257": '["BI","00",,,,,"\\d{8}","[267]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"683": '["NU","00",,,,,"\\d{4}","[1-5]\\d{3}",]',
+"43": '["AT","00","0",,,"$NP$FG","\\d{3,13}","[1-9]\\d{3,12}",[["(116\\d{3})","$1","116","$FG",],["(1)(\\d{3,12})","$1 $2","1",,],["(5\\d)(\\d{3,5})","$1 $2","5[079]",,],["(5\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","5[079]",,],["(5\\d)(\\d{4})(\\d{4,7})","$1 $2 $3","5[079]",,],["(\\d{3})(\\d{3,10})","$1 $2","316|46|51|732|6(?:5[0-3579]|[6-9])|7(?:[28]0)|[89]",,],["(\\d{4})(\\d{3,9})","$1 $2","2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-9]|5[468])|7(?:2[1-8]|35|4[1-8]|[5-79])",,]]]',
+"247": '["AC","00",,,,,"\\d{5,6}","[46]\\d{4}|[01589]\\d{5}",]',
+"675": '["PG","00",,,,,"\\d{7,8}","[1-9]\\d{6,7}",[["(\\d{3})(\\d{4})","$1 $2","[13-689]|27",,],["(\\d{4})(\\d{4})","$1 $2","20|7",,]]]',
+"376": '["AD","00",,,,,"\\d{6,9}","[16]\\d{5,8}|[37-9]\\d{5}",[["(\\d{3})(\\d{3})","$1 $2","[137-9]|6[0-8]",,],["(\\d{4})(\\d{4})","$1 $2","180",,],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","690",,]]]',
+"63": '["PH","00","0",,,,"\\d{5,13}","2\\d{5,7}|[3-9]\\d{7,9}|1800\\d{7,9}",[["(2)(\\d{3})(\\d{4})","$1 $2 $3","2","($NP$FG)",],["(2)(\\d{5})","$1 $2","2","($NP$FG)",],["(\\d{4})(\\d{4,6})","$1 $2","3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|5(?:22|44)|642|8(?:62|8[245])","($NP$FG)",],["(\\d{5})(\\d{4})","$1 $2","346|4(?:27|9[35])|883","($NP$FG)",],["([3-8]\\d)(\\d{3})(\\d{4})","$1 $2 $3","[3-8]","($NP$FG)",],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","81|9","$NP$FG",],["(1800)(\\d{3})(\\d{4})","$1 $2 $3","1",,],["(1800)(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4","1",,]]]',
+"236": '["CF","00",,,,,"\\d{8}","[278]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"590": ['["GP","00","0",,,"$NP$FG","\\d{9}","[56]\\d{8}",[["([56]90)(\\d{2})(\\d{4})","$1 $2-$3",,,]]]','["BL","00","0",,,,"\\d{9}","[56]\\d{8}",]','["MF","00","0",,,,"\\d{9}","[56]\\d{8}",]'],
+"53": '["CU","119","0",,,"($NP$FG)","\\d{4,8}","[2-57]\\d{5,7}",[["(\\d)(\\d{6,7})","$1 $2","7",,],["(\\d{2})(\\d{4,6})","$1 $2","[2-4]",,],["(\\d)(\\d{7})","$1 $2","5","$NP$FG",]]]',
+"64": '["NZ","0(?:0|161)","0",,,"$NP$FG","\\d{7,11}","6[235-9]\\d{6}|[2-57-9]\\d{7,10}",[["([34679])(\\d{3})(\\d{4})","$1-$2 $3","[346]|7[2-57-9]|9[1-9]",,],["(24099)(\\d{3})","$1 $2","240",,],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","21",,],["(\\d{2})(\\d{3})(\\d{3,5})","$1 $2 $3","2(?:1[1-9]|[69]|7[0-35-9])|70|86",,],["(2\\d)(\\d{3,4})(\\d{4})","$1 $2 $3","2[028]",,],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3","2(?:10|74)|5|[89]0",,]]]',
+"965": '["KW","00",,,,,"\\d{7,8}","[12569]\\d{6,7}",[["(\\d{4})(\\d{3,4})","$1 $2","[16]|2(?:[0-35-9]|4[0-35-9])|9[024-9]|52[25]",,],["(\\d{3})(\\d{5})","$1 $2","244|5(?:[015]|66)",,]]]',
+"224": '["GN","00",,,,,"\\d{8,9}","[367]\\d{7,8}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","3",,],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[67]",,]]]',
+"973": '["BH","00",,,,,"\\d{8}","[136-9]\\d{7}",[["(\\d{4})(\\d{4})","$1 $2",,,]]]',
+"32": '["BE","00","0",,,"$NP$FG","\\d{8,9}","[1-9]\\d{7,8}",[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","4[6-9]",,],["(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[23]|4[23]|9[2-4]",,],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[156]|7[018]|8(?:0[1-9]|[1-79])",,],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3","(?:80|9)0",,]]]',
+"249": '["SD","00","0",,,"$NP$FG","\\d{9}","[19]\\d{8}",[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",,,]]]',
+"678": '["VU","00",,,,,"\\d{5,7}","[2-57-9]\\d{4,6}",[["(\\d{3})(\\d{4})","$1 $2","[579]",,]]]',
+"52": '["MX","0[09]","01","0[12]|04[45](\\d{10})","1$1","$NP $FG","\\d{7,11}","[1-9]\\d{9,10}",[["([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3","33|55|81",,],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","[2467]|3[0-2457-9]|5[089]|8[02-9]|9[0-35-9]",,],["(1)([358]\\d)(\\d{4})(\\d{4})","044 $2 $3 $4","1(?:33|55|81)","$FG","$1 $2 $3 $4"],["(1)(\\d{3})(\\d{3})(\\d{4})","044 $2 $3 $4","1(?:[2467]|3[0-2457-9]|5[089]|8[2-9]|9[1-35-9])","$FG","$1 $2 $3 $4"]]]',
+"968": '["OM","00",,,,,"\\d{7,9}","(?:5|[279]\\d)\\d{6}|800\\d{5,6}",[["(2\\d)(\\d{6})","$1 $2","2",,],["([79]\\d{3})(\\d{4})","$1 $2","[79]",,],["([58]00)(\\d{4,6})","$1 $2","[58]",,]]]',
+"599": ['["CW","00",,,,,"\\d{7,8}","[169]\\d{6,7}",[["(\\d{3})(\\d{4})","$1 $2","[13-7]",,],["(9)(\\d{3})(\\d{4})","$1 $2 $3","9",,]]]','["BQ","00",,,,,"\\d{7}","[347]\\d{6}",]'],
+"800": '["001",,,,,,"\\d{8}","\\d{8}",[["(\\d{4})(\\d{4})","$1 $2",,,]]]',
+"386": '["SI","00","0",,,"$NP$FG","\\d{5,8}","[1-7]\\d{6,7}|[89]\\d{4,7}",[["(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[12]|3[24-8]|4[24-8]|5[2-8]|7[3-8]","($NP$FG)",],["([3-7]\\d)(\\d{3})(\\d{3})","$1 $2 $3","[37][01]|4[0139]|51|6",,],["([89][09])(\\d{3,6})","$1 $2","[89][09]",,],["([58]\\d{2})(\\d{5})","$1 $2","59|8[1-3]",,]]]',
+"679": '["FJ","0(?:0|52)",,,,,"\\d{7}(?:\\d{4})?","[35-9]\\d{6}|0\\d{10}",[["(\\d{3})(\\d{4})","$1 $2","[35-9]",,],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3","0",,]]]',
+"238": '["CV","0",,,,,"\\d{7}","[259]\\d{6}",[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,,]]]',
+"691": '["FM","00",,,,,"\\d{7}","[39]\\d{6}",[["(\\d{3})(\\d{4})","$1 $2",,,]]]',
+"262": ['["RE","00","0",,,"$NP$FG","\\d{9}","[268]\\d{8}",[["([268]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]','["YT","00","0",,,"$NP$FG","\\d{9}","[268]\\d{8}",]'],
+"241": '["GA","00",,,,,"\\d{7,8}","0?\\d{7}",[["(\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[2-7]","0$FG",],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","0",,]]]',
+"370": '["LT","00","8","[08]",,"($NP-$FG)","\\d{8}","[3-9]\\d{7}",[["([34]\\d)(\\d{6})","$1 $2","37|4(?:1|5[45]|6[2-4])",,],["([3-6]\\d{2})(\\d{5})","$1 $2","3[148]|4(?:[24]|6[09])|528|6",,],["([7-9]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3","[7-9]","$NP $FG",],["(5)(2\\d{2})(\\d{4})","$1 $2 $3","52[0-79]",,]]]',
+"256": '["UG","00[057]","0",,,"$NP$FG","\\d{5,9}","\\d{9}",[["(\\d{3})(\\d{6})","$1 $2","[7-9]|20(?:[013-8]|2[5-9])|4(?:6[45]|[7-9])",,],["(\\d{2})(\\d{7})","$1 $2","3|4(?:[1-5]|6[0-36-9])",,],["(2024)(\\d{5})","$1 $2","2024",,]]]',
+"677": '["SB","0[01]",,,,,"\\d{5,7}","[1-9]\\d{4,6}",[["(\\d{2})(\\d{5})","$1 $2","[7-9]",,]]]',
+"377": '["MC","00","0",,,"$NP$FG","\\d{8,9}","[34689]\\d{7,8}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[39]","$FG",],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","4",,],["(6)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5","6",,],["(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3","8","$FG",]]]',
+"382": '["ME","00","0",,,"$NP$FG","\\d{6,9}","[2-9]\\d{7,8}",[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[2-57-9]|6[036-9]",,]]]',
+"231": '["LR","00","0",,,"$NP$FG","\\d{7,9}","2\\d{7,8}|[378]\\d{8}|4\\d{6}|5\\d{6,8}",[["(2\\d)(\\d{3})(\\d{3})","$1 $2 $3","2",,],["([4-5])(\\d{3})(\\d{3})","$1 $2 $3","[45]",,],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","[23578]",,]]]',
+"591": '["BO","00(1\\d)?","0","0(1\\d)?",,,"\\d{7,8}","[23467]\\d{7}",[["([234])(\\d{7})","$1 $2","[234]",,],["([67]\\d{7})","$1","[67]",,]]]',
+"808": '["001",,,,,,"\\d{8}","\\d{8}",[["(\\d{4})(\\d{4})","$1 $2",,,]]]',
+"964": '["IQ","00","0",,,"$NP$FG","\\d{6,10}","[1-7]\\d{7,9}",[["(1)(\\d{3})(\\d{4})","$1 $2 $3","1",,],["([2-6]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","[2-6]",,],["(7\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","7",,]]]',
+"225": '["CI","00",,,,,"\\d{8}","[02-8]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"992": '["TJ","810","8",,,"$FG","\\d{3,9}","[3-57-9]\\d{8}",[["([349]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3","[34]7|91[78]",,],["([457-9]\\d)(\\d{3})(\\d{4})","$1 $2 $3","4[148]|[578]|9(?:1[59]|[0235-9])",,],["(331700)(\\d)(\\d{2})","$1 $2 $3","331",,],["(\\d{4})(\\d)(\\d{4})","$1 $2 $3","3[1-5]",,]]]',
+"55": '["BR","00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)","0","(?:0|90)(?:(1[245]|2[135]|[34]1)(\\d{10,11}))?","$2",,"\\d{8,11}","[1-46-9]\\d{7,10}|5(?:[0-4]\\d{7,9}|5(?:[2-8]\\d{7}|9\\d{7,8}))",[["(\\d{4})(\\d{4})","$1-$2","[2-9](?:[1-9]|0[1-9])","$FG","NA"],["(\\d{5})(\\d{4})","$1-$2","9(?:[1-9]|0[1-9])","$FG","NA"],["(\\d{3,5})","$1","1[125689]","$FG","NA"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3","[1-9][1-9]","($FG)",],["(\\d{2})(\\d{5})(\\d{4})","$1 $2-$3","(?:[14689][1-9]|2[12478]|3[1-578]|5[1-5]|7[13-579])9","($FG)",],["(\\d{4})(\\d{4})","$1-$2","(?:300|40(?:0|20))",,],["([3589]00)(\\d{2,3})(\\d{4})","$1 $2 $3","[3589]00","$NP$FG",]]]',
+"674": '["NR","00",,,,,"\\d{7}","[458]\\d{6}",[["(\\d{3})(\\d{4})","$1 $2",,,]]]',
+"967": '["YE","00","0",,,"$NP$FG","\\d{6,9}","[1-7]\\d{6,8}",[["([1-7])(\\d{3})(\\d{3,4})","$1 $2 $3","[1-6]|7[24-68]",,],["(7\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","7[0137]",,]]]',
+"49": '["DE","00","0",,,"$NP$FG","\\d{2,15}","[1-35-9]\\d{3,14}|4(?:[0-8]\\d{3,12}|9(?:[0-37]\\d|4(?:[1-35-8]|4\\d?)|5\\d{1,2}|6[1-8]\\d?)\\d{2,8})",[["(1\\d{2})(\\d{7,8})","$1 $2","1[67]",,],["(15\\d{3})(\\d{6})","$1 $2","15[0568]",,],["(1\\d{3})(\\d{7})","$1 $2","15",,],["(\\d{2})(\\d{3,11})","$1 $2","3[02]|40|[68]9",,],["(\\d{3})(\\d{3,11})","$1 $2","2(?:\\d1|0[2389]|1[24]|28|34)|3(?:[3-9][15]|40)|[4-8][1-9]1|9(?:06|[1-9]1)",,],["(\\d{4})(\\d{2,11})","$1 $2","[24-6]|[7-9](?:\\d[1-9]|[1-9]\\d)|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])",,],["(3\\d{4})(\\d{1,10})","$1 $2","3",,],["(800)(\\d{7,12})","$1 $2","800",,],["(\\d{3})(\\d)(\\d{4,10})","$1 $2 $3","(?:18|90)0|137",,],["(1\\d{2})(\\d{5,11})","$1 $2","181",,],["(18\\d{3})(\\d{6})","$1 $2","185",,],["(18\\d{2})(\\d{7})","$1 $2","18[68]",,],["(18\\d)(\\d{8})","$1 $2","18[2-579]",,],["(700)(\\d{4})(\\d{4})","$1 $2 $3","700",,],["(138)(\\d{4})","$1 $2","138",,],["(15[013-68])(\\d{2})(\\d{8})","$1 $2 $3","15[013-68]",,],["(15[279]\\d)(\\d{2})(\\d{7})","$1 $2 $3","15[279]",,],["(1[67]\\d)(\\d{2})(\\d{7,8})","$1 $2 $3","1(?:6[023]|7)",,]]]',
+"31": '["NL","00","0",,,"$NP$FG","\\d{5,10}","1\\d{4,8}|[2-7]\\d{8}|[89]\\d{6,9}",[["([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3","1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[4578]",,],["([1-5]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","1[16-8]|2[259]|3[124]|4[17-9]|5[124679]",,],["(6)(\\d{8})","$1 $2","6[0-57-9]",,],["(66)(\\d{7})","$1 $2","66",,],["(14)(\\d{3,4})","$1 $2","14","$FG",],["([89]0\\d)(\\d{4,7})","$1 $2","80|9",,]]]',
+"970": '["PS","00","0",,,"$NP$FG","\\d{4,10}","[24589]\\d{7,8}|1(?:[78]\\d{8}|[49]\\d{2,3})",[["([2489])(2\\d{2})(\\d{4})","$1 $2 $3","[2489]",,],["(5[69]\\d)(\\d{3})(\\d{3})","$1 $2 $3","5",,],["(1[78]00)(\\d{3})(\\d{3})","$1 $2 $3","1[78]","$FG",]]]',
+"58": '["VE","00","0",,,"$NP$FG","\\d{7,10}","[24589]\\d{9}",[["(\\d{3})(\\d{7})","$1-$2",,,]]]',
+"856": '["LA","00","0",,,"$NP$FG","\\d{6,10}","[2-8]\\d{7,9}",[["(20)(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4","20",,],["([2-8]\\d)(\\d{3})(\\d{3})","$1 $2 $3","2[13]|3[14]|[4-8]",,],["(30)(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4","30",,]]]',
+"354": '["IS","1(?:0(?:01|10|20)|100)|00",,,,,"\\d{7,9}","[4-9]\\d{6}|38\\d{7}",[["(\\d{3})(\\d{4})","$1 $2","[4-9]",,],["(3\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","3",,]]]',
+"242": '["CG","00",,,,,"\\d{9}","[028]\\d{8}",[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","[02]",,],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3","8",,]]]',
+"423": '["LI","00","0","0|10(?:01|20|66)",,,"\\d{7,9}","6\\d{8}|[23789]\\d{6}",[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3","[23789]",,],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","6[56]",,],["(69)(7\\d{2})(\\d{4})","$1 $2 $3","697",,]]]',
+"213": '["DZ","00","0",,,"$NP$FG","\\d{8,9}","(?:[1-4]|[5-9]\\d)\\d{7}",[["([1-4]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[1-4]",,],["([5-8]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[5-8]",,],["(9\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","9",,]]]',
+"371": '["LV","00",,,,,"\\d{8}","[2689]\\d{7}",[["([2689]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,,]]]',
+"503": '["SV","00",,,,,"\\d{7,8}|\\d{11}","[267]\\d{7}|[89]\\d{6}(?:\\d{4})?",[["(\\d{4})(\\d{4})","$1 $2","[267]",,],["(\\d{3})(\\d{4})","$1 $2","[89]",,],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3","[89]",,]]]',
+"685": '["WS","0",,,,,"\\d{5,7}","[2-8]\\d{4,6}",[["(8\\d{2})(\\d{3,4})","$1 $2","8",,],["(7\\d)(\\d{5})","$1 $2","7",,],["(\\d{5})","$1","[2-6]",,]]]',
+"880": '["BD","00","0",,,"$NP$FG","\\d{6,10}","[2-79]\\d{5,9}|1\\d{9}|8[0-7]\\d{4,8}",[["(2)(\\d{7,8})","$1-$2","2",,],["(\\d{2})(\\d{4,6})","$1-$2","[3-79]1",,],["(\\d{4})(\\d{3,6})","$1-$2","1|3(?:0|[2-58]2)|4(?:0|[25]2|3[23]|[4689][25])|5(?:[02-578]2|6[25])|6(?:[0347-9]2|[26][25])|7[02-9]2|8(?:[023][23]|[4-7]2)|9(?:[02][23]|[458]2|6[016])",,],["(\\d{3})(\\d{3,7})","$1-$2","[3-79][2-9]|8",,]]]',
+"265": '["MW","00","0",,,"$NP$FG","\\d{7,9}","(?:1(?:\\d{2})?|[2789]\\d{2})\\d{6}",[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3","1",,],["(2\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","2",,],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[1789]",,]]]',
+"65": '["SG","0[0-3]\\d",,,,,"\\d{8,11}","[36]\\d{7}|[17-9]\\d{7,10}",[["([3689]\\d{3})(\\d{4})","$1 $2","[369]|8[1-9]",,],["(1[89]00)(\\d{3})(\\d{4})","$1 $2 $3","1[89]",,],["(7000)(\\d{4})(\\d{3})","$1 $2 $3","70",,],["(800)(\\d{3})(\\d{4})","$1 $2 $3","80",,]]]',
+"504": '["HN","00",,,,,"\\d{8}","[237-9]\\d{7}",[["(\\d{4})(\\d{4})","$1-$2",,,]]]',
+"688": '["TV","00",,,,,"\\d{5,7}","[279]\\d{4,6}",]',
+"84": '["VN","00","0",,,"$NP$FG","\\d{7,10}","[167]\\d{6,9}|[2-59]\\d{7,9}|8\\d{6,8}",[["([17]99)(\\d{4})","$1 $2","[17]99",,],["([48])(\\d{4})(\\d{4})","$1 $2 $3","4|8(?:[1-57]|6[0-79]|9[0-7])",,],["([235-7]\\d)(\\d{4})(\\d{3})","$1 $2 $3","2[025-79]|3[0136-9]|5[2-9]|6[0-46-8]|7[02-79]",,],["(80)(\\d{5})","$1 $2","80",,],["(69\\d)(\\d{4,5})","$1 $2","69",,],["([235-7]\\d{2})(\\d{4})(\\d{3})","$1 $2 $3","2[0-489]|3[25]|5[01]|65|7[18]",,],["([89]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","8(?:68|8|9[89])|9",,],["(1[2689]\\d)(\\d{3})(\\d{4})","$1 $2 $3","1(?:[26]|8[68]|99)",,],["(1[89]00)(\\d{4,6})","$1 $2","1[89]0","$FG",]]]',
+"255": '["TZ","00[056]","0",,,"$NP$FG","\\d{7,9}","\\d{9}",[["([24]\\d)(\\d{3})(\\d{4})","$1 $2 $3","[24]",,],["([67]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[67]",,],["([89]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3","[89]",,]]]',
+"222": '["MR","00",,,,,"\\d{8}","[2-48]\\d{7}",[["([2-48]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"230": '["MU","0(?:0|[2-7]0|33)",,,,,"\\d{7,8}","[2-9]\\d{6,7}",[["([2-46-9]\\d{2})(\\d{4})","$1 $2","[2-46-9]",,],["(5\\d{3})(\\d{4})","$1 $2","5",,]]]',
+"592": '["GY","001",,,,,"\\d{7}","[2-46-9]\\d{6}",[["(\\d{3})(\\d{4})","$1 $2",,,]]]',
+"41": '["CH","00","0",,,"$NP$FG","\\d{9}(?:\\d{3})?","[2-9]\\d{8}|860\\d{9}",[["([2-9]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[2-7]|[89]1",,],["([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","8[047]|90",,],["(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5","860",,]]]',
+"39": ['["IT","00",,,,,"\\d{6,11}","[01589]\\d{5,10}|3(?:[12457-9]\\d{8}|[36]\\d{7,9})",[["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3","0[26]|55",,],["(0[26])(\\d{4})(\\d{5})","$1 $2 $3","0[26]",,],["(0[26])(\\d{4,6})","$1 $2","0[26]",,],["(0\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3","0[13-57-9][0159]",,],["(\\d{3})(\\d{3,6})","$1 $2","0[13-57-9][0159]|8(?:03|4[17]|9[245])",,],["(0\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","0[13-57-9][2-46-8]",,],["(0\\d{3})(\\d{2,6})","$1 $2","0[13-57-9][2-46-8]",,],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3","[13]|8(?:00|4[08]|9[59])",,],["(\\d{4})(\\d{4})","$1 $2","894",,],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3","3",,]]]','["VA","00",,,,,"\\d{6,11}","(?:0(?:878\\d{5}|6698\\d{5})|[1589]\\d{5,10}|3(?:[12457-9]\\d{8}|[36]\\d{7,9}))",]'],
+"993": '["TM","810","8",,,"($NP $FG)","\\d{8}","[1-6]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4","12",,],["(\\d{2})(\\d{6})","$1 $2","6","$NP $FG",],["(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2-$3-$4","13|[2-5]",,]]]',
+"888": '["001",,,,,,"\\d{11}","\\d{11}",[["(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3",,,]]]',
+"353": '["IE","00","0",,,"($NP$FG)","\\d{5,10}","[124-9]\\d{6,9}",[["(1)(\\d{3,4})(\\d{4})","$1 $2 $3","1",,],["(\\d{2})(\\d{5})","$1 $2","2[24-9]|47|58|6[237-9]|9[35-9]",,],["(\\d{3})(\\d{5})","$1 $2","40[24]|50[45]",,],["(48)(\\d{4})(\\d{4})","$1 $2 $3","48",,],["(818)(\\d{3})(\\d{3})","$1 $2 $3","81",,],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3","[24-69]|7[14]",,],["([78]\\d)(\\d{3,4})(\\d{4})","$1 $2 $3","76|8[35-9]","$NP$FG",],["(700)(\\d{3})(\\d{3})","$1 $2 $3","70","$NP$FG",],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3","1(?:8[059]|5)","$FG",]]]',
+"966": '["SA","00","0",,,"$NP$FG","\\d{7,10}","1\\d{7,8}|(?:[2-467]|92)\\d{7}|5\\d{8}|8\\d{9}",[["([1-467])(\\d{3})(\\d{4})","$1 $2 $3","[1-467]",,],["(1\\d)(\\d{3})(\\d{4})","$1 $2 $3","1[1-467]",,],["(5\\d)(\\d{3})(\\d{4})","$1 $2 $3","5",,],["(92\\d{2})(\\d{5})","$1 $2","92","$FG",],["(800)(\\d{3})(\\d{4})","$1 $2 $3","80","$FG",],["(811)(\\d{3})(\\d{3,4})","$1 $2 $3","81",,]]]',
+"380": '["UA","00","0",,,"$NP$FG","\\d{5,9}","[3-9]\\d{8}",[["([3-9]\\d)(\\d{3})(\\d{4})","$1 $2 $3","[38]9|4(?:[45][0-5]|87)|5(?:0|6[37]|7[37])|6[36-8]|7|9[1-9]",,],["([3-689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","3[1-8]2|4[13678]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8[0-8]|90",,],["([3-6]\\d{3})(\\d{5})","$1 $2","3(?:5[013-9]|[1-46-8])|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])",,]]]',
+"98": '["IR","00","0",,,"$NP$FG","\\d{4,10}","[1-8]\\d{9}|9(?:[0-4]\\d{8}|9\\d{2,8})",[["(21)(\\d{3,5})","$1 $2","21",,],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3","[1-8]",,],["(\\d{3})(\\d{3})","$1 $2","9",,],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3","9",,],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3","9",,]]]',
+"971": '["AE","00","0",,,"$NP$FG","\\d{5,12}","[2-79]\\d{7,8}|800\\d{2,9}",[["([2-4679])(\\d{3})(\\d{4})","$1 $2 $3","[2-4679][2-8]",,],["(5\\d)(\\d{3})(\\d{4})","$1 $2 $3","5",,],["([479]00)(\\d)(\\d{5})","$1 $2 $3","[479]0","$FG",],["([68]00)(\\d{2,9})","$1 $2","60|8","$FG",]]]',
+"30": '["GR","00",,,,,"\\d{10}","[26-9]\\d{9}",[["([27]\\d)(\\d{4})(\\d{4})","$1 $2 $3","21|7",,],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","2[2-9]1|[689]",,],["(2\\d{3})(\\d{6})","$1 $2","2[2-9][02-9]",,]]]',
+"228": '["TG","00",,,,,"\\d{8}","[29]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[29]",,]]]',
+"48": '["PL","00",,,,,"\\d{6,9}","[12]\\d{6,8}|[3-57-9]\\d{8}|6\\d{5,8}",[["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[14]|2[0-57-9]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]",,],["(\\d{2})(\\d{1})(\\d{4})","$1 $2 $3","[12]2",,],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","26|39|5[0137]|6[0469]|7[02389]|8[08]",,],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3","64",,],["(\\d{3})(\\d{3})","$1 $2","64",,]]]',
+"886": '["TW","0(?:0[25679]|19)","0",,,"$NP$FG","\\d{7,10}","2\\d{6,8}|[3-689]\\d{7,8}|7\\d{7,9}",[["(20)(\\d)(\\d{4})","$1 $2 $3","202",,],["(20)(\\d{3})(\\d{4})","$1 $2 $3","20[013-9]",,],["([2-8])(\\d{3,4})(\\d{4})","$1 $2 $3","2[23-8]|[3-6]|[78][1-9]",,],["([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","80|9",,],["(70)(\\d{4})(\\d{4})","$1 $2 $3","70",,]]]',
+"212": ['["MA","00","0",,,"$NP$FG","\\d{9}","[5-9]\\d{8}",[["([5-7]\\d{2})(\\d{6})","$1-$2","5(?:2[015-7]|3[0-4])|[67]",,],["([58]\\d{3})(\\d{5})","$1-$2","5(?:2[2-489]|3[5-9]|92)|892",,],["(5\\d{4})(\\d{4})","$1-$2","5(?:29|38)",,],["([5]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","5(?:4[067]|5[03])",,],["(8[09])(\\d{7})","$1-$2","8(?:0|9[013-9])",,]]]','["EH","00","0",,,"$NP$FG","\\d{9}","[5-9]\\d{8}",]'],
+"372": '["EE","00",,,,,"\\d{4,10}","1\\d{3,4}|[3-9]\\d{6,7}|800\\d{6,7}",[["([3-79]\\d{2})(\\d{4})","$1 $2","[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]",,],["(70)(\\d{2})(\\d{4})","$1 $2 $3","70",,],["(8000)(\\d{3})(\\d{3})","$1 $2 $3","800",,],["([458]\\d{3})(\\d{3,4})","$1 $2","40|5|8(?:00|[1-5])",,]]]',
+"598": '["UY","0(?:1[3-9]\\d|0)","0",,,,"\\d{7,8}","[2489]\\d{6,7}",[["(\\d{4})(\\d{4})","$1 $2","[24]",,],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","9[1-9]","$NP$FG",],["(\\d{3})(\\d{4})","$1 $2","[89]0","$NP$FG",]]]',
+"502": '["GT","00",,,,,"\\d{8}(?:\\d{3})?","[2-7]\\d{7}|1[89]\\d{9}",[["(\\d{4})(\\d{4})","$1 $2","[2-7]",,],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3","1",,]]]',
+"82": '["KR","00(?:[124-68]|3\\d{2}|7(?:[0-8]\\d|9[0-79]))","0","0(8[1-46-8]|85\\d{2})?",,"$NP$FG","\\d{3,14}","007\\d{9,11}|[1-7]\\d{3,9}|8\\d{8}",[["(\\d{5})(\\d{3,4})(\\d{4})","$1 $2 $3","00798","$FG","NA"],["(\\d{5})(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3 $4","00798","$FG","NA"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3","1(?:0|1[19]|[69]9|5[458])|[57]0",,],["(\\d{2})(\\d{3,4})(\\d{4})","$1-$2-$3","1(?:[01]|5[1-4]|6[2-8]|[7-9])|[68]0|[3-6][1-9][1-9]",,],["(\\d{3})(\\d)(\\d{4})","$1-$2-$3","131",,],["(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3","131",,],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3","13[2-9]",,],["(\\d{2})(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3-$4","30",,],["(\\d)(\\d{3,4})(\\d{4})","$1-$2-$3","2[1-9]",,],["(\\d)(\\d{3,4})","$1-$2","21[0-46-9]",,],["(\\d{2})(\\d{3,4})","$1-$2","[3-6][1-9]1",,],["(\\d{4})(\\d{4})","$1-$2","1(?:5[246-9]|6[04678]|8[03579])","$FG",]]]',
+"253": '["DJ","00",,,,,"\\d{8}","[27]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"91": '["IN","00","0",,,"$NP$FG","\\d{6,13}","008\\d{9}|1\\d{7,12}|[2-9]\\d{9,10}",[["(\\d{5})(\\d{5})","$1 $2","600|7(?:[02-8]|19|9[037-9])|8(?:0[015-9]|[1-9]|20)|9",,],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3","11|2[02]|33|4[04]|79[1-9]|80[2-46]",,],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","1(?:2[0-249]|3[0-25]|4[145]|[59][14]|7[1257]|[68][1-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|[36][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2-4]1|5[17]|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)",,],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3","1(?:[23579]|[468][1-9])|[2-8]",,],["(\\d{2})(\\d{3})(\\d{4})(\\d{3})","$1 $2 $3 $4","008",,],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","140","$FG",],["(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3","160","$FG",],["(\\d{4})(\\d{4,5})","$1 $2","180","$FG",],["(\\d{4})(\\d{2,4})(\\d{4})","$1 $2 $3","180","$FG",],["(\\d{4})(\\d{3,4})(\\d{4})","$1 $2 $3","186","$FG",],["(\\d{4})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4","18[06]","$FG",]]]',
+"389": '["MK","00","0",,,"$NP$FG","\\d{6,8}","[2-578]\\d{7}",[["(2)(\\d{3})(\\d{4})","$1 $2 $3","2",,],["([347]\\d)(\\d{3})(\\d{3})","$1 $2 $3","[347]",,],["([58]\\d{2})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4","[58]",,]]]',
+"1": ['["US","011","1",,,,"\\d{7}(?:\\d{3})?","[2-9]\\d{9}",[["(\\d{3})(\\d{4})","$1-$2",,,"NA"],["(\\d{3})(\\d{3})(\\d{4})","($1) $2-$3",,,"$1-$2-$3"]]]','["AI","011","1",,,,"\\d{7}(?:\\d{3})?","[2589]\\d{9}",]','["AS","011","1",,,,"\\d{7}(?:\\d{3})?","[5689]\\d{9}",]','["BB","011","1",,,,"\\d{7}(?:\\d{3})?","[2589]\\d{9}",]','["BM","011","1",,,,"\\d{7}(?:\\d{3})?","[4589]\\d{9}",]','["BS","011","1",,,,"\\d{7}(?:\\d{3})?","[2589]\\d{9}",]','["CA","011","1",,,,"\\d{7}(?:\\d{3})?","[2-9]\\d{9}|3\\d{6}",]','["DM","011","1",,,,"\\d{7}(?:\\d{3})?","[57-9]\\d{9}",]','["DO","011","1",,,,"\\d{7}(?:\\d{3})?","[589]\\d{9}",]','["GD","011","1",,,,"\\d{7}(?:\\d{3})?","[4589]\\d{9}",]','["GU","011","1",,,,"\\d{7}(?:\\d{3})?","[5689]\\d{9}",]','["JM","011","1",,,,"\\d{7}(?:\\d{3})?","[589]\\d{9}",]','["KN","011","1",,,,"\\d{7}(?:\\d{3})?","[589]\\d{9}",]','["KY","011","1",,,,"\\d{7}(?:\\d{3})?","[3589]\\d{9}",]','["LC","011","1",,,,"\\d{7}(?:\\d{3})?","[5789]\\d{9}",]','["MP","011","1",,,,"\\d{7}(?:\\d{3})?","[5689]\\d{9}",]','["MS","011","1",,,,"\\d{7}(?:\\d{3})?","[5689]\\d{9}",]','["PR","011","1",,,,"\\d{7}(?:\\d{3})?","[5789]\\d{9}",]','["SX","011","1",,,,"\\d{7}(?:\\d{3})?","[5789]\\d{9}",]','["TC","011","1",,,,"\\d{7}(?:\\d{3})?","[5689]\\d{9}",]','["TT","011","1",,,,"\\d{7}(?:\\d{3})?","[589]\\d{9}",]','["AG","011","1",,,,"\\d{7}(?:\\d{3})?","[2589]\\d{9}",]','["VC","011","1",,,,"\\d{7}(?:\\d{3})?","[5789]\\d{9}",]','["VG","011","1",,,,"\\d{7}(?:\\d{3})?","[2589]\\d{9}",]','["VI","011","1",,,,"\\d{7}(?:\\d{3})?","[3589]\\d{9}",]'],
+"60": '["MY","00","0",,,,"\\d{6,10}","[13-9]\\d{7,9}",[["([4-79])(\\d{3})(\\d{4})","$1-$2 $3","[4-79]","$NP$FG",],["(3)(\\d{4})(\\d{4})","$1-$2 $3","3","$NP$FG",],["([18]\\d)(\\d{3})(\\d{3,4})","$1-$2 $3","1[02-46-9][1-9]|8","$NP$FG",],["(1)([36-8]00)(\\d{2})(\\d{4})","$1-$2-$3-$4","1[36-8]0",,],["(11)(\\d{4})(\\d{4})","$1-$2 $3","11","$NP$FG",],["(15[49])(\\d{3})(\\d{4})","$1-$2 $3","15","$NP$FG",]]]',
+"355": '["AL","00","0",,,"$NP$FG","\\d{5,9}","[2-57]\\d{7}|6\\d{8}|8\\d{5,7}|9\\d{5}",[["(4)(\\d{3})(\\d{4})","$1 $2 $3","4[0-6]",,],["(6\\d)(\\d{3})(\\d{4})","$1 $2 $3","6",,],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[2358][2-5]|4[7-9]",,],["(\\d{3})(\\d{3,5})","$1 $2","[235][16-9]|8[016-9]|[79]",,]]]',
+"254": '["KE","000","0","005|0",,"$NP$FG","\\d{7,10}","20\\d{6,7}|[4-9]\\d{6,9}",[["(\\d{2})(\\d{5,7})","$1 $2","[24-6]",,],["(\\d{3})(\\d{6})","$1 $2","7",,],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3","[89]",,]]]',
+"223": '["ML","00",,,,,"\\d{8}","[246-9]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[246-9]",,],["(\\d{4})","$1","67|74",,"NA"]]]',
+"686": '["KI","00",,"0",,,"\\d{5,8}","[2458]\\d{4}|3\\d{4,7}|7\\d{7}",]',
+"994": '["AZ","00","0",,,"($NP$FG)","\\d{7,9}","[1-9]\\d{8}",[["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","(?:1[28]|2(?:[45]2|[0-36])|365)",,],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[4-8]","$NP$FG",],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","9","$NP$FG",]]]',
+"979": '["001",,,,,,"\\d{9}","\\d{9}",[["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",,,]]]',
+"66": '["TH","00","0",,,"$NP$FG","\\d{4}|\\d{8,10}","[2-9]\\d{7,8}|1\\d{3}(?:\\d{5,6})?",[["(2)(\\d{3})(\\d{4})","$1 $2 $3","2",,],["([13-9]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","14|[3-9]",,],["(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3","1","$FG",]]]',
+"233": '["GH","00","0",,,"$NP$FG","\\d{7,9}","[235]\\d{8}|8\\d{7}",[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","[235]",,],["(\\d{3})(\\d{5})","$1 $2","8",,]]]',
+"593": '["EC","00","0",,,"($NP$FG)","\\d{7,11}","1\\d{9,10}|[2-8]\\d{7}|9\\d{8}",[["(\\d)(\\d{3})(\\d{4})","$1 $2-$3","[247]|[356][2-8]",,"$1-$2-$3"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","9","$NP$FG",],["(1800)(\\d{3})(\\d{3,4})","$1 $2 $3","1","$FG",]]]',
+"509": '["HT","00",,,,,"\\d{8}","[2-489]\\d{7}",[["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",,,]]]',
+"54": '["AR","00","0","0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))?15)?","9$1","$NP$FG","\\d{6,11}","11\\d{8}|[2368]\\d{9}|9\\d{10}",[["([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3","[68]",,],["(\\d{2})(\\d{4})","$1-$2","[2-9]","$FG","NA"],["(\\d{3})(\\d{4})","$1-$2","[2-9]","$FG","NA"],["(\\d{4})(\\d{4})","$1-$2","[2-9]","$FG","NA"],["(9)(11)(\\d{4})(\\d{4})","$2 15-$3-$4","911",,"$1 $2 $3-$4"],["(9)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4","9(?:2[234689]|3[3-8])",,"$1 $2 $3-$4"],["(9)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4","9[23]",,"$1 $2 $3-$4"],["(11)(\\d{4})(\\d{4})","$1 $2-$3","1",,],["(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3","2(?:2[013]|3[067]|49|6[01346]|80|9[147-9])|3(?:36|4[1-358]|5[138]|6[24]|7[069]|8[013578])",,],["(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3","[23]",,],["(\\d{3})","$1","1[012]|911","$FG","NA"]]]',
+"57": '["CO","00(?:4(?:[14]4|56)|[579])","0","0([3579]|4(?:44|56))?",,,"\\d{7,11}","(?:[13]\\d{0,3}|[24-8])\\d{7}",[["(\\d)(\\d{7})","$1 $2","1(?:8[2-9]|9[0-3]|[2-7])|[24-8]","($FG)",],["(\\d{3})(\\d{7})","$1 $2","3",,],["(1)(\\d{3})(\\d{7})","$1-$2-$3","1(?:80|9[04])","$NP$FG","$1 $2 $3"]]]',
+"597": '["SR","00",,,,,"\\d{6,7}","[2-8]\\d{5,6}",[["(\\d{3})(\\d{3})","$1-$2","[2-4]|5[2-58]",,],["(\\d{2})(\\d{2})(\\d{2})","$1-$2-$3","56",,],["(\\d{3})(\\d{4})","$1-$2","[6-8]",,]]]',
+"676": '["TO","00",,,,,"\\d{5,7}","[02-8]\\d{4,6}",[["(\\d{2})(\\d{3})","$1-$2","[1-6]|7[0-4]|8[05]",,],["(\\d{3})(\\d{4})","$1 $2","7[5-9]|8[47-9]",,],["(\\d{4})(\\d{3})","$1 $2","0",,]]]',
+"505": '["NI","00",,,,,"\\d{8}","[12578]\\d{7}",[["(\\d{4})(\\d{4})","$1 $2",,,]]]',
+"850": '["KP","00|99","0",,,"$NP$FG","\\d{6,8}|\\d{10}","1\\d{9}|[28]\\d{7}",[["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","1",,],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3","2",,],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","8",,]]]',
+"7": ['["RU","810","8",,,"$NP ($FG)","\\d{10}","[3489]\\d{9}",[["(\\d{3})(\\d{2})(\\d{2})","$1-$2-$3","[1-79]","$FG","NA"],["([3489]\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4","[34689]",,],["(7\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","7",,]]]','["KZ","810","8",,,,"\\d{10}","(?:33\\d|7\\d{2}|80[09])\\d{7}",]'],
+"268": '["SZ","00",,,,,"\\d{8}","[027]\\d{7}",[["(\\d{4})(\\d{4})","$1 $2","[027]",,]]]',
+"501": '["BZ","00",,,,,"\\d{7}(?:\\d{4})?","[2-8]\\d{6}|0\\d{10}",[["(\\d{3})(\\d{4})","$1-$2","[2-8]",,],["(0)(800)(\\d{4})(\\d{3})","$1-$2-$3-$4","0",,]]]',
+"252": '["SO","00","0",,,,"\\d{6,9}","[1-9]\\d{5,8}",[["(\\d{6})","$1","[134]",,],["(\\d)(\\d{6})","$1 $2","2[0-79]|[13-5]",,],["(\\d)(\\d{7})","$1 $2","24|[67]",,],["(\\d{2})(\\d{4})","$1 $2","8[125]",,],["(\\d{2})(\\d{5,7})","$1 $2","15|28|6[1-35-9]|799|9[2-9]",,],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","3[59]|4[89]|6[24-6]|79|8[08]|90",,]]]',
+"229": '["BJ","00",,,,,"\\d{4,8}","[2689]\\d{7}|7\\d{3}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"680": '["PW","01[12]",,,,,"\\d{7}","[2-8]\\d{6}",[["(\\d{3})(\\d{4})","$1 $2",,,]]]',
+"263": '["ZW","00","0",,,"$NP$FG","\\d{3,10}","2(?:[012457-9]\\d{3,8}|6(?:[14]\\d{7}|\\d{4}))|[13-79]\\d{4,9}|8[06]\\d{8}",[["([49])(\\d{3})(\\d{2,4})","$1 $2 $3","4|9[2-9]",,],["(7\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","7",,],["(86\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","86[24]",,],["([2356]\\d{2})(\\d{3,5})","$1 $2","2(?:0[45]|2[278]|[49]8|[78])|3(?:08|17|3[78]|7[1569]|8[37]|98)|5[15][78]|6(?:[29]8|[38]7|6[78]|75|[89]8)",,],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3","2(?:1[39]|2[0157]|6[14]|7[35]|84)|329",,],["([1-356]\\d)(\\d{3,5})","$1 $2","1[3-9]|2[0569]|3[0-69]|5[05689]|6[0-46-9]",,],["([235]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","[23]9|54",,],["([25]\\d{3})(\\d{3,5})","$1 $2","(?:25|54)8",,],["(8\\d{3})(\\d{6})","$1 $2","86",,],["(80\\d)(\\d{3})(\\d{4})","$1 $2 $3","80",,]]]',
+"90": '["TR","00","0",,,,"\\d{7,10}","[2-589]\\d{9}|444\\d{4}",[["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[23]|4(?:[0-35-9]|4[0-35-9])","($NP$FG)",],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","5[02-69]","$NP$FG",],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","51|[89]","$NP$FG",],["(444)(\\d{1})(\\d{3})","$1 $2 $3","444",,]]]',
+"352": '["LU","00",,"(15(?:0[06]|1[12]|35|4[04]|55|6[26]|77|88|99)\\d)",,,"\\d{4,11}","[24-9]\\d{3,10}|3(?:[0-46-9]\\d{2,9}|5[013-9]\\d{1,8})",[["(\\d{2})(\\d{3})","$1 $2","[2-5]|7[1-9]|[89](?:[1-9]|0[2-9])",,],["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3","[2-5]|7[1-9]|[89](?:[1-9]|0[2-9])",,],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3","20",,],["(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4","2(?:[0367]|4[3-8])",,],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4","20",,],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4 $5","2(?:[0367]|4[3-8])",,],["(\\d{2})(\\d{2})(\\d{2})(\\d{1,4})","$1 $2 $3 $4","2(?:[12589]|4[12])|[3-5]|7[1-9]|8(?:[1-9]|0[2-9])|9(?:[1-9]|0[2-46-9])",,],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3","70|80[01]|90[015]",,],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","6",,]]]',
+"47": ['["NO","00",,,,,"\\d{5}(?:\\d{3})?","0\\d{4}|[2-9]\\d{7}",[["([489]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3","[489]",,],["([235-7]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[235-7]",,]]]','["SJ","00",,,,,"\\d{5}(?:\\d{3})?","0\\d{4}|[45789]\\d{7}",]'],
+"243": '["CD","00","0",,,"$NP$FG","\\d{7,9}","[2-6]\\d{6}|[18]\\d{6,8}|9\\d{8}",[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","12",,],["([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","8[0-2459]|9",,],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3","88",,],["(\\d{2})(\\d{5})","$1 $2","[1-6]",,]]]',
+"220": '["GM","00",,,,,"\\d{7}","[2-9]\\d{6}",[["(\\d{3})(\\d{4})","$1 $2",,,]]]',
+"687": '["NC","00",,,,,"\\d{6}","[2-57-9]\\d{5}",[["(\\d{2})(\\d{2})(\\d{2})","$1.$2.$3","[2-46-9]|5[0-4]",,]]]',
+"995": '["GE","00","0",,,,"\\d{6,9}","[34578]\\d{8}",[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[348]","$NP$FG",],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","7","$NP$FG",],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","5","$FG",]]]',
+"961": '["LB","00","0",,,,"\\d{7,8}","[13-9]\\d{6,7}",[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3","[13-6]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]|9","$NP$FG",],["([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3","[89][01]|7(?:[01]|6[013-9]|8[89]|9[1-3])",,]]]',
+"40": '["RO","00","0",,,"$NP$FG","\\d{6,9}","[23]\\d{5,8}|[7-9]\\d{8}",[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","[23]1",,],["(\\d{2})(\\d{4})","$1 $2","[23]1",,],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","[23][3-7]|[7-9]",,],["(2\\d{2})(\\d{3})","$1 $2","2[3-6]",,]]]',
+"232": '["SL","00","0",,,"($NP$FG)","\\d{6,8}","[2-9]\\d{7}",[["(\\d{2})(\\d{6})","$1 $2",,,]]]',
+"594": '["GF","00","0",,,"$NP$FG","\\d{9}","[56]\\d{8}",[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"976": '["MN","001","0",,,"$NP$FG","\\d{6,10}","[12]\\d{7,9}|[57-9]\\d{7}",[["([12]\\d)(\\d{2})(\\d{4})","$1 $2 $3","[12]1",,],["([12]2\\d)(\\d{5,6})","$1 $2","[12]2[1-3]",,],["([12]\\d{3})(\\d{5})","$1 $2","[12](?:27|[3-5])",,],["(\\d{4})(\\d{4})","$1 $2","[57-9]","$FG",],["([12]\\d{4})(\\d{4,5})","$1 $2","[12](?:27|[3-5])",,]]]',
+"20": '["EG","00","0",,,"$NP$FG","\\d{5,10}","1\\d{4,9}|[2456]\\d{8}|3\\d{7}|[89]\\d{8,9}",[["(\\d)(\\d{7,8})","$1 $2","[23]",,],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","1[012]|[89]00",,],["(\\d{2})(\\d{6,7})","$1 $2","1[35]|[4-6]|[89][2-9]",,]]]',
+"689": '["PF","00",,,,,"\\d{6}(?:\\d{2})?","4\\d{5,7}|8\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","4[09]|8[79]",,],["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3","44",,]]]',
+"56": '["CL","(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))0","0","0|(1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))",,"$NP$FG","\\d{7,11}","(?:[2-9]|600|123)\\d{7,8}",[["(\\d)(\\d{4})(\\d{4})","$1 $2 $3","2[23]","($FG)",],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","[357]|4[1-35]|6[13-57]","($FG)",],["(9)(\\d{4})(\\d{4})","$1 $2 $3","9",,],["(44)(\\d{3})(\\d{4})","$1 $2 $3","44",,],["([68]00)(\\d{3})(\\d{3,4})","$1 $2 $3","60|8","$FG",],["(600)(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3 $4","60","$FG",],["(1230)(\\d{3})(\\d{4})","$1 $2 $3","1","$FG",],["(\\d{5})(\\d{4})","$1 $2","219","($FG)",],["(\\d{4,5})","$1","[1-9]","$FG","NA"]]]',
+"596": '["MQ","00","0",,,"$NP$FG","\\d{9}","[56]\\d{8}",[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"508": '["PM","00","0",,,"$NP$FG","\\d{6}","[45]\\d{5}",[["([45]\\d)(\\d{2})(\\d{2})","$1 $2 $3",,,]]]',
+"269": '["KM","00",,,,,"\\d{7}","[3478]\\d{6}",[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,,]]]',
+"358": ['["FI","00|99(?:[02469]|5(?:11|33|5[59]|88|9[09]))","0",,,"$NP$FG","\\d{5,12}","1\\d{4,11}|[2-9]\\d{4,10}",[["(\\d{3})(\\d{3,7})","$1 $2","(?:[1-3]00|[6-8]0)",,],["(116\\d{3})","$1","116","$FG",],["(\\d{2})(\\d{4,10})","$1 $2","[14]|2[09]|50|7[135]",,],["(\\d)(\\d{4,11})","$1 $2","[25689][1-8]|3",,]]]','["AX","00|99(?:[02469]|5(?:11|33|5[59]|88|9[09]))","0",,,"$NP$FG","\\d{5,12}","1\\d{5,11}|[35]\\d{5,9}|[27]\\d{4,9}|4\\d{5,10}|6\\d{7,9}|8\\d{6,9}",]'],
+"251": '["ET","00","0",,,"$NP$FG","\\d{7,9}","[1-59]\\d{8}",[["([1-59]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,,]]]',
+"681": '["WF","00",,,,,"\\d{6}","[4-8]\\d{5}",[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,,]]]',
+"853": '["MO","00",,,,,"\\d{8}","[268]\\d{7}",[["([268]\\d{3})(\\d{4})","$1 $2",,,]]]',
+"44": ['["GB","00","0",,,"$NP$FG","\\d{4,10}","\\d{7,10}",[["(7\\d{3})(\\d{6})","$1 $2","7(?:[1-5789]|62)",,],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3","2|5[56]|7[06]",,],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","1(?:1|\\d1)|3|9[018]",,],["(\\d{5})(\\d{4,5})","$1 $2","1(?:38|5[23]|69|76|94)",,],["(1\\d{3})(\\d{5,6})","$1 $2","1",,],["(800)(\\d{4})","$1 $2","800",,],["(845)(46)(4\\d)","$1 $2 $3","845",,],["(8\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","8(?:4[2-5]|7[0-3])",,],["(80\\d)(\\d{3})(\\d{4})","$1 $2 $3","80",,],["([58]00)(\\d{6})","$1 $2","[58]00",,]]]','["GG","00","0",,,"$NP$FG","\\d{6,10}","[135789]\\d{6,9}",]','["IM","00","0",,,"$NP$FG","\\d{6,10}","[135789]\\d{6,9}",]','["JE","00","0",,,"$NP$FG","\\d{6,10}","[135789]\\d{6,9}",]'],
+"244": '["AO","00",,,,,"\\d{9}","[29]\\d{8}",[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,,]]]',
+"211": '["SS","00","0",,,,"\\d{9}","[19]\\d{8}",[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"$NP$FG",]]]',
+"373": '["MD","00","0",,,"$NP$FG","\\d{8}","[235-9]\\d{7}",[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","22|3",,],["([25-7]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3","2[13-9]|[5-7]",,],["([89]\\d{2})(\\d{5})","$1 $2","[89]",,]]]',
+"996": '["KG","00","0",,,"$NP$FG","\\d{5,10}","[235-8]\\d{8,9}",[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","[25-7]|31[25]",,],["(\\d{4})(\\d{5})","$1 $2","3(?:1[36]|[2-9])",,],["(\\d{3})(\\d{3})(\\d)(\\d{3})","$1 $2 $3 $4","8",,]]]',
+"93": '["AF","00","0",,,"$NP$FG","\\d{7,9}","[2-7]\\d{8}",[["([2-7]\\d)(\\d{3})(\\d{4})","$1 $2 $3","[2-7]",,]]]',
+"260": '["ZM","00","0",,,"$NP$FG","\\d{9}","[289]\\d{8}",[["([29]\\d)(\\d{7})","$1 $2","[29]",,],["(800)(\\d{3})(\\d{3})","$1 $2 $3","8",,]]]',
+"378": '["SM","00",,"(?:0549)?([89]\\d{5})","0549$1",,"\\d{6,10}","[05-7]\\d{7,9}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[5-7]",,],["(0549)(\\d{6})","$1 $2","0",,"($1) $2"],["(\\d{6})","0549 $1","[89]",,"(0549) $1"]]]',
+"235": '["TD","00|16",,,,,"\\d{8}","[2679]\\d{7}",[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,,]]]',
+"960": '["MV","0(?:0|19)",,,,,"\\d{7,10}","[346-8]\\d{6,9}|9(?:00\\d{7}|\\d{6})",[["(\\d{3})(\\d{4})","$1-$2","[3467]|9(?:[1-9]|0[1-9])",,],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","[89]00",,]]]',
+"221": '["SN","00",,,,,"\\d{9}","[3789]\\d{8}",[["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[379]",,],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","8",,]]]',
+"595": '["PY","00","0",,,,"\\d{5,9}","5[0-5]\\d{4,7}|[2-46-9]\\d{5,8}",[["(\\d{2})(\\d{5})","$1 $2","(?:[26]1|3[289]|4[124678]|7[123]|8[1236])","($NP$FG)",],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3","(?:[26]1|3[289]|4[124678]|7[123]|8[1236])","($NP$FG)",],["(\\d{3})(\\d{3,6})","$1 $2","[2-9]0","$NP$FG",],["(\\d{3})(\\d{6})","$1 $2","9[1-9]","$NP$FG",],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","8700",,],["(\\d{3})(\\d{4,5})","$1 $2","[2-8][1-9]","($NP$FG)",],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","[2-8][1-9]","$NP$FG",]]]',
+"977": '["NP","00","0",,,"$NP$FG","\\d{6,10}","[1-8]\\d{7}|9(?:[1-69]\\d{6,8}|7[2-6]\\d{5,7}|8\\d{8})",[["(1)(\\d{7})","$1-$2","1[2-6]",,],["(\\d{2})(\\d{6})","$1-$2","1[01]|[2-8]|9(?:[1-69]|7[15-9])",,],["(9\\d{2})(\\d{7})","$1-$2","9(?:6[013]|7[245]|8)","$FG",]]]',
+"36": '["HU","00","06",,,"($FG)","\\d{6,9}","[1-9]\\d{7,8}",[["(1)(\\d{3})(\\d{4})","$1 $2 $3","1",,],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3","[2-9]",,]]]',
+};
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/phonenumberutils/PhoneNumberNormalizer.jsm
@@ -0,0 +1,56 @@
+/* This Source Code Form is subject to the terms of the Apache License, Version
+ * 2.0. If a copy of the Apache License was not distributed with this file, You
+ * can obtain one at https://www.apache.org/licenses/LICENSE-2.0 */
+
+// This library came from https://github.com/andreasgal/PhoneNumber.js but will
+// be further maintained by our own in Form Autofill codebase.
+
+"use strict";
+
+this.EXPORTED_SYMBOLS = ["PhoneNumberNormalizer"];
+
+this.PhoneNumberNormalizer = (function() {
+  const UNICODE_DIGITS = /[\uFF10-\uFF19\u0660-\u0669\u06F0-\u06F9]/g;
+  const VALID_ALPHA_PATTERN = /[a-zA-Z]/g;
+  const LEADING_PLUS_CHARS_PATTERN = /^[+\uFF0B]+/g;
+  const NON_DIALABLE_CHARS = /[^,#+\*\d]/g;
+
+  // Map letters to numbers according to the ITU E.161 standard
+  let E161 = {
+    "a": 2, "b": 2, "c": 2,
+    "d": 3, "e": 3, "f": 3,
+    "g": 4, "h": 4, "i": 4,
+    "j": 5, "k": 5, "l": 5,
+    "m": 6, "n": 6, "o": 6,
+    "p": 7, "q": 7, "r": 7, "s": 7,
+    "t": 8, "u": 8, "v": 8,
+    "w": 9, "x": 9, "y": 9, "z": 9,
+  };
+
+  // Normalize a number by converting unicode numbers and symbols to their
+  // ASCII equivalents and removing all non-dialable characters.
+  function NormalizeNumber(number, numbersOnly) {
+    if (typeof number !== "string") {
+      return "";
+    }
+
+    number = number.replace(UNICODE_DIGITS,
+                            function(ch) {
+                              return String.fromCharCode(48 + (ch.charCodeAt(0) & 0xf));
+                            });
+    if (!numbersOnly) {
+      number = number.replace(VALID_ALPHA_PATTERN,
+                              function(ch) {
+                                return String(E161[ch.toLowerCase()] || 0);
+                              });
+    }
+    number = number.replace(LEADING_PLUS_CHARS_PATTERN, "+");
+    number = number.replace(NON_DIALABLE_CHARS, "");
+    return number;
+  }
+
+
+  return {
+    Normalize: NormalizeNumber,
+  };
+})();
--- a/browser/extensions/formautofill/test/browser/head.js
+++ b/browser/extensions/formautofill/test/browser/head.js
@@ -14,17 +14,17 @@ const TEST_ADDRESS_1 = {
   "additional-name": "R.",
   "family-name": "Smith",
   organization: "World Wide Web Consortium",
   "street-address": "32 Vassar Street\nMIT Room 32-G524",
   "address-level2": "Cambridge",
   "address-level1": "MA",
   "postal-code": "02139",
   country: "US",
-  tel: "+1 617 253 5702",
+  tel: "+16172535702",
   email: "timbl@w3.org",
 };
 
 const TEST_ADDRESS_2 = {
   "street-address": "Some Address",
   country: "US",
 };
 
--- a/browser/extensions/formautofill/test/mochitest/test_basic_autocomplete_form.html
+++ b/browser/extensions/formautofill/test/mochitest/test_basic_autocomplete_form.html
@@ -19,23 +19,23 @@ Form autofill test: simple form address 
 
 "use strict";
 
 const {FormAutofillUtils} = SpecialPowers.Cu.import("resource://formautofill/FormAutofillUtils.jsm");
 
 let MOCK_STORAGE = [{
   organization: "Sesame Street",
   "street-address": "123 Sesame Street.\n2-line\n3-line",
-  tel: "1-345-345-3456",
+  tel: "+13453453456",
   country: "US",
   "address-level1": "NY",
 }, {
   organization: "Mozilla",
   "street-address": "331 E. Evelyn Avenue\n2-line\n3-line",
-  tel: "1-650-903-0800",
+  tel: "+16509030800",
   country: "US",
   "address-level1": "CA",
 }];
 
 function checkElementFilled(element, expectedvalue) {
   return [
     new Promise(resolve => {
       element.addEventListener("input", function onInput() {
@@ -82,31 +82,31 @@ function checkFormFilled(address) {
 
 async function setupAddressStorage() {
   await addAddress(MOCK_STORAGE[0]);
   await addAddress(MOCK_STORAGE[1]);
 }
 
 async function setupFormHistory() {
   await updateFormHistory([
-    {op: "add", fieldname: "tel", value: "1-234-567-890"},
+    {op: "add", fieldname: "tel", value: "+1234567890"},
     {op: "add", fieldname: "email", value: "foo@mozilla.com"},
   ]);
 }
 
 initPopupListener();
 
 // Form with history only.
 add_task(async function history_only_menu_checking() {
   await setupFormHistory();
 
   await setInput("#tel", "");
   doKey("down");
   await expectPopup();
-  checkMenuEntries(["1-234-567-890"], false);
+  checkMenuEntries(["+1234567890"], false);
 });
 
 // Form with both history and address storage.
 add_task(async function check_menu_when_both_existed() {
   await setupAddressStorage();
 
   await setInput("#organization", "");
   doKey("down");
@@ -172,17 +172,17 @@ add_task(async function check_fields_aft
   await checkFormFilled(MOCK_STORAGE[1]);
 });
 
 // Fallback to history search after autofill address.
 add_task(async function check_fallback_after_form_autofill() {
   await setInput("#tel", "");
   doKey("down");
   await expectPopup();
-  checkMenuEntries(["1-234-567-890"], false);
+  checkMenuEntries(["+1234567890"], false);
 });
 
 // Resume form autofill once all the autofilled fileds are changed.
 add_task(async function check_form_autofill_resume() {
   document.querySelector("#tel").blur();
   document.querySelector("#form1").reset();
   await setInput("#tel", "");
   doKey("down");
--- a/browser/extensions/formautofill/test/mochitest/test_formautofill_preview_highlight.html
+++ b/browser/extensions/formautofill/test/mochitest/test_formautofill_preview_highlight.html
@@ -18,23 +18,23 @@ Form autofill test: preview and highligh
 /* import-globals-from formautofill_common.js */
 
 "use strict";
 
 let defaultTextColor;
 const MOCK_STORAGE = [{
   organization: "Sesame Street",
   "street-address": "123 Sesame Street.",
-  tel: "1-345-345-3456",
+  tel: "+13453453456",
 }, {
   organization: "Mozilla",
   "street-address": "331 E. Evelyn Avenue",
 }, {
   organization: "Tel org",
-  tel: "2-222-333-444",
+  tel: "+12223334444",
 }];
 
 // We could not get ManuallyManagedState of element now, so directly check if
 // filter and text color style are applied.
 function checkFieldPreview(elem, expectedText) {
   const computedStyle = window.getComputedStyle(elem);
   const isStyleApplied = computedStyle.getPropertyValue("filter") !== "none" &&
                          computedStyle.getPropertyValue("color") !== defaultTextColor;
--- a/browser/extensions/formautofill/test/mochitest/test_on_address_submission.html
+++ b/browser/extensions/formautofill/test/mochitest/test_on_address_submission.html
@@ -17,21 +17,21 @@ Form autofill test: check if address is 
 /* import-globals-from ../../../../../toolkit/components/satchel/test/satchel_common.js */
 /* import-globals-from formautofill_common.js */
 
 "use strict";
 
 let TEST_ADDRESSES = [{
   organization: "Sesame Street",
   "street-address": "123 Sesame Street.",
-  tel: "1-345-345-3456",
+  tel: "+13453453456",
 }, {
   organization: "Mozilla",
   "street-address": "331 E. Evelyn Avenue",
-  tel: "1-650-903-0800",
+  tel: "+16509030800",
 }];
 
 initPopupListener();
 
 // Submit first address for saving.
 add_task(async function check_storage_after_form_submitted() {
   // We already verified the first time use case in browser test
   await SpecialPowers.pushPrefEnv({
--- a/browser/extensions/formautofill/test/unit/test_addressRecords.js
+++ b/browser/extensions/formautofill/test/unit/test_addressRecords.js
@@ -11,17 +11,17 @@ const TEST_ADDRESS_1 = {
   "additional-name": "John",
   "family-name": "Berners-Lee",
   organization: "World Wide Web Consortium",
   "street-address": "32 Vassar Street\nMIT Room 32-G524",
   "address-level2": "Cambridge",
   "address-level1": "MA",
   "postal-code": "02139",
   country: "US",
-  tel: "+1 617 253 5702",
+  tel: "+16172535702",
   email: "timbl@w3.org",
 };
 
 const TEST_ADDRESS_2 = {
   "street-address": "Some Address",
   country: "US",
 };
 
@@ -43,67 +43,67 @@ const TEST_ADDRESS_WITH_INVALID_FIELD = 
 };
 
 const MERGE_TESTCASES = [
   {
     description: "Merge a superset",
     addressInStorage: {
       "given-name": "Timothy",
       "street-address": "331 E. Evelyn Avenue",
-      "tel": "1-650-903-0800",
+      "tel": "+16509030800",
     },
     addressToMerge: {
       "given-name": "Timothy",
       "street-address": "331 E. Evelyn Avenue",
-      "tel": "1-650-903-0800",
+      "tel": "+16509030800",
       country: "US",
     },
     expectedAddress: {
       "given-name": "Timothy",
       "street-address": "331 E. Evelyn Avenue",
-      "tel": "1-650-903-0800",
+      "tel": "+16509030800",
       country: "US",
     },
   },
   {
     description: "Merge a subset",
     addressInStorage: {
       "given-name": "Timothy",
       "street-address": "331 E. Evelyn Avenue",
-      "tel": "1-650-903-0800",
+      "tel": "+16509030800",
       country: "US",
     },
     addressToMerge: {
       "given-name": "Timothy",
       "street-address": "331 E. Evelyn Avenue",
-      "tel": "1-650-903-0800",
+      "tel": "+16509030800",
     },
     expectedAddress: {
       "given-name": "Timothy",
       "street-address": "331 E. Evelyn Avenue",
-      "tel": "1-650-903-0800",
+      "tel": "+16509030800",
       country: "US",
     },
   },
   {
     description: "Merge an address with partial overlaps",
     addressInStorage: {
       "given-name": "Timothy",
       "street-address": "331 E. Evelyn Avenue",
-      "tel": "1-650-903-0800",
+      "tel": "+16509030800",
     },
     addressToMerge: {
       "street-address": "331 E. Evelyn Avenue",
-      "tel": "1-650-903-0800",
+      "tel": "+16509030800",
       country: "US",
     },
     expectedAddress: {
       "given-name": "Timothy",
       "street-address": "331 E. Evelyn Avenue",
-      "tel": "1-650-903-0800",
+      "tel": "+16509030800",
       country: "US",
     },
   },
 ];
 
 let do_check_record_matches = (recordWithMeta, record) => {
   for (let key in record) {
     do_check_eq(recordWithMeta[key], record[key]);
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/test_phoneNumber.js
@@ -0,0 +1,246 @@
+/**
+ * Tests PhoneNumber.jsm and PhoneNumberNormalizer.jsm.
+ */
+
+"use strict";
+
+Cu.import("resource://formautofill/phonenumberutils/PhoneNumber.jsm");
+Cu.import("resource://formautofill/phonenumberutils/PhoneNumberNormalizer.jsm");
+
+function IsPlain(dial, expected) {
+  let result = PhoneNumber.IsPlain(dial);
+  do_check_eq(result, expected);
+}
+
+function Normalize(dial, expected) {
+  let result = PhoneNumberNormalizer.Normalize(dial);
+  do_check_eq(result, expected);
+}
+
+function CantParse(dial, currentRegion) {
+  let result = PhoneNumber.Parse(dial, currentRegion);
+  do_check_null(result);
+}
+
+function Parse(dial, currentRegion) {
+  let result = PhoneNumber.Parse(dial, currentRegion);
+  do_check_neq(result, null);
+  return result;
+}
+
+function Test(dial, currentRegion, nationalNumber, region) {
+  let result = Parse(dial, currentRegion);
+  do_check_eq(result.nationalNumber, nationalNumber);
+  do_check_eq(result.region, region);
+  return result;
+}
+
+function TestProperties(dial, currentRegion) {
+  let result = Parse(dial, currentRegion);
+  do_check_true(result.internationalFormat);
+  do_check_true(result.internationalNumber);
+  do_check_true(result.nationalFormat);
+  do_check_true(result.nationalNumber);
+  do_check_true(result.countryName);
+  do_check_true(result.countryCode);
+}
+
+function Format(dial, currentRegion, nationalNumber, region, nationalFormat, internationalFormat) {
+  let result = Test(dial, currentRegion, nationalNumber, region);
+  do_check_eq(result.nationalFormat, nationalFormat);
+  do_check_eq(result.internationalFormat, internationalFormat);
+  return result;
+}
+
+function AllEqual(list, currentRegion) {
+  let parsedList = list.map(item => Parse(item, currentRegion));
+  let firstItem = parsedList.shift();
+  for (let item of parsedList) {
+    Assert.deepEqual(item, firstItem);
+  }
+}
+
+add_task(async function test_phoneNumber() {
+  // Test whether could a string be a phone number.
+  IsPlain(null, false);
+  IsPlain("", false);
+  IsPlain("1", true);
+  IsPlain("*2", true); // Real number used in Venezuela
+  IsPlain("*8", true); // Real number used in Venezuela
+  IsPlain("12", true);
+  IsPlain("123", true);
+  IsPlain("1a2", false);
+  IsPlain("12a", false);
+  IsPlain("1234", true);
+  IsPlain("123a", false);
+  IsPlain("+", true);
+  IsPlain("+1", true);
+  IsPlain("+12", true);
+  IsPlain("+123", true);
+  IsPlain("()123", false);
+  IsPlain("(1)23", false);
+  IsPlain("(12)3", false);
+  IsPlain("(123)", false);
+  IsPlain("(123)4", false);
+  IsPlain("(123)4", false);
+  IsPlain("123;ext=", false);
+  IsPlain("123;ext=1", false);
+  IsPlain("123;ext=1234567", false);
+  IsPlain("123;ext=12345678", false);
+  IsPlain("123 ext:1", false);
+  IsPlain("123 ext:1#", false);
+  IsPlain("123-1#", false);
+  IsPlain("123 1#", false);
+  IsPlain("123 12345#", false);
+  IsPlain("123 +123456#", false);
+
+  // Getting international number back from intl number.
+  TestProperties("+19497262896");
+
+  // Test parsing national numbers.
+  Parse("033316005", "NZ");
+  Parse("03-331 6005", "NZ");
+  Parse("03 331 6005", "NZ");
+  // Testing international prefixes.
+  // Should strip country code.
+  Parse("0064 3 331 6005", "NZ");
+
+  // Test CA before US because CA has to import meta-information for US.
+  Parse("4031234567", "CA");
+  Parse("(416) 585-4319", "CA");
+  Parse("647-967-4357", "CA");
+  Parse("416-716-8768", "CA");
+  Parse("18002684646", "CA");
+  Parse("416-445-9119", "CA");
+  Parse("1-800-668-6866", "CA");
+  Parse("(416) 453-6486", "CA");
+  Parse("(647) 268-4778", "CA");
+  Parse("647-218-1313", "CA");
+  Parse("+1 647-209-4642", "CA");
+  Parse("416-559-0133", "CA");
+  Parse("+1 647-639-4118", "CA");
+  Parse("+12898803664", "CA");
+  Parse("780-901-4687", "CA");
+  Parse("+14167070550", "CA");
+  Parse("+1-647-522-6487", "CA");
+  Parse("(416) 877-0880", "CA");
+
+  // Try again, but this time we have an international number with region rode US. It should
+  // recognize the country code and parse accordingly.
+  Parse("01164 3 331 6005", "US");
+  Parse("+64 3 331 6005", "US");
+  Parse("64(0)64123456", "NZ");
+  // Check that using a "/" is fine in a phone number.
+  Parse("123/45678", "DE");
+  Parse("123-456-7890", "US");
+
+  // Test parsing international numbers.
+  Parse("+1 (650) 333-6000", "NZ");
+  Parse("1-650-333-6000", "US");
+  // Calling the US number from Singapore by using different service providers
+  // 1st test: calling using SingTel IDD service (IDD is 001)
+  Parse("0011-650-333-6000", "SG");
+  // 2nd test: calling using StarHub IDD service (IDD is 008)
+  Parse("0081-650-333-6000", "SG");
+  // 3rd test: calling using SingTel V019 service (IDD is 019)
+  Parse("0191-650-333-6000", "SG");
+  // Calling the US number from Poland
+  Parse("0~01-650-333-6000", "PL");
+  // Using "++" at the start.
+  Parse("++1 (650) 333-6000", "PL");
+  // Using a full-width plus sign.
+  Parse("\uFF0B1 (650) 333-6000", "SG");
+  // The whole number, including punctuation, is here represented in full-width form.
+  Parse("\uFF0B\uFF11\u3000\uFF08\uFF16\uFF15\uFF10\uFF09" +
+        "\u3000\uFF13\uFF13\uFF13\uFF0D\uFF16\uFF10\uFF10\uFF10",
+        "SG");
+
+  // Test parsing with leading zeros.
+  Parse("+39 02-36618 300", "NZ");
+  Parse("02-36618 300", "IT");
+  Parse("312 345 678", "IT");
+
+  // Test parsing numbers in Argentina.
+  Parse("+54 9 343 555 1212", "AR");
+  Parse("0343 15 555 1212", "AR");
+  Parse("+54 9 3715 65 4320", "AR");
+  Parse("03715 15 65 4320", "AR");
+  Parse("+54 11 3797 0000", "AR");
+  Parse("011 3797 0000", "AR");
+  Parse("+54 3715 65 4321", "AR");
+  Parse("03715 65 4321", "AR");
+  Parse("+54 23 1234 0000", "AR");
+  Parse("023 1234 0000", "AR");
+
+  // Test numbers in Mexico
+  Parse("+52 (449)978-0001", "MX");
+  Parse("01 (449)978-0001", "MX");
+  Parse("(449)978-0001", "MX");
+  Parse("+52 1 33 1234-5678", "MX");
+  Parse("044 (33) 1234-5678", "MX");
+  Parse("045 33 1234-5678", "MX");
+
+  // Test that lots of spaces are ok.
+  Parse("0 3   3 3 1   6 0 0 5", "NZ");
+
+  // Test omitting the current region. This is only valid when the number starts
+  // with a '+'.
+  Parse("+64 3 331 6005");
+  Parse("+64 3 331 6005", null);
+
+  // US numbers
+  Format("19497261234", "US", "9497261234", "US", "(949) 726-1234", "+1 949-726-1234");
+
+  // Try a couple german numbers from the US with various access codes.
+  Format("49451491934", "US", "0451491934", "DE", "0451 491934", "+49 451 491934");
+  Format("+49451491934", "US", "0451491934", "DE", "0451 491934", "+49 451 491934");
+  Format("01149451491934", "US", "0451491934", "DE", "0451 491934", "+49 451 491934");
+
+  // Now try dialing the same number from within the German region.
+  Format("451491934", "DE", "0451491934", "DE", "0451 491934", "+49 451 491934");
+  Format("0451491934", "DE", "0451491934", "DE", "0451 491934", "+49 451 491934");
+
+  // Numbers in italy keep the leading 0 in the city code when dialing internationally.
+  Format("0577-555-555", "IT", "0577555555", "IT", "05 7755 5555", "+39 05 7755 5555");
+
+  // Colombian international number without the leading "+"
+  Format("5712234567", "CO", "12234567", "CO", "(1) 2234567", "+57 1 2234567");
+
+  // Telefonica tests
+  Format("612123123", "ES", "612123123", "ES", "612 12 31 23", "+34 612 12 31 23");
+
+  // Chile mobile number from a landline
+  Format("0997654321", "CL", "997654321", "CL", "(99) 765 4321", "+56 99 765 4321");
+
+  // Chile mobile number from another mobile number
+  Format("997654321", "CL", "997654321", "CL", "(99) 765 4321", "+56 99 765 4321");
+
+  // Dialing 911 in the US. This is not a national number.
+  CantParse("911", "US");
+
+  // China mobile number with a 0 in it
+  Format("15955042864", "CN", "015955042864", "CN", "0159 5504 2864", "+86 159 5504 2864");
+
+  // Testing international region numbers.
+  CantParse("883510000000091", "001");
+  Format("+883510000000092", "001", "510000000092", "001", "510 000 000 092", "+883 510 000 000 092");
+  Format("883510000000093", "FR", "510000000093", "001", "510 000 000 093", "+883 510 000 000 093");
+  Format("+883510000000094", "FR", "510000000094", "001", "510 000 000 094", "+883 510 000 000 094");
+  Format("883510000000095", "US", "510000000095", "001", "510 000 000 095", "+883 510 000 000 095");
+  Format("+883510000000096", "US", "510000000096", "001", "510 000 000 096", "+883 510 000 000 096");
+  CantParse("979510000012", "001");
+  Format("+979510000012", "001", "510000012", "001", "5 1000 0012", "+979 5 1000 0012");
+
+  // Test normalizing numbers. Only 0-9,#* are valid in a phone number.
+  Normalize("+ABC # * , 9 _ 1 _0", "+222#*,910");
+  Normalize("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "22233344455566677778889999");
+  Normalize("abcdefghijklmnopqrstuvwxyz", "22233344455566677778889999");
+
+  // 8 and 9 digit numbers with area code in Brazil with collect call prefix (90)
+  AllEqual(["01187654321", "0411187654321", "551187654321", "90411187654321", "+551187654321"], "BR");
+  AllEqual(["011987654321", "04111987654321", "5511987654321", "904111987654321", "+5511987654321"], "BR");
+
+  do_check_eq(PhoneNumberNormalizer.Normalize("123abc", true), "123");
+  do_check_eq(PhoneNumberNormalizer.Normalize("12345", true), "12345");
+  do_check_eq(PhoneNumberNormalizer.Normalize("1abcd", false), "12223");
+});
--- a/browser/extensions/formautofill/test/unit/test_transformFields.js
+++ b/browser/extensions/formautofill/test/unit/test_transformFields.js
@@ -100,16 +100,94 @@ const ADDRESS_COMPUTE_TESTCASES = [
     address: {
       "country": "US",
     },
     expectedResult: {
       "country": "US",
       "country-name": "United States",
     },
   },
+
+  // Tel
+  {
+    description: "\"tel\" with US country code",
+    address: {
+      "tel": "+16172535702",
+    },
+    expectedResult: {
+      "tel": "+16172535702",
+      "tel-country-code": "+1",
+      "tel-national": "6172535702",
+      "tel-area-code": "617",
+      "tel-local": "2535702",
+      "tel-local-prefix": "253",
+      "tel-local-suffix": "5702",
+    },
+  },
+  {
+    description: "\"tel\" with TW country code (the components won't be parsed)",
+    address: {
+      "tel": "+886212345678",
+    },
+    expectedResult: {
+      "tel": "+886212345678",
+      "tel-country-code": "+886",
+      "tel-national": "0212345678",
+      "tel-area-code": "",
+      "tel-local": "",
+      "tel-local-prefix": "",
+      "tel-local-suffix": "",
+    },
+  },
+  {
+    description: "\"tel\" without country code so use \"US\" as default resion",
+    address: {
+      "tel": "6172535702",
+    },
+    expectedResult: {
+      "tel": "+16172535702",
+      "tel-country-code": "+1",
+      "tel-national": "6172535702",
+      "tel-area-code": "617",
+      "tel-local": "2535702",
+      "tel-local-prefix": "253",
+      "tel-local-suffix": "5702",
+    },
+  },
+  {
+    description: "\"tel\" without country code but \"country\" is \"TW\"",
+    address: {
+      "tel": "0212345678",
+      "country": "TW",
+    },
+    expectedResult: {
+      "tel": "+886212345678",
+      "tel-country-code": "+886",
+      "tel-national": "0212345678",
+      "tel-area-code": "",
+      "tel-local": "",
+      "tel-local-prefix": "",
+      "tel-local-suffix": "",
+    },
+  },
+  {
+    description: "\"tel\" can't be parsed so leave it as-is",
+    address: {
+      "tel": "12345",
+    },
+    expectedResult: {
+      "tel": "12345",
+      "tel-country-code": "",
+      "tel-national": "12345",
+      "tel-area-code": "",
+      "tel-local": "",
+      "tel-local-prefix": "",
+      "tel-local-suffix": "",
+    },
+  },
 ];
 
 const ADDRESS_NORMALIZE_TESTCASES = [
   // Empty
   {
     description: "Empty address",
     address: {
     },
@@ -150,17 +228,16 @@ const ADDRESS_NORMALIZE_TESTCASES = [
       "given-name": "Timothy",
     },
     expectedResult: {
       "given-name": "Timothy",
       "family-name": "Doe",
     },
   },
 
-
   // Address
   {
     description: "Has \"address-line1~3\" and \"street-address\" is omitted",
     address: {
       "address-line1": "line1",
       "address-line2": "line2",
       "address-line3": "line3",
     },
@@ -269,16 +346,107 @@ const ADDRESS_NORMALIZE_TESTCASES = [
     address: {
       "country": "CA",
     },
     expectedResult: {
       "country": undefined,
       "country-name": "",
     },
   },
+
+  // Tel
+  {
+    description: "Has \"tel\" with country code",
+    address: {
+      "tel": "+16172535702",
+    },
+    expectedResult: {
+      "tel": "+16172535702",
+    },
+  },
+  {
+    description: "Has \"tel\" without country code but \"country\" is set",
+    address: {
+      "tel": "0212345678",
+      "country": "TW",
+    },
+    expectedResult: {
+      "tel": "+886212345678",
+    },
+  },
+  {
+    description: "Has \"tel\" without country code and \"country\" so use \"US\" as default region",
+    address: {
+      "tel": "6172535702",
+    },
+    expectedResult: {
+      "tel": "+16172535702",
+    },
+  },
+  {
+    description: "\"tel\" can't be parsed so leave it as-is",
+    address: {
+      "tel": "12345",
+    },
+    expectedResult: {
+      "tel": "12345",
+    },
+  },
+  {
+    description: "Has \"tel-national\" and \"tel-country-code\"",
+    address: {
+      "tel-national": "0212345678",
+      "tel-country-code": "+886",
+    },
+    expectedResult: {
+      "tel": "+886212345678",
+    },
+  },
+  {
+    description: "Has \"tel-national\" and \"country\"",
+    address: {
+      "tel-national": "0212345678",
+      "country": "TW",
+    },
+    expectedResult: {
+      "tel": "+886212345678",
+    },
+  },
+  {
+    description: "Has \"tel-national\", \"tel-country-code\" and \"country\"",
+    address: {
+      "tel-national": "0212345678",
+      "tel-country-code": "+886",
+      "country": "US",
+    },
+    expectedResult: {
+      "tel": "+886212345678",
+    },
+  },
+  {
+    description: "Has \"tel-area-code\" and \"tel-local\"",
+    address: {
+      "tel-area-code": "617",
+      "tel-local": "2535702",
+    },
+    expectedResult: {
+      "tel": "+16172535702",
+    },
+  },
+  {
+    description: "Has \"tel-area-code\", \"tel-local-prefix\" and \"tel-local-suffix\"",
+    address: {
+      "tel-area-code": "617",
+      "tel-local-prefix": "253",
+      "tel-local-suffix": "5702",
+    },
+    expectedResult: {
+      "tel": "+16172535702",
+    },
+  },
 ];
 
 const CREDIT_CARD_COMPUTE_TESTCASES = [
   // Empty
   {
     description: "Empty credit card",
     creditCard: {
     },
--- a/browser/extensions/formautofill/test/unit/xpcshell.ini
+++ b/browser/extensions/formautofill/test/unit/xpcshell.ini
@@ -29,12 +29,13 @@ support-files =
 [test_getInfo.js]
 [test_isCJKName.js]
 [test_isFieldEligibleForAutofill.js]
 [test_markAsAutofillField.js]
 [test_migrateRecords.js]
 [test_nameUtils.js]
 [test_onFormSubmitted.js]
 [test_profileAutocompleteResult.js]
+[test_phoneNumber.js]
 [test_savedFieldNames.js]
 [test_toOneLineAddress.js]
 [test_storage_tombstones.js]
 [test_transformFields.js]
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -529,19 +529,23 @@ HTMLMediaElement::MediaLoadListener::OnS
       element->NotifyLoadError();
     }
     return status;
   }
 
   nsCOMPtr<nsIHttpChannel> hc = do_QueryInterface(aRequest);
   bool succeeded;
   if (hc && NS_SUCCEEDED(hc->GetRequestSucceeded(&succeeded)) && !succeeded) {
-    element->NotifyLoadError();
     uint32_t responseStatus = 0;
     Unused << hc->GetResponseStatus(&responseStatus);
+    nsAutoCString statusText;
+    Unused << hc->GetResponseStatusText(statusText);
+    element->NotifyLoadError(
+      nsPrintfCString("%u: %s", responseStatus, statusText.get()));
+
     nsAutoString code;
     code.AppendInt(responseStatus);
     nsAutoString src;
     element->GetCurrentSrc(src);
     const char16_t* params[] = { code.get(), src.get() };
     element->ReportLoadError("MediaLoadHttpError", params, ArrayLength(params));
     return NS_BINDING_ABORTED;
   }
@@ -2041,21 +2045,22 @@ void HTMLMediaElement::SelectResource()
       this, &HTMLMediaElement::NoSupportedMediaSourceError, nsCString()));
   } else {
     // Otherwise, the source elements will be used.
     mIsLoadingFromSourceChildren = true;
     LoadFromSourceChildren();
   }
 }
 
-void HTMLMediaElement::NotifyLoadError()
+void
+HTMLMediaElement::NotifyLoadError(const nsACString& aErrorDetails)
 {
   if (!mIsLoadingFromSourceChildren) {
     LOG(LogLevel::Debug, ("NotifyLoadError(), no supported media error"));
-    NoSupportedMediaSourceError();
+    NoSupportedMediaSourceError(aErrorDetails);
   } else if (mSourceLoadCandidate) {
     DispatchAsyncSourceError(mSourceLoadCandidate);
     QueueLoadFromSourceTask();
   } else {
     NS_WARNING("Should know the source we were loading from!");
   }
 }
 
@@ -4835,23 +4840,16 @@ HTMLMediaElement::FinishDecoderSetup(Med
       mDecoder->SetCDMProxy(mMediaKeys->GetCDMProxy());
     } else {
       // CDM must have crashed.
       ShutdownDecoder();
       return NS_ERROR_FAILURE;
     }
   }
 
-  MediaEventSource<void>* waitingForKeyProducer = mDecoder->WaitingForKeyEvent();
-  // Not every decoder will produce waitingForKey events, only add ones that can
-  if (waitingForKeyProducer) {
-    mWaitingForKeyListener = waitingForKeyProducer->Connect(
-      mAbstractMainThread, this, &HTMLMediaElement::CannotDecryptWaitingForKey);
-  }
-
   if (mChannelLoader) {
     mChannelLoader->Done();
     mChannelLoader = nullptr;
   }
 
   // We may want to suspend the new stream now.
   // This will also do an AddRemoveSelfReference.
   NotifyOwnerDocumentActivityChanged();
@@ -7039,19 +7037,19 @@ HTMLMediaElement::GetTopLevelPrincipal()
   if (!doc) {
     return nullptr;
   }
   principal = doc->NodePrincipal();
   return principal.forget();
 }
 
 void
-HTMLMediaElement::CannotDecryptWaitingForKey()
-{
-  LOG(LogLevel::Debug, ("%p, CannotDecryptWaitingForKey()", this));
+HTMLMediaElement::NotifyWaitingForKey()
+{
+  LOG(LogLevel::Debug, ("%p, NotifyWaitingForKey()", this));
 
   // http://w3c.github.io/encrypted-media/#wait-for-key
   // 7.3.4 Queue a "waitingforkey" Event
   // 1. Let the media element be the specified HTMLMediaElement object.
   // 2. If the media element's waiting for key value is true, abort these steps.
   if (mWaitingForKey == NOT_WAITING_FOR_KEY) {
     // 3. Set the media element's waiting for key value to true.
     // Note: algorithm continues in UpdateReadyStateInternal() when all decoded
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -326,17 +326,17 @@ public:
    * may queue a task to run the select resource algorithm if appropriate.
    */
   void NotifyAddedSource();
 
   /**
    * Called when there's been an error fetching the resource. This decides
    * whether it's appropriate to fire an error event.
    */
-  void NotifyLoadError();
+  void NotifyLoadError(const nsACString& aErrorDetails = nsCString());
 
   /**
    * Called by one of our associated MediaTrackLists (audio/video) when an
    * AudioTrack is enabled or a VideoTrack is selected.
    */
   void NotifyMediaTrackEnabled(MediaTrack* aTrack);
 
   /**
@@ -657,17 +657,17 @@ public:
   bool IsEventAttributeNameInternal(nsIAtom* aName) override;
 
   // Returns the principal of the "top level" document; the origin displayed
   // in the URL bar of the browser window.
   already_AddRefed<nsIPrincipal> GetTopLevelPrincipal();
 
   bool ContainsRestrictedContent();
 
-  void CannotDecryptWaitingForKey();
+  void NotifyWaitingForKey() override;
 
   bool MozAutoplayEnabled() const
   {
     return mAutoplayEnabled;
   }
 
   already_AddRefed<DOMMediaStream> CaptureAudio(ErrorResult& aRv,
                                                 MediaStreamGraph* aGraph);
--- a/dom/media/AbstractMediaDecoder.h
+++ b/dom/media/AbstractMediaDecoder.h
@@ -41,32 +41,18 @@ typedef nsDataHashtable<nsCStringHashKey
 class AbstractMediaDecoder : public nsIObserver
 {
 public:
   // Increments the parsed, decoded and dropped frame counters by the passed in
   // counts.
   // Can be called on any thread.
   virtual void NotifyDecodedFrames(const FrameStatisticsData& aStats) = 0;
 
-  // Notify the media decoder that a decryption key is required before emitting
-  // further output. This only needs to be overridden for decoders that expect
-  // encryption, such as the MediaSource decoder.
-  virtual void NotifyWaitingForKey() { }
-
-  // Return an event that will be notified when a decoder is waiting for a
-  // decryption key before it can return more output.
-  virtual MediaEventSource<void>* WaitingForKeyEvent()
-  {
-    return nullptr;
-  }
-
   // Return an abstract thread on which to run main thread runnables.
   virtual AbstractThread* AbstractMainThread() const = 0;
-
-public:
   virtual VideoFrameContainer* GetVideoFrameContainer() = 0;
   virtual mozilla::layers::ImageContainer* GetImageContainer() = 0;
 
   // Returns the owner of this decoder or null when the decoder is shutting
   // down. The owner should only be used on the main thread.
   virtual MediaDecoderOwner* GetOwner() const = 0;
 
   // Set by Reader if the current audio track can be offloaded
--- a/dom/media/MediaDecoder.cpp
+++ b/dom/media/MediaDecoder.cpp
@@ -317,16 +317,18 @@ MediaDecoder::Shutdown()
     mTimedMetadataListener.Disconnect();
     mMetadataLoadedListener.Disconnect();
     mFirstFrameLoadedListener.Disconnect();
     mOnPlaybackEvent.Disconnect();
     mOnPlaybackErrorEvent.Disconnect();
     mOnDecoderDoctorEvent.Disconnect();
     mOnMediaNotSeekable.Disconnect();
     mOnEncrypted.Disconnect();
+    mOnWaitingForKey.Disconnect();
+    mOnDecodeWarning.Disconnect();
 
     mDecoderStateMachine->BeginShutdown()
       ->Then(mAbstractMainThread, __func__, this,
              &MediaDecoder::FinishShutdown,
              &MediaDecoder::FinishShutdown);
   } else {
     // Ensure we always unregister asynchronously in order not to disrupt
     // the hashtable iterating in MediaShutdownManager::Shutdown().
@@ -483,16 +485,20 @@ MediaDecoder::SetStateMachineParameters(
     mAbstractMainThread, this, &MediaDecoder::OnPlaybackErrorEvent);
   mOnDecoderDoctorEvent = mDecoderStateMachine->OnDecoderDoctorEvent().Connect(
     mAbstractMainThread, this, &MediaDecoder::OnDecoderDoctorEvent);
   mOnMediaNotSeekable = mDecoderStateMachine->OnMediaNotSeekable().Connect(
     mAbstractMainThread, this, &MediaDecoder::OnMediaNotSeekable);
 
   mOnEncrypted = mReader->OnEncrypted().Connect(
     mAbstractMainThread, GetOwner(), &MediaDecoderOwner::DispatchEncrypted);
+  mOnWaitingForKey = mReader->OnWaitingForKey().Connect(
+    mAbstractMainThread, GetOwner(), &MediaDecoderOwner::NotifyWaitingForKey);
+  mOnDecodeWarning = mReader->OnDecodeWarning().Connect(
+    mAbstractMainThread, GetOwner(), &MediaDecoderOwner::DecodeWarning);
 }
 
 nsresult
 MediaDecoder::Play()
 {
   MOZ_ASSERT(NS_IsMainThread());
 
   NS_ASSERTION(mDecoderStateMachine != nullptr, "Should have state machine.");
--- a/dom/media/MediaDecoder.h
+++ b/dom/media/MediaDecoder.h
@@ -699,16 +699,18 @@ protected:
   MediaEventListener mMetadataLoadedListener;
   MediaEventListener mFirstFrameLoadedListener;
 
   MediaEventListener mOnPlaybackEvent;
   MediaEventListener mOnPlaybackErrorEvent;
   MediaEventListener mOnDecoderDoctorEvent;
   MediaEventListener mOnMediaNotSeekable;
   MediaEventListener mOnEncrypted;
+  MediaEventListener mOnWaitingForKey;
+  MediaEventListener mOnDecodeWarning;
 
 protected:
   // PlaybackRate and pitch preservation status we should start at.
   double mPlaybackRate;
 
   // Buffered range, mirrored from the reader.
   Mirror<media::TimeIntervals> mBuffered;
 
--- a/dom/media/MediaDecoderOwner.h
+++ b/dom/media/MediaDecoderOwner.h
@@ -174,14 +174,18 @@ public:
   // Called by the media decoder to create a GMPCrashHelper.
   virtual already_AddRefed<GMPCrashHelper> CreateGMPCrashHelper() = 0;
 
   // Called by the media decoder to notify the owner to resolve a seek promise.
   virtual void AsyncResolveSeekDOMPromiseIfExists() = 0;
 
   // Called by the media decoder to notify the owner to reject a seek promise.
   virtual void AsyncRejectSeekDOMPromiseIfExists() = 0;
+
+  // Notified by the decoder that a decryption key is required before emitting
+  // further output.
+  virtual void NotifyWaitingForKey() {}
 };
 
 } // namespace mozilla
 
 #endif
 
--- a/dom/media/MediaDecoderReader.h
+++ b/dom/media/MediaDecoderReader.h
@@ -275,16 +275,26 @@ public:
     return mOnTrackWaitingForKey;
   }
 
   MediaEventSource<nsTArray<uint8_t>, nsString>& OnEncrypted()
   {
     return mOnEncrypted;
   }
 
+  MediaEventSource<void>& OnWaitingForKey()
+  {
+    return mOnWaitingForKey;
+  }
+
+  MediaEventSource<MediaResult>& OnDecodeWarning()
+  {
+    return mOnDecodeWarning;
+  }
+
   // Switch the video decoder to NullDecoderModule. It might takes effective
   // since a few samples later depends on how much demuxed samples are already
   // queued in the original video decoder.
   virtual void SetVideoNullDecode(bool aIsNullDecode) { }
 
 protected:
   virtual ~MediaDecoderReader();
 
@@ -339,16 +349,20 @@ protected:
   // Notify if this media is not seekable.
   MediaEventProducer<void> mOnMediaNotSeekable;
 
   // Notify if we are waiting for a decryption key.
   MediaEventProducer<TrackInfo::TrackType> mOnTrackWaitingForKey;
 
   MediaEventProducer<nsTArray<uint8_t>, nsString> mOnEncrypted;
 
+  MediaEventProducer<void> mOnWaitingForKey;
+
+  MediaEventProducer<MediaResult> mOnDecodeWarning;
+
   RefPtr<MediaResource> mResource;
 
 private:
   virtual nsresult InitInternal() { return NS_OK; }
 
   // Read header data for all bitstreams in the file. Fills aInfo with
   // the data required to present the media, and optionally fills *aTags
   // with tag metadata from the file.
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -1392,24 +1392,18 @@ MediaFormatReader::OnDemuxerInitDone(con
       RequestDemuxSamples(TrackInfo::kAudioTrack);
     }
 
     if (HasVideo()) {
       RequestDemuxSamples(TrackInfo::kVideoTrack);
     }
   }
 
-  if (aResult != NS_OK && mDecoder) {
-    RefPtr<AbstractMediaDecoder> decoder = mDecoder;
-    mDecoder->AbstractMainThread()->Dispatch(NS_NewRunnableFunction(
-      "MediaFormatReader::OnDemuxerInitDone", [decoder, aResult]() {
-        if (decoder->GetOwner()) {
-          decoder->GetOwner()->DecodeWarning(aResult);
-        }
-      }));
+  if (aResult != NS_OK) {
+    mOnDecodeWarning.Notify(aResult);
   }
 
   MaybeResolveMetadataPromise();
 }
 
 void
 MediaFormatReader::MaybeResolveMetadataPromise()
 {
@@ -1734,19 +1728,17 @@ MediaFormatReader::NotifyWaitingForData(
   ScheduleUpdate(aTrack);
 }
 
 void
 MediaFormatReader::NotifyWaitingForKey(TrackType aTrack)
 {
   MOZ_ASSERT(OnTaskQueue());
   auto& decoder = GetDecoderData(aTrack);
-  if (mDecoder) {
-    mDecoder->NotifyWaitingForKey();
-  }
+  mOnWaitingForKey.Notify();
   if (!decoder.mDecodeRequest.Exists()) {
     LOGV("WaitingForKey received while no pending decode. Ignoring");
     return;
   }
   decoder.mWaitingForKey = true;
   ScheduleUpdate(aTrack);
 }
 
--- a/dom/media/mediasource/MediaSourceDecoder.cpp
+++ b/dom/media/mediasource/MediaSourceDecoder.cpp
@@ -313,28 +313,16 @@ MediaSourceDecoder::CanPlayThrough()
   TimeIntervals buffered = GetBuffered();
   buffered.SetFuzz(MediaSourceDemuxer::EOS_FUZZ / 2);
   TimeUnit timeAhead =
     std::min(duration, currentPosition + TimeUnit::FromSeconds(30));
   TimeInterval interval(currentPosition, timeAhead);
   return buffered.ContainsStrict(ClampIntervalToEnd(interval));
 }
 
-void
-MediaSourceDecoder::NotifyWaitingForKey()
-{
-  mWaitingForKeyEvent.Notify();
-}
-
-MediaEventSource<void>*
-MediaSourceDecoder::WaitingForKeyEvent()
-{
-  return &mWaitingForKeyEvent;
-}
-
 TimeInterval
 MediaSourceDecoder::ClampIntervalToEnd(const TimeInterval& aInterval)
 {
   MOZ_ASSERT(NS_IsMainThread());
 
   if (!mEnded) {
     return aInterval;
   }
--- a/dom/media/mediasource/MediaSourceDecoder.h
+++ b/dom/media/mediasource/MediaSourceDecoder.h
@@ -64,33 +64,28 @@ public:
   // buffered data. Used for debugging purposes.
   void GetMozDebugReaderData(nsACString& aString) override;
 
   void AddSizeOfResources(ResourceSizes* aSizes) override;
 
   MediaDecoderOwner::NextFrameStatus NextFrameBufferedStatus() override;
   bool CanPlayThrough() override;
 
-  void NotifyWaitingForKey() override;
-
-  MediaEventSource<void>* WaitingForKeyEvent() override;
-
   bool IsMSE() const override { return true; }
 
   void NotifyInitDataArrived();
 
 private:
   void DoSetMediaSourceDuration(double aDuration);
   media::TimeInterval ClampIntervalToEnd(const media::TimeInterval& aInterval);
 
   // The owning MediaSource holds a strong reference to this decoder, and
   // calls Attach/DetachMediaSource on this decoder to set and clear
   // mMediaSource.
   dom::MediaSource* mMediaSource;
   RefPtr<MediaSourceDemuxer> mDemuxer;
-  MediaEventProducer<void> mWaitingForKeyEvent;
 
   bool mEnded;
 };
 
 } // namespace mozilla
 
 #endif /* MOZILLA_MEDIASOURCEDECODER_H_ */
--- a/dom/media/platforms/wmf/DXVA2Manager.cpp
+++ b/dom/media/platforms/wmf/DXVA2Manager.cpp
@@ -949,17 +949,20 @@ D3D11DXVA2Manager::CopyToImage(IMFSample
 
       RefPtr<IMFSample> sample;
       hr = CreateOutputSample(sample, texture);
       NS_ENSURE_TRUE(SUCCEEDED(hr), hr);
 
       hr = mTransform->Output(&sample);
     }
   }
-  if (!mutex && mDevice != DeviceManagerDx::Get()->GetCompositorDevice()) {
+
+  if (!mutex && mDevice != DeviceManagerDx::Get()->GetCompositorDevice() && mSyncObject) {
+    // It appears some race-condition may allow us to arrive here even when mSyncObject
+    // is null. It's better to avoid that crash.
     client->SyncWithObject(mSyncObject);
     mSyncObject->FinalizeFrame();
   }
 
   image.forget(aOutImage);
 
   return S_OK;
 }
--- a/dom/plugins/base/nsNPAPIPlugin.cpp
+++ b/dom/plugins/base/nsNPAPIPlugin.cpp
@@ -114,19 +114,19 @@ using namespace mozilla::plugins::parent
 
 // We should make this const...
 static NPNetscapeFuncs sBrowserFuncs = {
   sizeof(sBrowserFuncs),
   (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR,
   _geturl,
   _posturl,
   _requestread,
-  nullptr,
-  nullptr,
-  nullptr,
+  _newstream,
+  _write,
+  _destroystream,
   _status,
   _useragent,
   _memalloc,
   _memfree,
   _memflush,
   _reloadplugins,
   _getJavaEnv,
   _getJavaPeer,
@@ -771,16 +771,137 @@ NPError
 
   PluginDestructionGuard guard(npp);
 
   return MakeNewNPAPIStreamInternal(npp, relativeURL, target,
                                     eNPPStreamTypeInternal_Post, false, nullptr,
                                     len, buf);
 }
 
+NPError
+_newstream(NPP npp, NPMIMEType type, const char* target, NPStream* *result)
+{
+  if (!NS_IsMainThread()) {
+    NPN_PLUGIN_LOG(PLUGIN_LOG_ALWAYS,("NPN_newstream called from the wrong thread\n"));
+    return NPERR_INVALID_PARAM;
+  }
+  NPN_PLUGIN_LOG(PLUGIN_LOG_NORMAL,
+  ("NPN_NewStream: npp=%p, type=%s, target=%s\n", (void*)npp,
+   (const char *)type, target));
+
+  NPError err = NPERR_INVALID_INSTANCE_ERROR;
+  if (npp && npp->ndata) {
+    nsNPAPIPluginInstance *inst = (nsNPAPIPluginInstance*)npp->ndata;
+
+    PluginDestructionGuard guard(inst);
+
+    nsCOMPtr<nsIOutputStream> stream;
+    if (NS_SUCCEEDED(inst->NewStreamFromPlugin((const char*) type, target,
+                                               getter_AddRefs(stream)))) {
+      auto* wrapper = new nsNPAPIStreamWrapper(stream, nullptr);
+      if (wrapper) {
+        (*result) = &wrapper->mNPStream;
+        err = NPERR_NO_ERROR;
+      } else {
+        err = NPERR_OUT_OF_MEMORY_ERROR;
+      }
+    } else {
+      err = NPERR_GENERIC_ERROR;
+    }
+  }
+  return err;
+}
+
+int32_t
+_write(NPP npp, NPStream *pstream, int32_t len, void *buffer)
+{
+  if (!NS_IsMainThread()) {
+    NPN_PLUGIN_LOG(PLUGIN_LOG_ALWAYS,("NPN_write called from the wrong thread\n"));
+    return 0;
+  }
+  NPN_PLUGIN_LOG(PLUGIN_LOG_NORMAL,
+                 ("NPN_Write: npp=%p, url=%s, len=%d, buffer=%s\n", (void*)npp,
+                  pstream->url, len, (char*)buffer));
+
+  // negative return indicates failure to the plugin
+  if (!npp)
+    return -1;
+
+  PluginDestructionGuard guard(npp);
+
+  nsNPAPIStreamWrapper* wrapper = static_cast<nsNPAPIStreamWrapper*>(pstream->ndata);
+  if (!wrapper) {
+    return -1;
+  }
+
+  nsIOutputStream* stream = wrapper->GetOutputStream();
+  if (!stream) {
+    return -1;
+  }
+
+  uint32_t count = 0;
+  nsresult rv = stream->Write((char *)buffer, len, &count);
+
+  if (NS_FAILED(rv)) {
+    return -1;
+  }
+
+  return (int32_t)count;
+}
+
+NPError
+_destroystream(NPP npp, NPStream *pstream, NPError reason)
+{
+  if (!NS_IsMainThread()) {
+    NPN_PLUGIN_LOG(PLUGIN_LOG_ALWAYS,("NPN_destroystream called from the wrong thread\n"));
+    return NPERR_INVALID_PARAM;
+  }
+  NPN_PLUGIN_LOG(PLUGIN_LOG_NORMAL,
+                 ("NPN_DestroyStream: npp=%p, url=%s, reason=%d\n", (void*)npp,
+                  pstream->url, (int)reason));
+
+  if (!npp)
+    return NPERR_INVALID_INSTANCE_ERROR;
+
+  PluginDestructionGuard guard(npp);
+
+  nsNPAPIStreamWrapper *streamWrapper = static_cast<nsNPAPIStreamWrapper*>(pstream->ndata);
+  if (!streamWrapper) {
+    return NPERR_INVALID_PARAM;
+  }
+
+  nsNPAPIPluginStreamListener *listener = streamWrapper->GetStreamListener();
+  if (listener) {
+    // This type of stream is going from the browser to the plugin. It's either the
+    // initial src/data stream or another stream resulting from NPN_GetURL* or
+    // NPN_PostURL*.
+    //
+    // Calling OnStopBinding on the listener may cause it to be deleted due to the
+    // releasing of its last references.
+    listener->OnStopBinding(nullptr, NS_BINDING_ABORTED);
+  } else {
+    // This type of stream (NPStream) was created via NPN_NewStream. The plugin holds
+    // the reference until it is to be deleted here. Deleting the wrapper will
+    // release the wrapped nsIOutputStream.
+    //
+    // The NPStream the plugin references should always be a sub-object of its own
+    // 'ndata', which is our nsNPAPIStramWrapper. See bug 548441.
+    NS_ASSERTION((char*)streamWrapper <= (char*)pstream &&
+                 ((char*)pstream) + sizeof(*pstream)
+                     <= ((char*)streamWrapper) + sizeof(*streamWrapper),
+                 "pstream is not a subobject of wrapper");
+    delete streamWrapper;
+  }
+
+  // 'listener' and/or 'streamWrapper' may be invalid (deleted) at this point. Don't
+  // touch them again!
+
+  return NPERR_NO_ERROR;
+}
+
 void
 _status(NPP npp, const char *message)
 {
   // NPN_Status is no longer supported.
 }
 
 void
 _memfree (void *ptr)
--- a/dom/plugins/base/nsNPAPIPlugin.h
+++ b/dom/plugins/base/nsNPAPIPlugin.h
@@ -266,16 +266,25 @@ NPError
 NPError
 _posturlnotify(NPP npp, const char* relativeURL, const char *target,
                uint32_t len, const char *buf, NPBool file, void* notifyData);
 
 NPError
 _posturl(NPP npp, const char* relativeURL, const char *target, uint32_t len,
             const char *buf, NPBool file);
 
+NPError
+_newstream(NPP npp, NPMIMEType type, const char* window, NPStream** pstream);
+
+int32_t
+_write(NPP npp, NPStream *pstream, int32_t len, void *buffer);
+
+NPError
+_destroystream(NPP npp, NPStream *pstream, NPError reason);
+
 void
 _status(NPP npp, const char *message);
 
 void
 _memfree (void *ptr);
 
 uint32_t
 _memflush(uint32_t size);
--- a/dom/plugins/base/nsNPAPIPluginInstance.cpp
+++ b/dom/plugins/base/nsNPAPIPluginInstance.cpp
@@ -507,16 +507,24 @@ nsresult nsNPAPIPluginInstance::SetWindo
     ("NPP SetWindow called: this=%p, [x=%d,y=%d,w=%d,h=%d], clip[t=%d,b=%d,l=%d,r=%d], return=%d\n",
     this, window->x, window->y, window->width, window->height,
     window->clipRect.top, window->clipRect.bottom, window->clipRect.left, window->clipRect.right, error));
   }
   return NS_OK;
 }
 
 nsresult
+nsNPAPIPluginInstance::NewStreamFromPlugin(const char* type, const char* target,
+                                           nsIOutputStream* *result)
+{
+  nsPluginStreamToFile* stream = new nsPluginStreamToFile(target, mOwner);
+  return stream->QueryInterface(kIOutputStreamIID, (void**)result);
+}
+
+nsresult
 nsNPAPIPluginInstance::NewStreamListener(const char* aURL, void* notifyData,
                                          nsNPAPIPluginStreamListener** listener)
 {
   RefPtr<nsNPAPIPluginStreamListener> sl = new nsNPAPIPluginStreamListener(this, notifyData, aURL);
 
   mStreamListeners.AppendElement(sl);
 
   sl.forget(listener);
--- a/dom/plugins/base/nsNPAPIPluginStreamListener.cpp
+++ b/dom/plugins/base/nsNPAPIPluginStreamListener.cpp
@@ -29,17 +29,108 @@ nsNPAPIStreamWrapper::nsNPAPIStreamWrapp
 
 nsNPAPIStreamWrapper::~nsNPAPIStreamWrapper()
 {
   if (mOutputStream) {
     mOutputStream->Close();
   }
 }
 
+NS_IMPL_ISUPPORTS(nsPluginStreamToFile, nsIOutputStream)
+
+nsPluginStreamToFile::nsPluginStreamToFile(const char* target,
+                                           nsIPluginInstanceOwner* owner)
+: mTarget(PL_strdup(target)),
+mOwner(owner)
+{
+  nsresult rv;
+  nsCOMPtr<nsIFile> pluginTmp;
+  rv = NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(pluginTmp));
+  if (NS_FAILED(rv)) return;
+
+  mTempFile = do_QueryInterface(pluginTmp, &rv);
+  if (NS_FAILED(rv)) return;
+
+  // need to create a file with a unique name - use target as the basis
+  rv = mTempFile->AppendNative(nsDependentCString(target));
+  if (NS_FAILED(rv)) return;
+
+  // Yes, make it unique.
+  rv = mTempFile->CreateUnique(nsIFile::NORMAL_FILE_TYPE, 0700);
+  if (NS_FAILED(rv)) return;
+
+  // create the file
+  rv = NS_NewLocalFileOutputStream(getter_AddRefs(mOutputStream), mTempFile, -1, 00600);
+  if (NS_FAILED(rv))
+    return;
+
+  // construct the URL we'll use later in calls to GetURL()
+  NS_GetURLSpecFromFile(mTempFile, mFileURL);
+
+#ifdef DEBUG
+  printf("File URL = %s\n", mFileURL.get());
+#endif
+}
+
+nsPluginStreamToFile::~nsPluginStreamToFile()
+{
+  // should we be deleting mTempFile here?
+  if (nullptr != mTarget)
+    PL_strfree(mTarget);
+}
+
+NS_IMETHODIMP
+nsPluginStreamToFile::Flush()
+{
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsPluginStreamToFile::Write(const char* aBuf, uint32_t aCount,
+                            uint32_t *aWriteCount)
+{
+  mOutputStream->Write(aBuf, aCount, aWriteCount);
+  mOutputStream->Flush();
+  mOwner->GetURL(mFileURL.get(), mTarget, nullptr, nullptr, 0, false);
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsPluginStreamToFile::WriteFrom(nsIInputStream *inStr, uint32_t count,
+                                uint32_t *_retval)
+{
+  NS_NOTREACHED("WriteFrom");
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+NS_IMETHODIMP
+nsPluginStreamToFile::WriteSegments(nsReadSegmentFun reader, void * closure,
+                                    uint32_t count, uint32_t *_retval)
+{
+  NS_NOTREACHED("WriteSegments");
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+NS_IMETHODIMP
+nsPluginStreamToFile::IsNonBlocking(bool *aNonBlocking)
+{
+  *aNonBlocking = false;
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsPluginStreamToFile::Close(void)
+{
+  mOutputStream->Close();
+  mOwner->GetURL(mFileURL.get(), mTarget, nullptr, nullptr, 0, false);
+  return NS_OK;
+}
+
 // nsNPAPIPluginStreamListener Methods
+
 NS_IMPL_ISUPPORTS(nsNPAPIPluginStreamListener,
                   nsITimerCallback, nsIHTTPHeaderListener)
 
 nsNPAPIPluginStreamListener::nsNPAPIPluginStreamListener(nsNPAPIPluginInstance* inst,
                                                          void* notifyData,
                                                          const char* aURL)
   : mStreamBuffer(nullptr)
   , mNotifyURL(aURL ? PL_strdup(aURL) : nullptr)
--- a/dom/plugins/base/nsNPAPIPluginStreamListener.h
+++ b/dom/plugins/base/nsNPAPIPluginStreamListener.h
@@ -35,16 +35,35 @@ public:
   nsNPAPIPluginStreamListener* GetStreamListener() { return mStreamListener; }
 
   NPStream                              mNPStream;
 protected:
   nsCOMPtr<nsIOutputStream>             mOutputStream; // only valid if not browser initiated
   nsNPAPIPluginStreamListener*          mStreamListener; // only valid if browser initiated
 };
 
+// Used to handle NPN_NewStream() - writes the stream as received by the plugin
+// to a file and at completion (NPN_DestroyStream), tells the browser to load it into
+// a plugin-specified target
+class nsPluginStreamToFile : public nsIOutputStream
+{
+public:
+  nsPluginStreamToFile(const char* target, nsIPluginInstanceOwner* owner);
+
+  NS_DECL_ISUPPORTS
+  NS_DECL_NSIOUTPUTSTREAM
+protected:
+  virtual ~nsPluginStreamToFile();
+  char* mTarget;
+  nsCString mFileURL;
+  nsCOMPtr<nsIFile> mTempFile;
+  nsCOMPtr<nsIOutputStream> mOutputStream;
+  nsIPluginInstanceOwner* mOwner;
+};
+
 class nsNPAPIPluginStreamListener : public nsITimerCallback,
                                     public nsIHTTPHeaderListener
 {
 private:
   typedef mozilla::PluginLibrary PluginLibrary;
 
 public:
   NS_DECL_ISUPPORTS
--- a/dom/plugins/ipc/PPluginInstance.ipdl
+++ b/dom/plugins/ipc/PPluginInstance.ipdl
@@ -2,16 +2,17 @@
 /* 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 protocol PPluginBackgroundDestroyer;
 include protocol PPluginModule;
 include protocol PPluginScriptableObject;
 include protocol PBrowserStream;
+include protocol PPluginStream;
 include protocol PStreamNotify;
 include protocol PPluginSurface;
 
 include "mozilla/GfxMessageUtils.h";
 include "mozilla/layers/LayersMessageUtils.h";
 
 using NPError from "npapi.h";
 using struct mozilla::plugins::NPRemoteWindow from "mozilla/plugins/PluginMessageUtils.h";
@@ -62,16 +63,17 @@ union OptionalShmem {
 
 intr protocol PPluginInstance
 {
   manager PPluginModule;
 
   manages PPluginBackgroundDestroyer;
   manages PPluginScriptableObject;
   manages PBrowserStream;
+  manages PPluginStream;
   manages PStreamNotify;
   manages PPluginSurface;
 
 child:
   intr __delete__();
 
   // This is only used on Windows and, for windowed plugins, must be called
   // before the first call to NPP_SetWindow.
@@ -284,16 +286,22 @@ child:
 
   // Implements the legacy (synchronous) version of NPP_NewStream for when
   // async plugin init is preffed off.
   intr NPP_NewStream(PBrowserStream actor, nsCString mimeType, bool seekable)
     returns (NPError rv,
              uint16_t stype);
 
 parent:
+  /* NPN_NewStream */
+  intr PPluginStream(nsCString mimeType,
+                    nsCString target)
+    returns (NPError result);
+
+parent:
   intr PluginFocusChange(bool gotFocus);
 
 child:
   intr SetPluginFocus();
   intr UpdateWindow();
 
   async PPluginBackgroundDestroyer();
 };
new file mode 100644
--- /dev/null
+++ b/dom/plugins/ipc/PPluginStream.ipdl
@@ -0,0 +1,37 @@
+/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
+/* 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 protocol PPluginInstance;
+
+
+using mozilla::plugins::Buffer from "mozilla/plugins/PluginMessageUtils.h";
+using NPError from "npapi.h";
+using NPReason from "npapi.h";
+
+namespace mozilla {
+namespace plugins {
+
+/**
+ * PPluginStream represents an NPStream sent from the plugin to the browser.
+ */
+
+intr protocol PPluginStream
+{
+  manager PPluginInstance;
+
+parent:
+  intr NPN_Write(Buffer data) returns (int32_t written);
+
+both:
+  /**
+   * ~PPluginStream is for both NPN_DestroyStream and NPP_DestroyStream.
+   * @param artificial True when the stream is closed as a by-product of
+   *                        some other call (such as a failure in NPN_Write).
+   */
+  intr __delete__(NPReason reason, bool artificial);
+};
+
+} // namespace plugins
+} // namespace mozilla
--- a/dom/plugins/ipc/PluginInstanceChild.cpp
+++ b/dom/plugins/ipc/PluginInstanceChild.cpp
@@ -3,16 +3,17 @@
  * 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 "PluginBackgroundDestroyer.h"
 #include "PluginInstanceChild.h"
 #include "PluginModuleChild.h"
 #include "BrowserStreamChild.h"
+#include "PluginStreamChild.h"
 #include "StreamNotifyChild.h"
 #include "PluginProcessChild.h"
 #include "gfxASurface.h"
 #include "gfxPlatform.h"
 #include "gfx2DGlue.h"
 #include "nsNPAPIPluginInstance.h"
 #include "mozilla/gfx/2D.h"
 #ifdef MOZ_X11
@@ -2523,16 +2524,32 @@ PluginInstanceChild::AllocPBrowserStream
 bool
 PluginInstanceChild::DeallocPBrowserStreamChild(PBrowserStreamChild* stream)
 {
     AssertPluginThread();
     delete stream;
     return true;
 }
 
+PPluginStreamChild*
+PluginInstanceChild::AllocPPluginStreamChild(const nsCString& mimeType,
+                                             const nsCString& target,
+                                             NPError* result)
+{
+    MOZ_CRASH("not callable");
+    return nullptr;
+}
+
+bool
+PluginInstanceChild::DeallocPPluginStreamChild(PPluginStreamChild* stream)
+{
+    AssertPluginThread();
+    delete stream;
+    return true;
+}
 
 PStreamNotifyChild*
 PluginInstanceChild::AllocPStreamNotifyChild(const nsCString& url,
                                              const nsCString& target,
                                              const bool& post,
                                              const nsCString& buffer,
                                              const bool& file,
                                              NPError* result)
@@ -2638,16 +2655,38 @@ PluginInstanceChild::GetActorForNPObject
         NS_ERROR("Failed to send constructor message!");
         return nullptr;
     }
 
     actor->InitializeLocal(aObject);
     return actor;
 }
 
+NPError
+PluginInstanceChild::NPN_NewStream(NPMIMEType aMIMEType, const char* aWindow,
+                                   NPStream** aStream)
+{
+    AssertPluginThread();
+    AutoStackHelper guard(this);
+
+    auto* ps = new PluginStreamChild();
+
+    NPError result;
+    CallPPluginStreamConstructor(ps, nsDependentCString(aMIMEType),
+                                 NullableString(aWindow), &result);
+    if (NPERR_NO_ERROR != result) {
+        *aStream = nullptr;
+        PPluginStreamChild::Call__delete__(ps, NPERR_GENERIC_ERROR, true);
+        return result;
+    }
+
+    *aStream = &ps->mStream;
+    return NPERR_NO_ERROR;
+}
+
 void
 PluginInstanceChild::NPN_URLRedirectResponse(void* notifyData, NPBool allow)
 {
     if (!notifyData) {
         return;
     }
 
     InfallibleTArray<PStreamNotifyChild*> notifyStreams;
--- a/dom/plugins/ipc/PluginInstanceChild.h
+++ b/dom/plugins/ipc/PluginInstanceChild.h
@@ -170,16 +170,24 @@ protected:
                              const uint32_t& length,
                              const uint32_t& lastmodified,
                              PStreamNotifyChild* notifyData,
                              const nsCString& headers) override;
 
     virtual bool
     DeallocPBrowserStreamChild(PBrowserStreamChild* stream) override;
 
+    virtual PPluginStreamChild*
+    AllocPPluginStreamChild(const nsCString& mimeType,
+                            const nsCString& target,
+                            NPError* result) override;
+
+    virtual bool
+    DeallocPPluginStreamChild(PPluginStreamChild* stream) override;
+
     virtual PStreamNotifyChild*
     AllocPStreamNotifyChild(const nsCString& url, const nsCString& target,
                             const bool& post, const nsCString& buffer,
                             const bool& file,
                             NPError* result) override;
 
     virtual bool
     DeallocPStreamNotifyChild(PStreamNotifyChild* notifyData) override;
--- a/dom/plugins/ipc/PluginInstanceParent.cpp
+++ b/dom/plugins/ipc/PluginInstanceParent.cpp
@@ -9,16 +9,17 @@
 
 #include "mozilla/BasicEvents.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/Telemetry.h"
 #include "PluginInstanceParent.h"
 #include "BrowserStreamParent.h"
 #include "PluginBackgroundDestroyer.h"
 #include "PluginModuleParent.h"
+#include "PluginStreamParent.h"
 #include "StreamNotifyParent.h"
 #include "npfunctions.h"
 #include "nsAutoPtr.h"
 #include "gfxASurface.h"
 #include "gfxContext.h"
 #include "gfxPlatform.h"
 #include "gfxSharedImageSurface.h"
 #include "nsNetUtil.h"
@@ -235,16 +236,30 @@ PluginInstanceParent::AllocPBrowserStrea
 
 bool
 PluginInstanceParent::DeallocPBrowserStreamParent(PBrowserStreamParent* stream)
 {
     delete stream;
     return true;
 }
 
+PPluginStreamParent*
+PluginInstanceParent::AllocPPluginStreamParent(const nsCString& mimeType,
+                                               const nsCString& target,
+                                               NPError* result)
+{
+    return new PluginStreamParent(this, mimeType, target, result);
+}
+
+bool
+PluginInstanceParent::DeallocPPluginStreamParent(PPluginStreamParent* stream)
+{
+    delete stream;
+    return true;
+}
 
 mozilla::ipc::IPCResult
 PluginInstanceParent::AnswerNPN_GetValue_NPNVnetscapeWindow(NativeWindowHandle* value,
                                                             NPError* result)
 {
 #ifdef XP_WIN
     HWND id;
 #elif defined(MOZ_X11)
@@ -1770,23 +1785,34 @@ PluginInstanceParent::NPP_DestroyStream(
 
     AStream* s = static_cast<AStream*>(stream->pdata);
     if (!s) {
         // The stream has already been deleted by other means.
         // With async plugin init this could happen if async NPP_NewStream
         // returns an error code.
         return NPERR_NO_ERROR;
     }
-    MOZ_ASSERT(s->IsBrowserStream());
-    BrowserStreamParent* sp =
-        static_cast<BrowserStreamParent*>(s);
-    if (sp->mNPP != this)
-        MOZ_CRASH("Mismatched plugin data");
-    sp->NPP_DestroyStream(reason);
-    return NPERR_NO_ERROR;
+    if (s->IsBrowserStream()) {
+        BrowserStreamParent* sp =
+            static_cast<BrowserStreamParent*>(s);
+        if (sp->mNPP != this)
+            MOZ_CRASH("Mismatched plugin data");
+
+        sp->NPP_DestroyStream(reason);
+        return NPERR_NO_ERROR;
+    }
+    else {
+        PluginStreamParent* sp =
+            static_cast<PluginStreamParent*>(s);
+        if (sp->mInstance != this)
+            MOZ_CRASH("Mismatched plugin data");
+
+        return PPluginStreamParent::Call__delete__(sp, reason, false) ?
+            NPERR_NO_ERROR : NPERR_GENERIC_ERROR;
+    }
 }
 
 void
 PluginInstanceParent::NPP_Print(NPPrint* platformPrint)
 {
     // TODO: implement me
     NS_ERROR("Not implemented");
 }
--- a/dom/plugins/ipc/PluginInstanceParent.h
+++ b/dom/plugins/ipc/PluginInstanceParent.h
@@ -40,16 +40,17 @@ namespace plugins {
 class PBrowserStreamParent;
 class PluginModuleParent;
 class D3D11SurfaceHolder;
 
 class PluginInstanceParent : public PPluginInstanceParent
 {
     friend class PluginModuleParent;
     friend class BrowserStreamParent;
+    friend class PluginStreamParent;
     friend class StreamNotifyParent;
 
 #if defined(XP_WIN)
 public:
     /**
      * Helper method for looking up instances based on a supplied id.
      */
     static PluginInstanceParent*
@@ -84,16 +85,23 @@ public:
     AllocPBrowserStreamParent(const nsCString& url,
                               const uint32_t& length,
                               const uint32_t& lastmodified,
                               PStreamNotifyParent* notifyData,
                               const nsCString& headers) override;
     virtual bool
     DeallocPBrowserStreamParent(PBrowserStreamParent* stream) override;
 
+    virtual PPluginStreamParent*
+    AllocPPluginStreamParent(const nsCString& mimeType,
+                             const nsCString& target,
+                             NPError* result) override;
+    virtual bool
+    DeallocPPluginStreamParent(PPluginStreamParent* stream) override;
+
     virtual mozilla::ipc::IPCResult
     AnswerNPN_GetValue_NPNVnetscapeWindow(NativeWindowHandle* value,
                                           NPError* result) override;
     virtual mozilla::ipc::IPCResult
     AnswerNPN_GetValue_NPNVWindowNPObject(
                                        PPluginScriptableObjectParent** value,
                                        NPError* result) override;
     virtual mozilla::ipc::IPCResult
--- a/dom/plugins/ipc/PluginModuleChild.cpp
+++ b/dom/plugins/ipc/PluginModuleChild.cpp
@@ -26,16 +26,17 @@
 #ifdef MOZ_X11
 # include "nsX11ErrorHandler.h"
 # include "mozilla/X11Util.h"
 #endif
 #include "mozilla/ipc/ProcessChild.h"
 #include "mozilla/plugins/PluginInstanceChild.h"
 #include "mozilla/plugins/StreamNotifyChild.h"
 #include "mozilla/plugins/BrowserStreamChild.h"
+#include "mozilla/plugins/PluginStreamChild.h"
 #include "mozilla/Sprintf.h"
 #include "mozilla/Unused.h"
 
 #include "nsNPAPIPlugin.h"
 
 #ifdef XP_WIN
 #include "nsWindowsDllInterceptor.h"
 #include "mozilla/widget/AudioSession.h"
@@ -835,16 +836,25 @@ static NPError
 static NPError
 _posturlnotify(NPP aNPP, const char* relativeURL, const char *target,
                uint32_t len, const char *buf, NPBool file, void* notifyData);
 
 static NPError
 _posturl(NPP aNPP, const char* relativeURL, const char *target, uint32_t len,
          const char *buf, NPBool file);
 
+static NPError
+_newstream(NPP aNPP, NPMIMEType type, const char* window, NPStream** pstream);
+
+static int32_t
+_write(NPP aNPP, NPStream *pstream, int32_t len, void *buffer);
+
+static NPError
+_destroystream(NPP aNPP, NPStream *pstream, NPError reason);
+
 static void
 _status(NPP aNPP, const char *message);
 
 static void
 _memfree (void *ptr);
 
 static uint32_t
 _memflush(uint32_t size);
@@ -969,19 +979,19 @@ static void
 } /* namespace mozilla */
 
 const NPNetscapeFuncs PluginModuleChild::sBrowserFuncs = {
     sizeof(sBrowserFuncs),
     (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR,
     mozilla::plugins::child::_geturl,
     mozilla::plugins::child::_posturl,
     mozilla::plugins::child::_requestread,
-    nullptr,
-    nullptr,
-    nullptr,
+    mozilla::plugins::child::_newstream,
+    mozilla::plugins::child::_write,
+    mozilla::plugins::child::_destroystream,
     mozilla::plugins::child::_status,
     mozilla::plugins::child::_useragent,
     mozilla::plugins::child::_memalloc,
     mozilla::plugins::child::_memfree,
     mozilla::plugins::child::_memflush,
     mozilla::plugins::child::_reloadplugins,
     mozilla::plugins::child::_getjavaenv,
     mozilla::plugins::child::_getjavapeer,
@@ -1222,16 +1232,65 @@ NPError
     // FIXME what should happen when |aBuffer| is null?
     InstCast(aNPP)->CallNPN_PostURL(NullableString(aRelativeURL),
                                     NullableString(aTarget),
                                     nsDependentCString(aBuffer, aLength),
                                     aIsFile, &err);
     return err;
 }
 
+NPError
+_newstream(NPP aNPP,
+           NPMIMEType aMIMEType,
+           const char* aWindow,
+           NPStream** aStream)
+{
+    PLUGIN_LOG_DEBUG_FUNCTION;
+    ENSURE_PLUGIN_THREAD(NPERR_INVALID_PARAM);
+    return InstCast(aNPP)->NPN_NewStream(aMIMEType, aWindow, aStream);
+}
+
+int32_t
+_write(NPP aNPP,
+       NPStream* aStream,
+       int32_t aLength,
+       void* aBuffer)
+{
+    PLUGIN_LOG_DEBUG_FUNCTION;
+    ENSURE_PLUGIN_THREAD(0);
+
+    PluginStreamChild* ps =
+        static_cast<PluginStreamChild*>(static_cast<AStream*>(aStream->ndata));
+    ps->EnsureCorrectInstance(InstCast(aNPP));
+    ps->EnsureCorrectStream(aStream);
+    return ps->NPN_Write(aLength, aBuffer);
+}
+
+NPError
+_destroystream(NPP aNPP,
+               NPStream* aStream,
+               NPError aReason)
+{
+    PLUGIN_LOG_DEBUG_FUNCTION;
+    ENSURE_PLUGIN_THREAD(NPERR_INVALID_PARAM);
+
+    PluginInstanceChild* p = InstCast(aNPP);
+    AStream* s = static_cast<AStream*>(aStream->ndata);
+    if (s->IsBrowserStream()) {
+        BrowserStreamChild* bs = static_cast<BrowserStreamChild*>(s);
+        bs->EnsureCorrectInstance(p);
+        bs->NPN_DestroyStream(aReason);
+    }
+    else {
+        PluginStreamChild* ps = static_cast<PluginStreamChild*>(s);
+        ps->EnsureCorrectInstance(p);
+        PPluginStreamChild::Call__delete__(ps, aReason, false);
+    }
+    return NPERR_NO_ERROR;
+}
 
 void
 _status(NPP aNPP,
         const char* aMessage)
 {
     // NPN_Status is no longer supported.
 }
 
--- a/dom/plugins/ipc/PluginModuleParent.cpp
+++ b/dom/plugins/ipc/PluginModuleParent.cpp
@@ -944,16 +944,21 @@ PluginModuleChromeParent::GetManagingIns
                 static_cast<PPluginScriptableObjectParent*>(aProtocol);
             return static_cast<PluginInstanceParent*>(actor->Manager());
         }
         case PBrowserStreamMsgStart: {
             PBrowserStreamParent* actor =
                 static_cast<PBrowserStreamParent*>(aProtocol);
             return static_cast<PluginInstanceParent*>(actor->Manager());
         }
+        case PPluginStreamMsgStart: {
+            PPluginStreamParent* actor =
+                static_cast<PPluginStreamParent*>(aProtocol);
+            return static_cast<PluginInstanceParent*>(actor->Manager());
+        }
         case PStreamNotifyMsgStart: {
             PStreamNotifyParent* actor =
                 static_cast<PStreamNotifyParent*>(aProtocol);
             return static_cast<PluginInstanceParent*>(actor->Manager());
         }
 #ifdef XP_WIN
         case PPluginSurfaceMsgStart: {
             PPluginSurfaceParent* actor =
new file mode 100644
--- /dev/null
+++ b/dom/plugins/ipc/PluginStreamChild.cpp
@@ -0,0 +1,64 @@
+/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
+/* 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 "PluginStreamChild.h"
+#include "mozilla/plugins/PluginInstanceChild.h"
+
+namespace mozilla {
+namespace plugins {
+
+PluginStreamChild::PluginStreamChild()
+  : mClosed(false)
+{
+  memset(&mStream, 0, sizeof(mStream));
+  mStream.ndata = static_cast<AStream*>(this);
+}
+
+mozilla::ipc::IPCResult
+PluginStreamChild::Answer__delete__(const NPReason& reason,
+                                    const bool& artificial)
+{
+  AssertPluginThread();
+  if (!artificial)
+    NPP_DestroyStream(reason);
+  return IPC_OK();
+}
+
+int32_t
+PluginStreamChild::NPN_Write(int32_t length, void* buffer)
+{
+  AssertPluginThread();
+
+  int32_t written = 0;
+  CallNPN_Write(nsCString(static_cast<char*>(buffer), length),
+                &written);
+  if (written < 0)
+    PPluginStreamChild::Call__delete__(this, NPERR_GENERIC_ERROR, true);
+  // careful after here! |this| just got deleted
+
+  return written;
+}
+
+void
+PluginStreamChild::NPP_DestroyStream(NPError reason)
+{
+  AssertPluginThread();
+
+  if (mClosed)
+    return;
+
+  mClosed = true;
+  Instance()->mPluginIface->destroystream(
+    &Instance()->mData, &mStream, reason);
+}
+
+PluginInstanceChild*
+PluginStreamChild::Instance()
+{
+  return static_cast<PluginInstanceChild*>(Manager());
+}
+
+} // namespace plugins
+} // namespace mozilla
new file mode 100644
--- /dev/null
+++ b/dom/plugins/ipc/PluginStreamChild.h
@@ -0,0 +1,55 @@
+/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_plugins_PluginStreamChild_h
+#define mozilla_plugins_PluginStreamChild_h
+
+#include "mozilla/plugins/PPluginStreamChild.h"
+#include "mozilla/plugins/AStream.h"
+
+namespace mozilla {
+namespace plugins {
+
+class PluginInstanceChild;
+
+class PluginStreamChild : public PPluginStreamChild, public AStream
+{
+  friend class PluginInstanceChild;
+
+public:
+  PluginStreamChild();
+  virtual ~PluginStreamChild() { }
+
+  virtual bool IsBrowserStream() override { return false; }
+
+  virtual mozilla::ipc::IPCResult Answer__delete__(const NPReason& reason,
+                                                   const bool& artificial) override;
+
+  int32_t NPN_Write(int32_t length, void* buffer);
+  void NPP_DestroyStream(NPError reason);
+
+  void EnsureCorrectInstance(PluginInstanceChild* i)
+  {
+    if (i != Instance())
+      MOZ_CRASH("Incorrect stream instance");
+  }
+  void EnsureCorrectStream(NPStream* s)
+  {
+    if (s != &mStream)
+      MOZ_CRASH("Incorrect stream data");
+  }
+
+private:
+  PluginInstanceChild* Instance();
+
+  NPStream mStream;
+  bool mClosed;
+};
+
+
+} // namespace plugins
+} // namespace mozilla
+
+#endif
new file mode 100644
--- /dev/null
+++ b/dom/plugins/ipc/PluginStreamParent.cpp
@@ -0,0 +1,72 @@
+/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
+/* 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 "PluginStreamParent.h"
+#include "PluginInstanceParent.h"
+
+namespace mozilla {
+namespace plugins {
+
+PluginStreamParent::PluginStreamParent(PluginInstanceParent* npp,
+                                       const nsCString& mimeType,
+                                       const nsCString& target,
+                                       NPError* result)
+  : mInstance(npp)
+  , mClosed(false)
+{
+  *result = mInstance->mNPNIface->newstream(mInstance->mNPP,
+                                            const_cast<char*>(mimeType.get()),
+                                            NullableStringGet(target),
+                                            &mStream);
+  if (*result == NPERR_NO_ERROR)
+    mStream->pdata = static_cast<AStream*>(this);
+  else
+    mStream = nullptr;
+}
+
+void
+PluginStreamParent::ActorDestroy(ActorDestroyReason aWhy)
+{
+  // Implement me! Bug 1005166
+}
+
+mozilla::ipc::IPCResult
+PluginStreamParent::AnswerNPN_Write(const Buffer& data, int32_t* written)
+{
+  if (mClosed) {
+    *written = -1;
+    return IPC_OK();
+  }
+
+  *written = mInstance->mNPNIface->write(mInstance->mNPP, mStream,
+                                         data.Length(),
+                                         const_cast<char*>(data.get()));
+  if (*written < 0)
+    mClosed = true;
+
+  return IPC_OK();
+}
+
+mozilla::ipc::IPCResult
+PluginStreamParent::Answer__delete__(const NPError& reason,
+                                     const bool& artificial)
+{
+  if (!artificial)
+    this->NPN_DestroyStream(reason);
+  return IPC_OK();
+}
+
+void
+PluginStreamParent::NPN_DestroyStream(NPReason reason)
+{
+  if (mClosed)
+    return;
+
+  mInstance->mNPNIface->destroystream(mInstance->mNPP, mStream, reason);
+  mClosed = true;
+}
+
+} // namespace plugins
+} // namespace mozilla
new file mode 100644
--- /dev/null
+++ b/dom/plugins/ipc/PluginStreamParent.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_plugins_PluginStreamParent_h
+#define mozilla_plugins_PluginStreamParent_h
+
+#include "mozilla/plugins/PPluginStreamParent.h"
+#include "mozilla/plugins/AStream.h"
+
+namespace mozilla {
+namespace plugins {
+
+class PluginInstanceParent;
+
+class PluginStreamParent : public PPluginStreamParent, public AStream
+{
+  friend class PluginModuleParent;
+  friend class PluginInstanceParent;
+
+public:
+  PluginStreamParent(PluginInstanceParent* npp, const nsCString& mimeType,
+                     const nsCString& target, NPError* result);
+  virtual ~PluginStreamParent() { }
+
+  virtual bool IsBrowserStream() override { return false; }
+
+  virtual void ActorDestroy(ActorDestroyReason aWhy) override;
+
+  virtual mozilla::ipc::IPCResult AnswerNPN_Write(const Buffer& data, int32_t* written) override;
+
+  virtual mozilla::ipc::IPCResult Answer__delete__(const NPError& reason, const bool& artificial) override;
+
+private:
+  void NPN_DestroyStream(NPReason reason);
+
+  PluginInstanceParent* mInstance;
+  NPStream* mStream;
+  bool mClosed;
+};
+
+} // namespace plugins
+} // namespace mozilla
+
+#endif
--- a/dom/plugins/ipc/moz.build
+++ b/dom/plugins/ipc/moz.build
@@ -29,16 +29,18 @@ EXPORTS.mozilla.plugins += [
     'PluginModuleParent.h',
     'PluginProcessChild.h',
     'PluginProcessParent.h',
     'PluginQuirks.h',
     'PluginScriptableObjectChild.h',
     'PluginScriptableObjectParent.h',
     'PluginScriptableObjectUtils-inl.h',
     'PluginScriptableObjectUtils.h',
+    'PluginStreamChild.h',
+    'PluginStreamParent.h',
     'PluginUtilsOSX.h',
     'StreamNotifyChild.h',
     'StreamNotifyParent.h',
 ]
 
 if CONFIG['OS_ARCH'] == 'WINNT':
     EXPORTS.mozilla.plugins += [
         'PluginSurfaceParent.h',
@@ -70,16 +72,18 @@ UNIFIED_SOURCES += [
     'PluginInstanceParent.cpp',
     'PluginMessageUtils.cpp',
     'PluginModuleParent.cpp',
     'PluginProcessChild.cpp',
     'PluginProcessParent.cpp',
     'PluginQuirks.cpp',
     'PluginScriptableObjectChild.cpp',
     'PluginScriptableObjectParent.cpp',
+    'PluginStreamChild.cpp',
+    'PluginStreamParent.cpp',
 ]
 
 SOURCES += [
     'PluginInstanceChild.cpp', # 'PluginThreadCallback' : ambiguous symbol
     'PluginModuleChild.cpp',   # Redefinition of mozilla::WindowsDllInterceptor sUser32Intercept
 ]
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
@@ -104,16 +108,17 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
 
 IPDL_SOURCES += [
     'PBrowserStream.ipdl',
     'PluginTypes.ipdlh',
     'PPluginBackgroundDestroyer.ipdl',
     'PPluginInstance.ipdl',
     'PPluginModule.ipdl',
     'PPluginScriptableObject.ipdl',
+    'PPluginStream.ipdl',
     'PPluginSurface.ipdl',
     'PStreamNotify.ipdl',
 ]
 
 include('/ipc/chromium/chromium-config.mozbuild')
 
 FINAL_LIBRARY = 'xul'
 LOCAL_INCLUDES += [
--- a/dom/plugins/test/testplugin/nptest.cpp
+++ b/dom/plugins/test/testplugin/nptest.cpp
@@ -473,43 +473,78 @@ static void sendBufferToFrame(NPP instan
   }
   else if (bufsize > 0) {
     outbuf.append(buf);
   }
   else {
     outbuf.append("Error: no data in buffer");
   }
 
-  // Convert CRLF to LF, and escape most other non-alphanumeric chars.
-  for (size_t i = 0; i < outbuf.length(); i++) {
-    if (outbuf[i] == '\n') {
-      outbuf.replace(i, 1, "%0a");
-      i += 2;
+  if (instanceData->npnNewStream &&
+      instanceData->err.str().length() == 0) {
+    char typeHTML[] = "text/html";
+    NPStream* stream;
+    printf("calling NPN_NewStream...");
+    NPError err = NPN_NewStream(instance, typeHTML,
+        instanceData->frame.c_str(), &stream);
+    printf("return value %d\n", err);
+    if (err != NPERR_NO_ERROR) {
+      instanceData->err << "NPN_NewStream returned " << err;
+      return;
     }
-    else if (outbuf[i] == '\r') {
-      outbuf.replace(i, 1, "");
-      i -= 1;
+
+    int32_t bytesToWrite = outbuf.length();
+    int32_t bytesWritten = 0;
+    while ((bytesToWrite - bytesWritten) > 0) {
+      int32_t numBytes = (bytesToWrite - bytesWritten) <
+          instanceData->streamChunkSize ?
+          bytesToWrite - bytesWritten : instanceData->streamChunkSize;
+      int32_t written = NPN_Write(instance, stream,
+          numBytes, (void*)(outbuf.c_str() + bytesWritten));
+      if (written <= 0) {
+        instanceData->err << "NPN_Write returned " << written;
+        break;
+      }
+      bytesWritten += numBytes;
+      printf("%d bytes written, total %d\n", written, bytesWritten);
     }
-    else {
-      int ascii = outbuf[i];
-      if (!((ascii >= ',' && ascii <= ';') ||
-            (ascii >= 'A' && ascii <= 'Z') ||
-            (ascii >= 'a' && ascii <= 'z'))) {
-        char hex[10];
-        sprintf(hex, "%%%x", ascii);
-        outbuf.replace(i, 1, hex);
+    err = NPN_DestroyStream(instance, stream, NPRES_DONE);
+    if (err != NPERR_NO_ERROR) {
+      instanceData->err << "NPN_DestroyStream returned " << err;
+    }
+  }
+  else {
+    // Convert CRLF to LF, and escape most other non-alphanumeric chars.
+    for (size_t i = 0; i < outbuf.length(); i++) {
+      if (outbuf[i] == '\n') {
+        outbuf.replace(i, 1, "%0a");
         i += 2;
       }
+      else if (outbuf[i] == '\r') {
+        outbuf.replace(i, 1, "");
+        i -= 1;
+      }
+      else {
+        int ascii = outbuf[i];
+        if (!((ascii >= ',' && ascii <= ';') ||
+              (ascii >= 'A' && ascii <= 'Z') ||
+              (ascii >= 'a' && ascii <= 'z'))) {
+          char hex[10];
+          sprintf(hex, "%%%x", ascii);
+          outbuf.replace(i, 1, hex);
+          i += 2;
+        }
+      }
     }
-  }
-
-  NPError err = NPN_GetURL(instance, outbuf.c_str(),
-                           instanceData->frame.c_str());
-  if (err != NPERR_NO_ERROR) {
-    instanceData->err << "NPN_GetURL returned " << err;
+
+    NPError err = NPN_GetURL(instance, outbuf.c_str(),
+                             instanceData->frame.c_str());
+    if (err != NPERR_NO_ERROR) {
+      instanceData->err << "NPN_GetURL returned " << err;
+    }
   }
 }
 
 static void XPSleep(unsigned int seconds)
 {
 #ifdef XP_WIN
   Sleep(1000 * seconds);
 #else
@@ -812,16 +847,17 @@ NPP_New(NPMIMEType pluginType, NPP insta
   memset(&instanceData->window, 0, sizeof(instanceData->window));
   instanceData->crashOnDestroy = false;
   instanceData->cleanupWidget = true; // only used by nptest_gtk
   instanceData->topLevelWindowActivationState = ACTIVATION_STATE_UNKNOWN;
   instanceData->topLevelWindowActivationEventCount = 0;
   instanceData->focusState = ACTIVATION_STATE_UNKNOWN;
   instanceData->focusEventCount = 0;
   instanceData->eventModel = 0;
+  instanceData->closeStream = false;
   instanceData->wantsAllStreams = false;
   instanceData->mouseUpEventCount = 0;
   instanceData->bugMode = -1;
   instanceData->asyncDrawing = AD_NONE;
   instanceData->frontBuffer = nullptr;
   instanceData->backBuffer = nullptr;
   instanceData->placeholderWnd = nullptr;
   instanceData->cssZoomFactor = 1.0;
@@ -943,16 +979,19 @@ NPP_New(NPMIMEType pluginType, NPP insta
     // "cleanupwidget" is only used with nptest_gtk, defaulting to true.  It
     // indicates whether the plugin should destroy its window in response to
     // NPP_Destroy (or let the platform destroy the widget when the parent
     // window gets destroyed).
     if (strcmp(argn[i], "cleanupwidget") == 0 &&
         strcmp(argv[i], "false") == 0) {
       instanceData->cleanupWidget = false;
     }
+    if (!strcmp(argn[i], "closestream")) {
+      instanceData->closeStream = true;
+    }
     if (strcmp(argn[i], "bugmode") == 0) {
       instanceData->bugMode = atoi(argv[i]);
     }
     // Try to emulate java's codebase handling: Use the last seen codebase
     // value, regardless of whether it is in attributes or params.
     if (strcasecmp(argn[i], "codebase") == 0) {
       instanceData->javaCodebase = argv[i];
     }
@@ -1374,17 +1413,25 @@ NPP_Write(NPP instance, NPStream* stream
 
   if (nd && nd != &kNotifyData) {
     uint32_t newsize = nd->size + len;
     nd->data = (char*) realloc(nd->data, newsize);
     memcpy(nd->data + nd->size, buffer, len);
     nd->size = newsize;
     return len;
   }
-  if (instanceData->streamMode == NP_SEEK &&
+
+  if (instanceData->closeStream) {
+    instanceData->closeStream = false;
+    if (instanceData->testrange != nullptr) {
+      NPN_RequestRead(stream, instanceData->testrange);
+    }
+    NPN_DestroyStream(instance, stream, NPRES_USER_BREAK);
+  }
+  else if (instanceData->streamMode == NP_SEEK &&
       stream->end != 0 &&
       stream->end == ((uint32_t)instanceData->streamBufSize + len)) {
     // If the complete stream has been written, and we're doing a seek test,
     // then call NPN_RequestRead.
     // prevent recursion
     instanceData->streamMode = NP_NORMAL;
 
     if (instanceData->testrange != nullptr) {
@@ -1401,23 +1448,31 @@ NPP_Write(NPP instance, NPStream* stream
     if (memcmp(buffer, streamBuf + offset, len)) {
       instanceData->err <<
           "Error: data written from NPN_RequestRead doesn't match";
     }
     else {
       printf("data matches!\n");
     }
     TestRange* range = instanceData->testrange;
+    bool stillwaiting = false;
     while(range != nullptr) {
       if (offset == range->offset &&
         (uint32_t)len == range->length) {
         range->waiting = false;
       }
+      if (range->waiting) stillwaiting = true;
       range = reinterpret_cast<TestRange*>(range->next);
     }
+    if (!stillwaiting) {
+      NPError err = NPN_DestroyStream(instance, stream, NPRES_DONE);
+      if (err != NPERR_NO_ERROR) {
+        instanceData->err << "Error: NPN_DestroyStream returned " << err;
+      }
+    }
   }
   else {
     if (instanceData->streamBufSize == 0) {
       instanceData->streamBuf = malloc(len + 1);
       streamBuf = reinterpret_cast<char *>(instanceData->streamBuf);
     }
     else {
       instanceData->streamBuf =
@@ -1849,17 +1904,39 @@ NPN_PostURLNotify(NPP instance, const ch
 NPError
 NPN_PostURL(NPP instance, const char *url,
                     const char *target, uint32_t len,
                     const char *buf, NPBool file)
 {
   return sBrowserFuncs->posturl(instance, url, target, len, buf, file);
 }
 
-
+NPError
+NPN_DestroyStream(NPP instance, NPStream* stream, NPError reason)
+{
+  return sBrowserFuncs->destroystream(instance, stream, reason);
+}
+
+NPError
+NPN_NewStream(NPP instance,
+              NPMIMEType  type,
+              const char* target,
+              NPStream**  stream)
+{
+  return sBrowserFuncs->newstream(instance, type, target, stream);
+}
+
+int32_t
+NPN_Write(NPP instance,
+          NPStream* stream,
+          int32_t len,
+          void* buf)
+{
+  return sBrowserFuncs->write(instance, stream, len, buf);
+}
 
 bool
 NPN_Enumerate(NPP instance,
               NPObject *npobj,
               NPIdentifier **identifiers,
               uint32_t *identifierCount)
 {
   return sBrowserFuncs->enumerate(instance, npobj, identifiers,
--- a/gfx/vr/VRDisplayHost.cpp
+++ b/gfx/vr/VRDisplayHost.cpp
@@ -16,16 +16,17 @@
 
 #endif
 
 using namespace mozilla;
 using namespace mozilla::gfx;
 using namespace mozilla::layers;
 
 VRDisplayHost::VRDisplayHost(VRDeviceType aType)
+ : mFrameStarted(false)
 {
   MOZ_COUNT_CTOR(VRDisplayHost);
   mDisplayInfo.mType = aType;
   mDisplayInfo.mDisplayID = VRSystemManager::AllocateDisplayID();
   mDisplayInfo.mPresentingGroups = 0;
   mDisplayInfo.mGroupMask = kVRGroupContent;
   mDisplayInfo.mFrameId = 0;
 }
@@ -79,16 +80,17 @@ VRDisplayHost::RemoveLayer(VRLayerParent
 }
 
 void
 VRDisplayHost::StartFrame()
 {
   mLastFrameStart = TimeStamp::Now();
   ++mDisplayInfo.mFrameId;
   mDisplayInfo.mLastSensorState[mDisplayInfo.mFrameId % kVRMaxLatencyFrames] = GetSensorState();
+  mFrameStarted = true;
 }
 
 void
 VRDisplayHost::NotifyVSync()
 {
   /**
    * We will trigger a new frame immediately after a successful frame texture
    * submission.  If content fails to call VRDisplay.submitFrame after
@@ -157,16 +159,22 @@ VRDisplayHost::SubmitFrame(VRLayerParent
                            const gfx::Rect& aLeftEyeRect,
                            const gfx::Rect& aRightEyeRect)
 {
   if ((mDisplayInfo.mGroupMask & aLayer->GetGroup()) == 0) {
     // Suppress layers hidden by the group mask
     return;
   }
 
+  // Ensure that we only accept the first SubmitFrame call per RAF cycle.
+  if (!mFrameStarted) {
+    return;
+  }
+  mFrameStarted = false;
+
   TextureHost* th = TextureHost::AsTextureHost(aTexture);
   // WebVR doesn't use the compositor to compose the frame, so use
   // AutoLockTextureHostWithoutCompositor here.
   AutoLockTextureHostWithoutCompositor autoLock(th);
   if (autoLock.Failed()) {
     NS_WARNING("Failed to lock the VR layer texture");
     return;
   }
--- a/gfx/vr/VRDisplayHost.h
+++ b/gfx/vr/VRDisplayHost.h
@@ -74,16 +74,17 @@ protected:
   // VRLayerParent destructor
 
 protected:
   virtual VRHMDSensorState GetSensorState() = 0;
 
 private:
   VRDisplayInfo mLastUpdateDisplayInfo;
   TimeStamp mLastFrameStart;
+  bool mFrameStarted;
 };
 
 class VRControllerHost {
 public:
   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(VRControllerHost)
 
   const VRControllerInfo& GetControllerInfo() const;
   void SetButtonPressed(uint64_t aBit);
--- a/gfx/vr/ipc/VRLayerChild.cpp
+++ b/gfx/vr/ipc/VRLayerChild.cpp
@@ -10,23 +10,23 @@
 #include "SharedSurfaceGL.h"              // for SharedSurface
 #include "mozilla/layers/LayersMessages.h" // for TimedTexture
 #include "nsICanvasRenderingContextInternal.h"
 #include "mozilla/dom/HTMLCanvasElement.h"
 
 namespace mozilla {
 namespace gfx {
 
-VRLayerChild::VRLayerChild(uint32_t aVRDisplayID, VRManagerChild* aVRManagerChild)
-  : mVRDisplayID(aVRDisplayID)
-  , mCanvasElement(nullptr)
+VRLayerChild::VRLayerChild()
+  : mCanvasElement(nullptr)
   , mShSurfClient(nullptr)
   , mFront(nullptr)
-  , mIPCOpen(true)
+  , mIPCOpen(false)
 {
+  MOZ_COUNT_CTOR(VRLayerChild);
 }
 
 VRLayerChild::~VRLayerChild()
 {
   if (mCanvasElement) {
     mCanvasElement->StopVRPresentation();
   }
 
@@ -89,10 +89,39 @@ VRLayerChild::ClearSurfaces()
 }
 
 void
 VRLayerChild::ActorDestroy(ActorDestroyReason aWhy)
 {
   mIPCOpen = false;
 }
 
+// static
+PVRLayerChild*
+VRLayerChild::CreateIPDLActor()
+{
+  VRLayerChild* c = new VRLayerChild();
+  c->AddIPDLReference();
+  return c;
+}
+
+// static
+bool
+VRLayerChild::DestroyIPDLActor(PVRLayerChild* actor)
+{
+  static_cast<VRLayerChild*>(actor)->ReleaseIPDLReference();
+  return true;
+}
+
+void
+VRLayerChild::AddIPDLReference() {
+  MOZ_ASSERT(mIPCOpen == false);
+  mIPCOpen = true;
+  AddRef();
+}
+void
+VRLayerChild::ReleaseIPDLReference() {
+  MOZ_ASSERT(mIPCOpen == false);
+  Release();
+}
+
 } // namespace gfx
 } // namespace mozilla
--- a/gfx/vr/ipc/VRLayerChild.h
+++ b/gfx/vr/ipc/VRLayerChild.h
@@ -27,30 +27,38 @@ namespace gl {
 class SurfaceFactory;
 }
 namespace gfx {
 
 class VRLayerChild : public PVRLayerChild {
   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(VRLayerChild)
 
 public:
-  VRLayerChild(uint32_t aVRDisplayID, VRManagerChild* aVRManagerChild);
+  static PVRLayerChild* CreateIPDLActor();
+  static bool DestroyIPDLActor(PVRLayerChild* actor);
+
   void Initialize(dom::HTMLCanvasElement* aCanvasElement);
   void SubmitFrame();
   bool IsIPCOpen();
 
-protected:
+private:
+  VRLayerChild();
   virtual ~VRLayerChild();
   void ClearSurfaces();
   virtual void ActorDestroy(ActorDestroyReason aWhy) override;
 
-  uint32_t mVRDisplayID;
-
   RefPtr<dom::HTMLCanvasElement> mCanvasElement;
   RefPtr<layers::SharedSurfaceTextureClient> mShSurfClient;
   RefPtr<layers::TextureClient> mFront;
   bool mIPCOpen;
+
+  // AddIPDLReference and ReleaseIPDLReference are only to be called by CreateIPDLActor
+  // and DestroyIPDLActor, respectively. We intentionally make them private to prevent misuse.
+  // The purpose of these methods is to be aware of when the IPC system around this
+  // actor goes down: mIPCOpen is then set to false.
+  void AddIPDLReference();
+  void ReleaseIPDLReference();
 };
 
 } // namespace gfx
 } // namespace mozilla
 
 #endif
--- a/gfx/vr/ipc/VRManagerChild.cpp
+++ b/gfx/vr/ipc/VRManagerChild.cpp
@@ -187,25 +187,23 @@ VRManagerChild::AllocPVRLayerChild(const
                                    const float& aLeftEyeWidth,
                                    const float& aLeftEyeHeight,
                                    const float& aRightEyeX,
                                    const float& aRightEyeY,
                                    const float& aRightEyeWidth,
                                    const float& aRightEyeHeight,
                                    const uint32_t& aGroup)
 {
-  RefPtr<VRLayerChild> layer = new VRLayerChild(aDisplayID, this);
-  return layer.forget().take();
+  return VRLayerChild::CreateIPDLActor();
 }
 
 bool
 VRManagerChild::DeallocPVRLayerChild(PVRLayerChild* actor)
 {
-  delete actor;
-  return true;
+  return VRLayerChild::DestroyIPDLActor(actor);
 }
 
 void
 VRManagerChild::UpdateDisplayInfo(nsTArray<VRDisplayInfo>& aDisplayUpdates)
 {
   nsTArray<uint32_t> disconnectedDisplays;
   nsTArray<uint32_t> connectedDisplays;
 
--- a/ipc/ipdl/sync-messages.ini
+++ b/ipc/ipdl/sync-messages.ini
@@ -742,16 +742,18 @@ description =
 [PPluginInstance::NPN_SetValueForURL]
 description =
 [PPluginInstance::NPN_ConvertPoint]
 description =
 [PPluginInstance::GetCompositionString]
 description =
 [PPluginInstance::NPP_NewStream]
 description =
+[PPluginInstance::PPluginStream]
+description =
 [PPluginInstance::PluginFocusChange]
 description =
 [PPluginInstance::SetPluginFocus]
 description =
 [PPluginInstance::UpdateWindow]
 description =
 [PPluginModule::ModuleSupportsAsyncRender]
 description =
--- a/layout/base/ServoRestyleManager.cpp
+++ b/layout/base/ServoRestyleManager.cpp
@@ -43,17 +43,17 @@ FirstContinuationOrPartOfIBSplit(const n
   }
 
   return nsLayoutUtils::FirstContinuationOrIBSplitSibling(aFrame);
 }
 
 static const nsIFrame*
 ExpectedOwnerForChild(const nsIFrame& aFrame)
 {
-  if (IsAnonBox(aFrame)) {
+  if (IsAnonBox(aFrame) && !aFrame.IsTextFrame()) {
     return aFrame.GetParent()->IsViewportFrame() ? nullptr : aFrame.GetParent();
   }
 
   if (aFrame.IsBulletFrame()) {
     return aFrame.GetParent();
   }
 
   const nsIFrame* parent = FirstContinuationOrPartOfIBSplit(aFrame.GetParent());
new file mode 100644
--- /dev/null
+++ b/layout/base/crashtests/1381323.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<table>
+  <tr>
+    <td><div style="display: contents">foo</div></td>
+  </tr>
+</table>
+<script>
+  document.body.offsetTop;
+  document.querySelector('div').style.color = "green";
+</script>
--- a/layout/base/crashtests/crashtests.list
+++ b/layout/base/crashtests/crashtests.list
@@ -487,8 +487,9 @@ load 1299736-1.html
 load 1308793.svg
 load 1308848-1.html
 load 1308848-2.html
 load 1338772-1.html
 load 1343937.html
 asserts(0-1) load 1343606.html # bug 1343948
 load 1352380.html
 load 1362423-1.html
+load 1381323.html
--- a/layout/painting/FrameLayerBuilder.h
+++ b/layout/painting/FrameLayerBuilder.h
@@ -202,48 +202,45 @@ struct ContainerLayerParameters {
     , mYScale(1)
     , mLayerContentsVisibleRect(nullptr)
     , mBackgroundColor(NS_RGBA(0,0,0,0))
     , mScrollMetadataASR(nullptr)
     , mCompositorASR(nullptr)
     , mInTransformedSubtree(false)
     , mInActiveTransformedSubtree(false)
     , mDisableSubpixelAntialiasingInDescendants(false)
-    , mInLowPrecisionDisplayPort(false)
     , mForEventsAndPluginsOnly(false)
     , mLayerCreationHint(layers::PaintedLayerCreationHint::NONE)
   {}
   ContainerLayerParameters(float aXScale, float aYScale)
     : mXScale(aXScale)
     , mYScale(aYScale)
     , mLayerContentsVisibleRect(nullptr)
     , mBackgroundColor(NS_RGBA(0,0,0,0))
     , mScrollMetadataASR(nullptr)
     , mCompositorASR(nullptr)
     , mInTransformedSubtree(false)
     , mInActiveTransformedSubtree(false)
     , mDisableSubpixelAntialiasingInDescendants(false)
-    , mInLowPrecisionDisplayPort(false)
     , mForEventsAndPluginsOnly(false)
     , mLayerCreationHint(layers::PaintedLayerCreationHint::NONE)
   {}
   ContainerLayerParameters(float aXScale, float aYScale,
                            const nsIntPoint& aOffset,
                            const ContainerLayerParameters& aParent)
     : mXScale(aXScale)
     , mYScale(aYScale)
     , mLayerContentsVisibleRect(nullptr)
     , mOffset(aOffset)
     , mBackgroundColor(aParent.mBackgroundColor)
     , mScrollMetadataASR(aParent.mScrollMetadataASR)
     , mCompositorASR(aParent.mCompositorASR)
     , mInTransformedSubtree(aParent.mInTransformedSubtree)
     , mInActiveTransformedSubtree(aParent.mInActiveTransformedSubtree)
     , mDisableSubpixelAntialiasingInDescendants(aParent.mDisableSubpixelAntialiasingInDescendants)
-    , mInLowPrecisionDisplayPort(aParent.mInLowPrecisionDisplayPort)
     , mForEventsAndPluginsOnly(aParent.mForEventsAndPluginsOnly)
     , mLayerCreationHint(aParent.mLayerCreationHint)
   {}
 
   float mXScale, mYScale;
 
   LayoutDeviceToLayerScale2D Scale() const {
     return LayoutDeviceToLayerScale2D(mXScale, mYScale);
@@ -266,17 +263,16 @@ struct ContainerLayerParameters {
 
   nscolor mBackgroundColor;
   const ActiveScrolledRoot* mScrollMetadataASR;
   const ActiveScrolledRoot* mCompositorASR;
 
   bool mInTransformedSubtree;
   bool mInActiveTransformedSubtree;
   bool mDisableSubpixelAntialiasingInDescendants;
-  bool mInLowPrecisionDisplayPort;
   bool mForEventsAndPluginsOnly;
   layers::PaintedLayerCreationHint mLayerCreationHint;
 
   /**
    * When this is false, PaintedLayer coordinates are drawn to with an integer
    * translation and the scale in mXScale/mYScale.
    */
   bool AllowResidualTranslation()
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -1274,28 +1274,28 @@ nsDisplayListBuilder::ResetMarkedFramesF
   }
   mFramesMarkedForDisplay.SetLength(firstFrameForShell);
 }
 
 void
 nsDisplayListBuilder::MarkFramesForDisplayList(nsIFrame* aDirtyFrame,
                                                const nsFrameList& aFrames,
                                                const nsRect& aDirtyRect) {
-  mFramesMarkedForDisplay.SetCapacity(mFramesMarkedForDisplay.Length() + aFrames.GetLength());
   for (nsIFrame* e : aFrames) {
     // Skip the AccessibleCaret frame when building no caret.
     if (!IsBuildingCaret()) {
       nsIContent* content = e->GetContent();
       if (content && content->IsInNativeAnonymousSubtree() && content->IsElement()) {
         auto classList = content->AsElement()->ClassList();
         if (classList->Contains(NS_LITERAL_STRING("moz-accessiblecaret"))) {
           continue;
         }
       }
     }
+
     mFramesMarkedForDisplay.AppendElement(e);
     MarkOutOfFlowFrameForDisplay(aDirtyFrame, e, aDirtyRect);
   }
 
   if (!aDirtyFrame->GetParent()) {
     // This is the viewport frame of aDirtyFrame's presshell.
     // Store the current display data so that it can be used for fixed
     // background images.
@@ -6305,26 +6305,17 @@ nsDisplaySubDocument::~nsDisplaySubDocum
   MOZ_COUNT_DTOR(nsDisplaySubDocument);
 }
 #endif
 
 already_AddRefed<Layer>
 nsDisplaySubDocument::BuildLayer(nsDisplayListBuilder* aBuilder,
                                  LayerManager* aManager,
                                  const ContainerLayerParameters& aContainerParameters) {
-  nsPresContext* presContext = mFrame->PresContext();
-  nsIFrame* rootScrollFrame = presContext->PresShell()->GetRootScrollFrame();
-  ContainerLayerParameters params = aContainerParameters;
-  if ((mFlags & GENERATE_SCROLLABLE_LAYER) &&
-      rootScrollFrame->GetContent() &&
-      nsLayoutUtils::HasCriticalDisplayPort(rootScrollFrame->GetContent())) {
-    params.mInLowPrecisionDisplayPort = true;
-  }
-
-  RefPtr<Layer> layer = nsDisplayOwnLayer::BuildLayer(aBuilder, aManager, params);
+  RefPtr<Layer> layer = nsDisplayOwnLayer::BuildLayer(aBuilder, aManager, aContainerParameters);
   layer->AsContainerLayer()->SetEventRegionsOverride(mForceDispatchToContentRegion
     ? EventRegionsOverride::ForceDispatchToContent
     : EventRegionsOverride::NoOverride);
   return layer.forget();
 }
 
 UniquePtr<ScrollMetadata>
 nsDisplaySubDocument::ComputeScrollMetadata(Layer* aLayer,
@@ -6337,21 +6328,16 @@ nsDisplaySubDocument::ComputeScrollMetad
   nsPresContext* presContext = mFrame->PresContext();
   nsIFrame* rootScrollFrame = presContext->PresShell()->GetRootScrollFrame();
   bool isRootContentDocument = presContext->IsRootContentDocument();
   nsIPresShell* presShell = presContext->PresShell();
   ContainerLayerParameters params(
       aContainerParameters.mXScale * presShell->GetResolution(),
       aContainerParameters.mYScale * presShell->GetResolution(),
       nsIntPoint(), aContainerParameters);
-  if ((mFlags & GENERATE_SCROLLABLE_LAYER) &&
-      rootScrollFrame->GetContent() &&
-      nsLayoutUtils::HasCriticalDisplayPort(rootScrollFrame->GetContent())) {
-    params.mInLowPrecisionDisplayPort = true;
-  }
 
   nsRect viewport = mFrame->GetRect() -
                     mFrame->GetPosition() +
                     mFrame->GetOffsetToCrossDoc(ReferenceFrame());
 
   return MakeUnique<ScrollMetadata>(
     nsLayoutUtils::ComputeScrollMetadata(
       mFrame, rootScrollFrame, rootScrollFrame->GetContent(), ReferenceFrame(),
@@ -6766,54 +6752,42 @@ nsDisplayScrollInfoLayer::BuildLayer(nsD
                                      LayerManager* aManager,
                                      const ContainerLayerParameters& aContainerParameters)
 {
   // In general for APZ with event-regions we no longer have a need for
   // scrollinfo layers. However, in some cases, there might be content that
   // cannot be layerized, and so needs to scroll synchronously. To handle those
   // cases, we still want to generate scrollinfo layers.
 
-  ContainerLayerParameters params = aContainerParameters;
-  if (mScrolledFrame->GetContent() &&
-      nsLayoutUtils::HasCriticalDisplayPort(mScrolledFrame->GetContent())) {
-    params.mInLowPrecisionDisplayPort = true;
-  }
-
   return aManager->GetLayerBuilder()->
     BuildContainerLayerFor(aBuilder, aManager, mFrame, this, &mList,
-                           params, nullptr,
+                           aContainerParameters, nullptr,
                            FrameLayerBuilder::CONTAINER_ALLOW_PULL_BACKGROUND_COLOR);
 }
 
 LayerState
 nsDisplayScrollInfoLayer::GetLayerState(nsDisplayListBuilder* aBuilder,
                                     LayerManager* aManager,
                                     const ContainerLayerParameters& aParameters)
 {
   return LAYER_ACTIVE_EMPTY;
 }
 
 UniquePtr<ScrollMetadata>
 nsDisplayScrollInfoLayer::ComputeScrollMetadata(Layer* aLayer,
                                                 const ContainerLayerParameters& aContainerParameters)
 {
-  ContainerLayerParameters params = aContainerParameters;
-  if (mScrolledFrame->GetContent() &&
-      nsLayoutUtils::HasCriticalDisplayPort(mScrolledFrame->GetContent())) {
-    params.mInLowPrecisionDisplayPort = true;
-  }
-
   nsRect viewport = mScrollFrame->GetRect() -
                     mScrollFrame->GetPosition() +
                     mScrollFrame->GetOffsetToCrossDoc(ReferenceFrame());
 
   ScrollMetadata metadata = nsLayoutUtils::ComputeScrollMetadata(
       mScrolledFrame, mScrollFrame, mScrollFrame->GetContent(),
       ReferenceFrame(), aLayer,
-      mScrollParentId, viewport, Nothing(), false, params);
+      mScrollParentId, viewport, Nothing(), false, aContainerParameters);
   metadata.GetMetrics().SetIsScrollInfoLayer(true);
 
   return UniquePtr<ScrollMetadata>(new ScrollMetadata(metadata));
 }
 
 
 
 void
--- a/layout/painting/nsDisplayList.h
+++ b/layout/painting/nsDisplayList.h
@@ -1475,17 +1475,17 @@ private:
   nsDisplayLayerEventRegions*    mLayerEventRegions;
 
   static const size_t kArenaAlignment =
       mozilla::tl::Max<NS_ALIGNMENT_OF(void*), NS_ALIGNMENT_OF(double)>::value;
   mozilla::ArenaAllocator<4096, kArenaAlignment> mPool;
 
   nsCOMPtr<nsISelection>         mBoundingSelection;
   AutoTArray<PresShellState,8> mPresShellStates;
-  AutoTArray<nsIFrame*,100>    mFramesMarkedForDisplay;
+  AutoTArray<nsIFrame*,400>    mFramesMarkedForDisplay;
   AutoTArray<ThemeGeometry,2>  mThemeGeometries;
   nsDisplayTableItem*            mCurrentTableItem;
   DisplayListClipState           mClipState;
   const ActiveScrolledRoot*      mCurrentActiveScrolledRoot;
   const ActiveScrolledRoot*      mCurrentContainerASR;
   // mCurrentFrame is the frame that we're currently calling (or about to call)
   // BuildDisplayList on.
   const nsIFrame*                mCurrentFrame;
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1144,9 +1144,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 = 480;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1508603079359000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1508688905636000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -47,17 +47,17 @@ 247loan.com: max-age too low: 0
 24hourpaint.com: could not connect to host
 24sihu.com: could not connect to host
 25daysof.io: could not connect to host
 2859cc.com: could not connect to host
 2bizi.ru: could not connect to host
 2brokegirls.org: could not connect to host
 2intermediate.co.uk: did not receive HSTS header
 2or3.tk: could not connect to host
-2ss.jp: did not receive HSTS header
+2ss.jp: could not connect to host
 300651.ru: did not receive HSTS header
 300m.com: did not receive HSTS header
 300mbmovies4u.cc: could not connect to host
 301.website: could not connect to host
 302.nyc: could not connect to host
 32ph.com: could not connect to host
 33drugstore.com: did not receive HSTS header
 360gradus.com: did not receive HSTS header
@@ -101,19 +101,19 @@ 960news.ca: could not connect to host
 9651678.ru: could not connect to host
 99511.fi: did not receive HSTS header
 9jadirect.com: could not connect to host
 9point6.com: could not connect to host
 9tolife.be: did not receive HSTS header
 a-plus.space: could not connect to host
 a-theme.com: could not connect to host
 a9c.co: could not connect to host
-aaeblog.com: did not receive HSTS header
-aaeblog.net: did not receive HSTS header
-aaeblog.org: did not receive HSTS header
+aaeblog.com: could not connect to host
+aaeblog.net: could not connect to host
+aaeblog.org: could not connect to host
 aaoo.net: could not connect to host
 aapp.space: could not connect to host
 aaron-gustafson.com: did not receive HSTS header
 aati.info: did not receive HSTS header
 abareplace.com: did not receive HSTS header
 abearofsoap.com: could not connect to host
 abecodes.net: did not receive HSTS header
 abilitylist.org: did not receive HSTS header
@@ -124,22 +124,22 @@ about.ge: did not receive HSTS header
 abouthrm.nl: did not receive HSTS header
 aboutict.nl: did not receive HSTS header
 aboutlegal.nl: did not receive HSTS header
 aboutmedia.nl: did not receive HSTS header
 aboutmyip.info: did not receive HSTS header
 aboutyou-deals.de: did not receive HSTS header
 absinthium.ch: could not connect to host
 abt.de: did not receive HSTS header
-abthorpe.org: could not connect to host
 abtom.de: did not receive HSTS header
 abury.fr: did not receive HSTS header
 abury.me: did not receive HSTS header
 acabadosboston.com: did not receive HSTS header
 academicenterprise.org: could not connect to host
+acbc.ie: max-age too low: 0
 accelerole.com: did not receive HSTS header
 accelight.co.jp: did not receive HSTS header
 accelight.jp: did not receive HSTS header
 access-sofia.org: did not receive HSTS header
 accessacademies.org: max-age too low: 0
 accountradar.com: could not connect to host
 accounts-p.com: could not connect to host
 accuenergy.com: max-age too low: 0
@@ -155,17 +155,16 @@ actgruppe.de: did not receive HSTS heade
 activateplay.com: did not receive HSTS header
 activeweb.top: could not connect to host
 activiti.alfresco.com: did not receive HSTS header
 actu-medias.com: did not receive HSTS header
 acuve.jp: could not connect to host
 ada.is: max-age too low: 2592000
 adajwells.me: could not connect to host
 adam-kostecki.de: could not connect to host
-adamgold.net: could not connect to host
 adamkostecki.de: could not connect to host
 adamradocz.com: could not connect to host
 adamricheimer.com: could not connect to host
 adams.net: max-age too low: 0
 adamwk.com: did not receive HSTS header
 adboos.com: could not connect to host
 addaxpetroleum.com: could not connect to host
 addvocate.com: could not connect to host
@@ -231,23 +230,25 @@ ajmahal.com: could not connect to host
 aka.my: did not receive HSTS header
 akboy.pw: could not connect to host
 akclinics.org: did not receive HSTS header
 akerek.hu: could not connect to host
 akgundemirbas.com: could not connect to host
 akkadia.cc: could not connect to host
 akombakom.net: did not receive HSTS header
 akostecki.de: could not connect to host
+akoww.de: could not connect to host
 akselimedia.fi: did not receive HSTS header
 aktivist.in: did not receive HSTS header
 al-shami.net: could not connect to host
 aladdin.ie: did not receive HSTS header
 alainwolf.net: could not connect to host
 alanlee.net: could not connect to host
 alanrickmanflipstable.com: could not connect to host
+alaricfavier.eu: could not connect to host
 alariel.de: did not receive HSTS header
 alarmsystemreviews.com: did not receive HSTS header
 alberguecimballa.es: could not connect to host
 albertbogdanowicz.pl: did not receive HSTS header
 albertopimienta.com: did not receive HSTS header
 alcazaar.com: could not connect to host
 alecvannoten.be: did not receive HSTS header
 alenan.org: could not connect to host
@@ -268,16 +269,17 @@ allods-zone.ru: could not connect to hos
 alloffice.com.ua: did not receive HSTS header
 alloinformatique.net: could not connect to host
 allstarswithus.com: could not connect to host
 alpha.irccloud.com: could not connect to host
 alphabit-secure.com: could not connect to host
 alphabuild.io: could not connect to host
 alphalabs.xyz: could not connect to host
 alphasall.com: could not connect to host
+alrait.com: could not connect to host
 als-hardware.co.za: did not receive HSTS header
 alt33c3.org: could not connect to host
 altamarea.se: could not connect to host
 altfire.ca: could not connect to host
 altmv.com: max-age too low: 7776000
 aluminium-scaffolding.co.uk: could not connect to host
 alza.at: did not receive HSTS header
 alza.co.uk: did not receive HSTS header
@@ -301,26 +303,28 @@ amimoto-ami.com: max-age too low: 315360
 amishsecurity.com: could not connect to host
 amitube.com: could not connect to host
 amlvfs.net: could not connect to host
 amoory.com: did not receive HSTS header
 amri.nl: did not receive HSTS header
 anadoluefessporkulubu.org: could not connect to host
 anagra.ms: could not connect to host
 analytic-s.ml: did not receive HSTS header
+analyticsinmotion.net: could not connect to host
 analyticum.at: could not connect to host
 analyticum.com: could not connect to host
 ancientkarma.com: could not connect to host
 andere-gedanken.net: max-age too low: 10
 anderslind.dk: could not connect to host
 andiplusben.com: could not connect to host
 andreasbreitenlohner.de: did not receive HSTS header
 andreasfritz-fotografie.de: could not connect to host
 andreastoneman.com: could not connect to host
 andreigec.net: did not receive HSTS header
+andrespaz.com: could not connect to host
 andrew.london: did not receive HSTS header
 andrewbroekman.com: could not connect to host
 andrewhowden.com: could not connect to host
 andrewmichaud.beer: could not connect to host
 andrewmichaud.com: could not connect to host
 andrewmichaud.me: could not connect to host
 andrewregan.me: could not connect to host
 andreypopp.com: could not connect to host
@@ -438,17 +442,17 @@ as9178.net: could not connect to host
 asahikoji.net: could not connect to host
 asasuou.pw: could not connect to host
 asc16.com: could not connect to host
 ascamso.com: could not connect to host
 aschaefer.net: could not connect to host
 asdpress.cn: could not connect to host
 aserver.co: could not connect to host
 ashlane-cottages.com: could not connect to host
-asia-gazette.com: did not receive HSTS header
+asia-gazette.com: could not connect to host
 asianodor.com: could not connect to host
 ask.pe: could not connect to host
 askfit.cz: did not receive HSTS header
 asm-x.com: could not connect to host
 asmui.ga: could not connect to host
 asmui.ml: could not connect to host
 ass.org.au: did not receive HSTS header
 assekuranzjobs.de: could not connect to host
@@ -519,18 +523,18 @@ avxo.pw: could not connect to host
 awanderlustadventure.com: did not receive HSTS header
 awg-mode.de: did not receive HSTS header
 aww.moe: did not receive HSTS header
 awxg.com: could not connect to host
 axado.com.br: did not receive HSTS header
 axeny.com: did not receive HSTS header
 ayuru.info: could not connect to host
 az.search.yahoo.com: did not receive HSTS header
-azazy.net: could not connect to host
 azino777.ru: did not receive HSTS header
+azort.com: did not receive HSTS header
 azprep.us: could not connect to host
 b-landia.net: could not connect to host
 b-space.de: did not receive HSTS header
 b2and.com: could not connect to host
 b303.me: did not receive HSTS header
 b3orion.com: max-age too low: 0
 baby-click.de: could not connect to host
 babybee.ie: could not connect to host
@@ -570,17 +574,16 @@ basicsolutionsus.com: did not receive HS
 basilisk.io: could not connect to host
 bassh.net: did not receive HSTS header
 battleofthegridiron.com: could not connect to host
 baud.ninja: could not connect to host
 baum.ga: did not receive HSTS header
 baumstark.ca: could not connect to host
 baysse.eu: could not connect to host
 bazarstupava.sk: could not connect to host
-bbb1991.me: could not connect to host
 bbdos.ru: could not connect to host
 bblovess.cn: could not connect to host
 bbrinck.eu: did not receive HSTS header
 bbwdom.xyz: could not connect to host
 bbwfacesitting.xyz: could not connect to host
 bbwfight.xyz: could not connect to host
 bcbsmagentprofile.com: could not connect to host
 bcchack.com: could not connect to host
@@ -605,26 +608,27 @@ beautyconcept.co: did not receive HSTS h
 beavers.io: could not connect to host
 bebeefy.uk: could not connect to host
 bebesurdoue.com: could not connect to host
 bedabox.com: max-age too low: 0
 bedeta.de: could not connect to host
 bedreid.dk: did not receive HSTS header
 bedrijvenadministratie.nl: did not receive HSTS header
 beetleroadstories.com: could not connect to host
-beetman.net: could not connect to host
 befundup.com: could not connect to host
 behere.be: could not connect to host
 beholdthehurricane.com: could not connect to host
 beier.io: could not connect to host
 beikeil.de: did not receive HSTS header
 belairsewvac.com: could not connect to host
 belics.com: did not receive HSTS header
 belltower.io: could not connect to host
+belmontprom.com: could not connect to host
 bemyvictim.com: max-age too low: 2678400
+bendemaree.com: could not connect to host
 beneffy.com: did not receive HSTS header
 benjakesjohnson.com: could not connect to host
 benk.press: could not connect to host
 benny003.de: did not receive HSTS header
 benohead.com: did not receive HSTS header
 benzkosmetik.de: did not receive HSTS header
 beourvictim.com: max-age too low: 2678400
 berger.work: could not connect to host
@@ -658,17 +662,17 @@ beyuna.co.uk: did not receive HSTS heade
 beyuna.eu: did not receive HSTS header
 beyuna.nl: did not receive HSTS header
 bezorg.ninja: could not connect to host
 bf.am: max-age too low: 0
 bfelob.gov: max-age too low: 86400
 bffm.biz: max-age too low: 0
 bgcparkstad.nl: did not receive HSTS header
 bgmn.net: could not connect to host
-bhatia.at: could not connect to host
+bhatia.at: [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 118"  data: no]
 bi.search.yahoo.com: did not receive HSTS header
 biblerhymes.com: did not receive HSTS header
 bidon.ca: did not receive HSTS header
 bieberium.de: could not connect to host
 bienenblog.cc: could not connect to host
 bierbringer.at: could not connect to host
 bierochs.org: could not connect to host
 big-black.de: did not receive HSTS header
@@ -869,28 +873,27 @@ burgers.io: could not connect to host
 burian-server.cz: could not connect to host
 burningcrash.de: max-age too low: 600000
 burpsuite.site: could not connect to host
 burrow.ovh: could not connect to host
 burtrum.me: could not connect to host
 burtrum.top: could not connect to host
 business.lookout.com: could not connect to host
 businesshosting.nl: did not receive HSTS header
-businessimmigration-eu.com: did not receive HSTS header
-businessimmigration-eu.ru: did not receive HSTS header
 businessloanconnection.org: did not receive HSTS header
 businessloanstoday.com: max-age too low: 0
 busold.ws: could not connect to host
 bustimes.org: could not connect to host
 butchersworkshop.com: did not receive HSTS header
 buttercoin.com: could not connect to host
 butterfieldstraining.com: did not receive HSTS header
 buyaccessible.gov: did not receive HSTS header
 buybaby.eu: did not receive HSTS header
 buyfox.de: did not receive HSTS header
+buzzdeck.com: could not connect to host
 bw81.xyz: could not connect to host
 bwear4all.de: could not connect to host
 by4cqb.cn: could not connect to host
 bydisk.com: could not connect to host
 bypassed.bid: did not receive HSTS header
 bypassed.cc: did not receive HSTS header
 bypassed.club: did not receive HSTS header
 bypassed.date: did not receive HSTS header
@@ -950,17 +953,16 @@ camolist.com: could not connect to host
 campaignelves.com: did not receive HSTS header
 campfire.co.il: did not receive HSTS header
 camsanalytics.com: could not connect to host
 canadiangamblingchoice.com: did not receive HSTS header
 cancelmyprofile.com: did not receive HSTS header
 candicontrols.com: did not receive HSTS header
 candratech.com: could not connect to host
 candylion.rocks: could not connect to host
-cannarobotics.com: could not connect to host
 cannyfoxx.me: could not connect to host
 canyonshoa.com: did not receive HSTS header
 capecycles.co.za: did not receive HSTS header
 capeyorkfire.com.au: did not receive HSTS header
 capitaltg.com: could not connect to host
 capitolpathways.org: could not connect to host
 captchatheprize.com: could not connect to host
 captianseb.de: could not connect to host
@@ -975,16 +977,17 @@ cardurl.com: did not receive HSTS header
 caringladies.org: could not connect to host
 carlo.mx: did not receive HSTS header
 carlolly.co.uk: could not connect to host
 carlosalves.info: could not connect to host
 carpliyz.com: could not connect to host
 carroarmato0.be: could not connect to host
 carsforbackpackers.com: could not connect to host
 carwashvapeur.be: could not connect to host
+casburggraaf.com: did not receive HSTS header
 casc.cz: did not receive HSTS header
 casedi.org: max-age too low: 0
 casefall.com: could not connect to host
 cashlink.io: did not receive HSTS header
 cashmojo.com: could not connect to host
 cashmyphone.ch: could not connect to host
 casino-cashflow.ru: did not receive HSTS header
 casinostest.com: did not receive HSTS header
@@ -1055,16 +1058,17 @@ chensir.net: could not connect to host
 chepaofen.com: did not receive HSTS header
 cherekerry.com: could not connect to host
 cherysunzhang.com: did not receive HSTS header
 chib.chat: could not connect to host
 chicolawfirm.com: did not receive HSTS header
 chihiro.xyz: did not receive HSTS header
 chijiokeindustries.co.uk: could not connect to host
 childcaresolutionscny.org: did not receive HSTS header
+china-line.org: could not connect to host
 chinawhale.com: did not receive HSTS header
 chirgui.eu: could not connect to host
 chiryotaisaku.com: max-age too low: 0
 chloe.re: did not receive HSTS header
 chlouis.net: could not connect to host
 chm.vn: did not receive HSTS header
 chodobien.com: could not connect to host
 chontalpa.pw: could not connect to host
@@ -1079,17 +1083,16 @@ christiaandruif.nl: could not connect to
 christianbro.gq: could not connect to host
 christophercolumbusfoundation.gov: could not connect to host
 christophersole.com: could not connect to host
 christophheich.me: could not connect to host
 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)
 chua.cf: could not connect to host
-chua.family: could not connect to host
 chulado.com: did not receive HSTS header
 churchux.co: did not receive HSTS header
 cidr.ml: could not connect to host
 cig-dem.com: could not connect to host
 cigarblogs.net: could not connect to host
 cigi.site: could not connect to host
 ciicutini.ro: did not receive HSTS header
 cim2b.de: could not connect to host
@@ -1124,32 +1127,34 @@ clicnbio.com: did not receive HSTS heade
 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
 clipped4u.com: could not connect to host
 cloud-project.com: did not receive HSTS header
 cloud.wtf: could not connect to host
 cloudapi.vc: could not connect to host
+cloudbleed.info: could not connect to host
 cloudcert.org: did not receive HSTS header
 cloudcy.net: could not connect to host
 clouddesktop.co.nz: could not connect to host
 cloudey.net: did not receive HSTS header
 cloudflare.com: did not receive HSTS header
 cloudimag.es: could not connect to host
 cloudlink.club: could not connect to host
 cloudns.com.au: could not connect to host
 cloudspeedy.net: could not connect to host
 cloudspotterapp.com: did not receive HSTS header
 cloudstoragemaus.com: could not connect to host
 cloudstorm.me: could not connect to host
 cloudstrike.co: could not connect to host
 cloudwalk.io: did not receive HSTS header
 cloverleaf.net: max-age too low: 0
 clowde.in: could not connect to host
+cloxy.com: did not receive HSTS header
 clubmix.co.kr: could not connect to host
 cluster.id: did not receive HSTS header
 clustermaze.net: could not connect to host
 clvrwebdesign.com: did not receive HSTS header
 clywedogmaths.co.uk: could not connect to host
 cmc-versand.de: did not receive HSTS header
 cmci.dk: did not receive HSTS header
 cmsbattle.com: could not connect to host
@@ -1173,17 +1178,16 @@ codealkemy.co: could not connect to host
 codeco.pw: could not connect to host
 codecontrollers.de: could not connect to host
 codeforce.io: could not connect to host
 codeforhakodate.org: did not receive HSTS header
 codelayer.ca: could not connect to host
 codelitmus.com: did not receive HSTS header
 codemonkeyrawks.net: did not receive HSTS header
 codepoet.de: could not connect to host
-codepult.com: could not connect to host
 codepx.com: did not receive HSTS header
 codiva.io: max-age too low: 2592000
 codymoniz.com: did not receive HSTS header
 coffeeetc.co.uk: did not receive HSTS header
 coffeestrategies.com: max-age too low: 0
 cohesive.io: did not receive HSTS header
 coiffeurschnittstelle.ch: did not receive HSTS header
 coindam.com: could not connect to host
@@ -1248,17 +1252,16 @@ cor-ser.es: could not connect to host
 coralproject.net: did not receive HSTS header
 coralrosado.com.br: did not receive HSTS header
 corbax.com: did not receive HSTS header
 corderoscleaning.com: did not receive HSTS header
 cordial-restaurant.com: did not receive HSTS header
 core.mx: could not connect to host
 core4system.de: could not connect to host
 corenetworking.de: could not connect to host
-corgi.party: could not connect to host
 corgicloud.com: could not connect to host
 corkyoga.site: could not connect to host
 cormactagging.ie: could not connect to host
 cormilu.com.br: did not receive HSTS header
 corporateencryption.com: could not connect to host
 correctpaardbatterijnietje.nl: did not receive HSTS header
 corruption-mc.net: could not connect to host
 corruption-rsps.net: could not connect to host
@@ -1279,16 +1282,18 @@ craftmain.eu: could not connect to host
 crandall.io: could not connect to host
 cranems.com.ua: did not receive HSTS header
 cranioschule.com: did not receive HSTS header
 crate.io: did not receive HSTS header
 cravelyrics.com: could not connect to host
 crazifyngers.com: could not connect to host
 crazy-crawler.de: did not receive HSTS header
 crazycen.com: did not receive HSTS header
+crazycraftland.de: could not connect to host
+crazycraftland.net: could not connect to host
 crazyhotseeds.com: did not receive HSTS header
 crbug.com: did not receive HSTS header (error ignored - included regardless)
 create-test-publish.co.uk: could not connect to host
 creativephysics.ml: could not connect to host
 creativeplayuk.com: did not receive HSTS header
 crecket.me: could not connect to host
 crendontech.com: could not connect to host
 crestoncottage.com: could not connect to host
@@ -1296,17 +1301,16 @@ criena.net: did not receive HSTS header
 crimewatch.net.za: could not connect to host
 cristiandeluxe.com: did not receive HSTS header
 cristianhares.com: could not connect to host
 crizk.com: could not connect to host
 croome.no-ip.org: could not connect to host
 crosbug.com: did not receive HSTS header (error ignored - included regardless)
 crosscom.ch: could not connect to host
 crosssec.com: did not receive HSTS header
-crow.tw: could not connect to host
 crowd.supply: did not receive HSTS header
 crowdcurity.com: did not receive HSTS header
 crowdjuris.com: could not connect to host
 crrev.com: did not receive HSTS header (error ignored - included regardless)
 crtvmgmt.com: could not connect to host
 crudysql.com: could not connect to host
 crufad.org: did not receive HSTS header
 cruzr.xyz: could not connect to host
@@ -1394,27 +1398,28 @@ dalfiume.it: max-age too low: 1000
 dalingk.co: could not connect to host
 damedrogy.cz: could not connect to host
 damianuv-blog.cz: did not receive HSTS header
 dancerdates.net: could not connect to host
 daniel-mosquera.com: could not connect to host
 daniel-steuer.de: could not connect to host
 danielcowie.me: could not connect to host
 danieldk.eu: did not receive HSTS header
+danielepestilli.com: could not connect to host
 danielheal.net: could not connect to host
 danieliancu.com: could not connect to host
 danielverlaan.nl: did not receive HSTS header
 danielworthy.com: did not receive HSTS header
 danijobs.com: could not connect to host
 danishenanigans.com: could not connect to host
 dannycrichton.com: did not receive HSTS header
 danrl.de: could not connect to host
 danwillenberg.com: did not receive HSTS header
 daolerp.xyz: could not connect to host
-daplie.com: could not connect to host
+daplie.com: did not receive HSTS header
 dargasia.is: could not connect to host
 dario.im: could not connect to host
 dark-x.cf: could not connect to host
 darkengine.io: could not connect to host
 darkfriday.ddns.net: could not connect to host
 darkhole.cn: could not connect to host
 darkkeepers.dk: did not receive HSTS header
 darknebula.space: could not connect to host
@@ -1488,17 +1493,17 @@ deltanet-production.de: max-age too low:
 deltasmart.ch: did not receive HSTS header
 delvj.org: could not connect to host
 demdis.org: could not connect to host
 demilitarized.ninja: could not connect to host
 demo.swedbank.se: did not receive HSTS header
 demomanca.com: did not receive HSTS header
 demotops.com: did not receive HSTS header
 dengyong.org: could not connect to host
-denh.am: did not receive HSTS header
+denh.am: could not connect to host
 denisjean.fr: could not connect to host
 dentaldomain.org: did not receive HSTS header
 dentaldomain.ph: could not connect to host
 depeche-mode.moscow: max-age too low: 7200
 depijl-mz.nl: did not receive HSTS header
 depixion.agency: could not connect to host
 depo.space: could not connect to host
 dequehablamos.es: could not connect to host
@@ -1522,17 +1527,18 @@ devcu.com: could not connect to host
 devcu.net: could not connect to host
 devincrow.me: could not connect to host
 devmsg.com: did not receive HSTS header
 devnsec.com: could not connect to host
 devnull.team: could not connect to host
 devopps.me: did not receive HSTS header
 devopsconnected.com: could not connect to host
 devtub.com: did not receive HSTS header
-devuan.org: could not connect to host
+devuan.org: did not receive HSTS header
+dewalch.net: could not connect to host
 dewin.io: could not connect to host
 dfviana.com.br: max-age too low: 2592000
 dhpcs.com: did not receive HSTS header
 dhpiggott.net: did not receive HSTS header
 diablotine.rocks: could not connect to host
 dianlujitao.com: did not receive HSTS header
 diannaobos.com: did not receive HSTS header
 diarbag.us: max-age too low: 0
@@ -1545,16 +1551,17 @@ diewebstube.de: could not connect to hos
 diezel.com: could not connect to host
 diferenca.com: did not receive HSTS header
 digioccumss.ddns.net: could not connect to host
 digitalbank.kz: could not connect to host
 digitaldaddy.net: could not connect to host
 digitalero.rip: did not receive HSTS header
 digitalriver.tk: could not connect to host
 digitalskillswap.com: could not connect to host
+dillonkorman.com: could not connect to host
 dim.lighting: could not connect to host
 dinamoelektrik.com: could not connect to host
 dingcc.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 118"  data: no]
 dingcc.me: could not connect to host
 dinkum.online: could not connect to host
 directhskincream.com: could not connect to host
 directorinegocis.cat: could not connect to host
 discovery.lookout.com: did not receive HSTS header
@@ -1609,16 +1616,17 @@ dollywiki.co.uk: could not connect to ho
 dolphin-cloud.com: could not connect to host
 dolphincorp.co.uk: could not connect to host
 dolphinswithlasers.com: could not connect to host
 domaine-aigoual-cevennes.com: did not receive HSTS header
 domaris.de: could not connect to host
 domenicocatelli.com: could not connect to host
 dominioanimal.com: could not connect to host
 dominique-mueller.de: did not receive HSTS header
+don.yokohama: could not connect to host
 donmez.uk: could not connect to host
 donmez.ws: could not connect to host
 donttrustrobots.nl: could not connect to host
 donzelot.co.uk: max-age too low: 3600
 doodledraw.ninja: did not receive HSTS header
 dooku.cz: could not connect to host
 doomleika.com: could not connect to host
 doooonoooob.com: could not connect to host
@@ -1665,37 +1673,38 @@ droomhuis-in-rijnwaarden-kopen.nl: could
 droomhuis-in-sudwest-fryslan-kopen.nl: could not connect to host
 droomhuis-in-veendam-kopen.nl: could not connect to host
 droomhuis-in-zeeland-kopen.nl: could not connect to host
 droomhuisindestadverkopen.nl: could not connect to host
 droomhuisophetplattelandverkopen.nl: could not connect to host
 dropcam.com: did not receive HSTS header
 drtroyhendrickson.com: could not connect to host
 drumbandesperanto.nl: could not connect to host
+drycreekapiary.com: did not receive HSTS header
 ds-christiansen.de: could not connect to host
 dshiv.io: could not connect to host
 dtub.co: did not receive HSTS header
 dualias.xyz: could not connect to host
 dubik.su: did not receive HSTS header
 dubrovskiy.net: could not connect to host
 dubrovskiy.pro: could not connect to host
 duerls.de: did not receive HSTS header
 duesee.org: could not connect to host
 dullsir.com: did not receive HSTS header
 dungi.org: could not connect to host
 duskopy.top: could not connect to host
+dutchessuganda.com: did not receive HSTS header
 dutchrank.com: did not receive HSTS header
 duuu.ch: could not connect to host
 dycontrol.de: could not connect to host
 dyktig.as: did not receive HSTS header
 dylanscott.com.au: did not receive HSTS header
 dynamic-innovations.net: could not connect to host
 dynamize.solutions: could not connect to host
 dyrkar.com: did not receive HSTS header
-dyz.pw: could not connect to host
 dzimejl.sk: did not receive HSTS header
 dzlibs.io: could not connect to host
 dzyabchenko.com: could not connect to host
 e-aut.net: could not connect to host
 e-biografias.net: did not receive HSTS header
 e-deca2.org: did not receive HSTS header
 e-isfa.eu: did not receive HSTS header
 e-pokupki.eu: did not receive HSTS header
@@ -1726,17 +1735,16 @@ ecdn.cz: could not connect to host
 ecfs.link: could not connect to host
 ecg.fr: could not connect to host
 echipstore.com: did not receive HSTS header
 echopaper.com: could not connect to host
 ecole-en-danger.fr: could not connect to host
 ecole-maternelle-saint-joseph.be: could not connect to host
 ecomlane.com: could not connect to host
 ecomparemo.com: did not receive HSTS header
-ecorp.cc: could not connect to host
 ecorus.eu: did not receive HSTS header
 edcphenix.tk: could not connect to host
 eddmixpanel.com: did not receive HSTS header
 eddyn.net: did not receive HSTS header
 edelblack.ch: could not connect to host
 edelsteincosmetic.com: did not receive HSTS header
 eden-noel.at: could not connect to host
 edenaya.com: could not connect to host
@@ -1845,17 +1853,17 @@ enjoymayfield.com: max-age too low: 0
 enskat.de: could not connect to host
 enskatson-sippe.de: could not connect to host
 enteente.club: could not connect to host
 enteente.space: could not connect to host
 enteente.xyz: could not connect to host
 enterdev.co: did not receive HSTS header
 enterprise-threat-monitor.com: max-age too low: 0
 enterprisecarclub.co.uk: did not receive HSTS header
-entersynapse.com: did not receive HSTS header
+entersynapse.com: could not connect to host
 entourneebeetle.com: could not connect to host
 entrepreneur.or.id: did not receive HSTS header
 enum.eu.org: could not connect to host
 enumify.com: could not connect to host
 eol34.com: did not receive HSTS header
 epanurse.com: could not connect to host
 ephry.com: could not connect to host
 epichouse.net: could not connect to host
@@ -1897,17 +1905,16 @@ esn-ypci.com: could not connect to host
 esocweb.com: could not connect to host
 esoterikerforum.de: did not receive HSTS header
 esp8285.store: could not connect to host
 especificosba.com.mx: could not connect to host
 espo.com.ua: did not receive HSTS header
 espra.com: could not connect to host
 esquonic.com: could not connect to host
 essexghosthunters.co.uk: did not receive HSTS header
-estateczech-eu.ru: did not receive HSTS header
 estebanborges.com: did not receive HSTS header
 estilosapeca.com: could not connect to host
 et-buchholz.de: could not connect to host
 et180.com: could not connect to host
 etdonline.co.uk: could not connect to host
 eternitylove.us: could not connect to host
 eth9.net: could not connect to host
 ethicalexploiting.com: could not connect to host
@@ -1941,17 +1948,17 @@ eveshaiwu.com: could not connect to host
 evi.be: did not receive HSTS header
 evilnerd.de: did not receive HSTS header
 evilsay.com: could not connect to host
 evin.ml: could not connect to host
 evites.me: could not connect to host
 evomon.com: could not connect to host
 evossd.tk: could not connect to host
 evowl.com: could not connect to host
-ewex.org: did not receive HSTS header
+ewex.org: could not connect to host
 ewycena.pl: could not connect to host
 excelgum.ca: did not receive HSTS header
 exceptionalservers.com: could not connect to host
 exfiles.cz: did not receive HSTS header
 exgravitus.com: could not connect to host
 exitus.jp: max-age too low: 0
 exno.co: could not connect to host
 exousiakaidunamis.xyz: could not connect to host
@@ -1996,31 +2003,31 @@ falkp.no: did not receive HSTS header
 fallenangelspirits.uk: could not connect to host
 fame-agency.net: could not connect to host
 familie-sander.rocks: could not connect to host
 familie-sprink.de: could not connect to host
 familie-zimmermann.at: could not connect to host
 famio.cn: could not connect to host
 fantasyfootballpundit.com: did not receive HSTS header
 fanyl.cn: could not connect to host
+farhadexchange.com: did not receive HSTS header
 fashioncare.cz: did not receive HSTS header
 fasset.jp: could not connect to host
 fastcomcorp.com: did not receive HSTS header
 fastcomcorp.net: did not receive HSTS header
 fastdigitizing.com: max-age too low: 300
 fastograph.com: could not connect to host
 fastopen.ml: could not connect to host
 fastworx.com: could not connect to host
 fatgeekflix.net: could not connect to host
 fatherhood.gov: did not receive HSTS header
 fatlossguide.xyz: could not connect to host
 fatwin.pw: could not connect to host
 fawkex.me: did not receive HSTS header
 fayolle.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118"  data: no]
-fbi.pw: could not connect to host
 fbox.li: could not connect to host
 fdj.im: could not connect to host
 fdt.name: did not receive HSTS header
 feard.space: could not connect to host
 feastr.de: did not receive HSTS header
 fedo.moe: could not connect to host
 feezmodo.com: did not receive HSTS header
 felisslovakia.sk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118"  data: no]
@@ -2041,16 +2048,17 @@ fics-twosigma.com: could not connect to 
 fideleslaici.com: did not receive HSTS header
 fiftyshadesofluca.ml: could not connect to host
 fig.co: did not receive HSTS header
 fightr.co: could not connect to host
 fiksel.info: did not receive HSTS header
 fikt.space: could not connect to host
 filemeal.com: did not receive HSTS header
 filey.co.uk: did not receive HSTS header
+filip-prochazka.com: could not connect to host
 filmipop.com: max-age too low: 0
 finalgear.com: did not receive HSTS header
 financieringsportaal.nl: did not receive HSTS header
 finanzkontor.net: could not connect to host
 findtutorsnearme.com: did not receive HSTS header
 finfev.de: could not connect to host
 finiteheap.com: did not receive HSTS header
 finpt.com: did not receive HSTS header
@@ -2077,17 +2085,16 @@ fivezerocreative.com: did not receive HS
 fixingdns.com: did not receive HSTS header
 fixtectools.co.za: could not connect to host
 fj.search.yahoo.com: did not receive HSTS header
 fjruiz.es: did not receive HSTS header
 fkcovering.be: could not connect to host
 flags.ninja: could not connect to host
 flamewall.net: could not connect to host
 flareon.net: could not connect to host
-flashback.org: did not receive HSTS header
 flawcheck.com: did not receive HSTS header
 fliexer.com: could not connect to host
 flirchi.com: did not receive HSTS header
 floless.co.uk: did not receive HSTS header
 florafiora.com.br: did not receive HSTS header
 florian-lillpopp.de: max-age too low: 10
 florianlillpopp.de: max-age too low: 10
 floridaescapes.co.uk: did not receive HSTS header
@@ -2168,16 +2175,17 @@ frenzel.dk: could not connect to host
 freqlabs.com: did not receive HSTS header
 freshfind.xyz: could not connect to host
 freshlymind.com: did not receive HSTS header
 frezbo.com: could not connect to host
 frforms.com: did not receive HSTS header
 fridolinka.cz: could not connect to host
 friendica.ch: could not connect to host
 friendlyfiregameshow.com: could not connect to host
+friendlysiberia.com: could not connect to host
 frimons.com: could not connect to host
 froggstack.de: could not connect to host
 frontisme.nl: could not connect to host
 frontmin.com: did not receive HSTS header
 frost-ci.xyz: could not connect to host
 fruitusers.com: could not connect to host
 frumious.fyi: could not connect to host
 frusky.net: did not receive HSTS header
@@ -2240,37 +2248,39 @@ galoisvpn.xyz: could not connect to host
 gambitcloud.net: could not connect to host
 game-files.net: could not connect to host
 game.yt: could not connect to host
 gamecave.de: could not connect to host
 gamechasm.com: could not connect to host
 gamefund.me: did not receive HSTS header
 gamehacks.me: could not connect to host
 gameink.net: max-age too low: 0
-gamek.es: could not connect to host
+gamek.es: did not receive HSTS header
 gamenected.com: could not connect to host
 gamenected.de: could not connect to host
 gameofpwnz.com: did not receive HSTS header
 gamepad.vg: could not connect to host
+gamepader.com: did not receive HSTS header
 gameparade.de: could not connect to host
 gamepiece.com: could not connect to host
 gamers-life.fr: could not connect to host
 gamerslair.org: did not receive HSTS header
 gamerz-point.de: could not connect to host
 gamesdepartment.co.uk: did not receive HSTS header
 gameserver-sponsor.de: could not connect to host
 gamesurferapp.com: could not connect to host
 gamingmedia.eu: did not receive HSTS header
 gampenhof.de: did not receive HSTS header
 gaptek.id: did not receive HSTS header
 garageon.net: did not receive HSTS header
 garciamartin.me: could not connect to host
 garden.trade: max-age too low: 0
 garfieldairlines.net: did not receive HSTS header
 gatapro.net: could not connect to host
+gateaucreation.fr: could not connect to host
 gatorsa.es: did not receive HSTS header
 gaussorgues.me: could not connect to host
 gdegem.org: did not receive HSTS header
 gdpventure.com: max-age too low: 0
 gebn.co.uk: did not receive HSTS header
 gedankenbude.info: could not connect to host
 geekcast.co.uk: did not receive HSTS header
 geeks.berlin: could not connect to host
@@ -2326,17 +2336,16 @@ getspire.com: could not connect to host
 getwashdaddy.com: could not connect to host
 gfelot.xyz: could not connect to host
 gfm.tech: could not connect to host
 gfwsb.ml: could not connect to host
 ggss.ml: could not connect to host
 gh16.com.ar: could not connect to host
 gheorghesarcov.ga: could not connect to host
 gheorghesarcov.tk: could not connect to host
-ghostcir.com: could not connect to host
 giakki.eu: could not connect to host
 gianlucapartengo.photography: did not receive HSTS header
 giantmicrobes.de: max-age too low: 86400
 gibraltar.at: could not connect to host
 gietvloergarant.nl: did not receive HSTS header
 giftservices.nl: could not connect to host
 gigacloud.org: max-age too low: 0
 gigacog.com: could not connect to host
@@ -2395,16 +2404,17 @@ gold24.in: did not receive HSTS header
 goldegg-training.com: did not receive HSTS header
 goldendata.io: could not connect to host
 goldminer.ga: could not connect to host
 goldpros.com: did not receive HSTS header
 golocal-media.de: could not connect to host
 gong8.win: could not connect to host
 gonzalosanchez.mx: did not receive HSTS header
 goodenough.nz: did not receive HSTS header
+goodmengroup.de: could not connect to host
 goodtech.com.br: could not connect to host
 goodwin43.ru: could not connect to host
 google: could not connect to host (error ignored - included regardless)
 google.ax: could not connect to host
 googlemail.com: did not receive HSTS header (error ignored - included regardless)
 googleplex.com: did not receive HSTS header (error ignored - included regardless)
 goolok.com: could not connect to host
 gootlijsten.nl: did not receive HSTS header
@@ -2419,17 +2429,16 @@ gotocloud.ru: could not connect to host
 gotowned.org: max-age too low: 0
 gotspot.com: could not connect to host
 gottcode.org: did not receive HSTS header
 gov.ax: could not connect to host
 goverage.org: did not receive HSTS header
 govillemo.ca: did not receive HSTS header
 gozel.com.tr: did not receive HSTS header
 gparent.org: did not receive HSTS header
-gps.com.br: could not connect to host
 gpsfix.cz: did not receive HSTS header
 gpstuner.com: did not receive HSTS header
 graavaapi.elasticbeanstalk.com: could not connect to host
 grabi.ga: could not connect to host
 gracesofgrief.com: could not connect to host
 grachtenpandverkopen.nl: could not connect to host
 grana.com: did not receive HSTS header
 grandmascookieblog.com: did not receive HSTS header
@@ -2445,22 +2454,22 @@ grazetech.com: did not receive HSTS head
 grcnode.co.uk: could not connect to host
 greatnet.de: did not receive HSTS header
 greatsong.net: did not receive HSTS header
 greencardtalent.com: could not connect to host
 greenesting.ch: could not connect to host
 greenhillantiques.co.uk: did not receive HSTS header
 greenvines.com.tw: did not receive HSTS header
 greg.red: could not connect to host
-gregorykelleher.com: could not connect to host
 gregorytlee.me: could not connect to host
 gremots.com: could not connect to host
 greplin.com: could not connect to host
 gresb.com: did not receive HSTS header
 gretchelizartistry.com: did not receive HSTS header
+grevesgarten.de: could not connect to host
 greyline.se: could not connect to host
 gribani.com: could not connect to host
 grid2osm.org: could not connect to host
 grigalanzsoftware.com: could not connect to host
 gripopgriep.net: could not connect to host
 groenemeijer.frl: max-age too low: 2628000
 groenewoud.run: did not receive HSTS header
 groetzner.net: did not receive HSTS header
@@ -2532,25 +2541,27 @@ hack.cz: could not connect to host
 hack.li: could not connect to host
 hackercat.ninja: did not receive HSTS header
 hackerforever.com: did not receive HSTS header
 hackerone-ext-adroll.com: could not connect to host
 hackerspace-ntnu.no: did not receive HSTS header
 hackest.org: did not receive HSTS header
 hackit.im: could not connect to host
 hackroyale.xyz: could not connect to host
+hadaf.pro: could not connect to host
 hadzic.co: could not connect to host
 haeckdesign.com: did not receive HSTS header
 haeckl.eu: did not receive HSTS header
 haf.gr: could not connect to host
 hahayidu.org: could not connect to host
 haitschi.com: could not connect to host
 haitschi.de: did not receive HSTS header
 haitschi.net: could not connect to host
 haitschi.org: could not connect to host
+hajnzic.at: could not connect to host
 haktec.de: could not connect to host
 haku.moe: could not connect to host
 hakugin.org: could not connect to host
 halcyonsbastion.com: could not connect to host
 halligladen.de: did not receive HSTS header
 halo.red: could not connect to host
 haman.nl: could not connect to host
 hancc.net: could not connect to host
@@ -2614,20 +2625,21 @@ hearty.space: could not connect to host
 hearty.tw: did not receive HSTS header
 heartyme.net: could not connect to host
 heathmanners.com: could not connect to host
 hebaus.com: could not connect to host
 hebriff.com: could not connect to host
 heidilein.info: did not receive HSTS header
 heijblok.com: could not connect to host
 heimnetze.org: could not connect to host
+hekeki.com: could not connect to host
 helencrump.co.uk: did not receive HSTS header
 helloworldhost.com: did not receive HSTS header
 helpadmin.net: could not connect to host
-helpium.de: could not connect to host
+helpium.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 118"  data: no]
 helpmebuild.com: did not receive HSTS header
 hemdal.se: could not connect to host
 hencagon.com: could not connect to host
 henriknoerr.com: could not connect to host
 hepteract.us: did not receive HSTS header
 heritagedentistry.ca: did not receive HSTS header
 herrenfahrt.com: did not receive HSTS header
 herzbotschaft.de: did not receive HSTS header
@@ -2734,17 +2746,16 @@ hugocollignon.fr: could not connect to h
 hugosleep.com.au: did not receive HSTS header
 humankode.com: did not receive HSTS header
 humblefinances.com: could not connect to host
 humeurs.net: could not connect to host
 humortuga.pt: did not receive HSTS header
 humpi.at: could not connect to host
 humpteedumptee.in: did not receive HSTS header
 hup.blue: could not connect to host
-hupp.se: could not connect to host
 hurricanelabs.com: did not receive HSTS header
 huskybutt.dog: could not connect to host
 hxying.com: could not connect to host
 hycken.com: did not receive HSTS header
 hydra.ws: could not connect to host
 hydronium.cf: could not connect to host
 hydronium.ga: could not connect to host
 hydronium.me: could not connect to host
@@ -2773,17 +2784,16 @@ ich-mach-druck.eu: did not receive HSTS 
 ichnichtskaufmann.de: could not connect to host
 ichoosebtec.com: did not receive HSTS header
 icity.ly: did not receive HSTS header
 icloud.net: could not connect to host
 icntorrent.download: could not connect to host
 icpc2016.in.th: could not connect to host
 icq-project.net: could not connect to host
 icreative.nl: did not receive HSTS header
-ictinforensics.org: could not connect to host
 ictual.com: max-age too low: 0
 id-co.in: could not connect to host
 id-conf.com: did not receive HSTS header
 idacmedia.com: max-age too low: 5184000
 ideadozz.hu: could not connect to host
 ideal-envelopes.co.uk: did not receive HSTS header
 idealmykonos.com: did not receive HSTS header
 ideasmeetingpoint.com: could not connect to host
@@ -2811,24 +2821,25 @@ igiftcards.nl: did not receive HSTS head
 ignatisd.gr: did not receive HSTS header
 ignatovich.by: could not connect to host
 ignatovich.me: could not connect to host
 igule.net: could not connect to host
 ihrlotto.de: could not connect to host
 ihrnationalrat.ch: could not connect to host
 ihsbsd.me: could not connect to host
 ihsbsd.tk: could not connect to host
-ihuanmeng.com: did not receive HSTS header
+ihuanmeng.com: could not connect to host
 iispeed.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
 ilgi.work: could not connect to host
 ilikerainbows.co: could not connect to host
 ilikerainbows.co.uk: could not connect to host
+illegalpornography.me: could not connect to host
 ilmconpm.de: did not receive HSTS header
 ilona.graphics: max-age too low: 3600
 iluvscotland.co.uk: did not receive HSTS header
 imakepoems.net: could not connect to host
 imanolbarba.net: could not connect to host
 ime.moe: could not connect to host
 imim.pw: could not connect to host
 imjiangtao.com: could not connect to host
@@ -2905,27 +2916,27 @@ inspire-av.com: did not receive HSTS hea
 inspiroinc.com: could not connect to host
 inspy.me: max-age too low: 0
 instacart.com: did not receive HSTS header
 instantdev.io: could not connect to host
 instinctiveads.com: did not receive HSTS header
 institutoflordelavida.com: could not connect to host
 instruktor.io: could not connect to host
 intarweb.ca: could not connect to host
-integraelchen.de: could not connect to host
 intel.li: could not connect to host
 intelevo.com: max-age too low: 0
 interference.io: could not connect to host
 interhosts.co.za: could not connect to host
 interim-cto.de: could not connect to host
 interleucina.org: did not receive HSTS header
 interlocal.co.uk: could not connect to host
 interlun.com: could not connect to host
 internetcasinos.de: could not connect to host
 internetcensus.org: could not connect to host
+internetpro.me: 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
 intimateperrierjouet.com: could not connect to host
 intimtoy.com.ua: could not connect to host
 intranetsec.fr: could not connect to host
 intrp.net: did not receive HSTS header
@@ -2939,16 +2950,17 @@ ionx.co.uk: did not receive HSTS header
 iop.intuit.com: max-age too low: 86400
 iora.fr: could not connect to host
 iosmods.com: did not receive HSTS header
 iostips.ru: could not connect to host
 ioteo.com: max-age too low: 0
 iotsms.io: could not connect to host
 ip6.im: did not receive HSTS header
 ipbill.org.uk: could not connect to host
+iplife.cn: could not connect to host
 ipmimagazine.com: did not receive HSTS header
 iprice.co.id: did not receive HSTS header
 iprice.hk: did not receive HSTS header
 iprice.my: did not receive HSTS header
 iprice.ph: did not receive HSTS header
 iprice.sg: did not receive HSTS header
 iprice.vn: did not receive HSTS header
 ipricethailand.com: did not receive HSTS header
@@ -2974,17 +2986,16 @@ is-a-furry.org: did not receive HSTS hea
 isabellehogarth.co.uk: could not connect to host
 ischool.co.jp: did not receive HSTS header
 isdf.me: could not connect to host
 iseek.biz: max-age too low: 0
 iseulde.com: did not receive HSTS header
 ishillaryclintoninprisonyet.com: could not connect to host
 isitamor.pm: could not connect to host
 iskaz.rs: did not receive HSTS header
-islam.si: did not receive HSTS header
 isogen5.com: could not connect to host
 isogram.nl: could not connect to host
 israkurort.com: did not receive HSTS header
 istanbultravelguide.info: could not connect to host
 istaspirtslietas.lv: did not receive HSTS header
 it-go.net: did not receive HSTS header
 it-schwerin.de: could not connect to host
 itechgeek.com: max-age too low: 0
@@ -3118,18 +3129,19 @@ jirav.io: could not connect to host
 jitsi.org: did not receive HSTS header
 jiyue.com: could not connect to host
 jiyuu-ni.com: could not connect to host
 jiyuu-ni.net: could not connect to host
 jkb.pics: could not connect to host
 jkbuster.com: could not connect to host
 jko.works: could not connect to host
 jmdekker.it: could not connect to host
+jmk.hu: could not connect to host
 joakimalgroy.com: could not connect to host
-jobmedic.com: could not connect to host
+jobmedic.com: did not receive HSTS header
 jobshq.com: did not receive HSTS header
 jobss.co.uk: did not receive HSTS header
 joedavison.me: could not connect to host
 johannes-sprink.de: could not connect to host
 johnbrownphotography.ch: did not receive HSTS header
 johners.me: could not connect to host
 johnhgaunt.com: did not receive HSTS header
 johnrom.com: did not receive HSTS header
@@ -3185,17 +3197,16 @@ jvoice.net: could not connect to host
 jwilsson.me: could not connect to host
 jxm.in: could not connect to host
 jznet.org: could not connect to host
 k-dev.de: could not connect to host
 k-wallet.com: could not connect to host
 ka-clan.com: could not connect to host
 kabinapp.com: could not connect to host
 kabuabc.com: did not receive HSTS header
-kabus.org: could not connect to host
 kadioglumakina.com.tr: did not receive HSTS header
 kaela.design: could not connect to host
 kahopoon.net: could not connect to host
 kaisers.de: did not receive HSTS header
 kaiyuewu.com: could not connect to host
 kalami.nl: could not connect to host
 kamcvicit.sk: could not connect to host
 kamikano.com: could not connect to host
@@ -3222,16 +3233,17 @@ kaufkraftkiel.de: could not connect to h
 kausch.at: could not connect to host
 kavinvin.me: could not connect to host
 kawaiiku.com: could not connect to host
 kawaiiku.de: could not connect to host
 kcolford.com: could not connect to host
 kd-plus.pp.ua: could not connect to host
 kdata.it: did not receive HSTS header
 kdm-online.de: did not receive HSTS header
+kdyby.org: could not connect to host
 keeley.gq: could not connect to host
 keeley.ml: could not connect to host
 keeleysam.me: could not connect to host
 keepassa.co: could not connect to host
 keepclean.me: could not connect to host
 keepcoalintheground.org: could not connect to host
 kenderbeton-magyarorszag.hu: could not connect to host
 kenderbetonmagyarorszag.hu: could not connect to host
@@ -3320,17 +3332,16 @@ kolozsvaricsuhe.hu: did not receive HSTS
 komikito.com: could not connect to host
 kompetenzwerft.de: did not receive HSTS header
 konata.us: could not connect to host
 kontaxis.network: could not connect to host
 kontorhaus-schlachte.de: could not connect to host
 koopjesnel.nl: could not connect to host
 koordinate.net: could not connect to host
 kopfsalat.eu: could not connect to host
-korea.dating: did not receive HSTS header
 kori.ml: did not receive HSTS header
 korni22.org: did not receive HSTS header
 korsanparti.org: could not connect to host
 kostuumstore.nl: could not connect to host
 kotois.com: could not connect to host
 kotonehoko.net: could not connect to host
 kotovstyle.ru: could not connect to host
 koukni.cz: did not receive HSTS header
@@ -3398,16 +3409,17 @@ labs.directory: could not connect to hos
 labs.moscow: did not receive HSTS header
 lacaverne.nl: could not connect to host
 lachlankidson.net: did not receive HSTS header
 lacledeslan.ninja: could not connect to host
 lacocinadelila.com: did not receive HSTS header
 laf.in.net: could not connect to host
 lagalerievirtuelle.fr: did not receive HSTS header
 lagoza.name: could not connect to host
+lainchan.org: did not receive HSTS header
 lakhesis.net: could not connect to host
 lamaland.ru: did not receive HSTS header
 lambda-complex.org: could not connect to host
 lambdafive.co.uk: could not connect to host
 lampl.info: could not connect to host
 lana.swedbank.se: did not receive HSTS header
 lancehoteis.com.br: could not connect to host
 landgoedverkopen.nl: could not connect to host
@@ -3415,56 +3427,53 @@ landhuisverkopen.nl: could not connect t
 landscape.canonical.com: max-age too low: 2592000
 landscapingmedic.com: did not receive HSTS header
 langenbach.rocks: could not connect to host
 langendries.eu: could not connect to host
 langhun.me: did not receive HSTS header
 laniakean.com: could not connect to host
 lanzarote-online.info: could not connect to host
 laobox.fr: could not connect to host
-laos.dating: did not receive HSTS header
 laozhu.me: could not connect to host
 laplaceduvillage.net: could not connect to host
 laquack.com: could not connect to host
 laredsemanario.com: could not connect to host
 lasercloud.ml: could not connect to host
 laserfuchs.de: did not receive HSTS header
 lashstuff.com: did not receive HSTS header
-latino.dating: did not receive HSTS header
 latinred.com: could not connect to host
 latus.xyz: could not connect to host
 launchkey.com: did not receive HSTS header
 lausitzer-widerstand.de: did not receive HSTS header
 laventainnhotel-mailing.com: did not receive HSTS header
 lavine.ch: did not receive HSTS header
 lavito.cz: did not receive HSTS header
 lavval.com: could not connect to host
 lawformt.com: could not connect to host
 lawly.org: could not connect to host
 laxatus.com: could not connect to host
 laxiongames.es: could not connect to host
 laylo.nl: did not receive HSTS header
 lbarrios.es: could not connect to host
 lbrt.xyz: could not connect to host
 ldarby.me.uk: could not connect to host
-le-palantir.com: could not connect to host
+leadbook.ru: max-age too low: 604800
 leadership9.com: could not connect to host
 leardev.de: did not receive HSTS header
 learnedovo.com: did not receive HSTS header
 learnfrenchfluently.com: did not receive HSTS header
 learningorder.com: could not connect to host
 lebrun.org: could not connect to host
 leddruckalarm.de: did not receive HSTS header
 ledgerscope.net: could not connect to host
 leen.io: did not receive HSTS header
 leermotorrijden.nl: max-age too low: 300
 lefebvristes.com: could not connect to host
 lefebvristes.fr: could not connect to host
 legarage.org: could not connect to host
-lehighmathcircle.org: could not connect to host
 leifdreizler.com: could not connect to host
 leinir.dk: did not receive HSTS header
 leitner.com.au: did not receive HSTS header
 leiyun.me: did not receive HSTS header
 lellyboi.ml: could not connect to host
 lelongbank.com: did not receive HSTS header
 lemp.io: did not receive HSTS header
 lenagroben.de: could not connect to host
@@ -3515,16 +3524,17 @@ lianyexiuchang.in: could not connect to 
 liaoshuma.com: could not connect to host
 libanco.com: could not connect to host
 libertyrp.org: could not connect to host
 library.linode.com: did not receive HSTS header
 librechan.net: could not connect to host
 libreduca.com: could not connect to host
 lidl-selection.at: could not connect to host
 lidlovajogurteka.si: could not connect to host
+liemen.net: could not connect to host
 lifecoach.tw: did not receive HSTS header
 lifecoachproviders.com: did not receive HSTS header
 lifeguard.aecom.com: did not receive HSTS header
 lifeinitsownway.com: could not connect to host
 lifeskillsdirect.com: did not receive HSTS header
 lifestylehunter.co.uk: did not receive HSTS header
 lifetimemoneymachine.com: did not receive HSTS header
 lightarmory.com: could not connect to host
@@ -3545,17 +3555,17 @@ lingros-test.tk: could not connect to ho
 linguaquote.com: did not receive HSTS header
 lingvo-svoboda.ru: did not receive HSTS header
 linhaoyi.com: did not receive HSTS header
 link.ba: could not connect to host
 link2serve.com: did not receive HSTS header
 linmi.cc: did not receive HSTS header
 linno.me: could not connect to host
 linorman1997.me: could not connect to host
-linux.sb: did not receive HSTS header
+linux.sb: could not connect to host
 linuxandstuff.de: could not connect to host
 linuxeyecandy.com: could not connect to host
 linuxfixed.it: could not connect to host
 linuxforyou.com: could not connect to host
 linuxgeek.ro: could not connect to host
 linuxmint.cz: could not connect to host
 linuxmonitoring.net: did not receive HSTS header
 linuxproperties.com: did not receive HSTS header
@@ -3673,16 +3683,17 @@ m3-gmbh.de: did not receive HSTS header
 m82labs.com: did not receive HSTS header
 maarten.nyc: could not connect to host
 mabulledu.net: max-age too low: 7529400
 mac-torrents.me: did not receive HSTS header
 macbolo.com: could not connect to host
 macchedil.com: did not receive HSTS header
 macdj.tk: could not connect to host
 macgeneral.de: did not receive HSTS header
+macinyasha.net: could not connect to host
 macsandcheesedreams.com: could not connect to host
 madars.org: did not receive HSTS header
 maddin.ga: could not connect to host
 madebymagnitude.com: did not receive HSTS header
 maderwin.com: did not receive HSTS header
 madesoftware.com.br: could not connect to host
 mae-berlinistanbul.com: could not connect to host
 maelstrom.ninja: could not connect to host
@@ -3730,16 +3741,17 @@ manningbrothers.com: did not receive HST
 mansion-note.com: did not receive HSTS header
 maomaofuli.vip: could not connect to host
 maple5.com: did not receive HSTS header
 marchagen.nl: did not receive HSTS header
 marcoececilia.it: did not receive HSTS header
 marcofinke.de: could not connect to host
 marcontrol.com: did not receive HSTS header
 marcosteixeira.tk: could not connect to host
+marcschlagenhauf.de: could not connect to host
 marcus-scheffler.com: did not receive HSTS header
 margaretrosefashions.co.uk: could not connect to host
 mariannematthew.com: could not connect to host
 marie-curie.fr: could not connect to host
 marie-elisabeth.dk: did not receive HSTS header
 marie-en-provence.com: did not receive HSTS header
 marienschule-sundern.de: did not receive HSTS header
 mario.party: did not receive HSTS header
@@ -3773,17 +3785,17 @@ maskt.pw: max-age too low: 0
 masterapi.ninja: did not receive HSTS header
 masterdemolitioninc.com: could not connect to host
 masteringtheterminal.com: did not receive HSTS header
 mastimtibetano.com: could not connect to host
 mastod.life: could not connect to host
 mastodon.direct: could not connect to host
 mastodon.engineering: could not connect to host
 mastodon.my: could not connect to host
-mastodon.org.uk: did not receive HSTS header
+mastodon.org.uk: could not connect to host
 mastodones.club: could not connect to host
 masty.nl: did not receive HSTS header
 matatall.com: did not receive HSTS header
 matchneedle.com: could not connect to host
 maternalsafety.org: did not receive HSTS header
 matomeplus.co: could not connect to host
 matrict.com: could not connect to host
 matrip.de: could not connect to host
@@ -3929,17 +3941,16 @@ mikk.cz: could not connect to host
 miku.be: did not receive HSTS header
 miku.hatsune.my: max-age too low: 5184000
 milang.xyz: could not connect to host
 milatrans.pl: did not receive HSTS header
 milcoresonline.com: could not connect to host
 milesgeek.com: did not receive HSTS header
 military-portal.cz: did not receive HSTS header
 mimoderoupa.pt: could not connect to host
-mind.sh: could not connect to host
 mindcraft.ga: could not connect to host
 mindoktor.se: did not receive HSTS header
 minecraftforum.ch: could not connect to host
 minecraftserverz.com: could not connect to host
 minecraftvoter.com: could not connect to host
 mineover.es: could not connect to host
 minh.at: could not connect to host
 mini-piraten.de: did not receive HSTS header
@@ -4058,33 +4069,33 @@ mountainmusicpromotions.com: did not rec
 moviesabout.net: could not connect to host
 moy-gorod.od.ua: did not receive HSTS header
 mp3juices.is: could not connect to host
 mpe.org: could not connect to host
 mpintaamalabanna.it: could not connect to host
 mqas.net: could not connect to host
 mrdani.net: could not connect to host
 mredsanders.net: could not connect to host
+mremallin.ca: could not connect to host
 mrettich.org: did not receive HSTS header
 mrhack.cz: did not receive HSTS header
 mrning.com: did not receive HSTS header
 mrnonz.com: max-age too low: 0
 mrpopat.in: did not receive HSTS header
 mrs-shop.com: did not receive HSTS header
 msc-seereisen.net: could not connect to host
 msno.no: did not receive HSTS header
 mszaki.com: did not receive HSTS header
 mt.me.uk: could not connect to host
 mt.search.yahoo.com: did not receive HSTS header
 mtb.wtf: could not connect to host
 mtcgf.com: did not receive HSTS header
 mtdn.jp: could not connect to host
 mtg-esport.de: did not receive HSTS header
 mu.search.yahoo.com: did not receive HSTS header
-muchohentai.com: could not connect to host
 mudcrab.us: did not receive HSTS header
 mujadin.se: did not receive HSTS header
 munich-rage.de: could not connect to host
 munkiepus.com: did not receive HSTS header
 munuc.org: did not receive HSTS header
 munzee.com: did not receive HSTS header
 muriburi.land: could not connect to host
 muriburiland.com: could not connect to host
@@ -4115,20 +4126,19 @@ mydeos.com: could not connect to host
 mydigipass.com: did not receive HSTS header
 mydnaresults.com: could not connect to host
 mydnatest.com: did not receive HSTS header
 myepass.bg: could not connect to host
 myepass.de: could not connect to host
 mygate.at: could not connect to host
 mygdut.com: did not receive HSTS header
 mygov.scot: did not receive HSTS header
+myimds.com: did not receive HSTS header
 myiocc.org: could not connect to host
 mykreuzfahrt.de: could not connect to host
-mymed.de: could not connect to host
-mymed.eu: could not connect to host
 mynetblog.com: did not receive HSTS header
 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
 mypension.ca: could not connect to host
 myphonebox.de: could not connect to host
 myrig.com: could not connect to host
@@ -4164,16 +4174,17 @@ nan.zone: could not connect to host
 nandex.org: could not connect to host
 naniki.co.uk: did not receive HSTS header
 nanogeneinc.com: could not connect to host
 nansay.cn: could not connect to host
 nanto.eu: could not connect to host
 naphex.rocks: could not connect to host
 narada.com.ua: could not connect to host
 nashira.cz: did not receive HSTS header
+nasrsolar.com: could not connect to host
 natalia-fadeeva.ru: could not connect to host
 natalia.io: could not connect to host
 natalieandjoshua.com: could not connect to host
 natalt.org: did not receive HSTS header
 natanaelys.com: could not connect to host
 nathanmfarrugia.com: did not receive HSTS header
 nationwidevehiclecontracts.co.uk: did not receive HSTS header
 natural-progesterone.net: could not connect to host
@@ -4210,17 +4221,16 @@ neonnuke.tech: did not receive HSTS head
 neosolution.ca: did not receive HSTS header
 nephos.xyz: did not receive HSTS header
 nepustil.net: did not receive HSTS header
 neris.io: could not connect to host
 nestedquotes.ca: could not connect to host
 net-navi.cc: did not receive HSTS header
 netbox.cc: could not connect to host
 netherwind.eu: could not connect to host
-netica.fr: could not connect to host
 netlilo.com: could not connect to host
 netloanusa.com: could not connect to host
 netmagik.com: did not receive HSTS header
 netprofile.com.au: could not connect to host
 netresourcedesign.com: could not connect to host
 nettefoundation.com: could not connect to host
 networx-online.de: could not connect to host
 netzbit.de: could not connect to host
@@ -4249,16 +4259,17 @@ newportpropertygroup.com: could not conn
 newtonwarp.com: could not connect to host
 nextcloud.org: could not connect to host
 nexth.de: could not connect to host
 nexth.net: could not connect to host
 nexth.us: could not connect to host
 nextpages.de: could not connect to host
 nextproject.us: could not connect to host
 nfo.so: could not connect to host
+nframe.io: could not connect to host
 ng-security.com: could not connect to host
 ngine.ch: did not receive HSTS header
 nginxnudes.com: could not connect to host
 nglr.org: could not connect to host
 ngt-service.ru: did not receive HSTS header
 ni.search.yahoo.com: did not receive HSTS header
 niagarafalls.ca: did not receive HSTS header
 nibiisclaim.com: could not connect to host
@@ -4310,33 +4321,34 @@ nopex.no: could not connect to host
 nopol.de: could not connect to host
 norandom.com: could not connect to host
 norb.at: could not connect to host
 nordlicht.photography: could not connect to host
 nosecretshop.com: could not connect to host
 notadd.com: did not receive HSTS header
 notarobot.fr: could not connect to host
 nothing.net.nz: max-age too low: 7776000
-nottheonion.net: did not receive HSTS header
+nottheonion.net: could not connect to host
 nou.si: could not connect to host
 nouvelle-vague-saint-cast.fr: did not receive HSTS header
 nova-elearning.com: did not receive HSTS header
 novaco.in: max-age too low: 3600
 novacoast.com: did not receive HSTS header
 novascan.net: could not connect to host
 novatrucking.de: could not connect to host
 nowak.ninja: did not receive HSTS header
 noworrywp.com: could not connect to host
 nozoe.jp: could not connect to host
 np.search.yahoo.com: did not receive HSTS header
 npath.de: did not receive HSTS header
 npol.de: could not connect to host
 nqesh.com: did not receive HSTS header
 nrechn.de: could not connect to host
 nrizzio.me: could not connect to host
+nrnjn.xyz: could not connect to host
 ntbs.pro: could not connect to host
 ntse.xyz: could not connect to host
 nu3.at: did not receive HSTS header
 nu3.ch: did not receive HSTS header
 nu3.co.uk: could not connect to host
 nu3.com: did not receive HSTS header
 nu3.de: did not receive HSTS header
 nu3.dk: did not receive HSTS header
@@ -4364,17 +4376,16 @@ nwork.media: could not connect to host
 nyantec.com: did not receive HSTS header
 nycroth.com: did not receive HSTS header
 nyored.com: did not receive HSTS header
 nys-hk.com: could not connect to host
 nysepho.pw: could not connect to host
 nysifclaimcentral.com: did not receive HSTS header
 nystart.no: did not receive HSTS header
 nz.search.yahoo.com: max-age too low: 172800
-nzb.cat: did not receive HSTS header
 nzbs.io: could not connect to host
 nzquakes.maori.nz: could not connect to host
 o0o.one: could not connect to host
 oasis.mobi: did not receive HSTS header
 obermeiers.eu: could not connect to host
 oblast45.ru: did not receive HSTS header
 obscuredfiles.com: could not connect to host
 obsydian.org: could not connect to host
@@ -4478,16 +4489,17 @@ optimista.soy: could not connect to host
 optometriepunt.nl: did not receive HSTS header
 optumrxhealthstore.com: could not connect to host
 oracaodocredo.com.br: could not connect to host
 orbiosales.com: could not connect to host
 orbitcom.de: max-age too low: 0
 orbograph-hrcm.com: could not connect to host
 order.one: could not connect to host
 ordereat.fr: could not connect to host
+orderlounge.de: did not receive HSTS header
 orf-digitalsatkarte.at: could not connect to host
 organic-superfood.net: could not connect to host
 organisationsberatung-jacobi.de: did not receive HSTS header
 originpc.com: did not receive HSTS header
 orioncustompcs.com: could not connect to host
 orionfcu.com: did not receive HSTS header
 orionrebellion.com: could not connect to host
 orleika.ml: could not connect to host
@@ -4522,22 +4534,19 @@ overclockers.ge: could not connect to ho
 override.io: did not receive HSTS header
 oversight.io: could not connect to host
 ovuscloud.de: could not connect to host
 ovvy.net: did not receive HSTS header
 owncloud.help: could not connect to host
 ownmovies.fr: could not connect to host
 oxygenabsorbers.com: did not receive HSTS header
 oxynux.fr: could not connect to host
-oyoony.de: could not connect to host
+oyoony.de: did not receive HSTS header
 oyste.in: could not connect to host
-ozonitron.com: could not connect to host
-ozonitron.de: could not connect to host
-ozonitron.eu: could not connect to host
-ozonytron.com: could not connect to host
+p-pc.de: could not connect to host
 p.linode.com: could not connect to host
 p1c.pw: could not connect to host
 p3in.com: did not receive HSTS header
 p8r.de: could not connect to host
 pa.search.yahoo.com: did not receive HSTS header
 pablocamino.tk: could not connect to host
 pacelink.de: could not connect to host
 packlane.com: did not receive HSTS header
@@ -4621,19 +4630,20 @@ pc-nf.de: did not receive HSTS header
 pcfun.net: could not connect to host
 pchax.net: could not connect to host
 pchospital.cc: did not receive HSTS header
 pdamsidoarjo.co.id: could not connect to host
 pdevio.com: could not connect to host
 pdf.yt: could not connect to host
 peaceandwool.com: did not receive HSTS header
 peakapp.nl: could not connect to host
+pebblesdemo.com: could not connect to host
 peerherrmann.de: could not connect to host
 peetah.com: max-age too low: 0
-peissen.com: could not connect to host
+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 118"  data: no]
 pekkapikkarainen.fi: did not receive HSTS header
 pekkarik.ru: could not connect to host
 peliculasaudiolatinoonline.com: could not connect to host
 pengui.uk: could not connect to host
 penguinclientsystem.com: did not receive HSTS header
 pennergold.net: could not connect to host
 pentano.net: could not connect to host
 pentest.nl: could not connect to host
@@ -4681,17 +4691,16 @@ phdsupply.com: did not receive HSTS head
 phillmoore.com: did not receive HSTS header
 phillprice.com: could not connect to host
 philpropertygroup.com: could not connect to host
 phoebe.co.nz: did not receive HSTS header
 phonenumberinfo.co.uk: could not connect to host
 phongmay24h.com: could not connect to host
 photoancestry.com: did not receive HSTS header
 photoblogverona.com: could not connect to host
-phparcade.com: could not connect to host
 phus.lu: did not receive HSTS header
 physicaltherapist.com: did not receive HSTS header
 picardiascr.com: did not receive HSTS header
 pickr.co: did not receive HSTS header
 picotronic.biz: could not connect to host
 picscare.co.uk: did not receive HSTS header
 pieterjangeeroms.me: could not connect to host
 piggott.me.uk: did not receive HSTS header
@@ -4732,16 +4741,17 @@ plaettliaktion.ch: did not receive HSTS 
 planpharmacy.com: could not connect to host
 plass.hamburg: could not connect to host
 platform.lookout.com: could not connect to host
 platomania.eu: did not receive HSTS header
 play.google.com: did not receive HSTS header (error ignored - included regardless)
 playerhunter.com: did not receive HSTS header
 playflick.com: did not receive HSTS header
 playmaker.io: could not connect to host
+playmyplay.com: did not receive HSTS header
 playnation.io: could not connect to host
 playsharp.com: could not connect to host
 pleier-it.de: did not receive HSTS header
 pleier.it: did not receive HSTS header
 plfgr.eu.org: could not connect to host
 plhdb.org: did not receive HSTS header
 plirt.ru: did not receive HSTS header
 plixer.com: did not receive HSTS header
@@ -4780,32 +4790,32 @@ polycoise.com: could not connect to host
 polypho.nyc: could not connect to host
 pompefunebrilariviera.it: could not connect to host
 pompompoes.com: could not connect to host
 ponolau.com: did not receive HSTS header
 pontualcomp.com: could not connect to host
 pony.today: did not receive HSTS header
 poolsandstuff.com: did not receive HSTS header
 poon.tech: could not connect to host
+pornbay.org: could not connect to host
 porno-gif.ru: did not receive HSTS header
 pornstars.me: did not receive HSTS header
 portalplatform.net: could not connect to host
-portalzine.de: did not receive HSTS header
 poshpak.com: max-age too low: 86400
 postcodewise.co.uk: could not connect to host
 posterspy.com: did not receive HSTS header
 postscheduler.org: could not connect to host
 posylka.de: did not receive HSTS header
 potatoheads.net: could not connect to host
 potbar.com: could not connect to host
 potlytics.com: could not connect to host
 potsky.com: did not receive HSTS header
 poussinooz.fr: could not connect to host
 povitria.net: could not connect to host
-power99press.com: did not receive HSTS header
+power99press.com: could not connect to host
 powerplannerapp.com: did not receive HSTS header
 powershift.ne.jp: did not receive HSTS header
 powerxequality.com: could not connect to host
 pozyczka-bez-zaswiadczen.pl: did not receive HSTS header
 ppr-truby.ru: could not connect to host
 ppuu.org: did not receive HSTS header
 ppy3.com: did not receive HSTS header
 pr.search.yahoo.com: did not receive HSTS header
@@ -4855,17 +4865,16 @@ proitconsulting.com.au: could not connec
 project-sparks.eu: did not receive HSTS header
 projectmercury.space: could not connect to host
 prok.pw: could not connect to host
 promecon-gmbh.de: did not receive HSTS header
 prontocleaners.co.uk: could not connect to host
 prontolight.com: did not receive HSTS header
 prontomovers.co.uk: could not connect to host
 propactrading.com: could not connect to host
-property-catalogue.eu: did not receive HSTS header
 prosocialmachines.com: could not connect to host
 prosoft.sk: did not receive HSTS header
 prosperident.com: did not receive HSTS header
 protoyou.de: did not receive HSTS header
 prowhisky.de: did not receive HSTS header
 proximato.com: could not connect to host
 proxybay.al: could not connect to host
 proxybay.club: could not connect to host
@@ -4993,17 +5002,17 @@ razlaw.name: did not receive HSTS header
 rbhighinc.org: could not connect to host
 rbose.org: could not connect to host
 rbti.me: could not connect to host
 rc-rp.com: did not receive HSTS header
 rc4.io: could not connect to host
 rcafox.com: could not connect to host
 rcorporation.be: did not receive HSTS header
 rcpcbd.com: could not connect to host
-rcvd.io: max-age too low: 0
+rcvd.io: did not receive HSTS header
 rdl.at: did not receive HSTS header
 rdns.im: did not receive HSTS header
 re-customer.net: did not receive HSTS header
 reachr.com: could not connect to host
 reader.ga: could not connect to host
 readr.pw: could not connect to host
 reagir43.fr: did not receive HSTS header
 realmic.net: could not connect to host
@@ -5068,37 +5077,37 @@ repaxan.com: could not connect to host
 replacemychina.com: could not connect to host
 reprolife.co.uk: could not connect to host
 res-rheingau.de: did not receive HSTS header
 res42.com: could not connect to host
 resama.eu: did not receive HSTS header
 research.facebook.com: did not receive HSTS header
 reserve-online.net: did not receive HSTS header
 residentsinsurance.co.uk: did not receive HSTS header
-resl20.servehttp.com: could not connect to host
 respice.xyz: could not connect to host
 respostas.com.br: did not receive HSTS header
 restchart.com: did not receive HSTS header
 restrealitaet.de: did not receive HSTS header
 retcor.net: could not connect to host
 revapost.ch: could not connect to host
 revealdata.com: did not receive HSTS header
 revello.org: did not receive HSTS header
 reverie.pw: could not connect to host
+reviewjust.com: did not receive HSTS header
 reviews.anime.my: max-age too low: 5184000
 revtut.net: did not receive HSTS header
 rewardstock.com: max-age too low: 0
 rewopit.net: could not connect to host
-rex.st: could not connect to host
 rhapsodhy.hu: could not connect to host
 rhdigital.pro: could not connect to host
 rhering.de: 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: could not connect to host
 richsiciliano.com: could not connect to host
 richterphilipp.com: could not connect to host
 rid-wan.com: could not connect to host
 rideworks.com: did not receive HSTS header
 ridwan.co: did not receive HSTS header
 riesenmikrobe.de: max-age too low: 86400
 riesenmikroben.at: max-age too low: 86400
 riesenmikroben.de: max-age too low: 86400
@@ -5203,17 +5212,17 @@ ruxit.com: did not receive HSTS header
 rw.search.yahoo.com: did not receive HSTS header
 rx-contact.com: could not connect to host
 rxprep.com: did not receive HSTS header
 rxt.social: could not connect to host
 rxv.cc: could not connect to host
 ryanteck.uk: did not receive HSTS header
 rylin.net: did not receive HSTS header
 rzegroup.com: did not receive HSTS header
-s.how: did not receive HSTS header
+s.how: could not connect to host
 safelist.eu: did not receive HSTS header
 safematix.com: could not connect to host
 safemovescheme.co.uk: did not receive HSTS header
 saferedirect.link: could not connect to host
 safewings-nh.nl: did not receive HSTS header
 sageth.com: max-age too low: 0
 sah3.net: could not connect to host
 sail-nyc.com: did not receive HSTS header
@@ -5231,28 +5240,27 @@ samegoal.org: did not receive HSTS heade
 sametovymesic.cz: could not connect to host
 samfunnet.no: max-age too low: 0
 saml2.com: could not connect to host
 sampcup.com: could not connect to host
 sampoznay.ru: did not receive HSTS header
 samraskauskas.com: could not connect to host
 samsen.club: did not receive HSTS header
 sanasalud.org: could not connect to host
-sanchez.adv.br: could not connect to host
 sandviks.com: could not connect to host
 sanguoxiu.com: could not connect to host
 sanik.my: could not connect to host
 sanmuding.com: could not connect to host
 sansdev.com: could not connect to host
 sansemea.com: did not receive HSTS header
 sansonehowell.com: max-age too low: 0
 sarah-beckett-harpist.com: did not receive HSTS header
 sarahsweetlife.com: could not connect to host
 sarahsweger.com: did not receive HSTS header
-sarisonproductions.com: did not receive HSTS header
+sarisonproductions.com: could not connect to host
 saruwebshop.co.za: could not connect to host
 satanichia.moe: could not connect to host
 satinn.pl: max-age too low: 2592000
 satmep.com: did not receive HSTS header
 satoshicrypt.com: did not receive HSTS header
 satriyowibowo.my.id: did not receive HSTS header
 satsukii.moe: did not receive HSTS header
 saturne.tk: could not connect to host
@@ -5268,16 +5276,17 @@ say-hanabi.com: could not connect to hos
 sazima.ru: did not receive HSTS header
 sbox-archives.com: could not connect to host
 sby.de: did not receive HSTS header
 sc4le.com: could not connect to host
 scannabi.com: could not connect to host
 schadegarant.net: could not connect to host
 schauer.so: could not connect to host
 scherzstempel.de: max-age too low: 86400
+schmitz.link: did not receive HSTS header
 schnell-gold.com: could not connect to host
 schooltrends.co.uk: did not receive HSTS header
 schopenhauer-institut.de: did not receive HSTS header
 schreiber-netzwerk.eu: did not receive HSTS header
 schrodinger.io: could not connect to host
 schroettle.com: did not receive HSTS header
 schulterglatzen-altenwalde.de: could not connect to host
 schultzflorists.com: could not connect to host
@@ -5459,16 +5468,17 @@ silentlink.io: could not connect to host
 silicagelpackets.ca: did not receive HSTS header
 silkebaekken.no: did not receive HSTS header
 silver-drachenkrieger.de: did not receive HSTS header
 silverhome.ninja: could not connect to host
 silverpvp.com: could not connect to host
 simbast.com: could not connect to host
 simbihaiti.com: did not receive HSTS header
 simbolo.co.uk: could not connect to host
+simccorp.com: did not receive HSTS header
 simfri.com: did not receive HSTS header
 simobilklub.si: did not receive HSTS header
 simod.org: could not connect to host
 simon-pokorny.com: did not receive HSTS header
 simon.butcher.name: max-age too low: 2629743
 simongong.net: did not receive HSTS header
 simpan.id: could not connect to host
 simpleai.net: max-age too low: 600
@@ -5476,16 +5486,17 @@ simplelearner.com: could not connect to 
 simplepractice.com: did not receive HSTS header
 simplixos.org: could not connect to host
 simply-premium.com: did not receive HSTS header
 simus.fr: did not receive HSTS header
 sin30.net: could not connect to host
 sincron.org: could not connect to host
 sinful.pw: could not connect to host
 singul4rity.com: could not connect to host
+sinnovate.de: could not connect to host
 sinosky.org: did not receive HSTS header
 siriad.com: could not connect to host
 sirius-lee.net: could not connect to host
 sitennisclub.com: did not receive HSTS header
 siterip.org: could not connect to host
 sites.google.com: did not receive HSTS header (error ignored - included regardless)
 sitesten.com: did not receive HSTS header
 sixtwentyten.com: did not receive HSTS header
@@ -5586,17 +5597,16 @@ soobi.org: did not receive HSTS header
 soondy.com: did not receive HSTS header
 sorincocorada.ro: could not connect to host
 sosaka.ml: could not connect to host
 sosiolog.com: did not receive HSTS header
 sotor.de: did not receive HSTS header
 soucorneteiro.com.br: could not connect to host
 soulema.com: could not connect to host
 soulfulglamour.uk: could not connect to host
-soulmate.dating: did not receive HSTS header
 sourcelair.com: did not receive HSTS header
 southgale.condos: could not connect to host
 southside-crew.club: could not connect to host
 southworcestershiregpservices.co.uk: could not connect to host
 souyar.de: could not connect to host
 souyar.net: could not connect to host
 souyar.us: could not connect to host
 sovereignshare.com: could not connect to host
@@ -5626,17 +5636,16 @@ sperohub.io: could not connect to host
 spiegels.nl: could not connect to host
 spielcasinos.com: did not receive HSTS header
 spikeykc.me: did not receive HSTS header
 spillmaker.no: did not receive HSTS header
 spilsbury.io: could not connect to host
 spirit-dev.net: max-age too low: 0
 spititout.it: could not connect to host
 spittersberger.recipes: did not receive HSTS header
-spodelime.com: did not receive HSTS header
 spokonline.com: could not connect to host
 sponsortobias.com: could not connect to host
 sportchirp-internal.azurewebsites.net: did not receive HSTS header
 sporthit.ru: did not receive HSTS header
 sportwette.eu: did not receive HSTS header
 spot-events.com: could not connect to host
 spotifyripper.tk: could not connect to host
 spotlightsrule.ddns.net: could not connect to host
@@ -5672,38 +5681,39 @@ stadtbauwerk.at: did not receive HSTS he
 staffjoystaging.com: could not connect to host
 stahl.xyz: could not connect to host
 stalkerhispano.com: max-age too low: 0
 stalkerteam.pl: did not receive HSTS header
 stalschermer.nl: could not connect to host
 stamonicatourandtravel.com: could not connect to host
 standardssuck.org: did not receive HSTS header
 standingmist.com: did not receive HSTS header
+star-citizen.wiki: did not receive HSTS header
 starandshield.com: did not receive HSTS header
 starapple.nl: did not receive HSTS header
 starfeeling.net: could not connect to host
 stargatepartners.com: did not receive HSTS header
 starmusic.ga: did not receive HSTS header
 starttraffic.com: did not receive HSTS header
 startuponcloud.com: max-age too low: 2678400
 startuppeople.co.uk: could not connect to host
 stash.ai: did not receive HSTS header
+stassi.ch: could not connect to host
 state-sponsored-actors.net: could not connect to host
 statementinsertsforless.com: did not receive HSTS header
 stateofexception.io: could not connect to host
 static.or.at: did not receive HSTS header
 staticanime.net: could not connect to host
 stationaryjourney.com: did not receive HSTS header
 stationcharlie.co.za: did not receive HSTS header
 stationnementdenuit.ca: did not receive HSTS header
 status-sprueche.de: did not receive HSTS header
 statuschecks.net: could not connect to host
 stayokhotelscdc-mailing.com: could not connect to host
 stcomex.com: did not receive HSTS header
-steckregal-super.de: did not receive HSTS header
 steelbea.ms: could not connect to host
 stefanweiser.de: did not receive HSTS header
 stepbystep3d.com: did not receive HSTS header
 stephanierxo.com: did not receive HSTS header
 stephanos.me: could not connect to host
 stephenandburns.com: did not receive HSTS header
 stevensononthe.net: did not receive HSTS header
 stewartremodelingadvantage.com: did not receive HSTS header
@@ -5728,16 +5738,17 @@ storeden.com: did not receive HSTS heade
 storefrontify.com: did not receive HSTS header
 storiesofhealth.org: could not connect to host
 stormhub.org: could not connect to host
 stqry.com: did not receive HSTS header
 str0.at: did not receive HSTS header
 strasweb.fr: did not receive HSTS header
 strbt.de: could not connect to host
 strchr.com: did not receive HSTS header
+stream.pub: did not receive HSTS header
 streamingeverywhere.com: could not connect to host
 streamingmagazin.de: could not connect to host
 streams.dyndns.org: could not connect to host
 strictlynormal.com: could not connect to host
 strictlysudo.com: could not connect to host
 strivephysmed.com: did not receive HSTS header
 stroeercrm.de: could not connect to host
 strongest-privacy.com: could not connect to host
@@ -5764,52 +5775,52 @@ subsys.no: did not receive HSTS header
 subtitle.rip: could not connect to host
 sudo.li: did not receive HSTS header
 suian.or.jp: max-age too low: 86400
 suite73.org: could not connect to host
 summitbankofkc.com: did not receive HSTS header
 sumoatm.com: did not receive HSTS header
 sumoscout.de: did not receive HSTS header
 suncountrymarine.com: did not receive HSTS header
-sunflyer.cn: did not receive HSTS header
 sunfulong.me: could not connect to host
 sunnyfruit.ru: could not connect to host
 sunshinepress.org: could not connect to host
 sunyanzi.tk: could not connect to host
 suos.io: could not connect to host
 supcro.com: could not connect to host
 super-erotica.ru: did not receive HSTS header
 super-garciniaslim.com: could not connect to host
 super-radiant-skin.com: could not connect to host
 super-ripped-power.com: could not connect to host
 super-slim-coffee.com: could not connect to host
 superbabysitting.ch: could not connect to host
 superbike.tw: could not connect to host
 supereight.net: did not receive HSTS header
 superiorfloridavacation.com: did not receive HSTS header
 superklima.ro: did not receive HSTS header
+superlandnetwork.de: could not connect to host
 supersalescontest.nl: did not receive HSTS header
 superschnappchen.de: could not connect to host
 supersecurefancydomain.com: could not connect to host
 supertramp-dafonseca.com: did not receive HSTS header
 superuser.fi: could not connect to host
 superwally.org: could not connect to host
 suprlink.net: could not connect to host
 supweb.ovh: did not receive HSTS header
+surasak.io: could not connect to host
 surasak.org: could not connect to host
 surfeasy.com: did not receive HSTS header
 surfone-leucate.com: did not receive HSTS header
 sushifrick.de: could not connect to host
 suzukikenichi.com: did not receive HSTS header
 sv.search.yahoo.com: did not receive HSTS header
 svatba-frantovi.cz: could not connect to host
 svenluijten.com: did not receive HSTS header
 svenskacasino.com: did not receive HSTS header
 sviz.pro: could not connect to host
-sw-servers.net: did not receive HSTS header
 swdatlantico.pt: could not connect to host
 sweetll.me: could not connect to host
 sweetstreats.ca: could not connect to host
 swimbee.nl: did not receive HSTS header
 swimming.ca: did not receive HSTS header
 swmd5c.org: did not receive HSTS header
 swu.party: could not connect to host
 sxbk.pw: could not connect to host
@@ -5853,16 +5864,17 @@ tageau.com: could not connect to host
 taglondon.org: did not receive HSTS header
 tahf.net: did not receive HSTS header
 tailify.com: did not receive HSTS header
 tails.com.ar: did not receive HSTS header
 talado.gr: could not connect to host
 tales-of-interia.de: could not connect to host
 talheim-records.ca: could not connect to host
 talk.google.com: did not receive HSTS header (error ignored - included regardless)
+talkitup.online: did not receive HSTS header
 talklifestyle.nl: could not connect to host
 tallr.se: could not connect to host
 tallshoe.com: could not connect to host
 tamex.xyz: could not connect to host
 tanak3n.xyz: could not connect to host
 tandarts-haarlem.nl: did not receive HSTS header
 tangel.me: could not connect to host
 tangibilizing.com: could not connect to host
@@ -5935,16 +5947,17 @@ telefonnummer.online: could not connect 
 telefoonnummerinfo.nl: could not connect to host
 telescam.com: could not connect to host
 tellingua.com: did not receive HSTS header
 temehu.com: did not receive HSTS header
 tempcraft.net: could not connect to host
 tempus-aquilae.de: could not connect to host
 tendertool.nl: could not connect to host
 tengroup.com: did not receive HSTS header
+tenmm.com: could not connect to host
 tenni.xyz: could not connect to host
 tensei-slime.com: did not receive HSTS header
 tensionup.com: could not connect to host
 tenthousandcoffees.com: did not receive HSTS header
 tentins.com: could not connect to host
 teos.online: could not connect to host
 terra.by: did not receive HSTS header
 terrax.berlin: could not connect to host
@@ -5964,17 +5977,17 @@ tfl.lu: did not receive HSTS header
 tgr.re: could not connect to host
 thagki9.com: could not connect to host
 thai.land: did not receive HSTS header
 thaihostcool.com: did not receive HSTS header
 thailandpropertylistings.com: did not receive HSTS header
 the-construct.com: could not connect to host
 the-delta.net.eu.org: could not connect to host
 the-sky-of-valkyries.com: could not connect to host
-theamateurs.net: did not receive HSTS header
+theamateurs.net: could not connect to host
 theater.cf: could not connect to host
 theberkshirescompany.com: could not connect to host
 thebigfail.net: could not connect to host
 thebrightons.co.uk: did not receive HSTS header
 thebrotherswarde.com: could not connect to host
 thecapitalbank.com: did not receive HSTS header
 thecharlestonwaldorf.com: did not receive HSTS header
 theclementinebutchers.com: could not connect to host
@@ -5985,45 +5998,48 @@ theendofzion.com: did not receive HSTS h
 theescapistswiki.com: could not connect to host
 thefarbeyond.com: could not connect to host
 theflowerbasketonline.com: could not connect to host
 thefootballanalyst.com: did not receive HSTS header
 thefrozenfire.com: did not receive HSTS header
 thefutureharrills.com: could not connect to host
 thegcccoin.com: did not receive HSTS header
 thego2swatking.com: could not connect to host
+thegoldregister.co.uk: did not receive HSTS header
 thehiddenbay.eu: could not connect to host
 thehiddenbay.me: could not connect to host
 thehiddenbay.net: could not connect to host
 thehighersideclothing.com: did not receive HSTS header
 thehistory.me: could not connect to host
 thehonorguard.org: did not receive HSTS header
 thehoopsarchive.com: could not connect to host
 theinvisibletrailer.com: could not connect to host
 thejserver.de: could not connect to host
 thelapine.ca: did not receive HSTS header
+themanufacturingmarketingagency.com: could not connect to host
 themarble.co: could not connect to host
 themicrocapital.com: could not connect to host
 themimitoof.fr: did not receive HSTS header
 themoderate.xyz: could not connect to host
 thenextstep.events: could not connect to host
 theodorejones.info: could not connect to host
 thepartywarehouse.co.uk: did not receive HSTS header
 thepcweb.tk: could not connect to host
 thepiratebay.al: could not connect to host
 thepiratebay.poker: could not connect to host
 thepiratebay.tech: could not connect to host
-therevenge.me: did not receive HSTS header
 therewill.be: could not connect to host
+theroyalmarinescharity.org.uk: could not connect to host
 thestack.xyz: could not connect to host
 thestagchorleywood.co.uk: did not receive HSTS header
 thetradinghall.com: could not connect to host
 theurbanyoga.com: did not receive HSTS header
 thevintagenews.com: max-age too low: 0
 thewebfellas.com: did not receive HSTS header
+theworkingeye.nl: could not connect to host
 thewp.pro: could not connect to host
 thezonders.com: did not receive HSTS header
 thierfreund.de: could not connect to host
 thinkcoding.de: could not connect to host
 thinkcoding.org: could not connect to host
 thinkdo.jp: could not connect to host
 thinlyveiledcontempt.com: could not connect to host
 thirdpartytrade.com: did not receive HSTS header
@@ -6092,16 +6108,17 @@ titties.ml: could not connect to host
 tjc.wiki: could not connect to host
 tkappertjedemetamorfose.nl: could not connect to host
 tlcdn.net: could not connect to host
 tlo.hosting: could not connect to host
 tlo.link: did not receive HSTS header
 tlo.network: could not connect to host
 tls.li: could not connect to host
 tlsbv.nl: did not receive HSTS header
+tlshost.net: could not connect to host
 tm-solutions.eu: did not receive HSTS header
 tmaward.net: could not connect to host
 tmitchell.io: could not connect to host
 tmprod.com: did not receive HSTS header
 tncnanet.com.br: could not connect to host
 tnrsca.jp: did not receive HSTS header
 toast.al: could not connect to host
 tobias-bielefeld.de: did not receive HSTS header
@@ -6177,17 +6194,16 @@ traumhuetten.de: could not connect to ho
 travality.ru: did not receive HSTS header
 travel-kuban.ru: did not receive HSTS header
 travelinsurance.co.nz: did not receive HSTS header
 treasuredinheritanceministry.com: did not receive HSTS header
 treatprostatewithhifu.com: could not connect to host
 treeby.net: could not connect to host
 trell.co.in: did not receive HSTS header
 trendberry.ru: could not connect to host
-tribaldos.com: did not receive HSTS header
 trileg.net: could not connect to host
 trinityaffirmations.com: max-age too low: 0
 trinitycore.org: max-age too low: 2592000
 tripdelta.com: did not receive HSTS header
 tripinsider.club: did not receive HSTS header
 trixies-wish.nz: could not connect to host
 troi.de: did not receive HSTS header
 trollme.me: could not connect to host
@@ -6272,16 +6288,17 @@ uberfunction.com: did not receive HSTS h
 ubi.gg: could not connect to host
 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
 ueu.me: could not connect to host
 ufgaming.com: did not receive HSTS header
 ufotable.uk: could not connect to host
+ugo.ninja: could not connect to host
 uhm.io: could not connect to host
 ui8.net: max-age too low: 86400
 ukas.com: did not receive HSTS header
 ukdropshipment.co.uk: could not connect to host
 ukdropshipment.com: could not connect to host
 ukk.dk: did not receive HSTS header
 ukrgadget.com: could not connect to host
 ulabox.cat: did not receive HSTS header
@@ -6332,17 +6349,16 @@ unitrade-425.co.za: did not receive HSTS
 university4industry.com: did not receive HSTS header
 univz.com: could not connect to host
 unknownphenomena.net: could not connect to host
 unmanaged.space: did not receive HSTS header
 unplugg3r.dk: could not connect to host
 unravel.ie: could not connect to host
 unsystem.net: did not receive HSTS header
 unwiredbrain.com: could not connect to host
-unwomen.is: did not receive HSTS header
 unyq.me: could not connect to host
 uonstaffhub.com: could not connect to host
 uow.ninja: could not connect to host
 up1.ca: could not connect to host
 upaknship.com: did not receive HSTS header
 upboard.jp: could not connect to host
 upldr.pw: could not connect to host
 uporoops.com: could not connect to host
@@ -6391,17 +6407,16 @@ vaelma.fi: max-age too low: 600
 valethound.com: could not connect to host
 valkyrja.xyz: did not receive HSTS header
 valleyridgepta.org: could not connect to host
 vallis.net: did not receive HSTS header
 valmagus.com: could not connect to host
 vampirism.eu: could not connect to host
 vanacht.co.za: did not receive HSTS header
 vanderkley.it: could not connect to host
-vanderstraeten.dynv6.net: could not connect to host
 vanestack.com: could not connect to host
 vanetv.com: could not connect to host
 vanitas.xyz: could not connect to host
 vanitynailworkz.com: could not connect to host
 vansieleghem.com: could not connect to host
 vasanth.org: could not connect to host
 vbulletin-russia.com: could not connect to host
 vbulletinrussia.com: could not connect to host
@@ -6412,16 +6427,17 @@ veblen.com: could not connect to host
 vechkasov.ru: did not receive HSTS header
 vedatkamer.com: did not receive HSTS header
 vega.dyndns.info: could not connect to host
 veggiefasting.com: could not connect to host
 vehent.org: did not receive HSTS header
 vemokin.net: did not receive HSTS header
 venixplays-stream.ml: could not connect to host
 ventizo.com: did not receive HSTS header
+venturepro.com: could not connect to host
 verifikatorindonesia.com: could not connect to host
 vermontcareergateway.org: could not connect to host
 versia.ru: did not receive HSTS header
 veryhax.de: could not connect to host
 vestacp.top: could not connect to host
 vetdnacenter.com: did not receive HSTS header
 veterinaire-cazeres-foucault.fr: could not connect to host
 vetmgmt.com: could not connect to host
@@ -6449,18 +6465,19 @@ villenvinkit.com: did not receive HSTS h
 vinasec.se: could not connect to host
 vincentkooijman.at: did not receive HSTS header
 vincentkooijman.nl: did not receive HSTS header
 vintageheartcoffee.com: did not receive HSTS header
 vio.no: did not receive HSTS header
 violenceinterrupted.org: did not receive HSTS header
 viperdns.com: could not connect to host
 viphospitality.se: could not connect to host
+vipi.es: could not connect to host
 vipmusic.ga: could not connect to host
-virginiacrimeanalysisnetwork.org: could not connect to host
+virginiacrimeanalysisnetwork.org: did not receive HSTS header
 visitbroadstairs.com: could not connect to host
 vissanum.com: did not receive HSTS header
 vistaalmar.es: could not connect to host
 vistarait.com: did not receive HSTS header
 vitagenda.nl: could not connect to host
 vitalita.cz: did not receive HSTS header
 vitalorange.com: did not receive HSTS header
 vitta.me: did not receive HSTS header
@@ -6526,30 +6543,31 @@ wallabag.org: did not receive HSTS heade
 wallet.google.com: did not receive HSTS header (error ignored - included regardless)
 wallsblog.dk: could not connect to host
 walnutgaming.co.uk: could not connect to host
 walterlynnmosley.com: did not receive HSTS header
 wan.pp.ua: could not connect to host
 wanban.io: could not connect to host
 wangjun.me: did not receive HSTS header
 wangqiliang.xn--fiqs8s: could not connect to host
-wangzuan168.cc: did not receive HSTS header
+wangzuan168.cc: could not connect to host
 wanybug.cn: could not connect to host
 wapjt.cn: could not connect to host
 wapt.fr: did not receive HSTS header
 warandpeace.xyz: could not connect to host
 warehost.de: did not receive HSTS header
 warezaddict.com: could not connect to host
 warhistoryonline.com: max-age too low: 0
 warmservers.com: could not connect to host
 warped.com: did not receive HSTS header
 warrencreative.com: did not receive HSTS header
 warsentech.com: could not connect to host
 washingtonviews.com: did not receive HSTS header
 watchium.com: did not receive HSTS header
+waterforlife.net.au: could not connect to host
 watersportmarkt.net: 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
 we-bb.com: could not connect to host
 wear2work.nl: did not receive HSTS header
 weaverhairextensions.nl: could not connect to host
 web-industry.fr: could not connect to host
@@ -6627,31 +6645,29 @@ whitestagforge.com: did not receive HSTS
 whoclicks.net: could not connect to host
 whoisapi.online: could not connect to host
 wholebites.com: did not receive HSTS header
 whoneedstobeprimaried.today: could not connect to host
 whoshotya.de: did not receive HSTS header
 whysuck.com: could not connect to host
 wienholding.at: max-age too low: 0
 wieninternational.at: did not receive HSTS header
-wifree.lv: could not connect to host
 wiire.me: could not connect to host
 wikiclash.info: could not connect to host
 wikimilk.org: could not connect to host
 wikisports.eu: could not connect to host
 wildbee.org: could not connect to host
 wilf1rst.com: could not connect to host
 wilfrid-calixte.fr: could not connect to host
 willcipriano.com: could not connect to host
 william.si: did not receive HSTS header
 williamsapiens.com: could not connect to host
 willosagiede.com: did not receive HSTS header
 winaes.com: did not receive HSTS header
 winclient.cn: could not connect to host
-windows10insider.com: did not receive HSTS header
 windowsphoneblog.it: max-age too low: 0
 winebid.com: could not connect to host
 winecodeavocado.com: could not connect to host
 winged.io: could not connect to host
 wingumd.net: could not connect to host
 winpack.cf: could not connect to host
 winpack.eu.org: could not connect to host
 winsec.nl: could not connect to host
@@ -6734,17 +6750,16 @@ www.jitsi.org: did not receive HSTS head
 www.ledgerscope.net: could not connect to host
 www.logentries.com: did not receive HSTS header
 www.makeyourlaws.org: could not connect to host
 www.moneybookers.com: did not receive HSTS header
 www.neonisi.com: could not connect to host
 www.paycheckrecords.com: did not receive HSTS header
 www.rme.li: did not receive HSTS header
 www.sandbox.mydigipass.com: could not connect to host
-www.sb: could not connect to host
 www.simbolo.co.uk: could not connect to host
 www.surfeasy.com: did not receive HSTS header
 www.zenpayroll.com: did not receive HSTS header
 www3.info: did not receive HSTS header
 wxukang.cn: could not connect to host
 wybmabiity.com: max-age too low: 0
 wygluszanie.eu: did not receive HSTS header
 x-power-detox.com: could not connect to host
@@ -6772,16 +6787,17 @@ xiaody.me: could not connect to host
 xiaolvmu.com: could not connect to host
 xiaolvmu.me: could not connect to host
 xiaoxiao.im: could not connect to host
 xiazhanjian.com: could not connect to host
 ximens.me: could not connect to host
 xisa.it: could not connect to host
 xiyu.moe: could not connect to host
 xjoin.de: could not connect to host
+xlii.io: could not connect to host
 xliu.cf: max-age too low: 0
 xmerak.com: could not connect to host
 xmonk.org: could not connect to host
 xmr.my: did not receive HSTS header
 xn--3lqp21gwna.xn--fiqs8s: could not connect to host
 xn--3lqp21gwna.xn--fiqz9s: could not connect to host
 xn--3lqt7ir4md4tzwa.cn: did not receive HSTS header
 xn--3lqt7ir4md4tzwa.xn--fiqs8s: did not receive HSTS header
@@ -6883,39 +6899,39 @@ youon.tokyo: could not connect to host
 yourbapp.ch: could not connect to host
 yourcomputer.expert: did not receive HSTS header
 yoursecondphone.co: could not connect to host
 yourstrongbox.com: could not connect to host
 ypiresia.fr: could not connect to host
 ytcuber.xyz: could not connect to host
 yu7.jp: did not receive HSTS header
 yuan.ga: did not receive HSTS header
-yuhen.ru: did not receive HSTS header
+yuhen.ru: could not connect to host
 yuko.moe: could not connect to host
 yummyfamilyrecipes.com: could not connect to host
 yunpan.blue: could not connect to host
 yunzhu.li: did not receive HSTS header
 yunzhu.org: could not connect to host
 yuriykuzmin.com: could not connect to host
 yutabon.com: could not connect to host
+yutangyun.com: could not connect to host
 yuushou.com: max-age too low: 0
 yux.io: did not receive HSTS header
 yuyu.io: could not connect to host
 ywei.org: could not connect to host
 yyyy.xyz: could not connect to host
 yzal.io: could not connect to host
 z3liff.com: could not connect to host
 z3liff.net: could not connect to host
 za.search.yahoo.com: did not receive HSTS header
 zachgibbens.org: could not connect to host
 zadieheimlich.com: did not receive HSTS header
 zahe.me: could not connect to host
 zahyantechnologies.com: could not connect to host
 zakoncontrol.com: could not connect to host
-zamis.net: did not receive HSTS header
 zamorano.edu: could not connect to host
 zamos.ru: max-age too low: 0
 zaneweb.org: did not receive HSTS header
 zanthra.com: could not connect to host
 zao.fi: could not connect to host
 zap.yt: could not connect to host
 zarooba.com: could not connect to host
 zary.me: did not receive HSTS header
@@ -6933,17 +6949,16 @@ zelfstandigemakelaars.net: could not con
 zenghx.tk: could not connect to host
 zenpayroll.com: did not receive HSTS header
 zentraler-kreditausschuss.de: did not receive HSTS header
 zentralwolke.de: did not receive HSTS header
 zera.com.au: could not connect to host
 zerekin.net: did not receive HSTS header
 zeroday.sk: did not receive HSTS header
 zerolab.org: could not connect to host
-zeroml.ml: could not connect to host
 zertitude.com: could not connect to host
 zerudi.com: did not receive HSTS header
 zett4.me: could not connect to host
 zeytin.pro: could not connect to host
 zh.search.yahoo.com: did not receive HSTS header
 zh1.li: could not connect to host
 zhangzifan.com: did not receive HSTS header
 zhaojin97.cn: did not receive HSTS header
--- 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(1511022268929000);
+const PRTime gPreloadListExpirationTime = INT64_C(1511108095113000);
 
 static const char kSTSHostTable[] = {
   /* "0.me.uk", true */ '0', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "007-preisvergleich.de", true */ '0', '0', '7', '-', 'p', 'r', 'e', 'i', 's', 'v', 'e', 'r', 'g', 'l', 'e', 'i', 'c', 'h', '.', 'd', 'e', '\0',
   /* "00f.net", true */ '0', '0', 'f', '.', 'n', 'e', 't', '\0',
   /* "00wbf.com", true */ '0', '0', 'w', 'b', 'f', '.', 'c', 'o', 'm', '\0',
   /* "0100dev.com", true */ '0', '1', '0', '0', 'd', 'e', 'v', '.', 'c', 'o', 'm', '\0',
   /* "0100dev.nl", true */ '0', '1', '0', '0', 'd', 'e', 'v', '.', 'n', 'l', '\0',
@@ -429,28 +429,28 @@ static const char kSTSHostTable[] = {
   /* "aboutspice.com", true */ 'a', 'b', 'o', 'u', 't', 's', 'p', 'i', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "abrilect.com", true */ 'a', 'b', 'r', 'i', 'l', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "abseits.org", true */ 'a', 'b', 's', 'e', 'i', 't', 's', '.', 'o', 'r', 'g', '\0',
   /* "absolem.cc", true */ 'a', 'b', 's', 'o', 'l', 'e', 'm', '.', 'c', 'c', '\0',
   /* "absoluterush.net", true */ 'a', 'b', 's', 'o', 'l', 'u', 't', 'e', 'r', 'u', 's', 'h', '.', 'n', 'e', 't', '\0',
   /* "absolutewaterproofingsolutions.com", true */ 'a', 'b', 's', 'o', 'l', 'u', 't', 'e', 'w', 'a', 't', 'e', 'r', 'p', 'r', 'o', 'o', 'f', 'i', 'n', 'g', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "abstraction21.com", true */ 'a', 'b', 's', 't', 'r', 'a', 'c', 't', 'i', 'o', 'n', '2', '1', '.', 'c', 'o', 'm', '\0',
   /* "absynthe-inquisition.fr", true */ 'a', 'b', 's', 'y', 'n', 't', 'h', 'e', '-', 'i', 'n', 'q', 'u', 'i', 's', 'i', 't', 'i', 'o', 'n', '.', 'f', 'r', '\0',
+  /* "abthorpe.org", true */ 'a', 'b', 't', 'h', 'o', 'r', 'p', 'e', '.', 'o', 'r', 'g', '\0',
   /* "abulanov.com", true */ 'a', 'b', 'u', 'l', 'a', 'n', 'o', 'v', '.', 'c', 'o', 'm', '\0',
   /* "abundent.com", true */ 'a', 'b', 'u', 'n', 'd', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "abuse.io", true */ 'a', 'b', 'u', 's', 'e', '.', 'i', 'o', '\0',
   /* "abyssproject.net", true */ 'a', 'b', 'y', 's', 's', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'n', 'e', 't', '\0',
   /* "ac-admin.pl", true */ 'a', 'c', '-', 'a', 'd', 'm', 'i', 'n', '.', 'p', 'l', '\0',
   /* "ac-epmservices.com", true */ 'a', 'c', '-', 'e', 'p', 'm', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "ac-town.com", true */ 'a', 'c', '-', 't', 'o', 'w', 'n', '.', 'c', 'o', 'm', '\0',
   /* "academialowcost.com.br", true */ 'a', 'c', 'a', 'd', 'e', 'm', 'i', 'a', 'l', 'o', 'w', 'c', 'o', 's', 't', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "academytv.com.au", true */ 'a', 'c', 'a', 'd', 'e', 'm', 'y', 't', 'v', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "acaonegocios.com.br", true */ 'a', 'c', 'a', 'o', 'n', 'e', 'g', 'o', 'c', 'i', 'o', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "acara-yoga.de", true */ 'a', 'c', 'a', 'r', 'a', '-', 'y', 'o', 'g', 'a', '.', 'd', 'e', '\0',
-  /* "acbc.ie", true */ 'a', 'c', 'b', 'c', '.', 'i', 'e', '\0',
   /* "acbrussels-used.be", true */ 'a', 'c', 'b', 'r', 'u', 's', 's', 'e', 'l', 's', '-', 'u', 's', 'e', 'd', '.', 'b', 'e', '\0',
   /* "accelerateyourworld.org", true */ 'a', 'c', 'c', 'e', 'l', 'e', 'r', 'a', 't', 'e', 'y', 'o', 'u', 'r', 'w', 'o', 'r', 'l', 'd', '.', 'o', 'r', 'g', '\0',
   /* "accentthailand.com", true */ 'a', 'c', 'c', 'e', 'n', 't', 't', 'h', 'a', 'i', 'l', 'a', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "accesloges.com", true */ 'a', 'c', 'c', 'e', 's', 'l', 'o', 'g', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "accessauto-occasions.be", true */ 'a', 'c', 'c', 'e', 's', 's', 'a', 'u', 't', 'o', '-', 'o', 'c', 'c', 'a', 's', 'i', 'o', 'n', 's', '.', 'b', 'e', '\0',
   /* "accessmy.net", true */ 'a', 'c', 'c', 'e', 's', 's', 'm', 'y', '.', 'n', 'e', 't', '\0',
   /* "accordiondoor.com", true */ 'a', 'c', 'c', 'o', 'r', 'd', 'i', 'o', 'n', 'd', 'o', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "accounts.firefox.com", true */ 'a', 'c', 'c', 'o', 'u', 'n', 't', 's', '.', 'f', 'i', 'r', 'e', 'f', 'o', 'x', '.', 'c', 'o', 'm', '\0',
@@ -508,16 +508,17 @@ static const char kSTSHostTable[] = {
   /* "ad-notam.it", true */ 'a', 'd', '-', 'n', 'o', 't', 'a', 'm', '.', 'i', 't', '\0',
   /* "ad-notam.pt", true */ 'a', 'd', '-', 'n', 'o', 't', 'a', 'm', '.', 'p', 't', '\0',
   /* "ad-notam.us", true */ 'a', 'd', '-', 'n', 'o', 't', 'a', 'm', '.', 'u', 's', '\0',
   /* "ada.gov", true */ 'a', 'd', 'a', '.', 'g', 'o', 'v', '\0',
   /* "adalis.org", true */ 'a', 'd', 'a', 'l', 'i', 's', '.', 'o', 'r', 'g', '\0',
   /* "adambyers.com", true */ 'a', 'd', 'a', 'm', 'b', 'y', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "adamdixon.co.uk", true */ 'a', 'd', 'a', 'm', 'd', 'i', 'x', 'o', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "adamek.online", true */ 'a', 'd', 'a', 'm', 'e', 'k', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
+  /* "adamgold.net", false */ 'a', 'd', 'a', 'm', 'g', 'o', 'l', 'd', '.', 'n', 'e', 't', '\0',
   /* "adamkaminski.com", true */ 'a', 'd', 'a', 'm', 'k', 'a', 'm', 'i', 'n', 's', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "adamoutler.com", true */ 'a', 'd', 'a', 'm', 'o', 'u', 't', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "adams.dk", true */ 'a', 'd', 'a', 'm', 's', '.', 'd', 'k', '\0',
   /* "adamstas.com", true */ 'a', 'd', 'a', 'm', 's', 't', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "adamwilcox.org", true */ 'a', 'd', 'a', 'm', 'w', 'i', 'l', 'c', 'o', 'x', '.', 'o', 'r', 'g', '\0',
   /* "adapt-elektronik.com", true */ 'a', 'd', 'a', 'p', 't', '-', 'e', 'l', 'e', 'k', 't', 'r', 'o', 'n', 'i', 'k', '.', 'c', 'o', 'm', '\0',
   /* "adapt.de", true */ 'a', 'd', 'a', 'p', 't', '.', 'd', 'e', '\0',
   /* "adapti.de", true */ 'a', 'd', 'a', 'p', 't', 'i', '.', 'd', 'e', '\0',
@@ -748,17 +749,16 @@ static const char kSTSHostTable[] = {
   /* "akdigitalegesellschaft.de", false */ 'a', 'k', 'd', 'i', 'g', 'i', 't', 'a', 'l', 'e', 'g', 'e', 's', 'e', 'l', 'l', 's', 'c', 'h', 'a', 'f', 't', '.', 'd', 'e', '\0',
   /* "akelius.de", false */ 'a', 'k', 'e', 'l', 'i', 'u', 's', '.', 'd', 'e', '\0',
   /* "akhilindurti.com", false */ 'a', 'k', 'h', 'i', 'l', 'i', 'n', 'd', 'u', 'r', 't', 'i', '.', 'c', 'o', 'm', '\0',
   /* "akhras.at", true */ 'a', 'k', 'h', 'r', 'a', 's', '.', 'a', 't', '\0',
   /* "akihito.com", true */ 'a', 'k', 'i', 'h', 'i', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "akita-boutique.com", true */ 'a', 'k', 'i', 't', 'a', '-', 'b', 'o', 'u', 't', 'i', 'q', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "akita-stream.com", true */ 'a', 'k', 'i', 't', 'a', '-', 's', 't', 'r', 'e', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "akovana.com", true */ 'a', 'k', 'o', 'v', 'a', 'n', 'a', '.', 'c', 'o', 'm', '\0',
-  /* "akoww.de", true */ 'a', 'k', 'o', 'w', 'w', '.', 'd', 'e', '\0',
   /* "akoya.fi", true */ 'a', 'k', 'o', 'y', 'a', '.', 'f', 'i', '\0',
   /* "akpwebdesign.com", true */ 'a', 'k', 'p', 'w', 'e', 'b', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
   /* "akr.io", true */ 'a', 'k', 'r', '.', 'i', 'o', '\0',
   /* "akropolis-ravensburg.de", true */ 'a', 'k', 'r', 'o', 'p', 'o', 'l', 'i', 's', '-', 'r', 'a', 'v', 'e', 'n', 's', 'b', 'u', 'r', 'g', '.', 'd', 'e', '\0',
   /* "akselinurmio.fi", true */ 'a', 'k', 's', 'e', 'l', 'i', 'n', 'u', 'r', 'm', 'i', 'o', '.', 'f', 'i', '\0',
   /* "akstudentsfirst.org", true */ 'a', 'k', 's', 't', 'u', 'd', 'e', 'n', 't', 's', 'f', 'i', 'r', 's', 't', '.', 'o', 'r', 'g', '\0',
   /* "aktiv-naturheilmittel.at", true */ 'a', 'k', 't', 'i', 'v', '-', 'n', 'a', 't', 'u', 'r', 'h', 'e', 'i', 'l', 'm', 'i', 't', 't', 'e', 'l', '.', 'a', 't', '\0',
   /* "aktiv-naturheilmittel.ch", true */ 'a', 'k', 't', 'i', 'v', '-', 'n', 'a', 't', 'u', 'r', 'h', 'e', 'i', 'l', 'm', 'i', 't', 't', 'e', 'l', '.', 'c', 'h', '\0',
@@ -770,17 +770,16 @@ static const char kSTSHostTable[] = {
   /* "al-f.net", true */ 'a', 'l', '-', 'f', '.', 'n', 'e', 't', '\0',
   /* "al3xpro.com", true */ 'a', 'l', '3', 'x', 'p', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "aladdinschools.appspot.com", true */ 'a', 'l', 'a', 'd', 'd', 'i', 'n', 's', 'c', 'h', 'o', 'o', 'l', 's', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "alainbaechlerphotography.ch", true */ 'a', 'l', 'a', 'i', 'n', 'b', 'a', 'e', 'c', 'h', 'l', 'e', 'r', 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'c', 'h', '\0',
   /* "alainwolf.ch", true */ 'a', 'l', 'a', 'i', 'n', 'w', 'o', 'l', 'f', '.', 'c', 'h', '\0',
   /* "alair.cn", false */ 'a', 'l', 'a', 'i', 'r', '.', 'c', 'n', '\0',
   /* "alamgir.works", true */ 'a', 'l', 'a', 'm', 'g', 'i', 'r', '.', 'w', 'o', 'r', 'k', 's', '\0',
   /* "alaninkenya.org", true */ 'a', 'l', 'a', 'n', 'i', 'n', 'k', 'e', 'n', 'y', 'a', '.', 'o', 'r', 'g', '\0',
-  /* "alaricfavier.eu", true */ 'a', 'l', 'a', 'r', 'i', 'c', 'f', 'a', 'v', 'i', 'e', 'r', '.', 'e', 'u', '\0',
   /* "alasta.info", true */ 'a', 'l', 'a', 's', 't', 'a', '.', 'i', 'n', 'f', 'o', '\0',
   /* "alauda-home.de", true */ 'a', 'l', 'a', 'u', 'd', 'a', '-', 'h', 'o', 'm', 'e', '.', 'd', 'e', '\0',
   /* "alaundeil.xyz", true */ 'a', 'l', 'a', 'u', 'n', 'd', 'e', 'i', 'l', '.', 'x', 'y', 'z', '\0',
   /* "alb-flirt.de", true */ 'a', 'l', 'b', '-', 'f', 'l', 'i', 'r', 't', '.', 'd', 'e', '\0',
   /* "albersdruck.de", true */ 'a', 'l', 'b', 'e', 'r', 's', 'd', 'r', 'u', 'c', 'k', '.', 'd', 'e', '\0',
   /* "albion2.org", true */ 'a', 'l', 'b', 'i', 'o', 'n', '2', '.', 'o', 'r', 'g', '\0',
   /* "alboweb.nl", true */ 'a', 'l', 'b', 'o', 'w', 'e', 'b', '.', 'n', 'l', '\0',
   /* "albuic.tk", true */ 'a', 'l', 'b', 'u', 'i', 'c', '.', 't', 'k', '\0',
@@ -913,17 +912,16 @@ static const char kSTSHostTable[] = {
   /* "alphabrock.cn", true */ 'a', 'l', 'p', 'h', 'a', 'b', 'r', 'o', 'c', 'k', '.', 'c', 'n', '\0',
   /* "alphachat.net", true */ 'a', 'l', 'p', 'h', 'a', 'c', 'h', 'a', 't', '.', 'n', 'e', 't', '\0',
   /* "alphagamers.net", true */ 'a', 'l', 'p', 'h', 'a', 'g', 'a', 'm', 'e', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "alphapengu.in", true */ 'a', 'l', 'p', 'h', 'a', 'p', 'e', 'n', 'g', 'u', '.', 'i', 'n', '\0',
   /* "alpharotary.com", true */ 'a', 'l', 'p', 'h', 'a', 'r', 'o', 't', 'a', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "alphassl.de", true */ 'a', 'l', 'p', 'h', 'a', 's', 's', 'l', '.', 'd', 'e', '\0',
   /* "alphatrash.de", true */ 'a', 'l', 'p', 'h', 'a', 't', 'r', 'a', 's', 'h', '.', 'd', 'e', '\0',
   /* "alpineplanet.com", true */ 'a', 'l', 'p', 'i', 'n', 'e', 'p', 'l', 'a', 'n', 'e', 't', '.', 'c', 'o', 'm', '\0',
-  /* "alrait.com", true */ 'a', 'l', 'r', 'a', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "alspolska.pl", true */ 'a', 'l', 's', 'p', 'o', 'l', 's', 'k', 'a', '.', 'p', 'l', '\0',
   /* "alstroemeria.org", true */ 'a', 'l', 's', 't', 'r', 'o', 'e', 'm', 'e', 'r', 'i', 'a', '.', 'o', 'r', 'g', '\0',
   /* "alt-three.com", true */ 'a', 'l', 't', '-', 't', 'h', 'r', 'e', 'e', '.', 'c', 'o', 'm', '\0',
   /* "alt.org", true */ 'a', 'l', 't', '.', 'o', 'r', 'g', '\0',
   /* "altahrim.net", true */ 'a', 'l', 't', 'a', 'h', 'r', 'i', 'm', '.', 'n', 'e', 't', '\0',
   /* "altaide.com", true */ 'a', 'l', 't', 'a', 'i', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "altailife.ru", true */ 'a', 'l', 't', 'a', 'i', 'l', 'i', 'f', 'e', '.', 'r', 'u', '\0',
   /* "altbinaries.com", true */ 'a', 'l', 't', 'b', 'i', 'n', 'a', 'r', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
@@ -1018,17 +1016,16 @@ static const char kSTSHostTable[] = {
   /* "anacruz.es", true */ 'a', 'n', 'a', 'c', 'r', 'u', 'z', '.', 'e', 's', '\0',
   /* "anadoluefessk.org", true */ 'a', 'n', 'a', 'd', 'o', 'l', 'u', 'e', 'f', 'e', 's', 's', 'k', '.', 'o', 'r', 'g', '\0',
   /* "anakros.me", false */ 'a', 'n', 'a', 'k', 'r', 'o', 's', '.', 'm', 'e', '\0',
   /* "analangelsteen.com", true */ 'a', 'n', 'a', 'l', 'a', 'n', 'g', 'e', 'l', 's', 't', 'e', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "analgesia.net", true */ 'a', 'n', 'a', 'l', 'g', 'e', 's', 'i', 'a', '.', 'n', 'e', 't', '\0',
   /* "analpantyhose.org", true */ 'a', 'n', 'a', 'l', 'p', 'a', 'n', 't', 'y', 'h', 'o', 's', 'e', '.', 'o', 'r', 'g', '\0',
   /* "analteengirls.net", true */ 'a', 'n', 'a', 'l', 't', 'e', 'e', 'n', 'g', 'i', 'r', 'l', 's', '.', 'n', 'e', 't', '\0',
   /* "analyticsinmotion.com", true */ 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', 'i', 'n', 'm', 'o', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "analyticsinmotion.net", true */ 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', 'i', 'n', 'm', 'o', 't', 'i', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "analyticum.de", true */ 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 'u', 'm', '.', 'd', 'e', '\0',
   /* "analyticum.eu", true */ 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 'u', 'm', '.', 'e', 'u', '\0',
   /* "analyticum.net", true */ 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 'u', 'm', '.', 'n', 'e', 't', '\0',
   /* "analyzemyfriends.com", true */ 'a', 'n', 'a', 'l', 'y', 'z', 'e', 'm', 'y', 'f', 'r', 'i', 'e', 'n', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "ananke.io", true */ 'a', 'n', 'a', 'n', 'k', 'e', '.', 'i', 'o', '\0',
   /* "anankecosmetics.com", true */ 'a', 'n', 'a', 'n', 'k', 'e', 'c', 'o', 's', 'm', 'e', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "anantshri.info", true */ 'a', 'n', 'a', 'n', 't', 's', 'h', 'r', 'i', '.', 'i', 'n', 'f', 'o', '\0',
   /* "anarchistischegroepnijmegen.nl", false */ 'a', 'n', 'a', 'r', 'c', 'h', 'i', 's', 't', 'i', 's', 'c', 'h', 'e', 'g', 'r', 'o', 'e', 'p', 'n', 'i', 'j', 'm', 'e', 'g', 'e', 'n', '.', 'n', 'l', '\0',
@@ -1058,17 +1055,16 @@ static const char kSTSHostTable[] = {
   /* "andreaseracleous.com", true */ 'a', 'n', 'd', 'r', 'e', 'a', 's', 'e', 'r', 'a', 'c', 'l', 'e', 'o', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "andreasfeusi.ch", true */ 'a', 'n', 'd', 'r', 'e', 'a', 's', 'f', 'e', 'u', 's', 'i', '.', 'c', 'h', '\0',
   /* "andreaskluge.eu", true */ 'a', 'n', 'd', 'r', 'e', 'a', 's', 'k', 'l', 'u', 'g', 'e', '.', 'e', 'u', '\0',
   /* "andreaskrasa.com", true */ 'a', 'n', 'd', 'r', 'e', 'a', 's', 'k', 'r', 'a', 's', 'a', '.', 'c', 'o', 'm', '\0',
   /* "andreasolsson.se", true */ 'a', 'n', 'd', 'r', 'e', 'a', 's', 'o', 'l', 's', 's', 'o', 'n', '.', 's', 'e', '\0',
   /* "andrehansen.de", true */ 'a', 'n', 'd', 'r', 'e', 'h', 'a', 'n', 's', 'e', 'n', '.', 'd', 'e', '\0',
   /* "andrepicard.de", true */ 'a', 'n', 'd', 'r', 'e', 'p', 'i', 'c', 'a', 'r', 'd', '.', 'd', 'e', '\0',
   /* "andrerose.ca", true */ 'a', 'n', 'd', 'r', 'e', 'r', 'o', 's', 'e', '.', 'c', 'a', '\0',
-  /* "andrespaz.com", true */ 'a', 'n', 'd', 'r', 'e', 's', 'p', 'a', 'z', '.', 'c', 'o', 'm', '\0',
   /* "andreundnina.de", true */ 'a', 'n', 'd', 'r', 'e', 'u', 'n', 'd', 'n', 'i', 'n', 'a', '.', 'd', 'e', '\0',
   /* "andrewdaws.tv", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'd', 'a', 'w', 's', '.', 't', 'v', '\0',
   /* "andrewimeson.com", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'i', 'm', 'e', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "andrewin.ru", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'i', 'n', '.', 'r', 'u', '\0',
   /* "andrewrgoss.com", true */ 'a', 'n', 'd', 'r', 'e', 'w', 'r', 'g', 'o', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "andrewsun.com", true */ 'a', 'n', 'd', 'r', 'e', 'w', 's', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "andrewtebert.com", true */ 'a', 'n', 'd', 'r', 'e', 'w', 't', 'e', 'b', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "andrewthelott.net", true */ 'a', 'n', 'd', 'r', 'e', 'w', 't', 'h', 'e', 'l', 'o', 't', 't', '.', 'n', 'e', 't', '\0',
@@ -1703,22 +1699,22 @@ static const char kSTSHostTable[] = {
   /* "aylak.com", true */ 'a', 'y', 'l', 'a', 'k', '.', 'c', 'o', 'm', '\0',
   /* "aymerick.fr", true */ 'a', 'y', 'm', 'e', 'r', 'i', 'c', 'k', '.', 'f', 'r', '\0',
   /* "aymericlagier.com", true */ 'a', 'y', 'm', 'e', 'r', 'i', 'c', 'l', 'a', 'g', 'i', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "ayothemes.com", true */ 'a', 'y', 'o', 't', 'h', 'e', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "ayurveda-mantry.com", true */ 'a', 'y', 'u', 'r', 'v', 'e', 'd', 'a', '-', 'm', 'a', 'n', 't', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "ayurveda101.com", false */ 'a', 'y', 'u', 'r', 'v', 'e', 'd', 'a', '1', '0', '1', '.', 'c', 'o', 'm', '\0',
   /* "azabani.com", true */ 'a', 'z', 'a', 'b', 'a', 'n', 'i', '.', 'c', 'o', 'm', '\0',
   /* "azamra.com", true */ 'a', 'z', 'a', 'm', 'r', 'a', '.', 'c', 'o', 'm', '\0',
+  /* "azazy.net", true */ 'a', 'z', 'a', 'z', 'y', '.', 'n', 'e', 't', '\0',
   /* "azbuki.by", true */ 'a', 'z', 'b', 'u', 'k', 'i', '.', 'b', 'y', '\0',
   /* "azia.info", true */ 'a', 'z', 'i', 'a', '.', 'i', 'n', 'f', 'o', '\0',
   /* "azimut.fr", true */ 'a', 'z', 'i', 'm', 'u', 't', '.', 'f', 'r', '\0',
   /* "azirevpn.com", true */ 'a', 'z', 'i', 'r', 'e', 'v', 'p', 'n', '.', 'c', 'o', 'm', '\0',
   /* "azlk-team.ru", true */ 'a', 'z', 'l', 'k', '-', 't', 'e', 'a', 'm', '.', 'r', 'u', '\0',
-  /* "azort.com", true */ 'a', 'z', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "azrazalea.net", true */ 'a', 'z', 'r', 'a', 'z', 'a', 'l', 'e', 'a', '.', 'n', 'e', 't', '\0',
   /* "aztrix.me", true */ 'a', 'z', 't', 'r', 'i', 'x', '.', 'm', 'e', '\0',
   /* "azun.pl", true */ 'a', 'z', 'u', 'n', '.', 'p', 'l', '\0',
   /* "azuxul.fr", true */ 'a', 'z', 'u', 'x', 'u', 'l', '.', 'f', 'r', '\0',
   /* "azzag.co.uk", true */ 'a', 'z', 'z', 'a', 'g', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "azzorti.com", true */ 'a', 'z', 'z', 'o', 'r', 't', 'i', '.', 'c', 'o', 'm', '\0',
   /* "b-b-law.com", true */ 'b', '-', 'b', '-', 'l', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "b-pi.duckdns.org", true */ 'b', '-', 'p', 'i', '.', 'd', 'u', 'c', 'k', 'd', 'n', 's', '.', 'o', 'r', 'g', '\0',
@@ -1910,16 +1906,17 @@ static const char kSTSHostTable[] = {
   /* "baywatch.io", true */ 'b', 'a', 'y', 'w', 'a', 't', 'c', 'h', '.', 'i', 'o', '\0',
   /* "bazdell.com", false */ 'b', 'a', 'z', 'd', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "bazisszoftver.hu", true */ 'b', 'a', 'z', 'i', 's', 's', 'z', 'o', 'f', 't', 'v', 'e', 'r', '.', 'h', 'u', '\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',
   /* "bazziergraphik.com", true */ 'b', 'a', 'z', 'z', 'i', 'e', 'r', 'g', 'r', 'a', 'p', 'h', 'i', 'k', '.', 'c', 'o', 'm', '\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',
   /* "bbgeschenke.ch", true */ 'b', 'b', 'g', 'e', 's', 'c', 'h', 'e', 'n', 'k', 'e', '.', 'c', 'h', '\0',
   /* "bbimarketing.com", true */ 'b', 'b', 'i', 'm', 'a', 'r', 'k', 'e', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "bbkworldwide.jp", true */ 'b', 'b', 'k', 'w', 'o', 'r', 'l', 'd', 'w', 'i', 'd', 'e', '.', 'j', 'p', '\0',
   /* "bblove.me", true */ 'b', 'b', 'l', 'o', 'v', 'e', '.', 'm', 'e', '\0',
   /* "bbnx.net", true */ 'b', 'b', 'n', 'x', '.', 'n', 'e', 't', '\0',
   /* "bbuio.com", true */ 'b', 'b', 'u', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "bbw-wrestling.com", true */ 'b', 'b', 'w', '-', 'w', 'r', 'e', 's', 't', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "bbw.dating", true */ 'b', 'b', 'w', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
@@ -1986,16 +1983,17 @@ static const char kSTSHostTable[] = {
   /* "beercandle.com", true */ 'b', 'e', 'e', 'r', 'c', 'a', 'n', 'd', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "beergazetteer.com", true */ 'b', 'e', 'e', 'r', 'g', 'a', 'z', 'e', 't', 't', 'e', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "beerians.com", true */ 'b', 'e', 'e', 'r', 'i', 'a', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "beerradar.no", true */ 'b', 'e', 'e', 'r', 'r', 'a', 'd', 'a', 'r', '.', 'n', 'o', '\0',
   /* "beerradar.party", true */ 'b', 'e', 'e', 'r', 'r', 'a', 'd', 'a', 'r', '.', 'p', 'a', 'r', 't', 'y', '\0',
   /* "beersandco.ch", true */ 'b', 'e', 'e', 'r', 's', 'a', 'n', 'd', 'c', 'o', '.', 'c', 'h', '\0',
   /* "beersconf.com", true */ 'b', 'e', 'e', 'r', 's', 'c', 'o', 'n', 'f', '.', 'c', 'o', 'm', '\0',
   /* "beeswax-orgone.com", true */ 'b', 'e', 'e', 's', 'w', 'a', 'x', '-', 'o', 'r', 'g', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
+  /* "beetman.net", true */ 'b', 'e', 'e', 't', 'm', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "beeznest.com", true */ 'b', 'e', 'e', 'z', 'n', 'e', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "befoodsafe.gov", true */ 'b', 'e', 'f', 'o', 'o', 'd', 's', 'a', 'f', 'e', '.', 'g', 'o', 'v', '\0',
   /* "beframed.ch", true */ 'b', 'e', 'f', 'r', 'a', 'm', 'e', 'd', '.', 'c', 'h', '\0',
   /* "befundonline.de", true */ 'b', 'e', 'f', 'u', 'n', 'd', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0',
   /* "begabungsfoerderung.info", true */ 'b', 'e', 'g', 'a', 'b', 'u', 'n', 'g', 's', 'f', 'o', 'e', 'r', 'd', 'e', 'r', 'u', 'n', 'g', '.', 'i', 'n', 'f', 'o', '\0',
   /* "begbie.com", true */ 'b', 'e', 'g', 'b', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "beginner.nl", true */ 'b', 'e', 'g', 'i', 'n', 'n', 'e', 'r', '.', 'n', 'l', '\0',
   /* "behoerden-online-dienste.de", true */ 'b', 'e', 'h', 'o', 'e', 'r', 'd', 'e', 'n', '-', 'o', 'n', 'l', 'i', 'n', 'e', '-', 'd', 'i', 'e', 'n', 's', 't', 'e', '.', 'd', 'e', '\0',
@@ -2020,33 +2018,31 @@ static const char kSTSHostTable[] = {
   /* "belgers.com", true */ 'b', 'e', 'l', 'g', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "belgien.guide", true */ 'b', 'e', 'l', 'g', 'i', 'e', 'n', '.', 'g', 'u', 'i', 'd', 'e', '\0',
   /* "belhopro.be", true */ 'b', 'e', 'l', 'h', 'o', 'p', 'r', 'o', '.', 'b', 'e', '\0',
   /* "believablebook.com", false */ 'b', 'e', 'l', 'i', 'e', 'v', 'a', 'b', 'l', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "belize-firmengruendung.com", true */ 'b', 'e', 'l', 'i', 'z', 'e', '-', 'f', 'i', 'r', 'm', 'e', 'n', 'g', 'r', 'u', 'e', 'n', 'd', 'u', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "belliash.eu.org", true */ 'b', 'e', 'l', 'l', 'i', 'a', 's', 'h', '.', 'e', 'u', '.', 'o', 'r', 'g', '\0',
   /* "belly-button-piercings.com", true */ 'b', 'e', 'l', 'l', 'y', '-', 'b', 'u', 't', 't', 'o', 'n', '-', 'p', 'i', 'e', 'r', 'c', 'i', 'n', 'g', 's', '.', 'c', 'o', 'm', '\0',
   /* "belmontgoessolar.org", true */ 'b', 'e', 'l', 'm', 'o', 'n', 't', 'g', 'o', 'e', 's', 's', 'o', 'l', 'a', 'r', '.', 'o', 'r', 'g', '\0',
-  /* "belmontprom.com", true */ 'b', 'e', 'l', 'm', 'o', 'n', 't', 'p', 'r', 'o', 'm', '.', 'c', 'o', 'm', '\0',
   /* "belt.black", true */ 'b', 'e', 'l', 't', '.', 'b', 'l', 'a', 'c', 'k', '\0',
   /* "belua.com", true */ 'b', 'e', 'l', 'u', 'a', '.', 'c', 'o', 'm', '\0',
   /* "belwederczykow.eu", true */ 'b', 'e', 'l', 'w', 'e', 'd', 'e', 'r', 'c', 'z', 'y', 'k', 'o', 'w', '.', 'e', 'u', '\0',
   /* "bely-mishka.by", true */ 'b', 'e', 'l', 'y', '-', 'm', 'i', 's', 'h', 'k', 'a', '.', 'b', 'y', '\0',
   /* "bemsoft.pl", true */ 'b', 'e', 'm', 's', 'o', 'f', 't', '.', 'p', 'l', '\0',
   /* "ben-energy.com", false */ 'b', 'e', 'n', '-', 'e', 'n', 'e', 'r', 'g', 'y', '.', 'c', 'o', 'm', '\0',
   /* "ben.ninja", true */ 'b', 'e', 'n', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "benabrams.it", true */ 'b', 'e', 'n', 'a', 'b', 'r', 'a', 'm', 's', '.', 'i', 't', '\0',
   /* "benary.org", true */ 'b', 'e', 'n', 'a', 'r', 'y', '.', 'o', 'r', 'g', '\0',
   /* "benbozsa.ca", true */ 'b', 'e', 'n', 'b', 'o', 'z', 's', 'a', '.', 'c', 'a', '\0',
   /* "benchcast.com", true */ 'b', 'e', 'n', 'c', 'h', 'c', 'a', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "benchling.com", true */ 'b', 'e', 'n', 'c', 'h', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "benchmarkmonument.com", true */ 'b', 'e', 'n', 'c', 'h', 'm', 'a', 'r', 'k', 'm', 'o', 'n', 'u', 'm', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "bencorby.com", true */ 'b', 'e', 'n', 'c', 'o', 'r', 'b', 'y', '.', 'c', 'o', 'm', '\0',
   /* "bendechrai.com", true */ 'b', 'e', 'n', 'd', 'e', 'c', 'h', 'r', 'a', 'i', '.', 'c', 'o', 'm', '\0',
-  /* "bendemaree.com", true */ 'b', 'e', 'n', 'd', 'e', 'm', 'a', 'r', 'e', 'e', '.', 'c', 'o', 'm', '\0',
   /* "bendigoland.com.au", true */ 'b', 'e', 'n', 'd', 'i', 'g', 'o', 'l', 'a', 'n', 'd', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "bendingtheending.com", true */ 'b', 'e', 'n', 'd', 'i', 'n', 'g', 't', 'h', 'e', 'e', 'n', 'd', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "bendix.co", true */ 'b', 'e', 'n', 'd', 'i', 'x', '.', 'c', 'o', '\0',
   /* "beneathvt.com", true */ 'b', 'e', 'n', 'e', 'a', 't', 'h', 'v', 't', '.', 'c', 'o', 'm', '\0',
   /* "beneri.se", true */ 'b', 'e', 'n', 'e', 'r', 'i', '.', 's', 'e', '\0',
   /* "benhaney.com", true */ 'b', 'e', 'n', 'h', 'a', 'n', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "benhartmann.de", true */ 'b', 'e', 'n', 'h', 'a', 'r', 't', 'm', 'a', 'n', 'n', '.', 'd', 'e', '\0',
   /* "benhavenarchives.org", true */ 'b', 'e', 'n', 'h', 'a', 'v', 'e', 'n', 'a', 'r', 'c', 'h', 'i', 'v', 'e', 's', '.', 'o', 'r', 'g', '\0',
@@ -2895,26 +2891,27 @@ static const char kSTSHostTable[] = {
   /* "business-garden.com", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', '-', 'g', 'a', 'r', 'd', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "business.facebook.com", false */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "business.medbank.com.mt", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', '.', 'm', 'e', 'd', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '.', 'm', 't', '\0',
   /* "businessadviceperth.com.au", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'a', 'd', 'v', 'i', 'c', 'e', 'p', 'e', 'r', 't', 'h', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "businessamongus.com", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'a', 'm', 'o', 'n', 'g', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "businessesdirectory.eu", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'e', 's', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', '.', 'e', 'u', '\0',
   /* "businessfurs.info", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'f', 'u', 'r', 's', '.', 'i', 'n', 'f', 'o', '\0',
   /* "businesshub.cz", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'h', 'u', 'b', '.', 'c', 'z', '\0',
+  /* "businessimmigration-eu.com", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'i', 'm', 'm', 'i', 'g', 'r', 'a', 't', 'i', 'o', 'n', '-', 'e', 'u', '.', 'c', 'o', 'm', '\0',
+  /* "businessimmigration-eu.ru", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'i', 'm', 'm', 'i', 'g', 'r', 'a', 't', 'i', 'o', 'n', '-', 'e', 'u', '.', 'r', 'u', '\0',
   /* "bustimes.org.uk", true */ 'b', 'u', 's', 't', 'i', 'm', 'e', 's', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "buxum-communication.ch", true */ 'b', 'u', 'x', 'u', 'm', '-', 'c', 'o', 'm', 'm', 'u', 'n', 'i', 'c', 'a', 't', 'i', 'o', 'n', '.', 'c', 'h', '\0',
   /* "buyerdocs.com", true */ 'b', 'u', 'y', 'e', 'r', 'd', 'o', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "buyinginvestmentproperty.com", true */ 'b', 'u', 'y', 'i', 'n', 'g', 'i', 'n', 'v', 'e', 's', 't', 'm', 'e', 'n', 't', 'p', 'r', 'o', 'p', 'e', 'r', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "buyshoe.org", true */ 'b', 'u', 'y', 's', 'h', 'o', 'e', '.', 'o', 'r', 'g', '\0',
   /* "buytheway.co.za", true */ 'b', 'u', 'y', 't', 'h', 'e', 'w', 'a', 'y', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "buzz.tools", true */ 'b', 'u', 'z', 'z', '.', 't', 'o', 'o', 'l', 's', '\0',
   /* "buzzconcert.com", true */ 'b', 'u', 'z', 'z', 'c', 'o', 'n', 'c', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "buzzconf.io", true */ 'b', 'u', 'z', 'z', 'c', 'o', 'n', 'f', '.', 'i', 'o', '\0',
-  /* "buzzdeck.com", true */ 'b', 'u', 'z', 'z', 'd', 'e', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "buzzprint.it", true */ 'b', 'u', 'z', 'z', 'p', 'r', 'i', 'n', 't', '.', 'i', 't', '\0',
   /* "buzztelco.com.au", true */ 'b', 'u', 'z', 'z', 't', 'e', 'l', 'c', 'o', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "bvalle.com", true */ 'b', 'v', 'a', 'l', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "bvexplained.co.uk", true */ 'b', 'v', 'e', 'x', 'p', 'l', 'a', 'i', 'n', 'e', 'd', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "bvionline.eu", true */ 'b', 'v', 'i', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'e', 'u', '\0',
   /* "bw.codes", true */ 'b', 'w', '.', 'c', 'o', 'd', 'e', 's', '\0',
   /* "bwcscorecard.org", true */ 'b', 'w', 'c', 's', 'c', 'o', 'r', 'e', 'c', 'a', 'r', 'd', '.', 'o', 'r', 'g', '\0',
   /* "bwh1.net", true */ 'b', 'w', 'h', '1', '.', 'n', 'e', 't', '\0',
@@ -3074,16 +3071,17 @@ static const char kSTSHostTable[] = {
   /* "candygirl.shop", true */ 'c', 'a', 'n', 'd', 'y', 'g', 'i', 'r', 'l', '.', 's', 'h', 'o', 'p', '\0',
   /* "candyout.com", true */ 'c', 'a', 'n', 'd', 'y', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "canfly.org", false */ 'c', 'a', 'n', 'f', 'l', 'y', '.', 'o', 'r', 'g', '\0',
   /* "canhazip.com", true */ 'c', 'a', 'n', 'h', 'a', 'z', 'i', 'p', '.', 'c', 'o', 'm', '\0',
   /* "canifis.net", true */ 'c', 'a', 'n', 'i', 'f', 'i', 's', '.', 'n', 'e', 't', '\0',
   /* "canihavesome.coffee", true */ 'c', 'a', 'n', 'i', 'h', 'a', 'v', 'e', 's', 'o', 'm', 'e', '.', 'c', 'o', 'f', 'f', 'e', 'e', '\0',
   /* "canlidoviz.com", true */ 'c', 'a', 'n', 'l', 'i', 'd', 'o', 'v', 'i', 'z', '.', 'c', 'o', 'm', '\0',
   /* "cannabis-marijuana.com", true */ 'c', 'a', 'n', 'n', 'a', 'b', 'i', 's', '-', 'm', 'a', 'r', 'i', 'j', 'u', 'a', 'n', 'a', '.', 'c', 'o', 'm', '\0',
+  /* "cannarobotics.com", true */ 'c', 'a', 'n', 'n', 'a', 'r', 'o', 'b', 'o', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "canoonic.se", true */ 'c', 'a', 'n', 'o', 'o', 'n', 'i', 'c', '.', 's', 'e', '\0',
   /* "cantatio.ch", true */ 'c', 'a', 'n', 't', 'a', 't', 'i', 'o', '.', 'c', 'h', '\0',
   /* "canterberry.cc", true */ 'c', 'a', 'n', 't', 'e', 'r', 'b', 'e', 'r', 'r', 'y', '.', 'c', 'c', '\0',
   /* "cantrack.com", true */ 'c', 'a', 'n', 't', 'r', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "canva-dev.com", true */ 'c', 'a', 'n', 'v', 'a', '-', 'd', 'e', 'v', '.', 'c', 'o', 'm', '\0',
   /* "canva.com", true */ 'c', 'a', 'n', 'v', 'a', '.', 'c', 'o', 'm', '\0',
   /* "canyoupwn.me", true */ 'c', 'a', 'n', 'y', 'o', 'u', 'p', 'w', 'n', '.', 'm', 'e', '\0',
   /* "cao.gov", true */ 'c', 'a', 'o', '.', 'g', 'o', 'v', '\0',
@@ -3183,17 +3181,16 @@ static const char kSTSHostTable[] = {
   /* "cartouche24.eu", true */ 'c', 'a', 'r', 't', 'o', 'u', 'c', 'h', 'e', '2', '4', '.', 'e', 'u', '\0',
   /* "cartucce24.it", true */ 'c', 'a', 'r', 't', 'u', 'c', 'c', 'e', '2', '4', '.', 'i', 't', '\0',
   /* "carusorealestate.com", true */ 'c', 'a', 'r', 'u', 's', 'o', 'r', 'e', 'a', 'l', 'e', 's', 't', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "casa-due-pur.com", true */ 'c', 'a', 's', 'a', '-', 'd', 'u', 'e', '-', 'p', 'u', 'r', '.', 'c', 'o', 'm', '\0',
   /* "casa-due-pur.de", true */ 'c', 'a', 's', 'a', '-', 'd', 'u', 'e', '-', 'p', 'u', 'r', '.', 'd', 'e', '\0',
   /* "casa-due.com", true */ 'c', 'a', 's', 'a', '-', 'd', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "casa-su.casa", true */ 'c', 'a', 's', 'a', '-', 's', 'u', '.', 'c', 'a', 's', 'a', '\0',
   /* "casbuijs.nl", true */ 'c', 'a', 's', 'b', 'u', 'i', 'j', 's', '.', 'n', 'l', '\0',
-  /* "casburggraaf.com", true */ 'c', 'a', 's', 'b', 'u', 'r', 'g', 'g', 'r', 'a', 'a', 'f', '.', 'c', 'o', 'm', '\0',
   /* "cash-pos.com", true */ 'c', 'a', 's', 'h', '-', 'p', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "cashew3d.com", true */ 'c', 'a', 's', 'h', 'e', 'w', '3', 'd', '.', 'c', 'o', 'm', '\0',
   /* "cashfortulsahouses.com", true */ 'c', 'a', 's', 'h', 'f', 'o', 'r', 't', 'u', 'l', 's', 'a', 'h', 'o', 'u', 's', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "cashless.fr", true */ 'c', 'a', 's', 'h', 'l', 'e', 's', 's', '.', 'f', 'r', '\0',
   /* "cashlink.de", true */ 'c', 'a', 's', 'h', 'l', 'i', 'n', 'k', '.', 'd', 'e', '\0',
   /* "cashplk.com", true */ 'c', 'a', 's', 'h', 'p', 'l', 'k', '.', 'c', 'o', 'm', '\0',
   /* "casinolegal.pt", true */ 'c', 'a', 's', 'i', 'n', 'o', 'l', 'e', 'g', 'a', 'l', '.', 'p', 't', '\0',
   /* "casinolistings.com", true */ 'c', 'a', 's', 'i', 'n', 'o', 'l', 'i', 's', 't', 'i', 'n', 'g', 's', '.', 'c', 'o', 'm', '\0',
@@ -3490,17 +3487,16 @@ static const char kSTSHostTable[] = {
   /* "childno.de", true */ 'c', 'h', 'i', 'l', 'd', 'n', 'o', '.', 'd', 'e', '\0',
   /* "childrendeservebetter.org", true */ 'c', 'h', 'i', 'l', 'd', 'r', 'e', 'n', 'd', 'e', 's', 'e', 'r', 'v', 'e', 'b', 'e', 't', 't', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "childreninadversity.gov", true */ 'c', 'h', 'i', 'l', 'd', 'r', 'e', 'n', 'i', 'n', 'a', 'd', 'v', 'e', 'r', 's', 'i', 't', 'y', '.', 'g', 'o', 'v', '\0',
   /* "chilihosting.eu", true */ 'c', 'h', 'i', 'l', 'i', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'e', 'u', '\0',
   /* "chima.net", true */ 'c', 'h', 'i', 'm', 'a', '.', 'n', 'e', 't', '\0',
   /* "chima.us", true */ 'c', 'h', 'i', 'm', 'a', '.', 'u', 's', '\0',
   /* "chimeratool.com", true */ 'c', 'h', 'i', 'm', 'e', 'r', 'a', 't', 'o', 'o', 'l', '.', 'c', 'o', 'm', '\0',
   /* "chimpanzee.net", true */ 'c', 'h', 'i', 'm', 'p', 'a', 'n', 'z', 'e', 'e', '.', 'n', 'e', 't', '\0',
-  /* "china-line.org", true */ 'c', 'h', 'i', 'n', 'a', '-', 'l', 'i', 'n', 'e', '.', 'o', 'r', 'g', '\0',
   /* "chinacdn.org", true */ 'c', 'h', 'i', 'n', 'a', 'c', 'd', 'n', '.', 'o', 'r', 'g', '\0',
   /* "chinaspaceflight.com", true */ 'c', 'h', 'i', 'n', 'a', 's', 'p', 'a', 'c', 'e', 'f', 'l', 'i', 'g', 'h', 't', '.', 'c', 'o', 'm', '\0',
   /* "chint.ai", true */ 'c', 'h', 'i', 'n', 't', '.', 'a', 'i', '\0',
   /* "chinternet.xyz", true */ 'c', 'h', 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', '.', 'x', 'y', 'z', '\0',
   /* "chiphell.com", true */ 'c', 'h', 'i', 'p', 'h', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "chippy.ch", false */ 'c', 'h', 'i', 'p', 'p', 'y', '.', 'c', 'h', '\0',
   /* "chiralsoftware.com", true */ 'c', 'h', 'i', 'r', 'a', 'l', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "chireiden.net", true */ 'c', 'h', 'i', 'r', 'e', 'i', 'd', 'e', 'n', '.', 'n', 'e', 't', '\0',
@@ -3585,16 +3581,17 @@ static const char kSTSHostTable[] = {
   /* "chromiumbugs.appspot.com", true */ 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm', 'b', 'u', 'g', 's', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "chromiumcodereview.appspot.com", false */ 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm', 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "chroniclesofgeorge.com", true */ 'c', 'h', 'r', 'o', 'n', 'i', 'c', 'l', 'e', 's', 'o', 'f', 'g', 'e', 'o', 'r', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "chronogram.me", true */ 'c', 'h', 'r', 'o', 'n', 'o', 'g', 'r', 'a', 'm', '.', 'm', 'e', '\0',
   /* "chronoshop.cz", true */ 'c', 'h', 'r', 'o', 'n', 'o', 's', 'h', 'o', 'p', '.', 'c', 'z', '\0',
   /* "chrpaul.de", true */ 'c', 'h', 'r', 'p', 'a', 'u', 'l', '.', 'd', 'e', '\0',
   /* "chrst.ph", true */ 'c', 'h', 'r', 's', 't', '.', 'p', 'h', '\0',
   /* "chsterz.de", true */ 'c', 'h', 's', 't', 'e', 'r', 'z', '.', 'd', 'e', '\0',
+  /* "chua.family", true */ 'c', 'h', 'u', 'a', '.', 'f', 'a', 'm', 'i', 'l', 'y', '\0',
   /* "chuchote-moi.fr", true */ 'c', 'h', 'u', 'c', 'h', 'o', 't', 'e', '-', 'm', 'o', 'i', '.', 'f', 'r', '\0',
   /* "chuckame.fr", true */ 'c', 'h', 'u', 'c', 'k', 'a', 'm', 'e', '.', 'f', 'r', '\0',
   /* "chun.pro", true */ 'c', 'h', 'u', 'n', '.', 'p', 'r', 'o', '\0',
   /* "chunche.net", true */ 'c', 'h', 'u', 'n', 'c', 'h', 'e', '.', 'n', 'e', 't', '\0',
   /* "churchthemes.com", true */ 'c', 'h', 'u', 'r', 'c', 'h', 't', 'h', 'e', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "churchwebcanada.ca", true */ 'c', 'h', 'u', 'r', 'c', 'h', 'w', 'e', 'b', 'c', 'a', 'n', 'a', 'd', 'a', '.', 'c', 'a', '\0',
   /* "churchwebsupport.com", true */ 'c', 'h', 'u', 'r', 'c', 'h', 'w', 'e', 'b', 's', 'u', 'p', 'p', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "chxdf.net", true */ 'c', 'h', 'x', 'd', 'f', '.', 'n', 'e', 't', '\0',
@@ -3738,17 +3735,16 @@ static const char kSTSHostTable[] = {
   /* "closingholding.com", true */ 'c', 'l', 'o', 's', 'i', 'n', 'g', 'h', 'o', 'l', 'd', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "cloud-crowd.com.au", true */ 'c', 'l', 'o', 'u', 'd', '-', 'c', 'r', 'o', 'w', 'd', '.', 'c', 'o', 'm', '.', 'a', 'u', '\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',
   /* "cloudbased.info", true */ 'c', 'l', 'o', 'u', 'd', 'b', 'a', 's', 'e', 'd', '.', 'i', 'n', 'f', 'o', '\0',
   /* "cloudbasedsite.com", true */ 'c', 'l', 'o', 'u', 'd', 'b', 'a', 's', 'e', 'd', 's', 'i', 't', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "cloudbleed.info", true */ 'c', 'l', 'o', 'u', 'd', 'b', 'l', 'e', 'e', 'd', '.', 'i', 'n', 'f', 'o', '\0',
   /* "cloudbolin.es", true */ 'c', 'l', 'o', 'u', 'd', 'b', 'o', 'l', 'i', 'n', '.', 'e', 's', '\0',
   /* "cloudcaprice.net", true */ 'c', 'l', 'o', 'u', 'd', 'c', 'a', 'p', 'r', 'i', 'c', 'e', '.', 'n', 'e', 't', '\0',
   /* "cloudflareonazure.com", true */ 'c', 'l', 'o', 'u', 'd', 'f', 'l', 'a', 'r', 'e', 'o', 'n', 'a', 'z', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cloudia.org", true */ 'c', 'l', 'o', 'u', 'd', 'i', 'a', '.', 'o', 'r', 'g', '\0',
   /* "cloudily.com", true */ 'c', 'l', 'o', 'u', 'd', 'i', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "cloudmigrator365.com", true */ 'c', 'l', 'o', 'u', 'd', 'm', 'i', 'g', 'r', 'a', 't', 'o', 'r', '3', '6', '5', '.', 'c', 'o', 'm', '\0',
   /* "cloudoptimizedsmb.com", true */ 'c', 'l', 'o', 'u', 'd', 'o', 'p', 't', 'i', 'm', 'i', 'z', 'e', 'd', 's', 'm', 'b', '.', 'c', 'o', 'm', '\0',
   /* "cloudoptimus.com", true */ 'c', 'l', 'o', 'u', 'd', 'o', 'p', 't', 'i', 'm', 'u', 's', '.', 'c', 'o', 'm', '\0',
@@ -3762,17 +3758,16 @@ static const char kSTSHostTable[] = {
   /* "cloudspace-analytics.com", true */ 'c', 'l', 'o', 'u', 'd', 's', 'p', 'a', 'c', 'e', '-', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "cloudteam.de", true */ 'c', 'l', 'o', 'u', 'd', 't', 'e', 'a', 'm', '.', 'd', 'e', '\0',
   /* "cloudup.com", true */ 'c', 'l', 'o', 'u', 'd', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "cloudwarez.xyz", true */ 'c', 'l', 'o', 'u', 'd', 'w', 'a', 'r', 'e', 'z', '.', 'x', 'y', 'z', '\0',
   /* "clounix.online", true */ 'c', 'l', 'o', 'u', 'n', 'i', 'x', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "clouz.de", true */ 'c', 'l', 'o', 'u', 'z', '.', 'd', 'e', '\0',
   /* "clovissantos.com", true */ 'c', 'l', 'o', 'v', 'i', 's', 's', 'a', 'n', 't', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "clownish.co.il", true */ 'c', 'l', 'o', 'w', 'n', 'i', 's', 'h', '.', 'c', 'o', '.', 'i', 'l', '\0',
-  /* "cloxy.com", true */ 'c', 'l', 'o', 'x', 'y', '.', 'c', 'o', 'm', '\0',
   /* "clr3.com", true */ 'c', 'l', 'r', '3', '.', 'c', 'o', 'm', '\0',
   /* "clsimage.com", true */ 'c', 'l', 's', 'i', 'm', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "clsimplex.com", true */ 'c', 'l', 's', 'i', 'm', 'p', 'l', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "clu-in.org", true */ 'c', 'l', 'u', '-', 'i', 'n', '.', 'o', 'r', 'g', '\0',
   /* "club-is.ru", true */ 'c', 'l', 'u', 'b', '-', 'i', 's', '.', 'r', 'u', '\0',
   /* "clubdeslecteurs.net", true */ 'c', 'l', 'u', 'b', 'd', 'e', 's', 'l', 'e', 'c', 't', 'e', 'u', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "clubempleos.com", true */ 'c', 'l', 'u', 'b', 'e', 'm', 'p', 'l', 'e', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "clubeohara.com", true */ 'c', 'l', 'u', 'b', 'e', 'o', 'h', 'a', 'r', 'a', '.', 'c', 'o', 'm', '\0',
@@ -3846,16 +3841,17 @@ static const char kSTSHostTable[] = {
   /* "codeine.co.uk", true */ 'c', 'o', 'd', 'e', 'i', 'n', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "codeit.guru", true */ 'c', 'o', 'd', 'e', 'i', 't', '.', 'g', 'u', 'r', 'u', '\0',
   /* "codeit.us", true */ 'c', 'o', 'd', 'e', 'i', 't', '.', 'u', 's', '\0',
   /* "codelove.de", true */ 'c', 'o', 'd', 'e', 'l', 'o', 'v', 'e', '.', 'd', 'e', '\0',
   /* "codenode.io", true */ 'c', 'o', 'd', 'e', 'n', 'o', 'd', 'e', '.', 'i', 'o', '\0',
   /* "codeplay.org", true */ 'c', 'o', 'd', 'e', 'p', 'l', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "codepoints.net", true */ 'c', 'o', 'd', 'e', 'p', 'o', 'i', 'n', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "codepref.com", true */ 'c', 'o', 'd', 'e', 'p', 'r', 'e', 'f', '.', 'c', 'o', 'm', '\0',
+  /* "codepult.com", true */ 'c', 'o', 'd', 'e', 'p', 'u', 'l', 't', '.', 'c', 'o', 'm', '\0',
   /* "codera.co.uk", true */ 'c', 'o', 'd', 'e', 'r', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "codercross.com", true */ 'c', 'o', 'd', 'e', 'r', 'c', 'r', 'o', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "codereview.appspot.com", false */ 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "codereview.chromium.org", false */ 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "coderhangout.com", true */ 'c', 'o', 'd', 'e', 'r', 'h', 'a', 'n', 'g', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "codesplain.in", true */ 'c', 'o', 'd', 'e', 's', 'p', 'l', 'a', 'i', 'n', '.', 'i', 'n', '\0',
   /* "codesport.io", true */ 'c', 'o', 'd', 'e', 's', 'p', 'o', 'r', 't', '.', 'i', 'o', '\0',
   /* "codestudies.net", true */ 'c', 'o', 'd', 'e', 's', 't', 'u', 'd', 'i', 'e', 's', '.', 'n', 'e', 't', '\0',
@@ -4099,16 +4095,17 @@ static const char kSTSHostTable[] = {
   /* "coredump.gr", true */ 'c', 'o', 'r', 'e', 'd', 'u', 'm', 'p', '.', 'g', 'r', '\0',
   /* "coreinfrastructure.org", true */ 'c', 'o', 'r', 'e', 'i', 'n', 'f', 'r', 'a', 's', 't', 'r', 'u', 'c', 't', 'u', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "coreless-stretchfilm.com", true */ 'c', 'o', 'r', 'e', 'l', 'e', 's', 's', '-', 's', 't', 'r', 'e', 't', 'c', 'h', 'f', 'i', 'l', 'm', '.', 'c', 'o', 'm', '\0',
   /* "corepartners.com.ua", true */ 'c', 'o', 'r', 'e', 'p', 'a', 'r', 't', 'n', 'e', 'r', 's', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "coresolutions.ca", true */ 'c', 'o', 'r', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'a', '\0',
   /* "coreum.ca", true */ 'c', 'o', 'r', 'e', 'u', 'm', '.', 'c', 'a', '\0',
   /* "corex.io", true */ 'c', 'o', 'r', 'e', 'x', '.', 'i', 'o', '\0',
   /* "coreyjmahler.com", true */ 'c', 'o', 'r', 'e', 'y', 'j', 'm', 'a', 'h', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0',
+  /* "corgi.party", true */ 'c', 'o', 'r', 'g', 'i', '.', 'p', 'a', 'r', 't', 'y', '\0',
   /* "coribi.com", true */ 'c', 'o', 'r', 'i', 'b', 'i', '.', 'c', 'o', 'm', '\0',
   /* "corinnanese.de", true */ 'c', 'o', 'r', 'i', 'n', 'n', 'a', 'n', 'e', 's', 'e', '.', 'd', 'e', '\0',
   /* "corisu.co", true */ 'c', 'o', 'r', 'i', 's', 'u', '.', 'c', 'o', '\0',
   /* "cornercircle.co.uk", true */ 'c', 'o', 'r', 'n', 'e', 'r', 'c', 'i', 'r', 'c', 'l', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "corniche.com", true */ 'c', 'o', 'r', 'n', 'i', 'c', 'h', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cornishcamels.com", true */ 'c', 'o', 'r', 'n', 'i', 's', 'h', 'c', 'a', 'm', 'e', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "cornodo.com", true */ 'c', 'o', 'r', 'n', 'o', 'd', 'o', '.', 'c', 'o', 'm', '\0',
   /* "corona-academy.com", true */ 'c', 'o', 'r', 'o', 'n', 'a', '-', 'a', 'c', 'a', 'd', 'e', 'm', 'y', '.', 'c', 'o', 'm', '\0',
@@ -4195,18 +4192,16 @@ static const char kSTSHostTable[] = {
   /* "craigfrancis.co.uk", true */ 'c', 'r', 'a', 'i', 'g', 'f', 'r', 'a', 'n', 'c', 'i', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "craigrouse.com", true */ 'c', 'r', 'a', 'i', 'g', 'r', 'o', 'u', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "craigwfox.com", true */ 'c', 'r', 'a', 'i', 'g', 'w', 'f', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "cralarm.de", true */ 'c', 'r', 'a', 'l', 'a', 'r', 'm', '.', 'd', 'e', '\0',
   /* "cranesafe.com", true */ 'c', 'r', 'a', 'n', 'e', 's', 'a', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "crapouill.es", true */ 'c', 'r', 'a', 'p', 'o', 'u', 'i', 'l', 'l', '.', 'e', 's', '\0',
   /* "crashsec.com", true */ 'c', 'r', 'a', 's', 'h', 's', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "crawcial.de", true */ 'c', 'r', 'a', 'w', 'c', 'i', 'a', 'l', '.', 'd', 'e', '\0',
-  /* "crazycraftland.de", true */ 'c', 'r', 'a', 'z', 'y', 'c', 'r', 'a', 'f', 't', 'l', 'a', 'n', 'd', '.', 'd', 'e', '\0',
-  /* "crazycraftland.net", true */ 'c', 'r', 'a', 'z', 'y', 'c', 'r', 'a', 'f', 't', 'l', 'a', 'n', 'd', '.', 'n', 'e', 't', '\0',
   /* "crazydomains.ae", true */ 'c', 'r', 'a', 'z', 'y', 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'a', 'e', '\0',
   /* "crazydomains.co.nz", true */ 'c', 'r', 'a', 'z', 'y', 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "crazydomains.co.uk", true */ 'c', 'r', 'a', 'z', 'y', 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "crazydomains.com.au", true */ 'c', 'r', 'a', 'z', 'y', 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "crazydomains.in", true */ 'c', 'r', 'a', 'z', 'y', 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'i', 'n', '\0',
   /* "crazymeeshu.com", true */ 'c', 'r', 'a', 'z', 'y', 'm', 'e', 'e', 's', 'h', 'u', '.', 'c', 'o', 'm', '\0',
   /* "crazypaul.com", true */ 'c', 'r', 'a', 'z', 'y', 'p', 'a', 'u', 'l', '.', 'c', 'o', 'm', '\0',
   /* "crazyprojects.es", true */ 'c', 'r', 'a', 'z', 'y', 'p', 'r', 'o', 'j', 'e', 'c', 't', 's', '.', 'e', 's', '\0',
@@ -4275,16 +4270,17 @@ static const char kSTSHostTable[] = {
   /* "croquette.net", true */ 'c', 'r', 'o', 'q', 'u', 'e', 't', 't', 'e', '.', 'n', 'e', 't', '\0',
   /* "crosbug.com", true */ 'c', 'r', 'o', 's', 'b', 'u', 'g', '.', 'c', 'o', 'm', '\0',
   /* "cross-view.com", true */ 'c', 'r', 'o', 's', 's', '-', 'v', 'i', 'e', 'w', '.', 'c', 'o', 'm', '\0',
   /* "cross-x.com", true */ 'c', 'r', 'o', 's', 's', '-', 'x', '.', 'c', 'o', 'm', '\0',
   /* "crossborderreturns.com", true */ 'c', 'r', 'o', 's', 's', 'b', 'o', 'r', 'd', 'e', 'r', 'r', 'e', 't', 'u', 'r', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "crossfitblackwater.com", true */ 'c', 'r', 'o', 's', 's', 'f', 'i', 't', 'b', 'l', 'a', 'c', 'k', 'w', 'a', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "crossorig.in", true */ 'c', 'r', 'o', 's', 's', 'o', 'r', 'i', 'g', '.', 'i', 'n', '\0',
   /* "crosssellguide.com", true */ 'c', 'r', 'o', 's', 's', 's', 'e', 'l', 'l', 'g', 'u', 'i', 'd', 'e', '.', 'c', 'o', 'm', '\0',
+  /* "crow.tw", true */ 'c', 'r', 'o', 'w', '.', 't', 'w', '\0',
   /* "crowdsupply.com", true */ 'c', 'r', 'o', 'w', 'd', 's', 'u', 'p', 'p', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "crownruler.com", true */ 'c', 'r', 'o', 'w', 'n', 'r', 'u', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "croydonapartments.com.au", true */ 'c', 'r', 'o', 'y', 'd', 'o', 'n', 'a', 'p', 'a', 'r', 't', 'm', 'e', 'n', 't', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "crrev.com", true */ 'c', 'r', 'r', 'e', 'v', '.', 'c', 'o', 'm', '\0',
   /* "crstat.ru", true */ 'c', 'r', 's', 't', 'a', 't', '.', 'r', 'u', '\0',
   /* "crt.sh", true */ 'c', 'r', 't', '.', 's', 'h', '\0',
   /* "crumbcontrol.com", true */ 'c', 'r', 'u', 'm', 'b', 'c', 'o', 'n', 't', 'r', 'o', 'l', '.', 'c', 'o', 'm', '\0',
   /* "crushroom.com", true */ 'c', 'r', 'u', 's', 'h', 'r', 'o', 'o', 'm', '.', 'c', 'o', 'm', '\0',
@@ -4551,17 +4547,16 @@ static const char kSTSHostTable[] = {
   /* "dango.in", true */ 'd', 'a', 'n', 'g', 'o', '.', 'i', 'n', '\0',
   /* "daniel-baumann.ch", true */ 'd', 'a', 'n', 'i', 'e', 'l', '-', 'b', 'a', 'u', 'm', 'a', 'n', 'n', '.', 'c', 'h', '\0',
   /* "daniel-du.com", true */ 'd', 'a', 'n', 'i', 'e', 'l', '-', 'd', 'u', '.', 'c', 'o', 'm', '\0',
   /* "daniel-kulbe.de", true */ 'd', 'a', 'n', 'i', 'e', 'l', '-', 'k', 'u', 'l', 'b', 'e', '.', 'd', 'e', '\0',
   /* "daniel-ruf.de", true */ 'd', 'a', 'n', 'i', 'e', 'l', '-', 'r', 'u', 'f', '.', 'd', 'e', '\0',
   /* "daniel-seifert.com", true */ 'd', 'a', 'n', 'i', 'e', 'l', '-', 's', 'e', 'i', 'f', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "danielalvarez.net", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'a', 'l', 'v', 'a', 'r', 'e', 'z', '.', 'n', 'e', 't', '\0',
   /* "danielehniss.de", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'e', 'h', 'n', 'i', 's', 's', '.', 'd', 'e', '\0',
-  /* "danielepestilli.com", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'e', 'p', 'e', 's', 't', 'i', 'l', 'l', 'i', '.', 'c', 'o', 'm', '\0',
   /* "danielhochleitner.de", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'h', 'o', 'c', 'h', 'l', 'e', 'i', 't', 'n', 'e', 'r', '.', 'd', 'e', '\0',
   /* "danieljamesscott.org", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'j', 'a', 'm', 'e', 's', 's', 'c', 'o', 't', 't', '.', 'o', 'r', 'g', '\0',
   /* "danieljireh.com", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'j', 'i', 'r', 'e', 'h', '.', 'c', 'o', 'm', '\0',
   /* "danielkoster.nl", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'k', 'o', 's', 't', 'e', 'r', '.', 'n', 'l', '\0',
   /* "danielmarquard.com", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'm', 'a', 'r', 'q', 'u', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "danielmoch.com", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'm', 'o', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "danielmostertman.com", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'm', 'o', 's', 't', 'e', 'r', 't', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "danielmostertman.nl", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'm', 'o', 's', 't', 'e', 'r', 't', 'm', 'a', 'n', '.', 'n', 'l', '\0',
@@ -4990,17 +4985,16 @@ static const char kSTSHostTable[] = {
   /* "devolution.ws", true */ 'd', 'e', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', '.', 'w', 's', '\0',
   /* "devonsawatzky.ca", true */ 'd', 'e', 'v', 'o', 'n', 's', 'a', 'w', 'a', 't', 'z', 'k', 'y', '.', 'c', 'a', '\0',
   /* "devops-survey.com", true */ 'd', 'e', 'v', 'o', 'p', 's', '-', 's', 'u', 'r', 'v', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "devpgsv.com", true */ 'd', 'e', 'v', 'p', 'g', 's', 'v', '.', 'c', 'o', 'm', '\0',
   /* "devpsy.info", true */ 'd', 'e', 'v', 'p', 's', 'y', '.', 'i', 'n', 'f', 'o', '\0',
   /* "devstaff.gr", true */ 'd', 'e', 'v', 's', 't', 'a', 'f', 'f', '.', 'g', 'r', '\0',
   /* "devyn.ca", true */ 'd', 'e', 'v', 'y', 'n', '.', 'c', 'a', '\0',
   /* "devzero.io", true */ 'd', 'e', 'v', 'z', 'e', 'r', 'o', '.', 'i', 'o', '\0',
-  /* "dewalch.net", true */ 'd', 'e', 'w', 'a', 'l', 'c', 'h', '.', 'n', 'e', 't', '\0',
   /* "dewebwerf.nl", true */ 'd', 'e', 'w', 'e', 'b', 'w', 'e', 'r', 'f', '.', 'n', 'l', '\0',
   /* "dexalo.de", true */ 'd', 'e', 'x', 'a', 'l', 'o', '.', 'd', 'e', '\0',
   /* "dezeregio.nl", true */ 'd', 'e', 'z', 'e', 'r', 'e', 'g', 'i', 'o', '.', 'n', 'l', '\0',
   /* "dezintranet.com", true */ 'd', 'e', 'z', 'i', 'n', 't', 'r', 'a', 'n', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "dezmembrariromania.ro", true */ 'd', 'e', 'z', 'm', 'e', 'm', 'b', 'r', 'a', 'r', 'i', 'r', 'o', 'm', 'a', 'n', 'i', 'a', '.', 'r', 'o', '\0',
   /* "df1paw.de", true */ 'd', 'f', '1', 'p', 'a', 'w', '.', 'd', 'e', '\0',
   /* "dfctaiwan.org", true */ 'd', 'f', 'c', 't', 'a', 'i', 'w', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "dfekt.no", true */ 'd', 'f', 'e', 'k', 't', '.', 'n', 'o', '\0',
@@ -5115,17 +5109,16 @@ static const char kSTSHostTable[] = {
   /* "digitkon.com", true */ 'd', 'i', 'g', 'i', 't', 'k', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "digminecraft.com", true */ 'd', 'i', 'g', 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '.', 'c', 'o', 'm', '\0',
   /* "digwp.com", true */ 'd', 'i', 'g', 'w', 'p', '.', 'c', 'o', 'm', '\0',
   /* "dijkmanmuziek.nl", false */ 'd', 'i', 'j', 'k', 'm', 'a', 'n', 'm', 'u', 'z', 'i', 'e', 'k', '.', 'n', 'l', '\0',
   /* "dijkmanvandoorn.nl", true */ 'd', 'i', 'j', 'k', 'm', 'a', 'n', 'v', 'a', 'n', 'd', 'o', 'o', 'r', 'n', '.', 'n', 'l', '\0',
   /* "diju.ch", true */ 'd', 'i', 'j', 'u', '.', 'c', 'h', '\0',
   /* "dilichen.fr", true */ 'd', 'i', 'l', 'i', 'c', 'h', 'e', 'n', '.', 'f', 'r', '\0',
   /* "dillewijnzwapak.nl", true */ 'd', 'i', 'l', 'l', 'e', 'w', 'i', 'j', 'n', 'z', 'w', 'a', 'p', 'a', 'k', '.', 'n', 'l', '\0',
-  /* "dillonkorman.com", true */ 'd', 'i', 'l', 'l', 'o', 'n', 'k', 'o', 'r', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "dimanss47.net", true */ 'd', 'i', 'm', 'a', 'n', 's', 's', '4', '7', '.', 'n', 'e', 't', '\0',
   /* "dime-staging.com", true */ 'd', 'i', 'm', 'e', '-', 's', 't', 'a', 'g', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "dime.io", true */ 'd', 'i', 'm', 'e', '.', 'i', 'o', '\0',
   /* "dimez.ru", true */ 'd', 'i', 'm', 'e', 'z', '.', 'r', 'u', '\0',
   /* "dimonb.com", true */ 'd', 'i', 'm', 'o', 'n', 'b', '.', 'c', 'o', 'm', '\0',
   /* "dineachook.com.au", true */ 'd', 'i', 'n', 'e', 'a', 'c', 'h', 'o', 'o', 'k', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "dinepont.fr", true */ 'd', 'i', 'n', 'e', 'p', 'o', 'n', 't', '.', 'f', 'r', '\0',
   /* "dinge.xyz", true */ 'd', 'i', 'n', 'g', 'e', '.', 'x', 'y', 'z', '\0',
@@ -5320,17 +5313,16 @@ static const char kSTSHostTable[] = {
   /* "dominicpratt.de", false */ 'd', 'o', 'm', 'i', 'n', 'i', 'c', 'p', 'r', 'a', 't', 't', '.', 'd', 'e', '\0',
   /* "dominikkulaga.pl", true */ 'd', 'o', 'm', 'i', 'n', 'i', 'k', 'k', 'u', 'l', 'a', 'g', 'a', '.', 'p', 'l', '\0',
   /* "dominioanimal.com.br", true */ 'd', 'o', 'm', 'i', 'n', 'i', 'o', 'a', 'n', 'i', 'm', 'a', 'l', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "dominoknihy.cz", true */ 'd', 'o', 'm', 'i', 'n', 'o', 'k', 'n', 'i', 'h', 'y', '.', 'c', 'z', '\0',
   /* "dominomatrix.com", true */ 'd', 'o', 'm', 'i', 'n', 'o', 'm', 'a', 't', 'r', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "domodeco.fr", true */ 'd', 'o', 'm', 'o', 'd', 'e', 'c', 'o', '.', 'f', 'r', '\0',
   /* "domodedovo.travel", true */ 'd', 'o', 'm', 'o', 'd', 'e', 'd', 'o', 'v', 'o', '.', 't', 'r', 'a', 'v', 'e', 'l', '\0',
   /* "domprojects.com", true */ 'd', 'o', 'm', 'p', 'r', 'o', 'j', 'e', 'c', 't', 's', '.', 'c', 'o', 'm', '\0',
-  /* "don.yokohama", true */ 'd', 'o', 'n', '.', 'y', 'o', 'k', 'o', 'h', 'a', 'm', 'a', '\0',
   /* "donateaday.net", true */ 'd', 'o', 'n', 'a', 't', 'e', 'a', 'd', 'a', 'y', '.', 'n', 'e', 't', '\0',
   /* "donateway.com", true */ 'd', 'o', 'n', 'a', 't', 'e', 'w', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "donkeytrekkingkefalonia.com", true */ 'd', 'o', 'n', 'k', 'e', 'y', 't', 'r', 'e', 'k', 'k', 'i', 'n', 'g', 'k', 'e', 'f', 'a', 'l', 'o', 'n', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "donner-reuschel.de", true */ 'd', 'o', 'n', 'n', 'e', 'r', '-', 'r', 'e', 'u', 's', 'c', 'h', 'e', 'l', '.', 'd', 'e', '\0',
   /* "donnons.org", false */ 'd', 'o', 'n', 'n', 'o', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "donotcall.gov", true */ 'd', 'o', 'n', 'o', 't', 'c', 'a', 'l', 'l', '.', 'g', 'o', 'v', '\0',
   /* "donotlink.it", true */ 'd', 'o', 'n', 'o', 't', 'l', 'i', 'n', 'k', '.', 'i', 't', '\0',
   /* "donotspellitgav.in", true */ 'd', 'o', 'n', 'o', 't', 's', 'p', 'e', 'l', 'l', 'i', 't', 'g', 'a', 'v', '.', 'i', 'n', '\0',
@@ -5493,17 +5485,16 @@ static const char kSTSHostTable[] = {
   /* "drumbe.at", true */ 'd', 'r', 'u', 'm', 'b', 'e', '.', 'a', 't', '\0',
   /* "drummondframing.com", true */ 'd', 'r', 'u', 'm', 'm', 'o', 'n', 'd', 'f', 'r', 'a', 'm', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "drunkscifi.com", true */ 'd', 'r', 'u', 'n', 'k', 's', 'c', 'i', 'f', 'i', '.', 'c', 'o', 'm', '\0',
   /* "drupal-expert.it", true */ 'd', 'r', 'u', 'p', 'a', 'l', '-', 'e', 'x', 'p', 'e', 'r', 't', '.', 'i', 't', '\0',
   /* "drupal.org", true */ 'd', 'r', 'u', 'p', 'a', 'l', '.', 'o', 'r', 'g', '\0',
   /* "drweissbrot.net", true */ 'd', 'r', 'w', 'e', 'i', 's', 's', 'b', 'r', 'o', 't', '.', 'n', 'e', 't', '\0',
   /* "drybasement.com", true */ 'd', 'r', 'y', 'b', 'a', 's', 'e', 'm', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "drycleancoalition.org", true */ 'd', 'r', 'y', 'c', 'l', 'e', 'a', 'n', 'c', 'o', 'a', 'l', 'i', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
-  /* "drycreekapiary.com", true */ 'd', 'r', 'y', 'c', 'r', 'e', 'e', 'k', 'a', 'p', 'i', 'a', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "drycreekphoto.com", true */ 'd', 'r', 'y', 'c', 'r', 'e', 'e', 'k', 'p', 'h', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "ds67.de", true */ 'd', 's', '6', '7', '.', 'd', 'e', '\0',
   /* "dsbrowser.com", true */ 'd', 's', 'b', 'r', 'o', 'w', 's', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "dsebastien.net", true */ 'd', 's', 'e', 'b', 'a', 's', 't', 'i', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "dsektionen.se", true */ 'd', 's', 'e', 'k', 't', 'i', 'o', 'n', 'e', 'n', '.', 's', 'e', '\0',
   /* "dsm5.com", true */ 'd', 's', 'm', '5', '.', 'c', 'o', 'm', '\0',
   /* "dsol.hu", true */ 'd', 's', 'o', 'l', '.', 'h', 'u', '\0',
   /* "dt27.org", true */ 'd', 't', '2', '7', '.', 'o', 'r', 'g', '\0',
@@ -5545,17 +5536,16 @@ static const char kSTSHostTable[] = {
   /* "duongpho.com", true */ 'd', 'u', 'o', 'n', 'g', 'p', 'h', 'o', '.', 'c', 'o', 'm', '\0',
   /* "dupree.co", true */ 'd', 'u', 'p', 'r', 'e', 'e', '.', 'c', 'o', '\0',
   /* "durangoenergyllc.com", true */ 'd', 'u', 'r', 'a', 'n', 'g', 'o', 'e', 'n', 'e', 'r', 'g', 'y', 'l', 'l', 'c', '.', 'c', 'o', 'm', '\0',
   /* "duria.de", true */ 'd', 'u', 'r', 'i', 'a', '.', 'd', 'e', '\0',
   /* "durys.be", true */ 'd', 'u', 'r', 'y', 's', '.', 'b', 'e', '\0',
   /* "dustri.org", true */ 'd', 'u', 's', 't', 'r', 'i', '.', 'o', 'r', 'g', '\0',
   /* "dustygroove.com", true */ 'd', 'u', 's', 't', 'y', 'g', 'r', 'o', 'o', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dutch1.nl", true */ 'd', 'u', 't', 'c', 'h', '1', '.', 'n', 'l', '\0',
-  /* "dutchessuganda.com", true */ 'd', 'u', 't', 'c', 'h', 'e', 's', 's', 'u', 'g', 'a', 'n', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "dutchrank.nl", true */ 'd', 'u', 't', 'c', 'h', 'r', 'a', 'n', 'k', '.', 'n', 'l', '\0',
   /* "dutchwanderers.nl", true */ 'd', 'u', 't', 'c', 'h', 'w', 'a', 'n', 'd', 'e', 'r', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "dutchweballiance.nl", true */ 'd', 'u', 't', 'c', 'h', 'w', 'e', 'b', 'a', 'l', 'l', 'i', 'a', 'n', 'c', 'e', '.', 'n', 'l', '\0',
   /* "dutyfreeonboard.com", true */ 'd', 'u', 't', 'y', 'f', 'r', 'e', 'e', 'o', 'n', 'b', 'o', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "dvbris.co.uk", true */ 'd', 'v', 'b', 'r', 'i', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "dvbris.com", true */ 'd', 'v', 'b', 'r', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "dvorupotocnych.sk", true */ 'd', 'v', 'o', 'r', 'u', 'p', 'o', 't', 'o', 'c', 'n', 'y', 'c', 'h', '.', 's', 'k', '\0',
   /* "dvotx.org", true */ 'd', 'v', 'o', 't', 'x', '.', 'o', 'r', 'g', '\0',
@@ -5582,16 +5572,17 @@ static const char kSTSHostTable[] = {
   /* "dynamictostatic.com", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', 't', 'o', 's', 't', 'a', 't', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "dynamicyou.co.uk", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', 'y', 'o', 'u', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "dynastic.co", true */ 'd', 'y', 'n', 'a', 's', 't', 'i', 'c', '.', 'c', 'o', '\0',
   /* "dynn.be", true */ 'd', 'y', 'n', 'n', '.', 'b', 'e', '\0',
   /* "dynorphin.com", true */ 'd', 'y', 'n', 'o', 'r', 'p', 'h', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "dynorphins.com", true */ 'd', 'y', 'n', 'o', 'r', 'p', 'h', 'i', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "dyrenesverden.no", true */ 'd', 'y', 'r', 'e', 'n', 'e', 's', 'v', 'e', 'r', 'd', 'e', 'n', '.', 'n', 'o', '\0',
   /* "dysthymia.com", true */ 'd', 'y', 's', 't', 'h', 'y', 'm', 'i', 'a', '.', 'c', 'o', 'm', '\0',
+  /* "dyz.pw", true */ 'd', 'y', 'z', '.', 'p', 'w', '\0',
   /* "dzeina.ch", true */ 'd', 'z', 'e', 'i', 'n', 'a', '.', 'c', 'h', '\0',
   /* "dziekonski.com", true */ 'd', 'z', 'i', 'e', 'k', 'o', 'n', 's', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "dzndk.com", true */ 'd', 'z', 'n', 'd', 'k', '.', 'c', 'o', 'm', '\0',
   /* "dzndk.net", true */ 'd', 'z', 'n', 'd', 'k', '.', 'n', 'e', 't', '\0',
   /* "dzndk.org", true */ 'd', 'z', 'n', 'd', 'k', '.', 'o', 'r', 'g', '\0',
   /* "dzomo.org", true */ 'd', 'z', 'o', 'm', 'o', '.', 'o', 'r', 'g', '\0',
   /* "e-hon.link", true */ 'e', '-', 'h', 'o', 'n', '.', 'l', 'i', 'n', 'k', '\0',
   /* "e-kontakti.fi", true */ 'e', '-', 'k', 'o', 'n', 't', 'a', 'k', 't', 'i', '.', 'f', 'i', '\0',
@@ -5692,16 +5683,17 @@ static const char kSTSHostTable[] = {
   /* "ecolala.my", true */ 'e', 'c', 'o', 'l', 'a', 'l', 'a', '.', 'm', 'y', '\0',
   /* "ecole-attalens.ch", true */ 'e', 'c', 'o', 'l', 'e', '-', 'a', 't', 't', 'a', 'l', 'e', 'n', 's', '.', 'c', 'h', '\0',
   /* "ecolesrec.ch", true */ 'e', 'c', 'o', 'l', 'e', 's', 'r', 'e', 'c', '.', 'c', 'h', '\0',
   /* "ecology-21.ru", true */ 'e', 'c', 'o', 'l', 'o', 'g', 'y', '-', '2', '1', '.', 'r', 'u', '\0',
   /* "ecompen.co.za", true */ 'e', 'c', 'o', 'm', 'p', 'e', 'n', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "econativa.pt", true */ 'e', 'c', 'o', 'n', 'a', 't', 'i', 'v', 'a', '.', 'p', 't', '\0',
   /* "economy.st", true */ 'e', 'c', 'o', 'n', 'o', 'm', 'y', '.', 's', 't', '\0',
   /* "econsumer.gov", true */ 'e', 'c', 'o', 'n', 's', 'u', 'm', 'e', 'r', '.', 'g', 'o', 'v', '\0',
+  /* "ecorp.cc", true */ 'e', 'c', 'o', 'r', 'p', '.', 'c', 'c', '\0',
   /* "ecos-ev.de", true */ 'e', 'c', 'o', 's', '-', 'e', 'v', '.', 'd', 'e', '\0',
   /* "ecosoftconsult.com", true */ 'e', 'c', 'o', 's', 'o', 'f', 't', 'c', 'o', 'n', 's', 'u', 'l', 't', '.', 'c', 'o', 'm', '\0',
   /* "ecosystem.atlassian.net", true */ 'e', 'c', 'o', 's', 'y', 's', 't', 'e', 'm', '.', 'a', 't', 'l', 'a', 's', 's', 'i', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "ecotruck-pooling.com", true */ 'e', 'c', 'o', 't', 'r', 'u', 'c', 'k', '-', 'p', 'o', 'o', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "ecrimex.net", true */ 'e', 'c', 'r', 'i', 'm', 'e', 'x', '.', 'n', 'e', 't', '\0',
   /* "ectora.com", true */ 'e', 'c', 't', 'o', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "ecupcafe.com", false */ 'e', 'c', 'u', 'p', 'c', 'a', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "ed.gs", true */ 'e', 'd', '.', 'g', 's', '\0',
@@ -6178,16 +6170,17 @@ static const char kSTSHostTable[] = {
   /* "esseriumani.com", true */ 'e', 's', 's', 'e', 'r', 'i', 'u', 'm', 'a', 'n', 'i', '.', 'c', 'o', 'm', '\0',
   /* "essexcosmeticdentists.co.uk", false */ 'e', 's', 's', 'e', 'x', 'c', 'o', 's', 'm', 'e', 't', 'i', 'c', 'd', 'e', 'n', 't', 'i', 's', 't', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "essite.net", true */ 'e', 's', 's', 'i', 't', 'e', '.', 'n', 'e', 't', '\0',
   /* "essoduke.org", true */ 'e', 's', 's', 'o', 'd', 'u', 'k', 'e', '.', 'o', 'r', 'g', '\0',
   /* "essplusmed.org", true */ 'e', 's', 's', 'p', 'l', 'u', 's', 'm', 'e', 'd', '.', 'o', 'r', 'g', '\0',
   /* "estaciona.guru", true */ 'e', 's', 't', 'a', 'c', 'i', 'o', 'n', 'a', '.', 'g', 'u', 'r', 'u', '\0',
   /* "estaleiro.org", true */ 'e', 's', 't', 'a', 'l', 'e', 'i', 'r', 'o', '.', 'o', 'r', 'g', '\0',
   /* "estan.cn", true */ 'e', 's', 't', 'a', 'n', '.', 'c', 'n', '\0',
+  /* "estateczech-eu.ru", true */ 'e', 's', 't', 'a', 't', 'e', 'c', 'z', 'e', 'c', 'h', '-', 'e', 'u', '.', 'r', 'u', '\0',
   /* "estcequonmetenprodaujourdhui.info", true */ 'e', 's', 't', 'c', 'e', 'q', 'u', 'o', 'n', 'm', 'e', 't', 'e', 'n', 'p', 'r', 'o', 'd', 'a', 'u', 'j', 'o', 'u', 'r', 'd', 'h', 'u', 'i', '.', 'i', 'n', 'f', 'o', '\0',
   /* "esteam.se", true */ 'e', 's', 't', 'e', 'a', 'm', '.', 's', 'e', '\0',
   /* "estoic.net", true */ 'e', 's', 't', 'o', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "estonoentraenelexamen.com", true */ 'e', 's', 't', 'o', 'n', 'o', 'e', 'n', 't', 'r', 'a', 'e', 'n', 'e', 'l', 'e', 'x', 'a', 'm', 'e', 'n', '.', 'c', 'o', 'm', '\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',
   /* "etaoinwu.tk", true */ 'e', 't', 'a', 'o', 'i', 'n', 'w', 'u', '.', 't', 'k', '\0',
   /* "etath.com", true */ 'e', 't', 'a', 't', 'h', '.', 'c', 'o', 'm', '\0',
@@ -6491,33 +6484,32 @@ static const char kSTSHostTable[] = {
   /* "fanboi.ch", true */ 'f', 'a', 'n', 'b', 'o', 'i', '.', 'c', 'h', '\0',
   /* "fancy-bridge.com", true */ 'f', 'a', 'n', 'c', 'y', '-', 'b', 'r', 'i', 'd', 'g', 'e', '.', 'c', 'o', 'm', '\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',
   /* "fanfareunion.ch", true */ 'f', 'a', 'n', 'f', 'a', 'r', 'e', 'u', 'n', 'i', 'o', 'n', '.', 'c', 'h', '\0',
   /* "fanflow.com", true */ 'f', 'a', 'n', 'f', 'l', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "fangs.ink", true */ 'f', 'a', 'n', 'g', 's', '.', 'i', 'n', 'k', '\0',
   /* "fanjoe.be", true */ 'f', 'a', 'n', 'j', 'o', 'e', '.', 'b', 'e', '\0',
-  /* "fant.dk", true */ 'f', 'a', 'n', 't', '.', 'd', 'k', '\0',
+  /* "fant.dk", false */ 'f', 'a', 'n', 't', '.', 'd', 'k', '\0',
   /* "fantasticgardenersmelbourne.com.au", true */ 'f', 'a', 'n', 't', 'a', 's', 't', 'i', 'c', 'g', 'a', 'r', 'd', 'e', 'n', 'e', 'r', 's', 'm', 'e', 'l', 'b', 'o', 'u', 'r', 'n', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "fantastichandymanmelbourne.com.au", true */ 'f', 'a', 'n', 't', 'a', 's', 't', 'i', 'c', 'h', 'a', 'n', 'd', 'y', 'm', 'a', 'n', 'm', 'e', 'l', 'b', 'o', 'u', 'r', 'n', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "fantasticpestcontrolmelbourne.com.au", true */ 'f', 'a', 'n', 't', 'a', 's', 't', 'i', 'c', 'p', 'e', 's', 't', 'c', 'o', 'n', 't', 'r', 'o', 'l', 'm', 'e', 'l', 'b', 'o', 'u', 'r', 'n', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "fantasyspectrum.com", true */ 'f', 'a', 'n', 't', 'a', 's', 'y', 's', 'p', 'e', 'c', 't', 'r', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "fantopia.club", true */ 'f', 'a', 'n', 't', 'o', 'p', 'i', 'a', '.', 'c', 'l', 'u', 'b', '\0',
   /* "fanvoice.com", true */ 'f', 'a', 'n', 'v', 'o', 'i', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fanyue123.tk", true */ 'f', 'a', 'n', 'y', 'u', 'e', '1', '2', '3', '.', 't', 'k', '\0',
   /* "fanz.pro", true */ 'f', 'a', 'n', 'z', '.', 'p', 'r', 'o', '\0',
   /* "fap.no", true */ 'f', 'a', 'p', '.', 'n', 'o', '\0',
   /* "faq.ie", true */ 'f', 'a', 'q', '.', 'i', 'e', '\0',
   /* "faq.lookout.com", false */ 'f', 'a', 'q', '.', 'l', 'o', 'o', 'k', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "fara.gov", true */ 'f', 'a', 'r', 'a', '.', 'g', 'o', 'v', '\0',
   /* "faretravel.co.uk", true */ 'f', 'a', 'r', 'e', 't', 'r', 'a', 'v', 'e', 'l', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "farfetchos.com", true */ 'f', 'a', 'r', 'f', 'e', 't', 'c', 'h', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "fargtorget.se", true */ 'f', 'a', 'r', 'g', 't', 'o', 'r', 'g', 'e', 't', '.', 's', 'e', '\0',
-  /* "farhadexchange.com", true */ 'f', 'a', 'r', 'h', 'a', 'd', 'e', 'x', 'c', 'h', 'a', 'n', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "farhood.org", true */ 'f', 'a', 'r', 'h', 'o', 'o', 'd', '.', 'o', 'r', 'g', '\0',
   /* "farmacia.pt", true */ 'f', 'a', 'r', 'm', 'a', 'c', 'i', 'a', '.', 'p', 't', '\0',
   /* "farmacialaboratorio.it", true */ 'f', 'a', 'r', 'm', 'a', 'c', 'i', 'a', 'l', 'a', 'b', 'o', 'r', 'a', 't', 'o', 'r', 'i', 'o', '.', 'i', 't', '\0',
   /* "farmer.dating", true */ 'f', 'a', 'r', 'm', 'e', 'r', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "farmkazuto.com", true */ 'f', 'a', 'r', 'm', 'k', 'a', 'z', 'u', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "faroes.net", true */ 'f', 'a', 'r', 'o', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "faroes.org", true */ 'f', 'a', 'r', 'o', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "farsil.eu", true */ 'f', 'a', 'r', 's', 'i', 'l', '.', 'e', 'u', '\0',
@@ -6552,16 +6544,17 @@ static const char kSTSHostTable[] = {
   /* "fatox.de", true */ 'f', 'a', 't', 'o', 'x', '.', 'd', 'e', '\0',
   /* "fatzebra.com.au", false */ 'f', 'a', 't', 'z', 'e', 'b', 'r', 'a', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "faucetbox.com", false */ 'f', 'a', 'u', 'c', 'e', 't', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "favorit.club", true */ 'f', 'a', 'v', 'o', 'r', 'i', 't', '.', 'c', 'l', 'u', 'b', '\0',
   /* "fawong.com", true */ 'f', 'a', 'w', 'o', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "faxreader.net", true */ 'f', 'a', 'x', 'r', 'e', 'a', 'd', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "fbcfairburn.com", true */ 'f', 'b', 'c', 'f', 'a', 'i', 'r', 'b', 'u', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "fbcopy.com", true */ 'f', 'b', 'c', 'o', 'p', 'y', '.', 'c', 'o', 'm', '\0',
+  /* "fbi.pw", true */ 'f', 'b', 'i', '.', 'p', 'w', '\0',
   /* "fbijobs.gov", true */ 'f', 'b', 'i', 'j', 'o', 'b', 's', '.', 'g', 'o', 'v', '\0',
   /* "fca-tools.com", true */ 'f', 'c', 'a', '-', 't', 'o', 'o', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "fcapartsdb.com", true */ 'f', 'c', 'a', 'p', 'a', 'r', 't', 's', 'd', 'b', '.', 'c', 'o', 'm', '\0',
   /* "fcburk.de", true */ 'f', 'c', 'b', 'u', 'r', 'k', '.', 'd', 'e', '\0',
   /* "fckd.net", true */ 'f', 'c', 'k', 'd', '.', 'n', 'e', 't', '\0',
   /* "fcsic.gov", true */ 'f', 'c', 's', 'i', 'c', '.', 'g', 'o', 'v', '\0',
   /* "fdlibre.eu", true */ 'f', 'd', 'l', 'i', 'b', 'r', 'e', '.', 'e', 'u', '\0',
   /* "fdsys.gov", false */ 'f', 'd', 's', 'y', 's', '.', 'g', 'o', 'v', '\0',
@@ -6691,17 +6684,16 @@ static const char kSTSHostTable[] = {
   /* "file-pdf.it", true */ 'f', 'i', 'l', 'e', '-', 'p', 'd', 'f', '.', 'i', 't', '\0',
   /* "filebox.moe", true */ 'f', 'i', 'l', 'e', 'b', 'o', 'x', '.', 'm', 'o', 'e', '\0',
   /* "filedir.com", false */ 'f', 'i', 'l', 'e', 'd', 'i', 'r', '.', 'c', 'o', 'm', '\0',
   /* "fileio.io", true */ 'f', 'i', 'l', 'e', 'i', 'o', '.', 'i', 'o', '\0',
   /* "filesense.com", true */ 'f', 'i', 'l', 'e', 's', 'e', 'n', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "filestar.io", true */ 'f', 'i', 'l', 'e', 's', 't', 'a', 'r', '.', 'i', 'o', '\0',
   /* "filhodohomem.com", true */ 'f', 'i', 'l', 'h', 'o', 'd', 'o', 'h', 'o', 'm', 'e', 'm', '.', 'c', 'o', 'm', '\0',
   /* "filhomes.ph", true */ 'f', 'i', 'l', 'h', 'o', 'm', 'e', 's', '.', 'p', 'h', '\0',
-  /* "filip-prochazka.com", true */ 'f', 'i', 'l', 'i', 'p', '-', 'p', 'r', 'o', 'c', 'h', 'a', 'z', 'k', 'a', '.', 'c', 'o', 'm', '\0',
   /* "filippo.io", true */ 'f', 'i', 'l', 'i', 'p', 'p', 'o', '.', 'i', 'o', '\0',
   /* "fillitupchallenge.eu", true */ 'f', 'i', 'l', 'l', 'i', 't', 'u', 'p', 'c', 'h', 'a', 'l', 'l', 'e', 'n', 'g', 'e', '.', 'e', 'u', '\0',
   /* "fillmysuitca.se", true */ 'f', 'i', 'l', 'l', 'm', 'y', 's', 'u', 'i', 't', 'c', 'a', '.', 's', 'e', '\0',
   /* "fillo.sk", true */ 'f', 'i', 'l', 'l', 'o', '.', 's', 'k', '\0',
   /* "film-tutorial.com", true */ 'f', 'i', 'l', 'm', '-', 't', 'u', 't', 'o', 'r', 'i', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "film.photos", true */ 'f', 'i', 'l', 'm', '.', 'p', 'h', 'o', 't', 'o', 's', '\0',
   /* "filmatiporno.xxx", true */ 'f', 'i', 'l', 'm', 'a', 't', 'i', 'p', 'o', 'r', 'n', 'o', '.', 'x', 'x', 'x', '\0',
   /* "filme-online.eu.com", true */ 'f', 'i', 'l', 'm', 'e', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'e', 'u', '.', 'c', 'o', 'm', '\0',
@@ -6805,16 +6797,17 @@ static const char kSTSHostTable[] = {
   /* "flam.io", true */ 'f', 'l', 'a', 'm', '.', 'i', 'o', '\0',
   /* "flamer-scene.com", false */ 'f', 'l', 'a', 'm', 'e', 'r', '-', 's', 'c', 'e', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "flamingcow.tv", true */ 'f', 'l', 'a', 'm', 'i', 'n', 'g', 'c', 'o', 'w', '.', 't', 'v', '\0',
   /* "flamingkeys.com", true */ 'f', 'l', 'a', 'm', 'i', 'n', 'g', 'k', 'e', 'y', 's', '.', 'c', 'o', 'm', '\0',
   /* "flamingkeys.com.au", true */ 'f', 'l', 'a', 'm', 'i', 'n', 'g', 'k', 'e', 'y', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "flamme-von-anor.de", true */ 'f', 'l', 'a', 'm', 'm', 'e', '-', 'v', 'o', 'n', '-', 'a', 'n', 'o', 'r', '.', 'd', 'e', '\0',
   /* "flana.com", true */ 'f', 'l', 'a', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "flaretechnologies.io", true */ 'f', 'l', 'a', 'r', 'e', 't', 'e', 'c', 'h', 'n', 'o', 'l', 'o', 'g', 'i', 'e', 's', '.', 'i', 'o', '\0',
+  /* "flashback.org", true */ 'f', 'l', 'a', 's', 'h', 'b', 'a', 'c', 'k', '.', 'o', 'r', 'g', '\0',
   /* "flashgot.net", true */ 'f', 'l', 'a', 's', 'h', 'g', 'o', 't', '.', 'n', 'e', 't', '\0',
   /* "flat.io", true */ 'f', 'l', 'a', 't', '.', 'i', 'o', '\0',
   /* "flatbellyreview.com", true */ 'f', 'l', 'a', 't', 'b', 'e', 'l', 'l', 'y', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'c', 'o', 'm', '\0',
   /* "flatpackmates.co.uk", true */ 'f', 'l', 'a', 't', 'p', 'a', 'c', 'k', 'm', 'a', 't', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "flauschig.net", true */ 'f', 'l', 'a', 'u', 's', 'c', 'h', 'i', 'g', '.', 'n', 'e', 't', '\0',
   /* "flavr.be", true */ 'f', 'l', 'a', 'v', 'r', '.', 'b', 'e', '\0',
   /* "flawlesscowboy.xyz", true */ 'f', 'l', 'a', 'w', 'l', 'e', 's', 's', 'c', 'o', 'w', 'b', 'o', 'y', '.', 'x', 'y', 'z', '\0',
   /* "flazznetworks.com", false */ 'f', 'l', 'a', 'z', 'z', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
@@ -7126,17 +7119,16 @@ static const char kSTSHostTable[] = {
   /* "freshmaza.com", true */ 'f', 'r', 'e', 's', 'h', 'm', 'a', 'z', 'a', '.', 'c', 'o', 'm', '\0',
   /* "fretscha.com", true */ 'f', 'r', 'e', 't', 's', 'c', 'h', 'a', '.', 'c', 'o', 'm', '\0',
   /* "fretworksec.com", true */ 'f', 'r', 'e', 't', 'w', 'o', 'r', 'k', 's', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "frickelboxx.de", true */ 'f', 'r', 'i', 'c', 'k', 'e', 'l', 'b', 'o', 'x', 'x', '.', 'd', 'e', '\0',
   /* "frickenate.com", true */ 'f', 'r', 'i', 'c', 'k', 'e', 'n', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "friedhelm-wolf.de", true */ 'f', 'r', 'i', 'e', 'd', 'h', 'e', 'l', 'm', '-', 'w', 'o', 'l', 'f', '.', 'd', 'e', '\0',
   /* "friedrich-foto-art.de", true */ 'f', 'r', 'i', 'e', 'd', 'r', 'i', 'c', 'h', '-', 'f', 'o', 't', 'o', '-', 'a', 'r', 't', '.', 'd', 'e', '\0',
   /* "friedsamphotography.com", true */ 'f', 'r', 'i', 'e', 'd', 's', 'a', 'm', 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'c', 'o', 'm', '\0',
-  /* "friendlysiberia.com", true */ 'f', 'r', 'i', 'e', 'n', 'd', 'l', 'y', 's', 'i', 'b', 'e', 'r', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "friends-of-naz.com", true */ 'f', 'r', 'i', 'e', 'n', 'd', 's', '-', 'o', 'f', '-', 'n', 'a', 'z', '.', 'c', 'o', 'm', '\0',
   /* "friends24.cz", true */ 'f', 'r', 'i', 'e', 'n', 'd', 's', '2', '4', '.', 'c', 'z', '\0',
   /* "friendship-quotes.co.uk", true */ 'f', 'r', 'i', 'e', 'n', 'd', 's', 'h', 'i', 'p', '-', 'q', 'u', 'o', 't', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "friet.org", true */ 'f', 'r', 'i', 'e', 't', '.', 'o', 'r', 'g', '\0',
   /* "frigi.ch", true */ 'f', 'r', 'i', 'g', 'i', '.', 'c', 'h', '\0',
   /* "frigolit.net", true */ 'f', 'r', 'i', 'g', 'o', 'l', 'i', 't', '.', 'n', 'e', 't', '\0',
   /* "frillip.com", true */ 'f', 'r', 'i', 'l', 'l', 'i', 'p', '.', 'c', 'o', 'm', '\0',
   /* "frinkiac.com", true */ 'f', 'r', 'i', 'n', 'k', 'i', 'a', 'c', '.', 'c', 'o', 'm', '\0',
@@ -7334,17 +7326,16 @@ static const char kSTSHostTable[] = {
   /* "gamecollector.be", true */ 'g', 'a', 'm', 'e', 'c', 'o', 'l', 'l', 'e', 'c', 't', 'o', 'r', '.', 'b', 'e', '\0',
   /* "gameconservation.org.uk", true */ 'g', 'a', 'm', 'e', 'c', 'o', 'n', 's', 'e', 'r', 'v', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "gamedevelopers.pl", true */ 'g', 'a', 'm', 'e', 'd', 'e', 'v', 'e', 'l', 'o', 'p', 'e', 'r', 's', '.', 'p', 'l', '\0',
   /* "gamegix.com", true */ 'g', 'a', 'm', 'e', 'g', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "gameguardian.net", true */ 'g', 'a', 'm', 'e', 'g', 'u', 'a', 'r', 'd', 'i', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "gameisbest.jp", true */ 'g', 'a', 'm', 'e', 'i', 's', 'b', 'e', 's', 't', '.', 'j', 'p', '\0',
   /* "gameofbay.org", true */ 'g', 'a', 'm', 'e', 'o', 'f', 'b', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "gamepad.com.br", true */ 'g', 'a', 'm', 'e', 'p', 'a', 'd', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
-  /* "gamepader.com", true */ 'g', 'a', 'm', 'e', 'p', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "gameparagon.info", true */ 'g', 'a', 'm', 'e', 'p', 'a', 'r', 'a', 'g', 'o', 'n', '.', 'i', 'n', 'f', 'o', '\0',
   /* "gamercredo.com", true */ 'g', 'a', 'm', 'e', 'r', 'c', 'r', 'e', 'd', 'o', '.', 'c', 'o', 'm', '\0',
   /* "gamercredo.net", true */ 'g', 'a', 'm', 'e', 'r', 'c', 'r', 'e', 'd', 'o', '.', 'n', 'e', 't', '\0',
   /* "gamestats.gg", true */ 'g', 'a', 'm', 'e', 's', 't', 'a', 't', 's', '.', 'g', 'g', '\0',
   /* "gametium.com", true */ 'g', 'a', 'm', 'e', 't', 'i', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "gametium.es", true */ 'g', 'a', 'm', 'e', 't', 'i', 'u', 'm', '.', 'e', 's', '\0',
   /* "gamhealth.net", true */ 'g', 'a', 'm', 'h', 'e', 'a', 'l', 't', 'h', '.', 'n', 'e', 't', '\0',
   /* "gamingexodus.com", true */ 'g', 'a', 'm', 'i', 'n', 'g', 'e', 'x', 'o', 'd', 'u', 's', '.', 'c', 'o', 'm', '\0',
@@ -7379,17 +7370,16 @@ static const char kSTSHostTable[] = {
   /* "garycarmell.com", true */ 'g', 'a', 'r', 'y', 'c', 'a', 'r', 'm', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "garyjones.co.uk", true */ 'g', 'a', 'r', 'y', 'j', 'o', 'n', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "garystallman.com", true */ 'g', 'a', 'r', 'y', 's', 't', 'a', 'l', 'l', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "garywhittington.com", true */ 'g', 'a', 'r', 'y', 'w', 'h', 'i', 't', 't', 'i', 'n', 'g', 't', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "gasbarkenora.com", true */ 'g', 'a', 's', 'b', 'a', 'r', 'k', 'e', 'n', 'o', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "gasnews.net", true */ 'g', 'a', 's', 'n', 'e', 'w', 's', '.', 'n', 'e', 't', '\0',
   /* "gasser-daniel.ch", false */ 'g', 'a', 's', 's', 'e', 'r', '-', 'd', 'a', 'n', 'i', 'e', 'l', '.', 'c', 'h', '\0',
   /* "gastauftritt.net", true */ 'g', 'a', 's', 't', 'a', 'u', 'f', 't', 'r', 'i', 't', 't', '.', 'n', 'e', 't', '\0',
-  /* "gateaucreation.fr", true */ 'g', 'a', 't', 'e', 'a', 'u', 'c', 'r', 'e', 'a', 't', 'i', 'o', 'n', '.', 'f', 'r', '\0',
   /* "gatemoves.com", true */ 'g', 'a', 't', 'e', 'm', 'o', 'v', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "gateworld.fr", true */ 'g', 'a', 't', 'e', 'w', 'o', 'r', 'l', 'd', '.', 'f', 'r', '\0',
   /* "gatilagata.com.br", true */ 'g', 'a', 't', 'i', 'l', 'a', 'g', 'a', 't', 'a', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "gauche.com", true */ 'g', 'a', 'u', 'c', 'h', 'e', '.', 'c', 'o', 'm', '\0',
   /* "gauthamelango.com", false */ 'g', 'a', 'u', 't', 'h', 'a', 'm', 'e', 'l', 'a', 'n', 'g', 'o', '.', 'c', 'o', 'm', '\0',
   /* "gautvedt.no", true */ 'g', 'a', 'u', 't', 'v', 'e', 'd', 't', '.', 'n', 'o', '\0',
   /* "gavick.com", false */ 'g', 'a', 'v', 'i', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "gay-sissies.com", true */ 'g', 'a', 'y', '-', 's', 'i', 's', 's', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
@@ -7577,16 +7567,17 @@ 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',
   /* "ggx.us", true */ 'g', 'g', 'x', '.', 'u', 's', '\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',
   /* "ghislainphu.fr", true */ 'g', 'h', 'i', 's', 'l', 'a', 'i', 'n', 'p', 'h', 'u', '.', 'f', 'r', '\0',
   /* "ghostblog.info", true */ 'g', 'h', 'o', 's', 't', 'b', 'l', 'o', 'g', '.', 'i', 'n', 'f', 'o', '\0',
+  /* "ghostcir.com", true */ 'g', 'h', 'o', 's', 't', 'c', 'i', 'r', '.', 'c', 'o', 'm', '\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',
   /* "ghrelinblocker.org", true */ 'g', 'h', 'r', 'e', 'l', 'i', 'n', 'b', 'l', 'o', 'c', 'k', 'e', 'r', '.', 'o', 'r', 'g', '\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',
   /* "gianproperties.com", true */ 'g', 'i', 'a', 'n', 'p', 'r', 'o', 'p', 'e', 'r', 't', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "giant-panda.com", true */ 'g', 'i', 'a', 'n', 't', '-', 'p', 'a', 'n', 'd', 'a', '.', 'c', 'o', 'm', '\0',
@@ -7749,17 +7740,16 @@ static const char kSTSHostTable[] = {
   /* "gomiblog.com", true */ 'g', 'o', 'm', 'i', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "gondawa.com", true */ 'g', 'o', 'n', 'd', 'a', 'w', 'a', '.', 'c', 'o', 'm', '\0',
   /* "gongjianwei.com", false */ 'g', 'o', 'n', 'g', 'j', 'i', 'a', 'n', 'w', 'e', 'i', '.', 'c', 'o', 'm', '\0',
   /* "gongjuhao.com", true */ 'g', 'o', 'n', 'g', 'j', 'u', 'h', 'a', 'o', '.', 'c', 'o', 'm', '\0',
   /* "gonkar.com", true */ 'g', 'o', 'n', 'k', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "goo.gl", true */ 'g', 'o', 'o', '.', 'g', 'l', '\0',
   /* "good-tips.pro", true */ 'g', 'o', 'o', 'd', '-', 't', 'i', 'p', 's', '.', 'p', 'r', 'o', '\0',
   /* "goodfurday.ca", true */ 'g', 'o', 'o', 'd', 'f', 'u', 'r', 'd', 'a', 'y', '.', 'c', 'a', '\0',
-  /* "goodmengroup.de", true */ 'g', 'o', 'o', 'd', 'm', 'e', 'n', 'g', 'r', 'o', 'u', 'p', '.', 'd', 'e', '\0',
   /* "google", true */ 'g', 'o', 'o', 'g', 'l', 'e', '\0',
   /* "google-analytics.com", true */ 'g', 'o', 'o', 'g', 'l', 'e', '-', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "googleandroid.cz", true */ 'g', 'o', 'o', 'g', 'l', 'e', 'a', 'n', 'd', 'r', 'o', 'i', 'd', '.', 'c', 'z', '\0',
   /* "googlemail.com", false */ 'g', 'o', 'o', 'g', 'l', 'e', 'm', 'a', 'i', 'l', '.', 'c', 'o', 'm', '\0',
   /* "googleplex.com", true */ 'g', 'o', 'o', 'g', 'l', 'e', 'p', 'l', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "googlesource.com", true */ 'g', 'o', 'o', 'g', 'l', 'e', 's', 'o', 'u', 'r', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "googley.fr", true */ 'g', 'o', 'o', 'g', 'l', 'e', 'y', '.', 'f', 'r', '\0',
   /* "goombi.fr", true */ 'g', 'o', 'o', 'm', 'b', 'i', '.', 'f', 'r', '\0',
@@ -7801,16 +7791,17 @@ static const char kSTSHostTable[] = {
   /* "governorhub.com", true */ 'g', 'o', 'v', 'e', 'r', 'n', 'o', 'r', 'h', 'u', 'b', '.', 'c', 'o', 'm', '\0',
   /* "govtrack.us", true */ 'g', 'o', 'v', 't', 'r', 'a', 'c', 'k', '.', 'u', 's', '\0',
   /* "gowe.wang", false */ 'g', 'o', 'w', 'e', '.', 'w', 'a', 'n', 'g', '\0',
   /* "gpcsolutions.fr", true */ 'g', 'p', 'c', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'f', 'r', '\0',
   /* "gpfclan.de", true */ 'g', 'p', 'f', 'c', 'l', 'a', 'n', '.', 'd', 'e', '\0',
   /* "gplintegratedit.com", true */ 'g', 'p', 'l', 'i', 'n', 't', 'e', 'g', 'r', 'a', 't', 'e', 'd', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "gpo.gov", false */ 'g', 'p', 'o', '.', 'g', 'o', 'v', '\0',
   /* "gprs.uk.com", true */ 'g', 'p', 'r', 's', '.', 'u', 'k', '.', 'c', 'o', 'm', '\0',
+  /* "gps.com.br", true */ 'g', 'p', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "gpsarena.ro", true */ 'g', 'p', 's', 'a', 'r', 'e', 'n', 'a', '.', 'r', 'o', '\0',
   /* "gpsvideocanada.com", true */ 'g', 'p', 's', 'v', 'i', 'd', 'e', 'o', 'c', 'a', 'n', 'a', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "gpws.ovh", true */ 'g', 'p', 'w', 's', '.', 'o', 'v', 'h', '\0',
   /* "gr.search.yahoo.com", false */ 'g', 'r', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "gra2.com", true */ 'g', 'r', 'a', '2', '.', 'c', 'o', 'm', '\0',
   /* "graasp.net", true */ 'g', 'r', 'a', 'a', 's', 'p', '.', 'n', 'e', 't', '\0',
   /* "grace-wan.com", true */ 'g', 'r', 'a', 'c', 'e', '-', 'w', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "gracebaking.com", true */ 'g', 'r', 'a', 'c', 'e', 'b', 'a', 'k', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
@@ -7887,24 +7878,24 @@ static const char kSTSHostTable[] = {
   /* "greensolid.biz", true */ 'g', 'r', 'e', 'e', 'n', 's', 'o', 'l', 'i', 'd', '.', 'b', 'i', 'z', '\0',
   /* "greenteamtwente.nl", true */ 'g', 'r', 'e', 'e', 'n', 't', 'e', 'a', 'm', 't', 'w', 'e', 'n', 't', 'e', '.', 'n', 'l', '\0',
   /* "greenvpn.ltd", true */ 'g', 'r', 'e', 'e', 'n', 'v', 'p', 'n', '.', 'l', 't', 'd', '\0',
   /* "greger.me", true */ 'g', 'r', 'e', 'g', 'e', 'r', '.', 'm', 'e', '\0',
   /* "gregmartyn.com", true */ 'g', 'r', 'e', 'g', 'm', 'a', 'r', 't', 'y', 'n', '.', 'c', 'o', 'm', '\0',
   /* "gregmilton.com", true */ 'g', 'r', 'e', 'g', 'm', 'i', 'l', 't', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "gregmilton.org", true */ 'g', 'r', 'e', 'g', 'm', 'i', 'l', 't', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "gregorians.org", true */ 'g', 'r', 'e', 'g', 'o', 'r', 'i', 'a', 'n', 's', '.', 'o', 'r', 'g', '\0',
+  /* "gregorykelleher.com", true */ 'g', 'r', 'e', 'g', 'o', 'r', 'y', 'k', 'e', 'l', 'l', 'e', 'h', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "gregorywiest.com", true */ 'g', 'r', 'e', 'g', 'o', 'r', 'y', 'w', 'i', 'e', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "greiners.net", true */ 'g', 'r', 'e', 'i', 'n', 'e', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "grekland.guide", true */ 'g', 'r', 'e', 'k', 'l', 'a', 'n', 'd', '.', 'g', 'u', 'i', 'd', 'e', '\0',
   /* "grepmaste.rs", true */ 'g', 'r', 'e', 'p', 'm', 'a', 's', 't', 'e', '.', 'r', 's', '\0',
   /* "grepular.com", true */ 'g', 'r', 'e', 'p', 'u', 'l', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "gresak.io", true */ 'g', 'r', 'e', 's', 'a', 'k', '.', 'i', 'o', '\0',
   /* "grettogeek.com", true */ 'g', 'r', 'e', 't', 't', 'o', 'g', 'e', 'e', 'k', '.', 'c', 'o', 'm', '\0',
-  /* "grevesgarten.de", true */ 'g', 'r', 'e', 'v', 'e', 's', 'g', 'a', 'r', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "grey.house", true */ 'g', 'r', 'e', 'y', '.', 'h', 'o', 'u', 's', 'e', '\0',
   /* "greybit.net", true */ 'g', 'r', 'e', 'y', 'b', 'i', 't', '.', 'n', 'e', 't', '\0',
   /* "greysky.me", true */ 'g', 'r', 'e', 'y', 's', 'k', 'y', '.', 'm', 'e', '\0',
   /* "greyskymedia.com", true */ 'g', 'r', 'e', 'y', 's', 'k', 'y', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "greysolutions.it", true */ 'g', 'r', 'e', 'y', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'i', 't', '\0',
   /* "greywizard.com", true */ 'g', 'r', 'e', 'y', 'w', 'i', 'z', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "grh.am", true */ 'g', 'r', 'h', '.', 'a', 'm', '\0',
   /* "grian-bam.at", true */ 'g', 'r', 'i', 'a', 'n', '-', 'b', 'a', 'm', '.', 'a', 't', '\0',
@@ -8089,29 +8080,27 @@ static const char kSTSHostTable[] = {
   /* "hackerstxt.org", true */ 'h', 'a', 'c', 'k', 'e', 'r', 's', 't', 'x', 't', '.', 'o', 'r', 'g', '\0',
   /* "hackgins.com", true */ 'h', 'a', 'c', 'k', 'g', 'i', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "hackingdh.com", true */ 'h', 'a', 'c', 'k', 'i', 'n', 'g', 'd', 'h', '.', 'c', 'o', 'm', '\0',
   /* "hackmd.io", true */ 'h', 'a', 'c', 'k', 'm', 'd', '.', 'i', 'o', '\0',
   /* "hacksnack.io", true */ 'h', 'a', 'c', 'k', 's', 'n', 'a', 'c', 'k', '.', 'i', 'o', '\0',
   /* "hackthissite.org", true */ 'h', 'a', 'c', 'k', 't', 'h', 'i', 's', 's', 'i', 't', 'e', '.', 'o', 'r', 'g', '\0',
   /* "hacktivis.me", true */ 'h', 'a', 'c', 'k', 't', 'i', 'v', 'i', 's', '.', 'm', 'e', '\0',
   /* "hackyourfaceoff.com", true */ 'h', 'a', 'c', 'k', 'y', 'o', 'u', 'r', 'f', 'a', 'c', 'e', 'o', 'f', 'f', '.', 'c', 'o', 'm', '\0',
-  /* "hadaf.pro", true */ 'h', 'a', 'd', 'a', 'f', '.', 'p', 'r', 'o', '\0',
   /* "hadleighswimmingclub.co.uk", true */ 'h', 'a', 'd', 'l', 'e', 'i', 'g', 'h', 's', 'w', 'i', 'm', 'm', 'i', 'n', 'g', 'c', 'l', 'u', 'b', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "hadouk.in", true */ 'h', 'a', 'd', 'o', 'u', 'k', '.', 'i', 'n', '\0',
   /* "hadrons.org", true */ 'h', 'a', 'd', 'r', 'o', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "haefligermedia.ch", true */ 'h', 'a', 'e', 'f', 'l', 'i', 'g', 'e', 'r', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'h', '\0',
   /* "haehnlein.at", true */ 'h', 'a', 'e', 'h', 'n', 'l', 'e', 'i', 'n', '.', 'a', 't', '\0',
   /* "haens.li", true */ 'h', 'a', 'e', 'n', 's', '.', 'l', 'i', '\0',
   /* "hafniatimes.com", true */ 'h', 'a', 'f', 'n', 'i', 'a', 't', 'i', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "haiboxu.com", true */ 'h', 'a', 'i', 'b', 'o', 'x', 'u', '.', 'c', 'o', 'm', '\0',
   /* "hail2u.net", true */ 'h', 'a', 'i', 'l', '2', 'u', '.', 'n', 'e', 't', '\0',
   /* "hailer.com", true */ 'h', 'a', 'i', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "haircrazy.com", true */ 'h', 'a', 'i', 'r', 'c', 'r', 'a', 'z', 'y', '.', 'c', 'o', 'm', '\0',
-  /* "hajnzic.at", true */ 'h', 'a', 'j', 'n', 'z', 'i', 'c', '.', 'a', 't', '\0',
   /* "hakase.kr", true */ 'h', 'a', 'k', 'a', 's', 'e', '.', 'k', 'r', '\0',
   /* "hakatabijin-mind.com", true */ 'h', 'a', 'k', 'a', 't', 'a', 'b', 'i', 'j', 'i', 'n', '-', 'm', 'i', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "hake.me", true */ 'h', 'a', 'k', 'e', '.', 'm', 'e', '\0',
   /* "hakugin.me", true */ 'h', 'a', 'k', 'u', 'g', 'i', 'n', '.', 'm', 'e', '\0',
   /* "halacs.hu", true */ 'h', 'a', 'l', 'a', 'c', 's', '.', 'h', 'u', '\0',
   /* "halkyon.net", true */ 'h', 'a', 'l', 'k', 'y', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "hallelujahsoftware.com", true */ 'h', 'a', 'l', 'l', 'e', 'l', 'u', 'j', 'a', 'h', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "hallhuber.com", true */ 'h', 'a', 'l', 'l', 'h', 'u', 'b', 'e', 'r', '.', 'c', 'o', 'm', '\0',
@@ -8337,17 +8326,16 @@ static const char kSTSHostTable[] = {
   /* "heimonen.eu", true */ 'h', 'e', 'i', 'm', 'o', 'n', 'e', 'n', '.', 'e', 'u', '\0',
   /* "heimprofis.de", true */ 'h', 'e', 'i', 'm', 'p', 'r', 'o', 'f', 'i', 's', '.', 'd', 'e', '\0',
   /* "heinpost.nl", false */ 'h', 'e', 'i', 'n', 'p', 'o', 's', 't', '.', 'n', 'l', '\0',
   /* "heisenberg.co", true */ 'h', 'e', 'i', 's', 'e', 'n', 'b', 'e', 'r', 'g', '.', 'c', 'o', '\0',
   /* "heissluft-fritteuse.com", true */ 'h', 'e', 'i', 's', 's', 'l', 'u', 'f', 't', '-', 'f', 'r', 'i', 't', 't', 'e', 'u', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "heitland-it.de", true */ 'h', 'e', 'i', 't', 'l', 'a', 'n', 'd', '-', 'i', 't', '.', 'd', 'e', '\0',
   /* "hejahanif.se", true */ 'h', 'e', 'j', 'a', 'h', 'a', 'n', 'i', 'f', '.', 's', 'e', '\0',
   /* "hejsupport.se", true */ 'h', 'e', 'j', 's', 'u', 'p', 'p', 'o', 'r', 't', '.', 's', 'e', '\0',
-  /* "hekeki.com", true */ 'h', 'e', 'k', 'e', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "helden-spielen.de", true */ 'h', 'e', 'l', 'd', 'e', 'n', '-', 's', 'p', 'i', 'e', 'l', 'e', 'n', '.', 'd', 'e', '\0',
   /* "heldenhalde.de", true */ 'h', 'e', 'l', 'd', 'e', 'n', 'h', 'a', 'l', 'd', 'e', '.', 'd', 'e', '\0',
   /* "hele.cz", true */ 'h', 'e', 'l', 'e', '.', 'c', 'z', '\0',
   /* "helenkellersimulator.org", true */ 'h', 'e', 'l', 'e', 'n', 'k', 'e', 'l', 'l', 'e', 'r', 's', 'i', 'm', 'u', 'l', 'a', 't', 'o', 'r', '.', 'o', 'r', 'g', '\0',
   /* "helgakristoffer.com", true */ 'h', 'e', 'l', 'g', 'a', 'k', 'r', 'i', 's', 't', 'o', 'f', 'f', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "helgakristoffer.wedding", true */ 'h', 'e', 'l', 'g', 'a', 'k', 'r', 'i', 's', 't', 'o', 'f', 'f', 'e', 'r', '.', 'w', 'e', 'd', 'd', 'i', 'n', 'g', '\0',
   /* "helichat.de", true */ 'h', 'e', 'l', 'i', 'c', 'h', 'a', 't', '.', 'd', 'e', '\0',
   /* "helikon.ro", true */ 'h', 'e', 'l', 'i', 'k', 'o', 'n', '.', 'r', 'o', '\0',
@@ -8767,16 +8755,17 @@ static const char kSTSHostTable[] = {
   /* "hund.io", true */ 'h', 'u', 'n', 'd', '.', 'i', 'o', '\0',
   /* "hundeformel.de", true */ 'h', 'u', 'n', 'd', 'e', 'f', 'o', 'r', 'm', 'e', 'l', '.', 'd', 'e', '\0',
   /* "hundter.com", true */ 'h', 'u', 'n', 'd', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "hunger.im", true */ 'h', 'u', 'n', 'g', 'e', 'r', '.', 'i', 'm', '\0',
   /* "hunter.io", true */ 'h', 'u', 'n', 't', 'e', 'r', '.', 'i', 'o', '\0',
   /* "huntingdonlifesciences.com", true */ 'h', 'u', 'n', 't', 'i', 'n', 'g', 'd', 'o', 'n', 'l', 'i', 'f', 'e', 's', 'c', 'i', 'e', 'n', 'c', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "huntshomeinspections.com", true */ 'h', 'u', 'n', 't', 's', 'h', 'o', 'm', 'e', 'i', 'n', 's', 'p', 'e', 'c', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "huodongweb.com", true */ 'h', 'u', 'o', 'd', 'o', 'n', 'g', 'w', 'e', 'b', '.', 'c', 'o', 'm', '\0',
+  /* "hupp.se", true */ 'h', 'u', 'p', 'p', '.', 's', 'e', '\0',
   /* "hurd.is", true */ 'h', 'u', 'r', 'd', '.', 'i', 's', '\0',
   /* "huren.nl", true */ 'h', 'u', 'r', 'e', 'n', '.', 'n', 'l', '\0',
   /* "huroji.com", true */ 'h', 'u', 'r', 'o', 'j', 'i', '.', 'c', 'o', 'm', '\0',
   /* "husakbau.at", true */ 'h', 'u', 's', 'a', 'k', 'b', 'a', 'u', '.', 'a', 't', '\0',
   /* "hushfile.it", true */ 'h', 'u', 's', 'h', 'f', 'i', 'l', 'e', '.', 'i', 't', '\0',
   /* "husic.net", true */ 'h', 'u', 's', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "husky.xyz", true */ 'h', 'u', 's', 'k', 'y', '.', 'x', 'y', 'z', '\0',
   /* "huskyinc.us", true */ 'h', 'u', 's', 'k', 'y', 'i', 'n', 'c', '.', 'u', 's', '\0',
@@ -8873,16 +8862,17 @@ static const char kSTSHostTable[] = {
   /* "icmp2018.org", true */ 'i', 'c', 'm', 'p', '2', '0', '1', '8', '.', 'o', 'r', 'g', '\0',
   /* "icodeconnect.com", true */ 'i', 'c', 'o', 'd', 'e', 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "icodesign.me", false */ 'i', 'c', 'o', 'd', 'e', 's', 'i', 'g', 'n', '.', 'm', 'e', '\0',
   /* "iconomi.net", true */ 'i', 'c', 'o', 'n', 'o', 'm', 'i', '.', 'n', 'e', 't', '\0',
   /* "icpc.pp.ua", true */ 'i', 'c', 'p', 'c', '.', 'p', 'p', '.', 'u', 'a', '\0',
   /* "ict-concept.nl", false */ 'i', 'c', 't', '-', 'c', 'o', 'n', 'c', 'e', 'p', 't', '.', 'n', 'l', '\0',
   /* "ict-radar.com", true */ 'i', 'c', 't', '-', 'r', 'a', 'd', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "ict-radar.nl", true */ 'i', 'c', 't', '-', 'r', 'a', 'd', 'a', 'r', '.', 'n', 'l', '\0',
+  /* "ictinforensics.org", true */ 'i', 'c', 't', 'i', 'n', 'f', 'o', 'r', 'e', 'n', 's', 'i', 'c', 's', '.', 'o', 'r', 'g', '\0',
   /* "ictpro.info", true */ 'i', 'c', 't', 'p', 'r', 'o', '.', 'i', 'n', 'f', 'o', '\0',
   /* "ictradar.com", true */ 'i', 'c', 't', 'r', 'a', 'd', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "icusignature.com", true */ 'i', 'c', 'u', 's', 'i', 'g', 'n', 'a', 't', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "icymint.me", true */ 'i', 'c', 'y', 'm', 'i', 'n', 't', '.', 'm', 'e', '\0',
   /* "id-blog.ch", true */ 'i', 'd', '-', 'b', 'l', 'o', 'g', '.', 'c', 'h', '\0',
   /* "id.atlassian.com", true */ 'i', 'd', '.', 'a', 't', 'l', 'a', 's', 's', 'i', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "id.fedoraproject.org", false */ 'i', 'd', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "id.mayfirst.org", false */ 'i', 'd', '.', 'm', 'a', 'y', 'f', 'i', 'r', 's', 't', '.', 'o', 'r', 'g', '\0',
@@ -8986,17 +8976,16 @@ static const char kSTSHostTable[] = {
   /* "ilamparas.co.uk", true */ 'i', 'l', 'a', 'm', 'p', 'a', 'r', 'a', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "ilamparas.com", true */ 'i', 'l', 'a', 'm', 'p', 'a', 'r', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "ilamparas.com.ve", true */ 'i', 'l', 'a', 'm', 'p', 'a', 'r', 'a', 's', '.', 'c', 'o', 'm', '.', 'v', 'e', '\0',
   /* "ilard.fr", true */ 'i', 'l', 'a', 'r', 'd', '.', 'f', 'r', '\0',
   /* "ilazycat.com", true */ 'i', 'l', 'a', 'z', 'y', 'c', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "ile-kalorii.pl", true */ 'i', 'l', 'e', '-', 'k', 'a', 'l', 'o', 'r', 'i', 'i', '.', 'p', 'l', '\0',
   /* "ilhansubasi.com", true */ 'i', 'l', 'h', 'a', 'n', 's', 'u', 'b', 'a', 's', 'i', '.', 'c', 'o', 'm', '\0',
   /* "illambias.ch", true */ 'i', 'l', 'l', 'a', 'm', 'b', 'i', 'a', 's', '.', 'c', 'h', '\0',
-  /* "illegalpornography.me", true */ 'i', 'l', 'l', 'e', 'g', 'a', 'l', 'p', 'o', 'r', 'n', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'm', 'e', '\0',
   /* "illich.cz", true */ 'i', 'l', 'l', 'i', 'c', 'h', '.', 'c', 'z', '\0',
   /* "illicitart.ca", true */ 'i', 'l', 'l', 'i', 'c', 'i', 't', 'a', 'r', 't', '.', 'c', 'a', '\0',
   /* "illjinx.info", true */ 'i', 'l', 'l', 'j', 'i', 'n', 'x', '.', 'i', 'n', 'f', 'o', '\0',
   /* "illorenese.fr", true */ 'i', 'l', 'l', 'o', 'r', 'e', 'n', 'e', 's', 'e', '.', 'f', 'r', '\0',
   /* "illuminationis.com", true */ 'i', 'l', 'l', 'u', 'm', 'i', 'n', 'a', 't', 'i', 'o', 'n', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "ilmiobusinessonline.it", true */ 'i', 'l', 'm', 'i', 'o', 'b', 'u', 's', 'i', 'n', 'e', 's', 's', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'i', 't', '\0',
   /* "ilprof.com", true */ 'i', 'l', 'p', 'r', 'o', 'f', '.', 'c', 'o', 'm', '\0',
   /* "ilrg.com", true */ 'i', 'l', 'r', 'g', '.', 'c', 'o', 'm', '\0',
@@ -9211,16 +9200,17 @@ static const char kSTSHostTable[] = {
   /* "instics.com", true */ 'i', 'n', 's', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "instinctive.io", true */ 'i', 'n', 's', 't', 'i', 'n', 'c', 't', 'i', 'v', 'e', '.', 'i', 'o', '\0',
   /* "institut-confucius-montpellier.org", true */ 'i', 'n', 's', 't', 'i', 't', 'u', 't', '-', 'c', 'o', 'n', 'f', 'u', 'c', 'i', 'u', 's', '-', 'm', 'o', 'n', 't', 'p', 'e', 'l', 'l', 'i', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "institutolancaster.com", true */ 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'o', 'l', 'a', 'n', 'c', 'a', 's', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "institutulcultural.ro", true */ 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'u', 'l', 'c', 'u', 'l', 't', 'u', 'r', 'a', 'l', '.', 'r', 'o', '\0',
   /* "insurance321.com", true */ 'i', 'n', 's', 'u', 'r', 'a', 'n', 'c', 'e', '3', '2', '1', '.', 'c', 'o', 'm', '\0',
   /* "int-ma.in", true */ 'i', 'n', 't', '-', 'm', 'a', '.', 'i', 'n', '\0',
   /* "intafe.co.jp", true */ 'i', 'n', 't', 'a', 'f', 'e', '.', 'c', 'o', '.', 'j', 'p', '\0',
+  /* "integraelchen.de", true */ 'i', 'n', 't', 'e', 'g', 'r', 'a', 'e', 'l', 'c', 'h', 'e', 'n', '.', 'd', 'e', '\0',
   /* "integralblue.com", true */ 'i', 'n', 't', 'e', 'g', 'r', 'a', 'l', 'b', 'l', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "integralkk.com", true */ 'i', 'n', 't', 'e', 'g', 'r', 'a', 'l', 'k', 'k', '.', 'c', 'o', 'm', '\0',
   /* "integrationinc.com", false */ 'i', 'n', 't', 'e', 'g', 'r', 'a', 't', 'i', 'o', 'n', 'i', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "integraxor.com.tw", true */ 'i', 'n', 't', 'e', 'g', 'r', 'a', 'x', 'o', 'r', '.', 'c', 'o', 'm', '.', 't', 'w', '\0',
   /* "integrity.gov", true */ 'i', 'n', 't', 'e', 'g', 'r', 'i', 't', 'y', '.', 'g', 'o', 'v', '\0',
   /* "integrityingovernmentidaho.com", true */ 'i', 'n', 't', 'e', 'g', 'r', 'i', 't', 'y', 'i', 'n', 'g', 'o', 'v', 'e', 'r', 'n', 'm', 'e', 'n', 't', 'i', 'd', 'a', 'h', 'o', '.', 'c', 'o', 'm', '\0',
   /* "integrogroup.com", true */ 'i', 'n', 't', 'e', 'g', 'r', 'o', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "integromat.com", true */ 'i', 'n', 't', 'e', 'g', 'r', 'o', 'm', 'a', 't', '.', 'c', 'o', 'm', '\0',
@@ -9254,17 +9244,16 @@ static const char kSTSHostTable[] = {
   /* "internetbugbounty.org", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'b', 'u', 'g', 'b', 'o', 'u', 'n', 't', 'y', '.', 'o', 'r', 'g', '\0',
   /* "internetcom.jp", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'c', 'o', 'm', '.', 'j', 'p', '\0',
   /* "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',
   /* "internethealthreport.org", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'h', 'e', 'a', 'l', 't', 'h', 'r', 'e', 'p', 'o', 'r', 't', '.', 'o', 'r', 'g', '\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',
   /* "internetoffensive.fail", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'o', 'f', 'f', 'e', 'n', 's', 'i', 'v', 'e', '.', 'f', 'a', 'i', 'l', '\0',
   /* "internetovehazardnihry.cz", true */ 'i', 'n', 't', 'e', 'r', 'n', 'e', 't', 'o', 'v', 'e', 'h', 'a', 'z', 'a', 'r', 'd', 'n', 'i', 'h', 'r', 'y', '.', 'c', 'z', '\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',
   /* "internshipandwork.com", true */ 'i', 'n', 't', 'e', 'r', 'n', 's', 'h', 'i', 'p', 'a', 'n', 'd', 'w', 'o', 'r', 'k', '.', 'c', 'o', 'm', '\0',
   /* "internshipandwork.ru", true */ 'i', 'n', 't', 'e', 'r', 'n', 's', 'h', 'i', 'p', 'a', 'n', 'd', 'w', 'o', 'r', 'k', '.', 'r', 'u', '\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',
   /* "interracial.dating", true */ 'i', 'n', 't', 'e', 'r', 'r', 'a', 'c', 'i', 'a', 'l', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "intersectraven.net", true */ 'i', 'n', 't', 'e', 'r', 's', 'e', 'c', 't', 'r', 'a', 'v', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "interseller.io", true */ 'i', 'n', 't', 'e', 'r', 's', 'e', 'l', 'l', 'e', 'r', '.', 'i', 'o', '\0',
@@ -9316,32 +9305,31 @@ static const char kSTSHostTable[] = {
   /* "ionc.ca", true */ 'i', 'o', 'n', 'c', '.', 'c', 'a', '\0',
   /* "ionlabs.kr", true */ 'i', 'o', 'n', 'l', 'a', 'b', 's', '.', 'k', 'r', '\0',
   /* "ioover.net", true */ 'i', 'o', 'o', 'v', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "iossifovlab.com", true */ 'i', 'o', 's', 's', 'i', 'f', 'o', 'v', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "iostream.by", true */ 'i', 'o', 's', 't', 'r', 'e', 'a', 'm', '.', 'b', 'y', '\0',
   /* "ip-life.net", true */ 'i', 'p', '-', 'l', 'i', 'f', 'e', '.', 'n', 'e', 't', '\0',
   /* "ip.or.at", true */ 'i', 'p', '.', 'o', 'r', '.', 'a', 't', '\0',
   /* "ip2country.info", true */ 'i', 'p', '2', 'c', 'o', 'u', 'n', 't', 'r', 'y', '.', 'i', 'n', 'f', 'o', '\0',
-  /* "ip6.li", false */ 'i', 'p', '6', '.', 'l', 'i', '\0',
+  /* "ip6.li", true */ 'i', 'p', '6', '.', 'l', 'i', '\0',
   /* "ipal.im", true */ 'i', 'p', 'a', 'l', '.', 'i', 'm', '\0',
   /* "ipal.name", true */ 'i', 'p', 'a', 'l', '.', 'n', 'a', 'm', 'e', '\0',
   /* "ipal.pl", true */ 'i', 'p', 'a', 'l', '.', 'p', 'l', '\0',
   /* "ipawind.com", true */ 'i', 'p', 'a', 'w', 'i', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "ipcareers.net", true */ 'i', 'p', 'c', 'a', 'r', 'e', 'e', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "ipcfg.me", true */ 'i', 'p', 'c', 'f', 'g', '.', 'm', 'e', '\0',
   /* "ipconsulting.se", true */ 'i', 'p', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 's', 'e', '\0',
   /* "ipfirebox.de", true */ 'i', 'p', 'f', 'i', 'r', 'e', 'b', 'o', 'x', '.', 'd', 'e', '\0',
   /* "ipfp.pl", true */ 'i', 'p', 'f', 'p', '.', 'p', 'l', '\0',
   /* "ipfs.ink", true */ 'i', 'p', 'f', 's', '.', 'i', 'n', 'k', '\0',
   /* "iphoneunlock.nu", true */ 'i', 'p', 'h', 'o', 'n', 'e', 'u', 'n', 'l', 'o', 'c', 'k', '.', 'n', 'u', '\0',
   /* "ipintel.io", true */ 'i', 'p', 'i', 'n', 't', 'e', 'l', '.', 'i', 'o', '\0',
   /* "iplabs.de", true */ 'i', 'p', 'l', 'a', 'b', 's', '.', 'd', 'e', '\0',
   /* "ipledgeonline.org", false */ 'i', 'p', 'l', 'e', 'd', 'g', 'e', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'o', 'r', 'g', '\0',
-  /* "iplife.cn", false */ 'i', 'p', 'l', 'i', 'f', 'e', '.', 'c', 'n', '\0',
   /* "iplog.info", true */ 'i', 'p', 'l', 'o', 'g', '.', 'i', 'n', 'f', 'o', '\0',
   /* "ipmotion.ca", true */ 'i', 'p', 'm', 'o', 't', 'i', 'o', 'n', '.', 'c', 'a', '\0',
   /* "ipokabu.net", true */ 'i', 'p', 'o', 'k', 'a', 'b', 'u', '.', 'n', 'e', 't', '\0',
   /* "ipomue.com", false */ 'i', 'p', 'o', 'm', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "iprim.ru", true */ 'i', 'p', 'r', 'i', 'm', '.', 'r', 'u', '\0',
   /* "ipsec.pl", true */ 'i', 'p', 's', 'e', 'c', '.', 'p', 'l', '\0',
   /* "ipsilon-project.org", true */ 'i', 'p', 's', 'i', 'l', 'o', 'n', '-', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "ipstream.it", true */ 'i', 'p', 's', 't', 'r', 'e', 'a', 'm', '.', 'i', 't', '\0',
@@ -9407,16 +9395,17 @@ static const char kSTSHostTable[] = {
   /* "isisfighters.info", true */ 'i', 's', 'i', 's', 'f', 'i', 'g', 'h', 't', 'e', 'r', 's', '.', 'i', 'n', 'f', 'o', '\0',
   /* "isistomie.com", true */ 'i', 's', 'i', 's', 't', 'o', 'm', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "isitchristmas.com", true */ 'i', 's', 'i', 't', 'c', 'h', 'r', 'i', 's', 't', 'm', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "isitcoffeetime.com", true */ 'i', 's', 'i', 't', 'c', 'o', 'f', 'f', 'e', 'e', 't', 'i', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "isitdoneyet.gov", true */ 'i', 's', 'i', 't', 'd', 'o', 'n', 'e', 'y', 'e', 't', '.', 'g', 'o', 'v', '\0',
   /* "isitnuclearwaryet.com", true */ 'i', 's', 'i', 't', 'n', 'u', 'c', 'l', 'e', 'a', 'r', 'w', 'a', 'r', 'y', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "isitup.org", true */ 'i', 's', 'i', 't', 'u', 'p', '.', 'o', 'r', 'g', '\0',
   /* "iskaron.de", true */ 'i', 's', 'k', 'a', 'r', 'o', 'n', '.', 'd', 'e', '\0',
+  /* "islam.si", true */ 'i', 's', 'l', 'a', 'm', '.', 's', 'i', '\0',
   /* "islandhosting.com", true */ 'i', 's', 'l', 'a', 'n', 'd', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "islandinthenet.com", true */ 'i', 's', 'l', 'a', 'n', 'd', 'i', 'n', 't', 'h', 'e', 'n', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "islazia.fr", true */ 'i', 's', 'l', 'a', 'z', 'i', 'a', '.', 'f', 'r', '\0',
   /* "isletech.net", true */ 'i', 's', 'l', 'e', 't', 'e', 'c', 'h', '.', 'n', 'e', 't', '\0',
   /* "isliada.org", true */ 'i', 's', 'l', 'i', 'a', 'd', 'a', '.', 'o', 'r', 'g', '\0',
   /* "ismat.com", true */ 'i', 's', 'm', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "ismetroonfiretoday.com", true */ 'i', 's', 'm', 'e', 't', 'r', 'o', 'o', 'n', 'f', 'i', 'r', 'e', 't', 'o', 'd', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "isn.cz", true */ 'i', 's', 'n', '.', 'c', 'z', '\0',
@@ -9834,17 +9823,16 @@ static const char kSTSHostTable[] = {
   /* "jkrippen.com", true */ 'j', 'k', 'r', 'i', 'p', 'p', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "jlhmedia.com", true */ 'j', 'l', 'h', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "jlkhosting.com", true */ 'j', 'l', 'k', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "jlr-luxembourg.com", true */ 'j', 'l', 'r', '-', 'l', 'u', 'x', 'e', 'm', 'b', 'o', 'u', 'r', 'g', '.', 'c', 'o', 'm', '\0',
   /* "jm-bea.net", true */ 'j', 'm', '-', 'b', 'e', 'a', '.', 'n', 'e', 't', '\0',
   /* "jmb.lc", true */ 'j', 'm', 'b', '.', 'l', 'c', '\0',
   /* "jmcleaning.services", true */ 'j', 'm', 'c', 'l', 'e', 'a', 'n', 'i', 'n', 'g', '.', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '\0',
   /* "jmedved.com", true */ 'j', 'm', 'e', 'd', 'v', 'e', 'd', '.', 'c', 'o', 'm', '\0',
-  /* "jmk.hu", true */ 'j', 'm', 'k', '.', 'h', 'u', '\0',
   /* "jmpmotorsport.co.uk", true */ 'j', 'm', 'p', 'm', 'o', 't', 'o', 'r', 's', 'p', 'o', 'r', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "jmvbmx.ch", true */ 'j', 'm', 'v', 'b', 'm', 'x', '.', 'c', 'h', '\0',
   /* "jmvdigital.com", true */ 'j', 'm', 'v', 'd', 'i', 'g', 'i', 't', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "jn1.me", true */ 'j', 'n', '1', '.', 'm', 'e', '\0',
   /* "jncde.de", true */ 'j', 'n', 'c', 'd', 'e', '.', 'd', 'e', '\0',
   /* "jncie.de", true */ 'j', 'n', 'c', 'i', 'e', '.', 'd', 'e', '\0',
   /* "jncie.eu", true */ 'j', 'n', 'c', 'i', 'e', '.', 'e', 'u', '\0',
   /* "jncip.de", true */ 'j', 'n', 'c', 'i', 'p', '.', 'd', 'e', '\0',
@@ -10079,16 +10067,17 @@ static const char kSTSHostTable[] = {
   /* "k9swx.com", true */ 'k', '9', 's', 'w', 'x', '.', 'c', 'o', 'm', '\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',
   /* "kaboom.pw", true */ 'k', 'a', 'b', 'o', 'o', 'm', '.', 'p', 'w', '\0',
   /* "kabu-abc.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',
   /* "kack.website", true */ 'k', 'a', 'c', 'k', '.', 'w', 'e', 'b', 's', 'i', 't', 'e', '\0',
   /* "kackscharf.de", true */ 'k', 'a', 'c', 'k', 's', 'c', 'h', 'a', 'r', 'f', '.', 'd', 'e', '\0',
   /* "kadmec.com", true */ 'k', 'a', 'd', 'm', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "kaffeekrone.de", true */ 'k', 'a', 'f', 'f', 'e', 'e', 'k', 'r', 'o', 'n', 'e', '.', 'd', 'e', '\0',
   /* "kafoom.de", true */ 'k', 'a', 'f', 'o', 'o', 'm', '.', 'd', 'e', '\0',
   /* "kaheim.de", false */ 'k', 'a', 'h', 'e', 'i', 'm', '.', 'd', 'e', '\0',
   /* "kaigojj.com", true */ 'k', 'a', 'i', 'g', 'o', 'j', 'j', '.', 'c', 'o', 'm', '\0',
@@ -10236,17 +10225,16 @@ static const char kSTSHostTable[] = {
   /* "kbit.dk", true */ 'k', 'b', 'i', 't', '.', 'd', 'k', '\0',
   /* "kbjorklu.com", true */ 'k', 'b', 'j', 'o', 'r', 'k', 'l', 'u', '.', 'c', 'o', 'm', '\0',
   /* "kc-holzfaeller.de", true */ 'k', 'c', '-', 'h', 'o', 'l', 'z', 'f', 'a', 'e', 'l', 'l', 'e', 'r', '.', 'd', 'e', '\0',
   /* "kc5mpk.com", true */ 'k', 'c', '5', 'm', 'p', 'k', '.', 'c', 'o', 'm', '\0',
   /* "kcluster.io", true */ 'k', 'c', 'l', 'u', 's', 't', 'e', 'r', '.', 'i', 'o', '\0',
   /* "kcptun.com", true */ 'k', 'c', 'p', 't', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "kcsordparticipation.org", true */ 'k', 'c', 's', 'o', 'r', 'd', 'p', 'a', 'r', 't', 'i', 'c', 'i', 'p', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "kdex.de", true */ 'k', 'd', 'e', 'x', '.', 'd', 'e', '\0',
-  /* "kdyby.org", true */ 'k', 'd', 'y', 'b', 'y', '.', 'o', 'r', 'g', '\0',
   /* "ke7tlf.us", true */ 'k', 'e', '7', 't', 'l', 'f', '.', 'u', 's', '\0',
   /* "keaneokelley.com", true */ 'k', 'e', 'a', 'n', 'e', 'o', 'k', 'e', 'l', 'l', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "kearney.io", true */ 'k', 'e', 'a', 'r', 'n', 'e', 'y', '.', 'i', 'o', '\0',
   /* "keartanddesign.com", true */ 'k', 'e', 'a', 'r', 't', 'a', 'n', 'd', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
   /* "keaysmillwork.com", true */ 'k', 'e', 'a', 'y', 's', 'm', 'i', 'l', 'l', 'w', 'o', 'r', 'k', '.', 'c', 'o', 'm', '\0',
   /* "kedarastudios.com", true */ 'k', 'e', 'd', 'a', 'r', 'a', 's', 't', 'u', 'd', 'i', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "keeleysam.com", true */ 'k', 'e', 'e', 'l', 'e', 'y', 's', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "keepa.com", true */ 'k', 'e', 'e', 'p', 'a', '.', 'c', 'o', 'm', '\0',
@@ -10592,16 +10580,17 @@ static const char kSTSHostTable[] = {
   /* "konventseliten.se", true */ 'k', 'o', 'n', 'v', 'e', 'n', 't', 's', 'e', 'l', 'i', 't', 'e', 'n', '.', 's', 'e', '\0',
   /* "konyalian.com", true */ 'k', 'o', 'n', 'y', 'a', 'l', 'i', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "koop-bremen.de", true */ 'k', 'o', 'o', 'p', '-', 'b', 'r', 'e', 'm', 'e', 'n', '.', 'd', 'e', '\0',
   /* "kooponline.eu", true */ 'k', 'o', 'o', 'p', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'e', 'u', '\0',
   /* "koot.nl", true */ 'k', 'o', 'o', 't', '.', 'n', 'l', '\0',
   /* "kopfkrieg.org", true */ 'k', 'o', 'p', 'f', 'k', 'r', 'i', 'e', 'g', '.', 'o', 'r', 'g', '\0',
   /* "kopular.com", true */ 'k', 'o', 'p', 'u', 'l', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "kopykatz.org", false */ 'k', 'o', 'p', 'y', 'k', 'a', 't', 'z', '.', 'o', 'r', 'g', '\0',
+  /* "korea.dating", true */ 'k', 'o', 'r', 'e', 'a', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "koretech.nl", true */ 'k', 'o', 'r', 'e', 't', 'e', 'c', 'h', '.', 'n', 'l', '\0',
   /* "korinar.com", true */ 'k', 'o', 'r', 'i', 'n', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "koriyoukai.net", true */ 'k', 'o', 'r', 'i', 'y', 'o', 'u', 'k', 'a', 'i', '.', 'n', 'e', 't', '\0',
   /* "kornersafe.com", true */ 'k', 'o', 'r', 'n', 'e', 'r', 's', 'a', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "korobi.io", true */ 'k', 'o', 'r', 'o', 'b', 'i', '.', 'i', 'o', '\0',
   /* "korobkovsky.ru", true */ 'k', 'o', 'r', 'o', 'b', 'k', 'o', 'v', 's', 'k', 'y', '.', 'r', 'u', '\0',
   /* "korono.de", true */ 'k', 'o', 'r', 'o', 'n', 'o', '.', 'd', 'e', '\0',
   /* "korrelzout.nl", true */ 'k', 'o', 'r', 'r', 'e', 'l', 'z', 'o', 'u', 't', '.', 'n', 'l', '\0',
@@ -10813,17 +10802,16 @@ static const char kSTSHostTable[] = {
   /* "lafosseobservatoire.be", true */ 'l', 'a', 'f', 'o', 's', 's', 'e', 'o', 'b', 's', 'e', 'r', 'v', 'a', 't', 'o', 'i', 'r', 'e', '.', 'b', 'e', '\0',
   /* "lafr4nc3.xyz", true */ 'l', 'a', 'f', 'r', '4', 'n', 'c', '3', '.', 'x', 'y', 'z', '\0',
   /* "lagarderob.ru", false */ 'l', 'a', 'g', 'a', 'r', 'd', 'e', 'r', 'o', 'b', '.', 'r', 'u', '\0',
   /* "lagerauftrag.info", true */ 'l', 'a', 'g', 'e', 'r', 'a', 'u', 'f', 't', 'r', 'a', 'g', '.', 'i', 'n', 'f', 'o', '\0',
   /* "lagier.xyz", true */ 'l', 'a', 'g', 'i', 'e', 'r', '.', 'x', 'y', 'z', '\0',
   /* "laglab.org", true */ 'l', 'a', 'g', 'l', 'a', 'b', '.', 'o', 'r', 'g', '\0',
   /* "laguiadelvaron.com", true */ 'l', 'a', 'g', 'u', 'i', 'a', 'd', 'e', 'l', 'v', 'a', 'r', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "laguinguette.fr", true */ 'l', 'a', 'g', 'u', 'i', 'n', 'g', 'u', 'e', 't', 't', 'e', '.', 'f', 'r', '\0',
-  /* "lainchan.org", true */ 'l', 'a', 'i', 'n', 'c', 'h', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "lajijonencadebarbera.com", true */ 'l', 'a', 'j', 'i', 'j', 'o', 'n', 'e', 'n', 'c', 'a', 'd', 'e', 'b', 'a', 'r', 'b', 'e', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "lak-berlin.de", true */ 'l', 'a', 'k', '-', 'b', 'e', 'r', 'l', 'i', 'n', '.', 'd', 'e', '\0',
   /* "lakatrop.com", true */ 'l', 'a', 'k', 'a', 't', 'r', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "lakewoodcomputerservices.com", true */ 'l', 'a', 'k', 'e', 'w', 'o', 'o', 'd', 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "lalaya.fr", true */ 'l', 'a', 'l', 'a', 'y', 'a', '.', 'f', 'r', '\0',
   /* "laltroweb.it", true */ 'l', 'a', 'l', 't', 'r', 'o', 'w', 'e', 'b', '.', 'i', 't', '\0',
   /* "lamakat.de", true */ 'l', 'a', 'm', 'a', 'k', 'a', 't', '.', 'd', 'e', '\0',
   /* "lamapoll.de", true */ 'l', 'a', 'm', 'a', 'p', 'o', 'l', 'l', '.', 'd', 'e', '\0',
@@ -10857,16 +10845,17 @@ static const char kSTSHostTable[] = {
   /* "lanna.io", true */ 'l', 'a', 'n', 'n', 'a', '.', 'i', 'o', '\0',
   /* "lansechensilu.com", true */ 'l', 'a', 'n', 's', 'e', 'c', 'h', 'e', 'n', 's', 'i', 'l', 'u', '.', 'c', 'o', 'm', '\0',
   /* "lansinoh.co.uk", true */ 'l', 'a', 'n', 's', 'i', 'n', 'o', 'h', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "lantian.pub", true */ 'l', 'a', 'n', 't', 'i', 'a', 'n', '.', 'p', 'u', 'b', '\0',
   /* "lanuovariviera.it", true */ 'l', 'a', 'n', 'u', 'o', 'v', 'a', 'r', 'i', 'v', 'i', 'e', 'r', 'a', '.', 'i', 't', '\0',
   /* "lanyang.tk", true */ 'l', 'a', 'n', 'y', 'a', 'n', 'g', '.', 't', 'k', '\0',
   /* "lanzainc.xyz", true */ 'l', 'a', 'n', 'z', 'a', 'i', 'n', 'c', '.', 'x', 'y', 'z', '\0',
   /* "lanzamientovirtual.es", true */ 'l', 'a', 'n', 'z', 'a', 'm', 'i', 'e', 'n', 't', 'o', 'v', 'i', 'r', 't', 'u', 'a', 'l', '.', 'e', 's', '\0',
+  /* "laos.dating", true */ 'l', 'a', 'o', 's', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "lapetition.be", true */ 'l', 'a', 'p', 'e', 't', 'i', 't', 'i', 'o', 'n', '.', 'b', 'e', '\0',
   /* "lapidge.net", true */ 'l', 'a', 'p', 'i', 'd', 'g', 'e', '.', 'n', 'e', 't', '\0',
   /* "laplanetebleue.com", true */ 'l', 'a', 'p', 'l', 'a', 'n', 'e', 't', 'e', 'b', 'l', 'e', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "lapolla.com", true */ 'l', 'a', 'p', 'o', 'l', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "laposte.net", true */ 'l', 'a', 'p', 'o', 's', 't', 'e', '.', 'n', 'e', 't', '\0',
   /* "lapparente-aise.ch", true */ 'l', 'a', 'p', 'p', 'a', 'r', 'e', 'n', 't', 'e', '-', 'a', 'i', 's', 'e', '.', 'c', 'h', '\0',
   /* "laraeph.com", true */ 'l', 'a', 'r', 'a', 'e', 'p', 'h', '.', 'c', 'o', 'm', '\0',
   /* "laranara.se", true */ 'l', 'a', 'r', 'a', 'n', 'a', 'r', 'a', '.', 's', 'e', '\0',
@@ -10901,16 +10890,17 @@ static const char kSTSHostTable[] = {
   /* "latenitefilms.com", false */ 'l', 'a', 't', 'e', 'n', 'i', 't', 'e', 'f', 'i', 'l', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "lateralsecurity.com", true */ 'l', 'a', 't', 'e', 'r', 'a', 'l', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "latestdeals.co.uk", true */ 'l', 'a', 't', 'e', 's', 't', 'd', 'e', 'a', 'l', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "latetrain.cn", true */ 'l', 'a', 't', 'e', 't', 'r', 'a', 'i', 'n', '.', 'c', 'n', '\0',
   /* "lathamlabs.com", true */ 'l', 'a', 't', 'h', 'a', 'm', 'l', 'a', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "lathamlabs.net", true */ 'l', 'a', 't', 'h', 'a', 'm', 'l', 'a', 'b', 's', '.', 'n', 'e', 't', '\0',
   /* "lathamlabs.org", true */ 'l', 'a', 't', 'h', 'a', 'm', 'l', 'a', 'b', 's', '.', 'o', 'r', 'g', '\0',
   /* "lathen-wahn.de", true */ 'l', 'a', 't', 'h', 'e', 'n', '-', 'w', 'a', 'h', 'n', '.', 'd', 'e', '\0',
+  /* "latino.dating", true */ 'l', 'a', 't', 'i', 'n', 'o', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "latinphone.com", true */ 'l', 'a', 't', 'i', 'n', 'p', 'h', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "latitude42technology.com", true */ 'l', 'a', 't', 'i', 't', 'u', 'd', 'e', '4', '2', 't', 'e', 'c', 'h', 'n', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'o', 'm', '\0',
   /* "latour-managedcare.ch", true */ 'l', 'a', 't', 'o', 'u', 'r', '-', 'm', 'a', 'n', 'a', 'g', 'e', 'd', 'c', 'a', 'r', 'e', '.', 'c', 'h', '\0',
   /* "latrine.cz", true */ 'l', 'a', 't', 'r', 'i', 'n', 'e', '.', 'c', 'z', '\0',
   /* "lattyware.co.uk", true */ 'l', 'a', 't', 't', 'y', 'w', 'a', 'r', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "lattyware.com", true */ 'l', 'a', 't', 't', 'y', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "laubacher.io", true */ 'l', 'a', 'u', 'b', 'a', 'c', 'h', 'e', 'r', '.', 'i', 'o', '\0',
   /* "lauchundei.at", true */ 'l', 'a', 'u', 'c', 'h', 'u', 'n', 'd', 'e', 'i', '.', 'a', 't', '\0',
@@ -10954,20 +10944,20 @@ static const char kSTSHostTable[] = {
   /* "ldc.com.br", false */ 'l', 'd', 'c', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "ldcraft.pw", true */ 'l', 'd', 'c', 'r', 'a', 'f', 't', '.', 'p', 'w', '\0',
   /* "le-bar.org", true */ 'l', 'e', '-', 'b', 'a', 'r', '.', 'o', 'r', 'g', '\0',
   /* "le-controle-parental.fr", true */ 'l', 'e', '-', 'c', 'o', 'n', 't', 'r', 'o', 'l', 'e', '-', 'p', 'a', 'r', 'e', 'n', 't', 'a', 'l', '.', 'f', 'r', '\0',
   /* "le-creux-du-van.ch", true */ 'l', 'e', '-', 'c', 'r', 'e', 'u', 'x', '-', 'd', 'u', '-', 'v', 'a', 'n', '.', 'c', 'h', '\0',
   /* "le-dev.de", false */ 'l', 'e', '-', 'd', 'e', 'v', '.', 'd', 'e', '\0',
   /* "le-h.de", true */ 'l', 'e', '-', 'h', '.', 'd', 'e', '\0',
   /* "le-hosting.de", true */ 'l', 'e', '-', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'd', 'e', '\0',
+  /* "le-palantir.com", true */ 'l', 'e', '-', 'p', 'a', 'l', 'a', 'n', 't', 'i', 'r', '.', 'c', 'o', 'm', '\0',
   /* "le-traiteur-parisien.fr", true */ 'l', 'e', '-', 't', 'r', 'a', 'i', 't', 'e', 'u', 'r', '-', 'p', 'a', 'r', 'i', 's', 'i', 'e', 'n', '.', 'f', 'r', '\0',
   /* "le23.fr", true */ 'l', 'e', '2', '3', '.', 'f', 'r', '\0',
   /* "le42mars.fr", true */ 'l', 'e', '4', '2', 'm', 'a', 'r', 's', '.', 'f', 'r', '\0',
-  /* "leadbook.ru", true */ 'l', 'e', 'a', 'd', 'b', 'o', 'o', 'k', '.', 'r', 'u', '\0',
   /* "leadbox.cz", true */ 'l', 'e', 'a', 'd', 'b', 'o', 'x', '.', 'c', 'z', '\0',
   /* "leadingsalons.com", true */ 'l', 'e', 'a', 'd', 'i', 'n', 'g', 's', 'a', 'l', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "leafandseed.co.uk", true */ 'l', 'e', 'a', 'f', 'a', 'n', 'd', 's', 'e', 'e', 'd', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "leafans.tk", true */ 'l', 'e', 'a', 'f', 'a', 'n', 's', '.', 't', 'k', '\0',
   /* "leakedminecraft.net", true */ 'l', 'e', 'a', 'k', 'e', 'd', 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '.', 'n', 'e', 't', '\0',
   /* "leakforums.net", true */ 'l', 'e', 'a', 'k', 'f', 'o', 'r', 'u', 'm', 's', '.', 'n', 'e', 't', '\0',
   /* "leakreporter.net", true */ 'l', 'e', 'a', 'k', 'r', 'e', 'p', 'o', 'r', 't', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "leaks.directory", true */ 'l', 'e', 'a', 'k', 's', '.', 'd', 'i', 'r', 'e', 'c', 't', 'o', 'r', 'y', '\0',
@@ -11028,16 +11018,17 @@ static const char kSTSHostTable[] = {
   /* "legible.es", true */ 'l', 'e', 'g', 'i', 'b', 'l', 'e', '.', 'e', 's', '\0',
   /* "legioniv.org", true */ 'l', 'e', 'g', 'i', 'o', 'n', 'i', 'v', '.', 'o', 'r', 'g', '\0',
   /* "legiscontabilidade.com.br", true */ 'l', 'e', 'g', 'i', 's', 'c', 'o', 'n', 't', 'a', 'b', 'i', 'l', 'i', 'd', 'a', 'd', 'e', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "legit.nz", true */ 'l', 'e', 'g', 'i', 't', '.', 'n', 'z', '\0',
   /* "legitaxi.com", true */ 'l', 'e', 'g', 'i', 't', 'a', 'x', 'i', '.', 'c', 'o', 'm', '\0',
   /* "legland.fr", true */ 'l', 'e', 'g', 'l', 'a', 'n', 'd', '.', 'f', 'r', '\0',
   /* "legoutdesplantes.be", true */ 'l', 'e', 'g', 'o', 'u', 't', 'd', 'e', 's', 'p', 'l', 'a', 'n', 't', 'e', 's', '.', 'b', 'e', '\0',
   /* "legymnase.eu", true */ 'l', 'e', 'g', 'y', 'm', 'n', 'a', 's', 'e', '.', 'e', 'u', '\0',
+  /* "lehighmathcircle.org", true */ 'l', 'e', 'h', 'i', 'g', 'h', 'm', 'a', 't', 'h', 'c', 'i', 'r', 'c', 'l', 'e', '.', 'o', 'r', 'g', '\0',
   /* "lehtinen.xyz", true */ 'l', 'e', 'h', 't', 'i', 'n', 'e', 'n', '.', 'x', 'y', 'z', '\0',
   /* "leibniz-remscheid.de", false */ 'l', 'e', 'i', 'b', 'n', 'i', 'z', '-', 'r', 'e', 'm', 's', 'c', 'h', 'e', 'i', 'd', '.', 'd', 'e', '\0',
   /* "leigh.life", true */ 'l', 'e', 'i', 'g', 'h', '.', 'l', 'i', 'f', 'e', '\0',
   /* "leighneithardt.com", true */ 'l', 'e', 'i', 'g', 'h', 'n', 'e', 'i', 't', 'h', 'a', 'r', 'd', 't', '.', 'c', 'o', 'm', '\0',
   /* "leilautourdumon.de", true */ 'l', 'e', 'i', 'l', 'a', 'u', 't', 'o', 'u', 'r', 'd', 'u', 'm', 'o', 'n', '.', 'd', 'e', '\0',
   /* "leilonorte.com", true */ 'l', 'e', 'i', 'l', 'o', 'n', 'o', 'r', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "leiming.co", true */ 'l', 'e', 'i', 'm', 'i', 'n', 'g', '.', 'c', 'o', '\0',
   /* "leipzig.photo", true */ 'l', 'e', 'i', 'p', 'z', 'i', 'g', '.', 'p', 'h', 'o', 't', 'o', '\0',
@@ -11176,17 +11167,16 @@ static const char kSTSHostTable[] = {
   /* "lidl-tour.ro", true */ 'l', 'i', 'd', 'l', '-', 't', 'o', 'u', 'r', '.', 'r', 'o', '\0',
   /* "lidong.me", true */ 'l', 'i', 'd', 'o', 'n', 'g', '.', 'm', 'e', '\0',
   /* "lidow.eu", true */ 'l', 'i', 'd', 'o', 'w', '.', 'e', 'u', '\0',
   /* "liduan.com", true */ 'l', 'i', 'd', 'u', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "liduan.net", true */ 'l', 'i', 'd', 'u', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "liebel.org", true */ 'l', 'i', 'e', 'b', 'e', 'l', '.', 'o', 'r', 'g', '\0',
   /* "liebestarot.at", true */ 'l', 'i', 'e', 'b', 'e', 's', 't', 'a', 'r', 'o', 't', '.', 'a', 't', '\0',
   /* "lied8.eu", true */ 'l', 'i', 'e', 'd', '8', '.', 'e', 'u', '\0',
-  /* "liemen.net", true */ 'l', 'i', 'e', 'm', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "lifanov.com", true */ 'l', 'i', 'f', 'a', 'n', 'o', 'v', '.', 'c', 'o', 'm', '\0',
   /* "life-time.nl", true */ 'l', 'i', 'f', 'e', '-', 't', 'i', 'm', 'e', '.', 'n', 'l', '\0',
   /* "lifebetweenlives.com.au", true */ 'l', 'i', 'f', 'e', 'b', 'e', 't', 'w', 'e', 'e', 'n', 'l', 'i', 'v', 'e', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "lifekiss.ru", true */ 'l', 'i', 'f', 'e', 'k', 'i', 's', 's', '.', 'r', 'u', '\0',
   /* "lifenexto.com", true */ 'l', 'i', 'f', 'e', 'n', 'e', 'x', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "lifeqa.net", true */ 'l', 'i', 'f', 'e', 'q', 'a', '.', 'n', 'e', 't', '\0',
   /* "lifequotes-uk.co.uk", true */ 'l', 'i', 'f', 'e', 'q', 'u', 'o', 't', 'e', 's', '-', 'u', 'k', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "lifi.digital", true */ 'l', 'i', 'f', 'i', '.', 'd', 'i', 'g', 'i', 't', 'a', 'l', '\0',
@@ -11641,17 +11631,16 @@ static const char kSTSHostTable[] = {
   /* "maces-net.de", true */ 'm', 'a', 'c', 'e', 's', '-', 'n', 'e', 't', '.', 'd', 'e', '\0',
   /* "mach-politik.ch", true */ 'm', 'a', 'c', 'h', '-', 'p', 'o', 'l', 'i', 't', 'i', 'k', '.', 'c', 'h', '\0',
   /* "macha.cloud", true */ 'm', 'a', 'c', 'h', 'a', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "machbach.com", true */ 'm', 'a', 'c', 'h', 'b', 'a', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "machbach.net", true */ 'm', 'a', 'c', 'h', 'b', 'a', 'c', 'h', '.', 'n', 'e', 't', '\0',
   /* "machon.biz", false */ 'm', 'a', 'c', 'h', 'o', 'n', '.', 'b', 'i', 'z', '\0',
   /* "macht-elektro.de", true */ 'm', 'a', 'c', 'h', 't', '-', 'e', 'l', 'e', 'k', 't', 'r', 'o', '.', 'd', 'e', '\0',
   /* "machtweb.de", true */ 'm', 'a', 'c', 'h', 't', 'w', 'e', 'b', '.', 'd', 'e', '\0',
-  /* "macinyasha.net", true */ 'm', 'a', 'c', 'i', 'n', 'y', 'a', 's', 'h', 'a', '.', 'n', 'e', 't', '\0',
   /* "macker.io", true */ 'm', 'a', 'c', 'k', 'e', 'r', '.', 'i', 'o', '\0',
   /* "mackey7.net", true */ 'm', 'a', 'c', 'k', 'e', 'y', '7', '.', 'n', 'e', 't', '\0',
   /* "maclemon.at", true */ 'm', 'a', 'c', 'l', 'e', 'm', 'o', 'n', '.', 'a', 't', '\0',
   /* "macleod.io", true */ 'm', 'a', 'c', 'l', 'e', 'o', 'd', '.', 'i', 'o', '\0',
   /* "macnemo.de", true */ 'm', 'a', 'c', 'n', 'e', 'm', 'o', '.', 'd', 'e', '\0',
   /* "maco.org.uk", true */ 'm', 'a', 'c', 'o', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "maconnerie-dcs.ch", true */ 'm', 'a', 'c', 'o', 'n', 'n', 'e', 'r', 'i', 'e', '-', 'd', 'c', 's', '.', 'c', 'h', '\0',
   /* "macosxfilerecovery.com", true */ 'm', 'a', 'c', 'o', 's', 'x', 'f', 'i', 'l', 'e', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'y', '.', 'c', 'o', 'm', '\0',
@@ -11849,17 +11838,16 @@ static const char kSTSHostTable[] = {
   /* "marcelsiegert.com", true */ 'm', 'a', 'r', 'c', 'e', 'l', 's', 'i', 'e', 'g', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "marcgoertz.de", true */ 'm', 'a', 'r', 'c', 'g', 'o', 'e', 'r', 't', 'z', '.', 'd', 'e', '\0',
   /* "marche-nordic-jorat.ch", true */ 'm', 'a', 'r', 'c', 'h', 'e', '-', 'n', 'o', 'r', 'd', 'i', 'c', '-', 'j', 'o', 'r', 'a', 't', '.', 'c', 'h', '\0',
   /* "marco-polo-reisen.com", true */ 'm', 'a', 'r', 'c', 'o', '-', 'p', 'o', 'l', 'o', '-', 'r', 'e', 'i', 's', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "marco01809.net", true */ 'm', 'a', 'r', 'c', 'o', '0', '1', '8', '0', '9', '.', 'n', 'e', 't', '\0',
   /* "marcohager.de", true */ 'm', 'a', 'r', 'c', 'o', 'h', 'a', 'g', 'e', 'r', '.', 'd', 'e', '\0',
   /* "marcoherten.com", true */ 'm', 'a', 'r', 'c', 'o', 'h', 'e', 'r', 't', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "marcoslater.com", true */ 'm', 'a', 'r', 'c', 'o', 's', 'l', 'a', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
-  /* "marcschlagenhauf.de", true */ 'm', 'a', 'r', 'c', 's', 'c', 'h', 'l', 'a', 'g', 'e', 'n', 'h', 'a', 'u', 'f', '.', 'd', 'e', '\0',
   /* "marcush.de", true */ 'm', 'a', 'r', 'c', 'u', 's', 'h', '.', 'd', 'e', '\0',
   /* "marcuskoh.com", true */ 'm', 'a', 'r', 'c', 'u', 's', 'k', 'o', 'h', '.', 'c', 'o', 'm', '\0',
   /* "marcusstafford.com", true */ 'm', 'a', 'r', 'c', 'u', 's', 's', 't', 'a', 'f', 'f', 'o', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "mardelcupon.com", true */ 'm', 'a', 'r', 'd', 'e', 'l', 'c', 'u', 'p', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "mare92.cz", true */ 'm', 'a', 'r', 'e', '9', '2', '.', 'c', 'z', '\0',
   /* "mareklecian.cz", true */ 'm', 'a', 'r', 'e', 'k', 'l', 'e', 'c', 'i', 'a', 'n', '.', 'c', 'z', '\0',
   /* "margagriesser.de", true */ 'm', 'a', 'r', 'g', 'a', 'g', 'r', 'i', 'e', 's', 's', 'e', 'r', '.', 'd', 'e', '\0',
   /* "margan.ch", true */ 'm', 'a', 'r', 'g', 'a', 'n', '.', 'c', 'h', '\0',
@@ -12460,16 +12448,17 @@ static const char kSTSHostTable[] = {
   /* "minacssas.com", true */ 'm', 'i', 'n', 'a', 'c', 's', 's', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "minakov.pro", true */ 'm', 'i', 'n', 'a', 'k', 'o', 'v', '.', 'p', 'r', 'o', '\0',
   /* "minami.xyz", true */ 'm', 'i', 'n', 'a', 'm', 'i', '.', 'x', 'y', 'z', '\0',
   /* "minantavla.se", true */ 'm', 'i', 'n', 'a', 'n', 't', 'a', 'v', 'l', 'a', '.', 's', 'e', '\0',
   /* "minaprine.com", true */ 'm', 'i', 'n', 'a', 'p', 'r', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mind-box.ch", true */ 'm', 'i', 'n', 'd', '-', 'b', 'o', 'x', '.', 'c', 'h', '\0',
   /* "mind-hochschul-netzwerk.de", true */ 'm', 'i', 'n', 'd', '-', 'h', 'o', 'c', 'h', 's', 'c', 'h', 'u', 'l', '-', 'n', 'e', 't', 'z', 'w', 'e', 'r', 'k', '.', 'd', 'e', '\0',
   /* "mind-moves.es", true */ 'm', 'i', 'n', 'd', '-', 'm', 'o', 'v', 'e', 's', '.', 'e', 's', '\0',
+  /* "mind.sh", true */ 'm', 'i', 'n', 'd', '.', 's', 'h', '\0',
   /* "mindbodycontinuum.com", true */ 'm', 'i', 'n', 'd', 'b', 'o', 'd', 'y', 'c', 'o', 'n', 't', 'i', 'n', 'u', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "mindcoding.ro", true */ 'm', 'i', 'n', 'd', 'c', 'o', 'd', 'i', 'n', 'g', '.', 'r', 'o', '\0',
   /* "mindturbo.com", true */ 'm', 'i', 'n', 'd', 't', 'u', 'r', 'b', 'o', '.', 'c', 'o', 'm', '\0',
   /* "mindwerks.net", true */ 'm', 'i', 'n', 'd', 'w', 'e', 'r', 'k', 's', '.', 'n', 'e', 't', '\0',
   /* "mine.world", true */ 'm', 'i', 'n', 'e', '.', 'w', 'o', 'r', 'l', 'd', '\0',
   /* "mine260309.me", true */ 'm', 'i', 'n', 'e', '2', '6', '0', '3', '0', '9', '.', 'm', 'e', '\0',
   /* "minecraft-forum.cf", true */ 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '-', 'f', 'o', 'r', 'u', 'm', '.', 'c', 'f', '\0',
   /* "minecraft-forum.eu", true */ 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '-', 'f', 'o', 'r', 'u', 'm', '.', 'e', 'u', '\0',
@@ -12836,17 +12825,16 @@ static const char kSTSHostTable[] = {
   /* "mpsgarage.com.au", true */ 'm', 'p', 's', 'g', 'a', 'r', 'a', 'g', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "mpsoundcraft.com", true */ 'm', 'p', 's', 'o', 'u', 'n', 'd', 'c', 'r', 'a', 'f', 't', '.', 'c', 'o', 'm', '\0',
   /* "mpy.ovh", true */ 'm', 'p', 'y', '.', 'o', 'v', 'h', '\0',
   /* "mr-anderson.org", true */ 'm', 'r', '-', 'a', 'n', 'd', 'e', 'r', 's', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "mr-hosting.com", true */ 'm', 'r', '-', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "mrawe.com", true */ 'm', 'r', 'a', 'w', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mrd.ninja", true */ 'm', 'r', 'd', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "mrdayman.com", true */ 'm', 'r', 'd', 'a', 'y', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "mremallin.ca", true */ 'm', 'r', 'e', 'm', 'a', 'l', 'l', 'i', 'n', '.', 'c', 'a', '\0',
   /* "mrhee.com", true */ 'm', 'r', 'h', 'e', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mrinalpurohit.in", true */ 'm', 'r', 'i', 'n', 'a', 'l', 'p', 'u', 'r', 'o', 'h', 'i', 't', '.', 'i', 'n', '\0',
   /* "mrizzio.com", true */ 'm', 'r', 'i', 'z', 'z', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "mrmoregame.de", true */ 'm', 'r', 'm', 'o', 'r', 'e', 'g', 'a', 'm', 'e', '.', 'd', 'e', '\0',
   /* "mrsbairds.com", true */ 'm', 'r', 's', 'b', 'a', 'i', 'r', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "mrserge.lv", true */ 'm', 'r', 's', 'e', 'r', 'g', 'e', '.', 'l', 'v', '\0',
   /* "mrsk.me", true */ 'm', 'r', 's', 'k', '.', 'm', 'e', '\0',
   /* "mrx.one", true */ 'm', 'r', 'x', '.', 'o', 'n', 'e', '\0',
@@ -12886,16 +12874,17 @@ static const char kSTSHostTable[] = {
   /* "mtn.cc", true */ 'm', 't', 'n', '.', 'c', 'c', '\0',
   /* "mtnz.co.za", true */ 'm', 't', 'n', 'z', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "mtouch.facebook.com", false */ 'm', 't', 'o', 'u', 'c', 'h', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "mtr.md", true */ 'm', 't', 'r', '.', 'm', 'd', '\0',
   /* "mts-energia.eu", true */ 'm', 't', 's', '-', 'e', 'n', 'e', 'r', 'g', 'i', 'a', '.', 'e', 'u', '\0',
   /* "mts-server.com", true */ 'm', 't', 's', '-', 's', 'e', 'r', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "mtsolar.es", true */ 'm', 't', 's', 'o', 'l', 'a', 'r', '.', 'e', 's', '\0',
   /* "muabannhanh.com", false */ 'm', 'u', 'a', 'b', 'a', 'n', 'n', 'h', 'a', 'n', 'h', '.', 'c', 'o', 'm', '\0',
+  /* "muchohentai.com", true */ 'm', 'u', 'c', 'h', 'o', 'h', 'e', 'n', 't', 'a', 'i', '.', 'c', 'o', 'm', '\0',
   /* "muckingabout.eu", true */ 'm', 'u', 'c', 'k', 'i', 'n', 'g', 'a', 'b', 'o', 'u', 't', '.', 'e', 'u', '\0',
   /* "muehlemann.net", true */ 'm', 'u', 'e', 'h', 'l', 'e', 'm', 'a', 'n', 'n', '.', 'n', 'e', 't', '\0',
   /* "muellapp.com", true */ 'm', 'u', 'e', 'l', 'l', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "muenzubi.de", true */ 'm', 'u', 'e', 'n', 'z', 'u', 'b', 'i', '.', 'd', 'e', '\0',
   /* "muevetumundo.com.mx", true */ 'm', 'u', 'e', 'v', 'e', 't', 'u', 'm', 'u', 'n', 'd', 'o', '.', 'c', 'o', 'm', '.', 'm', 'x', '\0',
   /* "muga.space", true */ 'm', 'u', 'g', 'a', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "muguayuan.com", true */ 'm', 'u', 'g', 'u', 'a', 'y', 'u', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "muj-svet.cz", true */ 'm', 'u', 'j', '-', 's', 'v', 'e', 't', '.', 'c', 'z', '\0',
@@ -13034,26 +13023,27 @@ static const char kSTSHostTable[] = {
   /* "mygpsite.com", true */ 'm', 'y', 'g', 'p', 's', 'i', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mygreatjob.eu", true */ 'm', 'y', 'g', 'r', 'e', 'a', 't', 'j', 'o', 'b', '.', 'e', 'u', '\0',
   /* "mygreatjobs.de", true */ 'm', 'y', 'g', 'r', 'e', 'a', 't', 'j', 'o', 'b', 's', '.', 'd', 'e', '\0',
   /* "mygretchen.de", true */ 'm', 'y', 'g', 'r', 'e', 't', 'c', 'h', 'e', 'n', '.', 'd', 'e', '\0',
   /* "mygrotto.org", true */ 'm', 'y', 'g', 'r', 'o', 't', 't', 'o', '.', 'o', 'r', 'g', '\0',
   /* "mygymer.ch", true */ 'm', 'y', 'g', 'y', 'm', 'e', 'r', '.', 'c', 'h', '\0',
   /* "myhealthreviews.com", true */ 'm', 'y', 'h', 'e', 'a', 'l', 't', 'h', 'r', 'e', 'v', 'i', 'e', 'w', 's', '.', 'c', 'o', 'm', '\0',
   /* "myhostname.net", true */ 'm', 'y', 'h', 'o', 's', 't', 'n', 'a', 'm', 'e', '.', 'n', 'e', 't', '\0',
-  /* "myimds.com", true */ 'm', 'y', 'i', 'm', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "myimmitracker.com", true */ 'm', 'y', 'i', 'm', 'm', 'i', 't', 'r', 'a', 'c', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "myip.tech", true */ 'm', 'y', 'i', 'p', '.', 't', 'e', 'c', 'h', '\0',
   /* "mykeepsake.xyz", false */ 'm', 'y', 'k', 'e', 'e', 'p', 's', 'a', 'k', 'e', '.', 'x', 'y', 'z', '\0',
   /* "myki.co", true */ 'm', 'y', 'k', 'i', '.', 'c', 'o', '\0',
   /* "mykolab.com", true */ 'm', 'y', 'k', 'o', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "mykontool.de", true */ 'm', 'y', 'k', 'o', 'n', 't', 'o', 'o', 'l', '.', 'd', 'e', '\0',
   /* "mylittlemoppet.com", true */ 'm', 'y', 'l', 'i', 't', 't', 'l', 'e', 'm', 'o', 'p', 'p', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "mylocalsearch.co.uk", true */ 'm', 'y', 'l', 'o', 'c', 'a', 'l', 's', 'e', 'a', 'r', 'c', 'h', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "mylookout.com", false */ 'm', 'y', 'l', 'o', 'o', 'k', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
+  /* "mymed.de", true */ 'm', 'y', 'm', 'e', 'd', '.', 'd', 'e', '\0',
+  /* "mymed.eu", true */ 'm', 'y', 'm', 'e', 'd', '.', 'e', 'u', '\0',
   /* "mymotor.nl", true */ 'm', 'y', 'm', 'o', 't', 'o', 'r', '.', 'n', 'l', '\0',
   /* "mymp3singer.net", true */ 'm', 'y', 'm', 'p', '3', 's', 'i', 'n', 'g', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "mymp3singer.site", true */ 'm', 'y', 'm', 'p', '3', 's', 'i', 'n', 'g', 'e', 'r', '.', 's', 'i', 't', 'e', '\0',
   /* "myms.eu", true */ 'm', 'y', 'm', 's', '.', 'e', 'u', '\0',
   /* "mymsr.de", true */ 'm', 'y', 'm', 's', 'r', '.', 'd', 'e', '\0',
   /* "mymx.lu", true */ 'm', 'y', 'm', 'x', '.', 'l', 'u', '\0',
   /* "mynetworkingbuddy.com", true */ 'm', 'y', 'n', 'e', 't', 'w', 'o', 'r', 'k', 'i', 'n', 'g', 'b', 'u', 'd', 'd', 'y', '.', 'c', 'o', 'm', '\0',
   /* "mynigma.org", true */ 'm', 'y', 'n', 'i', 'g', 'm', 'a', '.', 'o', 'r', 'g', '\0',
@@ -13203,17 +13193,16 @@ static const char kSTSHostTable[] = {
   /* "narrativasdigitais.pt", true */ 'n', 'a', 'r', 'r', 'a', 't', 'i', 'v', 'a', 's', 'd', 'i', 'g', 'i', 't', 'a', 'i', 's', '.', 'p', 't', '\0',
   /* "narthollis.net", true */ 'n', 'a', 'r', 't', 'h', 'o', 'l', 'l', 'i', 's', '.', 'n', 'e', 't', '\0',
   /* "nartuk.com.ua", false */ 'n', 'a', 'r', 't', 'u', 'k', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "nasarawanewsonline.com", true */ 'n', 'a', 's', 'a', 'r', 'a', 'w', 'a', 'n', 'e', 'w', 's', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "nascher.org", false */ 'n', 'a', 's', 'c', 'h', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "nasmocopati.com", true */ 'n', 'a', 's', 'm', 'o', 'c', 'o', 'p', 'a', 't', 'i', '.', 'c', 'o', 'm', '\0',
   /* "nasralmabrooka.com", true */ 'n', 'a', 's', 'r', 'a', 'l', 'm', 'a', 'b', 'r', 'o', 'o', 'k', 'a', '.', 'c', 'o', 'm', '\0',
   /* "nasreddine.xyz", false */ 'n', 'a', 's', 'r', 'e', 'd', 'd', 'i', 'n', 'e', '.', 'x', 'y', 'z', '\0',
-  /* "nasrsolar.com", true */ 'n', 'a', 's', 'r', 's', 'o', 'l', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "nassi.me", true */ 'n', 'a', 's', 's', 'i', '.', 'm', 'e', '\0',
   /* "nastoletni.pl", true */ 'n', 'a', 's', 't', 'o', 'l', 'e', 't', 'n', 'i', '.', 'p', 'l', '\0',
   /* "nastysclaw.com", true */ 'n', 'a', 's', 't', 'y', 's', 'c', 'l', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "nataliedawnhanson.com", true */ 'n', 'a', 't', 'a', 'l', 'i', 'e', 'd', 'a', 'w', 'n', 'h', 'a', 'n', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "natalydanilova.com", true */ 'n', 'a', 't', 'a', 'l', 'y', 'd', 'a', 'n', 'i', 'l', 'o', 'v', 'a', '.', 'c', 'o', 'm', '\0',
   /* "natatorium.org", true */ 'n', 'a', 't', 'a', 't', 'o', 'r', 'i', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "natecraun.net", true */ 'n', 'a', 't', 'e', 'c', 'r', 'a', 'u', 'n', '.', 'n', 'e', 't', '\0',
   /* "natenom.com", true */ 'n', 'a', 't', 'e', 'n', 'o', 'm', '.', 'c', 'o', 'm', '\0',
@@ -13372,16 +13361,17 @@ static const char kSTSHostTable[] = {
   /* "netera.se", true */ 'n', 'e', 't', 'e', 'r', 'a', '.', 's', 'e', '\0',
   /* "netfabb.com", true */ 'n', 'e', 't', 'f', 'a', 'b', 'b', '.', 'c', 'o', 'm', '\0',
   /* "netfs.pl", false */ 'n', 'e', 't', 'f', 's', '.', 'p', 'l', '\0',
   /* "netfxharmonics.com", true */ 'n', 'e', 't', 'f', 'x', 'h', 'a', 'r', 'm', 'o', 'n', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "netguide.co.nz", true */ 'n', 'e', 't', 'g', 'u', 'i', 'd', 'e', '.', 'c', 'o', '.', 'n', 'z', '\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',
   /* "nethunter.top", true */ 'n', 'e', 't', 'h', 'u', 'n', 't', 'e', 'r', '.', 't', 'o', 'p', '\0',
+  /* "netica.fr", false */ 'n', 'e', 't', 'i', 'c', 'a', '.', 'f', 'r', '\0',
   /* "netlocal.ru", true */ 'n', 'e', 't', 'l', 'o', 'c', 'a', 'l', '.', 'r', 'u', '\0',
   /* "netmazk.net", false */ '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',
   /* "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',
   /* "netrider.net.au", false */ 'n', 'e', 't', 'r', 'i', 'd', 'e', 'r', '.', 'n', 'e', 't', '.', 'a', 'u', '\0',
   /* "netronix.be", true */ 'n', 'e', 't', 'r', 'o', 'n', 'i', 'x', '.', 'b', 'e', '\0',
   /* "netsight.org", true */ 'n', 'e', 't', 's', 'i', 'g', 'h', 't', '.', 'o', 'r', 'g', '\0',
@@ -13481,17 +13471,16 @@ static const char kSTSHostTable[] = {
   /* "nextmbta.com", true */ 'n', 'e', 'x', 't', 'm', 'b', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "nextnowagency.com", true */ 'n', 'e', 'x', 't', 'n', 'o', 'w', 'a', 'g', 'e', 'n', 'c', 'y', '.', 'c', 'o', 'm', '\0',
   /* "nexusconnectinternational.eu", true */ 'n', 'e', 'x', 'u', 's', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'i', 'n', 't', 'e', 'r', 'n', 'a', 't', 'i', 'o', 'n', 'a', 'l', '.', 'e', 'u', '\0',
   /* "nexuscorporation.in", true */ 'n', 'e', 'x', 'u', 's', 'c', 'o', 'r', 'p', 'o', 'r', 'a', 't', 'i', 'o', 'n', '.', 'i', 'n', '\0',
   /* "neyer-lorenz.de", true */ 'n', 'e', 'y', 'e', 'r', '-', 'l', 'o', 'r', 'e', 'n', 'z', '.', 'd', 'e', '\0',
   /* "nezrouge-geneve.ch", true */ 'n', 'e', 'z', 'r', 'o', 'u', 'g', 'e', '-', 'g', 'e', 'n', 'e', 'v', 'e', '.', 'c', 'h', '\0',
   /* "nf9q.com", true */ 'n', 'f', '9', 'q', '.', 'c', 'o', 'm', '\0',
   /* "nfe-elektro.de", true */ 'n', 'f', 'e', '-', 'e', 'l', 'e', 'k', 't', 'r', 'o', '.', 'd', 'e', '\0',
-  /* "nframe.io", true */ 'n', 'f', 'r', 'a', 'm', 'e', '.', 'i', 'o', '\0',
   /* "nfrost.me", true */ 'n', 'f', 'r', 'o', 's', 't', '.', 'm', 'e', '\0',
   /* "nfsec.pl", true */ 'n', 'f', 's', 'e', 'c', '.', 'p', 'l', '\0',
   /* "nfz.moe", true */ 'n', 'f', 'z', '.', 'm', 'o', 'e', '\0',
   /* "ng-firewall.com", true */ 'n', 'g', '-', 'f', 'i', 'r', 'e', 'w', 'a', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "ngasembaru.com", true */ 'n', 'g', 'a', 's', 'e', 'm', 'b', 'a', 'r', 'u', '.', 'c', 'o', 'm', '\0',
   /* "nghe.net", true */ 'n', 'g', 'h', 'e', '.', 'n', 'e', 't', '\0',
   /* "nginxyii.tk", true */ 'n', 'g', 'i', 'n', 'x', 'y', 'i', 'i', '.', 't', 'k', '\0',
   /* "ngndn.jp", true */ 'n', 'g', 'n', 'd', 'n', '.', 'j', 'p', '\0',
@@ -13738,17 +13727,16 @@ static const char kSTSHostTable[] = {
   /* "nowloading.co", true */ 'n', 'o', 'w', 'l', 'o', 'a', 'd', 'i', 'n', 'g', '.', 'c', 'o', '\0',
   /* "noxlogic.nl", true */ 'n', 'o', 'x', 'l', 'o', 'g', 'i', 'c', '.', 'n', 'l', '\0',
   /* "npm.li", true */ 'n', 'p', 'm', '.', 'l', 'i', '\0',
   /* "npmcdn.com", true */ 'n', 'p', 'm', 'c', 'd', 'n', '.', 'c', 'o', 'm', '\0',
   /* "npw.net", true */ 'n', 'p', 'w', '.', 'n', 'e', 't', '\0',
   /* "nq7.pl", true */ 'n', 'q', '7', '.', 'p', 'l', '\0',
   /* "nrd.li", true */ 'n', 'r', 'd', '.', 'l', 'i', '\0',
   /* "nrkn.fr", true */ 'n', 'r', 'k', 'n', '.', 'f', 'r', '\0',
-  /* "nrnjn.xyz", true */ 'n', 'r', 'n', 'j', 'n', '.', 'x', 'y', 'z', '\0',
   /* "nsa.lol", true */ 'n', 's', 'a', '.', 'l', 'o', 'l', '\0',
   /* "nsa.wtf", true */ 'n', 's', 'a', '.', 'w', 't', 'f', '\0',
   /* "nsboston.org", true */ 'n', 's', 'b', 'o', 's', 't', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "nsboutique.com", true */ 'n', 's', 'b', 'o', 'u', 't', 'i', 'q', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "nscnet.jp", true */ 'n', 's', 'c', 'n', 'e', 't', '.', 'j', 'p', '\0',
   /* "nshost.ro", true */ 'n', 's', 'h', 'o', 's', 't', '.', 'r', 'o', '\0',
   /* "nsm.ee", true */ 'n', 's', 'm', '.', 'e', 'e', '\0',
   /* "nso.ie", true */ 'n', 's', 'o', '.', 'i', 'e', '\0',
@@ -13833,16 +13821,17 @@ static const char kSTSHostTable[] = {
   /* "nyloc.de", true */ 'n', 'y', 'l', 'o', 'c', '.', 'd', 'e', '\0',
   /* "nylonfeetporn.com", true */ 'n', 'y', 'l', 'o', 'n', 'f', 'e', 'e', 't', 'p', 'o', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "nymphetomania.net", true */ 'n', 'y', 'm', 'p', 'h', 'e', 't', 'o', 'm', 'a', 'n', 'i', 'a', '.', 'n', 'e', 't', '\0',
   /* "nynex.net", true */ 'n', 'y', 'n', 'e', 'x', '.', 'n', 'e', 't', '\0',
   /* "nyphox.net", true */ 'n', 'y', 'p', 'h', 'o', 'x', '.', 'n', 'e', 't', '\0',
   /* "nyronet.de", false */ 'n', 'y', 'r', 'o', 'n', 'e', 't', '.', 'd', 'e', '\0',
   /* "nyxi.eu", true */ 'n', 'y', 'x', 'i', '.', 'e', 'u', '\0',
   /* "nyyu.tk", true */ 'n', 'y', 'y', 'u', '.', 't', 'k', '\0',
+  /* "nzb.cat", false */ 'n', 'z', 'b', '.', 'c', 'a', 't', '\0',
   /* "nzmk.cz", true */ 'n', 'z', 'm', 'k', '.', 'c', 'z', '\0',
   /* "nzstudy.ac.nz", true */ 'n', 'z', 's', 't', 'u', 'd', 'y', '.', 'a', 'c', '.', 'n', 'z', '\0',
   /* "o-rickroll-y.pw", true */ 'o', '-', 'r', 'i', 'c', 'k', 'r', 'o', 'l', 'l', '-', 'y', '.', 'p', 'w', '\0',
   /* "o2careers.co.uk", true */ 'o', '2', 'c', 'a', 'r', 'e', 'e', 'r', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "o3.wf", true */ 'o', '3', '.', 'w', 'f', '\0',
   /* "o3wallet.com", true */ 'o', '3', 'w', 'a', 'l', 'l', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "o6asan.com", true */ 'o', '6', 'a', 's', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "oaic.gov.au", true */ 'o', 'a', 'i', 'c', '.', 'g', 'o', 'v', '.', 'a', 'u', '\0',
@@ -13993,18 +13982,18 @@ static const char kSTSHostTable[] = {
   /* "ometepeislandinfo.com", true */ 'o', 'm', 'e', 't', 'e', 'p', 'e', 'i', 's', 'l', 'a', 'n', 'd', 'i', 'n', 'f', 'o', '.', 'c', 'o', 'm', '\0',
   /* "omf.link", true */ 'o', 'm', 'f', '.', 'l', 'i', 'n', 'k', '\0',
   /* "omi-news.fr", true */ 'o', 'm', 'i', '-', 'n', 'e', 'w', 's', '.', 'f', 'r', '\0',
   /* "omifind.com", true */ 'o', 'm', 'i', 'f', 'i', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "omitech.co.uk", true */ 'o', 'm', 'i', 't', 'e', 'c', 'h', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "ommahpost.com", true */ 'o', 'm', 'm', 'a', 'h', 'p', 'o', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "omniasl.com", true */ 'o', 'm', 'n', 'i', 'a', 's', 'l', '.', 'c', 'o', 'm', '\0',
   /* "omniatv.com", true */ 'o', 'm', 'n', 'i', 'a', 't', 'v', '.', 'c', 'o', 'm', '\0',
-  /* "omnienviro.com", true */ 'o', 'm', 'n', 'i', 'e', 'n', 'v', 'i', 'r', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "omnienviro.com.au", true */ 'o', 'm', 'n', 'i', 'e', 'n', 'v', 'i', 'r', 'o', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
+  /* "omnienviro.com", false */ 'o', 'm', 'n', 'i', 'e', 'n', 'v', 'i', 'r', 'o', '.', 'c', 'o', 'm', '\0',
+  /* "omnienviro.com.au", false */ 'o', 'm', 'n', 'i', 'e', 'n', 'v', 'i', 'r', 'o', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "omniverse.ru", true */ 'o', 'm', 'n', 'i', 'v', 'e', 'r', 's', 'e', '.', 'r', 'u', '\0',
   /* "omorashi.org", true */ 'o', 'm', 'o', 'r', 'a', 's', 'h', 'i', '.', 'o', 'r', 'g', '\0',
   /* "omsdieppe.fr", true */ 'o', 'm', 's', 'd', 'i', 'e', 'p', 'p', 'e', '.', 'f', 'r', '\0',
   /* "onaboat.se", true */ 'o', 'n', 'a', 'b', 'o', 'a', 't', '.', 's', 'e', '\0',
   /* "onarto.com", true */ 'o', 'n', 'a', 'r', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "oncf.asso.fr", true */ 'o', 'n', 'c', 'f', '.', 'a', 's', 's', 'o', '.', 'f', 'r', '\0',
   /* "oncodedesign.com", true */ 'o', 'n', 'c', 'o', 'd', 'e', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
   /* "ondrej.org", true */ 'o', 'n', 'd', 'r', 'e', 'j', '.', 'o', 'r', 'g', '\0',
@@ -14160,17 +14149,16 @@ static const char kSTSHostTable[] = {
   /* "orangenbaum.at", true */ 'o', 'r', 'a', 'n', 'g', 'e', 'n', 'b', 'a', 'u', 'm', '.', 'a', 't', '\0',
   /* "orangetravel.eu", true */ 'o', 'r', 'a', 'n', 'g', 'e', 't', 'r', 'a', 'v', 'e', 'l', '.', 'e', 'u', '\0',
   /* "orangutan-appeal.org.uk", true */ 'o', 'r', 'a', 'n', 'g', 'u', 't', 'a', 'n', '-', 'a', 'p', 'p', 'e', 'a', 'l', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "orbitsoft.com", true */ 'o', 'r', 'b', 'i', 't', 's', 'o', 'f', 't', '.', 'c', 'o', 'm', '\0',
   /* "orcahq.com", true */ 'o', 'r', 'c', 'a', 'h', 'q', '.', 'c', 'o', 'm', '\0',
   /* "orcamoney.com", true */ 'o', 'r', 'c', 'a', 'm', 'o', 'n', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "orchidsforum.com", true */ 'o', 'r', 'c', 'h', 'i', 'd', 's', 'f', 'o', 'r', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "orchidspaper.com", true */ 'o', 'r', 'c', 'h', 'i', 'd', 's', 'p', 'a', 'p', 'e', 'r', '.', 'c', 'o', 'm', '\0',
-  /* "orderlounge.de", true */ 'o', 'r', 'd', 'e', 'r', 'l', 'o', 'u', 'n', 'g', 'e', '.', 'd', 'e', '\0',
   /* "ordernow.at", true */ 'o', 'r', 'd', 'e', 'r', 'n', 'o', 'w', '.', 'a', 't', '\0',
   /* "orderswift.com", true */ 'o', 'r', 'd', 'e', 'r', 's', 'w', 'i', 'f', 't', '.', 'c', 'o', 'm', '\0',
   /* "ordr.mobi", true */ 'o', 'r', 'd', 'r', '.', 'm', 'o', 'b', 'i', '\0',
   /* "oref-idf.com", true */ 'o', 'r', 'e', 'f', '-', 'i', 'd', 'f', '.', 'c', 'o', 'm', '\0',
   /* "oref-idf.net", true */ 'o', 'r', 'e', 'f', '-', 'i', 'd', 'f', '.', 'n', 'e', 't', '\0',
   /* "oref-idf.org", true */ 'o', 'r', 'e', 'f', '-', 'i', 'd', 'f', '.', 'o', 'r', 'g', '\0',
   /* "oreka.online", true */ 'o', 'r', 'e', 'k', 'a', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "oreshinya.xyz", true */ 'o', 'r', 'e', 's', 'h', 'i', 'n', 'y', 'a', '.', 'x', 'y', 'z', '\0',
@@ -14279,21 +14267,24 @@ static const char kSTSHostTable[] = {
   /* "ownspec.com", true */ 'o', 'w', 'n', 's', 'p', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "oxanababy.com", true */ 'o', 'x', 'a', 'n', 'a', 'b', 'a', 'b', 'y', '.', 'c', 'o', 'm', '\0',
   /* "oxelie.com", true */ 'o', 'x', 'e', 'l', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "oxygaming.com", true */ 'o', 'x', 'y', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "oxymc.com", true */ 'o', 'x', 'y', 'm', 'c', '.', 'c', 'o', 'm', '\0',
   /* "oxynux.xyz", true */ 'o', 'x', 'y', 'n', 'u', 'x', '.', 'x', 'y', 'z', '\0',
   /* "oxytocin.org", true */ 'o', 'x', 'y', 't', 'o', 'c', 'i', 'n', '.', 'o', 'r', 'g', '\0',
   /* "oznamovacipovinnost.cz", true */ 'o', 'z', 'n', 'a', 'm', 'o', 'v', 'a', 'c', 'i', 'p', 'o', 'v', 'i', 'n', 'n', 'o', 's', 't', '.', 'c', 'z', '\0',
+  /* "ozonitron.com", true */ 'o', 'z', 'o', 'n', 'i', 't', 'r', 'o', 'n', '.', 'c', 'o', 'm', '\0',
+  /* "ozonitron.de", true */ 'o', 'z', 'o', 'n', 'i', 't', 'r', 'o', 'n', '.', 'd', 'e', '\0',
+  /* "ozonitron.eu", true */ 'o', 'z', 'o', 'n', 'i', 't', 'r', 'o', 'n', '.', 'e', 'u', '\0',
+  /* "ozonytron.com", true */ 'o', 'z', 'o', 'n', 'y', 't', 'r', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "ozonytron.de", true */ 'o', 'z', 'o', 'n', 'y', 't', 'r', 'o', 'n', '.', 'd', 'e', '\0',
   /* "ozonytron.eu", true */ 'o', 'z', 'o', 'n', 'y', 't', 'r', 'o', 'n', '.', 'e', 'u', '\0',
   /* "ozoz.cc", true */ 'o', 'z', 'o', 'z', '.', 'c', 'c', '\0',
   /* "ozvolvo.org", true */ 'o', 'z', 'v', 'o', 'l', 'v', 'o', '.', 'o', 'r', 'g', '\0',
-  /* "p-pc.de", true */ 'p', '-', 'p', 'c', '.', 'd', 'e', '\0',
   /* "p-rickroll-o.pw", true */ 'p', '-', 'r', 'i', 'c', 'k', 'r', 'o', 'l', 'l', '-', 'o', '.', 'p', 'w', '\0',
   /* "p-s-b.com", true */ 'p', '-', 's', '-', 'b', '.', 'c', 'o', 'm', '\0',
   /* "p1984.nl", false */ 'p', '1', '9', '8', '4', '.', 'n', 'l', '\0',
   /* "p3ter.fr", true */ 'p', '3', 't', 'e', 'r', '.', 'f', 'r', '\0',
   /* "pa-w.de", true */ 'p', 'a', '-', 'w', '.', 'd', 'e', '\0',
   /* "pace.car", true */ 'p', 'a', 'c', 'e', '.', 'c', 'a', 'r', '\0',
   /* "pacifictilkin-occasions.be", true */ 'p', 'a', 'c', 'i', 'f', 'i', 'c', 't', 'i', 'l', 'k', 'i', 'n', '-', 'o', 'c', 'c', 'a', 's', 'i', 'o', 'n', 's', '.', 'b', 'e', '\0',
   /* "packagist.org", false */ 'p', 'a', 'c', 'k', 'a', 'g', 'i', 's', 't', '.', 'o', 'r', 'g', '\0',
@@ -14547,17 +14538,16 @@ static const char kSTSHostTable[] = {
   /* "pdfresizer.com", true */ 'p', 'd', 'f', 'r', 'e', 's', 'i', 'z', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "pdthings.net", true */ 'p', 'd', 't', 'h', 'i', 'n', 'g', 's', '.', 'n', 'e', 't', '\0',
   /* "pe-bank.co.jp", true */ 'p', 'e', '-', 'b', 'a', 'n', 'k', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "pe-kyousai.jp", true */ 'p', 'e', '-', 'k', 'y', 'o', 'u', 's', 'a', 'i', '.', 'j', 'p', '\0',
   /* "pe.search.yahoo.com", false */ 'p', 'e', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "pear2pear.de", true */ 'p', 'e', 'a', 'r', '2', 'p', 'e', 'a', 'r', '.', 'd', 'e', '\0',
   /* "pearbloom.com", true */ 'p', 'e', 'a', 'r', 'b', 'l', 'o', 'o', 'm', '.', 'c', 'o', 'm', '\0',
   /* "pebbles.net.in", true */ 'p', 'e', 'b', 'b', 'l', 'e', 's', '.', 'n', 'e', 't', '.', 'i', 'n', '\0',
-  /* "pebblesdemo.com", true */ 'p', 'e', 'b', 'b', 'l', 'e', 's', 'd', 'e', 'm', 'o', '.', 'c', 'o', 'm', '\0',
   /* "pecker-johnson.com", true */ 'p', 'e', 'c', 'k', 'e', 'r', '-', 'j', 'o', 'h', 'n', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "pedicureduiven.nl", true */ 'p', 'e', 'd', 'i', 'c', 'u', 'r', 'e', 'd', 'u', 'i', 'v', 'e', 'n', '.', 'n', 'l', '\0',
   /* "pedrosluiter.nl", true */ 'p', 'e', 'd', 'r', 'o', 's', 'l', 'u', 'i', 't', 'e', 'r', '.', 'n', 'l', '\0',
   /* "pedroventura.com", false */ 'p', 'e', 'd', 'r', 'o', 'v', 'e', 'n', 't', 'u', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "peekier.com", true */ 'p', 'e', 'e', 'k', 'i', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "peep.gq", true */ 'p', 'e', 'e', 'p', '.', 'g', 'q', '\0',
   /* "peercraft.at", true */ 'p', 'e', 'e', 'r', 'c', 'r', 'a', 'f', 't', '.', 'a', 't', '\0',
   /* "peercraft.be", true */ 'p', 'e', 'e', 'r', 'c', 'r', 'a', 'f', 't', '.', 'b', 'e', '\0',
@@ -14747,16 +14737,17 @@ static const char kSTSHostTable[] = {
   /* "photographyforchange.com", true */ 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', 'f', 'o', 'r', 'c', 'h', 'a', 'n', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "photomodelcasting.com", true */ 'p', 'h', 'o', 't', 'o', 'm', 'o', 'd', 'e', 'l', 'c', 'a', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "photon.sh", true */ 'p', 'h', 'o', 't', 'o', 'n', '.', 's', 'h', '\0',
   /* "phototag.org", true */ 'p', 'h', 'o', 't', 'o', 't', 'a', 'g', '.', 'o', 'r', 'g', '\0',
   /* "phototravel.uk", true */ 'p', 'h', 'o', 't', 'o', 't', 'r', 'a', 'v', 'e', 'l', '.', 'u', 'k', '\0',
   /* "phoxmeh.com", true */ 'p', 'h', 'o', 'x', 'm', 'e', 'h', '.', 'c', 'o', 'm', '\0',
   /* "php-bach.org", true */ 'p', 'h', 'p', '-', 'b', 'a', 'c', 'h', '.', 'o', 'r', 'g', '\0',
   /* "php-tuning.de", true */ 'p', 'h', 'p', '-', 't', 'u', 'n', 'i', 'n', 'g', '.', 'd', 'e', '\0',
+  /* "phparcade.com", true */ 'p', 'h', 'p', 'a', 'r', 'c', 'a', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "phpbbchinese.com", true */ 'p', 'h', 'p', 'b', 'b', 'c', 'h', 'i', 'n', 'e', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "phpdistribution.com", true */ 'p', 'h', 'p', 'd', 'i', 's', 't', 'r', 'i', 'b', 'u', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "phpdorset.co.uk", true */ 'p', 'h', 'p', 'd', 'o', 'r', 's', 'e', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "phperformances.fr", true */ 'p', 'h', 'p', 'e', 'r', 'f', 'o', 'r', 'm', 'a', 'n', 'c', 'e', 's', '.', 'f', 'r', '\0',
   /* "phpfashion.com", true */ 'p', 'h', 'p', 'f', 'a', 's', 'h', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "phpkari.cz", true */ 'p', 'h', 'p', 'k', 'a', 'r', 'i', '.', 'c', 'z', '\0',
   /* "phpliteadmin.org", true */ 'p', 'h', 'p', 'l', 'i', 't', 'e', 'a', 'd', 'm', 'i', 'n', '.', 'o', 'r', 'g', '\0',
   /* "phpmyadmin.net", true */ 'p', 'h', 'p', 'm', 'y', 'a', 'd', 'm', 'i', 'n', '.', 'n', 'e', 't', '\0',
@@ -14926,17 +14917,16 @@ static const char kSTSHostTable[] = {
   /* "play.cash", true */ 'p', 'l', 'a', 'y', '.', 'c', 'a', 's', 'h', '\0',
   /* "play.google.com", true */ 'p', 'l', 'a', 'y', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "playanka.com", true */ 'p', 'l', 'a', 'y', 'a', 'n', 'k', 'a', '.', 'c', 'o', 'm', '\0',
   /* "playdreamcraft.com.br", true */ 'p', 'l', 'a', 'y', 'd', 'r', 'e', 'a', 'm', 'c', 'r', 'a', 'f', 't', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "playform.cloud", true */ 'p', 'l', 'a', 'y', 'f', 'o', 'r', 'm', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "playhappywheelsunblocked.com", true */ 'p', 'l', 'a', 'y', 'h', 'a', 'p', 'p', 'y', 'w', 'h', 'e', 'e', 'l', 's', 'u', 'n', 'b', 'l', 'o', 'c', 'k', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "playkh.com", true */ 'p', 'l', 'a', 'y', 'k', 'h', '.', 'c', 'o', 'm', '\0',
   /* "playmfe.com", true */ 'p', 'l', 'a', 'y', 'm', 'f', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "playmyplay.com", true */ 'p', 'l', 'a', 'y', 'm', 'y', 'p', 'l', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "playpirates.com", true */ 'p', 'l', 'a', 'y', 'p', 'i', 'r', 'a', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "playsnake.org", true */ 'p', 'l', 'a', 'y', 's', 'n', 'a', 'k', 'e', '.', 'o', 'r', 'g', '\0',
   /* "playsoundevents.be", true */ 'p', 'l', 'a', 'y', 's', 'o', 'u', 'n', 'd', 'e', 'v', 'e', 'n', 't', 's', '.', 'b', 'e', '\0',
   /* "playsource.co", true */ 'p', 'l', 'a', 'y', 's', 'o', 'u', 'r', 'c', 'e', '.', 'c', 'o', '\0',
   /* "playsprout.industries", false */ 'p', 'l', 'a', 'y', 's', 'p', 'r', 'o', 'u', 't', '.', 'i', 'n', 'd', 'u', 's', 't', 'r', 'i', 'e', 's', '\0',
   /* "playtictactoe.org", true */ 'p', 'l', 'a', 'y', 't', 'i', 'c', 't', 'a', 'c', 't', 'o', 'e', '.', 'o', 'r', 'g', '\0',
   /* "pldx.org", true */ 'p', 'l', 'd', 'x', '.', 'o', 'r', 'g', '\0',
   /* "please-deny.me", true */ 'p', 'l', 'e', 'a', 's', 'e', '-', 'd', 'e', 'n', 'y', '.', 'm', 'e', '\0',
@@ -15060,27 +15050,27 @@ static const char kSTSHostTable[] = {
   /* "poppetsphere.de", true */ 'p', 'o', 'p', 'p', 'e', 't', 's', 'p', 'h', 'e', 'r', 'e', '.', 'd', 'e', '\0',
   /* "population-ethics.com", true */ 'p', 'o', 'p', 'u', 'l', 'a', 't', 'i', 'o', 'n', '-', 'e', 't', 'h', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "poquvi.net", true */ 'p', 'o', 'q', 'u', 'v', 'i', '.', 'n', 'e', 't', '\0',
   /* "porg.es", true */ 'p', 'o', 'r', 'g', '.', 'e', 's', '\0',
   /* "poris.web.id", false */ 'p', 'o', 'r', 'i', 's', '.', 'w', 'e', 'b', '.', 'i', 'd', '\0',
   /* "pork.org.uk", true */ 'p', 'o', 'r', 'k', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "porn77.info", true */ 'p', 'o', 'r', 'n', '7', '7', '.', 'i', 'n', 'f', 'o', '\0',
   /* "pornbase.info", true */ 'p', 'o', 'r', 'n', 'b', 'a', 's', 'e', '.', 'i', 'n', 'f', 'o', '\0',
-  /* "pornbay.org", true */ 'p', 'o', 'r', 'n', 'b', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "pornblog.org", true */ 'p', 'o', 'r', 'n', 'b', 'l', 'o', 'g', '.', 'o', 'r', 'g', '\0',
   /* "porschen.fr", true */ 'p', 'o', 'r', 's', 'c', 'h', 'e', 'n', '.', 'f', 'r', '\0',
   /* "port443.hamburg", true */ 'p', 'o', 'r', 't', '4', '4', '3', '.', 'h', 'a', 'm', 'b', 'u', 'r', 'g', '\0',
   /* "port443.se", true */ 'p', 'o', 'r', 't', '4', '4', '3', '.', 's', 'e', '\0',
   /* "port80.hamburg", true */ 'p', 'o', 'r', 't', '8', '0', '.', 'h', 'a', 'm', 'b', 'u', 'r', 'g', '\0',
   /* "portal.tirol.gv.at", true */ 'p', 'o', 'r', 't', 'a', 'l', '.', 't', 'i', 'r', 'o', 'l', '.', 'g', 'v', '.', 'a', 't', '\0',
   /* "portalcentric.net", true */ 'p', 'o', 'r', 't', 'a', 'l', 'c', 'e', 'n', 't', 'r', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "portalisapres.cl", true */ 'p', 'o', 'r', 't', 'a', 'l', 'i', 's', 'a', 'p', 'r', 'e', 's', '.', 'c', 'l', '\0',
   /* "portalm.tk", true */ 'p', 'o', 'r', 't', 'a', 'l', 'm', '.', 't', 'k', '\0',
   /* "portaluniversalista.org", false */ 'p', 'o', 'r', 't', 'a', 'l', 'u', 'n', 'i', 'v', 'e', 'r', 's', 'a', 'l', 'i', 's', 't', 'a', '.', 'o', 'r', 'g', '\0',
+  /* "portalzine.de", true */ 'p', 'o', 'r', 't', 'a', 'l', 'z', 'i', 'n', 'e', '.', 'd', 'e', '\0',
   /* "portercup.com", true */ 'p', 'o', 'r', 't', 'e', 'r', 'c', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "portofacil.com", true */ 'p', 'o', 'r', 't', 'o', 'f', 'a', 'c', 'i', 'l', '.', 'c', 'o', 'm', '\0',
   /* "portofrotterdam.com", true */ 'p', 'o', 'r', 't', 'o', 'f', 'r', 'o', 't', 't', 'e', 'r', 'd', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "portosonline.pl", true */ 'p', 'o', 'r', 't', 'o', 's', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'p', 'l', '\0',
   /* "portraitsystem.biz", true */ 'p', 'o', 'r', 't', 'r', 'a', 'i', 't', 's', 'y', 's', 't', 'e', 'm', '.', 'b', 'i', 'z', '\0',
   /* "portugalsko.net", true */ 'p', 'o', 'r', 't', 'u', 'g', 'a', 'l', 's', 'k', 'o', '.', 'n', 'e', 't', '\0',
   /* "portvaletickets.com", true */ 'p', 'o', 'r', 't', 'v', 'a', 'l', 'e', 't', 'i', 'c', 'k', 'e', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "porybox.com", true */ 'p', 'o', 'r', 'y', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0',
@@ -15299,16 +15289,17 @@ static const char kSTSHostTable[] = {
   /* "promoscuola.net", true */ 'p', 'r', 'o', 'm', 'o', 's', 'c', 'u', 'o', 'l', 'a', '.', 'n', 'e', 't', '\0',
   /* "promotiongeeks.com", false */ 'p', 'r', 'o', 'm', 'o', 't', 'i', 'o', 'n', 'g', 'e', 'e', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "proobec.cz", true */ 'p', 'r', 'o', 'o', 'b', 'e', 'c', '.', 'c', 'z', '\0',
   /* "proofwiki.org", true */ 'p', 'r', 'o', 'o', 'f', 'w', 'i', 'k', 'i', '.', 'o', 'r', 'g', '\0',
   /* "proos.nl", true */ 'p', 'r', 'o', 'o', 's', '.', 'n', 'l', '\0',
   /* "propagandism.org", true */ 'p', 'r', 'o', 'p', 'a', 'g', 'a', 'n', 'd', 'i', 's', 'm', '.', 'o', 'r', 'g', '\0',
   /* "propagationtools.com", true */ 'p', 'r', 'o', 'p', 'a', 'g', 'a', 't', 'i', 'o', 'n', 't', 'o', 'o', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "propershave.com", true */ 'p', 'r', 'o', 'p', 'e', 'r', 's', 'h', 'a', 'v', 'e', '.', 'c', 'o', 'm', '\0',
+  /* "property-catalogue.eu", true */ 'p', 'r', 'o', 'p', 'e', 'r', 't', 'y', '-', 'c', 'a', 't', 'a', 'l', 'o', 'g', 'u', 'e', '.', 'e', 'u', '\0',
   /* "propertygroup.pl", true */ 'p', 'r', 'o', 'p', 'e', 'r', 't', 'y', 'g', 'r', 'o', 'u', 'p', '.', 'p', 'l', '\0',
   /* "propertyone.mk", true */ 'p', 'r', 'o', 'p', 'e', 'r', 't', 'y', 'o', 'n', 'e', '.', 'm', 'k', '\0',
   /* "propipesystem.com", true */ 'p', 'r', 'o', 'p', 'i', 'p', 'e', 's', 'y', 's', 't', 'e', 'm', '.', 'c', 'o', 'm', '\0',
   /* "proposalonline.com", true */ 'p', 'r', 'o', 'p', 'o', 's', 'a', 'l', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "propr.no", true */ 'p', 'r', 'o', 'p', 'r', '.', 'n', 'o', '\0',
   /* "proslimdiets.com", true */ 'p', 'r', 'o', 's', 'l', 'i', 'm', 'd', 'i', 'e', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "prospanek.cz", true */ 'p', 'r', 'o', 's', 'p', 'a', 'n', 'e', 'k', '.', 'c', 'z', '\0',
   /* "prospo.co", true */ 'p', 'r', 'o', 's', 'p', 'o', '.', 'c', 'o', '\0',
@@ -15934,16 +15925,17 @@ static const char kSTSHostTable[] = {
   /* "request-trent.com", true */ 'r', 'e', 'q', 'u', 'e', 's', 't', '-', 't', 'r', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "resc.la", true */ 'r', 'e', 's', 'c', '.', 'l', 'a', '\0',
   /* "rescms-secure.com", true */ 'r', 'e', 's', 'c', 'm', 's', '-', 's', 'e', 'c', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "research.md", true */ 'r', 'e', 's', 'e', 'a', 'r', 'c', 'h', '.', 'm', 'd', '\0',
   /* "researchgate.net", true */ 'r', 'e', 's', 'e', 'a', 'r', 'c', 'h', 'g', 'a', 't', 'e', '.', 'n', 'e', 't', '\0',
   /* "reservar-un-hotel.com", true */ 'r', 'e', 's', 'e', 'r', 'v', 'a', 'r', '-', 'u', 'n', '-', 'h', 'o', 't', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "residence-simoncelli.com", true */ 'r', 'e', 's', 'i', 'd', 'e', 'n', 'c', 'e', '-', 's', 'i', 'm', 'o', 'n', 'c', 'e', 'l', 'l', 'i', '.', 'c', 'o', 'm', '\0',
   /* "resist.ca", true */ 'r', 'e', 's', 'i', 's', 't', '.', 'c', 'a', '\0',
+  /* "resl20.servehttp.com", true */ 'r', 'e', 's', 'l', '2', '0', '.', 's', 'e', 'r', 'v', 'e', 'h', 't', 't', 'p', '.', 'c', 'o', 'm', '\0',
   /* "resortohshima.com", true */ 'r', 'e', 's', 'o', 'r', 't', 'o', 'h', 's', 'h', 'i', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "resources.flowfinity.com", true */ 'r', 'e', 's', 'o', 'u', 'r', 'c', 'e', 's', '.', 'f', 'l', 'o', 'w', 'f', 'i', 'n', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "respectmyprivacy.eu", true */ 'r', 'e', 's', 'p', 'e', 'c', 't', 'm', 'y', 'p', 'r', 'i', 'v', 'a', 'c', 'y', '.', 'e', 'u', '\0',
   /* "respectmyprivacy.net", true */ 'r', 'e', 's', 'p', 'e', 'c', 't', 'm', 'y', 'p', 'r', 'i', 'v', 'a', 'c', 'y', '.', 'n', 'e', 't', '\0',
   /* "respectmyprivacy.nl", true */ 'r', 'e', 's', 'p', 'e', 'c', 't', 'm', 'y', 'p', 'r', 'i', 'v', 'a', 'c', 'y', '.', 'n', 'l', '\0',
   /* "respon.jp", true */ 'r', 'e', 's', 'p', 'o', 'n', '.', 'j', 'p', '\0',
   /* "responer.com", true */ 'r', 'e', 's', 'p', 'o', 'n', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "responsibledisclosure.nl", false */ 'r', 'e', 's', 'p', 'o', 'n', 's', 'i', 'b', 'l', 'e', 'd', 'i', 's', 'c', 'l', 'o', 's', 'u', 'r', 'e', '.', 'n', 'l', '\0',
@@ -15973,24 +15965,24 @@ static const char kSTSHostTable[] = {
   /* "reulitz.de", false */ 'r', 'e', 'u', 'l', 'i', 't', 'z', '.', 'd', 'e', '\0',
   /* "reussirsavie.info", true */ 'r', 'e', 'u', 's', 's', 'i', 'r', 's', 'a', 'v', 'i', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "reuter-shop.com", true */ 'r', 'e', 'u', 't', 'e', 'r', '-', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "reuter.de", true */ 'r', 'e', 'u', 't', 'e', 'r', '.', 'd', 'e', '\0',
   /* "revamed.com", false */ 'r', 'e', 'v', 'a', 'm', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "revelaciones.tv", true */ 'r', 'e', 'v', 'e', 'l', 'a', 'c', 'i', 'o', 'n', 'e', 's', '.', 't', 'v', '\0',
   /* "revensoftware.com", true */ 'r', 'e', 'v', 'e', 'n', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "review.info", true */ 'r', 'e', 'v', 'i', 'e', 'w', '.', 'i', 'n', 'f', 'o', '\0',
-  /* "reviewjust.com", true */ 'r', 'e', 'v', 'i', 'e', 'w', 'j', 'u', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "revivalinhisword.com", true */ 'r', 'e', 'v', 'i', 'v', 'a', 'l', 'i', 'n', 'h', 'i', 's', 'w', 'o', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "revivingtheredeemed.org", true */ 'r', 'e', 'v', 'i', 'v', 'i', 'n', 'g', 't', 'h', 'e', 'r', 'e', 'd', 'e', 'e', 'm', 'e', 'd', '.', 'o', 'r', 'g', '\0',
   /* "revlect.com", true */ 'r', 'e', 'v', 'l', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "revolt.tv", true */ 'r', 'e', 'v', 'o', 'l', 't', '.', 't', 'v', '\0',
   /* "revthefox.co.uk", true */ 'r', 'e', 'v', 't', 'h', 'e', 'f', 'o', 'x', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "rewardingexcellence.com", true */ 'r', 'e', 'w', 'a', 'r', 'd', 'i', 'n', 'g', 'e', 'x', 'c', 'e', 'l', 'l', 'e', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "rewrite3.com", true */ 'r', 'e', 'w', 'r', 'i', 't', 'e', '3', '.', 'c', 'o', 'm', '\0',
+  /* "rex.st", true */ 'r', 'e', 'x', '.', 's', 't', '\0',
   /* "rex.tc", true */ 'r', 'e', 'x', '.', 't', 'c', '\0',
   /* "reykjavik.guide", true */ 'r', 'e', 'y', 'k', 'j', 'a', 'v', 'i', 'k', '.', 'g', 'u', 'i', 'd', 'e', '\0',
   /* "rezept-planer.de", true */ 'r', 'e', 'z', 'e', 'p', 't', '-', 'p', 'l', 'a', 'n', 'e', 'r', '.', 'd', 'e', '\0',
   /* "rezexpert.com", true */ 'r', 'e', 'z', 'e', 'x', 'p', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "rezosup.net", true */ 'r', 'e', 'z', 'o', 's', 'u', 'p', '.', 'n', 'e', 't', '\0',
   /* "rezosup.org", true */ 'r', 'e', 'z', 'o', 's', 'u', 'p', '.', 'o', 'r', 'g', '\0',
   /* "rezultant.ru", true */ 'r', 'e', 'z', 'u', 'l', 't', 'a', 'n', 't', '.', 'r', 'u', '\0',
   /* "rezun.cloud", true */ 'r', 'e', 'z', 'u', 'n', '.', 'c', 'l', 'o', 'u', 'd', '\0',
@@ -16021,17 +16013,16 @@ static const char kSTSHostTable[] = {
   /* "riceglue.com", true */ 'r', 'i', 'c', 'e', 'g', 'l', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "richardb.me", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'b', '.', 'm', 'e', '\0',
   /* "richardhering.de", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'h', 'e', 'r', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "richardjgreen.net", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'j', 'g', 'r', 'e', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "richardlangworth.com", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'l', 'a', 'n', 'g', 'w', 'o', 'r', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "richardlugten.nl", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'l', 'u', 'g', 't', 'e', 'n', '.', 'n', 'l', '\0',
   /* "richardrblocker.net", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'r', 'b', 'l', 'o', 'c', 'k', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "richardwarrender.com", true */ 'r', 'i', 'c', 'h', 'a', 'r', 'd', 'w', 'a', 'r', 'r', 'e', 'n', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
-  /* "richmtdriver.com", true */ 'r', 'i', 'c', 'h', 'm', 't', 'd', 'r', 'i', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "richonrails.com", true */ 'r', 'i', 'c', 'h', 'o', 'n', 'r', 'a', 'i', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "ricki-z.com", true */ 'r', 'i', 'c', 'k', 'i', '-', 'z', '.', 'c', 'o', 'm', '\0',
   /* "rickrongen.nl", true */ 'r', 'i', 'c', 'k', 'r', 'o', 'n', 'g', 'e', 'n', '.', 'n', 'l', '\0',
   /* "rickweijers.nl", true */ 'r', 'i', 'c', 'k', 'w', 'e', 'i', 'j', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "rickyromero.com", true */ 'r', 'i', 'c', 'k', 'y', 'r', 'o', 'm', 'e', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "rico-brase.de", true */ 'r', 'i', 'c', 'o', '-', 'b', 'r', 'a', 's', 'e', '.', 'd', 'e', '\0',
   /* "ricochet.im", true */ 'r', 'i', 'c', 'o', 'c', 'h', 'e', 't', '.', 'i', 'm', '\0',
   /* "ricozienke.de", true */ 'r', 'i', 'c', 'o', 'z', 'i', 'e', 'n', 'k', 'e', '.', 'd', 'e', '\0',
@@ -16501,16 +16492,17 @@ static const char kSTSHostTable[] = {
   /* "samwilberforce.com", true */ 's', 'a', 'm', 'w', 'i', 'l', 'b', 'e', 'r', 'f', 'o', 'r', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "samwu.tw", false */ 's', 'a', 'm', 'w', 'u', '.', 't', 'w', '\0',
   /* "sanael.net", true */ 's', 'a', 'n', 'a', 'e', 'l', '.', 'n', 'e', 't', '\0',
   /* "sanandreasstories.com", true */ 's', 'a', 'n', 'a', 'n', 'd', 'r', 'e', 'a', 's', 's', 't', 'o', 'r', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "sanasport.cz", true */ 's', 'a', 'n', 'a', 's', 'p', 'o', 'r', 't', '.', 'c', 'z', '\0',
   /* "sanasport.sk", true */ 's', 'a', 'n', 'a', 's', 'p', 'o', 'r', 't', '.', 's', 'k', '\0',
   /* "sanatfilan.com", false */ 's', 'a', 'n', 'a', 't', 'f', 'i', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "sanatorionosti.com.ar", true */ 's', 'a', 'n', 'a', 't', 'o', 'r', 'i', 'o', 'n', 'o', 's', 't', 'i', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
+  /* "sanchez.adv.br", true */ 's', 'a', 'n', 'c', 'h', 'e', 'z', '.', 'a', 'd', 'v', '.', 'b', 'r', '\0',
   /* "sand-islets.de", true */ 's', 'a', 'n', 'd', '-', 'i', 's', 'l', 'e', 't', 's', '.', 'd', 'e', '\0',
   /* "sandalj.com", true */ 's', 'a', 'n', 'd', 'a', 'l', 'j', '.', 'c', 'o', 'm', '\0',
   /* "sandbagexpress.com", true */ 's', 'a', 'n', 'd', 'b', 'a', 'g', 'e', 'x', 'p', 'r', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "sandbox.mydigipass.com", false */ 's', 'a', 'n', 'd', 'b', 'o', 'x', '.', 'm', 'y', 'd', 'i', 'g', 'i', 'p', 'a', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "sanderdorigo.nl", true */ 's', 'a', 'n', 'd', 'e', 'r', 'd', 'o', 'r', 'i', 'g', 'o', '.', 'n', 'l', '\0',
   /* "sanderknape.com", true */ 's', 'a', 'n', 'd', 'e', 'r', 'k', 'n', 'a', 'p', 'e', '.', 'c', 'o', 'm', '\0',
   /* "sanderkoenders.eu", true */ 's', 'a', 'n', 'd', 'e', 'r', 'k', 'o', 'e', 'n', 'd', 'e', 'r', 's', '.', 'e', 'u', '\0',
   /* "sanderkoenders.nl", true */ 's', 'a', 'n', 'd', 'e', 'r', 'k', 'o', 'e', 'n', 'd', 'e', 'r', 's', '.', 'n', 'l', '\0',
@@ -16658,17 +16650,16 @@ static const char kSTSHostTable[] = {
   /* "schlarp.com", true */ 's', 'c', 'h', 'l', 'a', 'r', 'p', '.', 'c', 'o', 'm', '\0',
   /* "schlechtewitze.com", true */ 's', 'c', 'h', 'l', 'e', 'c', 'h', 't', 'e', 'w', 'i', 't', 'z', 'e', '.', 'c', 'o', 'm', '\0',
   /* "schlossereieder.at", true */ 's', 'c', 'h', 'l', 'o', 's', 's', 'e', 'r', 'e', 'i', 'e', 'd', 'e', 'r', '.', 'a', 't', '\0',
   /* "schmelzle.io", true */ 's', 'c', 'h', 'm', 'e', 'l', 'z', 'l', 'e', '.', 'i', 'o', '\0',
   /* "schmidthomes.com", true */ 's', 'c', 'h', 'm', 'i', 'd', 't', 'h', 'o', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "schmitt-max.com", true */ 's', 'c', 'h', 'm', 'i', 't', 't', '-', 'm', 'a', 'x', '.', 'c', 'o', 'm', '\0',
   /* "schmitt.ovh", true */ 's', 'c', 'h', 'm', 'i', 't', 't', '.', 'o', 'v', 'h', '\0',
   /* "schmitt.ws", true */ 's', 'c', 'h', 'm', 'i', 't', 't', '.', 'w', 's', '\0',
-  /* "schmitz.link", true */ 's', 'c', 'h', 'm', 'i', 't', 'z', '.', 'l', 'i', 'n', 'k', '\0',
   /* "schnapke.name", true */ 's', 'c', 'h', 'n', 'a', 'p', 'k', 'e', '.', 'n', 'a', 'm', 'e', '\0',
   /* "schnegg.name", true */ 's', 'c', 'h', 'n', 'e', 'g', 'g', '.', 'n', 'a', 'm', 'e', '\0',
   /* "schneids.me", true */ 's', 'c', 'h', 'n', 'e', 'i', 'd', 's', '.', 'm', 'e', '\0',
   /* "schnellno.de", true */ 's', 'c', 'h', 'n', 'e', 'l', 'l', 'n', 'o', '.', 'd', 'e', '\0',
   /* "schnellsuche.de", true */ 's', 'c', 'h', 'n', 'e', 'l', 'l', 's', 'u', 'c', 'h', 'e', '.', 'd', 'e', '\0',
   /* "schnouki.net", true */ 's', 'c', 'h', 'n', 'o', 'u', 'k', 'i', '.', 'n', 'e', 't', '\0',
   /* "schnyder-werbung.ch", true */ 's', 'c', 'h', 'n', 'y', 'd', 'e', 'r', '-', 'w', 'e', 'r', 'b', 'u', 'n', 'g', '.', 'c', 'h', '\0',
   /* "schoepski.de", true */ 's', 'c', 'h', 'o', 'e', 'p', 's', 'k', 'i', '.', 'd', 'e', '\0',
@@ -17301,17 +17292,16 @@ static const char kSTSHostTable[] = {
   /* "silverlinkz.net", true */ 's', 'i', 'l', 'v', 'e', 'r', 'l', 'i', 'n', 'k', 'z', '.', 'n', 'e', 't', '\0',
   /* "silverseen.com", true */ 's', 'i', 'l', 'v', 'e', 'r', 's', 'e', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "silverstartup.sk", true */ 's', 'i', 'l', 'v', 'e', 'r', 's', 't', 'a', 'r', 't', 'u', 'p', '.', 's', 'k', '\0',
   /* "silverwind.io", true */ 's', 'i', 'l', 'v', 'e', 'r', 'w', 'i', 'n', 'd', '.', 'i', 'o', '\0',
   /* "silvistefi.com", true */ 's', 'i', 'l', 'v', 'i', 's', 't', 'e', 'f', 'i', '.', 'c', 'o', 'm', '\0',
   /* "sim-karten.net", true */ 's', 'i', 'm', '-', 'k', 'a', 'r', 't', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "simam.de", true */ 's', 'i', 'm', 'a', 'm', '.', 'd', 'e', '\0',
   /* "simbeton.nl", true */ 's', 'i', 'm', 'b', 'e', 't', 'o', 'n', '.', 'n', 'l', '\0',
-  /* "simccorp.com", false */ 's', 'i', 'm', 'c', 'c', 'o', 'r', 'p', '.', 'c', 'o', 'm', '\0',
   /* "simeon.us", true */ 's', 'i', 'm', 'e', 'o', 'n', '.', 'u', 's', '\0',
   /* "simeonoff.ninja", true */ 's', 'i', 'm', 'e', 'o', 'n', 'o', 'f', 'f', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "simetal.ch", true */ 's', 'i', 'm', 'e', 't', 'a', 'l', '.', 'c', 'h', '\0',
   /* "simfed.org", true */ 's', 'i', 'm', 'f', 'e', 'd', '.', 'o', 'r', 'g', '\0',
   /* "simlau.net", true */ 's', 'i', 'm', 'l', 'a', 'u', '.', 'n', 'e', 't', '\0',
   /* "simnovo.net", true */ 's', 'i', 'm', 'n', 'o', 'v', 'o', '.', 'n', 'e', 't', '\0',
   /* "simon-hofmann.org", true */ 's', 'i', 'm', 'o', 'n', '-', 'h', 'o', 'f', 'm', 'a', 'n', 'n', '.', 'o', 'r', 'g', '\0',
   /* "simon.lc", true */ 's', 'i', 'm', 'o', 'n', '.', 'l', 'c', '\0',
@@ -17360,17 +17350,16 @@ static const char kSTSHostTable[] = {
   /* "singaporemint.com", true */ 's', 'i', 'n', 'g', 'a', 'p', 'o', 'r', 'e', 'm', 'i', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "singapurfirma.com", true */ 's', 'i', 'n', 'g', 'a', 'p', 'u', 'r', 'f', 'i', 'r', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "singel.ch", true */ 's', 'i', 'n', 'g', 'e', 'l', '.', 'c', 'h', '\0',
   /* "singles-aus-hamburg.de", true */ 's', 'i', 'n', 'g', 'l', 'e', 's', '-', 'a', 'u', 's', '-', 'h', 'a', 'm', 'b', 'u', 'r', 'g', '.', 'd', 'e', '\0',
   /* "singleuse.link", true */ 's', 'i', 'n', 'g', 'l', 'e', 'u', 's', 'e', '.', 'l', 'i', 'n', 'k', '\0',
   /* "singlu10.org", false */ 's', 'i', 'n', 'g', 'l', 'u', '1', '0', '.', 'o', 'r', 'g', '\0',
   /* "sinktank.de", true */ 's', 'i', 'n', 'k', 't', 'a', 'n', 'k', '.', 'd', 'e', '\0',
   /* "sinneserweiterung.de", true */ 's', 'i', 'n', 'n', 'e', 's', 'e', 'r', 'w', 'e', 'i', 't', 'e', 'r', 'u', 'n', 'g', '.', 'd', 'e', '\0',
-  /* "sinnovate.de", true */ 's', 'i', 'n', 'n', 'o', 'v', 'a', 't', 'e', '.', 'd', 'e', '\0',
   /* "sinonimos.com.br", true */ 's', 'i', 'n', 'o', 'n', 'i', 'm', 'o', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "sinonimosonline.com", true */ 's', 'i', 'n', 'o', 'n', 'i', 'm', 'o', 's', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "sinonimosonline.com.br", true */ 's', 'i', 'n', 'o', 'n', 'i', 'm', 'o', 's', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "sinoscandinavia.se", true */ 's', 'i', 'n', 'o', 's', 'c', 'a', 'n', 'd', 'i', 'n', 'a', 'v', 'i', 'a', '.', 's', 'e', '\0',
   /* "sinquin.eu", true */ 's', 'i', 'n', 'q', 'u', 'i', 'n', '.', 'e', 'u', '\0',
   /* "sint-joris.nl", true */ 's', 'i', 'n', 't', '-', 'j', 'o', 'r', 'i', 's', '.', 'n', 'l', '\0',
   /* "sinterama.biz", true */ 's', 'i', 'n', 't', 'e', 'r', 'a', 'm', 'a', '.', 'b', 'i', 'z', '\0',
   /* "siqi.wang", true */ 's', 'i', 'q', 'i', '.', 'w', 'a', 'n', 'g', '\0',
@@ -17753,16 +17742,17 @@ static const char kSTSHostTable[] = {
   /* "sotiran.com", true */ 's', 'o', 't', 'i', 'r', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "sotoasobi.net", true */ 's', 'o', 't', 'o', 'a', 's', 'o', 'b', 'i', '.', 'n', 'e', 't', '\0',
   /* "sou-co.jp", true */ 's', 'o', 'u', '-', 'c', 'o', '.', 'j', 'p', '\0',
   /* "soubriquet.org", true */ 's', 'o', 'u', 'b', 'r', 'i', 'q', 'u', 'e', 't', '.', 'o', 'r', 'g', '\0',
   /* "souki.cz", true */ 's', 'o', 'u', 'k', 'i', '.', 'c', 'z', '\0',
   /* "soukodou.jp", true */ 's', 'o', 'u', 'k', 'o', 'd', 'o', 'u', '.', 'j', 'p', '\0',
   /* "soul-source.co.uk", true */ 's', 'o', 'u', 'l', '-', 's', 'o', 'u', 'r', 'c', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "soulboy.io", false */ 's', 'o', 'u', 'l', 'b', 'o', 'y', '.', 'i', 'o', '\0',
+  /* "soulmate.dating", true */ 's', 'o', 'u', 'l', 'm', 'a', 't', 'e', '.', 'd', 'a', 't', 'i', 'n', 'g', '\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',
   /* "soumya92.me", true */ 's', 'o', 'u', 'm', 'y', 'a', '9', '2', '.', 'm', 'e', '\0',
   /* "soundabout.nl", true */ 's', 'o', 'u', 'n', 'd', 'a', 'b', 'o', 'u', 't', '.', 'n', 'l', '\0',
   /* "soundeo.com", true */ 's', 'o', 'u', 'n', 'd', 'e', 'o', '.', 'c', 'o', 'm', '\0',
   /* "soundeo.net", true */ 's', 'o', 'u', 'n', 'd', 'e', 'o', '.', 'n', 'e', 't', '\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',
@@ -17864,16 +17854,17 @@ static const char kSTSHostTable[] = {
   /* "spisbilligt.dk", true */ 's', 'p', 'i', 's', 'b', 'i', 'l', 'l', 'i', 'g', 't', '.', 'd', 'k', '\0',
   /* "spitefultowel.com", true */ 's', 'p', 'i', 't', 'e', 'f', 'u', 'l', 't', 'o', 'w', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "spitfireuav.com", true */ 's', 'p', 'i', 't', 'f', 'i', 'r', 'e', 'u', 'a', 'v', '.', 'c', 'o', 'm', '\0',
   /* "splikity.com", true */ 's', 'p', 'l', 'i', 'k', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "split.is", true */ 's', 'p', 'l', 'i', 't', '.', 'i', 's', '\0',
   /* "splitdna.com", true */ 's', 'p', 'l', 'i', 't', 'd', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "splitreflection.com", true */ 's', 'p', 'l', 'i', 't', 'r', 'e', 'f', 'l', 'e', 'c', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "splunk.net", true */ 's', 'p', 'l', 'u', 'n', 'k', '.', 'n', 'e', 't', '\0',
+  /* "spodelime.com", true */ 's', 'p', 'o', 'd', 'e', 'l', 'i', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "spoketwist.com", true */ 's', 'p', 'o', 'k', 'e', 't', 'w', 'i', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "spom.net", true */ 's', 'p', 'o', 'm', '.', 'n', 'e', 't', '\0',
   /* "sponc.de", true */ 's', 'p', 'o', 'n', 'c', '.', 'd', 'e', '\0',
   /* "spongepowered.org", true */ 's', 'p', 'o', 'n', 'g', 'e', 'p', 'o', 'w', 'e', 'r', 'e', 'd', '.', 'o', 'r', 'g', '\0',
   /* "sponsor.network", true */ 's', 'p', 'o', 'n', 's', 'o', 'r', '.', 'n', 'e', 't', 'w', 'o', 'r', 'k', '\0',
   /* "sponsorowani.pl", true */ 's', 'p', 'o', 'n', 's', 'o', 'r', 'o', 'w', 'a', 'n', 'i', '.', 'p', 'l', '\0',
   /* "spoofhaus.com", true */ 's', 'p', 'o', 'o', 'f', 'h', 'a', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "spookbook.net", true */ 's', 'p', 'o', 'o', 'k', 'b', 'o', 'o', 'k', '.', 'n', 'e', 't', '\0',
@@ -18006,17 +17997,16 @@ static const char kSTSHostTable[] = {
   /* "stamkassa.nl", true */ 's', 't', 'a', 'm', 'k', 'a', 's', 's', 'a', '.', 'n', 'l', '\0',
   /* "stammtisch.domains", true */ 's', 't', 'a', 'm', 'm', 't', 'i', 's', 'c', 'h', '.', 'd', 'o', 'm', 'a', 'i', 'n', 's', '\0',
   /* "stamparmakarije.me", true */ 's', 't', 'a', 'm', 'p', 'a', 'r', 'm', 'a', 'k', 'a', 'r', 'i', 'j', 'e', '.', 'm', 'e', '\0',
   /* "stampederadon.com", true */ 's', 't', 'a', 'm', 'p', 'e', 'd', 'e', 'r', 'a', 'd', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "stanandjerre.org", true */ 's', 't', 'a', 'n', 'a', 'n', 'd', 'j', 'e', 'r', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "standagainstspying.org", true */ 's', 't', 'a', 'n', 'd', 'a', 'g', 'a', 'i', 'n', 's', 't', 's', 'p', 'y', 'i', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "standards.gov", true */ 's', 't', 'a', 'n', 'd', 'a', 'r', 'd', 's', '.', 'g', 'o', 'v', '\0',
   /* "standoutbooks.com", true */ 's', 't', 'a', 'n', 'd', 'o', 'u', 't', 'b', 'o', 'o', 'k', 's', '.', 'c', 'o', 'm', '\0',
-  /* "star-citizen.wiki", true */ 's', 't', 'a', 'r', '-', 'c', 'i', 't', 'i', 'z', 'e', 'n', '.', 'w', 'i', 'k', 'i', '\0',
   /* "star-killer.net", true */ 's', 't', 'a', 'r', '-', 'k', 'i', 'l', 'l', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "starcafe.me", true */ 's', 't', 'a', 'r', 'c', 'a', 'f', 'e', '.', 'm', 'e', '\0',
   /* "starcomproj.com", true */ 's', 't', 'a', 'r', 'c', 'o', 'm', 'p', 'r', 'o', 'j', '.', 'c', 'o', 'm', '\0',
   /* "stardanceacademy.net", true */ 's', 't', 'a', 'r', 'd', 'a', 'n', 'c', 'e', 'a', 'c', 'a', 'd', 'e', 'm', 'y', '.', 'n', 'e', 't', '\0',
   /* "starfm.de", true */ 's', 't', 'a', 'r', 'f', 'm', '.', 'd', 'e', '\0',
   /* "stargarder-jungs.de", true */ 's', 't', 'a', 'r', 'g', 'a', 'r', 'd', 'e', 'r', '-', 'j', 'u', 'n', 'g', 's', '.', 'd', 'e', '\0',
   /* "stargazer.de", true */ 's', 't', 'a', 'r', 'g', 'a', 'z', 'e', 'r', '.', 'd', 'e', '\0',
   /* "stari.co", true */ 's', 't', 'a', 'r', 'i', '.', 'c', 'o', '\0',
@@ -18031,17 +18021,16 @@ static const char kSTSHostTable[] = {
   /* "startlab.sk", true */ 's', 't', 'a', 'r', 't', 'l', 'a', 'b', '.', 's', 'k', '\0',
   /* "startpage.com", true */ 's', 't', 'a', 'r', 't', 'p', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "startpage.info", true */ 's', 't', 'a', 'r', 't', 'p', 'a', 'g', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "startrek.in", true */ 's', 't', 'a', 'r', 't', 'r', 'e', 'k', '.', 'i', 'n', '\0',
   /* "starttraffic.uk", true */ 's', 't', 'a', 'r', 't', 't', 'r', 'a', 'f', 'f', 'i', 'c', '.', 'u', 'k', '\0',
   /* "startupsort.com", true */ 's', 't', 'a', 'r', 't', 'u', 'p', 's', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "startupum.ru", true */ 's', 't', 'a', 'r', 't', 'u', 'p', 'u', 'm', '.', 'r', 'u', '\0',
   /* "starwatches.eu", true */ 's', 't', 'a', 'r', 'w', 'a', 't', 'c', 'h', 'e', 's', '.', 'e', 'u', '\0',
-  /* "stassi.ch", true */ 's', 't', 'a', 's', 's', 'i', '.', 'c', 'h', '\0',
   /* "stastka.ch", true */ 's', 't', 'a', 's', 't', 'k', 'a', '.', 'c', 'h', '\0',
   /* "stat.ink", true */ 's', 't', 'a', 't', '.', 'i', 'n', 'k', '\0',
   /* "state-of-body-and-mind.com", true */ 's', 't', 'a', 't', 'e', '-', 'o', 'f', '-', 'b', 'o', 'd', 'y', '-', 'a', 'n', 'd', '-', 'm', 'i', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "statgram.me", true */ 's', 't', 'a', 't', 'g', 'r', 'a', 'm', '.', 'm', 'e', '\0',
   /* "static-692b8c32.de", true */ 's', 't', 'a', 't', 'i', 'c', '-', '6', '9', '2', 'b', '8', 'c', '3', '2', '.', 'd', 'e', '\0',
   /* "static-myfxee-808795.c.cdn77.org", true */ 's', 't', 'a', 't', 'i', 'c', '-', 'm', 'y', 'f', 'x', 'e', 'e', '-', '8', '0', '8', '7', '9', '5', '.', 'c', '.', 'c', 'd', 'n', '7', '7', '.', 'o', 'r', 'g', '\0',
   /* "static-myfxoau-808795.c.cdn77.org", true */ 's', 't', 'a', 't', 'i', 'c', '-', 'm', 'y', 'f', 'x', 'o', 'a', 'u', '-', '8', '0', '8', '7', '9', '5', '.', 'c', '.', 'c', 'd', 'n', '7', '7', '.', 'o', 'r', 'g', '\0',
   /* "static-myfxouk-808795.c.cdn77.org", true */ 's', 't', 'a', 't', 'i', 'c', '-', 'm', 'y', 'f', 'x', 'o', 'u', 'k', '-', '8', '0', '8', '7', '9', '5', '.', 'c', '.', 'c', 'd', 'n', '7', '7', '.', 'o', 'r', 'g', '\0',
@@ -18061,16 +18050,17 @@ static const char kSTSHostTable[] = {
   /* "stcable.net", true */ 's', 't', 'c', 'a', 'b', 'l', 'e', '.', 'n', 'e', 't', '\0',
   /* "stcu.org", true */ 's', 't', 'c', 'u', '.', 'o', 'r', 'g', '\0',
   /* "std-home-test.com", true */ 's', 't', 'd', '-', 'h', 'o', 'm', 'e', '-', 't', 'e', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "stderr.cc", false */ 's', 't', 'd', 'e', 'r', 'r', '.', 'c', 'c', '\0',
   /* "stdrc.cc", true */ 's', 't', 'd', 'r', 'c', '.', 'c', 'c', '\0',
   /* "steakovercooked.com", true */ 's', 't', 'e', 'a', 'k', 'o', 'v', 'e', 'r', 'c', 'o', 'o', 'k', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "stealsaga.net", true */ 's', 't', 'e', 'a', 'l', 's', 'a', 'g', 'a', '.', 'n', 'e', 't', '\0',
   /* "steamdb.info", true */ 's', 't', 'e', 'a', 'm', 'd', 'b', '.', 'i', 'n', 'f', 'o', '\0',
+  /* "steckregal-super.de", false */ 's', 't', 'e', 'c', 'k', 'r', 'e', 'g', 'a', 'l', '-', 's', 'u', 'p', 'e', 'r', '.', 'd', 'e', '\0',
   /* "steef389.eu", true */ 's', 't', 'e', 'e', 'f', '3', '8', '9', '.', 'e', 'u', '\0',
   /* "steelephys.com.au", true */ 's', 't', 'e', 'e', 'l', 'e', 'p', 'h', 'y', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "steem.io", true */ 's', 't', 'e', 'e', 'm', '.', 'i', 'o', '\0',
   /* "steemit.com", true */ 's', 't', 'e', 'e', 'm', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "steenackers.be", true */ 's', 't', 'e', 'e', 'n', 'a', 'c', 'k', 'e', 'r', 's', '.', 'b', 'e', '\0',
   /* "stefan-bayer.eu", true */ 's', 't', 'e', 'f', 'a', 'n', '-', 'b', 'a', 'y', 'e', 'r', '.', 'e', 'u', '\0',
   /* "stefanbayer.de", true */ 's', 't', 'e', 'f', 'a', 'n', 'b', 'a', 'y', 'e', 'r', '.', 'd', 'e', '\0',
   /* "stefanovski.io", true */ 's', 't', 'e', 'f', 'a', 'n', 'o', 'v', 's', 'k', 'i', '.', 'i', 'o', '\0',
@@ -18183,17 +18173,16 @@ static const char kSTSHostTable[] = {
   /* "strahlende-augen.info", true */ 's', 't', 'r', 'a', 'h', 'l', 'e', 'n', 'd', 'e', '-', 'a', 'u', 'g', 'e', 'n', '.', 'i', 'n', 'f', 'o', '\0',
   /* "strangemusicinc.net", true */ 's', 't', 'r', 'a', 'n', 'g', 'e', 'm', 'u', 's', 'i', 'c', 'i', 'n', 'c', '.', 'n', 'e', 't', '\0',
   /* "strangeplace.net", true */ 's', 't', 'r', 'a', 'n', 'g', 'e', 'p', 'l', 'a', 'c', 'e', '.', 'n', 'e', 't', '\0',
   /* "strategie-zone.de", true */ 's', 't', 'r', 'a', 't', 'e', 'g', 'i', 'e', '-', 'z', 'o', 'n', 'e', '.', 'd', 'e', '\0',
   /* "strathewerd.de", true */ 's', 't', 'r', 'a', 't', 'h', 'e', 'w', 'e', 'r', 'd', '.', 'd', 'e', '\0',
   /* "straubis.org", true */ 's', 't', 'r', 'a', 'u', 'b', 'i', 's', '.', 'o', 'r', 'g', '\0',
   /* "strauser.com", true */ 's', 't', 'r', 'a', 'u', 's', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "stravers.shoes", true */ 's', 't', 'r', 'a', 'v', 'e', 'r', 's', '.', 's', 'h', 'o', 'e', 's', '\0',
-  /* "stream.pub", true */ 's', 't', 'r', 'e', 'a', 'm', '.', 'p', 'u', 'b', '\0',
   /* "streamchan.org", true */ 's', 't', 'r', 'e', 'a', 'm', 'c', 'h', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "streamdesk.ca", true */ 's', 't', 'r', 'e', 'a', 'm', 'd', 'e', 's', 'k', '.', 'c', 'a', '\0',
   /* "streamlineautogroup.com", true */ 's', 't', 'r', 'e', 'a', 'm', 'l', 'i', 'n', 'e', 'a', 'u', 't', 'o', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "streampanel.net", true */ 's', 't', 'r', 'e', 'a', 'm', 'p', 'a', 'n', 'e', 'l', '.', 'n', 'e', 't', '\0',
   /* "streamzilla.com", true */ 's', 't', 'r', 'e', 'a', 'm', 'z', 'i', 'l', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "streetdancecenter.com", true */ 's', 't', 'r', 'e', 'e', 't', 'd', 'a', 'n', 'c', 'e', 'c', 'e', 'n', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "streets.mn", true */ 's', 't', 'r', 'e', 'e', 't', 's', '.', 'm', 'n', '\0',
   /* "streetspotr.com", true */ 's', 't', 'r', 'e', 'e', 't', 's', 'p', 'o', 't', 'r', '.', 'c', 'o', 'm', '\0',
@@ -18298,33 +18287,33 @@ static const char kSTSHostTable[] = {
   /* "suksit.com", true */ 's', 'u', 'k', 's', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "sulek.eu", true */ 's', 'u', 'l', 'e', 'k', '.', 'e', 'u', '\0',
   /* "sumguy.com", true */ 's', 'u', 'm', 'g', 'u', 'y', '.', 'c', 'o', 'm', '\0',
   /* "summa.eu", false */ 's', 'u', 'm', 'm', 'a', '.', 'e', 'u', '\0',
   /* "sumthing.com", true */ 's', 'u', 'm', 't', 'h', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "sunbritetv.com", true */ 's', 'u', 'n', 'b', 'r', 'i', 't', 'e', 't', 'v', '.', 'c', 'o', 'm', '\0',
   /* "sundayfundayjapan.com", true */ 's', 'u', 'n', 'd', 'a', 'y', 'f', 'u', 'n', 'd', 'a', 'y', 'j', 'a', 'p', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "suneilpatel.com", true */ 's', 'u', 'n', 'e', 'i', 'l', 'p', 'a', 't', 'e', 'l', '.', 'c', 'o', 'm', '\0',
+  /* "sunflyer.cn", false */ 's', 'u', 'n', 'f', 'l', 'y', 'e', 'r', '.', 'c', 'n', '\0',
   /* "sunfox.cz", true */ 's', 'u', 'n', 'f', 'o', 'x', '.', 'c', 'z', '\0',
   /* "sungo.wtf", true */ 's', 'u', 'n', 'g', 'o', '.', 'w', 't', 'f', '\0',
   /* "sunjaydhama.com", true */ 's', 'u', 'n', 'j', 'a', 'y', 'd', 'h', 'a', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "sunsetwx.com", true */ 's', 'u', 'n', 's', 'e', 't', 'w', 'x', '.', 'c', 'o', 'm', '\0',
   /* "sunsmartresorts.com", true */ 's', 'u', 'n', 's', 'm', 'a', 'r', 't', 'r', 'e', 's', 'o', '