Bug 1473744 - Add welcome skipping, email focusing and bug fixes to Activity Stream. r?ursula draft
authorEd Lee <edilee@mozilla.com>
Thu, 05 Jul 2018 15:56:16 -0700
changeset 815107 3ae58f935f2f89f3cd2ccc305436a5ca5307f9d2
parent 814904 fa376bf17cc95539f5e37186977d760296fb5093
push id115440
push userbmo:edilee@mozilla.com
push dateFri, 06 Jul 2018 18:38:52 +0000
reviewersursula
bugs1473744
milestone63.0a1
Bug 1473744 - Add welcome skipping, email focusing and bug fixes to Activity Stream. r?ursula MozReview-Commit-ID: LK1x1a01LKm
browser/components/newtab/aboutNewTabService.js
browser/extensions/activity-stream/.nvmrc
browser/extensions/activity-stream/bin/render-activity-stream-html.js
browser/extensions/activity-stream/content-src/components/Base/Base.jsx
browser/extensions/activity-stream/content-src/components/CollapsibleSection/_CollapsibleSection.scss
browser/extensions/activity-stream/content-src/components/StartupOverlay/StartupOverlay.jsx
browser/extensions/activity-stream/css/activity-stream-linux.css
browser/extensions/activity-stream/css/activity-stream-linux.css.map
browser/extensions/activity-stream/css/activity-stream-mac.css
browser/extensions/activity-stream/css/activity-stream-mac.css.map
browser/extensions/activity-stream/css/activity-stream-windows.css
browser/extensions/activity-stream/css/activity-stream-windows.css.map
browser/extensions/activity-stream/data/content/activity-stream.bundle.js
browser/extensions/activity-stream/data/content/activity-stream.bundle.js.map
browser/extensions/activity-stream/install.rdf.in
browser/extensions/activity-stream/karma.mc.config.js
browser/extensions/activity-stream/lib/ASRouterTargeting.jsm
browser/extensions/activity-stream/lib/AboutPreferences.jsm
browser/extensions/activity-stream/locales/bg/strings.properties
browser/extensions/activity-stream/locales/cs/strings.properties
browser/extensions/activity-stream/locales/ff/strings.properties
browser/extensions/activity-stream/locales/he/strings.properties
browser/extensions/activity-stream/locales/it/strings.properties
browser/extensions/activity-stream/locales/km/strings.properties
browser/extensions/activity-stream/locales/lo/strings.properties
browser/extensions/activity-stream/locales/mix/strings.properties
browser/extensions/activity-stream/locales/ms/strings.properties
browser/extensions/activity-stream/locales/nl/strings.properties
browser/extensions/activity-stream/locales/ru/strings.properties
browser/extensions/activity-stream/locales/ur/strings.properties
browser/extensions/activity-stream/locales/vi/strings.properties
browser/extensions/activity-stream/package-lock.json
browser/extensions/activity-stream/package.json
browser/extensions/activity-stream/prerendered/locales/bg/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/cs/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/ff/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/he/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/it/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/km/activity-stream-prerendered-noscripts.html
browser/extensions/activity-stream/prerendered/locales/km/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/locales/km/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-prerendered-noscripts.html
browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/mix/activity-stream-noscripts.html
browser/extensions/activity-stream/prerendered/locales/mix/activity-stream-prerendered-noscripts.html
browser/extensions/activity-stream/prerendered/locales/mix/activity-stream-prerendered.html
browser/extensions/activity-stream/prerendered/locales/mix/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/mix/activity-stream.html
browser/extensions/activity-stream/prerendered/locales/ms/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/nl/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/ru/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/ur/activity-stream-strings.js
browser/extensions/activity-stream/prerendered/locales/vi/activity-stream-strings.js
browser/extensions/activity-stream/test/functional/mochitest/browser_asrouter_targeting.js
browser/extensions/activity-stream/test/unit/content-src/components/ComponentPerfTimer.test.jsx
browser/extensions/activity-stream/test/unit/content-src/components/StartupOverlay.test.jsx
browser/extensions/activity-stream/test/unit/lib/AboutPreferences.test.js
browser/extensions/activity-stream/test/unit/lib/TopStoriesFeed.test.js
browser/extensions/activity-stream/webpack.prerender.config.js
browser/extensions/activity-stream/webpack.system-addon.config.js
browser/extensions/activity-stream/yamscripts.yml
--- a/browser/components/newtab/aboutNewTabService.js
+++ b/browser/components/newtab/aboutNewTabService.js
@@ -13,17 +13,17 @@ ChromeUtils.import("resource://gre/modul
 ChromeUtils.defineModuleGetter(this, "AboutNewTab",
                                "resource:///modules/AboutNewTab.jsm");
 
 const TOPIC_APP_QUIT = "quit-application-granted";
 const TOPIC_LOCALES_CHANGE = "intl:app-locales-changed";
 
 // Automated tests ensure packaged locales are in this list. Copied output of:
 // https://github.com/mozilla/activity-stream/blob/master/bin/render-activity-stream-html.js
-const ACTIVITY_STREAM_LOCALES = "en-US ach an ar ast az be bg bn-BD bn-IN br bs ca cak crh cs cy da de dsb el en-CA en-GB eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM ia id it ja ja-JP-mac ka kab kk km kn ko lij lo lt ltg lv mai mk ml mr ms my nb-NO ne-NP nl nn-NO oc pa-IN pl pt-BR pt-PT rm ro ru si sk sl sq sr sv-SE ta te th tl tr uk ur uz vi zh-CN zh-TW mix".split(" ");
+const ACTIVITY_STREAM_LOCALES = "en-US ach an ar ast az be bg bn-BD bn-IN br bs ca cak crh cs cy da de dsb el en-CA en-GB eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM ia id it ja ja-JP-mac ka kab kk km kn ko lij lo lt ltg lv mai mk ml mr ms my nb-NO ne-NP nl nn-NO oc pa-IN pl pt-BR pt-PT rm ro ru si sk sl sq sr sv-SE ta te th tl tr uk ur uz vi zh-CN zh-TW".split(" ");
 
 const ABOUT_URL = "about:newtab";
 
 const IS_MAIN_PROCESS = Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_DEFAULT;
 
 const IS_RELEASE_OR_BETA = AppConstants.RELEASE_OR_BETA;
 
 const PREF_ACTIVITY_STREAM_PRERENDER_ENABLED = "browser.newtabpage.activity-stream.prerender";
--- a/browser/extensions/activity-stream/.nvmrc
+++ b/browser/extensions/activity-stream/.nvmrc
@@ -1,1 +1,1 @@
-7.*
+8.*
--- a/browser/extensions/activity-stream/bin/render-activity-stream-html.js
+++ b/browser/extensions/activity-stream/bin/render-activity-stream-html.js
@@ -304,17 +304,17 @@ function main() { // eslint-disable-line
   let defaultStrings;
   let langStrings;
   const isSubset = (strings, existing) => existing &&
     Object.keys(strings).every(key => strings[key] === existing[key]);
 
   // Process the default locale first then all the ones from mozilla-central
   const localizedLocales = [];
   const skippedLocales = [];
-  for (const locale of [DEFAULT_LOCALE, ...CENTRAL_LOCALES, ...extraLocales]) {
+  for (const locale of [DEFAULT_LOCALE, ...CENTRAL_LOCALES]) {
     // Skip the locale if it would have resulted in duplicate packaged files
     const strings = getStrings(locale, allStrings);
     if (isSubset(strings, defaultStrings) || isSubset(strings, langStrings)) {
       skippedLocales.push(locale);
       continue;
     }
 
     const prerenderData  = prerender(locale, strings);
@@ -347,16 +347,16 @@ function main() { // eslint-disable-line
 
     localizedLocales.push(locale);
   }
 
   if (skippedLocales.length) {
     console.log("\x1b[33m", `Skipped the following locales because they use the same strings as ${DEFAULT_LOCALE} or its language locale: ${skippedLocales.join(", ")}`, "\x1b[0m");
   }
   if (extraLocales.length) {
-    console.log("\x1b[31m", `✗ These locales were not in CENTRAL_LOCALES, but probably should be: ${extraLocales.join(", ")}`, "\x1b[0m");
+    console.log("\x1b[33m", `Skipped the following locales because they are not in CENTRAL_LOCALES: ${extraLocales.join(", ")}`, "\x1b[0m");
   }
 
   // Provide some help to copy/paste locales if tests are failing
   console.log(`\nIf aboutNewTabService tests are failing for unexpected locales, make sure its list is updated:\nconst ACTIVITY_STREAM_LOCALES = "${localizedLocales.join(" ")}".split(" ");`);
 }
 
 main();
--- a/browser/extensions/activity-stream/content-src/components/Base/Base.jsx
+++ b/browser/extensions/activity-stream/content-src/components/Base/Base.jsx
@@ -24,16 +24,19 @@ function addLocaleDataForReactIntl(local
   addLocaleData([{locale, parentLocale: "en"}]);
 }
 
 export class _Base extends React.PureComponent {
   componentWillMount() {
     const {App, locale} = this.props;
     this.sendNewTabRehydrated(App);
     addLocaleDataForReactIntl(locale);
+    if (this.props.isFirstrun) {
+      global.document.body.classList.add("welcome");
+    }
   }
 
   componentDidMount() {
     // Request state AFTER the first render to ensure we don't cause the
     // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is
     // dispatched right after the store is ready.
     if (this.props.isPrerendered) {
       this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));
@@ -48,17 +51,19 @@ export class _Base extends React.PureCom
   componentWillUpdate({App}) {
     this.updateTheme();
     this.sendNewTabRehydrated(App);
   }
 
   updateTheme() {
     const bodyClassName = [
       "activity-stream",
-      this.props.isFirstrun ? "welcome" : ""
+      // If we skipped the about:welcome overlay and removed the CSS class
+      // we don't want to add it back to the Activity Stream view
+      document.body.classList.contains("welcome") ? "welcome" : ""
     ].filter(v => v).join(" ");
     global.document.body.className = bodyClassName;
   }
 
   // The NEW_TAB_REHYDRATED event is used to inform feeds that their
   // data has been consumed e.g. for counting the number of tabs that
   // have rendered that data.
   sendNewTabRehydrated(App) {
--- a/browser/extensions/activity-stream/content-src/components/CollapsibleSection/_CollapsibleSection.scss
+++ b/browser/extensions/activity-stream/content-src/components/CollapsibleSection/_CollapsibleSection.scss
@@ -84,22 +84,22 @@
   }
 
   .section-disclaimer {
     $max-button-width: 130px;
     $min-button-height: 26px;
 
     color: var(--newtab-text-conditional-color);
     font-size: 13px;
-    margin-bottom: 16px;
+    margin-bottom: 26px;
     position: relative;
+    display: flex;
 
     .section-disclaimer-text {
       display: inline-block;
-      min-height: $min-button-height;
       width: calc(100% - #{$max-button-width});
 
       @media (max-width: $break-point-medium) {
         width: $card-width;
       }
     }
 
     a {
@@ -108,20 +108,20 @@
       padding-left: 3px;
     }
 
     button {
       background: var(--newtab-button-secondary-color);
       border: 1px solid $grey-40;
       border-radius: 4px;
       cursor: pointer;
-      margin-top: 2px;
       max-width: $max-button-width;
       min-height: $min-button-height;
       inset-inline-end: 0;
+      align-self: center;
 
       &:hover:not(.dismiss) {
         box-shadow: $shadow-primary;
         transition: box-shadow 150ms;
       }
 
       @media (min-width: $break-point-small) {
         position: absolute;
--- a/browser/extensions/activity-stream/content-src/components/StartupOverlay/StartupOverlay.jsx
+++ b/browser/extensions/activity-stream/content-src/components/StartupOverlay/StartupOverlay.jsx
@@ -8,17 +8,20 @@ export class _StartupOverlay extends Rea
     super(props);
     this.onInputChange = this.onInputChange.bind(this);
     this.onSubmit = this.onSubmit.bind(this);
     this.clickSkip = this.clickSkip.bind(this);
     this.initScene = this.initScene.bind(this);
     this.removeOverlay = this.removeOverlay.bind(this);
     this.onInputInvalid = this.onInputInvalid.bind(this);
 
-    this.state = {emailInput: ""};
+    this.state = {
+      emailInput: "",
+      overlayRemoved: false
+    };
     this.initScene();
   }
 
   initScene() {
     // Timeout to allow the scene to render once before attaching the attribute
     // to trigger the animation.
     setTimeout(() => {
       this.setState({show: true});
@@ -26,16 +29,17 @@ export class _StartupOverlay extends Rea
   }
 
   removeOverlay() {
     window.removeEventListener("visibilitychange", this.removeOverlay);
     this.setState({show: false});
     setTimeout(() => {
       // Allow scrolling and fully remove overlay after animation finishes.
       document.body.classList.remove("welcome");
+      this.setState({overlayRemoved: true});
     }, 400);
   }
 
   onInputChange(e) {
     let error = e.target.previousSibling;
     this.setState({emailInput: e.target.value});
     error.classList.remove("active");
     e.target.classList.remove("invalid");
@@ -51,19 +55,26 @@ export class _StartupOverlay extends Rea
     this.removeOverlay();
   }
 
   onInputInvalid(e) {
     let error = e.target.previousSibling;
     error.classList.add("active");
     e.target.classList.add("invalid");
     e.preventDefault(); // Override built-in form validation popup
+    e.target.focus();
   }
 
   render() {
+    // When skipping the onboarding tour we show AS but we are still on
+    // about:welcome, prop.isFirstrun is true and StartupOverlay is rendered
+    if (this.state.overlayRemoved) {
+      return null;
+    }
+
     let termsLink = (<a href="https://accounts.firefox.com/legal/terms" target="_blank" rel="noopener noreferrer"><FormattedMessage id="firstrun_terms_of_service" /></a>);
     let privacyLink = (<a href="https://accounts.firefox.com/legal/privacy" target="_blank" rel="noopener noreferrer"><FormattedMessage id="firstrun_privacy_notice" /></a>);
     return (
       <div className={`overlay-wrapper ${this.state.show ? "show " : ""}`}>
         <div className="background" />
         <div className="firstrun-scene">
           <div className="fxaccounts-container">
             <div className="firstrun-left-divider">
--- a/browser/extensions/activity-stream/css/activity-stream-linux.css
+++ b/browser/extensions/activity-stream/css/activity-stream-linux.css
@@ -1606,38 +1606,38 @@ main {
   .collapsible-section.active {
     background: var(--newtab-element-hover-color);
     border-radius: 4px; }
     .collapsible-section.active .section-top-bar .context-menu-button {
       fill: var(--newtab-section-active-contextmenu-color); }
   .collapsible-section .section-disclaimer {
     color: var(--newtab-text-conditional-color);
     font-size: 13px;
-    margin-bottom: 16px;
-    position: relative; }
+    margin-bottom: 26px;
+    position: relative;
+    display: flex; }
     .collapsible-section .section-disclaimer .section-disclaimer-text {
       display: inline-block;
-      min-height: 26px;
       width: calc(100% - 130px); }
       @media (max-width: 610px) {
         .collapsible-section .section-disclaimer .section-disclaimer-text {
           width: 224px; } }
     .collapsible-section .section-disclaimer a {
       color: var(--newtab-link-primary-color);
       font-weight: bold;
       padding-left: 3px; }
     .collapsible-section .section-disclaimer button {
       background: var(--newtab-button-secondary-color);
       border: 1px solid #B1B1B3;
       border-radius: 4px;
       cursor: pointer;
-      margin-top: 2px;
       max-width: 130px;
       min-height: 26px;
-      inset-inline-end: 0; }
+      inset-inline-end: 0;
+      align-self: center; }
       .collapsible-section .section-disclaimer button:hover:not(.dismiss) {
         box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
         transition: box-shadow 150ms; }
       @media (min-width: 482px) {
         .collapsible-section .section-disclaimer button {
           position: absolute; } }
   .collapsible-section .section-body-fallback {
     height: 266px; }
--- a/browser/extensions/activity-stream/css/activity-stream-linux.css.map
+++ b/browser/extensions/activity-stream/css/activity-stream-linux.css.map
@@ -40,19 +40,19 @@
 		".sections-list {\n  .section-list {\n    display: grid;\n    grid-gap: $base-gutter;\n    grid-template-columns: repeat(auto-fit, $card-width);\n    margin: 0;\n\n    @media (max-width: $break-point-medium) {\n      @include context-menu-open-left;\n    }\n\n    @media (min-width: $break-point-medium) and (max-width: $break-point-large) {\n      :nth-child(2n) {\n        @include context-menu-open-left;\n      }\n    }\n\n    @media (min-width: $break-point-large) and (max-width: $break-point-large + 2 * $card-width) {\n      :nth-child(3n) {\n        @include context-menu-open-left;\n      }\n    }\n\n    @media (min-width: $break-point-widest) and (max-width: $break-point-widest + 2 * $card-width) {\n      :nth-child(3n) {\n        @include context-menu-open-left;\n      }\n    }\n  }\n\n  .section-empty-state {\n    border: $border-secondary;\n    border-radius: $border-radius;\n    display: flex;\n    height: $card-height;\n    width: 100%;\n\n    .empty-state {\n      margin: auto;\n      max-width: 350px;\n\n      .empty-state-icon {\n        background-position: center;\n        background-repeat: no-repeat;\n        background-size: 50px 50px;\n        -moz-context-properties: fill;\n        display: block;\n        fill: var(--newtab-icon-secondary-color);\n        height: 50px;\n        margin: 0 auto;\n        width: 50px;\n      }\n\n      .empty-state-message {\n        color: var(--newtab-text-primary-color);\n        font-size: 13px;\n        margin-bottom: 0;\n        text-align: center;\n      }\n    }\n\n    @media (min-width: $break-point-widest) {\n      height: $card-height-large;\n    }\n  }\n}\n\n@media (min-width: $break-point-widest) {\n  .sections-list {\n    // Compact cards stay the same size but normal cards get bigger.\n    .normal-cards {\n      .section-list {\n        grid-template-columns: repeat(auto-fit, $card-width-large);\n      }\n    }\n  }\n}\n",
 		".activity-stream {\n  &.welcome {\n    overflow: hidden;\n  }\n\n  &:not(.welcome) {\n    .overlay-wrapper {\n      display: none;\n    }\n  }\n}\n\n.overlay-wrapper {\n  position: absolute;\n  top: 0;\n  width: 100vw;\n  height: 100vh;\n  z-index: 21000;\n  transition: opacity 0.4s;\n  opacity: 0;\n  overflow-x: auto;\n\n  &.show {\n    transition: none;\n    opacity: 1;\n\n    .firstrun-sign-in {\n      transition: opacity 1.5s, transform 1.5s;\n      transition-delay: 0.2s;\n      transform: translateY(-50%) scale(1);\n      opacity: 1;\n\n      @media screen and (max-width: 790px) {\n        float: none;\n        margin: auto;\n        top: 190px;\n        margin-bottom: 100px;\n      }\n    }\n\n    .firstrun-firefox-logo {\n      transition: opacity 2.3s;\n      opacity: 1;\n    }\n\n    .firstrun-title,\n    .firstrun-content,\n    .firstrun-link {\n      transition: transform 0.5s, opacity 0.8s;\n      transform: translateY(0);\n      opacity: 1;\n    }\n\n    .firstrun-title {\n      transition-delay: 0.2s;\n    }\n\n    .firstrun-content {\n      transition-delay: 0.4s;\n    }\n\n    .firstrun-link {\n      transition-delay: 0.6s;\n    }\n\n    .fxaccounts-container {\n      transition: none;\n      opacity: 1;\n    }\n  }\n}\n\n.background {\n  width: 100%;\n  height: 100%;\n  display: block;\n  background: url('#{$image-path}fox-tail.png') top -200px center no-repeat,\n  linear-gradient(to bottom, $blue-70 40%, #004EC2 60%, $blue-60 80%, #0080FF 90%, #00C7FF 100%) top center no-repeat,\n  $blue-70;\n  background-size: cover;\n  position: fixed;\n}\n\n.firstrun-sign-in {\n  transform: translateY(-50%) scale(0.8);\n  position: relative;\n  top: 50%;\n  width: 358px;\n  opacity: 0;\n  background-color: $white;\n  float: inline-end;\n  color: $grey-90;\n  text-align: center;\n  padding: 10px;\n\n  form {\n    position: relative;\n  }\n\n  .extra-links {\n    font-size: 12px;\n    max-width: 340px;\n    margin: 17px 50px;\n    color: #676F7E;\n    cursor: default;\n\n    a {\n      color: $grey-50;\n      cursor: pointer;\n      text-decoration: underline;\n    }\n\n    a:hover,\n    a:active,\n    a:focus {\n      color: $blue-50;\n    }\n  }\n\n  .email-input {\n    box-shadow: none;\n    margin: auto;\n    width: 244px;\n    display: block;\n    height: 40px;\n    padding-inline-start: 20px;\n    border: 1px solid $grey-50;\n    border-radius: 2px;\n    font-size: 16px;\n    transition: border-color 150ms, box-shadow 150ms;\n\n    &:hover {\n      border-color: $grey-90;\n    }\n\n    &:focus {\n      border-color: $blue-50;\n      box-shadow: 0 0 0 3px $email-input-focus;\n    }\n\n    &.invalid {\n      border-color: $red-60;\n    }\n\n    &.invalid:focus {\n      box-shadow: 0 0 0 3px $email-input-invalid;\n    }\n  }\n\n  .form-header {\n    font-size: 22px;\n    margin: 15px auto;\n  }\n\n  .form-header .sub-header {\n    font-size: 14px;\n    margin-top: 4px;\n    display: block;\n  }\n\n  button {\n    display: block;\n    cursor: pointer;\n    margin: 10px auto 0;\n  }\n\n  .continue-button {\n    font-size: 18px;\n    height: 43px;\n    width: 250px;\n    padding: 8px 0;\n    border: 0;\n    border-radius: 4px;\n    color: $white;\n    background-color: $blue-60;\n    transition: background-color 150ms;\n\n    &:not([disabled]):active,\n    &:not([disabled]):hover {\n      background: $blue-70;\n      border-color: $blue-80;\n    }\n  }\n\n  .skip-button {\n    font-size: 13px;\n    margin-top: 20px;\n    margin-bottom: 20px;\n    background-color: $grey-10;\n    color: $blue-50;\n    border: 1px solid $blue-50;\n    border-radius: 2px;\n    min-height: 24px;\n    padding: 5px 10px;\n    transition: background-color 150ms, color 150ms, border-color 150ms;\n\n    &[disabled] {\n      background-color: $grey-20;\n      border-color: $grey-40;\n      color: $grey-50;\n      cursor: default;\n      opacity: 0.5;\n    }\n\n    &:not([disabled]):hover {\n      background-color: $blue-50;\n      border-color: $blue-60;\n      color: $white;\n    }\n  }\n}\n\n.firstrun-left-divider {\n  position: relative;\n  float: inline-start;\n  clear: both;\n  width: 435px;\n\n  @media screen and (max-width: 825px) {\n    width: 400px;\n  }\n\n  @media screen and (max-width: 790px) {\n    margin: auto;\n    float: none;\n    width: 352px;\n    text-align: center;\n  }\n}\n\n.firstrun-content {\n  line-height: 1.5;\n  margin-bottom: 48px;\n  max-width: 352px;\n  background: url('#{$image-path}sync-devices.svg') bottom center no-repeat;\n  padding-bottom: 210px;\n}\n\n.firstrun-link {\n  color: $white;\n  display: block;\n  text-decoration: underline;\n\n  &:hover,\n  &:active,\n  &:focus {\n    color: $white;\n  }\n}\n\n.firstrun-title {\n  background: url('chrome://branding/content/about-logo.png') top left no-repeat;\n  background-size: 90px 90px;\n  margin: 40px 0 10px;\n  padding-top: 110px;\n\n  @media screen and (max-width: 790px) {\n    background: url('chrome://branding/content/about-logo.png') top center no-repeat;\n    background-size: 90px 90px;\n  }\n\n  &:dir(rtl) {\n    background-position: top right;\n  }\n}\n\n.fxaccounts-container {\n  position: absolute;\n  bottom: 0;\n  right: 0;\n  top: 0;\n  left: 0;\n  color: $white;\n  height: 515px;\n  margin: auto;\n  width: 819px;\n  z-index: 10;\n  transition: opacity 0.3s;\n  opacity: 0;\n\n  @media screen and (max-width: 825px) {\n    width: 784px;\n  }\n\n  @media screen and (max-width: 790px) {\n    width: auto;\n    height: 100%;\n  }\n}\n\n.firstrun-title,\n.firstrun-content,\n.firstrun-link {\n  opacity: 0;\n  transform: translateY(-5px);\n}\n\n.error {\n  display: none;\n}\n\n.error.active {\n  display: block;\n  padding: 5px 12px;\n  animation: fade-down 450ms;\n  font-size: 12px;\n  font-weight: 500;\n  color: $white;\n  background-color: $red-60;\n  position: absolute;\n  inset-inline-start: 50px;\n  top: -28px;\n  border-radius: 2px;\n\n  &::before {\n    inset-inline-start: 12px;\n    background: $red-60;\n    bottom: -8px;\n    content: '.';\n    height: 16px;\n    position: absolute;\n    text-indent: -999px;\n    transform: rotate(45deg);\n    white-space: nowrap;\n    width: 16px;\n    z-index: -1;\n  }\n}\n\n@keyframes fade-down {\n  0% {\n    opacity: 0;\n    transform: translateY(-15px);\n  }\n\n  100% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n",
 		".topic {\n  color: var(--newtab-section-navigation-text-color);\n  font-size: 12px;\n  line-height: 1.6;\n  margin-top: $topic-margin-top;\n\n  @media (min-width: $break-point-large) {\n    line-height: 16px;\n  }\n\n  ul {\n    margin: 0;\n    padding: 0;\n    @media (min-width: $break-point-large) {\n      display: inline;\n      padding-inline-start: 12px;\n    }\n  }\n\n\n  ul li {\n    display: inline-block;\n\n    &::after {\n      content: '•';\n      padding: 8px;\n    }\n\n    &:last-child::after {\n      content: none;\n    }\n  }\n\n  .topic-link {\n    color: var(--newtab-link-secondary-color);\n    font-weight: bold;\n  }\n\n  .topic-read-more {\n    color: var(--newtab-link-secondary-color);\n    font-weight: bold;\n\n    @media (min-width: $break-point-large) {\n      // This is floating to accomodate a very large number of topics and/or\n      // very long topic names due to l10n.\n      float: right;\n\n      &:dir(rtl) {\n        float: left;\n      }\n    }\n\n    &::after {\n      background: url('#{$image-path}topic-show-more-12.svg') no-repeat center center;\n      content: '';\n      -moz-context-properties: fill;\n      display: inline-block;\n      fill: var(--newtab-link-secondary-color);\n      height: 16px;\n      margin-inline-start: 5px;\n      vertical-align: top;\n      width: 12px;\n    }\n\n    &:dir(rtl)::after  {\n      transform: scaleX(-1);\n    }\n  }\n\n  // This is a clearfix to for the topics-read-more link which is floating and causes\n  // some jank when we set overflow:hidden for the animation.\n  &::after {\n    clear: both;\n    content: '';\n    display: table;\n  }\n}\n",
 		".search-wrapper {\n  $search-height: 35px;\n  $search-icon-size: 18px;\n  $search-icon-padding: 8px;\n  $search-icon-width: 2 * $search-icon-padding + $search-icon-size;\n  $search-input-left-label-width: 35px;\n  $search-button-width: 36px;\n  $glyph-forward: url('chrome://browser/skin/forward.svg');\n\n  cursor: default;\n  display: flex;\n  height: $search-height;\n  margin-bottom: $section-spacing;\n  position: relative;\n  width: 100%;\n\n  input {\n    background: var(--newtab-textbox-background-color) var(--newtab-search-icon) $search-icon-padding center / $search-icon-size no-repeat;\n    border: solid 1px var(--newtab-search-border-color);\n    box-shadow: $shadow-secondary, 0 0 0 1px $black-15;\n    font-size: 15px;\n    -moz-context-properties: fill;\n    fill: var(--newtab-search-icon-color);\n    padding: 0;\n    padding-inline-end: $search-button-width;\n    padding-inline-start: $search-icon-width;\n    width: 100%;\n\n    &:dir(rtl) {\n      background-position-x: right $search-icon-padding;\n    }\n  }\n\n  &:hover input {\n    box-shadow: $shadow-secondary, 0 0 0 1px $black-25;\n  }\n\n  &:active input,\n  input:focus {\n    border: $input-border-active;\n    box-shadow: var(--newtab-textbox-focus-boxshadow);\n  }\n\n  .search-button {\n    background: $glyph-forward no-repeat center center;\n    background-size: 16px 16px;\n    border: 0;\n    border-radius: 0 $border-radius $border-radius 0;\n    -moz-context-properties: fill;\n    fill: var(--newtab-search-icon-color);\n    height: 100%;\n    inset-inline-end: 0;\n    position: absolute;\n    width: $search-button-width;\n\n    &:focus,\n    &:hover {\n      background-color: $grey-90-10;\n      cursor: pointer;\n    }\n\n    &:active {\n      background-color: $grey-90-20;\n    }\n\n    &:dir(rtl) {\n      transform: scaleX(-1);\n    }\n  }\n}\n\n@at-root {\n  // Adjust the style of the contentSearchUI-generated table\n  .contentSearchSuggestionTable {\n    background-color: var(--newtab-search-dropdown-color);\n    border: 0;\n    box-shadow: $context-menu-shadow;\n    transform: translateY($textbox-shadow-size);\n\n    .contentSearchHeader {\n      background-color: var(--newtab-search-dropdown-header-color);\n      color: var(--newtab-text-secondary-color);\n    }\n\n    .contentSearchHeader,\n    .contentSearchSettingsButton {\n      border-color: var(--newtab-border-secondary-color);\n    }\n\n    .contentSearchSuggestionsList {\n      border: 0;\n    }\n\n    .contentSearchOneOffsTable {\n      background-color: var(--newtab-search-dropdown-header-color);\n      border-top: solid 1px var(--newtab-border-secondary-color);\n    }\n\n    .contentSearchSearchWithHeaderSearchText {\n      color: var(--newtab-text-primary-color);\n    }\n\n    .contentSearchSuggestionsContainer {\n      background-color: var(--newtab-search-dropdown-color);\n    }\n\n    .contentSearchSuggestionRow {\n      &.selected {\n        background: var(--newtab-element-hover-color);\n        color: var(--newtab-text-primary-color);\n\n        &:active {\n          background: var(--newtab-element-active-color);\n        }\n\n        .historyIcon {\n          fill: var(--newtab-icon-secondary-color);\n        }\n      }\n    }\n\n    .contentSearchOneOffsTable {\n      .contentSearchSuggestionsContainer {\n        background-color: var(--newtab-search-dropdown-header-color);\n      }\n    }\n\n    .contentSearchOneOffItem {\n      // Make the border slightly shorter by offsetting from the top and bottom\n      $border-offset: 18%;\n\n      background-image: none;\n      border-image: linear-gradient(transparent $border-offset, var(--newtab-border-secondary-color) $border-offset, var(--newtab-border-secondary-color) 100% - $border-offset, transparent 100% - $border-offset) 1;\n      border-inline-end: 1px solid;\n      position: relative;\n\n      &.selected {\n        background: var(--newtab-element-hover-color);\n      }\n\n      &:active {\n        background: var(--newtab-element-active-color);\n      }\n    }\n\n    .contentSearchSettingsButton {\n      &:hover {\n        background: var(--newtab-element-hover-color);\n        color: var(--newtab-text-primary-color);\n      }\n    }\n  }\n}\n",
 		".context-menu {\n  background: var(--newtab-contextmenu-background-color);\n  border-radius: $context-menu-border-radius;\n  box-shadow: $context-menu-shadow;\n  display: block;\n  font-size: $context-menu-font-size;\n  margin-inline-start: 5px;\n  inset-inline-start: 100%;\n  position: absolute;\n  top: ($context-menu-button-size / 4);\n  z-index: 10000;\n\n  > ul {\n    list-style: none;\n    margin: 0;\n    padding: $context-menu-outer-padding 0;\n\n    > li {\n      margin: 0;\n      width: 100%;\n\n      &.separator {\n        border-bottom: $border-secondary;\n        margin: $context-menu-outer-padding 0;\n      }\n\n      > a {\n        align-items: center;\n        color: inherit;\n        cursor: pointer;\n        display: flex;\n        line-height: 16px;\n        outline: none;\n        padding: $context-menu-item-padding;\n        white-space: nowrap;\n\n        &:-moz-any(:focus, :hover) {\n          background: var(--newtab-element-hover-color);\n        }\n\n        &:active {\n          background: var(--newtab-element-active-color);\n        }\n\n        &.disabled {\n          opacity: 0.4;\n          pointer-events: none;\n        }\n      }\n    }\n  }\n}\n",
 		".confirmation-dialog {\n  .modal {\n    box-shadow: 0 2px 2px 0 $black-10;\n    left: 50%;\n    margin-left: -200px;\n    position: fixed;\n    top: 20%;\n    width: 400px;\n  }\n\n  section {\n    margin: 0;\n  }\n\n  .modal-message {\n    display: flex;\n    padding: 16px;\n    padding-bottom: 0;\n\n    p {\n      margin: 0;\n      margin-bottom: 16px;\n    }\n  }\n\n  .actions {\n    border: 0;\n    display: flex;\n    flex-wrap: nowrap;\n    padding: 0 16px;\n\n    button {\n      margin-inline-end: 16px;\n      padding-inline-end: 18px;\n      padding-inline-start: 18px;\n      white-space: normal;\n      width: 50%;\n\n      &.done {\n        margin-inline-end: 0;\n        margin-inline-start: 0;\n      }\n    }\n  }\n\n  .icon {\n    margin-inline-end: 16px;\n  }\n}\n\n.modal-overlay {\n  background: var(--newtab-overlay-color);\n  height: 100%;\n  left: 0;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 11001;\n}\n\n.modal {\n  background: var(--newtab-modal-color);\n  border: $border-secondary;\n  border-radius: 5px;\n  font-size: 15px;\n  z-index: 11002;\n}\n",
 		".card-outer {\n  @include context-menu-button;\n  background: var(--newtab-card-background-color);\n  border-radius: $border-radius;\n  display: inline-block;\n  height: $card-height;\n  margin-inline-end: $base-gutter;\n  position: relative;\n  width: 100%;\n\n  &.placeholder {\n    background: transparent;\n\n    .card {\n      box-shadow: inset $inner-box-shadow;\n    }\n\n    .card-preview-image-outer,\n    .card-context {\n      display: none;\n    }\n  }\n\n  .card {\n    border-radius: $border-radius;\n    box-shadow: var(--newtab-card-shadow);\n    height: 100%;\n  }\n\n  > a {\n    color: inherit;\n    display: block;\n    height: 100%;\n    outline: none;\n    position: absolute;\n    width: 100%;\n\n    &:-moz-any(.active, :focus) {\n      .card {\n        @include fade-in-card;\n      }\n\n      .card-title {\n        color: var(--newtab-link-primary-color);\n      }\n    }\n  }\n\n  &:-moz-any(:hover, :focus, .active):not(.placeholder) {\n    @include fade-in-card;\n    @include context-menu-button-hover;\n    outline: none;\n\n    .card-title {\n      color: var(--newtab-link-primary-color);\n    }\n\n    .alternate ~ .card-host-name {\n      display: none;\n    }\n\n    .card-host-name.alternate {\n      display: block;\n    }\n  }\n\n  .card-preview-image-outer {\n    background-color: $grey-30;\n    border-radius: $border-radius $border-radius 0 0;\n    height: $card-preview-image-height;\n    overflow: hidden;\n    position: relative;\n\n    [lwt-newtab-brighttext] & {\n      background-color: $grey-60;\n    }\n\n    &::after {\n      border-bottom: 1px solid var(--newtab-card-hairline-color);\n      bottom: 0;\n      content: '';\n      position: absolute;\n      width: 100%;\n    }\n\n    .card-preview-image {\n      background-position: center;\n      background-repeat: no-repeat;\n      background-size: cover;\n      height: 100%;\n      opacity: 0;\n      transition: opacity 1s $photon-easing;\n      width: 100%;\n\n      &.loaded {\n        opacity: 1;\n      }\n    }\n  }\n\n  .card-details {\n    padding: 15px 16px 12px;\n  }\n\n  .card-text {\n    max-height: 4 * $card-text-line-height + $card-title-margin;\n    overflow: hidden;\n\n    &.no-host-name,\n    &.no-context {\n      max-height: 5 * $card-text-line-height + $card-title-margin;\n    }\n\n    &.no-host-name.no-context {\n      max-height: 6 * $card-text-line-height + $card-title-margin;\n    }\n\n    &:not(.no-description) .card-title {\n      max-height: 3 * $card-text-line-height;\n      overflow: hidden;\n    }\n  }\n\n  .card-host-name {\n    color: var(--newtab-text-secondary-color);\n    font-size: 10px;\n    overflow: hidden;\n    padding-bottom: 4px;\n    text-overflow: ellipsis;\n    text-transform: uppercase;\n    white-space: nowrap;\n  }\n\n  .card-host-name.alternate { display: none; }\n\n  .card-title {\n    font-size: 14px;\n    font-weight: 600;\n    line-height: $card-text-line-height;\n    margin: 0 0 $card-title-margin;\n    word-wrap: break-word;\n  }\n\n  .card-description {\n    font-size: 12px;\n    line-height: $card-text-line-height;\n    margin: 0;\n    overflow: hidden;\n    word-wrap: break-word;\n  }\n\n  .card-context {\n    bottom: 0;\n    color: var(--newtab-text-secondary-color);\n    display: flex;\n    font-size: 11px;\n    inset-inline-start: 0;\n    padding: 9px 16px 9px 14px;\n    position: absolute;\n  }\n\n  .card-context-icon {\n    fill: var(--newtab-text-secondary-color);\n    height: 22px;\n    margin-inline-end: 6px;\n  }\n\n  .card-context-label {\n    flex-grow: 1;\n    line-height: 22px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n}\n\n.normal-cards {\n  .card-outer {\n    // Wide layout styles\n    @media (min-width: $break-point-widest) {\n      $line-height: 23px;\n      height: $card-height-large;\n\n      .card-preview-image-outer {\n        height: $card-preview-image-height-large;\n      }\n\n      .card-details {\n        padding: 13px 16px 12px;\n      }\n\n      .card-text {\n        max-height: 6 * $line-height + $card-title-margin;\n      }\n\n      .card-host-name {\n        font-size: 12px;\n        padding-bottom: 5px;\n      }\n\n      .card-title {\n        font-size: 17px;\n        line-height: $line-height;\n        margin-bottom: 0;\n      }\n\n      .card-text:not(.no-description) {\n        .card-title {\n          max-height: 3 * $line-height;\n        }\n      }\n\n      .card-description {\n        font-size: 15px;\n        line-height: $line-height;\n      }\n\n      .card-context {\n        bottom: 4px;\n        font-size: 14px;\n      }\n    }\n  }\n}\n\n.compact-cards {\n  $card-detail-vertical-spacing: 12px;\n  $card-title-font-size: 12px;\n\n  .card-outer {\n    height: $card-height-compact;\n\n    .card-preview-image-outer {\n      height: $card-preview-image-height-compact;\n    }\n\n    .card-details {\n      padding: $card-detail-vertical-spacing 16px;\n    }\n\n    .card-host-name {\n      line-height: 10px;\n    }\n\n    .card-text {\n      .card-title,\n      &:not(.no-description) .card-title {\n        font-size: $card-title-font-size;\n        line-height: $card-title-font-size + 1;\n        max-height: $card-title-font-size + 1;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n    }\n\n    .card-description {\n      display: none;\n    }\n\n    .card-context {\n      $icon-size: 16px;\n      $container-size: 32px;\n      background-color: var(--newtab-card-background-color);\n      border-radius: $container-size / 2;\n      clip-path: inset(-1px -1px $container-size - ($card-height-compact - $card-preview-image-height-compact - 2 * $card-detail-vertical-spacing));\n      height: $container-size;\n      width: $container-size;\n      padding: ($container-size - $icon-size) / 2;\n      top: $card-preview-image-height-compact - $icon-size;\n      inset-inline-end: 12px;\n      inset-inline-start: auto;\n\n      &::after {\n        border: 1px solid var(--newtab-card-hairline-color);\n        border-bottom: 0;\n        border-radius: ($container-size / 2) + 1 ($container-size / 2) + 1 0 0;\n        content: '';\n        position: absolute;\n        height: ($container-size + 2) / 2;\n        width: $container-size + 2;\n        top: -1px;\n        left: -1px;\n      }\n\n      .card-context-icon {\n        margin-inline-end: 0;\n        height: $icon-size;\n        width: $icon-size;\n\n        &.icon-bookmark-added {\n          fill: $bookmark-icon-fill;\n        }\n\n        &.icon-download {\n          fill: $download-icon-fill;\n        }\n\n        &.icon-pocket {\n          fill: $pocket-icon-fill;\n        }\n      }\n\n      .card-context-label {\n        display: none;\n      }\n    }\n  }\n\n  @media not all and (min-width: $break-point-widest) {\n    .hide-for-narrow {\n      display: none;\n    }\n  }\n}\n",
 		".manual-migration-container {\n  color: var(--newtab-text-conditional-color);\n  font-size: 13px;\n  line-height: 15px;\n  margin-bottom: $section-spacing;\n  text-align: center;\n\n  @media (min-width: $break-point-medium) {\n    display: flex;\n    justify-content: space-between;\n    text-align: left;\n  }\n\n  p {\n    margin: 0;\n    @media (min-width: $break-point-medium) {\n      align-self: center;\n      display: flex;\n      justify-content: space-between;\n    }\n  }\n\n  .icon {\n    display: none;\n    @media (min-width: $break-point-medium) {\n      align-self: center;\n      display: block;\n      fill: var(--newtab-icon-secondary-color);\n      margin-inline-end: 6px;\n    }\n  }\n}\n\n.manual-migration-actions {\n  border: 0;\n  display: block;\n  flex-wrap: nowrap;\n\n  @media (min-width: $break-point-medium) {\n    display: flex;\n    justify-content: space-between;\n    padding: 0;\n  }\n\n  button {\n    align-self: center;\n    height: 26px;\n    margin: 0;\n    margin-inline-start: 20px;\n    padding: 0 12px;\n  }\n}\n",
-		".collapsible-section {\n  padding: $section-vertical-padding $section-horizontal-padding;\n  transition-delay: 100ms;\n  transition-duration: 100ms;\n  transition-property: background-color;\n\n  .section-title {\n    font-size: $section-title-font-size;\n    font-weight: bold;\n    margin: 0;\n    text-transform: uppercase;\n\n    span {\n      color: var(--newtab-section-header-text-color);\n      display: inline-block;\n      fill: var(--newtab-section-header-text-color);\n      vertical-align: middle;\n    }\n\n    .click-target {\n      cursor: pointer;\n      vertical-align: top;\n      white-space: nowrap;\n    }\n\n    .collapsible-arrow {\n      margin-inline-start: 8px;\n      margin-top: -1px;\n    }\n  }\n\n  .section-top-bar {\n    height: 19px;\n    margin-bottom: 13px;\n    position: relative;\n\n    .context-menu-button {\n      background: url('chrome://browser/skin/page-action.svg') no-repeat right center;\n      border: 0;\n      cursor: pointer;\n      fill: var(--newtab-section-header-text-color);\n      height: 100%;\n      inset-inline-end: 0;\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      transition-duration: 200ms;\n      transition-property: opacity;\n      width: $context-menu-button-size;\n\n      &:-moz-any(:active, :focus, :hover) {\n        fill: $grey-90;\n        opacity: 1;\n      }\n    }\n\n    .context-menu {\n      top: 16px;\n    }\n\n    @media (max-width: $break-point-widest + $card-width * 1.5) {\n      @include context-menu-open-left;\n    }\n  }\n\n  &:hover,\n  &.active {\n    .section-top-bar {\n      .context-menu-button {\n        opacity: 1;\n      }\n    }\n  }\n\n  &.active {\n    background: var(--newtab-element-hover-color);\n    border-radius: 4px;\n\n    .section-top-bar {\n      .context-menu-button {\n        fill: var(--newtab-section-active-contextmenu-color);\n      }\n    }\n  }\n\n  .section-disclaimer {\n    $max-button-width: 130px;\n    $min-button-height: 26px;\n\n    color: var(--newtab-text-conditional-color);\n    font-size: 13px;\n    margin-bottom: 16px;\n    position: relative;\n\n    .section-disclaimer-text {\n      display: inline-block;\n      min-height: $min-button-height;\n      width: calc(100% - #{$max-button-width});\n\n      @media (max-width: $break-point-medium) {\n        width: $card-width;\n      }\n    }\n\n    a {\n      color: var(--newtab-link-primary-color);\n      font-weight: bold;\n      padding-left: 3px;\n    }\n\n    button {\n      background: var(--newtab-button-secondary-color);\n      border: 1px solid $grey-40;\n      border-radius: 4px;\n      cursor: pointer;\n      margin-top: 2px;\n      max-width: $max-button-width;\n      min-height: $min-button-height;\n      inset-inline-end: 0;\n\n      &:hover:not(.dismiss) {\n        box-shadow: $shadow-primary;\n        transition: box-shadow 150ms;\n      }\n\n      @media (min-width: $break-point-small) {\n        position: absolute;\n      }\n    }\n  }\n\n  .section-body-fallback {\n    height: $card-height;\n  }\n\n  .section-body {\n    // This is so the top sites favicon and card dropshadows don't get clipped during animation:\n    $horizontal-padding: 7px;\n    margin: 0 (-$horizontal-padding);\n    padding: 0 $horizontal-padding;\n\n    &.animating {\n      overflow: hidden;\n      pointer-events: none;\n    }\n  }\n\n  &.animation-enabled {\n    .section-title {\n      .collapsible-arrow {\n        transition: transform 0.5s $photon-easing;\n      }\n    }\n\n    .section-body {\n      transition: max-height 0.5s $photon-easing;\n    }\n  }\n\n  &.collapsed {\n    .section-body {\n      max-height: 0;\n      overflow: hidden;\n    }\n  }\n}\n",
+		".collapsible-section {\n  padding: $section-vertical-padding $section-horizontal-padding;\n  transition-delay: 100ms;\n  transition-duration: 100ms;\n  transition-property: background-color;\n\n  .section-title {\n    font-size: $section-title-font-size;\n    font-weight: bold;\n    margin: 0;\n    text-transform: uppercase;\n\n    span {\n      color: var(--newtab-section-header-text-color);\n      display: inline-block;\n      fill: var(--newtab-section-header-text-color);\n      vertical-align: middle;\n    }\n\n    .click-target {\n      cursor: pointer;\n      vertical-align: top;\n      white-space: nowrap;\n    }\n\n    .collapsible-arrow {\n      margin-inline-start: 8px;\n      margin-top: -1px;\n    }\n  }\n\n  .section-top-bar {\n    height: 19px;\n    margin-bottom: 13px;\n    position: relative;\n\n    .context-menu-button {\n      background: url('chrome://browser/skin/page-action.svg') no-repeat right center;\n      border: 0;\n      cursor: pointer;\n      fill: var(--newtab-section-header-text-color);\n      height: 100%;\n      inset-inline-end: 0;\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      transition-duration: 200ms;\n      transition-property: opacity;\n      width: $context-menu-button-size;\n\n      &:-moz-any(:active, :focus, :hover) {\n        fill: $grey-90;\n        opacity: 1;\n      }\n    }\n\n    .context-menu {\n      top: 16px;\n    }\n\n    @media (max-width: $break-point-widest + $card-width * 1.5) {\n      @include context-menu-open-left;\n    }\n  }\n\n  &:hover,\n  &.active {\n    .section-top-bar {\n      .context-menu-button {\n        opacity: 1;\n      }\n    }\n  }\n\n  &.active {\n    background: var(--newtab-element-hover-color);\n    border-radius: 4px;\n\n    .section-top-bar {\n      .context-menu-button {\n        fill: var(--newtab-section-active-contextmenu-color);\n      }\n    }\n  }\n\n  .section-disclaimer {\n    $max-button-width: 130px;\n    $min-button-height: 26px;\n\n    color: var(--newtab-text-conditional-color);\n    font-size: 13px;\n    margin-bottom: 26px;\n    position: relative;\n    display: flex;\n\n    .section-disclaimer-text {\n      display: inline-block;\n      width: calc(100% - #{$max-button-width});\n\n      @media (max-width: $break-point-medium) {\n        width: $card-width;\n      }\n    }\n\n    a {\n      color: var(--newtab-link-primary-color);\n      font-weight: bold;\n      padding-left: 3px;\n    }\n\n    button {\n      background: var(--newtab-button-secondary-color);\n      border: 1px solid $grey-40;\n      border-radius: 4px;\n      cursor: pointer;\n      max-width: $max-button-width;\n      min-height: $min-button-height;\n      inset-inline-end: 0;\n      align-self: center;\n\n      &:hover:not(.dismiss) {\n        box-shadow: $shadow-primary;\n        transition: box-shadow 150ms;\n      }\n\n      @media (min-width: $break-point-small) {\n        position: absolute;\n      }\n    }\n  }\n\n  .section-body-fallback {\n    height: $card-height;\n  }\n\n  .section-body {\n    // This is so the top sites favicon and card dropshadows don't get clipped during animation:\n    $horizontal-padding: 7px;\n    margin: 0 (-$horizontal-padding);\n    padding: 0 $horizontal-padding;\n\n    &.animating {\n      overflow: hidden;\n      pointer-events: none;\n    }\n  }\n\n  &.animation-enabled {\n    .section-title {\n      .collapsible-arrow {\n        transition: transform 0.5s $photon-easing;\n      }\n    }\n\n    .section-body {\n      transition: max-height 0.5s $photon-easing;\n    }\n  }\n\n  &.collapsed {\n    .section-body {\n      max-height: 0;\n      overflow: hidden;\n    }\n  }\n}\n",
 		"\n.asrouter-admin {\n  $border-color: var(--newtab-border-secondary-color);\n  $monospace: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', monospace;\n  max-width: 996px;\n  margin: 0 auto;\n  font-size: 14px;\n  // Reset .outer-wrapper styles\n  display: inherit;\n  padding: 0 0 92px;\n\n  h1 {\n    font-weight: 200;\n    font-size: 32px;\n  }\n\n  table {\n    border-collapse: collapse;\n    width: 100%;\n  }\n\n  .message-item {\n    &:first-child td {\n      border-top: 1px solid $border-color;\n    }\n\n    td {\n      vertical-align: top;\n      border-bottom: 1px solid $border-color;\n      padding: 8px;\n\n      &:first-child {\n        border-left: 1px solid $border-color;\n      }\n\n      &:last-child {\n        border-right: 1px solid $border-color;\n      }\n    }\n\n    &.current {\n      .message-id span {\n        background: $yellow-50;\n        padding: 2px 5px;\n\n        [lwt-newtab-brighttext] & {\n          color: $black;\n        }\n      }\n    }\n\n    &.blocked {\n      .message-id,\n      .message-summary {\n        opacity: 0.5;\n      }\n\n      .message-id {\n        opacity: 0.5;\n      }\n    }\n\n    .message-id {\n      font-family: $monospace;\n      font-size: 12px;\n    }\n  }\n\n  pre {\n    background: var(--newtab-textbox-background-color);\n    margin: 0;\n    padding: 8px;\n    font-size: 12px;\n    max-width: 750px;\n    overflow: auto;\n    font-family: $monospace;\n  }\n}\n",
 		".ASRouterButton {\n  white-space: nowrap;\n  border-radius: 4px;\n  border: 1px solid var(--newtab-border-secondary-color);\n  background-color: var(--newtab-button-secondary-color);\n  font-family: inherit;\n  padding: 8px 15px;\n  margin-inline-start: 12px;\n  color: inherit;\n\n  .tall & {\n    margin-inline-start: 20px;\n  }\n}\n",
 		".SnippetBaseContainer {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background-color: var(--newtab-snippets-background-color);\n  color: var(--newtab-text-primary-color);\n  font-size: 12px;\n  line-height: 16px;\n  border-top: 1px solid var(--newtab-snippets-hairline-color);\n  box-shadow: $shadow-secondary;\n  display: flex;\n  align-items: center;\n\n  .innerWrapper {\n    margin: 0 auto;\n    display: flex;\n    align-items: center;\n    padding: 12px $section-horizontal-padding;\n\n    // This is to account for the block button on smaller screens\n    padding-inline-end: 36px;\n    @media (min-width: $break-point-large) {\n      padding-inline-end: $section-horizontal-padding;\n    }\n\n    max-width: $wrapper-max-width-large;\n    @media (min-width: $break-point-widest) {\n      max-width: $wrapper-max-width-widest;\n    }\n  }\n\n  .blockButton {\n    display: none;\n    background: none;\n    border: 0;\n    position: absolute;\n    top: 50%;\n    inset-inline-end: 12px;\n    height: 16px;\n    width: 16px;\n    background-image: url('resource://activity-stream/data/content/assets/glyph-dismiss-16.svg');\n    -moz-context-properties: fill;\n    fill: var(--newtab-icon-primary-color);\n    opacity: 0.5;\n    margin-top: -8px;\n    padding: 0;\n    cursor: pointer;\n\n    @media (min-width: 766px) {\n      inset-inline-end: 24px;\n    }\n  }\n\n  &:hover .blockButton {\n    display: block;\n  }\n}\n",
 		".activity-stream {\n  &.modal-open {\n    overflow: hidden;\n  }\n}\n\n.modalOverlayOuter {\n  background: $white;\n  opacity: 0.93;\n  height: 100%;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  display: none;\n  z-index: 1100;\n\n  &.active {\n    display: block;\n  }\n}\n\n.modalOverlayInner {\n  width: 960px;\n  height: 510px;\n  position: fixed;\n  top: calc(50% - 255px); // halfway down minus half the height of the modal\n  left: calc(50% - 480px); // halfway across minus half the width of the modal\n  background: $white;\n  box-shadow: 0 1px 15px 0 $black-30;\n  border-radius: 4px;\n  display: none;\n  z-index: 1101;\n\n\n  // modal takes over entire screen\n  @media(max-width: 960px) {\n    width: 100%;\n    height: 100%;\n    top: 0;\n    left: 0;\n    box-shadow: none;\n    border-radius: 0;\n  }\n\n  // if modal is short enough, add a vertical scroll bar\n  @media(max-width: 850px) and (max-height: 730px) {\n    overflow-y: scroll;\n  }\n\n  // if modal is narrow enough, add a vertical scroll bar\n  @media(max-width: 650px) and (max-height: 600px) {\n    overflow-y: scroll;\n  }\n\n  &.active {\n    display: block;\n  }\n\n  h2 {\n    color: $grey-60;\n    text-align: center;\n    font-weight: 200;\n    margin-top: 30px;\n    font-size: 28px;\n    line-height: 37px;\n    letter-spacing: -0.13px;\n\n    @media(max-width: 960px) {\n      margin-top: 100px;\n    }\n\n    @media(max-width: 850px) {\n      margin-top: 30px;\n    }\n  }\n\n  .footer {\n    border-top: 1px solid $grey-30;\n    height: 70px;\n    width: 100%;\n    position: absolute;\n    bottom: 0;\n    text-align: center;\n    background-color: $white;\n\n    // if modal is short enough, footer becomes sticky\n    @media(max-width: 850px) and (max-height: 730px) {\n      position: sticky;\n    }\n\n    // if modal is narrow enough, footer becomes sticky\n    @media(max-width: 650px) and (max-height: 600px) {\n      position: sticky;\n    }\n\n    .modalButton {\n      margin-top: 20px;\n      width: 150px;\n      height: 30px;\n      padding: 4px 0 6px;\n      font-size: 15px;\n    }\n  }\n}\n",
 		".SimpleSnippet {\n  &.tall {\n    padding: 27px 0;\n  }\n\n  .title {\n    display: inline;\n    font-size: inherit;\n    margin: 0;\n  }\n\n  .titleIcon {\n    background-repeat: no-repeat;\n    background-size: 14px;\n    height: 16px;\n    width: 16px;\n    margin-top: 2px;\n    margin-inline-end: 2px;\n    display: inline-block;\n    vertical-align: top;\n  }\n\n  .body {\n    display: inline;\n    margin: 0;\n  }\n\n  .icon {\n    height: 42px;\n    width: 42px;\n    margin-inline-end: 12px;\n    flex-shrink: 0;\n  }\n\n  &.tall .icon {\n    margin-inline-end: 20px;\n  }\n\n  .ASRouterAnchor {\n    color: inherit;\n    text-decoration: underline;\n  }\n}\n",
 		".onboardingMessageContainer {\n  display: grid;\n  grid-column-gap: 21px;\n  grid-template-columns: auto auto auto;\n  padding-left: 30px;\n  padding-right: 30px;\n\n  // at 850px, the cards go from vertical layout to horizontal layout\n  @media(max-width: 850px) {\n    grid-template-columns: none;\n    grid-template-rows: auto auto auto;\n    padding-left: 110px;\n    padding-right: 110px;\n  }\n}\n\n.onboardingMessage {\n  height: 340px;\n  text-align: center;\n  padding: 13px;\n  font-weight: 200;\n\n  // at 850px, img floats left, content floats right next to it\n  @media(max-width: 850px) {\n    height: 170px;\n    text-align: left;\n    padding: 10px;\n    border-bottom: 1px solid $grey-30;\n    display: flex;\n    margin-bottom: 11px;\n\n    &:last-child {\n      border: 0;\n    }\n\n    .onboardingContent {\n      padding-left: 10px;\n      height: 100%;\n\n      > span > h3 {\n        margin-top: 0;\n        margin-bottom: 4px;\n        font-weight: 400;\n      }\n\n      > span > p {\n        margin-top: 0;\n        line-height: 22px;\n        font-size: 15px;\n      }\n    }\n  }\n\n  @media(max-width: 650px) {\n    height: 250px;\n  }\n\n  .onboardingMessageImage {\n    height: 100px;\n    width: 120px;\n    background-size: 120px;\n    background-position: center center;\n    background-repeat: no-repeat;\n    display: inline-block;\n    vertical-align: middle;\n\n\n    @media(max-width: 850px) {\n      height: 75px;\n      min-width: 80px;\n      background-size: 80px;\n    }\n\n    &.addons {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-addons@2x.png');\n    }\n\n    &.privatebrowsing {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-privatebrowsing@2x.png');\n    }\n\n    &.screenshots {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-screenshots@2x.png');\n    }\n\n    &.gift {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-gift@2x.png');\n    }\n  }\n\n  .onboardingContent {\n    height: 175px;\n\n    > span > h3 {\n      color: $grey-90;\n      margin-bottom: 8px;\n      font-weight: 400;\n    }\n\n    > span > p {\n      color: $grey-60;\n      margin-top: 0;\n      height: 130px;\n      margin-bottom: 12px;\n      font-size: 15px;\n      line-height: 22px;\n\n      @media(max-width: 650px) {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  .onboardingButton {\n    background-color: $grey-90-10;\n    border: 0;\n    width: 150px;\n    height: 30px;\n    margin-bottom: 23px;\n    padding: 4px 0 6px;\n    font-size: 15px;\n\n    // at 850px, the button shimmies down and to the right\n    @media(max-width: 850px) {\n      float: right;\n      margin-top: -60px;\n      margin-right: -10px;\n    }\n\n    @media(max-width: 650px) {\n      float: none;\n      margin-top: 30px;\n    }\n  }\n\n\n  &::before {\n    content: '';\n    height: 220px;\n    width: 1px;\n    position: absolute;\n    background-color: $grey-30;\n    margin-top: 40px;\n    margin-left: 215px;\n\n    // at 850px, the line goes from vertical to horizontal\n    @media(max-width: 850px) {\n      content: none;\n    }\n  }\n\n  &:last-child::before {\n    content: none;\n  }\n}\n"
 	],
 	"names": [],
-	"mappings": "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"
+	"mappings": "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"
 }
\ No newline at end of file
--- a/browser/extensions/activity-stream/css/activity-stream-mac.css
+++ b/browser/extensions/activity-stream/css/activity-stream-mac.css
@@ -1609,38 +1609,38 @@ main {
   .collapsible-section.active {
     background: var(--newtab-element-hover-color);
     border-radius: 4px; }
     .collapsible-section.active .section-top-bar .context-menu-button {
       fill: var(--newtab-section-active-contextmenu-color); }
   .collapsible-section .section-disclaimer {
     color: var(--newtab-text-conditional-color);
     font-size: 13px;
-    margin-bottom: 16px;
-    position: relative; }
+    margin-bottom: 26px;
+    position: relative;
+    display: flex; }
     .collapsible-section .section-disclaimer .section-disclaimer-text {
       display: inline-block;
-      min-height: 26px;
       width: calc(100% - 130px); }
       @media (max-width: 610px) {
         .collapsible-section .section-disclaimer .section-disclaimer-text {
           width: 224px; } }
     .collapsible-section .section-disclaimer a {
       color: var(--newtab-link-primary-color);
       font-weight: bold;
       padding-left: 3px; }
     .collapsible-section .section-disclaimer button {
       background: var(--newtab-button-secondary-color);
       border: 1px solid #B1B1B3;
       border-radius: 4px;
       cursor: pointer;
-      margin-top: 2px;
       max-width: 130px;
       min-height: 26px;
-      inset-inline-end: 0; }
+      inset-inline-end: 0;
+      align-self: center; }
       .collapsible-section .section-disclaimer button:hover:not(.dismiss) {
         box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
         transition: box-shadow 150ms; }
       @media (min-width: 482px) {
         .collapsible-section .section-disclaimer button {
           position: absolute; } }
   .collapsible-section .section-body-fallback {
     height: 266px; }
--- a/browser/extensions/activity-stream/css/activity-stream-mac.css.map
+++ b/browser/extensions/activity-stream/css/activity-stream-mac.css.map
@@ -40,19 +40,19 @@
 		".sections-list {\n  .section-list {\n    display: grid;\n    grid-gap: $base-gutter;\n    grid-template-columns: repeat(auto-fit, $card-width);\n    margin: 0;\n\n    @media (max-width: $break-point-medium) {\n      @include context-menu-open-left;\n    }\n\n    @media (min-width: $break-point-medium) and (max-width: $break-point-large) {\n      :nth-child(2n) {\n        @include context-menu-open-left;\n      }\n    }\n\n    @media (min-width: $break-point-large) and (max-width: $break-point-large + 2 * $card-width) {\n      :nth-child(3n) {\n        @include context-menu-open-left;\n      }\n    }\n\n    @media (min-width: $break-point-widest) and (max-width: $break-point-widest + 2 * $card-width) {\n      :nth-child(3n) {\n        @include context-menu-open-left;\n      }\n    }\n  }\n\n  .section-empty-state {\n    border: $border-secondary;\n    border-radius: $border-radius;\n    display: flex;\n    height: $card-height;\n    width: 100%;\n\n    .empty-state {\n      margin: auto;\n      max-width: 350px;\n\n      .empty-state-icon {\n        background-position: center;\n        background-repeat: no-repeat;\n        background-size: 50px 50px;\n        -moz-context-properties: fill;\n        display: block;\n        fill: var(--newtab-icon-secondary-color);\n        height: 50px;\n        margin: 0 auto;\n        width: 50px;\n      }\n\n      .empty-state-message {\n        color: var(--newtab-text-primary-color);\n        font-size: 13px;\n        margin-bottom: 0;\n        text-align: center;\n      }\n    }\n\n    @media (min-width: $break-point-widest) {\n      height: $card-height-large;\n    }\n  }\n}\n\n@media (min-width: $break-point-widest) {\n  .sections-list {\n    // Compact cards stay the same size but normal cards get bigger.\n    .normal-cards {\n      .section-list {\n        grid-template-columns: repeat(auto-fit, $card-width-large);\n      }\n    }\n  }\n}\n",
 		".activity-stream {\n  &.welcome {\n    overflow: hidden;\n  }\n\n  &:not(.welcome) {\n    .overlay-wrapper {\n      display: none;\n    }\n  }\n}\n\n.overlay-wrapper {\n  position: absolute;\n  top: 0;\n  width: 100vw;\n  height: 100vh;\n  z-index: 21000;\n  transition: opacity 0.4s;\n  opacity: 0;\n  overflow-x: auto;\n\n  &.show {\n    transition: none;\n    opacity: 1;\n\n    .firstrun-sign-in {\n      transition: opacity 1.5s, transform 1.5s;\n      transition-delay: 0.2s;\n      transform: translateY(-50%) scale(1);\n      opacity: 1;\n\n      @media screen and (max-width: 790px) {\n        float: none;\n        margin: auto;\n        top: 190px;\n        margin-bottom: 100px;\n      }\n    }\n\n    .firstrun-firefox-logo {\n      transition: opacity 2.3s;\n      opacity: 1;\n    }\n\n    .firstrun-title,\n    .firstrun-content,\n    .firstrun-link {\n      transition: transform 0.5s, opacity 0.8s;\n      transform: translateY(0);\n      opacity: 1;\n    }\n\n    .firstrun-title {\n      transition-delay: 0.2s;\n    }\n\n    .firstrun-content {\n      transition-delay: 0.4s;\n    }\n\n    .firstrun-link {\n      transition-delay: 0.6s;\n    }\n\n    .fxaccounts-container {\n      transition: none;\n      opacity: 1;\n    }\n  }\n}\n\n.background {\n  width: 100%;\n  height: 100%;\n  display: block;\n  background: url('#{$image-path}fox-tail.png') top -200px center no-repeat,\n  linear-gradient(to bottom, $blue-70 40%, #004EC2 60%, $blue-60 80%, #0080FF 90%, #00C7FF 100%) top center no-repeat,\n  $blue-70;\n  background-size: cover;\n  position: fixed;\n}\n\n.firstrun-sign-in {\n  transform: translateY(-50%) scale(0.8);\n  position: relative;\n  top: 50%;\n  width: 358px;\n  opacity: 0;\n  background-color: $white;\n  float: inline-end;\n  color: $grey-90;\n  text-align: center;\n  padding: 10px;\n\n  form {\n    position: relative;\n  }\n\n  .extra-links {\n    font-size: 12px;\n    max-width: 340px;\n    margin: 17px 50px;\n    color: #676F7E;\n    cursor: default;\n\n    a {\n      color: $grey-50;\n      cursor: pointer;\n      text-decoration: underline;\n    }\n\n    a:hover,\n    a:active,\n    a:focus {\n      color: $blue-50;\n    }\n  }\n\n  .email-input {\n    box-shadow: none;\n    margin: auto;\n    width: 244px;\n    display: block;\n    height: 40px;\n    padding-inline-start: 20px;\n    border: 1px solid $grey-50;\n    border-radius: 2px;\n    font-size: 16px;\n    transition: border-color 150ms, box-shadow 150ms;\n\n    &:hover {\n      border-color: $grey-90;\n    }\n\n    &:focus {\n      border-color: $blue-50;\n      box-shadow: 0 0 0 3px $email-input-focus;\n    }\n\n    &.invalid {\n      border-color: $red-60;\n    }\n\n    &.invalid:focus {\n      box-shadow: 0 0 0 3px $email-input-invalid;\n    }\n  }\n\n  .form-header {\n    font-size: 22px;\n    margin: 15px auto;\n  }\n\n  .form-header .sub-header {\n    font-size: 14px;\n    margin-top: 4px;\n    display: block;\n  }\n\n  button {\n    display: block;\n    cursor: pointer;\n    margin: 10px auto 0;\n  }\n\n  .continue-button {\n    font-size: 18px;\n    height: 43px;\n    width: 250px;\n    padding: 8px 0;\n    border: 0;\n    border-radius: 4px;\n    color: $white;\n    background-color: $blue-60;\n    transition: background-color 150ms;\n\n    &:not([disabled]):active,\n    &:not([disabled]):hover {\n      background: $blue-70;\n      border-color: $blue-80;\n    }\n  }\n\n  .skip-button {\n    font-size: 13px;\n    margin-top: 20px;\n    margin-bottom: 20px;\n    background-color: $grey-10;\n    color: $blue-50;\n    border: 1px solid $blue-50;\n    border-radius: 2px;\n    min-height: 24px;\n    padding: 5px 10px;\n    transition: background-color 150ms, color 150ms, border-color 150ms;\n\n    &[disabled] {\n      background-color: $grey-20;\n      border-color: $grey-40;\n      color: $grey-50;\n      cursor: default;\n      opacity: 0.5;\n    }\n\n    &:not([disabled]):hover {\n      background-color: $blue-50;\n      border-color: $blue-60;\n      color: $white;\n    }\n  }\n}\n\n.firstrun-left-divider {\n  position: relative;\n  float: inline-start;\n  clear: both;\n  width: 435px;\n\n  @media screen and (max-width: 825px) {\n    width: 400px;\n  }\n\n  @media screen and (max-width: 790px) {\n    margin: auto;\n    float: none;\n    width: 352px;\n    text-align: center;\n  }\n}\n\n.firstrun-content {\n  line-height: 1.5;\n  margin-bottom: 48px;\n  max-width: 352px;\n  background: url('#{$image-path}sync-devices.svg') bottom center no-repeat;\n  padding-bottom: 210px;\n}\n\n.firstrun-link {\n  color: $white;\n  display: block;\n  text-decoration: underline;\n\n  &:hover,\n  &:active,\n  &:focus {\n    color: $white;\n  }\n}\n\n.firstrun-title {\n  background: url('chrome://branding/content/about-logo.png') top left no-repeat;\n  background-size: 90px 90px;\n  margin: 40px 0 10px;\n  padding-top: 110px;\n\n  @media screen and (max-width: 790px) {\n    background: url('chrome://branding/content/about-logo.png') top center no-repeat;\n    background-size: 90px 90px;\n  }\n\n  &:dir(rtl) {\n    background-position: top right;\n  }\n}\n\n.fxaccounts-container {\n  position: absolute;\n  bottom: 0;\n  right: 0;\n  top: 0;\n  left: 0;\n  color: $white;\n  height: 515px;\n  margin: auto;\n  width: 819px;\n  z-index: 10;\n  transition: opacity 0.3s;\n  opacity: 0;\n\n  @media screen and (max-width: 825px) {\n    width: 784px;\n  }\n\n  @media screen and (max-width: 790px) {\n    width: auto;\n    height: 100%;\n  }\n}\n\n.firstrun-title,\n.firstrun-content,\n.firstrun-link {\n  opacity: 0;\n  transform: translateY(-5px);\n}\n\n.error {\n  display: none;\n}\n\n.error.active {\n  display: block;\n  padding: 5px 12px;\n  animation: fade-down 450ms;\n  font-size: 12px;\n  font-weight: 500;\n  color: $white;\n  background-color: $red-60;\n  position: absolute;\n  inset-inline-start: 50px;\n  top: -28px;\n  border-radius: 2px;\n\n  &::before {\n    inset-inline-start: 12px;\n    background: $red-60;\n    bottom: -8px;\n    content: '.';\n    height: 16px;\n    position: absolute;\n    text-indent: -999px;\n    transform: rotate(45deg);\n    white-space: nowrap;\n    width: 16px;\n    z-index: -1;\n  }\n}\n\n@keyframes fade-down {\n  0% {\n    opacity: 0;\n    transform: translateY(-15px);\n  }\n\n  100% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n",
 		".topic {\n  color: var(--newtab-section-navigation-text-color);\n  font-size: 12px;\n  line-height: 1.6;\n  margin-top: $topic-margin-top;\n\n  @media (min-width: $break-point-large) {\n    line-height: 16px;\n  }\n\n  ul {\n    margin: 0;\n    padding: 0;\n    @media (min-width: $break-point-large) {\n      display: inline;\n      padding-inline-start: 12px;\n    }\n  }\n\n\n  ul li {\n    display: inline-block;\n\n    &::after {\n      content: '•';\n      padding: 8px;\n    }\n\n    &:last-child::after {\n      content: none;\n    }\n  }\n\n  .topic-link {\n    color: var(--newtab-link-secondary-color);\n    font-weight: bold;\n  }\n\n  .topic-read-more {\n    color: var(--newtab-link-secondary-color);\n    font-weight: bold;\n\n    @media (min-width: $break-point-large) {\n      // This is floating to accomodate a very large number of topics and/or\n      // very long topic names due to l10n.\n      float: right;\n\n      &:dir(rtl) {\n        float: left;\n      }\n    }\n\n    &::after {\n      background: url('#{$image-path}topic-show-more-12.svg') no-repeat center center;\n      content: '';\n      -moz-context-properties: fill;\n      display: inline-block;\n      fill: var(--newtab-link-secondary-color);\n      height: 16px;\n      margin-inline-start: 5px;\n      vertical-align: top;\n      width: 12px;\n    }\n\n    &:dir(rtl)::after  {\n      transform: scaleX(-1);\n    }\n  }\n\n  // This is a clearfix to for the topics-read-more link which is floating and causes\n  // some jank when we set overflow:hidden for the animation.\n  &::after {\n    clear: both;\n    content: '';\n    display: table;\n  }\n}\n",
 		".search-wrapper {\n  $search-height: 35px;\n  $search-icon-size: 18px;\n  $search-icon-padding: 8px;\n  $search-icon-width: 2 * $search-icon-padding + $search-icon-size;\n  $search-input-left-label-width: 35px;\n  $search-button-width: 36px;\n  $glyph-forward: url('chrome://browser/skin/forward.svg');\n\n  cursor: default;\n  display: flex;\n  height: $search-height;\n  margin-bottom: $section-spacing;\n  position: relative;\n  width: 100%;\n\n  input {\n    background: var(--newtab-textbox-background-color) var(--newtab-search-icon) $search-icon-padding center / $search-icon-size no-repeat;\n    border: solid 1px var(--newtab-search-border-color);\n    box-shadow: $shadow-secondary, 0 0 0 1px $black-15;\n    font-size: 15px;\n    -moz-context-properties: fill;\n    fill: var(--newtab-search-icon-color);\n    padding: 0;\n    padding-inline-end: $search-button-width;\n    padding-inline-start: $search-icon-width;\n    width: 100%;\n\n    &:dir(rtl) {\n      background-position-x: right $search-icon-padding;\n    }\n  }\n\n  &:hover input {\n    box-shadow: $shadow-secondary, 0 0 0 1px $black-25;\n  }\n\n  &:active input,\n  input:focus {\n    border: $input-border-active;\n    box-shadow: var(--newtab-textbox-focus-boxshadow);\n  }\n\n  .search-button {\n    background: $glyph-forward no-repeat center center;\n    background-size: 16px 16px;\n    border: 0;\n    border-radius: 0 $border-radius $border-radius 0;\n    -moz-context-properties: fill;\n    fill: var(--newtab-search-icon-color);\n    height: 100%;\n    inset-inline-end: 0;\n    position: absolute;\n    width: $search-button-width;\n\n    &:focus,\n    &:hover {\n      background-color: $grey-90-10;\n      cursor: pointer;\n    }\n\n    &:active {\n      background-color: $grey-90-20;\n    }\n\n    &:dir(rtl) {\n      transform: scaleX(-1);\n    }\n  }\n}\n\n@at-root {\n  // Adjust the style of the contentSearchUI-generated table\n  .contentSearchSuggestionTable {\n    background-color: var(--newtab-search-dropdown-color);\n    border: 0;\n    box-shadow: $context-menu-shadow;\n    transform: translateY($textbox-shadow-size);\n\n    .contentSearchHeader {\n      background-color: var(--newtab-search-dropdown-header-color);\n      color: var(--newtab-text-secondary-color);\n    }\n\n    .contentSearchHeader,\n    .contentSearchSettingsButton {\n      border-color: var(--newtab-border-secondary-color);\n    }\n\n    .contentSearchSuggestionsList {\n      border: 0;\n    }\n\n    .contentSearchOneOffsTable {\n      background-color: var(--newtab-search-dropdown-header-color);\n      border-top: solid 1px var(--newtab-border-secondary-color);\n    }\n\n    .contentSearchSearchWithHeaderSearchText {\n      color: var(--newtab-text-primary-color);\n    }\n\n    .contentSearchSuggestionsContainer {\n      background-color: var(--newtab-search-dropdown-color);\n    }\n\n    .contentSearchSuggestionRow {\n      &.selected {\n        background: var(--newtab-element-hover-color);\n        color: var(--newtab-text-primary-color);\n\n        &:active {\n          background: var(--newtab-element-active-color);\n        }\n\n        .historyIcon {\n          fill: var(--newtab-icon-secondary-color);\n        }\n      }\n    }\n\n    .contentSearchOneOffsTable {\n      .contentSearchSuggestionsContainer {\n        background-color: var(--newtab-search-dropdown-header-color);\n      }\n    }\n\n    .contentSearchOneOffItem {\n      // Make the border slightly shorter by offsetting from the top and bottom\n      $border-offset: 18%;\n\n      background-image: none;\n      border-image: linear-gradient(transparent $border-offset, var(--newtab-border-secondary-color) $border-offset, var(--newtab-border-secondary-color) 100% - $border-offset, transparent 100% - $border-offset) 1;\n      border-inline-end: 1px solid;\n      position: relative;\n\n      &.selected {\n        background: var(--newtab-element-hover-color);\n      }\n\n      &:active {\n        background: var(--newtab-element-active-color);\n      }\n    }\n\n    .contentSearchSettingsButton {\n      &:hover {\n        background: var(--newtab-element-hover-color);\n        color: var(--newtab-text-primary-color);\n      }\n    }\n  }\n}\n",
 		".context-menu {\n  background: var(--newtab-contextmenu-background-color);\n  border-radius: $context-menu-border-radius;\n  box-shadow: $context-menu-shadow;\n  display: block;\n  font-size: $context-menu-font-size;\n  margin-inline-start: 5px;\n  inset-inline-start: 100%;\n  position: absolute;\n  top: ($context-menu-button-size / 4);\n  z-index: 10000;\n\n  > ul {\n    list-style: none;\n    margin: 0;\n    padding: $context-menu-outer-padding 0;\n\n    > li {\n      margin: 0;\n      width: 100%;\n\n      &.separator {\n        border-bottom: $border-secondary;\n        margin: $context-menu-outer-padding 0;\n      }\n\n      > a {\n        align-items: center;\n        color: inherit;\n        cursor: pointer;\n        display: flex;\n        line-height: 16px;\n        outline: none;\n        padding: $context-menu-item-padding;\n        white-space: nowrap;\n\n        &:-moz-any(:focus, :hover) {\n          background: var(--newtab-element-hover-color);\n        }\n\n        &:active {\n          background: var(--newtab-element-active-color);\n        }\n\n        &.disabled {\n          opacity: 0.4;\n          pointer-events: none;\n        }\n      }\n    }\n  }\n}\n",
 		".confirmation-dialog {\n  .modal {\n    box-shadow: 0 2px 2px 0 $black-10;\n    left: 50%;\n    margin-left: -200px;\n    position: fixed;\n    top: 20%;\n    width: 400px;\n  }\n\n  section {\n    margin: 0;\n  }\n\n  .modal-message {\n    display: flex;\n    padding: 16px;\n    padding-bottom: 0;\n\n    p {\n      margin: 0;\n      margin-bottom: 16px;\n    }\n  }\n\n  .actions {\n    border: 0;\n    display: flex;\n    flex-wrap: nowrap;\n    padding: 0 16px;\n\n    button {\n      margin-inline-end: 16px;\n      padding-inline-end: 18px;\n      padding-inline-start: 18px;\n      white-space: normal;\n      width: 50%;\n\n      &.done {\n        margin-inline-end: 0;\n        margin-inline-start: 0;\n      }\n    }\n  }\n\n  .icon {\n    margin-inline-end: 16px;\n  }\n}\n\n.modal-overlay {\n  background: var(--newtab-overlay-color);\n  height: 100%;\n  left: 0;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 11001;\n}\n\n.modal {\n  background: var(--newtab-modal-color);\n  border: $border-secondary;\n  border-radius: 5px;\n  font-size: 15px;\n  z-index: 11002;\n}\n",
 		".card-outer {\n  @include context-menu-button;\n  background: var(--newtab-card-background-color);\n  border-radius: $border-radius;\n  display: inline-block;\n  height: $card-height;\n  margin-inline-end: $base-gutter;\n  position: relative;\n  width: 100%;\n\n  &.placeholder {\n    background: transparent;\n\n    .card {\n      box-shadow: inset $inner-box-shadow;\n    }\n\n    .card-preview-image-outer,\n    .card-context {\n      display: none;\n    }\n  }\n\n  .card {\n    border-radius: $border-radius;\n    box-shadow: var(--newtab-card-shadow);\n    height: 100%;\n  }\n\n  > a {\n    color: inherit;\n    display: block;\n    height: 100%;\n    outline: none;\n    position: absolute;\n    width: 100%;\n\n    &:-moz-any(.active, :focus) {\n      .card {\n        @include fade-in-card;\n      }\n\n      .card-title {\n        color: var(--newtab-link-primary-color);\n      }\n    }\n  }\n\n  &:-moz-any(:hover, :focus, .active):not(.placeholder) {\n    @include fade-in-card;\n    @include context-menu-button-hover;\n    outline: none;\n\n    .card-title {\n      color: var(--newtab-link-primary-color);\n    }\n\n    .alternate ~ .card-host-name {\n      display: none;\n    }\n\n    .card-host-name.alternate {\n      display: block;\n    }\n  }\n\n  .card-preview-image-outer {\n    background-color: $grey-30;\n    border-radius: $border-radius $border-radius 0 0;\n    height: $card-preview-image-height;\n    overflow: hidden;\n    position: relative;\n\n    [lwt-newtab-brighttext] & {\n      background-color: $grey-60;\n    }\n\n    &::after {\n      border-bottom: 1px solid var(--newtab-card-hairline-color);\n      bottom: 0;\n      content: '';\n      position: absolute;\n      width: 100%;\n    }\n\n    .card-preview-image {\n      background-position: center;\n      background-repeat: no-repeat;\n      background-size: cover;\n      height: 100%;\n      opacity: 0;\n      transition: opacity 1s $photon-easing;\n      width: 100%;\n\n      &.loaded {\n        opacity: 1;\n      }\n    }\n  }\n\n  .card-details {\n    padding: 15px 16px 12px;\n  }\n\n  .card-text {\n    max-height: 4 * $card-text-line-height + $card-title-margin;\n    overflow: hidden;\n\n    &.no-host-name,\n    &.no-context {\n      max-height: 5 * $card-text-line-height + $card-title-margin;\n    }\n\n    &.no-host-name.no-context {\n      max-height: 6 * $card-text-line-height + $card-title-margin;\n    }\n\n    &:not(.no-description) .card-title {\n      max-height: 3 * $card-text-line-height;\n      overflow: hidden;\n    }\n  }\n\n  .card-host-name {\n    color: var(--newtab-text-secondary-color);\n    font-size: 10px;\n    overflow: hidden;\n    padding-bottom: 4px;\n    text-overflow: ellipsis;\n    text-transform: uppercase;\n    white-space: nowrap;\n  }\n\n  .card-host-name.alternate { display: none; }\n\n  .card-title {\n    font-size: 14px;\n    font-weight: 600;\n    line-height: $card-text-line-height;\n    margin: 0 0 $card-title-margin;\n    word-wrap: break-word;\n  }\n\n  .card-description {\n    font-size: 12px;\n    line-height: $card-text-line-height;\n    margin: 0;\n    overflow: hidden;\n    word-wrap: break-word;\n  }\n\n  .card-context {\n    bottom: 0;\n    color: var(--newtab-text-secondary-color);\n    display: flex;\n    font-size: 11px;\n    inset-inline-start: 0;\n    padding: 9px 16px 9px 14px;\n    position: absolute;\n  }\n\n  .card-context-icon {\n    fill: var(--newtab-text-secondary-color);\n    height: 22px;\n    margin-inline-end: 6px;\n  }\n\n  .card-context-label {\n    flex-grow: 1;\n    line-height: 22px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n}\n\n.normal-cards {\n  .card-outer {\n    // Wide layout styles\n    @media (min-width: $break-point-widest) {\n      $line-height: 23px;\n      height: $card-height-large;\n\n      .card-preview-image-outer {\n        height: $card-preview-image-height-large;\n      }\n\n      .card-details {\n        padding: 13px 16px 12px;\n      }\n\n      .card-text {\n        max-height: 6 * $line-height + $card-title-margin;\n      }\n\n      .card-host-name {\n        font-size: 12px;\n        padding-bottom: 5px;\n      }\n\n      .card-title {\n        font-size: 17px;\n        line-height: $line-height;\n        margin-bottom: 0;\n      }\n\n      .card-text:not(.no-description) {\n        .card-title {\n          max-height: 3 * $line-height;\n        }\n      }\n\n      .card-description {\n        font-size: 15px;\n        line-height: $line-height;\n      }\n\n      .card-context {\n        bottom: 4px;\n        font-size: 14px;\n      }\n    }\n  }\n}\n\n.compact-cards {\n  $card-detail-vertical-spacing: 12px;\n  $card-title-font-size: 12px;\n\n  .card-outer {\n    height: $card-height-compact;\n\n    .card-preview-image-outer {\n      height: $card-preview-image-height-compact;\n    }\n\n    .card-details {\n      padding: $card-detail-vertical-spacing 16px;\n    }\n\n    .card-host-name {\n      line-height: 10px;\n    }\n\n    .card-text {\n      .card-title,\n      &:not(.no-description) .card-title {\n        font-size: $card-title-font-size;\n        line-height: $card-title-font-size + 1;\n        max-height: $card-title-font-size + 1;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n    }\n\n    .card-description {\n      display: none;\n    }\n\n    .card-context {\n      $icon-size: 16px;\n      $container-size: 32px;\n      background-color: var(--newtab-card-background-color);\n      border-radius: $container-size / 2;\n      clip-path: inset(-1px -1px $container-size - ($card-height-compact - $card-preview-image-height-compact - 2 * $card-detail-vertical-spacing));\n      height: $container-size;\n      width: $container-size;\n      padding: ($container-size - $icon-size) / 2;\n      top: $card-preview-image-height-compact - $icon-size;\n      inset-inline-end: 12px;\n      inset-inline-start: auto;\n\n      &::after {\n        border: 1px solid var(--newtab-card-hairline-color);\n        border-bottom: 0;\n        border-radius: ($container-size / 2) + 1 ($container-size / 2) + 1 0 0;\n        content: '';\n        position: absolute;\n        height: ($container-size + 2) / 2;\n        width: $container-size + 2;\n        top: -1px;\n        left: -1px;\n      }\n\n      .card-context-icon {\n        margin-inline-end: 0;\n        height: $icon-size;\n        width: $icon-size;\n\n        &.icon-bookmark-added {\n          fill: $bookmark-icon-fill;\n        }\n\n        &.icon-download {\n          fill: $download-icon-fill;\n        }\n\n        &.icon-pocket {\n          fill: $pocket-icon-fill;\n        }\n      }\n\n      .card-context-label {\n        display: none;\n      }\n    }\n  }\n\n  @media not all and (min-width: $break-point-widest) {\n    .hide-for-narrow {\n      display: none;\n    }\n  }\n}\n",
 		".manual-migration-container {\n  color: var(--newtab-text-conditional-color);\n  font-size: 13px;\n  line-height: 15px;\n  margin-bottom: $section-spacing;\n  text-align: center;\n\n  @media (min-width: $break-point-medium) {\n    display: flex;\n    justify-content: space-between;\n    text-align: left;\n  }\n\n  p {\n    margin: 0;\n    @media (min-width: $break-point-medium) {\n      align-self: center;\n      display: flex;\n      justify-content: space-between;\n    }\n  }\n\n  .icon {\n    display: none;\n    @media (min-width: $break-point-medium) {\n      align-self: center;\n      display: block;\n      fill: var(--newtab-icon-secondary-color);\n      margin-inline-end: 6px;\n    }\n  }\n}\n\n.manual-migration-actions {\n  border: 0;\n  display: block;\n  flex-wrap: nowrap;\n\n  @media (min-width: $break-point-medium) {\n    display: flex;\n    justify-content: space-between;\n    padding: 0;\n  }\n\n  button {\n    align-self: center;\n    height: 26px;\n    margin: 0;\n    margin-inline-start: 20px;\n    padding: 0 12px;\n  }\n}\n",
-		".collapsible-section {\n  padding: $section-vertical-padding $section-horizontal-padding;\n  transition-delay: 100ms;\n  transition-duration: 100ms;\n  transition-property: background-color;\n\n  .section-title {\n    font-size: $section-title-font-size;\n    font-weight: bold;\n    margin: 0;\n    text-transform: uppercase;\n\n    span {\n      color: var(--newtab-section-header-text-color);\n      display: inline-block;\n      fill: var(--newtab-section-header-text-color);\n      vertical-align: middle;\n    }\n\n    .click-target {\n      cursor: pointer;\n      vertical-align: top;\n      white-space: nowrap;\n    }\n\n    .collapsible-arrow {\n      margin-inline-start: 8px;\n      margin-top: -1px;\n    }\n  }\n\n  .section-top-bar {\n    height: 19px;\n    margin-bottom: 13px;\n    position: relative;\n\n    .context-menu-button {\n      background: url('chrome://browser/skin/page-action.svg') no-repeat right center;\n      border: 0;\n      cursor: pointer;\n      fill: var(--newtab-section-header-text-color);\n      height: 100%;\n      inset-inline-end: 0;\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      transition-duration: 200ms;\n      transition-property: opacity;\n      width: $context-menu-button-size;\n\n      &:-moz-any(:active, :focus, :hover) {\n        fill: $grey-90;\n        opacity: 1;\n      }\n    }\n\n    .context-menu {\n      top: 16px;\n    }\n\n    @media (max-width: $break-point-widest + $card-width * 1.5) {\n      @include context-menu-open-left;\n    }\n  }\n\n  &:hover,\n  &.active {\n    .section-top-bar {\n      .context-menu-button {\n        opacity: 1;\n      }\n    }\n  }\n\n  &.active {\n    background: var(--newtab-element-hover-color);\n    border-radius: 4px;\n\n    .section-top-bar {\n      .context-menu-button {\n        fill: var(--newtab-section-active-contextmenu-color);\n      }\n    }\n  }\n\n  .section-disclaimer {\n    $max-button-width: 130px;\n    $min-button-height: 26px;\n\n    color: var(--newtab-text-conditional-color);\n    font-size: 13px;\n    margin-bottom: 16px;\n    position: relative;\n\n    .section-disclaimer-text {\n      display: inline-block;\n      min-height: $min-button-height;\n      width: calc(100% - #{$max-button-width});\n\n      @media (max-width: $break-point-medium) {\n        width: $card-width;\n      }\n    }\n\n    a {\n      color: var(--newtab-link-primary-color);\n      font-weight: bold;\n      padding-left: 3px;\n    }\n\n    button {\n      background: var(--newtab-button-secondary-color);\n      border: 1px solid $grey-40;\n      border-radius: 4px;\n      cursor: pointer;\n      margin-top: 2px;\n      max-width: $max-button-width;\n      min-height: $min-button-height;\n      inset-inline-end: 0;\n\n      &:hover:not(.dismiss) {\n        box-shadow: $shadow-primary;\n        transition: box-shadow 150ms;\n      }\n\n      @media (min-width: $break-point-small) {\n        position: absolute;\n      }\n    }\n  }\n\n  .section-body-fallback {\n    height: $card-height;\n  }\n\n  .section-body {\n    // This is so the top sites favicon and card dropshadows don't get clipped during animation:\n    $horizontal-padding: 7px;\n    margin: 0 (-$horizontal-padding);\n    padding: 0 $horizontal-padding;\n\n    &.animating {\n      overflow: hidden;\n      pointer-events: none;\n    }\n  }\n\n  &.animation-enabled {\n    .section-title {\n      .collapsible-arrow {\n        transition: transform 0.5s $photon-easing;\n      }\n    }\n\n    .section-body {\n      transition: max-height 0.5s $photon-easing;\n    }\n  }\n\n  &.collapsed {\n    .section-body {\n      max-height: 0;\n      overflow: hidden;\n    }\n  }\n}\n",
+		".collapsible-section {\n  padding: $section-vertical-padding $section-horizontal-padding;\n  transition-delay: 100ms;\n  transition-duration: 100ms;\n  transition-property: background-color;\n\n  .section-title {\n    font-size: $section-title-font-size;\n    font-weight: bold;\n    margin: 0;\n    text-transform: uppercase;\n\n    span {\n      color: var(--newtab-section-header-text-color);\n      display: inline-block;\n      fill: var(--newtab-section-header-text-color);\n      vertical-align: middle;\n    }\n\n    .click-target {\n      cursor: pointer;\n      vertical-align: top;\n      white-space: nowrap;\n    }\n\n    .collapsible-arrow {\n      margin-inline-start: 8px;\n      margin-top: -1px;\n    }\n  }\n\n  .section-top-bar {\n    height: 19px;\n    margin-bottom: 13px;\n    position: relative;\n\n    .context-menu-button {\n      background: url('chrome://browser/skin/page-action.svg') no-repeat right center;\n      border: 0;\n      cursor: pointer;\n      fill: var(--newtab-section-header-text-color);\n      height: 100%;\n      inset-inline-end: 0;\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      transition-duration: 200ms;\n      transition-property: opacity;\n      width: $context-menu-button-size;\n\n      &:-moz-any(:active, :focus, :hover) {\n        fill: $grey-90;\n        opacity: 1;\n      }\n    }\n\n    .context-menu {\n      top: 16px;\n    }\n\n    @media (max-width: $break-point-widest + $card-width * 1.5) {\n      @include context-menu-open-left;\n    }\n  }\n\n  &:hover,\n  &.active {\n    .section-top-bar {\n      .context-menu-button {\n        opacity: 1;\n      }\n    }\n  }\n\n  &.active {\n    background: var(--newtab-element-hover-color);\n    border-radius: 4px;\n\n    .section-top-bar {\n      .context-menu-button {\n        fill: var(--newtab-section-active-contextmenu-color);\n      }\n    }\n  }\n\n  .section-disclaimer {\n    $max-button-width: 130px;\n    $min-button-height: 26px;\n\n    color: var(--newtab-text-conditional-color);\n    font-size: 13px;\n    margin-bottom: 26px;\n    position: relative;\n    display: flex;\n\n    .section-disclaimer-text {\n      display: inline-block;\n      width: calc(100% - #{$max-button-width});\n\n      @media (max-width: $break-point-medium) {\n        width: $card-width;\n      }\n    }\n\n    a {\n      color: var(--newtab-link-primary-color);\n      font-weight: bold;\n      padding-left: 3px;\n    }\n\n    button {\n      background: var(--newtab-button-secondary-color);\n      border: 1px solid $grey-40;\n      border-radius: 4px;\n      cursor: pointer;\n      max-width: $max-button-width;\n      min-height: $min-button-height;\n      inset-inline-end: 0;\n      align-self: center;\n\n      &:hover:not(.dismiss) {\n        box-shadow: $shadow-primary;\n        transition: box-shadow 150ms;\n      }\n\n      @media (min-width: $break-point-small) {\n        position: absolute;\n      }\n    }\n  }\n\n  .section-body-fallback {\n    height: $card-height;\n  }\n\n  .section-body {\n    // This is so the top sites favicon and card dropshadows don't get clipped during animation:\n    $horizontal-padding: 7px;\n    margin: 0 (-$horizontal-padding);\n    padding: 0 $horizontal-padding;\n\n    &.animating {\n      overflow: hidden;\n      pointer-events: none;\n    }\n  }\n\n  &.animation-enabled {\n    .section-title {\n      .collapsible-arrow {\n        transition: transform 0.5s $photon-easing;\n      }\n    }\n\n    .section-body {\n      transition: max-height 0.5s $photon-easing;\n    }\n  }\n\n  &.collapsed {\n    .section-body {\n      max-height: 0;\n      overflow: hidden;\n    }\n  }\n}\n",
 		"\n.asrouter-admin {\n  $border-color: var(--newtab-border-secondary-color);\n  $monospace: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', monospace;\n  max-width: 996px;\n  margin: 0 auto;\n  font-size: 14px;\n  // Reset .outer-wrapper styles\n  display: inherit;\n  padding: 0 0 92px;\n\n  h1 {\n    font-weight: 200;\n    font-size: 32px;\n  }\n\n  table {\n    border-collapse: collapse;\n    width: 100%;\n  }\n\n  .message-item {\n    &:first-child td {\n      border-top: 1px solid $border-color;\n    }\n\n    td {\n      vertical-align: top;\n      border-bottom: 1px solid $border-color;\n      padding: 8px;\n\n      &:first-child {\n        border-left: 1px solid $border-color;\n      }\n\n      &:last-child {\n        border-right: 1px solid $border-color;\n      }\n    }\n\n    &.current {\n      .message-id span {\n        background: $yellow-50;\n        padding: 2px 5px;\n\n        [lwt-newtab-brighttext] & {\n          color: $black;\n        }\n      }\n    }\n\n    &.blocked {\n      .message-id,\n      .message-summary {\n        opacity: 0.5;\n      }\n\n      .message-id {\n        opacity: 0.5;\n      }\n    }\n\n    .message-id {\n      font-family: $monospace;\n      font-size: 12px;\n    }\n  }\n\n  pre {\n    background: var(--newtab-textbox-background-color);\n    margin: 0;\n    padding: 8px;\n    font-size: 12px;\n    max-width: 750px;\n    overflow: auto;\n    font-family: $monospace;\n  }\n}\n",
 		".ASRouterButton {\n  white-space: nowrap;\n  border-radius: 4px;\n  border: 1px solid var(--newtab-border-secondary-color);\n  background-color: var(--newtab-button-secondary-color);\n  font-family: inherit;\n  padding: 8px 15px;\n  margin-inline-start: 12px;\n  color: inherit;\n\n  .tall & {\n    margin-inline-start: 20px;\n  }\n}\n",
 		".SnippetBaseContainer {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background-color: var(--newtab-snippets-background-color);\n  color: var(--newtab-text-primary-color);\n  font-size: 12px;\n  line-height: 16px;\n  border-top: 1px solid var(--newtab-snippets-hairline-color);\n  box-shadow: $shadow-secondary;\n  display: flex;\n  align-items: center;\n\n  .innerWrapper {\n    margin: 0 auto;\n    display: flex;\n    align-items: center;\n    padding: 12px $section-horizontal-padding;\n\n    // This is to account for the block button on smaller screens\n    padding-inline-end: 36px;\n    @media (min-width: $break-point-large) {\n      padding-inline-end: $section-horizontal-padding;\n    }\n\n    max-width: $wrapper-max-width-large;\n    @media (min-width: $break-point-widest) {\n      max-width: $wrapper-max-width-widest;\n    }\n  }\n\n  .blockButton {\n    display: none;\n    background: none;\n    border: 0;\n    position: absolute;\n    top: 50%;\n    inset-inline-end: 12px;\n    height: 16px;\n    width: 16px;\n    background-image: url('resource://activity-stream/data/content/assets/glyph-dismiss-16.svg');\n    -moz-context-properties: fill;\n    fill: var(--newtab-icon-primary-color);\n    opacity: 0.5;\n    margin-top: -8px;\n    padding: 0;\n    cursor: pointer;\n\n    @media (min-width: 766px) {\n      inset-inline-end: 24px;\n    }\n  }\n\n  &:hover .blockButton {\n    display: block;\n  }\n}\n",
 		".activity-stream {\n  &.modal-open {\n    overflow: hidden;\n  }\n}\n\n.modalOverlayOuter {\n  background: $white;\n  opacity: 0.93;\n  height: 100%;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  display: none;\n  z-index: 1100;\n\n  &.active {\n    display: block;\n  }\n}\n\n.modalOverlayInner {\n  width: 960px;\n  height: 510px;\n  position: fixed;\n  top: calc(50% - 255px); // halfway down minus half the height of the modal\n  left: calc(50% - 480px); // halfway across minus half the width of the modal\n  background: $white;\n  box-shadow: 0 1px 15px 0 $black-30;\n  border-radius: 4px;\n  display: none;\n  z-index: 1101;\n\n\n  // modal takes over entire screen\n  @media(max-width: 960px) {\n    width: 100%;\n    height: 100%;\n    top: 0;\n    left: 0;\n    box-shadow: none;\n    border-radius: 0;\n  }\n\n  // if modal is short enough, add a vertical scroll bar\n  @media(max-width: 850px) and (max-height: 730px) {\n    overflow-y: scroll;\n  }\n\n  // if modal is narrow enough, add a vertical scroll bar\n  @media(max-width: 650px) and (max-height: 600px) {\n    overflow-y: scroll;\n  }\n\n  &.active {\n    display: block;\n  }\n\n  h2 {\n    color: $grey-60;\n    text-align: center;\n    font-weight: 200;\n    margin-top: 30px;\n    font-size: 28px;\n    line-height: 37px;\n    letter-spacing: -0.13px;\n\n    @media(max-width: 960px) {\n      margin-top: 100px;\n    }\n\n    @media(max-width: 850px) {\n      margin-top: 30px;\n    }\n  }\n\n  .footer {\n    border-top: 1px solid $grey-30;\n    height: 70px;\n    width: 100%;\n    position: absolute;\n    bottom: 0;\n    text-align: center;\n    background-color: $white;\n\n    // if modal is short enough, footer becomes sticky\n    @media(max-width: 850px) and (max-height: 730px) {\n      position: sticky;\n    }\n\n    // if modal is narrow enough, footer becomes sticky\n    @media(max-width: 650px) and (max-height: 600px) {\n      position: sticky;\n    }\n\n    .modalButton {\n      margin-top: 20px;\n      width: 150px;\n      height: 30px;\n      padding: 4px 0 6px;\n      font-size: 15px;\n    }\n  }\n}\n",
 		".SimpleSnippet {\n  &.tall {\n    padding: 27px 0;\n  }\n\n  .title {\n    display: inline;\n    font-size: inherit;\n    margin: 0;\n  }\n\n  .titleIcon {\n    background-repeat: no-repeat;\n    background-size: 14px;\n    height: 16px;\n    width: 16px;\n    margin-top: 2px;\n    margin-inline-end: 2px;\n    display: inline-block;\n    vertical-align: top;\n  }\n\n  .body {\n    display: inline;\n    margin: 0;\n  }\n\n  .icon {\n    height: 42px;\n    width: 42px;\n    margin-inline-end: 12px;\n    flex-shrink: 0;\n  }\n\n  &.tall .icon {\n    margin-inline-end: 20px;\n  }\n\n  .ASRouterAnchor {\n    color: inherit;\n    text-decoration: underline;\n  }\n}\n",
 		".onboardingMessageContainer {\n  display: grid;\n  grid-column-gap: 21px;\n  grid-template-columns: auto auto auto;\n  padding-left: 30px;\n  padding-right: 30px;\n\n  // at 850px, the cards go from vertical layout to horizontal layout\n  @media(max-width: 850px) {\n    grid-template-columns: none;\n    grid-template-rows: auto auto auto;\n    padding-left: 110px;\n    padding-right: 110px;\n  }\n}\n\n.onboardingMessage {\n  height: 340px;\n  text-align: center;\n  padding: 13px;\n  font-weight: 200;\n\n  // at 850px, img floats left, content floats right next to it\n  @media(max-width: 850px) {\n    height: 170px;\n    text-align: left;\n    padding: 10px;\n    border-bottom: 1px solid $grey-30;\n    display: flex;\n    margin-bottom: 11px;\n\n    &:last-child {\n      border: 0;\n    }\n\n    .onboardingContent {\n      padding-left: 10px;\n      height: 100%;\n\n      > span > h3 {\n        margin-top: 0;\n        margin-bottom: 4px;\n        font-weight: 400;\n      }\n\n      > span > p {\n        margin-top: 0;\n        line-height: 22px;\n        font-size: 15px;\n      }\n    }\n  }\n\n  @media(max-width: 650px) {\n    height: 250px;\n  }\n\n  .onboardingMessageImage {\n    height: 100px;\n    width: 120px;\n    background-size: 120px;\n    background-position: center center;\n    background-repeat: no-repeat;\n    display: inline-block;\n    vertical-align: middle;\n\n\n    @media(max-width: 850px) {\n      height: 75px;\n      min-width: 80px;\n      background-size: 80px;\n    }\n\n    &.addons {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-addons@2x.png');\n    }\n\n    &.privatebrowsing {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-privatebrowsing@2x.png');\n    }\n\n    &.screenshots {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-screenshots@2x.png');\n    }\n\n    &.gift {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-gift@2x.png');\n    }\n  }\n\n  .onboardingContent {\n    height: 175px;\n\n    > span > h3 {\n      color: $grey-90;\n      margin-bottom: 8px;\n      font-weight: 400;\n    }\n\n    > span > p {\n      color: $grey-60;\n      margin-top: 0;\n      height: 130px;\n      margin-bottom: 12px;\n      font-size: 15px;\n      line-height: 22px;\n\n      @media(max-width: 650px) {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  .onboardingButton {\n    background-color: $grey-90-10;\n    border: 0;\n    width: 150px;\n    height: 30px;\n    margin-bottom: 23px;\n    padding: 4px 0 6px;\n    font-size: 15px;\n\n    // at 850px, the button shimmies down and to the right\n    @media(max-width: 850px) {\n      float: right;\n      margin-top: -60px;\n      margin-right: -10px;\n    }\n\n    @media(max-width: 650px) {\n      float: none;\n      margin-top: 30px;\n    }\n  }\n\n\n  &::before {\n    content: '';\n    height: 220px;\n    width: 1px;\n    position: absolute;\n    background-color: $grey-30;\n    margin-top: 40px;\n    margin-left: 215px;\n\n    // at 850px, the line goes from vertical to horizontal\n    @media(max-width: 850px) {\n      content: none;\n    }\n  }\n\n  &:last-child::before {\n    content: none;\n  }\n}\n"
 	],
 	"names": [],
-	"mappings": "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"
+	"mappings": "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"
 }
\ No newline at end of file
--- a/browser/extensions/activity-stream/css/activity-stream-windows.css
+++ b/browser/extensions/activity-stream/css/activity-stream-windows.css
@@ -1606,38 +1606,38 @@ main {
   .collapsible-section.active {
     background: var(--newtab-element-hover-color);
     border-radius: 4px; }
     .collapsible-section.active .section-top-bar .context-menu-button {
       fill: var(--newtab-section-active-contextmenu-color); }
   .collapsible-section .section-disclaimer {
     color: var(--newtab-text-conditional-color);
     font-size: 13px;
-    margin-bottom: 16px;
-    position: relative; }
+    margin-bottom: 26px;
+    position: relative;
+    display: flex; }
     .collapsible-section .section-disclaimer .section-disclaimer-text {
       display: inline-block;
-      min-height: 26px;
       width: calc(100% - 130px); }
       @media (max-width: 610px) {
         .collapsible-section .section-disclaimer .section-disclaimer-text {
           width: 224px; } }
     .collapsible-section .section-disclaimer a {
       color: var(--newtab-link-primary-color);
       font-weight: bold;
       padding-left: 3px; }
     .collapsible-section .section-disclaimer button {
       background: var(--newtab-button-secondary-color);
       border: 1px solid #B1B1B3;
       border-radius: 4px;
       cursor: pointer;
-      margin-top: 2px;
       max-width: 130px;
       min-height: 26px;
-      inset-inline-end: 0; }
+      inset-inline-end: 0;
+      align-self: center; }
       .collapsible-section .section-disclaimer button:hover:not(.dismiss) {
         box-shadow: 0 0 0 5px var(--newtab-card-active-outline-color);
         transition: box-shadow 150ms; }
       @media (min-width: 482px) {
         .collapsible-section .section-disclaimer button {
           position: absolute; } }
   .collapsible-section .section-body-fallback {
     height: 266px; }
--- a/browser/extensions/activity-stream/css/activity-stream-windows.css.map
+++ b/browser/extensions/activity-stream/css/activity-stream-windows.css.map
@@ -40,19 +40,19 @@
 		".sections-list {\n  .section-list {\n    display: grid;\n    grid-gap: $base-gutter;\n    grid-template-columns: repeat(auto-fit, $card-width);\n    margin: 0;\n\n    @media (max-width: $break-point-medium) {\n      @include context-menu-open-left;\n    }\n\n    @media (min-width: $break-point-medium) and (max-width: $break-point-large) {\n      :nth-child(2n) {\n        @include context-menu-open-left;\n      }\n    }\n\n    @media (min-width: $break-point-large) and (max-width: $break-point-large + 2 * $card-width) {\n      :nth-child(3n) {\n        @include context-menu-open-left;\n      }\n    }\n\n    @media (min-width: $break-point-widest) and (max-width: $break-point-widest + 2 * $card-width) {\n      :nth-child(3n) {\n        @include context-menu-open-left;\n      }\n    }\n  }\n\n  .section-empty-state {\n    border: $border-secondary;\n    border-radius: $border-radius;\n    display: flex;\n    height: $card-height;\n    width: 100%;\n\n    .empty-state {\n      margin: auto;\n      max-width: 350px;\n\n      .empty-state-icon {\n        background-position: center;\n        background-repeat: no-repeat;\n        background-size: 50px 50px;\n        -moz-context-properties: fill;\n        display: block;\n        fill: var(--newtab-icon-secondary-color);\n        height: 50px;\n        margin: 0 auto;\n        width: 50px;\n      }\n\n      .empty-state-message {\n        color: var(--newtab-text-primary-color);\n        font-size: 13px;\n        margin-bottom: 0;\n        text-align: center;\n      }\n    }\n\n    @media (min-width: $break-point-widest) {\n      height: $card-height-large;\n    }\n  }\n}\n\n@media (min-width: $break-point-widest) {\n  .sections-list {\n    // Compact cards stay the same size but normal cards get bigger.\n    .normal-cards {\n      .section-list {\n        grid-template-columns: repeat(auto-fit, $card-width-large);\n      }\n    }\n  }\n}\n",
 		".activity-stream {\n  &.welcome {\n    overflow: hidden;\n  }\n\n  &:not(.welcome) {\n    .overlay-wrapper {\n      display: none;\n    }\n  }\n}\n\n.overlay-wrapper {\n  position: absolute;\n  top: 0;\n  width: 100vw;\n  height: 100vh;\n  z-index: 21000;\n  transition: opacity 0.4s;\n  opacity: 0;\n  overflow-x: auto;\n\n  &.show {\n    transition: none;\n    opacity: 1;\n\n    .firstrun-sign-in {\n      transition: opacity 1.5s, transform 1.5s;\n      transition-delay: 0.2s;\n      transform: translateY(-50%) scale(1);\n      opacity: 1;\n\n      @media screen and (max-width: 790px) {\n        float: none;\n        margin: auto;\n        top: 190px;\n        margin-bottom: 100px;\n      }\n    }\n\n    .firstrun-firefox-logo {\n      transition: opacity 2.3s;\n      opacity: 1;\n    }\n\n    .firstrun-title,\n    .firstrun-content,\n    .firstrun-link {\n      transition: transform 0.5s, opacity 0.8s;\n      transform: translateY(0);\n      opacity: 1;\n    }\n\n    .firstrun-title {\n      transition-delay: 0.2s;\n    }\n\n    .firstrun-content {\n      transition-delay: 0.4s;\n    }\n\n    .firstrun-link {\n      transition-delay: 0.6s;\n    }\n\n    .fxaccounts-container {\n      transition: none;\n      opacity: 1;\n    }\n  }\n}\n\n.background {\n  width: 100%;\n  height: 100%;\n  display: block;\n  background: url('#{$image-path}fox-tail.png') top -200px center no-repeat,\n  linear-gradient(to bottom, $blue-70 40%, #004EC2 60%, $blue-60 80%, #0080FF 90%, #00C7FF 100%) top center no-repeat,\n  $blue-70;\n  background-size: cover;\n  position: fixed;\n}\n\n.firstrun-sign-in {\n  transform: translateY(-50%) scale(0.8);\n  position: relative;\n  top: 50%;\n  width: 358px;\n  opacity: 0;\n  background-color: $white;\n  float: inline-end;\n  color: $grey-90;\n  text-align: center;\n  padding: 10px;\n\n  form {\n    position: relative;\n  }\n\n  .extra-links {\n    font-size: 12px;\n    max-width: 340px;\n    margin: 17px 50px;\n    color: #676F7E;\n    cursor: default;\n\n    a {\n      color: $grey-50;\n      cursor: pointer;\n      text-decoration: underline;\n    }\n\n    a:hover,\n    a:active,\n    a:focus {\n      color: $blue-50;\n    }\n  }\n\n  .email-input {\n    box-shadow: none;\n    margin: auto;\n    width: 244px;\n    display: block;\n    height: 40px;\n    padding-inline-start: 20px;\n    border: 1px solid $grey-50;\n    border-radius: 2px;\n    font-size: 16px;\n    transition: border-color 150ms, box-shadow 150ms;\n\n    &:hover {\n      border-color: $grey-90;\n    }\n\n    &:focus {\n      border-color: $blue-50;\n      box-shadow: 0 0 0 3px $email-input-focus;\n    }\n\n    &.invalid {\n      border-color: $red-60;\n    }\n\n    &.invalid:focus {\n      box-shadow: 0 0 0 3px $email-input-invalid;\n    }\n  }\n\n  .form-header {\n    font-size: 22px;\n    margin: 15px auto;\n  }\n\n  .form-header .sub-header {\n    font-size: 14px;\n    margin-top: 4px;\n    display: block;\n  }\n\n  button {\n    display: block;\n    cursor: pointer;\n    margin: 10px auto 0;\n  }\n\n  .continue-button {\n    font-size: 18px;\n    height: 43px;\n    width: 250px;\n    padding: 8px 0;\n    border: 0;\n    border-radius: 4px;\n    color: $white;\n    background-color: $blue-60;\n    transition: background-color 150ms;\n\n    &:not([disabled]):active,\n    &:not([disabled]):hover {\n      background: $blue-70;\n      border-color: $blue-80;\n    }\n  }\n\n  .skip-button {\n    font-size: 13px;\n    margin-top: 20px;\n    margin-bottom: 20px;\n    background-color: $grey-10;\n    color: $blue-50;\n    border: 1px solid $blue-50;\n    border-radius: 2px;\n    min-height: 24px;\n    padding: 5px 10px;\n    transition: background-color 150ms, color 150ms, border-color 150ms;\n\n    &[disabled] {\n      background-color: $grey-20;\n      border-color: $grey-40;\n      color: $grey-50;\n      cursor: default;\n      opacity: 0.5;\n    }\n\n    &:not([disabled]):hover {\n      background-color: $blue-50;\n      border-color: $blue-60;\n      color: $white;\n    }\n  }\n}\n\n.firstrun-left-divider {\n  position: relative;\n  float: inline-start;\n  clear: both;\n  width: 435px;\n\n  @media screen and (max-width: 825px) {\n    width: 400px;\n  }\n\n  @media screen and (max-width: 790px) {\n    margin: auto;\n    float: none;\n    width: 352px;\n    text-align: center;\n  }\n}\n\n.firstrun-content {\n  line-height: 1.5;\n  margin-bottom: 48px;\n  max-width: 352px;\n  background: url('#{$image-path}sync-devices.svg') bottom center no-repeat;\n  padding-bottom: 210px;\n}\n\n.firstrun-link {\n  color: $white;\n  display: block;\n  text-decoration: underline;\n\n  &:hover,\n  &:active,\n  &:focus {\n    color: $white;\n  }\n}\n\n.firstrun-title {\n  background: url('chrome://branding/content/about-logo.png') top left no-repeat;\n  background-size: 90px 90px;\n  margin: 40px 0 10px;\n  padding-top: 110px;\n\n  @media screen and (max-width: 790px) {\n    background: url('chrome://branding/content/about-logo.png') top center no-repeat;\n    background-size: 90px 90px;\n  }\n\n  &:dir(rtl) {\n    background-position: top right;\n  }\n}\n\n.fxaccounts-container {\n  position: absolute;\n  bottom: 0;\n  right: 0;\n  top: 0;\n  left: 0;\n  color: $white;\n  height: 515px;\n  margin: auto;\n  width: 819px;\n  z-index: 10;\n  transition: opacity 0.3s;\n  opacity: 0;\n\n  @media screen and (max-width: 825px) {\n    width: 784px;\n  }\n\n  @media screen and (max-width: 790px) {\n    width: auto;\n    height: 100%;\n  }\n}\n\n.firstrun-title,\n.firstrun-content,\n.firstrun-link {\n  opacity: 0;\n  transform: translateY(-5px);\n}\n\n.error {\n  display: none;\n}\n\n.error.active {\n  display: block;\n  padding: 5px 12px;\n  animation: fade-down 450ms;\n  font-size: 12px;\n  font-weight: 500;\n  color: $white;\n  background-color: $red-60;\n  position: absolute;\n  inset-inline-start: 50px;\n  top: -28px;\n  border-radius: 2px;\n\n  &::before {\n    inset-inline-start: 12px;\n    background: $red-60;\n    bottom: -8px;\n    content: '.';\n    height: 16px;\n    position: absolute;\n    text-indent: -999px;\n    transform: rotate(45deg);\n    white-space: nowrap;\n    width: 16px;\n    z-index: -1;\n  }\n}\n\n@keyframes fade-down {\n  0% {\n    opacity: 0;\n    transform: translateY(-15px);\n  }\n\n  100% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n",
 		".topic {\n  color: var(--newtab-section-navigation-text-color);\n  font-size: 12px;\n  line-height: 1.6;\n  margin-top: $topic-margin-top;\n\n  @media (min-width: $break-point-large) {\n    line-height: 16px;\n  }\n\n  ul {\n    margin: 0;\n    padding: 0;\n    @media (min-width: $break-point-large) {\n      display: inline;\n      padding-inline-start: 12px;\n    }\n  }\n\n\n  ul li {\n    display: inline-block;\n\n    &::after {\n      content: '•';\n      padding: 8px;\n    }\n\n    &:last-child::after {\n      content: none;\n    }\n  }\n\n  .topic-link {\n    color: var(--newtab-link-secondary-color);\n    font-weight: bold;\n  }\n\n  .topic-read-more {\n    color: var(--newtab-link-secondary-color);\n    font-weight: bold;\n\n    @media (min-width: $break-point-large) {\n      // This is floating to accomodate a very large number of topics and/or\n      // very long topic names due to l10n.\n      float: right;\n\n      &:dir(rtl) {\n        float: left;\n      }\n    }\n\n    &::after {\n      background: url('#{$image-path}topic-show-more-12.svg') no-repeat center center;\n      content: '';\n      -moz-context-properties: fill;\n      display: inline-block;\n      fill: var(--newtab-link-secondary-color);\n      height: 16px;\n      margin-inline-start: 5px;\n      vertical-align: top;\n      width: 12px;\n    }\n\n    &:dir(rtl)::after  {\n      transform: scaleX(-1);\n    }\n  }\n\n  // This is a clearfix to for the topics-read-more link which is floating and causes\n  // some jank when we set overflow:hidden for the animation.\n  &::after {\n    clear: both;\n    content: '';\n    display: table;\n  }\n}\n",
 		".search-wrapper {\n  $search-height: 35px;\n  $search-icon-size: 18px;\n  $search-icon-padding: 8px;\n  $search-icon-width: 2 * $search-icon-padding + $search-icon-size;\n  $search-input-left-label-width: 35px;\n  $search-button-width: 36px;\n  $glyph-forward: url('chrome://browser/skin/forward.svg');\n\n  cursor: default;\n  display: flex;\n  height: $search-height;\n  margin-bottom: $section-spacing;\n  position: relative;\n  width: 100%;\n\n  input {\n    background: var(--newtab-textbox-background-color) var(--newtab-search-icon) $search-icon-padding center / $search-icon-size no-repeat;\n    border: solid 1px var(--newtab-search-border-color);\n    box-shadow: $shadow-secondary, 0 0 0 1px $black-15;\n    font-size: 15px;\n    -moz-context-properties: fill;\n    fill: var(--newtab-search-icon-color);\n    padding: 0;\n    padding-inline-end: $search-button-width;\n    padding-inline-start: $search-icon-width;\n    width: 100%;\n\n    &:dir(rtl) {\n      background-position-x: right $search-icon-padding;\n    }\n  }\n\n  &:hover input {\n    box-shadow: $shadow-secondary, 0 0 0 1px $black-25;\n  }\n\n  &:active input,\n  input:focus {\n    border: $input-border-active;\n    box-shadow: var(--newtab-textbox-focus-boxshadow);\n  }\n\n  .search-button {\n    background: $glyph-forward no-repeat center center;\n    background-size: 16px 16px;\n    border: 0;\n    border-radius: 0 $border-radius $border-radius 0;\n    -moz-context-properties: fill;\n    fill: var(--newtab-search-icon-color);\n    height: 100%;\n    inset-inline-end: 0;\n    position: absolute;\n    width: $search-button-width;\n\n    &:focus,\n    &:hover {\n      background-color: $grey-90-10;\n      cursor: pointer;\n    }\n\n    &:active {\n      background-color: $grey-90-20;\n    }\n\n    &:dir(rtl) {\n      transform: scaleX(-1);\n    }\n  }\n}\n\n@at-root {\n  // Adjust the style of the contentSearchUI-generated table\n  .contentSearchSuggestionTable {\n    background-color: var(--newtab-search-dropdown-color);\n    border: 0;\n    box-shadow: $context-menu-shadow;\n    transform: translateY($textbox-shadow-size);\n\n    .contentSearchHeader {\n      background-color: var(--newtab-search-dropdown-header-color);\n      color: var(--newtab-text-secondary-color);\n    }\n\n    .contentSearchHeader,\n    .contentSearchSettingsButton {\n      border-color: var(--newtab-border-secondary-color);\n    }\n\n    .contentSearchSuggestionsList {\n      border: 0;\n    }\n\n    .contentSearchOneOffsTable {\n      background-color: var(--newtab-search-dropdown-header-color);\n      border-top: solid 1px var(--newtab-border-secondary-color);\n    }\n\n    .contentSearchSearchWithHeaderSearchText {\n      color: var(--newtab-text-primary-color);\n    }\n\n    .contentSearchSuggestionsContainer {\n      background-color: var(--newtab-search-dropdown-color);\n    }\n\n    .contentSearchSuggestionRow {\n      &.selected {\n        background: var(--newtab-element-hover-color);\n        color: var(--newtab-text-primary-color);\n\n        &:active {\n          background: var(--newtab-element-active-color);\n        }\n\n        .historyIcon {\n          fill: var(--newtab-icon-secondary-color);\n        }\n      }\n    }\n\n    .contentSearchOneOffsTable {\n      .contentSearchSuggestionsContainer {\n        background-color: var(--newtab-search-dropdown-header-color);\n      }\n    }\n\n    .contentSearchOneOffItem {\n      // Make the border slightly shorter by offsetting from the top and bottom\n      $border-offset: 18%;\n\n      background-image: none;\n      border-image: linear-gradient(transparent $border-offset, var(--newtab-border-secondary-color) $border-offset, var(--newtab-border-secondary-color) 100% - $border-offset, transparent 100% - $border-offset) 1;\n      border-inline-end: 1px solid;\n      position: relative;\n\n      &.selected {\n        background: var(--newtab-element-hover-color);\n      }\n\n      &:active {\n        background: var(--newtab-element-active-color);\n      }\n    }\n\n    .contentSearchSettingsButton {\n      &:hover {\n        background: var(--newtab-element-hover-color);\n        color: var(--newtab-text-primary-color);\n      }\n    }\n  }\n}\n",
 		".context-menu {\n  background: var(--newtab-contextmenu-background-color);\n  border-radius: $context-menu-border-radius;\n  box-shadow: $context-menu-shadow;\n  display: block;\n  font-size: $context-menu-font-size;\n  margin-inline-start: 5px;\n  inset-inline-start: 100%;\n  position: absolute;\n  top: ($context-menu-button-size / 4);\n  z-index: 10000;\n\n  > ul {\n    list-style: none;\n    margin: 0;\n    padding: $context-menu-outer-padding 0;\n\n    > li {\n      margin: 0;\n      width: 100%;\n\n      &.separator {\n        border-bottom: $border-secondary;\n        margin: $context-menu-outer-padding 0;\n      }\n\n      > a {\n        align-items: center;\n        color: inherit;\n        cursor: pointer;\n        display: flex;\n        line-height: 16px;\n        outline: none;\n        padding: $context-menu-item-padding;\n        white-space: nowrap;\n\n        &:-moz-any(:focus, :hover) {\n          background: var(--newtab-element-hover-color);\n        }\n\n        &:active {\n          background: var(--newtab-element-active-color);\n        }\n\n        &.disabled {\n          opacity: 0.4;\n          pointer-events: none;\n        }\n      }\n    }\n  }\n}\n",
 		".confirmation-dialog {\n  .modal {\n    box-shadow: 0 2px 2px 0 $black-10;\n    left: 50%;\n    margin-left: -200px;\n    position: fixed;\n    top: 20%;\n    width: 400px;\n  }\n\n  section {\n    margin: 0;\n  }\n\n  .modal-message {\n    display: flex;\n    padding: 16px;\n    padding-bottom: 0;\n\n    p {\n      margin: 0;\n      margin-bottom: 16px;\n    }\n  }\n\n  .actions {\n    border: 0;\n    display: flex;\n    flex-wrap: nowrap;\n    padding: 0 16px;\n\n    button {\n      margin-inline-end: 16px;\n      padding-inline-end: 18px;\n      padding-inline-start: 18px;\n      white-space: normal;\n      width: 50%;\n\n      &.done {\n        margin-inline-end: 0;\n        margin-inline-start: 0;\n      }\n    }\n  }\n\n  .icon {\n    margin-inline-end: 16px;\n  }\n}\n\n.modal-overlay {\n  background: var(--newtab-overlay-color);\n  height: 100%;\n  left: 0;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  z-index: 11001;\n}\n\n.modal {\n  background: var(--newtab-modal-color);\n  border: $border-secondary;\n  border-radius: 5px;\n  font-size: 15px;\n  z-index: 11002;\n}\n",
 		".card-outer {\n  @include context-menu-button;\n  background: var(--newtab-card-background-color);\n  border-radius: $border-radius;\n  display: inline-block;\n  height: $card-height;\n  margin-inline-end: $base-gutter;\n  position: relative;\n  width: 100%;\n\n  &.placeholder {\n    background: transparent;\n\n    .card {\n      box-shadow: inset $inner-box-shadow;\n    }\n\n    .card-preview-image-outer,\n    .card-context {\n      display: none;\n    }\n  }\n\n  .card {\n    border-radius: $border-radius;\n    box-shadow: var(--newtab-card-shadow);\n    height: 100%;\n  }\n\n  > a {\n    color: inherit;\n    display: block;\n    height: 100%;\n    outline: none;\n    position: absolute;\n    width: 100%;\n\n    &:-moz-any(.active, :focus) {\n      .card {\n        @include fade-in-card;\n      }\n\n      .card-title {\n        color: var(--newtab-link-primary-color);\n      }\n    }\n  }\n\n  &:-moz-any(:hover, :focus, .active):not(.placeholder) {\n    @include fade-in-card;\n    @include context-menu-button-hover;\n    outline: none;\n\n    .card-title {\n      color: var(--newtab-link-primary-color);\n    }\n\n    .alternate ~ .card-host-name {\n      display: none;\n    }\n\n    .card-host-name.alternate {\n      display: block;\n    }\n  }\n\n  .card-preview-image-outer {\n    background-color: $grey-30;\n    border-radius: $border-radius $border-radius 0 0;\n    height: $card-preview-image-height;\n    overflow: hidden;\n    position: relative;\n\n    [lwt-newtab-brighttext] & {\n      background-color: $grey-60;\n    }\n\n    &::after {\n      border-bottom: 1px solid var(--newtab-card-hairline-color);\n      bottom: 0;\n      content: '';\n      position: absolute;\n      width: 100%;\n    }\n\n    .card-preview-image {\n      background-position: center;\n      background-repeat: no-repeat;\n      background-size: cover;\n      height: 100%;\n      opacity: 0;\n      transition: opacity 1s $photon-easing;\n      width: 100%;\n\n      &.loaded {\n        opacity: 1;\n      }\n    }\n  }\n\n  .card-details {\n    padding: 15px 16px 12px;\n  }\n\n  .card-text {\n    max-height: 4 * $card-text-line-height + $card-title-margin;\n    overflow: hidden;\n\n    &.no-host-name,\n    &.no-context {\n      max-height: 5 * $card-text-line-height + $card-title-margin;\n    }\n\n    &.no-host-name.no-context {\n      max-height: 6 * $card-text-line-height + $card-title-margin;\n    }\n\n    &:not(.no-description) .card-title {\n      max-height: 3 * $card-text-line-height;\n      overflow: hidden;\n    }\n  }\n\n  .card-host-name {\n    color: var(--newtab-text-secondary-color);\n    font-size: 10px;\n    overflow: hidden;\n    padding-bottom: 4px;\n    text-overflow: ellipsis;\n    text-transform: uppercase;\n    white-space: nowrap;\n  }\n\n  .card-host-name.alternate { display: none; }\n\n  .card-title {\n    font-size: 14px;\n    font-weight: 600;\n    line-height: $card-text-line-height;\n    margin: 0 0 $card-title-margin;\n    word-wrap: break-word;\n  }\n\n  .card-description {\n    font-size: 12px;\n    line-height: $card-text-line-height;\n    margin: 0;\n    overflow: hidden;\n    word-wrap: break-word;\n  }\n\n  .card-context {\n    bottom: 0;\n    color: var(--newtab-text-secondary-color);\n    display: flex;\n    font-size: 11px;\n    inset-inline-start: 0;\n    padding: 9px 16px 9px 14px;\n    position: absolute;\n  }\n\n  .card-context-icon {\n    fill: var(--newtab-text-secondary-color);\n    height: 22px;\n    margin-inline-end: 6px;\n  }\n\n  .card-context-label {\n    flex-grow: 1;\n    line-height: 22px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n}\n\n.normal-cards {\n  .card-outer {\n    // Wide layout styles\n    @media (min-width: $break-point-widest) {\n      $line-height: 23px;\n      height: $card-height-large;\n\n      .card-preview-image-outer {\n        height: $card-preview-image-height-large;\n      }\n\n      .card-details {\n        padding: 13px 16px 12px;\n      }\n\n      .card-text {\n        max-height: 6 * $line-height + $card-title-margin;\n      }\n\n      .card-host-name {\n        font-size: 12px;\n        padding-bottom: 5px;\n      }\n\n      .card-title {\n        font-size: 17px;\n        line-height: $line-height;\n        margin-bottom: 0;\n      }\n\n      .card-text:not(.no-description) {\n        .card-title {\n          max-height: 3 * $line-height;\n        }\n      }\n\n      .card-description {\n        font-size: 15px;\n        line-height: $line-height;\n      }\n\n      .card-context {\n        bottom: 4px;\n        font-size: 14px;\n      }\n    }\n  }\n}\n\n.compact-cards {\n  $card-detail-vertical-spacing: 12px;\n  $card-title-font-size: 12px;\n\n  .card-outer {\n    height: $card-height-compact;\n\n    .card-preview-image-outer {\n      height: $card-preview-image-height-compact;\n    }\n\n    .card-details {\n      padding: $card-detail-vertical-spacing 16px;\n    }\n\n    .card-host-name {\n      line-height: 10px;\n    }\n\n    .card-text {\n      .card-title,\n      &:not(.no-description) .card-title {\n        font-size: $card-title-font-size;\n        line-height: $card-title-font-size + 1;\n        max-height: $card-title-font-size + 1;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n    }\n\n    .card-description {\n      display: none;\n    }\n\n    .card-context {\n      $icon-size: 16px;\n      $container-size: 32px;\n      background-color: var(--newtab-card-background-color);\n      border-radius: $container-size / 2;\n      clip-path: inset(-1px -1px $container-size - ($card-height-compact - $card-preview-image-height-compact - 2 * $card-detail-vertical-spacing));\n      height: $container-size;\n      width: $container-size;\n      padding: ($container-size - $icon-size) / 2;\n      top: $card-preview-image-height-compact - $icon-size;\n      inset-inline-end: 12px;\n      inset-inline-start: auto;\n\n      &::after {\n        border: 1px solid var(--newtab-card-hairline-color);\n        border-bottom: 0;\n        border-radius: ($container-size / 2) + 1 ($container-size / 2) + 1 0 0;\n        content: '';\n        position: absolute;\n        height: ($container-size + 2) / 2;\n        width: $container-size + 2;\n        top: -1px;\n        left: -1px;\n      }\n\n      .card-context-icon {\n        margin-inline-end: 0;\n        height: $icon-size;\n        width: $icon-size;\n\n        &.icon-bookmark-added {\n          fill: $bookmark-icon-fill;\n        }\n\n        &.icon-download {\n          fill: $download-icon-fill;\n        }\n\n        &.icon-pocket {\n          fill: $pocket-icon-fill;\n        }\n      }\n\n      .card-context-label {\n        display: none;\n      }\n    }\n  }\n\n  @media not all and (min-width: $break-point-widest) {\n    .hide-for-narrow {\n      display: none;\n    }\n  }\n}\n",
 		".manual-migration-container {\n  color: var(--newtab-text-conditional-color);\n  font-size: 13px;\n  line-height: 15px;\n  margin-bottom: $section-spacing;\n  text-align: center;\n\n  @media (min-width: $break-point-medium) {\n    display: flex;\n    justify-content: space-between;\n    text-align: left;\n  }\n\n  p {\n    margin: 0;\n    @media (min-width: $break-point-medium) {\n      align-self: center;\n      display: flex;\n      justify-content: space-between;\n    }\n  }\n\n  .icon {\n    display: none;\n    @media (min-width: $break-point-medium) {\n      align-self: center;\n      display: block;\n      fill: var(--newtab-icon-secondary-color);\n      margin-inline-end: 6px;\n    }\n  }\n}\n\n.manual-migration-actions {\n  border: 0;\n  display: block;\n  flex-wrap: nowrap;\n\n  @media (min-width: $break-point-medium) {\n    display: flex;\n    justify-content: space-between;\n    padding: 0;\n  }\n\n  button {\n    align-self: center;\n    height: 26px;\n    margin: 0;\n    margin-inline-start: 20px;\n    padding: 0 12px;\n  }\n}\n",
-		".collapsible-section {\n  padding: $section-vertical-padding $section-horizontal-padding;\n  transition-delay: 100ms;\n  transition-duration: 100ms;\n  transition-property: background-color;\n\n  .section-title {\n    font-size: $section-title-font-size;\n    font-weight: bold;\n    margin: 0;\n    text-transform: uppercase;\n\n    span {\n      color: var(--newtab-section-header-text-color);\n      display: inline-block;\n      fill: var(--newtab-section-header-text-color);\n      vertical-align: middle;\n    }\n\n    .click-target {\n      cursor: pointer;\n      vertical-align: top;\n      white-space: nowrap;\n    }\n\n    .collapsible-arrow {\n      margin-inline-start: 8px;\n      margin-top: -1px;\n    }\n  }\n\n  .section-top-bar {\n    height: 19px;\n    margin-bottom: 13px;\n    position: relative;\n\n    .context-menu-button {\n      background: url('chrome://browser/skin/page-action.svg') no-repeat right center;\n      border: 0;\n      cursor: pointer;\n      fill: var(--newtab-section-header-text-color);\n      height: 100%;\n      inset-inline-end: 0;\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      transition-duration: 200ms;\n      transition-property: opacity;\n      width: $context-menu-button-size;\n\n      &:-moz-any(:active, :focus, :hover) {\n        fill: $grey-90;\n        opacity: 1;\n      }\n    }\n\n    .context-menu {\n      top: 16px;\n    }\n\n    @media (max-width: $break-point-widest + $card-width * 1.5) {\n      @include context-menu-open-left;\n    }\n  }\n\n  &:hover,\n  &.active {\n    .section-top-bar {\n      .context-menu-button {\n        opacity: 1;\n      }\n    }\n  }\n\n  &.active {\n    background: var(--newtab-element-hover-color);\n    border-radius: 4px;\n\n    .section-top-bar {\n      .context-menu-button {\n        fill: var(--newtab-section-active-contextmenu-color);\n      }\n    }\n  }\n\n  .section-disclaimer {\n    $max-button-width: 130px;\n    $min-button-height: 26px;\n\n    color: var(--newtab-text-conditional-color);\n    font-size: 13px;\n    margin-bottom: 16px;\n    position: relative;\n\n    .section-disclaimer-text {\n      display: inline-block;\n      min-height: $min-button-height;\n      width: calc(100% - #{$max-button-width});\n\n      @media (max-width: $break-point-medium) {\n        width: $card-width;\n      }\n    }\n\n    a {\n      color: var(--newtab-link-primary-color);\n      font-weight: bold;\n      padding-left: 3px;\n    }\n\n    button {\n      background: var(--newtab-button-secondary-color);\n      border: 1px solid $grey-40;\n      border-radius: 4px;\n      cursor: pointer;\n      margin-top: 2px;\n      max-width: $max-button-width;\n      min-height: $min-button-height;\n      inset-inline-end: 0;\n\n      &:hover:not(.dismiss) {\n        box-shadow: $shadow-primary;\n        transition: box-shadow 150ms;\n      }\n\n      @media (min-width: $break-point-small) {\n        position: absolute;\n      }\n    }\n  }\n\n  .section-body-fallback {\n    height: $card-height;\n  }\n\n  .section-body {\n    // This is so the top sites favicon and card dropshadows don't get clipped during animation:\n    $horizontal-padding: 7px;\n    margin: 0 (-$horizontal-padding);\n    padding: 0 $horizontal-padding;\n\n    &.animating {\n      overflow: hidden;\n      pointer-events: none;\n    }\n  }\n\n  &.animation-enabled {\n    .section-title {\n      .collapsible-arrow {\n        transition: transform 0.5s $photon-easing;\n      }\n    }\n\n    .section-body {\n      transition: max-height 0.5s $photon-easing;\n    }\n  }\n\n  &.collapsed {\n    .section-body {\n      max-height: 0;\n      overflow: hidden;\n    }\n  }\n}\n",
+		".collapsible-section {\n  padding: $section-vertical-padding $section-horizontal-padding;\n  transition-delay: 100ms;\n  transition-duration: 100ms;\n  transition-property: background-color;\n\n  .section-title {\n    font-size: $section-title-font-size;\n    font-weight: bold;\n    margin: 0;\n    text-transform: uppercase;\n\n    span {\n      color: var(--newtab-section-header-text-color);\n      display: inline-block;\n      fill: var(--newtab-section-header-text-color);\n      vertical-align: middle;\n    }\n\n    .click-target {\n      cursor: pointer;\n      vertical-align: top;\n      white-space: nowrap;\n    }\n\n    .collapsible-arrow {\n      margin-inline-start: 8px;\n      margin-top: -1px;\n    }\n  }\n\n  .section-top-bar {\n    height: 19px;\n    margin-bottom: 13px;\n    position: relative;\n\n    .context-menu-button {\n      background: url('chrome://browser/skin/page-action.svg') no-repeat right center;\n      border: 0;\n      cursor: pointer;\n      fill: var(--newtab-section-header-text-color);\n      height: 100%;\n      inset-inline-end: 0;\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      transition-duration: 200ms;\n      transition-property: opacity;\n      width: $context-menu-button-size;\n\n      &:-moz-any(:active, :focus, :hover) {\n        fill: $grey-90;\n        opacity: 1;\n      }\n    }\n\n    .context-menu {\n      top: 16px;\n    }\n\n    @media (max-width: $break-point-widest + $card-width * 1.5) {\n      @include context-menu-open-left;\n    }\n  }\n\n  &:hover,\n  &.active {\n    .section-top-bar {\n      .context-menu-button {\n        opacity: 1;\n      }\n    }\n  }\n\n  &.active {\n    background: var(--newtab-element-hover-color);\n    border-radius: 4px;\n\n    .section-top-bar {\n      .context-menu-button {\n        fill: var(--newtab-section-active-contextmenu-color);\n      }\n    }\n  }\n\n  .section-disclaimer {\n    $max-button-width: 130px;\n    $min-button-height: 26px;\n\n    color: var(--newtab-text-conditional-color);\n    font-size: 13px;\n    margin-bottom: 26px;\n    position: relative;\n    display: flex;\n\n    .section-disclaimer-text {\n      display: inline-block;\n      width: calc(100% - #{$max-button-width});\n\n      @media (max-width: $break-point-medium) {\n        width: $card-width;\n      }\n    }\n\n    a {\n      color: var(--newtab-link-primary-color);\n      font-weight: bold;\n      padding-left: 3px;\n    }\n\n    button {\n      background: var(--newtab-button-secondary-color);\n      border: 1px solid $grey-40;\n      border-radius: 4px;\n      cursor: pointer;\n      max-width: $max-button-width;\n      min-height: $min-button-height;\n      inset-inline-end: 0;\n      align-self: center;\n\n      &:hover:not(.dismiss) {\n        box-shadow: $shadow-primary;\n        transition: box-shadow 150ms;\n      }\n\n      @media (min-width: $break-point-small) {\n        position: absolute;\n      }\n    }\n  }\n\n  .section-body-fallback {\n    height: $card-height;\n  }\n\n  .section-body {\n    // This is so the top sites favicon and card dropshadows don't get clipped during animation:\n    $horizontal-padding: 7px;\n    margin: 0 (-$horizontal-padding);\n    padding: 0 $horizontal-padding;\n\n    &.animating {\n      overflow: hidden;\n      pointer-events: none;\n    }\n  }\n\n  &.animation-enabled {\n    .section-title {\n      .collapsible-arrow {\n        transition: transform 0.5s $photon-easing;\n      }\n    }\n\n    .section-body {\n      transition: max-height 0.5s $photon-easing;\n    }\n  }\n\n  &.collapsed {\n    .section-body {\n      max-height: 0;\n      overflow: hidden;\n    }\n  }\n}\n",
 		"\n.asrouter-admin {\n  $border-color: var(--newtab-border-secondary-color);\n  $monospace: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', monospace;\n  max-width: 996px;\n  margin: 0 auto;\n  font-size: 14px;\n  // Reset .outer-wrapper styles\n  display: inherit;\n  padding: 0 0 92px;\n\n  h1 {\n    font-weight: 200;\n    font-size: 32px;\n  }\n\n  table {\n    border-collapse: collapse;\n    width: 100%;\n  }\n\n  .message-item {\n    &:first-child td {\n      border-top: 1px solid $border-color;\n    }\n\n    td {\n      vertical-align: top;\n      border-bottom: 1px solid $border-color;\n      padding: 8px;\n\n      &:first-child {\n        border-left: 1px solid $border-color;\n      }\n\n      &:last-child {\n        border-right: 1px solid $border-color;\n      }\n    }\n\n    &.current {\n      .message-id span {\n        background: $yellow-50;\n        padding: 2px 5px;\n\n        [lwt-newtab-brighttext] & {\n          color: $black;\n        }\n      }\n    }\n\n    &.blocked {\n      .message-id,\n      .message-summary {\n        opacity: 0.5;\n      }\n\n      .message-id {\n        opacity: 0.5;\n      }\n    }\n\n    .message-id {\n      font-family: $monospace;\n      font-size: 12px;\n    }\n  }\n\n  pre {\n    background: var(--newtab-textbox-background-color);\n    margin: 0;\n    padding: 8px;\n    font-size: 12px;\n    max-width: 750px;\n    overflow: auto;\n    font-family: $monospace;\n  }\n}\n",
 		".ASRouterButton {\n  white-space: nowrap;\n  border-radius: 4px;\n  border: 1px solid var(--newtab-border-secondary-color);\n  background-color: var(--newtab-button-secondary-color);\n  font-family: inherit;\n  padding: 8px 15px;\n  margin-inline-start: 12px;\n  color: inherit;\n\n  .tall & {\n    margin-inline-start: 20px;\n  }\n}\n",
 		".SnippetBaseContainer {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background-color: var(--newtab-snippets-background-color);\n  color: var(--newtab-text-primary-color);\n  font-size: 12px;\n  line-height: 16px;\n  border-top: 1px solid var(--newtab-snippets-hairline-color);\n  box-shadow: $shadow-secondary;\n  display: flex;\n  align-items: center;\n\n  .innerWrapper {\n    margin: 0 auto;\n    display: flex;\n    align-items: center;\n    padding: 12px $section-horizontal-padding;\n\n    // This is to account for the block button on smaller screens\n    padding-inline-end: 36px;\n    @media (min-width: $break-point-large) {\n      padding-inline-end: $section-horizontal-padding;\n    }\n\n    max-width: $wrapper-max-width-large;\n    @media (min-width: $break-point-widest) {\n      max-width: $wrapper-max-width-widest;\n    }\n  }\n\n  .blockButton {\n    display: none;\n    background: none;\n    border: 0;\n    position: absolute;\n    top: 50%;\n    inset-inline-end: 12px;\n    height: 16px;\n    width: 16px;\n    background-image: url('resource://activity-stream/data/content/assets/glyph-dismiss-16.svg');\n    -moz-context-properties: fill;\n    fill: var(--newtab-icon-primary-color);\n    opacity: 0.5;\n    margin-top: -8px;\n    padding: 0;\n    cursor: pointer;\n\n    @media (min-width: 766px) {\n      inset-inline-end: 24px;\n    }\n  }\n\n  &:hover .blockButton {\n    display: block;\n  }\n}\n",
 		".activity-stream {\n  &.modal-open {\n    overflow: hidden;\n  }\n}\n\n.modalOverlayOuter {\n  background: $white;\n  opacity: 0.93;\n  height: 100%;\n  position: fixed;\n  top: 0;\n  width: 100%;\n  display: none;\n  z-index: 1100;\n\n  &.active {\n    display: block;\n  }\n}\n\n.modalOverlayInner {\n  width: 960px;\n  height: 510px;\n  position: fixed;\n  top: calc(50% - 255px); // halfway down minus half the height of the modal\n  left: calc(50% - 480px); // halfway across minus half the width of the modal\n  background: $white;\n  box-shadow: 0 1px 15px 0 $black-30;\n  border-radius: 4px;\n  display: none;\n  z-index: 1101;\n\n\n  // modal takes over entire screen\n  @media(max-width: 960px) {\n    width: 100%;\n    height: 100%;\n    top: 0;\n    left: 0;\n    box-shadow: none;\n    border-radius: 0;\n  }\n\n  // if modal is short enough, add a vertical scroll bar\n  @media(max-width: 850px) and (max-height: 730px) {\n    overflow-y: scroll;\n  }\n\n  // if modal is narrow enough, add a vertical scroll bar\n  @media(max-width: 650px) and (max-height: 600px) {\n    overflow-y: scroll;\n  }\n\n  &.active {\n    display: block;\n  }\n\n  h2 {\n    color: $grey-60;\n    text-align: center;\n    font-weight: 200;\n    margin-top: 30px;\n    font-size: 28px;\n    line-height: 37px;\n    letter-spacing: -0.13px;\n\n    @media(max-width: 960px) {\n      margin-top: 100px;\n    }\n\n    @media(max-width: 850px) {\n      margin-top: 30px;\n    }\n  }\n\n  .footer {\n    border-top: 1px solid $grey-30;\n    height: 70px;\n    width: 100%;\n    position: absolute;\n    bottom: 0;\n    text-align: center;\n    background-color: $white;\n\n    // if modal is short enough, footer becomes sticky\n    @media(max-width: 850px) and (max-height: 730px) {\n      position: sticky;\n    }\n\n    // if modal is narrow enough, footer becomes sticky\n    @media(max-width: 650px) and (max-height: 600px) {\n      position: sticky;\n    }\n\n    .modalButton {\n      margin-top: 20px;\n      width: 150px;\n      height: 30px;\n      padding: 4px 0 6px;\n      font-size: 15px;\n    }\n  }\n}\n",
 		".SimpleSnippet {\n  &.tall {\n    padding: 27px 0;\n  }\n\n  .title {\n    display: inline;\n    font-size: inherit;\n    margin: 0;\n  }\n\n  .titleIcon {\n    background-repeat: no-repeat;\n    background-size: 14px;\n    height: 16px;\n    width: 16px;\n    margin-top: 2px;\n    margin-inline-end: 2px;\n    display: inline-block;\n    vertical-align: top;\n  }\n\n  .body {\n    display: inline;\n    margin: 0;\n  }\n\n  .icon {\n    height: 42px;\n    width: 42px;\n    margin-inline-end: 12px;\n    flex-shrink: 0;\n  }\n\n  &.tall .icon {\n    margin-inline-end: 20px;\n  }\n\n  .ASRouterAnchor {\n    color: inherit;\n    text-decoration: underline;\n  }\n}\n",
 		".onboardingMessageContainer {\n  display: grid;\n  grid-column-gap: 21px;\n  grid-template-columns: auto auto auto;\n  padding-left: 30px;\n  padding-right: 30px;\n\n  // at 850px, the cards go from vertical layout to horizontal layout\n  @media(max-width: 850px) {\n    grid-template-columns: none;\n    grid-template-rows: auto auto auto;\n    padding-left: 110px;\n    padding-right: 110px;\n  }\n}\n\n.onboardingMessage {\n  height: 340px;\n  text-align: center;\n  padding: 13px;\n  font-weight: 200;\n\n  // at 850px, img floats left, content floats right next to it\n  @media(max-width: 850px) {\n    height: 170px;\n    text-align: left;\n    padding: 10px;\n    border-bottom: 1px solid $grey-30;\n    display: flex;\n    margin-bottom: 11px;\n\n    &:last-child {\n      border: 0;\n    }\n\n    .onboardingContent {\n      padding-left: 10px;\n      height: 100%;\n\n      > span > h3 {\n        margin-top: 0;\n        margin-bottom: 4px;\n        font-weight: 400;\n      }\n\n      > span > p {\n        margin-top: 0;\n        line-height: 22px;\n        font-size: 15px;\n      }\n    }\n  }\n\n  @media(max-width: 650px) {\n    height: 250px;\n  }\n\n  .onboardingMessageImage {\n    height: 100px;\n    width: 120px;\n    background-size: 120px;\n    background-position: center center;\n    background-repeat: no-repeat;\n    display: inline-block;\n    vertical-align: middle;\n\n\n    @media(max-width: 850px) {\n      height: 75px;\n      min-width: 80px;\n      background-size: 80px;\n    }\n\n    &.addons {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-addons@2x.png');\n    }\n\n    &.privatebrowsing {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-privatebrowsing@2x.png');\n    }\n\n    &.screenshots {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-screenshots@2x.png');\n    }\n\n    &.gift {\n      background-image: url('resource://activity-stream/data/content/assets/illustration-gift@2x.png');\n    }\n  }\n\n  .onboardingContent {\n    height: 175px;\n\n    > span > h3 {\n      color: $grey-90;\n      margin-bottom: 8px;\n      font-weight: 400;\n    }\n\n    > span > p {\n      color: $grey-60;\n      margin-top: 0;\n      height: 130px;\n      margin-bottom: 12px;\n      font-size: 15px;\n      line-height: 22px;\n\n      @media(max-width: 650px) {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  .onboardingButton {\n    background-color: $grey-90-10;\n    border: 0;\n    width: 150px;\n    height: 30px;\n    margin-bottom: 23px;\n    padding: 4px 0 6px;\n    font-size: 15px;\n\n    // at 850px, the button shimmies down and to the right\n    @media(max-width: 850px) {\n      float: right;\n      margin-top: -60px;\n      margin-right: -10px;\n    }\n\n    @media(max-width: 650px) {\n      float: none;\n      margin-top: 30px;\n    }\n  }\n\n\n  &::before {\n    content: '';\n    height: 220px;\n    width: 1px;\n    position: absolute;\n    background-color: $grey-30;\n    margin-top: 40px;\n    margin-left: 215px;\n\n    // at 850px, the line goes from vertical to horizontal\n    @media(max-width: 850px) {\n      content: none;\n    }\n  }\n\n  &:last-child::before {\n    content: none;\n  }\n}\n"
 	],
 	"names": [],
-	"mappings": "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"
+	"mappings": "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"
 }
\ No newline at end of file
--- a/browser/extensions/activity-stream/data/content/activity-stream.bundle.js
+++ b/browser/extensions/activity-stream/data/content/activity-stream.bundle.js
@@ -31,22 +31,42 @@
 /******/ 	__webpack_require__.m = modules;
 /******/
 /******/ 	// expose the module cache
 /******/ 	__webpack_require__.c = installedModules;
 /******/
 /******/ 	// define getter function for harmony exports
 /******/ 	__webpack_require__.d = function(exports, name, getter) {
 /******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, {
-/******/ 				configurable: false,
-/******/ 				enumerable: true,
-/******/ 				get: getter
-/******/ 			});
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
 /******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
 /******/ 	};
 /******/
 /******/ 	// getDefaultExport function for compatibility with non-harmony modules
 /******/ 	__webpack_require__.n = function(module) {
 /******/ 		var getter = module && module.__esModule ?
 /******/ 			function getDefault() { return module['default']; } :
 /******/ 			function getModuleExports() { return module; };
 /******/ 		__webpack_require__.d(getter, 'a', getter);
@@ -54,38 +74,115 @@
 /******/ 	};
 /******/
 /******/ 	// Object.prototype.hasOwnProperty.call
 /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
 /******/
 /******/ 	// __webpack_public_path__
 /******/ 	__webpack_require__.p = "";
 /******/
+/******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 23);
+/******/ 	return __webpack_require__(__webpack_require__.s = 0);
 /******/ })
 /************************************************************************/
 /******/ ([
 /* 0 */
-/***/ (function(module, exports) {
-
-module.exports = React;
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var content_src_lib_snippets__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3);
+/* harmony import */ var content_src_components_Base_Base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12);
+/* harmony import */ var content_src_lib_detect_user_session_start__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(37);
+/* harmony import */ var content_src_lib_init_store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(16);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(10);
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_7__);
+/* harmony import */ var common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(41);
+
+
+
+
+
+
+
+
+
+
+const store = Object(content_src_lib_init_store__WEBPACK_IMPORTED_MODULE_4__["initStore"])(common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_8__["reducers"], global.gActivityStreamPrerenderedState);
+
+new content_src_lib_detect_user_session_start__WEBPACK_IMPORTED_MODULE_3__["DetectUserSessionStart"](store).sendEventOrAddListener();
+
+// If we are starting in a prerendered state, we must wait until the first render
+// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,
+// we can request it immedately.
+if (!global.gActivityStreamPrerenderedState) {
+  store.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].NEW_TAB_STATE_REQUEST }));
+}
+
+react_dom__WEBPACK_IMPORTED_MODULE_7___default.a.hydrate(react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+  react_redux__WEBPACK_IMPORTED_MODULE_5__["Provider"],
+  { store: store },
+  react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(content_src_components_Base_Base__WEBPACK_IMPORTED_MODULE_2__["Base"], {
+    isFirstrun: global.document.location.href === "about:welcome",
+    isPrerendered: !!global.gActivityStreamPrerenderedState,
+    locale: global.document.documentElement.lang,
+    strings: global.gActivityStreamStrings })
+), document.getElementById("root"));
+
+Object(content_src_lib_snippets__WEBPACK_IMPORTED_MODULE_1__["addSnippetsSubscriber"])(store);
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
 
 /***/ }),
 /* 1 */
+/***/ (function(module, exports) {
+
+var g;
+
+// This works in non-strict mode
+g = (function() {
+	return this;
+})();
+
+try {
+	// This works if eval is allowed (see CSP)
+	g = g || Function("return this")() || (1, eval)("this");
+} catch (e) {
+	// This works if the window reference is available
+	if (typeof window === "object") g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
+
+
+/***/ }),
+/* 2 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* unused harmony export MAIN_MESSAGE_TYPE */
-/* unused harmony export CONTENT_MESSAGE_TYPE */
-/* unused harmony export PRELOAD_MESSAGE_TYPE */
-/* unused harmony export UI_CODE */
-/* unused harmony export BACKGROUND_PROCESS */
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return actionCreators; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return actionUtils; });
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MAIN_MESSAGE_TYPE", function() { return MAIN_MESSAGE_TYPE; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CONTENT_MESSAGE_TYPE", function() { return CONTENT_MESSAGE_TYPE; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PRELOAD_MESSAGE_TYPE", function() { return PRELOAD_MESSAGE_TYPE; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UI_CODE", function() { return UI_CODE; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BACKGROUND_PROCESS", function() { return BACKGROUND_PROCESS; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "globalImportContext", function() { return globalImportContext; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "actionTypes", function() { return actionTypes; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ASRouterActions", function() { return ASRouterActions; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "actionCreators", function() { return actionCreators; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "actionUtils", function() { return actionUtils; });
 /* 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/. */
 
 
 var MAIN_MESSAGE_TYPE = "ActivityStream:Main";
 var CONTENT_MESSAGE_TYPE = "ActivityStream:Content";
 var PRELOAD_MESSAGE_TYPE = "ActivityStream:PreloadedBrowser";
@@ -94,38 +191,32 @@ var BACKGROUND_PROCESS = 2;
 
 /**
  * globalImportContext - Are we in UI code (i.e. react, a dom) or some kind of background process?
  *                       Use this in action creators if you need different logic
  *                       for ui/background processes.
  */
 
 const globalImportContext = typeof Window === "undefined" ? BACKGROUND_PROCESS : UI_CODE;
-/* unused harmony export globalImportContext */
-
 // Export for tests
 
 // Create an object that avoids accidental differing key/value pairs:
 // {
 //   INIT: "INIT",
 //   UNINIT: "UNINIT"
 // }
 const actionTypes = {};
-/* harmony export (immutable) */ __webpack_exports__["c"] = actionTypes;
-
 
 for (const type of ["ADDONS_INFO_REQUEST", "ADDONS_INFO_RESPONSE", "ARCHIVE_FROM_POCKET", "AS_ROUTER_TELEMETRY_USER_EVENT", "BLOCK_URL", "BOOKMARK_URL", "COPY_DOWNLOAD_LINK", "DELETE_BOOKMARK_BY_ID", "DELETE_FROM_POCKET", "DELETE_HISTORY_URL", "DIALOG_CANCEL", "DIALOG_OPEN", "DISABLE_ONBOARDING", "DOWNLOAD_CHANGED", "INIT", "MIGRATION_CANCEL", "MIGRATION_COMPLETED", "MIGRATION_START", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_DOWNLOAD_FILE", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "OPEN_WEBEXT_SETTINGS", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_CHANGED", "PLACES_LINK_BLOCKED", "PLACES_LINK_DELETED", "PLACES_SAVED_TO_POCKET", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "PREVIEW_REQUEST", "PREVIEW_REQUEST_CANCEL", "PREVIEW_RESPONSE", "REMOVE_DOWNLOAD_FILE", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_MOVE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_DOWNLOAD_FILE", "SHOW_FIREFOX_ACCOUNTS", "SKIPPED_SIGNIN", "SNIPPETS_BLOCKLIST_CLEARED", "SNIPPETS_BLOCKLIST_UPDATED", "SNIPPETS_DATA", "SNIPPETS_RESET", "SNIPPET_BLOCKED", "SUBMIT_EMAIL", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "TELEMETRY_PERFORMANCE_EVENT", "TELEMETRY_UNDESIRED_EVENT", "TELEMETRY_USER_EVENT", "TOP_SITES_CANCEL_EDIT", "TOP_SITES_EDIT", "TOP_SITES_INSERT", "TOP_SITES_PIN", "TOP_SITES_PREFS_UPDATED", "TOP_SITES_UNPIN", "TOP_SITES_UPDATED", "TOTAL_BOOKMARKS_REQUEST", "TOTAL_BOOKMARKS_RESPONSE", "UNINIT", "UPDATE_SECTION_PREFS", "WEBEXT_CLICK", "WEBEXT_DISMISS"]) {
   actionTypes[type] = type;
 }
 
 // These are acceptable actions for AS Router messages to have. They can show up
 // as call-to-action buttons in snippets, onboarding tour, etc.
 const ASRouterActions = {};
-/* harmony export (immutable) */ __webpack_exports__["a"] = ASRouterActions;
-
 
 for (const type of ["OPEN_PRIVATE_BROWSER_WINDOW", "OPEN_URL", "OPEN_ABOUT_PAGE"]) {
   ASRouterActions[type] = type;
 }
 
 // Helper function for creating routed actions between content and main
 // Not intended to be used by consumers
 function _RouteMessage(action, options) {
@@ -377,540 +468,477 @@ var actionUtils = {
   },
   getPortIdOfSender(action) {
     return action.meta && action.meta.fromTarget || null;
   },
   _RouteMessage
 };
 
 /***/ }),
-/* 2 */
-/***/ (function(module, exports) {
-
-module.exports = ReactIntl;
-
-/***/ }),
 /* 3 */
-/***/ (function(module, exports) {
-
-var g;
-
-// This works in non-strict mode
-g = (function() {
-	return this;
-})();
-
-try {
-	// This works if eval is allowed (see CSP)
-	g = g || Function("return this")() || (1,eval)("this");
-} catch(e) {
-	// This works if the window reference is available
-	if(typeof window === "object")
-		g = window;
-}
-
-// g can still be undefined, but nothing to do about it...
-// We return undefined, instead of nothing here, so it's
-// easier to handle this case. if(!global) { ...}
-
-module.exports = g;
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports) {
-
-module.exports = ReactRedux;
-
-/***/ }),
-/* 5 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony export (immutable) */ __webpack_exports__["a"] = safeURI;
-function safeURI(url) {
-  if (!url) {
-    return "";
-  }
-  const { protocol } = new URL(url);
-  const isAllowed = ["http:", "https:", "data:", "resource:", "chrome:"].includes(protocol);
-  if (!isAllowed) {
-    console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console
-  }
-  return isAllowed ? url : "";
-}
-
-/***/ }),
-/* 6 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-const TOP_SITES_SOURCE = "TOP_SITES";
-/* harmony export (immutable) */ __webpack_exports__["d"] = TOP_SITES_SOURCE;
-
-const TOP_SITES_CONTEXT_MENU_OPTIONS = ["CheckPinTopSite", "EditTopSite", "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl", "DeleteUrl"];
-/* harmony export (immutable) */ __webpack_exports__["c"] = TOP_SITES_CONTEXT_MENU_OPTIONS;
-
-// minimum size necessary to show a rich icon instead of a screenshot
-const MIN_RICH_FAVICON_SIZE = 96;
-/* harmony export (immutable) */ __webpack_exports__["b"] = MIN_RICH_FAVICON_SIZE;
-
-// minimum size necessary to show any icon in the top left corner with a screenshot
-const MIN_CORNER_FAVICON_SIZE = 16;
-/* harmony export (immutable) */ __webpack_exports__["a"] = MIN_CORNER_FAVICON_SIZE;
-
-
-/***/ }),
-/* 7 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-
-// EXTERNAL MODULE: ./common/Actions.jsm
-var Actions = __webpack_require__(1);
-
-// CONCATENATED MODULE: ./common/Dedupe.jsm
-class Dedupe {
-  constructor(createKey) {
-    this.createKey = createKey || this.defaultCreateKey;
-  }
-
-  defaultCreateKey(item) {
-    return item;
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SNIPPETS_UPDATE_INTERVAL_MS", function() { return SNIPPETS_UPDATE_INTERVAL_MS; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SnippetsMap", function() { return SnippetsMap; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SnippetsProvider", function() { return SnippetsProvider; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addSnippetsSubscriber", function() { return addSnippetsSubscriber; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var content_src_asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);
+function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
+
+const DATABASE_NAME = "snippets_db";
+const DATABASE_VERSION = 1;
+const SNIPPETS_OBJECTSTORE_NAME = "snippets";
+const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.
+
+const SNIPPETS_ENABLED_EVENT = "Snippets:Enabled";
+const SNIPPETS_DISABLED_EVENT = "Snippets:Disabled";
+
+
+
+
+/**
+ * SnippetsMap - A utility for cacheing values related to the snippet. It has
+ *               the same interface as a Map, but is optionally backed by
+ *               indexedDB for persistent storage.
+ *               Call .connect() to open a database connection and restore any
+ *               previously cached data, if necessary.
+ *
+ */
+class SnippetsMap extends Map {
+  constructor(dispatch) {
+    super();
+    this._db = null;
+    this._dispatch = dispatch;
+  }
+
+  set(key, value) {
+    super.set(key, value);
+    return this._dbTransaction(db => db.put(value, key));
+  }
+
+  delete(key) {
+    super.delete(key);
+    return this._dbTransaction(db => db.delete(key));
+  }
+
+  clear() {
+    super.clear();
+    this._dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SNIPPETS_BLOCKLIST_CLEARED }));
+    return this._dbTransaction(db => db.clear());
+  }
+
+  get blockList() {
+    return this.get("blockList") || [];
   }
 
   /**
-   * Dedupe any number of grouped elements favoring those from earlier groups.
+   * blockSnippetById - Blocks a snippet given an id
    *
-   * @param {Array} groups Contains an arbitrary number of arrays of elements.
-   * @returns {Array} A matching array of each provided group deduped.
+   * @param  {str|int} id   The id of the snippet
+   * @return {Promise}      Resolves when the id has been written to indexedDB,
+   *                        or immediately if the snippetMap is not connected
    */
-  group(...groups) {
-    const globalKeys = new Set();
-    const result = [];
-    for (const values of groups) {
-      const valueMap = new Map();
-      for (const value of values) {
-        const key = this.createKey(value);
-        if (!globalKeys.has(key) && !valueMap.has(key)) {
-          valueMap.set(key, value);
-        }
+  blockSnippetById(id) {
+    var _this = this;
+
+    return _asyncToGenerator(function* () {
+      if (!id) {
+        return;
+      }
+      const { blockList } = _this;
+      if (!blockList.includes(id)) {
+        blockList.push(id);
+        _this._dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SNIPPETS_BLOCKLIST_UPDATED, data: id }));
+        yield _this.set("blockList", blockList);
       }
-      result.push(valueMap);
-      valueMap.forEach((value, key) => globalKeys.add(key));
-    }
-    return result.map(m => Array.from(m.values()));
-  }
-}
-// CONCATENATED MODULE: ./common/Reducers.jsm
-/* unused harmony export insertPinned */
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return reducers; });
-/* 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/. */
-
-
-
-
-const TOP_SITES_DEFAULT_ROWS = 1;
-/* unused harmony export TOP_SITES_DEFAULT_ROWS */
-
-const TOP_SITES_MAX_SITES_PER_ROW = 8;
-/* harmony export (immutable) */ __webpack_exports__["a"] = TOP_SITES_MAX_SITES_PER_ROW;
-
-
-
-const dedupe = new Dedupe(site => site && site.url);
-
-const INITIAL_STATE = {
-  App: {
-    // Have we received real data from the app yet?
-    initialized: false,
-    // The version of the system-addon
-    version: null
-  },
-  Snippets: { initialized: false },
-  TopSites: {
-    // Have we received real data from history yet?
-    initialized: false,
-    // The history (and possibly default) links
-    rows: [],
-    // Used in content only to dispatch action to TopSiteForm.
-    editForm: null
-  },
-  Prefs: {
-    initialized: false,
-    values: {}
-  },
-  Dialog: {
-    visible: false,
-    data: {}
-  },
-  Sections: []
-};
-/* unused harmony export INITIAL_STATE */
-
-
-
-function App(prevState = INITIAL_STATE.App, action) {
-  switch (action.type) {
-    case Actions["c" /* actionTypes */].INIT:
-      return Object.assign({}, prevState, action.data || {}, { initialized: true });
-    default:
-      return prevState;
+    })();
+  }
+
+  disableOnboarding() {
+    this._dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].DISABLE_ONBOARDING }));
+  }
+
+  showFirefoxAccounts() {
+    this._dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SHOW_FIREFOX_ACCOUNTS }));
+  }
+
+  getTotalBookmarksCount() {
+    return new Promise(resolve => {
+      this._dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOTAL_BOOKMARKS_REQUEST }));
+      global.RPMAddMessageListener("ActivityStream:MainToContent", function onMessage({ data: action }) {
+        if (action.type === common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOTAL_BOOKMARKS_RESPONSE) {
+          resolve(action.data);
+          global.RPMRemoveMessageListener("ActivityStream:MainToContent", onMessage);
+        }
+      });
+    });
+  }
+
+  getAddonsInfo() {
+    return new Promise(resolve => {
+      this._dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].ADDONS_INFO_REQUEST }));
+      global.RPMAddMessageListener("ActivityStream:MainToContent", function onMessage({ data: action }) {
+        if (action.type === common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].ADDONS_INFO_RESPONSE) {
+          resolve(action.data);
+          global.RPMRemoveMessageListener("ActivityStream:MainToContent", onMessage);
+        }
+      });
+    });
+  }
+
+  /**
+   * connect - Attaches an indexedDB back-end to the Map so that any set values
+   *           are also cached in a store. It also restores any existing values
+   *           that are already stored in the indexedDB store.
+   *
+   * @return {type}  description
+   */
+  connect() {
+    var _this2 = this;
+
+    return _asyncToGenerator(function* () {
+      // Open the connection
+      const db = yield _this2._openDB();
+
+      // Restore any existing values
+      yield _this2._restoreFromDb(db);
+
+      // Attach a reference to the db
+      _this2._db = db;
+    })();
+  }
+
+  /**
+   * _dbTransaction - Returns a db transaction wrapped with the given modifier
+   *                  function as a Promise. If the db has not been connected,
+   *                  it resolves immediately.
+   *
+   * @param  {func} modifier A function to call with the transaction
+   * @return {obj}           A Promise that resolves when the transaction has
+   *                         completed or errored
+   */
+  _dbTransaction(modifier) {
+    if (!this._db) {
+      return Promise.resolve();
+    }
+    return new Promise((resolve, reject) => {
+      const transaction = modifier(this._db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite").objectStore(SNIPPETS_OBJECTSTORE_NAME));
+      transaction.onsuccess = event => resolve();
+
+      /* istanbul ignore next */
+      transaction.onerror = event => reject(transaction.error);
+    });
+  }
+
+  _openDB() {
+    return new Promise((resolve, reject) => {
+      const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);
+
+      /* istanbul ignore next */
+      openRequest.onerror = event => {
+        // Try to delete the old database so that we can start this process over
+        // next time.
+        indexedDB.deleteDatabase(DATABASE_NAME);
+        reject(event);
+      };
+
+      openRequest.onupgradeneeded = event => {
+        const db = event.target.result;
+        if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {
+          db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);
+        }
+      };
+
+      openRequest.onsuccess = event => {
+        let db = event.target.result;
+
+        /* istanbul ignore next */
+        db.onerror = err => console.error(err); // eslint-disable-line no-console
+        /* istanbul ignore next */
+        db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();
+
+        resolve(db);
+      };
+    });
+  }
+
+  _restoreFromDb(db) {
+    return new Promise((resolve, reject) => {
+      let cursorRequest;
+      try {
+        cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME).objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();
+      } catch (err) {
+        // istanbul ignore next
+        reject(err);
+        // istanbul ignore next
+        return;
+      }
+
+      /* istanbul ignore next */
+      cursorRequest.onerror = event => reject(event);
+
+      cursorRequest.onsuccess = event => {
+        let cursor = event.target.result;
+        // Populate the cache from the persistent storage.
+        if (cursor) {
+          if (cursor.value !== "blockList") {
+            this.set(cursor.key, cursor.value);
+          }
+          cursor.continue();
+        } else {
+          // We are done.
+          resolve();
+        }
+      };
+    });
   }
 }
 
 /**
- * insertPinned - Inserts pinned links in their specified slots
- *
- * @param {array} a list of links
- * @param {array} a list of pinned links
- * @return {array} resulting list of links with pinned links inserted
+ * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a
+ *                    remote location, or else default snippets if the remote
+ *                    snippets cannot be retrieved.
  */
-function insertPinned(links, pinned) {
-  // Remove any pinned links
-  const pinnedUrls = pinned.map(link => link && link.url);
-  let newLinks = links.filter(link => link ? !pinnedUrls.includes(link.url) : false);
-  newLinks = newLinks.map(link => {
-    if (link && link.isPinned) {
-      delete link.isPinned;
-      delete link.pinIndex;
-    }
-    return link;
-  });
-
-  // Then insert them in their specified location
-  pinned.forEach((val, index) => {
-    if (!val) {
-      return;
-    }
-    let link = Object.assign({}, val, { isPinned: true, pinIndex: index });
-    if (index > newLinks.length) {
-      newLinks[index] = link;
-    } else {
-      newLinks.splice(index, 0, link);
-    }
-  });
-
-  return newLinks;
-}
-
-
-function TopSites(prevState = INITIAL_STATE.TopSites, action) {
-  let hasMatch;
-  let newRows;
-  switch (action.type) {
-    case Actions["c" /* actionTypes */].TOP_SITES_UPDATED:
-      if (!action.data || !action.data.links) {
-        return prevState;
+class SnippetsProvider {
+  constructor(dispatch) {
+    // Initialize the Snippets Map and attaches it to a global so that
+    // the snippet payload can interact with it.
+    global.gSnippetsMap = new SnippetsMap(dispatch);
+    this._onAction = this._onAction.bind(this);
+  }
+
+  get snippetsMap() {
+    return global.gSnippetsMap;
+  }
+
+  _refreshSnippets() {
+    var _this3 = this;
+
+    return _asyncToGenerator(function* () {
+      // Check if the cached version of of the snippets in snippetsMap. If it's too
+      // old, blow away the entire snippetsMap.
+      const cachedVersion = _this3.snippetsMap.get("snippets-cached-version");
+
+      if (cachedVersion !== _this3.appData.version) {
+        _this3.snippetsMap.clear();
       }
-      return Object.assign({}, prevState, { initialized: true, rows: action.data.links }, action.data.pref ? { pref: action.data.pref } : {});
-    case Actions["c" /* actionTypes */].TOP_SITES_PREFS_UPDATED:
-      return Object.assign({}, prevState, { pref: action.data.pref });
-    case Actions["c" /* actionTypes */].TOP_SITES_EDIT:
-      return Object.assign({}, prevState, {
-        editForm: {
-          index: action.data.index,
-          previewResponse: null
+
+      // Has enough time passed for us to require an update?
+      const lastUpdate = _this3.snippetsMap.get("snippets-last-update");
+      const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;
+
+      if (needsUpdate && _this3.appData.snippetsURL) {
+        _this3.snippetsMap.set("snippets-last-update", Date.now());
+        try {
+          const response = yield fetch(_this3.appData.snippetsURL);
+          if (response.status === 200) {
+            const payload = yield response.text();
+
+            _this3.snippetsMap.set("snippets", payload);
+            _this3.snippetsMap.set("snippets-cached-version", _this3.appData.version);
+          }
+        } catch (e) {
+          console.error(e); // eslint-disable-line no-console
         }
-      });
-    case Actions["c" /* actionTypes */].TOP_SITES_CANCEL_EDIT:
-      return Object.assign({}, prevState, { editForm: null });
-    case Actions["c" /* actionTypes */].PREVIEW_RESPONSE:
-      if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {
-        return prevState;
       }
-      return Object.assign({}, prevState, {
-        editForm: {
-          index: prevState.editForm.index,
-          previewResponse: action.data.preview,
-          previewUrl: action.data.url
-        }
-      });
-    case Actions["c" /* actionTypes */].PREVIEW_REQUEST:
-      if (!prevState.editForm) {
-        return prevState;
-      }
-      return Object.assign({}, prevState, {
-        editForm: {
-          index: prevState.editForm.index,
-          previewResponse: null,
-          previewUrl: action.data.url
-        }
-      });
-    case Actions["c" /* actionTypes */].PREVIEW_REQUEST_CANCEL:
-      if (!prevState.editForm) {
-        return prevState;
-      }
-      return Object.assign({}, prevState, {
-        editForm: {
-          index: prevState.editForm.index,
-          previewResponse: null
-        }
-      });
-    case Actions["c" /* actionTypes */].SCREENSHOT_UPDATED:
-      newRows = prevState.rows.map(row => {
-        if (row && row.url === action.data.url) {
-          hasMatch = true;
-          return Object.assign({}, row, { screenshot: action.data.screenshot });
-        }
-        return row;
-      });
-      return hasMatch ? Object.assign({}, prevState, { rows: newRows }) : prevState;
-    case Actions["c" /* actionTypes */].PLACES_BOOKMARK_ADDED:
-      if (!action.data) {
-        return prevState;
-      }
-      newRows = prevState.rows.map(site => {
-        if (site && site.url === action.data.url) {
-          const { bookmarkGuid, bookmarkTitle, dateAdded } = action.data;
-          return Object.assign({}, site, { bookmarkGuid, bookmarkTitle, bookmarkDateCreated: dateAdded });
-        }
-        return site;
-      });
-      return Object.assign({}, prevState, { rows: newRows });
-    case Actions["c" /* actionTypes */].PLACES_BOOKMARK_REMOVED:
-      if (!action.data) {
-        return prevState;
-      }
-      newRows = prevState.rows.map(site => {
-        if (site && site.url === action.data.url) {
-          const newSite = Object.assign({}, site);
-          delete newSite.bookmarkGuid;
-          delete newSite.bookmarkTitle;
-          delete newSite.bookmarkDateCreated;
-          return newSite;
-        }
-        return site;
-      });
-      return Object.assign({}, prevState, { rows: newRows });
-    case Actions["c" /* actionTypes */].PLACES_LINK_DELETED:
-      if (!action.data) {
-        return prevState;
+    })();
+  }
+
+  _noSnippetFallback() {
+    // TODO
+  }
+
+  _forceOnboardingVisibility(shouldBeVisible) {
+    const onboardingEl = document.getElementById("onboarding-notification-bar");
+
+    if (onboardingEl) {
+      onboardingEl.style.display = shouldBeVisible ? "" : "none";
+    }
+  }
+
+  _showRemoteSnippets() {
+    const snippetsEl = document.getElementById(this.elementId);
+    const payload = this.snippetsMap.get("snippets");
+
+    if (!snippetsEl) {
+      throw new Error(`No element was found with id '${this.elementId}'.`);
+    }
+
+    // This could happen if fetching failed
+    if (!payload) {
+      throw new Error("No remote snippets were found in gSnippetsMap.");
+    }
+
+    if (typeof payload !== "string") {
+      throw new Error("Snippet payload was incorrectly formatted");
+    }
+
+    // Note that injecting snippets can throw if they're invalid XML.
+    // eslint-disable-next-line no-unsanitized/property
+    snippetsEl.innerHTML = payload;
+
+    // Scripts injected by innerHTML are inactive, so we have to relocate them
+    // through DOM manipulation to activate their contents.
+    for (const scriptEl of snippetsEl.getElementsByTagName("script")) {
+      const relocatedScript = document.createElement("script");
+      relocatedScript.text = scriptEl.text;
+      scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);
+    }
+  }
+
+  _onAction(msg) {
+    if (msg.data.type === common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SNIPPET_BLOCKED) {
+      if (!this.snippetsMap.blockList.includes(msg.data.data)) {
+        this.snippetsMap.set("blockList", this.snippetsMap.blockList.concat(msg.data.data));
+        document.getElementById("snippets-container").style.display = "none";
       }
-      newRows = prevState.rows.filter(site => action.data.url !== site.url);
-      return Object.assign({}, prevState, { rows: newRows });
-    default:
-      return prevState;
-  }
-}
-
-function Dialog(prevState = INITIAL_STATE.Dialog, action) {
-  switch (action.type) {
-    case Actions["c" /* actionTypes */].DIALOG_OPEN:
-      return Object.assign({}, prevState, { visible: true, data: action.data });
-    case Actions["c" /* actionTypes */].DIALOG_CANCEL:
-      return Object.assign({}, prevState, { visible: false });
-    case Actions["c" /* actionTypes */].DELETE_HISTORY_URL:
-      return Object.assign({}, INITIAL_STATE.Dialog);
-    default:
-      return prevState;
-  }
-}
-
-function Prefs(prevState = INITIAL_STATE.Prefs, action) {
-  let newValues;
-  switch (action.type) {
-    case Actions["c" /* actionTypes */].PREFS_INITIAL_VALUES:
-      return Object.assign({}, prevState, { initialized: true, values: action.data });
-    case Actions["c" /* actionTypes */].PREF_CHANGED:
-      newValues = Object.assign({}, prevState.values);
-      newValues[action.data.name] = action.data.value;
-      return Object.assign({}, prevState, { values: newValues });
-    default:
-      return prevState;
-  }
-}
-
-function Sections(prevState = INITIAL_STATE.Sections, action) {
-  let hasMatch;
-  let newState;
-  switch (action.type) {
-    case Actions["c" /* actionTypes */].SECTION_DEREGISTER:
-      return prevState.filter(section => section.id !== action.data);
-    case Actions["c" /* actionTypes */].SECTION_REGISTER:
-      // If section exists in prevState, update it
-      newState = prevState.map(section => {
-        if (section && section.id === action.data.id) {
-          hasMatch = true;
-          return Object.assign({}, section, action.data);
+    }
+  }
+
+  /**
+   * init - Fetch the snippet payload and show snippets
+   *
+   * @param  {obj} options
+   * @param  {str} options.appData.snippetsURL  The URL from which we fetch snippets
+   * @param  {int} options.appData.version  The current snippets version
+   * @param  {str} options.elementId  The id of the element in which to inject snippets
+   * @param  {bool} options.connect  Should gSnippetsMap connect to indexedDB?
+   */
+  init(options) {
+    var _this4 = this;
+
+    return _asyncToGenerator(function* () {
+      Object.assign(_this4, {
+        appData: {},
+        elementId: "snippets",
+        connect: true
+      }, options);
+
+      // Add listener so we know when snippets are blocked on other pages
+      if (global.RPMAddMessageListener) {
+        global.RPMAddMessageListener("ActivityStream:MainToContent", _this4._onAction);
+      }
+
+      // TODO: Requires enabling indexedDB on newtab
+      // Restore the snippets map from indexedDB
+      if (_this4.connect) {
+        try {
+          yield _this4.snippetsMap.connect();
+        } catch (e) {
+          console.error(e); // eslint-disable-line no-console
         }
-        return section;
-      });
-      // Otherwise, append it
-      if (!hasMatch) {
-        const initialized = !!(action.data.rows && action.data.rows.length > 0);
-        const section = Object.assign({ title: "", rows: [], enabled: false }, action.data, { initialized });
-        newState.push(section);
+      }
+
+      // Cache app data values so they can be accessible from gSnippetsMap
+      for (const key of Object.keys(_this4.appData)) {
+        if (key === "blockList") {
+          _this4.snippetsMap.set("blockList", _this4.appData[key]);
+        } else {
+          _this4.snippetsMap.set(`appData.${key}`, _this4.appData[key]);
+        }
       }
-      return newState;
-    case Actions["c" /* actionTypes */].SECTION_UPDATE:
-      newState = prevState.map(section => {
-        if (section && section.id === action.data.id) {
-          // If the action is updating rows, we should consider initialized to be true.
-          // This can be overridden if initialized is defined in the action.data
-          const initialized = action.data.rows ? { initialized: true } : {};
-
-          // Make sure pinned cards stay at their current position when rows are updated.
-          // Disabling a section (SECTION_UPDATE with empty rows) does not retain pinned cards.
-          if (action.data.rows && action.data.rows.length > 0 && section.rows.find(card => card.pinned)) {
-            const rows = Array.from(action.data.rows);
-            section.rows.forEach((card, index) => {
-              if (card.pinned) {
-                rows.splice(index, 0, card);
-              }
-            });
-            return Object.assign({}, section, initialized, Object.assign({}, action.data, { rows }));
-          }
-
-          return Object.assign({}, section, initialized, action.data);
-        }
-        return section;
-      });
-
-      if (!action.data.dedupeConfigurations) {
-        return newState;
+
+      // Refresh snippets, if enough time has passed.
+      yield _this4._refreshSnippets();
+
+      // Try showing remote snippets, falling back to defaults if necessary.
+      try {
+        _this4._showRemoteSnippets();
+      } catch (e) {
+        _this4._noSnippetFallback(e);
       }
 
-      action.data.dedupeConfigurations.forEach(dedupeConf => {
-        newState = newState.map(section => {
-          if (section.id === dedupeConf.id) {
-            const dedupedRows = dedupeConf.dedupeFrom.reduce((rows, dedupeSectionId) => {
-              const dedupeSection = newState.find(s => s.id === dedupeSectionId);
-              const [, newRows] = dedupe.group(dedupeSection.rows, rows);
-              return newRows;
-            }, section.rows);
-
-            return Object.assign({}, section, { rows: dedupedRows });
-          }
-
-          return section;
-        });
-      });
-
-      return newState;
-    case Actions["c" /* actionTypes */].SECTION_UPDATE_CARD:
-      return prevState.map(section => {
-        if (section && section.id === action.data.id && section.rows) {
-          const newRows = section.rows.map(card => {
-            if (card.url === action.data.url) {
-              return Object.assign({}, card, action.data.options);
-            }
-            return card;
-          });
-          return Object.assign({}, section, { rows: newRows });
-        }
-        return section;
-      });
-    case Actions["c" /* actionTypes */].PLACES_BOOKMARK_ADDED:
-      if (!action.data) {
-        return prevState;
-      }
-      return prevState.map(section => Object.assign({}, section, {
-        rows: section.rows.map(item => {
-          // find the item within the rows that is attempted to be bookmarked
-          if (item.url === action.data.url) {
-            const { bookmarkGuid, bookmarkTitle, dateAdded } = action.data;
-            return Object.assign({}, item, {
-              bookmarkGuid,
-              bookmarkTitle,
-              bookmarkDateCreated: dateAdded,
-              type: "bookmark"
-            });
-          }
-          return item;
-        })
-      }));
-    case Actions["c" /* actionTypes */].PLACES_SAVED_TO_POCKET:
-      if (!action.data) {
-        return prevState;
-      }
-      return prevState.map(section => Object.assign({}, section, {
-        rows: section.rows.map(item => {
-          if (item.url === action.data.url) {
-            return Object.assign({}, item, {
-              open_url: action.data.open_url,
-              pocket_id: action.data.pocket_id,
-              title: action.data.title,
-              type: "pocket"
-            });
-          }
-          return item;
-        })
-      }));
-    case Actions["c" /* actionTypes */].PLACES_BOOKMARK_REMOVED:
-      if (!action.data) {
-        return prevState;
-      }
-      return prevState.map(section => Object.assign({}, section, {
-        rows: section.rows.map(item => {
-          // find the bookmark within the rows that is attempted to be removed
-          if (item.url === action.data.url) {
-            const newSite = Object.assign({}, item);
-            delete newSite.bookmarkGuid;
-            delete newSite.bookmarkTitle;
-            delete newSite.bookmarkDateCreated;
-            if (!newSite.type || newSite.type === "bookmark") {
-              newSite.type = "history";
-            }
-            return newSite;
-          }
-          return item;
-        })
-      }));
-    case Actions["c" /* actionTypes */].PLACES_LINK_DELETED:
-    case Actions["c" /* actionTypes */].PLACES_LINK_BLOCKED:
-      if (!action.data) {
-        return prevState;
-      }
-      return prevState.map(section => Object.assign({}, section, { rows: section.rows.filter(site => site.url !== action.data.url) }));
-    case Actions["c" /* actionTypes */].DELETE_FROM_POCKET:
-    case Actions["c" /* actionTypes */].ARCHIVE_FROM_POCKET:
-      return prevState.map(section => Object.assign({}, section, { rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id) }));
-    default:
-      return prevState;
-  }
-}
-
-function Snippets(prevState = INITIAL_STATE.Snippets, action) {
-  switch (action.type) {
-    case Actions["c" /* actionTypes */].SNIPPETS_DATA:
-      return Object.assign({}, prevState, { initialized: true }, action.data);
-    case Actions["c" /* actionTypes */].SNIPPET_BLOCKED:
-      return Object.assign({}, prevState, { blockList: prevState.blockList.concat(action.data) });
-    case Actions["c" /* actionTypes */].SNIPPETS_BLOCKLIST_CLEARED:
-      return Object.assign({}, prevState, { blockList: [] });
-    case Actions["c" /* actionTypes */].SNIPPETS_RESET:
-      return INITIAL_STATE.Snippets;
-    default:
-      return prevState;
-  }
-}
-
-var reducers = { TopSites, App, Snippets, Prefs, Dialog, Sections };
+      window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));
+
+      _this4._forceOnboardingVisibility(true);
+      _this4.initialized = true;
+    })();
+  }
+
+  uninit() {
+    window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));
+    this._forceOnboardingVisibility(false);
+    if (global.RPMRemoveMessageListener) {
+      global.RPMRemoveMessageListener("ActivityStream:MainToContent", this._onAction);
+    }
+    this.initialized = false;
+  }
+}
+
+/**
+ * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes
+ *                         when the store has received the appropriate
+ *                         Snippet data.
+ *
+ * @param  {obj} store   The redux store
+ * @return {obj}         Returns the snippets instance, asrouterContent instance and unsubscribe function
+ */
+function addSnippetsSubscriber(store) {
+  const snippets = new SnippetsProvider(store.dispatch);
+  const asrouterContent = new content_src_asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_1__["ASRouterContent"]();
+
+  let initializing = false;
+
+  store.subscribe(_asyncToGenerator(function* () {
+    const state = store.getState();
+    const isASRouterEnabled = state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values.asrouterOnboardingCohort > 0;
+    // state.Prefs.values["feeds.snippets"]:  Should snippets be shown?
+    // state.Snippets.initialized             Is the snippets data initialized?
+    // snippets.initialized:                  Is SnippetsProvider currently initialised?
+    if (state.Prefs.values["feeds.snippets"] &&
+    // If the message center experiment is enabled, don't show snippets
+    !isASRouterEnabled && !state.Prefs.values.disableSnippets && state.Snippets.initialized && !snippets.initialized &&
+    // Don't call init multiple times
+    !initializing && location.href !== "about:welcome") {
+      initializing = true;
+      yield snippets.init({ appData: state.Snippets });
+      initializing = false;
+    } else if ((state.Prefs.values["feeds.snippets"] === false || state.Prefs.values.disableSnippets === true) && snippets.initialized) {
+      snippets.uninit();
+    }
+
+    // Turn on AS Router snippets if the experiment is enabled and the snippets pref is on;
+    // otherwise, turn it off.
+    if ((state.Prefs.values.asrouterExperimentEnabled || state.Prefs.values.asrouterOnboardingCohort > 0) && state.Prefs.values["feeds.snippets"] && !asrouterContent.initialized) {
+      asrouterContent.init();
+    } else if ((!state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values.asrouterOnboardingCohort === 0 || !state.Prefs.values["feeds.snippets"]) && asrouterContent.initialized) {
+      asrouterContent.uninit();
+    }
+  }));
+
+  // These values are returned for testing purposes
+  return { snippets, asrouterContent };
+}
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
 
 /***/ }),
-/* 8 */
+/* 4 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* unused harmony export convertLinks */
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_fluent_react__ = __webpack_require__(25);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_content_src_lib_init_store__ = __webpack_require__(11);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__components_ImpressionsWrapper_ImpressionsWrapper__ = __webpack_require__(27);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_fluent__ = __webpack_require__(10);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__templates_OnboardingMessage_OnboardingMessage__ = __webpack_require__(28);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_react__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_react_dom__ = __webpack_require__(12);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_react_dom__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__template_utils__ = __webpack_require__(5);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__templates_SimpleSnippet_SimpleSnippet__ = __webpack_require__(29);
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ASRouterUtils", function() { return ASRouterUtils; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertLinks", function() { return convertLinks; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ASRouterUISurface", function() { return ASRouterUISurface; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ASRouterContent", function() { return ASRouterContent; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var fluent_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39);
+/* harmony import */ var content_src_lib_init_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7);
+/* harmony import */ var _components_ImpressionsWrapper_ImpressionsWrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9);
+/* harmony import */ var fluent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(38);
+/* harmony import */ var _templates_OnboardingMessage_OnboardingMessage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(42);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(10);
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_7__);
+/* harmony import */ var _template_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(11);
+/* harmony import */ var _templates_SimpleSnippet_SimpleSnippet__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(40);
 var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
 
 
 
 
 
 
 
@@ -934,106 +962,104 @@ const ASRouterUtils = {
   },
   blockById(id) {
     ASRouterUtils.sendMessage({ type: "BLOCK_MESSAGE_BY_ID", data: { id } });
   },
   blockBundle(bundle) {
     ASRouterUtils.sendMessage({ type: "BLOCK_BUNDLE", data: { bundle } });
   },
   executeAction({ button_action, button_action_params }) {
-    if (button_action in __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["a" /* ASRouterActions */]) {
+    if (button_action in common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["ASRouterActions"]) {
       ASRouterUtils.sendMessage({ type: button_action, data: { button_action_params } });
     }
   },
   unblockById(id) {
     ASRouterUtils.sendMessage({ type: "UNBLOCK_MESSAGE_BY_ID", data: { id } });
   },
   unblockBundle(bundle) {
     ASRouterUtils.sendMessage({ type: "UNBLOCK_BUNDLE", data: { bundle } });
   },
   getNextMessage() {
     ASRouterUtils.sendMessage({ type: "GET_NEXT_MESSAGE" });
   },
   overrideMessage(id) {
     ASRouterUtils.sendMessage({ type: "OVERRIDE_MESSAGE", data: { id } });
   },
   sendTelemetry(ping) {
-    const payload = __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].ASRouterUserEvent(ping);
-    global.RPMSendAsyncMessage(__WEBPACK_IMPORTED_MODULE_2_content_src_lib_init_store__["a" /* OUTGOING_MESSAGE_NAME */], payload);
+    const payload = common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].ASRouterUserEvent(ping);
+    global.RPMSendAsyncMessage(content_src_lib_init_store__WEBPACK_IMPORTED_MODULE_2__["OUTGOING_MESSAGE_NAME"], payload);
   },
   getEndpoint() {
     if (window.location.href.includes("endpoint")) {
       const params = new URLSearchParams(window.location.href.slice(window.location.href.indexOf("endpoint")));
       try {
         const endpoint = new URL(params.get("endpoint"));
         return {
           url: endpoint.href,
           snippetId: params.get("snippetId")
         };
       } catch (e) {}
     }
 
     return null;
   }
 };
-/* harmony export (immutable) */ __webpack_exports__["b"] = ASRouterUtils;
-
 
 // Note: nextProps/prevProps refer to props passed to <ImpressionsWrapper />, not <ASRouterUISurface />
 function shouldSendImpressionOnUpdate(nextProps, prevProps) {
   return nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id);
 }
 
 function generateMessages(content) {
-  const cx = new __WEBPACK_IMPORTED_MODULE_4_fluent__["b" /* MessageContext */]("en-US");
+  const cx = new fluent__WEBPACK_IMPORTED_MODULE_4__["MessageContext"]("en-US");
   cx.addMessages(`RichTextSnippet = ${content}`);
   return [cx];
 }
 
 // Elements allowed in snippet content
 const ALLOWED_TAGS = {
-  b: __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("b", null),
-  i: __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("i", null),
-  u: __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("u", null),
-  strong: __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("strong", null),
-  em: __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("em", null),
-  br: __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("br", null)
+  b: react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("b", null),
+  i: react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("i", null),
+  u: react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("u", null),
+  strong: react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("strong", null),
+  em: react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("em", null),
+  br: react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("br", null)
 };
 
 /**
  * Transform an object (tag name: {url}) into (tag name: anchor) where the url
  * is used as href, in order to render links inside a Fluent.Localized component.
  */
 function convertLinks(links, sendClick) {
   if (links) {
     return Object.keys(links).reduce((acc, linkTag) => {
-      acc[linkTag] = __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("a", { href: Object(__WEBPACK_IMPORTED_MODULE_8__template_utils__["a" /* safeURI */])(links[linkTag].url), "data-metric": links[linkTag].metric, onClick: sendClick });
+      acc[linkTag] = react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("a", { href: Object(_template_utils__WEBPACK_IMPORTED_MODULE_8__["safeURI"])(links[linkTag].url), "data-metric": links[linkTag].metric, onClick: sendClick });
       return acc;
     }, {});
   }
 
   return null;
 }
 
 /**
  * Message wrapper used to sanitize markup and render HTML.
  */
 function RichText(props) {
-  return __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-    __WEBPACK_IMPORTED_MODULE_1_fluent_react__["b" /* Localized */],
+  return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+    fluent_react__WEBPACK_IMPORTED_MODULE_1__["Localized"],
     _extends({ id: "RichTextSnippet" }, ALLOWED_TAGS, convertLinks(props.links, props.sendClick)),
-    __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
+    react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
       "span",
       null,
       props.text
     )
   );
 }
 
-class ASRouterUISurface extends __WEBPACK_IMPORTED_MODULE_6_react___default.a.PureComponent {
+class ASRouterUISurface extends react__WEBPACK_IMPORTED_MODULE_6___default.a.PureComponent {
   constructor(props) {
     super(props);
     this.onMessageFromParent = this.onMessageFromParent.bind(this);
     this.sendClick = this.sendClick.bind(this);
     this.sendImpression = this.sendImpression.bind(this);
     this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);
     this.state = { message: {}, bundle: {} };
   }
@@ -1111,42 +1137,42 @@ class ASRouterUISurface extends __WEBPAC
     }
   }
 
   componentWillUnmount() {
     ASRouterUtils.removeListener(this.onMessageFromParent);
   }
 
   renderSnippets() {
-    return __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-      __WEBPACK_IMPORTED_MODULE_3__components_ImpressionsWrapper_ImpressionsWrapper__["a" /* ImpressionsWrapper */],
+    return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+      _components_ImpressionsWrapper_ImpressionsWrapper__WEBPACK_IMPORTED_MODULE_3__["ImpressionsWrapper"],
       {
         id: "NEWTAB_FOOTER_BAR",
         message: this.state.message,
         sendImpression: this.sendImpression,
         shouldSendImpressionOnUpdate: shouldSendImpressionOnUpdate
         // This helps with testing
         , document: this.props.document },
-      __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-        __WEBPACK_IMPORTED_MODULE_1_fluent_react__["a" /* LocalizationProvider */],
+      react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+        fluent_react__WEBPACK_IMPORTED_MODULE_1__["LocalizationProvider"],
         { messages: generateMessages(this.state.message.content.text) },
-        __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_9__templates_SimpleSnippet_SimpleSnippet__["a" /* SimpleSnippet */], _extends({}, this.state.message, {
-          richText: __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(RichText, { text: this.state.message.content.text,
+        react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(_templates_SimpleSnippet_SimpleSnippet__WEBPACK_IMPORTED_MODULE_9__["SimpleSnippet"], _extends({}, this.state.message, {
+          richText: react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(RichText, { text: this.state.message.content.text,
             links: this.state.message.content.links,
             sendClick: this.sendClick }),
           UISurface: "NEWTAB_FOOTER_BAR",
           getNextMessage: ASRouterUtils.getNextMessage,
           onBlock: this.onBlockById(this.state.message.id),
           sendUserActionTelemetry: this.sendUserActionTelemetry }))
       )
     );
   }
 
   renderOnboarding() {
-    return __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_5__templates_OnboardingMessage_OnboardingMessage__["a" /* OnboardingMessage */], _extends({}, this.state.bundle, {
+    return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(_templates_OnboardingMessage_OnboardingMessage__WEBPACK_IMPORTED_MODULE_5__["OnboardingMessage"], _extends({}, this.state.bundle, {
       UISurface: "NEWTAB_OVERLAY",
       onAction: ASRouterUtils.executeAction,
       onDoneButton: this.clearBundle(this.state.bundle.bundle),
       getNextMessage: ASRouterUtils.getNextMessage,
       sendUserActionTelemetry: this.sendUserActionTelemetry }));
   }
 
   render() {
@@ -1155,60 +1181,3688 @@ class ASRouterUISurface extends __WEBPAC
       return null;
     }
     if (bundle.template === "onboarding") {
       return this.renderOnboarding();
     }
     return this.renderSnippets();
   }
 }
-/* unused harmony export ASRouterUISurface */
-
 
 ASRouterUISurface.defaultProps = { document: global.document };
 
 class ASRouterContent {
   constructor() {
     this.initialized = false;
     this.containerElement = null;
   }
 
   _mount() {
     this.containerElement = global.document.getElementById("snippets-container");
-    __WEBPACK_IMPORTED_MODULE_7_react_dom___default.a.render(__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(ASRouterUISurface, null), this.containerElement);
+    react_dom__WEBPACK_IMPORTED_MODULE_7___default.a.render(react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(ASRouterUISurface, null), this.containerElement);
   }
 
   _unmount() {
-    __WEBPACK_IMPORTED_MODULE_7_react_dom___default.a.unmountComponentAtNode(this.containerElement);
+    react_dom__WEBPACK_IMPORTED_MODULE_7___default.a.unmountComponentAtNode(this.containerElement);
   }
 
   init() {
     this._mount();
     this.initialized = true;
   }
 
   uninit() {
     if (this.initialized) {
       this._unmount();
       this.initialized = false;
     }
   }
 }
-/* harmony export (immutable) */ __webpack_exports__["a"] = ASRouterContent;
-
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
 
 /***/ }),
-/* 9 */
+/* 5 */
+/***/ (function(module, exports) {
+
+module.exports = React;
+
+/***/ }),
+/* 6 */
 /***/ (function(module, exports) {
 
 module.exports = PropTypes;
 
 /***/ }),
+/* 7 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MERGE_STORE_ACTION", function() { return MERGE_STORE_ACTION; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OUTGOING_MESSAGE_NAME", function() { return OUTGOING_MESSAGE_NAME; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "INCOMING_MESSAGE_NAME", function() { return INCOMING_MESSAGE_NAME; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EARLY_QUEUED_ACTIONS", function() { return EARLY_QUEUED_ACTIONS; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rehydrationMiddleware", function() { return rehydrationMiddleware; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "queueEarlyMessageMiddleware", function() { return queueEarlyMessageMiddleware; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initStore", function() { return initStore; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8);
+/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(redux__WEBPACK_IMPORTED_MODULE_1__);
+/* eslint-env mozilla/frame-script */
+
+
+
+
+const MERGE_STORE_ACTION = "NEW_TAB_INITIAL_STATE";
+const OUTGOING_MESSAGE_NAME = "ActivityStream:ContentToMain";
+const INCOMING_MESSAGE_NAME = "ActivityStream:MainToContent";
+const EARLY_QUEUED_ACTIONS = [common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SAVE_SESSION_PERF_DATA, common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].PAGE_PRERENDERED];
+
+/**
+ * A higher-order function which returns a reducer that, on MERGE_STORE action,
+ * will return the action.data object merged into the previous state.
+ *
+ * For all other actions, it merely calls mainReducer.
+ *
+ * Because we want this to merge the entire state object, it's written as a
+ * higher order function which takes the main reducer (itself often a call to
+ * combineReducers) as a parameter.
+ *
+ * @param  {function} mainReducer reducer to call if action != MERGE_STORE_ACTION
+ * @return {function}             a reducer that, on MERGE_STORE_ACTION action,
+ *                                will return the action.data object merged
+ *                                into the previous state, and the result
+ *                                of calling mainReducer otherwise.
+ */
+function mergeStateReducer(mainReducer) {
+  return (prevState, action) => {
+    if (action.type === MERGE_STORE_ACTION) {
+      return Object.assign({}, prevState, action.data);
+    }
+
+    return mainReducer(prevState, action);
+  };
+}
+
+/**
+ * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary
+ */
+const messageMiddleware = store => next => action => {
+  const skipLocal = action.meta && action.meta.skipLocal;
+  if (common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionUtils"].isSendToMain(action)) {
+    RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);
+  }
+  if (!skipLocal) {
+    next(action);
+  }
+};
+
+const rehydrationMiddleware = store => next => action => {
+  if (store._didRehydrate) {
+    return next(action);
+  }
+
+  const isMergeStoreAction = action.type === MERGE_STORE_ACTION;
+  const isRehydrationRequest = action.type === common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].NEW_TAB_STATE_REQUEST;
+
+  if (isRehydrationRequest) {
+    store._didRequestInitialState = true;
+    return next(action);
+  }
+
+  if (isMergeStoreAction) {
+    store._didRehydrate = true;
+    return next(action);
+  }
+
+  // If init happened after our request was made, we need to re-request
+  if (store._didRequestInitialState && action.type === common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].INIT) {
+    return next(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].NEW_TAB_STATE_REQUEST }));
+  }
+
+  if (common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionUtils"].isBroadcastToContent(action) || common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionUtils"].isSendToOneContent(action) || common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionUtils"].isSendToPreloaded(action)) {
+    // Note that actions received before didRehydrate will not be dispatched
+    // because this could negatively affect preloading and the the state
+    // will be replaced by rehydration anyway.
+    return null;
+  }
+
+  return next(action);
+};
+
+/**
+ * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives
+ * the first action from main. This is useful for those actions for main which
+ * require higher reliability, i.e. the action will not be lost in the case
+ * that it gets sent before the main is ready to receive it. Conversely, any
+ * actions allowed early are accepted to be ignorable or re-sendable.
+ */
+const queueEarlyMessageMiddleware = store => next => action => {
+  if (store._receivedFromMain) {
+    next(action);
+  } else if (common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionUtils"].isFromMain(action)) {
+    next(action);
+    store._receivedFromMain = true;
+    // Sending out all the early actions as main is ready now
+    if (store._earlyActionQueue) {
+      store._earlyActionQueue.forEach(next);
+      store._earlyActionQueue = [];
+    }
+  } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {
+    store._earlyActionQueue = store._earlyActionQueue || [];
+    store._earlyActionQueue.push(action);
+  } else {
+    // Let any other type of action go through
+    next(action);
+  }
+};
+
+/**
+ * initStore - Create a store and listen for incoming actions
+ *
+ * @param  {object} reducers An object containing Redux reducers
+ * @param  {object} intialState (optional) The initial state of the store, if desired
+ * @return {object}          A redux store
+ */
+function initStore(reducers, initialState) {
+  const store = Object(redux__WEBPACK_IMPORTED_MODULE_1__["createStore"])(mergeStateReducer(Object(redux__WEBPACK_IMPORTED_MODULE_1__["combineReducers"])(reducers)), initialState, global.RPMAddMessageListener && Object(redux__WEBPACK_IMPORTED_MODULE_1__["applyMiddleware"])(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware));
+
+  store._didRehydrate = false;
+  store._didRequestInitialState = false;
+
+  if (global.RPMAddMessageListener) {
+    global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, msg => {
+      try {
+        store.dispatch(msg.data);
+      } catch (ex) {
+        console.error("Content msg:", msg, "Dispatch error: ", ex); // eslint-disable-line no-console
+        dump(`Content msg: ${JSON.stringify(msg)}\nDispatch error: ${ex}\n${ex.stack}`);
+      }
+    });
+  }
+
+  return store;
+}
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports) {
+
+module.exports = Redux;
+
+/***/ }),
+/* 9 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VISIBLE", function() { return VISIBLE; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VISIBILITY_CHANGE_EVENT", function() { return VISIBILITY_CHANGE_EVENT; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ImpressionsWrapper", function() { return ImpressionsWrapper; });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+
+const VISIBLE = "visible";
+const VISIBILITY_CHANGE_EVENT = "visibilitychange";
+
+/**
+ * Component wrapper used to send telemetry pings on every impression.
+ */
+class ImpressionsWrapper extends react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent {
+  // This sends an event when a user sees a set of new content. If content
+  // changes while the page is hidden (i.e. preloaded or on a hidden tab),
+  // only send the event if the page becomes visible again.
+  sendImpressionOrAddListener() {
+    if (this.props.document.visibilityState === VISIBLE) {
+      this.props.sendImpression({ id: this.props.id });
+    } else {
+      // We should only ever send the latest impression stats ping, so remove any
+      // older listeners.
+      if (this._onVisibilityChange) {
+        this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+      }
+
+      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.
+      this._onVisibilityChange = () => {
+        if (this.props.document.visibilityState === VISIBLE) {
+          this.props.sendImpression({ id: this.props.id });
+          this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+        }
+      };
+      this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+    }
+  }
+
+  componentWillUnmount() {
+    if (this._onVisibilityChange) {
+      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+    }
+  }
+
+  componentDidMount() {
+    if (this.props.sendOnMount) {
+      this.sendImpressionOrAddListener();
+    }
+  }
+
+  componentDidUpdate(prevProps) {
+    if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {
+      this.sendImpressionOrAddListener();
+    }
+  }
+
+  render() {
+    return this.props.children;
+  }
+}
+
+ImpressionsWrapper.defaultProps = {
+  document: global.document,
+  sendOnMount: true
+};
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
 /* 10 */
+/***/ (function(module, exports) {
+
+module.exports = ReactDOM;
+
+/***/ }),
+/* 11 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "safeURI", function() { return safeURI; });
+function safeURI(url) {
+  if (!url) {
+    return "";
+  }
+  const { protocol } = new URL(url);
+  const isAllowed = ["http:", "https:", "data:", "resource:", "chrome:"].includes(protocol);
+  if (!isAllowed) {
+    console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console
+  }
+  return isAllowed ? url : "";
+}
+
+/***/ }),
+/* 12 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_Base", function() { return _Base; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BaseContent", function() { return BaseContent; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Base", function() { return Base; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var content_src_components_ASRouterAdmin_ASRouterAdmin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14);
+/* harmony import */ var content_src_components_ConfirmDialog_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(15);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(16);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(17);
+/* harmony import */ var content_src_components_ManualMigration_ManualMigration__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(18);
+/* harmony import */ var common_PrerenderData_jsm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(19);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__);
+/* harmony import */ var content_src_components_Search_Search__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(20);
+/* harmony import */ var content_src_components_Sections_Sections__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(22);
+/* harmony import */ var content_src_components_StartupOverlay_StartupOverlay__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(36);
+
+
+
+
+
+
+
+
+
+
+
+
+
+const PrefsButton = Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["injectIntl"])(props => react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(
+  "div",
+  { className: "prefs-button" },
+  react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement("button", { className: "icon icon-settings", onClick: props.onClick, title: props.intl.formatMessage({ id: "settings_pane_button_label" }) })
+));
+
+// Add the locale data for pluralization and relative-time formatting for now,
+// this just uses english locale data. We can make this more sophisticated if
+// more features are needed.
+function addLocaleDataForReactIntl(locale) {
+  Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["addLocaleData"])([{ locale, parentLocale: "en" }]);
+}
+
+class _Base extends react__WEBPACK_IMPORTED_MODULE_8___default.a.PureComponent {
+  componentWillMount() {
+    const { App, locale } = this.props;
+    this.sendNewTabRehydrated(App);
+    addLocaleDataForReactIntl(locale);
+    if (this.props.isFirstrun) {
+      global.document.body.classList.add("welcome");
+    }
+  }
+
+  componentDidMount() {
+    // Request state AFTER the first render to ensure we don't cause the
+    // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is
+    // dispatched right after the store is ready.
+    if (this.props.isPrerendered) {
+      this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].NEW_TAB_STATE_REQUEST }));
+      this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].PAGE_PRERENDERED }));
+    }
+  }
+
+  componentWillUnmount() {
+    this.updateTheme();
+  }
+
+  componentWillUpdate({ App }) {
+    this.updateTheme();
+    this.sendNewTabRehydrated(App);
+  }
+
+  updateTheme() {
+    const bodyClassName = ["activity-stream",
+    // If we skipped the about:welcome overlay and removed the CSS class
+    // we don't want to add it back to the Activity Stream view
+    document.body.classList.contains("welcome") ? "welcome" : ""].filter(v => v).join(" ");
+    global.document.body.className = bodyClassName;
+  }
+
+  // The NEW_TAB_REHYDRATED event is used to inform feeds that their
+  // data has been consumed e.g. for counting the number of tabs that
+  // have rendered that data.
+  sendNewTabRehydrated(App) {
+    if (App && App.initialized && !this.renderNotified) {
+      this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].NEW_TAB_REHYDRATED, data: {} }));
+      this.renderNotified = true;
+    }
+  }
+
+  render() {
+    const { props } = this;
+    const { App, locale, strings } = props;
+    const { initialized } = App;
+
+    const prefs = props.Prefs.values;
+    if ((prefs.asrouterExperimentEnabled || prefs.asrouterOnboardingCohort > 0) && window.location.hash === "#asrouter") {
+      return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(content_src_components_ASRouterAdmin_ASRouterAdmin__WEBPACK_IMPORTED_MODULE_2__["ASRouterAdmin"], null);
+    }
+
+    if (!props.isPrerendered && !initialized) {
+      return null;
+    }
+
+    // Until we can delete the existing onboarding tour, just hide the onboarding button when users are in
+    // the new simplified onboarding experiment. CSS hacks ftw
+    if (prefs.asrouterOnboardingCohort > 0) {
+      global.document.body.classList.add("hide-onboarding");
+    }
+
+    return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(
+      react_intl__WEBPACK_IMPORTED_MODULE_1__["IntlProvider"],
+      { locale: locale, messages: strings },
+      react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(
+        content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_5__["ErrorBoundary"],
+        { className: "base-content-fallback" },
+        react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(BaseContent, this.props)
+      )
+    );
+  }
+}
+
+class BaseContent extends react__WEBPACK_IMPORTED_MODULE_8___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.openPreferences = this.openPreferences.bind(this);
+  }
+
+  openPreferences() {
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SETTINGS_OPEN }));
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({ event: "OPEN_NEWTAB_PREFS" }));
+  }
+
+  render() {
+    const { props } = this;
+    const { App } = props;
+    const { initialized } = App;
+    const prefs = props.Prefs.values;
+
+    const shouldBeFixedToTop = common_PrerenderData_jsm__WEBPACK_IMPORTED_MODULE_7__["PrerenderData"].arePrefsValid(name => prefs[name]);
+
+    const outerClassName = ["outer-wrapper", shouldBeFixedToTop && "fixed-to-top"].filter(v => v).join(" ");
+
+    return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(
+      "div",
+      null,
+      react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(
+        "div",
+        { className: outerClassName },
+        react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(
+          "main",
+          null,
+          prefs.showSearch && react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(
+            "div",
+            { className: "non-collapsible-section" },
+            react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(
+              content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_5__["ErrorBoundary"],
+              null,
+              react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(content_src_components_Search_Search__WEBPACK_IMPORTED_MODULE_9__["Search"], null)
+            )
+          ),
+          react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(
+            "div",
+            { className: `body-wrapper${initialized ? " on" : ""}` },
+            !prefs.migrationExpired && react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(
+              "div",
+              { className: "non-collapsible-section" },
+              react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(content_src_components_ManualMigration_ManualMigration__WEBPACK_IMPORTED_MODULE_6__["ManualMigration"], null)
+            ),
+            react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(content_src_components_Sections_Sections__WEBPACK_IMPORTED_MODULE_10__["Sections"], null),
+            react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(PrefsButton, { onClick: this.openPreferences })
+          ),
+          react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(content_src_components_ConfirmDialog_ConfirmDialog__WEBPACK_IMPORTED_MODULE_3__["ConfirmDialog"], null)
+        )
+      ),
+      this.props.isFirstrun && react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(content_src_components_StartupOverlay_StartupOverlay__WEBPACK_IMPORTED_MODULE_11__["StartupOverlay"], null)
+    );
+  }
+}
+
+const Base = Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(state => ({ App: state.App, Prefs: state.Prefs }))(_Base);
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports) {
+
+module.exports = ReactIntl;
+
+/***/ }),
+/* 14 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ASRouterAdmin", function() { return ASRouterAdmin; });
+/* harmony import */ var _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+class ASRouterAdmin extends react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.onMessage = this.onMessage.bind(this);
+    this.findOtherBundledMessagesOfSameTemplate = this.findOtherBundledMessagesOfSameTemplate.bind(this);
+    this.state = {};
+  }
+
+  onMessage({ data: action }) {
+    if (action.type === "ADMIN_SET_STATE") {
+      this.setState(action.data);
+    }
+  }
+
+  componentWillMount() {
+    const endpoint = _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].getEndpoint();
+    _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].sendMessage({ type: "ADMIN_CONNECT_STATE", data: { endpoint } });
+    _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].addListener(this.onMessage);
+  }
+
+  componentWillUnmount() {
+    _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].removeListener(this.onMessage);
+  }
+
+  findOtherBundledMessagesOfSameTemplate(template) {
+    return this.state.messages.filter(msg => msg.template === template && msg.bundled);
+  }
+
+  handleBlock(msg) {
+    if (msg.bundled) {
+      // If we are blocking a message that belongs to a bundle, block all other messages that are bundled of that same template
+      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);
+      return () => _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].blockBundle(bundle);
+    }
+    return () => _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].blockById(msg.id);
+  }
+
+  handleUnblock(msg) {
+    if (msg.bundled) {
+      // If we are unblocking a message that belongs to a bundle, unblock all other messages that are bundled of that same template
+      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);
+      return () => _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].unblockBundle(bundle);
+    }
+    return () => _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].unblockById(msg.id);
+  }
+
+  handleOverride(id) {
+    return () => _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].overrideMessage(id);
+  }
+
+  renderMessageItem(msg) {
+    const isCurrent = msg.id === this.state.lastMessageId;
+    const isBlocked = this.state.blockList.includes(msg.id);
+
+    let itemClassName = "message-item";
+    if (isCurrent) {
+      itemClassName += " current";
+    }
+    if (isBlocked) {
+      itemClassName += " blocked";
+    }
+
+    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+      "tr",
+      { className: itemClassName, key: msg.id },
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "td",
+        { className: "message-id" },
+        react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+          "span",
+          null,
+          msg.id
+        )
+      ),
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "td",
+        null,
+        react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+          "button",
+          { className: `button ${isBlocked ? "" : " primary"}`, onClick: isBlocked ? this.handleUnblock(msg) : this.handleBlock(msg) },
+          isBlocked ? "Unblock" : "Block"
+        ),
+        isBlocked ? null : react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+          "button",
+          { className: "button", onClick: this.handleOverride(msg.id) },
+          "Show"
+        )
+      ),
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "td",
+        { className: "message-summary" },
+        react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+          "pre",
+          null,
+          JSON.stringify(msg, null, 2)
+        )
+      )
+    );
+  }
+
+  renderMessages() {
+    if (!this.state.messages) {
+      return null;
+    }
+    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+      "table",
+      null,
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "tbody",
+        null,
+        this.state.messages.map(msg => this.renderMessageItem(msg))
+      )
+    );
+  }
+
+  renderProviders() {
+    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+      "table",
+      null,
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "tbody",
+        null,
+        this.state.providers.map((provider, i) => react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+          "tr",
+          { className: "message-item", key: i },
+          react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+            "td",
+            null,
+            provider.id
+          ),
+          react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+            "td",
+            null,
+            provider.type === "remote" ? react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+              "a",
+              { target: "_blank", href: provider.url },
+              provider.url
+            ) : "(local)"
+          )
+        ))
+      )
+    );
+  }
+
+  render() {
+    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+      "div",
+      { className: "asrouter-admin outer-wrapper" },
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "h1",
+        null,
+        "AS Router Admin"
+      ),
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "button",
+        { className: "button primary", onClick: _asrouter_asrouter_content__WEBPACK_IMPORTED_MODULE_0__["ASRouterUtils"].getNextMessage },
+        "Refresh Current Message"
+      ),
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "h2",
+        null,
+        "Message Providers"
+      ),
+      this.state.providers ? this.renderProviders() : null,
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "h2",
+        null,
+        "Messages"
+      ),
+      this.renderMessages()
+    );
+  }
+}
+
+/***/ }),
+/* 15 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_ConfirmDialog", function() { return _ConfirmDialog; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfirmDialog", function() { return ConfirmDialog; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
+
+
+
+
+
+/**
+ * ConfirmDialog component.
+ * One primary action button, one cancel button.
+ *
+ * Content displayed is controlled by `data` prop the component receives.
+ * Example:
+ * data: {
+ *   // Any sort of data needed to be passed around by actions.
+ *   payload: site.url,
+ *   // Primary button AlsoToMain action.
+ *   action: "DELETE_HISTORY_URL",
+ *   // Primary button USerEvent action.
+ *   userEvent: "DELETE",
+ *   // Array of locale ids to display.
+ *   message_body: ["confirm_history_delete_p1", "confirm_history_delete_notice_p2"],
+ *   // Text for primary button.
+ *   confirm_button_string_id: "menu_action_delete"
+ * },
+ */
+class _ConfirmDialog extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this._handleCancelBtn = this._handleCancelBtn.bind(this);
+    this._handleConfirmBtn = this._handleConfirmBtn.bind(this);
+  }
+
+  _handleCancelBtn() {
+    this.props.dispatch({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].DIALOG_CANCEL });
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({ event: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].DIALOG_CANCEL, source: this.props.data.eventSource }));
+  }
+
+  _handleConfirmBtn() {
+    this.props.data.onConfirm.forEach(this.props.dispatch);
+  }
+
+  _renderModalMessage() {
+    const message_body = this.props.data.body_string_id;
+
+    if (!message_body) {
+      return null;
+    }
+
+    return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+      "span",
+      null,
+      message_body.map(msg => react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+        "p",
+        { key: msg },
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { id: msg })
+      ))
+    );
+  }
+
+  render() {
+    if (!this.props.visible) {
+      return null;
+    }
+
+    return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+      "div",
+      { className: "confirmation-dialog" },
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: "modal-overlay", onClick: this._handleCancelBtn }),
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+        "div",
+        { className: "modal" },
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+          "section",
+          { className: "modal-message" },
+          this.props.data.icon && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("span", { className: `icon icon-spacer icon-${this.props.data.icon}` }),
+          this._renderModalMessage()
+        ),
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+          "section",
+          { className: "actions" },
+          react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+            "button",
+            { onClick: this._handleCancelBtn },
+            react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { id: this.props.data.cancel_button_string_id })
+          ),
+          react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+            "button",
+            { className: "done", onClick: this._handleConfirmBtn },
+            react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { id: this.props.data.confirm_button_string_id })
+          )
+        )
+      )
+    );
+  }
+}
+
+const ConfirmDialog = Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(state => state.Dialog)(_ConfirmDialog);
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports) {
+
+module.exports = ReactRedux;
+
+/***/ }),
+/* 17 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ErrorBoundaryFallback", function() { return ErrorBoundaryFallback; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ErrorBoundary", function() { return ErrorBoundary; });
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+class ErrorBoundaryFallback extends react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.windowObj = this.props.windowObj || window;
+    this.onClick = this.onClick.bind(this);
+  }
+
+  /**
+   * Since we only get here if part of the page has crashed, do a
+   * forced reload to give us the best chance at recovering.
+   */
+  onClick() {
+    this.windowObj.location.reload(true);
+  }
+
+  render() {
+    const defaultClass = "as-error-fallback";
+    let className;
+    if ("className" in this.props) {
+      className = `${this.props.className} ${defaultClass}`;
+    } else {
+      className = defaultClass;
+    }
+
+    // href="#" to force normal link styling stuff (eg cursor on hover)
+    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+      "div",
+      { className: className },
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "div",
+        null,
+        react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], {
+          defaultMessage: "Oops, something went wrong loading this content.",
+          id: "error_fallback_default_info" })
+      ),
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "span",
+        null,
+        react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+          "a",
+          { href: "#", className: "reload-button", onClick: this.onClick },
+          react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], {
+            defaultMessage: "Refresh page to try again.",
+            id: "error_fallback_default_refresh_suggestion" })
+        )
+      )
+    );
+  }
+}
+ErrorBoundaryFallback.defaultProps = { className: "as-error-fallback" };
+
+class ErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.state = { hasError: false };
+  }
+
+  componentDidCatch(error, info) {
+    this.setState({ hasError: true });
+  }
+
+  render() {
+    if (!this.state.hasError) {
+      return this.props.children;
+    }
+
+    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(this.props.FallbackComponent, { className: this.props.className });
+  }
+}
+
+ErrorBoundary.defaultProps = { FallbackComponent: ErrorBoundaryFallback };
+
+/***/ }),
+/* 18 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_ManualMigration", function() { return _ManualMigration; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ManualMigration", function() { return ManualMigration; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
+
+
+
+
+
+/**
+ * Manual migration component used to start the profile import wizard.
+ * Message is presented temporarily and will go away if:
+ * 1.  User clicks "No Thanks"
+ * 2.  User completed the data import
+ * 3.  After 3 active days
+ * 4.  User clicks "Cancel" on the import wizard (currently not implemented).
+ */
+class _ManualMigration extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.onLaunchTour = this.onLaunchTour.bind(this);
+    this.onCancelTour = this.onCancelTour.bind(this);
+  }
+
+  onLaunchTour() {
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].MIGRATION_START }));
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({ event: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].MIGRATION_START }));
+  }
+
+  onCancelTour() {
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].MIGRATION_CANCEL }));
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({ event: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].MIGRATION_CANCEL }));
+  }
+
+  render() {
+    return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+      "div",
+      { className: "manual-migration-container" },
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+        "p",
+        null,
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("span", { className: "icon icon-import" }),
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { id: "manual_migration_explanation2" })
+      ),
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+        "div",
+        { className: "manual-migration-actions actions" },
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+          "button",
+          { className: "dismiss", onClick: this.onCancelTour },
+          react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { id: "manual_migration_cancel_button" })
+        ),
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+          "button",
+          { onClick: this.onLaunchTour },
+          react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__["FormattedMessage"], { id: "manual_migration_import_button" })
+        )
+      )
+    );
+  }
+}
+
+const ManualMigration = Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])()(_ManualMigration);
+
+/***/ }),
+/* 19 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_PrerenderData", function() { return _PrerenderData; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PrerenderData", function() { return PrerenderData; });
+class _PrerenderData {
+  constructor(options) {
+    this.initialPrefs = options.initialPrefs;
+    this.initialSections = options.initialSections;
+    this._setValidation(options.validation);
+  }
+
+  get validation() {
+    return this._validation;
+  }
+
+  set validation(value) {
+    this._setValidation(value);
+  }
+
+  get invalidatingPrefs() {
+    return this._invalidatingPrefs;
+  }
+
+  // This is needed so we can use it in the constructor
+  _setValidation(value = []) {
+    this._validation = value;
+    this._invalidatingPrefs = value.reduce((result, next) => {
+      if (typeof next === "string") {
+        result.push(next);
+        return result;
+      } else if (next && next.oneOf) {
+        return result.concat(next.oneOf);
+      } else if (next && next.indexedDB) {
+        return result.concat(next.indexedDB);
+      }
+      throw new Error("Your validation configuration is not properly configured");
+    }, []);
+  }
+
+  arePrefsValid(getPref, indexedDBPrefs) {
+    for (const prefs of this.validation) {
+      // {oneOf: ["foo", "bar"]}
+      if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {
+        return false;
+
+        // {indexedDB: ["foo", "bar"]}
+      } else if (indexedDBPrefs && prefs && prefs.indexedDB) {
+        const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));
+        if (anyModifiedPrefs) {
+          return false;
+        }
+        // "foo"
+      } else if (getPref(prefs) !== this.initialPrefs[prefs]) {
+        return false;
+      }
+    }
+    return true;
+  }
+}
+var PrerenderData = new _PrerenderData({
+  initialPrefs: {
+    "migrationExpired": true,
+    "feeds.topsites": true,
+    "showSearch": true,
+    "topSitesRows": 1,
+    "feeds.section.topstories": true,
+    "feeds.section.highlights": true,
+    "sectionOrder": "topsites,topstories,highlights",
+    "collapsed": false
+  },
+  // Prefs listed as invalidating will prevent the prerendered version
+  // of AS from being used if their value is something other than what is listed
+  // here. This is required because some preferences cause the page layout to be
+  // too different for the prerendered version to be used. Unfortunately, this
+  // will result in users who have modified some of their preferences not being
+  // able to get the benefits of prerendering.
+  validation: ["feeds.topsites", "showSearch", "topSitesRows", "sectionOrder",
+  // This means if either of these are set to their default values,
+  // prerendering can be used.
+  { oneOf: ["feeds.section.topstories", "feeds.section.highlights"] },
+  // If any component has the following preference set to `true` it will
+  // invalidate the prerendered version.
+  { indexedDB: ["collapsed"] }],
+  initialSections: [{
+    enabled: true,
+    icon: "pocket",
+    id: "topstories",
+    order: 1,
+    title: { id: "header_recommended_by", values: { provider: "Pocket" } }
+  }, {
+    enabled: true,
+    id: "highlights",
+    icon: "highlights",
+    order: 2,
+    title: { id: "header_highlights" }
+  }]
+});
+
+/***/ }),
+/* 20 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_Search", function() { return _Search; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Search", function() { return Search; });
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var content_src_lib_constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
+/* globals ContentSearchUIController */
+
+
+
+
+
+
+
+
+class _Search extends react__WEBPACK_IMPORTED_MODULE_4___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.onClick = this.onClick.bind(this);
+    this.onInputMount = this.onInputMount.bind(this);
+  }
+
+  handleEvent(event) {
+    // Also track search events with our own telemetry
+    if (event.detail.type === "Search") {
+      this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_1__["actionCreators"].UserEvent({ event: "SEARCH" }));
+    }
+  }
+
+  onClick(event) {
+    window.gContentSearchController.search(event);
+  }
+
+  componentWillUnmount() {
+    delete window.gContentSearchController;
+  }
+
+  onInputMount(input) {
+    if (input) {
+      // The "healthReportKey" and needs to be "newtab" or "abouthome" so that
+      // BrowserUsageTelemetry.jsm knows to handle events with this name, and
+      // can add the appropriate telemetry probes for search. Without the correct
+      // name, certain tests like browser_UsageTelemetry_content.js will fail
+      // (See github ticket #2348 for more details)
+      const healthReportKey = content_src_lib_constants__WEBPACK_IMPORTED_MODULE_3__["IS_NEWTAB"] ? "newtab" : "abouthome";
+
+      // The "searchSource" needs to be "newtab" or "homepage" and is sent with
+      // the search data and acts as context for the search request (See
+      // nsISearchEngine.getSubmission). It is necessary so that search engine
+      // plugins can correctly atribute referrals. (See github ticket #3321 for
+      // more details)
+      const searchSource = content_src_lib_constants__WEBPACK_IMPORTED_MODULE_3__["IS_NEWTAB"] ? "newtab" : "homepage";
+
+      // gContentSearchController needs to exist as a global so that tests for
+      // the existing about:home can find it; and so it allows these tests to pass.
+      // In the future, when activity stream is default about:home, this can be renamed
+      window.gContentSearchController = new ContentSearchUIController(input, input.parentNode, healthReportKey, searchSource);
+      addEventListener("ContentSearchClient", this);
+    } else {
+      window.gContentSearchController = null;
+      removeEventListener("ContentSearchClient", this);
+    }
+  }
+
+  /*
+   * Do not change the ID on the input field, as legacy newtab code
+   * specifically looks for the id 'newtab-search-text' on input fields
+   * in order to execute searches in various tests
+   */
+  render() {
+    return react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+      "div",
+      { className: "search-wrapper" },
+      react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+        "label",
+        { htmlFor: "newtab-search-text", className: "search-label" },
+        react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+          "span",
+          { className: "sr-only" },
+          react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "search_web_placeholder" })
+        )
+      ),
+      react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("input", {
+        id: "newtab-search-text",
+        maxLength: "256",
+        placeholder: this.props.intl.formatMessage({ id: "search_web_placeholder" }),
+        ref: this.onInputMount,
+        title: this.props.intl.formatMessage({ id: "search_web_placeholder" }),
+        type: "search" }),
+      react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+        "button",
+        {
+          id: "searchSubmit",
+          className: "search-button",
+          onClick: this.onClick,
+          title: this.props.intl.formatMessage({ id: "search_button" }) },
+        react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+          "span",
+          { className: "sr-only" },
+          react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "search_button" })
+        )
+      )
+    );
+  }
+}
+
+const Search = Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])()(Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(_Search));
+
+/***/ }),
+/* 21 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IS_NEWTAB", function() { return IS_NEWTAB; });
+const IS_NEWTAB = global.document && global.document.documentURI === "about:newtab";
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
+/* 22 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Section", function() { return Section; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SectionIntl", function() { return SectionIntl; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_Sections", function() { return _Sections; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Sections", function() { return Sections; });
+/* harmony import */ var content_src_components_Card_Card__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2);
+/* harmony import */ var content_src_components_CollapsibleSection_CollapsibleSection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(27);
+/* harmony import */ var content_src_components_ComponentPerfTimer_ComponentPerfTimer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(30);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(16);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
+/* harmony import */ var content_src_components_Topics_Topics__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(32);
+/* harmony import */ var content_src_components_TopSites_TopSites__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(33);
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+
+
+
+
+
+
+
+
+
+
+const VISIBLE = "visible";
+const VISIBILITY_CHANGE_EVENT = "visibilitychange";
+const CARDS_PER_ROW_DEFAULT = 3;
+const CARDS_PER_ROW_COMPACT_WIDE = 4;
+
+function getFormattedMessage(message) {
+  return typeof message === "string" ? react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+    "span",
+    null,
+    message
+  ) : react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], message);
+}
+
+class Section extends react__WEBPACK_IMPORTED_MODULE_6___default.a.PureComponent {
+  get numRows() {
+    const { rowsPref, maxRows, Prefs } = this.props;
+    return rowsPref ? Prefs.values[rowsPref] : maxRows;
+  }
+
+  _dispatchImpressionStats() {
+    const { props } = this;
+    let cardsPerRow = CARDS_PER_ROW_DEFAULT;
+    if (props.compactCards && global.matchMedia(`(min-width: 1072px)`).matches) {
+      // If the section has compact cards and the viewport is wide enough, we show
+      // 4 columns instead of 3.
+      // $break-point-widest = 1072px (from _variables.scss)
+      cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;
+    }
+    const maxCards = cardsPerRow * this.numRows;
+    const cards = props.rows.slice(0, maxCards);
+
+    if (this.needsImpressionStats(cards)) {
+      props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_2__["actionCreators"].ImpressionStats({
+        source: props.eventSource,
+        tiles: cards.map(link => ({ id: link.guid }))
+      }));
+      this.impressionCardGuids = cards.map(link => link.guid);
+    }
+  }
+
+  // This sends an event when a user sees a set of new content. If content
+  // changes while the page is hidden (i.e. preloaded or on a hidden tab),
+  // only send the event if the page becomes visible again.
+  sendImpressionStatsOrAddListener() {
+    const { props } = this;
+
+    if (!props.shouldSendImpressionStats || !props.dispatch) {
+      return;
+    }
+
+    if (props.document.visibilityState === VISIBLE) {
+      this._dispatchImpressionStats();
+    } else {
+      // We should only ever send the latest impression stats ping, so remove any
+      // older listeners.
+      if (this._onVisibilityChange) {
+        props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+      }
+
+      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.
+      this._onVisibilityChange = () => {
+        if (props.document.visibilityState === VISIBLE) {
+          if (!this.props.pref.collapsed) {
+            this._dispatchImpressionStats();
+          }
+          props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+        }
+      };
+      props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+    }
+  }
+
+  componentDidMount() {
+    if (this.props.rows.length && !this.props.pref.collapsed) {
+      this.sendImpressionStatsOrAddListener();
+    }
+  }
+
+  componentDidUpdate(prevProps) {
+    const { props } = this;
+    const isCollapsed = props.pref.collapsed;
+    const wasCollapsed = prevProps.pref.collapsed;
+    if (
+    // Don't send impression stats for the empty state
+    props.rows.length && (
+    // We only want to send impression stats if the content of the cards has changed
+    // and the section is not collapsed...
+    props.rows !== prevProps.rows && !isCollapsed ||
+    // or if we are expanding a section that was collapsed.
+    wasCollapsed && !isCollapsed)) {
+      this.sendImpressionStatsOrAddListener();
+    }
+  }
+
+  componentWillUnmount() {
+    if (this._onVisibilityChange) {
+      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+    }
+  }
+
+  needsImpressionStats(cards) {
+    if (!this.impressionCardGuids || this.impressionCardGuids.length !== cards.length) {
+      return true;
+    }
+
+    for (let i = 0; i < cards.length; i++) {
+      if (cards[i].guid !== this.impressionCardGuids[i]) {
+        return true;
+      }
+    }
+
+    return false;
+  }
+
+  render() {
+    const {
+      id, eventSource, title, icon, rows,
+      emptyState, dispatch, compactCards,
+      contextMenuOptions, initialized, disclaimer,
+      pref, privacyNoticeURL, isFirst, isLast
+    } = this.props;
+
+    const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;
+    const { numRows } = this;
+    const maxCards = maxCardsPerRow * numRows;
+    const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * numRows;
+
+    // Show topics only for top stories and if it's not initialized yet (so
+    // content doesn't shift when it is loaded) or has loaded with topics
+    const shouldShowTopics = id === "topstories" && (!this.props.topics || this.props.topics.length > 0);
+
+    const realRows = rows.slice(0, maxCards);
+
+    // The empty state should only be shown after we have initialized and there is no content.
+    // Otherwise, we should show placeholders.
+    const shouldShowEmptyState = initialized && !rows.length;
+
+    const cards = [];
+    if (!shouldShowEmptyState) {
+      for (let i = 0; i < maxCards; i++) {
+        const link = realRows[i];
+        // On narrow viewports, we only show 3 cards per row. We'll mark the rest as
+        // .hide-for-narrow to hide in CSS via @media query.
+        const className = i >= maxCardsOnNarrow ? "hide-for-narrow" : "";
+        cards.push(link ? react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(content_src_components_Card_Card__WEBPACK_IMPORTED_MODULE_0__["Card"], { key: i,
+          index: i,
+          className: className,
+          dispatch: dispatch,
+          link: link,
+          contextMenuOptions: contextMenuOptions,
+          eventSource: eventSource,
+          shouldSendImpressionStats: this.props.shouldSendImpressionStats,
+          isWebExtension: this.props.isWebExtension }) : react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(content_src_components_Card_Card__WEBPACK_IMPORTED_MODULE_0__["PlaceholderCard"], { key: i, className: className }));
+      }
+    }
+
+    const sectionClassName = ["section", compactCards ? "compact-cards" : "normal-cards"].join(" ");
+
+    // <Section> <-- React component
+    // <section> <-- HTML5 element
+    return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+      content_src_components_ComponentPerfTimer_ComponentPerfTimer__WEBPACK_IMPORTED_MODULE_4__["ComponentPerfTimer"],
+      this.props,
+      react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+        content_src_components_CollapsibleSection_CollapsibleSection__WEBPACK_IMPORTED_MODULE_3__["CollapsibleSection"],
+        { className: sectionClassName, icon: icon,
+          title: title,
+          id: id,
+          eventSource: eventSource,
+          disclaimer: disclaimer,
+          collapsed: this.props.pref.collapsed,
+          showPrefName: pref && pref.feed || id,
+          privacyNoticeURL: privacyNoticeURL,
+          Prefs: this.props.Prefs,
+          isFirst: isFirst,
+          isLast: isLast,
+          dispatch: this.props.dispatch,
+          isWebExtension: this.props.isWebExtension },
+        !shouldShowEmptyState && react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+          "ul",
+          { className: "section-list", style: { padding: 0 } },
+          cards
+        ),
+        shouldShowEmptyState && react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+          "div",
+          { className: "section-empty-state" },
+          react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+            "div",
+            { className: "empty-state" },
+            emptyState.icon && emptyState.icon.startsWith("moz-extension://") ? react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("img", { className: "empty-state-icon icon", style: { "background-image": `url('${emptyState.icon}')` } }) : react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("img", { className: `empty-state-icon icon icon-${emptyState.icon}` }),
+            react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+              "p",
+              { className: "empty-state-message" },
+              getFormattedMessage(emptyState.message)
+            )
+          )
+        ),
+        shouldShowTopics && react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(content_src_components_Topics_Topics__WEBPACK_IMPORTED_MODULE_7__["Topics"], { topics: this.props.topics, read_more_endpoint: this.props.read_more_endpoint })
+      )
+    );
+  }
+}
+
+Section.defaultProps = {
+  document: global.document,
+  rows: [],
+  emptyState: {},
+  pref: {},
+  title: ""
+};
+
+const SectionIntl = Object(react_redux__WEBPACK_IMPORTED_MODULE_5__["connect"])(state => ({ Prefs: state.Prefs }))(Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["injectIntl"])(Section));
+
+class _Sections extends react__WEBPACK_IMPORTED_MODULE_6___default.a.PureComponent {
+  renderSections() {
+    const sections = [];
+    const enabledSections = this.props.Sections.filter(section => section.enabled);
+    const { sectionOrder, "feeds.topsites": showTopSites } = this.props.Prefs.values;
+    // Enabled sections doesn't include Top Sites, so we add it if enabled.
+    const expectedCount = enabledSections.length + ~~showTopSites;
+
+    for (const sectionId of sectionOrder.split(",")) {
+      const commonProps = {
+        key: sectionId,
+        isFirst: sections.length === 0,
+        isLast: sections.length === expectedCount - 1
+      };
+      if (sectionId === "topsites" && showTopSites) {
+        sections.push(react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(content_src_components_TopSites_TopSites__WEBPACK_IMPORTED_MODULE_8__["TopSites"], commonProps));
+      } else {
+        const section = enabledSections.find(s => s.id === sectionId);
+        if (section) {
+          sections.push(react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(SectionIntl, _extends({}, section, commonProps)));
+        }
+      }
+    }
+    return sections;
+  }
+
+  render() {
+    return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+      "div",
+      { className: "sections-list" },
+      this.renderSections()
+    );
+  }
+}
+
+const Sections = Object(react_redux__WEBPACK_IMPORTED_MODULE_5__["connect"])(state => ({ Sections: state.Sections, Prefs: state.Prefs }))(_Sections);
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
+/* 23 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GetPlatformString", function() { return GetPlatformString; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinkMenuOptions", function() { return LinkMenuOptions; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+
+
+const _OpenInPrivateWindow = site => ({
+  id: "menu_action_open_private_window",
+  icon: "new-window-private",
+  action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+    type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].OPEN_PRIVATE_WINDOW,
+    data: { url: site.url, referrer: site.referrer }
+  }),
+  userEvent: "OPEN_PRIVATE_WINDOW"
+});
+
+const GetPlatformString = platform => {
+  switch (platform) {
+    case "win":
+      return "menu_action_show_file_windows";
+    case "macosx":
+      return "menu_action_show_file_mac_os";
+    case "linux":
+      return "menu_action_show_file_linux";
+    default:
+      return "menu_action_show_file_default";
+  }
+};
+
+/**
+ * List of functions that return items that can be included as menu options in a
+ * LinkMenu. All functions take the site as the first parameter, and optionally
+ * the index of the site.
+ */
+const LinkMenuOptions = {
+  Separator: () => ({ type: "separator" }),
+  EmptyItem: () => ({ type: "empty" }),
+  RemoveBookmark: site => ({
+    id: "menu_action_remove_bookmark",
+    icon: "bookmark-added",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].DELETE_BOOKMARK_BY_ID,
+      data: site.bookmarkGuid
+    }),
+    userEvent: "BOOKMARK_DELETE"
+  }),
+  AddBookmark: site => ({
+    id: "menu_action_bookmark",
+    icon: "bookmark-hollow",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].BOOKMARK_URL,
+      data: { url: site.url, title: site.title, type: site.type }
+    }),
+    userEvent: "BOOKMARK_ADD"
+  }),
+  OpenInNewWindow: site => ({
+    id: "menu_action_open_new_window",
+    icon: "new-window",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].OPEN_NEW_WINDOW,
+      data: {
+        referrer: site.referrer,
+        typedBonus: site.typedBonus,
+        url: site.url
+      }
+    }),
+    userEvent: "OPEN_NEW_WINDOW"
+  }),
+  BlockUrl: (site, index, eventSource) => ({
+    id: "menu_action_dismiss",
+    icon: "dismiss",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].BLOCK_URL,
+      data: { url: site.url, pocket_id: site.pocket_id }
+    }),
+    impression: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].ImpressionStats({
+      source: eventSource,
+      block: 0,
+      tiles: [{ id: site.guid, pos: index }]
+    }),
+    userEvent: "BLOCK"
+  }),
+
+  // This is an option for web extentions which will result in remove items from
+  // memory and notify the web extenion, rather than using the built-in block list.
+  WebExtDismiss: (site, index, eventSource) => ({
+    id: "menu_action_webext_dismiss",
+    string_id: "menu_action_dismiss",
+    icon: "dismiss",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].WebExtEvent(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].WEBEXT_DISMISS, {
+      source: eventSource,
+      url: site.url,
+      action_position: index
+    })
+  }),
+  DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({
+    id: "menu_action_delete",
+    icon: "delete",
+    action: {
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].DIALOG_OPEN,
+      data: {
+        onConfirm: [common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].DELETE_HISTORY_URL, data: { url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid } }), common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent(Object.assign({ event: "DELETE", source: eventSource, action_position: index }, siteInfo))],
+        eventSource,
+        body_string_id: ["confirm_history_delete_p1", "confirm_history_delete_notice_p2"],
+        confirm_button_string_id: "menu_action_delete",
+        cancel_button_string_id: "topsites_form_cancel_button",
+        icon: "modal-delete"
+      }
+    },
+    userEvent: "DIALOG_OPEN"
+  }),
+  ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({
+    id: GetPlatformString(platform),
+    icon: "search",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SHOW_DOWNLOAD_FILE,
+      data: { url: site.url }
+    })
+  }),
+  OpenFile: site => ({
+    id: "menu_action_open_file",
+    icon: "open-file",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].OPEN_DOWNLOAD_FILE,
+      data: { url: site.url }
+    })
+  }),
+  CopyDownloadLink: site => ({
+    id: "menu_action_copy_download_link",
+    icon: "copy",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].COPY_DOWNLOAD_LINK,
+      data: { url: site.url }
+    })
+  }),
+  GoToDownloadPage: site => ({
+    id: "menu_action_go_to_download_page",
+    icon: "download",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].OPEN_LINK,
+      data: { url: site.referrer }
+    }),
+    disabled: !site.referrer
+  }),
+  RemoveDownload: site => ({
+    id: "menu_action_remove_download",
+    icon: "delete",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].REMOVE_DOWNLOAD_FILE,
+      data: { url: site.url }
+    })
+  }),
+  PinTopSite: (site, index) => ({
+    id: "menu_action_pin",
+    icon: "pin",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOP_SITES_PIN,
+      data: { site: { url: site.url }, index }
+    }),
+    userEvent: "PIN"
+  }),
+  UnpinTopSite: site => ({
+    id: "menu_action_unpin",
+    icon: "unpin",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOP_SITES_UNPIN,
+      data: { site: { url: site.url } }
+    }),
+    userEvent: "UNPIN"
+  }),
+  SaveToPocket: (site, index, eventSource) => ({
+    id: "menu_action_save_to_pocket",
+    icon: "pocket",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SAVE_TO_POCKET,
+      data: { site: { url: site.url, title: site.title } }
+    }),
+    impression: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].ImpressionStats({
+      source: eventSource,
+      pocket: 0,
+      tiles: [{ id: site.guid, pos: index }]
+    }),
+    userEvent: "SAVE_TO_POCKET"
+  }),
+  DeleteFromPocket: site => ({
+    id: "menu_action_delete_pocket",
+    icon: "delete",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].DELETE_FROM_POCKET,
+      data: { pocket_id: site.pocket_id }
+    }),
+    userEvent: "DELETE_FROM_POCKET"
+  }),
+  ArchiveFromPocket: site => ({
+    id: "menu_action_archive_pocket",
+    icon: "check",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].ARCHIVE_FROM_POCKET,
+      data: { pocket_id: site.pocket_id }
+    }),
+    userEvent: "ARCHIVE_FROM_POCKET"
+  }),
+  EditTopSite: (site, index) => ({
+    id: "edit_topsites_button_text",
+    icon: "edit",
+    action: {
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOP_SITES_EDIT,
+      data: { index }
+    }
+  }),
+  CheckBookmark: site => site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site),
+  CheckPinTopSite: (site, index) => site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index),
+  CheckSavedToPocket: (site, index) => site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index),
+  CheckBookmarkOrArchive: site => site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site),
+  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem()
+};
+
+/***/ }),
+/* 24 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_LinkMenu", function() { return _LinkMenu; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinkMenu", function() { return LinkMenu; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var content_src_components_ContextMenu_ContextMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var content_src_lib_link_menu_options__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(23);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
+
+
+
+
+
+
+
+const DEFAULT_SITE_MENU_OPTIONS = ["CheckPinTopSite", "EditTopSite", "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl"];
+
+class _LinkMenu extends react__WEBPACK_IMPORTED_MODULE_5___default.a.PureComponent {
+  getOptions() {
+    const { props } = this;
+    const { site, index, source, isPrivateBrowsingEnabled, siteInfo, platform } = props;
+
+    // Handle special case of default site
+    const propOptions = !site.isDefault ? props.options : DEFAULT_SITE_MENU_OPTIONS;
+
+    const options = propOptions.map(o => content_src_lib_link_menu_options__WEBPACK_IMPORTED_MODULE_4__["LinkMenuOptions"][o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {
+      const { action, impression, id, string_id, type, userEvent } = option;
+      if (!type && id) {
+        option.label = props.intl.formatMessage({ id: string_id || id });
+        option.onClick = () => {
+          props.dispatch(action);
+          if (userEvent) {
+            const userEventData = Object.assign({
+              event: userEvent,
+              source,
+              action_position: index
+            }, siteInfo);
+            props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent(userEventData));
+          }
+          if (impression && props.shouldSendImpressionStats) {
+            props.dispatch(impression);
+          }
+        };
+      }
+      return option;
+    });
+
+    // This is for accessibility to support making each item tabbable.
+    // We want to know which item is the first and which item
+    // is the last, so we can close the context menu accordingly.
+    options[0].first = true;
+    options[options.length - 1].last = true;
+    return options;
+  }
+
+  render() {
+    return react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(content_src_components_ContextMenu_ContextMenu__WEBPACK_IMPORTED_MODULE_2__["ContextMenu"], {
+      onUpdate: this.props.onUpdate,
+      options: this.getOptions() });
+  }
+}
+
+const getState = state => ({ isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform });
+const LinkMenu = Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["connect"])(getState)(Object(react_intl__WEBPACK_IMPORTED_MODULE_3__["injectIntl"])(_LinkMenu));
+
+/***/ }),
+/* 25 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContextMenu", function() { return ContextMenu; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContextMenuItem", function() { return ContextMenuItem; });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+
+class ContextMenu extends react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.hideContext = this.hideContext.bind(this);
+    this.onClick = this.onClick.bind(this);
+  }
+
+  hideContext() {
+    this.props.onUpdate(false);
+  }
+
+  componentDidMount() {
+    setTimeout(() => {
+      global.addEventListener("click", this.hideContext);
+    }, 0);
+  }
+
+  componentWillUnmount() {
+    global.removeEventListener("click", this.hideContext);
+  }
+
+  onClick(event) {
+    // Eat all clicks on the context menu so they don't bubble up to window.
+    // This prevents the context menu from closing when clicking disabled items
+    // or the separators.
+    event.stopPropagation();
+  }
+
+  render() {
+    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(
+      "span",
+      { className: "context-menu", onClick: this.onClick },
+      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(
+        "ul",
+        { role: "menu", className: "context-menu-list" },
+        this.props.options.map((option, i) => option.type === "separator" ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("li", { key: i, className: "separator" }) : option.type !== "empty" && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ContextMenuItem, { key: i, option: option, hideContext: this.hideContext }))
+      )
+    );
+  }
+}
+
+class ContextMenuItem extends react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.onClick = this.onClick.bind(this);
+    this.onKeyDown = this.onKeyDown.bind(this);
+  }
+
+  onClick() {
+    this.props.hideContext();
+    this.props.option.onClick();
+  }
+
+  onKeyDown(event) {
+    const { option } = this.props;
+    switch (event.key) {
+      case "Tab":
+        // tab goes down in context menu, shift + tab goes up in context menu
+        // if we're on the last item, one more tab will close the context menu
+        // similarly, if we're on the first item, one more shift + tab will close it
+        if (event.shiftKey && option.first || !event.shiftKey && option.last) {
+          this.props.hideContext();
+        }
+        break;
+      case "Enter":
+        this.props.hideContext();
+        option.onClick();
+        break;
+    }
+  }
+
+  render() {
+    const { option } = this.props;
+    return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(
+      "li",
+      { role: "menuitem", className: "context-menu-item" },
+      react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(
+        "a",
+        { onClick: this.onClick, onKeyDown: this.onKeyDown, tabIndex: "0", className: option.disabled ? "disabled" : "" },
+        option.icon && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { className: `icon icon-spacer icon-${option.icon}` }),
+        option.label
+      )
+    );
+  }
+}
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
+/* 26 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScreenshotUtils", function() { return ScreenshotUtils; });
+/**
+ * List of helper functions for screenshot-based images.
+ *
+ * There are two kinds of images:
+ * 1. Remote Image: This is the image from the main process and it refers to
+ *    the image in the React props. This can either be an object with the `data`
+ *    and `path` properties, if it is a blob, or a string, if it is a normal image.
+ * 2. Local Image: This is the image object in the content process and it refers
+ *    to the image *object* in the React component's state. All local image
+ *    objects have the `url` property, and an additional property `path`, if they
+ *    are blobs.
+ */
+const ScreenshotUtils = {
+  isBlob(isLocal, image) {
+    return !!(image && image.path && (!isLocal && image.data || isLocal && image.url));
+  },
+
+  // This should always be called with a remote image and not a local image.
+  createLocalImageObject(remoteImage) {
+    if (!remoteImage) {
+      return null;
+    }
+    if (this.isBlob(false, remoteImage)) {
+      return { url: global.URL.createObjectURL(remoteImage.data), path: remoteImage.path };
+    }
+    return { url: remoteImage };
+  },
+
+  // Revokes the object URL of the image if the local image is a blob.
+  // This should always be called with a local image and not a remote image.
+  maybeRevokeBlobObjectURL(localImage) {
+    if (this.isBlob(true, localImage)) {
+      global.URL.revokeObjectURL(localImage.url);
+    }
+  },
+
+  // Checks if remoteImage and localImage are the same.
+  isRemoteImageLocal(localImage, remoteImage) {
+    // Both remoteImage and localImage are present.
+    if (remoteImage && localImage) {
+      return this.isBlob(false, remoteImage) ? localImage.path === remoteImage.path : localImage.url === remoteImage;
+    }
+
+    // This will only handle the remaining three possible outcomes.
+    // (i.e. everything except when both image and localImage are present)
+    return !remoteImage && !localImage;
+  }
+};
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
+/* 27 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Disclaimer", function() { return Disclaimer; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DisclaimerIntl", function() { return DisclaimerIntl; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_CollapsibleSection", function() { return _CollapsibleSection; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CollapsibleSection", function() { return CollapsibleSection; });
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2);
+/* harmony import */ var content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var content_src_components_SectionMenu_SectionMenu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28);
+/* harmony import */ var content_src_lib_section_menu_options__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29);
+
+
+
+
+
+
+
+const VISIBLE = "visible";
+const VISIBILITY_CHANGE_EVENT = "visibilitychange";
+
+function getFormattedMessage(message) {
+  return typeof message === "string" ? react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+    "span",
+    null,
+    message
+  ) : react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], message);
+}
+
+class Disclaimer extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.onAcknowledge = this.onAcknowledge.bind(this);
+  }
+
+  onAcknowledge() {
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_1__["actionCreators"].SetPref(this.props.disclaimerPref, false));
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_1__["actionCreators"].UserEvent({ event: "DISCLAIMER_ACKED", source: this.props.eventSource }));
+  }
+
+  render() {
+    const { disclaimer } = this.props;
+    return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+      "div",
+      { className: "section-disclaimer" },
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+        "div",
+        { className: "section-disclaimer-text" },
+        getFormattedMessage(disclaimer.text),
+        disclaimer.link && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+          "a",
+          { href: disclaimer.link.href, target: "_blank", rel: "noopener noreferrer" },
+          getFormattedMessage(disclaimer.link.title || disclaimer.link)
+        )
+      ),
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+        "button",
+        { onClick: this.onAcknowledge },
+        getFormattedMessage(disclaimer.button)
+      )
+    );
+  }
+}
+
+const DisclaimerIntl = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(Disclaimer);
+
+class _CollapsibleSection extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.onBodyMount = this.onBodyMount.bind(this);
+    this.onHeaderClick = this.onHeaderClick.bind(this);
+    this.onTransitionEnd = this.onTransitionEnd.bind(this);
+    this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);
+    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);
+    this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);
+    this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);
+    this.onMenuUpdate = this.onMenuUpdate.bind(this);
+    this.state = { enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false };
+  }
+
+  componentWillMount() {
+    this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);
+  }
+
+  componentWillUpdate(nextProps) {
+    // Check if we're about to go from expanded to collapsed
+    if (!this.props.collapsed && nextProps.collapsed) {
+      // This next line forces a layout flush of the section body, which has a
+      // max-height style set, so that the upcoming collapse animation can
+      // animate from that height to the collapsed height. Without this, the
+      // update is coalesced and there's no animation from no-max-height to 0.
+      this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions
+    }
+  }
+
+  componentWillUnmount() {
+    this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);
+  }
+
+  enableOrDisableAnimation() {
+    // Only animate the collapse/expand for visible tabs.
+    const visible = this.props.document.visibilityState === VISIBLE;
+    if (this.state.enableAnimation !== visible) {
+      this.setState({ enableAnimation: visible });
+    }
+  }
+
+  onBodyMount(node) {
+    this.sectionBody = node;
+  }
+
+  onHeaderClick() {
+    // If this.sectionBody is unset, it means that we're in some sort of error
+    // state, probably displaying the error fallback, so we won't be able to
+    // compute the height, and we don't want to persist the preference.
+    // If props.collapsed is undefined handler shouldn't do anything.
+    if (!this.sectionBody || this.props.collapsed === undefined) {
+      return;
+    }
+
+    // Get the current height of the body so max-height transitions can work
+    this.setState({
+      isAnimating: true,
+      maxHeight: `${this.sectionBody.scrollHeight}px`
+    });
+    const { action, userEvent } = content_src_lib_section_menu_options__WEBPACK_IMPORTED_MODULE_5__["SectionMenuOptions"].CheckCollapsed(this.props);
+    this.props.dispatch(action);
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_1__["actionCreators"].UserEvent({
+      event: userEvent,
+      source: this.props.source
+    }));
+  }
+
+  onTransitionEnd(event) {
+    // Only update the animating state for our own transition (not a child's)
+    if (event.target === event.currentTarget) {
+      this.setState({ isAnimating: false });
+    }
+  }
+
+  renderIcon() {
+    const { icon } = this.props;
+    if (icon && icon.startsWith("moz-extension://")) {
+      return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("span", { className: "icon icon-small-spacer", style: { backgroundImage: `url('${icon}')` } });
+    }
+    return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("span", { className: `icon icon-small-spacer icon-${icon || "webextension"}` });
+  }
+
+  onMenuButtonClick(event) {
+    event.preventDefault();
+    this.setState({ showContextMenu: true });
+  }
+
+  onMenuButtonMouseEnter() {
+    this.setState({ menuButtonHover: true });
+  }
+
+  onMenuButtonMouseLeave() {
+    this.setState({ menuButtonHover: false });
+  }
+
+  onMenuUpdate(showContextMenu) {
+    this.setState({ showContextMenu });
+  }
+
+  render() {
+    const isCollapsible = this.props.collapsed !== undefined;
+    const { enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu } = this.state;
+    const { id, eventSource, collapsed, disclaimer, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast, isWebExtension } = this.props;
+    const disclaimerPref = `section.${id}.showDisclaimer`;
+    const needsDisclaimer = disclaimer && this.props.Prefs.values[disclaimerPref];
+    const active = menuButtonHover || showContextMenu;
+    return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+      "section",
+      {
+        className: `collapsible-section ${this.props.className}${enableAnimation ? " animation-enabled" : ""}${collapsed ? " collapsed" : ""}${active ? " active" : ""}`
+        // Note: data-section-id is used for web extension api tests in mozilla central
+        , "data-section-id": id },
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+        "div",
+        { className: "section-top-bar" },
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+          "h3",
+          { className: "section-title" },
+          react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+            "span",
+            { className: "click-target", onClick: this.onHeaderClick },
+            this.renderIcon(),
+            getFormattedMessage(title),
+            isCollapsible && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("span", { className: `collapsible-arrow icon ${collapsed ? "icon-arrowhead-forward-small" : "icon-arrowhead-down-small"}` })
+          )
+        ),
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+          "div",
+          null,
+          react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+            "button",
+            {
+              className: "context-menu-button icon",
+              onClick: this.onMenuButtonClick,
+              onMouseEnter: this.onMenuButtonMouseEnter,
+              onMouseLeave: this.onMenuButtonMouseLeave },
+            react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+              "span",
+              { className: "sr-only" },
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "section_context_menu_button_sr" })
+            )
+          ),
+          showContextMenu && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(content_src_components_SectionMenu_SectionMenu__WEBPACK_IMPORTED_MODULE_4__["SectionMenu"], {
+            id: id,
+            extraOptions: extraMenuOptions,
+            eventSource: eventSource,
+            showPrefName: showPrefName,
+            privacyNoticeURL: privacyNoticeURL,
+            collapsed: collapsed,
+            onUpdate: this.onMenuUpdate,
+            isFirst: isFirst,
+            isLast: isLast,
+            dispatch: dispatch,
+            isWebExtension: isWebExtension })
+        )
+      ),
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+        content_src_components_ErrorBoundary_ErrorBoundary__WEBPACK_IMPORTED_MODULE_2__["ErrorBoundary"],
+        { className: "section-body-fallback" },
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+          "div",
+          {
+            className: `section-body${isAnimating ? " animating" : ""}`,
+            onTransitionEnd: this.onTransitionEnd,
+            ref: this.onBodyMount,
+            style: isAnimating && !collapsed ? { maxHeight } : null },
+          needsDisclaimer && react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(DisclaimerIntl, { disclaimerPref: disclaimerPref, disclaimer: disclaimer, eventSource: eventSource, dispatch: this.props.dispatch }),
+          this.props.children
+        )
+      )
+    );
+  }
+}
+
+_CollapsibleSection.defaultProps = {
+  document: global.document || {
+    addEventListener: () => {},
+    removeEventListener: () => {},
+    visibilityState: "hidden"
+  },
+  Prefs: { values: {} }
+};
+
+const CollapsibleSection = Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(_CollapsibleSection);
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
+/* 28 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_SectionMenu", function() { return _SectionMenu; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SectionMenu", function() { return SectionMenu; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var content_src_components_ContextMenu_ContextMenu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(25);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var content_src_lib_section_menu_options__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29);
+
+
+
+
+
+
+const DEFAULT_SECTION_MENU_OPTIONS = ["MoveUp", "MoveDown", "Separator", "RemoveSection", "CheckCollapsed", "Separator", "ManageSection"];
+const WEBEXT_SECTION_MENU_OPTIONS = ["MoveUp", "MoveDown", "Separator", "CheckCollapsed", "Separator", "ManageWebExtension"];
+
+class _SectionMenu extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent {
+  getOptions() {
+    const { props } = this;
+
+    const propOptions = props.isWebExtension ? [...WEBEXT_SECTION_MENU_OPTIONS] : [...DEFAULT_SECTION_MENU_OPTIONS];
+    // Prepend custom options and a separator
+    if (props.extraOptions) {
+      propOptions.splice(0, 0, ...props.extraOptions, "Separator");
+    }
+    // Insert privacy notice before the last option ("ManageSection")
+    if (props.privacyNoticeURL) {
+      propOptions.splice(-1, 0, "PrivacyNotice");
+    }
+
+    const options = propOptions.map(o => content_src_lib_section_menu_options__WEBPACK_IMPORTED_MODULE_4__["SectionMenuOptions"][o](props)).map(option => {
+      const { action, id, type, userEvent } = option;
+      if (!type && id) {
+        option.label = props.intl.formatMessage({ id });
+        option.onClick = () => {
+          props.dispatch(action);
+          if (userEvent) {
+            props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({
+              event: userEvent,
+              source: props.source
+            }));
+          }
+        };
+      }
+      return option;
+    });
+
+    // This is for accessibility to support making each item tabbable.
+    // We want to know which item is the first and which item
+    // is the last, so we can close the context menu accordingly.
+    options[0].first = true;
+    options[options.length - 1].last = true;
+    return options;
+  }
+
+  render() {
+    return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(content_src_components_ContextMenu_ContextMenu__WEBPACK_IMPORTED_MODULE_1__["ContextMenu"], {
+      onUpdate: this.props.onUpdate,
+      options: this.getOptions() });
+  }
+}
+
+const SectionMenu = Object(react_intl__WEBPACK_IMPORTED_MODULE_2__["injectIntl"])(_SectionMenu);
+
+/***/ }),
+/* 29 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SectionMenuOptions", function() { return SectionMenuOptions; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+
+
+/**
+ * List of functions that return items that can be included as menu options in a
+ * SectionMenu. All functions take the section as the only parameter.
+ */
+const SectionMenuOptions = {
+  Separator: () => ({ type: "separator" }),
+  MoveUp: section => ({
+    id: "section_menu_action_move_up",
+    icon: "arrowhead-up",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SECTION_MOVE,
+      data: { id: section.id, direction: -1 }
+    }),
+    userEvent: "MENU_MOVE_UP",
+    disabled: !!section.isFirst
+  }),
+  MoveDown: section => ({
+    id: "section_menu_action_move_down",
+    icon: "arrowhead-down",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SECTION_MOVE,
+      data: { id: section.id, direction: +1 }
+    }),
+    userEvent: "MENU_MOVE_DOWN",
+    disabled: !!section.isLast
+  }),
+  RemoveSection: section => ({
+    id: "section_menu_action_remove_section",
+    icon: "dismiss",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].SetPref(section.showPrefName, false),
+    userEvent: "MENU_REMOVE"
+  }),
+  CollapseSection: section => ({
+    id: "section_menu_action_collapse_section",
+    icon: "minimize",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].UPDATE_SECTION_PREFS, data: { id: section.id, value: { collapsed: true } } }),
+    userEvent: "MENU_COLLAPSE"
+  }),
+  ExpandSection: section => ({
+    id: "section_menu_action_expand_section",
+    icon: "maximize",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].UPDATE_SECTION_PREFS, data: { id: section.id, value: { collapsed: false } } }),
+    userEvent: "MENU_EXPAND"
+  }),
+  ManageSection: section => ({
+    id: "section_menu_action_manage_section",
+    icon: "settings",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SETTINGS_OPEN }),
+    userEvent: "MENU_MANAGE"
+  }),
+  ManageWebExtension: section => ({
+    id: "section_menu_action_manage_webext",
+    icon: "settings",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].OPEN_WEBEXT_SETTINGS, data: section.id })
+  }),
+  AddTopSite: section => ({
+    id: "section_menu_action_add_topsite",
+    icon: "add",
+    action: { type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOP_SITES_EDIT, data: { index: -1 } },
+    userEvent: "MENU_ADD_TOPSITE"
+  }),
+  PrivacyNotice: section => ({
+    id: "section_menu_action_privacy_notice",
+    icon: "info",
+    action: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].OPEN_LINK,
+      data: { url: section.privacyNoticeURL }
+    }),
+    userEvent: "MENU_PRIVACY_NOTICE"
+  }),
+  CheckCollapsed: section => section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section)
+};
+
+/***/ }),
+/* 30 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComponentPerfTimer", function() { return ComponentPerfTimer; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var common_PerfService_jsm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
+
+
+
+
+// Currently record only a fixed set of sections. This will prevent data
+// from custom sections from showing up or from topstories.
+const RECORDED_SECTIONS = ["highlights", "topsites"];
+
+class ComponentPerfTimer extends react__WEBPACK_IMPORTED_MODULE_2___default.a.Component {
+  constructor(props) {
+    super(props);
+    // Just for test dependency injection:
+    this.perfSvc = this.props.perfSvc || common_PerfService_jsm__WEBPACK_IMPORTED_MODULE_1__["perfService"];
+
+    this._sendBadStateEvent = this._sendBadStateEvent.bind(this);
+    this._sendPaintedEvent = this._sendPaintedEvent.bind(this);
+    this._reportMissingData = false;
+    this._timestampHandled = false;
+    this._recordedFirstRender = false;
+  }
+
+  componentDidMount() {
+    if (!RECORDED_SECTIONS.includes(this.props.id)) {
+      return;
+    }
+
+    this._maybeSendPaintedEvent();
+  }
+
+  componentDidUpdate() {
+    if (!RECORDED_SECTIONS.includes(this.props.id)) {
+      return;
+    }
+
+    this._maybeSendPaintedEvent();
+  }
+
+  /**
+   * Call the given callback after the upcoming frame paints.
+   *
+   * @note Both setTimeout and requestAnimationFrame are throttled when the page
+   * is hidden, so this callback may get called up to a second or so after the
+   * requestAnimationFrame "paint" for hidden tabs.
+   *
+   * Newtabs hidden while loading will presumably be fairly rare (other than
+   * preloaded tabs, which we will be filtering out on the server side), so such
+   * cases should get lost in the noise.
+   *
+   * If we decide that it's important to find out when something that's hidden
+   * has "painted", however, another option is to post a message to this window.
+   * That should happen even faster than setTimeout, and, at least as of this
+   * writing, it's not throttled in hidden windows in Firefox.
+   *
+   * @param {Function} callback
+   *
+   * @returns void
+   */
+  _afterFramePaint(callback) {
+    requestAnimationFrame(() => setTimeout(callback, 0));
+  }
+
+  _maybeSendBadStateEvent() {
+    // Follow up bugs:
+    // https://github.com/mozilla/activity-stream/issues/3691
+    if (!this.props.initialized) {
+      // Remember to report back when data is available.
+      this._reportMissingData = true;
+    } else if (this._reportMissingData) {
+      this._reportMissingData = false;
+      // Report how long it took for component to become initialized.
+      this._sendBadStateEvent();
+    }
+  }
+
+  _maybeSendPaintedEvent() {
+    // If we've already handled a timestamp, don't do it again.
+    if (this._timestampHandled || !this.props.initialized) {
+      return;
+    }
+
+    // And if we haven't, we're doing so now, so remember that. Even if
+    // something goes wrong in the callback, we can't try again, as we'd be
+    // sending back the wrong data, and we have to do it here, so that other
+    // calls to this method while waiting for the next frame won't also try to
+    // handle it.
+    this._timestampHandled = true;
+    this._afterFramePaint(this._sendPaintedEvent);
+  }
+
+  /**
+   * Triggered by call to render. Only first call goes through due to
+   * `_recordedFirstRender`.
+   */
+  _ensureFirstRenderTsRecorded() {
+    // Used as t0 for recording how long component took to initialize.
+    if (!this._recordedFirstRender) {
+      this._recordedFirstRender = true;
+      // topsites_first_render_ts, highlights_first_render_ts.
+      const key = `${this.props.id}_first_render_ts`;
+      this.perfSvc.mark(key);
+    }
+  }
+
+  /**
+   * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms
+   * of how much longer the data took to be ready for display than it would
+   * have been the ideal case.
+   * https://github.com/mozilla/ping-centre/issues/98
+   */
+  _sendBadStateEvent() {
+    // highlights_data_ready_ts, topsites_data_ready_ts.
+    const dataReadyKey = `${this.props.id}_data_ready_ts`;
+    this.perfSvc.mark(dataReadyKey);
+
+    try {
+      const firstRenderKey = `${this.props.id}_first_render_ts`;
+      // value has to be Int32.
+      const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) - this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);
+      this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+        type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SAVE_SESSION_PERF_DATA,
+        // highlights_data_late_by_ms, topsites_data_late_by_ms.
+        data: { [`${this.props.id}_data_late_by_ms`]: value }
+      }));
+    } catch (ex) {
+      // If this failed, it's likely because the `privacy.resistFingerprinting`
+      // pref is true.
+    }
+  }
+
+  _sendPaintedEvent() {
+    // Record first_painted event but only send if topsites.
+    if (this.props.id !== "topsites") {
+      return;
+    }
+
+    // topsites_first_painted_ts.
+    const key = `${this.props.id}_first_painted_ts`;
+    this.perfSvc.mark(key);
+
+    try {
+      const data = {};
+      data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);
+
+      this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+        type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SAVE_SESSION_PERF_DATA,
+        data
+      }));
+    } catch (ex) {
+      // If this failed, it's likely because the `privacy.resistFingerprinting`
+      // pref is true.  We should at least not blow up, and should continue
+      // to set this._timestampHandled to avoid going through this again.
+    }
+  }
+
+  render() {
+    if (RECORDED_SECTIONS.includes(this.props.id)) {
+      this._ensureFirstRenderTsRecorded();
+      this._maybeSendBadStateEvent();
+    }
+    return this.props.children;
+  }
+}
+
+/***/ }),
+/* 31 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_PerfService", function() { return _PerfService; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "perfService", function() { return perfService; });
+/* globals Services */
+
+
+/* istanbul ignore if */
+
+if (typeof ChromeUtils !== "undefined") {
+  ChromeUtils.import("resource://gre/modules/Services.jsm");
+}
+
+let usablePerfObj;
+
+/* istanbul ignore if */
+/* istanbul ignore else */
+if (typeof Services !== "undefined") {
+  // Borrow the high-resolution timer from the hidden window....
+  usablePerfObj = Services.appShell.hiddenDOMWindow.performance;
+} else if (typeof performance !== "undefined") {
+  // we must be running in content space
+  // eslint-disable-next-line no-undef
+  usablePerfObj = performance;
+} else {
+  // This is a dummy object so this file doesn't crash in the node prerendering
+  // task.
+  usablePerfObj = {
+    now() {},
+    mark() {}
+  };
+}
+
+function _PerfService(options) {
+  // For testing, so that we can use a fake Window.performance object with
+  // known state.
+  if (options && options.performanceObj) {
+    this._perf = options.performanceObj;
+  } else {
+    this._perf = usablePerfObj;
+  }
+}
+
+
+_PerfService.prototype = {
+  /**
+   * Calls the underlying mark() method on the appropriate Window.performance
+   * object to add a mark with the given name to the appropriate performance
+   * timeline.
+   *
+   * @param  {String} name  the name to give the current mark
+   * @return {void}
+   */
+  mark: function mark(str) {
+    this._perf.mark(str);
+  },
+
+  /**
+   * Calls the underlying getEntriesByName on the appropriate Window.performance
+   * object.
+   *
+   * @param  {String} name
+   * @param  {String} type eg "mark"
+   * @return {Array}       Performance* objects
+   */
+  getEntriesByName: function getEntriesByName(name, type) {
+    return this._perf.getEntriesByName(name, type);
+  },
+
+  /**
+   * The timeOrigin property from the appropriate performance object.
+   * Used to ensure that timestamps from the add-on code and the content code
+   * are comparable.
+   *
+   * @note If this is called from a context without a window
+   * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden
+   * window, which appears to be the first created window (and thus
+   * timeOrigin) in the browser.  Note also, however, there is also a private
+   * hidden window, presumably for private browsing, which appears to be
+   * created dynamically later.  Exactly how/when that shows up needs to be
+   * investigated.
+   *
+   * @return {Number} A double of milliseconds with a precision of 0.5us.
+   */
+  get timeOrigin() {
+    return this._perf.timeOrigin;
+  },
+
+  /**
+   * Returns the "absolute" version of performance.now(), i.e. one that
+   * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)
+   * be comparable across both chrome and content.
+   *
+   * @return {Number}
+   */
+  absNow: function absNow() {
+    return this.timeOrigin + this._perf.now();
+  },
+
+  /**
+   * This returns the absolute startTime from the most recent performance.mark()
+   * with the given name.
+   *
+   * @param  {String} name  the name to lookup the start time for
+   *
+   * @return {Number}       the returned start time, as a DOMHighResTimeStamp
+   *
+   * @throws {Error}        "No Marks with the name ..." if none are available
+   *
+   * @note Always surround calls to this by try/catch.  Otherwise your code
+   * may fail when the `privacy.resistFingerprinting` pref is true.  When
+   * this pref is set, all attempts to get marks will likely fail, which will
+   * cause this method to throw.
+   *
+   * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)
+   * for more info.
+   */
+  getMostRecentAbsMarkStartByName(name) {
+    let entries = this.getEntriesByName(name, "mark");
+
+    if (!entries.length) {
+      throw new Error(`No marks with the name ${name}`);
+    }
+
+    let mostRecentEntry = entries[entries.length - 1];
+    return this._perf.timeOrigin + mostRecentEntry.startTime;
+  }
+};
+
+var perfService = new _PerfService();
+
+/***/ }),
+/* 32 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Topic", function() { return Topic; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Topics", function() { return Topics; });
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
+
+
+
+class Topic extends react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent {
+  render() {
+    const { url, name } = this.props;
+    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+      "li",
+      null,
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "a",
+        { key: name, className: "topic-link", href: url },
+        name
+      )
+    );
+  }
+}
+
+class Topics extends react__WEBPACK_IMPORTED_MODULE_1___default.a.PureComponent {
+  render() {
+    const { topics, read_more_endpoint } = this.props;
+    return react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+      "div",
+      { className: "topic" },
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "span",
+        null,
+        react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "pocket_read_more" })
+      ),
+      react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "ul",
+        null,
+        topics && topics.map(t => react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(Topic, { key: t.name, url: t.url, name: t.name }))
+      ),
+      read_more_endpoint && react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(
+        "a",
+        { className: "topic-read-more", href: read_more_endpoint },
+        react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "pocket_read_even_more" })
+      )
+    );
+  }
+}
+
+/***/ }),
+/* 33 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_TopSites", function() { return _TopSites; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TopSites", function() { return TopSites; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var _TopSitesConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(34);
+/* harmony import */ var content_src_components_CollapsibleSection_CollapsibleSection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27);
+/* harmony import */ var content_src_components_ComponentPerfTimer_ComponentPerfTimer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(30);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(16);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
+/* harmony import */ var common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(41);
+/* harmony import */ var _TopSiteForm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(44);
+/* harmony import */ var _TopSite__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(35);
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+
+
+
+
+
+
+
+
+
+
+
+function topSiteIconType(link) {
+  if (link.customScreenshotURL) {
+    return "custom_screenshot";
+  }
+  if (link.tippyTopIcon || link.faviconRef === "tippytop") {
+    return "tippytop";
+  }
+  if (link.faviconSize >= _TopSitesConstants__WEBPACK_IMPORTED_MODULE_1__["MIN_RICH_FAVICON_SIZE"]) {
+    return "rich_icon";
+  }
+  if (link.screenshot && link.faviconSize >= _TopSitesConstants__WEBPACK_IMPORTED_MODULE_1__["MIN_CORNER_FAVICON_SIZE"]) {
+    return "screenshot_with_icon";
+  }
+  if (link.screenshot) {
+    return "screenshot";
+  }
+  return "no_image";
+}
+
+/**
+ * Iterates through TopSites and counts types of images.
+ * @param acc Accumulator for reducer.
+ * @param topsite Entry in TopSites.
+ */
+function countTopSitesIconsTypes(topSites) {
+  const countTopSitesTypes = (acc, link) => {
+    acc[topSiteIconType(link)]++;
+    return acc;
+  };
+
+  return topSites.reduce(countTopSitesTypes, {
+    "custom_screenshot": 0,
+    "screenshot_with_icon": 0,
+    "screenshot": 0,
+    "tippytop": 0,
+    "rich_icon": 0,
+    "no_image": 0
+  });
+}
+
+class _TopSites extends react__WEBPACK_IMPORTED_MODULE_6___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.onFormClose = this.onFormClose.bind(this);
+  }
+
+  /**
+   * Dispatch session statistics about the quality of TopSites icons and pinned count.
+   */
+  _dispatchTopSitesStats() {
+    const topSites = this._getVisibleTopSites();
+    const topSitesIconsStats = countTopSitesIconsTypes(topSites);
+    const topSitesPinned = topSites.filter(site => !!site.isPinned).length;
+    // Dispatch telemetry event with the count of TopSites images types.
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SAVE_SESSION_PERF_DATA,
+      data: { topsites_icon_stats: topSitesIconsStats, topsites_pinned: topSitesPinned }
+    }));
+  }
+
+  /**
+   * Return the TopSites that are visible based on prefs and window width.
+   */
+  _getVisibleTopSites() {
+    // We hide 2 sites per row when not in the wide layout.
+    let sitesPerRow = common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_7__["TOP_SITES_MAX_SITES_PER_ROW"];
+    // $break-point-widest = 1072px (from _variables.scss)
+    if (!global.matchMedia(`(min-width: 1072px)`).matches) {
+      sitesPerRow -= 2;
+    }
+    return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);
+  }
+
+  componentDidUpdate() {
+    this._dispatchTopSitesStats();
+  }
+
+  componentDidMount() {
+    this._dispatchTopSitesStats();
+  }
+
+  onFormClose() {
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({
+      source: _TopSitesConstants__WEBPACK_IMPORTED_MODULE_1__["TOP_SITES_SOURCE"],
+      event: "TOP_SITES_EDIT_CLOSE"
+    }));
+    this.props.dispatch({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOP_SITES_CANCEL_EDIT });
+  }
+
+  render() {
+    const { props } = this;
+    const { editForm } = props.TopSites;
+
+    return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+      content_src_components_ComponentPerfTimer_ComponentPerfTimer__WEBPACK_IMPORTED_MODULE_3__["ComponentPerfTimer"],
+      { id: "topsites", initialized: props.TopSites.initialized, dispatch: props.dispatch },
+      react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+        content_src_components_CollapsibleSection_CollapsibleSection__WEBPACK_IMPORTED_MODULE_2__["CollapsibleSection"],
+        {
+          className: "top-sites",
+          icon: "topsites",
+          id: "topsites",
+          title: { id: "header_top_sites" },
+          extraMenuOptions: ["AddTopSite"],
+          showPrefName: "feeds.topsites",
+          eventSource: _TopSitesConstants__WEBPACK_IMPORTED_MODULE_1__["TOP_SITES_SOURCE"],
+          collapsed: props.TopSites.pref ? props.TopSites.pref.collapsed : undefined,
+          isFirst: props.isFirst,
+          isLast: props.isLast,
+          dispatch: props.dispatch },
+        react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(_TopSite__WEBPACK_IMPORTED_MODULE_9__["TopSiteList"], { TopSites: props.TopSites, TopSitesRows: props.TopSitesRows, dispatch: props.dispatch, intl: props.intl, topSiteIconType: topSiteIconType }),
+        react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+          "div",
+          { className: "edit-topsites-wrapper" },
+          editForm && react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+            "div",
+            { className: "edit-topsites" },
+            react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("div", { className: "modal-overlay", onClick: this.onFormClose }),
+            react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(
+              "div",
+              { className: "modal" },
+              react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement(_TopSiteForm__WEBPACK_IMPORTED_MODULE_8__["TopSiteForm"], _extends({
+                site: props.TopSites.rows[editForm.index],
+                onClose: this.onFormClose,
+                dispatch: this.props.dispatch,
+                intl: this.props.intl
+              }, editForm))
+            )
+          )
+        )
+      )
+    );
+  }
+}
+
+const TopSites = Object(react_redux__WEBPACK_IMPORTED_MODULE_4__["connect"])(state => ({
+  TopSites: state.TopSites,
+  Prefs: state.Prefs,
+  TopSitesRows: state.Prefs.values.topSitesRows
+}))(Object(react_intl__WEBPACK_IMPORTED_MODULE_5__["injectIntl"])(_TopSites));
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
+/* 34 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TOP_SITES_SOURCE", function() { return TOP_SITES_SOURCE; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TOP_SITES_CONTEXT_MENU_OPTIONS", function() { return TOP_SITES_CONTEXT_MENU_OPTIONS; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MIN_RICH_FAVICON_SIZE", function() { return MIN_RICH_FAVICON_SIZE; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MIN_CORNER_FAVICON_SIZE", function() { return MIN_CORNER_FAVICON_SIZE; });
+const TOP_SITES_SOURCE = "TOP_SITES";
+const TOP_SITES_CONTEXT_MENU_OPTIONS = ["CheckPinTopSite", "EditTopSite", "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl", "DeleteUrl"];
+// minimum size necessary to show a rich icon instead of a screenshot
+const MIN_RICH_FAVICON_SIZE = 96;
+// minimum size necessary to show any icon in the top left corner with a screenshot
+const MIN_CORNER_FAVICON_SIZE = 16;
+
+/***/ }),
+/* 35 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TopSiteLink", function() { return TopSiteLink; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TopSite", function() { return TopSite; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TopSitePlaceholder", function() { return TopSitePlaceholder; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_TopSiteList", function() { return _TopSiteList; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TopSiteList", function() { return TopSiteList; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _TopSitesConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(34);
+/* harmony import */ var content_src_components_LinkMenu_LinkMenu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(24);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var content_src_lib_screenshot_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(26);
+/* harmony import */ var common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(41);
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+
+
+
+
+
+
+
+
+class TopSiteLink extends react__WEBPACK_IMPORTED_MODULE_4___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.state = { screenshotImage: null };
+    this.onDragEvent = this.onDragEvent.bind(this);
+  }
+
+  /*
+   * Helper to determine whether the drop zone should allow a drop. We only allow
+   * dropping top sites for now.
+   */
+  _allowDrop(e) {
+    return e.dataTransfer.types.includes("text/topsite-index");
+  }
+
+  onDragEvent(event) {
+    switch (event.type) {
+      case "click":
+        // Stop any link clicks if we started any dragging
+        if (this.dragged) {
+          event.preventDefault();
+        }
+        break;
+      case "dragstart":
+        this.dragged = true;
+        event.dataTransfer.effectAllowed = "move";
+        event.dataTransfer.setData("text/topsite-index", this.props.index);
+        event.target.blur();
+        this.props.onDragEvent(event, this.props.index, this.props.link, this.props.title);
+        break;
+      case "dragend":
+        this.props.onDragEvent(event);
+        break;
+      case "dragenter":
+      case "dragover":
+      case "drop":
+        if (this._allowDrop(event)) {
+          event.preventDefault();
+          this.props.onDragEvent(event, this.props.index);
+        }
+        break;
+      case "mousedown":
+        // Reset at the first mouse event of a potential drag
+        this.dragged = false;
+        break;
+    }
+  }
+
+  /**
+   * Helper to obtain the next state based on nextProps and prevState.
+   *
+   * NOTE: Rename this method to getDerivedStateFromProps when we update React
+   *       to >= 16.3. We will need to update tests as well. We cannot rename this
+   *       method to getDerivedStateFromProps now because there is a mismatch in
+   *       the React version that we are using for both testing and production.
+   *       (i.e. react-test-render => "16.3.2", react => "16.2.0").
+   *
+   * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.
+   */
+  static getNextStateFromProps(nextProps, prevState) {
+    const { screenshot } = nextProps.link;
+    const imageInState = content_src_lib_screenshot_utils__WEBPACK_IMPORTED_MODULE_5__["ScreenshotUtils"].isRemoteImageLocal(prevState.screenshotImage, screenshot);
+    if (imageInState) {
+      return null;
+    }
+
+    // Since image was updated, attempt to revoke old image blob URL, if it exists.
+    content_src_lib_screenshot_utils__WEBPACK_IMPORTED_MODULE_5__["ScreenshotUtils"].maybeRevokeBlobObjectURL(prevState.screenshotImage);
+
+    return { screenshotImage: content_src_lib_screenshot_utils__WEBPACK_IMPORTED_MODULE_5__["ScreenshotUtils"].createLocalImageObject(screenshot) };
+  }
+
+  // NOTE: Remove this function when we update React to >= 16.3 since React will
+  //       call getDerivedStateFromProps automatically. We will also need to
+  //       rename getNextStateFromProps to getDerivedStateFromProps.
+  componentWillMount() {
+    const nextState = TopSiteLink.getNextStateFromProps(this.props, this.state);
+    if (nextState) {
+      this.setState(nextState);
+    }
+  }
+
+  // NOTE: Remove this function when we update React to >= 16.3 since React will
+  //       call getDerivedStateFromProps automatically. We will also need to
+  //       rename getNextStateFromProps to getDerivedStateFromProps.
+  componentWillReceiveProps(nextProps) {
+    const nextState = TopSiteLink.getNextStateFromProps(nextProps, this.state);
+    if (nextState) {
+      this.setState(nextState);
+    }
+  }
+
+  componentWillUnmount() {
+    content_src_lib_screenshot_utils__WEBPACK_IMPORTED_MODULE_5__["ScreenshotUtils"].maybeRevokeBlobObjectURL(this.state.screenshotImage);
+  }
+
+  render() {
+    const { children, className, defaultStyle, isDraggable, link, onClick, title } = this.props;
+    const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : ""}${link.isDragged ? " dragged" : ""}`;
+    const { tippyTopIcon, faviconSize } = link;
+    const [letterFallback] = title;
+    let imageClassName;
+    let imageStyle;
+    let showSmallFavicon = false;
+    let smallFaviconStyle;
+    let smallFaviconFallback;
+    let hasScreenshotImage = this.state.screenshotImage && this.state.screenshotImage.url;
+    if (defaultStyle) {
+      // force no styles (letter fallback) even if the link has imagery
+      smallFaviconFallback = false;
+    } else if (link.customScreenshotURL) {
+      // assume high quality custom screenshot and use rich icon styles and class names
+      imageClassName = "top-site-icon rich-icon";
+      imageStyle = {
+        backgroundColor: link.backgroundColor,
+        backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : "none"
+      };
+    } else if (tippyTopIcon || faviconSize >= _TopSitesConstants__WEBPACK_IMPORTED_MODULE_2__["MIN_RICH_FAVICON_SIZE"]) {
+      // styles and class names for top sites with rich icons
+      imageClassName = "top-site-icon rich-icon";
+      imageStyle = {
+        backgroundColor: link.backgroundColor,
+        backgroundImage: `url(${tippyTopIcon || link.favicon})`
+      };
+    } else {
+      // styles and class names for top sites with screenshot + small icon in top left corner
+      imageClassName = `screenshot${hasScreenshotImage ? " active" : ""}`;
+      imageStyle = { backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : "none" };
+
+      // only show a favicon in top left if it's greater than 16x16
+      if (faviconSize >= _TopSitesConstants__WEBPACK_IMPORTED_MODULE_2__["MIN_CORNER_FAVICON_SIZE"]) {
+        showSmallFavicon = true;
+        smallFaviconStyle = { backgroundImage: `url(${link.favicon})` };
+      } else if (hasScreenshotImage) {
+        // Don't show a small favicon if there is no screenshot, because that
+        // would result in two fallback icons
+        showSmallFavicon = true;
+        smallFaviconFallback = true;
+      }
+    }
+    let draggableProps = {};
+    if (isDraggable) {
+      draggableProps = {
+        onClick: this.onDragEvent,
+        onDragEnd: this.onDragEvent,
+        onDragStart: this.onDragEvent,
+        onMouseDown: this.onDragEvent
+      };
+    }
+    return react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+      "li",
+      _extends({ className: topSiteOuterClassName, onDrop: this.onDragEvent, onDragOver: this.onDragEvent, onDragEnter: this.onDragEvent, onDragLeave: this.onDragEvent }, draggableProps),
+      react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+        "div",
+        { className: "top-site-inner" },
+        react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+          "a",
+          { href: link.url, onClick: onClick },
+          react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+            "div",
+            { className: "tile", "aria-hidden": true, "data-fallback": letterFallback },
+            react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", { className: imageClassName, style: imageStyle }),
+            showSmallFavicon && react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", {
+              className: "top-site-icon default-icon",
+              "data-fallback": smallFaviconFallback && letterFallback,
+              style: smallFaviconStyle })
+          ),
+          react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+            "div",
+            { className: `title ${link.isPinned ? "pinned" : ""}` },
+            link.isPinned && react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("div", { className: "icon icon-pin-small" }),
+            react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+              "span",
+              { dir: "auto" },
+              title
+            )
+          )
+        ),
+        children
+      )
+    );
+  }
+}
+TopSiteLink.defaultProps = {
+  title: "",
+  link: {},
+  isDraggable: true
+};
+
+class TopSite extends react__WEBPACK_IMPORTED_MODULE_4___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.state = { showContextMenu: false };
+    this.onLinkClick = this.onLinkClick.bind(this);
+    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);
+    this.onMenuUpdate = this.onMenuUpdate.bind(this);
+  }
+
+  /**
+   * Report to telemetry additional information about the item.
+   */
+  _getTelemetryInfo() {
+    const value = { icon_type: this.props.link.iconType };
+    // Filter out "not_pinned" type for being the default
+    if (this.props.link.isPinned) {
+      value.card_type = "pinned";
+    }
+    return { value };
+  }
+
+  userEvent(event) {
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent(Object.assign({
+      event,
+      source: _TopSitesConstants__WEBPACK_IMPORTED_MODULE_2__["TOP_SITES_SOURCE"],
+      action_position: this.props.index
+    }, this._getTelemetryInfo())));
+  }
+
+  onLinkClick(event) {
+    this.userEvent("CLICK");
+
+    // Specially handle a top site link click for "typed" frecency bonus as
+    // specified as a property on the link.
+    event.preventDefault();
+    const { altKey, button, ctrlKey, metaKey, shiftKey } = event;
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].OnlyToMain({
+      type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].OPEN_LINK,
+      data: Object.assign(this.props.link, { event: { altKey, button, ctrlKey, metaKey, shiftKey } })
+    }));
+  }
+
+  onMenuButtonClick(event) {
+    event.preventDefault();
+    this.props.onActivate(this.props.index);
+    this.setState({ showContextMenu: true });
+  }
+
+  onMenuUpdate(showContextMenu) {
+    this.setState({ showContextMenu });
+  }
+
+  render() {
+    const { props } = this;
+    const { link } = props;
+    const isContextMenuOpen = this.state.showContextMenu && props.activeIndex === props.index;
+    const title = link.label || link.hostname;
+    return react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+      TopSiteLink,
+      _extends({}, props, { onClick: this.onLinkClick, onDragEvent: this.props.onDragEvent, className: `${props.className || ""}${isContextMenuOpen ? " active" : ""}`, title: title }),
+      react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+        "div",
+        null,
+        react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+          "button",
+          { className: "context-menu-button icon", onClick: this.onMenuButtonClick },
+          react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+            "span",
+            { className: "sr-only" },
+            react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__["FormattedMessage"], { id: "context_menu_button_sr", values: { title } })
+          )
+        ),
+        isContextMenuOpen && react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(content_src_components_LinkMenu_LinkMenu__WEBPACK_IMPORTED_MODULE_3__["LinkMenu"], {
+          dispatch: props.dispatch,
+          index: props.index,
+          onUpdate: this.onMenuUpdate,
+          options: _TopSitesConstants__WEBPACK_IMPORTED_MODULE_2__["TOP_SITES_CONTEXT_MENU_OPTIONS"],
+          site: link,
+          siteInfo: this._getTelemetryInfo(),
+          source: _TopSitesConstants__WEBPACK_IMPORTED_MODULE_2__["TOP_SITES_SOURCE"] })
+      )
+    );
+  }
+}
+TopSite.defaultProps = {
+  link: {},
+  onActivate() {}
+};
+
+class TopSitePlaceholder extends react__WEBPACK_IMPORTED_MODULE_4___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.onEditButtonClick = this.onEditButtonClick.bind(this);
+  }
+
+  onEditButtonClick() {
+    this.props.dispatch({ type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOP_SITES_EDIT, data: { index: this.props.index } });
+  }
+
+  render() {
+    return react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+      TopSiteLink,
+      _extends({}, this.props, { className: `placeholder ${this.props.className || ""}`, isDraggable: false }),
+      react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement("button", { className: "context-menu-button edit-button icon",
+        title: this.props.intl.formatMessage({ id: "edit_topsites_edit_button" }),
+        onClick: this.onEditButtonClick })
+    );
+  }
+}
+
+class _TopSiteList extends react__WEBPACK_IMPORTED_MODULE_4___default.a.PureComponent {
+  static get DEFAULT_STATE() {
+    return {
+      activeIndex: null,
+      draggedIndex: null,
+      draggedSite: null,
+      draggedTitle: null,
+      topSitesPreview: null
+    };
+  }
+
+  constructor(props) {
+    super(props);
+    this.state = _TopSiteList.DEFAULT_STATE;
+    this.onDragEvent = this.onDragEvent.bind(this);
+    this.onActivate = this.onActivate.bind(this);
+  }
+
+  componentWillReceiveProps(nextProps) {
+    if (this.state.draggedSite) {
+      const prevTopSites = this.props.TopSites && this.props.TopSites.rows;
+      const newTopSites = nextProps.TopSites && nextProps.TopSites.rows;
+      if (prevTopSites && prevTopSites[this.state.draggedIndex] && prevTopSites[this.state.draggedIndex].url === this.state.draggedSite.url && (!newTopSites[this.state.draggedIndex] || newTopSites[this.state.draggedIndex].url !== this.state.draggedSite.url)) {
+        // We got the new order from the redux store via props. We can clear state now.
+        this.setState(_TopSiteList.DEFAULT_STATE);
+      }
+    }
+  }
+
+  userEvent(event, index) {
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].UserEvent({
+      event,
+      source: _TopSitesConstants__WEBPACK_IMPORTED_MODULE_2__["TOP_SITES_SOURCE"],
+      action_position: index
+    }));
+  }
+
+  onDragEvent(event, index, link, title) {
+    switch (event.type) {
+      case "dragstart":
+        this.dropped = false;
+        this.setState({
+          draggedIndex: index,
+          draggedSite: link,
+          draggedTitle: title,
+          activeIndex: null
+        });
+        this.userEvent("DRAG", index);
+        break;
+      case "dragend":
+        if (!this.dropped) {
+          // If there was no drop event, reset the state to the default.
+          this.setState(_TopSiteList.DEFAULT_STATE);
+        }
+        break;
+      case "dragenter":
+        if (index === this.state.draggedIndex) {
+          this.setState({ topSitesPreview: null });
+        } else {
+          this.setState({ topSitesPreview: this._makeTopSitesPreview(index) });
+        }
+        break;
+      case "drop":
+        if (index !== this.state.draggedIndex) {
+          this.dropped = true;
+          this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+            type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].TOP_SITES_INSERT,
+            data: {
+              site: {
+                url: this.state.draggedSite.url,
+                label: this.state.draggedTitle,
+                customScreenshotURL: this.state.draggedSite.customScreenshotURL
+              },
+              index,
+              draggedFromIndex: this.state.draggedIndex
+            }
+          }));
+          this.userEvent("DROP", index);
+        }
+        break;
+    }
+  }
+
+  _getTopSites() {
+    // Make a copy of the sites to truncate or extend to desired length
+    let topSites = this.props.TopSites.rows.slice();
+    topSites.length = this.props.TopSitesRows * common_Reducers_jsm__WEBPACK_IMPORTED_MODULE_6__["TOP_SITES_MAX_SITES_PER_ROW"];
+    return topSites;
+  }
+
+  /**
+   * Make a preview of the topsites that will be the result of dropping the currently
+   * dragged site at the specified index.
+   */
+  _makeTopSitesPreview(index) {
+    const topSites = this._getTopSites();
+    topSites[this.state.draggedIndex] = null;
+    const pinnedOnly = topSites.map(site => site && site.isPinned ? site : null);
+    const unpinned = topSites.filter(site => site && !site.isPinned);
+    const siteToInsert = Object.assign({}, this.state.draggedSite, { isPinned: true, isDragged: true });
+    if (!pinnedOnly[index]) {
+      pinnedOnly[index] = siteToInsert;
+    } else {
+      // Find the hole to shift the pinned site(s) towards. We shift towards the
+      // hole left by the site being dragged.
+      let holeIndex = index;
+      const indexStep = index > this.state.draggedIndex ? -1 : 1;
+      while (pinnedOnly[holeIndex]) {
+        holeIndex += indexStep;
+      }
+
+      // Shift towards the hole.
+      const shiftingStep = index > this.state.draggedIndex ? 1 : -1;
+      while (holeIndex !== index) {
+        const nextIndex = holeIndex + shiftingStep;
+        pinnedOnly[holeIndex] = pinnedOnly[nextIndex];
+        holeIndex = nextIndex;
+      }
+      pinnedOnly[index] = siteToInsert;
+    }
+
+    // Fill in the remaining holes with unpinned sites.
+    const preview = pinnedOnly;
+    for (let i = 0; i < preview.length; i++) {
+      if (!preview[i]) {
+        preview[i] = unpinned.shift() || null;
+      }
+    }
+
+    return preview;
+  }
+
+  onActivate(index) {
+    this.setState({ activeIndex: index });
+  }
+
+  render() {
+    const { props } = this;
+    const topSites = this.state.topSitesPreview || this._getTopSites();
+    const topSitesUI = [];
+    const commonProps = {
+      onDragEvent: this.onDragEvent,
+      dispatch: props.dispatch,
+      intl: props.intl
+    };
+    // We assign a key to each placeholder slot. We need it to be independent
+    // of the slot index (i below) so that the keys used stay the same during
+    // drag and drop reordering and the underlying DOM nodes are reused.
+    // This mostly (only?) affects linux so be sure to test on linux before changing.
+    let holeIndex = 0;
+
+    // On narrow viewports, we only show 6 sites per row. We'll mark the rest as
+    // .hide-for-narrow to hide in CSS via @media query.
+    const maxNarrowVisibleIndex = props.TopSitesRows * 6;
+
+    for (let i = 0, l = topSites.length; i < l; i++) {
+      const link = topSites[i] && Object.assign({}, topSites[i], { iconType: this.props.topSiteIconType(topSites[i]) });
+      const slotProps = {
+        key: link ? link.url : holeIndex++,
+        index: i
+      };
+      if (i >= maxNarrowVisibleIndex) {
+        slotProps.className = "hide-for-narrow";
+      }
+      topSitesUI.push(!link ? react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(TopSitePlaceholder, _extends({}, slotProps, commonProps)) : react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(TopSite, _extends({
+        link: link,
+        activeIndex: this.state.activeIndex,
+        onActivate: this.onActivate
+      }, slotProps, commonProps)));
+    }
+    return react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(
+      "ul",
+      { className: `top-sites-list${this.state.draggedSite ? " dnd-active" : ""}` },
+      topSitesUI
+    );
+  }
+}
+
+const TopSiteList = Object(react_intl__WEBPACK_IMPORTED_MODULE_1__["injectIntl"])(_TopSiteList);
+
+/***/ }),
+/* 36 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_StartupOverlay", function() { return _StartupOverlay; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StartupOverlay", function() { return StartupOverlay; });
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16);
+/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
+
+
+
+
+
+class _StartupOverlay extends react__WEBPACK_IMPORTED_MODULE_3___default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.onInputChange = this.onInputChange.bind(this);
+    this.onSubmit = this.onSubmit.bind(this);
+    this.clickSkip = this.clickSkip.bind(this);
+    this.initScene = this.initScene.bind(this);
+    this.removeOverlay = this.removeOverlay.bind(this);
+    this.onInputInvalid = this.onInputInvalid.bind(this);
+
+    this.state = {
+      emailInput: "",
+      overlayRemoved: false
+    };
+    this.initScene();
+  }
+
+  initScene() {
+    // Timeout to allow the scene to render once before attaching the attribute
+    // to trigger the animation.
+    setTimeout(() => {
+      this.setState({ show: true });
+    }, 10);
+  }
+
+  removeOverlay() {
+    window.removeEventListener("visibilitychange", this.removeOverlay);
+    this.setState({ show: false });
+    setTimeout(() => {
+      // Allow scrolling and fully remove overlay after animation finishes.
+      document.body.classList.remove("welcome");
+      this.setState({ overlayRemoved: true });
+    }, 400);
+  }
+
+  onInputChange(e) {
+    let error = e.target.previousSibling;
+    this.setState({ emailInput: e.target.value });
+    error.classList.remove("active");
+    e.target.classList.remove("invalid");
+  }
+
+  onSubmit() {
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_1__["actionCreators"].UserEvent({ event: "SUBMIT_EMAIL" }));
+    window.addEventListener("visibilitychange", this.removeOverlay);
+  }
+
+  clickSkip() {
+    this.props.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_1__["actionCreators"].UserEvent({ event: "SKIPPED_SIGNIN" }));
+    this.removeOverlay();
+  }
+
+  onInputInvalid(e) {
+    let error = e.target.previousSibling;
+    error.classList.add("active");
+    e.target.classList.add("invalid");
+    e.preventDefault(); // Override built-in form validation popup
+    e.target.focus();
+  }
+
+  render() {
+    // When skipping the onboarding tour we show AS but we are still on
+    // about:welcome, prop.isFirstrun is true and StartupOverlay is rendered
+    if (this.state.overlayRemoved) {
+      return null;
+    }
+
+    let termsLink = react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+      "a",
+      { href: "https://accounts.firefox.com/legal/terms", target: "_blank", rel: "noopener noreferrer" },
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "firstrun_terms_of_service" })
+    );
+    let privacyLink = react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+      "a",
+      { href: "https://accounts.firefox.com/legal/privacy", target: "_blank", rel: "noopener noreferrer" },
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "firstrun_privacy_notice" })
+    );
+    return react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+      "div",
+      { className: `overlay-wrapper ${this.state.show ? "show " : ""}` },
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("div", { className: "background" }),
+      react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+        "div",
+        { className: "firstrun-scene" },
+        react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+          "div",
+          { className: "fxaccounts-container" },
+          react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+            "div",
+            { className: "firstrun-left-divider" },
+            react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+              "h1",
+              { className: "firstrun-title" },
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "firstrun_title" })
+            ),
+            react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+              "p",
+              { className: "firstrun-content" },
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "firstrun_content" })
+            ),
+            react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+              "a",
+              { className: "firstrun-link", href: "https://www.mozilla.org/firefox/features/sync/", target: "_blank", rel: "noopener noreferrer" },
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "firstrun_learn_more_link" })
+            )
+          ),
+          react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+            "div",
+            { className: "firstrun-sign-in" },
+            react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+              "p",
+              { className: "form-header" },
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "firstrun_form_header" }),
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+                "span",
+                { className: "sub-header" },
+                react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "firstrun_form_sub_header" })
+              )
+            ),
+            react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+              "form",
+              { method: "get", action: "https://accounts.firefox.com", target: "_blank", rel: "noopener noreferrer", onSubmit: this.onSubmit },
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { name: "service", type: "hidden", value: "sync" }),
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { name: "action", type: "hidden", value: "email" }),
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { name: "context", type: "hidden", value: "fx_desktop_v3" }),
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { name: "entrypoint", type: "hidden", value: "activity-stream-firstrun" }),
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { name: "utm_source", type: "hidden", value: "activity-stream" }),
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { name: "utm_campaign", type: "hidden", value: "firstrun" }),
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+                "span",
+                { className: "error" },
+                this.props.intl.formatMessage({ id: "firstrun_invalid_input" })
+              ),
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement("input", { className: "email-input", name: "email", type: "email", required: "true", onInvalid: this.onInputInvalid, placeholder: this.props.intl.formatMessage({ id: "firstrun_email_input_placeholder" }), onChange: this.onInputChange }),
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+                "div",
+                { className: "extra-links" },
+                react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], {
+                  id: "firstrun_extra_legal_links",
+                  values: {
+                    terms: termsLink,
+                    privacy: privacyLink
+                  } })
+              ),
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+                "button",
+                { className: "continue-button", type: "submit" },
+                react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "firstrun_continue_to_login" })
+              )
+            ),
+            react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(
+              "button",
+              { className: "skip-button", disabled: !!this.state.emailInput, onClick: this.clickSkip },
+              react__WEBPACK_IMPORTED_MODULE_3___default.a.createElement(react_intl__WEBPACK_IMPORTED_MODULE_0__["FormattedMessage"], { id: "firstrun_skip_login" })
+            )
+          )
+        )
+      )
+    );
+  }
+}
+
+const StartupOverlay = Object(react_redux__WEBPACK_IMPORTED_MODULE_2__["connect"])()(Object(react_intl__WEBPACK_IMPORTED_MODULE_0__["injectIntl"])(_StartupOverlay));
+
+/***/ }),
+/* 37 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DetectUserSessionStart", function() { return DetectUserSessionStart; });
+/* harmony import */ var common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var common_PerfService_jsm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31);
+
+
+
+const VISIBLE = "visible";
+const VISIBILITY_CHANGE_EVENT = "visibilitychange";
+
+class DetectUserSessionStart {
+  constructor(store, options = {}) {
+    this._store = store;
+    // Overrides for testing
+    this.document = options.document || global.document;
+    this._perfService = options.perfService || common_PerfService_jsm__WEBPACK_IMPORTED_MODULE_1__["perfService"];
+    this._onVisibilityChange = this._onVisibilityChange.bind(this);
+  }
+
+  /**
+   * sendEventOrAddListener - Notify immediately if the page is already visible,
+   *                    or else set up a listener for when visibility changes.
+   *                    This is needed for accurate session tracking for telemetry,
+   *                    because tabs are pre-loaded.
+   */
+  sendEventOrAddListener() {
+    if (this.document.visibilityState === VISIBLE) {
+      // If the document is already visible, to the user, send a notification
+      // immediately that a session has started.
+      this._sendEvent();
+    } else {
+      // If the document is not visible, listen for when it does become visible.
+      this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+    }
+  }
+
+  /**
+   * _sendEvent - Sends a message to the main process to indicate the current
+   *              tab is now visible to the user, includes the
+   *              visibility_event_rcvd_ts time in ms from the UNIX epoch.
+   */
+  _sendEvent() {
+    this._perfService.mark("visibility_event_rcvd_ts");
+
+    try {
+      let visibility_event_rcvd_ts = this._perfService.getMostRecentAbsMarkStartByName("visibility_event_rcvd_ts");
+
+      this._store.dispatch(common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionCreators"].AlsoToMain({
+        type: common_Actions_jsm__WEBPACK_IMPORTED_MODULE_0__["actionTypes"].SAVE_SESSION_PERF_DATA,
+        data: { visibility_event_rcvd_ts }
+      }));
+    } catch (ex) {
+      // If this failed, it's likely because the `privacy.resistFingerprinting`
+      // pref is true.  We should at least not blow up.
+    }
+  }
+
+  /**
+   * _onVisibilityChange - If the visibility has changed to visible, sends a notification
+   *                      and removes the event listener. This should only be called once per tab.
+   */
+  _onVisibilityChange() {
+    if (this.document.visibilityState === VISIBLE) {
+      this._sendEvent();
+      this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+    }
+  }
+}
+/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
+
+/***/ }),
+/* 38 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
 
 // CONCATENATED MODULE: ./node_modules/fluent/src/parser.js
 /*  eslint no-magic-numbers: [0]  */
 
 const MAX_PLACEABLES = 100;
@@ -3083,17 +6737,17 @@ class CachedIterable {
     if (seen.length === 0 || seen[seen.length - 1].done === false) {
       seen.push(iterator.next());
     }
   }
 }
 // CONCATENATED MODULE: ./node_modules/fluent/src/fallback.js
 function _asyncIterator(iterable) { if (typeof Symbol === "function") { if (Symbol.asyncIterator) { var method = iterable[Symbol.asyncIterator]; if (method != null) return method.call(iterable); } if (Symbol.iterator) { return iterable[Symbol.iterator](); } } throw new TypeError("Object is not async iterable"); }
 
-function fallback__asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
+function fallback_asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
 
 /*
  * @overview
  *
  * Functions for managing ordered sequences of MessageContexts.
  *
  * An ordered iterable of MessageContext instances can represent the current
  * negotiated fallback chain of languages.  This iterable can be used to find
@@ -3165,17 +6819,17 @@ function getContextForId(iterable, id) {
  * Asynchronously map an identifier or an array of identifiers to the best
  * `MessageContext` instance(s).
  *
  * @param {AsyncIterable} iterable
  * @param {string|Array<string>} ids
  * @returns {Promise<MessageContext|Array<MessageContext>>}
  */
 let mapContextAsync = (() => {
-  var _ref = fallback__asyncToGenerator(function* (iterable, ids) {
+  var _ref = fallback_asyncToGenerator(function* (iterable, ids) {
     if (!Array.isArray(ids)) {
       var _iteratorNormalCompletion = true;
       var _didIteratorError = false;
       var _iteratorError = undefined;
 
       try {
         for (var _iterator = _asyncIterator(iterable), _step, _value; _step = yield _iterator.next(), _iteratorNormalCompletion = _step.done, _value = yield _step.value, !_iteratorNormalCompletion; _iteratorNormalCompletion = true) {
           const context = _value;
@@ -3270,31 +6924,25 @@ function ftl(strings) {
   const lines = code.split("\n").filter(nonBlank);
   const indents = lines.map(countIndent);
   const common = Math.min(...indents);
   const indent = new RegExp(`^\\s{${common}}`);
 
   return lines.map(line => line.replace(indent, "")).join("\n");
 }
 // CONCATENATED MODULE: ./node_modules/fluent/src/index.js
-/* unused concated harmony import _parse */
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, false, function() { return parse; });
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "b", function() { return context_MessageContext; });
-/* unused concated harmony import MessageArgument */
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, false, function() { return FluentType; });
-/* unused concated harmony import MessageNumberArgument */
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, false, function() { return FluentNumber; });
-/* unused concated harmony import MessageDateTimeArgument */
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, false, function() { return FluentDateTime; });
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "a", function() { return CachedIterable; });
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "c", function() { return mapContextSync; });
-/* unused concated harmony import mapContextAsync */
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, false, function() { return mapContextAsync; });
-/* unused concated harmony import ftl */
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, false, function() { return ftl; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "_parse", function() { return parse; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "MessageContext", function() { return context_MessageContext; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "MessageArgument", function() { return FluentType; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "MessageNumberArgument", function() { return FluentNumber; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "MessageDateTimeArgument", function() { return FluentDateTime; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "CachedIterable", function() { return CachedIterable; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "mapContextSync", function() { return mapContextSync; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "mapContextAsync", function() { return mapContextAsync; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "ftl", function() { return ftl; });
 /*
  * @module fluent
  * @overview
  *
  * `fluent` is a JavaScript implementation of Project Fluent, a localization
  * framework designed to unleash the expressive power of the natural language.
  *
  */
@@ -3305,2398 +6953,30 @@ function ftl(strings) {
 
 
 
 
 
 
 
 /***/ }),
-/* 11 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (immutable) */ __webpack_exports__["b"] = initStore;
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_redux__ = __webpack_require__(26);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_redux__);
-/* eslint-env mozilla/frame-script */
-
-
-
-
-const MERGE_STORE_ACTION = "NEW_TAB_INITIAL_STATE";
-/* unused harmony export MERGE_STORE_ACTION */
-
-const OUTGOING_MESSAGE_NAME = "ActivityStream:ContentToMain";
-/* harmony export (immutable) */ __webpack_exports__["a"] = OUTGOING_MESSAGE_NAME;
-
-const INCOMING_MESSAGE_NAME = "ActivityStream:MainToContent";
-/* unused harmony export INCOMING_MESSAGE_NAME */
-
-const EARLY_QUEUED_ACTIONS = [__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SAVE_SESSION_PERF_DATA, __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].PAGE_PRERENDERED];
-/* unused harmony export EARLY_QUEUED_ACTIONS */
-
-
-/**
- * A higher-order function which returns a reducer that, on MERGE_STORE action,
- * will return the action.data object merged into the previous state.
- *
- * For all other actions, it merely calls mainReducer.
- *
- * Because we want this to merge the entire state object, it's written as a
- * higher order function which takes the main reducer (itself often a call to
- * combineReducers) as a parameter.
- *
- * @param  {function} mainReducer reducer to call if action != MERGE_STORE_ACTION
- * @return {function}             a reducer that, on MERGE_STORE_ACTION action,
- *                                will return the action.data object merged
- *                                into the previous state, and the result
- *                                of calling mainReducer otherwise.
- */
-function mergeStateReducer(mainReducer) {
-  return (prevState, action) => {
-    if (action.type === MERGE_STORE_ACTION) {
-      return Object.assign({}, prevState, action.data);
-    }
-
-    return mainReducer(prevState, action);
-  };
-}
-
-/**
- * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary
- */
-const messageMiddleware = store => next => action => {
-  const skipLocal = action.meta && action.meta.skipLocal;
-  if (__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["d" /* actionUtils */].isSendToMain(action)) {
-    RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);
-  }
-  if (!skipLocal) {
-    next(action);
-  }
-};
-
-const rehydrationMiddleware = store => next => action => {
-  if (store._didRehydrate) {
-    return next(action);
-  }
-
-  const isMergeStoreAction = action.type === MERGE_STORE_ACTION;
-  const isRehydrationRequest = action.type === __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].NEW_TAB_STATE_REQUEST;
-
-  if (isRehydrationRequest) {
-    store._didRequestInitialState = true;
-    return next(action);
-  }
-
-  if (isMergeStoreAction) {
-    store._didRehydrate = true;
-    return next(action);
-  }
-
-  // If init happened after our request was made, we need to re-request
-  if (store._didRequestInitialState && action.type === __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].INIT) {
-    return next(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].NEW_TAB_STATE_REQUEST }));
-  }
-
-  if (__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["d" /* actionUtils */].isBroadcastToContent(action) || __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["d" /* actionUtils */].isSendToOneContent(action) || __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["d" /* actionUtils */].isSendToPreloaded(action)) {
-    // Note that actions received before didRehydrate will not be dispatched
-    // because this could negatively affect preloading and the the state
-    // will be replaced by rehydration anyway.
-    return null;
-  }
-
-  return next(action);
-};
-/* unused harmony export rehydrationMiddleware */
-
-
-/**
- * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives
- * the first action from main. This is useful for those actions for main which
- * require higher reliability, i.e. the action will not be lost in the case
- * that it gets sent before the main is ready to receive it. Conversely, any
- * actions allowed early are accepted to be ignorable or re-sendable.
- */
-const queueEarlyMessageMiddleware = store => next => action => {
-  if (store._receivedFromMain) {
-    next(action);
-  } else if (__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["d" /* actionUtils */].isFromMain(action)) {
-    next(action);
-    store._receivedFromMain = true;
-    // Sending out all the early actions as main is ready now
-    if (store._earlyActionQueue) {
-      store._earlyActionQueue.forEach(next);
-      store._earlyActionQueue = [];
-    }
-  } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {
-    store._earlyActionQueue = store._earlyActionQueue || [];
-    store._earlyActionQueue.push(action);
-  } else {
-    // Let any other type of action go through
-    next(action);
-  }
-};
-/* unused harmony export queueEarlyMessageMiddleware */
-
-
-/**
- * initStore - Create a store and listen for incoming actions
- *
- * @param  {object} reducers An object containing Redux reducers
- * @param  {object} intialState (optional) The initial state of the store, if desired
- * @return {object}          A redux store
- */
-function initStore(reducers, initialState) {
-  const store = Object(__WEBPACK_IMPORTED_MODULE_1_redux__["createStore"])(mergeStateReducer(Object(__WEBPACK_IMPORTED_MODULE_1_redux__["combineReducers"])(reducers)), initialState, global.RPMAddMessageListener && Object(__WEBPACK_IMPORTED_MODULE_1_redux__["applyMiddleware"])(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware));
-
-  store._didRehydrate = false;
-  store._didRequestInitialState = false;
-
-  if (global.RPMAddMessageListener) {
-    global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, msg => {
-      try {
-        store.dispatch(msg.data);
-      } catch (ex) {
-        console.error("Content msg:", msg, "Dispatch error: ", ex); // eslint-disable-line no-console
-        dump(`Content msg: ${JSON.stringify(msg)}\nDispatch error: ${ex}\n${ex.stack}`);
-      }
-    });
-  }
-
-  return store;
-}
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports) {
-
-module.exports = ReactDOM;
-
-/***/ }),
-/* 13 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);
-
-
-
-class ErrorBoundaryFallback extends __WEBPACK_IMPORTED_MODULE_1_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.windowObj = this.props.windowObj || window;
-    this.onClick = this.onClick.bind(this);
-  }
-
-  /**
-   * Since we only get here if part of the page has crashed, do a
-   * forced reload to give us the best chance at recovering.
-   */
-  onClick() {
-    this.windowObj.location.reload(true);
-  }
-
-  render() {
-    const defaultClass = "as-error-fallback";
-    let className;
-    if ("className" in this.props) {
-      className = `${this.props.className} ${defaultClass}`;
-    } else {
-      className = defaultClass;
-    }
-
-    // href="#" to force normal link styling stuff (eg cursor on hover)
-    return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-      "div",
-      { className: className },
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "div",
-        null,
-        __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], {
-          defaultMessage: "Oops, something went wrong loading this content.",
-          id: "error_fallback_default_info" })
-      ),
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "span",
-        null,
-        __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-          "a",
-          { href: "#", className: "reload-button", onClick: this.onClick },
-          __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], {
-            defaultMessage: "Refresh page to try again.",
-            id: "error_fallback_default_refresh_suggestion" })
-        )
-      )
-    );
-  }
-}
-/* unused harmony export ErrorBoundaryFallback */
-
-ErrorBoundaryFallback.defaultProps = { className: "as-error-fallback" };
-
-class ErrorBoundary extends __WEBPACK_IMPORTED_MODULE_1_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.state = { hasError: false };
-  }
-
-  componentDidCatch(error, info) {
-    this.setState({ hasError: true });
-  }
-
-  render() {
-    if (!this.state.hasError) {
-      return this.props.children;
-    }
-
-    return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(this.props.FallbackComponent, { className: this.props.className });
-  }
-}
-/* harmony export (immutable) */ __webpack_exports__["a"] = ErrorBoundary;
-
-
-ErrorBoundary.defaultProps = { FallbackComponent: ErrorBoundaryFallback };
-
-/***/ }),
-/* 14 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-
-
-const _OpenInPrivateWindow = site => ({
-  id: "menu_action_open_private_window",
-  icon: "new-window-private",
-  action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-    type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].OPEN_PRIVATE_WINDOW,
-    data: { url: site.url, referrer: site.referrer }
-  }),
-  userEvent: "OPEN_PRIVATE_WINDOW"
-});
-
-const GetPlatformString = platform => {
-  switch (platform) {
-    case "win":
-      return "menu_action_show_file_windows";
-    case "macosx":
-      return "menu_action_show_file_mac_os";
-    case "linux":
-      return "menu_action_show_file_linux";
-    default:
-      return "menu_action_show_file_default";
-  }
-};
-/* harmony export (immutable) */ __webpack_exports__["a"] = GetPlatformString;
-
-
-/**
- * List of functions that return items that can be included as menu options in a
- * LinkMenu. All functions take the site as the first parameter, and optionally
- * the index of the site.
- */
-const LinkMenuOptions = {
-  Separator: () => ({ type: "separator" }),
-  EmptyItem: () => ({ type: "empty" }),
-  RemoveBookmark: site => ({
-    id: "menu_action_remove_bookmark",
-    icon: "bookmark-added",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].DELETE_BOOKMARK_BY_ID,
-      data: site.bookmarkGuid
-    }),
-    userEvent: "BOOKMARK_DELETE"
-  }),
-  AddBookmark: site => ({
-    id: "menu_action_bookmark",
-    icon: "bookmark-hollow",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].BOOKMARK_URL,
-      data: { url: site.url, title: site.title, type: site.type }
-    }),
-    userEvent: "BOOKMARK_ADD"
-  }),
-  OpenInNewWindow: site => ({
-    id: "menu_action_open_new_window",
-    icon: "new-window",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].OPEN_NEW_WINDOW,
-      data: {
-        referrer: site.referrer,
-        typedBonus: site.typedBonus,
-        url: site.url
-      }
-    }),
-    userEvent: "OPEN_NEW_WINDOW"
-  }),
-  BlockUrl: (site, index, eventSource) => ({
-    id: "menu_action_dismiss",
-    icon: "dismiss",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].BLOCK_URL,
-      data: { url: site.url, pocket_id: site.pocket_id }
-    }),
-    impression: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].ImpressionStats({
-      source: eventSource,
-      block: 0,
-      tiles: [{ id: site.guid, pos: index }]
-    }),
-    userEvent: "BLOCK"
-  }),
-
-  // This is an option for web extentions which will result in remove items from
-  // memory and notify the web extenion, rather than using the built-in block list.
-  WebExtDismiss: (site, index, eventSource) => ({
-    id: "menu_action_webext_dismiss",
-    string_id: "menu_action_dismiss",
-    icon: "dismiss",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].WebExtEvent(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].WEBEXT_DISMISS, {
-      source: eventSource,
-      url: site.url,
-      action_position: index
-    })
-  }),
-  DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({
-    id: "menu_action_delete",
-    icon: "delete",
-    action: {
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].DIALOG_OPEN,
-      data: {
-        onConfirm: [__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].DELETE_HISTORY_URL, data: { url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid } }), __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent(Object.assign({ event: "DELETE", source: eventSource, action_position: index }, siteInfo))],
-        eventSource,
-        body_string_id: ["confirm_history_delete_p1", "confirm_history_delete_notice_p2"],
-        confirm_button_string_id: "menu_action_delete",
-        cancel_button_string_id: "topsites_form_cancel_button",
-        icon: "modal-delete"
-      }
-    },
-    userEvent: "DIALOG_OPEN"
-  }),
-  ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({
-    id: GetPlatformString(platform),
-    icon: "search",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SHOW_DOWNLOAD_FILE,
-      data: { url: site.url }
-    })
-  }),
-  OpenFile: site => ({
-    id: "menu_action_open_file",
-    icon: "open-file",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].OPEN_DOWNLOAD_FILE,
-      data: { url: site.url }
-    })
-  }),
-  CopyDownloadLink: site => ({
-    id: "menu_action_copy_download_link",
-    icon: "copy",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].COPY_DOWNLOAD_LINK,
-      data: { url: site.url }
-    })
-  }),
-  GoToDownloadPage: site => ({
-    id: "menu_action_go_to_download_page",
-    icon: "download",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].OPEN_LINK,
-      data: { url: site.referrer }
-    }),
-    disabled: !site.referrer
-  }),
-  RemoveDownload: site => ({
-    id: "menu_action_remove_download",
-    icon: "delete",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].REMOVE_DOWNLOAD_FILE,
-      data: { url: site.url }
-    })
-  }),
-  PinTopSite: (site, index) => ({
-    id: "menu_action_pin",
-    icon: "pin",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].TOP_SITES_PIN,
-      data: { site: { url: site.url }, index }
-    }),
-    userEvent: "PIN"
-  }),
-  UnpinTopSite: site => ({
-    id: "menu_action_unpin",
-    icon: "unpin",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].TOP_SITES_UNPIN,
-      data: { site: { url: site.url } }
-    }),
-    userEvent: "UNPIN"
-  }),
-  SaveToPocket: (site, index, eventSource) => ({
-    id: "menu_action_save_to_pocket",
-    icon: "pocket",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SAVE_TO_POCKET,
-      data: { site: { url: site.url, title: site.title } }
-    }),
-    impression: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].ImpressionStats({
-      source: eventSource,
-      pocket: 0,
-      tiles: [{ id: site.guid, pos: index }]
-    }),
-    userEvent: "SAVE_TO_POCKET"
-  }),
-  DeleteFromPocket: site => ({
-    id: "menu_action_delete_pocket",
-    icon: "delete",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].DELETE_FROM_POCKET,
-      data: { pocket_id: site.pocket_id }
-    }),
-    userEvent: "DELETE_FROM_POCKET"
-  }),
-  ArchiveFromPocket: site => ({
-    id: "menu_action_archive_pocket",
-    icon: "check",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].ARCHIVE_FROM_POCKET,
-      data: { pocket_id: site.pocket_id }
-    }),
-    userEvent: "ARCHIVE_FROM_POCKET"
-  }),
-  EditTopSite: (site, index) => ({
-    id: "edit_topsites_button_text",
-    icon: "edit",
-    action: {
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].TOP_SITES_EDIT,
-      data: { index }
-    }
-  }),
-  CheckBookmark: site => site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site),
-  CheckPinTopSite: (site, index) => site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index),
-  CheckSavedToPocket: (site, index) => site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index),
-  CheckBookmarkOrArchive: site => site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site),
-  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem()
-};
-/* harmony export (immutable) */ __webpack_exports__["b"] = LinkMenuOptions;
-
-
-/***/ }),
-/* 15 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_redux__ = __webpack_require__(4);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react_redux__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_content_src_components_ContextMenu_ContextMenu__ = __webpack_require__(16);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_content_src_lib_link_menu_options__ = __webpack_require__(14);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__);
-
-
-
-
-
-
-
-const DEFAULT_SITE_MENU_OPTIONS = ["CheckPinTopSite", "EditTopSite", "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl"];
-
-class _LinkMenu extends __WEBPACK_IMPORTED_MODULE_5_react___default.a.PureComponent {
-  getOptions() {
-    const { props } = this;
-    const { site, index, source, isPrivateBrowsingEnabled, siteInfo, platform } = props;
-
-    // Handle special case of default site
-    const propOptions = !site.isDefault ? props.options : DEFAULT_SITE_MENU_OPTIONS;
-
-    const options = propOptions.map(o => __WEBPACK_IMPORTED_MODULE_4_content_src_lib_link_menu_options__["b" /* LinkMenuOptions */][o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {
-      const { action, impression, id, string_id, type, userEvent } = option;
-      if (!type && id) {
-        option.label = props.intl.formatMessage({ id: string_id || id });
-        option.onClick = () => {
-          props.dispatch(action);
-          if (userEvent) {
-            const userEventData = Object.assign({
-              event: userEvent,
-              source,
-              action_position: index
-            }, siteInfo);
-            props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent(userEventData));
-          }
-          if (impression && props.shouldSendImpressionStats) {
-            props.dispatch(impression);
-          }
-        };
-      }
-      return option;
-    });
-
-    // This is for accessibility to support making each item tabbable.
-    // We want to know which item is the first and which item
-    // is the last, so we can close the context menu accordingly.
-    options[0].first = true;
-    options[options.length - 1].last = true;
-    return options;
-  }
-
-  render() {
-    return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2_content_src_components_ContextMenu_ContextMenu__["a" /* ContextMenu */], {
-      onUpdate: this.props.onUpdate,
-      options: this.getOptions() });
-  }
-}
-/* unused harmony export _LinkMenu */
-
-
-const getState = state => ({ isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform });
-const LinkMenu = Object(__WEBPACK_IMPORTED_MODULE_1_react_redux__["connect"])(getState)(Object(__WEBPACK_IMPORTED_MODULE_3_react_intl__["injectIntl"])(_LinkMenu));
-/* harmony export (immutable) */ __webpack_exports__["a"] = LinkMenu;
-
-
-/***/ }),
-/* 16 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
-
-
-class ContextMenu extends __WEBPACK_IMPORTED_MODULE_0_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.hideContext = this.hideContext.bind(this);
-    this.onClick = this.onClick.bind(this);
-  }
-
-  hideContext() {
-    this.props.onUpdate(false);
-  }
-
-  componentDidMount() {
-    setTimeout(() => {
-      global.addEventListener("click", this.hideContext);
-    }, 0);
-  }
-
-  componentWillUnmount() {
-    global.removeEventListener("click", this.hideContext);
-  }
-
-  onClick(event) {
-    // Eat all clicks on the context menu so they don't bubble up to window.
-    // This prevents the context menu from closing when clicking disabled items
-    // or the separators.
-    event.stopPropagation();
-  }
-
-  render() {
-    return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(
-      "span",
-      { className: "context-menu", onClick: this.onClick },
-      __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(
-        "ul",
-        { role: "menu", className: "context-menu-list" },
-        this.props.options.map((option, i) => option.type === "separator" ? __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("li", { key: i, className: "separator" }) : option.type !== "empty" && __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(ContextMenuItem, { key: i, option: option, hideContext: this.hideContext }))
-      )
-    );
-  }
-}
-/* harmony export (immutable) */ __webpack_exports__["a"] = ContextMenu;
-
-
-class ContextMenuItem extends __WEBPACK_IMPORTED_MODULE_0_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.onClick = this.onClick.bind(this);
-    this.onKeyDown = this.onKeyDown.bind(this);
-  }
-
-  onClick() {
-    this.props.hideContext();
-    this.props.option.onClick();
-  }
-
-  onKeyDown(event) {
-    const { option } = this.props;
-    switch (event.key) {
-      case "Tab":
-        // tab goes down in context menu, shift + tab goes up in context menu
-        // if we're on the last item, one more tab will close the context menu
-        // similarly, if we're on the first item, one more shift + tab will close it
-        if (event.shiftKey && option.first || !event.shiftKey && option.last) {
-          this.props.hideContext();
-        }
-        break;
-      case "Enter":
-        this.props.hideContext();
-        option.onClick();
-        break;
-    }
-  }
-
-  render() {
-    const { option } = this.props;
-    return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(
-      "li",
-      { role: "menuitem", className: "context-menu-item" },
-      __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(
-        "a",
-        { onClick: this.onClick, onKeyDown: this.onKeyDown, tabIndex: "0", className: option.disabled ? "disabled" : "" },
-        option.icon && __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("span", { className: `icon icon-spacer icon-${option.icon}` }),
-        option.label
-      )
-    );
-  }
-}
-/* unused harmony export ContextMenuItem */
-
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 17 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/**
- * List of helper functions for screenshot-based images.
- *
- * There are two kinds of images:
- * 1. Remote Image: This is the image from the main process and it refers to
- *    the image in the React props. This can either be an object with the `data`
- *    and `path` properties, if it is a blob, or a string, if it is a normal image.
- * 2. Local Image: This is the image object in the content process and it refers
- *    to the image *object* in the React component's state. All local image
- *    objects have the `url` property, and an additional property `path`, if they
- *    are blobs.
- */
-const ScreenshotUtils = {
-  isBlob(isLocal, image) {
-    return !!(image && image.path && (!isLocal && image.data || isLocal && image.url));
-  },
-
-  // This should always be called with a remote image and not a local image.
-  createLocalImageObject(remoteImage) {
-    if (!remoteImage) {
-      return null;
-    }
-    if (this.isBlob(false, remoteImage)) {
-      return { url: global.URL.createObjectURL(remoteImage.data), path: remoteImage.path };
-    }
-    return { url: remoteImage };
-  },
-
-  // Revokes the object URL of the image if the local image is a blob.
-  // This should always be called with a local image and not a remote image.
-  maybeRevokeBlobObjectURL(localImage) {
-    if (this.isBlob(true, localImage)) {
-      global.URL.revokeObjectURL(localImage.url);
-    }
-  },
-
-  // Checks if remoteImage and localImage are the same.
-  isRemoteImageLocal(localImage, remoteImage) {
-    // Both remoteImage and localImage are present.
-    if (remoteImage && localImage) {
-      return this.isBlob(false, remoteImage) ? localImage.path === remoteImage.path : localImage.url === remoteImage;
-    }
-
-    // This will only handle the remaining three possible outcomes.
-    // (i.e. everything except when both image and localImage are present)
-    return !remoteImage && !localImage;
-  }
-};
-/* harmony export (immutable) */ __webpack_exports__["a"] = ScreenshotUtils;
-
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 18 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_content_src_components_ErrorBoundary_ErrorBoundary__ = __webpack_require__(13);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_content_src_components_SectionMenu_SectionMenu__ = __webpack_require__(39);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_content_src_lib_section_menu_options__ = __webpack_require__(19);
-
-
-
-
-
-
-
-const VISIBLE = "visible";
-const VISIBILITY_CHANGE_EVENT = "visibilitychange";
-
-function getFormattedMessage(message) {
-  return typeof message === "string" ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-    "span",
-    null,
-    message
-  ) : __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], message);
-}
-
-class Disclaimer extends __WEBPACK_IMPORTED_MODULE_3_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.onAcknowledge = this.onAcknowledge.bind(this);
-  }
-
-  onAcknowledge() {
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_1_common_Actions_jsm__["b" /* actionCreators */].SetPref(this.props.disclaimerPref, false));
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_1_common_Actions_jsm__["b" /* actionCreators */].UserEvent({ event: "DISCLAIMER_ACKED", source: this.props.eventSource }));
-  }
-
-  render() {
-    const { disclaimer } = this.props;
-    return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-      "div",
-      { className: "section-disclaimer" },
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-        "div",
-        { className: "section-disclaimer-text" },
-        getFormattedMessage(disclaimer.text),
-        disclaimer.link && __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-          "a",
-          { href: disclaimer.link.href, target: "_blank", rel: "noopener noreferrer" },
-          getFormattedMessage(disclaimer.link.title || disclaimer.link)
-        )
-      ),
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-        "button",
-        { onClick: this.onAcknowledge },
-        getFormattedMessage(disclaimer.button)
-      )
-    );
-  }
-}
-/* unused harmony export Disclaimer */
-
-
-const DisclaimerIntl = Object(__WEBPACK_IMPORTED_MODULE_0_react_intl__["injectIntl"])(Disclaimer);
-/* unused harmony export DisclaimerIntl */
-
-
-class _CollapsibleSection extends __WEBPACK_IMPORTED_MODULE_3_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.onBodyMount = this.onBodyMount.bind(this);
-    this.onHeaderClick = this.onHeaderClick.bind(this);
-    this.onTransitionEnd = this.onTransitionEnd.bind(this);
-    this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);
-    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);
-    this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);
-    this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);
-    this.onMenuUpdate = this.onMenuUpdate.bind(this);
-    this.state = { enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false };
-  }
-
-  componentWillMount() {
-    this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);
-  }
-
-  componentWillUpdate(nextProps) {
-    // Check if we're about to go from expanded to collapsed
-    if (!this.props.collapsed && nextProps.collapsed) {
-      // This next line forces a layout flush of the section body, which has a
-      // max-height style set, so that the upcoming collapse animation can
-      // animate from that height to the collapsed height. Without this, the
-      // update is coalesced and there's no animation from no-max-height to 0.
-      this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions
-    }
-  }
-
-  componentWillUnmount() {
-    this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);
-  }
-
-  enableOrDisableAnimation() {
-    // Only animate the collapse/expand for visible tabs.
-    const visible = this.props.document.visibilityState === VISIBLE;
-    if (this.state.enableAnimation !== visible) {
-      this.setState({ enableAnimation: visible });
-    }
-  }
-
-  onBodyMount(node) {
-    this.sectionBody = node;
-  }
-
-  onHeaderClick() {
-    // If this.sectionBody is unset, it means that we're in some sort of error
-    // state, probably displaying the error fallback, so we won't be able to
-    // compute the height, and we don't want to persist the preference.
-    // If props.collapsed is undefined handler shouldn't do anything.
-    if (!this.sectionBody || this.props.collapsed === undefined) {
-      return;
-    }
-
-    // Get the current height of the body so max-height transitions can work
-    this.setState({
-      isAnimating: true,
-      maxHeight: `${this.sectionBody.scrollHeight}px`
-    });
-    const { action, userEvent } = __WEBPACK_IMPORTED_MODULE_5_content_src_lib_section_menu_options__["a" /* SectionMenuOptions */].CheckCollapsed(this.props);
-    this.props.dispatch(action);
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_1_common_Actions_jsm__["b" /* actionCreators */].UserEvent({
-      event: userEvent,
-      source: this.props.source
-    }));
-  }
-
-  onTransitionEnd(event) {
-    // Only update the animating state for our own transition (not a child's)
-    if (event.target === event.currentTarget) {
-      this.setState({ isAnimating: false });
-    }
-  }
-
-  renderIcon() {
-    const { icon } = this.props;
-    if (icon && icon.startsWith("moz-extension://")) {
-      return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("span", { className: "icon icon-small-spacer", style: { backgroundImage: `url('${icon}')` } });
-    }
-    return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("span", { className: `icon icon-small-spacer icon-${icon || "webextension"}` });
-  }
-
-  onMenuButtonClick(event) {
-    event.preventDefault();
-    this.setState({ showContextMenu: true });
-  }
-
-  onMenuButtonMouseEnter() {
-    this.setState({ menuButtonHover: true });
-  }
-
-  onMenuButtonMouseLeave() {
-    this.setState({ menuButtonHover: false });
-  }
-
-  onMenuUpdate(showContextMenu) {
-    this.setState({ showContextMenu });
-  }
-
-  render() {
-    const isCollapsible = this.props.collapsed !== undefined;
-    const { enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu } = this.state;
-    const { id, eventSource, collapsed, disclaimer, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast, isWebExtension } = this.props;
-    const disclaimerPref = `section.${id}.showDisclaimer`;
-    const needsDisclaimer = disclaimer && this.props.Prefs.values[disclaimerPref];
-    const active = menuButtonHover || showContextMenu;
-    return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-      "section",
-      {
-        className: `collapsible-section ${this.props.className}${enableAnimation ? " animation-enabled" : ""}${collapsed ? " collapsed" : ""}${active ? " active" : ""}`
-        // Note: data-section-id is used for web extension api tests in mozilla central
-        , "data-section-id": id },
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-        "div",
-        { className: "section-top-bar" },
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-          "h3",
-          { className: "section-title" },
-          __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-            "span",
-            { className: "click-target", onClick: this.onHeaderClick },
-            this.renderIcon(),
-            getFormattedMessage(title),
-            isCollapsible && __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("span", { className: `collapsible-arrow icon ${collapsed ? "icon-arrowhead-forward-small" : "icon-arrowhead-down-small"}` })
-          )
-        ),
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-          "div",
-          null,
-          __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-            "button",
-            {
-              className: "context-menu-button icon",
-              onClick: this.onMenuButtonClick,
-              onMouseEnter: this.onMenuButtonMouseEnter,
-              onMouseLeave: this.onMenuButtonMouseLeave },
-            __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-              "span",
-              { className: "sr-only" },
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "section_context_menu_button_sr" })
-            )
-          ),
-          showContextMenu && __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_4_content_src_components_SectionMenu_SectionMenu__["a" /* SectionMenu */], {
-            id: id,
-            extraOptions: extraMenuOptions,
-            eventSource: eventSource,
-            showPrefName: showPrefName,
-            privacyNoticeURL: privacyNoticeURL,
-            collapsed: collapsed,
-            onUpdate: this.onMenuUpdate,
-            isFirst: isFirst,
-            isLast: isLast,
-            dispatch: dispatch,
-            isWebExtension: isWebExtension })
-        )
-      ),
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-        __WEBPACK_IMPORTED_MODULE_2_content_src_components_ErrorBoundary_ErrorBoundary__["a" /* ErrorBoundary */],
-        { className: "section-body-fallback" },
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-          "div",
-          {
-            className: `section-body${isAnimating ? " animating" : ""}`,
-            onTransitionEnd: this.onTransitionEnd,
-            ref: this.onBodyMount,
-            style: isAnimating && !collapsed ? { maxHeight } : null },
-          needsDisclaimer && __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(DisclaimerIntl, { disclaimerPref: disclaimerPref, disclaimer: disclaimer, eventSource: eventSource, dispatch: this.props.dispatch }),
-          this.props.children
-        )
-      )
-    );
-  }
-}
-/* unused harmony export _CollapsibleSection */
-
-
-_CollapsibleSection.defaultProps = {
-  document: global.document || {
-    addEventListener: () => {},
-    removeEventListener: () => {},
-    visibilityState: "hidden"
-  },
-  Prefs: { values: {} }
-};
-
-const CollapsibleSection = Object(__WEBPACK_IMPORTED_MODULE_0_react_intl__["injectIntl"])(_CollapsibleSection);
-/* harmony export (immutable) */ __webpack_exports__["a"] = CollapsibleSection;
-
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 19 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-
-
-/**
- * List of functions that return items that can be included as menu options in a
- * SectionMenu. All functions take the section as the only parameter.
- */
-const SectionMenuOptions = {
-  Separator: () => ({ type: "separator" }),
-  MoveUp: section => ({
-    id: "section_menu_action_move_up",
-    icon: "arrowhead-up",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SECTION_MOVE,
-      data: { id: section.id, direction: -1 }
-    }),
-    userEvent: "MENU_MOVE_UP",
-    disabled: !!section.isFirst
-  }),
-  MoveDown: section => ({
-    id: "section_menu_action_move_down",
-    icon: "arrowhead-down",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SECTION_MOVE,
-      data: { id: section.id, direction: +1 }
-    }),
-    userEvent: "MENU_MOVE_DOWN",
-    disabled: !!section.isLast
-  }),
-  RemoveSection: section => ({
-    id: "section_menu_action_remove_section",
-    icon: "dismiss",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].SetPref(section.showPrefName, false),
-    userEvent: "MENU_REMOVE"
-  }),
-  CollapseSection: section => ({
-    id: "section_menu_action_collapse_section",
-    icon: "minimize",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].UPDATE_SECTION_PREFS, data: { id: section.id, value: { collapsed: true } } }),
-    userEvent: "MENU_COLLAPSE"
-  }),
-  ExpandSection: section => ({
-    id: "section_menu_action_expand_section",
-    icon: "maximize",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].UPDATE_SECTION_PREFS, data: { id: section.id, value: { collapsed: false } } }),
-    userEvent: "MENU_EXPAND"
-  }),
-  ManageSection: section => ({
-    id: "section_menu_action_manage_section",
-    icon: "settings",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SETTINGS_OPEN }),
-    userEvent: "MENU_MANAGE"
-  }),
-  ManageWebExtension: section => ({
-    id: "section_menu_action_manage_webext",
-    icon: "settings",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].OPEN_WEBEXT_SETTINGS, data: section.id })
-  }),
-  AddTopSite: section => ({
-    id: "section_menu_action_add_topsite",
-    icon: "add",
-    action: { type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].TOP_SITES_EDIT, data: { index: -1 } },
-    userEvent: "MENU_ADD_TOPSITE"
-  }),
-  PrivacyNotice: section => ({
-    id: "section_menu_action_privacy_notice",
-    icon: "info",
-    action: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].OPEN_LINK,
-      data: { url: section.privacyNoticeURL }
-    }),
-    userEvent: "MENU_PRIVACY_NOTICE"
-  }),
-  CheckCollapsed: section => section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section)
-};
-/* harmony export (immutable) */ __webpack_exports__["a"] = SectionMenuOptions;
-
-
-/***/ }),
-/* 20 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_common_PerfService_jsm__ = __webpack_require__(21);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__);
-
-
-
-
-// Currently record only a fixed set of sections. This will prevent data
-// from custom sections from showing up or from topstories.
-const RECORDED_SECTIONS = ["highlights", "topsites"];
-
-class ComponentPerfTimer extends __WEBPACK_IMPORTED_MODULE_2_react___default.a.Component {
-  constructor(props) {
-    super(props);
-    // Just for test dependency injection:
-    this.perfSvc = this.props.perfSvc || __WEBPACK_IMPORTED_MODULE_1_common_PerfService_jsm__["a" /* perfService */];
-
-    this._sendBadStateEvent = this._sendBadStateEvent.bind(this);
-    this._sendPaintedEvent = this._sendPaintedEvent.bind(this);
-    this._reportMissingData = false;
-    this._timestampHandled = false;
-    this._recordedFirstRender = false;
-  }
-
-  componentDidMount() {
-    if (!RECORDED_SECTIONS.includes(this.props.id)) {
-      return;
-    }
-
-    this._maybeSendPaintedEvent();
-  }
-
-  componentDidUpdate() {
-    if (!RECORDED_SECTIONS.includes(this.props.id)) {
-      return;
-    }
-
-    this._maybeSendPaintedEvent();
-  }
-
-  /**
-   * Call the given callback after the upcoming frame paints.
-   *
-   * @note Both setTimeout and requestAnimationFrame are throttled when the page
-   * is hidden, so this callback may get called up to a second or so after the
-   * requestAnimationFrame "paint" for hidden tabs.
-   *
-   * Newtabs hidden while loading will presumably be fairly rare (other than
-   * preloaded tabs, which we will be filtering out on the server side), so such
-   * cases should get lost in the noise.
-   *
-   * If we decide that it's important to find out when something that's hidden
-   * has "painted", however, another option is to post a message to this window.
-   * That should happen even faster than setTimeout, and, at least as of this
-   * writing, it's not throttled in hidden windows in Firefox.
-   *
-   * @param {Function} callback
-   *
-   * @returns void
-   */
-  _afterFramePaint(callback) {
-    requestAnimationFrame(() => setTimeout(callback, 0));
-  }
-
-  _maybeSendBadStateEvent() {
-    // Follow up bugs:
-    // https://github.com/mozilla/activity-stream/issues/3691
-    if (!this.props.initialized) {
-      // Remember to report back when data is available.
-      this._reportMissingData = true;
-    } else if (this._reportMissingData) {
-      this._reportMissingData = false;
-      // Report how long it took for component to become initialized.
-      this._sendBadStateEvent();
-    }
-  }
-
-  _maybeSendPaintedEvent() {
-    // If we've already handled a timestamp, don't do it again.
-    if (this._timestampHandled || !this.props.initialized) {
-      return;
-    }
-
-    // And if we haven't, we're doing so now, so remember that. Even if
-    // something goes wrong in the callback, we can't try again, as we'd be
-    // sending back the wrong data, and we have to do it here, so that other
-    // calls to this method while waiting for the next frame won't also try to
-    // handle it.
-    this._timestampHandled = true;
-    this._afterFramePaint(this._sendPaintedEvent);
-  }
-
-  /**
-   * Triggered by call to render. Only first call goes through due to
-   * `_recordedFirstRender`.
-   */
-  _ensureFirstRenderTsRecorded() {
-    // Used as t0 for recording how long component took to initialize.
-    if (!this._recordedFirstRender) {
-      this._recordedFirstRender = true;
-      // topsites_first_render_ts, highlights_first_render_ts.
-      const key = `${this.props.id}_first_render_ts`;
-      this.perfSvc.mark(key);
-    }
-  }
-
-  /**
-   * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms
-   * of how much longer the data took to be ready for display than it would
-   * have been the ideal case.
-   * https://github.com/mozilla/ping-centre/issues/98
-   */
-  _sendBadStateEvent() {
-    // highlights_data_ready_ts, topsites_data_ready_ts.
-    const dataReadyKey = `${this.props.id}_data_ready_ts`;
-    this.perfSvc.mark(dataReadyKey);
-
-    try {
-      const firstRenderKey = `${this.props.id}_first_render_ts`;
-      // value has to be Int32.
-      const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) - this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);
-      this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-        type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SAVE_SESSION_PERF_DATA,
-        // highlights_data_late_by_ms, topsites_data_late_by_ms.
-        data: { [`${this.props.id}_data_late_by_ms`]: value }
-      }));
-    } catch (ex) {
-      // If this failed, it's likely because the `privacy.resistFingerprinting`
-      // pref is true.
-    }
-  }
-
-  _sendPaintedEvent() {
-    // Record first_painted event but only send if topsites.
-    if (this.props.id !== "topsites") {
-      return;
-    }
-
-    // topsites_first_painted_ts.
-    const key = `${this.props.id}_first_painted_ts`;
-    this.perfSvc.mark(key);
-
-    try {
-      const data = {};
-      data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);
-
-      this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-        type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SAVE_SESSION_PERF_DATA,
-        data
-      }));
-    } catch (ex) {
-      // If this failed, it's likely because the `privacy.resistFingerprinting`
-      // pref is true.  We should at least not blow up, and should continue
-      // to set this._timestampHandled to avoid going through this again.
-    }
-  }
-
-  render() {
-    if (RECORDED_SECTIONS.includes(this.props.id)) {
-      this._ensureFirstRenderTsRecorded();
-      this._maybeSendBadStateEvent();
-    }
-    return this.props.children;
-  }
-}
-/* harmony export (immutable) */ __webpack_exports__["a"] = ComponentPerfTimer;
-
-
-/***/ }),
-/* 21 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* unused harmony export _PerfService */
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return perfService; });
-/* globals Services */
-
-
-/* istanbul ignore if */
-
-if (typeof ChromeUtils !== "undefined") {
-  ChromeUtils.import("resource://gre/modules/Services.jsm");
-}
-
-let usablePerfObj;
-
-/* istanbul ignore if */
-/* istanbul ignore else */
-if (typeof Services !== "undefined") {
-  // Borrow the high-resolution timer from the hidden window....
-  usablePerfObj = Services.appShell.hiddenDOMWindow.performance;
-} else if (typeof performance !== "undefined") {
-  // we must be running in content space
-  // eslint-disable-next-line no-undef
-  usablePerfObj = performance;
-} else {
-  // This is a dummy object so this file doesn't crash in the node prerendering
-  // task.
-  usablePerfObj = {
-    now() {},
-    mark() {}
-  };
-}
-
-function _PerfService(options) {
-  // For testing, so that we can use a fake Window.performance object with
-  // known state.
-  if (options && options.performanceObj) {
-    this._perf = options.performanceObj;
-  } else {
-    this._perf = usablePerfObj;
-  }
-}
-
-
-_PerfService.prototype = {
-  /**
-   * Calls the underlying mark() method on the appropriate Window.performance
-   * object to add a mark with the given name to the appropriate performance
-   * timeline.
-   *
-   * @param  {String} name  the name to give the current mark
-   * @return {void}
-   */
-  mark: function mark(str) {
-    this._perf.mark(str);
-  },
-
-  /**
-   * Calls the underlying getEntriesByName on the appropriate Window.performance
-   * object.
-   *
-   * @param  {String} name
-   * @param  {String} type eg "mark"
-   * @return {Array}       Performance* objects
-   */
-  getEntriesByName: function getEntriesByName(name, type) {
-    return this._perf.getEntriesByName(name, type);
-  },
-
-  /**
-   * The timeOrigin property from the appropriate performance object.
-   * Used to ensure that timestamps from the add-on code and the content code
-   * are comparable.
-   *
-   * @note If this is called from a context without a window
-   * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden
-   * window, which appears to be the first created window (and thus
-   * timeOrigin) in the browser.  Note also, however, there is also a private
-   * hidden window, presumably for private browsing, which appears to be
-   * created dynamically later.  Exactly how/when that shows up needs to be
-   * investigated.
-   *
-   * @return {Number} A double of milliseconds with a precision of 0.5us.
-   */
-  get timeOrigin() {
-    return this._perf.timeOrigin;
-  },
-
-  /**
-   * Returns the "absolute" version of performance.now(), i.e. one that
-   * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)
-   * be comparable across both chrome and content.
-   *
-   * @return {Number}
-   */
-  absNow: function absNow() {
-    return this.timeOrigin + this._perf.now();
-  },
-
-  /**
-   * This returns the absolute startTime from the most recent performance.mark()
-   * with the given name.
-   *
-   * @param  {String} name  the name to lookup the start time for
-   *
-   * @return {Number}       the returned start time, as a DOMHighResTimeStamp
-   *
-   * @throws {Error}        "No Marks with the name ..." if none are available
-   *
-   * @note Always surround calls to this by try/catch.  Otherwise your code
-   * may fail when the `privacy.resistFingerprinting` pref is true.  When
-   * this pref is set, all attempts to get marks will likely fail, which will
-   * cause this method to throw.
-   *
-   * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)
-   * for more info.
-   */
-  getMostRecentAbsMarkStartByName(name) {
-    let entries = this.getEntriesByName(name, "mark");
-
-    if (!entries.length) {
-      throw new Error(`No marks with the name ${name}`);
-    }
-
-    let mostRecentEntry = entries[entries.length - 1];
-    return this._perf.timeOrigin + mostRecentEntry.startTime;
-  }
-};
-
-var perfService = new _PerfService();
-
-/***/ }),
-/* 22 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__TopSitesConstants__ = __webpack_require__(6);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_content_src_components_LinkMenu_LinkMenu__ = __webpack_require__(15);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_content_src_lib_screenshot_utils__ = __webpack_require__(17);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_common_Reducers_jsm__ = __webpack_require__(7);
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-
-
-
-
-
-
-
-
-class TopSiteLink extends __WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.state = { screenshotImage: null };
-    this.onDragEvent = this.onDragEvent.bind(this);
-  }
-
-  /*
-   * Helper to determine whether the drop zone should allow a drop. We only allow
-   * dropping top sites for now.
-   */
-  _allowDrop(e) {
-    return e.dataTransfer.types.includes("text/topsite-index");
-  }
-
-  onDragEvent(event) {
-    switch (event.type) {
-      case "click":
-        // Stop any link clicks if we started any dragging
-        if (this.dragged) {
-          event.preventDefault();
-        }
-        break;
-      case "dragstart":
-        this.dragged = true;
-        event.dataTransfer.effectAllowed = "move";
-        event.dataTransfer.setData("text/topsite-index", this.props.index);
-        event.target.blur();
-        this.props.onDragEvent(event, this.props.index, this.props.link, this.props.title);
-        break;
-      case "dragend":
-        this.props.onDragEvent(event);
-        break;
-      case "dragenter":
-      case "dragover":
-      case "drop":
-        if (this._allowDrop(event)) {
-          event.preventDefault();
-          this.props.onDragEvent(event, this.props.index);
-        }
-        break;
-      case "mousedown":
-        // Reset at the first mouse event of a potential drag
-        this.dragged = false;
-        break;
-    }
-  }
-
-  /**
-   * Helper to obtain the next state based on nextProps and prevState.
-   *
-   * NOTE: Rename this method to getDerivedStateFromProps when we update React
-   *       to >= 16.3. We will need to update tests as well. We cannot rename this
-   *       method to getDerivedStateFromProps now because there is a mismatch in
-   *       the React version that we are using for both testing and production.
-   *       (i.e. react-test-render => "16.3.2", react => "16.2.0").
-   *
-   * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.
-   */
-  static getNextStateFromProps(nextProps, prevState) {
-    const { screenshot } = nextProps.link;
-    const imageInState = __WEBPACK_IMPORTED_MODULE_5_content_src_lib_screenshot_utils__["a" /* ScreenshotUtils */].isRemoteImageLocal(prevState.screenshotImage, screenshot);
-    if (imageInState) {
-      return null;
-    }
-
-    // Since image was updated, attempt to revoke old image blob URL, if it exists.
-    __WEBPACK_IMPORTED_MODULE_5_content_src_lib_screenshot_utils__["a" /* ScreenshotUtils */].maybeRevokeBlobObjectURL(prevState.screenshotImage);
-
-    return { screenshotImage: __WEBPACK_IMPORTED_MODULE_5_content_src_lib_screenshot_utils__["a" /* ScreenshotUtils */].createLocalImageObject(screenshot) };
-  }
-
-  // NOTE: Remove this function when we update React to >= 16.3 since React will
-  //       call getDerivedStateFromProps automatically. We will also need to
-  //       rename getNextStateFromProps to getDerivedStateFromProps.
-  componentWillMount() {
-    const nextState = TopSiteLink.getNextStateFromProps(this.props, this.state);
-    if (nextState) {
-      this.setState(nextState);
-    }
-  }
-
-  // NOTE: Remove this function when we update React to >= 16.3 since React will
-  //       call getDerivedStateFromProps automatically. We will also need to
-  //       rename getNextStateFromProps to getDerivedStateFromProps.
-  componentWillReceiveProps(nextProps) {
-    const nextState = TopSiteLink.getNextStateFromProps(nextProps, this.state);
-    if (nextState) {
-      this.setState(nextState);
-    }
-  }
-
-  componentWillUnmount() {
-    __WEBPACK_IMPORTED_MODULE_5_content_src_lib_screenshot_utils__["a" /* ScreenshotUtils */].maybeRevokeBlobObjectURL(this.state.screenshotImage);
-  }
-
-  render() {
-    const { children, className, defaultStyle, isDraggable, link, onClick, title } = this.props;
-    const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : ""}${link.isDragged ? " dragged" : ""}`;
-    const { tippyTopIcon, faviconSize } = link;
-    const [letterFallback] = title;
-    let imageClassName;
-    let imageStyle;
-    let showSmallFavicon = false;
-    let smallFaviconStyle;
-    let smallFaviconFallback;
-    let hasScreenshotImage = this.state.screenshotImage && this.state.screenshotImage.url;
-    if (defaultStyle) {
-      // force no styles (letter fallback) even if the link has imagery
-      smallFaviconFallback = false;
-    } else if (link.customScreenshotURL) {
-      // assume high quality custom screenshot and use rich icon styles and class names
-      imageClassName = "top-site-icon rich-icon";
-      imageStyle = {
-        backgroundColor: link.backgroundColor,
-        backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : "none"
-      };
-    } else if (tippyTopIcon || faviconSize >= __WEBPACK_IMPORTED_MODULE_2__TopSitesConstants__["b" /* MIN_RICH_FAVICON_SIZE */]) {
-      // styles and class names for top sites with rich icons
-      imageClassName = "top-site-icon rich-icon";
-      imageStyle = {
-        backgroundColor: link.backgroundColor,
-        backgroundImage: `url(${tippyTopIcon || link.favicon})`
-      };
-    } else {
-      // styles and class names for top sites with screenshot + small icon in top left corner
-      imageClassName = `screenshot${hasScreenshotImage ? " active" : ""}`;
-      imageStyle = { backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : "none" };
-
-      // only show a favicon in top left if it's greater than 16x16
-      if (faviconSize >= __WEBPACK_IMPORTED_MODULE_2__TopSitesConstants__["a" /* MIN_CORNER_FAVICON_SIZE */]) {
-        showSmallFavicon = true;
-        smallFaviconStyle = { backgroundImage: `url(${link.favicon})` };
-      } else if (hasScreenshotImage) {
-        // Don't show a small favicon if there is no screenshot, because that
-        // would result in two fallback icons
-        showSmallFavicon = true;
-        smallFaviconFallback = true;
-      }
-    }
-    let draggableProps = {};
-    if (isDraggable) {
-      draggableProps = {
-        onClick: this.onDragEvent,
-        onDragEnd: this.onDragEvent,
-        onDragStart: this.onDragEvent,
-        onMouseDown: this.onDragEvent
-      };
-    }
-    return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-      "li",
-      _extends({ className: topSiteOuterClassName, onDrop: this.onDragEvent, onDragOver: this.onDragEvent, onDragEnter: this.onDragEvent, onDragLeave: this.onDragEvent }, draggableProps),
-      __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-        "div",
-        { className: "top-site-inner" },
-        __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-          "a",
-          { href: link.url, onClick: onClick },
-          __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-            "div",
-            { className: "tile", "aria-hidden": true, "data-fallback": letterFallback },
-            __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement("div", { className: imageClassName, style: imageStyle }),
-            showSmallFavicon && __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement("div", {
-              className: "top-site-icon default-icon",
-              "data-fallback": smallFaviconFallback && letterFallback,
-              style: smallFaviconStyle })
-          ),
-          __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-            "div",
-            { className: `title ${link.isPinned ? "pinned" : ""}` },
-            link.isPinned && __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement("div", { className: "icon icon-pin-small" }),
-            __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-              "span",
-              { dir: "auto" },
-              title
-            )
-          )
-        ),
-        children
-      )
-    );
-  }
-}
-/* harmony export (immutable) */ __webpack_exports__["a"] = TopSiteLink;
-
-TopSiteLink.defaultProps = {
-  title: "",
-  link: {},
-  isDraggable: true
-};
-
-class TopSite extends __WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.state = { showContextMenu: false };
-    this.onLinkClick = this.onLinkClick.bind(this);
-    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);
-    this.onMenuUpdate = this.onMenuUpdate.bind(this);
-  }
-
-  /**
-   * Report to telemetry additional information about the item.
-   */
-  _getTelemetryInfo() {
-    const value = { icon_type: this.props.link.iconType };
-    // Filter out "not_pinned" type for being the default
-    if (this.props.link.isPinned) {
-      value.card_type = "pinned";
-    }
-    return { value };
-  }
-
-  userEvent(event) {
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent(Object.assign({
-      event,
-      source: __WEBPACK_IMPORTED_MODULE_2__TopSitesConstants__["d" /* TOP_SITES_SOURCE */],
-      action_position: this.props.index
-    }, this._getTelemetryInfo())));
-  }
-
-  onLinkClick(event) {
-    this.userEvent("CLICK");
-
-    // Specially handle a top site link click for "typed" frecency bonus as
-    // specified as a property on the link.
-    event.preventDefault();
-    const { altKey, button, ctrlKey, metaKey, shiftKey } = event;
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].OPEN_LINK,
-      data: Object.assign(this.props.link, { event: { altKey, button, ctrlKey, metaKey, shiftKey } })
-    }));
-  }
-
-  onMenuButtonClick(event) {
-    event.preventDefault();
-    this.props.onActivate(this.props.index);
-    this.setState({ showContextMenu: true });
-  }
-
-  onMenuUpdate(showContextMenu) {
-    this.setState({ showContextMenu });
-  }
-
-  render() {
-    const { props } = this;
-    const { link } = props;
-    const isContextMenuOpen = this.state.showContextMenu && props.activeIndex === props.index;
-    const title = link.label || link.hostname;
-    return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-      TopSiteLink,
-      _extends({}, props, { onClick: this.onLinkClick, onDragEvent: this.props.onDragEvent, className: `${props.className || ""}${isContextMenuOpen ? " active" : ""}`, title: title }),
-      __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-        "div",
-        null,
-        __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-          "button",
-          { className: "context-menu-button icon", onClick: this.onMenuButtonClick },
-          __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-            "span",
-            { className: "sr-only" },
-            __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_1_react_intl__["FormattedMessage"], { id: "context_menu_button_sr", values: { title } })
-          )
-        ),
-        isContextMenuOpen && __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3_content_src_components_LinkMenu_LinkMenu__["a" /* LinkMenu */], {
-          dispatch: props.dispatch,
-          index: props.index,
-          onUpdate: this.onMenuUpdate,
-          options: __WEBPACK_IMPORTED_MODULE_2__TopSitesConstants__["c" /* TOP_SITES_CONTEXT_MENU_OPTIONS */],
-          site: link,
-          siteInfo: this._getTelemetryInfo(),
-          source: __WEBPACK_IMPORTED_MODULE_2__TopSitesConstants__["d" /* TOP_SITES_SOURCE */] })
-      )
-    );
-  }
-}
-/* unused harmony export TopSite */
-
-TopSite.defaultProps = {
-  link: {},
-  onActivate() {}
-};
-
-class TopSitePlaceholder extends __WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.onEditButtonClick = this.onEditButtonClick.bind(this);
-  }
-
-  onEditButtonClick() {
-    this.props.dispatch({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].TOP_SITES_EDIT, data: { index: this.props.index } });
-  }
-
-  render() {
-    return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-      TopSiteLink,
-      _extends({}, this.props, { className: `placeholder ${this.props.className || ""}`, isDraggable: false }),
-      __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement("button", { className: "context-menu-button edit-button icon",
-        title: this.props.intl.formatMessage({ id: "edit_topsites_edit_button" }),
-        onClick: this.onEditButtonClick })
-    );
-  }
-}
-/* unused harmony export TopSitePlaceholder */
-
-
-class _TopSiteList extends __WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent {
-  static get DEFAULT_STATE() {
-    return {
-      activeIndex: null,
-      draggedIndex: null,
-      draggedSite: null,
-      draggedTitle: null,
-      topSitesPreview: null
-    };
-  }
-
-  constructor(props) {
-    super(props);
-    this.state = _TopSiteList.DEFAULT_STATE;
-    this.onDragEvent = this.onDragEvent.bind(this);
-    this.onActivate = this.onActivate.bind(this);
-  }
-
-  componentWillReceiveProps(nextProps) {
-    if (this.state.draggedSite) {
-      const prevTopSites = this.props.TopSites && this.props.TopSites.rows;
-      const newTopSites = nextProps.TopSites && nextProps.TopSites.rows;
-      if (prevTopSites && prevTopSites[this.state.draggedIndex] && prevTopSites[this.state.draggedIndex].url === this.state.draggedSite.url && (!newTopSites[this.state.draggedIndex] || newTopSites[this.state.draggedIndex].url !== this.state.draggedSite.url)) {
-        // We got the new order from the redux store via props. We can clear state now.
-        this.setState(_TopSiteList.DEFAULT_STATE);
-      }
-    }
-  }
-
-  userEvent(event, index) {
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent({
-      event,
-      source: __WEBPACK_IMPORTED_MODULE_2__TopSitesConstants__["d" /* TOP_SITES_SOURCE */],
-      action_position: index
-    }));
-  }
-
-  onDragEvent(event, index, link, title) {
-    switch (event.type) {
-      case "dragstart":
-        this.dropped = false;
-        this.setState({
-          draggedIndex: index,
-          draggedSite: link,
-          draggedTitle: title,
-          activeIndex: null
-        });
-        this.userEvent("DRAG", index);
-        break;
-      case "dragend":
-        if (!this.dropped) {
-          // If there was no drop event, reset the state to the default.
-          this.setState(_TopSiteList.DEFAULT_STATE);
-        }
-        break;
-      case "dragenter":
-        if (index === this.state.draggedIndex) {
-          this.setState({ topSitesPreview: null });
-        } else {
-          this.setState({ topSitesPreview: this._makeTopSitesPreview(index) });
-        }
-        break;
-      case "drop":
-        if (index !== this.state.draggedIndex) {
-          this.dropped = true;
-          this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-            type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].TOP_SITES_INSERT,
-            data: {
-              site: {
-                url: this.state.draggedSite.url,
-                label: this.state.draggedTitle,
-                customScreenshotURL: this.state.draggedSite.customScreenshotURL
-              },
-              index,
-              draggedFromIndex: this.state.draggedIndex
-            }
-          }));
-          this.userEvent("DROP", index);
-        }
-        break;
-    }
-  }
-
-  _getTopSites() {
-    // Make a copy of the sites to truncate or extend to desired length
-    let topSites = this.props.TopSites.rows.slice();
-    topSites.length = this.props.TopSitesRows * __WEBPACK_IMPORTED_MODULE_6_common_Reducers_jsm__["a" /* TOP_SITES_MAX_SITES_PER_ROW */];
-    return topSites;
-  }
-
-  /**
-   * Make a preview of the topsites that will be the result of dropping the currently
-   * dragged site at the specified index.
-   */
-  _makeTopSitesPreview(index) {
-    const topSites = this._getTopSites();
-    topSites[this.state.draggedIndex] = null;
-    const pinnedOnly = topSites.map(site => site && site.isPinned ? site : null);
-    const unpinned = topSites.filter(site => site && !site.isPinned);
-    const siteToInsert = Object.assign({}, this.state.draggedSite, { isPinned: true, isDragged: true });
-    if (!pinnedOnly[index]) {
-      pinnedOnly[index] = siteToInsert;
-    } else {
-      // Find the hole to shift the pinned site(s) towards. We shift towards the
-      // hole left by the site being dragged.
-      let holeIndex = index;
-      const indexStep = index > this.state.draggedIndex ? -1 : 1;
-      while (pinnedOnly[holeIndex]) {
-        holeIndex += indexStep;
-      }
-
-      // Shift towards the hole.
-      const shiftingStep = index > this.state.draggedIndex ? 1 : -1;
-      while (holeIndex !== index) {
-        const nextIndex = holeIndex + shiftingStep;
-        pinnedOnly[holeIndex] = pinnedOnly[nextIndex];
-        holeIndex = nextIndex;
-      }
-      pinnedOnly[index] = siteToInsert;
-    }
-
-    // Fill in the remaining holes with unpinned sites.
-    const preview = pinnedOnly;
-    for (let i = 0; i < preview.length; i++) {
-      if (!preview[i]) {
-        preview[i] = unpinned.shift() || null;
-      }
-    }
-
-    return preview;
-  }
-
-  onActivate(index) {
-    this.setState({ activeIndex: index });
-  }
-
-  render() {
-    const { props } = this;
-    const topSites = this.state.topSitesPreview || this._getTopSites();
-    const topSitesUI = [];
-    const commonProps = {
-      onDragEvent: this.onDragEvent,
-      dispatch: props.dispatch,
-      intl: props.intl
-    };
-    // We assign a key to each placeholder slot. We need it to be independent
-    // of the slot index (i below) so that the keys used stay the same during
-    // drag and drop reordering and the underlying DOM nodes are reused.
-    // This mostly (only?) affects linux so be sure to test on linux before changing.
-    let holeIndex = 0;
-
-    // On narrow viewports, we only show 6 sites per row. We'll mark the rest as
-    // .hide-for-narrow to hide in CSS via @media query.
-    const maxNarrowVisibleIndex = props.TopSitesRows * 6;
-
-    for (let i = 0, l = topSites.length; i < l; i++) {
-      const link = topSites[i] && Object.assign({}, topSites[i], { iconType: this.props.topSiteIconType(topSites[i]) });
-      const slotProps = {
-        key: link ? link.url : holeIndex++,
-        index: i
-      };
-      if (i >= maxNarrowVisibleIndex) {
-        slotProps.className = "hide-for-narrow";
-      }
-      topSitesUI.push(!link ? __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(TopSitePlaceholder, _extends({}, slotProps, commonProps)) : __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(TopSite, _extends({
-        link: link,
-        activeIndex: this.state.activeIndex,
-        onActivate: this.onActivate
-      }, slotProps, commonProps)));
-    }
-    return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-      "ul",
-      { className: `top-sites-list${this.state.draggedSite ? " dnd-active" : ""}` },
-      topSitesUI
-    );
-  }
-}
-/* unused harmony export _TopSiteList */
-
-
-const TopSiteList = Object(__WEBPACK_IMPORTED_MODULE_1_react_intl__["injectIntl"])(_TopSiteList);
-/* harmony export (immutable) */ __webpack_exports__["b"] = TopSiteList;
-
-
-/***/ }),
-/* 23 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_content_src_lib_snippets__ = __webpack_require__(24);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_content_src_components_Base_Base__ = __webpack_require__(30);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_content_src_lib_detect_user_session_start__ = __webpack_require__(44);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_content_src_lib_init_store__ = __webpack_require__(11);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_redux__ = __webpack_require__(4);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react_redux__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_react__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_react_dom__ = __webpack_require__(12);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_react_dom__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_common_Reducers_jsm__ = __webpack_require__(7);
-
-
-
-
-
-
-
-
-
-
-const store = Object(__WEBPACK_IMPORTED_MODULE_4_content_src_lib_init_store__["b" /* initStore */])(__WEBPACK_IMPORTED_MODULE_8_common_Reducers_jsm__["b" /* reducers */], global.gActivityStreamPrerenderedState);
-
-new __WEBPACK_IMPORTED_MODULE_3_content_src_lib_detect_user_session_start__["a" /* DetectUserSessionStart */](store).sendEventOrAddListener();
-
-// If we are starting in a prerendered state, we must wait until the first render
-// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,
-// we can request it immedately.
-if (!global.gActivityStreamPrerenderedState) {
-  store.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].NEW_TAB_STATE_REQUEST }));
-}
-
-__WEBPACK_IMPORTED_MODULE_7_react_dom___default.a.hydrate(__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-  __WEBPACK_IMPORTED_MODULE_5_react_redux__["Provider"],
-  { store: store },
-  __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2_content_src_components_Base_Base__["a" /* Base */], {
-    isFirstrun: global.document.location.href === "about:welcome",
-    isPrerendered: !!global.gActivityStreamPrerenderedState,
-    locale: global.document.documentElement.lang,
-    strings: global.gActivityStreamStrings })
-), document.getElementById("root"));
-
-Object(__WEBPACK_IMPORTED_MODULE_1_content_src_lib_snippets__["a" /* addSnippetsSubscriber */])(store);
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 24 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (immutable) */ __webpack_exports__["a"] = addSnippetsSubscriber;
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_content_src_asrouter_asrouter_content__ = __webpack_require__(8);
-function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
-
-const DATABASE_NAME = "snippets_db";
-const DATABASE_VERSION = 1;
-const SNIPPETS_OBJECTSTORE_NAME = "snippets";
-const SNIPPETS_UPDATE_INTERVAL_MS = 14400000;
-/* unused harmony export SNIPPETS_UPDATE_INTERVAL_MS */
- // 4 hours.
-
-const SNIPPETS_ENABLED_EVENT = "Snippets:Enabled";
-const SNIPPETS_DISABLED_EVENT = "Snippets:Disabled";
-
-
-
-
-/**
- * SnippetsMap - A utility for cacheing values related to the snippet. It has
- *               the same interface as a Map, but is optionally backed by
- *               indexedDB for persistent storage.
- *               Call .connect() to open a database connection and restore any
- *               previously cached data, if necessary.
- *
- */
-class SnippetsMap extends Map {
-  constructor(dispatch) {
-    super();
-    this._db = null;
-    this._dispatch = dispatch;
-  }
-
-  set(key, value) {
-    super.set(key, value);
-    return this._dbTransaction(db => db.put(value, key));
-  }
-
-  delete(key) {
-    super.delete(key);
-    return this._dbTransaction(db => db.delete(key));
-  }
-
-  clear() {
-    super.clear();
-    this._dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SNIPPETS_BLOCKLIST_CLEARED }));
-    return this._dbTransaction(db => db.clear());
-  }
-
-  get blockList() {
-    return this.get("blockList") || [];
-  }
-
-  /**
-   * blockSnippetById - Blocks a snippet given an id
-   *
-   * @param  {str|int} id   The id of the snippet
-   * @return {Promise}      Resolves when the id has been written to indexedDB,
-   *                        or immediately if the snippetMap is not connected
-   */
-  blockSnippetById(id) {
-    var _this = this;
-
-    return _asyncToGenerator(function* () {
-      if (!id) {
-        return;
-      }
-      const { blockList } = _this;
-      if (!blockList.includes(id)) {
-        blockList.push(id);
-        _this._dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SNIPPETS_BLOCKLIST_UPDATED, data: id }));
-        yield _this.set("blockList", blockList);
-      }
-    })();
-  }
-
-  disableOnboarding() {
-    this._dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].DISABLE_ONBOARDING }));
-  }
-
-  showFirefoxAccounts() {
-    this._dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SHOW_FIREFOX_ACCOUNTS }));
-  }
-
-  getTotalBookmarksCount() {
-    return new Promise(resolve => {
-      this._dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].TOTAL_BOOKMARKS_REQUEST }));
-      global.RPMAddMessageListener("ActivityStream:MainToContent", function onMessage({ data: action }) {
-        if (action.type === __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].TOTAL_BOOKMARKS_RESPONSE) {
-          resolve(action.data);
-          global.RPMRemoveMessageListener("ActivityStream:MainToContent", onMessage);
-        }
-      });
-    });
-  }
-
-  getAddonsInfo() {
-    return new Promise(resolve => {
-      this._dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].ADDONS_INFO_REQUEST }));
-      global.RPMAddMessageListener("ActivityStream:MainToContent", function onMessage({ data: action }) {
-        if (action.type === __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].ADDONS_INFO_RESPONSE) {
-          resolve(action.data);
-          global.RPMRemoveMessageListener("ActivityStream:MainToContent", onMessage);
-        }
-      });
-    });
-  }
-
-  /**
-   * connect - Attaches an indexedDB back-end to the Map so that any set values
-   *           are also cached in a store. It also restores any existing values
-   *           that are already stored in the indexedDB store.
-   *
-   * @return {type}  description
-   */
-  connect() {
-    var _this2 = this;
-
-    return _asyncToGenerator(function* () {
-      // Open the connection
-      const db = yield _this2._openDB();
-
-      // Restore any existing values
-      yield _this2._restoreFromDb(db);
-
-      // Attach a reference to the db
-      _this2._db = db;
-    })();
-  }
-
-  /**
-   * _dbTransaction - Returns a db transaction wrapped with the given modifier
-   *                  function as a Promise. If the db has not been connected,
-   *                  it resolves immediately.
-   *
-   * @param  {func} modifier A function to call with the transaction
-   * @return {obj}           A Promise that resolves when the transaction has
-   *                         completed or errored
-   */
-  _dbTransaction(modifier) {
-    if (!this._db) {
-      return Promise.resolve();
-    }
-    return new Promise((resolve, reject) => {
-      const transaction = modifier(this._db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite").objectStore(SNIPPETS_OBJECTSTORE_NAME));
-      transaction.onsuccess = event => resolve();
-
-      /* istanbul ignore next */
-      transaction.onerror = event => reject(transaction.error);
-    });
-  }
-
-  _openDB() {
-    return new Promise((resolve, reject) => {
-      const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);
-
-      /* istanbul ignore next */
-      openRequest.onerror = event => {
-        // Try to delete the old database so that we can start this process over
-        // next time.
-        indexedDB.deleteDatabase(DATABASE_NAME);
-        reject(event);
-      };
-
-      openRequest.onupgradeneeded = event => {
-        const db = event.target.result;
-        if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {
-          db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);
-        }
-      };
-
-      openRequest.onsuccess = event => {
-        let db = event.target.result;
-
-        /* istanbul ignore next */
-        db.onerror = err => console.error(err); // eslint-disable-line no-console
-        /* istanbul ignore next */
-        db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();
-
-        resolve(db);
-      };
-    });
-  }
-
-  _restoreFromDb(db) {
-    return new Promise((resolve, reject) => {
-      let cursorRequest;
-      try {
-        cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME).objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();
-      } catch (err) {
-        // istanbul ignore next
-        reject(err);
-        // istanbul ignore next
-        return;
-      }
-
-      /* istanbul ignore next */
-      cursorRequest.onerror = event => reject(event);
-
-      cursorRequest.onsuccess = event => {
-        let cursor = event.target.result;
-        // Populate the cache from the persistent storage.
-        if (cursor) {
-          if (cursor.value !== "blockList") {
-            this.set(cursor.key, cursor.value);
-          }
-          cursor.continue();
-        } else {
-          // We are done.
-          resolve();
-        }
-      };
-    });
-  }
-}
-/* unused harmony export SnippetsMap */
-
-
-/**
- * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a
- *                    remote location, or else default snippets if the remote
- *                    snippets cannot be retrieved.
- */
-class SnippetsProvider {
-  constructor(dispatch) {
-    // Initialize the Snippets Map and attaches it to a global so that
-    // the snippet payload can interact with it.
-    global.gSnippetsMap = new SnippetsMap(dispatch);
-    this._onAction = this._onAction.bind(this);
-  }
-
-  get snippetsMap() {
-    return global.gSnippetsMap;
-  }
-
-  _refreshSnippets() {
-    var _this3 = this;
-
-    return _asyncToGenerator(function* () {
-      // Check if the cached version of of the snippets in snippetsMap. If it's too
-      // old, blow away the entire snippetsMap.
-      const cachedVersion = _this3.snippetsMap.get("snippets-cached-version");
-
-      if (cachedVersion !== _this3.appData.version) {
-        _this3.snippetsMap.clear();
-      }
-
-      // Has enough time passed for us to require an update?
-      const lastUpdate = _this3.snippetsMap.get("snippets-last-update");
-      const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;
-
-      if (needsUpdate && _this3.appData.snippetsURL) {
-        _this3.snippetsMap.set("snippets-last-update", Date.now());
-        try {
-          const response = yield fetch(_this3.appData.snippetsURL);
-          if (response.status === 200) {
-            const payload = yield response.text();
-
-            _this3.snippetsMap.set("snippets", payload);
-            _this3.snippetsMap.set("snippets-cached-version", _this3.appData.version);
-          }
-        } catch (e) {
-          console.error(e); // eslint-disable-line no-console
-        }
-      }
-    })();
-  }
-
-  _noSnippetFallback() {
-    // TODO
-  }
-
-  _forceOnboardingVisibility(shouldBeVisible) {
-    const onboardingEl = document.getElementById("onboarding-notification-bar");
-
-    if (onboardingEl) {
-      onboardingEl.style.display = shouldBeVisible ? "" : "none";
-    }
-  }
-
-  _showRemoteSnippets() {
-    const snippetsEl = document.getElementById(this.elementId);
-    const payload = this.snippetsMap.get("snippets");
-
-    if (!snippetsEl) {
-      throw new Error(`No element was found with id '${this.elementId}'.`);
-    }
-
-    // This could happen if fetching failed
-    if (!payload) {
-      throw new Error("No remote snippets were found in gSnippetsMap.");
-    }
-
-    if (typeof payload !== "string") {
-      throw new Error("Snippet payload was incorrectly formatted");
-    }
-
-    // Note that injecting snippets can throw if they're invalid XML.
-    // eslint-disable-next-line no-unsanitized/property
-    snippetsEl.innerHTML = payload;
-
-    // Scripts injected by innerHTML are inactive, so we have to relocate them
-    // through DOM manipulation to activate their contents.
-    for (const scriptEl of snippetsEl.getElementsByTagName("script")) {
-      const relocatedScript = document.createElement("script");
-      relocatedScript.text = scriptEl.text;
-      scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);
-    }
-  }
-
-  _onAction(msg) {
-    if (msg.data.type === __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SNIPPET_BLOCKED) {
-      if (!this.snippetsMap.blockList.includes(msg.data.data)) {
-        this.snippetsMap.set("blockList", this.snippetsMap.blockList.concat(msg.data.data));
-        document.getElementById("snippets-container").style.display = "none";
-      }
-    }
-  }
-
-  /**
-   * init - Fetch the snippet payload and show snippets
-   *
-   * @param  {obj} options
-   * @param  {str} options.appData.snippetsURL  The URL from which we fetch snippets
-   * @param  {int} options.appData.version  The current snippets version
-   * @param  {str} options.elementId  The id of the element in which to inject snippets
-   * @param  {bool} options.connect  Should gSnippetsMap connect to indexedDB?
-   */
-  init(options) {
-    var _this4 = this;
-
-    return _asyncToGenerator(function* () {
-      Object.assign(_this4, {
-        appData: {},
-        elementId: "snippets",
-        connect: true
-      }, options);
-
-      // Add listener so we know when snippets are blocked on other pages
-      if (global.RPMAddMessageListener) {
-        global.RPMAddMessageListener("ActivityStream:MainToContent", _this4._onAction);
-      }
-
-      // TODO: Requires enabling indexedDB on newtab
-      // Restore the snippets map from indexedDB
-      if (_this4.connect) {
-        try {
-          yield _this4.snippetsMap.connect();
-        } catch (e) {
-          console.error(e); // eslint-disable-line no-console
-        }
-      }
-
-      // Cache app data values so they can be accessible from gSnippetsMap
-      for (const key of Object.keys(_this4.appData)) {
-        if (key === "blockList") {
-          _this4.snippetsMap.set("blockList", _this4.appData[key]);
-        } else {
-          _this4.snippetsMap.set(`appData.${key}`, _this4.appData[key]);
-        }
-      }
-
-      // Refresh snippets, if enough time has passed.
-      yield _this4._refreshSnippets();
-
-      // Try showing remote snippets, falling back to defaults if necessary.
-      try {
-        _this4._showRemoteSnippets();
-      } catch (e) {
-        _this4._noSnippetFallback(e);
-      }
-
-      window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));
-
-      _this4._forceOnboardingVisibility(true);
-      _this4.initialized = true;
-    })();
-  }
-
-  uninit() {
-    window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));
-    this._forceOnboardingVisibility(false);
-    if (global.RPMRemoveMessageListener) {
-      global.RPMRemoveMessageListener("ActivityStream:MainToContent", this._onAction);
-    }
-    this.initialized = false;
-  }
-}
-/* unused harmony export SnippetsProvider */
-
-
-/**
- * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes
- *                         when the store has received the appropriate
- *                         Snippet data.
- *
- * @param  {obj} store   The redux store
- * @return {obj}         Returns the snippets instance, asrouterContent instance and unsubscribe function
- */
-function addSnippetsSubscriber(store) {
-  const snippets = new SnippetsProvider(store.dispatch);
-  const asrouterContent = new __WEBPACK_IMPORTED_MODULE_1_content_src_asrouter_asrouter_content__["a" /* ASRouterContent */]();
-
-  let initializing = false;
-
-  store.subscribe(_asyncToGenerator(function* () {
-    const state = store.getState();
-    const isASRouterEnabled = state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values.asrouterOnboardingCohort > 0;
-    // state.Prefs.values["feeds.snippets"]:  Should snippets be shown?
-    // state.Snippets.initialized             Is the snippets data initialized?
-    // snippets.initialized:                  Is SnippetsProvider currently initialised?
-    if (state.Prefs.values["feeds.snippets"] &&
-    // If the message center experiment is enabled, don't show snippets
-    !isASRouterEnabled && !state.Prefs.values.disableSnippets && state.Snippets.initialized && !snippets.initialized &&
-    // Don't call init multiple times
-    !initializing && location.href !== "about:welcome") {
-      initializing = true;
-      yield snippets.init({ appData: state.Snippets });
-      initializing = false;
-    } else if ((state.Prefs.values["feeds.snippets"] === false || state.Prefs.values.disableSnippets === true) && snippets.initialized) {
-      snippets.uninit();
-    }
-
-    // Turn on AS Router snippets if the experiment is enabled and the snippets pref is on;
-    // otherwise, turn it off.
-    if ((state.Prefs.values.asrouterExperimentEnabled || state.Prefs.values.asrouterOnboardingCohort > 0) && state.Prefs.values["feeds.snippets"] && !asrouterContent.initialized) {
-      asrouterContent.init();
-    } else if ((!state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values.asrouterOnboardingCohort === 0 || !state.Prefs.values["feeds.snippets"]) && asrouterContent.initialized) {
-      asrouterContent.uninit();
-    }
-  }));
-
-  // These values are returned for testing purposes
-  return { snippets, asrouterContent };
-}
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 25 */
+/* 39 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
 
 // EXTERNAL MODULE: external "React"
-var external__React_ = __webpack_require__(0);
-var external__React__default = /*#__PURE__*/__webpack_require__.n(external__React_);
+var external_React_ = __webpack_require__(5);
 
 // EXTERNAL MODULE: external "PropTypes"
-var external__PropTypes_ = __webpack_require__(9);
-var external__PropTypes__default = /*#__PURE__*/__webpack_require__.n(external__PropTypes_);
+var external_PropTypes_ = __webpack_require__(6);
+var external_PropTypes_default = /*#__PURE__*/__webpack_require__.n(external_PropTypes_);
 
 // EXTERNAL MODULE: ./node_modules/fluent/src/index.js + 8 modules
-var src = __webpack_require__(10);
+var src = __webpack_require__(38);
 
 // CONCATENATED MODULE: ./node_modules/fluent-react/src/localization.js
 
 
 /*
  * `ReactLocalization` handles translation formatting and fallback.
  *
  * The current negotiated fallback chain of languages is stored in the
@@ -5708,17 +6988,17 @@ var src = __webpack_require__(10);
  * `ReactLocalization`'s fallback chain.  When the fallback chain changes (the
  * `messages` iterable is set anew), all subscribed compontent must relocalize.
  *
  * The `ReactLocalization` class instances are exposed to `Localized` elements
  * via the `LocalizationProvider` component.
  */
 class localization_ReactLocalization {
   constructor(messages) {
-    this.contexts = new src["a" /* CachedIterable */](messages);
+    this.contexts = new src["CachedIterable"](messages);
     this.subs = new Set();
   }
 
   /*
    * Subscribe a `Localized` component to changes of `messages`.
    */
   subscribe(comp) {
     this.subs.add(comp);
@@ -5730,24 +7010,24 @@ class localization_ReactLocalization {
   unsubscribe(comp) {
     this.subs.delete(comp);
   }
 
   /*
    * Set a new `messages` iterable and trigger the retranslation.
    */
   setMessages(messages) {
-    this.contexts = new src["a" /* CachedIterable */](messages);
+    this.contexts = new src["CachedIterable"](messages);
 
     // Update all subscribed Localized components.
     this.subs.forEach(comp => comp.relocalize());
   }
 
   getMessageContext(id) {
-    return Object(src["c" /* mapContextSync */])(this.contexts, id);
+    return Object(src["mapContextSync"])(this.contexts, id);
   }
 
   formatCompound(mcx, msg, args) {
     const value = mcx.format(msg, args);
 
     if (msg.attrs) {
       var attrs = {};
       for (const name of Object.keys(msg.attrs)) {
@@ -5801,17 +7081,17 @@ function isReactLocalization(props, prop
  *     </LocalizationProvider>
  *
  * The `LocalizationProvider` component takes one prop: `messages`.  It should
  * be an iterable of `MessageContext` instances in order of the user's
  * preferred languages.  The `MessageContext` instances will be used by
  * `ReactLocalization` to format translations.  If a translation is missing in
  * one instance, `ReactLocalization` will fall back to the next one.
  */
-class provider_LocalizationProvider extends external__React_["Component"] {
+class provider_LocalizationProvider extends external_React_["Component"] {
   constructor(props) {
     super(props);
     const { messages } = props;
 
     if (messages === undefined) {
       throw new Error("LocalizationProvider must receive the messages prop.");
     }
 
@@ -5832,26 +7112,26 @@ class provider_LocalizationProvider exte
     const { messages } = next;
 
     if (messages !== this.props.messages) {
       this.l10n.setMessages(messages);
     }
   }
 
   render() {
-    return external__React_["Children"].only(this.props.children);
+    return external_React_["Children"].only(this.props.children);
   }
 }
 
 provider_LocalizationProvider.childContextTypes = {
   l10n: isReactLocalization
 };
 
 provider_LocalizationProvider.propTypes = {
-  children: external__PropTypes__default.a.element.isRequired,
+  children: external_PropTypes_default.a.element.isRequired,
   messages: isIterable
 };
 
 function isIterable(props, propName, componentName) {
   const prop = props[propName];
 
   if (Symbol.iterator in Object(prop)) {
     return null;
@@ -5860,17 +7140,17 @@ function isIterable(props, propName, com
   return new Error(`The ${propName} prop supplied to ${componentName} must be an iterable.`);
 }
 // CONCATENATED MODULE: ./node_modules/fluent-react/src/with_localization.js
 
 
 
 
 function withLocalization(Inner) {
-  class WithLocalization extends external__React_["Component"] {
+  class WithLocalization extends external_React_["Component"] {
     componentDidMount() {
       const { l10n } = this.context;
 
       if (l10n) {
         l10n.subscribe(this);
       }
     }
 
@@ -5900,17 +7180,17 @@ function withLocalization(Inner) {
       if (!l10n) {
         return fallback || id;
       }
 
       return l10n.getString(id, args, fallback);
     }
 
     render() {
-      return Object(external__React_["createElement"])(Inner, Object.assign(
+      return Object(external_React_["createElement"])(Inner, Object.assign(
       // getString needs to be re-bound on updates to trigger a re-render
       { getString: (...args) => this.getString(...args) }, this.props));
     }
   }
 
   WithLocalization.displayName = `WithLocalization(${displayName(Inner)})`;
 
   WithLocalization.contextTypes = {
@@ -5999,17 +7279,17 @@ const reMarkup = /<|&#?\w+;/;
 function toArguments(props) {
   const args = {};
   const elems = {};
 
   for (const [propname, propval] of Object.entries(props)) {
     if (propname.startsWith("$")) {
       const name = propname.substr(1);
       args[name] = propval;
-    } else if (Object(external__React_["isValidElement"])(propval)) {
+    } else if (Object(external_React_["isValidElement"])(propval)) {
       // We'll try to match localNames of elements found in the translation with
       // names of elements passed as props. localNames are always lowercase.
       const name = propname.toLowerCase();
       elems[name] = propval;
     }
   }
 
   return [args, elems];
@@ -6032,17 +7312,17 @@ function toArguments(props) {
  *         <p>{'Hello, { $username }!'}</p>
  *     </Localized>
  *
  *  It's recommended that the contents of the wrapped component be a string
  *  expression.  The string will be used as the ultimate fallback if no
  *  translation is available.  It also makes it easy to grep for strings in the
  *  source code.
  */
-class localized_Localized extends external__React_["Component"] {
+class localized_Localized extends external_React_["Component"] {
   componentDidMount() {
     const { l10n } = this.context;
 
     if (l10n) {
       l10n.subscribe(this);
     }
   }
 
@@ -6061,17 +7341,17 @@ class localized_Localized extends extern
     // When the `ReactLocalization`'s fallback chain changes, update the
     // component.
     this.forceUpdate();
   }
 
   render() {
     const { l10n } = this.context;
     const { id, attrs, children } = this.props;
-    const elem = external__React_["Children"].only(children);
+    const elem = external_React_["Children"].only(children);
 
     if (!l10n) {
       // Use the wrapped component as fallback.
       return elem;
     }
 
     const mcx = l10n.getMessageContext(id);
 
@@ -6100,30 +7380,30 @@ class localized_Localized extends extern
       }
     }
 
     // If the wrapped component is a known void element, explicitly dismiss the
     // message value and do not pass it to cloneElement in order to avoid the
     // "void element tags must neither have `children` nor use
     // `dangerouslySetInnerHTML`" error.
     if (elem.type in vendor_voidElementTags) {
-      return Object(external__React_["cloneElement"])(elem, localizedProps);
+      return Object(external_React_["cloneElement"])(elem, localizedProps);
     }
 
     // If the message has a null value, we're only interested in its attributes.
     // Do not pass the null value to cloneElement as it would nuke all children
     // of the wrapped component.
     if (messageValue === null) {
-      return Object(external__React_["cloneElement"])(elem, localizedProps);
+      return Object(external_React_["cloneElement"])(elem, localizedProps);
     }
 
     // If the message value doesn't contain any markup nor any HTML entities,
     // insert it as the only child of the wrapped component.
     if (!reMarkup.test(messageValue)) {
-      return Object(external__React_["cloneElement"])(elem, localizedProps, messageValue);
+      return Object(external_React_["cloneElement"])(elem, localizedProps, messageValue);
     }
 
     // If the message contains markup, parse it and try to match the children
     // found in the translation with the props passed to this Localized.
     const translationNodes = Array.from(parseMarkup(messageValue).childNodes);
     const translatedChildren = translationNodes.map(childNode => {
       if (childNode.nodeType === childNode.TEXT_NODE) {
         return childNode.textContent;
@@ -6143,39 +7423,36 @@ class localized_Localized extends extern
       if (sourceChild.type in vendor_voidElementTags) {
         return sourceChild;
       }
 
       // TODO Protect contents of elements wrapped in <Localized>
       // https://github.com/projectfluent/fluent.js/issues/184
       // TODO  Control localizable attributes on elements passed as props
       // https://github.com/projectfluent/fluent.js/issues/185
-      return Object(external__React_["cloneElement"])(sourceChild, null, childNode.textContent);
+      return Object(external_React_["cloneElement"])(sourceChild, null, childNode.textContent);
     });
 
-    return Object(external__React_["cloneElement"])(elem, localizedProps, ...translatedChildren);
+    return Object(external_React_["cloneElement"])(elem, localizedProps, ...translatedChildren);
   }
 }
 
 localized_Localized.contextTypes = {
   l10n: isReactLocalization
 };
 
 localized_Localized.propTypes = {
-  children: external__PropTypes__default.a.element.isRequired
+  children: external_PropTypes_default.a.element.isRequired
 };
 // CONCATENATED MODULE: ./node_modules/fluent-react/src/index.js
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "a", function() { return provider_LocalizationProvider; });
-/* unused concated harmony import withLocalization */
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, false, function() { return withLocalization; });
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "b", function() { return localized_Localized; });
-/* unused concated harmony import ReactLocalization */
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, false, function() { return localization_ReactLocalization; });
-/* unused concated harmony import isReactLocalization */
-/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, false, function() { return isReactLocalization; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "LocalizationProvider", function() { return provider_LocalizationProvider; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "withLocalization", function() { return withLocalization; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "Localized", function() { return localized_Localized; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "ReactLocalization", function() { return localization_ReactLocalization; });
+/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "isReactLocalization", function() { return isReactLocalization; });
 /*
  * @module fluent-react
  * @overview
  *
 
  * `fluent-react` provides React bindings for Fluent.  It takes advantage of
  * React's Components system and the virtual DOM.  Translations are exposed to
  * components via the provider pattern.
@@ -6191,247 +7468,27 @@ localized_Localized.propTypes = {
  */
 
 
 
 
 
 
 /***/ }),
-/* 26 */
-/***/ (function(module, exports) {
-
-module.exports = Redux;
-
-/***/ }),
-/* 27 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);
-
-
-const VISIBLE = "visible";
-/* unused harmony export VISIBLE */
-
-const VISIBILITY_CHANGE_EVENT = "visibilitychange";
-/* unused harmony export VISIBILITY_CHANGE_EVENT */
-
-
-/**
- * Component wrapper used to send telemetry pings on every impression.
- */
-class ImpressionsWrapper extends __WEBPACK_IMPORTED_MODULE_0_react___default.a.PureComponent {
-  // This sends an event when a user sees a set of new content. If content
-  // changes while the page is hidden (i.e. preloaded or on a hidden tab),
-  // only send the event if the page becomes visible again.
-  sendImpressionOrAddListener() {
-    if (this.props.document.visibilityState === VISIBLE) {
-      this.props.sendImpression({ id: this.props.id });
-    } else {
-      // We should only ever send the latest impression stats ping, so remove any
-      // older listeners.
-      if (this._onVisibilityChange) {
-        this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
-      }
-
-      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.
-      this._onVisibilityChange = () => {
-        if (this.props.document.visibilityState === VISIBLE) {
-          this.props.sendImpression({ id: this.props.id });
-          this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
-        }
-      };
-      this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
-    }
-  }
-
-  componentWillUnmount() {
-    if (this._onVisibilityChange) {
-      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
-    }
-  }
-
-  componentDidMount() {
-    if (this.props.sendOnMount) {
-      this.sendImpressionOrAddListener();
-    }
-  }
-
-  componentDidUpdate(prevProps) {
-    if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {
-      this.sendImpressionOrAddListener();
-    }
-  }
-
-  render() {
-    return this.props.children;
-  }
-}
-/* harmony export (immutable) */ __webpack_exports__["a"] = ImpressionsWrapper;
-
-
-ImpressionsWrapper.defaultProps = {
-  document: global.document,
-  sendOnMount: true
-};
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 28 */
+/* 40 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
 
 // EXTERNAL MODULE: external "React"
-var external__React_ = __webpack_require__(0);
-var external__React__default = /*#__PURE__*/__webpack_require__.n(external__React_);
-
-// CONCATENATED MODULE: ./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx
-
-
-class ModalOverlay_ModalOverlay extends external__React__default.a.PureComponent {
-  componentWillMount() {
-    this.setState({ active: true });
-    document.body.classList.add("modal-open");
-  }
-
-  componentWillUnmount() {
-    document.body.classList.remove("modal-open");
-    this.setState({ active: false });
-  }
-
-  render() {
-    const { active } = this.state;
-    const { title, button_label } = this.props;
-    return external__React__default.a.createElement(
-      "div",
-      null,
-      external__React__default.a.createElement("div", { className: `modalOverlayOuter ${active ? "active" : ""}` }),
-      external__React__default.a.createElement(
-        "div",
-        { className: `modalOverlayInner ${active ? "active" : ""}` },
-        external__React__default.a.createElement(
-          "h2",
-          null,
-          " ",
-          title,
-          " "
-        ),
-        this.props.children,
-        external__React__default.a.createElement(
-          "div",
-          { className: "footer" },
-          external__React__default.a.createElement(
-            "button",
-            { onClick: this.props.onDoneButton, className: "button primary modalButton" },
-            " ",
-            button_label,
-            " "
-          )
-        )
-      )
-    );
-  }
-}
-// CONCATENATED MODULE: ./content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-
-
-
-class OnboardingMessage_OnboardingCard extends external__React__default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.onClick = this.onClick.bind(this);
-  }
-
-  onClick() {
-    const { props } = this;
-    props.sendUserActionTelemetry({ event: "CLICK_BUTTON", message_id: props.id, id: props.UISurface });
-    props.onAction(props.content);
-  }
-
-  render() {
-    const { content } = this.props;
-    return external__React__default.a.createElement(
-      "div",
-      { className: "onboardingMessage" },
-      external__React__default.a.createElement("div", { className: `onboardingMessageImage ${content.icon}` }),
-      external__React__default.a.createElement(
-        "div",
-        { className: "onboardingContent" },
-        external__React__default.a.createElement(
-          "span",
-          null,
-          external__React__default.a.createElement(
-            "h3",
-            null,
-            " ",
-            content.title,
-            " "
-          ),
-          external__React__default.a.createElement(
-            "p",
-            null,
-            " ",
-            content.text,
-            " "
-          )
-        ),
-        external__React__default.a.createElement(
-          "span",
-          null,
-          external__React__default.a.createElement(
-            "button",
-            { className: "button onboardingButton", onClick: this.onClick },
-            " ",
-            content.button_label,
-            " "
-          )
-        )
-      )
-    );
-  }
-}
-
-class OnboardingMessage_OnboardingMessage extends external__React__default.a.PureComponent {
-  render() {
-    const { props } = this;
-    return external__React__default.a.createElement(
-      ModalOverlay_ModalOverlay,
-      _extends({}, props, { button_label: "Start Browsing", title: "Welcome to Firefox" }),
-      external__React__default.a.createElement(
-        "div",
-        { className: "onboardingMessageContainer" },
-        props.bundle.map(message => external__React__default.a.createElement(OnboardingMessage_OnboardingCard, _extends({ key: message.id,
-          sendUserActionTelemetry: props.sendUserActionTelemetry,
-          onAction: props.onAction,
-          UISurface: props.UISurface
-        }, message)))
-      )
-    );
-  }
-}
-/* harmony export (immutable) */ __webpack_exports__["a"] = OnboardingMessage_OnboardingMessage;
-
-
-/***/ }),
-/* 29 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-
-// EXTERNAL MODULE: external "React"
-var external__React_ = __webpack_require__(0);
-var external__React__default = /*#__PURE__*/__webpack_require__.n(external__React_);
+var external_React_ = __webpack_require__(5);
+var external_React_default = /*#__PURE__*/__webpack_require__.n(external_React_);
 
 // EXTERNAL MODULE: ./content-src/asrouter/template-utils.js
-var template_utils = __webpack_require__(5);
+var template_utils = __webpack_require__(11);
 
 // CONCATENATED MODULE: ./content-src/asrouter/components/Button/Button.jsx
 
 
 
 const ALLOWED_STYLE_TAGS = ["color", "backgroundColor"];
 
 const Button = props => {
@@ -6443,1228 +7500,711 @@ const Button = props => {
       style[tag] = props[tag];
     }
   }
   // remove border if bg is set to something custom
   if (style.backgroundColor) {
     style.border = "0";
   }
 
-  return external__React__default.a.createElement(
+  return external_React_default.a.createElement(
     "a",
-    { href: Object(template_utils["a" /* safeURI */])(props.url),
+    { href: Object(template_utils["safeURI"])(props.url),
       onClick: props.onClick,
       className: props.className || "ASRouterButton",
       style: style },
     props.children
   );
 };
 // CONCATENATED MODULE: ./content-src/asrouter/components/SnippetBase/SnippetBase.jsx
 
 
-class SnippetBase_SnippetBase extends external__React__default.a.PureComponent {
+class SnippetBase_SnippetBase extends external_React_default.a.PureComponent {
   constructor(props) {
     super(props);
     this.onBlockClicked = this.onBlockClicked.bind(this);
   }
 
   onBlockClicked() {
     this.props.sendUserActionTelemetry({ event: "BLOCK", id: this.props.UISurface });
     this.props.onBlock();
   }
 
   render() {
     const { props } = this;
 
     const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : ""}`;
 
-    return external__React__default.a.createElement(
+    return external_React_default.a.createElement(
       "div",
       { className: containerClassName },
-      external__React__default.a.createElement(
+      external_React_default.a.createElement(
         "div",
         { className: "innerWrapper" },
         props.children
       ),
-      external__React__default.a.createElement("button", { className: "blockButton", onClick: this.onBlockClicked })
+      external_React_default.a.createElement("button", { className: "blockButton", onClick: this.onBlockClicked })
     );
   }
 }
 // CONCATENATED MODULE: ./content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SimpleSnippet", function() { return SimpleSnippet_SimpleSnippet; });
 var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
 
 
 
 
 
 
 const DEFAULT_ICON_PATH = "chrome://branding/content/icon64.png";
 
-class SimpleSnippet_SimpleSnippet extends external__React__default.a.PureComponent {
+class SimpleSnippet_SimpleSnippet extends external_React_default.a.PureComponent {
   constructor(props) {
     super(props);
     this.onButtonClick = this.onButtonClick.bind(this);
   }
 
   onButtonClick() {
     this.props.sendUserActionTelemetry({ event: "CLICK_BUTTON", id: this.props.UISurface });
   }
 
   renderTitle() {
     const { title } = this.props.content;
-    return title ? external__React__default.a.createElement(
+    return title ? external_React_default.a.createElement(
       "h3",
       { className: "title" },
       title
     ) : null;
   }
 
   renderTitleIcon() {
-    const titleIcon = Object(template_utils["a" /* safeURI */])(this.props.content.title_icon);
-    return titleIcon ? external__React__default.a.createElement("span", { className: "titleIcon", style: { backgroundImage: `url("${titleIcon}")` } }) : null;
+    const titleIcon = Object(template_utils["safeURI"])(this.props.content.title_icon);
+    return titleIcon ? external_React_default.a.createElement("span", { className: "titleIcon", style: { backgroundImage: `url("${titleIcon}")` } }) : null;
   }
 
   renderButton(className) {
     const { props } = this;
-    return external__React__default.a.createElement(
+    return external_React_default.a.createElement(
       Button,
       {
         className: className,
         onClick: this.onButtonClick,
         url: props.content.button_url,
         color: props.content.button_color,
         backgroundColor: props.content.button_background_color },
       props.content.button_label
     );
   }
 
   render() {
     const { props } = this;
     const hasLink = props.content.button_url && props.content.button_type === "anchor";
     const hasButton = props.content.button_url && !props.content.button_type;
     const className = `SimpleSnippet${props.content.tall ? " tall" : ""}`;
-    return external__React__default.a.createElement(
+    return external_React_default.a.createElement(
       SnippetBase_SnippetBase,
       _extends({}, props, { className: className }),
-      external__React__default.a.createElement("img", { src: Object(template_utils["a" /* safeURI */])(props.content.icon) || DEFAULT_ICON_PATH, className: "icon" }),
-      external__React__default.a.createElement(
+      external_React_default.a.createElement("img", { src: Object(template_utils["safeURI"])(props.content.icon) || DEFAULT_ICON_PATH, className: "icon" }),
+      external_React_default.a.createElement(
         "div",
         null,
         this.renderTitleIcon(),
         " ",
         this.renderTitle(),
         " ",
-        external__React__default.a.createElement(
+        external_React_default.a.createElement(
           "p",
           { className: "body" },
           props.richText || props.content.text
         ),
         " ",
         hasLink ? this.renderButton("ASRouterAnchor") : null
       ),
-      hasButton ? external__React__default.a.createElement(
+      hasButton ? external_React_default.a.createElement(
         "div",
         null,
         this.renderButton()
       ) : null
     );
   }
 }
-/* harmony export (immutable) */ __webpack_exports__["a"] = SimpleSnippet_SimpleSnippet;
-
-
-/***/ }),
-/* 30 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_content_src_components_ASRouterAdmin_ASRouterAdmin__ = __webpack_require__(31);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_content_src_components_ConfirmDialog_ConfirmDialog__ = __webpack_require__(32);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_redux__ = __webpack_require__(4);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react_redux__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_content_src_components_ErrorBoundary_ErrorBoundary__ = __webpack_require__(13);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_content_src_components_ManualMigration_ManualMigration__ = __webpack_require__(33);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_common_PrerenderData_jsm__ = __webpack_require__(34);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_react__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_content_src_components_Search_Search__ = __webpack_require__(35);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_content_src_components_Sections_Sections__ = __webpack_require__(37);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_content_src_components_StartupOverlay_StartupOverlay__ = __webpack_require__(43);
-
-
-
-
-
-
-
-
-
-
-
-
-
-const PrefsButton = Object(__WEBPACK_IMPORTED_MODULE_1_react_intl__["injectIntl"])(props => __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(
-  "div",
-  { className: "prefs-button" },
-  __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement("button", { className: "icon icon-settings", onClick: props.onClick, title: props.intl.formatMessage({ id: "settings_pane_button_label" }) })
-));
-
-// Add the locale data for pluralization and relative-time formatting for now,
-// this just uses english locale data. We can make this more sophisticated if
-// more features are needed.
-function addLocaleDataForReactIntl(locale) {
-  Object(__WEBPACK_IMPORTED_MODULE_1_react_intl__["addLocaleData"])([{ locale, parentLocale: "en" }]);
-}
-
-class _Base extends __WEBPACK_IMPORTED_MODULE_8_react___default.a.PureComponent {
-  componentWillMount() {
-    const { App, locale } = this.props;
-    this.sendNewTabRehydrated(App);
-    addLocaleDataForReactIntl(locale);
-  }
-
-  componentDidMount() {
-    // Request state AFTER the first render to ensure we don't cause the
-    // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is
-    // dispatched right after the store is ready.
-    if (this.props.isPrerendered) {
-      this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].NEW_TAB_STATE_REQUEST }));
-      this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].PAGE_PRERENDERED }));
-    }
-  }
-
-  componentWillUnmount() {
-    this.updateTheme();
-  }
-
-  componentWillUpdate({ App }) {
-    this.updateTheme();
-    this.sendNewTabRehydrated(App);
-  }
-
-  updateTheme() {
-    const bodyClassName = ["activity-stream", this.props.isFirstrun ? "welcome" : ""].filter(v => v).join(" ");
-    global.document.body.className = bodyClassName;
-  }
-
-  // The NEW_TAB_REHYDRATED event is used to inform feeds that their
-  // data has been consumed e.g. for counting the number of tabs that
-  // have rendered that data.
-  sendNewTabRehydrated(App) {
-    if (App && App.initialized && !this.renderNotified) {
-      this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].NEW_TAB_REHYDRATED, data: {} }));
-      this.renderNotified = true;
-    }
-  }
-
-  render() {
-    const { props } = this;
-    const { App, locale, strings } = props;
-    const { initialized } = App;
-
-    const prefs = props.Prefs.values;
-    if ((prefs.asrouterExperimentEnabled || prefs.asrouterOnboardingCohort > 0) && window.location.hash === "#asrouter") {
-      return __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2_content_src_components_ASRouterAdmin_ASRouterAdmin__["a" /* ASRouterAdmin */], null);
-    }
-
-    if (!props.isPrerendered && !initialized) {
-      return null;
-    }
-
-    // Until we can delete the existing onboarding tour, just hide the onboarding button when users are in
-    // the new simplified onboarding experiment. CSS hacks ftw
-    if (prefs.asrouterOnboardingCohort > 0) {
-      global.document.body.classList.add("hide-onboarding");
-    }
-
-    return __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(
-      __WEBPACK_IMPORTED_MODULE_1_react_intl__["IntlProvider"],
-      { locale: locale, messages: strings },
-      __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(
-        __WEBPACK_IMPORTED_MODULE_5_content_src_components_ErrorBoundary_ErrorBoundary__["a" /* ErrorBoundary */],
-        { className: "base-content-fallback" },
-        __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(BaseContent, this.props)
-      )
-    );
-  }
-}
-/* unused harmony export _Base */
-
-
-class BaseContent extends __WEBPACK_IMPORTED_MODULE_8_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.openPreferences = this.openPreferences.bind(this);
-  }
-
-  openPreferences() {
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].OnlyToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SETTINGS_OPEN }));
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent({ event: "OPEN_NEWTAB_PREFS" }));
-  }
-
-  render() {
-    const { props } = this;
-    const { App } = props;
-    const { initialized } = App;
-    const prefs = props.Prefs.values;
-
-    const shouldBeFixedToTop = __WEBPACK_IMPORTED_MODULE_7_common_PrerenderData_jsm__["a" /* PrerenderData */].arePrefsValid(name => prefs[name]);
-
-    const outerClassName = ["outer-wrapper", shouldBeFixedToTop && "fixed-to-top"].filter(v => v).join(" ");
-
-    return __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(
-      "div",
-      null,
-      __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(
-        "div",
-        { className: outerClassName },
-        __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(
-          "main",
-          null,
-          prefs.showSearch && __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(
-            "div",
-            { className: "non-collapsible-section" },
-            __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(
-              __WEBPACK_IMPORTED_MODULE_5_content_src_components_ErrorBoundary_ErrorBoundary__["a" /* ErrorBoundary */],
-              null,
-              __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_9_content_src_components_Search_Search__["a" /* Search */], null)
-            )
-          ),
-          __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(
-            "div",
-            { className: `body-wrapper${initialized ? " on" : ""}` },
-            !prefs.migrationExpired && __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(
-              "div",
-              { className: "non-collapsible-section" },
-              __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_6_content_src_components_ManualMigration_ManualMigration__["a" /* ManualMigration */], null)
-            ),
-            __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_10_content_src_components_Sections_Sections__["a" /* Sections */], null),
-            __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(PrefsButton, { onClick: this.openPreferences })
-          ),
-          __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3_content_src_components_ConfirmDialog_ConfirmDialog__["a" /* ConfirmDialog */], null)
-        )
-      ),
-      this.props.isFirstrun && __WEBPACK_IMPORTED_MODULE_8_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_11_content_src_components_StartupOverlay_StartupOverlay__["a" /* StartupOverlay */], null)
-    );
-  }
-}
-/* unused harmony export BaseContent */
-
-
-const Base = Object(__WEBPACK_IMPORTED_MODULE_4_react_redux__["connect"])(state => ({ App: state.App, Prefs: state.Prefs }))(_Base);
-/* harmony export (immutable) */ __webpack_exports__["a"] = Base;
-
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 31 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__ = __webpack_require__(8);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);
-
-
-
-class ASRouterAdmin extends __WEBPACK_IMPORTED_MODULE_1_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.onMessage = this.onMessage.bind(this);
-    this.findOtherBundledMessagesOfSameTemplate = this.findOtherBundledMessagesOfSameTemplate.bind(this);
-    this.state = {};
-  }
-
-  onMessage({ data: action }) {
-    if (action.type === "ADMIN_SET_STATE") {
-      this.setState(action.data);
-    }
-  }
-
-  componentWillMount() {
-    const endpoint = __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].getEndpoint();
-    __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].sendMessage({ type: "ADMIN_CONNECT_STATE", data: { endpoint } });
-    __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].addListener(this.onMessage);
-  }
-
-  componentWillUnmount() {
-    __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].removeListener(this.onMessage);
-  }
-
-  findOtherBundledMessagesOfSameTemplate(template) {
-    return this.state.messages.filter(msg => msg.template === template && msg.bundled);
-  }
-
-  handleBlock(msg) {
-    if (msg.bundled) {
-      // If we are blocking a message that belongs to a bundle, block all other messages that are bundled of that same template
-      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);
-      return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].blockBundle(bundle);
-    }
-    return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].blockById(msg.id);
-  }
-
-  handleUnblock(msg) {
-    if (msg.bundled) {
-      // If we are unblocking a message that belongs to a bundle, unblock all other messages that are bundled of that same template
-      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);
-      return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].unblockBundle(bundle);
-    }
-    return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].unblockById(msg.id);
-  }
-
-  handleOverride(id) {
-    return () => __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].overrideMessage(id);
-  }
-
-  renderMessageItem(msg) {
-    const isCurrent = msg.id === this.state.lastMessageId;
-    const isBlocked = this.state.blockList.includes(msg.id);
-
-    let itemClassName = "message-item";
-    if (isCurrent) {
-      itemClassName += " current";
-    }
-    if (isBlocked) {
-      itemClassName += " blocked";
-    }
-
-    return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-      "tr",
-      { className: itemClassName, key: msg.id },
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "td",
-        { className: "message-id" },
-        __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-          "span",
-          null,
-          msg.id
-        )
-      ),
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "td",
-        null,
-        __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-          "button",
-          { className: `button ${isBlocked ? "" : " primary"}`, onClick: isBlocked ? this.handleUnblock(msg) : this.handleBlock(msg) },
-          isBlocked ? "Unblock" : "Block"
-        ),
-        isBlocked ? null : __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-          "button",
-          { className: "button", onClick: this.handleOverride(msg.id) },
-          "Show"
-        )
-      ),
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "td",
-        { className: "message-summary" },
-        __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-          "pre",
-          null,
-          JSON.stringify(msg, null, 2)
-        )
-      )
-    );
-  }
-
-  renderMessages() {
-    if (!this.state.messages) {
-      return null;
-    }
-    return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-      "table",
-      null,
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "tbody",
-        null,
-        this.state.messages.map(msg => this.renderMessageItem(msg))
-      )
-    );
-  }
-
-  renderProviders() {
-    return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-      "table",
-      null,
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "tbody",
-        null,
-        this.state.providers.map((provider, i) => __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-          "tr",
-          { className: "message-item", key: i },
-          __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-            "td",
-            null,
-            provider.id
-          ),
-          __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-            "td",
-            null,
-            provider.type === "remote" ? __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-              "a",
-              { target: "_blank", href: provider.url },
-              provider.url
-            ) : "(local)"
-          )
-        ))
-      )
-    );
-  }
-
-  render() {
-    return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-      "div",
-      { className: "asrouter-admin outer-wrapper" },
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "h1",
-        null,
-        "AS Router Admin"
-      ),
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "button",
-        { className: "button primary", onClick: __WEBPACK_IMPORTED_MODULE_0__asrouter_asrouter_content__["b" /* ASRouterUtils */].getNextMessage },
-        "Refresh Current Message"
-      ),
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "h2",
-        null,
-        "Message Providers"
-      ),
-      this.state.providers ? this.renderProviders() : null,
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "h2",
-        null,
-        "Messages"
-      ),
-      this.renderMessages()
-    );
-  }
-}
-/* harmony export (immutable) */ __webpack_exports__["a"] = ASRouterAdmin;
-
-
-/***/ }),
-/* 32 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_redux__ = __webpack_require__(4);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react_redux__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__);
-
-
-
-
-
-/**
- * ConfirmDialog component.
- * One primary action button, one cancel button.
- *
- * Content displayed is controlled by `data` prop the component receives.
- * Example:
- * data: {
- *   // Any sort of data needed to be passed around by actions.
- *   payload: site.url,
- *   // Primary button AlsoToMain action.
- *   action: "DELETE_HISTORY_URL",
- *   // Primary button USerEvent action.
- *   userEvent: "DELETE",
- *   // Array of locale ids to display.
- *   message_body: ["confirm_history_delete_p1", "confirm_history_delete_notice_p2"],
- *   // Text for primary button.
- *   confirm_button_string_id: "menu_action_delete"
- * },
- */
-class _ConfirmDialog extends __WEBPACK_IMPORTED_MODULE_3_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this._handleCancelBtn = this._handleCancelBtn.bind(this);
-    this._handleConfirmBtn = this._handleConfirmBtn.bind(this);
-  }
-
-  _handleCancelBtn() {
-    this.props.dispatch({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].DIALOG_CANCEL });
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent({ event: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].DIALOG_CANCEL, source: this.props.data.eventSource }));
-  }
-
-  _handleConfirmBtn() {
-    this.props.data.onConfirm.forEach(this.props.dispatch);
-  }
-
-  _renderModalMessage() {
-    const message_body = this.props.data.body_string_id;
-
-    if (!message_body) {
-      return null;
-    }
-
-    return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-      "span",
-      null,
-      message_body.map(msg => __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-        "p",
-        { key: msg },
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2_react_intl__["FormattedMessage"], { id: msg })
-      ))
-    );
-  }
-
-  render() {
-    if (!this.props.visible) {
-      return null;
-    }
-
-    return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-      "div",
-      { className: "confirmation-dialog" },
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("div", { className: "modal-overlay", onClick: this._handleCancelBtn }),
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-        "div",
-        { className: "modal" },
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-          "section",
-          { className: "modal-message" },
-          this.props.data.icon && __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("span", { className: `icon icon-spacer icon-${this.props.data.icon}` }),
-          this._renderModalMessage()
-        ),
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-          "section",
-          { className: "actions" },
-          __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-            "button",
-            { onClick: this._handleCancelBtn },
-            __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2_react_intl__["FormattedMessage"], { id: this.props.data.cancel_button_string_id })
-          ),
-          __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-            "button",
-            { className: "done", onClick: this._handleConfirmBtn },
-            __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2_react_intl__["FormattedMessage"], { id: this.props.data.confirm_button_string_id })
-          )
-        )
-      )
-    );
-  }
-}
-/* unused harmony export _ConfirmDialog */
-
-
-const ConfirmDialog = Object(__WEBPACK_IMPORTED_MODULE_1_react_redux__["connect"])(state => state.Dialog)(_ConfirmDialog);
-/* harmony export (immutable) */ __webpack_exports__["a"] = ConfirmDialog;
-
 
 /***/ }),
-/* 33 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_redux__ = __webpack_require__(4);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react_redux__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__);
-
-
-
-
-
-/**
- * Manual migration component used to start the profile import wizard.
- * Message is presented temporarily and will go away if:
- * 1.  User clicks "No Thanks"
- * 2.  User completed the data import
- * 3.  After 3 active days
- * 4.  User clicks "Cancel" on the import wizard (currently not implemented).
- */
-class _ManualMigration extends __WEBPACK_IMPORTED_MODULE_3_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.onLaunchTour = this.onLaunchTour.bind(this);
-    this.onCancelTour = this.onCancelTour.bind(this);
-  }
-
-  onLaunchTour() {
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].MIGRATION_START }));
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent({ event: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].MIGRATION_START }));
-  }
-
-  onCancelTour() {
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].MIGRATION_CANCEL }));
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent({ event: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].MIGRATION_CANCEL }));
-  }
-
-  render() {
-    return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-      "div",
-      { className: "manual-migration-container" },
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-        "p",
-        null,
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("span", { className: "icon icon-import" }),
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2_react_intl__["FormattedMessage"], { id: "manual_migration_explanation2" })
-      ),
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-        "div",
-        { className: "manual-migration-actions actions" },
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-          "button",
-          { className: "dismiss", onClick: this.onCancelTour },
-          __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2_react_intl__["FormattedMessage"], { id: "manual_migration_cancel_button" })
-        ),
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-          "button",
-          { onClick: this.onLaunchTour },
-          __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2_react_intl__["FormattedMessage"], { id: "manual_migration_import_button" })
-        )
-      )
-    );
-  }
-}
-/* unused harmony export _ManualMigration */
-
-
-const ManualMigration = Object(__WEBPACK_IMPORTED_MODULE_1_react_redux__["connect"])()(_ManualMigration);
-/* harmony export (immutable) */ __webpack_exports__["a"] = ManualMigration;
-
-
-/***/ }),
-/* 34 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PrerenderData; });
-class _PrerenderData {
-  constructor(options) {
-    this.initialPrefs = options.initialPrefs;
-    this.initialSections = options.initialSections;
-    this._setValidation(options.validation);
-  }
-
-  get validation() {
-    return this._validation;
-  }
-
-  set validation(value) {
-    this._setValidation(value);
-  }
-
-  get invalidatingPrefs() {
-    return this._invalidatingPrefs;
-  }
-
-  // This is needed so we can use it in the constructor
-  _setValidation(value = []) {
-    this._validation = value;
-    this._invalidatingPrefs = value.reduce((result, next) => {
-      if (typeof next === "string") {
-        result.push(next);
-        return result;
-      } else if (next && next.oneOf) {
-        return result.concat(next.oneOf);
-      } else if (next && next.indexedDB) {
-        return result.concat(next.indexedDB);
-      }
-      throw new Error("Your validation configuration is not properly configured");
-    }, []);
-  }
-
-  arePrefsValid(getPref, indexedDBPrefs) {
-    for (const prefs of this.validation) {
-      // {oneOf: ["foo", "bar"]}
-      if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {
-        return false;
-
-        // {indexedDB: ["foo", "bar"]}
-      } else if (indexedDBPrefs && prefs && prefs.indexedDB) {
-        const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));
-        if (anyModifiedPrefs) {
-          return false;
-        }
-        // "foo"
-      } else if (getPref(prefs) !== this.initialPrefs[prefs]) {
-        return false;
-      }
-    }
-    return true;
-  }
-}
-/* unused harmony export _PrerenderData */
-
-var PrerenderData = new _PrerenderData({
-  initialPrefs: {
-    "migrationExpired": true,
-    "feeds.topsites": true,
-    "showSearch": true,
-    "topSitesRows": 1,
-    "feeds.section.topstories": true,
-    "feeds.section.highlights": true,
-    "sectionOrder": "topsites,topstories,highlights",
-    "collapsed": false
-  },
-  // Prefs listed as invalidating will prevent the prerendered version
-  // of AS from being used if their value is something other than what is listed
-  // here. This is required because some preferences cause the page layout to be
-  // too different for the prerendered version to be used. Unfortunately, this
-  // will result in users who have modified some of their preferences not being
-  // able to get the benefits of prerendering.
-  validation: ["feeds.topsites", "showSearch", "topSitesRows", "sectionOrder",
-  // This means if either of these are set to their default values,
-  // prerendering can be used.
-  { oneOf: ["feeds.section.topstories", "feeds.section.highlights"] },
-  // If any component has the following preference set to `true` it will
-  // invalidate the prerendered version.
-  { indexedDB: ["collapsed"] }],
-  initialSections: [{
-    enabled: true,
-    icon: "pocket",
-    id: "topstories",
-    order: 1,
-    title: { id: "header_recommended_by", values: { provider: "Pocket" } }
-  }, {
-    enabled: true,
-    id: "highlights",
-    icon: "highlights",
-    order: 2,
-    title: { id: "header_highlights" }
-  }]
-});
-
-/***/ }),
-/* 35 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_redux__ = __webpack_require__(4);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react_redux__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_content_src_lib_constants__ = __webpack_require__(36);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react__);
-/* globals ContentSearchUIController */
-
-
-
-
-
-
-
-
-class _Search extends __WEBPACK_IMPORTED_MODULE_4_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.onClick = this.onClick.bind(this);
-    this.onInputMount = this.onInputMount.bind(this);
-  }
-
-  handleEvent(event) {
-    // Also track search events with our own telemetry
-    if (event.detail.type === "Search") {
-      this.props.dispatch(__WEBPACK_IMPORTED_MODULE_1_common_Actions_jsm__["b" /* actionCreators */].UserEvent({ event: "SEARCH" }));
-    }
-  }
-
-  onClick(event) {
-    window.gContentSearchController.search(event);
-  }
-
-  componentWillUnmount() {
-    delete window.gContentSearchController;
-  }
-
-  onInputMount(input) {
-    if (input) {
-      // The "healthReportKey" and needs to be "newtab" or "abouthome" so that
-      // BrowserUsageTelemetry.jsm knows to handle events with this name, and
-      // can add the appropriate telemetry probes for search. Without the correct
-      // name, certain tests like browser_UsageTelemetry_content.js will fail
-      // (See github ticket #2348 for more details)
-      const healthReportKey = __WEBPACK_IMPORTED_MODULE_3_content_src_lib_constants__["a" /* IS_NEWTAB */] ? "newtab" : "abouthome";
-
-      // The "searchSource" needs to be "newtab" or "homepage" and is sent with
-      // the search data and acts as context for the search request (See
-      // nsISearchEngine.getSubmission). It is necessary so that search engine
-      // plugins can correctly atribute referrals. (See github ticket #3321 for
-      // more details)
-      const searchSource = __WEBPACK_IMPORTED_MODULE_3_content_src_lib_constants__["a" /* IS_NEWTAB */] ? "newtab" : "homepage";
-
-      // gContentSearchController needs to exist as a global so that tests for
-      // the existing about:home can find it; and so it allows these tests to pass.
-      // In the future, when activity stream is default about:home, this can be renamed
-      window.gContentSearchController = new ContentSearchUIController(input, input.parentNode, healthReportKey, searchSource);
-      addEventListener("ContentSearchClient", this);
-    } else {
-      window.gContentSearchController = null;
-      removeEventListener("ContentSearchClient", this);
-    }
-  }
-
-  /*
-   * Do not change the ID on the input field, as legacy newtab code
-   * specifically looks for the id 'newtab-search-text' on input fields
-   * in order to execute searches in various tests
-   */
-  render() {
-    return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-      "div",
-      { className: "search-wrapper" },
-      __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-        "label",
-        { htmlFor: "newtab-search-text", className: "search-label" },
-        __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-          "span",
-          { className: "sr-only" },
-          __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "search_web_placeholder" })
-        )
-      ),
-      __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement("input", {
-        id: "newtab-search-text",
-        maxLength: "256",
-        placeholder: this.props.intl.formatMessage({ id: "search_web_placeholder" }),
-        ref: this.onInputMount,
-        title: this.props.intl.formatMessage({ id: "search_web_placeholder" }),
-        type: "search" }),
-      __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-        "button",
-        {
-          id: "searchSubmit",
-          className: "search-button",
-          onClick: this.onClick,
-          title: this.props.intl.formatMessage({ id: "search_button" }) },
-        __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(
-          "span",
-          { className: "sr-only" },
-          __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "search_button" })
-        )
-      )
-    );
-  }
-}
-/* unused harmony export _Search */
-
-
-const Search = Object(__WEBPACK_IMPORTED_MODULE_2_react_redux__["connect"])()(Object(__WEBPACK_IMPORTED_MODULE_0_react_intl__["injectIntl"])(_Search));
-/* harmony export (immutable) */ __webpack_exports__["a"] = Search;
-
-
-/***/ }),
-/* 36 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {const IS_NEWTAB = global.document && global.document.documentURI === "about:newtab";
-/* harmony export (immutable) */ __webpack_exports__["a"] = IS_NEWTAB;
-
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 37 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_content_src_components_Card_Card__ = __webpack_require__(38);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_content_src_components_CollapsibleSection_CollapsibleSection__ = __webpack_require__(18);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_content_src_components_ComponentPerfTimer_ComponentPerfTimer__ = __webpack_require__(20);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_redux__ = __webpack_require__(4);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react_redux__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_react__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_content_src_components_Topics_Topics__ = __webpack_require__(40);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_content_src_components_TopSites_TopSites__ = __webpack_require__(41);
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-
-
-
-
-
-
-
-
-
-
-const VISIBLE = "visible";
-const VISIBILITY_CHANGE_EVENT = "visibilitychange";
-const CARDS_PER_ROW_DEFAULT = 3;
-const CARDS_PER_ROW_COMPACT_WIDE = 4;
-
-function getFormattedMessage(message) {
-  return typeof message === "string" ? __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-    "span",
-    null,
-    message
-  ) : __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_1_react_intl__["FormattedMessage"], message);
-}
-
-class Section extends __WEBPACK_IMPORTED_MODULE_6_react___default.a.PureComponent {
-  get numRows() {
-    const { rowsPref, maxRows, Prefs } = this.props;
-    return rowsPref ? Prefs.values[rowsPref] : maxRows;
-  }
-
-  _dispatchImpressionStats() {
-    const { props } = this;
-    let cardsPerRow = CARDS_PER_ROW_DEFAULT;
-    if (props.compactCards && global.matchMedia(`(min-width: 1072px)`).matches) {
-      // If the section has compact cards and the viewport is wide enough, we show
-      // 4 columns instead of 3.
-      // $break-point-widest = 1072px (from _variables.scss)
-      cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;
-    }
-    const maxCards = cardsPerRow * this.numRows;
-    const cards = props.rows.slice(0, maxCards);
-
-    if (this.needsImpressionStats(cards)) {
-      props.dispatch(__WEBPACK_IMPORTED_MODULE_2_common_Actions_jsm__["b" /* actionCreators */].ImpressionStats({
-        source: props.eventSource,
-        tiles: cards.map(link => ({ id: link.guid }))
-      }));
-      this.impressionCardGuids = cards.map(link => link.guid);
-    }
-  }
-
-  // This sends an event when a user sees a set of new content. If content
-  // changes while the page is hidden (i.e. preloaded or on a hidden tab),
-  // only send the event if the page becomes visible again.
-  sendImpressionStatsOrAddListener() {
-    const { props } = this;
-
-    if (!props.shouldSendImpressionStats || !props.dispatch) {
-      return;
-    }
-
-    if (props.document.visibilityState === VISIBLE) {
-      this._dispatchImpressionStats();
-    } else {
-      // We should only ever send the latest impression stats ping, so remove any
-      // older listeners.
-      if (this._onVisibilityChange) {
-        props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
-      }
-
-      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.
-      this._onVisibilityChange = () => {
-        if (props.document.visibilityState === VISIBLE) {
-          if (!this.props.pref.collapsed) {
-            this._dispatchImpressionStats();
-          }
-          props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
-        }
-      };
-      props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
-    }
-  }
-
-  componentDidMount() {
-    if (this.props.rows.length && !this.props.pref.collapsed) {
-      this.sendImpressionStatsOrAddListener();
-    }
-  }
-
-  componentDidUpdate(prevProps) {
-    const { props } = this;
-    const isCollapsed = props.pref.collapsed;
-    const wasCollapsed = prevProps.pref.collapsed;
-    if (
-    // Don't send impression stats for the empty state
-    props.rows.length && (
-    // We only want to send impression stats if the content of the cards has changed
-    // and the section is not collapsed...
-    props.rows !== prevProps.rows && !isCollapsed ||
-    // or if we are expanding a section that was collapsed.
-    wasCollapsed && !isCollapsed)) {
-      this.sendImpressionStatsOrAddListener();
-    }
-  }
-
-  componentWillUnmount() {
-    if (this._onVisibilityChange) {
-      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
-    }
-  }
-
-  needsImpressionStats(cards) {
-    if (!this.impressionCardGuids || this.impressionCardGuids.length !== cards.length) {
-      return true;
-    }
-
-    for (let i = 0; i < cards.length; i++) {
-      if (cards[i].guid !== this.impressionCardGuids[i]) {
-        return true;
-      }
-    }
-
-    return false;
-  }
-
-  render() {
-    const {
-      id, eventSource, title, icon, rows,
-      emptyState, dispatch, compactCards,
-      contextMenuOptions, initialized, disclaimer,
-      pref, privacyNoticeURL, isFirst, isLast
-    } = this.props;
-
-    const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;
-    const { numRows } = this;
-    const maxCards = maxCardsPerRow * numRows;
-    const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * numRows;
-
-    // Show topics only for top stories and if it's not initialized yet (so
-    // content doesn't shift when it is loaded) or has loaded with topics
-    const shouldShowTopics = id === "topstories" && (!this.props.topics || this.props.topics.length > 0);
-
-    const realRows = rows.slice(0, maxCards);
-
-    // The empty state should only be shown after we have initialized and there is no content.
-    // Otherwise, we should show placeholders.
-    const shouldShowEmptyState = initialized && !rows.length;
-
-    const cards = [];
-    if (!shouldShowEmptyState) {
-      for (let i = 0; i < maxCards; i++) {
-        const link = realRows[i];
-        // On narrow viewports, we only show 3 cards per row. We'll mark the rest as
-        // .hide-for-narrow to hide in CSS via @media query.
-        const className = i >= maxCardsOnNarrow ? "hide-for-narrow" : "";
-        cards.push(link ? __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_content_src_components_Card_Card__["a" /* Card */], { key: i,
-          index: i,
-          className: className,
-          dispatch: dispatch,
-          link: link,
-          contextMenuOptions: contextMenuOptions,
-          eventSource: eventSource,
-          shouldSendImpressionStats: this.props.shouldSendImpressionStats,
-          isWebExtension: this.props.isWebExtension }) : __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_content_src_components_Card_Card__["b" /* PlaceholderCard */], { key: i, className: className }));
-      }
-    }
-
-    const sectionClassName = ["section", compactCards ? "compact-cards" : "normal-cards"].join(" ");
-
-    // <Section> <-- React component
-    // <section> <-- HTML5 element
-    return __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-      __WEBPACK_IMPORTED_MODULE_4_content_src_components_ComponentPerfTimer_ComponentPerfTimer__["a" /* ComponentPerfTimer */],
-      this.props,
-      __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-        __WEBPACK_IMPORTED_MODULE_3_content_src_components_CollapsibleSection_CollapsibleSection__["a" /* CollapsibleSection */],
-        { className: sectionClassName, icon: icon,
-          title: title,
-          id: id,
-          eventSource: eventSource,
-          disclaimer: disclaimer,
-          collapsed: this.props.pref.collapsed,
-          showPrefName: pref && pref.feed || id,
-          privacyNoticeURL: privacyNoticeURL,
-          Prefs: this.props.Prefs,
-          isFirst: isFirst,
-          isLast: isLast,
-          dispatch: this.props.dispatch,
-          isWebExtension: this.props.isWebExtension },
-        !shouldShowEmptyState && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-          "ul",
-          { className: "section-list", style: { padding: 0 } },
-          cards
-        ),
-        shouldShowEmptyState && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-          "div",
-          { className: "section-empty-state" },
-          __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-            "div",
-            { className: "empty-state" },
-            emptyState.icon && emptyState.icon.startsWith("moz-extension://") ? __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("img", { className: "empty-state-icon icon", style: { "background-image": `url('${emptyState.icon}')` } }) : __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("img", { className: `empty-state-icon icon icon-${emptyState.icon}` }),
-            __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-              "p",
-              { className: "empty-state-message" },
-              getFormattedMessage(emptyState.message)
-            )
-          )
-        ),
-        shouldShowTopics && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_7_content_src_components_Topics_Topics__["a" /* Topics */], { topics: this.props.topics, read_more_endpoint: this.props.read_more_endpoint })
-      )
-    );
-  }
-}
-/* unused harmony export Section */
-
-
-Section.defaultProps = {
-  document: global.document,
-  rows: [],
-  emptyState: {},
-  pref: {},
-  title: ""
-};
-
-const SectionIntl = Object(__WEBPACK_IMPORTED_MODULE_5_react_redux__["connect"])(state => ({ Prefs: state.Prefs }))(Object(__WEBPACK_IMPORTED_MODULE_1_react_intl__["injectIntl"])(Section));
-/* unused harmony export SectionIntl */
-
-
-class _Sections extends __WEBPACK_IMPORTED_MODULE_6_react___default.a.PureComponent {
-  renderSections() {
-    const sections = [];
-    const enabledSections = this.props.Sections.filter(section => section.enabled);
-    const { sectionOrder, "feeds.topsites": showTopSites } = this.props.Prefs.values;
-    // Enabled sections doesn't include Top Sites, so we add it if enabled.
-    const expectedCount = enabledSections.length + ~~showTopSites;
-
-    for (const sectionId of sectionOrder.split(",")) {
-      const commonProps = {
-        key: sectionId,
-        isFirst: sections.length === 0,
-        isLast: sections.length === expectedCount - 1
-      };
-      if (sectionId === "topsites" && showTopSites) {
-        sections.push(__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_8_content_src_components_TopSites_TopSites__["a" /* TopSites */], commonProps));
-      } else {
-        const section = enabledSections.find(s => s.id === sectionId);
-        if (section) {
-          sections.push(__WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(SectionIntl, _extends({}, section, commonProps)));
-        }
-      }
-    }
-    return sections;
-  }
-
-  render() {
-    return __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-      "div",
-      { className: "sections-list" },
-      this.renderSections()
-    );
-  }
-}
-/* unused harmony export _Sections */
-
-
-const Sections = Object(__WEBPACK_IMPORTED_MODULE_5_react_redux__["connect"])(state => ({ Sections: state.Sections, Prefs: state.Prefs }))(_Sections);
-/* harmony export (immutable) */ __webpack_exports__["a"] = Sections;
-
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 38 */
+/* 41 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
 
 // EXTERNAL MODULE: ./common/Actions.jsm
-var Actions = __webpack_require__(1);
+var Actions = __webpack_require__(2);
+
+// CONCATENATED MODULE: ./common/Dedupe.jsm
+class Dedupe {
+  constructor(createKey) {
+    this.createKey = createKey || this.defaultCreateKey;
+  }
+
+  defaultCreateKey(item) {
+    return item;
+  }
+
+  /**
+   * Dedupe any number of grouped elements favoring those from earlier groups.
+   *
+   * @param {Array} groups Contains an arbitrary number of arrays of elements.
+   * @returns {Array} A matching array of each provided group deduped.
+   */
+  group(...groups) {
+    const globalKeys = new Set();
+    const result = [];
+    for (const values of groups) {
+      const valueMap = new Map();
+      for (const value of values) {
+        const key = this.createKey(value);
+        if (!globalKeys.has(key) && !valueMap.has(key)) {
+          valueMap.set(key, value);
+        }
+      }
+      result.push(valueMap);
+      valueMap.forEach((value, key) => globalKeys.add(key));
+    }
+    return result.map(m => Array.from(m.values()));
+  }
+}
+// CONCATENATED MODULE: ./common/Reducers.jsm
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TOP_SITES_DEFAULT_ROWS", function() { return TOP_SITES_DEFAULT_ROWS; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TOP_SITES_MAX_SITES_PER_ROW", function() { return TOP_SITES_MAX_SITES_PER_ROW; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "INITIAL_STATE", function() { return INITIAL_STATE; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "insertPinned", function() { return insertPinned; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reducers", function() { return reducers; });
+/* 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/. */
+
+
+
+
+const TOP_SITES_DEFAULT_ROWS = 1;
+const TOP_SITES_MAX_SITES_PER_ROW = 8;
+
+
+const dedupe = new Dedupe(site => site && site.url);
+
+const INITIAL_STATE = {
+  App: {
+    // Have we received real data from the app yet?
+    initialized: false,
+    // The version of the system-addon
+    version: null
+  },
+  Snippets: { initialized: false },
+  TopSites: {
+    // Have we received real data from history yet?
+    initialized: false,
+    // The history (and possibly default) links
+    rows: [],
+    // Used in content only to dispatch action to TopSiteForm.
+    editForm: null
+  },
+  Prefs: {
+    initialized: false,
+    values: {}
+  },
+  Dialog: {
+    visible: false,
+    data: {}
+  },
+  Sections: []
+};
+
+
+function App(prevState = INITIAL_STATE.App, action) {
+  switch (action.type) {
+    case Actions["actionTypes"].INIT:
+      return Object.assign({}, prevState, action.data || {}, { initialized: true });
+    default:
+      return prevState;
+  }
+}
+
+/**
+ * insertPinned - Inserts pinned links in their specified slots
+ *
+ * @param {array} a list of links
+ * @param {array} a list of pinned links
+ * @return {array} resulting list of links with pinned links inserted
+ */
+function insertPinned(links, pinned) {
+  // Remove any pinned links
+  const pinnedUrls = pinned.map(link => link && link.url);
+  let newLinks = links.filter(link => link ? !pinnedUrls.includes(link.url) : false);
+  newLinks = newLinks.map(link => {
+    if (link && link.isPinned) {
+      delete link.isPinned;
+      delete link.pinIndex;
+    }
+    return link;
+  });
+
+  // Then insert them in their specified location
+  pinned.forEach((val, index) => {
+    if (!val) {
+      return;
+    }
+    let link = Object.assign({}, val, { isPinned: true, pinIndex: index });
+    if (index > newLinks.length) {
+      newLinks[index] = link;
+    } else {
+      newLinks.splice(index, 0, link);
+    }
+  });
+
+  return newLinks;
+}
+
+
+function TopSites(prevState = INITIAL_STATE.TopSites, action) {
+  let hasMatch;
+  let newRows;
+  switch (action.type) {
+    case Actions["actionTypes"].TOP_SITES_UPDATED:
+      if (!action.data || !action.data.links) {
+        return prevState;
+      }
+      return Object.assign({}, prevState, { initialized: true, rows: action.data.links }, action.data.pref ? { pref: action.data.pref } : {});
+    case Actions["actionTypes"].TOP_SITES_PREFS_UPDATED:
+      return Object.assign({}, prevState, { pref: action.data.pref });
+    case Actions["actionTypes"].TOP_SITES_EDIT:
+      return Object.assign({}, prevState, {
+        editForm: {
+          index: action.data.index,
+          previewResponse: null
+        }
+      });
+    case Actions["actionTypes"].TOP_SITES_CANCEL_EDIT:
+      return Object.assign({}, prevState, { editForm: null });
+    case Actions["actionTypes"].PREVIEW_RESPONSE:
+      if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {
+        return prevState;
+      }
+      return Object.assign({}, prevState, {
+        editForm: {
+          index: prevState.editForm.index,
+          previewResponse: action.data.preview,
+          previewUrl: action.data.url
+        }
+      });
+    case Actions["actionTypes"].PREVIEW_REQUEST:
+      if (!prevState.editForm) {
+        return prevState;
+      }
+      return Object.assign({}, prevState, {
+        editForm: {
+          index: prevState.editForm.index,
+          previewResponse: null,
+          previewUrl: action.data.url
+        }
+      });
+    case Actions["actionTypes"].PREVIEW_REQUEST_CANCEL:
+      if (!prevState.editForm) {
+        return prevState;
+      }
+      return Object.assign({}, prevState, {
+        editForm: {
+          index: prevState.editForm.index,
+          previewResponse: null
+        }
+      });
+    case Actions["actionTypes"].SCREENSHOT_UPDATED:
+      newRows = prevState.rows.map(row => {
+        if (row && row.url === action.data.url) {
+          hasMatch = true;
+          return Object.assign({}, row, { screenshot: action.data.screenshot });
+        }
+        return row;
+      });
+      return hasMatch ? Object.assign({}, prevState, { rows: newRows }) : prevState;
+    case Actions["actionTypes"].PLACES_BOOKMARK_ADDED:
+      if (!action.data) {
+        return prevState;
+      }
+      newRows = prevState.rows.map(site => {
+        if (site && site.url === action.data.url) {
+          const { bookmarkGuid, bookmarkTitle, dateAdded } = action.data;
+          return Object.assign({}, site, { bookmarkGuid, bookmarkTitle, bookmarkDateCreated: dateAdded });
+        }
+        return site;
+      });
+      return Object.assign({}, prevState, { rows: newRows });
+    case Actions["actionTypes"].PLACES_BOOKMARK_REMOVED:
+      if (!action.data) {
+        return prevState;
+      }
+      newRows = prevState.rows.map(site => {
+        if (site && site.url === action.data.url) {
+          const newSite = Object.assign({}, site);
+          delete newSite.bookmarkGuid;
+          delete newSite.bookmarkTitle;
+          delete newSite.bookmarkDateCreated;
+          return newSite;
+        }
+        return site;
+      });
+      return Object.assign({}, prevState, { rows: newRows });
+    case Actions["actionTypes"].PLACES_LINK_DELETED:
+      if (!action.data) {
+        return prevState;
+      }
+      newRows = prevState.rows.filter(site => action.data.url !== site.url);
+      return Object.assign({}, prevState, { rows: newRows });
+    default:
+      return prevState;
+  }
+}
+
+function Dialog(prevState = INITIAL_STATE.Dialog, action) {
+  switch (action.type) {
+    case Actions["actionTypes"].DIALOG_OPEN:
+      return Object.assign({}, prevState, { visible: true, data: action.data });
+    case Actions["actionTypes"].DIALOG_CANCEL:
+      return Object.assign({}, prevState, { visible: false });
+    case Actions["actionTypes"].DELETE_HISTORY_URL:
+      return Object.assign({}, INITIAL_STATE.Dialog);
+    default:
+      return prevState;
+  }
+}
+
+function Prefs(prevState = INITIAL_STATE.Prefs, action) {
+  let newValues;
+  switch (action.type) {
+    case Actions["actionTypes"].PREFS_INITIAL_VALUES:
+      return Object.assign({}, prevState, { initialized: true, values: action.data });
+    case Actions["actionTypes"].PREF_CHANGED:
+      newValues = Object.assign({}, prevState.values);
+      newValues[action.data.name] = action.data.value;
+      return Object.assign({}, prevState, { values: newValues });
+    default:
+      return prevState;
+  }
+}
+
+function Sections(prevState = INITIAL_STATE.Sections, action) {
+  let hasMatch;
+  let newState;
+  switch (action.type) {
+    case Actions["actionTypes"].SECTION_DEREGISTER:
+      return prevState.filter(section => section.id !== action.data);
+    case Actions["actionTypes"].SECTION_REGISTER:
+      // If section exists in prevState, update it
+      newState = prevState.map(section => {
+        if (section && section.id === action.data.id) {
+          hasMatch = true;
+          return Object.assign({}, section, action.data);
+        }
+        return section;
+      });
+      // Otherwise, append it
+      if (!hasMatch) {
+        const initialized = !!(action.data.rows && action.data.rows.length > 0);
+        const section = Object.assign({ title: "", rows: [], enabled: false }, action.data, { initialized });
+        newState.push(section);
+      }
+      return newState;
+    case Actions["actionTypes"].SECTION_UPDATE:
+      newState = prevState.map(section => {
+        if (section && section.id === action.data.id) {
+          // If the action is updating rows, we should consider initialized to be true.
+          // This can be overridden if initialized is defined in the action.data
+          const initialized = action.data.rows ? { initialized: true } : {};
+
+          // Make sure pinned cards stay at their current position when rows are updated.
+          // Disabling a section (SECTION_UPDATE with empty rows) does not retain pinned cards.
+          if (action.data.rows && action.data.rows.length > 0 && section.rows.find(card => card.pinned)) {
+            const rows = Array.from(action.data.rows);
+            section.rows.forEach((card, index) => {
+              if (card.pinned) {
+                rows.splice(index, 0, card);
+              }
+            });
+            return Object.assign({}, section, initialized, Object.assign({}, action.data, { rows }));
+          }
+
+          return Object.assign({}, section, initialized, action.data);
+        }
+        return section;
+      });
+
+      if (!action.data.dedupeConfigurations) {
+        return newState;
+      }
+
+      action.data.dedupeConfigurations.forEach(dedupeConf => {
+        newState = newState.map(section => {
+          if (section.id === dedupeConf.id) {
+            const dedupedRows = dedupeConf.dedupeFrom.reduce((rows, dedupeSectionId) => {
+              const dedupeSection = newState.find(s => s.id === dedupeSectionId);
+              const [, newRows] = dedupe.group(dedupeSection.rows, rows);
+              return newRows;
+            }, section.rows);
+
+            return Object.assign({}, section, { rows: dedupedRows });
+          }
+
+          return section;
+        });
+      });
+
+      return newState;
+    case Actions["actionTypes"].SECTION_UPDATE_CARD:
+      return prevState.map(section => {
+        if (section && section.id === action.data.id && section.rows) {
+          const newRows = section.rows.map(card => {
+            if (card.url === action.data.url) {
+              return Object.assign({}, card, action.data.options);
+            }
+            return card;
+          });
+          return Object.assign({}, section, { rows: newRows });
+        }
+        return section;
+      });
+    case Actions["actionTypes"].PLACES_BOOKMARK_ADDED:
+      if (!action.data) {
+        return prevState;
+      }
+      return prevState.map(section => Object.assign({}, section, {
+        rows: section.rows.map(item => {
+          // find the item within the rows that is attempted to be bookmarked
+          if (item.url === action.data.url) {
+            const { bookmarkGuid, bookmarkTitle, dateAdded } = action.data;
+            return Object.assign({}, item, {
+              bookmarkGuid,
+              bookmarkTitle,
+              bookmarkDateCreated: dateAdded,
+              type: "bookmark"
+            });
+          }
+          return item;
+        })
+      }));
+    case Actions["actionTypes"].PLACES_SAVED_TO_POCKET:
+      if (!action.data) {
+        return prevState;
+      }
+      return prevState.map(section => Object.assign({}, section, {
+        rows: section.rows.map(item => {
+          if (item.url === action.data.url) {
+            return Object.assign({}, item, {
+              open_url: action.data.open_url,
+              pocket_id: action.data.pocket_id,
+              title: action.data.title,
+              type: "pocket"
+            });
+          }
+          return item;
+        })
+      }));
+    case Actions["actionTypes"].PLACES_BOOKMARK_REMOVED:
+      if (!action.data) {
+        return prevState;
+      }
+      return prevState.map(section => Object.assign({}, section, {
+        rows: section.rows.map(item => {
+          // find the bookmark within the rows that is attempted to be removed
+          if (item.url === action.data.url) {
+            const newSite = Object.assign({}, item);
+            delete newSite.bookmarkGuid;
+            delete newSite.bookmarkTitle;
+            delete newSite.bookmarkDateCreated;
+            if (!newSite.type || newSite.type === "bookmark") {
+              newSite.type = "history";
+            }
+            return newSite;
+          }
+          return item;
+        })
+      }));
+    case Actions["actionTypes"].PLACES_LINK_DELETED:
+    case Actions["actionTypes"].PLACES_LINK_BLOCKED:
+      if (!action.data) {
+        return prevState;
+      }
+      return prevState.map(section => Object.assign({}, section, { rows: section.rows.filter(site => site.url !== action.data.url) }));
+    case Actions["actionTypes"].DELETE_FROM_POCKET:
+    case Actions["actionTypes"].ARCHIVE_FROM_POCKET:
+      return prevState.map(section => Object.assign({}, section, { rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id) }));
+    default:
+      return prevState;
+  }
+}
+
+function Snippets(prevState = INITIAL_STATE.Snippets, action) {
+  switch (action.type) {
+    case Actions["actionTypes"].SNIPPETS_DATA:
+      return Object.assign({}, prevState, { initialized: true }, action.data);
+    case Actions["actionTypes"].SNIPPET_BLOCKED:
+      return Object.assign({}, prevState, { blockList: prevState.blockList.concat(action.data) });
+    case Actions["actionTypes"].SNIPPETS_BLOCKLIST_CLEARED:
+      return Object.assign({}, prevState, { blockList: [] });
+    case Actions["actionTypes"].SNIPPETS_RESET:
+      return INITIAL_STATE.Snippets;
+    default:
+      return prevState;
+  }
+}
+
+var reducers = { TopSites, App, Snippets, Prefs, Dialog, Sections };
+
+/***/ }),
+/* 42 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+
+// EXTERNAL MODULE: external "React"
+var external_React_ = __webpack_require__(5);
+var external_React_default = /*#__PURE__*/__webpack_require__.n(external_React_);
+
+// CONCATENATED MODULE: ./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx
+
+
+class ModalOverlay_ModalOverlay extends external_React_default.a.PureComponent {
+  componentWillMount() {
+    this.setState({ active: true });
+    document.body.classList.add("modal-open");
+  }
+
+  componentWillUnmount() {
+    document.body.classList.remove("modal-open");
+    this.setState({ active: false });
+  }
+
+  render() {
+    const { active } = this.state;
+    const { title, button_label } = this.props;
+    return external_React_default.a.createElement(
+      "div",
+      null,
+      external_React_default.a.createElement("div", { className: `modalOverlayOuter ${active ? "active" : ""}` }),
+      external_React_default.a.createElement(
+        "div",
+        { className: `modalOverlayInner ${active ? "active" : ""}` },
+        external_React_default.a.createElement(
+          "h2",
+          null,
+          " ",
+          title,
+          " "
+        ),
+        this.props.children,
+        external_React_default.a.createElement(
+          "div",
+          { className: "footer" },
+          external_React_default.a.createElement(
+            "button",
+            { onClick: this.props.onDoneButton, className: "button primary modalButton" },
+            " ",
+            button_label,
+            " "
+          )
+        )
+      )
+    );
+  }
+}
+// CONCATENATED MODULE: ./content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OnboardingMessage", function() { return OnboardingMessage_OnboardingMessage; });
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+
+
+
+class OnboardingMessage_OnboardingCard extends external_React_default.a.PureComponent {
+  constructor(props) {
+    super(props);
+    this.onClick = this.onClick.bind(this);
+  }
+
+  onClick() {
+    const { props } = this;
+    props.sendUserActionTelemetry({ event: "CLICK_BUTTON", message_id: props.id, id: props.UISurface });
+    props.onAction(props.content);
+  }
+
+  render() {
+    const { content } = this.props;
+    return external_React_default.a.createElement(
+      "div",
+      { className: "onboardingMessage" },
+      external_React_default.a.createElement("div", { className: `onboardingMessageImage ${content.icon}` }),
+      external_React_default.a.createElement(
+        "div",
+        { className: "onboardingContent" },
+        external_React_default.a.createElement(
+          "span",
+          null,
+          external_React_default.a.createElement(
+            "h3",
+            null,
+            " ",
+            content.title,
+            " "
+          ),
+          external_React_default.a.createElement(
+            "p",
+            null,
+            " ",
+            content.text,
+            " "
+          )
+        ),
+        external_React_default.a.createElement(
+          "span",
+          null,
+          external_React_default.a.createElement(
+            "button",
+            { className: "button onboardingButton", onClick: this.onClick },
+            " ",
+            content.button_label,
+            " "
+          )
+        )
+      )
+    );
+  }
+}
+
+class OnboardingMessage_OnboardingMessage extends external_React_default.a.PureComponent {
+  render() {
+    const { props } = this;
+    return external_React_default.a.createElement(
+      ModalOverlay_ModalOverlay,
+      _extends({}, props, { button_label: "Start Browsing", title: "Welcome to Firefox" }),
+      external_React_default.a.createElement(
+        "div",
+        { className: "onboardingMessageContainer" },
+        props.bundle.map(message => external_React_default.a.createElement(OnboardingMessage_OnboardingCard, _extends({ key: message.id,
+          sendUserActionTelemetry: props.sendUserActionTelemetry,
+          onAction: props.onAction,
+          UISurface: props.UISurface
+        }, message)))
+      )
+    );
+  }
+}
+
+/***/ }),
+/* 43 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+
+// EXTERNAL MODULE: ./common/Actions.jsm
+var Actions = __webpack_require__(2);
 
 // CONCATENATED MODULE: ./content-src/components/Card/types.js
 const cardContextTypes = {
   history: {
     intlID: "type_label_visited",
     icon: "history-item"
   },
   bookmark: {
@@ -7684,37 +8224,38 @@ const cardContextTypes = {
     icon: "pocket"
   },
   download: {
     intlID: "type_label_downloaded",
     icon: "download"
   }
 };
 // EXTERNAL MODULE: external "ReactRedux"
-var external__ReactRedux_ = __webpack_require__(4);
-var external__ReactRedux__default = /*#__PURE__*/__webpack_require__.n(external__ReactRedux_);
+var external_ReactRedux_ = __webpack_require__(16);
 
 // EXTERNAL MODULE: external "ReactIntl"
-var external__ReactIntl_ = __webpack_require__(2);
-var external__ReactIntl__default = /*#__PURE__*/__webpack_require__.n(external__ReactIntl_);
+var external_ReactIntl_ = __webpack_require__(13);
 
 // EXTERNAL MODULE: ./content-src/lib/link-menu-options.js
-var link_menu_options = __webpack_require__(14);
+var link_menu_options = __webpack_require__(23);
 
 // EXTERNAL MODULE: ./content-src/components/LinkMenu/LinkMenu.jsx
-var LinkMenu = __webpack_require__(15);
+var LinkMenu = __webpack_require__(24);
 
 // EXTERNAL MODULE: external "React"
-var external__React_ = __webpack_require__(0);
-var external__React__default = /*#__PURE__*/__webpack_require__.n(external__React_);
+var external_React_ = __webpack_require__(5);
+var external_React_default = /*#__PURE__*/__webpack_require__.n(external_React_);
 
 // EXTERNAL MODULE: ./content-src/lib/screenshot-utils.js
-var screenshot_utils = __webpack_require__(17);
+var screenshot_utils = __webpack_require__(26);
 
 // CONCATENATED MODULE: ./content-src/components/Card/Card.jsx
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_Card", function() { return Card_Card; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Card", function() { return Card; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlaceholderCard", function() { return PlaceholderCard; });
 function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
 
 
 
 
 
 
 
@@ -7728,17 +8269,17 @@ const gImageLoading = new Map();
  * Card component.
  * Cards are found within a Section component and contain information about a link such
  * as preview image, page title, page description, and some context about if the page
  * was visited, bookmarked, trending etc...
  * Each Section can make an unordered list of Cards which will create one instane of
  * this class. Each card will then get a context menu which reflects the actions that
  * can be done on this Card.
  */
-class Card__Card extends external__React__default.a.PureComponent {
+class Card_Card extends external_React_default.a.PureComponent {
   constructor(props) {
     super(props);
     this.state = {
       activeCard: null,
       imageLoaded: false,
       showContextMenu: false,
       cardImage: null
     };
@@ -7779,17 +8320,17 @@ class Card__Card extends external__React
             return gImageLoading.delete(imageUrl);
           }).catch();
         }
 
         // Wait for the image whether just started loading or reused promise
         yield gImageLoading.get(imageUrl);
 
         // Only update state if we're still waiting to load the original image
-        if (screenshot_utils["a" /* ScreenshotUtils */].isRemoteImageLocal(_this.state.cardImage, _this.props.link.image) && !_this.state.imageLoaded) {
+        if (screenshot_utils["ScreenshotUtils"].isRemoteImageLocal(_this.state.cardImage, _this.props.link.image) && !_this.state.imageLoaded) {
           _this.setState({ imageLoaded: true });
         }
       }
     })();
   }
 
   /**
    * Helper to obtain the next state based on nextProps and prevState.
@@ -7799,33 +8340,33 @@ class Card__Card extends external__React
    *       method to getDerivedStateFromProps now because there is a mismatch in
    *       the React version that we are using for both testing and production.
    *       (i.e. react-test-render => "16.3.2", react => "16.2.0").
    *
    * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.
    */
   static getNextStateFromProps(nextProps, prevState) {
     const { image } = nextProps.link;
-    const imageInState = screenshot_utils["a" /* ScreenshotUtils */].isRemoteImageLocal(prevState.cardImage, image);
+    const imageInState = screenshot_utils["ScreenshotUtils"].isRemoteImageLocal(prevState.cardImage, image);
     let nextState = null;
 
     // Image is updating.
     if (!imageInState && nextProps.link) {
       nextState = { imageLoaded: false };
     }
 
     if (imageInState) {
       return nextState;
     }
 
     // Since image was updated, attempt to revoke old image blob URL, if it exists.
-    screenshot_utils["a" /* ScreenshotUtils */].maybeRevokeBlobObjectURL(prevState.cardImage);
+    screenshot_utils["ScreenshotUtils"].maybeRevokeBlobObjectURL(prevState.cardImage);
 
     nextState = nextState || {};
-    nextState.cardImage = screenshot_utils["a" /* ScreenshotUtils */].createLocalImageObject(image);
+    nextState.cardImage = screenshot_utils["ScreenshotUtils"].createLocalImageObject(image);
 
     return nextState;
   }
 
   onMenuButtonClick(event) {
     event.preventDefault();
     this.setState({
       activeCard: this.props.index,
@@ -7843,42 +8384,42 @@ class Card__Card extends external__React
     }
 
     return null;
   }
 
   onLinkClick(event) {
     event.preventDefault();
     if (this.props.link.type === "download") {
-      this.props.dispatch(Actions["b" /* actionCreators */].OnlyToMain({
-        type: Actions["c" /* actionTypes */].SHOW_DOWNLOAD_FILE,
+      this.props.dispatch(Actions["actionCreators"].OnlyToMain({
+        type: Actions["actionTypes"].SHOW_DOWNLOAD_FILE,
         data: this.props.link
       }));
     } else {
       const { altKey, button, ctrlKey, metaKey, shiftKey } = event;
-      this.props.dispatch(Actions["b" /* actionCreators */].OnlyToMain({
-        type: Actions["c" /* actionTypes */].OPEN_LINK,
+      this.props.dispatch(Actions["actionCreators"].OnlyToMain({
+        type: Actions["actionTypes"].OPEN_LINK,
         data: Object.assign(this.props.link, { event: { altKey, button, ctrlKey, metaKey, shiftKey } })
       }));
     }
     if (this.props.isWebExtension) {
-      this.props.dispatch(Actions["b" /* actionCreators */].WebExtEvent(Actions["c" /* actionTypes */].WEBEXT_CLICK, {
+      this.props.dispatch(Actions["actionCreators"].WebExtEvent(Actions["actionTypes"].WEBEXT_CLICK, {
         source: this.props.eventSource,
         url: this.props.link.url,
         action_position: this.props.index
       }));
     } else {
-      this.props.dispatch(Actions["b" /* actionCreators */].UserEvent(Object.assign({
+      this.props.dispatch(Actions["actionCreators"].UserEvent(Object.assign({
         event: "CLICK",
         source: this.props.eventSource,
         action_position: this.props.index
       }, this._getTelemetryInfo())));
 
       if (this.props.shouldSendImpressionStats) {
-        this.props.dispatch(Actions["b" /* actionCreators */].ImpressionStats({
+        this.props.dispatch(Actions["actionCreators"].ImpressionStats({
           source: this.props.eventSource,
           click: 0,
           tiles: [{ id: this.props.link.guid, pos: this.props.index }]
         }));
       }
     }
   }
 
@@ -7893,470 +8434,157 @@ class Card__Card extends external__React
   componentDidUpdate() {
     this.maybeLoadImage();
   }
 
   // NOTE: Remove this function when we update React to >= 16.3 since React will
   //       call getDerivedStateFromProps automatically. We will also need to
   //       rename getNextStateFromProps to getDerivedStateFromProps.
   componentWillMount() {
-    const nextState = Card__Card.getNextStateFromProps(this.props, this.state);
+    const nextState = Card_Card.getNextStateFromProps(this.props, this.state);
     if (nextState) {
       this.setState(nextState);
     }
   }
 
   // NOTE: Remove this function when we update React to >= 16.3 since React will
   //       call getDerivedStateFromProps automatically. We will also need to
   //       rename getNextStateFromProps to getDerivedStateFromProps.
   componentWillReceiveProps(nextProps) {
-    const nextState = Card__Card.getNextStateFromProps(nextProps, this.state);
+    const nextState = Card_Card.getNextStateFromProps(nextProps, this.state);
     if (nextState) {
       this.setState(nextState);
     }
   }
 
   componentWillUnmount() {
-    screenshot_utils["a" /* ScreenshotUtils */].maybeRevokeBlobObjectURL(this.state.cardImage);
+    screenshot_utils["ScreenshotUtils"].maybeRevokeBlobObjectURL(this.state.cardImage);
   }
 
   render() {
     const { index, className, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats } = this.props;
     const { props } = this;
     const isContextMenuOpen = this.state.showContextMenu && this.state.activeCard === index;
     // Display "now" as "trending" until we have new strings #3402
     const { icon, intlID } = cardContextTypes[link.type === "now" ? "trending" : link.type] || {};
     const hasImage = this.state.cardImage || link.hasImage;
     const imageStyle = { backgroundImage: this.state.cardImage ? `url(${this.state.cardImage.url})` : "none" };
     const outerClassName = ["card-outer", className, isContextMenuOpen && "active", props.placeholder && "placeholder"].filter(v => v).join(" ");
 
-    return external__React__default.a.createElement(
+    return external_React_default.a.createElement(
       "li",
       { className: outerClassName },
-      external__React__default.a.createElement(
+      external_React_default.a.createElement(
         "a",
         { href: link.type === "pocket" ? link.open_url : link.url, onClick: !props.placeholder ? this.onLinkClick : undefined },
-        external__React__default.a.createElement(
+        external_React_default.a.createElement(
           "div",
           { className: "card" },
-          external__React__default.a.createElement(
+          external_React_default.a.createElement(
             "div",
             { className: "card-preview-image-outer" },
-            hasImage && external__React__default.a.createElement("div", { className: `card-preview-image${this.state.imageLoaded ? " loaded" : ""}`, style: imageStyle })
+            hasImage && external_React_default.a.createElement("div", { className: `card-preview-image${this.state.imageLoaded ? " loaded" : ""}`, style: imageStyle })
           ),
-          external__React__default.a.createElement(
+          external_React_default.a.createElement(
             "div",
             { className: "card-details" },
-            link.type === "download" && external__React__default.a.createElement(
+            link.type === "download" && external_React_default.a.createElement(
               "div",
               { className: "card-host-name alternate" },
-              external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: Object(link_menu_options["a" /* GetPlatformString */])(this.props.platform) })
+              external_React_default.a.createElement(external_ReactIntl_["FormattedMessage"], { id: Object(link_menu_options["GetPlatformString"])(this.props.platform) })
             ),
-            link.hostname && external__React__default.a.createElement(
+            link.hostname && external_React_default.a.createElement(
               "div",
               { className: "card-host-name" },
               link.hostname.slice(0, 100),
               link.type === "download" && `  \u2014 ${link.description}`
             ),
-            external__React__default.a.createElement(
+            external_React_default.a.createElement(
               "div",
               { className: ["card-text", icon ? "" : "no-context", link.description ? "" : "no-description", link.hostname ? "" : "no-host-name"].join(" ") },
-              external__React__default.a.createElement(
+              external_React_default.a.createElement(
                 "h4",
                 { className: "card-title", dir: "auto" },
                 link.title
               ),
-              external__React__default.a.createElement(
+              external_React_default.a.createElement(
                 "p",
                 { className: "card-description", dir: "auto" },
                 link.description
               )
             ),
-            external__React__default.a.createElement(
+            external_React_default.a.createElement(
               "div",
               { className: "card-context" },
-              icon && !link.context && external__React__default.a.createElement("span", { className: `card-context-icon icon icon-${icon}` }),
-              link.icon && link.context && external__React__default.a.createElement("span", { className: "card-context-icon icon", style: { backgroundImage: `url('${link.icon}')` } }),
-              intlID && !link.context && external__React__default.a.createElement(
+              icon && !link.context && external_React_default.a.createElement("span", { className: `card-context-icon icon icon-${icon}` }),
+              link.icon && link.context && external_React_default.a.createElement("span", { className: "card-context-icon icon", style: { backgroundImage: `url('${link.icon}')` } }),
+              intlID && !link.context && external_React_default.a.createElement(
                 "div",
                 { className: "card-context-label" },
-                external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: intlID, defaultMessage: "Visited" })
+                external_React_default.a.createElement(external_ReactIntl_["FormattedMessage"], { id: intlID, defaultMessage: "Visited" })
               ),
-              link.context && external__React__default.a.createElement(
+              link.context && external_React_default.a.createElement(
                 "div",
                 { className: "card-context-label" },
                 link.context
               )
             )
           )
         )
       ),
-      !props.placeholder && external__React__default.a.createElement(
+      !props.placeholder && external_React_default.a.createElement(
         "button",
         { className: "context-menu-button icon",
           onClick: this.onMenuButtonClick },
-        external__React__default.a.createElement(
+        external_React_default.a.createElement(
           "span",
           { className: "sr-only" },
           `Open context menu for ${link.title}`
         )
       ),
-      isContextMenuOpen && external__React__default.a.createElement(LinkMenu["a" /* LinkMenu */], {
+      isContextMenuOpen && external_React_default.a.createElement(LinkMenu["LinkMenu"], {
         dispatch: dispatch,
         index: index,
         source: eventSource,
         onUpdate: this.onMenuUpdate,
         options: link.contextMenuOptions || contextMenuOptions,
         site: link,
         siteInfo: this._getTelemetryInfo(),
         shouldSendImpressionStats: shouldSendImpressionStats })
     );
   }
 }
-/* unused harmony export _Card */
-
-Card__Card.defaultProps = { link: {} };
-const Card = Object(external__ReactRedux_["connect"])(state => ({ platform: state.Prefs.values.platform }))(Card__Card);
-/* harmony export (immutable) */ __webpack_exports__["a"] = Card;
-
-const PlaceholderCard = props => external__React__default.a.createElement(Card, { placeholder: true, className: props.className });
-/* harmony export (immutable) */ __webpack_exports__["b"] = PlaceholderCard;
-
-
-/***/ }),
-/* 39 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_content_src_components_ContextMenu_ContextMenu__ = __webpack_require__(16);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_content_src_lib_section_menu_options__ = __webpack_require__(19);
-
-
-
-
-
-
-const DEFAULT_SECTION_MENU_OPTIONS = ["MoveUp", "MoveDown", "Separator", "RemoveSection", "CheckCollapsed", "Separator", "ManageSection"];
-const WEBEXT_SECTION_MENU_OPTIONS = ["MoveUp", "MoveDown", "Separator", "CheckCollapsed", "Separator", "ManageWebExtension"];
-
-class _SectionMenu extends __WEBPACK_IMPORTED_MODULE_3_react___default.a.PureComponent {
-  getOptions() {
-    const { props } = this;
-
-    const propOptions = props.isWebExtension ? [...WEBEXT_SECTION_MENU_OPTIONS] : [...DEFAULT_SECTION_MENU_OPTIONS];
-    // Prepend custom options and a separator
-    if (props.extraOptions) {
-      propOptions.splice(0, 0, ...props.extraOptions, "Separator");
-    }
-    // Insert privacy notice before the last option ("ManageSection")
-    if (props.privacyNoticeURL) {
-      propOptions.splice(-1, 0, "PrivacyNotice");
-    }
-
-    const options = propOptions.map(o => __WEBPACK_IMPORTED_MODULE_4_content_src_lib_section_menu_options__["a" /* SectionMenuOptions */][o](props)).map(option => {
-      const { action, id, type, userEvent } = option;
-      if (!type && id) {
-        option.label = props.intl.formatMessage({ id });
-        option.onClick = () => {
-          props.dispatch(action);
-          if (userEvent) {
-            props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent({
-              event: userEvent,
-              source: props.source
-            }));
-          }
-        };
-      }
-      return option;
-    });
-
-    // This is for accessibility to support making each item tabbable.
-    // We want to know which item is the first and which item
-    // is the last, so we can close the context menu accordingly.
-    options[0].first = true;
-    options[options.length - 1].last = true;
-    return options;
-  }
-
-  render() {
-    return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_1_content_src_components_ContextMenu_ContextMenu__["a" /* ContextMenu */], {
-      onUpdate: this.props.onUpdate,
-      options: this.getOptions() });
-  }
-}
-/* unused harmony export _SectionMenu */
-
-
-const SectionMenu = Object(__WEBPACK_IMPORTED_MODULE_2_react_intl__["injectIntl"])(_SectionMenu);
-/* harmony export (immutable) */ __webpack_exports__["a"] = SectionMenu;
-
-
-/***/ }),
-/* 40 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__);
-
-
-
-class Topic extends __WEBPACK_IMPORTED_MODULE_1_react___default.a.PureComponent {
-  render() {
-    const { url, name } = this.props;
-    return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-      "li",
-      null,
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "a",
-        { key: name, className: "topic-link", href: url },
-        name
-      )
-    );
-  }
-}
-/* unused harmony export Topic */
-
-
-class Topics extends __WEBPACK_IMPORTED_MODULE_1_react___default.a.PureComponent {
-  render() {
-    const { topics, read_more_endpoint } = this.props;
-    return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-      "div",
-      { className: "topic" },
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "span",
-        null,
-        __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "pocket_read_more" })
-      ),
-      __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "ul",
-        null,
-        topics && topics.map(t => __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(Topic, { key: t.name, url: t.url, name: t.name }))
-      ),
-      read_more_endpoint && __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(
-        "a",
-        { className: "topic-read-more", href: read_more_endpoint },
-        __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "pocket_read_even_more" })
-      )
-    );
-  }
-}
-/* harmony export (immutable) */ __webpack_exports__["a"] = Topics;
-
+Card_Card.defaultProps = { link: {} };
+const Card = Object(external_ReactRedux_["connect"])(state => ({ platform: state.Prefs.values.platform }))(Card_Card);
+const PlaceholderCard = props => external_React_default.a.createElement(Card, { placeholder: true, className: props.className });
 
 /***/ }),
-/* 41 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__TopSitesConstants__ = __webpack_require__(6);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_content_src_components_CollapsibleSection_CollapsibleSection__ = __webpack_require__(18);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_content_src_components_ComponentPerfTimer_ComponentPerfTimer__ = __webpack_require__(20);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_redux__ = __webpack_require__(4);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react_redux__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_react__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_common_Reducers_jsm__ = __webpack_require__(7);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__TopSiteForm__ = __webpack_require__(42);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__TopSite__ = __webpack_require__(22);
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-
-
-
-
-
-
-
-
-
-
-
-function topSiteIconType(link) {
-  if (link.customScreenshotURL) {
-    return "custom_screenshot";
-  }
-  if (link.tippyTopIcon || link.faviconRef === "tippytop") {
-    return "tippytop";
-  }
-  if (link.faviconSize >= __WEBPACK_IMPORTED_MODULE_1__TopSitesConstants__["b" /* MIN_RICH_FAVICON_SIZE */]) {
-    return "rich_icon";
-  }
-  if (link.screenshot && link.faviconSize >= __WEBPACK_IMPORTED_MODULE_1__TopSitesConstants__["a" /* MIN_CORNER_FAVICON_SIZE */]) {
-    return "screenshot_with_icon";
-  }
-  if (link.screenshot) {
-    return "screenshot";
-  }
-  return "no_image";
-}
-
-/**
- * Iterates through TopSites and counts types of images.
- * @param acc Accumulator for reducer.
- * @param topsite Entry in TopSites.
- */
-function countTopSitesIconsTypes(topSites) {
-  const countTopSitesTypes = (acc, link) => {
-    acc[topSiteIconType(link)]++;
-    return acc;
-  };
-
-  return topSites.reduce(countTopSitesTypes, {
-    "custom_screenshot": 0,
-    "screenshot_with_icon": 0,
-    "screenshot": 0,
-    "tippytop": 0,
-    "rich_icon": 0,
-    "no_image": 0
-  });
-}
-
-class _TopSites extends __WEBPACK_IMPORTED_MODULE_6_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.onFormClose = this.onFormClose.bind(this);
-  }
-
-  /**
-   * Dispatch session statistics about the quality of TopSites icons and pinned count.
-   */
-  _dispatchTopSitesStats() {
-    const topSites = this._getVisibleTopSites();
-    const topSitesIconsStats = countTopSitesIconsTypes(topSites);
-    const topSitesPinned = topSites.filter(site => !!site.isPinned).length;
-    // Dispatch telemetry event with the count of TopSites images types.
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-      type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SAVE_SESSION_PERF_DATA,
-      data: { topsites_icon_stats: topSitesIconsStats, topsites_pinned: topSitesPinned }
-    }));
-  }
-
-  /**
-   * Return the TopSites that are visible based on prefs and window width.
-   */
-  _getVisibleTopSites() {
-    // We hide 2 sites per row when not in the wide layout.
-    let sitesPerRow = __WEBPACK_IMPORTED_MODULE_7_common_Reducers_jsm__["a" /* TOP_SITES_MAX_SITES_PER_ROW */];
-    // $break-point-widest = 1072px (from _variables.scss)
-    if (!global.matchMedia(`(min-width: 1072px)`).matches) {
-      sitesPerRow -= 2;
-    }
-    return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);
-  }
-
-  componentDidUpdate() {
-    this._dispatchTopSitesStats();
-  }
-
-  componentDidMount() {
-    this._dispatchTopSitesStats();
-  }
-
-  onFormClose() {
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].UserEvent({
-      source: __WEBPACK_IMPORTED_MODULE_1__TopSitesConstants__["d" /* TOP_SITES_SOURCE */],
-      event: "TOP_SITES_EDIT_CLOSE"
-    }));
-    this.props.dispatch({ type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].TOP_SITES_CANCEL_EDIT });
-  }
-
-  render() {
-    const { props } = this;
-    const { editForm } = props.TopSites;
-
-    return __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-      __WEBPACK_IMPORTED_MODULE_3_content_src_components_ComponentPerfTimer_ComponentPerfTimer__["a" /* ComponentPerfTimer */],
-      { id: "topsites", initialized: props.TopSites.initialized, dispatch: props.dispatch },
-      __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-        __WEBPACK_IMPORTED_MODULE_2_content_src_components_CollapsibleSection_CollapsibleSection__["a" /* CollapsibleSection */],
-        {
-          className: "top-sites",
-          icon: "topsites",
-          id: "topsites",
-          title: { id: "header_top_sites" },
-          extraMenuOptions: ["AddTopSite"],
-          showPrefName: "feeds.topsites",
-          eventSource: __WEBPACK_IMPORTED_MODULE_1__TopSitesConstants__["d" /* TOP_SITES_SOURCE */],
-          collapsed: props.TopSites.pref ? props.TopSites.pref.collapsed : undefined,
-          isFirst: props.isFirst,
-          isLast: props.isLast,
-          dispatch: props.dispatch },
-        __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_9__TopSite__["b" /* TopSiteList */], { TopSites: props.TopSites, TopSitesRows: props.TopSitesRows, dispatch: props.dispatch, intl: props.intl, topSiteIconType: topSiteIconType }),
-        __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-          "div",
-          { className: "edit-topsites-wrapper" },
-          editForm && __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-            "div",
-            { className: "edit-topsites" },
-            __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement("div", { className: "modal-overlay", onClick: this.onFormClose }),
-            __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(
-              "div",
-              { className: "modal" },
-              __WEBPACK_IMPORTED_MODULE_6_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_8__TopSiteForm__["a" /* TopSiteForm */], _extends({
-                site: props.TopSites.rows[editForm.index],
-                onClose: this.onFormClose,
-                dispatch: this.props.dispatch,
-                intl: this.props.intl
-              }, editForm))
-            )
-          )
-        )
-      )
-    );
-  }
-}
-/* unused harmony export _TopSites */
-
-
-const TopSites = Object(__WEBPACK_IMPORTED_MODULE_4_react_redux__["connect"])(state => ({
-  TopSites: state.TopSites,
-  Prefs: state.Prefs,
-  TopSitesRows: state.Prefs.values.topSitesRows
-}))(Object(__WEBPACK_IMPORTED_MODULE_5_react_intl__["injectIntl"])(_TopSites));
-/* harmony export (immutable) */ __webpack_exports__["a"] = TopSites;
-
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
-/***/ }),
-/* 42 */
+/* 44 */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
 
 // EXTERNAL MODULE: ./common/Actions.jsm
-var Actions = __webpack_require__(1);
+var Actions = __webpack_require__(2);
 
 // EXTERNAL MODULE: external "ReactIntl"
-var external__ReactIntl_ = __webpack_require__(2);
-var external__ReactIntl__default = /*#__PURE__*/__webpack_require__.n(external__ReactIntl_);
+var external_ReactIntl_ = __webpack_require__(13);
 
 // EXTERNAL MODULE: external "React"
-var external__React_ = __webpack_require__(0);
-var external__React__default = /*#__PURE__*/__webpack_require__.n(external__React_);
+var external_React_ = __webpack_require__(5);
+var external_React_default = /*#__PURE__*/__webpack_require__.n(external_React_);
 
 // EXTERNAL MODULE: ./content-src/components/TopSites/TopSitesConstants.js
-var TopSitesConstants = __webpack_require__(6);
+var TopSitesConstants = __webpack_require__(34);
 
 // CONCATENATED MODULE: ./content-src/components/TopSites/TopSiteFormInput.jsx
 
 
 
-class TopSiteFormInput_TopSiteFormInput extends external__React__default.a.PureComponent {
+class TopSiteFormInput_TopSiteFormInput extends external_React_default.a.PureComponent {
   constructor(props) {
     super(props);
     this.state = { validationError: this.props.validationError };
     this.onChange = this.onChange.bind(this);
     this.onMount = this.onMount.bind(this);
   }
 
   componentWillReceiveProps(nextProps) {
@@ -8383,62 +8611,63 @@ class TopSiteFormInput_TopSiteFormInput 
     this.input = input;
   }
 
   render() {
     const showClearButton = this.props.value && this.props.onClear;
     const { typeUrl } = this.props;
     const { validationError } = this.state;
 
-    return external__React__default.a.createElement(
+    return external_React_default.a.createElement(
       "label",
       null,
-      external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: this.props.titleId }),
-      external__React__default.a.createElement(
+      external_React_default.a.createElement(external_ReactIntl_["FormattedMessage"], { id: this.props.titleId }),
+      external_React_default.a.createElement(
         "div",
         { className: `field ${typeUrl ? "url" : ""}${validationError ? " invalid" : ""}` },
-        this.props.loading ? external__React__default.a.createElement(
+        this.props.loading ? external_React_default.a.createElement(
           "div",
           { className: "loading-container" },
-          external__React__default.a.createElement("div", { className: "loading-animation" })
-        ) : showClearButton && external__React__default.a.createElement("div", { className: "icon icon-clear-input", onClick: this.props.onClear }),
-        external__React__default.a.createElement("input", { type: "text",
+          external_React_default.a.createElement("div", { className: "loading-animation" })
+        ) : showClearButton && external_React_default.a.createElement("div", { className: "icon icon-clear-input", onClick: this.props.onClear }),
+        external_React_default.a.createElement("input", { type: "text",
           value: this.props.value,
           ref: this.onMount,
           onChange: this.onChange,
           placeholder: this.props.intl.formatMessage({ id: this.props.placeholderId }),
           autoFocus: this.props.shouldFocus,
           disabled: this.props.loading }),
-        validationError && external__React__default.a.createElement(
+        validationError && external_React_default.a.createElement(
           "aside",
           { className: "error-tooltip" },
-          external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: this.props.errorMessageId })
+          external_React_default.a.createElement(external_ReactIntl_["FormattedMessage"], { id: this.props.errorMessageId })
         )
       )
     );
   }
 }
 
 TopSiteFormInput_TopSiteFormInput.defaultProps = {
   showClearButton: false,
   value: "",
   validationError: false
 };
 // EXTERNAL MODULE: ./content-src/components/TopSites/TopSite.jsx
-var TopSite = __webpack_require__(22);
+var TopSite = __webpack_require__(35);
 
 // CONCATENATED MODULE: ./content-src/components/TopSites/TopSiteForm.jsx
-
-
-
-
-
-
-
-class TopSiteForm_TopSiteForm extends external__React__default.a.PureComponent {
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TopSiteForm", function() { return TopSiteForm_TopSiteForm; });
+
+
+
+
+
+
+
+class TopSiteForm_TopSiteForm extends external_React_default.a.PureComponent {
   constructor(props) {
     super(props);
     const { site } = props;
     this.state = {
       label: site ? site.label || site.hostname : "",
       url: site ? site.url : "",
       validationError: false,
       customScreenshotUrl: site ? site.customScreenshotURL : "",
@@ -8478,17 +8707,17 @@ class TopSiteForm_TopSiteForm extends ex
     this.setState({ showCustomScreenshotForm: true });
   }
 
   _updateCustomScreenshotInput(customScreenshotUrl) {
     this.setState({
       customScreenshotUrl,
       validationError: false
     });
-    this.props.dispatch({ type: Actions["c" /* actionTypes */].PREVIEW_REQUEST_CANCEL });
+    this.props.dispatch({ type: Actions["actionTypes"].PREVIEW_REQUEST_CANCEL });
   }
 
   onCustomScreenshotUrlChange(event) {
     this._updateCustomScreenshotInput(event.target.value);
   }
 
   onClearScreenshotInput() {
     this._updateCustomScreenshotInput("");
@@ -8510,39 +8739,39 @@ class TopSiteForm_TopSiteForm extends ex
       }
 
       if (this.state.customScreenshotUrl) {
         site.customScreenshotURL = this.cleanUrl(this.state.customScreenshotUrl);
       } else if (this.props.site && this.props.site.customScreenshotURL) {
         // Used to flag that previously cached screenshot should be removed
         site.customScreenshotURL = null;
       }
-      this.props.dispatch(Actions["b" /* actionCreators */].AlsoToMain({
-        type: Actions["c" /* actionTypes */].TOP_SITES_PIN,
+      this.props.dispatch(Actions["actionCreators"].AlsoToMain({
+        type: Actions["actionTypes"].TOP_SITES_PIN,
         data: { site, index }
       }));
-      this.props.dispatch(Actions["b" /* actionCreators */].UserEvent({
-        source: TopSitesConstants["d" /* TOP_SITES_SOURCE */],
+      this.props.dispatch(Actions["actionCreators"].UserEvent({
+        source: TopSitesConstants["TOP_SITES_SOURCE"],
         event: "TOP_SITES_EDIT",
         action_position: index
       }));
 
       this.props.onClose();
     }
   }
 
   onPreviewButtonClick(event) {
     event.preventDefault();
     if (this.validateForm()) {
-      this.props.dispatch(Actions["b" /* actionCreators */].AlsoToMain({
-        type: Actions["c" /* actionTypes */].PREVIEW_REQUEST,
+      this.props.dispatch(Actions["actionCreators"].AlsoToMain({
+        type: Actions["actionTypes"].PREVIEW_REQUEST,
         data: { url: this.cleanUrl(this.state.customScreenshotUrl) }
       }));
-      this.props.dispatch(Actions["b" /* actionCreators */].UserEvent({
-        source: TopSitesConstants["d" /* TOP_SITES_SOURCE */],
+      this.props.dispatch(Actions["actionCreators"].UserEvent({
+        source: TopSitesConstants["TOP_SITES_SOURCE"],
         event: "PREVIEW_REQUEST"
       }));
     }
   }
 
   cleanUrl(url) {
     // If we are missing a protocol, prepend http://
     if (!url.startsWith("http:") && !url.startsWith("https:")) {
@@ -8585,26 +8814,26 @@ class TopSiteForm_TopSiteForm extends ex
     const { customScreenshotUrl } = this.state;
     const requestFailed = this.props.previewResponse === "";
     const validationError = this.state.validationError && !this.validateCustomScreenshotUrl() || requestFailed;
     // Set focus on error if the url field is valid or when the input is first rendered and is empty
     const shouldFocus = validationError && this.validateUrl(this.state.url) || !customScreenshotUrl;
     const isLoading = this.props.previewResponse === null && customScreenshotUrl && this.props.previewUrl === this.cleanUrl(customScreenshotUrl);
 
     if (!this.state.showCustomScreenshotForm) {
-      return external__React__default.a.createElement(
+      return external_React_default.a.createElement(
         "a",
         { className: "enable-custom-image-input", onClick: this.onEnableScreenshotUrlForm },
-        external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: "topsites_form_use_image_link" })
+        external_React_default.a.createElement(external_ReactIntl_["FormattedMessage"], { id: "topsites_form_use_image_link" })
       );
     }
-    return external__React__default.a.createElement(
+    return external_React_default.a.createElement(
       "div",
       { className: "custom-image-input-container" },
-      external__React__default.a.createElement(TopSiteFormInput_TopSiteFormInput, {
+      external_React_default.a.createElement(TopSiteFormInput_TopSiteFormInput, {
         errorMessageId: requestFailed ? "topsites_form_image_validation" : "topsites_form_url_validation",
         loading: isLoading,
         onChange: this.onCustomScreenshotUrlChange,
         onClear: this.onClearScreenshotInput,
         shouldFocus: shouldFocus,
         typeUrl: true,
         value: customScreenshotUrl,
         validationError: validationError,
@@ -8624,328 +8853,77 @@ class TopSiteForm_TopSiteForm extends ex
     // Preview mode if changes were made to the custom screenshot URL and no preview was received yet
     // or the request failed
     const previewMode = changed && !this.props.previewResponse;
     const previewLink = Object.assign({}, this.props.site);
     if (this.props.previewResponse) {
       previewLink.screenshot = this.props.previewResponse;
       previewLink.customScreenshotURL = this.props.previewUrl;
     }
-    return external__React__default.a.createElement(
+    return external_React_default.a.createElement(
       "form",
       { className: "topsite-form" },
-      external__React__default.a.createElement(
+      external_React_default.a.createElement(
         "div",
         { className: "form-input-container" },
-        external__React__default.a.createElement(
+        external_React_default.a.createElement(
           "h3",
           { className: "section-title" },
-          external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: showAsAdd ? "topsites_form_add_header" : "topsites_form_edit_header" })
+          external_React_default.a.createElement(external_ReactIntl_["FormattedMessage"], { id: showAsAdd ? "topsites_form_add_header" : "topsites_form_edit_header" })
         ),
-        external__React__default.a.createElement(
+        external_React_default.a.createElement(
           "div",
           { className: "fields-and-preview" },
-          external__React__default.a.createElement(
+          external_React_default.a.createElement(
             "div",
             { className: "form-wrapper" },
-            external__React__default.a.createElement(TopSiteFormInput_TopSiteFormInput, { onChange: this.onLabelChange,
+            external_React_default.a.createElement(TopSiteFormInput_TopSiteFormInput, { onChange: this.onLabelChange,
               value: this.state.label,
               titleId: "topsites_form_title_label",
               placeholderId: "topsites_form_title_placeholder",
               intl: this.props.intl }),
-            external__React__default.a.createElement(TopSiteFormInput_TopSiteFormInput, { onChange: this.onUrlChange,
+            external_React_default.a.createElement(TopSiteFormInput_TopSiteFormInput, { onChange: this.onUrlChange,
               shouldFocus: this.state.validationError && !this.validateUrl(this.state.url),
               value: this.state.url,
               onClear: this.onClearUrlClick,
               validationError: this.state.validationError && !this.validateUrl(this.state.url),
               titleId: "topsites_form_url_label",
               typeUrl: true,
               placeholderId: "topsites_form_url_placeholder",
               errorMessageId: "topsites_form_url_validation",
               intl: this.props.intl }),
             this._renderCustomScreenshotInput()
           ),
-          external__React__default.a.createElement(TopSite["a" /* TopSiteLink */], { link: previewLink,
+          external_React_default.a.createElement(TopSite["TopSiteLink"], { link: previewLink,
             defaultStyle: requestFailed,
             title: this.state.label })
         )
       ),
-      external__React__default.a.createElement(
+      external_React_default.a.createElement(
         "section",
         { className: "actions" },
-        external__React__default.a.createElement(
+        external_React_default.a.createElement(
           "button",
           { className: "cancel", type: "button", onClick: this.onCancelButtonClick },
-          external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: "topsites_form_cancel_button" })
+          external_React_default.a.createElement(external_ReactIntl_["FormattedMessage"], { id: "topsites_form_cancel_button" })
         ),
-        previewMode ? external__React__default.a.createElement(
+        previewMode ? external_React_default.a.createElement(
           "button",
           { className: "done preview", type: "submit", onClick: this.onPreviewButtonClick },
-          external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: "topsites_form_preview_button" })
-        ) : external__React__default.a.createElement(
+          external_React_default.a.createElement(external_ReactIntl_["FormattedMessage"], { id: "topsites_form_preview_button" })
+        ) : external_React_default.a.createElement(
           "button",
           { className: "done", type: "submit", onClick: this.onDoneButtonClick },
-          external__React__default.a.createElement(external__ReactIntl_["FormattedMessage"], { id: showAsAdd ? "topsites_form_add_button" : "topsites_form_save_button" })
+          external_React_default.a.createElement(external_ReactIntl_["FormattedMessage"], { id: showAsAdd ? "topsites_form_add_button" : "topsites_form_save_button" })
         )
       )
     );
   }
 }
-/* harmony export (immutable) */ __webpack_exports__["a"] = TopSiteForm_TopSiteForm;
-
 
 TopSiteForm_TopSiteForm.defaultProps = {
   site: null,
   index: -1
 };
 
-/***/ }),
-/* 43 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_intl__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_intl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react_intl__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_redux__ = __webpack_require__(4);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react_redux___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react_redux__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__);
-
-
-
-
-
-class _StartupOverlay extends __WEBPACK_IMPORTED_MODULE_3_react___default.a.PureComponent {
-  constructor(props) {
-    super(props);
-    this.onInputChange = this.onInputChange.bind(this);
-    this.onSubmit = this.onSubmit.bind(this);
-    this.clickSkip = this.clickSkip.bind(this);
-    this.initScene = this.initScene.bind(this);
-    this.removeOverlay = this.removeOverlay.bind(this);
-    this.onInputInvalid = this.onInputInvalid.bind(this);
-
-    this.state = { emailInput: "" };
-    this.initScene();
-  }
-
-  initScene() {
-    // Timeout to allow the scene to render once before attaching the attribute
-    // to trigger the animation.
-    setTimeout(() => {
-      this.setState({ show: true });
-    }, 10);
-  }
-
-  removeOverlay() {
-    window.removeEventListener("visibilitychange", this.removeOverlay);
-    this.setState({ show: false });
-    setTimeout(() => {
-      // Allow scrolling and fully remove overlay after animation finishes.
-      document.body.classList.remove("welcome");
-    }, 400);
-  }
-
-  onInputChange(e) {
-    let error = e.target.previousSibling;
-    this.setState({ emailInput: e.target.value });
-    error.classList.remove("active");
-    e.target.classList.remove("invalid");
-  }
-
-  onSubmit() {
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_1_common_Actions_jsm__["b" /* actionCreators */].UserEvent({ event: "SUBMIT_EMAIL" }));
-    window.addEventListener("visibilitychange", this.removeOverlay);
-  }
-
-  clickSkip() {
-    this.props.dispatch(__WEBPACK_IMPORTED_MODULE_1_common_Actions_jsm__["b" /* actionCreators */].UserEvent({ event: "SKIPPED_SIGNIN" }));
-    this.removeOverlay();
-  }
-
-  onInputInvalid(e) {
-    let error = e.target.previousSibling;
-    error.classList.add("active");
-    e.target.classList.add("invalid");
-    e.preventDefault(); // Override built-in form validation popup
-  }
-
-  render() {
-    let termsLink = __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-      "a",
-      { href: "https://accounts.firefox.com/legal/terms", target: "_blank", rel: "noopener noreferrer" },
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "firstrun_terms_of_service" })
-    );
-    let privacyLink = __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-      "a",
-      { href: "https://accounts.firefox.com/legal/privacy", target: "_blank", rel: "noopener noreferrer" },
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "firstrun_privacy_notice" })
-    );
-    return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-      "div",
-      { className: `overlay-wrapper ${this.state.show ? "show " : ""}` },
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("div", { className: "background" }),
-      __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-        "div",
-        { className: "firstrun-scene" },
-        __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-          "div",
-          { className: "fxaccounts-container" },
-          __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-            "div",
-            { className: "firstrun-left-divider" },
-            __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-              "h1",
-              { className: "firstrun-title" },
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "firstrun_title" })
-            ),
-            __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-              "p",
-              { className: "firstrun-content" },
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "firstrun_content" })
-            ),
-            __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-              "a",
-              { className: "firstrun-link", href: "https://www.mozilla.org/firefox/features/sync/", target: "_blank", rel: "noopener noreferrer" },
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "firstrun_learn_more_link" })
-            )
-          ),
-          __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-            "div",
-            { className: "firstrun-sign-in" },
-            __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-              "p",
-              { className: "form-header" },
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "firstrun_form_header" }),
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-                "span",
-                { className: "sub-header" },
-                __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "firstrun_form_sub_header" })
-              )
-            ),
-            __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-              "form",
-              { method: "get", action: "https://accounts.firefox.com", target: "_blank", rel: "noopener noreferrer", onSubmit: this.onSubmit },
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("input", { name: "service", type: "hidden", value: "sync" }),
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("input", { name: "action", type: "hidden", value: "email" }),
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("input", { name: "context", type: "hidden", value: "fx_desktop_v3" }),
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("input", { name: "entrypoint", type: "hidden", value: "activity-stream-firstrun" }),
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("input", { name: "utm_source", type: "hidden", value: "activity-stream" }),
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("input", { name: "utm_campaign", type: "hidden", value: "firstrun" }),
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-                "span",
-                { className: "error" },
-                this.props.intl.formatMessage({ id: "firstrun_invalid_input" })
-              ),
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("input", { className: "email-input", name: "email", type: "email", required: "true", onInvalid: this.onInputInvalid, placeholder: this.props.intl.formatMessage({ id: "firstrun_email_input_placeholder" }), onChange: this.onInputChange }),
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-                "div",
-                { className: "extra-links" },
-                __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], {
-                  id: "firstrun_extra_legal_links",
-                  values: {
-                    terms: termsLink,
-                    privacy: privacyLink
-                  } })
-              ),
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-                "button",
-                { className: "continue-button", type: "submit" },
-                __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "firstrun_continue_to_login" })
-              )
-            ),
-            __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(
-              "button",
-              { className: "skip-button", disabled: !!this.state.emailInput, onClick: this.clickSkip },
-              __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_0_react_intl__["FormattedMessage"], { id: "firstrun_skip_login" })
-            )
-          )
-        )
-      )
-    );
-  }
-}
-/* unused harmony export _StartupOverlay */
-
-
-const StartupOverlay = Object(__WEBPACK_IMPORTED_MODULE_2_react_redux__["connect"])()(Object(__WEBPACK_IMPORTED_MODULE_0_react_intl__["injectIntl"])(_StartupOverlay));
-/* harmony export (immutable) */ __webpack_exports__["a"] = StartupOverlay;
-
-
-/***/ }),
-/* 44 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__ = __webpack_require__(1);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_common_PerfService_jsm__ = __webpack_require__(21);
-
-
-
-const VISIBLE = "visible";
-const VISIBILITY_CHANGE_EVENT = "visibilitychange";
-
-class DetectUserSessionStart {
-  constructor(store, options = {}) {
-    this._store = store;
-    // Overrides for testing
-    this.document = options.document || global.document;
-    this._perfService = options.perfService || __WEBPACK_IMPORTED_MODULE_1_common_PerfService_jsm__["a" /* perfService */];
-    this._onVisibilityChange = this._onVisibilityChange.bind(this);
-  }
-
-  /**
-   * sendEventOrAddListener - Notify immediately if the page is already visible,
-   *                    or else set up a listener for when visibility changes.
-   *                    This is needed for accurate session tracking for telemetry,
-   *                    because tabs are pre-loaded.
-   */
-  sendEventOrAddListener() {
-    if (this.document.visibilityState === VISIBLE) {
-      // If the document is already visible, to the user, send a notification
-      // immediately that a session has started.
-      this._sendEvent();
-    } else {
-      // If the document is not visible, listen for when it does become visible.
-      this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
-    }
-  }
-
-  /**
-   * _sendEvent - Sends a message to the main process to indicate the current
-   *              tab is now visible to the user, includes the
-   *              visibility_event_rcvd_ts time in ms from the UNIX epoch.
-   */
-  _sendEvent() {
-    this._perfService.mark("visibility_event_rcvd_ts");
-
-    try {
-      let visibility_event_rcvd_ts = this._perfService.getMostRecentAbsMarkStartByName("visibility_event_rcvd_ts");
-
-      this._store.dispatch(__WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["b" /* actionCreators */].AlsoToMain({
-        type: __WEBPACK_IMPORTED_MODULE_0_common_Actions_jsm__["c" /* actionTypes */].SAVE_SESSION_PERF_DATA,
-        data: { visibility_event_rcvd_ts }
-      }));
-    } catch (ex) {
-      // If this failed, it's likely because the `privacy.resistFingerprinting`
-      // pref is true.  We should at least not blow up.
-    }
-  }
-
-  /**
-   * _onVisibilityChange - If the visibility has changed to visible, sends a notification
-   *                      and removes the event listener. This should only be called once per tab.
-   */
-  _onVisibilityChange() {
-    if (this.document.visibilityState === VISIBLE) {
-      this._sendEvent();
-      this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
-    }
-  }
-}
-/* harmony export (immutable) */ __webpack_exports__["a"] = DetectUserSessionStart;
-
-/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(3)))
-
 /***/ })
 /******/ ]);
 //# sourceMappingURL=activity-stream.bundle.js.map
\ No newline at end of file
--- a/browser/extensions/activity-stream/data/content/activity-stream.bundle.js.map
+++ b/browser/extensions/activity-stream/data/content/activity-stream.bundle.js.map
@@ -1,1 +1,1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 7d20b9d6e1d8b115b41d","webpack:///external \"React\"","webpack:///./common/Actions.jsm","webpack:///external \"ReactIntl\"","webpack:///(webpack)/buildin/global.js","webpack:///external \"ReactRedux\"","webpack:///./content-src/asrouter/template-utils.js","webpack:///./content-src/components/TopSites/TopSitesConstants.js","webpack:///./common/Dedupe.jsm","webpack:///./common/Reducers.jsm","webpack:///./content-src/asrouter/asrouter-content.jsx","webpack:///external \"PropTypes\"","webpack:///./node_modules/fluent/src/parser.js","webpack:///./node_modules/fluent/src/types.js","webpack:///./node_modules/fluent/src/builtins.js","webpack:///./node_modules/fluent/src/resolver.js","webpack:///./node_modules/fluent/src/context.js","webpack:///./node_modules/fluent/src/cached_iterable.js","webpack:///./node_modules/fluent/src/fallback.js","webpack:///./node_modules/fluent/src/util.js","webpack:///./node_modules/fluent/src/index.js","webpack:///./content-src/lib/init-store.js","webpack:///external \"ReactDOM\"","webpack:///./content-src/components/ErrorBoundary/ErrorBoundary.jsx","webpack:///./content-src/lib/link-menu-options.js","webpack:///./content-src/components/LinkMenu/LinkMenu.jsx","webpack:///./content-src/components/ContextMenu/ContextMenu.jsx","webpack:///./content-src/lib/screenshot-utils.js","webpack:///./content-src/components/CollapsibleSection/CollapsibleSection.jsx","webpack:///./content-src/lib/section-menu-options.js","webpack:///./content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","webpack:///./common/PerfService.jsm","webpack:///./content-src/components/TopSites/TopSite.jsx","webpack:///./content-src/activity-stream.jsx","webpack:///./content-src/lib/snippets.js","webpack:///./node_modules/fluent-react/src/localization.js","webpack:///./node_modules/fluent-react/src/provider.js","webpack:///./node_modules/fluent-react/src/with_localization.js","webpack:///./node_modules/fluent-react/src/markup.js","webpack:///./node_modules/fluent-react/vendor/omittedCloseTags.js","webpack:///./node_modules/fluent-react/vendor/voidElementTags.js","webpack:///./node_modules/fluent-react/src/localized.js","webpack:///./node_modules/fluent-react/src/index.js","webpack:///external \"Redux\"","webpack:///./content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","webpack:///./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx","webpack:///./content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx","webpack:///./content-src/asrouter/components/Button/Button.jsx","webpack:///./content-src/asrouter/components/SnippetBase/SnippetBase.jsx","webpack:///./content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","webpack:///./content-src/components/Base/Base.jsx","webpack:///./content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","webpack:///./content-src/components/ConfirmDialog/ConfirmDialog.jsx","webpack:///./content-src/components/ManualMigration/ManualMigration.jsx","webpack:///./common/PrerenderData.jsm","webpack:///./content-src/components/Search/Search.jsx","webpack:///./content-src/lib/constants.js","webpack:///./content-src/components/Sections/Sections.jsx","webpack:///./content-src/components/Card/types.js","webpack:///./content-src/components/Card/Card.jsx","webpack:///./content-src/components/SectionMenu/SectionMenu.jsx","webpack:///./content-src/components/Topics/Topics.jsx","webpack:///./content-src/components/TopSites/TopSites.jsx","webpack:///./content-src/components/TopSites/TopSiteFormInput.jsx","webpack:///./content-src/components/TopSites/TopSiteForm.jsx","webpack:///./content-src/components/StartupOverlay/StartupOverlay.jsx","webpack:///./content-src/lib/detect-user-session-start.js"],"names":["globalImportContext","Window","BACKGROUND_PROCESS","UI_CODE","actionTypes","type","ASRouterActions","_RouteMessage","action","options","meta","from","to","Error","forEach","o","AlsoToMain","fromTarget","skipLocal","CONTENT_MESSAGE_TYPE","MAIN_MESSAGE_TYPE","OnlyToMain","BroadcastToContent","AlsoToOneContent","target","skipMain","toTarget","OnlyToOneContent","AlsoToPreloaded","PRELOAD_MESSAGE_TYPE","UserEvent","data","TELEMETRY_USER_EVENT","ASRouterUserEvent","AS_ROUTER_TELEMETRY_USER_EVENT","UndesiredEvent","importContext","TELEMETRY_UNDESIRED_EVENT","PerfEvent","TELEMETRY_PERFORMANCE_EVENT","ImpressionStats","TELEMETRY_IMPRESSION_STATS","SetPref","name","value","SET_PREF","WebExtEvent","source","isSendToMain","isBroadcastToContent","isSendToOneContent","isSendToPreloaded","isFromMain","getPortIdOfSender","safeURI","url","protocol","URL","isAllowed","includes","console","warn","TOP_SITES_SOURCE","TOP_SITES_CONTEXT_MENU_OPTIONS","MIN_RICH_FAVICON_SIZE","MIN_CORNER_FAVICON_SIZE","Dedupe","constructor","createKey","defaultCreateKey","item","group","groups","globalKeys","Set","result","values","valueMap","Map","key","has","set","push","add","map","m","Array","TOP_SITES_DEFAULT_ROWS","TOP_SITES_MAX_SITES_PER_ROW","dedupe","site","INITIAL_STATE","App","initialized","version","Snippets","TopSites","rows","editForm","Prefs","Dialog","visible","Sections","prevState","at","INIT","Object","assign","insertPinned","links","pinned","pinnedUrls","link","newLinks","filter","isPinned","pinIndex","val","index","length","splice","hasMatch","newRows","TOP_SITES_UPDATED","pref","TOP_SITES_PREFS_UPDATED","TOP_SITES_EDIT","previewResponse","TOP_SITES_CANCEL_EDIT","PREVIEW_RESPONSE","previewUrl","preview","PREVIEW_REQUEST","PREVIEW_REQUEST_CANCEL","SCREENSHOT_UPDATED","row","screenshot","PLACES_BOOKMARK_ADDED","bookmarkGuid","bookmarkTitle","dateAdded","bookmarkDateCreated","PLACES_BOOKMARK_REMOVED","newSite","PLACES_LINK_DELETED","DIALOG_OPEN","DIALOG_CANCEL","DELETE_HISTORY_URL","newValues","PREFS_INITIAL_VALUES","PREF_CHANGED","newState","SECTION_DEREGISTER","section","id","SECTION_REGISTER","title","enabled","SECTION_UPDATE","find","card","dedupeConfigurations","dedupeConf","dedupedRows","dedupeFrom","reduce","dedupeSectionId","dedupeSection","s","SECTION_UPDATE_CARD","PLACES_SAVED_TO_POCKET","open_url","pocket_id","PLACES_LINK_BLOCKED","DELETE_FROM_POCKET","ARCHIVE_FROM_POCKET","SNIPPETS_DATA","SNIPPET_BLOCKED","blockList","concat","SNIPPETS_BLOCKLIST_CLEARED","SNIPPETS_RESET","INCOMING_MESSAGE_NAME","OUTGOING_MESSAGE_NAME","ASRouterUtils","addListener","listener","global","RPMAddMessageListener","removeListener","RPMRemoveMessageListener","sendMessage","RPMSendAsyncMessage","blockById","blockBundle","bundle","executeAction","button_action","button_action_params","unblockById","unblockBundle","getNextMessage","overrideMessage","sendTelemetry","ping","payload","ac","getEndpoint","window","location","href","params","URLSearchParams","slice","indexOf","endpoint","get","snippetId","e","shouldSendImpressionOnUpdate","nextProps","prevProps","message","generateMessages","content","cx","addMessages","ALLOWED_TAGS","b","i","u","strong","em","br","convertLinks","sendClick","keys","acc","linkTag","metric","RichText","props","text","ASRouterUISurface","React","PureComponent","onMessageFromParent","bind","sendImpression","sendUserActionTelemetry","state","extraProps","message_id","eventType","provider","event","dataset","onBlockById","clearBundle","setState","componentWillMount","document","trigger","componentWillUnmount","renderSnippets","renderOnboarding","render","template","defaultProps","ASRouterContent","containerElement","_mount","getElementById","ReactDOM","_unmount","unmountComponentAtNode","init","uninit","MAX_PLACEABLES","entryIdentifierRe","identifierRe","functionIdentifierRe","RuntimeParser","getResource","string","_source","_index","_length","entries","errors","skipWS","getEntry","SyntaxError","skipToNextEntryStart","error","ch","skipComment","skipSection","getMessage","skipInlineWS","getVariantName","getEntryIdentifier","getPattern","startsWith","attrs","lineStart","getAttributes","skipBlankLines","ptr","getIdentifier","re","lastIndex","exec","toString","start","cc","charCodeAt","getString","substring","eol","firstLineContent","getComplexPattern","buffer","placeables","blankLinesStart","blankLinesEnd","ch2","getPlaceable","variants","getVariants","exp","vars","def","selector","getSelectorExpression","literal","getLiteral","getVariantKey","args","getCallArgs","test","fun","isArray","lastIndexOf","getNumber","num","defaultIndex","cc0","cc1","parse","parser","FluentType","opts","valueOf","FluentNone","FluentNumber","parseFloat","ctx","nf","_memoizeIntlObject","Intl","NumberFormat","format","match","other","FluentDateTime","Date","dtf","DateTimeFormat","FluentSymbol","pr","PluralRules","select","arg","merge","argopts","unwrapped","opt","MAX_PLACEABLE_LENGTH","FSI","PDI","DefaultMember","env","members","RangeError","MessageReference","_terms","_messages","err","ReferenceError","VariantExpression","keyword","Type","isVariantList","node","variant","variantKey","AttributeExpression","attrName","SelectExpression","keyCanMatch","expr","Pattern","ExternalArgument","FunctionReference","CallExpression","attr","member","undefined","hasOwnProperty","TypeError","_functions","func","builtins","callee","posargs","keyargs","ptn","dirty","useIsolating","_useIsolating","elem","part","delete","join","resolve","WeakSet","locales","functions","_intls","WeakMap","messages","Symbol","iterator","hasMessage","ctor","cache","JSON","stringify","CachedIterable","iterable","asyncIterator","seen","cur","next","touchNext","done","mapContextSync","ids","getContextForId","context","remainingCount","foundContexts","fill","mapContextAsync","nonBlank","line","countIndent","indent","ftl","strings","code","lines","split","indents","common","Math","min","RegExp","replace","MERGE_STORE_ACTION","EARLY_QUEUED_ACTIONS","SAVE_SESSION_PERF_DATA","PAGE_PRERENDERED","mergeStateReducer","mainReducer","messageMiddleware","store","au","rehydrationMiddleware","_didRehydrate","isMergeStoreAction","isRehydrationRequest","NEW_TAB_STATE_REQUEST","_didRequestInitialState","queueEarlyMessageMiddleware","_receivedFromMain","_earlyActionQueue","initStore","reducers","initialState","createStore","combineReducers","applyMiddleware","msg","dispatch","ex","dump","stack","ErrorBoundaryFallback","windowObj","onClick","reload","defaultClass","className","ErrorBoundary","hasError","componentDidCatch","info","children","FallbackComponent","_OpenInPrivateWindow","icon","OPEN_PRIVATE_WINDOW","referrer","userEvent","GetPlatformString","platform","LinkMenuOptions","Separator","EmptyItem","RemoveBookmark","DELETE_BOOKMARK_BY_ID","AddBookmark","BOOKMARK_URL","OpenInNewWindow","OPEN_NEW_WINDOW","typedBonus","BlockUrl","eventSource","BLOCK_URL","impression","block","tiles","guid","pos","WebExtDismiss","string_id","WEBEXT_DISMISS","action_position","DeleteUrl","isEnabled","siteInfo","onConfirm","forceBlock","body_string_id","confirm_button_string_id","cancel_button_string_id","ShowFile","SHOW_DOWNLOAD_FILE","OpenFile","OPEN_DOWNLOAD_FILE","CopyDownloadLink","COPY_DOWNLOAD_LINK","GoToDownloadPage","OPEN_LINK","disabled","RemoveDownload","REMOVE_DOWNLOAD_FILE","PinTopSite","TOP_SITES_PIN","UnpinTopSite","TOP_SITES_UNPIN","SaveToPocket","SAVE_TO_POCKET","pocket","DeleteFromPocket","ArchiveFromPocket","EditTopSite","CheckBookmark","CheckPinTopSite","CheckSavedToPocket","CheckBookmarkOrArchive","OpenInPrivateWindow","DEFAULT_SITE_MENU_OPTIONS","_LinkMenu","getOptions","isPrivateBrowsingEnabled","propOptions","isDefault","option","label","intl","formatMessage","userEventData","shouldSendImpressionStats","first","last","onUpdate","getState","LinkMenu","connect","injectIntl","ContextMenu","hideContext","componentDidMount","setTimeout","addEventListener","removeEventListener","stopPropagation","ContextMenuItem","onKeyDown","shiftKey","ScreenshotUtils","isBlob","isLocal","image","path","createLocalImageObject","remoteImage","createObjectURL","maybeRevokeBlobObjectURL","localImage","revokeObjectURL","isRemoteImageLocal","VISIBLE","VISIBILITY_CHANGE_EVENT","getFormattedMessage","Disclaimer","onAcknowledge","disclaimerPref","disclaimer","button","DisclaimerIntl","_CollapsibleSection","onBodyMount","onHeaderClick","onTransitionEnd","enableOrDisableAnimation","onMenuButtonClick","onMenuButtonMouseEnter","onMenuButtonMouseLeave","onMenuUpdate","enableAnimation","isAnimating","menuButtonHover","showContextMenu","componentWillUpdate","collapsed","sectionBody","scrollHeight","visibilityState","maxHeight","SectionMenuOptions","CheckCollapsed","currentTarget","renderIcon","backgroundImage","preventDefault","isCollapsible","extraMenuOptions","showPrefName","privacyNoticeURL","isFirst","isLast","isWebExtension","needsDisclaimer","active","CollapsibleSection","MoveUp","SECTION_MOVE","direction","MoveDown","RemoveSection","CollapseSection","UPDATE_SECTION_PREFS","ExpandSection","ManageSection","SETTINGS_OPEN","ManageWebExtension","OPEN_WEBEXT_SETTINGS","AddTopSite","PrivacyNotice","RECORDED_SECTIONS","ComponentPerfTimer","Component","perfSvc","_sendBadStateEvent","_sendPaintedEvent","_reportMissingData","_timestampHandled","_recordedFirstRender","_maybeSendPaintedEvent","componentDidUpdate","_afterFramePaint","callback","requestAnimationFrame","_maybeSendBadStateEvent","_ensureFirstRenderTsRecorded","mark","dataReadyKey","firstRenderKey","parseInt","getMostRecentAbsMarkStartByName","ChromeUtils","import","usablePerfObj","Services","appShell","hiddenDOMWindow","performance","now","_PerfService","performanceObj","_perf","prototype","str","getEntriesByName","timeOrigin","absNow","mostRecentEntry","startTime","TopSiteLink","screenshotImage","onDragEvent","_allowDrop","dataTransfer","types","dragged","effectAllowed","setData","blur","getNextStateFromProps","imageInState","nextState","componentWillReceiveProps","defaultStyle","isDraggable","topSiteOuterClassName","isDragged","tippyTopIcon","faviconSize","letterFallback","imageClassName","imageStyle","showSmallFavicon","smallFaviconStyle","smallFaviconFallback","hasScreenshotImage","customScreenshotURL","backgroundColor","favicon","draggableProps","onDragEnd","onDragStart","onMouseDown","TopSite","onLinkClick","_getTelemetryInfo","icon_type","iconType","card_type","altKey","ctrlKey","metaKey","onActivate","isContextMenuOpen","activeIndex","hostname","TopSitePlaceholder","onEditButtonClick","_TopSiteList","DEFAULT_STATE","draggedIndex","draggedSite","draggedTitle","topSitesPreview","prevTopSites","newTopSites","dropped","_makeTopSitesPreview","TOP_SITES_INSERT","draggedFromIndex","_getTopSites","topSites","TopSitesRows","pinnedOnly","unpinned","siteToInsert","holeIndex","indexStep","shiftingStep","nextIndex","shift","topSitesUI","commonProps","maxNarrowVisibleIndex","l","topSiteIconType","slotProps","TopSiteList","gActivityStreamPrerenderedState","sendEventOrAddListener","hydrate","documentElement","lang","gActivityStreamStrings","addSnippetsSubscriber","DATABASE_NAME","DATABASE_VERSION","SNIPPETS_OBJECTSTORE_NAME","SNIPPETS_UPDATE_INTERVAL_MS","SNIPPETS_ENABLED_EVENT","SNIPPETS_DISABLED_EVENT","SnippetsMap","_db","_dispatch","_dbTransaction","db","put","clear","blockSnippetById","SNIPPETS_BLOCKLIST_UPDATED","disableOnboarding","DISABLE_ONBOARDING","showFirefoxAccounts","SHOW_FIREFOX_ACCOUNTS","getTotalBookmarksCount","Promise","TOTAL_BOOKMARKS_REQUEST","onMessage","TOTAL_BOOKMARKS_RESPONSE","getAddonsInfo","ADDONS_INFO_REQUEST","ADDONS_INFO_RESPONSE","_openDB","_restoreFromDb","modifier","reject","transaction","objectStore","onsuccess","onerror","openRequest","indexedDB","open","deleteDatabase","onupgradeneeded","objectStoreNames","contains","createObjectStore","onversionchange","versionChangeEvent","close","cursorRequest","openCursor","cursor","continue","SnippetsProvider","gSnippetsMap","_onAction","snippetsMap","_refreshSnippets","cachedVersion","appData","lastUpdate","needsUpdate","snippetsURL","response","fetch","status","_noSnippetFallback","_forceOnboardingVisibility","shouldBeVisible","onboardingEl","style","display","_showRemoteSnippets","snippetsEl","elementId","innerHTML","scriptEl","getElementsByTagName","relocatedScript","createElement","parentNode","replaceChild","dispatchEvent","Event","snippets","asrouterContent","initializing","subscribe","isASRouterEnabled","asrouterExperimentEnabled","asrouterOnboardingCohort","disableSnippets","contexts","subs","comp","unsubscribe","setMessages","relocalize","getMessageContext","formatCompound","mcx","fallback","isReactLocalization","propName","prop","l10n","getChildContext","Children","only","LocalizationProvider","childContextTypes","propTypes","PropTypes","element","isRequired","isIterable","componentName","withLocalization","Inner","WithLocalization","forceUpdate","displayName","contextTypes","component","TEMPLATE","parseMarkup","omittedCloseTags","area","base","col","embed","hr","img","input","keygen","param","track","wbr","voidElementTags","menuitem","reMarkup","toArguments","elems","propname","propval","substr","isValidElement","toLowerCase","messageValue","messageAttrs","localizedProps","cloneElement","translationNodes","childNodes","translatedChildren","childNode","nodeType","TEXT_NODE","textContent","localName","sourceChild","Localized","ImpressionsWrapper","sendImpressionOrAddListener","_onVisibilityChange","sendOnMount","body","classList","remove","button_label","onDoneButton","UISurface","onAction","ALLOWED_STYLE_TAGS","Button","tag","border","onBlockClicked","onBlock","containerClassName","DEFAULT_ICON_PATH","onButtonClick","renderTitle","renderTitleIcon","titleIcon","title_icon","renderButton","button_url","button_color","button_background_color","hasLink","button_type","hasButton","tall","richText","PrefsButton","addLocaleDataForReactIntl","locale","addLocaleData","parentLocale","_Base","sendNewTabRehydrated","isPrerendered","updateTheme","bodyClassName","isFirstrun","v","renderNotified","NEW_TAB_REHYDRATED","prefs","hash","BaseContent","openPreferences","shouldBeFixedToTop","PrerenderData","arePrefsValid","outerClassName","showSearch","migrationExpired","Base","ASRouterAdmin","findOtherBundledMessagesOfSameTemplate","bundled","handleBlock","handleUnblock","handleOverride","renderMessageItem","isCurrent","lastMessageId","isBlocked","itemClassName","renderMessages","renderProviders","providers","_ConfirmDialog","_handleCancelBtn","_handleConfirmBtn","_renderModalMessage","message_body","ConfirmDialog","_ManualMigration","onLaunchTour","onCancelTour","MIGRATION_START","MIGRATION_CANCEL","ManualMigration","_PrerenderData","initialPrefs","initialSections","_setValidation","validation","_validation","invalidatingPrefs","_invalidatingPrefs","oneOf","getPref","indexedDBPrefs","some","anyModifiedPrefs","prefName","order","_Search","onInputMount","handleEvent","detail","gContentSearchController","search","healthReportKey","IS_NEWTAB","searchSource","ContentSearchUIController","Search","documentURI","CARDS_PER_ROW_DEFAULT","CARDS_PER_ROW_COMPACT_WIDE","Section","numRows","rowsPref","maxRows","_dispatchImpressionStats","cardsPerRow","compactCards","matchMedia","matches","maxCards","cards","needsImpressionStats","impressionCardGuids","sendImpressionStatsOrAddListener","isCollapsed","wasCollapsed","emptyState","contextMenuOptions","maxCardsPerRow","maxCardsOnNarrow","shouldShowTopics","topics","realRows","shouldShowEmptyState","sectionClassName","feed","padding","read_more_endpoint","SectionIntl","_Sections","renderSections","sections","enabledSections","sectionOrder","showTopSites","expectedCount","sectionId","cardContextTypes","history","intlID","bookmark","trending","download","gImageLoading","activeCard","imageLoaded","cardImage","maybeLoadImage","imageUrl","loaderPromise","loader","Image","src","catch","then","WEBEXT_CLICK","click","_Card","hasImage","placeholder","description","Card","PlaceholderCard","DEFAULT_SECTION_MENU_OPTIONS","WEBEXT_SECTION_MENU_OPTIONS","_SectionMenu","extraOptions","SectionMenu","Topic","Topics","t","faviconRef","countTopSitesIconsTypes","countTopSitesTypes","_TopSites","onFormClose","_dispatchTopSitesStats","_getVisibleTopSites","topSitesIconsStats","topSitesPinned","topsites_icon_stats","topsites_pinned","sitesPerRow","topSitesRows","validationError","onChange","onMount","shouldFocus","focus","ev","showClearButton","onClear","typeUrl","titleId","loading","placeholderId","errorMessageId","TopSiteFormInput","customScreenshotUrl","showCustomScreenshotForm","onClearScreenshotInput","onLabelChange","onUrlChange","onCancelButtonClick","onClearUrlClick","onDoneButtonClick","onCustomScreenshotUrlChange","onPreviewButtonClick","onEnableScreenshotUrlForm","validateUrl","_updateCustomScreenshotInput","onClose","validateForm","cleanUrl","_tryParseUrl","validProtocols","urlObj","validateCustomScreenshotUrl","validate","_renderCustomScreenshotInput","requestFailed","isLoading","showAsAdd","previous","changed","previewMode","previewLink","TopSiteForm","_StartupOverlay","onInputChange","onSubmit","clickSkip","initScene","removeOverlay","onInputInvalid","emailInput","show","previousSibling","termsLink","privacyLink","terms","privacy","StartupOverlay","DetectUserSessionStart","_store","_perfService","perfService","_sendEvent","visibility_event_rcvd_ts"],"mappings":"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","file":"activity-stream.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 23);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7d20b9d6e1d8b115b41d","module.exports = React;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"React\"\n// module id = 0\n// module chunks = 0","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nthis.MAIN_MESSAGE_TYPE = \"ActivityStream:Main\";\nthis.CONTENT_MESSAGE_TYPE = \"ActivityStream:Content\";\nthis.PRELOAD_MESSAGE_TYPE = \"ActivityStream:PreloadedBrowser\";\nthis.UI_CODE = 1;\nthis.BACKGROUND_PROCESS = 2;\n\n/**\n * globalImportContext - Are we in UI code (i.e. react, a dom) or some kind of background process?\n *                       Use this in action creators if you need different logic\n *                       for ui/background processes.\n */\nconst globalImportContext = typeof Window === \"undefined\" ? BACKGROUND_PROCESS : UI_CODE;\n// Export for tests\nthis.globalImportContext = globalImportContext;\n\n// Create an object that avoids accidental differing key/value pairs:\n// {\n//   INIT: \"INIT\",\n//   UNINIT: \"UNINIT\"\n// }\nconst actionTypes = {};\nfor (const type of [\n  \"ADDONS_INFO_REQUEST\",\n  \"ADDONS_INFO_RESPONSE\",\n  \"ARCHIVE_FROM_POCKET\",\n  \"AS_ROUTER_TELEMETRY_USER_EVENT\",\n  \"BLOCK_URL\",\n  \"BOOKMARK_URL\",\n  \"COPY_DOWNLOAD_LINK\",\n  \"DELETE_BOOKMARK_BY_ID\",\n  \"DELETE_FROM_POCKET\",\n  \"DELETE_HISTORY_URL\",\n  \"DIALOG_CANCEL\",\n  \"DIALOG_OPEN\",\n  \"DISABLE_ONBOARDING\",\n  \"DOWNLOAD_CHANGED\",\n  \"INIT\",\n  \"MIGRATION_CANCEL\",\n  \"MIGRATION_COMPLETED\",\n  \"MIGRATION_START\",\n  \"NEW_TAB_INIT\",\n  \"NEW_TAB_INITIAL_STATE\",\n  \"NEW_TAB_LOAD\",\n  \"NEW_TAB_REHYDRATED\",\n  \"NEW_TAB_STATE_REQUEST\",\n  \"NEW_TAB_UNLOAD\",\n  \"OPEN_DOWNLOAD_FILE\",\n  \"OPEN_LINK\",\n  \"OPEN_NEW_WINDOW\",\n  \"OPEN_PRIVATE_WINDOW\",\n  \"OPEN_WEBEXT_SETTINGS\",\n  \"PAGE_PRERENDERED\",\n  \"PLACES_BOOKMARK_ADDED\",\n  \"PLACES_BOOKMARK_REMOVED\",\n  \"PLACES_HISTORY_CLEARED\",\n  \"PLACES_LINKS_CHANGED\",\n  \"PLACES_LINK_BLOCKED\",\n  \"PLACES_LINK_DELETED\",\n  \"PLACES_SAVED_TO_POCKET\",\n  \"PREFS_INITIAL_VALUES\",\n  \"PREF_CHANGED\",\n  \"PREVIEW_REQUEST\",\n  \"PREVIEW_REQUEST_CANCEL\",\n  \"PREVIEW_RESPONSE\",\n  \"REMOVE_DOWNLOAD_FILE\",\n  \"RICH_ICON_MISSING\",\n  \"SAVE_SESSION_PERF_DATA\",\n  \"SAVE_TO_POCKET\",\n  \"SCREENSHOT_UPDATED\",\n  \"SECTION_DEREGISTER\",\n  \"SECTION_DISABLE\",\n  \"SECTION_ENABLE\",\n  \"SECTION_MOVE\",\n  \"SECTION_OPTIONS_CHANGED\",\n  \"SECTION_REGISTER\",\n  \"SECTION_UPDATE\",\n  \"SECTION_UPDATE_CARD\",\n  \"SETTINGS_CLOSE\",\n  \"SETTINGS_OPEN\",\n  \"SET_PREF\",\n  \"SHOW_DOWNLOAD_FILE\",\n  \"SHOW_FIREFOX_ACCOUNTS\",\n  \"SKIPPED_SIGNIN\",\n  \"SNIPPETS_BLOCKLIST_CLEARED\",\n  \"SNIPPETS_BLOCKLIST_UPDATED\",\n  \"SNIPPETS_DATA\",\n  \"SNIPPETS_RESET\",\n  \"SNIPPET_BLOCKED\",\n  \"SUBMIT_EMAIL\",\n  \"SYSTEM_TICK\",\n  \"TELEMETRY_IMPRESSION_STATS\",\n  \"TELEMETRY_PERFORMANCE_EVENT\",\n  \"TELEMETRY_UNDESIRED_EVENT\",\n  \"TELEMETRY_USER_EVENT\",\n  \"TOP_SITES_CANCEL_EDIT\",\n  \"TOP_SITES_EDIT\",\n  \"TOP_SITES_INSERT\",\n  \"TOP_SITES_PIN\",\n  \"TOP_SITES_PREFS_UPDATED\",\n  \"TOP_SITES_UNPIN\",\n  \"TOP_SITES_UPDATED\",\n  \"TOTAL_BOOKMARKS_REQUEST\",\n  \"TOTAL_BOOKMARKS_RESPONSE\",\n  \"UNINIT\",\n  \"UPDATE_SECTION_PREFS\",\n  \"WEBEXT_CLICK\",\n  \"WEBEXT_DISMISS\"\n]) {\n  actionTypes[type] = type;\n}\n\n// These are acceptable actions for AS Router messages to have. They can show up\n// as call-to-action buttons in snippets, onboarding tour, etc.\nconst ASRouterActions = {};\nfor (const type of [\n  \"OPEN_PRIVATE_BROWSER_WINDOW\",\n  \"OPEN_URL\",\n  \"OPEN_ABOUT_PAGE\"\n]) {\n  ASRouterActions[type] = type;\n}\n\n// Helper function for creating routed actions between content and main\n// Not intended to be used by consumers\nfunction _RouteMessage(action, options) {\n  const meta = action.meta ? {...action.meta} : {};\n  if (!options || !options.from || !options.to) {\n    throw new Error(\"Routed Messages must have options as the second parameter, and must at least include a .from and .to property.\");\n  }\n  // For each of these fields, if they are passed as an option,\n  // add them to the action. If they are not defined, remove them.\n  [\"from\", \"to\", \"toTarget\", \"fromTarget\", \"skipMain\", \"skipLocal\"].forEach(o => {\n    if (typeof options[o] !== \"undefined\") {\n      meta[o] = options[o];\n    } else if (meta[o]) {\n      delete meta[o];\n    }\n  });\n  return {...action, meta};\n}\n\n/**\n * AlsoToMain - Creates a message that will be dispatched locally and also sent to the Main process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {bool}   skipLocal Used by OnlyToMain to skip the main reducer\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToMain(action, fromTarget, skipLocal) {\n  return _RouteMessage(action, {\n    from: CONTENT_MESSAGE_TYPE,\n    to: MAIN_MESSAGE_TYPE,\n    fromTarget,\n    skipLocal\n  });\n}\n\n/**\n * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToMain(action, fromTarget) {\n  return AlsoToMain(action, fromTarget, true);\n}\n\n/**\n * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction BroadcastToContent(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE\n  });\n}\n\n/**\n * AlsoToOneContent - Creates a message that will be will be dispatched to the main store\n *                    and also sent to a particular Content process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @param  {bool} skipMain Used by OnlyToOneContent to skip the main process\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToOneContent(action, target, skipMain) {\n  if (!target) {\n    throw new Error(\"You must provide a target ID as the second parameter of AlsoToOneContent. If you want to send to all content processes, use BroadcastToContent\");\n  }\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE,\n    toTarget: target,\n    skipMain\n  });\n}\n\n/**\n * OnlyToOneContent - Creates a message that will be sent to a particular Content process\n *                    and skip the main reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToOneContent(action, target) {\n  return AlsoToOneContent(action, target, true);\n}\n\n/**\n * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToPreloaded(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: PRELOAD_MESSAGE_TYPE\n  });\n}\n\n/**\n * UserEvent - A telemetry ping indicating a user action. This should only\n *                   be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction UserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.TELEMETRY_USER_EVENT,\n    data\n  });\n}\n\n/**\n * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only\n *                     be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction ASRouterUserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,\n    data\n  });\n}\n\n/**\n * UndesiredEvent - A telemetry ping indicating an undesired state.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction UndesiredEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_UNDESIRED_EVENT,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * PerfEvent - A telemetry ping indicating a performance-related event.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction PerfEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_PERFORMANCE_EVENT,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * ImpressionStats - A telemetry ping indicating an impression stats.\n *\n * @param  {object} data Fields to include in the ping\n * @param  {int} importContext (For testing) Override the import context for testing.\n * #return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction ImpressionStats(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_IMPRESSION_STATS,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction SetPref(name, value, importContext = globalImportContext) {\n  const action = {type: actionTypes.SET_PREF, data: {name, value}};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction WebExtEvent(type, data, importContext = globalImportContext) {\n  if (!data || !data.source) {\n    throw new Error(\"WebExtEvent actions should include a property \\\"source\\\", the id of the webextension that should receive the event.\");\n  }\n  const action = {type, data};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nthis.actionTypes = actionTypes;\nthis.ASRouterActions = ASRouterActions;\n\nthis.actionCreators = {\n  BroadcastToContent,\n  UserEvent,\n  ASRouterUserEvent,\n  UndesiredEvent,\n  PerfEvent,\n  ImpressionStats,\n  AlsoToOneContent,\n  OnlyToOneContent,\n  AlsoToMain,\n  OnlyToMain,\n  AlsoToPreloaded,\n  SetPref,\n  WebExtEvent\n};\n\n// These are helpers to test for certain kinds of actions\nthis.actionUtils = {\n  isSendToMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === MAIN_MESSAGE_TYPE && action.meta.from === CONTENT_MESSAGE_TYPE;\n  },\n  isBroadcastToContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && !action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToOneContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToPreloaded(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === PRELOAD_MESSAGE_TYPE &&\n      action.meta.from === MAIN_MESSAGE_TYPE;\n  },\n  isFromMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.from === MAIN_MESSAGE_TYPE &&\n      action.meta.to === CONTENT_MESSAGE_TYPE;\n  },\n  getPortIdOfSender(action) {\n    return (action.meta && action.meta.fromTarget) || null;\n  },\n  _RouteMessage\n};\n\nconst EXPORTED_SYMBOLS = [\n  \"actionTypes\",\n  \"actionCreators\",\n  \"actionUtils\",\n  \"ASRouterActions\",\n  \"globalImportContext\",\n  \"UI_CODE\",\n  \"BACKGROUND_PROCESS\",\n  \"MAIN_MESSAGE_TYPE\",\n  \"CONTENT_MESSAGE_TYPE\",\n  \"PRELOAD_MESSAGE_TYPE\"\n];\n\n\n\n// WEBPACK FOOTER //\n// ./common/Actions.jsm","module.exports = ReactIntl;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ReactIntl\"\n// module id = 2\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 3\n// module chunks = 0","module.exports = ReactRedux;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ReactRedux\"\n// module id = 4\n// module chunks = 0","export function safeURI(url) {\n  if (!url) {\n    return \"\";\n  }\n  const {protocol} = new URL(url);\n  const isAllowed = [\n    \"http:\",\n    \"https:\",\n    \"data:\",\n    \"resource:\",\n    \"chrome:\"\n  ].includes(protocol);\n  if (!isAllowed) {\n    console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console\n  }\n  return isAllowed ? url : \"\";\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/asrouter/template-utils.js","export const TOP_SITES_SOURCE = \"TOP_SITES\";\nexport const TOP_SITES_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\",\n  \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\", \"DeleteUrl\"];\n// minimum size necessary to show a rich icon instead of a screenshot\nexport const MIN_RICH_FAVICON_SIZE = 96;\n// minimum size necessary to show any icon in the top left corner with a screenshot\nexport const MIN_CORNER_FAVICON_SIZE = 16;\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/TopSites/TopSitesConstants.js","this.Dedupe = class Dedupe {\n  constructor(createKey) {\n    this.createKey = createKey || this.defaultCreateKey;\n  }\n\n  defaultCreateKey(item) {\n    return item;\n  }\n\n  /**\n   * Dedupe any number of grouped elements favoring those from earlier groups.\n   *\n   * @param {Array} groups Contains an arbitrary number of arrays of elements.\n   * @returns {Array} A matching array of each provided group deduped.\n   */\n  group(...groups) {\n    const globalKeys = new Set();\n    const result = [];\n    for (const values of groups) {\n      const valueMap = new Map();\n      for (const value of values) {\n        const key = this.createKey(value);\n        if (!globalKeys.has(key) && !valueMap.has(key)) {\n          valueMap.set(key, value);\n        }\n      }\n      result.push(valueMap);\n      valueMap.forEach((value, key) => globalKeys.add(key));\n    }\n    return result.map(m => Array.from(m.values()));\n  }\n};\n\nconst EXPORTED_SYMBOLS = [\"Dedupe\"];\n\n\n\n// WEBPACK FOOTER //\n// ./common/Dedupe.jsm","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nconst {actionTypes: at} = ChromeUtils.import(\"resource://activity-stream/common/Actions.jsm\", {});\nconst {Dedupe} = ChromeUtils.import(\"resource://activity-stream/common/Dedupe.jsm\", {});\n\nconst TOP_SITES_DEFAULT_ROWS = 1;\nconst TOP_SITES_MAX_SITES_PER_ROW = 8;\n\nconst dedupe = new Dedupe(site => site && site.url);\n\nconst INITIAL_STATE = {\n  App: {\n    // Have we received real data from the app yet?\n    initialized: false,\n    // The version of the system-addon\n    version: null\n  },\n  Snippets: {initialized: false},\n  TopSites: {\n    // Have we received real data from history yet?\n    initialized: false,\n    // The history (and possibly default) links\n    rows: [],\n    // Used in content only to dispatch action to TopSiteForm.\n    editForm: null\n  },\n  Prefs: {\n    initialized: false,\n    values: {}\n  },\n  Dialog: {\n    visible: false,\n    data: {}\n  },\n  Sections: []\n};\n\nfunction App(prevState = INITIAL_STATE.App, action) {\n  switch (action.type) {\n    case at.INIT:\n      return Object.assign({}, prevState, action.data || {}, {initialized: true});\n    default:\n      return prevState;\n  }\n}\n\n/**\n * insertPinned - Inserts pinned links in their specified slots\n *\n * @param {array} a list of links\n * @param {array} a list of pinned links\n * @return {array} resulting list of links with pinned links inserted\n */\nfunction insertPinned(links, pinned) {\n  // Remove any pinned links\n  const pinnedUrls = pinned.map(link => link && link.url);\n  let newLinks = links.filter(link => (link ? !pinnedUrls.includes(link.url) : false));\n  newLinks = newLinks.map(link => {\n    if (link && link.isPinned) {\n      delete link.isPinned;\n      delete link.pinIndex;\n    }\n    return link;\n  });\n\n  // Then insert them in their specified location\n  pinned.forEach((val, index) => {\n    if (!val) { return; }\n    let link = Object.assign({}, val, {isPinned: true, pinIndex: index});\n    if (index > newLinks.length) {\n      newLinks[index] = link;\n    } else {\n      newLinks.splice(index, 0, link);\n    }\n  });\n\n  return newLinks;\n}\n\nfunction TopSites(prevState = INITIAL_STATE.TopSites, action) {\n  let hasMatch;\n  let newRows;\n  switch (action.type) {\n    case at.TOP_SITES_UPDATED:\n      if (!action.data || !action.data.links) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {initialized: true, rows: action.data.links}, action.data.pref ? {pref: action.data.pref} : {});\n    case at.TOP_SITES_PREFS_UPDATED:\n      return Object.assign({}, prevState, {pref: action.data.pref});\n    case at.TOP_SITES_EDIT:\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: action.data.index,\n          previewResponse: null\n        }\n      });\n    case at.TOP_SITES_CANCEL_EDIT:\n      return Object.assign({}, prevState, {editForm: null});\n    case at.PREVIEW_RESPONSE:\n      if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: action.data.preview,\n          previewUrl: action.data.url\n        }\n      });\n    case at.PREVIEW_REQUEST:\n      if (!prevState.editForm) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: null,\n          previewUrl: action.data.url\n        }\n      });\n    case at.PREVIEW_REQUEST_CANCEL:\n      if (!prevState.editForm) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: null\n        }\n      });\n    case at.SCREENSHOT_UPDATED:\n      newRows = prevState.rows.map(row => {\n        if (row && row.url === action.data.url) {\n          hasMatch = true;\n          return Object.assign({}, row, {screenshot: action.data.screenshot});\n        }\n        return row;\n      });\n      return hasMatch ? Object.assign({}, prevState, {rows: newRows}) : prevState;\n    case at.PLACES_BOOKMARK_ADDED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.map(site => {\n        if (site && site.url === action.data.url) {\n          const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n          return Object.assign({}, site, {bookmarkGuid, bookmarkTitle, bookmarkDateCreated: dateAdded});\n        }\n        return site;\n      });\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.PLACES_BOOKMARK_REMOVED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.map(site => {\n        if (site && site.url === action.data.url) {\n          const newSite = Object.assign({}, site);\n          delete newSite.bookmarkGuid;\n          delete newSite.bookmarkTitle;\n          delete newSite.bookmarkDateCreated;\n          return newSite;\n        }\n        return site;\n      });\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.PLACES_LINK_DELETED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.filter(site => action.data.url !== site.url);\n      return Object.assign({}, prevState, {rows: newRows});\n    default:\n      return prevState;\n  }\n}\n\nfunction Dialog(prevState = INITIAL_STATE.Dialog, action) {\n  switch (action.type) {\n    case at.DIALOG_OPEN:\n      return Object.assign({}, prevState, {visible: true, data: action.data});\n    case at.DIALOG_CANCEL:\n      return Object.assign({}, prevState, {visible: false});\n    case at.DELETE_HISTORY_URL:\n      return Object.assign({}, INITIAL_STATE.Dialog);\n    default:\n      return prevState;\n  }\n}\n\nfunction Prefs(prevState = INITIAL_STATE.Prefs, action) {\n  let newValues;\n  switch (action.type) {\n    case at.PREFS_INITIAL_VALUES:\n      return Object.assign({}, prevState, {initialized: true, values: action.data});\n    case at.PREF_CHANGED:\n      newValues = Object.assign({}, prevState.values);\n      newValues[action.data.name] = action.data.value;\n      return Object.assign({}, prevState, {values: newValues});\n    default:\n      return prevState;\n  }\n}\n\nfunction Sections(prevState = INITIAL_STATE.Sections, action) {\n  let hasMatch;\n  let newState;\n  switch (action.type) {\n    case at.SECTION_DEREGISTER:\n      return prevState.filter(section => section.id !== action.data);\n    case at.SECTION_REGISTER:\n      // If section exists in prevState, update it\n      newState = prevState.map(section => {\n        if (section && section.id === action.data.id) {\n          hasMatch = true;\n          return Object.assign({}, section, action.data);\n        }\n        return section;\n      });\n      // Otherwise, append it\n      if (!hasMatch) {\n        const initialized = !!(action.data.rows && action.data.rows.length > 0);\n        const section = Object.assign({title: \"\", rows: [], enabled: false}, action.data, {initialized});\n        newState.push(section);\n      }\n      return newState;\n    case at.SECTION_UPDATE:\n      newState = prevState.map(section => {\n        if (section && section.id === action.data.id) {\n          // If the action is updating rows, we should consider initialized to be true.\n          // This can be overridden if initialized is defined in the action.data\n          const initialized = action.data.rows ? {initialized: true} : {};\n\n          // Make sure pinned cards stay at their current position when rows are updated.\n          // Disabling a section (SECTION_UPDATE with empty rows) does not retain pinned cards.\n          if (action.data.rows && action.data.rows.length > 0 && section.rows.find(card => card.pinned)) {\n            const rows = Array.from(action.data.rows);\n            section.rows.forEach((card, index) => {\n              if (card.pinned) {\n                rows.splice(index, 0, card);\n              }\n            });\n            return Object.assign({}, section, initialized, Object.assign({}, action.data, {rows}));\n          }\n\n          return Object.assign({}, section, initialized, action.data);\n        }\n        return section;\n      });\n\n      if (!action.data.dedupeConfigurations) {\n        return newState;\n      }\n\n      action.data.dedupeConfigurations.forEach(dedupeConf => {\n        newState = newState.map(section => {\n          if (section.id === dedupeConf.id) {\n            const dedupedRows = dedupeConf.dedupeFrom.reduce((rows, dedupeSectionId) => {\n              const dedupeSection = newState.find(s => s.id === dedupeSectionId);\n              const [, newRows] = dedupe.group(dedupeSection.rows, rows);\n              return newRows;\n            }, section.rows);\n\n            return Object.assign({}, section, {rows: dedupedRows});\n          }\n\n          return section;\n        });\n      });\n\n      return newState;\n    case at.SECTION_UPDATE_CARD:\n      return prevState.map(section => {\n        if (section && section.id === action.data.id && section.rows) {\n          const newRows = section.rows.map(card => {\n            if (card.url === action.data.url) {\n              return Object.assign({}, card, action.data.options);\n            }\n            return card;\n          });\n          return Object.assign({}, section, {rows: newRows});\n        }\n        return section;\n      });\n    case at.PLACES_BOOKMARK_ADDED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          // find the item within the rows that is attempted to be bookmarked\n          if (item.url === action.data.url) {\n            const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n            return Object.assign({}, item, {\n              bookmarkGuid,\n              bookmarkTitle,\n              bookmarkDateCreated: dateAdded,\n              type: \"bookmark\"\n            });\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_SAVED_TO_POCKET:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          if (item.url === action.data.url) {\n            return Object.assign({}, item, {\n              open_url: action.data.open_url,\n              pocket_id: action.data.pocket_id,\n              title: action.data.title,\n              type: \"pocket\"\n            });\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_BOOKMARK_REMOVED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          // find the bookmark within the rows that is attempted to be removed\n          if (item.url === action.data.url) {\n            const newSite = Object.assign({}, item);\n            delete newSite.bookmarkGuid;\n            delete newSite.bookmarkTitle;\n            delete newSite.bookmarkDateCreated;\n            if (!newSite.type || newSite.type === \"bookmark\") {\n              newSite.type = \"history\";\n            }\n            return newSite;\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_LINK_DELETED:\n    case at.PLACES_LINK_BLOCKED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section =>\n        Object.assign({}, section, {rows: section.rows.filter(site => site.url !== action.data.url)}));\n    case at.DELETE_FROM_POCKET:\n    case at.ARCHIVE_FROM_POCKET:\n      return prevState.map(section =>\n        Object.assign({}, section, {rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id)}));\n    default:\n      return prevState;\n  }\n}\n\nfunction Snippets(prevState = INITIAL_STATE.Snippets, action) {\n  switch (action.type) {\n    case at.SNIPPETS_DATA:\n      return Object.assign({}, prevState, {initialized: true}, action.data);\n    case at.SNIPPET_BLOCKED:\n      return Object.assign({}, prevState, {blockList: prevState.blockList.concat(action.data)});\n    case at.SNIPPETS_BLOCKLIST_CLEARED:\n      return Object.assign({}, prevState, {blockList: []});\n    case at.SNIPPETS_RESET:\n      return INITIAL_STATE.Snippets;\n    default:\n      return prevState;\n  }\n}\n\nthis.INITIAL_STATE = INITIAL_STATE;\nthis.TOP_SITES_DEFAULT_ROWS = TOP_SITES_DEFAULT_ROWS;\nthis.TOP_SITES_MAX_SITES_PER_ROW = TOP_SITES_MAX_SITES_PER_ROW;\n\nthis.reducers = {TopSites, App, Snippets, Prefs, Dialog, Sections};\n\nconst EXPORTED_SYMBOLS = [\"reducers\", \"INITIAL_STATE\", \"insertPinned\", \"TOP_SITES_DEFAULT_ROWS\", \"TOP_SITES_MAX_SITES_PER_ROW\"];\n\n\n\n// WEBPACK FOOTER //\n// ./common/Reducers.jsm","import {actionCreators as ac, ASRouterActions as ra} from \"common/Actions.jsm\";\nimport {LocalizationProvider, Localized} from \"fluent-react\";\nimport {OUTGOING_MESSAGE_NAME as AS_GENERAL_OUTGOING_MESSAGE_NAME} from \"content-src/lib/init-store\";\nimport {ImpressionsWrapper} from \"./components/ImpressionsWrapper/ImpressionsWrapper\";\nimport {MessageContext} from \"fluent\";\nimport {OnboardingMessage} from \"./templates/OnboardingMessage/OnboardingMessage\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {safeURI} from \"./template-utils\";\nimport {SimpleSnippet} from \"./templates/SimpleSnippet/SimpleSnippet\";\n\nconst INCOMING_MESSAGE_NAME = \"ASRouter:parent-to-child\";\nconst OUTGOING_MESSAGE_NAME = \"ASRouter:child-to-parent\";\n\nexport const ASRouterUtils = {\n  addListener(listener) {\n    global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  removeListener(listener) {\n    global.RPMRemoveMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  sendMessage(action) {\n    global.RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  },\n  blockById(id) {\n    ASRouterUtils.sendMessage({type: \"BLOCK_MESSAGE_BY_ID\", data: {id}});\n  },\n  blockBundle(bundle) {\n    ASRouterUtils.sendMessage({type: \"BLOCK_BUNDLE\", data: {bundle}});\n  },\n  executeAction({button_action, button_action_params}) {\n    if (button_action in ra) {\n      ASRouterUtils.sendMessage({type: button_action, data: {button_action_params}});\n    }\n  },\n  unblockById(id) {\n    ASRouterUtils.sendMessage({type: \"UNBLOCK_MESSAGE_BY_ID\", data: {id}});\n  },\n  unblockBundle(bundle) {\n    ASRouterUtils.sendMessage({type: \"UNBLOCK_BUNDLE\", data: {bundle}});\n  },\n  getNextMessage() {\n    ASRouterUtils.sendMessage({type: \"GET_NEXT_MESSAGE\"});\n  },\n  overrideMessage(id) {\n    ASRouterUtils.sendMessage({type: \"OVERRIDE_MESSAGE\", data: {id}});\n  },\n  sendTelemetry(ping) {\n    const payload = ac.ASRouterUserEvent(ping);\n    global.RPMSendAsyncMessage(AS_GENERAL_OUTGOING_MESSAGE_NAME, payload);\n  },\n  getEndpoint() {\n    if (window.location.href.includes(\"endpoint\")) {\n      const params = new URLSearchParams(window.location.href.slice(window.location.href.indexOf(\"endpoint\")));\n      try {\n        const endpoint = new URL(params.get(\"endpoint\"));\n        return {\n          url: endpoint.href,\n          snippetId: params.get(\"snippetId\")\n        };\n      } catch (e) {}\n    }\n\n    return null;\n  }\n};\n\n// Note: nextProps/prevProps refer to props passed to <ImpressionsWrapper />, not <ASRouterUISurface />\nfunction shouldSendImpressionOnUpdate(nextProps, prevProps) {\n  return (nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id));\n}\n\nfunction generateMessages(content) {\n  const cx = new MessageContext(\"en-US\");\n  cx.addMessages(`RichTextSnippet = ${content}`);\n  return [cx];\n}\n\n// Elements allowed in snippet content\nconst ALLOWED_TAGS = {\n  b: <b />,\n  i: <i />,\n  u: <u />,\n  strong: <strong />,\n  em: <em />,\n  br: <br />\n};\n\n/**\n * Transform an object (tag name: {url}) into (tag name: anchor) where the url\n * is used as href, in order to render links inside a Fluent.Localized component.\n */\nexport function convertLinks(links, sendClick) {\n  if (links) {\n    return Object.keys(links).reduce((acc, linkTag) => {\n      acc[linkTag] = <a href={safeURI(links[linkTag].url)} data-metric={links[linkTag].metric} onClick={sendClick} />;\n      return acc;\n    }, {});\n  }\n\n  return null;\n}\n\n/**\n * Message wrapper used to sanitize markup and render HTML.\n */\nfunction RichText(props) {\n  return (\n    <Localized id=\"RichTextSnippet\" {...ALLOWED_TAGS} {...convertLinks(props.links, props.sendClick)}>\n      <span>{props.text}</span>\n    </Localized>\n  );\n}\n\nexport class ASRouterUISurface extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessageFromParent = this.onMessageFromParent.bind(this);\n    this.sendClick = this.sendClick.bind(this);\n    this.sendImpression = this.sendImpression.bind(this);\n    this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);\n    this.state = {message: {}, bundle: {}};\n  }\n\n  sendUserActionTelemetry(extraProps = {}) {\n    const {message, bundle} = this.state;\n    if (!message && !extraProps.message_id) {\n      throw new Error(`You must provide a message_id for bundled messages`);\n    }\n    const eventType = `${message.provider || bundle.provider}_user_event`;\n    ASRouterUtils.sendTelemetry({\n      message_id: message.id || extraProps.message_id,\n      source: extraProps.id,\n      action: eventType,\n      ...extraProps\n    });\n  }\n\n  sendImpression(extraProps) {\n    this.sendUserActionTelemetry({event: \"IMPRESSION\", ...extraProps});\n  }\n\n  // If link has a `metric` data attribute send it as part of the `value`\n  // telemetry field which can have arbitrary values.\n  // Used for router messages with links as part of the content.\n  sendClick(event) {\n    const metric = {\n      value: event.target.dataset.metric,\n      // Used for the `source` of the event. Needed to differentiate\n      // from other snippet or onboarding events that may occur.\n      id: \"NEWTAB_FOOTER_BAR_CONTENT\"\n    };\n    this.sendUserActionTelemetry({event: \"CLICK_BUTTON\", ...metric});\n  }\n\n  onBlockById(id) {\n    return () => ASRouterUtils.blockById(id);\n  }\n\n  clearBundle(bundle) {\n    return () => ASRouterUtils.blockBundle(bundle);\n  }\n\n  onMessageFromParent({data: action}) {\n    switch (action.type) {\n      case \"SET_MESSAGE\":\n        this.setState({message: action.data});\n        break;\n      case \"SET_BUNDLED_MESSAGES\":\n        this.setState({bundle: action.data});\n        break;\n      case \"CLEAR_MESSAGE\":\n        if (action.data.id === this.state.message.id) {\n          this.setState({message: {}});\n        }\n        break;\n      case \"CLEAR_BUNDLE\":\n        if (this.state.bundle.bundle) {\n          this.setState({bundle: {}});\n        }\n        break;\n      case \"CLEAR_ALL\":\n        this.setState({message: {}, bundle: {}});\n    }\n  }\n\n  componentWillMount() {\n    const endpoint = ASRouterUtils.getEndpoint();\n    ASRouterUtils.addListener(this.onMessageFromParent);\n\n    // If we are loading about:welcome we want to trigger the onboarding messages\n    if (this.props.document.location.href === \"about:welcome\") {\n      ASRouterUtils.sendMessage({type: \"TRIGGER\", data: {trigger: \"firstRun\"}});\n    } else {\n      ASRouterUtils.sendMessage({type: \"CONNECT_UI_REQUEST\", data: {endpoint}});\n    }\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessageFromParent);\n  }\n\n  renderSnippets() {\n    return (\n      <ImpressionsWrapper\n        id=\"NEWTAB_FOOTER_BAR\"\n        message={this.state.message}\n        sendImpression={this.sendImpression}\n        shouldSendImpressionOnUpdate={shouldSendImpressionOnUpdate}\n        // This helps with testing\n        document={this.props.document}>\n          <LocalizationProvider messages={generateMessages(this.state.message.content.text)}>\n            <SimpleSnippet\n              {...this.state.message}\n              richText={<RichText text={this.state.message.content.text}\n                                  links={this.state.message.content.links}\n                                  sendClick={this.sendClick} />}\n              UISurface=\"NEWTAB_FOOTER_BAR\"\n              getNextMessage={ASRouterUtils.getNextMessage}\n              onBlock={this.onBlockById(this.state.message.id)}\n              sendUserActionTelemetry={this.sendUserActionTelemetry} />\n          </LocalizationProvider>\n      </ImpressionsWrapper>);\n  }\n\n  renderOnboarding() {\n    return (\n      <OnboardingMessage\n        {...this.state.bundle}\n        UISurface=\"NEWTAB_OVERLAY\"\n        onAction={ASRouterUtils.executeAction}\n        onDoneButton={this.clearBundle(this.state.bundle.bundle)}\n        getNextMessage={ASRouterUtils.getNextMessage}\n        sendUserActionTelemetry={this.sendUserActionTelemetry} />);\n  }\n\n  render() {\n    const {message, bundle} = this.state;\n    if (!message.id && !bundle.template) { return null; }\n    if (bundle.template === \"onboarding\") { return this.renderOnboarding(); }\n    return this.renderSnippets();\n  }\n}\n\nASRouterUISurface.defaultProps = {document: global.document};\n\nexport class ASRouterContent {\n  constructor() {\n    this.initialized = false;\n    this.containerElement = null;\n  }\n\n  _mount() {\n    this.containerElement = global.document.getElementById(\"snippets-container\");\n    ReactDOM.render(<ASRouterUISurface />, this.containerElement);\n  }\n\n  _unmount() {\n    ReactDOM.unmountComponentAtNode(this.containerElement);\n  }\n\n  init() {\n    this._mount();\n    this.initialized = true;\n  }\n\n  uninit() {\n    if (this.initialized) {\n      this._unmount();\n      this.initialized = false;\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/asrouter/asrouter-content.jsx","module.exports = PropTypes;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"PropTypes\"\n// module id = 9\n// module chunks = 0","/*  eslint no-magic-numbers: [0]  */\n\nconst MAX_PLACEABLES = 100;\n\nconst entryIdentifierRe = /-?[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst identifierRe = /[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst functionIdentifierRe = /^[A-Z][A-Z_?-]*$/;\n\n/**\n * The `Parser` class is responsible for parsing FTL resources.\n *\n * It's only public method is `getResource(source)` which takes an FTL string\n * and returns a two element Array with an Object of entries generated from the\n * source as the first element and an array of SyntaxError objects as the\n * second.\n *\n * This parser is optimized for runtime performance.\n *\n * There is an equivalent of this parser in syntax/parser which is\n * generating full AST which is useful for FTL tools.\n */\nclass RuntimeParser {\n  /**\n   * Parse FTL code into entries formattable by the MessageContext.\n   *\n   * Given a string of FTL syntax, return a map of entries that can be passed\n   * to MessageContext.format and a list of errors encountered during parsing.\n   *\n   * @param {String} string\n   * @returns {Array<Object, Array>}\n   */\n  getResource(string) {\n    this._source = string;\n    this._index = 0;\n    this._length = string.length;\n    this.entries = {};\n\n    const errors = [];\n\n    this.skipWS();\n    while (this._index < this._length) {\n      try {\n        this.getEntry();\n      } catch (e) {\n        if (e instanceof SyntaxError) {\n          errors.push(e);\n\n          this.skipToNextEntryStart();\n        } else {\n          throw e;\n        }\n      }\n      this.skipWS();\n    }\n\n    return [this.entries, errors];\n  }\n\n  /**\n   * Parse the source string from the current index as an FTL entry\n   * and add it to object's entries property.\n   *\n   * @private\n   */\n  getEntry() {\n    // The index here should either be at the beginning of the file\n    // or right after new line.\n    if (this._index !== 0 &&\n        this._source[this._index - 1] !== \"\\n\") {\n      throw this.error(`Expected an entry to start\n        at the beginning of the file or on a new line.`);\n    }\n\n    const ch = this._source[this._index];\n\n    // We don't care about comments or sections at runtime\n    if (ch === \"/\" ||\n      (ch === \"#\" &&\n        [\" \", \"#\", \"\\n\"].includes(this._source[this._index + 1]))) {\n      this.skipComment();\n      return;\n    }\n\n    if (ch === \"[\") {\n      this.skipSection();\n      return;\n    }\n\n    this.getMessage();\n  }\n\n  /**\n   * Skip the section entry from the current index.\n   *\n   * @private\n   */\n  skipSection() {\n    this._index += 1;\n    if (this._source[this._index] !== \"[\") {\n      throw this.error('Expected \"[[\" to open a section');\n    }\n\n    this._index += 1;\n\n    this.skipInlineWS();\n    this.getVariantName();\n    this.skipInlineWS();\n\n    if (this._source[this._index] !== \"]\" ||\n        this._source[this._index + 1] !== \"]\") {\n      throw this.error('Expected \"]]\" to close a section');\n    }\n\n    this._index += 2;\n  }\n\n  /**\n   * Parse the source string from the current index as an FTL message\n   * and add it to the entries property on the Parser.\n   *\n   * @private\n   */\n  getMessage() {\n    const id = this.getEntryIdentifier();\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] === \"=\") {\n      this._index++;\n    }\n\n    this.skipInlineWS();\n\n    const val = this.getPattern();\n\n    if (id.startsWith(\"-\") && val === null) {\n      throw this.error(\"Expected term to have a value\");\n    }\n\n    let attrs = null;\n\n    if (this._source[this._index] === \" \") {\n      const lineStart = this._index;\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \".\") {\n        this._index = lineStart;\n        attrs = this.getAttributes();\n      }\n    }\n\n    if (attrs === null && typeof val === \"string\") {\n      this.entries[id] = val;\n    } else {\n      if (val === null && attrs === null) {\n        throw this.error(\"Expected message to have a value or attributes\");\n      }\n\n      this.entries[id] = {};\n\n      if (val !== null) {\n        this.entries[id].val = val;\n      }\n\n      if (attrs !== null) {\n        this.entries[id].attrs = attrs;\n      }\n    }\n  }\n\n  /**\n   * Skip whitespace.\n   *\n   * @private\n   */\n  skipWS() {\n    let ch = this._source[this._index];\n    while (ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\") {\n      ch = this._source[++this._index];\n    }\n  }\n\n  /**\n   * Skip inline whitespace (space and \\t).\n   *\n   * @private\n   */\n  skipInlineWS() {\n    let ch = this._source[this._index];\n    while (ch === \" \" || ch === \"\\t\") {\n      ch = this._source[++this._index];\n    }\n  }\n\n  /**\n   * Skip blank lines.\n   *\n   * @private\n   */\n  skipBlankLines() {\n    while (true) {\n      const ptr = this._index;\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \"\\n\") {\n        this._index += 1;\n      } else {\n        this._index = ptr;\n        break;\n      }\n    }\n  }\n\n  /**\n   * Get identifier using the provided regex.\n   *\n   * By default this will get identifiers of public messages, attributes and\n   * external arguments (without the $).\n   *\n   * @returns {String}\n   * @private\n   */\n  getIdentifier(re = identifierRe) {\n    re.lastIndex = this._index;\n    const result = re.exec(this._source);\n\n    if (result === null) {\n      this._index += 1;\n      throw this.error(`Expected an identifier [${re.toString()}]`);\n    }\n\n    this._index = re.lastIndex;\n    return result[0];\n  }\n\n  /**\n   * Get identifier of a Message or a Term (staring with a dash).\n   *\n   * @returns {String}\n   * @private\n   */\n  getEntryIdentifier() {\n    return this.getIdentifier(entryIdentifierRe);\n  }\n\n  /**\n   * Get Variant name.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getVariantName() {\n    let name = \"\";\n\n    const start = this._index;\n    let cc = this._source.charCodeAt(this._index);\n\n    if ((cc >= 97 && cc <= 122) || // a-z\n        (cc >= 65 && cc <= 90) || // A-Z\n        cc === 95 || cc === 32) { // _ <space>\n      cc = this._source.charCodeAt(++this._index);\n    } else {\n      throw this.error(\"Expected a keyword (starting with [a-zA-Z_])\");\n    }\n\n    while ((cc >= 97 && cc <= 122) || // a-z\n           (cc >= 65 && cc <= 90) || // A-Z\n           (cc >= 48 && cc <= 57) || // 0-9\n           cc === 95 || cc === 45 || cc === 32) { // _- <space>\n      cc = this._source.charCodeAt(++this._index);\n    }\n\n    // If we encountered the end of name, we want to test if the last\n    // collected character is a space.\n    // If it is, we will backtrack to the last non-space character because\n    // the keyword cannot end with a space character.\n    while (this._source.charCodeAt(this._index - 1) === 32) {\n      this._index--;\n    }\n\n    name += this._source.slice(start, this._index);\n\n    return { type: \"varname\", name };\n  }\n\n  /**\n   * Get simple string argument enclosed in `\"`.\n   *\n   * @returns {String}\n   * @private\n   */\n  getString() {\n    const start = this._index + 1;\n\n    while (++this._index < this._length) {\n      const ch = this._source[this._index];\n\n      if (ch === '\"') {\n        break;\n      }\n\n      if (ch === \"\\n\") {\n        throw this.error(\"Unterminated string expression\");\n      }\n    }\n\n    return this._source.substring(start, this._index++);\n  }\n\n  /**\n   * Parses a Message pattern.\n   * Message Pattern may be a simple string or an array of strings\n   * and placeable expressions.\n   *\n   * @returns {String|Array}\n   * @private\n   */\n  getPattern() {\n    // We're going to first try to see if the pattern is simple.\n    // If it is we can just look for the end of the line and read the string.\n    //\n    // Then, if either the line contains a placeable opening `{` or the\n    // next line starts an indentation, we switch to complex pattern.\n    const start = this._index;\n    let eol = this._source.indexOf(\"\\n\", this._index);\n\n    if (eol === -1) {\n      eol = this._length;\n    }\n\n    const firstLineContent = start !== eol ?\n      this._source.slice(start, eol) : null;\n\n    if (firstLineContent && firstLineContent.includes(\"{\")) {\n      return this.getComplexPattern();\n    }\n\n    this._index = eol + 1;\n\n    this.skipBlankLines();\n\n    if (this._source[this._index] !== \" \") {\n      // No indentation means we're done with this message. Callers should check\n      // if the return value here is null. It may be OK for messages, but not OK\n      // for terms, attributes and variants.\n      return firstLineContent;\n    }\n\n    const lineStart = this._index;\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] === \".\") {\n      // The pattern is followed by an attribute. Rewind _index to the first\n      // column of the current line as expected by getAttributes.\n      this._index = lineStart;\n      return firstLineContent;\n    }\n\n    if (firstLineContent) {\n      // It's a multiline pattern which started on the same line as the\n      // identifier. Reparse the whole pattern to make sure we get all of it.\n      this._index = start;\n    }\n\n    return this.getComplexPattern();\n  }\n\n  /**\n   * Parses a complex Message pattern.\n   * This function is called by getPattern when the message is multiline,\n   * or contains escape chars or placeables.\n   * It does full parsing of complex patterns.\n   *\n   * @returns {Array}\n   * @private\n   */\n  /* eslint-disable complexity */\n  getComplexPattern() {\n    let buffer = \"\";\n    const content = [];\n    let placeables = 0;\n\n    let ch = this._source[this._index];\n\n    while (this._index < this._length) {\n      // This block handles multi-line strings combining strings separated\n      // by new line.\n      if (ch === \"\\n\") {\n        this._index++;\n\n        // We want to capture the start and end pointers\n        // around blank lines and add them to the buffer\n        // but only if the blank lines are in the middle\n        // of the string.\n        const blankLinesStart = this._index;\n        this.skipBlankLines();\n        const blankLinesEnd = this._index;\n\n\n        if (this._source[this._index] !== \" \") {\n          break;\n        }\n        this.skipInlineWS();\n\n        if (this._source[this._index] === \"}\" ||\n            this._source[this._index] === \"[\" ||\n            this._source[this._index] === \"*\" ||\n            this._source[this._index] === \".\") {\n          this._index = blankLinesEnd;\n          break;\n        }\n\n        buffer += this._source.substring(blankLinesStart, blankLinesEnd);\n\n        if (buffer.length || content.length) {\n          buffer += \"\\n\";\n        }\n        ch = this._source[this._index];\n        continue;\n      } else if (ch === \"\\\\\") {\n        const ch2 = this._source[this._index + 1];\n        if (ch2 === '\"' || ch2 === \"{\" || ch2 === \"\\\\\") {\n          ch = ch2;\n          this._index++;\n        }\n      } else if (ch === \"{\") {\n        // Push the buffer to content array right before placeable\n        if (buffer.length) {\n          content.push(buffer);\n        }\n        if (placeables > MAX_PLACEABLES - 1) {\n          throw this.error(\n            `Too many placeables, maximum allowed is ${MAX_PLACEABLES}`);\n        }\n        buffer = \"\";\n        content.push(this.getPlaceable());\n\n        this._index++;\n\n        ch = this._source[this._index];\n        placeables++;\n        continue;\n      }\n\n      if (ch) {\n        buffer += ch;\n      }\n      this._index++;\n      ch = this._source[this._index];\n    }\n\n    if (content.length === 0) {\n      return buffer.length ? buffer : null;\n    }\n\n    if (buffer.length) {\n      content.push(buffer);\n    }\n\n    return content;\n  }\n  /* eslint-enable complexity */\n\n  /**\n   * Parses a single placeable in a Message pattern and returns its\n   * expression.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getPlaceable() {\n    const start = ++this._index;\n\n    this.skipWS();\n\n    if (this._source[this._index] === \"*\" ||\n       (this._source[this._index] === \"[\" &&\n        this._source[this._index + 1] !== \"]\")) {\n      const variants = this.getVariants();\n\n      return {\n        type: \"sel\",\n        exp: null,\n        vars: variants[0],\n        def: variants[1]\n      };\n    }\n\n    // Rewind the index and only support in-line white-space now.\n    this._index = start;\n    this.skipInlineWS();\n\n    const selector = this.getSelectorExpression();\n\n    this.skipWS();\n\n    const ch = this._source[this._index];\n\n    if (ch === \"}\") {\n      if (selector.type === \"attr\" && selector.id.name.startsWith(\"-\")) {\n        throw this.error(\n          \"Attributes of private messages cannot be interpolated.\"\n        );\n      }\n\n      return selector;\n    }\n\n    if (ch !== \"-\" || this._source[this._index + 1] !== \">\") {\n      throw this.error('Expected \"}\" or \"->\"');\n    }\n\n    if (selector.type === \"ref\") {\n      throw this.error(\"Message references cannot be used as selectors.\");\n    }\n\n    if (selector.type === \"var\") {\n      throw this.error(\"Variants cannot be used as selectors.\");\n    }\n\n    if (selector.type === \"attr\" && !selector.id.name.startsWith(\"-\")) {\n      throw this.error(\n        \"Attributes of public messages cannot be used as selectors.\"\n      );\n    }\n\n\n    this._index += 2; // ->\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] !== \"\\n\") {\n      throw this.error(\"Variants should be listed in a new line\");\n    }\n\n    this.skipWS();\n\n    const variants = this.getVariants();\n\n    if (variants[0].length === 0) {\n      throw this.error(\"Expected members for the select expression\");\n    }\n\n    return {\n      type: \"sel\",\n      exp: selector,\n      vars: variants[0],\n      def: variants[1]\n    };\n  }\n\n  /**\n   * Parses a selector expression.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getSelectorExpression() {\n    const literal = this.getLiteral();\n\n    if (literal.type !== \"ref\") {\n      return literal;\n    }\n\n    if (this._source[this._index] === \".\") {\n      this._index++;\n\n      const name = this.getIdentifier();\n      this._index++;\n      return {\n        type: \"attr\",\n        id: literal,\n        name\n      };\n    }\n\n    if (this._source[this._index] === \"[\") {\n      this._index++;\n\n      const key = this.getVariantKey();\n      this._index++;\n      return {\n        type: \"var\",\n        id: literal,\n        key\n      };\n    }\n\n    if (this._source[this._index] === \"(\") {\n      this._index++;\n      const args = this.getCallArgs();\n\n      if (!functionIdentifierRe.test(literal.name)) {\n        throw this.error(\"Function names must be all upper-case\");\n      }\n\n      this._index++;\n\n      literal.type = \"fun\";\n\n      return {\n        type: \"call\",\n        fun: literal,\n        args\n      };\n    }\n\n    return literal;\n  }\n\n  /**\n   * Parses call arguments for a CallExpression.\n   *\n   * @returns {Array}\n   * @private\n   */\n  getCallArgs() {\n    const args = [];\n\n    while (this._index < this._length) {\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \")\") {\n        return args;\n      }\n\n      const exp = this.getSelectorExpression();\n\n      // MessageReference in this place may be an entity reference, like:\n      // `call(foo)`, or, if it's followed by `:` it will be a key-value pair.\n      if (exp.type !== \"ref\") {\n        args.push(exp);\n      } else {\n        this.skipInlineWS();\n\n        if (this._source[this._index] === \":\") {\n          this._index++;\n          this.skipInlineWS();\n\n          const val = this.getSelectorExpression();\n\n          // If the expression returned as a value of the argument\n          // is not a quote delimited string or number, throw.\n          //\n          // We don't have to check here if the pattern is quote delimited\n          // because that's the only type of string allowed in expressions.\n          if (typeof val === \"string\" ||\n              Array.isArray(val) ||\n              val.type === \"num\") {\n            args.push({\n              type: \"narg\",\n              name: exp.name,\n              val\n            });\n          } else {\n            this._index = this._source.lastIndexOf(\":\", this._index) + 1;\n            throw this.error(\n              \"Expected string in quotes, number.\");\n          }\n\n        } else {\n          args.push(exp);\n        }\n      }\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \")\") {\n        break;\n      } else if (this._source[this._index] === \",\") {\n        this._index++;\n      } else {\n        throw this.error('Expected \",\" or \")\"');\n      }\n    }\n\n    return args;\n  }\n\n  /**\n   * Parses an FTL Number.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getNumber() {\n    let num = \"\";\n    let cc = this._source.charCodeAt(this._index);\n\n    // The number literal may start with negative sign `-`.\n    if (cc === 45) {\n      num += \"-\";\n      cc = this._source.charCodeAt(++this._index);\n    }\n\n    // next, we expect at least one digit\n    if (cc < 48 || cc > 57) {\n      throw this.error(`Unknown literal \"${num}\"`);\n    }\n\n    // followed by potentially more digits\n    while (cc >= 48 && cc <= 57) {\n      num += this._source[this._index++];\n      cc = this._source.charCodeAt(this._index);\n    }\n\n    // followed by an optional decimal separator `.`\n    if (cc === 46) {\n      num += this._source[this._index++];\n      cc = this._source.charCodeAt(this._index);\n\n      // followed by at least one digit\n      if (cc < 48 || cc > 57) {\n        throw this.error(`Unknown literal \"${num}\"`);\n      }\n\n      // and optionally more digits\n      while (cc >= 48 && cc <= 57) {\n        num += this._source[this._index++];\n        cc = this._source.charCodeAt(this._index);\n      }\n    }\n\n    return {\n      type: \"num\",\n      val: num\n    };\n  }\n\n  /**\n   * Parses a list of Message attributes.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getAttributes() {\n    const attrs = {};\n\n    while (this._index < this._length) {\n      if (this._source[this._index] !== \" \") {\n        break;\n      }\n      this.skipInlineWS();\n\n      if (this._source[this._index] !== \".\") {\n        break;\n      }\n      this._index++;\n\n      const key = this.getIdentifier();\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] !== \"=\") {\n        throw this.error('Expected \"=\"');\n      }\n      this._index++;\n\n      this.skipInlineWS();\n\n      const val = this.getPattern();\n\n      if (val === null) {\n        throw this.error(\"Expected attribute to have a value\");\n      }\n\n      if (typeof val === \"string\") {\n        attrs[key] = val;\n      } else {\n        attrs[key] = {\n          val\n        };\n      }\n\n      this.skipBlankLines();\n    }\n\n    return attrs;\n  }\n\n  /**\n   * Parses a list of Selector variants.\n   *\n   * @returns {Array}\n   * @private\n   */\n  getVariants() {\n    const variants = [];\n    let index = 0;\n    let defaultIndex;\n\n    while (this._index < this._length) {\n      const ch = this._source[this._index];\n\n      if ((ch !== \"[\" || this._source[this._index + 1] === \"[\") &&\n          ch !== \"*\") {\n        break;\n      }\n      if (ch === \"*\") {\n        this._index++;\n        defaultIndex = index;\n      }\n\n      if (this._source[this._index] !== \"[\") {\n        throw this.error('Expected \"[\"');\n      }\n\n      this._index++;\n\n      const key = this.getVariantKey();\n\n      this.skipInlineWS();\n\n      const val = this.getPattern();\n\n      if (val === null) {\n        throw this.error(\"Expected variant to have a value\");\n      }\n\n      variants[index++] = {key, val};\n\n      this.skipWS();\n    }\n\n    return [variants, defaultIndex];\n  }\n\n  /**\n   * Parses a Variant key.\n   *\n   * @returns {String}\n   * @private\n   */\n  getVariantKey() {\n    // VariantKey may be a Keyword or Number\n\n    const cc = this._source.charCodeAt(this._index);\n    let literal;\n\n    if ((cc >= 48 && cc <= 57) || cc === 45) {\n      literal = this.getNumber();\n    } else {\n      literal = this.getVariantName();\n    }\n\n    if (this._source[this._index] !== \"]\") {\n      throw this.error('Expected \"]\"');\n    }\n\n    this._index++;\n    return literal;\n  }\n\n  /**\n   * Parses an FTL literal.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getLiteral() {\n    const cc0 = this._source.charCodeAt(this._index);\n\n    if (cc0 === 36) { // $\n      this._index++;\n      return {\n        type: \"ext\",\n        name: this.getIdentifier()\n      };\n    }\n\n    const cc1 = cc0 === 45 // -\n      // Peek at the next character after the dash.\n      ? this._source.charCodeAt(this._index + 1)\n      // Or keep using the character at the current index.\n      : cc0;\n\n    if ((cc1 >= 97 && cc1 <= 122) || // a-z\n        (cc1 >= 65 && cc1 <= 90)) { // A-Z\n      return {\n        type: \"ref\",\n        name: this.getEntryIdentifier()\n      };\n    }\n\n    if ((cc1 >= 48 && cc1 <= 57)) { // 0-9\n      return this.getNumber();\n    }\n\n    if (cc0 === 34) { // \"\n      return this.getString();\n    }\n\n    throw this.error(\"Expected literal\");\n  }\n\n  /**\n   * Skips an FTL comment.\n   *\n   * @private\n   */\n  skipComment() {\n    // At runtime, we don't care about comments so we just have\n    // to parse them properly and skip their content.\n    let eol = this._source.indexOf(\"\\n\", this._index);\n\n    while (eol !== -1 &&\n      ((this._source[eol + 1] === \"/\" && this._source[eol + 2] === \"/\") ||\n       (this._source[eol + 1] === \"#\" &&\n         [\" \", \"#\"].includes(this._source[eol + 2])))) {\n      this._index = eol + 3;\n\n      eol = this._source.indexOf(\"\\n\", this._index);\n\n      if (eol === -1) {\n        break;\n      }\n    }\n\n    if (eol === -1) {\n      this._index = this._length;\n    } else {\n      this._index = eol + 1;\n    }\n  }\n\n  /**\n   * Creates a new SyntaxError object with a given message.\n   *\n   * @param {String} message\n   * @returns {Object}\n   * @private\n   */\n  error(message) {\n    return new SyntaxError(message);\n  }\n\n  /**\n   * Skips to the beginning of a next entry after the current position.\n   * This is used to mark the boundary of junk entry in case of error,\n   * and recover from the returned position.\n   *\n   * @private\n   */\n  skipToNextEntryStart() {\n    let start = this._index;\n\n    while (true) {\n      if (start === 0 || this._source[start - 1] === \"\\n\") {\n        const cc = this._source.charCodeAt(start);\n\n        if ((cc >= 97 && cc <= 122) || // a-z\n            (cc >= 65 && cc <= 90) || // A-Z\n             cc === 47 || cc === 91) { // /[\n          this._index = start;\n          return;\n        }\n      }\n\n      start = this._source.indexOf(\"\\n\", start);\n\n      if (start === -1) {\n        this._index = this._length;\n        return;\n      }\n      start++;\n    }\n  }\n}\n\n/**\n * Parses an FTL string using RuntimeParser and returns the generated\n * object with entries and a list of errors.\n *\n * @param {String} string\n * @returns {Array<Object, Array>}\n */\nexport default function parse(string) {\n  const parser = new RuntimeParser();\n  return parser.getResource(string);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent/src/parser.js","/* global Intl */\n\n/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n\n  /**\n   * Create an `FluentType` instance.\n   *\n   * @param   {Any}    value - JavaScript value to wrap.\n   * @param   {Object} opts  - Configuration.\n   * @returns {FluentType}\n   */\n  constructor(value, opts) {\n    this.value = value;\n    this.opts = opts;\n  }\n\n  /**\n   * Unwrap the raw value stored by this `FluentType`.\n   *\n   * @returns {Any}\n   */\n  valueOf() {\n    return this.value;\n  }\n\n  /**\n   * Format this instance of `FluentType` to a string.\n   *\n   * Formatted values are suitable for use outside of the `MessageContext`.\n   * This method can use `Intl` formatters memoized by the `MessageContext`\n   * instance passed as an argument.\n   *\n   * @param   {MessageContext} [ctx]\n   * @returns {string}\n   */\n  toString() {\n    throw new Error(\"Subclasses of FluentType must implement toString.\");\n  }\n}\n\nexport class FluentNone extends FluentType {\n  toString() {\n    return this.value || \"???\";\n  }\n}\n\nexport class FluentNumber extends FluentType {\n  constructor(value, opts) {\n    super(parseFloat(value), opts);\n  }\n\n  toString(ctx) {\n    try {\n      const nf = ctx._memoizeIntlObject(\n        Intl.NumberFormat, this.opts\n      );\n      return nf.format(this.value);\n    } catch (e) {\n      // XXX Report the error.\n      return this.value;\n    }\n  }\n\n  /**\n   * Compare the object with another instance of a FluentType.\n   *\n   * @param   {MessageContext} ctx\n   * @param   {FluentType}     other\n   * @returns {bool}\n   */\n  match(ctx, other) {\n    if (other instanceof FluentNumber) {\n      return this.value === other.value;\n    }\n    return false;\n  }\n}\n\nexport class FluentDateTime extends FluentType {\n  constructor(value, opts) {\n    super(new Date(value), opts);\n  }\n\n  toString(ctx) {\n    try {\n      const dtf = ctx._memoizeIntlObject(\n        Intl.DateTimeFormat, this.opts\n      );\n      return dtf.format(this.value);\n    } catch (e) {\n      // XXX Report the error.\n      return this.value;\n    }\n  }\n}\n\nexport class FluentSymbol extends FluentType {\n  toString() {\n    return this.value;\n  }\n\n  /**\n   * Compare the object with another instance of a FluentType.\n   *\n   * @param   {MessageContext} ctx\n   * @param   {FluentType}     other\n   * @returns {bool}\n   */\n  match(ctx, other) {\n    if (other instanceof FluentSymbol) {\n      return this.value === other.value;\n    } else if (typeof other === \"string\") {\n      return this.value === other;\n    } else if (other instanceof FluentNumber) {\n      const pr = ctx._memoizeIntlObject(\n        Intl.PluralRules, other.opts\n      );\n      return this.value === pr.select(other.value);\n    }\n    return false;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent/src/types.js","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n *   - args - an array of positional args\n *   - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentType`.  Functions must return `FluentType` objects as well.\n */\n\nimport { FluentNumber, FluentDateTime } from \"./types\";\n\nexport default {\n  \"NUMBER\": ([arg], opts) =>\n    new FluentNumber(arg.valueOf(), merge(arg.opts, opts)),\n  \"DATETIME\": ([arg], opts) =>\n    new FluentDateTime(arg.valueOf(), merge(arg.opts, opts)),\n};\n\nfunction merge(argopts, opts) {\n  return Object.assign({}, argopts, values(opts));\n}\n\nfunction values(opts) {\n  const unwrapped = {};\n  for (const [name, opt] of Object.entries(opts)) {\n    unwrapped[name] = opt.valueOf();\n  }\n  return unwrapped;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent/src/builtins.js","/**\n * @overview\n *\n * The role of the Fluent resolver is to format a translation object to an\n * instance of `FluentType` or an array of instances.\n *\n * Translations can contain references to other messages or external arguments,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers, dates, lists and more into the\n * context's language.  See the documentation of the Fluent syntax for more\n * information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible.  In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * `MessageReference`, `VariantExpression`, `AttributeExpression` and\n * `SelectExpression` resolve to raw Runtime Entries objects and the result of\n * the resolution needs to be passed into `Type` to get their real value.\n * This is useful for composing expressions.  Consider:\n *\n *     brand-name[nominative]\n *\n * which is a `VariantExpression` with properties `id: MessageReference` and\n * `key: Keyword`.  If `MessageReference` was resolved eagerly, it would\n * instantly resolve to the value of the `brand-name` message.  Instead, we\n * want to get the message object and look for its `nominative` variant.\n *\n * All other expressions (except for `FunctionReference` which is only used in\n * `CallExpression`) resolve to an instance of `FluentType`.  The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n *\n * All functions in this file pass around a special object called `env`.\n * This object stores a set of elements used by all resolve functions:\n *\n *  * {MessageContext} ctx\n *      context for which the given resolution is happening\n *  * {Object} args\n *      list of developer provided arguments that can be used\n *  * {Array} errors\n *      list of errors collected while resolving\n *  * {WeakSet} dirty\n *      Set of patterns already encountered during this resolution.\n *      This is used to prevent cyclic resolutions.\n */\n\n\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, FluentSymbol }\n  from \"./types\";\nimport builtins from \"./builtins\";\n\n// Prevent expansion of too long placeables.\nconst MAX_PLACEABLE_LENGTH = 2500;\n\n// Unicode bidi isolation characters.\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n\n\n/**\n * Helper for choosing the default value from a set of members.\n *\n * Used in SelectExpressions and Type.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} members\n *    Hash map of variants from which the default value is to be selected.\n * @param   {Number} def\n *    The index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction DefaultMember(env, members, def) {\n  if (members[def]) {\n    return members[def];\n  }\n\n  const { errors } = env;\n  errors.push(new RangeError(\"No default\"));\n  return new FluentNone();\n}\n\n\n/**\n * Resolve a reference to another message.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} id\n *    The identifier of the message to be resolved.\n * @param   {String} id.name\n *    The name of the identifier.\n * @returns {FluentType}\n * @private\n */\nfunction MessageReference(env, {name}) {\n  const { ctx, errors } = env;\n  const message = name.startsWith(\"-\")\n    ? ctx._terms.get(name)\n    : ctx._messages.get(name);\n\n  if (!message) {\n    const err = name.startsWith(\"-\")\n      ? new ReferenceError(`Unknown term: ${name}`)\n      : new ReferenceError(`Unknown message: ${name}`);\n    errors.push(err);\n    return new FluentNone(name);\n  }\n\n  return message;\n}\n\n/**\n * Resolve a variant expression to the variant object.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {Object} expr.id\n *    An Identifier of a message for which the variant is resolved.\n * @param   {Object} expr.id.name\n *    Name a message for which the variant is resolved.\n * @param   {Object} expr.key\n *    Variant key to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction VariantExpression(env, {id, key}) {\n  const message = MessageReference(env, id);\n  if (message instanceof FluentNone) {\n    return message;\n  }\n\n  const { ctx, errors } = env;\n  const keyword = Type(env, key);\n\n  function isVariantList(node) {\n    return Array.isArray(node) &&\n      node[0].type === \"sel\" &&\n      node[0].exp === null;\n  }\n\n  if (isVariantList(message.val)) {\n    // Match the specified key against keys of each variant, in order.\n    for (const variant of message.val[0].vars) {\n      const variantKey = Type(env, variant.key);\n      if (keyword.match(ctx, variantKey)) {\n        return variant;\n      }\n    }\n  }\n\n  errors.push(new ReferenceError(`Unknown variant: ${keyword.toString(ctx)}`));\n  return Type(env, message);\n}\n\n\n/**\n * Resolve an attribute expression to the attribute object.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.id\n *    An ID of a message for which the attribute is resolved.\n * @param   {String} expr.name\n *    Name of the attribute to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction AttributeExpression(env, {id, name}) {\n  const message = MessageReference(env, id);\n  if (message instanceof FluentNone) {\n    return message;\n  }\n\n  if (message.attrs) {\n    // Match the specified name against keys of each attribute.\n    for (const attrName in message.attrs) {\n      if (name === attrName) {\n        return message.attrs[name];\n      }\n    }\n  }\n\n  const { errors } = env;\n  errors.push(new ReferenceError(`Unknown attribute: ${name}`));\n  return Type(env, message);\n}\n\n/**\n * Resolve a select expression to the member object.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.exp\n *    Selector expression\n * @param   {Array} expr.vars\n *    List of variants for the select expression.\n * @param   {Number} expr.def\n *    Index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction SelectExpression(env, {exp, vars, def}) {\n  if (exp === null) {\n    return DefaultMember(env, vars, def);\n  }\n\n  const selector = Type(env, exp);\n  if (selector instanceof FluentNone) {\n    return DefaultMember(env, vars, def);\n  }\n\n  // Match the selector against keys of each variant, in order.\n  for (const variant of vars) {\n    const key = Type(env, variant.key);\n    const keyCanMatch =\n      key instanceof FluentNumber || key instanceof FluentSymbol;\n\n    if (!keyCanMatch) {\n      continue;\n    }\n\n    const { ctx } = env;\n\n    if (key.match(ctx, selector)) {\n      return variant;\n    }\n  }\n\n  return DefaultMember(env, vars, def);\n}\n\n\n/**\n * Resolve expression to a Fluent type.\n *\n * JavaScript strings are a special case.  Since they natively have the\n * `toString` method they can be used as if they were a Fluent type without\n * paying the cost of creating a instance of one.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression object to be resolved into a Fluent type.\n * @returns {FluentType}\n * @private\n */\nfunction Type(env, expr) {\n  // A fast-path for strings which are the most common case, and for\n  // `FluentNone` which doesn't require any additional logic.\n  if (typeof expr === \"string\" || expr instanceof FluentNone) {\n    return expr;\n  }\n\n  // The Runtime AST (Entries) encodes patterns (complex strings with\n  // placeables) as Arrays.\n  if (Array.isArray(expr)) {\n    return Pattern(env, expr);\n  }\n\n\n  switch (expr.type) {\n    case \"varname\":\n      return new FluentSymbol(expr.name);\n    case \"num\":\n      return new FluentNumber(expr.val);\n    case \"ext\":\n      return ExternalArgument(env, expr);\n    case \"fun\":\n      return FunctionReference(env, expr);\n    case \"call\":\n      return CallExpression(env, expr);\n    case \"ref\": {\n      const message = MessageReference(env, expr);\n      return Type(env, message);\n    }\n    case \"attr\": {\n      const attr = AttributeExpression(env, expr);\n      return Type(env, attr);\n    }\n    case \"var\": {\n      const variant = VariantExpression(env, expr);\n      return Type(env, variant);\n    }\n    case \"sel\": {\n      const member = SelectExpression(env, expr);\n      return Type(env, member);\n    }\n    case undefined: {\n      // If it's a node with a value, resolve the value.\n      if (expr.val !== null && expr.val !== undefined) {\n        return Type(env, expr.val);\n      }\n\n      const { errors } = env;\n      errors.push(new RangeError(\"No value\"));\n      return new FluentNone();\n    }\n    default:\n      return new FluentNone();\n  }\n}\n\n/**\n * Resolve a reference to an external argument.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.name\n *    Name of an argument to be returned.\n * @returns {FluentType}\n * @private\n */\nfunction ExternalArgument(env, {name}) {\n  const { args, errors } = env;\n\n  if (!args || !args.hasOwnProperty(name)) {\n    errors.push(new ReferenceError(`Unknown external: ${name}`));\n    return new FluentNone(name);\n  }\n\n  const arg = args[name];\n\n  // Return early if the argument already is an instance of FluentType.\n  if (arg instanceof FluentType) {\n    return arg;\n  }\n\n  // Convert the argument to a Fluent type.\n  switch (typeof arg) {\n    case \"string\":\n      return arg;\n    case \"number\":\n      return new FluentNumber(arg);\n    case \"object\":\n      if (arg instanceof Date) {\n        return new FluentDateTime(arg);\n      }\n    default:\n      errors.push(\n        new TypeError(`Unsupported external type: ${name}, ${typeof arg}`)\n      );\n      return new FluentNone(name);\n  }\n}\n\n/**\n * Resolve a reference to a function.\n *\n * @param   {Object}  env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.name\n *    Name of the function to be returned.\n * @returns {Function}\n * @private\n */\nfunction FunctionReference(env, {name}) {\n  // Some functions are built-in.  Others may be provided by the runtime via\n  // the `MessageContext` constructor.\n  const { ctx: { _functions }, errors } = env;\n  const func = _functions[name] || builtins[name];\n\n  if (!func) {\n    errors.push(new ReferenceError(`Unknown function: ${name}()`));\n    return new FluentNone(`${name}()`);\n  }\n\n  if (typeof func !== \"function\") {\n    errors.push(new TypeError(`Function ${name}() is not callable`));\n    return new FluentNone(`${name}()`);\n  }\n\n  return func;\n}\n\n/**\n * Resolve a call to a Function with positional and key-value arguments.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {Object} expr.fun\n *    FTL Function object.\n * @param   {Array} expr.args\n *    FTL Function argument list.\n * @returns {FluentType}\n * @private\n */\nfunction CallExpression(env, {fun, args}) {\n  const callee = FunctionReference(env, fun);\n\n  if (callee instanceof FluentNone) {\n    return callee;\n  }\n\n  const posargs = [];\n  const keyargs = {};\n\n  for (const arg of args) {\n    if (arg.type === \"narg\") {\n      keyargs[arg.name] = Type(env, arg.val);\n    } else {\n      posargs.push(Type(env, arg));\n    }\n  }\n\n  try {\n    return callee(posargs, keyargs);\n  } catch (e) {\n    // XXX Report errors.\n    return new FluentNone();\n  }\n}\n\n/**\n * Resolve a pattern (a complex string with placeables).\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Array} ptn\n *    Array of pattern elements.\n * @returns {Array}\n * @private\n */\nfunction Pattern(env, ptn) {\n  const { ctx, dirty, errors } = env;\n\n  if (dirty.has(ptn)) {\n    errors.push(new RangeError(\"Cyclic reference\"));\n    return new FluentNone();\n  }\n\n  // Tag the pattern as dirty for the purpose of the current resolution.\n  dirty.add(ptn);\n  const result = [];\n\n  // Wrap interpolations with Directional Isolate Formatting characters\n  // only when the pattern has more than one element.\n  const useIsolating = ctx._useIsolating && ptn.length > 1;\n\n  for (const elem of ptn) {\n    if (typeof elem === \"string\") {\n      result.push(elem);\n      continue;\n    }\n\n    const part = Type(env, elem).toString(ctx);\n\n    if (useIsolating) {\n      result.push(FSI);\n    }\n\n    if (part.length > MAX_PLACEABLE_LENGTH) {\n      errors.push(\n        new RangeError(\n          \"Too many characters in placeable \" +\n          `(${part.length}, max allowed is ${MAX_PLACEABLE_LENGTH})`\n        )\n      );\n      result.push(part.slice(MAX_PLACEABLE_LENGTH));\n    } else {\n      result.push(part);\n    }\n\n    if (useIsolating) {\n      result.push(PDI);\n    }\n  }\n\n  dirty.delete(ptn);\n  return result.join(\"\");\n}\n\n/**\n * Format a translation into a string.\n *\n * @param   {MessageContext} ctx\n *    A MessageContext instance which will be used to resolve the\n *    contextual information of the message.\n * @param   {Object}         args\n *    List of arguments provided by the developer which can be accessed\n *    from the message.\n * @param   {Object}         message\n *    An object with the Message to be resolved.\n * @param   {Array}          errors\n *    An error array that any encountered errors will be appended to.\n * @returns {FluentType}\n */\nexport default function resolve(ctx, args, message, errors = []) {\n  const env = {\n    ctx, args, errors, dirty: new WeakSet()\n  };\n  return Type(env, message).toString(ctx);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent/src/resolver.js","import resolve from \"./resolver\";\nimport parse from \"./parser\";\n\n/**\n * Message contexts are single-language stores of translations.  They are\n * responsible for parsing translation resources in the Fluent syntax and can\n * format translation units (entities) to strings.\n *\n * Always use `MessageContext.format` to retrieve translation units from\n * a context.  Translations can contain references to other entities or\n * external arguments, conditional logic in form of select expressions, traits\n * which describe their grammatical features, and can use Fluent builtins which\n * make use of the `Intl` formatters to format numbers, dates, lists and more\n * into the context's language.  See the documentation of the Fluent syntax for\n * more information.\n */\nexport class MessageContext {\n\n  /**\n   * Create an instance of `MessageContext`.\n   *\n   * The `locales` argument is used to instantiate `Intl` formatters used by\n   * translations.  The `options` object can be used to configure the context.\n   *\n   * Examples:\n   *\n   *     const ctx = new MessageContext(locales);\n   *\n   *     const ctx = new MessageContext(locales, { useIsolating: false });\n   *\n   *     const ctx = new MessageContext(locales, {\n   *       useIsolating: true,\n   *       functions: {\n   *         NODE_ENV: () => process.env.NODE_ENV\n   *       }\n   *     });\n   *\n   * Available options:\n   *\n   *   - `functions` - an object of additional functions available to\n   *                   translations as builtins.\n   *\n   *   - `useIsolating` - boolean specifying whether to use Unicode isolation\n   *                    marks (FSI, PDI) for bidi interpolations.\n   *\n   * @param   {string|Array<string>} locales - Locale or locales of the context\n   * @param   {Object} [options]\n   * @returns {MessageContext}\n   */\n  constructor(locales, { functions = {}, useIsolating = true } = {}) {\n    this.locales = Array.isArray(locales) ? locales : [locales];\n\n    this._terms = new Map();\n    this._messages = new Map();\n    this._functions = functions;\n    this._useIsolating = useIsolating;\n    this._intls = new WeakMap();\n  }\n\n  /*\n   * Return an iterator over public `[id, message]` pairs.\n   *\n   * @returns {Iterator}\n   */\n  get messages() {\n    return this._messages[Symbol.iterator]();\n  }\n\n  /*\n   * Check if a message is present in the context.\n   *\n   * @param {string} id - The identifier of the message to check.\n   * @returns {bool}\n   */\n  hasMessage(id) {\n    return this._messages.has(id);\n  }\n\n  /*\n   * Return the internal representation of a message.\n   *\n   * The internal representation should only be used as an argument to\n   * `MessageContext.format`.\n   *\n   * @param {string} id - The identifier of the message to check.\n   * @returns {Any}\n   */\n  getMessage(id) {\n    return this._messages.get(id);\n  }\n\n  /**\n   * Add a translation resource to the context.\n   *\n   * The translation resource must use the Fluent syntax.  It will be parsed by\n   * the context and each translation unit (message) will be available in the\n   * context by its identifier.\n   *\n   *     ctx.addMessages('foo = Foo');\n   *     ctx.getMessage('foo');\n   *\n   *     // Returns a raw representation of the 'foo' message.\n   *\n   * Parsed entities should be formatted with the `format` method in case they\n   * contain logic (references, select expressions etc.).\n   *\n   * @param   {string} source - Text resource with translations.\n   * @returns {Array<Error>}\n   */\n  addMessages(source) {\n    const [entries, errors] = parse(source);\n    for (const id in entries) {\n      if (id.startsWith(\"-\")) {\n        // Identifiers starting with a dash (-) define terms. Terms are private\n        // and cannot be retrieved from MessageContext.\n        if (this._terms.has(id)) {\n          errors.push(`Attempt to override an existing term: \"${id}\"`);\n          continue;\n        }\n        this._terms.set(id, entries[id]);\n      } else {\n        if (this._messages.has(id)) {\n          errors.push(`Attempt to override an existing message: \"${id}\"`);\n          continue;\n        }\n        this._messages.set(id, entries[id]);\n      }\n    }\n\n    return errors;\n  }\n\n  /**\n   * Format a message to a string or null.\n   *\n   * Format a raw `message` from the context into a string (or a null if it has\n   * a null value).  `args` will be used to resolve references to external\n   * arguments inside of the translation.\n   *\n   * In case of errors `format` will try to salvage as much of the translation\n   * as possible and will still return a string.  For performance reasons, the\n   * encountered errors are not returned but instead are appended to the\n   * `errors` array passed as the third argument.\n   *\n   *     const errors = [];\n   *     ctx.addMessages('hello = Hello, { $name }!');\n   *     const hello = ctx.getMessage('hello');\n   *     ctx.format(hello, { name: 'Jane' }, errors);\n   *\n   *     // Returns 'Hello, Jane!' and `errors` is empty.\n   *\n   *     ctx.format(hello, undefined, errors);\n   *\n   *     // Returns 'Hello, name!' and `errors` is now:\n   *\n   *     [<ReferenceError: Unknown external: name>]\n   *\n   * @param   {Object | string}    message\n   * @param   {Object | undefined} args\n   * @param   {Array}              errors\n   * @returns {?string}\n   */\n  format(message, args, errors) {\n    // optimize entities which are simple strings with no attributes\n    if (typeof message === \"string\") {\n      return message;\n    }\n\n    // optimize simple-string entities with attributes\n    if (typeof message.val === \"string\") {\n      return message.val;\n    }\n\n    // optimize entities with null values\n    if (message.val === undefined) {\n      return null;\n    }\n\n    return resolve(this, args, message, errors);\n  }\n\n  _memoizeIntlObject(ctor, opts) {\n    const cache = this._intls.get(ctor) || {};\n    const id = JSON.stringify(opts);\n\n    if (!cache[id]) {\n      cache[id] = new ctor(this.locales, opts);\n      this._intls.set(ctor, cache);\n    }\n\n    return cache[id];\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent/src/context.js","/*\n * CachedIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedIterable {\n  /**\n   * Create an `CachedIterable` instance.\n   *\n   * @param {Iterable} iterable\n   * @returns {CachedIterable}\n   */\n  constructor(iterable) {\n    if (Symbol.asyncIterator in Object(iterable)) {\n      this.iterator = iterable[Symbol.asyncIterator]();\n    } else if (Symbol.iterator in Object(iterable)) {\n      this.iterator = iterable[Symbol.iterator]();\n    } else {\n      throw new TypeError(\"Argument must implement the iteration protocol.\");\n    }\n\n    this.seen = [];\n  }\n\n  [Symbol.iterator]() {\n    const { seen, iterator } = this;\n    let cur = 0;\n\n    return {\n      next() {\n        if (seen.length <= cur) {\n          seen.push(iterator.next());\n        }\n        return seen[cur++];\n      }\n    };\n  }\n\n  [Symbol.asyncIterator]() {\n    const { seen, iterator } = this;\n    let cur = 0;\n\n    return {\n      async next() {\n        if (seen.length <= cur) {\n          seen.push(await iterator.next());\n        }\n        return seen[cur++];\n      }\n    };\n  }\n\n  /**\n   * This method allows user to consume the next element from the iterator\n   * into the cache.\n   */\n  touchNext() {\n    const { seen, iterator } = this;\n    if (seen.length === 0 || seen[seen.length - 1].done === false) {\n      seen.push(iterator.next());\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent/src/cached_iterable.js","/*\n * @overview\n *\n * Functions for managing ordered sequences of MessageContexts.\n *\n * An ordered iterable of MessageContext instances can represent the current\n * negotiated fallback chain of languages.  This iterable can be used to find\n * the best existing translation for a given identifier.\n *\n * The mapContext* methods can be used to find the first MessageContext in the\n * given iterable which contains the translation with the given identifier.  If\n * the iterable is ordered according to the result of a language negotiation\n * the returned MessageContext contains the best available translation.\n *\n * A simple function which formats translations based on the identifier might\n * be implemented as follows:\n *\n *     formatString(id, args) {\n *         const ctx = mapContextSync(contexts, id);\n *\n *         if (ctx === null) {\n *             return id;\n *         }\n *\n *         const msg = ctx.getMessage(id);\n *         return ctx.format(msg, args);\n *     }\n *\n * In order to pass an iterator to mapContext*, wrap it in CachedIterable.\n * This allows multiple calls to mapContext* without advancing and eventually\n * depleting the iterator.\n *\n *     function *generateMessages() {\n *         // Some lazy logic for yielding MessageContexts.\n *         yield *[ctx1, ctx2];\n *     }\n *\n *     const contexts = new CachedIterable(generateMessages());\n *     const ctx = mapContextSync(contexts, id);\n *\n */\n\n/*\n * Synchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {Iterable} iterable\n * @param {string|Array<string>} ids\n * @returns {MessageContext|Array<MessageContext>}\n */\nexport function mapContextSync(iterable, ids) {\n  if (!Array.isArray(ids)) {\n    return getContextForId(iterable, ids);\n  }\n\n  return ids.map(\n    id => getContextForId(iterable, id)\n  );\n}\n\n/*\n * Find the best `MessageContext` with the translation for `id`.\n */\nfunction getContextForId(iterable, id) {\n  for (const context of iterable) {\n    if (context.hasMessage(id)) {\n      return context;\n    }\n  }\n\n  return null;\n}\n\n/*\n * Asynchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {AsyncIterable} iterable\n * @param {string|Array<string>} ids\n * @returns {Promise<MessageContext|Array<MessageContext>>}\n */\nexport async function mapContextAsync(iterable, ids) {\n  if (!Array.isArray(ids)) {\n    for await (const context of iterable) {\n      if (context.hasMessage(ids)) {\n        return context;\n      }\n    }\n  }\n\n  let remainingCount = ids.length;\n  const foundContexts = new Array(remainingCount).fill(null);\n\n  for await (const context of iterable) {\n    // XXX Switch to const [index, id] of id.entries() when we move to Babel 7.\n    // See https://github.com/babel/babel/issues/5880.\n    for (let index = 0; index < ids.length; index++) {\n      const id = ids[index];\n      if (!foundContexts[index] && context.hasMessage(id)) {\n        foundContexts[index] = context;\n        remainingCount--;\n      }\n\n      // Return early when all ids have been mapped to contexts.\n      if (remainingCount === 0) {\n        return foundContexts;\n      }\n    }\n  }\n\n  return foundContexts;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent/src/fallback.js","function nonBlank(line) {\n  return !/^\\s*$/.test(line);\n}\n\nfunction countIndent(line) {\n  const [indent] = line.match(/^\\s*/);\n  return indent.length;\n}\n\n/**\n * Template literal tag for dedenting FTL code.\n *\n * Strip the common indent of non-blank lines. Remove blank lines.\n *\n * @param {Array<string>} strings\n */\nexport function ftl(strings) {\n  const [code] = strings;\n  const lines = code.split(\"\\n\").filter(nonBlank);\n  const indents = lines.map(countIndent);\n  const common = Math.min(...indents);\n  const indent = new RegExp(`^\\\\s{${common}}`);\n\n  return lines.map(\n    line => line.replace(indent, \"\")\n  ).join(\"\\n\");\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent/src/util.js","/*\n * @module fluent\n * @overview\n *\n * `fluent` is a JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n */\n\nexport { default as _parse } from \"./parser\";\n\nexport { MessageContext } from \"./context\";\nexport {\n  FluentType as MessageArgument,\n  FluentNumber as MessageNumberArgument,\n  FluentDateTime as MessageDateTimeArgument,\n} from \"./types\";\n\nexport { default as CachedIterable } from \"./cached_iterable\";\nexport { mapContextSync, mapContextAsync } from \"./fallback\";\n\nexport { ftl } from \"./util\";\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent/src/index.js","/* eslint-env mozilla/frame-script */\n\nimport {actionCreators as ac, actionTypes as at, actionUtils as au} from \"common/Actions.jsm\";\nimport {applyMiddleware, combineReducers, createStore} from \"redux\";\n\nexport const MERGE_STORE_ACTION = \"NEW_TAB_INITIAL_STATE\";\nexport const OUTGOING_MESSAGE_NAME = \"ActivityStream:ContentToMain\";\nexport const INCOMING_MESSAGE_NAME = \"ActivityStream:MainToContent\";\nexport const EARLY_QUEUED_ACTIONS = [at.SAVE_SESSION_PERF_DATA, at.PAGE_PRERENDERED];\n\n/**\n * A higher-order function which returns a reducer that, on MERGE_STORE action,\n * will return the action.data object merged into the previous state.\n *\n * For all other actions, it merely calls mainReducer.\n *\n * Because we want this to merge the entire state object, it's written as a\n * higher order function which takes the main reducer (itself often a call to\n * combineReducers) as a parameter.\n *\n * @param  {function} mainReducer reducer to call if action != MERGE_STORE_ACTION\n * @return {function}             a reducer that, on MERGE_STORE_ACTION action,\n *                                will return the action.data object merged\n *                                into the previous state, and the result\n *                                of calling mainReducer otherwise.\n */\nfunction mergeStateReducer(mainReducer) {\n  return (prevState, action) => {\n    if (action.type === MERGE_STORE_ACTION) {\n      return {...prevState, ...action.data};\n    }\n\n    return mainReducer(prevState, action);\n  };\n}\n\n/**\n * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary\n */\nconst messageMiddleware = store => next => action => {\n  const skipLocal = action.meta && action.meta.skipLocal;\n  if (au.isSendToMain(action)) {\n    RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  }\n  if (!skipLocal) {\n    next(action);\n  }\n};\n\nexport const rehydrationMiddleware = store => next => action => {\n  if (store._didRehydrate) {\n    return next(action);\n  }\n\n  const isMergeStoreAction = action.type === MERGE_STORE_ACTION;\n  const isRehydrationRequest = action.type === at.NEW_TAB_STATE_REQUEST;\n\n  if (isRehydrationRequest) {\n    store._didRequestInitialState = true;\n    return next(action);\n  }\n\n  if (isMergeStoreAction) {\n    store._didRehydrate = true;\n    return next(action);\n  }\n\n  // If init happened after our request was made, we need to re-request\n  if (store._didRequestInitialState && action.type === at.INIT) {\n    return next(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n  }\n\n  if (au.isBroadcastToContent(action) || au.isSendToOneContent(action) || au.isSendToPreloaded(action)) {\n    // Note that actions received before didRehydrate will not be dispatched\n    // because this could negatively affect preloading and the the state\n    // will be replaced by rehydration anyway.\n    return null;\n  }\n\n  return next(action);\n};\n\n/**\n * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives\n * the first action from main. This is useful for those actions for main which\n * require higher reliability, i.e. the action will not be lost in the case\n * that it gets sent before the main is ready to receive it. Conversely, any\n * actions allowed early are accepted to be ignorable or re-sendable.\n */\nexport const queueEarlyMessageMiddleware = store => next => action => {\n  if (store._receivedFromMain) {\n    next(action);\n  } else if (au.isFromMain(action)) {\n    next(action);\n    store._receivedFromMain = true;\n    // Sending out all the early actions as main is ready now\n    if (store._earlyActionQueue) {\n      store._earlyActionQueue.forEach(next);\n      store._earlyActionQueue = [];\n    }\n  } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {\n    store._earlyActionQueue = store._earlyActionQueue || [];\n    store._earlyActionQueue.push(action);\n  } else {\n    // Let any other type of action go through\n    next(action);\n  }\n};\n\n/**\n * initStore - Create a store and listen for incoming actions\n *\n * @param  {object} reducers An object containing Redux reducers\n * @param  {object} intialState (optional) The initial state of the store, if desired\n * @return {object}          A redux store\n */\nexport function initStore(reducers, initialState) {\n  const store = createStore(\n    mergeStateReducer(combineReducers(reducers)),\n    initialState,\n    global.RPMAddMessageListener && applyMiddleware(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware)\n  );\n\n  store._didRehydrate = false;\n  store._didRequestInitialState = false;\n\n  if (global.RPMAddMessageListener) {\n    global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, msg => {\n      try {\n        store.dispatch(msg.data);\n      } catch (ex) {\n        console.error(\"Content msg:\", msg, \"Dispatch error: \", ex); // eslint-disable-line no-console\n        dump(`Content msg: ${JSON.stringify(msg)}\\nDispatch error: ${ex}\\n${ex.stack}`);\n      }\n    });\n  }\n\n  return store;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/lib/init-store.js","module.exports = ReactDOM;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ReactDOM\"\n// module id = 12\n// module chunks = 0","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class ErrorBoundaryFallback extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.windowObj = this.props.windowObj || window;\n    this.onClick = this.onClick.bind(this);\n  }\n\n  /**\n   * Since we only get here if part of the page has crashed, do a\n   * forced reload to give us the best chance at recovering.\n   */\n  onClick() {\n    this.windowObj.location.reload(true);\n  }\n\n  render() {\n    const defaultClass = \"as-error-fallback\";\n    let className;\n    if (\"className\" in this.props) {\n      className = `${this.props.className} ${defaultClass}`;\n    } else {\n      className = defaultClass;\n    }\n\n    // href=\"#\" to force normal link styling stuff (eg cursor on hover)\n    return (\n      <div className={className}>\n        <div>\n          <FormattedMessage\n            defaultMessage=\"Oops, something went wrong loading this content.\"\n            id=\"error_fallback_default_info\" />\n        </div>\n        <span>\n          <a href=\"#\" className=\"reload-button\" onClick={this.onClick}>\n            <FormattedMessage\n              defaultMessage=\"Refresh page to try again.\"\n              id=\"error_fallback_default_refresh_suggestion\" />\n          </a>\n        </span>\n      </div>\n    );\n  }\n}\nErrorBoundaryFallback.defaultProps = {className: \"as-error-fallback\"};\n\nexport class ErrorBoundary extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {hasError: false};\n  }\n\n  componentDidCatch(error, info) {\n    this.setState({hasError: true});\n  }\n\n  render() {\n    if (!this.state.hasError) {\n      return (this.props.children);\n    }\n\n    return <this.props.FallbackComponent className={this.props.className} />;\n  }\n}\n\nErrorBoundary.defaultProps = {FallbackComponent: ErrorBoundaryFallback};\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/ErrorBoundary/ErrorBoundary.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\nconst _OpenInPrivateWindow = site => ({\n  id: \"menu_action_open_private_window\",\n  icon: \"new-window-private\",\n  action: ac.OnlyToMain({\n    type: at.OPEN_PRIVATE_WINDOW,\n    data: {url: site.url, referrer: site.referrer}\n  }),\n  userEvent: \"OPEN_PRIVATE_WINDOW\"\n});\n\nexport const GetPlatformString = platform => {\n  switch (platform) {\n    case \"win\":\n      return \"menu_action_show_file_windows\";\n    case \"macosx\":\n      return \"menu_action_show_file_mac_os\";\n    case \"linux\":\n      return \"menu_action_show_file_linux\";\n    default:\n      return \"menu_action_show_file_default\";\n  }\n};\n\n/**\n * List of functions that return items that can be included as menu options in a\n * LinkMenu. All functions take the site as the first parameter, and optionally\n * the index of the site.\n */\nexport const LinkMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  EmptyItem: () => ({type: \"empty\"}),\n  RemoveBookmark: site => ({\n    id: \"menu_action_remove_bookmark\",\n    icon: \"bookmark-added\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_BOOKMARK_BY_ID,\n      data: site.bookmarkGuid\n    }),\n    userEvent: \"BOOKMARK_DELETE\"\n  }),\n  AddBookmark: site => ({\n    id: \"menu_action_bookmark\",\n    icon: \"bookmark-hollow\",\n    action: ac.AlsoToMain({\n      type: at.BOOKMARK_URL,\n      data: {url: site.url, title: site.title, type: site.type}\n    }),\n    userEvent: \"BOOKMARK_ADD\"\n  }),\n  OpenInNewWindow: site => ({\n    id: \"menu_action_open_new_window\",\n    icon: \"new-window\",\n    action: ac.AlsoToMain({\n      type: at.OPEN_NEW_WINDOW,\n      data: {\n        referrer: site.referrer,\n        typedBonus: site.typedBonus,\n        url: site.url\n      }\n    }),\n    userEvent: \"OPEN_NEW_WINDOW\"\n  }),\n  BlockUrl: (site, index, eventSource) => ({\n    id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.AlsoToMain({\n      type: at.BLOCK_URL,\n      data: {url: site.url, pocket_id: site.pocket_id}\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      block: 0,\n      tiles: [{id: site.guid, pos: index}]\n    }),\n    userEvent: \"BLOCK\"\n  }),\n\n  // This is an option for web extentions which will result in remove items from\n  // memory and notify the web extenion, rather than using the built-in block list.\n  WebExtDismiss: (site, index, eventSource) => ({\n    id: \"menu_action_webext_dismiss\",\n    string_id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.WebExtEvent(at.WEBEXT_DISMISS, {\n      source: eventSource,\n      url: site.url,\n      action_position: index\n    })\n  }),\n  DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({\n    id: \"menu_action_delete\",\n    icon: \"delete\",\n    action: {\n      type: at.DIALOG_OPEN,\n      data: {\n        onConfirm: [\n          ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),\n          ac.UserEvent(Object.assign({event: \"DELETE\", source: eventSource, action_position: index}, siteInfo))\n        ],\n        eventSource,\n        body_string_id: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n        confirm_button_string_id: \"menu_action_delete\",\n        cancel_button_string_id: \"topsites_form_cancel_button\",\n        icon: \"modal-delete\"\n      }\n    },\n    userEvent: \"DIALOG_OPEN\"\n  }),\n  ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({\n    id: GetPlatformString(platform),\n    icon: \"search\",\n    action: ac.OnlyToMain({\n      type: at.SHOW_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  OpenFile: site => ({\n    id: \"menu_action_open_file\",\n    icon: \"open-file\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  CopyDownloadLink: site => ({\n    id: \"menu_action_copy_download_link\",\n    icon: \"copy\",\n    action: ac.OnlyToMain({\n      type: at.COPY_DOWNLOAD_LINK,\n      data: {url: site.url}\n    })\n  }),\n  GoToDownloadPage: site => ({\n    id: \"menu_action_go_to_download_page\",\n    icon: \"download\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: site.referrer}\n    }),\n    disabled: !site.referrer\n  }),\n  RemoveDownload: site => ({\n    id: \"menu_action_remove_download\",\n    icon: \"delete\",\n    action: ac.OnlyToMain({\n      type: at.REMOVE_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  PinTopSite: (site, index) => ({\n    id: \"menu_action_pin\",\n    icon: \"pin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_PIN,\n      data: {site: {url: site.url}, index}\n    }),\n    userEvent: \"PIN\"\n  }),\n  UnpinTopSite: site => ({\n    id: \"menu_action_unpin\",\n    icon: \"unpin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_UNPIN,\n      data: {site: {url: site.url}}\n    }),\n    userEvent: \"UNPIN\"\n  }),\n  SaveToPocket: (site, index, eventSource) => ({\n    id: \"menu_action_save_to_pocket\",\n    icon: \"pocket\",\n    action: ac.AlsoToMain({\n      type: at.SAVE_TO_POCKET,\n      data: {site: {url: site.url, title: site.title}}\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      pocket: 0,\n      tiles: [{id: site.guid, pos: index}]\n    }),\n    userEvent: \"SAVE_TO_POCKET\"\n  }),\n  DeleteFromPocket: site => ({\n    id: \"menu_action_delete_pocket\",\n    icon: \"delete\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id}\n    }),\n    userEvent: \"DELETE_FROM_POCKET\"\n  }),\n  ArchiveFromPocket: site => ({\n    id: \"menu_action_archive_pocket\",\n    icon: \"check\",\n    action: ac.AlsoToMain({\n      type: at.ARCHIVE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id}\n    }),\n    userEvent: \"ARCHIVE_FROM_POCKET\"\n  }),\n  EditTopSite: (site, index) => ({\n    id: \"edit_topsites_button_text\",\n    icon: \"edit\",\n    action: {\n      type: at.TOP_SITES_EDIT,\n      data: {index}\n    }\n  }),\n  CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),\n  CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),\n  CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),\n  CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),\n  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem())\n};\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/lib/link-menu-options.js","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport {LinkMenuOptions} from \"content-src/lib/link-menu-options\";\nimport React from \"react\";\n\nconst DEFAULT_SITE_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\", \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\"];\n\nexport class _LinkMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n    const {site, index, source, isPrivateBrowsingEnabled, siteInfo, platform} = props;\n\n    // Handle special case of default site\n    const propOptions = !site.isDefault ? props.options : DEFAULT_SITE_MENU_OPTIONS;\n\n    const options = propOptions.map(o => LinkMenuOptions[o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {\n      const {action, impression, id, string_id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id: string_id || id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            const userEventData = Object.assign({\n              event: userEvent,\n              source,\n              action_position: index\n            }, siteInfo);\n            props.dispatch(ac.UserEvent(userEventData));\n          }\n          if (impression && props.shouldSendImpressionStats) {\n            props.dispatch(impression);\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nconst getState = state => ({isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform});\nexport const LinkMenu = connect(getState)(injectIntl(_LinkMenu));\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/LinkMenu/LinkMenu.jsx","import React from \"react\";\n\nexport class ContextMenu extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.hideContext = this.hideContext.bind(this);\n    this.onClick = this.onClick.bind(this);\n  }\n\n  hideContext() {\n    this.props.onUpdate(false);\n  }\n\n  componentDidMount() {\n    setTimeout(() => {\n      global.addEventListener(\"click\", this.hideContext);\n    }, 0);\n  }\n\n  componentWillUnmount() {\n    global.removeEventListener(\"click\", this.hideContext);\n  }\n\n  onClick(event) {\n    // Eat all clicks on the context menu so they don't bubble up to window.\n    // This prevents the context menu from closing when clicking disabled items\n    // or the separators.\n    event.stopPropagation();\n  }\n\n  render() {\n    return (<span className=\"context-menu\" onClick={this.onClick}>\n      <ul role=\"menu\" className=\"context-menu-list\">\n        {this.props.options.map((option, i) => (option.type === \"separator\" ?\n          (<li key={i} className=\"separator\" />) :\n          (option.type !== \"empty\" && <ContextMenuItem key={i} option={option} hideContext={this.hideContext} />)\n        ))}\n      </ul>\n    </span>);\n  }\n}\n\nexport class ContextMenuItem extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onKeyDown = this.onKeyDown.bind(this);\n  }\n\n  onClick() {\n    this.props.hideContext();\n    this.props.option.onClick();\n  }\n\n  onKeyDown(event) {\n    const {option} = this.props;\n    switch (event.key) {\n      case \"Tab\":\n        // tab goes down in context menu, shift + tab goes up in context menu\n        // if we're on the last item, one more tab will close the context menu\n        // similarly, if we're on the first item, one more shift + tab will close it\n        if ((event.shiftKey && option.first) || (!event.shiftKey && option.last)) {\n          this.props.hideContext();\n        }\n        break;\n      case \"Enter\":\n        this.props.hideContext();\n        option.onClick();\n        break;\n    }\n  }\n\n  render() {\n    const {option} = this.props;\n    return (\n      <li role=\"menuitem\" className=\"context-menu-item\">\n        <a onClick={this.onClick} onKeyDown={this.onKeyDown} tabIndex=\"0\" className={option.disabled ? \"disabled\" : \"\"}>\n          {option.icon && <span className={`icon icon-spacer icon-${option.icon}`} />}\n          {option.label}\n        </a>\n      </li>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/ContextMenu/ContextMenu.jsx","/**\n * List of helper functions for screenshot-based images.\n *\n * There are two kinds of images:\n * 1. Remote Image: This is the image from the main process and it refers to\n *    the image in the React props. This can either be an object with the `data`\n *    and `path` properties, if it is a blob, or a string, if it is a normal image.\n * 2. Local Image: This is the image object in the content process and it refers\n *    to the image *object* in the React component's state. All local image\n *    objects have the `url` property, and an additional property `path`, if they\n *    are blobs.\n */\nexport const ScreenshotUtils = {\n  isBlob(isLocal, image) {\n    return !!(image && image.path && ((!isLocal && image.data) || (isLocal && image.url)));\n  },\n\n  // This should always be called with a remote image and not a local image.\n  createLocalImageObject(remoteImage) {\n    if (!remoteImage) {\n      return null;\n    }\n    if (this.isBlob(false, remoteImage)) {\n      return {url: global.URL.createObjectURL(remoteImage.data), path: remoteImage.path};\n    }\n    return {url: remoteImage};\n  },\n\n  // Revokes the object URL of the image if the local image is a blob.\n  // This should always be called with a local image and not a remote image.\n  maybeRevokeBlobObjectURL(localImage) {\n    if (this.isBlob(true, localImage)) {\n      global.URL.revokeObjectURL(localImage.url);\n    }\n  },\n\n  // Checks if remoteImage and localImage are the same.\n  isRemoteImageLocal(localImage, remoteImage) {\n    // Both remoteImage and localImage are present.\n    if (remoteImage && localImage) {\n      return this.isBlob(false, remoteImage) ?\n             localImage.path === remoteImage.path :\n             localImage.url === remoteImage;\n    }\n\n    // This will only handle the remaining three possible outcomes.\n    // (i.e. everything except when both image and localImage are present)\n    return !remoteImage && !localImage;\n  }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/lib/screenshot-utils.js","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport React from \"react\";\nimport {SectionMenu} from \"content-src/components/SectionMenu/SectionMenu\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class Disclaimer extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onAcknowledge = this.onAcknowledge.bind(this);\n  }\n\n  onAcknowledge() {\n    this.props.dispatch(ac.SetPref(this.props.disclaimerPref, false));\n    this.props.dispatch(ac.UserEvent({event: \"DISCLAIMER_ACKED\", source: this.props.eventSource}));\n  }\n\n  render() {\n    const {disclaimer} = this.props;\n    return (\n      <div className=\"section-disclaimer\">\n          <div className=\"section-disclaimer-text\">\n            {getFormattedMessage(disclaimer.text)}\n            {disclaimer.link &&\n              <a href={disclaimer.link.href} target=\"_blank\" rel=\"noopener noreferrer\">\n                {getFormattedMessage(disclaimer.link.title || disclaimer.link)}\n              </a>\n            }\n          </div>\n\n          <button onClick={this.onAcknowledge}>\n            {getFormattedMessage(disclaimer.button)}\n          </button>\n      </div>\n    );\n  }\n}\n\nexport const DisclaimerIntl = injectIntl(Disclaimer);\n\nexport class _CollapsibleSection extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBodyMount = this.onBodyMount.bind(this);\n    this.onHeaderClick = this.onHeaderClick.bind(this);\n    this.onTransitionEnd = this.onTransitionEnd.bind(this);\n    this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);\n    this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.state = {enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false};\n  }\n\n  componentWillMount() {\n    this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  componentWillUpdate(nextProps) {\n    // Check if we're about to go from expanded to collapsed\n    if (!this.props.collapsed && nextProps.collapsed) {\n      // This next line forces a layout flush of the section body, which has a\n      // max-height style set, so that the upcoming collapse animation can\n      // animate from that height to the collapsed height. Without this, the\n      // update is coalesced and there's no animation from no-max-height to 0.\n      this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions\n    }\n  }\n\n  componentWillUnmount() {\n    this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  enableOrDisableAnimation() {\n    // Only animate the collapse/expand for visible tabs.\n    const visible = this.props.document.visibilityState === VISIBLE;\n    if (this.state.enableAnimation !== visible) {\n      this.setState({enableAnimation: visible});\n    }\n  }\n\n  onBodyMount(node) {\n    this.sectionBody = node;\n  }\n\n  onHeaderClick() {\n    // If this.sectionBody is unset, it means that we're in some sort of error\n    // state, probably displaying the error fallback, so we won't be able to\n    // compute the height, and we don't want to persist the preference.\n    // If props.collapsed is undefined handler shouldn't do anything.\n    if (!this.sectionBody || this.props.collapsed === undefined) {\n      return;\n    }\n\n    // Get the current height of the body so max-height transitions can work\n    this.setState({\n      isAnimating: true,\n      maxHeight: `${this.sectionBody.scrollHeight}px`\n    });\n    const {action, userEvent} = SectionMenuOptions.CheckCollapsed(this.props);\n    this.props.dispatch(action);\n    this.props.dispatch(ac.UserEvent({\n      event: userEvent,\n      source: this.props.source\n    }));\n  }\n\n  onTransitionEnd(event) {\n    // Only update the animating state for our own transition (not a child's)\n    if (event.target === event.currentTarget) {\n      this.setState({isAnimating: false});\n    }\n  }\n\n  renderIcon() {\n    const {icon} = this.props;\n    if (icon && icon.startsWith(\"moz-extension://\")) {\n      return <span className=\"icon icon-small-spacer\" style={{backgroundImage: `url('${icon}')`}} />;\n    }\n    return <span className={`icon icon-small-spacer icon-${icon || \"webextension\"}`} />;\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuButtonMouseEnter() {\n    this.setState({menuButtonHover: true});\n  }\n\n  onMenuButtonMouseLeave() {\n    this.setState({menuButtonHover: false});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const isCollapsible = this.props.collapsed !== undefined;\n    const {enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu} = this.state;\n    const {id, eventSource, collapsed, disclaimer, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast, isWebExtension} = this.props;\n    const disclaimerPref = `section.${id}.showDisclaimer`;\n    const needsDisclaimer = disclaimer && this.props.Prefs.values[disclaimerPref];\n    const active = menuButtonHover || showContextMenu;\n    return (\n      <section\n        className={`collapsible-section ${this.props.className}${enableAnimation ? \" animation-enabled\" : \"\"}${collapsed ? \" collapsed\" : \"\"}${active ? \" active\" : \"\"}`}\n        // Note: data-section-id is used for web extension api tests in mozilla central\n        data-section-id={id}>\n        <div className=\"section-top-bar\">\n          <h3 className=\"section-title\">\n            <span className=\"click-target\" onClick={this.onHeaderClick}>\n              {this.renderIcon()}\n              {getFormattedMessage(title)}\n              {isCollapsible && <span className={`collapsible-arrow icon ${collapsed ? \"icon-arrowhead-forward-small\" : \"icon-arrowhead-down-small\"}`} />}\n            </span>\n          </h3>\n          <div>\n            <button\n              className=\"context-menu-button icon\"\n              onClick={this.onMenuButtonClick}\n              onMouseEnter={this.onMenuButtonMouseEnter}\n              onMouseLeave={this.onMenuButtonMouseLeave}>\n              <span className=\"sr-only\">\n                <FormattedMessage id=\"section_context_menu_button_sr\" />\n              </span>\n            </button>\n            {showContextMenu &&\n              <SectionMenu\n                id={id}\n                extraOptions={extraMenuOptions}\n                eventSource={eventSource}\n                showPrefName={showPrefName}\n                privacyNoticeURL={privacyNoticeURL}\n                collapsed={collapsed}\n                onUpdate={this.onMenuUpdate}\n                isFirst={isFirst}\n                isLast={isLast}\n                dispatch={dispatch}\n                isWebExtension={isWebExtension} />\n            }\n          </div>\n        </div>\n        <ErrorBoundary className=\"section-body-fallback\">\n          <div\n            className={`section-body${isAnimating ? \" animating\" : \"\"}`}\n            onTransitionEnd={this.onTransitionEnd}\n            ref={this.onBodyMount}\n            style={isAnimating && !collapsed ? {maxHeight} : null}>\n            {needsDisclaimer && <DisclaimerIntl disclaimerPref={disclaimerPref} disclaimer={disclaimer} eventSource={eventSource} dispatch={this.props.dispatch} />}\n            {this.props.children}\n          </div>\n        </ErrorBoundary>\n      </section>\n    );\n  }\n}\n\n_CollapsibleSection.defaultProps = {\n  document: global.document || {\n    addEventListener: () => {},\n    removeEventListener: () => {},\n    visibilityState: \"hidden\"\n  },\n  Prefs: {values: {}}\n};\n\nexport const CollapsibleSection = injectIntl(_CollapsibleSection);\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/CollapsibleSection/CollapsibleSection.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * List of functions that return items that can be included as menu options in a\n * SectionMenu. All functions take the section as the only parameter.\n */\nexport const SectionMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  MoveUp: section => ({\n    id: \"section_menu_action_move_up\",\n    icon: \"arrowhead-up\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: -1}\n    }),\n    userEvent: \"MENU_MOVE_UP\",\n    disabled: !!section.isFirst\n  }),\n  MoveDown: section => ({\n    id: \"section_menu_action_move_down\",\n    icon: \"arrowhead-down\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: +1}\n    }),\n    userEvent: \"MENU_MOVE_DOWN\",\n    disabled: !!section.isLast\n  }),\n  RemoveSection: section => ({\n    id: \"section_menu_action_remove_section\",\n    icon: \"dismiss\",\n    action: ac.SetPref(section.showPrefName, false),\n    userEvent: \"MENU_REMOVE\"\n  }),\n  CollapseSection: section => ({\n    id: \"section_menu_action_collapse_section\",\n    icon: \"minimize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: true}}}),\n    userEvent: \"MENU_COLLAPSE\"\n  }),\n  ExpandSection: section => ({\n    id: \"section_menu_action_expand_section\",\n    icon: \"maximize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: false}}}),\n    userEvent: \"MENU_EXPAND\"\n  }),\n  ManageSection: section => ({\n    id: \"section_menu_action_manage_section\",\n    icon: \"settings\",\n    action: ac.OnlyToMain({type: at.SETTINGS_OPEN}),\n    userEvent: \"MENU_MANAGE\"\n  }),\n  ManageWebExtension: section => ({\n    id: \"section_menu_action_manage_webext\",\n    icon: \"settings\",\n    action: ac.OnlyToMain({type: at.OPEN_WEBEXT_SETTINGS, data: section.id})\n  }),\n  AddTopSite: section => ({\n    id: \"section_menu_action_add_topsite\",\n    icon: \"add\",\n    action: {type: at.TOP_SITES_EDIT, data: {index: -1}},\n    userEvent: \"MENU_ADD_TOPSITE\"\n  }),\n  PrivacyNotice: section => ({\n    id: \"section_menu_action_privacy_notice\",\n    icon: \"info\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: section.privacyNoticeURL}\n    }),\n    userEvent: \"MENU_PRIVACY_NOTICE\"\n  }),\n  CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section))\n};\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/lib/section-menu-options.js","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\nimport React from \"react\";\n\n// Currently record only a fixed set of sections. This will prevent data\n// from custom sections from showing up or from topstories.\nconst RECORDED_SECTIONS = [\"highlights\", \"topsites\"];\n\nexport class ComponentPerfTimer extends React.Component {\n  constructor(props) {\n    super(props);\n    // Just for test dependency injection:\n    this.perfSvc = this.props.perfSvc || perfSvc;\n\n    this._sendBadStateEvent = this._sendBadStateEvent.bind(this);\n    this._sendPaintedEvent = this._sendPaintedEvent.bind(this);\n    this._reportMissingData = false;\n    this._timestampHandled = false;\n    this._recordedFirstRender = false;\n  }\n\n  componentDidMount() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  componentDidUpdate() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  /**\n   * Call the given callback after the upcoming frame paints.\n   *\n   * @note Both setTimeout and requestAnimationFrame are throttled when the page\n   * is hidden, so this callback may get called up to a second or so after the\n   * requestAnimationFrame \"paint\" for hidden tabs.\n   *\n   * Newtabs hidden while loading will presumably be fairly rare (other than\n   * preloaded tabs, which we will be filtering out on the server side), so such\n   * cases should get lost in the noise.\n   *\n   * If we decide that it's important to find out when something that's hidden\n   * has \"painted\", however, another option is to post a message to this window.\n   * That should happen even faster than setTimeout, and, at least as of this\n   * writing, it's not throttled in hidden windows in Firefox.\n   *\n   * @param {Function} callback\n   *\n   * @returns void\n   */\n  _afterFramePaint(callback) {\n    requestAnimationFrame(() => setTimeout(callback, 0));\n  }\n\n  _maybeSendBadStateEvent() {\n    // Follow up bugs:\n    // https://github.com/mozilla/activity-stream/issues/3691\n    if (!this.props.initialized) {\n      // Remember to report back when data is available.\n      this._reportMissingData = true;\n    } else if (this._reportMissingData) {\n      this._reportMissingData = false;\n      // Report how long it took for component to become initialized.\n      this._sendBadStateEvent();\n    }\n  }\n\n  _maybeSendPaintedEvent() {\n    // If we've already handled a timestamp, don't do it again.\n    if (this._timestampHandled || !this.props.initialized) {\n      return;\n    }\n\n    // And if we haven't, we're doing so now, so remember that. Even if\n    // something goes wrong in the callback, we can't try again, as we'd be\n    // sending back the wrong data, and we have to do it here, so that other\n    // calls to this method while waiting for the next frame won't also try to\n    // handle it.\n    this._timestampHandled = true;\n    this._afterFramePaint(this._sendPaintedEvent);\n  }\n\n  /**\n   * Triggered by call to render. Only first call goes through due to\n   * `_recordedFirstRender`.\n   */\n  _ensureFirstRenderTsRecorded() {\n    // Used as t0 for recording how long component took to initialize.\n    if (!this._recordedFirstRender) {\n      this._recordedFirstRender = true;\n      // topsites_first_render_ts, highlights_first_render_ts.\n      const key = `${this.props.id}_first_render_ts`;\n      this.perfSvc.mark(key);\n    }\n  }\n\n  /**\n   * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms\n   * of how much longer the data took to be ready for display than it would\n   * have been the ideal case.\n   * https://github.com/mozilla/ping-centre/issues/98\n   */\n  _sendBadStateEvent() {\n    // highlights_data_ready_ts, topsites_data_ready_ts.\n    const dataReadyKey = `${this.props.id}_data_ready_ts`;\n    this.perfSvc.mark(dataReadyKey);\n\n    try {\n      const firstRenderKey = `${this.props.id}_first_render_ts`;\n      // value has to be Int32.\n      const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) -\n                             this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        // highlights_data_late_by_ms, topsites_data_late_by_ms.\n        data: {[`${this.props.id}_data_late_by_ms`]: value}\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.\n    }\n  }\n\n  _sendPaintedEvent() {\n    // Record first_painted event but only send if topsites.\n    if (this.props.id !== \"topsites\") {\n      return;\n    }\n\n    // topsites_first_painted_ts.\n    const key = `${this.props.id}_first_painted_ts`;\n    this.perfSvc.mark(key);\n\n    try {\n      const data = {};\n      data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);\n\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up, and should continue\n      // to set this._timestampHandled to avoid going through this again.\n    }\n  }\n\n  render() {\n    if (RECORDED_SECTIONS.includes(this.props.id)) {\n      this._ensureFirstRenderTsRecorded();\n      this._maybeSendBadStateEvent();\n    }\n    return this.props.children;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","/* globals Services */\n\"use strict\";\n\n/* istanbul ignore if */\nif (typeof ChromeUtils !== \"undefined\") {\n  ChromeUtils.import(\"resource://gre/modules/Services.jsm\");\n}\n\nlet usablePerfObj;\n\n/* istanbul ignore if */\n/* istanbul ignore else */\nif (typeof Services !== \"undefined\") {\n  // Borrow the high-resolution timer from the hidden window....\n  usablePerfObj = Services.appShell.hiddenDOMWindow.performance;\n} else if (typeof performance !== \"undefined\") {\n  // we must be running in content space\n  // eslint-disable-next-line no-undef\n  usablePerfObj = performance;\n} else {\n  // This is a dummy object so this file doesn't crash in the node prerendering\n  // task.\n  usablePerfObj = {\n    now() {},\n    mark() {}\n  };\n}\n\nfunction _PerfService(options) {\n  // For testing, so that we can use a fake Window.performance object with\n  // known state.\n  if (options && options.performanceObj) {\n    this._perf = options.performanceObj;\n  } else {\n    this._perf = usablePerfObj;\n  }\n}\n\n_PerfService.prototype = {\n  /**\n   * Calls the underlying mark() method on the appropriate Window.performance\n   * object to add a mark with the given name to the appropriate performance\n   * timeline.\n   *\n   * @param  {String} name  the name to give the current mark\n   * @return {void}\n   */\n  mark: function mark(str) {\n    this._perf.mark(str);\n  },\n\n  /**\n   * Calls the underlying getEntriesByName on the appropriate Window.performance\n   * object.\n   *\n   * @param  {String} name\n   * @param  {String} type eg \"mark\"\n   * @return {Array}       Performance* objects\n   */\n  getEntriesByName: function getEntriesByName(name, type) {\n    return this._perf.getEntriesByName(name, type);\n  },\n\n  /**\n   * The timeOrigin property from the appropriate performance object.\n   * Used to ensure that timestamps from the add-on code and the content code\n   * are comparable.\n   *\n   * @note If this is called from a context without a window\n   * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden\n   * window, which appears to be the first created window (and thus\n   * timeOrigin) in the browser.  Note also, however, there is also a private\n   * hidden window, presumably for private browsing, which appears to be\n   * created dynamically later.  Exactly how/when that shows up needs to be\n   * investigated.\n   *\n   * @return {Number} A double of milliseconds with a precision of 0.5us.\n   */\n  get timeOrigin() {\n    return this._perf.timeOrigin;\n  },\n\n  /**\n   * Returns the \"absolute\" version of performance.now(), i.e. one that\n   * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)\n   * be comparable across both chrome and content.\n   *\n   * @return {Number}\n   */\n  absNow: function absNow() {\n    return this.timeOrigin + this._perf.now();\n  },\n\n  /**\n   * This returns the absolute startTime from the most recent performance.mark()\n   * with the given name.\n   *\n   * @param  {String} name  the name to lookup the start time for\n   *\n   * @return {Number}       the returned start time, as a DOMHighResTimeStamp\n   *\n   * @throws {Error}        \"No Marks with the name ...\" if none are available\n   *\n   * @note Always surround calls to this by try/catch.  Otherwise your code\n   * may fail when the `privacy.resistFingerprinting` pref is true.  When\n   * this pref is set, all attempts to get marks will likely fail, which will\n   * cause this method to throw.\n   *\n   * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)\n   * for more info.\n   */\n  getMostRecentAbsMarkStartByName(name) {\n    let entries = this.getEntriesByName(name, \"mark\");\n\n    if (!entries.length) {\n      throw new Error(`No marks with the name ${name}`);\n    }\n\n    let mostRecentEntry = entries[entries.length - 1];\n    return this._perf.timeOrigin + mostRecentEntry.startTime;\n  }\n};\n\nthis.perfService = new _PerfService();\nconst EXPORTED_SYMBOLS = [\"_PerfService\", \"perfService\"];\n\n\n\n// WEBPACK FOOTER //\n// ./common/PerfService.jsm","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {\n  MIN_CORNER_FAVICON_SIZE,\n  MIN_RICH_FAVICON_SIZE,\n  TOP_SITES_CONTEXT_MENU_OPTIONS,\n  TOP_SITES_SOURCE\n} from \"./TopSitesConstants\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\n\nexport class TopSiteLink extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {screenshotImage: null};\n    this.onDragEvent = this.onDragEvent.bind(this);\n  }\n\n  /*\n   * Helper to determine whether the drop zone should allow a drop. We only allow\n   * dropping top sites for now.\n   */\n  _allowDrop(e) {\n    return e.dataTransfer.types.includes(\"text/topsite-index\");\n  }\n\n  onDragEvent(event) {\n    switch (event.type) {\n      case \"click\":\n        // Stop any link clicks if we started any dragging\n        if (this.dragged) {\n          event.preventDefault();\n        }\n        break;\n      case \"dragstart\":\n        this.dragged = true;\n        event.dataTransfer.effectAllowed = \"move\";\n        event.dataTransfer.setData(\"text/topsite-index\", this.props.index);\n        event.target.blur();\n        this.props.onDragEvent(event, this.props.index, this.props.link, this.props.title);\n        break;\n      case \"dragend\":\n        this.props.onDragEvent(event);\n        break;\n      case \"dragenter\":\n      case \"dragover\":\n      case \"drop\":\n        if (this._allowDrop(event)) {\n          event.preventDefault();\n          this.props.onDragEvent(event, this.props.index);\n        }\n        break;\n      case \"mousedown\":\n        // Reset at the first mouse event of a potential drag\n        this.dragged = false;\n        break;\n    }\n  }\n\n  /**\n   * Helper to obtain the next state based on nextProps and prevState.\n   *\n   * NOTE: Rename this method to getDerivedStateFromProps when we update React\n   *       to >= 16.3. We will need to update tests as well. We cannot rename this\n   *       method to getDerivedStateFromProps now because there is a mismatch in\n   *       the React version that we are using for both testing and production.\n   *       (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n   *\n   * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n   */\n  static getNextStateFromProps(nextProps, prevState) {\n    const {screenshot} = nextProps.link;\n    const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.screenshotImage, screenshot);\n    if (imageInState) {\n      return null;\n    }\n\n    // Since image was updated, attempt to revoke old image blob URL, if it exists.\n    ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.screenshotImage);\n\n    return {screenshotImage: ScreenshotUtils.createLocalImageObject(screenshot)};\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillMount() {\n    const nextState = TopSiteLink.getNextStateFromProps(this.props, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillReceiveProps(nextProps) {\n    const nextState = TopSiteLink.getNextStateFromProps(nextProps, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  componentWillUnmount() {\n    ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.screenshotImage);\n  }\n\n  render() {\n    const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props;\n    const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : \"\"}${link.isDragged ? \" dragged\" : \"\"}`;\n    const {tippyTopIcon, faviconSize} = link;\n    const [letterFallback] = title;\n    let imageClassName;\n    let imageStyle;\n    let showSmallFavicon = false;\n    let smallFaviconStyle;\n    let smallFaviconFallback;\n    let hasScreenshotImage = this.state.screenshotImage && this.state.screenshotImage.url;\n    if (defaultStyle) { // force no styles (letter fallback) even if the link has imagery\n      smallFaviconFallback = false;\n    } else if (link.customScreenshotURL) {\n      // assume high quality custom screenshot and use rich icon styles and class names\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\"\n      };\n    } else if (tippyTopIcon || faviconSize >= MIN_RICH_FAVICON_SIZE) {\n      // styles and class names for top sites with rich icons\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: `url(${tippyTopIcon || link.favicon})`\n      };\n    } else {\n      // styles and class names for top sites with screenshot + small icon in top left corner\n      imageClassName = `screenshot${hasScreenshotImage ? \" active\" : \"\"}`;\n      imageStyle = {backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\"};\n\n      // only show a favicon in top left if it's greater than 16x16\n      if (faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n        showSmallFavicon = true;\n        smallFaviconStyle = {backgroundImage:  `url(${link.favicon})`};\n      } else if (hasScreenshotImage) {\n        // Don't show a small favicon if there is no screenshot, because that\n        // would result in two fallback icons\n        showSmallFavicon = true;\n        smallFaviconFallback = true;\n      }\n    }\n    let draggableProps = {};\n    if (isDraggable) {\n      draggableProps = {\n        onClick: this.onDragEvent,\n        onDragEnd: this.onDragEvent,\n        onDragStart: this.onDragEvent,\n        onMouseDown: this.onDragEvent\n      };\n    }\n    return (<li className={topSiteOuterClassName} onDrop={this.onDragEvent} onDragOver={this.onDragEvent} onDragEnter={this.onDragEvent} onDragLeave={this.onDragEvent} {...draggableProps}>\n      <div className=\"top-site-inner\">\n         <a href={link.url} onClick={onClick}>\n            <div className=\"tile\" aria-hidden={true} data-fallback={letterFallback}>\n              <div className={imageClassName} style={imageStyle} />\n              {showSmallFavicon && <div\n                className=\"top-site-icon default-icon\"\n                data-fallback={smallFaviconFallback && letterFallback}\n                style={smallFaviconStyle} />}\n           </div>\n           <div className={`title ${link.isPinned ? \"pinned\" : \"\"}`}>\n             {link.isPinned && <div className=\"icon icon-pin-small\" />}\n              <span dir=\"auto\">{title}</span>\n           </div>\n         </a>\n         {children}\n      </div>\n    </li>);\n  }\n}\nTopSiteLink.defaultProps = {\n  title: \"\",\n  link: {},\n  isDraggable: true\n};\n\nexport class TopSite extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {showContextMenu: false};\n    this.onLinkClick = this.onLinkClick.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    const value = {icon_type: this.props.link.iconType};\n    // Filter out \"not_pinned\" type for being the default\n    if (this.props.link.isPinned) {\n      value.card_type = \"pinned\";\n    }\n    return {value};\n  }\n\n  userEvent(event) {\n    this.props.dispatch(ac.UserEvent(Object.assign({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: this.props.index\n    }, this._getTelemetryInfo())));\n  }\n\n  onLinkClick(event) {\n    this.userEvent(\"CLICK\");\n\n    // Specially handle a top site link click for \"typed\" frecency bonus as\n    // specified as a property on the link.\n    event.preventDefault();\n    const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n    this.props.dispatch(ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})\n    }));\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.props.onActivate(this.props.index);\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const {props} = this;\n    const {link} = props;\n    const isContextMenuOpen = this.state.showContextMenu && props.activeIndex === props.index;\n    const title = link.label || link.hostname;\n    return (<TopSiteLink {...props} onClick={this.onLinkClick} onDragEvent={this.props.onDragEvent} className={`${props.className || \"\"}${isContextMenuOpen ? \" active\" : \"\"}`} title={title}>\n        <div>\n          <button className=\"context-menu-button icon\" onClick={this.onMenuButtonClick}>\n            <span className=\"sr-only\">\n              <FormattedMessage id=\"context_menu_button_sr\" values={{title}} />\n            </span>\n          </button>\n          {isContextMenuOpen &&\n            <LinkMenu\n              dispatch={props.dispatch}\n              index={props.index}\n              onUpdate={this.onMenuUpdate}\n              options={TOP_SITES_CONTEXT_MENU_OPTIONS}\n              site={link}\n              siteInfo={this._getTelemetryInfo()}\n              source={TOP_SITES_SOURCE} />\n          }\n        </div>\n    </TopSiteLink>);\n  }\n}\nTopSite.defaultProps = {\n  link: {},\n  onActivate() {}\n};\n\nexport class TopSitePlaceholder extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onEditButtonClick = this.onEditButtonClick.bind(this);\n  }\n\n  onEditButtonClick() {\n    this.props.dispatch(\n      {type: at.TOP_SITES_EDIT, data: {index: this.props.index}});\n  }\n\n  render() {\n    return (<TopSiteLink {...this.props} className={`placeholder ${this.props.className || \"\"}`} isDraggable={false}>\n      <button className=\"context-menu-button edit-button icon\"\n       title={this.props.intl.formatMessage({id: \"edit_topsites_edit_button\"})}\n       onClick={this.onEditButtonClick} />\n    </TopSiteLink>);\n  }\n}\n\nexport class _TopSiteList extends React.PureComponent {\n  static get DEFAULT_STATE() {\n    return {\n      activeIndex: null,\n      draggedIndex: null,\n      draggedSite: null,\n      draggedTitle: null,\n      topSitesPreview: null\n    };\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = _TopSiteList.DEFAULT_STATE;\n    this.onDragEvent = this.onDragEvent.bind(this);\n    this.onActivate = this.onActivate.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (this.state.draggedSite) {\n      const prevTopSites = this.props.TopSites && this.props.TopSites.rows;\n      const newTopSites = nextProps.TopSites && nextProps.TopSites.rows;\n      if (prevTopSites && prevTopSites[this.state.draggedIndex] &&\n        prevTopSites[this.state.draggedIndex].url === this.state.draggedSite.url &&\n        (!newTopSites[this.state.draggedIndex] || newTopSites[this.state.draggedIndex].url !== this.state.draggedSite.url)) {\n        // We got the new order from the redux store via props. We can clear state now.\n        this.setState(_TopSiteList.DEFAULT_STATE);\n      }\n    }\n  }\n\n  userEvent(event, index) {\n    this.props.dispatch(ac.UserEvent({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: index\n    }));\n  }\n\n  onDragEvent(event, index, link, title) {\n    switch (event.type) {\n      case \"dragstart\":\n        this.dropped = false;\n        this.setState({\n          draggedIndex: index,\n          draggedSite: link,\n          draggedTitle: title,\n          activeIndex: null\n        });\n        this.userEvent(\"DRAG\", index);\n        break;\n      case \"dragend\":\n        if (!this.dropped) {\n          // If there was no drop event, reset the state to the default.\n          this.setState(_TopSiteList.DEFAULT_STATE);\n        }\n        break;\n      case \"dragenter\":\n        if (index === this.state.draggedIndex) {\n          this.setState({topSitesPreview: null});\n        } else {\n          this.setState({topSitesPreview: this._makeTopSitesPreview(index)});\n        }\n        break;\n      case \"drop\":\n        if (index !== this.state.draggedIndex) {\n          this.dropped = true;\n          this.props.dispatch(ac.AlsoToMain({\n            type: at.TOP_SITES_INSERT,\n            data: {\n              site: {\n                url: this.state.draggedSite.url,\n                label: this.state.draggedTitle,\n                customScreenshotURL: this.state.draggedSite.customScreenshotURL\n              },\n              index,\n              draggedFromIndex: this.state.draggedIndex\n            }\n          }));\n          this.userEvent(\"DROP\", index);\n        }\n        break;\n    }\n  }\n\n  _getTopSites() {\n    // Make a copy of the sites to truncate or extend to desired length\n    let topSites = this.props.TopSites.rows.slice();\n    topSites.length = this.props.TopSitesRows * TOP_SITES_MAX_SITES_PER_ROW;\n    return topSites;\n  }\n\n  /**\n   * Make a preview of the topsites that will be the result of dropping the currently\n   * dragged site at the specified index.\n   */\n  _makeTopSitesPreview(index) {\n    const topSites = this._getTopSites();\n    topSites[this.state.draggedIndex] = null;\n    const pinnedOnly = topSites.map(site => ((site && site.isPinned) ? site : null));\n    const unpinned = topSites.filter(site => site && !site.isPinned);\n    const siteToInsert = Object.assign({}, this.state.draggedSite, {isPinned: true, isDragged: true});\n    if (!pinnedOnly[index]) {\n      pinnedOnly[index] = siteToInsert;\n    } else {\n      // Find the hole to shift the pinned site(s) towards. We shift towards the\n      // hole left by the site being dragged.\n      let holeIndex = index;\n      const indexStep = index > this.state.draggedIndex ? -1 : 1;\n      while (pinnedOnly[holeIndex]) {\n        holeIndex += indexStep;\n      }\n\n      // Shift towards the hole.\n      const shiftingStep = index > this.state.draggedIndex ? 1 : -1;\n      while (holeIndex !== index) {\n        const nextIndex = holeIndex + shiftingStep;\n        pinnedOnly[holeIndex] = pinnedOnly[nextIndex];\n        holeIndex = nextIndex;\n      }\n      pinnedOnly[index] = siteToInsert;\n    }\n\n    // Fill in the remaining holes with unpinned sites.\n    const preview = pinnedOnly;\n    for (let i = 0; i < preview.length; i++) {\n      if (!preview[i]) {\n        preview[i] = unpinned.shift() || null;\n      }\n    }\n\n    return preview;\n  }\n\n  onActivate(index) {\n    this.setState({activeIndex: index});\n  }\n\n  render() {\n    const {props} = this;\n    const topSites = this.state.topSitesPreview || this._getTopSites();\n    const topSitesUI = [];\n    const commonProps = {\n      onDragEvent: this.onDragEvent,\n      dispatch: props.dispatch,\n      intl: props.intl\n    };\n    // We assign a key to each placeholder slot. We need it to be independent\n    // of the slot index (i below) so that the keys used stay the same during\n    // drag and drop reordering and the underlying DOM nodes are reused.\n    // This mostly (only?) affects linux so be sure to test on linux before changing.\n    let holeIndex = 0;\n\n    // On narrow viewports, we only show 6 sites per row. We'll mark the rest as\n    // .hide-for-narrow to hide in CSS via @media query.\n    const maxNarrowVisibleIndex = props.TopSitesRows * 6;\n\n    for (let i = 0, l = topSites.length; i < l; i++) {\n      const link = topSites[i] && Object.assign({}, topSites[i], {iconType: this.props.topSiteIconType(topSites[i])});\n      const slotProps = {\n        key: link ? link.url : holeIndex++,\n        index: i\n      };\n      if (i >= maxNarrowVisibleIndex) {\n        slotProps.className = \"hide-for-narrow\";\n      }\n      topSitesUI.push(!link ? (\n        <TopSitePlaceholder\n          {...slotProps}\n          {...commonProps} />\n      ) : (\n        <TopSite\n          link={link}\n          activeIndex={this.state.activeIndex}\n          onActivate={this.onActivate}\n          {...slotProps}\n          {...commonProps} />\n      ));\n    }\n    return (<ul className={`top-sites-list${this.state.draggedSite ? \" dnd-active\" : \"\"}`}>\n      {topSitesUI}\n    </ul>);\n  }\n}\n\nexport const TopSiteList = injectIntl(_TopSiteList);\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/TopSites/TopSite.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addSnippetsSubscriber} from \"content-src/lib/snippets\";\nimport {Base} from \"content-src/components/Base/Base\";\nimport {DetectUserSessionStart} from \"content-src/lib/detect-user-session-start\";\nimport {initStore} from \"content-src/lib/init-store\";\nimport {Provider} from \"react-redux\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {reducers} from \"common/Reducers.jsm\";\n\nconst store = initStore(reducers, global.gActivityStreamPrerenderedState);\n\nnew DetectUserSessionStart(store).sendEventOrAddListener();\n\n// If we are starting in a prerendered state, we must wait until the first render\n// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,\n// we can request it immedately.\nif (!global.gActivityStreamPrerenderedState) {\n  store.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n}\n\nReactDOM.hydrate(<Provider store={store}>\n  <Base\n    isFirstrun={global.document.location.href === \"about:welcome\"}\n    isPrerendered={!!global.gActivityStreamPrerenderedState}\n    locale={global.document.documentElement.lang}\n    strings={global.gActivityStreamStrings} />\n</Provider>, document.getElementById(\"root\"));\n\naddSnippetsSubscriber(store);\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/activity-stream.jsx","const DATABASE_NAME = \"snippets_db\";\nconst DATABASE_VERSION = 1;\nconst SNIPPETS_OBJECTSTORE_NAME = \"snippets\";\nexport const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.\n\nconst SNIPPETS_ENABLED_EVENT = \"Snippets:Enabled\";\nconst SNIPPETS_DISABLED_EVENT = \"Snippets:Disabled\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {ASRouterContent} from \"content-src/asrouter/asrouter-content\";\n\n/**\n * SnippetsMap - A utility for cacheing values related to the snippet. It has\n *               the same interface as a Map, but is optionally backed by\n *               indexedDB for persistent storage.\n *               Call .connect() to open a database connection and restore any\n *               previously cached data, if necessary.\n *\n */\nexport class SnippetsMap extends Map {\n  constructor(dispatch) {\n    super();\n    this._db = null;\n    this._dispatch = dispatch;\n  }\n\n  set(key, value) {\n    super.set(key, value);\n    return this._dbTransaction(db => db.put(value, key));\n  }\n\n  delete(key) {\n    super.delete(key);\n    return this._dbTransaction(db => db.delete(key));\n  }\n\n  clear() {\n    super.clear();\n    this._dispatch(ac.OnlyToMain({type: at.SNIPPETS_BLOCKLIST_CLEARED}));\n    return this._dbTransaction(db => db.clear());\n  }\n\n  get blockList() {\n    return this.get(\"blockList\") || [];\n  }\n\n  /**\n   * blockSnippetById - Blocks a snippet given an id\n   *\n   * @param  {str|int} id   The id of the snippet\n   * @return {Promise}      Resolves when the id has been written to indexedDB,\n   *                        or immediately if the snippetMap is not connected\n   */\n  async blockSnippetById(id) {\n    if (!id) {\n      return;\n    }\n    const {blockList} = this;\n    if (!blockList.includes(id)) {\n      blockList.push(id);\n      this._dispatch(ac.AlsoToMain({type: at.SNIPPETS_BLOCKLIST_UPDATED, data: id}));\n      await this.set(\"blockList\", blockList);\n    }\n  }\n\n  disableOnboarding() {\n    this._dispatch(ac.AlsoToMain({type: at.DISABLE_ONBOARDING}));\n  }\n\n  showFirefoxAccounts() {\n    this._dispatch(ac.AlsoToMain({type: at.SHOW_FIREFOX_ACCOUNTS}));\n  }\n\n  getTotalBookmarksCount() {\n    return new Promise(resolve => {\n      this._dispatch(ac.OnlyToMain({type: at.TOTAL_BOOKMARKS_REQUEST}));\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n        if (action.type === at.TOTAL_BOOKMARKS_RESPONSE) {\n          resolve(action.data);\n          global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n        }\n      });\n    });\n  }\n\n  getAddonsInfo() {\n    return new Promise(resolve => {\n      this._dispatch(ac.OnlyToMain({type: at.ADDONS_INFO_REQUEST}));\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n        if (action.type === at.ADDONS_INFO_RESPONSE) {\n          resolve(action.data);\n          global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n        }\n      });\n    });\n  }\n\n  /**\n   * connect - Attaches an indexedDB back-end to the Map so that any set values\n   *           are also cached in a store. It also restores any existing values\n   *           that are already stored in the indexedDB store.\n   *\n   * @return {type}  description\n   */\n  async connect() {\n    // Open the connection\n    const db = await this._openDB();\n\n    // Restore any existing values\n    await this._restoreFromDb(db);\n\n    // Attach a reference to the db\n    this._db = db;\n  }\n\n  /**\n   * _dbTransaction - Returns a db transaction wrapped with the given modifier\n   *                  function as a Promise. If the db has not been connected,\n   *                  it resolves immediately.\n   *\n   * @param  {func} modifier A function to call with the transaction\n   * @return {obj}           A Promise that resolves when the transaction has\n   *                         completed or errored\n   */\n  _dbTransaction(modifier) {\n    if (!this._db) {\n      return Promise.resolve();\n    }\n    return new Promise((resolve, reject) => {\n      const transaction = modifier(\n        this._db\n          .transaction(SNIPPETS_OBJECTSTORE_NAME, \"readwrite\")\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME)\n      );\n      transaction.onsuccess = event => resolve();\n\n      /* istanbul ignore next */\n      transaction.onerror = event => reject(transaction.error);\n    });\n  }\n\n  _openDB() {\n    return new Promise((resolve, reject) => {\n      const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n\n      /* istanbul ignore next */\n      openRequest.onerror = event => {\n        // Try to delete the old database so that we can start this process over\n        // next time.\n        indexedDB.deleteDatabase(DATABASE_NAME);\n        reject(event);\n      };\n\n      openRequest.onupgradeneeded = event => {\n        const db = event.target.result;\n        if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {\n          db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);\n        }\n      };\n\n      openRequest.onsuccess = event => {\n        let db = event.target.result;\n\n        /* istanbul ignore next */\n        db.onerror = err => console.error(err); // eslint-disable-line no-console\n        /* istanbul ignore next */\n        db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();\n\n        resolve(db);\n      };\n    });\n  }\n\n  _restoreFromDb(db) {\n    return new Promise((resolve, reject) => {\n      let cursorRequest;\n      try {\n        cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();\n      } catch (err) {\n        // istanbul ignore next\n        reject(err);\n        // istanbul ignore next\n        return;\n      }\n\n      /* istanbul ignore next */\n      cursorRequest.onerror = event => reject(event);\n\n      cursorRequest.onsuccess = event => {\n        let cursor = event.target.result;\n        // Populate the cache from the persistent storage.\n        if (cursor) {\n          if (cursor.value !== \"blockList\") {\n            this.set(cursor.key, cursor.value);\n          }\n          cursor.continue();\n        } else {\n          // We are done.\n          resolve();\n        }\n      };\n    });\n  }\n}\n\n/**\n * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a\n *                    remote location, or else default snippets if the remote\n *                    snippets cannot be retrieved.\n */\nexport class SnippetsProvider {\n  constructor(dispatch) {\n    // Initialize the Snippets Map and attaches it to a global so that\n    // the snippet payload can interact with it.\n    global.gSnippetsMap = new SnippetsMap(dispatch);\n    this._onAction = this._onAction.bind(this);\n  }\n\n  get snippetsMap() {\n    return global.gSnippetsMap;\n  }\n\n  async _refreshSnippets() {\n    // Check if the cached version of of the snippets in snippetsMap. If it's too\n    // old, blow away the entire snippetsMap.\n    const cachedVersion = this.snippetsMap.get(\"snippets-cached-version\");\n\n    if (cachedVersion !== this.appData.version) {\n      this.snippetsMap.clear();\n    }\n\n    // Has enough time passed for us to require an update?\n    const lastUpdate = this.snippetsMap.get(\"snippets-last-update\");\n    const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;\n\n    if (needsUpdate && this.appData.snippetsURL) {\n      this.snippetsMap.set(\"snippets-last-update\", Date.now());\n      try {\n        const response = await fetch(this.appData.snippetsURL);\n        if (response.status === 200) {\n          const payload = await response.text();\n\n          this.snippetsMap.set(\"snippets\", payload);\n          this.snippetsMap.set(\"snippets-cached-version\", this.appData.version);\n        }\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n  }\n\n  _noSnippetFallback() {\n    // TODO\n  }\n\n  _forceOnboardingVisibility(shouldBeVisible) {\n    const onboardingEl = document.getElementById(\"onboarding-notification-bar\");\n\n    if (onboardingEl) {\n      onboardingEl.style.display = shouldBeVisible ? \"\" : \"none\";\n    }\n  }\n\n  _showRemoteSnippets() {\n    const snippetsEl = document.getElementById(this.elementId);\n    const payload = this.snippetsMap.get(\"snippets\");\n\n    if (!snippetsEl) {\n      throw new Error(`No element was found with id '${this.elementId}'.`);\n    }\n\n    // This could happen if fetching failed\n    if (!payload) {\n      throw new Error(\"No remote snippets were found in gSnippetsMap.\");\n    }\n\n    if (typeof payload !== \"string\") {\n      throw new Error(\"Snippet payload was incorrectly formatted\");\n    }\n\n    // Note that injecting snippets can throw if they're invalid XML.\n    // eslint-disable-next-line no-unsanitized/property\n    snippetsEl.innerHTML = payload;\n\n    // Scripts injected by innerHTML are inactive, so we have to relocate them\n    // through DOM manipulation to activate their contents.\n    for (const scriptEl of snippetsEl.getElementsByTagName(\"script\")) {\n      const relocatedScript = document.createElement(\"script\");\n      relocatedScript.text = scriptEl.text;\n      scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);\n    }\n  }\n\n  _onAction(msg) {\n    if (msg.data.type === at.SNIPPET_BLOCKED) {\n      if (!this.snippetsMap.blockList.includes(msg.data.data)) {\n        this.snippetsMap.set(\"blockList\", this.snippetsMap.blockList.concat(msg.data.data));\n        document.getElementById(\"snippets-container\").style.display = \"none\";\n      }\n    }\n  }\n\n  /**\n   * init - Fetch the snippet payload and show snippets\n   *\n   * @param  {obj} options\n   * @param  {str} options.appData.snippetsURL  The URL from which we fetch snippets\n   * @param  {int} options.appData.version  The current snippets version\n   * @param  {str} options.elementId  The id of the element in which to inject snippets\n   * @param  {bool} options.connect  Should gSnippetsMap connect to indexedDB?\n   */\n  async init(options) {\n    Object.assign(this, {\n      appData: {},\n      elementId: \"snippets\",\n      connect: true\n    }, options);\n\n    // Add listener so we know when snippets are blocked on other pages\n    if (global.RPMAddMessageListener) {\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n\n    // TODO: Requires enabling indexedDB on newtab\n    // Restore the snippets map from indexedDB\n    if (this.connect) {\n      try {\n        await this.snippetsMap.connect();\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n\n    // Cache app data values so they can be accessible from gSnippetsMap\n    for (const key of Object.keys(this.appData)) {\n      if (key === \"blockList\") {\n        this.snippetsMap.set(\"blockList\", this.appData[key]);\n      } else {\n        this.snippetsMap.set(`appData.${key}`, this.appData[key]);\n      }\n    }\n\n    // Refresh snippets, if enough time has passed.\n    await this._refreshSnippets();\n\n    // Try showing remote snippets, falling back to defaults if necessary.\n    try {\n      this._showRemoteSnippets();\n    } catch (e) {\n      this._noSnippetFallback(e);\n    }\n\n    window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));\n\n    this._forceOnboardingVisibility(true);\n    this.initialized = true;\n  }\n\n  uninit() {\n    window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));\n    this._forceOnboardingVisibility(false);\n    if (global.RPMRemoveMessageListener) {\n      global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n    this.initialized = false;\n  }\n}\n\n/**\n * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes\n *                         when the store has received the appropriate\n *                         Snippet data.\n *\n * @param  {obj} store   The redux store\n * @return {obj}         Returns the snippets instance, asrouterContent instance and unsubscribe function\n */\nexport function addSnippetsSubscriber(store) {\n  const snippets = new SnippetsProvider(store.dispatch);\n  const asrouterContent = new ASRouterContent();\n\n  let initializing = false;\n\n  store.subscribe(async () => {\n    const state = store.getState();\n    const isASRouterEnabled = state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values.asrouterOnboardingCohort > 0;\n    // state.Prefs.values[\"feeds.snippets\"]:  Should snippets be shown?\n    // state.Snippets.initialized             Is the snippets data initialized?\n    // snippets.initialized:                  Is SnippetsProvider currently initialised?\n    if (state.Prefs.values[\"feeds.snippets\"] &&\n      // If the message center experiment is enabled, don't show snippets\n      !isASRouterEnabled &&\n      !state.Prefs.values.disableSnippets &&\n      state.Snippets.initialized &&\n      !snippets.initialized &&\n      // Don't call init multiple times\n      !initializing &&\n      location.href !== \"about:welcome\"\n    ) {\n      initializing = true;\n      await snippets.init({appData: state.Snippets});\n      initializing = false;\n    } else if (\n      (state.Prefs.values[\"feeds.snippets\"] === false ||\n        state.Prefs.values.disableSnippets === true) &&\n      snippets.initialized\n    ) {\n      snippets.uninit();\n    }\n\n    // Turn on AS Router snippets if the experiment is enabled and the snippets pref is on;\n    // otherwise, turn it off.\n    if (\n      (state.Prefs.values.asrouterExperimentEnabled || state.Prefs.values.asrouterOnboardingCohort > 0) &&\n      state.Prefs.values[\"feeds.snippets\"] &&\n      !asrouterContent.initialized) {\n      asrouterContent.init();\n    } else if (\n      ((!state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values.asrouterOnboardingCohort === 0) || !state.Prefs.values[\"feeds.snippets\"]) &&\n      asrouterContent.initialized\n    ) {\n      asrouterContent.uninit();\n    }\n  });\n\n  // These values are returned for testing purposes\n  return {snippets, asrouterContent};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/lib/snippets.js","import { CachedIterable, mapContextSync } from \"fluent\";\n\n/*\n * `ReactLocalization` handles translation formatting and fallback.\n *\n * The current negotiated fallback chain of languages is stored in the\n * `ReactLocalization` instance in form of an iterable of `MessageContext`\n * instances.  This iterable is used to find the best existing translation for\n * a given identifier.\n *\n * `Localized` components must subscribe to the changes of the\n * `ReactLocalization`'s fallback chain.  When the fallback chain changes (the\n * `messages` iterable is set anew), all subscribed compontent must relocalize.\n *\n * The `ReactLocalization` class instances are exposed to `Localized` elements\n * via the `LocalizationProvider` component.\n */\nexport default class ReactLocalization {\n  constructor(messages) {\n    this.contexts = new CachedIterable(messages);\n    this.subs = new Set();\n  }\n\n  /*\n   * Subscribe a `Localized` component to changes of `messages`.\n   */\n  subscribe(comp) {\n    this.subs.add(comp);\n  }\n\n  /*\n   * Unsubscribe a `Localized` component from `messages` changes.\n   */\n  unsubscribe(comp) {\n    this.subs.delete(comp);\n  }\n\n  /*\n   * Set a new `messages` iterable and trigger the retranslation.\n   */\n  setMessages(messages) {\n    this.contexts = new CachedIterable(messages);\n\n    // Update all subscribed Localized components.\n    this.subs.forEach(comp => comp.relocalize());\n  }\n\n  getMessageContext(id) {\n    return mapContextSync(this.contexts, id);\n  }\n\n  formatCompound(mcx, msg, args) {\n    const value = mcx.format(msg, args);\n\n    if (msg.attrs) {\n      var attrs = {};\n      for (const name of Object.keys(msg.attrs)) {\n        attrs[name] = mcx.format(msg.attrs[name], args);\n      }\n    }\n\n    return { value, attrs };\n  }\n\n  /*\n   * Find a translation by `id` and format it to a string using `args`.\n   */\n  getString(id, args, fallback) {\n    const mcx = this.getMessageContext(id);\n\n    if (mcx === null) {\n      return fallback || id;\n    }\n\n    const msg = mcx.getMessage(id);\n    return mcx.format(msg, args);\n  }\n}\n\nexport function isReactLocalization(props, propName) {\n  const prop = props[propName];\n\n  if (prop instanceof ReactLocalization) {\n    return null;\n  }\n\n  return new Error(\n    `The ${propName} context field must be an instance of ReactLocalization.`\n  );\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent-react/src/localization.js","import { Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ReactLocalization, { isReactLocalization} from \"./localization\";\n\n/*\n * The Provider component for the `ReactLocalization` class.\n *\n * Exposes a `ReactLocalization` instance to all descendants via React's\n * context feature.  It makes translations available to all localizable\n * elements in the descendant's render tree without the need to pass them\n * explicitly.\n *\n *     <LocalizationProvider messages={…}>\n *         …\n *     </LocalizationProvider>\n *\n * The `LocalizationProvider` component takes one prop: `messages`.  It should\n * be an iterable of `MessageContext` instances in order of the user's\n * preferred languages.  The `MessageContext` instances will be used by\n * `ReactLocalization` to format translations.  If a translation is missing in\n * one instance, `ReactLocalization` will fall back to the next one.\n */\nexport default class LocalizationProvider extends Component {\n  constructor(props) {\n    super(props);\n    const { messages } = props;\n\n    if (messages === undefined) {\n      throw new Error(\"LocalizationProvider must receive the messages prop.\");\n    }\n\n    if (!messages[Symbol.iterator]) {\n      throw new Error(\"The messages prop must be an iterable.\");\n    }\n\n    this.l10n = new ReactLocalization(messages);\n  }\n\n  getChildContext() {\n    return {\n      l10n: this.l10n\n    };\n  }\n\n  componentWillReceiveProps(next) {\n    const { messages } = next;\n\n    if (messages !== this.props.messages) {\n      this.l10n.setMessages(messages);\n    }\n  }\n\n  render() {\n    return Children.only(this.props.children);\n  }\n}\n\nLocalizationProvider.childContextTypes = {\n  l10n: isReactLocalization\n};\n\nLocalizationProvider.propTypes = {\n  children: PropTypes.element.isRequired,\n  messages: isIterable\n};\n\nfunction isIterable(props, propName, componentName) {\n  const prop = props[propName];\n\n  if (Symbol.iterator in Object(prop)) {\n    return null;\n  }\n\n  return new Error(\n    `The ${propName} prop supplied to ${componentName} must be an iterable.`\n  );\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent-react/src/provider.js","import { createElement, Component } from \"react\";\n\nimport { isReactLocalization } from \"./localization\";\n\nexport default function withLocalization(Inner) {\n  class WithLocalization extends Component {\n    componentDidMount() {\n      const { l10n } = this.context;\n\n      if (l10n) {\n        l10n.subscribe(this);\n      }\n    }\n\n    componentWillUnmount() {\n      const { l10n } = this.context;\n\n      if (l10n) {\n        l10n.unsubscribe(this);\n      }\n    }\n\n    /*\n     * Rerender this component in a new language.\n     */\n    relocalize() {\n      // When the `ReactLocalization`'s fallback chain changes, update the\n      // component.\n      this.forceUpdate();\n    }\n\n    /*\n     * Find a translation by `id` and format it to a string using `args`.\n     */\n    getString(id, args, fallback) {\n      const { l10n } = this.context;\n\n      if (!l10n) {\n        return fallback || id;\n      }\n\n      return l10n.getString(id, args, fallback);\n    }\n\n    render() {\n      return createElement(\n        Inner,\n        Object.assign(\n          // getString needs to be re-bound on updates to trigger a re-render\n          { getString: (...args) => this.getString(...args) },\n          this.props\n        )\n      );\n    }\n  }\n\n  WithLocalization.displayName = `WithLocalization(${displayName(Inner)})`;\n\n  WithLocalization.contextTypes = {\n    l10n: isReactLocalization\n  };\n\n  return WithLocalization;\n}\n\nfunction displayName(component) {\n  return component.displayName || component.name || \"Component\";\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent-react/src/with_localization.js","/* eslint-env browser */\n\nconst TEMPLATE = document.createElement(\"template\");\n\nexport function parseMarkup(str) {\n  TEMPLATE.innerHTML = str;\n  return TEMPLATE.content;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent-react/src/markup.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\n\nvar omittedCloseTags = {\n  area: true,\n  base: true,\n  br: true,\n  col: true,\n  embed: true,\n  hr: true,\n  img: true,\n  input: true,\n  keygen: true,\n  link: true,\n  meta: true,\n  param: true,\n  source: true,\n  track: true,\n  wbr: true,\n  // NOTE: menuitem's close tag should be omitted, but that causes problems.\n};\n\nexport default omittedCloseTags;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent-react/vendor/omittedCloseTags.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\nimport omittedCloseTags from './omittedCloseTags';\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = {\n  menuitem: true,\n  ...omittedCloseTags,\n};\n\nexport default voidElementTags;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent-react/vendor/voidElementTags.js","import { isValidElement, cloneElement, Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { isReactLocalization } from \"./localization\";\nimport { parseMarkup } from \"./markup\";\nimport VOID_ELEMENTS from \"../vendor/voidElementTags\";\n\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &amp;, &#0038;, &#x0026;.\nconst reMarkup = /<|&#?\\w+;/;\n\n/*\n * Prepare props passed to `Localized` for formatting.\n */\nfunction toArguments(props) {\n  const args = {};\n  const elems = {};\n\n  for (const [propname, propval] of Object.entries(props)) {\n    if (propname.startsWith(\"$\")) {\n      const name = propname.substr(1);\n      args[name] = propval;\n    } else if (isValidElement(propval)) {\n      // We'll try to match localNames of elements found in the translation with\n      // names of elements passed as props. localNames are always lowercase.\n      const name = propname.toLowerCase();\n      elems[name] = propval;\n    }\n  }\n\n  return [args, elems];\n}\n\n/*\n * The `Localized` class renders its child with translated props and children.\n *\n *     <Localized id=\"hello-world\">\n *         <p>{'Hello, world!'}</p>\n *     </Localized>\n *\n * The `id` prop should be the unique identifier of the translation.  Any\n * attributes found in the translation will be applied to the wrapped element.\n *\n * Arguments to the translation can be passed as `$`-prefixed props on\n * `Localized`.\n *\n *     <Localized id=\"hello-world\" $username={name}>\n *         <p>{'Hello, { $username }!'}</p>\n *     </Localized>\n *\n *  It's recommended that the contents of the wrapped component be a string\n *  expression.  The string will be used as the ultimate fallback if no\n *  translation is available.  It also makes it easy to grep for strings in the\n *  source code.\n */\nexport default class Localized extends Component {\n  componentDidMount() {\n    const { l10n } = this.context;\n\n    if (l10n) {\n      l10n.subscribe(this);\n    }\n  }\n\n  componentWillUnmount() {\n    const { l10n } = this.context;\n\n    if (l10n) {\n      l10n.unsubscribe(this);\n    }\n  }\n\n  /*\n   * Rerender this component in a new language.\n   */\n  relocalize() {\n    // When the `ReactLocalization`'s fallback chain changes, update the\n    // component.\n    this.forceUpdate();\n  }\n\n  render() {\n    const { l10n } = this.context;\n    const { id, attrs, children } = this.props;\n    const elem = Children.only(children);\n\n    if (!l10n) {\n      // Use the wrapped component as fallback.\n      return elem;\n    }\n\n    const mcx = l10n.getMessageContext(id);\n\n    if (mcx === null) {\n      // Use the wrapped component as fallback.\n      return elem;\n    }\n\n    const msg = mcx.getMessage(id);\n    const [args, elems] = toArguments(this.props);\n    const {\n      value: messageValue,\n      attrs: messageAttrs\n    } = l10n.formatCompound(mcx, msg, args);\n\n    // The default is to forbid all message attributes. If the attrs prop exists\n    // on the Localized instance, only set message attributes which have been\n    // explicitly allowed by the developer.\n    if (attrs && messageAttrs) {\n      var localizedProps = {};\n\n      for (const [name, value] of Object.entries(messageAttrs)) {\n        if (attrs[name]) {\n          localizedProps[name] = value;\n        }\n      }\n    }\n\n    // If the wrapped component is a known void element, explicitly dismiss the\n    // message value and do not pass it to cloneElement in order to avoid the\n    // \"void element tags must neither have `children` nor use\n    // `dangerouslySetInnerHTML`\" error.\n    if (elem.type in VOID_ELEMENTS) {\n      return cloneElement(elem, localizedProps);\n    }\n\n    // If the message has a null value, we're only interested in its attributes.\n    // Do not pass the null value to cloneElement as it would nuke all children\n    // of the wrapped component.\n    if (messageValue === null) {\n      return cloneElement(elem, localizedProps);\n    }\n\n    // If the message value doesn't contain any markup nor any HTML entities,\n    // insert it as the only child of the wrapped component.\n    if (!reMarkup.test(messageValue)) {\n      return cloneElement(elem, localizedProps, messageValue);\n    }\n\n    // If the message contains markup, parse it and try to match the children\n    // found in the translation with the props passed to this Localized.\n    const translationNodes = Array.from(parseMarkup(messageValue).childNodes);\n    const translatedChildren = translationNodes.map(childNode => {\n      if (childNode.nodeType === childNode.TEXT_NODE) {\n        return childNode.textContent;\n      }\n\n      // If the child is not expected just take its textContent.\n      if (!elems.hasOwnProperty(childNode.localName)) {\n        return childNode.textContent;\n      }\n\n      const sourceChild = elems[childNode.localName];\n\n      // If the element passed as a prop to <Localized> is a known void element,\n      // explicitly dismiss any textContent which might have accidentally been\n      // defined in the translation to prevent the \"void element tags must not\n      // have children\" error.\n      if (sourceChild.type in VOID_ELEMENTS) {\n        return sourceChild;\n      }\n\n      // TODO Protect contents of elements wrapped in <Localized>\n      // https://github.com/projectfluent/fluent.js/issues/184\n      // TODO  Control localizable attributes on elements passed as props\n      // https://github.com/projectfluent/fluent.js/issues/185\n      return cloneElement(sourceChild, null, childNode.textContent);\n    });\n\n    return cloneElement(elem, localizedProps, ...translatedChildren);\n  }\n}\n\nLocalized.contextTypes = {\n  l10n: isReactLocalization\n};\n\nLocalized.propTypes = {\n  children: PropTypes.element.isRequired,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent-react/src/localized.js","/*\n * @module fluent-react\n * @overview\n *\n\n * `fluent-react` provides React bindings for Fluent.  It takes advantage of\n * React's Components system and the virtual DOM.  Translations are exposed to\n * components via the provider pattern.\n *\n *     <LocalizationProvider messages={…}>\n *         <Localized id=\"hello-world\">\n *             <p>{'Hello, world!'}</p>\n *         </Localized>\n *     </LocalizationProvider>\n *\n * Consult the documentation of the `LocalizationProvider` and the `Localized`\n * components for more information.\n */\n\nexport { default as LocalizationProvider } from \"./provider\";\nexport { default as withLocalization } from \"./with_localization\";\nexport { default as Localized } from \"./localized\";\nexport { default as ReactLocalization, isReactLocalization }\n  from \"./localization\";\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fluent-react/src/index.js","module.exports = Redux;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"Redux\"\n// module id = 26\n// module chunks = 0","import React from \"react\";\n\nexport const VISIBLE = \"visible\";\nexport const VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\n/**\n * Component wrapper used to send telemetry pings on every impression.\n */\nexport class ImpressionsWrapper extends React.PureComponent {\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionOrAddListener() {\n    if (this.props.document.visibilityState === VISIBLE) {\n      this.props.sendImpression({id: this.props.id});\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (this.props.document.visibilityState === VISIBLE) {\n          this.props.sendImpression({id: this.props.id});\n          this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.sendOnMount) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  render() {\n    return this.props.children;\n  }\n}\n\nImpressionsWrapper.defaultProps = {\n  document: global.document,\n  sendOnMount: true\n};\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","import React from \"react\";\n\nexport class ModalOverlay extends React.PureComponent {\n  componentWillMount() {\n    this.setState({active: true});\n    document.body.classList.add(\"modal-open\");\n  }\n\n  componentWillUnmount() {\n    document.body.classList.remove(\"modal-open\");\n    this.setState({active: false});\n  }\n\n  render() {\n    const {active} = this.state;\n    const {title, button_label} = this.props;\n    return (\n      <div>\n        <div className={`modalOverlayOuter ${active ? \"active\" : \"\"}`} />\n        <div className={`modalOverlayInner ${active ? \"active\" : \"\"}`}>\n          <h2> {title} </h2>\n          {this.props.children}\n          <div className=\"footer\">\n            <button onClick={this.props.onDoneButton} className=\"button primary modalButton\"> {button_label} </button>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx","import {ModalOverlay} from \"../../components/ModalOverlay/ModalOverlay\";\nimport React from \"react\";\n\nclass OnboardingCard extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n  }\n\n  onClick() {\n    const {props} = this;\n    props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", message_id: props.id, id: props.UISurface});\n    props.onAction(props.content);\n  }\n\n  render() {\n    const {content} = this.props;\n    return (\n      <div className=\"onboardingMessage\">\n        <div className={`onboardingMessageImage ${content.icon}`} />\n        <div className=\"onboardingContent\">\n          <span>\n            <h3> {content.title} </h3>\n            <p> {content.text} </p>\n          </span>\n          <span>\n            <button className=\"button onboardingButton\" onClick={this.onClick}> {content.button_label} </button>\n          </span>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport class OnboardingMessage extends React.PureComponent {\n  render() {\n    const {props} = this;\n    return (\n      <ModalOverlay {...props} button_label={\"Start Browsing\"} title={\"Welcome to Firefox\"}>\n        <div className=\"onboardingMessageContainer\">\n          {props.bundle.map(message => (\n            <OnboardingCard key={message.id}\n              sendUserActionTelemetry={props.sendUserActionTelemetry}\n              onAction={props.onAction}\n              UISurface={props.UISurface}\n              {...message} />\n          ))}\n        </div>\n      </ModalOverlay>\n    );\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx","import React from \"react\";\nimport {safeURI} from \"../../template-utils\";\n\nconst ALLOWED_STYLE_TAGS = [\"color\", \"backgroundColor\"];\n\nexport const Button = props => {\n  const style = {};\n\n  // Add allowed style tags from props, e.g. props.color becomes style={color: props.color}\n  for (const tag of ALLOWED_STYLE_TAGS) {\n    if (typeof props[tag] !== \"undefined\") {\n      style[tag] = props[tag];\n    }\n  }\n  // remove border if bg is set to something custom\n  if (style.backgroundColor) {\n    style.border = \"0\";\n  }\n\n  return (<a href={safeURI(props.url)}\n    onClick={props.onClick}\n    className={props.className || \"ASRouterButton\"}\n    style={style}>\n    {props.children}\n  </a>);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/asrouter/components/Button/Button.jsx","import React from \"react\";\n\nexport class SnippetBase extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBlockClicked = this.onBlockClicked.bind(this);\n  }\n\n  onBlockClicked() {\n    this.props.sendUserActionTelemetry({event: \"BLOCK\", id: this.props.UISurface});\n    this.props.onBlock();\n  }\n\n  render() {\n    const {props} = this;\n\n    const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : \"\"}`;\n\n    return (<div className={containerClassName}>\n      <div className=\"innerWrapper\">\n        {props.children}\n      </div>\n      <button className=\"blockButton\" onClick={this.onBlockClicked} />\n    </div>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/asrouter/components/SnippetBase/SnippetBase.jsx","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {safeURI} from \"../../template-utils\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nconst DEFAULT_ICON_PATH = \"chrome://branding/content/icon64.png\";\n\nexport class SimpleSnippet extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onButtonClick = this.onButtonClick.bind(this);\n  }\n\n  onButtonClick() {\n    this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", id: this.props.UISurface});\n  }\n\n  renderTitle() {\n    const {title} = this.props.content;\n    return title ? <h3 className=\"title\">{title}</h3> : null;\n  }\n\n  renderTitleIcon() {\n    const titleIcon = safeURI(this.props.content.title_icon);\n    return titleIcon ? <span className=\"titleIcon\" style={{backgroundImage: `url(\"${titleIcon}\")`}} /> : null;\n  }\n\n  renderButton(className) {\n    const {props} = this;\n    return (<Button\n      className={className}\n      onClick={this.onButtonClick}\n      url={props.content.button_url}\n      color={props.content.button_color}\n      backgroundColor={props.content.button_background_color}>\n      {props.content.button_label}\n    </Button>);\n  }\n\n  render() {\n    const {props} = this;\n    const hasLink = props.content.button_url && props.content.button_type === \"anchor\";\n    const hasButton = props.content.button_url && !props.content.button_type;\n    const className = `SimpleSnippet${props.content.tall ? \" tall\" : \"\"}`;\n    return (<SnippetBase {...props} className={className}>\n      <img src={safeURI(props.content.icon) || DEFAULT_ICON_PATH} className=\"icon\" />\n      <div>\n        {this.renderTitleIcon()} {this.renderTitle()} <p className=\"body\">{props.richText || props.content.text}</p> {hasLink ? this.renderButton(\"ASRouterAnchor\") : null}\n      </div>\n      {hasButton ? <div>{this.renderButton()}</div> : null}\n    </SnippetBase>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addLocaleData, injectIntl, IntlProvider} from \"react-intl\";\nimport {ASRouterAdmin} from \"content-src/components/ASRouterAdmin/ASRouterAdmin\";\nimport {ConfirmDialog} from \"content-src/components/ConfirmDialog/ConfirmDialog\";\nimport {connect} from \"react-redux\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport {ManualMigration} from \"content-src/components/ManualMigration/ManualMigration\";\nimport {PrerenderData} from \"common/PrerenderData.jsm\";\nimport React from \"react\";\nimport {Search} from \"content-src/components/Search/Search\";\nimport {Sections} from \"content-src/components/Sections/Sections\";\nimport {StartupOverlay} from \"content-src/components/StartupOverlay/StartupOverlay\";\n\nconst PrefsButton = injectIntl(props => (\n  <div className=\"prefs-button\">\n    <button className=\"icon icon-settings\" onClick={props.onClick} title={props.intl.formatMessage({id: \"settings_pane_button_label\"})} />\n  </div>\n));\n\n// Add the locale data for pluralization and relative-time formatting for now,\n// this just uses english locale data. We can make this more sophisticated if\n// more features are needed.\nfunction addLocaleDataForReactIntl(locale) {\n  addLocaleData([{locale, parentLocale: \"en\"}]);\n}\n\nexport class _Base extends React.PureComponent {\n  componentWillMount() {\n    const {App, locale} = this.props;\n    this.sendNewTabRehydrated(App);\n    addLocaleDataForReactIntl(locale);\n  }\n\n  componentDidMount() {\n    // Request state AFTER the first render to ensure we don't cause the\n    // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is\n    // dispatched right after the store is ready.\n    if (this.props.isPrerendered) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n      this.props.dispatch(ac.AlsoToMain({type: at.PAGE_PRERENDERED}));\n    }\n  }\n\n  componentWillUnmount() {\n    this.updateTheme();\n  }\n\n  componentWillUpdate({App}) {\n    this.updateTheme();\n    this.sendNewTabRehydrated(App);\n  }\n\n  updateTheme() {\n    const bodyClassName = [\n      \"activity-stream\",\n      this.props.isFirstrun ? \"welcome\" : \"\"\n    ].filter(v => v).join(\" \");\n    global.document.body.className = bodyClassName;\n  }\n\n  // The NEW_TAB_REHYDRATED event is used to inform feeds that their\n  // data has been consumed e.g. for counting the number of tabs that\n  // have rendered that data.\n  sendNewTabRehydrated(App) {\n    if (App && App.initialized && !this.renderNotified) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));\n      this.renderNotified = true;\n    }\n  }\n\n  render() {\n    const {props} = this;\n    const {App, locale, strings} = props;\n    const {initialized} = App;\n\n    const prefs = props.Prefs.values;\n    if ((prefs.asrouterExperimentEnabled || prefs.asrouterOnboardingCohort > 0) && window.location.hash === \"#asrouter\") {\n      return (<ASRouterAdmin />);\n    }\n\n    if (!props.isPrerendered && !initialized) {\n      return null;\n    }\n\n    // Until we can delete the existing onboarding tour, just hide the onboarding button when users are in\n    // the new simplified onboarding experiment. CSS hacks ftw\n    if (prefs.asrouterOnboardingCohort > 0) {\n      global.document.body.classList.add(\"hide-onboarding\");\n    }\n\n    return (<IntlProvider locale={locale} messages={strings}>\n        <ErrorBoundary className=\"base-content-fallback\">\n          <BaseContent {...this.props} />\n        </ErrorBoundary>\n      </IntlProvider>);\n  }\n}\n\nexport class BaseContent extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.openPreferences = this.openPreferences.bind(this);\n  }\n\n  openPreferences() {\n    this.props.dispatch(ac.OnlyToMain({type: at.SETTINGS_OPEN}));\n    this.props.dispatch(ac.UserEvent({event: \"OPEN_NEWTAB_PREFS\"}));\n  }\n\n  render() {\n    const {props} = this;\n    const {App} = props;\n    const {initialized} = App;\n    const prefs = props.Prefs.values;\n\n    const shouldBeFixedToTop = PrerenderData.arePrefsValid(name => prefs[name]);\n\n    const outerClassName = [\n      \"outer-wrapper\",\n      shouldBeFixedToTop && \"fixed-to-top\"\n    ].filter(v => v).join(\" \");\n\n    return (\n      <div>\n        <div className={outerClassName}>\n          <main>\n            {prefs.showSearch &&\n              <div className=\"non-collapsible-section\">\n                <ErrorBoundary>\n                  <Search />\n                </ErrorBoundary>\n              </div>\n            }\n            <div className={`body-wrapper${(initialized ? \" on\" : \"\")}`}>\n              {!prefs.migrationExpired &&\n                <div className=\"non-collapsible-section\">\n                  <ManualMigration />\n                </div>\n                }\n              <Sections />\n              <PrefsButton onClick={this.openPreferences} />\n            </div>\n            <ConfirmDialog />\n          </main>\n        </div>\n        {this.props.isFirstrun && <StartupOverlay />}\n      </div>);\n  }\n}\n\nexport const Base = connect(state => ({App: state.App, Prefs: state.Prefs}))(_Base);\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/Base/Base.jsx","import {ASRouterUtils} from \"../../asrouter/asrouter-content\";\nimport React from \"react\";\n\nexport class ASRouterAdmin extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessage = this.onMessage.bind(this);\n    this.findOtherBundledMessagesOfSameTemplate = this.findOtherBundledMessagesOfSameTemplate.bind(this);\n    this.state = {};\n  }\n\n  onMessage({data: action}) {\n    if (action.type === \"ADMIN_SET_STATE\") {\n      this.setState(action.data);\n    }\n  }\n\n  componentWillMount() {\n    const endpoint = ASRouterUtils.getEndpoint();\n    ASRouterUtils.sendMessage({type: \"ADMIN_CONNECT_STATE\", data: {endpoint}});\n    ASRouterUtils.addListener(this.onMessage);\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessage);\n  }\n\n  findOtherBundledMessagesOfSameTemplate(template) {\n    return this.state.messages.filter(msg => msg.template === template && msg.bundled);\n  }\n\n  handleBlock(msg) {\n    if (msg.bundled) {\n      // If we are blocking a message that belongs to a bundle, block all other messages that are bundled of that same template\n      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n      return () => ASRouterUtils.blockBundle(bundle);\n    }\n    return () => ASRouterUtils.blockById(msg.id);\n  }\n\n  handleUnblock(msg) {\n    if (msg.bundled) {\n      // If we are unblocking a message that belongs to a bundle, unblock all other messages that are bundled of that same template\n      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n      return () => ASRouterUtils.unblockBundle(bundle);\n    }\n    return () => ASRouterUtils.unblockById(msg.id);\n  }\n\n  handleOverride(id) {\n    return () => ASRouterUtils.overrideMessage(id);\n  }\n\n  renderMessageItem(msg) {\n    const isCurrent = msg.id === this.state.lastMessageId;\n    const isBlocked = this.state.blockList.includes(msg.id);\n\n    let itemClassName = \"message-item\";\n    if (isCurrent) { itemClassName += \" current\"; }\n    if (isBlocked) { itemClassName += \" blocked\"; }\n\n    return (<tr className={itemClassName} key={msg.id}>\n      <td className=\"message-id\"><span>{msg.id}</span></td>\n      <td>\n        <button className={`button ${(isBlocked ? \"\" : \" primary\")}`} onClick={isBlocked ? this.handleUnblock(msg) : this.handleBlock(msg)}>{isBlocked ? \"Unblock\" : \"Block\"}</button>\n       {isBlocked ? null : <button className=\"button\" onClick={this.handleOverride(msg.id)}>Show</button>}\n      </td>\n      <td className=\"message-summary\">\n        <pre>{JSON.stringify(msg, null, 2)}</pre>\n      </td>\n    </tr>);\n  }\n\n  renderMessages() {\n    if (!this.state.messages) {\n      return null;\n    }\n    return (<table><tbody>\n      {this.state.messages.map(msg => this.renderMessageItem(msg))}\n    </tbody></table>);\n  }\n\n  renderProviders() {\n    return (<table><tbody>\n      {this.state.providers.map((provider, i) => (<tr className=\"message-item\" key={i}>\n        <td>{provider.id}</td>\n        <td>{provider.type === \"remote\" ? <a target=\"_blank\" href={provider.url}>{provider.url}</a> : \"(local)\"}</td>\n      </tr>))}\n    </tbody></table>);\n  }\n\n  render() {\n    return (<div className=\"asrouter-admin outer-wrapper\">\n      <h1>AS Router Admin</h1>\n      <button className=\"button primary\" onClick={ASRouterUtils.getNextMessage}>Refresh Current Message</button>\n      <h2>Message Providers</h2>\n      {this.state.providers ? this.renderProviders() : null}\n      <h2>Messages</h2>\n      {this.renderMessages()}\n    </div>);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","import {actionCreators as ac, actionTypes} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * ConfirmDialog component.\n * One primary action button, one cancel button.\n *\n * Content displayed is controlled by `data` prop the component receives.\n * Example:\n * data: {\n *   // Any sort of data needed to be passed around by actions.\n *   payload: site.url,\n *   // Primary button AlsoToMain action.\n *   action: \"DELETE_HISTORY_URL\",\n *   // Primary button USerEvent action.\n *   userEvent: \"DELETE\",\n *   // Array of locale ids to display.\n *   message_body: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n *   // Text for primary button.\n *   confirm_button_string_id: \"menu_action_delete\"\n * },\n */\nexport class _ConfirmDialog extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this._handleCancelBtn = this._handleCancelBtn.bind(this);\n    this._handleConfirmBtn = this._handleConfirmBtn.bind(this);\n  }\n\n  _handleCancelBtn() {\n    this.props.dispatch({type: actionTypes.DIALOG_CANCEL});\n    this.props.dispatch(ac.UserEvent({event: actionTypes.DIALOG_CANCEL, source: this.props.data.eventSource}));\n  }\n\n  _handleConfirmBtn() {\n    this.props.data.onConfirm.forEach(this.props.dispatch);\n  }\n\n  _renderModalMessage() {\n    const message_body = this.props.data.body_string_id;\n\n    if (!message_body) {\n      return null;\n    }\n\n    return (<span>\n      {message_body.map(msg => <p key={msg}><FormattedMessage id={msg} /></p>)}\n    </span>);\n  }\n\n  render() {\n    if (!this.props.visible) {\n      return null;\n    }\n\n    return (<div className=\"confirmation-dialog\">\n      <div className=\"modal-overlay\" onClick={this._handleCancelBtn} />\n      <div className=\"modal\">\n        <section className=\"modal-message\">\n          {this.props.data.icon && <span className={`icon icon-spacer icon-${this.props.data.icon}`} />}\n          {this._renderModalMessage()}\n        </section>\n        <section className=\"actions\">\n          <button onClick={this._handleCancelBtn}>\n            <FormattedMessage id={this.props.data.cancel_button_string_id} />\n          </button>\n          <button className=\"done\" onClick={this._handleConfirmBtn}>\n            <FormattedMessage id={this.props.data.confirm_button_string_id} />\n          </button>\n        </section>\n      </div>\n    </div>);\n  }\n}\n\nexport const ConfirmDialog = connect(state => state.Dialog)(_ConfirmDialog);\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/ConfirmDialog/ConfirmDialog.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * Manual migration component used to start the profile import wizard.\n * Message is presented temporarily and will go away if:\n * 1.  User clicks \"No Thanks\"\n * 2.  User completed the data import\n * 3.  After 3 active days\n * 4.  User clicks \"Cancel\" on the import wizard (currently not implemented).\n */\nexport class _ManualMigration extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onLaunchTour = this.onLaunchTour.bind(this);\n    this.onCancelTour = this.onCancelTour.bind(this);\n  }\n\n  onLaunchTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_START}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_START}));\n  }\n\n  onCancelTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_CANCEL}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_CANCEL}));\n  }\n\n  render() {\n    return (<div className=\"manual-migration-container\">\n        <p>\n          <span className=\"icon icon-import\" />\n          <FormattedMessage id=\"manual_migration_explanation2\" />\n        </p>\n        <div className=\"manual-migration-actions actions\">\n          <button className=\"dismiss\" onClick={this.onCancelTour}>\n            <FormattedMessage id=\"manual_migration_cancel_button\" />\n          </button>\n          <button onClick={this.onLaunchTour}>\n            <FormattedMessage id=\"manual_migration_import_button\" />\n          </button>\n        </div>\n    </div>);\n  }\n}\n\nexport const ManualMigration = connect()(_ManualMigration);\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/ManualMigration/ManualMigration.jsx","class _PrerenderData {\n  constructor(options) {\n    this.initialPrefs = options.initialPrefs;\n    this.initialSections = options.initialSections;\n    this._setValidation(options.validation);\n  }\n\n  get validation() {\n    return this._validation;\n  }\n\n  set validation(value) {\n    this._setValidation(value);\n  }\n\n  get invalidatingPrefs() {\n    return this._invalidatingPrefs;\n  }\n\n    // This is needed so we can use it in the constructor\n  _setValidation(value = []) {\n    this._validation = value;\n    this._invalidatingPrefs = value.reduce((result, next) => {\n      if (typeof next === \"string\") {\n        result.push(next);\n        return result;\n      } else if (next && next.oneOf) {\n        return result.concat(next.oneOf);\n      } else if (next && next.indexedDB) {\n        return result.concat(next.indexedDB);\n      }\n      throw new Error(\"Your validation configuration is not properly configured\");\n    }, []);\n  }\n\n  arePrefsValid(getPref, indexedDBPrefs) {\n    for (const prefs of this.validation) {\n      // {oneOf: [\"foo\", \"bar\"]}\n      if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {\n        return false;\n\n        // {indexedDB: [\"foo\", \"bar\"]}\n      } else if (indexedDBPrefs && prefs && prefs.indexedDB) {\n        const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));\n        if (anyModifiedPrefs) {\n          return false;\n        }\n        // \"foo\"\n      } else if (getPref(prefs) !== this.initialPrefs[prefs]) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nthis.PrerenderData = new _PrerenderData({\n  initialPrefs: {\n    \"migrationExpired\": true,\n    \"feeds.topsites\": true,\n    \"showSearch\": true,\n    \"topSitesRows\": 1,\n    \"feeds.section.topstories\": true,\n    \"feeds.section.highlights\": true,\n    \"sectionOrder\": \"topsites,topstories,highlights\",\n    \"collapsed\": false\n  },\n  // Prefs listed as invalidating will prevent the prerendered version\n  // of AS from being used if their value is something other than what is listed\n  // here. This is required because some preferences cause the page layout to be\n  // too different for the prerendered version to be used. Unfortunately, this\n  // will result in users who have modified some of their preferences not being\n  // able to get the benefits of prerendering.\n  validation: [\n    \"feeds.topsites\",\n    \"showSearch\",\n    \"topSitesRows\",\n    \"sectionOrder\",\n    // This means if either of these are set to their default values,\n    // prerendering can be used.\n    {oneOf: [\"feeds.section.topstories\", \"feeds.section.highlights\"]},\n    // If any component has the following preference set to `true` it will\n    // invalidate the prerendered version.\n    {indexedDB: [\"collapsed\"]}\n  ],\n  initialSections: [\n    {\n      enabled: true,\n      icon: \"pocket\",\n      id: \"topstories\",\n      order: 1,\n      title: {id: \"header_recommended_by\", values: {provider: \"Pocket\"}}\n    },\n    {\n      enabled: true,\n      id: \"highlights\",\n      icon: \"highlights\",\n      order: 2,\n      title: {id: \"header_highlights\"}\n    }\n  ]\n});\n\nthis._PrerenderData = _PrerenderData;\nconst EXPORTED_SYMBOLS = [\"PrerenderData\", \"_PrerenderData\"];\n\n\n\n// WEBPACK FOOTER //\n// ./common/PrerenderData.jsm","/* globals ContentSearchUIController */\n\"use strict\";\n\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {IS_NEWTAB} from \"content-src/lib/constants\";\nimport React from \"react\";\n\nexport class _Search extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onInputMount = this.onInputMount.bind(this);\n  }\n\n  handleEvent(event) {\n    // Also track search events with our own telemetry\n    if (event.detail.type === \"Search\") {\n      this.props.dispatch(ac.UserEvent({event: \"SEARCH\"}));\n    }\n  }\n\n  onClick(event) {\n    window.gContentSearchController.search(event);\n  }\n\n  componentWillUnmount() {\n    delete window.gContentSearchController;\n  }\n\n  onInputMount(input) {\n    if (input) {\n      // The \"healthReportKey\" and needs to be \"newtab\" or \"abouthome\" so that\n      // BrowserUsageTelemetry.jsm knows to handle events with this name, and\n      // can add the appropriate telemetry probes for search. Without the correct\n      // name, certain tests like browser_UsageTelemetry_content.js will fail\n      // (See github ticket #2348 for more details)\n      const healthReportKey = IS_NEWTAB ? \"newtab\" : \"abouthome\";\n\n      // The \"searchSource\" needs to be \"newtab\" or \"homepage\" and is sent with\n      // the search data and acts as context for the search request (See\n      // nsISearchEngine.getSubmission). It is necessary so that search engine\n      // plugins can correctly atribute referrals. (See github ticket #3321 for\n      // more details)\n      const searchSource = IS_NEWTAB ? \"newtab\" : \"homepage\";\n\n      // gContentSearchController needs to exist as a global so that tests for\n      // the existing about:home can find it; and so it allows these tests to pass.\n      // In the future, when activity stream is default about:home, this can be renamed\n      window.gContentSearchController = new ContentSearchUIController(input, input.parentNode,\n        healthReportKey, searchSource);\n      addEventListener(\"ContentSearchClient\", this);\n    } else {\n      window.gContentSearchController = null;\n      removeEventListener(\"ContentSearchClient\", this);\n    }\n  }\n\n  /*\n   * Do not change the ID on the input field, as legacy newtab code\n   * specifically looks for the id 'newtab-search-text' on input fields\n   * in order to execute searches in various tests\n   */\n  render() {\n    return (<div className=\"search-wrapper\">\n      <label htmlFor=\"newtab-search-text\" className=\"search-label\">\n        <span className=\"sr-only\"><FormattedMessage id=\"search_web_placeholder\" /></span>\n      </label>\n      <input\n        id=\"newtab-search-text\"\n        maxLength=\"256\"\n        placeholder={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n        ref={this.onInputMount}\n        title={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n        type=\"search\" />\n      <button\n        id=\"searchSubmit\"\n        className=\"search-button\"\n        onClick={this.onClick}\n        title={this.props.intl.formatMessage({id: \"search_button\"})}>\n        <span className=\"sr-only\"><FormattedMessage id=\"search_button\" /></span>\n      </button>\n    </div>);\n  }\n}\n\nexport const Search = connect()(injectIntl(_Search));\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/Search/Search.jsx","export const IS_NEWTAB = global.document && global.document.documentURI === \"about:newtab\";\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/lib/constants.js","import {Card, PlaceholderCard} from \"content-src/components/Card/Card\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\nimport {Topics} from \"content-src/components/Topics/Topics\";\nimport {TopSites} from \"content-src/components/TopSites/TopSites\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst CARDS_PER_ROW_DEFAULT = 3;\nconst CARDS_PER_ROW_COMPACT_WIDE = 4;\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class Section extends React.PureComponent {\n  get numRows() {\n    const {rowsPref, maxRows, Prefs} = this.props;\n    return rowsPref ? Prefs.values[rowsPref] : maxRows;\n  }\n\n  _dispatchImpressionStats() {\n    const {props} = this;\n    let cardsPerRow = CARDS_PER_ROW_DEFAULT;\n    if (props.compactCards && global.matchMedia(`(min-width: 1072px)`).matches) {\n      // If the section has compact cards and the viewport is wide enough, we show\n      // 4 columns instead of 3.\n      // $break-point-widest = 1072px (from _variables.scss)\n      cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;\n    }\n    const maxCards = cardsPerRow * this.numRows;\n    const cards = props.rows.slice(0, maxCards);\n\n    if (this.needsImpressionStats(cards)) {\n      props.dispatch(ac.ImpressionStats({\n        source: props.eventSource,\n        tiles: cards.map(link => ({id: link.guid}))\n      }));\n      this.impressionCardGuids = cards.map(link => link.guid);\n    }\n  }\n\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionStatsOrAddListener() {\n    const {props} = this;\n\n    if (!props.shouldSendImpressionStats || !props.dispatch) {\n      return;\n    }\n\n    if (props.document.visibilityState === VISIBLE) {\n      this._dispatchImpressionStats();\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (props.document.visibilityState === VISIBLE) {\n          if (!this.props.pref.collapsed) {\n            this._dispatchImpressionStats();\n          }\n          props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.rows.length && !this.props.pref.collapsed) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    const {props} = this;\n    const isCollapsed = props.pref.collapsed;\n    const wasCollapsed = prevProps.pref.collapsed;\n    if (\n      // Don't send impression stats for the empty state\n      props.rows.length &&\n      (\n        // We only want to send impression stats if the content of the cards has changed\n        // and the section is not collapsed...\n        (props.rows !== prevProps.rows && !isCollapsed) ||\n        // or if we are expanding a section that was collapsed.\n        (wasCollapsed && !isCollapsed)\n      )\n    ) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  needsImpressionStats(cards) {\n    if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n      return true;\n    }\n\n    for (let i = 0; i < cards.length; i++) {\n      if (cards[i].guid !== this.impressionCardGuids[i]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  render() {\n    const {\n      id, eventSource, title, icon, rows,\n      emptyState, dispatch, compactCards,\n      contextMenuOptions, initialized, disclaimer,\n      pref, privacyNoticeURL, isFirst, isLast\n    } = this.props;\n\n    const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;\n    const {numRows} = this;\n    const maxCards = maxCardsPerRow * numRows;\n    const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * numRows;\n\n    // Show topics only for top stories and if it's not initialized yet (so\n    // content doesn't shift when it is loaded) or has loaded with topics\n    const shouldShowTopics = (id === \"topstories\" &&\n      (!this.props.topics || this.props.topics.length > 0));\n\n    const realRows = rows.slice(0, maxCards);\n\n    // The empty state should only be shown after we have initialized and there is no content.\n    // Otherwise, we should show placeholders.\n    const shouldShowEmptyState = initialized && !rows.length;\n\n    const cards = [];\n    if (!shouldShowEmptyState) {\n      for (let i = 0; i < maxCards; i++) {\n        const link = realRows[i];\n        // On narrow viewports, we only show 3 cards per row. We'll mark the rest as\n        // .hide-for-narrow to hide in CSS via @media query.\n        const className = (i >= maxCardsOnNarrow) ? \"hide-for-narrow\" : \"\";\n        cards.push(link ? (\n          <Card key={i}\n            index={i}\n            className={className}\n            dispatch={dispatch}\n            link={link}\n            contextMenuOptions={contextMenuOptions}\n            eventSource={eventSource}\n            shouldSendImpressionStats={this.props.shouldSendImpressionStats}\n            isWebExtension={this.props.isWebExtension} />\n        ) : (\n          <PlaceholderCard key={i} className={className} />\n        ));\n      }\n    }\n\n    const sectionClassName = [\n      \"section\",\n      compactCards ? \"compact-cards\" : \"normal-cards\"\n    ].join(\" \");\n\n    // <Section> <-- React component\n    // <section> <-- HTML5 element\n    return (<ComponentPerfTimer {...this.props}>\n      <CollapsibleSection className={sectionClassName} icon={icon}\n        title={title}\n        id={id}\n        eventSource={eventSource}\n        disclaimer={disclaimer}\n        collapsed={this.props.pref.collapsed}\n        showPrefName={(pref && pref.feed) || id}\n        privacyNoticeURL={privacyNoticeURL}\n        Prefs={this.props.Prefs}\n        isFirst={isFirst}\n        isLast={isLast}\n        dispatch={this.props.dispatch}\n        isWebExtension={this.props.isWebExtension}>\n\n        {!shouldShowEmptyState && (<ul className=\"section-list\" style={{padding: 0}}>\n          {cards}\n        </ul>)}\n        {shouldShowEmptyState &&\n          <div className=\"section-empty-state\">\n            <div className=\"empty-state\">\n              {emptyState.icon && emptyState.icon.startsWith(\"moz-extension://\") ?\n                <img className=\"empty-state-icon icon\" style={{\"background-image\": `url('${emptyState.icon}')`}} /> :\n                <img className={`empty-state-icon icon icon-${emptyState.icon}`} />}\n              <p className=\"empty-state-message\">\n                {getFormattedMessage(emptyState.message)}\n              </p>\n            </div>\n          </div>}\n        {shouldShowTopics && <Topics topics={this.props.topics} read_more_endpoint={this.props.read_more_endpoint} />}\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nSection.defaultProps = {\n  document: global.document,\n  rows: [],\n  emptyState: {},\n  pref: {},\n  title: \"\"\n};\n\nexport const SectionIntl = connect(state => ({Prefs: state.Prefs}))(injectIntl(Section));\n\nexport class _Sections extends React.PureComponent {\n  renderSections() {\n    const sections = [];\n    const enabledSections = this.props.Sections.filter(section => section.enabled);\n    const {sectionOrder, \"feeds.topsites\": showTopSites} = this.props.Prefs.values;\n    // Enabled sections doesn't include Top Sites, so we add it if enabled.\n    const expectedCount = enabledSections.length + ~~showTopSites;\n\n    for (const sectionId of sectionOrder.split(\",\")) {\n      const commonProps = {\n        key: sectionId,\n        isFirst: sections.length === 0,\n        isLast: sections.length === expectedCount - 1\n      };\n      if (sectionId === \"topsites\" && showTopSites) {\n        sections.push(<TopSites {...commonProps} />);\n      } else {\n        const section = enabledSections.find(s => s.id === sectionId);\n        if (section) {\n          sections.push(<SectionIntl {...section} {...commonProps} />);\n        }\n      }\n    }\n    return sections;\n  }\n\n  render() {\n    return (\n      <div className=\"sections-list\">\n        {this.renderSections()}\n      </div>\n    );\n  }\n}\n\nexport const Sections = connect(state => ({Sections: state.Sections, Prefs: state.Prefs}))(_Sections);\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/Sections/Sections.jsx","export const cardContextTypes = {\n  history: {\n    intlID: \"type_label_visited\",\n    icon: \"history-item\"\n  },\n  bookmark: {\n    intlID: \"type_label_bookmarked\",\n    icon: \"bookmark-added\"\n  },\n  trending: {\n    intlID: \"type_label_recommended\",\n    icon: \"trending\"\n  },\n  now: {\n    intlID: \"type_label_now\",\n    icon: \"now\"\n  },\n  pocket: {\n    intlID: \"type_label_pocket\",\n    icon: \"pocket\"\n  },\n  download: {\n    intlID: \"type_label_downloaded\",\n    icon: \"download\"\n  }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/Card/types.js","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {cardContextTypes} from \"./types\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport {GetPlatformString} from \"content-src/lib/link-menu-options\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\n\n// Keep track of pending image loads to only request once\nconst gImageLoading = new Map();\n\n/**\n * Card component.\n * Cards are found within a Section component and contain information about a link such\n * as preview image, page title, page description, and some context about if the page\n * was visited, bookmarked, trending etc...\n * Each Section can make an unordered list of Cards which will create one instane of\n * this class. Each card will then get a context menu which reflects the actions that\n * can be done on this Card.\n */\nexport class _Card extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activeCard: null,\n      imageLoaded: false,\n      showContextMenu: false,\n      cardImage: null\n    };\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.onLinkClick = this.onLinkClick.bind(this);\n  }\n\n  /**\n   * Helper to conditionally load an image and update state when it loads.\n   */\n  async maybeLoadImage() {\n    // No need to load if it's already loaded or no image\n    const {cardImage} = this.state;\n    if (!cardImage) {\n      return;\n    }\n\n    const imageUrl = cardImage.url;\n    if (!this.state.imageLoaded) {\n      // Initialize a promise to share a load across multiple card updates\n      if (!gImageLoading.has(imageUrl)) {\n        const loaderPromise = new Promise((resolve, reject) => {\n          const loader = new Image();\n          loader.addEventListener(\"load\", resolve);\n          loader.addEventListener(\"error\", reject);\n          loader.src = imageUrl;\n        });\n\n        // Save and remove the promise only while it's pending\n        gImageLoading.set(imageUrl, loaderPromise);\n        loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(imageUrl)).catch();\n      }\n\n      // Wait for the image whether just started loading or reused promise\n      await gImageLoading.get(imageUrl);\n\n      // Only update state if we're still waiting to load the original image\n      if (ScreenshotUtils.isRemoteImageLocal(this.state.cardImage, this.props.link.image) &&\n          !this.state.imageLoaded) {\n        this.setState({imageLoaded: true});\n      }\n    }\n  }\n\n  /**\n   * Helper to obtain the next state based on nextProps and prevState.\n   *\n   * NOTE: Rename this method to getDerivedStateFromProps when we update React\n   *       to >= 16.3. We will need to update tests as well. We cannot rename this\n   *       method to getDerivedStateFromProps now because there is a mismatch in\n   *       the React version that we are using for both testing and production.\n   *       (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n   *\n   * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n   */\n  static getNextStateFromProps(nextProps, prevState) {\n    const {image} = nextProps.link;\n    const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.cardImage, image);\n    let nextState = null;\n\n    // Image is updating.\n    if (!imageInState && nextProps.link) {\n      nextState = {imageLoaded: false};\n    }\n\n    if (imageInState) {\n      return nextState;\n    }\n\n    // Since image was updated, attempt to revoke old image blob URL, if it exists.\n    ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.cardImage);\n\n    nextState = nextState || {};\n    nextState.cardImage = ScreenshotUtils.createLocalImageObject(image);\n\n    return nextState;\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({\n      activeCard: this.props.index,\n      showContextMenu: true\n    });\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    // Filter out \"history\" type for being the default\n    if (this.props.link.type !== \"history\") {\n      return {value: {card_type: this.props.link.type}};\n    }\n\n    return null;\n  }\n\n  onLinkClick(event) {\n    event.preventDefault();\n    if (this.props.link.type === \"download\") {\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SHOW_DOWNLOAD_FILE,\n        data: this.props.link\n      }));\n    } else {\n      const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.OPEN_LINK,\n        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})\n      }));\n    }\n    if (this.props.isWebExtension) {\n      this.props.dispatch(ac.WebExtEvent(at.WEBEXT_CLICK, {\n        source: this.props.eventSource,\n        url: this.props.link.url,\n        action_position: this.props.index\n      }));\n    } else {\n      this.props.dispatch(ac.UserEvent(Object.assign({\n        event: \"CLICK\",\n        source: this.props.eventSource,\n        action_position: this.props.index\n      }, this._getTelemetryInfo())));\n\n      if (this.props.shouldSendImpressionStats) {\n        this.props.dispatch(ac.ImpressionStats({\n          source: this.props.eventSource,\n          click: 0,\n          tiles: [{id: this.props.link.guid, pos: this.props.index}]\n        }));\n      }\n    }\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  componentDidMount() {\n    this.maybeLoadImage();\n  }\n\n  componentDidUpdate() {\n    this.maybeLoadImage();\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillMount() {\n    const nextState = _Card.getNextStateFromProps(this.props, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillReceiveProps(nextProps) {\n    const nextState = _Card.getNextStateFromProps(nextProps, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  componentWillUnmount() {\n    ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.cardImage);\n  }\n\n  render() {\n    const {index, className, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats} = this.props;\n    const {props} = this;\n    const isContextMenuOpen = this.state.showContextMenu && this.state.activeCard === index;\n    // Display \"now\" as \"trending\" until we have new strings #3402\n    const {icon, intlID} = cardContextTypes[link.type === \"now\" ? \"trending\" : link.type] || {};\n    const hasImage = this.state.cardImage || link.hasImage;\n    const imageStyle = {backgroundImage: this.state.cardImage ? `url(${this.state.cardImage.url})` : \"none\"};\n    const outerClassName = [\n      \"card-outer\",\n      className,\n      isContextMenuOpen && \"active\",\n      props.placeholder && \"placeholder\"\n    ].filter(v => v).join(\" \");\n\n    return (<li className={outerClassName}>\n      <a href={link.type === \"pocket\" ? link.open_url : link.url} onClick={!props.placeholder ? this.onLinkClick : undefined}>\n        <div className=\"card\">\n          <div className=\"card-preview-image-outer\">\n            {hasImage &&\n              <div className={`card-preview-image${this.state.imageLoaded ? \" loaded\" : \"\"}`} style={imageStyle} />\n            }\n          </div>\n          <div className=\"card-details\">\n            {link.type === \"download\" && <div className=\"card-host-name alternate\"><FormattedMessage id={GetPlatformString(this.props.platform)} /></div>}\n            {link.hostname &&\n              <div className=\"card-host-name\">\n                {link.hostname.slice(0, 100)}{link.type === \"download\" && `  \\u2014 ${link.description}`}\n              </div>\n            }\n            <div className={[\n              \"card-text\",\n              icon ? \"\" : \"no-context\",\n              link.description ? \"\" : \"no-description\",\n              link.hostname ? \"\" : \"no-host-name\"\n            ].join(\" \")}>\n              <h4 className=\"card-title\" dir=\"auto\">{link.title}</h4>\n              <p className=\"card-description\" dir=\"auto\">{link.description}</p>\n            </div>\n            <div className=\"card-context\">\n              {icon && !link.context && <span className={`card-context-icon icon icon-${icon}`} />}\n              {link.icon && link.context && <span className=\"card-context-icon icon\" style={{backgroundImage: `url('${link.icon}')`}} />}\n              {intlID && !link.context && <div className=\"card-context-label\"><FormattedMessage id={intlID} defaultMessage=\"Visited\" /></div>}\n              {link.context && <div className=\"card-context-label\">{link.context}</div>}\n            </div>\n          </div>\n        </div>\n      </a>\n      {!props.placeholder && <button className=\"context-menu-button icon\"\n        onClick={this.onMenuButtonClick}>\n        <span className=\"sr-only\">{`Open context menu for ${link.title}`}</span>\n      </button>}\n      {isContextMenuOpen &&\n        <LinkMenu\n          dispatch={dispatch}\n          index={index}\n          source={eventSource}\n          onUpdate={this.onMenuUpdate}\n          options={link.contextMenuOptions || contextMenuOptions}\n          site={link}\n          siteInfo={this._getTelemetryInfo()}\n          shouldSendImpressionStats={shouldSendImpressionStats} />\n      }\n   </li>);\n  }\n}\n_Card.defaultProps = {link: {}};\nexport const Card = connect(state => ({platform: state.Prefs.values.platform}))(_Card);\nexport const PlaceholderCard = props => <Card placeholder={true} className={props.className} />;\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/Card/Card.jsx","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst DEFAULT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"RemoveSection\", \"CheckCollapsed\", \"Separator\", \"ManageSection\"];\nconst WEBEXT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"CheckCollapsed\", \"Separator\", \"ManageWebExtension\"];\n\nexport class _SectionMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n\n    const propOptions = props.isWebExtension ? [...WEBEXT_SECTION_MENU_OPTIONS] : [...DEFAULT_SECTION_MENU_OPTIONS];\n    // Prepend custom options and a separator\n    if (props.extraOptions) {\n      propOptions.splice(0, 0, ...props.extraOptions, \"Separator\");\n    }\n    // Insert privacy notice before the last option (\"ManageSection\")\n    if (props.privacyNoticeURL) {\n      propOptions.splice(-1, 0, \"PrivacyNotice\");\n    }\n\n    const options = propOptions.map(o => SectionMenuOptions[o](props)).map(option => {\n      const {action, id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            props.dispatch(ac.UserEvent({\n              event: userEvent,\n              source: props.source\n            }));\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nexport const SectionMenu = injectIntl(_SectionMenu);\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/SectionMenu/SectionMenu.jsx","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class Topic extends React.PureComponent {\n  render() {\n    const {url, name} = this.props;\n    return (<li><a key={name} className=\"topic-link\" href={url}>{name}</a></li>);\n  }\n}\n\nexport class Topics extends React.PureComponent {\n  render() {\n    const {topics, read_more_endpoint} = this.props;\n    return (\n      <div className=\"topic\">\n        <span><FormattedMessage id=\"pocket_read_more\" /></span>\n        <ul>{topics && topics.map(t => <Topic key={t.name} url={t.url} name={t.name} />)}</ul>\n\n        {read_more_endpoint && <a className=\"topic-read-more\" href={read_more_endpoint}>\n          <FormattedMessage id=\"pocket_read_even_more\" />\n        </a>}\n      </div>\n    );\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/Topics/Topics.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {MIN_CORNER_FAVICON_SIZE, MIN_RICH_FAVICON_SIZE, TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\nimport {TopSiteForm} from \"./TopSiteForm\";\nimport {TopSiteList} from \"./TopSite\";\n\nfunction topSiteIconType(link) {\n  if (link.customScreenshotURL) {\n    return \"custom_screenshot\";\n  }\n  if (link.tippyTopIcon || link.faviconRef === \"tippytop\") {\n    return \"tippytop\";\n  }\n  if (link.faviconSize >= MIN_RICH_FAVICON_SIZE) {\n    return \"rich_icon\";\n  }\n  if (link.screenshot && link.faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n    return \"screenshot_with_icon\";\n  }\n  if (link.screenshot) {\n    return \"screenshot\";\n  }\n  return \"no_image\";\n}\n\n/**\n * Iterates through TopSites and counts types of images.\n * @param acc Accumulator for reducer.\n * @param topsite Entry in TopSites.\n */\nfunction countTopSitesIconsTypes(topSites) {\n  const countTopSitesTypes = (acc, link) => {\n    acc[topSiteIconType(link)]++;\n    return acc;\n  };\n\n  return topSites.reduce(countTopSitesTypes, {\n    \"custom_screenshot\": 0,\n    \"screenshot_with_icon\": 0,\n    \"screenshot\": 0,\n    \"tippytop\": 0,\n    \"rich_icon\": 0,\n    \"no_image\": 0\n  });\n}\n\nexport class _TopSites extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onFormClose = this.onFormClose.bind(this);\n  }\n\n  /**\n   * Dispatch session statistics about the quality of TopSites icons and pinned count.\n   */\n  _dispatchTopSitesStats() {\n    const topSites = this._getVisibleTopSites();\n    const topSitesIconsStats = countTopSitesIconsTypes(topSites);\n    const topSitesPinned = topSites.filter(site => !!site.isPinned).length;\n    // Dispatch telemetry event with the count of TopSites images types.\n    this.props.dispatch(ac.AlsoToMain({\n      type: at.SAVE_SESSION_PERF_DATA,\n      data: {topsites_icon_stats: topSitesIconsStats, topsites_pinned: topSitesPinned}\n    }));\n  }\n\n  /**\n   * Return the TopSites that are visible based on prefs and window width.\n   */\n  _getVisibleTopSites() {\n    // We hide 2 sites per row when not in the wide layout.\n    let sitesPerRow = TOP_SITES_MAX_SITES_PER_ROW;\n    // $break-point-widest = 1072px (from _variables.scss)\n    if (!global.matchMedia(`(min-width: 1072px)`).matches) {\n      sitesPerRow -= 2;\n    }\n    return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);\n  }\n\n  componentDidUpdate() {\n    this._dispatchTopSitesStats();\n  }\n\n  componentDidMount() {\n    this._dispatchTopSitesStats();\n  }\n\n  onFormClose() {\n    this.props.dispatch(ac.UserEvent({\n      source: TOP_SITES_SOURCE,\n      event: \"TOP_SITES_EDIT_CLOSE\"\n    }));\n    this.props.dispatch({type: at.TOP_SITES_CANCEL_EDIT});\n  }\n\n  render() {\n    const {props} = this;\n    const {editForm} = props.TopSites;\n\n    return (<ComponentPerfTimer id=\"topsites\" initialized={props.TopSites.initialized} dispatch={props.dispatch}>\n      <CollapsibleSection\n        className=\"top-sites\"\n        icon=\"topsites\"\n        id=\"topsites\"\n        title={{id: \"header_top_sites\"}}\n        extraMenuOptions={[\"AddTopSite\"]}\n        showPrefName=\"feeds.topsites\"\n        eventSource={TOP_SITES_SOURCE}\n        collapsed={props.TopSites.pref ? props.TopSites.pref.collapsed : undefined}\n        isFirst={props.isFirst}\n        isLast={props.isLast}\n        dispatch={props.dispatch}>\n        <TopSiteList TopSites={props.TopSites} TopSitesRows={props.TopSitesRows} dispatch={props.dispatch} intl={props.intl} topSiteIconType={topSiteIconType} />\n        <div className=\"edit-topsites-wrapper\">\n          {editForm &&\n            <div className=\"edit-topsites\">\n              <div className=\"modal-overlay\" onClick={this.onFormClose} />\n              <div className=\"modal\">\n                <TopSiteForm\n                  site={props.TopSites.rows[editForm.index]}\n                  onClose={this.onFormClose}\n                  dispatch={this.props.dispatch}\n                  intl={this.props.intl}\n                  {...editForm} />\n              </div>\n            </div>\n          }\n        </div>\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nexport const TopSites = connect(state => ({\n  TopSites: state.TopSites,\n  Prefs: state.Prefs,\n  TopSitesRows: state.Prefs.values.topSitesRows\n}))(injectIntl(_TopSites));\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/TopSites/TopSites.jsx","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class TopSiteFormInput extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {validationError: this.props.validationError};\n    this.onChange = this.onChange.bind(this);\n    this.onMount = this.onMount.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (nextProps.shouldFocus && !this.props.shouldFocus) {\n      this.input.focus();\n    }\n    if (nextProps.validationError && !this.props.validationError) {\n      this.setState({validationError: true});\n    }\n    // If the component is in an error state but the value was cleared by the parent\n    if (this.state.validationError && !nextProps.value) {\n      this.setState({validationError: false});\n    }\n  }\n\n  onChange(ev) {\n    if (this.state.validationError) {\n      this.setState({validationError: false});\n    }\n    this.props.onChange(ev);\n  }\n\n  onMount(input) {\n    this.input = input;\n  }\n\n  render() {\n    const showClearButton = this.props.value && this.props.onClear;\n    const {typeUrl} = this.props;\n    const {validationError} = this.state;\n\n    return (<label><FormattedMessage id={this.props.titleId} />\n      <div className={`field ${typeUrl ? \"url\" : \"\"}${validationError ? \" invalid\" : \"\"}`}>\n        {this.props.loading ?\n          <div className=\"loading-container\"><div className=\"loading-animation\" /></div> :\n          showClearButton && <div className=\"icon icon-clear-input\" onClick={this.props.onClear} />}\n        <input type=\"text\"\n          value={this.props.value}\n          ref={this.onMount}\n          onChange={this.onChange}\n          placeholder={this.props.intl.formatMessage({id: this.props.placeholderId})}\n          autoFocus={this.props.shouldFocus}\n          disabled={this.props.loading} />\n        {validationError &&\n          <aside className=\"error-tooltip\">\n            <FormattedMessage id={this.props.errorMessageId} />\n          </aside>}\n      </div>\n    </label>);\n  }\n}\n\nTopSiteFormInput.defaultProps = {\n  showClearButton: false,\n  value: \"\",\n  validationError: false\n};\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/TopSites/TopSiteFormInput.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {TopSiteFormInput} from \"./TopSiteFormInput\";\nimport {TopSiteLink} from \"./TopSite\";\n\nexport class TopSiteForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    const {site} = props;\n    this.state = {\n      label: site ? (site.label || site.hostname) : \"\",\n      url: site ? site.url : \"\",\n      validationError: false,\n      customScreenshotUrl: site ? site.customScreenshotURL : \"\",\n      showCustomScreenshotForm: site ? site.customScreenshotURL : false\n    };\n    this.onClearScreenshotInput = this.onClearScreenshotInput.bind(this);\n    this.onLabelChange = this.onLabelChange.bind(this);\n    this.onUrlChange = this.onUrlChange.bind(this);\n    this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n    this.onClearUrlClick = this.onClearUrlClick.bind(this);\n    this.onDoneButtonClick = this.onDoneButtonClick.bind(this);\n    this.onCustomScreenshotUrlChange = this.onCustomScreenshotUrlChange.bind(this);\n    this.onPreviewButtonClick = this.onPreviewButtonClick.bind(this);\n    this.onEnableScreenshotUrlForm = this.onEnableScreenshotUrlForm.bind(this);\n    this.validateUrl = this.validateUrl.bind(this);\n  }\n\n  onLabelChange(event) {\n    this.setState({\"label\": event.target.value});\n  }\n\n  onUrlChange(event) {\n    this.setState({\n      url: event.target.value,\n      validationError: false\n    });\n  }\n\n  onClearUrlClick() {\n    this.setState({\n      url: \"\",\n      validationError: false\n    });\n  }\n\n  onEnableScreenshotUrlForm() {\n    this.setState({showCustomScreenshotForm: true});\n  }\n\n  _updateCustomScreenshotInput(customScreenshotUrl) {\n    this.setState({\n      customScreenshotUrl,\n      validationError: false\n    });\n    this.props.dispatch({type: at.PREVIEW_REQUEST_CANCEL});\n  }\n\n  onCustomScreenshotUrlChange(event) {\n    this._updateCustomScreenshotInput(event.target.value);\n  }\n\n  onClearScreenshotInput() {\n    this._updateCustomScreenshotInput(\"\");\n  }\n\n  onCancelButtonClick(ev) {\n    ev.preventDefault();\n    this.props.onClose();\n  }\n\n  onDoneButtonClick(ev) {\n    ev.preventDefault();\n\n    if (this.validateForm()) {\n      const site = {url: this.cleanUrl(this.state.url)};\n      const {index} = this.props;\n      if (this.state.label !== \"\") {\n        site.label = this.state.label;\n      }\n\n      if (this.state.customScreenshotUrl) {\n        site.customScreenshotURL = this.cleanUrl(this.state.customScreenshotUrl);\n      } else if (this.props.site && this.props.site.customScreenshotURL) {\n        // Used to flag that previously cached screenshot should be removed\n        site.customScreenshotURL = null;\n      }\n      this.props.dispatch(ac.AlsoToMain({\n        type: at.TOP_SITES_PIN,\n        data: {site, index}\n      }));\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"TOP_SITES_EDIT\",\n        action_position: index\n      }));\n\n      this.props.onClose();\n    }\n  }\n\n  onPreviewButtonClick(event) {\n    event.preventDefault();\n    if (this.validateForm()) {\n      this.props.dispatch(ac.AlsoToMain({\n        type: at.PREVIEW_REQUEST,\n        data: {url: this.cleanUrl(this.state.customScreenshotUrl)}\n      }));\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"PREVIEW_REQUEST\"\n      }));\n    }\n  }\n\n  cleanUrl(url) {\n    // If we are missing a protocol, prepend http://\n    if (!url.startsWith(\"http:\") && !url.startsWith(\"https:\")) {\n      return `http://${url}`;\n    }\n    return url;\n  }\n\n  _tryParseUrl(url) {\n    try {\n      return new URL(url);\n    } catch (e) {\n      return null;\n    }\n  }\n\n  validateUrl(url) {\n    const validProtocols = [\"http:\", \"https:\"];\n    const urlObj = this._tryParseUrl(url) || this._tryParseUrl(this.cleanUrl(url));\n\n    return urlObj && validProtocols.includes(urlObj.protocol);\n  }\n\n  validateCustomScreenshotUrl() {\n    const {customScreenshotUrl} = this.state;\n    return !customScreenshotUrl || this.validateUrl(customScreenshotUrl);\n  }\n\n  validateForm() {\n    const validate = this.validateUrl(this.state.url) && this.validateCustomScreenshotUrl();\n\n    if (!validate) {\n      this.setState({validationError: true});\n    }\n\n    return validate;\n  }\n\n  _renderCustomScreenshotInput() {\n    const {customScreenshotUrl} = this.state;\n    const requestFailed = this.props.previewResponse === \"\";\n    const validationError = (this.state.validationError && !this.validateCustomScreenshotUrl()) || requestFailed;\n    // Set focus on error if the url field is valid or when the input is first rendered and is empty\n    const shouldFocus = (validationError && this.validateUrl(this.state.url)) || !customScreenshotUrl;\n    const isLoading = this.props.previewResponse === null &&\n      customScreenshotUrl && this.props.previewUrl === this.cleanUrl(customScreenshotUrl);\n\n    if (!this.state.showCustomScreenshotForm) {\n      return (<a className=\"enable-custom-image-input\" onClick={this.onEnableScreenshotUrlForm}>\n        <FormattedMessage id=\"topsites_form_use_image_link\" />\n      </a>);\n    }\n    return (<div className=\"custom-image-input-container\">\n      <TopSiteFormInput\n        errorMessageId={requestFailed ? \"topsites_form_image_validation\" : \"topsites_form_url_validation\"}\n        loading={isLoading}\n        onChange={this.onCustomScreenshotUrlChange}\n        onClear={this.onClearScreenshotInput}\n        shouldFocus={shouldFocus}\n        typeUrl={true}\n        value={customScreenshotUrl}\n        validationError={validationError}\n        titleId=\"topsites_form_image_url_label\"\n        placeholderId=\"topsites_form_url_placeholder\"\n        intl={this.props.intl} />\n    </div>);\n  }\n\n  render() {\n    const {customScreenshotUrl} = this.state;\n    const requestFailed = this.props.previewResponse === \"\";\n    // For UI purposes, editing without an existing link is \"add\"\n    const showAsAdd = !this.props.site;\n    const previous = (this.props.site && this.props.site.customScreenshotURL) || \"\";\n    const changed = customScreenshotUrl && this.cleanUrl(customScreenshotUrl) !== previous;\n    // Preview mode if changes were made to the custom screenshot URL and no preview was received yet\n    // or the request failed\n    const previewMode = changed && !this.props.previewResponse;\n    const previewLink = Object.assign({}, this.props.site);\n    if (this.props.previewResponse) {\n      previewLink.screenshot = this.props.previewResponse;\n      previewLink.customScreenshotURL = this.props.previewUrl;\n    }\n    return (\n      <form className=\"topsite-form\">\n        <div className=\"form-input-container\">\n          <h3 className=\"section-title\">\n            <FormattedMessage id={showAsAdd ? \"topsites_form_add_header\" : \"topsites_form_edit_header\"} />\n          </h3>\n          <div className=\"fields-and-preview\">\n            <div className=\"form-wrapper\">\n              <TopSiteFormInput onChange={this.onLabelChange}\n                value={this.state.label}\n                titleId=\"topsites_form_title_label\"\n                placeholderId=\"topsites_form_title_placeholder\"\n                intl={this.props.intl} />\n              <TopSiteFormInput onChange={this.onUrlChange}\n                shouldFocus={this.state.validationError && !this.validateUrl(this.state.url)}\n                value={this.state.url}\n                onClear={this.onClearUrlClick}\n                validationError={this.state.validationError && !this.validateUrl(this.state.url)}\n                titleId=\"topsites_form_url_label\"\n                typeUrl={true}\n                placeholderId=\"topsites_form_url_placeholder\"\n                errorMessageId=\"topsites_form_url_validation\"\n                intl={this.props.intl} />\n              {this._renderCustomScreenshotInput()}\n            </div>\n            <TopSiteLink link={previewLink}\n              defaultStyle={requestFailed}\n              title={this.state.label} />\n          </div>\n        </div>\n        <section className=\"actions\">\n          <button className=\"cancel\" type=\"button\" onClick={this.onCancelButtonClick}>\n            <FormattedMessage id=\"topsites_form_cancel_button\" />\n          </button>\n          {previewMode ?\n            <button className=\"done preview\" type=\"submit\" onClick={this.onPreviewButtonClick}>\n              <FormattedMessage id=\"topsites_form_preview_button\" />\n            </button> :\n            <button className=\"done\" type=\"submit\" onClick={this.onDoneButtonClick}>\n              <FormattedMessage id={showAsAdd ? \"topsites_form_add_button\" : \"topsites_form_save_button\"} />\n            </button>}\n        </section>\n      </form>\n    );\n  }\n}\n\nTopSiteForm.defaultProps = {\n  site: null,\n  index: -1\n};\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/TopSites/TopSiteForm.jsx","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\n\nexport class _StartupOverlay extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onInputChange = this.onInputChange.bind(this);\n    this.onSubmit = this.onSubmit.bind(this);\n    this.clickSkip = this.clickSkip.bind(this);\n    this.initScene = this.initScene.bind(this);\n    this.removeOverlay = this.removeOverlay.bind(this);\n    this.onInputInvalid = this.onInputInvalid.bind(this);\n\n    this.state = {emailInput: \"\"};\n    this.initScene();\n  }\n\n  initScene() {\n    // Timeout to allow the scene to render once before attaching the attribute\n    // to trigger the animation.\n    setTimeout(() => {\n      this.setState({show: true});\n    }, 10);\n  }\n\n  removeOverlay() {\n    window.removeEventListener(\"visibilitychange\", this.removeOverlay);\n    this.setState({show: false});\n    setTimeout(() => {\n      // Allow scrolling and fully remove overlay after animation finishes.\n      document.body.classList.remove(\"welcome\");\n    }, 400);\n  }\n\n  onInputChange(e) {\n    let error = e.target.previousSibling;\n    this.setState({emailInput: e.target.value});\n    error.classList.remove(\"active\");\n    e.target.classList.remove(\"invalid\");\n  }\n\n  onSubmit() {\n    this.props.dispatch(ac.UserEvent({event: \"SUBMIT_EMAIL\"}));\n    window.addEventListener(\"visibilitychange\", this.removeOverlay);\n  }\n\n  clickSkip() {\n    this.props.dispatch(ac.UserEvent({event: \"SKIPPED_SIGNIN\"}));\n    this.removeOverlay();\n  }\n\n  onInputInvalid(e) {\n    let error = e.target.previousSibling;\n    error.classList.add(\"active\");\n    e.target.classList.add(\"invalid\");\n    e.preventDefault(); // Override built-in form validation popup\n  }\n\n  render() {\n    let termsLink = (<a href=\"https://accounts.firefox.com/legal/terms\" target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_terms_of_service\" /></a>);\n    let privacyLink = (<a href=\"https://accounts.firefox.com/legal/privacy\" target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_privacy_notice\" /></a>);\n    return (\n      <div className={`overlay-wrapper ${this.state.show ? \"show \" : \"\"}`}>\n        <div className=\"background\" />\n        <div className=\"firstrun-scene\">\n          <div className=\"fxaccounts-container\">\n            <div className=\"firstrun-left-divider\">\n              <h1 className=\"firstrun-title\"><FormattedMessage id=\"firstrun_title\" /></h1>\n              <p className=\"firstrun-content\"><FormattedMessage id=\"firstrun_content\" /></p>\n              <a className=\"firstrun-link\" href=\"https://www.mozilla.org/firefox/features/sync/\" target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_learn_more_link\" /></a>\n            </div>\n            <div className=\"firstrun-sign-in\">\n              <p className=\"form-header\"><FormattedMessage id=\"firstrun_form_header\" /><span className=\"sub-header\"><FormattedMessage id=\"firstrun_form_sub_header\" /></span></p>\n              <form method=\"get\" action=\"https://accounts.firefox.com\" target=\"_blank\" rel=\"noopener noreferrer\" onSubmit={this.onSubmit}>\n                <input name=\"service\" type=\"hidden\" value=\"sync\" />\n                <input name=\"action\" type=\"hidden\" value=\"email\" />\n                <input name=\"context\" type=\"hidden\" value=\"fx_desktop_v3\" />\n                <input name=\"entrypoint\" type=\"hidden\" value=\"activity-stream-firstrun\" />\n                <input name=\"utm_source\" type=\"hidden\" value=\"activity-stream\" />\n                <input name=\"utm_campaign\" type=\"hidden\" value=\"firstrun\" />\n                <span className=\"error\">{this.props.intl.formatMessage({id: \"firstrun_invalid_input\"})}</span>\n                <input className=\"email-input\" name=\"email\" type=\"email\" required=\"true\" onInvalid={this.onInputInvalid} placeholder={this.props.intl.formatMessage({id: \"firstrun_email_input_placeholder\"})} onChange={this.onInputChange} />\n                <div className=\"extra-links\">\n                  <FormattedMessage\n                    id=\"firstrun_extra_legal_links\"\n                    values={{\n                      terms: termsLink,\n                      privacy: privacyLink\n                    }} />\n                </div>\n                <button className=\"continue-button\" type=\"submit\"><FormattedMessage id=\"firstrun_continue_to_login\" /></button>\n              </form>\n              <button className=\"skip-button\" disabled={!!this.state.emailInput} onClick={this.clickSkip}><FormattedMessage id=\"firstrun_skip_login\" /></button>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport const StartupOverlay = connect()(injectIntl(_StartupOverlay));\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/components/StartupOverlay/StartupOverlay.jsx","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class DetectUserSessionStart {\n  constructor(store, options = {}) {\n    this._store = store;\n    // Overrides for testing\n    this.document = options.document || global.document;\n    this._perfService = options.perfService || perfSvc;\n    this._onVisibilityChange = this._onVisibilityChange.bind(this);\n  }\n\n  /**\n   * sendEventOrAddListener - Notify immediately if the page is already visible,\n   *                    or else set up a listener for when visibility changes.\n   *                    This is needed for accurate session tracking for telemetry,\n   *                    because tabs are pre-loaded.\n   */\n  sendEventOrAddListener() {\n    if (this.document.visibilityState === VISIBLE) {\n      // If the document is already visible, to the user, send a notification\n      // immediately that a session has started.\n      this._sendEvent();\n    } else {\n      // If the document is not visible, listen for when it does become visible.\n      this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  /**\n   * _sendEvent - Sends a message to the main process to indicate the current\n   *              tab is now visible to the user, includes the\n   *              visibility_event_rcvd_ts time in ms from the UNIX epoch.\n   */\n  _sendEvent() {\n    this._perfService.mark(\"visibility_event_rcvd_ts\");\n\n    try {\n      let visibility_event_rcvd_ts = this._perfService\n        .getMostRecentAbsMarkStartByName(\"visibility_event_rcvd_ts\");\n\n      this._store.dispatch(ac.AlsoToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data: {visibility_event_rcvd_ts}\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up.\n    }\n  }\n\n  /**\n   * _onVisibilityChange - If the visibility has changed to visible, sends a notification\n   *                      and removes the event listener. This should only be called once per tab.\n   */\n  _onVisibilityChange() {\n    if (this.document.visibilityState === VISIBLE) {\n      this._sendEvent();\n      this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./content-src/lib/detect-user-session-start.js"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./content-src/activity-stream.jsx","webpack:///(webpack)/buildin/global.js","webpack:///./common/Actions.jsm","webpack:///./content-src/lib/snippets.js","webpack:///./content-src/asrouter/asrouter-content.jsx","webpack:///external \"React\"","webpack:///external \"PropTypes\"","webpack:///./content-src/lib/init-store.js","webpack:///external \"Redux\"","webpack:///./content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx","webpack:///external \"ReactDOM\"","webpack:///./content-src/asrouter/template-utils.js","webpack:///./content-src/components/Base/Base.jsx","webpack:///external \"ReactIntl\"","webpack:///./content-src/components/ASRouterAdmin/ASRouterAdmin.jsx","webpack:///./content-src/components/ConfirmDialog/ConfirmDialog.jsx","webpack:///external \"ReactRedux\"","webpack:///./content-src/components/ErrorBoundary/ErrorBoundary.jsx","webpack:///./content-src/components/ManualMigration/ManualMigration.jsx","webpack:///./common/PrerenderData.jsm","webpack:///./content-src/components/Search/Search.jsx","webpack:///./content-src/lib/constants.js","webpack:///./content-src/components/Sections/Sections.jsx","webpack:///./content-src/lib/link-menu-options.js","webpack:///./content-src/components/LinkMenu/LinkMenu.jsx","webpack:///./content-src/components/ContextMenu/ContextMenu.jsx","webpack:///./content-src/lib/screenshot-utils.js","webpack:///./content-src/components/CollapsibleSection/CollapsibleSection.jsx","webpack:///./content-src/components/SectionMenu/SectionMenu.jsx","webpack:///./content-src/lib/section-menu-options.js","webpack:///./content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx","webpack:///./common/PerfService.jsm","webpack:///./content-src/components/Topics/Topics.jsx","webpack:///./content-src/components/TopSites/TopSites.jsx","webpack:///./content-src/components/TopSites/TopSitesConstants.js","webpack:///./content-src/components/TopSites/TopSite.jsx","webpack:///./content-src/components/StartupOverlay/StartupOverlay.jsx","webpack:///./content-src/lib/detect-user-session-start.js","webpack:///./node_modules/fluent/src/parser.js","webpack:///./node_modules/fluent/src/types.js","webpack:///./node_modules/fluent/src/builtins.js","webpack:///./node_modules/fluent/src/resolver.js","webpack:///./node_modules/fluent/src/context.js","webpack:///./node_modules/fluent/src/cached_iterable.js","webpack:///./node_modules/fluent/src/fallback.js","webpack:///./node_modules/fluent/src/util.js","webpack:///./node_modules/fluent/src/index.js","webpack:///./node_modules/fluent-react/src/localization.js","webpack:///./node_modules/fluent-react/src/provider.js","webpack:///./node_modules/fluent-react/src/with_localization.js","webpack:///./node_modules/fluent-react/src/markup.js","webpack:///./node_modules/fluent-react/vendor/omittedCloseTags.js","webpack:///./node_modules/fluent-react/vendor/voidElementTags.js","webpack:///./node_modules/fluent-react/src/localized.js","webpack:///./node_modules/fluent-react/src/index.js","webpack:///./content-src/asrouter/components/Button/Button.jsx","webpack:///./content-src/asrouter/components/SnippetBase/SnippetBase.jsx","webpack:///./content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx","webpack:///./common/Dedupe.jsm","webpack:///./common/Reducers.jsm","webpack:///./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx","webpack:///./content-src/asrouter/templates/OnboardingMessage/OnboardingMessage.jsx","webpack:///./content-src/components/Card/types.js","webpack:///./content-src/components/Card/Card.jsx","webpack:///./content-src/components/TopSites/TopSiteFormInput.jsx","webpack:///./content-src/components/TopSites/TopSiteForm.jsx"],"names":["store","initStore","global","gActivityStreamPrerenderedState","sendEventOrAddListener","dispatch","ac","AlsoToMain","type","at","NEW_TAB_STATE_REQUEST","ReactDOM","hydrate","document","location","href","documentElement","lang","gActivityStreamStrings","getElementById","addSnippetsSubscriber","globalImportContext","Window","BACKGROUND_PROCESS","UI_CODE","actionTypes","ASRouterActions","_RouteMessage","action","options","meta","from","to","Error","forEach","o","fromTarget","skipLocal","CONTENT_MESSAGE_TYPE","MAIN_MESSAGE_TYPE","OnlyToMain","BroadcastToContent","AlsoToOneContent","target","skipMain","toTarget","OnlyToOneContent","AlsoToPreloaded","PRELOAD_MESSAGE_TYPE","UserEvent","data","TELEMETRY_USER_EVENT","ASRouterUserEvent","AS_ROUTER_TELEMETRY_USER_EVENT","UndesiredEvent","importContext","TELEMETRY_UNDESIRED_EVENT","PerfEvent","TELEMETRY_PERFORMANCE_EVENT","ImpressionStats","TELEMETRY_IMPRESSION_STATS","SetPref","name","value","SET_PREF","WebExtEvent","source","isSendToMain","isBroadcastToContent","isSendToOneContent","isSendToPreloaded","isFromMain","getPortIdOfSender","DATABASE_NAME","DATABASE_VERSION","SNIPPETS_OBJECTSTORE_NAME","SNIPPETS_UPDATE_INTERVAL_MS","SNIPPETS_ENABLED_EVENT","SNIPPETS_DISABLED_EVENT","SnippetsMap","Map","constructor","_db","_dispatch","set","key","_dbTransaction","db","put","delete","clear","SNIPPETS_BLOCKLIST_CLEARED","blockList","get","blockSnippetById","id","includes","push","SNIPPETS_BLOCKLIST_UPDATED","disableOnboarding","DISABLE_ONBOARDING","showFirefoxAccounts","SHOW_FIREFOX_ACCOUNTS","getTotalBookmarksCount","Promise","resolve","TOTAL_BOOKMARKS_REQUEST","RPMAddMessageListener","onMessage","TOTAL_BOOKMARKS_RESPONSE","RPMRemoveMessageListener","getAddonsInfo","ADDONS_INFO_REQUEST","ADDONS_INFO_RESPONSE","connect","_openDB","_restoreFromDb","modifier","reject","transaction","objectStore","onsuccess","event","onerror","error","openRequest","indexedDB","open","deleteDatabase","onupgradeneeded","result","objectStoreNames","contains","createObjectStore","err","console","onversionchange","versionChangeEvent","close","cursorRequest","openCursor","cursor","continue","SnippetsProvider","gSnippetsMap","_onAction","bind","snippetsMap","_refreshSnippets","cachedVersion","appData","version","lastUpdate","needsUpdate","Date","now","snippetsURL","response","fetch","status","payload","text","e","_noSnippetFallback","_forceOnboardingVisibility","shouldBeVisible","onboardingEl","style","display","_showRemoteSnippets","snippetsEl","elementId","innerHTML","scriptEl","getElementsByTagName","relocatedScript","createElement","parentNode","replaceChild","msg","SNIPPET_BLOCKED","concat","init","Object","assign","keys","window","dispatchEvent","Event","initialized","uninit","snippets","asrouterContent","initializing","subscribe","state","getState","isASRouterEnabled","Prefs","values","asrouterExperimentEnabled","asrouterOnboardingCohort","disableSnippets","Snippets","INCOMING_MESSAGE_NAME","OUTGOING_MESSAGE_NAME","ASRouterUtils","addListener","listener","removeListener","sendMessage","RPMSendAsyncMessage","blockById","blockBundle","bundle","executeAction","button_action","button_action_params","unblockById","unblockBundle","getNextMessage","overrideMessage","sendTelemetry","ping","getEndpoint","params","URLSearchParams","slice","indexOf","endpoint","URL","url","snippetId","shouldSendImpressionOnUpdate","nextProps","prevProps","message","generateMessages","content","cx","addMessages","ALLOWED_TAGS","b","i","u","strong","em","br","convertLinks","links","sendClick","reduce","acc","linkTag","safeURI","metric","RichText","props","ASRouterUISurface","React","PureComponent","onMessageFromParent","sendImpression","sendUserActionTelemetry","extraProps","message_id","eventType","provider","dataset","onBlockById","clearBundle","setState","componentWillMount","trigger","componentWillUnmount","renderSnippets","renderOnboarding","render","template","defaultProps","ASRouterContent","containerElement","_mount","_unmount","unmountComponentAtNode","MERGE_STORE_ACTION","EARLY_QUEUED_ACTIONS","SAVE_SESSION_PERF_DATA","PAGE_PRERENDERED","mergeStateReducer","mainReducer","prevState","messageMiddleware","next","au","rehydrationMiddleware","_didRehydrate","isMergeStoreAction","isRehydrationRequest","_didRequestInitialState","INIT","queueEarlyMessageMiddleware","_receivedFromMain","_earlyActionQueue","reducers","initialState","createStore","combineReducers","applyMiddleware","ex","dump","JSON","stringify","stack","VISIBLE","VISIBILITY_CHANGE_EVENT","ImpressionsWrapper","sendImpressionOrAddListener","visibilityState","_onVisibilityChange","removeEventListener","addEventListener","componentDidMount","sendOnMount","componentDidUpdate","children","protocol","isAllowed","warn","PrefsButton","injectIntl","onClick","intl","formatMessage","addLocaleDataForReactIntl","locale","addLocaleData","parentLocale","_Base","App","sendNewTabRehydrated","isFirstrun","body","classList","add","isPrerendered","updateTheme","componentWillUpdate","bodyClassName","filter","v","join","className","renderNotified","NEW_TAB_REHYDRATED","strings","prefs","hash","BaseContent","openPreferences","SETTINGS_OPEN","shouldBeFixedToTop","PrerenderData","arePrefsValid","outerClassName","showSearch","migrationExpired","Base","ASRouterAdmin","findOtherBundledMessagesOfSameTemplate","messages","bundled","handleBlock","handleUnblock","handleOverride","renderMessageItem","isCurrent","lastMessageId","isBlocked","itemClassName","renderMessages","map","renderProviders","providers","_ConfirmDialog","_handleCancelBtn","_handleConfirmBtn","DIALOG_CANCEL","eventSource","onConfirm","_renderModalMessage","message_body","body_string_id","visible","icon","cancel_button_string_id","confirm_button_string_id","ConfirmDialog","Dialog","ErrorBoundaryFallback","windowObj","reload","defaultClass","ErrorBoundary","hasError","componentDidCatch","info","FallbackComponent","_ManualMigration","onLaunchTour","onCancelTour","MIGRATION_START","MIGRATION_CANCEL","ManualMigration","_PrerenderData","initialPrefs","initialSections","_setValidation","validation","_validation","invalidatingPrefs","_invalidatingPrefs","oneOf","getPref","indexedDBPrefs","some","anyModifiedPrefs","prefName","pref","enabled","order","title","_Search","onInputMount","handleEvent","detail","gContentSearchController","search","input","healthReportKey","IS_NEWTAB","searchSource","ContentSearchUIController","Search","documentURI","CARDS_PER_ROW_DEFAULT","CARDS_PER_ROW_COMPACT_WIDE","getFormattedMessage","Section","numRows","rowsPref","maxRows","_dispatchImpressionStats","cardsPerRow","compactCards","matchMedia","matches","maxCards","cards","rows","needsImpressionStats","tiles","link","guid","impressionCardGuids","sendImpressionStatsOrAddListener","shouldSendImpressionStats","collapsed","length","isCollapsed","wasCollapsed","emptyState","contextMenuOptions","disclaimer","privacyNoticeURL","isFirst","isLast","maxCardsPerRow","maxCardsOnNarrow","shouldShowTopics","topics","realRows","shouldShowEmptyState","isWebExtension","sectionClassName","feed","padding","startsWith","read_more_endpoint","SectionIntl","_Sections","renderSections","sections","enabledSections","Sections","section","sectionOrder","showTopSites","expectedCount","sectionId","split","commonProps","find","s","_OpenInPrivateWindow","site","OPEN_PRIVATE_WINDOW","referrer","userEvent","GetPlatformString","platform","LinkMenuOptions","Separator","EmptyItem","RemoveBookmark","DELETE_BOOKMARK_BY_ID","bookmarkGuid","AddBookmark","BOOKMARK_URL","OpenInNewWindow","OPEN_NEW_WINDOW","typedBonus","BlockUrl","index","BLOCK_URL","pocket_id","impression","block","pos","WebExtDismiss","string_id","WEBEXT_DISMISS","action_position","DeleteUrl","isEnabled","siteInfo","DIALOG_OPEN","DELETE_HISTORY_URL","forceBlock","ShowFile","SHOW_DOWNLOAD_FILE","OpenFile","OPEN_DOWNLOAD_FILE","CopyDownloadLink","COPY_DOWNLOAD_LINK","GoToDownloadPage","OPEN_LINK","disabled","RemoveDownload","REMOVE_DOWNLOAD_FILE","PinTopSite","TOP_SITES_PIN","UnpinTopSite","TOP_SITES_UNPIN","SaveToPocket","SAVE_TO_POCKET","pocket","DeleteFromPocket","DELETE_FROM_POCKET","ArchiveFromPocket","ARCHIVE_FROM_POCKET","EditTopSite","TOP_SITES_EDIT","CheckBookmark","CheckPinTopSite","isPinned","CheckSavedToPocket","CheckBookmarkOrArchive","OpenInPrivateWindow","DEFAULT_SITE_MENU_OPTIONS","_LinkMenu","getOptions","isPrivateBrowsingEnabled","propOptions","isDefault","option","label","userEventData","first","last","onUpdate","LinkMenu","ContextMenu","hideContext","setTimeout","stopPropagation","ContextMenuItem","onKeyDown","shiftKey","ScreenshotUtils","isBlob","isLocal","image","path","createLocalImageObject","remoteImage","createObjectURL","maybeRevokeBlobObjectURL","localImage","revokeObjectURL","isRemoteImageLocal","Disclaimer","onAcknowledge","disclaimerPref","button","DisclaimerIntl","_CollapsibleSection","onBodyMount","onHeaderClick","onTransitionEnd","enableOrDisableAnimation","onMenuButtonClick","onMenuButtonMouseEnter","onMenuButtonMouseLeave","onMenuUpdate","enableAnimation","isAnimating","menuButtonHover","showContextMenu","sectionBody","scrollHeight","node","undefined","maxHeight","SectionMenuOptions","CheckCollapsed","currentTarget","renderIcon","backgroundImage","preventDefault","isCollapsible","extraMenuOptions","showPrefName","needsDisclaimer","active","CollapsibleSection","DEFAULT_SECTION_MENU_OPTIONS","WEBEXT_SECTION_MENU_OPTIONS","_SectionMenu","extraOptions","splice","SectionMenu","MoveUp","SECTION_MOVE","direction","MoveDown","RemoveSection","CollapseSection","UPDATE_SECTION_PREFS","ExpandSection","ManageSection","ManageWebExtension","OPEN_WEBEXT_SETTINGS","AddTopSite","PrivacyNotice","RECORDED_SECTIONS","ComponentPerfTimer","Component","perfSvc","_sendBadStateEvent","_sendPaintedEvent","_reportMissingData","_timestampHandled","_recordedFirstRender","_maybeSendPaintedEvent","_afterFramePaint","callback","requestAnimationFrame","_maybeSendBadStateEvent","_ensureFirstRenderTsRecorded","mark","dataReadyKey","firstRenderKey","parseInt","getMostRecentAbsMarkStartByName","ChromeUtils","import","usablePerfObj","Services","appShell","hiddenDOMWindow","performance","_PerfService","performanceObj","_perf","prototype","str","getEntriesByName","timeOrigin","absNow","entries","mostRecentEntry","startTime","Topic","Topics","t","topSiteIconType","customScreenshotURL","tippyTopIcon","faviconRef","faviconSize","screenshot","countTopSitesIconsTypes","topSites","countTopSitesTypes","_TopSites","onFormClose","_dispatchTopSitesStats","_getVisibleTopSites","topSitesIconsStats","topSitesPinned","topsites_icon_stats","topsites_pinned","sitesPerRow","TopSites","TopSitesRows","TOP_SITES_CANCEL_EDIT","editForm","topSitesRows","TOP_SITES_SOURCE","TOP_SITES_CONTEXT_MENU_OPTIONS","MIN_RICH_FAVICON_SIZE","MIN_CORNER_FAVICON_SIZE","TopSiteLink","screenshotImage","onDragEvent","_allowDrop","dataTransfer","types","dragged","effectAllowed","setData","blur","getNextStateFromProps","imageInState","nextState","componentWillReceiveProps","defaultStyle","isDraggable","topSiteOuterClassName","isDragged","letterFallback","imageClassName","imageStyle","showSmallFavicon","smallFaviconStyle","smallFaviconFallback","hasScreenshotImage","backgroundColor","favicon","draggableProps","onDragEnd","onDragStart","onMouseDown","TopSite","onLinkClick","_getTelemetryInfo","icon_type","iconType","card_type","altKey","ctrlKey","metaKey","onActivate","isContextMenuOpen","activeIndex","hostname","TopSitePlaceholder","onEditButtonClick","_TopSiteList","DEFAULT_STATE","draggedIndex","draggedSite","draggedTitle","topSitesPreview","prevTopSites","newTopSites","dropped","_makeTopSitesPreview","TOP_SITES_INSERT","draggedFromIndex","_getTopSites","pinnedOnly","unpinned","siteToInsert","holeIndex","indexStep","shiftingStep","nextIndex","preview","shift","topSitesUI","maxNarrowVisibleIndex","l","slotProps","TopSiteList","_StartupOverlay","onInputChange","onSubmit","clickSkip","initScene","removeOverlay","onInputInvalid","emailInput","overlayRemoved","show","remove","previousSibling","focus","termsLink","privacyLink","terms","privacy","StartupOverlay","DetectUserSessionStart","_store","_perfService","perfService","_sendEvent","visibility_event_rcvd_ts","MAX_PLACEABLES","entryIdentifierRe","identifierRe","functionIdentifierRe","RuntimeParser","getResource","string","_source","_index","_length","errors","skipWS","getEntry","SyntaxError","skipToNextEntryStart","ch","skipComment","skipSection","getMessage","skipInlineWS","getVariantName","getEntryIdentifier","val","getPattern","attrs","lineStart","getAttributes","skipBlankLines","ptr","getIdentifier","re","lastIndex","exec","toString","start","cc","charCodeAt","getString","substring","eol","firstLineContent","getComplexPattern","buffer","placeables","blankLinesStart","blankLinesEnd","ch2","getPlaceable","variants","getVariants","exp","vars","def","selector","getSelectorExpression","literal","getLiteral","getVariantKey","args","getCallArgs","test","fun","Array","isArray","lastIndexOf","getNumber","num","defaultIndex","cc0","cc1","parse","parser","FluentType","opts","valueOf","FluentNone","FluentNumber","parseFloat","ctx","nf","_memoizeIntlObject","Intl","NumberFormat","format","match","other","FluentDateTime","dtf","DateTimeFormat","FluentSymbol","pr","PluralRules","select","arg","merge","argopts","unwrapped","opt","MAX_PLACEABLE_LENGTH","FSI","PDI","DefaultMember","env","members","RangeError","MessageReference","_terms","_messages","ReferenceError","VariantExpression","keyword","Type","isVariantList","variant","variantKey","AttributeExpression","attrName","SelectExpression","keyCanMatch","expr","Pattern","ExternalArgument","FunctionReference","CallExpression","attr","member","hasOwnProperty","TypeError","_functions","func","builtins","callee","posargs","keyargs","ptn","dirty","has","useIsolating","_useIsolating","elem","part","WeakSet","locales","functions","_intls","WeakMap","Symbol","iterator","hasMessage","ctor","cache","CachedIterable","iterable","asyncIterator","seen","cur","touchNext","done","mapContextSync","ids","getContextForId","context","remainingCount","foundContexts","fill","mapContextAsync","nonBlank","line","countIndent","indent","ftl","code","lines","indents","common","Math","min","RegExp","replace","contexts","subs","Set","comp","unsubscribe","setMessages","relocalize","getMessageContext","formatCompound","mcx","fallback","isReactLocalization","propName","prop","l10n","getChildContext","Children","only","LocalizationProvider","childContextTypes","propTypes","PropTypes","element","isRequired","isIterable","componentName","withLocalization","Inner","WithLocalization","forceUpdate","displayName","contextTypes","component","TEMPLATE","parseMarkup","omittedCloseTags","area","base","col","embed","hr","img","keygen","param","track","wbr","voidElementTags","menuitem","reMarkup","toArguments","elems","propname","propval","substr","isValidElement","toLowerCase","messageValue","messageAttrs","localizedProps","cloneElement","translationNodes","childNodes","translatedChildren","childNode","nodeType","TEXT_NODE","textContent","localName","sourceChild","Localized","ALLOWED_STYLE_TAGS","Button","tag","border","onBlockClicked","UISurface","onBlock","containerClassName","DEFAULT_ICON_PATH","onButtonClick","renderTitle","renderTitleIcon","titleIcon","title_icon","renderButton","button_url","button_color","button_background_color","button_label","hasLink","button_type","hasButton","tall","richText","Dedupe","createKey","defaultCreateKey","item","group","groups","globalKeys","valueMap","m","TOP_SITES_DEFAULT_ROWS","TOP_SITES_MAX_SITES_PER_ROW","dedupe","INITIAL_STATE","insertPinned","pinned","pinnedUrls","newLinks","pinIndex","hasMatch","newRows","TOP_SITES_UPDATED","TOP_SITES_PREFS_UPDATED","previewResponse","PREVIEW_RESPONSE","previewUrl","PREVIEW_REQUEST","PREVIEW_REQUEST_CANCEL","SCREENSHOT_UPDATED","row","PLACES_BOOKMARK_ADDED","bookmarkTitle","dateAdded","bookmarkDateCreated","PLACES_BOOKMARK_REMOVED","newSite","PLACES_LINK_DELETED","newValues","PREFS_INITIAL_VALUES","PREF_CHANGED","newState","SECTION_DEREGISTER","SECTION_REGISTER","SECTION_UPDATE","card","dedupeConfigurations","dedupeConf","dedupedRows","dedupeFrom","dedupeSectionId","dedupeSection","SECTION_UPDATE_CARD","PLACES_SAVED_TO_POCKET","open_url","PLACES_LINK_BLOCKED","SNIPPETS_DATA","SNIPPETS_RESET","onDoneButton","onAction","cardContextTypes","history","intlID","bookmark","trending","download","gImageLoading","activeCard","imageLoaded","cardImage","maybeLoadImage","imageUrl","loaderPromise","loader","Image","src","catch","then","WEBEXT_CLICK","click","_Card","hasImage","placeholder","description","Card","PlaceholderCard","validationError","onChange","onMount","shouldFocus","ev","showClearButton","onClear","typeUrl","titleId","loading","placeholderId","errorMessageId","TopSiteFormInput","customScreenshotUrl","showCustomScreenshotForm","onClearScreenshotInput","onLabelChange","onUrlChange","onCancelButtonClick","onClearUrlClick","onDoneButtonClick","onCustomScreenshotUrlChange","onPreviewButtonClick","onEnableScreenshotUrlForm","validateUrl","_updateCustomScreenshotInput","onClose","validateForm","cleanUrl","_tryParseUrl","validProtocols","urlObj","validateCustomScreenshotUrl","validate","_renderCustomScreenshotInput","requestFailed","isLoading","showAsAdd","previous","changed","previewMode","previewLink","TopSiteForm"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,QAAQ,4EAAAC,CAAU,4DAAV,EAAoBC,OAAOC,+BAA3B,CAAd;;AAEA,IAAI,gGAAJ,CAA2BH,KAA3B,EAAkCI,sBAAlC;;AAEA;AACA;AACA;AACA,IAAI,CAACF,OAAOC,+BAAZ,EAA6C;AAC3CH,QAAMK,QAAN,CAAe,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGC,qBAAV,EAAd,CAAf;AACD;;AAED,gDAAAC,CAASC,OAAT,CAAiB;AAAC,sDAAD;AAAA,IAAU,OAAOZ,KAAjB;AACf,6DAAC,qEAAD;AACE,gBAAYE,OAAOW,QAAP,CAAgBC,QAAhB,CAAyBC,IAAzB,KAAkC,eADhD;AAEE,mBAAe,CAAC,CAACb,OAAOC,+BAF1B;AAGE,YAAQD,OAAOW,QAAP,CAAgBG,eAAhB,CAAgCC,IAH1C;AAIE,aAASf,OAAOgB,sBAJlB;AADe,CAAjB,EAMaL,SAASM,cAAT,CAAwB,MAAxB,CANb;;AAQA,sFAAAC,CAAsBpB,KAAtB,E;;;;;;;AC7BA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;;;;;;;ACnBA;AAAA;;;AAGA;;wBAEyB,qB;2BACG,wB;2BACA,iC;cACb,C;yBACW,C;;AAE1B;;;;;;AAKA,MAAMqB,sBAAsB,OAAOC,MAAP,KAAkB,WAAlB,GAAgCC,kBAAhC,GAAqDC,OAAjF;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA,MAAMC,cAAc,EAApB;;AACA,KAAK,MAAMjB,IAAX,IAAmB,CACjB,qBADiB,EAEjB,sBAFiB,EAGjB,qBAHiB,EAIjB,gCAJiB,EAKjB,WALiB,EAMjB,cANiB,EAOjB,oBAPiB,EAQjB,uBARiB,EASjB,oBATiB,EAUjB,oBAViB,EAWjB,eAXiB,EAYjB,aAZiB,EAajB,oBAbiB,EAcjB,kBAdiB,EAejB,MAfiB,EAgBjB,kBAhBiB,EAiBjB,qBAjBiB,EAkBjB,iBAlBiB,EAmBjB,cAnBiB,EAoBjB,uBApBiB,EAqBjB,cArBiB,EAsBjB,oBAtBiB,EAuBjB,uBAvBiB,EAwBjB,gBAxBiB,EAyBjB,oBAzBiB,EA0BjB,WA1BiB,EA2BjB,iBA3BiB,EA4BjB,qBA5BiB,EA6BjB,sBA7BiB,EA8BjB,kBA9BiB,EA+BjB,uBA/BiB,EAgCjB,yBAhCiB,EAiCjB,wBAjCiB,EAkCjB,sBAlCiB,EAmCjB,qBAnCiB,EAoCjB,qBApCiB,EAqCjB,wBArCiB,EAsCjB,sBAtCiB,EAuCjB,cAvCiB,EAwCjB,iBAxCiB,EAyCjB,wBAzCiB,EA0CjB,kBA1CiB,EA2CjB,sBA3CiB,EA4CjB,mBA5CiB,EA6CjB,wBA7CiB,EA8CjB,gBA9CiB,EA+CjB,oBA/CiB,EAgDjB,oBAhDiB,EAiDjB,iBAjDiB,EAkDjB,gBAlDiB,EAmDjB,cAnDiB,EAoDjB,yBApDiB,EAqDjB,kBArDiB,EAsDjB,gBAtDiB,EAuDjB,qBAvDiB,EAwDjB,gBAxDiB,EAyDjB,eAzDiB,EA0DjB,UA1DiB,EA2DjB,oBA3DiB,EA4DjB,uBA5DiB,EA6DjB,gBA7DiB,EA8DjB,4BA9DiB,EA+DjB,4BA/DiB,EAgEjB,eAhEiB,EAiEjB,gBAjEiB,EAkEjB,iBAlEiB,EAmEjB,cAnEiB,EAoEjB,aApEiB,EAqEjB,4BArEiB,EAsEjB,6BAtEiB,EAuEjB,2BAvEiB,EAwEjB,sBAxEiB,EAyEjB,uBAzEiB,EA0EjB,gBA1EiB,EA2EjB,kBA3EiB,EA4EjB,eA5EiB,EA6EjB,yBA7EiB,EA8EjB,iBA9EiB,EA+EjB,mBA/EiB,EAgFjB,yBAhFiB,EAiFjB,0BAjFiB,EAkFjB,QAlFiB,EAmFjB,sBAnFiB,EAoFjB,cApFiB,EAqFjB,gBArFiB,CAAnB,EAsFG;AACDiB,cAAYjB,IAAZ,IAAoBA,IAApB;AACD;;AAED;AACA;AACA,MAAMkB,kBAAkB,EAAxB;;AACA,KAAK,MAAMlB,IAAX,IAAmB,CACjB,6BADiB,EAEjB,UAFiB,EAGjB,iBAHiB,CAAnB,EAIG;AACDkB,kBAAgBlB,IAAhB,IAAwBA,IAAxB;AACD;;AAED;AACA;AACA,SAASmB,aAAT,CAAuBC,MAAvB,EAA+BC,OAA/B,EAAwC;AACtC,QAAMC,OAAOF,OAAOE,IAAP,qBAAkBF,OAAOE,IAAzB,IAAiC,EAA9C;AACA,MAAI,CAACD,OAAD,IAAY,CAACA,QAAQE,IAArB,IAA6B,CAACF,QAAQG,EAA1C,EAA8C;AAC5C,UAAM,IAAIC,KAAJ,CAAU,gHAAV,CAAN;AACD;AACD;AACA;AACA,GAAC,MAAD,EAAS,IAAT,EAAe,UAAf,EAA2B,YAA3B,EAAyC,UAAzC,EAAqD,WAArD,EAAkEC,OAAlE,CAA0EC,KAAK;AAC7E,QAAI,OAAON,QAAQM,CAAR,CAAP,KAAsB,WAA1B,EAAuC;AACrCL,WAAKK,CAAL,IAAUN,QAAQM,CAAR,CAAV;AACD,KAFD,MAEO,IAAIL,KAAKK,CAAL,CAAJ,EAAa;AAClB,aAAOL,KAAKK,CAAL,CAAP;AACD;AACF,GAND;AAOA,2BAAWP,MAAX,IAAmBE,IAAnB;AACD;;AAED;;;;;;;;;AASA,SAASvB,UAAT,CAAoBqB,MAApB,EAA4BQ,UAA5B,EAAwCC,SAAxC,EAAmD;AACjD,SAAOV,cAAcC,MAAd,EAAsB;AAC3BG,UAAMO,oBADqB;AAE3BN,QAAIO,iBAFuB;AAG3BH,cAH2B;AAI3BC;AAJ2B,GAAtB,CAAP;AAMD;;AAED;;;;;;;;AAQA,SAASG,UAAT,CAAoBZ,MAApB,EAA4BQ,UAA5B,EAAwC;AACtC,SAAO7B,WAAWqB,MAAX,EAAmBQ,UAAnB,EAA+B,IAA/B,CAAP;AACD;;AAED;;;;;;AAMA,SAASK,kBAAT,CAA4Bb,MAA5B,EAAoC;AAClC,SAAOD,cAAcC,MAAd,EAAsB;AAC3BG,UAAMQ,iBADqB;AAE3BP,QAAIM;AAFuB,GAAtB,CAAP;AAID;;AAED;;;;;;;;;AASA,SAASI,gBAAT,CAA0Bd,MAA1B,EAAkCe,MAAlC,EAA0CC,QAA1C,EAAoD;AAClD,MAAI,CAACD,MAAL,EAAa;AACX,UAAM,IAAIV,KAAJ,CAAU,gJAAV,CAAN;AACD;AACD,SAAON,cAAcC,MAAd,EAAsB;AAC3BG,UAAMQ,iBADqB;AAE3BP,QAAIM,oBAFuB;AAG3BO,cAAUF,MAHiB;AAI3BC;AAJ2B,GAAtB,CAAP;AAMD;;AAED;;;;;;;;AAQA,SAASE,gBAAT,CAA0BlB,MAA1B,EAAkCe,MAAlC,EAA0C;AACxC,SAAOD,iBAAiBd,MAAjB,EAAyBe,MAAzB,EAAiC,IAAjC,CAAP;AACD;;AAED;;;;;;AAMA,SAASI,eAAT,CAAyBnB,MAAzB,EAAiC;AAC/B,SAAOD,cAAcC,MAAd,EAAsB;AAC3BG,UAAMQ,iBADqB;AAE3BP,QAAIgB;AAFuB,GAAtB,CAAP;AAID;;AAED;;;;;;;AAOA,SAASC,SAAT,CAAmBC,IAAnB,EAAyB;AACvB,SAAO3C,WAAW;AAChBC,UAAMiB,YAAY0B,oBADF;AAEhBD;AAFgB,GAAX,CAAP;AAID;;AAED;;;;;;;AAOA,SAASE,iBAAT,CAA2BF,IAA3B,EAAiC;AAC/B,SAAO3C,WAAW;AAChBC,UAAMiB,YAAY4B,8BADF;AAEhBH;AAFgB,GAAX,CAAP;AAID;;AAED;;;;;;;AAOA,SAASI,cAAT,CAAwBJ,IAAxB,EAA8BK,gBAAgBlC,mBAA9C,EAAmE;AACjE,QAAMO,SAAS;AACbpB,UAAMiB,YAAY+B,yBADL;AAEbN;AAFa,GAAf;AAIA,SAAOK,kBAAkB/B,OAAlB,GAA4BjB,WAAWqB,MAAX,CAA5B,GAAiDA,MAAxD;AACD;;AAED;;;;;;;AAOA,SAAS6B,SAAT,CAAmBP,IAAnB,EAAyBK,gBAAgBlC,mBAAzC,EAA8D;AAC5D,QAAMO,SAAS;AACbpB,UAAMiB,YAAYiC,2BADL;AAEbR;AAFa,GAAf;AAIA,SAAOK,kBAAkB/B,OAAlB,GAA4BjB,WAAWqB,MAAX,CAA5B,GAAiDA,MAAxD;AACD;;AAED;;;;;;;AAOA,SAAS+B,eAAT,CAAyBT,IAAzB,EAA+BK,gBAAgBlC,mBAA/C,EAAoE;AAClE,QAAMO,SAAS;AACbpB,UAAMiB,YAAYmC,0BADL;AAEbV;AAFa,GAAf;AAIA,SAAOK,kBAAkB/B,OAAlB,GAA4BjB,WAAWqB,MAAX,CAA5B,GAAiDA,MAAxD;AACD;;AAED,SAASiC,OAAT,CAAiBC,IAAjB,EAAuBC,KAAvB,EAA8BR,gBAAgBlC,mBAA9C,EAAmE;AACjE,QAAMO,SAAS,EAACpB,MAAMiB,YAAYuC,QAAnB,EAA6Bd,MAAM,EAACY,IAAD,EAAOC,KAAP,EAAnC,EAAf;AACA,SAAOR,kBAAkB/B,OAAlB,GAA4BjB,WAAWqB,MAAX,CAA5B,GAAiDA,MAAxD;AACD;;AAED,SAASqC,WAAT,CAAqBzD,IAArB,EAA2B0C,IAA3B,EAAiCK,gBAAgBlC,mBAAjD,EAAsE;AACpE,MAAI,CAAC6B,IAAD,IAAS,CAACA,KAAKgB,MAAnB,EAA2B;AACzB,UAAM,IAAIjC,KAAJ,CAAU,qHAAV,CAAN;AACD;AACD,QAAML,SAAS,EAACpB,IAAD,EAAO0C,IAAP,EAAf;AACA,SAAOK,kBAAkB/B,OAAlB,GAA4BjB,WAAWqB,MAAX,CAA5B,GAAiDA,MAAxD;AACD;;qBAKqB;AACpBa,oBADoB;AAEpBQ,WAFoB;AAGpBG,mBAHoB;AAIpBE,gBAJoB;AAKpBG,WALoB;AAMpBE,iBANoB;AAOpBjB,kBAPoB;AAQpBI,kBARoB;AASpBvC,YAToB;AAUpBiC,YAVoB;AAWpBO,iBAXoB;AAYpBc,SAZoB;AAapBI;AAboB,C;;AAgBtB;;kBACmB;AACjBE,eAAavC,MAAb,EAAqB;AACnB,QAAI,CAACA,OAAOE,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;AACD,WAAOF,OAAOE,IAAP,CAAYE,EAAZ,KAAmBO,iBAAnB,IAAwCX,OAAOE,IAAP,CAAYC,IAAZ,KAAqBO,oBAApE;AACD,GANgB;AAOjB8B,uBAAqBxC,MAArB,EAA6B;AAC3B,QAAI,CAACA,OAAOE,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;AACD,QAAIF,OAAOE,IAAP,CAAYE,EAAZ,KAAmBM,oBAAnB,IAA2C,CAACV,OAAOE,IAAP,CAAYe,QAA5D,EAAsE;AACpE,aAAO,IAAP;AACD;AACD,WAAO,KAAP;AACD,GAfgB;AAgBjBwB,qBAAmBzC,MAAnB,EAA2B;AACzB,QAAI,CAACA,OAAOE,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;AACD,QAAIF,OAAOE,IAAP,CAAYE,EAAZ,KAAmBM,oBAAnB,IAA2CV,OAAOE,IAAP,CAAYe,QAA3D,EAAqE;AACnE,aAAO,IAAP;AACD;AACD,WAAO,KAAP;AACD,GAxBgB;AAyBjByB,oBAAkB1C,MAAlB,EAA0B;AACxB,QAAI,CAACA,OAAOE,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;AACD,WAAOF,OAAOE,IAAP,CAAYE,EAAZ,KAAmBgB,oBAAnB,IACLpB,OAAOE,IAAP,CAAYC,IAAZ,KAAqBQ,iBADvB;AAED,GA/BgB;AAgCjBgC,aAAW3C,MAAX,EAAmB;AACjB,QAAI,CAACA,OAAOE,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;AACD,WAAOF,OAAOE,IAAP,CAAYC,IAAZ,KAAqBQ,iBAArB,IACLX,OAAOE,IAAP,CAAYE,EAAZ,KAAmBM,oBADrB;AAED,GAtCgB;AAuCjBkC,oBAAkB5C,MAAlB,EAA0B;AACxB,WAAQA,OAAOE,IAAP,IAAeF,OAAOE,IAAP,CAAYM,UAA5B,IAA2C,IAAlD;AACD,GAzCgB;AA0CjBT;AA1CiB,C;;;;;;;;;;;;;;;;ACrVnB,MAAM8C,gBAAgB,aAAtB;AACA,MAAMC,mBAAmB,CAAzB;AACA,MAAMC,4BAA4B,UAAlC;AACO,MAAMC,8BAA8B,QAApC,C,CAA8C;;AAErD,MAAMC,yBAAyB,kBAA/B;AACA,MAAMC,0BAA0B,mBAAhC;;AAEA;AACA;;AAEA;;;;;;;;AAQO,MAAMC,WAAN,SAA0BC,GAA1B,CAA8B;AACnCC,cAAY5E,QAAZ,EAAsB;AACpB;AACA,SAAK6E,GAAL,GAAW,IAAX;AACA,SAAKC,SAAL,GAAiB9E,QAAjB;AACD;;AAED+E,MAAIC,GAAJ,EAAStB,KAAT,EAAgB;AACd,UAAMqB,GAAN,CAAUC,GAAV,EAAetB,KAAf;AACA,WAAO,KAAKuB,cAAL,CAAoBC,MAAMA,GAAGC,GAAH,CAAOzB,KAAP,EAAcsB,GAAd,CAA1B,CAAP;AACD;;AAEDI,SAAOJ,GAAP,EAAY;AACV,UAAMI,MAAN,CAAaJ,GAAb;AACA,WAAO,KAAKC,cAAL,CAAoBC,MAAMA,GAAGE,MAAH,CAAUJ,GAAV,CAA1B,CAAP;AACD;;AAEDK,UAAQ;AACN,UAAMA,KAAN;AACA,SAAKP,SAAL,CAAe,iEAAA7E,CAAGkC,UAAH,CAAc,EAAChC,MAAM,8DAAAC,CAAGkF,0BAAV,EAAd,CAAf;AACA,WAAO,KAAKL,cAAL,CAAoBC,MAAMA,GAAGG,KAAH,EAA1B,CAAP;AACD;;AAED,MAAIE,SAAJ,GAAgB;AACd,WAAO,KAAKC,GAAL,CAAS,WAAT,KAAyB,EAAhC;AACD;;AAED;;;;;;;AAOMC,kBAAN,CAAuBC,EAAvB,EAA2B;AAAA;;AAAA;AACzB,UAAI,CAACA,EAAL,EAAS;AACP;AACD;AACD,YAAM,EAACH,SAAD,KAAc,KAApB;AACA,UAAI,CAACA,UAAUI,QAAV,CAAmBD,EAAnB,CAAL,EAA6B;AAC3BH,kBAAUK,IAAV,CAAeF,EAAf;AACA,cAAKZ,SAAL,CAAe,iEAAA7E,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGyF,0BAAV,EAAsChD,MAAM6C,EAA5C,EAAd,CAAf;AACA,cAAM,MAAKX,GAAL,CAAS,WAAT,EAAsBQ,SAAtB,CAAN;AACD;AATwB;AAU1B;;AAEDO,sBAAoB;AAClB,SAAKhB,SAAL,CAAe,iEAAA7E,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAG2F,kBAAV,EAAd,CAAf;AACD;;AAEDC,wBAAsB;AACpB,SAAKlB,SAAL,CAAe,iEAAA7E,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAG6F,qBAAV,EAAd,CAAf;AACD;;AAEDC,2BAAyB;AACvB,WAAO,IAAIC,OAAJ,CAAYC,WAAW;AAC5B,WAAKtB,SAAL,CAAe,iEAAA7E,CAAGkC,UAAH,CAAc,EAAChC,MAAM,8DAAAC,CAAGiG,uBAAV,EAAd,CAAf;AACAxG,aAAOyG,qBAAP,CAA6B,8BAA7B,EAA6D,SAASC,SAAT,CAAmB,EAAC1D,MAAMtB,MAAP,EAAnB,EAAmC;AAC9F,YAAIA,OAAOpB,IAAP,KAAgB,8DAAAC,CAAGoG,wBAAvB,EAAiD;AAC/CJ,kBAAQ7E,OAAOsB,IAAf;AACAhD,iBAAO4G,wBAAP,CAAgC,8BAAhC,EAAgEF,SAAhE;AACD;AACF,OALD;AAMD,KARM,CAAP;AASD;;AAEDG,kBAAgB;AACd,WAAO,IAAIP,OAAJ,CAAYC,WAAW;AAC5B,WAAKtB,SAAL,CAAe,iEAAA7E,CAAGkC,UAAH,CAAc,EAAChC,MAAM,8DAAAC,CAAGuG,mBAAV,EAAd,CAAf;AACA9G,aAAOyG,qBAAP,CAA6B,8BAA7B,EAA6D,SAASC,SAAT,CAAmB,EAAC1D,MAAMtB,MAAP,EAAnB,EAAmC;AAC9F,YAAIA,OAAOpB,IAAP,KAAgB,8DAAAC,CAAGwG,oBAAvB,EAA6C;AAC3CR,kBAAQ7E,OAAOsB,IAAf;AACAhD,iBAAO4G,wBAAP,CAAgC,8BAAhC,EAAgEF,SAAhE;AACD;AACF,OALD;AAMD,KARM,CAAP;AASD;;AAED;;;;;;;AAOMM,SAAN,GAAgB;AAAA;;AAAA;AACd;AACA,YAAM3B,KAAK,MAAM,OAAK4B,OAAL,EAAjB;;AAEA;AACA,YAAM,OAAKC,cAAL,CAAoB7B,EAApB,CAAN;;AAEA;AACA,aAAKL,GAAL,GAAWK,EAAX;AARc;AASf;;AAED;;;;;;;;;AASAD,iBAAe+B,QAAf,EAAyB;AACvB,QAAI,CAAC,KAAKnC,GAAV,EAAe;AACb,aAAOsB,QAAQC,OAAR,EAAP;AACD;AACD,WAAO,IAAID,OAAJ,CAAY,CAACC,OAAD,EAAUa,MAAV,KAAqB;AACtC,YAAMC,cAAcF,SAClB,KAAKnC,GAAL,CACGqC,WADH,CACe5C,yBADf,EAC0C,WAD1C,EAEG6C,WAFH,CAEe7C,yBAFf,CADkB,CAApB;AAKA4C,kBAAYE,SAAZ,GAAwBC,SAASjB,SAAjC;;AAEA;AACAc,kBAAYI,OAAZ,GAAsBD,SAASJ,OAAOC,YAAYK,KAAnB,CAA/B;AACD,KAVM,CAAP;AAWD;;AAEDT,YAAU;AACR,WAAO,IAAIX,OAAJ,CAAY,CAACC,OAAD,EAAUa,MAAV,KAAqB;AACtC,YAAMO,cAAcC,UAAUC,IAAV,CAAetD,aAAf,EAA8BC,gBAA9B,CAApB;;AAEA;AACAmD,kBAAYF,OAAZ,GAAsBD,SAAS;AAC7B;AACA;AACAI,kBAAUE,cAAV,CAAyBvD,aAAzB;AACA6C,eAAOI,KAAP;AACD,OALD;;AAOAG,kBAAYI,eAAZ,GAA8BP,SAAS;AACrC,cAAMnC,KAAKmC,MAAM/E,MAAN,CAAauF,MAAxB;AACA,YAAI,CAAC3C,GAAG4C,gBAAH,CAAoBC,QAApB,CAA6BzD,yBAA7B,CAAL,EAA8D;AAC5DY,aAAG8C,iBAAH,CAAqB1D,yBAArB;AACD;AACF,OALD;;AAOAkD,kBAAYJ,SAAZ,GAAwBC,SAAS;AAC/B,YAAInC,KAAKmC,MAAM/E,MAAN,CAAauF,MAAtB;;AAEA;AACA3C,WAAGoC,OAAH,GAAaW,OAAOC,QAAQX,KAAR,CAAcU,GAAd,CAApB,CAJ+B,CAIS;AACxC;AACA/C,WAAGiD,eAAH,GAAqBC,sBAAsBA,mBAAmB9F,MAAnB,CAA0B+F,KAA1B,EAA3C;;AAEAjC,gBAAQlB,EAAR;AACD,OATD;AAUD,KA5BM,CAAP;AA6BD;;AAED6B,iBAAe7B,EAAf,EAAmB;AACjB,WAAO,IAAIiB,OAAJ,CAAY,CAACC,OAAD,EAAUa,MAAV,KAAqB;AACtC,UAAIqB,aAAJ;AACA,UAAI;AACFA,wBAAgBpD,GAAGgC,WAAH,CAAe5C,yBAAf,EACb6C,WADa,CACD7C,yBADC,EAC0BiE,UAD1B,EAAhB;AAED,OAHD,CAGE,OAAON,GAAP,EAAY;AACZ;AACAhB,eAAOgB,GAAP;AACA;AACA;AACD;;AAED;AACAK,oBAAchB,OAAd,GAAwBD,SAASJ,OAAOI,KAAP,CAAjC;;AAEAiB,oBAAclB,SAAd,GAA0BC,SAAS;AACjC,YAAImB,SAASnB,MAAM/E,MAAN,CAAauF,MAA1B;AACA;AACA,YAAIW,MAAJ,EAAY;AACV,cAAIA,OAAO9E,KAAP,KAAiB,WAArB,EAAkC;AAChC,iBAAKqB,GAAL,CAASyD,OAAOxD,GAAhB,EAAqBwD,OAAO9E,KAA5B;AACD;AACD8E,iBAAOC,QAAP;AACD,SALD,MAKO;AACL;AACArC;AACD;AACF,OAZD;AAaD,KA5BM,CAAP;AA6BD;AAxLkC;;AA2LrC;;;;;AAKO,MAAMsC,gBAAN,CAAuB;AAC5B9D,cAAY5E,QAAZ,EAAsB;AACpB;AACA;AACAH,WAAO8I,YAAP,GAAsB,IAAIjE,WAAJ,CAAgB1E,QAAhB,CAAtB;AACA,SAAK4I,SAAL,GAAiB,KAAKA,SAAL,CAAeC,IAAf,CAAoB,IAApB,CAAjB;AACD;;AAED,MAAIC,WAAJ,GAAkB;AAChB,WAAOjJ,OAAO8I,YAAd;AACD;;AAEKI,kBAAN,GAAyB;AAAA;;AAAA;AACvB;AACA;AACA,YAAMC,gBAAgB,OAAKF,WAAL,CAAiBtD,GAAjB,CAAqB,yBAArB,CAAtB;;AAEA,UAAIwD,kBAAkB,OAAKC,OAAL,CAAaC,OAAnC,EAA4C;AAC1C,eAAKJ,WAAL,CAAiBzD,KAAjB;AACD;;AAED;AACA,YAAM8D,aAAa,OAAKL,WAAL,CAAiBtD,GAAjB,CAAqB,sBAArB,CAAnB;AACA,YAAM4D,cAAc,EAAED,cAAc,CAAhB,KAAsBE,KAAKC,GAAL,KAAaH,UAAb,GAA0B5E,2BAApE;;AAEA,UAAI6E,eAAe,OAAKH,OAAL,CAAaM,WAAhC,EAA6C;AAC3C,eAAKT,WAAL,CAAiB/D,GAAjB,CAAqB,sBAArB,EAA6CsE,KAAKC,GAAL,EAA7C;AACA,YAAI;AACF,gBAAME,WAAW,MAAMC,MAAM,OAAKR,OAAL,CAAaM,WAAnB,CAAvB;AACA,cAAIC,SAASE,MAAT,KAAoB,GAAxB,EAA6B;AAC3B,kBAAMC,UAAU,MAAMH,SAASI,IAAT,EAAtB;;AAEA,mBAAKd,WAAL,CAAiB/D,GAAjB,CAAqB,UAArB,EAAiC4E,OAAjC;AACA,mBAAKb,WAAL,CAAiB/D,GAAjB,CAAqB,yBAArB,EAAgD,OAAKkE,OAAL,CAAaC,OAA7D;AACD;AACF,SARD,CAQE,OAAOW,CAAP,EAAU;AACV3B,kBAAQX,KAAR,CAAcsC,CAAd,EADU,CACQ;AACnB;AACF;AA1BsB;AA2BxB;;AAEDC,uBAAqB;AACnB;AACD;;AAEDC,6BAA2BC,eAA3B,EAA4C;AAC1C,UAAMC,eAAezJ,SAASM,cAAT,CAAwB,6BAAxB,CAArB;;AAEA,QAAImJ,YAAJ,EAAkB;AAChBA,mBAAaC,KAAb,CAAmBC,OAAnB,GAA6BH,kBAAkB,EAAlB,GAAuB,MAApD;AACD;AACF;;AAEDI,wBAAsB;AACpB,UAAMC,aAAa7J,SAASM,cAAT,CAAwB,KAAKwJ,SAA7B,CAAnB;AACA,UAAMX,UAAU,KAAKb,WAAL,CAAiBtD,GAAjB,CAAqB,UAArB,CAAhB;;AAEA,QAAI,CAAC6E,UAAL,EAAiB;AACf,YAAM,IAAIzI,KAAJ,CAAW,iCAAgC,KAAK0I,SAAU,IAA1D,CAAN;AACD;;AAED;AACA,QAAI,CAACX,OAAL,EAAc;AACZ,YAAM,IAAI/H,KAAJ,CAAU,gDAAV,CAAN;AACD;;AAED,QAAI,OAAO+H,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,YAAM,IAAI/H,KAAJ,CAAU,2CAAV,CAAN;AACD;;AAED;AACA;AACAyI,eAAWE,SAAX,GAAuBZ,OAAvB;;AAEA;AACA;AACA,SAAK,MAAMa,QAAX,IAAuBH,WAAWI,oBAAX,CAAgC,QAAhC,CAAvB,EAAkE;AAChE,YAAMC,kBAAkBlK,SAASmK,aAAT,CAAuB,QAAvB,CAAxB;AACAD,sBAAgBd,IAAhB,GAAuBY,SAASZ,IAAhC;AACAY,eAASI,UAAT,CAAoBC,YAApB,CAAiCH,eAAjC,EAAkDF,QAAlD;AACD;AACF;;AAED5B,YAAUkC,GAAV,EAAe;AACb,QAAIA,IAAIjI,IAAJ,CAAS1C,IAAT,KAAkB,8DAAAC,CAAG2K,eAAzB,EAA0C;AACxC,UAAI,CAAC,KAAKjC,WAAL,CAAiBvD,SAAjB,CAA2BI,QAA3B,CAAoCmF,IAAIjI,IAAJ,CAASA,IAA7C,CAAL,EAAyD;AACvD,aAAKiG,WAAL,CAAiB/D,GAAjB,CAAqB,WAArB,EAAkC,KAAK+D,WAAL,CAAiBvD,SAAjB,CAA2ByF,MAA3B,CAAkCF,IAAIjI,IAAJ,CAASA,IAA3C,CAAlC;AACArC,iBAASM,cAAT,CAAwB,oBAAxB,EAA8CoJ,KAA9C,CAAoDC,OAApD,GAA8D,MAA9D;AACD;AACF;AACF;;AAED;;;;;;;;;AASMc,MAAN,CAAWzJ,OAAX,EAAoB;AAAA;;AAAA;AAClB0J,aAAOC,MAAP,CAAc,MAAd,EAAoB;AAClBlC,iBAAS,EADS;AAElBqB,mBAAW,UAFO;AAGlBzD,iBAAS;AAHS,OAApB,EAIGrF,OAJH;;AAMA;AACA,UAAI3B,OAAOyG,qBAAX,EAAkC;AAChCzG,eAAOyG,qBAAP,CAA6B,8BAA7B,EAA6D,OAAKsC,SAAlE;AACD;;AAED;AACA;AACA,UAAI,OAAK/B,OAAT,EAAkB;AAChB,YAAI;AACF,gBAAM,OAAKiC,WAAL,CAAiBjC,OAAjB,EAAN;AACD,SAFD,CAEE,OAAOgD,CAAP,EAAU;AACV3B,kBAAQX,KAAR,CAAcsC,CAAd,EADU,CACQ;AACnB;AACF;;AAED;AACA,WAAK,MAAM7E,GAAX,IAAkBkG,OAAOE,IAAP,CAAY,OAAKnC,OAAjB,CAAlB,EAA6C;AAC3C,YAAIjE,QAAQ,WAAZ,EAAyB;AACvB,iBAAK8D,WAAL,CAAiB/D,GAAjB,CAAqB,WAArB,EAAkC,OAAKkE,OAAL,CAAajE,GAAb,CAAlC;AACD,SAFD,MAEO;AACL,iBAAK8D,WAAL,CAAiB/D,GAAjB,CAAsB,WAAUC,GAAI,EAApC,EAAuC,OAAKiE,OAAL,CAAajE,GAAb,CAAvC;AACD;AACF;;AAED;AACA,YAAM,OAAK+D,gBAAL,EAAN;;AAEA;AACA,UAAI;AACF,eAAKqB,mBAAL;AACD,OAFD,CAEE,OAAOP,CAAP,EAAU;AACV,eAAKC,kBAAL,CAAwBD,CAAxB;AACD;;AAEDwB,aAAOC,aAAP,CAAqB,IAAIC,KAAJ,CAAU/G,sBAAV,CAArB;;AAEA,aAAKuF,0BAAL,CAAgC,IAAhC;AACA,aAAKyB,WAAL,GAAmB,IAAnB;AA5CkB;AA6CnB;;AAEDC,WAAS;AACPJ,WAAOC,aAAP,CAAqB,IAAIC,KAAJ,CAAU9G,uBAAV,CAArB;AACA,SAAKsF,0BAAL,CAAgC,KAAhC;AACA,QAAIlK,OAAO4G,wBAAX,EAAqC;AACnC5G,aAAO4G,wBAAP,CAAgC,8BAAhC,EAAgE,KAAKmC,SAArE;AACD;AACD,SAAK4C,WAAL,GAAmB,KAAnB;AACD;AA3J2B;;AA8J9B;;;;;;;;AAQO,SAASzK,qBAAT,CAA+BpB,KAA/B,EAAsC;AAC3C,QAAM+L,WAAW,IAAIhD,gBAAJ,CAAqB/I,MAAMK,QAA3B,CAAjB;AACA,QAAM2L,kBAAkB,IAAI,qFAAJ,EAAxB;;AAEA,MAAIC,eAAe,KAAnB;;AAEAjM,QAAMkM,SAAN,mBAAgB,aAAY;AAC1B,UAAMC,QAAQnM,MAAMoM,QAAN,EAAd;AACA,UAAMC,oBAAoBF,MAAMG,KAAN,CAAYC,MAAZ,CAAmBC,yBAAnB,IAAgDL,MAAMG,KAAN,CAAYC,MAAZ,CAAmBE,wBAAnB,GAA8C,CAAxH;AACA;AACA;AACA;AACA,QAAIN,MAAMG,KAAN,CAAYC,MAAZ,CAAmB,gBAAnB;AACF;AACA,KAACF,iBAFC,IAGF,CAACF,MAAMG,KAAN,CAAYC,MAAZ,CAAmBG,eAHlB,IAIFP,MAAMQ,QAAN,CAAed,WAJb,IAKF,CAACE,SAASF,WALR;AAMF;AACA,KAACI,YAPC,IAQFnL,SAASC,IAAT,KAAkB,eARpB,EASE;AACAkL,qBAAe,IAAf;AACA,YAAMF,SAAST,IAAT,CAAc,EAAChC,SAAS6C,MAAMQ,QAAhB,EAAd,CAAN;AACAV,qBAAe,KAAf;AACD,KAbD,MAaO,IACL,CAACE,MAAMG,KAAN,CAAYC,MAAZ,CAAmB,gBAAnB,MAAyC,KAAzC,IACCJ,MAAMG,KAAN,CAAYC,MAAZ,CAAmBG,eAAnB,KAAuC,IADzC,KAEAX,SAASF,WAHJ,EAIL;AACAE,eAASD,MAAT;AACD;;AAED;AACA;AACA,QACE,CAACK,MAAMG,KAAN,CAAYC,MAAZ,CAAmBC,yBAAnB,IAAgDL,MAAMG,KAAN,CAAYC,MAAZ,CAAmBE,wBAAnB,GAA8C,CAA/F,KACAN,MAAMG,KAAN,CAAYC,MAAZ,CAAmB,gBAAnB,CADA,IAEA,CAACP,gBAAgBH,WAHnB,EAGgC;AAC9BG,sBAAgBV,IAAhB;AACD,KALD,MAKO,IACL,CAAE,CAACa,MAAMG,KAAN,CAAYC,MAAZ,CAAmBC,yBAApB,IAAiDL,MAAMG,KAAN,CAAYC,MAAZ,CAAmBE,wBAAnB,KAAgD,CAAlG,IAAwG,CAACN,MAAMG,KAAN,CAAYC,MAAZ,CAAmB,gBAAnB,CAA1G,KACAP,gBAAgBH,WAFX,EAGL;AACAG,sBAAgBF,MAAhB;AACD;AACF,GAxCD;;AA0CA;AACA,SAAO,EAACC,QAAD,EAAWC,eAAX,EAAP;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3aD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMY,wBAAwB,0BAA9B;AACA,MAAMC,wBAAwB,0BAA9B;;AAEO,MAAMC,gBAAgB;AAC3BC,cAAYC,QAAZ,EAAsB;AACpB9M,WAAOyG,qBAAP,CAA6BiG,qBAA7B,EAAoDI,QAApD;AACD,GAH0B;AAI3BC,iBAAeD,QAAf,EAAyB;AACvB9M,WAAO4G,wBAAP,CAAgC8F,qBAAhC,EAAuDI,QAAvD;AACD,GAN0B;AAO3BE,cAAYtL,MAAZ,EAAoB;AAClB1B,WAAOiN,mBAAP,CAA2BN,qBAA3B,EAAkDjL,MAAlD;AACD,GAT0B;AAU3BwL,YAAUrH,EAAV,EAAc;AACZ+G,kBAAcI,WAAd,CAA0B,EAAC1M,MAAM,qBAAP,EAA8B0C,MAAM,EAAC6C,EAAD,EAApC,EAA1B;AACD,GAZ0B;AAa3BsH,cAAYC,MAAZ,EAAoB;AAClBR,kBAAcI,WAAd,CAA0B,EAAC1M,MAAM,cAAP,EAAuB0C,MAAM,EAACoK,MAAD,EAA7B,EAA1B;AACD,GAf0B;AAgB3BC,gBAAc,EAACC,aAAD,EAAgBC,oBAAhB,EAAd,EAAqD;AACnD,QAAID,iBAAiB,kEAArB,EAAyB;AACvBV,oBAAcI,WAAd,CAA0B,EAAC1M,MAAMgN,aAAP,EAAsBtK,MAAM,EAACuK,oBAAD,EAA5B,EAA1B;AACD;AACF,GApB0B;AAqB3BC,cAAY3H,EAAZ,EAAgB;AACd+G,kBAAcI,WAAd,CAA0B,EAAC1M,MAAM,uBAAP,EAAgC0C,MAAM,EAAC6C,EAAD,EAAtC,EAA1B;AACD,GAvB0B;AAwB3B4H,gBAAcL,MAAd,EAAsB;AACpBR,kBAAcI,WAAd,CAA0B,EAAC1M,MAAM,gBAAP,EAAyB0C,MAAM,EAACoK,MAAD,EAA/B,EAA1B;AACD,GA1B0B;AA2B3BM,mBAAiB;AACfd,kBAAcI,WAAd,CAA0B,EAAC1M,MAAM,kBAAP,EAA1B;AACD,GA7B0B;AA8B3BqN,kBAAgB9H,EAAhB,EAAoB;AAClB+G,kBAAcI,WAAd,CAA0B,EAAC1M,MAAM,kBAAP,EAA2B0C,MAAM,EAAC6C,EAAD,EAAjC,EAA1B;AACD,GAhC0B;AAiC3B+H,gBAAcC,IAAd,EAAoB;AAClB,UAAM/D,UAAU,iEAAA1J,CAAG8C,iBAAH,CAAqB2K,IAArB,CAAhB;AACA7N,WAAOiN,mBAAP,CAA2B,gFAA3B,EAA6DnD,OAA7D;AACD,GApC0B;AAqC3BgE,gBAAc;AACZ,QAAItC,OAAO5K,QAAP,CAAgBC,IAAhB,CAAqBiF,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;AAC7C,YAAMiI,SAAS,IAAIC,eAAJ,CAAoBxC,OAAO5K,QAAP,CAAgBC,IAAhB,CAAqBoN,KAArB,CAA2BzC,OAAO5K,QAAP,CAAgBC,IAAhB,CAAqBqN,OAArB,CAA6B,UAA7B,CAA3B,CAApB,CAAf;AACA,UAAI;AACF,cAAMC,WAAW,IAAIC,GAAJ,CAAQL,OAAOpI,GAAP,CAAW,UAAX,CAAR,CAAjB;AACA,eAAO;AACL0I,eAAKF,SAAStN,IADT;AAELyN,qBAAWP,OAAOpI,GAAP,CAAW,WAAX;AAFN,SAAP;AAID,OAND,CAME,OAAOqE,CAAP,EAAU,CAAE;AACf;;AAED,WAAO,IAAP;AACD;AAlD0B,CAAtB;;AAqDP;AACA,SAASuE,4BAAT,CAAsCC,SAAtC,EAAiDC,SAAjD,EAA4D;AAC1D,SAAQD,UAAUE,OAAV,CAAkB7I,EAAlB,KAAyB,CAAC4I,UAAUC,OAAX,IAAsBD,UAAUC,OAAV,CAAkB7I,EAAlB,KAAyB2I,UAAUE,OAAV,CAAkB7I,EAA1F,CAAR;AACD;;AAED,SAAS8I,gBAAT,CAA0BC,OAA1B,EAAmC;AACjC,QAAMC,KAAK,IAAI,qDAAJ,CAAmB,OAAnB,CAAX;AACAA,KAAGC,WAAH,CAAgB,qBAAoBF,OAAQ,EAA5C;AACA,SAAO,CAACC,EAAD,CAAP;AACD;;AAED;AACA,MAAME,eAAe;AACnBC,KAAG,qEADgB;AAEnBC,KAAG,qEAFgB;AAGnBC,KAAG,qEAHgB;AAInBC,UAAQ,0EAJW;AAKnBC,MAAI,sEALe;AAMnBC,MAAI;AANe,CAArB;;AASA;;;;AAIO,SAASC,YAAT,CAAsBC,KAAtB,EAA6BC,SAA7B,EAAwC;AAC7C,MAAID,KAAJ,EAAW;AACT,WAAOlE,OAAOE,IAAP,CAAYgE,KAAZ,EAAmBE,MAAnB,CAA0B,CAACC,GAAD,EAAMC,OAAN,KAAkB;AACjDD,UAAIC,OAAJ,IAAe,kEAAG,MAAM,+DAAAC,CAAQL,MAAMI,OAAN,EAAetB,GAAvB,CAAT,EAAsC,eAAakB,MAAMI,OAAN,EAAeE,MAAlE,EAA0E,SAASL,SAAnF,GAAf;AACA,aAAOE,GAAP;AACD,KAHM,EAGJ,EAHI,CAAP;AAID;;AAED,SAAO,IAAP;AACD;;AAED;;;AAGA,SAASI,QAAT,CAAkBC,KAAlB,EAAyB;AACvB,SACE;AAAC,0DAAD;AAAA,eAAW,IAAG,iBAAd,IAAoChB,YAApC,EAAsDO,aAAaS,MAAMR,KAAnB,EAA0BQ,MAAMP,SAAhC,CAAtD;AACE;AAAA;AAAA;AAAOO,YAAMhG;AAAb;AADF,GADF;AAKD;;AAEM,MAAMiG,iBAAN,SAAgC,4CAAAC,CAAMC,aAAtC,CAAoD;AACzDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKI,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBnH,IAAzB,CAA8B,IAA9B,CAA3B;AACA,SAAKwG,SAAL,GAAiB,KAAKA,SAAL,CAAexG,IAAf,CAAoB,IAApB,CAAjB;AACA,SAAKoH,cAAL,GAAsB,KAAKA,cAAL,CAAoBpH,IAApB,CAAyB,IAAzB,CAAtB;AACA,SAAKqH,uBAAL,GAA+B,KAAKA,uBAAL,CAA6BrH,IAA7B,CAAkC,IAAlC,CAA/B;AACA,SAAKiD,KAAL,GAAa,EAACyC,SAAS,EAAV,EAActB,QAAQ,EAAtB,EAAb;AACD;;AAEDiD,0BAAwBC,aAAa,EAArC,EAAyC;AACvC,UAAM,EAAC5B,OAAD,EAAUtB,MAAV,KAAoB,KAAKnB,KAA/B;AACA,QAAI,CAACyC,OAAD,IAAY,CAAC4B,WAAWC,UAA5B,EAAwC;AACtC,YAAM,IAAIxO,KAAJ,CAAW,oDAAX,CAAN;AACD;AACD,UAAMyO,YAAa,GAAE9B,QAAQ+B,QAAR,IAAoBrD,OAAOqD,QAAS,aAAzD;AACA7D,kBAAcgB,aAAd;AACE2C,kBAAY7B,QAAQ7I,EAAR,IAAcyK,WAAWC,UADvC;AAEEvM,cAAQsM,WAAWzK,EAFrB;AAGEnE,cAAQ8O;AAHV,OAIKF,UAJL;AAMD;;AAEDF,iBAAeE,UAAf,EAA2B;AACzB,SAAKD,uBAAL,iBAA8B7I,OAAO,YAArC,IAAsD8I,UAAtD;AACD;;AAED;AACA;AACA;AACAd,YAAUhI,KAAV,EAAiB;AACf,UAAMqI,SAAS;AACbhM,aAAO2D,MAAM/E,MAAN,CAAaiO,OAAb,CAAqBb,MADf;AAEb;AACA;AACAhK,UAAI;AAJS,KAAf;AAMA,SAAKwK,uBAAL,iBAA8B7I,OAAO,cAArC,IAAwDqI,MAAxD;AACD;;AAEDc,cAAY9K,EAAZ,EAAgB;AACd,WAAO,MAAM+G,cAAcM,SAAd,CAAwBrH,EAAxB,CAAb;AACD;;AAED+K,cAAYxD,MAAZ,EAAoB;AAClB,WAAO,MAAMR,cAAcO,WAAd,CAA0BC,MAA1B,CAAb;AACD;;AAED+C,sBAAoB,EAACnN,MAAMtB,MAAP,EAApB,EAAoC;AAClC,YAAQA,OAAOpB,IAAf;AACE,WAAK,aAAL;AACE,aAAKuQ,QAAL,CAAc,EAACnC,SAAShN,OAAOsB,IAAjB,EAAd;AACA;AACF,WAAK,sBAAL;AACE,aAAK6N,QAAL,CAAc,EAACzD,QAAQ1L,OAAOsB,IAAhB,EAAd;AACA;AACF,WAAK,eAAL;AACE,YAAItB,OAAOsB,IAAP,CAAY6C,EAAZ,KAAmB,KAAKoG,KAAL,CAAWyC,OAAX,CAAmB7I,EAA1C,EAA8C;AAC5C,eAAKgL,QAAL,CAAc,EAACnC,SAAS,EAAV,EAAd;AACD;AACD;AACF,WAAK,cAAL;AACE,YAAI,KAAKzC,KAAL,CAAWmB,MAAX,CAAkBA,MAAtB,EAA8B;AAC5B,eAAKyD,QAAL,CAAc,EAACzD,QAAQ,EAAT,EAAd;AACD;AACD;AACF,WAAK,WAAL;AACE,aAAKyD,QAAL,CAAc,EAACnC,SAAS,EAAV,EAActB,QAAQ,EAAtB,EAAd;AAlBJ;AAoBD;;AAED0D,uBAAqB;AACnB,UAAM3C,WAAWvB,cAAckB,WAAd,EAAjB;AACAlB,kBAAcC,WAAd,CAA0B,KAAKsD,mBAA/B;;AAEA;AACA,QAAI,KAAKJ,KAAL,CAAWpP,QAAX,CAAoBC,QAApB,CAA6BC,IAA7B,KAAsC,eAA1C,EAA2D;AACzD+L,oBAAcI,WAAd,CAA0B,EAAC1M,MAAM,SAAP,EAAkB0C,MAAM,EAAC+N,SAAS,UAAV,EAAxB,EAA1B;AACD,KAFD,MAEO;AACLnE,oBAAcI,WAAd,CAA0B,EAAC1M,MAAM,oBAAP,EAA6B0C,MAAM,EAACmL,QAAD,EAAnC,EAA1B;AACD;AACF;;AAED6C,yBAAuB;AACrBpE,kBAAcG,cAAd,CAA6B,KAAKoD,mBAAlC;AACD;;AAEDc,mBAAiB;AACf,WACE;AAAC,0GAAD;AAAA;AACE,YAAG,mBADL;AAEE,iBAAS,KAAKhF,KAAL,CAAWyC,OAFtB;AAGE,wBAAgB,KAAK0B,cAHvB;AAIE,sCAA8B7B;AAC9B;AALF,UAME,UAAU,KAAKwB,KAAL,CAAWpP,QANvB;AAOI;AAAC,yEAAD;AAAA,UAAsB,UAAUgO,iBAAiB,KAAK1C,KAAL,CAAWyC,OAAX,CAAmBE,OAAnB,CAA2B7E,IAA5C,CAAhC;AACE,mEAAC,oFAAD,eACM,KAAKkC,KAAL,CAAWyC,OADjB;AAEE,oBAAU,2DAAC,QAAD,IAAU,MAAM,KAAKzC,KAAL,CAAWyC,OAAX,CAAmBE,OAAnB,CAA2B7E,IAA3C;AACU,mBAAO,KAAKkC,KAAL,CAAWyC,OAAX,CAAmBE,OAAnB,CAA2BW,KAD5C;AAEU,uBAAW,KAAKC,SAF1B,GAFZ;AAKE,qBAAU,mBALZ;AAME,0BAAgB5C,cAAcc,cANhC;AAOE,mBAAS,KAAKiD,WAAL,CAAiB,KAAK1E,KAAL,CAAWyC,OAAX,CAAmB7I,EAApC,CAPX;AAQE,mCAAyB,KAAKwK,uBARhC;AADF;AAPJ,KADF;AAoBD;;AAEDa,qBAAmB;AACjB,WACE,2DAAC,gGAAD,eACM,KAAKjF,KAAL,CAAWmB,MADjB;AAEE,iBAAU,gBAFZ;AAGE,gBAAUR,cAAcS,aAH1B;AAIE,oBAAc,KAAKuD,WAAL,CAAiB,KAAK3E,KAAL,CAAWmB,MAAX,CAAkBA,MAAnC,CAJhB;AAKE,sBAAgBR,cAAcc,cALhC;AAME,+BAAyB,KAAK2C,uBANhC,IADF;AAQD;;AAEDc,WAAS;AACP,UAAM,EAACzC,OAAD,EAAUtB,MAAV,KAAoB,KAAKnB,KAA/B;AACA,QAAI,CAACyC,QAAQ7I,EAAT,IAAe,CAACuH,OAAOgE,QAA3B,EAAqC;AAAE,aAAO,IAAP;AAAc;AACrD,QAAIhE,OAAOgE,QAAP,KAAoB,YAAxB,EAAsC;AAAE,aAAO,KAAKF,gBAAL,EAAP;AAAiC;AACzE,WAAO,KAAKD,cAAL,EAAP;AACD;AA/HwD;;AAkI3DjB,kBAAkBqB,YAAlB,GAAiC,EAAC1Q,UAAUX,OAAOW,QAAlB,EAAjC;;AAEO,MAAM2Q,eAAN,CAAsB;AAC3BvM,gBAAc;AACZ,SAAK4G,WAAL,GAAmB,KAAnB;AACA,SAAK4F,gBAAL,GAAwB,IAAxB;AACD;;AAEDC,WAAS;AACP,SAAKD,gBAAL,GAAwBvR,OAAOW,QAAP,CAAgBM,cAAhB,CAA+B,oBAA/B,CAAxB;AACAR,IAAA,gDAAAA,CAAS0Q,MAAT,CAAgB,2DAAC,iBAAD,OAAhB,EAAuC,KAAKI,gBAA5C;AACD;;AAEDE,aAAW;AACThR,IAAA,gDAAAA,CAASiR,sBAAT,CAAgC,KAAKH,gBAArC;AACD;;AAEDnG,SAAO;AACL,SAAKoG,MAAL;AACA,SAAK7F,WAAL,GAAmB,IAAnB;AACD;;AAEDC,WAAS;AACP,QAAI,KAAKD,WAAT,EAAsB;AACpB,WAAK8F,QAAL;AACA,WAAK9F,WAAL,GAAmB,KAAnB;AACD;AACF;AAzB0B,C;;;;;;;ACtP7B,uB;;;;;;ACAA,2B;;;;;;;;;;;;;;;;ACAA;AAAA;AAAA;;AAEA;AACA;;AAEO,MAAMgG,qBAAqB,uBAA3B;AACA,MAAMhF,wBAAwB,8BAA9B;AACA,MAAMD,wBAAwB,8BAA9B;AACA,MAAMkF,uBAAuB,CAAC,8DAAArR,CAAGsR,sBAAJ,EAA4B,8DAAAtR,CAAGuR,gBAA/B,CAA7B;;AAEP;;;;;;;;;;;;;;;;AAgBA,SAASC,iBAAT,CAA2BC,WAA3B,EAAwC;AACtC,SAAO,CAACC,SAAD,EAAYvQ,MAAZ,KAAuB;AAC5B,QAAIA,OAAOpB,IAAP,KAAgBqR,kBAApB,EAAwC;AACtC,+BAAWM,SAAX,EAAyBvQ,OAAOsB,IAAhC;AACD;;AAED,WAAOgP,YAAYC,SAAZ,EAAuBvQ,MAAvB,CAAP;AACD,GAND;AAOD;;AAED;;;AAGA,MAAMwQ,oBAAoBpS,SAASqS,QAAQzQ,UAAU;AACnD,QAAMS,YAAYT,OAAOE,IAAP,IAAeF,OAAOE,IAAP,CAAYO,SAA7C;AACA,MAAI,8DAAAiQ,CAAGnO,YAAH,CAAgBvC,MAAhB,CAAJ,EAA6B;AAC3BuL,wBAAoBN,qBAApB,EAA2CjL,MAA3C;AACD;AACD,MAAI,CAACS,SAAL,EAAgB;AACdgQ,SAAKzQ,MAAL;AACD;AACF,CARD;;AAUO,MAAM2Q,wBAAwBvS,SAASqS,QAAQzQ,UAAU;AAC9D,MAAI5B,MAAMwS,aAAV,EAAyB;AACvB,WAAOH,KAAKzQ,MAAL,CAAP;AACD;;AAED,QAAM6Q,qBAAqB7Q,OAAOpB,IAAP,KAAgBqR,kBAA3C;AACA,QAAMa,uBAAuB9Q,OAAOpB,IAAP,KAAgB,8DAAAC,CAAGC,qBAAhD;;AAEA,MAAIgS,oBAAJ,EAA0B;AACxB1S,UAAM2S,uBAAN,GAAgC,IAAhC;AACA,WAAON,KAAKzQ,MAAL,CAAP;AACD;;AAED,MAAI6Q,kBAAJ,EAAwB;AACtBzS,UAAMwS,aAAN,GAAsB,IAAtB;AACA,WAAOH,KAAKzQ,MAAL,CAAP;AACD;;AAED;AACA,MAAI5B,MAAM2S,uBAAN,IAAiC/Q,OAAOpB,IAAP,KAAgB,8DAAAC,CAAGmS,IAAxD,EAA8D;AAC5D,WAAOP,KAAK,iEAAA/R,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGC,qBAAV,EAAd,CAAL,CAAP;AACD;;AAED,MAAI,8DAAA4R,CAAGlO,oBAAH,CAAwBxC,MAAxB,KAAmC,8DAAA0Q,CAAGjO,kBAAH,CAAsBzC,MAAtB,CAAnC,IAAoE,8DAAA0Q,CAAGhO,iBAAH,CAAqB1C,MAArB,CAAxE,EAAsG;AACpG;AACA;AACA;AACA,WAAO,IAAP;AACD;;AAED,SAAOyQ,KAAKzQ,MAAL,CAAP;AACD,CA/BM;;AAiCP;;;;;;;AAOO,MAAMiR,8BAA8B7S,SAASqS,QAAQzQ,UAAU;AACpE,MAAI5B,MAAM8S,iBAAV,EAA6B;AAC3BT,SAAKzQ,MAAL;AACD,GAFD,MAEO,IAAI,8DAAA0Q,CAAG/N,UAAH,CAAc3C,MAAd,CAAJ,EAA2B;AAChCyQ,SAAKzQ,MAAL;AACA5B,UAAM8S,iBAAN,GAA0B,IAA1B;AACA;AACA,QAAI9S,MAAM+S,iBAAV,EAA6B;AAC3B/S,YAAM+S,iBAAN,CAAwB7Q,OAAxB,CAAgCmQ,IAAhC;AACArS,YAAM+S,iBAAN,GAA0B,EAA1B;AACD;AACF,GARM,MAQA,IAAIjB,qBAAqB9L,QAArB,CAA8BpE,OAAOpB,IAArC,CAAJ,EAAgD;AACrDR,UAAM+S,iBAAN,GAA0B/S,MAAM+S,iBAAN,IAA2B,EAArD;AACA/S,UAAM+S,iBAAN,CAAwB9M,IAAxB,CAA6BrE,MAA7B;AACD,GAHM,MAGA;AACL;AACAyQ,SAAKzQ,MAAL;AACD;AACF,CAlBM;;AAoBP;;;;;;;AAOO,SAAS3B,SAAT,CAAmB+S,QAAnB,EAA6BC,YAA7B,EAA2C;AAChD,QAAMjT,QAAQ,yDAAAkT,CACZjB,kBAAkB,6DAAAkB,CAAgBH,QAAhB,CAAlB,CADY,EAEZC,YAFY,EAGZ/S,OAAOyG,qBAAP,IAAgC,6DAAAyM,CAAgBb,qBAAhB,EAAuCM,2BAAvC,EAAoET,iBAApE,CAHpB,CAAd;;AAMApS,QAAMwS,aAAN,GAAsB,KAAtB;AACAxS,QAAM2S,uBAAN,GAAgC,KAAhC;;AAEA,MAAIzS,OAAOyG,qBAAX,EAAkC;AAChCzG,WAAOyG,qBAAP,CAA6BiG,qBAA7B,EAAoDzB,OAAO;AACzD,UAAI;AACFnL,cAAMK,QAAN,CAAe8K,IAAIjI,IAAnB;AACD,OAFD,CAEE,OAAOmQ,EAAP,EAAW;AACX9K,gBAAQX,KAAR,CAAc,cAAd,EAA8BuD,GAA9B,EAAmC,kBAAnC,EAAuDkI,EAAvD,EADW,CACiD;AAC5DC,aAAM,gBAAeC,KAAKC,SAAL,CAAerI,GAAf,CAAoB,qBAAoBkI,EAAG,KAAIA,GAAGI,KAAM,EAA7E;AACD;AACF,KAPD;AAQD;;AAED,SAAOzT,KAAP;AACD,C;;;;;;;AC1ID,uB;;;;;;;;;;;;;ACAA;;AAEO,MAAM0T,UAAU,SAAhB;AACA,MAAMC,0BAA0B,kBAAhC;;AAEP;;;AAGO,MAAMC,kBAAN,SAAiC,4CAAAzD,CAAMC,aAAvC,CAAqD;AAC1D;AACA;AACA;AACAyD,gCAA8B;AAC5B,QAAI,KAAK5D,KAAL,CAAWpP,QAAX,CAAoBiT,eAApB,KAAwCJ,OAA5C,EAAqD;AACnD,WAAKzD,KAAL,CAAWK,cAAX,CAA0B,EAACvK,IAAI,KAAKkK,KAAL,CAAWlK,EAAhB,EAA1B;AACD,KAFD,MAEO;AACL;AACA;AACA,UAAI,KAAKgO,mBAAT,EAA8B;AAC5B,aAAK9D,KAAL,CAAWpP,QAAX,CAAoBmT,mBAApB,CAAwCL,uBAAxC,EAAiE,KAAKI,mBAAtE;AACD;;AAED;AACA,WAAKA,mBAAL,GAA2B,MAAM;AAC/B,YAAI,KAAK9D,KAAL,CAAWpP,QAAX,CAAoBiT,eAApB,KAAwCJ,OAA5C,EAAqD;AACnD,eAAKzD,KAAL,CAAWK,cAAX,CAA0B,EAACvK,IAAI,KAAKkK,KAAL,CAAWlK,EAAhB,EAA1B;AACA,eAAKkK,KAAL,CAAWpP,QAAX,CAAoBmT,mBAApB,CAAwCL,uBAAxC,EAAiE,KAAKI,mBAAtE;AACD;AACF,OALD;AAMA,WAAK9D,KAAL,CAAWpP,QAAX,CAAoBoT,gBAApB,CAAqCN,uBAArC,EAA8D,KAAKI,mBAAnE;AACD;AACF;;AAED7C,yBAAuB;AACrB,QAAI,KAAK6C,mBAAT,EAA8B;AAC5B,WAAK9D,KAAL,CAAWpP,QAAX,CAAoBmT,mBAApB,CAAwCL,uBAAxC,EAAiE,KAAKI,mBAAtE;AACD;AACF;;AAEDG,sBAAoB;AAClB,QAAI,KAAKjE,KAAL,CAAWkE,WAAf,EAA4B;AAC1B,WAAKN,2BAAL;AACD;AACF;;AAEDO,qBAAmBzF,SAAnB,EAA8B;AAC5B,QAAI,KAAKsB,KAAL,CAAWxB,4BAAX,CAAwC,KAAKwB,KAA7C,EAAoDtB,SAApD,CAAJ,EAAoE;AAClE,WAAKkF,2BAAL;AACD;AACF;;AAEDxC,WAAS;AACP,WAAO,KAAKpB,KAAL,CAAWoE,QAAlB;AACD;AA7CyD;;AAgD5DT,mBAAmBrC,YAAnB,GAAkC;AAChC1Q,YAAUX,OAAOW,QADe;AAEhCsT,eAAa;AAFmB,CAAlC,C;;;;;;;ACxDA,0B;;;;;;;;;ACAO,SAASrE,OAAT,CAAiBvB,GAAjB,EAAsB;AAC3B,MAAI,CAACA,GAAL,EAAU;AACR,WAAO,EAAP;AACD;AACD,QAAM,EAAC+F,QAAD,KAAa,IAAIhG,GAAJ,CAAQC,GAAR,CAAnB;AACA,QAAMgG,YAAY,CAChB,OADgB,EAEhB,QAFgB,EAGhB,OAHgB,EAIhB,WAJgB,EAKhB,SALgB,EAMhBvO,QANgB,CAMPsO,QANO,CAAlB;AAOA,MAAI,CAACC,SAAL,EAAgB;AACdhM,YAAQiM,IAAR,CAAc,gBAAeF,QAAS,oCAAtC,EADc,CAC8D;AAC7E;AACD,SAAOC,YAAYhG,GAAZ,GAAkB,EAAzB;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;AChBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMkG,cAAc,6DAAAC,CAAWzE,SAC7B;AAAA;AAAA,IAAK,WAAU,cAAf;AACE,yEAAQ,WAAU,oBAAlB,EAAuC,SAASA,MAAM0E,OAAtD,EAA+D,OAAO1E,MAAM2E,IAAN,CAAWC,aAAX,CAAyB,EAAC9O,IAAI,4BAAL,EAAzB,CAAtE;AADF,CADkB,CAApB;;AAMA;AACA;AACA;AACA,SAAS+O,yBAAT,CAAmCC,MAAnC,EAA2C;AACzCC,EAAA,gEAAAA,CAAc,CAAC,EAACD,MAAD,EAASE,cAAc,IAAvB,EAAD,CAAd;AACD;;AAEM,MAAMC,KAAN,SAAoB,4CAAA/E,CAAMC,aAA1B,CAAwC;AAC7CY,uBAAqB;AACnB,UAAM,EAACmE,GAAD,EAAMJ,MAAN,KAAgB,KAAK9E,KAA3B;AACA,SAAKmF,oBAAL,CAA0BD,GAA1B;AACAL,8BAA0BC,MAA1B;AACA,QAAI,KAAK9E,KAAL,CAAWoF,UAAf,EAA2B;AACzBnV,aAAOW,QAAP,CAAgByU,IAAhB,CAAqBC,SAArB,CAA+BC,GAA/B,CAAmC,SAAnC;AACD;AACF;;AAEDtB,sBAAoB;AAClB;AACA;AACA;AACA,QAAI,KAAKjE,KAAL,CAAWwF,aAAf,EAA8B;AAC5B,WAAKxF,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGC,qBAAV,EAAd,CAApB;AACA,WAAKuP,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGuR,gBAAV,EAAd,CAApB;AACD;AACF;;AAEDd,yBAAuB;AACrB,SAAKwE,WAAL;AACD;;AAEDC,sBAAoB,EAACR,GAAD,EAApB,EAA2B;AACzB,SAAKO,WAAL;AACA,SAAKN,oBAAL,CAA0BD,GAA1B;AACD;;AAEDO,gBAAc;AACZ,UAAME,gBAAgB,CACpB,iBADoB;AAEpB;AACA;AACA/U,aAASyU,IAAT,CAAcC,SAAd,CAAwBnN,QAAxB,CAAiC,SAAjC,IAA8C,SAA9C,GAA0D,EAJtC,EAKpByN,MALoB,CAKbC,KAAKA,CALQ,EAKLC,IALK,CAKA,GALA,CAAtB;AAMA7V,WAAOW,QAAP,CAAgByU,IAAhB,CAAqBU,SAArB,GAAiCJ,aAAjC;AACD;;AAED;AACA;AACA;AACAR,uBAAqBD,GAArB,EAA0B;AACxB,QAAIA,OAAOA,IAAItJ,WAAX,IAA0B,CAAC,KAAKoK,cAApC,EAAoD;AAClD,WAAKhG,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGyV,kBAAV,EAA8BhT,MAAM,EAApC,EAAd,CAApB;AACA,WAAK+S,cAAL,GAAsB,IAAtB;AACD;AACF;;AAED5E,WAAS;AACP,UAAM,EAACpB,KAAD,KAAU,IAAhB;AACA,UAAM,EAACkF,GAAD,EAAMJ,MAAN,EAAcoB,OAAd,KAAyBlG,KAA/B;AACA,UAAM,EAACpE,WAAD,KAAgBsJ,GAAtB;;AAEA,UAAMiB,QAAQnG,MAAM3D,KAAN,CAAYC,MAA1B;AACA,QAAI,CAAC6J,MAAM5J,yBAAN,IAAmC4J,MAAM3J,wBAAN,GAAiC,CAArE,KAA2Ef,OAAO5K,QAAP,CAAgBuV,IAAhB,KAAyB,WAAxG,EAAqH;AACnH,aAAQ,2DAAC,gGAAD,OAAR;AACD;;AAED,QAAI,CAACpG,MAAMwF,aAAP,IAAwB,CAAC5J,WAA7B,EAA0C;AACxC,aAAO,IAAP;AACD;;AAED;AACA;AACA,QAAIuK,MAAM3J,wBAAN,GAAiC,CAArC,EAAwC;AACtCvM,aAAOW,QAAP,CAAgByU,IAAhB,CAAqBC,SAArB,CAA+BC,GAA/B,CAAmC,iBAAnC;AACD;;AAED,WAAQ;AAAC,6DAAD;AAAA,QAAc,QAAQT,MAAtB,EAA8B,UAAUoB,OAAxC;AACJ;AAAC,wGAAD;AAAA,UAAe,WAAU,uBAAzB;AACE,mEAAC,WAAD,EAAiB,KAAKlG,KAAtB;AADF;AADI,KAAR;AAKD;AA1E4C;;AA6ExC,MAAMqG,WAAN,SAA0B,4CAAAnG,CAAMC,aAAhC,CAA8C;AACnDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKsG,eAAL,GAAuB,KAAKA,eAAL,CAAqBrN,IAArB,CAA0B,IAA1B,CAAvB;AACD;;AAEDqN,oBAAkB;AAChB,SAAKtG,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGkC,UAAH,CAAc,EAAChC,MAAM,8DAAAC,CAAG+V,aAAV,EAAd,CAApB;AACA,SAAKvG,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa,EAACyE,OAAO,mBAAR,EAAb,CAApB;AACD;;AAED2J,WAAS;AACP,UAAM,EAACpB,KAAD,KAAU,IAAhB;AACA,UAAM,EAACkF,GAAD,KAAQlF,KAAd;AACA,UAAM,EAACpE,WAAD,KAAgBsJ,GAAtB;AACA,UAAMiB,QAAQnG,MAAM3D,KAAN,CAAYC,MAA1B;;AAEA,UAAMkK,qBAAqB,sEAAAC,CAAcC,aAAd,CAA4B7S,QAAQsS,MAAMtS,IAAN,CAApC,CAA3B;;AAEA,UAAM8S,iBAAiB,CACrB,eADqB,EAErBH,sBAAsB,cAFD,EAGrBZ,MAHqB,CAGdC,KAAKA,CAHS,EAGNC,IAHM,CAGD,GAHC,CAAvB;;AAKA,WACE;AAAA;AAAA;AACE;AAAA;AAAA,UAAK,WAAWa,cAAhB;AACE;AAAA;AAAA;AACGR,gBAAMS,UAAN,IACC;AAAA;AAAA,cAAK,WAAU,yBAAf;AACE;AAAC,8GAAD;AAAA;AACE,yEAAC,2EAAD;AADF;AADF,WAFJ;AAQE;AAAA;AAAA,cAAK,WAAY,eAAehL,cAAc,KAAd,GAAsB,EAAI,EAA1D;AACG,aAACuK,MAAMU,gBAAP,IACC;AAAA;AAAA,gBAAK,WAAU,yBAAf;AACE,yEAAC,sGAAD;AADF,aAFJ;AAME,uEAAC,kFAAD,OANF;AAOE,uEAAC,WAAD,IAAa,SAAS,KAAKP,eAA3B;AAPF,WARF;AAiBE,qEAAC,gGAAD;AAjBF;AADF,OADF;AAsBG,WAAKtG,KAAL,CAAWoF,UAAX,IAAyB,2DAAC,oGAAD;AAtB5B,KADF;AAyBD;AAjDkD;;AAoD9C,MAAM0B,OAAO,2DAAA7P,CAAQiF,UAAU,EAACgJ,KAAKhJ,MAAMgJ,GAAZ,EAAiB7I,OAAOH,MAAMG,KAA9B,EAAV,CAAR,EAAyD4I,KAAzD,CAAb,C;;;;;;;AC3JP,2B;;;;;;;;;;;;ACAA;AACA;;AAEO,MAAM8B,aAAN,SAA4B,4CAAA7G,CAAMC,aAAlC,CAAgD;AACrDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKrJ,SAAL,GAAiB,KAAKA,SAAL,CAAesC,IAAf,CAAoB,IAApB,CAAjB;AACA,SAAK+N,sCAAL,GAA8C,KAAKA,sCAAL,CAA4C/N,IAA5C,CAAiD,IAAjD,CAA9C;AACA,SAAKiD,KAAL,GAAa,EAAb;AACD;;AAEDvF,YAAU,EAAC1D,MAAMtB,MAAP,EAAV,EAA0B;AACxB,QAAIA,OAAOpB,IAAP,KAAgB,iBAApB,EAAuC;AACrC,WAAKuQ,QAAL,CAAcnP,OAAOsB,IAArB;AACD;AACF;;AAED8N,uBAAqB;AACnB,UAAM3C,WAAW,wEAAAvB,CAAckB,WAAd,EAAjB;AACAlB,IAAA,wEAAAA,CAAcI,WAAd,CAA0B,EAAC1M,MAAM,qBAAP,EAA8B0C,MAAM,EAACmL,QAAD,EAApC,EAA1B;AACAvB,IAAA,wEAAAA,CAAcC,WAAd,CAA0B,KAAKnG,SAA/B;AACD;;AAEDsK,yBAAuB;AACrBpE,IAAA,wEAAAA,CAAcG,cAAd,CAA6B,KAAKrG,SAAlC;AACD;;AAEDqQ,yCAAuC3F,QAAvC,EAAiD;AAC/C,WAAO,KAAKnF,KAAL,CAAW+K,QAAX,CAAoBrB,MAApB,CAA2B1K,OAAOA,IAAImG,QAAJ,KAAiBA,QAAjB,IAA6BnG,IAAIgM,OAAnE,CAAP;AACD;;AAEDC,cAAYjM,GAAZ,EAAiB;AACf,QAAIA,IAAIgM,OAAR,EAAiB;AACf;AACA,UAAI7J,SAAS,KAAK2J,sCAAL,CAA4C9L,IAAImG,QAAhD,CAAb;AACA,aAAO,MAAM,wEAAAxE,CAAcO,WAAd,CAA0BC,MAA1B,CAAb;AACD;AACD,WAAO,MAAM,wEAAAR,CAAcM,SAAd,CAAwBjC,IAAIpF,EAA5B,CAAb;AACD;;AAEDsR,gBAAclM,GAAd,EAAmB;AACjB,QAAIA,IAAIgM,OAAR,EAAiB;AACf;AACA,UAAI7J,SAAS,KAAK2J,sCAAL,CAA4C9L,IAAImG,QAAhD,CAAb;AACA,aAAO,MAAM,wEAAAxE,CAAca,aAAd,CAA4BL,MAA5B,CAAb;AACD;AACD,WAAO,MAAM,wEAAAR,CAAcY,WAAd,CAA0BvC,IAAIpF,EAA9B,CAAb;AACD;;AAEDuR,iBAAevR,EAAf,EAAmB;AACjB,WAAO,MAAM,wEAAA+G,CAAce,eAAd,CAA8B9H,EAA9B,CAAb;AACD;;AAEDwR,oBAAkBpM,GAAlB,EAAuB;AACrB,UAAMqM,YAAYrM,IAAIpF,EAAJ,KAAW,KAAKoG,KAAL,CAAWsL,aAAxC;AACA,UAAMC,YAAY,KAAKvL,KAAL,CAAWvG,SAAX,CAAqBI,QAArB,CAA8BmF,IAAIpF,EAAlC,CAAlB;;AAEA,QAAI4R,gBAAgB,cAApB;AACA,QAAIH,SAAJ,EAAe;AAAEG,uBAAiB,UAAjB;AAA8B;AAC/C,QAAID,SAAJ,EAAe;AAAEC,uBAAiB,UAAjB;AAA8B;;AAE/C,WAAQ;AAAA;AAAA,QAAI,WAAWA,aAAf,EAA8B,KAAKxM,IAAIpF,EAAvC;AACN;AAAA;AAAA,UAAI,WAAU,YAAd;AAA2B;AAAA;AAAA;AAAOoF,cAAIpF;AAAX;AAA3B,OADM;AAEN;AAAA;AAAA;AACE;AAAA;AAAA,YAAQ,WAAY,UAAU2R,YAAY,EAAZ,GAAiB,UAAY,EAA3D,EAA8D,SAASA,YAAY,KAAKL,aAAL,CAAmBlM,GAAnB,CAAZ,GAAsC,KAAKiM,WAAL,CAAiBjM,GAAjB,CAA7G;AAAqIuM,sBAAY,SAAZ,GAAwB;AAA7J,SADF;AAEEA,oBAAY,IAAZ,GAAmB;AAAA;AAAA,YAAQ,WAAU,QAAlB,EAA2B,SAAS,KAAKJ,cAAL,CAAoBnM,IAAIpF,EAAxB,CAApC;AAAA;AAAA;AAFrB,OAFM;AAMN;AAAA;AAAA,UAAI,WAAU,iBAAd;AACE;AAAA;AAAA;AAAMwN,eAAKC,SAAL,CAAerI,GAAf,EAAoB,IAApB,EAA0B,CAA1B;AAAN;AADF;AANM,KAAR;AAUD;;AAEDyM,mBAAiB;AACf,QAAI,CAAC,KAAKzL,KAAL,CAAW+K,QAAhB,EAA0B;AACxB,aAAO,IAAP;AACD;AACD,WAAQ;AAAA;AAAA;AAAO;AAAA;AAAA;AACZ,aAAK/K,KAAL,CAAW+K,QAAX,CAAoBW,GAApB,CAAwB1M,OAAO,KAAKoM,iBAAL,CAAuBpM,GAAvB,CAA/B;AADY;AAAP,KAAR;AAGD;;AAED2M,oBAAkB;AAChB,WAAQ;AAAA;AAAA;AAAO;AAAA;AAAA;AACZ,aAAK3L,KAAL,CAAW4L,SAAX,CAAqBF,GAArB,CAAyB,CAAClH,QAAD,EAAWxB,CAAX,KAAkB;AAAA;AAAA,YAAI,WAAU,cAAd,EAA6B,KAAKA,CAAlC;AAC1C;AAAA;AAAA;AAAKwB,qBAAS5K;AAAd,WAD0C;AAE1C;AAAA;AAAA;AAAK4K,qBAASnQ,IAAT,KAAkB,QAAlB,GAA6B;AAAA;AAAA,gBAAG,QAAO,QAAV,EAAmB,MAAMmQ,SAASpC,GAAlC;AAAwCoC,uBAASpC;AAAjD,aAA7B,GAAyF;AAA9F;AAF0C,SAA3C;AADY;AAAP,KAAR;AAMD;;AAED8C,WAAS;AACP,WAAQ;AAAA;AAAA,QAAK,WAAU,8BAAf;AACN;AAAA;AAAA;AAAA;AAAA,OADM;AAEN;AAAA;AAAA,UAAQ,WAAU,gBAAlB,EAAmC,SAAS,wEAAAvE,CAAcc,cAA1D;AAAA;AAAA,OAFM;AAGN;AAAA;AAAA;AAAA;AAAA,OAHM;AAIL,WAAKzB,KAAL,CAAW4L,SAAX,GAAuB,KAAKD,eAAL,EAAvB,GAAgD,IAJ3C;AAKN;AAAA;AAAA;AAAA;AAAA,OALM;AAML,WAAKF,cAAL;AANK,KAAR;AAQD;AAjGoD,C;;;;;;;;;;;;;;;;;ACHvD;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;AAmBO,MAAMI,cAAN,SAA6B,4CAAA7H,CAAMC,aAAnC,CAAiD;AACtDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKgI,gBAAL,GAAwB,KAAKA,gBAAL,CAAsB/O,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKgP,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBhP,IAAvB,CAA4B,IAA5B,CAAzB;AACD;;AAED+O,qBAAmB;AACjB,SAAKhI,KAAL,CAAW5P,QAAX,CAAoB,EAACG,MAAM,8DAAAiB,CAAY0W,aAAnB,EAApB;AACA,SAAKlI,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa,EAACyE,OAAO,8DAAAjG,CAAY0W,aAApB,EAAmCjU,QAAQ,KAAK+L,KAAL,CAAW/M,IAAX,CAAgBkV,WAA3D,EAAb,CAApB;AACD;;AAEDF,sBAAoB;AAClB,SAAKjI,KAAL,CAAW/M,IAAX,CAAgBmV,SAAhB,CAA0BnW,OAA1B,CAAkC,KAAK+N,KAAL,CAAW5P,QAA7C;AACD;;AAEDiY,wBAAsB;AACpB,UAAMC,eAAe,KAAKtI,KAAL,CAAW/M,IAAX,CAAgBsV,cAArC;;AAEA,QAAI,CAACD,YAAL,EAAmB;AACjB,aAAO,IAAP;AACD;;AAED,WAAQ;AAAA;AAAA;AACLA,mBAAaV,GAAb,CAAiB1M,OAAO;AAAA;AAAA,UAAG,KAAKA,GAAR;AAAa,mEAAC,2DAAD,IAAkB,IAAIA,GAAtB;AAAb,OAAxB;AADK,KAAR;AAGD;;AAEDkG,WAAS;AACP,QAAI,CAAC,KAAKpB,KAAL,CAAWwI,OAAhB,EAAyB;AACvB,aAAO,IAAP;AACD;;AAED,WAAQ;AAAA;AAAA,QAAK,WAAU,qBAAf;AACN,0EAAK,WAAU,eAAf,EAA+B,SAAS,KAAKR,gBAA7C,GADM;AAEN;AAAA;AAAA,UAAK,WAAU,OAAf;AACE;AAAA;AAAA,YAAS,WAAU,eAAnB;AACG,eAAKhI,KAAL,CAAW/M,IAAX,CAAgBwV,IAAhB,IAAwB,qEAAM,WAAY,yBAAwB,KAAKzI,KAAL,CAAW/M,IAAX,CAAgBwV,IAAK,EAA/D,GAD3B;AAEG,eAAKJ,mBAAL;AAFH,SADF;AAKE;AAAA;AAAA,YAAS,WAAU,SAAnB;AACE;AAAA;AAAA,cAAQ,SAAS,KAAKL,gBAAtB;AACE,uEAAC,2DAAD,IAAkB,IAAI,KAAKhI,KAAL,CAAW/M,IAAX,CAAgByV,uBAAtC;AADF,WADF;AAIE;AAAA;AAAA,cAAQ,WAAU,MAAlB,EAAyB,SAAS,KAAKT,iBAAvC;AACE,uEAAC,2DAAD,IAAkB,IAAI,KAAKjI,KAAL,CAAW/M,IAAX,CAAgB0V,wBAAtC;AADF;AAJF;AALF;AAFM,KAAR;AAiBD;AAlDqD;;AAqDjD,MAAMC,gBAAgB,2DAAA3R,CAAQiF,SAASA,MAAM2M,MAAvB,EAA+Bd,cAA/B,CAAtB,C;;;;;;AC7EP,4B;;;;;;;;;;;;;;ACAA;AACA;;AAEO,MAAMe,qBAAN,SAAoC,4CAAA5I,CAAMC,aAA1C,CAAwD;AAC7DnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK+I,SAAL,GAAiB,KAAK/I,KAAL,CAAW+I,SAAX,IAAwBtN,MAAzC;AACA,SAAKiJ,OAAL,GAAe,KAAKA,OAAL,CAAazL,IAAb,CAAkB,IAAlB,CAAf;AACD;;AAED;;;;AAIAyL,YAAU;AACR,SAAKqE,SAAL,CAAelY,QAAf,CAAwBmY,MAAxB,CAA+B,IAA/B;AACD;;AAED5H,WAAS;AACP,UAAM6H,eAAe,mBAArB;AACA,QAAIlD,SAAJ;AACA,QAAI,eAAe,KAAK/F,KAAxB,EAA+B;AAC7B+F,kBAAa,GAAE,KAAK/F,KAAL,CAAW+F,SAAU,IAAGkD,YAAa,EAApD;AACD,KAFD,MAEO;AACLlD,kBAAYkD,YAAZ;AACD;;AAED;AACA,WACE;AAAA;AAAA,QAAK,WAAWlD,SAAhB;AACE;AAAA;AAAA;AACE,mEAAC,2DAAD;AACE,0BAAe,kDADjB;AAEE,cAAG,6BAFL;AADF,OADF;AAME;AAAA;AAAA;AACE;AAAA;AAAA,YAAG,MAAK,GAAR,EAAY,WAAU,eAAtB,EAAsC,SAAS,KAAKrB,OAApD;AACE,qEAAC,2DAAD;AACE,4BAAe,4BADjB;AAEE,gBAAG,2CAFL;AADF;AADF;AANF,KADF;AAgBD;AAzC4D;AA2C/DoE,sBAAsBxH,YAAtB,GAAqC,EAACyE,WAAW,mBAAZ,EAArC;;AAEO,MAAMmD,aAAN,SAA4B,4CAAAhJ,CAAMC,aAAlC,CAAgD;AACrDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9D,KAAL,GAAa,EAACiN,UAAU,KAAX,EAAb;AACD;;AAEDC,oBAAkBzR,KAAlB,EAAyB0R,IAAzB,EAA+B;AAC7B,SAAKvI,QAAL,CAAc,EAACqI,UAAU,IAAX,EAAd;AACD;;AAED/H,WAAS;AACP,QAAI,CAAC,KAAKlF,KAAL,CAAWiN,QAAhB,EAA0B;AACxB,aAAQ,KAAKnJ,KAAL,CAAWoE,QAAnB;AACD;;AAED,WAAO,gEAAM,KAAN,CAAY,iBAAZ,IAA8B,WAAW,KAAKpE,KAAL,CAAW+F,SAApD,GAAP;AACD;AAhBoD;;AAmBvDmD,cAAc5H,YAAd,GAA6B,EAACgI,mBAAmBR,qBAApB,EAA7B,C;;;;;;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;;AAEA;;;;;;;;AAQO,MAAMS,gBAAN,SAA+B,4CAAArJ,CAAMC,aAArC,CAAmD;AACxDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKwJ,YAAL,GAAoB,KAAKA,YAAL,CAAkBvQ,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKwQ,YAAL,GAAoB,KAAKA,YAAL,CAAkBxQ,IAAlB,CAAuB,IAAvB,CAApB;AACD;;AAEDuQ,iBAAe;AACb,SAAKxJ,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGkZ,eAAV,EAAd,CAApB;AACA,SAAK1J,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa,EAACyE,OAAO,8DAAAjH,CAAGkZ,eAAX,EAAb,CAApB;AACD;;AAEDD,iBAAe;AACb,SAAKzJ,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGmZ,gBAAV,EAAd,CAApB;AACA,SAAK3J,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa,EAACyE,OAAO,8DAAAjH,CAAGmZ,gBAAX,EAAb,CAApB;AACD;;AAEDvI,WAAS;AACP,WAAQ;AAAA;AAAA,QAAK,WAAU,4BAAf;AACJ;AAAA;AAAA;AACE,6EAAM,WAAU,kBAAhB,GADF;AAEE,mEAAC,2DAAD,IAAkB,IAAG,+BAArB;AAFF,OADI;AAKJ;AAAA;AAAA,UAAK,WAAU,kCAAf;AACE;AAAA;AAAA,YAAQ,WAAU,SAAlB,EAA4B,SAAS,KAAKqI,YAA1C;AACE,qEAAC,2DAAD,IAAkB,IAAG,gCAArB;AADF,SADF;AAIE;AAAA;AAAA,YAAQ,SAAS,KAAKD,YAAtB;AACE,qEAAC,2DAAD,IAAkB,IAAG,gCAArB;AADF;AAJF;AALI,KAAR;AAcD;AAhCuD;;AAmCnD,MAAMI,kBAAkB,2DAAA3S,GAAUsS,gBAAV,CAAxB,C;;;;;;;;;;AChDP,MAAMM,cAAN,CAAqB;AACnB7U,cAAYpD,OAAZ,EAAqB;AACnB,SAAKkY,YAAL,GAAoBlY,QAAQkY,YAA5B;AACA,SAAKC,eAAL,GAAuBnY,QAAQmY,eAA/B;AACA,SAAKC,cAAL,CAAoBpY,QAAQqY,UAA5B;AACD;;AAED,MAAIA,UAAJ,GAAiB;AACf,WAAO,KAAKC,WAAZ;AACD;;AAED,MAAID,UAAJ,CAAenW,KAAf,EAAsB;AACpB,SAAKkW,cAAL,CAAoBlW,KAApB;AACD;;AAED,MAAIqW,iBAAJ,GAAwB;AACtB,WAAO,KAAKC,kBAAZ;AACD;;AAEC;AACFJ,iBAAelW,QAAQ,EAAvB,EAA2B;AACzB,SAAKoW,WAAL,GAAmBpW,KAAnB;AACA,SAAKsW,kBAAL,GAA0BtW,MAAM4L,MAAN,CAAa,CAACzH,MAAD,EAASmK,IAAT,KAAkB;AACvD,UAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5BnK,eAAOjC,IAAP,CAAYoM,IAAZ;AACA,eAAOnK,MAAP;AACD,OAHD,MAGO,IAAImK,QAAQA,KAAKiI,KAAjB,EAAwB;AAC7B,eAAOpS,OAAOmD,MAAP,CAAcgH,KAAKiI,KAAnB,CAAP;AACD,OAFM,MAEA,IAAIjI,QAAQA,KAAKvK,SAAjB,EAA4B;AACjC,eAAOI,OAAOmD,MAAP,CAAcgH,KAAKvK,SAAnB,CAAP;AACD;AACD,YAAM,IAAI7F,KAAJ,CAAU,0DAAV,CAAN;AACD,KAVyB,EAUvB,EAVuB,CAA1B;AAWD;;AAED0U,gBAAc4D,OAAd,EAAuBC,cAAvB,EAAuC;AACrC,SAAK,MAAMpE,KAAX,IAAoB,KAAK8D,UAAzB,EAAqC;AACnC;AACA,UAAI9D,SAASA,MAAMkE,KAAf,IAAwB,CAAClE,MAAMkE,KAAN,CAAYG,IAAZ,CAAiB3W,QAAQyW,QAAQzW,IAAR,MAAkB,KAAKiW,YAAL,CAAkBjW,IAAlB,CAA3C,CAA7B,EAAkG;AAChG,eAAO,KAAP;;AAEA;AACD,OAJD,MAIO,IAAI0W,kBAAkBpE,KAAlB,IAA2BA,MAAMtO,SAArC,EAAgD;AACrD,cAAM4S,mBAAmBtE,MAAMtO,SAAN,CAAgB2S,IAAhB,CAAqBE,YAAYH,eAAeC,IAAf,CAAoBG,QAAQA,QAAQA,KAAKD,QAAL,CAApC,CAAjC,CAAzB;AACA,YAAID,gBAAJ,EAAsB;AACpB,iBAAO,KAAP;AACD;AACD;AACD,OANM,MAMA,IAAIH,QAAQnE,KAAR,MAAmB,KAAK2D,YAAL,CAAkB3D,KAAlB,CAAvB,EAAiD;AACtD,eAAO,KAAP;AACD;AACF;AACD,WAAO,IAAP;AACD;AArDkB;oBAwDA,IAAI0D,cAAJ,CAAmB;AACtCC,gBAAc;AACZ,wBAAoB,IADR;AAEZ,sBAAkB,IAFN;AAGZ,kBAAc,IAHF;AAIZ,oBAAgB,CAJJ;AAKZ,gCAA4B,IALhB;AAMZ,gCAA4B,IANhB;AAOZ,oBAAgB,gCAPJ;AAQZ,iBAAa;AARD,GADwB;AAWtC;AACA;AACA;AACA;AACA;AACA;AACAG,cAAY,CACV,gBADU,EAEV,YAFU,EAGV,cAHU,EAIV,cAJU;AAKV;AACA;AACA,IAACI,OAAO,CAAC,0BAAD,EAA6B,0BAA7B,CAAR,EAPU;AAQV;AACA;AACA,IAACxS,WAAW,CAAC,WAAD,CAAZ,EAVU,CAjB0B;AA6BtCkS,mBAAiB,CACf;AACEa,aAAS,IADX;AAEEnC,UAAM,QAFR;AAGE3S,QAAI,YAHN;AAIE+U,WAAO,CAJT;AAKEC,WAAO,EAAChV,IAAI,uBAAL,EAA8BwG,QAAQ,EAACoE,UAAU,QAAX,EAAtC;AALT,GADe,EAQf;AACEkK,aAAS,IADX;AAEE9U,QAAI,YAFN;AAGE2S,UAAM,YAHR;AAIEoC,WAAO,CAJT;AAKEC,WAAO,EAAChV,IAAI,mBAAL;AALT,GARe;AA7BqB,CAAnB,C;;;;;;;;;;;;;;;;ACxDrB;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO,MAAMiV,OAAN,SAAsB,4CAAA7K,CAAMC,aAA5B,CAA0C;AAC/CnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK0E,OAAL,GAAe,KAAKA,OAAL,CAAazL,IAAb,CAAkB,IAAlB,CAAf;AACA,SAAK+R,YAAL,GAAoB,KAAKA,YAAL,CAAkB/R,IAAlB,CAAuB,IAAvB,CAApB;AACD;;AAEDgS,cAAYxT,KAAZ,EAAmB;AACjB;AACA,QAAIA,MAAMyT,MAAN,CAAa3a,IAAb,KAAsB,QAA1B,EAAoC;AAClC,WAAKyP,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa,EAACyE,OAAO,QAAR,EAAb,CAApB;AACD;AACF;;AAEDiN,UAAQjN,KAAR,EAAe;AACbgE,WAAO0P,wBAAP,CAAgCC,MAAhC,CAAuC3T,KAAvC;AACD;;AAEDwJ,yBAAuB;AACrB,WAAOxF,OAAO0P,wBAAd;AACD;;AAEDH,eAAaK,KAAb,EAAoB;AAClB,QAAIA,KAAJ,EAAW;AACT;AACA;AACA;AACA;AACA;AACA,YAAMC,kBAAkB,mEAAAC,GAAY,QAAZ,GAAuB,WAA/C;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAMC,eAAe,mEAAAD,GAAY,QAAZ,GAAuB,UAA5C;;AAEA;AACA;AACA;AACA9P,aAAO0P,wBAAP,GAAkC,IAAIM,yBAAJ,CAA8BJ,KAA9B,EAAqCA,MAAMrQ,UAA3C,EAChCsQ,eADgC,EACfE,YADe,CAAlC;AAEAxH,uBAAiB,qBAAjB,EAAwC,IAAxC;AACD,KArBD,MAqBO;AACLvI,aAAO0P,wBAAP,GAAkC,IAAlC;AACApH,0BAAoB,qBAApB,EAA2C,IAA3C;AACD;AACF;;AAED;;;;;AAKA3C,WAAS;AACP,WAAQ;AAAA;AAAA,QAAK,WAAU,gBAAf;AACN;AAAA;AAAA,UAAO,SAAQ,oBAAf,EAAoC,WAAU,cAA9C;AACE;AAAA;AAAA,YAAM,WAAU,SAAhB;AAA0B,qEAAC,2DAAD,IAAkB,IAAG,wBAArB;AAA1B;AADF,OADM;AAIN;AACE,YAAG,oBADL;AAEE,mBAAU,KAFZ;AAGE,qBAAa,KAAKpB,KAAL,CAAW2E,IAAX,CAAgBC,aAAhB,CAA8B,EAAC9O,IAAI,wBAAL,EAA9B,CAHf;AAIE,aAAK,KAAKkV,YAJZ;AAKE,eAAO,KAAKhL,KAAL,CAAW2E,IAAX,CAAgBC,aAAhB,CAA8B,EAAC9O,IAAI,wBAAL,EAA9B,CALT;AAME,cAAK,QANP,GAJM;AAWN;AAAA;AAAA;AACE,cAAG,cADL;AAEE,qBAAU,eAFZ;AAGE,mBAAS,KAAK4O,OAHhB;AAIE,iBAAO,KAAK1E,KAAL,CAAW2E,IAAX,CAAgBC,aAAhB,CAA8B,EAAC9O,IAAI,eAAL,EAA9B,CAJT;AAKE;AAAA;AAAA,YAAM,WAAU,SAAhB;AAA0B,qEAAC,2DAAD,IAAkB,IAAG,eAArB;AAA1B;AALF;AAXM,KAAR;AAmBD;AA3E8C;;AA8E1C,MAAM4V,SAAS,2DAAAzU,GAAU,6DAAAwN,CAAWsG,OAAX,CAAV,CAAf,C;;;;;;;;;ACvFA,MAAMQ,YAAYtb,OAAOW,QAAP,IAAmBX,OAAOW,QAAP,CAAgB+a,WAAhB,KAAgC,cAArE,C;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMlI,UAAU,SAAhB;AACA,MAAMC,0BAA0B,kBAAhC;AACA,MAAMkI,wBAAwB,CAA9B;AACA,MAAMC,6BAA6B,CAAnC;;AAEA,SAASC,mBAAT,CAA6BnN,OAA7B,EAAsC;AACpC,SAAO,OAAOA,OAAP,KAAmB,QAAnB,GAA8B;AAAA;AAAA;AAAOA;AAAP,GAA9B,GAAuD,2DAAC,2DAAD,EAAsBA,OAAtB,CAA9D;AACD;;AAEM,MAAMoN,OAAN,SAAsB,4CAAA7L,CAAMC,aAA5B,CAA0C;AAC/C,MAAI6L,OAAJ,GAAc;AACZ,UAAM,EAACC,QAAD,EAAWC,OAAX,EAAoB7P,KAApB,KAA6B,KAAK2D,KAAxC;AACA,WAAOiM,WAAW5P,MAAMC,MAAN,CAAa2P,QAAb,CAAX,GAAoCC,OAA3C;AACD;;AAEDC,6BAA2B;AACzB,UAAM,EAACnM,KAAD,KAAU,IAAhB;AACA,QAAIoM,cAAcR,qBAAlB;AACA,QAAI5L,MAAMqM,YAAN,IAAsBpc,OAAOqc,UAAP,CAAmB,qBAAnB,EAAyCC,OAAnE,EAA4E;AAC1E;AACA;AACA;AACAH,oBAAcP,0BAAd;AACD;AACD,UAAMW,WAAWJ,cAAc,KAAKJ,OAApC;AACA,UAAMS,QAAQzM,MAAM0M,IAAN,CAAWxO,KAAX,CAAiB,CAAjB,EAAoBsO,QAApB,CAAd;;AAEA,QAAI,KAAKG,oBAAL,CAA0BF,KAA1B,CAAJ,EAAsC;AACpCzM,YAAM5P,QAAN,CAAe,iEAAAC,CAAGqD,eAAH,CAAmB;AAChCO,gBAAQ+L,MAAMmI,WADkB;AAEhCyE,eAAOH,MAAM7E,GAAN,CAAUiF,SAAS,EAAC/W,IAAI+W,KAAKC,IAAV,EAAT,CAAV;AAFyB,OAAnB,CAAf;AAIA,WAAKC,mBAAL,GAA2BN,MAAM7E,GAAN,CAAUiF,QAAQA,KAAKC,IAAvB,CAA3B;AACD;AACF;;AAED;AACA;AACA;AACAE,qCAAmC;AACjC,UAAM,EAAChN,KAAD,KAAU,IAAhB;;AAEA,QAAI,CAACA,MAAMiN,yBAAP,IAAoC,CAACjN,MAAM5P,QAA/C,EAAyD;AACvD;AACD;;AAED,QAAI4P,MAAMpP,QAAN,CAAeiT,eAAf,KAAmCJ,OAAvC,EAAgD;AAC9C,WAAK0I,wBAAL;AACD,KAFD,MAEO;AACL;AACA;AACA,UAAI,KAAKrI,mBAAT,EAA8B;AAC5B9D,cAAMpP,QAAN,CAAemT,mBAAf,CAAmCL,uBAAnC,EAA4D,KAAKI,mBAAjE;AACD;;AAED;AACA,WAAKA,mBAAL,GAA2B,MAAM;AAC/B,YAAI9D,MAAMpP,QAAN,CAAeiT,eAAf,KAAmCJ,OAAvC,EAAgD;AAC9C,cAAI,CAAC,KAAKzD,KAAL,CAAW2K,IAAX,CAAgBuC,SAArB,EAAgC;AAC9B,iBAAKf,wBAAL;AACD;AACDnM,gBAAMpP,QAAN,CAAemT,mBAAf,CAAmCL,uBAAnC,EAA4D,KAAKI,mBAAjE;AACD;AACF,OAPD;AAQA9D,YAAMpP,QAAN,CAAeoT,gBAAf,CAAgCN,uBAAhC,EAAyD,KAAKI,mBAA9D;AACD;AACF;;AAEDG,sBAAoB;AAClB,QAAI,KAAKjE,KAAL,CAAW0M,IAAX,CAAgBS,MAAhB,IAA0B,CAAC,KAAKnN,KAAL,CAAW2K,IAAX,CAAgBuC,SAA/C,EAA0D;AACxD,WAAKF,gCAAL;AACD;AACF;;AAED7I,qBAAmBzF,SAAnB,EAA8B;AAC5B,UAAM,EAACsB,KAAD,KAAU,IAAhB;AACA,UAAMoN,cAAcpN,MAAM2K,IAAN,CAAWuC,SAA/B;AACA,UAAMG,eAAe3O,UAAUiM,IAAV,CAAeuC,SAApC;AACA;AACE;AACAlN,UAAM0M,IAAN,CAAWS,MAAX;AAEE;AACA;AACCnN,UAAM0M,IAAN,KAAehO,UAAUgO,IAAzB,IAAiC,CAACU,WAAnC;AACA;AACCC,oBAAgB,CAACD,WANpB,CAFF,EAUE;AACA,WAAKJ,gCAAL;AACD;AACF;;AAED/L,yBAAuB;AACrB,QAAI,KAAK6C,mBAAT,EAA8B;AAC5B,WAAK9D,KAAL,CAAWpP,QAAX,CAAoBmT,mBAApB,CAAwCL,uBAAxC,EAAiE,KAAKI,mBAAtE;AACD;AACF;;AAED6I,uBAAqBF,KAArB,EAA4B;AAC1B,QAAI,CAAC,KAAKM,mBAAN,IAA8B,KAAKA,mBAAL,CAAyBI,MAAzB,KAAoCV,MAAMU,MAA5E,EAAqF;AACnF,aAAO,IAAP;AACD;;AAED,SAAK,IAAIjO,IAAI,CAAb,EAAgBA,IAAIuN,MAAMU,MAA1B,EAAkCjO,GAAlC,EAAuC;AACrC,UAAIuN,MAAMvN,CAAN,EAAS4N,IAAT,KAAkB,KAAKC,mBAAL,CAAyB7N,CAAzB,CAAtB,EAAmD;AACjD,eAAO,IAAP;AACD;AACF;;AAED,WAAO,KAAP;AACD;;AAEDkC,WAAS;AACP,UAAM;AACJtL,QADI,EACAqS,WADA,EACa2C,KADb,EACoBrC,IADpB,EAC0BiE,IAD1B;AAEJY,gBAFI,EAEQld,QAFR,EAEkBic,YAFlB;AAGJkB,wBAHI,EAGgB3R,WAHhB,EAG6B4R,UAH7B;AAIJ7C,UAJI,EAIE8C,gBAJF,EAIoBC,OAJpB,EAI6BC;AAJ7B,QAKF,KAAK3N,KALT;;AAOA,UAAM4N,iBAAiBvB,eAAeR,0BAAf,GAA4CD,qBAAnE;AACA,UAAM,EAACI,OAAD,KAAY,IAAlB;AACA,UAAMQ,WAAWoB,iBAAiB5B,OAAlC;AACA,UAAM6B,mBAAmBjC,wBAAwBI,OAAjD;;AAEA;AACA;AACA,UAAM8B,mBAAoBhY,OAAO,YAAP,KACvB,CAAC,KAAKkK,KAAL,CAAW+N,MAAZ,IAAsB,KAAK/N,KAAL,CAAW+N,MAAX,CAAkBZ,MAAlB,GAA2B,CAD1B,CAA1B;;AAGA,UAAMa,WAAWtB,KAAKxO,KAAL,CAAW,CAAX,EAAcsO,QAAd,CAAjB;;AAEA;AACA;AACA,UAAMyB,uBAAuBrS,eAAe,CAAC8Q,KAAKS,MAAlD;;AAEA,UAAMV,QAAQ,EAAd;AACA,QAAI,CAACwB,oBAAL,EAA2B;AACzB,WAAK,IAAI/O,IAAI,CAAb,EAAgBA,IAAIsN,QAApB,EAA8BtN,GAA9B,EAAmC;AACjC,cAAM2N,OAAOmB,SAAS9O,CAAT,CAAb;AACA;AACA;AACA,cAAM6G,YAAa7G,KAAK2O,gBAAN,GAA0B,iBAA1B,GAA8C,EAAhE;AACApB,cAAMzW,IAAN,CAAW6W,OACT,2DAAC,qEAAD,IAAM,KAAK3N,CAAX;AACE,iBAAOA,CADT;AAEE,qBAAW6G,SAFb;AAGE,oBAAU3V,QAHZ;AAIE,gBAAMyc,IAJR;AAKE,8BAAoBU,kBALtB;AAME,uBAAapF,WANf;AAOE,qCAA2B,KAAKnI,KAAL,CAAWiN,yBAPxC;AAQE,0BAAgB,KAAKjN,KAAL,CAAWkO,cAR7B,GADS,GAWT,2DAAC,gFAAD,IAAiB,KAAKhP,CAAtB,EAAyB,WAAW6G,SAApC,GAXF;AAaD;AACF;;AAED,UAAMoI,mBAAmB,CACvB,SADuB,EAEvB9B,eAAe,eAAf,GAAiC,cAFV,EAGvBvG,IAHuB,CAGlB,GAHkB,CAAzB;;AAKA;AACA;AACA,WAAQ;AAAC,qHAAD;AAAwB,WAAK9F,KAA7B;AACN;AAAC,uHAAD;AAAA,UAAoB,WAAWmO,gBAA/B,EAAiD,MAAM1F,IAAvD;AACE,iBAAOqC,KADT;AAEE,cAAIhV,EAFN;AAGE,uBAAaqS,WAHf;AAIE,sBAAYqF,UAJd;AAKE,qBAAW,KAAKxN,KAAL,CAAW2K,IAAX,CAAgBuC,SAL7B;AAME,wBAAevC,QAAQA,KAAKyD,IAAd,IAAuBtY,EANvC;AAOE,4BAAkB2X,gBAPpB;AAQE,iBAAO,KAAKzN,KAAL,CAAW3D,KARpB;AASE,mBAASqR,OATX;AAUE,kBAAQC,MAVV;AAWE,oBAAU,KAAK3N,KAAL,CAAW5P,QAXvB;AAYE,0BAAgB,KAAK4P,KAAL,CAAWkO,cAZ7B;AAcG,SAACD,oBAAD,IAA0B;AAAA;AAAA,YAAI,WAAU,cAAd,EAA6B,OAAO,EAACI,SAAS,CAAV,EAApC;AACxB5B;AADwB,SAd7B;AAiBGwB,gCACC;AAAA;AAAA,YAAK,WAAU,qBAAf;AACE;AAAA;AAAA,cAAK,WAAU,aAAf;AACGX,uBAAW7E,IAAX,IAAmB6E,WAAW7E,IAAX,CAAgB6F,UAAhB,CAA2B,kBAA3B,CAAnB,GACC,oEAAK,WAAU,uBAAf,EAAuC,OAAO,EAAC,oBAAqB,QAAOhB,WAAW7E,IAAK,IAA7C,EAA9C,GADD,GAEC,oEAAK,WAAY,8BAA6B6E,WAAW7E,IAAK,EAA9D,GAHJ;AAIE;AAAA;AAAA,gBAAG,WAAU,qBAAb;AACGqD,kCAAoBwB,WAAW3O,OAA/B;AADH;AAJF;AADF,SAlBJ;AA4BGmP,4BAAoB,2DAAC,2EAAD,IAAQ,QAAQ,KAAK9N,KAAL,CAAW+N,MAA3B,EAAmC,oBAAoB,KAAK/N,KAAL,CAAWuO,kBAAlE;AA5BvB;AADM,KAAR;AAgCD;AA9L8C;;AAiMjDxC,QAAQzK,YAAR,GAAuB;AACrB1Q,YAAUX,OAAOW,QADI;AAErB8b,QAAM,EAFe;AAGrBY,cAAY,EAHS;AAIrB3C,QAAM,EAJe;AAKrBG,SAAO;AALc,CAAvB;;AAQO,MAAM0D,cAAc,2DAAAvX,CAAQiF,UAAU,EAACG,OAAOH,MAAMG,KAAd,EAAV,CAAR,EAAyC,6DAAAoI,CAAWsH,OAAX,CAAzC,CAApB;;AAEA,MAAM0C,SAAN,SAAwB,4CAAAvO,CAAMC,aAA9B,CAA4C;AACjDuO,mBAAiB;AACf,UAAMC,WAAW,EAAjB;AACA,UAAMC,kBAAkB,KAAK5O,KAAL,CAAW6O,QAAX,CAAoBjJ,MAApB,CAA2BkJ,WAAWA,QAAQlE,OAA9C,CAAxB;AACA,UAAM,EAACmE,YAAD,EAAe,kBAAkBC,YAAjC,KAAiD,KAAKhP,KAAL,CAAW3D,KAAX,CAAiBC,MAAxE;AACA;AACA,UAAM2S,gBAAgBL,gBAAgBzB,MAAhB,GAAyB,CAAC,CAAC6B,YAAjD;;AAEA,SAAK,MAAME,SAAX,IAAwBH,aAAaI,KAAb,CAAmB,GAAnB,CAAxB,EAAiD;AAC/C,YAAMC,cAAc;AAClBha,aAAK8Z,SADa;AAElBxB,iBAASiB,SAASxB,MAAT,KAAoB,CAFX;AAGlBQ,gBAAQgB,SAASxB,MAAT,KAAoB8B,gBAAgB;AAH1B,OAApB;AAKA,UAAIC,cAAc,UAAd,IAA4BF,YAAhC,EAA8C;AAC5CL,iBAAS3Y,IAAT,CAAc,2DAAC,iFAAD,EAAcoZ,WAAd,CAAd;AACD,OAFD,MAEO;AACL,cAAMN,UAAUF,gBAAgBS,IAAhB,CAAqBC,KAAKA,EAAExZ,EAAF,KAASoZ,SAAnC,CAAhB;AACA,YAAIJ,OAAJ,EAAa;AACXH,mBAAS3Y,IAAT,CAAc,2DAAC,WAAD,eAAiB8Y,OAAjB,EAA8BM,WAA9B,EAAd;AACD;AACF;AACF;AACD,WAAOT,QAAP;AACD;;AAEDvN,WAAS;AACP,WACE;AAAA;AAAA,QAAK,WAAU,eAAf;AACG,WAAKsN,cAAL;AADH,KADF;AAKD;AAhCgD;;AAmC5C,MAAMG,WAAW,2DAAA5X,CAAQiF,UAAU,EAAC2S,UAAU3S,MAAM2S,QAAjB,EAA2BxS,OAAOH,MAAMG,KAAxC,EAAV,CAAR,EAAmEoS,SAAnE,CAAjB,C;;;;;;;;;;;;ACjQP;;AAEA,MAAMc,uBAAuBC,SAAS;AACpC1Z,MAAI,iCADgC;AAEpC2S,QAAM,oBAF8B;AAGpC9W,UAAQ,iEAAAtB,CAAGkC,UAAH,CAAc;AACpBhC,UAAM,8DAAAC,CAAGif,mBADW;AAEpBxc,UAAM,EAACqL,KAAKkR,KAAKlR,GAAX,EAAgBoR,UAAUF,KAAKE,QAA/B;AAFc,GAAd,CAH4B;AAOpCC,aAAW;AAPyB,CAAT,CAA7B;;AAUO,MAAMC,oBAAoBC,YAAY;AAC3C,UAAQA,QAAR;AACE,SAAK,KAAL;AACE,aAAO,+BAAP;AACF,SAAK,QAAL;AACE,aAAO,8BAAP;AACF,SAAK,OAAL;AACE,aAAO,6BAAP;AACF;AACE,aAAO,+BAAP;AARJ;AAUD,CAXM;;AAaP;;;;;AAKO,MAAMC,kBAAkB;AAC7BC,aAAW,OAAO,EAACxf,MAAM,WAAP,EAAP,CADkB;AAE7Byf,aAAW,OAAO,EAACzf,MAAM,OAAP,EAAP,CAFkB;AAG7B0f,kBAAgBT,SAAS;AACvB1Z,QAAI,6BADmB;AAEvB2S,UAAM,gBAFiB;AAGvB9W,YAAQ,iEAAAtB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAG0f,qBADW;AAEpBjd,YAAMuc,KAAKW;AAFS,KAAd,CAHe;AAOvBR,eAAW;AAPY,GAAT,CAHa;AAY7BS,eAAaZ,SAAS;AACpB1Z,QAAI,sBADgB;AAEpB2S,UAAM,iBAFc;AAGpB9W,YAAQ,iEAAAtB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAG6f,YADW;AAEpBpd,YAAM,EAACqL,KAAKkR,KAAKlR,GAAX,EAAgBwM,OAAO0E,KAAK1E,KAA5B,EAAmCva,MAAMif,KAAKjf,IAA9C;AAFc,KAAd,CAHY;AAOpBof,eAAW;AAPS,GAAT,CAZgB;AAqB7BW,mBAAiBd,SAAS;AACxB1Z,QAAI,6BADoB;AAExB2S,UAAM,YAFkB;AAGxB9W,YAAQ,iEAAAtB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAG+f,eADW;AAEpBtd,YAAM;AACJyc,kBAAUF,KAAKE,QADX;AAEJc,oBAAYhB,KAAKgB,UAFb;AAGJlS,aAAKkR,KAAKlR;AAHN;AAFc,KAAd,CAHgB;AAWxBqR,eAAW;AAXa,GAAT,CArBY;AAkC7Bc,YAAU,CAACjB,IAAD,EAAOkB,KAAP,EAAcvI,WAAd,MAA+B;AACvCrS,QAAI,qBADmC;AAEvC2S,UAAM,SAFiC;AAGvC9W,YAAQ,iEAAAtB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGmgB,SADW;AAEpB1d,YAAM,EAACqL,KAAKkR,KAAKlR,GAAX,EAAgBsS,WAAWpB,KAAKoB,SAAhC;AAFc,KAAd,CAH+B;AAOvCC,gBAAY,iEAAAxgB,CAAGqD,eAAH,CAAmB;AAC7BO,cAAQkU,WADqB;AAE7B2I,aAAO,CAFsB;AAG7BlE,aAAO,CAAC,EAAC9W,IAAI0Z,KAAK1C,IAAV,EAAgBiE,KAAKL,KAArB,EAAD;AAHsB,KAAnB,CAP2B;AAYvCf,eAAW;AAZ4B,GAA/B,CAlCmB;;AAiD7B;AACA;AACAqB,iBAAe,CAACxB,IAAD,EAAOkB,KAAP,EAAcvI,WAAd,MAA+B;AAC5CrS,QAAI,4BADwC;AAE5Cmb,eAAW,qBAFiC;AAG5CxI,UAAM,SAHsC;AAI5C9W,YAAQ,iEAAAtB,CAAG2D,WAAH,CAAe,8DAAAxD,CAAG0gB,cAAlB,EAAkC;AACxCjd,cAAQkU,WADgC;AAExC7J,WAAKkR,KAAKlR,GAF8B;AAGxC6S,uBAAiBT;AAHuB,KAAlC;AAJoC,GAA/B,CAnDc;AA6D7BU,aAAW,CAAC5B,IAAD,EAAOkB,KAAP,EAAcvI,WAAd,EAA2BkJ,SAA3B,EAAsCC,QAAtC,MAAoD;AAC7Dxb,QAAI,oBADyD;AAE7D2S,UAAM,QAFuD;AAG7D9W,YAAQ;AACNpB,YAAM,8DAAAC,CAAG+gB,WADH;AAENte,YAAM;AACJmV,mBAAW,CACT,iEAAA/X,CAAGC,UAAH,CAAc,EAACC,MAAM,8DAAAC,CAAGghB,kBAAV,EAA8Bve,MAAM,EAACqL,KAAKkR,KAAKlR,GAAX,EAAgBsS,WAAWpB,KAAKoB,SAAhC,EAA2Ca,YAAYjC,KAAKW,YAA5D,EAApC,EAAd,CADS,EAET,iEAAA9f,CAAG2C,SAAH,CAAasI,OAAOC,MAAP,CAAc,EAAC9D,OAAO,QAAR,EAAkBxD,QAAQkU,WAA1B,EAAuCgJ,iBAAiBT,KAAxD,EAAd,EAA8EY,QAA9E,CAAb,CAFS,CADP;AAKJnJ,mBALI;AAMJI,wBAAgB,CAAC,2BAAD,EAA8B,kCAA9B,CANZ;AAOJI,kCAA0B,oBAPtB;AAQJD,iCAAyB,6BARrB;AASJD,cAAM;AATF;AAFA,KAHqD;AAiB7DkH,eAAW;AAjBkD,GAApD,CA7DkB;AAgF7B+B,YAAU,CAAClC,IAAD,EAAOkB,KAAP,EAAcvI,WAAd,EAA2BkJ,SAA3B,EAAsCC,QAAtC,EAAgDzB,QAAhD,MAA8D;AACtE/Z,QAAI8Z,kBAAkBC,QAAlB,CADkE;AAEtEpH,UAAM,QAFgE;AAGtE9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc;AACpBhC,YAAM,8DAAAC,CAAGmhB,kBADW;AAEpB1e,YAAM,EAACqL,KAAKkR,KAAKlR,GAAX;AAFc,KAAd;AAH8D,GAA9D,CAhFmB;AAwF7BsT,YAAUpC,SAAS;AACjB1Z,QAAI,uBADa;AAEjB2S,UAAM,WAFW;AAGjB9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc;AACpBhC,YAAM,8DAAAC,CAAGqhB,kBADW;AAEpB5e,YAAM,EAACqL,KAAKkR,KAAKlR,GAAX;AAFc,KAAd;AAHS,GAAT,CAxFmB;AAgG7BwT,oBAAkBtC,SAAS;AACzB1Z,QAAI,gCADqB;AAEzB2S,UAAM,MAFmB;AAGzB9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc;AACpBhC,YAAM,8DAAAC,CAAGuhB,kBADW;AAEpB9e,YAAM,EAACqL,KAAKkR,KAAKlR,GAAX;AAFc,KAAd;AAHiB,GAAT,CAhGW;AAwG7B0T,oBAAkBxC,SAAS;AACzB1Z,QAAI,iCADqB;AAEzB2S,UAAM,UAFmB;AAGzB9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc;AACpBhC,YAAM,8DAAAC,CAAGyhB,SADW;AAEpBhf,YAAM,EAACqL,KAAKkR,KAAKE,QAAX;AAFc,KAAd,CAHiB;AAOzBwC,cAAU,CAAC1C,KAAKE;AAPS,GAAT,CAxGW;AAiH7ByC,kBAAgB3C,SAAS;AACvB1Z,QAAI,6BADmB;AAEvB2S,UAAM,QAFiB;AAGvB9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc;AACpBhC,YAAM,8DAAAC,CAAG4hB,oBADW;AAEpBnf,YAAM,EAACqL,KAAKkR,KAAKlR,GAAX;AAFc,KAAd;AAHe,GAAT,CAjHa;AAyH7B+T,cAAY,CAAC7C,IAAD,EAAOkB,KAAP,MAAkB;AAC5B5a,QAAI,iBADwB;AAE5B2S,UAAM,KAFsB;AAG5B9W,YAAQ,iEAAAtB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAG8hB,aADW;AAEpBrf,YAAM,EAACuc,MAAM,EAAClR,KAAKkR,KAAKlR,GAAX,EAAP,EAAwBoS,KAAxB;AAFc,KAAd,CAHoB;AAO5Bf,eAAW;AAPiB,GAAlB,CAzHiB;AAkI7B4C,gBAAc/C,SAAS;AACrB1Z,QAAI,mBADiB;AAErB2S,UAAM,OAFe;AAGrB9W,YAAQ,iEAAAtB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGgiB,eADW;AAEpBvf,YAAM,EAACuc,MAAM,EAAClR,KAAKkR,KAAKlR,GAAX,EAAP;AAFc,KAAd,CAHa;AAOrBqR,eAAW;AAPU,GAAT,CAlIe;AA2I7B8C,gBAAc,CAACjD,IAAD,EAAOkB,KAAP,EAAcvI,WAAd,MAA+B;AAC3CrS,QAAI,4BADuC;AAE3C2S,UAAM,QAFqC;AAG3C9W,YAAQ,iEAAAtB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGkiB,cADW;AAEpBzf,YAAM,EAACuc,MAAM,EAAClR,KAAKkR,KAAKlR,GAAX,EAAgBwM,OAAO0E,KAAK1E,KAA5B,EAAP;AAFc,KAAd,CAHmC;AAO3C+F,gBAAY,iEAAAxgB,CAAGqD,eAAH,CAAmB;AAC7BO,cAAQkU,WADqB;AAE7BwK,cAAQ,CAFqB;AAG7B/F,aAAO,CAAC,EAAC9W,IAAI0Z,KAAK1C,IAAV,EAAgBiE,KAAKL,KAArB,EAAD;AAHsB,KAAnB,CAP+B;AAY3Cf,eAAW;AAZgC,GAA/B,CA3Ie;AAyJ7BiD,oBAAkBpD,SAAS;AACzB1Z,QAAI,2BADqB;AAEzB2S,UAAM,QAFmB;AAGzB9W,YAAQ,iEAAAtB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGqiB,kBADW;AAEpB5f,YAAM,EAAC2d,WAAWpB,KAAKoB,SAAjB;AAFc,KAAd,CAHiB;AAOzBjB,eAAW;AAPc,GAAT,CAzJW;AAkK7BmD,qBAAmBtD,SAAS;AAC1B1Z,QAAI,4BADsB;AAE1B2S,UAAM,OAFoB;AAG1B9W,YAAQ,iEAAAtB,CAAGC,UAAH,CAAc;AACpBC,YAAM,8DAAAC,CAAGuiB,mBADW;AAEpB9f,YAAM,EAAC2d,WAAWpB,KAAKoB,SAAjB;AAFc,KAAd,CAHkB;AAO1BjB,eAAW;AAPe,GAAT,CAlKU;AA2K7BqD,eAAa,CAACxD,IAAD,EAAOkB,KAAP,MAAkB;AAC7B5a,QAAI,2BADyB;AAE7B2S,UAAM,MAFuB;AAG7B9W,YAAQ;AACNpB,YAAM,8DAAAC,CAAGyiB,cADH;AAENhgB,YAAM,EAACyd,KAAD;AAFA;AAHqB,GAAlB,CA3KgB;AAmL7BwC,iBAAe1D,QAASA,KAAKW,YAAL,GAAoBL,gBAAgBG,cAAhB,CAA+BT,IAA/B,CAApB,GAA2DM,gBAAgBM,WAAhB,CAA4BZ,IAA5B,CAnLtD;AAoL7B2D,mBAAiB,CAAC3D,IAAD,EAAOkB,KAAP,KAAkBlB,KAAK4D,QAAL,GAAgBtD,gBAAgByC,YAAhB,CAA6B/C,IAA7B,CAAhB,GAAqDM,gBAAgBuC,UAAhB,CAA2B7C,IAA3B,EAAiCkB,KAAjC,CApL3D;AAqL7B2C,sBAAoB,CAAC7D,IAAD,EAAOkB,KAAP,KAAkBlB,KAAKoB,SAAL,GAAiBd,gBAAgB8C,gBAAhB,CAAiCpD,IAAjC,CAAjB,GAA0DM,gBAAgB2C,YAAhB,CAA6BjD,IAA7B,EAAmCkB,KAAnC,CArLnE;AAsL7B4C,0BAAwB9D,QAASA,KAAKoB,SAAL,GAAiBd,gBAAgBgD,iBAAhB,CAAkCtD,IAAlC,CAAjB,GAA2DM,gBAAgBoD,aAAhB,CAA8B1D,IAA9B,CAtL/D;AAuL7B+D,uBAAqB,CAAC/D,IAAD,EAAOkB,KAAP,EAAcvI,WAAd,EAA2BkJ,SAA3B,KAA0CA,YAAY9B,qBAAqBC,IAArB,CAAZ,GAAyCM,gBAAgBE,SAAhB;AAvL3E,CAAxB,C;;;;;;;;;;;;;;;;;;;AC9BP;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMwD,4BAA4B,CAAC,iBAAD,EAAoB,aAApB,EAAmC,WAAnC,EAAgD,iBAAhD,EAAmE,qBAAnE,EAA0F,WAA1F,EAAuG,UAAvG,CAAlC;;AAEO,MAAMC,SAAN,SAAwB,4CAAAvT,CAAMC,aAA9B,CAA4C;AACjDuT,eAAa;AACX,UAAM,EAAC1T,KAAD,KAAU,IAAhB;AACA,UAAM,EAACwP,IAAD,EAAOkB,KAAP,EAAczc,MAAd,EAAsB0f,wBAAtB,EAAgDrC,QAAhD,EAA0DzB,QAA1D,KAAsE7P,KAA5E;;AAEA;AACA,UAAM4T,cAAc,CAACpE,KAAKqE,SAAN,GAAkB7T,MAAMpO,OAAxB,GAAkC4hB,yBAAtD;;AAEA,UAAM5hB,UAAUgiB,YAAYhM,GAAZ,CAAgB1V,KAAK,iFAAA4d,CAAgB5d,CAAhB,EAAmBsd,IAAnB,EAAyBkB,KAAzB,EAAgCzc,MAAhC,EAAwC0f,wBAAxC,EAAkErC,QAAlE,EAA4EzB,QAA5E,CAArB,EAA4GjI,GAA5G,CAAgHkM,UAAU;AACxI,YAAM,EAACniB,MAAD,EAASkf,UAAT,EAAqB/a,EAArB,EAAyBmb,SAAzB,EAAoC1gB,IAApC,EAA0Cof,SAA1C,KAAuDmE,MAA7D;AACA,UAAI,CAACvjB,IAAD,IAASuF,EAAb,EAAiB;AACfge,eAAOC,KAAP,GAAe/T,MAAM2E,IAAN,CAAWC,aAAX,CAAyB,EAAC9O,IAAImb,aAAanb,EAAlB,EAAzB,CAAf;AACAge,eAAOpP,OAAP,GAAiB,MAAM;AACrB1E,gBAAM5P,QAAN,CAAeuB,MAAf;AACA,cAAIge,SAAJ,EAAe;AACb,kBAAMqE,gBAAgB1Y,OAAOC,MAAP,CAAc;AAClC9D,qBAAOkY,SAD2B;AAElC1b,oBAFkC;AAGlCkd,+BAAiBT;AAHiB,aAAd,EAInBY,QAJmB,CAAtB;AAKAtR,kBAAM5P,QAAN,CAAe,iEAAAC,CAAG2C,SAAH,CAAaghB,aAAb,CAAf;AACD;AACD,cAAInD,cAAc7Q,MAAMiN,yBAAxB,EAAmD;AACjDjN,kBAAM5P,QAAN,CAAeygB,UAAf;AACD;AACF,SAbD;AAcD;AACD,aAAOiD,MAAP;AACD,KApBe,CAAhB;;AAsBA;AACA;AACA;AACAliB,YAAQ,CAAR,EAAWqiB,KAAX,GAAmB,IAAnB;AACAriB,YAAQA,QAAQub,MAAR,GAAiB,CAAzB,EAA4B+G,IAA5B,GAAmC,IAAnC;AACA,WAAOtiB,OAAP;AACD;;AAEDwP,WAAS;AACP,WAAQ,2DAAC,0FAAD;AACN,gBAAU,KAAKpB,KAAL,CAAWmU,QADf;AAEN,eAAS,KAAKT,UAAL,EAFH,GAAR;AAGD;AA1CgD;;AA6CnD,MAAMvX,WAAWD,UAAU,EAACyX,0BAA0BzX,MAAMG,KAAN,CAAYC,MAAZ,CAAmBqX,wBAA9C,EAAwE9D,UAAU3T,MAAMG,KAAN,CAAYC,MAAZ,CAAmBuT,QAArG,EAAV,CAAjB;AACO,MAAMuE,WAAW,2DAAAnd,CAAQkF,QAAR,EAAkB,6DAAAsI,CAAWgP,SAAX,CAAlB,CAAjB,C;;;;;;;;;;;;ACvDP;;AAEO,MAAMY,WAAN,SAA0B,4CAAAnU,CAAMC,aAAhC,CAA8C;AACnDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKsU,WAAL,GAAmB,KAAKA,WAAL,CAAiBrb,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKyL,OAAL,GAAe,KAAKA,OAAL,CAAazL,IAAb,CAAkB,IAAlB,CAAf;AACD;;AAEDqb,gBAAc;AACZ,SAAKtU,KAAL,CAAWmU,QAAX,CAAoB,KAApB;AACD;;AAEDlQ,sBAAoB;AAClBsQ,eAAW,MAAM;AACftkB,aAAO+T,gBAAP,CAAwB,OAAxB,EAAiC,KAAKsQ,WAAtC;AACD,KAFD,EAEG,CAFH;AAGD;;AAEDrT,yBAAuB;AACrBhR,WAAO8T,mBAAP,CAA2B,OAA3B,EAAoC,KAAKuQ,WAAzC;AACD;;AAED5P,UAAQjN,KAAR,EAAe;AACb;AACA;AACA;AACAA,UAAM+c,eAAN;AACD;;AAEDpT,WAAS;AACP,WAAQ;AAAA;AAAA,QAAM,WAAU,cAAhB,EAA+B,SAAS,KAAKsD,OAA7C;AACN;AAAA;AAAA,UAAI,MAAK,MAAT,EAAgB,WAAU,mBAA1B;AACG,aAAK1E,KAAL,CAAWpO,OAAX,CAAmBgW,GAAnB,CAAuB,CAACkM,MAAD,EAAS5U,CAAT,KAAgB4U,OAAOvjB,IAAP,KAAgB,WAAhB,GACrC,mEAAI,KAAK2O,CAAT,EAAY,WAAU,WAAtB,GADqC,GAErC4U,OAAOvjB,IAAP,KAAgB,OAAhB,IAA2B,2DAAC,eAAD,IAAiB,KAAK2O,CAAtB,EAAyB,QAAQ4U,MAAjC,EAAyC,aAAa,KAAKQ,WAA3D,GAF7B;AADH;AADM,KAAR;AAQD;AArCkD;;AAwC9C,MAAMG,eAAN,SAA8B,4CAAAvU,CAAMC,aAApC,CAAkD;AACvDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK0E,OAAL,GAAe,KAAKA,OAAL,CAAazL,IAAb,CAAkB,IAAlB,CAAf;AACA,SAAKyb,SAAL,GAAiB,KAAKA,SAAL,CAAezb,IAAf,CAAoB,IAApB,CAAjB;AACD;;AAEDyL,YAAU;AACR,SAAK1E,KAAL,CAAWsU,WAAX;AACA,SAAKtU,KAAL,CAAW8T,MAAX,CAAkBpP,OAAlB;AACD;;AAEDgQ,YAAUjd,KAAV,EAAiB;AACf,UAAM,EAACqc,MAAD,KAAW,KAAK9T,KAAtB;AACA,YAAQvI,MAAMrC,GAAd;AACE,WAAK,KAAL;AACE;AACA;AACA;AACA,YAAKqC,MAAMkd,QAAN,IAAkBb,OAAOG,KAA1B,IAAqC,CAACxc,MAAMkd,QAAP,IAAmBb,OAAOI,IAAnE,EAA0E;AACxE,eAAKlU,KAAL,CAAWsU,WAAX;AACD;AACD;AACF,WAAK,OAAL;AACE,aAAKtU,KAAL,CAAWsU,WAAX;AACAR,eAAOpP,OAAP;AACA;AAZJ;AAcD;;AAEDtD,WAAS;AACP,UAAM,EAAC0S,MAAD,KAAW,KAAK9T,KAAtB;AACA,WACE;AAAA;AAAA,QAAI,MAAK,UAAT,EAAoB,WAAU,mBAA9B;AACE;AAAA;AAAA,UAAG,SAAS,KAAK0E,OAAjB,EAA0B,WAAW,KAAKgQ,SAA1C,EAAqD,UAAS,GAA9D,EAAkE,WAAWZ,OAAO5B,QAAP,GAAkB,UAAlB,GAA+B,EAA5G;AACG4B,eAAOrL,IAAP,IAAe,qEAAM,WAAY,yBAAwBqL,OAAOrL,IAAK,EAAtD,GADlB;AAEGqL,eAAOC;AAFV;AADF,KADF;AAOD;AAvCsD,C;;;;;;;;;8CC1CzD;AAAA;;;;;;;;;;;;AAYO,MAAMa,kBAAkB;AAC7BC,SAAOC,OAAP,EAAgBC,KAAhB,EAAuB;AACrB,WAAO,CAAC,EAAEA,SAASA,MAAMC,IAAf,KAAyB,CAACF,OAAD,IAAYC,MAAM9hB,IAAnB,IAA6B6hB,WAAWC,MAAMzW,GAAtE,CAAF,CAAR;AACD,GAH4B;;AAK7B;AACA2W,yBAAuBC,WAAvB,EAAoC;AAClC,QAAI,CAACA,WAAL,EAAkB;AAChB,aAAO,IAAP;AACD;AACD,QAAI,KAAKL,MAAL,CAAY,KAAZ,EAAmBK,WAAnB,CAAJ,EAAqC;AACnC,aAAO,EAAC5W,KAAKrO,OAAOoO,GAAP,CAAW8W,eAAX,CAA2BD,YAAYjiB,IAAvC,CAAN,EAAoD+hB,MAAME,YAAYF,IAAtE,EAAP;AACD;AACD,WAAO,EAAC1W,KAAK4W,WAAN,EAAP;AACD,GAd4B;;AAgB7B;AACA;AACAE,2BAAyBC,UAAzB,EAAqC;AACnC,QAAI,KAAKR,MAAL,CAAY,IAAZ,EAAkBQ,UAAlB,CAAJ,EAAmC;AACjCplB,aAAOoO,GAAP,CAAWiX,eAAX,CAA2BD,WAAW/W,GAAtC;AACD;AACF,GAtB4B;;AAwB7B;AACAiX,qBAAmBF,UAAnB,EAA+BH,WAA/B,EAA4C;AAC1C;AACA,QAAIA,eAAeG,UAAnB,EAA+B;AAC7B,aAAO,KAAKR,MAAL,CAAY,KAAZ,EAAmBK,WAAnB,IACAG,WAAWL,IAAX,KAAoBE,YAAYF,IADhC,GAEAK,WAAW/W,GAAX,KAAmB4W,WAF1B;AAGD;;AAED;AACA;AACA,WAAO,CAACA,WAAD,IAAgB,CAACG,UAAxB;AACD;AApC4B,CAAxB,C;;;;;;;;;;;;;;;;;;;;;ACZP;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM5R,UAAU,SAAhB;AACA,MAAMC,0BAA0B,kBAAhC;;AAEA,SAASoI,mBAAT,CAA6BnN,OAA7B,EAAsC;AACpC,SAAO,OAAOA,OAAP,KAAmB,QAAnB,GAA8B;AAAA;AAAA;AAAOA;AAAP,GAA9B,GAAuD,2DAAC,2DAAD,EAAsBA,OAAtB,CAA9D;AACD;;AAEM,MAAM6W,UAAN,SAAyB,4CAAAtV,CAAMC,aAA/B,CAA6C;AAClDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKyV,aAAL,GAAqB,KAAKA,aAAL,CAAmBxc,IAAnB,CAAwB,IAAxB,CAArB;AACD;;AAEDwc,kBAAgB;AACd,SAAKzV,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGuD,OAAH,CAAW,KAAKoM,KAAL,CAAW0V,cAAtB,EAAsC,KAAtC,CAApB;AACA,SAAK1V,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa,EAACyE,OAAO,kBAAR,EAA4BxD,QAAQ,KAAK+L,KAAL,CAAWmI,WAA/C,EAAb,CAApB;AACD;;AAED/G,WAAS;AACP,UAAM,EAACoM,UAAD,KAAe,KAAKxN,KAA1B;AACA,WACE;AAAA;AAAA,QAAK,WAAU,oBAAf;AACI;AAAA;AAAA,UAAK,WAAU,yBAAf;AACG8L,4BAAoB0B,WAAWxT,IAA/B,CADH;AAEGwT,mBAAWX,IAAX,IACC;AAAA;AAAA,YAAG,MAAMW,WAAWX,IAAX,CAAgB/b,IAAzB,EAA+B,QAAO,QAAtC,EAA+C,KAAI,qBAAnD;AACGgb,8BAAoB0B,WAAWX,IAAX,CAAgB/B,KAAhB,IAAyB0C,WAAWX,IAAxD;AADH;AAHJ,OADJ;AAUI;AAAA;AAAA,UAAQ,SAAS,KAAK4I,aAAtB;AACG3J,4BAAoB0B,WAAWmI,MAA/B;AADH;AAVJ,KADF;AAgBD;AA7BiD;;AAgC7C,MAAMC,iBAAiB,6DAAAnR,CAAW+Q,UAAX,CAAvB;;AAEA,MAAMK,mBAAN,SAAkC,4CAAA3V,CAAMC,aAAxC,CAAsD;AAC3DnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK8V,WAAL,GAAmB,KAAKA,WAAL,CAAiB7c,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAK8c,aAAL,GAAqB,KAAKA,aAAL,CAAmB9c,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAK+c,eAAL,GAAuB,KAAKA,eAAL,CAAqB/c,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKgd,wBAAL,GAAgC,KAAKA,wBAAL,CAA8Bhd,IAA9B,CAAmC,IAAnC,CAAhC;AACA,SAAKid,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBjd,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKkd,sBAAL,GAA8B,KAAKA,sBAAL,CAA4Bld,IAA5B,CAAiC,IAAjC,CAA9B;AACA,SAAKmd,sBAAL,GAA8B,KAAKA,sBAAL,CAA4Bnd,IAA5B,CAAiC,IAAjC,CAA9B;AACA,SAAKod,YAAL,GAAoB,KAAKA,YAAL,CAAkBpd,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKiD,KAAL,GAAa,EAACoa,iBAAiB,IAAlB,EAAwBC,aAAa,KAArC,EAA4CC,iBAAiB,KAA7D,EAAoEC,iBAAiB,KAArF,EAAb;AACD;;AAED1V,uBAAqB;AACnB,SAAKf,KAAL,CAAWpP,QAAX,CAAoBoT,gBAApB,CAAqCN,uBAArC,EAA8D,KAAKuS,wBAAnE;AACD;;AAEDvQ,sBAAoBjH,SAApB,EAA+B;AAC7B;AACA,QAAI,CAAC,KAAKuB,KAAL,CAAWkN,SAAZ,IAAyBzO,UAAUyO,SAAvC,EAAkD;AAChD;AACA;AACA;AACA;AACA,WAAKwJ,WAAL,CAAiBC,YAAjB,CALgD,CAKjB;AAChC;AACF;;AAED1V,yBAAuB;AACrB,SAAKjB,KAAL,CAAWpP,QAAX,CAAoBmT,mBAApB,CAAwCL,uBAAxC,EAAiE,KAAKuS,wBAAtE;AACD;;AAEDA,6BAA2B;AACzB;AACA,UAAMzN,UAAU,KAAKxI,KAAL,CAAWpP,QAAX,CAAoBiT,eAApB,KAAwCJ,OAAxD;AACA,QAAI,KAAKvH,KAAL,CAAWoa,eAAX,KAA+B9N,OAAnC,EAA4C;AAC1C,WAAK1H,QAAL,CAAc,EAACwV,iBAAiB9N,OAAlB,EAAd;AACD;AACF;;AAEDsN,cAAYc,IAAZ,EAAkB;AAChB,SAAKF,WAAL,GAAmBE,IAAnB;AACD;;AAEDb,kBAAgB;AACd;AACA;AACA;AACA;AACA,QAAI,CAAC,KAAKW,WAAN,IAAqB,KAAK1W,KAAL,CAAWkN,SAAX,KAAyB2J,SAAlD,EAA6D;AAC3D;AACD;;AAED;AACA,SAAK/V,QAAL,CAAc;AACZyV,mBAAa,IADD;AAEZO,iBAAY,GAAE,KAAKJ,WAAL,CAAiBC,YAAa;AAFhC,KAAd;AAIA,UAAM,EAAChlB,MAAD,EAASge,SAAT,KAAsB,uFAAAoH,CAAmBC,cAAnB,CAAkC,KAAKhX,KAAvC,CAA5B;AACA,SAAKA,KAAL,CAAW5P,QAAX,CAAoBuB,MAApB;AACA,SAAKqO,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa;AAC/ByE,aAAOkY,SADwB;AAE/B1b,cAAQ,KAAK+L,KAAL,CAAW/L;AAFY,KAAb,CAApB;AAID;;AAED+hB,kBAAgBve,KAAhB,EAAuB;AACrB;AACA,QAAIA,MAAM/E,MAAN,KAAiB+E,MAAMwf,aAA3B,EAA0C;AACxC,WAAKnW,QAAL,CAAc,EAACyV,aAAa,KAAd,EAAd;AACD;AACF;;AAEDW,eAAa;AACX,UAAM,EAACzO,IAAD,KAAS,KAAKzI,KAApB;AACA,QAAIyI,QAAQA,KAAK6F,UAAL,CAAgB,kBAAhB,CAAZ,EAAiD;AAC/C,aAAO,qEAAM,WAAU,wBAAhB,EAAyC,OAAO,EAAC6I,iBAAkB,QAAO1O,IAAK,IAA/B,EAAhD,GAAP;AACD;AACD,WAAO,qEAAM,WAAY,+BAA8BA,QAAQ,cAAe,EAAvE,GAAP;AACD;;AAEDyN,oBAAkBze,KAAlB,EAAyB;AACvBA,UAAM2f,cAAN;AACA,SAAKtW,QAAL,CAAc,EAAC2V,iBAAiB,IAAlB,EAAd;AACD;;AAEDN,2BAAyB;AACvB,SAAKrV,QAAL,CAAc,EAAC0V,iBAAiB,IAAlB,EAAd;AACD;;AAEDJ,2BAAyB;AACvB,SAAKtV,QAAL,CAAc,EAAC0V,iBAAiB,KAAlB,EAAd;AACD;;AAEDH,eAAaI,eAAb,EAA8B;AAC5B,SAAK3V,QAAL,CAAc,EAAC2V,eAAD,EAAd;AACD;;AAEDrV,WAAS;AACP,UAAMiW,gBAAgB,KAAKrX,KAAL,CAAWkN,SAAX,KAAyB2J,SAA/C;AACA,UAAM,EAACP,eAAD,EAAkBC,WAAlB,EAA+BO,SAA/B,EAA0CN,eAA1C,EAA2DC,eAA3D,KAA8E,KAAKva,KAAzF;AACA,UAAM,EAACpG,EAAD,EAAKqS,WAAL,EAAkB+E,SAAlB,EAA6BM,UAA7B,EAAyC1C,KAAzC,EAAgDwM,gBAAhD,EAAkEC,YAAlE,EAAgF9J,gBAAhF,EAAkGrd,QAAlG,EAA4Gsd,OAA5G,EAAqHC,MAArH,EAA6HO,cAA7H,KAA+I,KAAKlO,KAA1J;AACA,UAAM0V,iBAAkB,WAAU5f,EAAG,iBAArC;AACA,UAAM0hB,kBAAkBhK,cAAc,KAAKxN,KAAL,CAAW3D,KAAX,CAAiBC,MAAjB,CAAwBoZ,cAAxB,CAAtC;AACA,UAAM+B,SAASjB,mBAAmBC,eAAlC;AACA,WACE;AAAA;AAAA;AACE,mBAAY,uBAAsB,KAAKzW,KAAL,CAAW+F,SAAU,GAAEuQ,kBAAkB,oBAAlB,GAAyC,EAAG,GAAEpJ,YAAY,YAAZ,GAA2B,EAAG,GAAEuK,SAAS,SAAT,GAAqB,EAAG;AAC/J;AAFF,UAGE,mBAAiB3hB,EAHnB;AAIE;AAAA;AAAA,UAAK,WAAU,iBAAf;AACE;AAAA;AAAA,YAAI,WAAU,eAAd;AACE;AAAA;AAAA,cAAM,WAAU,cAAhB,EAA+B,SAAS,KAAKigB,aAA7C;AACG,iBAAKmB,UAAL,EADH;AAEGpL,gCAAoBhB,KAApB,CAFH;AAGGuM,6BAAiB,qEAAM,WAAY,0BAAyBnK,YAAY,8BAAZ,GAA6C,2BAA4B,EAApH;AAHpB;AADF,SADF;AAQE;AAAA;AAAA;AACE;AAAA;AAAA;AACE,yBAAU,0BADZ;AAEE,uBAAS,KAAKgJ,iBAFhB;AAGE,4BAAc,KAAKC,sBAHrB;AAIE,4BAAc,KAAKC,sBAJrB;AAKE;AAAA;AAAA,gBAAM,WAAU,SAAhB;AACE,yEAAC,2DAAD,IAAkB,IAAG,gCAArB;AADF;AALF,WADF;AAUGK,6BACC,2DAAC,0FAAD;AACE,gBAAI3gB,EADN;AAEE,0BAAcwhB,gBAFhB;AAGE,yBAAanP,WAHf;AAIE,0BAAcoP,YAJhB;AAKE,8BAAkB9J,gBALpB;AAME,uBAAWP,SANb;AAOE,sBAAU,KAAKmJ,YAPjB;AAQE,qBAAS3I,OARX;AASE,oBAAQC,MATV;AAUE,sBAAUvd,QAVZ;AAWE,4BAAgB8d,cAXlB;AAXJ;AARF,OAJF;AAsCE;AAAC,wGAAD;AAAA,UAAe,WAAU,uBAAzB;AACE;AAAA;AAAA;AACE,uBAAY,eAAcqI,cAAc,YAAd,GAA6B,EAAG,EAD5D;AAEE,6BAAiB,KAAKP,eAFxB;AAGE,iBAAK,KAAKF,WAHZ;AAIE,mBAAOS,eAAe,CAACrJ,SAAhB,GAA4B,EAAC4J,SAAD,EAA5B,GAA0C,IAJnD;AAKGU,6BAAmB,2DAAC,cAAD,IAAgB,gBAAgB9B,cAAhC,EAAgD,YAAYlI,UAA5D,EAAwE,aAAarF,WAArF,EAAkG,UAAU,KAAKnI,KAAL,CAAW5P,QAAvH,GALtB;AAMG,eAAK4P,KAAL,CAAWoE;AANd;AADF;AAtCF,KADF;AAmDD;AA7J0D;;AAgK7DyR,oBAAoBvU,YAApB,GAAmC;AACjC1Q,YAAUX,OAAOW,QAAP,IAAmB;AAC3BoT,sBAAkB,MAAM,CAAE,CADC;AAE3BD,yBAAqB,MAAM,CAAE,CAFF;AAG3BF,qBAAiB;AAHU,GADI;AAMjCxH,SAAO,EAACC,QAAQ,EAAT;AAN0B,CAAnC;;AASO,MAAMob,qBAAqB,6DAAAjT,CAAWoR,mBAAX,CAA3B,C;;;;;;;;;;;;;;;;;;ACzNP;AACA;AACA;AACA;AACA;;AAEA,MAAM8B,+BAA+B,CAAC,QAAD,EAAW,UAAX,EAAuB,WAAvB,EAAoC,eAApC,EAAqD,gBAArD,EAAuE,WAAvE,EAAoF,eAApF,CAArC;AACA,MAAMC,8BAA8B,CAAC,QAAD,EAAW,UAAX,EAAuB,WAAvB,EAAoC,gBAApC,EAAsD,WAAtD,EAAmE,oBAAnE,CAApC;;AAEO,MAAMC,YAAN,SAA2B,4CAAA3X,CAAMC,aAAjC,CAA+C;AACpDuT,eAAa;AACX,UAAM,EAAC1T,KAAD,KAAU,IAAhB;;AAEA,UAAM4T,cAAc5T,MAAMkO,cAAN,GAAuB,CAAC,GAAG0J,2BAAJ,CAAvB,GAA0D,CAAC,GAAGD,4BAAJ,CAA9E;AACA;AACA,QAAI3X,MAAM8X,YAAV,EAAwB;AACtBlE,kBAAYmE,MAAZ,CAAmB,CAAnB,EAAsB,CAAtB,EAAyB,GAAG/X,MAAM8X,YAAlC,EAAgD,WAAhD;AACD;AACD;AACA,QAAI9X,MAAMyN,gBAAV,EAA4B;AAC1BmG,kBAAYmE,MAAZ,CAAmB,CAAC,CAApB,EAAuB,CAAvB,EAA0B,eAA1B;AACD;;AAED,UAAMnmB,UAAUgiB,YAAYhM,GAAZ,CAAgB1V,KAAK,uFAAA6kB,CAAmB7kB,CAAnB,EAAsB8N,KAAtB,CAArB,EAAmD4H,GAAnD,CAAuDkM,UAAU;AAC/E,YAAM,EAACniB,MAAD,EAASmE,EAAT,EAAavF,IAAb,EAAmBof,SAAnB,KAAgCmE,MAAtC;AACA,UAAI,CAACvjB,IAAD,IAASuF,EAAb,EAAiB;AACfge,eAAOC,KAAP,GAAe/T,MAAM2E,IAAN,CAAWC,aAAX,CAAyB,EAAC9O,EAAD,EAAzB,CAAf;AACAge,eAAOpP,OAAP,GAAiB,MAAM;AACrB1E,gBAAM5P,QAAN,CAAeuB,MAAf;AACA,cAAIge,SAAJ,EAAe;AACb3P,kBAAM5P,QAAN,CAAe,iEAAAC,CAAG2C,SAAH,CAAa;AAC1ByE,qBAAOkY,SADmB;AAE1B1b,sBAAQ+L,MAAM/L;AAFY,aAAb,CAAf;AAID;AACF,SARD;AASD;AACD,aAAO6f,MAAP;AACD,KAfe,CAAhB;;AAiBA;AACA;AACA;AACAliB,YAAQ,CAAR,EAAWqiB,KAAX,GAAmB,IAAnB;AACAriB,YAAQA,QAAQub,MAAR,GAAiB,CAAzB,EAA4B+G,IAA5B,GAAmC,IAAnC;AACA,WAAOtiB,OAAP;AACD;;AAEDwP,WAAS;AACP,WAAQ,2DAAC,0FAAD;AACN,gBAAU,KAAKpB,KAAL,CAAWmU,QADf;AAEN,eAAS,KAAKT,UAAL,EAFH,GAAR;AAGD;AA3CmD;;AA8C/C,MAAMsE,cAAc,6DAAAvT,CAAWoT,YAAX,CAApB,C;;;;;;;;;;ACvDP;;AAEA;;;;AAIO,MAAMd,qBAAqB;AAChChH,aAAW,OAAO,EAACxf,MAAM,WAAP,EAAP,CADqB;AAEhC0nB,UAAQnJ,YAAY;AAClBhZ,QAAI,6BADc;AAElB2S,UAAM,cAFY;AAGlB9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc;AACpBhC,YAAM,8DAAAC,CAAG0nB,YADW;AAEpBjlB,YAAM,EAAC6C,IAAIgZ,QAAQhZ,EAAb,EAAiBqiB,WAAW,CAAC,CAA7B;AAFc,KAAd,CAHU;AAOlBxI,eAAW,cAPO;AAQlBuC,cAAU,CAAC,CAACpD,QAAQpB;AARF,GAAZ,CAFwB;AAYhC0K,YAAUtJ,YAAY;AACpBhZ,QAAI,+BADgB;AAEpB2S,UAAM,gBAFc;AAGpB9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc;AACpBhC,YAAM,8DAAAC,CAAG0nB,YADW;AAEpBjlB,YAAM,EAAC6C,IAAIgZ,QAAQhZ,EAAb,EAAiBqiB,WAAW,CAAC,CAA7B;AAFc,KAAd,CAHY;AAOpBxI,eAAW,gBAPS;AAQpBuC,cAAU,CAAC,CAACpD,QAAQnB;AARA,GAAZ,CAZsB;AAsBhC0K,iBAAevJ,YAAY;AACzBhZ,QAAI,oCADqB;AAEzB2S,UAAM,SAFmB;AAGzB9W,YAAQ,iEAAAtB,CAAGuD,OAAH,CAAWkb,QAAQyI,YAAnB,EAAiC,KAAjC,CAHiB;AAIzB5H,eAAW;AAJc,GAAZ,CAtBiB;AA4BhC2I,mBAAiBxJ,YAAY;AAC3BhZ,QAAI,sCADuB;AAE3B2S,UAAM,UAFqB;AAG3B9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc,EAAChC,MAAM,8DAAAC,CAAG+nB,oBAAV,EAAgCtlB,MAAM,EAAC6C,IAAIgZ,QAAQhZ,EAAb,EAAiBhC,OAAO,EAACoZ,WAAW,IAAZ,EAAxB,EAAtC,EAAd,CAHmB;AAI3ByC,eAAW;AAJgB,GAAZ,CA5Be;AAkChC6I,iBAAe1J,YAAY;AACzBhZ,QAAI,oCADqB;AAEzB2S,UAAM,UAFmB;AAGzB9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc,EAAChC,MAAM,8DAAAC,CAAG+nB,oBAAV,EAAgCtlB,MAAM,EAAC6C,IAAIgZ,QAAQhZ,EAAb,EAAiBhC,OAAO,EAACoZ,WAAW,KAAZ,EAAxB,EAAtC,EAAd,CAHiB;AAIzByC,eAAW;AAJc,GAAZ,CAlCiB;AAwChC8I,iBAAe3J,YAAY;AACzBhZ,QAAI,oCADqB;AAEzB2S,UAAM,UAFmB;AAGzB9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc,EAAChC,MAAM,8DAAAC,CAAG+V,aAAV,EAAd,CAHiB;AAIzBoJ,eAAW;AAJc,GAAZ,CAxCiB;AA8ChC+I,sBAAoB5J,YAAY;AAC9BhZ,QAAI,mCAD0B;AAE9B2S,UAAM,UAFwB;AAG9B9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc,EAAChC,MAAM,8DAAAC,CAAGmoB,oBAAV,EAAgC1lB,MAAM6b,QAAQhZ,EAA9C,EAAd;AAHsB,GAAZ,CA9CY;AAmDhC8iB,cAAY9J,YAAY;AACtBhZ,QAAI,iCADkB;AAEtB2S,UAAM,KAFgB;AAGtB9W,YAAQ,EAACpB,MAAM,8DAAAC,CAAGyiB,cAAV,EAA0BhgB,MAAM,EAACyd,OAAO,CAAC,CAAT,EAAhC,EAHc;AAItBf,eAAW;AAJW,GAAZ,CAnDoB;AAyDhCkJ,iBAAe/J,YAAY;AACzBhZ,QAAI,oCADqB;AAEzB2S,UAAM,MAFmB;AAGzB9W,YAAQ,iEAAAtB,CAAGkC,UAAH,CAAc;AACpBhC,YAAM,8DAAAC,CAAGyhB,SADW;AAEpBhf,YAAM,EAACqL,KAAKwQ,QAAQrB,gBAAd;AAFc,KAAd,CAHiB;AAOzBkC,eAAW;AAPc,GAAZ,CAzDiB;AAkEhCqH,kBAAgBlI,WAAYA,QAAQ5B,SAAR,GAAoB6J,mBAAmByB,aAAnB,CAAiC1J,OAAjC,CAApB,GAAgEiI,mBAAmBuB,eAAnB,CAAmCxJ,OAAnC;AAlE5D,CAA3B,C;;;;;;;;;;;;;ACNP;AACA;AACA;;AAEA;AACA;AACA,MAAMgK,oBAAoB,CAAC,YAAD,EAAe,UAAf,CAA1B;;AAEO,MAAMC,kBAAN,SAAiC,4CAAA7Y,CAAM8Y,SAAvC,CAAiD;AACtDhkB,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA;AACA,SAAKiZ,OAAL,GAAe,KAAKjZ,KAAL,CAAWiZ,OAAX,IAAsB,kEAArC;;AAEA,SAAKC,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBjgB,IAAxB,CAA6B,IAA7B,CAA1B;AACA,SAAKkgB,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBlgB,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKmgB,kBAAL,GAA0B,KAA1B;AACA,SAAKC,iBAAL,GAAyB,KAAzB;AACA,SAAKC,oBAAL,GAA4B,KAA5B;AACD;;AAEDrV,sBAAoB;AAClB,QAAI,CAAC6U,kBAAkB/iB,QAAlB,CAA2B,KAAKiK,KAAL,CAAWlK,EAAtC,CAAL,EAAgD;AAC9C;AACD;;AAED,SAAKyjB,sBAAL;AACD;;AAEDpV,uBAAqB;AACnB,QAAI,CAAC2U,kBAAkB/iB,QAAlB,CAA2B,KAAKiK,KAAL,CAAWlK,EAAtC,CAAL,EAAgD;AAC9C;AACD;;AAED,SAAKyjB,sBAAL;AACD;;AAED;;;;;;;;;;;;;;;;;;;;AAoBAC,mBAAiBC,QAAjB,EAA2B;AACzBC,0BAAsB,MAAMnF,WAAWkF,QAAX,EAAqB,CAArB,CAA5B;AACD;;AAEDE,4BAA0B;AACxB;AACA;AACA,QAAI,CAAC,KAAK3Z,KAAL,CAAWpE,WAAhB,EAA6B;AAC3B;AACA,WAAKwd,kBAAL,GAA0B,IAA1B;AACD,KAHD,MAGO,IAAI,KAAKA,kBAAT,EAA6B;AAClC,WAAKA,kBAAL,GAA0B,KAA1B;AACA;AACA,WAAKF,kBAAL;AACD;AACF;;AAEDK,2BAAyB;AACvB;AACA,QAAI,KAAKF,iBAAL,IAA0B,CAAC,KAAKrZ,KAAL,CAAWpE,WAA1C,EAAuD;AACrD;AACD;;AAED;AACA;AACA;AACA;AACA;AACA,SAAKyd,iBAAL,GAAyB,IAAzB;AACA,SAAKG,gBAAL,CAAsB,KAAKL,iBAA3B;AACD;;AAED;;;;AAIAS,iCAA+B;AAC7B;AACA,QAAI,CAAC,KAAKN,oBAAV,EAAgC;AAC9B,WAAKA,oBAAL,GAA4B,IAA5B;AACA;AACA,YAAMlkB,MAAO,GAAE,KAAK4K,KAAL,CAAWlK,EAAG,kBAA7B;AACA,WAAKmjB,OAAL,CAAaY,IAAb,CAAkBzkB,GAAlB;AACD;AACF;;AAED;;;;;;AAMA8jB,uBAAqB;AACnB;AACA,UAAMY,eAAgB,GAAE,KAAK9Z,KAAL,CAAWlK,EAAG,gBAAtC;AACA,SAAKmjB,OAAL,CAAaY,IAAb,CAAkBC,YAAlB;;AAEA,QAAI;AACF,YAAMC,iBAAkB,GAAE,KAAK/Z,KAAL,CAAWlK,EAAG,kBAAxC;AACA;AACA,YAAMhC,QAAQkmB,SAAS,KAAKf,OAAL,CAAagB,+BAAb,CAA6CH,YAA7C,IACA,KAAKb,OAAL,CAAagB,+BAAb,CAA6CF,cAA7C,CADT,EACuE,EADvE,CAAd;AAEA,WAAK/Z,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGkC,UAAH,CAAc;AAChChC,cAAM,8DAAAC,CAAGsR,sBADuB;AAEhC;AACA7O,cAAM,EAAC,CAAE,GAAE,KAAK+M,KAAL,CAAWlK,EAAG,kBAAlB,GAAsChC,KAAvC;AAH0B,OAAd,CAApB;AAKD,KAVD,CAUE,OAAOsP,EAAP,EAAW;AACX;AACA;AACD;AACF;;AAED+V,sBAAoB;AAClB;AACA,QAAI,KAAKnZ,KAAL,CAAWlK,EAAX,KAAkB,UAAtB,EAAkC;AAChC;AACD;;AAED;AACA,UAAMV,MAAO,GAAE,KAAK4K,KAAL,CAAWlK,EAAG,mBAA7B;AACA,SAAKmjB,OAAL,CAAaY,IAAb,CAAkBzkB,GAAlB;;AAEA,QAAI;AACF,YAAMnC,OAAO,EAAb;AACAA,WAAKmC,GAAL,IAAY,KAAK6jB,OAAL,CAAagB,+BAAb,CAA6C7kB,GAA7C,CAAZ;;AAEA,WAAK4K,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGkC,UAAH,CAAc;AAChChC,cAAM,8DAAAC,CAAGsR,sBADuB;AAEhC7O;AAFgC,OAAd,CAApB;AAID,KARD,CAQE,OAAOmQ,EAAP,EAAW;AACX;AACA;AACA;AACD;AACF;;AAEDhC,WAAS;AACP,QAAI0X,kBAAkB/iB,QAAlB,CAA2B,KAAKiK,KAAL,CAAWlK,EAAtC,CAAJ,EAA+C;AAC7C,WAAK8jB,4BAAL;AACA,WAAKD,uBAAL;AACD;AACD,WAAO,KAAK3Z,KAAL,CAAWoE,QAAlB;AACD;AAzJqD,C;;;;;;;;;ACRxD;AAAA;AACA;;AAEA;;AACA,IAAI,OAAO8V,WAAP,KAAuB,WAA3B,EAAwC;AACtCA,cAAYC,MAAZ,CAAmB,qCAAnB;AACD;;AAED,IAAIC,aAAJ;;AAEA;AACA;AACA,IAAI,OAAOC,QAAP,KAAoB,WAAxB,EAAqC;AACnC;AACAD,kBAAgBC,SAASC,QAAT,CAAkBC,eAAlB,CAAkCC,WAAlD;AACD,CAHD,MAGO,IAAI,OAAOA,WAAP,KAAuB,WAA3B,EAAwC;AAC7C;AACA;AACAJ,kBAAgBI,WAAhB;AACD,CAJM,MAIA;AACL;AACA;AACAJ,kBAAgB;AACd1gB,UAAM,CAAE,CADM;AAEdmgB,WAAO,CAAE;AAFK,GAAhB;AAID;;AAED,SAASY,YAAT,CAAsB7oB,OAAtB,EAA+B;AAC7B;AACA;AACA,MAAIA,WAAWA,QAAQ8oB,cAAvB,EAAuC;AACrC,SAAKC,KAAL,GAAa/oB,QAAQ8oB,cAArB;AACD,GAFD,MAEO;AACL,SAAKC,KAAL,GAAaP,aAAb;AACD;AACF;;;AAEDK,aAAaG,SAAb,GAAyB;AACvB;;;;;;;;AAQAf,QAAM,SAASA,IAAT,CAAcgB,GAAd,EAAmB;AACvB,SAAKF,KAAL,CAAWd,IAAX,CAAgBgB,GAAhB;AACD,GAXsB;;AAavB;;;;;;;;AAQAC,oBAAkB,SAASA,gBAAT,CAA0BjnB,IAA1B,EAAgCtD,IAAhC,EAAsC;AACtD,WAAO,KAAKoqB,KAAL,CAAWG,gBAAX,CAA4BjnB,IAA5B,EAAkCtD,IAAlC,CAAP;AACD,GAvBsB;;AAyBvB;;;;;;;;;;;;;;;AAeA,MAAIwqB,UAAJ,GAAiB;AACf,WAAO,KAAKJ,KAAL,CAAWI,UAAlB;AACD,GA1CsB;;AA4CvB;;;;;;;AAOAC,UAAQ,SAASA,MAAT,GAAkB;AACxB,WAAO,KAAKD,UAAL,GAAkB,KAAKJ,KAAL,CAAWjhB,GAAX,EAAzB;AACD,GArDsB;;AAuDvB;;;;;;;;;;;;;;;;;;AAkBAugB,kCAAgCpmB,IAAhC,EAAsC;AACpC,QAAIonB,UAAU,KAAKH,gBAAL,CAAsBjnB,IAAtB,EAA4B,MAA5B,CAAd;;AAEA,QAAI,CAAConB,QAAQ9N,MAAb,EAAqB;AACnB,YAAM,IAAInb,KAAJ,CAAW,0BAAyB6B,IAAK,EAAzC,CAAN;AACD;;AAED,QAAIqnB,kBAAkBD,QAAQA,QAAQ9N,MAAR,GAAiB,CAAzB,CAAtB;AACA,WAAO,KAAKwN,KAAL,CAAWI,UAAX,GAAwBG,gBAAgBC,SAA/C;AACD;AAlFsB,CAAzB;;kBAqFmB,IAAIV,YAAJ,E;;;;;;;;;;;;;;AC3HnB;AACA;;AAEO,MAAMW,KAAN,SAAoB,4CAAAlb,CAAMC,aAA1B,CAAwC;AAC7CiB,WAAS;AACP,UAAM,EAAC9C,GAAD,EAAMzK,IAAN,KAAc,KAAKmM,KAAzB;AACA,WAAQ;AAAA;AAAA;AAAI;AAAA;AAAA,UAAG,KAAKnM,IAAR,EAAc,WAAU,YAAxB,EAAqC,MAAMyK,GAA3C;AAAiDzK;AAAjD;AAAJ,KAAR;AACD;AAJ4C;;AAOxC,MAAMwnB,MAAN,SAAqB,4CAAAnb,CAAMC,aAA3B,CAAyC;AAC9CiB,WAAS;AACP,UAAM,EAAC2M,MAAD,EAASQ,kBAAT,KAA+B,KAAKvO,KAA1C;AACA,WACE;AAAA;AAAA,QAAK,WAAU,OAAf;AACE;AAAA;AAAA;AAAM,mEAAC,2DAAD,IAAkB,IAAG,kBAArB;AAAN,OADF;AAEE;AAAA;AAAA;AAAK+N,kBAAUA,OAAOnG,GAAP,CAAW0T,KAAK,2DAAC,KAAD,IAAO,KAAKA,EAAEznB,IAAd,EAAoB,KAAKynB,EAAEhd,GAA3B,EAAgC,MAAMgd,EAAEznB,IAAxC,GAAhB;AAAf,OAFF;AAIG0a,4BAAsB;AAAA;AAAA,UAAG,WAAU,iBAAb,EAA+B,MAAMA,kBAArC;AACrB,mEAAC,2DAAD,IAAkB,IAAG,uBAArB;AADqB;AAJzB,KADF;AAUD;AAb6C,C;;;;;;;;;;;;;;;;;;;;;;;;;ACVhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASgN,eAAT,CAAyB1O,IAAzB,EAA+B;AAC7B,MAAIA,KAAK2O,mBAAT,EAA8B;AAC5B,WAAO,mBAAP;AACD;AACD,MAAI3O,KAAK4O,YAAL,IAAqB5O,KAAK6O,UAAL,KAAoB,UAA7C,EAAyD;AACvD,WAAO,UAAP;AACD;AACD,MAAI7O,KAAK8O,WAAL,IAAoB,wEAAxB,EAA+C;AAC7C,WAAO,WAAP;AACD;AACD,MAAI9O,KAAK+O,UAAL,IAAmB/O,KAAK8O,WAAL,IAAoB,0EAA3C,EAAoE;AAClE,WAAO,sBAAP;AACD;AACD,MAAI9O,KAAK+O,UAAT,EAAqB;AACnB,WAAO,YAAP;AACD;AACD,SAAO,UAAP;AACD;;AAED;;;;;AAKA,SAASC,uBAAT,CAAiCC,QAAjC,EAA2C;AACzC,QAAMC,qBAAqB,CAACpc,GAAD,EAAMkN,IAAN,KAAe;AACxClN,QAAI4b,gBAAgB1O,IAAhB,CAAJ;AACA,WAAOlN,GAAP;AACD,GAHD;;AAKA,SAAOmc,SAASpc,MAAT,CAAgBqc,kBAAhB,EAAoC;AACzC,yBAAqB,CADoB;AAEzC,4BAAwB,CAFiB;AAGzC,kBAAc,CAH2B;AAIzC,gBAAY,CAJ6B;AAKzC,iBAAa,CAL4B;AAMzC,gBAAY;AAN6B,GAApC,CAAP;AAQD;;AAEM,MAAMC,SAAN,SAAwB,4CAAA9b,CAAMC,aAA9B,CAA4C;AACjDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKic,WAAL,GAAmB,KAAKA,WAAL,CAAiBhjB,IAAjB,CAAsB,IAAtB,CAAnB;AACD;;AAED;;;AAGAijB,2BAAyB;AACvB,UAAMJ,WAAW,KAAKK,mBAAL,EAAjB;AACA,UAAMC,qBAAqBP,wBAAwBC,QAAxB,CAA3B;AACA,UAAMO,iBAAiBP,SAASlW,MAAT,CAAgB4J,QAAQ,CAAC,CAACA,KAAK4D,QAA/B,EAAyCjG,MAAhE;AACA;AACA,SAAKnN,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc;AAChCC,YAAM,8DAAAC,CAAGsR,sBADuB;AAEhC7O,YAAM,EAACqpB,qBAAqBF,kBAAtB,EAA0CG,iBAAiBF,cAA3D;AAF0B,KAAd,CAApB;AAID;;AAED;;;AAGAF,wBAAsB;AACpB;AACA,QAAIK,cAAc,+EAAlB;AACA;AACA,QAAI,CAACvsB,OAAOqc,UAAP,CAAmB,qBAAnB,EAAyCC,OAA9C,EAAuD;AACrDiQ,qBAAe,CAAf;AACD;AACD,WAAO,KAAKxc,KAAL,CAAWyc,QAAX,CAAoB/P,IAApB,CAAyBxO,KAAzB,CAA+B,CAA/B,EAAkC,KAAK8B,KAAL,CAAW0c,YAAX,GAA0BF,WAA5D,CAAP;AACD;;AAEDrY,uBAAqB;AACnB,SAAK+X,sBAAL;AACD;;AAEDjY,sBAAoB;AAClB,SAAKiY,sBAAL;AACD;;AAEDD,gBAAc;AACZ,SAAKjc,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa;AAC/BiB,cAAQ,mEADuB;AAE/BwD,aAAO;AAFwB,KAAb,CAApB;AAIA,SAAKuI,KAAL,CAAW5P,QAAX,CAAoB,EAACG,MAAM,8DAAAC,CAAGmsB,qBAAV,EAApB;AACD;;AAEDvb,WAAS;AACP,UAAM,EAACpB,KAAD,KAAU,IAAhB;AACA,UAAM,EAAC4c,QAAD,KAAa5c,MAAMyc,QAAzB;;AAEA,WAAQ;AAAC,qHAAD;AAAA,QAAoB,IAAG,UAAvB,EAAkC,aAAazc,MAAMyc,QAAN,CAAe7gB,WAA9D,EAA2E,UAAUoE,MAAM5P,QAA3F;AACN;AAAC,uHAAD;AAAA;AACE,qBAAU,WADZ;AAEE,gBAAK,UAFP;AAGE,cAAG,UAHL;AAIE,iBAAO,EAAC0F,IAAI,kBAAL,EAJT;AAKE,4BAAkB,CAAC,YAAD,CALpB;AAME,wBAAa,gBANf;AAOE,uBAAa,mEAPf;AAQE,qBAAWkK,MAAMyc,QAAN,CAAe9R,IAAf,GAAsB3K,MAAMyc,QAAN,CAAe9R,IAAf,CAAoBuC,SAA1C,GAAsD2J,SARnE;AASE,mBAAS7W,MAAM0N,OATjB;AAUE,kBAAQ1N,MAAM2N,MAVhB;AAWE,oBAAU3N,MAAM5P,QAXlB;AAYE,mEAAC,oDAAD,IAAa,UAAU4P,MAAMyc,QAA7B,EAAuC,cAAczc,MAAM0c,YAA3D,EAAyE,UAAU1c,MAAM5P,QAAzF,EAAmG,MAAM4P,MAAM2E,IAA/G,EAAqH,iBAAiB4W,eAAtI,GAZF;AAaE;AAAA;AAAA,YAAK,WAAU,uBAAf;AACGqB,sBACC;AAAA;AAAA,cAAK,WAAU,eAAf;AACE,gFAAK,WAAU,eAAf,EAA+B,SAAS,KAAKX,WAA7C,GADF;AAEE;AAAA;AAAA,gBAAK,WAAU,OAAf;AACE,yEAAC,wDAAD;AACE,sBAAMjc,MAAMyc,QAAN,CAAe/P,IAAf,CAAoBkQ,SAASlM,KAA7B,CADR;AAEE,yBAAS,KAAKuL,WAFhB;AAGE,0BAAU,KAAKjc,KAAL,CAAW5P,QAHvB;AAIE,sBAAM,KAAK4P,KAAL,CAAW2E;AAJnB,iBAKMiY,QALN;AADF;AAFF;AAFJ;AAbF;AADM,KAAR;AA+BD;AApFgD;;AAuF5C,MAAMH,WAAW,2DAAAxlB,CAAQiF,UAAU;AACxCugB,YAAUvgB,MAAMugB,QADwB;AAExCpgB,SAAOH,MAAMG,KAF2B;AAGxCqgB,gBAAcxgB,MAAMG,KAAN,CAAYC,MAAZ,CAAmBugB;AAHO,CAAV,CAAR,EAIpB,6DAAApY,CAAWuX,SAAX,CAJoB,CAAjB,C;;;;;;;;;;;;;AC1IA,MAAMc,mBAAmB,WAAzB;AACA,MAAMC,iCAAiC,CAAC,iBAAD,EAAoB,aAApB,EAAmC,WAAnC,EAC5C,iBAD4C,EACzB,qBADyB,EACF,WADE,EACW,UADX,EACuB,WADvB,CAAvC;AAEP;AACO,MAAMC,wBAAwB,EAA9B;AACP;AACO,MAAMC,0BAA0B,EAAhC,C;;;;;;;;;;;;;;;;;;;;;;;;ACNP;AACA;AACA;AAMA;AACA;AACA;AACA;;AAEO,MAAMC,WAAN,SAA0B,4CAAAhd,CAAMC,aAAhC,CAA8C;AACnDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9D,KAAL,GAAa,EAACihB,iBAAiB,IAAlB,EAAb;AACA,SAAKC,WAAL,GAAmB,KAAKA,WAAL,CAAiBnkB,IAAjB,CAAsB,IAAtB,CAAnB;AACD;;AAED;;;;AAIAokB,aAAWpjB,CAAX,EAAc;AACZ,WAAOA,EAAEqjB,YAAF,CAAeC,KAAf,CAAqBxnB,QAArB,CAA8B,oBAA9B,CAAP;AACD;;AAEDqnB,cAAY3lB,KAAZ,EAAmB;AACjB,YAAQA,MAAMlH,IAAd;AACE,WAAK,OAAL;AACE;AACA,YAAI,KAAKitB,OAAT,EAAkB;AAChB/lB,gBAAM2f,cAAN;AACD;AACD;AACF,WAAK,WAAL;AACE,aAAKoG,OAAL,GAAe,IAAf;AACA/lB,cAAM6lB,YAAN,CAAmBG,aAAnB,GAAmC,MAAnC;AACAhmB,cAAM6lB,YAAN,CAAmBI,OAAnB,CAA2B,oBAA3B,EAAiD,KAAK1d,KAAL,CAAW0Q,KAA5D;AACAjZ,cAAM/E,MAAN,CAAairB,IAAb;AACA,aAAK3d,KAAL,CAAWod,WAAX,CAAuB3lB,KAAvB,EAA8B,KAAKuI,KAAL,CAAW0Q,KAAzC,EAAgD,KAAK1Q,KAAL,CAAW6M,IAA3D,EAAiE,KAAK7M,KAAL,CAAW8K,KAA5E;AACA;AACF,WAAK,SAAL;AACE,aAAK9K,KAAL,CAAWod,WAAX,CAAuB3lB,KAAvB;AACA;AACF,WAAK,WAAL;AACA,WAAK,UAAL;AACA,WAAK,MAAL;AACE,YAAI,KAAK4lB,UAAL,CAAgB5lB,KAAhB,CAAJ,EAA4B;AAC1BA,gBAAM2f,cAAN;AACA,eAAKpX,KAAL,CAAWod,WAAX,CAAuB3lB,KAAvB,EAA8B,KAAKuI,KAAL,CAAW0Q,KAAzC;AACD;AACD;AACF,WAAK,WAAL;AACE;AACA,aAAK8M,OAAL,GAAe,KAAf;AACA;AA5BJ;AA8BD;;AAED;;;;;;;;;;;AAWA,SAAOI,qBAAP,CAA6Bnf,SAA7B,EAAwCyD,SAAxC,EAAmD;AACjD,UAAM,EAAC0Z,UAAD,KAAend,UAAUoO,IAA/B;AACA,UAAMgR,eAAe,gFAAAjJ,CAAgBW,kBAAhB,CAAmCrT,UAAUib,eAA7C,EAA8DvB,UAA9D,CAArB;AACA,QAAIiC,YAAJ,EAAkB;AAChB,aAAO,IAAP;AACD;;AAED;AACAjJ,IAAA,gFAAAA,CAAgBQ,wBAAhB,CAAyClT,UAAUib,eAAnD;;AAEA,WAAO,EAACA,iBAAiB,gFAAAvI,CAAgBK,sBAAhB,CAAuC2G,UAAvC,CAAlB,EAAP;AACD;;AAED;AACA;AACA;AACA7a,uBAAqB;AACnB,UAAM+c,YAAYZ,YAAYU,qBAAZ,CAAkC,KAAK5d,KAAvC,EAA8C,KAAK9D,KAAnD,CAAlB;AACA,QAAI4hB,SAAJ,EAAe;AACb,WAAKhd,QAAL,CAAcgd,SAAd;AACD;AACF;;AAED;AACA;AACA;AACAC,4BAA0Btf,SAA1B,EAAqC;AACnC,UAAMqf,YAAYZ,YAAYU,qBAAZ,CAAkCnf,SAAlC,EAA6C,KAAKvC,KAAlD,CAAlB;AACA,QAAI4hB,SAAJ,EAAe;AACb,WAAKhd,QAAL,CAAcgd,SAAd;AACD;AACF;;AAED7c,yBAAuB;AACrB2T,IAAA,gFAAAA,CAAgBQ,wBAAhB,CAAyC,KAAKlZ,KAAL,CAAWihB,eAApD;AACD;;AAED/b,WAAS;AACP,UAAM,EAACgD,QAAD,EAAW2B,SAAX,EAAsBiY,YAAtB,EAAoCC,WAApC,EAAiDpR,IAAjD,EAAuDnI,OAAvD,EAAgEoG,KAAhE,KAAyE,KAAK9K,KAApF;AACA,UAAMke,wBAAyB,iBAAgBnY,YAAa,IAAGA,SAAU,EAA1B,GAA8B,EAAG,GAAE8G,KAAKsR,SAAL,GAAiB,UAAjB,GAA8B,EAAG,EAAnH;AACA,UAAM,EAAC1C,YAAD,EAAeE,WAAf,KAA8B9O,IAApC;AACA,UAAM,CAACuR,cAAD,IAAmBtT,KAAzB;AACA,QAAIuT,cAAJ;AACA,QAAIC,UAAJ;AACA,QAAIC,mBAAmB,KAAvB;AACA,QAAIC,iBAAJ;AACA,QAAIC,oBAAJ;AACA,QAAIC,qBAAqB,KAAKxiB,KAAL,CAAWihB,eAAX,IAA8B,KAAKjhB,KAAL,CAAWihB,eAAX,CAA2B7e,GAAlF;AACA,QAAI0f,YAAJ,EAAkB;AAAE;AAClBS,6BAAuB,KAAvB;AACD,KAFD,MAEO,IAAI5R,KAAK2O,mBAAT,EAA8B;AACnC;AACA6C,uBAAiB,yBAAjB;AACAC,mBAAa;AACXK,yBAAiB9R,KAAK8R,eADX;AAEXxH,yBAAiBuH,qBAAsB,OAAM,KAAKxiB,KAAL,CAAWihB,eAAX,CAA2B7e,GAAI,GAA3D,GAAgE;AAFtE,OAAb;AAID,KAPM,MAOA,IAAImd,gBAAgBE,eAAe,wEAAnC,EAA0D;AAC/D;AACA0C,uBAAiB,yBAAjB;AACAC,mBAAa;AACXK,yBAAiB9R,KAAK8R,eADX;AAEXxH,yBAAkB,OAAMsE,gBAAgB5O,KAAK+R,OAAQ;AAF1C,OAAb;AAID,KAPM,MAOA;AACL;AACAP,uBAAkB,aAAYK,qBAAqB,SAArB,GAAiC,EAAG,EAAlE;AACAJ,mBAAa,EAACnH,iBAAiBuH,qBAAsB,OAAM,KAAKxiB,KAAL,CAAWihB,eAAX,CAA2B7e,GAAI,GAA3D,GAAgE,MAAlF,EAAb;;AAEA;AACA,UAAIqd,eAAe,0EAAnB,EAA4C;AAC1C4C,2BAAmB,IAAnB;AACAC,4BAAoB,EAACrH,iBAAmB,OAAMtK,KAAK+R,OAAQ,GAAvC,EAApB;AACD,OAHD,MAGO,IAAIF,kBAAJ,EAAwB;AAC7B;AACA;AACAH,2BAAmB,IAAnB;AACAE,+BAAuB,IAAvB;AACD;AACF;AACD,QAAII,iBAAiB,EAArB;AACA,QAAIZ,WAAJ,EAAiB;AACfY,uBAAiB;AACfna,iBAAS,KAAK0Y,WADC;AAEf0B,mBAAW,KAAK1B,WAFD;AAGf2B,qBAAa,KAAK3B,WAHH;AAIf4B,qBAAa,KAAK5B;AAJH,OAAjB;AAMD;AACD,WAAQ;AAAA;AAAA,iBAAI,WAAWc,qBAAf,EAAsC,QAAQ,KAAKd,WAAnD,EAAgE,YAAY,KAAKA,WAAjF,EAA8F,aAAa,KAAKA,WAAhH,EAA6H,aAAa,KAAKA,WAA/I,IAAgKyB,cAAhK;AACN;AAAA;AAAA,UAAK,WAAU,gBAAf;AACG;AAAA;AAAA,YAAG,MAAMhS,KAAKvO,GAAd,EAAmB,SAASoG,OAA5B;AACG;AAAA;AAAA,cAAK,WAAU,MAAf,EAAsB,eAAa,IAAnC,EAAyC,iBAAe0Z,cAAxD;AACE,gFAAK,WAAWC,cAAhB,EAAgC,OAAOC,UAAvC,GADF;AAEGC,gCAAoB;AACnB,yBAAU,4BADS;AAEnB,+BAAeE,wBAAwBL,cAFpB;AAGnB,qBAAOI,iBAHY;AAFvB,WADH;AAQE;AAAA;AAAA,cAAK,WAAY,SAAQ3R,KAAKuG,QAAL,GAAgB,QAAhB,GAA2B,EAAG,EAAvD;AACGvG,iBAAKuG,QAAL,IAAiB,oEAAK,WAAU,qBAAf,GADpB;AAEG;AAAA;AAAA,gBAAM,KAAI,MAAV;AAAkBtI;AAAlB;AAFH;AARF,SADH;AAcI1G;AAdJ;AADM,KAAR;AAkBD;AAtKkD;AAwKrD8Y,YAAY5b,YAAZ,GAA2B;AACzBwJ,SAAO,EADkB;AAEzB+B,QAAM,EAFmB;AAGzBoR,eAAa;AAHY,CAA3B;;AAMO,MAAMgB,OAAN,SAAsB,4CAAA/e,CAAMC,aAA5B,CAA0C;AAC/CnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9D,KAAL,GAAa,EAACua,iBAAiB,KAAlB,EAAb;AACA,SAAKyI,WAAL,GAAmB,KAAKA,WAAL,CAAiBjmB,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKid,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBjd,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKod,YAAL,GAAoB,KAAKA,YAAL,CAAkBpd,IAAlB,CAAuB,IAAvB,CAApB;AACD;;AAED;;;AAGAkmB,sBAAoB;AAClB,UAAMrrB,QAAQ,EAACsrB,WAAW,KAAKpf,KAAL,CAAW6M,IAAX,CAAgBwS,QAA5B,EAAd;AACA;AACA,QAAI,KAAKrf,KAAL,CAAW6M,IAAX,CAAgBuG,QAApB,EAA8B;AAC5Btf,YAAMwrB,SAAN,GAAkB,QAAlB;AACD;AACD,WAAO,EAACxrB,KAAD,EAAP;AACD;;AAED6b,YAAUlY,KAAV,EAAiB;AACf,SAAKuI,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAasI,OAAOC,MAAP,CAAc;AAC7C9D,WAD6C;AAE7CxD,cAAQ,mEAFqC;AAG7Ckd,uBAAiB,KAAKnR,KAAL,CAAW0Q;AAHiB,KAAd,EAI9B,KAAKyO,iBAAL,EAJ8B,CAAb,CAApB;AAKD;;AAEDD,cAAYznB,KAAZ,EAAmB;AACjB,SAAKkY,SAAL,CAAe,OAAf;;AAEA;AACA;AACAlY,UAAM2f,cAAN;AACA,UAAM,EAACmI,MAAD,EAAS5J,MAAT,EAAiB6J,OAAjB,EAA0BC,OAA1B,EAAmC9K,QAAnC,KAA+Cld,KAArD;AACA,SAAKuI,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGkC,UAAH,CAAc;AAChChC,YAAM,8DAAAC,CAAGyhB,SADuB;AAEhChf,YAAMqI,OAAOC,MAAP,CAAc,KAAKyE,KAAL,CAAW6M,IAAzB,EAA+B,EAACpV,OAAO,EAAC8nB,MAAD,EAAS5J,MAAT,EAAiB6J,OAAjB,EAA0BC,OAA1B,EAAmC9K,QAAnC,EAAR,EAA/B;AAF0B,KAAd,CAApB;AAID;;AAEDuB,oBAAkBze,KAAlB,EAAyB;AACvBA,UAAM2f,cAAN;AACA,SAAKpX,KAAL,CAAW0f,UAAX,CAAsB,KAAK1f,KAAL,CAAW0Q,KAAjC;AACA,SAAK5P,QAAL,CAAc,EAAC2V,iBAAiB,IAAlB,EAAd;AACD;;AAEDJ,eAAaI,eAAb,EAA8B;AAC5B,SAAK3V,QAAL,CAAc,EAAC2V,eAAD,EAAd;AACD;;AAEDrV,WAAS;AACP,UAAM,EAACpB,KAAD,KAAU,IAAhB;AACA,UAAM,EAAC6M,IAAD,KAAS7M,KAAf;AACA,UAAM2f,oBAAoB,KAAKzjB,KAAL,CAAWua,eAAX,IAA8BzW,MAAM4f,WAAN,KAAsB5f,MAAM0Q,KAApF;AACA,UAAM5F,QAAQ+B,KAAKkH,KAAL,IAAclH,KAAKgT,QAAjC;AACA,WAAQ;AAAC,iBAAD;AAAA,mBAAiB7f,KAAjB,IAAwB,SAAS,KAAKkf,WAAtC,EAAmD,aAAa,KAAKlf,KAAL,CAAWod,WAA3E,EAAwF,WAAY,GAAEpd,MAAM+F,SAAN,IAAmB,EAAG,GAAE4Z,oBAAoB,SAApB,GAAgC,EAAG,EAAjK,EAAoK,OAAO7U,KAA3K;AACJ;AAAA;AAAA;AACE;AAAA;AAAA,YAAQ,WAAU,0BAAlB,EAA6C,SAAS,KAAKoL,iBAA3D;AACE;AAAA;AAAA,cAAM,WAAU,SAAhB;AACE,uEAAC,2DAAD,IAAkB,IAAG,wBAArB,EAA8C,QAAQ,EAACpL,KAAD,EAAtD;AADF;AADF,SADF;AAMG6U,6BACC,2DAAC,iFAAD;AACE,oBAAU3f,MAAM5P,QADlB;AAEE,iBAAO4P,MAAM0Q,KAFf;AAGE,oBAAU,KAAK2F,YAHjB;AAIE,mBAAS,iFAJX;AAKE,gBAAMxJ,IALR;AAME,oBAAU,KAAKsS,iBAAL,EANZ;AAOE,kBAAQ,mEAPV;AAPJ;AADI,KAAR;AAmBD;AA5E8C;AA8EjDF,QAAQ3d,YAAR,GAAuB;AACrBuL,QAAM,EADe;AAErB6S,eAAa,CAAE;AAFM,CAAvB;;AAKO,MAAMI,kBAAN,SAAiC,4CAAA5f,CAAMC,aAAvC,CAAqD;AAC1DnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK+f,iBAAL,GAAyB,KAAKA,iBAAL,CAAuB9mB,IAAvB,CAA4B,IAA5B,CAAzB;AACD;;AAED8mB,sBAAoB;AAClB,SAAK/f,KAAL,CAAW5P,QAAX,CACE,EAACG,MAAM,8DAAAC,CAAGyiB,cAAV,EAA0BhgB,MAAM,EAACyd,OAAO,KAAK1Q,KAAL,CAAW0Q,KAAnB,EAAhC,EADF;AAED;;AAEDtP,WAAS;AACP,WAAQ;AAAC,iBAAD;AAAA,mBAAiB,KAAKpB,KAAtB,IAA6B,WAAY,eAAc,KAAKA,KAAL,CAAW+F,SAAX,IAAwB,EAAG,EAAlF,EAAqF,aAAa,KAAlG;AACN,6EAAQ,WAAU,sCAAlB;AACC,eAAO,KAAK/F,KAAL,CAAW2E,IAAX,CAAgBC,aAAhB,CAA8B,EAAC9O,IAAI,2BAAL,EAA9B,CADR;AAEC,iBAAS,KAAKiqB,iBAFf;AADM,KAAR;AAKD;AAjByD;;AAoBrD,MAAMC,YAAN,SAA2B,4CAAA9f,CAAMC,aAAjC,CAA+C;AACpD,aAAW8f,aAAX,GAA2B;AACzB,WAAO;AACLL,mBAAa,IADR;AAELM,oBAAc,IAFT;AAGLC,mBAAa,IAHR;AAILC,oBAAc,IAJT;AAKLC,uBAAiB;AALZ,KAAP;AAOD;;AAEDrrB,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9D,KAAL,GAAa8jB,aAAaC,aAA1B;AACA,SAAK7C,WAAL,GAAmB,KAAKA,WAAL,CAAiBnkB,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKymB,UAAL,GAAkB,KAAKA,UAAL,CAAgBzmB,IAAhB,CAAqB,IAArB,CAAlB;AACD;;AAED8kB,4BAA0Btf,SAA1B,EAAqC;AACnC,QAAI,KAAKvC,KAAL,CAAWikB,WAAf,EAA4B;AAC1B,YAAMG,eAAe,KAAKtgB,KAAL,CAAWyc,QAAX,IAAuB,KAAKzc,KAAL,CAAWyc,QAAX,CAAoB/P,IAAhE;AACA,YAAM6T,cAAc9hB,UAAUge,QAAV,IAAsBhe,UAAUge,QAAV,CAAmB/P,IAA7D;AACA,UAAI4T,gBAAgBA,aAAa,KAAKpkB,KAAL,CAAWgkB,YAAxB,CAAhB,IACFI,aAAa,KAAKpkB,KAAL,CAAWgkB,YAAxB,EAAsC5hB,GAAtC,KAA8C,KAAKpC,KAAL,CAAWikB,WAAX,CAAuB7hB,GADnE,KAED,CAACiiB,YAAY,KAAKrkB,KAAL,CAAWgkB,YAAvB,CAAD,IAAyCK,YAAY,KAAKrkB,KAAL,CAAWgkB,YAAvB,EAAqC5hB,GAArC,KAA6C,KAAKpC,KAAL,CAAWikB,WAAX,CAAuB7hB,GAF5G,CAAJ,EAEsH;AACpH;AACA,aAAKwC,QAAL,CAAckf,aAAaC,aAA3B;AACD;AACF;AACF;;AAEDtQ,YAAUlY,KAAV,EAAiBiZ,KAAjB,EAAwB;AACtB,SAAK1Q,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa;AAC/ByE,WAD+B;AAE/BxD,cAAQ,mEAFuB;AAG/Bkd,uBAAiBT;AAHc,KAAb,CAApB;AAKD;;AAED0M,cAAY3lB,KAAZ,EAAmBiZ,KAAnB,EAA0B7D,IAA1B,EAAgC/B,KAAhC,EAAuC;AACrC,YAAQrT,MAAMlH,IAAd;AACE,WAAK,WAAL;AACE,aAAKiwB,OAAL,GAAe,KAAf;AACA,aAAK1f,QAAL,CAAc;AACZof,wBAAcxP,KADF;AAEZyP,uBAAatT,IAFD;AAGZuT,wBAActV,KAHF;AAIZ8U,uBAAa;AAJD,SAAd;AAMA,aAAKjQ,SAAL,CAAe,MAAf,EAAuBe,KAAvB;AACA;AACF,WAAK,SAAL;AACE,YAAI,CAAC,KAAK8P,OAAV,EAAmB;AACjB;AACA,eAAK1f,QAAL,CAAckf,aAAaC,aAA3B;AACD;AACD;AACF,WAAK,WAAL;AACE,YAAIvP,UAAU,KAAKxU,KAAL,CAAWgkB,YAAzB,EAAuC;AACrC,eAAKpf,QAAL,CAAc,EAACuf,iBAAiB,IAAlB,EAAd;AACD,SAFD,MAEO;AACL,eAAKvf,QAAL,CAAc,EAACuf,iBAAiB,KAAKI,oBAAL,CAA0B/P,KAA1B,CAAlB,EAAd;AACD;AACD;AACF,WAAK,MAAL;AACE,YAAIA,UAAU,KAAKxU,KAAL,CAAWgkB,YAAzB,EAAuC;AACrC,eAAKM,OAAL,GAAe,IAAf;AACA,eAAKxgB,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAGC,UAAH,CAAc;AAChCC,kBAAM,8DAAAC,CAAGkwB,gBADuB;AAEhCztB,kBAAM;AACJuc,oBAAM;AACJlR,qBAAK,KAAKpC,KAAL,CAAWikB,WAAX,CAAuB7hB,GADxB;AAEJyV,uBAAO,KAAK7X,KAAL,CAAWkkB,YAFd;AAGJ5E,qCAAqB,KAAKtf,KAAL,CAAWikB,WAAX,CAAuB3E;AAHxC,eADF;AAMJ9K,mBANI;AAOJiQ,gCAAkB,KAAKzkB,KAAL,CAAWgkB;AAPzB;AAF0B,WAAd,CAApB;AAYA,eAAKvQ,SAAL,CAAe,MAAf,EAAuBe,KAAvB;AACD;AACD;AAzCJ;AA2CD;;AAEDkQ,iBAAe;AACb;AACA,QAAI9E,WAAW,KAAK9b,KAAL,CAAWyc,QAAX,CAAoB/P,IAApB,CAAyBxO,KAAzB,EAAf;AACA4d,aAAS3O,MAAT,GAAkB,KAAKnN,KAAL,CAAW0c,YAAX,GAA0B,+EAA5C;AACA,WAAOZ,QAAP;AACD;;AAED;;;;AAIA2E,uBAAqB/P,KAArB,EAA4B;AAC1B,UAAMoL,WAAW,KAAK8E,YAAL,EAAjB;AACA9E,aAAS,KAAK5f,KAAL,CAAWgkB,YAApB,IAAoC,IAApC;AACA,UAAMW,aAAa/E,SAASlU,GAAT,CAAa4H,QAAUA,QAAQA,KAAK4D,QAAd,GAA0B5D,IAA1B,GAAiC,IAAvD,CAAnB;AACA,UAAMsR,WAAWhF,SAASlW,MAAT,CAAgB4J,QAAQA,QAAQ,CAACA,KAAK4D,QAAtC,CAAjB;AACA,UAAM2N,eAAezlB,OAAOC,MAAP,CAAc,EAAd,EAAkB,KAAKW,KAAL,CAAWikB,WAA7B,EAA0C,EAAC/M,UAAU,IAAX,EAAiB+K,WAAW,IAA5B,EAA1C,CAArB;AACA,QAAI,CAAC0C,WAAWnQ,KAAX,CAAL,EAAwB;AACtBmQ,iBAAWnQ,KAAX,IAAoBqQ,YAApB;AACD,KAFD,MAEO;AACL;AACA;AACA,UAAIC,YAAYtQ,KAAhB;AACA,YAAMuQ,YAAYvQ,QAAQ,KAAKxU,KAAL,CAAWgkB,YAAnB,GAAkC,CAAC,CAAnC,GAAuC,CAAzD;AACA,aAAOW,WAAWG,SAAX,CAAP,EAA8B;AAC5BA,qBAAaC,SAAb;AACD;;AAED;AACA,YAAMC,eAAexQ,QAAQ,KAAKxU,KAAL,CAAWgkB,YAAnB,GAAkC,CAAlC,GAAsC,CAAC,CAA5D;AACA,aAAOc,cAActQ,KAArB,EAA4B;AAC1B,cAAMyQ,YAAYH,YAAYE,YAA9B;AACAL,mBAAWG,SAAX,IAAwBH,WAAWM,SAAX,CAAxB;AACAH,oBAAYG,SAAZ;AACD;AACDN,iBAAWnQ,KAAX,IAAoBqQ,YAApB;AACD;;AAED;AACA,UAAMK,UAAUP,UAAhB;AACA,SAAK,IAAI3hB,IAAI,CAAb,EAAgBA,IAAIkiB,QAAQjU,MAA5B,EAAoCjO,GAApC,EAAyC;AACvC,UAAI,CAACkiB,QAAQliB,CAAR,CAAL,EAAiB;AACfkiB,gBAAQliB,CAAR,IAAa4hB,SAASO,KAAT,MAAoB,IAAjC;AACD;AACF;;AAED,WAAOD,OAAP;AACD;;AAED1B,aAAWhP,KAAX,EAAkB;AAChB,SAAK5P,QAAL,CAAc,EAAC8e,aAAalP,KAAd,EAAd;AACD;;AAEDtP,WAAS;AACP,UAAM,EAACpB,KAAD,KAAU,IAAhB;AACA,UAAM8b,WAAW,KAAK5f,KAAL,CAAWmkB,eAAX,IAA8B,KAAKO,YAAL,EAA/C;AACA,UAAMU,aAAa,EAAnB;AACA,UAAMlS,cAAc;AAClBgO,mBAAa,KAAKA,WADA;AAElBhtB,gBAAU4P,MAAM5P,QAFE;AAGlBuU,YAAM3E,MAAM2E;AAHM,KAApB;AAKA;AACA;AACA;AACA;AACA,QAAIqc,YAAY,CAAhB;;AAEA;AACA;AACA,UAAMO,wBAAwBvhB,MAAM0c,YAAN,GAAqB,CAAnD;;AAEA,SAAK,IAAIxd,IAAI,CAAR,EAAWsiB,IAAI1F,SAAS3O,MAA7B,EAAqCjO,IAAIsiB,CAAzC,EAA4CtiB,GAA5C,EAAiD;AAC/C,YAAM2N,OAAOiP,SAAS5c,CAAT,KAAe5D,OAAOC,MAAP,CAAc,EAAd,EAAkBugB,SAAS5c,CAAT,CAAlB,EAA+B,EAACmgB,UAAU,KAAKrf,KAAL,CAAWub,eAAX,CAA2BO,SAAS5c,CAAT,CAA3B,CAAX,EAA/B,CAA5B;AACA,YAAMuiB,YAAY;AAChBrsB,aAAKyX,OAAOA,KAAKvO,GAAZ,GAAkB0iB,WADP;AAEhBtQ,eAAOxR;AAFS,OAAlB;AAIA,UAAIA,KAAKqiB,qBAAT,EAAgC;AAC9BE,kBAAU1b,SAAV,GAAsB,iBAAtB;AACD;AACDub,iBAAWtrB,IAAX,CAAgB,CAAC6W,IAAD,GACd,2DAAC,kBAAD,eACM4U,SADN,EAEMrS,WAFN,EADc,GAKd,2DAAC,OAAD;AACE,cAAMvC,IADR;AAEE,qBAAa,KAAK3Q,KAAL,CAAW0jB,WAF1B;AAGE,oBAAY,KAAKF;AAHnB,SAIM+B,SAJN,EAKMrS,WALN,EALF;AAYD;AACD,WAAQ;AAAA;AAAA,QAAI,WAAY,iBAAgB,KAAKlT,KAAL,CAAWikB,WAAX,GAAyB,aAAzB,GAAyC,EAAG,EAA5E;AACLmB;AADK,KAAR;AAGD;AAtLmD;;AAyL/C,MAAMI,cAAc,6DAAAjd,CAAWub,YAAX,CAApB,C;;;;;;;;;;;;;;;;;AC3dP;AACA;AACA;AACA;;AAEO,MAAM2B,eAAN,SAA8B,4CAAAzhB,CAAMC,aAApC,CAAkD;AACvDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK4hB,aAAL,GAAqB,KAAKA,aAAL,CAAmB3oB,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAK4oB,QAAL,GAAgB,KAAKA,QAAL,CAAc5oB,IAAd,CAAmB,IAAnB,CAAhB;AACA,SAAK6oB,SAAL,GAAiB,KAAKA,SAAL,CAAe7oB,IAAf,CAAoB,IAApB,CAAjB;AACA,SAAK8oB,SAAL,GAAiB,KAAKA,SAAL,CAAe9oB,IAAf,CAAoB,IAApB,CAAjB;AACA,SAAK+oB,aAAL,GAAqB,KAAKA,aAAL,CAAmB/oB,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKgpB,cAAL,GAAsB,KAAKA,cAAL,CAAoBhpB,IAApB,CAAyB,IAAzB,CAAtB;;AAEA,SAAKiD,KAAL,GAAa;AACXgmB,kBAAY,EADD;AAEXC,sBAAgB;AAFL,KAAb;AAIA,SAAKJ,SAAL;AACD;;AAEDA,cAAY;AACV;AACA;AACAxN,eAAW,MAAM;AACf,WAAKzT,QAAL,CAAc,EAACshB,MAAM,IAAP,EAAd;AACD,KAFD,EAEG,EAFH;AAGD;;AAEDJ,kBAAgB;AACdvmB,WAAOsI,mBAAP,CAA2B,kBAA3B,EAA+C,KAAKie,aAApD;AACA,SAAKlhB,QAAL,CAAc,EAACshB,MAAM,KAAP,EAAd;AACA7N,eAAW,MAAM;AACf;AACA3jB,eAASyU,IAAT,CAAcC,SAAd,CAAwB+c,MAAxB,CAA+B,SAA/B;AACA,WAAKvhB,QAAL,CAAc,EAACqhB,gBAAgB,IAAjB,EAAd;AACD,KAJD,EAIG,GAJH;AAKD;;AAEDP,gBAAc3nB,CAAd,EAAiB;AACf,QAAItC,QAAQsC,EAAEvH,MAAF,CAAS4vB,eAArB;AACA,SAAKxhB,QAAL,CAAc,EAACohB,YAAYjoB,EAAEvH,MAAF,CAASoB,KAAtB,EAAd;AACA6D,UAAM2N,SAAN,CAAgB+c,MAAhB,CAAuB,QAAvB;AACApoB,MAAEvH,MAAF,CAAS4S,SAAT,CAAmB+c,MAAnB,CAA0B,SAA1B;AACD;;AAEDR,aAAW;AACT,SAAK7hB,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa,EAACyE,OAAO,cAAR,EAAb,CAApB;AACAgE,WAAOuI,gBAAP,CAAwB,kBAAxB,EAA4C,KAAKge,aAAjD;AACD;;AAEDF,cAAY;AACV,SAAK9hB,KAAL,CAAW5P,QAAX,CAAoB,iEAAAC,CAAG2C,SAAH,CAAa,EAACyE,OAAO,gBAAR,EAAb,CAApB;AACA,SAAKuqB,aAAL;AACD;;AAEDC,iBAAehoB,CAAf,EAAkB;AAChB,QAAItC,QAAQsC,EAAEvH,MAAF,CAAS4vB,eAArB;AACA3qB,UAAM2N,SAAN,CAAgBC,GAAhB,CAAoB,QAApB;AACAtL,MAAEvH,MAAF,CAAS4S,SAAT,CAAmBC,GAAnB,CAAuB,SAAvB;AACAtL,MAAEmd,cAAF,GAJgB,CAII;AACpBnd,MAAEvH,MAAF,CAAS6vB,KAAT;AACD;;AAEDnhB,WAAS;AACP;AACA;AACA,QAAI,KAAKlF,KAAL,CAAWimB,cAAf,EAA+B;AAC7B,aAAO,IAAP;AACD;;AAED,QAAIK,YAAa;AAAA;AAAA,QAAG,MAAK,0CAAR,EAAmD,QAAO,QAA1D,EAAmE,KAAI,qBAAvE;AAA6F,iEAAC,2DAAD,IAAkB,IAAG,2BAArB;AAA7F,KAAjB;AACA,QAAIC,cAAe;AAAA;AAAA,QAAG,MAAK,4CAAR,EAAqD,QAAO,QAA5D,EAAqE,KAAI,qBAAzE;AAA+F,iEAAC,2DAAD,IAAkB,IAAG,yBAArB;AAA/F,KAAnB;AACA,WACE;AAAA;AAAA,QAAK,WAAY,mBAAkB,KAAKvmB,KAAL,CAAWkmB,IAAX,GAAkB,OAAlB,GAA4B,EAAG,EAAlE;AACE,0EAAK,WAAU,YAAf,GADF;AAEE;AAAA;AAAA,UAAK,WAAU,gBAAf;AACE;AAAA;AAAA,YAAK,WAAU,sBAAf;AACE;AAAA;AAAA,cAAK,WAAU,uBAAf;AACE;AAAA;AAAA,gBAAI,WAAU,gBAAd;AAA+B,yEAAC,2DAAD,IAAkB,IAAG,gBAArB;AAA/B,aADF;AAEE;AAAA;AAAA,gBAAG,WAAU,kBAAb;AAAgC,yEAAC,2DAAD,IAAkB,IAAG,kBAArB;AAAhC,aAFF;AAGE;AAAA;AAAA,gBAAG,WAAU,eAAb,EAA6B,MAAK,gDAAlC,EAAmF,QAAO,QAA1F,EAAmG,KAAI,qBAAvG;AAA6H,yEAAC,2DAAD,IAAkB,IAAG,0BAArB;AAA7H;AAHF,WADF;AAME;AAAA;AAAA,cAAK,WAAU,kBAAf;AACE;AAAA;AAAA,gBAAG,WAAU,aAAb;AAA2B,yEAAC,2DAAD,IAAkB,IAAG,sBAArB,GAA3B;AAAyE;AAAA;AAAA,kBAAM,WAAU,YAAhB;AAA6B,2EAAC,2DAAD,IAAkB,IAAG,0BAArB;AAA7B;AAAzE,aADF;AAEE;AAAA;AAAA,gBAAM,QAAO,KAAb,EAAmB,QAAO,8BAA1B,EAAyD,QAAO,QAAhE,EAAyE,KAAI,qBAA7E,EAAmG,UAAU,KAAKP,QAAlH;AACE,oFAAO,MAAK,SAAZ,EAAsB,MAAK,QAA3B,EAAoC,OAAM,MAA1C,GADF;AAEE,oFAAO,MAAK,QAAZ,EAAqB,MAAK,QAA1B,EAAmC,OAAM,OAAzC,GAFF;AAGE,oFAAO,MAAK,SAAZ,EAAsB,MAAK,QAA3B,EAAoC,OAAM,eAA1C,GAHF;AAIE,oFAAO,MAAK,YAAZ,EAAyB,MAAK,QAA9B,EAAuC,OAAM,0BAA7C,GAJF;AAKE,oFAAO,MAAK,YAAZ,EAAyB,MAAK,QAA9B,EAAuC,OAAM,iBAA7C,GALF;AAME,oFAAO,MAAK,cAAZ,EAA2B,MAAK,QAAhC,EAAyC,OAAM,UAA/C,GANF;AAOE;AAAA;AAAA,kBAAM,WAAU,OAAhB;AAAyB,qBAAK7hB,KAAL,CAAW2E,IAAX,CAAgBC,aAAhB,CAA8B,EAAC9O,IAAI,wBAAL,EAA9B;AAAzB,eAPF;AAQE,oFAAO,WAAU,aAAjB,EAA+B,MAAK,OAApC,EAA4C,MAAK,OAAjD,EAAyD,UAAS,MAAlE,EAAyE,WAAW,KAAKmsB,cAAzF,EAAyG,aAAa,KAAKjiB,KAAL,CAAW2E,IAAX,CAAgBC,aAAhB,CAA8B,EAAC9O,IAAI,kCAAL,EAA9B,CAAtH,EAA+L,UAAU,KAAK8rB,aAA9M,GARF;AASE;AAAA;AAAA,kBAAK,WAAU,aAAf;AACE,2EAAC,2DAAD;AACE,sBAAG,4BADL;AAEE,0BAAQ;AACNc,2BAAOF,SADD;AAENG,6BAASF;AAFH,mBAFV;AADF,eATF;AAiBE;AAAA;AAAA,kBAAQ,WAAU,iBAAlB,EAAoC,MAAK,QAAzC;AAAkD,2EAAC,2DAAD,IAAkB,IAAG,4BAArB;AAAlD;AAjBF,aAFF;AAqBE;AAAA;AAAA,gBAAQ,WAAU,aAAlB,EAAgC,UAAU,CAAC,CAAC,KAAKvmB,KAAL,CAAWgmB,UAAvD,EAAmE,SAAS,KAAKJ,SAAjF;AAA4F,yEAAC,2DAAD,IAAkB,IAAG,qBAArB;AAA5F;AArBF;AANF;AADF;AAFF,KADF;AAqCD;AA1GsD;;AA6GlD,MAAMc,iBAAiB,2DAAA3rB,GAAU,6DAAAwN,CAAWkd,eAAX,CAAV,CAAvB,C;;;;;;;;;;;AClHP;AACA;;AAEA,MAAMle,UAAU,SAAhB;AACA,MAAMC,0BAA0B,kBAAhC;;AAEO,MAAMmf,sBAAN,CAA6B;AAClC7tB,cAAYjF,KAAZ,EAAmB6B,UAAU,EAA7B,EAAiC;AAC/B,SAAKkxB,MAAL,GAAc/yB,KAAd;AACA;AACA,SAAKa,QAAL,GAAgBgB,QAAQhB,QAAR,IAAoBX,OAAOW,QAA3C;AACA,SAAKmyB,YAAL,GAAoBnxB,QAAQoxB,WAAR,IAAuB,kEAA3C;AACA,SAAKlf,mBAAL,GAA2B,KAAKA,mBAAL,CAAyB7K,IAAzB,CAA8B,IAA9B,CAA3B;AACD;;AAED;;;;;;AAMA9I,2BAAyB;AACvB,QAAI,KAAKS,QAAL,CAAciT,eAAd,KAAkCJ,OAAtC,EAA+C;AAC7C;AACA;AACA,WAAKwf,UAAL;AACD,KAJD,MAIO;AACL;AACA,WAAKryB,QAAL,CAAcoT,gBAAd,CAA+BN,uBAA/B,EAAwD,KAAKI,mBAA7D;AACD;AACF;;AAED;;;;;AAKAmf,eAAa;AACX,SAAKF,YAAL,CAAkBlJ,IAAlB,CAAuB,0BAAvB;;AAEA,QAAI;AACF,UAAIqJ,2BAA2B,KAAKH,YAAL,CAC5B9I,+BAD4B,CACI,0BADJ,CAA/B;;AAGA,WAAK6I,MAAL,CAAY1yB,QAAZ,CAAqB,iEAAAC,CAAGC,UAAH,CAAc;AACjCC,cAAM,8DAAAC,CAAGsR,sBADwB;AAEjC7O,cAAM,EAACiwB,wBAAD;AAF2B,OAAd,CAArB;AAID,KARD,CAQE,OAAO9f,EAAP,EAAW;AACX;AACA;AACD;AACF;;AAED;;;;AAIAU,wBAAsB;AACpB,QAAI,KAAKlT,QAAL,CAAciT,eAAd,KAAkCJ,OAAtC,EAA+C;AAC7C,WAAKwf,UAAL;AACA,WAAKryB,QAAL,CAAcmT,mBAAd,CAAkCL,uBAAlC,EAA2D,KAAKI,mBAAhE;AACD;AACF;AAzDiC,C;;;;;;;;;;ACNpC;;AAEA,MAAMqf,iBAAiB,GAAvB;;AAEA,MAAMC,oBAAoB,2BAA1B;AACA,MAAMC,eAAe,yBAArB;AACA,MAAMC,uBAAuB,kBAA7B;;AAEA;;;;;;;;;;;;;AAaA,MAAMC,aAAN,CAAoB;AAClB;;;;;;;;;AASAC,cAAYC,MAAZ,EAAoB;AAClB,SAAKC,OAAL,GAAeD,MAAf;AACA,SAAKE,MAAL,GAAc,CAAd;AACA,SAAKC,OAAL,GAAeH,OAAOtW,MAAtB;AACA,SAAK8N,OAAL,GAAe,EAAf;;AAEA,UAAM4I,SAAS,EAAf;;AAEA,SAAKC,MAAL;AACA,WAAO,KAAKH,MAAL,GAAc,KAAKC,OAA1B,EAAmC;AACjC,UAAI;AACF,aAAKG,QAAL;AACD,OAFD,CAEE,OAAO9pB,CAAP,EAAU;AACV,YAAIA,aAAa+pB,WAAjB,EAA8B;AAC5BH,iBAAO7tB,IAAP,CAAYiE,CAAZ;;AAEA,eAAKgqB,oBAAL;AACD,SAJD,MAIO;AACL,gBAAMhqB,CAAN;AACD;AACF;AACD,WAAK6pB,MAAL;AACD;;AAED,WAAO,CAAC,KAAK7I,OAAN,EAAe4I,MAAf,CAAP;AACD;;AAED;;;;;;AAMAE,aAAW;AACT;AACA;AACA,QAAI,KAAKJ,MAAL,KAAgB,CAAhB,IACA,KAAKD,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,MAAkC,IADtC,EAC4C;AAC1C,YAAM,KAAKhsB,KAAL,CAAY;uDAAZ,CAAN;AAED;;AAED,UAAMusB,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAX;;AAEA;AACA,QAAIO,OAAO,GAAP,IACDA,OAAO,GAAP,IACC,CAAC,GAAD,EAAM,GAAN,EAAW,IAAX,EAAiBnuB,QAAjB,CAA0B,KAAK2tB,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,CAA1B,CAFJ,EAE+D;AAC7D,WAAKQ,WAAL;AACA;AACD;;AAED,QAAID,OAAO,GAAX,EAAgB;AACd,WAAKE,WAAL;AACA;AACD;;AAED,SAAKC,UAAL;AACD;;AAED;;;;;AAKAD,gBAAc;AACZ,SAAKT,MAAL,IAAe,CAAf;AACA,QAAI,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,YAAM,KAAKhsB,KAAL,CAAW,iCAAX,CAAN;AACD;;AAED,SAAKgsB,MAAL,IAAe,CAAf;;AAEA,SAAKW,YAAL;AACA,SAAKC,cAAL;AACA,SAAKD,YAAL;;AAEA,QAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAA9B,IACA,KAAKD,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,MAAkC,GADtC,EAC2C;AACzC,YAAM,KAAKhsB,KAAL,CAAW,kCAAX,CAAN;AACD;;AAED,SAAKgsB,MAAL,IAAe,CAAf;AACD;;AAED;;;;;;AAMAU,eAAa;AACX,UAAMvuB,KAAK,KAAK0uB,kBAAL,EAAX;;AAEA,SAAKF,YAAL;;AAEA,QAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,WAAKA,MAAL;AACD;;AAED,SAAKW,YAAL;;AAEA,UAAMG,MAAM,KAAKC,UAAL,EAAZ;;AAEA,QAAI5uB,GAAGwY,UAAH,CAAc,GAAd,KAAsBmW,QAAQ,IAAlC,EAAwC;AACtC,YAAM,KAAK9sB,KAAL,CAAW,+BAAX,CAAN;AACD;;AAED,QAAIgtB,QAAQ,IAAZ;;AAEA,QAAI,KAAKjB,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,YAAMiB,YAAY,KAAKjB,MAAvB;AACA,WAAKW,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,aAAKA,MAAL,GAAciB,SAAd;AACAD,gBAAQ,KAAKE,aAAL,EAAR;AACD;AACF;;AAED,QAAIF,UAAU,IAAV,IAAkB,OAAOF,GAAP,KAAe,QAArC,EAA+C;AAC7C,WAAKxJ,OAAL,CAAanlB,EAAb,IAAmB2uB,GAAnB;AACD,KAFD,MAEO;AACL,UAAIA,QAAQ,IAAR,IAAgBE,UAAU,IAA9B,EAAoC;AAClC,cAAM,KAAKhtB,KAAL,CAAW,gDAAX,CAAN;AACD;;AAED,WAAKsjB,OAAL,CAAanlB,EAAb,IAAmB,EAAnB;;AAEA,UAAI2uB,QAAQ,IAAZ,EAAkB;AAChB,aAAKxJ,OAAL,CAAanlB,EAAb,EAAiB2uB,GAAjB,GAAuBA,GAAvB;AACD;;AAED,UAAIE,UAAU,IAAd,EAAoB;AAClB,aAAK1J,OAAL,CAAanlB,EAAb,EAAiB6uB,KAAjB,GAAyBA,KAAzB;AACD;AACF;AACF;;AAED;;;;;AAKAb,WAAS;AACP,QAAII,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAT;AACA,WAAOO,OAAO,GAAP,IAAcA,OAAO,IAArB,IAA6BA,OAAO,IAApC,IAA4CA,OAAO,IAA1D,EAAgE;AAC9DA,WAAK,KAAKR,OAAL,CAAa,EAAE,KAAKC,MAApB,CAAL;AACD;AACF;;AAED;;;;;AAKAW,iBAAe;AACb,QAAIJ,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAT;AACA,WAAOO,OAAO,GAAP,IAAcA,OAAO,IAA5B,EAAkC;AAChCA,WAAK,KAAKR,OAAL,CAAa,EAAE,KAAKC,MAApB,CAAL;AACD;AACF;;AAED;;;;;AAKAmB,mBAAiB;AACf,WAAO,IAAP,EAAa;AACX,YAAMC,MAAM,KAAKpB,MAAjB;;AAEA,WAAKW,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,IAAlC,EAAwC;AACtC,aAAKA,MAAL,IAAe,CAAf;AACD,OAFD,MAEO;AACL,aAAKA,MAAL,GAAcoB,GAAd;AACA;AACD;AACF;AACF;;AAED;;;;;;;;;AASAC,gBAAcC,KAAK5B,YAAnB,EAAiC;AAC/B4B,OAAGC,SAAH,GAAe,KAAKvB,MAApB;AACA,UAAM1rB,SAASgtB,GAAGE,IAAH,CAAQ,KAAKzB,OAAb,CAAf;;AAEA,QAAIzrB,WAAW,IAAf,EAAqB;AACnB,WAAK0rB,MAAL,IAAe,CAAf;AACA,YAAM,KAAKhsB,KAAL,CAAY,2BAA0BstB,GAAGG,QAAH,EAAc,GAApD,CAAN;AACD;;AAED,SAAKzB,MAAL,GAAcsB,GAAGC,SAAjB;AACA,WAAOjtB,OAAO,CAAP,CAAP;AACD;;AAED;;;;;;AAMAusB,uBAAqB;AACnB,WAAO,KAAKQ,aAAL,CAAmB5B,iBAAnB,CAAP;AACD;;AAED;;;;;;AAMAmB,mBAAiB;AACf,QAAI1wB,OAAO,EAAX;;AAEA,UAAMwxB,QAAQ,KAAK1B,MAAnB;AACA,QAAI2B,KAAK,KAAK5B,OAAL,CAAa6B,UAAb,CAAwB,KAAK5B,MAA7B,CAAT;;AAEA,QAAK2B,MAAM,EAAN,IAAYA,MAAM,GAAnB,IAA2B;AAC1BA,UAAM,EAAN,IAAYA,MAAM,EADnB,IAC0B;AAC1BA,WAAO,EAFP,IAEaA,OAAO,EAFxB,EAE4B;AAAE;AAC5BA,WAAK,KAAK5B,OAAL,CAAa6B,UAAb,CAAwB,EAAE,KAAK5B,MAA/B,CAAL;AACD,KAJD,MAIO;AACL,YAAM,KAAKhsB,KAAL,CAAW,8CAAX,CAAN;AACD;;AAED,WAAQ2tB,MAAM,EAAN,IAAYA,MAAM,GAAnB,IAA2B;AAC1BA,UAAM,EAAN,IAAYA,MAAM,EADnB,IAC0B;AACzBA,UAAM,EAAN,IAAYA,MAAM,EAFnB,IAE0B;AAC1BA,WAAO,EAHP,IAGaA,OAAO,EAHpB,IAG0BA,OAAO,EAHxC,EAG4C;AAAE;AAC5CA,WAAK,KAAK5B,OAAL,CAAa6B,UAAb,CAAwB,EAAE,KAAK5B,MAA/B,CAAL;AACD;;AAED;AACA;AACA;AACA;AACA,WAAO,KAAKD,OAAL,CAAa6B,UAAb,CAAwB,KAAK5B,MAAL,GAAc,CAAtC,MAA6C,EAApD,EAAwD;AACtD,WAAKA,MAAL;AACD;;AAED9vB,YAAQ,KAAK6vB,OAAL,CAAaxlB,KAAb,CAAmBmnB,KAAnB,EAA0B,KAAK1B,MAA/B,CAAR;;AAEA,WAAO,EAAEpzB,MAAM,SAAR,EAAmBsD,IAAnB,EAAP;AACD;;AAED;;;;;;AAMA2xB,cAAY;AACV,UAAMH,QAAQ,KAAK1B,MAAL,GAAc,CAA5B;;AAEA,WAAO,EAAE,KAAKA,MAAP,GAAgB,KAAKC,OAA5B,EAAqC;AACnC,YAAMM,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAX;;AAEA,UAAIO,OAAO,GAAX,EAAgB;AACd;AACD;;AAED,UAAIA,OAAO,IAAX,EAAiB;AACf,cAAM,KAAKvsB,KAAL,CAAW,gCAAX,CAAN;AACD;AACF;;AAED,WAAO,KAAK+rB,OAAL,CAAa+B,SAAb,CAAuBJ,KAAvB,EAA8B,KAAK1B,MAAL,EAA9B,CAAP;AACD;;AAED;;;;;;;;AAQAe,eAAa;AACX;AACA;AACA;AACA;AACA;AACA,UAAMW,QAAQ,KAAK1B,MAAnB;AACA,QAAI+B,MAAM,KAAKhC,OAAL,CAAavlB,OAAb,CAAqB,IAArB,EAA2B,KAAKwlB,MAAhC,CAAV;;AAEA,QAAI+B,QAAQ,CAAC,CAAb,EAAgB;AACdA,YAAM,KAAK9B,OAAX;AACD;;AAED,UAAM+B,mBAAmBN,UAAUK,GAAV,GACvB,KAAKhC,OAAL,CAAaxlB,KAAb,CAAmBmnB,KAAnB,EAA0BK,GAA1B,CADuB,GACU,IADnC;;AAGA,QAAIC,oBAAoBA,iBAAiB5vB,QAAjB,CAA0B,GAA1B,CAAxB,EAAwD;AACtD,aAAO,KAAK6vB,iBAAL,EAAP;AACD;;AAED,SAAKjC,MAAL,GAAc+B,MAAM,CAApB;;AAEA,SAAKZ,cAAL;;AAEA,QAAI,KAAKpB,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACA;AACA;AACA,aAAOgC,gBAAP;AACD;;AAED,UAAMf,YAAY,KAAKjB,MAAvB;;AAEA,SAAKW,YAAL;;AAEA,QAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACA;AACA,WAAKA,MAAL,GAAciB,SAAd;AACA,aAAOe,gBAAP;AACD;;AAED,QAAIA,gBAAJ,EAAsB;AACpB;AACA;AACA,WAAKhC,MAAL,GAAc0B,KAAd;AACD;;AAED,WAAO,KAAKO,iBAAL,EAAP;AACD;;AAED;;;;;;;;;AASA;AACAA,sBAAoB;AAClB,QAAIC,SAAS,EAAb;AACA,UAAMhnB,UAAU,EAAhB;AACA,QAAIinB,aAAa,CAAjB;;AAEA,QAAI5B,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAT;;AAEA,WAAO,KAAKA,MAAL,GAAc,KAAKC,OAA1B,EAAmC;AACjC;AACA;AACA,UAAIM,OAAO,IAAX,EAAiB;AACf,aAAKP,MAAL;;AAEA;AACA;AACA;AACA;AACA,cAAMoC,kBAAkB,KAAKpC,MAA7B;AACA,aAAKmB,cAAL;AACA,cAAMkB,gBAAgB,KAAKrC,MAA3B;;AAGA,YAAI,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACD;AACD,aAAKW,YAAL;;AAEA,YAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAA9B,IACA,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAD9B,IAEA,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAF9B,IAGA,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAHlC,EAGuC;AACrC,eAAKA,MAAL,GAAcqC,aAAd;AACA;AACD;;AAEDH,kBAAU,KAAKnC,OAAL,CAAa+B,SAAb,CAAuBM,eAAvB,EAAwCC,aAAxC,CAAV;;AAEA,YAAIH,OAAO1Y,MAAP,IAAiBtO,QAAQsO,MAA7B,EAAqC;AACnC0Y,oBAAU,IAAV;AACD;AACD3B,aAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAL;AACA;AACD,OAhCD,MAgCO,IAAIO,OAAO,IAAX,EAAiB;AACtB,cAAM+B,MAAM,KAAKvC,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,CAAZ;AACA,YAAIsC,QAAQ,GAAR,IAAeA,QAAQ,GAAvB,IAA8BA,QAAQ,IAA1C,EAAgD;AAC9C/B,eAAK+B,GAAL;AACA,eAAKtC,MAAL;AACD;AACF,OANM,MAMA,IAAIO,OAAO,GAAX,EAAgB;AACrB;AACA,YAAI2B,OAAO1Y,MAAX,EAAmB;AACjBtO,kBAAQ7I,IAAR,CAAa6vB,MAAb;AACD;AACD,YAAIC,aAAa3C,iBAAiB,CAAlC,EAAqC;AACnC,gBAAM,KAAKxrB,KAAL,CACH,2CAA0CwrB,cAAe,EADtD,CAAN;AAED;AACD0C,iBAAS,EAAT;AACAhnB,gBAAQ7I,IAAR,CAAa,KAAKkwB,YAAL,EAAb;;AAEA,aAAKvC,MAAL;;AAEAO,aAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAL;AACAmC;AACA;AACD;;AAED,UAAI5B,EAAJ,EAAQ;AACN2B,kBAAU3B,EAAV;AACD;AACD,WAAKP,MAAL;AACAO,WAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAL;AACD;;AAED,QAAI9kB,QAAQsO,MAAR,KAAmB,CAAvB,EAA0B;AACxB,aAAO0Y,OAAO1Y,MAAP,GAAgB0Y,MAAhB,GAAyB,IAAhC;AACD;;AAED,QAAIA,OAAO1Y,MAAX,EAAmB;AACjBtO,cAAQ7I,IAAR,CAAa6vB,MAAb;AACD;;AAED,WAAOhnB,OAAP;AACD;AACD;;AAEA;;;;;;;AAOAqnB,iBAAe;AACb,UAAMb,QAAQ,EAAE,KAAK1B,MAArB;;AAEA,SAAKG,MAAL;;AAEA,QAAI,KAAKJ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAA9B,IACA,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAA9B,IACA,KAAKD,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,MAAkC,GAFtC,EAE4C;AAC1C,YAAMwC,WAAW,KAAKC,WAAL,EAAjB;;AAEA,aAAO;AACL71B,cAAM,KADD;AAEL81B,aAAK,IAFA;AAGLC,cAAMH,SAAS,CAAT,CAHD;AAILI,aAAKJ,SAAS,CAAT;AAJA,OAAP;AAMD;;AAED;AACA,SAAKxC,MAAL,GAAc0B,KAAd;AACA,SAAKf,YAAL;;AAEA,UAAMkC,WAAW,KAAKC,qBAAL,EAAjB;;AAEA,SAAK3C,MAAL;;AAEA,UAAMI,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAX;;AAEA,QAAIO,OAAO,GAAX,EAAgB;AACd,UAAIsC,SAASj2B,IAAT,KAAkB,MAAlB,IAA4Bi2B,SAAS1wB,EAAT,CAAYjC,IAAZ,CAAiBya,UAAjB,CAA4B,GAA5B,CAAhC,EAAkE;AAChE,cAAM,KAAK3W,KAAL,CACJ,wDADI,CAAN;AAGD;;AAED,aAAO6uB,QAAP;AACD;;AAED,QAAItC,OAAO,GAAP,IAAc,KAAKR,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,MAAkC,GAApD,EAAyD;AACvD,YAAM,KAAKhsB,KAAL,CAAW,sBAAX,CAAN;AACD;;AAED,QAAI6uB,SAASj2B,IAAT,KAAkB,KAAtB,EAA6B;AAC3B,YAAM,KAAKoH,KAAL,CAAW,iDAAX,CAAN;AACD;;AAED,QAAI6uB,SAASj2B,IAAT,KAAkB,KAAtB,EAA6B;AAC3B,YAAM,KAAKoH,KAAL,CAAW,uCAAX,CAAN;AACD;;AAED,QAAI6uB,SAASj2B,IAAT,KAAkB,MAAlB,IAA4B,CAACi2B,SAAS1wB,EAAT,CAAYjC,IAAZ,CAAiBya,UAAjB,CAA4B,GAA5B,CAAjC,EAAmE;AACjE,YAAM,KAAK3W,KAAL,CACJ,4DADI,CAAN;AAGD;;AAGD,SAAKgsB,MAAL,IAAe,CAAf,CAzDa,CAyDK;;AAElB,SAAKW,YAAL;;AAEA,QAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,IAAlC,EAAwC;AACtC,YAAM,KAAKhsB,KAAL,CAAW,yCAAX,CAAN;AACD;;AAED,SAAKmsB,MAAL;;AAEA,UAAMqC,WAAW,KAAKC,WAAL,EAAjB;;AAEA,QAAID,SAAS,CAAT,EAAYhZ,MAAZ,KAAuB,CAA3B,EAA8B;AAC5B,YAAM,KAAKxV,KAAL,CAAW,4CAAX,CAAN;AACD;;AAED,WAAO;AACLpH,YAAM,KADD;AAEL81B,WAAKG,QAFA;AAGLF,YAAMH,SAAS,CAAT,CAHD;AAILI,WAAKJ,SAAS,CAAT;AAJA,KAAP;AAMD;;AAED;;;;;;AAMAM,0BAAwB;AACtB,UAAMC,UAAU,KAAKC,UAAL,EAAhB;;AAEA,QAAID,QAAQn2B,IAAR,KAAiB,KAArB,EAA4B;AAC1B,aAAOm2B,OAAP;AACD;;AAED,QAAI,KAAKhD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,WAAKA,MAAL;;AAEA,YAAM9vB,OAAO,KAAKmxB,aAAL,EAAb;AACA,WAAKrB,MAAL;AACA,aAAO;AACLpzB,cAAM,MADD;AAELuF,YAAI4wB,OAFC;AAGL7yB;AAHK,OAAP;AAKD;;AAED,QAAI,KAAK6vB,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,WAAKA,MAAL;;AAEA,YAAMvuB,MAAM,KAAKwxB,aAAL,EAAZ;AACA,WAAKjD,MAAL;AACA,aAAO;AACLpzB,cAAM,KADD;AAELuF,YAAI4wB,OAFC;AAGLtxB;AAHK,OAAP;AAKD;;AAED,QAAI,KAAKsuB,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,WAAKA,MAAL;AACA,YAAMkD,OAAO,KAAKC,WAAL,EAAb;;AAEA,UAAI,CAACxD,qBAAqByD,IAArB,CAA0BL,QAAQ7yB,IAAlC,CAAL,EAA8C;AAC5C,cAAM,KAAK8D,KAAL,CAAW,uCAAX,CAAN;AACD;;AAED,WAAKgsB,MAAL;;AAEA+C,cAAQn2B,IAAR,GAAe,KAAf;;AAEA,aAAO;AACLA,cAAM,MADD;AAELy2B,aAAKN,OAFA;AAGLG;AAHK,OAAP;AAKD;;AAED,WAAOH,OAAP;AACD;;AAED;;;;;;AAMAI,gBAAc;AACZ,UAAMD,OAAO,EAAb;;AAEA,WAAO,KAAKlD,MAAL,GAAc,KAAKC,OAA1B,EAAmC;AACjC,WAAKU,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,eAAOkD,IAAP;AACD;;AAED,YAAMR,MAAM,KAAKI,qBAAL,EAAZ;;AAEA;AACA;AACA,UAAIJ,IAAI91B,IAAJ,KAAa,KAAjB,EAAwB;AACtBs2B,aAAK7wB,IAAL,CAAUqwB,GAAV;AACD,OAFD,MAEO;AACL,aAAK/B,YAAL;;AAEA,YAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,eAAKA,MAAL;AACA,eAAKW,YAAL;;AAEA,gBAAMG,MAAM,KAAKgC,qBAAL,EAAZ;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAI,OAAOhC,GAAP,KAAe,QAAf,IACAwC,MAAMC,OAAN,CAAczC,GAAd,CADA,IAEAA,IAAIl0B,IAAJ,KAAa,KAFjB,EAEwB;AACtBs2B,iBAAK7wB,IAAL,CAAU;AACRzF,oBAAM,MADE;AAERsD,oBAAMwyB,IAAIxyB,IAFF;AAGR4wB;AAHQ,aAAV;AAKD,WARD,MAQO;AACL,iBAAKd,MAAL,GAAc,KAAKD,OAAL,CAAayD,WAAb,CAAyB,GAAzB,EAA8B,KAAKxD,MAAnC,IAA6C,CAA3D;AACA,kBAAM,KAAKhsB,KAAL,CACJ,oCADI,CAAN;AAED;AAEF,SAzBD,MAyBO;AACLkvB,eAAK7wB,IAAL,CAAUqwB,GAAV;AACD;AACF;;AAED,WAAK/B,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACD,OAFD,MAEO,IAAI,KAAKD,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AAC5C,aAAKA,MAAL;AACD,OAFM,MAEA;AACL,cAAM,KAAKhsB,KAAL,CAAW,qBAAX,CAAN;AACD;AACF;;AAED,WAAOkvB,IAAP;AACD;;AAED;;;;;;AAMAO,cAAY;AACV,QAAIC,MAAM,EAAV;AACA,QAAI/B,KAAK,KAAK5B,OAAL,CAAa6B,UAAb,CAAwB,KAAK5B,MAA7B,CAAT;;AAEA;AACA,QAAI2B,OAAO,EAAX,EAAe;AACb+B,aAAO,GAAP;AACA/B,WAAK,KAAK5B,OAAL,CAAa6B,UAAb,CAAwB,EAAE,KAAK5B,MAA/B,CAAL;AACD;;AAED;AACA,QAAI2B,KAAK,EAAL,IAAWA,KAAK,EAApB,EAAwB;AACtB,YAAM,KAAK3tB,KAAL,CAAY,oBAAmB0vB,GAAI,GAAnC,CAAN;AACD;;AAED;AACA,WAAO/B,MAAM,EAAN,IAAYA,MAAM,EAAzB,EAA6B;AAC3B+B,aAAO,KAAK3D,OAAL,CAAa,KAAKC,MAAL,EAAb,CAAP;AACA2B,WAAK,KAAK5B,OAAL,CAAa6B,UAAb,CAAwB,KAAK5B,MAA7B,CAAL;AACD;;AAED;AACA,QAAI2B,OAAO,EAAX,EAAe;AACb+B,aAAO,KAAK3D,OAAL,CAAa,KAAKC,MAAL,EAAb,CAAP;AACA2B,WAAK,KAAK5B,OAAL,CAAa6B,UAAb,CAAwB,KAAK5B,MAA7B,CAAL;;AAEA;AACA,UAAI2B,KAAK,EAAL,IAAWA,KAAK,EAApB,EAAwB;AACtB,cAAM,KAAK3tB,KAAL,CAAY,oBAAmB0vB,GAAI,GAAnC,CAAN;AACD;;AAED;AACA,aAAO/B,MAAM,EAAN,IAAYA,MAAM,EAAzB,EAA6B;AAC3B+B,eAAO,KAAK3D,OAAL,CAAa,KAAKC,MAAL,EAAb,CAAP;AACA2B,aAAK,KAAK5B,OAAL,CAAa6B,UAAb,CAAwB,KAAK5B,MAA7B,CAAL;AACD;AACF;;AAED,WAAO;AACLpzB,YAAM,KADD;AAELk0B,WAAK4C;AAFA,KAAP;AAID;;AAED;;;;;;AAMAxC,kBAAgB;AACd,UAAMF,QAAQ,EAAd;;AAEA,WAAO,KAAKhB,MAAL,GAAc,KAAKC,OAA1B,EAAmC;AACjC,UAAI,KAAKF,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACD;AACD,WAAKW,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC;AACD;AACD,WAAKA,MAAL;;AAEA,YAAMvuB,MAAM,KAAK4vB,aAAL,EAAZ;;AAEA,WAAKV,YAAL;;AAEA,UAAI,KAAKZ,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,cAAM,KAAKhsB,KAAL,CAAW,cAAX,CAAN;AACD;AACD,WAAKgsB,MAAL;;AAEA,WAAKW,YAAL;;AAEA,YAAMG,MAAM,KAAKC,UAAL,EAAZ;;AAEA,UAAID,QAAQ,IAAZ,EAAkB;AAChB,cAAM,KAAK9sB,KAAL,CAAW,oCAAX,CAAN;AACD;;AAED,UAAI,OAAO8sB,GAAP,KAAe,QAAnB,EAA6B;AAC3BE,cAAMvvB,GAAN,IAAaqvB,GAAb;AACD,OAFD,MAEO;AACLE,cAAMvvB,GAAN,IAAa;AACXqvB;AADW,SAAb;AAGD;;AAED,WAAKK,cAAL;AACD;;AAED,WAAOH,KAAP;AACD;;AAED;;;;;;AAMAyB,gBAAc;AACZ,UAAMD,WAAW,EAAjB;AACA,QAAIzV,QAAQ,CAAZ;AACA,QAAI4W,YAAJ;;AAEA,WAAO,KAAK3D,MAAL,GAAc,KAAKC,OAA1B,EAAmC;AACjC,YAAMM,KAAK,KAAKR,OAAL,CAAa,KAAKC,MAAlB,CAAX;;AAEA,UAAI,CAACO,OAAO,GAAP,IAAc,KAAKR,OAAL,CAAa,KAAKC,MAAL,GAAc,CAA3B,MAAkC,GAAjD,KACAO,OAAO,GADX,EACgB;AACd;AACD;AACD,UAAIA,OAAO,GAAX,EAAgB;AACd,aAAKP,MAAL;AACA2D,uBAAe5W,KAAf;AACD;;AAED,UAAI,KAAKgT,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,cAAM,KAAKhsB,KAAL,CAAW,cAAX,CAAN;AACD;;AAED,WAAKgsB,MAAL;;AAEA,YAAMvuB,MAAM,KAAKwxB,aAAL,EAAZ;;AAEA,WAAKtC,YAAL;;AAEA,YAAMG,MAAM,KAAKC,UAAL,EAAZ;;AAEA,UAAID,QAAQ,IAAZ,EAAkB;AAChB,cAAM,KAAK9sB,KAAL,CAAW,kCAAX,CAAN;AACD;;AAEDwuB,eAASzV,OAAT,IAAoB,EAACtb,GAAD,EAAMqvB,GAAN,EAApB;;AAEA,WAAKX,MAAL;AACD;;AAED,WAAO,CAACqC,QAAD,EAAWmB,YAAX,CAAP;AACD;;AAED;;;;;;AAMAV,kBAAgB;AACd;;AAEA,UAAMtB,KAAK,KAAK5B,OAAL,CAAa6B,UAAb,CAAwB,KAAK5B,MAA7B,CAAX;AACA,QAAI+C,OAAJ;;AAEA,QAAKpB,MAAM,EAAN,IAAYA,MAAM,EAAnB,IAA0BA,OAAO,EAArC,EAAyC;AACvCoB,gBAAU,KAAKU,SAAL,EAAV;AACD,KAFD,MAEO;AACLV,gBAAU,KAAKnC,cAAL,EAAV;AACD;;AAED,QAAI,KAAKb,OAAL,CAAa,KAAKC,MAAlB,MAA8B,GAAlC,EAAuC;AACrC,YAAM,KAAKhsB,KAAL,CAAW,cAAX,CAAN;AACD;;AAED,SAAKgsB,MAAL;AACA,WAAO+C,OAAP;AACD;;AAED;;;;;;AAMAC,eAAa;AACX,UAAMY,MAAM,KAAK7D,OAAL,CAAa6B,UAAb,CAAwB,KAAK5B,MAA7B,CAAZ;;AAEA,QAAI4D,QAAQ,EAAZ,EAAgB;AAAE;AAChB,WAAK5D,MAAL;AACA,aAAO;AACLpzB,cAAM,KADD;AAELsD,cAAM,KAAKmxB,aAAL;AAFD,OAAP;AAID;;AAED,UAAMwC,MAAMD,QAAQ,EAAR,CAAW;AACrB;AADU,MAER,KAAK7D,OAAL,CAAa6B,UAAb,CAAwB,KAAK5B,MAAL,GAAc,CAAtC;AACF;AAHU,MAIR4D,GAJJ;;AAMA,QAAKC,OAAO,EAAP,IAAaA,OAAO,GAArB,IAA6B;AAC5BA,WAAO,EAAP,IAAaA,OAAO,EADzB,EAC8B;AAAE;AAC9B,aAAO;AACLj3B,cAAM,KADD;AAELsD,cAAM,KAAK2wB,kBAAL;AAFD,OAAP;AAID;;AAED,QAAKgD,OAAO,EAAP,IAAaA,OAAO,EAAzB,EAA8B;AAAE;AAC9B,aAAO,KAAKJ,SAAL,EAAP;AACD;;AAED,QAAIG,QAAQ,EAAZ,EAAgB;AAAE;AAChB,aAAO,KAAK/B,SAAL,EAAP;AACD;;AAED,UAAM,KAAK7tB,KAAL,CAAW,kBAAX,CAAN;AACD;;AAED;;;;;AAKAwsB,gBAAc;AACZ;AACA;AACA,QAAIuB,MAAM,KAAKhC,OAAL,CAAavlB,OAAb,CAAqB,IAArB,EAA2B,KAAKwlB,MAAhC,CAAV;;AAEA,WAAO+B,QAAQ,CAAC,CAAT,KACH,KAAKhC,OAAL,CAAagC,MAAM,CAAnB,MAA0B,GAA1B,IAAiC,KAAKhC,OAAL,CAAagC,MAAM,CAAnB,MAA0B,GAA5D,IACC,KAAKhC,OAAL,CAAagC,MAAM,CAAnB,MAA0B,GAA1B,IACC,CAAC,GAAD,EAAM,GAAN,EAAW3vB,QAAX,CAAoB,KAAK2tB,OAAL,CAAagC,MAAM,CAAnB,CAApB,CAHE,CAAP,EAGmD;AACjD,WAAK/B,MAAL,GAAc+B,MAAM,CAApB;;AAEAA,YAAM,KAAKhC,OAAL,CAAavlB,OAAb,CAAqB,IAArB,EAA2B,KAAKwlB,MAAhC,CAAN;;AAEA,UAAI+B,QAAQ,CAAC,CAAb,EAAgB;AACd;AACD;AACF;;AAED,QAAIA,QAAQ,CAAC,CAAb,EAAgB;AACd,WAAK/B,MAAL,GAAc,KAAKC,OAAnB;AACD,KAFD,MAEO;AACL,WAAKD,MAAL,GAAc+B,MAAM,CAApB;AACD;AACF;;AAED;;;;;;;AAOA/tB,QAAMgH,OAAN,EAAe;AACb,WAAO,IAAIqlB,WAAJ,CAAgBrlB,OAAhB,CAAP;AACD;;AAED;;;;;;;AAOAslB,yBAAuB;AACrB,QAAIoB,QAAQ,KAAK1B,MAAjB;;AAEA,WAAO,IAAP,EAAa;AACX,UAAI0B,UAAU,CAAV,IAAe,KAAK3B,OAAL,CAAa2B,QAAQ,CAArB,MAA4B,IAA/C,EAAqD;AACnD,cAAMC,KAAK,KAAK5B,OAAL,CAAa6B,UAAb,CAAwBF,KAAxB,CAAX;;AAEA,YAAKC,MAAM,EAAN,IAAYA,MAAM,GAAnB,IAA2B;AAC1BA,cAAM,EAAN,IAAYA,MAAM,EADnB,IAC0B;AACzBA,eAAO,EAFR,IAEcA,OAAO,EAFzB,EAE6B;AAAE;AAC7B,eAAK3B,MAAL,GAAc0B,KAAd;AACA;AACD;AACF;;AAEDA,cAAQ,KAAK3B,OAAL,CAAavlB,OAAb,CAAqB,IAArB,EAA2BknB,KAA3B,CAAR;;AAEA,UAAIA,UAAU,CAAC,CAAf,EAAkB;AAChB,aAAK1B,MAAL,GAAc,KAAKC,OAAnB;AACA;AACD;AACDyB;AACD;AACF;AAn7BiB;;AAs7BpB;;;;;;;AAOe,SAASoC,KAAT,CAAehE,MAAf,EAAuB;AACpC,QAAMiE,SAAS,IAAInE,aAAJ,EAAf;AACA,SAAOmE,OAAOlE,WAAP,CAAmBC,MAAnB,CAAP;AACD,C;;ACr9BD;;AAEA;;;;;;;AAOO,MAAMkE,UAAN,CAAiB;;AAEtB;;;;;;;AAOA3yB,cAAYlB,KAAZ,EAAmB8zB,IAAnB,EAAyB;AACvB,SAAK9zB,KAAL,GAAaA,KAAb;AACA,SAAK8zB,IAAL,GAAYA,IAAZ;AACD;;AAED;;;;;AAKAC,YAAU;AACR,WAAO,KAAK/zB,KAAZ;AACD;;AAED;;;;;;;;;;AAUAsxB,aAAW;AACT,UAAM,IAAIpzB,KAAJ,CAAU,mDAAV,CAAN;AACD;AAnCqB;;AAsCjB,MAAM81B,UAAN,SAAyBH,UAAzB,CAAoC;AACzCvC,aAAW;AACT,WAAO,KAAKtxB,KAAL,IAAc,KAArB;AACD;AAHwC;;AAMpC,MAAMi0B,YAAN,SAA2BJ,UAA3B,CAAsC;AAC3C3yB,cAAYlB,KAAZ,EAAmB8zB,IAAnB,EAAyB;AACvB,UAAMI,WAAWl0B,KAAX,CAAN,EAAyB8zB,IAAzB;AACD;;AAEDxC,WAAS6C,GAAT,EAAc;AACZ,QAAI;AACF,YAAMC,KAAKD,IAAIE,kBAAJ,CACTC,KAAKC,YADI,EACU,KAAKT,IADf,CAAX;AAGA,aAAOM,GAAGI,MAAH,CAAU,KAAKx0B,KAAf,CAAP;AACD,KALD,CAKE,OAAOmG,CAAP,EAAU;AACV;AACA,aAAO,KAAKnG,KAAZ;AACD;AACF;;AAED;;;;;;;AAOAy0B,QAAMN,GAAN,EAAWO,KAAX,EAAkB;AAChB,QAAIA,iBAAiBT,YAArB,EAAmC;AACjC,aAAO,KAAKj0B,KAAL,KAAe00B,MAAM10B,KAA5B;AACD;AACD,WAAO,KAAP;AACD;AA7B0C;;AAgCtC,MAAM20B,cAAN,SAA6Bd,UAA7B,CAAwC;AAC7C3yB,cAAYlB,KAAZ,EAAmB8zB,IAAnB,EAAyB;AACvB,UAAM,IAAInuB,IAAJ,CAAS3F,KAAT,CAAN,EAAuB8zB,IAAvB;AACD;;AAEDxC,WAAS6C,GAAT,EAAc;AACZ,QAAI;AACF,YAAMS,MAAMT,IAAIE,kBAAJ,CACVC,KAAKO,cADK,EACW,KAAKf,IADhB,CAAZ;AAGA,aAAOc,IAAIJ,MAAJ,CAAW,KAAKx0B,KAAhB,CAAP;AACD,KALD,CAKE,OAAOmG,CAAP,EAAU;AACV;AACA,aAAO,KAAKnG,KAAZ;AACD;AACF;AAf4C;;AAkBxC,MAAM80B,YAAN,SAA2BjB,UAA3B,CAAsC;AAC3CvC,aAAW;AACT,WAAO,KAAKtxB,KAAZ;AACD;;AAED;;;;;;;AAOAy0B,QAAMN,GAAN,EAAWO,KAAX,EAAkB;AAChB,QAAIA,iBAAiBI,YAArB,EAAmC;AACjC,aAAO,KAAK90B,KAAL,KAAe00B,MAAM10B,KAA5B;AACD,KAFD,MAEO,IAAI,OAAO00B,KAAP,KAAiB,QAArB,EAA+B;AACpC,aAAO,KAAK10B,KAAL,KAAe00B,KAAtB;AACD,KAFM,MAEA,IAAIA,iBAAiBT,YAArB,EAAmC;AACxC,YAAMc,KAAKZ,IAAIE,kBAAJ,CACTC,KAAKU,WADI,EACSN,MAAMZ,IADf,CAAX;AAGA,aAAO,KAAK9zB,KAAL,KAAe+0B,GAAGE,MAAH,CAAUP,MAAM10B,KAAhB,CAAtB;AACD;AACD,WAAO,KAAP;AACD;AAxB0C,C;;ACvG7C;;;;;;;;;;;;;AAaA;;AAEA,6CAAe;AACb,YAAU,CAAC,CAACk1B,GAAD,CAAD,EAAQpB,IAAR,KACR,IAAI,YAAJ,CAAiBoB,IAAInB,OAAJ,EAAjB,EAAgCoB,MAAMD,IAAIpB,IAAV,EAAgBA,IAAhB,CAAhC,CAFW;AAGb,cAAY,CAAC,CAACoB,GAAD,CAAD,EAAQpB,IAAR,KACV,IAAI,cAAJ,CAAmBoB,IAAInB,OAAJ,EAAnB,EAAkCoB,MAAMD,IAAIpB,IAAV,EAAgBA,IAAhB,CAAlC;AAJW,CAAf;;AAOA,SAASqB,KAAT,CAAeC,OAAf,EAAwBtB,IAAxB,EAA8B;AAC5B,SAAOtsB,OAAOC,MAAP,CAAc,EAAd,EAAkB2tB,OAAlB,EAA2B5sB,OAAOsrB,IAAP,CAA3B,CAAP;AACD;;AAED,SAAStrB,MAAT,CAAgBsrB,IAAhB,EAAsB;AACpB,QAAMuB,YAAY,EAAlB;AACA,OAAK,MAAM,CAACt1B,IAAD,EAAOu1B,GAAP,CAAX,IAA0B9tB,OAAO2f,OAAP,CAAe2M,IAAf,CAA1B,EAAgD;AAC9CuB,cAAUt1B,IAAV,IAAkBu1B,IAAIvB,OAAJ,EAAlB;AACD;AACD,SAAOsB,SAAP;AACD,C;;AChCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA;AAEA;;AAEA;AACA,MAAME,uBAAuB,IAA7B;;AAEA;AACA,MAAMC,MAAM,QAAZ;AACA,MAAMC,MAAM,QAAZ;;AAGA;;;;;;;;;;;;;;AAcA,SAASC,aAAT,CAAuBC,GAAvB,EAA4BC,OAA5B,EAAqCnD,GAArC,EAA0C;AACxC,MAAImD,QAAQnD,GAAR,CAAJ,EAAkB;AAChB,WAAOmD,QAAQnD,GAAR,CAAP;AACD;;AAED,QAAM,EAAE1C,MAAF,KAAa4F,GAAnB;AACA5F,SAAO7tB,IAAP,CAAY,IAAI2zB,UAAJ,CAAe,YAAf,CAAZ;AACA,SAAO,IAAI,UAAJ,EAAP;AACD;;AAGD;;;;;;;;;;;;AAYA,SAASC,gBAAT,CAA0BH,GAA1B,EAA+B,EAAC51B,IAAD,EAA/B,EAAuC;AACrC,QAAM,EAAEo0B,GAAF,EAAOpE,MAAP,KAAkB4F,GAAxB;AACA,QAAM9qB,UAAU9K,KAAKya,UAAL,CAAgB,GAAhB,IACZ2Z,IAAI4B,MAAJ,CAAWj0B,GAAX,CAAe/B,IAAf,CADY,GAEZo0B,IAAI6B,SAAJ,CAAcl0B,GAAd,CAAkB/B,IAAlB,CAFJ;;AAIA,MAAI,CAAC8K,OAAL,EAAc;AACZ,UAAMtG,MAAMxE,KAAKya,UAAL,CAAgB,GAAhB,IACR,IAAIyb,cAAJ,CAAoB,iBAAgBl2B,IAAK,EAAzC,CADQ,GAER,IAAIk2B,cAAJ,CAAoB,oBAAmBl2B,IAAK,EAA5C,CAFJ;AAGAgwB,WAAO7tB,IAAP,CAAYqC,GAAZ;AACA,WAAO,IAAI,UAAJ,CAAexE,IAAf,CAAP;AACD;;AAED,SAAO8K,OAAP;AACD;;AAED;;;;;;;;;;;;;;;;AAgBA,SAASqrB,iBAAT,CAA2BP,GAA3B,EAAgC,EAAC3zB,EAAD,EAAKV,GAAL,EAAhC,EAA2C;AACzC,QAAMuJ,UAAUirB,iBAAiBH,GAAjB,EAAsB3zB,EAAtB,CAAhB;AACA,MAAI6I,mBAAmB,UAAvB,EAAmC;AACjC,WAAOA,OAAP;AACD;;AAED,QAAM,EAAEspB,GAAF,EAAOpE,MAAP,KAAkB4F,GAAxB;AACA,QAAMQ,UAAUC,KAAKT,GAAL,EAAUr0B,GAAV,CAAhB;;AAEA,WAAS+0B,aAAT,CAAuBvT,IAAvB,EAA6B;AAC3B,WAAOqQ,MAAMC,OAAN,CAActQ,IAAd,KACLA,KAAK,CAAL,EAAQrmB,IAAR,KAAiB,KADZ,IAELqmB,KAAK,CAAL,EAAQyP,GAAR,KAAgB,IAFlB;AAGD;;AAED,MAAI8D,cAAcxrB,QAAQ8lB,GAAtB,CAAJ,EAAgC;AAC9B;AACA,SAAK,MAAM2F,OAAX,IAAsBzrB,QAAQ8lB,GAAR,CAAY,CAAZ,EAAe6B,IAArC,EAA2C;AACzC,YAAM+D,aAAaH,KAAKT,GAAL,EAAUW,QAAQh1B,GAAlB,CAAnB;AACA,UAAI60B,QAAQ1B,KAAR,CAAcN,GAAd,EAAmBoC,UAAnB,CAAJ,EAAoC;AAClC,eAAOD,OAAP;AACD;AACF;AACF;;AAEDvG,SAAO7tB,IAAP,CAAY,IAAI+zB,cAAJ,CAAoB,oBAAmBE,QAAQ7E,QAAR,CAAiB6C,GAAjB,CAAsB,EAA7D,CAAZ;AACA,SAAOiC,KAAKT,GAAL,EAAU9qB,OAAV,CAAP;AACD;;AAGD;;;;;;;;;;;;;;AAcA,SAAS2rB,mBAAT,CAA6Bb,GAA7B,EAAkC,EAAC3zB,EAAD,EAAKjC,IAAL,EAAlC,EAA8C;AAC5C,QAAM8K,UAAUirB,iBAAiBH,GAAjB,EAAsB3zB,EAAtB,CAAhB;AACA,MAAI6I,mBAAmB,UAAvB,EAAmC;AACjC,WAAOA,OAAP;AACD;;AAED,MAAIA,QAAQgmB,KAAZ,EAAmB;AACjB;AACA,SAAK,MAAM4F,QAAX,IAAuB5rB,QAAQgmB,KAA/B,EAAsC;AACpC,UAAI9wB,SAAS02B,QAAb,EAAuB;AACrB,eAAO5rB,QAAQgmB,KAAR,CAAc9wB,IAAd,CAAP;AACD;AACF;AACF;;AAED,QAAM,EAAEgwB,MAAF,KAAa4F,GAAnB;AACA5F,SAAO7tB,IAAP,CAAY,IAAI+zB,cAAJ,CAAoB,sBAAqBl2B,IAAK,EAA9C,CAAZ;AACA,SAAOq2B,KAAKT,GAAL,EAAU9qB,OAAV,CAAP;AACD;;AAED;;;;;;;;;;;;;;;;AAgBA,SAAS6rB,gBAAT,CAA0Bf,GAA1B,EAA+B,EAACpD,GAAD,EAAMC,IAAN,EAAYC,GAAZ,EAA/B,EAAiD;AAC/C,MAAIF,QAAQ,IAAZ,EAAkB;AAChB,WAAOmD,cAAcC,GAAd,EAAmBnD,IAAnB,EAAyBC,GAAzB,CAAP;AACD;;AAED,QAAMC,WAAW0D,KAAKT,GAAL,EAAUpD,GAAV,CAAjB;AACA,MAAIG,oBAAoB,UAAxB,EAAoC;AAClC,WAAOgD,cAAcC,GAAd,EAAmBnD,IAAnB,EAAyBC,GAAzB,CAAP;AACD;;AAED;AACA,OAAK,MAAM6D,OAAX,IAAsB9D,IAAtB,EAA4B;AAC1B,UAAMlxB,MAAM80B,KAAKT,GAAL,EAAUW,QAAQh1B,GAAlB,CAAZ;AACA,UAAMq1B,cACJr1B,eAAe,YAAf,IAA+BA,eAAe,YADhD;;AAGA,QAAI,CAACq1B,WAAL,EAAkB;AAChB;AACD;;AAED,UAAM,EAAExC,GAAF,KAAUwB,GAAhB;;AAEA,QAAIr0B,IAAImzB,KAAJ,CAAUN,GAAV,EAAezB,QAAf,CAAJ,EAA8B;AAC5B,aAAO4D,OAAP;AACD;AACF;;AAED,SAAOZ,cAAcC,GAAd,EAAmBnD,IAAnB,EAAyBC,GAAzB,CAAP;AACD;;AAGD;;;;;;;;;;;;;;AAcA,SAAS2D,IAAT,CAAcT,GAAd,EAAmBiB,IAAnB,EAAyB;AACvB;AACA;AACA,MAAI,OAAOA,IAAP,KAAgB,QAAhB,IAA4BA,gBAAgB,UAAhD,EAA4D;AAC1D,WAAOA,IAAP;AACD;;AAED;AACA;AACA,MAAIzD,MAAMC,OAAN,CAAcwD,IAAd,CAAJ,EAAyB;AACvB,WAAOC,QAAQlB,GAAR,EAAaiB,IAAb,CAAP;AACD;;AAGD,UAAQA,KAAKn6B,IAAb;AACE,SAAK,SAAL;AACE,aAAO,IAAI,YAAJ,CAAiBm6B,KAAK72B,IAAtB,CAAP;AACF,SAAK,KAAL;AACE,aAAO,IAAI,YAAJ,CAAiB62B,KAAKjG,GAAtB,CAAP;AACF,SAAK,KAAL;AACE,aAAOmG,iBAAiBnB,GAAjB,EAAsBiB,IAAtB,CAAP;AACF,SAAK,KAAL;AACE,aAAOG,kBAAkBpB,GAAlB,EAAuBiB,IAAvB,CAAP;AACF,SAAK,MAAL;AACE,aAAOI,eAAerB,GAAf,EAAoBiB,IAApB,CAAP;AACF,SAAK,KAAL;AAAY;AACV,cAAM/rB,UAAUirB,iBAAiBH,GAAjB,EAAsBiB,IAAtB,CAAhB;AACA,eAAOR,KAAKT,GAAL,EAAU9qB,OAAV,CAAP;AACD;AACD,SAAK,MAAL;AAAa;AACX,cAAMosB,OAAOT,oBAAoBb,GAApB,EAAyBiB,IAAzB,CAAb;AACA,eAAOR,KAAKT,GAAL,EAAUsB,IAAV,CAAP;AACD;AACD,SAAK,KAAL;AAAY;AACV,cAAMX,UAAUJ,kBAAkBP,GAAlB,EAAuBiB,IAAvB,CAAhB;AACA,eAAOR,KAAKT,GAAL,EAAUW,OAAV,CAAP;AACD;AACD,SAAK,KAAL;AAAY;AACV,cAAMY,SAASR,iBAAiBf,GAAjB,EAAsBiB,IAAtB,CAAf;AACA,eAAOR,KAAKT,GAAL,EAAUuB,MAAV,CAAP;AACD;AACD,SAAKnU,SAAL;AAAgB;AACd;AACA,YAAI6T,KAAKjG,GAAL,KAAa,IAAb,IAAqBiG,KAAKjG,GAAL,KAAa5N,SAAtC,EAAiD;AAC/C,iBAAOqT,KAAKT,GAAL,EAAUiB,KAAKjG,GAAf,CAAP;AACD;;AAED,cAAM,EAAEZ,MAAF,KAAa4F,GAAnB;AACA5F,eAAO7tB,IAAP,CAAY,IAAI2zB,UAAJ,CAAe,UAAf,CAAZ;AACA,eAAO,IAAI,UAAJ,EAAP;AACD;AACD;AACE,aAAO,IAAI,UAAJ,EAAP;AAtCJ;AAwCD;;AAED;;;;;;;;;;;;AAYA,SAASiB,gBAAT,CAA0BnB,GAA1B,EAA+B,EAAC51B,IAAD,EAA/B,EAAuC;AACrC,QAAM,EAAEgzB,IAAF,EAAQhD,MAAR,KAAmB4F,GAAzB;;AAEA,MAAI,CAAC5C,IAAD,IAAS,CAACA,KAAKoE,cAAL,CAAoBp3B,IAApB,CAAd,EAAyC;AACvCgwB,WAAO7tB,IAAP,CAAY,IAAI+zB,cAAJ,CAAoB,qBAAoBl2B,IAAK,EAA7C,CAAZ;AACA,WAAO,IAAI,UAAJ,CAAeA,IAAf,CAAP;AACD;;AAED,QAAMm1B,MAAMnC,KAAKhzB,IAAL,CAAZ;;AAEA;AACA,MAAIm1B,eAAe,UAAnB,EAA+B;AAC7B,WAAOA,GAAP;AACD;;AAED;AACA,UAAQ,OAAOA,GAAf;AACE,SAAK,QAAL;AACE,aAAOA,GAAP;AACF,SAAK,QAAL;AACE,aAAO,IAAI,YAAJ,CAAiBA,GAAjB,CAAP;AACF,SAAK,QAAL;AACE,UAAIA,eAAevvB,IAAnB,EAAyB;AACvB,eAAO,IAAI,cAAJ,CAAmBuvB,GAAnB,CAAP;AACD;AACH;AACEnF,aAAO7tB,IAAP,CACE,IAAIk1B,SAAJ,CAAe,8BAA6Br3B,IAAK,KAAI,OAAOm1B,GAAI,EAAhE,CADF;AAGA,aAAO,IAAI,UAAJ,CAAen1B,IAAf,CAAP;AAbJ;AAeD;;AAED;;;;;;;;;;;;AAYA,SAASg3B,iBAAT,CAA2BpB,GAA3B,EAAgC,EAAC51B,IAAD,EAAhC,EAAwC;AACtC;AACA;AACA,QAAM,EAAEo0B,KAAK,EAAEkD,UAAF,EAAP,EAAuBtH,MAAvB,KAAkC4F,GAAxC;AACA,QAAM2B,OAAOD,WAAWt3B,IAAX,KAAoB,QAAAw3B,CAASx3B,IAAT,CAAjC;;AAEA,MAAI,CAACu3B,IAAL,EAAW;AACTvH,WAAO7tB,IAAP,CAAY,IAAI+zB,cAAJ,CAAoB,qBAAoBl2B,IAAK,IAA7C,CAAZ;AACA,WAAO,IAAI,UAAJ,CAAgB,GAAEA,IAAK,IAAvB,CAAP;AACD;;AAED,MAAI,OAAOu3B,IAAP,KAAgB,UAApB,EAAgC;AAC9BvH,WAAO7tB,IAAP,CAAY,IAAIk1B,SAAJ,CAAe,YAAWr3B,IAAK,oBAA/B,CAAZ;AACA,WAAO,IAAI,UAAJ,CAAgB,GAAEA,IAAK,IAAvB,CAAP;AACD;;AAED,SAAOu3B,IAAP;AACD;;AAED;;;;;;;;;;;;;;AAcA,SAASN,cAAT,CAAwBrB,GAAxB,EAA6B,EAACzC,GAAD,EAAMH,IAAN,EAA7B,EAA0C;AACxC,QAAMyE,SAAST,kBAAkBpB,GAAlB,EAAuBzC,GAAvB,CAAf;;AAEA,MAAIsE,kBAAkB,UAAtB,EAAkC;AAChC,WAAOA,MAAP;AACD;;AAED,QAAMC,UAAU,EAAhB;AACA,QAAMC,UAAU,EAAhB;;AAEA,OAAK,MAAMxC,GAAX,IAAkBnC,IAAlB,EAAwB;AACtB,QAAImC,IAAIz4B,IAAJ,KAAa,MAAjB,EAAyB;AACvBi7B,cAAQxC,IAAIn1B,IAAZ,IAAoBq2B,KAAKT,GAAL,EAAUT,IAAIvE,GAAd,CAApB;AACD,KAFD,MAEO;AACL8G,cAAQv1B,IAAR,CAAak0B,KAAKT,GAAL,EAAUT,GAAV,CAAb;AACD;AACF;;AAED,MAAI;AACF,WAAOsC,OAAOC,OAAP,EAAgBC,OAAhB,CAAP;AACD,GAFD,CAEE,OAAOvxB,CAAP,EAAU;AACV;AACA,WAAO,IAAI,UAAJ,EAAP;AACD;AACF;;AAED;;;;;;;;;;AAUA,SAAS0wB,OAAT,CAAiBlB,GAAjB,EAAsBgC,GAAtB,EAA2B;AACzB,QAAM,EAAExD,GAAF,EAAOyD,KAAP,EAAc7H,MAAd,KAAyB4F,GAA/B;;AAEA,MAAIiC,MAAMC,GAAN,CAAUF,GAAV,CAAJ,EAAoB;AAClB5H,WAAO7tB,IAAP,CAAY,IAAI2zB,UAAJ,CAAe,kBAAf,CAAZ;AACA,WAAO,IAAI,UAAJ,EAAP;AACD;;AAED;AACA+B,QAAMnmB,GAAN,CAAUkmB,GAAV;AACA,QAAMxzB,SAAS,EAAf;;AAEA;AACA;AACA,QAAM2zB,eAAe3D,IAAI4D,aAAJ,IAAqBJ,IAAIte,MAAJ,GAAa,CAAvD;;AAEA,OAAK,MAAM2e,IAAX,IAAmBL,GAAnB,EAAwB;AACtB,QAAI,OAAOK,IAAP,KAAgB,QAApB,EAA8B;AAC5B7zB,aAAOjC,IAAP,CAAY81B,IAAZ;AACA;AACD;;AAED,UAAMC,OAAO7B,KAAKT,GAAL,EAAUqC,IAAV,EAAgB1G,QAAhB,CAAyB6C,GAAzB,CAAb;;AAEA,QAAI2D,YAAJ,EAAkB;AAChB3zB,aAAOjC,IAAP,CAAYszB,GAAZ;AACD;;AAED,QAAIyC,KAAK5e,MAAL,GAAckc,oBAAlB,EAAwC;AACtCxF,aAAO7tB,IAAP,CACE,IAAI2zB,UAAJ,CACE,sCACC,IAAGoC,KAAK5e,MAAO,oBAAmBkc,oBAAqB,GAF1D,CADF;AAMApxB,aAAOjC,IAAP,CAAY+1B,KAAK7tB,KAAL,CAAWmrB,oBAAX,CAAZ;AACD,KARD,MAQO;AACLpxB,aAAOjC,IAAP,CAAY+1B,IAAZ;AACD;;AAED,QAAIH,YAAJ,EAAkB;AAChB3zB,aAAOjC,IAAP,CAAYuzB,GAAZ;AACD;AACF;;AAEDmC,QAAMl2B,MAAN,CAAai2B,GAAb;AACA,SAAOxzB,OAAO6N,IAAP,CAAY,EAAZ,CAAP;AACD;;AAED;;;;;;;;;;;;;;;AAee,SAAStP,OAAT,CAAiByxB,GAAjB,EAAsBpB,IAAtB,EAA4BloB,OAA5B,EAAqCklB,SAAS,EAA9C,EAAkD;AAC/D,QAAM4F,MAAM;AACVxB,OADU,EACLpB,IADK,EACChD,MADD,EACS6H,OAAO,IAAIM,OAAJ;AADhB,GAAZ;AAGA,SAAO9B,KAAKT,GAAL,EAAU9qB,OAAV,EAAmBymB,QAAnB,CAA4B6C,GAA5B,CAAP;AACD,C;;AC3fD;AACA;;AAEA;;;;;;;;;;;;;AAaO,MAAM,sBAAN,CAAqB;;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BAjzB,cAAYi3B,OAAZ,EAAqB,EAAEC,YAAY,EAAd,EAAkBN,eAAe,IAAjC,KAA0C,EAA/D,EAAmE;AACjE,SAAKK,OAAL,GAAehF,MAAMC,OAAN,CAAc+E,OAAd,IAAyBA,OAAzB,GAAmC,CAACA,OAAD,CAAlD;;AAEA,SAAKpC,MAAL,GAAc,IAAI90B,GAAJ,EAAd;AACA,SAAK+0B,SAAL,GAAiB,IAAI/0B,GAAJ,EAAjB;AACA,SAAKo2B,UAAL,GAAkBe,SAAlB;AACA,SAAKL,aAAL,GAAqBD,YAArB;AACA,SAAKO,MAAL,GAAc,IAAIC,OAAJ,EAAd;AACD;;AAED;;;;;AAKA,MAAInlB,QAAJ,GAAe;AACb,WAAO,KAAK6iB,SAAL,CAAeuC,OAAOC,QAAtB,GAAP;AACD;;AAED;;;;;;AAMAC,aAAWz2B,EAAX,EAAe;AACb,WAAO,KAAKg0B,SAAL,CAAe6B,GAAf,CAAmB71B,EAAnB,CAAP;AACD;;AAED;;;;;;;;;AASAuuB,aAAWvuB,EAAX,EAAe;AACb,WAAO,KAAKg0B,SAAL,CAAel0B,GAAf,CAAmBE,EAAnB,CAAP;AACD;;AAED;;;;;;;;;;;;;;;;;;AAkBAiJ,cAAY9K,MAAZ,EAAoB;AAClB,UAAM,CAACgnB,OAAD,EAAU4I,MAAV,IAAoB,KAAA4D,CAAMxzB,MAAN,CAA1B;AACA,SAAK,MAAM6B,EAAX,IAAiBmlB,OAAjB,EAA0B;AACxB,UAAInlB,GAAGwY,UAAH,CAAc,GAAd,CAAJ,EAAwB;AACtB;AACA;AACA,YAAI,KAAKub,MAAL,CAAY8B,GAAZ,CAAgB71B,EAAhB,CAAJ,EAAyB;AACvB+tB,iBAAO7tB,IAAP,CAAa,0CAAyCF,EAAG,GAAzD;AACA;AACD;AACD,aAAK+zB,MAAL,CAAY10B,GAAZ,CAAgBW,EAAhB,EAAoBmlB,QAAQnlB,EAAR,CAApB;AACD,OARD,MAQO;AACL,YAAI,KAAKg0B,SAAL,CAAe6B,GAAf,CAAmB71B,EAAnB,CAAJ,EAA4B;AAC1B+tB,iBAAO7tB,IAAP,CAAa,6CAA4CF,EAAG,GAA5D;AACA;AACD;AACD,aAAKg0B,SAAL,CAAe30B,GAAf,CAAmBW,EAAnB,EAAuBmlB,QAAQnlB,EAAR,CAAvB;AACD;AACF;;AAED,WAAO+tB,MAAP;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BAyE,SAAO3pB,OAAP,EAAgBkoB,IAAhB,EAAsBhD,MAAtB,EAA8B;AAC5B;AACA,QAAI,OAAOllB,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,aAAOA,OAAP;AACD;;AAED;AACA,QAAI,OAAOA,QAAQ8lB,GAAf,KAAuB,QAA3B,EAAqC;AACnC,aAAO9lB,QAAQ8lB,GAAf;AACD;;AAED;AACA,QAAI9lB,QAAQ8lB,GAAR,KAAgB5N,SAApB,EAA+B;AAC7B,aAAO,IAAP;AACD;;AAED,WAAO,OAAArgB,CAAQ,IAAR,EAAcqwB,IAAd,EAAoBloB,OAApB,EAA6BklB,MAA7B,CAAP;AACD;;AAEDsE,qBAAmBqE,IAAnB,EAAyB5E,IAAzB,EAA+B;AAC7B,UAAM6E,QAAQ,KAAKN,MAAL,CAAYv2B,GAAZ,CAAgB42B,IAAhB,KAAyB,EAAvC;AACA,UAAM12B,KAAKwN,KAAKC,SAAL,CAAeqkB,IAAf,CAAX;;AAEA,QAAI,CAAC6E,MAAM32B,EAAN,CAAL,EAAgB;AACd22B,YAAM32B,EAAN,IAAY,IAAI02B,IAAJ,CAAS,KAAKP,OAAd,EAAuBrE,IAAvB,CAAZ;AACA,WAAKuE,MAAL,CAAYh3B,GAAZ,CAAgBq3B,IAAhB,EAAsBC,KAAtB;AACD;;AAED,WAAOA,MAAM32B,EAAN,CAAP;AACD;AA/KyB,C;;;;AChB5B;;;;;;AAMe,MAAM42B,cAAN,CAAqB;AAClC;;;;;;AAMA13B,cAAY23B,QAAZ,EAAsB;AACpB,QAAIN,OAAOO,aAAP,IAAwBtxB,OAAOqxB,QAAP,CAA5B,EAA8C;AAC5C,WAAKL,QAAL,GAAgBK,SAASN,OAAOO,aAAhB,GAAhB;AACD,KAFD,MAEO,IAAIP,OAAOC,QAAP,IAAmBhxB,OAAOqxB,QAAP,CAAvB,EAAyC;AAC9C,WAAKL,QAAL,GAAgBK,SAASN,OAAOC,QAAhB,GAAhB;AACD,KAFM,MAEA;AACL,YAAM,IAAIpB,SAAJ,CAAc,iDAAd,CAAN;AACD;;AAED,SAAK2B,IAAL,GAAY,EAAZ;AACD;;AAED,GAACR,OAAOC,QAAR,IAAoB;AAClB,UAAM,EAAEO,IAAF,EAAQP,QAAR,KAAqB,IAA3B;AACA,QAAIQ,MAAM,CAAV;;AAEA,WAAO;AACL1qB,aAAO;AACL,YAAIyqB,KAAK1f,MAAL,IAAe2f,GAAnB,EAAwB;AACtBD,eAAK72B,IAAL,CAAUs2B,SAASlqB,IAAT,EAAV;AACD;AACD,eAAOyqB,KAAKC,KAAL,CAAP;AACD;AANI,KAAP;AAQD;;AAED,GAACT,OAAOO,aAAR,IAAyB;AACvB,UAAM,EAAEC,IAAF,EAAQP,QAAR,KAAqB,IAA3B;AACA,QAAIQ,MAAM,CAAV;;AAEA,WAAO;AACC1qB,UAAN,GAAa;AAAA;AACX,cAAIyqB,KAAK1f,MAAL,IAAe2f,GAAnB,EAAwB;AACtBD,iBAAK72B,IAAL,EAAU,MAAMs2B,SAASlqB,IAAT,EAAhB;AACD;AACD,iBAAOyqB,KAAKC,KAAL,CAAP;AAJW;AAKZ;AANI,KAAP;AAQD;;AAED;;;;AAIAC,cAAY;AACV,UAAM,EAAEF,IAAF,EAAQP,QAAR,KAAqB,IAA3B;AACA,QAAIO,KAAK1f,MAAL,KAAgB,CAAhB,IAAqB0f,KAAKA,KAAK1f,MAAL,GAAc,CAAnB,EAAsB6f,IAAtB,KAA+B,KAAxD,EAA+D;AAC7DH,WAAK72B,IAAL,CAAUs2B,SAASlqB,IAAT,EAAV;AACD;AACF;AAxDiC,C;;;;;;ACNpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA;;;;;;;;AAQO,SAAS6qB,cAAT,CAAwBN,QAAxB,EAAkCO,GAAlC,EAAuC;AAC5C,MAAI,CAACjG,MAAMC,OAAN,CAAcgG,GAAd,CAAL,EAAyB;AACvB,WAAOC,gBAAgBR,QAAhB,EAA0BO,GAA1B,CAAP;AACD;;AAED,SAAOA,IAAItlB,GAAJ,CACL9R,MAAMq3B,gBAAgBR,QAAhB,EAA0B72B,EAA1B,CADD,CAAP;AAGD;;AAED;;;AAGA,SAASq3B,eAAT,CAAyBR,QAAzB,EAAmC72B,EAAnC,EAAuC;AACrC,OAAK,MAAMs3B,OAAX,IAAsBT,QAAtB,EAAgC;AAC9B,QAAIS,QAAQb,UAAR,CAAmBz2B,EAAnB,CAAJ,EAA4B;AAC1B,aAAOs3B,OAAP;AACD;AACF;;AAED,SAAO,IAAP;AACD;;AAED;;;;;;;;AAQA;AAAA,uCAAO,WAA+BT,QAA/B,EAAyCO,GAAzC,EAA8C;AACnD,QAAI,CAACjG,MAAMC,OAAN,CAAcgG,GAAd,CAAL,EAAyB;AAAA;AAAA;AAAA;;AAAA;AACvB,4CAA4BP,QAA5B,oLAAsC;AAAA,gBAArBS,OAAqB;;AACpC,cAAIA,QAAQb,UAAR,CAAmBW,GAAnB,CAAJ,EAA6B;AAC3B,mBAAOE,OAAP;AACD;AACF;AALsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMxB;;AAED,QAAIC,iBAAiBH,IAAI/f,MAAzB;AACA,UAAMmgB,gBAAgB,IAAIrG,KAAJ,CAAUoG,cAAV,EAA0BE,IAA1B,CAA+B,IAA/B,CAAtB;;AAVmD;AAAA;AAAA;;AAAA;AAYnD,2CAA4BZ,QAA5B,8LAAsC;AAAA,cAArBS,OAAqB;;AACpC;AACA;AACA,aAAK,IAAI1c,QAAQ,CAAjB,EAAoBA,QAAQwc,IAAI/f,MAAhC,EAAwCuD,OAAxC,EAAiD;AAC/C,gBAAM5a,KAAKo3B,IAAIxc,KAAJ,CAAX;AACA,cAAI,CAAC4c,cAAc5c,KAAd,CAAD,IAAyB0c,QAAQb,UAAR,CAAmBz2B,EAAnB,CAA7B,EAAqD;AACnDw3B,0BAAc5c,KAAd,IAAuB0c,OAAvB;AACAC;AACD;;AAED;AACA,cAAIA,mBAAmB,CAAvB,EAA0B;AACxB,mBAAOC,aAAP;AACD;AACF;AACF;AA3BkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AA6BnD,WAAOA,aAAP;AACD,GA9BD;;AAAA,kBAAsBE,eAAtB;AAAA;AAAA;AAAA,K;;ACjFA,SAASC,QAAT,CAAkBC,IAAlB,EAAwB;AACtB,SAAO,CAAC,QAAQ3G,IAAR,CAAa2G,IAAb,CAAR;AACD;;AAED,SAASC,WAAT,CAAqBD,IAArB,EAA2B;AACzB,QAAM,CAACE,MAAD,IAAWF,KAAKnF,KAAL,CAAW,MAAX,CAAjB;AACA,SAAOqF,OAAOzgB,MAAd;AACD;;AAED;;;;;;;AAOO,SAAS0gB,GAAT,CAAa3nB,OAAb,EAAsB;AAC3B,QAAM,CAAC4nB,IAAD,IAAS5nB,OAAf;AACA,QAAM6nB,QAAQD,KAAK3e,KAAL,CAAW,IAAX,EAAiBvJ,MAAjB,CAAwB6nB,QAAxB,CAAd;AACA,QAAMO,UAAUD,MAAMnmB,GAAN,CAAU+lB,WAAV,CAAhB;AACA,QAAMM,SAASC,KAAKC,GAAL,CAAS,GAAGH,OAAZ,CAAf;AACA,QAAMJ,SAAS,IAAIQ,MAAJ,CAAY,QAAOH,MAAO,GAA1B,CAAf;;AAEA,SAAOF,MAAMnmB,GAAN,CACL8lB,QAAQA,KAAKW,OAAL,CAAaT,MAAb,EAAqB,EAArB,CADH,EAEL9nB,IAFK,CAEA,IAFA,CAAP;AAGD,C;;;;;;;;;;AC1BD;AAAA;;;;;;;;;AASA;;AAEA;AACA;;AAMA;AACA;;;;;;;;;;;;;;;;;;;;;ACnBA;;AAEA;;;;;;;;;;;;;;;AAee,MAAM,8BAAN,CAAwB;AACrC9Q,cAAYiS,QAAZ,EAAsB;AACpB,SAAKqnB,QAAL,GAAgB,IAAI,qBAAJ,CAAmBrnB,QAAnB,CAAhB;AACA,SAAKsnB,IAAL,GAAY,IAAIC,GAAJ,EAAZ;AACD;;AAED;;;AAGAvyB,YAAUwyB,IAAV,EAAgB;AACd,SAAKF,IAAL,CAAUhpB,GAAV,CAAckpB,IAAd;AACD;;AAED;;;AAGAC,cAAYD,IAAZ,EAAkB;AAChB,SAAKF,IAAL,CAAU/4B,MAAV,CAAiBi5B,IAAjB;AACD;;AAED;;;AAGAE,cAAY1nB,QAAZ,EAAsB;AACpB,SAAKqnB,QAAL,GAAgB,IAAI,qBAAJ,CAAmBrnB,QAAnB,CAAhB;;AAEA;AACA,SAAKsnB,IAAL,CAAUt8B,OAAV,CAAkBw8B,QAAQA,KAAKG,UAAL,EAA1B;AACD;;AAEDC,oBAAkB/4B,EAAlB,EAAsB;AACpB,WAAO,6BAAAm3B,CAAe,KAAKqB,QAApB,EAA8Bx4B,EAA9B,CAAP;AACD;;AAEDg5B,iBAAeC,GAAf,EAAoB7zB,GAApB,EAAyB2rB,IAAzB,EAA+B;AAC7B,UAAM/yB,QAAQi7B,IAAIzG,MAAJ,CAAWptB,GAAX,EAAgB2rB,IAAhB,CAAd;;AAEA,QAAI3rB,IAAIypB,KAAR,EAAe;AACb,UAAIA,QAAQ,EAAZ;AACA,WAAK,MAAM9wB,IAAX,IAAmByH,OAAOE,IAAP,CAAYN,IAAIypB,KAAhB,CAAnB,EAA2C;AACzCA,cAAM9wB,IAAN,IAAck7B,IAAIzG,MAAJ,CAAWptB,IAAIypB,KAAJ,CAAU9wB,IAAV,CAAX,EAA4BgzB,IAA5B,CAAd;AACD;AACF;;AAED,WAAO,EAAE/yB,KAAF,EAAS6wB,KAAT,EAAP;AACD;;AAED;;;AAGAa,YAAU1vB,EAAV,EAAc+wB,IAAd,EAAoBmI,QAApB,EAA8B;AAC5B,UAAMD,MAAM,KAAKF,iBAAL,CAAuB/4B,EAAvB,CAAZ;;AAEA,QAAIi5B,QAAQ,IAAZ,EAAkB;AAChB,aAAOC,YAAYl5B,EAAnB;AACD;;AAED,UAAMoF,MAAM6zB,IAAI1K,UAAJ,CAAevuB,EAAf,CAAZ;AACA,WAAOi5B,IAAIzG,MAAJ,CAAWptB,GAAX,EAAgB2rB,IAAhB,CAAP;AACD;AA3DoC;;AA8DhC,SAASoI,mBAAT,CAA6BjvB,KAA7B,EAAoCkvB,QAApC,EAA8C;AACnD,QAAMC,OAAOnvB,MAAMkvB,QAAN,CAAb;;AAEA,MAAIC,gBAAgB,8BAApB,EAAuC;AACrC,WAAO,IAAP;AACD;;AAED,SAAO,IAAIn9B,KAAJ,CACJ,OAAMk9B,QAAS,0DADX,CAAP;AAGD,C;;ACzFD;AACA;;AAEA;;AAEA;;;;;;;;;;;;;;;;;;AAkBe,MAAM,6BAAN,SAAmC,4BAAnC,CAA6C;AAC1Dl6B,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,UAAM,EAAEiH,QAAF,KAAejH,KAArB;;AAEA,QAAIiH,aAAa4P,SAAjB,EAA4B;AAC1B,YAAM,IAAI7kB,KAAJ,CAAU,sDAAV,CAAN;AACD;;AAED,QAAI,CAACiV,SAASolB,OAAOC,QAAhB,CAAL,EAAgC;AAC9B,YAAM,IAAIt6B,KAAJ,CAAU,wCAAV,CAAN;AACD;;AAED,SAAKo9B,IAAL,GAAY,IAAI,8BAAJ,CAAsBnoB,QAAtB,CAAZ;AACD;;AAEDooB,oBAAkB;AAChB,WAAO;AACLD,YAAM,KAAKA;AADN,KAAP;AAGD;;AAEDrR,4BAA0B3b,IAA1B,EAAgC;AAC9B,UAAM,EAAE6E,QAAF,KAAe7E,IAArB;;AAEA,QAAI6E,aAAa,KAAKjH,KAAL,CAAWiH,QAA5B,EAAsC;AACpC,WAAKmoB,IAAL,CAAUT,WAAV,CAAsB1nB,QAAtB;AACD;AACF;;AAED7F,WAAS;AACP,WAAO,2BAAAkuB,CAASC,IAAT,CAAc,KAAKvvB,KAAL,CAAWoE,QAAzB,CAAP;AACD;AAhCyD;;AAmC5D,6BAAAorB,CAAqBC,iBAArB,GAAyC;AACvCL,QAAM,mBAAAH;AADiC,CAAzC;;AAIA,6BAAAO,CAAqBE,SAArB,GAAiC;AAC/BtrB,YAAU,4BAAAurB,CAAUC,OAAV,CAAkBC,UADG;AAE/B5oB,YAAU6oB;AAFqB,CAAjC;;AAKA,SAASA,UAAT,CAAoB9vB,KAApB,EAA2BkvB,QAA3B,EAAqCa,aAArC,EAAoD;AAClD,QAAMZ,OAAOnvB,MAAMkvB,QAAN,CAAb;;AAEA,MAAI7C,OAAOC,QAAP,IAAmBhxB,OAAO6zB,IAAP,CAAvB,EAAqC;AACnC,WAAO,IAAP;AACD;;AAED,SAAO,IAAIn9B,KAAJ,CACJ,OAAMk9B,QAAS,qBAAoBa,aAAc,uBAD7C,CAAP;AAGD,C;;AC7ED;;AAEA;;AAEe,SAASC,gBAAT,CAA0BC,KAA1B,EAAiC;AAC9C,QAAMC,gBAAN,SAA+B,4BAA/B,CAAyC;AACvCjsB,wBAAoB;AAClB,YAAM,EAAEmrB,IAAF,KAAW,KAAKhC,OAAtB;;AAEA,UAAIgC,IAAJ,EAAU;AACRA,aAAKnzB,SAAL,CAAe,IAAf;AACD;AACF;;AAEDgF,2BAAuB;AACrB,YAAM,EAAEmuB,IAAF,KAAW,KAAKhC,OAAtB;;AAEA,UAAIgC,IAAJ,EAAU;AACRA,aAAKV,WAAL,CAAiB,IAAjB;AACD;AACF;;AAED;;;AAGAE,iBAAa;AACX;AACA;AACA,WAAKuB,WAAL;AACD;;AAED;;;AAGA3K,cAAU1vB,EAAV,EAAc+wB,IAAd,EAAoBmI,QAApB,EAA8B;AAC5B,YAAM,EAAEI,IAAF,KAAW,KAAKhC,OAAtB;;AAEA,UAAI,CAACgC,IAAL,EAAW;AACT,eAAOJ,YAAYl5B,EAAnB;AACD;;AAED,aAAOs5B,KAAK5J,SAAL,CAAe1vB,EAAf,EAAmB+wB,IAAnB,EAAyBmI,QAAzB,CAAP;AACD;;AAED5tB,aAAS;AACP,aAAO,wCAAArG,CACLk1B,KADK,EAEL30B,OAAOC,MAAP;AACE;AACA,QAAEiqB,WAAW,CAAC,GAAGqB,IAAJ,KAAa,KAAKrB,SAAL,CAAe,GAAGqB,IAAlB,CAA1B,EAFF,EAGE,KAAK7mB,KAHP,CAFK,CAAP;AAQD;AAhDsC;;AAmDzCkwB,mBAAiBE,WAAjB,GAAgC,oBAAmBA,YAAYH,KAAZ,CAAmB,GAAtE;;AAEAC,mBAAiBG,YAAjB,GAAgC;AAC9BjB,UAAM,mBAAAH;AADwB,GAAhC;;AAIA,SAAOiB,gBAAP;AACD;;AAED,SAASE,WAAT,CAAqBE,SAArB,EAAgC;AAC9B,SAAOA,UAAUF,WAAV,IAAyBE,UAAUz8B,IAAnC,IAA2C,WAAlD;AACD,C;;ACnED;;AAEA,MAAM08B,WAAW3/B,SAASmK,aAAT,CAAuB,UAAvB,CAAjB;;AAEO,SAASy1B,WAAT,CAAqB3V,GAArB,EAA0B;AAC/B0V,WAAS51B,SAAT,GAAqBkgB,GAArB;AACA,SAAO0V,SAAS1xB,OAAhB;AACD,C;;ACPD;;;;;;;AAOA;AACA;;AAEA,IAAI4xB,mBAAmB;AACrBC,QAAM,IADe;AAErBC,QAAM,IAFe;AAGrBrxB,MAAI,IAHiB;AAIrBsxB,OAAK,IAJgB;AAKrBC,SAAO,IALc;AAMrBC,MAAI,IANiB;AAOrBC,OAAK,IAPgB;AAQrB1lB,SAAO,IARc;AASrB2lB,UAAQ,IATa;AAUrBnkB,QAAM,IAVe;AAWrBhb,QAAM,IAXe;AAYrBo/B,SAAO,IAZc;AAarBh9B,UAAQ,IAba;AAcrBi9B,SAAO,IAdc;AAerBC,OAAK;AACL;AAhBqB,CAAvB;;AAmBA,4DAAeV,gBAAf,E;;AC7BA;;;;;;;AAOA;;AAEA;AACA;;AAEA,IAAIW;AACFC,YAAU;AADR,GAEC,uBAFD,CAAJ;;AAKA,2DAAeD,eAAf,E;;ACjBA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAME,WAAW,WAAjB;;AAEA;;;AAGA,SAASC,WAAT,CAAqBvxB,KAArB,EAA4B;AAC1B,QAAM6mB,OAAO,EAAb;AACA,QAAM2K,QAAQ,EAAd;;AAEA,OAAK,MAAM,CAACC,QAAD,EAAWC,OAAX,CAAX,IAAkCp2B,OAAO2f,OAAP,CAAejb,KAAf,CAAlC,EAAyD;AACvD,QAAIyxB,SAASnjB,UAAT,CAAoB,GAApB,CAAJ,EAA8B;AAC5B,YAAMza,OAAO49B,SAASE,MAAT,CAAgB,CAAhB,CAAb;AACA9K,WAAKhzB,IAAL,IAAa69B,OAAb;AACD,KAHD,MAGO,IAAI,yCAAAE,CAAeF,OAAf,CAAJ,EAA6B;AAClC;AACA;AACA,YAAM79B,OAAO49B,SAASI,WAAT,EAAb;AACAL,YAAM39B,IAAN,IAAc69B,OAAd;AACD;AACF;;AAED,SAAO,CAAC7K,IAAD,EAAO2K,KAAP,CAAP;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;AAsBe,MAAM,mBAAN,SAAwB,4BAAxB,CAAkC;AAC/CvtB,sBAAoB;AAClB,UAAM,EAAEmrB,IAAF,KAAW,KAAKhC,OAAtB;;AAEA,QAAIgC,IAAJ,EAAU;AACRA,WAAKnzB,SAAL,CAAe,IAAf;AACD;AACF;;AAEDgF,yBAAuB;AACrB,UAAM,EAAEmuB,IAAF,KAAW,KAAKhC,OAAtB;;AAEA,QAAIgC,IAAJ,EAAU;AACRA,WAAKV,WAAL,CAAiB,IAAjB;AACD;AACF;;AAED;;;AAGAE,eAAa;AACX;AACA;AACA,SAAKuB,WAAL;AACD;;AAED/uB,WAAS;AACP,UAAM,EAAEguB,IAAF,KAAW,KAAKhC,OAAtB;AACA,UAAM,EAAEt3B,EAAF,EAAM6uB,KAAN,EAAavgB,QAAb,KAA0B,KAAKpE,KAArC;AACA,UAAM8rB,OAAO,2BAAAwD,CAASC,IAAT,CAAcnrB,QAAd,CAAb;;AAEA,QAAI,CAACgrB,IAAL,EAAW;AACT;AACA,aAAOtD,IAAP;AACD;;AAED,UAAMiD,MAAMK,KAAKP,iBAAL,CAAuB/4B,EAAvB,CAAZ;;AAEA,QAAIi5B,QAAQ,IAAZ,EAAkB;AAChB;AACA,aAAOjD,IAAP;AACD;;AAED,UAAM5wB,MAAM6zB,IAAI1K,UAAJ,CAAevuB,EAAf,CAAZ;AACA,UAAM,CAAC+wB,IAAD,EAAO2K,KAAP,IAAgBD,YAAY,KAAKvxB,KAAjB,CAAtB;AACA,UAAM;AACJlM,aAAOg+B,YADH;AAEJnN,aAAOoN;AAFH,QAGF3C,KAAKN,cAAL,CAAoBC,GAApB,EAAyB7zB,GAAzB,EAA8B2rB,IAA9B,CAHJ;;AAKA;AACA;AACA;AACA,QAAIlC,SAASoN,YAAb,EAA2B;AACzB,UAAIC,iBAAiB,EAArB;;AAEA,WAAK,MAAM,CAACn+B,IAAD,EAAOC,KAAP,CAAX,IAA4BwH,OAAO2f,OAAP,CAAe8W,YAAf,CAA5B,EAA0D;AACxD,YAAIpN,MAAM9wB,IAAN,CAAJ,EAAiB;AACfm+B,yBAAen+B,IAAf,IAAuBC,KAAvB;AACD;AACF;AACF;;AAED;AACA;AACA;AACA;AACA,QAAIg4B,KAAKv7B,IAAL,IAAa,sBAAjB,EAAgC;AAC9B,aAAO,uCAAA0hC,CAAanG,IAAb,EAAmBkG,cAAnB,CAAP;AACD;;AAED;AACA;AACA;AACA,QAAIF,iBAAiB,IAArB,EAA2B;AACzB,aAAO,uCAAAG,CAAanG,IAAb,EAAmBkG,cAAnB,CAAP;AACD;;AAED;AACA;AACA,QAAI,CAACV,SAASvK,IAAT,CAAc+K,YAAd,CAAL,EAAkC;AAChC,aAAO,uCAAAG,CAAanG,IAAb,EAAmBkG,cAAnB,EAAmCF,YAAnC,CAAP;AACD;;AAED;AACA;AACA,UAAMI,mBAAmBjL,MAAMn1B,IAAN,CAAW,WAAA0+B,CAAYsB,YAAZ,EAA0BK,UAArC,CAAzB;AACA,UAAMC,qBAAqBF,iBAAiBtqB,GAAjB,CAAqByqB,aAAa;AAC3D,UAAIA,UAAUC,QAAV,KAAuBD,UAAUE,SAArC,EAAgD;AAC9C,eAAOF,UAAUG,WAAjB;AACD;;AAED;AACA,UAAI,CAAChB,MAAMvG,cAAN,CAAqBoH,UAAUI,SAA/B,CAAL,EAAgD;AAC9C,eAAOJ,UAAUG,WAAjB;AACD;;AAED,YAAME,cAAclB,MAAMa,UAAUI,SAAhB,CAApB;;AAEA;AACA;AACA;AACA;AACA,UAAIC,YAAYniC,IAAZ,IAAoB,sBAAxB,EAAuC;AACrC,eAAOmiC,WAAP;AACD;;AAED;AACA;AACA;AACA;AACA,aAAO,uCAAAT,CAAaS,WAAb,EAA0B,IAA1B,EAAgCL,UAAUG,WAA1C,CAAP;AACD,KAzB0B,CAA3B;;AA2BA,WAAO,uCAAAP,CAAanG,IAAb,EAAmBkG,cAAnB,EAAmC,GAAGI,kBAAtC,CAAP;AACD;AAnH8C;;AAsHjD,mBAAAO,CAAUtC,YAAV,GAAyB;AACvBjB,QAAM,mBAAAH;AADiB,CAAzB;;AAIA,mBAAA0D,CAAUjD,SAAV,GAAsB;AACpBtrB,YAAU,4BAAAurB,CAAUC,OAAV,CAAkBC;AADR,CAAtB,C;;;;;;ACjLA;AAAA;;;;;;;;;;;;;;;;;;;AAmBA;AACA;AACA;;;;;;;;;;;;;;;;;ACrBA;AACA;;AAEA,MAAM+C,qBAAqB,CAAC,OAAD,EAAU,iBAAV,CAA3B;;AAEO,MAAMC,SAAS7yB,SAAS;AAC7B,QAAM1F,QAAQ,EAAd;;AAEA;AACA,OAAK,MAAMw4B,GAAX,IAAkBF,kBAAlB,EAAsC;AACpC,QAAI,OAAO5yB,MAAM8yB,GAAN,CAAP,KAAsB,WAA1B,EAAuC;AACrCx4B,YAAMw4B,GAAN,IAAa9yB,MAAM8yB,GAAN,CAAb;AACD;AACF;AACD;AACA,MAAIx4B,MAAMqkB,eAAV,EAA2B;AACzBrkB,UAAMy4B,MAAN,GAAe,GAAf;AACD;;AAED,SAAQ;AAAA;AAAA,MAAG,MAAM,iCAAAlzB,CAAQG,MAAM1B,GAAd,CAAT;AACN,eAAS0B,MAAM0E,OADT;AAEN,iBAAW1E,MAAM+F,SAAN,IAAmB,gBAFxB;AAGN,aAAOzL,KAHD;AAIL0F,UAAMoE;AAJD,GAAR;AAMD,CApBM,C;;ACLP;;AAEO,MAAM,uBAAN,SAA0B,wBAAAlE,CAAMC,aAAhC,CAA8C;AACnDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKgzB,cAAL,GAAsB,KAAKA,cAAL,CAAoB/5B,IAApB,CAAyB,IAAzB,CAAtB;AACD;;AAED+5B,mBAAiB;AACf,SAAKhzB,KAAL,CAAWM,uBAAX,CAAmC,EAAC7I,OAAO,OAAR,EAAiB3B,IAAI,KAAKkK,KAAL,CAAWizB,SAAhC,EAAnC;AACA,SAAKjzB,KAAL,CAAWkzB,OAAX;AACD;;AAED9xB,WAAS;AACP,UAAM,EAACpB,KAAD,KAAU,IAAhB;;AAEA,UAAMmzB,qBAAsB,uBAAsBnzB,MAAM+F,SAAN,GAAmB,IAAG/F,MAAM+F,SAAU,EAAtC,GAA0C,EAAG,EAA/F;;AAEA,WAAQ;AAAA;AAAA,QAAK,WAAWotB,kBAAhB;AACN;AAAA;AAAA,UAAK,WAAU,cAAf;AACGnzB,cAAMoE;AADT,OADM;AAIN,yDAAQ,WAAU,aAAlB,EAAgC,SAAS,KAAK4uB,cAA9C;AAJM,KAAR;AAMD;AAtBkD,C;;;;;ACFrD;AACA;AACA;AACA;;AAEA,MAAMI,oBAAoB,sCAA1B;;AAEO,MAAM,2BAAN,SAA4B,wBAAAlzB,CAAMC,aAAlC,CAAgD;AACrDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAKqzB,aAAL,GAAqB,KAAKA,aAAL,CAAmBp6B,IAAnB,CAAwB,IAAxB,CAArB;AACD;;AAEDo6B,kBAAgB;AACd,SAAKrzB,KAAL,CAAWM,uBAAX,CAAmC,EAAC7I,OAAO,cAAR,EAAwB3B,IAAI,KAAKkK,KAAL,CAAWizB,SAAvC,EAAnC;AACD;;AAEDK,gBAAc;AACZ,UAAM,EAACxoB,KAAD,KAAU,KAAK9K,KAAL,CAAWnB,OAA3B;AACA,WAAOiM,QAAQ;AAAA;AAAA,QAAI,WAAU,OAAd;AAAuBA;AAAvB,KAAR,GAA6C,IAApD;AACD;;AAEDyoB,oBAAkB;AAChB,UAAMC,YAAY,iCAAA3zB,CAAQ,KAAKG,KAAL,CAAWnB,OAAX,CAAmB40B,UAA3B,CAAlB;AACA,WAAOD,YAAY,iDAAM,WAAU,WAAhB,EAA4B,OAAO,EAACrc,iBAAkB,QAAOqc,SAAU,IAApC,EAAnC,GAAZ,GAA8F,IAArG;AACD;;AAEDE,eAAa3tB,SAAb,EAAwB;AACtB,UAAM,EAAC/F,KAAD,KAAU,IAAhB;AACA,WAAQ;AAAC,YAAD;AAAA;AACN,mBAAW+F,SADL;AAEN,iBAAS,KAAKstB,aAFR;AAGN,aAAKrzB,MAAMnB,OAAN,CAAc80B,UAHb;AAIN,eAAO3zB,MAAMnB,OAAN,CAAc+0B,YAJf;AAKN,yBAAiB5zB,MAAMnB,OAAN,CAAcg1B,uBALzB;AAML7zB,YAAMnB,OAAN,CAAci1B;AANT,KAAR;AAQD;;AAED1yB,WAAS;AACP,UAAM,EAACpB,KAAD,KAAU,IAAhB;AACA,UAAM+zB,UAAU/zB,MAAMnB,OAAN,CAAc80B,UAAd,IAA4B3zB,MAAMnB,OAAN,CAAcm1B,WAAd,KAA8B,QAA1E;AACA,UAAMC,YAAYj0B,MAAMnB,OAAN,CAAc80B,UAAd,IAA4B,CAAC3zB,MAAMnB,OAAN,CAAcm1B,WAA7D;AACA,UAAMjuB,YAAa,gBAAe/F,MAAMnB,OAAN,CAAcq1B,IAAd,GAAqB,OAArB,GAA+B,EAAG,EAApE;AACA,WAAQ;AAAC,6BAAD;AAAA,mBAAiBl0B,KAAjB,IAAwB,WAAW+F,SAAnC;AACN,sDAAK,KAAK,iCAAAlG,CAAQG,MAAMnB,OAAN,CAAc4J,IAAtB,KAA+B2qB,iBAAzC,EAA4D,WAAU,MAAtE,GADM;AAEN;AAAA;AAAA;AACG,aAAKG,eAAL,EADH;AAAA;AAC4B,aAAKD,WAAL,EAD5B;AAAA;AACgD;AAAA;AAAA,YAAG,WAAU,MAAb;AAAqBtzB,gBAAMm0B,QAAN,IAAkBn0B,MAAMnB,OAAN,CAAc7E;AAArD,SADhD;AAAA;AACgH+5B,kBAAU,KAAKL,YAAL,CAAkB,gBAAlB,CAAV,GAAgD;AADhK,OAFM;AAKLO,kBAAY;AAAA;AAAA;AAAM,aAAKP,YAAL;AAAN,OAAZ,GAA+C;AAL1C,KAAR;AAOD;AA5CoD,C;;;;;;;;;;;;ACPzC,MAAMU,MAAN,CAAa;AACzBp/B,cAAYq/B,SAAZ,EAAuB;AACrB,SAAKA,SAAL,GAAiBA,aAAa,KAAKC,gBAAnC;AACD;;AAEDA,mBAAiBC,IAAjB,EAAuB;AACrB,WAAOA,IAAP;AACD;;AAED;;;;;;AAMAC,QAAM,GAAGC,MAAT,EAAiB;AACf,UAAMC,aAAa,IAAIlG,GAAJ,EAAnB;AACA,UAAMv2B,SAAS,EAAf;AACA,SAAK,MAAMqE,MAAX,IAAqBm4B,MAArB,EAA6B;AAC3B,YAAME,WAAW,IAAI5/B,GAAJ,EAAjB;AACA,WAAK,MAAMjB,KAAX,IAAoBwI,MAApB,EAA4B;AAC1B,cAAMlH,MAAM,KAAKi/B,SAAL,CAAevgC,KAAf,CAAZ;AACA,YAAI,CAAC4gC,WAAW/I,GAAX,CAAev2B,GAAf,CAAD,IAAwB,CAACu/B,SAAShJ,GAAT,CAAav2B,GAAb,CAA7B,EAAgD;AAC9Cu/B,mBAASx/B,GAAT,CAAaC,GAAb,EAAkBtB,KAAlB;AACD;AACF;AACDmE,aAAOjC,IAAP,CAAY2+B,QAAZ;AACAA,eAAS1iC,OAAT,CAAiB,CAAC6B,KAAD,EAAQsB,GAAR,KAAgBs/B,WAAWnvB,GAAX,CAAenQ,GAAf,CAAjC;AACD;AACD,WAAO6C,OAAO2P,GAAP,CAAWgtB,KAAK3N,MAAMn1B,IAAN,CAAW8iC,EAAEt4B,MAAF,EAAX,CAAhB,CAAP;AACD;AA9BwB,C;;;;;;ACA3B;AAAA;;;AAGA;;;;AAKA,MAAMu4B,yBAAyB,CAA/B;AACA,MAAMC,8BAA8B,CAApC;;;AAEA,MAAMC,SAAS,IAAI,MAAJ,CAAWvlB,QAAQA,QAAQA,KAAKlR,GAAhC,CAAf;;AAEA,MAAM02B,gBAAgB;AACpB9vB,OAAK;AACH;AACAtJ,iBAAa,KAFV;AAGH;AACAtC,aAAS;AAJN,GADe;AAOpBoD,YAAU,EAACd,aAAa,KAAd,EAPU;AAQpB6gB,YAAU;AACR;AACA7gB,iBAAa,KAFL;AAGR;AACA8Q,UAAM,EAJE;AAKR;AACAkQ,cAAU;AANF,GARU;AAgBpBvgB,SAAO;AACLT,iBAAa,KADR;AAELU,YAAQ;AAFH,GAhBa;AAoBpBuM,UAAQ;AACNL,aAAS,KADH;AAENvV,UAAM;AAFA,GApBY;AAwBpB4b,YAAU;AAxBU,CAAtB;;;AA2BA,SAAS3J,GAAT,CAAahD,YAAY8yB,cAAc9vB,GAAvC,EAA4CvT,MAA5C,EAAoD;AAClD,UAAQA,OAAOpB,IAAf;AACE,SAAK,sBAAAC,CAAGmS,IAAR;AACE,aAAOrH,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6BvQ,OAAOsB,IAAP,IAAe,EAA5C,EAAgD,EAAC2I,aAAa,IAAd,EAAhD,CAAP;AACF;AACE,aAAOsG,SAAP;AAJJ;AAMD;;AAED;;;;;;;AAOA,SAAS+yB,YAAT,CAAsBz1B,KAAtB,EAA6B01B,MAA7B,EAAqC;AACnC;AACA,QAAMC,aAAaD,OAAOttB,GAAP,CAAWiF,QAAQA,QAAQA,KAAKvO,GAAhC,CAAnB;AACA,MAAI82B,WAAW51B,MAAMoG,MAAN,CAAaiH,QAASA,OAAO,CAACsoB,WAAWp/B,QAAX,CAAoB8W,KAAKvO,GAAzB,CAAR,GAAwC,KAA9D,CAAf;AACA82B,aAAWA,SAASxtB,GAAT,CAAaiF,QAAQ;AAC9B,QAAIA,QAAQA,KAAKuG,QAAjB,EAA2B;AACzB,aAAOvG,KAAKuG,QAAZ;AACA,aAAOvG,KAAKwoB,QAAZ;AACD;AACD,WAAOxoB,IAAP;AACD,GANU,CAAX;;AAQA;AACAqoB,SAAOjjC,OAAP,CAAe,CAACwyB,GAAD,EAAM/T,KAAN,KAAgB;AAC7B,QAAI,CAAC+T,GAAL,EAAU;AAAE;AAAS;AACrB,QAAI5X,OAAOvR,OAAOC,MAAP,CAAc,EAAd,EAAkBkpB,GAAlB,EAAuB,EAACrR,UAAU,IAAX,EAAiBiiB,UAAU3kB,KAA3B,EAAvB,CAAX;AACA,QAAIA,QAAQ0kB,SAASjoB,MAArB,EAA6B;AAC3BioB,eAAS1kB,KAAT,IAAkB7D,IAAlB;AACD,KAFD,MAEO;AACLuoB,eAASrd,MAAT,CAAgBrH,KAAhB,EAAuB,CAAvB,EAA0B7D,IAA1B;AACD;AACF,GARD;;AAUA,SAAOuoB,QAAP;AACD;;;AAED,SAAS3Y,QAAT,CAAkBva,YAAY8yB,cAAcvY,QAA5C,EAAsD9qB,MAAtD,EAA8D;AAC5D,MAAI2jC,QAAJ;AACA,MAAIC,OAAJ;AACA,UAAQ5jC,OAAOpB,IAAf;AACE,SAAK,sBAAAC,CAAGglC,iBAAR;AACE,UAAI,CAAC7jC,OAAOsB,IAAR,IAAgB,CAACtB,OAAOsB,IAAP,CAAYuM,KAAjC,EAAwC;AACtC,eAAO0C,SAAP;AACD;AACD,aAAO5G,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACtG,aAAa,IAAd,EAAoB8Q,MAAM/a,OAAOsB,IAAP,CAAYuM,KAAtC,EAA7B,EAA2E7N,OAAOsB,IAAP,CAAY0X,IAAZ,GAAmB,EAACA,MAAMhZ,OAAOsB,IAAP,CAAY0X,IAAnB,EAAnB,GAA8C,EAAzH,CAAP;AACF,SAAK,sBAAAna,CAAGilC,uBAAR;AACE,aAAOn6B,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACyI,MAAMhZ,OAAOsB,IAAP,CAAY0X,IAAnB,EAA7B,CAAP;AACF,SAAK,sBAAAna,CAAGyiB,cAAR;AACE,aAAO3X,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B;AAClC0a,kBAAU;AACRlM,iBAAO/e,OAAOsB,IAAP,CAAYyd,KADX;AAERglB,2BAAiB;AAFT;AADwB,OAA7B,CAAP;AAMF,SAAK,sBAAAllC,CAAGmsB,qBAAR;AACE,aAAOrhB,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAAC0a,UAAU,IAAX,EAA7B,CAAP;AACF,SAAK,sBAAApsB,CAAGmlC,gBAAR;AACE,UAAI,CAACzzB,UAAU0a,QAAX,IAAuBjrB,OAAOsB,IAAP,CAAYqL,GAAZ,KAAoB4D,UAAU0a,QAAV,CAAmBgZ,UAAlE,EAA8E;AAC5E,eAAO1zB,SAAP;AACD;AACD,aAAO5G,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B;AAClC0a,kBAAU;AACRlM,iBAAOxO,UAAU0a,QAAV,CAAmBlM,KADlB;AAERglB,2BAAiB/jC,OAAOsB,IAAP,CAAYmuB,OAFrB;AAGRwU,sBAAYjkC,OAAOsB,IAAP,CAAYqL;AAHhB;AADwB,OAA7B,CAAP;AAOF,SAAK,sBAAA9N,CAAGqlC,eAAR;AACE,UAAI,CAAC3zB,UAAU0a,QAAf,EAAyB;AACvB,eAAO1a,SAAP;AACD;AACD,aAAO5G,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B;AAClC0a,kBAAU;AACRlM,iBAAOxO,UAAU0a,QAAV,CAAmBlM,KADlB;AAERglB,2BAAiB,IAFT;AAGRE,sBAAYjkC,OAAOsB,IAAP,CAAYqL;AAHhB;AADwB,OAA7B,CAAP;AAOF,SAAK,sBAAA9N,CAAGslC,sBAAR;AACE,UAAI,CAAC5zB,UAAU0a,QAAf,EAAyB;AACvB,eAAO1a,SAAP;AACD;AACD,aAAO5G,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B;AAClC0a,kBAAU;AACRlM,iBAAOxO,UAAU0a,QAAV,CAAmBlM,KADlB;AAERglB,2BAAiB;AAFT;AADwB,OAA7B,CAAP;AAMF,SAAK,sBAAAllC,CAAGulC,kBAAR;AACER,gBAAUrzB,UAAUwK,IAAV,CAAe9E,GAAf,CAAmBouB,OAAO;AAClC,YAAIA,OAAOA,IAAI13B,GAAJ,KAAY3M,OAAOsB,IAAP,CAAYqL,GAAnC,EAAwC;AACtCg3B,qBAAW,IAAX;AACA,iBAAOh6B,OAAOC,MAAP,CAAc,EAAd,EAAkBy6B,GAAlB,EAAuB,EAACpa,YAAYjqB,OAAOsB,IAAP,CAAY2oB,UAAzB,EAAvB,CAAP;AACD;AACD,eAAOoa,GAAP;AACD,OANS,CAAV;AAOA,aAAOV,WAAWh6B,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACwK,MAAM6oB,OAAP,EAA7B,CAAX,GAA2DrzB,SAAlE;AACF,SAAK,sBAAA1R,CAAGylC,qBAAR;AACE,UAAI,CAACtkC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOiP,SAAP;AACD;AACDqzB,gBAAUrzB,UAAUwK,IAAV,CAAe9E,GAAf,CAAmB4H,QAAQ;AACnC,YAAIA,QAAQA,KAAKlR,GAAL,KAAa3M,OAAOsB,IAAP,CAAYqL,GAArC,EAA0C;AACxC,gBAAM,EAAC6R,YAAD,EAAe+lB,aAAf,EAA8BC,SAA9B,KAA2CxkC,OAAOsB,IAAxD;AACA,iBAAOqI,OAAOC,MAAP,CAAc,EAAd,EAAkBiU,IAAlB,EAAwB,EAACW,YAAD,EAAe+lB,aAAf,EAA8BE,qBAAqBD,SAAnD,EAAxB,CAAP;AACD;AACD,eAAO3mB,IAAP;AACD,OANS,CAAV;AAOA,aAAOlU,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACwK,MAAM6oB,OAAP,EAA7B,CAAP;AACF,SAAK,sBAAA/kC,CAAG6lC,uBAAR;AACE,UAAI,CAAC1kC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOiP,SAAP;AACD;AACDqzB,gBAAUrzB,UAAUwK,IAAV,CAAe9E,GAAf,CAAmB4H,QAAQ;AACnC,YAAIA,QAAQA,KAAKlR,GAAL,KAAa3M,OAAOsB,IAAP,CAAYqL,GAArC,EAA0C;AACxC,gBAAMg4B,UAAUh7B,OAAOC,MAAP,CAAc,EAAd,EAAkBiU,IAAlB,CAAhB;AACA,iBAAO8mB,QAAQnmB,YAAf;AACA,iBAAOmmB,QAAQJ,aAAf;AACA,iBAAOI,QAAQF,mBAAf;AACA,iBAAOE,OAAP;AACD;AACD,eAAO9mB,IAAP;AACD,OATS,CAAV;AAUA,aAAOlU,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACwK,MAAM6oB,OAAP,EAA7B,CAAP;AACF,SAAK,sBAAA/kC,CAAG+lC,mBAAR;AACE,UAAI,CAAC5kC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOiP,SAAP;AACD;AACDqzB,gBAAUrzB,UAAUwK,IAAV,CAAe9G,MAAf,CAAsB4J,QAAQ7d,OAAOsB,IAAP,CAAYqL,GAAZ,KAAoBkR,KAAKlR,GAAvD,CAAV;AACA,aAAOhD,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACwK,MAAM6oB,OAAP,EAA7B,CAAP;AACF;AACE,aAAOrzB,SAAP;AA5FJ;AA8FD;;AAED,SAAS2G,MAAT,CAAgB3G,YAAY8yB,cAAcnsB,MAA1C,EAAkDlX,MAAlD,EAA0D;AACxD,UAAQA,OAAOpB,IAAf;AACE,SAAK,sBAAAC,CAAG+gB,WAAR;AACE,aAAOjW,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACsG,SAAS,IAAV,EAAgBvV,MAAMtB,OAAOsB,IAA7B,EAA7B,CAAP;AACF,SAAK,sBAAAzC,CAAG0X,aAAR;AACE,aAAO5M,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACsG,SAAS,KAAV,EAA7B,CAAP;AACF,SAAK,sBAAAhY,CAAGghB,kBAAR;AACE,aAAOlW,OAAOC,MAAP,CAAc,EAAd,EAAkBy5B,cAAcnsB,MAAhC,CAAP;AACF;AACE,aAAO3G,SAAP;AARJ;AAUD;;AAED,SAAS7F,KAAT,CAAe6F,YAAY8yB,cAAc34B,KAAzC,EAAgD1K,MAAhD,EAAwD;AACtD,MAAI6kC,SAAJ;AACA,UAAQ7kC,OAAOpB,IAAf;AACE,SAAK,sBAAAC,CAAGimC,oBAAR;AACE,aAAOn7B,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACtG,aAAa,IAAd,EAAoBU,QAAQ3K,OAAOsB,IAAnC,EAA7B,CAAP;AACF,SAAK,sBAAAzC,CAAGkmC,YAAR;AACEF,kBAAYl7B,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,UAAU5F,MAA5B,CAAZ;AACAk6B,gBAAU7kC,OAAOsB,IAAP,CAAYY,IAAtB,IAA8BlC,OAAOsB,IAAP,CAAYa,KAA1C;AACA,aAAOwH,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAAC5F,QAAQk6B,SAAT,EAA7B,CAAP;AACF;AACE,aAAOt0B,SAAP;AARJ;AAUD;;AAED,SAAS2M,QAAT,CAAkB3M,YAAY8yB,cAAcnmB,QAA5C,EAAsDld,MAAtD,EAA8D;AAC5D,MAAI2jC,QAAJ;AACA,MAAIqB,QAAJ;AACA,UAAQhlC,OAAOpB,IAAf;AACE,SAAK,sBAAAC,CAAGomC,kBAAR;AACE,aAAO10B,UAAU0D,MAAV,CAAiBkJ,WAAWA,QAAQhZ,EAAR,KAAenE,OAAOsB,IAAlD,CAAP;AACF,SAAK,sBAAAzC,CAAGqmC,gBAAR;AACE;AACAF,iBAAWz0B,UAAU0F,GAAV,CAAckH,WAAW;AAClC,YAAIA,WAAWA,QAAQhZ,EAAR,KAAenE,OAAOsB,IAAP,CAAY6C,EAA1C,EAA8C;AAC5Cw/B,qBAAW,IAAX;AACA,iBAAOh6B,OAAOC,MAAP,CAAc,EAAd,EAAkBuT,OAAlB,EAA2Bnd,OAAOsB,IAAlC,CAAP;AACD;AACD,eAAO6b,OAAP;AACD,OANU,CAAX;AAOA;AACA,UAAI,CAACwmB,QAAL,EAAe;AACb,cAAM15B,cAAc,CAAC,EAAEjK,OAAOsB,IAAP,CAAYyZ,IAAZ,IAAoB/a,OAAOsB,IAAP,CAAYyZ,IAAZ,CAAiBS,MAAjB,GAA0B,CAAhD,CAArB;AACA,cAAM2B,UAAUxT,OAAOC,MAAP,CAAc,EAACuP,OAAO,EAAR,EAAY4B,MAAM,EAAlB,EAAsB9B,SAAS,KAA/B,EAAd,EAAqDjZ,OAAOsB,IAA5D,EAAkE,EAAC2I,WAAD,EAAlE,CAAhB;AACA+6B,iBAAS3gC,IAAT,CAAc8Y,OAAd;AACD;AACD,aAAO6nB,QAAP;AACF,SAAK,sBAAAnmC,CAAGsmC,cAAR;AACEH,iBAAWz0B,UAAU0F,GAAV,CAAckH,WAAW;AAClC,YAAIA,WAAWA,QAAQhZ,EAAR,KAAenE,OAAOsB,IAAP,CAAY6C,EAA1C,EAA8C;AAC5C;AACA;AACA,gBAAM8F,cAAcjK,OAAOsB,IAAP,CAAYyZ,IAAZ,GAAmB,EAAC9Q,aAAa,IAAd,EAAnB,GAAyC,EAA7D;;AAEA;AACA;AACA,cAAIjK,OAAOsB,IAAP,CAAYyZ,IAAZ,IAAoB/a,OAAOsB,IAAP,CAAYyZ,IAAZ,CAAiBS,MAAjB,GAA0B,CAA9C,IAAmD2B,QAAQpC,IAAR,CAAa2C,IAAb,CAAkB0nB,QAAQA,KAAK7B,MAA/B,CAAvD,EAA+F;AAC7F,kBAAMxoB,OAAOua,MAAMn1B,IAAN,CAAWH,OAAOsB,IAAP,CAAYyZ,IAAvB,CAAb;AACAoC,oBAAQpC,IAAR,CAAaza,OAAb,CAAqB,CAAC8kC,IAAD,EAAOrmB,KAAP,KAAiB;AACpC,kBAAIqmB,KAAK7B,MAAT,EAAiB;AACfxoB,qBAAKqL,MAAL,CAAYrH,KAAZ,EAAmB,CAAnB,EAAsBqmB,IAAtB;AACD;AACF,aAJD;AAKA,mBAAOz7B,OAAOC,MAAP,CAAc,EAAd,EAAkBuT,OAAlB,EAA2BlT,WAA3B,EAAwCN,OAAOC,MAAP,CAAc,EAAd,EAAkB5J,OAAOsB,IAAzB,EAA+B,EAACyZ,IAAD,EAA/B,CAAxC,CAAP;AACD;;AAED,iBAAOpR,OAAOC,MAAP,CAAc,EAAd,EAAkBuT,OAAlB,EAA2BlT,WAA3B,EAAwCjK,OAAOsB,IAA/C,CAAP;AACD;AACD,eAAO6b,OAAP;AACD,OArBU,CAAX;;AAuBA,UAAI,CAACnd,OAAOsB,IAAP,CAAY+jC,oBAAjB,EAAuC;AACrC,eAAOL,QAAP;AACD;;AAEDhlC,aAAOsB,IAAP,CAAY+jC,oBAAZ,CAAiC/kC,OAAjC,CAAyCglC,cAAc;AACrDN,mBAAWA,SAAS/uB,GAAT,CAAakH,WAAW;AACjC,cAAIA,QAAQhZ,EAAR,KAAemhC,WAAWnhC,EAA9B,EAAkC;AAChC,kBAAMohC,cAAcD,WAAWE,UAAX,CAAsBz3B,MAAtB,CAA6B,CAACgN,IAAD,EAAO0qB,eAAP,KAA2B;AAC1E,oBAAMC,gBAAgBV,SAAStnB,IAAT,CAAcC,KAAKA,EAAExZ,EAAF,KAASshC,eAA5B,CAAtB;AACA,oBAAM,GAAG7B,OAAH,IAAcR,OAAOP,KAAP,CAAa6C,cAAc3qB,IAA3B,EAAiCA,IAAjC,CAApB;AACA,qBAAO6oB,OAAP;AACD,aAJmB,EAIjBzmB,QAAQpC,IAJS,CAApB;;AAMA,mBAAOpR,OAAOC,MAAP,CAAc,EAAd,EAAkBuT,OAAlB,EAA2B,EAACpC,MAAMwqB,WAAP,EAA3B,CAAP;AACD;;AAED,iBAAOpoB,OAAP;AACD,SAZU,CAAX;AAaD,OAdD;;AAgBA,aAAO6nB,QAAP;AACF,SAAK,sBAAAnmC,CAAG8mC,mBAAR;AACE,aAAOp1B,UAAU0F,GAAV,CAAckH,WAAW;AAC9B,YAAIA,WAAWA,QAAQhZ,EAAR,KAAenE,OAAOsB,IAAP,CAAY6C,EAAtC,IAA4CgZ,QAAQpC,IAAxD,EAA8D;AAC5D,gBAAM6oB,UAAUzmB,QAAQpC,IAAR,CAAa9E,GAAb,CAAiBmvB,QAAQ;AACvC,gBAAIA,KAAKz4B,GAAL,KAAa3M,OAAOsB,IAAP,CAAYqL,GAA7B,EAAkC;AAChC,qBAAOhD,OAAOC,MAAP,CAAc,EAAd,EAAkBw7B,IAAlB,EAAwBplC,OAAOsB,IAAP,CAAYrB,OAApC,CAAP;AACD;AACD,mBAAOmlC,IAAP;AACD,WALe,CAAhB;AAMA,iBAAOz7B,OAAOC,MAAP,CAAc,EAAd,EAAkBuT,OAAlB,EAA2B,EAACpC,MAAM6oB,OAAP,EAA3B,CAAP;AACD;AACD,eAAOzmB,OAAP;AACD,OAXM,CAAP;AAYF,SAAK,sBAAAte,CAAGylC,qBAAR;AACE,UAAI,CAACtkC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOiP,SAAP;AACD;AACD,aAAOA,UAAU0F,GAAV,CAAckH,WAAWxT,OAAOC,MAAP,CAAc,EAAd,EAAkBuT,OAAlB,EAA2B;AACzDpC,cAAMoC,QAAQpC,IAAR,CAAa9E,GAAb,CAAiB2sB,QAAQ;AAC7B;AACA,cAAIA,KAAKj2B,GAAL,KAAa3M,OAAOsB,IAAP,CAAYqL,GAA7B,EAAkC;AAChC,kBAAM,EAAC6R,YAAD,EAAe+lB,aAAf,EAA8BC,SAA9B,KAA2CxkC,OAAOsB,IAAxD;AACA,mBAAOqI,OAAOC,MAAP,CAAc,EAAd,EAAkBg5B,IAAlB,EAAwB;AAC7BpkB,0BAD6B;AAE7B+lB,2BAF6B;AAG7BE,mCAAqBD,SAHQ;AAI7B5lC,oBAAM;AAJuB,aAAxB,CAAP;AAMD;AACD,iBAAOgkC,IAAP;AACD,SAZK;AADmD,OAA3B,CAAzB,CAAP;AAeF,SAAK,sBAAA/jC,CAAG+mC,sBAAR;AACE,UAAI,CAAC5lC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOiP,SAAP;AACD;AACD,aAAOA,UAAU0F,GAAV,CAAckH,WAAWxT,OAAOC,MAAP,CAAc,EAAd,EAAkBuT,OAAlB,EAA2B;AACzDpC,cAAMoC,QAAQpC,IAAR,CAAa9E,GAAb,CAAiB2sB,QAAQ;AAC7B,cAAIA,KAAKj2B,GAAL,KAAa3M,OAAOsB,IAAP,CAAYqL,GAA7B,EAAkC;AAChC,mBAAOhD,OAAOC,MAAP,CAAc,EAAd,EAAkBg5B,IAAlB,EAAwB;AAC7BiD,wBAAU7lC,OAAOsB,IAAP,CAAYukC,QADO;AAE7B5mB,yBAAWjf,OAAOsB,IAAP,CAAY2d,SAFM;AAG7B9F,qBAAOnZ,OAAOsB,IAAP,CAAY6X,KAHU;AAI7Bva,oBAAM;AAJuB,aAAxB,CAAP;AAMD;AACD,iBAAOgkC,IAAP;AACD,SAVK;AADmD,OAA3B,CAAzB,CAAP;AAaF,SAAK,sBAAA/jC,CAAG6lC,uBAAR;AACE,UAAI,CAAC1kC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOiP,SAAP;AACD;AACD,aAAOA,UAAU0F,GAAV,CAAckH,WAAWxT,OAAOC,MAAP,CAAc,EAAd,EAAkBuT,OAAlB,EAA2B;AACzDpC,cAAMoC,QAAQpC,IAAR,CAAa9E,GAAb,CAAiB2sB,QAAQ;AAC7B;AACA,cAAIA,KAAKj2B,GAAL,KAAa3M,OAAOsB,IAAP,CAAYqL,GAA7B,EAAkC;AAChC,kBAAMg4B,UAAUh7B,OAAOC,MAAP,CAAc,EAAd,EAAkBg5B,IAAlB,CAAhB;AACA,mBAAO+B,QAAQnmB,YAAf;AACA,mBAAOmmB,QAAQJ,aAAf;AACA,mBAAOI,QAAQF,mBAAf;AACA,gBAAI,CAACE,QAAQ/lC,IAAT,IAAiB+lC,QAAQ/lC,IAAR,KAAiB,UAAtC,EAAkD;AAChD+lC,sBAAQ/lC,IAAR,GAAe,SAAf;AACD;AACD,mBAAO+lC,OAAP;AACD;AACD,iBAAO/B,IAAP;AACD,SAbK;AADmD,OAA3B,CAAzB,CAAP;AAgBF,SAAK,sBAAA/jC,CAAG+lC,mBAAR;AACA,SAAK,sBAAA/lC,CAAGinC,mBAAR;AACE,UAAI,CAAC9lC,OAAOsB,IAAZ,EAAkB;AAChB,eAAOiP,SAAP;AACD;AACD,aAAOA,UAAU0F,GAAV,CAAckH,WACnBxT,OAAOC,MAAP,CAAc,EAAd,EAAkBuT,OAAlB,EAA2B,EAACpC,MAAMoC,QAAQpC,IAAR,CAAa9G,MAAb,CAAoB4J,QAAQA,KAAKlR,GAAL,KAAa3M,OAAOsB,IAAP,CAAYqL,GAArD,CAAP,EAA3B,CADK,CAAP;AAEF,SAAK,sBAAA9N,CAAGqiB,kBAAR;AACA,SAAK,sBAAAriB,CAAGuiB,mBAAR;AACE,aAAO7Q,UAAU0F,GAAV,CAAckH,WACnBxT,OAAOC,MAAP,CAAc,EAAd,EAAkBuT,OAAlB,EAA2B,EAACpC,MAAMoC,QAAQpC,IAAR,CAAa9G,MAAb,CAAoB4J,QAAQA,KAAKoB,SAAL,KAAmBjf,OAAOsB,IAAP,CAAY2d,SAA3D,CAAP,EAA3B,CADK,CAAP;AAEF;AACE,aAAO1O,SAAP;AAjJJ;AAmJD;;AAED,SAASxF,QAAT,CAAkBwF,YAAY8yB,cAAct4B,QAA5C,EAAsD/K,MAAtD,EAA8D;AAC5D,UAAQA,OAAOpB,IAAf;AACE,SAAK,sBAAAC,CAAGknC,aAAR;AACE,aAAOp8B,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACtG,aAAa,IAAd,EAA7B,EAAkDjK,OAAOsB,IAAzD,CAAP;AACF,SAAK,sBAAAzC,CAAG2K,eAAR;AACE,aAAOG,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACvM,WAAWuM,UAAUvM,SAAV,CAAoByF,MAApB,CAA2BzJ,OAAOsB,IAAlC,CAAZ,EAA7B,CAAP;AACF,SAAK,sBAAAzC,CAAGkF,0BAAR;AACE,aAAO4F,OAAOC,MAAP,CAAc,EAAd,EAAkB2G,SAAlB,EAA6B,EAACvM,WAAW,EAAZ,EAA7B,CAAP;AACF,SAAK,sBAAAnF,CAAGmnC,cAAR;AACE,aAAO3C,cAAct4B,QAArB;AACF;AACE,aAAOwF,SAAP;AAVJ;AAYD;;eAMe,EAACua,QAAD,EAAWvX,GAAX,EAAgBxI,QAAhB,EAA0BL,KAA1B,EAAiCwM,MAAjC,EAAyCgG,QAAzC,E;;;;;;;;;;;;;AC3XhB;;AAEO,MAAM,yBAAN,SAA2B,wBAAA3O,CAAMC,aAAjC,CAA+C;AACpDY,uBAAqB;AACnB,SAAKD,QAAL,CAAc,EAAC2W,QAAQ,IAAT,EAAd;AACA7mB,aAASyU,IAAT,CAAcC,SAAd,CAAwBC,GAAxB,CAA4B,YAA5B;AACD;;AAEDtE,yBAAuB;AACrBrQ,aAASyU,IAAT,CAAcC,SAAd,CAAwB+c,MAAxB,CAA+B,YAA/B;AACA,SAAKvhB,QAAL,CAAc,EAAC2W,QAAQ,KAAT,EAAd;AACD;;AAEDrW,WAAS;AACP,UAAM,EAACqW,MAAD,KAAW,KAAKvb,KAAtB;AACA,UAAM,EAAC4O,KAAD,EAAQgpB,YAAR,KAAwB,KAAK9zB,KAAnC;AACA,WACE;AAAA;AAAA;AACE,sDAAK,WAAY,qBAAoByX,SAAS,QAAT,GAAoB,EAAG,EAA5D,GADF;AAEE;AAAA;AAAA,UAAK,WAAY,qBAAoBA,SAAS,QAAT,GAAoB,EAAG,EAA5D;AACE;AAAA;AAAA;AAAA;AAAM3M,eAAN;AAAA;AAAA,SADF;AAEG,aAAK9K,KAAL,CAAWoE,QAFd;AAGE;AAAA;AAAA,YAAK,WAAU,QAAf;AACE;AAAA;AAAA,cAAQ,SAAS,KAAKpE,KAAL,CAAW43B,YAA5B,EAA0C,WAAU,4BAApD;AAAA;AAAmF9D,wBAAnF;AAAA;AAAA;AADF;AAHF;AAFF,KADF;AAYD;AA1BmD,C;;;;;ACFtD;AACA;;AAEA,MAAM,gCAAN,SAA6B,wBAAA5zB,CAAMC,aAAnC,CAAiD;AAC/CnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK0E,OAAL,GAAe,KAAKA,OAAL,CAAazL,IAAb,CAAkB,IAAlB,CAAf;AACD;;AAEDyL,YAAU;AACR,UAAM,EAAC1E,KAAD,KAAU,IAAhB;AACAA,UAAMM,uBAAN,CAA8B,EAAC7I,OAAO,cAAR,EAAwB+I,YAAYR,MAAMlK,EAA1C,EAA8CA,IAAIkK,MAAMizB,SAAxD,EAA9B;AACAjzB,UAAM63B,QAAN,CAAe73B,MAAMnB,OAArB;AACD;;AAEDuC,WAAS;AACP,UAAM,EAACvC,OAAD,KAAY,KAAKmB,KAAvB;AACA,WACE;AAAA;AAAA,QAAK,WAAU,mBAAf;AACE,sDAAK,WAAY,0BAAyBnB,QAAQ4J,IAAK,EAAvD,GADF;AAEE;AAAA;AAAA,UAAK,WAAU,mBAAf;AACE;AAAA;AAAA;AACE;AAAA;AAAA;AAAA;AAAM5J,oBAAQiM,KAAd;AAAA;AAAA,WADF;AAEE;AAAA;AAAA;AAAA;AAAKjM,oBAAQ7E,IAAb;AAAA;AAAA;AAFF,SADF;AAKE;AAAA;AAAA;AACE;AAAA;AAAA,cAAQ,WAAU,yBAAlB,EAA4C,SAAS,KAAK0K,OAA1D;AAAA;AAAqE7F,oBAAQi1B,YAA7E;AAAA;AAAA;AADF;AALF;AAFF,KADF;AAcD;AA5B8C;;AA+B1C,MAAM,mCAAN,SAAgC,wBAAA5zB,CAAMC,aAAtC,CAAoD;AACzDiB,WAAS;AACP,UAAM,EAACpB,KAAD,KAAU,IAAhB;AACA,WACE;AAAC,+BAAD;AAAA,mBAAkBA,KAAlB,IAAyB,cAAc,gBAAvC,EAAyD,OAAO,oBAAhE;AACE;AAAA;AAAA,UAAK,WAAU,4BAAf;AACGA,cAAM3C,MAAN,CAAauK,GAAb,CAAiBjJ,WAChB,uCAAC,gCAAD,aAAgB,KAAKA,QAAQ7I,EAA7B;AACE,mCAAyBkK,MAAMM,uBADjC;AAEE,oBAAUN,MAAM63B,QAFlB;AAGE,qBAAW73B,MAAMizB;AAHnB,WAIMt0B,OAJN,EADD;AADH;AADF,KADF;AAaD;AAhBwD,C;;;;;;;;;;;;AClCpD,MAAMm5B,mBAAmB;AAC9BC,WAAS;AACPC,YAAQ,oBADD;AAEPvvB,UAAM;AAFC,GADqB;AAK9BwvB,YAAU;AACRD,YAAQ,uBADA;AAERvvB,UAAM;AAFE,GALoB;AAS9ByvB,YAAU;AACRF,YAAQ,wBADA;AAERvvB,UAAM;AAFE,GAToB;AAa9B/O,OAAK;AACHs+B,YAAQ,gBADL;AAEHvvB,UAAM;AAFH,GAbyB;AAiB9BkK,UAAQ;AACNqlB,YAAQ,mBADF;AAENvvB,UAAM;AAFA,GAjBsB;AAqB9B0vB,YAAU;AACRH,YAAQ,uBADA;AAERvvB,UAAM;AAFE;AArBoB,CAAzB,C;;;;;;;;;;;;;;;;;;;;;;;;;;ACAP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM2vB,gBAAgB,IAAIrjC,GAAJ,EAAtB;;AAEA;;;;;;;;;AASO,MAAM,SAAN,SAAoB,wBAAAmL,CAAMC,aAA1B,CAAwC;AAC7CnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9D,KAAL,GAAa;AACXm8B,kBAAY,IADD;AAEXC,mBAAa,KAFF;AAGX7hB,uBAAiB,KAHN;AAIX8hB,iBAAW;AAJA,KAAb;AAMA,SAAKriB,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBjd,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKod,YAAL,GAAoB,KAAKA,YAAL,CAAkBpd,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKimB,WAAL,GAAmB,KAAKA,WAAL,CAAiBjmB,IAAjB,CAAsB,IAAtB,CAAnB;AACD;;AAED;;;AAGMu/B,gBAAN,GAAuB;AAAA;;AAAA;AACrB;AACA,YAAM,EAACD,SAAD,KAAc,MAAKr8B,KAAzB;AACA,UAAI,CAACq8B,SAAL,EAAgB;AACd;AACD;;AAED,YAAME,WAAWF,UAAUj6B,GAA3B;AACA,UAAI,CAAC,MAAKpC,KAAL,CAAWo8B,WAAhB,EAA6B;AAC3B;AACA,YAAI,CAACF,cAAczM,GAAd,CAAkB8M,QAAlB,CAAL,EAAkC;AAChC,gBAAMC,gBAAgB,IAAIniC,OAAJ,CAAY,UAACC,OAAD,EAAUa,MAAV,EAAqB;AACrD,kBAAMshC,SAAS,IAAIC,KAAJ,EAAf;AACAD,mBAAO30B,gBAAP,CAAwB,MAAxB,EAAgCxN,OAAhC;AACAmiC,mBAAO30B,gBAAP,CAAwB,OAAxB,EAAiC3M,MAAjC;AACAshC,mBAAOE,GAAP,GAAaJ,QAAb;AACD,WALqB,CAAtB;;AAOA;AACAL,wBAAcjjC,GAAd,CAAkBsjC,QAAlB,EAA4BC,aAA5B;AACAA,wBAAcI,KAAd,CAAoB;AAAA,mBAAM11B,EAAN;AAAA,WAApB,EAA8B21B,IAA9B,CAAmC;AAAA,mBAAMX,cAAc5iC,MAAd,CAAqBijC,QAArB,CAAN;AAAA,WAAnC,EAAyEK,KAAzE;AACD;;AAED;AACA,cAAMV,cAAcxiC,GAAd,CAAkB6iC,QAAlB,CAAN;;AAEA;AACA,YAAI,mCAAA7jB,CAAgBW,kBAAhB,CAAmC,MAAKrZ,KAAL,CAAWq8B,SAA9C,EAAyD,MAAKv4B,KAAL,CAAW6M,IAAX,CAAgBkI,KAAzE,KACA,CAAC,MAAK7Y,KAAL,CAAWo8B,WADhB,EAC6B;AAC3B,gBAAKx3B,QAAL,CAAc,EAACw3B,aAAa,IAAd,EAAd;AACD;AACF;AA/BoB;AAgCtB;;AAED;;;;;;;;;;;AAWA,SAAO1a,qBAAP,CAA6Bnf,SAA7B,EAAwCyD,SAAxC,EAAmD;AACjD,UAAM,EAAC6S,KAAD,KAAUtW,UAAUoO,IAA1B;AACA,UAAMgR,eAAe,mCAAAjJ,CAAgBW,kBAAhB,CAAmCrT,UAAUq2B,SAA7C,EAAwDxjB,KAAxD,CAArB;AACA,QAAI+I,YAAY,IAAhB;;AAEA;AACA,QAAI,CAACD,YAAD,IAAiBpf,UAAUoO,IAA/B,EAAqC;AACnCiR,kBAAY,EAACwa,aAAa,KAAd,EAAZ;AACD;;AAED,QAAIza,YAAJ,EAAkB;AAChB,aAAOC,SAAP;AACD;;AAED;AACAlJ,IAAA,mCAAAA,CAAgBQ,wBAAhB,CAAyClT,UAAUq2B,SAAnD;;AAEAza,gBAAYA,aAAa,EAAzB;AACAA,cAAUya,SAAV,GAAsB,mCAAA3jB,CAAgBK,sBAAhB,CAAuCF,KAAvC,CAAtB;;AAEA,WAAO+I,SAAP;AACD;;AAED5H,oBAAkBze,KAAlB,EAAyB;AACvBA,UAAM2f,cAAN;AACA,SAAKtW,QAAL,CAAc;AACZu3B,kBAAY,KAAKr4B,KAAL,CAAW0Q,KADX;AAEZ+F,uBAAiB;AAFL,KAAd;AAID;;AAED;;;AAGA0I,sBAAoB;AAClB;AACA,QAAI,KAAKnf,KAAL,CAAW6M,IAAX,CAAgBtc,IAAhB,KAAyB,SAA7B,EAAwC;AACtC,aAAO,EAACuD,OAAO,EAACwrB,WAAW,KAAKtf,KAAL,CAAW6M,IAAX,CAAgBtc,IAA5B,EAAR,EAAP;AACD;;AAED,WAAO,IAAP;AACD;;AAED2uB,cAAYznB,KAAZ,EAAmB;AACjBA,UAAM2f,cAAN;AACA,QAAI,KAAKpX,KAAL,CAAW6M,IAAX,CAAgBtc,IAAhB,KAAyB,UAA7B,EAAyC;AACvC,WAAKyP,KAAL,CAAW5P,QAAX,CAAoB,yBAAAC,CAAGkC,UAAH,CAAc;AAChChC,cAAM,sBAAAC,CAAGmhB,kBADuB;AAEhC1e,cAAM,KAAK+M,KAAL,CAAW6M;AAFe,OAAd,CAApB;AAID,KALD,MAKO;AACL,YAAM,EAAC0S,MAAD,EAAS5J,MAAT,EAAiB6J,OAAjB,EAA0BC,OAA1B,EAAmC9K,QAAnC,KAA+Cld,KAArD;AACA,WAAKuI,KAAL,CAAW5P,QAAX,CAAoB,yBAAAC,CAAGkC,UAAH,CAAc;AAChChC,cAAM,sBAAAC,CAAGyhB,SADuB;AAEhChf,cAAMqI,OAAOC,MAAP,CAAc,KAAKyE,KAAL,CAAW6M,IAAzB,EAA+B,EAACpV,OAAO,EAAC8nB,MAAD,EAAS5J,MAAT,EAAiB6J,OAAjB,EAA0BC,OAA1B,EAAmC9K,QAAnC,EAAR,EAA/B;AAF0B,OAAd,CAApB;AAID;AACD,QAAI,KAAK3U,KAAL,CAAWkO,cAAf,EAA+B;AAC7B,WAAKlO,KAAL,CAAW5P,QAAX,CAAoB,yBAAAC,CAAG2D,WAAH,CAAe,sBAAAxD,CAAGwoC,YAAlB,EAAgC;AAClD/kC,gBAAQ,KAAK+L,KAAL,CAAWmI,WAD+B;AAElD7J,aAAK,KAAK0B,KAAL,CAAW6M,IAAX,CAAgBvO,GAF6B;AAGlD6S,yBAAiB,KAAKnR,KAAL,CAAW0Q;AAHsB,OAAhC,CAApB;AAKD,KAND,MAMO;AACL,WAAK1Q,KAAL,CAAW5P,QAAX,CAAoB,yBAAAC,CAAG2C,SAAH,CAAasI,OAAOC,MAAP,CAAc;AAC7C9D,eAAO,OADsC;AAE7CxD,gBAAQ,KAAK+L,KAAL,CAAWmI,WAF0B;AAG7CgJ,yBAAiB,KAAKnR,KAAL,CAAW0Q;AAHiB,OAAd,EAI9B,KAAKyO,iBAAL,EAJ8B,CAAb,CAApB;;AAMA,UAAI,KAAKnf,KAAL,CAAWiN,yBAAf,EAA0C;AACxC,aAAKjN,KAAL,CAAW5P,QAAX,CAAoB,yBAAAC,CAAGqD,eAAH,CAAmB;AACrCO,kBAAQ,KAAK+L,KAAL,CAAWmI,WADkB;AAErC8wB,iBAAO,CAF8B;AAGrCrsB,iBAAO,CAAC,EAAC9W,IAAI,KAAKkK,KAAL,CAAW6M,IAAX,CAAgBC,IAArB,EAA2BiE,KAAK,KAAK/Q,KAAL,CAAW0Q,KAA3C,EAAD;AAH8B,SAAnB,CAApB;AAKD;AACF;AACF;;AAED2F,eAAaI,eAAb,EAA8B;AAC5B,SAAK3V,QAAL,CAAc,EAAC2V,eAAD,EAAd;AACD;;AAEDxS,sBAAoB;AAClB,SAAKu0B,cAAL;AACD;;AAEDr0B,uBAAqB;AACnB,SAAKq0B,cAAL;AACD;;AAED;AACA;AACA;AACAz3B,uBAAqB;AACnB,UAAM+c,YAAY,SAAAob,CAAMtb,qBAAN,CAA4B,KAAK5d,KAAjC,EAAwC,KAAK9D,KAA7C,CAAlB;AACA,QAAI4hB,SAAJ,EAAe;AACb,WAAKhd,QAAL,CAAcgd,SAAd;AACD;AACF;;AAED;AACA;AACA;AACAC,4BAA0Btf,SAA1B,EAAqC;AACnC,UAAMqf,YAAY,SAAAob,CAAMtb,qBAAN,CAA4Bnf,SAA5B,EAAuC,KAAKvC,KAA5C,CAAlB;AACA,QAAI4hB,SAAJ,EAAe;AACb,WAAKhd,QAAL,CAAcgd,SAAd;AACD;AACF;;AAED7c,yBAAuB;AACrB2T,IAAA,mCAAAA,CAAgBQ,wBAAhB,CAAyC,KAAKlZ,KAAL,CAAWq8B,SAApD;AACD;;AAEDn3B,WAAS;AACP,UAAM,EAACsP,KAAD,EAAQ3K,SAAR,EAAmB8G,IAAnB,EAAyBzc,QAAzB,EAAmCmd,kBAAnC,EAAuDpF,WAAvD,EAAoE8E,yBAApE,KAAiG,KAAKjN,KAA5G;AACA,UAAM,EAACA,KAAD,KAAU,IAAhB;AACA,UAAM2f,oBAAoB,KAAKzjB,KAAL,CAAWua,eAAX,IAA8B,KAAKva,KAAL,CAAWm8B,UAAX,KAA0B3nB,KAAlF;AACA;AACA,UAAM,EAACjI,IAAD,EAAOuvB,MAAP,KAAiB,gBAAAF,CAAiBjrB,KAAKtc,IAAL,KAAc,KAAd,GAAsB,UAAtB,GAAmCsc,KAAKtc,IAAzD,KAAkE,EAAzF;AACA,UAAM4oC,WAAW,KAAKj9B,KAAL,CAAWq8B,SAAX,IAAwB1rB,KAAKssB,QAA9C;AACA,UAAM7a,aAAa,EAACnH,iBAAiB,KAAKjb,KAAL,CAAWq8B,SAAX,GAAwB,OAAM,KAAKr8B,KAAL,CAAWq8B,SAAX,CAAqBj6B,GAAI,GAAvD,GAA4D,MAA9E,EAAnB;AACA,UAAMqI,iBAAiB,CACrB,YADqB,EAErBZ,SAFqB,EAGrB4Z,qBAAqB,QAHA,EAIrB3f,MAAMo5B,WAAN,IAAqB,aAJA,EAKrBxzB,MALqB,CAKdC,KAAKA,CALS,EAKNC,IALM,CAKD,GALC,CAAvB;;AAOA,WAAQ;AAAA;AAAA,QAAI,WAAWa,cAAf;AACN;AAAA;AAAA,UAAG,MAAMkG,KAAKtc,IAAL,KAAc,QAAd,GAAyBsc,KAAK2qB,QAA9B,GAAyC3qB,KAAKvO,GAAvD,EAA4D,SAAS,CAAC0B,MAAMo5B,WAAP,GAAqB,KAAKla,WAA1B,GAAwCrI,SAA7G;AACE;AAAA;AAAA,YAAK,WAAU,MAAf;AACE;AAAA;AAAA,cAAK,WAAU,0BAAf;AACGsiB,wBACC,gDAAK,WAAY,qBAAoB,KAAKj9B,KAAL,CAAWo8B,WAAX,GAAyB,SAAzB,GAAqC,EAAG,EAA7E,EAAgF,OAAOha,UAAvF;AAFJ,WADF;AAME;AAAA;AAAA,cAAK,WAAU,cAAf;AACGzR,iBAAKtc,IAAL,KAAc,UAAd,IAA4B;AAAA;AAAA,gBAAK,WAAU,0BAAf;AAA0C,qDAAC,uCAAD,IAAkB,IAAI,8CAAAqf,CAAkB,KAAK5P,KAAL,CAAW6P,QAA7B,CAAtB;AAA1C,aAD/B;AAEGhD,iBAAKgT,QAAL,IACC;AAAA;AAAA,gBAAK,WAAU,gBAAf;AACGhT,mBAAKgT,QAAL,CAAc3hB,KAAd,CAAoB,CAApB,EAAuB,GAAvB,CADH;AACgC2O,mBAAKtc,IAAL,KAAc,UAAd,IAA6B,YAAWsc,KAAKwsB,WAAY;AADzF,aAHJ;AAOE;AAAA;AAAA,gBAAK,WAAW,CACd,WADc,EAEd5wB,OAAO,EAAP,GAAY,YAFE,EAGdoE,KAAKwsB,WAAL,GAAmB,EAAnB,GAAwB,gBAHV,EAIdxsB,KAAKgT,QAAL,GAAgB,EAAhB,GAAqB,cAJP,EAKd/Z,IALc,CAKT,GALS,CAAhB;AAME;AAAA;AAAA,kBAAI,WAAU,YAAd,EAA2B,KAAI,MAA/B;AAAuC+G,qBAAK/B;AAA5C,eANF;AAOE;AAAA;AAAA,kBAAG,WAAU,kBAAb,EAAgC,KAAI,MAApC;AAA4C+B,qBAAKwsB;AAAjD;AAPF,aAPF;AAgBE;AAAA;AAAA,gBAAK,WAAU,cAAf;AACG5wB,sBAAQ,CAACoE,KAAKugB,OAAd,IAAyB,iDAAM,WAAY,+BAA8B3kB,IAAK,EAArD,GAD5B;AAEGoE,mBAAKpE,IAAL,IAAaoE,KAAKugB,OAAlB,IAA6B,iDAAM,WAAU,wBAAhB,EAAyC,OAAO,EAACjW,iBAAkB,QAAOtK,KAAKpE,IAAK,IAApC,EAAhD,GAFhC;AAGGuvB,wBAAU,CAACnrB,KAAKugB,OAAhB,IAA2B;AAAA;AAAA,kBAAK,WAAU,oBAAf;AAAoC,uDAAC,uCAAD,IAAkB,IAAI4K,MAAtB,EAA8B,gBAAe,SAA7C;AAApC,eAH9B;AAIGnrB,mBAAKugB,OAAL,IAAgB;AAAA;AAAA,kBAAK,WAAU,oBAAf;AAAqCvgB,qBAAKugB;AAA1C;AAJnB;AAhBF;AANF;AADF,OADM;AAiCL,OAACptB,MAAMo5B,WAAP,IAAsB;AAAA;AAAA,UAAQ,WAAU,0BAAlB;AACrB,mBAAS,KAAKljB,iBADO;AAErB;AAAA;AAAA,YAAM,WAAU,SAAhB;AAA4B,mCAAwBrJ,KAAK/B,KAAM;AAA/D;AAFqB,OAjCjB;AAqCL6U,2BACC,uCAAC,oBAAD;AACE,kBAAUvvB,QADZ;AAEE,eAAOsgB,KAFT;AAGE,gBAAQvI,WAHV;AAIE,kBAAU,KAAKkO,YAJjB;AAKE,iBAASxJ,KAAKU,kBAAL,IAA2BA,kBALtC;AAME,cAAMV,IANR;AAOE,kBAAU,KAAKsS,iBAAL,EAPZ;AAQE,mCAA2BlS,yBAR7B;AAtCI,KAAR;AAiDD;AAlP4C;AAoP/C,SAAAisB,CAAM53B,YAAN,GAAqB,EAACuL,MAAM,EAAP,EAArB;AACO,MAAMysB,OAAO,uCAAAriC,CAAQiF,UAAU,EAAC2T,UAAU3T,MAAMG,KAAN,CAAYC,MAAZ,CAAmBuT,QAA9B,EAAV,CAAR,EAA4D,SAA5D,CAAb;AACA,MAAM0pB,kBAAkBv5B,SAAS,uCAAC,IAAD,IAAM,aAAa,IAAnB,EAAyB,WAAWA,MAAM+F,SAA1C,GAAjC,C;;;;;;;;;;;;;;;;;;;;;;AC3QP;AACA;;AAEO,MAAM,iCAAN,SAA+B,wBAAA7F,CAAMC,aAArC,CAAmD;AACxDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,SAAK9D,KAAL,GAAa,EAACs9B,iBAAiB,KAAKx5B,KAAL,CAAWw5B,eAA7B,EAAb;AACA,SAAKC,QAAL,GAAgB,KAAKA,QAAL,CAAcxgC,IAAd,CAAmB,IAAnB,CAAhB;AACA,SAAKygC,OAAL,GAAe,KAAKA,OAAL,CAAazgC,IAAb,CAAkB,IAAlB,CAAf;AACD;;AAED8kB,4BAA0Btf,SAA1B,EAAqC;AACnC,QAAIA,UAAUk7B,WAAV,IAAyB,CAAC,KAAK35B,KAAL,CAAW25B,WAAzC,EAAsD;AACpD,WAAKtuB,KAAL,CAAWkX,KAAX;AACD;AACD,QAAI9jB,UAAU+6B,eAAV,IAA6B,CAAC,KAAKx5B,KAAL,CAAWw5B,eAA7C,EAA8D;AAC5D,WAAK14B,QAAL,CAAc,EAAC04B,iBAAiB,IAAlB,EAAd;AACD;AACD;AACA,QAAI,KAAKt9B,KAAL,CAAWs9B,eAAX,IAA8B,CAAC/6B,UAAU3K,KAA7C,EAAoD;AAClD,WAAKgN,QAAL,CAAc,EAAC04B,iBAAiB,KAAlB,EAAd;AACD;AACF;;AAEDC,WAASG,EAAT,EAAa;AACX,QAAI,KAAK19B,KAAL,CAAWs9B,eAAf,EAAgC;AAC9B,WAAK14B,QAAL,CAAc,EAAC04B,iBAAiB,KAAlB,EAAd;AACD;AACD,SAAKx5B,KAAL,CAAWy5B,QAAX,CAAoBG,EAApB;AACD;;AAEDF,UAAQruB,KAAR,EAAe;AACb,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAEDjK,WAAS;AACP,UAAMy4B,kBAAkB,KAAK75B,KAAL,CAAWlM,KAAX,IAAoB,KAAKkM,KAAL,CAAW85B,OAAvD;AACA,UAAM,EAACC,OAAD,KAAY,KAAK/5B,KAAvB;AACA,UAAM,EAACw5B,eAAD,KAAoB,KAAKt9B,KAA/B;;AAEA,WAAQ;AAAA;AAAA;AAAO,6CAAC,uCAAD,IAAkB,IAAI,KAAK8D,KAAL,CAAWg6B,OAAjC,GAAP;AACN;AAAA;AAAA,UAAK,WAAY,SAAQD,UAAU,KAAV,GAAkB,EAAG,GAAEP,kBAAkB,UAAlB,GAA+B,EAAG,EAAlF;AACG,aAAKx5B,KAAL,CAAWi6B,OAAX,GACC;AAAA;AAAA,YAAK,WAAU,mBAAf;AAAmC,0DAAK,WAAU,mBAAf;AAAnC,SADD,GAECJ,mBAAmB,gDAAK,WAAU,uBAAf,EAAuC,SAAS,KAAK75B,KAAL,CAAW85B,OAA3D,GAHvB;AAIE,0DAAO,MAAK,MAAZ;AACE,iBAAO,KAAK95B,KAAL,CAAWlM,KADpB;AAEE,eAAK,KAAK4lC,OAFZ;AAGE,oBAAU,KAAKD,QAHjB;AAIE,uBAAa,KAAKz5B,KAAL,CAAW2E,IAAX,CAAgBC,aAAhB,CAA8B,EAAC9O,IAAI,KAAKkK,KAAL,CAAWk6B,aAAhB,EAA9B,CAJf;AAKE,qBAAW,KAAKl6B,KAAL,CAAW25B,WALxB;AAME,oBAAU,KAAK35B,KAAL,CAAWi6B,OANvB,GAJF;AAWGT,2BACC;AAAA;AAAA,YAAO,WAAU,eAAjB;AACE,iDAAC,uCAAD,IAAkB,IAAI,KAAKx5B,KAAL,CAAWm6B,cAAjC;AADF;AAZJ;AADM,KAAR;AAkBD;AAvDuD;;AA0D1D,iCAAAC,CAAiB94B,YAAjB,GAAgC;AAC9Bu4B,mBAAiB,KADa;AAE9B/lC,SAAO,EAFuB;AAG9B0lC,mBAAiB;AAHa,CAAhC,C;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAM,uBAAN,SAA0B,wBAAAt5B,CAAMC,aAAhC,CAA8C;AACnDnL,cAAYgL,KAAZ,EAAmB;AACjB,UAAMA,KAAN;AACA,UAAM,EAACwP,IAAD,KAASxP,KAAf;AACA,SAAK9D,KAAL,GAAa;AACX6X,aAAOvE,OAAQA,KAAKuE,KAAL,IAAcvE,KAAKqQ,QAA3B,GAAuC,EADnC;AAEXvhB,WAAKkR,OAAOA,KAAKlR,GAAZ,GAAkB,EAFZ;AAGXk7B,uBAAiB,KAHN;AAIXa,2BAAqB7qB,OAAOA,KAAKgM,mBAAZ,GAAkC,EAJ5C;AAKX8e,gCAA0B9qB,OAAOA,KAAKgM,mBAAZ,GAAkC;AALjD,KAAb;AAOA,SAAK+e,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BthC,IAA5B,CAAiC,IAAjC,CAA9B;AACA,SAAKuhC,aAAL,GAAqB,KAAKA,aAAL,CAAmBvhC,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAKwhC,WAAL,GAAmB,KAAKA,WAAL,CAAiBxhC,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKyhC,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBzhC,IAAzB,CAA8B,IAA9B,CAA3B;AACA,SAAK0hC,eAAL,GAAuB,KAAKA,eAAL,CAAqB1hC,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAK2hC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuB3hC,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAK4hC,2BAAL,GAAmC,KAAKA,2BAAL,CAAiC5hC,IAAjC,CAAsC,IAAtC,CAAnC;AACA,SAAK6hC,oBAAL,GAA4B,KAAKA,oBAAL,CAA0B7hC,IAA1B,CAA+B,IAA/B,CAA5B;AACA,SAAK8hC,yBAAL,GAAiC,KAAKA,yBAAL,CAA+B9hC,IAA/B,CAAoC,IAApC,CAAjC;AACA,SAAK+hC,WAAL,GAAmB,KAAKA,WAAL,CAAiB/hC,IAAjB,CAAsB,IAAtB,CAAnB;AACD;;AAEDuhC,gBAAc/iC,KAAd,EAAqB;AACnB,SAAKqJ,QAAL,CAAc,EAAC,SAASrJ,MAAM/E,MAAN,CAAaoB,KAAvB,EAAd;AACD;;AAED2mC,cAAYhjC,KAAZ,EAAmB;AACjB,SAAKqJ,QAAL,CAAc;AACZxC,WAAK7G,MAAM/E,MAAN,CAAaoB,KADN;AAEZ0lC,uBAAiB;AAFL,KAAd;AAID;;AAEDmB,oBAAkB;AAChB,SAAK75B,QAAL,CAAc;AACZxC,WAAK,EADO;AAEZk7B,uBAAiB;AAFL,KAAd;AAID;;AAEDuB,8BAA4B;AAC1B,SAAKj6B,QAAL,CAAc,EAACw5B,0BAA0B,IAA3B,EAAd;AACD;;AAEDW,+BAA6BZ,mBAA7B,EAAkD;AAChD,SAAKv5B,QAAL,CAAc;AACZu5B,yBADY;AAEZb,uBAAiB;AAFL,KAAd;AAIA,SAAKx5B,KAAL,CAAW5P,QAAX,CAAoB,EAACG,MAAM,sBAAAC,CAAGslC,sBAAV,EAApB;AACD;;AAED+E,8BAA4BpjC,KAA5B,EAAmC;AACjC,SAAKwjC,4BAAL,CAAkCxjC,MAAM/E,MAAN,CAAaoB,KAA/C;AACD;;AAEDymC,2BAAyB;AACvB,SAAKU,4BAAL,CAAkC,EAAlC;AACD;;AAEDP,sBAAoBd,EAApB,EAAwB;AACtBA,OAAGxiB,cAAH;AACA,SAAKpX,KAAL,CAAWk7B,OAAX;AACD;;AAEDN,oBAAkBhB,EAAlB,EAAsB;AACpBA,OAAGxiB,cAAH;;AAEA,QAAI,KAAK+jB,YAAL,EAAJ,EAAyB;AACvB,YAAM3rB,OAAO,EAAClR,KAAK,KAAK88B,QAAL,CAAc,KAAKl/B,KAAL,CAAWoC,GAAzB,CAAN,EAAb;AACA,YAAM,EAACoS,KAAD,KAAU,KAAK1Q,KAArB;AACA,UAAI,KAAK9D,KAAL,CAAW6X,KAAX,KAAqB,EAAzB,EAA6B;AAC3BvE,aAAKuE,KAAL,GAAa,KAAK7X,KAAL,CAAW6X,KAAxB;AACD;;AAED,UAAI,KAAK7X,KAAL,CAAWm+B,mBAAf,EAAoC;AAClC7qB,aAAKgM,mBAAL,GAA2B,KAAK4f,QAAL,CAAc,KAAKl/B,KAAL,CAAWm+B,mBAAzB,CAA3B;AACD,OAFD,MAEO,IAAI,KAAKr6B,KAAL,CAAWwP,IAAX,IAAmB,KAAKxP,KAAL,CAAWwP,IAAX,CAAgBgM,mBAAvC,EAA4D;AACjE;AACAhM,aAAKgM,mBAAL,GAA2B,IAA3B;AACD;AACD,WAAKxb,KAAL,CAAW5P,QAAX,CAAoB,yBAAAC,CAAGC,UAAH,CAAc;AAChCC,cAAM,sBAAAC,CAAG8hB,aADuB;AAEhCrf,cAAM,EAACuc,IAAD,EAAOkB,KAAP;AAF0B,OAAd,CAApB;AAIA,WAAK1Q,KAAL,CAAW5P,QAAX,CAAoB,yBAAAC,CAAG2C,SAAH,CAAa;AAC/BiB,gBAAQ,qCADuB;AAE/BwD,eAAO,gBAFwB;AAG/B0Z,yBAAiBT;AAHc,OAAb,CAApB;;AAMA,WAAK1Q,KAAL,CAAWk7B,OAAX;AACD;AACF;;AAEDJ,uBAAqBrjC,KAArB,EAA4B;AAC1BA,UAAM2f,cAAN;AACA,QAAI,KAAK+jB,YAAL,EAAJ,EAAyB;AACvB,WAAKn7B,KAAL,CAAW5P,QAAX,CAAoB,yBAAAC,CAAGC,UAAH,CAAc;AAChCC,cAAM,sBAAAC,CAAGqlC,eADuB;AAEhC5iC,cAAM,EAACqL,KAAK,KAAK88B,QAAL,CAAc,KAAKl/B,KAAL,CAAWm+B,mBAAzB,CAAN;AAF0B,OAAd,CAApB;AAIA,WAAKr6B,KAAL,CAAW5P,QAAX,CAAoB,yBAAAC,CAAG2C,SAAH,CAAa;AAC/BiB,gBAAQ,qCADuB;AAE/BwD,eAAO;AAFwB,OAAb,CAApB;AAID;AACF;;AAED2jC,WAAS98B,GAAT,EAAc;AACZ;AACA,QAAI,CAACA,IAAIgQ,UAAJ,CAAe,OAAf,CAAD,IAA4B,CAAChQ,IAAIgQ,UAAJ,CAAe,QAAf,CAAjC,EAA2D;AACzD,aAAQ,UAAShQ,GAAI,EAArB;AACD;AACD,WAAOA,GAAP;AACD;;AAED+8B,eAAa/8B,GAAb,EAAkB;AAChB,QAAI;AACF,aAAO,IAAID,GAAJ,CAAQC,GAAR,CAAP;AACD,KAFD,CAEE,OAAOrE,CAAP,EAAU;AACV,aAAO,IAAP;AACD;AACF;;AAED+gC,cAAY18B,GAAZ,EAAiB;AACf,UAAMg9B,iBAAiB,CAAC,OAAD,EAAU,QAAV,CAAvB;AACA,UAAMC,SAAS,KAAKF,YAAL,CAAkB/8B,GAAlB,KAA0B,KAAK+8B,YAAL,CAAkB,KAAKD,QAAL,CAAc98B,GAAd,CAAlB,CAAzC;;AAEA,WAAOi9B,UAAUD,eAAevlC,QAAf,CAAwBwlC,OAAOl3B,QAA/B,CAAjB;AACD;;AAEDm3B,gCAA8B;AAC5B,UAAM,EAACnB,mBAAD,KAAwB,KAAKn+B,KAAnC;AACA,WAAO,CAACm+B,mBAAD,IAAwB,KAAKW,WAAL,CAAiBX,mBAAjB,CAA/B;AACD;;AAEDc,iBAAe;AACb,UAAMM,WAAW,KAAKT,WAAL,CAAiB,KAAK9+B,KAAL,CAAWoC,GAA5B,KAAoC,KAAKk9B,2BAAL,EAArD;;AAEA,QAAI,CAACC,QAAL,EAAe;AACb,WAAK36B,QAAL,CAAc,EAAC04B,iBAAiB,IAAlB,EAAd;AACD;;AAED,WAAOiC,QAAP;AACD;;AAEDC,iCAA+B;AAC7B,UAAM,EAACrB,mBAAD,KAAwB,KAAKn+B,KAAnC;AACA,UAAMy/B,gBAAgB,KAAK37B,KAAL,CAAW01B,eAAX,KAA+B,EAArD;AACA,UAAM8D,kBAAmB,KAAKt9B,KAAL,CAAWs9B,eAAX,IAA8B,CAAC,KAAKgC,2BAAL,EAAhC,IAAuEG,aAA/F;AACA;AACA,UAAMhC,cAAeH,mBAAmB,KAAKwB,WAAL,CAAiB,KAAK9+B,KAAL,CAAWoC,GAA5B,CAApB,IAAyD,CAAC+7B,mBAA9E;AACA,UAAMuB,YAAY,KAAK57B,KAAL,CAAW01B,eAAX,KAA+B,IAA/B,IAChB2E,mBADgB,IACO,KAAKr6B,KAAL,CAAW41B,UAAX,KAA0B,KAAKwF,QAAL,CAAcf,mBAAd,CADnD;;AAGA,QAAI,CAAC,KAAKn+B,KAAL,CAAWo+B,wBAAhB,EAA0C;AACxC,aAAQ;AAAA;AAAA,UAAG,WAAU,2BAAb,EAAyC,SAAS,KAAKS,yBAAvD;AACN,+CAAC,uCAAD,IAAkB,IAAG,8BAArB;AADM,OAAR;AAGD;AACD,WAAQ;AAAA;AAAA,QAAK,WAAU,8BAAf;AACN,6CAAC,iCAAD;AACE,wBAAgBY,gBAAgB,gCAAhB,GAAmD,8BADrE;AAEE,iBAASC,SAFX;AAGE,kBAAU,KAAKf,2BAHjB;AAIE,iBAAS,KAAKN,sBAJhB;AAKE,qBAAaZ,WALf;AAME,iBAAS,IANX;AAOE,eAAOU,mBAPT;AAQE,yBAAiBb,eARnB;AASE,iBAAQ,+BATV;AAUE,uBAAc,+BAVhB;AAWE,cAAM,KAAKx5B,KAAL,CAAW2E,IAXnB;AADM,KAAR;AAcD;;AAEDvD,WAAS;AACP,UAAM,EAACi5B,mBAAD,KAAwB,KAAKn+B,KAAnC;AACA,UAAMy/B,gBAAgB,KAAK37B,KAAL,CAAW01B,eAAX,KAA+B,EAArD;AACA;AACA,UAAMmG,YAAY,CAAC,KAAK77B,KAAL,CAAWwP,IAA9B;AACA,UAAMssB,WAAY,KAAK97B,KAAL,CAAWwP,IAAX,IAAmB,KAAKxP,KAAL,CAAWwP,IAAX,CAAgBgM,mBAApC,IAA4D,EAA7E;AACA,UAAMugB,UAAU1B,uBAAuB,KAAKe,QAAL,CAAcf,mBAAd,MAAuCyB,QAA9E;AACA;AACA;AACA,UAAME,cAAcD,WAAW,CAAC,KAAK/7B,KAAL,CAAW01B,eAA3C;AACA,UAAMuG,cAAc3gC,OAAOC,MAAP,CAAc,EAAd,EAAkB,KAAKyE,KAAL,CAAWwP,IAA7B,CAApB;AACA,QAAI,KAAKxP,KAAL,CAAW01B,eAAf,EAAgC;AAC9BuG,kBAAYrgB,UAAZ,GAAyB,KAAK5b,KAAL,CAAW01B,eAApC;AACAuG,kBAAYzgB,mBAAZ,GAAkC,KAAKxb,KAAL,CAAW41B,UAA7C;AACD;AACD,WACE;AAAA;AAAA,QAAM,WAAU,cAAhB;AACE;AAAA;AAAA,UAAK,WAAU,sBAAf;AACE;AAAA;AAAA,YAAI,WAAU,eAAd;AACE,iDAAC,uCAAD,IAAkB,IAAIiG,YAAY,0BAAZ,GAAyC,2BAA/D;AADF,SADF;AAIE;AAAA;AAAA,YAAK,WAAU,oBAAf;AACE;AAAA;AAAA,cAAK,WAAU,cAAf;AACE,mDAAC,iCAAD,IAAkB,UAAU,KAAKrB,aAAjC;AACE,qBAAO,KAAKt+B,KAAL,CAAW6X,KADpB;AAEE,uBAAQ,2BAFV;AAGE,6BAAc,iCAHhB;AAIE,oBAAM,KAAK/T,KAAL,CAAW2E,IAJnB,GADF;AAME,mDAAC,iCAAD,IAAkB,UAAU,KAAK81B,WAAjC;AACE,2BAAa,KAAKv+B,KAAL,CAAWs9B,eAAX,IAA8B,CAAC,KAAKwB,WAAL,CAAiB,KAAK9+B,KAAL,CAAWoC,GAA5B,CAD9C;AAEE,qBAAO,KAAKpC,KAAL,CAAWoC,GAFpB;AAGE,uBAAS,KAAKq8B,eAHhB;AAIE,+BAAiB,KAAKz+B,KAAL,CAAWs9B,eAAX,IAA8B,CAAC,KAAKwB,WAAL,CAAiB,KAAK9+B,KAAL,CAAWoC,GAA5B,CAJlD;AAKE,uBAAQ,yBALV;AAME,uBAAS,IANX;AAOE,6BAAc,+BAPhB;AAQE,8BAAe,8BARjB;AASE,oBAAM,KAAK0B,KAAL,CAAW2E,IATnB,GANF;AAgBG,iBAAK+2B,4BAAL;AAhBH,WADF;AAmBE,iDAAC,sBAAD,IAAa,MAAMO,WAAnB;AACE,0BAAcN,aADhB;AAEE,mBAAO,KAAKz/B,KAAL,CAAW6X,KAFpB;AAnBF;AAJF,OADF;AA6BE;AAAA;AAAA,UAAS,WAAU,SAAnB;AACE;AAAA;AAAA,YAAQ,WAAU,QAAlB,EAA2B,MAAK,QAAhC,EAAyC,SAAS,KAAK2mB,mBAAvD;AACE,iDAAC,uCAAD,IAAkB,IAAG,6BAArB;AADF,SADF;AAIGsB,sBACC;AAAA;AAAA,YAAQ,WAAU,cAAlB,EAAiC,MAAK,QAAtC,EAA+C,SAAS,KAAKlB,oBAA7D;AACE,iDAAC,uCAAD,IAAkB,IAAG,8BAArB;AADF,SADD,GAIC;AAAA;AAAA,YAAQ,WAAU,MAAlB,EAAyB,MAAK,QAA9B,EAAuC,SAAS,KAAKF,iBAArD;AACE,iDAAC,uCAAD,IAAkB,IAAIiB,YAAY,0BAAZ,GAAyC,2BAA/D;AADF;AARJ;AA7BF,KADF;AA4CD;AA7OkD;;AAgPrD,uBAAAK,CAAY56B,YAAZ,GAA2B;AACzBkO,QAAM,IADmB;AAEzBkB,SAAO,CAAC;AAFiB,CAA3B,C","file":"activity-stream.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addSnippetsSubscriber} from \"content-src/lib/snippets\";\nimport {Base} from \"content-src/components/Base/Base\";\nimport {DetectUserSessionStart} from \"content-src/lib/detect-user-session-start\";\nimport {initStore} from \"content-src/lib/init-store\";\nimport {Provider} from \"react-redux\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {reducers} from \"common/Reducers.jsm\";\n\nconst store = initStore(reducers, global.gActivityStreamPrerenderedState);\n\nnew DetectUserSessionStart(store).sendEventOrAddListener();\n\n// If we are starting in a prerendered state, we must wait until the first render\n// to request state rehydration (see Base.jsx). If we are NOT in a prerendered state,\n// we can request it immedately.\nif (!global.gActivityStreamPrerenderedState) {\n  store.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n}\n\nReactDOM.hydrate(<Provider store={store}>\n  <Base\n    isFirstrun={global.document.location.href === \"about:welcome\"}\n    isPrerendered={!!global.gActivityStreamPrerenderedState}\n    locale={global.document.documentElement.lang}\n    strings={global.gActivityStreamStrings} />\n</Provider>, document.getElementById(\"root\"));\n\naddSnippetsSubscriber(store);\n","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nthis.MAIN_MESSAGE_TYPE = \"ActivityStream:Main\";\nthis.CONTENT_MESSAGE_TYPE = \"ActivityStream:Content\";\nthis.PRELOAD_MESSAGE_TYPE = \"ActivityStream:PreloadedBrowser\";\nthis.UI_CODE = 1;\nthis.BACKGROUND_PROCESS = 2;\n\n/**\n * globalImportContext - Are we in UI code (i.e. react, a dom) or some kind of background process?\n *                       Use this in action creators if you need different logic\n *                       for ui/background processes.\n */\nconst globalImportContext = typeof Window === \"undefined\" ? BACKGROUND_PROCESS : UI_CODE;\n// Export for tests\nthis.globalImportContext = globalImportContext;\n\n// Create an object that avoids accidental differing key/value pairs:\n// {\n//   INIT: \"INIT\",\n//   UNINIT: \"UNINIT\"\n// }\nconst actionTypes = {};\nfor (const type of [\n  \"ADDONS_INFO_REQUEST\",\n  \"ADDONS_INFO_RESPONSE\",\n  \"ARCHIVE_FROM_POCKET\",\n  \"AS_ROUTER_TELEMETRY_USER_EVENT\",\n  \"BLOCK_URL\",\n  \"BOOKMARK_URL\",\n  \"COPY_DOWNLOAD_LINK\",\n  \"DELETE_BOOKMARK_BY_ID\",\n  \"DELETE_FROM_POCKET\",\n  \"DELETE_HISTORY_URL\",\n  \"DIALOG_CANCEL\",\n  \"DIALOG_OPEN\",\n  \"DISABLE_ONBOARDING\",\n  \"DOWNLOAD_CHANGED\",\n  \"INIT\",\n  \"MIGRATION_CANCEL\",\n  \"MIGRATION_COMPLETED\",\n  \"MIGRATION_START\",\n  \"NEW_TAB_INIT\",\n  \"NEW_TAB_INITIAL_STATE\",\n  \"NEW_TAB_LOAD\",\n  \"NEW_TAB_REHYDRATED\",\n  \"NEW_TAB_STATE_REQUEST\",\n  \"NEW_TAB_UNLOAD\",\n  \"OPEN_DOWNLOAD_FILE\",\n  \"OPEN_LINK\",\n  \"OPEN_NEW_WINDOW\",\n  \"OPEN_PRIVATE_WINDOW\",\n  \"OPEN_WEBEXT_SETTINGS\",\n  \"PAGE_PRERENDERED\",\n  \"PLACES_BOOKMARK_ADDED\",\n  \"PLACES_BOOKMARK_REMOVED\",\n  \"PLACES_HISTORY_CLEARED\",\n  \"PLACES_LINKS_CHANGED\",\n  \"PLACES_LINK_BLOCKED\",\n  \"PLACES_LINK_DELETED\",\n  \"PLACES_SAVED_TO_POCKET\",\n  \"PREFS_INITIAL_VALUES\",\n  \"PREF_CHANGED\",\n  \"PREVIEW_REQUEST\",\n  \"PREVIEW_REQUEST_CANCEL\",\n  \"PREVIEW_RESPONSE\",\n  \"REMOVE_DOWNLOAD_FILE\",\n  \"RICH_ICON_MISSING\",\n  \"SAVE_SESSION_PERF_DATA\",\n  \"SAVE_TO_POCKET\",\n  \"SCREENSHOT_UPDATED\",\n  \"SECTION_DEREGISTER\",\n  \"SECTION_DISABLE\",\n  \"SECTION_ENABLE\",\n  \"SECTION_MOVE\",\n  \"SECTION_OPTIONS_CHANGED\",\n  \"SECTION_REGISTER\",\n  \"SECTION_UPDATE\",\n  \"SECTION_UPDATE_CARD\",\n  \"SETTINGS_CLOSE\",\n  \"SETTINGS_OPEN\",\n  \"SET_PREF\",\n  \"SHOW_DOWNLOAD_FILE\",\n  \"SHOW_FIREFOX_ACCOUNTS\",\n  \"SKIPPED_SIGNIN\",\n  \"SNIPPETS_BLOCKLIST_CLEARED\",\n  \"SNIPPETS_BLOCKLIST_UPDATED\",\n  \"SNIPPETS_DATA\",\n  \"SNIPPETS_RESET\",\n  \"SNIPPET_BLOCKED\",\n  \"SUBMIT_EMAIL\",\n  \"SYSTEM_TICK\",\n  \"TELEMETRY_IMPRESSION_STATS\",\n  \"TELEMETRY_PERFORMANCE_EVENT\",\n  \"TELEMETRY_UNDESIRED_EVENT\",\n  \"TELEMETRY_USER_EVENT\",\n  \"TOP_SITES_CANCEL_EDIT\",\n  \"TOP_SITES_EDIT\",\n  \"TOP_SITES_INSERT\",\n  \"TOP_SITES_PIN\",\n  \"TOP_SITES_PREFS_UPDATED\",\n  \"TOP_SITES_UNPIN\",\n  \"TOP_SITES_UPDATED\",\n  \"TOTAL_BOOKMARKS_REQUEST\",\n  \"TOTAL_BOOKMARKS_RESPONSE\",\n  \"UNINIT\",\n  \"UPDATE_SECTION_PREFS\",\n  \"WEBEXT_CLICK\",\n  \"WEBEXT_DISMISS\"\n]) {\n  actionTypes[type] = type;\n}\n\n// These are acceptable actions for AS Router messages to have. They can show up\n// as call-to-action buttons in snippets, onboarding tour, etc.\nconst ASRouterActions = {};\nfor (const type of [\n  \"OPEN_PRIVATE_BROWSER_WINDOW\",\n  \"OPEN_URL\",\n  \"OPEN_ABOUT_PAGE\"\n]) {\n  ASRouterActions[type] = type;\n}\n\n// Helper function for creating routed actions between content and main\n// Not intended to be used by consumers\nfunction _RouteMessage(action, options) {\n  const meta = action.meta ? {...action.meta} : {};\n  if (!options || !options.from || !options.to) {\n    throw new Error(\"Routed Messages must have options as the second parameter, and must at least include a .from and .to property.\");\n  }\n  // For each of these fields, if they are passed as an option,\n  // add them to the action. If they are not defined, remove them.\n  [\"from\", \"to\", \"toTarget\", \"fromTarget\", \"skipMain\", \"skipLocal\"].forEach(o => {\n    if (typeof options[o] !== \"undefined\") {\n      meta[o] = options[o];\n    } else if (meta[o]) {\n      delete meta[o];\n    }\n  });\n  return {...action, meta};\n}\n\n/**\n * AlsoToMain - Creates a message that will be dispatched locally and also sent to the Main process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {bool}   skipLocal Used by OnlyToMain to skip the main reducer\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToMain(action, fromTarget, skipLocal) {\n  return _RouteMessage(action, {\n    from: CONTENT_MESSAGE_TYPE,\n    to: MAIN_MESSAGE_TYPE,\n    fromTarget,\n    skipLocal\n  });\n}\n\n/**\n * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {object} options\n * @param  {string} fromTarget The id of the content port from which the action originated. (optional)\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToMain(action, fromTarget) {\n  return AlsoToMain(action, fromTarget, true);\n}\n\n/**\n * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction BroadcastToContent(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE\n  });\n}\n\n/**\n * AlsoToOneContent - Creates a message that will be will be dispatched to the main store\n *                    and also sent to a particular Content process.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @param  {bool} skipMain Used by OnlyToOneContent to skip the main process\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToOneContent(action, target, skipMain) {\n  if (!target) {\n    throw new Error(\"You must provide a target ID as the second parameter of AlsoToOneContent. If you want to send to all content processes, use BroadcastToContent\");\n  }\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: CONTENT_MESSAGE_TYPE,\n    toTarget: target,\n    skipMain\n  });\n}\n\n/**\n * OnlyToOneContent - Creates a message that will be sent to a particular Content process\n *                    and skip the main reducer.\n *\n * @param  {object} action Any redux action (required)\n * @param  {string} target The id of a content port\n * @return {object} An action with added .meta properties\n */\nfunction OnlyToOneContent(action, target) {\n  return AlsoToOneContent(action, target, true);\n}\n\n/**\n * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.\n *\n * @param  {object} action Any redux action (required)\n * @return {object} An action with added .meta properties\n */\nfunction AlsoToPreloaded(action) {\n  return _RouteMessage(action, {\n    from: MAIN_MESSAGE_TYPE,\n    to: PRELOAD_MESSAGE_TYPE\n  });\n}\n\n/**\n * UserEvent - A telemetry ping indicating a user action. This should only\n *                   be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction UserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.TELEMETRY_USER_EVENT,\n    data\n  });\n}\n\n/**\n * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only\n *                     be sent from the UI during a user session.\n *\n * @param  {object} data Fields to include in the ping (source, etc.)\n * @return {object} An AlsoToMain action\n */\nfunction ASRouterUserEvent(data) {\n  return AlsoToMain({\n    type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,\n    data\n  });\n}\n\n/**\n * UndesiredEvent - A telemetry ping indicating an undesired state.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction UndesiredEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_UNDESIRED_EVENT,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * PerfEvent - A telemetry ping indicating a performance-related event.\n *\n * @param  {object} data Fields to include in the ping (value, etc.)\n * @param  {int} importContext (For testing) Override the import context for testing.\n * @return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction PerfEvent(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_PERFORMANCE_EVENT,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\n/**\n * ImpressionStats - A telemetry ping indicating an impression stats.\n *\n * @param  {object} data Fields to include in the ping\n * @param  {int} importContext (For testing) Override the import context for testing.\n * #return {object} An action. For UI code, a AlsoToMain action.\n */\nfunction ImpressionStats(data, importContext = globalImportContext) {\n  const action = {\n    type: actionTypes.TELEMETRY_IMPRESSION_STATS,\n    data\n  };\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction SetPref(name, value, importContext = globalImportContext) {\n  const action = {type: actionTypes.SET_PREF, data: {name, value}};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nfunction WebExtEvent(type, data, importContext = globalImportContext) {\n  if (!data || !data.source) {\n    throw new Error(\"WebExtEvent actions should include a property \\\"source\\\", the id of the webextension that should receive the event.\");\n  }\n  const action = {type, data};\n  return importContext === UI_CODE ? AlsoToMain(action) : action;\n}\n\nthis.actionTypes = actionTypes;\nthis.ASRouterActions = ASRouterActions;\n\nthis.actionCreators = {\n  BroadcastToContent,\n  UserEvent,\n  ASRouterUserEvent,\n  UndesiredEvent,\n  PerfEvent,\n  ImpressionStats,\n  AlsoToOneContent,\n  OnlyToOneContent,\n  AlsoToMain,\n  OnlyToMain,\n  AlsoToPreloaded,\n  SetPref,\n  WebExtEvent\n};\n\n// These are helpers to test for certain kinds of actions\nthis.actionUtils = {\n  isSendToMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === MAIN_MESSAGE_TYPE && action.meta.from === CONTENT_MESSAGE_TYPE;\n  },\n  isBroadcastToContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && !action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToOneContent(action) {\n    if (!action.meta) {\n      return false;\n    }\n    if (action.meta.to === CONTENT_MESSAGE_TYPE && action.meta.toTarget) {\n      return true;\n    }\n    return false;\n  },\n  isSendToPreloaded(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.to === PRELOAD_MESSAGE_TYPE &&\n      action.meta.from === MAIN_MESSAGE_TYPE;\n  },\n  isFromMain(action) {\n    if (!action.meta) {\n      return false;\n    }\n    return action.meta.from === MAIN_MESSAGE_TYPE &&\n      action.meta.to === CONTENT_MESSAGE_TYPE;\n  },\n  getPortIdOfSender(action) {\n    return (action.meta && action.meta.fromTarget) || null;\n  },\n  _RouteMessage\n};\n\nconst EXPORTED_SYMBOLS = [\n  \"actionTypes\",\n  \"actionCreators\",\n  \"actionUtils\",\n  \"ASRouterActions\",\n  \"globalImportContext\",\n  \"UI_CODE\",\n  \"BACKGROUND_PROCESS\",\n  \"MAIN_MESSAGE_TYPE\",\n  \"CONTENT_MESSAGE_TYPE\",\n  \"PRELOAD_MESSAGE_TYPE\"\n];\n","const DATABASE_NAME = \"snippets_db\";\nconst DATABASE_VERSION = 1;\nconst SNIPPETS_OBJECTSTORE_NAME = \"snippets\";\nexport const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours.\n\nconst SNIPPETS_ENABLED_EVENT = \"Snippets:Enabled\";\nconst SNIPPETS_DISABLED_EVENT = \"Snippets:Disabled\";\n\nimport {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {ASRouterContent} from \"content-src/asrouter/asrouter-content\";\n\n/**\n * SnippetsMap - A utility for cacheing values related to the snippet. It has\n *               the same interface as a Map, but is optionally backed by\n *               indexedDB for persistent storage.\n *               Call .connect() to open a database connection and restore any\n *               previously cached data, if necessary.\n *\n */\nexport class SnippetsMap extends Map {\n  constructor(dispatch) {\n    super();\n    this._db = null;\n    this._dispatch = dispatch;\n  }\n\n  set(key, value) {\n    super.set(key, value);\n    return this._dbTransaction(db => db.put(value, key));\n  }\n\n  delete(key) {\n    super.delete(key);\n    return this._dbTransaction(db => db.delete(key));\n  }\n\n  clear() {\n    super.clear();\n    this._dispatch(ac.OnlyToMain({type: at.SNIPPETS_BLOCKLIST_CLEARED}));\n    return this._dbTransaction(db => db.clear());\n  }\n\n  get blockList() {\n    return this.get(\"blockList\") || [];\n  }\n\n  /**\n   * blockSnippetById - Blocks a snippet given an id\n   *\n   * @param  {str|int} id   The id of the snippet\n   * @return {Promise}      Resolves when the id has been written to indexedDB,\n   *                        or immediately if the snippetMap is not connected\n   */\n  async blockSnippetById(id) {\n    if (!id) {\n      return;\n    }\n    const {blockList} = this;\n    if (!blockList.includes(id)) {\n      blockList.push(id);\n      this._dispatch(ac.AlsoToMain({type: at.SNIPPETS_BLOCKLIST_UPDATED, data: id}));\n      await this.set(\"blockList\", blockList);\n    }\n  }\n\n  disableOnboarding() {\n    this._dispatch(ac.AlsoToMain({type: at.DISABLE_ONBOARDING}));\n  }\n\n  showFirefoxAccounts() {\n    this._dispatch(ac.AlsoToMain({type: at.SHOW_FIREFOX_ACCOUNTS}));\n  }\n\n  getTotalBookmarksCount() {\n    return new Promise(resolve => {\n      this._dispatch(ac.OnlyToMain({type: at.TOTAL_BOOKMARKS_REQUEST}));\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n        if (action.type === at.TOTAL_BOOKMARKS_RESPONSE) {\n          resolve(action.data);\n          global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n        }\n      });\n    });\n  }\n\n  getAddonsInfo() {\n    return new Promise(resolve => {\n      this._dispatch(ac.OnlyToMain({type: at.ADDONS_INFO_REQUEST}));\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", function onMessage({data: action}) {\n        if (action.type === at.ADDONS_INFO_RESPONSE) {\n          resolve(action.data);\n          global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", onMessage);\n        }\n      });\n    });\n  }\n\n  /**\n   * connect - Attaches an indexedDB back-end to the Map so that any set values\n   *           are also cached in a store. It also restores any existing values\n   *           that are already stored in the indexedDB store.\n   *\n   * @return {type}  description\n   */\n  async connect() {\n    // Open the connection\n    const db = await this._openDB();\n\n    // Restore any existing values\n    await this._restoreFromDb(db);\n\n    // Attach a reference to the db\n    this._db = db;\n  }\n\n  /**\n   * _dbTransaction - Returns a db transaction wrapped with the given modifier\n   *                  function as a Promise. If the db has not been connected,\n   *                  it resolves immediately.\n   *\n   * @param  {func} modifier A function to call with the transaction\n   * @return {obj}           A Promise that resolves when the transaction has\n   *                         completed or errored\n   */\n  _dbTransaction(modifier) {\n    if (!this._db) {\n      return Promise.resolve();\n    }\n    return new Promise((resolve, reject) => {\n      const transaction = modifier(\n        this._db\n          .transaction(SNIPPETS_OBJECTSTORE_NAME, \"readwrite\")\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME)\n      );\n      transaction.onsuccess = event => resolve();\n\n      /* istanbul ignore next */\n      transaction.onerror = event => reject(transaction.error);\n    });\n  }\n\n  _openDB() {\n    return new Promise((resolve, reject) => {\n      const openRequest = indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n\n      /* istanbul ignore next */\n      openRequest.onerror = event => {\n        // Try to delete the old database so that we can start this process over\n        // next time.\n        indexedDB.deleteDatabase(DATABASE_NAME);\n        reject(event);\n      };\n\n      openRequest.onupgradeneeded = event => {\n        const db = event.target.result;\n        if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) {\n          db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME);\n        }\n      };\n\n      openRequest.onsuccess = event => {\n        let db = event.target.result;\n\n        /* istanbul ignore next */\n        db.onerror = err => console.error(err); // eslint-disable-line no-console\n        /* istanbul ignore next */\n        db.onversionchange = versionChangeEvent => versionChangeEvent.target.close();\n\n        resolve(db);\n      };\n    });\n  }\n\n  _restoreFromDb(db) {\n    return new Promise((resolve, reject) => {\n      let cursorRequest;\n      try {\n        cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME)\n          .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor();\n      } catch (err) {\n        // istanbul ignore next\n        reject(err);\n        // istanbul ignore next\n        return;\n      }\n\n      /* istanbul ignore next */\n      cursorRequest.onerror = event => reject(event);\n\n      cursorRequest.onsuccess = event => {\n        let cursor = event.target.result;\n        // Populate the cache from the persistent storage.\n        if (cursor) {\n          if (cursor.value !== \"blockList\") {\n            this.set(cursor.key, cursor.value);\n          }\n          cursor.continue();\n        } else {\n          // We are done.\n          resolve();\n        }\n      };\n    });\n  }\n}\n\n/**\n * SnippetsProvider - Initializes a SnippetsMap and loads snippets from a\n *                    remote location, or else default snippets if the remote\n *                    snippets cannot be retrieved.\n */\nexport class SnippetsProvider {\n  constructor(dispatch) {\n    // Initialize the Snippets Map and attaches it to a global so that\n    // the snippet payload can interact with it.\n    global.gSnippetsMap = new SnippetsMap(dispatch);\n    this._onAction = this._onAction.bind(this);\n  }\n\n  get snippetsMap() {\n    return global.gSnippetsMap;\n  }\n\n  async _refreshSnippets() {\n    // Check if the cached version of of the snippets in snippetsMap. If it's too\n    // old, blow away the entire snippetsMap.\n    const cachedVersion = this.snippetsMap.get(\"snippets-cached-version\");\n\n    if (cachedVersion !== this.appData.version) {\n      this.snippetsMap.clear();\n    }\n\n    // Has enough time passed for us to require an update?\n    const lastUpdate = this.snippetsMap.get(\"snippets-last-update\");\n    const needsUpdate = !(lastUpdate >= 0) || Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS;\n\n    if (needsUpdate && this.appData.snippetsURL) {\n      this.snippetsMap.set(\"snippets-last-update\", Date.now());\n      try {\n        const response = await fetch(this.appData.snippetsURL);\n        if (response.status === 200) {\n          const payload = await response.text();\n\n          this.snippetsMap.set(\"snippets\", payload);\n          this.snippetsMap.set(\"snippets-cached-version\", this.appData.version);\n        }\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n  }\n\n  _noSnippetFallback() {\n    // TODO\n  }\n\n  _forceOnboardingVisibility(shouldBeVisible) {\n    const onboardingEl = document.getElementById(\"onboarding-notification-bar\");\n\n    if (onboardingEl) {\n      onboardingEl.style.display = shouldBeVisible ? \"\" : \"none\";\n    }\n  }\n\n  _showRemoteSnippets() {\n    const snippetsEl = document.getElementById(this.elementId);\n    const payload = this.snippetsMap.get(\"snippets\");\n\n    if (!snippetsEl) {\n      throw new Error(`No element was found with id '${this.elementId}'.`);\n    }\n\n    // This could happen if fetching failed\n    if (!payload) {\n      throw new Error(\"No remote snippets were found in gSnippetsMap.\");\n    }\n\n    if (typeof payload !== \"string\") {\n      throw new Error(\"Snippet payload was incorrectly formatted\");\n    }\n\n    // Note that injecting snippets can throw if they're invalid XML.\n    // eslint-disable-next-line no-unsanitized/property\n    snippetsEl.innerHTML = payload;\n\n    // Scripts injected by innerHTML are inactive, so we have to relocate them\n    // through DOM manipulation to activate their contents.\n    for (const scriptEl of snippetsEl.getElementsByTagName(\"script\")) {\n      const relocatedScript = document.createElement(\"script\");\n      relocatedScript.text = scriptEl.text;\n      scriptEl.parentNode.replaceChild(relocatedScript, scriptEl);\n    }\n  }\n\n  _onAction(msg) {\n    if (msg.data.type === at.SNIPPET_BLOCKED) {\n      if (!this.snippetsMap.blockList.includes(msg.data.data)) {\n        this.snippetsMap.set(\"blockList\", this.snippetsMap.blockList.concat(msg.data.data));\n        document.getElementById(\"snippets-container\").style.display = \"none\";\n      }\n    }\n  }\n\n  /**\n   * init - Fetch the snippet payload and show snippets\n   *\n   * @param  {obj} options\n   * @param  {str} options.appData.snippetsURL  The URL from which we fetch snippets\n   * @param  {int} options.appData.version  The current snippets version\n   * @param  {str} options.elementId  The id of the element in which to inject snippets\n   * @param  {bool} options.connect  Should gSnippetsMap connect to indexedDB?\n   */\n  async init(options) {\n    Object.assign(this, {\n      appData: {},\n      elementId: \"snippets\",\n      connect: true\n    }, options);\n\n    // Add listener so we know when snippets are blocked on other pages\n    if (global.RPMAddMessageListener) {\n      global.RPMAddMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n\n    // TODO: Requires enabling indexedDB on newtab\n    // Restore the snippets map from indexedDB\n    if (this.connect) {\n      try {\n        await this.snippetsMap.connect();\n      } catch (e) {\n        console.error(e); // eslint-disable-line no-console\n      }\n    }\n\n    // Cache app data values so they can be accessible from gSnippetsMap\n    for (const key of Object.keys(this.appData)) {\n      if (key === \"blockList\") {\n        this.snippetsMap.set(\"blockList\", this.appData[key]);\n      } else {\n        this.snippetsMap.set(`appData.${key}`, this.appData[key]);\n      }\n    }\n\n    // Refresh snippets, if enough time has passed.\n    await this._refreshSnippets();\n\n    // Try showing remote snippets, falling back to defaults if necessary.\n    try {\n      this._showRemoteSnippets();\n    } catch (e) {\n      this._noSnippetFallback(e);\n    }\n\n    window.dispatchEvent(new Event(SNIPPETS_ENABLED_EVENT));\n\n    this._forceOnboardingVisibility(true);\n    this.initialized = true;\n  }\n\n  uninit() {\n    window.dispatchEvent(new Event(SNIPPETS_DISABLED_EVENT));\n    this._forceOnboardingVisibility(false);\n    if (global.RPMRemoveMessageListener) {\n      global.RPMRemoveMessageListener(\"ActivityStream:MainToContent\", this._onAction);\n    }\n    this.initialized = false;\n  }\n}\n\n/**\n * addSnippetsSubscriber - Creates a SnippetsProvider that Initializes\n *                         when the store has received the appropriate\n *                         Snippet data.\n *\n * @param  {obj} store   The redux store\n * @return {obj}         Returns the snippets instance, asrouterContent instance and unsubscribe function\n */\nexport function addSnippetsSubscriber(store) {\n  const snippets = new SnippetsProvider(store.dispatch);\n  const asrouterContent = new ASRouterContent();\n\n  let initializing = false;\n\n  store.subscribe(async () => {\n    const state = store.getState();\n    const isASRouterEnabled = state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values.asrouterOnboardingCohort > 0;\n    // state.Prefs.values[\"feeds.snippets\"]:  Should snippets be shown?\n    // state.Snippets.initialized             Is the snippets data initialized?\n    // snippets.initialized:                  Is SnippetsProvider currently initialised?\n    if (state.Prefs.values[\"feeds.snippets\"] &&\n      // If the message center experiment is enabled, don't show snippets\n      !isASRouterEnabled &&\n      !state.Prefs.values.disableSnippets &&\n      state.Snippets.initialized &&\n      !snippets.initialized &&\n      // Don't call init multiple times\n      !initializing &&\n      location.href !== \"about:welcome\"\n    ) {\n      initializing = true;\n      await snippets.init({appData: state.Snippets});\n      initializing = false;\n    } else if (\n      (state.Prefs.values[\"feeds.snippets\"] === false ||\n        state.Prefs.values.disableSnippets === true) &&\n      snippets.initialized\n    ) {\n      snippets.uninit();\n    }\n\n    // Turn on AS Router snippets if the experiment is enabled and the snippets pref is on;\n    // otherwise, turn it off.\n    if (\n      (state.Prefs.values.asrouterExperimentEnabled || state.Prefs.values.asrouterOnboardingCohort > 0) &&\n      state.Prefs.values[\"feeds.snippets\"] &&\n      !asrouterContent.initialized) {\n      asrouterContent.init();\n    } else if (\n      ((!state.Prefs.values.asrouterExperimentEnabled && state.Prefs.values.asrouterOnboardingCohort === 0) || !state.Prefs.values[\"feeds.snippets\"]) &&\n      asrouterContent.initialized\n    ) {\n      asrouterContent.uninit();\n    }\n  });\n\n  // These values are returned for testing purposes\n  return {snippets, asrouterContent};\n}\n","import {actionCreators as ac, ASRouterActions as ra} from \"common/Actions.jsm\";\nimport {LocalizationProvider, Localized} from \"fluent-react\";\nimport {OUTGOING_MESSAGE_NAME as AS_GENERAL_OUTGOING_MESSAGE_NAME} from \"content-src/lib/init-store\";\nimport {ImpressionsWrapper} from \"./components/ImpressionsWrapper/ImpressionsWrapper\";\nimport {MessageContext} from \"fluent\";\nimport {OnboardingMessage} from \"./templates/OnboardingMessage/OnboardingMessage\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {safeURI} from \"./template-utils\";\nimport {SimpleSnippet} from \"./templates/SimpleSnippet/SimpleSnippet\";\n\nconst INCOMING_MESSAGE_NAME = \"ASRouter:parent-to-child\";\nconst OUTGOING_MESSAGE_NAME = \"ASRouter:child-to-parent\";\n\nexport const ASRouterUtils = {\n  addListener(listener) {\n    global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  removeListener(listener) {\n    global.RPMRemoveMessageListener(INCOMING_MESSAGE_NAME, listener);\n  },\n  sendMessage(action) {\n    global.RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  },\n  blockById(id) {\n    ASRouterUtils.sendMessage({type: \"BLOCK_MESSAGE_BY_ID\", data: {id}});\n  },\n  blockBundle(bundle) {\n    ASRouterUtils.sendMessage({type: \"BLOCK_BUNDLE\", data: {bundle}});\n  },\n  executeAction({button_action, button_action_params}) {\n    if (button_action in ra) {\n      ASRouterUtils.sendMessage({type: button_action, data: {button_action_params}});\n    }\n  },\n  unblockById(id) {\n    ASRouterUtils.sendMessage({type: \"UNBLOCK_MESSAGE_BY_ID\", data: {id}});\n  },\n  unblockBundle(bundle) {\n    ASRouterUtils.sendMessage({type: \"UNBLOCK_BUNDLE\", data: {bundle}});\n  },\n  getNextMessage() {\n    ASRouterUtils.sendMessage({type: \"GET_NEXT_MESSAGE\"});\n  },\n  overrideMessage(id) {\n    ASRouterUtils.sendMessage({type: \"OVERRIDE_MESSAGE\", data: {id}});\n  },\n  sendTelemetry(ping) {\n    const payload = ac.ASRouterUserEvent(ping);\n    global.RPMSendAsyncMessage(AS_GENERAL_OUTGOING_MESSAGE_NAME, payload);\n  },\n  getEndpoint() {\n    if (window.location.href.includes(\"endpoint\")) {\n      const params = new URLSearchParams(window.location.href.slice(window.location.href.indexOf(\"endpoint\")));\n      try {\n        const endpoint = new URL(params.get(\"endpoint\"));\n        return {\n          url: endpoint.href,\n          snippetId: params.get(\"snippetId\")\n        };\n      } catch (e) {}\n    }\n\n    return null;\n  }\n};\n\n// Note: nextProps/prevProps refer to props passed to <ImpressionsWrapper />, not <ASRouterUISurface />\nfunction shouldSendImpressionOnUpdate(nextProps, prevProps) {\n  return (nextProps.message.id && (!prevProps.message || prevProps.message.id !== nextProps.message.id));\n}\n\nfunction generateMessages(content) {\n  const cx = new MessageContext(\"en-US\");\n  cx.addMessages(`RichTextSnippet = ${content}`);\n  return [cx];\n}\n\n// Elements allowed in snippet content\nconst ALLOWED_TAGS = {\n  b: <b />,\n  i: <i />,\n  u: <u />,\n  strong: <strong />,\n  em: <em />,\n  br: <br />\n};\n\n/**\n * Transform an object (tag name: {url}) into (tag name: anchor) where the url\n * is used as href, in order to render links inside a Fluent.Localized component.\n */\nexport function convertLinks(links, sendClick) {\n  if (links) {\n    return Object.keys(links).reduce((acc, linkTag) => {\n      acc[linkTag] = <a href={safeURI(links[linkTag].url)} data-metric={links[linkTag].metric} onClick={sendClick} />;\n      return acc;\n    }, {});\n  }\n\n  return null;\n}\n\n/**\n * Message wrapper used to sanitize markup and render HTML.\n */\nfunction RichText(props) {\n  return (\n    <Localized id=\"RichTextSnippet\" {...ALLOWED_TAGS} {...convertLinks(props.links, props.sendClick)}>\n      <span>{props.text}</span>\n    </Localized>\n  );\n}\n\nexport class ASRouterUISurface extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessageFromParent = this.onMessageFromParent.bind(this);\n    this.sendClick = this.sendClick.bind(this);\n    this.sendImpression = this.sendImpression.bind(this);\n    this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);\n    this.state = {message: {}, bundle: {}};\n  }\n\n  sendUserActionTelemetry(extraProps = {}) {\n    const {message, bundle} = this.state;\n    if (!message && !extraProps.message_id) {\n      throw new Error(`You must provide a message_id for bundled messages`);\n    }\n    const eventType = `${message.provider || bundle.provider}_user_event`;\n    ASRouterUtils.sendTelemetry({\n      message_id: message.id || extraProps.message_id,\n      source: extraProps.id,\n      action: eventType,\n      ...extraProps\n    });\n  }\n\n  sendImpression(extraProps) {\n    this.sendUserActionTelemetry({event: \"IMPRESSION\", ...extraProps});\n  }\n\n  // If link has a `metric` data attribute send it as part of the `value`\n  // telemetry field which can have arbitrary values.\n  // Used for router messages with links as part of the content.\n  sendClick(event) {\n    const metric = {\n      value: event.target.dataset.metric,\n      // Used for the `source` of the event. Needed to differentiate\n      // from other snippet or onboarding events that may occur.\n      id: \"NEWTAB_FOOTER_BAR_CONTENT\"\n    };\n    this.sendUserActionTelemetry({event: \"CLICK_BUTTON\", ...metric});\n  }\n\n  onBlockById(id) {\n    return () => ASRouterUtils.blockById(id);\n  }\n\n  clearBundle(bundle) {\n    return () => ASRouterUtils.blockBundle(bundle);\n  }\n\n  onMessageFromParent({data: action}) {\n    switch (action.type) {\n      case \"SET_MESSAGE\":\n        this.setState({message: action.data});\n        break;\n      case \"SET_BUNDLED_MESSAGES\":\n        this.setState({bundle: action.data});\n        break;\n      case \"CLEAR_MESSAGE\":\n        if (action.data.id === this.state.message.id) {\n          this.setState({message: {}});\n        }\n        break;\n      case \"CLEAR_BUNDLE\":\n        if (this.state.bundle.bundle) {\n          this.setState({bundle: {}});\n        }\n        break;\n      case \"CLEAR_ALL\":\n        this.setState({message: {}, bundle: {}});\n    }\n  }\n\n  componentWillMount() {\n    const endpoint = ASRouterUtils.getEndpoint();\n    ASRouterUtils.addListener(this.onMessageFromParent);\n\n    // If we are loading about:welcome we want to trigger the onboarding messages\n    if (this.props.document.location.href === \"about:welcome\") {\n      ASRouterUtils.sendMessage({type: \"TRIGGER\", data: {trigger: \"firstRun\"}});\n    } else {\n      ASRouterUtils.sendMessage({type: \"CONNECT_UI_REQUEST\", data: {endpoint}});\n    }\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessageFromParent);\n  }\n\n  renderSnippets() {\n    return (\n      <ImpressionsWrapper\n        id=\"NEWTAB_FOOTER_BAR\"\n        message={this.state.message}\n        sendImpression={this.sendImpression}\n        shouldSendImpressionOnUpdate={shouldSendImpressionOnUpdate}\n        // This helps with testing\n        document={this.props.document}>\n          <LocalizationProvider messages={generateMessages(this.state.message.content.text)}>\n            <SimpleSnippet\n              {...this.state.message}\n              richText={<RichText text={this.state.message.content.text}\n                                  links={this.state.message.content.links}\n                                  sendClick={this.sendClick} />}\n              UISurface=\"NEWTAB_FOOTER_BAR\"\n              getNextMessage={ASRouterUtils.getNextMessage}\n              onBlock={this.onBlockById(this.state.message.id)}\n              sendUserActionTelemetry={this.sendUserActionTelemetry} />\n          </LocalizationProvider>\n      </ImpressionsWrapper>);\n  }\n\n  renderOnboarding() {\n    return (\n      <OnboardingMessage\n        {...this.state.bundle}\n        UISurface=\"NEWTAB_OVERLAY\"\n        onAction={ASRouterUtils.executeAction}\n        onDoneButton={this.clearBundle(this.state.bundle.bundle)}\n        getNextMessage={ASRouterUtils.getNextMessage}\n        sendUserActionTelemetry={this.sendUserActionTelemetry} />);\n  }\n\n  render() {\n    const {message, bundle} = this.state;\n    if (!message.id && !bundle.template) { return null; }\n    if (bundle.template === \"onboarding\") { return this.renderOnboarding(); }\n    return this.renderSnippets();\n  }\n}\n\nASRouterUISurface.defaultProps = {document: global.document};\n\nexport class ASRouterContent {\n  constructor() {\n    this.initialized = false;\n    this.containerElement = null;\n  }\n\n  _mount() {\n    this.containerElement = global.document.getElementById(\"snippets-container\");\n    ReactDOM.render(<ASRouterUISurface />, this.containerElement);\n  }\n\n  _unmount() {\n    ReactDOM.unmountComponentAtNode(this.containerElement);\n  }\n\n  init() {\n    this._mount();\n    this.initialized = true;\n  }\n\n  uninit() {\n    if (this.initialized) {\n      this._unmount();\n      this.initialized = false;\n    }\n  }\n}\n","module.exports = React;","module.exports = PropTypes;","/* eslint-env mozilla/frame-script */\n\nimport {actionCreators as ac, actionTypes as at, actionUtils as au} from \"common/Actions.jsm\";\nimport {applyMiddleware, combineReducers, createStore} from \"redux\";\n\nexport const MERGE_STORE_ACTION = \"NEW_TAB_INITIAL_STATE\";\nexport const OUTGOING_MESSAGE_NAME = \"ActivityStream:ContentToMain\";\nexport const INCOMING_MESSAGE_NAME = \"ActivityStream:MainToContent\";\nexport const EARLY_QUEUED_ACTIONS = [at.SAVE_SESSION_PERF_DATA, at.PAGE_PRERENDERED];\n\n/**\n * A higher-order function which returns a reducer that, on MERGE_STORE action,\n * will return the action.data object merged into the previous state.\n *\n * For all other actions, it merely calls mainReducer.\n *\n * Because we want this to merge the entire state object, it's written as a\n * higher order function which takes the main reducer (itself often a call to\n * combineReducers) as a parameter.\n *\n * @param  {function} mainReducer reducer to call if action != MERGE_STORE_ACTION\n * @return {function}             a reducer that, on MERGE_STORE_ACTION action,\n *                                will return the action.data object merged\n *                                into the previous state, and the result\n *                                of calling mainReducer otherwise.\n */\nfunction mergeStateReducer(mainReducer) {\n  return (prevState, action) => {\n    if (action.type === MERGE_STORE_ACTION) {\n      return {...prevState, ...action.data};\n    }\n\n    return mainReducer(prevState, action);\n  };\n}\n\n/**\n * messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary\n */\nconst messageMiddleware = store => next => action => {\n  const skipLocal = action.meta && action.meta.skipLocal;\n  if (au.isSendToMain(action)) {\n    RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);\n  }\n  if (!skipLocal) {\n    next(action);\n  }\n};\n\nexport const rehydrationMiddleware = store => next => action => {\n  if (store._didRehydrate) {\n    return next(action);\n  }\n\n  const isMergeStoreAction = action.type === MERGE_STORE_ACTION;\n  const isRehydrationRequest = action.type === at.NEW_TAB_STATE_REQUEST;\n\n  if (isRehydrationRequest) {\n    store._didRequestInitialState = true;\n    return next(action);\n  }\n\n  if (isMergeStoreAction) {\n    store._didRehydrate = true;\n    return next(action);\n  }\n\n  // If init happened after our request was made, we need to re-request\n  if (store._didRequestInitialState && action.type === at.INIT) {\n    return next(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n  }\n\n  if (au.isBroadcastToContent(action) || au.isSendToOneContent(action) || au.isSendToPreloaded(action)) {\n    // Note that actions received before didRehydrate will not be dispatched\n    // because this could negatively affect preloading and the the state\n    // will be replaced by rehydration anyway.\n    return null;\n  }\n\n  return next(action);\n};\n\n/**\n * This middleware queues up all the EARLY_QUEUED_ACTIONS until it receives\n * the first action from main. This is useful for those actions for main which\n * require higher reliability, i.e. the action will not be lost in the case\n * that it gets sent before the main is ready to receive it. Conversely, any\n * actions allowed early are accepted to be ignorable or re-sendable.\n */\nexport const queueEarlyMessageMiddleware = store => next => action => {\n  if (store._receivedFromMain) {\n    next(action);\n  } else if (au.isFromMain(action)) {\n    next(action);\n    store._receivedFromMain = true;\n    // Sending out all the early actions as main is ready now\n    if (store._earlyActionQueue) {\n      store._earlyActionQueue.forEach(next);\n      store._earlyActionQueue = [];\n    }\n  } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {\n    store._earlyActionQueue = store._earlyActionQueue || [];\n    store._earlyActionQueue.push(action);\n  } else {\n    // Let any other type of action go through\n    next(action);\n  }\n};\n\n/**\n * initStore - Create a store and listen for incoming actions\n *\n * @param  {object} reducers An object containing Redux reducers\n * @param  {object} intialState (optional) The initial state of the store, if desired\n * @return {object}          A redux store\n */\nexport function initStore(reducers, initialState) {\n  const store = createStore(\n    mergeStateReducer(combineReducers(reducers)),\n    initialState,\n    global.RPMAddMessageListener && applyMiddleware(rehydrationMiddleware, queueEarlyMessageMiddleware, messageMiddleware)\n  );\n\n  store._didRehydrate = false;\n  store._didRequestInitialState = false;\n\n  if (global.RPMAddMessageListener) {\n    global.RPMAddMessageListener(INCOMING_MESSAGE_NAME, msg => {\n      try {\n        store.dispatch(msg.data);\n      } catch (ex) {\n        console.error(\"Content msg:\", msg, \"Dispatch error: \", ex); // eslint-disable-line no-console\n        dump(`Content msg: ${JSON.stringify(msg)}\\nDispatch error: ${ex}\\n${ex.stack}`);\n      }\n    });\n  }\n\n  return store;\n}\n","module.exports = Redux;","import React from \"react\";\n\nexport const VISIBLE = \"visible\";\nexport const VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\n/**\n * Component wrapper used to send telemetry pings on every impression.\n */\nexport class ImpressionsWrapper extends React.PureComponent {\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionOrAddListener() {\n    if (this.props.document.visibilityState === VISIBLE) {\n      this.props.sendImpression({id: this.props.id});\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (this.props.document.visibilityState === VISIBLE) {\n          this.props.sendImpression({id: this.props.id});\n          this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.sendOnMount) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {\n      this.sendImpressionOrAddListener();\n    }\n  }\n\n  render() {\n    return this.props.children;\n  }\n}\n\nImpressionsWrapper.defaultProps = {\n  document: global.document,\n  sendOnMount: true\n};\n","module.exports = ReactDOM;","export function safeURI(url) {\n  if (!url) {\n    return \"\";\n  }\n  const {protocol} = new URL(url);\n  const isAllowed = [\n    \"http:\",\n    \"https:\",\n    \"data:\",\n    \"resource:\",\n    \"chrome:\"\n  ].includes(protocol);\n  if (!isAllowed) {\n    console.warn(`The protocol ${protocol} is not allowed for template URLs.`); // eslint-disable-line no-console\n  }\n  return isAllowed ? url : \"\";\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {addLocaleData, injectIntl, IntlProvider} from \"react-intl\";\nimport {ASRouterAdmin} from \"content-src/components/ASRouterAdmin/ASRouterAdmin\";\nimport {ConfirmDialog} from \"content-src/components/ConfirmDialog/ConfirmDialog\";\nimport {connect} from \"react-redux\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport {ManualMigration} from \"content-src/components/ManualMigration/ManualMigration\";\nimport {PrerenderData} from \"common/PrerenderData.jsm\";\nimport React from \"react\";\nimport {Search} from \"content-src/components/Search/Search\";\nimport {Sections} from \"content-src/components/Sections/Sections\";\nimport {StartupOverlay} from \"content-src/components/StartupOverlay/StartupOverlay\";\n\nconst PrefsButton = injectIntl(props => (\n  <div className=\"prefs-button\">\n    <button className=\"icon icon-settings\" onClick={props.onClick} title={props.intl.formatMessage({id: \"settings_pane_button_label\"})} />\n  </div>\n));\n\n// Add the locale data for pluralization and relative-time formatting for now,\n// this just uses english locale data. We can make this more sophisticated if\n// more features are needed.\nfunction addLocaleDataForReactIntl(locale) {\n  addLocaleData([{locale, parentLocale: \"en\"}]);\n}\n\nexport class _Base extends React.PureComponent {\n  componentWillMount() {\n    const {App, locale} = this.props;\n    this.sendNewTabRehydrated(App);\n    addLocaleDataForReactIntl(locale);\n    if (this.props.isFirstrun) {\n      global.document.body.classList.add(\"welcome\");\n    }\n  }\n\n  componentDidMount() {\n    // Request state AFTER the first render to ensure we don't cause the\n    // prerendered DOM to be unmounted. Otherwise, NEW_TAB_STATE_REQUEST is\n    // dispatched right after the store is ready.\n    if (this.props.isPrerendered) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_STATE_REQUEST}));\n      this.props.dispatch(ac.AlsoToMain({type: at.PAGE_PRERENDERED}));\n    }\n  }\n\n  componentWillUnmount() {\n    this.updateTheme();\n  }\n\n  componentWillUpdate({App}) {\n    this.updateTheme();\n    this.sendNewTabRehydrated(App);\n  }\n\n  updateTheme() {\n    const bodyClassName = [\n      \"activity-stream\",\n      // If we skipped the about:welcome overlay and removed the CSS class\n      // we don't want to add it back to the Activity Stream view\n      document.body.classList.contains(\"welcome\") ? \"welcome\" : \"\"\n    ].filter(v => v).join(\" \");\n    global.document.body.className = bodyClassName;\n  }\n\n  // The NEW_TAB_REHYDRATED event is used to inform feeds that their\n  // data has been consumed e.g. for counting the number of tabs that\n  // have rendered that data.\n  sendNewTabRehydrated(App) {\n    if (App && App.initialized && !this.renderNotified) {\n      this.props.dispatch(ac.AlsoToMain({type: at.NEW_TAB_REHYDRATED, data: {}}));\n      this.renderNotified = true;\n    }\n  }\n\n  render() {\n    const {props} = this;\n    const {App, locale, strings} = props;\n    const {initialized} = App;\n\n    const prefs = props.Prefs.values;\n    if ((prefs.asrouterExperimentEnabled || prefs.asrouterOnboardingCohort > 0) && window.location.hash === \"#asrouter\") {\n      return (<ASRouterAdmin />);\n    }\n\n    if (!props.isPrerendered && !initialized) {\n      return null;\n    }\n\n    // Until we can delete the existing onboarding tour, just hide the onboarding button when users are in\n    // the new simplified onboarding experiment. CSS hacks ftw\n    if (prefs.asrouterOnboardingCohort > 0) {\n      global.document.body.classList.add(\"hide-onboarding\");\n    }\n\n    return (<IntlProvider locale={locale} messages={strings}>\n        <ErrorBoundary className=\"base-content-fallback\">\n          <BaseContent {...this.props} />\n        </ErrorBoundary>\n      </IntlProvider>);\n  }\n}\n\nexport class BaseContent extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.openPreferences = this.openPreferences.bind(this);\n  }\n\n  openPreferences() {\n    this.props.dispatch(ac.OnlyToMain({type: at.SETTINGS_OPEN}));\n    this.props.dispatch(ac.UserEvent({event: \"OPEN_NEWTAB_PREFS\"}));\n  }\n\n  render() {\n    const {props} = this;\n    const {App} = props;\n    const {initialized} = App;\n    const prefs = props.Prefs.values;\n\n    const shouldBeFixedToTop = PrerenderData.arePrefsValid(name => prefs[name]);\n\n    const outerClassName = [\n      \"outer-wrapper\",\n      shouldBeFixedToTop && \"fixed-to-top\"\n    ].filter(v => v).join(\" \");\n\n    return (\n      <div>\n        <div className={outerClassName}>\n          <main>\n            {prefs.showSearch &&\n              <div className=\"non-collapsible-section\">\n                <ErrorBoundary>\n                  <Search />\n                </ErrorBoundary>\n              </div>\n            }\n            <div className={`body-wrapper${(initialized ? \" on\" : \"\")}`}>\n              {!prefs.migrationExpired &&\n                <div className=\"non-collapsible-section\">\n                  <ManualMigration />\n                </div>\n                }\n              <Sections />\n              <PrefsButton onClick={this.openPreferences} />\n            </div>\n            <ConfirmDialog />\n          </main>\n        </div>\n        {this.props.isFirstrun && <StartupOverlay />}\n      </div>);\n  }\n}\n\nexport const Base = connect(state => ({App: state.App, Prefs: state.Prefs}))(_Base);\n","module.exports = ReactIntl;","import {ASRouterUtils} from \"../../asrouter/asrouter-content\";\nimport React from \"react\";\n\nexport class ASRouterAdmin extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onMessage = this.onMessage.bind(this);\n    this.findOtherBundledMessagesOfSameTemplate = this.findOtherBundledMessagesOfSameTemplate.bind(this);\n    this.state = {};\n  }\n\n  onMessage({data: action}) {\n    if (action.type === \"ADMIN_SET_STATE\") {\n      this.setState(action.data);\n    }\n  }\n\n  componentWillMount() {\n    const endpoint = ASRouterUtils.getEndpoint();\n    ASRouterUtils.sendMessage({type: \"ADMIN_CONNECT_STATE\", data: {endpoint}});\n    ASRouterUtils.addListener(this.onMessage);\n  }\n\n  componentWillUnmount() {\n    ASRouterUtils.removeListener(this.onMessage);\n  }\n\n  findOtherBundledMessagesOfSameTemplate(template) {\n    return this.state.messages.filter(msg => msg.template === template && msg.bundled);\n  }\n\n  handleBlock(msg) {\n    if (msg.bundled) {\n      // If we are blocking a message that belongs to a bundle, block all other messages that are bundled of that same template\n      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n      return () => ASRouterUtils.blockBundle(bundle);\n    }\n    return () => ASRouterUtils.blockById(msg.id);\n  }\n\n  handleUnblock(msg) {\n    if (msg.bundled) {\n      // If we are unblocking a message that belongs to a bundle, unblock all other messages that are bundled of that same template\n      let bundle = this.findOtherBundledMessagesOfSameTemplate(msg.template);\n      return () => ASRouterUtils.unblockBundle(bundle);\n    }\n    return () => ASRouterUtils.unblockById(msg.id);\n  }\n\n  handleOverride(id) {\n    return () => ASRouterUtils.overrideMessage(id);\n  }\n\n  renderMessageItem(msg) {\n    const isCurrent = msg.id === this.state.lastMessageId;\n    const isBlocked = this.state.blockList.includes(msg.id);\n\n    let itemClassName = \"message-item\";\n    if (isCurrent) { itemClassName += \" current\"; }\n    if (isBlocked) { itemClassName += \" blocked\"; }\n\n    return (<tr className={itemClassName} key={msg.id}>\n      <td className=\"message-id\"><span>{msg.id}</span></td>\n      <td>\n        <button className={`button ${(isBlocked ? \"\" : \" primary\")}`} onClick={isBlocked ? this.handleUnblock(msg) : this.handleBlock(msg)}>{isBlocked ? \"Unblock\" : \"Block\"}</button>\n       {isBlocked ? null : <button className=\"button\" onClick={this.handleOverride(msg.id)}>Show</button>}\n      </td>\n      <td className=\"message-summary\">\n        <pre>{JSON.stringify(msg, null, 2)}</pre>\n      </td>\n    </tr>);\n  }\n\n  renderMessages() {\n    if (!this.state.messages) {\n      return null;\n    }\n    return (<table><tbody>\n      {this.state.messages.map(msg => this.renderMessageItem(msg))}\n    </tbody></table>);\n  }\n\n  renderProviders() {\n    return (<table><tbody>\n      {this.state.providers.map((provider, i) => (<tr className=\"message-item\" key={i}>\n        <td>{provider.id}</td>\n        <td>{provider.type === \"remote\" ? <a target=\"_blank\" href={provider.url}>{provider.url}</a> : \"(local)\"}</td>\n      </tr>))}\n    </tbody></table>);\n  }\n\n  render() {\n    return (<div className=\"asrouter-admin outer-wrapper\">\n      <h1>AS Router Admin</h1>\n      <button className=\"button primary\" onClick={ASRouterUtils.getNextMessage}>Refresh Current Message</button>\n      <h2>Message Providers</h2>\n      {this.state.providers ? this.renderProviders() : null}\n      <h2>Messages</h2>\n      {this.renderMessages()}\n    </div>);\n  }\n}\n","import {actionCreators as ac, actionTypes} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * ConfirmDialog component.\n * One primary action button, one cancel button.\n *\n * Content displayed is controlled by `data` prop the component receives.\n * Example:\n * data: {\n *   // Any sort of data needed to be passed around by actions.\n *   payload: site.url,\n *   // Primary button AlsoToMain action.\n *   action: \"DELETE_HISTORY_URL\",\n *   // Primary button USerEvent action.\n *   userEvent: \"DELETE\",\n *   // Array of locale ids to display.\n *   message_body: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n *   // Text for primary button.\n *   confirm_button_string_id: \"menu_action_delete\"\n * },\n */\nexport class _ConfirmDialog extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this._handleCancelBtn = this._handleCancelBtn.bind(this);\n    this._handleConfirmBtn = this._handleConfirmBtn.bind(this);\n  }\n\n  _handleCancelBtn() {\n    this.props.dispatch({type: actionTypes.DIALOG_CANCEL});\n    this.props.dispatch(ac.UserEvent({event: actionTypes.DIALOG_CANCEL, source: this.props.data.eventSource}));\n  }\n\n  _handleConfirmBtn() {\n    this.props.data.onConfirm.forEach(this.props.dispatch);\n  }\n\n  _renderModalMessage() {\n    const message_body = this.props.data.body_string_id;\n\n    if (!message_body) {\n      return null;\n    }\n\n    return (<span>\n      {message_body.map(msg => <p key={msg}><FormattedMessage id={msg} /></p>)}\n    </span>);\n  }\n\n  render() {\n    if (!this.props.visible) {\n      return null;\n    }\n\n    return (<div className=\"confirmation-dialog\">\n      <div className=\"modal-overlay\" onClick={this._handleCancelBtn} />\n      <div className=\"modal\">\n        <section className=\"modal-message\">\n          {this.props.data.icon && <span className={`icon icon-spacer icon-${this.props.data.icon}`} />}\n          {this._renderModalMessage()}\n        </section>\n        <section className=\"actions\">\n          <button onClick={this._handleCancelBtn}>\n            <FormattedMessage id={this.props.data.cancel_button_string_id} />\n          </button>\n          <button className=\"done\" onClick={this._handleConfirmBtn}>\n            <FormattedMessage id={this.props.data.confirm_button_string_id} />\n          </button>\n        </section>\n      </div>\n    </div>);\n  }\n}\n\nexport const ConfirmDialog = connect(state => state.Dialog)(_ConfirmDialog);\n","module.exports = ReactRedux;","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class ErrorBoundaryFallback extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.windowObj = this.props.windowObj || window;\n    this.onClick = this.onClick.bind(this);\n  }\n\n  /**\n   * Since we only get here if part of the page has crashed, do a\n   * forced reload to give us the best chance at recovering.\n   */\n  onClick() {\n    this.windowObj.location.reload(true);\n  }\n\n  render() {\n    const defaultClass = \"as-error-fallback\";\n    let className;\n    if (\"className\" in this.props) {\n      className = `${this.props.className} ${defaultClass}`;\n    } else {\n      className = defaultClass;\n    }\n\n    // href=\"#\" to force normal link styling stuff (eg cursor on hover)\n    return (\n      <div className={className}>\n        <div>\n          <FormattedMessage\n            defaultMessage=\"Oops, something went wrong loading this content.\"\n            id=\"error_fallback_default_info\" />\n        </div>\n        <span>\n          <a href=\"#\" className=\"reload-button\" onClick={this.onClick}>\n            <FormattedMessage\n              defaultMessage=\"Refresh page to try again.\"\n              id=\"error_fallback_default_refresh_suggestion\" />\n          </a>\n        </span>\n      </div>\n    );\n  }\n}\nErrorBoundaryFallback.defaultProps = {className: \"as-error-fallback\"};\n\nexport class ErrorBoundary extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {hasError: false};\n  }\n\n  componentDidCatch(error, info) {\n    this.setState({hasError: true});\n  }\n\n  render() {\n    if (!this.state.hasError) {\n      return (this.props.children);\n    }\n\n    return <this.props.FallbackComponent className={this.props.className} />;\n  }\n}\n\nErrorBoundary.defaultProps = {FallbackComponent: ErrorBoundaryFallback};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\n/**\n * Manual migration component used to start the profile import wizard.\n * Message is presented temporarily and will go away if:\n * 1.  User clicks \"No Thanks\"\n * 2.  User completed the data import\n * 3.  After 3 active days\n * 4.  User clicks \"Cancel\" on the import wizard (currently not implemented).\n */\nexport class _ManualMigration extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onLaunchTour = this.onLaunchTour.bind(this);\n    this.onCancelTour = this.onCancelTour.bind(this);\n  }\n\n  onLaunchTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_START}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_START}));\n  }\n\n  onCancelTour() {\n    this.props.dispatch(ac.AlsoToMain({type: at.MIGRATION_CANCEL}));\n    this.props.dispatch(ac.UserEvent({event: at.MIGRATION_CANCEL}));\n  }\n\n  render() {\n    return (<div className=\"manual-migration-container\">\n        <p>\n          <span className=\"icon icon-import\" />\n          <FormattedMessage id=\"manual_migration_explanation2\" />\n        </p>\n        <div className=\"manual-migration-actions actions\">\n          <button className=\"dismiss\" onClick={this.onCancelTour}>\n            <FormattedMessage id=\"manual_migration_cancel_button\" />\n          </button>\n          <button onClick={this.onLaunchTour}>\n            <FormattedMessage id=\"manual_migration_import_button\" />\n          </button>\n        </div>\n    </div>);\n  }\n}\n\nexport const ManualMigration = connect()(_ManualMigration);\n","class _PrerenderData {\n  constructor(options) {\n    this.initialPrefs = options.initialPrefs;\n    this.initialSections = options.initialSections;\n    this._setValidation(options.validation);\n  }\n\n  get validation() {\n    return this._validation;\n  }\n\n  set validation(value) {\n    this._setValidation(value);\n  }\n\n  get invalidatingPrefs() {\n    return this._invalidatingPrefs;\n  }\n\n    // This is needed so we can use it in the constructor\n  _setValidation(value = []) {\n    this._validation = value;\n    this._invalidatingPrefs = value.reduce((result, next) => {\n      if (typeof next === \"string\") {\n        result.push(next);\n        return result;\n      } else if (next && next.oneOf) {\n        return result.concat(next.oneOf);\n      } else if (next && next.indexedDB) {\n        return result.concat(next.indexedDB);\n      }\n      throw new Error(\"Your validation configuration is not properly configured\");\n    }, []);\n  }\n\n  arePrefsValid(getPref, indexedDBPrefs) {\n    for (const prefs of this.validation) {\n      // {oneOf: [\"foo\", \"bar\"]}\n      if (prefs && prefs.oneOf && !prefs.oneOf.some(name => getPref(name) === this.initialPrefs[name])) {\n        return false;\n\n        // {indexedDB: [\"foo\", \"bar\"]}\n      } else if (indexedDBPrefs && prefs && prefs.indexedDB) {\n        const anyModifiedPrefs = prefs.indexedDB.some(prefName => indexedDBPrefs.some(pref => pref && pref[prefName]));\n        if (anyModifiedPrefs) {\n          return false;\n        }\n        // \"foo\"\n      } else if (getPref(prefs) !== this.initialPrefs[prefs]) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nthis.PrerenderData = new _PrerenderData({\n  initialPrefs: {\n    \"migrationExpired\": true,\n    \"feeds.topsites\": true,\n    \"showSearch\": true,\n    \"topSitesRows\": 1,\n    \"feeds.section.topstories\": true,\n    \"feeds.section.highlights\": true,\n    \"sectionOrder\": \"topsites,topstories,highlights\",\n    \"collapsed\": false\n  },\n  // Prefs listed as invalidating will prevent the prerendered version\n  // of AS from being used if their value is something other than what is listed\n  // here. This is required because some preferences cause the page layout to be\n  // too different for the prerendered version to be used. Unfortunately, this\n  // will result in users who have modified some of their preferences not being\n  // able to get the benefits of prerendering.\n  validation: [\n    \"feeds.topsites\",\n    \"showSearch\",\n    \"topSitesRows\",\n    \"sectionOrder\",\n    // This means if either of these are set to their default values,\n    // prerendering can be used.\n    {oneOf: [\"feeds.section.topstories\", \"feeds.section.highlights\"]},\n    // If any component has the following preference set to `true` it will\n    // invalidate the prerendered version.\n    {indexedDB: [\"collapsed\"]}\n  ],\n  initialSections: [\n    {\n      enabled: true,\n      icon: \"pocket\",\n      id: \"topstories\",\n      order: 1,\n      title: {id: \"header_recommended_by\", values: {provider: \"Pocket\"}}\n    },\n    {\n      enabled: true,\n      id: \"highlights\",\n      icon: \"highlights\",\n      order: 2,\n      title: {id: \"header_highlights\"}\n    }\n  ]\n});\n\nthis._PrerenderData = _PrerenderData;\nconst EXPORTED_SYMBOLS = [\"PrerenderData\", \"_PrerenderData\"];\n","/* globals ContentSearchUIController */\n\"use strict\";\n\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {IS_NEWTAB} from \"content-src/lib/constants\";\nimport React from \"react\";\n\nexport class _Search extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onInputMount = this.onInputMount.bind(this);\n  }\n\n  handleEvent(event) {\n    // Also track search events with our own telemetry\n    if (event.detail.type === \"Search\") {\n      this.props.dispatch(ac.UserEvent({event: \"SEARCH\"}));\n    }\n  }\n\n  onClick(event) {\n    window.gContentSearchController.search(event);\n  }\n\n  componentWillUnmount() {\n    delete window.gContentSearchController;\n  }\n\n  onInputMount(input) {\n    if (input) {\n      // The \"healthReportKey\" and needs to be \"newtab\" or \"abouthome\" so that\n      // BrowserUsageTelemetry.jsm knows to handle events with this name, and\n      // can add the appropriate telemetry probes for search. Without the correct\n      // name, certain tests like browser_UsageTelemetry_content.js will fail\n      // (See github ticket #2348 for more details)\n      const healthReportKey = IS_NEWTAB ? \"newtab\" : \"abouthome\";\n\n      // The \"searchSource\" needs to be \"newtab\" or \"homepage\" and is sent with\n      // the search data and acts as context for the search request (See\n      // nsISearchEngine.getSubmission). It is necessary so that search engine\n      // plugins can correctly atribute referrals. (See github ticket #3321 for\n      // more details)\n      const searchSource = IS_NEWTAB ? \"newtab\" : \"homepage\";\n\n      // gContentSearchController needs to exist as a global so that tests for\n      // the existing about:home can find it; and so it allows these tests to pass.\n      // In the future, when activity stream is default about:home, this can be renamed\n      window.gContentSearchController = new ContentSearchUIController(input, input.parentNode,\n        healthReportKey, searchSource);\n      addEventListener(\"ContentSearchClient\", this);\n    } else {\n      window.gContentSearchController = null;\n      removeEventListener(\"ContentSearchClient\", this);\n    }\n  }\n\n  /*\n   * Do not change the ID on the input field, as legacy newtab code\n   * specifically looks for the id 'newtab-search-text' on input fields\n   * in order to execute searches in various tests\n   */\n  render() {\n    return (<div className=\"search-wrapper\">\n      <label htmlFor=\"newtab-search-text\" className=\"search-label\">\n        <span className=\"sr-only\"><FormattedMessage id=\"search_web_placeholder\" /></span>\n      </label>\n      <input\n        id=\"newtab-search-text\"\n        maxLength=\"256\"\n        placeholder={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n        ref={this.onInputMount}\n        title={this.props.intl.formatMessage({id: \"search_web_placeholder\"})}\n        type=\"search\" />\n      <button\n        id=\"searchSubmit\"\n        className=\"search-button\"\n        onClick={this.onClick}\n        title={this.props.intl.formatMessage({id: \"search_button\"})}>\n        <span className=\"sr-only\"><FormattedMessage id=\"search_button\" /></span>\n      </button>\n    </div>);\n  }\n}\n\nexport const Search = connect()(injectIntl(_Search));\n","export const IS_NEWTAB = global.document && global.document.documentURI === \"about:newtab\";\n","import {Card, PlaceholderCard} from \"content-src/components/Card/Card\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\nimport {Topics} from \"content-src/components/Topics/Topics\";\nimport {TopSites} from \"content-src/components/TopSites/TopSites\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst CARDS_PER_ROW_DEFAULT = 3;\nconst CARDS_PER_ROW_COMPACT_WIDE = 4;\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class Section extends React.PureComponent {\n  get numRows() {\n    const {rowsPref, maxRows, Prefs} = this.props;\n    return rowsPref ? Prefs.values[rowsPref] : maxRows;\n  }\n\n  _dispatchImpressionStats() {\n    const {props} = this;\n    let cardsPerRow = CARDS_PER_ROW_DEFAULT;\n    if (props.compactCards && global.matchMedia(`(min-width: 1072px)`).matches) {\n      // If the section has compact cards and the viewport is wide enough, we show\n      // 4 columns instead of 3.\n      // $break-point-widest = 1072px (from _variables.scss)\n      cardsPerRow = CARDS_PER_ROW_COMPACT_WIDE;\n    }\n    const maxCards = cardsPerRow * this.numRows;\n    const cards = props.rows.slice(0, maxCards);\n\n    if (this.needsImpressionStats(cards)) {\n      props.dispatch(ac.ImpressionStats({\n        source: props.eventSource,\n        tiles: cards.map(link => ({id: link.guid}))\n      }));\n      this.impressionCardGuids = cards.map(link => link.guid);\n    }\n  }\n\n  // This sends an event when a user sees a set of new content. If content\n  // changes while the page is hidden (i.e. preloaded or on a hidden tab),\n  // only send the event if the page becomes visible again.\n  sendImpressionStatsOrAddListener() {\n    const {props} = this;\n\n    if (!props.shouldSendImpressionStats || !props.dispatch) {\n      return;\n    }\n\n    if (props.document.visibilityState === VISIBLE) {\n      this._dispatchImpressionStats();\n    } else {\n      // We should only ever send the latest impression stats ping, so remove any\n      // older listeners.\n      if (this._onVisibilityChange) {\n        props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n      }\n\n      // When the page becomes visible, send the impression stats ping if the section isn't collapsed.\n      this._onVisibilityChange = () => {\n        if (props.document.visibilityState === VISIBLE) {\n          if (!this.props.pref.collapsed) {\n            this._dispatchImpressionStats();\n          }\n          props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n        }\n      };\n      props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.rows.length && !this.props.pref.collapsed) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    const {props} = this;\n    const isCollapsed = props.pref.collapsed;\n    const wasCollapsed = prevProps.pref.collapsed;\n    if (\n      // Don't send impression stats for the empty state\n      props.rows.length &&\n      (\n        // We only want to send impression stats if the content of the cards has changed\n        // and the section is not collapsed...\n        (props.rows !== prevProps.rows && !isCollapsed) ||\n        // or if we are expanding a section that was collapsed.\n        (wasCollapsed && !isCollapsed)\n      )\n    ) {\n      this.sendImpressionStatsOrAddListener();\n    }\n  }\n\n  componentWillUnmount() {\n    if (this._onVisibilityChange) {\n      this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  needsImpressionStats(cards) {\n    if (!this.impressionCardGuids || (this.impressionCardGuids.length !== cards.length)) {\n      return true;\n    }\n\n    for (let i = 0; i < cards.length; i++) {\n      if (cards[i].guid !== this.impressionCardGuids[i]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  render() {\n    const {\n      id, eventSource, title, icon, rows,\n      emptyState, dispatch, compactCards,\n      contextMenuOptions, initialized, disclaimer,\n      pref, privacyNoticeURL, isFirst, isLast\n    } = this.props;\n\n    const maxCardsPerRow = compactCards ? CARDS_PER_ROW_COMPACT_WIDE : CARDS_PER_ROW_DEFAULT;\n    const {numRows} = this;\n    const maxCards = maxCardsPerRow * numRows;\n    const maxCardsOnNarrow = CARDS_PER_ROW_DEFAULT * numRows;\n\n    // Show topics only for top stories and if it's not initialized yet (so\n    // content doesn't shift when it is loaded) or has loaded with topics\n    const shouldShowTopics = (id === \"topstories\" &&\n      (!this.props.topics || this.props.topics.length > 0));\n\n    const realRows = rows.slice(0, maxCards);\n\n    // The empty state should only be shown after we have initialized and there is no content.\n    // Otherwise, we should show placeholders.\n    const shouldShowEmptyState = initialized && !rows.length;\n\n    const cards = [];\n    if (!shouldShowEmptyState) {\n      for (let i = 0; i < maxCards; i++) {\n        const link = realRows[i];\n        // On narrow viewports, we only show 3 cards per row. We'll mark the rest as\n        // .hide-for-narrow to hide in CSS via @media query.\n        const className = (i >= maxCardsOnNarrow) ? \"hide-for-narrow\" : \"\";\n        cards.push(link ? (\n          <Card key={i}\n            index={i}\n            className={className}\n            dispatch={dispatch}\n            link={link}\n            contextMenuOptions={contextMenuOptions}\n            eventSource={eventSource}\n            shouldSendImpressionStats={this.props.shouldSendImpressionStats}\n            isWebExtension={this.props.isWebExtension} />\n        ) : (\n          <PlaceholderCard key={i} className={className} />\n        ));\n      }\n    }\n\n    const sectionClassName = [\n      \"section\",\n      compactCards ? \"compact-cards\" : \"normal-cards\"\n    ].join(\" \");\n\n    // <Section> <-- React component\n    // <section> <-- HTML5 element\n    return (<ComponentPerfTimer {...this.props}>\n      <CollapsibleSection className={sectionClassName} icon={icon}\n        title={title}\n        id={id}\n        eventSource={eventSource}\n        disclaimer={disclaimer}\n        collapsed={this.props.pref.collapsed}\n        showPrefName={(pref && pref.feed) || id}\n        privacyNoticeURL={privacyNoticeURL}\n        Prefs={this.props.Prefs}\n        isFirst={isFirst}\n        isLast={isLast}\n        dispatch={this.props.dispatch}\n        isWebExtension={this.props.isWebExtension}>\n\n        {!shouldShowEmptyState && (<ul className=\"section-list\" style={{padding: 0}}>\n          {cards}\n        </ul>)}\n        {shouldShowEmptyState &&\n          <div className=\"section-empty-state\">\n            <div className=\"empty-state\">\n              {emptyState.icon && emptyState.icon.startsWith(\"moz-extension://\") ?\n                <img className=\"empty-state-icon icon\" style={{\"background-image\": `url('${emptyState.icon}')`}} /> :\n                <img className={`empty-state-icon icon icon-${emptyState.icon}`} />}\n              <p className=\"empty-state-message\">\n                {getFormattedMessage(emptyState.message)}\n              </p>\n            </div>\n          </div>}\n        {shouldShowTopics && <Topics topics={this.props.topics} read_more_endpoint={this.props.read_more_endpoint} />}\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nSection.defaultProps = {\n  document: global.document,\n  rows: [],\n  emptyState: {},\n  pref: {},\n  title: \"\"\n};\n\nexport const SectionIntl = connect(state => ({Prefs: state.Prefs}))(injectIntl(Section));\n\nexport class _Sections extends React.PureComponent {\n  renderSections() {\n    const sections = [];\n    const enabledSections = this.props.Sections.filter(section => section.enabled);\n    const {sectionOrder, \"feeds.topsites\": showTopSites} = this.props.Prefs.values;\n    // Enabled sections doesn't include Top Sites, so we add it if enabled.\n    const expectedCount = enabledSections.length + ~~showTopSites;\n\n    for (const sectionId of sectionOrder.split(\",\")) {\n      const commonProps = {\n        key: sectionId,\n        isFirst: sections.length === 0,\n        isLast: sections.length === expectedCount - 1\n      };\n      if (sectionId === \"topsites\" && showTopSites) {\n        sections.push(<TopSites {...commonProps} />);\n      } else {\n        const section = enabledSections.find(s => s.id === sectionId);\n        if (section) {\n          sections.push(<SectionIntl {...section} {...commonProps} />);\n        }\n      }\n    }\n    return sections;\n  }\n\n  render() {\n    return (\n      <div className=\"sections-list\">\n        {this.renderSections()}\n      </div>\n    );\n  }\n}\n\nexport const Sections = connect(state => ({Sections: state.Sections, Prefs: state.Prefs}))(_Sections);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\nconst _OpenInPrivateWindow = site => ({\n  id: \"menu_action_open_private_window\",\n  icon: \"new-window-private\",\n  action: ac.OnlyToMain({\n    type: at.OPEN_PRIVATE_WINDOW,\n    data: {url: site.url, referrer: site.referrer}\n  }),\n  userEvent: \"OPEN_PRIVATE_WINDOW\"\n});\n\nexport const GetPlatformString = platform => {\n  switch (platform) {\n    case \"win\":\n      return \"menu_action_show_file_windows\";\n    case \"macosx\":\n      return \"menu_action_show_file_mac_os\";\n    case \"linux\":\n      return \"menu_action_show_file_linux\";\n    default:\n      return \"menu_action_show_file_default\";\n  }\n};\n\n/**\n * List of functions that return items that can be included as menu options in a\n * LinkMenu. All functions take the site as the first parameter, and optionally\n * the index of the site.\n */\nexport const LinkMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  EmptyItem: () => ({type: \"empty\"}),\n  RemoveBookmark: site => ({\n    id: \"menu_action_remove_bookmark\",\n    icon: \"bookmark-added\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_BOOKMARK_BY_ID,\n      data: site.bookmarkGuid\n    }),\n    userEvent: \"BOOKMARK_DELETE\"\n  }),\n  AddBookmark: site => ({\n    id: \"menu_action_bookmark\",\n    icon: \"bookmark-hollow\",\n    action: ac.AlsoToMain({\n      type: at.BOOKMARK_URL,\n      data: {url: site.url, title: site.title, type: site.type}\n    }),\n    userEvent: \"BOOKMARK_ADD\"\n  }),\n  OpenInNewWindow: site => ({\n    id: \"menu_action_open_new_window\",\n    icon: \"new-window\",\n    action: ac.AlsoToMain({\n      type: at.OPEN_NEW_WINDOW,\n      data: {\n        referrer: site.referrer,\n        typedBonus: site.typedBonus,\n        url: site.url\n      }\n    }),\n    userEvent: \"OPEN_NEW_WINDOW\"\n  }),\n  BlockUrl: (site, index, eventSource) => ({\n    id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.AlsoToMain({\n      type: at.BLOCK_URL,\n      data: {url: site.url, pocket_id: site.pocket_id}\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      block: 0,\n      tiles: [{id: site.guid, pos: index}]\n    }),\n    userEvent: \"BLOCK\"\n  }),\n\n  // This is an option for web extentions which will result in remove items from\n  // memory and notify the web extenion, rather than using the built-in block list.\n  WebExtDismiss: (site, index, eventSource) => ({\n    id: \"menu_action_webext_dismiss\",\n    string_id: \"menu_action_dismiss\",\n    icon: \"dismiss\",\n    action: ac.WebExtEvent(at.WEBEXT_DISMISS, {\n      source: eventSource,\n      url: site.url,\n      action_position: index\n    })\n  }),\n  DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({\n    id: \"menu_action_delete\",\n    icon: \"delete\",\n    action: {\n      type: at.DIALOG_OPEN,\n      data: {\n        onConfirm: [\n          ac.AlsoToMain({type: at.DELETE_HISTORY_URL, data: {url: site.url, pocket_id: site.pocket_id, forceBlock: site.bookmarkGuid}}),\n          ac.UserEvent(Object.assign({event: \"DELETE\", source: eventSource, action_position: index}, siteInfo))\n        ],\n        eventSource,\n        body_string_id: [\"confirm_history_delete_p1\", \"confirm_history_delete_notice_p2\"],\n        confirm_button_string_id: \"menu_action_delete\",\n        cancel_button_string_id: \"topsites_form_cancel_button\",\n        icon: \"modal-delete\"\n      }\n    },\n    userEvent: \"DIALOG_OPEN\"\n  }),\n  ShowFile: (site, index, eventSource, isEnabled, siteInfo, platform) => ({\n    id: GetPlatformString(platform),\n    icon: \"search\",\n    action: ac.OnlyToMain({\n      type: at.SHOW_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  OpenFile: site => ({\n    id: \"menu_action_open_file\",\n    icon: \"open-file\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  CopyDownloadLink: site => ({\n    id: \"menu_action_copy_download_link\",\n    icon: \"copy\",\n    action: ac.OnlyToMain({\n      type: at.COPY_DOWNLOAD_LINK,\n      data: {url: site.url}\n    })\n  }),\n  GoToDownloadPage: site => ({\n    id: \"menu_action_go_to_download_page\",\n    icon: \"download\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: site.referrer}\n    }),\n    disabled: !site.referrer\n  }),\n  RemoveDownload: site => ({\n    id: \"menu_action_remove_download\",\n    icon: \"delete\",\n    action: ac.OnlyToMain({\n      type: at.REMOVE_DOWNLOAD_FILE,\n      data: {url: site.url}\n    })\n  }),\n  PinTopSite: (site, index) => ({\n    id: \"menu_action_pin\",\n    icon: \"pin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_PIN,\n      data: {site: {url: site.url}, index}\n    }),\n    userEvent: \"PIN\"\n  }),\n  UnpinTopSite: site => ({\n    id: \"menu_action_unpin\",\n    icon: \"unpin\",\n    action: ac.AlsoToMain({\n      type: at.TOP_SITES_UNPIN,\n      data: {site: {url: site.url}}\n    }),\n    userEvent: \"UNPIN\"\n  }),\n  SaveToPocket: (site, index, eventSource) => ({\n    id: \"menu_action_save_to_pocket\",\n    icon: \"pocket\",\n    action: ac.AlsoToMain({\n      type: at.SAVE_TO_POCKET,\n      data: {site: {url: site.url, title: site.title}}\n    }),\n    impression: ac.ImpressionStats({\n      source: eventSource,\n      pocket: 0,\n      tiles: [{id: site.guid, pos: index}]\n    }),\n    userEvent: \"SAVE_TO_POCKET\"\n  }),\n  DeleteFromPocket: site => ({\n    id: \"menu_action_delete_pocket\",\n    icon: \"delete\",\n    action: ac.AlsoToMain({\n      type: at.DELETE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id}\n    }),\n    userEvent: \"DELETE_FROM_POCKET\"\n  }),\n  ArchiveFromPocket: site => ({\n    id: \"menu_action_archive_pocket\",\n    icon: \"check\",\n    action: ac.AlsoToMain({\n      type: at.ARCHIVE_FROM_POCKET,\n      data: {pocket_id: site.pocket_id}\n    }),\n    userEvent: \"ARCHIVE_FROM_POCKET\"\n  }),\n  EditTopSite: (site, index) => ({\n    id: \"edit_topsites_button_text\",\n    icon: \"edit\",\n    action: {\n      type: at.TOP_SITES_EDIT,\n      data: {index}\n    }\n  }),\n  CheckBookmark: site => (site.bookmarkGuid ? LinkMenuOptions.RemoveBookmark(site) : LinkMenuOptions.AddBookmark(site)),\n  CheckPinTopSite: (site, index) => (site.isPinned ? LinkMenuOptions.UnpinTopSite(site) : LinkMenuOptions.PinTopSite(site, index)),\n  CheckSavedToPocket: (site, index) => (site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index)),\n  CheckBookmarkOrArchive: site => (site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site)),\n  OpenInPrivateWindow: (site, index, eventSource, isEnabled) => (isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem())\n};\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport {LinkMenuOptions} from \"content-src/lib/link-menu-options\";\nimport React from \"react\";\n\nconst DEFAULT_SITE_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\", \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\"];\n\nexport class _LinkMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n    const {site, index, source, isPrivateBrowsingEnabled, siteInfo, platform} = props;\n\n    // Handle special case of default site\n    const propOptions = !site.isDefault ? props.options : DEFAULT_SITE_MENU_OPTIONS;\n\n    const options = propOptions.map(o => LinkMenuOptions[o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {\n      const {action, impression, id, string_id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id: string_id || id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            const userEventData = Object.assign({\n              event: userEvent,\n              source,\n              action_position: index\n            }, siteInfo);\n            props.dispatch(ac.UserEvent(userEventData));\n          }\n          if (impression && props.shouldSendImpressionStats) {\n            props.dispatch(impression);\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nconst getState = state => ({isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled, platform: state.Prefs.values.platform});\nexport const LinkMenu = connect(getState)(injectIntl(_LinkMenu));\n","import React from \"react\";\n\nexport class ContextMenu extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.hideContext = this.hideContext.bind(this);\n    this.onClick = this.onClick.bind(this);\n  }\n\n  hideContext() {\n    this.props.onUpdate(false);\n  }\n\n  componentDidMount() {\n    setTimeout(() => {\n      global.addEventListener(\"click\", this.hideContext);\n    }, 0);\n  }\n\n  componentWillUnmount() {\n    global.removeEventListener(\"click\", this.hideContext);\n  }\n\n  onClick(event) {\n    // Eat all clicks on the context menu so they don't bubble up to window.\n    // This prevents the context menu from closing when clicking disabled items\n    // or the separators.\n    event.stopPropagation();\n  }\n\n  render() {\n    return (<span className=\"context-menu\" onClick={this.onClick}>\n      <ul role=\"menu\" className=\"context-menu-list\">\n        {this.props.options.map((option, i) => (option.type === \"separator\" ?\n          (<li key={i} className=\"separator\" />) :\n          (option.type !== \"empty\" && <ContextMenuItem key={i} option={option} hideContext={this.hideContext} />)\n        ))}\n      </ul>\n    </span>);\n  }\n}\n\nexport class ContextMenuItem extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n    this.onKeyDown = this.onKeyDown.bind(this);\n  }\n\n  onClick() {\n    this.props.hideContext();\n    this.props.option.onClick();\n  }\n\n  onKeyDown(event) {\n    const {option} = this.props;\n    switch (event.key) {\n      case \"Tab\":\n        // tab goes down in context menu, shift + tab goes up in context menu\n        // if we're on the last item, one more tab will close the context menu\n        // similarly, if we're on the first item, one more shift + tab will close it\n        if ((event.shiftKey && option.first) || (!event.shiftKey && option.last)) {\n          this.props.hideContext();\n        }\n        break;\n      case \"Enter\":\n        this.props.hideContext();\n        option.onClick();\n        break;\n    }\n  }\n\n  render() {\n    const {option} = this.props;\n    return (\n      <li role=\"menuitem\" className=\"context-menu-item\">\n        <a onClick={this.onClick} onKeyDown={this.onKeyDown} tabIndex=\"0\" className={option.disabled ? \"disabled\" : \"\"}>\n          {option.icon && <span className={`icon icon-spacer icon-${option.icon}`} />}\n          {option.label}\n        </a>\n      </li>);\n  }\n}\n","/**\n * List of helper functions for screenshot-based images.\n *\n * There are two kinds of images:\n * 1. Remote Image: This is the image from the main process and it refers to\n *    the image in the React props. This can either be an object with the `data`\n *    and `path` properties, if it is a blob, or a string, if it is a normal image.\n * 2. Local Image: This is the image object in the content process and it refers\n *    to the image *object* in the React component's state. All local image\n *    objects have the `url` property, and an additional property `path`, if they\n *    are blobs.\n */\nexport const ScreenshotUtils = {\n  isBlob(isLocal, image) {\n    return !!(image && image.path && ((!isLocal && image.data) || (isLocal && image.url)));\n  },\n\n  // This should always be called with a remote image and not a local image.\n  createLocalImageObject(remoteImage) {\n    if (!remoteImage) {\n      return null;\n    }\n    if (this.isBlob(false, remoteImage)) {\n      return {url: global.URL.createObjectURL(remoteImage.data), path: remoteImage.path};\n    }\n    return {url: remoteImage};\n  },\n\n  // Revokes the object URL of the image if the local image is a blob.\n  // This should always be called with a local image and not a remote image.\n  maybeRevokeBlobObjectURL(localImage) {\n    if (this.isBlob(true, localImage)) {\n      global.URL.revokeObjectURL(localImage.url);\n    }\n  },\n\n  // Checks if remoteImage and localImage are the same.\n  isRemoteImageLocal(localImage, remoteImage) {\n    // Both remoteImage and localImage are present.\n    if (remoteImage && localImage) {\n      return this.isBlob(false, remoteImage) ?\n             localImage.path === remoteImage.path :\n             localImage.url === remoteImage;\n    }\n\n    // This will only handle the remaining three possible outcomes.\n    // (i.e. everything except when both image and localImage are present)\n    return !remoteImage && !localImage;\n  }\n};\n","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ErrorBoundary} from \"content-src/components/ErrorBoundary/ErrorBoundary\";\nimport React from \"react\";\nimport {SectionMenu} from \"content-src/components/SectionMenu/SectionMenu\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nfunction getFormattedMessage(message) {\n  return typeof message === \"string\" ? <span>{message}</span> : <FormattedMessage {...message} />;\n}\n\nexport class Disclaimer extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onAcknowledge = this.onAcknowledge.bind(this);\n  }\n\n  onAcknowledge() {\n    this.props.dispatch(ac.SetPref(this.props.disclaimerPref, false));\n    this.props.dispatch(ac.UserEvent({event: \"DISCLAIMER_ACKED\", source: this.props.eventSource}));\n  }\n\n  render() {\n    const {disclaimer} = this.props;\n    return (\n      <div className=\"section-disclaimer\">\n          <div className=\"section-disclaimer-text\">\n            {getFormattedMessage(disclaimer.text)}\n            {disclaimer.link &&\n              <a href={disclaimer.link.href} target=\"_blank\" rel=\"noopener noreferrer\">\n                {getFormattedMessage(disclaimer.link.title || disclaimer.link)}\n              </a>\n            }\n          </div>\n\n          <button onClick={this.onAcknowledge}>\n            {getFormattedMessage(disclaimer.button)}\n          </button>\n      </div>\n    );\n  }\n}\n\nexport const DisclaimerIntl = injectIntl(Disclaimer);\n\nexport class _CollapsibleSection extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBodyMount = this.onBodyMount.bind(this);\n    this.onHeaderClick = this.onHeaderClick.bind(this);\n    this.onTransitionEnd = this.onTransitionEnd.bind(this);\n    this.enableOrDisableAnimation = this.enableOrDisableAnimation.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);\n    this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.state = {enableAnimation: true, isAnimating: false, menuButtonHover: false, showContextMenu: false};\n  }\n\n  componentWillMount() {\n    this.props.document.addEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  componentWillUpdate(nextProps) {\n    // Check if we're about to go from expanded to collapsed\n    if (!this.props.collapsed && nextProps.collapsed) {\n      // This next line forces a layout flush of the section body, which has a\n      // max-height style set, so that the upcoming collapse animation can\n      // animate from that height to the collapsed height. Without this, the\n      // update is coalesced and there's no animation from no-max-height to 0.\n      this.sectionBody.scrollHeight; // eslint-disable-line no-unused-expressions\n    }\n  }\n\n  componentWillUnmount() {\n    this.props.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this.enableOrDisableAnimation);\n  }\n\n  enableOrDisableAnimation() {\n    // Only animate the collapse/expand for visible tabs.\n    const visible = this.props.document.visibilityState === VISIBLE;\n    if (this.state.enableAnimation !== visible) {\n      this.setState({enableAnimation: visible});\n    }\n  }\n\n  onBodyMount(node) {\n    this.sectionBody = node;\n  }\n\n  onHeaderClick() {\n    // If this.sectionBody is unset, it means that we're in some sort of error\n    // state, probably displaying the error fallback, so we won't be able to\n    // compute the height, and we don't want to persist the preference.\n    // If props.collapsed is undefined handler shouldn't do anything.\n    if (!this.sectionBody || this.props.collapsed === undefined) {\n      return;\n    }\n\n    // Get the current height of the body so max-height transitions can work\n    this.setState({\n      isAnimating: true,\n      maxHeight: `${this.sectionBody.scrollHeight}px`\n    });\n    const {action, userEvent} = SectionMenuOptions.CheckCollapsed(this.props);\n    this.props.dispatch(action);\n    this.props.dispatch(ac.UserEvent({\n      event: userEvent,\n      source: this.props.source\n    }));\n  }\n\n  onTransitionEnd(event) {\n    // Only update the animating state for our own transition (not a child's)\n    if (event.target === event.currentTarget) {\n      this.setState({isAnimating: false});\n    }\n  }\n\n  renderIcon() {\n    const {icon} = this.props;\n    if (icon && icon.startsWith(\"moz-extension://\")) {\n      return <span className=\"icon icon-small-spacer\" style={{backgroundImage: `url('${icon}')`}} />;\n    }\n    return <span className={`icon icon-small-spacer icon-${icon || \"webextension\"}`} />;\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuButtonMouseEnter() {\n    this.setState({menuButtonHover: true});\n  }\n\n  onMenuButtonMouseLeave() {\n    this.setState({menuButtonHover: false});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const isCollapsible = this.props.collapsed !== undefined;\n    const {enableAnimation, isAnimating, maxHeight, menuButtonHover, showContextMenu} = this.state;\n    const {id, eventSource, collapsed, disclaimer, title, extraMenuOptions, showPrefName, privacyNoticeURL, dispatch, isFirst, isLast, isWebExtension} = this.props;\n    const disclaimerPref = `section.${id}.showDisclaimer`;\n    const needsDisclaimer = disclaimer && this.props.Prefs.values[disclaimerPref];\n    const active = menuButtonHover || showContextMenu;\n    return (\n      <section\n        className={`collapsible-section ${this.props.className}${enableAnimation ? \" animation-enabled\" : \"\"}${collapsed ? \" collapsed\" : \"\"}${active ? \" active\" : \"\"}`}\n        // Note: data-section-id is used for web extension api tests in mozilla central\n        data-section-id={id}>\n        <div className=\"section-top-bar\">\n          <h3 className=\"section-title\">\n            <span className=\"click-target\" onClick={this.onHeaderClick}>\n              {this.renderIcon()}\n              {getFormattedMessage(title)}\n              {isCollapsible && <span className={`collapsible-arrow icon ${collapsed ? \"icon-arrowhead-forward-small\" : \"icon-arrowhead-down-small\"}`} />}\n            </span>\n          </h3>\n          <div>\n            <button\n              className=\"context-menu-button icon\"\n              onClick={this.onMenuButtonClick}\n              onMouseEnter={this.onMenuButtonMouseEnter}\n              onMouseLeave={this.onMenuButtonMouseLeave}>\n              <span className=\"sr-only\">\n                <FormattedMessage id=\"section_context_menu_button_sr\" />\n              </span>\n            </button>\n            {showContextMenu &&\n              <SectionMenu\n                id={id}\n                extraOptions={extraMenuOptions}\n                eventSource={eventSource}\n                showPrefName={showPrefName}\n                privacyNoticeURL={privacyNoticeURL}\n                collapsed={collapsed}\n                onUpdate={this.onMenuUpdate}\n                isFirst={isFirst}\n                isLast={isLast}\n                dispatch={dispatch}\n                isWebExtension={isWebExtension} />\n            }\n          </div>\n        </div>\n        <ErrorBoundary className=\"section-body-fallback\">\n          <div\n            className={`section-body${isAnimating ? \" animating\" : \"\"}`}\n            onTransitionEnd={this.onTransitionEnd}\n            ref={this.onBodyMount}\n            style={isAnimating && !collapsed ? {maxHeight} : null}>\n            {needsDisclaimer && <DisclaimerIntl disclaimerPref={disclaimerPref} disclaimer={disclaimer} eventSource={eventSource} dispatch={this.props.dispatch} />}\n            {this.props.children}\n          </div>\n        </ErrorBoundary>\n      </section>\n    );\n  }\n}\n\n_CollapsibleSection.defaultProps = {\n  document: global.document || {\n    addEventListener: () => {},\n    removeEventListener: () => {},\n    visibilityState: \"hidden\"\n  },\n  Prefs: {values: {}}\n};\n\nexport const CollapsibleSection = injectIntl(_CollapsibleSection);\n","import {actionCreators as ac} from \"common/Actions.jsm\";\nimport {ContextMenu} from \"content-src/components/ContextMenu/ContextMenu\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {SectionMenuOptions} from \"content-src/lib/section-menu-options\";\n\nconst DEFAULT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"RemoveSection\", \"CheckCollapsed\", \"Separator\", \"ManageSection\"];\nconst WEBEXT_SECTION_MENU_OPTIONS = [\"MoveUp\", \"MoveDown\", \"Separator\", \"CheckCollapsed\", \"Separator\", \"ManageWebExtension\"];\n\nexport class _SectionMenu extends React.PureComponent {\n  getOptions() {\n    const {props} = this;\n\n    const propOptions = props.isWebExtension ? [...WEBEXT_SECTION_MENU_OPTIONS] : [...DEFAULT_SECTION_MENU_OPTIONS];\n    // Prepend custom options and a separator\n    if (props.extraOptions) {\n      propOptions.splice(0, 0, ...props.extraOptions, \"Separator\");\n    }\n    // Insert privacy notice before the last option (\"ManageSection\")\n    if (props.privacyNoticeURL) {\n      propOptions.splice(-1, 0, \"PrivacyNotice\");\n    }\n\n    const options = propOptions.map(o => SectionMenuOptions[o](props)).map(option => {\n      const {action, id, type, userEvent} = option;\n      if (!type && id) {\n        option.label = props.intl.formatMessage({id});\n        option.onClick = () => {\n          props.dispatch(action);\n          if (userEvent) {\n            props.dispatch(ac.UserEvent({\n              event: userEvent,\n              source: props.source\n            }));\n          }\n        };\n      }\n      return option;\n    });\n\n    // This is for accessibility to support making each item tabbable.\n    // We want to know which item is the first and which item\n    // is the last, so we can close the context menu accordingly.\n    options[0].first = true;\n    options[options.length - 1].last = true;\n    return options;\n  }\n\n  render() {\n    return (<ContextMenu\n      onUpdate={this.props.onUpdate}\n      options={this.getOptions()} />);\n  }\n}\n\nexport const SectionMenu = injectIntl(_SectionMenu);\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\n\n/**\n * List of functions that return items that can be included as menu options in a\n * SectionMenu. All functions take the section as the only parameter.\n */\nexport const SectionMenuOptions = {\n  Separator: () => ({type: \"separator\"}),\n  MoveUp: section => ({\n    id: \"section_menu_action_move_up\",\n    icon: \"arrowhead-up\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: -1}\n    }),\n    userEvent: \"MENU_MOVE_UP\",\n    disabled: !!section.isFirst\n  }),\n  MoveDown: section => ({\n    id: \"section_menu_action_move_down\",\n    icon: \"arrowhead-down\",\n    action: ac.OnlyToMain({\n      type: at.SECTION_MOVE,\n      data: {id: section.id, direction: +1}\n    }),\n    userEvent: \"MENU_MOVE_DOWN\",\n    disabled: !!section.isLast\n  }),\n  RemoveSection: section => ({\n    id: \"section_menu_action_remove_section\",\n    icon: \"dismiss\",\n    action: ac.SetPref(section.showPrefName, false),\n    userEvent: \"MENU_REMOVE\"\n  }),\n  CollapseSection: section => ({\n    id: \"section_menu_action_collapse_section\",\n    icon: \"minimize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: true}}}),\n    userEvent: \"MENU_COLLAPSE\"\n  }),\n  ExpandSection: section => ({\n    id: \"section_menu_action_expand_section\",\n    icon: \"maximize\",\n    action: ac.OnlyToMain({type: at.UPDATE_SECTION_PREFS, data: {id: section.id, value: {collapsed: false}}}),\n    userEvent: \"MENU_EXPAND\"\n  }),\n  ManageSection: section => ({\n    id: \"section_menu_action_manage_section\",\n    icon: \"settings\",\n    action: ac.OnlyToMain({type: at.SETTINGS_OPEN}),\n    userEvent: \"MENU_MANAGE\"\n  }),\n  ManageWebExtension: section => ({\n    id: \"section_menu_action_manage_webext\",\n    icon: \"settings\",\n    action: ac.OnlyToMain({type: at.OPEN_WEBEXT_SETTINGS, data: section.id})\n  }),\n  AddTopSite: section => ({\n    id: \"section_menu_action_add_topsite\",\n    icon: \"add\",\n    action: {type: at.TOP_SITES_EDIT, data: {index: -1}},\n    userEvent: \"MENU_ADD_TOPSITE\"\n  }),\n  PrivacyNotice: section => ({\n    id: \"section_menu_action_privacy_notice\",\n    icon: \"info\",\n    action: ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: {url: section.privacyNoticeURL}\n    }),\n    userEvent: \"MENU_PRIVACY_NOTICE\"\n  }),\n  CheckCollapsed: section => (section.collapsed ? SectionMenuOptions.ExpandSection(section) : SectionMenuOptions.CollapseSection(section))\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\nimport React from \"react\";\n\n// Currently record only a fixed set of sections. This will prevent data\n// from custom sections from showing up or from topstories.\nconst RECORDED_SECTIONS = [\"highlights\", \"topsites\"];\n\nexport class ComponentPerfTimer extends React.Component {\n  constructor(props) {\n    super(props);\n    // Just for test dependency injection:\n    this.perfSvc = this.props.perfSvc || perfSvc;\n\n    this._sendBadStateEvent = this._sendBadStateEvent.bind(this);\n    this._sendPaintedEvent = this._sendPaintedEvent.bind(this);\n    this._reportMissingData = false;\n    this._timestampHandled = false;\n    this._recordedFirstRender = false;\n  }\n\n  componentDidMount() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  componentDidUpdate() {\n    if (!RECORDED_SECTIONS.includes(this.props.id)) {\n      return;\n    }\n\n    this._maybeSendPaintedEvent();\n  }\n\n  /**\n   * Call the given callback after the upcoming frame paints.\n   *\n   * @note Both setTimeout and requestAnimationFrame are throttled when the page\n   * is hidden, so this callback may get called up to a second or so after the\n   * requestAnimationFrame \"paint\" for hidden tabs.\n   *\n   * Newtabs hidden while loading will presumably be fairly rare (other than\n   * preloaded tabs, which we will be filtering out on the server side), so such\n   * cases should get lost in the noise.\n   *\n   * If we decide that it's important to find out when something that's hidden\n   * has \"painted\", however, another option is to post a message to this window.\n   * That should happen even faster than setTimeout, and, at least as of this\n   * writing, it's not throttled in hidden windows in Firefox.\n   *\n   * @param {Function} callback\n   *\n   * @returns void\n   */\n  _afterFramePaint(callback) {\n    requestAnimationFrame(() => setTimeout(callback, 0));\n  }\n\n  _maybeSendBadStateEvent() {\n    // Follow up bugs:\n    // https://github.com/mozilla/activity-stream/issues/3691\n    if (!this.props.initialized) {\n      // Remember to report back when data is available.\n      this._reportMissingData = true;\n    } else if (this._reportMissingData) {\n      this._reportMissingData = false;\n      // Report how long it took for component to become initialized.\n      this._sendBadStateEvent();\n    }\n  }\n\n  _maybeSendPaintedEvent() {\n    // If we've already handled a timestamp, don't do it again.\n    if (this._timestampHandled || !this.props.initialized) {\n      return;\n    }\n\n    // And if we haven't, we're doing so now, so remember that. Even if\n    // something goes wrong in the callback, we can't try again, as we'd be\n    // sending back the wrong data, and we have to do it here, so that other\n    // calls to this method while waiting for the next frame won't also try to\n    // handle it.\n    this._timestampHandled = true;\n    this._afterFramePaint(this._sendPaintedEvent);\n  }\n\n  /**\n   * Triggered by call to render. Only first call goes through due to\n   * `_recordedFirstRender`.\n   */\n  _ensureFirstRenderTsRecorded() {\n    // Used as t0 for recording how long component took to initialize.\n    if (!this._recordedFirstRender) {\n      this._recordedFirstRender = true;\n      // topsites_first_render_ts, highlights_first_render_ts.\n      const key = `${this.props.id}_first_render_ts`;\n      this.perfSvc.mark(key);\n    }\n  }\n\n  /**\n   * Creates `TELEMETRY_UNDESIRED_EVENT` with timestamp in ms\n   * of how much longer the data took to be ready for display than it would\n   * have been the ideal case.\n   * https://github.com/mozilla/ping-centre/issues/98\n   */\n  _sendBadStateEvent() {\n    // highlights_data_ready_ts, topsites_data_ready_ts.\n    const dataReadyKey = `${this.props.id}_data_ready_ts`;\n    this.perfSvc.mark(dataReadyKey);\n\n    try {\n      const firstRenderKey = `${this.props.id}_first_render_ts`;\n      // value has to be Int32.\n      const value = parseInt(this.perfSvc.getMostRecentAbsMarkStartByName(dataReadyKey) -\n                             this.perfSvc.getMostRecentAbsMarkStartByName(firstRenderKey), 10);\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        // highlights_data_late_by_ms, topsites_data_late_by_ms.\n        data: {[`${this.props.id}_data_late_by_ms`]: value}\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.\n    }\n  }\n\n  _sendPaintedEvent() {\n    // Record first_painted event but only send if topsites.\n    if (this.props.id !== \"topsites\") {\n      return;\n    }\n\n    // topsites_first_painted_ts.\n    const key = `${this.props.id}_first_painted_ts`;\n    this.perfSvc.mark(key);\n\n    try {\n      const data = {};\n      data[key] = this.perfSvc.getMostRecentAbsMarkStartByName(key);\n\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up, and should continue\n      // to set this._timestampHandled to avoid going through this again.\n    }\n  }\n\n  render() {\n    if (RECORDED_SECTIONS.includes(this.props.id)) {\n      this._ensureFirstRenderTsRecorded();\n      this._maybeSendBadStateEvent();\n    }\n    return this.props.children;\n  }\n}\n","/* globals Services */\n\"use strict\";\n\n/* istanbul ignore if */\nif (typeof ChromeUtils !== \"undefined\") {\n  ChromeUtils.import(\"resource://gre/modules/Services.jsm\");\n}\n\nlet usablePerfObj;\n\n/* istanbul ignore if */\n/* istanbul ignore else */\nif (typeof Services !== \"undefined\") {\n  // Borrow the high-resolution timer from the hidden window....\n  usablePerfObj = Services.appShell.hiddenDOMWindow.performance;\n} else if (typeof performance !== \"undefined\") {\n  // we must be running in content space\n  // eslint-disable-next-line no-undef\n  usablePerfObj = performance;\n} else {\n  // This is a dummy object so this file doesn't crash in the node prerendering\n  // task.\n  usablePerfObj = {\n    now() {},\n    mark() {}\n  };\n}\n\nfunction _PerfService(options) {\n  // For testing, so that we can use a fake Window.performance object with\n  // known state.\n  if (options && options.performanceObj) {\n    this._perf = options.performanceObj;\n  } else {\n    this._perf = usablePerfObj;\n  }\n}\n\n_PerfService.prototype = {\n  /**\n   * Calls the underlying mark() method on the appropriate Window.performance\n   * object to add a mark with the given name to the appropriate performance\n   * timeline.\n   *\n   * @param  {String} name  the name to give the current mark\n   * @return {void}\n   */\n  mark: function mark(str) {\n    this._perf.mark(str);\n  },\n\n  /**\n   * Calls the underlying getEntriesByName on the appropriate Window.performance\n   * object.\n   *\n   * @param  {String} name\n   * @param  {String} type eg \"mark\"\n   * @return {Array}       Performance* objects\n   */\n  getEntriesByName: function getEntriesByName(name, type) {\n    return this._perf.getEntriesByName(name, type);\n  },\n\n  /**\n   * The timeOrigin property from the appropriate performance object.\n   * Used to ensure that timestamps from the add-on code and the content code\n   * are comparable.\n   *\n   * @note If this is called from a context without a window\n   * (eg a JSM in chrome), it will return the timeOrigin of the XUL hidden\n   * window, which appears to be the first created window (and thus\n   * timeOrigin) in the browser.  Note also, however, there is also a private\n   * hidden window, presumably for private browsing, which appears to be\n   * created dynamically later.  Exactly how/when that shows up needs to be\n   * investigated.\n   *\n   * @return {Number} A double of milliseconds with a precision of 0.5us.\n   */\n  get timeOrigin() {\n    return this._perf.timeOrigin;\n  },\n\n  /**\n   * Returns the \"absolute\" version of performance.now(), i.e. one that\n   * should ([bug 1401406](https://bugzilla.mozilla.org/show_bug.cgi?id=1401406)\n   * be comparable across both chrome and content.\n   *\n   * @return {Number}\n   */\n  absNow: function absNow() {\n    return this.timeOrigin + this._perf.now();\n  },\n\n  /**\n   * This returns the absolute startTime from the most recent performance.mark()\n   * with the given name.\n   *\n   * @param  {String} name  the name to lookup the start time for\n   *\n   * @return {Number}       the returned start time, as a DOMHighResTimeStamp\n   *\n   * @throws {Error}        \"No Marks with the name ...\" if none are available\n   *\n   * @note Always surround calls to this by try/catch.  Otherwise your code\n   * may fail when the `privacy.resistFingerprinting` pref is true.  When\n   * this pref is set, all attempts to get marks will likely fail, which will\n   * cause this method to throw.\n   *\n   * See [bug 1369303](https://bugzilla.mozilla.org/show_bug.cgi?id=1369303)\n   * for more info.\n   */\n  getMostRecentAbsMarkStartByName(name) {\n    let entries = this.getEntriesByName(name, \"mark\");\n\n    if (!entries.length) {\n      throw new Error(`No marks with the name ${name}`);\n    }\n\n    let mostRecentEntry = entries[entries.length - 1];\n    return this._perf.timeOrigin + mostRecentEntry.startTime;\n  }\n};\n\nthis.perfService = new _PerfService();\nconst EXPORTED_SYMBOLS = [\"_PerfService\", \"perfService\"];\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class Topic extends React.PureComponent {\n  render() {\n    const {url, name} = this.props;\n    return (<li><a key={name} className=\"topic-link\" href={url}>{name}</a></li>);\n  }\n}\n\nexport class Topics extends React.PureComponent {\n  render() {\n    const {topics, read_more_endpoint} = this.props;\n    return (\n      <div className=\"topic\">\n        <span><FormattedMessage id=\"pocket_read_more\" /></span>\n        <ul>{topics && topics.map(t => <Topic key={t.name} url={t.url} name={t.name} />)}</ul>\n\n        {read_more_endpoint && <a className=\"topic-read-more\" href={read_more_endpoint}>\n          <FormattedMessage id=\"pocket_read_even_more\" />\n        </a>}\n      </div>\n    );\n  }\n}\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {MIN_CORNER_FAVICON_SIZE, MIN_RICH_FAVICON_SIZE, TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {CollapsibleSection} from \"content-src/components/CollapsibleSection/CollapsibleSection\";\nimport {ComponentPerfTimer} from \"content-src/components/ComponentPerfTimer/ComponentPerfTimer\";\nimport {connect} from \"react-redux\";\nimport {injectIntl} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\nimport {TopSiteForm} from \"./TopSiteForm\";\nimport {TopSiteList} from \"./TopSite\";\n\nfunction topSiteIconType(link) {\n  if (link.customScreenshotURL) {\n    return \"custom_screenshot\";\n  }\n  if (link.tippyTopIcon || link.faviconRef === \"tippytop\") {\n    return \"tippytop\";\n  }\n  if (link.faviconSize >= MIN_RICH_FAVICON_SIZE) {\n    return \"rich_icon\";\n  }\n  if (link.screenshot && link.faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n    return \"screenshot_with_icon\";\n  }\n  if (link.screenshot) {\n    return \"screenshot\";\n  }\n  return \"no_image\";\n}\n\n/**\n * Iterates through TopSites and counts types of images.\n * @param acc Accumulator for reducer.\n * @param topsite Entry in TopSites.\n */\nfunction countTopSitesIconsTypes(topSites) {\n  const countTopSitesTypes = (acc, link) => {\n    acc[topSiteIconType(link)]++;\n    return acc;\n  };\n\n  return topSites.reduce(countTopSitesTypes, {\n    \"custom_screenshot\": 0,\n    \"screenshot_with_icon\": 0,\n    \"screenshot\": 0,\n    \"tippytop\": 0,\n    \"rich_icon\": 0,\n    \"no_image\": 0\n  });\n}\n\nexport class _TopSites extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onFormClose = this.onFormClose.bind(this);\n  }\n\n  /**\n   * Dispatch session statistics about the quality of TopSites icons and pinned count.\n   */\n  _dispatchTopSitesStats() {\n    const topSites = this._getVisibleTopSites();\n    const topSitesIconsStats = countTopSitesIconsTypes(topSites);\n    const topSitesPinned = topSites.filter(site => !!site.isPinned).length;\n    // Dispatch telemetry event with the count of TopSites images types.\n    this.props.dispatch(ac.AlsoToMain({\n      type: at.SAVE_SESSION_PERF_DATA,\n      data: {topsites_icon_stats: topSitesIconsStats, topsites_pinned: topSitesPinned}\n    }));\n  }\n\n  /**\n   * Return the TopSites that are visible based on prefs and window width.\n   */\n  _getVisibleTopSites() {\n    // We hide 2 sites per row when not in the wide layout.\n    let sitesPerRow = TOP_SITES_MAX_SITES_PER_ROW;\n    // $break-point-widest = 1072px (from _variables.scss)\n    if (!global.matchMedia(`(min-width: 1072px)`).matches) {\n      sitesPerRow -= 2;\n    }\n    return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);\n  }\n\n  componentDidUpdate() {\n    this._dispatchTopSitesStats();\n  }\n\n  componentDidMount() {\n    this._dispatchTopSitesStats();\n  }\n\n  onFormClose() {\n    this.props.dispatch(ac.UserEvent({\n      source: TOP_SITES_SOURCE,\n      event: \"TOP_SITES_EDIT_CLOSE\"\n    }));\n    this.props.dispatch({type: at.TOP_SITES_CANCEL_EDIT});\n  }\n\n  render() {\n    const {props} = this;\n    const {editForm} = props.TopSites;\n\n    return (<ComponentPerfTimer id=\"topsites\" initialized={props.TopSites.initialized} dispatch={props.dispatch}>\n      <CollapsibleSection\n        className=\"top-sites\"\n        icon=\"topsites\"\n        id=\"topsites\"\n        title={{id: \"header_top_sites\"}}\n        extraMenuOptions={[\"AddTopSite\"]}\n        showPrefName=\"feeds.topsites\"\n        eventSource={TOP_SITES_SOURCE}\n        collapsed={props.TopSites.pref ? props.TopSites.pref.collapsed : undefined}\n        isFirst={props.isFirst}\n        isLast={props.isLast}\n        dispatch={props.dispatch}>\n        <TopSiteList TopSites={props.TopSites} TopSitesRows={props.TopSitesRows} dispatch={props.dispatch} intl={props.intl} topSiteIconType={topSiteIconType} />\n        <div className=\"edit-topsites-wrapper\">\n          {editForm &&\n            <div className=\"edit-topsites\">\n              <div className=\"modal-overlay\" onClick={this.onFormClose} />\n              <div className=\"modal\">\n                <TopSiteForm\n                  site={props.TopSites.rows[editForm.index]}\n                  onClose={this.onFormClose}\n                  dispatch={this.props.dispatch}\n                  intl={this.props.intl}\n                  {...editForm} />\n              </div>\n            </div>\n          }\n        </div>\n      </CollapsibleSection>\n    </ComponentPerfTimer>);\n  }\n}\n\nexport const TopSites = connect(state => ({\n  TopSites: state.TopSites,\n  Prefs: state.Prefs,\n  TopSitesRows: state.Prefs.values.topSitesRows\n}))(injectIntl(_TopSites));\n","export const TOP_SITES_SOURCE = \"TOP_SITES\";\nexport const TOP_SITES_CONTEXT_MENU_OPTIONS = [\"CheckPinTopSite\", \"EditTopSite\", \"Separator\",\n  \"OpenInNewWindow\", \"OpenInPrivateWindow\", \"Separator\", \"BlockUrl\", \"DeleteUrl\"];\n// minimum size necessary to show a rich icon instead of a screenshot\nexport const MIN_RICH_FAVICON_SIZE = 96;\n// minimum size necessary to show any icon in the top left corner with a screenshot\nexport const MIN_CORNER_FAVICON_SIZE = 16;\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage, injectIntl} from \"react-intl\";\nimport {\n  MIN_CORNER_FAVICON_SIZE,\n  MIN_RICH_FAVICON_SIZE,\n  TOP_SITES_CONTEXT_MENU_OPTIONS,\n  TOP_SITES_SOURCE\n} from \"./TopSitesConstants\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\nimport {TOP_SITES_MAX_SITES_PER_ROW} from \"common/Reducers.jsm\";\n\nexport class TopSiteLink extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {screenshotImage: null};\n    this.onDragEvent = this.onDragEvent.bind(this);\n  }\n\n  /*\n   * Helper to determine whether the drop zone should allow a drop. We only allow\n   * dropping top sites for now.\n   */\n  _allowDrop(e) {\n    return e.dataTransfer.types.includes(\"text/topsite-index\");\n  }\n\n  onDragEvent(event) {\n    switch (event.type) {\n      case \"click\":\n        // Stop any link clicks if we started any dragging\n        if (this.dragged) {\n          event.preventDefault();\n        }\n        break;\n      case \"dragstart\":\n        this.dragged = true;\n        event.dataTransfer.effectAllowed = \"move\";\n        event.dataTransfer.setData(\"text/topsite-index\", this.props.index);\n        event.target.blur();\n        this.props.onDragEvent(event, this.props.index, this.props.link, this.props.title);\n        break;\n      case \"dragend\":\n        this.props.onDragEvent(event);\n        break;\n      case \"dragenter\":\n      case \"dragover\":\n      case \"drop\":\n        if (this._allowDrop(event)) {\n          event.preventDefault();\n          this.props.onDragEvent(event, this.props.index);\n        }\n        break;\n      case \"mousedown\":\n        // Reset at the first mouse event of a potential drag\n        this.dragged = false;\n        break;\n    }\n  }\n\n  /**\n   * Helper to obtain the next state based on nextProps and prevState.\n   *\n   * NOTE: Rename this method to getDerivedStateFromProps when we update React\n   *       to >= 16.3. We will need to update tests as well. We cannot rename this\n   *       method to getDerivedStateFromProps now because there is a mismatch in\n   *       the React version that we are using for both testing and production.\n   *       (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n   *\n   * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n   */\n  static getNextStateFromProps(nextProps, prevState) {\n    const {screenshot} = nextProps.link;\n    const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.screenshotImage, screenshot);\n    if (imageInState) {\n      return null;\n    }\n\n    // Since image was updated, attempt to revoke old image blob URL, if it exists.\n    ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.screenshotImage);\n\n    return {screenshotImage: ScreenshotUtils.createLocalImageObject(screenshot)};\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillMount() {\n    const nextState = TopSiteLink.getNextStateFromProps(this.props, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillReceiveProps(nextProps) {\n    const nextState = TopSiteLink.getNextStateFromProps(nextProps, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  componentWillUnmount() {\n    ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.screenshotImage);\n  }\n\n  render() {\n    const {children, className, defaultStyle, isDraggable, link, onClick, title} = this.props;\n    const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : \"\"}${link.isDragged ? \" dragged\" : \"\"}`;\n    const {tippyTopIcon, faviconSize} = link;\n    const [letterFallback] = title;\n    let imageClassName;\n    let imageStyle;\n    let showSmallFavicon = false;\n    let smallFaviconStyle;\n    let smallFaviconFallback;\n    let hasScreenshotImage = this.state.screenshotImage && this.state.screenshotImage.url;\n    if (defaultStyle) { // force no styles (letter fallback) even if the link has imagery\n      smallFaviconFallback = false;\n    } else if (link.customScreenshotURL) {\n      // assume high quality custom screenshot and use rich icon styles and class names\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\"\n      };\n    } else if (tippyTopIcon || faviconSize >= MIN_RICH_FAVICON_SIZE) {\n      // styles and class names for top sites with rich icons\n      imageClassName = \"top-site-icon rich-icon\";\n      imageStyle = {\n        backgroundColor: link.backgroundColor,\n        backgroundImage: `url(${tippyTopIcon || link.favicon})`\n      };\n    } else {\n      // styles and class names for top sites with screenshot + small icon in top left corner\n      imageClassName = `screenshot${hasScreenshotImage ? \" active\" : \"\"}`;\n      imageStyle = {backgroundImage: hasScreenshotImage ? `url(${this.state.screenshotImage.url})` : \"none\"};\n\n      // only show a favicon in top left if it's greater than 16x16\n      if (faviconSize >= MIN_CORNER_FAVICON_SIZE) {\n        showSmallFavicon = true;\n        smallFaviconStyle = {backgroundImage:  `url(${link.favicon})`};\n      } else if (hasScreenshotImage) {\n        // Don't show a small favicon if there is no screenshot, because that\n        // would result in two fallback icons\n        showSmallFavicon = true;\n        smallFaviconFallback = true;\n      }\n    }\n    let draggableProps = {};\n    if (isDraggable) {\n      draggableProps = {\n        onClick: this.onDragEvent,\n        onDragEnd: this.onDragEvent,\n        onDragStart: this.onDragEvent,\n        onMouseDown: this.onDragEvent\n      };\n    }\n    return (<li className={topSiteOuterClassName} onDrop={this.onDragEvent} onDragOver={this.onDragEvent} onDragEnter={this.onDragEvent} onDragLeave={this.onDragEvent} {...draggableProps}>\n      <div className=\"top-site-inner\">\n         <a href={link.url} onClick={onClick}>\n            <div className=\"tile\" aria-hidden={true} data-fallback={letterFallback}>\n              <div className={imageClassName} style={imageStyle} />\n              {showSmallFavicon && <div\n                className=\"top-site-icon default-icon\"\n                data-fallback={smallFaviconFallback && letterFallback}\n                style={smallFaviconStyle} />}\n           </div>\n           <div className={`title ${link.isPinned ? \"pinned\" : \"\"}`}>\n             {link.isPinned && <div className=\"icon icon-pin-small\" />}\n              <span dir=\"auto\">{title}</span>\n           </div>\n         </a>\n         {children}\n      </div>\n    </li>);\n  }\n}\nTopSiteLink.defaultProps = {\n  title: \"\",\n  link: {},\n  isDraggable: true\n};\n\nexport class TopSite extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {showContextMenu: false};\n    this.onLinkClick = this.onLinkClick.bind(this);\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    const value = {icon_type: this.props.link.iconType};\n    // Filter out \"not_pinned\" type for being the default\n    if (this.props.link.isPinned) {\n      value.card_type = \"pinned\";\n    }\n    return {value};\n  }\n\n  userEvent(event) {\n    this.props.dispatch(ac.UserEvent(Object.assign({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: this.props.index\n    }, this._getTelemetryInfo())));\n  }\n\n  onLinkClick(event) {\n    this.userEvent(\"CLICK\");\n\n    // Specially handle a top site link click for \"typed\" frecency bonus as\n    // specified as a property on the link.\n    event.preventDefault();\n    const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n    this.props.dispatch(ac.OnlyToMain({\n      type: at.OPEN_LINK,\n      data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})\n    }));\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.props.onActivate(this.props.index);\n    this.setState({showContextMenu: true});\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  render() {\n    const {props} = this;\n    const {link} = props;\n    const isContextMenuOpen = this.state.showContextMenu && props.activeIndex === props.index;\n    const title = link.label || link.hostname;\n    return (<TopSiteLink {...props} onClick={this.onLinkClick} onDragEvent={this.props.onDragEvent} className={`${props.className || \"\"}${isContextMenuOpen ? \" active\" : \"\"}`} title={title}>\n        <div>\n          <button className=\"context-menu-button icon\" onClick={this.onMenuButtonClick}>\n            <span className=\"sr-only\">\n              <FormattedMessage id=\"context_menu_button_sr\" values={{title}} />\n            </span>\n          </button>\n          {isContextMenuOpen &&\n            <LinkMenu\n              dispatch={props.dispatch}\n              index={props.index}\n              onUpdate={this.onMenuUpdate}\n              options={TOP_SITES_CONTEXT_MENU_OPTIONS}\n              site={link}\n              siteInfo={this._getTelemetryInfo()}\n              source={TOP_SITES_SOURCE} />\n          }\n        </div>\n    </TopSiteLink>);\n  }\n}\nTopSite.defaultProps = {\n  link: {},\n  onActivate() {}\n};\n\nexport class TopSitePlaceholder extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onEditButtonClick = this.onEditButtonClick.bind(this);\n  }\n\n  onEditButtonClick() {\n    this.props.dispatch(\n      {type: at.TOP_SITES_EDIT, data: {index: this.props.index}});\n  }\n\n  render() {\n    return (<TopSiteLink {...this.props} className={`placeholder ${this.props.className || \"\"}`} isDraggable={false}>\n      <button className=\"context-menu-button edit-button icon\"\n       title={this.props.intl.formatMessage({id: \"edit_topsites_edit_button\"})}\n       onClick={this.onEditButtonClick} />\n    </TopSiteLink>);\n  }\n}\n\nexport class _TopSiteList extends React.PureComponent {\n  static get DEFAULT_STATE() {\n    return {\n      activeIndex: null,\n      draggedIndex: null,\n      draggedSite: null,\n      draggedTitle: null,\n      topSitesPreview: null\n    };\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = _TopSiteList.DEFAULT_STATE;\n    this.onDragEvent = this.onDragEvent.bind(this);\n    this.onActivate = this.onActivate.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (this.state.draggedSite) {\n      const prevTopSites = this.props.TopSites && this.props.TopSites.rows;\n      const newTopSites = nextProps.TopSites && nextProps.TopSites.rows;\n      if (prevTopSites && prevTopSites[this.state.draggedIndex] &&\n        prevTopSites[this.state.draggedIndex].url === this.state.draggedSite.url &&\n        (!newTopSites[this.state.draggedIndex] || newTopSites[this.state.draggedIndex].url !== this.state.draggedSite.url)) {\n        // We got the new order from the redux store via props. We can clear state now.\n        this.setState(_TopSiteList.DEFAULT_STATE);\n      }\n    }\n  }\n\n  userEvent(event, index) {\n    this.props.dispatch(ac.UserEvent({\n      event,\n      source: TOP_SITES_SOURCE,\n      action_position: index\n    }));\n  }\n\n  onDragEvent(event, index, link, title) {\n    switch (event.type) {\n      case \"dragstart\":\n        this.dropped = false;\n        this.setState({\n          draggedIndex: index,\n          draggedSite: link,\n          draggedTitle: title,\n          activeIndex: null\n        });\n        this.userEvent(\"DRAG\", index);\n        break;\n      case \"dragend\":\n        if (!this.dropped) {\n          // If there was no drop event, reset the state to the default.\n          this.setState(_TopSiteList.DEFAULT_STATE);\n        }\n        break;\n      case \"dragenter\":\n        if (index === this.state.draggedIndex) {\n          this.setState({topSitesPreview: null});\n        } else {\n          this.setState({topSitesPreview: this._makeTopSitesPreview(index)});\n        }\n        break;\n      case \"drop\":\n        if (index !== this.state.draggedIndex) {\n          this.dropped = true;\n          this.props.dispatch(ac.AlsoToMain({\n            type: at.TOP_SITES_INSERT,\n            data: {\n              site: {\n                url: this.state.draggedSite.url,\n                label: this.state.draggedTitle,\n                customScreenshotURL: this.state.draggedSite.customScreenshotURL\n              },\n              index,\n              draggedFromIndex: this.state.draggedIndex\n            }\n          }));\n          this.userEvent(\"DROP\", index);\n        }\n        break;\n    }\n  }\n\n  _getTopSites() {\n    // Make a copy of the sites to truncate or extend to desired length\n    let topSites = this.props.TopSites.rows.slice();\n    topSites.length = this.props.TopSitesRows * TOP_SITES_MAX_SITES_PER_ROW;\n    return topSites;\n  }\n\n  /**\n   * Make a preview of the topsites that will be the result of dropping the currently\n   * dragged site at the specified index.\n   */\n  _makeTopSitesPreview(index) {\n    const topSites = this._getTopSites();\n    topSites[this.state.draggedIndex] = null;\n    const pinnedOnly = topSites.map(site => ((site && site.isPinned) ? site : null));\n    const unpinned = topSites.filter(site => site && !site.isPinned);\n    const siteToInsert = Object.assign({}, this.state.draggedSite, {isPinned: true, isDragged: true});\n    if (!pinnedOnly[index]) {\n      pinnedOnly[index] = siteToInsert;\n    } else {\n      // Find the hole to shift the pinned site(s) towards. We shift towards the\n      // hole left by the site being dragged.\n      let holeIndex = index;\n      const indexStep = index > this.state.draggedIndex ? -1 : 1;\n      while (pinnedOnly[holeIndex]) {\n        holeIndex += indexStep;\n      }\n\n      // Shift towards the hole.\n      const shiftingStep = index > this.state.draggedIndex ? 1 : -1;\n      while (holeIndex !== index) {\n        const nextIndex = holeIndex + shiftingStep;\n        pinnedOnly[holeIndex] = pinnedOnly[nextIndex];\n        holeIndex = nextIndex;\n      }\n      pinnedOnly[index] = siteToInsert;\n    }\n\n    // Fill in the remaining holes with unpinned sites.\n    const preview = pinnedOnly;\n    for (let i = 0; i < preview.length; i++) {\n      if (!preview[i]) {\n        preview[i] = unpinned.shift() || null;\n      }\n    }\n\n    return preview;\n  }\n\n  onActivate(index) {\n    this.setState({activeIndex: index});\n  }\n\n  render() {\n    const {props} = this;\n    const topSites = this.state.topSitesPreview || this._getTopSites();\n    const topSitesUI = [];\n    const commonProps = {\n      onDragEvent: this.onDragEvent,\n      dispatch: props.dispatch,\n      intl: props.intl\n    };\n    // We assign a key to each placeholder slot. We need it to be independent\n    // of the slot index (i below) so that the keys used stay the same during\n    // drag and drop reordering and the underlying DOM nodes are reused.\n    // This mostly (only?) affects linux so be sure to test on linux before changing.\n    let holeIndex = 0;\n\n    // On narrow viewports, we only show 6 sites per row. We'll mark the rest as\n    // .hide-for-narrow to hide in CSS via @media query.\n    const maxNarrowVisibleIndex = props.TopSitesRows * 6;\n\n    for (let i = 0, l = topSites.length; i < l; i++) {\n      const link = topSites[i] && Object.assign({}, topSites[i], {iconType: this.props.topSiteIconType(topSites[i])});\n      const slotProps = {\n        key: link ? link.url : holeIndex++,\n        index: i\n      };\n      if (i >= maxNarrowVisibleIndex) {\n        slotProps.className = \"hide-for-narrow\";\n      }\n      topSitesUI.push(!link ? (\n        <TopSitePlaceholder\n          {...slotProps}\n          {...commonProps} />\n      ) : (\n        <TopSite\n          link={link}\n          activeIndex={this.state.activeIndex}\n          onActivate={this.onActivate}\n          {...slotProps}\n          {...commonProps} />\n      ));\n    }\n    return (<ul className={`top-sites-list${this.state.draggedSite ? \" dnd-active\" : \"\"}`}>\n      {topSitesUI}\n    </ul>);\n  }\n}\n\nexport const TopSiteList = injectIntl(_TopSiteList);\n","import {FormattedMessage, injectIntl} from \"react-intl\";\nimport {actionCreators as ac} from \"common/Actions.jsm\";\nimport {connect} from \"react-redux\";\nimport React from \"react\";\n\nexport class _StartupOverlay extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onInputChange = this.onInputChange.bind(this);\n    this.onSubmit = this.onSubmit.bind(this);\n    this.clickSkip = this.clickSkip.bind(this);\n    this.initScene = this.initScene.bind(this);\n    this.removeOverlay = this.removeOverlay.bind(this);\n    this.onInputInvalid = this.onInputInvalid.bind(this);\n\n    this.state = {\n      emailInput: \"\",\n      overlayRemoved: false\n    };\n    this.initScene();\n  }\n\n  initScene() {\n    // Timeout to allow the scene to render once before attaching the attribute\n    // to trigger the animation.\n    setTimeout(() => {\n      this.setState({show: true});\n    }, 10);\n  }\n\n  removeOverlay() {\n    window.removeEventListener(\"visibilitychange\", this.removeOverlay);\n    this.setState({show: false});\n    setTimeout(() => {\n      // Allow scrolling and fully remove overlay after animation finishes.\n      document.body.classList.remove(\"welcome\");\n      this.setState({overlayRemoved: true});\n    }, 400);\n  }\n\n  onInputChange(e) {\n    let error = e.target.previousSibling;\n    this.setState({emailInput: e.target.value});\n    error.classList.remove(\"active\");\n    e.target.classList.remove(\"invalid\");\n  }\n\n  onSubmit() {\n    this.props.dispatch(ac.UserEvent({event: \"SUBMIT_EMAIL\"}));\n    window.addEventListener(\"visibilitychange\", this.removeOverlay);\n  }\n\n  clickSkip() {\n    this.props.dispatch(ac.UserEvent({event: \"SKIPPED_SIGNIN\"}));\n    this.removeOverlay();\n  }\n\n  onInputInvalid(e) {\n    let error = e.target.previousSibling;\n    error.classList.add(\"active\");\n    e.target.classList.add(\"invalid\");\n    e.preventDefault(); // Override built-in form validation popup\n    e.target.focus();\n  }\n\n  render() {\n    // When skipping the onboarding tour we show AS but we are still on\n    // about:welcome, prop.isFirstrun is true and StartupOverlay is rendered\n    if (this.state.overlayRemoved) {\n      return null;\n    }\n\n    let termsLink = (<a href=\"https://accounts.firefox.com/legal/terms\" target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_terms_of_service\" /></a>);\n    let privacyLink = (<a href=\"https://accounts.firefox.com/legal/privacy\" target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_privacy_notice\" /></a>);\n    return (\n      <div className={`overlay-wrapper ${this.state.show ? \"show \" : \"\"}`}>\n        <div className=\"background\" />\n        <div className=\"firstrun-scene\">\n          <div className=\"fxaccounts-container\">\n            <div className=\"firstrun-left-divider\">\n              <h1 className=\"firstrun-title\"><FormattedMessage id=\"firstrun_title\" /></h1>\n              <p className=\"firstrun-content\"><FormattedMessage id=\"firstrun_content\" /></p>\n              <a className=\"firstrun-link\" href=\"https://www.mozilla.org/firefox/features/sync/\" target=\"_blank\" rel=\"noopener noreferrer\"><FormattedMessage id=\"firstrun_learn_more_link\" /></a>\n            </div>\n            <div className=\"firstrun-sign-in\">\n              <p className=\"form-header\"><FormattedMessage id=\"firstrun_form_header\" /><span className=\"sub-header\"><FormattedMessage id=\"firstrun_form_sub_header\" /></span></p>\n              <form method=\"get\" action=\"https://accounts.firefox.com\" target=\"_blank\" rel=\"noopener noreferrer\" onSubmit={this.onSubmit}>\n                <input name=\"service\" type=\"hidden\" value=\"sync\" />\n                <input name=\"action\" type=\"hidden\" value=\"email\" />\n                <input name=\"context\" type=\"hidden\" value=\"fx_desktop_v3\" />\n                <input name=\"entrypoint\" type=\"hidden\" value=\"activity-stream-firstrun\" />\n                <input name=\"utm_source\" type=\"hidden\" value=\"activity-stream\" />\n                <input name=\"utm_campaign\" type=\"hidden\" value=\"firstrun\" />\n                <span className=\"error\">{this.props.intl.formatMessage({id: \"firstrun_invalid_input\"})}</span>\n                <input className=\"email-input\" name=\"email\" type=\"email\" required=\"true\" onInvalid={this.onInputInvalid} placeholder={this.props.intl.formatMessage({id: \"firstrun_email_input_placeholder\"})} onChange={this.onInputChange} />\n                <div className=\"extra-links\">\n                  <FormattedMessage\n                    id=\"firstrun_extra_legal_links\"\n                    values={{\n                      terms: termsLink,\n                      privacy: privacyLink\n                    }} />\n                </div>\n                <button className=\"continue-button\" type=\"submit\"><FormattedMessage id=\"firstrun_continue_to_login\" /></button>\n              </form>\n              <button className=\"skip-button\" disabled={!!this.state.emailInput} onClick={this.clickSkip}><FormattedMessage id=\"firstrun_skip_login\" /></button>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport const StartupOverlay = connect()(injectIntl(_StartupOverlay));\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {perfService as perfSvc} from \"common/PerfService.jsm\";\n\nconst VISIBLE = \"visible\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\n\nexport class DetectUserSessionStart {\n  constructor(store, options = {}) {\n    this._store = store;\n    // Overrides for testing\n    this.document = options.document || global.document;\n    this._perfService = options.perfService || perfSvc;\n    this._onVisibilityChange = this._onVisibilityChange.bind(this);\n  }\n\n  /**\n   * sendEventOrAddListener - Notify immediately if the page is already visible,\n   *                    or else set up a listener for when visibility changes.\n   *                    This is needed for accurate session tracking for telemetry,\n   *                    because tabs are pre-loaded.\n   */\n  sendEventOrAddListener() {\n    if (this.document.visibilityState === VISIBLE) {\n      // If the document is already visible, to the user, send a notification\n      // immediately that a session has started.\n      this._sendEvent();\n    } else {\n      // If the document is not visible, listen for when it does become visible.\n      this.document.addEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n\n  /**\n   * _sendEvent - Sends a message to the main process to indicate the current\n   *              tab is now visible to the user, includes the\n   *              visibility_event_rcvd_ts time in ms from the UNIX epoch.\n   */\n  _sendEvent() {\n    this._perfService.mark(\"visibility_event_rcvd_ts\");\n\n    try {\n      let visibility_event_rcvd_ts = this._perfService\n        .getMostRecentAbsMarkStartByName(\"visibility_event_rcvd_ts\");\n\n      this._store.dispatch(ac.AlsoToMain({\n        type: at.SAVE_SESSION_PERF_DATA,\n        data: {visibility_event_rcvd_ts}\n      }));\n    } catch (ex) {\n      // If this failed, it's likely because the `privacy.resistFingerprinting`\n      // pref is true.  We should at least not blow up.\n    }\n  }\n\n  /**\n   * _onVisibilityChange - If the visibility has changed to visible, sends a notification\n   *                      and removes the event listener. This should only be called once per tab.\n   */\n  _onVisibilityChange() {\n    if (this.document.visibilityState === VISIBLE) {\n      this._sendEvent();\n      this.document.removeEventListener(VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);\n    }\n  }\n}\n","/*  eslint no-magic-numbers: [0]  */\n\nconst MAX_PLACEABLES = 100;\n\nconst entryIdentifierRe = /-?[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst identifierRe = /[a-zA-Z][a-zA-Z0-9_-]*/y;\nconst functionIdentifierRe = /^[A-Z][A-Z_?-]*$/;\n\n/**\n * The `Parser` class is responsible for parsing FTL resources.\n *\n * It's only public method is `getResource(source)` which takes an FTL string\n * and returns a two element Array with an Object of entries generated from the\n * source as the first element and an array of SyntaxError objects as the\n * second.\n *\n * This parser is optimized for runtime performance.\n *\n * There is an equivalent of this parser in syntax/parser which is\n * generating full AST which is useful for FTL tools.\n */\nclass RuntimeParser {\n  /**\n   * Parse FTL code into entries formattable by the MessageContext.\n   *\n   * Given a string of FTL syntax, return a map of entries that can be passed\n   * to MessageContext.format and a list of errors encountered during parsing.\n   *\n   * @param {String} string\n   * @returns {Array<Object, Array>}\n   */\n  getResource(string) {\n    this._source = string;\n    this._index = 0;\n    this._length = string.length;\n    this.entries = {};\n\n    const errors = [];\n\n    this.skipWS();\n    while (this._index < this._length) {\n      try {\n        this.getEntry();\n      } catch (e) {\n        if (e instanceof SyntaxError) {\n          errors.push(e);\n\n          this.skipToNextEntryStart();\n        } else {\n          throw e;\n        }\n      }\n      this.skipWS();\n    }\n\n    return [this.entries, errors];\n  }\n\n  /**\n   * Parse the source string from the current index as an FTL entry\n   * and add it to object's entries property.\n   *\n   * @private\n   */\n  getEntry() {\n    // The index here should either be at the beginning of the file\n    // or right after new line.\n    if (this._index !== 0 &&\n        this._source[this._index - 1] !== \"\\n\") {\n      throw this.error(`Expected an entry to start\n        at the beginning of the file or on a new line.`);\n    }\n\n    const ch = this._source[this._index];\n\n    // We don't care about comments or sections at runtime\n    if (ch === \"/\" ||\n      (ch === \"#\" &&\n        [\" \", \"#\", \"\\n\"].includes(this._source[this._index + 1]))) {\n      this.skipComment();\n      return;\n    }\n\n    if (ch === \"[\") {\n      this.skipSection();\n      return;\n    }\n\n    this.getMessage();\n  }\n\n  /**\n   * Skip the section entry from the current index.\n   *\n   * @private\n   */\n  skipSection() {\n    this._index += 1;\n    if (this._source[this._index] !== \"[\") {\n      throw this.error('Expected \"[[\" to open a section');\n    }\n\n    this._index += 1;\n\n    this.skipInlineWS();\n    this.getVariantName();\n    this.skipInlineWS();\n\n    if (this._source[this._index] !== \"]\" ||\n        this._source[this._index + 1] !== \"]\") {\n      throw this.error('Expected \"]]\" to close a section');\n    }\n\n    this._index += 2;\n  }\n\n  /**\n   * Parse the source string from the current index as an FTL message\n   * and add it to the entries property on the Parser.\n   *\n   * @private\n   */\n  getMessage() {\n    const id = this.getEntryIdentifier();\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] === \"=\") {\n      this._index++;\n    }\n\n    this.skipInlineWS();\n\n    const val = this.getPattern();\n\n    if (id.startsWith(\"-\") && val === null) {\n      throw this.error(\"Expected term to have a value\");\n    }\n\n    let attrs = null;\n\n    if (this._source[this._index] === \" \") {\n      const lineStart = this._index;\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \".\") {\n        this._index = lineStart;\n        attrs = this.getAttributes();\n      }\n    }\n\n    if (attrs === null && typeof val === \"string\") {\n      this.entries[id] = val;\n    } else {\n      if (val === null && attrs === null) {\n        throw this.error(\"Expected message to have a value or attributes\");\n      }\n\n      this.entries[id] = {};\n\n      if (val !== null) {\n        this.entries[id].val = val;\n      }\n\n      if (attrs !== null) {\n        this.entries[id].attrs = attrs;\n      }\n    }\n  }\n\n  /**\n   * Skip whitespace.\n   *\n   * @private\n   */\n  skipWS() {\n    let ch = this._source[this._index];\n    while (ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\") {\n      ch = this._source[++this._index];\n    }\n  }\n\n  /**\n   * Skip inline whitespace (space and \\t).\n   *\n   * @private\n   */\n  skipInlineWS() {\n    let ch = this._source[this._index];\n    while (ch === \" \" || ch === \"\\t\") {\n      ch = this._source[++this._index];\n    }\n  }\n\n  /**\n   * Skip blank lines.\n   *\n   * @private\n   */\n  skipBlankLines() {\n    while (true) {\n      const ptr = this._index;\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \"\\n\") {\n        this._index += 1;\n      } else {\n        this._index = ptr;\n        break;\n      }\n    }\n  }\n\n  /**\n   * Get identifier using the provided regex.\n   *\n   * By default this will get identifiers of public messages, attributes and\n   * external arguments (without the $).\n   *\n   * @returns {String}\n   * @private\n   */\n  getIdentifier(re = identifierRe) {\n    re.lastIndex = this._index;\n    const result = re.exec(this._source);\n\n    if (result === null) {\n      this._index += 1;\n      throw this.error(`Expected an identifier [${re.toString()}]`);\n    }\n\n    this._index = re.lastIndex;\n    return result[0];\n  }\n\n  /**\n   * Get identifier of a Message or a Term (staring with a dash).\n   *\n   * @returns {String}\n   * @private\n   */\n  getEntryIdentifier() {\n    return this.getIdentifier(entryIdentifierRe);\n  }\n\n  /**\n   * Get Variant name.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getVariantName() {\n    let name = \"\";\n\n    const start = this._index;\n    let cc = this._source.charCodeAt(this._index);\n\n    if ((cc >= 97 && cc <= 122) || // a-z\n        (cc >= 65 && cc <= 90) || // A-Z\n        cc === 95 || cc === 32) { // _ <space>\n      cc = this._source.charCodeAt(++this._index);\n    } else {\n      throw this.error(\"Expected a keyword (starting with [a-zA-Z_])\");\n    }\n\n    while ((cc >= 97 && cc <= 122) || // a-z\n           (cc >= 65 && cc <= 90) || // A-Z\n           (cc >= 48 && cc <= 57) || // 0-9\n           cc === 95 || cc === 45 || cc === 32) { // _- <space>\n      cc = this._source.charCodeAt(++this._index);\n    }\n\n    // If we encountered the end of name, we want to test if the last\n    // collected character is a space.\n    // If it is, we will backtrack to the last non-space character because\n    // the keyword cannot end with a space character.\n    while (this._source.charCodeAt(this._index - 1) === 32) {\n      this._index--;\n    }\n\n    name += this._source.slice(start, this._index);\n\n    return { type: \"varname\", name };\n  }\n\n  /**\n   * Get simple string argument enclosed in `\"`.\n   *\n   * @returns {String}\n   * @private\n   */\n  getString() {\n    const start = this._index + 1;\n\n    while (++this._index < this._length) {\n      const ch = this._source[this._index];\n\n      if (ch === '\"') {\n        break;\n      }\n\n      if (ch === \"\\n\") {\n        throw this.error(\"Unterminated string expression\");\n      }\n    }\n\n    return this._source.substring(start, this._index++);\n  }\n\n  /**\n   * Parses a Message pattern.\n   * Message Pattern may be a simple string or an array of strings\n   * and placeable expressions.\n   *\n   * @returns {String|Array}\n   * @private\n   */\n  getPattern() {\n    // We're going to first try to see if the pattern is simple.\n    // If it is we can just look for the end of the line and read the string.\n    //\n    // Then, if either the line contains a placeable opening `{` or the\n    // next line starts an indentation, we switch to complex pattern.\n    const start = this._index;\n    let eol = this._source.indexOf(\"\\n\", this._index);\n\n    if (eol === -1) {\n      eol = this._length;\n    }\n\n    const firstLineContent = start !== eol ?\n      this._source.slice(start, eol) : null;\n\n    if (firstLineContent && firstLineContent.includes(\"{\")) {\n      return this.getComplexPattern();\n    }\n\n    this._index = eol + 1;\n\n    this.skipBlankLines();\n\n    if (this._source[this._index] !== \" \") {\n      // No indentation means we're done with this message. Callers should check\n      // if the return value here is null. It may be OK for messages, but not OK\n      // for terms, attributes and variants.\n      return firstLineContent;\n    }\n\n    const lineStart = this._index;\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] === \".\") {\n      // The pattern is followed by an attribute. Rewind _index to the first\n      // column of the current line as expected by getAttributes.\n      this._index = lineStart;\n      return firstLineContent;\n    }\n\n    if (firstLineContent) {\n      // It's a multiline pattern which started on the same line as the\n      // identifier. Reparse the whole pattern to make sure we get all of it.\n      this._index = start;\n    }\n\n    return this.getComplexPattern();\n  }\n\n  /**\n   * Parses a complex Message pattern.\n   * This function is called by getPattern when the message is multiline,\n   * or contains escape chars or placeables.\n   * It does full parsing of complex patterns.\n   *\n   * @returns {Array}\n   * @private\n   */\n  /* eslint-disable complexity */\n  getComplexPattern() {\n    let buffer = \"\";\n    const content = [];\n    let placeables = 0;\n\n    let ch = this._source[this._index];\n\n    while (this._index < this._length) {\n      // This block handles multi-line strings combining strings separated\n      // by new line.\n      if (ch === \"\\n\") {\n        this._index++;\n\n        // We want to capture the start and end pointers\n        // around blank lines and add them to the buffer\n        // but only if the blank lines are in the middle\n        // of the string.\n        const blankLinesStart = this._index;\n        this.skipBlankLines();\n        const blankLinesEnd = this._index;\n\n\n        if (this._source[this._index] !== \" \") {\n          break;\n        }\n        this.skipInlineWS();\n\n        if (this._source[this._index] === \"}\" ||\n            this._source[this._index] === \"[\" ||\n            this._source[this._index] === \"*\" ||\n            this._source[this._index] === \".\") {\n          this._index = blankLinesEnd;\n          break;\n        }\n\n        buffer += this._source.substring(blankLinesStart, blankLinesEnd);\n\n        if (buffer.length || content.length) {\n          buffer += \"\\n\";\n        }\n        ch = this._source[this._index];\n        continue;\n      } else if (ch === \"\\\\\") {\n        const ch2 = this._source[this._index + 1];\n        if (ch2 === '\"' || ch2 === \"{\" || ch2 === \"\\\\\") {\n          ch = ch2;\n          this._index++;\n        }\n      } else if (ch === \"{\") {\n        // Push the buffer to content array right before placeable\n        if (buffer.length) {\n          content.push(buffer);\n        }\n        if (placeables > MAX_PLACEABLES - 1) {\n          throw this.error(\n            `Too many placeables, maximum allowed is ${MAX_PLACEABLES}`);\n        }\n        buffer = \"\";\n        content.push(this.getPlaceable());\n\n        this._index++;\n\n        ch = this._source[this._index];\n        placeables++;\n        continue;\n      }\n\n      if (ch) {\n        buffer += ch;\n      }\n      this._index++;\n      ch = this._source[this._index];\n    }\n\n    if (content.length === 0) {\n      return buffer.length ? buffer : null;\n    }\n\n    if (buffer.length) {\n      content.push(buffer);\n    }\n\n    return content;\n  }\n  /* eslint-enable complexity */\n\n  /**\n   * Parses a single placeable in a Message pattern and returns its\n   * expression.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getPlaceable() {\n    const start = ++this._index;\n\n    this.skipWS();\n\n    if (this._source[this._index] === \"*\" ||\n       (this._source[this._index] === \"[\" &&\n        this._source[this._index + 1] !== \"]\")) {\n      const variants = this.getVariants();\n\n      return {\n        type: \"sel\",\n        exp: null,\n        vars: variants[0],\n        def: variants[1]\n      };\n    }\n\n    // Rewind the index and only support in-line white-space now.\n    this._index = start;\n    this.skipInlineWS();\n\n    const selector = this.getSelectorExpression();\n\n    this.skipWS();\n\n    const ch = this._source[this._index];\n\n    if (ch === \"}\") {\n      if (selector.type === \"attr\" && selector.id.name.startsWith(\"-\")) {\n        throw this.error(\n          \"Attributes of private messages cannot be interpolated.\"\n        );\n      }\n\n      return selector;\n    }\n\n    if (ch !== \"-\" || this._source[this._index + 1] !== \">\") {\n      throw this.error('Expected \"}\" or \"->\"');\n    }\n\n    if (selector.type === \"ref\") {\n      throw this.error(\"Message references cannot be used as selectors.\");\n    }\n\n    if (selector.type === \"var\") {\n      throw this.error(\"Variants cannot be used as selectors.\");\n    }\n\n    if (selector.type === \"attr\" && !selector.id.name.startsWith(\"-\")) {\n      throw this.error(\n        \"Attributes of public messages cannot be used as selectors.\"\n      );\n    }\n\n\n    this._index += 2; // ->\n\n    this.skipInlineWS();\n\n    if (this._source[this._index] !== \"\\n\") {\n      throw this.error(\"Variants should be listed in a new line\");\n    }\n\n    this.skipWS();\n\n    const variants = this.getVariants();\n\n    if (variants[0].length === 0) {\n      throw this.error(\"Expected members for the select expression\");\n    }\n\n    return {\n      type: \"sel\",\n      exp: selector,\n      vars: variants[0],\n      def: variants[1]\n    };\n  }\n\n  /**\n   * Parses a selector expression.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getSelectorExpression() {\n    const literal = this.getLiteral();\n\n    if (literal.type !== \"ref\") {\n      return literal;\n    }\n\n    if (this._source[this._index] === \".\") {\n      this._index++;\n\n      const name = this.getIdentifier();\n      this._index++;\n      return {\n        type: \"attr\",\n        id: literal,\n        name\n      };\n    }\n\n    if (this._source[this._index] === \"[\") {\n      this._index++;\n\n      const key = this.getVariantKey();\n      this._index++;\n      return {\n        type: \"var\",\n        id: literal,\n        key\n      };\n    }\n\n    if (this._source[this._index] === \"(\") {\n      this._index++;\n      const args = this.getCallArgs();\n\n      if (!functionIdentifierRe.test(literal.name)) {\n        throw this.error(\"Function names must be all upper-case\");\n      }\n\n      this._index++;\n\n      literal.type = \"fun\";\n\n      return {\n        type: \"call\",\n        fun: literal,\n        args\n      };\n    }\n\n    return literal;\n  }\n\n  /**\n   * Parses call arguments for a CallExpression.\n   *\n   * @returns {Array}\n   * @private\n   */\n  getCallArgs() {\n    const args = [];\n\n    while (this._index < this._length) {\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \")\") {\n        return args;\n      }\n\n      const exp = this.getSelectorExpression();\n\n      // MessageReference in this place may be an entity reference, like:\n      // `call(foo)`, or, if it's followed by `:` it will be a key-value pair.\n      if (exp.type !== \"ref\") {\n        args.push(exp);\n      } else {\n        this.skipInlineWS();\n\n        if (this._source[this._index] === \":\") {\n          this._index++;\n          this.skipInlineWS();\n\n          const val = this.getSelectorExpression();\n\n          // If the expression returned as a value of the argument\n          // is not a quote delimited string or number, throw.\n          //\n          // We don't have to check here if the pattern is quote delimited\n          // because that's the only type of string allowed in expressions.\n          if (typeof val === \"string\" ||\n              Array.isArray(val) ||\n              val.type === \"num\") {\n            args.push({\n              type: \"narg\",\n              name: exp.name,\n              val\n            });\n          } else {\n            this._index = this._source.lastIndexOf(\":\", this._index) + 1;\n            throw this.error(\n              \"Expected string in quotes, number.\");\n          }\n\n        } else {\n          args.push(exp);\n        }\n      }\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] === \")\") {\n        break;\n      } else if (this._source[this._index] === \",\") {\n        this._index++;\n      } else {\n        throw this.error('Expected \",\" or \")\"');\n      }\n    }\n\n    return args;\n  }\n\n  /**\n   * Parses an FTL Number.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getNumber() {\n    let num = \"\";\n    let cc = this._source.charCodeAt(this._index);\n\n    // The number literal may start with negative sign `-`.\n    if (cc === 45) {\n      num += \"-\";\n      cc = this._source.charCodeAt(++this._index);\n    }\n\n    // next, we expect at least one digit\n    if (cc < 48 || cc > 57) {\n      throw this.error(`Unknown literal \"${num}\"`);\n    }\n\n    // followed by potentially more digits\n    while (cc >= 48 && cc <= 57) {\n      num += this._source[this._index++];\n      cc = this._source.charCodeAt(this._index);\n    }\n\n    // followed by an optional decimal separator `.`\n    if (cc === 46) {\n      num += this._source[this._index++];\n      cc = this._source.charCodeAt(this._index);\n\n      // followed by at least one digit\n      if (cc < 48 || cc > 57) {\n        throw this.error(`Unknown literal \"${num}\"`);\n      }\n\n      // and optionally more digits\n      while (cc >= 48 && cc <= 57) {\n        num += this._source[this._index++];\n        cc = this._source.charCodeAt(this._index);\n      }\n    }\n\n    return {\n      type: \"num\",\n      val: num\n    };\n  }\n\n  /**\n   * Parses a list of Message attributes.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getAttributes() {\n    const attrs = {};\n\n    while (this._index < this._length) {\n      if (this._source[this._index] !== \" \") {\n        break;\n      }\n      this.skipInlineWS();\n\n      if (this._source[this._index] !== \".\") {\n        break;\n      }\n      this._index++;\n\n      const key = this.getIdentifier();\n\n      this.skipInlineWS();\n\n      if (this._source[this._index] !== \"=\") {\n        throw this.error('Expected \"=\"');\n      }\n      this._index++;\n\n      this.skipInlineWS();\n\n      const val = this.getPattern();\n\n      if (val === null) {\n        throw this.error(\"Expected attribute to have a value\");\n      }\n\n      if (typeof val === \"string\") {\n        attrs[key] = val;\n      } else {\n        attrs[key] = {\n          val\n        };\n      }\n\n      this.skipBlankLines();\n    }\n\n    return attrs;\n  }\n\n  /**\n   * Parses a list of Selector variants.\n   *\n   * @returns {Array}\n   * @private\n   */\n  getVariants() {\n    const variants = [];\n    let index = 0;\n    let defaultIndex;\n\n    while (this._index < this._length) {\n      const ch = this._source[this._index];\n\n      if ((ch !== \"[\" || this._source[this._index + 1] === \"[\") &&\n          ch !== \"*\") {\n        break;\n      }\n      if (ch === \"*\") {\n        this._index++;\n        defaultIndex = index;\n      }\n\n      if (this._source[this._index] !== \"[\") {\n        throw this.error('Expected \"[\"');\n      }\n\n      this._index++;\n\n      const key = this.getVariantKey();\n\n      this.skipInlineWS();\n\n      const val = this.getPattern();\n\n      if (val === null) {\n        throw this.error(\"Expected variant to have a value\");\n      }\n\n      variants[index++] = {key, val};\n\n      this.skipWS();\n    }\n\n    return [variants, defaultIndex];\n  }\n\n  /**\n   * Parses a Variant key.\n   *\n   * @returns {String}\n   * @private\n   */\n  getVariantKey() {\n    // VariantKey may be a Keyword or Number\n\n    const cc = this._source.charCodeAt(this._index);\n    let literal;\n\n    if ((cc >= 48 && cc <= 57) || cc === 45) {\n      literal = this.getNumber();\n    } else {\n      literal = this.getVariantName();\n    }\n\n    if (this._source[this._index] !== \"]\") {\n      throw this.error('Expected \"]\"');\n    }\n\n    this._index++;\n    return literal;\n  }\n\n  /**\n   * Parses an FTL literal.\n   *\n   * @returns {Object}\n   * @private\n   */\n  getLiteral() {\n    const cc0 = this._source.charCodeAt(this._index);\n\n    if (cc0 === 36) { // $\n      this._index++;\n      return {\n        type: \"ext\",\n        name: this.getIdentifier()\n      };\n    }\n\n    const cc1 = cc0 === 45 // -\n      // Peek at the next character after the dash.\n      ? this._source.charCodeAt(this._index + 1)\n      // Or keep using the character at the current index.\n      : cc0;\n\n    if ((cc1 >= 97 && cc1 <= 122) || // a-z\n        (cc1 >= 65 && cc1 <= 90)) { // A-Z\n      return {\n        type: \"ref\",\n        name: this.getEntryIdentifier()\n      };\n    }\n\n    if ((cc1 >= 48 && cc1 <= 57)) { // 0-9\n      return this.getNumber();\n    }\n\n    if (cc0 === 34) { // \"\n      return this.getString();\n    }\n\n    throw this.error(\"Expected literal\");\n  }\n\n  /**\n   * Skips an FTL comment.\n   *\n   * @private\n   */\n  skipComment() {\n    // At runtime, we don't care about comments so we just have\n    // to parse them properly and skip their content.\n    let eol = this._source.indexOf(\"\\n\", this._index);\n\n    while (eol !== -1 &&\n      ((this._source[eol + 1] === \"/\" && this._source[eol + 2] === \"/\") ||\n       (this._source[eol + 1] === \"#\" &&\n         [\" \", \"#\"].includes(this._source[eol + 2])))) {\n      this._index = eol + 3;\n\n      eol = this._source.indexOf(\"\\n\", this._index);\n\n      if (eol === -1) {\n        break;\n      }\n    }\n\n    if (eol === -1) {\n      this._index = this._length;\n    } else {\n      this._index = eol + 1;\n    }\n  }\n\n  /**\n   * Creates a new SyntaxError object with a given message.\n   *\n   * @param {String} message\n   * @returns {Object}\n   * @private\n   */\n  error(message) {\n    return new SyntaxError(message);\n  }\n\n  /**\n   * Skips to the beginning of a next entry after the current position.\n   * This is used to mark the boundary of junk entry in case of error,\n   * and recover from the returned position.\n   *\n   * @private\n   */\n  skipToNextEntryStart() {\n    let start = this._index;\n\n    while (true) {\n      if (start === 0 || this._source[start - 1] === \"\\n\") {\n        const cc = this._source.charCodeAt(start);\n\n        if ((cc >= 97 && cc <= 122) || // a-z\n            (cc >= 65 && cc <= 90) || // A-Z\n             cc === 47 || cc === 91) { // /[\n          this._index = start;\n          return;\n        }\n      }\n\n      start = this._source.indexOf(\"\\n\", start);\n\n      if (start === -1) {\n        this._index = this._length;\n        return;\n      }\n      start++;\n    }\n  }\n}\n\n/**\n * Parses an FTL string using RuntimeParser and returns the generated\n * object with entries and a list of errors.\n *\n * @param {String} string\n * @returns {Array<Object, Array>}\n */\nexport default function parse(string) {\n  const parser = new RuntimeParser();\n  return parser.getResource(string);\n}\n","/* global Intl */\n\n/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n\n  /**\n   * Create an `FluentType` instance.\n   *\n   * @param   {Any}    value - JavaScript value to wrap.\n   * @param   {Object} opts  - Configuration.\n   * @returns {FluentType}\n   */\n  constructor(value, opts) {\n    this.value = value;\n    this.opts = opts;\n  }\n\n  /**\n   * Unwrap the raw value stored by this `FluentType`.\n   *\n   * @returns {Any}\n   */\n  valueOf() {\n    return this.value;\n  }\n\n  /**\n   * Format this instance of `FluentType` to a string.\n   *\n   * Formatted values are suitable for use outside of the `MessageContext`.\n   * This method can use `Intl` formatters memoized by the `MessageContext`\n   * instance passed as an argument.\n   *\n   * @param   {MessageContext} [ctx]\n   * @returns {string}\n   */\n  toString() {\n    throw new Error(\"Subclasses of FluentType must implement toString.\");\n  }\n}\n\nexport class FluentNone extends FluentType {\n  toString() {\n    return this.value || \"???\";\n  }\n}\n\nexport class FluentNumber extends FluentType {\n  constructor(value, opts) {\n    super(parseFloat(value), opts);\n  }\n\n  toString(ctx) {\n    try {\n      const nf = ctx._memoizeIntlObject(\n        Intl.NumberFormat, this.opts\n      );\n      return nf.format(this.value);\n    } catch (e) {\n      // XXX Report the error.\n      return this.value;\n    }\n  }\n\n  /**\n   * Compare the object with another instance of a FluentType.\n   *\n   * @param   {MessageContext} ctx\n   * @param   {FluentType}     other\n   * @returns {bool}\n   */\n  match(ctx, other) {\n    if (other instanceof FluentNumber) {\n      return this.value === other.value;\n    }\n    return false;\n  }\n}\n\nexport class FluentDateTime extends FluentType {\n  constructor(value, opts) {\n    super(new Date(value), opts);\n  }\n\n  toString(ctx) {\n    try {\n      const dtf = ctx._memoizeIntlObject(\n        Intl.DateTimeFormat, this.opts\n      );\n      return dtf.format(this.value);\n    } catch (e) {\n      // XXX Report the error.\n      return this.value;\n    }\n  }\n}\n\nexport class FluentSymbol extends FluentType {\n  toString() {\n    return this.value;\n  }\n\n  /**\n   * Compare the object with another instance of a FluentType.\n   *\n   * @param   {MessageContext} ctx\n   * @param   {FluentType}     other\n   * @returns {bool}\n   */\n  match(ctx, other) {\n    if (other instanceof FluentSymbol) {\n      return this.value === other.value;\n    } else if (typeof other === \"string\") {\n      return this.value === other;\n    } else if (other instanceof FluentNumber) {\n      const pr = ctx._memoizeIntlObject(\n        Intl.PluralRules, other.opts\n      );\n      return this.value === pr.select(other.value);\n    }\n    return false;\n  }\n}\n","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n *   - args - an array of positional args\n *   - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentType`.  Functions must return `FluentType` objects as well.\n */\n\nimport { FluentNumber, FluentDateTime } from \"./types\";\n\nexport default {\n  \"NUMBER\": ([arg], opts) =>\n    new FluentNumber(arg.valueOf(), merge(arg.opts, opts)),\n  \"DATETIME\": ([arg], opts) =>\n    new FluentDateTime(arg.valueOf(), merge(arg.opts, opts)),\n};\n\nfunction merge(argopts, opts) {\n  return Object.assign({}, argopts, values(opts));\n}\n\nfunction values(opts) {\n  const unwrapped = {};\n  for (const [name, opt] of Object.entries(opts)) {\n    unwrapped[name] = opt.valueOf();\n  }\n  return unwrapped;\n}\n","/**\n * @overview\n *\n * The role of the Fluent resolver is to format a translation object to an\n * instance of `FluentType` or an array of instances.\n *\n * Translations can contain references to other messages or external arguments,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers, dates, lists and more into the\n * context's language.  See the documentation of the Fluent syntax for more\n * information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible.  In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * `MessageReference`, `VariantExpression`, `AttributeExpression` and\n * `SelectExpression` resolve to raw Runtime Entries objects and the result of\n * the resolution needs to be passed into `Type` to get their real value.\n * This is useful for composing expressions.  Consider:\n *\n *     brand-name[nominative]\n *\n * which is a `VariantExpression` with properties `id: MessageReference` and\n * `key: Keyword`.  If `MessageReference` was resolved eagerly, it would\n * instantly resolve to the value of the `brand-name` message.  Instead, we\n * want to get the message object and look for its `nominative` variant.\n *\n * All other expressions (except for `FunctionReference` which is only used in\n * `CallExpression`) resolve to an instance of `FluentType`.  The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n *\n * All functions in this file pass around a special object called `env`.\n * This object stores a set of elements used by all resolve functions:\n *\n *  * {MessageContext} ctx\n *      context for which the given resolution is happening\n *  * {Object} args\n *      list of developer provided arguments that can be used\n *  * {Array} errors\n *      list of errors collected while resolving\n *  * {WeakSet} dirty\n *      Set of patterns already encountered during this resolution.\n *      This is used to prevent cyclic resolutions.\n */\n\n\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, FluentSymbol }\n  from \"./types\";\nimport builtins from \"./builtins\";\n\n// Prevent expansion of too long placeables.\nconst MAX_PLACEABLE_LENGTH = 2500;\n\n// Unicode bidi isolation characters.\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n\n\n/**\n * Helper for choosing the default value from a set of members.\n *\n * Used in SelectExpressions and Type.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} members\n *    Hash map of variants from which the default value is to be selected.\n * @param   {Number} def\n *    The index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction DefaultMember(env, members, def) {\n  if (members[def]) {\n    return members[def];\n  }\n\n  const { errors } = env;\n  errors.push(new RangeError(\"No default\"));\n  return new FluentNone();\n}\n\n\n/**\n * Resolve a reference to another message.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} id\n *    The identifier of the message to be resolved.\n * @param   {String} id.name\n *    The name of the identifier.\n * @returns {FluentType}\n * @private\n */\nfunction MessageReference(env, {name}) {\n  const { ctx, errors } = env;\n  const message = name.startsWith(\"-\")\n    ? ctx._terms.get(name)\n    : ctx._messages.get(name);\n\n  if (!message) {\n    const err = name.startsWith(\"-\")\n      ? new ReferenceError(`Unknown term: ${name}`)\n      : new ReferenceError(`Unknown message: ${name}`);\n    errors.push(err);\n    return new FluentNone(name);\n  }\n\n  return message;\n}\n\n/**\n * Resolve a variant expression to the variant object.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {Object} expr.id\n *    An Identifier of a message for which the variant is resolved.\n * @param   {Object} expr.id.name\n *    Name a message for which the variant is resolved.\n * @param   {Object} expr.key\n *    Variant key to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction VariantExpression(env, {id, key}) {\n  const message = MessageReference(env, id);\n  if (message instanceof FluentNone) {\n    return message;\n  }\n\n  const { ctx, errors } = env;\n  const keyword = Type(env, key);\n\n  function isVariantList(node) {\n    return Array.isArray(node) &&\n      node[0].type === \"sel\" &&\n      node[0].exp === null;\n  }\n\n  if (isVariantList(message.val)) {\n    // Match the specified key against keys of each variant, in order.\n    for (const variant of message.val[0].vars) {\n      const variantKey = Type(env, variant.key);\n      if (keyword.match(ctx, variantKey)) {\n        return variant;\n      }\n    }\n  }\n\n  errors.push(new ReferenceError(`Unknown variant: ${keyword.toString(ctx)}`));\n  return Type(env, message);\n}\n\n\n/**\n * Resolve an attribute expression to the attribute object.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.id\n *    An ID of a message for which the attribute is resolved.\n * @param   {String} expr.name\n *    Name of the attribute to be resolved.\n * @returns {FluentType}\n * @private\n */\nfunction AttributeExpression(env, {id, name}) {\n  const message = MessageReference(env, id);\n  if (message instanceof FluentNone) {\n    return message;\n  }\n\n  if (message.attrs) {\n    // Match the specified name against keys of each attribute.\n    for (const attrName in message.attrs) {\n      if (name === attrName) {\n        return message.attrs[name];\n      }\n    }\n  }\n\n  const { errors } = env;\n  errors.push(new ReferenceError(`Unknown attribute: ${name}`));\n  return Type(env, message);\n}\n\n/**\n * Resolve a select expression to the member object.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.exp\n *    Selector expression\n * @param   {Array} expr.vars\n *    List of variants for the select expression.\n * @param   {Number} expr.def\n *    Index of the default variant.\n * @returns {FluentType}\n * @private\n */\nfunction SelectExpression(env, {exp, vars, def}) {\n  if (exp === null) {\n    return DefaultMember(env, vars, def);\n  }\n\n  const selector = Type(env, exp);\n  if (selector instanceof FluentNone) {\n    return DefaultMember(env, vars, def);\n  }\n\n  // Match the selector against keys of each variant, in order.\n  for (const variant of vars) {\n    const key = Type(env, variant.key);\n    const keyCanMatch =\n      key instanceof FluentNumber || key instanceof FluentSymbol;\n\n    if (!keyCanMatch) {\n      continue;\n    }\n\n    const { ctx } = env;\n\n    if (key.match(ctx, selector)) {\n      return variant;\n    }\n  }\n\n  return DefaultMember(env, vars, def);\n}\n\n\n/**\n * Resolve expression to a Fluent type.\n *\n * JavaScript strings are a special case.  Since they natively have the\n * `toString` method they can be used as if they were a Fluent type without\n * paying the cost of creating a instance of one.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression object to be resolved into a Fluent type.\n * @returns {FluentType}\n * @private\n */\nfunction Type(env, expr) {\n  // A fast-path for strings which are the most common case, and for\n  // `FluentNone` which doesn't require any additional logic.\n  if (typeof expr === \"string\" || expr instanceof FluentNone) {\n    return expr;\n  }\n\n  // The Runtime AST (Entries) encodes patterns (complex strings with\n  // placeables) as Arrays.\n  if (Array.isArray(expr)) {\n    return Pattern(env, expr);\n  }\n\n\n  switch (expr.type) {\n    case \"varname\":\n      return new FluentSymbol(expr.name);\n    case \"num\":\n      return new FluentNumber(expr.val);\n    case \"ext\":\n      return ExternalArgument(env, expr);\n    case \"fun\":\n      return FunctionReference(env, expr);\n    case \"call\":\n      return CallExpression(env, expr);\n    case \"ref\": {\n      const message = MessageReference(env, expr);\n      return Type(env, message);\n    }\n    case \"attr\": {\n      const attr = AttributeExpression(env, expr);\n      return Type(env, attr);\n    }\n    case \"var\": {\n      const variant = VariantExpression(env, expr);\n      return Type(env, variant);\n    }\n    case \"sel\": {\n      const member = SelectExpression(env, expr);\n      return Type(env, member);\n    }\n    case undefined: {\n      // If it's a node with a value, resolve the value.\n      if (expr.val !== null && expr.val !== undefined) {\n        return Type(env, expr.val);\n      }\n\n      const { errors } = env;\n      errors.push(new RangeError(\"No value\"));\n      return new FluentNone();\n    }\n    default:\n      return new FluentNone();\n  }\n}\n\n/**\n * Resolve a reference to an external argument.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.name\n *    Name of an argument to be returned.\n * @returns {FluentType}\n * @private\n */\nfunction ExternalArgument(env, {name}) {\n  const { args, errors } = env;\n\n  if (!args || !args.hasOwnProperty(name)) {\n    errors.push(new ReferenceError(`Unknown external: ${name}`));\n    return new FluentNone(name);\n  }\n\n  const arg = args[name];\n\n  // Return early if the argument already is an instance of FluentType.\n  if (arg instanceof FluentType) {\n    return arg;\n  }\n\n  // Convert the argument to a Fluent type.\n  switch (typeof arg) {\n    case \"string\":\n      return arg;\n    case \"number\":\n      return new FluentNumber(arg);\n    case \"object\":\n      if (arg instanceof Date) {\n        return new FluentDateTime(arg);\n      }\n    default:\n      errors.push(\n        new TypeError(`Unsupported external type: ${name}, ${typeof arg}`)\n      );\n      return new FluentNone(name);\n  }\n}\n\n/**\n * Resolve a reference to a function.\n *\n * @param   {Object}  env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {String} expr.name\n *    Name of the function to be returned.\n * @returns {Function}\n * @private\n */\nfunction FunctionReference(env, {name}) {\n  // Some functions are built-in.  Others may be provided by the runtime via\n  // the `MessageContext` constructor.\n  const { ctx: { _functions }, errors } = env;\n  const func = _functions[name] || builtins[name];\n\n  if (!func) {\n    errors.push(new ReferenceError(`Unknown function: ${name}()`));\n    return new FluentNone(`${name}()`);\n  }\n\n  if (typeof func !== \"function\") {\n    errors.push(new TypeError(`Function ${name}() is not callable`));\n    return new FluentNone(`${name}()`);\n  }\n\n  return func;\n}\n\n/**\n * Resolve a call to a Function with positional and key-value arguments.\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Object} expr\n *    An expression to be resolved.\n * @param   {Object} expr.fun\n *    FTL Function object.\n * @param   {Array} expr.args\n *    FTL Function argument list.\n * @returns {FluentType}\n * @private\n */\nfunction CallExpression(env, {fun, args}) {\n  const callee = FunctionReference(env, fun);\n\n  if (callee instanceof FluentNone) {\n    return callee;\n  }\n\n  const posargs = [];\n  const keyargs = {};\n\n  for (const arg of args) {\n    if (arg.type === \"narg\") {\n      keyargs[arg.name] = Type(env, arg.val);\n    } else {\n      posargs.push(Type(env, arg));\n    }\n  }\n\n  try {\n    return callee(posargs, keyargs);\n  } catch (e) {\n    // XXX Report errors.\n    return new FluentNone();\n  }\n}\n\n/**\n * Resolve a pattern (a complex string with placeables).\n *\n * @param   {Object} env\n *    Resolver environment object.\n * @param   {Array} ptn\n *    Array of pattern elements.\n * @returns {Array}\n * @private\n */\nfunction Pattern(env, ptn) {\n  const { ctx, dirty, errors } = env;\n\n  if (dirty.has(ptn)) {\n    errors.push(new RangeError(\"Cyclic reference\"));\n    return new FluentNone();\n  }\n\n  // Tag the pattern as dirty for the purpose of the current resolution.\n  dirty.add(ptn);\n  const result = [];\n\n  // Wrap interpolations with Directional Isolate Formatting characters\n  // only when the pattern has more than one element.\n  const useIsolating = ctx._useIsolating && ptn.length > 1;\n\n  for (const elem of ptn) {\n    if (typeof elem === \"string\") {\n      result.push(elem);\n      continue;\n    }\n\n    const part = Type(env, elem).toString(ctx);\n\n    if (useIsolating) {\n      result.push(FSI);\n    }\n\n    if (part.length > MAX_PLACEABLE_LENGTH) {\n      errors.push(\n        new RangeError(\n          \"Too many characters in placeable \" +\n          `(${part.length}, max allowed is ${MAX_PLACEABLE_LENGTH})`\n        )\n      );\n      result.push(part.slice(MAX_PLACEABLE_LENGTH));\n    } else {\n      result.push(part);\n    }\n\n    if (useIsolating) {\n      result.push(PDI);\n    }\n  }\n\n  dirty.delete(ptn);\n  return result.join(\"\");\n}\n\n/**\n * Format a translation into a string.\n *\n * @param   {MessageContext} ctx\n *    A MessageContext instance which will be used to resolve the\n *    contextual information of the message.\n * @param   {Object}         args\n *    List of arguments provided by the developer which can be accessed\n *    from the message.\n * @param   {Object}         message\n *    An object with the Message to be resolved.\n * @param   {Array}          errors\n *    An error array that any encountered errors will be appended to.\n * @returns {FluentType}\n */\nexport default function resolve(ctx, args, message, errors = []) {\n  const env = {\n    ctx, args, errors, dirty: new WeakSet()\n  };\n  return Type(env, message).toString(ctx);\n}\n","import resolve from \"./resolver\";\nimport parse from \"./parser\";\n\n/**\n * Message contexts are single-language stores of translations.  They are\n * responsible for parsing translation resources in the Fluent syntax and can\n * format translation units (entities) to strings.\n *\n * Always use `MessageContext.format` to retrieve translation units from\n * a context.  Translations can contain references to other entities or\n * external arguments, conditional logic in form of select expressions, traits\n * which describe their grammatical features, and can use Fluent builtins which\n * make use of the `Intl` formatters to format numbers, dates, lists and more\n * into the context's language.  See the documentation of the Fluent syntax for\n * more information.\n */\nexport class MessageContext {\n\n  /**\n   * Create an instance of `MessageContext`.\n   *\n   * The `locales` argument is used to instantiate `Intl` formatters used by\n   * translations.  The `options` object can be used to configure the context.\n   *\n   * Examples:\n   *\n   *     const ctx = new MessageContext(locales);\n   *\n   *     const ctx = new MessageContext(locales, { useIsolating: false });\n   *\n   *     const ctx = new MessageContext(locales, {\n   *       useIsolating: true,\n   *       functions: {\n   *         NODE_ENV: () => process.env.NODE_ENV\n   *       }\n   *     });\n   *\n   * Available options:\n   *\n   *   - `functions` - an object of additional functions available to\n   *                   translations as builtins.\n   *\n   *   - `useIsolating` - boolean specifying whether to use Unicode isolation\n   *                    marks (FSI, PDI) for bidi interpolations.\n   *\n   * @param   {string|Array<string>} locales - Locale or locales of the context\n   * @param   {Object} [options]\n   * @returns {MessageContext}\n   */\n  constructor(locales, { functions = {}, useIsolating = true } = {}) {\n    this.locales = Array.isArray(locales) ? locales : [locales];\n\n    this._terms = new Map();\n    this._messages = new Map();\n    this._functions = functions;\n    this._useIsolating = useIsolating;\n    this._intls = new WeakMap();\n  }\n\n  /*\n   * Return an iterator over public `[id, message]` pairs.\n   *\n   * @returns {Iterator}\n   */\n  get messages() {\n    return this._messages[Symbol.iterator]();\n  }\n\n  /*\n   * Check if a message is present in the context.\n   *\n   * @param {string} id - The identifier of the message to check.\n   * @returns {bool}\n   */\n  hasMessage(id) {\n    return this._messages.has(id);\n  }\n\n  /*\n   * Return the internal representation of a message.\n   *\n   * The internal representation should only be used as an argument to\n   * `MessageContext.format`.\n   *\n   * @param {string} id - The identifier of the message to check.\n   * @returns {Any}\n   */\n  getMessage(id) {\n    return this._messages.get(id);\n  }\n\n  /**\n   * Add a translation resource to the context.\n   *\n   * The translation resource must use the Fluent syntax.  It will be parsed by\n   * the context and each translation unit (message) will be available in the\n   * context by its identifier.\n   *\n   *     ctx.addMessages('foo = Foo');\n   *     ctx.getMessage('foo');\n   *\n   *     // Returns a raw representation of the 'foo' message.\n   *\n   * Parsed entities should be formatted with the `format` method in case they\n   * contain logic (references, select expressions etc.).\n   *\n   * @param   {string} source - Text resource with translations.\n   * @returns {Array<Error>}\n   */\n  addMessages(source) {\n    const [entries, errors] = parse(source);\n    for (const id in entries) {\n      if (id.startsWith(\"-\")) {\n        // Identifiers starting with a dash (-) define terms. Terms are private\n        // and cannot be retrieved from MessageContext.\n        if (this._terms.has(id)) {\n          errors.push(`Attempt to override an existing term: \"${id}\"`);\n          continue;\n        }\n        this._terms.set(id, entries[id]);\n      } else {\n        if (this._messages.has(id)) {\n          errors.push(`Attempt to override an existing message: \"${id}\"`);\n          continue;\n        }\n        this._messages.set(id, entries[id]);\n      }\n    }\n\n    return errors;\n  }\n\n  /**\n   * Format a message to a string or null.\n   *\n   * Format a raw `message` from the context into a string (or a null if it has\n   * a null value).  `args` will be used to resolve references to external\n   * arguments inside of the translation.\n   *\n   * In case of errors `format` will try to salvage as much of the translation\n   * as possible and will still return a string.  For performance reasons, the\n   * encountered errors are not returned but instead are appended to the\n   * `errors` array passed as the third argument.\n   *\n   *     const errors = [];\n   *     ctx.addMessages('hello = Hello, { $name }!');\n   *     const hello = ctx.getMessage('hello');\n   *     ctx.format(hello, { name: 'Jane' }, errors);\n   *\n   *     // Returns 'Hello, Jane!' and `errors` is empty.\n   *\n   *     ctx.format(hello, undefined, errors);\n   *\n   *     // Returns 'Hello, name!' and `errors` is now:\n   *\n   *     [<ReferenceError: Unknown external: name>]\n   *\n   * @param   {Object | string}    message\n   * @param   {Object | undefined} args\n   * @param   {Array}              errors\n   * @returns {?string}\n   */\n  format(message, args, errors) {\n    // optimize entities which are simple strings with no attributes\n    if (typeof message === \"string\") {\n      return message;\n    }\n\n    // optimize simple-string entities with attributes\n    if (typeof message.val === \"string\") {\n      return message.val;\n    }\n\n    // optimize entities with null values\n    if (message.val === undefined) {\n      return null;\n    }\n\n    return resolve(this, args, message, errors);\n  }\n\n  _memoizeIntlObject(ctor, opts) {\n    const cache = this._intls.get(ctor) || {};\n    const id = JSON.stringify(opts);\n\n    if (!cache[id]) {\n      cache[id] = new ctor(this.locales, opts);\n      this._intls.set(ctor, cache);\n    }\n\n    return cache[id];\n  }\n}\n","/*\n * CachedIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedIterable {\n  /**\n   * Create an `CachedIterable` instance.\n   *\n   * @param {Iterable} iterable\n   * @returns {CachedIterable}\n   */\n  constructor(iterable) {\n    if (Symbol.asyncIterator in Object(iterable)) {\n      this.iterator = iterable[Symbol.asyncIterator]();\n    } else if (Symbol.iterator in Object(iterable)) {\n      this.iterator = iterable[Symbol.iterator]();\n    } else {\n      throw new TypeError(\"Argument must implement the iteration protocol.\");\n    }\n\n    this.seen = [];\n  }\n\n  [Symbol.iterator]() {\n    const { seen, iterator } = this;\n    let cur = 0;\n\n    return {\n      next() {\n        if (seen.length <= cur) {\n          seen.push(iterator.next());\n        }\n        return seen[cur++];\n      }\n    };\n  }\n\n  [Symbol.asyncIterator]() {\n    const { seen, iterator } = this;\n    let cur = 0;\n\n    return {\n      async next() {\n        if (seen.length <= cur) {\n          seen.push(await iterator.next());\n        }\n        return seen[cur++];\n      }\n    };\n  }\n\n  /**\n   * This method allows user to consume the next element from the iterator\n   * into the cache.\n   */\n  touchNext() {\n    const { seen, iterator } = this;\n    if (seen.length === 0 || seen[seen.length - 1].done === false) {\n      seen.push(iterator.next());\n    }\n  }\n}\n","/*\n * @overview\n *\n * Functions for managing ordered sequences of MessageContexts.\n *\n * An ordered iterable of MessageContext instances can represent the current\n * negotiated fallback chain of languages.  This iterable can be used to find\n * the best existing translation for a given identifier.\n *\n * The mapContext* methods can be used to find the first MessageContext in the\n * given iterable which contains the translation with the given identifier.  If\n * the iterable is ordered according to the result of a language negotiation\n * the returned MessageContext contains the best available translation.\n *\n * A simple function which formats translations based on the identifier might\n * be implemented as follows:\n *\n *     formatString(id, args) {\n *         const ctx = mapContextSync(contexts, id);\n *\n *         if (ctx === null) {\n *             return id;\n *         }\n *\n *         const msg = ctx.getMessage(id);\n *         return ctx.format(msg, args);\n *     }\n *\n * In order to pass an iterator to mapContext*, wrap it in CachedIterable.\n * This allows multiple calls to mapContext* without advancing and eventually\n * depleting the iterator.\n *\n *     function *generateMessages() {\n *         // Some lazy logic for yielding MessageContexts.\n *         yield *[ctx1, ctx2];\n *     }\n *\n *     const contexts = new CachedIterable(generateMessages());\n *     const ctx = mapContextSync(contexts, id);\n *\n */\n\n/*\n * Synchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {Iterable} iterable\n * @param {string|Array<string>} ids\n * @returns {MessageContext|Array<MessageContext>}\n */\nexport function mapContextSync(iterable, ids) {\n  if (!Array.isArray(ids)) {\n    return getContextForId(iterable, ids);\n  }\n\n  return ids.map(\n    id => getContextForId(iterable, id)\n  );\n}\n\n/*\n * Find the best `MessageContext` with the translation for `id`.\n */\nfunction getContextForId(iterable, id) {\n  for (const context of iterable) {\n    if (context.hasMessage(id)) {\n      return context;\n    }\n  }\n\n  return null;\n}\n\n/*\n * Asynchronously map an identifier or an array of identifiers to the best\n * `MessageContext` instance(s).\n *\n * @param {AsyncIterable} iterable\n * @param {string|Array<string>} ids\n * @returns {Promise<MessageContext|Array<MessageContext>>}\n */\nexport async function mapContextAsync(iterable, ids) {\n  if (!Array.isArray(ids)) {\n    for await (const context of iterable) {\n      if (context.hasMessage(ids)) {\n        return context;\n      }\n    }\n  }\n\n  let remainingCount = ids.length;\n  const foundContexts = new Array(remainingCount).fill(null);\n\n  for await (const context of iterable) {\n    // XXX Switch to const [index, id] of id.entries() when we move to Babel 7.\n    // See https://github.com/babel/babel/issues/5880.\n    for (let index = 0; index < ids.length; index++) {\n      const id = ids[index];\n      if (!foundContexts[index] && context.hasMessage(id)) {\n        foundContexts[index] = context;\n        remainingCount--;\n      }\n\n      // Return early when all ids have been mapped to contexts.\n      if (remainingCount === 0) {\n        return foundContexts;\n      }\n    }\n  }\n\n  return foundContexts;\n}\n","function nonBlank(line) {\n  return !/^\\s*$/.test(line);\n}\n\nfunction countIndent(line) {\n  const [indent] = line.match(/^\\s*/);\n  return indent.length;\n}\n\n/**\n * Template literal tag for dedenting FTL code.\n *\n * Strip the common indent of non-blank lines. Remove blank lines.\n *\n * @param {Array<string>} strings\n */\nexport function ftl(strings) {\n  const [code] = strings;\n  const lines = code.split(\"\\n\").filter(nonBlank);\n  const indents = lines.map(countIndent);\n  const common = Math.min(...indents);\n  const indent = new RegExp(`^\\\\s{${common}}`);\n\n  return lines.map(\n    line => line.replace(indent, \"\")\n  ).join(\"\\n\");\n}\n","/*\n * @module fluent\n * @overview\n *\n * `fluent` is a JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n */\n\nexport { default as _parse } from \"./parser\";\n\nexport { MessageContext } from \"./context\";\nexport {\n  FluentType as MessageArgument,\n  FluentNumber as MessageNumberArgument,\n  FluentDateTime as MessageDateTimeArgument,\n} from \"./types\";\n\nexport { default as CachedIterable } from \"./cached_iterable\";\nexport { mapContextSync, mapContextAsync } from \"./fallback\";\n\nexport { ftl } from \"./util\";\n","import { CachedIterable, mapContextSync } from \"fluent\";\n\n/*\n * `ReactLocalization` handles translation formatting and fallback.\n *\n * The current negotiated fallback chain of languages is stored in the\n * `ReactLocalization` instance in form of an iterable of `MessageContext`\n * instances.  This iterable is used to find the best existing translation for\n * a given identifier.\n *\n * `Localized` components must subscribe to the changes of the\n * `ReactLocalization`'s fallback chain.  When the fallback chain changes (the\n * `messages` iterable is set anew), all subscribed compontent must relocalize.\n *\n * The `ReactLocalization` class instances are exposed to `Localized` elements\n * via the `LocalizationProvider` component.\n */\nexport default class ReactLocalization {\n  constructor(messages) {\n    this.contexts = new CachedIterable(messages);\n    this.subs = new Set();\n  }\n\n  /*\n   * Subscribe a `Localized` component to changes of `messages`.\n   */\n  subscribe(comp) {\n    this.subs.add(comp);\n  }\n\n  /*\n   * Unsubscribe a `Localized` component from `messages` changes.\n   */\n  unsubscribe(comp) {\n    this.subs.delete(comp);\n  }\n\n  /*\n   * Set a new `messages` iterable and trigger the retranslation.\n   */\n  setMessages(messages) {\n    this.contexts = new CachedIterable(messages);\n\n    // Update all subscribed Localized components.\n    this.subs.forEach(comp => comp.relocalize());\n  }\n\n  getMessageContext(id) {\n    return mapContextSync(this.contexts, id);\n  }\n\n  formatCompound(mcx, msg, args) {\n    const value = mcx.format(msg, args);\n\n    if (msg.attrs) {\n      var attrs = {};\n      for (const name of Object.keys(msg.attrs)) {\n        attrs[name] = mcx.format(msg.attrs[name], args);\n      }\n    }\n\n    return { value, attrs };\n  }\n\n  /*\n   * Find a translation by `id` and format it to a string using `args`.\n   */\n  getString(id, args, fallback) {\n    const mcx = this.getMessageContext(id);\n\n    if (mcx === null) {\n      return fallback || id;\n    }\n\n    const msg = mcx.getMessage(id);\n    return mcx.format(msg, args);\n  }\n}\n\nexport function isReactLocalization(props, propName) {\n  const prop = props[propName];\n\n  if (prop instanceof ReactLocalization) {\n    return null;\n  }\n\n  return new Error(\n    `The ${propName} context field must be an instance of ReactLocalization.`\n  );\n}\n","import { Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ReactLocalization, { isReactLocalization} from \"./localization\";\n\n/*\n * The Provider component for the `ReactLocalization` class.\n *\n * Exposes a `ReactLocalization` instance to all descendants via React's\n * context feature.  It makes translations available to all localizable\n * elements in the descendant's render tree without the need to pass them\n * explicitly.\n *\n *     <LocalizationProvider messages={…}>\n *         …\n *     </LocalizationProvider>\n *\n * The `LocalizationProvider` component takes one prop: `messages`.  It should\n * be an iterable of `MessageContext` instances in order of the user's\n * preferred languages.  The `MessageContext` instances will be used by\n * `ReactLocalization` to format translations.  If a translation is missing in\n * one instance, `ReactLocalization` will fall back to the next one.\n */\nexport default class LocalizationProvider extends Component {\n  constructor(props) {\n    super(props);\n    const { messages } = props;\n\n    if (messages === undefined) {\n      throw new Error(\"LocalizationProvider must receive the messages prop.\");\n    }\n\n    if (!messages[Symbol.iterator]) {\n      throw new Error(\"The messages prop must be an iterable.\");\n    }\n\n    this.l10n = new ReactLocalization(messages);\n  }\n\n  getChildContext() {\n    return {\n      l10n: this.l10n\n    };\n  }\n\n  componentWillReceiveProps(next) {\n    const { messages } = next;\n\n    if (messages !== this.props.messages) {\n      this.l10n.setMessages(messages);\n    }\n  }\n\n  render() {\n    return Children.only(this.props.children);\n  }\n}\n\nLocalizationProvider.childContextTypes = {\n  l10n: isReactLocalization\n};\n\nLocalizationProvider.propTypes = {\n  children: PropTypes.element.isRequired,\n  messages: isIterable\n};\n\nfunction isIterable(props, propName, componentName) {\n  const prop = props[propName];\n\n  if (Symbol.iterator in Object(prop)) {\n    return null;\n  }\n\n  return new Error(\n    `The ${propName} prop supplied to ${componentName} must be an iterable.`\n  );\n}\n","import { createElement, Component } from \"react\";\n\nimport { isReactLocalization } from \"./localization\";\n\nexport default function withLocalization(Inner) {\n  class WithLocalization extends Component {\n    componentDidMount() {\n      const { l10n } = this.context;\n\n      if (l10n) {\n        l10n.subscribe(this);\n      }\n    }\n\n    componentWillUnmount() {\n      const { l10n } = this.context;\n\n      if (l10n) {\n        l10n.unsubscribe(this);\n      }\n    }\n\n    /*\n     * Rerender this component in a new language.\n     */\n    relocalize() {\n      // When the `ReactLocalization`'s fallback chain changes, update the\n      // component.\n      this.forceUpdate();\n    }\n\n    /*\n     * Find a translation by `id` and format it to a string using `args`.\n     */\n    getString(id, args, fallback) {\n      const { l10n } = this.context;\n\n      if (!l10n) {\n        return fallback || id;\n      }\n\n      return l10n.getString(id, args, fallback);\n    }\n\n    render() {\n      return createElement(\n        Inner,\n        Object.assign(\n          // getString needs to be re-bound on updates to trigger a re-render\n          { getString: (...args) => this.getString(...args) },\n          this.props\n        )\n      );\n    }\n  }\n\n  WithLocalization.displayName = `WithLocalization(${displayName(Inner)})`;\n\n  WithLocalization.contextTypes = {\n    l10n: isReactLocalization\n  };\n\n  return WithLocalization;\n}\n\nfunction displayName(component) {\n  return component.displayName || component.name || \"Component\";\n}\n","/* eslint-env browser */\n\nconst TEMPLATE = document.createElement(\"template\");\n\nexport function parseMarkup(str) {\n  TEMPLATE.innerHTML = str;\n  return TEMPLATE.content;\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\n\nvar omittedCloseTags = {\n  area: true,\n  base: true,\n  br: true,\n  col: true,\n  embed: true,\n  hr: true,\n  img: true,\n  input: true,\n  keygen: true,\n  link: true,\n  meta: true,\n  param: true,\n  source: true,\n  track: true,\n  wbr: true,\n  // NOTE: menuitem's close tag should be omitted, but that causes problems.\n};\n\nexport default omittedCloseTags;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in this directory.\n */\n\nimport omittedCloseTags from './omittedCloseTags';\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = {\n  menuitem: true,\n  ...omittedCloseTags,\n};\n\nexport default voidElementTags;\n","import { isValidElement, cloneElement, Component, Children } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { isReactLocalization } from \"./localization\";\nimport { parseMarkup } from \"./markup\";\nimport VOID_ELEMENTS from \"../vendor/voidElementTags\";\n\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &amp;, &#0038;, &#x0026;.\nconst reMarkup = /<|&#?\\w+;/;\n\n/*\n * Prepare props passed to `Localized` for formatting.\n */\nfunction toArguments(props) {\n  const args = {};\n  const elems = {};\n\n  for (const [propname, propval] of Object.entries(props)) {\n    if (propname.startsWith(\"$\")) {\n      const name = propname.substr(1);\n      args[name] = propval;\n    } else if (isValidElement(propval)) {\n      // We'll try to match localNames of elements found in the translation with\n      // names of elements passed as props. localNames are always lowercase.\n      const name = propname.toLowerCase();\n      elems[name] = propval;\n    }\n  }\n\n  return [args, elems];\n}\n\n/*\n * The `Localized` class renders its child with translated props and children.\n *\n *     <Localized id=\"hello-world\">\n *         <p>{'Hello, world!'}</p>\n *     </Localized>\n *\n * The `id` prop should be the unique identifier of the translation.  Any\n * attributes found in the translation will be applied to the wrapped element.\n *\n * Arguments to the translation can be passed as `$`-prefixed props on\n * `Localized`.\n *\n *     <Localized id=\"hello-world\" $username={name}>\n *         <p>{'Hello, { $username }!'}</p>\n *     </Localized>\n *\n *  It's recommended that the contents of the wrapped component be a string\n *  expression.  The string will be used as the ultimate fallback if no\n *  translation is available.  It also makes it easy to grep for strings in the\n *  source code.\n */\nexport default class Localized extends Component {\n  componentDidMount() {\n    const { l10n } = this.context;\n\n    if (l10n) {\n      l10n.subscribe(this);\n    }\n  }\n\n  componentWillUnmount() {\n    const { l10n } = this.context;\n\n    if (l10n) {\n      l10n.unsubscribe(this);\n    }\n  }\n\n  /*\n   * Rerender this component in a new language.\n   */\n  relocalize() {\n    // When the `ReactLocalization`'s fallback chain changes, update the\n    // component.\n    this.forceUpdate();\n  }\n\n  render() {\n    const { l10n } = this.context;\n    const { id, attrs, children } = this.props;\n    const elem = Children.only(children);\n\n    if (!l10n) {\n      // Use the wrapped component as fallback.\n      return elem;\n    }\n\n    const mcx = l10n.getMessageContext(id);\n\n    if (mcx === null) {\n      // Use the wrapped component as fallback.\n      return elem;\n    }\n\n    const msg = mcx.getMessage(id);\n    const [args, elems] = toArguments(this.props);\n    const {\n      value: messageValue,\n      attrs: messageAttrs\n    } = l10n.formatCompound(mcx, msg, args);\n\n    // The default is to forbid all message attributes. If the attrs prop exists\n    // on the Localized instance, only set message attributes which have been\n    // explicitly allowed by the developer.\n    if (attrs && messageAttrs) {\n      var localizedProps = {};\n\n      for (const [name, value] of Object.entries(messageAttrs)) {\n        if (attrs[name]) {\n          localizedProps[name] = value;\n        }\n      }\n    }\n\n    // If the wrapped component is a known void element, explicitly dismiss the\n    // message value and do not pass it to cloneElement in order to avoid the\n    // \"void element tags must neither have `children` nor use\n    // `dangerouslySetInnerHTML`\" error.\n    if (elem.type in VOID_ELEMENTS) {\n      return cloneElement(elem, localizedProps);\n    }\n\n    // If the message has a null value, we're only interested in its attributes.\n    // Do not pass the null value to cloneElement as it would nuke all children\n    // of the wrapped component.\n    if (messageValue === null) {\n      return cloneElement(elem, localizedProps);\n    }\n\n    // If the message value doesn't contain any markup nor any HTML entities,\n    // insert it as the only child of the wrapped component.\n    if (!reMarkup.test(messageValue)) {\n      return cloneElement(elem, localizedProps, messageValue);\n    }\n\n    // If the message contains markup, parse it and try to match the children\n    // found in the translation with the props passed to this Localized.\n    const translationNodes = Array.from(parseMarkup(messageValue).childNodes);\n    const translatedChildren = translationNodes.map(childNode => {\n      if (childNode.nodeType === childNode.TEXT_NODE) {\n        return childNode.textContent;\n      }\n\n      // If the child is not expected just take its textContent.\n      if (!elems.hasOwnProperty(childNode.localName)) {\n        return childNode.textContent;\n      }\n\n      const sourceChild = elems[childNode.localName];\n\n      // If the element passed as a prop to <Localized> is a known void element,\n      // explicitly dismiss any textContent which might have accidentally been\n      // defined in the translation to prevent the \"void element tags must not\n      // have children\" error.\n      if (sourceChild.type in VOID_ELEMENTS) {\n        return sourceChild;\n      }\n\n      // TODO Protect contents of elements wrapped in <Localized>\n      // https://github.com/projectfluent/fluent.js/issues/184\n      // TODO  Control localizable attributes on elements passed as props\n      // https://github.com/projectfluent/fluent.js/issues/185\n      return cloneElement(sourceChild, null, childNode.textContent);\n    });\n\n    return cloneElement(elem, localizedProps, ...translatedChildren);\n  }\n}\n\nLocalized.contextTypes = {\n  l10n: isReactLocalization\n};\n\nLocalized.propTypes = {\n  children: PropTypes.element.isRequired,\n};\n","/*\n * @module fluent-react\n * @overview\n *\n\n * `fluent-react` provides React bindings for Fluent.  It takes advantage of\n * React's Components system and the virtual DOM.  Translations are exposed to\n * components via the provider pattern.\n *\n *     <LocalizationProvider messages={…}>\n *         <Localized id=\"hello-world\">\n *             <p>{'Hello, world!'}</p>\n *         </Localized>\n *     </LocalizationProvider>\n *\n * Consult the documentation of the `LocalizationProvider` and the `Localized`\n * components for more information.\n */\n\nexport { default as LocalizationProvider } from \"./provider\";\nexport { default as withLocalization } from \"./with_localization\";\nexport { default as Localized } from \"./localized\";\nexport { default as ReactLocalization, isReactLocalization }\n  from \"./localization\";\n","import React from \"react\";\nimport {safeURI} from \"../../template-utils\";\n\nconst ALLOWED_STYLE_TAGS = [\"color\", \"backgroundColor\"];\n\nexport const Button = props => {\n  const style = {};\n\n  // Add allowed style tags from props, e.g. props.color becomes style={color: props.color}\n  for (const tag of ALLOWED_STYLE_TAGS) {\n    if (typeof props[tag] !== \"undefined\") {\n      style[tag] = props[tag];\n    }\n  }\n  // remove border if bg is set to something custom\n  if (style.backgroundColor) {\n    style.border = \"0\";\n  }\n\n  return (<a href={safeURI(props.url)}\n    onClick={props.onClick}\n    className={props.className || \"ASRouterButton\"}\n    style={style}>\n    {props.children}\n  </a>);\n};\n","import React from \"react\";\n\nexport class SnippetBase extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onBlockClicked = this.onBlockClicked.bind(this);\n  }\n\n  onBlockClicked() {\n    this.props.sendUserActionTelemetry({event: \"BLOCK\", id: this.props.UISurface});\n    this.props.onBlock();\n  }\n\n  render() {\n    const {props} = this;\n\n    const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : \"\"}`;\n\n    return (<div className={containerClassName}>\n      <div className=\"innerWrapper\">\n        {props.children}\n      </div>\n      <button className=\"blockButton\" onClick={this.onBlockClicked} />\n    </div>);\n  }\n}\n","import {Button} from \"../../components/Button/Button\";\nimport React from \"react\";\nimport {safeURI} from \"../../template-utils\";\nimport {SnippetBase} from \"../../components/SnippetBase/SnippetBase\";\n\nconst DEFAULT_ICON_PATH = \"chrome://branding/content/icon64.png\";\n\nexport class SimpleSnippet extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onButtonClick = this.onButtonClick.bind(this);\n  }\n\n  onButtonClick() {\n    this.props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", id: this.props.UISurface});\n  }\n\n  renderTitle() {\n    const {title} = this.props.content;\n    return title ? <h3 className=\"title\">{title}</h3> : null;\n  }\n\n  renderTitleIcon() {\n    const titleIcon = safeURI(this.props.content.title_icon);\n    return titleIcon ? <span className=\"titleIcon\" style={{backgroundImage: `url(\"${titleIcon}\")`}} /> : null;\n  }\n\n  renderButton(className) {\n    const {props} = this;\n    return (<Button\n      className={className}\n      onClick={this.onButtonClick}\n      url={props.content.button_url}\n      color={props.content.button_color}\n      backgroundColor={props.content.button_background_color}>\n      {props.content.button_label}\n    </Button>);\n  }\n\n  render() {\n    const {props} = this;\n    const hasLink = props.content.button_url && props.content.button_type === \"anchor\";\n    const hasButton = props.content.button_url && !props.content.button_type;\n    const className = `SimpleSnippet${props.content.tall ? \" tall\" : \"\"}`;\n    return (<SnippetBase {...props} className={className}>\n      <img src={safeURI(props.content.icon) || DEFAULT_ICON_PATH} className=\"icon\" />\n      <div>\n        {this.renderTitleIcon()} {this.renderTitle()} <p className=\"body\">{props.richText || props.content.text}</p> {hasLink ? this.renderButton(\"ASRouterAnchor\") : null}\n      </div>\n      {hasButton ? <div>{this.renderButton()}</div> : null}\n    </SnippetBase>);\n  }\n}\n","this.Dedupe = class Dedupe {\n  constructor(createKey) {\n    this.createKey = createKey || this.defaultCreateKey;\n  }\n\n  defaultCreateKey(item) {\n    return item;\n  }\n\n  /**\n   * Dedupe any number of grouped elements favoring those from earlier groups.\n   *\n   * @param {Array} groups Contains an arbitrary number of arrays of elements.\n   * @returns {Array} A matching array of each provided group deduped.\n   */\n  group(...groups) {\n    const globalKeys = new Set();\n    const result = [];\n    for (const values of groups) {\n      const valueMap = new Map();\n      for (const value of values) {\n        const key = this.createKey(value);\n        if (!globalKeys.has(key) && !valueMap.has(key)) {\n          valueMap.set(key, value);\n        }\n      }\n      result.push(valueMap);\n      valueMap.forEach((value, key) => globalKeys.add(key));\n    }\n    return result.map(m => Array.from(m.values()));\n  }\n};\n\nconst EXPORTED_SYMBOLS = [\"Dedupe\"];\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n\"use strict\";\n\nconst {actionTypes: at} = ChromeUtils.import(\"resource://activity-stream/common/Actions.jsm\", {});\nconst {Dedupe} = ChromeUtils.import(\"resource://activity-stream/common/Dedupe.jsm\", {});\n\nconst TOP_SITES_DEFAULT_ROWS = 1;\nconst TOP_SITES_MAX_SITES_PER_ROW = 8;\n\nconst dedupe = new Dedupe(site => site && site.url);\n\nconst INITIAL_STATE = {\n  App: {\n    // Have we received real data from the app yet?\n    initialized: false,\n    // The version of the system-addon\n    version: null\n  },\n  Snippets: {initialized: false},\n  TopSites: {\n    // Have we received real data from history yet?\n    initialized: false,\n    // The history (and possibly default) links\n    rows: [],\n    // Used in content only to dispatch action to TopSiteForm.\n    editForm: null\n  },\n  Prefs: {\n    initialized: false,\n    values: {}\n  },\n  Dialog: {\n    visible: false,\n    data: {}\n  },\n  Sections: []\n};\n\nfunction App(prevState = INITIAL_STATE.App, action) {\n  switch (action.type) {\n    case at.INIT:\n      return Object.assign({}, prevState, action.data || {}, {initialized: true});\n    default:\n      return prevState;\n  }\n}\n\n/**\n * insertPinned - Inserts pinned links in their specified slots\n *\n * @param {array} a list of links\n * @param {array} a list of pinned links\n * @return {array} resulting list of links with pinned links inserted\n */\nfunction insertPinned(links, pinned) {\n  // Remove any pinned links\n  const pinnedUrls = pinned.map(link => link && link.url);\n  let newLinks = links.filter(link => (link ? !pinnedUrls.includes(link.url) : false));\n  newLinks = newLinks.map(link => {\n    if (link && link.isPinned) {\n      delete link.isPinned;\n      delete link.pinIndex;\n    }\n    return link;\n  });\n\n  // Then insert them in their specified location\n  pinned.forEach((val, index) => {\n    if (!val) { return; }\n    let link = Object.assign({}, val, {isPinned: true, pinIndex: index});\n    if (index > newLinks.length) {\n      newLinks[index] = link;\n    } else {\n      newLinks.splice(index, 0, link);\n    }\n  });\n\n  return newLinks;\n}\n\nfunction TopSites(prevState = INITIAL_STATE.TopSites, action) {\n  let hasMatch;\n  let newRows;\n  switch (action.type) {\n    case at.TOP_SITES_UPDATED:\n      if (!action.data || !action.data.links) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {initialized: true, rows: action.data.links}, action.data.pref ? {pref: action.data.pref} : {});\n    case at.TOP_SITES_PREFS_UPDATED:\n      return Object.assign({}, prevState, {pref: action.data.pref});\n    case at.TOP_SITES_EDIT:\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: action.data.index,\n          previewResponse: null\n        }\n      });\n    case at.TOP_SITES_CANCEL_EDIT:\n      return Object.assign({}, prevState, {editForm: null});\n    case at.PREVIEW_RESPONSE:\n      if (!prevState.editForm || action.data.url !== prevState.editForm.previewUrl) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: action.data.preview,\n          previewUrl: action.data.url\n        }\n      });\n    case at.PREVIEW_REQUEST:\n      if (!prevState.editForm) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: null,\n          previewUrl: action.data.url\n        }\n      });\n    case at.PREVIEW_REQUEST_CANCEL:\n      if (!prevState.editForm) {\n        return prevState;\n      }\n      return Object.assign({}, prevState, {\n        editForm: {\n          index: prevState.editForm.index,\n          previewResponse: null\n        }\n      });\n    case at.SCREENSHOT_UPDATED:\n      newRows = prevState.rows.map(row => {\n        if (row && row.url === action.data.url) {\n          hasMatch = true;\n          return Object.assign({}, row, {screenshot: action.data.screenshot});\n        }\n        return row;\n      });\n      return hasMatch ? Object.assign({}, prevState, {rows: newRows}) : prevState;\n    case at.PLACES_BOOKMARK_ADDED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.map(site => {\n        if (site && site.url === action.data.url) {\n          const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n          return Object.assign({}, site, {bookmarkGuid, bookmarkTitle, bookmarkDateCreated: dateAdded});\n        }\n        return site;\n      });\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.PLACES_BOOKMARK_REMOVED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.map(site => {\n        if (site && site.url === action.data.url) {\n          const newSite = Object.assign({}, site);\n          delete newSite.bookmarkGuid;\n          delete newSite.bookmarkTitle;\n          delete newSite.bookmarkDateCreated;\n          return newSite;\n        }\n        return site;\n      });\n      return Object.assign({}, prevState, {rows: newRows});\n    case at.PLACES_LINK_DELETED:\n      if (!action.data) {\n        return prevState;\n      }\n      newRows = prevState.rows.filter(site => action.data.url !== site.url);\n      return Object.assign({}, prevState, {rows: newRows});\n    default:\n      return prevState;\n  }\n}\n\nfunction Dialog(prevState = INITIAL_STATE.Dialog, action) {\n  switch (action.type) {\n    case at.DIALOG_OPEN:\n      return Object.assign({}, prevState, {visible: true, data: action.data});\n    case at.DIALOG_CANCEL:\n      return Object.assign({}, prevState, {visible: false});\n    case at.DELETE_HISTORY_URL:\n      return Object.assign({}, INITIAL_STATE.Dialog);\n    default:\n      return prevState;\n  }\n}\n\nfunction Prefs(prevState = INITIAL_STATE.Prefs, action) {\n  let newValues;\n  switch (action.type) {\n    case at.PREFS_INITIAL_VALUES:\n      return Object.assign({}, prevState, {initialized: true, values: action.data});\n    case at.PREF_CHANGED:\n      newValues = Object.assign({}, prevState.values);\n      newValues[action.data.name] = action.data.value;\n      return Object.assign({}, prevState, {values: newValues});\n    default:\n      return prevState;\n  }\n}\n\nfunction Sections(prevState = INITIAL_STATE.Sections, action) {\n  let hasMatch;\n  let newState;\n  switch (action.type) {\n    case at.SECTION_DEREGISTER:\n      return prevState.filter(section => section.id !== action.data);\n    case at.SECTION_REGISTER:\n      // If section exists in prevState, update it\n      newState = prevState.map(section => {\n        if (section && section.id === action.data.id) {\n          hasMatch = true;\n          return Object.assign({}, section, action.data);\n        }\n        return section;\n      });\n      // Otherwise, append it\n      if (!hasMatch) {\n        const initialized = !!(action.data.rows && action.data.rows.length > 0);\n        const section = Object.assign({title: \"\", rows: [], enabled: false}, action.data, {initialized});\n        newState.push(section);\n      }\n      return newState;\n    case at.SECTION_UPDATE:\n      newState = prevState.map(section => {\n        if (section && section.id === action.data.id) {\n          // If the action is updating rows, we should consider initialized to be true.\n          // This can be overridden if initialized is defined in the action.data\n          const initialized = action.data.rows ? {initialized: true} : {};\n\n          // Make sure pinned cards stay at their current position when rows are updated.\n          // Disabling a section (SECTION_UPDATE with empty rows) does not retain pinned cards.\n          if (action.data.rows && action.data.rows.length > 0 && section.rows.find(card => card.pinned)) {\n            const rows = Array.from(action.data.rows);\n            section.rows.forEach((card, index) => {\n              if (card.pinned) {\n                rows.splice(index, 0, card);\n              }\n            });\n            return Object.assign({}, section, initialized, Object.assign({}, action.data, {rows}));\n          }\n\n          return Object.assign({}, section, initialized, action.data);\n        }\n        return section;\n      });\n\n      if (!action.data.dedupeConfigurations) {\n        return newState;\n      }\n\n      action.data.dedupeConfigurations.forEach(dedupeConf => {\n        newState = newState.map(section => {\n          if (section.id === dedupeConf.id) {\n            const dedupedRows = dedupeConf.dedupeFrom.reduce((rows, dedupeSectionId) => {\n              const dedupeSection = newState.find(s => s.id === dedupeSectionId);\n              const [, newRows] = dedupe.group(dedupeSection.rows, rows);\n              return newRows;\n            }, section.rows);\n\n            return Object.assign({}, section, {rows: dedupedRows});\n          }\n\n          return section;\n        });\n      });\n\n      return newState;\n    case at.SECTION_UPDATE_CARD:\n      return prevState.map(section => {\n        if (section && section.id === action.data.id && section.rows) {\n          const newRows = section.rows.map(card => {\n            if (card.url === action.data.url) {\n              return Object.assign({}, card, action.data.options);\n            }\n            return card;\n          });\n          return Object.assign({}, section, {rows: newRows});\n        }\n        return section;\n      });\n    case at.PLACES_BOOKMARK_ADDED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          // find the item within the rows that is attempted to be bookmarked\n          if (item.url === action.data.url) {\n            const {bookmarkGuid, bookmarkTitle, dateAdded} = action.data;\n            return Object.assign({}, item, {\n              bookmarkGuid,\n              bookmarkTitle,\n              bookmarkDateCreated: dateAdded,\n              type: \"bookmark\"\n            });\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_SAVED_TO_POCKET:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          if (item.url === action.data.url) {\n            return Object.assign({}, item, {\n              open_url: action.data.open_url,\n              pocket_id: action.data.pocket_id,\n              title: action.data.title,\n              type: \"pocket\"\n            });\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_BOOKMARK_REMOVED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section => Object.assign({}, section, {\n        rows: section.rows.map(item => {\n          // find the bookmark within the rows that is attempted to be removed\n          if (item.url === action.data.url) {\n            const newSite = Object.assign({}, item);\n            delete newSite.bookmarkGuid;\n            delete newSite.bookmarkTitle;\n            delete newSite.bookmarkDateCreated;\n            if (!newSite.type || newSite.type === \"bookmark\") {\n              newSite.type = \"history\";\n            }\n            return newSite;\n          }\n          return item;\n        })\n      }));\n    case at.PLACES_LINK_DELETED:\n    case at.PLACES_LINK_BLOCKED:\n      if (!action.data) {\n        return prevState;\n      }\n      return prevState.map(section =>\n        Object.assign({}, section, {rows: section.rows.filter(site => site.url !== action.data.url)}));\n    case at.DELETE_FROM_POCKET:\n    case at.ARCHIVE_FROM_POCKET:\n      return prevState.map(section =>\n        Object.assign({}, section, {rows: section.rows.filter(site => site.pocket_id !== action.data.pocket_id)}));\n    default:\n      return prevState;\n  }\n}\n\nfunction Snippets(prevState = INITIAL_STATE.Snippets, action) {\n  switch (action.type) {\n    case at.SNIPPETS_DATA:\n      return Object.assign({}, prevState, {initialized: true}, action.data);\n    case at.SNIPPET_BLOCKED:\n      return Object.assign({}, prevState, {blockList: prevState.blockList.concat(action.data)});\n    case at.SNIPPETS_BLOCKLIST_CLEARED:\n      return Object.assign({}, prevState, {blockList: []});\n    case at.SNIPPETS_RESET:\n      return INITIAL_STATE.Snippets;\n    default:\n      return prevState;\n  }\n}\n\nthis.INITIAL_STATE = INITIAL_STATE;\nthis.TOP_SITES_DEFAULT_ROWS = TOP_SITES_DEFAULT_ROWS;\nthis.TOP_SITES_MAX_SITES_PER_ROW = TOP_SITES_MAX_SITES_PER_ROW;\n\nthis.reducers = {TopSites, App, Snippets, Prefs, Dialog, Sections};\n\nconst EXPORTED_SYMBOLS = [\"reducers\", \"INITIAL_STATE\", \"insertPinned\", \"TOP_SITES_DEFAULT_ROWS\", \"TOP_SITES_MAX_SITES_PER_ROW\"];\n","import React from \"react\";\n\nexport class ModalOverlay extends React.PureComponent {\n  componentWillMount() {\n    this.setState({active: true});\n    document.body.classList.add(\"modal-open\");\n  }\n\n  componentWillUnmount() {\n    document.body.classList.remove(\"modal-open\");\n    this.setState({active: false});\n  }\n\n  render() {\n    const {active} = this.state;\n    const {title, button_label} = this.props;\n    return (\n      <div>\n        <div className={`modalOverlayOuter ${active ? \"active\" : \"\"}`} />\n        <div className={`modalOverlayInner ${active ? \"active\" : \"\"}`}>\n          <h2> {title} </h2>\n          {this.props.children}\n          <div className=\"footer\">\n            <button onClick={this.props.onDoneButton} className=\"button primary modalButton\"> {button_label} </button>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n","import {ModalOverlay} from \"../../components/ModalOverlay/ModalOverlay\";\nimport React from \"react\";\n\nclass OnboardingCard extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.onClick = this.onClick.bind(this);\n  }\n\n  onClick() {\n    const {props} = this;\n    props.sendUserActionTelemetry({event: \"CLICK_BUTTON\", message_id: props.id, id: props.UISurface});\n    props.onAction(props.content);\n  }\n\n  render() {\n    const {content} = this.props;\n    return (\n      <div className=\"onboardingMessage\">\n        <div className={`onboardingMessageImage ${content.icon}`} />\n        <div className=\"onboardingContent\">\n          <span>\n            <h3> {content.title} </h3>\n            <p> {content.text} </p>\n          </span>\n          <span>\n            <button className=\"button onboardingButton\" onClick={this.onClick}> {content.button_label} </button>\n          </span>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport class OnboardingMessage extends React.PureComponent {\n  render() {\n    const {props} = this;\n    return (\n      <ModalOverlay {...props} button_label={\"Start Browsing\"} title={\"Welcome to Firefox\"}>\n        <div className=\"onboardingMessageContainer\">\n          {props.bundle.map(message => (\n            <OnboardingCard key={message.id}\n              sendUserActionTelemetry={props.sendUserActionTelemetry}\n              onAction={props.onAction}\n              UISurface={props.UISurface}\n              {...message} />\n          ))}\n        </div>\n      </ModalOverlay>\n    );\n  }\n}\n","export const cardContextTypes = {\n  history: {\n    intlID: \"type_label_visited\",\n    icon: \"history-item\"\n  },\n  bookmark: {\n    intlID: \"type_label_bookmarked\",\n    icon: \"bookmark-added\"\n  },\n  trending: {\n    intlID: \"type_label_recommended\",\n    icon: \"trending\"\n  },\n  now: {\n    intlID: \"type_label_now\",\n    icon: \"now\"\n  },\n  pocket: {\n    intlID: \"type_label_pocket\",\n    icon: \"pocket\"\n  },\n  download: {\n    intlID: \"type_label_downloaded\",\n    icon: \"download\"\n  }\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {cardContextTypes} from \"./types\";\nimport {connect} from \"react-redux\";\nimport {FormattedMessage} from \"react-intl\";\nimport {GetPlatformString} from \"content-src/lib/link-menu-options\";\nimport {LinkMenu} from \"content-src/components/LinkMenu/LinkMenu\";\nimport React from \"react\";\nimport {ScreenshotUtils} from \"content-src/lib/screenshot-utils\";\n\n// Keep track of pending image loads to only request once\nconst gImageLoading = new Map();\n\n/**\n * Card component.\n * Cards are found within a Section component and contain information about a link such\n * as preview image, page title, page description, and some context about if the page\n * was visited, bookmarked, trending etc...\n * Each Section can make an unordered list of Cards which will create one instane of\n * this class. Each card will then get a context menu which reflects the actions that\n * can be done on this Card.\n */\nexport class _Card extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activeCard: null,\n      imageLoaded: false,\n      showContextMenu: false,\n      cardImage: null\n    };\n    this.onMenuButtonClick = this.onMenuButtonClick.bind(this);\n    this.onMenuUpdate = this.onMenuUpdate.bind(this);\n    this.onLinkClick = this.onLinkClick.bind(this);\n  }\n\n  /**\n   * Helper to conditionally load an image and update state when it loads.\n   */\n  async maybeLoadImage() {\n    // No need to load if it's already loaded or no image\n    const {cardImage} = this.state;\n    if (!cardImage) {\n      return;\n    }\n\n    const imageUrl = cardImage.url;\n    if (!this.state.imageLoaded) {\n      // Initialize a promise to share a load across multiple card updates\n      if (!gImageLoading.has(imageUrl)) {\n        const loaderPromise = new Promise((resolve, reject) => {\n          const loader = new Image();\n          loader.addEventListener(\"load\", resolve);\n          loader.addEventListener(\"error\", reject);\n          loader.src = imageUrl;\n        });\n\n        // Save and remove the promise only while it's pending\n        gImageLoading.set(imageUrl, loaderPromise);\n        loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(imageUrl)).catch();\n      }\n\n      // Wait for the image whether just started loading or reused promise\n      await gImageLoading.get(imageUrl);\n\n      // Only update state if we're still waiting to load the original image\n      if (ScreenshotUtils.isRemoteImageLocal(this.state.cardImage, this.props.link.image) &&\n          !this.state.imageLoaded) {\n        this.setState({imageLoaded: true});\n      }\n    }\n  }\n\n  /**\n   * Helper to obtain the next state based on nextProps and prevState.\n   *\n   * NOTE: Rename this method to getDerivedStateFromProps when we update React\n   *       to >= 16.3. We will need to update tests as well. We cannot rename this\n   *       method to getDerivedStateFromProps now because there is a mismatch in\n   *       the React version that we are using for both testing and production.\n   *       (i.e. react-test-render => \"16.3.2\", react => \"16.2.0\").\n   *\n   * See https://github.com/airbnb/enzyme/blob/master/packages/enzyme-adapter-react-16/package.json#L43.\n   */\n  static getNextStateFromProps(nextProps, prevState) {\n    const {image} = nextProps.link;\n    const imageInState = ScreenshotUtils.isRemoteImageLocal(prevState.cardImage, image);\n    let nextState = null;\n\n    // Image is updating.\n    if (!imageInState && nextProps.link) {\n      nextState = {imageLoaded: false};\n    }\n\n    if (imageInState) {\n      return nextState;\n    }\n\n    // Since image was updated, attempt to revoke old image blob URL, if it exists.\n    ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.cardImage);\n\n    nextState = nextState || {};\n    nextState.cardImage = ScreenshotUtils.createLocalImageObject(image);\n\n    return nextState;\n  }\n\n  onMenuButtonClick(event) {\n    event.preventDefault();\n    this.setState({\n      activeCard: this.props.index,\n      showContextMenu: true\n    });\n  }\n\n  /**\n   * Report to telemetry additional information about the item.\n   */\n  _getTelemetryInfo() {\n    // Filter out \"history\" type for being the default\n    if (this.props.link.type !== \"history\") {\n      return {value: {card_type: this.props.link.type}};\n    }\n\n    return null;\n  }\n\n  onLinkClick(event) {\n    event.preventDefault();\n    if (this.props.link.type === \"download\") {\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.SHOW_DOWNLOAD_FILE,\n        data: this.props.link\n      }));\n    } else {\n      const {altKey, button, ctrlKey, metaKey, shiftKey} = event;\n      this.props.dispatch(ac.OnlyToMain({\n        type: at.OPEN_LINK,\n        data: Object.assign(this.props.link, {event: {altKey, button, ctrlKey, metaKey, shiftKey}})\n      }));\n    }\n    if (this.props.isWebExtension) {\n      this.props.dispatch(ac.WebExtEvent(at.WEBEXT_CLICK, {\n        source: this.props.eventSource,\n        url: this.props.link.url,\n        action_position: this.props.index\n      }));\n    } else {\n      this.props.dispatch(ac.UserEvent(Object.assign({\n        event: \"CLICK\",\n        source: this.props.eventSource,\n        action_position: this.props.index\n      }, this._getTelemetryInfo())));\n\n      if (this.props.shouldSendImpressionStats) {\n        this.props.dispatch(ac.ImpressionStats({\n          source: this.props.eventSource,\n          click: 0,\n          tiles: [{id: this.props.link.guid, pos: this.props.index}]\n        }));\n      }\n    }\n  }\n\n  onMenuUpdate(showContextMenu) {\n    this.setState({showContextMenu});\n  }\n\n  componentDidMount() {\n    this.maybeLoadImage();\n  }\n\n  componentDidUpdate() {\n    this.maybeLoadImage();\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillMount() {\n    const nextState = _Card.getNextStateFromProps(this.props, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  // NOTE: Remove this function when we update React to >= 16.3 since React will\n  //       call getDerivedStateFromProps automatically. We will also need to\n  //       rename getNextStateFromProps to getDerivedStateFromProps.\n  componentWillReceiveProps(nextProps) {\n    const nextState = _Card.getNextStateFromProps(nextProps, this.state);\n    if (nextState) {\n      this.setState(nextState);\n    }\n  }\n\n  componentWillUnmount() {\n    ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.cardImage);\n  }\n\n  render() {\n    const {index, className, link, dispatch, contextMenuOptions, eventSource, shouldSendImpressionStats} = this.props;\n    const {props} = this;\n    const isContextMenuOpen = this.state.showContextMenu && this.state.activeCard === index;\n    // Display \"now\" as \"trending\" until we have new strings #3402\n    const {icon, intlID} = cardContextTypes[link.type === \"now\" ? \"trending\" : link.type] || {};\n    const hasImage = this.state.cardImage || link.hasImage;\n    const imageStyle = {backgroundImage: this.state.cardImage ? `url(${this.state.cardImage.url})` : \"none\"};\n    const outerClassName = [\n      \"card-outer\",\n      className,\n      isContextMenuOpen && \"active\",\n      props.placeholder && \"placeholder\"\n    ].filter(v => v).join(\" \");\n\n    return (<li className={outerClassName}>\n      <a href={link.type === \"pocket\" ? link.open_url : link.url} onClick={!props.placeholder ? this.onLinkClick : undefined}>\n        <div className=\"card\">\n          <div className=\"card-preview-image-outer\">\n            {hasImage &&\n              <div className={`card-preview-image${this.state.imageLoaded ? \" loaded\" : \"\"}`} style={imageStyle} />\n            }\n          </div>\n          <div className=\"card-details\">\n            {link.type === \"download\" && <div className=\"card-host-name alternate\"><FormattedMessage id={GetPlatformString(this.props.platform)} /></div>}\n            {link.hostname &&\n              <div className=\"card-host-name\">\n                {link.hostname.slice(0, 100)}{link.type === \"download\" && `  \\u2014 ${link.description}`}\n              </div>\n            }\n            <div className={[\n              \"card-text\",\n              icon ? \"\" : \"no-context\",\n              link.description ? \"\" : \"no-description\",\n              link.hostname ? \"\" : \"no-host-name\"\n            ].join(\" \")}>\n              <h4 className=\"card-title\" dir=\"auto\">{link.title}</h4>\n              <p className=\"card-description\" dir=\"auto\">{link.description}</p>\n            </div>\n            <div className=\"card-context\">\n              {icon && !link.context && <span className={`card-context-icon icon icon-${icon}`} />}\n              {link.icon && link.context && <span className=\"card-context-icon icon\" style={{backgroundImage: `url('${link.icon}')`}} />}\n              {intlID && !link.context && <div className=\"card-context-label\"><FormattedMessage id={intlID} defaultMessage=\"Visited\" /></div>}\n              {link.context && <div className=\"card-context-label\">{link.context}</div>}\n            </div>\n          </div>\n        </div>\n      </a>\n      {!props.placeholder && <button className=\"context-menu-button icon\"\n        onClick={this.onMenuButtonClick}>\n        <span className=\"sr-only\">{`Open context menu for ${link.title}`}</span>\n      </button>}\n      {isContextMenuOpen &&\n        <LinkMenu\n          dispatch={dispatch}\n          index={index}\n          source={eventSource}\n          onUpdate={this.onMenuUpdate}\n          options={link.contextMenuOptions || contextMenuOptions}\n          site={link}\n          siteInfo={this._getTelemetryInfo()}\n          shouldSendImpressionStats={shouldSendImpressionStats} />\n      }\n   </li>);\n  }\n}\n_Card.defaultProps = {link: {}};\nexport const Card = connect(state => ({platform: state.Prefs.values.platform}))(_Card);\nexport const PlaceholderCard = props => <Card placeholder={true} className={props.className} />;\n","import {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\n\nexport class TopSiteFormInput extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {validationError: this.props.validationError};\n    this.onChange = this.onChange.bind(this);\n    this.onMount = this.onMount.bind(this);\n  }\n\n  componentWillReceiveProps(nextProps) {\n    if (nextProps.shouldFocus && !this.props.shouldFocus) {\n      this.input.focus();\n    }\n    if (nextProps.validationError && !this.props.validationError) {\n      this.setState({validationError: true});\n    }\n    // If the component is in an error state but the value was cleared by the parent\n    if (this.state.validationError && !nextProps.value) {\n      this.setState({validationError: false});\n    }\n  }\n\n  onChange(ev) {\n    if (this.state.validationError) {\n      this.setState({validationError: false});\n    }\n    this.props.onChange(ev);\n  }\n\n  onMount(input) {\n    this.input = input;\n  }\n\n  render() {\n    const showClearButton = this.props.value && this.props.onClear;\n    const {typeUrl} = this.props;\n    const {validationError} = this.state;\n\n    return (<label><FormattedMessage id={this.props.titleId} />\n      <div className={`field ${typeUrl ? \"url\" : \"\"}${validationError ? \" invalid\" : \"\"}`}>\n        {this.props.loading ?\n          <div className=\"loading-container\"><div className=\"loading-animation\" /></div> :\n          showClearButton && <div className=\"icon icon-clear-input\" onClick={this.props.onClear} />}\n        <input type=\"text\"\n          value={this.props.value}\n          ref={this.onMount}\n          onChange={this.onChange}\n          placeholder={this.props.intl.formatMessage({id: this.props.placeholderId})}\n          autoFocus={this.props.shouldFocus}\n          disabled={this.props.loading} />\n        {validationError &&\n          <aside className=\"error-tooltip\">\n            <FormattedMessage id={this.props.errorMessageId} />\n          </aside>}\n      </div>\n    </label>);\n  }\n}\n\nTopSiteFormInput.defaultProps = {\n  showClearButton: false,\n  value: \"\",\n  validationError: false\n};\n","import {actionCreators as ac, actionTypes as at} from \"common/Actions.jsm\";\nimport {FormattedMessage} from \"react-intl\";\nimport React from \"react\";\nimport {TOP_SITES_SOURCE} from \"./TopSitesConstants\";\nimport {TopSiteFormInput} from \"./TopSiteFormInput\";\nimport {TopSiteLink} from \"./TopSite\";\n\nexport class TopSiteForm extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    const {site} = props;\n    this.state = {\n      label: site ? (site.label || site.hostname) : \"\",\n      url: site ? site.url : \"\",\n      validationError: false,\n      customScreenshotUrl: site ? site.customScreenshotURL : \"\",\n      showCustomScreenshotForm: site ? site.customScreenshotURL : false\n    };\n    this.onClearScreenshotInput = this.onClearScreenshotInput.bind(this);\n    this.onLabelChange = this.onLabelChange.bind(this);\n    this.onUrlChange = this.onUrlChange.bind(this);\n    this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n    this.onClearUrlClick = this.onClearUrlClick.bind(this);\n    this.onDoneButtonClick = this.onDoneButtonClick.bind(this);\n    this.onCustomScreenshotUrlChange = this.onCustomScreenshotUrlChange.bind(this);\n    this.onPreviewButtonClick = this.onPreviewButtonClick.bind(this);\n    this.onEnableScreenshotUrlForm = this.onEnableScreenshotUrlForm.bind(this);\n    this.validateUrl = this.validateUrl.bind(this);\n  }\n\n  onLabelChange(event) {\n    this.setState({\"label\": event.target.value});\n  }\n\n  onUrlChange(event) {\n    this.setState({\n      url: event.target.value,\n      validationError: false\n    });\n  }\n\n  onClearUrlClick() {\n    this.setState({\n      url: \"\",\n      validationError: false\n    });\n  }\n\n  onEnableScreenshotUrlForm() {\n    this.setState({showCustomScreenshotForm: true});\n  }\n\n  _updateCustomScreenshotInput(customScreenshotUrl) {\n    this.setState({\n      customScreenshotUrl,\n      validationError: false\n    });\n    this.props.dispatch({type: at.PREVIEW_REQUEST_CANCEL});\n  }\n\n  onCustomScreenshotUrlChange(event) {\n    this._updateCustomScreenshotInput(event.target.value);\n  }\n\n  onClearScreenshotInput() {\n    this._updateCustomScreenshotInput(\"\");\n  }\n\n  onCancelButtonClick(ev) {\n    ev.preventDefault();\n    this.props.onClose();\n  }\n\n  onDoneButtonClick(ev) {\n    ev.preventDefault();\n\n    if (this.validateForm()) {\n      const site = {url: this.cleanUrl(this.state.url)};\n      const {index} = this.props;\n      if (this.state.label !== \"\") {\n        site.label = this.state.label;\n      }\n\n      if (this.state.customScreenshotUrl) {\n        site.customScreenshotURL = this.cleanUrl(this.state.customScreenshotUrl);\n      } else if (this.props.site && this.props.site.customScreenshotURL) {\n        // Used to flag that previously cached screenshot should be removed\n        site.customScreenshotURL = null;\n      }\n      this.props.dispatch(ac.AlsoToMain({\n        type: at.TOP_SITES_PIN,\n        data: {site, index}\n      }));\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"TOP_SITES_EDIT\",\n        action_position: index\n      }));\n\n      this.props.onClose();\n    }\n  }\n\n  onPreviewButtonClick(event) {\n    event.preventDefault();\n    if (this.validateForm()) {\n      this.props.dispatch(ac.AlsoToMain({\n        type: at.PREVIEW_REQUEST,\n        data: {url: this.cleanUrl(this.state.customScreenshotUrl)}\n      }));\n      this.props.dispatch(ac.UserEvent({\n        source: TOP_SITES_SOURCE,\n        event: \"PREVIEW_REQUEST\"\n      }));\n    }\n  }\n\n  cleanUrl(url) {\n    // If we are missing a protocol, prepend http://\n    if (!url.startsWith(\"http:\") && !url.startsWith(\"https:\")) {\n      return `http://${url}`;\n    }\n    return url;\n  }\n\n  _tryParseUrl(url) {\n    try {\n      return new URL(url);\n    } catch (e) {\n      return null;\n    }\n  }\n\n  validateUrl(url) {\n    const validProtocols = [\"http:\", \"https:\"];\n    const urlObj = this._tryParseUrl(url) || this._tryParseUrl(this.cleanUrl(url));\n\n    return urlObj && validProtocols.includes(urlObj.protocol);\n  }\n\n  validateCustomScreenshotUrl() {\n    const {customScreenshotUrl} = this.state;\n    return !customScreenshotUrl || this.validateUrl(customScreenshotUrl);\n  }\n\n  validateForm() {\n    const validate = this.validateUrl(this.state.url) && this.validateCustomScreenshotUrl();\n\n    if (!validate) {\n      this.setState({validationError: true});\n    }\n\n    return validate;\n  }\n\n  _renderCustomScreenshotInput() {\n    const {customScreenshotUrl} = this.state;\n    const requestFailed = this.props.previewResponse === \"\";\n    const validationError = (this.state.validationError && !this.validateCustomScreenshotUrl()) || requestFailed;\n    // Set focus on error if the url field is valid or when the input is first rendered and is empty\n    const shouldFocus = (validationError && this.validateUrl(this.state.url)) || !customScreenshotUrl;\n    const isLoading = this.props.previewResponse === null &&\n      customScreenshotUrl && this.props.previewUrl === this.cleanUrl(customScreenshotUrl);\n\n    if (!this.state.showCustomScreenshotForm) {\n      return (<a className=\"enable-custom-image-input\" onClick={this.onEnableScreenshotUrlForm}>\n        <FormattedMessage id=\"topsites_form_use_image_link\" />\n      </a>);\n    }\n    return (<div className=\"custom-image-input-container\">\n      <TopSiteFormInput\n        errorMessageId={requestFailed ? \"topsites_form_image_validation\" : \"topsites_form_url_validation\"}\n        loading={isLoading}\n        onChange={this.onCustomScreenshotUrlChange}\n        onClear={this.onClearScreenshotInput}\n        shouldFocus={shouldFocus}\n        typeUrl={true}\n        value={customScreenshotUrl}\n        validationError={validationError}\n        titleId=\"topsites_form_image_url_label\"\n        placeholderId=\"topsites_form_url_placeholder\"\n        intl={this.props.intl} />\n    </div>);\n  }\n\n  render() {\n    const {customScreenshotUrl} = this.state;\n    const requestFailed = this.props.previewResponse === \"\";\n    // For UI purposes, editing without an existing link is \"add\"\n    const showAsAdd = !this.props.site;\n    const previous = (this.props.site && this.props.site.customScreenshotURL) || \"\";\n    const changed = customScreenshotUrl && this.cleanUrl(customScreenshotUrl) !== previous;\n    // Preview mode if changes were made to the custom screenshot URL and no preview was received yet\n    // or the request failed\n    const previewMode = changed && !this.props.previewResponse;\n    const previewLink = Object.assign({}, this.props.site);\n    if (this.props.previewResponse) {\n      previewLink.screenshot = this.props.previewResponse;\n      previewLink.customScreenshotURL = this.props.previewUrl;\n    }\n    return (\n      <form className=\"topsite-form\">\n        <div className=\"form-input-container\">\n          <h3 className=\"section-title\">\n            <FormattedMessage id={showAsAdd ? \"topsites_form_add_header\" : \"topsites_form_edit_header\"} />\n          </h3>\n          <div className=\"fields-and-preview\">\n            <div className=\"form-wrapper\">\n              <TopSiteFormInput onChange={this.onLabelChange}\n                value={this.state.label}\n                titleId=\"topsites_form_title_label\"\n                placeholderId=\"topsites_form_title_placeholder\"\n                intl={this.props.intl} />\n              <TopSiteFormInput onChange={this.onUrlChange}\n                shouldFocus={this.state.validationError && !this.validateUrl(this.state.url)}\n                value={this.state.url}\n                onClear={this.onClearUrlClick}\n                validationError={this.state.validationError && !this.validateUrl(this.state.url)}\n                titleId=\"topsites_form_url_label\"\n                typeUrl={true}\n                placeholderId=\"topsites_form_url_placeholder\"\n                errorMessageId=\"topsites_form_url_validation\"\n                intl={this.props.intl} />\n              {this._renderCustomScreenshotInput()}\n            </div>\n            <TopSiteLink link={previewLink}\n              defaultStyle={requestFailed}\n              title={this.state.label} />\n          </div>\n        </div>\n        <section className=\"actions\">\n          <button className=\"cancel\" type=\"button\" onClick={this.onCancelButtonClick}>\n            <FormattedMessage id=\"topsites_form_cancel_button\" />\n          </button>\n          {previewMode ?\n            <button className=\"done preview\" type=\"submit\" onClick={this.onPreviewButtonClick}>\n              <FormattedMessage id=\"topsites_form_preview_button\" />\n            </button> :\n            <button className=\"done\" type=\"submit\" onClick={this.onDoneButtonClick}>\n              <FormattedMessage id={showAsAdd ? \"topsites_form_add_button\" : \"topsites_form_save_button\"} />\n            </button>}\n        </section>\n      </form>\n    );\n  }\n}\n\nTopSiteForm.defaultProps = {\n  site: null,\n  index: -1\n};\n"],"sourceRoot":""}
\ No newline at end of file
--- a/browser/extensions/activity-stream/install.rdf.in
+++ b/browser/extensions/activity-stream/install.rdf.in
@@ -3,17 +3,17 @@
 #filter substitution
 
 <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>activity-stream@mozilla.org</em:id>
     <em:type>2</em:type>
     <em:bootstrap>true</em:bootstrap>
     <em:unpack>false</em:unpack>
-    <em:version>0.0.0</em:version>
+    <em:version>2018.07.06.1113-783442c0</em:version>
     <em:name>Activity Stream</em:name>
     <em:description>A rich visual history feed and a reimagined home page make it easier than ever to find exactly what you're looking for in Firefox.</em:description>
     <em:multiprocessCompatible>true</em:multiprocessCompatible>
 
     <em:targetApplication>
       <Description>
         <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
         <em:minVersion>@MOZ_APP_VERSION@</em:minVersion>
--- a/browser/extensions/activity-stream/karma.mc.config.js
+++ b/browser/extensions/activity-stream/karma.mc.config.js
@@ -60,16 +60,17 @@ module.exports = function(config) {
         {type: "html", subdir: "report-html"},
         {type: "text", subdir: ".", file: "text.txt"},
         {type: "text-summary", subdir: ".", file: "text-summary.txt"}
       ]
     },
     files: [PATHS.testEntryFile],
     preprocessors,
     webpack: {
+      mode: "none",
       devtool: "inline-source-map",
       // This loader allows us to override required files in tests
       resolveLoader: {alias: {inject: path.join(__dirname, "loaders/inject-loader")}},
       // This resolve config allows us to import with paths relative to the root directory, e.g. "lib/ActivityStream.jsm"
       resolve: {
         extensions: [".js", ".jsx"],
         modules: [
           PATHS.moduleResolveDirectory,
--- a/browser/extensions/activity-stream/lib/ASRouterTargeting.jsm
+++ b/browser/extensions/activity-stream/lib/ASRouterTargeting.jsm
@@ -1,10 +1,12 @@
 ChromeUtils.import("resource://gre/modules/components-utils/FilterExpressions.jsm");
 ChromeUtils.import("resource://gre/modules/Services.jsm");
+ChromeUtils.defineModuleGetter(this, "AddonManager",
+  "resource://gre/modules/AddonManager.jsm");
 ChromeUtils.defineModuleGetter(this, "ProfileAge",
   "resource://gre/modules/ProfileAge.jsm");
 ChromeUtils.import("resource://gre/modules/Console.jsm");
 
 const FXA_USERNAME_PREF = "services.sync.username";
 const ONBOARDING_EXPERIMENT_PREF = "browser.newtabpage.activity-stream.asrouterOnboardingCohort";
 
 /**
@@ -22,16 +24,38 @@ const TargetingGetters = {
     return new ProfileAge(null, null).created;
   },
   get profileAgeReset() {
     return new ProfileAge(null, null).reset;
   },
   get hasFxAccount() {
     return Services.prefs.prefHasUserValue(FXA_USERNAME_PREF);
   },
+  get addonsInfo() {
+    return AddonManager.getActiveAddons(["extension", "service"])
+      .then(({addons, fullData}) => {
+        const info = {};
+        for (const addon of addons) {
+          info[addon.id] = {
+            version: addon.version,
+            type: addon.type,
+            isSystem: addon.isSystem,
+            isWebExtension: addon.isWebExtension
+          };
+          if (fullData) {
+            Object.assign(info[addon.id], {
+              name: addon.name,
+              userDisabled: addon.userDisabled,
+              installDate: addon.installDate
+            });
+          }
+        }
+        return {addons: info, isFullData: fullData};
+      });
+  },
   // Temporary targeting function for the purposes of running the simplified onboarding experience
   get isInExperimentCohort() {
     return Services.prefs.getIntPref(ONBOARDING_EXPERIMENT_PREF, 0);
   }
 };
 
 this.ASRouterTargeting = {
   Environment: TargetingGetters,
--- a/browser/extensions/activity-stream/lib/AboutPreferences.jsm
+++ b/browser/extensions/activity-stream/lib/AboutPreferences.jsm
@@ -53,17 +53,17 @@ const CUSTOM_CSS = `
 #homeContentsGroup checkbox[src] .checkbox-icon {
   margin-inline-end: 8px;
   margin-inline-start: 4px;
   width: 16px;
 }
 #homeContentsGroup [data-subcategory] {
   margin-top: 14px;
 }
-#homeContentsGroup [data-subcategory] > checkbox {
+#homeContentsGroup [data-subcategory] .section-checkbox {
   font-weight: 600;
 }
 #homeContentsGroup [data-subcategory] > vbox menulist {
   margin-top: 0;
   margin-bottom: 0;
 }
 `;
 
@@ -193,42 +193,43 @@ this.AboutPreferences = class AboutPrefe
       // Use full icon spec for certain protocols or fall back to packaged icon
       const iconUrl = !icon.search(/^(chrome|moz-extension|resource):/) ? icon :
         `resource://activity-stream/data/content/assets/glyph-${icon}-16.svg`;
 
       // Add the main preference for turning on/off a section
       const sectionVbox = createAppend("vbox", contentsGroup);
       sectionVbox.setAttribute("data-subcategory", id);
       const checkbox = createAppend("checkbox", sectionVbox);
+      checkbox.classList.add("section-checkbox");
       checkbox.setAttribute("label", formatString(titleString));
       checkbox.setAttribute("src", iconUrl);
       linkPref(checkbox, name, "bool");
 
+      // Specially add a link for stories
+      if (id === "topstories") {
+        const sponsoredHbox = createAppend("hbox", sectionVbox);
+        sponsoredHbox.setAttribute("align", "center");
+        sponsoredHbox.appendChild(checkbox);
+        checkbox.classList.add("tail-with-learn-more");
+
+        const link = createAppend("label", sponsoredHbox);
+        link.classList.add("learn-sponsored");
+        link.classList.add("text-link");
+        link.setAttribute("href", sectionData.disclaimer.link.href);
+        link.textContent = formatString("prefs_topstories_sponsored_learn_more");
+      }
+
       // Add more details for the section (e.g., description, more prefs)
       const detailVbox = createAppend("vbox", sectionVbox);
       detailVbox.classList.add("indent");
       if (descString) {
         const label = createAppend("label", detailVbox);
         label.classList.add("indent");
         label.textContent = formatString(descString);
 
-        // Specially add a link for stories
-        if (id === "topstories") {
-          const sponsoredHbox = createAppend("hbox", detailVbox);
-          sponsoredHbox.setAttribute("align", "center");
-          sponsoredHbox.appendChild(label);
-          label.classList.add("tail-with-learn-more");
-
-          const link = createAppend("label", sponsoredHbox);
-          link.classList.add("learn-sponsored");
-          link.classList.add("text-link");
-          link.setAttribute("href", sectionData.disclaimer.link.href);
-          link.textContent = formatString("prefs_topstories_sponsored_learn_more");
-        }
-
         // Add a rows dropdown if we have a pref to control and a maximum
         if (rowsPref && maxRows) {
           const detailHbox = createAppend("hbox", detailVbox);
           detailHbox.setAttribute("align", "center");
           label.setAttribute("flex", 1);
           detailHbox.appendChild(label);
 
           // Add appropriate number of localized entries to the dropdown
--- a/browser/extensions/activity-stream/locales/bg/strings.properties
+++ b/browser/extensions/activity-stream/locales/bg/strings.properties
@@ -101,17 +101,17 @@ prefs_topstories_description2=Отлично съдържание от цялата Мрежа, подбрано лично за вас
 prefs_topstories_options_sponsored_label=Платени публикации
 prefs_topstories_sponsored_learn_more=Научете повече
 prefs_highlights_description=Избрани страници, които сте запазили или посетили
 prefs_highlights_options_visited_label=Посетени страници
 prefs_highlights_options_download_label=Последни изтегляния
 prefs_highlights_options_pocket_label=Страници, запазени в Pocket
 prefs_snippets_description=Новости от Mozilla и Firefox
 settings_pane_button_label=Настройки на новия раздел
-settings_pane_topsites_header=Често посещавани
+settings_pane_topsites_header=Често посещавани страници
 settings_pane_highlights_header=Акценти
 settings_pane_highlights_options_bookmarks=Отметки
 # LOCALIZATION NOTE(settings_pane_snippets_header): For the "Snippets" feature
 # traditionally on about:home. Alternative translation options: "Small Note" or
 # something that expresses the idea of "a small message, shortened from
 # something else, and non-essential but also not entirely trivial and useless."
 settings_pane_snippets_header=Изрезки
 
--- a/browser/extensions/activity-stream/locales/cs/strings.properties
+++ b/browser/extensions/activity-stream/locales/cs/strings.properties
@@ -118,17 +118,17 @@ settings_pane_snippets_header=Útržky
 # LOCALIZATION NOTE (edit_topsites_*): This is shown in the Edit Top Sites modal
 # dialog.
 edit_topsites_button_text=Upravit
 edit_topsites_edit_button=Upravit tuto stránku
 
 # LOCALIZATION NOTE (topsites_form_*): This is shown in the New/Edit Topsite modal.
 topsites_form_add_header=Nová top stránka
 topsites_form_edit_header=Upravit top stránku
-topsites_form_title_label=Nadpis
+topsites_form_title_label=Název stránky
 topsites_form_title_placeholder=Zadejte název
 topsites_form_url_label=URL
 topsites_form_image_url_label=URL adresa vlastního obrázku
 topsites_form_url_placeholder=Zadejte nebo vložte URL adresu
 topsites_form_use_image_link=Použít vlastní obrázek…
 # LOCALIZATION NOTE (topsites_form_*_button): These are verbs/actions.
 topsites_form_preview_button=Náhled
 topsites_form_add_button=Přidat
--- a/browser/extensions/activity-stream/locales/ff/strings.properties
+++ b/browser/extensions/activity-stream/locales/ff/strings.properties
@@ -166,12 +166,36 @@ error_fallback_default_info=Uf, saɗeende kewii e loowgol ngoo loowdi.
 error_fallback_default_refresh_suggestion=Wultin hello ngoo ngam ennditde.
 
 # LOCALIZATION NOTE (section_menu_action_*).  These strings are displayed in the section
 # context menu and are meant as a call to action for the given section.
 section_menu_action_remove_section=Momtu taƴre
 section_menu_action_collapse_section=Renndin taƴe
 section_menu_action_expand_section=Yaajtin taƴre
 section_menu_action_manage_section=Feewnu taƴre
+section_menu_action_manage_webext=Yiil Timmitere
 section_menu_action_add_topsite=Ɓeydu lowre rowrowre
 section_menu_action_move_up=Dirtin dow
 section_menu_action_move_down=Dirtin les
 section_menu_action_privacy_notice=Tintinal sirlu
+
+# LOCALIZATION NOTE (firstrun_*). These strings are displayed only once, on the
+# firstrun of the browser, they give an introduction to Firefox and Sync.
+firstrun_title=Nawor Firefox
+firstrun_content=Heɓ maantore maa, aslol maa, finndeeji maa kam e teelte goɗɗe e masiŋon maa fof.
+firstrun_learn_more_link=Ɓeydu humpito baɗte Konte Firefox
+
+# LOCALIZATION NOTE (firstrun_form_header and firstrun_form_sub_header):
+# firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
+# firstrun_form_header is displayed more boldly as the call to action.
+firstrun_form_header=Naatnu iimeel maa
+firstrun_form_sub_header=ngam jokkude to Firefox Sync
+
+firstrun_email_input_placeholder=Iimeel
+
+# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
+# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
+firstrun_extra_legal_links=Fuɗɗaade, woni a jaɓii {kuule} ɗee kam e {suturo}oo.
+firstrun_terms_of_service=Laabi Carwol
+firstrun_privacy_notice=Tintinol Suturo
+
+firstrun_continue_to_login=Jokku
+firstrun_skip_login=Diw ngal daawal
--- a/browser/extensions/activity-stream/locales/he/strings.properties
+++ b/browser/extensions/activity-stream/locales/he/strings.properties
@@ -47,18 +47,18 @@ menu_action_archive_pocket=העברה לארכיון ב־Pocket
 
 # LOCALIZATION NOTE (menu_action_show_file_*): These are platform specific strings
 # found in the context menu of an item that has been downloaded. The intention behind
 # "this action" is that it will show where the downloaded file exists on the file system
 # for each operating system.
 menu_action_show_file_mac_os=הצגה ב־Finder
 menu_action_show_file_windows=פתיחת תיקייה מכילה
 menu_action_show_file_linux=פתיחת תיקייה מכילה
-menu_action_show_file_default=הצגת קובץ
-menu_action_open_file=פתיחת קובץ
+menu_action_show_file_default=הצגת הקובץ
+menu_action_open_file=פתיחת הקובץ
 
 # LOCALIZATION NOTE (menu_action_copy_download_link, menu_action_go_to_download_page):
 # "Download" here, in both cases, is not a verb, it is a noun. As in, "Copy the
 # link that belongs to this downloaded item"
 menu_action_copy_download_link=העתקת קישור ההורדה
 menu_action_go_to_download_page=מעבר לעמוד ההורדה
 menu_action_remove_download=הסרה מההיסטוריה
 
@@ -84,17 +84,17 @@ section_disclaimer_topstories_linktext=מידע על איך זה עובד.
 # the button used to acknowledge, and hide this disclaimer in the future.
 section_disclaimer_topstories_buttontext=בסדר, הבנתי
 
 # LOCALIZATION NOTE (prefs_*, settings_*): These are shown in about:preferences
 # for a "Firefox Home" section. "Firefox" should be treated as a brand and kept
 # in English, while "Home" should be localized matching the about:preferences
 # sidebar mozilla-central string for the panel that has preferences related to
 # what is shown for the homepage, new windows, and new tabs.
-prefs_home_header=Firefox Home Content
+prefs_home_header=תוכן מסך הבית של Firefox
 prefs_home_description=בחירת תוכן שיוצג במסך הבית של Firefox.
 # LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
 # plural forms used in a drop down of multiple row options (1 row, 2 rows).
 # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
 prefs_section_rows_option=שורה אחת;{num} שורות
 prefs_search_header=חיפוש ברשת
 prefs_topsites_description=האתרים בהם ביקרת הכי הרבה
 prefs_topstories_description2=תוכן נהדר מכל רחבי הרשת, בהתאמה אישית להעדפותיך
--- a/browser/extensions/activity-stream/locales/it/strings.properties
+++ b/browser/extensions/activity-stream/locales/it/strings.properties
@@ -185,16 +185,17 @@ firstrun_learn_more_link=Scopri di più sull’account Firefox
 
 # LOCALIZATION NOTE (firstrun_form_header and firstrun_form_sub_header):
 # firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
 # firstrun_form_header is displayed more boldly as the call to action.
 firstrun_form_header=Inserisci email
 firstrun_form_sub_header=per utilizzare Firefox Sync.
 
 firstrun_email_input_placeholder=Email
+firstrun_invalid_input=Inserire un indirizzo email valido
 
 # LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
 # {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
 firstrun_extra_legal_links=Proseguendo, accetto le {terms} e l’{privacy}.
 firstrun_terms_of_service=condizioni di utilizzo del servizio
 firstrun_privacy_notice=informativa sulla privacy
 
 firstrun_continue_to_login=Continua
--- a/browser/extensions/activity-stream/locales/km/strings.properties
+++ b/browser/extensions/activity-stream/locales/km/strings.properties
@@ -1,166 +1,145 @@
 newtab_page_title=ផ្ទាំង​ថ្មី
-default_label_loading=កំពុង​ផ្ទុក...
 
 header_top_sites=វិបសាយ​លើ​គេ
-header_stories=រឿងរ៉ាវកំពូល
 header_highlights=រឿងសំខាន់ៗ
-header_visit_again=ទស្សនាម្តងទៀត
-header_bookmarks=ចំណាំថ្មីៗ
 # LOCALIZATION NOTE(header_recommended_by): This is followed by the name
 # of the corresponding content provider.
 header_recommended_by=បានណែនាំដោយ {provider}
-# LOCALIZATION NOTE(header_bookmarks_placeholder): This message is
-# meant to inform that section contains no information because
-# the user hasn't added any bookmarks.
-header_bookmarks_placeholder=អ្នកមិនមានចំណាំណាមួយនៅឡើយទេ ។
-# LOCALIZATION NOTE(header_stories_from): This is followed by a logo of the
-# corresponding content (stories) provider
-header_stories_from=មកពី
+
+# LOCALIZATION NOTE(context_menu_button_sr): This is for screen readers when
+# the context menu button is focused/active. Title is the label or hostname of
+# the site.
+
+# LOCALIZATION NOTE(section_context_menu_button_sr): This is for screen readers when
+# the section edit context menu button is focused/active.
 
 # LOCALIZATION NOTE (type_label_*): These labels are associated to pages to give
 # context on how the element is related to the user, e.g. type indicates that
 # the page is bookmarked, or is currently open on another device
 type_label_visited=បាន​ចូល​មើល
 type_label_bookmarked=បាន​ចំណាំ
-type_label_synced=បាន​ធ្វើ​សមកាលកម្ម​ពី​ឧបករណ៍​ផ្សេង​ទៀត
 type_label_recommended=និន្នាការ
-# LOCALIZATION NOTE(type_label_open): Open is an adjective, as in "page is open"
-type_label_open=បើក
-type_label_topic=ប្រធានបទ
-type_label_now=ឥឡូវនេះ
 
 # LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
 # menu and are meant as a call to action for a given page.
 # LOCALIZATION NOTE (menu_action_bookmark): Bookmark is a verb, as in "Add to
 # bookmarks"
 menu_action_bookmark=ចំណាំ
 menu_action_remove_bookmark=លុប​ចំណាំ​ចេញ
-menu_action_copy_address=ចម្លង​អាសយដ្ឋាន
-menu_action_email_link=តំណ​អ៊ីមែល...
 menu_action_open_new_window=បើក​នៅ​ក្នុង​បង្អួច​ថ្មី
 menu_action_open_private_window=បើក​នៅ​ក្នុង​បង្អួច​ឯកជន​ថ្មី
 menu_action_dismiss=បោះបង់ចោល
 menu_action_delete=លុប​ពី​ប្រវត្តិ
 menu_action_pin=ខ្ទាស់
 menu_action_unpin=ដកខ្ទាស់
 confirm_history_delete_p1=តើអ្នកប្រាកដថាអ្នកចង់លុបគ្រប់វត្ថុនៃទំព័រនេះពីប្រវត្តិរបស់អ្នកឬ?
 # LOCALIZATION NOTE (confirm_history_delete_notice_p2): this string is displayed in
 # the same dialog as confirm_history_delete_p1. "This action" refers to deleting a
 # page from history.
 confirm_history_delete_notice_p2=សកម្មភាពនេះមិនអាចមិនធ្វើឡើង​វិញបានទេ។
 menu_action_save_to_pocket=រក្សាទុកទៅ Pocket
 
-# LOCALIZATION NOTE (search_for_something_with): {search_term} is a placeholder
-# for what the user has typed in the search input field, e.g. 'Search for ' +
-# search_term + 'with:' becomes 'Search for abc with:'
-# The search engine name is displayed as an icon and does not need a translation
-search_for_something_with=ស្វែងរក {search_term} ជាមួយ៖
+# LOCALIZATION NOTE (menu_action_show_file_*): These are platform specific strings
+# found in the context menu of an item that has been downloaded. The intention behind
+# "this action" is that it will show where the downloaded file exists on the file system
+# for each operating system.
+menu_action_show_file_default=បង្ហាញ​ឯកសារ
+menu_action_open_file=បើកឯកសារ
+
+# LOCALIZATION NOTE (menu_action_copy_download_link, menu_action_go_to_download_page):
+# "Download" here, in both cases, is not a verb, it is a noun. As in, "Copy the
+# link that belongs to this downloaded item"
 
 # LOCALIZATION NOTE (search_button): This is screenreader only text for the
 # search button.
 search_button=ស្វែងរក
 
 # LOCALIZATION NOTE (search_header): Displayed at the top of the panel
 # showing search suggestions. {search_engine_name} is replaced with the name of
 # the current default search engine. e.g. 'Google Search'
 search_header={search_engine_name} ស្វែងរក
 
 # LOCALIZATION NOTE (search_web_placeholder): This is shown in the searchbox when
 # the user hasn't typed anything yet.
 search_web_placeholder=ស្វែងរក​បណ្ដាញ
-search_settings=ផ្លាស់ប្ដូរ​ការ​កំណត់​ស្វែងរក
-
-# LOCALIZATION NOTE (section_info_option): This is the screenreader text for the
-# (?) icon that would show a section's description with optional feedback link.
-section_info_option=ព័ត៌មាន
-section_info_send_feedback=ផ្ញើមតិត្រឡប់
-section_info_privacy_notice=សេចក្តីជូនដំណឹងអំពីភាពឯកជន
 
 # LOCALIZATION NOTE (section_disclaimer_topstories): This is shown below
 # the topstories section title to provide additional information about
 # how the stories are selected.
 # LOCALIZATION NOTE (section_disclaimer_topstories_buttontext): The text of
 # the button used to acknowledge, and hide this disclaimer in the future.
 section_disclaimer_topstories_buttontext=យល់​ហើយ
 
-# LOCALIZATION NOTE (welcome_*): This is shown as a modal dialog, typically on a
-# first-run experience when there's no data to display yet
-welcome_title=ស្វាគមន៍​មក​កាន់​ផ្ទាំង​ថ្មី
-welcome_body=Firefox នឹង​ប្រើប្រាស់​កន្លែង​ទំនេរ​នេះ ដើម្បី​បង្ហាញ​ចំណាំ អត្ថបទ វីដេអូ និង​ទំព័រ​ដែល​ទាក់ទង​អ្នក​បំផុត ដែល​អ្នក​បាន​ចូល​មើល​ថ្មីៗ​នេះ ដូច្នេះ​អ្នក​អាច​ត្រឡប់​ទៅ​​កាន់​​វា​​វិញ​បាន​យ៉ាងងាយស្រួល។
-welcome_label=កំពុង​បញ្ជាក់​ការ​រំលេច​របស់​អ្នក
-
-# LOCALIZATION NOTE (time_label_*): {number} is a placeholder for a number which
-# represents a shortened timestamp format, e.g. '10m' means '10 minutes ago'.
-time_label_less_than_minute=<1 នាទី
-time_label_minute={number} នាទី
-time_label_hour={number} ម៉ោង
-time_label_day={number} ថ្ងៃ
-
-# LOCALIZATION NOTE (settings_pane_*): This is shown in the Settings Pane sidebar.
-settings_pane_header=ចំណង់ចំណូលចិត្ត ផ្ទាំងថ្មី
-settings_pane_body2=ជ្រើសរើសអ្វីដែលអ្នកឃើញនៅលើទំព័រនេះ។
-settings_pane_search_header=ស្វែងរក
-settings_pane_search_body=ស្វែងរកបណ្តាញពីផ្ទាំងថ្មីរបស់អ្នក។
+# LOCALIZATION NOTE (prefs_*, settings_*): These are shown in about:preferences
+# for a "Firefox Home" section. "Firefox" should be treated as a brand and kept
+# in English, while "Home" should be localized matching the about:preferences
+# sidebar mozilla-central string for the panel that has preferences related to
+# what is shown for the homepage, new windows, and new tabs.
+# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
+# plural forms used in a drop down of multiple row options (1 row, 2 rows).
+# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
+settings_pane_button_label=ប្តូរទំព័រ ផ្ទាំងថ្មី របស់អ្នកតាមបំណង
 settings_pane_topsites_header=សាយកំពូល
-settings_pane_topsites_body=ចូលវេបសាយដែលអ្នកទស្សនាច្រើនបំផុត។
-settings_pane_topsites_options_showmore=បង្ហាញជួរដេកពីរ
-settings_pane_bookmarks_header=ចំណាំថ្មីៗ
-settings_pane_bookmarks_body=ចំណាំថ្មីៗ ដែលបានបង្កើតរបស់អ្នកនៅក្នុងទីតាំងដែលងាយស្រួល។
-settings_pane_visit_again_header=ទស្សនាម្ដងទៀត
 settings_pane_highlights_header=រឿងសំខាន់ៗ
 settings_pane_highlights_options_bookmarks=ចំណាំ
-settings_pane_highlights_options_visited=សាយដែលបានទស្សនា
 # LOCALIZATION NOTE(settings_pane_snippets_header): For the "Snippets" feature
 # traditionally on about:home. Alternative translation options: "Small Note" or
 # something that expresses the idea of "a small message, shortened from
 # something else, and non-essential but also not entirely trivial and useless."
 settings_pane_snippets_header=អត្ថបទសង្ខេប
-settings_pane_done_button=ធ្វើរួច
 
 # LOCALIZATION NOTE (edit_topsites_*): This is shown in the Edit Top Sites modal
 # dialog.
 edit_topsites_button_text=កែសម្រួល
-edit_topsites_showmore_button=បង្ហាញច្រើនទៀត
-edit_topsites_showless_button=បង្ហាញតិចជាង​នេះ
-edit_topsites_done_button=ធ្វើរួច
-edit_topsites_pin_button=ខ្ទាស់សាយនេះ
-edit_topsites_unpin_button=ដកខ្ទាស់សាយនេះ
 edit_topsites_edit_button=កែសម្រួលសាយនេះ
-edit_topsites_dismiss_button=ច្រានចោលសាយនេះ
-edit_topsites_add_button=បន្ថែម
 
 # LOCALIZATION NOTE (topsites_form_*): This is shown in the New/Edit Topsite modal.
 topsites_form_add_header=សាយកំពូលថ្មី
 topsites_form_edit_header=កែសម្រួលសាយកំពូល
 topsites_form_title_placeholder=បញ្ចូលចំណងជើង
 topsites_form_url_placeholder=វាយបញ្ចូល ឬបិទភ្ជាប់ URL
+# LOCALIZATION NOTE (topsites_form_*_button): These are verbs/actions.
 topsites_form_add_button=បន្ថែម
 topsites_form_save_button=រក្សាទុក
 topsites_form_cancel_button=បោះបង់
 topsites_form_url_validation=ត្រូវការ URL ដែលត្រឹមត្រូវ
 
 # LOCALIZATION NOTE (pocket_read_more): This is shown at the bottom of the
 # trending stories section and precedes a list of links to popular topics.
 pocket_read_more=ប្រធានបទកំពុងពេញនិយម៖
 # LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
 # end of the list of popular topic links.
 pocket_read_even_more=មើលរឿងរ៉ាវច្រើនទៀត
-# LOCALIZATION NOTE (pocket_feedback_header): This is shown as an introduction
-# to Pocket as part of the feedback form.
-pocket_feedback_header=បណ្តាញល្អបំផុត ដែលបានវាយតម្លៃដោយមនុស្សជាង 25 លាននាក់។
-# LOCALIZATION NOTE (pocket_description): This is shown in the settings pane and
-# below (pocket_feedback_header) to provide more information about Pocket.
 
+highlights_empty_state=ចាប់ផ្តើមការរុករក ហើយយើងនឹងបង្ហាញអត្ថបទ វីដេអូ និងទំព័រដ៏អស្ចារ្យផ្សេងទៀតដែលអ្នកបានមើល ឬបានចំណាំនៅទីនេះ។
 # LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,
 # in the space that would have shown a few stories, this is shown instead.
 # {provider} is replaced by the name of the content provider for this section.
 
 # LOCALIZATION NOTE (manual_migration_explanation2): This message is shown to encourage users to
 # import their browser profile from another browser they might be using.
 manual_migration_explanation2=សាកល្បងប្រើ Firefox ជាមួយចំណាំ ប្រវត្តិ និងពាក្យសម្ងាត់ពីកម្មវិធីរុករកផ្សេងទៀត។
 # LOCALIZATION NOTE (manual_migration_cancel_button): This message is shown on a button that cancels the
 # process of importing another browser’s profile into Firefox.
 manual_migration_cancel_button=ទេ អរគុណ
 # LOCALIZATION NOTE (manual_migration_import_button): This message is shown on a button that starts the process
 # of importing another browser’s profile profile into Firefox.
 manual_migration_import_button=នាំចូលឥឡូវនេះ
+
+# LOCALIZATION NOTE (error_fallback_default_*): This message and suggested
+# action link are shown in each section of UI that fails to render
+
+# LOCALIZATION NOTE (section_menu_action_*).  These strings are displayed in the section
+# context menu and are meant as a call to action for the given section.
+
+# LOCALIZATION NOTE (firstrun_*). These strings are displayed only once, on the
+# firstrun of the browser, they give an introduction to Firefox and Sync.
+
+# LOCALIZATION NOTE (firstrun_form_header and firstrun_form_sub_header):
+# firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
+# firstrun_form_header is displayed more boldly as the call to action.
+
+
+# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
+# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
+
--- a/browser/extensions/activity-stream/locales/lo/strings.properties
+++ b/browser/extensions/activity-stream/locales/lo/strings.properties
@@ -4,19 +4,21 @@ header_top_sites=ເວັບໄຊຕ໌ຍອດນິຍົມ
 header_highlights=ລາຍການເດັ່ນ
 # LOCALIZATION NOTE(header_recommended_by): This is followed by the name
 # of the corresponding content provider.
 header_recommended_by=ແນະນຳໂດຍ {provider}
 
 # LOCALIZATION NOTE(context_menu_button_sr): This is for screen readers when
 # the context menu button is focused/active. Title is the label or hostname of
 # the site.
+context_menu_button_sr=ເປີດເມນູບໍລິບົດສຳລັບ {title}
 
 # LOCALIZATION NOTE(section_context_menu_button_sr): This is for screen readers when
 # the section edit context menu button is focused/active.
+section_context_menu_button_sr=ເປີດເມນູບໍລິບົດສ່ວນ
 
 # LOCALIZATION NOTE (type_label_*): These labels are associated to pages to give
 # context on how the element is related to the user, e.g. type indicates that
 # the page is bookmarked, or is currently open on another device
 type_label_visited=ເຂົ້າໄປເບິ່ງມາແລ້ວ
 type_label_bookmarked=ບຸກມາກໄວ້ແລ້ວ
 type_label_recommended=ກຳລັງນິຍົມ
 type_label_pocket=ບັນທຶກລົງໃນ Pocket ແລ້ວ
@@ -33,17 +35,20 @@ menu_action_open_private_window=ເປີດໃນຫນ້າຕ່າງສ່ວນຕົວໃຫມ່
 menu_action_dismiss=ຍົກເລີກ
 menu_action_delete=ລຶບອອກຈາກປະຫວັດການນຳໃຊ້
 menu_action_pin=ປັກໝຸດ
 menu_action_unpin=ຖອນປັກໝຸດ
 confirm_history_delete_p1=ທ່ານແນ່ໃຈຫຼືບໍ່ວ່າຕ້ອງການລຶບທຸກ instance ຂອງຫນ້ານີ້ອອກຈາກປະຫວັດການໃຊ້ງານຂອງທ່ານ?
 # LOCALIZATION NOTE (confirm_history_delete_notice_p2): this string is displayed in
 # the same dialog as confirm_history_delete_p1. "This action" refers to deleting a
 # page from history.
+confirm_history_delete_notice_p2=ການກະທຳນີ້ບໍ່ສາມາດຍົກເລີກໄດ້.
 menu_action_save_to_pocket=ບັນທືກໄປທີ່ Pocket
+menu_action_delete_pocket=ລຶບອອກຈາກ Pocket
+menu_action_archive_pocket=ເກັບຖາວອນໃນ Pocket
 
 # LOCALIZATION NOTE (menu_action_show_file_*): These are platform specific strings
 # found in the context menu of an item that has been downloaded. The intention behind
 # "this action" is that it will show where the downloaded file exists on the file system
 # for each operating system.
 menu_action_show_file_mac_os=ສະແດງໃນ Finder
 menu_action_show_file_windows=ເປີດໂຟນເດີທີ່ບັນຈຸ
 menu_action_show_file_linux=ເປີດໂຟນເດີທີ່ບັນຈຸ
@@ -68,98 +73,129 @@ search_header=ຊອກຫາ {search_engine_name}
 
 # LOCALIZATION NOTE (search_web_placeholder): This is shown in the searchbox when
 # the user hasn't typed anything yet.
 search_web_placeholder=ຊອກຫາເວັບ
 
 # LOCALIZATION NOTE (section_disclaimer_topstories): This is shown below
 # the topstories section title to provide additional information about
 # how the stories are selected.
+section_disclaimer_topstories=ເລື່ອງລາວທີ່ຫນ້າສົນໃຈທີ່ສຸດເທິງເວັບ ເຊິ່ງເລືອກຕາມສິ່ງທີ່ທ່ານອ່ານ. ຈາກ Pocket ເຊິ່ງຂະນະນີ້ເປັນສ່ວນຫນຶ່ງຂອງ Mozilla.
 section_disclaimer_topstories_linktext=ສຶກສາວິທີການເຮັດວຽກຂອງມັນ.
 # LOCALIZATION NOTE (section_disclaimer_topstories_buttontext): The text of
 # the button used to acknowledge, and hide this disclaimer in the future.
 section_disclaimer_topstories_buttontext=ຕົກລົງ, ເຂົ້າໃຈແລ້ວ
 
 # LOCALIZATION NOTE (prefs_*, settings_*): These are shown in about:preferences
 # for a "Firefox Home" section. "Firefox" should be treated as a brand and kept
 # in English, while "Home" should be localized matching the about:preferences
 # sidebar mozilla-central string for the panel that has preferences related to
 # what is shown for the homepage, new windows, and new tabs.
 prefs_home_header=ເນື້ອໃນຫນ້າທຳອິດຂອງ Firefox
-prefs_restore_defaults_button=ກູ້ຄືນຄ່າພື້ນຖານ
+prefs_home_description=ເລືອກເນື້ອຫາທີ່ທ່ານຕ້ອງການສະແດງໃນຫນ້າຈໍຫນ້າຫລັກ Firefox ຂອງທ່ານ.
 # LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
 # plural forms used in a drop down of multiple row options (1 row, 2 rows).
 # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
+prefs_section_rows_option={num} ແຖວ
 prefs_search_header=ຊອກຫາເວັບ
+prefs_topsites_description=ເວັບໄຊທ໌ທີ່ທ່ານເຂົ້າເບິ່ງຫລາຍທີ່ສຸດ
+prefs_topstories_description2=ເນື້ອຫາທີ່ຍອດຢ້ຽມຈາກເວັບຕ່າງໆ, ປັບແຕ່ງໃຫ້ເປັນສ່ວນບຸກຄົນເພື່ອທ່ານ
+prefs_topstories_options_sponsored_label=ເລື່ອງລາວທີ່ໄດ້ຮັບການສະຫນັບສະຫນູນ
 prefs_topstories_sponsored_learn_more=ສຶກສາເພີ່ມເຕີມ
+prefs_highlights_description=ການຄັດເລືອກເວັບໄຊທ໌ທີ່ທ່ານໄດ້ບັນທຶກໄວ້ຫລືເຂົ້າໄປເບິ່ງມາແລ້ວ
 prefs_highlights_options_visited_label=ຫນ້າທີ່ເຂົ້າໄປເບິ່ງແລ້ວ
+prefs_highlights_options_download_label=ການດາວໂຫລດລ່າສຸດ
 prefs_highlights_options_pocket_label=ຫນ້າທີ່ບັນທຶກໄວ້ໃນ Pocket
+prefs_snippets_description=ຂໍ້ມູນອັບເດດຈາກ Mozilla ແລະ Firefox
 settings_pane_button_label=ປັບແຕ່ງຫນ້າແທັບໃຫມ່ຂອງທ່ານ
-settings_pane_header=ການຕັ້ງຄ່າແທັບໃຫມ່
-settings_pane_body2=ເລືອກສິ່ງທີ່ທ່ານຕ້ອງການເຫັນໃນຫນ້ານີ້.
-settings_pane_search_header=ຊອກຫາ
-settings_pane_search_body=ຊອກຫາເວັບຈາກແທັບໃຫມ່ຂອງທ່ານ.
 settings_pane_topsites_header=ເວັບໄຊທ໌ຍອດນິຍົມ
-settings_pane_topsites_body=ເຂົ້າເວັບໄຊທ໌ທີ່ທ່ານໄດ້ເຂົ້າໄປຫລາຍທີ່ສຸດ.
-settings_pane_topsites_options_showmore=ສະແດງເປັນສອງແຖວ
 settings_pane_highlights_header=ຈຸດເດັ່ນ
 settings_pane_highlights_options_bookmarks=ບຸກມາກ
-settings_pane_highlights_options_visited=ໄຊທ໌ທີ່ເຂົ້າໄປເບິ່ງແລ້ວ
 # LOCALIZATION NOTE(settings_pane_snippets_header): For the "Snippets" feature
 # traditionally on about:home. Alternative translation options: "Small Note" or
 # something that expresses the idea of "a small message, shortened from
 # something else, and non-essential but also not entirely trivial and useless."
 settings_pane_snippets_header=ສ່ວນຍ່ອຍ
-settings_pane_done_button=ສຳເລັດ
-settings_pane_topstories_options_sponsored=ສະແດງບົດເລື່ອງທີ່ໄດ້ຮັບການສະຫນັບສະຫນູນ
 
 # LOCALIZATION NOTE (edit_topsites_*): This is shown in the Edit Top Sites modal
 # dialog.
 edit_topsites_button_text=ແກ້ໄຂ
 edit_topsites_edit_button=ແກ້ໄຂເວັບໄຊທ໌ນີ້
 
 # LOCALIZATION NOTE (topsites_form_*): This is shown in the New/Edit Topsite modal.
 topsites_form_add_header=ເວັບໄຊທ໌ຍອດນິຍົມໃຫມ່
 topsites_form_edit_header=ແກ້ໄຂເວັບໄຊທ໌ຍອດນິຍົມ
 topsites_form_title_label=ຊື່ເລື່ອງ
 topsites_form_title_placeholder=ປ້ອນຊື່ເລື່ອງ
 topsites_form_url_label=URL
+topsites_form_image_url_label=URL ຮູບພາບທີ່ກຳນົດເອງ
 topsites_form_url_placeholder=ພິມຫລືວາງ URL
+topsites_form_use_image_link=ໃຊ້ຮູບພາບທີ່ກຳນົດເອງ…
 # LOCALIZATION NOTE (topsites_form_*_button): These are verbs/actions.
 topsites_form_preview_button=ສະແດງຕົວຢ່າງ
 topsites_form_add_button=ເພີ່ມ
 topsites_form_save_button=ບັນທຶກ
 topsites_form_cancel_button=ຍົກເລີກ
 topsites_form_url_validation=ຕ້ອງການ URL ທີ່ຖືກຕ້ອງ
+topsites_form_image_validation=ການໂຫລດຮູບພາບລົ້ມເຫລວ. ລອງໃຊ້ URL ອື່ນ.
 
 # LOCALIZATION NOTE (pocket_read_more): This is shown at the bottom of the
 # trending stories section and precedes a list of links to popular topics.
 pocket_read_more=ຫົວຂໍ້ຍອດນິຍົມ:
 # LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
 # end of the list of popular topic links.
 pocket_read_even_more=ເບິ່ງບົດເລື່ອງເພີ່ມເຕີມ
-# LOCALIZATION NOTE (pocket_description): This is shown in the settings pane
-# to provide more information about Pocket.
-pocket_description=ຄົ້ນພົບເນື້ອຫາຄຸນນະພາບສູງທີ່ທ່ານອາດຈະພາດໄປ, ດ້ວຍຄວາມຊ່ວຍເຫຼືອຈາກ Pocket, ເຊີ່ງຂະນະນີ້ເປັນສ່ວນໜື່ງຂອງ Mozilla.
 
 highlights_empty_state=ເລີ່ມການທ່ອງເວັບ ແລະ ພວກເຮົາຈະສະແດງເນື້ອຫາ, ວິດີໂອ ແລະ ຫນ້າອື່ນໆບາງສ່ວນທີ່ທ່ານຫາກໍເຂົ້າໄປເບິງມາ ຫລື ຫາກໍໄດ້ບຸກມາກໄວ້ທີ່ນີ້.
 # LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,
 # in the space that would have shown a few stories, this is shown instead.
 # {provider} is replaced by the name of the content provider for this section.
+topstories_empty_state=ທ່ານໄດ້ອ່ານເລື່ອງລາວຄົບທັງຫມົດແລ້ວ. ທ່ານສາມາດກັບມາເບິ່ງເລື່ອງລາວເດັ່ນໄດ້ຈາກ {provider} ໃນພາຍຫລັງ. ອົດໃຈຖ້າບໍ່ໄດ້ແມ່ນບໍ່? ເລືອກຫົວຂໍ້ຍອດນິຍົມເພື່ອຄົ້ນຫາເລື່ອງລາວທີ່ຍອດຢ້ຽມຈາກເວັບຕ່າງໆ.
 
 # LOCALIZATION NOTE (manual_migration_explanation2): This message is shown to encourage users to
 # import their browser profile from another browser they might be using.
+manual_migration_explanation2=ລອງໃຊ້ Firefox ດ້ວຍບຸກມາກ, ປະຫວັດການໃຊ້ງານ ແລະລະຫັດຜ່ານຈາກບຣາວເຊີອື່ນ.
 # LOCALIZATION NOTE (manual_migration_cancel_button): This message is shown on a button that cancels the
 # process of importing another browser’s profile into Firefox.
 manual_migration_cancel_button=ບໍ່, ຂອບໃຈ
 # LOCALIZATION NOTE (manual_migration_import_button): This message is shown on a button that starts the process
 # of importing another browser’s profile profile into Firefox.
 manual_migration_import_button=ນຳເຂົ້າຕອນນີ້
 
 # LOCALIZATION NOTE (error_fallback_default_*): This message and suggested
 # action link are shown in each section of UI that fails to render
+error_fallback_default_info=ໂອ້ຍ, ມີບາງສິ່ງບາງຢ່າງຜິດພາດໃນການໂຫລດເນື້ອຫານີ້.
+error_fallback_default_refresh_suggestion=ຣີເຟຣຊຫນ້າເພື່ອລອງອີກຄັ້ງ.
 
 # LOCALIZATION NOTE (section_menu_action_*).  These strings are displayed in the section
 # context menu and are meant as a call to action for the given section.
+section_menu_action_remove_section=ລຶບສ່ວນ
+section_menu_action_collapse_section=ຍຸບສ່ວນ
+section_menu_action_expand_section=ຂະຫຍາຍສ່ວນ
+section_menu_action_manage_section=ຈັດການສ່ວນ
+section_menu_action_manage_webext=ຈັດການສ່ວນເສີມ
 section_menu_action_add_topsite=ເພີ່ມເວັບໄຊທ໌ຍອດນິຍົມ
 section_menu_action_move_up=ຍ້າຍຂື້ນ
 section_menu_action_move_down=ຍ້າຍລົງ
 section_menu_action_privacy_notice=ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ
+
+# LOCALIZATION NOTE (firstrun_*). These strings are displayed only once, on the
+# firstrun of the browser, they give an introduction to Firefox and Sync.
+firstrun_title=ເອົາ Firefox ໄປກັບທ່ານ
+firstrun_content=ຮັບບຸກມາກ, ປະຫວັດການໃຊ້ງານ, ລະຫັດຜ່ານ ແລະການຕັ້ງຄ່າອື່ນໆໃນທຸກໆອຸປະກອນຂອງທ່ານ.
+firstrun_learn_more_link=ຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບບັນຊີ Firefox
+
+# LOCALIZATION NOTE (firstrun_form_header and firstrun_form_sub_header):
+# firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
+# firstrun_form_header is displayed more boldly as the call to action.
+firstrun_form_header=ປ້ອນທີ່ຢູ່ອີເມລຂອງທ່ານ
+firstrun_form_sub_header=ເພື່ອດຳເນີນການຕໍ່ໄປຍັງ Firefox Sync
+
+firstrun_email_input_placeholder=ອີເມລ
+
+# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
+# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
+firstrun_extra_legal_links=ໂດຍການດຳເນີນການຕໍ່, ຖືວ່າທ່ານຍອມຮັບ{terms}ແລະ{privacy}.
+firstrun_terms_of_service=ເງື່ອນໄຂການໃຫ້ບໍລິການ
+firstrun_privacy_notice=ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ
+
+firstrun_continue_to_login=ສືບຕໍ່
+firstrun_skip_login=ຂ້າມຂັ້ນຕອນນີ້
--- a/browser/extensions/activity-stream/locales/mix/strings.properties
+++ b/browser/extensions/activity-stream/locales/mix/strings.properties
@@ -65,16 +65,17 @@ prefs_topstories_sponsored_learn_more=Sk
 # something that expresses the idea of "a small message, shortened from
 # something else, and non-essential but also not entirely trivial and useless."
 
 # LOCALIZATION NOTE (edit_topsites_*): This is shown in the Edit Top Sites modal
 # dialog.
 edit_topsites_button_text=Sama
 
 # LOCALIZATION NOTE (topsites_form_*): This is shown in the New/Edit Topsite modal.
+topsites_form_url_label=URL
 # LOCALIZATION NOTE (topsites_form_*_button): These are verbs/actions.
 topsites_form_add_button=Chikaa
 topsites_form_save_button=Chika vaà
 topsites_form_cancel_button=Kunchatu
 
 # LOCALIZATION NOTE (pocket_read_more): This is shown at the bottom of the
 # trending stories section and precedes a list of links to popular topics.
 # LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
--- a/browser/extensions/activity-stream/locales/ms/strings.properties
+++ b/browser/extensions/activity-stream/locales/ms/strings.properties
@@ -89,17 +89,17 @@ section_disclaimer_topstories_buttontext
 # in English, while "Home" should be localized matching the about:preferences
 # sidebar mozilla-central string for the panel that has preferences related to
 # what is shown for the homepage, new windows, and new tabs.
 prefs_home_header=Kandungan Halaman Utama Firefox
 prefs_home_description=Pilih kandungan yang mahu dalam skrin Halaman Utama Firefox.
 # LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
 # plural forms used in a drop down of multiple row options (1 row, 2 rows).
 # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
-prefs_section_rows_option={num} rows
+prefs_section_rows_option={num} baris
 prefs_search_header=Carian Web
 prefs_topsites_description=Laman yang anda kerap lawati
 prefs_topstories_description2=Kandungan hebat dalam seluruh web, khas untuk anda
 prefs_topstories_options_sponsored_label=Kisah Tajaan
 prefs_topstories_sponsored_learn_more=Ketahui selanjutnya
 prefs_highlights_description=Pilihan laman yang anda sudah simpan atau lawati
 prefs_highlights_options_visited_label=Halaman Dilawati
 prefs_highlights_options_download_label=Muat Turun Terbaru
--- a/browser/extensions/activity-stream/locales/nl/strings.properties
+++ b/browser/extensions/activity-stream/locales/nl/strings.properties
@@ -186,16 +186,18 @@ firstrun_learn_more_link=Meer info over 
 # LOCALIZATION NOTE (firstrun_form_header and firstrun_form_sub_header):
 # firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
 # firstrun_form_header is displayed more boldly as the call to action.
 firstrun_form_header=Voer uw e-mailadres in
 firstrun_form_sub_header=om door te gaan naar Firefox Sync
 
 firstrun_email_input_placeholder=E-mailadres
 
+firstrun_invalid_input=Geldig e-mailadres vereist
+
 # LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
 # {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
 firstrun_extra_legal_links=Door verder te gaan, gaat u akkoord met de {terms} en {privacy}.
 firstrun_terms_of_service=Servicevoorwaarden
 firstrun_privacy_notice=Privacyverklaring
 
 firstrun_continue_to_login=Doorgaan
 firstrun_skip_login=Deze stap overslaan
--- a/browser/extensions/activity-stream/locales/ru/strings.properties
+++ b/browser/extensions/activity-stream/locales/ru/strings.properties
@@ -84,18 +84,18 @@ section_disclaimer_topstories_linktext=Узнайте, как это работает.
 # the button used to acknowledge, and hide this disclaimer in the future.
 section_disclaimer_topstories_buttontext=Ок, понятно
 
 # LOCALIZATION NOTE (prefs_*, settings_*): These are shown in about:preferences
 # for a "Firefox Home" section. "Firefox" should be treated as a brand and kept
 # in English, while "Home" should be localized matching the about:preferences
 # sidebar mozilla-central string for the panel that has preferences related to
 # what is shown for the homepage, new windows, and new tabs.
-prefs_home_header=Домашний экран Firefox
-prefs_home_description=Выберите, какое содержимое вы хотите видеть на домашнем экране Firefox.
+prefs_home_header=Домашняя страница Firefox
+prefs_home_description=Выберите, какое содержимое вы хотите видеть на домашней странице Firefox.
 # LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
 # plural forms used in a drop down of multiple row options (1 row, 2 rows).
 # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
 prefs_section_rows_option={num} столбец;{num} столбца;{num} столбцов
 prefs_search_header=Поиск в Интернете
 prefs_topsites_description=Сайты, которые вы чаще всего посещаете
 prefs_topstories_description2=Отличный контент со всего Интернета, отобранный по вашему вкусу
 prefs_topstories_options_sponsored_label=Статьи спонсоров
--- a/browser/extensions/activity-stream/locales/ur/strings.properties
+++ b/browser/extensions/activity-stream/locales/ur/strings.properties
@@ -15,16 +15,17 @@ header_recommended_by={provider} کی جانب سے تجویز کردہ
 
 # LOCALIZATION NOTE (type_label_*): These labels are associated to pages to give
 # context on how the element is related to the user, e.g. type indicates that
 # the page is bookmarked, or is currently open on another device
 type_label_visited=دورہ شدہ
 type_label_bookmarked=نشان شدہ
 type_label_recommended=رجحان سازی
 type_label_pocket=Pocket میں محفوظ شدہ
+type_label_downloaded=ڈاؤن لوڈ شدہ
 
 # LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
 # menu and are meant as a call to action for a given page.
 # LOCALIZATION NOTE (menu_action_bookmark): Bookmark is a verb, as in "Add to
 # bookmarks"
 menu_action_bookmark=نشانی
 menu_action_remove_bookmark=نشانى ہٹائيں
 menu_action_open_new_window=نئے دریچے میں کھولیں
@@ -36,16 +37,29 @@ menu_action_unpin=ان پن
 confirm_history_delete_p1=کیا آپ کو یقین ہے کہ آپ اس صفحہ کا ہر نمونہ اپنے سابقات سے حذف کرنا چاہتے ہیں؟
 # LOCALIZATION NOTE (confirm_history_delete_notice_p2): this string is displayed in
 # the same dialog as confirm_history_delete_p1. "This action" refers to deleting a
 # page from history.
 confirm_history_delete_notice_p2=یہ عمل کلعدم نہیں ہو سکتا۔
 menu_action_save_to_pocket=Pocket میں محفوظ کریں
 menu_action_delete_pocket=Pocket سے جزف کریں
 
+# LOCALIZATION NOTE (menu_action_show_file_*): These are platform specific strings
+# found in the context menu of an item that has been downloaded. The intention behind
+# "this action" is that it will show where the downloaded file exists on the file system
+# for each operating system.
+menu_action_show_file_default=مسل دکھائیں
+menu_action_open_file=مسل کھولیں
+
+# LOCALIZATION NOTE (menu_action_copy_download_link, menu_action_go_to_download_page):
+# "Download" here, in both cases, is not a verb, it is a noun. As in, "Copy the
+# link that belongs to this downloaded item"
+menu_action_copy_download_link=ڈاؤن لوڈ ربط نقل کریں
+menu_action_remove_download=سابقات سے ہٹائیں
+
 # LOCALIZATION NOTE (search_button): This is screenreader only text for the
 # search button.
 search_button=تلاش
 
 # LOCALIZATION NOTE (search_header): Displayed at the top of the panel
 # showing search suggestions. {search_engine_name} is replaced with the name of
 # the current default search engine. e.g. 'Google Search'
 search_header={search_engine_name} پر تلاش کریں
@@ -63,43 +77,35 @@ section_disclaimer_topstories_linktext=سیکھیں کہ یہ کیسے کام کرتا ہے۔
 section_disclaimer_topstories_buttontext=ٹھیک ہے مجھے سمجھ آگئی ہے
 
 # LOCALIZATION NOTE (prefs_*, settings_*): These are shown in about:preferences
 # for a "Firefox Home" section. "Firefox" should be treated as a brand and kept
 # in English, while "Home" should be localized matching the about:preferences
 # sidebar mozilla-central string for the panel that has preferences related to
 # what is shown for the homepage, new windows, and new tabs.
 prefs_home_header=Firefox ابتائی مواد
-prefs_restore_defaults_button=طےشدہ بحال کریں
 # LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
 # plural forms used in a drop down of multiple row options (1 row, 2 rows).
 # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
+prefs_search_header=وءب تلاش
 prefs_topsites_description=سائٹس جو آُپ سب سے زیادہ ملاحظہ کرتے ہیں
-prefs_topstories_description=اعلی میعار کا مواد جو شاید آپ بصورت دیگر کھو دیں
-# LOCALIZATION NOTE (prefs_topstories_show_sponsored_label): {provider} is
-# replaced by the name of the content provider for this section, e.g., "Pocket"
+prefs_topstories_options_sponsored_label=سرپرست شدہ کہاناں
 prefs_topstories_sponsored_learn_more=مزید سیکھیں
+prefs_highlights_options_visited_label=دورہ کردہ صفحہات
+prefs_highlights_options_pocket_label=صفحات Pocket میں محفوظ کر دیئے گئے ہیں
 prefs_snippets_description=Mozilla اورFirefox کی جانب سے تازہ کاریاں
 settings_pane_button_label=اپنے نئے ٹیب کہ صفحہ کی تخصیص کریں
-settings_pane_header=نئے َٹیب کی ترجیحات
-settings_pane_body2=انتخاب کریں آپ اس صفحہ پر کیا دیکھنا چاہیں گے۔
-settings_pane_search_header=تلاش
-settings_pane_search_body=اپنے نئے ٹیب سے وہب پر تلاش کریں۔
 settings_pane_topsites_header=بہترین سائٹیں
-settings_pane_topsites_body=اپنی سب سے زیادہ دورہ کردہ ویب سائٹ تک رسائی حاصل کریں۔
-settings_pane_topsites_options_showmore=دو قطاریں دکھائیں
 settings_pane_highlights_header=شہ سرخياں
 settings_pane_highlights_options_bookmarks=نشانیاں
-settings_pane_highlights_options_visited=ملاحظہ کیے گئے سائٹس
 # LOCALIZATION NOTE(settings_pane_snippets_header): For the "Snippets" feature
 # traditionally on about:home. Alternative translation options: "Small Note" or
 # something that expresses the idea of "a small message, shortened from
 # something else, and non-essential but also not entirely trivial and useless."
 settings_pane_snippets_header=سنپیٹ
-settings_pane_done_button=ہوگیا
 
 # LOCALIZATION NOTE (edit_topsites_*): This is shown in the Edit Top Sites modal
 # dialog.
 edit_topsites_button_text=تدوین
 edit_topsites_edit_button=اس سائٹ کی تدوین کریں
 
 # LOCALIZATION NOTE (topsites_form_*): This is shown in the New/Edit Topsite modal.
 topsites_form_add_header=نئی بہترین سائٹ
@@ -117,18 +123,16 @@ topsites_form_url_validation=جائز URL درکار ہے
 topsites_form_image_validation=نقش لوڈ ہونے میں ناکام رہا۔ براہ مہربانی ایک مختلف URL کو آزمائیں۔
 
 # LOCALIZATION NOTE (pocket_read_more): This is shown at the bottom of the
 # trending stories section and precedes a list of links to popular topics.
 pocket_read_more=مشہور مضامین:
 # LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
 # end of the list of popular topic links.
 pocket_read_even_more=مزید کہانیاں دیکھیں
-# LOCALIZATION NOTE (pocket_description): This is shown in the settings pane
-# to provide more information about Pocket.
 
 # LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,
 # in the space that would have shown a few stories, this is shown instead.
 # {provider} is replaced by the name of the content provider for this section.
 
 # LOCALIZATION NOTE (manual_migration_explanation2): This message is shown to encourage users to
 # import their browser profile from another browser they might be using.
 # LOCALIZATION NOTE (manual_migration_cancel_button): This message is shown on a button that cancels the
@@ -138,11 +142,26 @@ manual_migration_cancel_button=نہیں شکریہ
 # of importing another browser’s profile profile into Firefox.
 manual_migration_import_button=ابھی درآمد کری
 
 # LOCALIZATION NOTE (error_fallback_default_*): This message and suggested
 # action link are shown in each section of UI that fails to render
 
 # LOCALIZATION NOTE (section_menu_action_*).  These strings are displayed in the section
 # context menu and are meant as a call to action for the given section.
+section_menu_action_manage_webext=توسیع بندرست کریں
 section_menu_action_move_up=اوپر کریں
 section_menu_action_move_down=نیچے کریں
 section_menu_action_privacy_notice=رازداری کا نوٹس
+
+# LOCALIZATION NOTE (firstrun_*). These strings are displayed only once, on the
+# firstrun of the browser, they give an introduction to Firefox and Sync.
+
+# LOCALIZATION NOTE (firstrun_form_header and firstrun_form_sub_header):
+# firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
+# firstrun_form_header is displayed more boldly as the call to action.
+
+firstrun_email_input_placeholder=ای میل
+
+# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
+# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
+
+firstrun_continue_to_login=جاری رکھیں
--- a/browser/extensions/activity-stream/locales/vi/strings.properties
+++ b/browser/extensions/activity-stream/locales/vi/strings.properties
@@ -26,17 +26,17 @@ type_label_downloaded=Đã tải về
 # menu and are meant as a call to action for a given page.
 # LOCALIZATION NOTE (menu_action_bookmark): Bookmark is a verb, as in "Add to
 # bookmarks"
 menu_action_bookmark=Đánh dấu
 menu_action_remove_bookmark=Xóa đánh dấu
 menu_action_open_new_window=Mở trong Cửa Sổ Mới
 menu_action_open_private_window=Mở trong cửa sổ riêng tư mới
 menu_action_dismiss=Bỏ qua
-menu_action_delete=Xóa từ lịch xử
+menu_action_delete=Xóa khỏi lịch sử
 menu_action_pin=Ghim
 menu_action_unpin=Bỏ ghim
 confirm_history_delete_p1=Bạn có chắc bạn muốn xóa bỏ mọi thứ của trang này từ lịch sử?
 # LOCALIZATION NOTE (confirm_history_delete_notice_p2): this string is displayed in
 # the same dialog as confirm_history_delete_p1. "This action" refers to deleting a
 # page from history.
 confirm_history_delete_notice_p2=Hành động này không thể hoàn tác.
 menu_action_save_to_pocket=Lưu vào Pocket
--- a/browser/extensions/activity-stream/package-lock.json
+++ b/browser/extensions/activity-stream/package-lock.json
@@ -47,16 +47,275 @@
       }
     },
     "@types/node": {
       "version": "9.4.1",
       "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.1.tgz",
       "integrity": "sha512-9ESUxmXt1Isc1xKfDBZ7tpULyTPY5ZCywcfvQTXoLUqP+n4D+MBH+0n75hdzrcmfCc3eWByOi27+GLmMuAvcUA==",
       "dev": true
     },
+    "@webassemblyjs/ast": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.5.13.tgz",
+      "integrity": "sha512-49nwvW/Hx9i+OYHg+mRhKZfAlqThr11Dqz8TsrvqGKMhdI2ijy3KBJOun2Z4770TPjrIJhR6KxChQIDaz8clDA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/helper-module-context": "1.5.13",
+        "@webassemblyjs/helper-wasm-bytecode": "1.5.13",
+        "@webassemblyjs/wast-parser": "1.5.13",
+        "debug": "^3.1.0",
+        "mamacro": "^0.0.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz",
+      "integrity": "sha512-vrvvB18Kh4uyghSKb0NTv+2WZx871WL2NzwMj61jcq2bXkyhRC+8Q0oD7JGVf0+5i/fKQYQSBCNMMsDMRVAMqA==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz",
+      "integrity": "sha512-dBh2CWYqjaDlvMmRP/kudxpdh30uXjIbpkLj9HQe+qtYlwvYjPRjdQXrq1cTAAOUSMTtzqbXIxEdEZmyKfcwsg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz",
+      "integrity": "sha512-v7igWf1mHcpJNbn4m7e77XOAWXCDT76Xe7Is1VQFXc4K5jRcFrl9D0NrqM4XifQ0bXiuTSkTKMYqDxu5MhNljA==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz",
+      "integrity": "sha512-yN6ScQQDFCiAXnVctdVO/J5NQRbwyTbQzsGzEgXsAnrxhjp0xihh+nNHQTMrq5UhOqTb5LykpJAvEv9AT0jnAQ==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.5.13"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz",
+      "integrity": "sha512-hSIKzbXjVMRvy3Jzhgu+vDd/aswJ+UMEnLRCkZDdknZO3Z9e6rp1DAs0tdLItjCFqkz9+0BeOPK/mk3eYvVzZg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz",
+      "integrity": "sha512-zxJXULGPLB7r+k+wIlvGlXpT4CYppRz8fLUM/xobGHc9Z3T6qlmJD9ySJ2jknuktuuiR9AjnNpKYDECyaiX+QQ==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "mamacro": "^0.0.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz",
+      "integrity": "sha512-0n3SoNGLvbJIZPhtMFq0XmmnA/YmQBXaZKQZcW8maGKwLpVcgjNrxpFZHEOLKjXJYVN5Il8vSfG7nRX50Zn+aw==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz",
+      "integrity": "sha512-IJ/goicOZ5TT1axZFSnlAtz4m8KEjYr12BNOANAwGFPKXM4byEDaMNXYowHMG0yKV9a397eU/NlibFaLwr1fbw==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.5.13",
+        "@webassemblyjs/helper-buffer": "1.5.13",
+        "@webassemblyjs/helper-wasm-bytecode": "1.5.13",
+        "@webassemblyjs/wasm-gen": "1.5.13",
+        "debug": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz",
+      "integrity": "sha512-TseswvXEPpG5TCBKoLx9tT7+/GMACjC1ruo09j46ULRZWYm8XHpDWaosOjTnI7kr4SRJFzA6MWoUkAB+YCGKKg==",
+      "dev": true,
+      "requires": {
+        "ieee754": "^1.1.11"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.5.13.tgz",
+      "integrity": "sha512-0NRMxrL+GG3eISGZBmLBLAVjphbN8Si15s7jzThaw1UE9e5BY1oH49/+MA1xBzxpf1OW5sf9OrPDOclk9wj2yg==",
+      "dev": true,
+      "requires": {
+        "long": "4.0.0"
+      },
+      "dependencies": {
+        "long": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+          "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
+          "dev": true
+        }
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.5.13.tgz",
+      "integrity": "sha512-Ve1ilU2N48Ew0lVGB8FqY7V7hXjaC4+PeZM+vDYxEd+R2iQ0q+Wb3Rw8v0Ri0+rxhoz6gVGsnQNb4FjRiEH/Ng==",
+      "dev": true
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz",
+      "integrity": "sha512-X7ZNW4+Hga4f2NmqENnHke2V/mGYK/xnybJSIXImt1ulxbCOEs/A+ZK/Km2jgihjyVxp/0z0hwIcxC6PrkWtgw==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.5.13",
+        "@webassemblyjs/helper-buffer": "1.5.13",
+        "@webassemblyjs/helper-wasm-bytecode": "1.5.13",
+        "@webassemblyjs/helper-wasm-section": "1.5.13",
+        "@webassemblyjs/wasm-gen": "1.5.13",
+        "@webassemblyjs/wasm-opt": "1.5.13",
+        "@webassemblyjs/wasm-parser": "1.5.13",
+        "@webassemblyjs/wast-printer": "1.5.13",
+        "debug": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz",
+      "integrity": "sha512-yfv94Se8R73zmr8GAYzezFHc3lDwE/lBXQddSiIZEKZFuqy7yWtm3KMwA1uGbv5G1WphimJxboXHR80IgX1hQA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.5.13",
+        "@webassemblyjs/helper-wasm-bytecode": "1.5.13",
+        "@webassemblyjs/ieee754": "1.5.13",
+        "@webassemblyjs/leb128": "1.5.13",
+        "@webassemblyjs/utf8": "1.5.13"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz",
+      "integrity": "sha512-IkXSkgzVhQ0QYAdIayuCWMmXSYx0dHGU8Ah/AxJf1gBvstMWVnzJnBwLsXLyD87VSBIcsqkmZ28dVb0mOC3oBg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.5.13",
+        "@webassemblyjs/helper-buffer": "1.5.13",
+        "@webassemblyjs/wasm-gen": "1.5.13",
+        "@webassemblyjs/wasm-parser": "1.5.13",
+        "debug": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz",
+      "integrity": "sha512-XnYoIcu2iqq8/LrtmdnN3T+bRjqYFjRHqWbqK3osD/0r/Fcv4d9ecRzjVtC29ENEuNTK4mQ9yyxCBCbK8S/cpg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.5.13",
+        "@webassemblyjs/helper-api-error": "1.5.13",
+        "@webassemblyjs/helper-wasm-bytecode": "1.5.13",
+        "@webassemblyjs/ieee754": "1.5.13",
+        "@webassemblyjs/leb128": "1.5.13",
+        "@webassemblyjs/utf8": "1.5.13"
+      }
+    },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz",
+      "integrity": "sha512-Lbz65T0LQ1LgzKiUytl34CwuhMNhaCLgrh0JW4rJBN6INnBB8NMwUfQM+FxTnLY9qJ+lHJL/gCM5xYhB9oWi4A==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.5.13",
+        "@webassemblyjs/floating-point-hex-parser": "1.5.13",
+        "@webassemblyjs/helper-api-error": "1.5.13",
+        "@webassemblyjs/helper-code-frame": "1.5.13",
+        "@webassemblyjs/helper-fsm": "1.5.13",
+        "long": "^3.2.0",
+        "mamacro": "^0.0.3"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz",
+      "integrity": "sha512-QcwogrdqcBh8Z+eUF8SG+ag5iwQSXxQJELBEHmLkk790wgQgnIMmntT2sMAMw53GiFNckArf5X0bsCA44j3lWQ==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.5.13",
+        "@webassemblyjs/wast-parser": "1.5.13",
+        "long": "^3.2.0"
+      }
+    },
     "abbrev": {
       "version": "1.0.9",
       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
       "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
       "dev": true
     },
     "accepts": {
       "version": "1.3.5",
@@ -87,47 +346,22 @@
     },
     "acorn": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz",
       "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==",
       "dev": true
     },
     "acorn-dynamic-import": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
-      "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
-      "dev": true,
-      "requires": {
-        "acorn": "4.0.13"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "4.0.13",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
-          "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
-          "dev": true
-        }
-      }
-    },
-    "acorn-jsx": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
-      "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
-      "dev": true,
-      "requires": {
-        "acorn": "3.3.0"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "3.3.0",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
-          "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
-          "dev": true
-        }
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
+      "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
+      "dev": true,
+      "requires": {
+        "acorn": "^5.0.0"
       }
     },
     "addressparser": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz",
       "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=",
       "dev": true,
       "optional": true
@@ -392,19 +626,19 @@
       "dev": true
     },
     "asn1.js": {
       "version": "4.10.1",
       "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
       "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1"
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "assert": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
       "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
       "dev": true,
       "requires": {
@@ -1217,95 +1451,95 @@
       "dev": true
     },
     "browserify-aes": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
       "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
       "dev": true,
       "requires": {
-        "buffer-xor": "1.0.3",
-        "cipher-base": "1.0.4",
-        "create-hash": "1.2.0",
-        "evp_bytestokey": "1.0.3",
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.1"
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.3",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "browserify-cipher": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
       "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
       "dev": true,
       "requires": {
-        "browserify-aes": "1.2.0",
-        "browserify-des": "1.0.1",
-        "evp_bytestokey": "1.0.3"
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
       }
     },
     "browserify-des": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz",
       "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==",
       "dev": true,
       "requires": {
-        "cipher-base": "1.0.4",
-        "des.js": "1.0.0",
-        "inherits": "2.0.3"
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1"
       }
     },
     "browserify-rsa": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
       "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "randombytes": "2.0.6"
+        "bn.js": "^4.1.0",
+        "randombytes": "^2.0.1"
       }
     },
     "browserify-sign": {
       "version": "4.0.4",
       "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
       "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "browserify-rsa": "4.0.1",
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "elliptic": "6.4.0",
-        "inherits": "2.0.3",
-        "parse-asn1": "5.1.1"
+        "bn.js": "^4.1.1",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.2",
+        "elliptic": "^6.0.0",
+        "inherits": "^2.0.1",
+        "parse-asn1": "^5.0.0"
       }
     },
     "browserify-zlib": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
       "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
       "dev": true,
       "requires": {
-        "pako": "1.0.6"
+        "pako": "~1.0.5"
       }
     },
     "btoa-lite": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz",
       "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=",
       "dev": true
     },
     "buffer": {
       "version": "4.9.1",
       "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
       "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
       "dev": true,
       "requires": {
-        "base64-js": "1.3.0",
-        "ieee754": "1.1.11",
-        "isarray": "1.0.0"
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
       }
     },
     "buffer-from": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
       "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==",
       "dev": true
     },
@@ -1350,16 +1584,45 @@
       "dev": true
     },
     "bytes": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
       "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
       "dev": true
     },
+    "cacache": {
+      "version": "10.0.4",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+      "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.1",
+        "chownr": "^1.0.1",
+        "glob": "^7.1.2",
+        "graceful-fs": "^4.1.11",
+        "lru-cache": "^4.1.1",
+        "mississippi": "^2.0.0",
+        "mkdirp": "^0.5.1",
+        "move-concurrently": "^1.0.1",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^2.6.2",
+        "ssri": "^5.2.4",
+        "unique-filename": "^1.1.0",
+        "y18n": "^4.0.0"
+      },
+      "dependencies": {
+        "y18n": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+          "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+          "dev": true
+        }
+      }
+    },
     "cache-base": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
       "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
       "dev": true,
       "requires": {
         "collection-visit": "1.0.0",
         "component-emitter": "1.2.1",
@@ -1423,16 +1686,17 @@
       "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
       "dev": true
     },
     "center-align": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
       "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
       "dev": true,
+      "optional": true,
       "requires": {
         "align-text": "0.1.4",
         "lazy-cache": "1.0.4"
       }
     },
     "chai": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
@@ -1508,30 +1772,45 @@
         "glob-parent": "2.0.0",
         "inherits": "2.0.3",
         "is-binary-path": "1.0.1",
         "is-glob": "2.0.1",
         "path-is-absolute": "1.0.1",
         "readdirp": "2.1.0"
       }
     },
+    "chownr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+      "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+      "dev": true
+    },
+    "chrome-trace-event": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
+      "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
     "ci-info": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz",
       "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==",
       "dev": true
     },
     "cipher-base": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
       "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.1"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "circular-json": {
       "version": "0.3.3",
       "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
       "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
       "dev": true
     },
@@ -1589,27 +1868,29 @@
       "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
       "dev": true
     },
     "cliui": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
       "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
       "dev": true,
+      "optional": true,
       "requires": {
         "center-align": "0.1.3",
         "right-align": "0.1.3",
         "wordwrap": "0.0.2"
       },
       "dependencies": {
         "wordwrap": {
           "version": "0.0.2",
           "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
           "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
-          "dev": true
+          "dev": true,
+          "optional": true
         }
       }
     },
     "co": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz",
       "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=",
       "dev": true
@@ -1794,16 +2075,30 @@
       "dev": true
     },
     "cookie": {
       "version": "0.3.1",
       "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
       "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
       "dev": true
     },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1",
+        "fs-write-stream-atomic": "^1.0.8",
+        "iferr": "^0.1.5",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.0"
+      }
+    },
     "copy-descriptor": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
       "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
       "dev": true
     },
     "core-js": {
       "version": "1.2.7",
@@ -1836,45 +2131,45 @@
       }
     },
     "create-ecdh": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
       "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "elliptic": "6.4.0"
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.0.0"
       }
     },
     "create-hash": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
       "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
       "dev": true,
       "requires": {
-        "cipher-base": "1.0.4",
-        "inherits": "2.0.3",
-        "md5.js": "1.3.4",
-        "ripemd160": "2.0.2",
-        "sha.js": "2.4.11"
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
       }
     },
     "create-hmac": {
       "version": "1.1.7",
       "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
       "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
       "dev": true,
       "requires": {
-        "cipher-base": "1.0.4",
-        "create-hash": "1.2.0",
-        "inherits": "2.0.3",
-        "ripemd160": "2.0.2",
-        "safe-buffer": "5.1.1",
-        "sha.js": "2.4.11"
+        "cipher-base": "^1.0.3",
+        "create-hash": "^1.1.0",
+        "inherits": "^2.0.1",
+        "ripemd160": "^2.0.0",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
       }
     },
     "cross-spawn": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
       "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
       "dev": true,
       "requires": {
@@ -1893,27 +2188,27 @@
       }
     },
     "crypto-browserify": {
       "version": "3.12.0",
       "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
       "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
       "dev": true,
       "requires": {
-        "browserify-cipher": "1.0.1",
-        "browserify-sign": "4.0.4",
-        "create-ecdh": "4.0.3",
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "diffie-hellman": "5.0.3",
-        "inherits": "2.0.3",
-        "pbkdf2": "3.0.16",
-        "public-encrypt": "4.0.2",
-        "randombytes": "2.0.6",
-        "randomfill": "1.0.4"
+        "browserify-cipher": "^1.0.0",
+        "browserify-sign": "^4.0.0",
+        "create-ecdh": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.0",
+        "diffie-hellman": "^5.0.0",
+        "inherits": "^2.0.1",
+        "pbkdf2": "^3.0.3",
+        "public-encrypt": "^4.0.0",
+        "randombytes": "^2.0.0",
+        "randomfill": "^1.0.3"
       }
     },
     "css-select": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
       "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
       "dev": true,
       "requires": {
@@ -1939,16 +2234,22 @@
       }
     },
     "custom-event": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
       "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
       "dev": true
     },
+    "cyclist": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+      "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+      "dev": true
+    },
     "d": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
       "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
       "dev": true,
       "requires": {
         "es5-ext": "0.10.31"
       }
@@ -2147,18 +2448,18 @@
       "dev": true
     },
     "des.js": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
       "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1"
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "detect-indent": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
       "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
       "dev": true,
       "requires": {
@@ -2178,19 +2479,19 @@
       "dev": true
     },
     "diffie-hellman": {
       "version": "5.0.3",
       "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
       "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "miller-rabin": "4.0.1",
-        "randombytes": "2.0.6"
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
       }
     },
     "discontinuous-range": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
       "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=",
       "dev": true
     },
@@ -2272,16 +2573,28 @@
       "optional": true
     },
     "duplexer": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
       "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
       "dev": true
     },
+    "duplexify": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
+      "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
     "ecc-jsbn": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
       "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
       "dev": true,
       "optional": true,
       "requires": {
         "jsbn": "0.1.1"
@@ -2294,23 +2607,23 @@
       "dev": true
     },
     "elliptic": {
       "version": "6.4.0",
       "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
       "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "brorand": "1.1.0",
-        "hash.js": "1.1.3",
-        "hmac-drbg": "1.0.1",
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1",
-        "minimalistic-crypto-utils": "1.0.1"
+        "bn.js": "^4.4.0",
+        "brorand": "^1.0.1",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.0"
       }
     },
     "emojis-list": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
       "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
       "dev": true
     },
@@ -2323,16 +2636,25 @@
     "encoding": {
       "version": "0.1.12",
       "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
       "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
       "requires": {
         "iconv-lite": "0.4.19"
       }
     },
+    "end-of-stream": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+      "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+      "dev": true,
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
     "engine.io": {
       "version": "3.1.5",
       "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz",
       "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==",
       "dev": true,
       "requires": {
         "accepts": "1.3.5",
         "base64id": "1.0.0",
@@ -2393,25 +2715,24 @@
         "after": "0.8.2",
         "arraybuffer.slice": "0.0.7",
         "base64-arraybuffer": "0.1.5",
         "blob": "0.0.4",
         "has-binary2": "1.0.2"
       }
     },
     "enhanced-resolve": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
-      "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "4.1.11",
-        "memory-fs": "0.4.1",
-        "object-assign": "4.1.1",
-        "tapable": "0.2.8"
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+      "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "memory-fs": "^0.4.0",
+        "tapable": "^1.0.0"
       }
     },
     "ent": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
       "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
       "dev": true
     },
@@ -2751,16 +3072,35 @@
         "espree": {
           "version": "3.5.4",
           "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
           "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
           "dev": true,
           "requires": {
             "acorn": "5.5.3",
             "acorn-jsx": "3.0.1"
+          },
+          "dependencies": {
+            "acorn-jsx": {
+              "version": "3.0.1",
+              "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+              "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+              "dev": true,
+              "requires": {
+                "acorn": "^3.0.4"
+              },
+              "dependencies": {
+                "acorn": {
+                  "version": "3.3.0",
+                  "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+                  "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+                  "dev": true
+                }
+              }
+            }
           }
         },
         "globals": {
           "version": "11.5.0",
           "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz",
           "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==",
           "dev": true
         },
@@ -3447,16 +3787,35 @@
     "espree": {
       "version": "3.5.1",
       "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz",
       "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=",
       "dev": true,
       "requires": {
         "acorn": "5.1.2",
         "acorn-jsx": "3.0.1"
+      },
+      "dependencies": {
+        "acorn-jsx": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+          "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+          "dev": true,
+          "requires": {
+            "acorn": "^3.0.4"
+          },
+          "dependencies": {
+            "acorn": {
+              "version": "3.3.0",
+              "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+              "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+              "dev": true
+            }
+          }
+        }
       }
     },
     "esprima": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
       "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
       "dev": true
     },
@@ -3529,33 +3888,33 @@
       "dev": true
     },
     "evp_bytestokey": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
       "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
       "dev": true,
       "requires": {
-        "md5.js": "1.3.4",
-        "safe-buffer": "5.1.1"
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
       }
     },
     "execa": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
       "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
       "dev": true,
       "requires": {
-        "cross-spawn": "5.1.0",
-        "get-stream": "3.0.0",
-        "is-stream": "1.1.0",
-        "npm-run-path": "2.0.2",
-        "p-finally": "1.0.0",
-        "signal-exit": "3.0.2",
-        "strip-eof": "1.0.0"
+        "cross-spawn": "^5.0.1",
+        "get-stream": "^3.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
       }
     },
     "exit": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
       "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
       "dev": true
     },
@@ -3827,16 +4186,26 @@
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/fluent-react/-/fluent-react-0.7.0.tgz",
       "integrity": "sha512-XgAG06hcVW6oQu3NqLB4KACFBDC9broXG4XDP2xqmj+/DPmZlhHMMD73tFz1mBxCs1pLeojmsYdgyl8l6fF4SA==",
       "requires": {
         "fluent": "0.6.4",
         "prop-types": "15.6.1"
       }
     },
+    "flush-write-stream": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
+      "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.4"
+      }
+    },
     "follow-redirects": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz",
       "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==",
       "dev": true,
       "requires": {
         "debug": "3.1.0"
       },
@@ -3900,16 +4269,26 @@
       }
     },
     "from": {
       "version": "0.1.7",
       "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
       "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
       "dev": true
     },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
     "front-matter": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-2.1.2.tgz",
       "integrity": "sha1-91mDufL0E75ljJPf172M5AePXNs=",
       "dev": true,
       "requires": {
         "js-yaml": "3.10.0"
       }
@@ -3931,16 +4310,28 @@
           "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
           "dev": true,
           "requires": {
             "graceful-fs": "4.1.11"
           }
         }
       }
     },
+    "fs-write-stream-atomic": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
+      }
+    },
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
       "dev": true
     },
     "fsevents": {
       "version": "1.2.4",
@@ -4714,16 +5105,22 @@
       "version": "0.0.12",
       "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
       "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
       "dev": true,
       "requires": {
         "find-index": "0.1.1"
       }
     },
+    "global-modules-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.1.0.tgz",
+      "integrity": "sha512-3DrmGj2TP+96cABk9TfMp6f3knH/Y46dqvWznTU3Tf6/bDGLDAn15tFluQ7BcloykOcdY16U0WGq0BQblYOxJQ==",
+      "dev": true
+    },
     "globals": {
       "version": "9.18.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
       "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
       "dev": true
     },
     "globby": {
       "version": "5.0.0",
@@ -4960,28 +5357,28 @@
       }
     },
     "hash-base": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
       "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.1"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "hash.js": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
-      "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
-      "dev": true,
-      "requires": {
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1"
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.4.tgz",
+      "integrity": "sha512-A6RlQvvZEtFS5fLU43IDu0QUmBy+fDO9VMdTXvufKwIkt/rFfvICAViCax5fbDO4zdNzaC3/27ZhKUok5bAJyw==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "hawk": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
       "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
       "dev": true,
       "requires": {
@@ -5009,19 +5406,19 @@
       }
     },
     "hmac-drbg": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
       "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
       "dev": true,
       "requires": {
-        "hash.js": "1.1.3",
-        "minimalistic-assert": "1.0.1",
-        "minimalistic-crypto-utils": "1.0.1"
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
       }
     },
     "hoek": {
       "version": "2.16.3",
       "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
       "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
       "dev": true
     },
@@ -5187,27 +5584,43 @@
       }
     },
     "iconv-lite": {
       "version": "0.4.19",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
       "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
     },
     "ieee754": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz",
-      "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==",
+      "version": "1.1.12",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+      "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+      "dev": true
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
       "dev": true
     },
     "ignore": {
       "version": "3.3.5",
       "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz",
       "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==",
       "dev": true
     },
+    "import-local": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz",
+      "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
+      "dev": true,
+      "requires": {
+        "pkg-dir": "^2.0.0",
+        "resolve-cwd": "^2.0.0"
+      }
+    },
     "imurmurhash": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
       "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
       "dev": true
     },
     "in-publish": {
       "version": "2.0.0",
@@ -5956,22 +6369,16 @@
         "strip-json-comments": {
           "version": "1.0.4",
           "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
           "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
           "dev": true
         }
       }
     },
-    "json-loader": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
-      "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==",
-      "dev": true
-    },
     "json-parse-better-errors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz",
       "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==",
       "dev": true
     },
     "json-schema": {
       "version": "0.2.3",
@@ -6302,17 +6709,18 @@
       "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.3.0.tgz",
       "integrity": "sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ==",
       "dev": true
     },
     "lazy-cache": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
       "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "lcid": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
       "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
       "dev": true,
       "requires": {
         "invert-kv": "1.0.0"
@@ -6423,16 +6831,22 @@
       "dev": true
     },
     "lodash.clonedeep": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
       "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
       "dev": true
     },
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+      "dev": true
+    },
     "lodash.flattendeep": {
       "version": "4.4.0",
       "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
       "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
       "dev": true
     },
     "lodash.get": {
       "version": "4.4.2",
@@ -6604,16 +7018,22 @@
       }
     },
     "lolex": {
       "version": "2.3.2",
       "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.2.tgz",
       "integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==",
       "dev": true
     },
+    "long": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
+      "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=",
+      "dev": true
+    },
     "longest": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
       "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
       "dev": true
     },
     "loose-envify": {
       "version": "1.3.1",
@@ -6720,16 +7140,22 @@
         "pify": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
           "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
           "dev": true
         }
       }
     },
+    "mamacro": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
+      "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==",
+      "dev": true
+    },
     "map-cache": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
       "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
       "dev": true
     },
     "map-obj": {
       "version": "1.0.1",
@@ -6753,33 +7179,33 @@
       }
     },
     "md5.js": {
       "version": "1.3.4",
       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
       "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
       "dev": true,
       "requires": {
-        "hash-base": "3.0.4",
-        "inherits": "2.0.3"
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
       }
     },
     "media-typer": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
       "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
       "dev": true
     },
     "mem": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
       "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
       "dev": true,
       "requires": {
-        "mimic-fn": "1.2.0"
+        "mimic-fn": "^1.0.0"
       }
     },
     "memory-fs": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
       "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
       "dev": true,
       "requires": {
@@ -6847,18 +7273,18 @@
       }
     },
     "miller-rabin": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
       "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "brorand": "1.1.0"
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
       }
     },
     "mime": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
       "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
       "dev": true
     },
@@ -6911,16 +7337,34 @@
       }
     },
     "minimist": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
       "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
       "dev": true
     },
+    "mississippi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
+      "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+      "dev": true,
+      "requires": {
+        "concat-stream": "^1.5.0",
+        "duplexify": "^3.4.2",
+        "end-of-stream": "^1.1.0",
+        "flush-write-stream": "^1.0.0",
+        "from2": "^2.1.0",
+        "parallel-transform": "^1.1.0",
+        "pump": "^2.0.1",
+        "pumpify": "^1.3.3",
+        "stream-each": "^1.1.0",
+        "through2": "^2.0.0"
+      }
+    },
     "mixin-deep": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
       "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
       "dev": true,
       "requires": {
         "for-in": "1.0.2",
         "is-extendable": "1.0.1"
@@ -7011,16 +7455,30 @@
         "object-assign": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
           "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
           "dev": true
         }
       }
     },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1",
+        "copy-concurrently": "^1.0.0",
+        "fs-write-stream-atomic": "^1.0.8",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.3"
+      }
+    },
     "ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
       "dev": true
     },
     "mute-stream": {
       "version": "0.0.7",
@@ -7105,16 +7563,22 @@
     },
     "netmask": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz",
       "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=",
       "dev": true,
       "optional": true
     },
+    "nice-try": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz",
+      "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==",
+      "dev": true
+    },
     "nise": {
       "version": "1.3.3",
       "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.3.tgz",
       "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==",
       "dev": true,
       "requires": {
         "@sinonjs/formatio": "2.0.0",
         "just-extend": "1.1.27",
@@ -7159,38 +7623,38 @@
       }
     },
     "node-libs-browser": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
       "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
       "dev": true,
       "requires": {
-        "assert": "1.4.1",
-        "browserify-zlib": "0.2.0",
-        "buffer": "4.9.1",
-        "console-browserify": "1.1.0",
-        "constants-browserify": "1.0.0",
-        "crypto-browserify": "3.12.0",
-        "domain-browser": "1.2.0",
-        "events": "1.1.1",
-        "https-browserify": "1.0.0",
-        "os-browserify": "0.3.0",
+        "assert": "^1.1.1",
+        "browserify-zlib": "^0.2.0",
+        "buffer": "^4.3.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.1",
+        "events": "^1.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
         "path-browserify": "0.0.0",
-        "process": "0.11.10",
-        "punycode": "1.4.1",
-        "querystring-es3": "0.2.1",
-        "readable-stream": "2.3.3",
-        "stream-browserify": "2.0.1",
-        "stream-http": "2.8.2",
-        "string_decoder": "1.0.3",
-        "timers-browserify": "2.0.10",
+        "process": "^0.11.10",
+        "punycode": "^1.2.4",
+        "querystring-es3": "^0.2.0",
+        "readable-stream": "^2.3.3",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.7.2",
+        "string_decoder": "^1.0.0",
+        "timers-browserify": "^2.0.4",
         "tty-browserify": "0.0.0",
-        "url": "0.11.0",
-        "util": "0.10.3",
+        "url": "^0.11.0",
+        "util": "^0.10.3",
         "vm-browserify": "0.0.4"
       }
     },
     "node-sass": {
       "version": "4.7.2",
       "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz",
       "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==",
       "dev": true,
@@ -7478,17 +7942,17 @@
       }
     },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
       "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
       "dev": true,
       "requires": {
-        "path-key": "2.0.1"
+        "path-key": "^2.0.0"
       }
     },
     "npmlog": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
       "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
       "dev": true,
       "requires": {
@@ -7859,27 +8323,38 @@
       }
     },
     "pako": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
       "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
       "dev": true
     },
+    "parallel-transform": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+      "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+      "dev": true,
+      "requires": {
+        "cyclist": "~0.2.2",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      }
+    },
     "parse-asn1": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
       "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
       "dev": true,
       "requires": {
-        "asn1.js": "4.10.1",
-        "browserify-aes": "1.2.0",
-        "create-hash": "1.2.0",
-        "evp_bytestokey": "1.0.3",
-        "pbkdf2": "3.0.16"
+        "asn1.js": "^4.0.0",
+        "browserify-aes": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3"
       }
     },
     "parse-glob": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
       "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
       "dev": true,
       "requires": {
@@ -8042,21 +8517,21 @@
       }
     },
     "pbkdf2": {
       "version": "3.0.16",
       "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",
       "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==",
       "dev": true,
       "requires": {
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "ripemd160": "2.0.2",
-        "safe-buffer": "5.1.1",
-        "sha.js": "2.4.11"
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
       }
     },
     "performance-now": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
       "dev": true
     },
@@ -8161,16 +8636,22 @@
     "promise": {
       "version": "7.3.1",
       "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
       "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
       "requires": {
         "asap": "2.0.6"
       }
     },
+    "promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+      "dev": true
+    },
     "prop-types": {
       "version": "15.6.1",
       "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz",
       "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==",
       "requires": {
         "fbjs": "0.8.16",
         "loose-envify": "1.3.1",
         "object-assign": "4.1.1"
@@ -8273,21 +8754,42 @@
       "dev": true
     },
     "public-encrypt": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
       "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "browserify-rsa": "4.0.1",
-        "create-hash": "1.2.0",
-        "parse-asn1": "5.1.1",
-        "randombytes": "2.0.6"
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1"
+      }
+    },
+    "pump": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+      "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+      "dev": true,
+      "requires": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
       }
     },
     "punycode": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
       "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
       "dev": true
     },
@@ -8402,27 +8904,27 @@
       }
     },
     "randombytes": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
       "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.1"
+        "safe-buffer": "^5.1.0"
       }
     },
     "randomfill": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
       "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
       "dev": true,
       "requires": {
-        "randombytes": "2.0.6",
-        "safe-buffer": "5.1.1"
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
       }
     },
     "range-parser": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
       "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
       "dev": true
     },
@@ -8845,16 +9347,33 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz",
       "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==",
       "dev": true,
       "requires": {
         "path-parse": "1.0.5"
       }
     },
+    "resolve-cwd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      },
+      "dependencies": {
+        "resolve-from": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+          "dev": true
+        }
+      }
+    },
     "resolve-from": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
       "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
       "dev": true
     },
     "resolve-url": {
       "version": "0.2.1",
@@ -8878,16 +9397,17 @@
       "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
       "dev": true
     },
     "right-align": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
       "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
       "dev": true,
+      "optional": true,
       "requires": {
         "align-text": "0.1.4"
       }
     },
     "rimraf": {
       "version": "2.6.2",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
       "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
@@ -8897,18 +9417,18 @@
       }
     },
     "ripemd160": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
       "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
       "dev": true,
       "requires": {
-        "hash-base": "3.0.4",
-        "inherits": "2.0.3"
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
       }
     },
     "rst-selector-parser": {
       "version": "2.2.3",
       "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
       "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=",
       "dev": true,
       "requires": {
@@ -8920,46 +9440,70 @@
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
       "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
       "dev": true,
       "requires": {
         "is-promise": "2.1.0"
       }
     },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1"
+      }
+    },
     "rx-lite": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
       "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
       "dev": true
     },
     "rx-lite-aggregates": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
       "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
       "dev": true,
       "requires": {
         "rx-lite": "4.0.8"
       }
     },
+    "rxjs": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.1.tgz",
+      "integrity": "sha512-OwMxHxmnmHTUpgO+V7dZChf3Tixf4ih95cmXjzzadULziVl/FKhHScGLj4goEw9weePVOH2Q0+GcCBUhKCZc/g==",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
     "safe-buffer": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
       "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
       "dev": true
     },
     "safe-regex": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
       "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
       "dev": true,
       "requires": {
         "ret": "0.1.15"
       }
     },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
     "samsam": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
       "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
       "dev": true
     },
     "sass-graph": {
       "version": "2.2.4",
@@ -9315,16 +9859,58 @@
       }
     },
     "sax": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
       "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
       "dev": true
     },
+    "schema-utils": {
+      "version": "0.4.5",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz",
+      "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.1.0",
+        "ajv-keywords": "^3.1.0"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "6.5.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
+          "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
+          "dev": true,
+          "requires": {
+            "fast-deep-equal": "^2.0.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.1"
+          }
+        },
+        "ajv-keywords": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+          "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
+          "dev": true
+        },
+        "fast-deep-equal": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+          "dev": true
+        },
+        "json-schema-traverse": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+          "dev": true
+        }
+      }
+    },
     "scss-tokenizer": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
       "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
       "dev": true,
       "requires": {
         "js-base64": "2.3.2",
         "source-map": "0.4.4"
@@ -9342,16 +9928,22 @@
       }
     },
     "semver": {
       "version": "5.4.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
       "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
       "dev": true
     },
+    "serialize-javascript": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
+      "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==",
+      "dev": true
+    },
     "set-blocking": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
       "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
       "dev": true
     },
     "set-immediate-shim": {
       "version": "1.0.1",
@@ -9394,18 +9986,18 @@
       "dev": true
     },
     "sha.js": {
       "version": "2.4.11",
       "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
       "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.1"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "shebang-command": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
       "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
       "dev": true,
       "requires": {
@@ -9877,16 +10469,25 @@
         "assert-plus": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
           "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
           "dev": true
         }
       }
     },
+    "ssri": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
+      "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.1.1"
+      }
+    },
     "static-extend": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
       "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
       "dev": true,
       "requires": {
         "define-property": "0.2.5",
         "object-copy": "0.1.0"
@@ -9919,73 +10520,89 @@
       }
     },
     "stream-browserify": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
       "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.3"
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
       }
     },
     "stream-combiner": {
       "version": "0.0.4",
       "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
       "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
       "dev": true,
       "requires": {
         "duplexer": "0.1.1"
       }
     },
+    "stream-each": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz",
+      "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
     "stream-http": {
-      "version": "2.8.2",
-      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz",
-      "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==",
-      "dev": true,
-      "requires": {
-        "builtin-status-codes": "3.0.0",
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.6",
-        "to-arraybuffer": "1.0.1",
-        "xtend": "4.0.1"
+      "version": "2.8.3",
+      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+      "dev": true,
+      "requires": {
+        "builtin-status-codes": "^3.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.3.6",
+        "to-arraybuffer": "^1.0.0",
+        "xtend": "^4.0.0"
       },
       "dependencies": {
         "process-nextick-args": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
           "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
           "dev": true
         },
         "readable-stream": {
           "version": "2.3.6",
           "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
           "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
           "dev": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
           }
         },
         "string_decoder": {
           "version": "1.1.1",
           "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "dev": true,
           "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        }
-      }
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "stream-shift": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+      "dev": true
     },
     "streamroller": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz",
       "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==",
       "dev": true,
       "requires": {
         "date-format": "1.2.0",
@@ -10178,19 +10795,19 @@
           "dev": true,
           "requires": {
             "has-flag": "3.0.0"
           }
         }
       }
     },
     "tapable": {
-      "version": "0.2.8",
-      "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
-      "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz",
+      "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==",
       "dev": true
     },
     "tar": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
       "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
       "dev": true,
       "requires": {
@@ -10212,30 +10829,40 @@
       "dev": true
     },
     "through": {
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
       "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
       "dev": true
     },
+    "through2": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+      "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.1.5",
+        "xtend": "~4.0.1"
+      }
+    },
     "thunkify": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz",
       "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=",
       "dev": true,
       "optional": true
     },
     "timers-browserify": {
       "version": "2.0.10",
       "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
       "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
       "dev": true,
       "requires": {
-        "setimmediate": "1.0.5"
+        "setimmediate": "^1.0.4"
       }
     },
     "timespan": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz",
       "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=",
       "dev": true,
       "optional": true
@@ -10355,16 +10982,22 @@
       }
     },
     "tryit": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
       "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
       "dev": true
     },
+    "tslib": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+      "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+      "dev": true
+    },
     "tsscmp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz",
       "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=",
       "dev": true,
       "optional": true
     },
     "tty-browserify": {
@@ -10445,38 +11078,68 @@
       "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
       "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g=="
     },
     "uglify-js": {
       "version": "2.8.29",
       "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
       "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
       "dev": true,
+      "optional": true,
       "requires": {
         "source-map": "0.5.7",
         "uglify-to-browserify": "1.0.2",
         "yargs": "3.10.0"
       }
     },
     "uglify-to-browserify": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
       "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
       "dev": true,
       "optional": true
     },
     "uglifyjs-webpack-plugin": {
-      "version": "0.4.6",
-      "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
-      "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
-      "dev": true,
-      "requires": {
-        "source-map": "0.5.7",
-        "uglify-js": "2.8.29",
-        "webpack-sources": "1.1.0"
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz",
+      "integrity": "sha512-1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA==",
+      "dev": true,
+      "requires": {
+        "cacache": "^10.0.4",
+        "find-cache-dir": "^1.0.0",
+        "schema-utils": "^0.4.5",
+        "serialize-javascript": "^1.4.0",
+        "source-map": "^0.6.1",
+        "uglify-es": "^3.3.4",
+        "webpack-sources": "^1.1.0",
+        "worker-farm": "^1.5.2"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.13.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
+          "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "uglify-es": {
+          "version": "3.3.9",
+          "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
+          "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
+          "dev": true,
+          "requires": {
+            "commander": "~2.13.0",
+            "source-map": "~0.6.1"
+          }
+        }
       }
     },
     "ultron": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
       "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
       "dev": true
     },
@@ -10522,16 +11185,34 @@
             "extend-shallow": "2.0.1",
             "is-extendable": "0.1.1",
             "is-plain-object": "2.0.4",
             "to-object-path": "0.3.0"
           }
         }
       }
     },
+    "unique-filename": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz",
+      "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=",
+      "dev": true,
+      "requires": {
+        "unique-slug": "^2.0.0"
+      }
+    },
+    "unique-slug": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
+      "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=",
+      "dev": true,
+      "requires": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
     "universalify": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
       "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
       "dev": true
     },
     "unpipe": {
       "version": "1.0.0",
@@ -10586,16 +11267,33 @@
       }
     },
     "upath": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.5.tgz",
       "integrity": "sha512-qbKn90aDQ0YEwvXoLqj0oiuUYroLX2lVHZ+b+xwjozFasAOC4GneDq5+OaIG5Zj+jFmbz/uO+f7a9qxjktJQww==",
       "dev": true
     },
+    "uri-js": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+      "dev": true,
+      "requires": {
+        "punycode": "^2.1.0"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+          "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+          "dev": true
+        }
+      }
+    },
     "urix": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
       "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
       "dev": true
     },
     "url": {
       "version": "0.11.0",
@@ -10708,16 +11406,22 @@
     },
     "uws": {
       "version": "9.14.0",
       "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz",
       "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==",
       "dev": true,
       "optional": true
     },
+    "v8-compile-cache": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz",
+      "integrity": "sha512-qNdTUMaCjPs4eEnM3W9H94R3sU70YCuT+/ST7nUf+id1bVOrdjrpUaeZLqPBPRph3hsgn4a4BvwpxhHZx+oSDg==",
+      "dev": true
+    },
     "validate-npm-package-license": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
       "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
       "dev": true,
       "requires": {
         "spdx-correct": "1.0.2",
         "spdx-expression-parse": "1.0.4"
@@ -10758,29 +11462,29 @@
       "dev": true
     },
     "watchpack": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
       "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
       "dev": true,
       "requires": {
-        "chokidar": "2.0.3",
-        "graceful-fs": "4.1.11",
-        "neo-async": "2.5.1"
+        "chokidar": "^2.0.2",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0"
       },
       "dependencies": {
         "anymatch": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
           "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
           "dev": true,
           "requires": {
-            "micromatch": "3.1.10",
-            "normalize-path": "2.1.1"
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
           }
         },
         "arr-diff": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
           "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
           "dev": true
         },
@@ -10791,291 +11495,292 @@
           "dev": true
         },
         "braces": {
           "version": "2.3.2",
           "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
           "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
           "dev": true,
           "requires": {
-            "arr-flatten": "1.1.0",
-            "array-unique": "0.3.2",
-            "extend-shallow": "2.0.1",
-            "fill-range": "4.0.0",
-            "isobject": "3.0.1",
-            "repeat-element": "1.1.2",
-            "snapdragon": "0.8.2",
-            "snapdragon-node": "2.1.1",
-            "split-string": "3.1.0",
-            "to-regex": "3.0.2"
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "extend-shallow": {
               "version": "2.0.1",
               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
         },
         "chokidar": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz",
-          "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==",
-          "dev": true,
-          "requires": {
-            "anymatch": "2.0.0",
-            "async-each": "1.0.1",
-            "braces": "2.3.2",
-            "fsevents": "1.2.4",
-            "glob-parent": "3.1.0",
-            "inherits": "2.0.3",
-            "is-binary-path": "1.0.1",
-            "is-glob": "4.0.0",
-            "normalize-path": "2.1.1",
-            "path-is-absolute": "1.0.1",
-            "readdirp": "2.1.0",
-            "upath": "1.0.5"
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+          "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+          "dev": true,
+          "requires": {
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.0",
+            "braces": "^2.3.0",
+            "fsevents": "^1.2.2",
+            "glob-parent": "^3.1.0",
+            "inherits": "^2.0.1",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^4.0.0",
+            "lodash.debounce": "^4.0.8",
+            "normalize-path": "^2.1.1",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.0.0",
+            "upath": "^1.0.5"
           }
         },
         "expand-brackets": {
           "version": "2.1.4",
           "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
           "dev": true,
           "requires": {
-            "debug": "2.6.9",
-            "define-property": "0.2.5",
-            "extend-shallow": "2.0.1",
-            "posix-character-classes": "0.1.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "debug": "^2.3.3",
+            "define-property": "^0.2.5",
+            "extend-shallow": "^2.0.1",
+            "posix-character-classes": "^0.1.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
               "version": "0.2.5",
               "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "0.1.6"
+                "is-descriptor": "^0.1.0"
               }
             },
             "extend-shallow": {
               "version": "2.0.1",
               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             },
             "is-accessor-descriptor": {
               "version": "0.1.6",
               "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
                   "version": "3.2.2",
                   "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.5"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
             },
             "is-data-descriptor": {
               "version": "0.1.4",
               "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
                   "version": "3.2.2",
                   "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.5"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
             },
             "is-descriptor": {
               "version": "0.1.6",
               "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
               "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
               "dev": true,
               "requires": {
-                "is-accessor-descriptor": "0.1.6",
-                "is-data-descriptor": "0.1.4",
-                "kind-of": "5.1.0"
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
               }
             },
             "kind-of": {
               "version": "5.1.0",
               "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
               "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
               "dev": true
             }
           }
         },
         "extglob": {
           "version": "2.0.4",
           "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
           "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
           "dev": true,
           "requires": {
-            "array-unique": "0.3.2",
-            "define-property": "1.0.0",
-            "expand-brackets": "2.1.4",
-            "extend-shallow": "2.0.1",
-            "fragment-cache": "0.2.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "array-unique": "^0.3.2",
+            "define-property": "^1.0.0",
+            "expand-brackets": "^2.1.4",
+            "extend-shallow": "^2.0.1",
+            "fragment-cache": "^0.2.1",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
               "version": "1.0.0",
               "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "1.0.2"
+                "is-descriptor": "^1.0.0"
               }
             },
             "extend-shallow": {
               "version": "2.0.1",
               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
         },
         "fill-range": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-number": "3.0.0",
-            "repeat-string": "1.6.1",
-            "to-regex-range": "2.1.1"
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           },
           "dependencies": {
             "extend-shallow": {
               "version": "2.0.1",
               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
         },
         "glob-parent": {
           "version": "3.1.0",
           "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
           "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
           "dev": true,
           "requires": {
-            "is-glob": "3.1.0",
-            "path-dirname": "1.0.2"
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
           },
           "dependencies": {
             "is-glob": {
               "version": "3.1.0",
               "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
               "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
               "dev": true,
               "requires": {
-                "is-extglob": "2.1.1"
+                "is-extglob": "^2.1.0"
               }
             }
           }
         },
         "is-accessor-descriptor": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
           "version": "1.0.2",
           "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "is-extglob": {
           "version": "2.1.1",
           "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
           "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
           "dev": true
         },
         "is-glob": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
           "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
           "dev": true,
           "requires": {
-            "is-extglob": "2.1.1"
+            "is-extglob": "^2.1.1"
           }
         },
         "is-number": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
               "version": "3.2.2",
               "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.5"
+                "is-buffer": "^1.1.5"
               }
             }
           }
         },
         "isobject": {
           "version": "3.0.1",
           "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
           "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
@@ -11088,236 +11793,608 @@
           "dev": true
         },
         "micromatch": {
           "version": "3.1.10",
           "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
           "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
           "dev": true,
           "requires": {
-            "arr-diff": "4.0.0",
-            "array-unique": "0.3.2",
-            "braces": "2.3.2",
-            "define-property": "2.0.2",
-            "extend-shallow": "3.0.2",
-            "extglob": "2.0.4",
-            "fragment-cache": "0.2.1",
-            "kind-of": "6.0.2",
-            "nanomatch": "1.2.9",
-            "object.pick": "1.3.0",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
           }
         }
       }
     },
     "weak-map": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.0.tgz",
       "integrity": "sha1-tm5Wqd8L0lp2u/G1FNsSkIBhSjc=",
       "dev": true
     },
     "webpack": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz",
-      "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==",
-      "dev": true,
-      "requires": {
-        "acorn": "5.1.2",
-        "acorn-dynamic-import": "2.0.2",
-        "ajv": "5.5.2",
-        "ajv-keywords": "2.1.1",
-        "async": "2.6.1",
-        "enhanced-resolve": "3.4.1",
-        "escope": "3.6.0",
-        "interpret": "1.1.0",
-        "json-loader": "0.5.7",
-        "json5": "0.5.1",
-        "loader-runner": "2.3.0",
-        "loader-utils": "1.1.0",
-        "memory-fs": "0.4.1",
-        "mkdirp": "0.5.1",
-        "node-libs-browser": "2.1.0",
-        "source-map": "0.5.7",
-        "supports-color": "4.5.0",
-        "tapable": "0.2.8",
-        "uglifyjs-webpack-plugin": "0.4.6",
-        "watchpack": "1.6.0",
-        "webpack-sources": "1.1.0",
-        "yargs": "8.0.2"
-      },
-      "dependencies": {
-        "async": {
-          "version": "2.6.1",
-          "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
-          "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
-          "dev": true,
-          "requires": {
-            "lodash": "4.17.10"
+      "version": "4.15.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.15.0.tgz",
+      "integrity": "sha512-S2fpUI4WLg9gsg1CZ9SE790C1fI2zbxiBCdl9xAnttdLjXhzfCYSYu+TeSEz6ZrLcmQ8RpJoieOAAS0p27nTog==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.5.13",
+        "@webassemblyjs/helper-module-context": "1.5.13",
+        "@webassemblyjs/wasm-edit": "1.5.13",
+        "@webassemblyjs/wasm-opt": "1.5.13",
+        "@webassemblyjs/wasm-parser": "1.5.13",
+        "acorn": "^5.6.2",
+        "acorn-dynamic-import": "^3.0.0",
+        "ajv": "^6.1.0",
+        "ajv-keywords": "^3.1.0",
+        "chrome-trace-event": "^1.0.0",
+        "enhanced-resolve": "^4.1.0",
+        "eslint-scope": "^3.7.1",
+        "json-parse-better-errors": "^1.0.2",
+        "loader-runner": "^2.3.0",
+        "loader-utils": "^1.1.0",
+        "memory-fs": "~0.4.1",
+        "micromatch": "^3.1.8",
+        "mkdirp": "~0.5.0",
+        "neo-async": "^2.5.0",
+        "node-libs-browser": "^2.0.0",
+        "schema-utils": "^0.4.4",
+        "tapable": "^1.0.0",
+        "uglifyjs-webpack-plugin": "^1.2.4",
+        "watchpack": "^1.5.0",
+        "webpack-sources": "^1.0.1"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+          "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+          "dev": true
+        },
+        "ajv": {
+          "version": "6.5.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz",
+          "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==",
+          "dev": true,
+          "requires": {
+            "fast-deep-equal": "^2.0.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.1"
+          }
+        },
+        "ajv-keywords": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+          "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
+          "dev": true
+        },
+        "arr-diff": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+          "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+          "dev": true
+        },
+        "array-unique": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+          "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+          "dev": true
+        },
+        "braces": {
+          "version": "2.3.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "expand-brackets": {
+          "version": "2.1.4",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+          "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+          "dev": true,
+          "requires": {
+            "debug": "^2.3.3",
+            "define-property": "^0.2.5",
+            "extend-shallow": "^2.0.1",
+            "posix-character-classes": "^0.1.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "0.2.5",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+              "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+              "dev": true,
+              "requires": {
+                "is-descriptor": "^0.1.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            },
+            "is-accessor-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+              "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+              "dev": true,
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "dev": true,
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-data-descriptor": {
+              "version": "0.1.4",
+              "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+              "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+              "dev": true,
+              "requires": {
+                "kind-of": "^3.0.2"
+              },
+              "dependencies": {
+                "kind-of": {
+                  "version": "3.2.2",
+                  "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                  "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                  "dev": true,
+                  "requires": {
+                    "is-buffer": "^1.1.5"
+                  }
+                }
+              }
+            },
+            "is-descriptor": {
+              "version": "0.1.6",
+              "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+              "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+              "dev": true,
+              "requires": {
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
+              }
+            },
+            "kind-of": {
+              "version": "5.1.0",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+              "dev": true
+            }
+          }
+        },
+        "extglob": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+          "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+          "dev": true,
+          "requires": {
+            "array-unique": "^0.3.2",
+            "define-property": "^1.0.0",
+            "expand-brackets": "^2.1.4",
+            "extend-shallow": "^2.0.1",
+            "fragment-cache": "^0.2.1",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
+          },
+          "dependencies": {
+            "define-property": {
+              "version": "1.0.0",
+              "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+              "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+              "dev": true,
+              "requires": {
+                "is-descriptor": "^1.0.0"
+              }
+            },
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "fast-deep-equal": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+          "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+          "dev": true
+        },
+        "fill-range": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
+          },
+          "dependencies": {
+            "extend-shallow": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "dev": true,
+              "requires": {
+                "is-extendable": "^0.1.0"
+              }
+            }
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "is-number": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "isobject": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+          "dev": true
+        },
+        "json-parse-better-errors": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+          "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+          "dev": true
+        },
+        "json-schema-traverse": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        },
+        "loader-utils": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+          "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+          "dev": true,
+          "requires": {
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0"
+          }
+        },
+        "micromatch": {
+          "version": "3.1.10",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
+          }
+        }
+      }
+    },
+    "webpack-cli": {
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.0.8.tgz",
+      "integrity": "sha512-KnRLJ0BUaYRqrhAMb9dv3gzdmhmgIMKo0FmdsnmfqbPGtLnnZ6tORZAvmmKfr+A0VgiVpqC60Gv7Ofg0R2CHtQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.1",
+        "cross-spawn": "^6.0.5",
+        "enhanced-resolve": "^4.0.0",
+        "global-modules-path": "^2.1.0",
+        "import-local": "^1.0.0",
+        "inquirer": "^6.0.0",
+        "interpret": "^1.1.0",
+        "loader-utils": "^1.1.0",
+        "supports-color": "^5.4.0",
+        "v8-compile-cache": "^2.0.0",
+        "yargs": "^11.1.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+          "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+          "dev": true,
+          "requires": {
+            "color-convert": "^1.9.0"
           }
         },
         "camelcase": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
           "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
           "dev": true
         },
+        "chalk": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+          "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
+          }
+        },
+        "chardet": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.5.0.tgz",
+          "integrity": "sha512-9ZTaoBaePSCFvNlNGrsyI8ZVACP2svUtq0DkM7t4K2ClAa96sqOIRjAzDTc8zXzFt1cZR46rRzLTiHFSJ+Qw0g==",
+          "dev": true
+        },
         "cliui": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-          "dev": true,
-          "requires": {
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1",
-            "wrap-ansi": "2.1.0"
-          },
-          "dependencies": {
-            "string-width": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-              "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-              "dev": true,
-              "requires": {
-                "code-point-at": "1.1.0",
-                "is-fullwidth-code-point": "1.0.0",
-                "strip-ansi": "3.0.1"
-              }
-            }
-          }
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-          "dev": true,
-          "requires": {
-            "number-is-nan": "1.0.1"
-          }
-        },
-        "load-json-file": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
-          "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "4.1.11",
-            "parse-json": "2.2.0",
-            "pify": "2.3.0",
-            "strip-bom": "3.0.0"
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+          "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+          "dev": true,
+          "requires": {
+            "string-width": "^2.1.1",
+            "strip-ansi": "^4.0.0",
+            "wrap-ansi": "^2.0.0"
+          }
+        },
+        "cross-spawn": {
+          "version": "6.0.5",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+          "dev": true,
+          "requires": {
+            "nice-try": "^1.0.4",
+            "path-key": "^2.0.1",
+            "semver": "^5.5.0",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "external-editor": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.0.tgz",
+          "integrity": "sha512-mpkfj0FEdxrIhOC04zk85X7StNtr0yXnG7zCb+8ikO8OJi2jsHh5YGoknNTyXgsbHOf1WOOcVU3kPFWT2WgCkQ==",
+          "dev": true,
+          "requires": {
+            "chardet": "^0.5.0",
+            "iconv-lite": "^0.4.22",
+            "tmp": "^0.0.33"
+          }
+        },
+        "has-flag": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+          "dev": true
+        },
+        "iconv-lite": {
+          "version": "0.4.23",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+          "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+          "dev": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        },
+        "inquirer": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.0.0.tgz",
+          "integrity": "sha512-tISQWRwtcAgrz+SHPhTH7d3e73k31gsOy6i1csonLc0u1dVK/wYvuOnFeiWqC5OXFIYbmrIFInef31wbT8MEJg==",
+          "dev": true,
+          "requires": {
+            "ansi-escapes": "^3.0.0",
+            "chalk": "^2.0.0",
+            "cli-cursor": "^2.1.0",
+            "cli-width": "^2.0.0",
+            "external-editor": "^3.0.0",
+            "figures": "^2.0.0",
+            "lodash": "^4.3.0",
+            "mute-stream": "0.0.7",
+            "run-async": "^2.2.0",
+            "rxjs": "^6.1.0",
+            "string-width": "^2.1.0",
+            "strip-ansi": "^4.0.0",
+            "through": "^2.3.6"
           }
         },
         "loader-utils": {
           "version": "1.1.0",
           "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
           "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
           "dev": true,
           "requires": {
-            "big.js": "3.2.0",
-            "emojis-list": "2.1.0",
-            "json5": "0.5.1"
-          }
-        },
-        "lodash": {
-          "version": "4.17.10",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
-          "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
-          "dev": true
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0"
+          }
         },
         "os-locale": {
           "version": "2.1.0",
           "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
           "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
           "dev": true,
           "requires": {
-            "execa": "0.7.0",
-            "lcid": "1.0.0",
-            "mem": "1.1.0"
-          }
-        },
-        "path-type": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
-          "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
-          "dev": true,
-          "requires": {
-            "pify": "2.3.0"
-          }
-        },
-        "read-pkg": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
-          "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
-          "dev": true,
-          "requires": {
-            "load-json-file": "2.0.0",
-            "normalize-package-data": "2.4.0",
-            "path-type": "2.0.0"
-          }
-        },
-        "read-pkg-up": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
-          "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
-          "dev": true,
-          "requires": {
-            "find-up": "2.1.0",
-            "read-pkg": "2.0.0"
-          }
-        },
-        "strip-bom": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-          "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-          "dev": true
+            "execa": "^0.7.0",
+            "lcid": "^1.0.0",
+            "mem": "^1.1.0"
+          }
+        },
+        "semver": {
+          "version": "5.5.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+          "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
         },
         "supports-color": {
-          "version": "4.5.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
-          "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
-          "dev": true,
-          "requires": {
-            "has-flag": "2.0.0"
+          "version": "5.4.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+          "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
           }
         },
         "which-module": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
           "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
           "dev": true
         },
         "yargs": {
-          "version": "8.0.2",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
-          "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
-          "dev": true,
-          "requires": {
-            "camelcase": "4.1.0",
-            "cliui": "3.2.0",
-            "decamelize": "1.2.0",
-            "get-caller-file": "1.0.2",
-            "os-locale": "2.1.0",
-            "read-pkg-up": "2.0.0",
-            "require-directory": "2.1.1",
-            "require-main-filename": "1.0.1",
-            "set-blocking": "2.0.0",
-            "string-width": "2.1.1",
-            "which-module": "2.0.0",
-            "y18n": "3.2.1",
-            "yargs-parser": "7.0.0"
+          "version": "11.1.0",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
+          "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
+          "dev": true,
+          "requires": {
+            "cliui": "^4.0.0",
+            "decamelize": "^1.1.1",
+            "find-up": "^2.1.0",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^2.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^9.0.2"
           }
         },
         "yargs-parser": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
-          "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
-          "dev": true,
-          "requires": {
-            "camelcase": "4.1.0"
+          "version": "9.0.2",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
+          "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0"
           }
         }
       }
     },
     "webpack-dev-middleware": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz",
       "integrity": "sha512-tj5LLD9r4tDuRIDa5Mu9lnY2qBBehAITv6A9irqXhw/HQquZgTx3BCd57zYbU2gMDnncA49ufK2qVQSbaKJwOw==",
@@ -11396,18 +12473,18 @@
       }
     },
     "webpack-sources": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
       "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==",
       "dev": true,
       "requires": {
-        "source-list-map": "2.0.0",
-        "source-map": "0.6.1"
+        "source-list-map": "^2.0.0",
+        "source-map": "~0.6.1"
       },
       "dependencies": {
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
           "dev": true
         }
@@ -11470,24 +12547,45 @@
           }
         }
       }
     },
     "window-size": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
       "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "wordwrap": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
       "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
       "dev": true
     },
+    "worker-farm": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
+      "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
+      "dev": true,
+      "requires": {
+        "errno": "~0.1.7"
+      },
+      "dependencies": {
+        "errno": {
+          "version": "0.1.7",
+          "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+          "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+          "dev": true,
+          "requires": {
+            "prr": "~1.0.1"
+          }
+        }
+      }
+    },
     "wrap-ansi": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
       "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
       "dev": true,
       "requires": {
         "string-width": "1.0.2",
         "strip-ansi": "3.0.1"
@@ -11732,28 +12830,30 @@
         }
       }
     },
     "yargs": {
       "version": "3.10.0",
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
       "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
       "dev": true,
+      "optional": true,
       "requires": {
         "camelcase": "1.2.1",
         "cliui": "2.1.0",
         "decamelize": "1.2.0",
         "window-size": "0.1.0"
       },
       "dependencies": {
         "camelcase": {
           "version": "1.2.1",
           "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
           "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
-          "dev": true
+          "dev": true,
+          "optional": true
         }
       }
     },
     "yargs-parser": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
       "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
       "dev": true,
--- a/browser/extensions/activity-stream/package.json
+++ b/browser/extensions/activity-stream/package.json
@@ -63,17 +63,18 @@
     "npm-run-all": "4.1.2",
     "pontoon-to-json": "2.0.0",
     "react-test-renderer": "16.3.2",
     "rimraf": "2.6.2",
     "sass-lint": "1.12.1",
     "shelljs": "0.8.1",
     "simple-git": "1.92.0",
     "sinon": "4.5.0",
-    "webpack": "3.10.0",
+    "webpack": "4.15.0",
+    "webpack-cli": "3.0.8",
     "yamscripts": "0.0.3"
   },
   "engines": {
     "firefox": ">=45.0 <=*",
     "//": "when changing node versions, also edit .travis.yml and .nvmrc",
     "node": "7.*"
   },
   "homepage": "https://github.com/mozilla/activity-stream",
@@ -88,17 +89,17 @@
   "config": {
     "mc_dir": "../mozilla-central"
   },
   "scripts": {
     "mochitest": "(cd $npm_package_config_mc_dir && ./mach mochitest browser/extensions/activity-stream/test/functional/mochitest )",
     "mochitest-debug": "(cd $npm_package_config_mc_dir && ./mach mochitest --jsdebugger browser/extensions/activity-stream/test/functional/mochitest)",
     "bundle": "npm-run-all bundle:*",
     "bundle:locales": "pontoon-to-json --src locales --dest data",
-    "bundle:webpack": "webpack --config webpack.system-addon.config.js --display-optimization-bailout",
+    "bundle:webpack": "webpack --config webpack.system-addon.config.js",
     "bundle:css": "node-sass --source-map true --source-map-contents content-src/styles -o css",
     "bundle:html": "rimraf prerendered && webpack --config webpack.prerender.config.js && node ./bin/render-activity-stream-html.js",
     "buildmc": "npm-run-all buildmc:*",
     "prebuildmc": "rimraf $npm_package_config_mc_dir/browser/extensions/activity-stream/",
     "buildmc:bundle": "npm run  bundle",
     "buildmc:copy": "rsync --exclude-from .mcignore -a . $npm_package_config_mc_dir/browser/extensions/activity-stream/",
     "buildmc:version": "node ./bin/update-version.js $npm_package_config_mc_dir/browser/extensions/activity-stream",
     "buildmc:stringsExport": "cp locales/en-US/strings.properties $npm_package_config_mc_dir/browser/locales/en-US/chrome/browser/activity-stream/newtab.properties",
--- a/browser/extensions/activity-stream/prerendered/locales/bg/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/bg/activity-stream-strings.js
@@ -47,17 +47,17 @@ window.gActivityStreamStrings = {
   "prefs_topstories_options_sponsored_label": "Платени публикации",
   "prefs_topstories_sponsored_learn_more": "Научете повече",
   "prefs_highlights_description": "Избрани страници, които сте запазили или посетили",
   "prefs_highlights_options_visited_label": "Посетени страници",
   "prefs_highlights_options_download_label": "Последни изтегляния",
   "prefs_highlights_options_pocket_label": "Страници, запазени в Pocket",
   "prefs_snippets_description": "Новости от Mozilla и Firefox",
   "settings_pane_button_label": "Настройки на новия раздел",
-  "settings_pane_topsites_header": "Често посещавани",
+  "settings_pane_topsites_header": "Често посещавани страници",
   "settings_pane_highlights_header": "Акценти",
   "settings_pane_highlights_options_bookmarks": "Отметки",
   "settings_pane_snippets_header": "Изрезки",
   "edit_topsites_button_text": "Променяне",
   "edit_topsites_edit_button": "Променяне",
   "topsites_form_add_header": "Нова често посещавана страница",
   "topsites_form_edit_header": "Променяне на често посещавана страница",
   "topsites_form_title_label": "Заглавие",
--- a/browser/extensions/activity-stream/prerendered/locales/cs/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/cs/activity-stream-strings.js
@@ -55,17 +55,17 @@ window.gActivityStreamStrings = {
   "settings_pane_topsites_header": "Top stránky",
   "settings_pane_highlights_header": "Vybrané",
   "settings_pane_highlights_options_bookmarks": "Záložky",
   "settings_pane_snippets_header": "Útržky",
   "edit_topsites_button_text": "Upravit",
   "edit_topsites_edit_button": "Upravit tuto stránku",
   "topsites_form_add_header": "Nová top stránka",
   "topsites_form_edit_header": "Upravit top stránku",
-  "topsites_form_title_label": "Nadpis",
+  "topsites_form_title_label": "Název stránky",
   "topsites_form_title_placeholder": "Zadejte název",
   "topsites_form_url_label": "URL",
   "topsites_form_image_url_label": "URL adresa vlastního obrázku",
   "topsites_form_url_placeholder": "Zadejte nebo vložte URL adresu",
   "topsites_form_use_image_link": "Použít vlastní obrázek…",
   "topsites_form_preview_button": "Náhled",
   "topsites_form_add_button": "Přidat",
   "topsites_form_save_button": "Uložit",
--- a/browser/extensions/activity-stream/prerendered/locales/ff/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/ff/activity-stream-strings.js
@@ -80,26 +80,26 @@ window.gActivityStreamStrings = {
   "manual_migration_cancel_button": "Alaa, moƴƴii",
   "manual_migration_import_button": "Jiggo Jooni",
   "error_fallback_default_info": "Uf, saɗeende kewii e loowgol ngoo loowdi.",
   "error_fallback_default_refresh_suggestion": "Wultin hello ngoo ngam ennditde.",
   "section_menu_action_remove_section": "Momtu taƴre",
   "section_menu_action_collapse_section": "Renndin taƴe",
   "section_menu_action_expand_section": "Yaajtin taƴre",
   "section_menu_action_manage_section": "Feewnu taƴre",
-  "section_menu_action_manage_webext": "Manage Extension",
+  "section_menu_action_manage_webext": "Yiil Timmitere",
   "section_menu_action_add_topsite": "Ɓeydu lowre rowrowre",
   "section_menu_action_move_up": "Dirtin dow",
   "section_menu_action_move_down": "Dirtin les",
   "section_menu_action_privacy_notice": "Tintinal sirlu",
-  "firstrun_title": "Take Firefox with You",
-  "firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
-  "firstrun_learn_more_link": "Learn more about Firefox Accounts",
-  "firstrun_form_header": "Enter your email",
-  "firstrun_form_sub_header": "to continue to Firefox Sync",
-  "firstrun_email_input_placeholder": "Email",
+  "firstrun_title": "Nawor Firefox",
+  "firstrun_content": "Heɓ maantore maa, aslol maa, finndeeji maa kam e teelte goɗɗe e masiŋon maa fof.",
+  "firstrun_learn_more_link": "Ɓeydu humpito baɗte Konte Firefox",
+  "firstrun_form_header": "Naatnu iimeel maa",
+  "firstrun_form_sub_header": "ngam jokkude to Firefox Sync",
+  "firstrun_email_input_placeholder": "Iimeel",
   "firstrun_invalid_input": "Valid email required",
-  "firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
-  "firstrun_terms_of_service": "Terms of Service",
-  "firstrun_privacy_notice": "Privacy Notice",
-  "firstrun_continue_to_login": "Continue",
-  "firstrun_skip_login": "Skip this step"
+  "firstrun_extra_legal_links": "Fuɗɗaade, woni a jaɓii {kuule} ɗee kam e {suturo}oo.",
+  "firstrun_terms_of_service": "Laabi Carwol",
+  "firstrun_privacy_notice": "Tintinol Suturo",
+  "firstrun_continue_to_login": "Jokku",
+  "firstrun_skip_login": "Diw ngal daawal"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/he/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/he/activity-stream-strings.js
@@ -22,28 +22,28 @@ window.gActivityStreamStrings = {
   "confirm_history_delete_p1": "למחוק כל עותק של העמוד הזה מההיסטוריה שלך?",
   "confirm_history_delete_notice_p2": "לא ניתן לבטל פעולה זו.",
   "menu_action_save_to_pocket": "שמירה ל־Pocket",
   "menu_action_delete_pocket": "מחיקה מ־Pocket",
   "menu_action_archive_pocket": "העברה לארכיון ב־Pocket",
   "menu_action_show_file_mac_os": "הצגה ב־Finder",
   "menu_action_show_file_windows": "פתיחת תיקייה מכילה",
   "menu_action_show_file_linux": "פתיחת תיקייה מכילה",
-  "menu_action_show_file_default": "הצגת קובץ",
-  "menu_action_open_file": "פתיחת קובץ",
+  "menu_action_show_file_default": "הצגת הקובץ",
+  "menu_action_open_file": "פתיחת הקובץ",
   "menu_action_copy_download_link": "העתקת קישור ההורדה",
   "menu_action_go_to_download_page": "מעבר לעמוד ההורדה",
   "menu_action_remove_download": "הסרה מההיסטוריה",
   "search_button": "חיפוש",
   "search_header": "חיפוש ב־{search_engine_name}",
   "search_web_placeholder": "חיפוש ברשת",
   "section_disclaimer_topstories": "הסיפורים המעניינים ביותר באינטרנט, על בסיס מה שמעניין אותך. בעזרת Pocket, כיום חלק מ־Mozilla.",
   "section_disclaimer_topstories_linktext": "מידע על איך זה עובד.",
   "section_disclaimer_topstories_buttontext": "בסדר, הבנתי",
-  "prefs_home_header": "Firefox Home Content",
+  "prefs_home_header": "תוכן מסך הבית של Firefox",
   "prefs_home_description": "בחירת תוכן שיוצג במסך הבית של Firefox.",
   "prefs_section_rows_option": "שורה אחת;{num} שורות",
   "prefs_search_header": "חיפוש ברשת",
   "prefs_topsites_description": "האתרים בהם ביקרת הכי הרבה",
   "prefs_topstories_description2": "תוכן נהדר מכל רחבי הרשת, בהתאמה אישית להעדפותיך",
   "prefs_topstories_options_sponsored_label": "סיפורים ממומנים",
   "prefs_topstories_sponsored_learn_more": "מידע נוסף",
   "prefs_highlights_description": "מבחר של אתרים ששמרת או ביקרת בהם",
--- a/browser/extensions/activity-stream/prerendered/locales/it/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/it/activity-stream-strings.js
@@ -91,15 +91,15 @@ window.gActivityStreamStrings = {
   "section_menu_action_move_down": "Sposta in basso",
   "section_menu_action_privacy_notice": "Informativa sulla privacy",
   "firstrun_title": "Porta Firefox con te",
   "firstrun_content": "Ritrova segnalibri, cronologia, password e altre impostazioni su tutti i tuoi dispositivi.",
   "firstrun_learn_more_link": "Scopri di più sull’account Firefox",
   "firstrun_form_header": "Inserisci email",
   "firstrun_form_sub_header": "per utilizzare Firefox Sync.",
   "firstrun_email_input_placeholder": "Email",
-  "firstrun_invalid_input": "Valid email required",
+  "firstrun_invalid_input": "Inserire un indirizzo email valido",
   "firstrun_extra_legal_links": "Proseguendo, accetto le {terms} e l’{privacy}.",
   "firstrun_terms_of_service": "condizioni di utilizzo del servizio",
   "firstrun_privacy_notice": "informativa sulla privacy",
   "firstrun_continue_to_login": "Continua",
   "firstrun_skip_login": "Ignora questo passaggio"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/km/activity-stream-prerendered-noscripts.html
+++ b/browser/extensions/activity-stream/prerendered/locales/km/activity-stream-prerendered-noscripts.html
@@ -4,14 +4,14 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>ផ្ទាំង​ថ្មី</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ស្វែងរក​បណ្ដាញ</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ស្វែងរក​បណ្ដាញ" title="ស្វែងរក​បណ្ដាញ"/><button id="searchSubmit" class="search-button" title="ស្វែងរក"><span class="sr-only"><span>ស្វែងរក</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>វិបសាយ​លើ​គេ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>បានណែនាំដោយ Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>ប្រធានបទកំពុងពេញនិយម៖</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>រឿងសំខាន់ៗ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Customize your New Tab page"></button></div></div></main></div></div></div>
+    <div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ស្វែងរក​បណ្ដាញ</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ស្វែងរក​បណ្ដាញ" title="ស្វែងរក​បណ្ដាញ"/><button id="searchSubmit" class="search-button" title="ស្វែងរក"><span class="sr-only"><span>ស្វែងរក</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>វិបសាយ​លើ​គេ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>បានណែនាំដោយ Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>ប្រធានបទកំពុងពេញនិយម៖</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>រឿងសំខាន់ៗ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="ប្តូរទំព័រ ផ្ទាំងថ្មី របស់អ្នកតាមបំណង"></button></div></div></main></div></div></div>
     <div id="snippets-container">
       <div id="snippets"></div>
     </div>
   </body>
 </html>
--- a/browser/extensions/activity-stream/prerendered/locales/km/activity-stream-prerendered.html
+++ b/browser/extensions/activity-stream/prerendered/locales/km/activity-stream-prerendered.html
@@ -4,17 +4,17 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>ផ្ទាំង​ថ្មី</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ស្វែងរក​បណ្ដាញ</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ស្វែងរក​បណ្ដាញ" title="ស្វែងរក​បណ្ដាញ"/><button id="searchSubmit" class="search-button" title="ស្វែងរក"><span class="sr-only"><span>ស្វែងរក</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>វិបសាយ​លើ​គេ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>បានណែនាំដោយ Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>ប្រធានបទកំពុងពេញនិយម៖</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>រឿងសំខាន់ៗ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Customize your New Tab page"></button></div></div></main></div></div></div>
+    <div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ស្វែងរក​បណ្ដាញ</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ស្វែងរក​បណ្ដាញ" title="ស្វែងរក​បណ្ដាញ"/><button id="searchSubmit" class="search-button" title="ស្វែងរក"><span class="sr-only"><span>ស្វែងរក</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>វិបសាយ​លើ​គេ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="កែសម្រួលសាយនេះ"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>បានណែនាំដោយ Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>ប្រធានបទកំពុងពេញនិយម៖</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>រឿងសំខាន់ៗ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="ប្តូរទំព័រ ផ្ទាំងថ្មី របស់អ្នកតាមបំណង"></button></div></div></main></div></div></div>
     <div id="snippets-container">
       <div id="snippets"></div>
     </div>
     <script>
 // Don't directly load the following scripts as part of html to let the page
 // finish loading to render the content sooner.
 for (const src of [
   "resource://activity-stream/prerendered/static/activity-stream-initial-state.js",
--- a/browser/extensions/activity-stream/prerendered/locales/km/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/km/activity-stream-strings.js
@@ -22,18 +22,18 @@ window.gActivityStreamStrings = {
   "confirm_history_delete_p1": "តើអ្នកប្រាកដថាអ្នកចង់លុបគ្រប់វត្ថុនៃទំព័រនេះពីប្រវត្តិរបស់អ្នកឬ?",
   "confirm_history_delete_notice_p2": "សកម្មភាពនេះមិនអាចមិនធ្វើឡើង​វិញបានទេ។",
   "menu_action_save_to_pocket": "រក្សាទុកទៅ Pocket",
   "menu_action_delete_pocket": "Delete from Pocket",
   "menu_action_archive_pocket": "Archive in Pocket",
   "menu_action_show_file_mac_os": "Show in Finder",
   "menu_action_show_file_windows": "Open Containing Folder",
   "menu_action_show_file_linux": "Open Containing Folder",
-  "menu_action_show_file_default": "Show File",
-  "menu_action_open_file": "Open File",
+  "menu_action_show_file_default": "បង្ហាញ​ឯកសារ",
+  "menu_action_open_file": "បើកឯកសារ",
   "menu_action_copy_download_link": "Copy Download Link",
   "menu_action_go_to_download_page": "Go to Download Page",
   "menu_action_remove_download": "Remove from History",
   "search_button": "ស្វែងរក",
   "search_header": "{search_engine_name} ស្វែងរក",
   "search_web_placeholder": "ស្វែងរក​បណ្ដាញ",
   "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
   "section_disclaimer_topstories_linktext": "Learn how it works.",
@@ -46,17 +46,17 @@ window.gActivityStreamStrings = {
   "prefs_topstories_description2": "Great content from around the web, personalized for you",
   "prefs_topstories_options_sponsored_label": "Sponsored Stories",
   "prefs_topstories_sponsored_learn_more": "Learn more",
   "prefs_highlights_description": "A selection of sites that you’ve saved or visited",
   "prefs_highlights_options_visited_label": "Visited Pages",
   "prefs_highlights_options_download_label": "Most Recent Download",
   "prefs_highlights_options_pocket_label": "Pages Saved to Pocket",
   "prefs_snippets_description": "Updates from Mozilla and Firefox",
-  "settings_pane_button_label": "Customize your New Tab page",
+  "settings_pane_button_label": "ប្តូរទំព័រ ផ្ទាំងថ្មី របស់អ្នកតាមបំណង",
   "settings_pane_topsites_header": "សាយកំពូល",
   "settings_pane_highlights_header": "រឿងសំខាន់ៗ",
   "settings_pane_highlights_options_bookmarks": "ចំណាំ",
   "settings_pane_snippets_header": "អត្ថបទសង្ខេប",
   "edit_topsites_button_text": "កែសម្រួល",
   "edit_topsites_edit_button": "កែសម្រួលសាយនេះ",
   "topsites_form_add_header": "សាយកំពូលថ្មី",
   "topsites_form_edit_header": "កែសម្រួលសាយកំពូល",
@@ -69,17 +69,17 @@ window.gActivityStreamStrings = {
   "topsites_form_preview_button": "Preview",
   "topsites_form_add_button": "បន្ថែម",
   "topsites_form_save_button": "រក្សាទុក",
   "topsites_form_cancel_button": "បោះបង់",
   "topsites_form_url_validation": "ត្រូវការ URL ដែលត្រឹមត្រូវ",
   "topsites_form_image_validation": "Image failed to load. Try a different URL.",
   "pocket_read_more": "ប្រធានបទកំពុងពេញនិយម៖",
   "pocket_read_even_more": "មើលរឿងរ៉ាវច្រើនទៀត",
-  "highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
+  "highlights_empty_state": "ចាប់ផ្តើមការរុករក ហើយយើងនឹងបង្ហាញអត្ថបទ វីដេអូ និងទំព័រដ៏អស្ចារ្យផ្សេងទៀតដែលអ្នកបានមើល ឬបានចំណាំនៅទីនេះ។",
   "topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
   "manual_migration_explanation2": "សាកល្បងប្រើ Firefox ជាមួយចំណាំ ប្រវត្តិ និងពាក្យសម្ងាត់ពីកម្មវិធីរុករកផ្សេងទៀត។",
   "manual_migration_cancel_button": "ទេ អរគុណ",
   "manual_migration_import_button": "នាំចូលឥឡូវនេះ",
   "error_fallback_default_info": "Oops, something went wrong loading this content.",
   "error_fallback_default_refresh_suggestion": "Refresh page to try again.",
   "section_menu_action_remove_section": "Remove Section",
   "section_menu_action_collapse_section": "Collapse Section",
@@ -96,53 +96,10 @@ window.gActivityStreamStrings = {
   "firstrun_form_header": "Enter your email",
   "firstrun_form_sub_header": "to continue to Firefox Sync",
   "firstrun_email_input_placeholder": "Email",
   "firstrun_invalid_input": "Valid email required",
   "firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
   "firstrun_terms_of_service": "Terms of Service",
   "firstrun_privacy_notice": "Privacy Notice",
   "firstrun_continue_to_login": "Continue",
-  "firstrun_skip_login": "Skip this step",
-  "default_label_loading": "កំពុង​ផ្ទុក...",
-  "header_stories": "រឿងរ៉ាវកំពូល",
-  "header_visit_again": "ទស្សនាម្តងទៀត",
-  "header_bookmarks": "ចំណាំថ្មីៗ",
-  "header_bookmarks_placeholder": "អ្នកមិនមានចំណាំណាមួយនៅឡើយទេ ។",
-  "header_stories_from": "មកពី",
-  "type_label_synced": "បាន​ធ្វើ​សមកាលកម្ម​ពី​ឧបករណ៍​ផ្សេង​ទៀត",
-  "type_label_open": "បើក",
-  "type_label_topic": "ប្រធានបទ",
-  "type_label_now": "ឥឡូវនេះ",
-  "menu_action_copy_address": "ចម្លង​អាសយដ្ឋាន",
-  "menu_action_email_link": "តំណ​អ៊ីមែល...",
-  "search_for_something_with": "ស្វែងរក {search_term} ជាមួយ៖",
-  "search_settings": "ផ្លាស់ប្ដូរ​ការ​កំណត់​ស្វែងរក",
-  "section_info_option": "ព័ត៌មាន",
-  "section_info_send_feedback": "ផ្ញើមតិត្រឡប់",
-  "section_info_privacy_notice": "សេចក្តីជូនដំណឹងអំពីភាពឯកជន",
-  "welcome_title": "ស្វាគមន៍​មក​កាន់​ផ្ទាំង​ថ្មី",
-  "welcome_body": "Firefox នឹង​ប្រើប្រាស់​កន្លែង​ទំនេរ​នេះ ដើម្បី​បង្ហាញ​ចំណាំ អត្ថបទ វីដេអូ និង​ទំព័រ​ដែល​ទាក់ទង​អ្នក​បំផុត ដែល​អ្នក​បាន​ចូល​មើល​ថ្មីៗ​នេះ ដូច្នេះ​អ្នក​អាច​ត្រឡប់​ទៅ​​កាន់​​វា​​វិញ​បាន​យ៉ាងងាយស្រួល។",
-  "welcome_label": "កំពុង​បញ្ជាក់​ការ​រំលេច​របស់​អ្នក",
-  "time_label_less_than_minute": "<1 នាទី",
-  "time_label_minute": "{number} នាទី",
-  "time_label_hour": "{number} ម៉ោង",
-  "time_label_day": "{number} ថ្ងៃ",
-  "settings_pane_header": "ចំណង់ចំណូលចិត្ត ផ្ទាំងថ្មី",
-  "settings_pane_body2": "ជ្រើសរើសអ្វីដែលអ្នកឃើញនៅលើទំព័រនេះ។",
-  "settings_pane_search_header": "ស្វែងរក",
-  "settings_pane_search_body": "ស្វែងរកបណ្តាញពីផ្ទាំងថ្មីរបស់អ្នក។",
-  "settings_pane_topsites_body": "ចូលវេបសាយដែលអ្នកទស្សនាច្រើនបំផុត។",
-  "settings_pane_topsites_options_showmore": "បង្ហាញជួរដេកពីរ",
-  "settings_pane_bookmarks_header": "ចំណាំថ្មីៗ",
-  "settings_pane_bookmarks_body": "ចំណាំថ្មីៗ ដែលបានបង្កើតរបស់អ្នកនៅក្នុងទីតាំងដែលងាយស្រួល។",
-  "settings_pane_visit_again_header": "ទស្សនាម្ដងទៀត",
-  "settings_pane_highlights_options_visited": "សាយដែលបានទស្សនា",
-  "settings_pane_done_button": "ធ្វើរួច",
-  "edit_topsites_showmore_button": "បង្ហាញច្រើនទៀត",
-  "edit_topsites_showless_button": "បង្ហាញតិចជាង​នេះ",
-  "edit_topsites_done_button": "ធ្វើរួច",
-  "edit_topsites_pin_button": "ខ្ទាស់សាយនេះ",
-  "edit_topsites_unpin_button": "ដកខ្ទាស់សាយនេះ",
-  "edit_topsites_dismiss_button": "ច្រានចោលសាយនេះ",
-  "edit_topsites_add_button": "បន្ថែម",
-  "pocket_feedback_header": "បណ្តាញល្អបំផុត ដែលបានវាយតម្លៃដោយមនុស្សជាង 25 លាននាក់។"
+  "firstrun_skip_login": "Skip this step"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-prerendered-noscripts.html
+++ b/browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-prerendered-noscripts.html
@@ -4,14 +4,14 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>ແທັບໃຫມ່</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ຊອກຫາເວັບ</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ຊອກຫາເວັບ" title="ຊອກຫາເວັບ"/><button id="searchSubmit" class="search-button" title="ຊອກ​ຫາ"><span class="sr-only"><span>ຊອກ​ຫາ</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>ເວັບໄຊຕ໌ຍອດນິຍົມ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>ແນະນຳໂດຍ Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>ຫົວຂໍ້ຍອດນິຍົມ:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>ລາຍການເດັ່ນ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="ປັບແຕ່ງຫນ້າແທັບໃຫມ່ຂອງທ່ານ"></button></div></div></main></div></div></div>
+    <div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ຊອກຫາເວັບ</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ຊອກຫາເວັບ" title="ຊອກຫາເວັບ"/><button id="searchSubmit" class="search-button" title="ຊອກ​ຫາ"><span class="sr-only"><span>ຊອກ​ຫາ</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>ເວັບໄຊຕ໌ຍອດນິຍົມ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>ເປີດເມນູບໍລິບົດສ່ວນ</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>ແນະນຳໂດຍ Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>ເປີດເມນູບໍລິບົດສ່ວນ</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>ຫົວຂໍ້ຍອດນິຍົມ:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>ລາຍການເດັ່ນ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>ເປີດເມນູບໍລິບົດສ່ວນ</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="ປັບແຕ່ງຫນ້າແທັບໃຫມ່ຂອງທ່ານ"></button></div></div></main></div></div></div>
     <div id="snippets-container">
       <div id="snippets"></div>
     </div>
   </body>
 </html>
--- a/browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-prerendered.html
+++ b/browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-prerendered.html
@@ -4,17 +4,17 @@
     <meta charset="utf-8">
     <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
     <title>ແທັບໃຫມ່</title>
     <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
     <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
     <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
   </head>
   <body class="activity-stream">
-    <div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ຊອກຫາເວັບ</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ຊອກຫາເວັບ" title="ຊອກຫາເວັບ"/><button id="searchSubmit" class="search-button" title="ຊອກ​ຫາ"><span class="sr-only"><span>ຊອກ​ຫາ</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>ເວັບໄຊຕ໌ຍອດນິຍົມ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>ແນະນຳໂດຍ Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>ຫົວຂໍ້ຍອດນິຍົມ:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>ລາຍການເດັ່ນ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="ປັບແຕ່ງຫນ້າແທັບໃຫມ່ຂອງທ່ານ"></button></div></div></main></div></div></div>
+    <div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>ຊອກຫາເວັບ</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="ຊອກຫາເວັບ" title="ຊອກຫາເວັບ"/><button id="searchSubmit" class="search-button" title="ຊອກ​ຫາ"><span class="sr-only"><span>ຊອກ​ຫາ</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>ເວັບໄຊຕ໌ຍອດນິຍົມ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>ເປີດເມນູບໍລິບົດສ່ວນ</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="ແກ້ໄຂເວັບໄຊທ໌ນີ້"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>ແນະນຳໂດຍ Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>ເປີດເມນູບໍລິບົດສ່ວນ</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>ຫົວຂໍ້ຍອດນິຍົມ:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>ລາຍການເດັ່ນ</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>ເປີດເມນູບໍລິບົດສ່ວນ</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="ປັບແຕ່ງຫນ້າແທັບໃຫມ່ຂອງທ່ານ"></button></div></div></main></div></div></div>
     <div id="snippets-container">
       <div id="snippets"></div>
     </div>
     <script>
 // Don't directly load the following scripts as part of html to let the page
 // finish loading to render the content sooner.
 for (const src of [
   "resource://activity-stream/prerendered/static/activity-stream-initial-state.js",
--- a/browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/lo/activity-stream-strings.js
@@ -1,116 +1,105 @@
 // Note - this is a generated lo file.
 window.gActivityStreamStrings = {
   "newtab_page_title": "ແທັບໃຫມ່",
   "header_top_sites": "ເວັບໄຊຕ໌ຍອດນິຍົມ",
   "header_highlights": "ລາຍການເດັ່ນ",
   "header_recommended_by": "ແນະນຳໂດຍ {provider}",
-  "context_menu_button_sr": "Open context menu for {title}",
-  "section_context_menu_button_sr": "Open the section context menu",
+  "context_menu_button_sr": "ເປີດເມນູບໍລິບົດສຳລັບ {title}",
+  "section_context_menu_button_sr": "ເປີດເມນູບໍລິບົດສ່ວນ",
   "type_label_visited": "ເຂົ້າໄປເບິ່ງມາແລ້ວ",
   "type_label_bookmarked": "ບຸກມາກໄວ້ແລ້ວ",
   "type_label_recommended": "ກຳລັງນິຍົມ",
   "type_label_pocket": "ບັນທຶກລົງໃນ Pocket ແລ້ວ",
   "type_label_downloaded": "ດາວໂຫຼດແລ້ວ",
   "menu_action_bookmark": "ບຸກມາກ",
   "menu_action_remove_bookmark": "ລຶບບຸກມາກອອກ",
   "menu_action_open_new_window": "ເປີດລີ້ງໃນຫນ້າຕ່າງໃຫມ່",
   "menu_action_open_private_window": "ເປີດໃນຫນ້າຕ່າງສ່ວນຕົວໃຫມ່",
   "menu_action_dismiss": "ຍົກເລີກ",
   "menu_action_delete": "ລຶບອອກຈາກປະຫວັດການນຳໃຊ້",
   "menu_action_pin": "ປັກໝຸດ",
   "menu_action_unpin": "ຖອນປັກໝຸດ",
   "confirm_history_delete_p1": "ທ່ານແນ່ໃຈຫຼືບໍ່ວ່າຕ້ອງການລຶບທຸກ instance ຂອງຫນ້ານີ້ອອກຈາກປະຫວັດການໃຊ້ງານຂອງທ່ານ?",
-  "confirm_history_delete_notice_p2": "This action cannot be undone.",
+  "confirm_history_delete_notice_p2": "ການກະທຳນີ້ບໍ່ສາມາດຍົກເລີກໄດ້.",
   "menu_action_save_to_pocket": "ບັນທືກໄປທີ່ Pocket",
-  "menu_action_delete_pocket": "Delete from Pocket",
-  "menu_action_archive_pocket": "Archive in Pocket",
+  "menu_action_delete_pocket": "ລຶບອອກຈາກ Pocket",
+  "menu_action_archive_pocket": "ເກັບຖາວອນໃນ Pocket",
   "menu_action_show_file_mac_os": "ສະແດງໃນ Finder",
   "menu_action_show_file_windows": "ເປີດໂຟນເດີທີ່ບັນຈຸ",
   "menu_action_show_file_linux": "ເປີດໂຟນເດີທີ່ບັນຈຸ",
   "menu_action_show_file_default": "ສະແດງໄຟລ໌",
   "menu_action_open_file": "ເປີດໄຟລ໌",
   "menu_action_copy_download_link": "ສຳເນົາລີ້ງດາວໂຫລດ",
   "menu_action_go_to_download_page": "ໄປທີ່ຫນ້າດາວໂຫລດ",
   "menu_action_remove_download": "ລຶບອອກຈາກປະຫວັດ",
   "search_button": "ຊອກ​ຫາ",
   "search_header": "ຊອກຫາ {search_engine_name}",
   "search_web_placeholder": "ຊອກຫາເວັບ",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
+  "section_disclaimer_topstories": "ເລື່ອງລາວທີ່ຫນ້າສົນໃຈທີ່ສຸດເທິງເວັບ ເຊິ່ງເລືອກຕາມສິ່ງທີ່ທ່ານອ່ານ. ຈາກ Pocket ເຊິ່ງຂະນະນີ້ເປັນສ່ວນຫນຶ່ງຂອງ Mozilla.",
   "section_disclaimer_topstories_linktext": "ສຶກສາວິທີການເຮັດວຽກຂອງມັນ.",
   "section_disclaimer_topstories_buttontext": "ຕົກລົງ, ເຂົ້າໃຈແລ້ວ",
   "prefs_home_header": "ເນື້ອໃນຫນ້າທຳອິດຂອງ Firefox",
-  "prefs_home_description": "Choose what content you want on your Firefox Home screen.",
-  "prefs_section_rows_option": "{num} row;{num} rows",
+  "prefs_home_description": "ເລືອກເນື້ອຫາທີ່ທ່ານຕ້ອງການສະແດງໃນຫນ້າຈໍຫນ້າຫລັກ Firefox ຂອງທ່ານ.",
+  "prefs_section_rows_option": "{num} ແຖວ",
   "prefs_search_header": "ຊອກຫາເວັບ",
-  "prefs_topsites_description": "The sites you visit most",
-  "prefs_topstories_description2": "Great content from around the web, personalized for you",
-  "prefs_topstories_options_sponsored_label": "Sponsored Stories",
+  "prefs_topsites_description": "ເວັບໄຊທ໌ທີ່ທ່ານເຂົ້າເບິ່ງຫລາຍທີ່ສຸດ",
+  "prefs_topstories_description2": "ເນື້ອຫາທີ່ຍອດຢ້ຽມຈາກເວັບຕ່າງໆ, ປັບແຕ່ງໃຫ້ເປັນສ່ວນບຸກຄົນເພື່ອທ່ານ",
+  "prefs_topstories_options_sponsored_label": "ເລື່ອງລາວທີ່ໄດ້ຮັບການສະຫນັບສະຫນູນ",
   "prefs_topstories_sponsored_learn_more": "ສຶກສາເພີ່ມເຕີມ",
-  "prefs_highlights_description": "A selection of sites that you’ve saved or visited",
+  "prefs_highlights_description": "ການຄັດເລືອກເວັບໄຊທ໌ທີ່ທ່ານໄດ້ບັນທຶກໄວ້ຫລືເຂົ້າໄປເບິ່ງມາແລ້ວ",
   "prefs_highlights_options_visited_label": "ຫນ້າທີ່ເຂົ້າໄປເບິ່ງແລ້ວ",
-  "prefs_highlights_options_download_label": "Most Recent Download",
+  "prefs_highlights_options_download_label": "ການດາວໂຫລດລ່າສຸດ",
   "prefs_highlights_options_pocket_label": "ຫນ້າທີ່ບັນທຶກໄວ້ໃນ Pocket",
-  "prefs_snippets_description": "Updates from Mozilla and Firefox",
+  "prefs_snippets_description": "ຂໍ້ມູນອັບເດດຈາກ Mozilla ແລະ Firefox",
   "settings_pane_button_label": "ປັບແຕ່ງຫນ້າແທັບໃຫມ່ຂອງທ່ານ",
   "settings_pane_topsites_header": "ເວັບໄຊທ໌ຍອດນິຍົມ",
   "settings_pane_highlights_header": "ຈຸດເດັ່ນ",
   "settings_pane_highlights_options_bookmarks": "ບຸກມາກ",
   "settings_pane_snippets_header": "ສ່ວນຍ່ອຍ",
   "edit_topsites_button_text": "ແກ້ໄຂ",
   "edit_topsites_edit_button": "ແກ້ໄຂເວັບໄຊທ໌ນີ້",
   "topsites_form_add_header": "ເວັບໄຊທ໌ຍອດນິຍົມໃຫມ່",
   "topsites_form_edit_header": "ແກ້ໄຂເວັບໄຊທ໌ຍອດນິຍົມ",
   "topsites_form_title_label": "ຊື່ເລື່ອງ",
   "topsites_form_title_placeholder": "ປ້ອນຊື່ເລື່ອງ",
   "topsites_form_url_label": "URL",
-  "topsites_form_image_url_label": "Custom Image URL",
+  "topsites_form_image_url_label": "URL ຮູບພາບທີ່ກຳນົດເອງ",
   "topsites_form_url_placeholder": "ພິມຫລືວາງ URL",
-  "topsites_form_use_image_link": "Use a custom image…",
+  "topsites_form_use_image_link": "ໃຊ້ຮູບພາບທີ່ກຳນົດເອງ…",
   "topsites_form_preview_button": "ສະແດງຕົວຢ່າງ",
   "topsites_form_add_button": "ເພີ່ມ",
   "topsites_form_save_button": "ບັນທຶກ",
   "topsites_form_cancel_button": "ຍົກເລີກ",
   "topsites_form_url_validation": "ຕ້ອງການ URL ທີ່ຖືກຕ້ອງ",
-  "topsites_form_image_validation": "Image failed to load. Try a different URL.",
+  "topsites_form_image_validation": "ການໂຫລດຮູບພາບລົ້ມເຫລວ. ລອງໃຊ້ URL ອື່ນ.",
   "pocket_read_more": "ຫົວຂໍ້ຍອດນິຍົມ:",
   "pocket_read_even_more": "ເບິ່ງບົດເລື່ອງເພີ່ມເຕີມ",
   "highlights_empty_state": "ເລີ່ມການທ່ອງເວັບ ແລະ ພວກເຮົາຈະສະແດງເນື້ອຫາ, ວິດີໂອ ແລະ ຫນ້າອື່ນໆບາງສ່ວນທີ່ທ່ານຫາກໍເຂົ້າໄປເບິງມາ ຫລື ຫາກໍໄດ້ບຸກມາກໄວ້ທີ່ນີ້.",
-  "topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
-  "manual_migration_explanation2": "Try Firefox with the bookmarks, history and passwords from another browser.",
+  "topstories_empty_state": "ທ່ານໄດ້ອ່ານເລື່ອງລາວຄົບທັງຫມົດແລ້ວ. ທ່ານສາມາດກັບມາເບິ່ງເລື່ອງລາວເດັ່ນໄດ້ຈາກ {provider} ໃນພາຍຫລັງ. ອົດໃຈຖ້າບໍ່ໄດ້ແມ່ນບໍ່? ເລືອກຫົວຂໍ້ຍອດນິຍົມເພື່ອຄົ້ນຫາເລື່ອງລາວທີ່ຍອດຢ້ຽມຈາກເວັບຕ່າງໆ.",
+  "manual_migration_explanation2": "ລອງໃຊ້ Firefox ດ້ວຍບຸກມາກ, ປະຫວັດການໃຊ້ງານ ແລະລະຫັດຜ່ານຈາກບຣາວເຊີອື່ນ.",
   "manual_migration_cancel_button": "ບໍ່, ຂອບໃຈ",
   "manual_migration_import_button": "ນຳເຂົ້າຕອນນີ້",
-  "error_fallback_default_info": "Oops, something went wrong loading this content.",
-  "error_fallback_default_refresh_suggestion": "Refresh page to try again.",
-  "section_menu_action_remove_section": "Remove Section",
-  "section_menu_action_collapse_section": "Collapse Section",
-  "section_menu_action_expand_section": "Expand Section",
-  "section_menu_action_manage_section": "Manage Section",
-  "section_menu_action_manage_webext": "Manage Extension",
+  "error_fallback_default_info": "ໂອ້ຍ, ມີບາງສິ່ງບາງຢ່າງຜິດພາດໃນການໂຫລດເນື້ອຫານີ້.",
+  "error_fallback_default_refresh_suggestion": "ຣີເຟຣຊຫນ້າເພື່ອລອງອີກຄັ້ງ.",
+  "section_menu_action_remove_section": "ລຶບສ່ວນ",
+  "section_menu_action_collapse_section": "ຍຸບສ່ວນ",
+  "section_menu_action_expand_section": "ຂະຫຍາຍສ່ວນ",
+  "section_menu_action_manage_section": "ຈັດການສ່ວນ",
+  "section_menu_action_manage_webext": "ຈັດການສ່ວນເສີມ",
   "section_menu_action_add_topsite": "ເພີ່ມເວັບໄຊທ໌ຍອດນິຍົມ",
   "section_menu_action_move_up": "ຍ້າຍຂື້ນ",
   "section_menu_action_move_down": "ຍ້າຍລົງ",
   "section_menu_action_privacy_notice": "ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ",
-  "firstrun_title": "Take Firefox with You",
-  "firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
-  "firstrun_learn_more_link": "Learn more about Firefox Accounts",
-  "firstrun_form_header": "Enter your email",
-  "firstrun_form_sub_header": "to continue to Firefox Sync",
-  "firstrun_email_input_placeholder": "Email",
+  "firstrun_title": "ເອົາ Firefox ໄປກັບທ່ານ",
+  "firstrun_content": "ຮັບບຸກມາກ, ປະຫວັດການໃຊ້ງານ, ລະຫັດຜ່ານ ແລະການຕັ້ງຄ່າອື່ນໆໃນທຸກໆອຸປະກອນຂອງທ່ານ.",
+  "firstrun_learn_more_link": "ຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບບັນຊີ Firefox",
+  "firstrun_form_header": "ປ້ອນທີ່ຢູ່ອີເມລຂອງທ່ານ",
+  "firstrun_form_sub_header": "ເພື່ອດຳເນີນການຕໍ່ໄປຍັງ Firefox Sync",
+  "firstrun_email_input_placeholder": "ອີເມລ",
   "firstrun_invalid_input": "Valid email required",
-  "firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
-  "firstrun_terms_of_service": "Terms of Service",
-  "firstrun_privacy_notice": "Privacy Notice",
-  "firstrun_continue_to_login": "Continue",
-  "firstrun_skip_login": "Skip this step",
-  "prefs_restore_defaults_button": "ກູ້ຄືນຄ່າພື້ນຖານ",
-  "settings_pane_header": "ການຕັ້ງຄ່າແທັບໃຫມ່",
-  "settings_pane_body2": "ເລືອກສິ່ງທີ່ທ່ານຕ້ອງການເຫັນໃນຫນ້ານີ້.",
-  "settings_pane_search_header": "ຊອກຫາ",
-  "settings_pane_search_body": "ຊອກຫາເວັບຈາກແທັບໃຫມ່ຂອງທ່ານ.",
-  "settings_pane_topsites_body": "ເຂົ້າເວັບໄຊທ໌ທີ່ທ່ານໄດ້ເຂົ້າໄປຫລາຍທີ່ສຸດ.",
-  "settings_pane_topsites_options_showmore": "ສະແດງເປັນສອງແຖວ",
-  "settings_pane_highlights_options_visited": "ໄຊທ໌ທີ່ເຂົ້າໄປເບິ່ງແລ້ວ",
-  "settings_pane_done_button": "ສຳເລັດ",
-  "settings_pane_topstories_options_sponsored": "ສະແດງບົດເລື່ອງທີ່ໄດ້ຮັບການສະຫນັບສະຫນູນ",
-  "pocket_description": "ຄົ້ນພົບເນື້ອຫາຄຸນນະພາບສູງທີ່ທ່ານອາດຈະພາດໄປ, ດ້ວຍຄວາມຊ່ວຍເຫຼືອຈາກ Pocket, ເຊີ່ງຂະນະນີ້ເປັນສ່ວນໜື່ງຂອງ Mozilla."
+  "firstrun_extra_legal_links": "ໂດຍການດຳເນີນການຕໍ່, ຖືວ່າທ່ານຍອມຮັບ{terms}ແລະ{privacy}.",
+  "firstrun_terms_of_service": "ເງື່ອນໄຂການໃຫ້ບໍລິການ",
+  "firstrun_privacy_notice": "ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ",
+  "firstrun_continue_to_login": "ສືບຕໍ່",
+  "firstrun_skip_login": "ຂ້າມຂັ້ນຕອນນີ້"
 };
deleted file mode 100644
--- a/browser/extensions/activity-stream/prerendered/locales/mix/activity-stream-noscripts.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!doctype html>
-<html lang="mix" dir="ltr">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
-    <title>New Tab</title>
-    <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
-    <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
-    <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
-  </head>
-  <body class="activity-stream">
-    <div id="root"></div>
-    <div id="snippets-container">
-      <div id="snippets"></div>
-    </div>
-  </body>
-</html>
deleted file mode 100644
--- a/browser/extensions/activity-stream/prerendered/locales/mix/activity-stream-prerendered-noscripts.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!doctype html>
-<html lang="mix" dir="ltr">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
-    <title>New Tab</title>
-    <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
-    <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
-    <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
-  </head>
-  <body class="activity-stream">
-    <div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Nduku nu Web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Nduku nu Web" title="Nduku nu Web"/><button id="searchSubmit" class="search-button" title="Nduku"><span class="sr-only"><span>Nduku</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Top Sites</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Recommended by Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>Popular Topics:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Highlights</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Customize your New Tab page"></button></div></div></main></div></div></div>
-    <div id="snippets-container">
-      <div id="snippets"></div>
-    </div>
-  </body>
-</html>
deleted file mode 100644
--- a/browser/extensions/activity-stream/prerendered/locales/mix/activity-stream-prerendered.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!doctype html>
-<html lang="mix" dir="ltr">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
-    <title>New Tab</title>
-    <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
-    <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
-    <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
-  </head>
-  <body class="activity-stream">
-    <div id="root"><div data-reactroot=""><div class="outer-wrapper fixed-to-top"><main><div class="non-collapsible-section"><div class="search-wrapper"><label for="newtab-search-text" class="search-label"><span class="sr-only"><span>Nduku nu Web</span></span></label><input type="search" id="newtab-search-text" maxLength="256" placeholder="Nduku nu Web" title="Nduku nu Web"/><button id="searchSubmit" class="search-button" title="Nduku"><span class="sr-only"><span>Nduku</span></span></button></div></div><div class="body-wrapper"><div class="sections-list"><section class="collapsible-section top-sites animation-enabled" data-section-id="topsites"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-topsites"></span><span>Top Sites</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="top-sites-list"><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder "><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li><li class="top-site-outer placeholder hide-for-narrow"><div class="top-site-inner"><a><div class="tile" aria-hidden="true"><div class="screenshot" style="background-image:none"></div></div><div class="title "><span dir="auto"></span></div></a><button class="context-menu-button edit-button icon" title="Edit this site"></button></div></li></ul><div class="edit-topsites-wrapper"></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="topstories"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-pocket"></span><span>Recommended by Pocket</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul><div class="topic"><span><span>Popular Topics:</span></span><ul></ul></div></div></section><section class="collapsible-section section normal-cards animation-enabled" data-section-id="highlights"><div class="section-top-bar"><h3 class="section-title"><span class="click-target"><span class="icon icon-small-spacer icon-highlights"></span><span>Highlights</span></span></h3><div><button class="context-menu-button icon"><span class="sr-only"><span>Open the section context menu</span></span></button></div></div><div class="section-body"><ul class="section-list" style="padding:0"></ul></div></section></div><div class="prefs-button"><button class="icon icon-settings" title="Customize your New Tab page"></button></div></div></main></div></div></div>
-    <div id="snippets-container">
-      <div id="snippets"></div>
-    </div>
-    <script>
-// Don't directly load the following scripts as part of html to let the page
-// finish loading to render the content sooner.
-for (const src of [
-  "resource://activity-stream/prerendered/static/activity-stream-initial-state.js",
-  "chrome://browser/content/contentSearchUI.js",
-  "chrome://browser/content/contentTheme.js",
-  "resource://activity-stream/vendor/react.js",
-  "resource://activity-stream/vendor/react-dom.js",
-  "resource://activity-stream/vendor/prop-types.js",
-  "resource://activity-stream/vendor/react-intl.js",
-  "resource://activity-stream/vendor/redux.js",
-  "resource://activity-stream/vendor/react-redux.js",
-  "resource://activity-stream/prerendered/mix/activity-stream-strings.js",
-  "resource://activity-stream/data/content/activity-stream.bundle.js"
-]) {
-  // These dynamically inserted scripts by default are async, but we need them
-  // to load in the desired order (i.e., bundle last).
-  const script = document.body.appendChild(document.createElement("script"));
-  script.async = false;
-  script.src = src;
-}
-    </script>
-  </body>
-</html>
deleted file mode 100644
--- a/browser/extensions/activity-stream/prerendered/locales/mix/activity-stream-strings.js
+++ /dev/null
@@ -1,105 +0,0 @@
-// Note - this is a generated mix file.
-window.gActivityStreamStrings = {
-  "newtab_page_title": "New Tab",
-  "header_top_sites": "Top Sites",
-  "header_highlights": "Highlights",
-  "header_recommended_by": "Recommended by {provider}",
-  "context_menu_button_sr": "Open context menu for {title}",
-  "section_context_menu_button_sr": "Open the section context menu",
-  "type_label_visited": "Visited",
-  "type_label_bookmarked": "Bookmarked",
-  "type_label_recommended": "Trending",
-  "type_label_pocket": "Saved to Pocket",
-  "type_label_downloaded": "Downloaded",
-  "menu_action_bookmark": "Bookmark",
-  "menu_action_remove_bookmark": "Remove Bookmark",
-  "menu_action_open_new_window": "Open in a New Window",
-  "menu_action_open_private_window": "Open in a New Private Window",
-  "menu_action_dismiss": "Dismiss",
-  "menu_action_delete": "Delete from History",
-  "menu_action_pin": "Chita'an",
-  "menu_action_unpin": "Unpin",
-  "confirm_history_delete_p1": "Are you sure you want to delete every instance of this page from your history?",
-  "confirm_history_delete_notice_p2": "This action cannot be undone.",
-  "menu_action_save_to_pocket": "Save to Pocket",
-  "menu_action_delete_pocket": "Delete from Pocket",
-  "menu_action_archive_pocket": "Archive in Pocket",
-  "menu_action_show_file_mac_os": "Show in Finder",
-  "menu_action_show_file_windows": "Open Containing Folder",
-  "menu_action_show_file_linux": "Open Containing Folder",
-  "menu_action_show_file_default": "Show File",
-  "menu_action_open_file": "Kuna tutu",
-  "menu_action_copy_download_link": "Copy Download Link",
-  "menu_action_go_to_download_page": "Go to Download Page",
-  "menu_action_remove_download": "Remove from History",
-  "search_button": "Nduku",
-  "search_header": "{search_engine_name} Nduku",
-  "search_web_placeholder": "Nduku nu Web",
-  "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
-  "section_disclaimer_topstories_linktext": "Learn how it works.",
-  "section_disclaimer_topstories_buttontext": "Okay, got it",
-  "prefs_home_header": "Firefox Home Content",
-  "prefs_home_description": "Choose what content you want on your Firefox Home screen.",
-  "prefs_section_rows_option": "{num} row;{num} rows",
-  "prefs_search_header": "Web Search",
-  "prefs_topsites_description": "The sites you visit most",
-  "prefs_topstories_description2": "Great content from around the web, personalized for you",
-  "prefs_topstories_options_sponsored_label": "Sponsored Stories",
-  "prefs_topstories_sponsored_learn_more": "Skua'a kuakaa",
-  "prefs_highlights_description": "A selection of sites that you’ve saved or visited",
-  "prefs_highlights_options_visited_label": "Visited Pages",
-  "prefs_highlights_options_download_label": "Most Recent Download",
-  "prefs_highlights_options_pocket_label": "Pages Saved to Pocket",
-  "prefs_snippets_description": "Updates from Mozilla and Firefox",
-  "settings_pane_button_label": "Customize your New Tab page",
-  "settings_pane_topsites_header": "Top Sites",
-  "settings_pane_highlights_header": "Highlights",
-  "settings_pane_highlights_options_bookmarks": "Bookmarks",
-  "settings_pane_snippets_header": "Snippets",
-  "edit_topsites_button_text": "Sama",
-  "edit_topsites_edit_button": "Edit this site",
-  "topsites_form_add_header": "New Top Site",
-  "topsites_form_edit_header": "Edit Top Site",
-  "topsites_form_title_label": "Title",
-  "topsites_form_title_placeholder": "Enter a title",
-  "topsites_form_url_label": "URL",
-  "topsites_form_image_url_label": "Custom Image URL",
-  "topsites_form_url_placeholder": "Type or paste a URL",
-  "topsites_form_use_image_link": "Use a custom image…",
-  "topsites_form_preview_button": "Preview",
-  "topsites_form_add_button": "Chikaa",
-  "topsites_form_save_button": "Chika vaà",
-  "topsites_form_cancel_button": "Kunchatu",
-  "topsites_form_url_validation": "Valid URL required",
-  "topsites_form_image_validation": "Image failed to load. Try a different URL.",
-  "pocket_read_more": "Popular Topics:",
-  "pocket_read_even_more": "View More Stories",
-  "highlights_empty_state": "Start browsing, and we’ll show some of the great articles, videos, and other pages you’ve recently visited or bookmarked here.",
-  "topstories_empty_state": "You’ve caught up. Check back later for more top stories from {provider}. Can’t wait? Select a popular topic to find more great stories from around the web.",
-  "manual_migration_explanation2": "Try Firefox with the bookmarks, history and passwords from another browser.",
-  "manual_migration_cancel_button": "No Thanks",
-  "manual_migration_import_button": "Import Now",
-  "error_fallback_default_info": "Oops, something went wrong loading this content.",
-  "error_fallback_default_refresh_suggestion": "Refresh page to try again.",
-  "section_menu_action_remove_section": "Remove Section",
-  "section_menu_action_collapse_section": "Collapse Section",
-  "section_menu_action_expand_section": "Expand Section",
-  "section_menu_action_manage_section": "Manage Section",
-  "section_menu_action_manage_webext": "Manage Extension",
-  "section_menu_action_add_topsite": "Add Top Site",
-  "section_menu_action_move_up": "Kanta kuchi",
-  "section_menu_action_move_down": "Kanta ninu",
-  "section_menu_action_privacy_notice": "Privacy Notice",
-  "firstrun_title": "Take Firefox with You",
-  "firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
-  "firstrun_learn_more_link": "Learn more about Firefox Accounts",
-  "firstrun_form_header": "Enter your email",
-  "firstrun_form_sub_header": "to continue to Firefox Sync",
-  "firstrun_email_input_placeholder": "Email",
-  "firstrun_invalid_input": "Valid email required",
-  "firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
-  "firstrun_terms_of_service": "Terms of Service",
-  "firstrun_privacy_notice": "Privacy Notice",
-  "firstrun_continue_to_login": "Continue",
-  "firstrun_skip_login": "Skip this step"
-};
deleted file mode 100644
--- a/browser/extensions/activity-stream/prerendered/locales/mix/activity-stream.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!doctype html>
-<html lang="mix" dir="ltr">
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline' resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
-    <title>New Tab</title>
-    <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
-    <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
-    <link rel="stylesheet" href="resource://activity-stream/css/activity-stream.css" />
-  </head>
-  <body class="activity-stream">
-    <div id="root"></div>
-    <div id="snippets-container">
-      <div id="snippets"></div>
-    </div>
-    <script>
-// Don't directly load the following scripts as part of html to let the page
-// finish loading to render the content sooner.
-for (const src of [
-  "chrome://browser/content/contentSearchUI.js",
-  "chrome://browser/content/contentTheme.js",
-  "resource://activity-stream/vendor/react.js",
-  "resource://activity-stream/vendor/react-dom.js",
-  "resource://activity-stream/vendor/prop-types.js",
-  "resource://activity-stream/vendor/react-intl.js",
-  "resource://activity-stream/vendor/redux.js",
-  "resource://activity-stream/vendor/react-redux.js",
-  "resource://activity-stream/prerendered/mix/activity-stream-strings.js",
-  "resource://activity-stream/data/content/activity-stream.bundle.js"
-]) {
-  // These dynamically inserted scripts by default are async, but we need them
-  // to load in the desired order (i.e., bundle last).
-  const script = document.body.appendChild(document.createElement("script"));
-  script.async = false;
-  script.src = src;
-}
-    </script>
-  </body>
-</html>
--- a/browser/extensions/activity-stream/prerendered/locales/ms/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/ms/activity-stream-strings.js
@@ -35,17 +35,17 @@ window.gActivityStreamStrings = {
   "search_button": "Cari",
   "search_header": "{search_engine_name} Cari",
   "search_web_placeholder": "Cari dalam Web",
   "section_disclaimer_topstories": "Kisah paling menarik dalam web yang dipilih berdasarkan yang anda baca. Dari Pocket, kini sebahagian daripada Mozilla.",
   "section_disclaimer_topstories_linktext": "Ketahui fungsi ciri ini.",
   "section_disclaimer_topstories_buttontext": "Ok, faham",
   "prefs_home_header": "Kandungan Halaman Utama Firefox",
   "prefs_home_description": "Pilih kandungan yang mahu dalam skrin Halaman Utama Firefox.",
-  "prefs_section_rows_option": "{num} rows",
+  "prefs_section_rows_option": "{num} baris",
   "prefs_search_header": "Carian Web",
   "prefs_topsites_description": "Laman yang anda kerap lawati",
   "prefs_topstories_description2": "Kandungan hebat dalam seluruh web, khas untuk anda",
   "prefs_topstories_options_sponsored_label": "Kisah Tajaan",
   "prefs_topstories_sponsored_learn_more": "Ketahui selanjutnya",
   "prefs_highlights_description": "Pilihan laman yang anda sudah simpan atau lawati",
   "prefs_highlights_options_visited_label": "Halaman Dilawati",
   "prefs_highlights_options_download_label": "Muat Turun Terbaru",
--- a/browser/extensions/activity-stream/prerendered/locales/nl/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/nl/activity-stream-strings.js
@@ -91,15 +91,15 @@ window.gActivityStreamStrings = {
   "section_menu_action_move_down": "Omlaag verplaatsen",
   "section_menu_action_privacy_notice": "Privacyverklaring",
   "firstrun_title": "Neem Firefox met u mee",
   "firstrun_content": "Bereik uw bladwijzers, geschiedenis, wachtwoorden en andere instellingen op al uw apparaten.",
   "firstrun_learn_more_link": "Meer info over Firefox Accounts",
   "firstrun_form_header": "Voer uw e-mailadres in",
   "firstrun_form_sub_header": "om door te gaan naar Firefox Sync",
   "firstrun_email_input_placeholder": "E-mailadres",
-  "firstrun_invalid_input": "Valid email required",
+  "firstrun_invalid_input": "Geldig e-mailadres vereist",
   "firstrun_extra_legal_links": "Door verder te gaan, gaat u akkoord met de {terms} en {privacy}.",
   "firstrun_terms_of_service": "Servicevoorwaarden",
   "firstrun_privacy_notice": "Privacyverklaring",
   "firstrun_continue_to_login": "Doorgaan",
   "firstrun_skip_login": "Deze stap overslaan"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/ru/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/ru/activity-stream-strings.js
@@ -33,18 +33,18 @@ window.gActivityStreamStrings = {
   "menu_action_go_to_download_page": "Перейти на страницу загрузки",
   "menu_action_remove_download": "Удалить из истории",
   "search_button": "Искать",
   "search_header": "Искать в {search_engine_name}",
   "search_web_placeholder": "Искать в Интернете",
   "section_disclaimer_topstories": "Самые интересные статьи со всего Интернета, выбираемые на основе ваших интересов. От Pocket, который теперь является частью Mozilla.",
   "section_disclaimer_topstories_linktext": "Узнайте, как это работает.",
   "section_disclaimer_topstories_buttontext": "Ок, понятно",
-  "prefs_home_header": "Домашний экран Firefox",
-  "prefs_home_description": "Выберите, какое содержимое вы хотите видеть на домашнем экране Firefox.",
+  "prefs_home_header": "Домашняя страница Firefox",
+  "prefs_home_description": "Выберите, какое содержимое вы хотите видеть на домашней странице Firefox.",
   "prefs_section_rows_option": "{num} столбец;{num} столбца;{num} столбцов",
   "prefs_search_header": "Поиск в Интернете",
   "prefs_topsites_description": "Сайты, которые вы чаще всего посещаете",
   "prefs_topstories_description2": "Отличный контент со всего Интернета, отобранный по вашему вкусу",
   "prefs_topstories_options_sponsored_label": "Статьи спонсоров",
   "prefs_topstories_sponsored_learn_more": "Подробнее",
   "prefs_highlights_description": "Избранные сайты, которые вы сохранили или посещали",
   "prefs_highlights_options_visited_label": "Посещённые страницы",
--- a/browser/extensions/activity-stream/prerendered/locales/ur/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/ur/activity-stream-strings.js
@@ -5,56 +5,56 @@ window.gActivityStreamStrings = {
   "header_highlights": "شہ سرخياں",
   "header_recommended_by": "{provider} کی جانب سے تجویز کردہ",
   "context_menu_button_sr": "Open context menu for {title}",
   "section_context_menu_button_sr": "Open the section context menu",
   "type_label_visited": "دورہ شدہ",
   "type_label_bookmarked": "نشان شدہ",
   "type_label_recommended": "رجحان سازی",
   "type_label_pocket": "Pocket میں محفوظ شدہ",
-  "type_label_downloaded": "Downloaded",
+  "type_label_downloaded": "ڈاؤن لوڈ شدہ",
   "menu_action_bookmark": "نشانی",
   "menu_action_remove_bookmark": "نشانى ہٹائيں",
   "menu_action_open_new_window": "نئے دریچے میں کھولیں",
   "menu_action_open_private_window": "نئی نجی دریچے میں کھولیں",
   "menu_action_dismiss": "برخاست کریں",
   "menu_action_delete": "تاریخ سے حذف کریں",
   "menu_action_pin": "پن",
   "menu_action_unpin": "ان پن",
   "confirm_history_delete_p1": "کیا آپ کو یقین ہے کہ آپ اس صفحہ کا ہر نمونہ اپنے سابقات سے حذف کرنا چاہتے ہیں؟",
   "confirm_history_delete_notice_p2": "یہ عمل کلعدم نہیں ہو سکتا۔",
   "menu_action_save_to_pocket": "Pocket میں محفوظ کریں",
   "menu_action_delete_pocket": "Pocket سے جزف کریں",
   "menu_action_archive_pocket": "Archive in Pocket",
   "menu_action_show_file_mac_os": "Show in Finder",
   "menu_action_show_file_windows": "Open Containing Folder",
   "menu_action_show_file_linux": "Open Containing Folder",
-  "menu_action_show_file_default": "Show File",
-  "menu_action_open_file": "Open File",
-  "menu_action_copy_download_link": "Copy Download Link",
+  "menu_action_show_file_default": "مسل دکھائیں",
+  "menu_action_open_file": "مسل کھولیں",
+  "menu_action_copy_download_link": "ڈاؤن لوڈ ربط نقل کریں",
   "menu_action_go_to_download_page": "Go to Download Page",
-  "menu_action_remove_download": "Remove from History",
+  "menu_action_remove_download": "سابقات سے ہٹائیں",
   "search_button": "تلاش",
   "search_header": "{search_engine_name} پر تلاش کریں",
   "search_web_placeholder": "ويب پر تلاش کريں",
   "section_disclaimer_topstories": "The most interesting stories on the web, selected based on what you read. From Pocket, now part of Mozilla.",
   "section_disclaimer_topstories_linktext": "سیکھیں کہ یہ کیسے کام کرتا ہے۔",
   "section_disclaimer_topstories_buttontext": "ٹھیک ہے مجھے سمجھ آگئی ہے",
   "prefs_home_header": "Firefox ابتائی مواد",
   "prefs_home_description": "Choose what content you want on your Firefox Home screen.",
   "prefs_section_rows_option": "{num} row;{num} rows",
-  "prefs_search_header": "Web Search",
+  "prefs_search_header": "وءب تلاش",
   "prefs_topsites_description": "سائٹس جو آُپ سب سے زیادہ ملاحظہ کرتے ہیں",
   "prefs_topstories_description2": "Great content from around the web, personalized for you",
-  "prefs_topstories_options_sponsored_label": "Sponsored Stories",
+  "prefs_topstories_options_sponsored_label": "سرپرست شدہ کہاناں",
   "prefs_topstories_sponsored_learn_more": "مزید سیکھیں",
   "prefs_highlights_description": "A selection of sites that you’ve saved or visited",
-  "prefs_highlights_options_visited_label": "Visited Pages",
+  "prefs_highlights_options_visited_label": "دورہ کردہ صفحہات",
   "prefs_highlights_options_download_label": "Most Recent Download",
-  "prefs_highlights_options_pocket_label": "Pages Saved to Pocket",
+  "prefs_highlights_options_pocket_label": "صفحات Pocket میں محفوظ کر دیئے گئے ہیں",
   "prefs_snippets_description": "Mozilla اورFirefox کی جانب سے تازہ کاریاں",
   "settings_pane_button_label": "اپنے نئے ٹیب کہ صفحہ کی تخصیص کریں",
   "settings_pane_topsites_header": "بہترین سائٹیں",
   "settings_pane_highlights_header": "شہ سرخياں",
   "settings_pane_highlights_options_bookmarks": "نشانیاں",
   "settings_pane_snippets_header": "سنپیٹ",
   "edit_topsites_button_text": "تدوین",
   "edit_topsites_edit_button": "اس سائٹ کی تدوین کریں",
@@ -80,36 +80,26 @@ window.gActivityStreamStrings = {
   "manual_migration_cancel_button": "نہیں شکریہ",
   "manual_migration_import_button": "ابھی درآمد کری",
   "error_fallback_default_info": "Oops, something went wrong loading this content.",
   "error_fallback_default_refresh_suggestion": "Refresh page to try again.",
   "section_menu_action_remove_section": "Remove Section",
   "section_menu_action_collapse_section": "Collapse Section",
   "section_menu_action_expand_section": "Expand Section",
   "section_menu_action_manage_section": "Manage Section",
-  "section_menu_action_manage_webext": "Manage Extension",
+  "section_menu_action_manage_webext": "توسیع بندرست کریں",
   "section_menu_action_add_topsite": "Add Top Site",
   "section_menu_action_move_up": "اوپر کریں",
   "section_menu_action_move_down": "نیچے کریں",
   "section_menu_action_privacy_notice": "رازداری کا نوٹس",
   "firstrun_title": "Take Firefox with You",
   "firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
   "firstrun_learn_more_link": "Learn more about Firefox Accounts",
   "firstrun_form_header": "Enter your email",
   "firstrun_form_sub_header": "to continue to Firefox Sync",
-  "firstrun_email_input_placeholder": "Email",
+  "firstrun_email_input_placeholder": "ای میل",
   "firstrun_invalid_input": "Valid email required",
   "firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
   "firstrun_terms_of_service": "Terms of Service",
   "firstrun_privacy_notice": "Privacy Notice",
-  "firstrun_continue_to_login": "Continue",
-  "firstrun_skip_login": "Skip this step",
-  "prefs_restore_defaults_button": "طےشدہ بحال کریں",
-  "prefs_topstories_description": "اعلی میعار کا مواد جو شاید آپ بصورت دیگر کھو دیں",
-  "settings_pane_header": "نئے َٹیب کی ترجیحات",
-  "settings_pane_body2": "انتخاب کریں آپ اس صفحہ پر کیا دیکھنا چاہیں گے۔",
-  "settings_pane_search_header": "تلاش",
-  "settings_pane_search_body": "اپنے نئے ٹیب سے وہب پر تلاش کریں۔",
-  "settings_pane_topsites_body": "اپنی سب سے زیادہ دورہ کردہ ویب سائٹ تک رسائی حاصل کریں۔",
-  "settings_pane_topsites_options_showmore": "دو قطاریں دکھائیں",
-  "settings_pane_highlights_options_visited": "ملاحظہ کیے گئے سائٹس",
-  "settings_pane_done_button": "ہوگیا"
+  "firstrun_continue_to_login": "جاری رکھیں",
+  "firstrun_skip_login": "Skip this step"
 };
--- a/browser/extensions/activity-stream/prerendered/locales/vi/activity-stream-strings.js
+++ b/browser/extensions/activity-stream/prerendered/locales/vi/activity-stream-strings.js
@@ -11,17 +11,17 @@ window.gActivityStreamStrings = {
   "type_label_recommended": "Xu hướng",
   "type_label_pocket": "Đã lưu vào Pocket",
   "type_label_downloaded": "Đã tải về",
   "menu_action_bookmark": "Đánh dấu",
   "menu_action_remove_bookmark": "Xóa đánh dấu",
   "menu_action_open_new_window": "Mở trong Cửa Sổ Mới",
   "menu_action_open_private_window": "Mở trong cửa sổ riêng tư mới",
   "menu_action_dismiss": "Bỏ qua",
-  "menu_action_delete": "Xóa từ lịch xử",
+  "menu_action_delete": "Xóa khỏi lịch sử",
   "menu_action_pin": "Ghim",
   "menu_action_unpin": "Bỏ ghim",
   "confirm_history_delete_p1": "Bạn có chắc bạn muốn xóa bỏ mọi thứ của trang này từ lịch sử?",
   "confirm_history_delete_notice_p2": "Hành động này không thể hoàn tác.",
   "menu_action_save_to_pocket": "Lưu vào Pocket",
   "menu_action_delete_pocket": "Xóa khỏi Pocket",
   "menu_action_archive_pocket": "Lưu trữ trong Pocket",
   "menu_action_show_file_mac_os": "Show in Finder",
--- a/browser/extensions/activity-stream/test/functional/mochitest/browser_asrouter_targeting.js
+++ b/browser/extensions/activity-stream/test/functional/mochitest/browser_asrouter_targeting.js
@@ -1,12 +1,16 @@
 ChromeUtils.defineModuleGetter(this, "ASRouterTargeting",
 "resource://activity-stream/lib/ASRouterTargeting.jsm");
 ChromeUtils.defineModuleGetter(this, "ProfileAge",
   "resource://gre/modules/ProfileAge.jsm");
+ChromeUtils.defineModuleGetter(this, "AddonManager",
+  "resource://gre/modules/AddonManager.jsm");
+
+const {AddonTestUtils} = ChromeUtils.import("resource://testing-common/AddonTestUtils.jsm", {});
 
 // ASRouterTargeting.isMatch
 add_task(async function should_do_correct_targeting() {
   is(await ASRouterTargeting.isMatch("FOO", {}, {FOO: true}), true, "should return true for a matching value");
   is(await ASRouterTargeting.isMatch("!FOO", {}, {FOO: true}), false, "should return false for a non-matching value");
 });
 
 add_task(async function should_handle_async_getters() {
@@ -61,8 +65,67 @@ add_task(async function checkhasFxAccoun
   await pushPrefs(["services.sync.username", "someone@foo.com"]);
   is(await ASRouterTargeting.Environment.hasFxAccount, true,
     "should return true if a fx account is set");
 
   const message = {id: "foo", targeting: "hasFxAccount"};
   is(await ASRouterTargeting.findMatchingMessage([message], {}), message,
     "should select correct item by hasFxAccount");
 });
+
+AddonTestUtils.initMochitest(this);
+
+add_task(async function checkAddonsInfo() {
+  const FAKE_ID = "testaddon@tests.mozilla.org";
+  const FAKE_NAME = "Test Addon";
+  const FAKE_VERSION = "0.5.7";
+
+  const xpi = AddonTestUtils.createTempWebExtensionFile({
+    manifest: {
+      applications: {gecko: {id: FAKE_ID}},
+      name: FAKE_NAME,
+      version: FAKE_VERSION
+    }
+  });
+
+  await Promise.all([
+    AddonTestUtils.promiseWebExtensionStartup(FAKE_ID),
+    AddonManager.installTemporaryAddon(xpi)
+  ]);
+
+  const {addons} = await AddonManager.getActiveAddons(["extension", "service"]);
+
+  const {addons: asRouterAddons, isFullData} = await ASRouterTargeting.Environment.addonsInfo;
+
+  ok(addons.every(({id}) => asRouterAddons[id]), "should contain every addon");
+
+  ok(Object.getOwnPropertyNames(asRouterAddons).every(id => addons.some(addon => addon.id === id)),
+    "should contain no incorrect addons");
+
+  const testAddon = asRouterAddons[FAKE_ID];
+
+  ok(Object.prototype.hasOwnProperty.call(testAddon, "version") && testAddon.version === FAKE_VERSION,
+    "should correctly provide `version` property");
+
+  ok(Object.prototype.hasOwnProperty.call(testAddon, "type") && testAddon.type === "extension",
+    "should correctly provide `type` property");
+
+  ok(Object.prototype.hasOwnProperty.call(testAddon, "isSystem") && testAddon.isSystem === false,
+    "should correctly provide `isSystem` property");
+
+  ok(Object.prototype.hasOwnProperty.call(testAddon, "isWebExtension") && testAddon.isWebExtension === true,
+    "should correctly provide `isWebExtension` property");
+
+  // As we installed our test addon the addons database must be initialised, so
+  // (in this test environment) we expect to receive "full" data
+
+  ok(isFullData, "should receive full data");
+
+  ok(Object.prototype.hasOwnProperty.call(testAddon, "name") && testAddon.name === FAKE_NAME,
+    "should correctly provide `name` property from full data");
+
+  ok(Object.prototype.hasOwnProperty.call(testAddon, "userDisabled") && testAddon.userDisabled === false,
+    "should correctly provide `userDisabled` property from full data");
+
+  ok(Object.prototype.hasOwnProperty.call(testAddon, "installDate") &&
+    (Math.abs(new Date() - new Date(testAddon.installDate)) < 60 * 1000),
+    "should correctly provide `installDate` property from full data");
+});
--- a/browser/extensions/activity-stream/test/unit/content-src/components/ComponentPerfTimer.test.jsx
+++ b/browser/extensions/activity-stream/test/unit/content-src/components/ComponentPerfTimer.test.jsx
@@ -218,30 +218,29 @@ describe("<ComponentPerfTimer>", () => {
 
       instance._maybeSendPaintedEvent();
 
       spy.neverCalledWith(instance._sendPaintedEvent);
     });
   });
 
   describe("#_afterFramePaint", () => {
-    it("should call callback after the requestAnimationFrame callback returns", done => {
-      // Setting the callback to done is the test that it does finally get
+    it("should call callback after the requestAnimationFrame callback returns", () => new Promise(resolve => {
+      // Setting the callback to resolve is the test that it does finally get
       // called at the correct time, after the event loop ticks again.
       // If it doesn't get called, this test will time out.
-      this.callback = () => done();
-      sandbox.spy(this, "callback");
+      const callback = sandbox.spy(resolve);
 
       const instance = wrapper.instance();
 
-      instance._afterFramePaint(this.callback);
+      instance._afterFramePaint(callback);
 
-      assert.notCalled(this.callback);
+      assert.notCalled(callback);
       mockRaf.step({count: 1});
-    });
+    }));
   });
 
   describe("#_sendBadStateEvent", () => {
     it("should call perfSvc.mark", () => {
       sandbox.spy(perfSvc, "mark");
       const key = `${DEFAULT_PROPS.id}_data_ready_ts`;
 
       wrapper.instance()._sendBadStateEvent();
--- a/browser/extensions/activity-stream/test/unit/content-src/components/StartupOverlay.test.jsx
+++ b/browser/extensions/activity-stream/test/unit/content-src/components/StartupOverlay.test.jsx
@@ -6,16 +6,21 @@ import {_StartupOverlay as StartupOverla
 describe("<StartupOverlay>", () => {
   let wrapper;
   let dispatch;
   beforeEach(() => {
     dispatch = sinon.stub();
     wrapper = mountWithIntl(<StartupOverlay dispatch={dispatch} />);
   });
 
+  it("should not render if state.show is false", () => {
+    wrapper.setState({overlayRemoved: true});
+    assert.isTrue(wrapper.isEmptyRender());
+  });
+
   it("should emit UserEvent SKIPPED_SIGNIN when you click the skip button", () => {
     let skipButton = wrapper.find(".skip-button");
     assert.ok(skipButton.exists());
     skipButton.simulate("click");
 
     assert.calledOnce(dispatch);
     assert.isUserEventAction(dispatch.firstCall.args[0]);
     assert.calledWith(dispatch, ac.UserEvent({event: at.SKIPPED_SIGNIN}));
--- a/browser/extensions/activity-stream/test/unit/lib/AboutPreferences.test.js
+++ b/browser/extensions/activity-stream/test/unit/lib/AboutPreferences.test.js
@@ -124,39 +124,42 @@ describe("AboutPreferences Feed", () => 
       assert.deepEqual(strings, testStrings);
     });
   });
   describe("#renderPreferences", () => {
     let node;
     let strings;
     let prefStructure;
     let Preferences;
+    let gHomePane;
     const testRender = () => instance.renderPreferences({
       document: {
         createElementNS: sandbox.stub().returns(node),
         createProcessingInstruction: sandbox.stub(),
         getElementById: sandbox.stub().returns(node),
         insertBefore: sandbox.stub().returnsArg(0)
       },
-      Preferences
+      Preferences,
+      gHomePane
     }, strings, prefStructure);
     beforeEach(() => {
       node = {
         appendChild: sandbox.stub().returnsArg(0),
         classList: {add: sandbox.stub()},
         cloneNode: sandbox.stub().returnsThis(),
         insertAdjacentElement: sandbox.stub().returnsArg(1),
         setAttribute: sandbox.stub()
       };
       strings = {};
       prefStructure = [];
       Preferences = {
         add: sandbox.stub(),
         get: sandbox.stub().returns({})
       };
+      gHomePane = {toggleRestoreDefaultsBtn: sandbox.stub()};
     });
     describe("#formatString", () => {
       it("should fall back to string id if missing", () => {
         testRender();
 
         assert.equal(node.textContent, "prefs_home_description");
       });
       it("should use provided plain string", () => {
@@ -226,33 +229,43 @@ describe("AboutPreferences Feed", () => 
         const icon = "chrome://the/icon.svg";
         prefStructure = [{icon}];
 
         testRender();
 
         assert.calledWith(node.setAttribute, "src", icon);
       });
     });
+    describe("title line", () => {
+      it("should render a title", () => {
+        const titleString = "the_title";
+        prefStructure = [{pref: {titleString}}];
+
+        testRender();
+
+        assert.calledWith(node.setAttribute, "label", titleString);
+      });
+      it("should add a link for top stories", () => {
+        const href = "https://disclaimer/";
+        prefStructure = [{disclaimer: {link: {href}}, id: "topstories"}];
+
+        testRender();
+
+        assert.calledWith(node.setAttribute, "href", href);
+      });
+    });
     describe("description line", () => {
       it("should render a description", () => {
         const descString = "the_desc";
         prefStructure = [{pref: {descString}}];
 
         testRender();
 
         assert.equal(node.textContent, descString);
       });
-      it("should add a link for top stories", () => {
-        const href = "https://disclaimer/";
-        prefStructure = [{disclaimer: {link: {href}}, id: "topstories", pref: {descString: "some_desc"}}];
-
-        testRender();
-
-        assert.calledWith(node.setAttribute, "href", href);
-      });
       it("should render rows dropdown with appropriate number", () => {
         prefStructure = [{rowsPref: "row_pref", maxRows: 3, pref: {descString: "foo"}}];
 
         testRender();
 
         assert.calledWith(node.setAttribute, "value", 1);
         assert.calledWith(node.setAttribute, "value", 2);
         assert.calledWith(node.setAttribute, "value", 3);
@@ -263,10 +276,17 @@ describe("AboutPreferences Feed", () => 
         const titleString = "im_nested";
         prefStructure = [{pref: {nestedPrefs: [{titleString}]}}];
 
         testRender();
 
         assert.calledWith(node.setAttribute, "label", titleString);
       });
     });
+    describe("restore defaults btn", () => {
+      it("should call toggleRestoreDefaultsBtn", () => {
+        testRender();
+
+        assert.calledOnce(gHomePane.toggleRestoreDefaultsBtn);
+      });
+    });
   });
 });
--- a/browser/extensions/activity-stream/test/unit/lib/TopStoriesFeed.test.js
+++ b/browser/extensions/activity-stream/test/unit/lib/TopStoriesFeed.test.js
@@ -948,18 +948,17 @@ describe("Top Stories Feed", () => {
         "timeSegments": {},
         "version": "v1"
       };
 
       instance.affinityProvider = undefined;
       instance.cache.get = () => ({domainAffinities});
 
       await instance.loadCachedData();
-      assert.isUndefined(this.affinityProvider);
-
+      assert.isUndefined(instance.affinityProvider);
       instance.personalized = true;
       await instance.loadCachedData();
       assert.isDefined(instance.affinityProvider);
       assert.deepEqual(instance.affinityProvider.timeSegments, domainAffinities.timeSegments);
       assert.equal(instance.affinityProvider.maxHistoryQueryResults, domainAffinities.maxHistoryQueryResults);
       assert.deepEqual(instance.affinityProvider.parameterSets, domainAffinities.parameterSets);
       assert.deepEqual(instance.affinityProvider.scores, domainAffinities.scores);
       assert.deepEqual(instance.affinityProvider.version, domainAffinities.version);
--- a/browser/extensions/activity-stream/webpack.prerender.config.js
+++ b/browser/extensions/activity-stream/webpack.prerender.config.js
@@ -5,16 +5,17 @@ const webpack = require("webpack");
 const srcPath = "content-src/activity-stream-prerender.jsx";
 
 const banner = `
 NOTE: This file is generated by webpack from ${srcPath}
 using the buildmc:html npm task.
 `;
 
 module.exports = Object.assign({}, webpackConfig, {
+  mode: "none",
   target: "node",
   devtool: "sourcemap",
   entry: path.join(__dirname, srcPath),
   output: {
     path: path.join(__dirname, "bin"),
     filename: "prerender.js",
     libraryTarget: "commonjs2"
   },
--- a/browser/extensions/activity-stream/webpack.system-addon.config.js
+++ b/browser/extensions/activity-stream/webpack.system-addon.config.js
@@ -1,16 +1,17 @@
 const path = require("path");
 const webpack = require("webpack");
 
 const absolute = relPath => path.join(__dirname, relPath);
 
 const resourcePathRegEx = /^resource:\/\/activity-stream\//;
 
 module.exports = {
+  mode: "none",
   entry: absolute("content-src/activity-stream.jsx"),
   output: {
     path: absolute("data/content"),
     filename: "activity-stream.bundle.js"
   },
   devtool: "source-map",
   plugins: [new webpack.optimize.ModuleConcatenationPlugin()],
   module: {
--- a/browser/extensions/activity-stream/yamscripts.yml
+++ b/browser/extensions/activity-stream/yamscripts.yml
@@ -10,17 +10,17 @@ scripts:
   # Run the activity-stream mochitests with the browser toolbox debugger.
   # Often handy in combination with adding a "debugger" statement in your
   # mochitest somewhere.
   mochitest-debug: (cd $npm_package_config_mc_dir && ./mach mochitest --jsdebugger browser/extensions/activity-stream/test/functional/mochitest)
 
 # bundle: Build all assets for activity stream
   bundle:
     locales: pontoon-to-json --src locales --dest data
-    webpack: webpack --config webpack.system-addon.config.js --display-optimization-bailout
+    webpack: webpack --config webpack.system-addon.config.js
     css: node-sass --source-map true --source-map-contents content-src/styles -o css
     html: rimraf prerendered && webpack --config webpack.prerender.config.js && node ./bin/render-activity-stream-html.js
 
 # buildmc: Export the bootstraped add-on to mozilla central
   buildmc:
     pre: rimraf $npm_package_config_mc_dir/browser/extensions/activity-stream/
     bundle: => bundle
     copy: rsync --exclude-from .mcignore -a . $npm_package_config_mc_dir/browser/extensions/activity-stream/