diff options
Diffstat (limited to 'data/extensions/https-everywhere-eff@eff.org/chrome/content')
19 files changed, 601 insertions, 1745 deletions
diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/about.xul b/data/extensions/https-everywhere-eff@eff.org/chrome/content/about.xul index e788261..c3467ad 100644 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/about.xul +++ b/data/extensions/https-everywhere-eff@eff.org/chrome/content/about.xul @@ -38,7 +38,7 @@ <groupbox> <caption label="&https-everywhere.about.version;" /> - <label>5.1.1</label> + <label>5.1.2</label> </groupbox> <groupbox> diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/ApplicableList.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/ApplicableList.js index 11b9c42..55179ff 100644 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/ApplicableList.js +++ b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/ApplicableList.js @@ -28,7 +28,7 @@ ApplicableList.prototype = { empty: function() { // Empty everything, used when toggles occur in order to ensure that if - // the reload fails, the resulting list is not eroneous + // the reload fails, the resulting list is not erroneous this.active = {}; this.breaking = {}; this.inactive = {}; @@ -73,7 +73,9 @@ ApplicableList.prototype = { populate_list: function() { // The base URI of the dom tends to be loaded from some /other/ // ApplicableList, so pretend we're loading it from here. - HTTPSEverywhere.instance.https_rules.rewrittenURI(this, this.uri); + HTTPSEverywhere.instance.https_rules.rewrittenURI(this, this.uri, function() { + // do nothing + }); this.log(DBUG, "populating using alist #" + this.serial); }, @@ -115,7 +117,7 @@ ApplicableList.prototype = { label.setAttribute('label', strings.getString('https-everywhere.menu.enableDisable')); label.setAttribute('disabled', 'true'); label.setAttribute('class', 'menuitem-non-iconic'); - label.setAttribute('style', 'color:#000000;'); + label.setAttribute('style', 'font-weight: bold; color: -moz-MenuBarText;'); var label2 = false; if (!any_rules) { label2 = document.createElement('menuitem'); diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/ChannelReplacement.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/ChannelReplacement.js deleted file mode 100644 index ca70939..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/ChannelReplacement.js +++ /dev/null @@ -1,389 +0,0 @@ -Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); - -function CtxCapturingListener(tracingChannel, captureObserver) {
- this.originalListener = tracingChannel.setNewListener(this);
- this.captureObserver = captureObserver;
-}
-CtxCapturingListener.prototype = {
- originalListener: null,
- originalCtx: null,
- onStartRequest: function(request, ctx) {
- this.originalCtx = ctx;
- if (this.captureObserver) {
- this.captureObserver.observeCapture(request, this);
- }
- },
- onDataAvailable: function(request, ctx, inputStream, offset, count) {},
- onStopRequest: function(request, ctx, statusCode) {},
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIStreamListener])
-};
-
-function ChannelReplacement(chan, newURI, newMethod) {
- return this._init(chan, newURI, newMethod);
-}
-
-ChannelReplacement.supported = "nsITraceableChannel" in Ci;
-
-ChannelReplacement.runWhenPending = function(channel, callback) {
- if (channel.isPending()) {
- callback();
- return false;
- } else {
- new LoadGroupWrapper(channel, callback);
- return true;
- }
-};
-
-
-ChannelReplacement.prototype = {
- listener: null,
- context: null,
- oldChannel: null,
- channel: null,
- window: null,
- suspended: false,
-
- get _unsupportedError() {
- return new Error("Can't replace channels without nsITraceableChannel!");
- },
-
- get _classifierClass() {
- delete this.__proto__._classifierClass;
- return this.__proto__._classifierClass = Cc["@mozilla.org/channelclassifier"];
- },
-
- _autoHeadersRx: /^(?:Host|Cookie|Authorization)$|Cache|^If-/,
- visitHeader: function(key, val) {
- try {
- // we skip authorization and cache-related fields which should be automatically set
- if (!this._autoHeadersRx.test(key)) this.channel.setRequestHeader(key, val, false);
- } catch (e) {
- dump(e + "\n");
- }
- },
-
- _init: function(chan, newURI, newMethod) {
- if (!(ChannelReplacement.supported && chan instanceof Ci.nsITraceableChannel))
- throw this._unsupportedError;
-
- newURI = newURI || chan.URI;
-
- var newChan = IOS.newChannelFromURI(newURI);
-
- this.oldChannel = chan;
- this.channel = newChan;
-
- // porting of http://mxr.mozilla.org/mozilla-central/source/netwerk/protocol/http/src/nsHttpChannel.cpp#2750
-
- var loadFlags = chan.loadFlags;
-
- if (chan.URI.schemeIs("https"))
- loadFlags &= ~chan.INHIBIT_PERSISTENT_CACHING;
-
-
- newChan.loadGroup = chan.loadGroup;
- newChan.notificationCallbacks = chan.notificationCallbacks;
- newChan.loadFlags = loadFlags | newChan.LOAD_REPLACE;
- - if (!(newChan instanceof Ci.nsIHttpChannel))
- return this;
-
- // copy headers
- chan.visitRequestHeaders(this);
-
- if (!newMethod || newMethod === chan.requestMethod) {
- if (newChan instanceof Ci.nsIUploadChannel && chan instanceof Ci.nsIUploadChannel && chan.uploadStream ) {
- var stream = chan.uploadStream;
- if (stream instanceof Ci.nsISeekableStream) {
- stream.seek(stream.NS_SEEK_SET, 0);
- }
-
- try {
- let ctype = chan.getRequestHeader("Content-type");
- let clen = chan.getRequestHeader("Content-length");
- if (ctype && clen) {
- newChan.setUploadStream(stream, ctype, parseInt(clen, 10));
- }
- } catch(e) {
- newChan.setUploadStream(stream, '', -1);
- }
-
- newChan.requestMethod = chan.requestMethod;
- }
- } else {
- newChan.requestMethod = newMethod;
- }
-
- if (chan.referrer) newChan.referrer = chan.referrer;
- newChan.allowPipelining = chan.allowPipelining;
- newChan.redirectionLimit = chan.redirectionLimit - 1;
- if (chan instanceof Ci.nsIHttpChannelInternal && newChan instanceof Ci.nsIHttpChannelInternal) {
- if (chan.URI == chan.documentURI) {
- newChan.documentURI = newURI;
- } else {
- newChan.documentURI = chan.documentURI;
- }
- }
-
- if (chan instanceof Ci.nsIEncodedChannel && newChan instanceof Ci.nsIEncodedChannel) {
- newChan.applyConversion = chan.applyConversion;
- }
-
- // we can't transfer resume information because we can't access mStartPos and mEntityID :(
- // http://mxr.mozilla.org/mozilla-central/source/netwerk/protocol/http/src/nsHttpChannel.cpp#2826
-
- if ("nsIApplicationCacheChannel" in Ci &&
- chan instanceof Ci.nsIApplicationCacheChannel && newChan instanceof Ci.nsIApplicationCacheChannel) {
- newChan.applicationCache = chan.applicationCache;
- newChan.inheritApplicationCache = chan.inheritApplicationCache;
- }
-
- if (chan instanceof Ci.nsIPropertyBag && newChan instanceof Ci.nsIWritablePropertyBag)
- for (var properties = chan.enumerator, p; properties.hasMoreElements();)
- if ((p = properties.getNext()) instanceof Ci.nsIProperty)
- newChan.setProperty(p.name, p.value);
-
- if (chan.loadFlags & chan.LOAD_DOCUMENT_URI) {
- this.window = IOUtil.findWindow(chan);
- if (this.window) this.window._replacedChannel = chan;
- }
-
- return this;
- },
-
- _onChannelRedirect: function() {
- var oldChan = this.oldChannel;
- var newChan = this.channel;
-
- if (this.realRedirect) {
- if (oldChan.redirectionLimit === 0) {
- oldChan.cancel(NS_ERROR_REDIRECT_LOOP);
- throw NS_ERROR_REDIRECT_LOOP;
- }
- } else newChan.redirectionLimit += 1;
-
-
-
- // nsHttpHandler::OnChannelRedirect()
-
- const CES = Ci.nsIChannelEventSink;
- const flags = CES.REDIRECT_INTERNAL;
- this._callSink(
- Cc["@mozilla.org/netwerk/global-channel-event-sink;1"].getService(CES),
- oldChan, newChan, flags);
- var sink;
-
- for (let cess = Cc['@mozilla.org/categorymanager;1'].getService(CI.nsICategoryManager)
- .enumerateCategory("net-channel-event-sinks");
- cess.hasMoreElements();
- ) {
- sink = cess.getNext();
- if (sink instanceof CES)
- this._callSink(sink, oldChan, newChan, flags);
- }
- sink = IOUtil.queryNotificationCallbacks(oldChan, CES);
- if (sink) this._callSink(sink, oldChan, newChan, flags);
-
- // ----------------------------------
-
- newChan.originalURI = oldChan.originalURI;
-
- sink = IOUtil.queryNotificationCallbacks(oldChan, Ci.nsIHttpEventSink);
- if (sink) sink.onRedirect(oldChan, newChan);
- },
-
- _callSink: function(sink, oldChan, newChan, flags) {
- try {
- if ("onChannelRedirect" in sink) sink.onChannelRedirect(oldChan, newChan, flags);
- else sink.asyncOnChannelRedirect(oldChan, newChan, flags, this._redirectCallback);
- } catch(e) {
- if (e.toString().indexOf("(NS_ERROR_DOM_BAD_URI)") !== -1 && oldChan.URI.spec !== newChan.URI.spec) {
- let oldURL = oldChan.URI.spec;
- try {
- oldChan.URI.spec = newChan.URI.spec;
- this._callSink(sink, oldChan, newChan, flags);
- } catch(e1) {
- throw e;
- } finally {
- oldChan.URI.spec = oldURL;
- }
- } else if (e.message.indexOf("(NS_ERROR_NOT_AVAILABLE)") === -1) throw e;
- }
- },
-
- _redirectCallback: ("nsIAsyncVerifyRedirectCallback" in Ci)
- ? {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIAsyncVerifyRedirectCallback]),
- onRedirectVerifyCallback: function(result) {}
- }
- : null
- ,
-
- replace: function(realRedirect, callback) {
- let self = this;
- let oldChan = this.oldChannel;
- this.realRedirect = !!realRedirect;
- if (typeof(callback) !== "function") {
- callback = this._defaultCallback;
- }
- ChannelReplacement.runWhenPending(oldChan, function() {
- if (oldChan.status) return; // channel's doom had been already defined
-
- let ccl = new CtxCapturingListener(oldChan, self);
- self.loadGroup = oldChan.loadGroup;
-
- oldChan.loadGroup = null; // prevents the wheel from stopping spinning
-
-
- if (self._redirectCallback) { // Gecko >= 2
- // this calls asyncAbort, which calls onStartRequest on our listener
- oldChan.cancel(NS_BINDING_REDIRECTED);
- self.suspend(); // believe it or not, this will defer asyncAbort() notifications until resume()
- callback(self);
- } else {
- // legacy (Gecko < 2)
- self.observeCapture = function(req, ccl) {
- self.open = function() { self._redirect(ccl); };
- callback(self);
- };
- oldChan.cancel(NS_BINDING_REDIRECTED);
- }
-
-
- });
- },
-
- observeCapture: function(req, ccl) {
- this._redirect(ccl);
- },
-
- _defaultCallback: function(replacement) {
- replacement.open();
- },
-
- open: function() {
- this.resume(); // this triggers asyncAbort and the listeners in cascade
- },
- _redirect: function(ccl) {
- let oldChan = this.oldChannel,
- newChan = this.channel,
- overlap;
-
- if (!(this.window && (overlap = this.window._replacedChannel) !== oldChan)) {
- try {
- if (ABE.consoleDump && this.window) {
- ABE.log("Opening delayed channel: " + oldChan.name + " - (current loading channel for this window " + (overlap && overlap.name) + ")");
- }
-
- oldChan.loadGroup = this.loadGroup;
-
- this._onChannelRedirect();
- newChan.asyncOpen(ccl.originalListener, ccl.originalCtx);
-
- if (this.window && this.window != IOUtil.findWindow(newChan)) {
- // late diverted load, unwanted artifact, abort
- IOUtil.abort(newChan);
- } else {
- // safe browsing hook
- if (this._classifierClass)
- this._classifierClass.createInstance(Ci.nsIChannelClassifier).start(newChan, true);
- }
- } catch (e) {
- ABE.log(e);
- }
- } else {
- if (ABE.consoleDump) {
- ABE.log("Detected double load on the same window: " + oldChan.name + " - " + (overlap && overlap.name));
- }
- }
-
- this.dispose();
- },
-
- suspend: function() {
- if (!this.suspended) {
- this.oldChannel.suspend();
- this.suspended = true;
- }
- },
- resume: function() {
- if (this.suspended) {
- this.suspended = false;
- try {
- this.oldChannel.resume();
- } catch (e) {}
- }
- },
-
- dispose: function() {
- this.resume();
- if (this.loadGroup) {
- try {
- this.loadGroup.removeRequest(this.oldChannel, null, NS_BINDING_REDIRECTED);
- } catch (e) {}
- this.loadGroup = null;
- }
-
- }
-};
-
-function LoadGroupWrapper(channel, callback) {
- this._channel = channel;
- this._inner = channel.loadGroup;
- this._callback = callback;
- channel.loadGroup = this;
-}
-LoadGroupWrapper.prototype = {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsILoadGroup]),
-
- get activeCount() {
- return this._inner ? this._inner.activeCount : 0;
- },
- set defaultLoadRequest(v) {
- return this._inner ? this._inner.defaultLoadRequest = v : v;
- },
- get defaultLoadRequest() {
- return this._inner ? this._inner.defaultLoadRequest : null;
- },
- set groupObserver(v) {
- return this._inner ? this._inner.groupObserver = v : v;
- },
- get groupObserver() {
- return this._inner ? this._inner.groupObserver : null;
- },
- set notificationCallbacks(v) {
- return this._inner ? this._inner.notificationCallbacks = v : v;
- },
- get notificationCallbacks() {
- return this._inner ? this._inner.notificationCallbacks : null;
- },
- get requests() {
- return this._inner ? this._inner.requests : this._emptyEnum;
- },
-
- addRequest: function(r, ctx) {
- this.detach();
- if (this._inner) try {
- this._inner.addRequest(r, ctx);
- } catch(e) {
- // addRequest may have not been implemented
- }
- if (r === this._channel)
- try {
- this._callback(r, ctx);
- } catch (e) {}
- },
- removeRequest: function(r, ctx, status) {
- this.detach();
- if (this._inner) this._inner.removeRequest(r, ctx, status);
- },
-
- detach: function() {
- if (this._channel.loadGroup) this._channel.loadGroup = this._inner;
- },
- _emptyEnum: {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsISimpleEnumerator]),
- getNext: function() { return null; },
- hasMoreElements: function() { return false; }
- }
-};
diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/HTTPS.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/HTTPS.js index c5834dd..3053014 100644 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/HTTPS.js +++ b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/HTTPS.js @@ -39,7 +39,53 @@ const HTTPS = { * untouched or aborted. */ replaceChannel: function(applicable_list, channel, httpNowhereEnabled) { - var blob = HTTPSRules.rewrittenURI(applicable_list, channel.URI.clone()); + var that = this; + // If the callback gets called immediately (not async), it will be called + // before the return from the function sets this variable, so we default it + // to true. + var callbackedImmediate = true; + callbackedImmediate = HTTPSRules.rewrittenURI(applicable_list, channel.URI.clone(), function(blob) { + if (callbackedImmediate) { + that.replaceChannelCallback(applicable_list, channel, httpNowhereEnabled, blob); + } else { + // If we can't redirect right away because we're waiting on some disk + // I/O to read the rules, we will have told the channel to redirect to + // itself and suspend, to insure it doesn't actually open while it's + // waiting for us to decide what to do. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=1170197. + // Now that we're in the callback, we know the rules are loaded. So we + // tell the channel to go ahead and continue with the redirect-to-self. + // That will trigger on-modify-request again, and we'll wind up here + // again, except with the rules already loaded. We don't try a + // redirectTo here because it would fail with NS_ERROR_IN_PROGRESS. + try { + channel.resume(); + } catch (e) { + that.log(WARN, 'Failed to resume ' + channel.URI.spec + ': ' + e); + return; + } + that.log(DBUG, 'Succeeded resuming ' + channel.URI.spec + ' '); + } + }); + if (!callbackedImmediate) { + try { + channel.redirectTo(channel.URI); + } catch (e) { + this.log(WARN, 'Failed to redirect to self ' + channel.URI.spec + ': ' + e); + return; + } + try { + channel.suspend(); + } catch (e) { + this.log(WARN, 'Failed to suspend ' + channel.URI.spec + ': ' + e); + return; + } + this.log(DBUG, 'Succeeded suspending ' + channel.URI.spec); + } + }, + + replaceChannelCallback: function(applicable_list, channel, httpNowhereEnabled, blob, callbackedImmediate) { + var that = this; var isSTS = securityService.isSecureURI( CI.nsISiteSecurityService.HEADER_HSTS, channel.URI, 0); if (blob === null) { diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/HTTPSRules.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/HTTPSRules.js index f100a79..0dd2736 100644 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/HTTPSRules.js +++ b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/HTTPSRules.js @@ -68,6 +68,10 @@ RuleSet.prototype = { ensureCompiled: function() { // Postpone compilation of exclusions, rules and cookies until now, to accelerate // browser load time. + // NOTE: Since rulesets are now lazy-loaded in FF, this will be called immediately + // after the ruleset is loaded, and doesn't give much startup benefit. We + // may want to switch these back so patterns are compiled immediately on + // ruleset load, for simplicity. if (this.compiled) return; var i; @@ -387,43 +391,86 @@ const HTTPSRules = { // applicable ruleset ids this.rulesetsByID = {}; this.rulesetsByName = {}; - var t1 = new Date().getTime(); + this.targetsLoaded = false; + this.targetsLoadingCallbacks = []; this.checkMixedContentHandling(); var rulefiles = RuleWriter.enumerate(RuleWriter.getCustomRuleDir()); this.scanRulefiles(rulefiles); // Initialize database connection. var dbFile = new FileUtils.File(RuleWriter.chromeToPath("chrome://https-everywhere/content/rulesets.sqlite")); - var rulesetDBConn = Services.storage.openDatabase(dbFile); - this.queryForRuleset = rulesetDBConn.createStatement( - "select contents from rulesets where id = :id"); - - // Preload the mapping of hostname target -> ruleset ID from DB. - // This is a little slow (287 ms on a Core2 Duo @ 2.2GHz with SSD), - // but is faster than loading all of the rulesets. If this becomes a - // bottleneck, change it to load in a background webworker, or load - // a smaller bloom filter instead. - var targetsQuery = rulesetDBConn.createStatement("select host, ruleset_id from targets"); - this.log(DBUG, "Loading targets..."); - while (targetsQuery.executeStep()) { - var host = targetsQuery.row.host; - var id = targetsQuery.row.ruleset_id; - if (!this.targets[host]) { - this.targets[host] = [id]; - } else { - this.targets[host].push(id); - } - } - this.log(DBUG, "Loading adding targets."); + this.rulesetDBConn = Services.storage.openDatabase(dbFile); } catch(e) { this.log(DBUG,"Rules Failed: "+e); } - var t2 = new Date().getTime(); - this.log(NOTE,"Loading targets took " + (t2 - t1) / 1000.0 + " seconds"); return; }, + loadTargets: function(callback) { + if (this.targetsLoaded) { + callback(); + return; + } + // loadTargets can be called multiple times before it resolves. We store a + // list of callbacks to call when done, and make sure we only actually do + // the query once. + this.targetsLoadingCallbacks.push(callback); + if (this.targetsLoadingCallbacks.length > 1) { + this.log(DBUG, "Skipping loadTargets, a query is already in progress."); + } + // Load the mapping of hostname target -> ruleset ID from DB. + // This is a little slow (287 ms on a Core2 Duo @ 2.2GHz with SSD), + // but is faster than loading all of the rulesets. If this becomes a + // bottleneck, change it to load in a background webworker, or load + // a smaller bloom filter instead. + var t1 = new Date().getTime(); + var query = this.rulesetDBConn.createStatement("select host, ruleset_id from targets"); + var that = this; + var count = 0; + this.log(INFO, "Querying targets"); + // TODO: Store "this is pending" and resolve all pending once the whole + // thing is loaded. + query.executeAsync({ + handleResult: function(aResultSet) { + try { + for (let row = aResultSet.getNextRow(); + row; + row = aResultSet.getNextRow()) { + var host = row.getResultByName("host"); + var id = row.getResultByName("ruleset_id"); + count ++; + if (!that.targets[host]) { + that.targets[host] = [id]; + } else { + that.targets[host].push(id); + } + } + } catch (e) { + that.log(WARN, "ERROR " + e); + } + }, + handleError: function(aError) { + that.log(WARN, "SQLite error loading targets: " + aError.message); + callback(); + }, + + handleCompletion: function(aReason) { + if (aReason != Components.interfaces.mozIStorageStatementCallback.REASON_FINISHED) { + that.log(WARN, "SQLite query canceled or aborted!"); + } else { + var t2 = new Date().getTime(); + that.log(NOTE, "Loading " + count + " targets took " + (t2 - t1) / 1000.0 + " seconds"); + that.targetsLoadingCallbacks.forEach(function(callback) { + callback(); + }); + that.targetsLoadingCallbacks = []; + that.targetsLoaded = true; + } + } + }); + }, + checkMixedContentHandling: function() { // Firefox 23+ blocks mixed content by default, so rulesets that create // mixed content situations should be disabled there @@ -472,8 +519,9 @@ const HTTPSRules = { } }, - - rewrittenURI: function(alist, input_uri) { + // return true iff callback has been called already, false if callback will be + // called asynchronously + rewrittenURI: function(alist, input_uri, callback) { // This function oversees the task of working out if a uri should be // rewritten, what it should be rewritten to, and recordkeeping of which // applicable rulesets are and aren't active. Previously this returned @@ -487,44 +535,55 @@ const HTTPSRules = { if (!alist) this.log(DBUG, "No applicable list rewriting " + input_uri.spec); this.log(DBUG, "Processing " + input_uri.spec); - var uri = this.sanitiseURI(input_uri); - // Get the list of rulesets that target this host try { - var rs = this.potentiallyApplicableRulesets(uri.host); + var host = input_uri.host } catch(e) { - this.log(NOTE, 'Could not check applicable rules for '+uri.spec + '\n'+e); - return null; - } - - // ponder each potentially applicable ruleset, working out if it applies - // and recording it as active/inactive/moot/breaking in the applicable list - for (i = 0; i < rs.length; ++i) { - if (!rs[i].active) { - if (alist && rs[i].wouldMatch(uri, alist)) - alist.inactive_rule(rs[i]); - continue; - } - blob.newuri = rs[i].transformURI(uri); - if (blob.newuri) { - if (alist) { - if (uri.spec in https_everywhere_blacklist) - alist.breaking_rule(rs[i]); - else - alist.active_rule(rs[i]); - } - if (userpass_present) blob.newuri.userPass = input_uri.userPass; - blob.applied_ruleset = rs[i]; - return blob; + // NS_ERROR_FAILURE is normal for accessing uri.host. It just means that + // host is not applicable for the URI scheme, e.g. about: URIs. + // If that happens we quietly return null. If another exception happens + // we noisily return null. + if (e.name != "NS_ERROR_FAILURE") { + this.log(WARN, 'Could not get host from ' + input_uri.spec + ': ' + e); } - if (uri.scheme == "https" && alist) { - // we didn't rewrite but the rule applies to this domain and the - // requests are going over https - if (rs[i].wouldMatch(uri, alist)) alist.moot_rule(rs[i]); - continue; - } - } - return null; + callback(null); + return true; + } + var that = this; + return this.potentiallyApplicableRulesets(host, function(rs) { + var uri = that.sanitiseURI(input_uri); + // ponder each potentially applicable ruleset, working out if it applies + // and recording it as active/inactive/moot/breaking in the applicable list + for (i = 0; i < rs.length; ++i) { + if (!rs[i].active) { + if (alist && rs[i].wouldMatch(uri, alist)) + alist.inactive_rule(rs[i]); + continue; + } + blob.newuri = rs[i].transformURI(uri); + if (blob.newuri) { + if (alist) { + if (uri.spec in https_everywhere_blacklist) { + alist.breaking_rule(rs[i]); + } else { + alist.active_rule(rs[i]); + } + } + if (userpass_present) blob.newuri.userPass = input_uri.userPass; + blob.applied_ruleset = rs[i]; + callback(blob); + return + } + if (uri.scheme == "https" && alist) { + // we didn't rewrite but the rule applies to this domain and the + // requests are going over https + if (rs[i].wouldMatch(uri, alist)) alist.moot_rule(rs[i]); + continue; + } + } + callback(null); + return; + }); }, sanitiseURI: function(input_uri) { @@ -560,7 +619,7 @@ const HTTPSRules = { } } catch(e3) { this.log(INFO, "uri.host is explosive!"); - try { this.log(INFO, "(" + uri.spec + ")"); } // happens for about: uris and soforth + try { this.log(INFO, "(" + uri.spec + ")"); } // happens for about: uris and so forth catch(e4) { this.log(WARN, "(and unprintable!!!!!!)"); } } return uri; @@ -576,44 +635,82 @@ const HTTPSRules = { }, // Load a ruleset by numeric id, e.g. 234 - // NOTE: This call runs synchronously, which can lock up the browser UI. Is - // there any way to fix that, given that we need to run blocking in the request - // flow? Perhaps we can preload all targets from the DB into memory at startup - // so we only hit the DB when we know there is something to be had. - loadRulesetById: function(ruleset_id) { - this.queryForRuleset.params.id = ruleset_id; - - try { - if (this.queryForRuleset.executeStep()) { - RuleWriter.readFromString(this.queryForRuleset.row.contents, this, ruleset_id); - } else { - this.log(WARN,"Couldn't find ruleset for id " + ruleset_id); + loadRulesetById: function(ruleset_id, callback) { + var query = this.rulesetDBConn.createStatement( + "select contents from rulesets where id = :id"); + query.params.id = ruleset_id; + var that = this; + query.executeAsync({ + handleResult: function(aResultSet) { + for (let row = aResultSet.getNextRow(); + row; + row = aResultSet.getNextRow()) { + + let value = row.getResultByName("contents"); + RuleWriter.readFromString(value, that, ruleset_id); + } + }, + handleError: function(aError) { + that.log(WARN, "SQLite error: " + aError.message); + callback(); + }, + + handleCompletion: function(aReason) { + if (aReason != Components.interfaces.mozIStorageStatementCallback.REASON_FINISHED) { + that.log(WARN, "SQLite query canceled or aborted!"); + } + callback(); } - } finally { - this.queryForRuleset.reset(); - } + }); }, // Get all rulesets matching a given target, lazy-loading from DB as necessary. - rulesetsByTarget: function(target) { - var rulesetIds = this.targets[target]; - - var output = []; - if (rulesetIds) { - this.log(INFO, "For target " + target + ", found ids " + rulesetIds.toString()); - for (var i = 0; i < rulesetIds.length; i++) { - var id = rulesetIds[i]; - if (!this.rulesetsByID[id]) { - this.loadRulesetById(id); - } - if (this.rulesetsByID[id]) { - output.push(this.rulesetsByID[id]); + // Returns true if callback was called immediately: i.e., didn't have to go async. + rulesetsByTargets: function(targets, callback) { + // If the array of target hosts is not already loaded, load it + // (asynchronously). This should only happen once. + if (!this.targetsLoaded) { + this.log(INFO, "Loading targets"); + this.loadTargets(this.rulesetsByTargets.bind(this, targets, callback)); + return false; + } else { + this.log(INFO, "Targets are loaded " + this.targets["www.eff.org"]); + } + var foundIds = []; + var neededIds = []; + var that = this; + targets.forEach(function(target) { + var rulesetIds = that.targets[target] || []; + rulesetIds.forEach(function(id) { + foundIds.push(id); + if (!that.rulesetsByID[id]) { + neededIds.push(id); } + }); + }); + + this.log(DBUG, "For targets " + targets.join(' ') + + ", found ids " + foundIds + ", need to load: " + neededIds); + + var callbackImmediate = true; + function loadOne(done) { + if (neededIds.length !== 0) { + callbackImmediate = false; + that.loadRulesetById(neededIds.pop(), loadOne.bind(null, done)); + } else { + done(); } - } else { - this.log(DBUG, "For target " + target + ", found no ids in DB"); } - return output; + + loadOne(function() { + output = foundIds.map(function(id) { + return that.rulesetsByID[id]; + }) + that.log(DBUG, "Callback from rulesetsByTargets output = " + output); + callback(output); + }); + that.log(DBUG, "Returning from rulesetsByTargets callbackImmediate = " + callbackImmediate); + return callbackImmediate; }, /** @@ -622,17 +719,15 @@ const HTTPSRules = { * This function is only defined for fully-qualified hostnames. Wildcards and * cookie-style domain attributes with a leading dot are not permitted. * @param host {string} - * @return {Array.<RuleSet>} + * @return true iff we didn't have to go async to load rules */ - potentiallyApplicableRulesets: function(host) { + potentiallyApplicableRulesets: function(host, callback) { + if (!callback) { + this.log(WARN, 'Bad problem: potentiallyApplicableRulesets called without callback.'); + return false; + } var i, tmp, t; - var results = []; - - var attempt = function(target) { - this.setInsert(results, this.rulesetsByTarget(target)); - }.bind(this); - - attempt(host); + var targetsToTry = [host]; // replace each portion of the domain with a * in turn var segmented = host.split("."); @@ -640,23 +735,26 @@ const HTTPSRules = { tmp = segmented[i]; if (tmp.length === 0) { this.log(WARN,"Malformed host passed to potentiallyApplicableRulesets: " + host); - return null; + return false; } segmented[i] = "*"; t = segmented.join("."); segmented[i] = tmp; - attempt(t); + targetsToTry.push(t); } // now eat away from the left, with *, so that for x.y.z.google.com we // check *.z.google.com and *.google.com (we did *.y.z.google.com above) for (i = 2; i <= segmented.length - 2; ++i) { t = "*." + segmented.slice(i,segmented.length).join("."); - attempt(t); - } - this.log(DBUG,"Potentially applicable rules for " + host + ":"); - for (i = 0; i < results.length; ++i) - this.log(DBUG, " " + results[i].name); - return results; + targetsToTry.push(t) + } + var that = this; + return this.rulesetsByTargets(targetsToTry, function(rulesets) { + that.log(DBUG,"Potentially applicable rules for " + host + ":"); + for (i = 0; i < rulesets.length; ++i) + that.log(DBUG, " " + rulesets[i].name); + callback(rulesets); + }); }, /** @@ -676,7 +774,7 @@ const HTTPSRules = { }, /** - * Check to see if the Cookie object c meets any of our cookierule citeria + * Check to see if the Cookie object c meets any of our cookierule criteria * for being marked as secure. * * @param applicable_list {ApplicableList} an ApplicableList for record keeping @@ -692,13 +790,33 @@ const HTTPSRules = { var i,j; // potentiallyApplicableRulesets is defined on hostnames not cookie-style // "domain" attributes, so we strip a leading dot before calling. - var rs = this.potentiallyApplicableRulesets(this.hostFromCookieDomain(c.host)); + var host = this.hostFromCookieDomain(c.host); + + // When checking for potentially applicable rulesets, we have to wait for a + // callback, because we may need to load the rulesets from disk. However, in + // practice this callback will always be run immediately, because the + // ruleset for the necessary host will have been loaded already for the HTTP + // request. + var result; + var callbackedImmediate = this.potentiallyApplicableRulesets(host, function(rs) { + result = this.shouldSecureCookieWithRulesets(applicable_list, c, known_https, rs); + }.bind(this)); + if (callbackedImmediate) { + return result; + } else { + this.log(WARN, "Shouldn't happen: rulesets were not already loaded for host " + host) + // Default to securing cookies if we aren't sure. + return true + } + }, + + shouldSecureCookieWithRulesets: function(applicable_list, c, known_https, rs) { for (i = 0; i < rs.length; ++i) { var ruleset = rs[i]; if (ruleset.active) { ruleset.ensureCompiled(); // Never secure a cookie if this page might be HTTP - if (!(known_https || this.safeToSecureCookie(c.rawHost))) { + if (!(known_https || this.safeToSecureCookie(c.rawHost, rs))) { continue; } for (j = 0; j < ruleset.cookierules.length; j++) { @@ -738,9 +856,10 @@ const HTTPSRules = { * flagged as secure. * * @param domain {string} The cookie's 'domain' attribute. + * @param rs {Array.<Ruleset>} A list of potentially applicable rulesets. * @return {boolean} True if it's safe to secure a cookie on that domain. */ - safeToSecureCookie: function(domain) { + safeToSecureCookie: function(domain, rs) { if (domain in https_blacklist_domains) { this.log(INFO, "cookies for " + domain + "blacklisted"); return false; @@ -759,9 +878,7 @@ const HTTPSRules = { } this.log(DBUG, "Testing securecookie applicability with " + test_uri); - // potentiallyApplicableRulesets is defined on hostnames not cookie-style - // "domain" attributes, so we strip a leading dot before calling. - var rs = this.potentiallyApplicableRulesets(this.hostFromCookieDomain(domain)); + for (var i = 0; i < rs.length; ++i) { if (!rs[i].active) continue; var rewrite = rs[i].apply(test_uri); diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/IOUtil.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/IOUtil.js index f3a5bee..325407c 100644 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/IOUtil.js +++ b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/IOUtil.js @@ -14,7 +14,7 @@ const IO = { res = sis.read(sis.available()); is.close(); - if (charset !== null) { // use "null" if you want uncoverted data... + if (charset !== null) { // use "null" if you want unconverted data... const unicodeConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"] .createInstance(Ci.nsIScriptableUnicodeConverter); try { @@ -235,7 +235,9 @@ const IOUtil = { return parts.join("?"); }, - _splitName: function(nv) nv.split("=")[0], + _splitName: function(nv) { + return nv.split("=")[0]; + }, _qsRx: /[&=]/, _anonRx: /(?:auth|s\w+(?:id|key)$)/, anonymizeQS: function(qs, cookie) { diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/NSS.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/NSS.js index 878b90f..9e03135 100644 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/NSS.js +++ b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/NSS.js @@ -25,9 +25,6 @@ function NSS() { } -// Alias to reduce the number of spurious warnings from amo-validator. -let tcypes = ctypes; - NSS.initialize = function(nssPath) { var sharedLib; diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/Thread.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/Thread.js deleted file mode 100644 index 8c9daf6..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/Thread.js +++ /dev/null @@ -1,100 +0,0 @@ -
-var Thread = {
-
- hostRunning: true,
- activeLoops: 0,
- _timers: [],
-
- spin: function(ctrl) {
- ctrl.startTime = ctrl.startTime || Date.now();
- ctrl.timeout = false;
- this.activeLoops++;
- this._spinInternal(ctrl);
- this.activeLoops--;
- ctrl.elapsed = Date.now() - ctrl.startTime;
- return ctrl.timeout;
- },
-
- _spinInternal: function(ctrl) {
- var t = ctrl.startTime;
- var maxTime = parseInt(ctrl.maxTime);
- if (maxTime) {
- while(ctrl.running && this.hostRunning) {
- this.yield();
- if (Date.now() - t > maxTime) {
- ctrl.timeout = true;
- ctrl.running = false;
- break;
- }
- }
- } else while(ctrl.running && this.hostRunning) this.yield();
- },
-
- yield: function() {
- this.current.processNextEvent(true);
- },
-
- yieldAll: function() {
- var t = this.current;
- while(t.hasPendingEvents()) t.processNextEvent(false);
- },
-
- get current() {
- delete this.current;
- var obj = "@mozilla.org/thread-manager;1" in Cc
- ? Cc["@mozilla.org/thread-manager;1"].getService()
- : Cc["@mozilla.org/thread;1"].createInstance(Ci.nsIThread);
- this.__defineGetter__("current", function() { return obj.currentThread; });
- return this.current;
- },
-
- get currentQueue() {
- delete this.currentQueue;
- var eqs = null;
- const CTRID = "@mozilla.org/event-queue-service;1";
- if (CTRID in Cc) {
- const IFace = Ci.nsIEventQueueService;
- eqs = Cc[CTRID].getService(IFace);
- }
- this.__defineGetter__("currentQueue", eqs
- ? function() { return eqs.getSpecialEventQueue(IFace.CURRENT_THREAD_EVENT_QUEUE); }
- : this.__lookupGetter__("current")
- );
- return this.currentQueue;
- },
-
- delay: function(callback, time, self, args) {
- var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
- this._timers.push(timer);
- timer.initWithCallback({
- notify: this._delayRunner,
- context: { callback: callback, args: args || DUMMY_ARRAY, self: self || null }
- }, time || 1, 0);
- },
-
- dispatch: function(runnable) {
- this.current.dispatch(runnable, Ci.nsIEventTarget.DISPATCH_NORMAL);
- },
-
- asap: function(callback, self, args) {
- this.current.dispatch({
- run: function() {
- callback.apply(self, args || DUMMY_ARRAY);
- }
- }, Ci.nsIEventTarget.DISPATCH_NORMAL);
- },
-
- _delayRunner: function(timer) {
- var ctx = this.context;
- try {
- ctx.callback.apply(ctx.self, ctx.args);
- } finally {
- this.context = null;
- var tt = Thread._timers;
- var pos = tt.indexOf(timer);
- if (pos > -1) tt.splice(pos, 1);
- timer.cancel();
- }
- }
-
-};
diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/X509ChainWhitelist.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/X509ChainWhitelist.js index e208d15..c99f1ec 100644 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/X509ChainWhitelist.js +++ b/data/extensions/https-everywhere-eff@eff.org/chrome/content/code/X509ChainWhitelist.js @@ -6,82 +6,80 @@ const X509ChainWhitelist = { '000AA4E99FE86D84F762DFB2DC29323D0614B95AA335A270AF204EBA2F2240AF' : true, '002F83BE1562B658A7BA747EEE36FFBA25A7D6C66E263B2901184058802D9A43' : true, - '006014E5A5190652C3475AA099483A273989F403FDB282AAD77DB72397C274A8' : true, + '007FDDA43F8F2C275CF3AE1D742A0DE86CFE1287B6FAE08F9676A8743E677255' : true, + '00AD891EBED89D8B1DE5893D32B98655479B79FAAF02D40BB933BBF726699446' : true, + '00D9377601C1210081CE743C3598E414B6BD2F47525132BE5E4CBA4650EE7C19' : true, + '00DBEAA57891E7972D7AE5F00425E309B1A08B8EE4218B24AE3FB50EA98AA864' : true, '013470D100AFBBA6D4E03735C1D924EFA6E25E66F781E9DBB6155EF713336307' : true, '0147A7B139D599058A43CDE86602DA56375CC78C2C15AC512953E3C98592D4D2' : true, '016BBB29A76DA59A20C5E9909D8D0A9CD25824D7462BD51B022D61B503569936' : true, '018BCB77EB89BD658CFB6388F57F22E40942E08FD6BF3A26DE05A2F992F6E5A2' : true, - '01B1568F4757D7222D2E2AB9FA13E7EBBEE1B5D622CB6FA3DC45D552C2086B4C' : true, - '01E42F89ABE23F6B00E5A35240F35DF38A861FADA04A0B07B6DA9FFA4B57075C' : true, '01FC275FB7BB83082EA2C546876545030D74F68355AF2B0CCB1972993B393E58' : true, '020E3FCA9BCBC32FF8E96460F1666CF889EAC42A586CCC76B46BBE85AAEAA450' : true, - '02748B445F904F6C04BB42BB810B11B77BDE047350F3181DF40C3BA79D4DC89F' : true, '028CD123ABEA12F150435947299419928DC5E80E94E9148841265B64344C3DBC' : true, '028D7A3A5ACA6156AA42F1DAE25BD6116A417EFD8E64B7E6A004B1911CABCAC0' : true, '0299AD4101A95EA006706582B2E55A35DFD2224EB9A8F8AA822D2354BAC4C640' : true, '02E266B8D011CF92708D0DD0D9D840BB8EF54B4A4670BF700AE90EE6F7E445A8' : true, - '02FB82CE0C8614F748564CB3D14C2BCDDFCF982D6187EC85E5A33B28E5340CF7' : true, + '02EE88738EA513E191ED7197DA80736330AAC72CD846B866683ECA283945113E' : true, '0333E05678F411BCFDAEFB069DDAC8BE1B3B7E45376AE4C3827771C10A53D294' : true, - '0369D2A3E853610AD59F13C199134850D43D07356DD83ED5A3C366DD6326C118' : true, - '043B68D81BB683927B40D3DAFC7F89C56F400F859DE68C0EA88AAB1FB1D75A27' : true, - '045B734DD0081F9504751492B6059B22BC201018436701D98832E3A9AF050ADE' : true, + '0383B8763C6ED572306AB1253E433A3169F1EDF7078F57D07BC3461199BEF86B' : true, + '03E2027D68B6F8792C5E99FFA9221CE628E98F0D61346B99E8A2710BD29E1DE0' : true, + '03EF0B687FD2011C8607A83F5F06979C63FC4C905244344BCD85987A0E296133' : true, '0494ED6BB7E16B78F2AEAAC053DAE6B31B52E39F0E10F5E8D95B77ECBA0A0BAC' : true, - '04BE558E6D064E92B741B3C551CFE1F38462EF3A08AC56470894D1A80278AD5E' : true, + '049E2533BBDE9D2DA0BDD71FB463A0D7D2908706999C63FDCEB4B812864E3091' : true, '0508390E2DF4B63477E49A461AE883335BC71F03A24BAA06F46EB0DBF42641EF' : true, '0529FFECC3EB688DEA32684A0348F89876F1BD45FEA23DC8E9A25D524E7B1333' : true, - '052AEDFBE22BDAB88C89277692F4510A2605F64112E3024EE508A92B2D0E71CC' : true, '054806D84102E23956A821100183D32EC4B5E8E9DE72912A1F8E6EE53FF9A839' : true, '05546BBD905F23086AF150C0B1E30F0BCA2705B6E0CBDB56092D8E62CFD09D0E' : true, - '055C88BD28194042771FF813973E086A30710231DB219FF377B79FA075E7F2AD' : true, - '0562EA3C474A2003D2CF45418458B126AC9CBF29151CCA9B6C4A5E7AB0279CAD' : true, '0589AF9C3A578488F4259AB8BBFFB2089D4C678B63D4C40B6A46CE2405346C0D' : true, - '06183C90C1DCDC3E9340477D37DC231361321A9960C1948E92D1A175A1500A08' : true, + '05C5F3A4C0C5F676DFCA32690BBCE8A7F41D7D6C2438D9AA1F94F886E3015CB9' : true, + '061B58EED7864DD73B40146FB4EB9656CBD256F6C10A07C3AC47860150B14948' : true, '06354AFD85075A5BDE2D84F8408B185CCFD354C2D75988D8FC67948AA6F60562' : true, - '06808645F29D708E4C31AC40FA00000733238E10A56D2067AA62803C9736E923' : true, + '064A8AF7F078CF04C63643298C3DA278EECA283CE11E3F34F3AB851AB89B5237' : true, '0698D7B65AF15F9A903D8D364BB7DBC1B238DACA79505B8BCE8D44AEAAB5709D' : true, '06D7D04035F29672F6921CF0BB432541AE7579AA2591ABFA9155639DBEFFD2F5' : true, - '073B1FDF3C2009FD1E4201F3490526B49F66CD11D683A70A8D5B8A9E6E4EBF64' : true, + '06EA4798A8B6B73ACB72B15DD8D71D6D6541975EA01B6CCE95B92DDE7C0312F7' : true, + '06F072A3D91411EAFF93F070B499A88B082E745A2E369567A6DDAAE227B2E195' : true, + '06FB76F31639CCDDF599ADEB5E7CE9A475468C68B305442E99A067D09A89DDD0' : true, '0742E85FE9C68350E070039897F5B790BDA92D92229D74BA9C6906D958A5C510' : true, - '077495BFAEEBF5E62CEA015EDCE70CE78AF13C813920FD9D4AB72C999F60D4DC' : true, '0780AB0F9801F169F4E7DE6F6F40F9575707D4561E4EFEBBADE71279825E0CE6' : true, '07B61AF096B72D71AF801B9C7EB9F76C42CC20A7192C78DF1336611644289BE5' : true, - '07C228652318F79E189338C3704D4E6329632563103B494C5116C53343A073FA' : true, '07CF2A06F1718D6E476B98C2B42E370A35FAFE4C1F41CF7A1DE115CDB6222FAC' : true, '07D5A15EAED5AE2CA304FFCAD864791055797B0252F925AE9177B686461E2C17' : true, - '081B43CA6CFFA952AF4C08D1335449BCA854BE5CE2C555783A0900A7867E6120' : true, '08522737DBEF2F7400033E866B61B3F9E19066EC71294DC9CE2138231921AFAB' : true, - '08DC876F1AE5A29F9E8B6CA628966C6FAFD1E474C3207A78792D4AA4D5C7EF9C' : true, + '088B1B9C85C5237A785E56C277962D8901D994350403FCA667645A0321EE1754' : true, '093314E52E8CC862C2C0C8A1C57DB5CA4BED8824A3DC7C40B8675DAE1781DC05' : true, '095FB0FC3CC67539621E292205E758437D94D3B651714049E6F99130BD5ADB6D' : true, - '0B0F28E1CE5038D9C7CD8FA557669A9E78FA0BC4BE9DBFB0BE6C96462E2CC065' : true, + '097D2DB6895EA5C53529BC38C1258E1461BE15135A9543BDDF5918EF5B5464C9' : true, + '0AD7BEAF898E621703921886F7EA20EB4B337D03CF968EC45E3B1A234B2D707E' : true, '0B1C1033250F6DED11E4C0A7E43138AD3D52F5661FEC896519BEBCBEFDC16E41' : true, '0B1D9276FF6C18184DDF7409CB6C0916D24320DEC0505096AC79C0D3FFA9C1CD' : true, '0BA75006139D075BF8CD7D94B460A850F46509B23AD572CD1A1E23134F59431F' : true, '0C2154A365A0DE7DC5BD0AE6EE05A8E06EE782AC5C41F1D3823E2F95C61E0D2C' : true, - '0C5B47050FC50334C9C440D6121486F466BB1D2444232ADCC21BC143CB1A79D8' : true, + '0C5C73A428C4601BF261EE2C36DF0D2259CBF2471E25A7B43F52F06C63059195' : true, + '0C956E47F2CF8AADB345DBC858E3AB4AA37E48B7930B84BF7AA1A0C1B19A1C8F' : true, + '0C9D6EF00C60807C04A1BF61E8C1E28DF2A628CB7CCA3E15593266682736588D' : true, + '0D6FFBC5B8DD431A6C0FA282F1ABE0898E4846B5F82723E11E484F1A61931C18' : true, + '0D98DAB031428D38C96C714C90F0E2ACC9A1767FDC6A953D590928683E8BF8C4' : true, '0DAB05854E84AABD75D30CE09246103436A4C41E931374E16CC374596C8DBB94' : true, '0DB35F56EEAE4C5580F3231EA19F4DBB0FD46DE1BF85F4CCF40103E012CDDA4B' : true, - '0E3BD8F8BC06B326EF672A487855F0E9752EF7D4A2A913A41374088B6215EA44' : true, + '0DC21B5C66F7A421406E2FF43676B6D7013C6115232AEE0CFD25D70E7D4C2625' : true, '0E49A9594364BFD4E6943DB24A2F77FA125596414D46F46AFCF070A1645AAC48' : true, - '0E7CFF7FA1B013E7EFA9407E167C8255BCB1976C2CB3144C00C39B6DFB8CE21B' : true, '0E8071ED091D6F502E2649CEF26818C0D1DE8F752632B670395E916F1BE748FE' : true, '0ECB53FDA2349AB6008BBC0E5CD361EEC5B6BD769281800FF4B1C9764A925277' : true, - '0EF8FA5AAD4BACDB842959378F18935855B027B0BADDCBDEADC9CC958C4C603B' : true, - '0F01342B195E54DA8265E4B3928A2692F6CF05F41CB85152A8122FE6E914C67B' : true, '0F0B2EAF8B0C4FBF1A47C048E13196C163ED9D8628AFA4AA264A4624B1CBCF3D' : true, '0F7391E841B068E145E12DBF6CC16DF16410083111E5F093302BA163AD4EF39F' : true, '0F820CFB486D8564C83E968049AD119FD838B2CD21C0B342A0D9B5D22C445C25' : true, '0FBBC11F4627D5AA5F7A7847E0F8DE298021E175EC69ECA90A62740A71DC9B1F' : true, '0FEC8F0781CB9193F4996B43806C6D2C539847FBBC0C28146B64FC35617BAB99' : true, - '105993C03E3F5C7E94D5A78242FCD6D0C7B7E5104295F8275752D7C6908428B8' : true, - '1089E7487C08428CAACCCDBA18B8982049B6A915FBA4598E953395B4493CC358' : true, - '10B8161FF4FC64020AD40EA57306CFC5010BF9682B18DEEF2544DD4D5DF0466E' : true, - '10E65A16F0DEE4B2499EBD5C96CD416BD2713C73A422F3BDBA81899C736437C5' : true, - '1134E778B42A8DBD01C547E9676F5294D4B16297DB8F6A512394F77B21F22052' : true, + '1030FABD87581CC2360917E4B4D94B88AF59A0E4FBFBC796F36DEA520198CD28' : true, + '103A6A4F018518AA6454CF8C8D18D7DA301A3F3C9E4C3C7FC2C3EC23E9D4443E' : true, + '1129CEBCB9F0237509FFE00D10AB5A4B9F9C29C1E22777DC621F7B7C94B4EFAC' : true, '116A5D5F3E99CFE5F72A4AFAC8699CC225C130F4B8520CDB350A1262D9585973' : true, '118FF53B6BEB35CBFE6592D45BE082BA1228D1817E46B2CC14B8855FCC5C9D59' : true, - '11D4CF9A8FEC8EB2ADC4EA3B4E7036BB041BDCF45B5563A38F409CC8F6E531C1' : true, '11F7A939F33BDF6270E16C747C0B0918902CD4501AF1843D9EA4445A2E708C58' : true, + '12160CB58782201AF8F946F3911DF89177566E67C2AD7A2CF33107C89C65DF5F' : true, + '122789E068A64AFE76989BEC2FC264EE933B6FB31445450E492E37663C083FFE' : true, '1243C75D0F805DA54E780D0D9C55247B1ABB31FC09EB65A7017695945F2A0D4A' : true, '1260F631D1FBC3640BE637469748889E23A2EA907F33F78286408AB56F450A66' : true, '12826065A034136FFC2258AA1A65F9E550A582B4017E396077917C775D42E553' : true, @@ -90,100 +88,106 @@ const X509ChainWhitelist = { '130753A8008BBCA6A0DD9037C6C7DA2D149BA8978C5E5444AE1B8C98F3C3DB60' : true, '130F0A3C4B9E9132D1676B4EBBAB2B17AFD2AF39E291C983A696D8BF0DD379BD' : true, '142BA9FFCEF5D09FF3DE4BBF8110156D52FEF1C8C707E4B916692D7DDB335A6D' : true, - '1491DCCE9B3E3F5EEA92C26671244EB7203C30F539EF5B6131459F389A0D2CD8' : true, + '14919EA335FB4C65A5314A820ED289B0C8697E0124E6FC92DFCA84FBD56B2D35' : true, '14CF0BEC6B8811A81FF5AD015C62BC85AF172E86B7504D40E9F27F0E0A6F9BDC' : true, '14D5F704481C18BA8A23559A9E49942C499BA8011926C09F4D721D92ACA5F20E' : true, - '150B877BB614A98F2186C3B0978D190C77A605146A6A569036728F544520CDC8' : true, + '15178AD6DD39B91835771E8C2193D0A96CFE82F913A2C10C03144B37DDF45CA0' : true, '154C4C43AAF5F838B7B9BE748FF671521BDF0ECF3D749EB85487F9C315239778' : true, + '15508FBCC229C8D8917DFF5951FBC2BF0840866D4BCA8B406A63EEAC21221D79' : true, '15DDBE5ABC768035989DD30C6A2BC696AA7E5AB2ADDF1F3AA8FEEA35D319B47E' : true, '15ECBA98523C315922CFC13469827BC118123E02D1ADF24C3BF8305769869181' : true, '161AAA4D4A25BB68199DBE8BDDA1E8FBC52E9C7B299EC5BFAA7B36040B3916E5' : true, + '1624DBB95D0B9786B98A4D7F0B7CDD8FF28754C5EB6673CAD7305B1B5B8F8826' : true, + '162735074DC673F1ADBAFC8A4202BC1C25549EAA743063B9DCB39B37206C642E' : true, '163227E6A01ADF06502730FF25F39D8F52B79F9AE61D5AA2876980A21985A211' : true, '1632D9CADAB9444AAC7BBF6389BA59C12CD866725786D9284BF9B205E2586A28' : true, - '1713C91C21F442044156AAD0A65E96A4C0020B2F765492A1431C6ABC3AF67D96' : true, + '16A2F0D309D7E5CC00E5DFBDE3DC5DB21532F7E5ECF93E18554698374A5B5C2A' : true, + '16C84150B3F3733B9D898ED4F57B4204E8ED00ED1147C06335670DA94CA2E2D7' : true, + '16E2B54FD0674D40BFAD5C38803F7563CECDB022DBDCE1F282E1CD5DFDA5B35A' : true, '1715E347E92C85ADCEFCA2ED0C4B56DF7D7A3FA9C834B1F2DFA7CE115DC8DBC4' : true, - '171F671393FB5CF2856957CB6925964B3C328E79EAF083DB15DE3D52233D6268' : true, - '1765ACDC57A9EEDE87E6573443C7EBC42B17E012FE153D6D7158402D5CF9365C' : true, + '1781FC3318F87AA70A6762F2A6A65D5F5DDCDE992DED94D110EB85A4745E9838' : true, + '178437C1DC169BA86687755E982E2CAEADE216ADD8A163157614A66F34325FDE' : true, + '178481982D21A3F3AA8DBA7EA0F58124E69BACAA81B2EE4D33FF5EBBFCD8D87B' : true, + '18072A06AA04215C18A6DDEF2B57BBFC054A4B3A50CBC2648515BB715B582F23' : true, '1882C2D8D817DD1078933D244E379CFC5BA8EAAE302BCF9FA22636B08FAC86CE' : true, - '18C1218D9ED6A609650AADB754644377914C34E7C35F305D12861D7C28BDBB80' : true, - '18D46E40DC2A1F815A02742F6AAB8CCCB80BABB108B349D2E875762F7D80B2CC' : true, + '19230A5E183CB5DD90409C54F01075BB43D5608CE9C322EA3CA3724144FE03B6' : true, '197B67187392F9D4653EC70C8BB277DD7DA843E62BA1A47B0BD95B89CB2C1735' : true, '1985D79429E03A4B25EF4195F04D0D6E770B36E8AB4369232CF3A1C1E40886D3' : true, '198719FE25A84786A0C2BD4053E93940AF864498D6071994E09A5335B675A73D' : true, - '19EA658B0817FBEDC5742659375F2BE78A5C76532A516F4687C6033562FAE9D5' : true, '1A30713C34D901235DF30605AFB82AF55EE4D3940B86E60B50692145013AFBB5' : true, - '1A483DB77B1FD7D997B7044556C59DD6893641CC7F92178D5346394C2E522ACC' : true, '1A86C1C38DC645A40F8DF9EDC584DC4175CC30F133737BEE3D19530929708509' : true, '1AA2692979DFDFEFD4854EC9EAB4CC323BE159529C3E85799E2C3C51350FB9C2' : true, + '1AAC19B1D8BBA8A33D43E739B1112E89A5E041BCA24ABCE4B13E0B1CFDEF6DFD' : true, '1AC37940540C25A5A2E2CC1DFF939F3FAE61C194894FD82F5861AC98E1D1ACE6' : true, + '1B4CC90A088C12699F4EFD7103B930FC762CF0BB1CDBE2D652AFC8CA8924C3E6' : true, '1B53976D26A5F691CEFCF098279AAEADDE2651B698FC3F7088F5C2A5B9CB2C5A' : true, '1BCC11E5459BEF3D48BCCFB10F57B0D640EC74C4BFAA3F0AA221B777170A5B6D' : true, '1BDD0D8B130AB4FE89DB814276912F04405F2D202CE9DA8B89C4420740517437' : true, + '1CCFC1F41255B860F2231D11672FFC1AE32D9CEAA341139C2B472A0EA9CB426E' : true, + '1CE75CF38E7A5BB9C7C18202C97BFD74E79B3073B1FB6B2BBDB33E78BD22E6B5' : true, '1D16AA433A5042924AE1BB07FC1B53E8549BB93D0F3E40723DE9CF95720D593A' : true, '1D2A6A876B8C8A835206E337529E6C222E272D4AB79E2224E23A5B6414039D50' : true, '1D9D0031DF904A27E15FB3AF4E004B0A7350788FFEE1C7FC17F0E6118C678AEC' : true, '1DA6DEBFCC0A4BADEB9672E523C95F42B2D16B168759F75FD03EFBD2CD482032' : true, - '1DB7BCE9E799B17DD372C52C9BAA4B213F041B697880932F8AA93D8B609DBBEE' : true, '1E07BA293C78E14CDFC629A797E8046A33F21981334BF6BFF9B4DD2D3C148CF4' : true, - '1E51AC35C0CF103BB39F51DBC7096C53D1F3A255DC15A473B5882CC03C266198' : true, - '1E5D810BCB8DA3AF393761C59CC88D22669ECB7D4F926760BE1EC6CD83E60765' : true, '1EE116E4B79A340456A72C49C1EDDD86786C97258ABEB9966108A9E01AB3836B' : true, '1F4C963A9BA39CE44E46F135EFEAD5B30D6A0A3A43545E18CBE59DE452A6468B' : true, - '200F113FB8BE9CD93DCF38AF69F714D686AE4D227572F482F774574A5CCFA6DB' : true, + '1F50A8F65E8256363E2710E05BBADE0FD84882DF8D7C5B12A92FC51B4643E4DC' : true, + '20226C095C430BD6AE483B9806E0C32296B0819273076F35F65B6A52FDFEE19B' : true, '2088FE71BC64663BEA0FB04CF93E3053228D41914681A3F17DA61CA996D453AF' : true, - '20BFFF5C6EF0AB849F78A1259C766EFF0FE4652DF02731E4F8408B1E27897932' : true, '20C2806DEA7B729E29F7B7BB8B2653B8D71805605AD46394473D1B1F81103664' : true, '20C6290C0D7F1DC37BE540410CE80976FDC523C201D3BAF204454EF851F721E9' : true, '20E0911E2A528C3DC143646F9369D844E82CDA53C48549125DD690ED1047D8FF' : true, - '20F5CF34D9A134A8920507B12EB84CB24C2F09152FE9B78FDADF57D892BE79E1' : true, '2128E4E9D372E50A94E43591AAA7C8B6BCDD8BF303C0B22F923B1DCD596E79B6' : true, '2156D89DFDE0B0676EBDE6CC82DF46DA81467DF96F9B8DC4A8B62F71DDA5DF95' : true, '215D8B74267F138F2936F74E6B2029CD8991DD6AAA1CC001ADF88B0202F637F9' : true, '21B2E2C095E47F4762069BA39AAD86802201AC4ED5B6DDBC20D1C7863AE511ED' : true, - '21C612A4E2CD066893391249E3C4DF22613E9DA5FF37690E3F806AA708B0401F' : true, '21CA97793B165187383669364CEFC96F19BAF3F8987F7260CC46F3852721BA5C' : true, - '21D70F62B14A3B2175742DB9F3C49999B67C15D0FF8ACA95B0C6A5393E043FA1' : true, '223264A2EEB01CD24524FB9273B38688A0AA8E3A2E7D63ECB76012B060039760' : true, '2234133DD7FCAE5D199EB31E1ED8A798554B29A355A895066FA6AE445386D9ED' : true, '225C19F21F4CC5241C15ACC6007060605DDF10817681F676CB8BD1B72014D52E' : true, + '225E3BE43AB71213287128F76D5DE651719EF5C79F946D5A8CB04C44FEA86449' : true, '23980A7B935B10CA69315CDA05E61B4ABAE7876724C0E0C3CC7BE9748E41ACCC' : true, '23B4591985CFCEFE811945510306C145B21FCE6B79686DC5D245DA69DD6D4128' : true, - '240968FE922EFB9937AF8923AA4F0478D7F679937B9FA9BC1A2B1DF18994B9F8' : true, + '23E080919FCBCDBCA08FBA3968559D1D3A5E785802976E27126A25BB7D9958B6' : true, + '23E4D77EC58ED1F674A96FD173C4AFAE53275B67EBDDAEF182855A3AC14FA8B5' : true, + '23F00AC8958BF1466784068A5CC7E2179988F1E73446955136DCBBF756CC2171' : true, '244EE1B87977A42E7CA64725F7DD82F337A432744853EFA58C9F386DD4E0283D' : true, - '2518D06777FE96E9D7D1B0D531149A5862177805443AC9D271BBCFEC660ACFC2' : true, + '2486367AC0F68DAA6E2BAB0B01CC6B3EEA3496023B3618DA73DC303B520AED8B' : true, + '24DFBC07031235121BEBA97AB5A061AAFCD8AAEB2145820A78EB0980E5111E02' : true, '257335B1AD2B1D562552738ECA1C534A6331FD83B95C91A1EB3B6C2A44650BA9' : true, - '261DD192486C36B9BF5DC0C4140F670FDD2BC62EA80C64123D827B5F32E0190B' : true, '2635178113FBBCC75EABC09C497D411C994AD0170CF9DF999A4FF5C16872CDBB' : true, '2677470F2FBD067904B7014B88988BB94F72403C014240B9843AE5A5FA21661D' : true, + '268343ADC21A53E71BD790E19507760E1F7F09B7C51E088E39DD0079C65AAAF7' : true, '26A15E073F71406D8AFF4A4A623F956FA8E3ED70F0C04CB4B28031EA103DB975' : true, + '26CFAA69F0B2C35461B8F80F2A0537AE95C677F900E1B13CA977D79C06820254' : true, '26D106DF3FE6E9C99924142C9DA27551E012C72C71FDE6EDD3CF4B5C87D59A26' : true, '2741D5D511257BAB37E2DD48559D3FE3998CB3A5BA4FC1EA9C8656D5694D7BFD' : true, '274C93C8441ED469C7B7E01B5A4DB6D9923C3947C87CA4B71D09F34D13F37D47' : true, '27560906A3548AB767BA0992FD2F93575AD11AB83AED3354B6267C3F3228C858' : true, - '27893DE92514608F647A44E85314B90F983BD7E6BCD6CE9BE428FA52EEE34DD9' : true, + '278480669CEE2AB798934F06B963B68D25C0A276CA3EC4E523D2299CE01C4A4F' : true, '27B5CA8FBD760D881A9769019B0EC43CDADA9AAC3900861E1E14EE9348736FB9' : true, '27E83ECCF1CAB639F44A2B74BF9A3D463B18BE6D600C1186C336421DF0A8B752' : true, - '28445F7C648AB6025EB469E9C5FD10C6C8D0D21B6A20F078854EFF406C55D3F7' : true, '2855C813E2F7369732C35656DD791928668591AC6AB3F9C73061B80AA7713920' : true, - '286C62823B119606F33D5761CF39C86D4DFBC1531AC399969455CA227344D5C7' : true, '28B49BD8083286E1E01C3B94D6358697FE6827CCE71D7C1D0892941B49D83416' : true, '28C725A83ABDD4F961356B2B5583C1F165094C5BC820CF15A4FE18086272107E' : true, - '28F5AFFD30157F1A5DE7CB914129A6BCA4BD8EBC41A61841E1033C512F78E68B' : true, '290DE5FFD5BBBE1A557D3DABD01F3CF8FA5FDCFED4A919F4B73CF80B6CA2E4DF' : true, '296C5D3A18B056644774C03385700A24690EB9CD1114CD9E643E4813B69363ED' : true, '29E0C5434734C0FC43246F066EFA19F533AD59E3A713F97455F8C338F1C3638C' : true, '2A1E01990593F5DE1C300ED5ACD94B694DECF9DE34BF2836A764910F82BE664B' : true, + '2A66B5579421025EC719858E2D80DDBBE02243073DE27DFC7AECC676B0899589' : true, '2AC8168217387601B753D08652B1FE2CD14E8A7C9A7DE7DF74A8300C976FBED2' : true, - '2AE917E3AB4B867883088BCFFED53EBEF9F87988C77AE47FE325547B181931A1' : true, + '2ADD4406064A5EBBD98A9D53051A0FB086A5D032655C12F503EA73C8179C783D' : true, + '2B059B135DC85869AFA0F2BB76122D71B97DF5EF2C87669085646D98CF08213B' : true, '2B1B6843B33770E84785D0FACA5AA6EAB6C480AFA07E95F7A282534BEB69B065' : true, '2BE6A67777765CE8EB868416D68CA6AEA8C57D31523F4A683957DF560C152066' : true, - '2C01A7027A6FCCB3EF0B70F134229605465295EE1249F5A582D04CD82689BFC9' : true, - '2C43EC0374BC603A1B191B88ADBCD5C1A0409120427995C2684A1590C7AB1432' : true, '2CAB9683916ADE98D778D3394221D8D07E07353E546771D507232A26FA577902' : true, - '2CB02C933CD41CDB146CA0256A99AE53D9320BAFBDDE82EB24891AF68BC6E19B' : true, + '2CB5C98C4A0D8A9EE15CC49CB83490CE552677BF353A0FE7AAF1482A8BF8C012' : true, '2CD5E37B2C388FECDF839EE16998A0F0850B5A6BB39AA5A507AE676622001CB0' : true, '2CDCECA60D7F0E4700411340E6CBFE1B3C8FAFA9081E219462D25A14B61F9AB5' : true, '2CF8647F049667F93FC50EBEED00FE30965114437763C339393FA19E306E9CD5' : true, + '2D375C90CC502EA17D4FCBE8EF35BF7E07A84B6B94EC7AC78613C623DD765E74' : true, + '2DAE8835F42B7AE9A44C8CC72F12D750EDD8C5AA678D98CEAAE334BC602F0C58' : true, '2DBAF94C053FCCFA1EC09CBB22F54DAFF2DB4ABE1B3C61CFF1BEBC31260F4821' : true, '2DE3B602EC7847028D2EA59A8E241EDE63CEFAE7456802CAFFFAA8433CE9D885' : true, '2DEC053F97460AAAFB67EAB8C769B34049E9D44286F199A8D776D2FBC4A8A41C' : true, @@ -192,62 +196,67 @@ const X509ChainWhitelist = { '2E9AA94F913F869B027272668BCA46D5076503EB9550737482C337950749E946' : true, '2F3A46F3C2FC1EBB5FB46B3135B7B4ED88CB515C2DB9A508716102340AC3583B' : true, '2F56C46CCFDB3A3F0192313C4801F02FFB1738F328CCF0F33F44C0731D340DD5' : true, + '2FABB733337C02FC7D79E61202EC0FF7115DCEE66134F5F8823EE61CB7000005' : true, '2FB44A33A5795F520D20CB4ABC4AE4E239FC193CC2E3D3A85056685ABDA9E0A5' : true, + '2FC3524D85A62187238D399692A116C52E4640DD29204B12F991441B7F01E4E6' : true, '2FEC6D75CCD95ADD4DB327257B4E73A880CC462E1760267970030576C46E0077' : true, - '300B5DFEFE98F5280E47725FE63D7A0967CA022E4CF3531023A3969867677C6E' : true, - '30354519FFD4794257A7EBEDB0D47DEC9A547B4E7213199000F41EB65C233EF7' : true, + '30547BCD70F47CABBDE76FDF5538C39D1894B49CC72B0A8BD07250A65E2437F9' : true, '305B4CDDF744AA543DA713E7E60C19ED5537D49ED2252330B46B7E664C4E588C' : true, - '305D58D32D2FBAA00A386E3BCCE2202522B78C6B10E3D83C6A7402706ADEB4F6' : true, '30664111831B947406CEAFC2E660230B307F401DD060852E0E5281C95D9F526E' : true, + '307483FC4C0D7608C2B6FC2DD068EDB1D686085586C4CA4284791294FC664D6F' : true, '3074E85BD8520085B6E6AE099964DEF737BF95AF53A0A8F3C5F4B4D714CA2824' : true, '308F0B0CF08358D501CB807667A31FEE7FDBF7539E1AE74945DD9245AB9F2CF6' : true, - '309DBF5FE6C52E6C7143E63BA07B9FE59D4ED38944409ECBECBDD74ACDE4E78E' : true, '30E358967DCBDB42F759C5380FE945EF7142DD37D820E199AEA23DBA51EF541F' : true, + '311646C51E3AA0B2E8022B6B1D95E83814131B16921B3B38DA1ACA9518AD4602' : true, '311F6B428C4994F2677A56588DA04B704926D737669A76B1B3C8504EECCE4A61' : true, '317B7685779DAFF1AD898FA790781D54D3EDC11621D1EAA3F4A9BA3262462557' : true, + '322EC261687A3829C2C0F1FF70B3E6956F5EC01497F58A422A099521BC236D24' : true, + '323C8E2033ADE1E8793BFDB767213691270543CF88FD6356194E5A8E87A755E6' : true, '3264E084FB98F560090992151EFBCB41AA84EAE0C3D8378127A974DF81473E9E' : true, '326F94C0B20B06F11A54904E31BCAB0C1A4DEC790BA2D1947E0E11F9B7210F58' : true, - '32707DD6FF2DAE577C4097176D936DE4E46E5CF428B0831D12574128BBFF6309' : true, '32D398E73D053561EC78257EB01F0945C2A38D9F80674F6F2B4B10BA35A2B4E4' : true, '32ED76AE2E09C58605B9C2BF6A27080DB8C7EEB70889BCCCEA72104C7F33F95D' : true, '33512B5F197ED2B530575C71046268C4E2F5724B645B8DF1C689EC535C0FC791' : true, '3361788E20F935BE971D4A9B9F49BCF9951C7B30E8E1B00E18130777401E634D' : true, '3379517964657D6F875971C1ED6218D9F890BEFC7390CA654C79A666D1989A18' : true, + '338CC51C8910ACF7DC6CBC3AB6F2E288D38A7656CD78BF22C57745EE3146BDF0' : true, + '3394F2FF8A20D115C929711B75D89260AB3798B93A559CC8BFFBB6A2F0463D12' : true, '33AF2CA60F79D526019EDEA838ADAD51FE541F589F09B0C69A0AA288363D3C72' : true, '33E0C503F4B4CE3AB1851ABE4630DDCCA720DBE3634CF7A5203ACEAC15031F12' : true, - '34535CB0A54193C144158D23C5A7F6F0F448FDD8EB9C21542A1203BB66BB8144' : true, '34B1CD29AECA7639010C4082C4609B8EC6EFC5DF272CC90D2650D01ADEEA8A53' : true, - '350123506BA002EA62350E82CFEC1DA7BF24B405C4160EF1BF4C445F7DC31757' : true, '3551069D5774095145A9731885485CE10FBF3FB46144F33A4E48C03CF2E475E0' : true, - '359BA4063DD43F04725A67F7E425EC48A593838AC97328374F83A31FFBB1EBF7' : true, + '3572DCF086FCEFED230B4D1B47E73DF410A5C775BA3BC9DC2681204F2E980BC4' : true, '36267B2A60E0B5997DEEE17CDBE6AC7F7D54D279C6AB4F06CD469919F442E6AE' : true, '366B123FA1EA2FF7FDBCA0422E504C8E0AB62334AC8941D307060F5ACDFB58AA' : true, '36E58C6DDB5038020FC61F17D2728311DEA600AD9FBFBEBAE2EFBB7B5071D884' : true, - '3757DF53FF77E5BF111290CE7F03B821455E2D1D7B70033F649D7B60ED8D602B' : true, - '375A5FEFE06518B0BFD2CE02034E185A44118CA92BEC6FE2D5809762C89E8C67' : true, '376690DCA49A37377D699141D59A549953B2A0B730729BC6FF8BFDA67433F763' : true, '37DFE2D5440429C8D48258C7E68500C526C81FA4606E45B6611E68C6AF2917B1' : true, + '37F9EA077605A59865D6CE500A20AAFB318666DD42AE9B17FD10DF4C4DF4D157' : true, '381FB3EE49812423C2F3CA943350617377D0E36E0D7FAE21159F648DA79FD32F' : true, '383BD359B34DEAADBEF73CF41B93362BB3C59688EFCE1E8403C50C5783F1C50E' : true, + '388FDEE7D1F4001D828D2092BBEACF16E5D50375BC16FBF1BA058917BFA03C1F' : true, + '389F1D4E628ED38863C27EB889725AE154D942FE62675E6435256BB4A4EA4D3B' : true, '38BDD8D544DD1094861968FB021D7E27BC2A9D0031AA914F3398C377A4B5F9EB' : true, '38C737C9B8240CCA0A28FD58D0C0C697B8D1DDDCF895D3F3256D1DAC8C08F513' : true, '38D12483160C6E3AC330EDC1DE173382B4C2AD79A298155181CCBC9A10CF6495' : true, - '3917E4EF55DFBA1A48DF46B693E2E72D708B7B6146C8686C5B3F94FF8B3704FC' : true, '392944F5A1C82284C698C6BB512CB5ABA48445376D54BDDF0A53C66B832D1BB2' : true, - '3958BB2CE60148D4CDAE6266E4E04A6356E00B693621A4E9E05FC78C9709EF33' : true, + '3955C196410B13A2BE4CE66E7CA1238F139DB5F00E2DF2997CD83903BA064B4F' : true, '39863EF0FA91E0729FB834D4F99A376FE60A015301FBDC91EF818346489EA0E3' : true, '39BF13F759A9161866C6DC6898A5E6D71FDDAEB9EC5925FFED274FA8E5FE34D4' : true, '3A260A20CB6DC9BCEE25A21284C2304A9744F494B37359F5F0AFB46A1D0DABA6' : true, '3A2AC86801E185B3B8A189C42AF1574721D452DA425CEDEC6FA0CCD44894BBF2' : true, + '3A694CA4161AD11D5C049313B226513207F5FE4C8966F6886F7B49298494C835' : true, + '3AA33F69018FDFEE33875D0690C26D0CBDBED363252891E02592E0F2E2E1EC93' : true, '3ACDE8B9E6B1100535007AC7316F4587DEA84EE0DF1B344DECEFFA952AEEDF96' : true, '3B00662EE3F01FFE2C40842F0F3B76C039ABB785962E371767E89E2AFA311A74' : true, + '3B1CE26F0C0E4393AEAD1BEFD39546A60E52ED5E52727AFEA827E27CA20453F6' : true, '3B209B5718F54F113C557AB8D670B1501B05A16B92E6E16BC97D026087B90C3E' : true, '3B98E076AAEB1E46BA5DAFF4914C9E279EFDB41A348AD849756FC33CB6A4881D' : true, - '3BB4AB8E09B6EFC71B2B292A489372337E48085BCC4C08431D090D63C8920C78' : true, '3BD39467620E6ABD6EDEECDB96477E54E67F1F63377B977E1C9E2371F0911922' : true, - '3C49B9DC9307C6B33E0DBE135836504ACB9F6204B7172A412C28E797E56CA02A' : true, '3C96E89F8B86936DC4FFF044FF1AE0F5C26BBB357356C47EB977C5E5620EE434' : true, '3C9AD3DFF4DB327C01C03D00389A76E5E699D4C4707E23221DA6C61F949AD532' : true, + '3C9E6298F6FC43F504BBBDD12ECC94B4BF47947775FB629D1E1683D8D5AA6A8A' : true, + '3CB171EFB062C3F0AC1CBF88CCF28B562B382A5EE096BB48394B16AEE1623F82' : true, '3D1C44AA234496D76A6BAC3434418253903B3C5019FF91F78348AC7C14E39CB6' : true, '3D666AC8FDB8483D6006C9E22E5E9539E27B322D5BCD0AF264DC8878F9476DB0' : true, '3D76435F7EA7583AD6F474333B7F8AC6368ACB53FAF4AFF9E8644765025ED427' : true, @@ -256,34 +265,31 @@ const X509ChainWhitelist = { '3E09F448ED5A72584FA305F82A25706D2AE756083530B4E18665DA2AE46C1410' : true, '3E0C00CF982CC013733E0AEA478B7329E28EE2A7627E7BE5A53630744F024765' : true, '3E5558CB92AEDC7E01DB0FBCD0825CC0F51AA7B683ABFD01D1E5E04C8A4D716B' : true, - '3E5CFCFEB58445BB4A2C7D31BECCD7D28302E69396E3BA6F7DD8FE5AA11DFFD2' : true, - '3EE396E9C7E97016AFACE8285C152EC6781728AFFD747291AAA596D573C6ED5E' : true, '3EFF635571ED85551721F01985D1B2C62613C2B7DE25C8DAF17A8767ECFCC39F' : true, '3F1F9323436BD390A2355115CC333592B4B5AE3F3BA2755D342CD863371EAB1E' : true, - '3F933B11C350C08B98993CBD045F11249CB355ADAA8FC405B9B3AAB0CBC72F7C' : true, - '3FA41F7E559B84FA6918FAD6709B5026B05A1C1AC589049A4D5F05F3A6B7D65B' : true, - '3FC8022D0C28EBFD45DC1D07E14F9E83F0CAD2E7ECEDBFDB991E01EBF2400F54' : true, + '3F56CDF75403392B96E7DA06DEB55C70E8D9166ED6FF6B84D7EC4C176157E6B0' : true, '3FC92874F07DB0DEE11CCB2CA7BDF187641DC78ECE4C76E71B2253FBBC17E3FE' : true, - '3FCBCC65096D7D731244167CCEAA21757E56D6EFC05A632AB3E062643E5B380F' : true, '3FE67F5B06535FC13DE42FBF82AB1238C7C899491A460D62CD2FC08DC87DCB73' : true, - '4007AA6804EBD54CF48E514FC8BE08DE5BBBE5E6536D678DAC71DE0C05D05B07' : true, - '40812953C19613BA9042911FFFEAEE1C00A952E5D97D358B6603AB7DB69C867C' : true, - '41717287E2E15F9E79F144B822458F9DBD930C194668167C06B87128E9C21042' : true, + '403F573E7CA3226C59F2AE1CE93EB0EA27FBC8E8A3EA711214FA21DFA6FF0262' : true, '41748175B1E9E26507156E326B06719603CCC2E54D9D1FAE0F6881012101F692' : true, '4181BB2178C564FEA4F0F5C87337921A1DB4C1CB1264B1E2168FFAF334C7DA55' : true, - '41A4B72E197905E02DA1199B4B9D2B20CA9B1502151A14FE19D8470FCDF60E0C' : true, '41CD7602C418FD0831F1F207DD50A19A0A03679113F8508F43DE863AFD32FF45' : true, '420E1CF047C7A0FEA28411C545C2E0AAC2AB31DE5BBD13F63022C0193E03DF9D' : true, '422E906DC5CFDA0E2B9711F05E3A36299B9298E7D23392C3ECB11C4173F9DCEF' : true, + '423D0D4DD3D4B507C4115C46321A9B0BE3B9D7224DF626D2027A30FE682099DE' : true, + '4245AEAD44ABC8177230DB36491E58FE885773DB0D043E24412A8BF6262D506A' : true, '42A2B7BAFC9E81A94112C062E15EC8017861988A458D8C52A686702633559BEF' : true, - '42D891E625A2FE563C10EC705A036928A9EED088915D480F5DDEDBC4BB35A557' : true, + '42F0C6BD144E105B3D14A68E267DDFCAAF76C95CFA265B187480EAB83FAB9215' : true, '43555C20820B179886354E63251A21247292B3B7BA46D8BEE860A0313258136A' : true, + '436A3291C05BB22CBED875AF7642839CC42E7C0BD534AA6698AF162F790F90BA' : true, + '437B07B7934374CFEB2F61FB1B9A764548A53C9255F053C59E236CDC6B89B839' : true, '440D00F6A763CEAF241756BFC150BABBB724D3AD48D6739ADEBC84004E24FB7A' : true, - '448771ECDB6FF9B0B1A817E6C23048CAC06987EE2A6FCB6B84A6F0A75D7DAA6E' : true, '44C748D62020862C698F3A1BE86A0261BEEF4337B6E28B3597F7FA0E4A01E49A' : true, '450608B6DCC297A7FC00DACC4455E165091B8A4B56873B61C4ACD495A32AA2B7' : true, '452F8C17E67135B1FF58F58BC411FA165E80838C8705B1F6BAF1C90F287BBDC9' : true, - '45C9985056B6629C3B4566E54648AE5DC504ACDA5569CE68023C39D9E554A217' : true, + '4582537553F4CE6DAFA6C46939EF567629506C16E76A9F058E2DB3B2435B272D' : true, + '459F25329680CC7589904EFE8F94F17880AA9DF2BA9408645BC9370DAA937471' : true, + '45A2CDAA5DFAFF670425706B6543FBE161BAB6843A156A1D54F340BD8CB87970' : true, '45CEF64AA866F2A2A72E13722374190F8EEDFE984F022C3B23B492A073741EBD' : true, '45D1C3C1E96982C752313C9059D4D6291BC0652ED7B266E25F67738E4D74915E' : true, '45EFC525BACC3D6E5AF98E1BFA4A60582231A423EE2E52D5760C184E66241DA5' : true, @@ -291,237 +297,237 @@ const X509ChainWhitelist = { '460D4CA817FB242D2263900689B3CBA7261A390B018391C7E1716991BE8ECAA0' : true, '46236B9468DB40FAF467AFB0C35B517E514251530785695F54440E6730AAE44A' : true, '464CC49DD9D781670D5B24D203D45F2CD011F63C8775862C2D7FAF4B23C64EEC' : true, - '46601DC361A7306BA942625822C757F0702F63A009A5B0FA96CDB92CFDD07FB9' : true, - '46CF8D35D0A439E7E4BF019F73EBC9636C9C3DCCDBBB4B707A21BC4B36F3EB22' : true, - '46E74AF8240C97D2E91E118761CA4F74371BF7D2266601BAF6084BB1924B62D6' : true, + '46565A05B815225FB600CF1CF1EE4BDBA5A7D39A7ECF45210FEF3C1FCC2B8B1A' : true, + '478E954CA5A715BC4E78DC2730A44ADFBB20D225C3AE4562882E0BFA3B13E374' : true, + '47C5156F5664D1535C58F11AEBE349CBAEF19728907EBBD794D95E275E5201BD' : true, + '47EC7A6E4CCC0CA9BC386A23F5E31BD14FC0501A02CA4B5867663339257D6EB8' : true, '47F4235DE4F1BBD02682F65A8B465D04721124582B6DEAFDAC164A699F56F419' : true, '4800E67D74EEC480EF1C5E3B2CF779C940C3177A5713BD1E1B8CB445DCA65345' : true, '48544D794B99D6942B8C3B2CF051782C2F6CE051860BECDE2736C2CD6A429893' : true, '48DF42F374FDCD58EB650256F421F6C1A73F663DCB8DE0972DF9421205509F8C' : true, '48E8ED415FD8EFB4407D0C67F3A4EBF15286569D29D566DEFA8B7AD8F135A5CD' : true, '49558145AB82E7F795C2E45402260F1AD1ED43D4DF145CF2577BA1615CD00843' : true, - '4A12F9678B1A5B4677054BDA1CB6B41AD8A4F556A184E7E4C33669EDD31EA50D' : true, '4A25089DCED84BE3DB1816DA1A2619E2D39D037A7561AB7859949D1401BB6C39' : true, - '4A69353F89397B7FBF7B34B298BBA87342EE33C9F5B75660195F8B308FC892E9' : true, '4A80A015BEC13BF13BF90A093212BC7E939DF1F5F535730273342AE942769A2A' : true, '4A978057E01B2F443BFC218B48E7D00D2542DBA58ABD2609ECE7E152A8F86292' : true, '4AF86DB451BCBBB3BD8BB3D5982DBF4451CD96394540DE9FE6210E69F7C2F8D3' : true, '4B14ADF4E6015B7F5E4EBBEAE635E5FCA547B1885B9386DFD76A25B8D2A2A63C' : true, '4B29F275C3803C8B4E50951895FE2A4C94442F4A7D14922D54EADBCAAABF4056' : true, '4B50DC7F1BFC4867D02B551EBF66F63645DD5BC27681BA715154809449F381E4' : true, - '4BA4EDD1EF23CC54D0287D277BD59A3EA14C6E7B37C508155E0EF9A01D048318' : true, - '4C31265DEE511FAEF9E6B7543D920AB1884D164D630380446406C4C4EFCFC6AD' : true, + '4C30D24EA7A5914CCCA63E3EA35BC8FB1235F5DCF380DD8A62A01EF15009668B' : true, '4C71A0F5907EDCF7950980BCC1B7B6E00141C1FDD4A50D445BB43E1E054B59C5' : true, '4D112C44F7DBE6E0A55667E639E192515C54B00CE5E964EF696B13AA049BA656' : true, '4D26A014A4C4007564C743D9BBF9C2DC9A5A881C05E549DFFDAFCD3814F3966C' : true, - '4D2E2CCFE3A068F7C89D22E4EA6F738F99D3E62287FC8B9C8787D78A7EA77B30' : true, - '4D3CD85A0580A0298BECD2FA69BB246CA91261145CA03370847FEDD2BA707CB1' : true, '4D6CCD149A9BF9FA30CD78345F827ADB4A51553FCCDE1811FA39872E293EFE59' : true, + '4D8C4D5D0326174F4268C67B81010F65F2DDF58CE700989FFFEEA379269B0AB2' : true, '4D934EEB8A02C8031AB9A12A52416AAEEDB4B2EE58FDAA767FAAE917AAF8B645' : true, + '4DAD9C6A183D4E385824B6026E226BA5F220BD838F827C2063831B5998504253' : true, '4DC761701AB68524A6BACAD94CAF1D8480229B66D8B9B9C0CDA3D3B233A6B785' : true, '4E49086BA0B8B96D1C31415D8A1464F19B93CF45B46D04AE4C21672279ECEFFB' : true, '4E5AD8D52C37A505176F9BA95BAF43CB5FD5A7FC4654DC71178ABEA8188E7ED6' : true, '4EEC544B64210519ACB153834E7AFE21867AA949946FEB78CE5A254D12A0934A' : true, - '4EF7A69DC3625A39A416CCF7F607228D8A715D7419781218E4B827B83A504CCF' : true, + '4F8EE39D7EFDB0B9FD7B3E781B24978C6602E480169A6092BCAA90386A0AADFB' : true, '505707224B14F1FFF2F5937865DE662C85B0C21D090C59658E24B53CA635EFEA' : true, + '50C6F0A7DF1F05E81EBD31ED778C2DBD7A048043157E91E43B051B34C5E843CA' : true, '50CC4D1AE164F66EC09AA6B7D5931074094FA1BB6788AFF3525D7711449CEA81' : true, + '50D807568742476BDDFB2B2DD7532ADF770BC0A5D8CCF0710AA8EDA90AC1BF4E' : true, '50DB534A27B601C2268FB45FC5F496F4457DC030EBCDFD6221A85B1D6F612837' : true, '513B3B0E023E7013AD1D77E77AFDAC7D99627F8EE3C8FB291064D6D56C3CDFE4' : true, - '518B663FE089FF3E12F169F8EB5DE2EDC6635A11F14B7FD4207B307BDF2DAED5' : true, '51951278BE011B8562F6F9F629855BCFC7F28856755EA274F29109E2489CCAC4' : true, '51D06F5BD10CCE82EF993587A687822C99C3D8F3DD2F04408E99A5388C07333B' : true, '51F3918557C9F6EED321444D170BB23E4A558FDDE7B966D11FC6B426C51D1676' : true, '51F5AC607BCB1882F792585357C63B23D08267F717AAC5BE2AF557123EB19446' : true, '52064B1A1610B2374CC7319E51B4ABFAD46FA995B9447DF18ECBFC68382A9ACF' : true, - '5208CCACD74C6B569607B3AAB6639B318FD5CEB9E3A3C763F11D6C4BD603ED5A' : true, - '526D901BB36A96CF7AEA36490FE1A58EE0970BCD409CDA3E8659D8DDDD59560C' : true, '527E1D8CBE4936132EB16202101509A3A0535CEF78476DD9317AE7A31C097327' : true, - '528F9666D1C35F9AB6C5E9E6496B0618C6A3F5C37D6808E0601A8F2829A352F5' : true, '52AFEFBC93919093868483354CF11C747FB38F946CDEFDCFA6E5117FB0F5039B' : true, - '52E62F52537E672C499E0902B25BC800C87BD8C45BAB7B9683811A7D09C4559F' : true, + '52D622E1A7705A08FC599381FD67871611748B8EE9BD235E6C2A91E315C251D0' : true, + '52FB96DD74E66D3AAD9362B58E44731D388E0B0E17DE700E2FF3A7ACB2FC1BE2' : true, + '5322CEB4048FC373C5BBCCCA48985E2C72A380ECB490D143DA16482383C74B2B' : true, '533D8997AAFFA435583E114FAF33F105F8CB1B87020DC86F5DA948808EE81AB4' : true, - '5376577409E17E8F37B2CC6FD486FBD356FF2AD0B5EF520DB7CDAD06C6A6F3E0' : true, + '53BC74DCB0A19B859F3FC60A2C6410D22F86321E2AA4D03B08C53181A0FDA996' : true, '53CB6E4A76F1BDA96200BC21FA943685A88C33EC1A4510F4073BF54644475390' : true, - '5401D639B63C7A3075C6C5B61F64AD5246B8E06895EA510AA9D7C1418C3E06F4' : true, + '549714E49A3540F72DBFAD7836857D6566333DBA4645F3C4F349E5FDE00D4302' : true, + '54B2BBDF93C79A91B1DC96B4534B8745690C5EBA5FD21A24462ABCE7E869D178' : true, + '54F7FBC10956E45F93F952A8DBF75467CA09CA6D45A0FD859761B66CF53A61E3' : true, '550C98DA3C1CCC2DB49A389D57397C73C4304F4A4B65A1EE1A300EBBFAB97478' : true, '55360AB9E4626C6A5CABE53D4DC3FFE3339671F040B96E93C3B8ACB6CB1AD4D1' : true, + '5572DFAD00443E9C4B0107CBC9FC381C41F3BD44497E4142E63C1E5645ADE8F9' : true, '557AE25211574C66868033236E50981E6DD3AAC09C9A7916CE3A26D03420E774' : true, '55DB7B0ADB76D9C23CFF1CE64083074EAEFFB1F83642E1AEC2A7FBD365A9E962' : true, - '5603628307C37436A0A6FD92B580DEDE34FE08652C3E73010745E471230A5B36' : true, + '560643E22142CFB43DC9055CE558A62AA7102F75F6D42E3CA314920016A5779D' : true, '563A36F203C4A0D86BC2ADC38B1006499E3CD3D651B5C97AA848494CBC5582AC' : true, '56A2C00BEDBCD3A014C22A89A1E887CB0F9A2095FED90ECF196F6719EFA35A5E' : true, '56B6BEB3100D40CAB0EA4E450188CDDA653F473F3F182578AAB314006E66FA5C' : true, + '56C3C0B8AFAC13E7ADBC449142D6782CC3C31A5E19DADEDF1CC01A1C80FD6D4B' : true, + '56E517CBA2C7389F835B1BA349D636309FEFF05323957D8E64D6A2EC78F22883' : true, + '572F317B14A0D117BA2B0F352841D9AA5DB609C9C5F9A9CB837D56533C983302' : true, '5747EF64E7C857584498831611D042B568A3FFFBA79F476ED22F4D07E5239266' : true, + '575B7E593AA02701C1596A6A45E1FF458D4626BB2A31F5D3031B2023956FE5B7' : true, '57A0A93A8193B5CC90AEED1D0B92696C9516F2C3A6FAF86F7BB8126B5A691311' : true, - '57A0B57635F2D75EBC9C3B166E68E35E1CF91BD074AA9D5CBCB3359D93F02859' : true, '57B2958E7031793509E2EB58DE05C460E0791C4F78A43244640F7926FA3BD7D6' : true, '581247229E9E4F0D67498BD22646654479F5E0E21C96DF47CF84EC94218EFAA6' : true, '585568A4010D0650BF0F0C2F78402F25FBF6D0B8C82879E5B475708DA6617E35' : true, - '5878388C3C9B65DD3896113A5E88AC085793C21BE84ED1583D7939DF87D09D7A' : true, '58B590F006C3B293A57D41FF491EDACB580EBBF8AB20A91D6F8F0ACC3D3C19EC' : true, - '58C1439E2FF88E70D837218AA52270706EBA8C66B587805DC54AB12215416A05' : true, - '590F7D88D52E1E705632486F4CB869B519331ABADB9B139951F8705F33E42C55' : true, '59148BECF90A7738D4915EE2C70C38F7789A26131E0FDC0240A76CA7153EAC00' : true, - '5A4A8137AC418073C8912C4393D72D833960641E7343C43A2382861389B433D3' : true, - '5A53389620711EDF33A7992A0ACD5EDA7D1AB729D6513ADFA26AA03C8A38675E' : true, - '5AA7341552FF047164227AEFB41437582F7116D76B854F54920A5D6A9B72271C' : true, + '592C1FA32CB66B17E0ADC3B3C6C65DB7A7B8863D0302D5E51C53416DB637BE6B' : true, '5B3B3DEBC9899E074F2AFFE1A660013CDFD66E4F70948B72AAA20DF84433A80C' : true, + '5C1AF4338F1854843A251AFCCBFB2F626FA70E1DE41D2C941F34D15230BB56C9' : true, '5C1BDEA6E4051D2FE99D2502AC86707BD008636200DBEE30816399996D796DD0' : true, '5C3F4C823A953A561E8D0787CE7AD8FAC7434EF57CDEFA4520C18A5667C82003' : true, - '5C568C32C672A2B3F7242D5CEAA2718B08CED5BDA028B84224D605079DBD0DD7' : true, '5CDDF1DF7B5333F1B4C0FAA66297AD72ACA5258C5E9FDE4B9ACD9EAE832C7A02' : true, '5CF1D1896FCEF8E0B72BF6E617D8210ACE7DC6393E38FD4BD4C68E2EFE2EDC03' : true, - '5D0D6A8831205E33D40CA0CA2B8F396D05735A8D91B97DAFA61FBCB60ACC2BB1' : true, '5D133D3BC732EFC05E4C91931F8ACEC74F9BE1FFEC30F8C5E38616D2AF7BB20D' : true, - '5D8DBE824180E72B5972E68A8373AC984757EAD57281A973B44B18C36DF6724B' : true, - '5E03C9E7A51C7F8539BB4B25ABC9ED0CDB47B48D6A07B0C051D38939AAF91782' : true, - '5E650BBA8E8037D6BBEE78A730F740DDDCDD7EC828120AD912F4BBD72794070C' : true, - '5EA032BC171418766EB1B1F71A7868FAB9DA3C484A487BB1FE062566DF166002' : true, + '5D93064489EF0EFC4896A08CAFC0E39631930121F724A3D1CDFB83C96EABBE9E' : true, + '5DBEE57E22D11886178D1B5DCB4CB55C90C1C035B7914BD887A3BF87734A3806' : true, + '5DCDD41A1C6B5EC3D7442090754B58FF81C2BD410EE5F730233F5C46B0E541BD' : true, + '5DE0EE469B7D133584FC7B15F067761A0A18D73CFCC973EDE76DF596C4F7C9A7' : true, + '5EA41BBE7505A57EBB3603AB14050A284390BDB6E72B39D918232A5D13E702E1' : true, '5F05ACF54EAA38008B650AAA2DBB3722805C793616B1A21B43E1879107254E38' : true, + '5F61E01E88738DB91B4328949BC927A80DE24814DFE2B54F9F832FB7871D6926' : true, + '5F71744E0B28E62ABB0626131E0877737B5084AA6E648D268DD7D0D26B115EA2' : true, + '5F85D6DF2EFBA0438EA4283D734CFAA8B3C43E22BCF7F6CFC24DBE82232ECD3F' : true, '5FB6ECAF5FD5CA42241B12521D7BB6F06B7D804C60C84D7BBA7B7A7543FE754E' : true, '5FEA0DFD20247FA12D63859439FF9F4D5D0207D6E1134820CAA9CFE4A1B08FEF' : true, - '60B7C0E860123DF4BD6CD8EAC6560CAE6E9CE12DEA9B119B2FB90C57DB328EDE' : true, - '60BDF27D143EA5E065460D76C87F245DF44D9C1D5D818C62832A3B83B9973824' : true, '60E9F3B150DCF1BD90562DEDD083FD783E2CA9A982C08BCA2C455F50BF977B98' : true, + '610B774EA0B634E6F9B5A73C2DE39026C1A55D9425691B68DF4803228BDB7F8A' : true, '6129C7157898F2D29FDF04A78AC6730FFB248F7467858C9F3441A5D4D6B88C8D' : true, '613E70A1BE3CA6314EDB7C00B2477990271E0C8DE8210EED56ACD391E8CFF28F' : true, '618F1FA3F38C857898847A865AE73D87B0071C8DCFD4EBB7E80828B11862151A' : true, '61BA185CD2FAB39562813CDCDDFCD75184A1572E2B2B87667728C2EE8596AC65' : true, - '61C0C838E39FD9CB6B924046875626383C616DC9E106BFB5573C5CD2DF7C8738' : true, '61FDD344421DEEB7314FAA2A6C1A5CD97720CB90B48C801EC4AE74C7D88F1E39' : true, '62210E1578BEBACCA159EED5A0EEE3192B7FA0C17FA2556A686E28B251D80C60' : true, - '626042CAC6DE8C95C77C0E732144FCBD63418D72ED04CCB42FCBF260B38B21D5' : true, '626D3DAAE3451C750616F520086766043D22C2E2C34F483D6C7EB06E76ABF206' : true, + '628B608326DFE57DF84B8289702D0510AF97D93EE30499B0CB5140921EC87DFD' : true, '62AD913E74BC37FCF69CB86718E13A47FDF1440C2B18A4241D3EEE7831456160' : true, - '62B59DE2632C2A03669FF060A2C2047B9A95F49050C64B6BF5A782806AC10E99' : true, '62C9A052080F8EBA5E8FEB9615B5CDDFFF1D74F8467653030CB1BA12337EB5D7' : true, '63448627F20BDD4F11B278941D82DE56AD3A689CC06064D867FF060FCFE29A49' : true, - '6345E8D1EC10F5092710B275C7E48D8CD6C5D1885994B18DBDFCB2E5AFB9793B' : true, '63A4A98B9778705A9CD9A0F1A40827B0A6C86E2A520DEFFB1AD8F815D760D992' : true, + '63AB6D72993230FECFB8A489FC3B76C1A16D158A2F8C0AF9AA7B02F6A638F4E4' : true, '63B7D2C03D1507A80B8617E50895472A3C9E47CA34E8756069378DCEF952CFD3' : true, '63E6A22E453B17B4EA3E35C6E39EB315DBB77A237B1BBA9BFB2B3BCF675A63B9' : true, - '640AD0B7F4803223887EAE106DDD628BED925569AB309C01E1C8B640FF05B2B5' : true, + '640ABE7DD00142C0BC18A62F0DF54284DC89AA1BA000DBCD992F719A4B9D2887' : true, '644685FCA2BDCE4C6D4AA3876174676CB961619414083ADA90FE2443CF929D32' : true, '64831454483CA9CA55859BBD324F492638DA8179EAAED19EA3CC8E16FCE7A83B' : true, - '6489A71D718B44D5479D3C5AA2CEE70A2E6738AF25F0288B2BFFEF833280C0C5' : true, '648B6539CC321D112EE1762198FAC01AFC8B598E29317833ACFA9C02307F5E72' : true, '64D1D9522071A54B43A6C43A759223AEA7AE209FEAB423EA24E3E95FD83BDFCC' : true, '64E4359CB75DDA1A17413906C2881931CCBA16E52A52F13F16E65A752C2097A4' : true, '651F8FBEC4C5909A0FDC3B8E8D557574FAF01B33981B5B725311B57DEBB47B24' : true, '6581498408FD7D10902F7D56704A23B3278D6EE675FBA214F305D43C1B620CE9' : true, '65ACF48C5CF24783794CB8D5AFC30737273D3DDF93F62EF803EDCD05650D775F' : true, - '66795B4CC33E5CF75F1467F1D97528306D8CFD78DCA8D838A11D5A4E6D3F374F' : true, + '663A06084041682DEE8C4F8C41BB7C829E5946E2A83D28BECD5E62756502825C' : true, + '664EF517A09AAC31503712482FAD76860E0376164400E67A96177EDC25CC4CE2' : true, '6688912D47D0A49A3BF7EBA09AFCEA36E0D4DDF4BB571B383C134B763B17DF7A' : true, '668B926F5EAA59F351B7ABFCBBE5FA17B547B01C5A7D4AE385736CE8FD13359E' : true, '66B10F427AD63DB6544E9E20191BDE4F827A7C96F1DB17E01E0B254D67BE282E' : true, '66D67EC6407BBAA2F4A0EAF49D81F223332DEAADC96292827CD749DB07A82C02' : true, - '6750705DF61157E112906D9D3BD36F21696B0DFEC5D6E1CF728A443D76912C57' : true, - '67DBD139B060C071667F2A45E06C7E159117263D593C95138066C7BA3AD20DF0' : true, + '67118345997FE5257EB55439485C3BE019B32F1235E050EA2769A7DD80E6BBF3' : true, + '673739D407C00E1F449A4F9846B8453C09BA0D0F46442053DD5339F93A2B0065' : true, '67F7903A02481CD91A864899AE21E1D8C7E7D3FFEA34021EDB6F29C3DC9FE9CC' : true, '6860622481E0AB0EAD93B771290792279985D4989D072D5C1E376F451FFB1360' : true, - '686E60A6CA7744B42193C83E73617621EBE2C59C438B7A32FEA9D7DD14F2072F' : true, '688CBCC96F65054917A6D042282C3E33BC4B2F7A7F3C2AA0EFA97F31F2FEF21F' : true, + '688FE577BEDBA2FDAA3581F2A97A1388CA0E380387227AFB252297AEB6BD6FDA' : true, '68F575FF9F2EE5CBBE2975DB80B0D2E8582B2B5A1624A70EE6470FD562D59E93' : true, - '692C0A28DE13EBB75674023CC105A5F663CF5C67153225EF1193209E985CB1D4' : true, '69643C10B6E53A5667D8BAF683B1D566BB54B001E0588D7B791E648EA5681BBB' : true, - '69CE183BD9B04AD76F8FEBE25095D92D95888AA7D8735400158CD60B836FCF05' : true, - '6A7D32C4F099C8D7ECA61CECDFCE82C5D241F33F6A02B3A00D89802D4689DCBC' : true, + '69EC7BB154853BCCDC5C5646ED659F54B957152BDF1799B2BD48D4EF52DD9A85' : true, + '69F71F4F07365D7F684EC748F9CE61559DA33FBE1C9772F836664D656F51A5F6' : true, + '6AAC975279BDCCFB9D64F96F258D116ECDC41E526DE6B14FB10A8EEFA550A784' : true, '6AC112C1828538894A1FAC7CECE0ACFEE75658118041513498E880274BD2B7C9' : true, '6AD39077DC61A2347F25E34A809107D3F11E18B1E197A88A9A39F5FDBB0A3861' : true, - '6AEEBBFBD6A2EB3C41164F87A2491C293A66DB518999827273FDEA3F1892ADAD' : true, - '6B02CD14A3675354A800006220E94D8D4D5F9774D60EC984955FF720D927E529' : true, + '6B079CEE0C61F7DEEFC419FBABA5A734BEB22AB794791A0B6247E61EB4493B78' : true, '6B16CAD6D99596442162EEE7113248C0C77EBA7DBE1D3BDC044AB9802337D2CE' : true, '6B8153379F9AD865DAA48C0B805430D7B62D6624C4AA9389FBD770A366439995' : true, '6BC4B8F5756C6E11852DEAF28C2208733B463931BC5413937F897D4735CC2F01' : true, - '6BF2234F99577BEF099F5A651C125E660A765202F83A7FF24C82FFC87F87C3FB' : true, + '6C2FD820535D5A821A1D96C86B45519B751F141CEE8E1DFE6E52EA5370E1E7F5' : true, '6CF13EB678D9631F8E425073339FF5B4FC020969732BBE54ED0D3087FA774303' : true, - '6D1FC10BB256C71CF8A543B99AE433A55FD8EA467FB11EBAF9ABB24C923B4DBF' : true, '6D2E55B7B10EC7E3F82F060350C9BB7DAEED8B6ACB8E79B4B088D9B711A9CC6E' : true, - '6D4210568EBEADBB8782B6345952223B49407EEF3F8FEAFAE6D14DDB9DCFE710' : true, '6D53AA3328CC9AC46F2872113922BC105CC4A5C2B3EB7F45C331A93BBE4ADE3E' : true, + '6D9C7D48EBEC4A7D808E0A45C6ADB9A6CC5E61551DDF1A24A3A74846039208AF' : true, '6DB177AE67C272A729818F26A5DC8A327236919BDF09E43961204BD9538CB09F' : true, - '6DC90241CFAD3946A0A53940327E950D8D7248FA5896CFEFB60F543000A0B165' : true, + '6DB3ED8E913F7236F1691473EB370D7FD9DA84FB1D8E07438E128878840EEEE5' : true, + '6DC6A2951DC967373452FB4E9A95DEEBCAC70945DDE09BDA398F74161060EEC7' : true, + '6DD13D5385101A3323ECC27F7548813E240A1D58E37DF8D820CD2E2998BBB8C1' : true, '6EAC221C01F1C4E158E51B8AA15965260D186BDF22A579C9CE8D89E787A36FB3' : true, - '6FCE4CF77E254C2920BE515857DAB1929ECE7638DD8C370C1AF6A374F36517A6' : true, - '701E5C167D1D2A47E29F6E0EF64D59D978CA3287D20E3590ABF531EEFDDD885F' : true, + '6EC6D27D2BE121B49CCDB7866F4FFCC3C2091AF00405CED481AD072FE4BC2307' : true, + '6F45127FE064F0BBB5EAF17D7A4D9EA3A47175AEF7CAB5C98F2B6D11F28A4BB7' : true, + '6FFF24F5CF69ACA10DFEBDCEA8B5A56990728D9EADA33D0CD316BF042E79068C' : true, '704172C04EB3CE46ADA086772ABDD4DEE208909ABA10D59D1815E9533107CE5C' : true, '707966CCAEC5908E84C5AE646566426234491D2F78CC00BA7C7B9E5F009924B0' : true, '70A137BA9CBC1043B06D08AF2800FC09F4D3334ACDC0915124CDC834A77564A1' : true, - '70DF998D006A8684F543CF929F8223770479451AC680070169CF11B6B409CBD5' : true, '711280787458F0E54B0C9294A54270FA83E8CAB29E212ADAF665D7F6345C4DF9' : true, + '711C387F2C7A8AD850D98BB2D145DA6F0240960AC5563A50CC6251C28D659503' : true, + '716121E1DA67D3A82CC8116139F78C34C30E6DC96F647B7F474CE569B38D0F3F' : true, + '7177E89F5B3033D51F000533ACEA71FDEAEC93E4C3CEA1E0FF68F78BF35C8B21' : true, + '71C96A7294C59E44C257A0BDA7578AC44118DE25DEE425F73E0A211066FE6AD4' : true, '71CBA0C7ADFA0E0688BBE75D856278A477C4041C6F0895AB384BAD02B9D951BA' : true, - '71F2DAF17AC798022DF73260BCDA153082CE08952CAED20A66A588B46E83000A' : true, '721728072AA0815DC7EC109C8737500ECAD862B2003518851C323664A749BB7C' : true, '722368B696E375C97556E68FA5D53C3BA7CDCA15B13B72DB9E49090EE7C9C163' : true, - '7225F14A44AC70458F5C98BD93C0A381A68899F718AF8300C897612E65461827' : true, + '72438F5523C4516DEF379EA7206A883EA5876DDAEA39EC848A5C456E9215A1D3' : true, + '727EB1C33A66E7DC0768741432204682504B8D4302D3B097181090064DB99F53' : true, '72950D958C6C1FFDAED4C597635776C7EC60B32CC683D03AF405B023C686FEC0' : true, '72F3DB1BB2B0B3D65683F62D927E20C95303A00E8C845E0088E4DACD4F3B19FE' : true, '730C9CFC51120B6E5C66F07772ECB96F2933EB184A397BAF90453D2BB43BB600' : true, '7334856F73A23C5F0A60FD1EB2DD14EDB444B1B8B62516FFFC38589D1200B09D' : true, + '739A4410178E7D1D310A8120651655322CCBA6F84D3F566FE9A9F1C268578DD1' : true, '73A621FFE0ABD75757F5C92C8EF20E63EC8F4A279A450BACC7E4FA9D75E0EE5A' : true, - '73C4C95F998FC60D5EAE1283F28C36C63697C481E6B321EE7DC46DAE585B0E11' : true, '73D889F527C021A7BB8B363C2467F7499145D97DB7B6E0207D6CB12DFA550903' : true, '74395721FEE13356EFDE73462CBBFB2A471B4C95563BCDB979DA57B786D16A88' : true, '74711F9774C66CEC41DE4FD32197132B13A40A6758A106DC95BCADB9298A6241' : true, - '74A9F7B27B38326F64792AAF791E5A5969071CD05C8ECB1E068035AF9AEAF482' : true, '757071EF34F3CA907D7D29C6420EC14B6953F433FA03F2049636F55265E456B0' : true, '7572D3C2860E9D28159C0337E8DC7C693F307AE0F1F02E0C35E091AC1C1571F6' : true, '75893F8249D9326D2316BFA87F7DE3062EA1E00116C921C6876AFF322B636664' : true, - '75A9264209E9CFFCF8C4D74F1988A6AD0F509269A5DDA3DAEFC0068EDBE6AB26' : true, + '75B83054C471114D4A2839FB6B0FF55FE147D4968770A78F469ABEE5DE3E07E6' : true, '760650CA663BAF50AB023FB340DC4316998A7E66FE226C3A66E7D31CAACC9330' : true, - '76180E9A156833EF0B8FA7D3C83404086F9F1141580FEB3710AE5B93B2E819C1' : true, - '7621A0521A873D9B899C1F5BB52AF07870D8C98B5FF0797383C26A7D151789F6' : true, '7644E55E75802D6FF784B75B8D77DCFADDADA23DA2FBF95836FA3CB975C6B982' : true, '76498ECB08242DC8AB6DE47C0EF0F87127C2809D2C1E1B8216D6297ED7D791D0' : true, - '76D1EE820C99B447CE9277881319CD5B5D2BDE8182D5AE5EED8326244CDA6621' : true, + '76F8713E43FCFFDC282532FD58B8474C514D432CE8C85734923D96450A6623E3' : true, + '76F92D711D9E8BB1F3210C9CDEE23CA1DCCA929595CA0F5D0C3150DA56B2618B' : true, '770784FC2B1A52F110194800E972006E868F055C52A8BE467F3AD7BCD7E441CC' : true, - '77C5EFEDC19C242BDC746C5EF4A1DF4117918CBE078CF6DD65FC274DB64CFBAD' : true, - '780AD07FBA71E98848DABAE3B6B94B292E5959CCC36769683E0213E78B759DEB' : true, - '7871679EEF661F72EE1CCD043F1B7C597E8F23196B653B42634C37F2B6619B00' : true, '7889B1659DAF073B50A3FED9BDD6CA3F3F69E90E22C9EAC126E2F915C476984D' : true, '78E4E5B9DC94A09084EF738F43D30114F90F95DDC550D6BC2ED203D722323EE3' : true, '78EA89695196A279F7B44D8F1AA15080C91C3BB240F1D1878A88F2B27228D430' : true, '79244B0AFBB3B26770A470A4F23555757DC25D3856F56D0096D9F06EB47D5889' : true, '792EE0B202E6A45AAA85E918497D9C9F16FEAC99500A7940C0FC812ECC42120C' : true, '79506C5663C38F43902B55BE2FFABE0757A806105C2A18473770E9DEE5322E40' : true, + '79F3CF8BED0EEB720C3411D03257BB351FF5824181EFA725214AD60C11E7DE2A' : true, '7A081DEE8006EF40615953A1EF9BA820BADAA31338157E69660B3EBE7852838C' : true, '7A95B01B834A4CFF097B69C8D84488E0843D9C51A8045BF5AF6AC2CEAB65B079' : true, '7AE7C2EA08D84EB5EE0F978D061FC9D6DDFB57C1382D5215977205894898E0EF' : true, '7B90E5B537B13743AC7B5B9F3EA28B3F5F5E95A6D9F4AA0904DE22858F38C780' : true, - '7BA22815A242ED9FF3AA2FFD5F121935346190B63E61E0EE4EFC6EAAF76BA6F6' : true, + '7B91BB0669DCF091D0C042FD14F1CA6B8718A4E1798A4BE8957DE6EEF186AB83' : true, '7C63B78CCB8DE59051349EFBA4A9E34EB627F65855F3C754312DCFCDBFDC270C' : true, '7C99FBE3E1BF4CE4683186F8BC44BEA34B07919C1542ACDE9420CD75BBF3F388' : true, '7D08B399CE7B4D7A6DAD696C24FD870D577ED45A8081D3E1BF34577B6DEC77B9' : true, '7D3EF8DEBFDDD39FA7CA90EAC62E660639521686926488A315B10FB2A0005F6A' : true, + '7D4642DEBC7CF346EC7846E9B0314B73B6B9C23F8016E23E8BD49ED247D2BEBC' : true, '7D7CB9E4195E89426B889E09DD6EF0018B702EEA4C8E1C5C39DDB538E20CF150' : true, - '7D817F280F1D664E0C9E717287D6AADB1132D4F3A3E2001B94009119733C9434' : true, - '7DDD5D1914FD375229088F2E7E2CCC9F557B2E86956356D21E4FAC6B5D5B7EC2' : true, '7DFD6433613550E46711F591EB0B0790233460AB951DCCB4B60B61C91C359B83' : true, '7E01E1EBA9D9E46D3DEBEC868180199AE64DB3BC878F66066E91CB4C060B55D0' : true, + '7E0920FB66D549811711C20F1789AF9FFC54846E738997B8A18A2F154F57D29F' : true, '7E0AB095FE17F430AAE0B4AB7490366DF97BADF13AC223D96AF0913D6919BE7D' : true, - '7E723113D07305D5E9843032E474637331F1567CF33EDD8316059148AA2E3ED8' : true, + '7E73DC62FF77BE88149C85444C4066E0657AADB72716230EBC073848DBD7F59A' : true, '7EAF183A91E8DA3866531C499039CEF3AEC4F214BEE293F268A28616B67D0474' : true, '7F1566D05D1E3A90A9D5D551AEF51D2F1827FC9E82922F2BB32A08CDC5BDEC7F' : true, '7F7453584CDB1B6048A5508FD8FE1FB7009FB225E754CA38FDFFC28206BD2640' : true, + '7FFDBE3A1A423CCC6EC3C9FCE2D51B91D70EB1A122BD7FB53875F4BB08E3E966' : true, '802B6D5941983A1F76B514028EDEAC33214B4F27AA490345BCE94DF9B1494516' : true, '806791E1F1BCA3B3AFECAB7D1EC6FD66C2616C6CF13A3256AF0D53AB0A759BCF' : true, - '80BB61C435AE010A1BBBC72F9CDD1BA74CCFFAEE4C74E07446ABED3DA2685427' : true, + '807849BBCF3FC901816BD5C23E0EFD51FFD9485FC34A5A086174A7E91DAD175D' : true, '80BCFC1145A7F287ABB29FD26F6FF09F2F9299D43DBFC2214B15BC346D1A7EE5' : true, - '810C819EF5A6F077751EDAD2FD0E77BDDC9567EA2C27ACDBE677BB3FBE3E4E4A' : true, + '81041B22B3F6B997CF39557DA4E384FA0D8FFDC59F790CAC512D966297380E90' : true, '8117437E2D53CBAF96B03A772D719EA4783D32C4401D6C590BA9F941C52E54FF' : true, '8133AEBBA592FF513EB1EA61723A0CEF57A583CDE66794FA9DE2FC0A8F573B54' : true, + '814328B3A40AA4F30950FF66E5DF4304428357F2C5AEA8C1E397723C751651C6' : true, '8179173BEEC9E5175036B790F2CED009213A8FF7D62CDED95DE000BE2B03B068' : true, - '8253A0516BAE8FA0D24AB03D7E4AF8898FD1EB8333D2925CE515FC3DB6ABC5CC' : true, '826F129EED33C26A96D2FA3EA71B7897E065E2A68280A77C03E948C9EAD80945' : true, '829124925C3F7AB9329A17C8329D55F04DE8C98994845083D9293F2546CFEED3' : true, '82D1AEF2AFC46271D18C5FE50811DF9A5EAB812156C2FE6F531A34FD529E75A9' : true, '82F25208D7357EE223C6715E802CD0F8D019E3004DEFD76A90BFAB18D2DF07CE' : true, '836E748E62C7EF083DEC6A11521F79E4F2EFA40CE0EFCDBE43CF3228F905CE14' : true, - '844B51F620215D6845EB82700563692BDD5EE144D097D24FFA8D99C8FB5FCF28' : true, - '848E7A1C6E45D88BF111E43067FCF92F6F17BEE0B52C99381668797B108FE80A' : true, + '843DE3411DE65A522709898B3CF9AD8A6CD1011BAE6F9DE0FE7DF2496F95C84B' : true, '84A093B67AC79FA09CC2E40B54BE4027DE363B86EDF64B623BC346188B877ACF' : true, '84A8C623C4304D57CE03893ACBF4E51FC9975C58658B89127508E5C33BE992A7' : true, '84B91F7D19D03A64195173E28A98C6A24AD166106B5AC14B36A404C45608B2D6' : true, + '8502DA6C4457ACBF635D8B3719166A351ACB8F2EAE0F9756EC1636B90CF6068C' : true, '8540F78EF676D50879CFF30B3CAFCDCDB1287CE9472D0E39AD221AC0B049BF5C' : true, '8544A63131F49B49F2802FA5FFB5BB62D726E1A5972F668781040E2342770042' : true, '8565CBCC3E3484929C4C2D7408530788E83FF8CE2B8502125176AA2F89D3C350' : true, @@ -529,164 +535,172 @@ const X509ChainWhitelist = { '857EB3AE3D76F7A86260D7DF2583D65053D7DBC30558CF41078A51A841A15408' : true, '85CFBF3F71BABAFF31DBBAE3EE6615A269748572AACEC462E501B017A4B58C2F' : true, '8620FBF8F4B3D858B8AE9A6EF3423068026CEAD38ED1B70B12E65A66EBE62845' : true, + '8627217D9525127A4161D0F1809492211C4105596A011CCD2F10968D3C3307CD' : true, '8632291EE6C74182159207F88A43B60EDD3715D9B23CB51B878C7DFA413AEBAC' : true, - '878C8800E459A4D4B9989B0DB92C628E8A13574E71B3324E50484F70555B840C' : true, '878F9A1345B5F3F76831E0AA2CEC43E51FD88455FD70FF0C671DDB8D8646BECF' : true, - '87C002662AAAB5BE7B6A7CF4B1CE9036E3A2A70A0A3CD80F64005C889ECCDDBE' : true, - '8858520A8D4E5C88D777C33963CC7F43E796B555E7FC573681B59DCFAFB43EFA' : true, + '8798A29F91634076CE7FFE713E075C4A9E231DB4113DEEFE4FF052C73E900069' : true, '88A9F13EF3721A05CD57C6E13E4B2D6F699C00312E92C24E04D86990177BFD3D' : true, - '88C3951EA08F6218D53C848FD0745408A54B8588AD3728B9634AFF9280055838' : true, '88D68B8F6C5B10D7E9413E6B62A450E74806DA84C0EB558EE9E98E2BDEDD16E7' : true, + '88DA049C5A0F1F2FF5C8D53A9763C6E53B5E653753AEBD8C1A7227F5CA83995D' : true, '891419933107B0EC0222BF502DB271240F352C825D2E32776842C40D13C2F8C1' : true, + '89972853B85F67232811C446ADD4CDCEF7D262CAF5E565E92DE28350D653B982' : true, '8998929C795E1C1A4D769B9E0FB886892FBA9D8F1542DD894E15E12530424BCC' : true, '8A0A728D550D96C56A17DA2A0A97A6A9CAF22D5AEC3BA7A6434C51FDBF698785' : true, - '8A0D973D9BC8BA74619B1D55816F7931E1114D8A72901D7AA3966A89D96A0AD3' : true, + '8A0BD2A91793B98A002F45011E47B8B81C1F11CF4F10550B39861B709A22A8B0' : true, '8AA440E22415685F4A009BA8F14D9B8251614D78159C926A712542B0E9FCA143' : true, '8ADE74E6435437386C63E8C22DBF3BF0533A4B49E6668F5F15824AB58AF721D0' : true, - '8B1225A29F8C7203B6154A99814B028517B03B3D4B5A3E25239EC91650206C0D' : true, '8B41B56DC76B41CBEF93FD4F1F74525CF5B11723140CB81A7DD29AA3D95703BD' : true, - '8B52AE402628DBFA70BFCE1B172D676422D5E720F7E3AE2E7B195D4FB4E3F285' : true, '8B83806B610FF233FDE11E892A0023140E5CAD1500847E29F5E5C6CC21BF33C5' : true, '8BD1BB8CD29EBAEB36A58AFE2BA070CBB92EC003064B71AEC49E812E39C2874E' : true, '8BD3D0A64D73FCD8450DF0224F56F2B44F88D2B89B94EBBA3B5CB7E905DFCB74' : true, '8BF51CFA32BD64F3D54AF63295B5F890FF439D7FDF854D43F25F4D72E396021F' : true, '8C2DDBA5CA9E4CF79937A5A3AFCA79F371B6F235B37308EB53ADF12C319A7EC9' : true, '8C4AA99089DE2B772FA47DE3D9901FE175AA49A46B9D056BD8211B53848276AF' : true, - '8C6DDA18A4CB339717E1321FBFDC9A3ACC52F2FEF6FB453EA389A2B43FFFC63C' : true, '8C742B891F670721F4F8E1D4DADEC74C9E9256E0C7D132578973823FE27C3A33' : true, '8C959CC99EA9E228577582BB36DBC373836E4D91CDD4FA3C89B20A289B11CD23' : true, '8D0394524B030A612B174B7F2FA75A535F6DE732E9317A394BA9286CD3F42F18' : true, '8D0CF6F0B227BE9394DA0DADABAB81A44900D104A915645ABF030220F3AE187C' : true, - '8D1EBA5F6A209614B68AF63D583392DF844036E8BE335440D0740396366FFC4C' : true, + '8D1399FC7382FB9F29574FADD5757DD9213F6A13D8A318ED9F60B9936F46C548' : true, '8D2E6A0020C2C53A264A392C371146ACBC83A8966438387CA289807BB5583C15' : true, - '8DD64FF5EE29EAEA20DFFB1B446F1441CD291260939D41C7784AF872CDD60FAD' : true, + '8E778C2C00AEB79E3C3BD5B071E2102021DA3E343A2F39E18B0F114682974D9C' : true, '8E8FBD2654D291051FC080C47960747B4191C58D85765C77CAC1C239FF3DDD1C' : true, - '8EB48C6A21AF524F446D3F9F4BBB78C5CCA368441B9858FA87DD6664D603AC2F' : true, '8F31ABA69837A432E88579184085B0AE867412379E04666EF880DE539CB03257' : true, - '8F8515B35B665B69D0DB9661EAE9FF0829B71CF4AFEB3BBF988BEE73985F5D3B' : true, '8F9608587BFDD90423D96C82A5338A09203663970E435AF25EE4079922B60E21' : true, '8FA478A1DE3999FD32313D519AB1BF7DA3C485C1EC90176E34F82CA74EE170B6' : true, - '8FA49556B9E8C97F768F94A3D2653ED2E3E927D31EC7A916D0744BFF07B5E685' : true, + '9055AB7512901D1134842CD2E96FA6A7ACD149ECB71088495948DB65D70C5377' : true, '90C2F31A64343BA4CBEEAC90A43FCBDB46932CC21CC58095FB6D6CDA7B33F362' : true, + '90E64A0F26C4DB9ADC398C779A5E526DC969AAFEDD0E93CC3D8E8409EE0A14E5' : true, + '91045740421F423B4863813FDA01E15F2DBFFF49AD80C9B732B0921980734999' : true, + '9122BF7F13DF3B05605A0F292B4C90830F29A3196A5156D97B76AA8507D3FEB2' : true, + '912C3FC6899CD7AF6EB7639C9522EBF7E41B91DC47C167AAABB3695E61486538' : true, '91490F346E9CE34F77126105D7CB01AD7C58E0891B398289095613F1D1162F6C' : true, + '9155BD4E0154F175C67770CD7B10B714A7AD41BA78252254DC0AF2DECEAADE32' : true, '91728081A414570C9CFDDB6A7F70CE56010D44F4E165762B73F4B05436D85351' : true, '918B02B75417DE289310E10FC77AF7041D1F380F02939D64F063776F121AD61E' : true, '91EE28B14AB2C7571BE6CDE2D75FD4C05C960FB033DA819EDD463D5D3C494591' : true, - '92059CF4A0175D14DDA7D7EC71DFC76A7A91A75F4B9BD886E5595413920885FC' : true, '922D7192C60ECCB0A2367C8E7897C8289C2CD7010B98CF82A964ACA2B56D8BF7' : true, '9244CDCD0DED69F9AECD82846D0467062DDA89CD32D8174CD69F9DE602AED97E' : true, + '926B2CC74A86E6919298CF1B5D43A44E70214CC94C416E9DA227701666BBEE6C' : true, '9295435D6B38A570B2F537814147422BC442A7E39E1AA307550DDEF0AB93C3DC' : true, '92E91A15A0542407788FCD78EF9287724B2B25A27F703C9FBF2F5BEE709A68F3' : true, + '92FC5C28899C60D64BE77DDC8D6F746182A5C5CAED5A3CA093E6A6FC8070B64B' : true, '92FD30739B92B5509945785B19CA286449968DDF5EF7B8F44C6C8556711DD3B5' : true, + '93197C3990B717E3C0A72941DE6DC382265AF352701F62FE07714449334CDD7F' : true, '93671EC41A75DADCAD2454D2D9951DA643ADD6C899C6F4EDF6E8806217949732' : true, '9386153F7472D5A4E3218FC3353ECF45BE32905B7FDA3D7882C4FFE6CF966AA3' : true, + '939BF6798DB161C0B92007D4E725EF2EAE06985A8FCD7754967CE7AB0D650F5A' : true, + '93BF03482F668B7E936D4EAF23D3EA36DE0E603480C2F559406F2E44B0B3148F' : true, '93DCEAA3D67BD8992097C446EECE4A6A02DCF89EAB0008EFAE7D0C9BE26B7C00' : true, '9446A5F64DFA26478AFBF6D0F3A0773ACDD46F1A4F7691A72BF24A58A411B340' : true, - '94CE12FB5F69E4273C8F813ED37ECB954AD667BC81C4E37DD27A40C291DDB12E' : true, + '9452917F8C5F6F630305312187EA4858EC07A829CC74DAD74BA24EFE7F4F883D' : true, + '94F858E57AC5AA1A13209E8D6DB28141036EDF3AE160BE93AE79A7CEB0CA33B9' : true, '951A1AEC1EFF82FA3366E4569838AC37BCE65385B88CF81B0D96B6A552258690' : true, - '956DE14452F6966BDC2C3CFE4874878D446083AE81BCD83C705B8E757FA0A390' : true, - '95A4DD514D4B5F9B29118B3CE20FD8D4996F40424D7D64BF678A252262608C70' : true, + '95A1D4BC10A9AF2304C4C9489A3C55845CE7BF588BCF920365C6B2A423923A59' : true, '95A80082CCA2E52DFF16CA0E49B9FFE32F7ECB93770D20913605BBD47A2C65A6' : true, - '9658D54C28C27DD6E9B79098D7D86C1EA32215492E8AE9DB225E3410EEBC39CE' : true, + '9663C730BE3E8838AF256662B79C2EEC10D7AB2595D9712EAD7BB4C8F5454837' : true, '9668363E5A4509F63E66C774CC7374E8D7654D0D63E833131665F65BB0116D90' : true, - '96B78900F165A1CA3843F3036950C7A5CB299CFA98F7A1BA6950AADB5DC1459A' : true, '96ED7F4947B39E44EDCEEA05043F9B286C35BFA932C02D88A00B5338BE7829D5' : true, - '973CA0AA2F294AE5068B75F5562CDBD51AE5ABD2E25C8F20CE38572587589799' : true, + '9703B5D60B49A69534FA129729FE3176EA17E03C53BC90BF11280C050F776E73' : true, + '970D20E6919A2FACA4E42CDD5E94B6F26ABB2AC051278F10E746CFD897996249' : true, + '9728534E56087F5D0E34881BF62834B32DBE8EC7629A7EE04F52878A9A61E36C' : true, '976ECEBA965B747F498F8E4D26E3BABEFC48A6DD2645210168D7D82BB97C15C5' : true, - '977C77EDC0AE3D98F2FE87B8C309DACC9306DC575D2D8FC358973DC716EAD715' : true, '9787C483E07B0D1A0251A93D9F86495C6E39D25375C395E9939145D6C1E818D6' : true, '979F95AFF9D71DE4B8ECE178862627DE62E0E24E5ABDA2E8A20E5177E8F428D2' : true, - '983120089E357F1255EAA175207B7DB3462CC8481C2D4F8150B5C4FB93E274C7' : true, '9874E435B3A12419DA88FE7AE98EEFA9DE47D098DC95AA6204B499202AB1A0CB' : true, '995FB24A5192D81E32B762C20EA1298A1C67820CC360914FCCE1613A12CEF526' : true, '99A4816C0BCDE615242EF4FCB3CD6E84EC60952E9F97E248424080DAD5D0629F' : true, '99BD9F4C25AF74058C9E443467C9FBA76EB37661CBEF5A1E1244D8077200A250' : true, '99DDDA7A8D6D222C3111DDF5E85A45261AE9A7CAE2972567996A7729D0FD6E68' : true, '99E2609E0CDCFD36015CC659568D5C5B01CE4F7FA0C5671738D525FD8C518B44' : true, - '99E437DA5156E02DE52D0D95AFDE0FDBAF8F626F4D3BAD2FFFE7F4C75D76BD60' : true, + '99F02B4F32B9993CB7656021DA511B31A2944585B6B9C6DD5BC1F4A41681C5DD' : true, '9A01E5759613554A5FAEB7E8889F18EEE16568073CCEDEFA0485F01969535C43' : true, - '9A36248A6C3142FB6AE62E262E0F519CD609A0207BCB6891443BD5AA5C02AEDF' : true, - '9A9B087A4581C1FE71B3F4D7C041E93D4EC1093B01AF3ED96548AB93254EF65A' : true, - '9AC79E2916EDA1EB936B7FC6779F139ACC665C33F143340C5CE540B69F2E9F18' : true, + '9A2ABE7CC70A0E4C5938A7AF3CB4C165872C3387BFC4653F48A68F39C13F3899' : true, '9ADA51307C3FA225DB6F8E1FA3A218E477F775FA3D3DBE839232E3C385310902' : true, '9AF3A66EB67ED022E3F99B1E810BA8C0A110F83F0BF250914AA5F1F0989B2196' : true, '9B128E182D224AE31F63FA92892A8A322AE42BF2D4723D62F5A6744973C82F6C' : true, + '9B1F3F707765DA5034A4C9B9C3D341BDEDEEC1A13C3EA464045D905CBB9B4ADA' : true, '9B37ABC1012C67357E1B828C3F70EF7584EA128D20968DA23969B0BE939CB83B' : true, + '9B4F75DA103442C908F7CE2C0D7EF9674813C56C384A0A64D326BE91F34A6F63' : true, + '9B641759FBECFC4BD8839B33889BC669CA8F1592A94AAEF087967530A34BA32B' : true, '9B80DD5C98B0F0A7AE343DBB896DBCE45DA52EB4E31BE057287A2A738D9CE3D6' : true, '9B8B430BCC7FFDD28FA85A1B18690D76DE8F18DE340656F63BD1472816A3C83E' : true, - '9B8E5BB6E9E655E4547D6782EE9018C8BE585F7BF89555A920C9157DCC15D0C1' : true, '9BAE8B30BBFA182D0BC3DCE5BADF78381980EE69F15884A0B93F291EA09A7EB9' : true, '9BEB9D4CF88A648ACC9CFFA48A687370D76E9F8188AB3BD638D9BFABD2D6AB24' : true, - '9C0F47FE70B9E636409CD37362B052B40B3CF765DFE80E71D999E7EB1AE1D4C2' : true, + '9C052D1467B80EC3013D5641910680BFFE3616095B7F3FE61338C31A4E08A6A5' : true, '9C5435D416BDB4EAE642E2A66B8382BC848B362E3937069725DEFD9282772612' : true, '9C7DCBE2DF8C0BC947A09C39B1B6CD2EE137D366554F8CB46AFD80C5FA9C3B81' : true, + '9CBBB47E211DC5C8FB0613F90EF2828B4C14945D15C27A6F16BA4F90B02D066F' : true, '9CFB4802809B54253FD655390678454D0AFFE4E5B0239AF6E4D5CFD90FEF6931' : true, + '9D10CB4207766E66BF3482393E13D3E3BB23AEC361470B6693597632FDAEB302' : true, '9D28BF964F6C820DD26D42FFC18689C1D2FD43F4C4DA9B35F11CEB8FA24F2073' : true, '9D98952A99B9FF1B2B7A86D21F50E311B3147CD9475830A856A4C63798B05630' : true, '9E418F784C18C79930946ED9BC408D8E2F694BE1E3DBAE4BB20917F8E1B277A7' : true, '9E492AEE3B5838FF2E4BDA9FF98D73B48CA846FBD2AEEDA19FB885A489F58DF1' : true, - '9EBA1808D31F89FD26CA580E6FD37B15D0261A807154FBAF11A7DA4B0C9A5E06' : true, + '9EE2376792A6437F098A3DA7A2CA9AB54D9E9138051FB201CF84A91653C9C32B' : true, + '9F194F70160074F1321FC1140FD02064E1FC084CFDB96E1080396841F6D3BB4B' : true, + '9F31E8A729CDBA0C25E4D73181264776E6DC12F264ACDE58F047382B0326E463' : true, + '9F5CB7420AFF2B5250A87EE7D0F1878496A34BCADB0971DD5AC3C33465C07565' : true, '9FB66B76C9B0AB6ED5DA3188A3DC6FCBC369AB273DCA99468C1EE4604A1E9E99' : true, 'A0212D4EE874832A0202ECD1349ED750083B1D238DB6E30120702BE1256F53D8' : true, + 'A024128989862D72CA20143420C8437F2E91D063A2D85E3B44C0E9F125DC7E59' : true, 'A03D7CE2FA040738CCFEF1F20872DDC1E321745B2C34095822A51B3BDC07D9F5' : true, 'A03F32B0A7677B8D7102BCE24F121EE6CC503FF173C43CDD6B914BC69D954ACA' : true, 'A06E313693C42005CB7B7AE33A96E3ABD66E05A57012B6294671FBBEF4A84AAC' : true, 'A08110BB7D0D5F694D791F82071E44B4C968D4990C73A402B25E0E0ACA5EA6E7' : true, - 'A0B4E9AFEFA1B8966355614B201506B13CC213060D2661264491601F7FAD8269' : true, + 'A09161C66FBE8334516AA4F5705D03ED3022BEB980CEC77041C57ACF4C04EB21' : true, 'A0B9ADCD27CD63E8842BAE80188453C09DEC27270C32748A4EC2508372AD36A5' : true, 'A13EAF82F0814BE5FA12BFB4D2FFBB75FC6375DF19E16B8490D140CFEB54AEE3' : true, - 'A1504C131B0FE702B64AA259B901DA2D9B2AE9D85AADE02F1528C1147F98E535' : true, + 'A1434249C4B9832F01BE03643639D862CD66EA988BB1297822D5ED9A9D0B86D0' : true, 'A15455BAF823A9C2A7B971C6F11D799D4C6E5B59D274150AE67294035C94ADC0' : true, 'A15BB49CD56693B9881AD43F6366FD2966AF816643BB107E8A249E07227F67EA' : true, 'A16BC03AE3E35E7C39B45D339A22BEB39CEC134D6B9CCA289E873F91A384DCBF' : true, 'A19514A23AD3729EF69553D8293E9693528EC67609464D4EA0A96CEF8E9C3E05' : true, - 'A219A198FA5CE79A2ADBC1EAB8BE34F086699B9A16F88DD2F823325F7481FA8D' : true, + 'A1C8AEB8D3097DE429CEA435BE063B3E16447F24132E1F1AE459C5855BC4DAB3' : true, + 'A242ECCA540644D65C4152B7D44ECC0DD7A831DB42653CB4E92406E2D0AE4CCE' : true, 'A277B893194AE7687EBBCFA344178B3578AA6228D2B430BBE2FC8D5EAEE43135' : true, 'A278FEDD023B6A1BE29917353E38320B8D8EBED9ADB0F88A8D00434D9B1A0851' : true, 'A28337D306B9F107098D473AF3F34D8C14DCCBF62D725D5F8EEAE11BAAC558B0' : true, 'A29725F7446E6A2AD03DF0B7D77B72F9CF0249733B42F48DA80AE41C6B206C49' : true, 'A2C85895E192F69BFF3BD6CE420B8C84A6FC87B3A999F84701F0230887DD3344' : true, 'A300C56C8CB909C4F6ABAD6A7FCACC5E621BE17D5209717912B3F3BF2F7D6CAF' : true, - 'A32A8197E25FF03AC02B1548EC597DC93B2F3376E971B143538542A6A2212AA1' : true, 'A32C868E44827044CE85B05E7E694717A5D3A7F8B9D28C41B7770DCD84F81218' : true, - 'A334A1C1BCBBE82C131CA48858CC1D56495D2CE2B598E5C6E81672D7E9FF9FC7' : true, 'A33C924A4181FC26CCE183DF2C30AD332CF6D6A94626E2B6455CEF77560438F4' : true, 'A35426EFDAE7DC04D5F7926E254D5CEA23D4CAC5371D577ADA3A4AF828766F1F' : true, - 'A369DC916C6CA5851F181C38EAAFA733310F462384651762FDA4B2CFBFFF07D6' : true, 'A37B9444FE3BB0FB2EC43F2677926EF458D0ED4F0688FEA6443A5F243F10C2AB' : true, + 'A3BD2DB1D95E67D4A20301B41F1E797421E259948072A2E4B9DF9158D8FA9143' : true, 'A41920689CEE150BF8CDA57D32B36D32985FE08AD4F0E52D150D1CE5C7096810' : true, - 'A42FFF1190531FF187F05767CF5029A8CD637C72A8AFD222118463200A27FB84' : true, - 'A432841B8E8CE4F3B7992A740AB014B3D78ACD930DA113753E8D2E2E34A5358C' : true, - 'A46D4265BD5168CB36068465327371B2B9E2ACFBA66E368A8B90CF77A251ED09' : true, - 'A61D1D1BF3A48836E418525F674E32CB457F4C74ECF525BC18A3035A26DB1CBE' : true, + 'A4A4A1370E59CF5B199B4B0B5A04E12DE67465C6BA51DD379678194E1328FDE0' : true, + 'A503E853F535F69CB099A247D5FA9D2F656CA1992C65C050CC5A36FF11DD47FB' : true, + 'A5DF74566E059491858A87805B36E5060095F7963D35877692C2951C1D649E22' : true, 'A6436C7837EB4F0FD89A1F3ECE954BCDC0D76E3817AD0289B64A22B78B071D7E' : true, + 'A66BDA4B1FB0A132F118520414B7C2FE89EB9CAEA7E599743F0DDB2F5DA36294' : true, 'A686BB3EA8129BEA261D5B99357BDD2BC22DE15F0140AFA2D7CA3ADBCB64DE14' : true, - 'A696B059AC99AA5CAF081FE9DE0F113EF0032A9F799A92663985EA5939B6F30B' : true, 'A6B23EA2BFF90B8406D914D1D5B5B11D84F759C88B9AFAF64B77B2DCE08D28F4' : true, + 'A718CF6FB0B4672FDB9BA1CDB812CDB98423DD8ACC8991780BE5E0FAEB863FBC' : true, 'A7636BE0A08F56D7F05A8D69AF0B7199FA7C05AAC123DCE71AB57C538A4D910A' : true, + 'A7BBF060D6455FAC1B40C3C14FDC8DCAB6B032A3C636F78EFF0035E035D2A289' : true, 'A828D902865C9F63FCD670F5752ADB8F8D95C6DD434F33962466496EB8D6BB3C' : true, 'A82D480B6360B97B8FA507BD461FA4E2D6B73BDF171723C707FDBFD7C9C2C144' : true, - 'A84DC1DB143EEE938A45743268683770BA0FB2EE69A4EB4B131841555CF1E124' : true, + 'A85EC0692236ED65D5C36943B771F81FA013E93A887264C8870599C858456241' : true, + 'A8F36E0AEAF9A102084B815C248191CB8EAE56E4A732C669092E6C693606425F' : true, 'A8FFD3DCAC35478A6187DB3E317D7A9BA8D9823BDDA70440B8FCD5D83F49B836' : true, - 'A90478E1DFC0653194083700E5101CB3B58FF56E9E68ECF36E1D970522A60681' : true, + 'A91F446F5E2FF93B1FA514B3CECA23118E1000AD358CFE04DFD5E6E25E7AB292' : true, 'A9869713F6E5332E3F4902E82E81EACF34994042C411A28C8AAC116131EE90E9' : true, 'A9913780644EF0A55C80B8BBFFA76A7453DF7F9FC04E9BB09FB9434240D03961' : true, 'A9C3D776062E86182D7BFAD9005B716E1189EBD051D477078341EBA83F602DC7' : true, + 'A9E614A0EBCCB8C193707AB9EB139666AE3C4CE774741351D00A25647ECE659E' : true, 'AA0F48D748A88A3DF4392B0AF891FB99981D3D66D213B261AF14863E44F66870' : true, - 'AA33D12B28CCA921C5DAB6E8055B0F162ED6B6B9F92D85F93749619165B1D3A2' : true, - 'AA4FC2B4CCD9E52767C35AA8321783EDF85CD1F2F631BE5606C9B35C88486D54' : true, 'AA6A6EB3A263EC4DD20257BAD1C1A94F80FD17E51BB03DF1BF0332AF48FDA5EF' : true, - 'AA70F6E381B7B7BE508E8D5EB062186FB323FE00A75B264F43B771B731FE96AB' : true, 'AAA0B610FC8267716C7703C164E8E8A47B0DB68F821405F83AFBF5F4D7BB5219' : true, 'AB33CA8B659481B0120C5A227487E4F99D28106362B530D054FD812F7278CA51' : true, 'AB3975DCF7B531638F8E8EE570E416890F6E1FA4DFB66CD2EA62E81F6CB19383' : true, + 'AB5608534365B885795A5E3D004C5F29613BA05E2C9CABE0FE00C99067318A36' : true, 'ABEAC0745A8B282D5BB1DB3044B94C07D11F414A514894CCE62C067DF99382A5' : true, - 'ABF22A6F97015839A27CBED234E40E5BC875A95E81F4485ABC66FF6D35E38E2C' : true, 'AC1199A88C3BB6564557B6BA422B776E8032D9457EE1099D0BD3E53DC44F73F5' : true, - 'AC33C7B064D8FD9A0E5A00BC70581133E949AA0E61209B55010E310791339D4A' : true, 'AC3DBED034C44698984D68EA44B0B3D74C0DE3B7615C3240A71C1709958DC3BF' : true, + 'AC523C58EEF332E2FA0491FD81659997FE32F1EEA4F7694D9C149ADF4B18BF2F' : true, 'AC72106DE06D4C1A17E641546E6DC5C53A1F48FCED34B9BD09368429F828CD70' : true, - 'ACD1D0DF8BE51A80520D345BB16B04745BCBB48B01D936B018FFDA71981F817C' : true, + 'ACA129E9ABBBC9473A45F1F0688C8FB4BB9E7B9965D8BA382DB371575A2100FC' : true, 'AD0C2E82F0B607A9B4D0571DF0302FF442E2B99ECE91C18E22C416B46B67E4F7' : true, 'AD56E6AD659C808689220F5959DECE86001E37EEB88F452E2111BBAD634B4AFC' : true, 'AD5A935C6684CDB2459FA1D67250E8F9B6A6CB6455BC628750F9633FCF6EBF62' : true, @@ -696,22 +710,17 @@ const X509ChainWhitelist = { 'AEA0E3A8AC6F70B681BDEFB28D9F156116F80230149D8E5C9DE76E9062EC015B' : true, 'AEDE30ABFD76FFEFF77B437F8862FF677913239CB0DE0360FF93EDA6B515F731' : true, 'AF6F25BC29AA257FB80826165B3AA5BECB2CEF777817998D0619544F02FAF897' : true, - 'AFBAAD26120F25FACFB7E1ABAD16A58455814B1A46DA986FCD04330A88DC1502' : true, - 'AFDCE2C9BDE084811D64F5408E8AF94945CFB9F7FC69C9A27C8EE39102858DD3' : true, 'AFE6418D301202651844A84CC8B19A56C479D627DE922366E532643D995470A9' : true, 'B040095E5483E488179D07D81A9C14C6CE026480DBA570A6D16D75A7414D7499' : true, 'B05633EABB92254800392A31FA1627F077F2C91B29D82CF1EB1D507EC7D44038' : true, 'B0A3CC901A3D58371289521F9345843F7ADEA438660729BE9B7B520DDB0BB965' : true, 'B145A895F26B09540185848A600F7F58C0B03740C17B61A1B43BDC652740B80B' : true, 'B19BEC326EB5F611BA8CE10410932955840A0818BFD2C1C690BC1C06C63A686F' : true, - 'B1B58B7EEBC1947CB840FC4C2713D0DDB23DEBC75E58DB15610AB4EA9A1DE1C3' : true, - 'B1BEE5F876D9695E23EBE9D0BF32D0DB4D05096C004A073487C5B3FA26719FCB' : true, 'B1D9B3EE2512A48A8E703E2D2263EEB4B0A3D24963F5165DB3719CD4750D2986' : true, - 'B1EA0EB5DC9C9766C903870A4E9DD90C92C8780189ACCADDD9012E1D9911591B' : true, 'B2618AD6AE584F2CDCEC050ECB0FCE8E5BF0E9E978AFE692E4A1BCB8B7D03044' : true, - 'B278FB3D58DC99E1CA192EEC63A0F34F9EB8294A23EF98C73F7C5F52A5C86FE4' : true, - 'B295FDC9D7462488EBD4E5FA8E5B062FE5E2D0432C6A02B99F4CAD1F9BE6D0BB' : true, 'B29A6DB4686379EB52C1D8F249A74FA55A1DD9F2162B0B3E0683912C1E942437' : true, + 'B2B46BCF24DBED9CB8A829DEDB3536B95774AE8223A8B160C2B097154A3EB8E0' : true, + 'B2C34569468F2754686AD5C63A5B6C71FBDC5D7C78B161C70F97309CAE2FF270' : true, 'B2CB5A2A69339A575A4198D5B76822E6A0F90871A45C8348F2A060CEE67EC98D' : true, 'B31C07387E56AA457F17CA3D3A4C485683253CF387E6DCE37469B6A8E51CBF29' : true, 'B3251BB9A1B4F219400E69789FB08CA2BBA396C6D2FD3C4B69F4B7E1C0DDB615' : true, @@ -719,175 +728,175 @@ const X509ChainWhitelist = { 'B3381C627EFBEF5DF3BCC9DB71A9B6E4C0A4F3114F7E7408A356FB33FBA5D20B' : true, 'B36D72C8B1F436DA49520421FC0A2869A9952DA405DA5E29EC3A1919453DD6F5' : true, 'B38307BF753F924511125E6FE9542C79A8541FCC780FF6905BA237A4C7FCBB13' : true, + 'B3A416E4B0C7F99B72761D34E3362F92D0F59EED1EA412FBC54F1699A79A1951' : true, 'B3B278DD571DDC491FD26D3B0942C78EC4A1AE3D9A5D07C1E317CE901E6B8979' : true, 'B4130785116E5A84BF7B191696B213BA8877228388B18C2DA38DCB9EE14AC8CA' : true, 'B458C6F566E833CA5856703868BF09531CCC61D32AAB1BE65808DEEEC56EEF25' : true, 'B478303C0A26FF8A262C29BA3A9683FFC4CF075735E637F6A958640C5EC33669' : true, 'B49A2871E348639F681896FB62D6535C945182A3524297258EE2E356D6D5B3A0' : true, - 'B4C49BF02ECA8D4E0648B386A408C377ED9A9E8E3DFEAC1D7904D3D14C5E2F76' : true, - 'B4C5319F6F6A80B60C2A5A715FB1444F974024960339D49E0301E7F5A530595B' : true, 'B50AADEEA7AEA0CC344AFC4BDC81C75292E1F52374DC4E405CA9376CBA5594BF' : true, 'B54B1776D34DF92E8E090FBF0C927D9852E6F18F98E6F306AE0369229A4AE2E6' : true, - 'B5A37CEF1BF2C02B97F06094BA1FC88C650D4F46C43091914D5BC9CC1836A0D1' : true, - 'B5E58034813A6D2A70A162E5C9469EA7D31FE15F7478564E5698A388F201A646' : true, + 'B5826AF547B2C4FBB118246774B8C027E7E18255F864395300F07B03E43571CE' : true, 'B5F50267B0042B154B8529FCD98F5E01C986F7D23628B49B63011A3C90398CEC' : true, 'B613D69F10DE096E664C3B4AA083E0BC9F50A98D0F9B682C496FDABB2E4AC9D2' : true, 'B663B6C8C60A5969BEE4F6844813AAB8945EE2CE2253CFBA67500B991CD8A07F' : true, - 'B6B0AB34677500F9A39F33BFB229A8B211E9A75506BC0D4E894DA99804B40603' : true, + 'B7193D3E26C14AB91AB1C2AB9728C7F9D832A6C4EDBBD2953385E3F1D2B9BB91' : true, 'B72804ECFF97803B8A40A2FEB3686B4CC1918E9605AA9EA4775441E762D73687' : true, 'B75601AB7AE44FB2C77FF1E9C6FBC4B4D9ECB548009BF40C46CDDBBA8C0FE493' : true, - 'B7EC03174DAD602E897345B072749AA86CAF05151062989E183C3039DE25569D' : true, - 'B8845702F28C3AF9B35D8B5F1DFFFA014CE411CF592B18395F700CD8B937F3B9' : true, - 'B89D04CAFB7A2D049F425329570E4582ACDFC0B92F54A8709716A3001377887B' : true, + 'B89D499E25ABC593F9B29B3C7364EF7196146DC810443334895D99BD15A5846E' : true, 'B902076C4F3E4FC9D45AE90E5AF637247D3A4566DBA2D6DAB15364828CF7BCD3' : true, 'B93093DB93D5FE8D16B007F9E40D627BB7B78D617879EC6C4F8528F4B21BDD6F' : true, 'B9891F4ABEA7FE5802FA2C07E596905422C39B16E36612B37FFABB81F49A0BCA' : true, 'B9B8984BD73419077A912955DEF673CCB572907E2C494256D627DCCAF86226A0' : true, - 'B9EF83009F5C8B4C3A0C1B8EB263B4AADA87D4D2263887F8AFCA40FD4A7F78CE' : true, - 'B9F8D7E05743BCE5E58CA2A0CDE89E7E1A9397417F75813B492785D72D4F8510' : true, + 'B9EC2202B3D25F6C2CFEEC96ECB1967C1171197A121F6278682988D68C9CCB6B' : true, 'BA43FBF51015CAA4D822D17A43F4DFB32561617B62E711D921112F12B76F9E43' : true, + 'BA52B8302644DF24B0DBDE018536FE6D2C41315131698A53D2906347DEE8BB82' : true, 'BA5BE146EA09B76F106B28AC62830E5240D1B7DC43BAD171EECC9998B1718E28' : true, - 'BA8089CC9A0F25A27251DAD14E47714A331C35ACCE2EDFCC51CD73EFA83E2EB4' : true, - 'BAFBC5503CBB29FE4D094BB0B0D04B22852E9120DD54D34D9247A4E570FD458B' : true, - 'BB3C208314AFEC26DCB183A0E4DA2C1169F9CC435F1EDB38C349AD97B2C3F6B9' : true, + 'BA74E086962745CB5EDA606276E3FCE2220C2EDEF5824FC5D67EBFD1A94A0685' : true, + 'BACEEA64658C6E86E126219A40FCBEE7B3A0C7687503114E59B3EF28E0C06A19' : true, + 'BB6970E212CBF8325822B968387F263BA8D6CC479F448CF712381A36C92965DB' : true, 'BB998A2EEB4ED3C4251EB69296AE91EAE7360B0CBAF690FD250C38A710ACB38A' : true, - 'BC0C5DBC1020476F067127D89E5C9A2AA88F141312919D7C0BF1B964D4820FF7' : true, - 'BC86367AF49A238438C89460780C94DE2C1E49021437B3DFC590A63F46332888' : true, + 'BC6CD35DE4628EB8F61CDA81F90A4E7DC7F58EA9B7A8590DA1BF2F8C78EBAAE1' : true, 'BC9B66EC1AF4106896624836D64B109922DA4163B83288E2131FD9A012CC95AC' : true, + 'BCB6468D80641046B9B1D3A9A24FB092B76603F256FFEF183D0EB6A9218DF2C3' : true, 'BCCC1893C98C4BD177A414C7B3D5EBD74893F964FB9A62B96B48A84F1FE64B53' : true, 'BCEAEC2D8B8C18B58BD320D77850EC38285F419ACA8A9E939DAE7DFDF26696D0' : true, 'BD273332A459B8980589FD5B8D03967EA78809CFB4F77AF25F578EA77CE9C785' : true, - 'BD4309D792EBF40F5962B65405970EC2ACC7ED1109A1F5FEB486C84327FF6D46' : true, - 'BDB42DE005453117D2B60263504B9B58E9AB64B57A7385279CA0323D7246F02A' : true, + 'BD6055F00FD05A1C84C05454958354052E8924FDAC99539EC2291C5B85C8953F' : true, 'BE6E70EB169369668EF9523107E95867B1B9C0320C750180303720B35CF09798' : true, + 'BEA7ED0A4C77505CFF6FAEA9F1B399C41324C52804D35EE4D9076F726C8D2C4E' : true, 'BED1A9D1A4414F4D465F04F9D8C8EC331F89388E19419D0371D0D177FA60287C' : true, 'BEEA29655F2F0DE938C7460012B5265BDF623C09F11529CDC33A4B6BEAF96616' : true, 'BEEB38B82A906102D7CD92E5FD98661DAB5D3C9B7DCA9DE3533565EA9607C5EA' : true, + 'BF1B69CDF599AA45F38EC98CEE4695058AA29CD8B489108944EA95707D58595B' : true, + 'BF209FFCABFF17D3ED4987EC0FB5AAC5C0D961546AF52CF873B560BA4BA48A8A' : true, 'BF61A5AF1BAF57E17B092D5A833B4C9A392BDC7529676D4C7248816F00CDA5EB' : true, 'BF7EAFFAA2647F47D816A83ADD1D7579F0CDDA690CBA00F75BC6ABD564987346' : true, 'C0144D1B67F2AB403DD08B73E5F1772F050E9713D8F2FD98BE999FCEE51D2792' : true, 'C03976BCBA4A9A4ADD099CE8F878A6DFF9B066179EC7DCF932EC4AA737FE415A' : true, 'C0AB8B4E884A20E51AB9325567115F185D18654803E08E2C2C6A4632D7ACC2D0' : true, 'C0CDB9DCBD1FC873712C871C230C327A9E53E6D78FBD0E5CE1ABED5DA0D1C7D2' : true, - 'C1726BABAC393C02850032B1C43B095C3805E1DEB1FBB2CD8C76E533AFA80484' : true, + 'C0F030365B0F33FE3624CCAE4EB7A81BC7B9127966953E82DEA179DD1AE66458' : true, + 'C18C15016390F78742A45137409C8BEAC8A0475E39A444448D3ACE0499546462' : true, + 'C1E47B7AE65AB520DC18A03F063101FD14AB70E868F16DB2C42ECCBEEEE5A6D9' : true, 'C1EB50953EE0D16410A5DDFD97F5C05060B39F2902807F139EF6B015D0C66729' : true, 'C2118D84846AAB7DE521B0379672EC639CFD745D82E3D504EF68CA723725C5F6' : true, + 'C2126EE4AAC4400E18D80ED8195C1A28517EBB3920244FD66D9F67BE89247FF7' : true, 'C2295D7C0FD4FC4DC7681FAF3CE851F6B416405554781C77FC8212DA169C258D' : true, 'C2C9A263D5F88D7064870FD13AB8633A10CD97E8281F0ECC49C2C1C3F54327A6' : true, + 'C2EC6DD4A6B571933F5DE0F94508D629FAA849B1A31A8AB979DAAECFED2AD253' : true, + 'C3107C690BA5007E11C076B2FEB58BF88E67D1ADA15DF1B8280D226177AB6A13' : true, 'C31135D0EE5E0B74D6A39E1FC67E9DB5CEAAE9F1D15338359CE02643C198634F' : true, 'C33DB47CE54F64CE33394E20A96D122EFB6F8DAB2584CF26120D8A8C5C380245' : true, + 'C33FE55FBE5E1E767E0FA9FE89D0B287AD7B3A41E1117461BCE96A681030C9AE' : true, 'C34069193CBFC866E03EB745416B50B25BBCAA00B5DE50D1D62D3365749CEDE4' : true, 'C34CDEA10E72069587970C7033095864B6F069B6637C6263A1E7A7A5187923BB' : true, + 'C35CD8ADD8FF80A9CEFC31D3E0DB613D725FDB0BE52B9ECBB730E970A59E7E98' : true, 'C391E32BB11DD8F6F13BF71E0B9CE225364A50006E3F91147EDE39D2AA6E70E0' : true, - 'C3DCE474FB44F22E6497A1FCE2C45DEE167853134C6F1C21C13F1707B0BC7FBC' : true, 'C4BDB4AF6E9CEE6017D3FB7ADD286E4B6348088E14D994CF698095DC86C939EB' : true, - 'C51ADC8D1B7014B4B9DB3EE230C67BF6F164956C390D41E5F8415977D9D9491E' : true, 'C58563CE93B0DF900E0681376244F32977F577D130320226D3BD9CF82863402E' : true, - 'C58F0FF2DF810FAC8EA095F349A2E6D7E0D9C09D6FBE7D45895408530E1C75F4' : true, + 'C586979CC69441D6717388E137E2B01FD04BF3C7C4F6E5006D71B45B81A7C04E' : true, 'C591A346116A065185360B973A875B0329B48D924E15BE8D4FC4C0B849182732' : true, + 'C5C58D7B5A145FD684B3A5A6D12468617BE9DF323D37015420BAEFAFC086EBA1' : true, + 'C5FCA59FE803B0F5B7BDD9387C65A1A5B9CDC8D0C76B79C2954CB769506DD1F7' : true, + 'C677F67FCA735BCF6AFB51031697A967AD09FB8ED0A9EE9A1F532F1CB5F6AF59' : true, 'C689F3B9238DB156A7D563E76DF45FCA607B4B5F6CD62BDDC1AD1AC720E67952' : true, 'C6B197D2663DD850504C900569A800D914A5C99FD7E0DC7C2424A063B6C42CE5' : true, - 'C6D78C940B53FE313A3DB674498E62C0B10E4C63B2D5E2A84D437BEE64A3F4F1' : true, 'C6F63ACDAA452E008A1DCC711CAD36D00AFE55F958F2CC82A139BB53E27D11EB' : true, 'C6F893D20A417841D7584A029E6E6A2A44B044D858ADFBAD4B11F35B7199309A' : true, 'C700D31BDB3076006337BC249FF7CDFDFBB8A3677F206CB475E7807FE6FBE286' : true, + 'C7056A5FFEA8A4751271C17CAA9EF3BBDB7142A08ACA673522EDFD9AD18AFE66' : true, 'C71294A0124420512711C918C36F77192D2B45CDF8C99824B4BC862D0B31C3B0' : true, - 'C74B4D9C0A7CB22F6F7B60BD4CEF94A34820E3A0419CA5CCA3CF187612693FAD' : true, - 'C77AF2D81D578D009F9859CDEFD2E19A5B3DFA98FCE909C353E235D650DB514F' : true, 'C82AE26EBA1954BC778047DF9684F330C424E9FF778033485305AE0C87E57D68' : true, - 'C84E5F64496198370D4E53DD6FD1828388E878759375F498A8670C035275D6C1' : true, 'C936FEC68191D7AF75334834906C8CFB18F91FD53BDE7C2F0B2ACF8100ED3855' : true, 'C9462B9099A574DBBB9E2BB9B87C4AEA825DA388EE8153AB74414555420AA6DC' : true, + 'C95235BA613C42AEEBE5B2CD04707B323083EF4BAF4B11C633288AAA7CF98AD7' : true, 'C959CD326D9F3AA21FDEDD42A5AF0B7A2FAA5E9B92907654F29F1ACDC691DBE6' : true, + 'C9A9B118F63E40C8F5F73E89E580626EDEE028DF8ABE5D3374CDA69459207CDB' : true, 'C9D7767021698AB5CFE3F43AB281F424E1515A52A0868C8752018CB292DE3190' : true, 'CA157632863D3E7B499F141741724FA84DBA48AEB51B04A53A9D3DFEA7F70BF1' : true, - 'CA353A661EFF3C6EA9C66AA7585C19EDCD1C00085C06BB9B0DA2DA78C84D8CB2' : true, - 'CA400A13D999554CB3EE03F1F12F7E578ED5C52CBCAF9748124E3402052F921E' : true, 'CA46DA728E76E97AD214DBB6AC9CB1EA2DC87202C88C35E87CE574FC1F2E0438' : true, 'CA529AC5A7489D57CEC2D6BA5881213C5A163409BD6946558DACFE899A977009' : true, - 'CA846077B68DCA99AE30BAC33929143E856784B64E70098CBC7FF5BBD85C824B' : true, + 'CA93EC5E6881B59BFA7B2B59B2A9D574F599534BBA6D3D50834271DEBB31A1A6' : true, 'CAAF21212D1AFB10BA4844150A49541967BC1C9879801E43064429A632DFD941' : true, 'CAB896F9E8F1D4C0BBF05F4A48DEC534FB7A2E9E21D3C3B36F72D50131917243' : true, + 'CADF1142EA883AABDF13A65D7F0C5044AD293A719AB56A1C1B88D30D96BDA14D' : true, 'CAF98B60B1CE36971AD2DA67A18E72E53345EFCA16382827BD1C2022D009E751' : true, 'CB133229997821E418467CC3A72F77A7B9E31CC62B41032D6A82577B7AF1C6A2' : true, + 'CBBF31DA8CB7BF399EFEA030057004346FD5D8BD07CEBCE934E28609BB6AFF14' : true, + 'CBF04D84EDCCF90EDC1BB7FADC6995A4A956A9A6568F2605409BB2A782326D5A' : true, 'CC2E477D4A2640BCF70F232C040954DFC4878E536A4B03E788173E673A2D31FD' : true, - 'CC8E9439ED527517579A913E8489CA704B4370AE09A823D36431063C53609C82' : true, 'CC99A37B34F4914C3E3B8B8D6236CE0E8F92DC77CEBEB09D50C6004D51C8D4CC' : true, - 'CCE21382C4DDCED2E4101F6FC5A1B8B76166EC8ECE79DBAA58F3339508B48CBF' : true, + 'CC9DE9ACA31709D03188E3FE36B902288F56A3AD1510AAEBCE0881A363CB8B66' : true, + 'CCD4C850054C2E89024A8E78E337518B9137528B9190B9417E182E6CFA0180B9' : true, 'CD35C7ABA0839C0D865DEA4C1DB624F709E5EA041A68DB55842E2C189F38BAC1' : true, 'CDB02DBACBAD381EB4F6854E84372DAD1FD76462ACBC26A9DC86164E81E75C85' : true, - 'CDEA4B65584E4EA2889F73E5907E95849BC6A2CA76B17EAD2B1FC7368193B550' : true, - 'CED6501D3B06CDB7033EE79351EC3080BBC2993D0991AB91325DFC0550689AA7' : true, - 'CEDFCE64CD03E3F512AC1CB6EE68C26F7C48C6753E8708E3A7D5AC867BA3ADC6' : true, + 'CE77D1F5ED11C8CA34DA5DBB0E999CAB0469D215552BCAE775B1AE6ED072F01B' : true, + 'CEB1ADB71C3CBA6FD012A778BF70CC93BEAB621B4DA4A464934C5440868E58C7' : true, 'CF099A3A9DBE3D79F3E420A47A8447A50A2F87ACF2874CA86D49F271B82A68C5' : true, 'CF19B1004488D5D9C882E2C4D0A47789618E0BCD6475F6D9C6B5591C2BF333C9' : true, 'CF2A79710CABB0EB440EE621B37934C249C50612DB4FF926EDDE5B8A30686BED' : true, + 'CF41907FD2550A0AAFF0E09AF82423DCFDFE470F225A003D607C19F709A591CC' : true, 'CF44B5D052E8869D4632230291A81F3EBB7F681276D371161609BC23E40C8636' : true, + 'CFDC25BD3A406CC65DF19685CB300D33E13AB2F2064BE7071ECA3A6F76AA3215' : true, 'CFE1E4D56E0D95E238F3317CC981740011F0D3E4DE08ECD27313F83378F150BA' : true, 'CFF31BD8AB9FBB4681C17AA4135E67D402345E32CA8DC9D566537CA530F27B7D' : true, + 'D004BA3611B7EE32714173A1C1C5EDF071902F49D67542EB4310D6BA34B33DC8' : true, 'D03547E78303C9FBD70A38BEAFE87AA9F266A92275D818D1A8758DCB9D08DAE0' : true, - 'D07441504C544C3C3374E4314A2FB91266585AE94460B2FBE5CD4292556CA20D' : true, - 'D0DA9A42796D063B8246DC549D1CDD1D64B0AEF50E7094F0A29F243B51012DC7' : true, - 'D0F94901C782E50EA3A7B7300F6D9A113E45B5DA8944E956CE6629AF9C4C92B2' : true, 'D103ECB2B7F74BEFD44109C1CA30EA92D9016C0F9347F1DF3E5467C3AC20221B' : true, 'D10DFC97304D163140768E2D1698B1A0A3AF8331C4941F928622AB80091A3273' : true, 'D1C4E4D1F014FB8F889F45AFA39485BE742F64268C662BB28494855E393ADE96' : true, - 'D207EED2218BA7CF564AD049677741A526B9ECB5BBB23CAF2B817A3B0085F004' : true, - 'D277E65331EFA2A6668143F8BC5334AF870208332990F977BD7F3588689F4686' : true, 'D2785F7C48F180342D70978EEABFFC424D33A495A07D04F32C08B771BC4E43A4' : true, + 'D3946220D26CD68E238632CD7AD63FD62669D9F60770C62788747C7552AEFC8B' : true, 'D39BD0C1656F99A47DA9D2957E2D7A49FC9EDD92CC6BE729C29299ECECFC42E7' : true, 'D3D5C3556B8724C6601E217415EA7E89740A9F1B2523D6421ED2BD2E3044145C' : true, 'D44DF644880E56596405F1364D8C3E5301F05ACBF82FD66B671D895288C75360' : true, 'D462D57028E10CB7A7C87ADA83EBD7FE9B4DA384D2971BD7A708816C4EA8711F' : true, 'D46D29E4176A93E3DCD80BA5861A87E84FB7866B784488A977E7E4E4076DD2BD' : true, - 'D4CB5B06AF9ABEBF5639377BF36B289CA95A3205A84537D36B4506DF51430669' : true, - 'D52C9B39197E2769C185EC17A56A6E7890CDB1D0B18D15F65FA3B52E94DE94F7' : true, - 'D5846E29C203E6EAFF8D474085653A1F9E2E123C4E9E8C1172D1CB62474789E4' : true, 'D5B0165C0F4C8F14A2E0C2310AE4A51B6EA08D2FD9790DFD49BCF3FD78AD5198' : true, 'D5EDEAF240AD74C81017160821DE0FF6470839A2F8AB998D84E7392E90280D0D' : true, - 'D60AFE53C8CF92DC2D9E8DD1E4003246A16A692A1F619426CE43EEE621319BCE' : true, 'D652650A3DE79A5C0DFEC1925007DA094925533D13F14094722A80F936FC9A8B' : true, - 'D666DA4D49E47B079AD7864678B4807D5CA035B3FDA103926CEFD053F50E5F2B' : true, 'D7198C80471105D95103DB11B6BD2F6CDC8E7A7E67DB8329F1FA75C5F5D5E8CE' : true, - 'D7632272521683A38E88A18C2CC6AED79B2C5E854483BDB6EE83D82BF41B96CA' : true, - 'D780EB94814F0CE1AD1A2F8A1EFD6170C019F0B446E726C7C874C0730E59FF1C' : true, - 'D80A44887D03596492FC8CBFEA9878F46AFFEF1E077645169B129C419D3E8C6E' : true, + 'D74E275CC5800C7DA6D65C11F4FDF07B81EAC91D412D05EA64C928E035F1C129' : true, 'D83D1AED881CB22ED4E92AABA18DC390D6931CCF74591C64C236C662EFCDF557' : true, 'D844DEE1597B654C0E645C787DB52F6EA5C855C6C35626BD7787E71E873CAF8F' : true, - 'D86562629BA86C435C0965C4AC302160729F27804FEBA36E211F96CDEFB5DF8E' : true, + 'D8B6CC82BEA51A5BDEBA5B3B046B0D1965528CCF70B8F7D27E57A99CDD87D226' : true, 'D8B8F53177C1E04D93746C8460A7296707654094814772BFAD31F79C03802240' : true, - 'D904379306D37F489337D71508E1CA3FE9FDC8188286D24265D3437BC069EA15' : true, - 'D9E191EC52F4ECE1E0C43968EAD53E421ED62A7A7DBC0C39ECB2B8FF7962F01C' : true, + 'D9AC7500E87D9DCB4397D3707594267602061F590BEF6DF84CC507412FC43902' : true, 'D9FDB29EF83808BC82A97839FB2F22C2D20DAB2E6B67BF5862C8922BB1FA9068' : true, 'DA0D9391992825F7A10312F7E85568086F18DB901838A303E721E58239158EA0' : true, 'DA29D8725034D89C221F415CC5282F82A6502E1EAF416DFA41507BC662C90258' : true, + 'DA5110BB1526CBA9E86FBC66B91A8A2880E85440765C9208A1FF4D3DF2E8AD65' : true, 'DA5D20F1A6CF6CEC3AA7028A6E17D8F2E1A60069E497758B0CC938C08F4E76BC' : true, 'DAA384D0D2A94A18A14E3DDF7A963E59BE41C06B978F3DC8862E1EE6C8E76DD0' : true, 'DAA9CED5BA817CED9942DB9CFAD0210505937A9DB2214298E0BEB831BFC8A31B' : true, - 'DAFB1BB231A0D93B70726F2D3D8D8C8C54EFFCD901BB415C7A85AF02D09AA2A4' : true, + 'DAF6B7470355545FF9FF41E11016056CBD9537558F503D7F9C049C8ACC446112' : true, 'DB301590A7DE580916559C6DE948B95A3F7FC50A7AB8678BC365595A4DCE4E4B' : true, 'DB7B1361B066EC2F777AE104F88A846DC163200AEB05B47D5BFEC91B6F13AC53' : true, - 'DB995D854C4EDEF4DB5CCF20B2B30719056F3EDAA0CCF4B9D9C5C898407C5C7A' : true, 'DBB0C3CC436B5E592960BE7E8836AE58D8D632D435365ED2EA3CFAA86681E272' : true, 'DBBF2D4498ED91C779C81FED5E96F9B5210CE86EA463712268BCAF098FE2E285' : true, - 'DBCB7851A6EC87DF3B603CDC26C5A9F958C8AE75485E1649A7CEF218B4E4D5BE' : true, + 'DC04E4E5B03D875F796835B599AE226470B9ACDAF0DC79AB2F766B77AC59F3E5' : true, 'DC2FCD6AEAEE45D7E82C443FD3F76EDE1C88CE43E5FCEC3B4DEC9F12AF34BAA8' : true, 'DC8D710118FF258F27ED436F585756252FDB30F42DBB58B23B8CD3B2140E13B8' : true, 'DCA17501D12F98C84EE99DF4BC8EFC1FFFA9B65E2BC5A92B20C9296EC61C96CA' : true, - 'DCDE97B03688D8CB9F603AEF4D97110A38679F8EE01975E4B0B55855E4A8DD05' : true, 'DCF33FB3953551E4B5F06060A7EC211432C30FEF86FA7B45EE76A8F9F3473C86' : true, - 'DD10B2E1AFF8298CC67F58955608C74ECE657F1DEEC77D6C465C1C7D2C8D26D9' : true, 'DD55F1E1BEBA4CF9F582CBEEF4A35E1C1DE36750A3403489C1C98955FCE9950E' : true, 'DD64C7D9E60AE6748B449ACE8CF9C21B5551BC6427EDDCE1D77B7C7720FD21E4' : true, + 'DD98420C927FBBBB0F2D1FFFFF359416FB7B352770A6550E3D68BA33CC23ED57' : true, + 'DDF758753965C89E747CA6799902A045B22F473F654CEDB51B3C0CA0EA01BB51' : true, 'DE327172F9BCDA3DBD4E6EEFC759F3EE88FBC635BAD34D76E360541420CDC8BC' : true, 'DE411E4537133A4D436E0D730AE192277792AA1D0584E60B1CECCDC736F53407' : true, 'DEA472B5BED8DA9F6F5539F8DC66FB5340010F7316FB28055E14EA76E03BBE41' : true, + 'DEB6A31937F3D2822CFA6C563F00F107DB6A445596E8B775D989500FF2E09F0F' : true, 'DEC7DC8AB8ED70C1D2FB2875F0F99FA99FB53E6BED70CD47B244ABA2104DA5AD' : true, 'DEF20D4F0C0D98AE8C9786C364182CCD8990A834C96C1F0989AAE9ECAF33720F' : true, + 'DF03F73A71A568E6A05A7E9FCE240EC0254EE86E24790D6DFCCDC71A5763C27C' : true, 'DF0525A7807F3709BAD2DEC2ECC569A1D473F97F0C382C932DF726C79926DA0E' : true, 'DF4482289B54CB444569A5436AEEBEBFB348D966D2FBC8C5115376F3E5496303' : true, - 'DF533C33DB800394971D608B89269426D3A2F58B76F190229C0573985E4F7CB8' : true, 'DF7FBA4917800A850600F3E7BD4DD0A717F2649060B300F5AF3B1F490BD26536' : true, + 'DF86C03A5DE71075F0F3AEE3A0951A55321BAC33642847CD1EFA0334DBAAE148' : true, + 'DFB9975C6CB5E5E0A555789055A543460C93C34378BD0565339A0194D56CE58B' : true, + 'DFD291C1074E972A9FE6261BE6FFDDA85472A8AA7F543C867F53B7D8946478DB' : true, 'DFE29EDC6A77622D4963EAF8CEEAD0ED5DE393DD069425FE30175AD008D609DE' : true, 'E01A5251FAC16C537237EE4249874187E3BE3AF9B0F1D472E6C69E6C8B8832ED' : true, 'E09CD94E0A501BB4D25D5BBB02CCAE95A24D0BAF8CABADEC9D55A74B7D2C5BD8' : true, @@ -897,111 +906,102 @@ const X509ChainWhitelist = { 'E1176E46C4FA7841D94FC724013E3D192E7B414933F92CD50EA36C51617A2C60' : true, 'E1595A9AA15B24610100AEB57ED619460CA1D976B769B856398EADA5A01F952B' : true, 'E1A55E7ABA746B4A053359D13C91DCD7415F2CEECB7E87292DFD697213986946' : true, - 'E1A583C63BCEBAC1136939B65CBD0E6DBD7493EA45910275D56E0E2DE209D2BF' : true, 'E1C97EFF3C246073604F341DBB3CEC9683EB6692463D85C1D23FA5269D9F3FFD' : true, + 'E1CB2358E3FB5CE1135999465778BB5E6691353751FE577C1B032DF832532A8A' : true, 'E26F4C34273553354334DC7A22DC56A781F2491181799287CC91F12871FEB50D' : true, - 'E276249DEAEA8F9B735592C3355A2E3822F67A5979A3CCA988F98EBEEB2A8309' : true, - 'E276DC254DCFC8C0F2752221EE5D59EC0C86E714522A6600DB67A05E22E01740' : true, - 'E27966B8B9C67C751F9AB8315D0BD1CEE334D96A8C5F60C764070EF8B8FCE61A' : true, 'E297439120E6E2701069440EC321BA98A5CFF9EA3F407FF16185671E466B87F0' : true, 'E2D55EAADCF87AD1BD50E53B7168CCC08561F0172004C1EC4DC13D8166D1A313' : true, - 'E30234ADF36D445F582C956B26E63BB76FF13FE90048CE1F37B40285BAE6529D' : true, 'E32ECC9EEA662085C10C003A5C910D77A6DCC1E99BD187576EFDD1BFA84591C4' : true, + 'E335D8CABE2F4940CA80CA10A6BE55A138A163E1C56C281165FBA3FA601C61A9' : true, + 'E3570B254ED1BFACE2C2CFB35A3AF277C8F26A81D1212BEC92CFD84A35FCB53B' : true, 'E37314E72C7304D32336940ABB576DBD7BE3190CD9A5E8F87413CEEB7579D502' : true, 'E381DF6792973BFE322D23C6CF2A6C24A4ECFC77F43F03D2FC04EE39FAD7C683' : true, - 'E40B4275F6249EF4CDDE56EBB983AF4DE4C9A811B4095F8E9F700FA18C951759' : true, - 'E43EB6A898FEB796E084C684078E8683417373F468EB087D4130EC6BD7A8510A' : true, - 'E469E3D28BF6AB0280F989BA50C11FF4D9EE608BAD2282219A5C4E60C0AD348E' : true, 'E4D680D0579075DCA20740BD4EF6AA4CEFD5542727071005774421A247941B8D' : true, - 'E4F069C24D7162E3C94AB295EA33C8926BDDF79934CA28D8982A35650EB60B05' : true, + 'E549DACF42BED70415999CB677AD037F972087B39E6B2C20BBF2E3473AC8BB49' : true, + 'E5E61E81BD6BDB914235B1C227E3FEB83091ED8F453F0897035EA775A7DD9334' : true, + 'E5FA7806C1E6122EE6F7B008711DAF068DC6FDE60B2A5877DDEECA8A23F96586' : true, 'E692108B3683F3C6362DF92476D62BAE60687035B70B9119F962190C9C215B04' : true, 'E696A05D698717888181DFB7B903B380E42454076BA429EC8AB0FB58206AB166' : true, - 'E756F7776AE92525EABD29B4CE8963EDE748438DE24393263F2118D77CC77C74' : true, 'E7EB8B4D5DE598BED2B9C817AB7D42F1EC99F16640B8C673AF2152D42F5344C4' : true, - 'E7F4465713E093B4F7D970C89ED3A5E745457B80A974523648F07C6AAFCDC86C' : true, - 'EA64F2625FAFE2EC122B493D4754C2B090153F167213AB6F07A87C1D993E5292' : true, 'EA7AD4DE86B47BEC726BFE21172676F92E0C0BB86888417916CB3123086E84A1' : true, 'EAA0454F2BBEED65A2FC7AAB8F308982387BDF33E6B56A1F3203F70F2981083A' : true, - 'EB11019A7642C75F4DDC1DC9CF3B469BFB4C44B71C615693C73175F16DCA036C' : true, - 'EB17EADBF0EA09B71BADD853CED1E5170C3A2D9FDE4F5C4A0EEC93E44C4B442C' : true, + 'EAE734ABC9AB7F65DF19ABE693F0C1AA6AF5E9C76561F0779D523FA5ABC6A3B4' : true, 'EB59182D7ACE742ED7D7AEE751763EF9F09EDF68D1DDF765E80BE40A53AD0E10' : true, + 'EB6B1F16F70E3080F38E7ADDC7E3AB69164ECD068F5E8F15931575FDD62B0A64' : true, 'EB6D34EFBF063DCACDFB823734B9788D9FB5E22A48372B7EA8AAFED8046652E1' : true, + 'EB907252FF62CCF97B16796B9106686C4260E682878EFCA7721D37D6B8C83319' : true, 'EB98F744424597BB5AF5F209D20D161DB2682089271EC2662BE177D36A737FBA' : true, - 'EBABE928B643E1B9FD6F61D67ACC4BA6A9BFCC95927D31D265F701AC4613B9AE' : true, 'EBD2581C1B0224FBDA489A642503CF3D3306751C336A66EB1816989900DA52BE' : true, + 'EC173388B04C066ED8A36DB45C804E353EF6BEEC7BBDCEF4C28DEFDE917A0C5B' : true, 'EC3A708B75908F8EA0660EF8A9C14B07DAB3AECB71E96E87EB06BB317790A118' : true, 'EC521C3B04AF772AF812B63555A7C24BDA282C06EC619E1766CC346780EC6E04' : true, 'EC869ABCCE3A1C036F1AFABE5ECD4FDA581D16C0E81E16A2734E6004A55896BC' : true, - 'ECA7333D185C924CBADF8CD96EEFA90F63B12225555B3C72631C841AA37BA917' : true, - 'ECB0646FEF13F818B1ACD2A8AFE448F3B39EC0EF6F623175931C48DC386EAF73' : true, 'ED4D737C0BBE1DC2CD305D8A912D1C1D923C1C4325401D66349541F754233B53' : true, - 'ED918BDFDFCB9E4E679BC7C1938F9CE412AA85500BA3531FC550AD5213D5BDC7' : true, 'EDD929C40001C1ACDABD51797B63D689A0B80434FA323B4F7AD213AB8A530B8C' : true, + 'EDEEE393369C2968B2277F06C24CBB9ADFC6D3EAAB264C292A7963065C8FAA49' : true, + 'EE3B7480B691828ABEBECA3DB0EE96619F01E886FC959942F6AB7EB3D263A237' : true, + 'EE49B2B0E38A16743525D6CEE70CB71038D43094BC71BE2EEE861E4602B6D891' : true, 'EE5B8C42532363A48222B1493803B14EC2C98366CD0C5BA4126F468BA19C559D' : true, 'EE5D710097EAD11639F98940D1F32793ECC114F0408856CCB6536F1EF2366704' : true, 'EF0EE2FBF54D87B6AC02AEB88050155A27E1A60A5A8C4AC46FF24B529D912B04' : true, + 'F08A2008114880DE65D1C1A47D55DB0B1EC6029562BA7B8976A78507F4EB80B2' : true, + 'F094E7890A2B177AB1517C2EAA8D1DF0F69DB94633C4A510BC02CA8D71B36403' : true, + 'F096047E3E971271396DB89324E82438A446B4E85F86EDE684AD7DBB14B3C93A' : true, 'F09ECA7EC8BF7B582C42AEB4A0733A0D40FDFD28CEA2C70DA1BBCF1FF85E29FF' : true, 'F0BF33EE5C1D9A83A7BBDCDE95426DCD201D1C071CF1FB58CA4FE3776996A99F' : true, + 'F0DC85D554A245F0146851FB8FCAB6CE5F955E65ACCAAC92E875F8B8E1E2495A' : true, 'F0EDB0C989C20672BAFC51FA2710F3841BA5793BE379FC212D7ACC3AD4743455' : true, 'F1147FBF98A54E12693453EC571CE8B86C05D7FDF3995D775DFF135E10B9C520' : true, - 'F11BB294EAD89BC4AAB21DD82BA85FFA6573215720E347D687D6D5D89EE33EEF' : true, 'F153813F6CD126543E985CEFA06C8B978FE5D4825C189F58944DC0DE17D5A0E9' : true, 'F15E12419E936A907F201FD9D6D3DE2E01E5F8465AC4D8EDDCE1E58262183223' : true, + 'F1A9F7B5F76EC4E234A078662581DE91E76B1CF83C219986D1BEA3717E4513A6' : true, 'F1B73AEECC6698895051EE69179C3897A1DC398C2D72DDD720A29F9C9520457C' : true, + 'F1EC4F6CADD8B97B55AEF8AFDF69AA2261D10B641023C4F8CC895E5F26301D3E' : true, 'F205928C933AFF1F1A6411AB779CFAE3FAAF43754AB86735DB52F74DB1DA81D2' : true, - 'F20CBF1FC073F7E7DEBC38DFE2042E2CDC5D82898773D6283C680A3BC966BC02' : true, 'F22F96FB88C9D96104167D95B3AD8B5888C92680B0AD13DC785FD5AD3E19EDB7' : true, 'F234FBFD807A0302CBF855175C73ABF27C94915B95135E3146C0ED73662DE3F5' : true, 'F28C56AA368BC4F8DA6B77CF3F8D2A7EF4994BBDE7DF85AA40FF740DC004750B' : true, - 'F2C91876EDB36EAD7E4821C2A6581144F1E5A67B2DEF4A5E4AFDF79F5E1CC4D7' : true, - 'F35B9D7C54418022E6FD4FDFE88C3261FD138329A11C013AD640145D40BE934A' : true, 'F3926080B8F8289E7DCC479153999D4F459951765A0A22977F056D8249BF5FF5' : true, - 'F3CA880E8CF918E29D956A8306A2A0EB9CF76E82135F60A9885033E22B7874E8' : true, + 'F39D175463288D9639AE5C852B945D89ED858548F8621E5DDC29853E8C84BE36' : true, 'F3D480D69675A57DC2061544BF7F52B631BB02716680C0E5605413C9B2A6183F' : true, 'F402A9D58A73C40B396B5CE756EDFCA68257AC6D8DE80AA8217F16C97512C51B' : true, - 'F49BADFFBB2D2836A995A12E44ECF62E584F1B8D0740E0EDC7610C0C6765CDAA' : true, + 'F4F3D03488B8B699725AEBCF9033B73C8997AED2D4504891EE4FFAC3E7CB4272' : true, 'F513DC8D7F8B425FCF55E74BDCF2675EF2ABF98523E5226CF8A2391B0A36A919' : true, 'F55617B92584757BB516B19BFCBDA9B4A71237075487651831CD9C5F9C6F5F29' : true, - 'F5B19B2D5D880A4C1ADECA3D760FCB7E75FC2137B2EC99F3EEE034ADF788BADB' : true, 'F5CACF11F3673BFE76BC638692B907E7E1407AD77F3C8943CF4F4BF22A2D5137' : true, - 'F5D715B6BE56D1A677ECBF7C26B4D79716F5EC2D2E2EC323ABDFE3442F40BD31' : true, 'F5E43F516D61A0329F78A2560454B8346732A9420C172AC9983C0BEFFD8DEA0A' : true, - 'F5FAC17F4DDD973352CBCD311E21AE81EEFA06150CE85B8C32126D7F1661EDA0' : true, 'F605AA2BD611765748A88F933BCBCEC70272F6C6A1A4AC614C2D02D17DAC6CEC' : true, 'F6620F848AB3CFC1695D2AF5399FD8FDD8F2FEC43F73F2924DF78C1A26C22653' : true, - 'F6B9B7A36ADF7095D44420CCDCE4A739926841BC695ED40E78856D8F71D41257' : true, + 'F6D424B2B0304F80F9F57E9A501576769B75304FFB569A1118B9B0D5E72561C6' : true, 'F74D9E23F4CB53775CA60178347F2A029F77579000B21AA08EC62A1C2932348A' : true, 'F754352E819D0C33E6CFC06EECBB4356DB5D8BD1FD2591C7C817CCE662BE2BC4' : true, - 'F7FC63254BF2472575C6D5DEC8DDF02B24B6F1BDCE03D807B159A69820262D4A' : true, + 'F7835EBD5236BECAB435AE25E9D79BB389DFA8462D552965A2B901ED70B4FF79' : true, 'F805AE1FEDB2D94096F0D341B703ECD4975D773A179555DDC83D424F85578571' : true, 'F94C306978496ED2183DC7591DA0240B513527293E5D522CF7089530E4C58D29' : true, 'F961BA44302F5AF5DC4045A7E3989D4B77AD4BDD53DE92A45F39FE56947293BF' : true, + 'F99371163EC08FF74F0742422AC3108264DCCAAD1A731A5CD5CDCA9FAE8EAEE0' : true, + 'F9AA3378654B8DAE243713E502260C71E88F8AD2B7021072A02574D09E34D1A0' : true, 'F9E220AC82D672997DC20E9EE89BF0713BC4153FB5F2EBC8D9AC9EE35A6E494D' : true, - 'FA0E3BFAEEA2FBC6A9E4A33EB6F289EF6C35228008ABAD3878AC4B2C8E87F957' : true, - 'FA1B8F32DE3B7F4ACA8FEF5414B5D985FE3705D0E3371D4FE4AF46698B68B01B' : true, - 'FA500D7B8D9BED2323488F83C9A6093C012143DEE3E453C1F75738625571E708' : true, 'FA616BE68A75F14CA6331BD5BFDBE3840CE34CC3C3C98E3C8C3E10F027389F2F' : true, 'FA75601E87823F0B02F8764B29377F4EBB02A179051297597E93FB4B1F5FCAD5' : true, + 'FAA02D9B700650AAA34F4BDDA8882618BDBF954078A7B4796FD76B7961DE964C' : true, 'FAEDB6948B44BBBEB18CC3DE18788AD31CE938A2BA36BD84765BF47728C415E9' : true, 'FB067C05D337FC01FC0721FA712A9E1A4FFDE059A35F3B494D36FFE241107465' : true, 'FB1DF67EE132C7163167839175485C179E82024AD59EF806AF9D968A97F2ACA2' : true, 'FB3A5B27D3488E28ABA3F303A726C2F0440133025981816FEDF798E45B9B1751' : true, - 'FB52A9B5EB7A494C06FB5CE4BB4505F32D6C666931AF2A018E6066244802A00D' : true, 'FB7EF701469F77B6412100BB2D6399B1A574BB9610186FFFCC0119E14CB2021F' : true, 'FB81BF294DB8EDE0C4DFFB7F5528EB3EB406FE435A6D62E6894482D8B42CCC48' : true, - 'FBCC79E05CC135E183F4963C2A206F9DFDBC2DD0D379A743D5FB301741796921' : true, 'FBF769E6019DEA2724DB5768974B5D32E8A91F8045707B4F50552FE1D3BEAE4E' : true, 'FC072A7AD4E6E41680493AF4BEB98215D4D2F7CE040C95004BB3A1621A9DD513' : true, 'FCA9C3A036EA797D58CA26F793C98A9952E59D37C35E352B67A30D4F8F49FC7D' : true, - 'FCABE5BABEB2D2785BBA66B5D465FAF9F9A8E74E77AC1161273F49F4261F17B3' : true, - 'FCC12514DEB82E09AFF7A8B73DAC3CF80683D447101F048804D0B1100169D87E' : true, - 'FCF4BA663F0032118EADF9D327B65AB502C7A8B336462A397238884E9A28508E' : true, 'FDB416F216D943190D8CADA2EB8F138F77A99CB1BC1334246697D37D8C04AB38' : true, - 'FE4A5357D197340536C61A1493D6EB64732D628B4435BCF43A1D52BCC5BF4CFD' : true, + 'FDF0D11B28F98D542D2D0B2658C0CB0CB46E5E155398B8739AD968944B4C41FB' : true, + 'FE739A748FB17DAFB6CBA0DA5B2164B8E0435E8DA7FB85E7970BBE731B428631' : true, 'FEE9BBCB25431C59C14C72C963CEDF437D795B6BEFE79EBF262B7054B0E583A1' : true, - 'FEFEF80071B0D8E2B57D6601BB353A435A425EAA701827370C3585CE09F2CE50' : true, - 'FF7B4EA9730875FF721ACEB86B327F7A6FB57A203B061CC3A4048E1D68F828B9' : true, + 'FF3E77DFF8C24FE2DC89CE8757B6AE9ACBB838D35AEBDBD9A29D099E211380BB' : true, + 'FF5A1D7B021E92D968CCB4D6955A6A8449BF13D75D9EEB1CF36BEC3A178DB9DE' : true, 'FF8C4E466EBCD5BD1A16F83E6096501479D74D077F84F2EDEA264781DFD82270' : true, 'FFAE947BA6D3D7E8D31D04F02EEEE60601B0200ACDEBCB12AA5D617F650D5FD0' : true, + 'FFB09E8C7F4CCA88C213AF60CD7047B85A6085DA93C7C3C7D3B73C57FA05702F' : true, 'FFFB09720CCEF3A610BCB81EEF5FCD614C1602D4968A9DE8400C05256AEDC1ED' : true, } ; diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/fetch-source.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/fetch-source.js deleted file mode 100644 index 80c32c4..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/fetch-source.js +++ /dev/null @@ -1,161 +0,0 @@ -/* vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2 foldmethod=marker: */ - -/** - * HTTPS Everywhere Firefox Extension: https://www.eff.org/https-everywhere/ - * - * Licensed under the GPL v3+. - * - * @copyright Copyright (C) 2010-2013 Mike Perry <mikeperry@fscked.org> - * Peter Eckersley <pde@eff.org> - * and many others. - */ - -// Define https everywhere variable object that will act as a namespace, so that -// global namespace pollution is avoided, although technically not required for -// windows created by add-on. -// See: https://developer.mozilla.org/en-US/docs/Security_best_practices_in_extensions#Code_wrapping -if (!httpsEverywhere) { var httpsEverywhere = {}; } - -/** - * JS Object for fetching the XML source of rulesets. - * - * @author Pavel Kazakov <nullishzero@gmail.com> - */ -httpsEverywhere.fetchSource = { - // TODO: look into class constants - CC: Components.classes, - CI: Components.interfaces, - - // Constants for generating URL from which source will be fetched - BASE_SITE: 'https://gitweb.torproject.org/https-everywhere.git/plain/', - DIRECTORY: '/src/chrome/content/rules/', - HEAD_STRING: 'HEAD', - - /** - * Initializes the window to view source. - */ - init: function() { - var fs = httpsEverywhere.fetchSource; - - if("arguments" in window && window.arguments.length > 0) { - var filename = window.arguments[0].xmlName; - var id = window.arguments[0].GITCommitID; //GIT commit ID - var URL = fs.getURL(filename, id); - var source = fs.getSource(URL, filename, false); - } else { - // Should never happen - throw 'Invalid window arguments.'; - } - }, - - /** - * Generates a URL that can be used for viewing the ruleset source. - * - * @param filename name of ruleset to view, such as EFF.xml - * @param GITCommitID revision of ruleset - * - * @return string of URL - */ - getURL: function(filename, GITCommitID) { - var fs = httpsEverywhere.fetchSource; - return fs.BASE_SITE + fs.DIRECTORY + filename + "?h=" + GITCommitID; - }, - - /** - * Sends HTTP request to view ruleset source and updates the window with the - * ruleset source. - * - * @param URL HTTP request will be sent to this URL - * @param filename used for displaying ruleset source - * @param useHead whether send request to latest revision of ruleset - */ - getSource: function(URL, filename, useHead) { - var fs = httpsEverywhere.fetchSource; - fs.setFilenameText(filename); - fs.setPathText(URL); - - var req = fs.CC["@mozilla.org/xmlextras/xmlhttprequest;1"] - .createInstance(fs.CI.nsIXMLHttpRequest); - - // Use HTTP GET - req.open("GET", URL); - - // Clear User-Agent so request is pseudo-anonymous - req.setRequestHeader("User-Agent", ""); - - // handle asynchronous request - req.onreadystatechange = function(params) { - if (req.readyState == 4) { - - // HTTP Request was successful - if (req.status == 200) { - fs.setSourceText(req.responseText); - } else if (!useHead) { - // HTTP request was not successful and the request wasn't sent to - // get the latest revision. Therefore, if we can't fetch current - // revision (this project's revision might newer than lastest, for - // example), try to at least display the latest revision. - var URL = fs.getURL(filename, fs.HEAD_STRING); - fs.getSource(URL, filename, true); - } else { - // at least we tried... - fs.downloadFailed(); - } - } - }; - - req.send(); - }, - - /** - * Handle a download failure of ruleset. - */ - downloadFailed: function() { - document.getElementById("source-text").hidden = true; - document.getElementById("failure-label").hidden = false; - }, - - - /** - * Convenience method for setting ruleset source text. - * - * @param text ruleset source - */ - setSourceText: function(text) { - var textBox = document.getElementById("source-text"); - textBox.value = text; - }, - - /** - * Convenience method for setting filename text. - * - * @param text file name - */ - setFilenameText: function (text) { - var textLabel = document.getElementById("filename-text"); - textLabel.value = text; - }, - - /** - * Convenience method for setting the path (URL) that was used to fetch - * ruleset. - * - * @param text path text - */ - setPathText: function(text) { - var textLabel = document.getElementById("path-text"); - textLabel.value = text; - } -}; - -// TODO: Test resizing on mulitple platforms -// adjust window resizing -window.addEventListener("resize", function() { - var textBox = document.getElementById("source-text"); - // TODO: Move to constants - textBox.width = window.innerWidth - 100; - textBox.height = window.innerHeight - 150; -}, false); - -// hook event for init -window.addEventListener("load", httpsEverywhere.fetchSource.init, false); diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/fetch-source.xul b/data/extensions/https-everywhere-eff@eff.org/chrome/content/fetch-source.xul deleted file mode 100644 index caa0048..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/fetch-source.xul +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> - -<!DOCTYPE overlay SYSTEM "chrome://https-everywhere/locale/https-everywhere.dtd"> - -<dialog id="https-everywhere-fetch-xml" - xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" - xmlns:html="http://www.w3.org/1999/xhtml" - title="&https-everywhere.prefs.view_xml_source;" - persist="screenX screenY width height" - style="height:80%; resize:both;" - buttons="accept" - height="600" - width="650"> - - - <script type="application/x-javascript" src="fetch-source.js"/> - <box orient="horizontal"> - <label id="filename-label" value="&https-everywhere.source.filename;:"/> - <label id="filename-text"/> - </box> - <box orient="horizontal"> - <label id="path-label" value="URL:"/> - <label id="path-text"/> - </box> - <separator class="thin"/> - <textbox id="source-text" multiline="true" readonly="true" value="&https-everywhere.source.downloading;..."/> - <label id="failure-label" hidden="true" value="&https-everywhere.source.unable_to_download;"/> -</dialog> diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/preferences.css b/data/extensions/https-everywhere-eff@eff.org/chrome/content/preferences.css deleted file mode 100644 index 6b35c00..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/preferences.css +++ /dev/null @@ -1,11 +0,0 @@ -treechildren::-moz-tree-checkbox { /* css for unchecked cells */ - list-style-image: url("chrome://https-everywhere/skin/cross.png"); -} - -treechildren::-moz-tree-checkbox(checked) { /* css for checked cells */ - list-style-image: url("chrome://https-everywhere/skin/tick.png"); -} - -treechildren::-moz-tree-checkbox(undefined) { /* css for empty cells */ - list-style-image: url(""); -} diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/preferences.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/preferences.js deleted file mode 100644 index 4a61f0a..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/preferences.js +++ /dev/null @@ -1,278 +0,0 @@ -const CC = Components.classes; -const CI = Components.interfaces; -VERB=1; -DBUG=2; -INFO=3; -NOTE=4; -WARN=5; - -https_everywhere = CC["@eff.org/https-everywhere;1"] - .getService(Components.interfaces.nsISupports) - .wrappedJSObject; - -rulesets = []; - -const id_prefix = "he_enable"; -const pref_prefix = "extensions.https_everywhere."; -const GITID = https_everywhere.https_rules.GITCommitID; - -// Disable all rules. -function disable_all() { - for (var i in rulesets) { - rulesets[i].disable(); - } - - treeView.treebox.invalidate(); -} - -// Reset all rules to their default state. -function reset_defaults() { - https_everywhere.https_rules.resetRulesetsToDefaults() - treeView.treebox.invalidate(); -} - -function resetSelected() { - var start = {}; - var end = {}; - var st = document.getElementById('sites_tree'); - var sel = st.view.selection; - var numRanges = sel.getRangeCount(); - - for (var t = 0; t < numRanges; t++){ - sel.getRangeAt(t, start, end); - for (var v = start.value; v <= end.value; v++){ - var rs = treeView.rules[v]; - rs.clear(); - } - } -} - -function resetSelectedMenu() { - var start = {}; - var end = {}; - var st = document.getElementById('sites_tree'); - var sel = st.view.selection; - var numRanges = sel.getRangeCount(); - var menuitem = document.getElementById("revert_menuitem"); - - for (var t = 0; t < numRanges; t++){ - sel.getRangeAt(t, start, end); - for (var v = start.value; v <= end.value; v++){ - var rs = treeView.rules[v]; - if (rs.active !== rs.on_by_default) { - menuitem.disabled = false; - return; - } - } - } - menuitem.disabled = true; -} - -function toggleSelected() { - var start = {}; - var end = {}; - var st = document.getElementById('sites_tree'); - var sel = st.view.selection; - var numRanges = sel.getRangeCount(); - var menuitem = document.getElementById("revert_menuitem"); - - for (var t = 0; t < numRanges; t++){ - sel.getRangeAt(t, start, end); - for (var v = start.value; v <= end.value; v++){ - var rs = treeView.rules[v]; - rs.toggle(); - treeView.treebox.invalidateRow(v); - } - } -} - - -function viewXMLSource() { - var start = {}; - var end = {}; - var st = document.getElementById('sites_tree'); - var sel = st.view.selection; - var numRanges = sel.getRangeCount(); - var menuitem = document.getElementById("revert_menuitem"); - - for (var t = 0; t < numRanges; t++){ - sel.getRangeAt(t, start, end); - for (var v = start.value; v <= end.value; v++){ - var rs = treeView.rules[v]; - - //This *should* not violate TorButton's State Control, but someone should double check - //this code just in case - var aWin = CC['@mozilla.org/appshell/window-mediator;1'] - .getService(CI.nsIWindowMediator) - .getMostRecentWindow('navigator:browser'); - aWin.openDialog("chrome://https-everywhere/content/fetch-source.xul", - rs.xmlName, "chrome,centerscreen", - {xmlName: rs.xmlName, GITCommitID: GITID} ); - } - } -} - -function getValue(row, col) { - switch (col.id) { - case "site_col": - return row.name; - case "note_col": - return row.notes; - case "enabled_col": - return https_everywhere.https_rules.rulesetsByName[row.name].active; - /*var ruleActive = false; - try { - if(https_everywhere.rule_toggle_prefs.getBoolPref(row.name)) - ruleActive = true; - } catch(e) { - ruleActive = https_everywhere.https_rules.rulesetsByName[row.name].active; - } - return ruleActive;*/ - default: - return; - } -} - -function compareRules(a, b, col) { - var aval = getValue(a, col).toLowerCase(); - var bval = getValue(b, col).toLowerCase(); - var ret = 0; - if (aval < bval) { - ret = -1; - } else if (aval > bval) { - ret = 1; - } else { - ret = 0; - } - return ret; -} - -function https_prefs_init(doc) { - var st = document.getElementById('sites_tree'); - // Note: It takes several seconds to load all the rulesets, during which time - // Firefox is unresponsive. There are too many rulesets to reasonably browse - // in this view anyhow. Should start with an empty window and only show - // rulesets that match a search term the user types in. - https_everywhere.https_rules.loadAllRulesets(); - rulesets = Array.slice(https_everywhere.https_rules.rulesets); - // Sort the rulesets by name to avoid revealing which subset of rulesets has - // been visited, per https://trac.torproject.org/projects/tor/ticket/11655. - rulesets.sort(function(a, b) { - return a.name < b.name ? -1 : 1; - }); - - // GLOBAL VARIABLE! - treeView = { - rules: rulesets, - rowCount: rulesets.length, - getCellValue: function(row, col) { // site names - if (!this.rules[row]) return; - return getValue(this.rules[row], col); - }, - getCellText: function(row, col) { // activation indicator - return this.getCellValue(row, col); - }, - setCellValue: function(row, col, val) { // toggle a rule's activation - var rule = this.rules[row]; - - if (val == "true") { - rule.enable(); - } else { - rule.disable(); - } - - this.treebox.invalidateRow(row); - }, - isEditable: function(row, col) { - return (col.id == "enabled_col"); - }, - setTree: function(treebox) { - this.treebox = treebox; - }, - isContainer: function(row) { return false; }, - isSeparator: function(row) { return false; }, - isSorted: function() { return false; }, - getRowProperties: function(row, props) {}, - getColumnProperties: function(colid, col, props) {}, - getCellProperties: function(row, col, props) { - if ( (col.id == "enabled_col") && !(this.rules[row]) ) { - var atomS = CC["@mozilla.org/atom-service;1"]; - atomS = atomS.getService(CI.nsIAtomService); - // Starting with 22.0a1 there is no |props| available anymore. See: - // https://bugzilla.mozilla.org/show_bug.cgi?id=407956. Looking at the - // patch the following seems to work, though. - if (!props) { - return "undefined"; - } - props.AppendElement( atomS.getAtom("undefined") ); - } - }, - getLevel: function(row) { return 0; }, - getImageSrc: function(row, col) { return null; }, - search: function(query) { - var new_rules = []; - query = query.value.toLowerCase().replace(/^\s+|\s+$/g, ""); - - for (var i in rulesets) { - var rule_name = rulesets[i].name.toLowerCase(); - if ( rule_name.indexOf(query) != -1 ) { - new_rules.push(rulesets[i]); - } - } - - this.rules = new_rules; - this.rowCount = new_rules.length; - this.treebox.invalidate(); - this.treebox.scrollToRow(rulesets[0]); - }, - cycleHeader: function (col) { - var columnName; - var order = (col.element.getAttribute("sortDirection") === "ascending" ? -1 : 1); - - var compare = function (a, b) { - return compareRules(a, b, col) * order; - }; - rulesets.sort(compare); - this.rules.sort(compare); - - var cols = st.getElementsByTagName("treecol"); - for (var i = 0; i < cols.length; i++) { - cols[i].removeAttribute("sortDirection"); - } - col.element.setAttribute("sortDirection", order === 1 ? "ascending" : "descending"); - this.treebox.invalidate(); - } - }; - - st.view = treeView; -} - -function window_opener(uri) { - // we don't use window.open, because we need to work around TorButton's state control - if(typeof gBrowser == "undefined"){ - var window = CC["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); - var browserWindow = window.getMostRecentWindow("navigator:browser").getBrowser(); - var newTab = browserWindow.addTab(uri, null, null); - browserWindow.selectedTab = newTab; - - } - else - gBrowser.selectedTab = gBrowser.addTab(uri); -} - -function https_prefs_accept() { - // This is *horrid*, but - // https://developer.mozilla.org/en/working_with_windows_in_chrome_code#Accessing_the_elements_of_the_top-level_document_from_a_child_window - var outer = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) - .getInterface(Components.interfaces.nsIWebNavigation) - .QueryInterface(Components.interfaces.nsIDocShellTreeItem) - .rootTreeItem - .QueryInterface(Components.interfaces.nsIInterfaceRequestor) - .getInterface(Components.interfaces.nsIDOMWindow); - - if (outer) outer.close(); - else alert("no outer space"); - - return true; // https://developer.mozilla.org/en/XUL/dialog#a-ondialogaccept - // also close things if there is no out meta prefs window -} diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/preferences.xul b/data/extensions/https-everywhere-eff@eff.org/chrome/content/preferences.xul deleted file mode 100644 index da722b3..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/preferences.xul +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> -<?xml-stylesheet href="chrome://https-everywhere/content/preferences.css" type="text/css"?> - -<!DOCTYPE overlay SYSTEM "chrome://https-everywhere/locale/https-everywhere.dtd"> - -<dialog id="https-everywhere-prefs" - xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" - xmlns:html="http://www.w3.org/1999/xhtml" - buttons="accept,extra1,extra2" - buttonlabelextra1="&https-everywhere.prefs.disable_all;" - ondialogextra1="disable_all();" - buttonlabelextra2="&https-everywhere.prefs.reset_defaults;" - ondialogextra2="reset_defaults();" - title="&https-everywhere.prefs.title;" - persist="screenX screenY width height" - style="height:80%; resize:both;" - height="600" - width="650" - onload="https_prefs_init(document)" - ondialogaccept="https_prefs_accept()"> - - <script type="application/x-javascript" src="preferences.js"/> - - <popupset> - <menupopup id="tree-contextmenu" onpopupshowing="resetSelectedMenu()"> - <menuitem label="&https-everywhere.prefs.reset_default;" oncommand="resetSelected();" id="revert_menuitem"/> - <menuitem label="&https-everywhere.prefs.toggle;" oncommand="toggleSelected();"/> - <menuitem label="&https-everywhere.prefs.view_xml_source;" oncommand="viewXMLSource();"/> - </menupopup> - </popupset> - - <groupbox flex="1"> - <caption label="&https-everywhere.prefs.list_caption;" - align="center"/> - <vbox> - &https-everywhere.prefs.search;: <textbox id="tree_search" oninput="treeView.search(this);" /> - </vbox> - <tree id="sites_tree" editable="true" flex="1" context="tree-contextmenu"> - <treecols> - <treecol id="enabled_col" type="checkbox" label="&https-everywhere.prefs.enabled;" - editable="true" class="sortDirectionIndicator" persist="sortDirection width"/> - <splitter class="tree-splitter"/> - <treecol id="site_col" label="&https-everywhere.prefs.site;" flex="1" editable="false" class="sortDirectionIndicator" persist="sortDirection width"/> - <splitter class="tree-splitter"/> - <treecol id="note_col" label="&https-everywhere.prefs.notes;" flex="1" editable="false" class="sortDirectionIndicator" persist="sortDirection width"/> - </treecols> - <treechildren/> - </tree> - </groupbox> - <separator class="thin"/> - <vbox> - &https-everywhere.prefs.ruleset_howto; - <separator class="thin"/> - <label id="ruleset link" - value="&https-everywhere.prefs.here_link;" - style="color: blue; cursor:hand; text-decoration:underline;" - onmouseover="event.target.style.cursor='pointer'" - onmouseout="event.target.style.cursor='default'" - onclick="window_opener('https://www.eff.org/https-everywhere/rulesets')"/>. - </vbox> -</dialog> diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests-status.css b/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests-status.css deleted file mode 100644 index 30dad18..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests-status.css +++ /dev/null @@ -1,14 +0,0 @@ -#ruleset-tests-status { - padding: 20px; -} -#wrapper { - text-align: center; -} -#progess-bar { - width: 300px; - height: 20px; -} -#log { - width: 400px; - height: 300px; -} diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests-status.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests-status.js deleted file mode 100644 index 0bee33e..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests-status.js +++ /dev/null @@ -1,31 +0,0 @@ -var HTTPSEverywhere = null; - -function updateStatusBar(current_test, total_tests) { - var labelText = "Test "+current_test+" of "+total_tests; - document.getElementById("progress-bar-label").value = labelText; - - var percent = current_test / total_tests; - document.getElementById("progress-bar").value = percent; -} - -function updateLog(msg) { - document.getElementById("log").value += msg+'\n'; -} - -function cancel() { - updateLog("Canceling early ..."); - HTTPSEverywhere.httpseRulesetTests.cancel = true; -} - -function start() { - HTTPSEverywhere = Components.classes["@eff.org/https-everywhere;1"] - .getService(Components.interfaces.nsISupports) - .wrappedJSObject; - - HTTPSEverywhere.httpseRulesetTests.updateStatusBar = updateStatusBar; - HTTPSEverywhere.httpseRulesetTests.updateLog = updateLog; - HTTPSEverywhere.httpseRulesetTests.cancel = false; - - updateLog("Starting ruleset tests ..."); - HTTPSEverywhere.httpseRulesetTests.testRunner(); -} diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests-status.xul b/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests-status.xul deleted file mode 100644 index 0efcd5d..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests-status.xul +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> -<?xml-stylesheet href="ruleset-tests-status.css" type="text/css"?> -<!DOCTYPE window SYSTEM "chrome://https-everywhere/locale/https-everywhere.dtd"> -<window id="ruleset-tests-status" - xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" - xmlns:html="http://www.w3.org/1999/xhtml" - title="&https-everywhere.ruleset-tests.status_title;" - > - - <script type="application/x-javascript" src="ruleset-tests-status.js" /> - - <commandgroup> - <command id="cancel" oncommand="cancel();" /> - <command id="start" oncommand="start();" /> - </commandgroup> - - <html:div id="wrapper"> - <vbox flex="1" style="width:100%"> - <label id="progress-bar-label" value="Click Start to start the tests"></label> - - <spacer flex="1"/> - - <progressmeter id="progress-bar" mode="determined" value="0" /> - - <spacer flex="1"/> - - <textbox id="log" multiline="true" readonly="true" value="" /> - - <spacer flex="1"/> - - <button - id="cancel-button" - label="&https-everywhere.ruleset-tests.status_cancel_button;" - command="cancel" /> - - <button - id="start-button" - label="&https-everywhere.ruleset-tests.status_start_button;" - command="start" /> - </vbox> - </html:div> -</window> - diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests.js b/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests.js deleted file mode 100644 index f4eda10..0000000 --- a/data/extensions/https-everywhere-eff@eff.org/chrome/content/ruleset-tests.js +++ /dev/null @@ -1,189 +0,0 @@ -// load the HTTPS Everywhere component -var HTTPSEverywhere = null; -try { - HTTPSEverywhere = Components.classes["@eff.org/https-everywhere;1"] - .getService(Components.interfaces.nsISupports) - .wrappedJSObject; -} catch(e) { - // HTTPS Everywhere doesn't seem to be installed -} - -// attach testRunner to the HTTPS Everywhere component so that status.js can run it -if(HTTPSEverywhere) { - HTTPSEverywhere.httpseRulesetTests = { - testRunner: testRunner - }; -} - -function openStatus() { - // make sure mixed content blocking preferences are correct - Services.prefs.setBoolPref("security.mixed_content.block_display_content", false); - Services.prefs.setBoolPref("security.mixed_content.block_active_content", true); - - // open the status tab - var statusTab = gBrowser.addTab('chrome://https-everywhere/content/ruleset-tests-status.xul'); - gBrowser.selectedTab = statusTab; -} - -// FIXME use a class rather than global state -var left_star = new RegExp(/^\*\./); // *.example.com -var accepted_test_targets = {} - -function addTestTarget(urls, target, ruleset_ids) { - // Add one target and associated metadata to the list of - // URLs to be tested, performing housekeeping along the way - var active_ids = []; - if (target in accepted_test_targets) return; - - for (var n = 0; n < ruleset_ids.length; n++) { - var rs_id = ruleset_ids[n]; - var rs = HTTPSEverywhere.https_rules.rulesetsByID[rs_id]; - if (rs.active) { active_ids.push(rs_id) }; - } - // Some rulesets that might rewrite this target, let's test them - if (active_ids.length > 0) { - urls.push({ - url: 'http://'+target, - target: target, - ruleset_ids: active_ids - }); - } -} - -function testRunner() { - Components.utils.import("resource://gre/modules/PopupNotifications.jsm"); - - const numTabs = 6; - var finished = false; - var output = []; - var urls = []; - var num = 0; - var targets_to_ids = HTTPSEverywhere.https_rules.targets; - var ruleset_ids; - accepted_test_targets = {}; // reset each time - - // we need every ruleset loaded from DB to check if it's active - HTTPSEverywhere.https_rules.loadAllRulesets(); - - for(var target in targets_to_ids) { - ruleset_ids = targets_to_ids[target]; - if(target.indexOf("*") == -1) { - addTestTarget(urls, target, ruleset_ids); - } else { - // target is like *.example.wildcard.com, or www.example.* - // let's see what we can do... - var t = target.replace(left_star, "www."); - if (t.indexOf("*") == -1) { - addTestTarget(urls, t, ruleset_ids); - } - } - } - - function test() { - var i; - - HTTPSEverywhere.httpseRulesetTests.updateStatusBar(num, urls.length); - - // start loading all the tabs - window.focus - for(i=0; i<numTabs; i++) { - newTab(num); - } - } - - function newTab(number) { - num +=1; - // start a test in this tab - if(urls.length) { - - // open a new tab - var tab = gBrowser.addTab(urls[number].url); - - // wait for the page to load - var intervalId = window.setTimeout(function(){ - - // detect mixed content blocker - if(PopupNotifications.getNotification("mixed-content-blocked", gBrowser.getBrowserForTab(tab))) { - // build output to log - ruleset_xmls = ''; - for(let i=0; i < urls[number].ruleset_ids.length; i++) { - ruleset_xmls += urls[number].ruleset_ids[i].xmlName + ', '; - } - if(ruleset_xmls != '') - ruleset_xmls = ruleset_xmls.substring(ruleset_xmls.length-2, 2); - var output = 'MCB triggered: '+urls[number].url+' ('+ruleset_xmls+')'; - - HTTPSEverywhere.httpseRulesetTests.updateLog(output); - } - - // close this tab, and open another - closeTab(tab); - - }, 10000); - - } else { - - //to run if urls is empty - if (!finished) { - finished = true; - window.setTimeout(function(){ - gBrowser.removeCurrentTab(); - }, 10000); - } - } - } - - //closes tab - function closeTab(tab) { - HTTPSEverywhere.httpseRulesetTests.updateStatusBar(num, urls.length); - - gBrowser.selectedTab = tab; - gBrowser.removeCurrentTab(); - - // open a new tab, if the tests haven't been canceled - if(!HTTPSEverywhere.httpseRulesetTests.cancel) { - newTab(num); - } - } - - //manages write out of output mochilog.txt, which contains sites that trigger mcb - function writeout(weburl) { - - //initialize file - var file = Components.classes["@mozilla.org/file/directory_service;1"]. - getService(Components.interfaces.nsIProperties). - get("Home", Components.interfaces.nsIFile); - writeoutfile = "mochilog.txt"; - file.append(writeoutfile); - - //create file if it does not already exist - if(!file.exists()) { - file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420); - } - - //initialize output stream - var stream = Components.classes["@mozilla.org/network/file-output-stream;1"] - .createInstance(Components.interfaces.nsIFileOutputStream); - - //permissions are set to append (will not delete existing contents) - stream.init(file, 0x02 | 0x08 | 0x10, 0666, 0); - - var content = weburl + "\n"; - - //Deal with ascii text and write out - var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"]. - createInstance(Components.interfaces.nsIConverterOutputStream); - converter.init(stream, "UTF-8", 0, 0); - converter.writeString(content); - converter.close(); - - //alternative write out if ascii is not a concern - //stream.write(content,content.length); - //stream.close(); - - } - test(); -} - - - diff --git a/data/extensions/https-everywhere-eff@eff.org/chrome/content/rulesets.sqlite b/data/extensions/https-everywhere-eff@eff.org/chrome/content/rulesets.sqlite new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/data/extensions/https-everywhere-eff@eff.org/chrome/content/rulesets.sqlite |