Bug 1498410 - Part 3 - Export Screenshots 35.0.0 (code excluding translations and Raven upgrade); r=aswan,ianbicking
☠☠ backed out by b2cd2ffe4ec8 ☠ ☠
authorJared Hirsch <ohai@6a68.net>
Mon, 15 Oct 2018 20:10:31 +0000
changeset 499774 426257ad4b83e3cffc628f76ae8bd55c2fa4fbaf
parent 499773 909a38c04700e32793a82e92a1b35aa182cae276
child 499775 01fa6937f05fc51562205eac8e895c62324452f8
push id1864
push userffxbld-merge
push dateMon, 03 Dec 2018 15:51:40 +0000
treeherdermozilla-release@f040763d99ad [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersaswan, ianbicking
bugs1498410
milestone64.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1498410 - Part 3 - Export Screenshots 35.0.0 (code excluding translations and Raven upgrade); r=aswan,ianbicking MozReview-Commit-ID: IF010Y5ERks Differential Revision: https://phabricator.services.mozilla.com/D8505
browser/extensions/screenshots/assertIsBlankDocument.js
browser/extensions/screenshots/assertIsTrusted.js
browser/extensions/screenshots/background/analytics.js
browser/extensions/screenshots/background/auth.js
browser/extensions/screenshots/background/communication.js
browser/extensions/screenshots/background/deviceInfo.js
browser/extensions/screenshots/background/main.js
browser/extensions/screenshots/background/selectorLoader.js
browser/extensions/screenshots/background/senderror.js
browser/extensions/screenshots/background/startBackground.js
browser/extensions/screenshots/background/takeshot.js
browser/extensions/screenshots/blank.html
browser/extensions/screenshots/blobConverters.js
browser/extensions/screenshots/bootstrap.js
browser/extensions/screenshots/build/buildSettings.js
browser/extensions/screenshots/build/inlineSelectionCss.js
browser/extensions/screenshots/build/onboardingCss.js
browser/extensions/screenshots/build/onboardingHtml.js
browser/extensions/screenshots/build/selection.js
browser/extensions/screenshots/build/shot.js
browser/extensions/screenshots/build/thumbnailGenerator.js
browser/extensions/screenshots/catcher.js
browser/extensions/screenshots/clipboard.js
browser/extensions/screenshots/domainFromUrl.js
browser/extensions/screenshots/experiments/screenshots/api.js
browser/extensions/screenshots/experiments/screenshots/schema.json
browser/extensions/screenshots/icons/back-highlight.svg
browser/extensions/screenshots/icons/back.svg
browser/extensions/screenshots/icons/cancel.svg
browser/extensions/screenshots/icons/cloud.svg
browser/extensions/screenshots/icons/copied-notification.svg
browser/extensions/screenshots/icons/copy.svg
browser/extensions/screenshots/icons/done.svg
browser/extensions/screenshots/icons/download.svg
browser/extensions/screenshots/icons/help-16.svg
browser/extensions/screenshots/icons/icon-highlight-32-v2.svg
browser/extensions/screenshots/icons/icon-v2.svg
browser/extensions/screenshots/icons/icon-welcome-face-without-eyes.svg
browser/extensions/screenshots/icons/menu-fullpage.svg
browser/extensions/screenshots/icons/menu-myshot-white.svg
browser/extensions/screenshots/icons/menu-myshot.svg
browser/extensions/screenshots/icons/menu-visible.svg
browser/extensions/screenshots/icons/onboarding-1.png
browser/extensions/screenshots/icons/onboarding-2.png
browser/extensions/screenshots/icons/onboarding-3.png
browser/extensions/screenshots/icons/onboarding-4.png
browser/extensions/screenshots/icons/onboarding-5.png
browser/extensions/screenshots/icons/onboarding-6.png
browser/extensions/screenshots/install.rdf
browser/extensions/screenshots/log.js
browser/extensions/screenshots/makeUuid.js
browser/extensions/screenshots/manifest.json
browser/extensions/screenshots/moz.build
browser/extensions/screenshots/onboarding/slides.html
browser/extensions/screenshots/onboarding/slides.js
browser/extensions/screenshots/randomString.js
browser/extensions/screenshots/selector/callBackground.js
browser/extensions/screenshots/selector/documentMetadata.js
browser/extensions/screenshots/selector/shooter.js
browser/extensions/screenshots/selector/ui.js
browser/extensions/screenshots/selector/uicontrol.js
browser/extensions/screenshots/selector/util.js
browser/extensions/screenshots/sitehelper.js
browser/extensions/screenshots/test/browser/browser.ini
browser/extensions/screenshots/test/browser/browser_screenshots_ui_check.js
browser/extensions/screenshots/test/browser/head.js
browser/extensions/screenshots/webextension/assertIsBlankDocument.js
browser/extensions/screenshots/webextension/assertIsTrusted.js
browser/extensions/screenshots/webextension/background/analytics.js
browser/extensions/screenshots/webextension/background/auth.js
browser/extensions/screenshots/webextension/background/communication.js
browser/extensions/screenshots/webextension/background/deviceInfo.js
browser/extensions/screenshots/webextension/background/main.js
browser/extensions/screenshots/webextension/background/selectorLoader.js
browser/extensions/screenshots/webextension/background/senderror.js
browser/extensions/screenshots/webextension/background/startBackground.js
browser/extensions/screenshots/webextension/background/takeshot.js
browser/extensions/screenshots/webextension/blank.html
browser/extensions/screenshots/webextension/blobConverters.js
browser/extensions/screenshots/webextension/build/buildSettings.js
browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
browser/extensions/screenshots/webextension/build/onboardingCss.js
browser/extensions/screenshots/webextension/build/onboardingHtml.js
browser/extensions/screenshots/webextension/build/selection.js
browser/extensions/screenshots/webextension/build/shot.js
browser/extensions/screenshots/webextension/build/thumbnailGenerator.js
browser/extensions/screenshots/webextension/catcher.js
browser/extensions/screenshots/webextension/clipboard.js
browser/extensions/screenshots/webextension/domainFromUrl.js
browser/extensions/screenshots/webextension/icons/back-highlight.svg
browser/extensions/screenshots/webextension/icons/back.svg
browser/extensions/screenshots/webextension/icons/cancel.svg
browser/extensions/screenshots/webextension/icons/cloud.svg
browser/extensions/screenshots/webextension/icons/copied-notification.svg
browser/extensions/screenshots/webextension/icons/copy.svg
browser/extensions/screenshots/webextension/icons/done.svg
browser/extensions/screenshots/webextension/icons/download.svg
browser/extensions/screenshots/webextension/icons/help-16.svg
browser/extensions/screenshots/webextension/icons/icon-highlight-32-v2.svg
browser/extensions/screenshots/webextension/icons/icon-v2.svg
browser/extensions/screenshots/webextension/icons/icon-welcome-face-without-eyes.svg
browser/extensions/screenshots/webextension/icons/menu-fullpage.svg
browser/extensions/screenshots/webextension/icons/menu-myshot-white.svg
browser/extensions/screenshots/webextension/icons/menu-myshot.svg
browser/extensions/screenshots/webextension/icons/menu-visible.svg
browser/extensions/screenshots/webextension/icons/onboarding-1.png
browser/extensions/screenshots/webextension/icons/onboarding-2.png
browser/extensions/screenshots/webextension/icons/onboarding-3.png
browser/extensions/screenshots/webextension/icons/onboarding-4.png
browser/extensions/screenshots/webextension/icons/onboarding-5.png
browser/extensions/screenshots/webextension/log.js
browser/extensions/screenshots/webextension/makeUuid.js
browser/extensions/screenshots/webextension/manifest.json
browser/extensions/screenshots/webextension/onboarding/slides.html
browser/extensions/screenshots/webextension/onboarding/slides.js
browser/extensions/screenshots/webextension/randomString.js
browser/extensions/screenshots/webextension/selector/callBackground.js
browser/extensions/screenshots/webextension/selector/documentMetadata.js
browser/extensions/screenshots/webextension/selector/shooter.js
browser/extensions/screenshots/webextension/selector/ui.js
browser/extensions/screenshots/webextension/selector/uicontrol.js
browser/extensions/screenshots/webextension/selector/util.js
browser/extensions/screenshots/webextension/sitehelper.js
rename from browser/extensions/screenshots/webextension/assertIsBlankDocument.js
rename to browser/extensions/screenshots/assertIsBlankDocument.js
rename from browser/extensions/screenshots/webextension/assertIsTrusted.js
rename to browser/extensions/screenshots/assertIsTrusted.js
rename from browser/extensions/screenshots/webextension/background/analytics.js
rename to browser/extensions/screenshots/background/analytics.js
--- a/browser/extensions/screenshots/webextension/background/analytics.js
+++ b/browser/extensions/screenshots/background/analytics.js
@@ -1,9 +1,9 @@
-/* globals main, auth, catcher, deviceInfo, communication, log */
+/* globals main, auth, browser, catcher, deviceInfo, communication, log */
 
 "use strict";
 
 this.analytics = (function() {
   const exports = {};
 
   let telemetryPrefKnown = false;
   let telemetryEnabled;
@@ -123,24 +123,32 @@ this.analytics = (function() {
         flushEvents();
       }, EVENT_BATCH_DURATION);
     }
     // This function used to return a Promise that was not used at any of the
     // call sites; doing this simply maintains that interface.
     return Promise.resolve();
   };
 
+  exports.incrementCount = function(scalar) {
+    const allowedScalars = ["download", "upload", "copy"];
+    if (!allowedScalars.includes(scalar)) {
+      const err = `incrementCount passed an unrecognized scalar ${scalar}`;
+      log.warn(err);
+      return Promise.resolve();
+    }
+    return browser.telemetry.scalarAdd(`screenshots.${scalar}`, 1).catch(err => {
+      log.warn(`incrementCount failed with error: ${err}`);
+    });
+  };
+
   exports.refreshTelemetryPref = function() {
-    return communication.sendToBootstrap("isTelemetryEnabled").then((result) => {
+    return browser.telemetry.canUpload().then((result) => {
       telemetryPrefKnown = true;
-      if (result === communication.NO_BOOTSTRAP) {
-        telemetryEnabled = true;
-      } else {
-        telemetryEnabled = result;
-      }
+      telemetryEnabled = result;
     }, (error) => {
       // If there's an error reading the pref, we should assume that we shouldn't send data
       telemetryPrefKnown = true;
       telemetryEnabled = false;
       throw error;
     });
   };
 
rename from browser/extensions/screenshots/webextension/background/auth.js
rename to browser/extensions/screenshots/background/auth.js
--- a/browser/extensions/screenshots/webextension/background/auth.js
+++ b/browser/extensions/screenshots/background/auth.js
@@ -6,29 +6,36 @@
 this.auth = (function() {
   const exports = {};
 
   let registrationInfo;
   let initialized = false;
   let authHeader = null;
   let sentryPublicDSN = null;
   let abTests = {};
+  let accountId = null;
 
-  const registrationInfoFetched = catcher.watchPromise(browser.storage.local.get(["registrationInfo", "abTests"]).then((result) => {
-    if (result.abTests) {
-      abTests = result.abTests;
-    }
-    if (result.registrationInfo) {
-      registrationInfo = result.registrationInfo;
-    } else {
+  const fetchStoredInfo = catcher.watchPromise(
+    browser.storage.local.get(["registrationInfo", "abTests"]).then((result) => {
+      if (result.abTests) {
+        abTests = result.abTests;
+      }
+      if (result.registrationInfo) {
+        registrationInfo = result.registrationInfo;
+      }
+  }));
+
+  function getRegistrationInfo() {
+    if (!registrationInfo) {
       registrationInfo = generateRegistrationInfo();
       log.info("Generating new device authentication ID", registrationInfo);
       browser.storage.local.set({registrationInfo});
     }
-  }));
+    return registrationInfo;
+  }
 
   exports.getDeviceId = function() {
     return registrationInfo && registrationInfo.deviceId;
   };
 
   function generateRegistrationInfo() {
     const info = {
       deviceId: `anon${makeUuid()}`,
@@ -72,87 +79,95 @@ this.auth = (function() {
         deviceInfo: JSON.stringify(deviceInfo())
       }));
     });
   }
 
   function login(options) {
     const { ownershipCheck, noRegister } = options || {};
     return new Promise((resolve, reject) => {
-      const loginUrl = main.getBackend() + "/api/login";
-      // TODO: replace xhr with Fetch #2261
-      const req = new XMLHttpRequest();
-      req.open("POST", loginUrl);
-      req.onload = catcher.watchFunction(() => {
-        if (req.status === 404) {
-          if (noRegister) {
-            resolve(false);
+      return fetchStoredInfo.then(() => {
+        const registrationInfo = getRegistrationInfo();
+        const loginUrl = main.getBackend() + "/api/login";
+        // TODO: replace xhr with Fetch #2261
+        const req = new XMLHttpRequest();
+        req.open("POST", loginUrl);
+        req.onload = catcher.watchFunction(() => {
+          if (req.status === 404) {
+            if (noRegister) {
+              resolve(false);
+            } else {
+              resolve(register());
+            }
+          } else if (req.status >= 300) {
+            log.warn("Error in response:", req.responseText);
+            const exc = new Error("Could not log in: " + req.status);
+            exc.popupMessage = "LOGIN_ERROR";
+            analytics.sendEvent("login-failed", `bad-response-${req.status}`);
+            reject(exc);
+          } else if (req.status === 0) {
+            const error = new Error("Could not log in, server unavailable");
+            error.popupMessage = "LOGIN_CONNECTION_ERROR";
+            analytics.sendEvent("login-failed", "connection-error");
+            reject(error);
           } else {
-            resolve(register());
+            initialized = true;
+            const jsonResponse = JSON.parse(req.responseText);
+            log.info("Screenshots logged in");
+            analytics.sendEvent("login");
+            saveAuthInfo(jsonResponse);
+            if (ownershipCheck) {
+              resolve({isOwner: jsonResponse.isOwner});
+            } else {
+              resolve(true);
+            }
           }
-        } else if (req.status >= 300) {
-          log.warn("Error in response:", req.responseText);
-          const exc = new Error("Could not log in: " + req.status);
-          exc.popupMessage = "LOGIN_ERROR";
-          analytics.sendEvent("login-failed", `bad-response-${req.status}`);
-          reject(exc);
-        } else if (req.status === 0) {
-          const error = new Error("Could not log in, server unavailable");
-          error.popupMessage = "LOGIN_CONNECTION_ERROR";
+        });
+        req.onerror = catcher.watchFunction(() => {
           analytics.sendEvent("login-failed", "connection-error");
-          reject(error);
-        } else {
-          initialized = true;
-          const jsonResponse = JSON.parse(req.responseText);
-          log.info("Screenshots logged in");
-          analytics.sendEvent("login");
-          saveAuthInfo(jsonResponse);
-          if (ownershipCheck) {
-            resolve({isOwner: jsonResponse.isOwner});
-          } else {
-            resolve(true);
-          }
-        }
+          const exc = new Error("Connection failed");
+          exc.url = loginUrl;
+          exc.popupMessage = "CONNECTION_ERROR";
+          reject(exc);
+        });
+        req.setRequestHeader("content-type", "application/json");
+        req.send(JSON.stringify({
+          deviceId: registrationInfo.deviceId,
+          secret: registrationInfo.secret,
+          deviceInfo: JSON.stringify(deviceInfo()),
+          ownershipCheck,
+        }));
       });
-      req.onerror = catcher.watchFunction(() => {
-        analytics.sendEvent("login-failed", "connection-error");
-        const exc = new Error("Connection failed");
-        exc.url = loginUrl;
-        exc.popupMessage = "CONNECTION_ERROR";
-        reject(exc);
-      });
-      req.setRequestHeader("content-type", "application/json");
-      req.send(JSON.stringify({
-        deviceId: registrationInfo.deviceId,
-        secret: registrationInfo.secret,
-        deviceInfo: JSON.stringify(deviceInfo()),
-        ownershipCheck
-      }));
     });
   }
 
   function saveAuthInfo(responseJson) {
+    accountId = responseJson.accountId;
     if (responseJson.sentryPublicDSN) {
       sentryPublicDSN = responseJson.sentryPublicDSN;
     }
     if (responseJson.authHeader) {
       authHeader = responseJson.authHeader;
       if (!registrationInfo.registered) {
         registrationInfo.registered = true;
         catcher.watchPromise(browser.storage.local.set({registrationInfo}));
       }
     }
     if (responseJson.abTests) {
       abTests = responseJson.abTests;
       catcher.watchPromise(browser.storage.local.set({abTests}));
     }
   }
 
-  exports.getDeviceId = function() {
-    return registrationInfo.deviceId;
+  exports.maybeLogin = function() {
+    if (!registrationInfo) {
+      return Promise.resolve();
+    }
+
+    return exports.authHeaders();
   };
 
   exports.authHeaders = function() {
     let initPromise = Promise.resolve();
     if (!initialized) {
       initPromise = login();
     }
     return initPromise.then(() => {
@@ -168,32 +183,38 @@ this.auth = (function() {
     return sentryPublicDSN || buildSettings.defaultSentryDsn;
   };
 
   exports.getAbTests = function() {
     return abTests;
   };
 
   exports.isRegistered = function() {
-    return registrationInfo.registered;
+    return registrationInfo && registrationInfo.registered;
   };
 
   communication.register("getAuthInfo", (sender, ownershipCheck) => {
-    return registrationInfoFetched.then(() => {
-      return exports.authHeaders();
-    }).then((authHeaders) => {
-      let info = registrationInfo;
-      if (info.registered) {
-        return login({ownershipCheck}).then((result) => {
-          return {
-            isOwner: result && result.isOwner,
-            deviceId: registrationInfo.deviceId,
-            authHeaders
-          };
-        });
+    return fetchStoredInfo.then(() => {
+      // If a device id was never generated, report back accordingly.
+      if (!registrationInfo) {
+        return null;
       }
-      info = Object.assign({authHeaders}, info);
-      return info;
-    });
+
+      return exports.authHeaders().then((authHeaders) => {
+        let info = registrationInfo;
+        if (info.registered) {
+          return login({ownershipCheck}).then((result) => {
+            return {
+              isOwner: result && result.isOwner,
+              deviceId: registrationInfo.deviceId,
+              accountId,
+              authHeaders,
+            };
+          });
+        }
+        info = Object.assign({authHeaders}, info);
+        return info;
+      });
   });
+});
 
   return exports;
 })();
rename from browser/extensions/screenshots/webextension/background/communication.js
rename to browser/extensions/screenshots/background/communication.js
--- a/browser/extensions/screenshots/webextension/background/communication.js
+++ b/browser/extensions/screenshots/background/communication.js
@@ -40,39 +40,10 @@ this.communication = (function() {
     }
     sendResponse({type: "success", value: result});
   });
 
   exports.register = function(name, func) {
     registeredFunctions[name] = func;
   };
 
-  /** Send a message to bootstrap.js
-      Technically any worker can listen to this.  If the bootstrap wrapper is not in place, then this
-      will *not* fail, and will return a value of exports.NO_BOOTSTRAP  */
-  exports.sendToBootstrap = function(funcName, ...args) {
-    return browser.runtime.sendMessage({funcName, args}).then((result) => {
-      if (result.type === "success") {
-        return result.value;
-      }
-      throw new Error(`Error in ${funcName}: ${result.name || "unknown"}`);
-    }, (error) => {
-      if (isBootstrapMissingError(error)) {
-        return exports.NO_BOOTSTRAP;
-      }
-      throw error;
-    });
-  };
-
-  function isBootstrapMissingError(error) {
-    if (!error) {
-      return false;
-    }
-    return ("errorCode" in error && error.errorCode === "NO_RECEIVING_END") ||
-      (!error.errorCode && error.message === "Could not establish connection. Receiving end does not exist.");
-  }
-
-
-  // A singleton/sentinel (with a name):
-  exports.NO_BOOTSTRAP = {name: "communication.NO_BOOTSTRAP"};
-
   return exports;
 })();
rename from browser/extensions/screenshots/webextension/background/deviceInfo.js
rename to browser/extensions/screenshots/background/deviceInfo.js
rename from browser/extensions/screenshots/webextension/background/main.js
rename to browser/extensions/screenshots/background/main.js
--- a/browser/extensions/screenshots/webextension/background/main.js
+++ b/browser/extensions/screenshots/background/main.js
@@ -1,17 +1,17 @@
 /* globals selectorLoader, analytics, communication, catcher, log, makeUuid, auth, senderror, startBackground, blobConverters buildSettings */
 
 "use strict";
 
 this.main = (function() {
   const exports = {};
 
   const pasteSymbol = (window.navigator.platform.match(/Mac/i)) ? "\u2318" : "Ctrl";
-  const { sendEvent } = analytics;
+  const { sendEvent, incrementCount } = analytics;
 
   const manifest = browser.runtime.getManifest();
   let backend;
 
   let hasSeenOnboarding = browser.storage.local.get(["hasSeenOnboarding"]).then((result) => {
     const onboarded = !!result.hasSeenOnboarding;
     hasSeenOnboarding = Promise.resolve(onboarded);
     return hasSeenOnboarding;
@@ -66,17 +66,17 @@ this.main = (function() {
 
   function startSelectionWithOnboarding(tab) {
     return analytics.refreshTelemetryPref().then(() => {
       return selectorLoader.testIfLoaded(tab.id);
     }).then((isLoaded) => {
       if (!isLoaded) {
         sendEvent("start-shot", "site-request", {incognito: tab.incognito});
         setIconActive(true, tab.id);
-        selectorLoader.toggle(tab.id, false);
+        selectorLoader.toggle(tab.id, Promise.resolve(false));
       }
     });
   }
 
   function shouldOpenMyShots(url) {
     return /^about:(?:newtab|blank|home)/i.test(url) || /^resource:\/\/activity-streams\//i.test(url);
   }
 
@@ -91,17 +91,17 @@ this.main = (function() {
             return forceOnboarding();
           }));
           return;
         }
         catcher.watchPromise(analytics.refreshTelemetryPref().then(() => {
           sendEvent("goto-myshots", "about-newtab", {incognito: tab.incognito});
         }));
         catcher.watchPromise(
-          auth.authHeaders()
+          auth.maybeLogin()
           .then(() => browser.tabs.update({url: backend + "/shots"})));
       } else {
         catcher.watchPromise(
           toggleSelector(tab)
             .then(active => {
               const event = active ? "start-shot" : "cancel-shot";
               sendEvent(event, "toolbar-button", {incognito: tab.incognito});
             }, (error) => {
@@ -184,17 +184,17 @@ this.main = (function() {
   communication.register("sendEvent", (sender, ...args) => {
     catcher.watchPromise(sendEvent(...args));
     // We don't wait for it to complete:
     return null;
   });
 
   communication.register("openMyShots", (sender) => {
     return catcher.watchPromise(
-      auth.authHeaders()
+      auth.maybeLogin()
       .then(() => browser.tabs.create({url: backend + "/shots"})));
   });
 
   communication.register("openShot", (sender, {url, copied}) => {
     if (copied) {
       const id = makeUuid();
       return browser.notifications.create(id, {
         type: "basic",
@@ -224,17 +224,17 @@ this.main = (function() {
     }
     return dataUrl;
   });
 
   communication.register("copyShotToClipboard", (sender, blob) => {
     return blobConverters.blobToArray(blob).then(buffer => {
       return browser.clipboard.setImageData(
         buffer, blob.type.split("/", 2)[1]).then(() => {
-          catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "copy"}));
+          catcher.watchPromise(incrementCount("copy"));
           return browser.notifications.create({
             type: "basic",
             iconUrl: "../icons/copied-notification.svg",
             title: browser.i18n.getMessage("notificationImageCopiedTitle"),
             message: browser.i18n.getMessage("notificationImageCopiedDetails", pasteSymbol)
           });
         });
     });
@@ -251,17 +251,17 @@ this.main = (function() {
         return;
       }
       if (change.state && change.state.current !== "in_progress") {
         URL.revokeObjectURL(url);
         browser.downloads.onChanged.removeListener(onChangedCallback);
       }
     });
     browser.downloads.onChanged.addListener(onChangedCallback);
-    catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "download"}));
+    catcher.watchPromise(incrementCount("download"));
     return browser.windows.getLastFocused().then(windowInfo => {
       return browser.downloads.download({
         url,
         incognito: windowInfo.incognito,
         filename: info.filename
       }).catch((error) => {
         // We are not logging error message when user cancels download
         if (error && error.message && !error.message.includes("canceled")) {
@@ -296,10 +296,15 @@ this.main = (function() {
   });
 
   communication.register("getPlatformOs", () => {
     return catcher.watchPromise(browser.runtime.getPlatformInfo().then(platformInfo => {
       return platformInfo.os;
     }));
   });
 
+  // This allows the web site show notifications through sitehelper.js
+  communication.register("showNotification", (sender, notification) => {
+    return browser.notifications.create(notification);
+  });
+
   return exports;
 })();
rename from browser/extensions/screenshots/webextension/background/selectorLoader.js
rename to browser/extensions/screenshots/background/selectorLoader.js
--- a/browser/extensions/screenshots/webextension/background/selectorLoader.js
+++ b/browser/extensions/screenshots/background/selectorLoader.js
@@ -84,29 +84,29 @@ this.selectorLoader = (function() {
         return result;
       }, (error) => {
         loadingTabs.delete(tabId);
         throw error;
       });
     }));
   };
 
-  // TODO: since bootstrap communication is now required, would this function
-  // make more sense inside background/main?
   function downloadOnlyCheck(tabId) {
-    return communication.sendToBootstrap("isHistoryEnabled").then((historyEnabled) => {
-      return communication.sendToBootstrap("isUploadDisabled").then((uploadDisabled) => {
-        return browser.tabs.get(tabId).then(tab => {
-          const downloadOnly = !historyEnabled || uploadDisabled || tab.incognito;
-          return browser.tabs.executeScript(tabId, {
-            // Note: `window` here refers to a global accessible to content
-            // scripts, but not the scripts in the underlying page. For more
-            // details, see https://mdn.io/WebExtensions/Content_scripts#Content_script_environment
-            code: `window.downloadOnly = ${downloadOnly}`,
-            runAt: "document_start"
+    return browser.experiments.screenshots.isHistoryEnabled().then((historyEnabled) => {
+      return browser.experiments.screenshots.isUploadDisabled().then((uploadDisabled) => {
+        return browser.experiments.screenshots.getUpdateChannel().then((channel) => {
+          return browser.tabs.get(tabId).then(tab => {
+            const downloadOnly = !historyEnabled || uploadDisabled || channel === "esr" || tab.incognito;
+            return browser.tabs.executeScript(tabId, {
+              // Note: `window` here refers to a global accessible to content
+              // scripts, but not the scripts in the underlying page. For more
+              // details, see https://mdn.io/WebExtensions/Content_scripts#Content_script_environment
+              code: `window.downloadOnly = ${downloadOnly}`,
+              runAt: "document_start"
+            });
           });
         });
       });
     });
   }
 
   function executeModules(tabId, scripts) {
     let lastPromise = Promise.resolve(null);
rename from browser/extensions/screenshots/webextension/background/senderror.js
rename to browser/extensions/screenshots/background/senderror.js
rename from browser/extensions/screenshots/webextension/background/startBackground.js
rename to browser/extensions/screenshots/background/startBackground.js
--- a/browser/extensions/screenshots/webextension/background/startBackground.js
+++ b/browser/extensions/screenshots/background/startBackground.js
@@ -47,16 +47,18 @@ this.startBackground = (function() {
   browser.contextMenus.onClicked.addListener((info, tab) => {
     loadIfNecessary().then(() => {
       main.onClickedContextMenu(info, tab);
     }).catch((error) => {
       console.error("Error loading Screenshots:", error);
     });
   });
 
+  browser.experiments.screenshots.initLibraryButton();
+
   browser.runtime.onMessage.addListener((req, sender, sendResponse) => {
     loadIfNecessary().then(() => {
       return communication.onMessage(req, sender, sendResponse);
     }).catch((error) => {
       console.error("Error loading Screenshots:", error);
     });
     return true;
   });
rename from browser/extensions/screenshots/webextension/background/takeshot.js
rename to browser/extensions/screenshots/background/takeshot.js
--- a/browser/extensions/screenshots/webextension/background/takeshot.js
+++ b/browser/extensions/screenshots/background/takeshot.js
@@ -1,21 +1,20 @@
 /* globals communication, shot, main, auth, catcher, analytics, buildSettings, blobConverters, thumbnailGenerator */
 
 "use strict";
 
 this.takeshot = (function() {
   const exports = {};
   const Shot = shot.AbstractShot;
-  const { sendEvent } = analytics;
+  const { sendEvent, incrementCount } = analytics;
 
   communication.register("takeShot", catcher.watchFunction((sender, options) => {
     const { captureType, captureText, scroll, selectedPos, shotId } = options;
     const shot = new Shot(main.getBackend(), shotId, options.shot);
-    shot.favicon = sender.tab.favIconUrl;
     let imageBlob = options.imageBlob;
     let capturePromise = Promise.resolve();
     let openedTab;
     let thumbnailBlob;
     if (!shot.clipNames().length) {
       // canvas.drawWindow isn't available, so we fall back to captureVisibleTab
       capturePromise = screenshotPage(selectedPos, scroll).then((dataUrl) => {
         imageBlob = buildSettings.uploadBinary ? blobConverters.dataUrlToBlob(dataUrl) : null;
@@ -51,17 +50,19 @@ this.takeshot = (function() {
       }
       return thumbnailGenerator.createThumbnailUrl(shot);
     }).then((thumbnailImage) => {
       if (buildSettings.uploadBinary) {
         thumbnailBlob = thumbnailImage;
       } else {
         shot.thumbnail = thumbnailImage;
       }
-    }).then(() => {
+      return browser.experiments.screenshots.getUpdateChannel();
+    }).then((firefoxChannel) => {
+      shot.firefoxChannel = firefoxChannel;
       return browser.tabs.create({url: shot.creatingUrl});
     }).then((tab) => {
       openedTab = tab;
       sendEvent("internal", "open-shot-tab");
       return uploadShot(shot, imageBlob, thumbnailBlob);
     }).then(() => {
       return browser.tabs.update(openedTab.id, {url: shot.viewUrl, loadReplace: true}).then(
         null,
@@ -71,17 +72,17 @@ this.takeshot = (function() {
           if ((/invalid tab id/i).test(error)) {
             // This happens if the tab was closed before the upload completed
             return browser.tabs.create({url: shot.viewUrl});
           }
           throw error;
         }
       );
     }).then(() => {
-      catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "upload"}));
+      catcher.watchPromise(incrementCount("upload"));
       return shot.viewUrl;
     }).catch((error) => {
       browser.tabs.remove(openedTab.id);
       throw error;
     }));
   }));
 
   communication.register("screenshotPage", (sender, selectedPos, scroll) => {
rename from browser/extensions/screenshots/webextension/blank.html
rename to browser/extensions/screenshots/blank.html
rename from browser/extensions/screenshots/webextension/blobConverters.js
rename to browser/extensions/screenshots/blobConverters.js
deleted file mode 100644
--- a/browser/extensions/screenshots/bootstrap.js
+++ /dev/null
@@ -1,215 +0,0 @@
-/* globals ADDON_DISABLE Services CustomizableUI LegacyExtensionsUtils AppConstants PageActions */
-const ADDON_ID = "screenshots@mozilla.org";
-const TELEMETRY_ENABLED_PREF = "datareporting.healthreport.uploadEnabled";
-const PREF_BRANCH = "extensions.screenshots.";
-const USER_DISABLE_PREF = "extensions.screenshots.disabled";
-const UPLOAD_DISABLED_PREF = "extensions.screenshots.upload-disabled";
-const HISTORY_ENABLED_PREF = "places.history.enabled";
-
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-ChromeUtils.defineModuleGetter(this, "AddonManager",
-                               "resource://gre/modules/AddonManager.jsm");
-ChromeUtils.defineModuleGetter(this, "AddonManagerPrivate",
-                               "resource://gre/modules/AddonManager.jsm");
-ChromeUtils.defineModuleGetter(this, "AppConstants",
-                               "resource://gre/modules/AppConstants.jsm");
-ChromeUtils.defineModuleGetter(this, "CustomizableUI",
-                               "resource:///modules/CustomizableUI.jsm");
-ChromeUtils.defineModuleGetter(this, "LegacyExtensionsUtils",
-                               "resource://gre/modules/LegacyExtensionsUtils.jsm");
-ChromeUtils.defineModuleGetter(this, "Services",
-                               "resource://gre/modules/Services.jsm");
-
-let addonResourceURI;
-let appStartupDone;
-let appStartupPromise = new Promise((resolve, reject) => {
-  appStartupDone = resolve;
-});
-
-const prefs = Services.prefs;
-
-const appStartupObserver = {
-  register() {
-    Services.obs.addObserver(this, "sessionstore-windows-restored", false); // eslint-disable-line mozilla/no-useless-parameters
-  },
-
-  unregister() {
-    Services.obs.removeObserver(this, "sessionstore-windows-restored", false); // eslint-disable-line mozilla/no-useless-parameters
-  },
-
-  observe() {
-    appStartupDone();
-    this.unregister();
-  }
-};
-
-const LibraryButton = {
-  ITEM_ID: "appMenu-library-screenshots",
-
-  init(webExtension) {
-    this._initialized = true;
-    const permissionPages = [...webExtension.extension.permissions].filter(p => (/^https?:\/\//i).test(p));
-    if (permissionPages.length > 1) {
-      Cu.reportError(new Error("Should not have more than 1 permission page, but got: " + JSON.stringify(permissionPages)));
-    }
-    this.PAGE_TO_OPEN = permissionPages.length === 1 ? permissionPages[0].replace(/\*$/, "") : "https://screenshots.firefox.com/";
-    this.PAGE_TO_OPEN += "shots";
-    this.ICON_URL = webExtension.extension.getURL("icons/icon-v2.svg");
-    this.LABEL = webExtension.extension.localizeMessage("libraryLabel");
-    CustomizableUI.addListener(this);
-    for (const win of CustomizableUI.windows) {
-      this.onWindowOpened(win);
-    }
-  },
-
-  uninit() {
-    if (!this._initialized) {
-      return;
-    }
-    for (const win of CustomizableUI.windows) {
-      const item = win.document.getElementById(this.ITEM_ID);
-      if (item) {
-        item.remove();
-      }
-    }
-    CustomizableUI.removeListener(this);
-    this._initialized = false;
-  },
-
-  onWindowOpened(win) {
-    const libraryViewInsertionPoint = win.document.getElementById("appMenu-library-remotetabs-button");
-    // If the library view doesn't exist (on non-photon builds, for instance),
-    // this will be null, and we bail out early.
-    if (!libraryViewInsertionPoint) {
-      return;
-    }
-    const parent = libraryViewInsertionPoint.parentNode;
-    const {nextSibling} = libraryViewInsertionPoint;
-    const item = win.document.createXULElement("toolbarbutton");
-    item.className = "subviewbutton subviewbutton-iconic";
-    item.addEventListener("command", () => win.openWebLinkIn(this.PAGE_TO_OPEN, "tab"));
-    item.id = this.ITEM_ID;
-    const iconURL = this.ICON_URL;
-    item.setAttribute("image", iconURL);
-    item.setAttribute("label", this.LABEL);
-
-    parent.insertBefore(item, nextSibling);
-  },
-};
-
-let addonData, startupReason;
-
-function startup(data, reason) { // eslint-disable-line no-unused-vars
-  addonResourceURI = data.resourceURI;
-
-  if (Services.prefs.getBoolPref(USER_DISABLE_PREF, false)) {
-    AddonManager.getActiveAddons().then(result => {
-      let addon = result.addons.find(a => a.id == ADDON_ID);
-      if (addon) {
-        addon.disable({allowSystemAddons: true});
-      }
-    });
-    return;
-  }
-
-  addonData = data;
-  startupReason = reason;
-  if (reason === AddonManagerPrivate.BOOTSTRAP_REASONS.APP_STARTUP) {
-    appStartupObserver.register();
-  } else {
-    appStartupDone();
-  }
-  // eslint-disable-next-line promise/catch-or-return
-  appStartupPromise = appStartupPromise.then(handleStartup);
-}
-
-function shutdown(data, reason) { // eslint-disable-line no-unused-vars
-  const webExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
-    id: ADDON_ID,
-    resourceURI: addonResourceURI
-  });
-  // Immediately exit if Firefox is exiting, #3323
-  if (reason === AddonManagerPrivate.BOOTSTRAP_REASONS.APP_SHUTDOWN) {
-    stop(webExtension, reason);
-    return;
-  }
-  // Because the prefObserver is unregistered above, this _should_ terminate the promise chain.
-  appStartupPromise = appStartupPromise.then(() => { stop(webExtension, reason); });
-}
-
-function install(data, reason) {} // eslint-disable-line no-unused-vars
-
-function uninstall(data, reason) {} // eslint-disable-line no-unused-vars
-
-function getBoolPref(pref) {
-  return prefs.getPrefType(pref) && prefs.getBoolPref(pref);
-}
-
-function handleStartup() {
-  const webExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
-    id: ADDON_ID,
-    resourceURI: addonResourceURI
-  });
-
-  if (!webExtension.started) {
-    start(webExtension);
-  }
-}
-
-function start(webExtension) {
-  let reasonStr = stringReasonFromNumericReason(startupReason);
-  return webExtension.startup(reasonStr, addonData).then((api) => {
-    api.browser.runtime.onMessage.addListener(handleMessage);
-    LibraryButton.init(webExtension);
-  }).catch((err) => {
-    // The startup() promise will be rejected if the webExtension was
-    // already started (a harmless error), or if initializing the
-    // WebExtension failed and threw (an important error).
-    console.error(err);
-    if (err.message !== "This embedded extension has already been started") {
-      // TODO: Should we send these errors to Sentry? #2420
-    }
-  });
-}
-
-function stop(webExtension, reason) {
-  if (reason !== AddonManagerPrivate.BOOTSTRAP_REASONS.APP_SHUTDOWN) {
-    LibraryButton.uninit();
-  }
-  let reasonStr = stringReasonFromNumericReason(reason);
-  return Promise.resolve(webExtension.shutdown(reasonStr));
-}
-
-function stringReasonFromNumericReason(numericReason) {
-  let { BOOTSTRAP_REASONS } = AddonManagerPrivate;
-  return Object.keys(BOOTSTRAP_REASONS).find(
-    key => BOOTSTRAP_REASONS[key] == numericReason
-  );
-}
-
-function handleMessage(msg, sender, sendReply) {
-  if (!msg) {
-    return;
-  }
-
-  if (msg.funcName === "isTelemetryEnabled") {
-    const telemetryEnabled = getBoolPref(TELEMETRY_ENABLED_PREF);
-    sendReply({type: "success", value: telemetryEnabled});
-  } else if (msg.funcName === "isUploadDisabled") {
-    const isESR = AppConstants.MOZ_UPDATE_CHANNEL === "esr";
-    const uploadDisabled = getBoolPref(UPLOAD_DISABLED_PREF);
-    sendReply({type: "success", value: uploadDisabled || isESR});
-  } else if (msg.funcName === "isHistoryEnabled") {
-    const historyEnabled = getBoolPref(HISTORY_ENABLED_PREF);
-    sendReply({type: "success", value: historyEnabled});
-  } else if (msg.funcName === "incrementCount") {
-    const allowedScalars = ["download", "upload", "copy"];
-    const scalar = msg.args && msg.args[0] && msg.args[0].scalar;
-    if (!allowedScalars.includes(scalar)) {
-      sendReply({type: "error", name: `incrementCount passed an unrecognized scalar ${scalar}`});
-    } else {
-      Services.telemetry.scalarAdd(`screenshots.${scalar}`, 1);
-      sendReply({type: "success", value: true});
-    }
-  }
-}
rename from browser/extensions/screenshots/webextension/build/buildSettings.js
rename to browser/extensions/screenshots/build/buildSettings.js
rename from browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
rename to browser/extensions/screenshots/build/inlineSelectionCss.js
--- a/browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
+++ b/browser/extensions/screenshots/build/inlineSelectionCss.js
@@ -14,16 +14,18 @@ window.inlineSelectionCss = `
   outline: none;
   padding: 0 10px;
   position: relative;
   text-align: center;
   text-decoration: none;
   transition: background 150ms cubic-bezier(0.07, 0.95, 0, 1), border 150ms cubic-bezier(0.07, 0.95, 0, 1);
   user-select: none;
   white-space: nowrap; }
+  .button.hidden, .hidden.highlight-button-cancel, .hidden.highlight-button-save, .hidden.highlight-button-download, .hidden.highlight-button-copy, .hidden.preview-button-save {
+    display: none; }
   .button.small, .small.highlight-button-cancel, .small.highlight-button-save, .small.highlight-button-download, .small.highlight-button-copy, .small.preview-button-save {
     height: 32px;
     line-height: 32px;
     padding: 0 8px; }
   .button.active, .active.highlight-button-cancel, .active.highlight-button-save, .active.highlight-button-download, .active.highlight-button-copy, .active.preview-button-save {
     background-color: #dedede; }
   .button.tiny, .tiny.highlight-button-cancel, .tiny.highlight-button-save, .tiny.highlight-button-download, .tiny.highlight-button-copy, .tiny.preview-button-save {
     font-size: 14px;
@@ -87,58 +89,46 @@ window.inlineSelectionCss = `
     .button.trash:active, .trash.highlight-button-cancel:active, .trash.highlight-button-save:active, .trash.highlight-button-download:active, .trash.highlight-button-copy:active, .trash.preview-button-save:active {
       background-color: #dedede; }
   .button.edit, .edit.highlight-button-cancel, .edit.highlight-button-save, .edit.highlight-button-download, .edit.highlight-button-copy, .edit.preview-button-save {
     background-image: url("../img/icon-edit.svg"); }
     .button.edit:hover, .edit.highlight-button-cancel:hover, .edit.highlight-button-save:hover, .edit.highlight-button-download:hover, .edit.highlight-button-copy:hover, .edit.preview-button-save:hover {
       background-color: #ededf0; }
     .button.edit:active, .edit.highlight-button-cancel:active, .edit.highlight-button-save:active, .edit.highlight-button-download:active, .edit.highlight-button-copy:active, .edit.preview-button-save:active {
       background-color: #dedede; }
-  .button.flag, .flag.highlight-button-cancel, .flag.highlight-button-save, .flag.highlight-button-download, .flag.highlight-button-copy, .flag.preview-button-save {
-    background-image: url("../img/icon-flag.svg"); }
-    .button.flag:hover, .flag.highlight-button-cancel:hover, .flag.highlight-button-save:hover, .flag.highlight-button-download:hover, .flag.highlight-button-copy:hover, .flag.preview-button-save:hover {
-      background-color: #ededf0; }
-    .button.flag:active, .flag.highlight-button-cancel:active, .flag.highlight-button-save:active, .flag.highlight-button-download:active, .flag.highlight-button-copy:active, .flag.preview-button-save:active {
-      background-color: #dedede; }
 
-.inverse-color-scheme {
-  background: #38383d;
-  color: #f9f9fa; }
-  .inverse-color-scheme a {
-    color: #e1e1e6; }
-
-.default-color-scheme {
+.app-body {
   background: #f9f9fa;
   color: #38383d; }
-  .default-color-scheme a {
-    color: #009ec0; }
+  .app-body a {
+    color: #0a84ff; }
 
 .highlight-color-scheme {
-  background: #009ec0;
+  background: #0a84ff;
   color: #fff; }
   .highlight-color-scheme a {
     color: #fff;
     text-decoration: underline; }
 
 .alt-color-scheme {
   background: #38383d;
   color: #f9f9fa; }
   .alt-color-scheme h1 {
     color: #6f7fb6; }
   .alt-color-scheme a {
     color: #e1e1e6;
     text-decoration: underline; }
 
 .button.primary, .primary.highlight-button-cancel, .highlight-button-save, .primary.highlight-button-download, .primary.highlight-button-copy, .preview-button-save {
-  background-color: #009ec0;
+  background-color: #0a84ff;
   color: #fff; }
   .button.primary:hover, .primary.highlight-button-cancel:hover, .highlight-button-save:hover, .primary.highlight-button-download:hover, .primary.highlight-button-copy:hover, .preview-button-save:hover, .button.primary:focus, .primary.highlight-button-cancel:focus, .highlight-button-save:focus, .primary.highlight-button-download:focus, .primary.highlight-button-copy:focus, .preview-button-save:focus {
-    background-color: #00819c; }
+    background-color: #0072e5; }
   .button.primary:active, .primary.highlight-button-cancel:active, .highlight-button-save:active, .primary.highlight-button-download:active, .primary.highlight-button-copy:active, .preview-button-save:active {
-    background-color: #006c83; }
+    background-color: #0065cc; }
 
 .button.secondary, .highlight-button-cancel, .secondary.highlight-button-save, .highlight-button-download, .highlight-button-copy, .secondary.preview-button-save {
   background-color: #f9f9fa;
   color: #38383d; }
   .button.secondary:hover, .highlight-button-cancel:hover, .secondary.highlight-button-save:hover, .highlight-button-download:hover, .highlight-button-copy:hover, .secondary.preview-button-save:hover {
     background-color: #ededf0; }
   .button.secondary:active, .highlight-button-cancel:active, .secondary.highlight-button-save:active, .highlight-button-download:active, .highlight-button-copy:active, .secondary.preview-button-save:active {
     background-color: #dedede; }
@@ -155,31 +145,29 @@ window.inlineSelectionCss = `
   color: #fff;
   background: #d92215; }
   .button.warning:hover, .warning.highlight-button-cancel:hover, .warning.highlight-button-save:hover, .warning.highlight-button-download:hover, .warning.highlight-button-copy:hover, .warning.preview-button-save:hover, .button.warning:focus, .warning.highlight-button-cancel:focus, .warning.highlight-button-save:focus, .warning.highlight-button-download:focus, .warning.highlight-button-copy:focus, .warning.preview-button-save:focus {
     background: #b81d12; }
   .button.warning:active, .warning.highlight-button-cancel:active, .warning.highlight-button-save:active, .warning.highlight-button-download:active, .warning.highlight-button-copy:active, .warning.preview-button-save:active {
     background: #a11910; }
 
 .subtitle-link {
-  color: #009ec0; }
+  color: #0a84ff; }
 
 .loader {
-  background: #2e2d30;
+  background: rgba(12, 12, 13, 0.2);
   border-radius: 2px;
   height: 4px;
   overflow: hidden;
   position: relative;
   width: 200px; }
-  #shot-index .loader {
-    background-color: #dedede; }
 
 .loader-inner {
   animation: bounce infinite alternate 1250ms cubic-bezier(0.7, 0, 0.3, 1);
-  background: #04d1e6;
+  background: #45a1ff;
   border-radius: 2px;
   height: 4px;
   transform: translateX(-40px);
   width: 50px; }
 
 @keyframes bounce {
   0% {
     transform: translateX(-40px); }
@@ -395,16 +383,24 @@ window.inlineSelectionCss = `
     font-weight: bold;
     white-space: nowrap; }
   .notice .notice-help {
     background-image: url("MOZ_EXTENSION/icons/help-16.svg");
     background-position: center center;
     background-repeat: no-repeat;
     height: 16px;
     width: 16px; }
+  .notice.middle {
+    display: none;
+    top: calc(50% - 21px); }
+
+.preview-button-save:active ~ .notice.middle,
+.preview-button-save:focus ~ .notice.middle,
+.preview-button-save:hover ~ .notice.middle {
+  display: block; }
 
 .notice-tooltip {
   background: #fff;
   border-radius: 3px;
   border: 1px solid #9d9d9e;
   bottom: 60px;
   color: #000;
   cursor: default;
rename from browser/extensions/screenshots/webextension/build/onboardingCss.js
rename to browser/extensions/screenshots/build/onboardingCss.js
--- a/browser/extensions/screenshots/webextension/build/onboardingCss.js
+++ b/browser/extensions/screenshots/build/onboardingCss.js
@@ -1,23 +1,21 @@
 /* Created from build/server/static/css/onboarding.css */
 window.onboardingCss = `
 .loader {
-  background: #2e2d30;
+  background: rgba(12, 12, 13, 0.2);
   border-radius: 2px;
   height: 4px;
   overflow: hidden;
   position: relative;
   width: 200px; }
-  #shot-index .loader {
-    background-color: #dedede; }
 
 .loader-inner {
   animation: bounce infinite alternate 1250ms cubic-bezier(0.7, 0, 0.3, 1);
-  background: #04d1e6;
+  background: #45a1ff;
   border-radius: 2px;
   height: 4px;
   transform: translateX(-40px);
   width: 50px; }
 
 @keyframes bounce {
   0% {
     transform: translateX(-40px); }
@@ -157,24 +155,26 @@ body {
     .slide.slide-1 .slide-content {
       justify-content: space-between;
       width: 100%; }
 
 .slide-1,
 .slide-2,
 .slide-3,
 .slide-4,
-.slide-5 {
+.slide-5,
+.slide-6 {
   display: none; }
 
 .active-slide-1 .slide-1,
 .active-slide-2 .slide-2,
 .active-slide-3 .slide-3,
 .active-slide-4 .slide-4,
-.active-slide-5 .slide-5 {
+.active-slide-5 .slide-5,
+.active-slide-6 .slide-6 {
   display: flex; }
 
 #slide-status-container {
   display: flex;
   align-items: center;
   justify-content: center;
   padding-top: 15px; }
 
@@ -192,17 +192,18 @@ body {
 
 .goto-slide:hover {
   opacity: 1; }
 
 .active-slide-1 .goto-slide-1,
 .active-slide-2 .goto-slide-2,
 .active-slide-3 .goto-slide-3,
 .active-slide-4 .goto-slide-4,
-.active-slide-5 .goto-slide-5 {
+.active-slide-5 .goto-slide-5,
+.active-slide-6 .goto-slide-6 {
   opacity: 1;
   transform: scale(1.1); }
 
 #prev, #next,
 #done {
   background-color: #f0f0f0;
   border-radius: 50%;
   border: 0;
@@ -276,24 +277,24 @@ body {
   top: 50%;
   transition: opacity 100ms cubic-bezier(0.07, 0.95, 0, 1);
   z-index: 10; }
 
 #skip:hover {
   opacity: 1; }
 
 .active-slide-1 #prev,
-.active-slide-5 #next {
+.active-slide-6 #next {
   display: none; }
 
 #done {
   background-image: url("MOZ_EXTENSION/icons/done.svg");
   display: none; }
 
-.active-slide-5 #done {
+.active-slide-6 #done {
   display: inline-block; }
 
 /* for smaller screen sizes */
 @media screen and (max-width: 768px) {
   .slide {
     height: 360px;
     width: 450px; }
     .slide .slide-image {
rename from browser/extensions/screenshots/webextension/build/onboardingHtml.js
rename to browser/extensions/screenshots/build/onboardingHtml.js
--- a/browser/extensions/screenshots/webextension/build/onboardingHtml.js
+++ b/browser/extensions/screenshots/build/onboardingHtml.js
@@ -1,21 +1,21 @@
-/* Created from addon/webextension/onboarding/slides.html */
+/* Created from webextension/onboarding/slides.html */
 window.onboardingHtml = `
 <!DOCTYPE html>
 <html>
   <head>
     <!-- onboarding.scss is automatically inserted here: -->
     <style></style>
     <!-- Here and in onboarding.scss use MOZ_EXTENSION/path to refer to local files -->
   </head>
   <body>
     <div id="slide-overlay">
       <!-- The current slide is set by having .active-slide-1, .active-slide-2, etc on #slide element: -->
-      <div id="slide-container" data-number-of-slides="5" class="active-slide-1">
+      <div id="slide-container" data-number-of-slides="6" class="active-slide-1">
         <div class="slide slide-1">
           <!-- Note: all images must be listed in manifest.json.template under web_accessible_resources -->
           <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-1.png');"></div>
           <div class="slide-content">
             <div class="slide-content-aligner">
               <h1><span><strong>Firefox</strong> Screenshots</span><sup>Beta</sup></h1>
               <p data-l10n-id="tourBodyIntro"></p>
             </div>
@@ -45,28 +45,36 @@ window.onboardingHtml = `
         </div>
         <div class="slide slide-5">
           <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-5.png');"></div>
           <div class="slide-content">
             <h1 data-l10n-id="tourHeaderDownloadUpload"></h1>
             <p data-l10n-id="tourBodyDownloadUpload"></p>
           </div>
         </div>
+        <div class="slide slide-6">
+          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-6.png');"></div>
+          <div class="slide-content">
+            <h1 data-l10n-id="tourHeaderAccounts"></h1>
+            <p data-l10n-id="tourBodyAccounts"></p>
+          </div>
+        </div>
 
         <!-- Clickable elements should be buttons for accessibility -->
         <button id="skip" data-l10n-id="tourSkip" tabindex=1>Skip</button>
         <button id="prev" tabindex=2 data-l10n-label-id="tourPrevious"></button>
         <button id="next" tabindex=3 data-l10n-label-id="tourNext"></button>
         <button id="done" tabindex=4 data-l10n-label-id="tourDone"></button>
         <div id="slide-status-container">
           <button class="goto-slide goto-slide-1" data-number="1" tabindex=4></button>
           <button class="goto-slide goto-slide-2" data-number="2" tabindex=5></button>
           <button class="goto-slide goto-slide-3" data-number="3" tabindex=6></button>
           <button class="goto-slide goto-slide-4" data-number="4" tabindex=7></button>
           <button class="goto-slide goto-slide-5" data-number="5" tabindex=8></button>
+          <button class="goto-slide goto-slide-6" data-number="6" tabindex=9></button>
         </div>
         <!-- FIXME: Need to put in privacy / etc links -->
       </div>
     </div>
   </body>
 </html>
 
 `;
rename from browser/extensions/screenshots/webextension/build/selection.js
rename to browser/extensions/screenshots/build/selection.js
rename from browser/extensions/screenshots/webextension/build/shot.js
rename to browser/extensions/screenshots/build/shot.js
--- a/browser/extensions/screenshots/webextension/build/shot.js
+++ b/browser/extensions/screenshots/build/shot.js
@@ -186,28 +186,28 @@ class AbstractShot {
       this.origin = "";
     }
     if (this.fullUrl && !isSecureWebUri(this.fullUrl)) {
       this.fullUrl = "";
     }
     this.docTitle = attrs.docTitle || null;
     this.userTitle = attrs.userTitle || null;
     this.createdDate = attrs.createdDate || Date.now();
-    this.favicon = attrs.favicon || null;
     this.siteName = attrs.siteName || null;
     this.images = [];
     if (attrs.images) {
       this.images = attrs.images.map(
         (json) => new this.Image(json));
     }
     this.openGraph = attrs.openGraph || null;
     this.twitterCard = attrs.twitterCard || null;
     this.documentSize = attrs.documentSize || null;
     this.thumbnail = attrs.thumbnail || null;
     this.abTests = attrs.abTests || null;
+    this.firefoxChannel = attrs.firefoxChannel || null;
     this._clips = {};
     if (attrs.clips) {
       for (const clipId in attrs.clips) {
         const clip = attrs.clips[clipId];
         this._clips[clipId] = new this.Clip(this, clipId, clip);
       }
     }
 
@@ -453,25 +453,16 @@ class AbstractShot {
   get createdDate() {
     return this._createdDate;
   }
   set createdDate(val) {
     assert(val === null || typeof val === "number", "Bad createdDate:", val);
     this._createdDate = val;
   }
 
-  get favicon() {
-    return this._favicon;
-  }
-  set favicon(val) {
-    // We set the favicon with tabs.Tab.faviConUrl, which is a full URL.
-    val = val || null;
-    this._favicon = val;
-  }
-
   clipNames() {
     const names = Object.getOwnPropertyNames(this._clips);
     names.sort(function(a, b) {
       return a.sortOrder < b.sortOrder ? 1 : 0;
     });
     return names;
   }
   getClip(name) {
@@ -558,34 +549,45 @@ class AbstractShot {
     assert(typeof val === "object", "abTests should be an object, not:", typeof val);
     assert(!Array.isArray(val), "abTests should not be an Array");
     for (const name in val) {
       assert(val[name] && typeof val[name] === "string", `abTests.${name} should be a string:`, typeof val[name]);
     }
     this._abTests = val;
   }
 
+  get firefoxChannel() {
+    return this._firefoxChannel;
+  }
+  set firefoxChannel(val) {
+    if (val === null || val === undefined) {
+      this._firefoxChannel = null;
+      return;
+    }
+    assert(typeof val === "string", "firefoxChannel should be a string, not:", typeof val);
+    this._firefoxChannel = val;
+  }
+
 }
 
 AbstractShot.prototype.REGULAR_ATTRS = (`
-origin fullUrl docTitle userTitle createdDate favicon images
+origin fullUrl docTitle userTitle createdDate images
 siteName openGraph twitterCard documentSize
-thumbnail abTests
+thumbnail abTests firefoxChannel
 `).split(/\s+/g);
 
 // Attributes that will be accepted in the constructor, but ignored/dropped
 AbstractShot.prototype.DEPRECATED_ATTRS = (`
 microdata history ogTitle createdDevice head body htmlAttrs bodyAttrs headAttrs
 readable hashtags comments showPage isPublic resources deviceId url
-fullScreenThumbnail
+fullScreenThumbnail favicon
 `).split(/\s+/g);
 
 AbstractShot.prototype.RECALL_ATTRS = (`
-url docTitle userTitle createdDate favicon
-openGraph twitterCard images thumbnail
+url docTitle userTitle createdDate openGraph twitterCard images thumbnail
 `).split(/\s+/g);
 
 AbstractShot.prototype._OPENGRAPH_PROPERTIES = (`
 title type url image audio description determiner locale site_name video
 image:secure_url image:type image:width image:height
 video:secure_url video:type video:width image:height
 audio:secure_url audio:type
 article:published_time article:modified_time article:expiration_time article:author article:section article:tag
rename from browser/extensions/screenshots/webextension/build/thumbnailGenerator.js
rename to browser/extensions/screenshots/build/thumbnailGenerator.js
--- a/browser/extensions/screenshots/webextension/build/thumbnailGenerator.js
+++ b/browser/extensions/screenshots/build/thumbnailGenerator.js
@@ -1,9 +1,9 @@
-this.thumbnailGenerator = (function () {let exports={}; // This is used in addon/webextension/background/takeshot.js,
+this.thumbnailGenerator = (function () {let exports={}; // This is used in webextension/background/takeshot.js,
 // server/src/pages/shot/controller.js, and
 // server/scr/pages/shotindex/view.js. It is used in a browser
 // environment.
 
 // Resize down 1/2 at a time produces better image quality.
 // Not quite as good as using a third-party filter (which will be
 // slower), but good enough.
 const maxResizeScaleFactor = 0.5;
rename from browser/extensions/screenshots/webextension/catcher.js
rename to browser/extensions/screenshots/catcher.js
rename from browser/extensions/screenshots/webextension/clipboard.js
rename to browser/extensions/screenshots/clipboard.js
rename from browser/extensions/screenshots/webextension/domainFromUrl.js
rename to browser/extensions/screenshots/domainFromUrl.js
new file mode 100644
--- /dev/null
+++ b/browser/extensions/screenshots/experiments/screenshots/api.js
@@ -0,0 +1,115 @@
+/* globals browser, AppConstants, CustomizableUI, ExtensionCommon, Services, ExtensionAPI */
+
+"use strict";
+
+ChromeUtils.defineModuleGetter(this, "AppConstants",
+                               "resource://gre/modules/AppConstants.jsm");
+ChromeUtils.defineModuleGetter(this, "CustomizableUI",
+                               "resource:///modules/CustomizableUI.jsm");
+ChromeUtils.defineModuleGetter(this, "ExtensionCommon",
+                               "resource://gre/modules/ExtensionCommon.jsm");
+ChromeUtils.defineModuleGetter(this, "PageActions",
+                               "resource:///modules/PageActions.jsm");
+ChromeUtils.defineModuleGetter(this, "Services",
+                               "resource://gre/modules/Services.jsm");
+
+const LibraryButton = {
+  ITEM_ID: "appMenu-library-screenshots",
+
+  init(webExtension) {
+    this._initialized = true;
+    const permissionPages = [...webExtension.permissions].filter(p => (/^https?:\/\//i).test(p));
+    if (permissionPages.length > 1) {
+      Cu.reportError(new Error("Should not have more than 1 permission page, but got: " + JSON.stringify(permissionPages)));
+    }
+    this.PAGE_TO_OPEN = permissionPages.length === 1 ? permissionPages[0].replace(/\*$/, "") : "https://screenshots.firefox.com/";
+    this.PAGE_TO_OPEN += "shots";
+    this.ICON_URL = webExtension.getURL("icons/icon-v2.svg");
+    this.LABEL = webExtension.localizeMessage("libraryLabel");
+    CustomizableUI.addListener(this);
+    for (const win of CustomizableUI.windows) {
+      this.onWindowOpened(win);
+    }
+  },
+
+  uninit() {
+    if (!this._initialized) {
+      return;
+    }
+    for (const win of CustomizableUI.windows) {
+      const item = win.document.getElementById(this.ITEM_ID);
+      if (item) {
+        item.remove();
+      }
+    }
+    CustomizableUI.removeListener(this);
+    this._initialized = false;
+  },
+
+  onWindowOpened(win) {
+    const libraryViewInsertionPoint = win.document.getElementById("appMenu-library-remotetabs-button");
+    // If the library view doesn't exist (on non-photon builds, for instance),
+    // this will be null, and we bail out early.
+    if (!libraryViewInsertionPoint) {
+      return;
+    }
+    const parent = libraryViewInsertionPoint.parentNode;
+    const {nextSibling} = libraryViewInsertionPoint;
+    const item = win.document.createElement("toolbarbutton");
+    item.className = "subviewbutton subviewbutton-iconic";
+    item.addEventListener("command", () => win.openWebLinkIn(this.PAGE_TO_OPEN, "tab"));
+    item.id = this.ITEM_ID;
+    const iconURL = this.ICON_URL;
+    item.setAttribute("image", iconURL);
+    item.setAttribute("label", this.LABEL);
+
+    parent.insertBefore(item, nextSibling);
+  },
+};
+
+this.screenshots = class extends ExtensionAPI {
+  getAPI(context) {
+    const {extension} = context;
+    return {
+      experiments: {
+        screenshots: {
+          // If you are checking for 'nightly', also check for 'nightly-try'.
+          //
+          // Otherwise, just use the standard builds, but be aware of the many
+          // non-standard options that also exist (as of August 2018).
+          //
+          // Standard builds:
+          //   'esr' - ESR channel
+          //   'release' - release channel
+          //   'beta' - beta channel
+          //   'nightly' - nightly channel
+          // Non-standard / deprecated builds:
+          //   'aurora' - deprecated aurora channel (still observed in dxr)
+          //   'default' - local builds from source
+          //   'nightly-try' - nightly Try builds (QA may occasionally need to test with these)
+          getUpdateChannel() {
+            return AppConstants.MOZ_UPDATE_CHANNEL;
+          },
+          isHistoryEnabled() {
+            return Services.prefs.getBoolPref("places.history.enabled", true);
+          },
+          isUploadDisabled() {
+            return Services.prefs.getBoolPref("extensions.screenshots.upload-disabled", false);
+          },
+          initLibraryButton() {
+            context.callOnClose({
+              close: () => {
+                try {
+                  LibraryButton.uninit();
+                } catch (ex) {
+                  Services.console.logStringMessage("Firefox Screenshots LibraryButton shutdown error: ", ex);
+                }
+              },
+            });
+            return LibraryButton.init(extension);
+          },
+        },
+      },
+    };
+  }
+};
new file mode 100644
--- /dev/null
+++ b/browser/extensions/screenshots/experiments/screenshots/schema.json
@@ -0,0 +1,36 @@
+[
+  {
+    "namespace": "experiments.screenshots",
+    "description": "Firefox Screenshots internal API",
+    "functions": [
+      {
+        "name": "getUpdateChannel",
+        "type": "function",
+        "description": "Returns the Firefox channel (AppConstants.MOZ_UPDATE_CHANNEL)",
+        "parameters": [],
+        "async": true
+      },
+      {
+        "name": "isHistoryEnabled",
+        "type": "function",
+        "description": "Returns the value of the 'places.history.enabled' preference",
+        "parameters": [],
+        "async": true
+      },
+      {
+        "name": "isUploadDisabled",
+        "type": "function",
+        "description": "Returns the value of the 'extensions.screenshots.upload-disabled' preference",
+        "parameters": [],
+        "async": true
+      },
+      {
+        "name": "initLibraryButton",
+        "type": "function",
+        "description": "Initializes the Photon-based Library menu item for Screenshots",
+        "parameters": [],
+        "async": true
+      }
+    ]
+  }
+]
rename from browser/extensions/screenshots/webextension/icons/back-highlight.svg
rename to browser/extensions/screenshots/icons/back-highlight.svg
rename from browser/extensions/screenshots/webextension/icons/back.svg
rename to browser/extensions/screenshots/icons/back.svg
rename from browser/extensions/screenshots/webextension/icons/cancel.svg
rename to browser/extensions/screenshots/icons/cancel.svg
rename from browser/extensions/screenshots/webextension/icons/cloud.svg
rename to browser/extensions/screenshots/icons/cloud.svg
rename from browser/extensions/screenshots/webextension/icons/copied-notification.svg
rename to browser/extensions/screenshots/icons/copied-notification.svg
rename from browser/extensions/screenshots/webextension/icons/copy.svg
rename to browser/extensions/screenshots/icons/copy.svg
rename from browser/extensions/screenshots/webextension/icons/done.svg
rename to browser/extensions/screenshots/icons/done.svg
rename from browser/extensions/screenshots/webextension/icons/download.svg
rename to browser/extensions/screenshots/icons/download.svg
rename from browser/extensions/screenshots/webextension/icons/help-16.svg
rename to browser/extensions/screenshots/icons/help-16.svg
rename from browser/extensions/screenshots/webextension/icons/icon-highlight-32-v2.svg
rename to browser/extensions/screenshots/icons/icon-highlight-32-v2.svg
rename from browser/extensions/screenshots/webextension/icons/icon-v2.svg
rename to browser/extensions/screenshots/icons/icon-v2.svg
rename from browser/extensions/screenshots/webextension/icons/icon-welcome-face-without-eyes.svg
rename to browser/extensions/screenshots/icons/icon-welcome-face-without-eyes.svg
rename from browser/extensions/screenshots/webextension/icons/menu-fullpage.svg
rename to browser/extensions/screenshots/icons/menu-fullpage.svg
rename from browser/extensions/screenshots/webextension/icons/menu-myshot-white.svg
rename to browser/extensions/screenshots/icons/menu-myshot-white.svg
rename from browser/extensions/screenshots/webextension/icons/menu-myshot.svg
rename to browser/extensions/screenshots/icons/menu-myshot.svg
rename from browser/extensions/screenshots/webextension/icons/menu-visible.svg
rename to browser/extensions/screenshots/icons/menu-visible.svg
rename from browser/extensions/screenshots/webextension/icons/onboarding-1.png
rename to browser/extensions/screenshots/icons/onboarding-1.png
rename from browser/extensions/screenshots/webextension/icons/onboarding-2.png
rename to browser/extensions/screenshots/icons/onboarding-2.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d6dd2e1a08b7033efd0e461ce170e60c5f6913a1
GIT binary patch
literal 71575
zc%0O_2{hF2`#+3Ol87WJOSWXIgsh{;nuzSoRFdo=`!bdyDY9psNV3F)?8A`kF<B?u
zP?o`9>|>0X`Oi>&`h0)i=Q;o9oaZ^`|J<i@-go2uzVFxdx~}VWUH7~v%J8NZ%i&Xp
zX=rFzbhI^$XlNLGX=v!a9b%+>a(?QhA`LAUP)FnHZC~2OaoPA2S5Jog&@?(4GIpqj
zc6qr+to@a*t#Z>iWe8|QkX8yR9!BzR4Hu$u52sVAY8&)bNSR=jvo^kpN~3W-fSN2Q
zU=~xzN<$qhZ<~OzBI(^Rn(6Ocz3`J2Db0OPMKS&O_Yjxc)Eh#;LZ_BmM0s+C9~30q
zWVQB}Q%w26DtDUtH#LC<`B8h@vfIXWo~y%SyPu`yPVRkfku$E@+}$S)cKy<6<IY9>
z>|9#Al~o51*F|`fIn^whH^MKRwq+CKrS54%Sq@M?`F6DTak+UD!CzxnRE~#X|E8RI
z%~5@>te(n?dw4BHMqC@d-?iQQ&!-!o#sjBnU()V9t%$T`z-sZ(?LB9gvoylCchi#4
z%HBtZU^M^pLMQz{FCmT0|LroWvUg7?*Z;hzO)~t?3!5+P|K)`qNb^50|83>}&o}t5
zEC1hZ@LyN{KW>Bne~|x1^M8jN1zfeRDBtb*x%%^GYOUUd`=lMD{-HN71{H0}*{xfJ
zNowrsh|H0qKAZXl_0a58R->MLk$3DkPLsNZ+HlU@L9_L<D}63w<38o5U{g0_@2{7(
zQdenwvt*y6@5SRMTMwWI+Hxyq3LWqP6>CDr&0nU=zE4y1a+Gx$`LuVh+U0_W#=ZHB
z%e5l~AZ{f83VV;r@?}q-?MjZpCoNsDIO<J?PgbLoHOm*26Oj24ilNAbaoPZ=S%T?@
zt=2s(Iyn~C>&l*2X->|})sN_0^jD9RKSF)*`DI6SEtM7C`uA8S7;)^!j&Fp6IMTO#
zk0_1a5=Tk#k>pm<l`Z?s2xEiHi~aiwA^hBXu)y9S5PS$m2bHHvD2=Yj%3;`kf*+z>
z_p|!%8J+b0jB<tUr}tkoXk&EasM$XC$9x%p`!fb0{eR5pDc5~B{yhuj+MiLbX8V5p
zYi2fi{Xb@Elq=_+qyL_9QZ}aj4*>syf>NbE96~`Vz9()Wl<V35nDJAthxbVMd-lIa
z%>M>O%>M!4Zzx8=f0>zi;V#_@WPOJIkKKFx(F1i^C_C@V>;8&+$PU3Sb5qUVqj8_l
zy-Z;9b+|;eY!B8xK7Q(k{40I;|17%ioxKE7n|#;tXVHDT_x1{D)HD9G=r5}G_S*9k
zC-pxeX>N<(weCKp{Qcs4=TCQ-_zvaJ`D1*+Gi)3`lxWme4g=|>`S+gRn||Zi0}gD8
zrofQ?_cSc!lJ7BC$Q~a};=iYAD@KgcVO(r`*nAm&PY(g<-E>yy!uCvuPG0{tr7R}N
z1XQD18#2iWJG4LLrz|Gi#C&MaZde%CuPMEBSe1}3Z4;H&Fte4j`_qugcSrsWdT+`G
zOZ<NUbmt$We}mTJ{*Clspqc(4{TFDv-$?(D1T7Z+{{Xb`(f<m1<3B(L-#y(1sK62k
zbTn$3w0jGLnjN*KtPw)PxQ{7l;V@;R`_fcbQ*H<w;G|%02ktMsqFN(PS@{)gA1QzP
zIKOX|%K@6nP@%mCWSf}jYm^Y{L8se-vd}>`NUi|ykZggIPuzF&Z1|bZzHt&_(@@Lg
zf2AfAdN%5f_SwY3ESqqK6^5Y{`)%4V0T}rz(#t%V0qJ!&%l?x~v@+sYgn&fX4&mml
zM1#QY@W^M{{g<!AgbV2yns7$kZLD;;5_4ecN=}JWuESx(`kj-lPB=A<`)MM96I#i3
z57QX?FaJ<B_<(udfW4J0{PRkL%c!AAQe4WjlfK-(QK2c%NP^1?wK3<O3(cyYj5>Xl
ztsSr%)~Kf;q*ao0PG~w<5f`MlvCZ<??K|zUI1N*z*UWeF{jH!Bw%umb8Q%{_pVFQr
ztBc>();aqu>{?Df<Kc6+*$t1;8iuiP3M3xVekZU3bUReiRb1(^3frX#Y*2Sb^z^LZ
zmE*W*LQ@)<DY_y`=O)A+_v6vI*f#ZsRLti2VpBb`TqswgLFfHTW#$soqrLKHbl<T%
z9iFu3ju2>@y4AoPv?2>Zc;Tc&f2{(wq4`+?d<3~ETIw-`snB@a3!zA_AruK=t^JVE
z`*6e9iH64CAkXcwg+iW#Zn3H08XcvO`d*!6xZ^cBIBw_P<kB{0;XMD?k}k9n^!djH
z8sE-47uf1FLB=sH_ddwbAoPUT%Z8o5#Pqr;Z1}5CaMMwCr^uga%lNhImDb^S2;cCl
z8zM|F8fAT-;SrUhL0zBLQWTA{UhLw?lJ`9vn;$KkFB6O+pC9>G@{Gi4#$A7YS;P_0
z`r#8;Fw@g(Srmv8;l?tlH<as+(p*UI{u0%j2^(}wYGe*+B#6;TQ$*EW{^XI)ACK5X
z?G-cqrB>+F<kEw(YB1B6Pq841572xXb#eE&(LaDy+uIF5u`iU1e?=}`-`&=uW(-aT
z)wFM;ZS<%){vI8uirGAh!OGD<F&}-ErEmnB)4bysZ%i_%O$KpMO$%u(f|qv9oOS)`
zUB?MQytjsD(}vtDJ?E+qpTK=pq-pe3KEb6K>-dd@+HKLJeAuXb9)gX#nvG@LeE(MI
zItfGm2EAf-p7Y`n_0E~H-Md%`-_h@VG&_I^ahZg3r;}1Cqvj^%U*-9#yO(4FF+5)0
z@o}=4)<<sd)^)UO17?p0`b>0X$nzScUSfdW=jG+isx^685~cZeff;FjaB1%Ymlr#I
zHa6=&Td3hg<(N{6wmA;LAgV#^<Nf2~lKt-ue27Z<gnNZFmwf&G{Z}YMcXmEY(yH>~
z(KHohWo2T5w$K2C5=s<P=%guC>dmXhqLP932jw}fAs>I7%8|CIy{*7X83xV1^}r!o
zR#wD01EllFr>K8DQ|F1kdGYQ5aY)W}>|8}fg^{swLdsNIEP8XGjdhUple(93J;&jv
z<_9SgTjfko+_KF-s6(#NVQW0mU!FMZ@Fp!N5sj8sXDU?-R=?*X2TYd$xQl18wd`xz
zN&-+N4v$HjcEz5-DrL8xfQ0oeIEw|mB;74w3u}J{^An952u7FQB!8Gf6ewe^a7`=)
zxo>8Idx#3sSORthK@wfu^(1X#+IC8V8_YFtypE{*z(*$A63qcY801(28%JJEjm3CM
z#y{3gk{M8Wc_J6@N(H{qu2{dXz6x&}!aOG_#}cB~Rw*OgU4{<(Tq}5pm5&dU4qx?C
zyYYH!%bU(kfMzdCDM3Pq9j$U}d9oT9J1i=^#iZRJ?)`yyxNUWtGMd+&JVsv#-~=bO
zF17Fcn3{50$JMh$F>yp`+@3UH^Bt$zOF2ps(4&x05D$lMCZGLn^VoIRgELMpkxNsQ
zft<Y{yyEJ2><)2db+rPYM~`}R<;JAf0ZQva52R!sn~$V2Z|v&}=t0R-%hNR@U))=w
zro5hRR-fae48Was$y3RIwenyJoRQs^i12%#KUG#*hNiS*7=OEne<e#L!1Tszb!>A_
z>@mekJXDu^WB+-$>}z(8yq;z%c+5H%U?rMqYSW(y_LSx~hlgOJl`b3{4~XSzS+U1<
ztZ!OJD4QLhp+bi*-FUXV+H&awpQ>tuDO|+ohC~u)_ghsv%}Ggm8md@@HZrSCX3Dvw
z-M_@WbhTNLskBmd%eE?@WB6vADrJz|-OL{&riQLyB4cBr<KWRGw(;^{qQCgEC1q<$
z2R6w-iL_98zPFk$<CBw5^eV7|Th5rpP2=<I13(Q$x1MiN-N-eD(^E{~%q&OiKih0>
zYeO#c4es*6ey&#ENWJuw8V{&z0xNWshOIGRvXQn|VHCueX_kC$tVG$J*NmM?1lbm3
z^jKdgHEu^_FBsqea+U%6{D--;_Xd!{HxwW=bZ*&f`xc!61j9DAww}k}#~`;wIhykn
zwF&|$V^>l-EXPSI=y@5{9j)6{@D`1>e5=U8!NFrxa|oip7BE@-UaEdxW!TwNPKEWk
z*V$X6(`Hu8IHZg2!XB~6N7xS1>!3|3Dlcwf0CEH9TGWf%{>!L(rAMpOHuP6?guHYb
zt1v_Wf_8+GGSExzUPjrEvK~&aDBxIvU0w8+sjESQ*<blSg<mCoBV51&D6VoR6(m2q
z?Ge`W=4-mV0R!rqp!7d0viTmA@tnOekHIA9enqJ1p28l@(EcvUd4d-si&jN<==kkf
zdH{PZzQa^x&A*||mrQZN%T36q)_3d)y6^4}m)Tu%9lNq85s}RM;Sap7t{yJL&LoDW
z|H*B!bMC@)Zca~w;}?8wm($ET)rU}Uluph28qp3yEXCwcAjp&_ShrJ!u(f3D{*TB-
zGlVoMc}#1k0>BO1#9*<u#}WNy3p#2G%ZdhP7mMo=pM$#<8L5HIPMR_3Ewkw$6v_y^
z^zox&?8c!d)}yPGEGor)aErrlKTG{%cH&_==)JAQ;WZ+`M{MTPhLBy;0k1N)k2g;Z
zOigSrAsH)a1IVwCRHWh<YyelXITN;{C~UPtx);7oq{Lhsd|gH4U4|Mzzh1ILT&Zmv
zJJsV>%D+fmsxCTt@!pq4)={mP({YckNVL3=PL4~EJXQebY4@bNI9;mP>Nkch2BlNX
zkA<(f8v?zBo;Rf7ill|DKoO)793?9Gz-^dsjXq+>WhhnOb)rGC{6V)7pr{a{z}eGS
zL_Ou~i5BV}CHc;ih`5PRzBB|mrM^5cW~%+b9KiQT{F!auZ)Rc{hrW8h=8$RUO8gub
zc2B1K%mqEmJd0PR@X-lhg8x|7=%oN<KjY290RLIx+VKGs?7HvfuzkF?kn1+)WP_@4
z@^Wv+`j703F=>92&FbwnUd#1V*yNGru+td@Ix~z}bD1FX6*$~uJ)0d$iMe3sU6SB+
zyrhheI(VhxTeXj)qpqTol9zNL;r2hZq?*X)>oO)AYUVc?dN436a7_n4_cnI78z03X
zdjG)#P2CCxoy1w9X#eHFK+il0>7}oAe1{g5+w+yGCMkigHHdZn;G$@q*ul)HkoBRX
zWfw+f7K$FMwU+wYRWOjTSaUmxH8$n`JUx`6SiynBnFK%l^b<5$GP1uwfy}xcT~SLW
zN1@l(f09DKa~LRR6MB+E%>;h)3Je)N6l&I7a(DG-i)!=<$#_bs0583>@$*9suVA)!
zAFA$-O)75x9;Is>?`r8|OG>2VSI$!^$uB{C^j=`4*4=D=ZtenTbP|x=E0dgn?rufB
z5bV*Mu<*gQv{46@&RFmz6AsS-N7<L9B7d(ygS?8V4qy)TxpPM?tSzz)Hp>X=s7nv3
zlRM$B9~Bq-dyp5F!!o*iIyN>w!SJ)`wP;vUW6>X7#V*lNa!FZPqG@W~*si=Fg=?3U
z_QZO2<BKicfRZmgZNCRH=-sdr`#*B5A-r;wg~jHKuR#jbd65&G0R7I=P;<iCXXxJC
z)bEjA|BeZE_@Df0R5=QBLY5>=mTsw)*2GDlYhr=RNI&_2|I+ejBT*{RTp5&lMW^<K
z4%&0@;K3Q(Vn(1>UJj3Md8yB=cX5C<`g!W;rti)lmVeQ5mExtwaTeGqA1g)_#V-y{
zPBQ5MKF&suhL|6WTSr&?VFeuYw@YcNwL+0?&f8~p^&5VU*~^hv_bSTXpftv6lfo-u
z*C<`iLq^of%lh&m8Q{Rh7q1EbZF{vRkjbUgbG7MyXNa4;K0%*>NT<J6^MdM7i^zUI
zz}DU9B)9V*!A+B5*U+NMtiN(l;IFY;aZoQFI`Gc4NCylC{6nGI@dIwyCqYKde3Dyf
z^~*iB3xC)qCueeb4q&|ersK2@?W3ktJDQwRzMPrqo_bBgi%RR}|8T|xm1=rhR22PB
zr^K%tYK8!f8^@zMjOH{!$RyqXUh^tk8{&_1d=9wT+l&5%<~E(1mR2N1(|f0`1p||p
zzIDTf7b*Gp8M(7){Z|x%&#Q>e<_|iaddTz_GIrmCjEq9Qfq`XbgO+C}+OkG_$KIQZ
zs{R?Ibb_)%N_xutyo2A=OZjbKr+*$k?i(2yDeN1Fk7fko!qqN*G(7@Bx_5qP`T7U0
zJVEcT9`zgpDmz<%i5EmP+LT{YHE!y)S$}+_PCnwF{eD?yNOewWW1aVsB@-{t(UfjY
zVDb&WQ2lxZ<SoQf8iAIEZ-0=1+nA$%m%K_PxXSE0QlO8djFZP-Rv6s$U;8Nqgj@Y9
zdY&-=Gg*%w?HnG11rnT0<X80<^H8pf-F|n*ZJK`}hDVd0pUDagZcWguDZA}tSI|9t
zi>buq)ak6v`=b|u@bv#!@mG}BIj+0T>iN9(^m&Xt{yT!|(D2GC30t&shrh^V?Wdy+
z9XX<a-DL;<*-iLO$S=2_qr~nr=Sf)}|7e@?x2biQ-{Iji0;=gxh&Ax{P%bc-@;7pM
zQ#$nG`O8{HM2xDpeyU{RJMu{=dGlYfuW<l6-kzc^ztQ9s0A={i(amk>QvDj|k;n(i
zVz)1Ut!!nf4y{N&owYh$5d<R@2mW%=8)^iWg;p&(Z+CfL_C$}p=z0vh&i8wjP0c&w
z!7!l-vT1yHzi?^~S4+|HT<c9OCAS#W2PJP&wpx6356-3aYC%&k8lP`ZehUMW5y*Ox
zzk`(mZw_;^wii?>Gu_;D(-SrFCsGWi9W{u%kFRPXW@c7yT<v-18ISWYIuAMs9E$Nq
z{R~z*?=6{eZEEDbXfzB=3!aL5K3&9YR5X|iheQ6#phAO{v~E(_?AQxNPhRgcROAy>
zHlfR#_xt1G1HEg{3Bu7claFuq<XwuF%*!>@mA^1m&%Z76gshBb9F67jBd4S7J-se!
z)dN$sc>SLIwYXzw)#gFkcbl@m91N%=_wgDG@kw>Q7hPLxnGXweFYIto3JyL$!7mEQ
zZ10?0eH@;6<g{LAWABqAr&C>Cu*3*0&LNf_LQ@HnKN>Pe10Iimun0p#AYbRnM^WTi
z<@rHj-^X5F$Nmy}v6Th<=)v=4f%d}Hz4B=9$IzvZp8L)vKL}K*g0B<^>Af%EO_7C)
z!Ge2no3#yYdLqyJl(G^~y)Pce=1xC_u=f#duK~C3ngX}oP0@@h@~=IWMx1;QWU*{A
zag~HQ$?mJ9r1WoTP*PMBiqn3^%f;+vQD1bnE8V)h*K8xr#%&VS|M{2KXdj)GR(Z=k
zk5{m>9W_uD$Sw&5I+YalE5&aS8&+WwsS*o-1SFZ4Fbmzm5V9pQC2Y7kS+=}Yu2eZ0
ztH!OmOwJGi38`Gv`pWX@PjTgOqpAGhn4&MvHO}>`z&6gONmTJMhVcZK&z98TB7f=V
zDTKdPdGLqLn)9fLj8VelBOsq;<jSagR{wh~*_-1L5GqUK>Lv;hXcx5tueS2+#>@WR
z22Aq+j!(BHEkJSCC(rQmCQq&|xmC<YpvtbbWp?*M>X1wMlU6I#!jV+A5o70);nHWT
zspJDKvMm`;gc=aGUfS7p+`kHGpQd!5aE6IR=|3FG57B(^+qxRJ3Ltz4+-Yh*NEJW%
z6-6GB<M*2EnMnHmAR-rx$0cs;COS{Hnk#`6<6l+z*v}B_ErxwBNE0KO*Lr(%oK+HW
zNMLGbds**=i5JVt-2Nz~dtp%W6KO1;D#?pL4?OToV_z!JM3UB7FNWe8x4@dJD<w8{
zreST#w%x2WbxYOCk6f8h=qoIH_N;Ca%mace@5-OFBxuI3&9BBU)>tQXwbTx9otXBI
z!S96Sc6uo!Wu+7_o8W)m))~SgIyy^d;b?m$?}I&(TeUp_TKyy(t#tbN`Gi&&czati
zkPb@sD_3k;8Y^X^)7+6|euFvM2lsWiCeS7V(bLiCB!@Sts~qitzF=9bsfpREPgt_o
zazpQ@*RMxL)zEqrKr;>oWl0P*<64zQDYhL7+@uN#o}<%t!w>t2IQcflrgg>#i#*-!
zeFZrrN`pD{t8bxn6DR20tZC<#{0(O{UB1hHeM!3RugDkUJn7=*mQq<+`Hhu^q#XDO
z7n!kNv@uBj>eY?GGu%3f3m#QRgU*{nj-rBU&hzn#cNVTDvNWh>(|&J7mA(k}aa->I
zqQHTFo5{@PBhw77xQi4RuO8~h8|EH>!n4h`<{p+hArJ0Vw1(jEP(EEPXKfpmxMXXu
ztIIQ`-;Olw3?AJ%1MkvWLfC_cR%C-t`ORwpld&r#L(18Zl-62}e|SAu*-B*P6wSU4
zxb4z3BnvEdjDHmMtNH*uj&F1_uXvyL#C4<F%V$sK_&~iU7b5zM=M|zxvM101a`MuE
zU0_@l?tVJJsZ&&WV+0etI6mJ(Jtu(zs?S3pVqGPASsC5Qxwpl%Yb+BzY=u_N{|;Wc
zz2IGE9&~*cK1voS;&DBG07?jLEO`pP@(BGa_f+){$+~YOObOTU9VG%MRZ^V#z`6Wg
ztw!1I$V^PNbJ?WoFb|$`W+K0<HyQTLJqyYZ>)L)=mZ6g@gdKj3iPde1sYMF?)7cZU
zB#TDuw$kAaAL@l4oFc#IE;^wlvQjcK<w{~HMlN~n%WgF^ZaodEV6Kpre2v0r)mu~0
ztNwXE{MuuSp&KM@)U*?K&1?rsZE*$;3BXQK&t4&}Q<m%7mt<tHyw(pMpe_lC!7gw7
z{N@C#@=j&9eY0VGG~C$L=!op-$>y)_8LzJ;OEBAC?)zFr`rtW;-Ox>aVK*GV3rFwv
z)c1Y`ZGD${kAwq*a5V?qErZ5RTPBV6alB1vIAp_g{oI3yOP@W=Hg9}A6vrJKKlS~-
z#R=KVm#J?i_<aR@Y3ZeDTDli%qaM#Eq<frzrKr}VnhxrppJQh!GblHJiS%3#4n)UM
z3eU7(xQJ9YzgeXRoE(3>1$A1~r1P#*<W&Ur@O{hPqIwa>t)HZh0A9c3YVp|A4U$E;
z_hZfZ#&_quHX=K?n2ZOsqpX%wUoUVzxH2xYCVRc_<}1fa7h?+xZt7c&Fs?8zwUrY9
zngJDm`7<Mr((OwF?huPJBo|M?2tTEYv_E;a`S4OZS;_{fBbs(jF;60=9~M+Z-%a;^
zoVL-Ir4}&=Q%usQE&O@uXdTNKpt(y>T6me8f}-@x%UmH>bEYx==4+;#r`BEv2X9SP
zW(p0TKYyP3c7+Yb2BQE7>ATyV69o%REBapHjZ!Oe)N)OzNbO(FX&3}(%TDYfGZ>`F
zgu!Oy_Q^Y2oFZZFX<B=LRBat1MnonI^+%1|%yQ&{dL4|2%W6Y|u=vhdT7dv}GCvgh
z#m4=sw$513xh44VJWtXE{51(HXu|8cneQh>N@?|1l2cOD|MJMY7MU5G5qW6Qj%U}(
zHRnAqOzQ!~IZ)-bDh)R<PlYlLqril!@kASeKp_9?eSJa8Mfziy&jPW^Ywdyn;F@)s
zK>w`mL20YYsF8Qi^p&JuZ+w<YNvbb=p>7;fIC^$h=Cl@$bq&Gy(TE-Q_=PH*Et|+C
zIIzsRsyp_{&_spfSbdDLR!lix3Mf1(w-p%(zu$LuP@?PJRc7iNrpc$13~aD>heD?7
zwMwRw#C_h4ow?Xlhid_Gv%^Xwuz6w$Sl-G>;$%3hcBTFj6M`pj&g;jkJ-+y)@rAQ*
zDs{b@OE0{{4e?YuSW$wg!X_YGPB=h3oiV>wva_s;ewl9?G77PbBB16^y70wU3n*fk
zdk0^!7sQ89SevP?n;cwMT*h*-<Swj;a6HDZ*%d;eZ6Z$8_hW~EG)-2uG#|ZJHS|{&
z?6^I+VC8uRIolD~)9kRX%$(#4&P{b*7}I!{uBRFcu}MMhxLBSCjC;|AUyVZ>9T@2x
zupiwKb5wY;HN)t_#TdV_Y7xGWwh_-V(uvZ9k7cmnK(y$T<=FnUw<7fc=XFPWv>v*-
zJ-LZvnAg3a_TyYX;-j)YuAp>*8=n^QwH6NfLL`pE`If5FK-c~_+RfoW;}4dqPL{##
ziep?btO@C=<?^K^D0$!`12$RGO1rX~i+wpgc+T#$&=mikZ)0H}>ckZQuX4Y#NIEDz
z9)Y~U-PA15op_~hd)FBL0U1qjJF=$7=tq2}gUxu}H?)3iWSoOHzB(oRfP{tYWm@r8
zTdxKl*fq1wdlEgjY!3mMe&-&Y;b)29-Q`b{#X-}{6f_`+Ki5-akb&;<;RW99l)FqQ
zyRPIoXD5SNa_`$x1D+J;U+H+u$4pz7*ONGmaeDZmFT2@H($eSh2ju)<+@`-fIp$ID
z>Z>oZbH&EDM#he1S7xzg!W7j~7%%Dd8-9WMYc?bk@a%5blxFuq@f{N=ZBrM`pEQ^X
z6Nil7ph{Akpp>t?2{}u|CpAVsI9>$2#ES?^Y2%T1%`JJQZ>7Ys%%_t`9ugz&aiqLv
zEp5v2O8h8ehxh4g>!>jINXt5Xf4hm0%41e}U^BUcehjk9pjf=wQSO09moy<6(S}Yw
z&thztjC{Z$*Nh&mnQuOSHYa=eYM}rk&K5U?g7fL9Ht^C*ANU>nG%uKkB+@jB7DQfF
zPX^sXu_Oj!MrCV?d@-qj4GCY-8?V)TP=4>XZO=s}U3izZuN1(dx-JO^<|8_~pT<U8
zKI*3<S{~{+!2_5gTS>R;Q5%K8G5BWW4a<PDntWL=4Q<U{$5<aWN&%=HxO*b8K_DzA
zWeTIxQ)aw*FQb`2Fo9fqSr3tJ+gTlh@=@PEH&JragO)P8;L@owP_x)3TOeMF+CA#;
zyT#JX2}4qULXqzpy%2v9>g96_iW}!RhV!rYXNruspKrKQ?>_Lx=jQc?PFl~lHW=qO
zl7bgj@CT0(`O(BN*7$|_(|kPB))2@DAuzn&U=w+rU^3WMdPU0r;#RP=dxiA4OyG^p
z7lD#bPX&-j*3_5hYAe@P!cJ3XH}Wdc;FrQB;$~(<w(czNI{PLoaVK#P?6oB`(~(5)
zUx9?0i|(RV7Ia+pm>6?03g$_Rd-RYj9Nl&2AppGTrZCHXN@B`lE2fH&f;DdN20HY-
zli0Rz63?7Lv@fAkSf&O3Xt~dK8X7riQjl4x_`L7b`+VnCr0>0Ak&&{2@U&N5Ne#o~
zXYsaNx-$DIr5t@txI@T|mo-7A(95THH$oposVJXIXlnG70Vb7C%>9$ch+Vkc_!^i;
zs-DTmuXZOqps_aY2tmZU7WG{|y)?Zv)lT1g5u!EX3hN_?Z?IG!P}O9y*J$R*Ol)!d
zSHZol5NBVu#8iI9&eR{cFVd#FoKtF!Jt8vyR_0=%%g#cCbE@8z+fnRCtI74#aiD<D
zIfi2bU1j;%*|cFef0{i)=_va(E|xibLbpt?^$jVdn34{ee61NL90p>=UG^1Lx?36g
zV&MK=n*{JfVKK|Qm%F^@%t2v8X9ndO``Ls~56n7OlWndx$lOo(9~GF6rsVoec$E?E
zIpmH`x=e2bHd~&T%wrH%<qb_;*o;+oL~H-rr9c_Hp;F<2Bkw%nUwrEsDwNInfVnj@
zyS80=>6Y;6X>6?7-S@49Pt=pn{Rkldta$w(KVCU=a&l6CLa{H>%rxy^U>3MuQ7^Ds
zM^%FjM@5ZCJ}D(XaI2V`K^nfba2H#oyn&3{-!Lh#yTrWpWy*;E)DzRw#iEJ120g95
zEnZuS^<_`govs)&9aILiJB3xjV5h^(=>DW?2;NhqKe7U>5w|(fd`Zsjd-%_4{P4t^
z$OjXNCt&MngeU}|H6|6|Vp(fowVGYLm7i4Kph&-84$dOX%E!j%xr$VbAJv<E`su_p
znmrZ7WC^}}gE?s|sVG2pSgA3L4`HAf8yL_i@~cK#SyR(-PseDSPE6=EEy)|t2pVfH
zs$d~Oe3IZbzPU*~xb9H;L<gPsz#~Ql!iYit&U@19N>^*mG8gA6kNm0D`l!9|3_OOm
zSe9^JMCMM62;S8lIhxJsGxf5JqG%`~gOcgN`wf<ZT^0VTyZq$VxGP?f&b5K~OM^%x
z*TjA`+|vb`>a}4>jc$2E%mS0(Ru)MXaM|)2^7>Zr!QRGWMwB}Er1JAy(-_?Ak|Mw_
z|8^?7)wUQJXv2?NBL=nAmXj?pETZ%MTPGzQx0r{;{WYHfDRdXr^YHsdAEszFEj0~j
z?lh?zn=c<dhTqjpGm*Q5t*ibC&fk1Gam<ceGv!PA#LY+yI4dS-7p`$L{`P2~DkX5G
z`7r8x63|e+2J1Do>kp}X?&+=v*yNGRPV#1o<Y=ImJ<YO?wbptDlo}5~+gr~H_(pU6
z*>Z9!MYMEGe|@(<L2H9(pQQhOr;U_3GO;~;>sTG7c~f)B+BH6(E_e5#M}x<VZoJD9
zlirQlmglT4Ns(fR1eN`gas4&ak%=iarLfzwqF>9VN$4dc;=~2#5pUF+5zTr{==mAL
z;nUM(0m}Z$GnD<g|JlFqeZkt1=XoX^Yg-k`s=I)J(nb5Vv)%`Xg87Ple@Z(n1mSW;
zryV^=y;^*?%-ZvcGnriONf&fCuxpT-LiU{;H&bNU>`*HH6eR`<YqeLG;W#Smlm02U
z0y3TF>|s63o|C4+m<2aNsIQ!mp-2JUUIwXk+k%qqU)i0S?e3VMe?0q@d*kLHBzCUV
z$pt}X>`uKHCyG*LN(nR5AE@XE+!}H5_+bCby(NKORzg#4t2pZy9H%Um=M8OBbY%5|
zlgVk*Gc5RORp~6adtBtCq$(wk81`f}M4iXgzMyCo740)abOPYJmF5-}_&RhJ%Y=gQ
zad32$oI&k4y|lrYjU4J#`yikDo~lnrUjPlB7*vfwOu3w4%+BsOp?BreOvcqDrG6Y!
zG*EVSr`x)c76EcVQ%Gh0D~_6tlfDfea)n3De(fX+ZG<Y|j@I2*_a)+t1`m)aVqOv^
zPY?oa43qiQ_M@kL4Q7#S{jxv^OAviKedVZ~<HLuf*ZMp$1>N5_2$5z_rtspu%Jgof
zv@}$`ricU0q7^t&#9P=+1&qrN<n!#z>q|v~d&<Xx9;1qtOB-C9ii#JihrWOS5x-J#
zrpSlq)1CLAQ8lOWI5uIIcALvMZ>d+gZcEDs6G|Q?*w1-16Slr2U1@4<K>hqD0rUOu
zA6DSbExCVZRR1w~tT**p4@4$as${npBh_WNK1p859f_XwvKr1llYo}l3(0matp<Oy
z7g@ve$lS5D15MffMGqe$N7*aY^=(8<WOp`<_`+9agJc74D1(JxfjpIOW>>2x+uc%E
zKS1wx_rM=3zn)LOs=_z%nH`xlYvSYa;I{8J4~JM8DZrWmTNFz?V31qS3=9fqQRqdQ
zd0qH<df#u%07ThK`Ih)gG1tes0uDwveu%O2)R1n&0|3Yf4C`w-N>aXG78UbPZ4Cx?
zN28(b>zM-Sx6579J3Bl1eVPAC&;&CPrYKAgGvdaqHR^{Bc1@K0BhAAH$qdgH=|eF<
zt%tLbcN2nIP56J=?cE?^l6-ZPA5&8qd^jyeWcRe_cvmTEW8L`GT$BeG+{-mh_^~r@
z4!N#p*+N!h3$oLDhP|o`zn+F`agHy}$)O9Yx<E@qt!UJC`#fK&ZilAWqw)C(|MmPt
zM?;PYb!nomW(|)uj`*1TAs|B77hhp^6vNkHTUMV39%J1X|7+droi;!nv93#x;MFaN
zpRMI9p2uEGVN>{;UY9>=*^F)9<Y9`G%Zw=;gcX`q_*ty|#7lmLAs%U0uB~|-LVZ5)
z$Nj#OJTh~g_Bofs4<2=`4u8;d`b-mH1;(`3H#XJH&ckOr%Iuqzz@)%6eBhU2dFTGV
zpdH7fE=gLB8AMjbUp^55iBB)f+}m`uDTkD3EMZRg{*?7AiG(FA8|RmPUHIIqg5BAi
zHs^@P*92RWhe`C3F8y7hE7e8=vn}gZr}0}M`h^zBEuJ_3>RaA?d@bX|SOI=i<WnR5
zz0~<<{vlu<MY5AUQg)q!Lmu?Jz9i99=g=<_?_yi`u6XPbelE+js+eY9H`|$O#GP{1
zsw+FR>VM?EdXh#nup)KxI+QP^-L?h}!4SkVc7cErKt&qvwniQKwhNFNELB(5+)hUs
z`?TkErAQkG1*ync9Qf1V9A*ak)q#m;Bpf_vGr5*|IhzREM4wlJ^w<anaJEQS76W!`
zX;g=LI`X&%HP{(nsAUP;OVHi#Xk(s2hA(Z?#vaABy;_+~xgsmhTAO00d*8RlEO4uu
zZTbT<(LVyUHd3Et2eN7g8(ea-*9_KYL;{{8!Fhm=BENnQvn`Y2yOdx`Gz*ab`->6=
zVIQB8*RRsQb6yGmVExz)#USmuwF$Xf(=~IddTW_-XsdJ?r5xJOk}hRX=*}}w$Y$&>
z$F<2JJgUkZ)U0GJ6xwUl`t)f!OS{}zuibj-B~So?GV2Sl%;0(H-_5xb-v$vKWud0&
zDOmjmGe24BtckPje|<S{?uudZ54CXX8YPdwmEyWJDc_00-DrWPfZZezTY?=n%x9)E
zNoaJ0BN-U3KjCKq(Axd+sF=bI-1|#zL;_>bqoG`c;*p)jjH^7OQyW`i3CU-o`*Z4R
zf`cefgYWj!M3-L{>mAj4zZ>;I{KkxvB8nk5hJf^J3wrvY3n$--jKu(&EBveo{kR9Z
zYda5{ZURgyG!O6M)p>uPLil~JUJYd#><N0r)Ab$JTkS!Ylr&?oV)`}x@+W_vL1S=w
z!sHC;ZLDg}{^@P!J_w4=k7c+-iKpnT7Kdh?1j_(@MZOE??wvYbb)<~F5P4BDT#AuJ
z(PQupLP_7B@JUDd%x47If4yB0{!uKyIDVRB4w=#6p9LA#!T@m###eF>f_QkaHTa9i
zT=CSg25C-*VXNWOKLcviAb`J)3S1#!Z`R_(9?z6pnSY+mv~`=f$%+D~NQb5P{UnV(
zY~3iRIRuowg>)>oD{K}~&3XTla*o^7+iIC7mW!OhM&G(DWhaFje)cXP0%20$xq1D@
z2)H8`hxju8^uRXWzLQckO!Txn%8nOYJOjIT>yq$PwZYx@0THnUz!(`mA1#9anrzk7
zsTweV!IxM~BBo4Pb0`Kur3@E0jJ>QrO=bb6+sya8|En&V4j<W>PSQzqzK>V**YF<G
z=yF`{j-E_Pn9g8;l1h~=ppsJyta!z>cBtwxKK74y)j6t1p4;F@9?i3y8W?iwvwDBS
zvWyD=o{meg<2H(y7w+1!er{}}BP%wk0p;^)R)I{pV?P@n)@c<O<XYLB+94cCPv$$a
z7F0A2htXOIsDRsJv-i$-zj}~CLF0Vfl$Aww40j|77T$?AkiOF-4v3I{)(|#jStlOb
zue_#*Ynx9vn&8h^25nE8TKp{ES|7P?0y*n^>haw3i$VdI)*o1k=yJ&&>^HhmJYr`V
zFtsdxS%&#4KJDf*7M+zcheb!UAK#(CvA7NHb?6I&j=`0I-%m~w>eaIT?a*8HlpgdU
zxcSWV$NQ2rKb72ai=hVhd#xUYncbY*9OT`Bw_v_r=@KM&{<u=H^;*L8-J|aGMy~(>
z-tyaphgji+p{&z<aKLn&eT}%O>iLU#(<N-qIVrZH_K!nF+iD;X0<vwBt7X%NAz|ZZ
z2}v5GRlYJq@Ouw&^lmvkiC51;$NqK1Y0NiV{~q*syIaY;@PyFNo4N5)XF8SLZU+YQ
zoU7!Mkj4IXWU4zQ^Sa#=Vt}&k8|Gn6Gu08ol!LXzE8?wiOaCMOOV2Ex?*l4|vf-`T
z{NfdgKKq?L$Nox@zrs)q=Cff;Ir<DQNL{TEH}o|7Yb_X1P0Fba7X0xoufKOgrPx2O
zOjv{3Cy;H|CdgNw{yb`te4T}bWe+E6mzJ8cw5Ax3m*aYnPL_egJazMoiUg9&#;m7L
zzq&*~n?D1zp(X-_0Uvn;`s_E2uVC#-8&G&<@vS!H{;O&TB%mAh6`!D*FqC;NbAoTJ
zy?o5XDCO4K4;7*}nS}d{>LaAS`+o4(Y{>g@>%s!MtCT<pAd}pQEnuQniRJD7=@i`d
zH{ZL)A%#9Ins~hWe?OaE@c3X6$Z9h#k?R`w^GILms+{G<c93mF7*4#sqhU)cwDOqN
z{7f8}q?S?XlQtde4~lat0LHP^$9zTCN4OcZzhNEKxBOJ)3kFlp;yi^Nu^+{KXG)|N
zACED-xsnHwZu1KO__4Sm1!I!FQ3L;;Tzx56t;Em(H|WxPE0FZ+Pj~T0=x9$WgpImA
zxN3RnQTJr;3E1w4cw~##`t<pj4@#2J>l(3vt7s75USC!;<Mk;)VRPAOg-e*LG<7hL
z<A)^QS7=<@k)53WH(W<gAoml1p+84&tImI_hDlLt!y_XA_{!kNT;e1J&Xi7M<>N1j
z(@8u`dAf3oa+*Kz>L~jwLRNl$3jbp1w(6xMOH+e4?P&QE72lUe17%$N^j#a}6vKQ-
zyZGsK{4*=J?|H%jGWv^~NqnhoV}hU$_$q_c$0KgK?rBx}{bL<&FF}4cC0q?{tF9uJ
zn~BETe$#$4CGl29D`jI9Mqw`k6lPU9T+wx>kxw&({S|sd=<9>wQemZEpnOPhE96a!
zWbhIR^s(Pyu<nI20Nh@6Fg`cU&O#ae<kvSt)H<)3Wnl+;kA`I3&@XzfwYBBa@KiOx
zi`_)!lHFH1i_uRG937RV<9(v!G6d{m<Y_^W2Hx$=i~g9K2|H&a0$9e69shWZt*aEt
z*(6w-<IDfxoBbI^$&pCH`<1o!_46%{Ef`DjiSc#IbOt|d=4L?rv!qR3@{T)^wm*AN
z>+{I0lZ0Q9rJ!G6a2%MZol&bUXVVavx`4ryc38U8{OX>G;H{qK`Y5N-QS#&xgAqbS
zVM1~`0{aOo1OiNk6)*|E^uFeAz@K?y>`^x34fz%Zo)?1{?Xq02dLgK&xWw@2+V|x9
z<XJzIy$j;&sqW7*;k%AbZZxOT$)wNlUUVI#Wb_A5E1Y;x@gv@1CzfpJcHc?J*C0z-
z$6rBF*=}Nb6v%su;02gQ29dPnm1{4}-x4wNiv2!<`?d*q0KJNpiCdYAZaPu|sqN4r
z%{o}to_zqbnY~eicC}k$f2R-7ihJmJ_-cIqXgPCDV1Wt-Gw-!9_5hHj;iI|$vfK2D
zxu0J%mC`Kx$XVsg6v2)O3!3g4WBFUa%2q$GlQsFUfe|^P3+fv&!9?7~Y#wOd^Fz&~
ziu+Ic`I$Mxo{iZHDvBF&O1BQKVJ?%qyLi1&2*V3ACvr+IdR%{I3WtO5Vo(iN+W2Dp
zH<mXkaMNZ5LDMCNBs51Pd@9sD1qq4_Z<>VX#;zHT^h}uv9Aesp{@jVQ^&1&<18hH>
zk1@0Y`$sK<rvH9VB0J@SA-}u{udjS?PacVv-@q@w&uw$HVM3`#9*qN{>PX*t{0Vsz
zvL#k$W(2{wmLox6<lF3LaNaTnPOpIZh#PE$*wDJ~Do>!wYY&kO*5Gy!DUdfgyGGo(
zA*SaVW~|v+$J-9gcE^H~y8?dIMTQ{#sIDnUIf|~}Ax?{!4@eg4Bbfc<6g@L7z;l93
zx~}?HA{u&n%M+QO#!9=nq3R;Zaira!-~`WnrKYacbhn1=Uf<A|*c&FK10lTt#KnsT
z*PI~m^=lCg^-3~#N3PKqk$FEdia+aT&r}KKRP|rkDFVcA&GlPVlai(R@WM5tXHt)u
z0`$a5mOJk{#HuC}wydw|=M2N8p61YQz70P1+2$>`<7`0glT&5cqBqkK_fMcn*Mo`s
zegFQsaChq|_$@?r2W=NuHvwDC-54phY7%!FKrappv?~&1)|@iPt?!NyFH9%pmZTJ$
zKHK5SKSjRwo&369&xCBi!R<ezTmpaBO^v%;w3J|3;X6S!Gtu{fhb|e#Z73e>@(g4y
zI0v<`V9N;}086L6PYF=(i#9tquIFM8yIu>9WBuo4(i$JQn|87W9jq_9C7C&$xv=A;
z_-$)CClmV2;^i~Tt9n+Fu8`oJd3FPp&D&9;kifDp90tm_?k$Z}e0tD*N@-|B*+0P9
zbZG{mManMXUZ}<P`by}hIzMN)FQ#ji!-F!*aYdBEHO9Bxm659oW;rUTwIRM6{u@7D
z9w`A$O9wX`>H5Zf38XMFz@3}k6hCHDttS3TV?4`Nsm&1>d;50H&SoK7nCZE`3<|pg
zd>zN<$3u11<(}McXN2IS*93gIe;=rd#c8(ZW-4x5->*q`CG(7Ifg!U~^6`@uZi`D2
z%jH2YV=W>Ar}<8{f9n;9Ez!>tn{^1a(0P_8Wch){>u}!<DdEx^rq`okTQEf1tlof2
z5UBzRCx>b&^-S&9d<vXi|6({c`fWpPY=HBP(hp_32SO*>Jko_Mf7mgk^%Q8E=D4OW
zt#d`htS4;+Vp4sG`Fxv@Q$6iObsmL60iKoJ)fCo$-m<vW)6(ER+1#!nkjdLe_^K{4
zK(of$Vw&aj5J&5H@uc-s_>uebb#)H4ms4{L&+7oU?9DIe4lLnaahKRrQ(aQ=e2DnO
z{Lw+I8wix&wIlk|VMIOz!$o-#FFt+NTfWd;qv~<w!z-rwz}HNwPu@JO!gKj9Q;GxY
z=3A204`mmu3E%5>Ls6S!Ua>#%#xAOG<Uch6RZAa&@F})=ahE$6?K*WBD9$Y&%jysi
z$Uk9EN>5QyRGzzqHBVcPh)+Bh)%Jw_1v@uN#Qj7W`#9bkTz^wLKYxUCeP%3Z5#o}u
z^R_^!9z5Q>8N2&*))QfK!XOX5yp_c^9?Nx3#zZ2)tXFcy7Zg>f0v5;z8CRWwR!y!C
zVjfE^Xc3u<0gIgT-)63W@7(iWuiSjMvRiPLJnm%i+&((7Yi6#Q74R449r}<M_-=x9
zQyn<rMa}5PFthqqgzl)URC?!C%IO|dpP0>B@_s%t`*J3?LGO}b{MmxC%LBQ>3*MZg
zXWBTD=eEag>JGTHt)8kP<)*w5tm>~O74>MT>WL)l+pT^{996a$2)}<<6Bx&H%*nMW
zk3Xt*2?eZY8>lhKkj@Ssz}5x3De~5#Q{DaWs-pwxjq6TXc)?Y=4x@9&ACA|0{iE$x
zV49WmiQTl4z%^Fp__|2khu${FIe}A)JOMznRaUx+tT;-zRev}Ly+5~Z#hZCjx3}h?
zSS`<kI3BXad4Kn)q+UYeGrfVO;n<X0z4ZV+-KZm2@!p)+C32wIZQ_!k*chN4;-iWi
zOUim`xwgCz`%S~hf7$YG<(=$VwtHC`4rt+p%8`;B)nv{vIZ%~-f&DEEMOMj<cb?1n
zM2&Iw^5iBjpPPvF4OUnSpQoFjd6xnV`xny_L^Sjqern>ju#X!UkJ}jYgu6a$>H@(1
zhQB6Cyhfc#YICx(!ApbM`<iIoEPv+dvEvrQg~pjg94_&`PvnyMxSNnal2m1NwPW;3
z57{@~IH=+JjAfI<npqH$i%-a5RACI@IV%XU-;keL@)+|Jxe@v}^y%>~=_t-#LN%_c
znm(P=J1j^gKw13zB1x$C<8i7!kS|!gkw>)griVyscV`MXVsI<FX@Y>)Qt?1w;Oh0i
zzkLZFMk<nZkRF*}buz{W;Q?$ujM~H?jrrO5fvp@2Bkm<e(kBRmDp8g8?VTN5QH0^*
z%b75<<m&Jydi~Z18g~?1-5s>GC`7U+vUjaiZY&ZAqQyCmZ%Lg;7}-Cq|6G89$MEfL
zOZu;&&ppR{RCNWQheMN6+P^v%NemRW@`5VHRg{V0JGaQ}gOK(U^IbeTp5#?TalMW*
z{6Pntqa#70#yW;U^6%0%VZD1NSY0-7cg?cH!MrJ8d*yClSDcb@5^4^ylQ*Hl;T42-
zL;pC=cu6=aU>6wQqpJOF=}rc3i}}EHu~eyq_;bGJlX2;u;QF4NSb;A>mtguigzYU~
z|IF43zyj_T`Js?zowPp*3Yv!I?+#^E&#SaAsi*ur-c|c91$-5)o{vA_A#`hm{i$6M
zA4NzSRwXLtqFC%lir?D~c(*pMV@h|42ZsA{V>viDHb$JFcjIOMp`3&#ZWywp#?;I#
zw<DD=H^VQ(CRKuWuguRxW@o_Wk#377iIvXfqZmm@fH0PCWv)M6Own6f$G(;0^2s|<
zN+}^PD9Tc%!Wnm^-?VobI?}WB{GAdnvh&!cv<tEM$H^twBzZ@R)Y<N)aE7BmiK8p<
zk?_^1(|V#g8@I)J3~%?|dBTm>y{{ajx@CqLXeeh^EQdd5EGMraV<~PhlrWISJ)Jqg
zrP(@T*Ab0Q8JEIJ|8v5vx=1tm9VP2|7^T7kxuo#&oNw$IB~41Zm?#74>IaNMH-}LI
z73~wMg6@Et)I3|CgaP>z@6$uCsJzfT7k9YaIpIow^0_C%mn1MkJ)eYiOTKi@A#X1+
zxK*{wd8&%QD=B;`HJz*XKw&p0+VSlZfvw_9f=UwVA2&=^2Lc(=HRR<$#^V^tq()<m
zqZxoAkawZl*dt$$r02{Zx@84AjDWYT{l*&-I_Ywb#(#BIQM_xMFtMB2?O@mxurhhI
zuPXrQSt;MPsG@qjOseia{xlA_HaEp1wnK7__s5FP?Yupy@=VhrS5my=lZJzyb?KX6
zzRiiW7rjHC!B|K{msUgjc*(hW-nu>#>1JAAjo;x5BBGR#kSrmNU+aFUG~uV}WlTjU
z8ga?P%_C9H;Mp@Y<Wq0B+3$C$C{4N$KGt2&>rDjB^#pOv6%RstoZ#hC(%)8pSU*Lb
z9#)uGbd#H^#3R7O_m_hnspwCjbiU2UU9m}h)<=Bw<X#6`i@iWxJcZ2UXPyBf$=Zbv
z*9R3HB84d}N6Ru4p;I;9*8heSQ9}M|K87Xs-=VT8qTX$Dx35e)!hY^#&uz)vF-n^O
zRQ{1HUbRG0&40Ud3$Oq`^*Tp#T%gA6`c`s;*$-Bym0fjKAnor%C(j`oQrnJw!S?I1
zpbg?gpC^Lo-*O05;e_l<lXV(M_vsH%&j~JfyH|mS0ypL|oy2zhFI+t%c(Hc(g05ip
zh3o9DsqbepIK8hKQo5psOizk<bR)N~WND&HrYQl)>cc@{xV2qNHFiSG1KFNKT6NYD
zdFOFGsxSGW`?A|p6W!}|aL#-0lm%Ckr#CT`!2_{7d_spec53n$ToCm5;8}wIAb`yO
zR}5UCIl23jPn#L#2DEC%nB`A)7s_uXcYDv;W#1!JdUB5h48M(a&7GSYr{6@y_P*3Q
z=Fi5`fB&*}sQI(EpM)ua+Ox=!F7lahY3!(WhQPT}4gT}DMrflH&CVFK=;F^WjCHn^
zYrDQ%zvWV4las--;I_SEo6YV9(jO+Yk%^JJik)s417pwk8+7*{_|tmR&-G0w8k-L<
zF}|NH1b(yF#Tu|z+$bVY>5sLG-k7h*Z2)(b3TnFq&6^N+!+%#D#;~d%G?U?HoOGB`
zEMWf!*AJs~!8DI<f2}c)#qY|t=@T7B2GVnqv#!YcXmzQK^QH$rdz;ts<;^&y=|j4c
z@){DcgoAjmOawwME2CqVG^%*uvC3;?SZ8<Q^RoqGbUkpj^6K>^{DK!9C3aa%!03lV
zx<Kv}pCr})Aar|b2NZXtpY6)|grZ`#CM!H9;DxgcMjmpJa5An-#&DhQ8buCgET-!|
zD@O-Ly<9r|luauc#@;PwF_Dj_co#$t1byFUX9Qi|C=KHAmm~4JEFJ9|Z+|i7#e9)`
zt;96!CfeK(u;A9d;})^@sa|xWD~jEKVOxa-fG`_hkDYM(>jzEhbd8zP<OU&MICu(T
z_HnXUdFYg}BP6u~d9b{2JuWtIS`c0#@6bA82b^c_fA~SIgF8y-R#ie@R(w7~0t(Jg
zN#CNjAmxBy_VKWuSxO<DXxuaqV*Z2;{2J`^R_2R(*@x%oi8`dmal{F+l&;=LzTiXu
z93oyGq;Vl*xD|0EKp&R0ZYFNBk|w{~SEoK?=4$`0-tiBD>~~VQ<td0Bhpc|ytmwzF
z+tOd@%i(;18LSk_Us?mYx|`*V17nL=J?>kh2A+dSFTWfX(#tk{<AoWz`qu&UjTD3Q
z)ZF-w?WwyaGlG0nPFVqO;kA-WRZ=Zt(>mD3oOk|Lg>Qplb^-NaU${+y)NULXV_#6y
zj9O3k=Mdk)bKT(5mX@yHVE_A97z;WpYX~=>DQK#HsysC{sl0DC-}4m}J$P`sDswfz
zMqHO?@O4HXY1=XW-mqVLj`P(VM*`bD6J7&zDcVR%66+R_Z)&{kDq05frc@PASj8dW
zcWSl${Z?DJ{`$6*#!x!Uhq$wO{1E-KlvRz;N=VVSgsHEKV7Bi-K8iVOaqzNr`SP))
z7q>HP$mvZRr?2T<AMa5x&zll1V~DC%nOOQ<NU`Z{FmLe8WD6u<MbCNpaDN_Y<9Pt7
zbRbzcrK|MK)4#s-QL8_MYK~-00LF}U6!7wh=#FYKtWo^}{Teu5!y{)DIe)Ul@T^jb
zT73TKI_J$7pY$6P8m@Z;9a8jBDJrBY%~b#CnxrAVt;B~5hx+mw2A=zqmiXHHh`ymB
zA|i7YNMN&&(?35k$ro)3*xh#T>ta<`Sk8PPI)0&E@wOH5D?im;B;BuQpdY0}Q#l>3
zp@`$Rr%%v3mrC?J->Ir6JTP|c>mqjUN3|ohDFwC8jQcto0eF1rS~+pMiMW)%f5?(A
z*c7n%{bFBNZ+1rNi)PZ*$z_Hxio5vm;$o11DR-!HvYh4QCojgih3Uj&*KUTs8%=up
z8ffoMIXA^t;pdLc-!a)M{&&nNMZcHei3sK`N)I4G6Val-1LFeqCA=aB>>w+zP(3U_
z#cAUEsQcK4-1vk2$hbaJwIy_Y?s>IXi;IdtEl+p!WVUZ5HK)YyZ6T6IO+zdSxy+Y|
zn~FhF>q>wD>UJ7s+5~Bh%`Z-;?W|FptGiGB(K$+N*oUPci7U;l8~he;wt7#yWMQ0w
z`n-e2S*ek}W~QkMZrMq(b?W(81o%32>v^un)N)gPf#vI(_0*i_Ww9OW?yA(-AU({}
z290T_GM$w7rY|U#9$Y~f{BD8oP&G~V1WX#XLRY^zWJUcc=i#T<Zl61@Esej1k4;F=
zRt^dh)%sstTz4SU|Nk!~qS7D@9HGbxNm&<?l}$Efh9aB8U8%_4WUuVF?0GJgm2tLg
zWjpS0ch0%>JALZ&>HFjSd++D_`FcDb<Mn=d%ZjZ6kIK19mX_CRVjn<b@An*lGlrBr
z>>NT$t&~cItz5wh*dL8EIAkQ0ft7)|Ed@rnP`|C96<TEv@Hqn62Pdb=Y+&+hugwnp
z{{qgo92_R3{pr?f=9;{}oGZ5p`w;5-5yIL40&js)fs07sr#)oGv*E4p+36qylGOH^
zNuhUI-419rv=eXsb(~g?JC(-yxQ{0utgYaod;*E0x^f0*fgCfz-=fUb8cQfR?~^Ey
z#uQ&37*C<~WsY&#3Aq-_l~6D2uhUsvKIhW){}$W+d<$gn3t*K*z%2Sc9t_yl%L>5u
zONgdBQl8Iy`#f}51ZE*T>T0j)?Z1LH3SFtjYQ_M<%x<Y0BCl$07FOH<gxcSTuqF{{
zI5b-JY%Y<s*rv#O2x*B6`8lu~UJP@9q&%wXx&?<?ledFf6xI*Im!g~wv0v3GpED(e
zN_A`a|0S`unAbhcwUbbfXnYO3LL0nEE5JH3s2X={@WU*rYGBE#p@1tm)4Agrf5Od{
z*~SWeuxhOJE9){37VDE>2n{&+<dlG+X_rl2Q%9E1CWYL3_3Sn9iGDjH;U2!QU@E41
zPwrPGzzo5mqVf1;svCIr>AI%$2qxigwGlh?DD@~>7Tv<TfE3-2?`B_HNH?7t&fgL4
z;~16E87nU()q#_njyt1Hq^IuHCQ425IlnabR_Nr$Z`i-IN1TBJ7kRVMCn>sLr-35F
z8IX7RCinTYrGho`bYo5Kd))a3K5JCLqWEysM^jJbU|QgF`#L8bual{LUqnaA7)+*1
zs=hoe8!3>sl>du#md-RinrZeG6TwLs2@K_y(bmb4C04R&vwS-6A}Ci{UBvQ?i1nQ`
zC|D9SQ&_>hsc^aA2>XK9s($b+EdD)9#nrWZnq^zOpEjFKA$)ps0R|G)5W|O*)GF_A
z%D>R*JFzg3F2M5R#T;NK4gs4MngyCSz48)DG^Q)%u9N@)BKpRW8$LpjeCy<(<JZHg
zpQgM$ur<~-`wUk-YZ@gVQK&2GoGv)hw7Y_`^(lw79lNaiHuOyX^xu{v62%g!TD0J)
zu@uh7?8|LZ@5=cL0KO%^4g%5G!S(yc+>vIRJLf51Rz|bEbXY_JITsqbK@M-0s&7AA
zi}rv{-02w1G(0PKk3p<sZ5Zi9v-BZNsFh-B8!OJV7t}WxFcH5uGYW{CRqP*M5r=3l
z;5_8_$UG3XWz63A&X3UZqO!!#H#vGz-aqg<cAoRBrk&BqvngA>`o3KP6SO$|gj>QB
zE9?4|0J*THs9*Pn-8aoct+Vuas$PL`_achy11OwL@da(qTd}!8wLRCe13#lx{uaKE
z--A=;E`)x0Y}RkjXEhHzk2R)VAWUeZ9y_{O9VZBTH`a^l^uKR+Ztos6lRbj%XcPzn
z@oHUD^|(LM^xhS2>h@TjG|^YnWySlk;hCMAQ_Ji~DS^xbAWYjvLm~3m<6q8Q(c+t-
zQ`H2_R8WN0TsM%WZT!!KK74rO@#<I2-}bK=sDM^HrsW`MGQl+^K-hZ(Tw2V2)$E2&
zyG<NPI6ptX#<ug+--k?v3+Kr@Jz^#2d)Qw!PQXuf$=%vbch=PYvYZm~cr^_3J(Dd|
z`BB5nw1PTO^y?aO>f$;l!t`<3lxyiXsym-5`Xt{IPhYjgYPQzM8rfjsR+HU|u3tdH
zKl5~a{}V^0+zk$PI)6*_!@wZ&8!N5vzO5bO+kr5ygPDYsAgL%HGx><u+*Cjd9|Ddz
z=2_6ldfxL62rHmz`KwZ>^{=PZv`!<(p+yg_DodG|gmfL{T4o6khp8UTq{SfNw<f{P
zdf$E;*57Fb-O{k0-dV+(;ONFtXdty&_TnUjN4w9tceb$~-Y9993=3LI+9E0|>=0&`
z+>3>*FxDpvRXP&imYBdkiBE}GDdxFOjn}U}TgC-t01m2zAH!vHBJ?#wFJ@<V_E?Xs
zSQA$hv6Gfq`$vynWI-tY|I`WiQ>SV)N3NNu^{Hj7a9?S;?GjMQ&YZl`v)3dp8C`M0
z{}a-WF~pZ4encT2H+9apd&l%P#9yc{p{4|rlICSzj%3{a{#iKS@(w;UaM5jD(;d+e
zj(6*P;&8u#)qzd>43yiwP-IXf@Mi6lwJk>PAd}XXQGNWveXt>YRJdHAzBzn_NEla0
z%P+7x#=u}Y{XZ<18;qxriH1E(&NqOX(6jjW+*Re#7}E`fS=(`}&&=4l>rrJ>l2?^)
z+&q?<Z@Rw+3isJnea~f(A2(5u1#{=R_L1io@5aPgu2G(CzI)Gn&R`V(srs`jw0cjW
zRRwJu1LaTrM<lI@v>+E=Lk%YQoQ5FpUR5sNCtUj?@f<O;WYW~s#QpaGoo*u*0m)&`
zFh2v8$t$+4jrJ#0W%blJmp!4W$yp6+xK2F~40Y#n0n{yEL>dJh7coGR40!MCZ)wC^
zp_t7tK5PV2z9cM3Q_V-0(13$IDs{saa6SI@s?Tkp+hM+Eox3VBS^V*WY9pKL_<Cr}
z!PGz#_LZ&T6yR|ZRO+`ymr(`k?4BU6ElPB1r(YKR_j#Qhvo_-Hl$(LPFxsL=;Z|Fy
zv@i6mDRg{PPeGFhRU%^!9h-5?$C5c?+E>FD7j=_o;qmV`VLzB~l0Kj7mMa)zE_PMb
zbAhR}-a+<sxA%j{PZRGi@Hd*n4xRN&zt^ufxI9H3Z6d_!>D9|e5OI9$zgifBtB<iO
z?rx>dyYU+0NG<1khdso??gd-<{h<GQlnr_P;FNur($J-?Opa#?wqLWNnw|wLkIH0s
zuG#4c(hYyj40^o3s~y6>TKeOwZpdtN{QL5vSB32F3BEQm!3FL|q;XeWc8E0RF;!^m
z>DcfSN7%ia!Br6TNSyBK1{+^#o#w#a8Exmxb{M>d4F4sn@Kft>(v$F8zQ?ebh$&Lr
zXiHXhXoZ9QlMs9BR`Ra-|0}S$xw(WZIf2)pDJ9c&$~%%xs<zjW=lxaP>M!S7rY{#l
z-6FnQ!Z<E}8=6WvSJNo;<Q_D7$aVdMCUkabk4&>2a%Z@$ec7PhVs3>!@rC#FRGf@?
z0u65xiR}6wPeUK=xVQdth)qzc>rI{J{m=VTlFmD|*bKzCw&z*SwRY8}sCMQyS?fdp
z;*N3l<;%mRuih+WV>8Ze=PgB;0f*~87hWYyI~*2-+<xZwq2Aiu_-$)LyY0qu&Faww
z11vf71bIn6*i2TFYPCG4(=&H+$x2mtE_nk_GtMbj4Umj!$e1Zo(#jUcXEms&LA>Hw
z@8+sQLr7MI{!Zy%1$GouA6MOVvkb>zBB?P;U0WCSBt)V9VASoELBm|NT8mxO%>S>G
znO#&@UU<gVz^v;@hBfTGdvz~C?)8gHjwz{z=hBX9d^wxJ<=L%0AgiDf>gJD~oOnwj
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
F{69I6s7L?+
rename from browser/extensions/screenshots/webextension/icons/onboarding-4.png
rename to browser/extensions/screenshots/icons/onboarding-4.png
rename from browser/extensions/screenshots/webextension/icons/onboarding-5.png
rename to browser/extensions/screenshots/icons/onboarding-5.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b018b22c3b4ff89ec909c4732320eac4f33d2331
GIT binary patch
literal 22964
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
N3-jw2%T4da{ujHUvwr{p
deleted file mode 100644
--- a/browser/extensions/screenshots/install.rdf
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>screenshots@mozilla.org</em:id>
-    <em:name>Firefox Screenshots</em:name>
-    <em:targetApplication>
-      <Description>
-        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!--Firefox-->
-        <em:minVersion>57.0a1</em:minVersion>
-        <em:maxVersion>*</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    <em:type>2</em:type>
-    <em:version>33.0.0</em:version>
-    <em:bootstrap>true</em:bootstrap>
-    <em:homepageURL>https://screenshots.firefox.com/</em:homepageURL>
-    <em:multiprocessCompatible>true</em:multiprocessCompatible>
-  </Description>
-</RDF>
rename from browser/extensions/screenshots/webextension/log.js
rename to browser/extensions/screenshots/log.js
rename from browser/extensions/screenshots/webextension/makeUuid.js
rename to browser/extensions/screenshots/makeUuid.js
rename from browser/extensions/screenshots/webextension/manifest.json
rename to browser/extensions/screenshots/manifest.json
--- a/browser/extensions/screenshots/webextension/manifest.json
+++ b/browser/extensions/screenshots/manifest.json
@@ -1,12 +1,12 @@
 {
   "manifest_version": 2,
   "name": "Firefox Screenshots",
-  "version": "33.0.0",
+  "version": "35.0.0",
   "description": "__MSG_addonDescription__",
   "author": "__MSG_addonAuthorsList__",
   "homepage_url": "https://github.com/mozilla-services/screenshots",
   "applications": {
     "gecko": {
       "id": "screenshots@mozilla.org",
       "strict_min_version": "57.0a1"
     }
@@ -54,26 +54,38 @@
     "icons/menu-fullpage.svg",
     "icons/menu-visible.svg",
     "icons/menu-myshot.svg",
     "icons/onboarding-1.png",
     "icons/onboarding-2.png",
     "icons/onboarding-3.png",
     "icons/onboarding-4.png",
     "icons/onboarding-5.png",
+    "icons/onboarding-6.png",
     "icons/done.svg",
     "icons/icon-welcome-face-without-eyes.svg"
   ],
   "permissions": [
     "activeTab",
     "downloads",
     "tabs",
     "storage",
     "notifications",
     "clipboardWrite",
     "contextMenus",
     "mozillaAddons",
+    "telemetry",
     "<all_urls>",
     "https://screenshots.firefox.com/",
     "resource://pdf.js/",
     "about:reader*"
-  ]
+  ],
+  "experiment_apis": {
+    "screenshots": {
+      "schema": "experiments/screenshots/schema.json",
+      "parent": {
+        "scopes": ["addon_parent"],
+        "script": "experiments/screenshots/api.js",
+        "paths": [["experiments", "screenshots"]]
+      }
+    }
+  }
 }
--- a/browser/extensions/screenshots/moz.build
+++ b/browser/extensions/screenshots/moz.build
@@ -1,457 +1,473 @@
 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 with Files("**"):
-    BUG_COMPONENT = ("Cloud Services", "Screenshots")
-
-FINAL_TARGET_FILES.features['screenshots@mozilla.org'] += [
-  'bootstrap.js',
-  'install.rdf'
-]
+    BUG_COMPONENT = ("Firefox", "Screenshots")
 
 # This file list is automatically generated by Screenshots' export scripts.
 # AUTOMATIC INSERTION START
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"] += [
-  'webextension/assertIsBlankDocument.js',
-  'webextension/assertIsTrusted.js',
-  'webextension/blank.html',
-  'webextension/blobConverters.js',
-  'webextension/catcher.js',
-  'webextension/clipboard.js',
-  'webextension/domainFromUrl.js',
-  'webextension/log.js',
-  'webextension/makeUuid.js',
-  'webextension/manifest.json',
-  'webextension/randomString.js',
-  'webextension/sitehelper.js'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org'] += [
+  'assertIsBlankDocument.js',
+  'assertIsTrusted.js',
+  'blank.html',
+  'blobConverters.js',
+  'catcher.js',
+  'clipboard.js',
+  'domainFromUrl.js',
+  'log.js',
+  'makeUuid.js',
+  'manifest.json',
+  'moz.build',
+  'randomString.js',
+  'sitehelper.js'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ach"] += [
-  'webextension/_locales/ach/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ach"] += [
+  '_locales/ach/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ar"] += [
-  'webextension/_locales/ar/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ar"] += [
+  '_locales/ar/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ast"] += [
-  'webextension/_locales/ast/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ast"] += [
+  '_locales/ast/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["az"] += [
-  'webextension/_locales/az/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["az"] += [
+  '_locales/az/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["be"] += [
-  'webextension/_locales/be/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["be"] += [
+  '_locales/be/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["bg"] += [
-  'webextension/_locales/bg/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["bg"] += [
+  '_locales/bg/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["bn_BD"] += [
-  'webextension/_locales/bn_BD/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["bn_BD"] += [
+  '_locales/bn_BD/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["br"] += [
-  'webextension/_locales/br/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["br"] += [
+  '_locales/br/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["bs"] += [
-  'webextension/_locales/bs/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["bs"] += [
+  '_locales/bs/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ca"] += [
-  'webextension/_locales/ca/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ca"] += [
+  '_locales/ca/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["cak"] += [
-  'webextension/_locales/cak/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["cak"] += [
+  '_locales/cak/messages.json'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["crh"] += [
+  '_locales/crh/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["crh"] += [
-  'webextension/_locales/crh/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["cs"] += [
+  '_locales/cs/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["cs"] += [
-  'webextension/_locales/cs/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["cy"] += [
+  '_locales/cy/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["cy"] += [
-  'webextension/_locales/cy/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["da"] += [
+  '_locales/da/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["da"] += [
-  'webextension/_locales/da/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["de"] += [
+  '_locales/de/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["de"] += [
-  'webextension/_locales/de/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["dsb"] += [
+  '_locales/dsb/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["dsb"] += [
-  'webextension/_locales/dsb/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["el"] += [
+  '_locales/el/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["el"] += [
-  'webextension/_locales/el/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["en_CA"] += [
+  '_locales/en_CA/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["en_GB"] += [
-  'webextension/_locales/en_GB/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["en_GB"] += [
+  '_locales/en_GB/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["en_US"] += [
-  'webextension/_locales/en_US/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["en_US"] += [
+  '_locales/en_US/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["eo"] += [
-  'webextension/_locales/eo/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["eo"] += [
+  '_locales/eo/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["es_AR"] += [
-  'webextension/_locales/es_AR/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["es_AR"] += [
+  '_locales/es_AR/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["es_CL"] += [
-  'webextension/_locales/es_CL/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["es_CL"] += [
+  '_locales/es_CL/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["es_ES"] += [
-  'webextension/_locales/es_ES/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["es_ES"] += [
+  '_locales/es_ES/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["es_MX"] += [
-  'webextension/_locales/es_MX/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["es_MX"] += [
+  '_locales/es_MX/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["et"] += [
-  'webextension/_locales/et/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["et"] += [
+  '_locales/et/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["eu"] += [
-  'webextension/_locales/eu/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["eu"] += [
+  '_locales/eu/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["fa"] += [
-  'webextension/_locales/fa/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["fa"] += [
+  '_locales/fa/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ff"] += [
-  'webextension/_locales/ff/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ff"] += [
+  '_locales/ff/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["fi"] += [
-  'webextension/_locales/fi/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["fi"] += [
+  '_locales/fi/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["fr"] += [
-  'webextension/_locales/fr/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["fr"] += [
+  '_locales/fr/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["fy_NL"] += [
-  'webextension/_locales/fy_NL/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["fy_NL"] += [
+  '_locales/fy_NL/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ga_IE"] += [
-  'webextension/_locales/ga_IE/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ga_IE"] += [
+  '_locales/ga_IE/messages.json'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["gd"] += [
+  '_locales/gd/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["gd"] += [
-  'webextension/_locales/gd/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["gl"] += [
+  '_locales/gl/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["gl"] += [
-  'webextension/_locales/gl/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["gn"] += [
+  '_locales/gn/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["gn"] += [
-  'webextension/_locales/gn/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["gu_IN"] += [
+  '_locales/gu_IN/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["gu_IN"] += [
-  'webextension/_locales/gu_IN/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["he"] += [
+  '_locales/he/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["he"] += [
-  'webextension/_locales/he/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["hi_IN"] += [
+  '_locales/hi_IN/messages.json'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["hr"] += [
+  '_locales/hr/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hi_IN"] += [
-  'webextension/_locales/hi_IN/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["hsb"] += [
+  '_locales/hsb/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hr"] += [
-  'webextension/_locales/hr/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["hu"] += [
+  '_locales/hu/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hsb"] += [
-  'webextension/_locales/hsb/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["hy_AM"] += [
+  '_locales/hy_AM/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hu"] += [
-  'webextension/_locales/hu/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ia"] += [
+  '_locales/ia/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hy_AM"] += [
-  'webextension/_locales/hy_AM/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["id"] += [
+  '_locales/id/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ia"] += [
-  'webextension/_locales/ia/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["it"] += [
+  '_locales/it/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["id"] += [
-  'webextension/_locales/id/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ja"] += [
+  '_locales/ja/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["it"] += [
-  'webextension/_locales/it/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ka"] += [
+  '_locales/ka/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ja"] += [
-  'webextension/_locales/ja/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["kab"] += [
+  '_locales/kab/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ka"] += [
-  'webextension/_locales/ka/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["kk"] += [
+  '_locales/kk/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["kab"] += [
-  'webextension/_locales/kab/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["km"] += [
+  '_locales/km/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["kk"] += [
-  'webextension/_locales/kk/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["kn"] += [
+  '_locales/kn/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["km"] += [
-  'webextension/_locales/km/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ko"] += [
+  '_locales/ko/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["kn"] += [
-  'webextension/_locales/kn/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["lij"] += [
+  '_locales/lij/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ko"] += [
-  'webextension/_locales/ko/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["lo"] += [
+  '_locales/lo/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["lij"] += [
-  'webextension/_locales/lij/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["lt"] += [
+  '_locales/lt/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["lo"] += [
-  'webextension/_locales/lo/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["mai"] += [
+  '_locales/mai/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["lt"] += [
-  'webextension/_locales/lt/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["mk"] += [
+  '_locales/mk/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["mai"] += [
-  'webextension/_locales/mai/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ml"] += [
+  '_locales/ml/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["mk"] += [
-  'webextension/_locales/mk/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["mn"] += [
+  '_locales/mn/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ml"] += [
-  'webextension/_locales/ml/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["mr"] += [
+  '_locales/mr/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["mn"] += [
-  'webextension/_locales/mn/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ms"] += [
+  '_locales/ms/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["mr"] += [
-  'webextension/_locales/mr/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["my"] += [
+  '_locales/my/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ms"] += [
-  'webextension/_locales/ms/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["nb_NO"] += [
+  '_locales/nb_NO/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["my"] += [
-  'webextension/_locales/my/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ne_NP"] += [
+  '_locales/ne_NP/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["nb_NO"] += [
-  'webextension/_locales/nb_NO/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["nl"] += [
+  '_locales/nl/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ne_NP"] += [
-  'webextension/_locales/ne_NP/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["nn_NO"] += [
+  '_locales/nn_NO/messages.json'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["pa_IN"] += [
+  '_locales/pa_IN/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["nl"] += [
-  'webextension/_locales/nl/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["pl"] += [
+  '_locales/pl/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["nn_NO"] += [
-  'webextension/_locales/nn_NO/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["pt_BR"] += [
+  '_locales/pt_BR/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["pa_IN"] += [
-  'webextension/_locales/pa_IN/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["pt_PT"] += [
+  '_locales/pt_PT/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["pl"] += [
-  'webextension/_locales/pl/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["rm"] += [
+  '_locales/rm/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["pt_BR"] += [
-  'webextension/_locales/pt_BR/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ro"] += [
+  '_locales/ro/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["pt_PT"] += [
-  'webextension/_locales/pt_PT/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ru"] += [
+  '_locales/ru/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["rm"] += [
-  'webextension/_locales/rm/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["si"] += [
+  '_locales/si/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ro"] += [
-  'webextension/_locales/ro/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["sk"] += [
+  '_locales/sk/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ru"] += [
-  'webextension/_locales/ru/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["sl"] += [
+  '_locales/sl/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sk"] += [
-  'webextension/_locales/sk/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["sq"] += [
+  '_locales/sq/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sl"] += [
-  'webextension/_locales/sl/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["sr"] += [
+  '_locales/sr/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sq"] += [
-  'webextension/_locales/sq/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["sv_SE"] += [
+  '_locales/sv_SE/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sr"] += [
-  'webextension/_locales/sr/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ta"] += [
+  '_locales/ta/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sv_SE"] += [
-  'webextension/_locales/sv_SE/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["te"] += [
+  '_locales/te/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ta"] += [
-  'webextension/_locales/ta/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["th"] += [
+  '_locales/th/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["te"] += [
-  'webextension/_locales/te/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["tl"] += [
+  '_locales/tl/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["th"] += [
-  'webextension/_locales/th/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["tr"] += [
+  '_locales/tr/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["tl"] += [
-  'webextension/_locales/tl/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["uk"] += [
+  '_locales/uk/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["tr"] += [
-  'webextension/_locales/tr/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ur"] += [
+  '_locales/ur/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["uk"] += [
-  'webextension/_locales/uk/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["uz"] += [
+  '_locales/uz/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ur"] += [
-  'webextension/_locales/ur/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["vi"] += [
+  '_locales/vi/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["uz"] += [
-  'webextension/_locales/uz/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["zh_CN"] += [
+  '_locales/zh_CN/messages.json'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["zh_TW"] += [
+  '_locales/zh_TW/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["vi"] += [
-  'webextension/_locales/vi/messages.json'
-]
-
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["zh_CN"] += [
-  'webextension/_locales/zh_CN/messages.json'
-]
-
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["zh_TW"] += [
-  'webextension/_locales/zh_TW/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["background"] += [
+  'background/analytics.js',
+  'background/auth.js',
+  'background/communication.js',
+  'background/deviceInfo.js',
+  'background/main.js',
+  'background/selectorLoader.js',
+  'background/senderror.js',
+  'background/startBackground.js',
+  'background/takeshot.js'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["background"] += [
-  'webextension/background/analytics.js',
-  'webextension/background/auth.js',
-  'webextension/background/communication.js',
-  'webextension/background/deviceInfo.js',
-  'webextension/background/main.js',
-  'webextension/background/selectorLoader.js',
-  'webextension/background/senderror.js',
-  'webextension/background/startBackground.js',
-  'webextension/background/takeshot.js'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["build"] += [
+  'build/buildSettings.js',
+  'build/inlineSelectionCss.js',
+  'build/onboardingCss.js',
+  'build/onboardingHtml.js',
+  'build/raven.js',
+  'build/selection.js',
+  'build/shot.js',
+  'build/thumbnailGenerator.js'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["build"] += [
-  'webextension/build/buildSettings.js',
-  'webextension/build/inlineSelectionCss.js',
-  'webextension/build/onboardingCss.js',
-  'webextension/build/onboardingHtml.js',
-  'webextension/build/raven.js',
-  'webextension/build/selection.js',
-  'webextension/build/shot.js',
-  'webextension/build/thumbnailGenerator.js'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["experiments"]["screenshots"] += [
+  'experiments/screenshots/api.js',
+  'experiments/screenshots/schema.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["icons"] += [
-  'webextension/icons/back-highlight.svg',
-  'webextension/icons/back.svg',
-  'webextension/icons/cancel.svg',
-  'webextension/icons/cloud.svg',
-  'webextension/icons/copied-notification.svg',
-  'webextension/icons/copy.svg',
-  'webextension/icons/done.svg',
-  'webextension/icons/download.svg',
-  'webextension/icons/help-16.svg',
-  'webextension/icons/icon-highlight-32-v2.svg',
-  'webextension/icons/icon-v2.svg',
-  'webextension/icons/icon-welcome-face-without-eyes.svg',
-  'webextension/icons/menu-fullpage.svg',
-  'webextension/icons/menu-myshot-white.svg',
-  'webextension/icons/menu-myshot.svg',
-  'webextension/icons/menu-visible.svg',
-  'webextension/icons/onboarding-1.png',
-  'webextension/icons/onboarding-2.png',
-  'webextension/icons/onboarding-3.png',
-  'webextension/icons/onboarding-4.png',
-  'webextension/icons/onboarding-5.png'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["icons"] += [
+  'icons/back-highlight.svg',
+  'icons/back.svg',
+  'icons/cancel.svg',
+  'icons/cloud.svg',
+  'icons/copied-notification.svg',
+  'icons/copy.svg',
+  'icons/done.svg',
+  'icons/download.svg',
+  'icons/help-16.svg',
+  'icons/icon-highlight-32-v2.svg',
+  'icons/icon-v2.svg',
+  'icons/icon-welcome-face-without-eyes.svg',
+  'icons/menu-fullpage.svg',
+  'icons/menu-myshot-white.svg',
+  'icons/menu-myshot.svg',
+  'icons/menu-visible.svg',
+  'icons/onboarding-1.png',
+  'icons/onboarding-2.png',
+  'icons/onboarding-3.png',
+  'icons/onboarding-4.png',
+  'icons/onboarding-5.png',
+  'icons/onboarding-6.png'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["onboarding"] += [
-  'webextension/onboarding/slides.html',
-  'webextension/onboarding/slides.js'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["onboarding"] += [
+  'onboarding/slides.html',
+  'onboarding/slides.js'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["selector"] += [
-  'webextension/selector/callBackground.js',
-  'webextension/selector/documentMetadata.js',
-  'webextension/selector/shooter.js',
-  'webextension/selector/ui.js',
-  'webextension/selector/uicontrol.js',
-  'webextension/selector/util.js'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["selector"] += [
+  'selector/callBackground.js',
+  'selector/documentMetadata.js',
+  'selector/shooter.js',
+  'selector/ui.js',
+  'selector/uicontrol.js',
+  'selector/util.js'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["test"]["browser"] += [
+  'test/browser/.eslintrc.yml',
+  'test/browser/browser.ini',
+  'test/browser/browser_screenshots_ui_check.js'
 ]
 
 # AUTOMATIC INSERTION END
 
 BROWSER_CHROME_MANIFESTS += [
     'test/browser/browser.ini'
 ]
rename from browser/extensions/screenshots/webextension/onboarding/slides.html
rename to browser/extensions/screenshots/onboarding/slides.html
--- a/browser/extensions/screenshots/webextension/onboarding/slides.html
+++ b/browser/extensions/screenshots/onboarding/slides.html
@@ -3,17 +3,17 @@
   <head>
     <!-- onboarding.scss is automatically inserted here: -->
     <style></style>
     <!-- Here and in onboarding.scss use MOZ_EXTENSION/path to refer to local files -->
   </head>
   <body>
     <div id="slide-overlay">
       <!-- The current slide is set by having .active-slide-1, .active-slide-2, etc on #slide element: -->
-      <div id="slide-container" data-number-of-slides="5" class="active-slide-1">
+      <div id="slide-container" data-number-of-slides="6" class="active-slide-1">
         <div class="slide slide-1">
           <!-- Note: all images must be listed in manifest.json.template under web_accessible_resources -->
           <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-1.png');"></div>
           <div class="slide-content">
             <div class="slide-content-aligner">
               <h1><span><strong>Firefox</strong> Screenshots</span><sup>Beta</sup></h1>
               <p data-l10n-id="tourBodyIntro"></p>
             </div>
@@ -43,26 +43,34 @@
         </div>
         <div class="slide slide-5">
           <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-5.png');"></div>
           <div class="slide-content">
             <h1 data-l10n-id="tourHeaderDownloadUpload"></h1>
             <p data-l10n-id="tourBodyDownloadUpload"></p>
           </div>
         </div>
+        <div class="slide slide-6">
+          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-6.png');"></div>
+          <div class="slide-content">
+            <h1 data-l10n-id="tourHeaderAccounts"></h1>
+            <p data-l10n-id="tourBodyAccounts"></p>
+          </div>
+        </div>
 
         <!-- Clickable elements should be buttons for accessibility -->
         <button id="skip" data-l10n-id="tourSkip" tabindex=1>Skip</button>
         <button id="prev" tabindex=2 data-l10n-label-id="tourPrevious"></button>
         <button id="next" tabindex=3 data-l10n-label-id="tourNext"></button>
         <button id="done" tabindex=4 data-l10n-label-id="tourDone"></button>
         <div id="slide-status-container">
           <button class="goto-slide goto-slide-1" data-number="1" tabindex=4></button>
           <button class="goto-slide goto-slide-2" data-number="2" tabindex=5></button>
           <button class="goto-slide goto-slide-3" data-number="3" tabindex=6></button>
           <button class="goto-slide goto-slide-4" data-number="4" tabindex=7></button>
           <button class="goto-slide goto-slide-5" data-number="5" tabindex=8></button>
+          <button class="goto-slide goto-slide-6" data-number="6" tabindex=9></button>
         </div>
         <!-- FIXME: Need to put in privacy / etc links -->
       </div>
     </div>
   </body>
 </html>
rename from browser/extensions/screenshots/webextension/onboarding/slides.js
rename to browser/extensions/screenshots/onboarding/slides.js
--- a/browser/extensions/screenshots/webextension/onboarding/slides.js
+++ b/browser/extensions/screenshots/onboarding/slides.js
@@ -25,16 +25,17 @@ this.slides = (function() {
       iframe.id = "firefox-screenshots-onboarding-iframe";
       iframe.style.zIndex = "99999999999";
       iframe.style.display = "block";
       iframe.style.border = "none";
       iframe.style.position = "fixed";
       iframe.style.top = "0";
       iframe.style.left = "0";
       iframe.style.margin = "0";
+      iframe.style.backgroundColor = "transparent";
       iframe.scrolling = "no";
       updateIframeSize();
       let html = onboardingHtml.replace("<style></style>", `<style>${onboardingCss}</style>`);
       html = html.replace(/MOZ_EXTENSION([^"]+)/g, (match, filename) => {
         return browser.extension.getURL(filename);
       });
       iframe.addEventListener("load", catcher.watchFunction(() => {
         doc = iframe.contentDocument;
rename from browser/extensions/screenshots/webextension/randomString.js
rename to browser/extensions/screenshots/randomString.js
rename from browser/extensions/screenshots/webextension/selector/callBackground.js
rename to browser/extensions/screenshots/selector/callBackground.js
rename from browser/extensions/screenshots/webextension/selector/documentMetadata.js
rename to browser/extensions/screenshots/selector/documentMetadata.js
--- a/browser/extensions/screenshots/webextension/selector/documentMetadata.js
+++ b/browser/extensions/screenshots/selector/documentMetadata.js
@@ -1,19 +1,19 @@
 "use strict";
 
 this.documentMetadata = (function() {
 
   function findSiteName() {
-    let el = document.querySelector("meta[property='og:site_name']");
+    let el = document.querySelector("meta[property~='og:site_name'][content]");
     if (el) {
       return el.getAttribute("content");
     }
     // nytimes.com uses this property:
-    el = document.querySelector("meta[name='cre']");
+    el = document.querySelector("meta[name='cre'][content]");
     if (el) {
       return el.getAttribute("content");
     }
     return null;
   }
 
   function getOpenGraph() {
     const openGraph = {};
@@ -24,17 +24,17 @@ this.documentMetadata = (function() {
     image:secure_url image:type image:width image:height
     video:secure_url video:type video:width image:height
     audio:secure_url audio:type
     article:published_time article:modified_time article:expiration_time article:author article:section article:tag
     book:author book:isbn book:release_date book:tag
     profile:first_name profile:last_name profile:username profile:gender
     `.split(/\s+/g);
     for (const prop of openGraphProperties) {
-      let elems = document.querySelectorAll(`meta[property='og:${prop}']`);
+      let elems = document.querySelectorAll(`meta[property~='og:${prop}'][content]`);
       if (forceSingle.includes(prop) && elems.length > 1) {
         elems = [elems[0]];
       }
       let value;
       if (elems.length > 1) {
         value = [];
         for (const elem of elems) {
           const v = elem.getAttribute("content");
@@ -58,17 +58,17 @@ this.documentMetadata = (function() {
   function getTwitterCard() {
     const twitterCard = {};
     // If you update this, also update _TWITTERCARD_PROPERTIES in shot.js:
     const properties = `
     card site title description image
     player player:width player:height player:stream player:stream:content_type
     `.split(/\s+/g);
     for (const prop of properties) {
-      const elem = document.querySelector(`meta[name='twitter:${prop}']`);
+      const elem = document.querySelector(`meta[name='twitter:${prop}'][content]`);
       if (elem) {
         const value = elem.getAttribute("content");
         if (value) {
           twitterCard[prop] = value;
         }
       }
     }
     return twitterCard;
rename from browser/extensions/screenshots/webextension/selector/shooter.js
rename to browser/extensions/screenshots/selector/shooter.js
--- a/browser/extensions/screenshots/webextension/selector/shooter.js
+++ b/browser/extensions/screenshots/selector/shooter.js
@@ -3,16 +3,17 @@
 
 "use strict";
 
 this.shooter = (function() { // eslint-disable-line no-unused-vars
   const exports = {};
   const { AbstractShot } = shot;
 
   const RANDOM_STRING_LENGTH = 16;
+  const MAX_CANVAS_DIMENSION = 32767;
   let backend;
   let shotObject;
   let supportsDrawWindow;
   const callBackground = global.callBackground;
   const clipboard = global.clipboard;
 
   function regexpEscape(str) {
     // http://stackoverflow.com/questions/3115150/how-to-escape-regular-expression-special-characters-using-javascript
@@ -35,32 +36,47 @@ this.shooter = (function() { // eslint-d
 
   catcher.watchFunction(() => {
     const canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
     const ctx = canvas.getContext("2d");
     supportsDrawWindow = !!ctx.drawWindow;
   })();
 
   function captureToCanvas(selectedPos, captureType) {
-    const height = selectedPos.bottom - selectedPos.top;
-    const width = selectedPos.right - selectedPos.left;
+    let height = selectedPos.bottom - selectedPos.top;
+    let width = selectedPos.right - selectedPos.left;
     const canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
     const ctx = canvas.getContext("2d");
+
+    // Scale the canvas for high-density displays, except for full-page shots.
     let expand = window.devicePixelRatio !== 1;
     if (captureType === "fullPage" || captureType === "fullPageTruncated") {
       expand = false;
       canvas.width = width;
       canvas.height = height;
     } else {
       canvas.width = width * window.devicePixelRatio;
       canvas.height = height * window.devicePixelRatio;
     }
     if (expand) {
       ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
     }
+
+    // Double-check canvas width and height are within the canvas pixel limit.
+    // If the canvas dimensions are too great, crop the canvas and also crop
+    // the selection by a devicePixelRatio-scaled amount.
+    if (canvas.width > MAX_CANVAS_DIMENSION) {
+      canvas.width = MAX_CANVAS_DIMENSION;
+      width = expand ? Math.floor(canvas.width / window.devicePixelRatio) : canvas.width;
+    }
+    if (canvas.height > MAX_CANVAS_DIMENSION) {
+      canvas.height = MAX_CANVAS_DIMENSION;
+      height = expand ? Math.floor(canvas.height / window.devicePixelRatio) : canvas.height;
+    }
+
     ui.iframe.hide();
     ctx.drawWindow(window, selectedPos.left, selectedPos.top, width, height, "#fff");
     return canvas;
   }
 
   const screenshotPage = exports.screenshotPage = function(selectedPos, captureType) {
     if (!supportsDrawWindow) {
       return null;
rename from browser/extensions/screenshots/webextension/selector/ui.js
rename to browser/extensions/screenshots/selector/ui.js
--- a/browser/extensions/screenshots/webextension/selector/ui.js
+++ b/browser/extensions/screenshots/selector/ui.js
@@ -135,16 +135,18 @@ this.ui = (function() { // eslint-disabl
     document: null,
     display(installHandlerOnDocument) {
       return new Promise((resolve, reject) => {
         if (!this.element) {
           this.element = initializeIframe();
           this.element.id = "firefox-screenshots-selection-iframe";
           this.element.style.display = "none";
           this.element.style.setProperty("position", "absolute", "important");
+          this.element.style.setProperty("background-color", "transparent");
+          this.element.setAttribute("role", "dialog");
           this.updateElementSize();
           this.element.addEventListener("load", watchFunction(() => {
             this.document = this.element.contentDocument;
             assertIsBlankDocument(this.document);
             // eslint-disable-next-line no-unsanitized/property
             this.document.documentElement.innerHTML = `
                <head>
                 <style>${substitutedCss}</style>
@@ -269,18 +271,20 @@ this.ui = (function() { // eslint-disabl
     element: null,
     document: null,
     display(installHandlerOnDocument, standardOverlayCallbacks) {
       return new Promise((resolve, reject) => {
         if (!this.element) {
           this.element = initializeIframe();
           this.element.id = "firefox-screenshots-preselection-iframe";
           this.element.style.setProperty("position", "fixed", "important");
+          this.element.style.setProperty("background-color", "transparent");
           this.element.style.width = "100%";
           this.element.style.height = "100%";
+          this.element.setAttribute("role", "dialog");
           this.element.addEventListener("load", watchFunction(() => {
             this.document = this.element.contentDocument;
             assertIsBlankDocument(this.document);
             // eslint-disable-next-line no-unsanitized/property
             this.document.documentElement.innerHTML = `
                <head>
                 <style>${substitutedCss}</style>
                 <title></title>
@@ -292,21 +296,21 @@ this.ui = (function() { // eslint-disabl
                        <div class="eye left"><div class="eyeball"></div></div>
                        <div class="eye right"><div class="eyeball"></div></div>
                        <div class="face"></div>
                      </div>
                      <div class="preview-instructions" data-l10n-id="screenshotInstructions"></div>
                      <button class="cancel-shot">${browser.i18n.getMessage("cancelScreenshot")}</button>
                      <div class="myshots-all-buttons-container">
                        ${isDownloadOnly() ? "" : `
-                         <button class="myshots-button" tabindex="1" data-l10n-id="myShotsLink"></button>
+                         <button class="myshots-button" tabindex="3" data-l10n-id="myShotsLink"></button>
                          <div class="spacer"></div>
                        `}
                        <button class="visible" tabindex="2" data-l10n-id="saveScreenshotVisibleArea"></button>
-                       <button class="full-page" tabindex="3" data-l10n-id="saveScreenshotFullPage"></button>
+                       <button class="full-page" tabindex="1" data-l10n-id="saveScreenshotFullPage"></button>
                      </div>
                    </div>
                  </div>
                </body>`;
             installHandlerOnDocument(this.document);
             if (this.addClassName) {
               this.document.body.className = this.addClassName;
             }
@@ -380,18 +384,20 @@ this.ui = (function() { // eslint-disabl
     document: null,
     display(installHandlerOnDocument, standardOverlayCallbacks) {
       return new Promise((resolve, reject) => {
         if (!this.element) {
           this.element = initializeIframe();
           this.element.id = "firefox-screenshots-preview-iframe";
           this.element.style.display = "none";
           this.element.style.setProperty("position", "fixed", "important");
+          this.element.style.setProperty("background-color", "transparent");
           this.element.style.height = "100%";
           this.element.style.width = "100%";
+          this.element.setAttribute("role", "dialog");
           this.element.onload = watchFunction(() => {
             this.document = this.element.contentDocument;
             // eslint-disable-next-line no-unsanitized/property
             this.document.documentElement.innerHTML = `
               <head>
                 <style>${substitutedCss}</style>
                 <title></title>
               </head>
@@ -620,27 +626,27 @@ this.ui = (function() { // eslint-disabl
       this.el.style.left = `${pos.left}px`;
       this.el.style.height = `${pos.bottom - pos.top}px`;
       this.el.style.width = `${pos.right - pos.left}px`;
       this.bgTop.style.top = "0px";
       this.bgTop.style.height = `${pos.top}px`;
       this.bgTop.style.left = "0px";
       this.bgTop.style.width = "100%";
       this.bgBottom.style.top = `${pos.bottom}px`;
-      this.bgBottom.style.height = "100vh";
+      this.bgBottom.style.height = `calc(100vh - ${pos.bottom}px)`;
       this.bgBottom.style.left = "0px";
       this.bgBottom.style.width = "100%";
       this.bgLeft.style.top = `${pos.top}px`;
       this.bgLeft.style.height = `${pos.bottom - pos.top}px`;
       this.bgLeft.style.left = "0px";
       this.bgLeft.style.width = `${pos.left}px`;
       this.bgRight.style.top = `${pos.top}px`;
       this.bgRight.style.height = `${pos.bottom - pos.top}px`;
       this.bgRight.style.left = `${pos.right}px`;
-      this.bgRight.style.width = `${document.body.scrollWidth - pos.right}px`;
+      this.bgRight.style.width = `calc(100% - ${pos.right}px)`;
       // the download notice is injected into an iframe that matches the document size
       // in order to reposition it on scroll we need to bind an updated positioning
       // function to some window events.
       this.repositionDownloadNotice = () => {
         if (this.downloadNotice) {
           const currentYOffset = window.pageYOffset;
           const currentWinBottom = window.innerHeight;
           this.downloadNotice.style.top = (currentYOffset + currentWinBottom - 60) + "px";
@@ -851,44 +857,43 @@ this.ui = (function() { // eslint-disabl
       if (!this.el) {
         this.el = makeEl("div", "pixel-dimensions");
         this.xEl = makeEl("div");
         this.el.appendChild(this.xEl);
         this.yEl = makeEl("div");
         this.el.appendChild(this.yEl);
         iframe.document().body.appendChild(this.el);
       }
-      this.xEl.textContent = x;
-      this.yEl.textContent = y;
+      this.xEl.textContent = Math.round(x);
+      this.yEl.textContent = Math.round(y);
       this.el.style.top = (yPos + 12) + "px";
       this.el.style.left = (xPos + 12) + "px";
     },
     remove() {
       util.removeNode(this.el);
       this.el = this.xEl = this.yEl = null;
     }
   };
 
   exports.Preview = {
     display(dataUrl, showCropWarning) {
       const img = makeEl("IMG");
       const imgBlob = blobConverters.dataUrlToBlob(dataUrl);
       img.src = URL.createObjectURL(imgBlob);
       iframe.document().querySelector(".preview-image").appendChild(img);
       if (showCropWarning && !(isDownloadOnly())) {
-        const imageCroppedEl = makeEl("table", "notice");
-        imageCroppedEl.style.bottom = "10px";
+        const imageCroppedEl = makeEl("table", "notice middle");
         imageCroppedEl.innerHTML = `<tbody>
           <tr class="notice-wrapper">
             <td class="notice-content"></td>
           </tr>
         </tbody>`;
         const contentCell = imageCroppedEl.getElementsByTagName("td");
-        contentCell[0].textContent = browser.i18n.getMessage("imageCroppedWarning", buildSettings.maxImageHeight);
-        iframe.document().querySelector(".preview-overlay").appendChild(imageCroppedEl);
+        contentCell[0].textContent = browser.i18n.getMessage("imageCropPopupWarning", buildSettings.maxImageHeight);
+        iframe.document().querySelector(".preview-buttons").appendChild(imageCroppedEl);
       }
     }
   };
 
   /** Removes every UI this module creates */
   exports.remove = function() {
     for (const name in exports) {
       if (name.startsWith("iframe")) {
rename from browser/extensions/screenshots/webextension/selector/uicontrol.js
rename to browser/extensions/screenshots/selector/uicontrol.js
--- a/browser/extensions/screenshots/webextension/selector/uicontrol.js
+++ b/browser/extensions/screenshots/selector/uicontrol.js
@@ -189,33 +189,38 @@ this.uicontrol = (function() {
         window.scrollX, window.scrollY,
         window.scrollX + document.documentElement.clientWidth, window.scrollY + window.innerHeight);
       captureType = "visible";
       setState("previewing");
     },
     onClickFullPage: () => {
       sendEvent("capture-full-page", "selection-button");
       captureType = "fullPage";
-      let width = getDocumentWidth();
+      const width = getDocumentWidth();
       if (width > MAX_PAGE_WIDTH) {
         captureType = "fullPageTruncated";
       }
-      width = Math.min(width, MAX_PAGE_WIDTH);
-      let height = getDocumentHeight();
+      const height = getDocumentHeight();
       if (height > MAX_PAGE_HEIGHT) {
         captureType = "fullPageTruncated";
       }
-      height = Math.min(height, MAX_PAGE_HEIGHT);
       selectedPos = new Selection(
         0, 0,
         width, height);
       setState("previewing");
     },
     onSavePreview: () => {
       sendEvent(`save-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "save-preview-button");
+      if (captureType === "fullPageTruncated") {
+        selectedPos = new Selection(
+          0, 0,
+          Math.min(selectedPos.right, MAX_PAGE_WIDTH),
+          Math.min(selectedPos.bottom, MAX_PAGE_HEIGHT));
+        dataUrl = null;
+      }
       shooter.takeShot(captureType, selectedPos, dataUrl);
     },
     onDownloadPreview: () => {
       sendEvent(`download-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "download-preview-button");
       downloadShot();
     },
     onCopyPreview: () => {
       sendEvent(`copy-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "copy-preview-button");
@@ -663,16 +668,19 @@ this.uicontrol = (function() {
       resizeStartPos = new Pos(event.pageX, event.pageY);
       resizeStartSelected = selectedPos.clone();
       resizeHasMoved = false;
       setState("resizing");
     },
 
     mousemove(event) {
       this._resize(event);
+      if (resizeDirection !== "move") {
+        ui.PixelDimensions.display(event.pageX, event.pageY, selectedPos.width, selectedPos.height);
+      }
       return false;
     },
 
     mouseup(event) {
       this._resize(event);
       sendEvent("selection-resized");
       ui.Box.display(selectedPos, standardDisplayCallbacks);
       if (resizeHasMoved) {
@@ -718,16 +726,17 @@ this.uicontrol = (function() {
       }
       scrollIfByEdge(event.pageX, event.pageY);
       ui.Box.display(selectedPos);
     },
 
     end() {
       resizeDirection = resizeStartPos = resizeStartSelected = null;
       selectedPos.sortCoords();
+      ui.PixelDimensions.remove();
     }
   };
 
   stateHandlers.cancel = {
     start() {
       ui.iframe.hide();
       ui.Box.remove();
     }
rename from browser/extensions/screenshots/webextension/selector/util.js
rename to browser/extensions/screenshots/selector/util.js
rename from browser/extensions/screenshots/webextension/sitehelper.js
rename to browser/extensions/screenshots/sitehelper.js
--- a/browser/extensions/screenshots/webextension/sitehelper.js
+++ b/browser/extensions/screenshots/sitehelper.js
@@ -10,16 +10,22 @@ this.sitehelper = (function() {
   // copy that this content script gets:
   const ContentXMLHttpRequest = content.XMLHttpRequest;
 
   catcher.registerHandler((errorObj) => {
     callBackground("reportError", errorObj);
   });
 
 
+  const capabilities = {};
+  function registerListener(name, func) {
+    capabilities[name] = name;
+    document.addEventListener(name, func);
+  }
+
   function sendCustomEvent(name, detail) {
     if (typeof detail === "object") {
       // Note sending an object can lead to security problems, while a string
       // is safe to transfer:
       detail = JSON.stringify(detail);
     }
     document.dispatchEvent(new CustomEvent(name, {detail}));
   }
@@ -45,34 +51,44 @@ this.sitehelper = (function() {
     req.send("");
     req.onload = () => {
       if (req.status !== 200) {
         console.warn("Attempt to set Screenshots cookie via /api/set-login-cookie failed:", req.status, req.statusText, req.responseText);
       }
     };
   }
 
-  document.addEventListener("delete-everything", catcher.watchFunction((event) => {
+  registerListener("delete-everything", catcher.watchFunction((event) => {
     // FIXME: reset some data in the add-on
   }, false));
 
-  document.addEventListener("request-login", catcher.watchFunction((event) => {
+  registerListener("request-login", catcher.watchFunction((event) => {
     const shotId = event.detail;
     catcher.watchPromise(callBackground("getAuthInfo", shotId || null).then((info) => {
-      sendBackupCookieRequest(info.authHeaders);
-      sendCustomEvent("login-successful", {deviceId: info.deviceId, isOwner: info.isOwner, backupCookieRequest: true});
+      if (info) {
+        sendBackupCookieRequest(info.authHeaders);
+        sendCustomEvent("login-successful", {deviceId: info.deviceId, accountId: info.accountId, isOwner: info.isOwner, backupCookieRequest: true});
+      }
     }));
   }));
 
-  document.addEventListener("request-onboarding", catcher.watchFunction((event) => {
+  registerListener("request-onboarding", catcher.watchFunction((event) => {
     callBackground("requestOnboarding");
   }));
 
+  registerListener("copy-to-clipboard", catcher.watchFunction(event => {
+    catcher.watchPromise(callBackground("copyShotToClipboard", event.detail));
+  }));
+
+  registerListener("show-notification", catcher.watchFunction(event => {
+    catcher.watchPromise(callBackground("showNotification", event.detail));
+  }));
+
   // Depending on the script loading order, the site might get the addon-present event,
   // but probably won't - instead the site will ask for that event after it has loaded
-  document.addEventListener("request-addon-present", catcher.watchFunction(() => {
-    sendCustomEvent("addon-present");
+  registerListener("request-addon-present", catcher.watchFunction(() => {
+    sendCustomEvent("addon-present", capabilities);
   }));
 
-  sendCustomEvent("addon-present");
+  sendCustomEvent("addon-present", capabilities);
 
 })();
 null;
--- a/browser/extensions/screenshots/test/browser/browser.ini
+++ b/browser/extensions/screenshots/test/browser/browser.ini
@@ -1,6 +1,2 @@
-[DEFAULT]
-support-files =
-  head.js
-
 [browser_screenshots_ui_check.js]
 skip-if = os == 'win' && debug # Bug 1394967
--- a/browser/extensions/screenshots/test/browser/browser_screenshots_ui_check.js
+++ b/browser/extensions/screenshots/test/browser/browser_screenshots_ui_check.js
@@ -1,32 +1,34 @@
 "use strict";
 
+ChromeUtils.defineModuleGetter(this, "AddonManager",
+                               "resource://gre/modules/AddonManager.jsm");
+
 const BUTTON_ID = "pageAction-panel-screenshots_mozilla_org";
 
 function checkElements(expectPresent, l) {
   for (const id of l) {
     is(!!document.getElementById(id), expectPresent, "element " + id + (expectPresent ? " is" : " is not") + " present");
   }
 }
 
 async function togglePageActionPanel() {
   await promiseOpenPageActionPanel();
   EventUtils.synthesizeMouseAtCenter(BrowserPageActions.mainButtonNode, {});
   await promisePageActionPanelEvent("popuphidden");
 }
 
 function promiseOpenPageActionPanel() {
-  const dwu = window.windowUtils;
   return BrowserTestUtils.waitForCondition(() => {
     // Wait for the main page action button to become visible.  It's hidden for
     // some URIs, so depending on when this is called, it may not yet be quite
     // visible.  It's up to the caller to make sure it will be visible.
     info("Waiting for main page action button to have non-0 size");
-    const bounds = dwu.getBoundsWithoutFlushing(BrowserPageActions.mainButtonNode);
+    const bounds = window.windowUtils.getBoundsWithoutFlushing(BrowserPageActions.mainButtonNode);
     return bounds.width > 0 && bounds.height > 0;
   }).then(() => {
     // Wait for the panel to become open, by clicking the button if necessary.
     info("Waiting for main page action panel to be open");
     if (BrowserPageActions.panelNode.state === "open") {
       return Promise.resolve();
     }
     const shownPromise = promisePageActionPanelEvent("popupshown");
@@ -49,35 +51,38 @@ function promisePageActionPanelEvent(eve
     panel.addEventListener(eventType, () => {
       executeSoon(resolve);
     }, { once: true });
   });
 }
 
 function promisePageActionViewChildrenVisible(panelViewNode) {
   info("promisePageActionViewChildrenVisible waiting for a child node to be visible");
-  const dwu = window.windowUtils;
   return BrowserTestUtils.waitForCondition(() => {
-    const bodyNode = panelViewNode.firstElementChild;
-    for (const childNode of bodyNode.children) {
-      const bounds = dwu.getBoundsWithoutFlushing(childNode);
+    const bodyNode = panelViewNode.firstChild;
+    for (const childNode of bodyNode.childNodes) {
+      const bounds = window.windowUtils.getBoundsWithoutFlushing(childNode);
       if (bounds.width > 0 && bounds.height > 0) {
         return true;
       }
     }
     return false;
   });
 }
 
 add_task(async function() {
-  await promiseScreenshotsEnabled();
-
-  registerCleanupFunction(async function() {
-    await promiseScreenshotsReset();
-  });
+  // If Screenshots was disabled, enable it just for this test.
+  const addon = await AddonManager.getAddonByID("screenshots@mozilla.org");
+  const isEnabled = addon.enabled;
+  if (!isEnabled) {
+    await addon.enable({allowSystemAddons: true});
+    registerCleanupFunction(async () => {
+      await addon.disable({allowSystemAddons: true});
+    });
+  }
 
   // Toggle the page action panel to get it to rebuild itself.  An actionable
   // page must be opened first.
   const url = "http://example.com/browser_screenshots_ui_check";
   await BrowserTestUtils.withNewTab(url, async () => { // eslint-disable-line space-before-function-paren
     await togglePageActionPanel();
 
     await BrowserTestUtils.waitForCondition(
deleted file mode 100644
--- a/browser/extensions/screenshots/test/browser/head.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/* globals PageActions */
-
-// Currently Screenshots is disabled in tests.  We want these tests to work under
-// either case that Screenshots is disabled or enabled on startup of the browser,
-// and that at the end we're reset to the correct state.
-let enabledOnStartup = false;
-
-// ScreenshotsEnabled/Disabled promises return true if it was already
-// Enabled/Disabled, and false if it need to Enable/Disable.
-function promiseScreenshotsEnabled() {
-  if (!Services.prefs.getBoolPref("extensions.screenshots.disabled", false)) {
-    info("Screenshots was already enabled, assuming enabled by default for tests");
-    enabledOnStartup = true;
-    return Promise.resolve(true);
-  }
-  info("Screenshots is not enabled");
-  return new Promise((resolve, reject) => {
-    const interval = setInterval(() => {
-      const action = PageActions.actionForID("screenshots_mozilla_org");
-      if (action) {
-        info("screenshots page action created");
-        clearInterval(interval);
-        resolve(false);
-      }
-    }, 100);
-    info("Set Screenshots disabled pref to false.");
-    Services.prefs.setBoolPref("extensions.screenshots.disabled", false);
-  });
-}
-
-function promiseScreenshotsDisabled() {
-  if (Services.prefs.getBoolPref("extensions.screenshots.disabled", false)) {
-    info("Screenshots already disabled");
-    return Promise.resolve(true);
-  }
-  return new Promise((resolve, reject) => {
-    const interval = setInterval(() => {
-      const action = PageActions.actionForID("screenshots");
-      if (!action) {
-        info("screenshots page action removed");
-        clearInterval(interval);
-        resolve(false);
-      }
-    }, 100);
-    info("Set Screenshots disabled pref to true.");
-    Services.prefs.setBoolPref("extensions.screenshots.disabled", true);
-  });
-}
-
-function promiseScreenshotsReset() { // eslint-disable-line no-unused-vars
-  if (enabledOnStartup) {
-    info("Reset is enabling Screenshots addon");
-    return promiseScreenshotsEnabled();
-  }
-  info("Reset is disabling Screenshots addon");
-  return promiseScreenshotsDisabled();
-}
deleted file mode 100644
index 903ee9ae180a6718fe071a86f199990a789f81c2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001