summaryrefslogtreecommitdiffstats
path: root/browser/components/newtab/data/content
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/newtab/data/content')
-rw-r--r--browser/components/newtab/data/content/abouthomecache/page.html.template44
-rw-r--r--browser/components/newtab/data/content/abouthomecache/script.js.template19
-rw-r--r--browser/components/newtab/data/content/activity-stream.bundle.js15290
-rw-r--r--browser/components/newtab/data/content/assets/confetti.svg55
-rw-r--r--browser/components/newtab/data/content/assets/default.svg6
-rw-r--r--browser/components/newtab/data/content/assets/device-migration.svg36
-rw-r--r--browser/components/newtab/data/content/assets/firefox.svg168
-rw-r--r--browser/components/newtab/data/content/assets/glyph-cfr-feature-16.svg4
-rw-r--r--browser/components/newtab/data/content/assets/glyph-mail-16.svg4
-rw-r--r--browser/components/newtab/data/content/assets/glyph-maximize-16.svg4
-rw-r--r--browser/components/newtab/data/content/assets/glyph-minimize-16.svg4
-rw-r--r--browser/components/newtab/data/content/assets/glyph-modal-delete-20.svg8
-rw-r--r--browser/components/newtab/data/content/assets/glyph-newWindow-16.svg4
-rw-r--r--browser/components/newtab/data/content/assets/glyph-open-file-16.svg4
-rw-r--r--browser/components/newtab/data/content/assets/glyph-pin-16.svg6
-rw-r--r--browser/components/newtab/data/content/assets/glyph-pocket-archive-16.svg4
-rw-r--r--browser/components/newtab/data/content/assets/glyph-pocket-delete-16.svg4
-rw-r--r--browser/components/newtab/data/content/assets/glyph-unpin-16.svg4
-rw-r--r--browser/components/newtab/data/content/assets/glyph-webextension-16.svg4
-rw-r--r--browser/components/newtab/data/content/assets/heart.webpbin0 -> 100396 bytes
-rw-r--r--browser/components/newtab/data/content/assets/icon-removed-bookmark.svg4
-rw-r--r--browser/components/newtab/data/content/assets/long-zap.svg4
-rw-r--r--browser/components/newtab/data/content/assets/mobile-download-qr-existing-user-cn.svg5
-rw-r--r--browser/components/newtab/data/content/assets/mobile-download-qr-existing-user.svg7
-rw-r--r--browser/components/newtab/data/content/assets/mobile-download-qr-new-user-cn.svg4
-rw-r--r--browser/components/newtab/data/content/assets/mobile-download-qr-new-user.svg7
-rw-r--r--browser/components/newtab/data/content/assets/mr-colorways.avifbin0 -> 63824 bytes
-rw-r--r--browser/components/newtab/data/content/assets/mr-gratitude.svg4
-rw-r--r--browser/components/newtab/data/content/assets/mr-import.svg4
-rw-r--r--browser/components/newtab/data/content/assets/mr-mobilecrosspromo.svg4
-rw-r--r--browser/components/newtab/data/content/assets/mr-pinprivate.svg4
-rw-r--r--browser/components/newtab/data/content/assets/mr-pintaskbar.svg4
-rw-r--r--browser/components/newtab/data/content/assets/mr-privacysegmentation.svg4
-rw-r--r--browser/components/newtab/data/content/assets/mr-rtamo-background-image.svg4
-rw-r--r--browser/components/newtab/data/content/assets/mr-settodefault.svg4
-rw-r--r--browser/components/newtab/data/content/assets/noodle-C.svg6
-rw-r--r--browser/components/newtab/data/content/assets/noodle-outline-L.svg13
-rw-r--r--browser/components/newtab/data/content/assets/noodle-solid-L.svg6
-rw-r--r--browser/components/newtab/data/content/assets/person-typing.svg4
-rw-r--r--browser/components/newtab/data/content/assets/pocket-onboarding.avifbin0 -> 7462 bytes
-rw-r--r--browser/components/newtab/data/content/assets/pocket-onboarding@2x.avifbin0 -> 18590 bytes
-rw-r--r--browser/components/newtab/data/content/assets/pocket-swoosh.svg11
-rw-r--r--browser/components/newtab/data/content/assets/remote/mountain.svg12
-rw-r--r--browser/components/newtab/data/content/assets/remote/umbrella.pngbin0 -> 4292 bytes
-rw-r--r--browser/components/newtab/data/content/assets/short-zap.svg4
-rw-r--r--browser/components/newtab/data/content/assets/spinner.svg4
-rw-r--r--browser/components/newtab/data/content/newtab-render.js11
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/adidas.pngbin0 -> 3226 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/aliexpress-com.icobin0 -> 4286 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/allegro-pl.icobin0 -> 1150 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/amazon.icobin0 -> 1407 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/avito-ru.icobin0 -> 5430 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/baidu-com.pngbin0 -> 1983 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/bbc-uk.icobin0 -> 958 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/bing-com.icobin0 -> 4286 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/ctrip-com.icobin0 -> 1150 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/duckduckgo-com.icobin0 -> 2799 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/ebay.icobin0 -> 1455 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/etsy.icobin0 -> 4286 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/facebook-com.icobin0 -> 5430 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/geico.pngbin0 -> 1472 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/google-com.icobin0 -> 5430 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/hrblock.icobin0 -> 3950 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/ifeng-com.icobin0 -> 4038 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/iqiyi-com.icobin0 -> 5430 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/leboncoin-fr.pngbin0 -> 454 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/nike.icobin0 -> 1150 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/ok-ru.icobin0 -> 5430 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/olx-pl.icobin0 -> 5430 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/reddit-com.pngbin0 -> 2094 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/samsung.icobin0 -> 4286 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/turbotax.pngbin0 -> 3744 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/twitter-com.icobin0 -> 1650 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/vk-com.icobin0 -> 302 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/vodafone.pngbin0 -> 1757 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/weibo-com.icobin0 -> 10134 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/wikipedia-org.icobin0 -> 2734 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/wix.icobin0 -> 1061 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/wykop-pl.pngbin0 -> 1705 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/yandex-com.pngbin0 -> 1338 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/yandex-ru.pngbin0 -> 1368 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/youtube-com.pngbin0 -> 348 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/favicons/zhihu-com.icobin0 -> 6518 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/adidas@2x.pngbin0 -> 5448 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/aliexpress-com@2x.pngbin0 -> 12459 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/allegro-pl@2x.pngbin0 -> 5041 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/amazon@2x.pngbin0 -> 6061 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/avito-ru@2x.pngbin0 -> 1568 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/baidu-com@2x.pngbin0 -> 8198 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/bbc-uk@2x.pngbin0 -> 18207 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/bing-com@2x.svg106
-rw-r--r--browser/components/newtab/data/content/tippytop/images/ctrip-com@2x.pngbin0 -> 15862 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/duckduckgo-com@2x.svg12
-rw-r--r--browser/components/newtab/data/content/tippytop/images/ebay@2x.pngbin0 -> 5361 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/etsy@2x.jpgbin0 -> 4094 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/facebook-com@2x.pngbin0 -> 10780 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/geico@2x.jpgbin0 -> 11834 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/google-com@2x.pngbin0 -> 3035 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/hrblock@2x.pngbin0 -> 4642 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/ifeng-com@2x.pngbin0 -> 22282 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/iqiyi-com@2x.pngbin0 -> 14340 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/leboncoin-fr@2x.pngbin0 -> 7146 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/nike@2x.jpgbin0 -> 5163 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/ok-ru@2x.pngbin0 -> 2526 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/olx-pl@2x.pngbin0 -> 5287 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/reddit-com@2x.pngbin0 -> 5180 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/samsung@2x.jpgbin0 -> 3347 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/turbotax@2x.jpgbin0 -> 11930 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/twitter-com@2x.pngbin0 -> 1260 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/vk-com@2x.pngbin0 -> 9897 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/vodafone@2x.jpgbin0 -> 7050 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/weibo-com@2x.pngbin0 -> 15507 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/wikipedia-org@2x.pngbin0 -> 19001 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/wix@2x.jpgbin0 -> 8714 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/wykop-pl@2x.pngbin0 -> 4415 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/yandex-com@2x.pngbin0 -> 6516 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/yandex-ru@2x.pngbin0 -> 6638 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/youtube-com@2x.pngbin0 -> 2924 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/images/zhihu-com@2x.pngbin0 -> 10225 bytes
-rw-r--r--browser/components/newtab/data/content/tippytop/top_sites.json182
120 files changed, 16106 insertions, 0 deletions
diff --git a/browser/components/newtab/data/content/abouthomecache/page.html.template b/browser/components/newtab/data/content/abouthomecache/page.html.template
new file mode 100644
index 0000000000..e2d52c6fef
--- /dev/null
+++ b/browser/components/newtab/data/content/abouthomecache/page.html.template
@@ -0,0 +1,44 @@
+#if 0
+#
+# 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/.
+#
+# This template file is used to construct the cached about:home document.
+# The following template strings are used:
+#
+# {{ CACHE_TIME }}:
+# A date string representing when the cache was generated.
+#
+# {{ MARKUP }}:
+# The generated DOM content from ReactDOMServer for the cache.
+#
+# Also note the final script load of about:home?jscache. This loads the cached
+# script, which does the important work of telling React how to connect the
+# cached page state to the pre-existing DOM that's being rendered.
+#
+#endif
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob: chrome:; style-src 'unsafe-inline';">
+ <meta name="color-scheme" content="light dark">
+ <title data-l10n-id="newtab-page-title"></title>
+ <link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
+ <link rel="localization" href="branding/brand.ftl" />
+ <link rel="localization" href="toolkit/branding/brandings.ftl" />
+ <link rel="localization" href="browser/newtab/newtab.ftl" />
+ <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
+ <link rel="stylesheet" href="chrome://activity-stream/content/css/activity-stream.css" />
+ </head>
+ <!-- Cached: {{ CACHE_TIME }} -->
+ <body class="activity-stream">
+ <div id="header-asrouter-container" role="presentation"></div>
+ <div id="root">
+ {{ MARKUP }}
+ </div>
+ <div id="footer-asrouter-container" role="presentation"></div>
+ <script src="about:home?jscache"></script>
+ </body>
+</html>
diff --git a/browser/components/newtab/data/content/abouthomecache/script.js.template b/browser/components/newtab/data/content/abouthomecache/script.js.template
new file mode 100644
index 0000000000..5ba70ea7f5
--- /dev/null
+++ b/browser/components/newtab/data/content/abouthomecache/script.js.template
@@ -0,0 +1,19 @@
+#if 0
+#
+# 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/.
+#
+# This template file is used to construct the script that is loaded by the
+# cached about:home document. It is loaded in the cached about:home document
+# by loading about:home?jscache.
+#
+# The only template string used in this file is {{ STATE }}, which can only
+# be used once. {{ STATE }} will be replaced with the state of about:home
+# at the time that the cache was generated, which is needed by React in order
+# to make the cached document interactive.
+#
+#endif
+window.__FROM_STARTUP_CACHE__ = true;
+window.__STARTUP_STATE__ = {{ STATE }};
+
diff --git a/browser/components/newtab/data/content/activity-stream.bundle.js b/browser/components/newtab/data/content/activity-stream.bundle.js
new file mode 100644
index 0000000000..e064ee4f20
--- /dev/null
+++ b/browser/components/newtab/data/content/activity-stream.bundle.js
@@ -0,0 +1,15290 @@
+/*! THIS FILE IS AUTO-GENERATED: webpack.system-addon.config.js */
+var NewtabRenderUtils;
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ // The require scope
+/******/ var __webpack_require__ = {};
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/compat get default export */
+/******/ (() => {
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = (module) => {
+/******/ var getter = module && module.__esModule ?
+/******/ () => (module['default']) :
+/******/ () => (module);
+/******/ __webpack_require__.d(getter, { a: getter });
+/******/ return getter;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/define property getters */
+/******/ (() => {
+/******/ // define getter functions for harmony exports
+/******/ __webpack_require__.d = (exports, definition) => {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/global */
+/******/ (() => {
+/******/ __webpack_require__.g = (function() {
+/******/ if (typeof globalThis === 'object') return globalThis;
+/******/ try {
+/******/ return this || new Function('return this')();
+/******/ } catch (e) {
+/******/ if (typeof window === 'object') return window;
+/******/ }
+/******/ })();
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/make namespace object */
+/******/ (() => {
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = (exports) => {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/ })();
+/******/
+/************************************************************************/
+var __webpack_exports__ = {};
+// ESM COMPAT FLAG
+__webpack_require__.r(__webpack_exports__);
+
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, {
+ "NewTab": () => (/* binding */ NewTab),
+ "renderCache": () => (/* binding */ renderCache),
+ "renderWithoutState": () => (/* binding */ renderWithoutState)
+});
+
+;// CONCATENATED MODULE: ./common/Actions.sys.mjs
+/* 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 MAIN_MESSAGE_TYPE = "ActivityStream:Main";
+const CONTENT_MESSAGE_TYPE = "ActivityStream:Content";
+const PRELOAD_MESSAGE_TYPE = "ActivityStream:PreloadedBrowser";
+const UI_CODE = 1;
+const 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;
+
+// Create an object that avoids accidental differing key/value pairs:
+// {
+// INIT: "INIT",
+// UNINIT: "UNINIT"
+// }
+const actionTypes = {};
+
+for (const type of [
+ "ABOUT_SPONSORED_TOP_SITES",
+ "ADDONS_INFO_REQUEST",
+ "ADDONS_INFO_RESPONSE",
+ "ARCHIVE_FROM_POCKET",
+ "AS_ROUTER_INITIALIZED",
+ "AS_ROUTER_PREF_CHANGED",
+ "AS_ROUTER_TARGETING_UPDATE",
+ "AS_ROUTER_TELEMETRY_USER_EVENT",
+ "BLOCK_URL",
+ "BOOKMARK_URL",
+ "CLEAR_PREF",
+ "COPY_DOWNLOAD_LINK",
+ "DELETE_BOOKMARK_BY_ID",
+ "DELETE_FROM_POCKET",
+ "DELETE_HISTORY_URL",
+ "DIALOG_CANCEL",
+ "DIALOG_OPEN",
+ "DISABLE_SEARCH",
+ "DISCOVERY_STREAM_COLLECTION_DISMISSIBLE_TOGGLE",
+ "DISCOVERY_STREAM_CONFIG_CHANGE",
+ "DISCOVERY_STREAM_CONFIG_RESET",
+ "DISCOVERY_STREAM_CONFIG_RESET_DEFAULTS",
+ "DISCOVERY_STREAM_CONFIG_SETUP",
+ "DISCOVERY_STREAM_CONFIG_SET_VALUE",
+ "DISCOVERY_STREAM_DEV_EXPIRE_CACHE",
+ "DISCOVERY_STREAM_DEV_IDLE_DAILY",
+ "DISCOVERY_STREAM_DEV_SYNC_RS",
+ "DISCOVERY_STREAM_DEV_SYSTEM_TICK",
+ "DISCOVERY_STREAM_EXPERIMENT_DATA",
+ "DISCOVERY_STREAM_FEEDS_UPDATE",
+ "DISCOVERY_STREAM_FEED_UPDATE",
+ "DISCOVERY_STREAM_IMPRESSION_STATS",
+ "DISCOVERY_STREAM_LAYOUT_RESET",
+ "DISCOVERY_STREAM_LAYOUT_UPDATE",
+ "DISCOVERY_STREAM_LINK_BLOCKED",
+ "DISCOVERY_STREAM_LOADED_CONTENT",
+ "DISCOVERY_STREAM_PERSONALIZATION_INIT",
+ "DISCOVERY_STREAM_PERSONALIZATION_LAST_UPDATED",
+ "DISCOVERY_STREAM_PERSONALIZATION_TOGGLE",
+ "DISCOVERY_STREAM_POCKET_STATE_INIT",
+ "DISCOVERY_STREAM_POCKET_STATE_SET",
+ "DISCOVERY_STREAM_PREFS_SETUP",
+ "DISCOVERY_STREAM_RECENT_SAVES",
+ "DISCOVERY_STREAM_RETRY_FEED",
+ "DISCOVERY_STREAM_SPOCS_CAPS",
+ "DISCOVERY_STREAM_SPOCS_ENDPOINT",
+ "DISCOVERY_STREAM_SPOCS_PLACEMENTS",
+ "DISCOVERY_STREAM_SPOCS_UPDATE",
+ "DISCOVERY_STREAM_SPOC_BLOCKED",
+ "DISCOVERY_STREAM_SPOC_IMPRESSION",
+ "DISCOVERY_STREAM_USER_EVENT",
+ "DOWNLOAD_CHANGED",
+ "FAKE_FOCUS_SEARCH",
+ "FILL_SEARCH_TERM",
+ "HANDOFF_SEARCH_TO_AWESOMEBAR",
+ "HIDE_PERSONALIZE",
+ "HIDE_PRIVACY_INFO",
+ "INIT",
+ "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",
+ "PARTNER_LINK_ATTRIBUTION",
+ "PLACES_BOOKMARKS_REMOVED",
+ "PLACES_BOOKMARK_ADDED",
+ "PLACES_HISTORY_CLEARED",
+ "PLACES_LINKS_CHANGED",
+ "PLACES_LINKS_DELETED",
+ "PLACES_LINK_BLOCKED",
+ "PLACES_SAVED_TO_POCKET",
+ "POCKET_CTA",
+ "POCKET_LINK_DELETED_OR_ARCHIVED",
+ "POCKET_LOGGED_IN",
+ "POCKET_WAITING_FOR_SPOC",
+ "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",
+ "SHOW_PERSONALIZE",
+ "SHOW_PRIVACY_INFO",
+ "SHOW_SEARCH",
+ "SKIPPED_SIGNIN",
+ "SNIPPETS_BLOCKLIST_CLEARED",
+ "SNIPPETS_BLOCKLIST_UPDATED",
+ "SNIPPETS_DATA",
+ "SNIPPETS_PREVIEW_MODE",
+ "SNIPPETS_RESET",
+ "SNIPPET_BLOCKED",
+ "SUBMIT_EMAIL",
+ "SUBMIT_SIGNIN",
+ "SYSTEM_TICK",
+ "TELEMETRY_IMPRESSION_STATS",
+ "TELEMETRY_USER_EVENT",
+ "TOP_SITES_CANCEL_EDIT",
+ "TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL",
+ "TOP_SITES_EDIT",
+ "TOP_SITES_INSERT",
+ "TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL",
+ "TOP_SITES_ORGANIC_IMPRESSION_STATS",
+ "TOP_SITES_PIN",
+ "TOP_SITES_PREFS_UPDATED",
+ "TOP_SITES_SPONSORED_IMPRESSION_STATS",
+ "TOP_SITES_UNPIN",
+ "TOP_SITES_UPDATED",
+ "TOTAL_BOOKMARKS_REQUEST",
+ "TOTAL_BOOKMARKS_RESPONSE",
+ "UNINIT",
+ "UPDATE_PINNED_SEARCH_SHORTCUTS",
+ "UPDATE_SEARCH_SHORTCUTS",
+ "UPDATE_SECTION_PREFS",
+ "WEBEXT_CLICK",
+ "WEBEXT_DISMISS",
+]) {
+ actionTypes[type] = type;
+}
+
+// Helper function for creating routed actions between content and main
+// Not intended to be used by consumers
+function _RouteMessage(action, options) {
+ const meta = action.meta ? { ...action.meta } : {};
+ if (!options || !options.from || !options.to) {
+ throw new Error(
+ "Routed Messages must have options as the second parameter, and must at least include a .from and .to property."
+ );
+ }
+ // For each of these fields, if they are passed as an option,
+ // add them to the action. If they are not defined, remove them.
+ ["from", "to", "toTarget", "fromTarget", "skipMain", "skipLocal"].forEach(
+ o => {
+ if (typeof options[o] !== "undefined") {
+ meta[o] = options[o];
+ } else if (meta[o]) {
+ delete meta[o];
+ }
+ }
+ );
+ return { ...action, meta };
+}
+
+/**
+ * AlsoToMain - Creates a message that will be dispatched locally and also sent to the Main process.
+ *
+ * @param {object} action Any redux action (required)
+ * @param {object} options
+ * @param {bool} skipLocal Used by OnlyToMain to skip the main reducer
+ * @param {string} fromTarget The id of the content port from which the action originated. (optional)
+ * @return {object} An action with added .meta properties
+ */
+function AlsoToMain(action, fromTarget, skipLocal) {
+ return _RouteMessage(action, {
+ from: CONTENT_MESSAGE_TYPE,
+ to: MAIN_MESSAGE_TYPE,
+ fromTarget,
+ skipLocal,
+ });
+}
+
+/**
+ * OnlyToMain - Creates a message that will be sent to the Main process and skip the local reducer.
+ *
+ * @param {object} action Any redux action (required)
+ * @param {object} options
+ * @param {string} fromTarget The id of the content port from which the action originated. (optional)
+ * @return {object} An action with added .meta properties
+ */
+function OnlyToMain(action, fromTarget) {
+ return AlsoToMain(action, fromTarget, true);
+}
+
+/**
+ * BroadcastToContent - Creates a message that will be dispatched to main and sent to ALL content processes.
+ *
+ * @param {object} action Any redux action (required)
+ * @return {object} An action with added .meta properties
+ */
+function BroadcastToContent(action) {
+ return _RouteMessage(action, {
+ from: MAIN_MESSAGE_TYPE,
+ to: CONTENT_MESSAGE_TYPE,
+ });
+}
+
+/**
+ * AlsoToOneContent - Creates a message that will be will be dispatched to the main store
+ * and also sent to a particular Content process.
+ *
+ * @param {object} action Any redux action (required)
+ * @param {string} target The id of a content port
+ * @param {bool} skipMain Used by OnlyToOneContent to skip the main process
+ * @return {object} An action with added .meta properties
+ */
+function AlsoToOneContent(action, target, skipMain) {
+ if (!target) {
+ 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"
+ );
+ }
+ return _RouteMessage(action, {
+ from: MAIN_MESSAGE_TYPE,
+ to: CONTENT_MESSAGE_TYPE,
+ toTarget: target,
+ skipMain,
+ });
+}
+
+/**
+ * OnlyToOneContent - Creates a message that will be sent to a particular Content process
+ * and skip the main reducer.
+ *
+ * @param {object} action Any redux action (required)
+ * @param {string} target The id of a content port
+ * @return {object} An action with added .meta properties
+ */
+function OnlyToOneContent(action, target) {
+ return AlsoToOneContent(action, target, true);
+}
+
+/**
+ * AlsoToPreloaded - Creates a message that dispatched to the main reducer and also sent to the preloaded tab.
+ *
+ * @param {object} action Any redux action (required)
+ * @return {object} An action with added .meta properties
+ */
+function AlsoToPreloaded(action) {
+ return _RouteMessage(action, {
+ from: MAIN_MESSAGE_TYPE,
+ to: PRELOAD_MESSAGE_TYPE,
+ });
+}
+
+/**
+ * UserEvent - A telemetry ping indicating a user action. This should only
+ * be sent from the UI during a user session.
+ *
+ * @param {object} data Fields to include in the ping (source, etc.)
+ * @return {object} An AlsoToMain action
+ */
+function UserEvent(data) {
+ return AlsoToMain({
+ type: actionTypes.TELEMETRY_USER_EVENT,
+ data,
+ });
+}
+
+/**
+ * DiscoveryStreamUserEvent - A telemetry ping indicating a user action from Discovery Stream. This should only
+ * be sent from the UI during a user session.
+ *
+ * @param {object} data Fields to include in the ping (source, etc.)
+ * @return {object} An AlsoToMain action
+ */
+function DiscoveryStreamUserEvent(data) {
+ return AlsoToMain({
+ type: actionTypes.DISCOVERY_STREAM_USER_EVENT,
+ data,
+ });
+}
+
+/**
+ * ASRouterUserEvent - A telemetry ping indicating a user action from AS router. This should only
+ * be sent from the UI during a user session.
+ *
+ * @param {object} data Fields to include in the ping (source, etc.)
+ * @return {object} An AlsoToMain action
+ */
+function ASRouterUserEvent(data) {
+ return AlsoToMain({
+ type: actionTypes.AS_ROUTER_TELEMETRY_USER_EVENT,
+ data,
+ });
+}
+
+/**
+ * ImpressionStats - A telemetry ping indicating an impression stats.
+ *
+ * @param {object} data Fields to include in the ping
+ * @param {int} importContext (For testing) Override the import context for testing.
+ * #return {object} An action. For UI code, a AlsoToMain action.
+ */
+function ImpressionStats(data, importContext = globalImportContext) {
+ const action = {
+ type: actionTypes.TELEMETRY_IMPRESSION_STATS,
+ data,
+ };
+ return importContext === UI_CODE ? AlsoToMain(action) : action;
+}
+
+/**
+ * DiscoveryStreamImpressionStats - A telemetry ping indicating an impression stats in Discovery Stream.
+ *
+ * @param {object} data Fields to include in the ping
+ * @param {int} importContext (For testing) Override the import context for testing.
+ * #return {object} An action. For UI code, a AlsoToMain action.
+ */
+function DiscoveryStreamImpressionStats(
+ data,
+ importContext = globalImportContext
+) {
+ const action = {
+ type: actionTypes.DISCOVERY_STREAM_IMPRESSION_STATS,
+ data,
+ };
+ return importContext === UI_CODE ? AlsoToMain(action) : action;
+}
+
+/**
+ * DiscoveryStreamLoadedContent - A telemetry ping indicating a content gets loaded in Discovery Stream.
+ *
+ * @param {object} data Fields to include in the ping
+ * @param {int} importContext (For testing) Override the import context for testing.
+ * #return {object} An action. For UI code, a AlsoToMain action.
+ */
+function DiscoveryStreamLoadedContent(
+ data,
+ importContext = globalImportContext
+) {
+ const action = {
+ type: actionTypes.DISCOVERY_STREAM_LOADED_CONTENT,
+ data,
+ };
+ return importContext === UI_CODE ? AlsoToMain(action) : action;
+}
+
+function SetPref(name, value, importContext = globalImportContext) {
+ const action = { type: actionTypes.SET_PREF, data: { name, value } };
+ return importContext === UI_CODE ? AlsoToMain(action) : action;
+}
+
+function WebExtEvent(type, data, importContext = globalImportContext) {
+ if (!data || !data.source) {
+ throw new Error(
+ 'WebExtEvent actions should include a property "source", the id of the webextension that should receive the event.'
+ );
+ }
+ const action = { type, data };
+ return importContext === UI_CODE ? AlsoToMain(action) : action;
+}
+
+const actionCreators = {
+ BroadcastToContent,
+ UserEvent,
+ DiscoveryStreamUserEvent,
+ ASRouterUserEvent,
+ ImpressionStats,
+ AlsoToOneContent,
+ OnlyToOneContent,
+ AlsoToMain,
+ OnlyToMain,
+ AlsoToPreloaded,
+ SetPref,
+ WebExtEvent,
+ DiscoveryStreamImpressionStats,
+ DiscoveryStreamLoadedContent,
+};
+
+// These are helpers to test for certain kinds of actions
+const actionUtils = {
+ isSendToMain(action) {
+ if (!action.meta) {
+ return false;
+ }
+ return (
+ action.meta.to === MAIN_MESSAGE_TYPE &&
+ action.meta.from === CONTENT_MESSAGE_TYPE
+ );
+ },
+ isBroadcastToContent(action) {
+ if (!action.meta) {
+ return false;
+ }
+ if (action.meta.to === CONTENT_MESSAGE_TYPE && !action.meta.toTarget) {
+ return true;
+ }
+ return false;
+ },
+ isSendToOneContent(action) {
+ if (!action.meta) {
+ return false;
+ }
+ if (action.meta.to === CONTENT_MESSAGE_TYPE && action.meta.toTarget) {
+ return true;
+ }
+ return false;
+ },
+ isSendToPreloaded(action) {
+ if (!action.meta) {
+ return false;
+ }
+ return (
+ action.meta.to === PRELOAD_MESSAGE_TYPE &&
+ action.meta.from === MAIN_MESSAGE_TYPE
+ );
+ },
+ isFromMain(action) {
+ if (!action.meta) {
+ return false;
+ }
+ return (
+ action.meta.from === MAIN_MESSAGE_TYPE &&
+ action.meta.to === CONTENT_MESSAGE_TYPE
+ );
+ },
+ getPortIdOfSender(action) {
+ return (action.meta && action.meta.fromTarget) || null;
+ },
+ _RouteMessage,
+};
+
+;// CONCATENATED MODULE: ./common/ActorConstants.sys.mjs
+/* vim: set ts=2 sw=2 sts=2 et tw=80: */
+/* 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 MESSAGE_TYPE_LIST = [
+ "BLOCK_MESSAGE_BY_ID",
+ "USER_ACTION",
+ "IMPRESSION",
+ "TRIGGER",
+ "NEWTAB_MESSAGE_REQUEST",
+ // PB is Private Browsing
+ "PBNEWTAB_MESSAGE_REQUEST",
+ "DOORHANGER_TELEMETRY",
+ "TOOLBAR_BADGE_TELEMETRY",
+ "TOOLBAR_PANEL_TELEMETRY",
+ "MOMENTS_PAGE_TELEMETRY",
+ "INFOBAR_TELEMETRY",
+ "SPOTLIGHT_TELEMETRY",
+ "TOAST_NOTIFICATION_TELEMETRY",
+ "AS_ROUTER_TELEMETRY_USER_EVENT",
+
+ // Admin types
+ "ADMIN_CONNECT_STATE",
+ "UNBLOCK_MESSAGE_BY_ID",
+ "UNBLOCK_ALL",
+ "BLOCK_BUNDLE",
+ "UNBLOCK_BUNDLE",
+ "DISABLE_PROVIDER",
+ "ENABLE_PROVIDER",
+ "EVALUATE_JEXL_EXPRESSION",
+ "EXPIRE_QUERY_CACHE",
+ "FORCE_ATTRIBUTION",
+ "FORCE_WHATSNEW_PANEL",
+ "FORCE_PRIVATE_BROWSING_WINDOW",
+ "CLOSE_WHATSNEW_PANEL",
+ "OVERRIDE_MESSAGE",
+ "MODIFY_MESSAGE_JSON",
+ "RESET_PROVIDER_PREF",
+ "SET_PROVIDER_USER_PREF",
+ "RESET_GROUPS_STATE",
+];
+
+const MESSAGE_TYPE_HASH = MESSAGE_TYPE_LIST.reduce((hash, value) => {
+ hash[value] = value;
+ return hash;
+}, {});
+
+;// CONCATENATED MODULE: ./content-src/asrouter/asrouter-utils.js
+/* 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 ASRouterUtils = {
+ addListener(listener) {
+ if (__webpack_require__.g.ASRouterAddParentListener) {
+ __webpack_require__.g.ASRouterAddParentListener(listener);
+ }
+ },
+
+ removeListener(listener) {
+ if (__webpack_require__.g.ASRouterRemoveParentListener) {
+ __webpack_require__.g.ASRouterRemoveParentListener(listener);
+ }
+ },
+
+ sendMessage(action) {
+ if (__webpack_require__.g.ASRouterMessage) {
+ return __webpack_require__.g.ASRouterMessage(action);
+ }
+
+ throw new Error(`Unexpected call:\n${JSON.stringify(action, null, 3)}`);
+ },
+
+ blockById(id, options) {
+ return ASRouterUtils.sendMessage({
+ type: MESSAGE_TYPE_HASH.BLOCK_MESSAGE_BY_ID,
+ data: {
+ id,
+ ...options
+ }
+ });
+ },
+
+ modifyMessageJson(content) {
+ return ASRouterUtils.sendMessage({
+ type: MESSAGE_TYPE_HASH.MODIFY_MESSAGE_JSON,
+ data: {
+ content
+ }
+ });
+ },
+
+ executeAction(button_action) {
+ return ASRouterUtils.sendMessage({
+ type: MESSAGE_TYPE_HASH.USER_ACTION,
+ data: button_action
+ });
+ },
+
+ unblockById(id) {
+ return ASRouterUtils.sendMessage({
+ type: MESSAGE_TYPE_HASH.UNBLOCK_MESSAGE_BY_ID,
+ data: {
+ id
+ }
+ });
+ },
+
+ blockBundle(bundle) {
+ return ASRouterUtils.sendMessage({
+ type: MESSAGE_TYPE_HASH.BLOCK_BUNDLE,
+ data: {
+ bundle
+ }
+ });
+ },
+
+ unblockBundle(bundle) {
+ return ASRouterUtils.sendMessage({
+ type: MESSAGE_TYPE_HASH.UNBLOCK_BUNDLE,
+ data: {
+ bundle
+ }
+ });
+ },
+
+ overrideMessage(id) {
+ return ASRouterUtils.sendMessage({
+ type: MESSAGE_TYPE_HASH.OVERRIDE_MESSAGE,
+ data: {
+ id
+ }
+ });
+ },
+
+ sendTelemetry(ping) {
+ return ASRouterUtils.sendMessage(actionCreators.ASRouterUserEvent(ping));
+ },
+
+ getPreviewEndpoint() {
+ if (__webpack_require__.g.document && __webpack_require__.g.document.location && __webpack_require__.g.document.location.href.includes("endpoint")) {
+ const params = new URLSearchParams(__webpack_require__.g.document.location.href.slice(__webpack_require__.g.document.location.href.indexOf("endpoint")));
+
+ try {
+ const endpoint = new URL(params.get("endpoint"));
+ return {
+ url: endpoint.href,
+ snippetId: params.get("snippetId"),
+ theme: this.getPreviewTheme(),
+ dir: this.getPreviewDir()
+ };
+ } catch (e) {}
+ }
+
+ return null;
+ },
+
+ getPreviewTheme() {
+ return new URLSearchParams(__webpack_require__.g.document.location.href.slice(__webpack_require__.g.document.location.href.indexOf("theme"))).get("theme");
+ },
+
+ getPreviewDir() {
+ return new URLSearchParams(__webpack_require__.g.document.location.href.slice(__webpack_require__.g.document.location.href.indexOf("dir"))).get("dir");
+ }
+
+};
+;// CONCATENATED MODULE: external "ReactRedux"
+const external_ReactRedux_namespaceObject = ReactRedux;
+;// CONCATENATED MODULE: external "React"
+const external_React_namespaceObject = React;
+var external_React_default = /*#__PURE__*/__webpack_require__.n(external_React_namespaceObject);
+;// CONCATENATED MODULE: ./content-src/components/ASRouterAdmin/SimpleHashRouter.jsx
+/* 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/. */
+
+class SimpleHashRouter extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onHashChange = this.onHashChange.bind(this);
+ this.state = {
+ hash: __webpack_require__.g.location.hash
+ };
+ }
+
+ onHashChange() {
+ this.setState({
+ hash: __webpack_require__.g.location.hash
+ });
+ }
+
+ componentWillMount() {
+ __webpack_require__.g.addEventListener("hashchange", this.onHashChange);
+ }
+
+ componentWillUnmount() {
+ __webpack_require__.g.removeEventListener("hashchange", this.onHashChange);
+ }
+
+ render() {
+ const [, ...routes] = this.state.hash.split("-");
+ return /*#__PURE__*/external_React_default().cloneElement(this.props.children, {
+ location: {
+ hash: this.state.hash,
+ routes
+ }
+ });
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/ASRouterAdmin/CopyButton.jsx
+function _extends() { _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; }; return _extends.apply(this, arguments); }
+
+/* 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 CopyButton = ({
+ className,
+ label,
+ copiedLabel,
+ inputSelector,
+ transformer,
+ ...props
+}) => {
+ const [copied, setCopied] = (0,external_React_namespaceObject.useState)(false);
+ const timeout = (0,external_React_namespaceObject.useRef)(null);
+ const onClick = (0,external_React_namespaceObject.useCallback)(() => {
+ let text = document.querySelector(inputSelector).value;
+ if (transformer) text = transformer(text);
+ navigator.clipboard.writeText(text);
+ clearTimeout(timeout.current);
+ setCopied(true);
+ timeout.current = setTimeout(() => setCopied(false), 1500);
+ }, [inputSelector, transformer]);
+ return /*#__PURE__*/external_React_default().createElement("button", _extends({
+ className: className,
+ onClick: e => onClick()
+ }, props), copied && copiedLabel || label);
+};
+;// CONCATENATED MODULE: ./content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
+function ASRouterAdmin_extends() { ASRouterAdmin_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; }; return ASRouterAdmin_extends.apply(this, arguments); }
+
+/* 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 Row = props => /*#__PURE__*/external_React_default().createElement("tr", ASRouterAdmin_extends({
+ className: "message-item"
+}, props), props.children);
+
+function relativeTime(timestamp) {
+ if (!timestamp) {
+ return "";
+ }
+
+ const seconds = Math.floor((Date.now() - timestamp) / 1000);
+ const minutes = Math.floor((Date.now() - timestamp) / 60000);
+
+ if (seconds < 2) {
+ return "just now";
+ } else if (seconds < 60) {
+ return `${seconds} seconds ago`;
+ } else if (minutes === 1) {
+ return "1 minute ago";
+ } else if (minutes < 600) {
+ return `${minutes} minutes ago`;
+ }
+
+ return new Date(timestamp).toLocaleString();
+}
+
+const LAYOUT_VARIANTS = {
+ basic: "Basic default layout (on by default in nightly)",
+ staging_spocs: "A layout with all spocs shown",
+ "dev-test-all": "A little bit of everything. Good layout for testing all components",
+ "dev-test-feeds": "Stress testing for slow feeds"
+};
+class ToggleStoryButton extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.handleClick = this.handleClick.bind(this);
+ }
+
+ handleClick() {
+ this.props.onClick(this.props.story);
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("button", {
+ onClick: this.handleClick
+ }, "collapse/open");
+ }
+
+}
+class ToggleMessageJSON extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.handleClick = this.handleClick.bind(this);
+ }
+
+ handleClick() {
+ this.props.toggleJSON(this.props.msgId);
+ }
+
+ render() {
+ let iconName = this.props.isCollapsed ? "icon icon-arrowhead-forward-small" : "icon icon-arrowhead-down-small";
+ return /*#__PURE__*/external_React_default().createElement("button", {
+ className: "clearButton",
+ onClick: this.handleClick
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: iconName
+ }));
+ }
+
+}
+class TogglePrefCheckbox extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onChange = this.onChange.bind(this);
+ }
+
+ onChange(event) {
+ this.props.onChange(this.props.pref, event.target.checked);
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("input", {
+ type: "checkbox",
+ checked: this.props.checked,
+ onChange: this.onChange,
+ disabled: this.props.disabled
+ }), " ", this.props.pref, " ");
+ }
+
+}
+class Personalization extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.togglePersonalization = this.togglePersonalization.bind(this);
+ }
+
+ togglePersonalization() {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.DISCOVERY_STREAM_PERSONALIZATION_TOGGLE
+ }));
+ }
+
+ render() {
+ const {
+ lastUpdated,
+ initialized
+ } = this.props.state.Personalization;
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, /*#__PURE__*/external_React_default().createElement(Row, null, /*#__PURE__*/external_React_default().createElement("td", {
+ colSpan: "2"
+ }, /*#__PURE__*/external_React_default().createElement(TogglePrefCheckbox, {
+ checked: this.props.personalized,
+ pref: "personalized",
+ onChange: this.togglePersonalization
+ }))), /*#__PURE__*/external_React_default().createElement(Row, null, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Personalization Last Updated"), /*#__PURE__*/external_React_default().createElement("td", null, relativeTime(lastUpdated) || "(no data)")), /*#__PURE__*/external_React_default().createElement(Row, null, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Personalization Initialized"), /*#__PURE__*/external_React_default().createElement("td", null, initialized ? "true" : "false")))));
+ }
+
+}
+class DiscoveryStreamAdmin extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.restorePrefDefaults = this.restorePrefDefaults.bind(this);
+ this.setConfigValue = this.setConfigValue.bind(this);
+ this.expireCache = this.expireCache.bind(this);
+ this.refreshCache = this.refreshCache.bind(this);
+ this.idleDaily = this.idleDaily.bind(this);
+ this.systemTick = this.systemTick.bind(this);
+ this.syncRemoteSettings = this.syncRemoteSettings.bind(this);
+ this.changeEndpointVariant = this.changeEndpointVariant.bind(this);
+ this.onStoryToggle = this.onStoryToggle.bind(this);
+ this.state = {
+ toggledStories: {}
+ };
+ }
+
+ setConfigValue(name, value) {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.DISCOVERY_STREAM_CONFIG_SET_VALUE,
+ data: {
+ name,
+ value
+ }
+ }));
+ }
+
+ restorePrefDefaults(event) {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.DISCOVERY_STREAM_CONFIG_RESET_DEFAULTS
+ }));
+ }
+
+ refreshCache() {
+ const {
+ config
+ } = this.props.state.DiscoveryStream;
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.DISCOVERY_STREAM_CONFIG_CHANGE,
+ data: config
+ }));
+ }
+
+ dispatchSimpleAction(type) {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type
+ }));
+ }
+
+ systemTick() {
+ this.dispatchSimpleAction(actionTypes.DISCOVERY_STREAM_DEV_SYSTEM_TICK);
+ }
+
+ expireCache() {
+ this.dispatchSimpleAction(actionTypes.DISCOVERY_STREAM_DEV_EXPIRE_CACHE);
+ }
+
+ idleDaily() {
+ this.dispatchSimpleAction(actionTypes.DISCOVERY_STREAM_DEV_IDLE_DAILY);
+ }
+
+ syncRemoteSettings() {
+ this.dispatchSimpleAction(actionTypes.DISCOVERY_STREAM_DEV_SYNC_RS);
+ }
+
+ changeEndpointVariant(event) {
+ const endpoint = this.props.state.DiscoveryStream.config.layout_endpoint;
+
+ if (endpoint) {
+ this.setConfigValue("layout_endpoint", endpoint.replace(/layout_variant=.+/, `layout_variant=${event.target.value}`));
+ }
+ }
+
+ renderComponent(width, component) {
+ return /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, /*#__PURE__*/external_React_default().createElement(Row, null, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Type"), /*#__PURE__*/external_React_default().createElement("td", null, component.type)), /*#__PURE__*/external_React_default().createElement(Row, null, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Width"), /*#__PURE__*/external_React_default().createElement("td", null, width)), component.feed && this.renderFeed(component.feed)));
+ }
+
+ isCurrentVariant(id) {
+ const endpoint = this.props.state.DiscoveryStream.config.layout_endpoint;
+ const isMatch = endpoint && !!endpoint.match(`layout_variant=${id}`);
+ return isMatch;
+ }
+
+ renderFeedData(url) {
+ var _feed$recommendations;
+
+ const {
+ feeds
+ } = this.props.state.DiscoveryStream;
+ const feed = feeds.data[url].data;
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("h4", null, "Feed url: ", url), /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, (_feed$recommendations = feed.recommendations) === null || _feed$recommendations === void 0 ? void 0 : _feed$recommendations.map(story => this.renderStoryData(story)))));
+ }
+
+ renderFeedsData() {
+ const {
+ feeds
+ } = this.props.state.DiscoveryStream;
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, Object.keys(feeds.data).map(url => this.renderFeedData(url)));
+ }
+
+ renderSpocs() {
+ const {
+ spocs
+ } = this.props.state.DiscoveryStream;
+ let spocsData = [];
+
+ if (spocs.data && spocs.data.spocs && spocs.data.spocs.items) {
+ spocsData = spocs.data.spocs.items || [];
+ }
+
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, /*#__PURE__*/external_React_default().createElement(Row, null, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "spocs_endpoint"), /*#__PURE__*/external_React_default().createElement("td", null, spocs.spocs_endpoint)), /*#__PURE__*/external_React_default().createElement(Row, null, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Data last fetched"), /*#__PURE__*/external_React_default().createElement("td", null, relativeTime(spocs.lastUpdated))))), /*#__PURE__*/external_React_default().createElement("h4", null, "Spoc data"), /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, spocsData.map(spoc => this.renderStoryData(spoc)))), /*#__PURE__*/external_React_default().createElement("h4", null, "Spoc frequency caps"), /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, spocs.frequency_caps.map(spoc => this.renderStoryData(spoc)))));
+ }
+
+ onStoryToggle(story) {
+ const {
+ toggledStories
+ } = this.state;
+ this.setState({
+ toggledStories: { ...toggledStories,
+ [story.id]: !toggledStories[story.id]
+ }
+ });
+ }
+
+ renderStoryData(story) {
+ let storyData = "";
+
+ if (this.state.toggledStories[story.id]) {
+ storyData = JSON.stringify(story, null, 2);
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("tr", {
+ className: "message-item",
+ key: story.id
+ }, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "message-id"
+ }, /*#__PURE__*/external_React_default().createElement("span", null, story.id, " ", /*#__PURE__*/external_React_default().createElement("br", null)), /*#__PURE__*/external_React_default().createElement(ToggleStoryButton, {
+ story: story,
+ onClick: this.onStoryToggle
+ })), /*#__PURE__*/external_React_default().createElement("td", {
+ className: "message-summary"
+ }, /*#__PURE__*/external_React_default().createElement("pre", null, storyData)));
+ }
+
+ renderFeed(feed) {
+ const {
+ feeds
+ } = this.props.state.DiscoveryStream;
+
+ if (!feed.url) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement(Row, null, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Feed url"), /*#__PURE__*/external_React_default().createElement("td", null, feed.url)), /*#__PURE__*/external_React_default().createElement(Row, null, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Data last fetched"), /*#__PURE__*/external_React_default().createElement("td", null, relativeTime(feeds.data[feed.url] ? feeds.data[feed.url].lastUpdated : null) || "(no data)")));
+ }
+
+ render() {
+ const prefToggles = "enabled hardcoded_layout show_spocs collapsible".split(" ");
+ const {
+ config,
+ lastUpdated,
+ layout
+ } = this.props.state.DiscoveryStream;
+ const personalized = this.props.otherPrefs["discoverystream.personalization.enabled"];
+ return /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button",
+ onClick: this.restorePrefDefaults
+ }, "Restore Pref Defaults"), " ", /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button",
+ onClick: this.refreshCache
+ }, "Refresh Cache"), /*#__PURE__*/external_React_default().createElement("br", null), /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button",
+ onClick: this.expireCache
+ }, "Expire Cache"), " ", /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button",
+ onClick: this.systemTick
+ }, "Trigger System Tick"), " ", /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button",
+ onClick: this.idleDaily
+ }, "Trigger Idle Daily"), /*#__PURE__*/external_React_default().createElement("br", null), /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button",
+ onClick: this.syncRemoteSettings
+ }, "Sync Remote Settings"), /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, prefToggles.map(pref => /*#__PURE__*/external_React_default().createElement(Row, {
+ key: pref
+ }, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement(TogglePrefCheckbox, {
+ checked: config[pref],
+ pref: pref,
+ onChange: this.setConfigValue
+ })))))), /*#__PURE__*/external_React_default().createElement("h3", null, "Endpoint variant"), /*#__PURE__*/external_React_default().createElement("p", null, "You can also change this manually by changing this pref:", " ", /*#__PURE__*/external_React_default().createElement("code", null, "browser.newtabpage.activity-stream.discoverystream.config")), /*#__PURE__*/external_React_default().createElement("table", {
+ style: config.enabled && !config.hardcoded_layout ? null : {
+ opacity: 0.5
+ }
+ }, /*#__PURE__*/external_React_default().createElement("tbody", null, Object.keys(LAYOUT_VARIANTS).map(id => /*#__PURE__*/external_React_default().createElement(Row, {
+ key: id
+ }, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ type: "radio",
+ value: id,
+ checked: this.isCurrentVariant(id),
+ onChange: this.changeEndpointVariant
+ })), /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, id), /*#__PURE__*/external_React_default().createElement("td", null, LAYOUT_VARIANTS[id]))))), /*#__PURE__*/external_React_default().createElement("h3", null, "Caching info"), /*#__PURE__*/external_React_default().createElement("table", {
+ style: config.enabled ? null : {
+ opacity: 0.5
+ }
+ }, /*#__PURE__*/external_React_default().createElement("tbody", null, /*#__PURE__*/external_React_default().createElement(Row, null, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Data last fetched"), /*#__PURE__*/external_React_default().createElement("td", null, relativeTime(lastUpdated) || "(no data)")))), /*#__PURE__*/external_React_default().createElement("h3", null, "Layout"), layout.map((row, rowIndex) => /*#__PURE__*/external_React_default().createElement("div", {
+ key: `row-${rowIndex}`
+ }, row.components.map((component, componentIndex) => /*#__PURE__*/external_React_default().createElement("div", {
+ key: `component-${componentIndex}`,
+ className: "ds-component"
+ }, this.renderComponent(row.width, component))))), /*#__PURE__*/external_React_default().createElement("h3", null, "Personalization"), /*#__PURE__*/external_React_default().createElement(Personalization, {
+ personalized: personalized,
+ dispatch: this.props.dispatch,
+ state: {
+ Personalization: this.props.state.Personalization
+ }
+ }), /*#__PURE__*/external_React_default().createElement("h3", null, "Spocs"), this.renderSpocs(), /*#__PURE__*/external_React_default().createElement("h3", null, "Feeds Data"), this.renderFeedsData());
+ }
+
+}
+class ASRouterAdminInner extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.handleEnabledToggle = this.handleEnabledToggle.bind(this);
+ this.handleUserPrefToggle = this.handleUserPrefToggle.bind(this);
+ this.onChangeMessageFilter = this.onChangeMessageFilter.bind(this);
+ this.onChangeMessageGroupsFilter = this.onChangeMessageGroupsFilter.bind(this);
+ this.unblockAll = this.unblockAll.bind(this);
+ this.handleClearAllImpressionsByProvider = this.handleClearAllImpressionsByProvider.bind(this);
+ this.handleExpressionEval = this.handleExpressionEval.bind(this);
+ this.onChangeTargetingParameters = this.onChangeTargetingParameters.bind(this);
+ this.onChangeAttributionParameters = this.onChangeAttributionParameters.bind(this);
+ this.setAttribution = this.setAttribution.bind(this);
+ this.onCopyTargetingParams = this.onCopyTargetingParams.bind(this);
+ this.onNewTargetingParams = this.onNewTargetingParams.bind(this);
+ this.handleOpenPB = this.handleOpenPB.bind(this);
+ this.selectPBMessage = this.selectPBMessage.bind(this);
+ this.resetPBJSON = this.resetPBJSON.bind(this);
+ this.resetPBMessageState = this.resetPBMessageState.bind(this);
+ this.toggleJSON = this.toggleJSON.bind(this);
+ this.toggleAllMessages = this.toggleAllMessages.bind(this);
+ this.resetGroups = this.resetGroups.bind(this);
+ this.onMessageFromParent = this.onMessageFromParent.bind(this);
+ this.setStateFromParent = this.setStateFromParent.bind(this);
+ this.setState = this.setState.bind(this);
+ this.state = {
+ messageFilter: "all",
+ messageGroupsFilter: "all",
+ collapsedMessages: [],
+ modifiedMessages: [],
+ selectedPBMessage: "",
+ evaluationStatus: {},
+ stringTargetingParameters: null,
+ newStringTargetingParameters: null,
+ copiedToClipboard: false,
+ attributionParameters: {
+ source: "addons.mozilla.org",
+ medium: "referral",
+ campaign: "non-fx-button",
+ content: `rta:${btoa("uBlock0@raymondhill.net")}`,
+ experiment: "ua-onboarding",
+ variation: "chrome",
+ ua: "Google Chrome 123",
+ dltoken: "00000000-0000-0000-0000-000000000000"
+ }
+ };
+ }
+
+ onMessageFromParent({
+ type,
+ data
+ }) {
+ // These only exists due to onPrefChange events in ASRouter
+ switch (type) {
+ case "UpdateAdminState":
+ {
+ this.setStateFromParent(data);
+ break;
+ }
+ }
+ }
+
+ setStateFromParent(data) {
+ this.setState(data);
+
+ if (!this.state.stringTargetingParameters) {
+ const stringTargetingParameters = {};
+
+ for (const param of Object.keys(data.targetingParameters)) {
+ stringTargetingParameters[param] = JSON.stringify(data.targetingParameters[param], null, 2);
+ }
+
+ this.setState({
+ stringTargetingParameters
+ });
+ }
+ }
+
+ componentWillMount() {
+ ASRouterUtils.addListener(this.onMessageFromParent);
+ const endpoint = ASRouterUtils.getPreviewEndpoint();
+ ASRouterUtils.sendMessage({
+ type: "ADMIN_CONNECT_STATE",
+ data: {
+ endpoint
+ }
+ }).then(this.setStateFromParent);
+ }
+
+ handleBlock(msg) {
+ return () => ASRouterUtils.blockById(msg.id);
+ }
+
+ handleUnblock(msg) {
+ return () => ASRouterUtils.unblockById(msg.id);
+ }
+
+ resetJSON(msg) {
+ // reset the displayed JSON for the given message
+ document.getElementById(`${msg.id}-textarea`).value = JSON.stringify(msg, null, 2); // remove the message from the list of modified IDs
+
+ let index = this.state.modifiedMessages.indexOf(msg.id);
+ this.setState(prevState => ({
+ modifiedMessages: [...prevState.modifiedMessages.slice(0, index), ...prevState.modifiedMessages.slice(index + 1)]
+ }));
+ }
+
+ handleOverride(id) {
+ return () => ASRouterUtils.overrideMessage(id).then(state => {
+ this.setStateFromParent(state);
+ this.props.notifyContent({
+ message: state.message
+ });
+ });
+ }
+
+ resetPBMessageState() {
+ // Iterate over Private Browsing messages and block/unblock each one to clear impressions
+ const PBMessages = this.state.messages.filter(message => message.template === "pb_newtab"); // messages from state go here
+
+ PBMessages.forEach(message => {
+ if (message !== null && message !== void 0 && message.id) {
+ ASRouterUtils.blockById(message.id);
+ ASRouterUtils.unblockById(message.id);
+ }
+ }); // Clear the selected messages & radio buttons
+
+ document.getElementById("clear radio").checked = true;
+ this.selectPBMessage("clear");
+ }
+
+ resetPBJSON(msg) {
+ // reset the displayed JSON for the given message
+ document.getElementById(`${msg.id}-textarea`).value = JSON.stringify(msg, null, 2);
+ }
+
+ handleOpenPB() {
+ ASRouterUtils.sendMessage({
+ type: "FORCE_PRIVATE_BROWSING_WINDOW",
+ data: {
+ message: {
+ content: this.state.selectedPBMessage
+ }
+ }
+ });
+ }
+
+ expireCache() {
+ ASRouterUtils.sendMessage({
+ type: "EXPIRE_QUERY_CACHE"
+ });
+ }
+
+ resetPref() {
+ ASRouterUtils.sendMessage({
+ type: "RESET_PROVIDER_PREF"
+ });
+ }
+
+ resetGroups(id, value) {
+ ASRouterUtils.sendMessage({
+ type: "RESET_GROUPS_STATE"
+ }).then(this.setStateFromParent);
+ }
+
+ handleExpressionEval() {
+ const context = {};
+
+ for (const param of Object.keys(this.state.stringTargetingParameters)) {
+ const value = this.state.stringTargetingParameters[param];
+ context[param] = value ? JSON.parse(value) : null;
+ }
+
+ ASRouterUtils.sendMessage({
+ type: "EVALUATE_JEXL_EXPRESSION",
+ data: {
+ expression: this.refs.expressionInput.value,
+ context
+ }
+ }).then(this.setStateFromParent);
+ }
+
+ onChangeTargetingParameters(event) {
+ const {
+ name
+ } = event.target;
+ const {
+ value
+ } = event.target;
+ this.setState(({
+ stringTargetingParameters
+ }) => {
+ let targetingParametersError = null;
+ const updatedParameters = { ...stringTargetingParameters
+ };
+ updatedParameters[name] = value;
+
+ try {
+ JSON.parse(value);
+ } catch (e) {
+ console.error(`Error parsing value of parameter ${name}`);
+ targetingParametersError = {
+ id: name
+ };
+ }
+
+ return {
+ copiedToClipboard: false,
+ evaluationStatus: {},
+ stringTargetingParameters: updatedParameters,
+ targetingParametersError
+ };
+ });
+ }
+
+ unblockAll() {
+ return ASRouterUtils.sendMessage({
+ type: "UNBLOCK_ALL"
+ }).then(this.setStateFromParent);
+ }
+
+ handleClearAllImpressionsByProvider() {
+ const providerId = this.state.messageFilter;
+
+ if (!providerId) {
+ return;
+ }
+
+ const userPrefInfo = this.state.userPrefs;
+ const isUserEnabled = providerId in userPrefInfo ? userPrefInfo[providerId] : true;
+ ASRouterUtils.sendMessage({
+ type: "DISABLE_PROVIDER",
+ data: providerId
+ });
+
+ if (!isUserEnabled) {
+ ASRouterUtils.sendMessage({
+ type: "SET_PROVIDER_USER_PREF",
+ data: {
+ id: providerId,
+ value: true
+ }
+ });
+ }
+
+ ASRouterUtils.sendMessage({
+ type: "ENABLE_PROVIDER",
+ data: providerId
+ });
+ }
+
+ handleEnabledToggle(event) {
+ const provider = this.state.providerPrefs.find(p => p.id === event.target.dataset.provider);
+ const userPrefInfo = this.state.userPrefs;
+ const isUserEnabled = provider.id in userPrefInfo ? userPrefInfo[provider.id] : true;
+ const isSystemEnabled = provider.enabled;
+ const isEnabling = event.target.checked;
+
+ if (isEnabling) {
+ if (!isUserEnabled) {
+ ASRouterUtils.sendMessage({
+ type: "SET_PROVIDER_USER_PREF",
+ data: {
+ id: provider.id,
+ value: true
+ }
+ });
+ }
+
+ if (!isSystemEnabled) {
+ ASRouterUtils.sendMessage({
+ type: "ENABLE_PROVIDER",
+ data: provider.id
+ });
+ }
+ } else {
+ ASRouterUtils.sendMessage({
+ type: "DISABLE_PROVIDER",
+ data: provider.id
+ });
+ }
+
+ this.setState({
+ messageFilter: "all"
+ });
+ }
+
+ handleUserPrefToggle(event) {
+ const action = {
+ type: "SET_PROVIDER_USER_PREF",
+ data: {
+ id: event.target.dataset.provider,
+ value: event.target.checked
+ }
+ };
+ ASRouterUtils.sendMessage(action);
+ this.setState({
+ messageFilter: "all"
+ });
+ }
+
+ onChangeMessageFilter(event) {
+ this.setState({
+ messageFilter: event.target.value
+ });
+ }
+
+ onChangeMessageGroupsFilter(event) {
+ this.setState({
+ messageGroupsFilter: event.target.value
+ });
+ } // Simulate a copy event that sets to clipboard all targeting paramters and values
+
+
+ onCopyTargetingParams(event) {
+ const stringTargetingParameters = { ...this.state.stringTargetingParameters
+ };
+
+ for (const key of Object.keys(stringTargetingParameters)) {
+ // If the value is not set the parameter will be lost when we stringify
+ if (stringTargetingParameters[key] === undefined) {
+ stringTargetingParameters[key] = null;
+ }
+ }
+
+ const setClipboardData = e => {
+ e.preventDefault();
+ e.clipboardData.setData("text", JSON.stringify(stringTargetingParameters, null, 2));
+ document.removeEventListener("copy", setClipboardData);
+ this.setState({
+ copiedToClipboard: true
+ });
+ };
+
+ document.addEventListener("copy", setClipboardData);
+ document.execCommand("copy");
+ }
+
+ onNewTargetingParams(event) {
+ this.setState({
+ newStringTargetingParameters: event.target.value
+ });
+ event.target.classList.remove("errorState");
+ this.refs.targetingParamsEval.innerText = "";
+
+ try {
+ const stringTargetingParameters = JSON.parse(event.target.value);
+ this.setState({
+ stringTargetingParameters
+ });
+ } catch (e) {
+ event.target.classList.add("errorState");
+ this.refs.targetingParamsEval.innerText = e.message;
+ }
+ }
+
+ toggleJSON(msgId) {
+ if (this.state.collapsedMessages.includes(msgId)) {
+ let index = this.state.collapsedMessages.indexOf(msgId);
+ this.setState(prevState => ({
+ collapsedMessages: [...prevState.collapsedMessages.slice(0, index), ...prevState.collapsedMessages.slice(index + 1)]
+ }));
+ } else {
+ this.setState(prevState => ({
+ collapsedMessages: prevState.collapsedMessages.concat(msgId)
+ }));
+ }
+ }
+
+ handleChange(msgId) {
+ if (!this.state.modifiedMessages.includes(msgId)) {
+ this.setState(prevState => ({
+ modifiedMessages: prevState.modifiedMessages.concat(msgId)
+ }));
+ }
+ }
+
+ renderMessageItem(msg) {
+ const isBlockedByGroup = this.state.groups.filter(group => msg.groups.includes(group.id)).some(group => !group.enabled);
+ const msgProvider = this.state.providers.find(provider => provider.id === msg.provider) || {};
+ const isProviderExcluded = msgProvider.exclude && msgProvider.exclude.includes(msg.id);
+ const isMessageBlocked = this.state.messageBlockList.includes(msg.id) || this.state.messageBlockList.includes(msg.campaign);
+ const isBlocked = isMessageBlocked || isBlockedByGroup || isProviderExcluded;
+ const impressions = this.state.messageImpressions[msg.id] ? this.state.messageImpressions[msg.id].length : 0;
+ const isCollapsed = this.state.collapsedMessages.includes(msg.id);
+ const isModified = this.state.modifiedMessages.includes(msg.id);
+ const aboutMessagePreviewSupported = ["infobar", "spotlight", "cfr_doorhanger"].includes(msg.template);
+ let itemClassName = "message-item";
+
+ if (isBlocked) {
+ itemClassName += " blocked";
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("tr", {
+ className: itemClassName,
+ key: `${msg.id}-${msg.provider}`
+ }, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "message-id"
+ }, /*#__PURE__*/external_React_default().createElement("span", null, msg.id, " ", /*#__PURE__*/external_React_default().createElement("br", null))), /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement(ToggleMessageJSON, {
+ msgId: `${msg.id}`,
+ toggleJSON: this.toggleJSON,
+ isCollapsed: isCollapsed
+ })), /*#__PURE__*/external_React_default().createElement("td", {
+ className: "button-column"
+ }, /*#__PURE__*/external_React_default().createElement("button", {
+ className: `button ${isBlocked ? "" : " primary"}`,
+ onClick: isBlocked ? this.handleUnblock(msg) : this.handleBlock(msg)
+ }, isBlocked ? "Unblock" : "Block"), // eslint-disable-next-line no-nested-ternary
+ isBlocked ? null : isModified ? /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button restore" // eslint-disable-next-line react/jsx-no-bind
+ ,
+ onClick: e => this.resetJSON(msg)
+ }, "Reset") : /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button show",
+ onClick: this.handleOverride(msg.id)
+ }, "Show"), isBlocked ? null : /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button modify" // eslint-disable-next-line react/jsx-no-bind
+ ,
+ onClick: e => this.modifyJson(msg)
+ }, "Modify"), aboutMessagePreviewSupported ? /*#__PURE__*/external_React_default().createElement(CopyButton, {
+ transformer: text => `about:messagepreview?json=${encodeURIComponent(btoa(text))}`,
+ label: "Share",
+ copiedLabel: "Copied!",
+ inputSelector: `#${msg.id}-textarea`,
+ className: "button share"
+ }) : null, /*#__PURE__*/external_React_default().createElement("br", null), "(", impressions, " impressions)"), /*#__PURE__*/external_React_default().createElement("td", {
+ className: "message-summary"
+ }, isBlocked && /*#__PURE__*/external_React_default().createElement("tr", null, "Block reason:", isBlockedByGroup && " Blocked by group", isProviderExcluded && " Excluded by provider", isMessageBlocked && " Message blocked"), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("pre", {
+ className: isCollapsed ? "collapsed" : "expanded"
+ }, /*#__PURE__*/external_React_default().createElement("textarea", {
+ id: `${msg.id}-textarea`,
+ name: msg.id,
+ className: "general-textarea",
+ disabled: isBlocked // eslint-disable-next-line react/jsx-no-bind
+ ,
+ onChange: e => this.handleChange(msg.id)
+ }, JSON.stringify(msg, null, 2))))));
+ }
+
+ selectPBMessage(msgId) {
+ if (msgId === "clear") {
+ this.setState({
+ selectedPBMessage: ""
+ });
+ } else {
+ let selected = document.getElementById(`${msgId} radio`);
+ let msg = JSON.parse(document.getElementById(`${msgId}-textarea`).value);
+
+ if (selected.checked) {
+ this.setState({
+ selectedPBMessage: msg === null || msg === void 0 ? void 0 : msg.content
+ });
+ } else {
+ this.setState({
+ selectedPBMessage: ""
+ });
+ }
+ }
+ }
+
+ modifyJson(content) {
+ const message = JSON.parse(document.getElementById(`${content.id}-textarea`).value);
+ return ASRouterUtils.modifyMessageJson(message).then(state => {
+ this.setStateFromParent(state);
+ this.props.notifyContent({
+ message: state.message
+ });
+ });
+ }
+
+ renderPBMessageItem(msg) {
+ const isBlocked = this.state.messageBlockList.includes(msg.id) || this.state.messageBlockList.includes(msg.campaign);
+ const impressions = this.state.messageImpressions[msg.id] ? this.state.messageImpressions[msg.id].length : 0;
+ const isCollapsed = this.state.collapsedMessages.includes(msg.id);
+ let itemClassName = "message-item";
+
+ if (isBlocked) {
+ itemClassName += " blocked";
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("tr", {
+ className: itemClassName,
+ key: `${msg.id}-${msg.provider}`
+ }, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "message-id"
+ }, /*#__PURE__*/external_React_default().createElement("span", null, msg.id, " ", /*#__PURE__*/external_React_default().createElement("br", null), /*#__PURE__*/external_React_default().createElement("br", null), "(", impressions, " impressions)")), /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement(ToggleMessageJSON, {
+ msgId: `${msg.id}`,
+ toggleJSON: this.toggleJSON,
+ isCollapsed: isCollapsed
+ })), /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("input", {
+ type: "radio",
+ id: `${msg.id} radio`,
+ name: "PB_message_radio",
+ style: {
+ marginBottom: 20
+ },
+ onClick: () => this.selectPBMessage(msg.id),
+ disabled: isBlocked
+ }), /*#__PURE__*/external_React_default().createElement("button", {
+ className: `button ${isBlocked ? "" : " primary"}`,
+ onClick: isBlocked ? this.handleUnblock(msg) : this.handleBlock(msg)
+ }, isBlocked ? "Unblock" : "Block"), /*#__PURE__*/external_React_default().createElement("button", {
+ className: "ASRouterButton slim button",
+ onClick: e => this.resetPBJSON(msg)
+ }, "Reset JSON")), /*#__PURE__*/external_React_default().createElement("td", {
+ className: `message-summary`
+ }, /*#__PURE__*/external_React_default().createElement("pre", {
+ className: isCollapsed ? "collapsed" : "expanded"
+ }, /*#__PURE__*/external_React_default().createElement("textarea", {
+ id: `${msg.id}-textarea`,
+ className: "wnp-textarea",
+ name: msg.id
+ }, JSON.stringify(msg, null, 2)))));
+ }
+
+ toggleAllMessages(messagesToShow) {
+ if (this.state.collapsedMessages.length) {
+ this.setState({
+ collapsedMessages: []
+ });
+ } else {
+ Array.prototype.forEach.call(messagesToShow, msg => {
+ this.setState(prevState => ({
+ collapsedMessages: prevState.collapsedMessages.concat(msg.id)
+ }));
+ });
+ }
+ }
+
+ renderMessages() {
+ if (!this.state.messages) {
+ return null;
+ }
+
+ const messagesToShow = this.state.messageFilter === "all" ? this.state.messages : this.state.messages.filter(message => message.provider === this.state.messageFilter && message.template !== "pb_newtab");
+ return /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "ASRouterButton slim" // eslint-disable-next-line react/jsx-no-bind
+ ,
+ onClick: e => this.toggleAllMessages(messagesToShow)
+ }, "Collapse/Expand All"), /*#__PURE__*/external_React_default().createElement("p", {
+ className: "helpLink"
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-small-spacer icon-info"
+ }), " ", /*#__PURE__*/external_React_default().createElement("span", null, "To modify a message, change the JSON and click 'Modify' to see your changes. Click 'Reset' to restore the JSON to the original. Click 'Share' to copy a link to the clipboard that can be used to preview the message by opening the link in Nightly/local builds.")), /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, messagesToShow.map(msg => this.renderMessageItem(msg)))));
+ }
+
+ renderMessagesByGroup() {
+ if (!this.state.messages) {
+ return null;
+ }
+
+ const messagesToShow = this.state.messageGroupsFilter === "all" ? this.state.messages.filter(m => m.groups.length) : this.state.messages.filter(message => message.groups.includes(this.state.messageGroupsFilter));
+ return /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, messagesToShow.map(msg => this.renderMessageItem(msg))));
+ }
+
+ renderPBMessages() {
+ if (!this.state.messages) {
+ return null;
+ }
+
+ const messagesToShow = this.state.messages.filter(message => message.template === "pb_newtab");
+ return /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, messagesToShow.map(msg => this.renderPBMessageItem(msg))));
+ }
+
+ renderMessageFilter() {
+ if (!this.state.providers) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("p", null, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "unblock-all ASRouterButton test-only",
+ onClick: this.unblockAll
+ }, "Unblock All Snippets"), "Show messages from", " ", /*#__PURE__*/external_React_default().createElement("select", {
+ value: this.state.messageFilter,
+ onChange: this.onChangeMessageFilter
+ }, /*#__PURE__*/external_React_default().createElement("option", {
+ value: "all"
+ }, "all providers"), this.state.providers.map(provider => /*#__PURE__*/external_React_default().createElement("option", {
+ key: provider.id,
+ value: provider.id
+ }, provider.id))), this.state.messageFilter !== "all" && !this.state.messageFilter.includes("_local_testing") ? /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button messages-reset",
+ onClick: this.handleClearAllImpressionsByProvider
+ }, "Reset All") : null);
+ }
+
+ renderMessageGroupsFilter() {
+ if (!this.state.groups) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("p", null, "Show messages from ", /*#__PURE__*/external_React_default().createElement("select", {
+ value: this.state.messageGroupsFilter,
+ onChange: this.onChangeMessageGroupsFilter
+ }, /*#__PURE__*/external_React_default().createElement("option", {
+ value: "all"
+ }, "all groups"), this.state.groups.map(group => /*#__PURE__*/external_React_default().createElement("option", {
+ key: group.id,
+ value: group.id
+ }, group.id))));
+ }
+
+ renderTableHead() {
+ return /*#__PURE__*/external_React_default().createElement("thead", null, /*#__PURE__*/external_React_default().createElement("tr", {
+ className: "message-item"
+ }, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }), /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Provider ID"), /*#__PURE__*/external_React_default().createElement("td", null, "Source"), /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Cohort"), /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Last Updated")));
+ }
+
+ renderProviders() {
+ const providersConfig = this.state.providerPrefs;
+ const providerInfo = this.state.providers;
+ const userPrefInfo = this.state.userPrefs;
+ return /*#__PURE__*/external_React_default().createElement("table", null, this.renderTableHead(), /*#__PURE__*/external_React_default().createElement("tbody", null, providersConfig.map((provider, i) => {
+ const isTestProvider = provider.id.includes("_local_testing");
+ const info = providerInfo.find(p => p.id === provider.id) || {};
+ const isUserEnabled = provider.id in userPrefInfo ? userPrefInfo[provider.id] : true;
+ const isSystemEnabled = isTestProvider || provider.enabled;
+ let label = "local";
+
+ if (provider.type === "remote") {
+ label = /*#__PURE__*/external_React_default().createElement("span", null, "endpoint (", /*#__PURE__*/external_React_default().createElement("a", {
+ className: "providerUrl",
+ target: "_blank",
+ href: info.url,
+ rel: "noopener noreferrer"
+ }, info.url), ")");
+ } else if (provider.type === "remote-settings") {
+ label = `remote settings (${provider.collection})`;
+ } else if (provider.type === "remote-experiments") {
+ label = /*#__PURE__*/external_React_default().createElement("span", null, "remote settings (", /*#__PURE__*/external_React_default().createElement("a", {
+ className: "providerUrl",
+ target: "_blank",
+ href: "https://firefox.settings.services.mozilla.com/v1/buckets/main/collections/nimbus-desktop-experiments/records",
+ rel: "noopener noreferrer"
+ }, "nimbus-desktop-experiments"), ")");
+ }
+
+ let reasonsDisabled = [];
+
+ if (!isSystemEnabled) {
+ reasonsDisabled.push("system pref");
+ }
+
+ if (!isUserEnabled) {
+ reasonsDisabled.push("user pref");
+ }
+
+ if (reasonsDisabled.length) {
+ label = `disabled via ${reasonsDisabled.join(", ")}`;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("tr", {
+ className: "message-item",
+ key: i
+ }, /*#__PURE__*/external_React_default().createElement("td", null, isTestProvider ? /*#__PURE__*/external_React_default().createElement("input", {
+ type: "checkbox",
+ disabled: true,
+ readOnly: true,
+ checked: true
+ }) : /*#__PURE__*/external_React_default().createElement("input", {
+ type: "checkbox",
+ "data-provider": provider.id,
+ checked: isUserEnabled && isSystemEnabled,
+ onChange: this.handleEnabledToggle
+ })), /*#__PURE__*/external_React_default().createElement("td", null, provider.id), /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("span", {
+ className: `sourceLabel${isUserEnabled && isSystemEnabled ? "" : " isDisabled"}`
+ }, label)), /*#__PURE__*/external_React_default().createElement("td", null, provider.cohort), /*#__PURE__*/external_React_default().createElement("td", {
+ style: {
+ whiteSpace: "nowrap"
+ }
+ }, info.lastUpdated ? new Date(info.lastUpdated).toLocaleString() : ""));
+ })));
+ }
+
+ renderTargetingParameters() {
+ // There was no error and the result is truthy
+ const success = this.state.evaluationStatus.success && !!this.state.evaluationStatus.result;
+ const result = JSON.stringify(this.state.evaluationStatus.result, null, 2) || "(Empty result)";
+ return /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("h2", null, "Evaluate JEXL expression"))), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("p", null, /*#__PURE__*/external_React_default().createElement("textarea", {
+ ref: "expressionInput",
+ rows: "10",
+ cols: "60",
+ placeholder: "Evaluate JEXL expressions and mock parameters by changing their values below"
+ })), /*#__PURE__*/external_React_default().createElement("p", null, "Status:", " ", /*#__PURE__*/external_React_default().createElement("span", {
+ ref: "evaluationStatus"
+ }, success ? "✅" : "❌", ", Result: ", result))), /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "ASRouterButton secondary",
+ onClick: this.handleExpressionEval
+ }, "Evaluate"))), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("h2", null, "Modify targeting parameters"))), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "ASRouterButton secondary",
+ onClick: this.onCopyTargetingParams,
+ disabled: this.state.copiedToClipboard
+ }, this.state.copiedToClipboard ? "Parameters copied!" : "Copy parameters"))), this.state.stringTargetingParameters && Object.keys(this.state.stringTargetingParameters).map((param, i) => {
+ const value = this.state.stringTargetingParameters[param];
+ const errorState = this.state.targetingParametersError && this.state.targetingParametersError.id === param;
+ const className = errorState ? "errorState" : "";
+ const inputComp = (value && value.length) > 30 ? /*#__PURE__*/external_React_default().createElement("textarea", {
+ name: param,
+ className: className,
+ value: value,
+ rows: "10",
+ cols: "60",
+ onChange: this.onChangeTargetingParameters
+ }) : /*#__PURE__*/external_React_default().createElement("input", {
+ name: param,
+ className: className,
+ value: value,
+ onChange: this.onChangeTargetingParameters
+ });
+ return /*#__PURE__*/external_React_default().createElement("tr", {
+ key: i
+ }, /*#__PURE__*/external_React_default().createElement("td", null, param), /*#__PURE__*/external_React_default().createElement("td", null, inputComp));
+ })));
+ }
+
+ onChangeAttributionParameters(event) {
+ const {
+ name,
+ value
+ } = event.target;
+ this.setState(({
+ attributionParameters
+ }) => {
+ const updatedParameters = { ...attributionParameters
+ };
+ updatedParameters[name] = value;
+ return {
+ attributionParameters: updatedParameters
+ };
+ });
+ }
+
+ setAttribution(e) {
+ ASRouterUtils.sendMessage({
+ type: "FORCE_ATTRIBUTION",
+ data: this.state.attributionParameters
+ }).then(this.setStateFromParent);
+ }
+
+ _getGroupImpressionsCount(id, frequency) {
+ if (frequency) {
+ return this.state.groupImpressions[id] ? this.state.groupImpressions[id].length : 0;
+ }
+
+ return "n/a";
+ }
+
+ renderDiscoveryStream() {
+ const {
+ config
+ } = this.props.DiscoveryStream;
+ return /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tbody", null, /*#__PURE__*/external_React_default().createElement("tr", {
+ className: "message-item"
+ }, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Enabled"), /*#__PURE__*/external_React_default().createElement("td", null, config.enabled ? "yes" : "no")), /*#__PURE__*/external_React_default().createElement("tr", {
+ className: "message-item"
+ }, /*#__PURE__*/external_React_default().createElement("td", {
+ className: "min"
+ }, "Endpoint"), /*#__PURE__*/external_React_default().createElement("td", null, config.endpoint || "(empty)")))));
+ }
+
+ renderAttributionParamers() {
+ return /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("h2", null, " Attribution Parameters "), /*#__PURE__*/external_React_default().createElement("p", null, " ", "This forces the browser to set some attribution parameters, useful for testing the Return To AMO feature. Clicking on 'Force Attribution', with the default values in each field, will demo the Return To AMO flow with the addon called 'uBlock Origin'. If you wish to try different attribution parameters, enter them in the text boxes. If you wish to try a different addon with the Return To AMO flow, make sure the 'content' text box has a string that is 'rta:base64(addonID)', the base64 string of the addonID prefixed with 'rta:'. The addon must currently be a recommended addon on AMO. Then click 'Force Attribution'. Clicking on 'Force Attribution' with blank text boxes reset attribution data."), /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("b", null, " Source ")), /*#__PURE__*/external_React_default().createElement("td", null, " ", /*#__PURE__*/external_React_default().createElement("input", {
+ type: "text",
+ name: "source",
+ placeholder: "addons.mozilla.org",
+ value: this.state.attributionParameters.source,
+ onChange: this.onChangeAttributionParameters
+ }), " ")), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("b", null, " Medium ")), /*#__PURE__*/external_React_default().createElement("td", null, " ", /*#__PURE__*/external_React_default().createElement("input", {
+ type: "text",
+ name: "medium",
+ placeholder: "referral",
+ value: this.state.attributionParameters.medium,
+ onChange: this.onChangeAttributionParameters
+ }), " ")), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("b", null, " Campaign ")), /*#__PURE__*/external_React_default().createElement("td", null, " ", /*#__PURE__*/external_React_default().createElement("input", {
+ type: "text",
+ name: "campaign",
+ placeholder: "non-fx-button",
+ value: this.state.attributionParameters.campaign,
+ onChange: this.onChangeAttributionParameters
+ }), " ")), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("b", null, " Content ")), /*#__PURE__*/external_React_default().createElement("td", null, " ", /*#__PURE__*/external_React_default().createElement("input", {
+ type: "text",
+ name: "content",
+ placeholder: `rta:${btoa("uBlock0@raymondhill.net")}`,
+ value: this.state.attributionParameters.content,
+ onChange: this.onChangeAttributionParameters
+ }), " ")), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("b", null, " Experiment ")), /*#__PURE__*/external_React_default().createElement("td", null, " ", /*#__PURE__*/external_React_default().createElement("input", {
+ type: "text",
+ name: "experiment",
+ placeholder: "ua-onboarding",
+ value: this.state.attributionParameters.experiment,
+ onChange: this.onChangeAttributionParameters
+ }), " ")), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("b", null, " Variation ")), /*#__PURE__*/external_React_default().createElement("td", null, " ", /*#__PURE__*/external_React_default().createElement("input", {
+ type: "text",
+ name: "variation",
+ placeholder: "chrome",
+ value: this.state.attributionParameters.variation,
+ onChange: this.onChangeAttributionParameters
+ }), " ")), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("b", null, " User Agent ")), /*#__PURE__*/external_React_default().createElement("td", null, " ", /*#__PURE__*/external_React_default().createElement("input", {
+ type: "text",
+ name: "ua",
+ placeholder: "Google Chrome 123",
+ value: this.state.attributionParameters.ua,
+ onChange: this.onChangeAttributionParameters
+ }), " ")), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement("b", null, " Download Token ")), /*#__PURE__*/external_React_default().createElement("td", null, " ", /*#__PURE__*/external_React_default().createElement("input", {
+ type: "text",
+ name: "dltoken",
+ placeholder: "00000000-0000-0000-0000-000000000000",
+ value: this.state.attributionParameters.dltoken,
+ onChange: this.onChangeAttributionParameters
+ }), " ")), /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("td", null, " ", /*#__PURE__*/external_React_default().createElement("button", {
+ className: "ASRouterButton primary button",
+ onClick: this.setAttribution
+ }, " ", "Force Attribution", " "), " "))));
+ }
+
+ renderErrorMessage({
+ id,
+ errors
+ }) {
+ const providerId = /*#__PURE__*/external_React_default().createElement("td", {
+ rowSpan: errors.length
+ }, id); // .reverse() so that the last error (most recent) is first
+
+ return errors.map(({
+ error,
+ timestamp
+ }, cellKey) => /*#__PURE__*/external_React_default().createElement("tr", {
+ key: cellKey
+ }, cellKey === errors.length - 1 ? providerId : null, /*#__PURE__*/external_React_default().createElement("td", null, error.message), /*#__PURE__*/external_React_default().createElement("td", null, relativeTime(timestamp)))).reverse();
+ }
+
+ renderErrors() {
+ const providersWithErrors = this.state.providers && this.state.providers.filter(p => p.errors && p.errors.length);
+
+ if (providersWithErrors && providersWithErrors.length) {
+ return /*#__PURE__*/external_React_default().createElement("table", {
+ className: "errorReporting"
+ }, /*#__PURE__*/external_React_default().createElement("thead", null, /*#__PURE__*/external_React_default().createElement("tr", null, /*#__PURE__*/external_React_default().createElement("th", null, "Provider ID"), /*#__PURE__*/external_React_default().createElement("th", null, "Message"), /*#__PURE__*/external_React_default().createElement("th", null, "Timestamp"))), /*#__PURE__*/external_React_default().createElement("tbody", null, providersWithErrors.map(this.renderErrorMessage)));
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("p", null, "No errors");
+ }
+
+ renderPBTab() {
+ if (!this.state.messages) {
+ return null;
+ }
+
+ let messagesToShow = this.state.messages.filter(message => message.template === "pb_newtab");
+ return /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("p", {
+ className: "helpLink"
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-small-spacer icon-info"
+ }), " ", /*#__PURE__*/external_React_default().createElement("span", null, "To view an available message, select its radio button and click \"Open a Private Browsing Window\".", /*#__PURE__*/external_React_default().createElement("br", null), "To modify a message, make changes to the JSON first, then select the radio button. (To make new changes, click \"Reset Message State\", make your changes, and reselect the radio button.)", /*#__PURE__*/external_React_default().createElement("br", null), "Click \"Reset Message State\" to clear all message impressions and view messages in a clean state.", /*#__PURE__*/external_React_default().createElement("br", null), "Note that ContentSearch functions do not work in debug mode.")), /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "ASRouterButton primary button",
+ onClick: this.handleOpenPB
+ }, "Open a Private Browsing Window"), /*#__PURE__*/external_React_default().createElement("button", {
+ className: "ASRouterButton primary button",
+ style: {
+ marginInlineStart: 12
+ },
+ onClick: this.resetPBMessageState
+ }, "Reset Message State"), /*#__PURE__*/external_React_default().createElement("br", null), /*#__PURE__*/external_React_default().createElement("input", {
+ type: "radio",
+ id: `clear radio`,
+ name: "PB_message_radio",
+ value: "clearPBMessage",
+ style: {
+ display: "none"
+ }
+ }), /*#__PURE__*/external_React_default().createElement("h2", null, "Messages"), /*#__PURE__*/external_React_default().createElement("button", {
+ className: "ASRouterButton slim button" // eslint-disable-next-line react/jsx-no-bind
+ ,
+ onClick: e => this.toggleAllMessages(messagesToShow)
+ }, "Collapse/Expand All"), this.renderPBMessages()));
+ }
+
+ getSection() {
+ const [section] = this.props.location.routes;
+
+ switch (section) {
+ case "private":
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("h2", null, "Private Browsing Messages"), this.renderPBTab());
+
+ case "targeting":
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("h2", null, "Targeting Utilities"), /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button",
+ onClick: this.expireCache
+ }, "Expire Cache"), " ", "(This expires the cache in ASR Targeting for bookmarks and top sites)", this.renderTargetingParameters(), this.renderAttributionParamers());
+
+ case "groups":
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("h2", null, "Message Groups"), /*#__PURE__*/external_React_default().createElement("button", {
+ className: "button",
+ onClick: this.resetGroups
+ }, "Reset group impressions"), /*#__PURE__*/external_React_default().createElement("table", null, /*#__PURE__*/external_React_default().createElement("thead", null, /*#__PURE__*/external_React_default().createElement("tr", {
+ className: "message-item"
+ }, /*#__PURE__*/external_React_default().createElement("td", null, "Enabled"), /*#__PURE__*/external_React_default().createElement("td", null, "Impressions count"), /*#__PURE__*/external_React_default().createElement("td", null, "Custom frequency"), /*#__PURE__*/external_React_default().createElement("td", null, "User preferences"))), /*#__PURE__*/external_React_default().createElement("tbody", null, this.state.groups && this.state.groups.map(({
+ id,
+ enabled,
+ frequency,
+ userPreferences = []
+ }, index) => /*#__PURE__*/external_React_default().createElement(Row, {
+ key: id
+ }, /*#__PURE__*/external_React_default().createElement("td", null, /*#__PURE__*/external_React_default().createElement(TogglePrefCheckbox, {
+ checked: enabled,
+ pref: id,
+ disabled: true
+ })), /*#__PURE__*/external_React_default().createElement("td", null, this._getGroupImpressionsCount(id, frequency)), /*#__PURE__*/external_React_default().createElement("td", null, JSON.stringify(frequency, null, 2)), /*#__PURE__*/external_React_default().createElement("td", null, userPreferences.join(", ")))))), this.renderMessageGroupsFilter(), this.renderMessagesByGroup());
+
+ case "ds":
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("h2", null, "Discovery Stream"), /*#__PURE__*/external_React_default().createElement(DiscoveryStreamAdmin, {
+ state: {
+ DiscoveryStream: this.props.DiscoveryStream,
+ Personalization: this.props.Personalization
+ },
+ otherPrefs: this.props.Prefs.values,
+ dispatch: this.props.dispatch
+ }));
+
+ case "errors":
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("h2", null, "ASRouter Errors"), this.renderErrors());
+
+ default:
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("h2", null, "Message Providers", " ", /*#__PURE__*/external_React_default().createElement("button", {
+ title: "Restore all provider settings that ship with Firefox",
+ className: "button",
+ onClick: this.resetPref
+ }, "Restore default prefs")), this.state.providers ? this.renderProviders() : null, /*#__PURE__*/external_React_default().createElement("h2", null, "Messages"), this.renderMessageFilter(), this.renderMessages());
+ }
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: `asrouter-admin ${this.props.collapsed ? "collapsed" : "expanded"}`
+ }, /*#__PURE__*/external_React_default().createElement("aside", {
+ className: "sidebar"
+ }, /*#__PURE__*/external_React_default().createElement("ul", null, /*#__PURE__*/external_React_default().createElement("li", null, /*#__PURE__*/external_React_default().createElement("a", {
+ href: "#devtools"
+ }, "General")), /*#__PURE__*/external_React_default().createElement("li", null, /*#__PURE__*/external_React_default().createElement("a", {
+ href: "#devtools-private"
+ }, "Private Browsing")), /*#__PURE__*/external_React_default().createElement("li", null, /*#__PURE__*/external_React_default().createElement("a", {
+ href: "#devtools-targeting"
+ }, "Targeting")), /*#__PURE__*/external_React_default().createElement("li", null, /*#__PURE__*/external_React_default().createElement("a", {
+ href: "#devtools-groups"
+ }, "Message Groups")), /*#__PURE__*/external_React_default().createElement("li", null, /*#__PURE__*/external_React_default().createElement("a", {
+ href: "#devtools-ds"
+ }, "Discovery Stream")), /*#__PURE__*/external_React_default().createElement("li", null, /*#__PURE__*/external_React_default().createElement("a", {
+ href: "#devtools-errors"
+ }, "Errors")))), /*#__PURE__*/external_React_default().createElement("main", {
+ className: "main-panel"
+ }, /*#__PURE__*/external_React_default().createElement("h1", null, "AS Router Admin"), /*#__PURE__*/external_React_default().createElement("p", {
+ className: "helpLink"
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-small-spacer icon-info"
+ }), " ", /*#__PURE__*/external_React_default().createElement("span", null, "Need help using these tools? Check out our", " ", /*#__PURE__*/external_React_default().createElement("a", {
+ target: "blank",
+ href: "https://firefox-source-docs.mozilla.org/browser/components/newtab/content-src/asrouter/docs/debugging-docs.html"
+ }, "documentation"))), this.getSection()));
+ }
+
+}
+class CollapseToggle extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onCollapseToggle = this.onCollapseToggle.bind(this);
+ this.state = {
+ collapsed: false
+ };
+ }
+
+ get renderAdmin() {
+ const {
+ props
+ } = this;
+ return props.location.hash && (props.location.hash.startsWith("#asrouter") || props.location.hash.startsWith("#devtools"));
+ }
+
+ onCollapseToggle(e) {
+ e.preventDefault();
+ this.setState(state => ({
+ collapsed: !state.collapsed
+ }));
+ }
+
+ setBodyClass() {
+ if (this.renderAdmin && !this.state.collapsed) {
+ __webpack_require__.g.document.body.classList.add("no-scroll");
+ } else {
+ __webpack_require__.g.document.body.classList.remove("no-scroll");
+ }
+ }
+
+ componentDidMount() {
+ this.setBodyClass();
+ }
+
+ componentDidUpdate() {
+ this.setBodyClass();
+ }
+
+ componentWillUnmount() {
+ __webpack_require__.g.document.body.classList.remove("no-scroll");
+ ASRouterUtils.removeListener(this.onMessageFromParent);
+ }
+
+ render() {
+ const {
+ props
+ } = this;
+ const {
+ renderAdmin
+ } = this;
+ const isCollapsed = this.state.collapsed || !renderAdmin;
+ const label = `${isCollapsed ? "Expand" : "Collapse"} devtools`;
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("a", {
+ href: "#devtools",
+ title: label,
+ "aria-label": label,
+ className: `asrouter-toggle ${isCollapsed ? "collapsed" : "expanded"}`,
+ onClick: this.renderAdmin ? this.onCollapseToggle : null
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-devtools"
+ })), renderAdmin ? /*#__PURE__*/external_React_default().createElement(ASRouterAdminInner, ASRouterAdmin_extends({}, props, {
+ collapsed: this.state.collapsed
+ })) : null);
+ }
+
+}
+
+const _ASRouterAdmin = props => /*#__PURE__*/external_React_default().createElement(SimpleHashRouter, null, /*#__PURE__*/external_React_default().createElement(CollapseToggle, props));
+
+const ASRouterAdmin = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ Sections: state.Sections,
+ DiscoveryStream: state.DiscoveryStream,
+ Personalization: state.Personalization,
+ Prefs: state.Prefs
+}))(_ASRouterAdmin);
+;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/types.js
+/**
+ * The `FluentType` class is the base of Fluent's type system.
+ *
+ * Fluent types wrap JavaScript values and store additional configuration for
+ * them, which can then be used in the `toString` method together with a proper
+ * `Intl` formatter.
+ */
+class FluentType {
+ /**
+ * Create a `FluentType` instance.
+ *
+ * @param value The JavaScript value to wrap.
+ */
+ constructor(value) {
+ this.value = value;
+ }
+ /**
+ * Unwrap the raw value stored by this `FluentType`.
+ */
+
+
+ valueOf() {
+ return this.value;
+ }
+
+}
+/**
+ * A `FluentType` representing no correct value.
+ */
+
+class FluentNone extends FluentType {
+ /**
+ * Create an instance of `FluentNone` with an optional fallback value.
+ * @param value The fallback value of this `FluentNone`.
+ */
+ constructor(value = "???") {
+ super(value);
+ }
+ /**
+ * Format this `FluentNone` to the fallback string.
+ */
+
+
+ toString(scope) {
+ return `{${this.value}}`;
+ }
+
+}
+/**
+ * A `FluentType` representing a number.
+ *
+ * A `FluentNumber` instance stores the number value of the number it
+ * represents. It may also store an option bag of options which will be passed
+ * to `Intl.NumerFormat` when the `FluentNumber` is formatted to a string.
+ */
+
+class FluentNumber extends FluentType {
+ /**
+ * Create an instance of `FluentNumber` with options to the
+ * `Intl.NumberFormat` constructor.
+ *
+ * @param value The number value of this `FluentNumber`.
+ * @param opts Options which will be passed to `Intl.NumberFormat`.
+ */
+ constructor(value, opts = {}) {
+ super(value);
+ this.opts = opts;
+ }
+ /**
+ * Format this `FluentNumber` to a string.
+ */
+
+
+ toString(scope) {
+ try {
+ const nf = scope.memoizeIntlObject(Intl.NumberFormat, this.opts);
+ return nf.format(this.value);
+ } catch (err) {
+ scope.reportError(err);
+ return this.value.toString(10);
+ }
+ }
+
+}
+/**
+ * A `FluentType` representing a date and time.
+ *
+ * A `FluentDateTime` instance stores the number value of the date it
+ * represents, as a numerical timestamp in milliseconds. It may also store an
+ * option bag of options which will be passed to `Intl.DateTimeFormat` when the
+ * `FluentDateTime` is formatted to a string.
+ */
+
+class FluentDateTime extends FluentType {
+ /**
+ * Create an instance of `FluentDateTime` with options to the
+ * `Intl.DateTimeFormat` constructor.
+ *
+ * @param value The number value of this `FluentDateTime`, in milliseconds.
+ * @param opts Options which will be passed to `Intl.DateTimeFormat`.
+ */
+ constructor(value, opts = {}) {
+ super(value);
+ this.opts = opts;
+ }
+ /**
+ * Format this `FluentDateTime` to a string.
+ */
+
+
+ toString(scope) {
+ try {
+ const dtf = scope.memoizeIntlObject(Intl.DateTimeFormat, this.opts);
+ return dtf.format(this.value);
+ } catch (err) {
+ scope.reportError(err);
+ return new Date(this.value).toISOString();
+ }
+ }
+
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/resolver.js
+/* global Intl */
+
+/**
+ * @overview
+ *
+ * The role of the Fluent resolver is to format a `Pattern` to an instance of
+ * `FluentValue`. For performance reasons, primitive strings are considered
+ * such instances, too.
+ *
+ * Translations can contain references to other messages or variables,
+ * conditional logic in form of select expressions, traits which describe their
+ * grammatical features, and can use Fluent builtins which make use of the
+ * `Intl` formatters to format numbers and dates into the bundle's languages.
+ * See the documentation of the Fluent syntax for more information.
+ *
+ * In case of errors the resolver will try to salvage as much of the
+ * translation as possible. In rare situations where the resolver didn't know
+ * how to recover from an error it will return an instance of `FluentNone`.
+ *
+ * All expressions resolve to an instance of `FluentValue`. The caller should
+ * use the `toString` method to convert the instance to a native value.
+ *
+ * Functions in this file pass around an instance of the `Scope` class, which
+ * stores the data required for successful resolution and error recovery.
+ */
+ // The maximum number of placeables which can be expanded in a single call to
+// `formatPattern`. The limit protects against the Billion Laughs and Quadratic
+// Blowup attacks. See https://msdn.microsoft.com/en-us/magazine/ee335713.aspx.
+
+const MAX_PLACEABLES = 100; // Unicode bidi isolation characters.
+
+const FSI = "\u2068";
+const PDI = "\u2069"; // Helper: match a variant key to the given selector.
+
+function match(scope, selector, key) {
+ if (key === selector) {
+ // Both are strings.
+ return true;
+ } // XXX Consider comparing options too, e.g. minimumFractionDigits.
+
+
+ if (key instanceof FluentNumber && selector instanceof FluentNumber && key.value === selector.value) {
+ return true;
+ }
+
+ if (selector instanceof FluentNumber && typeof key === "string") {
+ let category = scope.memoizeIntlObject(Intl.PluralRules, selector.opts).select(selector.value);
+
+ if (key === category) {
+ return true;
+ }
+ }
+
+ return false;
+} // Helper: resolve the default variant from a list of variants.
+
+
+function getDefault(scope, variants, star) {
+ if (variants[star]) {
+ return resolvePattern(scope, variants[star].value);
+ }
+
+ scope.reportError(new RangeError("No default"));
+ return new FluentNone();
+} // Helper: resolve arguments to a call expression.
+
+
+function getArguments(scope, args) {
+ const positional = [];
+ const named = Object.create(null);
+
+ for (const arg of args) {
+ if (arg.type === "narg") {
+ named[arg.name] = resolveExpression(scope, arg.value);
+ } else {
+ positional.push(resolveExpression(scope, arg));
+ }
+ }
+
+ return {
+ positional,
+ named
+ };
+} // Resolve an expression to a Fluent type.
+
+
+function resolveExpression(scope, expr) {
+ switch (expr.type) {
+ case "str":
+ return expr.value;
+
+ case "num":
+ return new FluentNumber(expr.value, {
+ minimumFractionDigits: expr.precision
+ });
+
+ case "var":
+ return resolveVariableReference(scope, expr);
+
+ case "mesg":
+ return resolveMessageReference(scope, expr);
+
+ case "term":
+ return resolveTermReference(scope, expr);
+
+ case "func":
+ return resolveFunctionReference(scope, expr);
+
+ case "select":
+ return resolveSelectExpression(scope, expr);
+
+ default:
+ return new FluentNone();
+ }
+} // Resolve a reference to a variable.
+
+
+function resolveVariableReference(scope, {
+ name
+}) {
+ let arg;
+
+ if (scope.params) {
+ // We're inside a TermReference. It's OK to reference undefined parameters.
+ if (Object.prototype.hasOwnProperty.call(scope.params, name)) {
+ arg = scope.params[name];
+ } else {
+ return new FluentNone(`$${name}`);
+ }
+ } else if (scope.args && Object.prototype.hasOwnProperty.call(scope.args, name)) {
+ // We're in the top-level Pattern or inside a MessageReference. Missing
+ // variables references produce ReferenceErrors.
+ arg = scope.args[name];
+ } else {
+ scope.reportError(new ReferenceError(`Unknown variable: $${name}`));
+ return new FluentNone(`$${name}`);
+ } // Return early if the argument already is an instance of FluentType.
+
+
+ if (arg instanceof FluentType) {
+ return arg;
+ } // Convert the argument to a Fluent type.
+
+
+ switch (typeof arg) {
+ case "string":
+ return arg;
+
+ case "number":
+ return new FluentNumber(arg);
+
+ case "object":
+ if (arg instanceof Date) {
+ return new FluentDateTime(arg.getTime());
+ }
+
+ // eslint-disable-next-line no-fallthrough
+
+ default:
+ scope.reportError(new TypeError(`Variable type not supported: $${name}, ${typeof arg}`));
+ return new FluentNone(`$${name}`);
+ }
+} // Resolve a reference to another message.
+
+
+function resolveMessageReference(scope, {
+ name,
+ attr
+}) {
+ const message = scope.bundle._messages.get(name);
+
+ if (!message) {
+ scope.reportError(new ReferenceError(`Unknown message: ${name}`));
+ return new FluentNone(name);
+ }
+
+ if (attr) {
+ const attribute = message.attributes[attr];
+
+ if (attribute) {
+ return resolvePattern(scope, attribute);
+ }
+
+ scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));
+ return new FluentNone(`${name}.${attr}`);
+ }
+
+ if (message.value) {
+ return resolvePattern(scope, message.value);
+ }
+
+ scope.reportError(new ReferenceError(`No value: ${name}`));
+ return new FluentNone(name);
+} // Resolve a call to a Term with key-value arguments.
+
+
+function resolveTermReference(scope, {
+ name,
+ attr,
+ args
+}) {
+ const id = `-${name}`;
+
+ const term = scope.bundle._terms.get(id);
+
+ if (!term) {
+ scope.reportError(new ReferenceError(`Unknown term: ${id}`));
+ return new FluentNone(id);
+ }
+
+ if (attr) {
+ const attribute = term.attributes[attr];
+
+ if (attribute) {
+ // Every TermReference has its own variables.
+ scope.params = getArguments(scope, args).named;
+ const resolved = resolvePattern(scope, attribute);
+ scope.params = null;
+ return resolved;
+ }
+
+ scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));
+ return new FluentNone(`${id}.${attr}`);
+ }
+
+ scope.params = getArguments(scope, args).named;
+ const resolved = resolvePattern(scope, term.value);
+ scope.params = null;
+ return resolved;
+} // Resolve a call to a Function with positional and key-value arguments.
+
+
+function resolveFunctionReference(scope, {
+ name,
+ args
+}) {
+ // Some functions are built-in. Others may be provided by the runtime via
+ // the `FluentBundle` constructor.
+ let func = scope.bundle._functions[name];
+
+ if (!func) {
+ scope.reportError(new ReferenceError(`Unknown function: ${name}()`));
+ return new FluentNone(`${name}()`);
+ }
+
+ if (typeof func !== "function") {
+ scope.reportError(new TypeError(`Function ${name}() is not callable`));
+ return new FluentNone(`${name}()`);
+ }
+
+ try {
+ let resolved = getArguments(scope, args);
+ return func(resolved.positional, resolved.named);
+ } catch (err) {
+ scope.reportError(err);
+ return new FluentNone(`${name}()`);
+ }
+} // Resolve a select expression to the member object.
+
+
+function resolveSelectExpression(scope, {
+ selector,
+ variants,
+ star
+}) {
+ let sel = resolveExpression(scope, selector);
+
+ if (sel instanceof FluentNone) {
+ return getDefault(scope, variants, star);
+ } // Match the selector against keys of each variant, in order.
+
+
+ for (const variant of variants) {
+ const key = resolveExpression(scope, variant.key);
+
+ if (match(scope, sel, key)) {
+ return resolvePattern(scope, variant.value);
+ }
+ }
+
+ return getDefault(scope, variants, star);
+} // Resolve a pattern (a complex string with placeables).
+
+
+function resolveComplexPattern(scope, ptn) {
+ if (scope.dirty.has(ptn)) {
+ scope.reportError(new RangeError("Cyclic reference"));
+ return new FluentNone();
+ } // Tag the pattern as dirty for the purpose of the current resolution.
+
+
+ scope.dirty.add(ptn);
+ const result = []; // Wrap interpolations with Directional Isolate Formatting characters
+ // only when the pattern has more than one element.
+
+ const useIsolating = scope.bundle._useIsolating && ptn.length > 1;
+
+ for (const elem of ptn) {
+ if (typeof elem === "string") {
+ result.push(scope.bundle._transform(elem));
+ continue;
+ }
+
+ scope.placeables++;
+
+ if (scope.placeables > MAX_PLACEABLES) {
+ scope.dirty.delete(ptn); // This is a fatal error which causes the resolver to instantly bail out
+ // on this pattern. The length check protects against excessive memory
+ // usage, and throwing protects against eating up the CPU when long
+ // placeables are deeply nested.
+
+ throw new RangeError(`Too many placeables expanded: ${scope.placeables}, ` + `max allowed is ${MAX_PLACEABLES}`);
+ }
+
+ if (useIsolating) {
+ result.push(FSI);
+ }
+
+ result.push(resolveExpression(scope, elem).toString(scope));
+
+ if (useIsolating) {
+ result.push(PDI);
+ }
+ }
+
+ scope.dirty.delete(ptn);
+ return result.join("");
+} // Resolve a simple or a complex Pattern to a FluentString (which is really the
+// string primitive).
+
+function resolvePattern(scope, value) {
+ // Resolve a simple pattern.
+ if (typeof value === "string") {
+ return scope.bundle._transform(value);
+ }
+
+ return resolveComplexPattern(scope, value);
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/scope.js
+class Scope {
+ constructor(bundle, errors, args) {
+ /** The Set of patterns already encountered during this resolution.
+ * Used to detect and prevent cyclic resolutions. */
+ this.dirty = new WeakSet();
+ /** A dict of parameters passed to a TermReference. */
+
+ this.params = null;
+ /** The running count of placeables resolved so far. Used to detect the
+ * Billion Laughs and Quadratic Blowup attacks. */
+
+ this.placeables = 0;
+ this.bundle = bundle;
+ this.errors = errors;
+ this.args = args;
+ }
+
+ reportError(error) {
+ if (!this.errors || !(error instanceof Error)) {
+ throw error;
+ }
+
+ this.errors.push(error);
+ }
+
+ memoizeIntlObject(ctor, opts) {
+ let cache = this.bundle._intls.get(ctor);
+
+ if (!cache) {
+ cache = {};
+
+ this.bundle._intls.set(ctor, cache);
+ }
+
+ let id = JSON.stringify(opts);
+
+ if (!cache[id]) {
+ cache[id] = new ctor(this.bundle.locales, opts);
+ }
+
+ return cache[id];
+ }
+
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/builtins.js
+/**
+ * @overview
+ *
+ * The FTL resolver ships with a number of functions built-in.
+ *
+ * Each function take two arguments:
+ * - args - an array of positional args
+ * - opts - an object of key-value args
+ *
+ * Arguments to functions are guaranteed to already be instances of
+ * `FluentValue`. Functions must return `FluentValues` as well.
+ */
+
+
+function values(opts, allowed) {
+ const unwrapped = Object.create(null);
+
+ for (const [name, opt] of Object.entries(opts)) {
+ if (allowed.includes(name)) {
+ unwrapped[name] = opt.valueOf();
+ }
+ }
+
+ return unwrapped;
+}
+
+const NUMBER_ALLOWED = ["unitDisplay", "currencyDisplay", "useGrouping", "minimumIntegerDigits", "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits"];
+/**
+ * The implementation of the `NUMBER()` builtin available to translations.
+ *
+ * Translations may call the `NUMBER()` builtin in order to specify formatting
+ * options of a number. For example:
+ *
+ * pi = The value of π is {NUMBER($pi, maximumFractionDigits: 2)}.
+ *
+ * The implementation expects an array of `FluentValues` representing the
+ * positional arguments, and an object of named `FluentValues` representing the
+ * named parameters.
+ *
+ * The following options are recognized:
+ *
+ * unitDisplay
+ * currencyDisplay
+ * useGrouping
+ * minimumIntegerDigits
+ * minimumFractionDigits
+ * maximumFractionDigits
+ * minimumSignificantDigits
+ * maximumSignificantDigits
+ *
+ * Other options are ignored.
+ *
+ * @param args The positional arguments passed to this `NUMBER()`.
+ * @param opts The named argments passed to this `NUMBER()`.
+ */
+
+function NUMBER(args, opts) {
+ let arg = args[0];
+
+ if (arg instanceof FluentNone) {
+ return new FluentNone(`NUMBER(${arg.valueOf()})`);
+ }
+
+ if (arg instanceof FluentNumber) {
+ return new FluentNumber(arg.valueOf(), { ...arg.opts,
+ ...values(opts, NUMBER_ALLOWED)
+ });
+ }
+
+ if (arg instanceof FluentDateTime) {
+ return new FluentNumber(arg.valueOf(), { ...values(opts, NUMBER_ALLOWED)
+ });
+ }
+
+ throw new TypeError("Invalid argument to NUMBER");
+}
+const DATETIME_ALLOWED = ["dateStyle", "timeStyle", "fractionalSecondDigits", "dayPeriod", "hour12", "weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName"];
+/**
+ * The implementation of the `DATETIME()` builtin available to translations.
+ *
+ * Translations may call the `DATETIME()` builtin in order to specify
+ * formatting options of a number. For example:
+ *
+ * now = It's {DATETIME($today, month: "long")}.
+ *
+ * The implementation expects an array of `FluentValues` representing the
+ * positional arguments, and an object of named `FluentValues` representing the
+ * named parameters.
+ *
+ * The following options are recognized:
+ *
+ * dateStyle
+ * timeStyle
+ * fractionalSecondDigits
+ * dayPeriod
+ * hour12
+ * weekday
+ * era
+ * year
+ * month
+ * day
+ * hour
+ * minute
+ * second
+ * timeZoneName
+ *
+ * Other options are ignored.
+ *
+ * @param args The positional arguments passed to this `DATETIME()`.
+ * @param opts The named argments passed to this `DATETIME()`.
+ */
+
+function DATETIME(args, opts) {
+ let arg = args[0];
+
+ if (arg instanceof FluentNone) {
+ return new FluentNone(`DATETIME(${arg.valueOf()})`);
+ }
+
+ if (arg instanceof FluentDateTime) {
+ return new FluentDateTime(arg.valueOf(), { ...arg.opts,
+ ...values(opts, DATETIME_ALLOWED)
+ });
+ }
+
+ if (arg instanceof FluentNumber) {
+ return new FluentDateTime(arg.valueOf(), { ...values(opts, DATETIME_ALLOWED)
+ });
+ }
+
+ throw new TypeError("Invalid argument to DATETIME");
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/memoizer.js
+const cache = new Map();
+function getMemoizerForLocale(locales) {
+ const stringLocale = Array.isArray(locales) ? locales.join(" ") : locales;
+ let memoizer = cache.get(stringLocale);
+
+ if (memoizer === undefined) {
+ memoizer = new Map();
+ cache.set(stringLocale, memoizer);
+ }
+
+ return memoizer;
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/bundle.js
+
+
+
+
+
+/**
+ * Message bundles are single-language stores of translation resources. They are
+ * responsible for formatting message values and attributes to strings.
+ */
+
+class FluentBundle {
+ /**
+ * Create an instance of `FluentBundle`.
+ *
+ * The `locales` argument is used to instantiate `Intl` formatters used by
+ * translations. The `options` object can be used to configure the bundle.
+ *
+ * Examples:
+ *
+ * let bundle = new FluentBundle(["en-US", "en"]);
+ *
+ * let bundle = new FluentBundle(locales, {useIsolating: false});
+ *
+ * let bundle = new FluentBundle(locales, {
+ * useIsolating: true,
+ * functions: {
+ * NODE_ENV: () => process.env.NODE_ENV
+ * }
+ * });
+ *
+ * Available options:
+ *
+ * - `functions` - an object of additional functions available to
+ * translations as builtins.
+ *
+ * - `useIsolating` - boolean specifying whether to use Unicode isolation
+ * marks (FSI, PDI) for bidi interpolations. Default: `true`.
+ *
+ * - `transform` - a function used to transform string parts of patterns.
+ */
+ constructor(locales, {
+ functions,
+ useIsolating = true,
+ transform = v => v
+ } = {}) {
+ this._terms = new Map();
+ this._messages = new Map();
+ this.locales = Array.isArray(locales) ? locales : [locales];
+ this._functions = {
+ NUMBER: NUMBER,
+ DATETIME: DATETIME,
+ ...functions
+ };
+ this._useIsolating = useIsolating;
+ this._transform = transform;
+ this._intls = getMemoizerForLocale(locales);
+ }
+ /**
+ * Check if a message is present in the bundle.
+ *
+ * @param id - The identifier of the message to check.
+ */
+
+
+ hasMessage(id) {
+ return this._messages.has(id);
+ }
+ /**
+ * Return a raw unformatted message object from the bundle.
+ *
+ * Raw messages are `{value, attributes}` shapes containing translation units
+ * called `Patterns`. `Patterns` are implementation-specific; they should be
+ * treated as black boxes and formatted with `FluentBundle.formatPattern`.
+ *
+ * @param id - The identifier of the message to check.
+ */
+
+
+ getMessage(id) {
+ return this._messages.get(id);
+ }
+ /**
+ * Add a translation resource to the bundle.
+ *
+ * The translation resource must be an instance of `FluentResource`.
+ *
+ * let res = new FluentResource("foo = Foo");
+ * bundle.addResource(res);
+ * bundle.getMessage("foo");
+ * // → {value: .., attributes: {..}}
+ *
+ * Available options:
+ *
+ * - `allowOverrides` - boolean specifying whether it's allowed to override
+ * an existing message or term with a new value. Default: `false`.
+ *
+ * @param res - FluentResource object.
+ * @param options
+ */
+
+
+ addResource(res, {
+ allowOverrides = false
+ } = {}) {
+ const errors = [];
+
+ for (let i = 0; i < res.body.length; i++) {
+ let entry = res.body[i];
+
+ if (entry.id.startsWith("-")) {
+ // Identifiers starting with a dash (-) define terms. Terms are private
+ // and cannot be retrieved from FluentBundle.
+ if (allowOverrides === false && this._terms.has(entry.id)) {
+ errors.push(new Error(`Attempt to override an existing term: "${entry.id}"`));
+ continue;
+ }
+
+ this._terms.set(entry.id, entry);
+ } else {
+ if (allowOverrides === false && this._messages.has(entry.id)) {
+ errors.push(new Error(`Attempt to override an existing message: "${entry.id}"`));
+ continue;
+ }
+
+ this._messages.set(entry.id, entry);
+ }
+ }
+
+ return errors;
+ }
+ /**
+ * Format a `Pattern` to a string.
+ *
+ * Format a raw `Pattern` into a string. `args` will be used to resolve
+ * references to variables passed as arguments to the translation.
+ *
+ * In case of errors `formatPattern` will try to salvage as much of the
+ * translation as possible and will still return a string. For performance
+ * reasons, the encountered errors are not returned but instead are appended
+ * to the `errors` array passed as the third argument.
+ *
+ * let errors = [];
+ * bundle.addResource(
+ * new FluentResource("hello = Hello, {$name}!"));
+ *
+ * let hello = bundle.getMessage("hello");
+ * if (hello.value) {
+ * bundle.formatPattern(hello.value, {name: "Jane"}, errors);
+ * // Returns "Hello, Jane!" and `errors` is empty.
+ *
+ * bundle.formatPattern(hello.value, undefined, errors);
+ * // Returns "Hello, {$name}!" and `errors` is now:
+ * // [<ReferenceError: Unknown variable: name>]
+ * }
+ *
+ * If `errors` is omitted, the first encountered error will be thrown.
+ */
+
+
+ formatPattern(pattern, args = null, errors = null) {
+ // Resolve a simple pattern without creating a scope. No error handling is
+ // required; by definition simple patterns don't have placeables.
+ if (typeof pattern === "string") {
+ return this._transform(pattern);
+ } // Resolve a complex pattern.
+
+
+ let scope = new Scope(this, errors, args);
+
+ try {
+ let value = resolveComplexPattern(scope, pattern);
+ return value.toString(scope);
+ } catch (err) {
+ if (scope.errors && err instanceof Error) {
+ scope.errors.push(err);
+ return new FluentNone().toString(scope);
+ }
+
+ throw err;
+ }
+ }
+
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/resource.js
+// This regex is used to iterate through the beginnings of messages and terms.
+// With the /m flag, the ^ matches at the beginning of every line.
+const RE_MESSAGE_START = /^(-?[a-zA-Z][\w-]*) *= */gm; // Both Attributes and Variants are parsed in while loops. These regexes are
+// used to break out of them.
+
+const RE_ATTRIBUTE_START = /\.([a-zA-Z][\w-]*) *= */y;
+const RE_VARIANT_START = /\*?\[/y;
+const RE_NUMBER_LITERAL = /(-?[0-9]+(?:\.([0-9]+))?)/y;
+const RE_IDENTIFIER = /([a-zA-Z][\w-]*)/y;
+const RE_REFERENCE = /([$-])?([a-zA-Z][\w-]*)(?:\.([a-zA-Z][\w-]*))?/y;
+const RE_FUNCTION_NAME = /^[A-Z][A-Z0-9_-]*$/; // A "run" is a sequence of text or string literal characters which don't
+// require any special handling. For TextElements such special characters are: {
+// (starts a placeable), and line breaks which require additional logic to check
+// if the next line is indented. For StringLiterals they are: \ (starts an
+// escape sequence), " (ends the literal), and line breaks which are not allowed
+// in StringLiterals. Note that string runs may be empty; text runs may not.
+
+const RE_TEXT_RUN = /([^{}\n\r]+)/y;
+const RE_STRING_RUN = /([^\\"\n\r]*)/y; // Escape sequences.
+
+const RE_STRING_ESCAPE = /\\([\\"])/y;
+const RE_UNICODE_ESCAPE = /\\u([a-fA-F0-9]{4})|\\U([a-fA-F0-9]{6})/y; // Used for trimming TextElements and indents.
+
+const RE_LEADING_NEWLINES = /^\n+/;
+const RE_TRAILING_SPACES = / +$/; // Used in makeIndent to strip spaces from blank lines and normalize CRLF to LF.
+
+const RE_BLANK_LINES = / *\r?\n/g; // Used in makeIndent to measure the indentation.
+
+const RE_INDENT = /( *)$/; // Common tokens.
+
+const TOKEN_BRACE_OPEN = /{\s*/y;
+const TOKEN_BRACE_CLOSE = /\s*}/y;
+const TOKEN_BRACKET_OPEN = /\[\s*/y;
+const TOKEN_BRACKET_CLOSE = /\s*] */y;
+const TOKEN_PAREN_OPEN = /\s*\(\s*/y;
+const TOKEN_ARROW = /\s*->\s*/y;
+const TOKEN_COLON = /\s*:\s*/y; // Note the optional comma. As a deviation from the Fluent EBNF, the parser
+// doesn't enforce commas between call arguments.
+
+const TOKEN_COMMA = /\s*,?\s*/y;
+const TOKEN_BLANK = /\s+/y;
+/**
+ * Fluent Resource is a structure storing parsed localization entries.
+ */
+
+class FluentResource {
+ constructor(source) {
+ this.body = [];
+ RE_MESSAGE_START.lastIndex = 0;
+ let cursor = 0; // Iterate over the beginnings of messages and terms to efficiently skip
+ // comments and recover from errors.
+
+ while (true) {
+ let next = RE_MESSAGE_START.exec(source);
+
+ if (next === null) {
+ break;
+ }
+
+ cursor = RE_MESSAGE_START.lastIndex;
+
+ try {
+ this.body.push(parseMessage(next[1]));
+ } catch (err) {
+ if (err instanceof SyntaxError) {
+ // Don't report any Fluent syntax errors. Skip directly to the
+ // beginning of the next message or term.
+ continue;
+ }
+
+ throw err;
+ }
+ } // The parser implementation is inlined below for performance reasons,
+ // as well as for convenience of accessing `source` and `cursor`.
+ // The parser focuses on minimizing the number of false negatives at the
+ // expense of increasing the risk of false positives. In other words, it
+ // aims at parsing valid Fluent messages with a success rate of 100%, but it
+ // may also parse a few invalid messages which the reference parser would
+ // reject. The parser doesn't perform any validation and may produce entries
+ // which wouldn't make sense in the real world. For best results users are
+ // advised to validate translations with the fluent-syntax parser
+ // pre-runtime.
+ // The parser makes an extensive use of sticky regexes which can be anchored
+ // to any offset of the source string without slicing it. Errors are thrown
+ // to bail out of parsing of ill-formed messages.
+
+
+ function test(re) {
+ re.lastIndex = cursor;
+ return re.test(source);
+ } // Advance the cursor by the char if it matches. May be used as a predicate
+ // (was the match found?) or, if errorClass is passed, as an assertion.
+
+
+ function consumeChar(char, errorClass) {
+ if (source[cursor] === char) {
+ cursor++;
+ return true;
+ }
+
+ if (errorClass) {
+ throw new errorClass(`Expected ${char}`);
+ }
+
+ return false;
+ } // Advance the cursor by the token if it matches. May be used as a predicate
+ // (was the match found?) or, if errorClass is passed, as an assertion.
+
+
+ function consumeToken(re, errorClass) {
+ if (test(re)) {
+ cursor = re.lastIndex;
+ return true;
+ }
+
+ if (errorClass) {
+ throw new errorClass(`Expected ${re.toString()}`);
+ }
+
+ return false;
+ } // Execute a regex, advance the cursor, and return all capture groups.
+
+
+ function match(re) {
+ re.lastIndex = cursor;
+ let result = re.exec(source);
+
+ if (result === null) {
+ throw new SyntaxError(`Expected ${re.toString()}`);
+ }
+
+ cursor = re.lastIndex;
+ return result;
+ } // Execute a regex, advance the cursor, and return the capture group.
+
+
+ function match1(re) {
+ return match(re)[1];
+ }
+
+ function parseMessage(id) {
+ let value = parsePattern();
+ let attributes = parseAttributes();
+
+ if (value === null && Object.keys(attributes).length === 0) {
+ throw new SyntaxError("Expected message value or attributes");
+ }
+
+ return {
+ id,
+ value,
+ attributes
+ };
+ }
+
+ function parseAttributes() {
+ let attrs = Object.create(null);
+
+ while (test(RE_ATTRIBUTE_START)) {
+ let name = match1(RE_ATTRIBUTE_START);
+ let value = parsePattern();
+
+ if (value === null) {
+ throw new SyntaxError("Expected attribute value");
+ }
+
+ attrs[name] = value;
+ }
+
+ return attrs;
+ }
+
+ function parsePattern() {
+ let first; // First try to parse any simple text on the same line as the id.
+
+ if (test(RE_TEXT_RUN)) {
+ first = match1(RE_TEXT_RUN);
+ } // If there's a placeable on the first line, parse a complex pattern.
+
+
+ if (source[cursor] === "{" || source[cursor] === "}") {
+ // Re-use the text parsed above, if possible.
+ return parsePatternElements(first ? [first] : [], Infinity);
+ } // RE_TEXT_VALUE stops at newlines. Only continue parsing the pattern if
+ // what comes after the newline is indented.
+
+
+ let indent = parseIndent();
+
+ if (indent) {
+ if (first) {
+ // If there's text on the first line, the blank block is part of the
+ // translation content in its entirety.
+ return parsePatternElements([first, indent], indent.length);
+ } // Otherwise, we're dealing with a block pattern, i.e. a pattern which
+ // starts on a new line. Discrad the leading newlines but keep the
+ // inline indent; it will be used by the dedentation logic.
+
+
+ indent.value = trim(indent.value, RE_LEADING_NEWLINES);
+ return parsePatternElements([indent], indent.length);
+ }
+
+ if (first) {
+ // It was just a simple inline text after all.
+ return trim(first, RE_TRAILING_SPACES);
+ }
+
+ return null;
+ } // Parse a complex pattern as an array of elements.
+
+
+ function parsePatternElements(elements = [], commonIndent) {
+ while (true) {
+ if (test(RE_TEXT_RUN)) {
+ elements.push(match1(RE_TEXT_RUN));
+ continue;
+ }
+
+ if (source[cursor] === "{") {
+ elements.push(parsePlaceable());
+ continue;
+ }
+
+ if (source[cursor] === "}") {
+ throw new SyntaxError("Unbalanced closing brace");
+ }
+
+ let indent = parseIndent();
+
+ if (indent) {
+ elements.push(indent);
+ commonIndent = Math.min(commonIndent, indent.length);
+ continue;
+ }
+
+ break;
+ }
+
+ let lastIndex = elements.length - 1;
+ let lastElement = elements[lastIndex]; // Trim the trailing spaces in the last element if it's a TextElement.
+
+ if (typeof lastElement === "string") {
+ elements[lastIndex] = trim(lastElement, RE_TRAILING_SPACES);
+ }
+
+ let baked = [];
+
+ for (let element of elements) {
+ if (element instanceof Indent) {
+ // Dedent indented lines by the maximum common indent.
+ element = element.value.slice(0, element.value.length - commonIndent);
+ }
+
+ if (element) {
+ baked.push(element);
+ }
+ }
+
+ return baked;
+ }
+
+ function parsePlaceable() {
+ consumeToken(TOKEN_BRACE_OPEN, SyntaxError);
+ let selector = parseInlineExpression();
+
+ if (consumeToken(TOKEN_BRACE_CLOSE)) {
+ return selector;
+ }
+
+ if (consumeToken(TOKEN_ARROW)) {
+ let variants = parseVariants();
+ consumeToken(TOKEN_BRACE_CLOSE, SyntaxError);
+ return {
+ type: "select",
+ selector,
+ ...variants
+ };
+ }
+
+ throw new SyntaxError("Unclosed placeable");
+ }
+
+ function parseInlineExpression() {
+ if (source[cursor] === "{") {
+ // It's a nested placeable.
+ return parsePlaceable();
+ }
+
+ if (test(RE_REFERENCE)) {
+ let [, sigil, name, attr = null] = match(RE_REFERENCE);
+
+ if (sigil === "$") {
+ return {
+ type: "var",
+ name
+ };
+ }
+
+ if (consumeToken(TOKEN_PAREN_OPEN)) {
+ let args = parseArguments();
+
+ if (sigil === "-") {
+ // A parameterized term: -term(...).
+ return {
+ type: "term",
+ name,
+ attr,
+ args
+ };
+ }
+
+ if (RE_FUNCTION_NAME.test(name)) {
+ return {
+ type: "func",
+ name,
+ args
+ };
+ }
+
+ throw new SyntaxError("Function names must be all upper-case");
+ }
+
+ if (sigil === "-") {
+ // A non-parameterized term: -term.
+ return {
+ type: "term",
+ name,
+ attr,
+ args: []
+ };
+ }
+
+ return {
+ type: "mesg",
+ name,
+ attr
+ };
+ }
+
+ return parseLiteral();
+ }
+
+ function parseArguments() {
+ let args = [];
+
+ while (true) {
+ switch (source[cursor]) {
+ case ")":
+ // End of the argument list.
+ cursor++;
+ return args;
+
+ case undefined:
+ // EOF
+ throw new SyntaxError("Unclosed argument list");
+ }
+
+ args.push(parseArgument()); // Commas between arguments are treated as whitespace.
+
+ consumeToken(TOKEN_COMMA);
+ }
+ }
+
+ function parseArgument() {
+ let expr = parseInlineExpression();
+
+ if (expr.type !== "mesg") {
+ return expr;
+ }
+
+ if (consumeToken(TOKEN_COLON)) {
+ // The reference is the beginning of a named argument.
+ return {
+ type: "narg",
+ name: expr.name,
+ value: parseLiteral()
+ };
+ } // It's a regular message reference.
+
+
+ return expr;
+ }
+
+ function parseVariants() {
+ let variants = [];
+ let count = 0;
+ let star;
+
+ while (test(RE_VARIANT_START)) {
+ if (consumeChar("*")) {
+ star = count;
+ }
+
+ let key = parseVariantKey();
+ let value = parsePattern();
+
+ if (value === null) {
+ throw new SyntaxError("Expected variant value");
+ }
+
+ variants[count++] = {
+ key,
+ value
+ };
+ }
+
+ if (count === 0) {
+ return null;
+ }
+
+ if (star === undefined) {
+ throw new SyntaxError("Expected default variant");
+ }
+
+ return {
+ variants,
+ star
+ };
+ }
+
+ function parseVariantKey() {
+ consumeToken(TOKEN_BRACKET_OPEN, SyntaxError);
+ let key;
+
+ if (test(RE_NUMBER_LITERAL)) {
+ key = parseNumberLiteral();
+ } else {
+ key = {
+ type: "str",
+ value: match1(RE_IDENTIFIER)
+ };
+ }
+
+ consumeToken(TOKEN_BRACKET_CLOSE, SyntaxError);
+ return key;
+ }
+
+ function parseLiteral() {
+ if (test(RE_NUMBER_LITERAL)) {
+ return parseNumberLiteral();
+ }
+
+ if (source[cursor] === '"') {
+ return parseStringLiteral();
+ }
+
+ throw new SyntaxError("Invalid expression");
+ }
+
+ function parseNumberLiteral() {
+ let [, value, fraction = ""] = match(RE_NUMBER_LITERAL);
+ let precision = fraction.length;
+ return {
+ type: "num",
+ value: parseFloat(value),
+ precision
+ };
+ }
+
+ function parseStringLiteral() {
+ consumeChar('"', SyntaxError);
+ let value = "";
+
+ while (true) {
+ value += match1(RE_STRING_RUN);
+
+ if (source[cursor] === "\\") {
+ value += parseEscapeSequence();
+ continue;
+ }
+
+ if (consumeChar('"')) {
+ return {
+ type: "str",
+ value
+ };
+ } // We've reached an EOL of EOF.
+
+
+ throw new SyntaxError("Unclosed string literal");
+ }
+ } // Unescape known escape sequences.
+
+
+ function parseEscapeSequence() {
+ if (test(RE_STRING_ESCAPE)) {
+ return match1(RE_STRING_ESCAPE);
+ }
+
+ if (test(RE_UNICODE_ESCAPE)) {
+ let [, codepoint4, codepoint6] = match(RE_UNICODE_ESCAPE);
+ let codepoint = parseInt(codepoint4 || codepoint6, 16);
+ return codepoint <= 0xd7ff || 0xe000 <= codepoint // It's a Unicode scalar value.
+ ? String.fromCodePoint(codepoint) // Lonely surrogates can cause trouble when the parsing result is
+ // saved using UTF-8. Use U+FFFD REPLACEMENT CHARACTER instead.
+ : "�";
+ }
+
+ throw new SyntaxError("Unknown escape sequence");
+ } // Parse blank space. Return it if it looks like indent before a pattern
+ // line. Skip it othwerwise.
+
+
+ function parseIndent() {
+ let start = cursor;
+ consumeToken(TOKEN_BLANK); // Check the first non-blank character after the indent.
+
+ switch (source[cursor]) {
+ case ".":
+ case "[":
+ case "*":
+ case "}":
+ case undefined:
+ // EOF
+ // A special character. End the Pattern.
+ return false;
+
+ case "{":
+ // Placeables don't require indentation (in EBNF: block-placeable).
+ // Continue the Pattern.
+ return makeIndent(source.slice(start, cursor));
+ } // If the first character on the line is not one of the special characters
+ // listed above, it's a regular text character. Check if there's at least
+ // one space of indent before it.
+
+
+ if (source[cursor - 1] === " ") {
+ // It's an indented text character (in EBNF: indented-char). Continue
+ // the Pattern.
+ return makeIndent(source.slice(start, cursor));
+ } // A not-indented text character is likely the identifier of the next
+ // message. End the Pattern.
+
+
+ return false;
+ } // Trim blanks in text according to the given regex.
+
+
+ function trim(text, re) {
+ return text.replace(re, "");
+ } // Normalize a blank block and extract the indent details.
+
+
+ function makeIndent(blank) {
+ let value = blank.replace(RE_BLANK_LINES, "\n"); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+
+ let length = RE_INDENT.exec(blank)[1].length;
+ return new Indent(value, length);
+ }
+ }
+
+}
+
+class Indent {
+ constructor(value, length) {
+ this.value = value;
+ this.length = length;
+ }
+
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/index.js
+/**
+ * @module fluent
+ * @overview
+ *
+ * `fluent` is a JavaScript implementation of Project Fluent, a localization
+ * framework designed to unleash the expressive power of the natural language.
+ *
+ */
+
+
+
+;// CONCATENATED MODULE: ./content-src/asrouter/rich-text-strings.js
+/* 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/. */
+
+/**
+ * Properties that allow rich text MUST be added to this list.
+ * key: the localization_id that should be used
+ * value: a property or array of properties on the message.content object
+ */
+
+const RICH_TEXT_CONFIG = {
+ text: ["text", "scene1_text"],
+ success_text: "success_text",
+ error_text: "error_text",
+ scene2_text: "scene2_text",
+ amo_html: "amo_html",
+ privacy_html: "scene2_privacy_html",
+ disclaimer_html: "scene2_disclaimer_html"
+};
+const RICH_TEXT_KEYS = Object.keys(RICH_TEXT_CONFIG);
+/**
+ * Generates an array of messages suitable for fluent's localization provider
+ * including all needed strings for rich text.
+ * @param {object} content A .content object from an ASR message (i.e. message.content)
+ * @returns {FluentBundle[]} A array containing the fluent message context
+ */
+
+function generateBundles(content) {
+ const bundle = new FluentBundle("en-US");
+ RICH_TEXT_KEYS.forEach(key => {
+ const attrs = RICH_TEXT_CONFIG[key];
+ const attrsToTry = Array.isArray(attrs) ? [...attrs] : [attrs];
+ let string = "";
+
+ while (!string && attrsToTry.length) {
+ const attr = attrsToTry.pop();
+ string = content[attr];
+ }
+
+ bundle.addResource(new FluentResource(`${key} = ${string}`));
+ });
+ return [bundle];
+}
+;// CONCATENATED MODULE: ./content-src/asrouter/components/ImpressionsWrapper/ImpressionsWrapper.jsx
+/* 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 VISIBLE = "visible";
+const VISIBILITY_CHANGE_EVENT = "visibilitychange";
+/**
+ * Component wrapper used to send telemetry pings on every impression.
+ */
+
+class ImpressionsWrapper extends (external_React_default()).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: __webpack_require__.g.document,
+ sendOnMount: true
+};
+;// CONCATENATED MODULE: ./node_modules/@fluent/sequence/esm/map_sync.js
+/**
+ * Synchronously map an identifier or an array of identifiers to the best
+ * `FluentBundle` instance(s).
+ *
+ * @param bundles - An iterable of bundles to sift through.
+ * @param ids - An id or ids to map.
+ */
+function mapBundleSync(bundles, ids) {
+ if (!Array.isArray(ids)) {
+ return getBundleForId(bundles, ids);
+ }
+
+ return ids.map(id => getBundleForId(bundles, id));
+}
+/*
+ * Find the best `FluentBundle` with the translation for `id`.
+ */
+
+function getBundleForId(bundles, id) {
+ for (const bundle of bundles) {
+ if (bundle.hasMessage(id)) {
+ return bundle;
+ }
+ }
+
+ return null;
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/sequence/esm/map_async.js
+/**
+ * Asynchronously map an identifier or an array of identifiers to the best
+ * `FluentBundle` instance(s).
+ *
+ * @param bundles - An iterable of bundles to sift through.
+ * @param ids - An id or ids to map.
+ */
+async function mapBundleAsync(bundles, ids) {
+ if (!Array.isArray(ids)) {
+ for await (const bundle of bundles) {
+ if (bundle.hasMessage(ids)) {
+ return bundle;
+ }
+ }
+
+ return null;
+ }
+
+ const foundBundles = new Array(ids.length).fill(null);
+ let remainingCount = ids.length;
+
+ for await (const bundle of bundles) {
+ for (const [index, id] of ids.entries()) {
+ if (!foundBundles[index] && bundle.hasMessage(id)) {
+ foundBundles[index] = bundle;
+ remainingCount--;
+ } // Return early when all ids have been mapped to bundles.
+
+
+ if (remainingCount === 0) {
+ return foundBundles;
+ }
+ }
+ }
+
+ return foundBundles;
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/sequence/esm/index.js
+/**
+ * @module fluent-sequence
+ * @overview Manage ordered sequences of FluentBundles.
+ */
+
+
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/node_modules/cached-iterable/src/cached_iterable.mjs
+/*
+ * Base CachedIterable class.
+ */
+class CachedIterable extends Array {
+ /**
+ * Create a `CachedIterable` instance from an iterable or, if another
+ * instance of `CachedIterable` is passed, return it without any
+ * modifications.
+ *
+ * @param {Iterable} iterable
+ * @returns {CachedIterable}
+ */
+ static from(iterable) {
+ if (iterable instanceof this) {
+ return iterable;
+ }
+
+ return new this(iterable);
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/node_modules/cached-iterable/src/cached_sync_iterable.mjs
+
+
+/*
+ * CachedSyncIterable caches the elements yielded by an iterable.
+ *
+ * It can be used to iterate over an iterable many times without depleting the
+ * iterable.
+ */
+class CachedSyncIterable extends CachedIterable {
+ /**
+ * Create an `CachedSyncIterable` instance.
+ *
+ * @param {Iterable} iterable
+ * @returns {CachedSyncIterable}
+ */
+ constructor(iterable) {
+ super();
+
+ if (Symbol.iterator in Object(iterable)) {
+ this.iterator = iterable[Symbol.iterator]();
+ } else {
+ throw new TypeError("Argument must implement the iteration protocol.");
+ }
+ }
+
+ [Symbol.iterator]() {
+ const cached = this;
+ let cur = 0;
+
+ return {
+ next() {
+ if (cached.length <= cur) {
+ cached.push(cached.iterator.next());
+ }
+ return cached[cur++];
+ }
+ };
+ }
+
+ /**
+ * This method allows user to consume the next element from the iterator
+ * into the cache.
+ *
+ * @param {number} count - number of elements to consume
+ */
+ touchNext(count = 1) {
+ let idx = 0;
+ while (idx++ < count) {
+ const last = this[this.length - 1];
+ if (last && last.done) {
+ break;
+ }
+ this.push(this.iterator.next());
+ }
+ // Return the last cached {value, done} object to allow the calling
+ // code to decide if it needs to call touchNext again.
+ return this[this.length - 1];
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/node_modules/cached-iterable/src/cached_async_iterable.mjs
+
+
+/*
+ * CachedAsyncIterable caches the elements yielded by an async iterable.
+ *
+ * It can be used to iterate over an iterable many times without depleting the
+ * iterable.
+ */
+class CachedAsyncIterable extends CachedIterable {
+ /**
+ * Create an `CachedAsyncIterable` instance.
+ *
+ * @param {Iterable} iterable
+ * @returns {CachedAsyncIterable}
+ */
+ constructor(iterable) {
+ super();
+
+ if (Symbol.asyncIterator in Object(iterable)) {
+ this.iterator = iterable[Symbol.asyncIterator]();
+ } else if (Symbol.iterator in Object(iterable)) {
+ this.iterator = iterable[Symbol.iterator]();
+ } else {
+ throw new TypeError("Argument must implement the iteration protocol.");
+ }
+ }
+
+ /**
+ * Asynchronous iterator caching the yielded elements.
+ *
+ * Elements yielded by the original iterable will be cached and available
+ * synchronously. Returns an async generator object implementing the
+ * iterator protocol over the elements of the original (async or sync)
+ * iterable.
+ */
+ [Symbol.asyncIterator]() {
+ const cached = this;
+ let cur = 0;
+
+ return {
+ async next() {
+ if (cached.length <= cur) {
+ cached.push(cached.iterator.next());
+ }
+ return cached[cur++];
+ }
+ };
+ }
+
+ /**
+ * This method allows user to consume the next element from the iterator
+ * into the cache.
+ *
+ * @param {number} count - number of elements to consume
+ */
+ async touchNext(count = 1) {
+ let idx = 0;
+ while (idx++ < count) {
+ const last = this[this.length - 1];
+ if (last && (await last).done) {
+ break;
+ }
+ this.push(this.iterator.next());
+ }
+ // Return the last cached {value, done} object to allow the calling
+ // code to decide if it needs to call touchNext again.
+ return this[this.length - 1];
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/node_modules/cached-iterable/src/index.mjs
+
+
+
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/esm/markup.js
+let cachedParseMarkup;
+/**
+ * We use a function creator to make the reference to `document` lazy. At the
+ * same time, it's eager enough to throw in `<LocalizationProvider>` as soon as
+ * it's first mounted which reduces the risk of this error making it to the
+ * runtime without developers noticing it in development.
+ */
+
+function createParseMarkup() {
+ if (typeof document === "undefined") {
+ // We can't use <template> to sanitize translations.
+ throw new Error("`document` is undefined. Without it, translations cannot " + "be safely sanitized. Consult the documentation at " + "https://github.com/projectfluent/fluent.js/wiki/React-Overlays.");
+ }
+
+ if (!cachedParseMarkup) {
+ const template = document.createElement("template");
+
+ cachedParseMarkup = function parseMarkup(str) {
+ template.innerHTML = str;
+ return Array.from(template.content.childNodes);
+ };
+ }
+
+ return cachedParseMarkup;
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/vendor/omittedCloseTags.js
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in this directory.
+ */
+// For HTML, certain tags should omit their close tag. We keep a whitelist for
+// those special-case tags.
+var omittedCloseTags = {
+ area: true,
+ base: true,
+ br: true,
+ col: true,
+ embed: true,
+ hr: true,
+ img: true,
+ input: true,
+ keygen: true,
+ link: true,
+ meta: true,
+ param: true,
+ source: true,
+ track: true,
+ wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.
+
+};
+/* harmony default export */ const vendor_omittedCloseTags = (omittedCloseTags);
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/vendor/voidElementTags.js
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in this directory.
+ */
+ // For HTML, certain tags cannot have children. This has the same purpose as
+// `omittedCloseTags` except that `menuitem` should still have its closing tag.
+
+var voidElementTags = {
+ menuitem: true,
+ ...vendor_omittedCloseTags
+};
+/* harmony default export */ const vendor_voidElementTags = (voidElementTags);
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/esm/localization.js
+
+
+
+
+ // Match the opening angle bracket (<) in HTML tags, and HTML entities like
+// &amp;, &#0038;, &#x0026;.
+
+const reMarkup = /<|&#?\w+;/;
+/**
+ * `ReactLocalization` handles translation formatting and fallback.
+ *
+ * The current negotiated fallback chain of languages is stored in the
+ * `ReactLocalization` instance in form of an iterable of `FluentBundle`
+ * instances. This iterable is used to find the best existing translation for
+ * a given identifier.
+ *
+ * The `ReactLocalization` class instances are exposed to `Localized` elements
+ * via the `LocalizationProvider` component.
+ */
+
+class ReactLocalization {
+ constructor(bundles, parseMarkup = createParseMarkup()) {
+ this.bundles = CachedSyncIterable.from(bundles);
+ this.parseMarkup = parseMarkup;
+ }
+
+ getBundle(id) {
+ return mapBundleSync(this.bundles, id);
+ }
+
+ areBundlesEmpty() {
+ // Create an iterator and only peek at the first value to see if it contains
+ // anything.
+ return Boolean(this.bundles[Symbol.iterator]().next().done);
+ }
+
+ getString(id, vars, fallback) {
+ const bundle = this.getBundle(id);
+
+ if (bundle) {
+ const msg = bundle.getMessage(id);
+
+ if (msg && msg.value) {
+ let errors = [];
+ let value = bundle.formatPattern(msg.value, vars, errors);
+
+ for (let error of errors) {
+ this.reportError(error);
+ }
+
+ return value;
+ }
+ } else {
+ if (this.areBundlesEmpty()) {
+ this.reportError(new Error("Attempting to get a string when no localization bundles are " + "present."));
+ } else {
+ this.reportError(new Error(`The id "${id}" did not match any messages in the localization ` + "bundles."));
+ }
+ }
+
+ return fallback || id;
+ }
+
+ getElement(sourceElement, id, args = {}) {
+ const bundle = this.getBundle(id);
+
+ if (bundle === null) {
+ if (!id) {
+ this.reportError(new Error("No string id was provided when localizing a component."));
+ } else if (this.areBundlesEmpty()) {
+ this.reportError(new Error("Attempting to get a localized element when no localization bundles are " + "present."));
+ } else {
+ this.reportError(new Error(`The id "${id}" did not match any messages in the localization ` + "bundles."));
+ }
+
+ return /*#__PURE__*/(0,external_React_namespaceObject.createElement)(external_React_namespaceObject.Fragment, null, sourceElement);
+ } // this.getBundle makes the bundle.hasMessage check which ensures that
+ // bundle.getMessage returns an existing message.
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+
+
+ const msg = bundle.getMessage(id);
+ let errors = [];
+ let localizedProps; // The default is to forbid all message attributes. If the attrs prop exists
+ // on the Localized instance, only set message attributes which have been
+ // explicitly allowed by the developer.
+
+ if (args.attrs && msg.attributes) {
+ localizedProps = {};
+ errors = [];
+
+ for (const [name, allowed] of Object.entries(args.attrs)) {
+ if (allowed && name in msg.attributes) {
+ localizedProps[name] = bundle.formatPattern(msg.attributes[name], args.vars, errors);
+ }
+ }
+
+ for (let error of errors) {
+ this.reportError(error);
+ }
+ } // If the component to render 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 (typeof sourceElement.type === "string" && sourceElement.type in vendor_voidElementTags) {
+ return /*#__PURE__*/(0,external_React_namespaceObject.cloneElement)(sourceElement, 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 (msg.value === null) {
+ return /*#__PURE__*/(0,external_React_namespaceObject.cloneElement)(sourceElement, localizedProps);
+ }
+
+ errors = [];
+ const messageValue = bundle.formatPattern(msg.value, args.vars, errors);
+
+ for (let error of errors) {
+ this.reportError(error);
+ } // If the message value doesn't contain any markup nor any HTML entities,
+ // insert it as the only child of the component to render.
+
+
+ if (!reMarkup.test(messageValue) || this.parseMarkup === null) {
+ return /*#__PURE__*/(0,external_React_namespaceObject.cloneElement)(sourceElement, localizedProps, messageValue);
+ }
+
+ let elemsLower;
+
+ if (args.elems) {
+ elemsLower = new Map();
+
+ for (let [name, elem] of Object.entries(args.elems)) {
+ // Ignore elems which are not valid React elements.
+ if (! /*#__PURE__*/(0,external_React_namespaceObject.isValidElement)(elem)) {
+ continue;
+ }
+
+ elemsLower.set(name.toLowerCase(), elem);
+ }
+ } // If the message contains markup, parse it and try to match the children
+ // found in the translation with the args passed to this function.
+
+
+ const translationNodes = this.parseMarkup(messageValue);
+ const translatedChildren = translationNodes.map(({
+ nodeName,
+ textContent
+ }) => {
+ if (nodeName === "#text") {
+ return textContent;
+ }
+
+ const childName = nodeName.toLowerCase();
+ const sourceChild = elemsLower === null || elemsLower === void 0 ? void 0 : elemsLower.get(childName); // If the child is not expected just take its textContent.
+
+ if (!sourceChild) {
+ return textContent;
+ } // If the element passed in the elems prop is a known void element,
+ // explicitly dismiss any textContent which might have accidentally been
+ // defined in the translation to prevent the "void element tags must not
+ // have children" error.
+
+
+ if (typeof sourceChild.type === "string" && 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 /*#__PURE__*/(0,external_React_namespaceObject.cloneElement)(sourceChild, undefined, textContent);
+ });
+ return /*#__PURE__*/(0,external_React_namespaceObject.cloneElement)(sourceElement, localizedProps, ...translatedChildren);
+ } // XXX Control this via a prop passed to the LocalizationProvider.
+ // See https://github.com/projectfluent/fluent.js/issues/411.
+
+
+ reportError(error) {
+ /* global console */
+ // eslint-disable-next-line no-console
+ console.warn(`[@fluent/react] ${error.name}: ${error.message}`);
+ }
+
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/esm/context.js
+
+let FluentContext = /*#__PURE__*/(0,external_React_namespaceObject.createContext)(null);
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/esm/provider.js
+
+
+/**
+ * The Provider component for the `ReactLocalization` class.
+ *
+ * Exposes a `ReactLocalization` instance to all descendants via React's
+ * context feature. It makes translations available to all localizable
+ * elements in the descendant's render tree without the need to pass them
+ * explicitly.
+ *
+ * `LocalizationProvider` takes an instance of `ReactLocalization` in the
+ * `l10n` prop. This instance will be made available to `Localized` components
+ * under the provider.
+ *
+ * @example
+ * ```jsx
+ * <LocalizationProvider l10n={…}>
+ * …
+ * </LocalizationProvider>
+ * ```
+ */
+
+function LocalizationProvider(props) {
+ return /*#__PURE__*/(0,external_React_namespaceObject.createElement)(FluentContext.Provider, {
+ value: props.l10n
+ }, props.children);
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/esm/with_localization.js
+
+
+function withLocalization(Inner) {
+ function WithLocalization(props) {
+ const l10n = (0,external_React_namespaceObject.useContext)(FluentContext);
+
+ if (!l10n) {
+ throw new Error("withLocalization was used without wrapping it in a " + "<LocalizationProvider />.");
+ } // Re-bind getString to trigger a re-render of Inner.
+
+
+ const getString = l10n.getString.bind(l10n);
+ return /*#__PURE__*/(0,external_React_namespaceObject.createElement)(Inner, {
+ getString,
+ ...props
+ });
+ }
+
+ WithLocalization.displayName = `WithLocalization(${displayName(Inner)})`;
+ return WithLocalization;
+}
+
+function displayName(component) {
+ return component.displayName || component.name || "Component";
+}
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/esm/localized.js
+
+
+/**
+ * The `Localized` class renders its child with translated props and children.
+ *
+ * The `id` prop should be the unique identifier of the translation. Any
+ * attributes found in the translation will be applied to the wrapped element.
+ *
+ * Arguments to the translation can be passed as `$`-prefixed props on
+ * `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.
+ *
+ * @example
+ * ```jsx
+ * <Localized id="hello-world">
+ * <p>{'Hello, world!'}</p>
+ * </Localized>
+ *
+ * <Localized id="hello-world" $username={name}>
+ * <p>{'Hello, { $username }!'}</p>
+ * </Localized>
+ * ```
+ */
+
+function Localized(props) {
+ const {
+ id,
+ attrs,
+ vars,
+ elems,
+ children
+ } = props;
+ const l10n = (0,external_React_namespaceObject.useContext)(FluentContext);
+
+ if (!l10n) {
+ throw new Error("The <Localized /> component was not properly wrapped in a <LocalizationProvider />.");
+ }
+
+ let source;
+
+ if (Array.isArray(children)) {
+ if (children.length > 1) {
+ throw new Error("Expected to receive a single React element to localize.");
+ } // If it's an array with zero or one element, we can directly get the first one.
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
+
+
+ source = children[0];
+ } else {
+ source = children !== null && children !== void 0 ? children : null;
+ } // Check if the component to render is a valid element -- if not, then
+ // it's either null or a simple fallback string. No need to localize the
+ // attributes or replace.
+
+
+ if (! /*#__PURE__*/(0,external_React_namespaceObject.isValidElement)(source)) {
+ const fallback = typeof source === "string" ? source : undefined;
+ const string = l10n.getString(id, vars, fallback);
+ return /*#__PURE__*/external_React_namespaceObject.createElement(external_React_namespaceObject.Fragment, null, string);
+ }
+
+ return l10n.getElement(source, id, {
+ attrs,
+ vars,
+ elems
+ });
+}
+/* harmony default export */ const localized = (Localized);
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/esm/use_localization.js
+
+
+const useLocalization = () => {
+ const l10n = (0,external_React_namespaceObject.useContext)(FluentContext);
+
+ if (!l10n) {
+ throw new Error("useLocalization was used without wrapping it in a " + "<LocalizationProvider />.");
+ }
+
+ return {
+ l10n
+ };
+};
+;// CONCATENATED MODULE: ./node_modules/@fluent/react/esm/index.js
+/**
+ * @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.
+ *
+ * Consult the documentation of the `LocalizationProvider` and the `Localized`
+ * components for more information.
+ *
+ * @example
+ * ```jsx
+ * <LocalizationProvider l10n={…}>
+ * <Localized id="hello-world">
+ * <p>{'Hello, world!'}</p>
+ * </Localized>
+ * </LocalizationProvider>
+ * ```
+ */
+
+
+
+
+
+;// CONCATENATED MODULE: ./content-src/lib/constants.js
+/* 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 IS_NEWTAB = __webpack_require__.g.document && __webpack_require__.g.document.documentURI === "about:newtab";
+const NEWTAB_DARK_THEME = {
+ ntp_background: {
+ r: 42,
+ g: 42,
+ b: 46,
+ a: 1
+ },
+ ntp_card_background: {
+ r: 66,
+ g: 65,
+ b: 77,
+ a: 1
+ },
+ ntp_text: {
+ r: 249,
+ g: 249,
+ b: 250,
+ a: 1
+ },
+ sidebar: {
+ r: 56,
+ g: 56,
+ b: 61,
+ a: 1
+ },
+ sidebar_text: {
+ r: 249,
+ g: 249,
+ b: 250,
+ a: 1
+ }
+};
+;// CONCATENATED MODULE: external "ReactDOM"
+const external_ReactDOM_namespaceObject = ReactDOM;
+var external_ReactDOM_default = /*#__PURE__*/__webpack_require__.n(external_ReactDOM_namespaceObject);
+;// CONCATENATED MODULE: ./content-src/asrouter/components/Button/Button.jsx
+/* 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 ALLOWED_STYLE_TAGS = ["color", "backgroundColor"];
+const Button = props => {
+ const style = {}; // Add allowed style tags from props, e.g. props.color becomes style={color: props.color}
+
+ for (const tag of ALLOWED_STYLE_TAGS) {
+ if (typeof props[tag] !== "undefined") {
+ style[tag] = props[tag];
+ }
+ } // remove border if bg is set to something custom
+
+
+ if (style.backgroundColor) {
+ style.border = "0";
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("button", {
+ onClick: props.onClick,
+ className: props.className || "ASRouterButton secondary",
+ style: style
+ }, props.children);
+};
+;// CONCATENATED MODULE: ./content-src/asrouter/components/ConditionalWrapper/ConditionalWrapper.jsx
+/* 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/. */
+// lifted from https://gist.github.com/kitze/23d82bb9eb0baabfd03a6a720b1d637f
+const ConditionalWrapper = ({
+ condition,
+ wrap,
+ children
+}) => condition && wrap ? wrap(children) : children;
+
+/* harmony default export */ const ConditionalWrapper_ConditionalWrapper = (ConditionalWrapper);
+;// CONCATENATED MODULE: ./content-src/asrouter/template-utils.js
+/* 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/. */
+function safeURI(url) {
+ if (!url) {
+ return "";
+ }
+
+ const {
+ protocol
+ } = new URL(url);
+ const isAllowed = ["http:", "https:", "data:", "resource:", "chrome:"].includes(protocol);
+
+ if (!isAllowed) {
+ // eslint-disable-next-line no-console
+ console.warn(`The protocol ${protocol} is not allowed for template URLs.`);
+ }
+
+ return isAllowed ? url : "";
+}
+;// CONCATENATED MODULE: ./content-src/asrouter/components/RichText/RichText.jsx
+/* 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/. */
+
+
+
+ // Elements allowed in snippet content
+
+const ALLOWED_TAGS = {
+ b: /*#__PURE__*/external_React_default().createElement("b", null),
+ i: /*#__PURE__*/external_React_default().createElement("i", null),
+ u: /*#__PURE__*/external_React_default().createElement("u", null),
+ strong: /*#__PURE__*/external_React_default().createElement("strong", null),
+ em: /*#__PURE__*/external_React_default().createElement("em", null),
+ br: /*#__PURE__*/external_React_default().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, doNotAutoBlock, openNewWindow = false) {
+ if (links) {
+ return Object.keys(links).reduce((acc, linkTag) => {
+ const {
+ action
+ } = links[linkTag]; // Setting the value to false will not include the attribute in the anchor
+
+ const url = action ? false : safeURI(links[linkTag].url);
+ acc[linkTag] =
+ /*#__PURE__*/
+ // eslint was getting a false positive caused by the dynamic injection
+ // of content.
+ // eslint-disable-next-line jsx-a11y/anchor-has-content
+ external_React_default().createElement("a", {
+ href: url,
+ target: openNewWindow ? "_blank" : "",
+ "data-metric": links[linkTag].metric,
+ "data-action": action,
+ "data-args": links[linkTag].args,
+ "data-do_not_autoblock": doNotAutoBlock,
+ "data-entrypoint_name": links[linkTag].entrypoint_name,
+ "data-entrypoint_value": links[linkTag].entrypoint_value,
+ rel: "noreferrer",
+ onClick: sendClick
+ });
+ return acc;
+ }, {});
+ }
+
+ return null;
+}
+/**
+ * Message wrapper used to sanitize markup and render HTML.
+ */
+
+function RichText(props) {
+ if (!RICH_TEXT_KEYS.includes(props.localization_id)) {
+ throw new Error(`ASRouter: ${props.localization_id} is not a valid rich text property. If you want it to be processed, you need to add it to asrouter/rich-text-strings.js`);
+ }
+
+ return /*#__PURE__*/external_React_default().createElement(Localized, {
+ id: props.localization_id,
+ elems: { ...ALLOWED_TAGS,
+ ...props.customElements,
+ ...convertLinks(props.links, props.sendClick, props.doNotAutoBlock, props.openNewWindow)
+ }
+ }, /*#__PURE__*/external_React_default().createElement("span", null, props.text));
+}
+;// CONCATENATED MODULE: ./content-src/asrouter/components/SnippetBase/SnippetBase.jsx
+/* 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/. */
+
+class SnippetBase extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onBlockClicked = this.onBlockClicked.bind(this);
+ this.onDismissClicked = this.onDismissClicked.bind(this);
+ this.setBlockButtonRef = this.setBlockButtonRef.bind(this);
+ this.onBlockButtonMouseEnter = this.onBlockButtonMouseEnter.bind(this);
+ this.onBlockButtonMouseLeave = this.onBlockButtonMouseLeave.bind(this);
+ this.state = {
+ blockButtonHover: false
+ };
+ }
+
+ componentDidMount() {
+ if (this.blockButtonRef) {
+ this.blockButtonRef.addEventListener("mouseenter", this.onBlockButtonMouseEnter);
+ this.blockButtonRef.addEventListener("mouseleave", this.onBlockButtonMouseLeave);
+ }
+ }
+
+ componentWillUnmount() {
+ if (this.blockButtonRef) {
+ this.blockButtonRef.removeEventListener("mouseenter", this.onBlockButtonMouseEnter);
+ this.blockButtonRef.removeEventListener("mouseleave", this.onBlockButtonMouseLeave);
+ }
+ }
+
+ setBlockButtonRef(element) {
+ this.blockButtonRef = element;
+ }
+
+ onBlockButtonMouseEnter() {
+ this.setState({
+ blockButtonHover: true
+ });
+ }
+
+ onBlockButtonMouseLeave() {
+ this.setState({
+ blockButtonHover: false
+ });
+ }
+
+ onBlockClicked() {
+ if (this.props.provider !== "preview") {
+ this.props.sendUserActionTelemetry({
+ event: "BLOCK",
+ id: this.props.UISurface
+ });
+ }
+
+ this.props.onBlock();
+ }
+
+ onDismissClicked() {
+ if (this.props.provider !== "preview") {
+ this.props.sendUserActionTelemetry({
+ event: "DISMISS",
+ id: this.props.UISurface
+ });
+ }
+
+ this.props.onDismiss();
+ }
+
+ renderDismissButton() {
+ if (this.props.footerDismiss) {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "footer"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "footer-content"
+ }, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "ASRouterButton secondary",
+ onClick: this.onDismissClicked
+ }, this.props.content.scene2_dismiss_button_text)));
+ }
+
+ const label = this.props.content.block_button_text || "Remove this";
+ return /*#__PURE__*/external_React_default().createElement("button", {
+ className: "blockButton",
+ title: label,
+ "aria-label": label,
+ onClick: this.onBlockClicked,
+ ref: this.setBlockButtonRef
+ });
+ }
+
+ render() {
+ const {
+ props
+ } = this;
+ const {
+ blockButtonHover
+ } = this.state;
+ const containerClassName = `SnippetBaseContainer${props.className ? ` ${props.className}` : ""}${blockButtonHover ? " active" : ""}`;
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: containerClassName,
+ style: this.props.textStyle
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "innerWrapper"
+ }, props.children), this.renderDismissButton());
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/asrouter/templates/SimpleSnippet/SimpleSnippet.jsx
+function SimpleSnippet_extends() { SimpleSnippet_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; }; return SimpleSnippet_extends.apply(this, arguments); }
+
+/* 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 DEFAULT_ICON_PATH = "chrome://branding/content/icon64.png"; // Alt text placeholder in case the prop from the server isn't available
+
+const ICON_ALT_TEXT = "";
+class SimpleSnippet extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onButtonClick = this.onButtonClick.bind(this);
+ }
+
+ onButtonClick() {
+ if (this.props.provider !== "preview") {
+ this.props.sendUserActionTelemetry({
+ event: "CLICK_BUTTON",
+ id: this.props.UISurface
+ });
+ }
+
+ const {
+ button_url,
+ button_entrypoint_value,
+ button_entrypoint_name
+ } = this.props.content; // If button_url is defined handle it as OPEN_URL action
+
+ const type = this.props.content.button_action || button_url && "OPEN_URL"; // Assign the snippet referral for the action
+
+ const entrypoint = button_entrypoint_name ? new URLSearchParams([[button_entrypoint_name, button_entrypoint_value]]).toString() : button_entrypoint_value;
+ this.props.onAction({
+ type,
+ data: {
+ args: this.props.content.button_action_args || button_url,
+ ...(entrypoint && {
+ entrypoint
+ })
+ }
+ });
+
+ if (!this.props.content.do_not_autoblock) {
+ this.props.onBlock();
+ }
+ }
+
+ _shouldRenderButton() {
+ return this.props.content.button_action || this.props.onButtonClick || this.props.content.button_url;
+ }
+
+ renderTitle() {
+ const {
+ title
+ } = this.props.content;
+ return title ? /*#__PURE__*/external_React_default().createElement("h3", {
+ className: `title ${this._shouldRenderButton() ? "title-inline" : ""}`
+ }, this.renderTitleIcon(), " ", title) : null;
+ }
+
+ renderTitleIcon() {
+ const titleIconLight = safeURI(this.props.content.title_icon);
+ const titleIconDark = safeURI(this.props.content.title_icon_dark_theme || this.props.content.title_icon);
+
+ if (!titleIconLight) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "titleIcon icon-light-theme",
+ style: {
+ backgroundImage: `url("${titleIconLight}")`
+ }
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "titleIcon icon-dark-theme",
+ style: {
+ backgroundImage: `url("${titleIconDark}")`
+ }
+ }));
+ }
+
+ renderButton() {
+ const {
+ props
+ } = this;
+
+ if (!this._shouldRenderButton()) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement(Button, {
+ onClick: props.onButtonClick || this.onButtonClick,
+ color: props.content.button_color,
+ backgroundColor: props.content.button_background_color
+ }, props.content.button_label);
+ }
+
+ renderText() {
+ const {
+ props
+ } = this;
+ return /*#__PURE__*/external_React_default().createElement(RichText, {
+ text: props.content.text,
+ customElements: this.props.customElements,
+ localization_id: "text",
+ links: props.content.links,
+ sendClick: props.sendClick
+ });
+ }
+
+ wrapSectionHeader(url) {
+ return function (children) {
+ return /*#__PURE__*/external_React_default().createElement("a", {
+ href: url
+ }, children);
+ };
+ }
+
+ wrapSnippetContent(children) {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "innerContentWrapper"
+ }, children);
+ }
+
+ renderSectionHeader() {
+ const {
+ props
+ } = this; // an icon and text must be specified to render the section header
+
+ if (props.content.section_title_icon && props.content.section_title_text) {
+ const sectionTitleIconLight = safeURI(props.content.section_title_icon);
+ const sectionTitleIconDark = safeURI(props.content.section_title_icon_dark_theme || props.content.section_title_icon);
+ const sectionTitleURL = props.content.section_title_url;
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "section-header"
+ }, /*#__PURE__*/external_React_default().createElement("h3", {
+ className: "section-title"
+ }, /*#__PURE__*/external_React_default().createElement(ConditionalWrapper_ConditionalWrapper, {
+ condition: sectionTitleURL,
+ wrap: this.wrapSectionHeader(sectionTitleURL)
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-small-spacer icon-light-theme",
+ style: {
+ backgroundImage: `url("${sectionTitleIconLight}")`
+ }
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-small-spacer icon-dark-theme",
+ style: {
+ backgroundImage: `url("${sectionTitleIconDark}")`
+ }
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "section-title-text"
+ }, props.content.section_title_text))));
+ }
+
+ return null;
+ }
+
+ render() {
+ const {
+ props
+ } = this;
+ const sectionHeader = this.renderSectionHeader();
+ let className = "SimpleSnippet";
+
+ if (props.className) {
+ className += ` ${props.className}`;
+ }
+
+ if (props.content.tall) {
+ className += " tall";
+ }
+
+ if (sectionHeader) {
+ className += " has-section-header";
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "snippet-hover-wrapper"
+ }, /*#__PURE__*/external_React_default().createElement(SnippetBase, SimpleSnippet_extends({}, props, {
+ className: className,
+ textStyle: this.props.textStyle
+ }), sectionHeader, /*#__PURE__*/external_React_default().createElement(ConditionalWrapper_ConditionalWrapper, {
+ condition: sectionHeader,
+ wrap: this.wrapSnippetContent
+ }, /*#__PURE__*/external_React_default().createElement("img", {
+ src: safeURI(props.content.icon) || DEFAULT_ICON_PATH,
+ className: "icon icon-light-theme",
+ alt: props.content.icon_alt_text || ICON_ALT_TEXT
+ }), /*#__PURE__*/external_React_default().createElement("img", {
+ src: safeURI(props.content.icon_dark_theme || props.content.icon) || DEFAULT_ICON_PATH,
+ className: "icon icon-dark-theme",
+ alt: props.content.icon_alt_text || ICON_ALT_TEXT
+ }), /*#__PURE__*/external_React_default().createElement("div", null, this.renderTitle(), " ", /*#__PURE__*/external_React_default().createElement("p", {
+ className: "body"
+ }, this.renderText()), this.props.extraContent), /*#__PURE__*/external_React_default().createElement("div", null, this.renderButton()))));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/asrouter/templates/EOYSnippet/EOYSnippet.jsx
+function EOYSnippet_extends() { EOYSnippet_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; }; return EOYSnippet_extends.apply(this, arguments); }
+
+/* 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/. */
+
+
+
+class EOYSnippetBase extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ }
+ /**
+ * setFrequencyValue - `frequency` form parameter value should be `monthly`
+ * if `monthly-checkbox` is selected or `single` otherwise
+ */
+
+
+ setFrequencyValue() {
+ const frequencyCheckbox = this.refs.form.querySelector("#monthly-checkbox");
+
+ if (frequencyCheckbox.checked) {
+ this.refs.form.querySelector("[name='frequency']").value = "monthly";
+ }
+ }
+
+ handleSubmit(event) {
+ event.preventDefault();
+ this.props.sendClick(event);
+ this.setFrequencyValue();
+
+ if (!this.props.content.do_not_autoblock) {
+ this.props.onBlock();
+ }
+
+ this.refs.form.submit();
+ }
+
+ renderDonations() {
+ const fieldNames = ["first", "second", "third", "fourth"];
+ const numberFormat = new Intl.NumberFormat(this.props.content.locale || navigator.language, {
+ style: "currency",
+ currency: this.props.content.currency_code,
+ minimumFractionDigits: 0
+ }); // Default to `second` button
+
+ const {
+ selected_button
+ } = this.props.content;
+ const btnStyle = {
+ color: this.props.content.button_color,
+ backgroundColor: this.props.content.button_background_color
+ };
+ const donationURLParams = [];
+ const paramsStartIndex = this.props.content.donation_form_url.indexOf("?");
+
+ for (const entry of new URLSearchParams(this.props.content.donation_form_url.slice(paramsStartIndex)).entries()) {
+ donationURLParams.push(entry);
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("form", {
+ className: "EOYSnippetForm",
+ action: this.props.content.donation_form_url,
+ method: this.props.form_method,
+ onSubmit: this.handleSubmit,
+ "data-metric": "EOYSnippetForm",
+ ref: "form"
+ }, donationURLParams.map(([key, value], idx) => /*#__PURE__*/external_React_default().createElement("input", {
+ type: "hidden",
+ name: key,
+ value: value,
+ key: idx
+ })), fieldNames.map((field, idx) => {
+ const button_name = `donation_amount_${field}`;
+ const amount = this.props.content[button_name];
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, {
+ key: idx
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ type: "radio",
+ name: "amount",
+ value: amount,
+ id: field,
+ defaultChecked: button_name === selected_button
+ }), /*#__PURE__*/external_React_default().createElement("label", {
+ htmlFor: field,
+ className: "donation-amount"
+ }, numberFormat.format(amount)));
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "monthly-checkbox-container"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ id: "monthly-checkbox",
+ type: "checkbox"
+ }), /*#__PURE__*/external_React_default().createElement("label", {
+ htmlFor: "monthly-checkbox"
+ }, this.props.content.monthly_checkbox_label_text)), /*#__PURE__*/external_React_default().createElement("input", {
+ type: "hidden",
+ name: "frequency",
+ value: "single"
+ }), /*#__PURE__*/external_React_default().createElement("input", {
+ type: "hidden",
+ name: "currency",
+ value: this.props.content.currency_code
+ }), /*#__PURE__*/external_React_default().createElement("input", {
+ type: "hidden",
+ name: "presets",
+ value: fieldNames.map(field => this.props.content[`donation_amount_${field}`])
+ }), /*#__PURE__*/external_React_default().createElement("button", {
+ style: btnStyle,
+ type: "submit",
+ className: "ASRouterButton primary donation-form-url"
+ }, this.props.content.button_label));
+ }
+
+ render() {
+ const textStyle = {
+ color: this.props.content.text_color,
+ backgroundColor: this.props.content.background_color
+ };
+ const customElement = /*#__PURE__*/external_React_default().createElement("em", {
+ style: {
+ backgroundColor: this.props.content.highlight_color
+ }
+ });
+ return /*#__PURE__*/external_React_default().createElement(SimpleSnippet, EOYSnippet_extends({}, this.props, {
+ className: this.props.content.test,
+ customElements: {
+ em: customElement
+ },
+ textStyle: textStyle,
+ extraContent: this.renderDonations()
+ }));
+ }
+
+}
+
+const EOYSnippet = props => {
+ const extendedContent = {
+ monthly_checkbox_label_text: "Make my donation monthly",
+ locale: "en-US",
+ currency_code: "usd",
+ selected_button: "donation_amount_second",
+ ...props.content
+ };
+ return /*#__PURE__*/external_React_default().createElement(EOYSnippetBase, EOYSnippet_extends({}, props, {
+ content: extendedContent,
+ form_method: "GET"
+ }));
+};
+;// CONCATENATED MODULE: ./content-src/asrouter/templates/SubmitFormSnippet/SubmitFormSnippet.jsx
+function SubmitFormSnippet_extends() { SubmitFormSnippet_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; }; return SubmitFormSnippet_extends.apply(this, arguments); }
+
+/* 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/. */
+
+
+
+
+
+
+ // Alt text placeholder in case the prop from the server isn't available
+
+const SubmitFormSnippet_ICON_ALT_TEXT = "";
+class SubmitFormSnippet extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.expandSnippet = this.expandSnippet.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleSubmitAttempt = this.handleSubmitAttempt.bind(this);
+ this.onInputChange = this.onInputChange.bind(this);
+ this.state = {
+ expanded: false,
+ submitAttempted: false,
+ signupSubmitted: false,
+ signupSuccess: false,
+ disableForm: false
+ };
+ }
+
+ handleSubmitAttempt() {
+ if (!this.state.submitAttempted) {
+ this.setState({
+ submitAttempted: true
+ });
+ }
+ }
+
+ async handleSubmit(event) {
+ let json;
+
+ if (this.state.disableForm) {
+ return;
+ }
+
+ event.preventDefault();
+ this.setState({
+ disableForm: true
+ });
+ this.props.sendUserActionTelemetry({
+ event: "CLICK_BUTTON",
+ event_context: "conversion-subscribe-activation",
+ id: "NEWTAB_FOOTER_BAR_CONTENT"
+ });
+
+ if (this.props.form_method.toUpperCase() === "GET") {
+ this.props.onBlock({
+ preventDismiss: true
+ });
+ this.refs.form.submit();
+ return;
+ }
+
+ const {
+ url,
+ formData
+ } = this.props.processFormData ? this.props.processFormData(this.refs.mainInput, this.props) : {
+ url: this.refs.form.action,
+ formData: new FormData(this.refs.form)
+ };
+
+ try {
+ const fetchRequest = new Request(url, {
+ body: formData,
+ method: "POST",
+ credentials: "omit"
+ });
+ const response = await fetch(fetchRequest); // eslint-disable-line fetch-options/no-fetch-credentials
+
+ json = await response.json();
+ } catch (err) {
+ console.error(err);
+ }
+
+ if (json && json.status === "ok") {
+ this.setState({
+ signupSuccess: true,
+ signupSubmitted: true
+ });
+
+ if (!this.props.content.do_not_autoblock) {
+ this.props.onBlock({
+ preventDismiss: true
+ });
+ }
+
+ this.props.sendUserActionTelemetry({
+ event: "CLICK_BUTTON",
+ event_context: "subscribe-success",
+ id: "NEWTAB_FOOTER_BAR_CONTENT"
+ });
+ } else {
+ console.error("There was a problem submitting the form", json || "[No JSON response]");
+ this.setState({
+ signupSuccess: false,
+ signupSubmitted: true
+ });
+ this.props.sendUserActionTelemetry({
+ event: "CLICK_BUTTON",
+ event_context: "subscribe-error",
+ id: "NEWTAB_FOOTER_BAR_CONTENT"
+ });
+ }
+
+ this.setState({
+ disableForm: false
+ });
+ }
+
+ expandSnippet() {
+ this.props.sendUserActionTelemetry({
+ event: "CLICK_BUTTON",
+ event_context: "scene1-button-learn-more",
+ id: this.props.UISurface
+ });
+ this.setState({
+ expanded: true,
+ signupSuccess: false,
+ signupSubmitted: false
+ });
+ }
+
+ renderHiddenFormInputs() {
+ const {
+ hidden_inputs
+ } = this.props.content;
+
+ if (!hidden_inputs) {
+ return null;
+ }
+
+ return Object.keys(hidden_inputs).map((key, idx) => /*#__PURE__*/external_React_default().createElement("input", {
+ key: idx,
+ type: "hidden",
+ name: key,
+ value: hidden_inputs[key]
+ }));
+ }
+
+ renderDisclaimer() {
+ const {
+ content
+ } = this.props;
+
+ if (!content.scene2_disclaimer_html) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("p", {
+ className: "disclaimerText"
+ }, /*#__PURE__*/external_React_default().createElement(RichText, {
+ text: content.scene2_disclaimer_html,
+ localization_id: "disclaimer_html",
+ links: content.links,
+ doNotAutoBlock: true,
+ openNewWindow: true,
+ sendClick: this.props.sendClick
+ }));
+ }
+
+ renderFormPrivacyNotice() {
+ const {
+ content
+ } = this.props;
+
+ if (!content.scene2_privacy_html) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("p", {
+ className: "privacyNotice"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ type: "checkbox",
+ id: "id_privacy",
+ name: "privacy",
+ required: "required"
+ }), /*#__PURE__*/external_React_default().createElement("label", {
+ htmlFor: "id_privacy"
+ }, /*#__PURE__*/external_React_default().createElement(RichText, {
+ text: content.scene2_privacy_html,
+ localization_id: "privacy_html",
+ links: content.links,
+ doNotAutoBlock: true,
+ openNewWindow: true,
+ sendClick: this.props.sendClick
+ })));
+ }
+
+ renderSignupSubmitted() {
+ const {
+ content
+ } = this.props;
+ const isSuccess = this.state.signupSuccess;
+ const successTitle = isSuccess && content.success_title;
+ const bodyText = isSuccess ? {
+ success_text: content.success_text
+ } : {
+ error_text: content.error_text
+ };
+ const retryButtonText = content.retry_button_label;
+ return /*#__PURE__*/external_React_default().createElement(SnippetBase, this.props, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "submissionStatus"
+ }, successTitle ? /*#__PURE__*/external_React_default().createElement("h2", {
+ className: "submitStatusTitle"
+ }, successTitle) : null, /*#__PURE__*/external_React_default().createElement("p", null, /*#__PURE__*/external_React_default().createElement(RichText, SubmitFormSnippet_extends({}, bodyText, {
+ localization_id: isSuccess ? "success_text" : "error_text"
+ })), isSuccess ? null : /*#__PURE__*/external_React_default().createElement(Button, {
+ onClick: this.expandSnippet
+ }, retryButtonText))));
+ }
+
+ onInputChange(event) {
+ if (!this.props.validateInput) {
+ return;
+ }
+
+ const hasError = this.props.validateInput(event.target.value, this.props.content);
+ event.target.setCustomValidity(hasError);
+ }
+
+ wrapSectionHeader(url) {
+ return function (children) {
+ return /*#__PURE__*/external_React_default().createElement("a", {
+ href: url
+ }, children);
+ };
+ }
+
+ renderInput() {
+ const placholder = this.props.content.scene2_email_placeholder_text || this.props.content.scene2_input_placeholder;
+ return /*#__PURE__*/external_React_default().createElement("input", {
+ ref: "mainInput",
+ type: this.props.inputType || "email",
+ className: `mainInput${this.state.submitAttempted ? "" : " clean"}`,
+ name: "email",
+ required: true,
+ placeholder: placholder,
+ onChange: this.props.validateInput ? this.onInputChange : null
+ });
+ }
+
+ renderForm() {
+ return /*#__PURE__*/external_React_default().createElement("form", {
+ action: this.props.form_action,
+ method: this.props.form_method,
+ onSubmit: this.handleSubmit,
+ ref: "form"
+ }, this.renderHiddenFormInputs(), /*#__PURE__*/external_React_default().createElement("div", null, this.renderInput(), /*#__PURE__*/external_React_default().createElement("button", {
+ type: "submit",
+ className: "ASRouterButton primary",
+ onClick: this.handleSubmitAttempt,
+ ref: "formSubmitBtn"
+ }, this.props.content.scene2_button_label)), this.renderFormPrivacyNotice() || this.renderDisclaimer());
+ }
+
+ renderScene2Icon() {
+ const {
+ content
+ } = this.props;
+
+ if (!content.scene2_icon) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "scene2Icon"
+ }, /*#__PURE__*/external_React_default().createElement("img", {
+ src: safeURI(content.scene2_icon),
+ className: "icon-light-theme",
+ alt: content.scene2_icon_alt_text || SubmitFormSnippet_ICON_ALT_TEXT
+ }), /*#__PURE__*/external_React_default().createElement("img", {
+ src: safeURI(content.scene2_icon_dark_theme || content.scene2_icon),
+ className: "icon-dark-theme",
+ alt: content.scene2_icon_alt_text || SubmitFormSnippet_ICON_ALT_TEXT
+ }));
+ }
+
+ renderSignupView() {
+ const {
+ content
+ } = this.props;
+ const containerClass = `SubmitFormSnippet ${this.props.className}`;
+ return /*#__PURE__*/external_React_default().createElement(SnippetBase, SubmitFormSnippet_extends({}, this.props, {
+ className: containerClass,
+ footerDismiss: true
+ }), this.renderScene2Icon(), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "message"
+ }, /*#__PURE__*/external_React_default().createElement("p", null, content.scene2_title && /*#__PURE__*/external_React_default().createElement("h3", {
+ className: "scene2Title"
+ }, content.scene2_title), " ", content.scene2_text && /*#__PURE__*/external_React_default().createElement(RichText, {
+ scene2_text: content.scene2_text,
+ localization_id: "scene2_text"
+ }))), this.renderForm());
+ }
+
+ renderSectionHeader() {
+ const {
+ props
+ } = this; // an icon and text must be specified to render the section header
+
+ if (props.content.section_title_icon && props.content.section_title_text) {
+ const sectionTitleIconLight = safeURI(props.content.section_title_icon);
+ const sectionTitleIconDark = safeURI(props.content.section_title_icon_dark_theme || props.content.section_title_icon);
+ const sectionTitleURL = props.content.section_title_url;
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "section-header"
+ }, /*#__PURE__*/external_React_default().createElement("h3", {
+ className: "section-title"
+ }, /*#__PURE__*/external_React_default().createElement(ConditionalWrapper_ConditionalWrapper, {
+ wrap: this.wrapSectionHeader(sectionTitleURL),
+ condition: sectionTitleURL
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-small-spacer icon-light-theme",
+ style: {
+ backgroundImage: `url("${sectionTitleIconLight}")`
+ }
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-small-spacer icon-dark-theme",
+ style: {
+ backgroundImage: `url("${sectionTitleIconDark}")`
+ }
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "section-title-text"
+ }, props.content.section_title_text))));
+ }
+
+ return null;
+ }
+
+ renderSignupViewAlt() {
+ const {
+ content
+ } = this.props;
+ const containerClass = `SubmitFormSnippet ${this.props.className} scene2Alt`;
+ return /*#__PURE__*/external_React_default().createElement(SnippetBase, SubmitFormSnippet_extends({}, this.props, {
+ className: containerClass // Don't show bottom dismiss button
+ ,
+ footerDismiss: false
+ }), this.renderSectionHeader(), this.renderScene2Icon(), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "message"
+ }, /*#__PURE__*/external_React_default().createElement("p", null, content.scene2_text && /*#__PURE__*/external_React_default().createElement(RichText, {
+ scene2_text: content.scene2_text,
+ localization_id: "scene2_text"
+ })), this.renderForm()));
+ }
+
+ getFirstSceneContent() {
+ return Object.keys(this.props.content).filter(key => key.includes("scene1")).reduce((acc, key) => {
+ acc[key.substr(7)] = this.props.content[key];
+ return acc;
+ }, {});
+ }
+
+ render() {
+ const content = { ...this.props.content,
+ ...this.getFirstSceneContent()
+ };
+
+ if (this.state.signupSubmitted) {
+ return this.renderSignupSubmitted();
+ } // Render only scene 2 (signup view). Must check before `renderSignupView`
+ // to catch the Failure/Try again scenario where we want to return and render
+ // the scene again.
+
+
+ if (this.props.expandedAlt) {
+ return this.renderSignupViewAlt();
+ }
+
+ if (this.state.expanded) {
+ return this.renderSignupView();
+ }
+
+ return /*#__PURE__*/external_React_default().createElement(SimpleSnippet, SubmitFormSnippet_extends({}, this.props, {
+ content: content,
+ onButtonClick: this.expandSnippet
+ }));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/asrouter/templates/FXASignupSnippet/FXASignupSnippet.jsx
+function FXASignupSnippet_extends() { FXASignupSnippet_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; }; return FXASignupSnippet_extends.apply(this, arguments); }
+
+/* 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 FXASignupSnippet = props => {
+ const userAgent = window.navigator.userAgent.match(/Firefox\/([0-9]+)\./);
+ const firefox_version = userAgent ? parseInt(userAgent[1], 10) : 0;
+ const extendedContent = {
+ scene1_button_label: "Learn more",
+ retry_button_label: "Try again",
+ scene2_email_placeholder_text: "Your email here",
+ scene2_button_label: "Sign me up",
+ scene2_dismiss_button_text: "Dismiss",
+ ...props.content,
+ hidden_inputs: {
+ action: "email",
+ context: "fx_desktop_v3",
+ entrypoint: "snippets",
+ utm_source: "snippet",
+ utm_content: firefox_version,
+ utm_campaign: props.content.utm_campaign,
+ utm_term: props.content.utm_term,
+ ...props.content.hidden_inputs
+ }
+ };
+ return /*#__PURE__*/external_React_default().createElement(SubmitFormSnippet, FXASignupSnippet_extends({}, props, {
+ content: extendedContent,
+ form_action: "https://accounts.firefox.com/",
+ form_method: "GET"
+ }));
+};
+;// CONCATENATED MODULE: ./content-src/asrouter/templates/NewsletterSnippet/NewsletterSnippet.jsx
+function NewsletterSnippet_extends() { NewsletterSnippet_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; }; return NewsletterSnippet_extends.apply(this, arguments); }
+
+/* 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 NewsletterSnippet = props => {
+ const extendedContent = {
+ scene1_button_label: "Learn more",
+ retry_button_label: "Try again",
+ scene2_email_placeholder_text: "Your email here",
+ scene2_button_label: "Sign me up",
+ scene2_dismiss_button_text: "Dismiss",
+ scene2_newsletter: "mozilla-foundation",
+ ...props.content,
+ hidden_inputs: {
+ newsletters: props.content.scene2_newsletter || "mozilla-foundation",
+ fmt: "H",
+ lang: props.content.locale || "en-US",
+ source_url: `https://snippets.mozilla.com/show/${props.id}`,
+ ...props.content.hidden_inputs
+ }
+ };
+ return /*#__PURE__*/external_React_default().createElement(SubmitFormSnippet, NewsletterSnippet_extends({}, props, {
+ content: extendedContent,
+ form_action: "https://basket.mozilla.org/subscribe.json",
+ form_method: "POST"
+ }));
+};
+;// CONCATENATED MODULE: ./content-src/asrouter/templates/SendToDeviceSnippet/isEmailOrPhoneNumber.js
+/* 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/. */
+
+/**
+ * Checks if a given string is an email or phone number or neither
+ * @param {string} val The user input
+ * @param {ASRMessageContent} content .content property on ASR message
+ * @returns {"email"|"phone"|""} The type of the input
+ */
+function isEmailOrPhoneNumber(val, content) {
+ const {
+ locale
+ } = content; // http://emailregex.com/
+
+ const email_re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+ const check_email = email_re.test(val);
+ let check_phone; // depends on locale
+
+ switch (locale) {
+ case "en-US":
+ case "en-CA":
+ // allow 10-11 digits in case user wants to enter country code
+ check_phone = val.length >= 10 && val.length <= 11 && !isNaN(val);
+ break;
+
+ case "de":
+ // allow between 2 and 12 digits for german phone numbers
+ check_phone = val.length >= 2 && val.length <= 12 && !isNaN(val);
+ break;
+ // this case should never be hit, but good to have a fallback just in case
+
+ default:
+ check_phone = !isNaN(val);
+ break;
+ }
+
+ if (check_email) {
+ return "email";
+ } else if (check_phone) {
+ return "phone";
+ }
+
+ return "";
+}
+;// CONCATENATED MODULE: ./content-src/asrouter/templates/SendToDeviceSnippet/SendToDeviceSnippet.jsx
+function SendToDeviceSnippet_extends() { SendToDeviceSnippet_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; }; return SendToDeviceSnippet_extends.apply(this, arguments); }
+
+/* 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/. */
+
+
+
+
+function validateInput(value, content) {
+ const type = isEmailOrPhoneNumber(value, content);
+ return type ? "" : "Must be an email or a phone number.";
+}
+
+function processFormData(input, message) {
+ const {
+ content
+ } = message;
+ const type = content.include_sms ? isEmailOrPhoneNumber(input.value, content) : "email";
+ const formData = new FormData();
+ let url;
+
+ if (type === "phone") {
+ url = "https://basket.mozilla.org/news/subscribe_sms/";
+ formData.append("mobile_number", input.value);
+ formData.append("msg_name", content.message_id_sms);
+ formData.append("country", content.country);
+ } else if (type === "email") {
+ url = "https://basket.mozilla.org/news/subscribe/";
+ formData.append("email", input.value);
+ formData.append("newsletters", content.message_id_email);
+ formData.append("source_url", encodeURIComponent(`https://snippets.mozilla.com/show/${message.id}`));
+ }
+
+ formData.append("lang", content.locale);
+ return {
+ formData,
+ url
+ };
+}
+
+function addDefaultValues(props) {
+ return { ...props,
+ content: {
+ scene1_button_label: "Learn more",
+ retry_button_label: "Try again",
+ scene2_dismiss_button_text: "Dismiss",
+ scene2_button_label: "Send",
+ scene2_input_placeholder: "Your email here",
+ locale: "en-US",
+ country: "us",
+ message_id_email: "",
+ include_sms: false,
+ ...props.content
+ }
+ };
+}
+
+const SendToDeviceSnippet = props => {
+ const propsWithDefaults = addDefaultValues(props);
+ return /*#__PURE__*/external_React_default().createElement(SubmitFormSnippet, SendToDeviceSnippet_extends({}, propsWithDefaults, {
+ form_method: "POST",
+ className: "send_to_device_snippet",
+ inputType: propsWithDefaults.content.include_sms ? "text" : "email",
+ validateInput: propsWithDefaults.content.include_sms ? validateInput : null,
+ processFormData: processFormData
+ }));
+};
+const SendToDeviceScene2Snippet = props => {
+ return /*#__PURE__*/external_React_default().createElement(SendToDeviceSnippet, SendToDeviceSnippet_extends({
+ expandedAlt: true
+ }, props));
+};
+;// CONCATENATED MODULE: ./content-src/asrouter/templates/SimpleBelowSearchSnippet/SimpleBelowSearchSnippet.jsx
+function SimpleBelowSearchSnippet_extends() { SimpleBelowSearchSnippet_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; }; return SimpleBelowSearchSnippet_extends.apply(this, arguments); }
+
+/* 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 SimpleBelowSearchSnippet_DEFAULT_ICON_PATH = "chrome://branding/content/icon64.png"; // Alt text placeholder in case the prop from the server isn't available
+
+const SimpleBelowSearchSnippet_ICON_ALT_TEXT = "";
+class SimpleBelowSearchSnippet extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onButtonClick = this.onButtonClick.bind(this);
+ }
+
+ renderText() {
+ const {
+ props
+ } = this;
+ return props.content.text ? /*#__PURE__*/external_React_default().createElement(RichText, {
+ text: props.content.text,
+ customElements: this.props.customElements,
+ localization_id: "text",
+ links: props.content.links,
+ sendClick: props.sendClick
+ }) : null;
+ }
+
+ renderTitle() {
+ const {
+ title
+ } = this.props.content;
+ return title ? /*#__PURE__*/external_React_default().createElement("h3", {
+ className: "title title-inline"
+ }, title, /*#__PURE__*/external_React_default().createElement("br", null)) : null;
+ }
+
+ async onButtonClick() {
+ if (this.props.provider !== "preview") {
+ this.props.sendUserActionTelemetry({
+ event: "CLICK_BUTTON",
+ id: this.props.UISurface
+ });
+ }
+
+ const {
+ button_url
+ } = this.props.content; // If button_url is defined handle it as OPEN_URL action
+
+ const type = this.props.content.button_action || button_url && "OPEN_URL";
+ await this.props.onAction({
+ type,
+ data: {
+ args: this.props.content.button_action_args || button_url
+ }
+ });
+
+ if (!this.props.content.do_not_autoblock) {
+ this.props.onBlock();
+ }
+ }
+
+ _shouldRenderButton() {
+ return this.props.content.button_action || this.props.onButtonClick || this.props.content.button_url;
+ }
+
+ renderButton() {
+ const {
+ props
+ } = this;
+
+ if (!this._shouldRenderButton()) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement(Button, {
+ onClick: props.onButtonClick || this.onButtonClick,
+ color: props.content.button_color,
+ backgroundColor: props.content.button_background_color
+ }, props.content.button_label);
+ }
+
+ render() {
+ const {
+ props
+ } = this;
+ let className = "SimpleBelowSearchSnippet";
+ let containerName = "below-search-snippet";
+
+ if (props.className) {
+ className += ` ${props.className}`;
+ }
+
+ if (this._shouldRenderButton()) {
+ className += " withButton";
+ containerName += " withButton";
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: containerName
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "snippet-hover-wrapper"
+ }, /*#__PURE__*/external_React_default().createElement(SnippetBase, SimpleBelowSearchSnippet_extends({}, props, {
+ className: className,
+ textStyle: this.props.textStyle
+ }), /*#__PURE__*/external_React_default().createElement("img", {
+ src: safeURI(props.content.icon) || SimpleBelowSearchSnippet_DEFAULT_ICON_PATH,
+ className: "icon icon-light-theme",
+ alt: props.content.icon_alt_text || SimpleBelowSearchSnippet_ICON_ALT_TEXT
+ }), /*#__PURE__*/external_React_default().createElement("img", {
+ src: safeURI(props.content.icon_dark_theme || props.content.icon) || SimpleBelowSearchSnippet_DEFAULT_ICON_PATH,
+ className: "icon icon-dark-theme",
+ alt: props.content.icon_alt_text || SimpleBelowSearchSnippet_ICON_ALT_TEXT
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "textContainer"
+ }, this.renderTitle(), /*#__PURE__*/external_React_default().createElement("p", {
+ className: "body"
+ }, this.renderText()), this.props.extraContent), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "buttonContainer"
+ }, this.renderButton()))));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/asrouter/templates/template-manifest.jsx
+/* 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/. */
+
+
+
+
+
+ // Key names matching schema name of templates
+
+const SnippetsTemplates = {
+ simple_snippet: SimpleSnippet,
+ newsletter_snippet: NewsletterSnippet,
+ fxa_signup_snippet: FXASignupSnippet,
+ send_to_device_snippet: SendToDeviceSnippet,
+ send_to_device_scene2_snippet: SendToDeviceScene2Snippet,
+ eoy_snippet: EOYSnippet,
+ simple_below_search_snippet: SimpleBelowSearchSnippet
+};
+;// CONCATENATED MODULE: ./content-src/asrouter/asrouter-content.jsx
+function asrouter_content_extends() { asrouter_content_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; }; return asrouter_content_extends.apply(this, arguments); }
+
+/* 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 TEMPLATES_BELOW_SEARCH = ["simple_below_search_snippet"]; // 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);
+}
+
+class ASRouterUISurface extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.sendClick = this.sendClick.bind(this);
+ this.sendImpression = this.sendImpression.bind(this);
+ this.sendUserActionTelemetry = this.sendUserActionTelemetry.bind(this);
+ this.onUserAction = this.onUserAction.bind(this);
+ this.fetchFlowParams = this.fetchFlowParams.bind(this);
+ this.onBlockSelected = this.onBlockSelected.bind(this);
+ this.onBlockById = this.onBlockById.bind(this);
+ this.onDismiss = this.onDismiss.bind(this);
+ this.onMessageFromParent = this.onMessageFromParent.bind(this);
+ this.state = {
+ message: {}
+ };
+
+ if (props.document) {
+ this.footerPortal = props.document.getElementById("footer-asrouter-container");
+ }
+ }
+
+ async fetchFlowParams(params = {}) {
+ let result = {};
+ const {
+ fxaEndpoint
+ } = this.props;
+
+ if (!fxaEndpoint) {
+ const err = "Tried to fetch flow params before fxaEndpoint pref was ready";
+ console.error(err);
+ }
+
+ try {
+ const urlObj = new URL(fxaEndpoint);
+ urlObj.pathname = "metrics-flow";
+ Object.keys(params).forEach(key => {
+ urlObj.searchParams.append(key, params[key]);
+ });
+ const response = await fetch(urlObj.toString(), {
+ credentials: "omit"
+ });
+
+ if (response.status === 200) {
+ const {
+ deviceId,
+ flowId,
+ flowBeginTime
+ } = await response.json();
+ result = {
+ deviceId,
+ flowId,
+ flowBeginTime
+ };
+ } else {
+ console.error("Non-200 response", response);
+ }
+ } catch (error) {
+ console.error(error);
+ }
+
+ return result;
+ }
+
+ sendUserActionTelemetry(extraProps = {}) {
+ const {
+ message
+ } = this.state;
+ const eventType = `${message.provider}_user_event`;
+ const source = extraProps.id;
+ delete extraProps.id;
+ ASRouterUtils.sendTelemetry({
+ source,
+ message_id: message.id,
+ action: eventType,
+ ...extraProps
+ });
+ }
+
+ sendImpression(extraProps) {
+ if (this.state.message.provider === "preview") {
+ return Promise.resolve();
+ }
+
+ this.sendUserActionTelemetry({
+ event: "IMPRESSION",
+ ...extraProps
+ });
+ return ASRouterUtils.sendMessage({
+ type: MESSAGE_TYPE_HASH.IMPRESSION,
+ data: this.state.message
+ });
+ } // If link has a `metric` data attribute send it as part of the `event_context`
+ // telemetry field which can have arbitrary values.
+ // Used for router messages with links as part of the content.
+
+
+ sendClick(event) {
+ const {
+ dataset
+ } = event.target;
+ const metric = {
+ event_context: dataset.metric,
+ // Used for the `source` of the event. Needed to differentiate
+ // from other snippet or onboarding events that may occur.
+ id: "NEWTAB_FOOTER_BAR_CONTENT"
+ };
+ const {
+ entrypoint_name,
+ entrypoint_value
+ } = dataset; // Assign the snippet referral for the action
+
+ const entrypoint = entrypoint_name ? new URLSearchParams([[entrypoint_name, entrypoint_value]]).toString() : entrypoint_value;
+ const action = {
+ type: dataset.action,
+ data: {
+ args: dataset.args,
+ ...(entrypoint && {
+ entrypoint
+ })
+ }
+ };
+
+ if (action.type) {
+ ASRouterUtils.executeAction(action);
+ }
+
+ if (!this.state.message.content.do_not_autoblock && !dataset.do_not_autoblock) {
+ this.onBlockById(this.state.message.id);
+ }
+
+ if (this.state.message.provider !== "preview") {
+ this.sendUserActionTelemetry({
+ event: "CLICK_BUTTON",
+ ...metric
+ });
+ }
+ }
+
+ onBlockSelected(options) {
+ return this.onBlockById(this.state.message.id, { ...options,
+ campaign: this.state.message.campaign
+ });
+ }
+
+ onBlockById(id, options) {
+ return ASRouterUtils.blockById(id, options).then(clearAll => {
+ if (clearAll) {
+ this.setState({
+ message: {}
+ });
+ }
+ });
+ }
+
+ onDismiss() {
+ this.clearMessage(this.state.message.id);
+ } // Blocking a snippet by id blocks the entire campaign
+ // so when clearing we use the two values interchangeably
+
+
+ clearMessage(idOrCampaign) {
+ if (idOrCampaign === this.state.message.id || idOrCampaign === this.state.message.campaign) {
+ this.setState({
+ message: {}
+ });
+ }
+ }
+
+ clearProvider(id) {
+ if (this.state.message.provider === id) {
+ this.setState({
+ message: {}
+ });
+ }
+ }
+
+ onMessageFromParent({
+ type,
+ data
+ }) {
+ // These only exists due to onPrefChange events in ASRouter
+ switch (type) {
+ case "ClearMessages":
+ {
+ data.forEach(id => this.clearMessage(id));
+ break;
+ }
+
+ case "ClearProviders":
+ {
+ data.forEach(id => this.clearProvider(id));
+ break;
+ }
+
+ case "EnterSnippetsPreviewMode":
+ {
+ this.props.dispatch({
+ type: actionTypes.SNIPPETS_PREVIEW_MODE
+ });
+ break;
+ }
+ }
+ }
+
+ requestMessage(endpoint) {
+ ASRouterUtils.sendMessage({
+ type: "NEWTAB_MESSAGE_REQUEST",
+ data: {
+ endpoint
+ }
+ }).then(state => this.setState(state));
+ }
+
+ componentWillMount() {
+ const endpoint = ASRouterUtils.getPreviewEndpoint();
+
+ if (endpoint && endpoint.theme === "dark") {
+ __webpack_require__.g.window.dispatchEvent(new CustomEvent("LightweightTheme:Set", {
+ detail: {
+ data: NEWTAB_DARK_THEME
+ }
+ }));
+ }
+
+ if (endpoint && endpoint.dir === "rtl") {
+ //Set `dir = rtl` on the HTML
+ this.props.document.dir = "rtl";
+ }
+
+ ASRouterUtils.addListener(this.onMessageFromParent);
+ this.requestMessage(endpoint);
+ }
+
+ componentWillUnmount() {
+ ASRouterUtils.removeListener(this.onMessageFromParent);
+ }
+
+ componentDidUpdate(prevProps, prevState) {
+ if (prevProps.adminContent && JSON.stringify(prevProps.adminContent) !== JSON.stringify(this.props.adminContent)) {
+ this.updateContent();
+ }
+
+ if (prevState.message.id !== this.state.message.id) {
+ const main = __webpack_require__.g.window.document.querySelector("main");
+
+ if (main) {
+ if (this.state.message.id) {
+ main.classList.add("has-snippet");
+ } else {
+ main.classList.remove("has-snippet");
+ }
+ }
+ }
+ }
+
+ updateContent() {
+ this.setState({ ...this.props.adminContent
+ });
+ }
+
+ async getMonitorUrl({
+ url,
+ flowRequestParams = {}
+ }) {
+ const flowValues = await this.fetchFlowParams(flowRequestParams); // Note that flowParams are actually added dynamically on the page
+
+ const urlObj = new URL(url);
+ ["deviceId", "flowId", "flowBeginTime"].forEach(key => {
+ if (key in flowValues) {
+ urlObj.searchParams.append(key, flowValues[key]);
+ }
+ });
+ return urlObj.toString();
+ }
+
+ async onUserAction(action) {
+ switch (action.type) {
+ // This needs to be handled locally because its
+ case "ENABLE_FIREFOX_MONITOR":
+ const url = await this.getMonitorUrl(action.data.args);
+ ASRouterUtils.executeAction({
+ type: "OPEN_URL",
+ data: {
+ args: url
+ }
+ });
+ break;
+
+ default:
+ ASRouterUtils.executeAction(action);
+ }
+ }
+
+ renderSnippets() {
+ const {
+ message
+ } = this.state;
+
+ if (!SnippetsTemplates[message.template]) {
+ return null;
+ }
+
+ const SnippetComponent = SnippetsTemplates[message.template];
+ const {
+ content
+ } = message;
+ return /*#__PURE__*/external_React_default().createElement(ImpressionsWrapper, {
+ id: "NEWTAB_FOOTER_BAR",
+ message: this.state.message,
+ sendImpression: this.sendImpression,
+ shouldSendImpressionOnUpdate: shouldSendImpressionOnUpdate // This helps with testing
+ ,
+ document: this.props.document
+ }, /*#__PURE__*/external_React_default().createElement(LocalizationProvider, {
+ l10n: new ReactLocalization(generateBundles(content))
+ }, /*#__PURE__*/external_React_default().createElement(SnippetComponent, asrouter_content_extends({}, this.state.message, {
+ UISurface: "NEWTAB_FOOTER_BAR",
+ onBlock: this.onBlockSelected,
+ onDismiss: this.onDismiss,
+ onAction: this.onUserAction,
+ sendClick: this.sendClick,
+ sendUserActionTelemetry: this.sendUserActionTelemetry
+ }))));
+ }
+
+ renderPreviewBanner() {
+ if (this.state.message.provider !== "preview") {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "snippets-preview-banner"
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-small-spacer icon-info"
+ }), /*#__PURE__*/external_React_default().createElement("span", null, "Preview Purposes Only"));
+ }
+
+ render() {
+ const {
+ message
+ } = this.state;
+
+ if (!message.id) {
+ return null;
+ }
+
+ const shouldRenderBelowSearch = TEMPLATES_BELOW_SEARCH.includes(message.template);
+ return shouldRenderBelowSearch ?
+ /*#__PURE__*/
+ // Render special below search snippets in place;
+ external_React_default().createElement("div", {
+ className: "below-search-snippet-wrapper"
+ }, this.renderSnippets()) :
+ /*#__PURE__*/
+ // For regular snippets etc. we should render everything in our footer
+ // container.
+ external_ReactDOM_default().createPortal( /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, this.renderPreviewBanner(), this.renderSnippets()), this.footerPortal);
+ }
+
+}
+ASRouterUISurface.defaultProps = {
+ document: __webpack_require__.g.document
+};
+;// CONCATENATED MODULE: ./content-src/components/ConfirmDialog/ConfirmDialog.jsx
+/* 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/. */
+
+
+
+/**
+ * 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 (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this._handleCancelBtn = this._handleCancelBtn.bind(this);
+ this._handleConfirmBtn = this._handleConfirmBtn.bind(this);
+ }
+
+ _handleCancelBtn() {
+ this.props.dispatch({
+ type: actionTypes.DIALOG_CANCEL
+ });
+ this.props.dispatch(actionCreators.UserEvent({
+ event: 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 /*#__PURE__*/external_React_default().createElement("span", null, message_body.map(msg => /*#__PURE__*/external_React_default().createElement("p", {
+ key: msg,
+ "data-l10n-id": msg
+ })));
+ }
+
+ render() {
+ if (!this.props.visible) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "confirmation-dialog"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "modal-overlay",
+ onClick: this._handleCancelBtn,
+ role: "presentation"
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "modal"
+ }, /*#__PURE__*/external_React_default().createElement("section", {
+ className: "modal-message"
+ }, this.props.data.icon && /*#__PURE__*/external_React_default().createElement("span", {
+ className: `icon icon-spacer icon-${this.props.data.icon}`
+ }), this._renderModalMessage()), /*#__PURE__*/external_React_default().createElement("section", {
+ className: "actions"
+ }, /*#__PURE__*/external_React_default().createElement("button", {
+ onClick: this._handleCancelBtn,
+ "data-l10n-id": this.props.data.cancel_button_string_id
+ }), /*#__PURE__*/external_React_default().createElement("button", {
+ className: "done",
+ onClick: this._handleConfirmBtn,
+ "data-l10n-id": this.props.data.confirm_button_string_id
+ }))));
+ }
+
+}
+const ConfirmDialog = (0,external_ReactRedux_namespaceObject.connect)(state => state.Dialog)(_ConfirmDialog);
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSImage/DSImage.jsx
+/* 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 PLACEHOLDER_IMAGE_DATA_ARRAY = [{
+ rotation: "0deg",
+ offsetx: "20px",
+ offsety: "8px",
+ scale: "45%"
+}, {
+ rotation: "54deg",
+ offsetx: "-26px",
+ offsety: "62px",
+ scale: "55%"
+}, {
+ rotation: "-30deg",
+ offsetx: "78px",
+ offsety: "30px",
+ scale: "68%"
+}, {
+ rotation: "-22deg",
+ offsetx: "0",
+ offsety: "92px",
+ scale: "60%"
+}, {
+ rotation: "-65deg",
+ offsetx: "66px",
+ offsety: "28px",
+ scale: "60%"
+}, {
+ rotation: "22deg",
+ offsetx: "-35px",
+ offsety: "62px",
+ scale: "52%"
+}, {
+ rotation: "-25deg",
+ offsetx: "86px",
+ offsety: "-15px",
+ scale: "68%"
+}];
+const PLACEHOLDER_IMAGE_COLORS_ARRAY = "#0090ED #FF4F5F #2AC3A2 #FF7139 #A172FF #FFA437 #FF2A8A".split(" ");
+
+function generateIndex({
+ keyCode,
+ max
+}) {
+ if (!keyCode) {
+ // Just grab a random index if we cannot generate an index from a key.
+ return Math.floor(Math.random() * max);
+ }
+
+ const hashStr = str => {
+ let hash = 0;
+
+ for (let i = 0; i < str.length; i++) {
+ let charCode = str.charCodeAt(i);
+ hash += charCode;
+ }
+
+ return hash;
+ };
+
+ const hash = hashStr(keyCode);
+ return hash % max;
+}
+
+function PlaceholderImage({
+ urlKey,
+ titleKey
+}) {
+ const dataIndex = generateIndex({
+ keyCode: urlKey,
+ max: PLACEHOLDER_IMAGE_DATA_ARRAY.length
+ });
+ const colorIndex = generateIndex({
+ keyCode: titleKey,
+ max: PLACEHOLDER_IMAGE_COLORS_ARRAY.length
+ });
+ const {
+ rotation,
+ offsetx,
+ offsety,
+ scale
+ } = PLACEHOLDER_IMAGE_DATA_ARRAY[dataIndex];
+ const color = PLACEHOLDER_IMAGE_COLORS_ARRAY[colorIndex];
+ const style = {
+ "--placeholderBackgroundColor": color,
+ "--placeholderBackgroundRotation": rotation,
+ "--placeholderBackgroundOffsetx": offsetx,
+ "--placeholderBackgroundOffsety": offsety,
+ "--placeholderBackgroundScale": scale
+ };
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ style: style,
+ className: "placeholder-image"
+ });
+}
+class DSImage extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onOptimizedImageError = this.onOptimizedImageError.bind(this);
+ this.onNonOptimizedImageError = this.onNonOptimizedImageError.bind(this);
+ this.onLoad = this.onLoad.bind(this);
+ this.state = {
+ isLoaded: false,
+ optimizedImageFailed: false,
+ useTransition: false
+ };
+ }
+
+ onIdleCallback() {
+ if (!this.state.isLoaded) {
+ this.setState({
+ useTransition: true
+ });
+ }
+ }
+
+ reformatImageURL(url, width, height) {
+ // Change the image URL to request a size tailored for the parent container width
+ // Also: force JPEG, quality 60, no upscaling, no EXIF data
+ // Uses Thumbor: https://thumbor.readthedocs.io/en/latest/usage.html
+ return `https://img-getpocket.cdn.mozilla.net/${width}x${height}/filters:format(jpeg):quality(60):no_upscale():strip_exif()/${encodeURIComponent(url)}`;
+ }
+
+ componentDidMount() {
+ this.idleCallbackId = this.props.windowObj.requestIdleCallback(this.onIdleCallback.bind(this));
+ }
+
+ componentWillUnmount() {
+ if (this.idleCallbackId) {
+ this.props.windowObj.cancelIdleCallback(this.idleCallbackId);
+ }
+ }
+
+ render() {
+ let classNames = `ds-image
+ ${this.props.extraClassNames ? ` ${this.props.extraClassNames}` : ``}
+ ${this.state && this.state.useTransition ? ` use-transition` : ``}
+ ${this.state && this.state.isLoaded ? ` loaded` : ``}
+ `;
+ let img;
+
+ if (this.state) {
+ if (this.props.optimize && this.props.rawSource && !this.state.optimizedImageFailed) {
+ let baseSource = this.props.rawSource;
+ let sizeRules = [];
+ let srcSetRules = [];
+
+ for (let rule of this.props.sizes) {
+ let {
+ mediaMatcher,
+ width,
+ height
+ } = rule;
+ let sizeRule = `${mediaMatcher} ${width}px`;
+ sizeRules.push(sizeRule);
+ let srcSetRule = `${this.reformatImageURL(baseSource, width, height)} ${width}w`;
+ let srcSetRule2x = `${this.reformatImageURL(baseSource, width * 2, height * 2)} ${width * 2}w`;
+ srcSetRules.push(srcSetRule);
+ srcSetRules.push(srcSetRule2x);
+ }
+
+ if (this.props.sizes.length) {
+ // We have to supply a fallback in the very unlikely event that none of
+ // the media queries match. The smallest dimension was chosen arbitrarily.
+ sizeRules.push(`${this.props.sizes[this.props.sizes.length - 1].width}px`);
+ }
+
+ img = /*#__PURE__*/external_React_default().createElement("img", {
+ loading: "lazy",
+ alt: this.props.alt_text,
+ crossOrigin: "anonymous",
+ onLoad: this.onLoad,
+ onError: this.onOptimizedImageError,
+ sizes: sizeRules.join(","),
+ src: baseSource,
+ srcSet: srcSetRules.join(",")
+ });
+ } else if (this.props.source && !this.state.nonOptimizedImageFailed) {
+ img = /*#__PURE__*/external_React_default().createElement("img", {
+ loading: "lazy",
+ alt: this.props.alt_text,
+ crossOrigin: "anonymous",
+ onLoad: this.onLoad,
+ onError: this.onNonOptimizedImageError,
+ src: this.props.source
+ });
+ } else {
+ // We consider a failed to load img or source without an image as loaded.
+ classNames = `${classNames} loaded`; // Remove the img element if we have no source. Render a placeholder instead.
+ // This only happens for recent saves without a source.
+
+ if (this.props.isRecentSave && !this.props.rawSource && !this.props.source) {
+ img = /*#__PURE__*/external_React_default().createElement(PlaceholderImage, {
+ urlKey: this.props.url,
+ titleKey: this.props.title
+ });
+ } else {
+ img = /*#__PURE__*/external_React_default().createElement("div", {
+ className: "broken-image"
+ });
+ }
+ }
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("picture", {
+ className: classNames
+ }, img);
+ }
+
+ onOptimizedImageError() {
+ // This will trigger a re-render and the unoptimized 450px image will be used as a fallback
+ this.setState({
+ optimizedImageFailed: true
+ });
+ }
+
+ onNonOptimizedImageError() {
+ this.setState({
+ nonOptimizedImageFailed: true
+ });
+ }
+
+ onLoad() {
+ this.setState({
+ isLoaded: true
+ });
+ }
+
+}
+DSImage.defaultProps = {
+ source: null,
+ // The current source style from Pocket API (always 450px)
+ rawSource: null,
+ // Unadulterated image URL to filter through Thumbor
+ extraClassNames: null,
+ // Additional classnames to append to component
+ optimize: true,
+ // Measure parent container to request exact sizes
+ alt_text: null,
+ windowObj: window,
+ // Added to support unit tests
+ sizes: []
+};
+;// CONCATENATED MODULE: ./content-src/components/ContextMenu/ContextMenu.jsx
+/* 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/. */
+
+
+class ContextMenu extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.hideContext = this.hideContext.bind(this);
+ this.onShow = this.onShow.bind(this);
+ this.onClick = this.onClick.bind(this);
+ }
+
+ hideContext() {
+ this.props.onUpdate(false);
+ }
+
+ onShow() {
+ if (this.props.onShow) {
+ this.props.onShow();
+ }
+ }
+
+ componentDidMount() {
+ this.onShow();
+ setTimeout(() => {
+ __webpack_require__.g.addEventListener("click", this.hideContext);
+ }, 0);
+ }
+
+ componentWillUnmount() {
+ __webpack_require__.g.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() {
+ // Disabling focus on the menu span allows the first tab to focus on the first menu item instead of the wrapper.
+ return (
+ /*#__PURE__*/
+ // eslint-disable-next-line jsx-a11y/interactive-supports-focus
+ external_React_default().createElement("span", {
+ className: "context-menu"
+ }, /*#__PURE__*/external_React_default().createElement("ul", {
+ role: "menu",
+ onClick: this.onClick,
+ onKeyDown: this.onClick,
+ className: "context-menu-list"
+ }, this.props.options.map((option, i) => option.type === "separator" ? /*#__PURE__*/external_React_default().createElement("li", {
+ key: i,
+ className: "separator",
+ role: "separator"
+ }) : option.type !== "empty" && /*#__PURE__*/external_React_default().createElement(ContextMenuItem, {
+ key: i,
+ option: option,
+ hideContext: this.hideContext,
+ keyboardAccess: this.props.keyboardAccess
+ }))))
+ );
+ }
+
+}
+class _ContextMenuItem extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onClick = this.onClick.bind(this);
+ this.onKeyDown = this.onKeyDown.bind(this);
+ this.onKeyUp = this.onKeyUp.bind(this);
+ this.focusFirst = this.focusFirst.bind(this);
+ }
+
+ onClick(event) {
+ this.props.hideContext();
+ this.props.option.onClick(event);
+ } // Focus the first menu item if the menu was accessed via the keyboard.
+
+
+ focusFirst(button) {
+ if (this.props.keyboardAccess && button) {
+ button.focus();
+ }
+ } // This selects the correct node based on the key pressed
+
+
+ focusSibling(target, key) {
+ const parent = target.parentNode;
+ const closestSiblingSelector = key === "ArrowUp" ? "previousSibling" : "nextSibling";
+
+ if (!parent[closestSiblingSelector]) {
+ return;
+ }
+
+ if (parent[closestSiblingSelector].firstElementChild) {
+ parent[closestSiblingSelector].firstElementChild.focus();
+ } else {
+ parent[closestSiblingSelector][closestSiblingSelector].firstElementChild.focus();
+ }
+ }
+
+ 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 "ArrowUp":
+ case "ArrowDown":
+ event.preventDefault();
+ this.focusSibling(event.target, event.key);
+ break;
+
+ case "Enter":
+ case " ":
+ event.preventDefault();
+ this.props.hideContext();
+ option.onClick();
+ break;
+
+ case "Escape":
+ this.props.hideContext();
+ break;
+ }
+ } // Prevents the default behavior of spacebar
+ // scrolling the page & auto-triggering buttons.
+
+
+ onKeyUp(event) {
+ if (event.key === " ") {
+ event.preventDefault();
+ }
+ }
+
+ render() {
+ const {
+ option
+ } = this.props;
+ return /*#__PURE__*/external_React_default().createElement("li", {
+ role: "presentation",
+ className: "context-menu-item"
+ }, /*#__PURE__*/external_React_default().createElement("button", {
+ className: option.disabled ? "disabled" : "",
+ role: "menuitem",
+ onClick: this.onClick,
+ onKeyDown: this.onKeyDown,
+ onKeyUp: this.onKeyUp,
+ ref: option.first ? this.focusFirst : null,
+ "aria-haspopup": option.id === "newtab-menu-edit-topsites" ? "dialog" : null
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ "data-l10n-id": option.string_id || option.id
+ })));
+ }
+
+}
+const ContextMenuItem = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ Prefs: state.Prefs
+}))(_ContextMenuItem);
+;// CONCATENATED MODULE: ./content-src/lib/link-menu-options.js
+/* 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 _OpenInPrivateWindow = site => ({
+ id: "newtab-menu-open-new-private-window",
+ icon: "new-window-private",
+ action: actionCreators.OnlyToMain({
+ type: actionTypes.OPEN_PRIVATE_WINDOW,
+ data: {
+ url: site.url,
+ referrer: site.referrer
+ }
+ }),
+ userEvent: "OPEN_PRIVATE_WINDOW"
+});
+/**
+ * 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"
+ }),
+ ShowPrivacyInfo: site => ({
+ id: "newtab-menu-show-privacy-info",
+ icon: "info",
+ action: {
+ type: actionTypes.SHOW_PRIVACY_INFO
+ },
+ userEvent: "SHOW_PRIVACY_INFO"
+ }),
+ AboutSponsored: site => ({
+ id: "newtab-menu-show-privacy-info",
+ icon: "info",
+ action: actionCreators.AlsoToMain({
+ type: actionTypes.ABOUT_SPONSORED_TOP_SITES
+ }),
+ userEvent: "TOPSITE_SPONSOR_INFO"
+ }),
+ RemoveBookmark: site => ({
+ id: "newtab-menu-remove-bookmark",
+ icon: "bookmark-added",
+ action: actionCreators.AlsoToMain({
+ type: actionTypes.DELETE_BOOKMARK_BY_ID,
+ data: site.bookmarkGuid
+ }),
+ userEvent: "BOOKMARK_DELETE"
+ }),
+ AddBookmark: site => ({
+ id: "newtab-menu-bookmark",
+ icon: "bookmark-hollow",
+ action: actionCreators.AlsoToMain({
+ type: actionTypes.BOOKMARK_URL,
+ data: {
+ url: site.url,
+ title: site.title,
+ type: site.type
+ }
+ }),
+ userEvent: "BOOKMARK_ADD"
+ }),
+ OpenInNewWindow: site => ({
+ id: "newtab-menu-open-new-window",
+ icon: "new-window",
+ action: actionCreators.AlsoToMain({
+ type: actionTypes.OPEN_NEW_WINDOW,
+ data: {
+ referrer: site.referrer,
+ typedBonus: site.typedBonus,
+ url: site.url,
+ sponsored_tile_id: site.sponsored_tile_id
+ }
+ }),
+ userEvent: "OPEN_NEW_WINDOW"
+ }),
+ // This blocks the url for regular stories,
+ // but also sends a message to DiscoveryStream with flight_id.
+ // If DiscoveryStream sees this message for a flight_id
+ // it also blocks it on the flight_id.
+ BlockUrl: (site, index, eventSource) => {
+ return LinkMenuOptions.BlockUrls([site], index, eventSource);
+ },
+ // Same as BlockUrl, cept can work on an array of sites.
+ BlockUrls: (tiles, pos, eventSource) => ({
+ id: "newtab-menu-dismiss",
+ icon: "dismiss",
+ action: actionCreators.AlsoToMain({
+ type: actionTypes.BLOCK_URL,
+ data: tiles.map(site => ({
+ url: site.original_url || site.open_url || site.url,
+ // pocket_id is only for pocket stories being in highlights, and then dismissed.
+ pocket_id: site.pocket_id,
+ // used by PlacesFeed and TopSitesFeed for sponsored top sites blocking.
+ isSponsoredTopSite: site.sponsored_position,
+ ...(site.flight_id ? {
+ flight_id: site.flight_id
+ } : {})
+ }))
+ }),
+ impression: actionCreators.ImpressionStats({
+ source: eventSource,
+ block: 0,
+ tiles: tiles.map((site, index) => ({
+ id: site.guid,
+ pos: pos + index,
+ ...(site.shim && site.shim.delete ? {
+ shim: site.shim.delete
+ } : {})
+ }))
+ }),
+ 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: "newtab-menu-dismiss",
+ icon: "dismiss",
+ action: actionCreators.WebExtEvent(actionTypes.WEBEXT_DISMISS, {
+ source: eventSource,
+ url: site.url,
+ action_position: index
+ })
+ }),
+ DeleteUrl: (site, index, eventSource, isEnabled, siteInfo) => ({
+ id: "newtab-menu-delete-history",
+ icon: "delete",
+ action: {
+ type: actionTypes.DIALOG_OPEN,
+ data: {
+ onConfirm: [actionCreators.AlsoToMain({
+ type: actionTypes.DELETE_HISTORY_URL,
+ data: {
+ url: site.url,
+ pocket_id: site.pocket_id,
+ forceBlock: site.bookmarkGuid
+ }
+ }), actionCreators.UserEvent(Object.assign({
+ event: "DELETE",
+ source: eventSource,
+ action_position: index
+ }, siteInfo))],
+ eventSource,
+ body_string_id: ["newtab-confirm-delete-history-p1", "newtab-confirm-delete-history-p2"],
+ confirm_button_string_id: "newtab-topsites-delete-history-button",
+ cancel_button_string_id: "newtab-topsites-cancel-button",
+ icon: "modal-delete"
+ }
+ },
+ userEvent: "DIALOG_OPEN"
+ }),
+ ShowFile: site => ({
+ id: "newtab-menu-show-file",
+ icon: "search",
+ action: actionCreators.OnlyToMain({
+ type: actionTypes.SHOW_DOWNLOAD_FILE,
+ data: {
+ url: site.url
+ }
+ })
+ }),
+ OpenFile: site => ({
+ id: "newtab-menu-open-file",
+ icon: "open-file",
+ action: actionCreators.OnlyToMain({
+ type: actionTypes.OPEN_DOWNLOAD_FILE,
+ data: {
+ url: site.url
+ }
+ })
+ }),
+ CopyDownloadLink: site => ({
+ id: "newtab-menu-copy-download-link",
+ icon: "copy",
+ action: actionCreators.OnlyToMain({
+ type: actionTypes.COPY_DOWNLOAD_LINK,
+ data: {
+ url: site.url
+ }
+ })
+ }),
+ GoToDownloadPage: site => ({
+ id: "newtab-menu-go-to-download-page",
+ icon: "download",
+ action: actionCreators.OnlyToMain({
+ type: actionTypes.OPEN_LINK,
+ data: {
+ url: site.referrer
+ }
+ }),
+ disabled: !site.referrer
+ }),
+ RemoveDownload: site => ({
+ id: "newtab-menu-remove-download",
+ icon: "delete",
+ action: actionCreators.OnlyToMain({
+ type: actionTypes.REMOVE_DOWNLOAD_FILE,
+ data: {
+ url: site.url
+ }
+ })
+ }),
+ PinTopSite: (site, index) => ({
+ id: "newtab-menu-pin",
+ icon: "pin",
+ action: actionCreators.AlsoToMain({
+ type: actionTypes.TOP_SITES_PIN,
+ data: {
+ site,
+ index
+ }
+ }),
+ userEvent: "PIN"
+ }),
+ UnpinTopSite: site => ({
+ id: "newtab-menu-unpin",
+ icon: "unpin",
+ action: actionCreators.AlsoToMain({
+ type: actionTypes.TOP_SITES_UNPIN,
+ data: {
+ site: {
+ url: site.url
+ }
+ }
+ }),
+ userEvent: "UNPIN"
+ }),
+ SaveToPocket: (site, index, eventSource = "CARDGRID") => ({
+ id: "newtab-menu-save-to-pocket",
+ icon: "pocket-save",
+ action: actionCreators.AlsoToMain({
+ type: actionTypes.SAVE_TO_POCKET,
+ data: {
+ site: {
+ url: site.url,
+ title: site.title
+ }
+ }
+ }),
+ impression: actionCreators.ImpressionStats({
+ source: eventSource,
+ pocket: 0,
+ tiles: [{
+ id: site.guid,
+ pos: index,
+ ...(site.shim && site.shim.save ? {
+ shim: site.shim.save
+ } : {})
+ }]
+ }),
+ userEvent: "SAVE_TO_POCKET"
+ }),
+ DeleteFromPocket: site => ({
+ id: "newtab-menu-delete-pocket",
+ icon: "pocket-delete",
+ action: actionCreators.AlsoToMain({
+ type: actionTypes.DELETE_FROM_POCKET,
+ data: {
+ pocket_id: site.pocket_id
+ }
+ }),
+ userEvent: "DELETE_FROM_POCKET"
+ }),
+ ArchiveFromPocket: site => ({
+ id: "newtab-menu-archive-pocket",
+ icon: "pocket-archive",
+ action: actionCreators.AlsoToMain({
+ type: actionTypes.ARCHIVE_FROM_POCKET,
+ data: {
+ pocket_id: site.pocket_id
+ }
+ }),
+ userEvent: "ARCHIVE_FROM_POCKET"
+ }),
+ EditTopSite: (site, index) => ({
+ id: "newtab-menu-edit-topsites",
+ icon: "edit",
+ action: {
+ type: 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, source) => site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.SaveToPocket(site, index, source),
+ CheckBookmarkOrArchive: site => site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.CheckBookmark(site),
+ CheckArchiveFromPocket: site => site.pocket_id ? LinkMenuOptions.ArchiveFromPocket(site) : LinkMenuOptions.EmptyItem(),
+ CheckDeleteFromPocket: site => site.pocket_id ? LinkMenuOptions.DeleteFromPocket(site) : LinkMenuOptions.EmptyItem(),
+ OpenInPrivateWindow: (site, index, eventSource, isEnabled) => isEnabled ? _OpenInPrivateWindow(site) : LinkMenuOptions.EmptyItem()
+};
+;// CONCATENATED MODULE: ./content-src/components/LinkMenu/LinkMenu.jsx
+/* 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 DEFAULT_SITE_MENU_OPTIONS = ["CheckPinTopSite", "EditTopSite", "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl"];
+class _LinkMenu extends (external_React_default()).PureComponent {
+ getOptions() {
+ const {
+ props
+ } = this;
+ const {
+ site,
+ index,
+ source,
+ isPrivateBrowsingEnabled,
+ siteInfo,
+ platform,
+ userEvent = actionCreators.UserEvent
+ } = props; // Handle special case of default site
+
+ const propOptions = site.isDefault && !site.searchTopSite && !site.sponsored_position ? DEFAULT_SITE_MENU_OPTIONS : props.options;
+ const options = propOptions.map(o => LinkMenuOptions[o](site, index, source, isPrivateBrowsingEnabled, siteInfo, platform)).map(option => {
+ const {
+ action,
+ impression,
+ id,
+ type,
+ userEvent: eventName
+ } = option;
+
+ if (!type && id) {
+ option.onClick = (event = {}) => {
+ const {
+ ctrlKey,
+ metaKey,
+ shiftKey,
+ button
+ } = event; // Only send along event info if there's something non-default to send
+
+ if (ctrlKey || metaKey || shiftKey || button === 1) {
+ action.data = Object.assign({
+ event: {
+ ctrlKey,
+ metaKey,
+ shiftKey,
+ button
+ }
+ }, action.data);
+ }
+
+ props.dispatch(action);
+
+ if (eventName) {
+ const userEventData = Object.assign({
+ event: eventName,
+ source,
+ action_position: index,
+ value: {
+ card_type: site.flight_id ? "spoc" : "organic"
+ }
+ }, siteInfo);
+ props.dispatch(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 /*#__PURE__*/external_React_default().createElement(ContextMenu, {
+ onUpdate: this.props.onUpdate,
+ onShow: this.props.onShow,
+ options: this.getOptions(),
+ keyboardAccess: this.props.keyboardAccess
+ });
+ }
+
+}
+
+const getState = state => ({
+ isPrivateBrowsingEnabled: state.Prefs.values.isPrivateBrowsingEnabled,
+ platform: state.Prefs.values.platform
+});
+
+const LinkMenu = (0,external_ReactRedux_namespaceObject.connect)(getState)(_LinkMenu);
+;// CONCATENATED MODULE: ./content-src/components/ContextMenu/ContextMenuButton.jsx
+/* 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/. */
+
+class ContextMenuButton extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.state = {
+ showContextMenu: false,
+ contextMenuKeyboard: false
+ };
+ this.onClick = this.onClick.bind(this);
+ this.onKeyDown = this.onKeyDown.bind(this);
+ this.onUpdate = this.onUpdate.bind(this);
+ }
+
+ openContextMenu(isKeyBoard, event) {
+ if (this.props.onUpdate) {
+ this.props.onUpdate(true);
+ }
+
+ this.setState({
+ showContextMenu: true,
+ contextMenuKeyboard: isKeyBoard
+ });
+ }
+
+ onClick(event) {
+ event.preventDefault();
+ this.openContextMenu(false, event);
+ }
+
+ onKeyDown(event) {
+ if (event.key === "Enter" || event.key === " ") {
+ event.preventDefault();
+ this.openContextMenu(true, event);
+ }
+ }
+
+ onUpdate(showContextMenu) {
+ if (this.props.onUpdate) {
+ this.props.onUpdate(showContextMenu);
+ }
+
+ this.setState({
+ showContextMenu
+ });
+ }
+
+ render() {
+ const {
+ tooltipArgs,
+ tooltip,
+ children,
+ refFunction
+ } = this.props;
+ const {
+ showContextMenu,
+ contextMenuKeyboard
+ } = this.state;
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("button", {
+ "aria-haspopup": "true",
+ "data-l10n-id": tooltip,
+ "data-l10n-args": tooltipArgs ? JSON.stringify(tooltipArgs) : null,
+ className: "context-menu-button icon",
+ onKeyDown: this.onKeyDown,
+ onClick: this.onClick,
+ ref: refFunction
+ }), showContextMenu ? /*#__PURE__*/external_React_default().cloneElement(children, {
+ keyboardAccess: contextMenuKeyboard,
+ onUpdate: this.onUpdate
+ }) : null);
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSLinkMenu/DSLinkMenu.jsx
+/* 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/. */
+
+
+
+
+class DSLinkMenu extends (external_React_default()).PureComponent {
+ render() {
+ const {
+ index,
+ dispatch
+ } = this.props;
+ let pocketMenuOptions = [];
+ let TOP_STORIES_CONTEXT_MENU_OPTIONS = ["OpenInNewWindow", "OpenInPrivateWindow"];
+
+ if (!this.props.isRecentSave) {
+ if (this.props.pocket_button_enabled) {
+ pocketMenuOptions = this.props.saveToPocketCard ? ["CheckDeleteFromPocket"] : ["CheckSavedToPocket"];
+ }
+
+ TOP_STORIES_CONTEXT_MENU_OPTIONS = ["CheckBookmark", "CheckArchiveFromPocket", ...pocketMenuOptions, "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl", ...(this.props.showPrivacyInfo ? ["ShowPrivacyInfo"] : [])];
+ }
+
+ const type = this.props.type || "DISCOVERY_STREAM";
+ const title = this.props.title || this.props.source;
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "context-menu-position-container"
+ }, /*#__PURE__*/external_React_default().createElement(ContextMenuButton, {
+ tooltip: "newtab-menu-content-tooltip",
+ tooltipArgs: {
+ title
+ },
+ onUpdate: this.props.onMenuUpdate
+ }, /*#__PURE__*/external_React_default().createElement(LinkMenu, {
+ dispatch: dispatch,
+ index: index,
+ source: type.toUpperCase(),
+ onShow: this.props.onMenuShow,
+ options: TOP_STORIES_CONTEXT_MENU_OPTIONS,
+ shouldSendImpressionStats: true,
+ userEvent: actionCreators.DiscoveryStreamUserEvent,
+ site: {
+ referrer: "https://getpocket.com/recommendations",
+ title: this.props.title,
+ type: this.props.type,
+ url: this.props.url,
+ guid: this.props.id,
+ pocket_id: this.props.pocket_id,
+ shim: this.props.shim,
+ bookmarkGuid: this.props.bookmarkGuid,
+ flight_id: this.props.flightId
+ }
+ })));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/TopSites/TopSitesConstants.js
+/* 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_SOURCE = "TOP_SITES";
+const TOP_SITES_CONTEXT_MENU_OPTIONS = ["CheckPinTopSite", "EditTopSite", "Separator", "OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl", "DeleteUrl"];
+const TOP_SITES_SPOC_CONTEXT_MENU_OPTIONS = ["OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl", "ShowPrivacyInfo"];
+const TOP_SITES_SPONSORED_POSITION_CONTEXT_MENU_OPTIONS = ["OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl", "AboutSponsored"]; // the special top site for search shortcut experiment can only have the option to unpin (which removes) the topsite
+
+const TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS = ["CheckPinTopSite", "Separator", "BlockUrl"]; // 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
+
+const MIN_SMALL_FAVICON_SIZE = 16;
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamImpressionStats/ImpressionStats.jsx
+/* 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 ImpressionStats_VISIBLE = "visible";
+const ImpressionStats_VISIBILITY_CHANGE_EVENT = "visibilitychange"; // Per analytical requirement, we set the minimal intersection ratio to
+// 0.5, and an impression is identified when the wrapped item has at least
+// 50% visibility.
+//
+// This constant is exported for unit test
+
+const INTERSECTION_RATIO = 0.5;
+/**
+ * Impression wrapper for Discovery Stream related React components.
+ *
+ * It makses use of the Intersection Observer API to detect the visibility,
+ * and relies on page visibility to ensure the impression is reported
+ * only when the component is visible on the page.
+ *
+ * Note:
+ * * This wrapper used to be used either at the individual card level,
+ * or by the card container components.
+ * It is now only used for individual card level.
+ * * Each impression will be sent only once as soon as the desired
+ * visibility is detected
+ * * Batching is not yet implemented, hence it might send multiple
+ * impression pings separately
+ */
+
+class ImpressionStats_ImpressionStats extends (external_React_default()).PureComponent {
+ // This checks if the given cards are the same as those in the last impression ping.
+ // If so, it should not send the same impression ping again.
+ _needsImpressionStats(cards) {
+ if (!this.impressionCardGuids || this.impressionCardGuids.length !== cards.length) {
+ return true;
+ }
+
+ for (let i = 0; i < cards.length; i++) {
+ if (cards[i].id !== this.impressionCardGuids[i]) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ _dispatchImpressionStats() {
+ const {
+ props
+ } = this;
+ const cards = props.rows;
+
+ if (this.props.flightId) {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.DISCOVERY_STREAM_SPOC_IMPRESSION,
+ data: {
+ flightId: this.props.flightId
+ }
+ })); // Record sponsored topsites impressions if the source is `TOP_SITES_SOURCE`.
+
+ if (this.props.source === TOP_SITES_SOURCE) {
+ for (const card of cards) {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.TOP_SITES_SPONSORED_IMPRESSION_STATS,
+ data: {
+ type: "impression",
+ tile_id: card.id,
+ source: "newtab",
+ advertiser: card.advertiser,
+ // Keep the 0-based position, can be adjusted by the telemetry
+ // sender if necessary.
+ position: card.pos
+ }
+ }));
+ }
+ }
+ }
+
+ if (this._needsImpressionStats(cards)) {
+ props.dispatch(actionCreators.DiscoveryStreamImpressionStats({
+ source: props.source.toUpperCase(),
+ window_inner_width: window.innerWidth,
+ window_inner_height: window.innerHeight,
+ tiles: cards.map(link => ({
+ id: link.id,
+ pos: link.pos,
+ type: this.props.flightId ? "spoc" : "organic",
+ ...(link.shim ? {
+ shim: link.shim
+ } : {})
+ }))
+ }));
+ this.impressionCardGuids = cards.map(link => link.id);
+ }
+ } // This checks if the given cards are the same as those in the last loaded content ping.
+ // If so, it should not send the same loaded content ping again.
+
+
+ _needsLoadedContent(cards) {
+ if (!this.loadedContentGuids || this.loadedContentGuids.length !== cards.length) {
+ return true;
+ }
+
+ for (let i = 0; i < cards.length; i++) {
+ if (cards[i].id !== this.loadedContentGuids[i]) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ _dispatchLoadedContent() {
+ const {
+ props
+ } = this;
+ const cards = props.rows;
+
+ if (this._needsLoadedContent(cards)) {
+ props.dispatch(actionCreators.DiscoveryStreamLoadedContent({
+ source: props.source.toUpperCase(),
+ tiles: cards.map(link => ({
+ id: link.id,
+ pos: link.pos
+ }))
+ }));
+ this.loadedContentGuids = cards.map(link => link.id);
+ }
+ }
+
+ setImpressionObserverOrAddListener() {
+ const {
+ props
+ } = this;
+
+ if (!props.dispatch) {
+ return;
+ }
+
+ if (props.document.visibilityState === ImpressionStats_VISIBLE) {
+ // Send the loaded content ping once the page is visible.
+ this._dispatchLoadedContent();
+
+ this.setImpressionObserver();
+ } else {
+ // We should only ever send the latest impression stats ping, so remove any
+ // older listeners.
+ if (this._onVisibilityChange) {
+ props.document.removeEventListener(ImpressionStats_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+
+ this._onVisibilityChange = () => {
+ if (props.document.visibilityState === ImpressionStats_VISIBLE) {
+ // Send the loaded content ping once the page is visible.
+ this._dispatchLoadedContent();
+
+ this.setImpressionObserver();
+ props.document.removeEventListener(ImpressionStats_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ };
+
+ props.document.addEventListener(ImpressionStats_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ }
+ /**
+ * Set an impression observer for the wrapped component. It makes use of
+ * the Intersection Observer API to detect if the wrapped component is
+ * visible with a desired ratio, and only sends impression if that's the case.
+ *
+ * See more details about Intersection Observer API at:
+ * https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
+ */
+
+
+ setImpressionObserver() {
+ const {
+ props
+ } = this;
+
+ if (!props.rows.length) {
+ return;
+ }
+
+ this._handleIntersect = entries => {
+ if (entries.some(entry => entry.isIntersecting && entry.intersectionRatio >= INTERSECTION_RATIO)) {
+ this._dispatchImpressionStats();
+
+ this.impressionObserver.unobserve(this.refs.impression);
+ }
+ };
+
+ const options = {
+ threshold: INTERSECTION_RATIO
+ };
+ this.impressionObserver = new props.IntersectionObserver(this._handleIntersect, options);
+ this.impressionObserver.observe(this.refs.impression);
+ }
+
+ componentDidMount() {
+ if (this.props.rows.length) {
+ this.setImpressionObserverOrAddListener();
+ }
+ }
+
+ componentWillUnmount() {
+ if (this._handleIntersect && this.impressionObserver) {
+ this.impressionObserver.unobserve(this.refs.impression);
+ }
+
+ if (this._onVisibilityChange) {
+ this.props.document.removeEventListener(ImpressionStats_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ ref: "impression",
+ className: "impression-observer"
+ }, this.props.children);
+ }
+
+}
+ImpressionStats_ImpressionStats.defaultProps = {
+ IntersectionObserver: __webpack_require__.g.IntersectionObserver,
+ document: __webpack_require__.g.document,
+ rows: [],
+ source: ""
+};
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/SafeAnchor/SafeAnchor.jsx
+/* 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/. */
+
+
+class SafeAnchor extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onClick = this.onClick.bind(this);
+ }
+
+ onClick(event) {
+ // Use dispatch instead of normal link click behavior to include referrer
+ if (this.props.dispatch) {
+ event.preventDefault();
+ const {
+ altKey,
+ button,
+ ctrlKey,
+ metaKey,
+ shiftKey
+ } = event;
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.OPEN_LINK,
+ data: {
+ event: {
+ altKey,
+ button,
+ ctrlKey,
+ metaKey,
+ shiftKey
+ },
+ referrer: "https://getpocket.com/recommendations",
+ // Use the anchor's url, which could have been cleaned up
+ url: event.currentTarget.href
+ }
+ }));
+ } // Propagate event if there's a handler
+
+
+ if (this.props.onLinkClick) {
+ this.props.onLinkClick(event);
+ }
+ }
+
+ safeURI(url) {
+ let protocol = null;
+
+ try {
+ protocol = new URL(url).protocol;
+ } catch (e) {
+ return "";
+ }
+
+ const isAllowed = ["http:", "https:"].includes(protocol);
+
+ if (!isAllowed) {
+ console.warn(`${url} is not allowed for anchor targets.`); // eslint-disable-line no-console
+
+ return "";
+ }
+
+ return url;
+ }
+
+ render() {
+ const {
+ url,
+ className
+ } = this.props;
+ return /*#__PURE__*/external_React_default().createElement("a", {
+ href: this.safeURI(url),
+ className: className,
+ onClick: this.onClick
+ }, this.props.children);
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/Card/types.js
+/* 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 cardContextTypes = {
+ history: {
+ fluentID: "newtab-label-visited",
+ icon: "history-item"
+ },
+ removedBookmark: {
+ fluentID: "newtab-label-removed-bookmark",
+ icon: "bookmark-removed"
+ },
+ bookmark: {
+ fluentID: "newtab-label-bookmarked",
+ icon: "bookmark-added"
+ },
+ trending: {
+ fluentID: "newtab-label-recommended",
+ icon: "trending"
+ },
+ pocket: {
+ fluentID: "newtab-label-saved",
+ icon: "pocket"
+ },
+ download: {
+ fluentID: "newtab-label-download",
+ icon: "download"
+ }
+};
+;// CONCATENATED MODULE: external "ReactTransitionGroup"
+const external_ReactTransitionGroup_namespaceObject = ReactTransitionGroup;
+;// CONCATENATED MODULE: ./content-src/components/FluentOrText/FluentOrText.jsx
+/* 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/. */
+
+/**
+ * Set text on a child element/component depending on if the message is already
+ * translated plain text or a fluent id with optional args.
+ */
+
+class FluentOrText extends (external_React_default()).PureComponent {
+ render() {
+ // Ensure we have a single child to attach attributes
+ const {
+ children,
+ message
+ } = this.props;
+ const child = children ? external_React_default().Children.only(children) : /*#__PURE__*/external_React_default().createElement("span", null); // For a string message, just use it as the child's text
+
+ let grandChildren = message;
+ let extraProps; // Convert a message object to set desired fluent-dom attributes
+
+ if (typeof message === "object") {
+ const args = message.args || message.values;
+ extraProps = {
+ "data-l10n-args": args && JSON.stringify(args),
+ "data-l10n-id": message.id || message.string_id
+ }; // Use original children potentially with data-l10n-name attributes
+
+ grandChildren = child.props.children;
+ } // Add the message to the child via fluent attributes or text node
+
+
+ return /*#__PURE__*/external_React_default().cloneElement(child, extraProps, grandChildren);
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSContextFooter/DSContextFooter.jsx
+/* 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/. */
+
+
+
+ // Animation time is mirrored in DSContextFooter.scss
+
+const ANIMATION_DURATION = 3000;
+const DSMessageLabel = props => {
+ const {
+ context,
+ context_type
+ } = props;
+ const {
+ icon,
+ fluentID
+ } = cardContextTypes[context_type] || {};
+
+ if (!context && context_type) {
+ return /*#__PURE__*/external_React_default().createElement(external_ReactTransitionGroup_namespaceObject.TransitionGroup, {
+ component: null
+ }, /*#__PURE__*/external_React_default().createElement(external_ReactTransitionGroup_namespaceObject.CSSTransition, {
+ key: fluentID,
+ timeout: ANIMATION_DURATION,
+ classNames: "story-animate"
+ }, /*#__PURE__*/external_React_default().createElement(StatusMessage, {
+ icon: icon,
+ fluentID: fluentID
+ })));
+ }
+
+ return null;
+};
+const StatusMessage = ({
+ icon,
+ fluentID
+}) => /*#__PURE__*/external_React_default().createElement("div", {
+ className: "status-message"
+}, /*#__PURE__*/external_React_default().createElement("span", {
+ "aria-haspopup": "true",
+ className: `story-badge-icon icon icon-${icon}`
+}), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "story-context-label",
+ "data-l10n-id": fluentID
+}));
+const SponsorLabel = ({
+ sponsored_by_override,
+ sponsor,
+ context,
+ newSponsoredLabel
+}) => {
+ const classList = `story-sponsored-label ${newSponsoredLabel || ""} clamp`; // If override is not false or an empty string.
+
+ if (sponsored_by_override) {
+ return /*#__PURE__*/external_React_default().createElement("p", {
+ className: classList
+ }, sponsored_by_override);
+ } else if (sponsored_by_override === "") {
+ // We specifically want to display nothing if the server returns an empty string.
+ // So the server can turn off the label.
+ // This is to support the use cases where the sponsored context is displayed elsewhere.
+ return null;
+ } else if (sponsor) {
+ return /*#__PURE__*/external_React_default().createElement("p", {
+ className: classList
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: {
+ id: `newtab-label-sponsored-by`,
+ values: {
+ sponsor
+ }
+ }
+ }));
+ } else if (context) {
+ return /*#__PURE__*/external_React_default().createElement("p", {
+ className: classList
+ }, context);
+ }
+
+ return null;
+};
+class DSContextFooter extends (external_React_default()).PureComponent {
+ render() {
+ const {
+ context,
+ context_type,
+ sponsor,
+ sponsored_by_override
+ } = this.props;
+ const sponsorLabel = SponsorLabel({
+ sponsored_by_override,
+ sponsor,
+ context
+ });
+ const dsMessageLabel = DSMessageLabel({
+ context,
+ context_type
+ });
+
+ if (sponsorLabel || dsMessageLabel) {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "story-footer"
+ }, sponsorLabel, dsMessageLabel);
+ }
+
+ return null;
+ }
+
+}
+const DSMessageFooter = props => {
+ const {
+ context,
+ context_type,
+ saveToPocketCard
+ } = props;
+ const dsMessageLabel = DSMessageLabel({
+ context,
+ context_type
+ }); // This case is specific and already displayed to the user elsewhere.
+
+ if (!dsMessageLabel || saveToPocketCard && context_type === "pocket") {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "story-footer"
+ }, dsMessageLabel);
+};
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSCard/DSCard.jsx
+/* 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 READING_WPM = 220;
+/**
+ * READ TIME FROM WORD COUNT
+ * @param {int} wordCount number of words in an article
+ * @returns {int} number of words per minute in minutes
+ */
+
+function readTimeFromWordCount(wordCount) {
+ if (!wordCount) return false;
+ return Math.ceil(parseInt(wordCount, 10) / READING_WPM);
+}
+const DSSource = ({
+ source,
+ timeToRead,
+ newSponsoredLabel,
+ context,
+ sponsor,
+ sponsored_by_override
+}) => {
+ // First try to display sponsored label or time to read here.
+ if (newSponsoredLabel) {
+ // If we can display something for spocs, do so.
+ if (sponsored_by_override || sponsor || context) {
+ return /*#__PURE__*/external_React_default().createElement(SponsorLabel, {
+ context: context,
+ sponsor: sponsor,
+ sponsored_by_override: sponsored_by_override,
+ newSponsoredLabel: "new-sponsored-label"
+ });
+ }
+ } // If we are not a spoc, and can display a time to read value.
+
+
+ if (source && timeToRead) {
+ return /*#__PURE__*/external_React_default().createElement("p", {
+ className: "source clamp time-to-read"
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: {
+ id: `newtab-label-source-read-time`,
+ values: {
+ source,
+ timeToRead
+ }
+ }
+ }));
+ } // Otherwise display a default source.
+
+
+ return /*#__PURE__*/external_React_default().createElement("p", {
+ className: "source clamp"
+ }, source);
+};
+const DefaultMeta = ({
+ source,
+ title,
+ excerpt,
+ timeToRead,
+ newSponsoredLabel,
+ context,
+ context_type,
+ sponsor,
+ sponsored_by_override,
+ saveToPocketCard,
+ isRecentSave
+}) => /*#__PURE__*/external_React_default().createElement("div", {
+ className: "meta"
+}, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "info-wrap"
+}, /*#__PURE__*/external_React_default().createElement(DSSource, {
+ source: source,
+ timeToRead: timeToRead,
+ newSponsoredLabel: newSponsoredLabel,
+ context: context,
+ sponsor: sponsor,
+ sponsored_by_override: sponsored_by_override
+}), /*#__PURE__*/external_React_default().createElement("header", {
+ title: title,
+ className: "title clamp"
+}, title), excerpt && /*#__PURE__*/external_React_default().createElement("p", {
+ className: "excerpt clamp"
+}, excerpt)), !newSponsoredLabel && /*#__PURE__*/external_React_default().createElement(DSContextFooter, {
+ context_type: context_type,
+ context: context,
+ sponsor: sponsor,
+ sponsored_by_override: sponsored_by_override
+}), newSponsoredLabel && /*#__PURE__*/external_React_default().createElement(DSMessageFooter, {
+ context_type: context_type,
+ context: null,
+ saveToPocketCard: saveToPocketCard
+}));
+class _DSCard extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onLinkClick = this.onLinkClick.bind(this);
+ this.onSaveClick = this.onSaveClick.bind(this);
+ this.onMenuUpdate = this.onMenuUpdate.bind(this);
+ this.onMenuShow = this.onMenuShow.bind(this);
+
+ this.setContextMenuButtonHostRef = element => {
+ this.contextMenuButtonHostElement = element;
+ };
+
+ this.setPlaceholderRef = element => {
+ this.placeholderElement = element;
+ };
+
+ this.state = {
+ isSeen: false
+ }; // If this is for the about:home startup cache, then we always want
+ // to render the DSCard, regardless of whether or not its been seen.
+
+ if (props.App.isForStartupCache) {
+ this.state.isSeen = true;
+ } // We want to choose the optimal thumbnail for the underlying DSImage, but
+ // want to do it in a performant way. The breakpoints used in the
+ // CSS of the page are, unfortuntely, not easy to retrieve without
+ // causing a style flush. To avoid that, we hardcode them here.
+ //
+ // The values chosen here were the dimensions of the card thumbnails as
+ // computed by getBoundingClientRect() for each type of viewport width
+ // across both high-density and normal-density displays.
+
+
+ this.dsImageSizes = [{
+ mediaMatcher: "(min-width: 1122px)",
+ width: 296,
+ height: 148
+ }, {
+ mediaMatcher: "(min-width: 866px)",
+ width: 218,
+ height: 109
+ }, {
+ mediaMatcher: "(max-width: 610px)",
+ width: 202,
+ height: 101
+ }];
+ }
+
+ onLinkClick(event) {
+ if (this.props.dispatch) {
+ this.props.dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "CLICK",
+ source: this.props.type.toUpperCase(),
+ action_position: this.props.pos,
+ value: {
+ card_type: this.props.flightId ? "spoc" : "organic"
+ }
+ }));
+ this.props.dispatch(actionCreators.ImpressionStats({
+ source: this.props.type.toUpperCase(),
+ click: 0,
+ window_inner_width: this.props.windowObj.innerWidth,
+ window_inner_height: this.props.windowObj.innerHeight,
+ tiles: [{
+ id: this.props.id,
+ pos: this.props.pos,
+ ...(this.props.shim && this.props.shim.click ? {
+ shim: this.props.shim.click
+ } : {}),
+ type: this.props.flightId ? "spoc" : "organic"
+ }]
+ }));
+ }
+ }
+
+ onSaveClick(event) {
+ if (this.props.dispatch) {
+ this.props.dispatch(actionCreators.AlsoToMain({
+ type: actionTypes.SAVE_TO_POCKET,
+ data: {
+ site: {
+ url: this.props.url,
+ title: this.props.title
+ }
+ }
+ }));
+ this.props.dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "SAVE_TO_POCKET",
+ source: "CARDGRID_HOVER",
+ action_position: this.props.pos,
+ value: {
+ card_type: this.props.flightId ? "spoc" : "organic"
+ }
+ }));
+ this.props.dispatch(actionCreators.ImpressionStats({
+ source: "CARDGRID_HOVER",
+ pocket: 0,
+ tiles: [{
+ id: this.props.id,
+ pos: this.props.pos,
+ ...(this.props.shim && this.props.shim.save ? {
+ shim: this.props.shim.save
+ } : {})
+ }]
+ }));
+ }
+ }
+
+ onMenuUpdate(showContextMenu) {
+ if (!showContextMenu) {
+ const dsLinkMenuHostDiv = this.contextMenuButtonHostElement;
+
+ if (dsLinkMenuHostDiv) {
+ dsLinkMenuHostDiv.classList.remove("active", "last-item");
+ }
+ }
+ }
+
+ async onMenuShow() {
+ const dsLinkMenuHostDiv = this.contextMenuButtonHostElement;
+
+ if (dsLinkMenuHostDiv) {
+ // Force translation so we can be sure it's ready before measuring.
+ await this.props.windowObj.document.l10n.translateFragment(dsLinkMenuHostDiv);
+
+ if (this.props.windowObj.scrollMaxX > 0) {
+ dsLinkMenuHostDiv.classList.add("last-item");
+ }
+
+ dsLinkMenuHostDiv.classList.add("active");
+ }
+ }
+
+ onSeen(entries) {
+ if (this.state) {
+ const entry = entries.find(e => e.isIntersecting);
+
+ if (entry) {
+ if (this.placeholderElement) {
+ this.observer.unobserve(this.placeholderElement);
+ } // Stop observing since element has been seen
+
+
+ this.setState({
+ isSeen: true
+ });
+ }
+ }
+ }
+
+ onIdleCallback() {
+ if (!this.state.isSeen) {
+ if (this.observer && this.placeholderElement) {
+ this.observer.unobserve(this.placeholderElement);
+ }
+
+ this.setState({
+ isSeen: true
+ });
+ }
+ }
+
+ componentDidMount() {
+ this.idleCallbackId = this.props.windowObj.requestIdleCallback(this.onIdleCallback.bind(this));
+
+ if (this.placeholderElement) {
+ this.observer = new IntersectionObserver(this.onSeen.bind(this));
+ this.observer.observe(this.placeholderElement);
+ }
+ }
+
+ componentWillUnmount() {
+ // Remove observer on unmount
+ if (this.observer && this.placeholderElement) {
+ this.observer.unobserve(this.placeholderElement);
+ }
+
+ if (this.idleCallbackId) {
+ this.props.windowObj.cancelIdleCallback(this.idleCallbackId);
+ }
+ }
+
+ render() {
+ if (this.props.placeholder || !this.state.isSeen) {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-card placeholder",
+ ref: this.setPlaceholderRef
+ });
+ }
+
+ const {
+ isRecentSave,
+ DiscoveryStream,
+ saveToPocketCard
+ } = this.props;
+ let {
+ source
+ } = this.props;
+
+ if (!source) {
+ try {
+ source = new URL(this.props.url).hostname;
+ } catch (e) {}
+ }
+
+ const {
+ pocketButtonEnabled,
+ hideDescriptions,
+ compactImages,
+ imageGradient,
+ newSponsoredLabel,
+ titleLines = 3,
+ descLines = 3,
+ readTime: displayReadTime
+ } = DiscoveryStream;
+ const excerpt = !hideDescriptions ? this.props.excerpt : "";
+ let timeToRead;
+
+ if (displayReadTime) {
+ timeToRead = this.props.time_to_read || readTimeFromWordCount(this.props.word_count);
+ }
+
+ const compactImagesClassName = compactImages ? `ds-card-compact-image` : ``;
+ const imageGradientClassName = imageGradient ? `ds-card-image-gradient` : ``;
+ const titleLinesName = `ds-card-title-lines-${titleLines}`;
+ const descLinesClassName = `ds-card-desc-lines-${descLines}`;
+
+ let stpButton = () => {
+ return /*#__PURE__*/external_React_default().createElement("button", {
+ className: "card-stp-button",
+ onClick: this.onSaveClick
+ }, this.props.context_type === "pocket" ? /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "story-badge-icon icon icon-pocket"
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ "data-l10n-id": "newtab-pocket-saved"
+ })) : /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "story-badge-icon icon icon-pocket-save"
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ "data-l10n-id": "newtab-pocket-save"
+ })));
+ };
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: `ds-card ${compactImagesClassName} ${imageGradientClassName} ${titleLinesName} ${descLinesClassName}`,
+ ref: this.setContextMenuButtonHostRef
+ }, /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ className: "ds-card-link",
+ dispatch: this.props.dispatch,
+ onLinkClick: !this.props.placeholder ? this.onLinkClick : undefined,
+ url: this.props.url
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "img-wrapper"
+ }, /*#__PURE__*/external_React_default().createElement(DSImage, {
+ extraClassNames: "img",
+ source: this.props.image_src,
+ rawSource: this.props.raw_image_src,
+ sizes: this.dsImageSizes,
+ url: this.props.url,
+ title: this.props.title,
+ isRecentSave: isRecentSave
+ })), /*#__PURE__*/external_React_default().createElement(DefaultMeta, {
+ source: source,
+ title: this.props.title,
+ excerpt: excerpt,
+ newSponsoredLabel: newSponsoredLabel,
+ timeToRead: timeToRead,
+ context: this.props.context,
+ context_type: this.props.context_type,
+ sponsor: this.props.sponsor,
+ sponsored_by_override: this.props.sponsored_by_override,
+ saveToPocketCard: saveToPocketCard
+ }), /*#__PURE__*/external_React_default().createElement(ImpressionStats_ImpressionStats, {
+ flightId: this.props.flightId,
+ rows: [{
+ id: this.props.id,
+ pos: this.props.pos,
+ ...(this.props.shim && this.props.shim.impression ? {
+ shim: this.props.shim.impression
+ } : {})
+ }],
+ dispatch: this.props.dispatch,
+ source: this.props.type
+ })), saveToPocketCard && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "card-stp-button-hover-background"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "card-stp-button-position-wrapper"
+ }, !this.props.flightId && stpButton(), /*#__PURE__*/external_React_default().createElement(DSLinkMenu, {
+ id: this.props.id,
+ index: this.props.pos,
+ dispatch: this.props.dispatch,
+ url: this.props.url,
+ title: this.props.title,
+ source: source,
+ type: this.props.type,
+ pocket_id: this.props.pocket_id,
+ shim: this.props.shim,
+ bookmarkGuid: this.props.bookmarkGuid,
+ flightId: !this.props.is_collection ? this.props.flightId : undefined,
+ showPrivacyInfo: !!this.props.flightId,
+ onMenuUpdate: this.onMenuUpdate,
+ onMenuShow: this.onMenuShow,
+ saveToPocketCard: saveToPocketCard,
+ pocket_button_enabled: pocketButtonEnabled,
+ isRecentSave: isRecentSave
+ }))), !saveToPocketCard && /*#__PURE__*/external_React_default().createElement(DSLinkMenu, {
+ id: this.props.id,
+ index: this.props.pos,
+ dispatch: this.props.dispatch,
+ url: this.props.url,
+ title: this.props.title,
+ source: source,
+ type: this.props.type,
+ pocket_id: this.props.pocket_id,
+ shim: this.props.shim,
+ bookmarkGuid: this.props.bookmarkGuid,
+ flightId: !this.props.is_collection ? this.props.flightId : undefined,
+ showPrivacyInfo: !!this.props.flightId,
+ hostRef: this.contextMenuButtonHostRef,
+ onMenuUpdate: this.onMenuUpdate,
+ onMenuShow: this.onMenuShow,
+ pocket_button_enabled: pocketButtonEnabled,
+ isRecentSave: isRecentSave
+ }));
+ }
+
+}
+_DSCard.defaultProps = {
+ windowObj: window // Added to support unit tests
+
+};
+const DSCard = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ App: state.App,
+ DiscoveryStream: state.DiscoveryStream
+}))(_DSCard);
+const PlaceholderDSCard = props => /*#__PURE__*/external_React_default().createElement(DSCard, {
+ placeholder: true
+});
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSEmptyState/DSEmptyState.jsx
+/* 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/. */
+
+
+class DSEmptyState extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onReset = this.onReset.bind(this);
+ this.state = {};
+ }
+
+ componentWillUnmount() {
+ if (this.timeout) {
+ clearTimeout(this.timeout);
+ }
+ }
+
+ onReset() {
+ if (this.props.dispatch && this.props.feed) {
+ const {
+ feed
+ } = this.props;
+ const {
+ url
+ } = feed;
+ this.props.dispatch({
+ type: actionTypes.DISCOVERY_STREAM_FEED_UPDATE,
+ data: {
+ feed: { ...feed,
+ data: { ...feed.data,
+ status: "waiting"
+ }
+ },
+ url
+ }
+ });
+ this.setState({
+ waiting: true
+ });
+ this.timeout = setTimeout(() => {
+ this.timeout = null;
+ this.setState({
+ waiting: false
+ });
+ }, 300);
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.DISCOVERY_STREAM_RETRY_FEED,
+ data: {
+ feed
+ }
+ }));
+ }
+ }
+
+ renderButton() {
+ if (this.props.status === "waiting" || this.state.waiting) {
+ return /*#__PURE__*/external_React_default().createElement("button", {
+ className: "try-again-button waiting",
+ "data-l10n-id": "newtab-discovery-empty-section-topstories-loading"
+ });
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("button", {
+ className: "try-again-button",
+ onClick: this.onReset,
+ "data-l10n-id": "newtab-discovery-empty-section-topstories-try-again-button"
+ });
+ }
+
+ renderState() {
+ if (this.props.status === "waiting" || this.props.status === "failed") {
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("h2", {
+ "data-l10n-id": "newtab-discovery-empty-section-topstories-timed-out"
+ }), this.renderButton());
+ }
+
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement("h2", {
+ "data-l10n-id": "newtab-discovery-empty-section-topstories-header"
+ }), /*#__PURE__*/external_React_default().createElement("p", {
+ "data-l10n-id": "newtab-discovery-empty-section-topstories-content"
+ }));
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "section-empty-state"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "empty-state-message"
+ }, this.renderState()));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSDismiss/DSDismiss.jsx
+/* 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/. */
+
+class DSDismiss extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onDismissClick = this.onDismissClick.bind(this);
+ this.onHover = this.onHover.bind(this);
+ this.offHover = this.offHover.bind(this);
+ this.state = {
+ hovering: false
+ };
+ }
+
+ onDismissClick() {
+ if (this.props.onDismissClick) {
+ this.props.onDismissClick();
+ }
+ }
+
+ onHover() {
+ this.setState({
+ hovering: true
+ });
+ }
+
+ offHover() {
+ this.setState({
+ hovering: false
+ });
+ }
+
+ render() {
+ let className = `ds-dismiss
+ ${this.state.hovering ? ` hovering` : ``}
+ ${this.props.extraClasses ? ` ${this.props.extraClasses}` : ``}`;
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: className
+ }, this.props.children, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "ds-dismiss-button",
+ "data-l10n-id": "newtab-dismiss-button-tooltip",
+ onHover: this.onHover,
+ onClick: this.onDismissClick,
+ onMouseEnter: this.onHover,
+ onMouseLeave: this.offHover
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-dismiss"
+ })));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/TopicsWidget/TopicsWidget.jsx
+/* 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/. */
+
+
+
+
+
+function _TopicsWidget(props) {
+ const {
+ id,
+ source,
+ position,
+ DiscoveryStream,
+ dispatch
+ } = props;
+ const {
+ utmCampaign,
+ utmContent,
+ utmSource
+ } = DiscoveryStream.experimentData;
+ let queryParams = `?utm_source=${utmSource}`;
+
+ if (utmCampaign && utmContent) {
+ queryParams += `&utm_content=${utmContent}&utm_campaign=${utmCampaign}`;
+ }
+
+ const topics = [{
+ label: "Technology",
+ name: "technology"
+ }, {
+ label: "Science",
+ name: "science"
+ }, {
+ label: "Self-Improvement",
+ name: "self-improvement"
+ }, {
+ label: "Travel",
+ name: "travel"
+ }, {
+ label: "Career",
+ name: "career"
+ }, {
+ label: "Entertainment",
+ name: "entertainment"
+ }, {
+ label: "Food",
+ name: "food"
+ }, {
+ label: "Health",
+ name: "health"
+ }, {
+ label: "Must-Reads",
+ name: "must-reads",
+ url: `https://getpocket.com/collections${queryParams}`
+ }];
+
+ function onLinkClick(topic, positionInCard) {
+ if (dispatch) {
+ dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "CLICK",
+ source,
+ action_position: position,
+ value: {
+ card_type: "topics_widget",
+ topic,
+ ...(positionInCard || positionInCard === 0 ? {
+ position_in_card: positionInCard
+ } : {})
+ }
+ }));
+ dispatch(actionCreators.ImpressionStats({
+ source,
+ click: 0,
+ window_inner_width: props.windowObj.innerWidth,
+ window_inner_height: props.windowObj.innerHeight,
+ tiles: [{
+ id,
+ pos: position
+ }]
+ }));
+ }
+ }
+
+ function mapTopicItem(topic, index) {
+ return /*#__PURE__*/external_React_default().createElement("li", {
+ key: topic.name,
+ className: topic.overflow ? "ds-topics-widget-list-overflow-item" : ""
+ }, /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ url: topic.url || `https://getpocket.com/explore/${topic.name}${queryParams}`,
+ dispatch: dispatch,
+ onLinkClick: () => onLinkClick(topic.name, index)
+ }, topic.label));
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-topics-widget"
+ }, /*#__PURE__*/external_React_default().createElement("header", {
+ className: "ds-topics-widget-header"
+ }, "Popular Topics"), /*#__PURE__*/external_React_default().createElement("hr", null), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-topics-widget-list-container"
+ }, /*#__PURE__*/external_React_default().createElement("ul", null, topics.map(mapTopicItem))), /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ className: "ds-topics-widget-button button primary",
+ url: `https://getpocket.com/${queryParams}`,
+ dispatch: dispatch,
+ onLinkClick: () => onLinkClick("more-topics")
+ }, "More Topics"), /*#__PURE__*/external_React_default().createElement(ImpressionStats_ImpressionStats, {
+ dispatch: dispatch,
+ rows: [{
+ id,
+ pos: position
+ }],
+ source: source
+ }));
+}
+_TopicsWidget.defaultProps = {
+ windowObj: window // Added to support unit tests
+
+};
+const TopicsWidget = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ DiscoveryStream: state.DiscoveryStream
+}))(_TopicsWidget);
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid.jsx
+/* 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 PREF_ONBOARDING_EXPERIENCE_DISMISSED = "discoverystream.onboardingExperience.dismissed";
+const CardGrid_INTERSECTION_RATIO = 0.5;
+const CardGrid_VISIBLE = "visible";
+const CardGrid_VISIBILITY_CHANGE_EVENT = "visibilitychange";
+const WIDGET_IDS = {
+ TOPICS: 1
+};
+function DSSubHeader({
+ children
+}) {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "section-top-bar ds-sub-header"
+ }, /*#__PURE__*/external_React_default().createElement("h3", {
+ className: "section-title-container"
+ }, children));
+}
+function OnboardingExperience({
+ children,
+ dispatch,
+ windowObj = __webpack_require__.g
+}) {
+ const [dismissed, setDismissed] = (0,external_React_namespaceObject.useState)(false);
+ const [maxHeight, setMaxHeight] = (0,external_React_namespaceObject.useState)(null);
+ const heightElement = (0,external_React_namespaceObject.useRef)(null);
+ const onDismissClick = (0,external_React_namespaceObject.useCallback)(() => {
+ // We update this as state and redux.
+ // The state update is for this newtab,
+ // and the redux update is for other tabs, offscreen tabs, and future tabs.
+ // We need the state update for this tab to support the transition.
+ setDismissed(true);
+ dispatch(actionCreators.SetPref(PREF_ONBOARDING_EXPERIENCE_DISMISSED, true));
+ dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "BLOCK",
+ source: "POCKET_ONBOARDING"
+ }));
+ }, [dispatch]);
+ (0,external_React_namespaceObject.useEffect)(() => {
+ const resizeObserver = new windowObj.ResizeObserver(() => {
+ if (heightElement.current) {
+ setMaxHeight(heightElement.current.offsetHeight);
+ }
+ });
+ const options = {
+ threshold: CardGrid_INTERSECTION_RATIO
+ };
+ const intersectionObserver = new windowObj.IntersectionObserver(entries => {
+ if (entries.some(entry => entry.isIntersecting && entry.intersectionRatio >= CardGrid_INTERSECTION_RATIO)) {
+ dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "IMPRESSION",
+ source: "POCKET_ONBOARDING"
+ })); // Once we have observed an impression, we can stop for this instance of newtab.
+
+ intersectionObserver.unobserve(heightElement.current);
+ }
+ }, options);
+
+ const onVisibilityChange = () => {
+ intersectionObserver.observe(heightElement.current);
+ windowObj.document.removeEventListener(CardGrid_VISIBILITY_CHANGE_EVENT, onVisibilityChange);
+ };
+
+ if (heightElement.current) {
+ resizeObserver.observe(heightElement.current); // Check visibility or setup a visibility event to make
+ // sure we don't fire this for off screen pre loaded tabs.
+
+ if (windowObj.document.visibilityState === CardGrid_VISIBLE) {
+ intersectionObserver.observe(heightElement.current);
+ } else {
+ windowObj.document.addEventListener(CardGrid_VISIBILITY_CHANGE_EVENT, onVisibilityChange);
+ }
+
+ setMaxHeight(heightElement.current.offsetHeight);
+ } // Return unmount callback to clean up observers.
+
+
+ return () => {
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
+ intersectionObserver === null || intersectionObserver === void 0 ? void 0 : intersectionObserver.disconnect();
+ windowObj.document.removeEventListener(CardGrid_VISIBILITY_CHANGE_EVENT, onVisibilityChange);
+ };
+ }, [dispatch, windowObj]);
+ const style = {};
+
+ if (dismissed) {
+ style.maxHeight = "0";
+ style.opacity = "0";
+ style.transition = "max-height 0.26s ease, opacity 0.26s ease";
+ } else if (maxHeight) {
+ style.maxHeight = `${maxHeight}px`;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ style: style
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-onboarding-ref",
+ ref: heightElement
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-onboarding-container"
+ }, /*#__PURE__*/external_React_default().createElement(DSDismiss, {
+ onDismissClick: onDismissClick,
+ extraClasses: `ds-onboarding`
+ }, /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("header", null, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-pocket"
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ "data-l10n-id": "newtab-pocket-onboarding-discover"
+ })), /*#__PURE__*/external_React_default().createElement("p", {
+ "data-l10n-id": "newtab-pocket-onboarding-cta"
+ })), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-onboarding-graphic"
+ })))));
+}
+function CardGrid_IntersectionObserver({
+ children,
+ windowObj = window,
+ onIntersecting
+}) {
+ const intersectionElement = (0,external_React_namespaceObject.useRef)(null);
+ (0,external_React_namespaceObject.useEffect)(() => {
+ let observer;
+
+ if (!observer && onIntersecting && intersectionElement.current) {
+ observer = new windowObj.IntersectionObserver(entries => {
+ const entry = entries.find(e => e.isIntersecting);
+
+ if (entry) {
+ // Stop observing since element has been seen
+ if (observer && intersectionElement.current) {
+ observer.unobserve(intersectionElement.current);
+ }
+
+ onIntersecting();
+ }
+ });
+ observer.observe(intersectionElement.current);
+ } // Cleanup
+
+
+ return () => {
+ var _observer;
+
+ return (_observer = observer) === null || _observer === void 0 ? void 0 : _observer.disconnect();
+ };
+ }, [windowObj, onIntersecting]);
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ ref: intersectionElement
+ }, children);
+}
+function RecentSavesContainer({
+ gridClassName = "",
+ dispatch,
+ windowObj = window,
+ items = 3,
+ source = "CARDGRID_RECENT_SAVES"
+}) {
+ const {
+ recentSavesData,
+ isUserLoggedIn,
+ experimentData: {
+ utmCampaign,
+ utmContent,
+ utmSource
+ }
+ } = (0,external_ReactRedux_namespaceObject.useSelector)(state => state.DiscoveryStream);
+ const [visible, setVisible] = (0,external_React_namespaceObject.useState)(false);
+ const onIntersecting = (0,external_React_namespaceObject.useCallback)(() => setVisible(true), []);
+ (0,external_React_namespaceObject.useEffect)(() => {
+ if (visible) {
+ dispatch(actionCreators.AlsoToMain({
+ type: actionTypes.DISCOVERY_STREAM_POCKET_STATE_INIT
+ }));
+ }
+ }, [visible, dispatch]); // The user has not yet scrolled to this section,
+ // so wait before potentially requesting Pocket data.
+
+ if (!visible) {
+ return /*#__PURE__*/external_React_default().createElement(CardGrid_IntersectionObserver, {
+ windowObj: windowObj,
+ onIntersecting: onIntersecting
+ });
+ } // Intersection observer has finished, but we're not yet logged in.
+
+
+ if (visible && !isUserLoggedIn) {
+ return null;
+ }
+
+ let queryParams = `?utm_source=${utmSource}`; // We really only need to add these params to urls we own.
+
+ if (utmCampaign && utmContent) {
+ queryParams += `&utm_content=${utmContent}&utm_campaign=${utmCampaign}`;
+ }
+
+ function renderCard(rec, index) {
+ const url = new URL(rec.url);
+ const urlSearchParams = new URLSearchParams(queryParams);
+
+ if (rec !== null && rec !== void 0 && rec.id && !url.href.match(/getpocket\.com\/read/)) {
+ url.href = `https://getpocket.com/read/${rec.id}`;
+ }
+
+ for (let [key, val] of urlSearchParams.entries()) {
+ url.searchParams.set(key, val);
+ }
+
+ return /*#__PURE__*/external_React_default().createElement(DSCard, {
+ key: `dscard-${(rec === null || rec === void 0 ? void 0 : rec.id) || index}`,
+ id: rec.id,
+ pos: index,
+ type: source,
+ image_src: rec.image_src,
+ raw_image_src: rec.raw_image_src,
+ word_count: rec.word_count,
+ time_to_read: rec.time_to_read,
+ title: rec.title,
+ excerpt: rec.excerpt,
+ url: url.href,
+ source: rec.domain,
+ isRecentSave: true,
+ dispatch: dispatch
+ });
+ }
+
+ function onMyListClicked() {
+ dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "CLICK",
+ source: `${source}_VIEW_LIST`
+ }));
+ }
+
+ const recentSavesCards = []; // We fill the cards with a for loop over an inline map because
+ // we want empty placeholders if there are not enough cards.
+
+ for (let index = 0; index < items; index++) {
+ const recentSave = recentSavesData[index];
+
+ if (!recentSave) {
+ recentSavesCards.push( /*#__PURE__*/external_React_default().createElement(PlaceholderDSCard, {
+ key: `dscard-${index}`
+ }));
+ } else {
+ var _recentSave$domain_me;
+
+ recentSavesCards.push(renderCard({
+ id: recentSave.id,
+ image_src: recentSave.top_image_url,
+ raw_image_src: recentSave.top_image_url,
+ word_count: recentSave.word_count,
+ time_to_read: recentSave.time_to_read,
+ title: recentSave.resolved_title || recentSave.given_title,
+ url: recentSave.resolved_url || recentSave.given_url,
+ domain: (_recentSave$domain_me = recentSave.domain_metadata) === null || _recentSave$domain_me === void 0 ? void 0 : _recentSave$domain_me.name,
+ excerpt: recentSave.excerpt
+ }, index));
+ }
+ } // We are visible and logged in.
+
+
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement(DSSubHeader, null, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "section-title"
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: "Recently Saved to your List"
+ })), /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ onLinkClick: onMyListClicked,
+ className: "section-sub-link",
+ url: `https://getpocket.com/a${queryParams}`
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: "View My List"
+ }))), /*#__PURE__*/external_React_default().createElement("div", {
+ className: `ds-card-grid-recent-saves ${gridClassName}`
+ }, recentSavesCards));
+}
+class _CardGrid extends (external_React_default()).PureComponent {
+ renderCards() {
+ var _widgets$positions, _widgets$data, _essentialReadsCards, _editorsPicksCards;
+
+ const prefs = this.props.Prefs.values;
+ const {
+ items,
+ hybridLayout,
+ hideCardBackground,
+ fourCardLayout,
+ compactGrid,
+ essentialReadsHeader,
+ editorsPicksHeader,
+ onboardingExperience,
+ widgets,
+ recentSavesEnabled,
+ hideDescriptions,
+ DiscoveryStream
+ } = this.props;
+ const {
+ saveToPocketCard
+ } = DiscoveryStream;
+ const showRecentSaves = prefs.showRecentSaves && recentSavesEnabled;
+ const isOnboardingExperienceDismissed = prefs[PREF_ONBOARDING_EXPERIENCE_DISMISSED];
+ const recs = this.props.data.recommendations.slice(0, items);
+ const cards = [];
+ let essentialReadsCards = [];
+ let editorsPicksCards = [];
+
+ for (let index = 0; index < items; index++) {
+ const rec = recs[index];
+ cards.push(!rec || rec.placeholder ? /*#__PURE__*/external_React_default().createElement(PlaceholderDSCard, {
+ key: `dscard-${index}`
+ }) : /*#__PURE__*/external_React_default().createElement(DSCard, {
+ key: `dscard-${rec.id}`,
+ pos: rec.pos,
+ flightId: rec.flight_id,
+ image_src: rec.image_src,
+ raw_image_src: rec.raw_image_src,
+ word_count: rec.word_count,
+ time_to_read: rec.time_to_read,
+ title: rec.title,
+ excerpt: rec.excerpt,
+ url: rec.url,
+ id: rec.id,
+ shim: rec.shim,
+ type: this.props.type,
+ context: rec.context,
+ sponsor: rec.sponsor,
+ sponsored_by_override: rec.sponsored_by_override,
+ dispatch: this.props.dispatch,
+ source: rec.domain,
+ pocket_id: rec.pocket_id,
+ context_type: rec.context_type,
+ bookmarkGuid: rec.bookmarkGuid,
+ is_collection: this.props.is_collection,
+ saveToPocketCard: saveToPocketCard
+ }));
+ }
+
+ if (widgets !== null && widgets !== void 0 && (_widgets$positions = widgets.positions) !== null && _widgets$positions !== void 0 && _widgets$positions.length && widgets !== null && widgets !== void 0 && (_widgets$data = widgets.data) !== null && _widgets$data !== void 0 && _widgets$data.length) {
+ let positionIndex = 0;
+ const source = "CARDGRID_WIDGET";
+
+ for (const widget of widgets.data) {
+ let widgetComponent = null;
+ const position = widgets.positions[positionIndex]; // Stop if we run out of positions to place widgets.
+
+ if (!position) {
+ break;
+ }
+
+ switch (widget === null || widget === void 0 ? void 0 : widget.type) {
+ case "TopicsWidget":
+ widgetComponent = /*#__PURE__*/external_React_default().createElement(TopicsWidget, {
+ position: position.index,
+ dispatch: this.props.dispatch,
+ source: source,
+ id: WIDGET_IDS.TOPICS
+ });
+ break;
+ }
+
+ if (widgetComponent) {
+ // We found a widget, so up the position for next try.
+ positionIndex++; // We replace an existing card with the widget.
+
+ cards.splice(position.index, 1, widgetComponent);
+ }
+ }
+ }
+
+ let moreRecsHeader = ""; // For now this is English only.
+
+ if (showRecentSaves || essentialReadsHeader && editorsPicksHeader) {
+ let spliceAt = 6; // For 4 card row layouts, second row is 8 cards, and regular it is 6 cards.
+
+ if (fourCardLayout) {
+ spliceAt = 8;
+ } // If we have a custom header, ensure the more recs section also has a header.
+
+
+ moreRecsHeader = "More Recommendations"; // Put the first 2 rows into essentialReadsCards.
+
+ essentialReadsCards = [...cards.splice(0, spliceAt)]; // Put the rest into editorsPicksCards.
+
+ if (essentialReadsHeader && editorsPicksHeader) {
+ editorsPicksCards = [...cards.splice(0, cards.length)];
+ }
+ }
+
+ const hideCardBackgroundClass = hideCardBackground ? `ds-card-grid-hide-background` : ``;
+ const fourCardLayoutClass = fourCardLayout ? `ds-card-grid-four-card-variant` : ``;
+ const hideDescriptionsClassName = !hideDescriptions ? `ds-card-grid-include-descriptions` : ``;
+ const compactGridClassName = compactGrid ? `ds-card-grid-compact` : ``;
+ const hybridLayoutClassName = hybridLayout ? `ds-card-grid-hybrid-layout` : ``;
+ const gridClassName = `ds-card-grid ${hybridLayoutClassName} ${hideCardBackgroundClass} ${fourCardLayoutClass} ${hideDescriptionsClassName} ${compactGridClassName}`;
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, !isOnboardingExperienceDismissed && onboardingExperience && /*#__PURE__*/external_React_default().createElement(OnboardingExperience, {
+ dispatch: this.props.dispatch
+ }), ((_essentialReadsCards = essentialReadsCards) === null || _essentialReadsCards === void 0 ? void 0 : _essentialReadsCards.length) > 0 && /*#__PURE__*/external_React_default().createElement("div", {
+ className: gridClassName
+ }, essentialReadsCards), showRecentSaves && /*#__PURE__*/external_React_default().createElement(RecentSavesContainer, {
+ gridClassName: gridClassName,
+ dispatch: this.props.dispatch
+ }), ((_editorsPicksCards = editorsPicksCards) === null || _editorsPicksCards === void 0 ? void 0 : _editorsPicksCards.length) > 0 && /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement(DSSubHeader, null, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "section-title"
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: "Editor\u2019s Picks"
+ }))), /*#__PURE__*/external_React_default().createElement("div", {
+ className: gridClassName
+ }, editorsPicksCards)), (cards === null || cards === void 0 ? void 0 : cards.length) > 0 && /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, moreRecsHeader && /*#__PURE__*/external_React_default().createElement(DSSubHeader, null, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "section-title"
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: moreRecsHeader
+ }))), /*#__PURE__*/external_React_default().createElement("div", {
+ className: gridClassName
+ }, cards)));
+ }
+
+ render() {
+ const {
+ data
+ } = this.props; // Handle a render before feed has been fetched by displaying nothing
+
+ if (!data) {
+ return null;
+ } // Handle the case where a user has dismissed all recommendations
+
+
+ const isEmpty = data.recommendations.length === 0;
+ return /*#__PURE__*/external_React_default().createElement("div", null, this.props.title && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-header"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "title"
+ }, this.props.title), this.props.context && /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: this.props.context
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-context"
+ }))), isEmpty ? /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-card-grid empty"
+ }, /*#__PURE__*/external_React_default().createElement(DSEmptyState, {
+ status: data.status,
+ dispatch: this.props.dispatch,
+ feed: this.props.feed
+ })) : this.renderCards());
+ }
+
+}
+_CardGrid.defaultProps = {
+ items: 4 // Number of stories to display
+
+};
+const CardGrid = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ Prefs: state.Prefs,
+ DiscoveryStream: state.DiscoveryStream
+}))(_CardGrid);
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/CollectionCardGrid/CollectionCardGrid.jsx
+/* 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/. */
+
+
+
+
+
+class CollectionCardGrid extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onDismissClick = this.onDismissClick.bind(this);
+ this.state = {
+ dismissed: false
+ };
+ }
+
+ onDismissClick() {
+ const {
+ data
+ } = this.props;
+
+ if (this.props.dispatch && data && data.spocs && data.spocs.length) {
+ this.setState({
+ dismissed: true
+ });
+ const pos = 0;
+ const source = this.props.type.toUpperCase(); // Grab the available items in the array to dismiss.
+ // This fires a ping for all items available, even if below the fold.
+
+ const spocsData = data.spocs.map(item => ({
+ url: item.url,
+ guid: item.id,
+ shim: item.shim,
+ flight_id: item.flightId
+ }));
+ const blockUrlOption = LinkMenuOptions.BlockUrls(spocsData, pos, source);
+ const {
+ action,
+ impression,
+ userEvent
+ } = blockUrlOption;
+ this.props.dispatch(action);
+ this.props.dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: userEvent,
+ source,
+ action_position: pos
+ }));
+
+ if (impression) {
+ this.props.dispatch(impression);
+ }
+ }
+ }
+
+ render() {
+ const {
+ data,
+ dismissible,
+ pocket_button_enabled
+ } = this.props;
+
+ if (this.state.dismissed || !data || !data.spocs || !data.spocs[0] || // We only display complete collections.
+ data.spocs.length < 3) {
+ return null;
+ }
+
+ const {
+ spocs,
+ placement,
+ feed
+ } = this.props; // spocs.data is spocs state data, and not an array of spocs.
+
+ const {
+ title,
+ context,
+ sponsored_by_override,
+ sponsor
+ } = spocs.data[placement.name] || {}; // Just in case of bad data, don't display a broken collection.
+
+ if (!title) {
+ return null;
+ }
+
+ let sponsoredByMessage = ""; // If override is not false or an empty string.
+
+ if (sponsored_by_override || sponsored_by_override === "") {
+ // We specifically want to display nothing if the server returns an empty string.
+ // So the server can turn off the label.
+ // This is to support the use cases where the sponsored context is displayed elsewhere.
+ sponsoredByMessage = sponsored_by_override;
+ } else if (sponsor) {
+ sponsoredByMessage = {
+ id: `newtab-label-sponsored-by`,
+ values: {
+ sponsor
+ }
+ };
+ } else if (context) {
+ sponsoredByMessage = context;
+ } // Generally a card grid displays recs with spocs already injected.
+ // Normally it doesn't care which rec is a spoc and which isn't,
+ // it just displays content in a grid.
+ // For collections, we're only displaying a list of spocs.
+ // We don't need to tell the card grid that our list of cards are spocs,
+ // it shouldn't need to care. So we just pass our spocs along as recs.
+ // Think of it as injecting all rec positions with spocs.
+ // Consider maybe making recommendations in CardGrid use a more generic name.
+
+
+ const recsData = {
+ recommendations: data.spocs
+ }; // All cards inside of a collection card grid have a slightly different type.
+ // For the case of interactions to the card grid, we use the type "COLLECTIONCARDGRID".
+ // Example, you dismiss the whole collection, we use the type "COLLECTIONCARDGRID".
+ // For interactions inside the card grid, example, you dismiss a single card in the collection,
+ // we use the type "COLLECTIONCARDGRID_CARD".
+
+ const type = `${this.props.type}_card`;
+ const collectionGrid = /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-collection-card-grid"
+ }, /*#__PURE__*/external_React_default().createElement(CardGrid, {
+ pocket_button_enabled: pocket_button_enabled,
+ title: title,
+ context: sponsoredByMessage,
+ data: recsData,
+ feed: feed,
+ type: type,
+ is_collection: true,
+ dispatch: this.props.dispatch,
+ items: this.props.items
+ }));
+
+ if (dismissible) {
+ return /*#__PURE__*/external_React_default().createElement(DSDismiss, {
+ onDismissClick: this.onDismissClick,
+ extraClasses: `ds-dismiss-ds-collection`
+ }, collectionGrid);
+ }
+
+ return collectionGrid;
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/A11yLinkButton/A11yLinkButton.jsx
+function A11yLinkButton_extends() { A11yLinkButton_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; }; return A11yLinkButton_extends.apply(this, arguments); }
+
+/* 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/. */
+
+function A11yLinkButton(props) {
+ // function for merging classes, if necessary
+ let className = "a11y-link-button";
+
+ if (props.className) {
+ className += ` ${props.className}`;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("button", A11yLinkButton_extends({
+ type: "button"
+ }, props, {
+ className: className
+ }), props.children);
+}
+;// CONCATENATED MODULE: ./content-src/components/ErrorBoundary/ErrorBoundary.jsx
+/* 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/. */
+
+
+class ErrorBoundaryFallback extends (external_React_default()).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;
+ } // "A11yLinkButton" to force normal link styling stuff (eg cursor on hover)
+
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: className
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ "data-l10n-id": "newtab-error-fallback-info"
+ }), /*#__PURE__*/external_React_default().createElement("span", null, /*#__PURE__*/external_React_default().createElement(A11yLinkButton, {
+ className: "reload-button",
+ onClick: this.onClick,
+ "data-l10n-id": "newtab-error-fallback-refresh-link"
+ })));
+ }
+
+}
+ErrorBoundaryFallback.defaultProps = {
+ className: "as-error-fallback"
+};
+class ErrorBoundary extends (external_React_default()).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 /*#__PURE__*/external_React_default().createElement(this.props.FallbackComponent, {
+ className: this.props.className
+ });
+ }
+
+}
+ErrorBoundary.defaultProps = {
+ FallbackComponent: ErrorBoundaryFallback
+};
+;// CONCATENATED MODULE: ./content-src/components/CollapsibleSection/CollapsibleSection.jsx
+/* 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/. */
+
+
+
+
+/**
+ * A section that can collapse. As of bug 1710937, it can no longer collapse.
+ * See bug 1727365 for follow-up work to simplify this component.
+ */
+
+class _CollapsibleSection extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onBodyMount = this.onBodyMount.bind(this);
+ this.onMenuButtonMouseEnter = this.onMenuButtonMouseEnter.bind(this);
+ this.onMenuButtonMouseLeave = this.onMenuButtonMouseLeave.bind(this);
+ this.onMenuUpdate = this.onMenuUpdate.bind(this);
+ this.state = {
+ menuButtonHover: false,
+ showContextMenu: false
+ };
+ this.setContextMenuButtonRef = this.setContextMenuButtonRef.bind(this);
+ }
+
+ setContextMenuButtonRef(element) {
+ this.contextMenuButtonRef = element;
+ }
+
+ onBodyMount(node) {
+ this.sectionBody = node;
+ }
+
+ onMenuButtonMouseEnter() {
+ this.setState({
+ menuButtonHover: true
+ });
+ }
+
+ onMenuButtonMouseLeave() {
+ this.setState({
+ menuButtonHover: false
+ });
+ }
+
+ onMenuUpdate(showContextMenu) {
+ this.setState({
+ showContextMenu
+ });
+ }
+
+ render() {
+ const {
+ isAnimating,
+ maxHeight,
+ menuButtonHover,
+ showContextMenu
+ } = this.state;
+ const {
+ id,
+ collapsed,
+ learnMore,
+ title,
+ subTitle
+ } = this.props;
+ const active = menuButtonHover || showContextMenu;
+ let bodyStyle;
+
+ if (isAnimating && !collapsed) {
+ bodyStyle = {
+ maxHeight
+ };
+ } else if (!isAnimating && collapsed) {
+ bodyStyle = {
+ display: "none"
+ };
+ }
+
+ let titleStyle;
+
+ if (this.props.hideTitle) {
+ titleStyle = {
+ visibility: "hidden"
+ };
+ }
+
+ const hasSubtitleClassName = subTitle ? `has-subtitle` : ``;
+ return /*#__PURE__*/external_React_default().createElement("section", {
+ className: `collapsible-section ${this.props.className}${active ? " active" : ""}` // Note: data-section-id is used for web extension api tests in mozilla central
+ ,
+ "data-section-id": id
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "section-top-bar"
+ }, /*#__PURE__*/external_React_default().createElement("h3", {
+ className: `section-title-container ${hasSubtitleClassName}`,
+ style: titleStyle
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "section-title"
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: title
+ })), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "learn-more-link-wrapper"
+ }, learnMore && /*#__PURE__*/external_React_default().createElement("span", {
+ className: "learn-more-link"
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: learnMore.link.message
+ }, /*#__PURE__*/external_React_default().createElement("a", {
+ href: learnMore.link.href
+ })))), subTitle && /*#__PURE__*/external_React_default().createElement("span", {
+ className: "section-sub-title"
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: subTitle
+ })))), /*#__PURE__*/external_React_default().createElement(ErrorBoundary, {
+ className: "section-body-fallback"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ ref: this.onBodyMount,
+ style: bodyStyle
+ }, this.props.children)));
+ }
+
+}
+_CollapsibleSection.defaultProps = {
+ document: __webpack_require__.g.document || {
+ addEventListener: () => {},
+ removeEventListener: () => {},
+ visibilityState: "hidden"
+ }
+};
+const CollapsibleSection = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ Prefs: state.Prefs
+}))(_CollapsibleSection);
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSMessage/DSMessage.jsx
+/* 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/. */
+
+
+
+class DSMessage extends (external_React_default()).PureComponent {
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-message"
+ }, /*#__PURE__*/external_React_default().createElement("header", {
+ className: "title"
+ }, this.props.icon && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "glyph",
+ style: {
+ backgroundImage: `url(${this.props.icon})`
+ }
+ }), this.props.title && /*#__PURE__*/external_React_default().createElement("span", {
+ className: "title-text"
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: this.props.title
+ })), this.props.link_text && this.props.link_url && /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ className: "link",
+ url: this.props.link_url
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: this.props.link_text
+ }))));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/asrouter/components/ModalOverlay/ModalOverlay.jsx
+/* 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/. */
+
+class ModalOverlayWrapper extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onKeyDown = this.onKeyDown.bind(this);
+ } // The intended behaviour is to listen for an escape key
+ // but not for a click; see Bug 1582242
+
+
+ onKeyDown(event) {
+ if (event.key === "Escape") {
+ this.props.onClose(event);
+ }
+ }
+
+ componentWillMount() {
+ this.props.document.addEventListener("keydown", this.onKeyDown);
+ this.props.document.body.classList.add("modal-open");
+ }
+
+ componentWillUnmount() {
+ this.props.document.removeEventListener("keydown", this.onKeyDown);
+ this.props.document.body.classList.remove("modal-open");
+ }
+
+ render() {
+ const {
+ props
+ } = this;
+ let className = props.unstyled ? "" : "modalOverlayInner active";
+
+ if (props.innerClassName) {
+ className += ` ${props.innerClassName}`;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "modalOverlayOuter active",
+ onKeyDown: this.onKeyDown,
+ role: "presentation"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: className,
+ "aria-labelledby": props.headerId,
+ id: props.id,
+ role: "dialog"
+ }, props.children));
+ }
+
+}
+ModalOverlayWrapper.defaultProps = {
+ document: __webpack_require__.g.document
+};
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSPrivacyModal/DSPrivacyModal.jsx
+/* 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/. */
+
+
+
+class DSPrivacyModal extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.closeModal = this.closeModal.bind(this);
+ this.onLearnLinkClick = this.onLearnLinkClick.bind(this);
+ this.onManageLinkClick = this.onManageLinkClick.bind(this);
+ }
+
+ onLearnLinkClick(event) {
+ this.props.dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "CLICK_PRIVACY_INFO",
+ source: "DS_PRIVACY_MODAL"
+ }));
+ }
+
+ onManageLinkClick(event) {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.SETTINGS_OPEN
+ }));
+ }
+
+ closeModal() {
+ this.props.dispatch({
+ type: `HIDE_PRIVACY_INFO`,
+ data: {}
+ });
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement(ModalOverlayWrapper, {
+ onClose: this.closeModal,
+ innerClassName: "ds-privacy-modal"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "privacy-notice"
+ }, /*#__PURE__*/external_React_default().createElement("h3", {
+ "data-l10n-id": "newtab-privacy-modal-header"
+ }), /*#__PURE__*/external_React_default().createElement("p", {
+ "data-l10n-id": "newtab-privacy-modal-paragraph-2"
+ }), /*#__PURE__*/external_React_default().createElement("a", {
+ className: "modal-link modal-link-privacy",
+ "data-l10n-id": "newtab-privacy-modal-link",
+ onClick: this.onLearnLinkClick,
+ href: "https://help.getpocket.com/article/1142-firefox-new-tab-recommendations-faq"
+ }), /*#__PURE__*/external_React_default().createElement("button", {
+ className: "modal-link modal-link-manage",
+ "data-l10n-id": "newtab-privacy-modal-button-manage",
+ onClick: this.onManageLinkClick
+ })), /*#__PURE__*/external_React_default().createElement("section", {
+ className: "actions"
+ }, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "done",
+ type: "submit",
+ onClick: this.closeModal,
+ "data-l10n-id": "newtab-privacy-modal-button-done"
+ })));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSSignup/DSSignup.jsx
+/* 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/. */
+
+
+
+
+
+
+class DSSignup extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.state = {
+ active: false,
+ lastItem: false
+ };
+ this.onMenuButtonUpdate = this.onMenuButtonUpdate.bind(this);
+ this.onLinkClick = this.onLinkClick.bind(this);
+ this.onMenuShow = this.onMenuShow.bind(this);
+ }
+
+ onMenuButtonUpdate(showContextMenu) {
+ if (!showContextMenu) {
+ this.setState({
+ active: false,
+ lastItem: false
+ });
+ }
+ }
+
+ nextAnimationFrame() {
+ return new Promise(resolve => this.props.windowObj.requestAnimationFrame(resolve));
+ }
+
+ async onMenuShow() {
+ let {
+ lastItem
+ } = this.state; // Wait for next frame before computing scrollMaxX to allow fluent menu strings to be visible
+
+ await this.nextAnimationFrame();
+
+ if (this.props.windowObj.scrollMaxX > 0) {
+ lastItem = true;
+ }
+
+ this.setState({
+ active: true,
+ lastItem
+ });
+ }
+
+ onLinkClick() {
+ const {
+ data
+ } = this.props;
+
+ if (this.props.dispatch && data && data.spocs && data.spocs.length) {
+ const source = this.props.type.toUpperCase(); // Grab the first item in the array as we only have 1 spoc position.
+
+ const [spoc] = data.spocs;
+ this.props.dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "CLICK",
+ source,
+ action_position: 0
+ }));
+ this.props.dispatch(actionCreators.ImpressionStats({
+ source,
+ click: 0,
+ tiles: [{
+ id: spoc.id,
+ pos: 0,
+ ...(spoc.shim && spoc.shim.click ? {
+ shim: spoc.shim.click
+ } : {})
+ }]
+ }));
+ }
+ }
+
+ render() {
+ const {
+ data,
+ dispatch,
+ type
+ } = this.props;
+
+ if (!data || !data.spocs || !data.spocs[0]) {
+ return null;
+ } // Grab the first item in the array as we only have 1 spoc position.
+
+
+ const [spoc] = data.spocs;
+ const {
+ title,
+ url,
+ excerpt,
+ flight_id,
+ id,
+ shim
+ } = spoc;
+ const SIGNUP_CONTEXT_MENU_OPTIONS = ["OpenInNewWindow", "OpenInPrivateWindow", "Separator", "BlockUrl", ...(flight_id ? ["ShowPrivacyInfo"] : [])];
+ const outerClassName = ["ds-signup", this.state.active && "active", this.state.lastItem && "last-item"].filter(v => v).join(" ");
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: outerClassName
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-signup-content"
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon icon-small-spacer icon-mail"
+ }), /*#__PURE__*/external_React_default().createElement("span", null, title, " ", /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ className: "ds-chevron-link",
+ dispatch: dispatch,
+ onLinkClick: this.onLinkClick,
+ url: url
+ }, excerpt)), /*#__PURE__*/external_React_default().createElement(ImpressionStats_ImpressionStats, {
+ flightId: flight_id,
+ rows: [{
+ id,
+ pos: 0,
+ shim: shim && shim.impression
+ }],
+ dispatch: dispatch,
+ source: type
+ })), /*#__PURE__*/external_React_default().createElement(ContextMenuButton, {
+ tooltip: "newtab-menu-content-tooltip",
+ tooltipArgs: {
+ title
+ },
+ onUpdate: this.onMenuButtonUpdate
+ }, /*#__PURE__*/external_React_default().createElement(LinkMenu, {
+ dispatch: dispatch,
+ index: 0,
+ source: type.toUpperCase(),
+ onShow: this.onMenuShow,
+ options: SIGNUP_CONTEXT_MENU_OPTIONS,
+ shouldSendImpressionStats: true,
+ userEvent: actionCreators.DiscoveryStreamUserEvent,
+ site: {
+ referrer: "https://getpocket.com/recommendations",
+ title,
+ type,
+ url,
+ guid: id,
+ shim,
+ flight_id
+ }
+ })));
+ }
+
+}
+DSSignup.defaultProps = {
+ windowObj: window // Added to support unit tests
+
+};
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSTextPromo/DSTextPromo.jsx
+/* 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/. */
+
+
+
+
+
+
+
+class DSTextPromo extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onLinkClick = this.onLinkClick.bind(this);
+ this.onDismissClick = this.onDismissClick.bind(this);
+ }
+
+ onLinkClick() {
+ const {
+ data
+ } = this.props;
+
+ if (this.props.dispatch && data && data.spocs && data.spocs.length) {
+ const source = this.props.type.toUpperCase(); // Grab the first item in the array as we only have 1 spoc position.
+
+ const [spoc] = data.spocs;
+ this.props.dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "CLICK",
+ source,
+ action_position: 0
+ }));
+ this.props.dispatch(actionCreators.ImpressionStats({
+ source,
+ click: 0,
+ tiles: [{
+ id: spoc.id,
+ pos: 0,
+ ...(spoc.shim && spoc.shim.click ? {
+ shim: spoc.shim.click
+ } : {})
+ }]
+ }));
+ }
+ }
+
+ onDismissClick() {
+ const {
+ data
+ } = this.props;
+
+ if (this.props.dispatch && data && data.spocs && data.spocs.length) {
+ const index = 0;
+ const source = this.props.type.toUpperCase(); // Grab the first item in the array as we only have 1 spoc position.
+
+ const [spoc] = data.spocs;
+ const spocData = {
+ url: spoc.url,
+ guid: spoc.id,
+ shim: spoc.shim
+ };
+ const blockUrlOption = LinkMenuOptions.BlockUrl(spocData, index, source);
+ const {
+ action,
+ impression,
+ userEvent
+ } = blockUrlOption;
+ this.props.dispatch(action);
+ this.props.dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: userEvent,
+ source,
+ action_position: index
+ }));
+
+ if (impression) {
+ this.props.dispatch(impression);
+ }
+ }
+ }
+
+ render() {
+ const {
+ data
+ } = this.props;
+
+ if (!data || !data.spocs || !data.spocs[0]) {
+ return null;
+ } // Grab the first item in the array as we only have 1 spoc position.
+
+
+ const [spoc] = data.spocs;
+ const {
+ image_src,
+ raw_image_src,
+ alt_text,
+ title,
+ url,
+ context,
+ cta,
+ flight_id,
+ id,
+ shim
+ } = spoc;
+ return /*#__PURE__*/external_React_default().createElement(DSDismiss, {
+ onDismissClick: this.onDismissClick,
+ extraClasses: `ds-dismiss-ds-text-promo`
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-text-promo"
+ }, /*#__PURE__*/external_React_default().createElement(DSImage, {
+ alt_text: alt_text,
+ source: image_src,
+ rawSource: raw_image_src
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "text"
+ }, /*#__PURE__*/external_React_default().createElement("h3", null, `${title}\u2003`, /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ className: "ds-chevron-link",
+ dispatch: this.props.dispatch,
+ onLinkClick: this.onLinkClick,
+ url: url
+ }, cta)), /*#__PURE__*/external_React_default().createElement("p", {
+ className: "subtitle"
+ }, context)), /*#__PURE__*/external_React_default().createElement(ImpressionStats_ImpressionStats, {
+ flightId: flight_id,
+ rows: [{
+ id,
+ pos: 0,
+ shim: shim && shim.impression
+ }],
+ dispatch: this.props.dispatch,
+ source: this.props.type
+ })));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/lib/screenshot-utils.js
+/* 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/. */
+
+/**
+ * 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: __webpack_require__.g.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)) {
+ __webpack_require__.g.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;
+ }
+
+};
+;// CONCATENATED MODULE: ./content-src/components/Card/Card.jsx
+/* 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/. */
+
+
+
+
+
+
+ // Keep track of pending image loads to only request once
+
+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 extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.state = {
+ activeCard: null,
+ imageLoaded: false,
+ cardImage: null
+ };
+ this.onMenuButtonUpdate = this.onMenuButtonUpdate.bind(this);
+ this.onLinkClick = this.onLinkClick.bind(this);
+ }
+ /**
+ * Helper to conditionally load an image and update state when it loads.
+ */
+
+
+ async maybeLoadImage() {
+ // No need to load if it's already loaded or no image
+ const {
+ cardImage
+ } = this.state;
+
+ if (!cardImage) {
+ return;
+ }
+
+ const imageUrl = cardImage.url;
+
+ if (!this.state.imageLoaded) {
+ // Initialize a promise to share a load across multiple card updates
+ if (!gImageLoading.has(imageUrl)) {
+ const loaderPromise = new Promise((resolve, reject) => {
+ const loader = new Image();
+ loader.addEventListener("load", resolve);
+ loader.addEventListener("error", reject);
+ loader.src = imageUrl;
+ }); // Save and remove the promise only while it's pending
+
+ gImageLoading.set(imageUrl, loaderPromise);
+ loaderPromise.catch(ex => ex).then(() => gImageLoading.delete(imageUrl)).catch();
+ } // Wait for the image whether just started loading or reused promise
+
+
+ try {
+ await gImageLoading.get(imageUrl);
+ } catch (ex) {
+ // Ignore the failed image without changing state
+ return;
+ } // Only update state if we're still waiting to load the original image
+
+
+ if (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.
+ *
+ * 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 {
+ image
+ } = nextProps.link;
+ const imageInState = 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.
+
+
+ ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.cardImage);
+ nextState = nextState || {};
+ nextState.cardImage = ScreenshotUtils.createLocalImageObject(image);
+ return nextState;
+ }
+
+ onMenuButtonUpdate(isOpen) {
+ if (isOpen) {
+ this.setState({
+ activeCard: this.props.index
+ });
+ } else {
+ this.setState({
+ activeCard: null
+ });
+ }
+ }
+ /**
+ * Report to telemetry additional information about the item.
+ */
+
+
+ _getTelemetryInfo() {
+ // Filter out "history" type for being the default
+ if (this.props.link.type !== "history") {
+ return {
+ value: {
+ card_type: this.props.link.type
+ }
+ };
+ }
+
+ return null;
+ }
+
+ onLinkClick(event) {
+ event.preventDefault();
+ const {
+ altKey,
+ button,
+ ctrlKey,
+ metaKey,
+ shiftKey
+ } = event;
+
+ if (this.props.link.type === "download") {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.OPEN_DOWNLOAD_FILE,
+ data: Object.assign(this.props.link, {
+ event: {
+ button,
+ ctrlKey,
+ metaKey,
+ shiftKey
+ }
+ })
+ }));
+ } else {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.OPEN_LINK,
+ data: Object.assign(this.props.link, {
+ event: {
+ altKey,
+ button,
+ ctrlKey,
+ metaKey,
+ shiftKey
+ }
+ })
+ }));
+ }
+
+ if (this.props.isWebExtension) {
+ this.props.dispatch(actionCreators.WebExtEvent(actionTypes.WEBEXT_CLICK, {
+ source: this.props.eventSource,
+ url: this.props.link.url,
+ action_position: this.props.index
+ }));
+ } else {
+ this.props.dispatch(actionCreators.UserEvent(Object.assign({
+ event: "CLICK",
+ source: this.props.eventSource,
+ action_position: this.props.index
+ }, this._getTelemetryInfo())));
+
+ if (this.props.shouldSendImpressionStats) {
+ this.props.dispatch(actionCreators.ImpressionStats({
+ source: this.props.eventSource,
+ click: 0,
+ tiles: [{
+ id: this.props.link.guid,
+ pos: this.props.index
+ }]
+ }));
+ }
+ }
+ }
+
+ componentDidMount() {
+ this.maybeLoadImage();
+ }
+
+ 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.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.getNextStateFromProps(nextProps, this.state);
+
+ if (nextState) {
+ this.setState(nextState);
+ }
+ }
+
+ componentWillUnmount() {
+ ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.cardImage);
+ }
+
+ render() {
+ const {
+ index,
+ className,
+ link,
+ dispatch,
+ contextMenuOptions,
+ eventSource,
+ shouldSendImpressionStats
+ } = this.props;
+ const {
+ props
+ } = this;
+ const title = link.title || link.hostname;
+ const isContextMenuOpen = this.state.activeCard === index; // Display "now" as "trending" until we have new strings #3402
+
+ const {
+ icon,
+ fluentID
+ } = 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 /*#__PURE__*/external_React_default().createElement("li", {
+ className: outerClassName
+ }, /*#__PURE__*/external_React_default().createElement("a", {
+ href: link.type === "pocket" ? link.open_url : link.url,
+ onClick: !props.placeholder ? this.onLinkClick : undefined
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "card"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "card-preview-image-outer"
+ }, hasImage && /*#__PURE__*/external_React_default().createElement("div", {
+ className: `card-preview-image${this.state.imageLoaded ? " loaded" : ""}`,
+ style: imageStyle
+ })), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "card-details"
+ }, link.type === "download" && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "card-host-name alternate",
+ "data-l10n-id": "newtab-menu-open-file"
+ }), link.hostname && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "card-host-name"
+ }, link.hostname.slice(0, 100), link.type === "download" && ` \u2014 ${link.description}`), /*#__PURE__*/external_React_default().createElement("div", {
+ className: ["card-text", icon ? "" : "no-context", link.description ? "" : "no-description", link.hostname ? "" : "no-host-name"].join(" ")
+ }, /*#__PURE__*/external_React_default().createElement("h4", {
+ className: "card-title",
+ dir: "auto"
+ }, link.title), /*#__PURE__*/external_React_default().createElement("p", {
+ className: "card-description",
+ dir: "auto"
+ }, link.description)), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "card-context"
+ }, icon && !link.context && /*#__PURE__*/external_React_default().createElement("span", {
+ "aria-haspopup": "true",
+ className: `card-context-icon icon icon-${icon}`
+ }), link.icon && link.context && /*#__PURE__*/external_React_default().createElement("span", {
+ "aria-haspopup": "true",
+ className: "card-context-icon icon",
+ style: {
+ backgroundImage: `url('${link.icon}')`
+ }
+ }), fluentID && !link.context && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "card-context-label",
+ "data-l10n-id": fluentID
+ }), link.context && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "card-context-label"
+ }, link.context))))), !props.placeholder && /*#__PURE__*/external_React_default().createElement(ContextMenuButton, {
+ tooltip: "newtab-menu-content-tooltip",
+ tooltipArgs: {
+ title
+ },
+ onUpdate: this.onMenuButtonUpdate
+ }, /*#__PURE__*/external_React_default().createElement(LinkMenu, {
+ dispatch: dispatch,
+ index: index,
+ source: eventSource,
+ options: link.contextMenuOptions || contextMenuOptions,
+ site: link,
+ siteInfo: this._getTelemetryInfo(),
+ shouldSendImpressionStats: shouldSendImpressionStats
+ })));
+ }
+
+}
+_Card.defaultProps = {
+ link: {}
+};
+const Card = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ platform: state.Prefs.values.platform
+}))(_Card);
+const PlaceholderCard = props => /*#__PURE__*/external_React_default().createElement(Card, {
+ placeholder: true,
+ className: props.className
+});
+;// CONCATENATED MODULE: ./content-src/lib/perf-service.js
+/* 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/. */
+
+
+let usablePerfObj = window.performance;
+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;
+ }
+
+};
+const perfService = new _PerfService();
+;// CONCATENATED MODULE: ./content-src/components/ComponentPerfTimer/ComponentPerfTimer.jsx
+/* 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/. */
+
+
+ // 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 (external_React_default()).Component {
+ constructor(props) {
+ super(props); // Just for test dependency injection:
+
+ this.perfSvc = this.props.perfSvc || 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 `SAVE_SESSION_PERF_DATA` 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(actionCreators.OnlyToMain({
+ type: 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(actionCreators.OnlyToMain({
+ type: 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;
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/MoreRecommendations/MoreRecommendations.jsx
+/* 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/. */
+
+class MoreRecommendations extends (external_React_default()).PureComponent {
+ render() {
+ const {
+ read_more_endpoint
+ } = this.props;
+
+ if (read_more_endpoint) {
+ return /*#__PURE__*/external_React_default().createElement("a", {
+ className: "more-recommendations",
+ href: read_more_endpoint,
+ "data-l10n-id": "newtab-pocket-more-recommendations"
+ });
+ }
+
+ return null;
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/PocketLoggedInCta/PocketLoggedInCta.jsx
+/* 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/. */
+
+
+class _PocketLoggedInCta extends (external_React_default()).PureComponent {
+ render() {
+ const {
+ pocketCta
+ } = this.props.Pocket;
+ return /*#__PURE__*/external_React_default().createElement("span", {
+ className: "pocket-logged-in-cta"
+ }, /*#__PURE__*/external_React_default().createElement("a", {
+ className: "pocket-cta-button",
+ href: pocketCta.ctaUrl ? pocketCta.ctaUrl : "https://getpocket.com/"
+ }, pocketCta.ctaButton ? pocketCta.ctaButton : /*#__PURE__*/external_React_default().createElement("span", {
+ "data-l10n-id": "newtab-pocket-cta-button"
+ })), /*#__PURE__*/external_React_default().createElement("a", {
+ href: pocketCta.ctaUrl ? pocketCta.ctaUrl : "https://getpocket.com/"
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "cta-text"
+ }, pocketCta.ctaText ? pocketCta.ctaText : /*#__PURE__*/external_React_default().createElement("span", {
+ "data-l10n-id": "newtab-pocket-cta-text"
+ }))));
+ }
+
+}
+const PocketLoggedInCta = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ Pocket: state.Pocket
+}))(_PocketLoggedInCta);
+;// CONCATENATED MODULE: ./content-src/components/Topics/Topics.jsx
+/* 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/. */
+
+class Topic extends (external_React_default()).PureComponent {
+ render() {
+ const {
+ url,
+ name
+ } = this.props;
+ return /*#__PURE__*/external_React_default().createElement("li", null, /*#__PURE__*/external_React_default().createElement("a", {
+ key: name,
+ href: url
+ }, name));
+ }
+
+}
+class Topics extends (external_React_default()).PureComponent {
+ render() {
+ const {
+ topics
+ } = this.props;
+ return /*#__PURE__*/external_React_default().createElement("span", {
+ className: "topics"
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ "data-l10n-id": "newtab-pocket-read-more"
+ }), /*#__PURE__*/external_React_default().createElement("ul", null, topics && topics.map(t => /*#__PURE__*/external_React_default().createElement(Topic, {
+ key: t.name,
+ url: t.url,
+ name: t.name
+ }))));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/TopSites/SearchShortcutsForm.jsx
+/* 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/. */
+
+
+
+class SelectableSearchShortcut extends (external_React_default()).PureComponent {
+ render() {
+ const {
+ shortcut,
+ selected
+ } = this.props;
+ const imageStyle = {
+ backgroundImage: `url("${shortcut.tippyTopIcon}")`
+ };
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "top-site-outer search-shortcut"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ type: "checkbox",
+ id: shortcut.keyword,
+ name: shortcut.keyword,
+ checked: selected,
+ onChange: this.props.onChange
+ }), /*#__PURE__*/external_React_default().createElement("label", {
+ htmlFor: shortcut.keyword
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "top-site-inner"
+ }, /*#__PURE__*/external_React_default().createElement("span", null, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "tile"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "top-site-icon rich-icon",
+ style: imageStyle,
+ "data-fallback": "@"
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "top-site-icon search-topsite"
+ })), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "title"
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ dir: "auto"
+ }, shortcut.keyword))))));
+ }
+
+}
+class SearchShortcutsForm extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.handleChange = this.handleChange.bind(this);
+ this.onCancelButtonClick = this.onCancelButtonClick.bind(this);
+ this.onSaveButtonClick = this.onSaveButtonClick.bind(this); // clone the shortcuts and add them to the state so we can add isSelected property
+
+ const shortcuts = [];
+ const {
+ rows,
+ searchShortcuts
+ } = props.TopSites;
+ searchShortcuts.forEach(shortcut => {
+ shortcuts.push({ ...shortcut,
+ isSelected: !!rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword)
+ });
+ });
+ this.state = {
+ shortcuts
+ };
+ }
+
+ handleChange(event) {
+ const {
+ target
+ } = event;
+ const {
+ name,
+ checked
+ } = target;
+ this.setState(prevState => {
+ const shortcuts = prevState.shortcuts.slice();
+ let shortcut = shortcuts.find(({
+ keyword
+ }) => keyword === name);
+ shortcut.isSelected = checked;
+ return {
+ shortcuts
+ };
+ });
+ }
+
+ onCancelButtonClick(ev) {
+ ev.preventDefault();
+ this.props.onClose();
+ }
+
+ onSaveButtonClick(ev) {
+ ev.preventDefault(); // Check if there were any changes and act accordingly
+
+ const {
+ rows
+ } = this.props.TopSites;
+ const pinQueue = [];
+ const unpinQueue = [];
+ this.state.shortcuts.forEach(shortcut => {
+ const alreadyPinned = rows.find(row => row && row.isPinned && row.searchTopSite && row.label === shortcut.keyword);
+
+ if (shortcut.isSelected && !alreadyPinned) {
+ pinQueue.push(this._searchTopSite(shortcut));
+ } else if (!shortcut.isSelected && alreadyPinned) {
+ unpinQueue.push({
+ url: alreadyPinned.url,
+ searchVendor: shortcut.shortURL
+ });
+ }
+ }); // Tell the feed to do the work.
+
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.UPDATE_PINNED_SEARCH_SHORTCUTS,
+ data: {
+ addedShortcuts: pinQueue,
+ deletedShortcuts: unpinQueue
+ }
+ })); // Send the Telemetry pings.
+
+ pinQueue.forEach(shortcut => {
+ this.props.dispatch(actionCreators.UserEvent({
+ source: TOP_SITES_SOURCE,
+ event: "SEARCH_EDIT_ADD",
+ value: {
+ search_vendor: shortcut.searchVendor
+ }
+ }));
+ });
+ unpinQueue.forEach(shortcut => {
+ this.props.dispatch(actionCreators.UserEvent({
+ source: TOP_SITES_SOURCE,
+ event: "SEARCH_EDIT_DELETE",
+ value: {
+ search_vendor: shortcut.searchVendor
+ }
+ }));
+ });
+ this.props.onClose();
+ }
+
+ _searchTopSite(shortcut) {
+ return {
+ url: shortcut.url,
+ searchTopSite: true,
+ label: shortcut.keyword,
+ searchVendor: shortcut.shortURL
+ };
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("form", {
+ className: "topsite-form"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "search-shortcuts-container"
+ }, /*#__PURE__*/external_React_default().createElement("h3", {
+ className: "section-title grey-title",
+ "data-l10n-id": "newtab-topsites-add-search-engine-header"
+ }), /*#__PURE__*/external_React_default().createElement("div", null, this.state.shortcuts.map(shortcut => /*#__PURE__*/external_React_default().createElement(SelectableSearchShortcut, {
+ key: shortcut.keyword,
+ shortcut: shortcut,
+ selected: shortcut.isSelected,
+ onChange: this.handleChange
+ })))), /*#__PURE__*/external_React_default().createElement("section", {
+ className: "actions"
+ }, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "cancel",
+ type: "button",
+ onClick: this.onCancelButtonClick,
+ "data-l10n-id": "newtab-topsites-cancel-button"
+ }), /*#__PURE__*/external_React_default().createElement("button", {
+ className: "done",
+ type: "submit",
+ onClick: this.onSaveButtonClick,
+ "data-l10n-id": "newtab-topsites-save-button"
+ })));
+ }
+
+}
+;// CONCATENATED MODULE: ./common/Dedupe.sys.mjs
+/* 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/. */
+
+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.sys.mjs
+/* 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 PREF_COLLECTION_DISMISSIBLE = "discoverystream.isCollectionDismissible";
+
+const dedupe = new Dedupe(site => site && site.url);
+
+const INITIAL_STATE = {
+ App: {
+ // Have we received real data from the app yet?
+ initialized: false,
+ locale: "",
+ isForStartupCache: false,
+ customizeMenuVisible: false,
+ },
+ ASRouter: { initialized: false },
+ 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,
+ // Used in content only to open the SearchShortcutsForm modal.
+ showSearchShortcutsForm: false,
+ // The list of available search shortcuts.
+ searchShortcuts: [],
+ },
+ Prefs: {
+ initialized: false,
+ values: { featureConfig: {} },
+ },
+ Dialog: {
+ visible: false,
+ data: {},
+ },
+ Sections: [],
+ Pocket: {
+ isUserLoggedIn: null,
+ pocketCta: {},
+ waitingForSpoc: true,
+ },
+ // This is the new pocket configurable layout state.
+ DiscoveryStream: {
+ // This is a JSON-parsed copy of the discoverystream.config pref value.
+ config: { enabled: false, layout_endpoint: "" },
+ layout: [],
+ lastUpdated: null,
+ isPrivacyInfoModalVisible: false,
+ isCollectionDismissible: false,
+ feeds: {
+ data: {
+ // "https://foo.com/feed1": {lastUpdated: 123, data: []}
+ },
+ loaded: false,
+ },
+ spocs: {
+ spocs_endpoint: "",
+ lastUpdated: null,
+ data: {
+ // "spocs": {title: "", context: "", items: []},
+ // "placement1": {title: "", context: "", items: []},
+ },
+ loaded: false,
+ frequency_caps: [],
+ blocked: [],
+ placements: [],
+ },
+ experimentData: {
+ utmSource: "pocket-newtab",
+ utmCampaign: undefined,
+ utmContent: undefined,
+ },
+ recentSavesData: [],
+ isUserLoggedIn: false,
+ recentSavesEnabled: false,
+ },
+ Personalization: {
+ lastUpdated: null,
+ initialized: false,
+ },
+ Search: {
+ // When search hand-off is enabled, we render a big button that is styled to
+ // look like a search textbox. If the button is clicked, we style
+ // the button as if it was a focused search box and show a fake cursor but
+ // really focus the awesomebar without the focus styles ("hidden focus").
+ fakeFocus: false,
+ // Hide the search box after handing off to AwesomeBar and user starts typing.
+ hide: false,
+ },
+};
+
+function App(prevState = INITIAL_STATE.App, action) {
+ switch (action.type) {
+ case actionTypes.INIT:
+ return Object.assign({}, prevState, action.data || {}, {
+ initialized: true,
+ });
+ case actionTypes.TOP_SITES_UPDATED:
+ // Toggle `isForStartupCache` when receiving the `TOP_SITES_UPDATE` action
+ // so that sponsored tiles can be rendered as usual. See Bug 1826360.
+ return Object.assign({}, prevState, action.data || {}, {
+ isForStartupCache: false,
+ });
+ case actionTypes.SHOW_PERSONALIZE:
+ return Object.assign({}, prevState, {
+ customizeMenuVisible: true,
+ });
+ case actionTypes.HIDE_PERSONALIZE:
+ return Object.assign({}, prevState, {
+ customizeMenuVisible: false,
+ });
+ default:
+ return prevState;
+ }
+}
+
+function ASRouter(prevState = INITIAL_STATE.ASRouter, action) {
+ switch (action.type) {
+ case actionTypes.AS_ROUTER_INITIALIZED:
+ return { ...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 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 actionTypes.TOP_SITES_PREFS_UPDATED:
+ return Object.assign({}, prevState, { pref: action.data.pref });
+ case actionTypes.TOP_SITES_EDIT:
+ return Object.assign({}, prevState, {
+ editForm: {
+ index: action.data.index,
+ previewResponse: null,
+ },
+ });
+ case actionTypes.TOP_SITES_CANCEL_EDIT:
+ return Object.assign({}, prevState, { editForm: null });
+ case actionTypes.TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL:
+ return Object.assign({}, prevState, { showSearchShortcutsForm: true });
+ case actionTypes.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL:
+ return Object.assign({}, prevState, { showSearchShortcutsForm: false });
+ case 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 actionTypes.PREVIEW_REQUEST:
+ if (!prevState.editForm) {
+ return prevState;
+ }
+ return Object.assign({}, prevState, {
+ editForm: {
+ index: prevState.editForm.index,
+ previewResponse: null,
+ previewUrl: action.data.url,
+ },
+ });
+ case actionTypes.PREVIEW_REQUEST_CANCEL:
+ if (!prevState.editForm) {
+ return prevState;
+ }
+ return Object.assign({}, prevState, {
+ editForm: {
+ index: prevState.editForm.index,
+ previewResponse: null,
+ },
+ });
+ case 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 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 actionTypes.PLACES_BOOKMARKS_REMOVED:
+ if (!action.data) {
+ return prevState;
+ }
+ newRows = prevState.rows.map(site => {
+ if (site && action.data.urls.includes(site.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 actionTypes.PLACES_LINKS_DELETED:
+ if (!action.data) {
+ return prevState;
+ }
+ newRows = prevState.rows.filter(
+ site => !action.data.urls.includes(site.url)
+ );
+ return Object.assign({}, prevState, { rows: newRows });
+ case actionTypes.UPDATE_SEARCH_SHORTCUTS:
+ return { ...prevState, searchShortcuts: action.data.searchShortcuts };
+ case actionTypes.SNIPPETS_PREVIEW_MODE:
+ return { ...prevState, rows: [] };
+ default:
+ return prevState;
+ }
+}
+
+function Dialog(prevState = INITIAL_STATE.Dialog, action) {
+ switch (action.type) {
+ case actionTypes.DIALOG_OPEN:
+ return Object.assign({}, prevState, { visible: true, data: action.data });
+ case actionTypes.DIALOG_CANCEL:
+ return Object.assign({}, prevState, { visible: false });
+ case 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 actionTypes.PREFS_INITIAL_VALUES:
+ return Object.assign({}, prevState, {
+ initialized: true,
+ values: action.data,
+ });
+ case 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 actionTypes.SECTION_DEREGISTER:
+ return prevState.filter(section => section.id !== action.data);
+ case 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);
+ const section = Object.assign(
+ { title: "", rows: [], enabled: false },
+ action.data,
+ { initialized }
+ );
+ newState.push(section);
+ }
+ return newState;
+ case 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 &&
+ section.rows.find(card => card.pinned)
+ ) {
+ const rows = Array.from(action.data.rows);
+ section.rows.forEach((card, index) => {
+ if (card.pinned) {
+ // Only add it if it's not already there.
+ if (rows[index].guid !== card.guid) {
+ 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 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 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 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 actionTypes.PLACES_BOOKMARKS_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 (action.data.urls.includes(item.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 actionTypes.PLACES_LINKS_DELETED:
+ if (!action.data) {
+ return prevState;
+ }
+ return prevState.map(section =>
+ Object.assign({}, section, {
+ rows: section.rows.filter(
+ site => !action.data.urls.includes(site.url)
+ ),
+ })
+ );
+ case 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 actionTypes.DELETE_FROM_POCKET:
+ case actionTypes.ARCHIVE_FROM_POCKET:
+ return prevState.map(section =>
+ Object.assign({}, section, {
+ rows: section.rows.filter(
+ site => site.pocket_id !== action.data.pocket_id
+ ),
+ })
+ );
+ case actionTypes.SNIPPETS_PREVIEW_MODE:
+ return prevState.map(section => ({ ...section, rows: [] }));
+ default:
+ return prevState;
+ }
+}
+
+function Snippets(prevState = INITIAL_STATE.Snippets, action) {
+ switch (action.type) {
+ case actionTypes.SNIPPETS_DATA:
+ return Object.assign({}, prevState, { initialized: true }, action.data);
+ case actionTypes.SNIPPET_BLOCKED:
+ return Object.assign({}, prevState, {
+ blockList: prevState.blockList.concat(action.data),
+ });
+ case actionTypes.SNIPPETS_BLOCKLIST_CLEARED:
+ return Object.assign({}, prevState, { blockList: [] });
+ case actionTypes.SNIPPETS_RESET:
+ return INITIAL_STATE.Snippets;
+ default:
+ return prevState;
+ }
+}
+
+function Pocket(prevState = INITIAL_STATE.Pocket, action) {
+ switch (action.type) {
+ case actionTypes.POCKET_WAITING_FOR_SPOC:
+ return { ...prevState, waitingForSpoc: action.data };
+ case actionTypes.POCKET_LOGGED_IN:
+ return { ...prevState, isUserLoggedIn: !!action.data };
+ case actionTypes.POCKET_CTA:
+ return {
+ ...prevState,
+ pocketCta: {
+ ctaButton: action.data.cta_button,
+ ctaText: action.data.cta_text,
+ ctaUrl: action.data.cta_url,
+ useCta: action.data.use_cta,
+ },
+ };
+ default:
+ return prevState;
+ }
+}
+
+function Reducers_sys_Personalization(prevState = INITIAL_STATE.Personalization, action) {
+ switch (action.type) {
+ case actionTypes.DISCOVERY_STREAM_PERSONALIZATION_LAST_UPDATED:
+ return {
+ ...prevState,
+ lastUpdated: action.data.lastUpdated,
+ };
+ case actionTypes.DISCOVERY_STREAM_PERSONALIZATION_INIT:
+ return {
+ ...prevState,
+ initialized: true,
+ };
+ default:
+ return prevState;
+ }
+}
+
+// eslint-disable-next-line complexity
+function DiscoveryStream(prevState = INITIAL_STATE.DiscoveryStream, action) {
+ // Return if action data is empty, or spocs or feeds data is not loaded
+ const isNotReady = () =>
+ !action.data || !prevState.spocs.loaded || !prevState.feeds.loaded;
+
+ const handlePlacements = handleSites => {
+ const { data, placements } = prevState.spocs;
+ const result = {};
+
+ const forPlacement = placement => {
+ const placementSpocs = data[placement.name];
+
+ if (
+ !placementSpocs ||
+ !placementSpocs.items ||
+ !placementSpocs.items.length
+ ) {
+ return;
+ }
+
+ result[placement.name] = {
+ ...placementSpocs,
+ items: handleSites(placementSpocs.items),
+ };
+ };
+
+ if (!placements || !placements.length) {
+ [{ name: "spocs" }].forEach(forPlacement);
+ } else {
+ placements.forEach(forPlacement);
+ }
+ return result;
+ };
+
+ const nextState = handleSites => ({
+ ...prevState,
+ spocs: {
+ ...prevState.spocs,
+ data: handlePlacements(handleSites),
+ },
+ feeds: {
+ ...prevState.feeds,
+ data: Object.keys(prevState.feeds.data).reduce(
+ (accumulator, feed_url) => {
+ accumulator[feed_url] = {
+ data: {
+ ...prevState.feeds.data[feed_url].data,
+ recommendations: handleSites(
+ prevState.feeds.data[feed_url].data.recommendations
+ ),
+ },
+ };
+ return accumulator;
+ },
+ {}
+ ),
+ },
+ });
+
+ switch (action.type) {
+ case actionTypes.DISCOVERY_STREAM_CONFIG_CHANGE:
+ // Fall through to a separate action is so it doesn't trigger a listener update on init
+ case actionTypes.DISCOVERY_STREAM_CONFIG_SETUP:
+ return { ...prevState, config: action.data || {} };
+ case actionTypes.DISCOVERY_STREAM_EXPERIMENT_DATA:
+ return { ...prevState, experimentData: action.data || {} };
+ case actionTypes.DISCOVERY_STREAM_LAYOUT_UPDATE:
+ return {
+ ...prevState,
+ lastUpdated: action.data.lastUpdated || null,
+ layout: action.data.layout || [],
+ };
+ case actionTypes.DISCOVERY_STREAM_COLLECTION_DISMISSIBLE_TOGGLE:
+ return {
+ ...prevState,
+ isCollectionDismissible: action.data.value,
+ };
+ case actionTypes.DISCOVERY_STREAM_PREFS_SETUP:
+ return {
+ ...prevState,
+ recentSavesEnabled: action.data.recentSavesEnabled,
+ pocketButtonEnabled: action.data.pocketButtonEnabled,
+ saveToPocketCard: action.data.saveToPocketCard,
+ hideDescriptions: action.data.hideDescriptions,
+ compactImages: action.data.compactImages,
+ imageGradient: action.data.imageGradient,
+ newSponsoredLabel: action.data.newSponsoredLabel,
+ titleLines: action.data.titleLines,
+ descLines: action.data.descLines,
+ readTime: action.data.readTime,
+ };
+ case actionTypes.DISCOVERY_STREAM_RECENT_SAVES:
+ return {
+ ...prevState,
+ recentSavesData: action.data.recentSaves,
+ };
+ case actionTypes.DISCOVERY_STREAM_POCKET_STATE_SET:
+ return {
+ ...prevState,
+ isUserLoggedIn: action.data.isUserLoggedIn,
+ };
+ case actionTypes.HIDE_PRIVACY_INFO:
+ return {
+ ...prevState,
+ isPrivacyInfoModalVisible: false,
+ };
+ case actionTypes.SHOW_PRIVACY_INFO:
+ return {
+ ...prevState,
+ isPrivacyInfoModalVisible: true,
+ };
+ case actionTypes.DISCOVERY_STREAM_LAYOUT_RESET:
+ return { ...INITIAL_STATE.DiscoveryStream, config: prevState.config };
+ case actionTypes.DISCOVERY_STREAM_FEEDS_UPDATE:
+ return {
+ ...prevState,
+ feeds: {
+ ...prevState.feeds,
+ loaded: true,
+ },
+ };
+ case actionTypes.DISCOVERY_STREAM_FEED_UPDATE:
+ const newData = {};
+ newData[action.data.url] = action.data.feed;
+ return {
+ ...prevState,
+ feeds: {
+ ...prevState.feeds,
+ data: {
+ ...prevState.feeds.data,
+ ...newData,
+ },
+ },
+ };
+ case actionTypes.DISCOVERY_STREAM_SPOCS_CAPS:
+ return {
+ ...prevState,
+ spocs: {
+ ...prevState.spocs,
+ frequency_caps: [...prevState.spocs.frequency_caps, ...action.data],
+ },
+ };
+ case actionTypes.DISCOVERY_STREAM_SPOCS_ENDPOINT:
+ return {
+ ...prevState,
+ spocs: {
+ ...INITIAL_STATE.DiscoveryStream.spocs,
+ spocs_endpoint:
+ action.data.url ||
+ INITIAL_STATE.DiscoveryStream.spocs.spocs_endpoint,
+ },
+ };
+ case actionTypes.DISCOVERY_STREAM_SPOCS_PLACEMENTS:
+ return {
+ ...prevState,
+ spocs: {
+ ...prevState.spocs,
+ placements:
+ action.data.placements ||
+ INITIAL_STATE.DiscoveryStream.spocs.placements,
+ },
+ };
+ case actionTypes.DISCOVERY_STREAM_SPOCS_UPDATE:
+ if (action.data) {
+ return {
+ ...prevState,
+ spocs: {
+ ...prevState.spocs,
+ lastUpdated: action.data.lastUpdated,
+ data: action.data.spocs,
+ loaded: true,
+ },
+ };
+ }
+ return prevState;
+ case actionTypes.DISCOVERY_STREAM_SPOC_BLOCKED:
+ return {
+ ...prevState,
+ spocs: {
+ ...prevState.spocs,
+ blocked: [...prevState.spocs.blocked, action.data.url],
+ },
+ };
+ case actionTypes.DISCOVERY_STREAM_LINK_BLOCKED:
+ return isNotReady()
+ ? prevState
+ : nextState(items =>
+ items.filter(item => item.url !== action.data.url)
+ );
+
+ case actionTypes.PLACES_SAVED_TO_POCKET:
+ const addPocketInfo = item => {
+ if (item.url === action.data.url) {
+ return Object.assign({}, item, {
+ open_url: action.data.open_url,
+ pocket_id: action.data.pocket_id,
+ context_type: "pocket",
+ });
+ }
+ return item;
+ };
+ return isNotReady()
+ ? prevState
+ : nextState(items => items.map(addPocketInfo));
+
+ case actionTypes.DELETE_FROM_POCKET:
+ case actionTypes.ARCHIVE_FROM_POCKET:
+ return isNotReady()
+ ? prevState
+ : nextState(items =>
+ items.filter(item => item.pocket_id !== action.data.pocket_id)
+ );
+
+ case actionTypes.PLACES_BOOKMARK_ADDED:
+ const updateBookmarkInfo = item => {
+ if (item.url === action.data.url) {
+ const { bookmarkGuid, bookmarkTitle, dateAdded } = action.data;
+ return Object.assign({}, item, {
+ bookmarkGuid,
+ bookmarkTitle,
+ bookmarkDateCreated: dateAdded,
+ context_type: "bookmark",
+ });
+ }
+ return item;
+ };
+ return isNotReady()
+ ? prevState
+ : nextState(items => items.map(updateBookmarkInfo));
+
+ case actionTypes.PLACES_BOOKMARKS_REMOVED:
+ const removeBookmarkInfo = item => {
+ if (action.data.urls.includes(item.url)) {
+ const newSite = Object.assign({}, item);
+ delete newSite.bookmarkGuid;
+ delete newSite.bookmarkTitle;
+ delete newSite.bookmarkDateCreated;
+ if (!newSite.context_type || newSite.context_type === "bookmark") {
+ newSite.context_type = "removedBookmark";
+ }
+ return newSite;
+ }
+ return item;
+ };
+ return isNotReady()
+ ? prevState
+ : nextState(items => items.map(removeBookmarkInfo));
+ case actionTypes.PREF_CHANGED:
+ if (action.data.name === PREF_COLLECTION_DISMISSIBLE) {
+ return {
+ ...prevState,
+ isCollectionDismissible: action.data.value,
+ };
+ }
+ return prevState;
+ default:
+ return prevState;
+ }
+}
+
+function Search(prevState = INITIAL_STATE.Search, action) {
+ switch (action.type) {
+ case actionTypes.DISABLE_SEARCH:
+ return Object.assign({ ...prevState, disable: true });
+ case actionTypes.FAKE_FOCUS_SEARCH:
+ return Object.assign({ ...prevState, fakeFocus: true });
+ case actionTypes.SHOW_SEARCH:
+ return Object.assign({ ...prevState, disable: false, fakeFocus: false });
+ default:
+ return prevState;
+ }
+}
+
+const reducers = {
+ TopSites,
+ App,
+ ASRouter,
+ Snippets,
+ Prefs,
+ Dialog,
+ Sections,
+ Pocket,
+ Personalization: Reducers_sys_Personalization,
+ DiscoveryStream,
+ Search,
+};
+
+;// CONCATENATED MODULE: ./content-src/components/TopSites/TopSiteFormInput.jsx
+/* 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/. */
+
+class TopSiteFormInput extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.state = {
+ validationError: this.props.validationError
+ };
+ this.onChange = this.onChange.bind(this);
+ this.onMount = this.onMount.bind(this);
+ this.onClearIconPress = this.onClearIconPress.bind(this);
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (nextProps.shouldFocus && !this.props.shouldFocus) {
+ this.input.focus();
+ }
+
+ if (nextProps.validationError && !this.props.validationError) {
+ this.setState({
+ validationError: true
+ });
+ } // If the component is in an error state but the value was cleared by the parent
+
+
+ if (this.state.validationError && !nextProps.value) {
+ this.setState({
+ validationError: false
+ });
+ }
+ }
+
+ onClearIconPress(event) {
+ // If there is input in the URL or custom image URL fields,
+ // and we hit 'enter' while tabbed over the clear icon,
+ // we should execute the function to clear the field.
+ if (event.key === "Enter") {
+ this.props.onClear();
+ }
+ }
+
+ onChange(ev) {
+ if (this.state.validationError) {
+ this.setState({
+ validationError: false
+ });
+ }
+
+ this.props.onChange(ev);
+ }
+
+ onMount(input) {
+ this.input = input;
+ }
+
+ renderLoadingOrCloseButton() {
+ const showClearButton = this.props.value && this.props.onClear;
+
+ if (this.props.loading) {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "loading-container"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "loading-animation"
+ }));
+ } else if (showClearButton) {
+ return /*#__PURE__*/external_React_default().createElement("button", {
+ type: "button",
+ className: "icon icon-clear-input icon-button-style",
+ onClick: this.props.onClear,
+ onKeyPress: this.onClearIconPress
+ });
+ }
+
+ return null;
+ }
+
+ render() {
+ const {
+ typeUrl
+ } = this.props;
+ const {
+ validationError
+ } = this.state;
+ return /*#__PURE__*/external_React_default().createElement("label", null, /*#__PURE__*/external_React_default().createElement("span", {
+ "data-l10n-id": this.props.titleId
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: `field ${typeUrl ? "url" : ""}${validationError ? " invalid" : ""}`
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ type: "text",
+ value: this.props.value,
+ ref: this.onMount,
+ onChange: this.onChange,
+ "data-l10n-id": this.props.placeholderId // Set focus on error if the url field is valid or when the input is first rendered and is empty
+ // eslint-disable-next-line jsx-a11y/no-autofocus
+ ,
+ autoFocus: this.props.autoFocusOnOpen,
+ disabled: this.props.loading
+ }), this.renderLoadingOrCloseButton(), validationError && /*#__PURE__*/external_React_default().createElement("aside", {
+ className: "error-tooltip",
+ "data-l10n-id": this.props.errorMessageId
+ })));
+ }
+
+}
+TopSiteFormInput.defaultProps = {
+ showClearButton: false,
+ value: "",
+ validationError: false
+};
+;// CONCATENATED MODULE: ./content-src/components/TopSites/TopSiteImpressionWrapper.jsx
+/* 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 TopSiteImpressionWrapper_VISIBLE = "visible";
+const TopSiteImpressionWrapper_VISIBILITY_CHANGE_EVENT = "visibilitychange"; // Per analytical requirement, we set the minimal intersection ratio to
+// 0.5, and an impression is identified when the wrapped item has at least
+// 50% visibility.
+//
+// This constant is exported for unit test
+
+const TopSiteImpressionWrapper_INTERSECTION_RATIO = 0.5;
+/**
+ * Impression wrapper for a TopSite tile.
+ *
+ * It makses use of the Intersection Observer API to detect the visibility,
+ * and relies on page visibility to ensure the impression is reported
+ * only when the component is visible on the page.
+ */
+
+class TopSiteImpressionWrapper extends (external_React_default()).PureComponent {
+ _dispatchImpressionStats() {
+ const {
+ actionType,
+ tile
+ } = this.props;
+
+ if (!actionType) {
+ return;
+ }
+
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionType,
+ data: {
+ type: "impression",
+ ...tile
+ }
+ }));
+ }
+
+ setImpressionObserverOrAddListener() {
+ const {
+ props
+ } = this;
+
+ if (!props.dispatch) {
+ return;
+ }
+
+ if (props.document.visibilityState === TopSiteImpressionWrapper_VISIBLE) {
+ this.setImpressionObserver();
+ } else {
+ // We should only ever send the latest impression stats ping, so remove any
+ // older listeners.
+ if (this._onVisibilityChange) {
+ props.document.removeEventListener(TopSiteImpressionWrapper_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+
+ this._onVisibilityChange = () => {
+ if (props.document.visibilityState === TopSiteImpressionWrapper_VISIBLE) {
+ this.setImpressionObserver();
+ props.document.removeEventListener(TopSiteImpressionWrapper_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ };
+
+ props.document.addEventListener(TopSiteImpressionWrapper_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ }
+ /**
+ * Set an impression observer for the wrapped component. It makes use of
+ * the Intersection Observer API to detect if the wrapped component is
+ * visible with a desired ratio, and only sends impression if that's the case.
+ *
+ * See more details about Intersection Observer API at:
+ * https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
+ */
+
+
+ setImpressionObserver() {
+ const {
+ props
+ } = this;
+
+ if (!props.tile) {
+ return;
+ }
+
+ this._handleIntersect = entries => {
+ if (entries.some(entry => entry.isIntersecting && entry.intersectionRatio >= TopSiteImpressionWrapper_INTERSECTION_RATIO)) {
+ this._dispatchImpressionStats();
+
+ this.impressionObserver.unobserve(this.refs.topsite_impression_wrapper);
+ }
+ };
+
+ const options = {
+ threshold: TopSiteImpressionWrapper_INTERSECTION_RATIO
+ };
+ this.impressionObserver = new props.IntersectionObserver(this._handleIntersect, options);
+ this.impressionObserver.observe(this.refs.topsite_impression_wrapper);
+ }
+
+ componentDidMount() {
+ if (this.props.tile) {
+ this.setImpressionObserverOrAddListener();
+ }
+ }
+
+ componentWillUnmount() {
+ if (this._handleIntersect && this.impressionObserver) {
+ this.impressionObserver.unobserve(this.refs.topsite_impression_wrapper);
+ }
+
+ if (this._onVisibilityChange) {
+ this.props.document.removeEventListener(TopSiteImpressionWrapper_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ ref: "topsite_impression_wrapper",
+ className: "topsite-impression-observer"
+ }, this.props.children);
+ }
+
+}
+TopSiteImpressionWrapper.defaultProps = {
+ IntersectionObserver: __webpack_require__.g.IntersectionObserver,
+ document: __webpack_require__.g.document,
+ actionType: null,
+ tile: null
+};
+;// CONCATENATED MODULE: ./content-src/components/TopSites/TopSite.jsx
+function TopSite_extends() { TopSite_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; }; return TopSite_extends.apply(this, arguments); }
+
+/* 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 SPOC_TYPE = "SPOC";
+const NEWTAB_SOURCE = "newtab"; // For cases if we want to know if this is sponsored by either sponsored_position or type.
+// We have two sources for sponsored topsites, and
+// sponsored_position is set by one sponsored source, and type is set by another.
+// This is not called in all cases, sometimes we want to know if it's one source
+// or the other. This function is only applicable in cases where we only care if it's either.
+
+function isSponsored(link) {
+ return (link === null || link === void 0 ? void 0 : link.sponsored_position) || (link === null || link === void 0 ? void 0 : link.type) === SPOC_TYPE;
+}
+
+class TopSiteLink extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.state = {
+ screenshotImage: null
+ };
+ this.onDragEvent = this.onDragEvent.bind(this);
+ this.onKeyPress = this.onKeyPress.bind(this);
+ }
+ /*
+ * Helper to determine whether the drop zone should allow a drop. We only allow
+ * dropping top sites for now. We don't allow dropping on sponsored top sites
+ * as their position is fixed.
+ */
+
+
+ _allowDrop(e) {
+ return (this.dragged || !isSponsored(this.props.link)) && 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":
+ event.target.blur();
+
+ if (isSponsored(this.props.link)) {
+ event.preventDefault();
+ break;
+ }
+
+ this.dragged = true;
+ event.dataTransfer.effectAllowed = "move";
+ event.dataTransfer.setData("text/topsite-index", this.props.index);
+ 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":
+ // Block the scroll wheel from appearing for middle clicks on search top sites
+ if (event.button === 1 && this.props.link.searchTopSite) {
+ event.preventDefault();
+ } // 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 = ScreenshotUtils.isRemoteImageLocal(prevState.screenshotImage, screenshot);
+
+ if (imageInState) {
+ return null;
+ } // Since image was updated, attempt to revoke old image blob URL, if it exists.
+
+
+ ScreenshotUtils.maybeRevokeBlobObjectURL(prevState.screenshotImage);
+ return {
+ screenshotImage: 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() {
+ ScreenshotUtils.maybeRevokeBlobObjectURL(this.state.screenshotImage);
+ }
+
+ onKeyPress(event) {
+ // If we have tabbed to a search shortcut top site, and we click 'enter',
+ // we should execute the onClick function. This needs to be added because
+ // search top sites are anchor tags without an href. See bug 1483135
+ if (this.props.link.searchTopSite && event.key === "Enter") {
+ this.props.onClick(event);
+ }
+ }
+ /*
+ * Takes the url as a string, runs it through a simple (non-secure) hash turning it into a random number
+ * Apply that random number to the color array. The same url will always generate the same color.
+ */
+
+
+ generateColor() {
+ let {
+ title,
+ colors
+ } = this.props;
+
+ if (!colors) {
+ return "";
+ }
+
+ let colorArray = colors.split(",");
+
+ const hashStr = str => {
+ let hash = 0;
+
+ for (let i = 0; i < str.length; i++) {
+ let charCode = str.charCodeAt(i);
+ hash += charCode;
+ }
+
+ return hash;
+ };
+
+ let hash = hashStr(title);
+ let index = hash % colorArray.length;
+ return colorArray[index];
+ }
+
+ calculateStyle() {
+ const {
+ defaultStyle,
+ link
+ } = this.props;
+ const {
+ tippyTopIcon,
+ faviconSize
+ } = link;
+ let imageClassName;
+ let imageStyle;
+ let showSmallFavicon = false;
+ let smallFaviconStyle;
+ let hasScreenshotImage = this.state.screenshotImage && this.state.screenshotImage.url;
+ let selectedColor;
+
+ if (defaultStyle) {
+ // force no styles (letter fallback) even if the link has imagery
+ selectedColor = this.generateColor();
+ } else if (link.searchTopSite) {
+ imageClassName = "top-site-icon rich-icon";
+ imageStyle = {
+ backgroundColor: link.backgroundColor,
+ backgroundImage: `url(${tippyTopIcon})`
+ };
+ smallFaviconStyle = {
+ backgroundImage: `url(${tippyTopIcon})`
+ };
+ } 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})` : ""
+ };
+ } else if (tippyTopIcon || link.type === SPOC_TYPE || faviconSize >= 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 if (faviconSize >= MIN_SMALL_FAVICON_SIZE) {
+ showSmallFavicon = true;
+ smallFaviconStyle = {
+ backgroundImage: `url(${link.favicon})`
+ };
+ } else {
+ selectedColor = this.generateColor();
+ imageClassName = "";
+ }
+
+ return {
+ showSmallFavicon,
+ smallFaviconStyle,
+ imageStyle,
+ imageClassName,
+ selectedColor
+ };
+ }
+
+ render() {
+ const {
+ children,
+ className,
+ isDraggable,
+ link,
+ onClick,
+ title
+ } = this.props;
+ const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : ""}${link.isDragged ? " dragged" : ""}${link.searchTopSite ? " search-shortcut" : ""}`;
+ const [letterFallback] = title;
+ const {
+ showSmallFavicon,
+ smallFaviconStyle,
+ imageStyle,
+ imageClassName,
+ selectedColor
+ } = this.calculateStyle();
+ let draggableProps = {};
+
+ if (isDraggable) {
+ draggableProps = {
+ onClick: this.onDragEvent,
+ onDragEnd: this.onDragEvent,
+ onDragStart: this.onDragEvent,
+ onMouseDown: this.onDragEvent
+ };
+ }
+
+ let impressionStats = null;
+
+ if (link.type === SPOC_TYPE) {
+ // Record impressions for Pocket tiles.
+ impressionStats = /*#__PURE__*/external_React_default().createElement(ImpressionStats_ImpressionStats, {
+ flightId: link.flightId,
+ rows: [{
+ id: link.id,
+ pos: link.pos,
+ shim: link.shim && link.shim.impression,
+ advertiser: title.toLocaleLowerCase()
+ }],
+ dispatch: this.props.dispatch,
+ source: TOP_SITES_SOURCE
+ });
+ } else if (isSponsored(link)) {
+ // Record impressions for non-Pocket sponsored tiles.
+ impressionStats = /*#__PURE__*/external_React_default().createElement(TopSiteImpressionWrapper, {
+ actionType: actionTypes.TOP_SITES_SPONSORED_IMPRESSION_STATS,
+ tile: {
+ position: this.props.index,
+ tile_id: link.sponsored_tile_id || -1,
+ reporting_url: link.sponsored_impression_url,
+ advertiser: title.toLocaleLowerCase(),
+ source: NEWTAB_SOURCE
+ } // For testing.
+ ,
+ IntersectionObserver: this.props.IntersectionObserver,
+ document: this.props.document,
+ dispatch: this.props.dispatch
+ });
+ } else {
+ // Record impressions for organic tiles.
+ impressionStats = /*#__PURE__*/external_React_default().createElement(TopSiteImpressionWrapper, {
+ actionType: actionTypes.TOP_SITES_ORGANIC_IMPRESSION_STATS,
+ tile: {
+ position: this.props.index,
+ source: NEWTAB_SOURCE
+ } // For testing.
+ ,
+ IntersectionObserver: this.props.IntersectionObserver,
+ document: this.props.document,
+ dispatch: this.props.dispatch
+ });
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("li", TopSite_extends({
+ className: topSiteOuterClassName,
+ onDrop: this.onDragEvent,
+ onDragOver: this.onDragEvent,
+ onDragEnter: this.onDragEvent,
+ onDragLeave: this.onDragEvent
+ }, draggableProps), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "top-site-inner"
+ }, /*#__PURE__*/external_React_default().createElement("a", {
+ className: "top-site-button",
+ href: link.searchTopSite ? undefined : link.url,
+ tabIndex: "0",
+ onKeyPress: this.onKeyPress,
+ onClick: onClick,
+ draggable: true,
+ "data-is-sponsored-link": !!link.sponsored_tile_id
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "tile",
+ "aria-hidden": true
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: selectedColor ? "icon-wrapper letter-fallback" : "icon-wrapper",
+ "data-fallback": letterFallback,
+ style: selectedColor ? {
+ backgroundColor: selectedColor
+ } : {}
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: imageClassName,
+ style: imageStyle
+ }), showSmallFavicon && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "top-site-icon default-icon",
+ "data-fallback": smallFaviconStyle ? "" : letterFallback,
+ style: smallFaviconStyle
+ })), link.searchTopSite && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "top-site-icon search-topsite"
+ })), /*#__PURE__*/external_React_default().createElement("div", {
+ className: `title${link.isPinned ? " has-icon pinned" : ""}${link.type === SPOC_TYPE || link.show_sponsored_label ? " sponsored" : ""}`
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ dir: "auto"
+ }, link.isPinned && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "icon icon-pin-small"
+ }), title || /*#__PURE__*/external_React_default().createElement("br", null), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "sponsored-label",
+ "data-l10n-id": "newtab-topsite-sponsored"
+ })))), children, impressionStats));
+ }
+
+}
+TopSiteLink.defaultProps = {
+ title: "",
+ link: {},
+ isDraggable: true
+};
+class TopSite extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.state = {
+ showContextMenu: false
+ };
+ this.onLinkClick = this.onLinkClick.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";
+ }
+
+ if (this.props.link.searchTopSite) {
+ // Set the card_type as "search" regardless of its pinning status
+ value.card_type = "search";
+ value.search_vendor = this.props.link.hostname;
+ }
+
+ if (isSponsored(this.props.link)) {
+ value.card_type = "spoc";
+ }
+
+ return {
+ value
+ };
+ }
+
+ userEvent(event) {
+ this.props.dispatch(actionCreators.UserEvent(Object.assign({
+ event,
+ source: 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;
+
+ if (!this.props.link.searchTopSite) {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.OPEN_LINK,
+ data: Object.assign(this.props.link, {
+ event: {
+ altKey,
+ button,
+ ctrlKey,
+ metaKey,
+ shiftKey
+ }
+ })
+ }));
+
+ if (this.props.link.type === SPOC_TYPE) {
+ // Record a Pocket-specific click.
+ this.props.dispatch(actionCreators.ImpressionStats({
+ source: TOP_SITES_SOURCE,
+ click: 0,
+ tiles: [{
+ id: this.props.link.id,
+ pos: this.props.link.pos,
+ shim: this.props.link.shim && this.props.link.shim.click
+ }]
+ })); // Record a click for a Pocket sponsored tile.
+
+ const title = this.props.link.label || this.props.link.hostname;
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.TOP_SITES_SPONSORED_IMPRESSION_STATS,
+ data: {
+ type: "click",
+ position: this.props.link.pos,
+ tile_id: this.props.link.id,
+ advertiser: title.toLocaleLowerCase(),
+ source: NEWTAB_SOURCE
+ }
+ }));
+ } else if (isSponsored(this.props.link)) {
+ // Record a click for a non-Pocket sponsored tile.
+ const title = this.props.link.label || this.props.link.hostname;
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.TOP_SITES_SPONSORED_IMPRESSION_STATS,
+ data: {
+ type: "click",
+ position: this.props.index,
+ tile_id: this.props.link.sponsored_tile_id || -1,
+ reporting_url: this.props.link.sponsored_click_url,
+ advertiser: title.toLocaleLowerCase(),
+ source: NEWTAB_SOURCE
+ }
+ }));
+ } else {
+ // Record a click for an organic tile.
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.TOP_SITES_ORGANIC_IMPRESSION_STATS,
+ data: {
+ type: "click",
+ position: this.props.index,
+ source: NEWTAB_SOURCE
+ }
+ }));
+ }
+
+ if (this.props.link.sendAttributionRequest) {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.PARTNER_LINK_ATTRIBUTION,
+ data: {
+ targetURL: this.props.link.url,
+ source: "newtab"
+ }
+ }));
+ }
+ } else {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.FILL_SEARCH_TERM,
+ data: {
+ label: this.props.link.label
+ }
+ }));
+ }
+ }
+
+ onMenuUpdate(isOpen) {
+ if (isOpen) {
+ this.props.onActivate(this.props.index);
+ } else {
+ this.props.onActivate();
+ }
+ }
+
+ render() {
+ const {
+ props
+ } = this;
+ const {
+ link
+ } = props;
+ const isContextMenuOpen = props.activeIndex === props.index;
+ const title = link.label || link.hostname;
+ let menuOptions;
+
+ if (link.sponsored_position) {
+ menuOptions = TOP_SITES_SPONSORED_POSITION_CONTEXT_MENU_OPTIONS;
+ } else if (link.searchTopSite) {
+ menuOptions = TOP_SITES_SEARCH_SHORTCUTS_CONTEXT_MENU_OPTIONS;
+ } else if (link.type === SPOC_TYPE) {
+ menuOptions = TOP_SITES_SPOC_CONTEXT_MENU_OPTIONS;
+ } else {
+ menuOptions = TOP_SITES_CONTEXT_MENU_OPTIONS;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement(TopSiteLink, TopSite_extends({}, props, {
+ onClick: this.onLinkClick,
+ onDragEvent: this.props.onDragEvent,
+ className: `${props.className || ""}${isContextMenuOpen ? " active" : ""}`,
+ title: title
+ }), /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement(ContextMenuButton, {
+ tooltip: "newtab-menu-content-tooltip",
+ tooltipArgs: {
+ title
+ },
+ onUpdate: this.onMenuUpdate
+ }, /*#__PURE__*/external_React_default().createElement(LinkMenu, {
+ dispatch: props.dispatch,
+ index: props.index,
+ onUpdate: this.onMenuUpdate,
+ options: menuOptions,
+ site: link,
+ shouldSendImpressionStats: link.type === SPOC_TYPE,
+ siteInfo: this._getTelemetryInfo(),
+ source: TOP_SITES_SOURCE
+ }))));
+ }
+
+}
+TopSite.defaultProps = {
+ link: {},
+
+ onActivate() {}
+
+};
+class TopSitePlaceholder extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onEditButtonClick = this.onEditButtonClick.bind(this);
+ }
+
+ onEditButtonClick() {
+ this.props.dispatch({
+ type: actionTypes.TOP_SITES_EDIT,
+ data: {
+ index: this.props.index
+ }
+ });
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement(TopSiteLink, TopSite_extends({}, this.props, {
+ className: `placeholder ${this.props.className || ""}`,
+ isDraggable: false
+ }), /*#__PURE__*/external_React_default().createElement("button", {
+ "aria-haspopup": "dialog",
+ className: "context-menu-button edit-button icon",
+ "data-l10n-id": "newtab-menu-topsites-placeholder-tooltip",
+ onClick: this.onEditButtonClick
+ }));
+ }
+
+}
+class _TopSiteList extends (external_React_default()).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(actionCreators.UserEvent({
+ event,
+ source: 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(actionCreators.AlsoToMain({
+ type: actionTypes.TOP_SITES_INSERT,
+ data: {
+ site: {
+ url: this.state.draggedSite.url,
+ label: this.state.draggedTitle,
+ customScreenshotURL: this.state.draggedSite.customScreenshotURL,
+ // Only if the search topsites experiment is enabled
+ ...(this.state.draggedSite.searchTopSite && {
+ searchTopSite: true
+ })
+ },
+ 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 * 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 preview = topSites.map(site => site && (site.isPinned || isSponsored(site)) ? site : null);
+ const unpinned = topSites.filter(site => site && !site.isPinned && !isSponsored(site));
+ const siteToInsert = Object.assign({}, this.state.draggedSite, {
+ isPinned: true,
+ isDragged: true
+ });
+
+ if (!preview[index]) {
+ preview[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 (preview[holeIndex]) {
+ holeIndex += indexStep;
+ } // Shift towards the hole.
+
+
+ const shiftingStep = index > this.state.draggedIndex ? 1 : -1;
+
+ while (index > this.state.draggedIndex ? holeIndex < index : holeIndex > index) {
+ let nextIndex = holeIndex + shiftingStep;
+
+ while (isSponsored(preview[nextIndex])) {
+ nextIndex += shiftingStep;
+ }
+
+ preview[holeIndex] = preview[nextIndex];
+ holeIndex = nextIndex;
+ }
+
+ preview[index] = siteToInsert;
+ } // Fill in the remaining holes with unpinned sites.
+
+
+ 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
+ }; // 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";
+ }
+
+ let topSiteLink; // Use a placeholder if the link is empty or it's rendering a sponsored
+ // tile for the about:home startup cache.
+
+ if (!link || props.App.isForStartupCache && isSponsored(link)) {
+ topSiteLink = /*#__PURE__*/external_React_default().createElement(TopSitePlaceholder, TopSite_extends({}, slotProps, commonProps));
+ } else {
+ topSiteLink = /*#__PURE__*/external_React_default().createElement(TopSite, TopSite_extends({
+ link: link,
+ activeIndex: this.state.activeIndex,
+ onActivate: this.onActivate
+ }, slotProps, commonProps, {
+ colors: props.colors
+ }));
+ }
+
+ topSitesUI.push(topSiteLink);
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("ul", {
+ className: `top-sites-list${this.state.draggedSite ? " dnd-active" : ""}`
+ }, topSitesUI);
+ }
+
+}
+const TopSiteList = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ App: state.App
+}))(_TopSiteList);
+;// CONCATENATED MODULE: ./content-src/components/TopSites/TopSiteForm.jsx
+/* 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/. */
+
+
+
+
+
+
+class TopSiteForm extends (external_React_default()).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 : "",
+ showCustomScreenshotForm: site ? site.customScreenshotURL : false
+ };
+ this.onClearScreenshotInput = this.onClearScreenshotInput.bind(this);
+ this.onLabelChange = this.onLabelChange.bind(this);
+ this.onUrlChange = this.onUrlChange.bind(this);
+ this.onCancelButtonClick = this.onCancelButtonClick.bind(this);
+ this.onClearUrlClick = this.onClearUrlClick.bind(this);
+ this.onDoneButtonClick = this.onDoneButtonClick.bind(this);
+ this.onCustomScreenshotUrlChange = this.onCustomScreenshotUrlChange.bind(this);
+ this.onPreviewButtonClick = this.onPreviewButtonClick.bind(this);
+ this.onEnableScreenshotUrlForm = this.onEnableScreenshotUrlForm.bind(this);
+ this.validateUrl = this.validateUrl.bind(this);
+ }
+
+ onLabelChange(event) {
+ this.setState({
+ label: event.target.value
+ });
+ }
+
+ onUrlChange(event) {
+ this.setState({
+ url: event.target.value,
+ validationError: false
+ });
+ }
+
+ onClearUrlClick() {
+ this.setState({
+ url: "",
+ validationError: false
+ });
+ }
+
+ onEnableScreenshotUrlForm() {
+ this.setState({
+ showCustomScreenshotForm: true
+ });
+ }
+
+ _updateCustomScreenshotInput(customScreenshotUrl) {
+ this.setState({
+ customScreenshotUrl,
+ validationError: false
+ });
+ this.props.dispatch({
+ type: actionTypes.PREVIEW_REQUEST_CANCEL
+ });
+ }
+
+ onCustomScreenshotUrlChange(event) {
+ this._updateCustomScreenshotInput(event.target.value);
+ }
+
+ onClearScreenshotInput() {
+ this._updateCustomScreenshotInput("");
+ }
+
+ onCancelButtonClick(ev) {
+ ev.preventDefault();
+ this.props.onClose();
+ }
+
+ onDoneButtonClick(ev) {
+ ev.preventDefault();
+
+ if (this.validateForm()) {
+ const site = {
+ url: this.cleanUrl(this.state.url)
+ };
+ const {
+ index
+ } = this.props;
+
+ if (this.state.label !== "") {
+ site.label = this.state.label;
+ }
+
+ 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(actionCreators.AlsoToMain({
+ type: actionTypes.TOP_SITES_PIN,
+ data: {
+ site,
+ index
+ }
+ }));
+ this.props.dispatch(actionCreators.UserEvent({
+ source: TOP_SITES_SOURCE,
+ event: "TOP_SITES_EDIT",
+ action_position: index
+ }));
+ this.props.onClose();
+ }
+ }
+
+ onPreviewButtonClick(event) {
+ event.preventDefault();
+
+ if (this.validateForm()) {
+ this.props.dispatch(actionCreators.AlsoToMain({
+ type: actionTypes.PREVIEW_REQUEST,
+ data: {
+ url: this.cleanUrl(this.state.customScreenshotUrl)
+ }
+ }));
+ this.props.dispatch(actionCreators.UserEvent({
+ source: TOP_SITES_SOURCE,
+ event: "PREVIEW_REQUEST"
+ }));
+ }
+ }
+
+ cleanUrl(url) {
+ // If we are missing a protocol, prepend http://
+ if (!url.startsWith("http:") && !url.startsWith("https:")) {
+ return `http://${url}`;
+ }
+
+ return url;
+ }
+
+ _tryParseUrl(url) {
+ try {
+ return new URL(url);
+ } catch (e) {
+ return null;
+ }
+ }
+
+ validateUrl(url) {
+ const validProtocols = ["http:", "https:"];
+
+ const urlObj = this._tryParseUrl(url) || this._tryParseUrl(this.cleanUrl(url));
+
+ return urlObj && validProtocols.includes(urlObj.protocol);
+ }
+
+ validateCustomScreenshotUrl() {
+ const {
+ customScreenshotUrl
+ } = this.state;
+ return !customScreenshotUrl || this.validateUrl(customScreenshotUrl);
+ }
+
+ validateForm() {
+ const validate = this.validateUrl(this.state.url) && this.validateCustomScreenshotUrl();
+
+ if (!validate) {
+ this.setState({
+ validationError: true
+ });
+ }
+
+ return validate;
+ }
+
+ _renderCustomScreenshotInput() {
+ 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 /*#__PURE__*/external_React_default().createElement(A11yLinkButton, {
+ onClick: this.onEnableScreenshotUrlForm,
+ className: "enable-custom-image-input",
+ "data-l10n-id": "newtab-topsites-use-image-link"
+ });
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "custom-image-input-container"
+ }, /*#__PURE__*/external_React_default().createElement(TopSiteFormInput, {
+ errorMessageId: requestFailed ? "newtab-topsites-image-validation" : "newtab-topsites-url-validation",
+ loading: isLoading,
+ onChange: this.onCustomScreenshotUrlChange,
+ onClear: this.onClearScreenshotInput,
+ shouldFocus: shouldFocus,
+ typeUrl: true,
+ value: customScreenshotUrl,
+ validationError: validationError,
+ titleId: "newtab-topsites-image-url-label",
+ placeholderId: "newtab-topsites-url-input"
+ }));
+ }
+
+ render() {
+ const {
+ customScreenshotUrl
+ } = this.state;
+ const requestFailed = this.props.previewResponse === ""; // For UI purposes, editing without an existing link is "add"
+
+ const showAsAdd = !this.props.site;
+ const previous = this.props.site && this.props.site.customScreenshotURL || "";
+ const changed = customScreenshotUrl && this.cleanUrl(customScreenshotUrl) !== previous; // 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;
+ } // Handles the form submit so an enter press performs the correct action
+
+
+ const onSubmit = previewMode ? this.onPreviewButtonClick : this.onDoneButtonClick;
+ const addTopsitesHeaderL10nId = "newtab-topsites-add-shortcut-header";
+ const editTopsitesHeaderL10nId = "newtab-topsites-edit-shortcut-header";
+ return /*#__PURE__*/external_React_default().createElement("form", {
+ className: "topsite-form",
+ onSubmit: onSubmit
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "form-input-container"
+ }, /*#__PURE__*/external_React_default().createElement("h3", {
+ className: "section-title grey-title",
+ "data-l10n-id": showAsAdd ? addTopsitesHeaderL10nId : editTopsitesHeaderL10nId
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "fields-and-preview"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "form-wrapper"
+ }, /*#__PURE__*/external_React_default().createElement(TopSiteFormInput, {
+ onChange: this.onLabelChange,
+ value: this.state.label,
+ titleId: "newtab-topsites-title-label",
+ placeholderId: "newtab-topsites-title-input",
+ autoFocusOnOpen: true
+ }), /*#__PURE__*/external_React_default().createElement(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: "newtab-topsites-url-label",
+ typeUrl: true,
+ placeholderId: "newtab-topsites-url-input",
+ errorMessageId: "newtab-topsites-url-validation"
+ }), this._renderCustomScreenshotInput()), /*#__PURE__*/external_React_default().createElement(TopSiteLink, {
+ link: previewLink,
+ defaultStyle: requestFailed,
+ title: this.state.label
+ }))), /*#__PURE__*/external_React_default().createElement("section", {
+ className: "actions"
+ }, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "cancel",
+ type: "button",
+ onClick: this.onCancelButtonClick,
+ "data-l10n-id": "newtab-topsites-cancel-button"
+ }), previewMode ? /*#__PURE__*/external_React_default().createElement("button", {
+ className: "done preview",
+ type: "submit",
+ "data-l10n-id": "newtab-topsites-preview-button"
+ }) : /*#__PURE__*/external_React_default().createElement("button", {
+ className: "done",
+ type: "submit",
+ "data-l10n-id": showAsAdd ? "newtab-topsites-add-button" : "newtab-topsites-save-button"
+ })));
+ }
+
+}
+TopSiteForm.defaultProps = {
+ site: null,
+ index: -1
+};
+;// CONCATENATED MODULE: ./content-src/components/TopSites/TopSites.jsx
+function TopSites_extends() { TopSites_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; }; return TopSites_extends.apply(this, arguments); }
+
+/* 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/. */
+
+
+
+
+
+
+
+
+
+
+
+
+function topSiteIconType(link) {
+ if (link.customScreenshotURL) {
+ return "custom_screenshot";
+ }
+
+ if (link.tippyTopIcon || link.faviconRef === "tippytop") {
+ return "tippytop";
+ }
+
+ if (link.faviconSize >= MIN_RICH_FAVICON_SIZE) {
+ return "rich_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: 0,
+ tippytop: 0,
+ rich_icon: 0,
+ no_image: 0
+ });
+}
+
+class _TopSites extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onEditFormClose = this.onEditFormClose.bind(this);
+ this.onSearchShortcutsFormClose = this.onSearchShortcutsFormClose.bind(this);
+ }
+ /**
+ * Dispatch session statistics about the quality of TopSites icons and pinned count.
+ */
+
+
+ _dispatchTopSitesStats() {
+ const topSites = this._getVisibleTopSites().filter(topSite => topSite !== null && topSite !== undefined);
+
+ const topSitesIconsStats = countTopSitesIconsTypes(topSites);
+ const topSitesPinned = topSites.filter(site => !!site.isPinned).length;
+ const searchShortcuts = topSites.filter(site => !!site.searchTopSite).length; // Dispatch telemetry event with the count of TopSites images types.
+
+ this.props.dispatch(actionCreators.AlsoToMain({
+ type: actionTypes.SAVE_SESSION_PERF_DATA,
+ data: {
+ topsites_icon_stats: topSitesIconsStats,
+ topsites_pinned: topSitesPinned,
+ topsites_search_shortcuts: searchShortcuts
+ }
+ }));
+ }
+ /**
+ * 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 = TOP_SITES_MAX_SITES_PER_ROW; // $break-point-widest = 1072px (from _variables.scss)
+
+ if (!__webpack_require__.g.matchMedia(`(min-width: 1072px)`).matches) {
+ sitesPerRow -= 2;
+ }
+
+ return this.props.TopSites.rows.slice(0, this.props.TopSitesRows * sitesPerRow);
+ }
+
+ componentDidUpdate() {
+ this._dispatchTopSitesStats();
+ }
+
+ componentDidMount() {
+ this._dispatchTopSitesStats();
+ }
+
+ onEditFormClose() {
+ this.props.dispatch(actionCreators.UserEvent({
+ source: TOP_SITES_SOURCE,
+ event: "TOP_SITES_EDIT_CLOSE"
+ }));
+ this.props.dispatch({
+ type: actionTypes.TOP_SITES_CANCEL_EDIT
+ });
+ }
+
+ onSearchShortcutsFormClose() {
+ this.props.dispatch(actionCreators.UserEvent({
+ source: TOP_SITES_SOURCE,
+ event: "SEARCH_EDIT_CLOSE"
+ }));
+ this.props.dispatch({
+ type: actionTypes.TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL
+ });
+ }
+
+ render() {
+ const {
+ props
+ } = this;
+ const {
+ editForm,
+ showSearchShortcutsForm
+ } = props.TopSites;
+ const extraMenuOptions = ["AddTopSite"];
+ const colors = props.Prefs.values["newNewtabExperience.colors"];
+
+ if (props.Prefs.values["improvesearch.topSiteSearchShortcuts"]) {
+ extraMenuOptions.push("AddSearchShortcut");
+ }
+
+ return /*#__PURE__*/external_React_default().createElement(ComponentPerfTimer, {
+ id: "topsites",
+ initialized: props.TopSites.initialized,
+ dispatch: props.dispatch
+ }, /*#__PURE__*/external_React_default().createElement(CollapsibleSection, {
+ className: "top-sites",
+ id: "topsites",
+ title: props.title || {
+ id: "newtab-section-header-topsites"
+ },
+ hideTitle: true,
+ extraMenuOptions: extraMenuOptions,
+ showPrefName: "feeds.topsites",
+ eventSource: TOP_SITES_SOURCE,
+ collapsed: false,
+ isFixed: props.isFixed,
+ isFirst: props.isFirst,
+ isLast: props.isLast,
+ dispatch: props.dispatch
+ }, /*#__PURE__*/external_React_default().createElement(TopSiteList, {
+ TopSites: props.TopSites,
+ TopSitesRows: props.TopSitesRows,
+ dispatch: props.dispatch,
+ topSiteIconType: topSiteIconType,
+ colors: colors
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "edit-topsites-wrapper"
+ }, editForm && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "edit-topsites"
+ }, /*#__PURE__*/external_React_default().createElement(ModalOverlayWrapper, {
+ unstyled: true,
+ onClose: this.onEditFormClose,
+ innerClassName: "modal"
+ }, /*#__PURE__*/external_React_default().createElement(TopSiteForm, TopSites_extends({
+ site: props.TopSites.rows[editForm.index],
+ onClose: this.onEditFormClose,
+ dispatch: this.props.dispatch
+ }, editForm)))), showSearchShortcutsForm && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "edit-search-shortcuts"
+ }, /*#__PURE__*/external_React_default().createElement(ModalOverlayWrapper, {
+ unstyled: true,
+ onClose: this.onSearchShortcutsFormClose,
+ innerClassName: "modal"
+ }, /*#__PURE__*/external_React_default().createElement(SearchShortcutsForm, {
+ TopSites: props.TopSites,
+ onClose: this.onSearchShortcutsFormClose,
+ dispatch: this.props.dispatch
+ }))))));
+ }
+
+}
+const TopSites_TopSites = (0,external_ReactRedux_namespaceObject.connect)((state, props) => ({
+ TopSites: state.TopSites,
+ Prefs: state.Prefs,
+ TopSitesRows: state.Prefs.values.topSitesRows
+}))(_TopSites);
+;// CONCATENATED MODULE: ./content-src/components/Sections/Sections.jsx
+function Sections_extends() { Sections_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; }; return Sections_extends.apply(this, arguments); }
+
+/* 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 Sections_VISIBLE = "visible";
+const Sections_VISIBILITY_CHANGE_EVENT = "visibilitychange";
+const CARDS_PER_ROW_DEFAULT = 3;
+const CARDS_PER_ROW_COMPACT_WIDE = 4;
+class Section extends (external_React_default()).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 && __webpack_require__.g.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(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 === Sections_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(Sections_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 === Sections_VISIBLE) {
+ if (!this.props.pref.collapsed) {
+ this._dispatchImpressionStats();
+ }
+
+ props.document.removeEventListener(Sections_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ };
+
+ props.document.addEventListener(Sections_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ }
+
+ componentWillMount() {
+ this.sendNewTabRehydrated(this.props.initialized);
+ }
+
+ 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();
+ }
+ }
+
+ componentWillUpdate(nextProps) {
+ this.sendNewTabRehydrated(nextProps.initialized);
+ }
+
+ componentWillUnmount() {
+ if (this._onVisibilityChange) {
+ this.props.document.removeEventListener(Sections_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;
+ } // 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(initialized) {
+ if (initialized && !this.renderNotified) {
+ this.props.dispatch(actionCreators.AlsoToMain({
+ type: actionTypes.NEW_TAB_REHYDRATED,
+ data: {}
+ }));
+ this.renderNotified = true;
+ }
+ }
+
+ render() {
+ const {
+ id,
+ eventSource,
+ title,
+ rows,
+ Pocket,
+ topics,
+ emptyState,
+ dispatch,
+ compactCards,
+ read_more_endpoint,
+ contextMenuOptions,
+ initialized,
+ learnMore,
+ pref,
+ privacyNoticeURL,
+ isFirst,
+ isLast
+ } = this.props;
+ const waitingForSpoc = id === "topstories" && this.props.Pocket.waitingForSpoc;
+ 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;
+ const {
+ pocketCta,
+ isUserLoggedIn
+ } = Pocket || {};
+ const {
+ useCta
+ } = pocketCta || {}; // Don't display anything until we have a definitve result from Pocket,
+ // to avoid a flash of logged out state while we render.
+
+ const isPocketLoggedInDefined = isUserLoggedIn === true || isUserLoggedIn === false;
+ const hasTopics = topics && !!topics.length;
+ const shouldShowPocketCta = id === "topstories" && useCta && isUserLoggedIn === false; // Show topics only for top stories and if it has loaded with topics.
+ // The classs .top-stories-bottom-container ensures content doesn't shift as things load.
+
+ const shouldShowTopics = id === "topstories" && hasTopics && (useCta && isUserLoggedIn === true || !useCta && isPocketLoggedInDefined); // We use topics to determine language support for read more.
+
+ const shouldShowReadMore = read_more_endpoint && hasTopics;
+ 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" : "";
+ let usePlaceholder = !link; // If we are in the third card and waiting for spoc,
+ // use the placeholder.
+
+ if (!usePlaceholder && i === 2 && waitingForSpoc) {
+ usePlaceholder = true;
+ }
+
+ cards.push(!usePlaceholder ? /*#__PURE__*/external_React_default().createElement(Card, {
+ key: i,
+ index: i,
+ className: className,
+ dispatch: dispatch,
+ link: link,
+ contextMenuOptions: contextMenuOptions,
+ eventSource: eventSource,
+ shouldSendImpressionStats: this.props.shouldSendImpressionStats,
+ isWebExtension: this.props.isWebExtension
+ }) : /*#__PURE__*/external_React_default().createElement(PlaceholderCard, {
+ key: i,
+ className: className
+ }));
+ }
+ }
+
+ const sectionClassName = ["section", compactCards ? "compact-cards" : "normal-cards"].join(" "); // <Section> <-- React component
+ // <section> <-- HTML5 element
+
+ return /*#__PURE__*/external_React_default().createElement(ComponentPerfTimer, this.props, /*#__PURE__*/external_React_default().createElement(CollapsibleSection, {
+ className: sectionClassName,
+ title: title,
+ id: id,
+ eventSource: eventSource,
+ collapsed: this.props.pref.collapsed,
+ showPrefName: pref && pref.feed || id,
+ privacyNoticeURL: privacyNoticeURL,
+ Prefs: this.props.Prefs,
+ isFixed: this.props.isFixed,
+ isFirst: isFirst,
+ isLast: isLast,
+ learnMore: learnMore,
+ dispatch: this.props.dispatch,
+ isWebExtension: this.props.isWebExtension
+ }, !shouldShowEmptyState && /*#__PURE__*/external_React_default().createElement("ul", {
+ className: "section-list",
+ style: {
+ padding: 0
+ }
+ }, cards), shouldShowEmptyState && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "section-empty-state"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "empty-state"
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: emptyState.message
+ }, /*#__PURE__*/external_React_default().createElement("p", {
+ className: "empty-state-message"
+ })))), id === "topstories" && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "top-stories-bottom-container"
+ }, shouldShowTopics && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "wrapper-topics"
+ }, /*#__PURE__*/external_React_default().createElement(Topics, {
+ topics: this.props.topics
+ })), shouldShowPocketCta && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "wrapper-cta"
+ }, /*#__PURE__*/external_React_default().createElement(PocketLoggedInCta, null)), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "wrapper-more-recommendations"
+ }, shouldShowReadMore && /*#__PURE__*/external_React_default().createElement(MoreRecommendations, {
+ read_more_endpoint: read_more_endpoint
+ })))));
+ }
+
+}
+Section.defaultProps = {
+ document: __webpack_require__.g.document,
+ rows: [],
+ emptyState: {},
+ pref: {},
+ title: ""
+};
+const SectionIntl = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ Prefs: state.Prefs,
+ Pocket: state.Pocket
+}))(Section);
+class _Sections extends (external_React_default()).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( /*#__PURE__*/external_React_default().createElement(TopSites_TopSites, commonProps));
+ } else {
+ const section = enabledSections.find(s => s.id === sectionId);
+
+ if (section) {
+ sections.push( /*#__PURE__*/external_React_default().createElement(SectionIntl, Sections_extends({}, section, commonProps)));
+ }
+ }
+ }
+
+ return sections;
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "sections-list"
+ }, this.renderSections());
+ }
+
+}
+const Sections_Sections = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ Sections: state.Sections,
+ Prefs: state.Prefs
+}))(_Sections);
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/Highlights/Highlights.jsx
+function Highlights_extends() { Highlights_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; }; return Highlights_extends.apply(this, arguments); }
+
+/* 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/. */
+
+
+
+class _Highlights extends (external_React_default()).PureComponent {
+ render() {
+ const section = this.props.Sections.find(s => s.id === "highlights");
+
+ if (!section || !section.enabled) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-highlights sections-list"
+ }, /*#__PURE__*/external_React_default().createElement(SectionIntl, Highlights_extends({}, section, {
+ isFixed: true
+ })));
+ }
+
+}
+const Highlights = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ Sections: state.Sections
+}))(_Highlights);
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/HorizontalRule/HorizontalRule.jsx
+/* 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/. */
+
+class HorizontalRule extends (external_React_default()).PureComponent {
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("hr", {
+ className: "ds-hr"
+ });
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/Navigation/Navigation.jsx
+/* 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/. */
+
+
+
+
+class Navigation_Topic extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onLinkClick = this.onLinkClick.bind(this);
+ }
+
+ onLinkClick(event) {
+ if (this.props.dispatch) {
+ this.props.dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "CLICK",
+ source: "POPULAR_TOPICS",
+ action_position: 0,
+ value: {
+ topic: event.target.text.toLowerCase().replace(` `, `-`)
+ }
+ }));
+ }
+ }
+
+ render() {
+ const {
+ url,
+ name
+ } = this.props;
+ return /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ onLinkClick: this.onLinkClick,
+ className: this.props.className,
+ url: url
+ }, name);
+ }
+
+}
+class Navigation extends (external_React_default()).PureComponent {
+ render() {
+ let links = this.props.links || [];
+ const alignment = this.props.alignment || "centered";
+ const header = this.props.header || {};
+ const english = this.props.locale.startsWith("en-");
+ const privacyNotice = this.props.privacyNoticeURL || {};
+ const {
+ newFooterSection
+ } = this.props;
+ const className = `ds-navigation ds-navigation-${alignment} ${newFooterSection ? `ds-navigation-new-topics` : ``}`;
+ let {
+ title
+ } = header;
+
+ if (newFooterSection) {
+ title = {
+ id: "newtab-pocket-new-topics-title"
+ };
+
+ if (this.props.extraLinks) {
+ links = [...links.slice(0, links.length - 1), ...this.props.extraLinks, links[links.length - 1]];
+ }
+ }
+
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: className
+ }, title && english ? /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: title
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "ds-navigation-header"
+ })) : null, english ? /*#__PURE__*/external_React_default().createElement("ul", null, links && links.map(t => /*#__PURE__*/external_React_default().createElement("li", {
+ key: t.name
+ }, /*#__PURE__*/external_React_default().createElement(Navigation_Topic, {
+ url: t.url,
+ name: t.name,
+ dispatch: this.props.dispatch
+ })))) : null, !newFooterSection ? /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ className: "ds-navigation-privacy",
+ url: privacyNotice.url
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: privacyNotice.title
+ })) : null, newFooterSection ? /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-navigation-family"
+ }, /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon firefox-logo"
+ }), /*#__PURE__*/external_React_default().createElement("span", null, "|"), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "icon pocket-logo"
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "ds-navigation-family-message",
+ "data-l10n-id": "newtab-pocket-pocket-firefox-family"
+ })) : null);
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/PrivacyLink/PrivacyLink.jsx
+/* 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/. */
+
+
+
+class PrivacyLink extends (external_React_default()).PureComponent {
+ render() {
+ const {
+ properties
+ } = this.props;
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-privacy-link"
+ }, /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ url: properties.url
+ }, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
+ message: properties.title
+ })));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/SectionTitle/SectionTitle.jsx
+/* 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/. */
+
+class SectionTitle extends (external_React_default()).PureComponent {
+ render() {
+ const {
+ header: {
+ title,
+ subtitle
+ }
+ } = this.props;
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-section-title"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "title"
+ }, title), subtitle ? /*#__PURE__*/external_React_default().createElement("div", {
+ className: "subtitle"
+ }, subtitle) : null);
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/lib/selectLayoutRender.js
+/* 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 selectLayoutRender = ({
+ state = {},
+ prefs = {},
+ locale = ""
+}) => {
+ const {
+ layout,
+ feeds,
+ spocs
+ } = state;
+ let spocIndexPlacementMap = {};
+ /* This function fills spoc positions on a per placement basis with available spocs.
+ * It does this by looping through each position for a placement and replacing a rec with a spoc.
+ * If it runs out of spocs or positions, it stops.
+ * If it sees the same placement again, it remembers the previous spoc index, and continues.
+ * If it sees a blocked spoc, it skips that position leaving in a regular story.
+ */
+
+ function fillSpocPositionsForPlacement(data, spocsConfig, spocsData, placementName) {
+ if (!spocIndexPlacementMap[placementName] && spocIndexPlacementMap[placementName] !== 0) {
+ spocIndexPlacementMap[placementName] = 0;
+ }
+
+ const results = [...data];
+
+ for (let position of spocsConfig.positions) {
+ const spoc = spocsData[spocIndexPlacementMap[placementName]]; // If there are no spocs left, we can stop filling positions.
+
+ if (!spoc) {
+ break;
+ } // A placement could be used in two sections.
+ // In these cases, we want to maintain the index of the previous section.
+ // If we didn't do this, it might duplicate spocs.
+
+
+ spocIndexPlacementMap[placementName]++; // A spoc that's blocked is removed from the source for subsequent newtab loads.
+ // If we have a spoc in the source that's blocked, it means it was *just* blocked,
+ // and in this case, we skip this position, and show a regular spoc instead.
+
+ if (!spocs.blocked.includes(spoc.url)) {
+ results.splice(position.index, 0, spoc);
+ }
+ }
+
+ return results;
+ }
+
+ const positions = {};
+ const DS_COMPONENTS = ["Message", "TextPromo", "SectionTitle", "Signup", "Navigation", "CardGrid", "CollectionCardGrid", "HorizontalRule", "PrivacyLink"];
+ const filterArray = [];
+
+ if (!prefs["feeds.topsites"]) {
+ filterArray.push("TopSites");
+ }
+
+ const pocketEnabled = prefs["feeds.section.topstories"] && prefs["feeds.system.topstories"];
+
+ if (!pocketEnabled) {
+ filterArray.push(...DS_COMPONENTS);
+ }
+
+ const placeholderComponent = component => {
+ if (!component.feed) {
+ // TODO we now need a placeholder for topsites and textPromo.
+ return { ...component,
+ data: {
+ spocs: []
+ }
+ };
+ }
+
+ const data = {
+ recommendations: []
+ };
+ let items = 0;
+
+ if (component.properties && component.properties.items) {
+ items = component.properties.items;
+ }
+
+ for (let i = 0; i < items; i++) {
+ data.recommendations.push({
+ placeholder: true
+ });
+ }
+
+ return { ...component,
+ data
+ };
+ }; // TODO update devtools to show placements
+
+
+ const handleSpocs = (data, component) => {
+ let result = [...data]; // Do we ever expect to possibly have a spoc.
+
+ if (component.spocs && component.spocs.positions && component.spocs.positions.length) {
+ const placement = component.placement || {};
+ const placementName = placement.name || "spocs";
+ const spocsData = spocs.data[placementName]; // We expect a spoc, spocs are loaded, and the server returned spocs.
+
+ if (spocs.loaded && spocsData && spocsData.items && spocsData.items.length) {
+ result = fillSpocPositionsForPlacement(result, component.spocs, spocsData.items, placementName);
+ }
+ }
+
+ return result;
+ };
+
+ const handleComponent = component => {
+ if (component.spocs && component.spocs.positions && component.spocs.positions.length) {
+ const placement = component.placement || {};
+ const placementName = placement.name || "spocs";
+ const spocsData = spocs.data[placementName];
+
+ if (spocs.loaded && spocsData && spocsData.items && spocsData.items.length) {
+ return { ...component,
+ data: {
+ spocs: spocsData.items.filter(spoc => spoc && !spocs.blocked.includes(spoc.url)).map((spoc, index) => ({ ...spoc,
+ pos: index
+ }))
+ }
+ };
+ }
+ }
+
+ return { ...component,
+ data: {
+ spocs: []
+ }
+ };
+ };
+
+ const handleComponentWithFeed = component => {
+ positions[component.type] = positions[component.type] || 0;
+ let data = {
+ recommendations: []
+ };
+ const feed = feeds.data[component.feed.url];
+
+ if (feed && feed.data) {
+ data = { ...feed.data,
+ recommendations: [...(feed.data.recommendations || [])]
+ };
+ }
+
+ if (component && component.properties && component.properties.offset) {
+ data = { ...data,
+ recommendations: data.recommendations.slice(component.properties.offset)
+ };
+ }
+
+ data = { ...data,
+ recommendations: handleSpocs(data.recommendations, component)
+ };
+ let items = 0;
+
+ if (component.properties && component.properties.items) {
+ items = Math.min(component.properties.items, data.recommendations.length);
+ } // loop through a component items
+ // Store the items position sequentially for multiple components of the same type.
+ // Example: A second card grid starts pos offset from the last card grid.
+
+
+ for (let i = 0; i < items; i++) {
+ data.recommendations[i] = { ...data.recommendations[i],
+ pos: positions[component.type]++
+ };
+ }
+
+ return { ...component,
+ data
+ };
+ };
+
+ const renderLayout = () => {
+ const renderedLayoutArray = [];
+
+ for (const row of layout.filter(r => r.components.filter(c => !filterArray.includes(c.type)).length)) {
+ let components = [];
+ renderedLayoutArray.push({ ...row,
+ components
+ });
+
+ for (const component of row.components.filter(c => !filterArray.includes(c.type))) {
+ const spocsConfig = component.spocs;
+
+ if (spocsConfig || component.feed) {
+ // TODO make sure this still works for different loading cases.
+ if (component.feed && !feeds.data[component.feed.url] || spocsConfig && spocsConfig.positions && spocsConfig.positions.length && !spocs.loaded) {
+ components.push(placeholderComponent(component));
+ return renderedLayoutArray;
+ }
+
+ if (component.feed) {
+ components.push(handleComponentWithFeed(component));
+ } else {
+ components.push(handleComponent(component));
+ }
+ } else {
+ components.push(component);
+ }
+ }
+ }
+
+ return renderedLayoutArray;
+ };
+
+ const layoutRender = renderLayout();
+ return {
+ layoutRender
+ };
+};
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
+/* 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 ALLOWED_CSS_URL_PREFIXES = ["chrome://", "resource://", "https://img-getpocket.cdn.mozilla.net/"];
+const DUMMY_CSS_SELECTOR = "DUMMY#CSS.SELECTOR";
+/**
+ * Validate a CSS declaration. The values are assumed to be normalized by CSSOM.
+ */
+
+function isAllowedCSS(property, value) {
+ // Bug 1454823: INTERNAL properties, e.g., -moz-context-properties, are
+ // exposed but their values aren't resulting in getting nothing. Fortunately,
+ // we don't care about validating the values of the current set of properties.
+ if (value === undefined) {
+ return true;
+ } // Make sure all urls are of the allowed protocols/prefixes
+
+
+ const urls = value.match(/url\("[^"]+"\)/g);
+ return !urls || urls.every(url => ALLOWED_CSS_URL_PREFIXES.some(prefix => url.slice(5).startsWith(prefix)));
+}
+class _DiscoveryStreamBase extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onStyleMount = this.onStyleMount.bind(this);
+ }
+
+ onStyleMount(style) {
+ // Unmounting style gets rid of old styles, so nothing else to do
+ if (!style) {
+ return;
+ }
+
+ const {
+ sheet
+ } = style;
+ const styles = JSON.parse(style.dataset.styles);
+ styles.forEach((row, rowIndex) => {
+ row.forEach((component, componentIndex) => {
+ // Nothing to do without optional styles overrides
+ if (!component) {
+ return;
+ }
+
+ Object.entries(component).forEach(([selectors, declarations]) => {
+ // Start with a dummy rule to validate declarations and selectors
+ sheet.insertRule(`${DUMMY_CSS_SELECTOR} {}`);
+ const [rule] = sheet.cssRules; // Validate declarations and remove any offenders. CSSOM silently
+ // discards invalid entries, so here we apply extra restrictions.
+
+ rule.style = declarations;
+ [...rule.style].forEach(property => {
+ const value = rule.style[property];
+
+ if (!isAllowedCSS(property, value)) {
+ console.error(`Bad CSS declaration ${property}: ${value}`);
+ rule.style.removeProperty(property);
+ }
+ }); // Set the actual desired selectors scoped to the component
+
+ const prefix = `.ds-layout > .ds-column:nth-child(${rowIndex + 1}) .ds-column-grid > :nth-child(${componentIndex + 1})`; // NB: Splitting on "," doesn't work with strings with commas, but
+ // we're okay with not supporting those selectors
+
+ rule.selectorText = selectors.split(",").map(selector => prefix + ( // Assume :pseudo-classes are for component instead of descendant
+ selector[0] === ":" ? "" : " ") + selector).join(","); // CSSOM silently ignores bad selectors, so we'll be noisy instead
+
+ if (rule.selectorText === DUMMY_CSS_SELECTOR) {
+ console.error(`Bad CSS selector ${selectors}`);
+ }
+ });
+ });
+ });
+ }
+
+ renderComponent(component, embedWidth) {
+ var _component$header;
+
+ switch (component.type) {
+ case "Highlights":
+ return /*#__PURE__*/external_React_default().createElement(Highlights, null);
+
+ case "TopSites":
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-top-sites"
+ }, /*#__PURE__*/external_React_default().createElement(TopSites_TopSites, {
+ isFixed: true,
+ title: (_component$header = component.header) === null || _component$header === void 0 ? void 0 : _component$header.title
+ }));
+
+ case "TextPromo":
+ return /*#__PURE__*/external_React_default().createElement(DSTextPromo, {
+ dispatch: this.props.dispatch,
+ type: component.type,
+ data: component.data
+ });
+
+ case "Signup":
+ return /*#__PURE__*/external_React_default().createElement(DSSignup, {
+ dispatch: this.props.dispatch,
+ type: component.type,
+ data: component.data
+ });
+
+ case "Message":
+ return /*#__PURE__*/external_React_default().createElement(DSMessage, {
+ title: component.header && component.header.title,
+ subtitle: component.header && component.header.subtitle,
+ link_text: component.header && component.header.link_text,
+ link_url: component.header && component.header.link_url,
+ icon: component.header && component.header.icon,
+ essentialReadsHeader: component.essentialReadsHeader,
+ editorsPicksHeader: component.editorsPicksHeader
+ });
+
+ case "SectionTitle":
+ return /*#__PURE__*/external_React_default().createElement(SectionTitle, {
+ header: component.header
+ });
+
+ case "Navigation":
+ return /*#__PURE__*/external_React_default().createElement(Navigation, {
+ dispatch: this.props.dispatch,
+ links: component.properties.links,
+ extraLinks: component.properties.extraLinks,
+ alignment: component.properties.alignment,
+ explore_topics: component.properties.explore_topics,
+ header: component.header,
+ locale: this.props.App.locale,
+ newFooterSection: component.newFooterSection,
+ privacyNoticeURL: component.properties.privacyNoticeURL
+ });
+
+ case "CollectionCardGrid":
+ const {
+ DiscoveryStream
+ } = this.props;
+ return /*#__PURE__*/external_React_default().createElement(CollectionCardGrid, {
+ data: component.data,
+ feed: component.feed,
+ spocs: DiscoveryStream.spocs,
+ placement: component.placement,
+ type: component.type,
+ items: component.properties.items,
+ dismissible: this.props.DiscoveryStream.isCollectionDismissible,
+ dispatch: this.props.dispatch
+ });
+
+ case "CardGrid":
+ return /*#__PURE__*/external_React_default().createElement(CardGrid, {
+ title: component.header && component.header.title,
+ data: component.data,
+ feed: component.feed,
+ widgets: component.widgets,
+ type: component.type,
+ dispatch: this.props.dispatch,
+ items: component.properties.items,
+ hybridLayout: component.properties.hybridLayout,
+ hideCardBackground: component.properties.hideCardBackground,
+ fourCardLayout: component.properties.fourCardLayout,
+ compactGrid: component.properties.compactGrid,
+ essentialReadsHeader: component.properties.essentialReadsHeader,
+ onboardingExperience: component.properties.onboardingExperience,
+ editorsPicksHeader: component.properties.editorsPicksHeader,
+ recentSavesEnabled: this.props.DiscoveryStream.recentSavesEnabled,
+ hideDescriptions: this.props.DiscoveryStream.hideDescriptions
+ });
+
+ case "HorizontalRule":
+ return /*#__PURE__*/external_React_default().createElement(HorizontalRule, null);
+
+ case "PrivacyLink":
+ return /*#__PURE__*/external_React_default().createElement(PrivacyLink, {
+ properties: component.properties
+ });
+
+ default:
+ return /*#__PURE__*/external_React_default().createElement("div", null, component.type);
+ }
+ }
+
+ renderStyles(styles) {
+ // Use json string as both the key and styles to render so React knows when
+ // to unmount and mount a new instance for new styles.
+ const json = JSON.stringify(styles);
+ return /*#__PURE__*/external_React_default().createElement("style", {
+ key: json,
+ "data-styles": json,
+ ref: this.onStyleMount
+ });
+ }
+
+ render() {
+ const {
+ locale
+ } = this.props; // Select layout render data by adding spocs and position to recommendations
+
+ const {
+ layoutRender
+ } = selectLayoutRender({
+ state: this.props.DiscoveryStream,
+ prefs: this.props.Prefs.values,
+ locale
+ });
+ const {
+ config
+ } = this.props.DiscoveryStream; // Allow rendering without extracting special components
+
+ if (!config.collapsible) {
+ return this.renderLayout(layoutRender);
+ } // Find the first component of a type and remove it from layout
+
+
+ const extractComponent = type => {
+ for (const [rowIndex, row] of Object.entries(layoutRender)) {
+ for (const [index, component] of Object.entries(row.components)) {
+ if (component.type === type) {
+ // Remove the row if it was the only component or the single item
+ if (row.components.length === 1) {
+ layoutRender.splice(rowIndex, 1);
+ } else {
+ row.components.splice(index, 1);
+ }
+
+ return component;
+ }
+ }
+ }
+
+ return null;
+ }; // Get "topstories" Section state for default values
+
+
+ const topStories = this.props.Sections.find(s => s.id === "topstories");
+
+ if (!topStories) {
+ return null;
+ } // Extract TopSites to render before the rest and Message to use for header
+
+
+ const topSites = extractComponent("TopSites");
+ const sponsoredCollection = extractComponent("CollectionCardGrid");
+ const message = extractComponent("Message") || {
+ header: {
+ link_text: topStories.learnMore.link.message,
+ link_url: topStories.learnMore.link.href,
+ title: topStories.title
+ }
+ };
+ const privacyLinkComponent = extractComponent("PrivacyLink");
+ let learnMore = {
+ link: {
+ href: message.header.link_url,
+ message: message.header.link_text
+ }
+ };
+ let sectionTitle = message.header.title;
+ let subTitle = ""; // If we're in one of these experiments, override the default message.
+ // For now this is English only.
+
+ if (message.essentialReadsHeader || message.editorsPicksHeader) {
+ learnMore = null;
+ subTitle = "Recommended By Pocket";
+
+ if (message.essentialReadsHeader) {
+ sectionTitle = "Today’s Essential Reads";
+ } else if (message.editorsPicksHeader) {
+ sectionTitle = "Editor’s Picks";
+ }
+ } // Render a DS-style TopSites then the rest if any in a collapsible section
+
+
+ return /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, this.props.DiscoveryStream.isPrivacyInfoModalVisible && /*#__PURE__*/external_React_default().createElement(DSPrivacyModal, {
+ dispatch: this.props.dispatch
+ }), topSites && this.renderLayout([{
+ width: 12,
+ components: [topSites]
+ }]), sponsoredCollection && this.renderLayout([{
+ width: 12,
+ components: [sponsoredCollection]
+ }]), !!layoutRender.length && /*#__PURE__*/external_React_default().createElement(CollapsibleSection, {
+ className: "ds-layout",
+ collapsed: topStories.pref.collapsed,
+ dispatch: this.props.dispatch,
+ id: topStories.id,
+ isFixed: true,
+ learnMore: learnMore,
+ privacyNoticeURL: topStories.privacyNoticeURL,
+ showPrefName: topStories.pref.feed,
+ title: sectionTitle,
+ subTitle: subTitle,
+ eventSource: "CARDGRID"
+ }, this.renderLayout(layoutRender)), this.renderLayout([{
+ width: 12,
+ components: [{
+ type: "Highlights"
+ }]
+ }]), privacyLinkComponent && this.renderLayout([{
+ width: 12,
+ components: [privacyLinkComponent]
+ }]));
+ }
+
+ renderLayout(layoutRender) {
+ const styles = [];
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "discovery-stream ds-layout"
+ }, layoutRender.map((row, rowIndex) => /*#__PURE__*/external_React_default().createElement("div", {
+ key: `row-${rowIndex}`,
+ className: `ds-column ds-column-${row.width}`
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "ds-column-grid"
+ }, row.components.map((component, componentIndex) => {
+ if (!component) {
+ return null;
+ }
+
+ styles[rowIndex] = [...(styles[rowIndex] || []), component.styles];
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ key: `component-${componentIndex}`
+ }, this.renderComponent(component, row.width));
+ })))), this.renderStyles(styles));
+ }
+
+}
+const DiscoveryStreamBase = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ DiscoveryStream: state.DiscoveryStream,
+ Prefs: state.Prefs,
+ Sections: state.Sections,
+ document: __webpack_require__.g.document,
+ App: state.App
+}))(_DiscoveryStreamBase);
+;// CONCATENATED MODULE: ./content-src/components/CustomizeMenu/BackgroundsSection/BackgroundsSection.jsx
+/* 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/. */
+
+class BackgroundsSection extends (external_React_default()).PureComponent {
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("div", null);
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx
+/* 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/. */
+
+
+class ContentSection extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onPreferenceSelect = this.onPreferenceSelect.bind(this); // Refs are necessary for dynamically measuring drawer heights for slide animations
+
+ this.topSitesDrawerRef = /*#__PURE__*/external_React_default().createRef();
+ this.pocketDrawerRef = /*#__PURE__*/external_React_default().createRef();
+ }
+
+ inputUserEvent(eventSource, status) {
+ this.props.dispatch(actionCreators.UserEvent({
+ event: "PREF_CHANGED",
+ source: eventSource,
+ value: {
+ status,
+ menu_source: "CUSTOMIZE_MENU"
+ }
+ }));
+ }
+
+ onPreferenceSelect(e) {
+ let prefName = e.target.getAttribute("preference");
+ const eventSource = e.target.getAttribute("eventSource"); // TOP_SITES, TOP_STORIES, HIGHLIGHTS
+
+ let value;
+
+ if (e.target.nodeName === "SELECT") {
+ value = parseInt(e.target.value, 10);
+ } else if (e.target.nodeName === "INPUT") {
+ value = e.target.checked;
+
+ if (eventSource) {
+ this.inputUserEvent(eventSource, value);
+ }
+ }
+
+ this.props.setPref(prefName, value);
+ }
+
+ componentDidMount() {
+ this.setDrawerMargins();
+ }
+
+ componentDidUpdate() {
+ this.setDrawerMargins();
+ }
+
+ setDrawerMargins() {
+ this.setDrawerMargin(`TOP_SITES`, this.props.enabledSections.topSitesEnabled);
+ this.setDrawerMargin(`TOP_STORIES`, this.props.enabledSections.pocketEnabled);
+ }
+
+ setDrawerMargin(drawerID, isOpen) {
+ let drawerRef;
+
+ if (drawerID === `TOP_SITES`) {
+ drawerRef = this.topSitesDrawerRef.current;
+ } else if (drawerID === `TOP_STORIES`) {
+ drawerRef = this.pocketDrawerRef.current;
+ } else {
+ return;
+ }
+
+ let drawerHeight;
+
+ if (drawerRef) {
+ var _window$getComputedSt;
+
+ drawerHeight = parseFloat((_window$getComputedSt = window.getComputedStyle(drawerRef)) === null || _window$getComputedSt === void 0 ? void 0 : _window$getComputedSt.height);
+
+ if (isOpen) {
+ drawerRef.style.marginTop = `0`;
+ } else {
+ drawerRef.style.marginTop = `-${drawerHeight}px`;
+ }
+ }
+ }
+
+ render() {
+ const {
+ enabledSections,
+ mayHaveSponsoredTopSites,
+ pocketRegion,
+ mayHaveSponsoredStories,
+ mayHaveRecentSaves,
+ openPreferences
+ } = this.props;
+ const {
+ topSitesEnabled,
+ pocketEnabled,
+ highlightsEnabled,
+ showSponsoredTopSitesEnabled,
+ showSponsoredPocketEnabled,
+ showRecentSavesEnabled,
+ topSitesRowsCount
+ } = enabledSections;
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "home-section"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ id: "shortcuts-section",
+ className: "section"
+ }, /*#__PURE__*/external_React_default().createElement("label", {
+ className: "switch"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ id: "shortcuts-toggle",
+ checked: topSitesEnabled,
+ type: "checkbox",
+ onChange: this.onPreferenceSelect,
+ preference: "feeds.topsites",
+ "aria-labelledby": "custom-shortcuts-title",
+ "aria-describedby": "custom-shortcuts-subtitle",
+ eventSource: "TOP_SITES"
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "slider",
+ role: "presentation"
+ })), /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("h2", {
+ id: "custom-shortcuts-title",
+ className: "title"
+ }, /*#__PURE__*/external_React_default().createElement("label", {
+ htmlFor: "shortcuts-toggle",
+ "data-l10n-id": "newtab-custom-shortcuts-title"
+ })), /*#__PURE__*/external_React_default().createElement("p", {
+ id: "custom-shortcuts-subtitle",
+ className: "subtitle",
+ "data-l10n-id": "newtab-custom-shortcuts-subtitle"
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "more-info-top-wrapper"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "more-information",
+ ref: this.topSitesDrawerRef
+ }, /*#__PURE__*/external_React_default().createElement("select", {
+ id: "row-selector",
+ className: "selector",
+ name: "row-count",
+ preference: "topSitesRows",
+ value: topSitesRowsCount,
+ onChange: this.onPreferenceSelect,
+ disabled: !topSitesEnabled,
+ "aria-labelledby": "custom-shortcuts-title"
+ }, /*#__PURE__*/external_React_default().createElement("option", {
+ value: "1",
+ "data-l10n-id": "newtab-custom-row-selector",
+ "data-l10n-args": "{\"num\": 1}"
+ }), /*#__PURE__*/external_React_default().createElement("option", {
+ value: "2",
+ "data-l10n-id": "newtab-custom-row-selector",
+ "data-l10n-args": "{\"num\": 2}"
+ }), /*#__PURE__*/external_React_default().createElement("option", {
+ value: "3",
+ "data-l10n-id": "newtab-custom-row-selector",
+ "data-l10n-args": "{\"num\": 3}"
+ }), /*#__PURE__*/external_React_default().createElement("option", {
+ value: "4",
+ "data-l10n-id": "newtab-custom-row-selector",
+ "data-l10n-args": "{\"num\": 4}"
+ })), mayHaveSponsoredTopSites && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "check-wrapper",
+ role: "presentation"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ id: "sponsored-shortcuts",
+ className: "sponsored-checkbox",
+ disabled: !topSitesEnabled,
+ checked: showSponsoredTopSitesEnabled,
+ type: "checkbox",
+ onChange: this.onPreferenceSelect,
+ preference: "showSponsoredTopSites",
+ eventSource: "SPONSORED_TOP_SITES"
+ }), /*#__PURE__*/external_React_default().createElement("label", {
+ className: "sponsored",
+ htmlFor: "sponsored-shortcuts",
+ "data-l10n-id": "newtab-custom-sponsored-sites"
+ })))))), pocketRegion && /*#__PURE__*/external_React_default().createElement("div", {
+ id: "pocket-section",
+ className: "section"
+ }, /*#__PURE__*/external_React_default().createElement("label", {
+ className: "switch"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ id: "pocket-toggle",
+ checked: pocketEnabled,
+ type: "checkbox",
+ onChange: this.onPreferenceSelect,
+ preference: "feeds.section.topstories",
+ "aria-labelledby": "custom-pocket-title",
+ "aria-describedby": "custom-pocket-subtitle",
+ eventSource: "TOP_STORIES"
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "slider",
+ role: "presentation"
+ })), /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("h2", {
+ id: "custom-pocket-title",
+ className: "title"
+ }, /*#__PURE__*/external_React_default().createElement("label", {
+ htmlFor: "pocket-toggle",
+ "data-l10n-id": "newtab-custom-pocket-title"
+ })), /*#__PURE__*/external_React_default().createElement("p", {
+ id: "custom-pocket-subtitle",
+ className: "subtitle",
+ "data-l10n-id": "newtab-custom-pocket-subtitle"
+ }), (mayHaveSponsoredStories || mayHaveRecentSaves) && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "more-info-pocket-wrapper"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "more-information",
+ ref: this.pocketDrawerRef
+ }, mayHaveSponsoredStories && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "check-wrapper",
+ role: "presentation"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ id: "sponsored-pocket",
+ className: "sponsored-checkbox",
+ disabled: !pocketEnabled,
+ checked: showSponsoredPocketEnabled,
+ type: "checkbox",
+ onChange: this.onPreferenceSelect,
+ preference: "showSponsored",
+ eventSource: "POCKET_SPOCS"
+ }), /*#__PURE__*/external_React_default().createElement("label", {
+ className: "sponsored",
+ htmlFor: "sponsored-pocket",
+ "data-l10n-id": "newtab-custom-pocket-sponsored"
+ })), mayHaveRecentSaves && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "check-wrapper",
+ role: "presentation"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ id: "recent-saves-pocket",
+ className: "sponsored-checkbox",
+ disabled: !pocketEnabled,
+ checked: showRecentSavesEnabled,
+ type: "checkbox",
+ onChange: this.onPreferenceSelect,
+ preference: "showRecentSaves",
+ eventSource: "POCKET_RECENT_SAVES"
+ }), /*#__PURE__*/external_React_default().createElement("label", {
+ className: "sponsored",
+ htmlFor: "recent-saves-pocket",
+ "data-l10n-id": "newtab-custom-pocket-show-recent-saves"
+ })))))), /*#__PURE__*/external_React_default().createElement("div", {
+ id: "recent-section",
+ className: "section"
+ }, /*#__PURE__*/external_React_default().createElement("label", {
+ className: "switch"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ id: "highlights-toggle",
+ checked: highlightsEnabled,
+ type: "checkbox",
+ onChange: this.onPreferenceSelect,
+ preference: "feeds.section.highlights",
+ eventSource: "HIGHLIGHTS",
+ "aria-labelledby": "custom-recent-title",
+ "aria-describedby": "custom-recent-subtitle"
+ }), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "slider",
+ role: "presentation"
+ })), /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("h2", {
+ id: "custom-recent-title",
+ className: "title"
+ }, /*#__PURE__*/external_React_default().createElement("label", {
+ htmlFor: "highlights-toggle",
+ "data-l10n-id": "newtab-custom-recent-title"
+ })), /*#__PURE__*/external_React_default().createElement("p", {
+ id: "custom-recent-subtitle",
+ className: "subtitle",
+ "data-l10n-id": "newtab-custom-recent-subtitle"
+ }))), /*#__PURE__*/external_React_default().createElement("span", {
+ className: "divider",
+ role: "separator"
+ }), /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("button", {
+ id: "settings-link",
+ className: "external-link",
+ onClick: openPreferences,
+ "data-l10n-id": "newtab-custom-settings"
+ })));
+ }
+
+}
+;// CONCATENATED MODULE: ./content-src/components/CustomizeMenu/CustomizeMenu.jsx
+/* 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/. */
+
+
+
+
+
+class _CustomizeMenu extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onEntered = this.onEntered.bind(this);
+ this.onExited = this.onExited.bind(this);
+ }
+
+ onEntered() {
+ if (this.closeButton) {
+ this.closeButton.focus();
+ }
+ }
+
+ onExited() {
+ if (this.openButton) {
+ this.openButton.focus();
+ }
+ }
+
+ render() {
+ return /*#__PURE__*/external_React_default().createElement("span", null, /*#__PURE__*/external_React_default().createElement(external_ReactTransitionGroup_namespaceObject.CSSTransition, {
+ timeout: 300,
+ classNames: "personalize-animate",
+ in: !this.props.showing,
+ appear: true
+ }, /*#__PURE__*/external_React_default().createElement("button", {
+ className: "icon icon-settings personalize-button",
+ onClick: () => this.props.onOpen(),
+ "data-l10n-id": "newtab-personalize-icon-label",
+ ref: c => this.openButton = c
+ })), /*#__PURE__*/external_React_default().createElement(external_ReactTransitionGroup_namespaceObject.CSSTransition, {
+ timeout: 250,
+ classNames: "customize-animate",
+ in: this.props.showing,
+ onEntered: this.onEntered,
+ onExited: this.onExited,
+ appear: true
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "customize-menu",
+ role: "dialog",
+ "data-l10n-id": "newtab-personalize-dialog-label"
+ }, /*#__PURE__*/external_React_default().createElement("button", {
+ onClick: () => this.props.onClose(),
+ className: "close-button",
+ "data-l10n-id": "newtab-custom-close-button",
+ ref: c => this.closeButton = c
+ }), /*#__PURE__*/external_React_default().createElement(BackgroundsSection, null), /*#__PURE__*/external_React_default().createElement(ContentSection, {
+ openPreferences: this.props.openPreferences,
+ setPref: this.props.setPref,
+ enabledSections: this.props.enabledSections,
+ pocketRegion: this.props.pocketRegion,
+ mayHaveSponsoredTopSites: this.props.mayHaveSponsoredTopSites,
+ mayHaveSponsoredStories: this.props.DiscoveryStream.config.show_spocs,
+ mayHaveRecentSaves: this.props.DiscoveryStream.recentSavesEnabled,
+ dispatch: this.props.dispatch
+ }))));
+ }
+
+}
+const CustomizeMenu = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ DiscoveryStream: state.DiscoveryStream
+}))(_CustomizeMenu);
+;// CONCATENATED MODULE: ./content-src/components/Search/Search.jsx
+/* 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/. */
+
+/* globals ContentSearchUIController, ContentSearchHandoffUIController */
+
+
+function Search_extends() { Search_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; }; return Search_extends.apply(this, arguments); }
+
+
+
+
+
+class _Search extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.onSearchClick = this.onSearchClick.bind(this);
+ this.onSearchHandoffClick = this.onSearchHandoffClick.bind(this);
+ this.onSearchHandoffPaste = this.onSearchHandoffPaste.bind(this);
+ this.onSearchHandoffDrop = this.onSearchHandoffDrop.bind(this);
+ this.onInputMount = this.onInputMount.bind(this);
+ this.onInputMountHandoff = this.onInputMountHandoff.bind(this);
+ this.onSearchHandoffButtonMount = this.onSearchHandoffButtonMount.bind(this);
+ }
+
+ handleEvent(event) {
+ // Also track search events with our own telemetry
+ if (event.detail.type === "Search") {
+ this.props.dispatch(actionCreators.UserEvent({
+ event: "SEARCH"
+ }));
+ }
+ }
+
+ onSearchClick(event) {
+ window.gContentSearchController.search(event);
+ }
+
+ doSearchHandoff(text) {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.HANDOFF_SEARCH_TO_AWESOMEBAR,
+ data: {
+ text
+ }
+ }));
+ this.props.dispatch({
+ type: actionTypes.FAKE_FOCUS_SEARCH
+ });
+ this.props.dispatch(actionCreators.UserEvent({
+ event: "SEARCH_HANDOFF"
+ }));
+
+ if (text) {
+ this.props.dispatch({
+ type: actionTypes.DISABLE_SEARCH
+ });
+ }
+ }
+
+ onSearchHandoffClick(event) {
+ // When search hand-off is enabled, we render a big button that is styled to
+ // look like a search textbox. If the button is clicked, we style
+ // the button as if it was a focused search box and show a fake cursor but
+ // really focus the awesomebar without the focus styles ("hidden focus").
+ event.preventDefault();
+ this.doSearchHandoff();
+ }
+
+ onSearchHandoffPaste(event) {
+ event.preventDefault();
+ this.doSearchHandoff(event.clipboardData.getData("Text"));
+ }
+
+ onSearchHandoffDrop(event) {
+ event.preventDefault();
+ let text = event.dataTransfer.getData("text");
+
+ if (text) {
+ this.doSearchHandoff(text);
+ }
+ }
+
+ 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 = 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 = 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);
+ }
+ }
+
+ onInputMountHandoff(input) {
+ if (input) {
+ // The handoff UI controller helps us set the search icon and reacts to
+ // changes to default engine to keep everything in sync.
+ this._handoffSearchController = new ContentSearchHandoffUIController();
+ }
+ }
+
+ getDefaultEngineName() {
+ // _handoffSearchController will manage engine names once it is initialized.
+ return this.props.Prefs.values["urlbar.placeholderName"];
+ }
+
+ getHandoffInputL10nAttributes() {
+ let defaultEngineName = this.getDefaultEngineName();
+ return defaultEngineName ? {
+ "data-l10n-id": "newtab-search-box-handoff-input",
+ "data-l10n-args": `{"engine": "${defaultEngineName}"}`
+ } : {
+ "data-l10n-id": "newtab-search-box-handoff-input-no-engine"
+ };
+ }
+
+ getHandoffTextL10nAttributes() {
+ let defaultEngineName = this.getDefaultEngineName();
+ return defaultEngineName ? {
+ "data-l10n-id": "newtab-search-box-handoff-text",
+ "data-l10n-args": `{"engine": "${defaultEngineName}"}`
+ } : {
+ "data-l10n-id": "newtab-search-box-handoff-text-no-engine"
+ };
+ }
+
+ onSearchHandoffButtonMount(button) {
+ // Keep a reference to the button for use during "paste" event handling.
+ this._searchHandoffButton = button;
+ }
+ /*
+ * 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() {
+ const wrapperClassName = ["search-wrapper", this.props.disable && "search-disabled", this.props.fakeFocus && "fake-focus"].filter(v => v).join(" ");
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: wrapperClassName
+ }, this.props.showLogo && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "logo-and-wordmark"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "logo"
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "wordmark"
+ })), !this.props.handoffEnabled && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "search-inner-wrapper"
+ }, /*#__PURE__*/external_React_default().createElement("input", {
+ id: "newtab-search-text",
+ "data-l10n-id": "newtab-search-box-input",
+ maxLength: "256",
+ ref: this.onInputMount,
+ type: "search"
+ }), /*#__PURE__*/external_React_default().createElement("button", {
+ id: "searchSubmit",
+ className: "search-button",
+ "data-l10n-id": "newtab-search-box-search-button",
+ onClick: this.onSearchClick
+ })), this.props.handoffEnabled && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "search-inner-wrapper"
+ }, /*#__PURE__*/external_React_default().createElement("button", Search_extends({
+ className: "search-handoff-button"
+ }, this.getHandoffInputL10nAttributes(), {
+ ref: this.onSearchHandoffButtonMount,
+ onClick: this.onSearchHandoffClick,
+ tabIndex: "-1"
+ }), /*#__PURE__*/external_React_default().createElement("div", Search_extends({
+ className: "fake-textbox"
+ }, this.getHandoffTextL10nAttributes())), /*#__PURE__*/external_React_default().createElement("input", {
+ type: "search",
+ className: "fake-editable",
+ tabIndex: "-1",
+ "aria-hidden": "true",
+ onDrop: this.onSearchHandoffDrop,
+ onPaste: this.onSearchHandoffPaste,
+ ref: this.onInputMountHandoff
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: "fake-caret"
+ }))));
+ }
+
+}
+const Search_Search = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ Prefs: state.Prefs
+}))(_Search);
+;// CONCATENATED MODULE: ./content-src/components/Base/Base.jsx
+function Base_extends() { Base_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; }; return Base_extends.apply(this, arguments); }
+
+/* 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 PrefsButton = ({
+ onClick,
+ icon
+}) => /*#__PURE__*/external_React_default().createElement("div", {
+ className: "prefs-button"
+}, /*#__PURE__*/external_React_default().createElement("button", {
+ className: `icon ${icon || "icon-settings"}`,
+ onClick: onClick,
+ "data-l10n-id": "newtab-settings-button"
+})); // Returns a function will not be continuously triggered when called. The
+// function will be triggered if called again after `wait` milliseconds.
+
+function debounce(func, wait) {
+ let timer;
+ return (...args) => {
+ if (timer) {
+ return;
+ }
+
+ let wakeUp = () => {
+ timer = null;
+ };
+
+ timer = setTimeout(wakeUp, wait);
+ func.apply(this, args);
+ };
+}
+
+class _Base extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.state = {
+ message: {}
+ };
+ this.notifyContent = this.notifyContent.bind(this);
+ }
+
+ notifyContent(state) {
+ this.setState(state);
+ }
+
+ componentWillUnmount() {
+ this.updateTheme();
+ }
+
+ componentWillUpdate() {
+ this.updateTheme();
+ }
+
+ updateTheme() {
+ const bodyClassName = ["activity-stream", // If we skipped the about:welcome overlay and removed the CSS classes
+ // we don't want to add them back to the Activity Stream view
+ document.body.classList.contains("inline-onboarding") ? "inline-onboarding" : ""].filter(v => v).join(" ");
+ __webpack_require__.g.document.body.className = bodyClassName;
+ }
+
+ render() {
+ const {
+ props
+ } = this;
+ const {
+ App
+ } = props;
+ const isDevtoolsEnabled = props.Prefs.values["asrouter.devtoolsEnabled"];
+
+ if (!App.initialized) {
+ return null;
+ }
+
+ return /*#__PURE__*/external_React_default().createElement(ErrorBoundary, {
+ className: "base-content-fallback"
+ }, /*#__PURE__*/external_React_default().createElement((external_React_default()).Fragment, null, /*#__PURE__*/external_React_default().createElement(BaseContent, Base_extends({}, this.props, {
+ adminContent: this.state
+ })), isDevtoolsEnabled ? /*#__PURE__*/external_React_default().createElement(ASRouterAdmin, {
+ notifyContent: this.notifyContent
+ }) : null));
+ }
+
+}
+class BaseContent extends (external_React_default()).PureComponent {
+ constructor(props) {
+ super(props);
+ this.openPreferences = this.openPreferences.bind(this);
+ this.openCustomizationMenu = this.openCustomizationMenu.bind(this);
+ this.closeCustomizationMenu = this.closeCustomizationMenu.bind(this);
+ this.handleOnKeyDown = this.handleOnKeyDown.bind(this);
+ this.onWindowScroll = debounce(this.onWindowScroll.bind(this), 5);
+ this.setPref = this.setPref.bind(this);
+ this.state = {
+ fixedSearch: false
+ };
+ }
+
+ componentDidMount() {
+ __webpack_require__.g.addEventListener("scroll", this.onWindowScroll);
+ __webpack_require__.g.addEventListener("keydown", this.handleOnKeyDown);
+ }
+
+ componentWillUnmount() {
+ __webpack_require__.g.removeEventListener("scroll", this.onWindowScroll);
+ __webpack_require__.g.removeEventListener("keydown", this.handleOnKeyDown);
+ }
+
+ onWindowScroll() {
+ const prefs = this.props.Prefs.values;
+ const SCROLL_THRESHOLD = prefs["logowordmark.alwaysVisible"] ? 179 : 34;
+
+ if (__webpack_require__.g.scrollY > SCROLL_THRESHOLD && !this.state.fixedSearch) {
+ this.setState({
+ fixedSearch: true
+ });
+ } else if (__webpack_require__.g.scrollY <= SCROLL_THRESHOLD && this.state.fixedSearch) {
+ this.setState({
+ fixedSearch: false
+ });
+ }
+ }
+
+ openPreferences() {
+ this.props.dispatch(actionCreators.OnlyToMain({
+ type: actionTypes.SETTINGS_OPEN
+ }));
+ this.props.dispatch(actionCreators.UserEvent({
+ event: "OPEN_NEWTAB_PREFS"
+ }));
+ }
+
+ openCustomizationMenu() {
+ this.props.dispatch({
+ type: actionTypes.SHOW_PERSONALIZE
+ });
+ this.props.dispatch(actionCreators.UserEvent({
+ event: "SHOW_PERSONALIZE"
+ }));
+ }
+
+ closeCustomizationMenu() {
+ if (this.props.App.customizeMenuVisible) {
+ this.props.dispatch({
+ type: actionTypes.HIDE_PERSONALIZE
+ });
+ this.props.dispatch(actionCreators.UserEvent({
+ event: "HIDE_PERSONALIZE"
+ }));
+ }
+ }
+
+ handleOnKeyDown(e) {
+ if (e.key === "Escape") {
+ this.closeCustomizationMenu();
+ }
+ }
+
+ setPref(pref, value) {
+ this.props.dispatch(actionCreators.SetPref(pref, value));
+ }
+
+ render() {
+ const {
+ props
+ } = this;
+ const {
+ App
+ } = props;
+ const {
+ initialized,
+ customizeMenuVisible
+ } = App;
+ const prefs = props.Prefs.values;
+ const isDiscoveryStream = props.DiscoveryStream.config && props.DiscoveryStream.config.enabled;
+ let filteredSections = props.Sections.filter(section => section.id !== "topstories");
+ const pocketEnabled = prefs["feeds.section.topstories"] && prefs["feeds.system.topstories"];
+ const noSectionsEnabled = !prefs["feeds.topsites"] && !pocketEnabled && filteredSections.filter(section => section.enabled).length === 0;
+ const searchHandoffEnabled = prefs["improvesearch.handoffToAwesomebar"];
+ const enabledSections = {
+ topSitesEnabled: prefs["feeds.topsites"],
+ pocketEnabled: prefs["feeds.section.topstories"],
+ highlightsEnabled: prefs["feeds.section.highlights"],
+ showSponsoredTopSitesEnabled: prefs.showSponsoredTopSites,
+ showSponsoredPocketEnabled: prefs.showSponsored,
+ showRecentSavesEnabled: prefs.showRecentSaves,
+ topSitesRowsCount: prefs.topSitesRows
+ };
+ const pocketRegion = prefs["feeds.system.topstories"];
+ const {
+ mayHaveSponsoredTopSites
+ } = prefs;
+ const outerClassName = ["outer-wrapper", isDiscoveryStream && pocketEnabled && "ds-outer-wrapper-search-alignment", isDiscoveryStream && "ds-outer-wrapper-breakpoint-override", prefs.showSearch && this.state.fixedSearch && !noSectionsEnabled && "fixed-search", prefs.showSearch && noSectionsEnabled && "only-search", prefs["logowordmark.alwaysVisible"] && "visible-logo"].filter(v => v).join(" ");
+ const hasSnippet = prefs["feeds.snippets"] && this.props.adminContent && this.props.adminContent.message && this.props.adminContent.message.id;
+ return /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement(CustomizeMenu, {
+ onClose: this.closeCustomizationMenu,
+ onOpen: this.openCustomizationMenu,
+ openPreferences: this.openPreferences,
+ setPref: this.setPref,
+ enabledSections: enabledSections,
+ pocketRegion: pocketRegion,
+ mayHaveSponsoredTopSites: mayHaveSponsoredTopSites,
+ showing: customizeMenuVisible
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: outerClassName,
+ onClick: this.closeCustomizationMenu
+ }, /*#__PURE__*/external_React_default().createElement("main", {
+ className: hasSnippet ? "has-snippet" : ""
+ }, prefs.showSearch && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "non-collapsible-section"
+ }, /*#__PURE__*/external_React_default().createElement(ErrorBoundary, null, /*#__PURE__*/external_React_default().createElement(Search_Search, Base_extends({
+ showLogo: noSectionsEnabled || prefs["logowordmark.alwaysVisible"],
+ handoffEnabled: searchHandoffEnabled
+ }, props.Search)))), /*#__PURE__*/external_React_default().createElement(ASRouterUISurface, {
+ adminContent: this.props.adminContent,
+ appUpdateChannel: this.props.Prefs.values.appUpdateChannel,
+ fxaEndpoint: this.props.Prefs.values.fxa_endpoint,
+ dispatch: this.props.dispatch
+ }), /*#__PURE__*/external_React_default().createElement("div", {
+ className: `body-wrapper${initialized ? " on" : ""}`
+ }, isDiscoveryStream ? /*#__PURE__*/external_React_default().createElement(ErrorBoundary, {
+ className: "borderless-error"
+ }, /*#__PURE__*/external_React_default().createElement(DiscoveryStreamBase, {
+ locale: props.App.locale
+ })) : /*#__PURE__*/external_React_default().createElement(Sections_Sections, null)), /*#__PURE__*/external_React_default().createElement(ConfirmDialog, null))));
+ }
+
+}
+const Base = (0,external_ReactRedux_namespaceObject.connect)(state => ({
+ App: state.App,
+ Prefs: state.Prefs,
+ Sections: state.Sections,
+ DiscoveryStream: state.DiscoveryStream,
+ Search: state.Search
+}))(_Base);
+;// CONCATENATED MODULE: ./content-src/lib/detect-user-session-start.js
+/* 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 detect_user_session_start_VISIBLE = "visible";
+const detect_user_session_start_VISIBILITY_CHANGE_EVENT = "visibilitychange";
+class DetectUserSessionStart {
+ constructor(store, options = {}) {
+ this._store = store; // Overrides for testing
+
+ this.document = options.document || __webpack_require__.g.document;
+ this._perfService = options.perfService || 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 === detect_user_session_start_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(detect_user_session_start_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(actionCreators.AlsoToMain({
+ type: 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 === detect_user_session_start_VISIBLE) {
+ this._sendEvent();
+
+ this.document.removeEventListener(detect_user_session_start_VISIBILITY_CHANGE_EVENT, this._onVisibilityChange);
+ }
+ }
+
+}
+;// CONCATENATED MODULE: external "Redux"
+const external_Redux_namespaceObject = Redux;
+;// CONCATENATED MODULE: ./content-src/lib/init-store.js
+/* 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/. */
+
+/* eslint-env mozilla/remote-page */
+
+
+const MERGE_STORE_ACTION = "NEW_TAB_INITIAL_STATE";
+const OUTGOING_MESSAGE_NAME = "ActivityStream:ContentToMain";
+const INCOMING_MESSAGE_NAME = "ActivityStream:MainToContent";
+const EARLY_QUEUED_ACTIONS = [actionTypes.SAVE_SESSION_PERF_DATA];
+/**
+ * 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 { ...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 (actionUtils.isSendToMain(action)) {
+ RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);
+ }
+
+ if (!skipLocal) {
+ next(action);
+ }
+};
+
+const rehydrationMiddleware = ({
+ getState
+}) => {
+ // NB: The parameter here is MiddlewareAPI which looks like a Store and shares
+ // the same getState, so attached properties are accessible from the store.
+ getState.didRehydrate = false;
+ getState.didRequestInitialState = false;
+ return next => action => {
+ if (getState.didRehydrate || window.__FROM_STARTUP_CACHE__) {
+ // Startup messages can be safely ignored by the about:home document
+ // stored in the startup cache.
+ if (window.__FROM_STARTUP_CACHE__ && action.meta && action.meta.isStartup) {
+ return null;
+ }
+
+ return next(action);
+ }
+
+ const isMergeStoreAction = action.type === MERGE_STORE_ACTION;
+ const isRehydrationRequest = action.type === actionTypes.NEW_TAB_STATE_REQUEST;
+
+ if (isRehydrationRequest) {
+ getState.didRequestInitialState = true;
+ return next(action);
+ }
+
+ if (isMergeStoreAction) {
+ getState.didRehydrate = true;
+ return next(action);
+ } // If init happened after our request was made, we need to re-request
+
+
+ if (getState.didRequestInitialState && action.type === actionTypes.INIT) {
+ return next(actionCreators.AlsoToMain({
+ type: actionTypes.NEW_TAB_STATE_REQUEST
+ }));
+ }
+
+ if (actionUtils.isBroadcastToContent(action) || actionUtils.isSendToOneContent(action) || 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 = ({
+ getState
+}) => {
+ // NB: The parameter here is MiddlewareAPI which looks like a Store and shares
+ // the same getState, so attached properties are accessible from the store.
+ getState.earlyActionQueue = [];
+ getState.receivedFromMain = false;
+ return next => action => {
+ if (getState.receivedFromMain) {
+ next(action);
+ } else if (actionUtils.isFromMain(action)) {
+ next(action);
+ getState.receivedFromMain = true; // Sending out all the early actions as main is ready now
+
+ getState.earlyActionQueue.forEach(next);
+ getState.earlyActionQueue.length = 0;
+ } else if (EARLY_QUEUED_ACTIONS.includes(action.type)) {
+ getState.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 = (0,external_Redux_namespaceObject.createStore)(mergeStateReducer((0,external_Redux_namespaceObject.combineReducers)(reducers)), initialState, __webpack_require__.g.RPMAddMessageListener && (0,external_Redux_namespaceObject.applyMiddleware)(queueEarlyMessageMiddleware, rehydrationMiddleware, messageMiddleware));
+
+ if (__webpack_require__.g.RPMAddMessageListener) {
+ __webpack_require__.g.RPMAddMessageListener(INCOMING_MESSAGE_NAME, msg => {
+ try {
+ store.dispatch(msg.data);
+ } catch (ex) {
+ console.error("Content msg:", msg, "Dispatch error: ", ex);
+ dump(`Content msg: ${JSON.stringify(msg)}\nDispatch error: ${ex}\n${ex.stack}`);
+ }
+ });
+ }
+
+ return store;
+}
+;// CONCATENATED MODULE: ./content-src/activity-stream.jsx
+/* 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 NewTab = ({
+ store
+}) => /*#__PURE__*/external_React_default().createElement(external_ReactRedux_namespaceObject.Provider, {
+ store: store
+}, /*#__PURE__*/external_React_default().createElement(Base, null));
+function renderWithoutState() {
+ const store = initStore(reducers);
+ new DetectUserSessionStart(store).sendEventOrAddListener(); // If this document has already gone into the background by the time we've reached
+ // here, we can deprioritize requesting the initial state until the event loop
+ // frees up. If, however, the visibility changes, we then send the request.
+
+ let didRequest = false;
+ let requestIdleCallbackId = 0;
+
+ function doRequest() {
+ if (!didRequest) {
+ if (requestIdleCallbackId) {
+ cancelIdleCallback(requestIdleCallbackId);
+ }
+
+ didRequest = true;
+ store.dispatch(actionCreators.AlsoToMain({
+ type: actionTypes.NEW_TAB_STATE_REQUEST
+ }));
+ }
+ }
+
+ if (document.hidden) {
+ requestIdleCallbackId = requestIdleCallback(doRequest);
+ addEventListener("visibilitychange", doRequest, {
+ once: true
+ });
+ } else {
+ doRequest();
+ }
+
+ external_ReactDOM_default().hydrate( /*#__PURE__*/external_React_default().createElement(NewTab, {
+ store: store
+ }), document.getElementById("root"));
+}
+function renderCache(initialState) {
+ const store = initStore(reducers, initialState);
+ new DetectUserSessionStart(store).sendEventOrAddListener();
+ external_ReactDOM_default().hydrate( /*#__PURE__*/external_React_default().createElement(NewTab, {
+ store: store
+ }), document.getElementById("root"));
+}
+NewtabRenderUtils = __webpack_exports__;
+/******/ })()
+; \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/confetti.svg b/browser/components/newtab/data/content/assets/confetti.svg
new file mode 100644
index 0000000000..e00cd95120
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/confetti.svg
@@ -0,0 +1,55 @@
+<!-- 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/. -->
+<svg width="574" height="210" xmlns="http://www.w3.org/2000/svg">
+<path d="M569.854 103.202C564.294 103.202 559.781 98.6802 559.781 93.1295C559.781 87.5788 564.303 83.0566 569.854 83.0566C575.413 83.0566 579.926 87.5788 579.926 93.1295C579.926 98.6802 575.404 103.202 569.854 103.202ZM569.854 83.9345C564.791 83.9345 560.668 88.0576 560.668 93.1206C560.668 98.1837 564.791 102.307 569.854 102.307C574.917 102.307 579.039 98.1837 579.039 93.1206C579.039 88.0576 574.917 83.9345 569.854 83.9345Z" fill="#FFF4DE"/>
+<path d="M577.231 23.4883C574.642 23.4883 572.531 21.378 572.531 18.7888C572.531 16.1997 574.642 14.0894 577.231 14.0894C579.82 14.0894 581.93 16.1997 581.93 18.7888C581.93 21.378 579.82 23.4883 577.231 23.4883ZM577.231 14.9761C575.129 14.9761 573.418 16.6874 573.418 18.7888C573.418 20.8903 575.129 22.6016 577.231 22.6016C579.332 22.6016 581.043 20.8903 581.043 18.7888C581.043 16.6874 579.332 14.9761 577.231 14.9761Z" fill="#F68FFF"/>
+<path d="M561.395 60.6054C558.806 60.6054 556.695 58.4951 556.695 55.9059C556.695 53.3168 558.806 51.2064 561.395 51.2064C563.984 51.2064 566.094 53.3168 566.094 55.9059C566.094 58.4951 563.984 60.6054 561.395 60.6054Z" fill="#F770FF"/>
+<path d="M498.691 109.897C496.102 109.897 493.992 107.787 493.992 105.197C493.992 102.608 496.102 100.498 498.691 100.498C501.281 100.498 503.391 102.608 503.391 105.197C503.391 107.787 501.281 109.897 498.691 109.897ZM498.691 101.385C496.59 101.385 494.879 103.096 494.879 105.197C494.879 107.299 496.59 109.01 498.691 109.01C500.793 109.01 502.504 107.299 502.504 105.197C502.504 103.096 500.793 101.385 498.691 101.385Z" fill="#073072"/>
+<path d="M499.471 57.8478C499.205 57.8478 498.939 57.8301 498.673 57.7946C495.569 57.3601 493.37 54.4872 493.769 51.3749L495.782 35.6538C495.977 34.1109 496.766 32.7543 498.008 31.8232C499.24 30.8922 500.774 30.5109 502.308 30.7415L517.975 33.1533C521.07 33.6321 523.224 36.5405 522.79 39.635C522.577 41.1602 521.779 42.4991 520.547 43.4124C519.314 44.3257 517.798 44.6981 516.282 44.4675L506.395 42.9513L505.128 52.8734C504.932 54.3985 504.152 55.7463 502.937 56.6773C501.918 57.4488 500.712 57.8478 499.471 57.8478ZM501.412 31.5661C500.375 31.5661 499.373 31.903 498.531 32.5326C497.485 33.3218 496.82 34.4656 496.651 35.769L494.638 51.4902C494.301 54.1148 496.163 56.5532 498.788 56.9168C500.074 57.0941 501.35 56.766 502.379 55.9769C503.407 55.1877 504.064 54.0527 504.232 52.7581L505.615 41.9316L516.397 43.5897C517.674 43.7848 518.959 43.4744 519.997 42.703C521.034 41.9316 521.708 40.7966 521.894 39.5109C522.267 36.8863 520.44 34.4301 517.824 34.0311L502.157 31.6193C501.909 31.5838 501.661 31.5661 501.412 31.5661Z" fill="#FF4AA2"/>
+<path d="M530.708 98.0773C529.316 98.0773 527.915 97.9 526.541 97.5364C522.285 96.428 518.712 93.7325 516.486 89.9374C511.893 82.1079 514.518 71.9996 522.347 67.4065C525.096 65.7927 528.687 66.6882 530.345 69.4104L530.442 69.5789C532.012 72.3542 531.107 75.8301 528.385 77.4882L528.234 77.5769C526.053 78.9069 525.335 81.7798 526.63 83.9788C527.924 86.1778 530.779 86.9493 533.005 85.6902L533.155 85.6015C535.931 84.032 539.504 84.9897 541.118 87.7384C542.758 90.5315 541.818 94.1404 539.025 95.7808C536.454 97.3059 533.599 98.0773 530.708 98.0773ZM525.309 67.4952C524.448 67.4952 523.588 67.7168 522.799 68.1779C515.396 72.5316 512.904 82.0902 517.258 89.4941C519.368 93.0852 522.737 95.63 526.771 96.6852C530.797 97.7315 534.991 97.1463 538.582 95.0448C540.958 93.6527 541.747 90.5847 540.355 88.2172C538.981 85.8852 535.957 85.0695 533.599 86.3995L533.448 86.4882C530.806 87.9867 527.401 87.0734 525.867 84.4488C524.333 81.833 525.184 78.4192 527.782 76.8409L527.933 76.7523C530.238 75.3424 531.01 72.3986 529.68 70.04L529.591 69.8892C528.651 68.3464 526.993 67.4952 525.309 67.4952Z" fill="#FFFF98"/>
+<path d="M543.095 28.5248C542.075 28.5248 541.037 28.2588 540.098 27.7002L524.838 18.6027C522.107 16.9712 521.167 13.4067 522.755 10.649L522.852 10.4806C524.528 7.77613 528.11 6.90717 530.841 8.52982L546.1 17.6273C547.448 18.4254 548.397 19.7111 548.778 21.2273C549.159 22.7436 548.929 24.3219 548.131 25.6697C547.04 27.5051 545.09 28.5248 543.095 28.5248ZM523.615 10.9416L523.526 11.0835C522.178 13.4244 522.976 16.448 525.29 17.8313L540.55 26.9288C542.908 28.3298 545.967 27.5583 547.368 25.2086C548.051 24.0648 548.246 22.7258 547.918 21.4401C547.59 20.1544 546.783 19.0638 545.639 18.3899L530.38 9.29238C528.074 7.90914 525.033 8.65396 523.615 10.9416Z" fill="#2AC3A2"/>
+<path d="M551.004 128.163C548.415 128.163 546.305 126.053 546.305 123.463C546.305 120.874 548.415 118.764 551.004 118.764C553.593 118.764 555.703 120.874 555.703 123.463C555.703 126.053 553.593 128.163 551.004 128.163ZM551.004 119.651C548.903 119.651 547.191 121.362 547.191 123.463C547.191 125.565 548.903 127.276 551.004 127.276C553.105 127.276 554.817 125.565 554.817 123.463C554.817 121.362 553.105 119.651 551.004 119.651Z" fill="#FF8A50"/>
+<path d="M575.12 176.08C574.517 176.08 573.897 175.982 573.294 175.778L558.282 170.698C556.811 170.201 555.631 169.155 554.966 167.763C554.301 166.371 554.221 164.792 554.753 163.338L560.206 148.459C561.288 145.515 564.56 143.981 567.513 145.019C568.958 145.533 570.119 146.579 570.767 147.963C571.423 149.355 571.485 150.907 570.962 152.352L567.521 161.742L576.991 164.943C578.445 165.431 579.615 166.468 580.289 167.842C580.963 169.217 581.052 170.777 580.546 172.232C579.731 174.599 577.488 176.08 575.12 176.08Z" fill="#FFD567"/>
+<path d="M525.033 151.625C523.57 151.625 522.107 151.093 520.981 150.011L520.839 149.878C518.605 147.599 518.578 144.008 520.777 141.703L520.901 141.579C522.666 139.734 522.612 136.773 520.795 134.982C518.977 133.182 516.016 133.182 514.189 134.973L514.065 135.097C511.786 137.331 508.089 137.331 505.819 135.088C503.514 132.809 503.487 129.085 505.757 126.78C508.843 123.65 512.966 121.903 517.363 121.876C521.744 121.867 525.902 123.525 529.041 126.611C535.505 132.986 535.575 143.432 529.209 149.896C528.074 151.048 526.549 151.625 525.033 151.625ZM521.469 149.257L521.593 149.373C523.544 151.235 526.682 151.19 528.589 149.257C534.618 143.139 534.547 133.261 528.429 127.232C525.494 124.341 521.619 122.745 517.496 122.745C517.461 122.745 517.417 122.745 517.381 122.745C513.223 122.772 509.321 124.421 506.404 127.383C504.471 129.342 504.498 132.508 506.458 134.441C508.382 136.338 511.52 136.347 513.453 134.45L513.577 134.325C515.741 132.197 519.261 132.206 521.424 134.334C523.588 136.462 523.641 139.982 521.548 142.182L521.424 142.306C519.554 144.274 519.571 147.324 521.469 149.257Z" fill="#FFA436"/>
+<path d="M479.211 22.7346C473.652 22.7346 469.139 18.2125 469.139 12.6617C469.139 7.11102 473.661 2.58887 479.211 2.58887C484.762 2.58887 489.284 7.11102 489.284 12.6617C489.284 18.2125 484.77 22.7346 479.211 22.7346ZM479.211 3.46669C474.148 3.46669 470.025 7.58983 470.025 12.6529C470.025 17.7159 474.148 21.839 479.211 21.839C484.274 21.839 488.397 17.7159 488.397 12.6529C488.397 7.58983 484.274 3.46669 479.211 3.46669Z" fill="#D1FFEE"/>
+<path d="M383.354 103.202C377.794 103.202 373.281 98.6802 373.281 93.1295C373.281 87.5788 377.803 83.0566 383.354 83.0566C388.913 83.0566 393.426 87.5788 393.426 93.1295C393.426 98.6802 388.904 103.202 383.354 103.202ZM383.354 83.9345C378.291 83.9345 374.168 88.0576 374.168 93.1206C374.168 98.1837 378.291 102.307 383.354 102.307C388.417 102.307 392.539 98.1837 392.539 93.1206C392.539 88.0576 388.417 83.9345 383.354 83.9345Z" fill="#CB9EFF"/>
+<path d="M390.731 23.4883C388.141 23.4883 386.031 21.378 386.031 18.7888C386.031 16.1997 388.141 14.0894 390.731 14.0894C393.32 14.0894 395.43 16.1997 395.43 18.7888C395.43 21.378 393.32 23.4883 390.731 23.4883Z" fill="#0090ED"/>
+<path d="M451.6 39.3248C449.011 39.3248 446.9 37.2144 446.9 34.6253C446.9 32.0361 449.011 29.9258 451.6 29.9258C454.189 29.9258 456.299 32.0361 456.299 34.6253C456.299 37.2144 454.189 39.3248 451.6 39.3248ZM451.6 30.8125C449.498 30.8125 447.787 32.5238 447.787 34.6253C447.787 36.7267 449.498 38.4381 451.6 38.4381C453.701 38.4381 455.412 36.7267 455.412 34.6253C455.412 32.5238 453.701 30.8125 451.6 30.8125Z" fill="#E3FFF3"/>
+<path d="M374.895 60.6054C372.306 60.6054 370.195 58.4951 370.195 55.9059C370.195 53.3168 372.306 51.2064 374.895 51.2064C377.484 51.2064 379.594 53.3168 379.594 55.9059C379.594 58.4951 377.484 60.6054 374.895 60.6054ZM374.895 52.0931C372.793 52.0931 371.082 53.8044 371.082 55.9059C371.082 58.0074 372.793 59.7187 374.895 59.7187C376.996 59.7187 378.707 58.0074 378.707 55.9059C378.707 53.8044 376.996 52.0931 374.895 52.0931Z" fill="#241F20"/>
+<path d="M435.268 95.2487C432.679 95.2487 430.568 93.1384 430.568 90.5492C430.568 87.9601 432.679 85.8497 435.268 85.8497C437.857 85.8497 439.967 87.9601 439.967 90.5492C439.967 93.1384 437.857 95.2487 435.268 95.2487Z" fill="#FF298A"/>
+<path d="M421.826 7.33274C420.478 7.33274 419.121 6.87166 418.022 5.94063L417.88 5.81649C415.53 3.67068 415.335 -0.00910568 417.437 -2.39432L429.185 -15.7214C430.222 -16.8918 431.65 -17.6012 433.219 -17.6898C434.78 -17.7874 436.287 -17.2731 437.466 -16.2356C439.887 -14.0987 440.117 -10.3835 437.98 -7.96277L426.223 5.36427C425.071 6.66772 423.448 7.33274 421.826 7.33274ZM418.474 5.16033L418.598 5.2756C420.646 7.03126 423.767 6.80959 425.558 4.77905L437.307 -8.54799C439.124 -10.6051 438.92 -13.7529 436.872 -15.5706C435.879 -16.4485 434.593 -16.8918 433.272 -16.8031C431.942 -16.7233 430.728 -16.1292 429.85 -15.1273L418.102 -1.80023C416.319 0.212566 416.488 3.3426 418.474 5.16033Z" fill="#FF298A"/>
+<path d="M312.971 57.8478C312.705 57.8478 312.439 57.8301 312.173 57.7946C309.069 57.3601 306.87 54.4872 307.269 51.3749L309.282 35.6538C309.477 34.1109 310.266 32.7543 311.508 31.8232C312.749 30.8922 314.274 30.5109 315.808 30.7415L331.475 33.1533C334.57 33.6321 336.724 36.5405 336.29 39.635C336.077 41.1602 335.279 42.4991 334.047 43.4124C332.814 44.3257 331.298 44.6981 329.782 44.4675L319.895 42.9513L318.628 52.8734C318.432 54.3985 317.652 55.7463 316.437 56.6773C315.418 57.4488 314.212 57.8478 312.971 57.8478ZM314.912 31.5661C313.875 31.5661 312.873 31.903 312.031 32.5326C310.985 33.3218 310.32 34.4656 310.151 35.769L308.138 51.4902C307.801 54.1148 309.663 56.5532 312.288 56.9168C313.574 57.0941 314.85 56.766 315.879 55.9769C316.907 55.1877 317.564 54.0527 317.732 52.7581L319.115 41.9316L329.897 43.5897C331.183 43.7848 332.459 43.4744 333.497 42.703C334.534 41.9316 335.208 40.7966 335.394 39.5109C335.767 36.8863 333.94 34.4301 331.324 34.0311L315.657 31.6193C315.409 31.5838 315.161 31.5661 314.912 31.5661Z" fill="#E7DFFF"/>
+<path d="M414.654 74.3758C413.678 74.3758 412.685 74.1276 411.772 73.6221C407.942 71.4586 405.184 67.9384 404.005 63.7C402.826 59.4616 403.366 55.0193 405.53 51.1976C409.99 43.2971 420.053 40.4952 427.962 44.9464C430.738 46.5158 431.757 50.0626 430.241 52.8646L430.144 53.033C428.53 55.7818 425.072 56.7483 422.27 55.2232L422.119 55.1345C419.876 53.9198 417.03 54.7355 415.771 56.9611C414.512 59.1867 415.283 62.0508 417.491 63.3365L417.642 63.4251C420.39 65.0389 421.357 68.6034 419.787 71.3877C418.697 73.3029 416.702 74.3758 414.654 74.3758ZM419.894 43.7139C414.45 43.7139 409.156 46.569 406.301 51.6321C404.253 55.2587 403.748 59.4616 404.865 63.4606C405.982 67.4596 408.589 70.8025 412.215 72.8419C414.609 74.1985 417.659 73.3473 419.016 70.9443C420.346 68.5857 419.53 65.5532 417.198 64.1877L417.048 64.099C414.423 62.565 413.51 59.1601 414.999 56.5178C416.489 53.8754 419.876 52.9001 422.545 54.3454L422.696 54.434C425.072 55.7286 428.007 54.9129 429.381 52.572L429.47 52.4212C430.755 50.0449 429.895 47.0301 427.537 45.7001C425.107 44.3523 422.483 43.7139 419.894 43.7139Z" fill="#E7DFFF"/>
+<path d="M356.595 28.5247C355.575 28.5247 354.537 28.2587 353.598 27.7001L338.338 18.6026C335.607 16.9711 334.667 13.4066 336.255 10.6489L336.352 10.4805C338.028 7.78491 341.61 6.90709 344.341 8.52974L359.6 17.6272C360.948 18.4253 361.897 19.711 362.278 21.2272C362.659 22.7435 362.429 24.3218 361.631 25.6696C360.54 27.505 358.59 28.5247 356.595 28.5247ZM337.115 10.9416L337.026 11.0834C335.678 13.4243 336.476 16.4479 338.79 17.8312L354.05 26.9287C356.408 28.3297 359.467 27.5582 360.868 25.2085C361.551 24.0647 361.746 22.7257 361.418 21.44C361.09 20.1543 360.283 19.0637 359.139 18.3898L343.88 9.2923C341.575 7.90905 338.542 8.65388 337.115 10.9416Z" fill="#D74CF0"/>
+<path d="M467.729 91.8792C465.965 91.8792 464.209 91.09 463.065 89.5915L452.248 75.5019C451.29 74.2605 450.882 72.7177 451.086 71.1659C451.29 69.6142 452.088 68.231 453.33 67.2822C455.892 65.3137 459.581 65.8014 461.549 68.364L472.366 82.4536C474.308 84.9807 473.856 88.6427 471.364 90.6201L471.214 90.7353C470.167 91.5068 468.944 91.8792 467.729 91.8792Z" fill="#3FE1B0"/>
+<path d="M417.25 142.421C411.691 142.421 407.178 137.899 407.178 132.348C407.178 126.797 411.7 122.275 417.25 122.275C422.801 122.275 427.323 126.797 427.323 132.348C427.323 137.899 422.81 142.421 417.25 142.421ZM417.25 123.162C412.187 123.162 408.064 127.285 408.064 132.348C408.064 137.411 412.187 141.534 417.25 141.534C422.313 141.534 426.436 137.411 426.436 132.348C426.436 127.285 422.313 123.162 417.25 123.162Z" fill="#FFDEF0"/>
+<path d="M364.504 128.163C361.915 128.163 359.805 126.053 359.805 123.463C359.805 120.874 361.915 118.764 364.504 118.764C367.093 118.764 369.203 120.874 369.203 123.463C369.203 126.053 367.093 128.163 364.504 128.163ZM364.504 119.651C362.403 119.651 360.691 121.362 360.691 123.463C360.691 125.565 362.403 127.276 364.504 127.276C366.605 127.276 368.317 125.565 368.317 123.463C368.317 121.362 366.605 119.651 364.504 119.651Z" fill="#FFB587"/>
+<path d="M469.387 157.805C467.969 157.805 466.541 157.282 465.433 156.236L453.942 145.32C452.816 144.256 452.186 142.811 452.168 141.259C452.151 139.708 452.745 138.253 453.835 137.154L465.034 125.937C467.25 123.72 470.868 123.703 473.111 125.884C474.211 126.957 474.823 128.393 474.831 129.927C474.84 131.461 474.246 132.907 473.165 133.988L466.098 141.064L473.351 147.954C474.468 149.009 475.097 150.437 475.124 151.971C475.151 153.505 474.583 154.959 473.51 156.058C472.384 157.22 470.886 157.805 469.387 157.805ZM469.095 125.157C467.845 125.157 466.603 125.627 465.655 126.576L454.456 137.792C453.534 138.723 453.028 139.947 453.046 141.259C453.064 142.572 453.596 143.786 454.545 144.691L466.036 155.606C467.96 157.433 471.019 157.371 472.863 155.464C473.767 154.533 474.246 153.31 474.229 152.015C474.211 150.72 473.67 149.514 472.73 148.619L464.821 141.109L472.535 133.385C473.448 132.472 473.954 131.249 473.945 129.954C473.936 128.659 473.422 127.445 472.491 126.54C471.551 125.609 470.327 125.157 469.095 125.157Z" fill="#FFBD4F"/>
+<path d="M292.711 22.7346C287.152 22.7346 282.639 18.2125 282.639 12.6617C282.639 7.11102 287.161 2.58887 292.711 2.58887C298.262 2.58887 302.784 7.11102 302.784 12.6617C302.784 18.2125 298.262 22.7346 292.711 22.7346ZM292.711 3.46669C287.648 3.46669 283.525 7.58983 283.525 12.6529C283.525 17.7159 287.648 21.839 292.711 21.839C297.774 21.839 301.897 17.7159 301.897 12.6529C301.897 7.58983 297.774 3.46669 292.711 3.46669Z" fill="#80EBFF"/>
+<path d="M196.854 103.202C191.294 103.202 186.781 98.6802 186.781 93.1295C186.781 87.5788 191.303 83.0566 196.854 83.0566C202.404 83.0566 206.926 87.5788 206.926 93.1295C206.926 98.6802 202.404 103.202 196.854 103.202ZM196.854 83.9345C191.791 83.9345 187.668 88.0576 187.668 93.1206C187.668 98.1837 191.791 102.307 196.854 102.307C201.917 102.307 206.04 98.1837 206.04 93.1206C206.04 88.0576 201.917 83.9345 196.854 83.9345Z" fill="#E7DFFF"/>
+<path d="M204.231 23.4883C201.641 23.4883 199.531 21.378 199.531 18.7888C199.531 16.1997 201.641 14.0894 204.231 14.0894C206.82 14.0894 208.93 16.1997 208.93 18.7888C208.93 21.378 206.82 23.4883 204.231 23.4883ZM204.231 14.9761C202.129 14.9761 200.418 16.6874 200.418 18.7888C200.418 20.8903 202.129 22.6016 204.231 22.6016C206.332 22.6016 208.043 20.8903 208.043 18.7888C208.043 16.6874 206.332 14.9761 204.231 14.9761Z" fill="#F7E2FF"/>
+<path d="M265.1 39.3248C262.511 39.3248 260.4 37.2144 260.4 34.6253C260.4 32.0361 262.511 29.9258 265.1 29.9258C267.689 29.9258 269.799 32.0361 269.799 34.6253C269.799 37.2144 267.689 39.3248 265.1 39.3248ZM265.1 30.8125C262.998 30.8125 261.287 32.5238 261.287 34.6253C261.287 36.7267 262.998 38.4381 265.1 38.4381C267.201 38.4381 268.912 36.7267 268.912 34.6253C268.912 32.5238 267.201 30.8125 265.1 30.8125Z" fill="#FFD567"/>
+<path d="M188.395 60.6054C185.806 60.6054 183.695 58.4951 183.695 55.9059C183.695 53.3168 185.806 51.2064 188.395 51.2064C190.984 51.2064 193.094 53.3168 193.094 55.9059C193.094 58.4951 190.984 60.6054 188.395 60.6054ZM188.395 52.0931C186.293 52.0931 184.582 53.8044 184.582 55.9059C184.582 58.0074 186.293 59.7187 188.395 59.7187C190.496 59.7187 192.207 58.0074 192.207 55.9059C192.207 53.8044 190.496 52.0931 188.395 52.0931Z" fill="#FFB587"/>
+<path d="M125.691 109.897C123.102 109.897 120.992 107.787 120.992 105.197C120.992 102.608 123.102 100.498 125.691 100.498C128.281 100.498 130.391 102.608 130.391 105.197C130.391 107.787 128.281 109.897 125.691 109.897ZM125.691 101.385C123.59 101.385 121.879 103.096 121.879 105.197C121.879 107.299 123.59 109.01 125.691 109.01C127.793 109.01 129.504 107.299 129.504 105.197C129.504 103.096 127.793 101.385 125.691 101.385Z" fill="#45278D"/>
+<path d="M235.325 7.33274C233.978 7.33274 232.621 6.87166 231.522 5.94063L231.38 5.81649C229.03 3.67068 228.835 -0.00910568 230.937 -2.39432L242.685 -15.7214C243.722 -16.8918 245.15 -17.6012 246.719 -17.6898C248.288 -17.7874 249.787 -17.2731 250.966 -16.2356C253.387 -14.0987 253.617 -10.3835 251.48 -7.96277L239.732 5.36427C238.571 6.66772 236.948 7.33274 235.325 7.33274Z" fill="#FF6A75"/>
+<path d="M126.471 57.8478C126.205 57.8478 125.939 57.8301 125.673 57.7946C122.569 57.3601 120.37 54.4872 120.769 51.3749L122.782 35.6538C122.977 34.1109 123.766 32.7543 125.008 31.8232C126.249 30.8922 127.774 30.5109 129.308 30.7415L144.975 33.1533C148.07 33.6321 150.233 36.5405 149.79 39.635C149.577 41.1602 148.779 42.4991 147.547 43.4124C146.314 44.3257 144.798 44.6981 143.282 44.4675L133.395 42.9513L132.128 52.8734C131.932 54.3985 131.152 55.7463 129.937 56.6773C128.909 57.4488 127.712 57.8478 126.471 57.8478ZM128.412 31.5661C127.375 31.5661 126.373 31.903 125.531 32.5326C124.485 33.3218 123.82 34.4656 123.651 35.769L121.638 51.4902C121.301 54.1148 123.163 56.5532 125.788 56.9168C127.074 57.0941 128.35 56.766 129.379 55.9769C130.407 55.1877 131.064 54.0527 131.232 52.7581L132.615 41.9316L143.397 43.5897C144.683 43.7848 145.959 43.4656 146.997 42.703C148.034 41.9316 148.708 40.7966 148.894 39.5109C149.267 36.8863 147.44 34.4301 144.824 34.0311L129.157 31.6193C128.909 31.5838 128.661 31.5661 128.412 31.5661Z" fill="#54FFBD"/>
+<path d="M225.262 73.6222C226.176 74.1276 227.169 74.3759 228.144 74.3759C230.201 74.3759 232.196 73.303 233.278 71.3878C234.847 68.6035 233.881 65.039 231.132 63.4252L230.981 63.3365C228.773 62.0508 228.002 59.1868 229.261 56.9612C230.52 54.7356 233.366 53.9198 235.61 55.1346L235.76 55.2233C238.562 56.7484 242.02 55.7819 243.634 53.0331L243.731 52.8647C245.248 50.0627 244.228 46.5159 241.453 44.9465C233.544 40.4864 223.48 43.2883 219.02 51.1977C216.857 55.0193 216.316 59.4617 217.495 63.7001C218.674 67.9385 221.432 71.4587 225.262 73.6222Z" fill="#592ACB"/>
+<path d="M157.708 98.0773C156.316 98.0773 154.915 97.9 153.541 97.5364C149.285 96.428 145.712 93.7325 143.486 89.9374C138.893 82.1079 141.518 71.9996 149.347 67.4065C152.096 65.7927 155.678 66.6882 157.336 69.4104L157.433 69.5789C159.003 72.3542 158.098 75.8301 155.376 77.4882L155.226 77.5769C153.044 78.9069 152.326 81.7798 153.621 83.9788C154.915 86.1778 157.779 86.9493 159.996 85.6902L160.147 85.6015C162.922 84.032 166.495 84.9897 168.109 87.7384C169.749 90.5315 168.809 94.1404 166.016 95.7808C163.454 97.3059 160.599 98.0773 157.708 98.0773ZM152.309 67.4952C151.448 67.4952 150.588 67.7168 149.799 68.1779C142.396 72.5316 139.904 82.0902 144.258 89.4941C146.368 93.0852 149.737 95.63 153.771 96.6852C157.797 97.7315 161.991 97.1463 165.582 95.0448C167.958 93.6527 168.747 90.5847 167.355 88.2172C165.981 85.8852 162.957 85.0695 160.599 86.3995L160.448 86.4882C157.806 87.9867 154.401 87.0734 152.867 84.4488C151.333 81.833 152.184 78.4192 154.782 76.8409L154.933 76.7523C157.238 75.3424 158.01 72.3986 156.68 70.04L156.591 69.8892C155.642 68.3464 153.993 67.4952 152.309 67.4952Z" fill="#FF6BBA"/>
+<path d="M170.095 28.5247C169.075 28.5247 168.037 28.2587 167.098 27.7001L151.838 18.6026C149.107 16.9711 148.167 13.4066 149.755 10.6489L149.852 10.4805C151.528 7.78491 155.11 6.90709 157.841 8.52974L173.1 17.6272C174.448 18.4253 175.397 19.711 175.778 21.2272C176.159 22.7435 175.929 24.3218 175.131 25.6696C174.04 27.505 172.089 28.5247 170.095 28.5247ZM150.615 10.9416L150.526 11.0834C149.178 13.4243 149.976 16.4479 152.29 17.8312L167.55 26.9287C169.908 28.3297 172.967 27.5582 174.368 25.2085C175.051 24.0647 175.246 22.7257 174.918 21.44C174.59 20.1543 173.783 19.0637 172.639 18.3898L157.38 9.2923C155.075 7.90905 152.033 8.65388 150.615 10.9416Z" fill="#FFFFCC"/>
+<path d="M178.004 128.163C175.415 128.163 173.305 126.053 173.305 123.463C173.305 120.874 175.415 118.764 178.004 118.764C180.593 118.764 182.703 120.874 182.703 123.463C182.703 126.053 180.593 128.163 178.004 128.163ZM178.004 119.651C175.903 119.651 174.191 121.362 174.191 123.463C174.191 125.565 175.903 127.276 178.004 127.276C180.105 127.276 181.817 125.565 181.817 123.463C181.817 121.362 180.105 119.651 178.004 119.651Z" fill="#241F20"/>
+<path d="M152.025 151.625C150.562 151.625 149.099 151.093 147.973 150.011L147.831 149.878C145.597 147.599 145.57 144.008 147.769 141.703L147.893 141.578C149.658 139.734 149.605 136.773 147.787 134.981C145.969 133.181 143.008 133.181 141.181 134.973L141.057 135.097C138.779 137.331 135.081 137.331 132.811 135.088C130.506 132.818 130.479 129.085 132.749 126.78C135.835 123.649 139.958 121.903 144.356 121.876C144.4 121.876 144.435 121.876 144.48 121.876C148.833 121.876 152.93 123.552 156.033 126.611C162.497 132.986 162.568 143.432 156.201 149.896C155.075 151.048 153.55 151.625 152.025 151.625ZM148.47 149.257L148.594 149.373C150.553 151.243 153.692 151.19 155.59 149.266C161.619 143.148 161.548 133.27 155.43 127.241C152.495 124.35 148.62 122.754 144.498 122.754C144.462 122.754 144.418 122.754 144.382 122.754C140.224 122.781 136.323 124.43 133.405 127.391C131.472 129.351 131.499 132.516 133.459 134.449C135.383 136.356 138.521 136.356 140.454 134.458L140.578 134.334C142.742 132.206 146.262 132.206 148.425 134.343C150.589 136.471 150.642 140 148.55 142.19L148.425 142.314C146.555 144.274 146.572 147.324 148.47 149.257Z" fill="#C689FF"/>
+<path d="M106.211 22.7346C100.652 22.7346 96.1387 18.2125 96.1387 12.6617C96.1387 7.11102 100.661 2.58887 106.211 2.58887C111.762 2.58887 116.284 7.11102 116.284 12.6617C116.284 18.2125 111.762 22.7346 106.211 22.7346ZM106.211 3.46669C101.148 3.46669 97.0253 7.58983 97.0253 12.6529C97.0253 17.7159 101.148 21.839 106.211 21.839C111.274 21.839 115.397 17.7159 115.397 12.6529C115.397 7.58983 111.274 3.46669 106.211 3.46669Z" fill="#FF6BBA"/>
+<path d="M10.3459 103.202C4.78654 103.202 0.273438 98.6802 0.273438 93.1295C0.273438 87.5788 4.7954 83.0566 10.3459 83.0566C15.8964 83.0566 20.4184 87.5788 20.4184 93.1295C20.4184 98.6802 15.9053 103.202 10.3459 103.202ZM10.3459 83.9345C5.28307 83.9345 1.1601 88.0576 1.1601 93.1206C1.1601 98.1837 5.28307 102.307 10.3459 102.307C15.4087 102.307 19.5317 98.1837 19.5317 93.1206C19.5317 88.0576 15.4176 83.9345 10.3459 83.9345Z" fill="#87FFD1"/>
+<path d="M17.7305 23.4883C15.1415 23.4883 13.0312 21.378 13.0312 18.7888C13.0312 16.1997 15.1415 14.0894 17.7305 14.0894C20.3196 14.0894 22.4298 16.1997 22.4298 18.7888C22.4298 21.378 20.3196 23.4883 17.7305 23.4883ZM17.7305 14.9761C15.6292 14.9761 13.9179 16.6874 13.9179 18.7888C13.9179 20.8903 15.6292 22.6016 17.7305 22.6016C19.8319 22.6016 21.5432 20.8903 21.5432 18.7888C21.5432 16.6874 19.8319 14.9761 17.7305 14.9761Z" fill="#C45A27"/>
+<path d="M78.5997 39.3248C76.0106 39.3248 73.9004 37.2144 73.9004 34.6253C73.9004 32.0361 76.0106 29.9258 78.5997 29.9258C81.1887 29.9258 83.299 32.0361 83.299 34.6253C83.299 37.2144 81.1887 39.3248 78.5997 39.3248ZM78.5997 30.8125C76.4983 30.8125 74.7871 32.5238 74.7871 34.6253C74.7871 36.7267 76.4983 38.4381 78.5997 38.4381C80.7011 38.4381 82.4123 36.7267 82.4123 34.6253C82.4123 32.5238 80.7011 30.8125 78.5997 30.8125Z" fill="#45278D"/>
+<path d="M62.2677 95.2487C59.6786 95.2487 57.5684 93.1384 57.5684 90.5492C57.5684 87.9601 59.6786 85.8497 62.2677 85.8497C64.8567 85.8497 66.967 87.9601 66.967 90.5492C66.967 93.1384 64.8567 95.2487 62.2677 95.2487ZM62.2677 86.7364C60.1663 86.7364 58.455 88.4478 58.455 90.5492C58.455 92.6507 60.1663 94.362 62.2677 94.362C64.369 94.362 66.0803 92.6507 66.0803 90.5492C66.0803 88.4478 64.369 86.7364 62.2677 86.7364Z" fill="#241F20"/>
+<path d="M48.8166 7.33274C47.4689 7.33274 46.1123 6.87166 45.0217 5.94063L44.8798 5.81649C42.5302 3.67068 42.3351 -0.00910568 44.4365 -2.39432L56.1848 -15.7214C57.2221 -16.8918 58.6497 -17.6012 60.2191 -17.6898C61.7796 -17.7874 63.2869 -17.2731 64.4662 -16.2356C66.8867 -14.0987 67.1173 -10.3835 64.9804 -7.96277L53.2322 5.36427C52.0707 6.66772 50.4481 7.33274 48.8166 7.33274Z" fill="#87FFD1"/>
+<path d="M41.6439 74.3759C40.6686 74.3759 39.6755 74.1276 38.7622 73.6222C34.9319 71.4587 32.1744 67.9385 30.9951 63.7001C29.8158 59.4617 30.3567 55.0193 32.5202 51.1977C36.9801 43.2883 47.0436 40.4864 54.9526 44.9465C57.7279 46.5159 58.7476 50.0627 57.2314 52.8647L57.1338 53.0331C55.5201 55.7819 52.0621 56.7484 49.2603 55.2233L49.1096 55.1346C46.8663 53.9198 44.0201 54.7356 42.7611 56.9612C41.502 59.1868 42.2734 62.0508 44.4812 63.3365L44.6319 63.4252C47.3806 65.039 48.347 68.6035 46.7776 71.3878C45.6959 73.303 43.7009 74.3759 41.6439 74.3759ZM46.884 43.714C41.44 43.714 36.1466 46.5691 33.2915 51.6321C31.2434 55.2587 30.738 59.4617 31.8552 63.4607C32.9723 67.4686 35.5791 70.8025 39.2056 72.8419C41.5995 74.1986 44.6497 73.3474 46.0062 70.9444C47.3362 68.5858 46.5205 65.5533 44.1886 64.1878L44.0379 64.0991C41.4133 62.5651 40.5001 59.1602 41.9897 56.5179C43.4793 53.8755 46.8663 52.9001 49.5351 54.3454L49.6859 54.4341C52.0621 55.7287 54.997 54.9129 56.3713 52.5721L56.46 52.4213C57.7456 50.045 56.8856 47.0302 54.527 45.7002C52.1065 44.3524 49.482 43.714 46.884 43.714Z" fill="#FFA266"/>
+<path d="M94.729 91.8792C92.9646 91.8792 91.209 91.09 90.0652 89.5915L79.248 75.5019C78.2904 74.2605 77.8825 72.7177 78.0864 71.1659C78.2904 69.6142 79.0884 68.231 80.3297 67.2822C82.8921 65.3137 86.5806 65.8014 88.549 68.364L99.3662 82.4536C101.308 84.9807 100.856 88.6427 98.3643 90.6201L98.2136 90.7353C97.1585 91.5068 95.9437 91.8792 94.729 91.8792ZM83.8852 66.963C82.8301 66.963 81.7661 67.2999 80.8617 67.9916C79.8066 68.7985 79.1327 69.9689 78.9554 71.2901C78.778 72.6113 79.1327 73.9147 79.9396 74.9699L90.7568 89.0595C92.3971 91.1964 95.5004 91.6309 97.6639 90.026L97.7969 89.9196C99.9071 88.2437 100.288 85.1403 98.6481 82.9945L87.8308 68.9049C86.8644 67.6369 85.3836 66.963 83.8852 66.963Z" fill="#FF6A75"/>
+<path d="M44.2502 142.421C38.6908 142.421 34.1777 137.899 34.1777 132.348C34.1777 126.797 38.6997 122.275 44.2502 122.275C49.8007 122.275 54.3226 126.797 54.3226 132.348C54.3226 137.899 49.8007 142.421 44.2502 142.421ZM44.2502 123.162C39.1874 123.162 35.0644 127.285 35.0644 132.348C35.0644 137.411 39.1874 141.534 44.2502 141.534C49.313 141.534 53.436 137.411 53.436 132.348C53.436 127.285 49.313 123.162 44.2502 123.162Z" fill="#FF4AA2"/>
+<path d="M17.7305 209.828C15.1415 209.828 13.0312 207.717 13.0312 205.128C13.0312 202.539 15.1415 200.429 17.7305 200.429C20.3196 200.429 22.4298 202.539 22.4298 205.128C22.4298 207.717 20.3196 209.828 17.7305 209.828ZM17.7305 201.306C15.6292 201.306 13.9179 203.018 13.9179 205.119C13.9179 207.221 15.6292 208.932 17.7305 208.932C19.8319 208.932 21.5432 207.221 21.5432 205.119C21.5432 203.018 19.8319 201.306 17.7305 201.306Z" fill="#AB71FF"/>
+<path d="M48.8166 193.672C47.4689 193.672 46.1123 193.211 45.0217 192.28L44.8798 192.156C42.5302 190.01 42.3351 186.33 44.4365 183.945L56.1848 170.618C57.2221 169.447 58.6497 168.738 60.2191 168.649C61.7796 168.552 63.2869 169.066 64.4662 170.104C66.8867 172.241 67.1173 175.956 64.9804 178.376L53.2322 191.704C52.0707 192.998 50.4481 193.672 48.8166 193.672ZM45.4739 191.491L45.598 191.606C47.6462 193.353 50.7673 193.14 52.5583 191.109L64.3066 177.782C66.1242 175.725 65.9203 172.577 63.8721 170.76C62.879 169.882 61.5934 169.43 60.2723 169.518C58.9423 169.598 57.7275 170.192 56.8497 171.194L45.1015 184.521C43.3105 186.543 43.4789 189.673 45.4739 191.491Z" fill="#AB71FF"/>
+<path d="M15.6289 176.089C15.0171 176.089 14.3965 175.991 13.7935 175.787L-1.21762 170.707C-2.68948 170.21 -3.86874 169.164 -4.53373 167.772C-5.19873 166.371 -5.27853 164.801 -4.74653 163.347L0.706426 148.468C1.78815 145.524 5.05993 143.99 8.01251 145.028C9.45776 145.542 10.6193 146.588 11.2665 147.972C11.9138 149.355 11.9847 150.915 11.4616 152.361L8.02137 161.751L17.4909 164.952C18.945 165.44 20.1154 166.477 20.7893 167.851C21.4631 169.226 21.5518 170.786 21.0464 172.241C20.8868 172.684 20.6829 173.101 20.4257 173.491C19.344 175.149 17.5264 176.089 15.6289 176.089ZM6.11505 145.586C4.12893 145.586 2.25808 146.81 1.53989 148.77L-3.91307 163.648C-4.36527 164.881 -4.3032 166.202 -3.73574 167.381C-3.16827 168.561 -2.17522 169.439 -0.933894 169.864L14.0773 174.945C16.1698 175.654 18.4751 174.856 19.6898 173.012C19.9026 172.684 20.0799 172.329 20.2129 171.948C20.6385 170.724 20.5676 169.412 20.0001 168.241C19.4327 167.071 18.4396 166.211 17.216 165.794L6.87758 162.301L10.637 152.059C11.0803 150.836 11.0271 149.523 10.4774 148.353C9.92769 147.182 8.95237 146.296 7.72878 145.861C7.18791 145.675 6.64704 145.586 6.11505 145.586Z" fill="#F770FF"/>
+<path d="M96.3873 157.805C94.9686 157.805 93.5411 157.282 92.4328 156.236L80.9417 145.32C79.8156 144.247 79.1861 142.811 79.1684 141.259C79.1506 139.708 79.7447 138.253 80.8353 137.154L92.0338 125.937C94.2416 123.72 97.868 123.703 100.111 125.884C101.211 126.957 101.823 128.393 101.831 129.927C101.84 131.461 101.246 132.907 100.164 133.988L93.0978 141.064L100.351 147.954C101.468 149.009 102.097 150.437 102.124 151.971C102.151 153.505 101.583 154.959 100.51 156.058C99.3842 157.22 97.8857 157.805 96.3873 157.805ZM96.0947 125.157C94.8445 125.157 93.6032 125.627 92.6545 126.576L81.4559 137.792C80.5338 138.723 80.0284 139.947 80.0462 141.259C80.0639 142.572 80.5959 143.786 81.5446 144.691L93.0357 155.606C94.9598 157.424 98.0187 157.362 99.863 155.464C100.767 154.533 101.246 153.31 101.228 152.015C101.202 150.72 100.67 149.514 99.73 148.619L91.821 141.109L99.5349 133.385C100.448 132.463 100.954 131.249 100.945 129.954C100.936 128.659 100.422 127.445 99.4906 126.54C98.5507 125.609 97.3183 125.157 96.0947 125.157Z" fill="#F6B8FF"/>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/default.svg b/browser/components/newtab/data/content/assets/default.svg
new file mode 100644
index 0000000000..48a6baa6c3
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/default.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M19.0334 4.89145C20.8652 6.70398 22 9.21946 22 12C22 17.5228 17.5228 22 12 22C9.91269 22 7.97474 21.3605 6.37141 20.2667L19.0334 4.89145ZM17.4788 3.63307L4.83963 18.9806C3.08254 17.1786 2 14.7157 2 12C2 6.47715 6.47715 2 12 2C14.0227 2 15.9052 2.60055 17.4788 3.63307ZM12 0C18.6274 0 24 5.37258 24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0Z" fill="#5B5B66"/>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/device-migration.svg b/browser/components/newtab/data/content/assets/device-migration.svg
new file mode 100644
index 0000000000..d4beba87d9
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/device-migration.svg
@@ -0,0 +1,36 @@
+<!-- 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/. -->
+<svg fill="none" xmlns="http://www.w3.org/2000/svg" width="341" height="400" viewBox="0 0 341 215">
+ <g clip-path="url(#a)">
+ <path fill-rule="evenodd" clip-rule="evenodd" d="m68 23.5 3.5 65 6.5 40 3.5 8v5.5l45 54 17.5 17.5h6l108-51 18-12.5 2-13.5v-8l-44.5-30v-55l-2-30-2-10.5L182 6l-76.5 7.5L73 19l-5 4.5Zm18 1L84 30v20l3.5 40.5 2 20 6 4 24-2 48.5-10 45-12 12.5-5.5 2-13-2-36.5-3-23L213 11l-64 5.5-49 4.5-14 3.5Z" fill="url(#b)"/>
+ <path d="M195.462 93.1709c-1.298.4447-2.726.6375-4.02 1.1121-1.865.6857-3.946.6082-5.686 1.6711-.03.0197-.058.0464-.087.0506-2.241.1511-4.472.9891-6.723.1476-1.412-.5314-1.683-1.9152-2.119-3.1264-.579-1.5954-.821-3.3083-1.647-4.8297-.368-.6797-.097-1.461-.283-2.1819-.494-1.9163-.938-3.8461-1.417-5.7663-.082-.3343-.148-.6535-.07-.9961-1.351-1.6748-1.376-2.9231-.2-4.8221 1.158-1.8789 1.829-3.9835 2.639-6.0207.105-.2721.175-.5619.339-.8151.514-.7999.864-1.6487.733-2.6283-1.221.1141-2.043 1.0043-3.018 1.5715-1.424.8272-2.834 1.6658-4.308 2.4093-1.17.5886-2.258 1.3991-3.25 2.2652-1.049.9124-2.075 1.9115-2.855 3.0463-.869 1.2668-1.984 2.3245-2.807 3.6178-.518.8126-1.334 1.3646-1.891 2.1916-.861 1.2803-1.408 2.6351-1.768 4.1102-.148.605-.543 1.1371-.624 1.7747.688 1.4111.78 3.071.278 4.3326-.442 1.1135-1.818 1.9471-3.169 2.3827-1.186.3839-2.469.6422-3.431 1.4578-.503.4215-.898.783-1.587.7854-.881.0077-1.581-.2074-2.149-.9655-.342-.4543-.719-.9805-1.357-1.135-.782-.4331-1.468.0873-2.172.249-.875.2035-1.733.0347-2.582.0762-1.53.0693-3.083.071-4.591.5719-.824.2753-1.778.1434-2.649.315-1.341.2587-2.667.5986-3.988.9294-1.794.4457-3.584 1.0068-5.278 1.7359-1.458.6306-2.86 1.4092-4.256 2.1978-1.461.8212-2.591 2.0805-4.089 2.8075-.284.138-.411.331-.442.618.424.471.963.183 1.453.207 2.726.114 5.478.007 8.135.759.545.156.986-.121 1.537-.032 1.023.163 2.006.868 3.059.52.826-.271 1.519-.055 2.254.202.517.179 1.169.043 1.429-.248.709-.778.981.094 1.379.277.507.229.315.671.171 1.128-.319 1.007-.443 2.063-.822 3.063-.624 1.646-.986 3.37-1.277 5.106-.005.024-.007.044-.013.065l67.243-18.02c.057-1.2624.265-2.5071.74-3.7147-1.594.4969-3.185 1.0082-4.764 1.5476Zm-43.856 7.6401c-1.077.447-2.196.782-3.385.737-2.244-.022-3.012-.576-3.505-2.3568-.159-.5653-.009-.9853.35-1.2943.377-.3295.866-.2824 1.331-.0353.433.2287.801.5637 1.328.6355.848.1136 1.625.1686 2.443-.3062 1.316-.7552 1.988-.5017 2.597.7603.339.6993-.051 1.3998-1.159 1.8598Z" fill="#fff"/>
+ <path d="M152.764 98.9514c.339.6994-.051 1.4006-1.159 1.8596-1.077.448-2.195.782-3.385.737-2.244-.022-3.012-.576-3.505-2.3566-.159-.5653-.008-.9852.35-1.2943.377-.3295.866-.2824 1.331-.0353.433.2287.801.5637 1.328.6355.848.1137 1.625.1687 2.443-.3061 1.316-.7552 1.988-.5017 2.597.7602Z" fill="#F69322"/>
+ <path d="M202.439 78.2929c.18 2.2755.359 4.5783.627 6.8612.2 1.7589.17 3.5134-.057 5.3094-.175 1.3713-.387 2.7331-.6 4.0915l-2.923.7834c.057-1.2623.265-2.5071.74-3.7147-1.594.497-3.185 1.0082-4.764 1.5476-1.298.4448-2.726.6375-4.02 1.1122-1.865.6856-3.946.6082-5.686 1.671-.03.0197-.058.0464-.087.0506-2.241.1512-4.472.9891-6.723.1476-1.412-.5313-1.683-1.9152-2.119-3.1264-.579-1.5954-.821-3.3082-1.647-4.8297-.368-.6797-.097-1.461-.283-2.1819-.494-1.9162-.938-3.8461-1.417-5.7662-.082-.3344-.148-.6536-.07-.9961-1.351-1.6749-1.376-2.9232-.2-4.8222 1.158-1.8789 1.829-3.9834 2.639-6.0207.105-.2721.175-.5619.339-.8151.514-.7999.864-1.6487.733-2.6283-1.221.1141-2.043 1.0043-3.018 1.5716-1.424.8272-2.834 1.6657-4.308 2.4092-1.17.5887-2.258 1.3991-3.25 2.2653-1.049.9123-2.075 1.9114-2.855 3.0462-.869 1.2668-1.984 2.3246-2.807 3.6179-.518.8126-1.334 1.3645-1.891 2.1915-.861 1.2803-1.408 2.6351-1.768 4.1103-.148.605-.543 1.137-.624 1.7746.688 1.4111.78 3.071.278 4.3326-.442 1.1136-1.818 1.9471-3.169 2.3827-1.186.3839-2.469.6423-3.431 1.4579-.503.4214-.898.7829-1.587.7854-.881.0076-1.581-.2074-2.149-.9656-.342-.4543-.719-.9804-1.357-1.135-.782-.4331-1.468.0874-2.172.249-.875.2035-1.733.0347-2.582.0763-1.53.0692-3.083.0709-4.591.5718-.824.2753-1.778.1435-2.649.3151-1.341.2586-2.667.5985-3.988.9293-1.794.4457-3.584 1.0069-5.278 1.7359-1.458.6306-2.86 1.4092-4.256 2.1978-1.461.8213-2.591 2.0811-4.089 2.8071-.284.139-.411.331-.442.618.424.471.963.184 1.453.207 2.726.114 5.478.008 8.135.76.545.156.986-.121 1.537-.033 1.023.164 2.006.869 3.059.521.826-.272 1.519-.055 2.254.201.517.179 1.169.043 1.429-.247.709-.779.981.093 1.379.277.507.228.315.671.171 1.128-.319 1.007-.443 2.062-.822 3.062-.624 1.647-.986 3.371-1.277 5.106-.005.025-.007.045-.013.066l-1.431.383c-.214-.063-.375-.201-.402-.531-.024-.292-.059-.569.005-.877.355-1.71.656-3.436 1.014-5.147.129-.62-.077-.897-.68-.934-2.512-.14-5.021-.311-7.537-.408-1.46-.058-2.832-.554-4.269-.699-1.402-.144-2.869-.777-4.182-.328-2.117.726-3.917-.267-5.854-.546-.455-.064-.575-.295-.63-.613-.231-1.34-.517-2.681-.619-4.0324-.119-1.6295-.395-3.2518-.224-4.9087.203-1.9326.376-3.8729.537-5.802.115-1.3785.361-2.7265.498-4.0954.128-1.2852-.949-1.9529-1.492-2.8649-.544-.9154-1.11-1.8596-1.751-2.7027-1.328-1.7506-2.08-3.7605-3.032-5.6936-.866-1.7585-1.569-3.5723-2.3532-5.3566-1.0161-2.303-1.8258-4.6886-3.0286-6.9224-.7801-1.4368-1.0827-3.1295-1.1955-4.7645-.0596-.8437-.5725-1.3995-.7737-2.1356-.7552-2.7604 1.3821-4.7273 3.8956-4.7271 3.2444-.002 6.4694.3384 9.5844 1.3121 2.104.6559 4.141 1.5663 6.274 2.0947 1.704.4187 3.06 1.3911 4.543 2.171.956.5029 1.747.4343 2.72-.2137 1.308-.8695 2.797-1.4972 4.186-2.2565 1.374-.7517 2.888-1.0568 4.309-1.6234 1.252-.5019 2.689-.6587 4.052-.9348 2.002-.4049 3.8-1.3245 5.678-2.0484.386-.1499.395-.5665.359-.8745-.225-2.0814.604-4.0308.743-6.055.13-1.9013.43-3.7864.563-5.6888.096-1.3619.654-2.6461 1.296-3.8792.376-.7204.836-1.4324.801-2.341-.046-1.3159 1.188-3.1106 2.249-3.5768.887-.3886 1.575-.1472 2.153.5072.715.8038 1.4 1.6388 2.061 2.4879 1.508 1.9273 3.21 3.6825 4.813 5.5184.915 1.0445 1.954 1.986 2.54 3.3935.893 2.1619 2.001 4.2583 3.107 6.3167 1.066 1.9839 2.331 3.9024 3.541 5.8284.601.9581 1.054 2.0566 1.337 3.0962.538 1.9783 1.689 2.8779 3.609 3.1497 2.302.324 4.516 1.0707 6.773 1.5581 2.031.4395 3.671 1.4325 5.367 2.4538.655.3937.561 1.3598-.238 2.2789-.966 1.107-1.451 2.3447-1.477 3.8386-.011.6536-.397 1.3225-.686 1.9498-.932 2.043-1.905 4.062-2.847 6.0958-.375.813-.61 1.6817-.71 2.5682-.09.8064.175 1.4753.847 2.0191.574.4658 1.027 1.0725 1.559 1.5962.532.5273 1.082.5117 1.554-.0834.266-.3346.5-.7071.691-1.0914 1.325-2.729 2.708-5.4583 3.475-8.3902.548-2.0756 1.584-3.9333 2.201-5.9653.273-.9021.067-1.8186.335-2.6806.685-2.1857 1.345-4.3882 3.414-5.7596 1.424-.9433 3.649-.7185 4.929.3288.804.6597 1.586 1.2944 2.288 2.0785.625.6999.994 1.426 1.227 2.2967.178.6613.507 1.2818.749 1.9257.416 1.1044.957 2.1407.895 3.412-.04.8474.357 1.6782.693 2.5137 1.192 2.9761 1.892 6.0648 2.143 9.3127Z" fill="#F69322"/>
+ <path d="M177.325 59.9162c-2.298-.8289-4.729-1.0291-7.086-1.5864-1.687-.3964-3.45-.5009-5.184-.6714-.723-.0693-1.297-.3028-1.45-1.0172-.283-1.3182-1.041-2.2382-2.157-2.9191-.85.0925-1.432-.4757-2.06-.8807-1.056-.6738-2.278-.7992-3.43-1.1646-.379.3768-.764.7471-1.139 1.1227-.504.5066-1.055 1.0069-1.814.761-.83-.2654-1.387-.8832-1.556-1.775-.092-.502-.141-1.0156-.208-1.5246-.39.004-.776.0069-1.166.0107-.31 1.0278-1.191.9892-1.989 1.0054-.55.012-.624-.5222-.765-.9337-.767-2.2419-.956-4.5924-1.318-6.912-.367-2.3377-.103-4.705-.246-7.0599-.599 2.0426-1.049 4.0918-1.257 6.235-.212 2.214-.123 4.4827-.895 6.6455-.336.942-1.107 1.4196-1.816 1.5051-2.502.2871-4.817 1.3025-7.263 1.714-1.574.267-3.059.8238-4.649 1.0637-1.67.2541-3.289 1.0056-4.477 2.3813-.402.4678-.953.6812-1.551.7448-.282.0328-.425.1913-.637.341-2.105 1.4511-3.76 2.6459-6.384.8472-.489-.3375-1.063-.1954-1.6-.2643-1.627-.2031-3.249-.663-4.654-1.4832-.979-.5742-2.012-.3246-2.989-.6783-1.314-.4805-2.721-.7155-4.009-1.3153-1.08-.5044-2.271-.0924-3.453-.2248.844.4901 1.651 1.0718 2.54 1.4569 3.123 1.3476 6.05 3.0649 8.98 4.7659 1.763 1.0265 3.403 2.2484 4.907 3.654.531.4929 1.304.704 1.452 1.5743.111.6478.009 1.2058-.609 1.4722-.478.2095-1.026.275-1.521-.0687-.243-.1712-.498-.3274-.747-.4893-.206.9807-.415 1.9625-.621 2.9431.181.2539.383.49.54.7577.728 1.2263-.262 2.4018-1.988 2.4381-.408 2.3944-1.274 4.6675-1.958 6.9847-.089.3028-.094.5904-.135.8842 1.235 1.4854.907 3.2387.412 4.7615-.461 1.4133-.313 2.8182-.473 4.201-.308 2.6385-.033 5.3261-.08 7.9955-.023 1.1874-.037 2.407.159 3.6018.144.898.562 1.491 1.601 1.538.792.036 1.576.372 2.355-.042.032-.288.158-.48.443-.618 1.497-.727 2.628-1.9866 4.088-2.8079 1.396-.7886 2.799-1.5672 4.256-2.1978 1.695-.729 3.485-1.2902 5.278-1.7359 1.321-.3308 2.648-.6707 3.988-.9293.872-.1716 1.825-.0398 2.65-.3151 1.508-.5009 3.06-.5026 4.591-.5718.848-.0415 1.707.1272 2.582-.0763.704-.1616 1.389-.6821 2.171-.249-.084-.9068.385-1.6289.848-2.3144 1.465-2.1626 3.665-3.3057 5.959-4.3817 1.577-.736 3.052-.7092 4.608-.1619.081-.6375.477-1.1696.624-1.7746.36-1.4752.907-2.83 1.769-4.1103.557-.8269 1.373-1.3789 1.891-2.1915.823-1.2933 1.938-2.3511 2.806-3.6179.781-1.1348 1.806-2.1339 2.855-3.0462.992-.8662 2.08-1.6766 3.251-2.2653 1.473-.7435 2.883-1.582 4.307-2.4092.975-.5673 1.798-1.4575 3.018-1.5716l.004-.001c.071-.1237.138-.25.197-.378.058-.128.118-.2525.172-.3831.035-.0869.07-.1736.104-.2605.067-.1725.127-.3514.18-.5283.277-.8913.436-1.8132.663-2.7144.083-.3281-.46-.6201-.915-.7848Zm-40.101 21.1487c-.347 1.5375-1.32 2.0112-2.901 1.9507-2.862-.0614-3.78-1.9534-3.93-4.2484-.14-2.0811 2.857-3.097 4.666-2.211 1.204.5912 2.463 3.1934 2.165 4.5087Zm17.634-10.0392c.006 1.4391-1.17 2.947-2.496 3.2871-.971.2485-1.593-.4832-2.178-.9578-1.191-.9627-1.671-2.3947-1.779-3.8955-.077-1.0215.852-1.8356 1.907-1.886 1.816-.0877 3.986 1.333 4.427 2.8337.07.2329.102.4528.119.6185Z" fill="#F69322"/>
+ <path d="M199.896 81.4336c.002-.0007.005-.0001.008.0017l.003.0118-.011-.0135Z" fill="#383431"/>
+ <path d="M202.439 78.2929c.18 2.2755.359 4.5783.627 6.8612.2 1.7588.17 3.5134-.057 5.3094-.175 1.3713-.387 2.7331-.6 4.0915-.089.5622-.179 1.1245-.268 1.6869-.238 1.4967-.607 2.0291-1.732 1.9783-.485-.0209-.871-.2004-.901-.7036-.044-.7278-.057-1.4563-.022-2.1782.057-1.2623.265-2.5071.74-3.7147.079-.2536.202-.5034.23-.7588.316-3.0398-.282-6.0667-.166-9.103.01-.2815-.168-.323-.386-.3266-.019-.0567-.051-.1179-.052-.1797-.128-2.2853-.662-4.5084-.991-6.7633.446-.5029-.214-.8838-.143-1.3713.244-1.6765-.405-3.2454-.762-4.8227-.541-2.3801-1.321-4.7271-2.504-6.8732-.558-1.0124-.984-2.153-1.982-2.9156-.997-.759-1.745-.6592-2.701.081-1.353 1.0482-1.854 2.5338-2.191 4.0223-.585 2.5694-1.238 5.1067-2.342 7.49-.635 1.3709-1.02 2.7404-.97 4.2413-.117.2405-.296.4704-.341.7226-.329 1.7767-1.528 3.1707-2.122 4.8403-.482 1.353-1.914 2.1511-2.523 3.4916-.087.1938-.257.1813-.424.195-1.693.1284-3.103-.4811-4.142-1.7867-.719-.9035-1.224-1.9802-2.304-2.5545-1.351-1.6749-1.376-2.9232-.2-4.8222 1.158-1.8788 1.829-3.9834 2.639-6.0206.105-.2722.175-.562.339-.8152.514-.7999.864-1.6487.733-2.6283l-.001-.0035c.071-.1239.138-.2502.201-.3755.059-.128.118-.2526.172-.3832.035-.0868.07-.1735.105-.2604.066-.1725.127-.3514.18-.5283.276-.8913.436-1.8132.663-2.7144.082-.3281-.461-.6201-.916-.7848-2.297-.8289-4.729-1.0292-7.086-1.5864-1.686-.3964-3.449-.5009-5.183-.6714-.724-.0693-1.298-.3028-1.45-1.0172-.284-1.3182-1.042-2.2382-2.157-2.9191-.02-.231.058-.5771-.071-.6819-1.138-.9655-1.163-2.4922-1.861-3.6919-1.055-1.816-1.85-3.7988-2.817-5.6854-.754-1.471-1.695-2.8297-2.552-4.2345-.843-1.3849-2.011-2.563-2.879-3.9649-.619-.9959-1.51-1.822-2.486-2.9623-.012 2.8303-.081 5.3349-.011 7.8336.06 2.2068.25 4.4021.719 6.5847.231 1.0959.693 2.1842.584 3.3521-.309 1.0278-1.191.9892-1.988 1.0054-.551.012-.624-.5222-.765-.9337-.768-2.2419-.956-4.5924-1.318-6.912-.367-2.3377-.103-4.705-.246-7.0599-.599 2.0426-1.049 4.0918-1.257 6.235-.213 2.2139-.123 4.4827-.895 6.6455-.337.942-1.107 1.4196-1.816 1.5051-2.503.2871-4.817 1.3025-7.263 1.7139-1.575.2671-3.06.8239-4.649 1.0638-1.671.2541-3.29 1.0056-4.478 2.3813-.401.4678-.952.6812-1.551.7448-.281.0327-.425.1913-.636.341-2.106 1.4511-3.761 2.6459-6.384.8472-.49-.3375-1.063-.1954-1.601-.2643-1.627-.2031-3.249-.663-4.653-1.4832-.979-.5743-2.012-.3246-2.99-.6783-1.314-.4805-2.721-.7155-4.008-1.3153-1.08-.5044-2.271-.0924-3.453-.2248.844.4901 1.65 1.0718 2.54 1.4569 3.122 1.3476 6.049 3.0649 8.98 4.7659 1.762 1.0265 3.402 2.2484 4.906 3.654.531.4929 1.304.704 1.452 1.5743.112.6478.009 1.2058-.608 1.4722-.479.2095-1.027.275-1.521-.0688-.244-.1711-.499-.3273-.747-.4892-1.536-1.3932-3.289-2.5034-5.05-3.5381-3.042-1.7835-6.318-3.1556-9.307-5.0461-.18-.1104-.36-.3334-.637-.2552-.1974.1612-.1507.4509-.066.5519.881 1.0186.85 2.3904 1.32 3.5657.625 1.5674 1.086 3.2446 1.664 4.8365.514 1.4115 1.016 2.8801 2.003 4.1801.734.9614 1.211 2.2508 1.749 3.4196.945 2.0357 2.332 3.8018 3.386 5.7694.142.268.34.6175.776.524 1.234 1.4854.906 3.2387.412 4.7614-.462 1.4134-.314 2.8183-.474 4.2011-.307 2.6385-.032 5.3261-.08 7.9955-.023 1.1874-.037 2.407.16 3.602.144.898.562 1.491 1.601 1.538.792.036 1.575.372 2.355-.043.424.471.963.184 1.453.207 2.726.114 5.478.008 8.135.76.545.156.986-.121 1.537-.033 1.023.164 2.006.869 3.059.521.826-.272 1.519-.055 2.254.201.517.179 1.169.043 1.429-.247.709-.779.981.093 1.379.277.507.228.315.671.171 1.128-.319 1.007-.443 2.062-.822 3.062-.624 1.647-.986 3.371-1.277 5.106-.005.025-.007.045-.013.066-.12.504-.558.432-.938.429-.171-.001-.342-.005-.493-.046-.214-.063-.375-.201-.402-.531-.024-.292-.059-.569.005-.877.355-1.71.656-3.436 1.014-5.147.129-.62-.077-.897-.68-.934-2.512-.14-5.021-.311-7.537-.408-1.46-.058-2.832-.554-4.269-.699-1.402-.143-2.869-.777-4.182-.328-2.117.726-3.917-.267-5.854-.546-.455-.064-.575-.295-.63-.613-.231-1.34-.517-2.681-.619-4.0324-.119-1.6295-.395-3.2518-.224-4.9087.203-1.9326.376-3.8729.537-5.802.115-1.3785.361-2.7265.498-4.0954.128-1.2852-.949-1.9529-1.492-2.8649-.544-.9154-1.11-1.8596-1.751-2.7027-1.328-1.7506-2.08-3.7605-3.032-5.6936-.866-1.7585-1.569-3.5723-2.3532-5.3566-1.0161-2.303-1.8258-4.6886-3.0286-6.9224-.7801-1.4369-1.0827-3.1295-1.1955-4.7645-.0596-.8437-.5725-1.3995-.7737-2.1356-.7552-2.7604 1.3821-4.7273 3.8956-4.7271 3.2444-.002 6.4694.3384 9.5844 1.3121 2.104.6559 4.141 1.5663 6.274 2.0947 1.704.4187 3.06 1.3911 4.543 2.171.956.5029 1.747.4343 2.72-.2137 1.308-.8695 2.797-1.4972 4.186-2.2565 1.374-.7517 2.888-1.0568 4.309-1.6234 1.252-.5019 2.689-.6587 4.052-.9348 2.002-.4049 3.8-1.3245 5.678-2.0484.386-.1499.395-.5665.359-.8745-.225-2.0814.604-4.0308.743-6.055.13-1.9013.43-3.7864.563-5.6888.096-1.3619.654-2.6461 1.296-3.8792.376-.7204.836-1.4324.801-2.341-.046-1.3159 1.188-3.1106 2.249-3.5768.887-.3886 1.575-.1472 2.153.5072.715.8038 1.4 1.6388 2.061 2.4879 1.508 1.9273 3.21 3.6825 4.813 5.5184.915 1.0445 1.954 1.986 2.54 3.3935.893 2.1619 2.001 4.2583 3.107 6.3167 1.066 1.9839 2.331 3.9024 3.541 5.8284.601.9581 1.054 2.0566 1.337 3.0962.538 1.9783 1.689 2.8779 3.609 3.1497 2.302.324 4.516 1.0707 6.773 1.5581 2.031.4395 3.671 1.4325 5.367 2.4538.655.3937.561 1.3598-.238 2.2789-.966 1.107-1.451 2.3447-1.477 3.8386-.011.6536-.397 1.3225-.686 1.9498-.932 2.043-1.905 4.062-2.847 6.0958-.375.813-.61 1.6817-.71 2.5682-.09.8064.175 1.4753.847 2.0191.574.4659 1.027 1.0725 1.559 1.5962.532.5273 1.082.5117 1.554-.0834.266-.3346.5-.7071.691-1.0914 1.325-2.729 2.708-5.4583 3.476-8.3902.547-2.0756 1.583-3.9333 2.2-5.9653.273-.9021.067-1.8186.335-2.6806.685-2.1857 1.345-4.3882 3.414-5.7596 1.424-.9433 3.649-.7185 4.929.3288.804.6597 1.586 1.2944 2.288 2.0785.625.6998.994 1.426 1.227 2.2967.178.6613.507 1.2819.749 1.9257.416 1.1044.957 2.1407.895 3.412-.04.8474.357 1.6782.693 2.5137 1.192 2.9761 1.892 6.0648 2.143 9.3127Z" fill="#000"/>
+ <path d="M200.29 81.7618c-.116 3.0362.482 6.0632.166 9.103-.028.2553-.151.5051-.23.7587-1.595.497-3.185 1.0083-4.764 1.5477-1.298.4447-2.726.6375-4.02 1.1121-1.865.6857-3.946.6082-5.686 1.6711-.03.0196-.058.0463-.088.0505-2.24.1512-4.471.9891-6.722.1476-1.412-.5313-1.683-1.9152-2.12-3.1263-.578-1.5955-.82-3.3083-1.646-4.8297-.368-.6797-.097-1.4611-.283-2.182-.494-1.9162-.938-3.8461-1.417-5.7662-.082-.3343-.148-.6536-.07-.9961 1.08.5743 1.585 1.651 2.304 2.5545 1.039 1.3056 2.449 1.9151 4.142 1.7867.167-.0137.337-.0012.424-.195.609-1.3405 2.041-2.1386 2.523-3.4915.594-1.6696 1.793-3.0637 2.122-4.8404.045-.2522.224-.4821.341-.7226.739.3014 1.427.6555 2.023 1.2199.659.6213 1.434 1.1608 2.351 1.287 1.384.1908 2.783-.0062 4.158-.1654 1.014-.117 2.068-.6084 2.762-1.2824.72-.6963 1.442-.8473 2.301-.9109.329 2.2549.863 4.478.991 6.7633.001.0618.033.123.052.1797.218.0037.396.0451.386.3267Z" fill="#F69322"/>
+ <path d="M156.677 90.2854c-.441 1.1135-1.817 1.9471-3.168 2.3827-1.187.3838-2.469.6422-3.432 1.4578-.503.4215-.898.783-1.586.7854-.881.0077-1.582-.2074-2.149-.9655-.342-.4544-.72-.9805-1.357-1.135-.085-.9069.384-1.6289.847-2.3144 1.465-2.1627 3.665-3.3058 5.959-4.3818 1.577-.736 3.052-.7092 4.608-.1618.688 1.411.781 3.071.278 4.3326ZM151.606 100.811c-1.077.448-2.195.782-3.385.737-2.244-.022-3.012-.576-3.505-2.3566-.159-.5653-.008-.9852.35-1.2943.377-.3295.866-.2824 1.331-.0353.433.2287.801.5637 1.328.6355.848.1137 1.625.1687 2.443-.3061 1.316-.7552 1.988-.5017 2.597.7602.339.6994-.051 1.4006-1.159 1.8596Z" fill="#000"/>
+ <path d="M110.964 80.2559c-.436.092-.634-.2556-.777-.523-1.052-1.9678-2.44-3.735-3.383-5.772-.54-1.1657-1.019-2.4582-1.749-3.418-.989-1.2993-1.489-2.7675-2.003-4.1813-.579-1.5912-1.041-3.2688-1.666-4.8367-.47-1.1751-.437-2.5454-1.319-3.5664-.0847-.0984-.1304-.3878.066-.5503.276-.0792.457.1435.635.2561 2.993 1.8903 6.267 3.2625 9.308 5.0467 1.762 1.0336 3.516 2.1449 5.05 3.5372-.207.9812-.414 1.9625-.621 2.9434-.137.108-.262.0482-.352-.0559-1.153-1.321-2.39-2.5536-3.727-3.6898-.417-.3545-.913-.4176-1.339-.2653-.464.1657-.745.541-.724 1.1735.038 1.1138.718 1.8308 1.479 2.3622.762.5313.499.8218-.002 1.1826-.624.4499-.315 1.1174-.459 1.6768.626.0087.529 1.1676 1.493.8299.65-.2278 1.45-.0287 2.183-.0206-.409 2.3969-1.274 4.6675-1.957 6.9878-.089.3013-.095.5887-.136.8831ZM150.075 50.2704c.111-1.1669-.351-2.2553-.586-3.3516-.466-2.1828-.656-4.3781-.718-6.5854-.07-2.4985 0-5.0009.011-7.833.977 1.143 1.868 1.9677 2.486 2.9622.87 1.4012 2.037 2.5827 2.881 3.9661.856 1.404 1.798 2.7651 2.552 4.2354.965 1.8845 1.761 3.8689 2.815 5.6848.698 1.2013.725 2.7259 1.864 3.6907.126.1064.051.4498.069.6832-.85.093-1.431-.4771-2.061-.8798-1.055-.6748-2.279-.8009-3.43-1.165.177-.311.366-.6162.53-.9341.405-.7855-.034-1.7339-.861-1.8601-.513-.0783-.984.0838-1.438.3079-.064-.4428-.144-.87-.184-1.3009-.042-.4563-.042-.9163-.068-1.3741-.057-.9774-.657-1.7247-1.406-1.7592-.642-.0296-1.31.7782-1.464 1.6063-.246 1.3211.174 2.5964.175 3.8969-.389.0032-.778.0065-1.167.0097Z" fill="#fff"/>
+ <path d="M134.322 83.0147c-2.861-.0621-3.778-1.9535-3.93-4.247-.139-2.0796 2.857-3.0984 4.666-2.2119 1.208.5915 2.467 3.195 2.168 4.5091-.35 1.5365-1.319 2.0118-2.904 1.9498ZM154.856 71.0253c.006 1.4386-1.168 2.9465-2.494 3.286-.972.2489-1.591-.4814-2.177-.9555-1.191-.9648-1.671-2.3952-1.781-3.8962-.074-1.0238.853-1.8374 1.906-1.8875 1.819-.0865 3.99 1.3345 4.43 2.8347.068.2328.099.4531.116.6185ZM151.241 50.2605c-.001-1.3004-.421-2.5758-.175-3.8969.155-.828.822-1.6359 1.465-1.6062.748.0345 1.348.7818 1.405 1.7591.027.4579.027.9179.069 1.3741.04.4309.12.8582.184 1.3009.453-.224.925-.3861 1.438-.3078.827.1261 1.266 1.0745.861 1.8601-.164.3179-.353.6231-.53.9341-.38.3741-.764.7449-1.14 1.1232-.502.5057-1.056 1.0041-1.812.7606-.831-.2677-1.389-.8845-1.555-1.7756-.094-.5041-.141-1.0168-.21-1.5256ZM113.056 72.3855c-.733-.0081-1.533-.2072-2.183.0205-.964.3378-.866-.8211-1.493-.8298.145-.5594-.165-1.2269.459-1.6768.501-.3608.764-.6513.003-1.1826-.762-.5314-1.442-1.2484-1.479-2.3623-.021-.6324.259-1.0077.723-1.1734.426-.1524.922-.0892 1.339.2653 1.337 1.1362 2.574 2.3688 3.727 3.6898.091.1041.215.1639.352.0559.181.2518.383.4911.54.7569.726 1.2255-.263 2.402-1.988 2.4365Z" fill="#000"/>
+ <path d="M195.452 61.4251c-.558-1.0123-.984-2.1529-1.982-2.9156-.997-.759-1.745-.6592-2.701.081-1.353 1.0482-1.854 2.5338-2.191 4.0223-.585 2.5694-1.237 5.1067-2.341 7.49-.636 1.371-1.02 2.7404-.971 4.2413.74.3014 1.427.6555 2.024 1.2199.658.6214 1.434 1.1608 2.351 1.287 1.383.1908 2.782-.0061 4.157-.1654 1.015-.117 2.068-.6084 2.762-1.2824.72-.6963 1.443-.8473 2.301-.9109.446-.5029-.214-.8837-.143-1.3713.244-1.6765-.405-3.2453-.762-4.8227-.541-2.38-1.321-4.7271-2.504-6.8732Zm-6.62 4.4464c.009-1.1527.423-1.5425 1.651-1.5151.625.2081.867.0425.533-.6814-.08-.1684-.022-.4006-.033-.6029-.025-.5548-.004-1.1413.547-1.413.438-.2142.842.1537 1.188.4019.488.3494.636.8868.564 1.4561-.106.8456-.527 1.3417-1.473 1.1772-.663-.1169-.893.3824-.514.7145.635.562.178 1.0523-.024 1.3697-.339.5285-1.053.4488-1.577.287-.493-.1505-.866-.5887-.862-1.194Zm7.586 4.8953c.038.7063-.536.8177-1.114.8874-.636.0813-1.266.2308-1.9.3505l-.011.0029c-.013.0111-.023.0175-.035.0286-.049.0362-.101.0734-.145.1087-.004-.0416-.006-.0798-.005-.1188-.001-.0036.003-.0045.002-.0082l-.001-.0037c-1.141-.0079-2.184-.4023-3.234-.7949-.637-.236-.789-.776-.674-1.2869.103-.4656.387-.8977 1.006-1.0442 1.118-.2648 2.221-.15 3.248.1984.609.2084 1.19.0335 1.793.2167.826.2509 1.033.8038 1.07 1.4635Zm-.503-5.2597c.002 1.0489-.32 1.4371-1.249 1.423-.805.0608-1.346-.3094-1.226-1.2207.091-.6866.048-1.5697 1.078-1.6561.69-.057 1.392.7152 1.397 1.4538Z" fill="#fff"/>
+ <path d="M199.897 81.4334c-.021.0168-.042.0337-.063.0505.025-.0123.05-.0246.075-.0365 0 .0004-.012-.014-.012-.014Z" fill="#383431"/>
+ <path d="M193.208 72.0144c-1.14-.0089-2.184-.4004-3.232-.7934-.639-.2392-.791-.7791-.676-1.2899.103-.4633.386-.8978 1.006-1.0443 1.12-.2647 2.224-.1482 3.249.2003.611.2075 1.19.033 1.794.2161.824.2502 1.031.8037 1.068 1.4629.039.7071-.535.8164-1.113.8893-.642.0811-1.275.233-1.912.354l.016.0292c-.005-.0479-.01-.0957-.015-.1435-.066.0431-.133.0862-.199.1293l.014-.01ZM190.484 64.3566c.623.2085.865.0419.532-.6802-.079-.1699-.022-.401-.032-.6038-.026-.5538-.004-1.1406.544-1.4115.441-.2175.844.1511 1.191.3995.486.3481.636.8872.564 1.4564-.107.8461-.526 1.3428-1.473 1.1773-.663-.116-.894.3809-.515.7145.635.56.179 1.0514-.024 1.3696-.338.5294-1.054.4475-1.577.287-.494-.1518-.867-.5903-.862-1.1939.009-1.1514.422-1.5427 1.652-1.5149ZM194.665 66.9316c-.803.0584-1.343-.3106-1.223-1.2227.089-.6849.047-1.5715 1.077-1.6567.688-.0569 1.392.7141 1.395 1.4535.003 1.0518-.317 1.4394-1.249 1.4259Z" fill="#000"/>
+ <path d="M193.392 72.0093c-.06.045-.121.09-.181.135-.001-.0431-.003-.0863-.004-.1297.001-.0002-.013.0098-.013.0098.071.0047.143.0095.214.0142l-.016-.0293Z" fill="#383431"/>
+ <path d="M193.409 72.0387c-.072-.0048-.143-.0095-.215-.0143.067-.0433.133-.0866.2-.1299.005.048.01.0961.015.1442Z" fill="#fff"/>
+ <path d="M290.558 44.9806c-.958.1884-1.914.3913-2.875.5612-.974.1721-1.961.2758-2.929.4736-1.522.3111-3.033.6818-4.551 1.0161-1.229.2706-2.477.4672-3.688.8007-1.552.4277-3.064 1.0041-4.616 1.4323-1.192.3287-2.431.4869-3.63.7925-2.324.5923-4.634 1.2401-6.953 1.855-1.624.4309-3.248.8688-4.882 1.2605-1.5.3596-3.009.6921-4.525.979-1.176.2225-2.399-.6111-2.35-1.627.039-.7941.692-1.2928 1.369-1.5026 1.558-.4821 3.243-.6375 4.715-1.2877 2.069-.9134 4.307-1.1507 6.405-1.9604 1.914-.7385 4.058-.8592 6.07-1.3741 2.918-.747 5.802-1.6239 8.712-2.4021.96-.2566 1.964-.344 2.934-.5698 2.077-.4837 4.138-1.0388 6.219-1.5014 1.108-.2462 2.254-.3206 3.368-.5433 1.842-.3681 3.676-.7747 5.504-1.2057.572-.1348 1.098-.4761 1.671-.5864.652-.1253.985.1944.995.922.033 2.2631-.564 2.9579-2.999 3.4942-1.144.2519-2.266.6055-3.399.908-.182.0487-.372.0706-.558.1049-.002-.0131-.005-.0263-.007-.0395ZM21.6416 103.126c1.2027-.27 2.4018-.558 3.6093-.806 1.1539-.236 2.3118-.463 3.4767-.634 1.3661-.202 2.7597-.222 4.032-.89.3099-.163.7497-.081 1.1298-.111.2992-.024.6104-.003.8956-.079 1.0186-.272 2.0205-.6075 3.0432-.8615 2.1172-.5258 4.2418-1.0223 6.367-1.515.9115-.2113 1.8362-.3657 2.7474-.5782.786-.1833 1.3557.1975 1.6942.7832.3724.6445-.0204 2.1015-.5977 2.3685-.981.454-1.9807.916-3.0224 1.179-1.5931.403-3.237.601-4.8441.955-2.2334.492-4.4452 1.083-6.6813 1.561-1.1257.241-2.2955.273-3.4262.496-2.1099.415-4.2008.926-6.309 1.35-1.9933.401-4.0073.702-5.9962 1.122-1.7038.36-3.3748.875-5.0792 1.231-1.5967.333-3.22721.504-4.82652.827-1.48255.299-2.93352.756-4.41813 1.042-.78085.15-1.62961.213-2.3978.062-.42241-.083-.9735104-.656-1.03471026-1.071-.05052644-.342.45004726-.957.85046926-1.143 2.100941-.975 4.279561-1.721 6.579681-2.142 2.84191-.52 5.66851-1.135 8.48211-1.792 1.766-.413 3.4952-.981 5.2437-1.469.144-.04.3091-.005.4644-.005l.0177.12ZM53.1678 124.427c1.0383.08 1.9326 1.009 1.5897 1.899-.3025.784-.799 1.584-1.4239 2.137-1.4683 1.299-3.1162 2.395-4.598 3.681-2.7855 2.416-5.5274 4.884-8.2438 7.377-1.6999 1.56-3.2968 3.232-4.9835 4.807-1.3706 1.279-2.8102 2.485-4.2119 3.732-2.5456 2.265-5.0834 4.538-7.6292 6.803-1.0134.901-2.0214 1.81-3.0662 2.674-.6623.548-1.3075 1.089-2.3359.898-.7068-.131-.8699-.444-.7649-1.021.1716-.942.5545-1.733 1.345-2.391 1.0311-.858 1.9071-1.899 2.877-2.833 1.0344-.996 2.0902-1.971 3.1547-2.935 2.3629-2.141 4.7258-4.283 7.1132-6.397.7663-.678 1.6499-1.226 2.4039-1.916.5922-.543 1.0327-1.246 1.6042-1.815.6185-.615 1.3242-1.142 1.9685-1.732 2.0325-1.864 4.0481-3.746 6.0819-5.608 1.2801-1.172 2.5642-2.34 3.8775-3.475 1.2006-1.037 2.4239-2.051 3.6766-3.025.4639-.36 1.0401-.578 1.5651-.86ZM247.792 31.6815c.058-1.0706.831-1.7639 1.506-2.4391.99-.9896 2.104-1.856 3.17-2.7691 1.382-1.1842 2.778-2.3534 4.153-3.546 2.034-1.7648 4.04-3.5632 6.09-5.3105 1.147-.9781 2.375-1.862 3.535-2.8251 1.147-.9514 2.259-1.9451 3.379-2.9279.701-.6154 1.367-1.2728 2.089-1.8628 2.042-1.66876 4.086-3.33646 6.172-4.9503.564-.43694 1.264-.71584 1.929-1.00418.698-.30253 1.829.12231 2.155.74798.348.66698.051 1.67089-.56 2.15317-1.709 1.34878-3.396 2.72606-5.092 4.09083-.379.3046-.772.5916-1.141.9079-1.522 1.3064-3.031 2.6269-4.556 3.9306-1.216 1.0399-2.447 2.0624-3.67 3.0933-1.965 1.6553-3.939 3.3009-5.892 4.9697-1.94 1.657-3.82 3.3867-5.803 4.9901-1.272 1.0286-2.69 1.8767-4.027 2.8266-.427.303-.777.7154-1.212 1.0044-1.13.7513-2.102.268-2.225-1.0796ZM54.1316 73.4234c-.0704.8109-1.0111 1.6943-1.7702 1.6464-.8113-.0512-1.6286-.0609-2.4323-.1695-2.3586-.3185-4.7087-.7008-7.0686-1.0093-1.0723-.1402-2.1608-.1537-3.2402-.2456-1.4979-.1276-2.9956-.4043-4.4905-.3854-2.6717.0338-5.2388-.9413-7.9476-.6422-1.0362.1145-2.1285-.3697-3.2051-.5006-1.4013-.1705-2.8144-.2428-4.2187-.3921-.9314-.0991-1.8535-.2846-2.7848-.3853-1.2266-.1327-2.4736-.1374-3.6815-.3601-.6548-.1208-1.3538-.4665-1.8364-.9188-.4719-.4424-.7535-1.265-.1902-1.7885.4795-.4456 1.2459-.8564 1.8666-.8308 2.2688.0932 4.5302.3703 6.7935.5877 2.2734.2184 4.5488.4205 6.8175.6801 2.6175.2994 5.2241.6983 7.8442.9699 1.99.2062 3.999.2286 5.9898.4288 1.9444.1955 3.873.5424 5.8153.7633.9079.1033 1.8442-.0176 2.7457.113 1.3239.1918 2.6473.4506 3.9335.8131.7246.2042 1.1713.7959 1.06 1.6259ZM106.292 137.204c-.58-.091-1.21-.39-1.485-.194-.633.451-1.114.012-1.519-.163-.426-.185-.99-.82-.931-1.163.083-.487.602-1.038 1.079-1.282.504-.258 1.184-.153 1.774-.27.702-.138 1.399-.319 2.084-.526 1.4-.423 2.783-.901 4.187-1.31 1.603-.467 3.224-.871 4.83-1.329 1.207-.343 2.397-.743 3.606-1.075.16-.044.392.169.516.228 1.345-1.251 3.188-.935 4.725-1.579.066.226.133.451.227.771.136-.147.198-.201.246-.267.176-.24.302-.632.529-.701 1.488-.453 2.994-.847 4.499-1.241 2.111-.552 4.221-1.107 6.341-1.623 1.839-.447 3.695-.819 5.534-1.264 1.416-.342 2.812-.761 4.224-1.118 2.022-.511 4.046-1.013 6.077-1.488 1.111-.26 2.242-.433 3.353-.691.663-.155 1.296-.434 1.958-.597 2.201-.545 4.403-1.087 6.616-1.582 1.426-.319 2.871-.555 4.308-.822.844-.157 1.694-.282 2.53-.472.161-.036.269-.305.416-.485.121.189.203.318.176.277.548-.138.981-.258 1.419-.354.706-.155 1.419-.274 2.121-.442 1.551-.372 3.087-.806 4.645-1.137 1.837-.391 3.694-.685 5.537-1.049 1.455-.288 2.899-.632 4.353-.927 1.299-.263 2.602-.512 3.909-.73 1.178-.197 2.451-.125 3.528-.556 2.126-.853 4.451-.67 6.569-1.481.449-.171 1.021-.025 1.765-.025.76-.214 1.779-.559 2.825-.78 1.058-.224 2.143-.326 3.176-.502.718-.11 1.442-.191 2.152-.336 1.9-.389 3.795-.807 5.692-1.21.362-.077.728-.142 1.093-.209 1.713-.311 3.417-.71 5.144-.912 2.864-.334 5.755-.7 8.386 1.037.804.531 1.799.817 2.51 1.439 1.267 1.108 2.705 1.94 4.062 2.903 2.115 1.501 4.171 3.095 6.16 4.758.662.552 1.069 1.422 1.536 2.181.116.188.053.519.003.77-.477 2.378-2.195 3.512-4.309 4.259-.704.25-1.381.577-2.077.852-1.227.486-2.411.965-3.799 1.08-1.324.11-2.597.842-3.894 1.297-.408.143-.814.299-1.232.406-1.286.329-2.575.647-3.867.951-1.143.268-2.308.459-3.435.782-.978.279-1.903.738-2.876 1.039-1.358.419-2.756.715-4.106 1.157-1.624.531-3.21 1.176-4.825 1.738-1.022.356-2.066.651-3.102.968-.168.052-.354.052-.516.117-1.523.607-2.995 1.424-4.574 1.79-2.63.61-5.008 1.869-7.578 2.627-2.336.688-4.573 1.704-6.854 2.575-1.754.67-3.49 1.395-5.269 1.992-1.371.46-2.861.609-4.18 1.172-1.359.58-2.67 1.157-4.147 1.442-1.084.209-2.075.876-3.12 1.309-.931.386-1.882.721-2.818 1.096-1.719.691-3.43 1.406-5.152 2.091-1.962.78-3.936 1.528-5.897 2.31-1.552.619-3.08 1.302-4.641 1.898-2.387.91-4.803 1.742-7.186 2.661-1.538.593-3.011 1.356-4.561 1.91-1.564.558-3.304.729-4.746 1.487-1.174.616-2.4.897-3.604 1.31-1.03.354-2.114.552-3.176.811-.667.162-1.367.235-2 .48-1.208.47-2.359.012-3.522-.117-1.566-.173-2.862-.864-3.96-2.06-1.003-1.092-2.222-1.984-3.314-2.999-.378-.352-.637-.828-.991-1.209-.273-.295-.615-.524-.916-.793-.606-.542-1.198-1.1-1.809-1.636-.81-.71-1.684-1.354-2.438-2.118-.847-.859-1.585-1.826-2.382-2.735-.961-1.098-1.977-2.153-2.889-3.29-.586-.728-1.04-1.563-1.529-2.365-.319-.523-.566-1.09-.894-1.608-.999-1.581-1.429-3.2-.3-5.149Zm52.059-13.129c-1.36.355-2.818.768-4.293 1.114-1.982.464-3.981.857-5.964 1.318-1.815.423-3.62.889-5.425 1.351-1.344.343-2.68.716-4.023 1.065-1.731.448-3.459.912-5.2 1.319-1.639.383-3.295.688-4.939 1.049-.718.158-1.43.349-2.136.558-1.873.554-3.736 1.145-5.614 1.683-1.593.456-3.238.757-4.789 1.32-1.049.381-1.951.843-2.614-.189-.279.377-.501.991-.834 1.058-.676.137-1.223.238-1.495.968-.104.281-.375.519-.614.729-1.181 1.036-1.353 1.992-.515 3.372.727 1.2 1.417 2.437 2.283 3.534 1.299 1.646 2.716 3.203 4.123 4.762 1.012 1.122 2.061 2.213 3.145 3.265.923.897 1.961 1.678 2.873 2.585.956.951 1.747 2.075 2.749 2.968 1.093.974 2.239 2.009 3.888 1.894 1.166-.082 2.396-.017 3.472-.385 1.061-.363 2.064-.852 3.209-.938.392-.03.789-.138 1.159-.275.839-.311 1.648-.704 2.495-.987 1.211-.404 2.458-.703 3.662-1.123.543-.189.995-.631 1.535-.835.853-.324 1.752-.527 2.621-.814 1.053-.346 2.106-.698 3.139-1.1.793-.309 1.544-.722 2.332-1.046.897-.369 1.82-.674 2.72-1.038.998-.403 1.972-.869 2.976-1.255.776-.298 1.602-.47 2.373-.778 1.944-.777 3.868-1.608 5.806-2.402 2.205-.904 4.414-1.8 6.628-2.685 2.066-.826 4.135-1.648 6.214-2.441 1.222-.467 2.441-1.081 3.71-1.236.879-.108 1.407-.69 2.163-.892.717-.191 1.406-.485 2.115-.711 1.031-.328 2.077-.609 3.1-.959.987-.337 1.953-.735 2.928-1.108 1.266-.485 2.527-.987 3.8-1.456 1.813-.668 3.635-1.312 5.453-1.967.637-.23 1.268-.482 1.912-.692 1.66-.541 3.334-1.04 4.988-1.599 2.199-.744 4.38-1.544 6.579-2.289.742-.251 1.536-.355 2.271-.621 1.03-.372 2-.923 3.045-1.235 1.626-.487 3.299-.819 4.942-1.255.815-.216 1.596-.56 2.412-.772 2.668-.696 5.346-1.355 8.018-2.037.456-.116.9-.277 1.35-.417 1.26-.392 2.554-.702 3.769-1.201 1.088-.447 2.387-.577 3.144-1.64-.795-.779-1.486-1.561-2.283-2.214-1.231-1.008-2.534-1.929-3.808-2.883-.552-.413-1.093-.845-1.671-1.218-.921-.595-1.926-1.074-2.794-1.735-1.257-.958-2.511-1.794-4.198-1.582-2.12.267-4.249.47-6.36.792-1.325.202-2.618.608-3.938.855-1.231.23-2.539.196-3.705.592-1.906.649-3.949.605-5.829 1.343-.552.216-1.245.045-1.855.154-1.489.266-2.962.62-4.451.885-1.575.28-3.164.474-4.74.749-2.267.396-4.532.803-6.788 1.257-1.922.387-3.831.844-5.744 1.277-1.192.27-2.372.6-3.572.819-1.56.285-3.146.431-4.7.739-1.547.308-3.059.787-4.603 1.109-1.932.404-3.895.666-5.821 1.098-2.034.456-4.036 1.058-6.06 1.56-.75.185-1.525.268-2.259.393.714 1.229 1.287 2.306 1.945 3.329.999 1.554 1.859 1.878 3.273 1.437 1.137-.355 2.295-.644 3.447-.95.865-.231 1.735-.443 2.805-.714-.327-.403-.532-.628-.705-.874-.38-.542-.067-1.44.532-1.39.555.047 1.213-.055 1.561.745.19.435.862.92 1.322.925.888.009 1.787-.274 2.667-.494 2.722-.679 5.433-1.406 8.159-2.074 1.205-.296 1.499-1.22.714-2.254-.19-.249-.147-.674-.212-1.018.501-.015.975-.774 1.472-.159.464.574.919 1.214 1.146 1.901.225.677.572.588 1.036.46.305-.084.601-.2.908-.276 2.573-.635 5.148-1.265 7.712-1.894-.04-.212-.041-.283-.068-.344-.381-.864-.06-1.518.743-1.827.643-.248.886.272 1.188.81.244.433.637.998 1.488.612.812-.368 1.766-.429 2.658-.619 1.085-.232 2.172-.461 3.259-.686 1.337-.276 2.675-.544 4.012-.82.701-.145 1.396-.32 2.1-.446.848-.152 1.287-.533.878-1.405.389-.273.723-.507 1.067-.749.409.547.787 1.052 1.152 1.539 1.406-.276 2.781-.598 4.174-.803 1.018-.15 2.068-.254 3.084-.16.425.039 1.015.588 1.128 1.012.099.372-.242 1.092-.6 1.306-.691.413-1.52.613-2.312.833-1.108.308-2.233.553-3.431.845.463.844.81 1.692 1.348 2.395.575.751 1.244 1.499 2.03 2.001.794.507.049.888.042 1.291-.003.198-.542.516-.866.556-.879.107-1.801-.035-2.652.158-1.33.303-2.609.819-3.921 1.208-1.806.536-3.622 1.042-5.435 1.552-.803.226-1.775.256-2.139 1.137-.308.747-.793.709-1.261.429-.748-.448-1.458-.102-2.16-.017-.652.078-1.273.398-1.915.589-1.848.551-3.684 1.155-5.557 1.605-.929.223-1.564.446-1.177 1.514-.745.552-1.449.884-2.138.061-.379-.452-.831-.466-1.325-.3-.615.207-1.212.475-1.835.651-1.201.34-2.419.619-3.621.953-1.149.318-2.281.694-3.432 1.004-.672.181-1.367.282-2.056.42.086.335.085.41.12.459.562.764.383 1.58-.277 2.009-.589.383-1.403.445-1.999-.36-.568-.765-1.274-1.44-2.379-.862-.211.111-.401.3-.623.348-1.577.339-3.163.639-4.735.999-.112.025-.245.462-.184.649.224.692.687 1.345.745 2.038.045.531-.306 1.157-.642 1.626-.127.177-.874.192-1.05.007-.766-.804-1.563-1.636-2.075-2.602-.319-.603-.68-.598-1.101-.524-.551.096-1.065.386-1.613.509-1.245.278-2.515.455-3.743.788-.292.079-.708.675-.641.918.211.774.507 1.582.989 2.211.565.737.312 1.216-.259 1.615-.494.345-1.105.638-1.65.009-.449-.518-.913-1.027-1.313-1.582-.462-.642-.861-1.33-1.158-1.794-2.102.541-3.968 1.02-5.903 1.518.062.181.156.499.278.805.137.343.317.669.447 1.014.254.671-.151 1.938-.658 2.113-.855.297-2.275-.424-2.551-1.294-.3-.944-1.242-1.508-2.191-1.249-1.161.318-2.302.705-3.461 1.031-1.046.294-2.108.529-3.151.83-.219.063-.387.302-.538.427 1.073 1.896 2.866 3.349 2.784 5.731h-1.509l.512-.47c-.538-.233-1.19-.348-1.587-.728-.639-.61-1.106-1.398-1.652-2.106-.205-.267-.522-.487-.629-.785-.335-.936-.951-1.026-1.795-.768-1.132.347-2.267.709-3.426.937-1.658.327-3.339.538-4.91.783-.165-.496-.273-.821-.408-1.229 1.326-.323 2.731-.625 4.053-1.258 1.39-.666 2.884-1.118 4.229-1.625-.767-1.156-1.375-2.096-2.011-3.017-.249-.361-.591-.66-.832-1.025-.492-.744-.913-1.537-1.438-2.257-.122-.166-.573-.221-.82-.149-1.325.384-2.613.915-3.953 1.225-2.267.525-4.559.945-6.85 1.362-.974.177-1.792-.437-1.514-1.14.165-.419.761-.774 1.24-.943 1.195-.425 2.444-.694 3.652-1.087 1.213-.394 2.405-.852 3.598-1.303.81-.306 1.606-.649 2.519-1.021-.91-1.326-1.748-2.546-2.619-3.815.44-.212.706-.339 1.126-.542.908 1.035 1.832 2.088 2.754 3.142.406.463.694.893 1.512.47 1.02-.528 2.173-.826 3.295-1.126 1.997-.533 4.014-.993 6.015-1.483-.245-1.319-1.19-2.492-.274-3.786 1.753.175 2.322 1.654 3.207 2.981 2.563-.607 5.202-1.233 7.95-1.884-1.217-1.554-1.37-2.495-.471-3.299.537.635 1.225 1.193 1.552 1.913.299.658.63.95 1.279.841.822-.137 1.631-.351 2.445-.535.901-.203 1.8-.414 2.702-.613.762-.167 1.527-.321 2.166-.455-.822-1.851-1.544-3.474-2.275-5.121Zm-13.068 18.962c-1.061-1.922-2.043-3.733-3.071-5.517-.107-.187-.508-.353-.726-.307-1.672.353-3.341.727-4.993 1.163-1.464.387-2.905.861-4.347 1.294.113.177.358.544.584.922.325.544.508 1.281.981 1.608 1.15.798 1.837 1.888 2.513 3.047.229.394.613.724 1.31.419 1.45-.635 2.976-1.103 4.48-1.61 1.083-.365 2.182-.682 3.269-1.019Zm30.273-13.82c.888 1.458 1.637 2.771 2.488 4.016.161.236.758.351 1.09.269 1.59-.392 3.156-.88 4.735-1.318 1.66-.46 3.33-.883 4.982-1.366.408-.119.795-.374 1.128-.644.12-.098.138-.581.062-.621-1.134-.587-1.295-1.856-1.993-2.737-.161-.203-.497-.451-.697-.41-1.094.224-2.166.549-3.253.808-2.831.673-5.666 1.33-8.542 2.003Zm39.794-9.328c-4.362.915-8.658 1.816-12.953 2.717l-.12.35c.846.948 1.668 1.92 2.56 2.824.184.186.649.218.946.151 1.114-.251 2.213-.569 3.316-.869 2.69-.733 5.379-1.469 8.03-2.194-.571-.956-1.177-1.97-1.779-2.979Zm-70.149 16.259c1.337 2.069 2.538 3.93 3.816 5.909.13-.206.171-.357.249-.379 1.596-.456 3.203-.88 4.793-1.356.311-.093.671-.326.804-.595.09-.181-.171-.542-.292-.816-.053-.12-.163-.215-.221-.334-.574-1.164-1.115-2.346-1.735-3.485-.119-.22-.566-.428-.815-.384-.989.177-1.954.475-2.936.693-1.154.256-2.317.475-3.663.747Zm19.625 1.051c-.101-.299-.168-.648-.328-.948-.496-.931-.992-1.865-1.557-2.754-.277-.436-.662-1.021-1.08-1.098-.585-.108-1.252.173-1.873.327-1.248.309-2.477.718-3.738.951-1.339.248-1.4.269-.729 1.502.153.282.362.532.531.805.442.712.965 1.392 1.287 2.155.283.669.794 1.03 1.516.825.597-.169 1.213-.267 1.821-.396-.019-.028-.039-.055-.058-.082 1.388-.425 2.775-.849 4.208-1.287Zm3.448-6.139-.045-.165c-.814.187-1.651.313-2.43.597-.235.086-.526.731-.423.911.646 1.127 1.436 2.171 2.094 3.292.339.578.712.688 1.31.515 1.569-.456 3.152-.869 4.722-1.32 1.487-.428 1.53-.46 1.012-1.679-.406-.957-.899-1.888-1.456-2.766-.176-.277-.713-.519-1.037-.47-.829.125-1.632.417-2.442.655-.439.13-.87.286-1.305.43Zm31.075-7.633c-2.862.692-5.803 1.403-8.981 2.172.953 1.478 1.811 2.811 2.537 3.936 3.167-.897 6.019-1.704 8.96-2.536-.935-1.327-1.693-2.404-2.516-3.572ZM223.329 150.075c.291-.222.636.031 2.125 1.633.687.739 1.476 1.396 2.085 2.191.648.847 1.137 1.814 1.624 2.611-.217.514-.279 1.084-.597 1.342-1.341 1.091-2.706 2.17-4.162 3.097-1.479.941-3.073 1.704-4.623 2.532-2.048 1.095-4.087 2.209-6.16 3.256-1.718.869-3.485 1.643-5.221 2.478-1.511.727-2.999 1.503-4.516 2.217-1.786.842-3.6 1.625-5.389 2.462-2.248 1.054-4.441 2.239-6.737 3.175-1.911.778-3.955 1.225-5.903 1.922-1.279.457-1.984-.404-2.655-1.081-.766-.773-1.325-1.76-1.917-2.69-.536-.844-.98-1.745-1.493-2.603-.671-1.121-1.3-2.276-2.072-3.325-1.419-1.928-2.954-3.77-4.393-5.684-1.145-1.524-2.269-3.07-3.307-4.667-.848-1.305-1.595-2.681-2.291-4.073-.143-.286.003-.94.25-1.151.592-.504 1.3-.894 2.007-1.236.535-.259 1.142-.368 1.714-.553 1.145-.37 2.282-.766 3.433-1.115.938-.284 1.898-.496 2.837-.777.878-.262 1.735-.59 2.611-.855.565-.169 1.15-.267 1.722-.414.331-.086.652-.213.981-.312 1.319-.396 2.637-.797 3.96-1.181 2.271-.659 4.553-1.286 6.818-1.966 1.551-.467 3.08-1.006 4.623-1.503 1.12-.361 2.252-.687 3.368-1.064.955-.322 1.869-.834 2.847-1.014 1.993-.366 3.785-1.872 5.953-1.159.659.216 1.267.673 1.815 1.121 1.497 1.223 2.926 2.528 4.427 3.746 1.165.945 2.395 1.811 3.6 2.706.847.629 1.701 1.249 2.636 1.934Zm1.614 6.304c-.218-.67-.233-1.327-.569-1.624-.8-.707-1.791-1.194-2.631-1.862-.816-.649-1.975-.792-2.526-1.874-.203-.4-.91-.519-1.329-.842-1.346-1.041-2.662-2.121-3.995-3.179-.857-.681-1.693-1.396-2.596-2.011-.916-.624-1.896-1.203-3.091-.806-.461.153-.888.405-1.348.561-1.472.499-2.958.959-4.428 1.465-1.887.65-3.754 1.361-5.65 1.986-1.279.421-2.591.746-3.89 1.104-1.244.342-2.491.674-3.737 1.006-.647.173-1.3.323-1.943.509-.919.265-1.823.578-2.746.823-.751.198-1.546.251-2.276.5-1.913.652-3.781 1.445-5.709 2.05-1.51.475-3.089.732-4.624 1.138-.268.07-.506.371-.673.621-.038.057.274.354.436.531.31.337.65.65.939 1.004 1.559 1.911 3.053 3.879 4.675 5.737 1.546 1.769 3.154 3.451 4.197 5.617.811 1.687 1.991 3.196 2.845 4.865.931 1.818 1.001 1.923 2.866 1.286 1.383-.473 2.818-.821 4.149-1.407 2.584-1.136 5.118-2.387 7.66-3.617 1.512-.732 2.982-1.553 4.505-2.263 1.331-.621 2.732-1.095 4.062-1.718 1.752-.822 3.468-1.722 5.195-2.598 1.925-.977 3.851-1.951 5.764-2.952 1.596-.836 3.2-1.665 4.748-2.584.659-.39 1.186-1.002 1.72-1.466ZM134.823 114.077c-.421.68-1.069.957-2.139.898-1.06-.058-2.147.438-3.229.657-1.341.271-2.745.854-4.018.651-1.016-.162-1.68.542-2.644.371-.855-.151-1.809.343-2.731.449-.884.102-1.788.026-2.674.115-.691.07-1.362.341-2.053.404-1.576.144-3.163.175-4.738.327-1.232.119-2.449.388-3.68.519-.809.086-1.632.049-2.448.06-1.129.017-2.259.003-3.386.046-1.046.04-2.0884.185-3.1332.195-.6932.006-1.386-.186-2.0822-.217-1.4842-.068-2.8785-.394-4.0826-1.301-.9737-.733-1.8382-1.541-2.1872-2.792-.1213-.436-.562-.772-.7904-1.19-1.0668-1.95-1.3941-4.116-1.7077-6.266-.3731-2.557-.6458-5.129-.9218-7.6985-.3003-2.7964-.5716-5.5962-.8231-8.3975-.2003-2.231-.3097-4.4706-.5384-6.6984-.1865-1.8163-.4923-3.6204-.7407-5.4305-.291-2.1199-.6113-4.2366-.8546-6.362-.1905-1.6647-.2991-3.3395-.4153-5.0117-.1484-2.1382-.2739-4.2781-.3981-6.4178-.1193-2.055-.2216-4.111-.3364-6.1662-.091-1.6278-.2216-3.2541-.2755-4.8831-.0506-1.5275-.0106-3.0577-.0341-4.5864-.0262-1.7095-.0388-3.4208-.1327-5.1272-.0751-1.3624-.2729-2.7178-.3954-4.0783-.0373-.4145-.0363-.8379.0004-1.2526.1807-2.0413.3265-4.0885.6171-6.1148.0567-.3955.7003-.7074.8738-.8705.1214-.5522.0866-1.0093.2989-1.2504.7961-.9041 1.572-1.8867 2.5536-2.5475.6986-.4703 1.7046-.5637 2.5918-.6644 2.1857-.2482 4.3841-.3825 6.5734-.6018 2.65-.2655 5.2974-.5602 7.9424-.8668.729-.0845 1.443-.3039 2.173-.3771 1.234-.1238 2.477-.1627 3.714-.2722.755-.0669 1.502-.2229 2.257-.2964 1.458-.1417 2.926-.1999 4.377-.3922 1.52-.2016 3.02-.5553 4.539-.7715.715-.1018 1.462.0235 2.182-.0598 2.066-.2388 4.127-.5318 6.189-.8023.067-.0087.152-.032.2-.0026 1.124.6829 2.155-.0875 3.22-.2193.811-.1002 1.568-.2161 2.428-.1061 1.022.1306 2.108-.345 3.176-.4482 1.801-.1739 3.613-.2239 5.413-.4002.957-.0936 1.891-.3974 2.847-.5108 1.823-.2165 3.653-.3876 5.483-.5355 2.726-.2202 5.453-.4172 8.181-.5964 1.067-.07 2.143-.0085 3.206-.1084 1.301-.1223 2.588-.4037 3.889-.5199 1.429-.1275 2.872-.0981 4.301-.2271.973-.0879 1.926-.4148 2.898-.4826 1.171-.0817 2.36.0837 3.528-.0169 1.124-.0968 2.224-.4385 3.346-.5926.836-.1149 1.694-.0622 2.535-.1543 1.961-.2149 3.916-.496 5.878-.7028 1.123-.1183 2.26-.1016 3.383-.2208 1.543-.1637 3.076-.4134 4.617-.5948.515-.0607 1.042-.0127 1.563-.0357.781-.0344 1.561-.0824 2.341-.135.377-.0254.754-.073 1.131-.1133.958-.1027 1.916-.212 2.875-.3083.452-.0453.906-.0736 1.36-.098 1.67-.0898 3.34-.2279 5.012-.2477 2.047-.0243 4.111-.0926 6.137.13 1.658.182 3.287.7121 4.894 1.2002.438.133.781.6473 1.115 1.0313.326.3744.681.7695.856 1.2201.371.9594.747 1.9415.918 2.9486.388 2.2807.763 4.5737.94 6.8773.247 3.198.309 6.4101.446 9.6163.033.7631.045 1.5271.074 2.2904.068 1.7752.148 3.5499.209 5.3254.068 1.9936.113 3.9881.183 5.9817.076 2.1695.109 4.3429.274 6.5061.123 1.6089.467 3.1999.634 4.807.104.9977.024 2.0133.096 3.0157.092 1.262.263 2.5181.385 3.7781.092.9464.19 1.8937.233 2.8429.064 1.4429.092 2.8876.12 4.3318.04 2.1547.249 4.3268.048 6.4597-.21 2.2179-.638 4.4565-1.317 6.5761-.55 1.7178-1.688 3.1266-3.281 4.2549-2.124 1.5057-4.605 1.9216-6.93 2.8052-1.898.7213-3.829 1.3694-5.776 1.9442-1.162.343-2.393.4462-3.577.7228-1.136.2651-2.26.5884-3.374.9357-.96.2995-1.891.693-2.848 1.0016-1.631.5256-3.272 1.0215-4.911 1.5218-1.928.5883-3.86 1.1613-5.787 1.7533-1.7.524-3.387 1.089-5.094 1.589-.875.256-1.782.4-2.67.613-1.242.298-2.478.62-3.72.919-1.002.242-2.011.452-3.011.697-1.366.335-2.717.732-4.092 1.023-1.473.313-2.969.52-4.45.799-1.16.219-2.309.498-3.469.714-1.146.213-2.26.398-3.39.825-1.793.677-3.763.885-5.654 1.309-2.1.47-4.204.924-6.288 1.454-1.304.331-2.567.821-3.865 1.179-.617.17-1.281.157-1.909.294-1.396.306-2.776.683-4.175.976-1.02.213-2.056.37-3.093.484-.289.032-.604-.179-.985-.304ZM93.638 26.2674c-.1926.1375-.4595.4852-.7544.5106-1.1097.0953-2.2295.0662-3.3432.1258-.4043.0216-1.0089.0259-1.1694.2692-.9939 1.5065-2.2468 2.8423-2.7184 4.6925-.494 1.938-.5357 3.8926-.5805 5.8503-.0489 2.1362.0397 4.2757.077 6.4135.0435 2.4889.0713 4.9784.1532 7.4661.0641 1.9449.1937 3.8877.3069 5.8308.0826 1.4161.1946 2.8305.2751 4.2467.0292.5141-.0328 1.035.021 1.5451.0277.2632.2999.503.3209.7645.1037 1.2885.1226 2.5842.2433 3.8706.1437 1.5323.3598 3.0578.546 4.586.1968 1.616.3992 3.2313.5914 4.8478.0775.6513.1496 1.3041.1933 1.9582.0176.2638-.0853.5359-.066.7994.0302.4136.1828.8259.1654 1.2338-.026.6113.2389 1.1507.2081 1.8114-.0685 1.4655.3772 2.951.5684 4.4341.1009.7834.0889 1.5805.1608 2.3684.1706 1.8707.3468 3.7412.5477 5.6089.1648 1.533.3673 3.062.5552 4.5929.292 2.377.4886 4.772.9053 7.128.4474 2.529.9957 5.074 2.8966 7.017.3915.4.9229.883 1.4206.921 1.5896.119 3.1937.045 4.7922.049 1.6555.004 3.3145.071 4.9675 0 1.248-.054 2.492-.255 3.731-.437 1.365-.201 2.715-.522 4.085-.671 1.639-.179 3.322-.074 4.929-.386 1.467-.284 2.971-.237 4.424-.713 1.282-.419 2.667-.546 4.015-.732 1.173-.162 2.37-.155 3.536-.348 1.868-.309 3.726-.691 5.576-1.098 1.55-.342 3.078-1.051 4.625-1.081 2.117-.04 3.959-.966 5.966-1.321 2.429-.43 4.799-1.194 7.2-1.789 1.358-.336 2.725-.642 4.096-.927 1.383-.287 2.781-.502 4.162-.801 1.381-.3 2.746-.678 4.124-.991.419-.095.875-.034 1.29-.139.971-.246 1.916-.601 2.893-.817 1.022-.227 2.08-.294 3.103-.519 1.846-.406 3.684-.851 5.513-1.327 2.71-.707 5.415-1.4346 8.11-2.1952 1.266-.3574 2.501-.8265 3.758-1.2196 1.327-.415 2.66-.8128 3.998-1.1938 1.174-.3344 2.311-.7762 3.462-1.1673 2.246-.7629 4.568-1.3063 6.866-1.915 1.474-.3905 2.972-.6953 4.438-1.1129 1.232-.3509 2.425-.838 3.65-1.2134 1.842-.5642 3.709-1.0467 5.542-1.6365.977-.3144 1.894-.8083 2.857-1.1736 1.931-.7333 3.029-2.139 3.533-4.1028.567-2.213.408-4.4736.549-6.716.202-3.2138-.049-6.402-.398-9.5916-.13-1.1966-.151-2.405-.226-3.6077-.067-1.0831-.142-2.1656-.207-3.2488-.015-.2549-.002-.5115-.002-.7674-.008-.3373-.257-.6684-.307-1.027-.133-.9553-.189-1.9217-.261-2.8848-.17-2.28-.325-4.5612-.503-6.8406-.056-.7153-.234-1.4253-.244-2.1392-.035-2.7444-.033-5.4895-.029-8.2343.003-1.4095.086-2.8202.051-4.2282-.044-1.7305-.17-3.459-.269-5.1878-.024-.4133-.034-.8365-.134-1.2347-.281-1.1312-.093-2.2906-.324-3.4436-.435-2.171-.552-4.4047-.972-6.5795-.251-1.3025-.572-2.7475-2.356-2.9183-.565-.0541-1.126-.179-1.691-.1933-1.932-.0489-3.866-.1287-5.795-.071-1.782.0533-3.559.3544-5.341.3872-1.683.031-3.34.1694-5.007.4046-1.809.2553-3.645.3268-5.468.4891-1.909.1699-3.818.3417-5.725.5328-1.452.1455-2.899.3391-4.352.4797-.918.0889-1.843.1023-2.762.1801-1.791.1517-3.579.3324-5.369.4865-1.268.1091-2.539.1889-3.807.2916-1.326.1072-2.652.3283-3.976.3097-1.207-.0169-2.358.6678-3.632.1257-.44-.1875-1.129.276-1.715.3404-1.222.1342-2.452.1948-3.678.2962-1.34.1109-2.681.215-4.018.3563-1.597.1688-3.185.4231-4.785.5513-2.217.1777-4.447.2119-6.661.4199-2.199.2067-4.382.5877-6.579.8274-2.346.2558-4.701.4224-7.049.6531-1.911.1877-3.818.419-5.728.6187-1.32.138-2.645.2372-3.964.3866-1.385.1568-2.762.3815-4.149.5234-1.415.1449-2.844.173-4.256.3474-1.584.1959-3.152.5301-4.735.7446-1.325.1796-2.663.2604-3.993.4095-1.025.115-2.043.2904-3.069.3984-1.089.1147-2.1864.1545-3.2745.2763-1.3201.1479-2.6326.3644-3.9533.5051-.1863.0198-.4007-.2217-.6022-.3423Z" fill="#000"/>
+ <path d="M230.65 122.39c-.336.199-.59.349-1.037.612-.451-.578-.907-1.191-1.393-1.78-.446-.54-.975-1.019-1.373-1.59-.531-.765-.996-1.578-1.441-2.397-.543-.998-1.136-1.988-1.511-3.05-.214-.606-.039-1.35-.039-2.062.227-.07.543-.169 1.058-.33.963 1.714 1.852 3.514 2.945 5.181 1.129 1.722 2.466 3.309 2.791 5.416Z" fill="#000"/>
+ <path d="M287.826 105.728c-.194-.026-.59-.082-.987-.136-.245-.033-.495-.043-.735-.097-1.33-.299-2.644-.391-3.911-1.229-.728-.481-1.555-1.061-2.152-1.602-.802-.726-1.111-2.024-1.548-3.1103-.7-1.7351-.768-3.529-.462-5.3751.193-1.1693.536-2.1435 1.609-2.8148.431-.2694.635-.8784 1.043-1.2092 1.073-.8703 2.227-1.6415 3.302-2.5101 1.483-1.1979 2.922-2.4489 4.38-3.6774.403-.3395.812-.6716 1.206-1.0213 1.64-1.4576 2.934-3.235 3.816-5.1823.75-1.6579.662-3.5174-.209-5.2655-.688-1.3805-1.382-2.7604-2.528-3.8005-.989-.8969-2.02-1.8643-3.214-2.392-1.562-.6905-3.282-1.2242-4.973-1.3716-1.689-.1471-3.451.1426-5.135.4717-1.37.2675-2.742.7389-3.985 1.3714-1.332.6782-2.519 1.643-3.758 2.4977-.463.3193-.913.662-1.341 1.0271-1.037.8858-2.124 1.7283-3.066 2.7078-.795.8277-1.485 1.78-2.094 2.756-.716 1.1453-1.071 2.4052-1.345 3.7704-.379 1.8814.774 3.2398 1.084 4.8584.14.7283 1.034 1.2823 1.447 1.9953.889 1.537 1.481 3.292 2.58 4.6482 1.185 1.4636 1.306 3.2631 2.12 4.818.314.5979.182 1.414.439 2.0565.653 1.6301-.021 3.1926-.167 4.7706-.046.488-.589.936-.918 1.392-1.675 2.323-5.764 3.093-8.265 1.547-1.682-1.041-3.286-2.232-5.045-3.118-1.569-.79-3.341-1.119-4.928.036-.628.457-.547 1.293-.526 2.062.019.692-.208 1.391-.366 2.32 1.402.921 3.229 1.878 4.751 3.189 1.458 1.256 3.17 2.055 4.68 3.168 1.524 1.123 3.336 1.854 4.711 3.057 1.372 1.2 3.039 1.768 4.451 2.827 1.975 1.482 4.171 2.666 6.213 4.064 1.602 1.096 3.062 2.399 4.68 3.467 1.339.885 1.679 2.219 2.1 3.583.515 1.665.496 3.336.427 5.061-.055 1.394.449 2.8.545 4.211.177 2.629.212 5.245-1.489 7.537-.588.793-.912 1.784-1.521 2.556-.604.767-1.429 1.358-2.129 2.054-1 .994-1.926 2.067-2.973 3.008-1.212 1.09-2.369 2.242-3.944 2.899-.97.405-1.774 1.191-2.681 1.759-1.337.837-2.71 1.617-4.049 2.452-1.072.669-2.067 1.479-3.183 2.058-1.734.9-3.553 1.635-5.316 2.482-1.385.664-2.731 1.408-4.109 2.087-1.097.54-2.223 1.023-3.326 1.553-1.744.837-3.464 1.724-5.223 2.526-.924.421-1.93.663-2.863 1.068-.769.334-1.468.825-2.229 1.183-1.887.889-3.787 1.753-5.691 2.606-1.084.485-2.196.91-3.28 1.398-.969.436-1.899.958-2.877 1.371-.714.301-1.506.424-2.212.74-.96.43-1.872.969-2.806 1.458-1.195.627-2.384 1.268-3.591 1.871-1.858.929-3.718 1.854-5.599 2.737-1.191.559-2.429 1.016-3.629 1.557-1.728.779-3.434 1.608-5.163 2.386-.985.443-2.002.817-2.997 1.239-1.457.617-2.909 1.246-4.359 1.877-1.869.812-3.752 1.597-5.598 2.459-1.433.67-2.803 1.474-4.234 2.151-.91.431-1.891.711-2.818 1.108-.692.296-1.366.643-2.018 1.019-1.344.775-2.591 1.795-4.023 2.317-1.227.448-2.176 1.537-3.668 1.459-.491-.025-.986.758-1.539 1.06-1.732.946-3.499 1.829-5.241 2.756-1.576.839-3.124 1.732-4.711 2.55-1.761.909-3.538 1.794-5.338 2.625-1.13.521-2.302.966-3.484 1.359-.454.152-1.004.154-1.484.071-1.1-.191-2.193-.172-3.301-.179-.773-.005-1.593-.278-2.303-.616-.788-.375-1.534-.894-2.194-1.469-.899-.782-1.631-1.762-2.558-2.502-1.467-1.17-2.215-3.041-3.952-3.925-.059-.03-.151-.049-.169-.096-.59-1.521-2.038-2.327-2.99-3.549-.92-1.181-1.984-2.249-2.97-3.378-1.007-1.153-1.988-2.328-3-3.476-.255-.289-.614-.486-.877-.769-1.242-1.339-2.484-2.678-3.69-4.048-.563-.639-1.01-1.378-1.573-2.016-.377-.428-.912-.716-1.294-1.141-2.006-2.229-3.98-4.487-5.982-6.721-.363-.406-.846-.709-1.197-1.123-.732-.866-1.255-2.021-2.16-2.593-.854-.541-1.212-1.356-1.839-1.997-1.151-1.177-2.159-2.492-3.292-3.689-.906-.955-1.941-1.79-2.856-2.737-.484-.501-.806-1.154-1.254-1.694-1.0989-1.327-2.4417-2.51-3.271-3.984-.5444-.967-1.3588-1.572-1.9666-2.403-.4063-.556-.6983-1.196-1.1159-1.742-.9516-1.244-1.9664-2.44-2.9207-3.682-.5147-.67-.9224-1.422-1.4405-2.089-.9381-1.208-1.948-2.36-2.8785-3.574-.5659-.738-1.0416-1.545-1.5535-2.324-.6983-1.062-1.4822-2.081-2.0661-3.203-.761-1.463-1.3352-3.014-1.4331-4.696-.0479-.821-.1659-1.641-.1666-2.461-.0002-.225.3086-.451.5736-.808-.0788-.032-.3511-.142-.6868-.277.0657-.089.2683-.338.2561-.349-1.0745-.962-.536-2.623-1.6003-3.604-.704-.649-.8129-1.747-1.3475-2.399-.8482-1.034-.8415-2.251-1.2765-3.35-.5285-1.335-.813-2.771-1.1403-4.178-.1309-.562-.0391-1.174-.1436-1.746-.4767-2.609-1.0045-5.209-1.4759-7.819-.1609-.89-.1733-1.807-.3208-2.701-.1807-1.095-.4697-2.173-.645-3.268-.3521-2.201-.6634-4.408-.9821-6.614-.1305-.903-.5091-1.8839-.2862-2.6962.2975-1.0838-.4008-1.8624-.4066-2.8143-.0061-1.0011-.1246-2.003-.224-3.0017-.2823-2.8377-.6228-5.6705-.8541-8.5122-.1234-1.517-.0382-3.0499-.1087-4.5727-.0298-.6453-.2856-1.2795-.3215-1.9253-.1125-2.0256-.1391-4.0562-.2621-6.0811-.0521-.8579-.3015-1.7023-.3893-2.5602-.1083-1.0588-.1368-2.1255-.2089-3.1881-.0679-.9999-.1881-1.998-.2098-2.9985-.0186-.8571.097-1.7163.1021-2.5749.0042-.7062-.0516-1.414-.1077-2.1189-.0839-1.0542-.2215-2.1048-.2825-3.16-.1193-2.0628-.2107-4.1274-.2953-6.192-.0416-1.0149-.0046-2.0341-.0721-3.0467-.0681-1.0216-.2242-2.0373-.3371-3.0561-.2821-2.5464-.5594-5.0932-.8429-7.6394-.212-1.9044-.497-3.8035-.6299-5.7132-.1706-2.4504-.0061-4.8901.9359-7.1974.5727-1.4032 2.0129-1.4948 3.2238-1.8998.1546-.0517.3307-.0395.5545-.063-.048-.2428-.0901-.4553-.1325-.6698.8105-.2783 1.5922-.6771 2.4162-.8046 2.2802-.3529 4.5844-.5503 6.8668-.8904 1.7991-.268 3.5764-.6779 5.3704-.9833.9966-.1696 2.0071-.2594 3.0125-.3759 2.8061-.3252 5.6162-.619 8.4177-.9794 1.322-.1701 2.6209-.5151 3.9429-.6881 1.329-.174 2.677-.2094 4.011-.3503.874-.0922 1.736-.3538 2.608-.3786 1.251-.0356 2.402-.5531 3.737-.3824 1.164.1487 2.413-.4848 3.64-.6687 1.839-.2757 3.692-.4561 5.538-.6859.718-.0893 1.432-.2083 2.149-.3043 2.256-.302 4.514-.5838 6.766-.90373 1.667-.23665 3.323-.54387 4.991-.77378.846-.11675 1.709-.10872 2.561-.19813 2.004-.21043 4.005-.44485 6.007-.67111.443-.05009.887-.09917 1.328-.16142 1.531-.2158 3.056-.47868 4.592-.64569 1.806-.19638 3.622-.30168 5.432-.46485 1.434-.12936 2.867-.28226 4.3-.4322 1.937-.20277 3.874-.41316 5.811-.61945 1.611-.17154 3.221-.35642 4.834-.50921 2.174-.20596 4.366-.28359 6.521-.61342 1.527-.23381 3.096-.09762 4.6-.64666.676-.24697 1.51-.04999 2.271-.08784.91-.04525 1.818-.1355 2.727-.18989 2.337-.13973 4.68-.21377 7.01-.42265 1.858-.16655 3.702-.49279 5.552-.74958.101-.01391.207-.07647.297-.05689 2.151.46591 4.25-.5661 6.422-.19163.739.12742 1.565-.34392 2.363-.43379 1.134-.12767 2.281-.13649 3.42-.23172 1.098-.09182 2.192-.2273 3.288-.34642 1.95-.21198 3.9-.4178 5.849-.641642 1.96-.225277 3.914-.530295 5.88-.685338 1.491-.1175587 3.003-.1466914 4.492-.037299.894.065712 1.663 1.227849 1.793 2.212789.248 1.86964.725 3.73771.709 5.60301-.01 1.17119.408 2.22704.391 3.37494-.022 1.4888.069 2.9913.263 4.468.25 1.896.7 3.7654.971 5.6593.194 1.3513.306 2.7231.325 4.0875.016 1.1531-.224 2.309-.22 3.4633.003 1.2256.188 2.4495.243 3.6764.075 1.67.083 3.3429.155 5.0131.066 1.5377.2 3.0725.268 4.6101.099 2.2445.159 4.4907.251 6.7355.063 1.524.198 3.0463.215 4.5702.018 1.5855-.089 3.1719-.102 4.7582-.008 1.037.093 2.0753.074 3.1117-.018 1.0118-.338 2.0646-.145 3.0229.283 1.3968.095 2.7707.156 4.1498.095 2.1773.008 4.3619.065 6.5416.075 2.8301.219 5.6582.328 8.4874.075 1.9334.105 3.8693.222 5.7999.122 2.0017.37 3.9963.468 5.9986.038.7558-.188 1.5244-.301 2.3408 1.471.9985 3.056 1.9904 4.545 3.1087 1.26.947 2.405 2.045 3.613 3.062.126.107.383.211.489.152.147-.081.33-.36.288-.479-.437-1.22.314-2.231.83-3.089.451-.7499 1.506-1.2847 2.406-1.5847 1.21-.4037 2.478-.5598 3.833-.3972 1.699.2038 3.197.7932 4.627 1.6099 1.155.661 2.185 1.54 3.352 2.175.667.362 1.499.594 2.25.578.552-.012 1.109-.496 1.636-.816 1.074-.651.931-1.859 1.105-2.8365.125-.6978-.224-1.5114-.473-2.2353-.349-1.0162-.751-2.0222-1.227-2.9853-.403-.8167-.962-1.5559-1.42-2.3476-.999-1.7263-2.065-3.4215-2.937-5.2104-.736-1.5106-1.328-3.1078-1.815-4.7173-.481-1.5875-.237-3.1358.419-4.7168.513-1.2332.852-2.5456 1.652-3.6337.866-1.1781 1.819-2.2938 2.747-3.4262.317-.3875.673-.7441 1.013-1.113 1.246-1.3508 2.677-2.452 4.311-3.3116.639-.3362 1.147-.9266 1.793-1.2421 1.125-.5494 2.289-1.0417 3.478-1.4345 1.17-.3869 2.384-.6569 3.593-.9086.79-.1644 1.603-.2388 2.41-.292 1.004-.0662 2.046-.2442 3.011-.0615 1.803.3409 3.688.3653 5.37 1.2703 1.147.6173 2.48.9644 3.491 1.7406 1.083.8313 1.926 1.9928 2.798 3.0706.556.6872.998 1.4707 1.444 2.2387.181.3115.213.7049.35 1.0464.657 1.6405 1.096 3.3161.941 5.1065-.147 1.6898-.323 3.3446-1.466 4.7541-.562.6941-.869 1.5895-1.403 2.313-.355.4822-.933.795-1.357 1.2355-.235.2439-.292.6698-.542.8851-1.722 1.4875-3.46 2.9576-5.22 4.4002-1.228 1.0063-2.477 1.9913-3.759 2.9272-1.033.7539-1.909 1.555-2.13 2.909-.291 1.7829.301 3.2056 1.414 4.5902.899 1.12 2.216 1.506 3.319 2.242.65.435 1.645.531 2.461.47.401-.03.924-.705 1.088-1.189.534-1.579 1.471-2.7915 2.841-3.7167.843-.5698 1.653-1.1895 2.482-1.7811 1.73-1.2354 3.656-1.9774 5.703-2.574 1.698-.4947 3.379-.8736 5.131-.9428 2.727-.1078 5.411.2465 8.031.9824 1.476.4145 2.915.959 4.367 1.4549.574.1958 1.318.2645 1.665.6654.526.6068 1.222.7457 1.845 1.0709.817.4261 1.695.734 2.516 1.1513 1.837.9332 3.645 1.9234 5.487 2.8457.65.326 1.404.452 2.043.793 1.445.773 2.987 1.458 4.228 2.49 1.111.924 1.984 2.197 2.76 3.441.925 1.483 1.223 3.211 1.62 4.915.623 2.681.765 5.37.569 8.07-.131 1.807-.529 3.606-.939 5.379-.28 1.211-.656 2.44-1.236 3.532-.419.789-1.154 1.496-1.907 2.007-1.433.972-2.946 1.844-4.493 2.626-.838.423-1.992.348-2.688.896-1.131.89-2.469.788-3.682 1.103-2.176.564-4.423.91-6.719.329-1.426-.36-2.931-.398-4.377-.694-1.681-.344-3.367-.718-4.994-1.25-1.765-.578-3.447-1.405-5.2-2.025-1.242-.439-2.537-.736-3.818-1.055-.795-.198-1.476-.43-2.008-1.175-.386-.541-1.125-.832-1.71-1.23-1.354-.923-2.784-1.753-4.038-2.794-.812-.674-1.415-1.623-2.027-2.505-.69-.995-1.416-1.998-1.893-3.098-.704-1.624-1.432-3.297-1.731-5.022-.373-2.157-.412-4.386-.414-6.585 0-.953.451-1.907.782-3.187ZM73.5908 55.1454c-.0281-.9707-.0562-1.9415-.0843-2.9122l-.3509.0163c0 .9214-.0071 1.843.0142 2.764.0016.069.2056.1335.3155.2-.0571.3151-.1693.6323-.1577.9448.0148.4007.1897.7978.1889 1.1963-.0021 1.0608-.11 2.1226-.0849 3.1819.0273 1.1539.1837 2.3045.2256 3.4586.0128.3528-.1664.7125-.1957.8269.1687 1.0917.3588 2.0254.4475 2.9685.1208 1.2839.1428 2.5769.2491 3.8625.056.6765.2615 1.3428.2935 2.0187.0609 1.2856.0085 2.5765.0722 3.8618.0657 1.3246.2119 2.6454.3261 3.9676.0887 1.0261.2064 2.0504.2683 3.0781.0945 1.5676.1555 3.1372.2239 4.7063.0491 1.1268-.1513 2.3335.1931 3.3601.3855 1.1493.2363 2.2565.3286 3.3802.0332.4047-.0208.8162.0079 1.2217.0344.486.1146.9687.1909 1.581.5313.2046.7456-.078.6742-.8649-.1913-2.1093-.3493-4.2224-.4736-6.3367-.1332-2.2651-.1858-4.535-.3242-6.7998-.1114-1.8245-.3243-3.6427-.4434-5.4668-.098-1.5029-.0933-3.0124-.1903-4.5154-.1307-2.0253-.3408-4.0455-.4695-6.0708-.1252-1.969-.1858-3.9419-.2841-5.9126-.0691-1.3848-.086-2.7769-.2521-4.1506-.145-1.1995-.4657-2.3778-.7088-3.5655ZM108.75 157.874c1.533.118 1.692 1.933 2.771 2.788.444.351.674.96 1.043 1.419 1.123 1.402 2.278 2.779 3.397 4.183.654.82 1.227 1.704 1.902 2.505 1.137 1.348 2.35 2.633 3.486 3.982 1.119 1.329 2.167 2.718 3.275 4.057.844 1.019 1.75 1.987 2.6 3.001 1.222 1.457 2.382 2.967 3.635 4.396 1.419 1.617 2.929 3.154 4.362 4.759.567.635.893 1.6 1.573 1.993 1.346.775 2.121 2.032 3.139 3.079 1.079 1.111 2.027 2.356 3.164 3.401.993.914 2.087 1.686 2.15 3.194.002.051.085.099.133.146 1.002.949 2.269 1.268 3.524.962 1.548-.377 3.048-.994 4.525-1.612 2.452-1.025 4.868-2.135 7.301-3.205 1.891-.832 3.783-1.659 5.677-2.483.604-.263 1.232-.476 1.817-.774 1.236-.631 2.432-1.338 3.676-1.949 2.2-1.08 4.434-2.092 6.633-3.173 1.057-.519 2.063-1.14 3.1-1.7 1.01-.545 2.024-1.08 3.046-1.602.727-.372 1.473-.71 2.206-1.072.716-.354 1.429-.714 2.141-1.077 1.256-.641 2.511-1.282 3.763-1.929 1.33-.687 2.666-1.365 3.981-2.081.771-.42 1.478-.963 2.264-1.348 1.529-.752 3.095-1.43 4.644-2.142 1.235-.568 2.489-1.098 3.694-1.724 1.25-.651 2.434-1.427 3.677-2.092 1.274-.68 2.611-1.243 3.872-1.944 1.847-1.027 3.658-2.115 5.655-2.845.252-.092.485-.237.72-.37 2.073-1.176 4.131-2.377 6.221-3.52.863-.473 1.819-.775 2.686-1.239 1.505-.805 2.97-1.685 4.461-2.518 1.019-.569 2.054-1.111 3.082-1.664 1.136-.611 2.266-1.236 3.413-1.827 1.019-.525 2.083-.97 3.085-1.527 1.825-1.014 3.612-2.098 5.429-3.128 1.177-.668 2.399-1.258 3.563-1.947 1.317-.779 2.574-1.659 3.889-2.441 1.215-.722 2.479-1.363 3.711-2.058 2.659-1.499 5.309-3.015 7.969-4.513.759-.427 1.55-.796 2.31-1.223 1.15-.647 2.277-1.335 3.43-1.977.519-.289 1.157-.413 1.598-.781.572-.479 1.369-1.112 1.393-1.705.025-.618.162-1.129.348-1.678.267-.785-.719-3.204-1.348-3.571-1.475-.864-2.939-1.749-4.366-2.688-1.306-.86-2.534-1.838-3.839-2.698-1.093-.72-2.26-1.326-3.372-2.017-1.163-.723-2.297-1.493-3.449-2.233-1.577-1.013-3.167-2.007-4.737-3.031-1.298-.845-2.591-1.701-3.857-2.593-.734-.517-1.339-1.257-2.126-1.649-1.637-.814-2.693-2.343-4.331-3.193-1.196-.62-2.048-1.868-3.139-2.727-1.052-.828-2.252-1.468-3.314-2.283-.777-.596-1.336-1.545-2.178-1.968-.946-.476-1.568-1.153-2.237-1.897-.471-.523-1.134-.9959-1.799-1.1862-.52-.1489-1.187.1282-1.767.2909-1.013.2835-1.992.7033-3.016.9223-1.419.305-2.874.441-4.3.716-1.835.354-3.658.775-5.487 1.164-2.154.458-4.303.948-6.466 1.359-2.143.406-4.208 1.23-6.434 1.195-.153-.003-.308.051-.459.09-1.058.276-2.106.603-3.176.821-1.996.407-4.009.727-6.006 1.129-1.646.332-3.274.747-4.917 1.094-1.053.223-2.12.378-3.174.593-.316.064-.601.269-.916.339-2.006.44-4.017.854-6.022 1.294-.369.081-.711.306-1.08.36-1.014.146-2.048.179-3.054.365-1.083.199-2.139.535-3.214.783-.704.162-1.422.261-2.128.412-1.004.215-2 .472-3.007.672-.707.141-1.434.183-2.139.332-1.195.253-2.37.601-3.569.827-1.297.245-2.606.491-3.897.713-1.181.204-2.373.734-3.617 1.009-2.692.595-5.338 1.394-8.009 2.083-1.24.319-2.525.487-3.732.894-.729.245-1.406.608-2.2.689-.642.065-1.278.231-1.904.397-.459.122-.885.38-1.347.47-2.573.501-5.178.815-7.686 1.652-1.028.343-2.163.356-3.24.568-1.773.348-3.535.752-5.307 1.104-2.487.494-4.982.949-7.468 1.446-1.508.302-3.001.679-4.511.972-1.596.31-3.21.531-4.806.847-1.247.247-2.475.59-3.719.857-.108.023-.272-.207-.41-.32.013.09.025.181.038.271-5.0749 1.117-10.1806 2.094-15.2162 2.986.9646 1.015 1.9123 1.982 2.8258 2.98 1.6591 1.813 3.4485 3.534 4.8972 5.503 1.138 1.547 2.3324 3.045 3.4688 4.585.8262 1.12 1.4951 2.334 2.5844 3.256.453.383.78.918 1.143 1.4.392.522.725 1.092 1.145 1.59.753.895 1.568 1.738 2.327 2.627.556.652 1.05 1.357 1.597 2.017.73.881 1.499 1.731 2.216 2.622.125.156.075.453.116.761ZM76.06 40.1386c.0482.1613.2254.5513.2745.9566.141 1.1642.2371 2.3341.3382 3.5029.1175 1.3588.2391 2.7176.3273 4.0785.1282 1.9805.2161 3.9636.3454 5.944.062.9492.1933 1.8937.2681 2.8422.0621.7877.0616 1.5806.1359 2.3667.077.8137.2659 1.6193.3065 2.4334.0598 1.1956-.1428 2.4288.0798 3.5861.3654 1.8991.2028 3.8041.3508 5.7009.0986 1.2627-.0901 2.5872.229 3.7836.4338 1.6269-.0991 3.2782.4881 4.9169.3761 1.0495.0611 2.3356.1077 3.5137.0897 2.2651.2229 4.5284.3242 6.793.0415.9275-.1587 1.9241.1207 2.7677.3513 1.0607.365 2.1136.4664 3.179.1283 1.3484.2391 2.6987.3814 4.0452.1864 1.764.4096 3.523.5923 5.287.2044 1.972.3786 3.947.5707 5.921.3491 3.586.6165 7.183 1.1075 10.749.1375.999.3177 2.205 1.2977 2.914.5937.429 1.3108.707 1.8515 1.188.883.785 1.6945.648 2.565.057.0736-.05.1851-.046.2796-.064 2.246-.428 4.4974-.829 6.7368-1.288 2.6939-.553 5.3709-1.187 8.0689-1.72 1.114-.221 2.206-.509 3.385-.53 1.089-.019 2.155-.617 3.255-.853 1.623-.349 3.268-.6 4.902-.902.611-.113 1.212-.304 1.828-.373.841-.093 1.705-.028 2.536-.169.986-.167 1.941-.503 2.92-.723.568-.127 1.17-.115 1.733-.261 1.419-.368 2.828-.777 4.233-1.194 1.844-.548 3.798-.452 5.646-1.073 1.376-.463 2.877-.544 4.301-.881 1.032-.243 2.017-.675 3.044-.941 1.995-.517 4.009-.962 6.007-1.466 1-.252 1.975-.601 2.976-.846 1.913-.468 3.88-.766 5.74-1.385 1.017-.339 2.078-.314 3.105-.734.924-.377 2.093-.26 3.077-.754.185-.093.455-.004.683-.024.521-.047 1.207.077 1.526-.205.673-.596 1.305-.546 2.07-.385.278.058.625-.164.929-.289.276-.113.523-.335.806-.392 1.494-.298 3-.535 4.494-.837 2.664-.539 5.327-1.092 7.981-1.678.659-.146 1.322-.707 1.915-.62 1.231.181 2.28-.32 3.396-.546 1.375-.279 2.722-.696 4.095-.992 2.067-.447 4.142-.855 6.219-1.252 1.49-.285 2.986-.55 4.486-.767.459-.067 1.192.263 1.377.05.869-1.007 2.144-.625 3.181-1.032 1.655-.649 3.499-.818 5.265-1.181 2.204-.454 4.41-.8948 6.613-1.3491 1.513-.3118 3.023-.6369 4.534-.9569 1.548-.3279 3.087-.7078 4.646-.9698 1.359-.2284 2.78-.1772 4.1-.5249 1.075-.2829 2.044-.9679 3.05-1.4936.086-.0449.129-.2309.137-.3548.028-.454.076-.9125.041-1.3637-.161-2.1134-.385-4.2226-.512-6.3377-.138-2.2925-.215-4.5893-.275-6.8853-.04-1.497-.056-2.9986.014-4.4935.129-2.7185-.251-5.4301.039-8.159.172-1.6257-.063-3.2926-.088-4.9414-.034-2.3001-.026-4.6009-.068-6.9008-.052-2.8796-.101-5.7599-.214-8.6375-.124-3.1847-.345-6.3657-.474-9.5503-.09-2.2111-.077-4.4262-.148-6.6383-.043-1.3271-.171-2.6512-.238-3.9777-.036-.7161.02-1.4384-.041-2.1514-.157-1.8258-.355-3.6483-.541-5.4716-.204-1.9986-.436-3.9946-.613-5.9955-.228-2.5885-.414-5.18071-.621-7.81424-.418-.32335-.942-.75597-1.495-1.14882-.387-.27484-.819-.71188-1.22-.70057-1.347.03799-2.689.2413-4.033.38775-.707.07713-1.438.07954-2.114.2712-1.213.34374-2.476.08609-3.709.52507-.978.34829-2.129.21685-3.203.29015-.415.02828-.831.04107-1.247.04803-.748.0125-1.504-.05046-2.243.03486-1.951.22535-3.892.54271-5.844.76458-1.084.12318-2.184.09362-3.271.19501-1.707.15919-3.407.39017-5.114.5512-.716.06763-1.447-.0134-2.164.05656-1.611.1574-3.215.39715-4.827.54776-2.151.20093-4.307.34015-6.46.52252-1.956.16577-3.911.36061-5.867.53006-1.83.15858-3.668.25427-5.493.46181-2.24.25478-4.466.63188-6.706.88936-1.553.17844-3.141.1192-4.671.39661-1.42.2574-2.855.2632-4.278.5058-2.108.3596-4.27.407-6.409.5912-1.49.1285-2.986.2188-4.469.4079-1.578.2011-3.138.536-4.716.7432-1.544.2028-3.105.279-4.649.4818-2.14.2812-4.267.6575-6.407.9387-1.673.2199-3.36.3308-5.035.5391-1.378.1714-2.743.436-4.12.6128-.401.0513-.839-.147-1.23-.0733-.71.1341-1.388.4505-2.099.575-1.316.23-2.65.3583-3.971.5633-1.154.1792-2.293.4703-3.452.5978-2.507.2758-5.025.4434-7.53.729-.952.1085-1.883.2372-2.8509.2755-1.5875.0627-3.1441.6812-4.7348.9345-2.1415.3409-4.3006.5771-6.4563.8227-2.838.3235-5.679.623-8.5209.9098-.8814.089-1.917-.1683-2.6237.2109-1.2822.6881-1.8639 2.127-2.2106 3.4541-.228.8724.1514 1.9094.2904 2.8681.1311.9035.3745 1.7965.4335 2.7028.0408.6262-.1478 1.2672-.216 1.7702.1865.4073.4454.7566.4993 1.1348.1189.8331.1185 1.6823.1956 2.5223.1239 1.3491.2919 2.6945.3944 4.045.0268.3532-.1195.7195-.22 1.2615Zm73.935 164.9144c.184 2.243.357 4.358.536 6.534.461-.097.807-.108 1.095-.241 1.596-.738 3.216-1.436 4.754-2.281 1.533-.842 2.974-1.834 4.63-2.463.908-.345 1.74-.898 2.585-1.394.813-.477 1.564-1.068 2.402-1.491 1.699-.858 3.448-1.616 5.158-2.45 1.997-.974 3.985-1.967 5.958-2.988 1.014-.526 1.896-1.226 3.106-1.457.859-.164 1.584-.953 2.409-1.387.517-.272 1.336-.238 1.62-.629.697-.958 1.86-.84 2.725-1.428 1.108-.754 2.545-1.015 3.812-1.555.843-.359 1.619-1.141 2.457-1.19 1.447-.084 2.28-1.192 3.498-1.615 1.715-.597 3.381-1.342 5.044-2.077 1.118-.494 2.194-1.083 3.29-1.625.822-.405 1.638-.821 2.473-1.196.819-.367 1.67-.664 2.486-1.036.609-.278 1.172-.654 1.778-.938.894-.417 1.825-.757 2.708-1.193.942-.465 1.829-1.044 2.774-1.503 1.251-.608 2.547-1.125 3.802-1.727.649-.312 1.322-.43 1.94-1.02.685-.654 1.967-.643 2.924-1.065 2.008-.886 3.959-1.899 5.96-2.8 1.88-.846 3.799-1.606 5.692-2.423 1.321-.57 2.633-1.161 3.939-1.765 1.09-.503 2.166-1.036 3.245-1.561.387-.189.764-.397 1.147-.594.896-.459 1.783-.938 2.692-1.369 1.153-.548 2.341-1.025 3.484-1.591 1.168-.58 2.298-1.237 3.45-1.85 1.331-.709 2.666-1.411 4.005-2.105.448-.232.904-.455 1.373-.639.429-.169 1.12-.147 1.281-.438.62-1.114 1.843-1.323 2.742-1.993 1.576-1.177 3.407-2.034 4.907-3.29 1.097-.919 2.35-1.671 3.224-2.928.827-1.188 2.136-2.031 3.122-3.126.652-.723 1.288-1.557 1.608-2.456.493-1.381.54-2.869.307-4.342-.065-.412-.092-.831-.126-1.147-2.221 1.162-4.455 2.347-6.706 3.5-.885.454-1.846.77-2.702 1.269-1.348.785-2.606 1.724-3.957 2.502-1.673.964-3.428 1.786-5.099 2.752-2.036 1.176-3.996 2.485-6.038 3.651-2.322 1.326-4.702 2.552-7.052 3.832-1.611.878-3.21 1.778-4.82 2.657-2.076 1.132-4.155 2.26-6.239 3.375-1.739.931-3.478 1.863-5.241 2.748-.674.339-1.681.347-2.072.858-1.044 1.365-2.721 1.586-3.995 2.519-1.195.875-2.672 1.362-4.012 2.046-.948.483-1.865 1.029-2.813 1.511-1.295.658-2.616 1.265-3.909 1.927-.949.486-1.842 1.086-2.81 1.526-1.272.577-2.581 1.038-3.701 1.938-.513.412-1.27.517-1.905.787-.726.309-1.468.599-2.152.986-.918.518-1.753 1.187-2.685 1.673-1.609.84-3.278 1.562-4.897 2.382-1.332.675-2.622 1.432-3.943 2.129-1.659.876-3.334 1.721-4.995 2.594-.812.427-1.563 1.119-2.419 1.281-1.514.285-2.587 1.378-4.018 1.829-1.335.422-2.481 1.411-3.749 2.079-1.433.755-2.899 1.45-4.368 2.136-1.153.538-2.333 1.019-3.498 1.531-1.648.725-3.299 1.442-4.936 2.19-.949.435-1.856.965-2.811 1.384-2.263.992-4.54 1.953-6.824 2.896-.258.107-.6.015-.916.015-.493 1.319-2.103.6-2.734 1.329Zm151.805-77.14c.834.191 1.663.299 2.433.574 1.409.502 2.762 1.161 4.176 1.645 1.546.53 3.134.943 4.707 1.395 1.235.356 2.463.912 3.715.977 1.173.06 2.192.78 3.462.476 1.102-.263 2.309-.06 3.466-.125 2.381-.134 4.608-.895 6.765-1.837 1.247-.545 2.576-1.074 3.594-1.932 1.35-1.138 2.245-2.69 2.648-4.471.461-2.033.714-4.097.688-6.169-.023-1.893-.187-3.794-.441-5.671-.267-1.979-1.145-3.836-2.604-5.115-1.666-1.461-3.54-2.756-5.677-3.561-.851-.321-1.674-.718-2.499-1.101-.783-.363-1.557-.745-2.327-1.134-.651-.33-1.291-.682-2.002-1.059-2.489 1.225-5.215 2.394-7.413 4.451-.416.348-.864.696-1.255 1.1-1.112 1.147-2.261 2.265-3.279 3.492-.86 1.037-1.548 2.215-2.328 3.32-.425.603-.657 1.438-1.032 1.89-1.186 1.428-1.701 3.084-2.272 4.745-.326.948-.522 1.94-.816 2.9-.442 1.442-.917 2.874-1.38 4.309-.07.215-.155.425-.329.901Zm-216.7177 5.863-.294.198c.0976.531.213 1.059.2881 1.592.091.648.1565 1.299.2175 1.95.0801.855.0105 1.734.4293 2.531.4576.871.8633 1.775 1.3887 2.603.6935 1.094 1.5026 2.114 2.2223 3.191.6048.906 1.103 1.885 1.741 2.765.5463.753 1.2436 1.396 1.8356 2.12.3297.402.5781.871.8678 1.307.7057 1.062 1.3535 2.169 2.1372 3.17.9141 1.169 1.9789 2.218 2.9228 3.365 1.4644 1.779 2.8614 3.613 4.3264 5.39.747.905 1.616 1.71 2.366 2.613.631.761 1.175 1.595 1.748 2.403.467.659.917 1.33 1.381 1.99.053.076.149.175.224.174.97-.021 1.232.934 1.798 1.407 1.132.949 2.006 2.201 3.018 3.3.477.519 1.066.937 1.533 1.464 1.032 1.162 1.991 2.39 3.032 3.544 1.287 1.427 2.646 2.79 3.94 4.211 1.79 1.964 3.552 3.953 5.32 5.938.883.992 1.741 2.007 2.629 2.994 1.328 1.477 2.68 2.932 4.007 4.409.578.644 1.097 1.341 1.684 1.976.715.772 1.496 1.483 2.209 2.258.854.929 1.639 1.921 2.503 2.841.908.967 1.871 1.883 2.815 2.816.923.911 1.844 1.826 2.79 2.713.142.133.419.162.633.161.075 0 .21-.235.213-.366.045-1.654.093-3.309.07-4.963-.003-.205-.383-.476-.644-.595-1.089-.493-2.463-.689-3.218-1.481-.607-.635-1.111-1.545-1.693-2.31-.689-.905-1.314-1.869-2.081-2.701-1.319-1.431-2.745-2.764-4.092-4.171-.741-.775-1.405-1.623-2.116-2.428-.865-.98-1.742-1.95-2.617-2.92-.858-.951-1.74-1.882-2.577-2.85-.836-.965-1.613-1.98-2.447-2.947-.62-.719-1.319-1.371-1.925-2.099-.366-.44-1.123-.658-.929-1.457-1.221-.043-1.117-1.317-1.767-1.898-.407-.364-.714-.837-1.086-1.242-.577-.628-1.209-1.208-1.748-1.865-.802-.98-1.516-2.032-2.319-3.011-.693-.845-1.496-1.6-2.18-2.451-.889-1.105-1.674-2.283-2.656-3.328-.948-1.01-1.696-2.205-2.557-3.299-1.404-1.783-2.799-3.574-4.251-5.318-1.325-1.591-2.731-3.115-4.075-4.691-.2484-.292-.3085-.746-.5618-1.031-.6389-.721-1.3361-1.39-2.0149-2.074-.2466-.249-.6365-.44-.7367-.734-.2799-.82-.7707-1.396-1.3685-2.039-1.2795-1.376-2.2835-3.008-3.3931-4.54-.4903-.677-.9359-1.387-1.4488-2.046-1.3601-1.747-2.7318-3.486-4.1304-5.203-.3992-.49-.906-.893-1.3635-1.336Zm214.8887-7.493c.065-1.143.019-2.148.198-3.112.371-1.992.823-3.971 1.325-5.935.163-.637.608-1.198.885-1.812.505-1.119.885-2.305 1.497-3.359.506-.87 1.289-1.577 1.919-2.38.986-1.253 1.947-2.525 2.957-3.84-.522-.344-1.191-.976-1.986-1.264-1.44-.522-2.943-.893-4.442-1.229-2.375-.533-4.786-.913-7.144-1.507-.929-.234-1.579-.258-2.043.639-.088.168-.06.408-.17.551-.842 1.099-1.552 2.248-1.831 3.639-.254 1.27-.439 2.537-.526 3.834-.176 2.584.097 5.081 1.121 7.471.199.465.487.896.769 1.321.769 1.159 1.42 2.436 2.371 3.427 1.313 1.368 2.93 2.418 4.554 3.419.211.13.505.128.546.137Zm-2.383-27.6112c.675.1921 1.381.6404 1.957.5119 1.942-.4327 3.608.545 5.259 1.0713 2.048.654 4.184 1.385 5.931 2.772.543.431.904.455 1.397-.047.389-.396.897-.674 1.348-1.011 1.359-1.014 2.715-2.0301 4.152-3.1048-.874-.3548-1.807-.7378-2.744-1.1136-2.178-.8738-4.415-1.5289-6.774-1.6392-1.739-.0812-3.444-.0022-5.192.3127-2.052.3697-3.878.9714-5.334 2.2477ZM76.8825 99.9056c-.1233-.0081-.2466-.0161-.3699-.0242.048.8566.096 1.7126.144 2.5686.0753.004.1506.009.2259.014v-2.5584Z" fill="#000"/>
+ </g>
+ <defs>
+ <linearGradient id="b" x1="68" y1="3" x2="278" y2="3" gradientUnits="userSpaceOnUse">
+ <stop stop-color="#9059FF"/>
+ <stop offset=".520833" stop-color="#FF4AA2"/>
+ <stop offset="1" stop-color="#FFBD4F"/>
+ </linearGradient>
+ <clipPath id="a">
+ <path fill="#fff" d="M0 0h341v215H0z"/>
+ </clipPath>
+ </defs>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/firefox.svg b/browser/components/newtab/data/content/assets/firefox.svg
new file mode 100644
index 0000000000..0587828f60
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/firefox.svg
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1856 1847.5" style="enable-background:new 0 0 1856 1847.5;" xml:space="preserve">
+<style type="text/css">
+ .st0{display:none;}
+ .st1{fill:url(#SVGID_1_);}
+ .st2{opacity:0.67;}
+ .st3{fill:url(#SVGID_2_);}
+ .st4{fill:url(#SVGID_3_);}
+ .st5{fill:url(#SVGID_4_);}
+ .st6{fill:url(#SVGID_5_);}
+ .st7{fill:url(#SVGID_6_);}
+ .st8{fill:url(#SVGID_7_);}
+ .st9{fill:url(#SVGID_8_);}
+ .st10{opacity:0.53;fill:url(#SVGID_9_);enable-background:new ;}
+ .st11{opacity:0.53;fill:url(#SVGID_10_);enable-background:new ;}
+ .st12{fill:url(#SVGID_11_);}
+ .st13{fill:url(#SVGID_12_);}
+ .st14{fill:url(#SVGID_13_);}
+ .st15{fill:url(#SVGID_14_);}
+ .st16{fill:none;}
+</style>
+<g id="LiveType" class="st0">
+</g>
+<g id="Outlined">
+ <g>
+ <g>
+
+ <radialGradient id="SVGID_1_" cx="321.9653" cy="2631.8848" r="1876.7874" fx="389.093" fy="2598.7063" gradientTransform="matrix(1 0 0 -1 1258.4413 3044.8896)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#FFF44F"/>
+ <stop offset="0.2949" style="stop-color:#FF980E"/>
+ <stop offset="0.4315" style="stop-color:#FF5D36"/>
+ <stop offset="0.5302" style="stop-color:#FF3750"/>
+ <stop offset="0.7493" style="stop-color:#F5156C"/>
+ <stop offset="0.7648" style="stop-color:#F1136E"/>
+ <stop offset="0.8801" style="stop-color:#DA057A"/>
+ <stop offset="0.9528" style="stop-color:#D2007F"/>
+ </radialGradient>
+ <path class="st1" d="M1588.9,424.3c-149.5-196.4-382.5-318.8-627.6-323.6c-192-3.8-324.7,53.7-399.7,100 c100.4-58.1,245.7-91.1,373-89.4c327.3,4.2,678.8,226.5,731,627.3c59.9,460.1-261.3,844-713.1,845.2 C455.4,1585,153,1145.8,232,751.4c3.9-19.7,2-38.9,8.6-57.5c3.8-69.4,30-178.1,86.7-289.1c-57.2,29.5-130.1,123-166.1,209.6 c-51.9,124.8-70.2,274.1-53.7,416.1c1.2,10.7,2.4,21.3,3.8,31.9c66.6,390.6,406.6,688,816.2,688c457.3,0,828.1-370.7,828.1-828.1 C1755.5,735.4,1693.5,562.9,1588.9,424.3z M278.3,496.2L278.3,496.2L278.3,496.2z"/>
+ <g class="st2">
+
+ <radialGradient id="SVGID_2_" cx="-1019.8155" cy="2554.2456" r="1110.733" fx="-980.0875" fy="2534.6096" gradientTransform="matrix(1 0 0 -1 1258.4413 3044.8896)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#B5007F"/>
+ <stop offset="1" style="stop-color:#F5156C;stop-opacity:0"/>
+ </radialGradient>
+ <path class="st3" d="M1588.9,424.3c-149.5-196.4-382.5-318.8-627.6-323.6c-192-3.8-324.7,53.7-399.7,100 c100.4-58.1,245.7-91.1,373-89.4c327.3,4.2,678.8,226.5,731,627.3c59.9,460.1-261.3,844-713.1,845.2 C455.4,1585,153,1145.8,232,751.4c3.9-19.7,2-38.9,8.6-57.5c3.8-69.4,30-178.1,86.7-289.1c-57.2,29.5-130.1,123-166.1,209.6 c-51.9,124.8-70.2,274.1-53.7,416.1c1.2,10.7,2.4,21.3,3.8,31.9c66.6,390.6,406.6,688,816.2,688 c457.3,0,828.1-370.7,828.1-828.1C1755.5,735.4,1693.5,562.9,1588.9,424.3z M278.3,496.2L278.3,496.2L278.3,496.2z"/>
+ </g>
+
+ <radialGradient id="SVGID_3_" cx="482.4009" cy="2738.6748" r="2203.8347" fx="561.2262" fy="2699.7146" gradientTransform="matrix(1 0 0 -1 1258.4413 3044.8896)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#FFDD00;stop-opacity:0.6"/>
+ <stop offset="8.366719e-02" style="stop-color:#FFD801;stop-opacity:0.5244"/>
+ <stop offset="0.1822" style="stop-color:#FECA05;stop-opacity:0.4353"/>
+ <stop offset="0.2884" style="stop-color:#FEB20C;stop-opacity:0.3394"/>
+ <stop offset="0.3998" style="stop-color:#FD9115;stop-opacity:0.2388"/>
+ <stop offset="0.5154" style="stop-color:#FB6621;stop-opacity:0.1343"/>
+ <stop offset="0.6329" style="stop-color:#F9332F;stop-opacity:2.816400e-02"/>
+ <stop offset="0.664" style="stop-color:#F92433;stop-opacity:0"/>
+ </radialGradient>
+ <path class="st4" d="M1588.9,424.3c-149.5-196.4-382.5-318.8-627.6-323.6c-192-3.8-324.7,53.7-399.7,100 c100.4-58.1,245.7-91.1,373-89.4c327.3,4.2,678.8,226.5,731,627.3c59.9,460.1-261.3,844-713.1,845.2 C455.4,1585,153,1145.8,232,751.4c3.9-19.7,2-38.9,8.6-57.5c3.8-69.4,30-178.1,86.7-289.1c-57.2,29.5-130.1,123-166.1,209.6 c-51.9,124.8-70.2,274.1-53.7,416.1c1.2,10.7,2.4,21.3,3.8,31.9c66.6,390.6,406.6,688,816.2,688c457.3,0,828.1-370.7,828.1-828.1 C1755.5,735.4,1693.5,562.9,1588.9,424.3z M278.3,496.2L278.3,496.2L278.3,496.2z"/>
+ </g>
+ <g>
+
+ <radialGradient id="SVGID_4_" cx="975.7665" cy="1493.5381" r="2843.1211" gradientTransform="matrix(1 0 0 -1 0 2512)" gradientUnits="userSpaceOnUse">
+ <stop offset="0.1528" style="stop-color:#960E18"/>
+ <stop offset="0.2061" style="stop-color:#CC2335;stop-opacity:0.5541"/>
+ <stop offset="0.2495" style="stop-color:#F13148;stop-opacity:0.1914"/>
+ <stop offset="0.2724" style="stop-color:#FF3750;stop-opacity:0"/>
+ </radialGradient>
+ <path class="st5" d="M1588.9,424.3c-149.5-196.4-382.5-318.8-627.6-323.6c-192-3.8-324.7,53.7-399.7,100 c100.4-58.1,245.7-91.1,373-89.4c327.3,4.2,678.8,226.5,731,627.3c59.9,460.1-261.3,844-713.1,845.2 C455.4,1585,153,1145.8,232,751.4c3.9-19.7,2-38.9,8.6-57.5c3.8-69.4,30-178.1,86.7-289.1c-57.2,29.5-130.1,123-166.1,209.6 c-51.9,124.8-70.2,274.1-53.7,416.1c1.2,10.7,2.4,21.3,3.8,31.9c66.6,390.6,406.6,688,816.2,688c457.3,0,828.1-370.7,828.1-828.1 C1755.5,735.4,1693.5,562.9,1588.9,424.3z M278.3,496.2L278.3,496.2L278.3,496.2z"/>
+
+ <radialGradient id="SVGID_5_" cx="760.6194" cy="1529.2881" r="2843.1211" gradientTransform="matrix(1 0 0 -1 0 2512)" gradientUnits="userSpaceOnUse">
+ <stop offset="0.1129" style="stop-color:#960E18"/>
+ <stop offset="0.1893" style="stop-color:#CC2335;stop-opacity:0.5541"/>
+ <stop offset="0.2515" style="stop-color:#F13148;stop-opacity:0.1914"/>
+ <stop offset="0.2843" style="stop-color:#FF3750;stop-opacity:0"/>
+ </radialGradient>
+ <path class="st6" d="M1588.9,424.3c-149.5-196.4-382.5-318.8-627.6-323.6c-192-3.8-324.7,53.7-399.7,100 c100.4-58.1,245.7-91.1,373-89.4c327.3,4.2,678.8,226.5,731,627.3c59.9,460.1-261.3,844-713.1,845.2 C455.4,1585,153,1145.8,232,751.4c3.9-19.7,2-38.9,8.6-57.5c3.8-69.4,30-178.1,86.7-289.1c-57.2,29.5-130.1,123-166.1,209.6 c-51.9,124.8-70.2,274.1-53.7,416.1c1.2,10.7,2.4,21.3,3.8,31.9c66.6,390.6,406.6,688,816.2,688c457.3,0,828.1-370.7,828.1-828.1 C1755.5,735.4,1693.5,562.9,1588.9,424.3z M278.3,496.2L278.3,496.2L278.3,496.2z"/>
+ </g>
+
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-209.3687" y1="2784.0808" x2="277.0962" y2="1941.499" gradientTransform="matrix(1 0 0 -1 1258.4413 3044.8896)">
+ <stop offset="0" style="stop-color:#FFBC04"/>
+ <stop offset="0.2597" style="stop-color:#FFA202;stop-opacity:0.4886"/>
+ <stop offset="0.5078" style="stop-color:#FF8E00;stop-opacity:0"/>
+ </linearGradient>
+ <path class="st7" d="M1665.6,738.5c6.6,50.8,8.6,100.8,6.2,149.5c27.4-4.1,54.9-7.7,82.4-10.9c-9.2-169.5-69.2-325.4-165.3-452.8 c-149.5-196.4-382.5-318.8-627.6-323.6c-192-3.8-324.7,53.7-399.7,100c100.4-58.1,245.7-91.1,373-89.4 C1261.9,115.4,1613.4,337.7,1665.6,738.5z"/>
+ <g>
+
+ <radialGradient id="SVGID_7_" cx="244.0767" cy="2202.7847" r="1837.1556" fx="309.7869" fy="2170.3069" gradientTransform="matrix(0.9589 0 0 -0.9589 1306.9894 2461.7681)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#FF980E"/>
+ <stop offset="0.295" style="stop-color:#FF7139"/>
+ <stop offset="0.4846" style="stop-color:#FF5B51"/>
+ <stop offset="0.626" style="stop-color:#FF4F5E"/>
+ <stop offset="0.7365" style="stop-color:#FF4055"/>
+ <stop offset="0.8428" style="stop-color:#FF3750"/>
+ </radialGradient>
+ <path class="st8" d="M1685.7,715.6c-46.5-418.8-421-607.1-751.1-604.4c-127.2,1-272.5,31.3-373,89.4 c-46.9,28.9-71.3,53.4-73.6,55.8c2.7-2.2,10.6-8.7,23.8-17.8c0.4-0.3,0.9-0.6,1.3-0.9c0.4-0.3,0.8-0.5,1.2-0.8 c47.9-33,101.9-57,159-73.7c87.3-25.5,181.7-34.1,272.6-31.8c373.4,21.5,636.9,330.7,646.1,659.8 c7.6,272.4-215.9,489.6-473.5,502.2c-187.3,9.1-363.8-81.3-450.1-262.2c-19.2-40.3-33.3-81.2-40.6-130.6 C587,625.2,772.3,390.4,942.3,332.3c-91.7-79.9-321.4-74.5-492.4,51c-123.1,90.4-203,227.9-229.5,391.9 c-20.2,125.1-1.2,255.2,48.4,371.3c50.5,118.4,132.6,222.7,235.8,299.6c112.1,83.4,247.1,132,386.2,142.6 c20.5,1.6,41.1,2.3,61.7,2.3C1499.6,1591,1736.9,1176.7,1685.7,715.6z"/>
+
+ <radialGradient id="SVGID_8_" cx="244.0767" cy="2202.7847" r="1837.1556" fx="309.7869" fy="2170.3069" gradientTransform="matrix(0.9589 0 0 -0.9589 1306.9894 2461.7681)" gradientUnits="userSpaceOnUse">
+ <stop offset="8.407450e-02" style="stop-color:#FFDE08"/>
+ <stop offset="0.2081" style="stop-color:#FFD609;stop-opacity:0.832"/>
+ <stop offset="0.4033" style="stop-color:#FFBF0B;stop-opacity:0.5677"/>
+ <stop offset="0.6437" style="stop-color:#FF9B0F;stop-opacity:0.242"/>
+ <stop offset="0.8224" style="stop-color:#FF7B12;stop-opacity:0"/>
+ </radialGradient>
+ <path class="st9" d="M1685.7,715.6c-46.5-418.8-421-607.1-751.1-604.4c-127.2,1-272.5,31.3-373,89.4 c-46.9,28.9-71.3,53.4-73.6,55.8c2.7-2.2,10.6-8.7,23.8-17.8c0.4-0.3,0.9-0.6,1.3-0.9c0.4-0.3,0.8-0.5,1.2-0.8 c47.9-33,101.9-57,159-73.7c87.3-25.5,181.7-34.1,272.6-31.8c373.4,21.5,636.9,330.7,646.1,659.8 c7.6,272.4-215.9,489.6-473.5,502.2c-187.3,9.1-363.8-81.3-450.1-262.2c-19.2-40.3-33.3-81.2-40.6-130.6 C587,625.2,772.3,390.4,942.3,332.3c-91.7-79.9-321.4-74.5-492.4,51c-123.1,90.4-203,227.9-229.5,391.9 c-20.2,125.1-1.2,255.2,48.4,371.3c50.5,118.4,132.6,222.7,235.8,299.6c112.1,83.4,247.1,132,386.2,142.6 c20.5,1.6,41.1,2.3,61.7,2.3C1499.6,1591,1736.9,1176.7,1685.7,715.6z"/>
+ </g>
+ <g>
+
+ <radialGradient id="SVGID_9_" cx="538.6154" cy="664.721" r="863.9618" gradientTransform="matrix(0.2472 0.969 1.0112 -0.258 328.7156 547.2202)" gradientUnits="userSpaceOnUse">
+ <stop offset="0.3634" style="stop-color:#FF3750"/>
+ <stop offset="0.4111" style="stop-color:#FF444B;stop-opacity:0.7895"/>
+ <stop offset="0.5902" style="stop-color:#FF7139;stop-opacity:0"/>
+ </radialGradient>
+ <path class="st10" d="M1685.7,715.6c-46.5-418.8-421-607.1-751.1-604.4c-127.2,1-272.5,31.3-373,89.4 c-46.9,28.9-71.3,53.4-73.6,55.8c2.7-2.2,10.6-8.7,23.8-17.8c0.4-0.3,0.9-0.6,1.3-0.9c0.4-0.3,0.8-0.5,1.2-0.8 c47.9-33,101.9-57,159-73.7c87.3-25.5,181.7-34.1,272.6-31.8c373.4,21.5,636.9,330.7,646.1,659.8 c7.6,272.4-215.9,489.6-473.5,502.2c-187.3,9.1-363.8-81.3-450.1-262.2c-19.2-40.3-33.3-81.2-40.6-130.6 C587,625.2,772.3,390.4,942.3,332.3c-91.7-79.9-321.4-74.5-492.4,51c-123.1,90.4-203,227.9-229.5,391.9 c-20.2,125.1-1.2,255.2,48.4,371.3c50.5,118.4,132.6,222.7,235.8,299.6c112.1,83.4,247.1,132,386.2,142.6 c20.5,1.6,41.1,2.3,61.7,2.3C1499.6,1591,1736.9,1176.7,1685.7,715.6z"/>
+
+ <radialGradient id="SVGID_10_" cx="389.6962" cy="589.2068" r="862.9537" gradientTransform="matrix(0.2472 0.969 0.9698 -0.2474 318.7961 738.6102)" gradientUnits="userSpaceOnUse">
+ <stop offset="0.2159" style="stop-color:#FF3750;stop-opacity:0.8"/>
+ <stop offset="0.2702" style="stop-color:#FF444B;stop-opacity:0.6316"/>
+ <stop offset="0.4739" style="stop-color:#FF7139;stop-opacity:0"/>
+ </radialGradient>
+ <path class="st11" d="M1685.7,715.6c-46.5-418.8-421-607.1-751.1-604.4c-127.2,1-272.5,31.3-373,89.4 c-46.9,28.9-71.3,53.4-73.6,55.8c2.7-2.2,10.6-8.7,23.8-17.8c0.4-0.3,0.9-0.6,1.3-0.9c0.4-0.3,0.8-0.5,1.2-0.8 c47.9-33,101.9-57,159-73.7c87.3-25.5,181.7-34.1,272.6-31.8c373.4,21.5,636.9,330.7,646.1,659.8 c7.6,272.4-215.9,489.6-473.5,502.2c-187.3,9.1-363.8-81.3-450.1-262.2c-19.2-40.3-33.3-81.2-40.6-130.6 C587,625.2,772.3,390.4,942.3,332.3c-91.7-79.9-321.4-74.5-492.4,51c-123.1,90.4-203,227.9-229.5,391.9 c-20.2,125.1-1.2,255.2,48.4,371.3c50.5,118.4,132.6,222.7,235.8,299.6c112.1,83.4,247.1,132,386.2,142.6 c20.5,1.6,41.1,2.3,61.7,2.3C1499.6,1591,1736.9,1176.7,1685.7,715.6z"/>
+ </g>
+ <g>
+
+ <radialGradient id="SVGID_11_" cx="610.7241" cy="2410.3098" r="3105.1294" gradientTransform="matrix(0.9589 0 0 -0.9589 1306.9894 2461.7681)" gradientUnits="userSpaceOnUse">
+ <stop offset="5.356570e-02" style="stop-color:#FFF44F"/>
+ <stop offset="0.4573" style="stop-color:#FF980E"/>
+ <stop offset="0.5211" style="stop-color:#FF8424"/>
+ <stop offset="0.5871" style="stop-color:#FF7634"/>
+ <stop offset="0.6393" style="stop-color:#FF7139"/>
+ </radialGradient>
+ <path class="st12" d="M1118.5,1293.4c353.6-21.5,504.9-313.4,514.3-520.7c14.8-323.7-177.7-672.7-686.9-641.2 c-90.8-2.3-185.3,6.3-272.6,31.8c-76.5,23.3-129.6,53.8-159,73.7c-0.4,0.3-0.8,0.5-1.2,0.8c-0.5,0.3-0.9,0.6-1.3,0.9 c-7.9,5.5-15.7,11.3-23.2,17.4c14.2-9.7,189.8-113.1,433.8-81.2C1214.7,213.1,1482,440,1482,739.4 c0,230.4-178.4,406.2-387.4,393.7C784.2,1114.4,706,796.8,867.4,659.6c-43.5-9.4-125.4,9-182.3,93.9 c-51.1,76.3-48.2,194.1-16.7,277.6C754.7,1212.1,931.3,1304.8,1118.5,1293.4z"/>
+ </g>
+ <g>
+
+ <linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="1321.7657" y1="2265.9978" x2="477.6807" y2="803.9998" gradientTransform="matrix(1 0 0 -1 0 2512)">
+ <stop offset="0" style="stop-color:#FFF44F;stop-opacity:0.8"/>
+ <stop offset="0.75" style="stop-color:#FFF44F;stop-opacity:0"/>
+ </linearGradient>
+ <path class="st13" d="M1588.9,424.3c-22.2-29.1-46.4-56.4-72-82.1c-20.5-21.7-42.6-41.8-65.7-60.3c13.3,11.6,26.1,23.9,38.2,36.9 c44.8,48.3,80.2,105.4,100.9,168c43.2,130.5,40.4,293.9-42.1,422.2c-98.3,152.9-258.2,228.4-431.2,224.7c-7.5,0-15-0.1-22.6-0.6 C784.2,1114.4,706,796.8,867.5,659.6c-43.5-9.4-125.4,9-182.4,93.9c-51.1,76.3-48.2,194.1-16.7,277.6 c-19.2-40.2-33.3-81.2-40.6-130.6C587,625.2,772.3,390.4,942.3,332.3c-91.7-79.9-321.4-74.5-492.4,51 c-99.6,73.1-170.9,177.1-208.5,301.1c5.5-69.5,31.9-173.4,86-279.5c-57.2,29.5-130.1,123-166.1,209.6 c-51.9,124.8-70.2,274.1-53.7,416.1c1.2,10.7,2.4,21.3,3.8,31.9c66.6,390.6,406.6,688,816.2,688c457.3,0,828.1-370.7,828.1-828.1 C1755.5,735.4,1693.5,562.9,1588.9,424.3z"/>
+ </g>
+
+ <linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="-205.4111" y1="1906.6858" x2="-205.4111" y2="2933.979" gradientTransform="matrix(1 0 0 -1 1258.4413 3044.8896)">
+ <stop offset="0" style="stop-color:#3A8EE6"/>
+ <stop offset="0.2359" style="stop-color:#5C79F0"/>
+ <stop offset="0.6293" style="stop-color:#9059FF"/>
+ <stop offset="1" style="stop-color:#C139E6"/>
+ </linearGradient>
+ <path class="st14" d="M1590.4,486.7c-20.7-62.5-56.1-119.6-100.9-168c-52.8-56.9-118.5-100.2-188-133.9 c-59.2-28.7-121-51.3-184.8-65.4c-114.4-25.2-234.4-24.7-342.5-2C656.7,142.2,553.4,192.9,488,256.3c49-29.7,117.3-53.8,166-66.1 c226-57,474.8,4.7,644.5,167.1c34.1,32.6,64.7,69.1,89.5,109.4c101.2,164.2,91.6,370.5,12.7,492.2 c-58.6,90.4-184.1,175.2-301.3,174.3c179.7,9.4,347.2-66.2,448.9-224.3C1630.8,780.6,1633.6,617.2,1590.4,486.7z"/>
+
+ <linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="-583.4494" y1="2938.6887" x2="250.1202" y2="2105.1191" gradientTransform="matrix(1 0 0 -1 1258.4413 3044.8896)">
+ <stop offset="0.8054" style="stop-color:#9059FF;stop-opacity:0"/>
+ <stop offset="1" style="stop-color:#6E008B;stop-opacity:0.5"/>
+ </linearGradient>
+ <path class="st15" d="M1590.4,486.7c-20.7-62.5-56.1-119.6-100.9-168c-52.8-56.9-118.5-100.2-188-133.9 c-59.2-28.7-121-51.3-184.8-65.4c-114.4-25.2-234.4-24.7-342.5-2C656.7,142.2,553.4,192.9,488,256.3c49-29.7,117.3-53.8,166-66.1 c226-57,474.8,4.7,644.5,167.1c34.1,32.6,64.7,69.1,89.5,109.4c101.2,164.2,91.6,370.5,12.7,492.2 c-58.6,90.4-184.1,175.2-301.3,174.3c179.7,9.4,347.2-66.2,448.9-224.3C1630.8,780.6,1633.6,617.2,1590.4,486.7z"/>
+ </g>
+ <rect x="745.5" y="50.5" class="st16" width="50" height="50"/>
+</g>
+<g id="Layer_3">
+</g>
+<g id="Layer_4">
+</g>
+<g id="Layer_5">
+</g>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/glyph-cfr-feature-16.svg b/browser/components/newtab/data/content/assets/glyph-cfr-feature-16.svg
new file mode 100644
index 0000000000..871b48ca45
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-cfr-feature-16.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="context-fill" fill-opacity="context-fill-opacity" d="M10 13H6a1 1 0 0 1-1-1 4.552 4.552 0 0 0-1.1-1.87A7.017 7.017 0 0 1 2 6a6 6 0 1 1 12 0 7.017 7.017 0 0 1-1.9 4.13A4.552 4.552 0 0 0 11 12a1 1 0 0 1-1 1zm-3.188-2h2.376a8.489 8.489 0 0 1 1.328-2.093A5.415 5.415 0 0 0 12 6a4.054 4.054 0 0 0-4-4 4.054 4.054 0 0 0-4 4 5.415 5.415 0 0 0 1.484 2.907c.543.629.99 1.334 1.328 2.093zM10 16H6a1 1 0 0 1 0-2h4a1 1 0 0 1 0 2z"/></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/glyph-mail-16.svg b/browser/components/newtab/data/content/assets/glyph-mail-16.svg
new file mode 100644
index 0000000000..8c211c5567
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-mail-16.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="context-fill" d="M13 2H3C1.3 2 0 3.3 0 5v6c0 1.7 1.3 3 3 3h10c1.7 0 3-1.3 3-3V5c0-1.7-1.3-3-3-3zm0 2c.1 0 .2 0 .3.1h-.1L8 7.9 2.8 4.1h-.1c.1-.1.2-.1.3-.1h10zm1 7c0 .6-.4 1-1 1H3c-.6 0-1-.4-1-1V4.8c0 .1.1.1.2.1l5.5 4c.1.1.2.1.3.1.1 0 .2 0 .3-.1l5.5-4c.1 0 .1-.1.1-.2.1.1.1.2.1.3v6z"></path></svg>
diff --git a/browser/components/newtab/data/content/assets/glyph-maximize-16.svg b/browser/components/newtab/data/content/assets/glyph-maximize-16.svg
new file mode 100644
index 0000000000..2f45557cfa
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-maximize-16.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="context-fill" d="M14 1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm-1 12H3V3h10z"/><path fill="context-fill" d="M5 9h2v2a1 1 0 0 0 2 0V9h2a1 1 0 0 0 0-2H9V5a1 1 0 0 0-2 0v2H5a1 1 0 0 0 0 2z"/></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/glyph-minimize-16.svg b/browser/components/newtab/data/content/assets/glyph-minimize-16.svg
new file mode 100644
index 0000000000..6bc93fa5e0
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-minimize-16.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="context-fill" d="M14 1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm-1 12H3V3h10z"/><path fill="context-fill" d="M5 9h6a1 1 0 0 0 0-2H5a1 1 0 0 0 0 2z"/></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/glyph-modal-delete-20.svg b/browser/components/newtab/data/content/assets/glyph-modal-delete-20.svg
new file mode 100644
index 0000000000..592f9569a1
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-modal-delete-20.svg
@@ -0,0 +1,8 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20" height="20" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M17.2 4 14 4l0-1.5C14 1.1 12.9 0 11.5 0l-3 0C7.1 0 6 1.1 6 2.5L6 4 2.8 4c-.5 0-.8.3-.8.8s.3.8.8.8l.2 0 0 12C3 18.9 4.1 20 5.5 20l9 0c1.4 0 2.5-1.1 2.5-2.5l0-12 .3 0c.4 0 .8-.3.8-.8s-.4-.7-.9-.7zM7.5 2.3l.8-.8 3.4 0 .8.8 0 1.7-5 0 0-1.7zm8 15.4-.8.8-9.4 0-.8-.8 0-12.2 11 0 0 12.2z"/>
+ <path d="M7.8 16c.4 0 .8-.3.8-.8l0-6.5c0-.4-.3-.8-.8-.8s-.8.4-.8.9l0 6.5c0 .4.3.7.8.7z"/>
+ <path d="M12.2 16c.4 0 .8-.3.8-.8l0-6.5c0-.4-.3-.8-.8-.8s-.8.3-.8.8l0 6.5c.1.5.4.8.8.8z"/>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/glyph-newWindow-16.svg b/browser/components/newtab/data/content/assets/glyph-newWindow-16.svg
new file mode 100644
index 0000000000..0b09bfde5a
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-newWindow-16.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g fill="context-fill"><path d="M14.923 1.618A1 1 0 0 0 14 1H9a1 1 0 0 0 0 2h2.586L8.293 6.293a1 1 0 1 0 1.414 1.414L13 4.414V7a1 1 0 0 0 2 0V2a1 1 0 0 0-.077-.382z"/><path d="M14 10a1 1 0 0 0-1 1v2H3V3h2a1 1 0 0 0 0-2H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1z"/></g></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/glyph-open-file-16.svg b/browser/components/newtab/data/content/assets/glyph-open-file-16.svg
new file mode 100644
index 0000000000..a2a23f09eb
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-open-file-16.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="context-fill" d="M14.859 3.2a1.335 1.335 0 0 1-1.217.8H13v1h1v8H2V5h8V4h-.642a1.365 1.365 0 0 1-1.325-1.11L6.584 1.538A2 2 0 0 0 5.219 1H2a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V5a2 2 0 0 0-1.141-1.8zM2 3h3.219l1.072 1H2zm7.854-.146L11 1.707V8.5a.5.5 0 0 0 1 0V1.707l1.146 1.146a.5.5 0 1 0 .707-.707l-2-2a.5.5 0 0 0-.707 0l-2 2a.5.5 0 0 0 .707.707z"/></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/glyph-pin-16.svg b/browser/components/newtab/data/content/assets/glyph-pin-16.svg
new file mode 100644
index 0000000000..c951bc1c9d
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-pin-16.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="m15.817 13.933-4.092-4.092 2.057-2.057a1.622 1.622 0 0 0 .352-1.771 1.62 1.62 0 0 0-1.501-1.003l-1.851 0-3.175-3.177c-.021-.021-.049-.03-.072-.048l.719-.719A.625.625 0 0 0 7.37.182L1.183 6.37a.625.625 0 0 0 .884.884l.719-.719c.017.023.026.05.047.072L6.01 9.783l0 1.85c0 .66.394 1.249 1.003 1.501a1.623 1.623 0 0 0 1.771-.352l2.057-2.057 4.092 4.092a.625.625 0 0 0 .884-.884zM6.944 2.94l3.079 3.078.623.242 1.987 0c.226 0 .317.162.347.231a.363.363 0 0 1-.082.408L7.9 11.897a.362.362 0 0 1-.408.082.363.363 0 0 1-.231-.347l0-1.992-.25-.625L3.94 5.944l0-.567 2.51-2.509.494.072z"/>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/glyph-pocket-archive-16.svg b/browser/components/newtab/data/content/assets/glyph-pocket-archive-16.svg
new file mode 100644
index 0000000000..10cf13c4d2
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-pocket-archive-16.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="context-fill" fill-opacity="context-fill-opacity" d="M1 14.667V4h14v10.667c0 .736-.597 1.333-1.333 1.333H2.333A1.333 1.333 0 0 1 1 14.667zM1 0h14a1 1 0 0 1 0 2H1a1 1 0 1 1 0-2zm9.341 7.247l-3.295 2.884-.839-.838a1 1 0 1 0-1.414 1.414l1.5 1.5a1 1 0 0 0 1.366.046l4-3.5a1 1 0 0 0-1.318-1.506z"/></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/glyph-pocket-delete-16.svg b/browser/components/newtab/data/content/assets/glyph-pocket-delete-16.svg
new file mode 100644
index 0000000000..95bb4d3edb
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-pocket-delete-16.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="context-fill" fill-opacity="context-fill-opacity" d="M4 2v-.667C4 .597 4.597 0 5.333 0h5.334C11.403 0 12 .597 12 1.333V2h3.02a1 1 0 0 1 0 2H1.003a1 1 0 1 1 0-2H4zM2 14.667V6h12v8.667c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 0 1 2 14.667z"/></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/glyph-unpin-16.svg b/browser/components/newtab/data/content/assets/glyph-unpin-16.svg
new file mode 100644
index 0000000000..2352839340
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-unpin-16.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="context-fill" d="M11.414 10l2.293-2.293a1 1 0 0 0 0-1.414 4.418 4.418 0 0 0-.8-.622L11.425 7.15h.008l-4.3 4.3v-.017l-1.48 1.476a3.865 3.865 0 0 0 .692.834 1 1 0 0 0 1.37-.042L10 11.414l3.293 3.293a1 1 0 0 0 1.414-1.414zm3.293-8.707a1 1 0 0 0-1.414 0L9.7 4.882A2.382 2.382 0 0 1 8 2.586V2a1 1 0 0 0-1.707-.707l-5 5A1 1 0 0 0 2 8h.586a2.382 2.382 0 0 1 2.3 1.7l-3.593 3.593a1 1 0 1 0 1.414 1.414l12-12a1 1 0 0 0 0-1.414zm-9 6a4.414 4.414 0 0 0-1.571-1.015l2.143-2.142a4.4 4.4 0 0 0 1.013 1.571 4.191 4.191 0 0 0 .9.684l-1.8 1.8a4.2 4.2 0 0 0-.684-.898z"/></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/glyph-webextension-16.svg b/browser/components/newtab/data/content/assets/glyph-webextension-16.svg
new file mode 100644
index 0000000000..b29ea04bf2
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/glyph-webextension-16.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="context-fill" fill-opacity="context-fill-opacity" d="M14.5 8c-.971 0-1 1-1.75 1a.765.765 0 0 1-.75-.75V5a1 1 0 0 0-1-1H7.75A.765.765 0 0 1 7 3.25c0-.75 1-.779 1-1.75C8 .635 7.1 0 6 0S4 .635 4 1.5c0 .971 1 1 1 1.75a.765.765 0 0 1-.75.75H1a1 1 0 0 0-1 1v2.25A.765.765 0 0 0 .75 8c.75 0 .779-1 1.75-1C3.365 7 4 7.9 4 9s-.635 2-1.5 2c-.971 0-1-1-1.75-1a.765.765 0 0 0-.75.75V15a1 1 0 0 0 1 1h3.25a.765.765 0 0 0 .75-.75c0-.75-1-.779-1-1.75 0-.865.9-1.5 2-1.5s2 .635 2 1.5c0 .971-1 1-1 1.75a.765.765 0 0 0 .75.75H11a1 1 0 0 0 1-1v-3.25a.765.765 0 0 1 .75-.75c.75 0 .779 1 1.75 1 .865 0 1.5-.9 1.5-2s-.635-2-1.5-2z"/></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/heart.webp b/browser/components/newtab/data/content/assets/heart.webp
new file mode 100644
index 0000000000..fb9f7fdca5
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/heart.webp
Binary files differ
diff --git a/browser/components/newtab/data/content/assets/icon-removed-bookmark.svg b/browser/components/newtab/data/content/assets/icon-removed-bookmark.svg
new file mode 100644
index 0000000000..e222da3bfd
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/icon-removed-bookmark.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="context-fill" d="M15.845 6.063A1.1 1.1 0 0 0 15 5.331l-1.125-.2-1.729 1.723.872.156-2.45 2.635.5 3.572L8 11.618l-1.291.673-3.468 3.468a1.057 1.057 0 0 0 1.066.038L8 13.874l3.688 1.921a1.1 1.1 0 0 0 1.6-1.126l-.609-4.358 2.926-3.147a1.1 1.1 0 0 0 .24-1.101zm-1.138-4.77a1 1 0 0 0-1.414 0L10.6 3.983 8.984.733A1.093 1.093 0 0 0 8 .124a1.1 1.1 0 0 0-.985.609L5.089 4.6l-4.082.729a1.1 1.1 0 0 0-.614 1.833L3.32 10.31l-.155 1.111-1.872 1.872a1 1 0 1 0 1.414 1.414l12-12a1 1 0 0 0 0-1.414zM2.981 7.01l3.449-.617L8 3.243l1.111 2.232L5.2 9.391z"></path></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/long-zap.svg b/browser/components/newtab/data/content/assets/long-zap.svg
new file mode 100644
index 0000000000..757a5483f9
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/long-zap.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 16" width="400" height="16"><defs><linearGradient id="a" y1="13.69" x2="435.45" y2="13.69" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.91716 0 0 .7708 .27 .687)"><stop offset="0" stop-color="#616eb3"/><stop offset=".5" stop-color="#ec1067"/><stop offset="1" stop-color="#f6901e"/></linearGradient></defs><path d="M4.45 2.81c96.1 9.33 158.63 4.37 195.55 2.68 51.53-2.35 183.67-4.32 193.85-1.91 9.32 2.21-81.45-.12-114.57 7.08C258 15.28 315.1 7.17 322.94 14" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke="url(#a)"/></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/mobile-download-qr-existing-user-cn.svg b/browser/components/newtab/data/content/assets/mobile-download-qr-existing-user-cn.svg
new file mode 100644
index 0000000000..99d174a259
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mobile-download-qr-existing-user-cn.svg
@@ -0,0 +1,5 @@
+
+<!-- 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/. -->
+<svg width="150" height="150" viewBox="0 0 150 150" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path d="M136 1H14C6.82 1 1 6.82 1 14v122c0 7.18 5.82 13 13 13h122c7.18 0 13-5.82 13-13V14c0-7.18-5.82-13-13-13Z" fill="#fff" stroke="#DCDCDC" stroke-width="2"/><path d="M16 16h3.576v3.576H16V16Zm3.576 0h3.575v3.576h-3.575V16Zm3.575 0h3.576v3.576h-3.576V16Zm3.576 0h3.576v3.576h-3.576V16Zm3.576 0h3.576v3.576h-3.576V16Zm3.576 0h3.576v3.576h-3.576V16Zm3.576 0h3.575v3.576h-3.575V16Zm17.878 0h3.576v3.576h-3.576V16Zm17.88 0h3.575v3.576h-3.576V16Zm10.726 0h3.576v3.576H83.94V16Zm3.576 0h3.576v3.576h-3.576V16Zm3.576 0h3.576v3.576H91.09V16Zm3.576 0h3.575v3.576h-3.575V16Zm7.151 0h3.576v3.576h-3.576V16Zm7.152 0h3.575v3.576h-3.575V16Zm3.575 0h3.576v3.576h-3.576V16Zm3.576 0h3.576v3.576h-3.576V16Zm3.576 0h3.576v3.576h-3.576V16Zm3.576 0h3.575v3.576h-3.575V16Zm3.575 0h3.576v3.576h-3.576V16Zm3.576 0H134v3.576h-3.576V16ZM16 19.576h3.576v3.575H16v-3.575Zm21.455 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm10.727 0h3.576v3.575H83.94v-3.575Zm25.031 0h3.575v3.575h-3.575v-3.575Zm21.454 0H134v3.575h-3.576v-3.575ZM16 23.15h3.576v3.576H16v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm14.303 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576H83.94v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576H91.09v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm7.151 0H134v3.576h-3.576v-3.576ZM16 26.727h3.576v3.576H16v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm17.878 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576H91.09v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm7.151 0H134v3.576h-3.576v-3.576ZM16 30.303h3.576v3.576H16v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576H91.09v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm7.151 0H134v3.576h-3.576v-3.576ZM16 33.879h3.576v3.576H16v-3.576Zm21.455 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm17.88 0h3.575v3.576h-3.576v-3.576Zm3.575 0h3.576v3.576H91.09v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm21.454 0H134v3.576h-3.576v-3.576ZM16 37.455h3.576v3.575H16v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm3.576 0H134v3.575h-3.576v-3.575ZM51.758 41.03h3.575v3.576h-3.575V41.03Zm3.575 0h3.576v3.576h-3.576V41.03Zm10.728 0h3.575v3.576h-3.575V41.03Zm3.575 0h3.576v3.576h-3.576V41.03Zm14.303 0h3.576v3.576H83.94V41.03Zm14.303 0h3.576v3.576h-3.576V41.03Zm3.576 0h3.576v3.576h-3.576V41.03Zm-78.666 3.576h3.575v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576H41.03v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm28.606 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576H83.94v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576ZM16 48.182h3.576v3.576H16v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm17.879 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm14.303 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm7.151 0H134v3.576h-3.576v-3.576ZM16 51.758h3.576v3.575H16v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575H41.03v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm10.727 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575H83.94v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575H91.09v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm10.727 0H134v3.575h-3.576v-3.575ZM16 55.333h3.576v3.576H16v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm21.455 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm14.303 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm14.303 0h3.576v3.576h-3.576v-3.576ZM16 58.91h3.576v3.576H16v-3.576Zm21.455 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576H91.09v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576ZM16 62.485h3.576v3.576H16v-3.576Zm14.303 0h3.576v3.576h-3.576v-3.576Zm17.879 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576H91.09v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm21.454 0H134v3.576h-3.576v-3.576ZM16 66.06h3.576v3.575H16v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm10.728 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm10.727 0h3.576v3.575h-3.576v-3.575Zm10.727 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm10.727 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm7.151 0H134v3.575h-3.576v-3.575ZM16 69.636h3.576v3.576H16v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576H41.03v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576H83.94v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm17.878 0h3.576v3.576h-3.576v-3.576Zm3.576 0H134v3.576h-3.576v-3.576ZM19.576 73.212h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm21.455 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576ZM16 76.788h3.576v3.576H16v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576H41.03v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576H91.09v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm10.728 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0H134v3.576h-3.576v-3.576ZM16 80.364h3.576v3.575H16v-3.575Zm17.879 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm14.303 0h3.575v3.575h-3.575v-3.575Zm14.303 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.576v3.575h-3.576v-3.575Zm21.454 0h3.576v3.575h-3.576v-3.575Zm17.879 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm3.576 0H134v3.575h-3.576v-3.575ZM19.576 83.939h3.575v3.576h-3.575V83.94Zm3.575 0h3.576v3.576h-3.576V83.94Zm3.576 0h3.576v3.576h-3.576V83.94Zm21.455 0h3.576v3.576h-3.576V83.94Zm14.303 0h3.576v3.576h-3.576V83.94Zm3.576 0h3.575v3.576h-3.575V83.94Zm7.151 0h3.576v3.576h-3.576V83.94Zm7.152 0h3.575v3.576h-3.575V83.94Zm17.878 0h3.576v3.576h-3.576V83.94Zm10.728 0h3.575v3.576h-3.575V83.94Zm3.575 0h3.576v3.576h-3.576V83.94Zm3.576 0h3.576v3.576h-3.576V83.94Zm3.576 0h3.576v3.576h-3.576V83.94Zm7.151 0h3.576v3.576h-3.576V83.94ZM16 87.515h3.576v3.576H16v-3.576Zm21.455 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576H41.03v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm14.303 0h3.576v3.576h-3.576v-3.576Zm-92.97 3.576h3.576v3.576h-3.575V91.09Zm7.152 0h3.576v3.576h-3.576V91.09Zm3.576 0h3.576v3.576h-3.576V91.09Zm21.455 0h3.575v3.576h-3.575V91.09Zm7.151 0h3.576v3.576h-3.576V91.09Zm3.576 0h3.576v3.576h-3.576V91.09Zm3.576 0h3.575v3.576h-3.575V91.09Zm3.575 0h3.576v3.576h-3.576V91.09Zm7.152 0h3.576v3.576h-3.576V91.09Zm35.757 0h3.576v3.576h-3.576V91.09Zm7.152 0h3.576v3.576h-3.576V91.09Zm3.576 0h3.575v3.576h-3.575V91.09Zm7.151 0H134v3.576h-3.576V91.09ZM16 94.667h3.576v3.575H16v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575H41.03v-3.575Zm7.152 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm17.879 0h3.576v3.575h-3.576v-3.575Zm7.151 0h3.576v3.575H83.94v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm17.879 0H134v3.575h-3.576v-3.575ZM26.727 98.242h3.576v3.576h-3.576v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm14.303 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm17.88 0h3.575v3.576h-3.576v-3.576Zm28.605 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0H134v3.576h-3.576v-3.576ZM16 101.818h3.576v3.576H16v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm14.303 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm3.576 0H134v3.576h-3.576v-3.576Zm-85.818 3.576h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm17.88 0h3.575v3.576h-3.576v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576H83.94v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576H91.09v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm14.303 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm7.151 0H134v3.576h-3.576v-3.576ZM16 108.97h3.576v3.575H16v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm10.727 0h3.576v3.575h-3.576v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575H83.94v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm14.303 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm14.303 0H134v3.575h-3.576v-3.575ZM16 112.545h3.576v3.576H16v-3.576Zm21.455 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576H91.09v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm14.303 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0H134v3.576h-3.576v-3.576ZM16 116.121h3.576v3.576H16v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm14.303 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576H83.94v-3.576Zm7.152 0h3.576v3.576H91.09v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576ZM16 119.697h3.576v3.576H16v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm17.879 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576H91.09v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm3.575 0h3.576v3.576h-3.576v-3.576ZM16 123.273h3.576v3.575H16v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm7.152 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm10.728 0h3.575v3.575h-3.575v-3.575Zm3.575 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm21.454 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm14.303 0h3.576v3.575h-3.576v-3.575Zm3.576 0h3.576v3.575h-3.576v-3.575Zm7.151 0h3.576v3.575h-3.576v-3.575Zm3.576 0H134v3.575h-3.576v-3.575ZM16 126.848h3.576v3.576H16v-3.576Zm21.455 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm7.152 0h3.575v3.576h-3.575v-3.576Zm7.151 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576Zm10.727 0h3.576v3.576h-3.576v-3.576Zm3.576 0h3.575v3.576h-3.575v-3.576ZM16 130.424h3.576V134H16v-3.576Zm3.576 0h3.575V134h-3.575v-3.576Zm3.575 0h3.576V134h-3.576v-3.576Zm3.576 0h3.576V134h-3.576v-3.576Zm3.576 0h3.576V134h-3.576v-3.576Zm3.576 0h3.576V134h-3.576v-3.576Zm3.576 0h3.575V134h-3.575v-3.576Zm10.727 0h3.576V134h-3.576v-3.576Zm3.576 0h3.575V134h-3.575v-3.576Zm3.575 0h3.576V134h-3.576v-3.576Zm3.576 0h3.576V134h-3.576v-3.576Zm3.576 0h3.576V134h-3.576v-3.576Zm14.303 0h3.576V134h-3.576v-3.576Zm25.03 0h3.576V134h-3.576v-3.576Zm3.576 0h3.576V134h-3.576v-3.576Zm3.576 0h3.575V134h-3.575v-3.576Zm7.151 0h3.576V134h-3.576v-3.576Zm3.576 0h3.576V134h-3.576v-3.576Zm3.576 0h3.575V134h-3.575v-3.576Zm7.151 0H134V134h-3.576v-3.576Z" fill="#000"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h150v150H0z"/></clipPath></defs></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/mobile-download-qr-existing-user.svg b/browser/components/newtab/data/content/assets/mobile-download-qr-existing-user.svg
new file mode 100644
index 0000000000..8c1662bf48
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mobile-download-qr-existing-user.svg
@@ -0,0 +1,7 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+- License, v. 2.0. If a copy of the MPL was not distributed with this
+- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<svg width="150" height="150" viewBox="0 0 150 150" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="1" y="1" width="148" height="148" rx="13" fill="white" stroke="#DCDCDC" stroke-width="2"/>
+<path d="M16 16H20.069V20.069H16V16ZM20.069 16H24.1379V20.069H20.069V16ZM24.1379 16H28.2069V20.069H24.1379V16ZM28.2069 16H32.2759V20.069H28.2069V16ZM32.2759 16H36.3448V20.069H32.2759V16ZM36.3448 16H40.4138V20.069H36.3448V16ZM40.4138 16H44.4828V20.069H40.4138V16ZM64.8276 16H68.8966V20.069H64.8276V16ZM68.8966 16H72.9655V20.069H68.8966V16ZM77.0345 16H81.1034V20.069H77.0345V16ZM81.1034 16H85.1724V20.069H81.1034V16ZM85.1724 16H89.2414V20.069H85.1724V16ZM89.2414 16H93.3103V20.069H89.2414V16ZM93.3103 16H97.3793V20.069H93.3103V16ZM105.517 16H109.586V20.069H105.517V16ZM109.586 16H113.655V20.069H109.586V16ZM113.655 16H117.724V20.069H113.655V16ZM117.724 16H121.793V20.069H117.724V16ZM121.793 16H125.862V20.069H121.793V16ZM125.862 16H129.931V20.069H125.862V16ZM129.931 16H134V20.069H129.931V16ZM16 20.069H20.069V24.1379H16V20.069ZM40.4138 20.069H44.4828V24.1379H40.4138V20.069ZM48.5517 20.069H52.6207V24.1379H48.5517V20.069ZM56.6897 20.069H60.7586V24.1379H56.6897V20.069ZM68.8966 20.069H72.9655V24.1379H68.8966V20.069ZM72.9655 20.069H77.0345V24.1379H72.9655V20.069ZM77.0345 20.069H81.1034V24.1379H77.0345V20.069ZM81.1034 20.069H85.1724V24.1379H81.1034V20.069ZM97.3793 20.069H101.448V24.1379H97.3793V20.069ZM105.517 20.069H109.586V24.1379H105.517V20.069ZM129.931 20.069H134V24.1379H129.931V20.069ZM16 24.1379H20.069V28.2069H16V24.1379ZM24.1379 24.1379H28.2069V28.2069H24.1379V24.1379ZM28.2069 24.1379H32.2759V28.2069H28.2069V24.1379ZM32.2759 24.1379H36.3448V28.2069H32.2759V24.1379ZM40.4138 24.1379H44.4828V28.2069H40.4138V24.1379ZM52.6207 24.1379H56.6897V28.2069H52.6207V24.1379ZM56.6897 24.1379H60.7586V28.2069H56.6897V24.1379ZM60.7586 24.1379H64.8276V28.2069H60.7586V24.1379ZM81.1034 24.1379H85.1724V28.2069H81.1034V24.1379ZM85.1724 24.1379H89.2414V28.2069H85.1724V24.1379ZM93.3103 24.1379H97.3793V28.2069H93.3103V24.1379ZM97.3793 24.1379H101.448V28.2069H97.3793V24.1379ZM105.517 24.1379H109.586V28.2069H105.517V24.1379ZM113.655 24.1379H117.724V28.2069H113.655V24.1379ZM117.724 24.1379H121.793V28.2069H117.724V24.1379ZM121.793 24.1379H125.862V28.2069H121.793V24.1379ZM129.931 24.1379H134V28.2069H129.931V24.1379ZM16 28.2069H20.069V32.2759H16V28.2069ZM24.1379 28.2069H28.2069V32.2759H24.1379V28.2069ZM28.2069 28.2069H32.2759V32.2759H28.2069V28.2069ZM32.2759 28.2069H36.3448V32.2759H32.2759V28.2069ZM40.4138 28.2069H44.4828V32.2759H40.4138V28.2069ZM56.6897 28.2069H60.7586V32.2759H56.6897V28.2069ZM60.7586 28.2069H64.8276V32.2759H60.7586V28.2069ZM68.8966 28.2069H72.9655V32.2759H68.8966V28.2069ZM72.9655 28.2069H77.0345V32.2759H72.9655V28.2069ZM77.0345 28.2069H81.1034V32.2759H77.0345V28.2069ZM93.3103 28.2069H97.3793V32.2759H93.3103V28.2069ZM105.517 28.2069H109.586V32.2759H105.517V28.2069ZM113.655 28.2069H117.724V32.2759H113.655V28.2069ZM117.724 28.2069H121.793V32.2759H117.724V28.2069ZM121.793 28.2069H125.862V32.2759H121.793V28.2069ZM129.931 28.2069H134V32.2759H129.931V28.2069ZM16 32.2759H20.069V36.3448H16V32.2759ZM24.1379 32.2759H28.2069V36.3448H24.1379V32.2759ZM28.2069 32.2759H32.2759V36.3448H28.2069V32.2759ZM32.2759 32.2759H36.3448V36.3448H32.2759V32.2759ZM40.4138 32.2759H44.4828V36.3448H40.4138V32.2759ZM60.7586 32.2759H64.8276V36.3448H60.7586V32.2759ZM64.8276 32.2759H68.8966V36.3448H64.8276V32.2759ZM68.8966 32.2759H72.9655V36.3448H68.8966V32.2759ZM72.9655 32.2759H77.0345V36.3448H72.9655V32.2759ZM77.0345 32.2759H81.1034V36.3448H77.0345V32.2759ZM81.1034 32.2759H85.1724V36.3448H81.1034V32.2759ZM89.2414 32.2759H93.3103V36.3448H89.2414V32.2759ZM105.517 32.2759H109.586V36.3448H105.517V32.2759ZM113.655 32.2759H117.724V36.3448H113.655V32.2759ZM117.724 32.2759H121.793V36.3448H117.724V32.2759ZM121.793 32.2759H125.862V36.3448H121.793V32.2759ZM129.931 32.2759H134V36.3448H129.931V32.2759ZM16 36.3448H20.069V40.4138H16V36.3448ZM40.4138 36.3448H44.4828V40.4138H40.4138V36.3448ZM48.5517 36.3448H52.6207V40.4138H48.5517V36.3448ZM52.6207 36.3448H56.6897V40.4138H52.6207V36.3448ZM56.6897 36.3448H60.7586V40.4138H56.6897V36.3448ZM60.7586 36.3448H64.8276V40.4138H60.7586V36.3448ZM68.8966 36.3448H72.9655V40.4138H68.8966V36.3448ZM77.0345 36.3448H81.1034V40.4138H77.0345V36.3448ZM89.2414 36.3448H93.3103V40.4138H89.2414V36.3448ZM93.3103 36.3448H97.3793V40.4138H93.3103V36.3448ZM97.3793 36.3448H101.448V40.4138H97.3793V36.3448ZM105.517 36.3448H109.586V40.4138H105.517V36.3448ZM129.931 36.3448H134V40.4138H129.931V36.3448ZM16 40.4138H20.069V44.4828H16V40.4138ZM20.069 40.4138H24.1379V44.4828H20.069V40.4138ZM24.1379 40.4138H28.2069V44.4828H24.1379V40.4138ZM28.2069 40.4138H32.2759V44.4828H28.2069V40.4138ZM32.2759 40.4138H36.3448V44.4828H32.2759V40.4138ZM36.3448 40.4138H40.4138V44.4828H36.3448V40.4138ZM40.4138 40.4138H44.4828V44.4828H40.4138V40.4138ZM48.5517 40.4138H52.6207V44.4828H48.5517V40.4138ZM56.6897 40.4138H60.7586V44.4828H56.6897V40.4138ZM64.8276 40.4138H68.8966V44.4828H64.8276V40.4138ZM72.9655 40.4138H77.0345V44.4828H72.9655V40.4138ZM81.1034 40.4138H85.1724V44.4828H81.1034V40.4138ZM89.2414 40.4138H93.3103V44.4828H89.2414V40.4138ZM97.3793 40.4138H101.448V44.4828H97.3793V40.4138ZM105.517 40.4138H109.586V44.4828H105.517V40.4138ZM109.586 40.4138H113.655V44.4828H109.586V40.4138ZM113.655 40.4138H117.724V44.4828H113.655V40.4138ZM117.724 40.4138H121.793V44.4828H117.724V40.4138ZM121.793 40.4138H125.862V44.4828H121.793V40.4138ZM125.862 40.4138H129.931V44.4828H125.862V40.4138ZM129.931 40.4138H134V44.4828H129.931V40.4138ZM48.5517 44.4828H52.6207V48.5517H48.5517V44.4828ZM52.6207 44.4828H56.6897V48.5517H52.6207V44.4828ZM56.6897 44.4828H60.7586V48.5517H56.6897V44.4828ZM72.9655 44.4828H77.0345V48.5517H72.9655V44.4828ZM77.0345 44.4828H81.1034V48.5517H77.0345V44.4828ZM85.1724 44.4828H89.2414V48.5517H85.1724V44.4828ZM89.2414 44.4828H93.3103V48.5517H89.2414V44.4828ZM93.3103 44.4828H97.3793V48.5517H93.3103V44.4828ZM32.2759 48.5517H36.3448V52.6207H32.2759V48.5517ZM36.3448 48.5517H40.4138V52.6207H36.3448V48.5517ZM40.4138 48.5517H44.4828V52.6207H40.4138V48.5517ZM44.4828 48.5517H48.5517V52.6207H44.4828V48.5517ZM52.6207 48.5517H56.6897V52.6207H52.6207V48.5517ZM60.7586 48.5517H64.8276V52.6207H60.7586V48.5517ZM64.8276 48.5517H68.8966V52.6207H64.8276V48.5517ZM68.8966 48.5517H72.9655V52.6207H68.8966V48.5517ZM77.0345 48.5517H81.1034V52.6207H77.0345V48.5517ZM81.1034 48.5517H85.1724V52.6207H81.1034V48.5517ZM89.2414 48.5517H93.3103V52.6207H89.2414V48.5517ZM97.3793 48.5517H101.448V52.6207H97.3793V48.5517ZM105.517 48.5517H109.586V52.6207H105.517V48.5517ZM109.586 48.5517H113.655V52.6207H109.586V48.5517ZM125.862 48.5517H129.931V52.6207H125.862V48.5517ZM16 52.6207H20.069V56.6897H16V52.6207ZM20.069 52.6207H24.1379V56.6897H20.069V52.6207ZM28.2069 52.6207H32.2759V56.6897H28.2069V52.6207ZM36.3448 52.6207H40.4138V56.6897H36.3448V52.6207ZM44.4828 52.6207H48.5517V56.6897H44.4828V52.6207ZM48.5517 52.6207H52.6207V56.6897H48.5517V52.6207ZM56.6897 52.6207H60.7586V56.6897H56.6897V52.6207ZM60.7586 52.6207H64.8276V56.6897H60.7586V52.6207ZM68.8966 52.6207H72.9655V56.6897H68.8966V52.6207ZM93.3103 52.6207H97.3793V56.6897H93.3103V52.6207ZM97.3793 52.6207H101.448V56.6897H97.3793V52.6207ZM109.586 52.6207H113.655V56.6897H109.586V52.6207ZM113.655 52.6207H117.724V56.6897H113.655V52.6207ZM117.724 52.6207H121.793V56.6897H117.724V52.6207ZM121.793 52.6207H125.862V56.6897H121.793V52.6207ZM125.862 52.6207H129.931V56.6897H125.862V52.6207ZM129.931 52.6207H134V56.6897H129.931V52.6207ZM16 56.6897H20.069V60.7586H16V56.6897ZM20.069 56.6897H24.1379V60.7586H20.069V56.6897ZM24.1379 56.6897H28.2069V60.7586H24.1379V56.6897ZM28.2069 56.6897H32.2759V60.7586H28.2069V56.6897ZM32.2759 56.6897H36.3448V60.7586H32.2759V56.6897ZM40.4138 56.6897H44.4828V60.7586H40.4138V56.6897ZM44.4828 56.6897H48.5517V60.7586H44.4828V56.6897ZM52.6207 56.6897H56.6897V60.7586H52.6207V56.6897ZM60.7586 56.6897H64.8276V60.7586H60.7586V56.6897ZM64.8276 56.6897H68.8966V60.7586H64.8276V56.6897ZM68.8966 56.6897H72.9655V60.7586H68.8966V56.6897ZM72.9655 56.6897H77.0345V60.7586H72.9655V56.6897ZM77.0345 56.6897H81.1034V60.7586H77.0345V56.6897ZM81.1034 56.6897H85.1724V60.7586H81.1034V56.6897ZM85.1724 56.6897H89.2414V60.7586H85.1724V56.6897ZM89.2414 56.6897H93.3103V60.7586H89.2414V56.6897ZM101.448 56.6897H105.517V60.7586H101.448V56.6897ZM113.655 56.6897H117.724V60.7586H113.655V56.6897ZM117.724 56.6897H121.793V60.7586H117.724V56.6897ZM129.931 56.6897H134V60.7586H129.931V56.6897ZM16 60.7586H20.069V64.8276H16V60.7586ZM24.1379 60.7586H28.2069V64.8276H24.1379V60.7586ZM28.2069 60.7586H32.2759V64.8276H28.2069V60.7586ZM32.2759 60.7586H36.3448V64.8276H32.2759V60.7586ZM48.5517 60.7586H52.6207V64.8276H48.5517V60.7586ZM56.6897 60.7586H60.7586V64.8276H56.6897V60.7586ZM64.8276 60.7586H68.8966V64.8276H64.8276V60.7586ZM72.9655 60.7586H77.0345V64.8276H72.9655V60.7586ZM85.1724 60.7586H89.2414V64.8276H85.1724V60.7586ZM89.2414 60.7586H93.3103V64.8276H89.2414V60.7586ZM101.448 60.7586H105.517V64.8276H101.448V60.7586ZM125.862 60.7586H129.931V64.8276H125.862V60.7586ZM129.931 60.7586H134V64.8276H129.931V60.7586ZM20.069 64.8276H24.1379V68.8966H20.069V64.8276ZM24.1379 64.8276H28.2069V68.8966H24.1379V64.8276ZM32.2759 64.8276H36.3448V68.8966H32.2759V64.8276ZM36.3448 64.8276H40.4138V68.8966H36.3448V64.8276ZM40.4138 64.8276H44.4828V68.8966H40.4138V64.8276ZM48.5517 64.8276H52.6207V68.8966H48.5517V64.8276ZM64.8276 64.8276H68.8966V68.8966H64.8276V64.8276ZM68.8966 64.8276H72.9655V68.8966H68.8966V64.8276ZM72.9655 64.8276H77.0345V68.8966H72.9655V64.8276ZM85.1724 64.8276H89.2414V68.8966H85.1724V64.8276ZM93.3103 64.8276H97.3793V68.8966H93.3103V64.8276ZM109.586 64.8276H113.655V68.8966H109.586V64.8276ZM117.724 64.8276H121.793V68.8966H117.724V64.8276ZM129.931 64.8276H134V68.8966H129.931V64.8276ZM20.069 68.8966H24.1379V72.9655H20.069V68.8966ZM24.1379 68.8966H28.2069V72.9655H24.1379V68.8966ZM28.2069 68.8966H32.2759V72.9655H28.2069V68.8966ZM36.3448 68.8966H40.4138V72.9655H36.3448V68.8966ZM44.4828 68.8966H48.5517V72.9655H44.4828V68.8966ZM48.5517 68.8966H52.6207V72.9655H48.5517V68.8966ZM52.6207 68.8966H56.6897V72.9655H52.6207V68.8966ZM68.8966 68.8966H72.9655V72.9655H68.8966V68.8966ZM77.0345 68.8966H81.1034V72.9655H77.0345V68.8966ZM85.1724 68.8966H89.2414V72.9655H85.1724V68.8966ZM89.2414 68.8966H93.3103V72.9655H89.2414V68.8966ZM105.517 68.8966H109.586V72.9655H105.517V68.8966ZM113.655 68.8966H117.724V72.9655H113.655V68.8966ZM121.793 68.8966H125.862V72.9655H121.793V68.8966ZM129.931 68.8966H134V72.9655H129.931V68.8966ZM16 72.9655H20.069V77.0345H16V72.9655ZM28.2069 72.9655H32.2759V77.0345H28.2069V72.9655ZM40.4138 72.9655H44.4828V77.0345H40.4138V72.9655ZM44.4828 72.9655H48.5517V77.0345H44.4828V72.9655ZM48.5517 72.9655H52.6207V77.0345H48.5517V72.9655ZM52.6207 72.9655H56.6897V77.0345H52.6207V72.9655ZM64.8276 72.9655H68.8966V77.0345H64.8276V72.9655ZM68.8966 72.9655H72.9655V77.0345H68.8966V72.9655ZM72.9655 72.9655H77.0345V77.0345H72.9655V72.9655ZM77.0345 72.9655H81.1034V77.0345H77.0345V72.9655ZM81.1034 72.9655H85.1724V77.0345H81.1034V72.9655ZM97.3793 72.9655H101.448V77.0345H97.3793V72.9655ZM113.655 72.9655H117.724V77.0345H113.655V72.9655ZM129.931 72.9655H134V77.0345H129.931V72.9655ZM16 77.0345H20.069V81.1034H16V77.0345ZM20.069 77.0345H24.1379V81.1034H20.069V77.0345ZM24.1379 77.0345H28.2069V81.1034H24.1379V77.0345ZM28.2069 77.0345H32.2759V81.1034H28.2069V77.0345ZM44.4828 77.0345H48.5517V81.1034H44.4828V77.0345ZM48.5517 77.0345H52.6207V81.1034H48.5517V77.0345ZM52.6207 77.0345H56.6897V81.1034H52.6207V77.0345ZM56.6897 77.0345H60.7586V81.1034H56.6897V77.0345ZM72.9655 77.0345H77.0345V81.1034H72.9655V77.0345ZM77.0345 77.0345H81.1034V81.1034H77.0345V77.0345ZM85.1724 77.0345H89.2414V81.1034H85.1724V77.0345ZM97.3793 77.0345H101.448V81.1034H97.3793V77.0345ZM101.448 77.0345H105.517V81.1034H101.448V77.0345ZM109.586 77.0345H113.655V81.1034H109.586V77.0345ZM117.724 77.0345H121.793V81.1034H117.724V77.0345ZM125.862 77.0345H129.931V81.1034H125.862V77.0345ZM129.931 77.0345H134V81.1034H129.931V77.0345ZM24.1379 81.1034H28.2069V85.1724H24.1379V81.1034ZM28.2069 81.1034H32.2759V85.1724H28.2069V81.1034ZM36.3448 81.1034H40.4138V85.1724H36.3448V81.1034ZM40.4138 81.1034H44.4828V85.1724H40.4138V81.1034ZM48.5517 81.1034H52.6207V85.1724H48.5517V81.1034ZM64.8276 81.1034H68.8966V85.1724H64.8276V81.1034ZM68.8966 81.1034H72.9655V85.1724H68.8966V81.1034ZM81.1034 81.1034H85.1724V85.1724H81.1034V81.1034ZM89.2414 81.1034H93.3103V85.1724H89.2414V81.1034ZM109.586 81.1034H113.655V85.1724H109.586V81.1034ZM113.655 81.1034H117.724V85.1724H113.655V81.1034ZM125.862 81.1034H129.931V85.1724H125.862V81.1034ZM129.931 81.1034H134V85.1724H129.931V81.1034ZM16 85.1724H20.069V89.2414H16V85.1724ZM24.1379 85.1724H28.2069V89.2414H24.1379V85.1724ZM44.4828 85.1724H48.5517V89.2414H44.4828V85.1724ZM48.5517 85.1724H52.6207V89.2414H48.5517V85.1724ZM52.6207 85.1724H56.6897V89.2414H52.6207V85.1724ZM64.8276 85.1724H68.8966V89.2414H64.8276V85.1724ZM68.8966 85.1724H72.9655V89.2414H68.8966V85.1724ZM72.9655 85.1724H77.0345V89.2414H72.9655V85.1724ZM77.0345 85.1724H81.1034V89.2414H77.0345V85.1724ZM93.3103 85.1724H97.3793V89.2414H93.3103V85.1724ZM101.448 85.1724H105.517V89.2414H101.448V85.1724ZM105.517 85.1724H109.586V89.2414H105.517V85.1724ZM109.586 85.1724H113.655V89.2414H109.586V85.1724ZM113.655 85.1724H117.724V89.2414H113.655V85.1724ZM129.931 85.1724H134V89.2414H129.931V85.1724ZM24.1379 89.2414H28.2069V93.3103H24.1379V89.2414ZM28.2069 89.2414H32.2759V93.3103H28.2069V89.2414ZM32.2759 89.2414H36.3448V93.3103H32.2759V89.2414ZM40.4138 89.2414H44.4828V93.3103H40.4138V89.2414ZM44.4828 89.2414H48.5517V93.3103H44.4828V89.2414ZM64.8276 89.2414H68.8966V93.3103H64.8276V89.2414ZM81.1034 89.2414H85.1724V93.3103H81.1034V89.2414ZM85.1724 89.2414H89.2414V93.3103H85.1724V89.2414ZM97.3793 89.2414H101.448V93.3103H97.3793V89.2414ZM109.586 89.2414H113.655V93.3103H109.586V89.2414ZM113.655 89.2414H117.724V93.3103H113.655V89.2414ZM117.724 89.2414H121.793V93.3103H117.724V89.2414ZM121.793 89.2414H125.862V93.3103H121.793V89.2414ZM129.931 89.2414H134V93.3103H129.931V89.2414ZM32.2759 93.3103H36.3448V97.3793H32.2759V93.3103ZM44.4828 93.3103H48.5517V97.3793H44.4828V93.3103ZM48.5517 93.3103H52.6207V97.3793H48.5517V93.3103ZM52.6207 93.3103H56.6897V97.3793H52.6207V93.3103ZM56.6897 93.3103H60.7586V97.3793H56.6897V93.3103ZM68.8966 93.3103H72.9655V97.3793H68.8966V93.3103ZM77.0345 93.3103H81.1034V97.3793H77.0345V93.3103ZM81.1034 93.3103H85.1724V97.3793H81.1034V93.3103ZM85.1724 93.3103H89.2414V97.3793H85.1724V93.3103ZM93.3103 93.3103H97.3793V97.3793H93.3103V93.3103ZM109.586 93.3103H113.655V97.3793H109.586V93.3103ZM125.862 93.3103H129.931V97.3793H125.862V93.3103ZM16 97.3793H20.069V101.448H16V97.3793ZM20.069 97.3793H24.1379V101.448H20.069V97.3793ZM24.1379 97.3793H28.2069V101.448H24.1379V97.3793ZM32.2759 97.3793H36.3448V101.448H32.2759V97.3793ZM36.3448 97.3793H40.4138V101.448H36.3448V97.3793ZM40.4138 97.3793H44.4828V101.448H40.4138V97.3793ZM44.4828 97.3793H48.5517V101.448H44.4828V97.3793ZM52.6207 97.3793H56.6897V101.448H52.6207V97.3793ZM60.7586 97.3793H64.8276V101.448H60.7586V97.3793ZM68.8966 97.3793H72.9655V101.448H68.8966V97.3793ZM72.9655 97.3793H77.0345V101.448H72.9655V97.3793ZM77.0345 97.3793H81.1034V101.448H77.0345V97.3793ZM85.1724 97.3793H89.2414V101.448H85.1724V97.3793ZM89.2414 97.3793H93.3103V101.448H89.2414V97.3793ZM97.3793 97.3793H101.448V101.448H97.3793V97.3793ZM101.448 97.3793H105.517V101.448H101.448V97.3793ZM105.517 97.3793H109.586V101.448H105.517V97.3793ZM109.586 97.3793H113.655V101.448H109.586V97.3793ZM113.655 97.3793H117.724V101.448H113.655V97.3793ZM125.862 97.3793H129.931V101.448H125.862V97.3793ZM48.5517 101.448H52.6207V105.517H48.5517V101.448ZM56.6897 101.448H60.7586V105.517H56.6897V101.448ZM72.9655 101.448H77.0345V105.517H72.9655V101.448ZM77.0345 101.448H81.1034V105.517H77.0345V101.448ZM81.1034 101.448H85.1724V105.517H81.1034V101.448ZM85.1724 101.448H89.2414V105.517H85.1724V101.448ZM89.2414 101.448H93.3103V105.517H89.2414V101.448ZM93.3103 101.448H97.3793V105.517H93.3103V101.448ZM97.3793 101.448H101.448V105.517H97.3793V101.448ZM113.655 101.448H117.724V105.517H113.655V101.448ZM121.793 101.448H125.862V105.517H121.793V101.448ZM129.931 101.448H134V105.517H129.931V101.448ZM16 105.517H20.069V109.586H16V105.517ZM20.069 105.517H24.1379V109.586H20.069V105.517ZM24.1379 105.517H28.2069V109.586H24.1379V105.517ZM28.2069 105.517H32.2759V109.586H28.2069V105.517ZM32.2759 105.517H36.3448V109.586H32.2759V105.517ZM36.3448 105.517H40.4138V109.586H36.3448V105.517ZM40.4138 105.517H44.4828V109.586H40.4138V105.517ZM48.5517 105.517H52.6207V109.586H48.5517V105.517ZM64.8276 105.517H68.8966V109.586H64.8276V105.517ZM68.8966 105.517H72.9655V109.586H68.8966V105.517ZM89.2414 105.517H93.3103V109.586H89.2414V105.517ZM93.3103 105.517H97.3793V109.586H93.3103V105.517ZM97.3793 105.517H101.448V109.586H97.3793V105.517ZM105.517 105.517H109.586V109.586H105.517V105.517ZM113.655 105.517H117.724V109.586H113.655V105.517ZM129.931 105.517H134V109.586H129.931V105.517ZM16 109.586H20.069V113.655H16V109.586ZM40.4138 109.586H44.4828V113.655H40.4138V109.586ZM48.5517 109.586H52.6207V113.655H48.5517V109.586ZM52.6207 109.586H56.6897V113.655H52.6207V109.586ZM72.9655 109.586H77.0345V113.655H72.9655V109.586ZM85.1724 109.586H89.2414V113.655H85.1724V109.586ZM89.2414 109.586H93.3103V113.655H89.2414V109.586ZM93.3103 109.586H97.3793V113.655H93.3103V109.586ZM97.3793 109.586H101.448V113.655H97.3793V109.586ZM113.655 109.586H117.724V113.655H113.655V109.586ZM117.724 109.586H121.793V113.655H117.724V109.586ZM125.862 109.586H129.931V113.655H125.862V109.586ZM16 113.655H20.069V117.724H16V113.655ZM24.1379 113.655H28.2069V117.724H24.1379V113.655ZM28.2069 113.655H32.2759V117.724H28.2069V113.655ZM32.2759 113.655H36.3448V117.724H32.2759V113.655ZM40.4138 113.655H44.4828V117.724H40.4138V113.655ZM48.5517 113.655H52.6207V117.724H48.5517V113.655ZM52.6207 113.655H56.6897V117.724H52.6207V113.655ZM68.8966 113.655H72.9655V117.724H68.8966V113.655ZM72.9655 113.655H77.0345V117.724H72.9655V113.655ZM77.0345 113.655H81.1034V117.724H77.0345V113.655ZM85.1724 113.655H89.2414V117.724H85.1724V113.655ZM93.3103 113.655H97.3793V117.724H93.3103V113.655ZM97.3793 113.655H101.448V117.724H97.3793V113.655ZM101.448 113.655H105.517V117.724H101.448V113.655ZM105.517 113.655H109.586V117.724H105.517V113.655ZM109.586 113.655H113.655V117.724H109.586V113.655ZM113.655 113.655H117.724V117.724H113.655V113.655ZM125.862 113.655H129.931V117.724H125.862V113.655ZM129.931 113.655H134V117.724H129.931V113.655ZM16 117.724H20.069V121.793H16V117.724ZM24.1379 117.724H28.2069V121.793H24.1379V117.724ZM28.2069 117.724H32.2759V121.793H28.2069V117.724ZM32.2759 117.724H36.3448V121.793H32.2759V117.724ZM40.4138 117.724H44.4828V121.793H40.4138V117.724ZM56.6897 117.724H60.7586V121.793H56.6897V117.724ZM60.7586 117.724H64.8276V121.793H60.7586V117.724ZM81.1034 117.724H85.1724V121.793H81.1034V117.724ZM85.1724 117.724H89.2414V121.793H85.1724V117.724ZM89.2414 117.724H93.3103V121.793H89.2414V117.724ZM109.586 117.724H113.655V121.793H109.586V117.724ZM117.724 117.724H121.793V121.793H117.724V117.724ZM121.793 117.724H125.862V121.793H121.793V117.724ZM125.862 117.724H129.931V121.793H125.862V117.724ZM16 121.793H20.069V125.862H16V121.793ZM24.1379 121.793H28.2069V125.862H24.1379V121.793ZM28.2069 121.793H32.2759V125.862H28.2069V121.793ZM32.2759 121.793H36.3448V125.862H32.2759V121.793ZM40.4138 121.793H44.4828V125.862H40.4138V121.793ZM56.6897 121.793H60.7586V125.862H56.6897V121.793ZM64.8276 121.793H68.8966V125.862H64.8276V121.793ZM72.9655 121.793H77.0345V125.862H72.9655V121.793ZM81.1034 121.793H85.1724V125.862H81.1034V121.793ZM85.1724 121.793H89.2414V125.862H85.1724V121.793ZM89.2414 121.793H93.3103V125.862H89.2414V121.793ZM93.3103 121.793H97.3793V125.862H93.3103V121.793ZM97.3793 121.793H101.448V125.862H97.3793V121.793ZM101.448 121.793H105.517V125.862H101.448V121.793ZM117.724 121.793H121.793V125.862H117.724V121.793ZM121.793 121.793H125.862V125.862H121.793V121.793ZM125.862 121.793H129.931V125.862H125.862V121.793ZM129.931 121.793H134V125.862H129.931V121.793ZM16 125.862H20.069V129.931H16V125.862ZM40.4138 125.862H44.4828V129.931H40.4138V125.862ZM52.6207 125.862H56.6897V129.931H52.6207V125.862ZM60.7586 125.862H64.8276V129.931H60.7586V125.862ZM64.8276 125.862H68.8966V129.931H64.8276V125.862ZM72.9655 125.862H77.0345V129.931H72.9655V125.862ZM77.0345 125.862H81.1034V129.931H77.0345V125.862ZM89.2414 125.862H93.3103V129.931H89.2414V125.862ZM101.448 125.862H105.517V129.931H101.448V125.862ZM105.517 125.862H109.586V129.931H105.517V125.862ZM109.586 125.862H113.655V129.931H109.586V125.862ZM117.724 125.862H121.793V129.931H117.724V125.862ZM125.862 125.862H129.931V129.931H125.862V125.862ZM129.931 125.862H134V129.931H129.931V125.862ZM16 129.931H20.069V134H16V129.931ZM20.069 129.931H24.1379V134H20.069V129.931ZM24.1379 129.931H28.2069V134H24.1379V129.931ZM28.2069 129.931H32.2759V134H28.2069V129.931ZM32.2759 129.931H36.3448V134H32.2759V129.931ZM36.3448 129.931H40.4138V134H36.3448V129.931ZM40.4138 129.931H44.4828V134H40.4138V129.931ZM52.6207 129.931H56.6897V134H52.6207V129.931ZM56.6897 129.931H60.7586V134H56.6897V129.931ZM64.8276 129.931H68.8966V134H64.8276V129.931ZM72.9655 129.931H77.0345V134H72.9655V129.931ZM81.1034 129.931H85.1724V134H81.1034V129.931ZM89.2414 129.931H93.3103V134H89.2414V129.931ZM97.3793 129.931H101.448V134H97.3793V129.931ZM113.655 129.931H117.724V134H113.655V129.931ZM121.793 129.931H125.862V134H121.793V129.931ZM125.862 129.931H129.931V134H125.862V129.931Z" fill="black"/>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/mobile-download-qr-new-user-cn.svg b/browser/components/newtab/data/content/assets/mobile-download-qr-new-user-cn.svg
new file mode 100644
index 0000000000..cf25a0e18d
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mobile-download-qr-new-user-cn.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg width="98" height="98" viewBox="0 0 98 98" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path d="M90 0H8a8 8 0 0 0-8 8v82a8 8 0 0 0 8 8h82a8 8 0 0 0 8-8V8a8 8 0 0 0-8-8Z" fill="#fff"/><path d="M11 11h2.328v2.328H11V11Zm2.328 0h2.327v2.328h-2.327V11Zm2.327 0h2.328v2.328h-2.328V11Zm2.328 0h2.327v2.328h-2.327V11Zm2.327 0h2.328v2.328H20.31V11Zm2.328 0h2.327v2.328h-2.327V11Zm2.327 0h2.328v2.328h-2.328V11Zm11.638 0h2.328v2.328h-2.328V11Zm11.638 0h2.328v2.328H48.24V11Zm6.983 0h2.328v2.328h-2.328V11Zm2.328 0h2.327v2.328h-2.328V11Zm2.327 0h2.328v2.328h-2.328V11Zm2.328 0h2.327v2.328h-2.327V11Zm4.655 0h2.327v2.328h-2.327V11Zm4.655 0h2.328v2.328h-2.328V11Zm2.328 0h2.327v2.328h-2.328V11Zm2.327 0H78.5v2.328h-2.328V11Zm2.328 0h2.327v2.328H78.5V11Zm2.327 0h2.328v2.328h-2.328V11Zm2.328 0h2.327v2.328h-2.327V11Zm2.327 0h2.328v2.328h-2.328V11ZM11 13.328h2.328v2.327H11v-2.327Zm13.965 0h2.328v2.327h-2.328v-2.327Zm4.656 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.328v2.327H38.93v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327H48.24v-2.327Zm6.983 0h2.328v2.327h-2.328v-2.327Zm16.293 0h2.328v2.327h-2.328v-2.327Zm13.965 0h2.328v2.327h-2.328v-2.327ZM11 15.655h2.328v2.328H11v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H20.31v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm4.656 0h2.327v2.328h-2.327v-2.328Zm9.31 0h2.328v2.328H38.93v-2.328Zm2.328 0h2.327v2.328h-2.328v-2.328Zm4.655 0h2.327v2.328h-2.327v-2.328Zm6.982 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.328v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm6.983 0h2.327v2.328h-2.327v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm4.655 0H78.5v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328H78.5v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328ZM11 17.983h2.328v2.327H11v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327H20.31v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm4.656 0h2.327v2.327h-2.327v-2.327Zm4.655 0h2.327v2.327h-2.327v-2.327Zm11.638 0h2.327v2.327h-2.327v-2.327Zm6.982 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm6.983 0h2.328v2.327h-2.328v-2.327Zm4.655 0H78.5v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327H78.5v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327ZM11 20.31h2.328v2.328H11V20.31Zm4.655 0h2.328v2.328h-2.328V20.31Zm2.328 0h2.327v2.328h-2.327V20.31Zm2.327 0h2.328v2.328H20.31V20.31Zm4.655 0h2.328v2.328h-2.328V20.31Zm4.656 0h2.327v2.328h-2.327V20.31Zm4.655 0h2.327v2.328h-2.327V20.31Zm2.327 0h2.328v2.328h-2.328V20.31Zm2.328 0h2.328v2.328H38.93V20.31Zm4.655 0h2.328v2.328h-2.328V20.31Zm4.655 0h2.328v2.328H48.24V20.31Zm2.328 0h2.327v2.328H50.57V20.31Zm2.327 0h2.328v2.328h-2.328V20.31Zm2.328 0h2.328v2.328h-2.328V20.31Zm2.328 0h2.327v2.328h-2.328V20.31Zm2.327 0h2.328v2.328h-2.328V20.31Zm2.328 0h2.327v2.328h-2.327V20.31Zm2.327 0h2.328v2.328h-2.328V20.31Zm6.983 0h2.328v2.328h-2.328V20.31Zm4.655 0H78.5v2.328h-2.328V20.31Zm2.328 0h2.327v2.328H78.5V20.31Zm2.327 0h2.328v2.328h-2.328V20.31Zm4.655 0h2.328v2.328h-2.328V20.31ZM11 22.638h2.328v2.327H11v-2.327Zm13.965 0h2.328v2.327h-2.328v-2.327Zm4.656 0h2.327v2.327h-2.327v-2.327Zm4.655 0h2.327v2.327h-2.327v-2.327Zm4.655 0h2.328v2.327H38.93v-2.327Zm9.31 0h2.328v2.327H48.24v-2.327Zm11.638 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm6.983 0h2.328v2.327h-2.328v-2.327Zm13.965 0h2.328v2.327h-2.328v-2.327ZM11 24.965h2.328v2.328H11v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H20.31v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.656 0h2.327v2.328h-2.327v-2.328Zm4.655 0h2.327v2.328h-2.327v-2.328Zm4.655 0h2.328v2.328H38.93v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328H48.24v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm4.656 0h2.327v2.328h-2.327v-2.328Zm4.655 0h2.327v2.328h-2.327v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.328v-2.328Zm2.327 0H78.5v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328H78.5v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm-51.206 2.328h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm6.983 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm9.31 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.328v-2.328Zm6.982 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm-51.207 2.328h2.328v2.327h-2.328v-2.327Zm6.983 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm6.982 0h2.328v2.327h-2.328v-2.327Zm9.31 0h2.328v2.327h-2.327v-2.327Zm2.328 0h2.328v2.327H48.24v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm9.31 0h2.328v2.327h-2.327v-2.327Zm6.983 0h2.328v2.327h-2.328v-2.327Zm4.656 0h2.327v2.327h-2.328v-2.327Zm2.327 0H78.5v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327H78.5v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327ZM11 31.948h2.328v2.328H11v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm4.655 0h2.327v2.328h-2.327v-2.328Zm11.638 0h2.327v2.328h-2.327v-2.328Zm11.638 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H48.24v-2.328Zm2.328 0h2.327v2.328H50.57v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm9.31 0h2.328v2.328h-2.327v-2.328Zm2.328 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.328v-2.328Zm4.655 0h2.327v2.328H78.5v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328ZM11 34.276h2.328v2.327H11v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm4.655 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327H20.31v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm6.982 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm4.656 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327H48.24v-2.327Zm6.983 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.328v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm4.656 0h2.327v2.327h-2.328v-2.327Zm2.327 0H78.5v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327H78.5v-2.327Zm6.982 0h2.328v2.327h-2.328v-2.327ZM11 36.603h2.328v2.328H11v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H20.31v-2.328Zm11.638 0h2.328v2.328h-2.328v-2.328Zm6.983 0h2.328v2.328H38.93v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328H48.24v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm9.31 0h2.328v2.328h-2.327v-2.328Zm6.983 0h2.328v2.328h-2.328v-2.328Zm4.656 0h2.327v2.328h-2.328v-2.328Zm9.31 0h2.327v2.328h-2.327v-2.328ZM11 38.931h2.328v2.328H11V38.93Zm13.965 0h2.328v2.328h-2.328V38.93Zm4.656 0h2.327v2.328h-2.327V38.93Zm2.327 0h2.328v2.328h-2.328V38.93Zm2.328 0h2.327v2.328h-2.327V38.93Zm2.327 0h2.328v2.328h-2.328V38.93Zm9.31 0h2.328v2.328h-2.327V38.93Zm2.328 0h2.328v2.328H48.24V38.93Zm2.328 0h2.327v2.328H50.57V38.93Zm9.31 0h2.328v2.328h-2.328V38.93Zm2.328 0h2.327v2.328h-2.327V38.93Zm2.327 0h2.328v2.328h-2.328V38.93Zm2.328 0h2.327v2.328h-2.327V38.93Zm4.655 0h2.328v2.328h-2.328V38.93Zm4.655 0H78.5v2.328h-2.328V38.93Zm2.328 0h2.327v2.328H78.5V38.93ZM11 41.259h2.328v2.327H11v-2.328Zm6.983 0h2.327v2.327h-2.327v-2.328Zm2.327 0h2.328v2.327H20.31v-2.328Zm9.31 0h2.328v2.327h-2.327v-2.328Zm2.328 0h2.328v2.327h-2.328v-2.328Zm2.328 0h2.327v2.327h-2.327v-2.328Zm2.327 0h2.328v2.327h-2.328v-2.328Zm2.328 0h2.328v2.327H38.93v-2.328Zm6.983 0h2.327v2.327h-2.327v-2.328Zm6.982 0h2.328v2.327h-2.328v-2.328Zm6.983 0h2.328v2.327h-2.328v-2.328Zm2.328 0h2.327v2.327h-2.327v-2.328Zm2.327 0h2.328v2.327h-2.328v-2.328Zm2.328 0h2.327v2.327h-2.327v-2.328Zm4.655 0h2.328v2.327h-2.328v-2.328Zm13.965 0h2.328v2.327h-2.328v-2.328ZM11 43.585h2.328v2.328H11v-2.328Zm13.965 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.328v2.328h-2.328v-2.328Zm6.983 0h2.327v2.328h-2.327v-2.328Zm6.982 0h2.328v2.328h-2.328v-2.328Zm6.983 0h2.328v2.328H48.24v-2.328Zm2.328 0h2.327v2.328H50.57v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm6.983 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.328v2.328h-2.328v-2.328Zm4.655 0H78.5v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328H78.5v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328ZM11 45.914h2.328v2.327H11v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm6.982 0h2.328v2.327H20.31v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm6.983 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327H48.24v-2.327Zm2.328 0h2.327v2.327H50.57v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.328v-2.327Zm4.655 0h2.327v2.327h-2.327v-2.327Zm4.655 0h2.327v2.327h-2.327v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm11.638 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327ZM13.328 48.24h2.327v2.328h-2.327V48.24Zm2.327 0h2.328v2.328h-2.328V48.24Zm2.328 0h2.327v2.328h-2.327V48.24Zm6.982 0h2.328v2.328h-2.328V48.24Zm2.328 0h2.328v2.328h-2.328V48.24Zm2.328 0h2.327v2.328h-2.327V48.24Zm2.327 0h2.328v2.328h-2.328V48.24Zm4.655 0h2.328v2.328h-2.328V48.24Zm2.328 0h2.328v2.328H38.93V48.24Zm2.328 0h2.327v2.328h-2.328V48.24Zm4.655 0h2.327v2.328h-2.327V48.24Zm2.327 0h2.328v2.328H48.24V48.24Zm13.966 0h2.327v2.328h-2.327V48.24Zm6.982 0h2.328v2.328h-2.328V48.24Zm2.328 0h2.328v2.328h-2.328V48.24Zm6.983 0h2.327v2.328H78.5V48.24Zm2.327 0h2.328v2.328h-2.328V48.24Zm2.328 0h2.327v2.328h-2.327V48.24ZM13.328 50.57h2.327v2.327h-2.327V50.57Zm4.655 0h2.327v2.327h-2.327V50.57Zm2.327 0h2.328v2.327H20.31V50.57Zm2.328 0h2.327v2.327h-2.327V50.57Zm4.655 0h2.328v2.327h-2.328V50.57Zm2.328 0h2.327v2.327h-2.327V50.57Zm6.982 0h2.328v2.327h-2.328V50.57Zm6.983 0h2.328v2.327h-2.328V50.57Zm6.983 0h2.327v2.327H50.57V50.57Zm6.982 0h2.328v2.327h-2.328V50.57Zm2.328 0h2.328v2.327h-2.328V50.57Zm4.655 0h2.328v2.327h-2.328V50.57Zm4.655 0h2.328v2.327h-2.328V50.57Zm2.328 0h2.328v2.327h-2.328V50.57Zm2.328 0h2.327v2.327h-2.328V50.57Zm6.982 0h2.328v2.327h-2.328V50.57Zm2.328 0h2.327v2.327h-2.327V50.57Zm2.327 0h2.328v2.327h-2.328V50.57Zm-72.154 2.327h2.327v2.328h-2.327v-2.328Zm6.982 0h2.328v2.328H20.31v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm9.31 0h2.328v2.328h-2.327v-2.328Zm9.311 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm4.655 0h2.327v2.328H50.57v-2.328Zm13.965 0h2.328v2.328h-2.328v-2.328Zm11.638 0H78.5v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328H78.5v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328ZM11 55.224h2.328v2.328H11v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H20.31v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm9.31 0h2.328v2.328h-2.328v-2.328Zm9.31 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328H48.24v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm11.638 0h2.328v2.328h-2.328v-2.328Zm6.983 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.328v-2.328Zm2.327 0H78.5v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328H78.5v-2.328Zm4.655 0h2.327v2.328h-2.327v-2.328ZM11 57.552h2.328v2.327H11v-2.328Zm2.328 0h2.327v2.327h-2.327v-2.328Zm11.637 0h2.328v2.327h-2.328v-2.328Zm2.328 0h2.328v2.327h-2.328v-2.328Zm2.328 0h2.327v2.327h-2.327v-2.328Zm6.982 0h2.328v2.327h-2.328v-2.328Zm4.655 0h2.328v2.327h-2.328v-2.328Zm2.328 0h2.328v2.327h-2.328v-2.328Zm2.328 0h2.327v2.327h-2.327v-2.328Zm6.982 0h2.328v2.327h-2.328v-2.328Zm11.638 0h2.328v2.327h-2.328v-2.328Zm9.31 0h2.328v2.327h-2.328v-2.328Zm-55.861 2.327h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H20.31v-2.328Zm13.966 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm4.655 0h2.327v2.328H50.57v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm18.62 0h2.328v2.328h-2.328v-2.328Zm4.656 0h2.327v2.328H78.5v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328ZM11 62.207h2.328v2.327H11v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327H20.31v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm11.638 0h2.328v2.327H48.24v-2.327Zm2.328 0h2.327v2.327H50.57v-2.327Zm11.638 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.328v-2.327Zm11.637 0h2.328v2.327h-2.328v-2.327Zm-67.5 2.327h2.328v2.328h-2.327v-2.328Zm4.656 0h2.327v2.328h-2.327v-2.328Zm9.31 0h2.328v2.328h-2.328v-2.328Zm6.983 0h2.328v2.328H38.93v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H48.24v-2.328Zm9.31 0h2.328v2.328h-2.328v-2.328Zm18.621 0H78.5v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328H78.5v-2.328Zm4.655 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328ZM11 66.862h2.328v2.327H11v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm9.31 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm4.656 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm4.655 0h2.327v2.327H50.57v-2.327Zm6.982 0h2.328v2.327h-2.328v-2.327Zm4.656 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.327v2.327h-2.328v-2.327Zm2.327 0H78.5v2.327h-2.328v-2.327Zm6.983 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm-55.861 2.327h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm11.638 0h2.328v2.328H48.24v-2.328Zm6.983 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.328v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm9.31 0H78.5v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328H78.5v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328ZM11 71.517h2.328v2.328H11v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H20.31v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.656 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm11.638 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H48.24v-2.328Zm6.983 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.328v-2.328Zm9.31 0h2.327v2.328h-2.327v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm4.655 0H78.5v2.328h-2.328v-2.328Zm9.31 0h2.328v2.328h-2.328v-2.328ZM11 73.845h2.328v2.327H11v-2.328Zm13.965 0h2.328v2.327h-2.328v-2.328Zm4.656 0h2.327v2.327h-2.327v-2.328Zm2.327 0h2.328v2.327h-2.328v-2.328Zm2.328 0h2.327v2.327h-2.327v-2.328Zm4.655 0h2.328v2.327H38.93v-2.328Zm2.328 0h2.327v2.327h-2.328v-2.328Zm2.327 0h2.328v2.327h-2.328v-2.328Zm4.655 0h2.328v2.327H48.24v-2.328Zm9.31 0h2.328v2.327h-2.328v-2.328Zm2.328 0h2.328v2.327h-2.328v-2.328Zm6.983 0h2.327v2.327h-2.327v-2.328Zm9.31 0H78.5v2.327h-2.328v-2.328Zm2.328 0h2.327v2.327H78.5v-2.328Zm4.655 0h2.327v2.327h-2.327v-2.328Zm2.327 0h2.328v2.327h-2.328v-2.328ZM11 76.171h2.328V78.5H11v-2.328Zm4.655 0h2.328V78.5h-2.328v-2.328Zm2.328 0h2.327V78.5h-2.327v-2.328Zm2.327 0h2.328V78.5H20.31v-2.328Zm4.655 0h2.328V78.5h-2.328v-2.328Zm11.638 0h2.328V78.5h-2.328v-2.328Zm11.638 0h2.328V78.5H48.24v-2.328Zm6.983 0h2.328V78.5h-2.328v-2.328Zm4.655 0h2.328V78.5h-2.328v-2.328Zm4.655 0h2.328V78.5h-2.328v-2.328Zm2.328 0h2.327V78.5h-2.327v-2.328Zm2.327 0h2.328V78.5h-2.328v-2.328Zm2.328 0h2.328V78.5h-2.328v-2.328Zm2.328 0h2.327V78.5h-2.328v-2.328Zm2.327 0H78.5V78.5h-2.328v-2.328Zm2.328 0h2.327V78.5H78.5v-2.328ZM11 78.5h2.328v2.327H11V78.5Zm4.655 0h2.328v2.327h-2.328V78.5Zm2.328 0h2.327v2.327h-2.327V78.5Zm2.327 0h2.328v2.327H20.31V78.5Zm4.655 0h2.328v2.327h-2.328V78.5Zm6.983 0h2.328v2.327h-2.328V78.5Zm2.328 0h2.327v2.327h-2.327V78.5Zm13.965 0h2.328v2.327H48.24V78.5Zm11.638 0h2.328v2.327h-2.328V78.5Zm6.983 0h2.327v2.327h-2.327V78.5Zm2.327 0h2.328v2.327h-2.328V78.5Zm4.656 0h2.327v2.327h-2.328V78.5Zm2.327 0H78.5v2.327h-2.328V78.5Zm2.328 0h2.327v2.327H78.5V78.5Zm2.327 0h2.328v2.327h-2.328V78.5Zm2.328 0h2.327v2.327h-2.327V78.5ZM11 80.827h2.328v2.328H11v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H20.31v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Zm4.656 0h2.327v2.328h-2.327v-2.328Zm4.655 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm6.983 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H48.24v-2.328Zm2.328 0h2.327v2.328H50.57v-2.328Zm13.965 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm9.31 0H78.5v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328H78.5v-2.328Zm4.655 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328ZM11 83.155h2.328v2.327H11v-2.327Zm13.965 0h2.328v2.327h-2.328v-2.327Zm6.983 0h2.328v2.327h-2.328v-2.327Zm4.655 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.328v2.327H38.93v-2.327Zm6.983 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327H48.24v-2.327Zm2.328 0h2.327v2.327H50.57v-2.327Zm6.982 0h2.328v2.327h-2.328v-2.327Zm4.656 0h2.327v2.327h-2.327v-2.327Zm4.655 0h2.327v2.327h-2.327v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327Zm2.328 0h2.328v2.327h-2.328v-2.327Zm6.983 0h2.327v2.327H78.5v-2.327Zm2.327 0h2.328v2.327h-2.328v-2.327ZM11 85.482h2.328v2.328H11v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328H20.31v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm6.983 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.328v2.328H38.93v-2.328Zm2.328 0h2.327v2.328h-2.328v-2.328Zm9.31 0h2.327v2.328H50.57v-2.328Zm16.293 0h2.327v2.328h-2.327v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm2.328 0h2.328v2.328h-2.328v-2.328Zm4.655 0H78.5v2.328h-2.328v-2.328Zm2.328 0h2.327v2.328H78.5v-2.328Zm2.327 0h2.328v2.328h-2.328v-2.328Zm4.655 0h2.328v2.328h-2.328v-2.328Z" fill="#000"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h98v98H0z"/></clipPath></defs></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/mobile-download-qr-new-user.svg b/browser/components/newtab/data/content/assets/mobile-download-qr-new-user.svg
new file mode 100644
index 0000000000..9a8f61a95c
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mobile-download-qr-new-user.svg
@@ -0,0 +1,7 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<svg width="98" height="98" viewBox="0 0 98 98" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="98" height="98" rx="8" fill="white"/>
+<path d="M10.5945 10.5947H13.2431V13.2434H10.5945V10.5947ZM13.2431 10.5947H15.8918V13.2434H13.2431V10.5947ZM15.8918 10.5947H18.5404V13.2434H15.8918V10.5947ZM18.5404 10.5947H21.1891V13.2434H18.5404V10.5947ZM21.1891 10.5947H23.8377V13.2434H21.1891V10.5947ZM23.8377 10.5947H26.4864V13.2434H23.8377V10.5947ZM26.4864 10.5947H29.135V13.2434H26.4864V10.5947ZM34.4323 10.5947H37.081V13.2434H34.4323V10.5947ZM42.3783 10.5947H45.0269V13.2434H42.3783V10.5947ZM45.0269 10.5947H47.6756V13.2434H45.0269V10.5947ZM50.3242 10.5947H52.9729V13.2434H50.3242V10.5947ZM52.9729 10.5947H55.6215V13.2434H52.9729V10.5947ZM58.2702 10.5947H60.9188V13.2434H58.2702V10.5947ZM60.9188 10.5947H63.5675V13.2434H60.9188V10.5947ZM68.8648 10.5947H71.5134V13.2434H68.8648V10.5947ZM71.5134 10.5947H74.1621V13.2434H71.5134V10.5947ZM74.1621 10.5947H76.8107V13.2434H74.1621V10.5947ZM76.8107 10.5947H79.4593V13.2434H76.8107V10.5947ZM79.4593 10.5947H82.108V13.2434H79.4593V10.5947ZM82.108 10.5947H84.7566V13.2434H82.108V10.5947ZM84.7566 10.5947H87.4053V13.2434H84.7566V10.5947ZM10.5945 13.2434H13.2431V15.892H10.5945V13.2434ZM26.4864 13.2434H29.135V15.892H26.4864V13.2434ZM37.081 13.2434H39.7296V15.892H37.081V13.2434ZM39.7296 13.2434H42.3783V15.892H39.7296V13.2434ZM45.0269 13.2434H47.6756V15.892H45.0269V13.2434ZM47.6756 13.2434H50.3242V15.892H47.6756V13.2434ZM50.3242 13.2434H52.9729V15.892H50.3242V13.2434ZM63.5675 13.2434H66.2161V15.892H63.5675V13.2434ZM68.8648 13.2434H71.5134V15.892H68.8648V13.2434ZM84.7566 13.2434H87.4053V15.892H84.7566V13.2434ZM10.5945 15.892H13.2431V18.5407H10.5945V15.892ZM15.8918 15.892H18.5404V18.5407H15.8918V15.892ZM18.5404 15.892H21.1891V18.5407H18.5404V15.892ZM21.1891 15.892H23.8377V18.5407H21.1891V15.892ZM26.4864 15.892H29.135V18.5407H26.4864V15.892ZM31.7837 15.892H34.4323V18.5407H31.7837V15.892ZM34.4323 15.892H37.081V18.5407H34.4323V15.892ZM37.081 15.892H39.7296V18.5407H37.081V15.892ZM45.0269 15.892H47.6756V18.5407H45.0269V15.892ZM50.3242 15.892H52.9729V18.5407H50.3242V15.892ZM58.2702 15.892H60.9188V18.5407H58.2702V15.892ZM63.5675 15.892H66.2161V18.5407H63.5675V15.892ZM68.8648 15.892H71.5134V18.5407H68.8648V15.892ZM74.1621 15.892H76.8107V18.5407H74.1621V15.892ZM76.8107 15.892H79.4593V18.5407H76.8107V15.892ZM79.4593 15.892H82.108V18.5407H79.4593V15.892ZM84.7566 15.892H87.4053V18.5407H84.7566V15.892ZM10.5945 18.5407H13.2431V21.1893H10.5945V18.5407ZM15.8918 18.5407H18.5404V21.1893H15.8918V18.5407ZM18.5404 18.5407H21.1891V21.1893H18.5404V18.5407ZM21.1891 18.5407H23.8377V21.1893H21.1891V18.5407ZM26.4864 18.5407H29.135V21.1893H26.4864V18.5407ZM31.7837 18.5407H34.4323V21.1893H31.7837V18.5407ZM34.4323 18.5407H37.081V21.1893H34.4323V18.5407ZM37.081 18.5407H39.7296V21.1893H37.081V18.5407ZM42.3783 18.5407H45.0269V21.1893H42.3783V18.5407ZM45.0269 18.5407H47.6756V21.1893H45.0269V18.5407ZM50.3242 18.5407H52.9729V21.1893H50.3242V18.5407ZM55.6215 18.5407H58.2702V21.1893H55.6215V18.5407ZM58.2702 18.5407H60.9188V21.1893H58.2702V18.5407ZM60.9188 18.5407H63.5675V21.1893H60.9188V18.5407ZM63.5675 18.5407H66.2161V21.1893H63.5675V18.5407ZM68.8648 18.5407H71.5134V21.1893H68.8648V18.5407ZM74.1621 18.5407H76.8107V21.1893H74.1621V18.5407ZM76.8107 18.5407H79.4593V21.1893H76.8107V18.5407ZM79.4593 18.5407H82.108V21.1893H79.4593V18.5407ZM84.7566 18.5407H87.4053V21.1893H84.7566V18.5407ZM10.5945 21.1893H13.2431V23.838H10.5945V21.1893ZM15.8918 21.1893H18.5404V23.838H15.8918V21.1893ZM18.5404 21.1893H21.1891V23.838H18.5404V21.1893ZM21.1891 21.1893H23.8377V23.838H21.1891V21.1893ZM26.4864 21.1893H29.135V23.838H26.4864V21.1893ZM42.3783 21.1893H45.0269V23.838H42.3783V21.1893ZM45.0269 21.1893H47.6756V23.838H45.0269V21.1893ZM47.6756 21.1893H50.3242V23.838H47.6756V21.1893ZM52.9729 21.1893H55.6215V23.838H52.9729V21.1893ZM55.6215 21.1893H58.2702V23.838H55.6215V21.1893ZM58.2702 21.1893H60.9188V23.838H58.2702V21.1893ZM60.9188 21.1893H63.5675V23.838H60.9188V21.1893ZM68.8648 21.1893H71.5134V23.838H68.8648V21.1893ZM74.1621 21.1893H76.8107V23.838H74.1621V21.1893ZM76.8107 21.1893H79.4593V23.838H76.8107V21.1893ZM79.4593 21.1893H82.108V23.838H79.4593V21.1893ZM84.7566 21.1893H87.4053V23.838H84.7566V21.1893ZM10.5945 23.838H13.2431V26.4866H10.5945V23.838ZM26.4864 23.838H29.135V26.4866H26.4864V23.838ZM50.3242 23.838H52.9729V26.4866H50.3242V23.838ZM52.9729 23.838H55.6215V26.4866H52.9729V23.838ZM55.6215 23.838H58.2702V26.4866H55.6215V23.838ZM58.2702 23.838H60.9188V26.4866H58.2702V23.838ZM68.8648 23.838H71.5134V26.4866H68.8648V23.838ZM84.7566 23.838H87.4053V26.4866H84.7566V23.838ZM10.5945 26.4866H13.2431V29.1353H10.5945V26.4866ZM13.2431 26.4866H15.8918V29.1353H13.2431V26.4866ZM15.8918 26.4866H18.5404V29.1353H15.8918V26.4866ZM18.5404 26.4866H21.1891V29.1353H18.5404V26.4866ZM21.1891 26.4866H23.8377V29.1353H21.1891V26.4866ZM23.8377 26.4866H26.4864V29.1353H23.8377V26.4866ZM26.4864 26.4866H29.135V29.1353H26.4864V26.4866ZM31.7837 26.4866H34.4323V29.1353H31.7837V26.4866ZM37.081 26.4866H39.7296V29.1353H37.081V26.4866ZM42.3783 26.4866H45.0269V29.1353H42.3783V26.4866ZM47.6756 26.4866H50.3242V29.1353H47.6756V26.4866ZM52.9729 26.4866H55.6215V29.1353H52.9729V26.4866ZM58.2702 26.4866H60.9188V29.1353H58.2702V26.4866ZM63.5675 26.4866H66.2161V29.1353H63.5675V26.4866ZM68.8648 26.4866H71.5134V29.1353H68.8648V26.4866ZM71.5134 26.4866H74.1621V29.1353H71.5134V26.4866ZM74.1621 26.4866H76.8107V29.1353H74.1621V26.4866ZM76.8107 26.4866H79.4593V29.1353H76.8107V26.4866ZM79.4593 26.4866H82.108V29.1353H79.4593V26.4866ZM82.108 26.4866H84.7566V29.1353H82.108V26.4866ZM84.7566 26.4866H87.4053V29.1353H84.7566V26.4866ZM37.081 29.1353H39.7296V31.7839H37.081V29.1353ZM39.7296 29.1353H42.3783V31.7839H39.7296V29.1353ZM42.3783 29.1353H45.0269V31.7839H42.3783V29.1353ZM52.9729 29.1353H55.6215V31.7839H52.9729V29.1353ZM63.5675 29.1353H66.2161V31.7839H63.5675V29.1353ZM18.5404 31.7839H21.1891V34.4326H18.5404V31.7839ZM21.1891 31.7839H23.8377V34.4326H21.1891V31.7839ZM26.4864 31.7839H29.135V34.4326H26.4864V31.7839ZM29.135 31.7839H31.7837V34.4326H29.135V31.7839ZM34.4323 31.7839H37.081V34.4326H34.4323V31.7839ZM37.081 31.7839H39.7296V34.4326H37.081V31.7839ZM39.7296 31.7839H42.3783V34.4326H39.7296V31.7839ZM58.2702 31.7839H60.9188V34.4326H58.2702V31.7839ZM76.8107 31.7839H79.4593V34.4326H76.8107V31.7839ZM79.4593 31.7839H82.108V34.4326H79.4593V31.7839ZM10.5945 34.4326H13.2431V37.0812H10.5945V34.4326ZM13.2431 34.4326H15.8918V37.0812H13.2431V34.4326ZM21.1891 34.4326H23.8377V37.0812H21.1891V34.4326ZM23.8377 34.4326H26.4864V37.0812H23.8377V34.4326ZM37.081 34.4326H39.7296V37.0812H37.081V34.4326ZM39.7296 34.4326H42.3783V37.0812H39.7296V34.4326ZM47.6756 34.4326H50.3242V37.0812H47.6756V34.4326ZM63.5675 34.4326H66.2161V37.0812H63.5675V34.4326ZM71.5134 34.4326H74.1621V37.0812H71.5134V34.4326ZM74.1621 34.4326H76.8107V37.0812H74.1621V34.4326ZM79.4593 34.4326H82.108V37.0812H79.4593V34.4326ZM82.108 34.4326H84.7566V37.0812H82.108V34.4326ZM13.2431 37.0812H15.8918V39.7299H13.2431V37.0812ZM15.8918 37.0812H18.5404V39.7299H15.8918V37.0812ZM18.5404 37.0812H21.1891V39.7299H18.5404V37.0812ZM26.4864 37.0812H29.135V39.7299H26.4864V37.0812ZM29.135 37.0812H31.7837V39.7299H29.135V37.0812ZM31.7837 37.0812H34.4323V39.7299H31.7837V37.0812ZM34.4323 37.0812H37.081V39.7299H34.4323V37.0812ZM37.081 37.0812H39.7296V39.7299H37.081V37.0812ZM39.7296 37.0812H42.3783V39.7299H39.7296V37.0812ZM45.0269 37.0812H47.6756V39.7299H45.0269V37.0812ZM50.3242 37.0812H52.9729V39.7299H50.3242V37.0812ZM55.6215 37.0812H58.2702V39.7299H55.6215V37.0812ZM66.2161 37.0812H68.8648V39.7299H66.2161V37.0812ZM68.8648 37.0812H71.5134V39.7299H68.8648V37.0812ZM74.1621 37.0812H76.8107V39.7299H74.1621V37.0812ZM76.8107 37.0812H79.4593V39.7299H76.8107V37.0812ZM79.4593 37.0812H82.108V39.7299H79.4593V37.0812ZM15.8918 39.7299H18.5404V42.3785H15.8918V39.7299ZM21.1891 39.7299H23.8377V42.3785H21.1891V39.7299ZM31.7837 39.7299H34.4323V42.3785H31.7837V39.7299ZM34.4323 39.7299H37.081V42.3785H34.4323V39.7299ZM37.081 39.7299H39.7296V42.3785H37.081V39.7299ZM39.7296 39.7299H42.3783V42.3785H39.7296V39.7299ZM42.3783 39.7299H45.0269V42.3785H42.3783V39.7299ZM47.6756 39.7299H50.3242V42.3785H47.6756V39.7299ZM55.6215 39.7299H58.2702V42.3785H55.6215V39.7299ZM60.9188 39.7299H63.5675V42.3785H60.9188V39.7299ZM63.5675 39.7299H66.2161V42.3785H63.5675V39.7299ZM71.5134 39.7299H74.1621V42.3785H71.5134V39.7299ZM74.1621 39.7299H76.8107V42.3785H74.1621V39.7299ZM84.7566 39.7299H87.4053V42.3785H84.7566V39.7299ZM13.2431 42.3785H15.8918V45.0272H13.2431V42.3785ZM15.8918 42.3785H18.5404V45.0272H15.8918V42.3785ZM18.5404 42.3785H21.1891V45.0272H18.5404V42.3785ZM26.4864 42.3785H29.135V45.0272H26.4864V42.3785ZM29.135 42.3785H31.7837V45.0272H29.135V42.3785ZM31.7837 42.3785H34.4323V45.0272H31.7837V42.3785ZM34.4323 42.3785H37.081V45.0272H34.4323V42.3785ZM37.081 42.3785H39.7296V45.0272H37.081V42.3785ZM42.3783 42.3785H45.0269V45.0272H42.3783V42.3785ZM45.0269 42.3785H47.6756V45.0272H45.0269V42.3785ZM47.6756 42.3785H50.3242V45.0272H47.6756V42.3785ZM52.9729 42.3785H55.6215V45.0272H52.9729V42.3785ZM66.2161 42.3785H68.8648V45.0272H66.2161V42.3785ZM68.8648 42.3785H71.5134V45.0272H68.8648V42.3785ZM76.8107 42.3785H79.4593V45.0272H76.8107V42.3785ZM82.108 42.3785H84.7566V45.0272H82.108V42.3785ZM13.2431 45.0272H15.8918V47.6758H13.2431V45.0272ZM15.8918 45.0272H18.5404V47.6758H15.8918V45.0272ZM18.5404 45.0272H21.1891V47.6758H18.5404V45.0272ZM23.8377 45.0272H26.4864V47.6758H23.8377V45.0272ZM29.135 45.0272H31.7837V47.6758H29.135V45.0272ZM31.7837 45.0272H34.4323V47.6758H31.7837V45.0272ZM34.4323 45.0272H37.081V47.6758H34.4323V45.0272ZM50.3242 45.0272H52.9729V47.6758H50.3242V45.0272ZM55.6215 45.0272H58.2702V47.6758H55.6215V45.0272ZM58.2702 45.0272H60.9188V47.6758H58.2702V45.0272ZM68.8648 45.0272H71.5134V47.6758H68.8648V45.0272ZM74.1621 45.0272H76.8107V47.6758H74.1621V45.0272ZM79.4593 45.0272H82.108V47.6758H79.4593V45.0272ZM84.7566 45.0272H87.4053V47.6758H84.7566V45.0272ZM10.5945 47.6758H13.2431V50.3245H10.5945V47.6758ZM13.2431 47.6758H15.8918V50.3245H13.2431V47.6758ZM18.5404 47.6758H21.1891V50.3245H18.5404V47.6758ZM21.1891 47.6758H23.8377V50.3245H21.1891V47.6758ZM26.4864 47.6758H29.135V50.3245H26.4864V47.6758ZM31.7837 47.6758H34.4323V50.3245H31.7837V47.6758ZM37.081 47.6758H39.7296V50.3245H37.081V47.6758ZM39.7296 47.6758H42.3783V50.3245H39.7296V47.6758ZM50.3242 47.6758H52.9729V50.3245H50.3242V47.6758ZM52.9729 47.6758H55.6215V50.3245H52.9729V47.6758ZM55.6215 47.6758H58.2702V50.3245H55.6215V47.6758ZM60.9188 47.6758H63.5675V50.3245H60.9188V47.6758ZM63.5675 47.6758H66.2161V50.3245H63.5675V47.6758ZM71.5134 47.6758H74.1621V50.3245H71.5134V47.6758ZM76.8107 47.6758H79.4593V50.3245H76.8107V47.6758ZM84.7566 47.6758H87.4053V50.3245H84.7566V47.6758ZM13.2431 50.3245H15.8918V52.9731H13.2431V50.3245ZM21.1891 50.3245H23.8377V52.9731H21.1891V50.3245ZM23.8377 50.3245H26.4864V52.9731H23.8377V50.3245ZM29.135 50.3245H31.7837V52.9731H29.135V50.3245ZM34.4323 50.3245H37.081V52.9731H34.4323V50.3245ZM39.7296 50.3245H42.3783V52.9731H39.7296V50.3245ZM42.3783 50.3245H45.0269V52.9731H42.3783V50.3245ZM47.6756 50.3245H50.3242V52.9731H47.6756V50.3245ZM58.2702 50.3245H60.9188V52.9731H58.2702V50.3245ZM66.2161 50.3245H68.8648V52.9731H66.2161V50.3245ZM68.8648 50.3245H71.5134V52.9731H68.8648V50.3245ZM74.1621 50.3245H76.8107V52.9731H74.1621V50.3245ZM76.8107 50.3245H79.4593V52.9731H76.8107V50.3245ZM79.4593 50.3245H82.108V52.9731H79.4593V50.3245ZM84.7566 50.3245H87.4053V52.9731H84.7566V50.3245ZM13.2431 52.9731H15.8918V55.6218H13.2431V52.9731ZM15.8918 52.9731H18.5404V55.6218H15.8918V52.9731ZM18.5404 52.9731H21.1891V55.6218H18.5404V52.9731ZM21.1891 52.9731H23.8377V55.6218H21.1891V52.9731ZM23.8377 52.9731H26.4864V55.6218H23.8377V52.9731ZM26.4864 52.9731H29.135V55.6218H26.4864V52.9731ZM29.135 52.9731H31.7837V55.6218H29.135V52.9731ZM34.4323 52.9731H37.081V55.6218H34.4323V52.9731ZM39.7296 52.9731H42.3783V55.6218H39.7296V52.9731ZM42.3783 52.9731H45.0269V55.6218H42.3783V52.9731ZM50.3242 52.9731H52.9729V55.6218H50.3242V52.9731ZM55.6215 52.9731H58.2702V55.6218H55.6215V52.9731ZM60.9188 52.9731H63.5675V55.6218H60.9188V52.9731ZM63.5675 52.9731H66.2161V55.6218H63.5675V52.9731ZM76.8107 52.9731H79.4593V55.6218H76.8107V52.9731ZM84.7566 52.9731H87.4053V55.6218H84.7566V52.9731ZM10.5945 55.6218H13.2431V58.2704H10.5945V55.6218ZM18.5404 55.6218H21.1891V58.2704H18.5404V55.6218ZM21.1891 55.6218H23.8377V58.2704H21.1891V55.6218ZM31.7837 55.6218H34.4323V58.2704H31.7837V55.6218ZM34.4323 55.6218H37.081V58.2704H34.4323V55.6218ZM39.7296 55.6218H42.3783V58.2704H39.7296V55.6218ZM47.6756 55.6218H50.3242V58.2704H47.6756V55.6218ZM50.3242 55.6218H52.9729V58.2704H50.3242V55.6218ZM52.9729 55.6218H55.6215V58.2704H52.9729V55.6218ZM55.6215 55.6218H58.2702V58.2704H55.6215V55.6218ZM63.5675 55.6218H66.2161V58.2704H63.5675V55.6218ZM68.8648 55.6218H71.5134V58.2704H68.8648V55.6218ZM74.1621 55.6218H76.8107V58.2704H74.1621V55.6218ZM76.8107 55.6218H79.4593V58.2704H76.8107V55.6218ZM79.4593 55.6218H82.108V58.2704H79.4593V55.6218ZM10.5945 58.2704H13.2431V60.9191H10.5945V58.2704ZM13.2431 58.2704H15.8918V60.9191H13.2431V58.2704ZM21.1891 58.2704H23.8377V60.9191H21.1891V58.2704ZM26.4864 58.2704H29.135V60.9191H26.4864V58.2704ZM29.135 58.2704H31.7837V60.9191H29.135V58.2704ZM42.3783 58.2704H45.0269V60.9191H42.3783V58.2704ZM45.0269 58.2704H47.6756V60.9191H45.0269V58.2704ZM47.6756 58.2704H50.3242V60.9191H47.6756V58.2704ZM52.9729 58.2704H55.6215V60.9191H52.9729V58.2704ZM55.6215 58.2704H58.2702V60.9191H55.6215V58.2704ZM58.2702 58.2704H60.9188V60.9191H58.2702V58.2704ZM60.9188 58.2704H63.5675V60.9191H60.9188V58.2704ZM71.5134 58.2704H74.1621V60.9191H71.5134V58.2704ZM84.7566 58.2704H87.4053V60.9191H84.7566V58.2704ZM10.5945 60.9191H13.2431V63.5677H10.5945V60.9191ZM13.2431 60.9191H15.8918V63.5677H13.2431V60.9191ZM23.8377 60.9191H26.4864V63.5677H23.8377V60.9191ZM31.7837 60.9191H34.4323V63.5677H31.7837V60.9191ZM42.3783 60.9191H45.0269V63.5677H42.3783V60.9191ZM47.6756 60.9191H50.3242V63.5677H47.6756V60.9191ZM52.9729 60.9191H55.6215V63.5677H52.9729V60.9191ZM58.2702 60.9191H60.9188V63.5677H58.2702V60.9191ZM60.9188 60.9191H63.5675V63.5677H60.9188V60.9191ZM63.5675 60.9191H66.2161V63.5677H63.5675V60.9191ZM66.2161 60.9191H68.8648V63.5677H66.2161V60.9191ZM68.8648 60.9191H71.5134V63.5677H68.8648V60.9191ZM76.8107 60.9191H79.4593V63.5677H76.8107V60.9191ZM79.4593 60.9191H82.108V63.5677H79.4593V60.9191ZM84.7566 60.9191H87.4053V63.5677H84.7566V60.9191ZM10.5945 63.5677H13.2431V66.2164H10.5945V63.5677ZM13.2431 63.5677H15.8918V66.2164H13.2431V63.5677ZM15.8918 63.5677H18.5404V66.2164H15.8918V63.5677ZM18.5404 63.5677H21.1891V66.2164H18.5404V63.5677ZM23.8377 63.5677H26.4864V66.2164H23.8377V63.5677ZM26.4864 63.5677H29.135V66.2164H26.4864V63.5677ZM29.135 63.5677H31.7837V66.2164H29.135V63.5677ZM31.7837 63.5677H34.4323V66.2164H31.7837V63.5677ZM37.081 63.5677H39.7296V66.2164H37.081V63.5677ZM45.0269 63.5677H47.6756V66.2164H45.0269V63.5677ZM50.3242 63.5677H52.9729V66.2164H50.3242V63.5677ZM52.9729 63.5677H55.6215V66.2164H52.9729V63.5677ZM55.6215 63.5677H58.2702V66.2164H55.6215V63.5677ZM58.2702 63.5677H60.9188V66.2164H58.2702V63.5677ZM60.9188 63.5677H63.5675V66.2164H60.9188V63.5677ZM63.5675 63.5677H66.2161V66.2164H63.5675V63.5677ZM66.2161 63.5677H68.8648V66.2164H66.2161V63.5677ZM68.8648 63.5677H71.5134V66.2164H68.8648V63.5677ZM71.5134 63.5677H74.1621V66.2164H71.5134V63.5677ZM74.1621 63.5677H76.8107V66.2164H74.1621V63.5677ZM79.4593 63.5677H82.108V66.2164H79.4593V63.5677ZM84.7566 63.5677H87.4053V66.2164H84.7566V63.5677ZM31.7837 66.2164H34.4323V68.865H31.7837V66.2164ZM47.6756 66.2164H50.3242V68.865H47.6756V66.2164ZM50.3242 66.2164H52.9729V68.865H50.3242V66.2164ZM58.2702 66.2164H60.9188V68.865H58.2702V66.2164ZM63.5675 66.2164H66.2161V68.865H63.5675V66.2164ZM74.1621 66.2164H76.8107V68.865H74.1621V66.2164ZM76.8107 66.2164H79.4593V68.865H76.8107V66.2164ZM79.4593 66.2164H82.108V68.865H79.4593V66.2164ZM10.5945 68.865H13.2431V71.5136H10.5945V68.865ZM13.2431 68.865H15.8918V71.5136H13.2431V68.865ZM15.8918 68.865H18.5404V71.5136H15.8918V68.865ZM18.5404 68.865H21.1891V71.5136H18.5404V68.865ZM21.1891 68.865H23.8377V71.5136H21.1891V68.865ZM23.8377 68.865H26.4864V71.5136H23.8377V68.865ZM26.4864 68.865H29.135V71.5136H26.4864V68.865ZM31.7837 68.865H34.4323V71.5136H31.7837V68.865ZM34.4323 68.865H37.081V71.5136H34.4323V68.865ZM37.081 68.865H39.7296V71.5136H37.081V68.865ZM47.6756 68.865H50.3242V71.5136H47.6756V68.865ZM52.9729 68.865H55.6215V71.5136H52.9729V68.865ZM60.9188 68.865H63.5675V71.5136H60.9188V68.865ZM63.5675 68.865H66.2161V71.5136H63.5675V68.865ZM68.8648 68.865H71.5134V71.5136H68.8648V68.865ZM74.1621 68.865H76.8107V71.5136H74.1621V68.865ZM79.4593 68.865H82.108V71.5136H79.4593V68.865ZM10.5945 71.5136H13.2431V74.1623H10.5945V71.5136ZM26.4864 71.5136H29.135V74.1623H26.4864V71.5136ZM42.3783 71.5136H45.0269V74.1623H42.3783V71.5136ZM50.3242 71.5136H52.9729V74.1623H50.3242V71.5136ZM58.2702 71.5136H60.9188V74.1623H58.2702V71.5136ZM60.9188 71.5136H63.5675V74.1623H60.9188V71.5136ZM63.5675 71.5136H66.2161V74.1623H63.5675V71.5136ZM74.1621 71.5136H76.8107V74.1623H74.1621V71.5136ZM76.8107 71.5136H79.4593V74.1623H76.8107V71.5136ZM10.5945 74.1623H13.2431V76.8109H10.5945V74.1623ZM15.8918 74.1623H18.5404V76.8109H15.8918V74.1623ZM18.5404 74.1623H21.1891V76.8109H18.5404V74.1623ZM21.1891 74.1623H23.8377V76.8109H21.1891V74.1623ZM26.4864 74.1623H29.135V76.8109H26.4864V74.1623ZM31.7837 74.1623H34.4323V76.8109H31.7837V74.1623ZM34.4323 74.1623H37.081V76.8109H34.4323V74.1623ZM37.081 74.1623H39.7296V76.8109H37.081V74.1623ZM39.7296 74.1623H42.3783V76.8109H39.7296V74.1623ZM52.9729 74.1623H55.6215V76.8109H52.9729V74.1623ZM55.6215 74.1623H58.2702V76.8109H55.6215V74.1623ZM60.9188 74.1623H63.5675V76.8109H60.9188V74.1623ZM63.5675 74.1623H66.2161V76.8109H63.5675V74.1623ZM66.2161 74.1623H68.8648V76.8109H66.2161V74.1623ZM68.8648 74.1623H71.5134V76.8109H68.8648V74.1623ZM71.5134 74.1623H74.1621V76.8109H71.5134V74.1623ZM74.1621 74.1623H76.8107V76.8109H74.1621V74.1623ZM10.5945 76.8109H13.2431V79.4596H10.5945V76.8109ZM15.8918 76.8109H18.5404V79.4596H15.8918V76.8109ZM18.5404 76.8109H21.1891V79.4596H18.5404V76.8109ZM21.1891 76.8109H23.8377V79.4596H21.1891V76.8109ZM26.4864 76.8109H29.135V79.4596H26.4864V76.8109ZM31.7837 76.8109H34.4323V79.4596H31.7837V76.8109ZM39.7296 76.8109H42.3783V79.4596H39.7296V76.8109ZM52.9729 76.8109H55.6215V79.4596H52.9729V76.8109ZM55.6215 76.8109H58.2702V79.4596H55.6215V76.8109ZM71.5134 76.8109H74.1621V79.4596H71.5134V76.8109ZM76.8107 76.8109H79.4593V79.4596H76.8107V76.8109ZM79.4593 76.8109H82.108V79.4596H79.4593V76.8109ZM82.108 76.8109H84.7566V79.4596H82.108V76.8109ZM10.5945 79.4596H13.2431V82.1082H10.5945V79.4596ZM15.8918 79.4596H18.5404V82.1082H15.8918V79.4596ZM18.5404 79.4596H21.1891V82.1082H18.5404V79.4596ZM21.1891 79.4596H23.8377V82.1082H21.1891V79.4596ZM26.4864 79.4596H29.135V82.1082H26.4864V79.4596ZM37.081 79.4596H39.7296V82.1082H37.081V79.4596ZM45.0269 79.4596H47.6756V82.1082H45.0269V79.4596ZM47.6756 79.4596H50.3242V82.1082H47.6756V79.4596ZM52.9729 79.4596H55.6215V82.1082H52.9729V79.4596ZM63.5675 79.4596H66.2161V82.1082H63.5675V79.4596ZM66.2161 79.4596H68.8648V82.1082H66.2161V79.4596ZM71.5134 79.4596H74.1621V82.1082H71.5134V79.4596ZM74.1621 79.4596H76.8107V82.1082H74.1621V79.4596ZM79.4593 79.4596H82.108V82.1082H79.4593V79.4596ZM82.108 79.4596H84.7566V82.1082H82.108V79.4596ZM84.7566 79.4596H87.4053V82.1082H84.7566V79.4596ZM10.5945 82.1082H13.2431V84.7569H10.5945V82.1082ZM26.4864 82.1082H29.135V84.7569H26.4864V82.1082ZM39.7296 82.1082H42.3783V84.7569H39.7296V82.1082ZM42.3783 82.1082H45.0269V84.7569H42.3783V82.1082ZM50.3242 82.1082H52.9729V84.7569H50.3242V82.1082ZM52.9729 82.1082H55.6215V84.7569H52.9729V82.1082ZM55.6215 82.1082H58.2702V84.7569H55.6215V82.1082ZM63.5675 82.1082H66.2161V84.7569H63.5675V82.1082ZM66.2161 82.1082H68.8648V84.7569H66.2161V82.1082ZM74.1621 82.1082H76.8107V84.7569H74.1621V82.1082ZM76.8107 82.1082H79.4593V84.7569H76.8107V82.1082ZM79.4593 82.1082H82.108V84.7569H79.4593V82.1082ZM84.7566 82.1082H87.4053V84.7569H84.7566V82.1082ZM10.5945 84.7569H13.2431V87.4055H10.5945V84.7569ZM13.2431 84.7569H15.8918V87.4055H13.2431V84.7569ZM15.8918 84.7569H18.5404V87.4055H15.8918V84.7569ZM18.5404 84.7569H21.1891V87.4055H18.5404V84.7569ZM21.1891 84.7569H23.8377V87.4055H21.1891V84.7569ZM23.8377 84.7569H26.4864V87.4055H23.8377V84.7569ZM26.4864 84.7569H29.135V87.4055H26.4864V84.7569ZM37.081 84.7569H39.7296V87.4055H37.081V84.7569ZM42.3783 84.7569H45.0269V87.4055H42.3783V84.7569ZM45.0269 84.7569H47.6756V87.4055H45.0269V84.7569ZM47.6756 84.7569H50.3242V87.4055H47.6756V84.7569ZM52.9729 84.7569H55.6215V87.4055H52.9729V84.7569ZM55.6215 84.7569H58.2702V87.4055H55.6215V84.7569ZM58.2702 84.7569H60.9188V87.4055H58.2702V84.7569ZM60.9188 84.7569H63.5675V87.4055H60.9188V84.7569ZM63.5675 84.7569H66.2161V87.4055H63.5675V84.7569ZM68.8648 84.7569H71.5134V87.4055H68.8648V84.7569ZM71.5134 84.7569H74.1621V87.4055H71.5134V84.7569ZM74.1621 84.7569H76.8107V87.4055H74.1621V84.7569ZM76.8107 84.7569H79.4593V87.4055H76.8107V84.7569Z" fill="black"/>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/mr-colorways.avif b/browser/components/newtab/data/content/assets/mr-colorways.avif
new file mode 100644
index 0000000000..5d2db17ceb
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mr-colorways.avif
Binary files differ
diff --git a/browser/components/newtab/data/content/assets/mr-gratitude.svg b/browser/components/newtab/data/content/assets/mr-gratitude.svg
new file mode 100644
index 0000000000..f490d454c9
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mr-gratitude.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg width="365" height="400" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path d="M298.245 44.383c-.198-6.014 0-12.09-.025-18.103 0-2.296-1.01-3.327-3.314-3.363-6.578-.025-13.168.036-19.771.036-8.081 0-16.174-.06-24.255-.06s-15.472-.173-23.171-.087c-8.278.062-16.543-.11-24.797 0-5.247.062-10.47.025-15.718-.024-4.41-.062-8.82-.062-13.23.049-3.93.122-7.884-.197-11.813-.221-5.457-.025-10.927.086-16.408.061-7.663 0-15.325-.147-22.987-.086-9.473.05-18.933.11-28.394.05-10.125-.062-20.423.048-30.623-.038 4.656.921 9.017 2.91 13.353 2.983 2.944.025 5.95.282 9.042-.417 1.712-.393 4.04.27 6.122.392 3.338.197 6.689.025 10.027-.282 2.131-.196 3.474.982 4.102 3.277.271 1.031 1.06 1.902 2.131 2.492 1.121.613 2.156 1.313 3.289 1.976.776.478 1.207 1.215 1.368 2.11.653 3.265 1.379 3.965 4.779 3.94 2.525-.024 5.051-.171 7.527.418 3.055.736 6.06 1.657 7.908 4.54.85 1.314 1.183 2.652.481 4.137-.641 1.375-2.021 1.46-3.289 1.546-3.302.221-6.615.221-9.904.528-7.194.724-14.376 1.375-21.57 2.074-6.984.7-13.981 1.142-20.941 1.817-.986.11-1.947.368-2.957.22-1.06-.134-1.65.369-1.761 1.768-.308-1.043-.505-1.4-1.515-1.46-3.29-.11-6.468.736-9.658 1.067-2.107.246-7.046.59-9.608 1.682.049 8.873.074 17.735.135 26.584.074 11.45.11 22.902.296 34.328 2.513-.785 9.288-2.589 11.924-2.332 3.597.393 7.021-.503 10.446-1.264 3.178-.724 5.642.651 8.08 2.16 1.27.81 2.501 1.731 3.487 2.958 1.293 1.657 3.227 1.264 4.78.565 1.872-.872 3.757-.921 5.666-.786.53 0 1.183.197 1.49.54 1.885 2.234 3.708 4.443 3.474 7.72-.221 3.253.85 4.198 4.053 4.345 3.93.135 7.798.332 11.062 3.154 1.934 1.657 1.934 3.498 1.367 5.572-.726 2.664-2.045 5.094-3.732 7.279-.813 1.067-2.181.785-3.252.92-1.294.172-2.636.258-3.819.7-1.515.564-2.045-.246-2.193-1.338-.899-6.358-6.233-8.788-11.505-7.757-1.355.282-2.279.025-3.178-.982-4.016-4.59-9.3-4.872-14.684-3.805-3.843.725-7.157.614-10.224-2.209-1.798-1.681-4.3-2.184-6.738-2.233-1.06-.037-6.184 0-6.295 2.147v.086c.012 1.031.025 2.05.025 3.081.086-1.645 4.816-1.215 5.284-2.16 1.121 1.288 2.809.81 4.189 1.374 1.995.81 3.486 2.32 5.334 3.326 3.055 1.682 6.454 1.093 9.632.896 2.895-.159 5.778.037 8.648.062 1.035 0 2.242 1.485 3.055 2.54 1.047 1.436 2.451 1.854 3.991 1.768 1.996-.086 3.88.307 5.753.699 3.4.7 4.41 3.449 4.582 6.444.111 2.405 1.602 2.516 3.289 2.455 4.127-.136 8.167-.835 12.319-.811 1.971 0 3.572 1.154 5.371.872 1.404-.197 2.217.699 3.116 1.227 1.096.7 2.378 1.51 3.388 1.768 1.687.417 1.909 1.755 2.845 2.602 1.996 1.816 1.06 7.584-1.182 8.677-1.577.785-3.376 1.313-5.002 1.288-3.252-.085-6.344.921-9.571 1.031-3.425.111-6.824.651-10.224 1.068-6.258.749-12.577.724-18.835 1.534-3.29.418-6.627.54-9.941.761-4.275.307-8.487.749-12.725 1.203-3.277.356-12.799.319-12.799.319s0 .233.05 4.185c.036 4.615-.087 9.267-.087 13.882-.025 4.651.086 9.291.037 13.942-.037 4.308.591 8.591.283 12.899l7.995-.245c1.996-.626 3.991-1.129 6.036-1.657.591-.172 2.058-3.277 2.058-3.277l11.286-3.694h36.053c-2.279 0 6.96.994 7.527 0 2.697-4.701 5.925-8.898 10.273-12.286 1.429-1.117 2.833-2.798 4.262-3.719 2.304-1.46 4.694-2.908 7.194-4.148 5.987-2.958 12.269-4.787 18.897-5.486 6.824-.7 13.649-1.448 20.584-.749 5.531.552 10.224 3.044 14.905 5.646 7.354 4.087 12.897 10.138 18.034 16.655 1.454 1.902.801 5.854 2.71 7.781l15.047-7.781h43.897l13.957 5.511s1.293-.037 1.293-.025l1.688-.049c.419-3.952-.062-7.867.135-11.819.148-2.578.111-5.143.148-7.745.074-4.197-.456-8.407-.123-12.605.283-3.129.172-6.296.172-9.426 0-4.013-.049-8.026-.074-12.027-1.712-1.363-6.183-1.805-7.649-1.89-3.314-.16-6.394-1.203-9.547-2.124-4.829-1.374-9.83-1.423-14.77-1.878-3.757-.331-7.489.234-11.259.43-3.314.196-6.652-.319-9.904-1.092-3.375-.823-6.775-1.633-10.089-2.639-6.085-1.903-7.354-7.168-5.974-12.2.246-.957.838-1.767 1.737-2.381 2.722-1.816 5.814-2.798 9.017-2.798 6.147 0 11.345-2.099 15.496-6.554 4.041-4.308 9.178-5.953 14.832-6.321 3.141-.196 5.642-1.51 7.711-3.719 3.88-4.087 8.734-6.222 14.265-6.775 1.072-.11 5.531-1.399 6.233-.454 0-7.977-.074-15.955.037-23.92.111-8.432-.037-16.852.16-25.284.111-5.142.037-10.346-.135-15.562Zm-45.381 25.835c-1.232 1.853-3.696 2.406-5.692 1.657-1.01-.393-1.995-.147-2.981 0-7.021.982-13.956 2.32-21.003 3.13-12.244 1.374-24.513 1.816-36.807 2.05-3.967.073-7.921.466-11.875.27-3.769-.16-7.527-.614-11.296-1.032-2.858-.306-4.829-2.43-4.767-5.375.246-2.455 2.377-3.805 4.681-4.922 3.621-1.792 7.563-1.792 11.493-2.16 2.772-.245 5.494-.638 8.229-1.927 1.429-.675 3.387-.982 5.026-1.73 1.65-.786 3.141-1.768 4.483-3.081 3.006-2.946 6.578-5.069 10.619-6.1 1.49-.368 3.289-.037 4.94-.086 2.87-.086 4.939-1.988 7.391-3.031 3.363-1.363 6.504-1.817 9.854.257 2.329 1.4 3.647 3.302 4.657 5.658.677 1.56 1.934 2.345 3.843 2.013 3.314-.613 6.43-.196 9.239 1.903 1.158.896 2.673 1.227 3.535 2.65.234.344.173.565.259.847.37 1.179.172 2.381.641 3.584.85 2.185 1.01 2.43 3.35 1.755 2.267-.638 3.622.197 3.56 2.05-.024 1.031-.985 1.031-1.379 1.62Z" fill="url(#b)"/><path d="M58.285 61.355v-33.77h51.378l1.209 4.222 4.836 2.412 1.813 6.03 12.089.603 6.649 4.824v7.84l-23.574 1.809-30.827 2.412-18.133 1.809-5.44 1.809ZM159.228 67.385l10.88-4.221 15.112-2.412 16.32-9.649h7.858l6.044-4.22 7.858.602 6.649 7.84 12.694 2.412 4.835 9.045 4.836 1.206.605 4.824-4.836 3.015-4.836-.603-10.275 2.412-23.574 1.809-32.641 1.81-13.902-2.413-5.44-5.427 1.813-6.03ZM58.285 176.53v-41.005l-.605-18.693 6.65-1.206 12.693-2.412 7.858.603 6.648 6.03 9.067-1.809 4.232 4.824 1.813 7.236 9.067.603 6.649 6.03v4.824l-3.627 8.443 9.067 1.809 9.067 6.03 1.208 7.236-3.022 4.824-12.693 1.206-29.014 3.015-18.738 1.809-16.32.603ZM292.208 157.234l1.209-47.638h-10.88l-12.089 9.045h-12.089l-13.903 10.854-15.716 3.015-3.022 12.06 7.254 6.031 18.133 4.221 19.343-.603 21.76 3.015ZM133.237 200.651l-9.067 12.06 7.858 1.809 19.342 3.618 16.321 5.427 23.573.603 30.827-9.648-6.044-11.457-13.298-13.267-11.485-6.03-13.902-.603-16.32 1.206-15.112 6.03-12.693 10.252ZM223.905 349.595l-24.178-20.503-.605-1.809 19.343 6.031 15.111.603 14.507 1.206 1.209-6.634 12.089-8.442 7.253-5.427 6.649-9.045v12.06l-2.418 10.854-12.693 18.694 7.858 5.427-7.858 10.854 6.913 5.815-5.704 7.523h-31.287l-21.317 7.524 5.016-20.862 10.112-13.869Z" fill="#F8F6F4"/><path d="M221.645 332.437c6.19-.745 14.145 2.02 17.349 3.496l7.737-3.496 5.861-7.225 9.846-6.525 7.737-6.525 4.923-9.788-8.205-2.097-4.455-5.127-1.406-7.924-4.455-8.855h-5.861l-7.736 4.661-5.393 9.088h-7.971l-4.923 3.03c-.391-.466-1.547-1.725-3.048-3.03-1.875-1.631-7.268-3.728-9.143-4.894-1.876-1.165-10.785-.233-11.488 1.166-.703 1.398 1.641 11.418 3.517 13.982 1.5 2.051 2.032 9.244 2.11 12.584l-7.268 10.254c4.845 2.719 16.083 7.971 22.272 7.225Z" fill="url(#c)"/><path d="m277.677 314.958-2.579 10.254-4.923 3.728v5.826l-10.315 11.652 10.315 5.36-10.315 10.021 8.158 6.046-3.208 9.586c16.039 19.173 81.981-4.307 83.669-4.679 2.11-.467 9.144-9.322 11.722-12.818 2.579-3.495 4.689-15.613 4.689-19.109 0-3.495-5.861-10.253-9.377-22.138-2.814-9.508-15.552-17.478-21.569-20.275-6.487-1.087-21.804-3.262-31.181-3.262-9.378 0-21.725 4.505-26.727 6.758l1.641 13.05Z" fill="url(#d)"/><path d="M252.144 313.715c.248.189 1.109.16.656 1.355-.714 1.879-2.29 2.84-3.865 3.598-1.765.859-2.466 1.981-2.261 3.86.058.568.131 1.413-.19 1.69-.584.481-1.036 1.471-1.998 1.195-.992-.292-.963-1.18-1.109-2.069-.744-4.545 2.859-6.031 5.616-8.041.861-.627 1.561-1.632 3.151-1.574v-.014ZM223.509 321.653c3.778 0 6.637 1.006 8.606 3.963.423.626.73 1.253 0 1.865-.729.597-1.619.801-2.13-.073-1.167-1.967-3.019-1.982-4.886-1.938-1.43.044-2.743-.422-4.099-.714-.686-.145-1.124-.597-1.109-1.369 0-.758.554-1.224 1.138-1.34.948-.204 1.882-.729 2.523-.379l-.043-.015ZM256.724 294.91c.759-.452 1.109-.583 1.342-.816.599-.612 1.167-.379 1.736 0 .657.437.35.976.117 1.515-1.036 2.462-3.647 3.744-6.054 2.943-.714-.234-1.065-.86-.933-1.515.364-1.661.204-3.366.481-5.041.204-1.267.992-1.588 1.794-1.675.788-.073 1.197.772 1.372 1.529.189.874.816 1.676.145 3.06ZM210.395 302.529c-.978-.437-1.269-1.18-1.474-1.952-.175-.641-.16-1.239.54-1.661.759-.452 1.284-.073 1.663.451 1.298 1.778 2.436 3.657 3.195 5.74.335.932-.467 1.355-1.167 1.573-.934.292-3.924-.961-4.391-1.821-.802-1.471.583-1.719 1.634-2.33Z" fill="#000"/><path d="M362.469 333.206c-.467-1.18-.832-2.433-1.401-3.54-1.867-3.613-3.238-7.444-5.266-10.969-1.765-3.147-3.413-6.235-5.849-8.959-2.232-2.506-4.843-4.589-7.309-6.847-3.267-3.016-7.425-4.079-11.451-5.259-4.799-1.37-9.759-2.083-14.748-2.375-.612-.029-.977-.043-.933-.859.437-6.439.029-12.834-.467-19.244-.394-5.332-.292-10.707-.175-16.039.35-14.757 0-29.514.175-44.271.073-5.128.438-10.285 0-15.442a26.886 26.886 0 0 1 0-4.341c.248-2.972.117-5.944.175-8.887.102-4.647-.19-9.279-.044-13.941.146-5.201.117-10.43.146-15.66.029-5.551-.175-11.072-.073-16.593.146-6.949.073-13.897.073-20.846V95.461c0-7.837 0-15.66.029-23.468 0-11.931-.029-23.833.102-35.779.044-5.055-.102-10.139.03-15.194.116-5.113-.19-10.24-.365-15.369-.102-2.753-.715-3.54-3.37-4.006-2.217-.393-4.478-.743-6.739-.786-4.406-.117-8.796-.044-13.173-.044H268.73c-5.602 0-11.218-.117-16.819.044-3.37.072-6.74-.394-10.11-.102-3.005.276-5.995-.117-9 0-4.726.218-9.467-.277-14.208.043-1.794.117-3.545-.422-5.427-.102-2.377.365-4.886-.145-7.323.044-1.327.117-2.304-.67-3.617-.583-1.999.102-4.129.889-5.879.437-2.655-.684-5.208.248-7.863-.276-1.531-.292-3.442-.394-5.193-.248-.758.073-1.283.932-1.867.583-2.232-1.326-4.726.903-6.929-.54-.146-.101-.54 0-.642.146-.496.67-1.138.496-1.765.437-2.305-.189-4.624-.072-6.987-.437-1.999-.32-4.187.248-6.287-.116-2.626-.466-5.237.393-7.936 0-2.626-.364-5.354.043-8.067 0-2.217-.044-4.449.19-6.666-.03-2.218-.218-4.377.103-6.594.03-5.091-.19-10.182-.073-15.273-.073h-35.52c-11.729 0-23.428-.03-35.156.03-2.144 0-4.303.145-6.375-.045-3.15-.291-4.916.496-5.12 3.555-.248 3.394-.219 6.832-.219 10.212.03 8.697.073 17.38.146 26.047.044 6.992.073 14 .277 20.992.19 6.73.073 13.475.073 20.205v6.366c0 2.113.51 4.415-.117 6.308-.685 1.967 2.7 3.482.19 5.274 0 0 .03.145.044.145 1.225.32-.044 1.472.758 2.156.642.51-.89.437-.904 1.282-.044 1.282.744 2.506.175 3.788-.03.029.03.146.073.146 2.334.903-1.225 2.87.715 3.86a7.113 7.113 0 0 1-.467.219c-.219.102-.496.393-.321.466 1.036.495 1.328.888.044 1.471-.292.117-.03.423.19.466 1.006.248.758.539.043.889-.394.175-.35.568-.102.67 1.109.466.671 1.399.686 2.142.043 2.899-.03 5.797.029 8.696.146 8.668-.044 17.365.175 26.018.117 4.516.423 9.091.03 13.65-.22 2.608.101 5.274.145 7.925.117 8.202-.117 16.403.219 24.605.073 1.967.117 3.977-.03 5.914-.189 2.084.424 4.079.146 6.119-.247 1.748-.102 3.511-.102 5.23.044 3.263-.029 6.555.117 9.847.044.962.321 2.04-1.284 2.011-.248 0-.67.539-.744.903-.744 3.482-1.444 6.978-.904 10.562.54 3.438.642 6.948 1.94 10.212.715 1.748-.19 1.646-1.43 1.515-5.061-.539-9.89.539-14.602 2.287-2.465.903-4.697 2.331-7.074 3.219-3.618 1.297-6.667 2.972-9.147 6.046-1.356 1.69-.977 2.622-.073 4.079 2.553 4.006 5.894 7.269 9.57 10.168 4.011 3.19 7.79 6.701 12.764 8.493 1.619.612 3.165 1.398 4.77 2.083 2.8 1.209 2.728 1.18 2.626 4.152-.103 3.365.073 6.73-.073 10.095-.278 5.769-.22 11.509-.248 17.292-.03 3.511.19 7.022-.248 10.562-.248 1.835-.175 3.758-.073 5.652.102 1.763-.423 3.482-.175 5.274.102.786.364 1.908.043 2.505-1.137 1.938-.072 3.948-.393 5.915-.175 1.209.218 2.578 0 4.02-.248 1.676-.175 3.584-.103 5.332.22 4.56-1.283 9.061-.437 13.621.146.758-.321 1.107-1.153 1.078-.89 0-1.75-.422-2.552-.422-3.793 0-7.542-.904-11.262-.641-1.678.116-4.303-.641-5.354 2.301-.495 1.355-.758 2.55-.437 3.832.467 1.762.35 3.51.365 5.302.043 3.802-1.11 7.459-.934 11.29.219 4.589 2.655 6.556 7.06 6.556 1.75 0 3.516-.437 5.266-.437 8.082-.03 16.207-.073 24.288.116 3.414.102 6.74-.539 10.124-.51 2.772.029 5.485.568 8.286.568 36.337-.102 72.704-.072 109.041-.072h35.695c6.273 0 12.516 0 18.76-.03 7.104 0 14.208.073 21.312-.189 2.772-.102 5.529.189 8.315.189 24.886.03 49.758.03 74.615.03 3.661 0 7.323-.19 10.969.043 5.062.35 7.965-1.69 8.242-6.584.219-4.414.146-8.843.102-13.286 0-1.18-.072-2.579-.831-3.511-1.298-1.602-.423-2.331.861-3.045 2.144-1.136 3.792-2.971 5.091-4.807 1.765-2.506 3.734-4.865 5.266-7.56 1.765-3.074 3.267-6.235 4.128-9.601 1.619-6.162.759-12.251-1.605-18.122h-.014ZM36.717 2.752c1.298.889 2.61.467 3.865.496 3.88.116 7.775-.03 11.656.116 2.757.102 5.528.175 8.256.044 3.414-.175 6.885.757 10.299-.466.963-.35 2.013.582 3.165.568 2.976-.102 5.996.35 8.942-.044 2.232-.32 4.493-.029 6.754-.277 1.357-.145 3.122.35 4.727.292 5.485-.175 10.984-.044 16.469-.073 6.054-.03 12.122.102 18.161.146 11.51.102 23.019.029 34.514.029 15.901 0 31.815 0 47.716.029 7.775 0 15.535.218 23.281.073a550.52 550.52 0 0 1 13.873-.03c4.303.044 8.607-.101 12.91.073 4.77.19 9.584-.102 14.383-.043 4.405.029 8.796-.073 13.202.145 2.903.146 5.82-.174 8.752-.218 2.436-.03 4.945.029 7.323.218 1.473.117 3.37-.466 4.799.743.219.19.686.175.905-.218.423.437 1.531-.35 1.531.786 0 6.454 0 12.922-.072 19.39-.073 5.813-.001 11.64-.103 17.452-.043 2.622.292 5.347.219 7.954-.044 2.754-.044 5.521-.102 8.304-.073 4.56-.044 9.134-.102 13.722-.044 6.629-.35 13.257-.117 19.856.102 2.768-.146 5.522.073 8.318.321 4.007-.219 8.071-.116 12.135.145 7.342-.117 14.655.029 21.998.175 8.784-.146 17.583-.073 26.367.029 6.017.044 12.033.029 18.05-.044 5.419-.146 10.882-.175 16.301 0 6.235-.044 12.47.073 18.69.102 6.556.102 13.082-.029 19.637-.117 4.691-.102 9.411-.117 14.087-.029 3.438 0 6.92 0 10.358 0 4.953.029 9.892-.029 14.859 0 .903-.438 1.748-.467 2.695a135.496 135.496 0 0 0 .248 16.505c.102 1.049.146 2.083.89 3.074-1.838.685-3.472-.146-5.091-.32-3.414-.321-6.813-.19-10.197-.03-.788.03-1.079-.029-1.108-.786-.219-5.58-.861-11.174-.584-16.695.292-6.118.146-12.207.219-18.311.102-11.567.044-23.148.073-34.715 0-5.347.029-10.707.029-16.054 0-5.04-.277-10.066 0-15.077.219-4.123-.102-8.202-.044-12.296.044-3.86.292-7.706.292-11.566 0-6.192-.292-12.397-.175-18.618.102-5.259-.044-10.503.044-15.733.116-7.517.102-15.005.116-22.507.102-13.941.117-27.897.102-41.838 0-4.298.219-8.595.146-12.864-.073-4.938 0-9.847-.116-14.786-.117-5.477-.03-10.955-.073-16.447-.044-2.651-1.211-3.613-4.522-3.409-6.361.394-12.735.175-19.125.219-8.708.044-17.432.102-26.155 0-6.287-.102-12.589-.044-18.876-.146-5.66-.073-11.334-.117-16.994-.044-6.127.073-12.225-.247-18.322-.029-4.479.175-8.971-.102-13.45.073-4.493.19-9 .248-13.493 0-7.863-.393-15.74-.029-23.632-.175-7.571-.145-15.171-.102-22.771-.029-7.396.073-14.806.073-22.202.102-6.987 0-13.96 0-20.977-.116-3.326-.073-6.666-.146-9.978 0-2.085.072-4.186.101-6.272.029-2.217-.073-3.91 1.5-3.589 3.758.19 1.471-.116 2.87-.175 4.268-.19 8.377.102 16.739 0 25.115-.043 4.196.044 8.42.102 12.645.044 5.405.146 10.78.175 16.185.073 7.808.073 15.645.103 23.468 0 .67-.19 1.37.466 1.938.365.32.22.888.146 1.355-.218 2.039-1.21 4.049-.029 6.089-1.225.83.54 1.908-.277 2.972-.394.51.19 1.69.19 2.578.072 8.741.145 17.511.145 26.251-.029 4.837.103 9.644.146 14.48.03 2.142.51 4.487.292 6.454-.365 3.584.102 7.124-.044 10.649-.218 6.046-.043 12.077 0 18.137.03 5.157-.073 10.314.19 15.471.175 3.088-.073 6.162.102 9.25.19 3.307.19 6.672.175 9.994-.029 2.389.394 4.807-.277 7.487-5.354-7.167-12.078-11.814-20.773-13.62.817-.904 1.08-1.69 1.08-2.681-.03-7.59.044-15.194-.102-22.784-.102-4.152-.219-8.303-.19-12.441.044-5.812.117-11.639-.029-17.452-.175-6.526-.044-13.081-.102-19.622-.044-6.061-.073-12.135-.044-18.195.03-6.978-.32-13.927-.175-20.876.044-2.622-.146-5.375-.35-8.027-.175-2.039.146-4.414.19-6.599.116-4.268.029-8.551 0-12.82-.03-1.617-.03-3.292-.175-4.836-.175-1.835-.423-3.482-.03-5.346.146-.714.19-2.215-.029-2.68-.817-1.836-.044-3.657-.291-5.478-.321-2.142.145-4.443.043-6.6-.32-6.671-.044-13.329-.19-20.015-.145-7.415-.101-14.801-.422-22.202-.073-2.01.32-3.933.145-5.914-.19-2.083-.029-4.196-.073-6.279-.029-.816-.072-1.646-.248-2.462-.218-1.078.642-2.156 1.445-1.602l.073.014ZM292.74 150.09c.029 1.224-.642 1.428-1.576 1.573-5.733.933-11.436 1.035-17.14-.32-3.559-.86-7.25-.277-11.991-.35-2.976.277-7.148.219-11.188-.291-5.675-.743-11.597-.466-16.995-3.045-2.83-1.354-5.062-3.307-6.068-6.337-1.357-4.079 1.327-8.128 5.602-9.308 3.661-1.006 7.468-1.049 11.159-1.865 4.055-.889 6.987-3.394 9.861-6.133 2.626-2.477 5.529-4.56 9.365-4.909 2.538-.219 5.135-.394 7.527-1.137 1.474-.466 3.049-1.398 4.099-2.695 2.83-3.438 6.638-5.229 10.722-6.599 1.182-.393 2.538-.349 3.807-.495.351-.029.759.116 1.036-.029 2.728-1.574 1.824.51 1.824 1.748-.03 3.409-.03 6.803-.03 10.183 0 6.06 0 12.105-.029 18.151 0 3.948-.073 7.91 0 11.858h.015Zm-.321 118.727c-.044 5.885-.321 11.756-.35 17.656-.029 2.506.189 5.04.51 7.531.102.962-.218 1.006-.933 1.21-2.115.539-4.377.83-6.244 1.835-3.005 1.617-6.608 1.821-9.292 3.861-3.267 2.476-5.587.684-7.892-1.151-1.692-1.355-3.471-2.608-4.77-4.473-.51-.757-.758-1.646-.467-2.01 1.518-2.01.321-3.875-.145-5.696-.54-2.156-.89-4.443-2.014-6.453-.743-1.37-1.75-2.579-2.217-4.152-.248-.743-1.429-.714-2.232-.568-7.541 1.296-13.624 4.88-17.826 11.392a7.812 7.812 0 0 0-1.035 2.549c-.248 1.297-1.08 1.836-2.407 1.471-2.509-.67-4.814-.815-7.25.714-1.43.903-3.02.685-4.726-.787-4.727-4.049-10.197-6.264-16.616-4.792-.831.189-1.75.437-2.582.349-1.677-.218-2.334.437-2.611 2.084-.612 3.656-.904 7.196.248 10.882.511 1.675.934 3.219 1.94 4.647 1.255 1.792 1.503 4.006 2.378 5.972.584 1.355.321 3.045-.423 4.444-.977 1.821-1.604 3.787-3.297 5.331-1.065.976-2.013 1.865-3.34 2.477-2.042.961-2.145 2.068-1.473 4.443.072.321.247.612.145 1.107-1.896-.568-3.88-.277-5.82-.51-.511-.073-1.109-.102-1.4-.437-2.218-2.607-5.208-2.214-8.111-2.185-.277 0-.54.219-.817.291-1.371.277-2.757 1.006-4.026.977-1.473 0-1.284-2.04-2.144-3.045-2.364-2.797-5.354-3.948-8.432-1.573-1.298 1.005-2.436 1.15-4.099.611-4.23-1.369-7.936.277-11.334 2.754-1.766 1.325-3.545 2.724-4.085 5.055-.117.466-.321.437-.744.291-1.05-.32-2.144-.612-3.238-.714-1.576-.145-3.093.277-4.42 1.151-1.036.714-1.576.35-2.291-.495-1.444-1.69-3.121-3.016-5.484-3.438-1.62-.277-3.078 0-4.406.641-2.48 1.209-4.668 2.84-6.812 4.545-.277.189-.35.714-.788.51-.437-.219-.423-.67-.437-1.078a13.106 13.106 0 0 0-1.941-6.701c-.831-1.326-1.794-2.55-2.698-3.803-.934-1.296-2.626-.276-3.91.175-.539.19-.963.292-1.502.146 2.976-3.657 6.447-6.658 10.546-8.886 1.605-.86 3.078-.321 4.654.437 2.83 1.354 5.587 3.001 9 2.68 2.218-.218 4.654.364 6.681-.32 3.224-1.137 6.594-2.04 9.409-4.4 1.765-1.5 3.705-2.855 5.135-4.661 1.999-2.579 3.793-5.303 5.208-8.275 1.254-2.578 2.334-5.186 2.757-8.056.146-.976-.394-1.646-1.007-1.835a45.323 45.323 0 0 0-16.863-2.113c-.277 0-.54.146-.904.073 1.05-.583 1.896-1.471 2.946-1.967 1.109-.509 2.116-1.18 3.166-1.762 2.115-1.18 4.128-2.477 5.806-4.196.612-.641 1.152-.815 1.911-.757 4.186.218 8.329-.044 12.487-.685.685-.116 1.21-.291 1.619-.889.175-.276.423-.641.715-.713 3.88-1.006 6.812-3.628 10.123-5.594 2.232-1.355 4.26-2.972 6.375-4.444 1.998-1.354 3.545-3.365 5.426-4.88.861-.714 1.941-1.325 3.122-1.602.175-.029.438 0 .496-.102.977-2.01 3.443-1.967 4.799-3.394 1.43-1.53 3.516-1.996 4.96-3.322 1.824-1.69 4.128-2.112 6.214-3.117 1.605-.743 2.859-2.069 4.625-2.623 3.792-1.179 7.147-3.467 11.057-4.399.817-.189 1.517-.641 2.29-1.005 2.932-1.428 6.214-1.748 9.263-2.826 5.266-1.836 10.839-2.113 16.221-3.336 3.881-.889 7.819-.976 11.685-1.064 3.311-.043 6.812-.218 10.124 1.064 1.998.757 4.259.51 6.316 1.325.904.35 1.575.685 1.371 1.821-.117.889.642 1.078 1.225 1.209.686.175.978-.247 1.153-.932.686-2.505.438-3.409-2.086-4.589a23.21 23.21 0 0 0-9.54-2.083c-.817-.029-1.372.495-1.503-.67-.029-.073-.364-.175-.496-.117-1.546.671-2.932-.757-4.449-.364-.423.117-1.138-.291-1.006.656.043.32-.321.422-.467.277-2.232-1.982-4.916-.904-7.309-.758-3.705.189-7.468.743-11.057 1.69-2.509.641-5.091 1.005-7.6 1.646-4.011 1.049-7.994 2.229-12.02 3.22-1.678.393-3.151 1.296-4.77 1.864-4.099 1.355-8.081 3.074-11.991 4.91-4.259 2.01-8.169 4.618-12.385 6.657-.787.393-1.21 1.209-1.692 1.69-1.225 1.209-3.019.685-4.055 1.908-.963 1.151-2.378 1.748-3.516 2.622-2.042 1.617-4.055 3.307-6.199 4.866-6.492 4.647-13.246 8.784-20.948 11.144-1.4.437-3.092.117-4.653.044-.715-.044-.35-.641-.19-.932 1.08-1.996 2.217-3.977 3.311-5.944 1.007-1.748 1.372-3.788 2.48-5.477.423-.671-2.071-2.827-3.194-2.827-4.946-.043-9.876-.072-14.821-.102-1.824 0-3.633.073-5.427.03-1.211-.044-2.115 1.078-3.369.684-.19-.073-.467.044-.613-.568 3.005-1.078 5.062-3.613 7.454-5.623 2.772-2.331 4.843-5.507 5.995-9.236 1.532-4.866 2.48-9.789 3.589-14.728.467-2.039.715-4.122 1.182-6.235 4.347 1.209 8.796 1.646 13.172 2.506 3.953.786 7.921.83 11.845.568 2.115-.146 4.26-.393 6.346-1.107 1.035-.35 2.363-.51 3.515-.495 2.801 0 5.514-.743 8.009-1.647 3.442-1.282 7.075-1.995 10.43-3.438 3.165-1.369 6.564-2.112 9.686-3.51 2.407-1.049 4.959-1.472 7.381-2.404.934-.364 1.896-.583 2.903-.758 1.284-.189 2.465-.903 3.793-1.078 1.283-.174 2.582-.291 3.792-.743 1.299-.437 2.655-.32 3.983-.539 1.21-.189 1.692-.757 2.188-2.185.189 1.18.248 1.909 1.327 1.748 5.631-.932 11.306-.582 16.965-.786 7.25-.219 14.384.83 21.59 1.078.671 0 1.4.277 1.94-.466.175-.277.671-.292.744-.03.365 1.078.934 1.049 1.371.19.365-.743.423-1.719-.642-2.04-1.05-.349-2.159-.611-3.238-.611-1.225-.03-2.407-.321-3.632-.394-.365-.029-1.299-.685-.963.641.102.292-.496.292-.54.029-.248-1.296-1.284-1.034-2.086-1.063-2.844-.175-5.82-.044-8.533-.612-3.545-.743-7.002-.277-10.503-.51-1.328-.073-2.685.364-3.954.423-2.334.102-4.653.495-6.987.67-3.982.276-7.921.932-11.845 1.821-3.837.859-7.542 2.258-11.553 2.607.539-1.151-.496-1.894-.832-2.84-.817-2.288-1.969-4.327-3.515-6.163-.861-1.048-.963-1.937.437-2.767 3.793-2.258 7.542-4.516 11.451-6.6 4.814-2.534 9.789-4.559 14.748-6.672 1.824-.757 3.589-1.762 5.485-2.476.759-.291 1.546-1.034 1.43-2.156-.044-.277-.277-.685.35-.758.613-.102.423.248.467.568.116.787.685.438 1.108.321 2.159-.714 4.202-1.719 6.2-2.841 1.036-.612 2.261-.888 3.399-1.325 3.122-1.253 6.375-2.535 9.146-4.225 2.772-1.69 6.127-2.141 8.578-4.37.904-.831 2.188-1.18 3.296-1.574 2.013-.743 3.487-2.476 5.602-2.942.744-.175.817-.889 1.138-1.37.467.117.364.466.364.714 0 9.425-.029 18.836-.029 28.262v25.041c0 5.871.029 11.742-.029 17.598-.044 5.58-.219 11.144-.248 16.724-.029 6.279.102 12.601.029 18.909l.015-.073Zm-32.778 79.773c1.211.83 2.626 1.398 3.982 1.966 1.401.539 2.334 1.865 4.099 2.069-1.429 1.719-2.611 3.409-4.026 4.793-1.371 1.325-2.29 3.001-3.836 4.181-.978.757-1.065 1.966.043 3.161 1.518 1.719 2.757 3.7 4.552 5.186.583.466.685.743.102 1.5-.978 1.253-2.465 2.186-2.611 4.152-.044.568-1.284 1.763-2.684 1.078-.642-.32-1.517-.684-2.145-.495-2.976.903-5.747-.568-8.636-.568-2.975-.029-5.922-.277-8.898-.277-6.345.029-12.268 1.894-18.249 3.729-2.844.889-5.382 2.389-8.081 3.584-.861.364-1.605 1.078-2.305 1.719-.277.218-.511.612-.861.422-.35-.174-.277-.67-.175-.961.277-.889.292-1.792.569-2.681.861-2.84 1.474-5.739 2.334-8.565 1.211-4.006 3.297-7.59 5.237-11.276 1.94-3.656 4.551-6.745 7.323-9.716 1.517-1.617 3.516-2.695 5.354-3.948 1.619-1.137 3.223-2.331 4.726-3.628 3.165-2.767 6.987-4.399 10.868-5.798 3.88-1.427 7.775-2.797 11.83-3.656 1.284-.277 2.407-.117 3.588.189 2.655.714 3.706.292 5.194-2.039.612-.976 1.502-.495 2.582-.466-2.801 4.181-5.514 8.027-8.709 11.494-.671.713-1.43 1.252-1.896 2.287-.642 1.355 0 2.083.714 2.578l.015-.014Zm-202.926 2.33c.03-.684.03-1.398.03-2.083.072-.029.174-.043.276-.073.146 2.972.394 5.973.423 8.96.073 4.588 1.153 8.857 3.837 12.644.715 1.049.613 1.37-.686 1.428-3.486.117-3.56.146-3.472-3.307.19-5.871-.583-11.683-.393-17.554l-.015-.015Zm-.496-32.529c-.03-1.981-.423-4.05-.613-6.089-.116-1.18.248-1.399 1.357-1.21 1.473.277 2.976.437 4.493 0 .963-.247 1.575.292 1.998 1.151 1.138 2.229 2.014 4.56 2.83 6.92.394 1.136.963 2.214 1.445 3.394-1.693.437-3.297-.364-4.917.219-1.137.393-2.115.714-2.946 1.821-.671.903-1.999 1.296-2.072 2.724-.043 1.355-.218 2.68-.35 4.006-.102 1.428-.218 2.826-.364 4.72-.365-.787-.686-1.136-.642-1.399.831-5.419-.146-10.853-.219-16.257ZM32.326 352.13c.044-3.686-.117-7.386.029-11.101.175-3.715.744-7.386.715-11.115-.03-5.667-.044-11.348.102-17.044.102-3.948.146-7.925.365-11.902.175-3.365-.146-6.774-.321-10.168-.03-.612.102-1.108.35-1.617 1.43.713 2.946 1.18 4.405 1.223 1.62.029 1.911.903 2.145 2.069.422 2.287.962 4.589 1.94 6.672a35.67 35.67 0 0 0 3.661 6.235c1.517 2.039 3.837 3.19 6.098 4.268 1.035.495 1.502 1.035 1.473 2.302-.146 7.298.583 14.553.496 21.808-.102 7.021-.146 14.043-.146 21.065-.03 3.54.496 7.065.584 10.634.029 1.763-.146 3.54.043 5.303.073.714-.364 1.005-1.108 1.005-6.783-.029-13.552 0-20.335 0-1.211 0-1.007-.86-.934-1.603.671-5.987.35-12.032.438-18.049v.015Zm14.179-53.595c-1.532-1.996-2.232-4.254-2.626-6.672-.175-1.034.146-1.253 1.007-1.355 3.165-.393 6.345-.816 9.423-1.748 1.225-.364 2.072.437 2.538 1.399 1.474 2.869 4.128 4.938 5.412 7.954.248.582 1.007.932 1.444 1.442 1.474 1.821 1.43 3.86.715 5.943-1.721-1.791-2.509-4.224-4.201-6.089-1.926-2.141-3.764-4.327-6.17-5.914-.76-.496-1.605-1.108-2.48-1.006-1.62.175-1.299 1.792-1.649 2.827-.32.888.613 1.136 1.299 1.5 1.72.976 3.296 2.229 4.492 3.831 1.678 2.186 3.545 4.298 4.698 7.27-1.824-.321-3.414-.743-4.945-1.37-3.91-1.646-6.492-4.734-8.943-7.997l-.014-.015Zm13.245-97.837c-.102-1.995.759-4.151-.54-6.089-.277-.35-.116-.903.35-1.209.496-.277.438-.714.19-1.034-.642-.758-.044-1.647-.175-2.215-.642-2.403 1.357-4.88-.292-7.196-.466-.641.35-1.224.248-2.083-.175-1.224-.54-2.579-.277-3.948.117-.612.102-.86.759-.976.612-.146.962-.277 1.4.437 1.371 2.141 1.4 1.996 3.69.903 2.116-.961 4.48-1.151 6.755-1.515 1.765-.32 3.56-.495 5.339-.758 1.356-.247 2.305.248 3.472.977 2.465 1.573 5.193 2.724 7.498 4.559 2.115 1.69 4.492 3.001 6.783 4.341 2.844 1.69 5.558 3.657 8.635 5.041 2.466 1.136 5.019 2.36 7.207 3.802 3.267 2.214 6.812 3.802 10.123 5.9 1.357.83 2.874 1.471 4.347 2.083 1.868.787 1.868 1.107.54 2.506-.758.816-1.473 1.937-1.619 3.015-.248 2.04-.905 2.433-2.976 1.923-1.969-.495-4.128-.277-6.214-.277-4.799-.043-9.584-.32-14.354.03-4.566.32-9.249 0-13.77 1.034-2.043.495-4.1.044-6.142.612-3.297.932-6.666 1.675-10.007 2.374-3.69.758-7.075 2.36-10.868 3.948 0-5.55.19-10.882-.102-16.199v.014Zm-.817-66.283c-.102-.568 2.072-2.01 2.364-1.617.89 1.107 2.086.364 3.077.816a34.787 34.787 0 0 1 5.412 3.074c2.364 1.646 4.814 1.835 7.542 1.69 3.662-.219 7.352-.277 11.014.029 1.137.102 2.436 1.209 3.238 2.302 1.065 1.442 2.611 1.791 4.23 1.82 2.48 0 5.048.219 7.309 1.399.977.495 1.502 1.602 1.794 2.68.277.976.613 2.04.569 3.045-.073 1.938 1.4 2.535 2.611 2.433 2.042-.146 4.084-.102 6.127-.86 1.721-.67 3.865-.349 5.805-.218.905.073 1.649.044 2.291-.612.321.423-.438 1.369.89 1.107 1.429-.291 2.83 1.355 4.376.35.831 2.039 3.545 1.282 4.551 3.044.146.219.423.539.642.539 2.903.073 2.801 2.899 3.661 4.516.438.831-.321 2.972-.831 4.414-.613 1.749-2.232 1.909-3.807 2.331-2.509.641-5.135.117-7.542.933-4.333 1.427-8.855.932-13.275 1.719-5.412.961-11.057.422-16.571.961-2.334.219-4.814-.116-7.075.962-.277.116-.89.713-1.284-.19-.219-.539-.54.248-.612.219-2.218-.277-4.274.684-6.448.743-.613 0-1.254-.175-1.896-.102-2.611.32-5.208.714-7.82.903-3.296.248-6.564.32-10.152.466 1.692-.932.54-2.36.394-3.147-.54-3.234-.19-6.482-.277-9.702-.19-6.919-.175-13.854-.22-20.773-.028-1.748.22-3.482-.043-5.259l-.044-.015Zm-.35-16.738c-.219-1.894 1.692-1.923 2.932-2.404 3.297-1.296 6.754-.932 10.182-1.107 2.188-.116 4.347-.714 6.52-1.107 2.306-.422 4.377.117 6.288 1.471 1.678 1.209 3.413 2.186 4.77 3.905 1.05 1.354 3.122 1.078 4.595.364 1.984-.933 3.983-.758 5.996-.641.394.029.86.189 1.079.466 1.721 2.083 3.764 4.079 3.268 7.138-.117.903.102 1.719.291 2.579.248 1.048.817 1.762 2.043 1.748 1.677-.029 3.326.291 5.018.276 3.297-.029 5.879 1.821 8.329 3.759 1.211.961 1.226 4.152.102 6.089-.904 1.603-1.75 3.263-2.552 4.88-.934 1.909-2.51 1.574-3.881 1.69-1.327.117-2.757.175-3.865.743-1.576.787-1.838-.349-1.999-1.136-1.036-6.556-5.995-8.493-10.62-7.634-2.071.365-3.267-.393-4.478-1.646-3.326-3.438-7.527-4.006-11.947-3.554-1.473.145-2.976.641-4.42.976-1.94.495-4.012-.466-5.806-1.544-1.298-.787-2.29-2.142-3.793-2.535-1.867-.495-3.705-1.53-5.732-.35-.278.146-.642.073-.671.539 0 .437.116 1.078-.613 1.005-.613-.072-.569-.757-.642-1.136-.19-.83-.117-1.719-.175-2.607-.03-3.409.146-6.833-.248-10.256l.03.029Zm-.248-73.232c-.102-3.088-.248-6.191-.19-9.28.044-2.403.278-4.836 0-7.269-.145-1.325.35-1.966 1.897-2.04 5.952-.247 11.903-.276 17.855-.189 2.699.044 5.426.044 8.14.102h.19c4.055-.64 8.11.437 12.165.03 1.911-.19 3.808-.03 5.733-.19.861-.073 2.042 0 2.976.423.686.32 1.371 1.048 1.109 1.791-.511 1.472.51 2.04 1.356 2.623 1.357.961 2.539 2.141 4.187 2.724.904.32.933 1.53 1.065 2.476.116 1.035.146 2.477 1.211 2.724 1.05.219 2.115.743 3.267.641 3.487-.276 7.002-.102 10.328 1.107 2.509.904 4.77 2.404 5.631 5.187.715 2.287-.788 3.977-3.487 4.093-3.121.175-6.272.146-9.365.495-3.238.365-6.535.467-9.788 1.05-3.632.67-7.381.611-11.043 1.15-3.486.51-7.03.35-10.517.787-3.34.422-6.71.495-10.08.743-1.152.102-2.261.466-3.472.248-.963-.175-1.75.247-1.823 1.573-.102-1.005-.365-1.253-1.4-1.326-3.297-.277-6.288 1.326-9.57 1.253-2.042-.03-4.085.757-6.316 1.224 0-4.152.102-8.158-.03-12.135l-.029-.015Zm.117 27.577c.03-3.19 0-6.366.03-9.557 0-2.403.364-2.928 2.683-3.627.51-.146 1.05-.117 1.328-.685.291.146 1.006-1.15.977.277 0 .35.248.291.496.19 2.159-.83 4.624-.423 6.71-1.326 1.08-.466 1.824.116 2.684.146 1.678.043 3.37.072 5.018.189.978.044 2.48-.54 3.793-.641 5.135-.393 10.255-.903 15.39-1.15 3.807-.176 7.614-.642 11.436-.962.686-.073 1.328-.248 1.999.32.423.35 1.473.889 1.356-.64-.043-.642.613-.394.978-.423 4.23-.496 8.504-.32 12.778-.437 3.633-.117 7.134-.904 10.576-1.909 1.357-.422 1.649-1.82 1.678-3 .029-1.822.51-3.76-.977-5.376-.248-.277.364-.903.072-1.574-.743-1.791-2.144-2.695-3.836-3.16-1.225-.35-2.159-.715-1.838-2.696-1.4 1.894-2.801.758-4.085.743-2.538-.043-5.047.612-7.614.175-1.999-.32-3.341-1.865-2.932-3.875.277-1.297-1.692-3.482-3.589-3.831-.758-.117-1.429-.35-1.823-.903-.467-.641-1.182-1.428-.759-2.186.277-.466 1.211-.29 1.897-.29 6.243.028 12.487-.03 18.73-.03 3.413 0 6.856.102 10.269.102.817 0 1.036.32 1.182 1.136.963 4.866 1.794 9.717 2.378 14.64a649.659 649.659 0 0 1 1.546 13.971 333.912 333.912 0 0 0 1.911 16.083c.54 3.715.35 7.488.89 11.203.423 2.898.861 5.812 1.05 8.71.394 5.406 1.605 10.65 2.159 16.011.584 5.841 1.036 11.683 1.94 17.51.467 2.928.467 5.886.861 8.814.715 5.521 1.4 11.027 2.334 16.519 1.138 6.658 2.538 13.286 3.588 19.958.365 2.389.715 4.764 1.255 7.124.219.976 1.254 2.112.642 2.826-.54.612-2.013.35-2.976.714-2.465.961-5.062 1.442-7.615 2.068-.612.146-.933.19-1.429-.539-1.97-3.044-4.231-5.9-6.215-8.915-1.91-2.899-3.792-5.813-6.141-8.391-.292-.321-.496-.743-.102-1.369 1.05-1.617.613-3.162-.715-4.487-.102-.102-.248-.321-.189-.423.831-2.797-.788-4.487-2.553-6.308-1.794-1.835-3.953-3.073-6.069-4.399-.32-.189-.539-.393-.714-.743-1.153-2.374-2.83-4.399-4.552-6.41-.291-.349-.685-.582-.583-1.151.744-3.554-.817-6.482-2.874-9.104-1.006-1.297-2.582-2.186-3.938-3.191-.613-.437-1.138-.903-1.503-1.602-1.867-3.394-3.705-6.803-5.66-10.139-1.911-3.293-3.807-6.599-6.025-9.702-1.648-2.288-2.829-4.881-4.813-6.95-.438-.494-.54-1.296-.963-1.864-1.678-2.258-3.122-4.69-4.814-6.876a398.03 398.03 0 0 1-7.79-10.314c-2.655-3.583-5.412-7.094-8.081-10.649-1.897-2.535-3.793-5.113-5.879-7.488-1.284-1.5-1.823-1.602-4.624-.961 2.232 3.074 4.011 6.133 6.243 8.96 1.97 2.505 3.414 5.477 5.514 7.88 1.503 1.72 2.553 3.686 3.954 5.449 1.94 2.476 3.792 5.04 5.85 7.415 1.823 2.083 2.946 4.69 5.134 6.584.758.67 1.298 2.142 2.159 3.016 1.75 1.821 2.378 4.341 4.186 6.118.248.248.424.568.54.889 1.138 2.84 3.414 4.982 4.654 7.764.073.146.218.365.35.394 1.823.291 1.473 2.083 2.159 3.146.831 1.282 1.254 2.841 2.552 3.832 1.08.815.934 2.301 1.795 3.263.175.189 0 .582-.438.495-.642-.146-1.284.219-1.867.189-1.211-.102-2.436.073-2.436-2.083.029-1.427-.788-3.088-1.546-4.559-1.08-2.215-2.874-3.73-4.493-5.449-.744-.816-6.317-.684-7.134.146-.641.641-1.473.612-2.115 1.078-.569.393-.86.102-1.254-.364-2.48-2.928-5.31-5.507-9.249-6.09-2.611-.393-5.31-.043-7.79.86-2.29.83-4.565.67-6.914.568-1.692-.073-3.545-.35-5.091.816-.277.218-.671.277-.963.437-1.444.787-1.94-.029-1.867-1.253.277-3.977.146-7.954-.044-11.902-.175-3.467-.277-6.92-.248-10.357.03-5.42-.029-10.897.044-16.33l-.03-.088Zm157.938-37.57c-.583 2.476-1.765 4.865-1.502 7.531.102.787-.861 1.18-1.62 1.282-1.05.146-1.75.685-2.304 1.603-.832 1.369-1.97 2.04-3.808 1.675-3.807-.743-7.541.218-10.897 1.865-2.304 1.15-4.128 3.234-6.287 4.69-1.21.816-2.582 1.326-3.296 2.724-2.378-.35-4.377 1.035-6.521 1.647-5.704 1.602-11.801.816-17.359 2.87-2.655.976-4.654 2.797-5.996 5.52-1.371 2.798-.831 5.187.438 7.663.248.496.248 1.005.277 1.53.102 1.209.686 1.82 1.897 1.865.277.029.612 0 .831.145 5.383 3.482 11.583 2.972 17.534 3.73 2.334.32 4.551.611 6.856.218 4.449-.714 8.928-1.005 13.406-1.37 1.867-.145 3.764-.028 5.675-.028-1.649 2.301-1.007 5.23-1.474 7.954-.714 3.904-1.692 7.677-2.903 11.464-.933 2.928-1.575 5.973-2.071 8.989-.248 1.675-1.05 3.088-1.357 4.763-.51 3.118-1.298 6.206-2.261 9.236-1.517 4.808-2.232 9.819-3.632 14.655-1.254 4.327-1.911 8.814-3.238 13.111-1.547 5.113-2.261 10.416-4.202 15.413-1.648 4.297-2.902 8.711-4.303 13.082-.219.713-.496.976-1.327 1.034-1.765.044-3.56.291-5.339.539-2.655.393-3.326 0-3.764-2.753-.423-2.535-.583-5.084-1.036-7.59-.423-2.404-1.225-4.735-1.502-7.138-.219-1.836-.861-3.628-.584-5.58.117-.961-.583-1.995-.787-3.044-1.503-7.983-2.013-16.112-3.093-24.154-.423-3.161-.394-6.453-.933-9.629-.365-2.185-.54-4.472-1.153-6.584-.831-2.943-.117-5.915-.613-8.843-.35-2.069-.583-4.123-.889-6.191-.073-.496.073-1.078-.715-1.18-.438-.073-.423-.583-.248-.86.583-.83.788-1.515.321-2.258-1.08-1.69-.467-3.7-1.05-5.506-.321-.933.977-.175 1.254-.933-1.605-.102-1.648-1.223-1.721-2.462-.19-3.146-.686-6.264-.642-9.396.029-1.602-.365-3.22-.044-4.764.35-1.646-.175-2.971-.904-4.253-.423-.787 0-1.472-.102-2.215-.496-4.02-1.693-7.924-1.941-11.974-.277-4.181-.889-8.304-1.444-12.427-.423-3.073-1.035-6.133-1.692-9.177-.321-1.399-.685-2.724-1.298-4.006-.423-.933-.248-1.136.831-1.136 6.36 0 12.706.029 19.052.029 13.449.029 26.899.029 40.348.029h12.123c-1.445 2.753-2.232 5.667-2.947 8.566l-.044.029Zm8.286 13.577c2.728 1.442 3.515 3.904 4.741 6.133.715 1.253 1.692 1.442 2.684 1.282 2.655-.51 5.266-.35 7.717.568 1.823.67 3.734 1.719 4.084 4.02.321 2.142 1.678 3.876 2.334 5.871.19.569.832.219 1.255.248 1.356.073 2.684 0 3.836.903.963.787.963 1.603.248 2.506-1.254 1.646-3.939 2.185-5.922 1.355-.569-.248-1.328-.219-1.897-.073-4.595 1.326-9.321 1.646-14.018 2.33-2.407.35-4.887.321-7.25.89-4.814 1.18-9.716 1.048-14.602 1.398-5.923.422-11.875.568-17.826.67-4.406.073-8.826.51-13.231.51-2.947-.03-5.923-.51-8.869-.816-2.159-.218-4.274-.714-5.996-2.185-2.698-2.331-2.261-5.871.978-7.459 3.369-1.646 6.914-2.768 10.692-2.87 3.706-.029 7.455-.611 10.795-1.995 2.757-1.108 5.631-2.302 7.863-4.735 1.794-1.908 4.026-3.656 6.71-4.516 1.036-.32 2.071-.67 2.932-1.37.321-.247.817-.364 1.327-.276 2.378.422 4.887.35 7.032-.54 1.619-.684 3.326-1.529 4.872-2.578 2.582-1.748 6.856-.64 9.511.743v-.014Zm-21.663 141.423c2.437 1.136 4.377 2.724 5.908 4.909 1.765 2.506 3.545 5.012 4.916 7.736.394.757 1.051 1.326 1.62 1.763 2.217 1.864 2.932 4.647 4.551 6.846.321.423-.117.248-.19.35-.54.758-1.4 1.005-2.217 1.209-4.42 1.049-8.402 3.467-12.779 4.545-3.807.933-7.396 2.506-11.29 3.191-2.013.349-4.099.713-6.127 1.282-2.465.67-5.281.757-7.921.64-2.772-.116-5.66.248-8.286-.393-4.055-.976-8.212-1.5-12.166-2.797-1.035-.349-1.648-1.136-1.823-2.185-.365-2.302-1.648-3.365-3.88-2.928-1.941.393-3.939.189-5.821.787-.394.102-1.138-.423-1.721-.641-2.728-1.049-5.485-1.996-8.461-1.836-.364.029-.394-.32-.583-.495-.248-.219-.759-.583-.817-.51-1.43 1.282-2.159-.932-3.589-.641-1.444.277-3.092-.364-4.945-.67 3.953-5.055 7.396-10.27 12.706-13.679 6.535-4.181 12.953-8.624 20.524-10.824.292-.102.569-.219.861-.189 6.17.364 12.122-1.472 18.249-1.865 1.896-.117 3.807-.117 5.704-.292 3.369-.291 6.345.933 9.146 2.535 2.728 1.574 5.587 2.87 8.431 4.181v-.029Zm-.641-5.507c2.479-2.112 4.668-4.472 6.418-7.24 1.138-1.762 2.611-3.307 3.982-4.88 1.445-1.646 3.122-3.117 4.406-4.865.977-1.282 2.334-2.084 3.326-3.366 1.108-1.398 2.611-2.476 3.807-3.802 2.538-2.797 5.485-5.273 7.133-8.77.321-.67.715-.422 1.138-.247 4.347 1.908 9.117 2.185 13.596 3.481 2.582.743 5.12.816 7.571.438 3.515-.51 7.031-.831 10.517-.496 5.923.539 11.874 1.049 17.607 2.841 1.182.364 2.407.437 3.618.568.744.073 1.4.219 1.765.86-7.936 4.006-15.784 7.837-23.778 11.421-5.339 2.374-10.444 5.229-15.594 7.997-4.653 2.506-9.102 5.405-13.799 7.809-5.31 2.695-10.591 5.419-15.813 8.318-1.138.612-2.072 2.768-3.793 1.282-1.079-.962-2.261-1.909-3.165-3.045-2.334-2.928-5.339-4.909-8.636-6.483-1.211-.582-1.284-1.034-.321-1.835l.015.014ZM141.25 299.613c-2.757.903-5.776.539-8.388 1.617-3.092 1.282-6.564 1.646-9.248 3.933-1.138.962-2.582 1.501-4.187 2.375.642-3.088 2.291-5.186 4.202-7.065 4.011-3.905 8.241-7.445 13.945-8.639 2.29-.495 4.551-.743 6.856-.714 3.005.073 5.996-.029 8.972-.175 2.159-.116 2.538.219 2.013 2.229-1.211 4.545-2.772 8.814-6.419 12.135-3.472 3.161-7.454 5.084-11.947 6.162-4.187 1.005-7.892-.422-11.947-1.966 3.793-2.375 7.279-4.662 11.582-5.259 1.838-.277 3.662-.51 5.514-.758 1.036-.116 2.043-.248 1.824-1.69-.19-1.223-1.692-2.535-2.772-2.185ZM95.665 321.29c.174 1.573-.103 2.622-1.999 2.068-1.765.656-1.794.044-1.823-1.602-.044-2.185.029-4.37.029-6.556.029-1.937.364-3.977.744-5.943.496-2.797.831-5.594 1.327-8.377.613-3.481 1.225-7.021 2.976-10.241.613-1.136.715-2.549 1.225-3.787 1.255-3.016 2.305-6.192 4.026-8.916 1.751-2.768 3.224-5.739 5.339-8.303.351-.423.642-.86 1.299-.641 1.429.437 2.859.961 4.303 1.325 1.751.423.963 1.647.394 2.04-1.794 1.282-2.188 3.336-3.093 5.055-2.188 4.079-3.165 8.522-3.048 13.184.029.684-.219 1.296-.642 1.791a29.138 29.138 0 0 0-5.048 8.129c-1.429 3.482-3.02 6.905-3.705 10.751-.496 2.724-1.181 5.58-2.144 8.275a3.817 3.817 0 0 0-.175 1.719l.014.029Zm-9.176.175c0 2.36-1.532 3.336-3.618 2.301-.35-.175-.291-.437-.364-.743-.817-3.321-1.474-6.672-2.232-10.022-.496-2.113-.642-4.269-1.226-6.41 1.984 2.287 4.406 3.86 6.842 5.448 1.284.831.933 2.622.788 3.686-.292 1.937-.146 3.802-.175 5.725l-.015.015ZM68.94 263.966c1.08-.044 2.072-.86 3.02.641 1.43 2.214 2.553 4.545 4.201 6.657 1.867 2.36 3.793 4.691 5.704 6.993.248.291.423.757.744.859 2.086.714 2.071 2.462 2.013 4.123-.044 1.719.365 3.438-.073 5.448-2.232-2.928-4.654-5.273-7.425-7.211-1.298-.888-2.553-1.821-4.128-2.258-1.211-.32-1.795.117-1.765 1.297 0 .743-.175 1.398-.496 2.156-1.08-2.185-2.043-4.254-3.093-6.264-.86-1.646-.146-3.234.073-4.793.292-2.01.438-4.006.32-6.046-.028-.67-.393-1.573.905-1.617v.015Zm4.916 18.413c7.382 4.487 11.7 10.737 11.626 19.521-1.006-2.156-2.013-4.326-3.048-6.453-.496-.976-1.182-1.909-2.407-1.282-1.284.67-.584 1.646-.175 2.549a675.073 675.073 0 0 1 4.274 9.353c.19.466.146 1.034.248 1.617-6.842-4.618-11.51-17.234-10.518-25.319v.014Zm12.954-10.561c-.394-1.603-.277-3.22-.978-4.837-.466-1.078-.51-2.505-.364-3.904.248-2.462-2.013-4.152-2.655-6.41-.102-.393-.569-.83-.744-1.325-.496-1.326-1.298-2.229-2.83-2.011-.715.102-1.473 2.754-1.109 3.803.613 1.689 1.372 3.365 1.897 5.084 1.035 3.438 2.48 6.73 3.092 10.255.073.365.146.685-.116 1.326-5.427-5.521-8.432-12.149-10.737-19.302-3.953-12.135-1.502-23.687 1.94-35.531 3.866 3.191 7.717 5.769 10.824 9.09 3.735 4.007 6.273 8.785 6.783 14.554.51 5.696 1.678 11.348 1.299 17.088A48.439 48.439 0 0 1 91.04 270.9c-.788 2.506-2.042 4.691-3.734 7.065-.51-2.258-.03-4.253-.496-6.162v.015Zm22.844-23.891c-.438 3.146-.365 6.308-.832 9.425-.073.437-.146.962-.029 1.399.861 2.68-.933 4.341-2.29 6.191-.248.35-.584.583-1.05.248-2.539-1.836-5.733-1.647-8.534-2.623-.788-.276-.977-.437-.977-1.209.043-3.787.218-7.59-.044-11.363-.394-5.506-.86-11.071-2.874-16.199-1.75-4.443-4.23-8.624-7.79-11.974-2.144-2.04-4.449-3.861-7.133-5.187-.467-.218-.933-.539-.758-1.223.175-.583.51-.787 1.138-.889 5.31-.83 10.575-1.471 15.973-.787 3.69.467 7.454.321 11.159.539 3.793.248 7.542-.393 11.378.292 1.255.218 3.02-.394 4.552-.583 3.661-.51 7.104.86 10.59 1.69 1.43.32 2.801.787 4.376 1.224-3.048 1.252-6.024 2.214-8.781 3.627-4.26 2.214-8.082 5.011-11.087 8.93-4.201 5.507-6.068 11.683-6.987 18.457v.015Zm3.326 16.592c2.363-.276 4.726-.043 7.6-.102-1.649 1.297-2.874 2.258-3.735 3.555-.437.67-1.137.422-1.575.146-1.532-.962-3.297-1.049-4.96-1.748.219-1.617 1.357-1.749 2.684-1.865l-.014.014ZM88.517 280.85c4.2-4.094 5.733-9.411 6.914-14.859 2.378.714 4.624 2.083 7.279 2.141 1.007.029 1.138.641.584 1.501-2.086 3.481-4.347 6.876-6.142 10.503-2.217 4.487-4.42 9.061-5.703 13.941-.496 1.909-1.138 3.788-1.182 6.06-1.08-1.369-.89-2.84-1.152-4.18-.89-4.05-1.284-8.158-1.62-12.281-.102-1.18.292-2.141 1.036-2.841l-.014.015Zm11.013 39.974c1.284-5.725 2.334-11.509 5.208-16.797 2.086-3.86 4.566-7.444 7.206-10.897.394-.509.832-.903 1.619-.903 3.866-.029 7.717-.218 11.583-.582 1.517-.146 2.873-1.282 4.814-.685-1.153.757-2.086 1.427-3.122 1.966-.963.496-2.042.816-2.334 2.069-.044.189-.248.393-.438.51-3.69 2.287-5.383 5.987-7.25 9.673a59.47 59.47 0 0 0-2.903 6.628c-.116.364-.437.714-.758.933-3.589 2.301-6.069 5.666-8.563 9.032-.496.611-.934 1.005-1.721.961a8.419 8.419 0 0 0-1.605.029c-2.159.146-2.217.146-1.75-1.923l.014-.014Zm37.592-36.973c-1.284.116-2.538.495-3.691 1.049-2.334 1.136-4.872 1.005-7.323 1.427-2.902.466-5.805 1.049-8.708 1.603-.394.073-.788.102-1.547.189 2.218-2.506 4.129-4.764 6.711-6.512 2.232-1.5 4.77-2.258 7.031-3.627 1.006-.612 1.356-1.428.977-2.302-.437-1.005-1.356-.641-2.261-.364-3.793 1.034-6.856 3.365-10.08 5.376-1.619 1.005-3.194 2.287-4.42 3.729-.671.787-1.298 1.296-2.261 1.865 2.217-5.405 4.493-10.504 8.111-14.903 2.407-2.899 4.741-5.915 8.461-7.415 1.75-.714 3.559-.67 5.339-.962 3.88-.641 7.789-1.282 11.728-1.602a37.358 37.358 0 0 1 8.067.218c2.8.365 5.66.277 8.708.816-1.371 1.967-2.727 3.832-3.982 5.74-1.998 3.045-4.055 5.987-6.666 8.551-3.954 3.904-8.563 6.512-14.179 7.124h-.015Zm-6.2-26.732c-3.865 1.53-7.716 3.161-11.947 3.584-1.531.145-3.049.349-4.697 1.034.19-1.034.569-1.602 1.109-2.039 2.83-2.433 5.032-5.42 7.862-7.882 2.407-2.083 4.566-4.443 7.207-6.307 2.465-1.749 4.726-3.759 7.104-5.624 1.108-.859 1.473-2.112 1.765-3.321.364-1.471-.584-2.156-2.043-1.617-1.444.539-2.552 1.69-3.763 2.549-3.472 2.462-6.681 5.23-10.036 7.852-4.026 3.147-7.454 6.905-10.897 11.363-.102-4.836-.321-9.163 1.225-13.475 1.547-4.341 3.866-8.231 6.346-12.004.685-1.063 1.838-2.068 2.903-2.695 3.048-1.835 5.528-4.443 8.752-6.016 1.605-.787 3.195-1.603 5.047-1.501 2.218.117 4.304-.641 6.288-1.325 2.975-1.035 5.557.043 8.329.495 2.013.35 1.867 1.355 1.896 3.088.175 7.299-2.115 13.927-5.353 20.206-1.517 2.942-3.91 5.521-6.39 7.925-3.048 2.971-6.929 4.224-10.721 5.695l.014.015Zm-14.645-64.841c-4.1-2.039-7.892-4.545-11.875-6.73-2.552-1.428-4.653-3.7-7.323-4.953-2.538-1.18-4.74-2.826-7.177-4.123-.393-.218-1.4-.51-.831-1.151.365-.422 1.109-1.136 1.97-.684.189.102.422.393.51.145.612-1.646 2.188-.888 3.15-.976a353.67 353.67 0 0 1 6.988-.611c3.37-.248 6.681-.86 10.051-.889 2.436 0 4.843-.423 7.352-.117 2.305.248 4.814-.276 7.206-1.078 2.188-.743 4.566-1.063 6.885-1.282 1.051-.102 2.232-.189 3.02-.582 1.721-.889 2.159.276 2.772 1.223 1.254 1.836 2.217 3.875 3.661 5.551 2.086 2.403 2.903 5.521 4.96 7.881.35.422.321 1.223 1.371.976-2.465 1.529-5.12 2.01-6.929 4.021-.248.276-.613.466-.977.67-2.582 1.325-4.727 3.161-6.813 5.2-1.473 1.442-3.238 2.55-4.347 4.414-.394.641-1.327.539-2.071.073-3.793-2.462-7.527-4.982-11.553-6.978Zm8.708-45.611c-1.283.32-2.305-.496-3.442-.029-.394.145-.511-.365-.351-.743.351-.816.54-2.04 1.138-2.302.817-.35 1.065.976 1.62 1.5.393.394.641.962 1.035 1.574ZM60.99 225.828c-.102-2.229 1.867-2.87 3.268-3.701 1.867-1.078 3.982-1.689 5.995-2.534-2.874 6.511-4.332 13.154-4.653 20.059-.321 6.803 1.517 13.257 3.588 19.696-2.071-.029-2.8-1.136-2.946-2.87-.175-1.865-1.182-3.482-2.232-4.866-1.05-1.354-1.605-2.942-2.611-4.326-.861-1.18-1.357-2.477-1.284-4.254.219-5.74 1.108-11.436.86-17.204h.015Zm2.013 47.971c.817 1.326 1.4 2.797 2.218 4.123 1.867 3.015 2.48 6.599 4.478 9.629.977 1.5 1.371 3.409 2.013 5.186a289.267 289.267 0 0 1 2.363 6.483c1.284 3.7 1.721 7.604 2.699 11.392.364 1.398-.22 2.971.685 4.326.146.219-.19.641-.583.685-1.007-4.298-3.02-8.158-5.193-11.931-.89-1.544-2.013-2.943-2.903-4.472-.832-1.37-1.43-2.841-1.97-4.414-1.546-4.371-2.552-9.061-6.14-12.529-1.824-1.762-2.539-4.18-2.539-6.744.03-.976-.044-1.967-.423-2.841.613-.437 1.007.073 1.371.189 1.284.423 2.976-.641 3.91.933l.014-.015Zm9.832 49.589c-2.305.466-1.838-1.574-1.998-2.535-.438-2.899-1.868-5.303-3.195-7.779-.642-1.253-.423-2.87-1.62-3.875 1.051-.671.686-2.011 1.357-2.797.321-.423.613.043.788.509 1.109 2.87 2.684 5.551 3.983 8.319.977 2.112 1.37 4.297 2.144 6.439.467 1.252.102 2.083-1.444 1.719h-.015ZM60.86 288.673c-1.153-1.297-2.772-1.967-2.305-4.443.584 1.821 2.655 2.258 2.305 4.443Zm-.642 62.306c-.248-2.462-.467-4.88-.277-7.707-.277-2.68.102-5.666.19-8.696.043-1.938.51-3.905.904-5.842.175-.86.788-1.442 1.823-1.034 4.873 1.835 9.963 2.228 15.127 2.432 4.129.175 8.257.583 12.37-.043 4.377-.714 8.797-1.18 13.129-2.258 1.824-.437 3.735-.758 5.587-1.209 1.08-.277 1.576-.073 1.911 1.18 1.94 7.138 3.516 14.363 3.37 21.851-.102 5.346-1.648 10.387-3.443 15.398-1.21 3.394-3.194 6.279-5.426 9.018-1.824 2.258-4.201 3.394-7.236 3.875-6.097.976-12.122.349-18.16.218-1.08-.029-2.16-.146-3.24-.116-3.413.116-4.915-2.579-6.68-4.662-1.75-2.04-2.932-4.56-4.654-6.599-3.91-4.589-4.726-10.11-5.28-15.792l-.015-.014Zm56.293 11.785c1.05-3.336 1.211-6.832 1.692-10.256.686-4.865.904-9.745.832-14.655 0-.67-.176-1.835 1.254-1.282.292.117.292 0 .438-.218 1.648-2.579 4.303-3.861 6.958-5.055.54-.248 1.211-.248 1.721.073 1.911 1.136 4.085 1.966 5.135 4.224.584 1.253 3.078 1.501 4.274.976 1.517-.612 2.48-1.995 3.953-2.651 1.474-.656 2.655-.146 3.691.641 1.692 1.296 1.867 1.398 3.224-.189.787-.904 1.298-1.996 1.911-3.016 1.108-1.923 2.436-3.788 4.332-4.982 2.086-1.297 4.479-1.005 6.754-.437.715.175 1.284.568 1.824 1.049.904.903 1.94 1.034 3.092.364 2.144-1.253 3.02-.932 4.624 1.078.963 1.224 1.649 2.608 2.539 3.86.51.743 1.327.714 2.086.19 1.4-.903 2.727-1.792 4.478-2.142 1.838-.349 3.268-.073 4.653 1.151 1.211 1.049 2.626 1.297 4.201.831 3.02-.86 5.879-.19 8.651 1.048.219.102.437.277.642.248 2.611-.248 3.792 1.821 5.485 3.147 2.975 2.287 5.484 5.084 8.781 7.05 2.261 1.355 4.624 2.55 6.885 3.948 1.678 1.049 1.678 1.748.438 3.234-2.801 3.438-5.353 7.051-7.542 10.955-1.575 2.856-3.398 5.551-4.989 8.391-.977 1.763-2.698 1.515-4.347 1.515-5.951-.043-11.903-.043-17.855-.073-.393 0-.787-.102-1.035.437-.686 1.443-2.436 1.617-3.239.248-.394-.714-.86-.685-1.4-.685h-8.855c-.35 0-.962.044-.977.146-.467 2.287-1.007 1.18-1.765.146-.394-.539-1.225-.277-1.838-.277-17.33-.029-34.66-.029-52.004-.029h-1.97c1.153-3.19 2.334-6.089 3.268-9.032v.029Zm91.697-54.265c-.861-3.729-2.334-7.298-3.662-10.882-.583-1.544-.671-3.19-.758-4.836-.073-1.005.51-.962 1.05-.816 4.522 1.151 8.402 3.263 10.97 7.386a53.102 53.102 0 0 0 2.217 3.365c.583.787 1.298 1.763 2.407.932.977-.743.437-1.792-.073-2.549-2.553-3.802-4.945-7.779-9.365-9.79-.19-.072-.365-.247-.788-.568 3.195-.189 5.66 1.603 8.432 2.156 1.181.219 2.538 1.37 3.296 2.724.219.423.511.787.817 1.151 1.328 1.617 1.999 1.836 4.099.641 3.151-1.821 6.608-2.083 10.08-2.258 1.299-.073 1.94-.291 2.728-1.617 2.232-3.758 4.478-7.633 8.067-10.357 1.225-.904 2.859-1.209 3.953-2.404.744.932-.073 1.369-.496 1.865-1.867 2.083-3.019 4.545-3.836 7.167-.292.932-.963 1.719-1.444 2.549-.511.962-.496 1.894-.686 2.841-.175.714.35.962.758 1.209.423.248.817.073 1.284-.189 1.619-.962 2.072-2.652 2.509-4.196 1.138-3.977 3.516-7.167 6.098-10.255.715-.831 1.108-.321 1.429.291 1.824 3.336 3.268 6.92 3.078 10.722-.219 3.977.934 6.73 4.26 9.017 2.655 1.836 5.558 3.016 8.431 4.516-2.698 4.618-6.36 8.377-10.765 11.494-3.195 2.229-6.346 4.487-9.686 6.483-2.159 1.282-3.662 3.409-5.193 5.448-1.445 2.01-2.845 4.196-5.514 4.953-.351.102-.511.437-1.007.175-2.845-1.617-6.025-2.287-9.19-2.622-3.705-.394-7.498-.146-11.232-.685-1.722-.218-3.443-.466-5.121-1.005-2.479-.831-5.12-.962-7.614-1.792-1.838-.583-3.297-1.69-4.8-2.797-.641-.495-.364-.83.044-1.253 2.042-1.937 3.122-4.443 4.479-6.847 1.794-3.161 1.473-6.205.758-9.352l-.014-.015Zm28.956 27.723c-.102.247-.117.495-.248.568-1.138.568-1.328 1.923-2.261 2.651a1013.96 1013.96 0 0 0-9.511 7.532c-.278.189-.292.51-.788.189-5.135-3.365-9.89-7.24-14.267-11.567a20.603 20.603 0 0 0-3.807-3.015c-.35-.219-.613-.539-.963-.787-.612-.437-.787-1.034-.394-1.675.438-.743 1.153-.495 1.693-.175 1.575.903 3.048 1.908 4.813 2.477 2.218.684 4.42 1.296 6.711 1.5 1.327.102 2.231 1.151 3.588 1.18 1.503 0 3.151-1.078 4.478.437 1.226-1.428 2.874-.758 4.333-.83 1.692-.102 3.399-.117 5.062.291.787.219 1.138.714 1.546 1.209l.015.015Zm31.319-8.522c-2.115 0-4.26-.467-6.346.582-1.531.758-3.442.496-5.091 1.151-.977.393-.685-1.209-1.181-.859-.438.291-.511 1.107-1.226 1.354-.612.219-1.254.467-1.721.86-.831.714-1.532.277-1.94-.291-.496-.685.029-1.137.613-1.69 1.4-1.399 2.771-2.797 4.449-3.934 2.334-1.544 4.697-3.044 7.352-4.093 4.726-1.836 8.11-5.303 10.722-9.571.116-.175.189-.393.321-.568.189-.292.423-.539.86-1.078-.583 3.831-1.254 7.342-1.969 10.853-.511 2.607-1.896 4.516-3.151 6.628-.423.656-.89.656-1.692.656Zm24.361-222.668c-1.576-.116-3.005-.932-4.522-.714-6.054.831-11.262 3.395-15.39 7.911-1.298 1.427-2.772 2.258-4.697 2.331-2.188.101-4.376.247-6.929.364 3.195-4.181 6.2-8.129 9.219-12.033 5.135-6.658 11.218-12.528 16.251-19.23 1.619-2.156 3.661-4.05 4.813-6.584.175-.394.54-.743.934-.612.423.146.438.64.467 1.078.116 2.84-.029 5.725-.029 8.595 0 3.627-.073 7.27-.073 10.897.029 2.622-.365 5.258-.044 7.983v.014Zm-2.903-31.918c-.788.714-1.298 1.72-1.94 2.579-.584.889-1.109 1.835-1.794 2.651-1.838 2.142-3.326 4.56-5.135 6.672-1.532 1.763-2.728 3.831-4.595 5.346-1.371 1.108-2.334 2.696-3.443 4.08-1.896 2.36-3.982 4.545-5.849 6.919-1.357 1.748-2.947 3.482-4.377 5.201-1.473 1.792-3.151 3.482-4.376 5.521-1.823 3.001-4.741 4.938-7.425 7.065a110.297 110.297 0 0 0-5.587 4.808c-1.152 1.107-2.465 1.602-3.982 1.937-2.932.67-5.923.539-8.855 1.355-5.018 1.398-7.965 4.88-8.242 9.702-.219 3.394-.073 7.371 3.02 10.095.715.641 1.225 1.297.248 2.288-3.224 3.161-6.141 6.628-9.074 10.066-.51.612-1.502 1.078-1.765 1.617-1.4 2.826-4.055 4.472-5.922 6.847-1.109 1.427-2.305 2.84-3.691 3.977-3.049 2.534-5.164 5.841-7.746 8.769-.539.612-.35 2.215-1.298 2.258-1.036.03-2.261-.568-3.151-1.223-1.211-.903-2.582-1.107-3.938-1.399-2.757-.612-5.558-1.005-8.403-1.049-1.356-.029-.715-1.005-.54-1.5.496-1.369.905-2.797 1.474-4.123 1.152-2.68 1.444-5.55 2.363-8.245 1.357-3.904 2.071-7.998 3.311-11.931 1.036-3.219 1.547-6.555 2.655-9.717.277-.743.117-1.5.394-2.229 1.678-4.472 2.042-9.25 3.472-13.781 1.138-3.54 1.721-7.211 3.122-10.634 2.042-4.953 2.29-10.343 3.938-15.34 1.255-3.802 1.765-7.735 2.874-11.567.934-3.19 2.071-6.41 2.363-9.789.073-.889.35-1.398 1.473-1.398 2.772-.044 5.529-.467 8.286-.496 4.624-.073 9.146-1.034 13.712-1.471 3.297-.291 6.667-.67 9.905-1.471 1.007-.248 2.159-.044 3.224.029 3.589.247 6.521-1.37 9.19-3.41 2.29-1.718 2.538-5.87.438-7.764-.978-.903-2.378-1.573-3.91-1.5-1.138.043-1.867-.146-2.086-1.646-.364-2.652-1.473-5.332-3.005-7.372-2.115-2.797-5.514-3.933-9.146-3.438-.89.117-1.911-.102-2.757.816-.365.393-1.284.393-1.824-.568-1.283-2.258-3.238-4.02-4.492-6.366-.496-.889-2.014-1.53-3.122-1.602-.788-.044-1.474-1.108-2.305-.292-.394-.67-1.473-.393-1.502-1.763-.03-3.19 1.75-5.87 2.188-8.886.218-1.5.291-3.044 1.254-4.341.613-.83 1.182-1.53 2.407-1.53 3.953.073 7.936.03 11.918.03v-.03c4.566 0 9.176-.189 13.741.044 4.406.248 8.782.102 13.158.073 5.456-.03 10.912.175 16.367-.044 3.443-.116 6.915.393 10.357-.043.686-.102 1.138.247 1.138 1.005 0 1.005.277 1.995.277 2.942-.102 7.852.19 15.719-.073 23.57-.145 4.27-.247 8.567.19 12.82.321 3.147-1.05 5.012-3.122 6.876h.015ZM35.214 232.37c.117-1.763 1.576-.889 2.261-.612 3.69 1.369 7.148 3.263 10.62 5.113 1.065.568 1.998 1.471 2.757 2.389 3.165 3.729 5.98 7.634 7.935 12.222 1.11 2.652 1.97 5.347 2.772 8.071.54 1.763.788 3.554.496 5.594a531.131 531.131 0 0 1-5.66-8.1c-1.794-2.607-3.88-5.04-6.39-7.051-.83-.67-3.909.117-4.346 1.078-.292.612.044 1.297.496 1.501 3.37 1.442 5.28 4.472 7.702 6.949 3.02 3.117 5.237 6.876 7.775 10.824-2.757-.714-4.872-1.617-6.914-3.118-2.583-1.865-5.354-3.511-7.994-5.332-2.51-1.748-4.158-4.181-5.923-6.584-1.97-2.652-3.049-5.798-4.989-8.45-.933-1.296-.831-2.855-.904-4.224-.117-3.438.073-6.876.32-10.285l-.014.015Zm-8.636 48.83c-.466-.742-1.181-.437-1.75-.815-2.16-1.472-4.055-3.293-6.2-4.808-1.765-1.252-4.011-2.156-5.207-4.253-.248-.467-.934-.743-1.474-1.049-2.465-1.472-4.186-3.73-6.2-5.696-1.108-1.049-.291-1.326.511-2.011 2.611-2.185 5.98-2.971 8.723-4.88 1.328-.903 3.093-1.209 4.727-1.675 3.194-.903 6.2-2.549 9.686-2.258 1.502.146 3.02.189 4.551.393a3.39 3.39 0 0 1 2.582 1.792c3.02 5.885 7.717 10.095 13.406 13.33.146.101.292.247.467.276 4.2.365 4.566 3.467 4.989 6.745.32 2.229.102 4.472.364 7.197-3.194-2.754-5.98-5.157-8.942-7.343-2.903-2.112-5.514-4.617-8.606-6.453-2.83-1.69-5.558-3.555-8.753-4.647-1.109-.364-1.94-1.369-3.238-1.369-1.62 0-2.655.786-2.553 2.083.044.83 1.896 2.068 2.903 1.908.175-.029.102-.539.437-.189 2.305 2.301 5.675 2.768 8.286 4.618 3.15 2.214 6.564 4.049 9.613 6.439 2.013 1.602 3.808 3.438 5.82 5.011.642.51 1.182 1.136 1.503 1.996-1.444-.044-2.699.582-4.011.961-5.412 1.573-10.62 1.326-15.682-1.005-2.232-1.034-4.566-2.069-5.952-4.268v-.03Zm318.94 100.27c.044 3.554-.365 7.124-.189 10.707a4.45 4.45 0 0 1-2.043 4.05c-.831.51-2.377.393-3.238.175-2.976-.816-5.981-.641-8.942-.758-4.522-.174-9.044-.32-13.552.029-4.405.321-8.825-.174-13.231.641-2.844.51-5.893.219-8.825.044-4.522-.291-9.044-.277-13.552-.073-4.814.19-9.657.685-14.412.117-4.479-.51-8.928-.831-13.406-.903-5.456-.073-10.912-.423-16.324-.146-3.238.146-6.491.218-9.715.102-5.091-.219-10.182-.568-15.273-.903-3.238-.219-6.593-.029-9.89.116-4.085.146-8.14.437-12.195.612-6.74.291-13.494-.116-20.204.35-4.697.32-9.292-.146-13.945-.423-1.941-.116-3.91.029-5.675 1.035-.248.145-.569.276-.831.247-6.215-.51-12.414.35-18.629.029-6.287-.349-12.618-.713-18.934-.568-6.127.146-12.297.146-18.41.394-3.34.116-6.68.713-10.036.713-2.392 0-4.77-.029-7.147-.029-4.056.029-8.111.175-12.166.117-2.684 0-5.266-.641-7.936-.67-7.279-.102-14.558.349-21.837-.044-3.793-.219-7.542-.539-11.335-.685-2.363-.102-4.697-.189-7.075.248-.904.175-2.144 0-3.224-.175-.933-.175-.962-1.107-1.035-1.763-.467-4.559-.146-9.163-.219-13.722v-2.652c0-3.554.248-3.554 3.866-2.942 2.217.349 4.522-.146 6.783-.19 3.078-.073 6.141-.247 9.19-.145 3.953.116 7.892.116 11.845.189 4.45.117 8.927-.102 13.406.219 1.677.116 3.544.145 5.28-.321.584-.175 1.153-.117 1.678.219 2.29 1.573 4.45 3.292 6.2 5.506.831 1.049 2.334 1.282 3.588 1.675 5.12 1.647 10.328 1.355 15.565.962 2.772-.219 5.529-.495 8.183-1.224 3.224-.888 6.667-1.325 9.322-3.685.642-.583 1.357-.816 2.232-.86 3.297-.248 6.608-.583 9.905-.903.466-.044.962-.117 1.4-.073 1.619.175 3.166.029 4.799-.175 2.261-.277 4.625.248 6.929.292 3.808.116 7.615.116 11.451.174 1.678.03 3.516.539 5.019.175 4.478-1.151 8.854.437 13.347.029 6.812-.582 13.741.029 20.627.19 3.559.102 7.148.175 10.722.116 4.303-.043 8.65.117 12.953-.175 1.298-.072 1.138.641 1.007 1.399a55.364 55.364 0 0 0-.642 10.314c.029 1.063.277 1.967 1.211 2.287 1.006.32 2.013.67 3.121-.422 4.566-4.371 10.255-6.774 16.178-8.625 5.558-1.689 11.29-2.476 17.082-2.461 4.23.043 8.402.903 12.618 1.281 1.108.117 1.896.977 2.626 1.53 2.115 1.544 4.595 1.515 6.856 1.908 4.259.758 8.358 2.156 12.691 2.462.831.073 1.677.423 2.538 0 .117-.043.292-.174.423-.116 4.274 1.646 8.825 1.617 13.318 1.937 2.83.19 5.631-.072 8.432 0 3.807.102 7.498-.349 11.261-.713 6.915-.641 13.596-2.186 20.189-4.152 3.02-.903 6.025-2.185 8.505-4.269.467-.364.715-.976 1.079-1.5 1.036 1.18.642 2.608.642 3.904v-.029Zm15.565-30.694c-1.532 5.521-4.333 10.43-8.169 14.713-1.225 1.37-1.911 3.234-3.705 4.123-.496.248-.715 1.355-1.517.248-.102-.117-1.153.189-1.153.961 0 .889.044.961-.744.932-1.677-.043-2.304 1.472-3.399 2.287-1.721 1.282-3.515 2.142-5.747 2.506.686.758 1.444.291 2.071.743-.758.859-1.838.86-2.8 1.151-3.341 1.107-6.638 2.476-10.08 3.088-1.765.321-3.399 1.297-5.383 1.035-1.255-.146-2.626.786-4.099.815-3.939.073-7.863.117-11.758.539-1.4.175-3.048-.51-4.347.787-.423.422-.218-.83-1.298-.787-3.34.19-6.739-.043-10.08-.422-3.078-.35-6.127-.86-9.175-1.37-2.976-.495-5.952-1.063-8.942-1.427-1.62-.19-3.545-.321-5.062-1.18-.715-.393-1.182.422-2.072-.175-1.079-.757-.612-1.355-.321-1.748 1.649-2.214 2.699-4.88 5.062-6.599.467-.35.511-.743.102-1.399-.787-1.325-2.115-1.995-3.121-3.015-.934-.962-2.159-1.792-2.655-2.943-.642-1.442 1.283-1.865 1.94-2.768 1.969-2.724 4.201-5.23 6.418-7.764 1.007-1.151 1.036-1.865-.364-2.477-1.036-.495-2.145-.888-3.268-1.107-1.721-.35-2.932-1.646-4.522-2.258-1.05-.422-.467-1.18.146-1.894 2.728-3.263 6.374-5.885 8.14-9.775 1.356-2.972 3.005-4.02 6.024-3.365.934.19 1.43-.291 1.678-1.107.787.437-.044.903.219 1.326 4.449.116 8.898.364 13.318 1.107 1.794.291 3.472.757 5.164 1.398 1.838.685 3.807 1.137 5.747 1.399 3.02.393 5.777 1.602 8.607 2.578.175.044.292.219.467.248 3.092.35 5.893 1.69 8.781 2.68 3.545 1.224 7.134 2.229 10.664 3.395 3.311 1.078 6.958 1.049 10.371.218 1.109-.277 2.291-1.078 3.341-1.763.744-.495 1.079-1.398.642-2.359-.175-.35-.438-.831-.759-.044-.044.102-.219.247-.292.247-1.91-.976-1.896-.976-3.617.175-1.649 1.078-6.244.933-7.819-.277-.146-.101-.248-.291-.365-.32-4.376-.758-8.315-2.753-12.457-4.152-2.291-.757-4.8-.976-6.959-1.966-3.413-1.574-7.25-1.297-10.576-2.827-5.163-2.36-10.75-2.84-16.177-3.977-1.867-.364-3.661-.67-5.529-.539-.977.044-.539-.888-.685-.932-.788-.248-1.722-.35-2.378.117-.584.422-1.211.757-1.678.364-.437-.35.117-.976.292-1.442 1.765-4.72 1.867-9.557 1.109-14.466-.365-2.36.189-4.807-.744-7.124-.248-.641.35-.888.89-1.049 1.867-.582 3.559-1.573 5.455-2.156 2.947-.888 5.806-2.185 8.753-3.146 1.298-.423 2.728-.568 4.128-.568 4.799.029 9.613.043 14.412.32 3.443.19 6.988.364 10.328.962 3.866.684 7.819 1.15 11.554 2.432 4.449 1.545 8.315 4.094 11.524 7.561 1.181 1.282 2.655 2.229 3.734 3.686 1.401 1.923 2.582 3.904 3.705 5.987 1.911 3.467 3.589 7.022 5.412 10.503 3.56 6.978 5.748 14.218 3.633 22.07l-.015-.014Z" fill="#000"/></g><defs><linearGradient id="b" x1="52.665" y1="22.57" x2="298.433" y2="22.57" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="c" x1="206.875" y1="325.678" x2="382.708" y2="325.678" gradientUnits="userSpaceOnUse"><stop stop-color="#FF7139"/><stop offset="1" stop-color="#FFEA7F"/></linearGradient><linearGradient id="d" x1="206.875" y1="325.678" x2="382.708" y2="325.678" gradientUnits="userSpaceOnUse"><stop stop-color="#FF7139"/><stop offset="1" stop-color="#FFEA7F"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h364.89v400H0z"/></clipPath></defs></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/mr-import.svg b/browser/components/newtab/data/content/assets/mr-import.svg
new file mode 100644
index 0000000000..93034912ec
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mr-import.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg width="337" height="400" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path d="m75.246 347.009 9.833-3.423 4.623-2.282 21.396 9.716 41.052 6.281h81.515l54.919-6.281 10.987-13.704h9.257l5.787 6.282-5.787 19.42-25.443 6.857h-63.024l-91.925 3.423-43.357-15.997-9.833-10.28v-.012Z" fill="url(#b)"/><path d="m246.803 42.957-6.351-14.103 7.622-7.046 11.433-5.129h8.257l5.717-10.257 12.716-6.41 8.892 15.385 6.352-4.481 15.256-4.494 10.798 7.058 5.082 13.468-3.812 12.175-12.08 9.621 5.082 14.75-5.082 17.315 5.082 5.776 1.27 7.692-3.176 8.328-71.811 3.2-1.27-7.693-2.541-11.54 6.352-7.057c-2.964-2.776-8.893-9.104-8.893-12.174 0-3.846-1.27-12.186 0-15.385 1.012-2.565 3.812-7.046 5.082-8.975l.023-.024Z" fill="url(#c)"/><path d="M227.348 73.034c.071-.776-.141-1.576-.917-1.682-4.505-.6-6.434-3.94-8.269-7.434-.918-.706-1.73-1.552-2.706-2.117-.106-.07-.164-.106-.235-.165-.341-.27-.341-.506-.165-.776.071-.106.141-.235.236-.341-1.518-1.141-3.282-.776-4.811-.235-3.929 1.376-5.658 5.281-8.599 7.834-1.258 1.07-1.894 2.728-1.658 4.575.2 1.376-.683 2.459-1.894 2.659-1.188.2-2.576-.071-3.317-1.318-2.27-3.905-5.352-2.152-7.046.306-2.541 3.67.341 8.54 5.081 8.88 2.341.165 2.918.942 2.129 2.753-2.305 5.376-1.693 7.128 3.588 9.822.576-.2 5.423 1.317 5.481 1.412 1.494.305 2.976.635 4.47.87 7.728 1.282 11.316-.435 14.492-6.822.27-.541.647-1.07.164-1.518-.541-.47-.882.2-1.352.4-2.365 1.047-4.776 1.718-7.211.035-.682-.505-1.494-1.011-1.223-1.811.306-.976 1.423-1.517 2.364-1.141 1.047.4 2.07.2 3.082.435 1.894.4 3.011-1.317 4.646-1.682 1.012-.27.341-1.788.271-2.588-.2-2.658.847-4.81 2.27-6.857.718-1.082 1.012-2.259 1.082-3.494h.047Zm-11.586.812c-.47.365-.953.706-1.423 1.047-.236.13-.471.306-.706.435a3.812 3.812 0 0 1-.741.4c-.2.106-.435.2-.682.27-.165.071-.377.106-.541.13-.741.2-1.588.2-2.506-.07-1.223-.342-1.658-1.071-1.658-1.989.035-1.211 1.258-1.211 2.305-1.482 1.765 1.376 2.847-.34 4.07-1.14.106-.071.235-.13.341-.2.165-.071.341-.13.506-.2.682-.165 1.282.035 1.694.54.07.106.141.2.164.342.142.4.036.835-.164 1.211-.141.27-.377.506-.647.706h-.012ZM198.189 98.488c5.528 1.612 11.056 1.871 16.503 2.506 1.023.117 1.505.258 1.023 1.152-2.012 3.588-1.741 7.434-1.306 11.21.2 1.612-.082 2.023-1.858 2.694-4.152 1.529-8.058.976-12.163.294-2.564-.412-5.175-4.152-4.575-6.611.905-3.658 2.764-7.093 2.328-11.21l.036-.035h.012ZM312.509 157.853v.059h.165l-.165-.059Zm9.434-14.103c-1.059 0-2.505-.035-2.788 1.682-.741 4.564-3.27 7.669-7.575 9.222-1.482.518-3.211 2.294-4.552.741-1.482-1.717.541-3.329 1.317-4.858.483-.941 1.318-1.717 1.447-2.846.13-1.33-.317-2.012-1.67-1.2-1.6.905-2.988 2.141-3.976 3.587-3.305 4.882-7.893 7.505-13.574 7.834-8.822.483-17.585 1.976-26.513 1.329-7.446-.517-14.95.036-22.396.389-1.576.058-3.176.188-4.752.317-.576.035-1.247-.188-1.447.741-1.129 5.176-4.14 9.316-7.634 13.104-.741.835-.482 1.352.059 2.105 2.67 3.823 6.481 3.694 10.233 2.659 8.799-2.459 17.656-4.6 26.255-7.799 4.105-1.553 8.41-2.529 12.644-3.752 4.047-1.2 8.317-1.424 12.292-2.976 1.953-.777 4.082-.388 6.035-.682 5.552-.812 11.139-1.518 16.491-3.27 2.211-.741 4.458-1.294 6.446-2.753 3.976-2.917 3.599-7.469 4.493-11.515-.388-.742.518-2.071-.835-2.071v.012Zm-12.68 14.821c-.294.071-.577.165-.871.259-1.352.423-2.658.976-4.105 1a4.862 4.862 0 0 1 1.094-.518c.224-.094.447-.165.671-.223 1.058-.295 2.152-.353 3.246-.553h-.035v.035ZM206.257 323.038c.718 1.105-.541 1.799-.576 2.776-.306.67-1.635.706-1.294 1.705.447 1.365.071 2.576-.682 3.612-.682.941.2.999.541 1.399 0 2.106-.717 4.211.447 6.246.341.635.106 1.306-1.165 1.471-6.457.87-12.821-.2-19.184-.706-2.423-.2-4.858-.235-7.693-.33 3.693-4.305 5.27-9.48 8.375-13.891 1.647-2.341 1.705-5.705 2.458-8.61.518-2 .988-4.012 1.576-5.976.377-1.306 1.271-1.941 2.741-1.741 5.505.706 11.116.871 16.48 2.435-.177 1.941.235 3.87-.953 5.811-.788 1.305-1.47 3.035-.612 4.74-.929 0-.412.706-.517 1.106l.07-.035-.012-.012ZM37.029 235.218c-1.8-2.847-4.34-4.729-7.834-5.329-1.6-.27-2.117-.694-1.87-2.587.411-3.647 1.8-6.987 2.776-10.457.553-1.918 5.822-5.493 7.904-5.493.659 0 1.106.235 1.494.658 6.281 6.823 15.056 9.234 23.549 12.08 1.976.659 2.258 1.165 1.317 2.847-1.352 2.517-3.058 4.764-4.61 7.116-1.871 2.847-3.718 5.694-5.823 8.375-1.07-.094-2.153 0-3.117-.623-4.305-2.752-9.187-4.434-13.81-6.622l.036.035h-.012Z" fill="#DB9646"/><path d="M57.602 363.584c-8.422 0-16.833-.164-25.22.094-2.893.059-5.916-.458-8.645.353-1.235.353-3.058-1.423-3.74.847-1.165-2.046-.753 0-1.071.388-.776.906-1.235.095-1.588-.458-.647-.977-1.306-1.53-2.27-.33-.294.388-.647.294-1.035.094-2.141-1.07-4.482-.258-6.693-.647-1.859-.329-3.611.941-5.458.33-.682-.224-1.859.164-1.859-.906 0-.941.353-1.788 1.659-2.141 2.635-.717 5.364-.611 7.999-1.105 3.446-.624 6.928-.2 10.374-.553 1.494-.165 3.282-.388 4.94-.294 3.506.2 7.023-.259 10.528-.165 7.634.259 15.315-.353 22.914.623.811.095 1.494.165 2.117.741.588.553 1.07 1.165.847 2.012-.259 1.035-1.165.812-1.918.847h-1.858v.259l-.023.011ZM301.182 24.783c-.611 1.165-.423 2.047-.388 2.929.035 1.106-.588 2.011-1.694 2.117-1.176.094-1.364-.94-1.458-1.882v-.223c-.588-6.2.258-7.117 6.469-7.023 1.165 0 2.341 0 3.482.13 1.035.094 1.717.682 1.658 1.847-.035 1.164-.882 1.329-1.752 1.4-.977.035-1.953 0-2.988 0 .388 2.305 2.529 3.575 3.282 5.622.164.482.553.588 1.27.553 2.529-.165 5.07-.353 7.634-.718.059-.682-.459-1.07-.847-1.529-.611-.717-.353-1.27.2-1.823.647-.647 1.306-.812 2.012-.094.294.259.611.482.882.753 1.141 1.2 3.799 1.493 3.54 3.317-.353 2.6-1.717 5.034-3.152 7.304-.388.647-1.2.718-1.882.388-.753-.329-.718-1.07-.553-1.623.329-1.105.424-2.47 2.141-2.529-1.165-1.2-2.4-.882-3.611-.717-2.141.294-4.258.517-6.399.776-2.012.259-3.223-.776-4.094-2.505-1.105-2.118-2.34-4.153-3.669-6.493l-.071.035-.012-.012ZM40.593 374.827c-2.635.553-7.482-.259-12.187.717-.811.165-2.081.165-2.27-1.035-.13-.941.165-1.529 1.459-2.011 2.823-1.106 5.422-2.141 8.48-1.071.46.165 1.142-.258 1.694-.588 1.4-.776 2.212-.482 3.353.847.13.165 1.035.718 1.035.071 0-1.365.976-1.271 1.717-1.365 4.482-.423 8.94-.647 13.421.059.906.165 2.012.13 1.988 1.659 0 1.694-1.494 1.305-2.176 1.364-4.81.518-9.622.812-16.514 1.365v-.012ZM210.339 76.95c-.459-.036-.906-.13-1.364-.095-1.235.036-1.694-.882-1.694-1.752 0-1.165 1.305-1.694 2.011-1.4 1.718.718 2.8-.224 3.905-1.106.906-.717 1.824-.752 2.435.07.718.883.13 1.624-.682 2.306-1.623 1.33-3.223 2.082-4.611 2.012v-.035ZM281.621 74.094c-.553.13-.906.26-1.27.33-4.388.482-4.741.164-4.741-4.294 0-3.61 1.835-5.67 5.493-6.175-1.011-1.2-1.846-2.34-2.823-3.376-1.035-1.164-.905-2.117.165-3.211 1.623-1.694 3.964-2.247 5.717-3.835 1.458-1.294 4.317 3.188 4.74 4.482.259-2.247.482-3.894.647-5.552.259-2.73.941-3.282 3.67-3.247 1.329 0 2.541.588 3.905.46 1.012-.095 1.459.776 1.329 1.787-.164 1.294-.423 2.6-.552 3.893-.071.553-.777 1.2 0 1.659.717.423 1.399.259 2.14-.2 1.306-.812 2.282-2.082 3.8-2.635.623-.223 1.199-.553 1.729-.13 1.329 1.142 1.623 2.93 2.599 4.294 1.235 1.788.518 3.153-1.27 4.294 3.835.329 4.646 1.364 4.035 4.94-.071.459-.295.882-.353 1.329-.436 2.682-2.024 4.093-4.776 4.223-.094.423.259.517.494.647 2.553 1.705 2.788 3.658.682 5.846-.553.553-1.07 1.14-1.588 1.717-1.305 1.459-2.693 1.459-4.034-.07a250.166 250.166 0 0 1-2.894-3.47c0 1.788-.329 3.246.071 4.481.717 2.376-.424 3.317-2.341 3.894-1.588.482-3.247 1.035-4.882 1.105-1.329.035-2.34-.906-2.246-2.564.059-1.294 0-2.6 0-4.188-1.823.941-2.6 2.53-3.705 3.741-.753.776-1.494.941-2.177.459a43.673 43.673 0 0 1-4.352-3.706c-1.623-1.623-1.235-3.058 1.329-5.551.459-.424.942-.753 1.33-1.436l.129.071v-.012Zm15.997-6.01c-.035-1.788-2.635-4.647-4.034-4.576-.33 0-1.024 0-1.788.553-1.471 1.282-1.247 1.27-1.553 1.847-1.658 2.082-.565 4.293 1.094 5.399 1.329.905 2.694.882 4.093.129 1.459-.776 1.882-2.117 2.176-3.34l.012-.012ZM285.973 14.291a4.729 4.729 0 0 0-.224.647c-1.917-.753-1.846 1.53-3.023 1.953-2.67.976-3.999 3.376-5.434 5.587-.647 1.012-1.27.776-2.117.482-1.106-.388-.977-1.035-.553-1.823 1.988-3.61 4.94-6.199 8.575-8.057 1.305-.647 2.211-.07 2.764 1.2l.012.011ZM279.962 29.559c-1.623-.094-1.788-1.165-1.564-2.176.776-3.188 6.304-7.081 9.692-7.21 1.459-.036.129 1.846 1.435 1.623.094.752-.353 1.364-.941 1.458-3.646.588-6.269 2.4-7.799 5.846-.129.259-.646.353-.846.459h.035-.012ZM265.036 35.475c-2.4.07-5.164.459-7.54 2.247-.847.647-2.012 1.435-2.8.223-.776-1.164.165-2.211 1.177-2.823 2.505-1.53 5.069-2.823 8.128-2.952 1.235-.07 2.27.258 3.281.752.624.295 1.365.718 1.012 1.788-.353.977-1.047.977-1.859.906-.294-.035-.623-.07-1.399-.13v-.011ZM262.601 26.348c.741.035 1.235-.036 1.458.517-1.27.459.683 2.376-1.035 2.47-3.282.165-6.175 1.659-9.233 2.53-.13.035-.353-.095-.424 0-.482.458-.682 2.046-1.623.776-.353-.483.294-1.882.941-2.659 1.694-2.082 4.187-2.47 6.563-3.117 1.165-.33 2.471.07 3.353-.482v-.035Z" fill="#010101"/><path d="m60.06 69 10.045-11.246 4.07-7.892 9.81-2.635 18.42 3.823 14.115-2.635h20.573l22.49 4.07 15.798-4.07 18.667-6.458 14.115 2.87 9.575 8.857v7.658h-3.353l-11.727 3.588-4.305 10.527-6.458-2.635-3.834 2.635v5.74l6.94 4.788 1.435 10.292 1.917 3.588v9.327l-11.245 6.705-19.385-3.352h-24.878l-24.89-6.223-28.477 15.068-22.725 4.305-16.515-4.305-9.093-8.857-3.105-17.232 9.328-15.315 12.68-11.01.012.023Z" fill="#010101"/><path d="M197.812 234.713c-1.399-.623-2.693.329-4.093.294-6.434 0-12.739-.882-18.95-2.435-1.623-.388-2.434-.223-3.611 1.071-6.269 7.128-13.268 13.562-20.149 20.102-5.199 4.94-10.528 9.657-16.421 13.856-4.74 3.388-9.586 4.094-14.821 2.835-6.857-1.658-13.915-2.376-20.737-4.105-9.14-2.306-18.362-4.235-27.337-7.316-5.787-1.988-11.762-3.388-17.679-4.976-1.917-.518-3.74-1.623-5.975-1.012-.588.165-2.012-1.011-.718-2.305.553-.553 1.012-1.176 1.53-1.753 2.046-2.14 1.858-3.223-.624-4.552-3.282-1.752-6.528-3.811-10.34-3.776-2.54 0-5.434.165-6.892 3.153-.388.776-1.588.905-2.306 1.658-4.681 4.811-8.422 10.316-11.633 16.139-1.2 2.14-2.952 3.117-5.164 3.317-3.999.353-7.246-1.494-10.304-3.811-.623-.459-1.011-1.236-1.011-2.047.035-4.623-.424-9.21 1.658-13.692 1.988-4.258 1.917-9.081 2.694-13.668.294-1.729.459-3.352 2.305-4.552 1.106-.682 1.07-3.094.624-3.999-.777-1.659-.26-2.894.329-4.094 3.117-6.634 5.234-13.762 9.293-19.937 1.564-2.377 4.163-3.518 6.892-2.729 2.341.647 4.458 1.729 6.246 3.352 2.047 1.882 4.164 3.67 6.729 4.811 3.317 1.458 5.105 4.658 7.61 7.022 4.458 4.199 10.304 5.658 15.762 7.846 1.435.588 3.023 2.282 4.258 1.435.941-.647.906-2.8 1.2-4.294.094-.588.458-1.011.482-1.729.13-2.305 1.717-2.764 3.835-1.658 4.128 2.176 8.257 4.387 12.644 6.081 4.388 1.694 8.846 3.023 13.292 4.493 4.188 1.4 8.481 1.824 12.845 1.141 1.917-.294 3.835-.329 5.752-.552 2.082-.259 3.246-1.435 4.587-2.706 3.964-3.834 6.529-8.622 9.458-13.209 2.599-4.105 5.105-8.293 7.41-12.527.612-1.141.588-2.671.741-4.035.647-5.364 2.635-10.245 5.27-14.903 1.141-1.988 2.117-4.035 3.799-5.693.718-.718-.459-1.459-1.106-2.118-3.246-3.258-6.857-6.21-9.421-10.116-2.247-3.411-2.012-3.54 1.435-5.728 4.775-2.988 8.998-6.669 13.268-10.339 5.105-4.388 9.657-9.34 14.433-14.08 3.705-3.67 6.857-7.846 10.892-11.222 1.035-.882-.13-1.176-.647-1.399-3.353-1.565-6.893-2.6-10.469-3.517-3.282-.847-6.375 0-9.528.846-5.881 1.494-11.539.33-17.161-1.599-4.223-1.435-8.446-2.894-12.775-3.964-4.74-1.177-9.421-.588-13.785 1.729-8.164 4.328-16.81 7.646-25.125 11.586-7.834 3.67-16.127 4.329-24.702 3.741-5.622-.353-10.433-2.282-14.656-5.529-4.223-3.223-7.375-7.775-8.975-12.692-2.729-8.422-.941-16.491 3.611-24.172 2.34-3.964 5.011-7.516 8.646-10.186 2.635-1.918 5.164-3.94 7.74-5.894 4.646-3.517 7.763-8.163 10.468-13.138 1.4-2.541 3.058-4.847 5.14-6.764 2.118-1.917 4.906-2.34 7.74-2.376 5.529-.07 10.822 1.176 16.127 2.47 4.517 1.07 9.139.753 13.586.07 6.21-.94 12.292-3.152 18.691-2.434 2.987.33 6.081.882 8.939.776 6.011-.258 11.151 2.635 16.774 3.517 4.058.624 7.892.294 11.833-.811 7.704-2.118 15.021-5.494 22.819-7.317 4.647-1.07 9.163-1.658 13.786.753 1.494.776 3.376 1.53 5.329 1.564 1.693 0 3.023 1.436 3.964 2.635 2.246 2.835 4.881 5.47 5.881 9.105.553 1.987 1.106 3.964 1.364 6.022.294 2.117 1.235 3.905 2.141 5.764.647 1.306 1.659 1.882 3.153 1.917 2.729.07 4.975 3.023 4.422 5.787-.423 1.953-.976 3.905-2.399 5.435-.977 1.047-1.4 2.34-1.071 3.646 1.659 6.705-2.046 14.927-9.292 17.373-.812.259-.906.883-1.071 1.6-.846 3.941-1.587 7.74.165 11.739 1.753 3.964 2.694 8.293 4.352 12.328.683 1.658 2.247.882 3.188 1.858 2.247 2.376 5.164 3.682 8.481 3.905.388 0 .811 0 1.164.13 2.435 1.07 3.929.682 3.153-2.306-.33-1.306 1.917-.906 1.011-2.141-1.07-1.47-1.494-3.117-1.399-4.916 0-.647-.589-.553-1.012-.683-5.658-1.623-8.74-6.116-11.669-10.704-.846-1.305.389-2.246 1.494-2.599 4.647-1.529 8.775-3.941 11.834-7.705 2.011-2.54 3.775-1.823 5.846-.553.352.224.682.624 1.141-.2.458-.846 1.364-.776 2.211-.094.459.353 1.035 1.141 1.788.389.588-.589.776-1.4.482-2.153a30.272 30.272 0 0 0-1.364-3.188c-1.918-3.905-1.659-7.975-.847-12.033.223-1.07.847-1.988 1.729-2.705 2.635-2.212 2.599-2.93.423-5.529-6.269-7.48-7.022-15.88-3.928-24.819.517-1.529 1.399-3.223 2.599-4.234 1.882-1.6 1.106-2.706.129-4.258-1.917-3.094-3.058-6.576-4.222-9.952-.388-1.07-.459-2.434.776-3.681 3.999-4.07 8.422-7 14.009-8.552 3.188-.882 6.176-1.564 9.422-1.2 1.106.13 1.529-.352 1.988-1.4 2.894-6.892 7.869-11.291 15.28-13.115 2.67-.647 3.446-.035 4.458 2.282 1.329 3.094 3.446 5.823 5.011 8.787.882 1.623 1.717 1.2 2.693.423 3.964-3.117 8.481-4.975 13.398-5.857 2.694-.483 5.199-.424 7.869 1.27 1.882 1.2 3.741 2.34 5.458 3.811 3.999 3.352 5.27 7.905 6.117 12.692 1.399 7.904-1.494 14.186-7.446 19.29-1.071.906-2.27 1.565-3.482 2.247-1.07.624-1.976.13-2.399-.517-.553-.882-.071-1.623 1.011-2.153 2.6-1.27 4.352-3.576 6.528-5.399 1.953-1.6 2.047-4.07 2.412-6.175.882-4.94.717-10.187-1.918-14.35-2.505-3.965-5.881-7.611-11.609-7.576-8.164.07-14.468 3.811-18.785 10.116-3.647 5.364-4.905 11.74-2.212 18.256.389.976.906 1.27 1.918 1.235 6.01-.294 11.762 1.105 17.161 3.576 2.176 1.011 3.929 2.564 5.07 5.234.906 2.176 2.047 4.458 2.952 6.705 2.341 5.893.624 11.586-1.587 17.079-.718 1.823-.883 2.705 1.035 3.94 3.799 2.47 4.775 7.81 2.964 12.692-.165.389.553.847.459 1.494-.259 1.788-1.141 3.13-3.118 4.294.353.717.906.647 1.588.482 3.447-.718 4.223.165 5.846 3.388 1.953 3.869 3.741 7.869 6.505 11.35 1.271 1.6 2.117 3.517 3.611 4.976 1.141 1.106 0 2.8-1.858 2.858-2.47.071-4.976.094-7.446 0-1.435-.035-1.952.459-1.917 1.882.035 3.153-.647 6.305-.682 9.399-.036 2.211.164 4.493-.095 6.728-.129 1.012.718.941 1.141 1.176 1.53.906 1.953 2.047 1.753 3.87-.294 2.694-.459 5.364-1.047 8.034-1.27 5.658-5.199 8.551-10.374 10.151-7.082 2.176-14.398 3.67-21.679 4.552-14.397 1.729-27.819 6.729-41.546 10.869-3.517 1.035-7.022 2.211-10.633 2.858-2.894.553-5.752 1.4-8.775 1.235-2.505-.164-4.387-.941-5.917-2.929-1.952-2.54-2.67-2.67-4.646-.094-1.106 1.435-1.952 1.365-3.317.683-3.282-1.694-5.822-4.329-8.516-6.764-2.541-2.305-2.823-2.435-4.293.718-.812 1.729-1.847 3.281-2.823 4.811-1.271 1.952-1.918 4.199-2.435 6.21-.553 2.153-1.035 4.552-.718 7.022.33 2.306 1.494 3.482 3.223 4.682 4.623 3.258 9.751 5.564 14.468 8.528 6.47 4.07 13.068 7.975 19.02 12.845 2.635 2.152 5.364 4.199 7.281 6.928 3.247 4.623 4.059 9.916 2.565 15.327-1.788 6.469-3.376 13.044-6.117 19.22-1.106 2.54-2.435 4.975-3.67 7.481-4.458 9.104-8.128 18.573-12.315 27.783-1.565 3.411-3.541 6.669-5.787 9.692-.353.483-.777 1.012-.906 1.6-.518 2.082-.718 4.035-2.988 5.399-1.4.847-1.953 3.059-2.858 4.658-1.271 2.212-1.753 4.752-3.376 6.799-.753.941-1.176 2.176-1.27 3.411-.095.977-.683 1.953 1.293 2.176 2.506.33 3.647 2.964 5.27 4.623 3.541 3.611 7.963 4.682 12.704 5.27 4.717.553 9.422.905 13.491 3.905 5.423 3.999 6.505 9.763 2.341 15.221 6.14-.13 12.163-.094 18.138-.624 2.823-.258 5.693-.517 8.516-.353 4.423.259 8.446-1.035 12.516-2.376 2.27-.752 4.611-1.27 6.728-2.564 2.858-1.753 4.093-4.787 5.881-7.316 2.012-2.894 4.2-5.399 7.705-6.576 3.905-1.305 9.163.906 10.821 4.682 1.271 2.835 1.435 5.764 1.106 8.751-.941 9.011-6.528 14.539-14.397 17.538-4.776 1.788-9.657 3.741-14.915 4.458.2 1.365 1.329 2.177 1.823 3.388 2.929 7.152-1.788 15.974-9.328 18.609-3.776 1.329-7.41 1.141-10.986.611-2.929-.423-5.787-1.882-7.317-4.975-.905-1.824-2.211-3.447-3.117-5.341-1.752-3.575-.976-6.74 1.4-9.657.294-.353.624-.682.906-1.07.07-.094 0-.294-.035-.388-5.788.294-11.504 1.011-17.327.611-7.081-.458-14.209-.682-21.325-.294-7.152.389-14.304 0-21.456.624-5.363.459-10.762.553-16.091.976-3.611.294-7.187 1.2-10.798.976-4.223-.223-8.351 1.235-12.609.589-.718-.13-1.882.094-1.071 1.623.847 1.588 1.294 3.387 1.847 5.105 1.694 5.305-1.235 8.657-5.07 11.551-2.176 1.623-4.74 2.634-6.951 4.293-2.6 1.917-9.105.518-11.869-2.153-.329-.329-.623-.776-1.012-.941-4.258-1.823-5.269-5.728-5.752-9.633-.494-3.905.165-7.705 3.153-10.739.094-.095.07-.295.094-.459-6.175-1.788-12.292-3.705-18.303-6.081-3.928-1.565-8.186-2.282-12.186-3.812-4.681-1.788-9.551-3.446-13.103-7.022-2.176-2.176-4.611-4.034-6.693-6.281-2.541-2.764-1.988-4.94.258-7.222 4.553-4.658 10.081-5.823 16.056-3.741 2.671.906 5.588 1.917 7.317 4.623.353.588.906-.33 1.435 0 1.823 1.011 3.799 1.694 5.564 2.964 1.011.718 2.634 1.329 3.999 1.564 4.587.812 8.94 2.435 13.586 3.059 5.587.776 11.045 2.376 16.644 3.317 1.858.294 3.87-.424 5.822-.588 4.388-.424 8.775-.2 13.104.482 1.847.294 3.446.2 5.27-.294-3.023-2.764-2.953-6.023-1.788-9.398 1.717-4.976 4.646-9.269 7.41-13.692 3.153-5.105 5.987-10.375 7.022-16.456.389-2.176 1.106-4.364 2.047-6.375.882-1.953-.294-2.412-1.588-2.565-2.952-.353-5.846-1.07-8.81-1.658-1.2-.224-2.211-.812-3.058-1.459-1.2-.882-1.918-2.141-.718-3.776 5.623-7.422 10.14-15.42 14.009-23.878 3.929-8.622 7.317-17.408 10.363-26.348 1.459-4.329 1.918-8.916 2.141-13.504a47.19 47.19 0 0 1 .165-2.246h.129l-.059-.059Zm20.15-176.192c-1.035-1.177-1.718-2.212-2.012-3.388-.882-3.811-3.705-6.246-6.634-7.999-6.893-4.093-14.362-5.27-22.172-2.47-5.493 1.988-11.022 3.905-16.55 5.858-6.34 2.282-12.869 3.317-19.315 1.012-12.292-4.459-24.666-4.423-37.217-1.659-5.716 1.27-11.468 1.753-17.197.165-4.716-1.306-9.492-1.823-14.303-1.306-3.964.423-8.128.459-10.469 4.976-3.67 7.151-8.81 13.174-15.28 18.02-6.669 4.976-11.15 11.68-14.985 18.867-3.188 6.023-1.952 12.069.624 17.891 2.27 5.176 5.787 9.304 11.15 11.716 3.741 1.658 7.67 2.211 11.61 1.988 3.023-.165 6.081-.424 9.14-1.33 3.776-1.105 7.704-1.599 11.445-2.987 2.694-1.012 5.164-2.412 7.763-3.541 4.905-2.211 10.045-3.834 14.856-6.375 9.422-4.94 19.021-4.623 28.572-.224 3.67 1.694 7.481 2.765 11.539 2.8 2.247 0 4.517.423 6.669-.482 1.753-.753 3.517 0 5.329-.424 5.787-1.4 10.692 1.953 15.926 3.353 3.482.941 6.952 1.364 10.399.646 5.14-1.046 9.821-6.469 10.245-11.774.165-1.882 1.07-4.293-1.823-5.305-.389-.13-.683-.847-.847-1.364-.882-2.8-1.659-5.658-.777-8.622.389-1.306-.164-1.624-1.176-1.953-2.541-.882-4.717-2.082-5.458-5.07-1.105-4.458-.517-7.057 2.565-8.398 2.082-.906 4.328-1.07 6.528-.07.482.223 1.141 1.034 1.588.223.588-1.012.753-2.176 1.588-3.153.905-1.035-.294-3.834 2.729-3.187.258.07.482-.165.329-.424-.812-1.458.682-1.564 1.27-1.917 1.718-1.035 3.647-1.788 5.399-2.8 2.694-1.564 5.623-1.364 8.905-1.329l.035.07.012-.034Zm-77.951 139.422c-.224 4.976 2.929 9.504 6.505 13.692 3.446 4.034 7.61 7.187 12.221 9.986 6.211 3.741 12.257 7.446 19.573 8.622 6.505 1.035 12.974 2.247 19.596 1.271 1.365-.2 2.271.458 2.6 2.14.647 3.412 0 6.764-.388 10.081-1.035 8.916-5.011 16.95-8.058 25.243-1.493 4.034-3.317 7.904-5.105 11.809-3.246 7.152-7.116 13.892-11.962 20.067-.906 1.177-.553 1.565.588 1.859 4.258 1.035 8.481 2.246 12.845 2.541 6.14.388 12.221.976 18.232 2.246 2.599.553 4.905-.388 7.246-.976 1.235-.294 1.07-2.341 1.693-3.541a28.256 28.256 0 0 1 1.624-2.799c2.411-3.67 4.422-7.552 6.175-11.551 3.411-7.81 6.47-15.809 10.434-23.325 4.222-8.034 7.022-16.492 9.527-25.114 2.141-7.422.294-13.797-5.422-18.808-6.799-5.952-14.562-10.539-22.232-15.221-4.587-2.799-9.422-5.14-13.974-8.104-3.352-2.176-4.975-4.882-4.646-8.681.2-2.012-.482-1.659-1.917-1.4-3.776.682-7.575 1.494-11.445 1.012-5.917-.753-11.61-2.376-17.197-4.423-5.846-2.117-11.245-4.94-15.668-9.398-1.341-1.341-2.533-1.243-3.576.294-.223.329-.459.588-.682.905-4.093 6.246-6.599 13.01-6.564 21.573h-.023Zm75.481-64.283c1.235-5.858 1.399-11.257-1.165-16.491-.459-.941-.811-.588-1.294-.294-2.046 1.27-4.328 1.882-6.728 1.988-4.129.165-7.481-1.565-10.339-4.423-.459-.459-.753-1.529-1.824-.753-3.928 2.929-8.48 3.447-13.197 3.388-.612 0-1.165-.165-1.753.682-3.246 4.682-7.669 8.328-11.374 12.586-5.952 6.834-12.645 12.857-19.597 18.644-3.317 2.764-6.857 5.199-10.469 7.646 2.671 3.74 6.176 6.54 9.105 9.892 4.199 4.811 8.516 9.563 14.268 12.527 1.105.588 1.952 2.247 2.376 2.118 2.564-.777 4.481.846 6.528 1.529 7.152 2.411 14.339 3.834 21.879 2.764 3.023-.424 5.916-.906 6.951-4.788.424-1.529.753-3.387 1.953-4.716 1.494-1.624 1.717-4.035 3.023-5.635 2.247-2.729 1.106-4.128-.906-6.151-3.705-3.647-6.399-8.164-9.234-12.492-2.987-4.553-4.905-9.563-5.363-15.068-.094-1.306.094-2.435 1.529-2.576 1.494-.13 1.623 1.176 1.658 2.282.094 3.74 1.4 7.151 3.059 10.374 5.787 11.292 14.432 20.173 24.113 28.172.612.517 1.07.882 2.141.2 3.576-2.212 5.881-5.493 8.187-8.822 2.27-3.259 3.411-6.928 4.352-10.763.388-1.6.2-2.211-.812-3.188-4.164-3.964-8.998-7.022-13.621-10.41-3.058-2.246-5.423-5.046-7.34-8.257-.682-1.141-.329-2.247.518-2.835 1.141-.776 1.846-.035 2.211 1.2.165.518.647.941 1.165 1.623v.047Zm-78.304 67.894c-4.423 6.34-7.611 13.468-12.61 19.42-1.917 2.282-3.705 5.176-6.563 5.917-5.235 1.329-10.657 1.752-16.092 1.106-4.716-.553-9.233-1.918-13.68-3.612-5.563-2.082-11.315-3.74-16.444-6.763-2.27-1.329-2.246-1.365-2.764 1.27-.753 3.647-1.623 7.293-3.446 10.54-2.435 4.364-5.07 8.622-7.999 12.656-1.53 2.117-2.082 4.752-4.352 6.47-1.788 1.399-1.365 1.658 1.07 2.434 4.129 1.33 8.352 2.082 12.48 3.353 7.505 2.282 14.95 4.658 22.597 6.505 10.986 2.67 22.137 4.658 33.182 6.998 2.376.518 4.846.718 6.893-.623 2.987-1.917 6.246-3.447 8.845-5.858 8.481-7.81 16.962-15.644 25.031-23.913 1.294-1.33 2.341-3.259 4.199-3.811 1.2-.353 1.035-1.141 1.294-1.824.33-.976-.553-1.141-1.105-1.435-4.035-2.082-7.964-4.364-11.834-6.704-8.775-5.305-15.244-12.457-18.655-22.185l-.035.036-.012.023Zm175.557-52.085c2.67-.459 3.541-2.282 4.129-4.328.588-2.141.905-4.423 3.282-5.529.846-.388.482-1.235.482-1.882.129-4.846.094-9.692.329-14.539.13-2.834.165-2.987-2.729-2.564-9.692 1.494-19.443 1.988-29.218 2.412-5.14.2-10.269 0-15.409.094-5.293.129-10.598-.518-15.892-.388-1.917.07-3.023-.389-3.964-1.953-1.364-2.282-2.987-4.458-4.352-6.728-1.988-3.353-5.14-5.788-6.893-9.269-.388-.753-1.035-1.071-1.693-.977-.777.095-.718.941-.624 1.565.459 3.611-.329 7.222-.294 10.833.035 6.152.682 12.292.329 18.479-.058 1.235.071 1.271-1.141 1.788-.517.224-.329.882-.2.941 1.659 1.012 1.165 2.376 1.365 3.964.482 4 .294 7.975.388 11.939.035 1.882.647 2.118 2.341 2.082 5.399-.2 10.786-.847 16.221-.847 6.269 0 12.55.847 18.82.059 4.811-.588 9.622-1.176 14.433-1.564 3.058-.224 5.622-.847 7.633-3.153.647-.752 1.271-1.529 1.918-2.282 1.788-2.082 3.705-4.034 6.14-5.469 1.717-1.012 3.152-.624 4.517.329 1.305.918 1.564 2.412 1.235 3.905-.224 1.012-.682 1.953-1.141 3.153l-.035-.071h.023Zm-1.953 199.318c0-2.047-.611-3.964-1.07-5.893-.329-1.435-1.823-1.917-2.823-2.8-.882 1.047-1.694.353-2.694.2-2.305-.353-4.422 0-6.081 2.176-1.329 1.73-2.564 3.612-3.446 5.435-2.212 4.493-6.246 6.046-10.34 7.516-2.858 1.047-6.175 1.07-8.845 2.411-7.246 3.612-14.95 2.377-22.49 2.929-3.906.294-7.87-.094-11.704 1.047-2.117.624-3.247-.2-3.411-2.341-.094-1.105-.459-1.305-1.529-1.399-2.823-.259-5.623.094-8.446-.224-2.4-.259-4.882-.259-7.246.071-7.634 1.105-15.279 1.658-22.984 1.564-1.976 0-4.035-.329-5.952-.2-6.469.494-12.939.094-19.408-.164-1.365-.059-.259-1.659-1.459-1.53-1.164.13-.517 1.859-1.752 1.882-2.471.036-4.682 1.365-7.281.977-2.212-.33-4.517-.165-6.764-.036-7.869.459-15.574-.494-23.243-2.046-3.776-.777-7.481-1.918-11.28-2.564-5.011-.847-9.657-2.706-13.88-5.305-4.482-2.765-8.81-5.635-14.268-5.729-2.012-.035-4.035.353-6.082.459-1.329.059-2.693 1.329-2.987 2.894-.33 1.658 1.105 2.564 2.117 3.517 3.505 3.352 8.222 4.552 12.48 6.504 1.717.777 3.447 1.788 5.293 2.153 5.27 1.011 10.01 3.411 14.915 5.364 3.906 1.529 7.634 3.411 11.834 4.069.423.059.976-.223.846.612-.07.518.389.812.647.388 1.036-1.882 2.376-.517 3.353-.2 1.305.459 3.023-.164 3.905 1.435 1.106-1.494 2.764-.682 3.929-.588 5.199.424 10.374.094 15.538.094 1.694 0 3.376.2 5.105.094 10.304-.458 20.538-1.917 30.853-2.411 1.494-.071 2.988.059 4.517-.07 4.352-.33 8.716-.13 13.069-.483 2.564-.223 5.105.094 7.634-.129 2.893-.259 5.846-.13 8.739-.2 5.846-.094 11.61 1.011 17.456.588 1.917-.129 3.929-.423 5.752-.035 1.329.294 2.399 1.235 3.446-.353 0-.035.294.094.424.094 5.693-.094 11.374-.259 17.067-.329 4.776-.071 9.493-.036 14.233-1.141 4.905-1.141 9.716-2.506 14.268-4.517 6.528-2.894 9.822-7.352 10.081-13.857l-.036.059v.012Zm20.479-231.489c-2.011-3.352-3.646-6.046-5.269-8.751-.2-.329-.483-.623-.812-.776-1.788-.977-3.317-3.094-3.317-4.388-.071-3.776-2.635-2.505-4.223-2.505s-3.246.094-4.87.2c-4.352.259-8.68.682-13.033.811-5.14.13-10.245.718-15.338.883-5.493.164-11.081.164-16.55.588-4.94.388-9.845.164-14.762.482-2.341.165-4.717 0-7.223 0 .647 1.658 1.859 2.435 2.729 3.482 2.694 3.281 5.141 6.728 7.117 10.48.517.977 1.176 1.494 2.47 1.623 7.316.683 14.633.812 21.973.777 5.01 0 10.01-.682 15.02-.682 7.611 0 15.115-.906 22.596-1.988 1.2-.165 2.694.482 3.576-.459.977-1.07 2.412-.882 2.929-.553 2.176 1.459 4.352-.094 7.023.753l-.036.035v-.012Zm-7.246 26.902c-.458-.589.483-1.988-.976-1.859-.976.071-2.411-.094-2.67 1.564-.882 5.788-4.846 8.622-9.975 10.34-.905.294-1.823.717-2.54-.165-.718-.847-.259-1.752.2-2.599.776-1.4 1.658-2.765 2.434-4.2.459-.776.683-1.858-.035-2.34-.647-.459-1.623.07-2.247.647-1.164 1.105-2.47 2.117-3.375 3.387-3.059 4.458-7.281 6.928-12.551 7.517-5.752.646-11.504 1.235-17.291 1.529-8.293.423-16.574-.624-24.866.094-4.353.353-8.74.329-13.104.494-.682 0-1.364-.13-1.588.905-1.106 4.882-3.799 8.881-7.187 12.457-1.106 1.176-1.27 2.047.071 3.188 1.435 1.235 2.435 3.223 4.846 2.505 1.658-.517 3.223.459 5.07-.164 8.774-2.894 17.843-4.788 26.524-7.999 4.164-1.529 8.552-2.541 12.845-3.776 4.129-1.2 8.481-1.529 12.551-3.023 1.917-.717 3.929-.423 5.822-.647 5.952-.776 11.963-1.588 17.68-3.517 1.917-.647 3.928-1.2 5.657-2.47 4.129-2.999 3.741-7.646 4.647-11.904l.07.036h-.012ZM212.08 97.902c5.105.482 8.552-1.047 11.081-7.023.2-.458.388-.94 0-1.27-.424-.33-.776 0-1.2.259-2.141 1.106-4.352 1.859-6.669.388-.777-.482-1.882-.906-1.494-1.988.353-1.011 1.4-1.305 2.541-.976.882.259 1.823.259 2.728.388 1.788.224 2.894-1.306 4.458-1.729.777-.2.259-1.753.165-2.54-.259-2.541.812-4.518 2.117-6.447.718-1.035.977-2.176 1.106-3.387.094-.847-.259-1.659-1.035-1.788-4.517-.718-6.469-3.94-7.869-7.775-.647-1.788-2.047-2.506-3.799-2.435-2.565.07-5.07.647-6.952 2.435-2.929 2.729-6.634 4.916-6.505 9.822.035 1.752-2.082 2.599-3.705 1.729-.941-.518-1.823-1.2-2.729-1.788-1.27-.812-2.6-.33-3.705.094-1.106.423-1.141 1.752-1.012 2.893.2 1.824.623 3.482 2.435 4.423 3.517 1.823 5.564 4.129 4.329 8.657-.777 2.835 1.199 5.176 4.164 6.211 3.705 1.306 7.634 1.459 11.48 1.917l.094-.094-.024.024Zm77.234-7.093c2.694.2 5.564-.07 8.351-.753 4.258-1.047 7.775-3.446 10.528-6.728 6.34-7.481 10.469-15.75 7.116-25.866-1.27-3.811-2.764-7.705-7.057-9.434-5.917-2.376-11.998-3.575-18.303-2.082-7.999 1.882-13.809 6.576-16.903 14.35-.259.648-.306.306-.706 2.342-.47 1.929-.317 1.387-.517 2.822-.294 1.859-.341 3.259-.341 4.894 0 1.635.223 3.223.494 4.81 1.529 8.658 6.634 16.821 17.326 15.68v-.035h.012ZM28.948 227.291c-.388 1.788 1.165 1.435 2.047 1.623 4.458 1.106 6.599 3.223 7.116 7.446.094.776.424 1.2 1.035 1.27 4.717.612 8.516 3.352 12.61 5.399.976.494 1.105.259 1.588-.611 1.858-3.223 4.187-6.117 6.046-9.34 1.364-2.376 3.023-4.587 4.258-7.058.906-1.788.517-2.176-1.27-2.834-7.905-2.835-16.092-5.176-21.914-11.81-.424-.494-.941-.882-1.624-.682-3.023.847-5.975 2.376-7.116 5.175-1.459 3.576-2.8 7.387-2.823 11.457l.035-.035h.012ZM176.746 337.93c2.693.2 5.199.482 7.704.588 5.787.224 11.504 1.365 17.362.518 1.564-.224 1.694-.753 1.27-1.859-.553-1.4-.647-2.764-.459-4.258.294-2.152 1.953-3.834 1.753-6.152-.259-2.67.717-5.046 2.082-7.351 1.658-2.835 2.952-5.858 4.517-8.975-2.694.517-5.105.553-7.481-.388-1.035-.424-2.176-.812-3.282-.906-2.858-.259-5.787-.165-8.646-.518-2.046-.258-2.764.33-3.411 2.306-1.823 5.728-2.211 11.845-5.787 17.079-2.117 3.058-3.576 6.599-5.658 9.928h.036v-.012ZM287.197 32.666c-1.459.977-1.624 2.67-3.117 3.153-.906.294-1.624.223-1.918-.647-.294-.812 2.47-5.14 3.317-5.046 1.823.164 2.306-1.07 2.67-2.341.847-2.988 2.376-5.623 4.035-8.199.482-.753.459-1.105.035-1.788-1.752-2.893-3.67-5.728-5.069-8.786-1.071-2.376-2.376-2.306-4.388-1.565-6.505 2.376-9.622 7.575-11.704 13.727-.094.294-.258.459 0 .941 3.282 6.47 6.399 13.045 9.693 19.55 1.717 3.481 1.952 3.481 5.422 1.988.494-.2 1.012-.424 1.529-.483 1.33-.13 1.624-.482 1.071-1.882-1.071-2.6-1.882-5.34-1.529-8.586l-.036-.036h-.011Zm-6.729 14.092c-.258-.482-.423-.941-.717-1.27-1.106-1.27-1.847-2.706-2.6-4.2-3.093-6.21-6.399-12.292-9.139-18.667-.2-.482-.259-1.047-1.012-1.047-2.305 0-4.587-.223-6.893.353-4.552 1.141-8.316 3.835-12.386 5.952-.623.33-2.341 1.623-1.658 3.317 1.364 3.411 2.693 6.87 4.058 10.28.294.718.647.883 1.435.46 3.152-1.824 6.246-3.483 10.269-3.13 1.717.165 3.87 1.036 5.716-.223.13-.094.588.13.812.33 3.317 2.67 7.375 4.551 9.363 8.68.259.518.753.976 1.235.259.388-.588 1.529-.07 1.529-1.012l-.035-.094.023.012Zm-11.927 28.948c.459-1.177.094-2.176.129-3.153 0-.588-.294-6.022-.776-.623-1.894 1.835-3.093.847-3.352-1.73-.259-.975-.753-.752-1.529-.776-3.059-.2-4.905 2.082-7.281 3.282-.612.294-1.071 1.047-1.824.518-.611-.459-.717-1.2-.588-1.918.13-.588.259-1.234.588-1.752 1.141-1.753 0-3.388-.164-5.07-.059-.517-.483-.905-1.165-.388-1.529 1.141-3.058.388-3.67-.847-.811-1.6.812-2.211 2.047-2.729.941-.388 1.529-.847 1.494-2.011 0-1.141-.482-1.6-1.529-1.917-1.071-.33-2.412-.812-1.753-2.412.553-1.4 1.659-1.364 2.929-.812.517.224 1.235 1.106 1.694 0 .353-.882 2.046-1.493.647-2.834-.553-.518-.553-1.235-.683-1.918-.164-.882.259-1.364.906-1.623.588-.223 1.165-.2 1.494.624.224.552.718.976 1.07 1.494.389.552.718 1.4 1.588.94.741-.388 1.977-.164 2.047-1.529 0-.458.224-.882.353-1.305.294-.883.482-1.953 1.788-1.624 1.235.294 1.529 1.177 1.2 2.341-.2.682-.33 1.435.588 1.753.776.259 1.329-.165 1.788-.753.2-.259.388-.482.553-.753.494-.811 1.105-1.788 2.117-1.105.882.588 1.306 1.693.647 2.834-.588 1.035-1.435 1.953-.353 3.317 1.011 1.306 2.047.26 3.023.33 1.4.094 3.376-3.023 2.729-4.035-2.859-4.328-6.728-7.057-12.022-7.74-7.634-1.011-15.891 6.576-17.102 13.269-.553 3.152-.353 6.245.223 9.233 1.659 8.622 7.669 13.14 16.444 11.94 1.882-.26 3.705-1.177 5.752-.33l-.07-.2.023.012Zm-31.594 279.056c1.141.036 2.246.13 3.246-.647 2.506-1.952 2.635-6.34.259-8.586-.682-.647-.882.07-1.27.329-2.565 1.6-5.164 2.858-8.223 3.517-5.493 1.141-11.056 1.6-16.608 2.211-1.694.2-3.647 1.753-5.105-.552 0-.036-.518.07-.588.2-.883 1.823-2.506.905-3.612.752-3.246-.482-6.469-.329-9.692-.352-7.61 0-15.209.552-22.725-1.047-1.718-.353-1.435.458-1.2 1.364.553 2.282 3.446 4.517 5.787 4.493 13.621-.258 27.278.553 40.828-1.529 6.305-.941 12.61-.07 18.914-.094l-.035-.035.024-.024Zm23.337-258.625c.258-1.658-1.106-.776-1.694-1.07-1.4-.623-2.858.2-4.293-.165-.777-.2-1.588-.353-1.824-1.235-.2-.847.33-1.435 1.035-1.917 1.141-.776 2.212-1.73 3.412-2.376 1.235-.682 1.364-1.6.882-2.635-.33-.682-.2-1.364-.388-2.011-.389-1.141-.389-2.306.647-2.894 1.07-.623 1.787.482 2.47 1.141 1.399 1.306 2.67 1.953 4.164.094.517-.647 1.294-1.07 1.976-1.6.753-.552 1.435-.623 2.305-.094.883.518.847 1.106.753 1.953a4.99 4.99 0 0 1-1.106 2.705c-1.846 2.247-.458 3.682 1.036 5.176.882.847 2.082 1.459 2.305 2.835.259 1.729-1.176 1.917-2.247 2.411-.129.07-1.693.224-1.435-.259-2.317-.388-3.905.47-4.752 2.564-.129.295-.259.553-.388.847-.423.883-.717 1.306.812 1.4 3.246.259 6.375-.2 9.551-.647 1.529-.2 2.541-.647 3.152-1.882.977-1.952 1.624-4 1.588-6.21 0-.553-.035-1.012-.611-1.365-5.164-3.388-7.834-8.293-8.646-14.574-1.07 2.835-3.646 2.082-5.493 2.835-3.188 1.27-6.564-.847-9.951.623-2.859 1.27-4.482 2.965-3.929 6.023.329 1.823 1.07 3.576 1.165 5.399.164 2.8 2.764 4.917 2.011 7.87-.094.329.165.752.459.681 2.599-.682 4.846 1.729 7.704.847-1.529-.847-.906-3.117-.717-4.422l.047-.048Zm51.167 1.73c.906.07 1.882.458 2.729-.294 3.67-3.259 4.776-8.681 2.67-13.116-.294-.623-.588-1.27-.882-1.882-.329-.682-.647-1.658-1.435-1.623-.459 0-.976.847-1.364 1.4-1.883 2.6-4.223 4.681-6.693 6.763-2.859 2.435-6.117 3.835-9.622 4.364-2.6.388-5.293 1.141-8.058-.035-1.493-.647-3.352-.977-5.105-.682-1.141.2-2.764.329-2.693 1.658.094 1.953-1.071 3.87-.188 5.787.423.883 1.235.33 1.846.094 4.646-1.529 9.493-1.4 14.304-1.529 1.035 0 1.788 1.012 2.764.624 3.799-1.6 7.893-.647 11.762-1.53h-.035Zm-105.746 17.632c1.329-.624 3.023-.094 4.611-.718 1.659-.623 2.506-1.035 1.988-3.187-.647-2.765-.329-5.858.612-8.423.776-2.152-.259-1.882-1.365-2.046-2.988-.424-6.046-.553-8.998-1.2-1.624-.353-2.082.07-2.118 1.494-.094 2.599-1.105 4.881-2.399 7.093-.459.776-1.365 1.599-1.071 2.564.494 1.564 2.118 2.435 3.247 3.317 1.27 1.012 3.505.753 5.493 1.07v.036Zm13.68 14.115c-.882 1.823-.2 3.834-.882 5.305-.976 2.117.223 2.858 1.4 3.776 3.246 2.564 6.563 5.105 10.268 7.057.518.259 1.2.353 1.365 1.106.482 2.176 2.47 2.894 3.999 4.07 1.529 1.176 1.753 0 1.788-1.012.035-3.54-.035-7.093-.129-10.669 0-.364-.036-1.105-.624-1.07-1.235.094-1.2-.623-1.105-1.458.094-.883-.847-1.33-1.106-1.2-.753.388-1.823-.753-2.082.129-.847 2.635-2.141.388-3.188.353-.353 0-.753-.647-1.305-.847-3.153-1.141-5.846-2.988-8.422-5.634v.094h.023ZM23.349 199.613c-2.211-.223-6.34 4-6.14 6.599.2 2.764-.682 5.14-1.988 7.387-1.364 2.376-2.6 4.811-3.094 7.446-1.305 7.516-4.034 14.644-5.493 22.125-.905 4.717-1.882 9.363-1.752 14.186.035 1.882.717 3.023 2.764 3.352-.294-1.858-.623-3.575-.459-5.434.353-3.87 1.07-7.681 1.106-11.586.035-2.47.223-5.011 1.458-7.222 2.67-4.917 3.706-10.375 5.564-15.586 1.07-2.964 1.012-6.211 2.564-8.975 1.27-2.211 1.883-4.681 2.435-7.093.483-2.117 1.459-3.775 3.023-5.175v-.035l.012.011Zm214.374-81.432c-1.729-.459-1.364-1.882-1.27-3.023.258-2.859-1.012-5.952 1.141-8.587.329-.424.423-1.176-.294-1.623-.483 1.141-2.212.423-2.506 1.399-.459 1.494-1.788 1.788-2.729 2.635-1.305 1.177-4.07.977-4.164 2.835-.094 1.882 2.306 2.929 3.517 4.423 1.165 1.458 2.929 2.435 4.941 2.635.552.07 1.105 0 1.364-.718v.035-.011Zm31.3 259.236c-.552.647-1.141 1.235-1.588 1.882-1.987 2.764-1.293 4.494 1.882 5.599 1.659.588 3.153-.329 4.741-.035 2.011.353 2.564-.882 2.635-2.564.07-1.306-.612-2.341-1.33-3.388-.882-1.235-1.823-1.494-2.693-.165-.777 1.141-1.4.589-2.082.036-.553-.459-1.035-.941-1.529-1.4l-.036.035Zm-120.955 6.54c0-2.411-3.799-4.846-5.975-3.811-.294.165-.624.424-.388.682 1.988 2.118-.389 2.506-1.365 3.447-1.2 1.176-1.141 3.352.2 4.129 3.023 1.729 7.505-.906 7.505-4.459h.035l-.012.012Zm2.859-7.61c3.117 3.999 1.564 8.234 1.105 12.456 4.258-5.469 3.835-11.162-1.105-12.456Zm113.556-316.65c0-1.106-1.717-3.223-2.529-2.858-1.012.458-2.435.811-2.635 2.281-.094.753 2.729 3.682 3.376 3.447 1.2-.482 1.753-1.53 1.788-2.858v-.012Zm16.679 319.59c.589-2.47 1.012-4.752-.129-6.41-.847-1.2-2.635-.259-4.093.482 1.752 1.694 3.317 3.317 4.222 5.917v.011Z" fill="#010101"/></g><defs><linearGradient id="b" x1="75.246" y1="337.316" x2="314.615" y2="337.316" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="c" x1="240.452" y1=".012" x2="332.577" y2=".012" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h336.411v400H0z"/></clipPath></defs></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/mr-mobilecrosspromo.svg b/browser/components/newtab/data/content/assets/mr-mobilecrosspromo.svg
new file mode 100644
index 0000000000..d613d4bdca
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mr-mobilecrosspromo.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg width="329" height="400" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path d="m23.505 208.196-4.355-6.762 4.355-3.862 9.18 1.936 9.67 4.344-2.899-8.698-.963-4.836h7.736l6.28 4.836 2.899-1.444.481-5.318 2.418-3.862 3.381 3.862 5.799 4.836 3.862-5.798 3.38-3.863 7.254-2.899 2.418 2.899 3.862 2.9 2.418-3.863 8.217-1.936 1.444 1.936-1.444 7.736-2.418 7.242 7.254-4.343 10.634-.963-.963 8.217-3.862 7.735-11.597 11.597 9.179 10.624.963 9.66-13.534-2.417v-2.418h-3.862l-6.28-2.9-.963 12.561-3.862 10.623-9.672-7.735v-8.698l-9.671 7.243-2.9-11.116-7.253 4.836-15.952 6.28 4.354-14.015 5.8-10.634-5.8-1.937-6.761-5.799.963-2.417-9.18-3.381-.01.011Z" fill="url(#b)"/><path d="m139.79 298.2 4.632-6.173 5.146-1.027 8.228 4.632 16.465 2.568 16.979 2.054 16.465 4.633 9.254 8.227 6.173 7.714 1.027 9.254 2.568-3.092 5.659-2.054 2.568 2.054 1.027 6.687-3.595 6.173-2.054 10.292-9.254 11.833-6.173 1.027v-5.66l-11.833 6.687v-6.687l5.66-4.632-1.027-2.568 2.567-4.633-8.227-5.659-3.081 11.833-4.633 5.659-18.005 12.346-2.054-2.054 2.054-5.659-11.319 2.054-7.201-1.027-1.027-3.606 3.606-2.054 10.805-3.081-3.594-4.119 3.594-3.595 12.347 1.541 5.659-8.227-8.741 2.567-9.254-2.567-10.806-6.174 4.633 9.779-4.633 3.092-8.227-1.027-15.941 7.2-3.081-2.568 3.081-3.594-1.54-4.119H128l6.687-2.568 13.373-1.541 8.741-6.686-7.2-8.741-18.006-14.4v-5.66l8.227-4.632-.032-.022Z" fill="url(#c)"/><path d="m183.01 41.256-1.54-3.766 4.868-3.135 3.134 4.333-1.112 2.654-5.35-.086Z" fill="url(#d)"/><path d="m186.477 25.795-3.702-2.739-1.07-.021 3.274-3.691 4.814.075 1.519 5.37-4.835.995v.011Z" fill="url(#e)"/><path d="m170.515 20.178-3.681-3.809h-.535l4.355-4.215 6.43-.963-.129 7.49-6.44 1.497Z" fill="url(#f)"/><path d="m163.796 38.796 2.567 6.462-6.462 2.567-.941-8.034 1.658-3.178 3.178 2.194v-.011Z" fill="url(#g)"/><path d="m150.893 42.335 4.184 5.948-3.777 2.076-3.199-.589.096-5.884 2.696-1.562v.01Z" fill="url(#h)"/><path d="m287.012 235.914-9.212-4.034v-2.3l3.456-1.722-2.3-7.489 10.934 4.033 1.722-9.789 5.756 9.789 4.023-5.756 5.178-6.334h3.456l-7.479 10.945h7.479l5.755 3.456-9.211 8.056-9.212 1.155h-10.356l.011-.01Z" fill="#F37783"/><path d="M292.265 220.002c.62-2.824.374-5.628 2.621-7.992 2.354 1.551 2.6 4.461 4.44 6.644 3.156-3.691 6.045-7.66 10.474-9.886 1.69-.845 3.595-2.428 5.36-.813 1.669 1.53-.235 3.253-.663 4.868-.225.835-.642 1.701-1.209 2.354-2.643 3.06-1.905 3.969 1.925 5.349 4.13 1.487 7.639 4.708 11.598 6.954 3.616 2.065 2.343 7.874-2.054 10.603-6.131 3.808-13.031 5.467-20.082 6.504-3.487.514-6.997.803-11.041 1.263 3.274 4.279 7.885 6.697 9.79 11.779 4.279 11.405 1.829 21.804-7.875 29.122-12.72 9.586-27.27 12.217-42.762 10.837-7.478-.663-14.646-2.599-21.258-6.301-4.922-2.75-8.805-6.473-11.287-11.651-1.637-3.423-1.466-5.67 2.45-7.564 8.387-4.044 16.54-8.559 24.681-12.838-5.948 0-11.886.15-17.813-.075-2.632-.096-6.43.899-7.264-2.632-.738-3.145 1.048-6.045 3.905-8.099 9.104-6.547 19.643-8.666 30.416-10.078 1.391-.182 2.814-.182 4.247-.267-1.904-8.121-1.262-9.33 6.88-11.459 3.915-1.027 7.97-1.519 11.95-2.332 1.241-.257 3.434 0 2.803-2.161-1.969-6.815 2.6-3.852 5.221-3.552 1.38.161 2.696.813 4.525 1.402l.022.021Zm-68.161 36.365c10.752-.728 21.504-1.488 32.267-2.14 1.615-.096 4.098-1.209 4.633 1.059.492 2.054-2.097 2.557-3.574 3.306-9.939 5.039-19.996 9.821-29.838 15.031-2.119 1.124-6.484.129-6.013 4.087.321 2.686 2.696 4.868 4.996 6.666 3.242 2.535 6.698 4.707 10.571 6.034 15.598 5.349 31.079 4.782 46.025-2.14 8.687-4.023 16.048-9.736 19.3-19.45.589-1.755 1.316-3.21.268-4.975-3.755-6.323-8.163-11.843-14.903-15.438-12.443-6.633-25.431-6.665-38.794-4.322-9.361 1.647-17.877 5.06-24.949 12.26l.011.022Zm64.202-13.438c8.966-1.102 17.332-1.262 25.367-3.595 4.076-1.187 8.067-2.664 11.351-5.477 1.134-.974 2.803-2.151.653-3.766-2.204-1.659-5.221-3.221-7.297-1.562-5.67 4.525-12.132 5.627-18.968 6.783-7.04 1.187-13.994.941-19.215-3.392-4.74-3.937-8.859-3.231-13.534-1.733-1.958.631-5.478.385-5.018 3.541.439 3.028 3.221 4.472 6.355 4.537 6.077.139 11.887 1.54 17.525 3.733 1.145.45 2.332.781 2.771.931h.01Zm14.914-19.086c1.733-4.419 6.591-6.505 7.521-11.865-3.958 2.653-5.841 6.184-8.558 8.912-2.001 2.001-3.713 2.921-4.569-.963-.192-.888-.417-2.075-1.605-2.493-.802 2.268-1.604 4.526-2.417 6.794-2.889-1.412-5.125-3.68-8.121-2.867-1.198 3.487 6.633 5.285 1.188 9.029 6.408 4.012 13.17 2.964 19.931.963 3.017-.898 6.302-1.369 8.645-3.755 1.07-1.091 2.632-2.504 1.958-3.959-.407-.877-2.45-1.134-3.809-1.39-3.381-.621-6.441 1.39-10.164 1.583v.011ZM89.858 183.125v-4.953c1.85 2.589 3.423 2.503 5.67 1.562 7.628-3.21 9.575-1.519 8.43 6.783-.235 1.712-.502 3.413-.802 5.445 3.702-.888 6.911-1.69 10.271-1.733 2.557-.032 5.017-.481 5.681 3.103.374 2.054 2.589 1.444 3.98 1.947 7.585 2.717 13.245 7.446 15.812 15.278 2.119 6.429 1.423 7.435-5.06 8.109-1.562.161-3.135.214-5.232.353 2.29 2.108 4.868 1.798 6.976 2.696 1.369.578 3.573-.385 4.065 1.755.524 2.3-1.305 3.509-2.824 4.718-6.944 5.531-13.759 6.933-24.158 4.996-1.187 1.091-.759 2.579.075 3.242 3.413 2.707 2.974 6.291 2.257 9.725-.609 2.921.268 3.798 3.071 3.916 3.028.117 5.852.898 8.377 2.888 4.344 3.424 4.365 5.285-.332 8.292-1.016.652-2.065 1.241-3.562 2.139 1.23.332 1.872.514 2.514.696 3.669 1.038 7.842 2.161 7.296 6.911-.503 4.419-4.675 5.456-8.441 5.874-9.211 1.027-18.177.941-24.617-7.393-1.081-1.402-2.397-2.011-4.173-1.551-6.12 1.583-12.25 3.145-19.011 4.878 10.623 2.75 19.664 6.74 22.06 18.145 1.67 7.949-3.402 12.56-8.901 17.332-9.65 8.366-18.444 5.552-27.25-1.07-1.294 1.637.022 2.514.407 3.498 1.423 3.681 3.145 7.5-.085 10.934-3.338 3.563-6.869 6.034-12.635 4.365-4.783-1.39-10.186-.353-15.053-2.396-7.265-3.06-13.256-7.607-16.605-14.903-3.413-7.447-.16-16.69 7.586-22.339 6.9-5.028 14.485-8.837 22.51-12.111-6.987-1.048-13.93-1.573-20.724-3.06-5.905-1.294-11.618-2.995-16.722-6.451-3.316-2.247-5.05-5.552-6.173-9.072-.952-2.985.428-6.441 3.22-7.072 4.986-1.123 7.04-5.617 12.261-8.099-6.451-1.605-11.672-3.092-16.979-4.172-3.819-.771-3.52-2.568-1.99-5.2 4.89-8.452 12.315-14.507 19.632-20.595 1.99-1.658 3.938-2.289 1.017-4.868-1.68-1.487-3.381-3.669-2.054-6.119 1.401-2.579 4.097-3.103 6.911-3.092 5.21.021 9.907 2.225 14.807 3.616.792-4.183-3.852-9.233 1.626-12.047 4.322-2.225 10.581.064 12.004 3.37 2.503-7.325 7.446-7.963 14.828-1.915 9.468-11.404 14.336-13.212 20.028-6.376l.01.021Zm-27.153 34.257c-3.381-.567-6.355-2.172-9.255-3.819-5.167-2.942-10.11-2.14-15.406.364 5.018 5.456 10.827 7.499 17.781 5.788 2.386-.589 4.665-1.584 6.997-2.397-.17 2.118 2.686 3.146 1.316 6.12-2.9 6.269-2.61 12.999-.749 19.664 6.74-2.632 11.705-10.838 10.838-17.728-.556-4.354-1.894-7.842-7.371-7.253-1.38.149-2.857.139-4.162-.739h.01Zm-4.451 21.761c-5.734 2.568-10.688 6.131-16.487 7.735-2.054.567-4.193 2.782-6.333.61-2.193-2.225-.556-4.75.235-6.986 2.13-6.002 5.05-11.64 8.987-16.754-4.9-2.889-9.746-5.135-12.496-10.581-1.241-2.471-5.585-3.466-7.617-.192-1.83 2.931-4.408 4.375-7.008 6.13-3.584 2.418-6.29 5.488-8.003 9.639-1.337 3.231-.342 4.504 2.536 5.467a45.476 45.476 0 0 0 9.319 2.076c1.68.192 3.733.406 4.311 2.514.6 2.161-1.06 3.145-2.546 4.172-3.948 2.739-7.586 5.853-10.956 9.276-1.176 1.198-1.465 2.065-1.22 4.226.61 5.456 4.505 7.04 8.175 8.163 24.756 7.628 49.534 6.398 74.227-.631 1.326-.375 2.29-.824 2.524-2.29.942-6.055 5.606-8.312 10.571-9.949 4.418-1.455 4.814-5.35 4.579-8.559-.257-3.563-3.659-.771-5.564-1.327-.663-.192-1.401-.139-2.107-.235-2.6-.375-6.815-.535-6.387-3.253.502-3.177 4.087-.449 6.323-.502 1.861-.043 5.253 1.102 4.472-2.354-1.338-5.938-4.023-11.373-10.079-14.101 1.338 2.471 3.178 4.59 4.622 6.954 2.921 4.772 1.723 7.339-3.84 7.757-3.103.235-6.27-.418-9.565-.685-.364 3.017-.589 6.184-1.177 9.265-.6 3.124-1.433 6.227-2.418 9.254-1.166 3.574-3.306 4.408-6.344 1.755-2.696-2.354-5.606-4.761-6.601-8.195-1.124-3.873-2.472-3.167-5.018-1.412-4.771 3.273-6.815 2.428-8.27-3.06-.31-1.166-.492-2.365-.813-3.927h-.032Zm-9.137 82.433c1.06-.085 2.108-.235 3.167-.257 7.553-.149 9.169-2.621 6.312-9.65-1.765-4.343-4.846-7.831-7.414-11.651-.824-1.23-2.717-2.332-1.187-4.086 1.626-1.862 2.856.096 4.076.834 6.044 3.67 11.266 8.623 18.006 11.212 8.676 3.338 21.097-4.162 22.156-13.491.803-7.029-4.044-13.234-13.758-15.802-20.338-5.37-38.686-.577-54.552 12.903-7.307 6.205-6.805 15.395.289 21.879 6.472 5.916 14.058 8.783 22.895 8.088l.01.021Zm83.642-95.999c-3.905-1.508-7.35-2.45-10.164-4.664-1.144-.899-2.289-1.798-1.936-3.488.364-1.765 1.958-2.033 3.295-2.193 2.996-.342 6.013-.503 9.03-.567 2.043-.043 3.167-.589 2.204-2.803-2.664-6.163-7.115-10.485-13.448-12.71-1.488-.524-3.392-.888-3.873 1.38-1.498 7.05-6.409 11.704-11.212 16.454-.888.878-1.381 1.402-.45 3.017 6.74 11.555 14.294 13.406 26.554 5.564v.01Zm-7.179 31.508c-3.862-2.803-7.564-4.023-11.65-2.279-1.445.621-2.675.631-4.055.3-5.136-1.231-10.849 4.386-9.586 9.372 1.262 4.985 4.868 6.89 9.522 7.681 5.927 1.006 11.971 2.579 17.535-.759 2.278-1.37-.075-2.311-1.252-2.643-2.707-.759-5.488-1.241-8.238-1.861-1.252-.279-2.45-.771-2.696-2.172-.257-1.445.824-2.311 1.883-2.921 2.696-1.573 5.456-3.017 8.548-4.707l-.011-.011Zm-64.148-69.584c-3.499 2.739.802 7.2-2.515 9.747 1.338 1.69 3.66 1.219 5.232 2.364 1.573 1.134 3.477 2.065 4.536 3.573 1.883 2.686 2.686 2.172 4.986.097 6.301-5.649 13.587-9.34 22.542-8.559 3.049.267 2.546-3.049 2.867-4.59.481-2.332 2.375-4.975.182-7.297-.321-.342-1.937.396-2.878.792-3.017 1.273-4.14 4.194-5.83 6.655-1.007 1.476-1.99 4.065-4.398 2.642-1.894-1.123-.407-2.92.45-4.151 1.486-2.118-.407-3.199-1.199-4.589-.995-1.755-2.46-.942-3.712-.407-4.034 1.744-6.27 4.397-4.248 9.522 1.284-1.808 2.3-3.402 3.499-4.857.535-.653 1.433-1.188 2.364-.749.364.171.824.941.717 1.219-1.134 2.728-1.209 5.799-4.857 7.372-2.086.898-5.713-1.498-6.505 2.706-.128.674-1.594.182-2.065-.716-2.236-4.269-7.253-6.088-9.158-10.763l-.01-.011Zm-2.44 35.616c-4.76 1.84-10.42.053-13.512 6.002-2.332 4.482-5.2 8.591-6.056 14.817 8.88-5.456 21.344-5.809 19.568-20.83v.011Zm22.542 28.993c4.804-12.763 4.044-19.161-2.76-23.173-.717 2.182-1.252 4.408-2.172 6.462-3.177 7.146-2.129 11.094 4.932 16.7v.011Zm14.08-47.898c3.23.428 5.755-1.187 8.516-1.54 5.36-.685 2.942 3.926 4.247 6.397 3.071-2.086 4.183-5.22 5.242-8.355.664-1.958 1.958-4.59.706-5.906-1.583-1.669-4.3-.171-6.547.129-3.22.428-4.868 4.482-7.585 4.3-4.044-.267-4.387 1.68-4.58 4.965v.01Zm-15.32 19.258c5.092 6.023 10.666 9.19 18.465 8.002-1.22-4.985-5.403-7.617-8.174-10.966-.856-1.027-6.258 1.723-10.292 2.964Zm-27.475-22.478c1.573 6.13 5.467 9.276 9.971 11.854 1.455.835 3.178 2.45 4.772.877 1.647-1.615.61-3.883-.246-5.477-2.846-5.318-8.1-6.377-14.508-7.254h.011Zm-28.533-.128c2.91 7.638 13.726 10.506 21.376 5.467-7.05-2.878-13.566-6.323-21.376-5.467Zm68.61 17.759c3.787-1.102 6.141-3.231 8.302-5.52 1.295-1.37 3.231-3.156 2.161-5.028-1.059-1.851-3.156-.075-4.803.074-1.402.129-2.814.482-4.183-.203-.75-.374-1.37-.128-1.809.535-.577.845.129 1.348.675 1.68 4.108 2.546 1.208 5.103-.343 8.473v-.011Zm-12.303-15.62c-4.74 2.632-7.265 5.938-7.917 11.095 6.73-2.418 8.462-4.836 7.917-11.095Zm-31.572.995c-.78-3.819-1.091-7.457 5.028-7.649-3.359-2.375-6.333-5.339-8.666-3.713-2.236 1.562.354 5.146 1.028 7.778.31 1.22.513 2.835 2.61 3.584Zm40.997 9.779c-4.226 2.311-9.982-.214-14.229 4.718 6.27 1.434 10.634-.428 14.23-4.718Zm2.172-14.861c-7.318 1.477-8.41 3.317-5.841 9.501 3.477-2.236 5.317-5.307 5.841-9.501Z" fill="#000"/><path d="M242.078 349.834c-1.551-4.6-4.515-8.366-7.896-11.747-.545-.588-.492-.974-.16-1.444 4.707-6.452.973-18.22-8.431-13.866-1.626.792-2.075.653-1.915-1.144.182-1.937-1.102-3.36-1.851-4.579-17.791-24.244-32.406-17.685-57.259-22.756-3.177-1.552-6.74-3.927-10.345-5.232-4.419-.631-10.624-1.123-12.272 4.312-2.321 2.91-6.74 2.546-9.179 5.456.16 1.038-.289 1.551-1.327 1.626-.182.043-.31.118-.224.342.717.878-.835 2.183.513 2.868.407.203.717.406.952-.289.139-.546.546-.043.674.139.428.545.696.182.995-.118 1.466-2.482 3.852-3.702 6.43-4.483 3.884-.813 4.258-5.114 7.532-6.536.342 1.08 1.444 1.529 2.215 2.321 1.102-.524.717.61 1.037.974 1.916 1.851 5.029 2.589 7.147 3.969 2.279.385 4.558.749 6.837 1.145-.065.064-.14.139-.204.182 12.881 4.557 30.01-1.669 39.061 11.501 2.546 2.91 5.499 4.643 9.468 4.033 2.91-.856 3.445 2.642 5.146 4.194.064-.118.064-.268.064-.428.428 0 .289.567.632.652-.043.792-1.102.856-.92-.021-2.996-1.583-8.57 3.252-6.634 6.901.589-.546 1.177-.065 1.755-.043 1.466.385 1.305-.856 1.626-1.626.771-1.584 2.707-1.348 3.723-2.589.225.363.182.77.343 1.059.042-.161.064-.343.085-.492.428 1.957-1.754 4.258.546 5.552 1.808 1.198 3.498-1.177 4.868-2.097 1.423-1.102 3.049-1.262 4.664-1.423 3.766-1.016 2.343 9.897-.813 8.046-.246-.204-.428-.225-.492.203-.182 1.262-.877 2.386-.813 3.745-1.712 3.926-7.96 6.74-12.218 5.231-2.46-1.016-1.936-4.354-2.439-6.515-.043-2.75-4.087-2.643-4.055.064.043 1.038.118 2.075.182 3.135.246.042.514-.043.792 0-.022-.139.064-.065.064.021.118.021.203.086.321.225-2.011.385-3.83-1.53-5.884-1.648-1.648-.289-1.263-1.305-.995-2.215 1.401-5.146-.696-11.115-5.093-13.983-.77.567-.995.225-.952-.567l-.064.022c-.471-.246-1.017-.428-1.284-.952-6.762-2.643-13.983.877-20.413-1.284.407 1.444-.385 1.262-1.262.92-2.162.289-5.211-.631-6.987.267-.117.974-.77.974-1.326.835-1.53-.343-3.071.139-4.622-.118-4.579-.856-8.752-2.867-12.967-4.622-.717-.16-1.305-.952-2.182-.385-.182.086-.139-.342-.161-.513-2.418-3.702-6.761-5.211-9.714-8.367.203 1.017-1.327 0-.364-.406-.877-.589-.877-2.119-2.279-2.161-.588.406-1.305-.45-1.872.203-.92 1.423-.877 3.092.021 4.483 3.766 3.947 8.431 6.74 12.924 9.896.546-.107 1.06-.107 1.263.545.77.792 2.503 1.124 2.236 2.59 1.102.973.813 3.198 2.931 3.22.161 0 .321.021.268.246-.246 1.102.791 1.444 1.326 1.958.567.513.749.952.182 1.38-1.284.973-1.936 2.461-3.049 3.584.086.321.064.567-.321.652-.16.589-1.102.878-1.016.043-.118-.021-.204-.043-.268-.117-.749.16-1.262.855-1.979.77-4.686.31-9.447.043-13.962 1.551-4.536 2.996-9.382 5.82-12.881 10.175-5.659 6.633-9.361 14.657-12.378 22.713-2.236 6.291 6.815 5.702 10.666 5.82.45-.225.878-.717 1.348-.022 3.017-.181 6.088.204 9.062-.385 11.234.268 23.633-2.46 35.381-1.979 3.423-.588-8.367 16.369-9.693 18.059-.995 1.22-.589 3.253.834 3.788 25.891 17.321 100.706-6.965 87.312-44.475l-.011.011Zm-99.647-54.049c-.696-.632-.161-1.124.203-.204-.085.086-.139.161-.203.204Zm14.775.449-.065.064c.204.45-.16.653-.181.139-.065.064-.14.065-.204.065.064-.065.107-.14.161-.204.085.022.16-.021.203-.117.021 0 .064 0 .086.021v.032Zm5.681 2.568c.042-.086.139-.139.246.064-.065-.021-.161-.043-.246-.064Zm45.907 53.15c.204-1.176 2.119.311 2.097-1.176.043-.653.385-1.488-.545-2.012-.471-.246-1.487-.717-.995-1.241.749-.791 1.401-2.3 3.092-1.348.877.61 1.262 1.38 2.546.407.321 1.915 1.754 1.219 2.931 1.284 3.092.267 5.318-.995 8.121-2.418-2.386 5.21-5.232 9.917-10.603 12.335 1.712-2.033 1.102-5.884-1.893-4.536-3.296 2.161-6.045 3.766-10.079 4.536 1.081-2.054 2.707-2.91 4.012-4.055.61-.492 1.605-.588 1.306-1.786l.01.01Zm-24.425-27.762c10.036-2.076 18.306 3.765 14.347 14.346-.289 2.183-3.07 4.355-.813 6.387-2.364-.855-1.551 1.755-1.936 3.338.021.567-.289.653-.567.717-7.65 3.627-10.849 12.625-19.301 15.588.61-2.867 4.194-3.969 2.75-6.986-.631 0-.77-.492-.995-.952-6.387.588-13.234 4.985-19.397 1.348l-.021.021s-.043 0-.064-.021c-.343.289-.653.652-1.038.856-.342.182.225.749-.342.631-1.53-.952.321-2.011 1.423-1.509.021 0 .021.022.042.022 2.707-2.953 20.028-1.787 16.305-7.981-1.669-.022-2.707-1.348-4.108-1.915-.385-.182-.631-.386-.653-.835 2.504-2.3 13.288 3.745 15.224-.182 6.58-11.255 11.437-13.106-1.829-22.306-.31 0-.61-.065-.835-.567h1.808Zm-20.477 36.439c-.117.182-.267.31-.513.61-.043-.364-.118-.546-.118-.749-.021-.546.952-.364.631.139Zm-1.123-34.032c3.316-.182 8.837 2.097 10.688-1.605.182-.631.545-.589 1.08-.203 2.343 1.99 15.492 7.211 12.561 10.666-7.842 4.579-17.3-.471-24.126-4.707-1.123-.492-.513-1.915-2.14-1.851-2.343-.813-3.808-2.461-5.777-4.108 2.728.652 5.189 1.444 7.714 1.808Zm-22.799 13.78c-.652-.311-1.348-.546-1.979-1.177.952-.246 1.733-.525 2.568-.45.363-.567.674-.117 1.016.022 2.953-.631 6.836.588 9.265-1.327-.77-.021-1.348-.139-.61-1.038.118-.856.567-.674 1.059-.321.813.407-.085.878.022 1.327 1.219-.246 1.915-1.262 2.685-2.054 1.583-1.648 3.648-1.509 5.595-1.808 1.284-.043.674 1.733.792 2.546.407.717.835 1.444.546 2.322.449.385.567.995.995 1.423.406.428 1.262.973.652 1.69-.545.631-1.305 1.102-2.257.834-3.52-.92-7.19-2.642-10.239.118-3.519 2.076-8.098 5.114-12.089 4.579-.289-.567.182-.995.546-1.145 2.3-.92 4.397-3.969 1.444-5.552l-.011.011Zm34.214 56.328c-.085-.471.92-.771.856-.204.043.514-.791.835-.856.204Zm62.716-27.506c-13.737 20.434-56.468 34.385-78.207 22.049 3.584-5.948 7.649-12.335 10.688-18.711 2.642-5.574-6.27-4.291-9.383-4.291-16.101-.021-32.085 3.296-48.187 2.012-2.524-.471 2.771-6.858 2.996-8.677 3.563-6.633 8.077-16.593 15.984-18.016.545-.546.973-.043 1.444.139.952-.813 2.118-.717 3.295-.77-6.654 8.976 3.178 9.607 9.875 6.494-.043-.471-.749-.814-.225-1.348.835-.386.567.674.567 1.123 3.274-.589 5.521-4.033 8.688-4.173 3.584 1.038 8.099 2.814 10.827-.834 3.52-1.936 1.198-5.435-.771-7.575 6.045 2.91 12.111 5.553 19.119 4.44-.343.974-1.177 1.733-1.059 2.846-5.114 1.284-11.073-3.252-15.941.385-2.14 1.38-1.263 4.986.631 6.312.267.268 1.059-.117.899.61-3.135 1.445-17.546 1.894-13.17 8.003.545.492-.653.695.021 1.348.974.952 2.14 1.466 3.295 1.787 4.986 1.872 9.715.288 14.657-.428-1.037 1.102-.695 2.503-.631 3.701 1.423 5.66 8.548.717 11.683-.952-.086-.856.118-1.262.995-.653.182-.524 1.102-.609.792-1.401-.204-.514.117-.567.449-.407.364.161.546.14.792-.181 1.262-1.627 3.156-2.643 4.194-4.462-.546.118-1.017.064-.953-.631.204-.877 1.306-.225 1.851-.064.856-1.808 2.953-2.568 3.948-4.13.182-.567.492-.674.974-.364 4.033-.716 2.589-6.676 4.44-9.607.203-.631.492-.546.952-.407 1.53.022 2.813 1.851 4.279 1.199.118-.61.589-.92.974-.492.363.385-.343.588-.61.877-1.648 1.605-2.91 3.359-1.979 5.841-.878 2.161-4.109 3.445-5.189 5.885-3.381 5.188 1.284 6.986 5.659 5.798 9.287-3.83 8.388 6.387 18.242-5.092 3.402-4.173 7.061-9.287 7.67-14.369.61-.385 1.124.086 1.402.407 6.291 7.168 9.468 18.22 4.033 26.789l-.01-.01Z" fill="#030303"/><path d="M160.715 301.445c-.535-.685-1.551-.792-1.894-1.605-.043-.043-.064-.107-.085-.16-.289.021-.557-.022-.792-.182h-.021a2.176 2.176 0 0 1-.407-.364c-2.675-.642-4.13.61-6.473 1.402-2.599.823-3.124 4.012-3.177 6.312-.118 4.108 6.387 7.692 10.099 5.82 3.691-2.151 5.339-7.821 2.75-11.234v.011Zm-5.232 7.575c-2.129-.011-4.044-.953-3.199-3.606.803.524 1.231 1.68 2.279 1.605.182 1.155.856.899 1.584.588 1.743-.235.395 1.594-.653 1.423l-.011-.01Zm-.92-6.184c1.487.16 2.568.513 3.402 1.958-1.551-.204-2.525-.717-3.402-1.958Z" fill="#030303"/><path d="m82 39.585 9.094-6.42-6.42-2.674 1.605-2.675 15.513-1.604 9.629 3.21h9.094l12.303 5.348 6.42-3.744-22.467-12.303-9.094 1.604-14.443-1.07-2.14-2.674 5.884-2.675-3.21-4.28 1.07-2.139h7.489l-3.21-4.28L100.724 0l10.698 7.489 10.164 2.14 6.954 2.674 15.513 8.024 6.954-1.07h6.419l12.304-6.954h13.908l11.768 4.28 12.839 11.768 13.908 1.605 9.629 13.373-2.14 4.815 3.744 9.094h9.629l1.07 2.674-4.279 3.745 6.419 9.629-9.629-5.35-1.605 6.42-5.349-6.955-3.21-6.419-5.349-5.884-5.349 3.21H201.29l2.139 8.558 7.489 4.28 10.164 1.07 10.164 7.489-6.954 2.674 1.604 6.954-10.163-4.814-17.118-5.884-3.21-6.42-4.814-17.117-18.723-3.21-9.628-5.884-21.398 1.07h-9.093l-18.188-7.49-12.838-3.744-9.63 10.699-1.604-4.814H82v-2.14Z" fill="#F8F6F4"/><path d="m183.909 42.065-1.54-3.766 4.868-3.135 3.134 4.333-1.112 2.653-5.35-.085Z" fill="url(#i)"/><path d="m187.376 26.604-3.702-2.74-1.07-.02 3.274-3.692 4.814.075 1.519 5.37-4.835.996v.01Z" fill="url(#j)"/><path d="m171.414 20.987-3.681-3.809h-.535l4.355-4.215 6.429-.963-.128 7.489-6.44 1.498Z" fill="url(#k)"/><path d="m164.695 39.604 2.567 6.462-6.462 2.568-.941-8.035 1.658-3.177 3.178 2.193v-.01Z" fill="url(#l)"/><path d="m151.792 43.144 4.184 5.948-3.777 2.075L149 50.58l.096-5.884 2.696-1.562v.01Z" fill="url(#m)"/><path d="M204.879 36.256c-3.028-.332-5.21 1.37-5.371 4.258-.021.385.086.792.139 1.198.514.396.524.417-.289.77 0 1.509.632 2.803 1.359 4.098 1.712 3.156 5.018 3.68 7.543 1.091-.674-.834.609-.417.545-.856.032-.235-.192-.534.118-.727 0-.46-.182-1.027.567-1.113.899-.78.749-2.022.781-2.899.107-3.285-2.065-5.456-5.392-5.81v-.01Zm.096 4.611c-.503-.107-1.38-.31-1.786.481v.065h-.022c.15.428.417.813.096 1.284h.032l-.021.02c.118.514.696.846.471 1.456.139.064.267.128.385.203.3.16.588.343.578.75 0 .063-.118.17-.171.192-.471.117-.493-.386-.749-.557-.118-.096-.161-.32-.225-.503 0-.535-1.423-.834-.278-1.55v-.022c-.375-.407-.942-.803-.107-1.284v-.022s0-.032.021-.053c-.139-2.6 1.851-1.123 2.985-1.498-.096.792-.171 1.263-1.198 1.027l-.011.011ZM191.088 39.057c-1.22-2.322-3.081-3.809-5.841-3.937-1.562-.075-4.751 1.412-5.221 2.6-.749 1.84.866 6.547 2.642 7.489 2.108 1.123 4.333 1.316 6.837.524.845-.503 1.947-1.113 2.321-2.247.503-1.53-.043-3.081-.738-4.429Zm-3.648 3.445c-1.551.642-2.472-.332-3.381-1.145-.61-.524-.524-1.305-.107-2.011.139-.246.214-.546.578-.578.845-.053 3.359 1.37 3.616 2.193.257.728.417 1.541-.706 1.541ZM187.9 18.859c-2.118.043-3.231 1.187-4.29 2.653.235.428.118.76-.257 1.027.139.706-1.401 1.134-.353 2.012-.374.513.375.438.46.855.257 1.616 1.273 2.782 2.771 3.51 1.166 1.101 5.028 2.01 5.981.93.856-.92 2.46-1.358 2.535-2.696.097-1.433.064-2.974-.513-4.397-.995-2.514-3.638-3.937-6.334-3.905v.01Zm3.06 7.767c-.203.556-.161 1.252-.974.257-.503-.6-1.669-.631-2.546-.92a.929.929 0 0 1-.257.16c-.107.15-.139.364-.214.524 0-.181.097-.342.086-.513-.064 0-.128-.043-.193-.107a.258.258 0 0 0-.053-.16.355.355 0 0 0 .139-.097c.31-.246-.054-.652-.107-.695-.439-.16-.449-.396-.375-.62.054-.172.172-.354.193-.514.984-1.798 2.332-1.894 3.359-.182.525.856 1.413 1.658.953 2.889l-.011-.022Z" fill="#000"/><path d="M243.715 56.41c-1.915-.46-3.862-.299-5.788-.02-1.198.181-2.065-.3-2.429-1.349-.545-1.605-1.102-3.167-2.022-4.6-.385-.578-.567-1.156-.128-1.798.471-.674.92-1.433 1.305-2.107.802-1.327.428-2.333.075-3.434-.92-2.964-2.643-5.467-4.633-7.821-.684-.803-2.054-1.67-1.829-2.472.556-1.882-.214-3.188-1.156-4.46-1.476-2.034-4.129-3.328-6.344-2.611-1.091.363-2.279.92-2.899 2.064-.193.407-.332.653-.867.578-.984-.139-1.936.236-2.888.439-1.188.289-2.525.043-3.274-.696-2.568-2.428-5.563-4.354-7.992-6.964-1.605-1.723-3.413-3.285-5.114-4.911-.374-.556-1.327-.353-1.519-1.156-1.209-.577-2.418-1.166-3.638-1.743-1.551-.739-3.231-1.156-4.825-1.744-1.145-.396-2.493-.321-3.755-.739-.685-.224-1.819-.492-2.343-.331-1.188.353-2.439.214-3.509.192-2.343-.085-4.536.386-6.601 1.284-2.675 1.166-5.232 2.632-7.81 4.002-.674.374-1.487.834-1.755 1.444-.353.813-.984.727-1.444.642-1.53-.3-3.113-.236-4.665-.375-.834-.085-1.54.364-2.332.246-2.589-.331-5.092-.117-7.446 1.092-.278.15-.492.62-.995.192-.685-.61-1.519-1.016-2.247-1.562-2.097-1.637-4.376-2.995-6.729-4.183-1.701-.845-3.456-1.54-5.146-2.364-4.248-2.076-8.688-3.178-13.438-3.167-1.016 0-2.043-.321-3.049-.706-2.375-.877-3.884-3.006-6.12-4.173-1.166-.588-2.385-1.455-3.562-2.16-2.375-1.456-4.183-1.21-6.023.192-.856.663-.247 1.626-.878 2.29-.353.374.428.331.738.449-.32.738.685 1.251.364 1.915-.246.513-.91.214-1.337.32-1.37.397-2.92.3-4.034 1.424 0 .513.835 1.283-.449 1.38-.867 1.776.46 2.813 1.327 4.022.139.193.684.118.46.6-.118.246-.332.32-.6.374-2.182.3-3.337 1.755-4.022 3.712.064.065.107.16.182.246.086.054.139.086.246.14.064 0 .118.02.171.053v.043c.407-.075.375-.503.588-.781.343.396.482.802 0 1.134-.395.267-.438-.107-.567-.353h-.042a.43.43 0 0 1-.257-.075h-.021c-.182.075-.3.246-.46.332.888 2.203 2.824 3.091 4.889 3.498 3.284.663 6.601 1.006 9.885 1.487.236-.353.46-.16.696-.043.064 0 .128.043.192.043 3.007.075 5.949-.278 8.923-.866 1.872-.375 3.755-1.659 5.927.042 1.84 1.423 4.098 2.397 6.12 3.67 1.487.941 3.102 1.733 4.664 2.578 1.819.985 3.67 1.84 5.606 2.536.278.096.845.3.61.856-.364.866-4.269 2.268-5.039 1.669-1.209-.952-2.482-1.808-3.83-2.514-1.444-.739-2.824-1.562-4.386-2.033-2.622-.813-5.296-.77-7.992-.824-.632-.021-1.156.321-1.766.225-2.246-.364-4.354-1.113-6.376-2.13h-.021c-.236.086-.214.664-.653.354-.514-.375.31-.375.225-.631 0-.022-.011-.043-.043-.075-.835.288-1.391-.418-2.097-.589-2.065-.556-4.119-.01-6.184-.246-1.83-.203-3.702-.096-5.542-.021-2.257.085-4.504.481-6.75.845-1.36.235-2.579.888-3.306 1.99-1.498 2.247.128 5.531 2.867 5.841.503.043.856.225.941.45.193.492-.203.738-.663.963-1.562.791-3.028 1.829-4.215 3.113-.62.685-1.113 1.508-1.498 2.44-.396 1.005.289 1.561.406 2.342.257 1.69.739 2.204 2.365 2.407 1.722.214 3.349.043 4.868-.834.31-.182.663-.257.995-.396.139.439.374.802.214 1.37-.3 1.22-.14 2.45.63 3.54.92 1.274 3.189 1.349 4.056.15 2.064-2.845 3.712-5.98 6.023-8.644 1.166-1.348 3.049-2.257 4.686-1.904 2.396.492 4.793 1.358 7.04 2.471.224-.546.567-.332.909-.203.075.021.128.042.203.064.589.107 1.188.203 1.776.31-.075-.396-.096-.77.407-1.123.15.503.471.877.075 1.348.032.075.064.246.107.246 3.092.514 5.852 1.958 8.548 3.36 2.707 1.422 5.392 2.877 8.152 4.236.31-.021.61-.032.899-.032.075-.096.182-.171.267-.246-.599-1.06.332-1.52.867-2.13.032-.235.053-.48.096-.727-1.294-.256-2.129-1.744-3.637-1.294-1.584-2.268-4.323-2.61-6.505-3.884a10.014 10.014 0 0 0-3.916-1.39c-1.059-.161-1.979-.942-3.134-1.252-1.306-.364-2.686-.567-3.97-1.113-.599-.236-1.198-.514-1.808-.76-.353.706-.513.246-.727-.096-3.552-1.241-7.104-2.536-10.784-.374-.097.053-.364-.022-.396.032-.75 1.669-2.675 2.257-3.445 3.905-.321.717-.674 1.615-1.637 1.85-.022 0-.01.033-.01.033-.022 0-.033.032-.022.053.246.385.32.728-.182.995-.01.022-.043.064-.054.086-.117.288.065.866-.502.642-.375-.118.021-.428.17-.642-.181-.578-.277-1.102.546-1.156h.043c-.652-.92.171-1.915.503-2.3 1.284-1.583-.15-2.193-.802-3.092-.493-.203-.91.524-1.445.129.3-.546.717-.739 1.327-.535.46-.514.728-1.145 1.733-.9.781.193 2.011-1.294 1.99-2.128-.032-1.21-1.08-1.98-2.46-2.108-2.697-.267-5.457-.075-8.228-.76.952-.63 1.947-.78 2.889-1.09 1.626-.557 3.295-.364 4.942-.504 1.734-.128 3.52.14 5.232-.117 1.327-.203 2.579.117 3.852.15 1.615.032 2.974 1.059 4.333 1.808 1.765.973 3.637.802 5.488 1.059 3.113.439 6.28.16 9.404 1.123 2.225.706 4.066 2.011 6.12 2.974.064-.513.492-.62.791-.395.268.235-.042.502-.31.642 2.129 2.385 5.852 2.022 8.292-.129 2.557-2.215 4.75-4.814 7.842-6.505 2.492-1.37 4.632-3.509 7.414-4.397 1.38-.417 2.856-.791 4.397-.663 1.787.15 3.627-.236 5.435.15.909.192 1.808.449 2.685.674.471-.546 1.209-.867 1.305-1.723.054-.481-.278-.214-.449-.267-.182.107-.449.289-.567-.022-.053-.139-.021-.235.032-.3.118-.106.3-.149.428-.235v-.866c-1.166-.385-2.332-.803-3.616-1.23 1.498-.664 2.493-2.012 4.044-2.654.695-.31.931-.085 1.252.332.289.364.535.813.727 1.187 1.199 2.204 3.467 2.311 5.424 2.825 2.932.738 6.826-2.632 6.976-5.756 0-.225.193-.45.3-.663-.674-.407-.086-.856-.033-1.284 4.002.235 7.596 1.744 11.148 3.466 3.959 1.958 6.569 5.446 9.747 8.28 2.535 2.27 4.868 5.019 8.409 5.928 1.508.374 3.113.567 4.547.289 1.433-.289 2.739-.107 4.087-.022 1.797.118 3.145 1.605 4.943 1.851.064 0 .62 1.113 1.048 1.701 1.348 1.723 2.75 3.392 3.948 5.21 1.626 2.515 1.273 4.483-1.059 6.377-1.509 1.262-3.092 2.45-4.686 3.616-1.766 1.295-3.306 1.455-5.499.877-1.488-.385-2.804-1.39-4.43-1.262-.214 0-.46-.3-.695-.46-.268-.128-.535-.257-.813-.353-.022 0-.075-.022-.096-.01a.909.909 0 0 0-.257-.086c-.086-.043-.171-.054-.257-.086a5.4 5.4 0 0 0-.728-.118h-.021s-.053-.042-.075-.032l-.16-.075s-.054-.021-.075-.021a.954.954 0 0 0-.236-.032c-.128.085-.31.128-.363.289h-.022c-.01-.097 0-.172.032-.225h.022c.021-.086.053-.118.107-.15-.214-.032-.407-.075-.61-.096v-.021c-.235 0-.439-.022-.653.053-.01.096 0 .182-.01.267-.065 0-.118 0-.182-.02-.064 0-.161 0-.236-.033h-.075c-.021 0-.021-.01-.042 0 .128.171.107.321.021.439a.575.575 0 0 1-.203.182l-.182.064c.032.096.032.16-.032.214-.182.93.374 1.444.941 1.958.086.053.182.139.246.203 2.589 1.423 5.403 2.182 8.228 2.835.363.075.556.203.609.524.065.556-.353.257-.588.3-1.648.31-3.413.428-4.911.888-2.717.802-5.488-.353-8.077.738-.781.32-.589-.588-.674-.845-.931-2.247-2.044-4.397-3.263-6.473-.268-.439-.45-.439-.792-.278-.214.792-.674 1.102-1.466.813-.77-.3-.716.118-.695.674 0 1.263.781 2.215 1.209 3.306 1.006 2.6 2.322 5.05 2.931 7.863.343 1.594-.021 3.028.043 4.526.032 1.412.76 2.14 1.851 2.396 1.209.29 2.247.9 3.317 1.413 1.893.888 3.605 2.15 5.456 3.166.578.332.984 1.145 1.851.835.503-.396 1.038-1.284 1.391.107 1.679.16 3.038-.781 4.579-1.263-.065.578-.129 1.156-.204 1.744.407-.032.674.204.846.706a.507.507 0 0 0 .299.279c1.402.331 2.814.674 4.237.93 1.626.321 3.081.91 4.568 2.097-1.07.353-1.947.225-2.717.054-.664-.171-1.338-.193-1.905-.043-.545.15-.684.203-1.07-.31-.428-.578-2.086.513-2.482 1.605.064.246.257.481-.021.695.299 1.048 1.241 1.68 1.915 2.397.653.706.888 1.572 1.487 2.257.364.406.086.941-.193 1.22-.32.342-.567-.225-.834-.29-2.685-.802-4.547-3.06-7.157-4.033-.707-.235-1.37-.16-2.055-.278-2.225-.374-4.397-.941-6.472-1.83-.631-.288-1.209-.352-1.947-.096-.439.15-.557-.962-1.199-.995-.748-.042-.898-1.102-1.754-.941-.032.096-.032.214-.064.31-.332-.128-.632-.267-.599-.695-2.376-1.498-4.569-3.231-5.35-6.077-.364-1.273-.92-2.482-1.294-3.723-.685-2.247-1.252-4.536-1.958-6.804a44.65 44.65 0 0 0-1.006-2.782c-.332-.813-.406-1.84-.214-2.258.813-1.711-.652-2.236-1.294-3.21-.824.579-1.562.311-2.311-.181-3.071.171-6.034-.578-9.03-1.123-4.472-.824-8.644-2.557-12.721-4.537-.288-.139-.759-.374-.77-.62 0-.332.417-.524.749-.706 1.84-.963 3.809-1.562 5.692-2.322-.097-.139-.311-.428-.278-.46 1.636-1.605.032-2.193-.942-2.985-1.851.236-3.167 1.787-5.018 2.044-.256.16-.502.331-.738.481-.107-.246-.203-.503-.032-.792-.075-2.107-.866-4.076-1.819-5.83-.524-.974-1.647-1.82-2.76-2.59-1.851-1.208-3.028-.395-3.916.739-.813 1.038-1.615 2.279-1.519 3.894.054 1.049.118 2.033.439 3.006.011.043.032.075.021.129.086.481-.289.995.214 1.412.514-.492.995-.267 1.445.118.192.042.406.075.609.139.482-.257.739-.62.525-1.166-.311-.043-.781.053-.471-.503.246-.439.556-.824.813-1.22-.653-.952.588-1.744.246-2.685-.021-.064.31-.556.653-.16.224.256.834-.097.802.577-.075 1.498.835 2.792.824 4.354 0 1.017-.15 1.52-.984 1.862-.717.3-1.466.578-2.258.46-.759.364-1.562.481-2.386.492-.716.428-1.444-.118-2.139-.021-.343.032-.311-.129-.396-.418-.535-2.321-1.819-4.268-3.392-5.959-1.423-1.497-4.236-.845-5.199 1.017-.653 1.251-1.059 2.482-.61 3.947.3.92-.471 1.306-1.53 1.274-1.594-.054-3.338-.129-4.761.438-.663.257-1.466.589-2.15 1.027-.032.032-.043.065-.086.075.129.995.214 2.044 1.712 1.755.342-.054.61.278.738.631 2.108-.075 4.237-.278 6.344-.171 1.199.064 2.472.396 3.617.364 2.054-.054 4.065.3 6.13.107 1.573-.15 3.252-.236 4.686-.589 1.273-.31 2.15-.513 3.177.236.353.181.706.353 1.027.524.386.599 1.316.331 1.573.663 1.198 1.573 3.178 1.616 4.718 2.471 2.728 1.488 5.82 2.13 8.827 2.89 2.193.534 4.397 1.048 6.718 1.005 2.964-.043 3.723.599 4.205 2.963-.171.664.011 1.241.406 1.776.129 1.445 1.06 2.675 1.049 4.162-.075.289-.043.567.257.728.374 1.048.941 2.096 1.005 3.156.043.674.813.406.749 1.176-.16 2.13.792 4.077 1.701 5.895.888 1.82 2.632 3.05 4.344 4.162a40.44 40.44 0 0 0 7.339 3.723c1.616.61 3.327.92 5.007 1.348 1.444.364 3.113.321 4.301 1.08 1.198.75 2.621 1.295 3.584 2.45.396-.513.631-.16.877.161.995 1.252 2.568 1.359 3.927 1.862.995.364 2.075.513 3.124.717 1.433.278 2.674-.878 2.45-2.333-.193-1.24-.599-2.46-1.273-3.53-.46-.75-.343-1.658-.835-2.418-.31-.45.342-.674.546-.546 1.027.642 1.915-.235 2.899-.224 1.198 0 3.06-1.862 2.931-2.836-.31-2.332-2.022-3.573-3.691-4.771-1.219-.856-2.771-1.177-4.258-1.476-.77-.15-.856-.546-.492-1.006.803-.995.171-1.84-.257-2.6-.502-.845-1.273-1.658-2.332-1.562-2.204.182-4.354.578-6.291 1.819-.588.364-1.219 1.145-2.129.663-.93-.492-1.851-1.038-2.781-1.53-1.98-.995-3.616-2.61-5.863-3.134-.407-.075-1.038-.75-.995-.92.685-1.84-.3-3.542-.364-5.296-.011-.29-.257-.6.203-.696.428-.107.525.278.525.546 0 1.006.502.802 1.251.824.739.021 1.252-.557 2.108-.343 1.123.268 3.028.514 3.424-.053 1.155-1.584 2.31.235 3.327-.417.128-.065.364-.214.567-.268 1.861-.46 3.552-1.476 5.488-1.605l1.519-.535c-.278.717-1.241.578-1.08 1.338.61.963 1.273 1.733 2.065 1.433 1.786 1.926 2.867 4.098 3.648 6.43.802 2.343 2.193 4.387 3.306 6.59.471-.053 1.091-.363.877.578 1.091.888 2.086 1.883 3.488 2.258.385-.043.845-.428 1.048.257 2.022-.204 2.814-1.284 2.91-3.724.022-.32-.406-.834.118-.995.321-.107.653.278.952.418 1.091.502 1.701 2.246 3.37 1.476.268-.118.46.289.278.46-.599.524-.278.46.225.631 1.241.471 2.365.899 3.777.557 1.337-.3 1.893-.824 1.647-2.269-.406-2.663-2.214-4.493-3.84-6.408-.728-.877-1.637-1.605-2.472-2.396.3-.172.535-.386.792-.46 2.172-.653 2.461-2.472 2.6-4.28.117-1.797-1.541-3.37-3.927-3.948l-.053-.01ZM94.512 17.394c-.01-.107.15-.343.235-.332.503.021.482.546.91.877-.632.022-1.07.043-1.156-.545h.01Zm27.388 25.13c.214.108.385.13.417.236.204.439-.299.524-.449.803-.096-.075-.278-.172-.257-.225.065-.268.182-.503.289-.813ZM85.396 37.72c.043-.064.236.032.31.064.161.321-.063.375-.224.439-.096.032-.235-.032-.353-.054.075-.16.15-.342.267-.449Zm5.853-.428c.524-.406 1.112-.396 1.316-.128.438.535-.46.45-.567.738-.578 1.626-2.697 1.423-3.392 2.685-.663 1.284-1.893 1.07-2.803 1.637-.225.171-.492.107-.685-.043-.267-.256 0-.492.129-.642.845-1.059 1.85-1.99 3.102-2.61.974-.524 2.022-.963 2.9-1.626v-.01Zm60.789-15.534c-.075.224-.182.353-.321.406-.139.054-.321.022-.513-.064-1.947 1.22-3.905 2.493-5.895 3.638-1.733 1.016-3.306 2.236-4.761 3.594-.375.332-.695.246-1.059.332-.054.289.16 1.016-.492.417-.3-.278-.311-.888-.46-1.348-.514-.995-1.669-1.187-2.504-1.562-1.412-.61-2.61-1.594-3.948-2.3-3.766-1.98-7.328-4.376-11.051-6.42-1.37-.737-3.103-1.304-4.611-.662-1.081.47-2.162.545-3.231.877-1.926.588-3.841.717-5.82.77-3.456.107-6.901.107-10.228-1.016-.225-.075-.482-.118-.717-.193-.129-.043-.236-.16-.46-.278.963-1.048 2.214-.781 3.36-.941 1.272-.182 2.535.128 3.819-.257 1.102-.343 1.85-1.124 1.594-1.99-.225-.75-.974-1.551-2.183-1.637-2.172-.171-3.883-1.434-5.51-2.942 1.049-.567 2.001-.193 2.985-.097 2.397.247 4.665 1.177 7.104 1.402.856.096.888-.246 1.038-.792-.075-.706-.706-1.369-.15-2.129-.792-.342-.941-1.733-2.204-1.262.086-1.006-1.048-1.027-1.359-1.723-.406.097-.406-.214-.492-.449-.834.032-1.005-.513-1.07-1.316.557.31 1.028.567 1.498.845l.236.471c1.883.246 3.102 1.658 4.375 2.771 2.589 2.247 5.457 3.745 8.859 3.723 4.247 0 8.077 1.22 11.875 2.964 2.461 1.112 4.804 2.396 7.243 3.509.086-.257.182-.503.257-.738-.043-.386-.974-.567-.353-1.006.653-.47.877.267 1.123.717.311 0 .76-.45.781.374 0 .706.236 1.412.353 2.118 1.595 1.038 3.007 2.343 4.59 3.36.835.546 1.958 1.091 3.242.053.984-.813 2.493-.941 3.819-1.144.385-.62.845-.054 1.263-.086.267-.824 1.048-.235 1.615-.899-.356.97-.895 1.27-1.615.899l-.022.01Zm26.501-5.874c-.482 1.08-.771 2.472-1.937 2.686-1.337.449-4.504-1.038-4.868-2.001-.181-.45.225-.482.428-.62 1.605-.942 3.435-1.167 5.189-1.563 1.198-.246 1.391 1.049 1.198 1.488l-.01.01Zm31.539 34.257s.022.01.032.032h-.021s-.075-.01-.086-.032h.075Zm-.674.054h.086v.182a.44.44 0 0 1-.171-.182c.021.01.075.021.096.01l-.011-.01Zm-58.596-4.077c-.482-.16-.407.118-.235.354.181.203.171.428.149.684-.032.653-.716.942-1.048.931-.439-.043-.364-.717-.289-1.123.096-.364.471-.503-.118-.963-.61-.47-.278-1.594-.139-2.354.075-.428.813-.267 1.081.15.353.567.62 1.187.92 1.787-.203.117.717.898-.321.534Zm41.061 15.813s-.075-.085-.107-.118c-.032-.032-.064-.042-.096-.075.043-.064.096-.096.139-.16.011.043.043.053.054.096.042.075.106.16 0 .268l.01-.01Zm54.67 12.806c-.824.246-.824-.31-.856-.856.075.022.204 0 .214.032.086.108.15.236.214.343.257-.086.353-.749.771-.343.374.375-.343.482-.343.814v.01Zm-4.151-13.277c-.866.375-1.754.76-2.493 1.306-.888.695-.888 1.69-.481 2.728.182.47.439.91.781 1.284.374.492 1.433.47 1.07 1.69-.278-.792-1.305-.364-1.445-1.252-.973-.053-1.198-1.177-2.203-1.444-1.53-.417-2.686.15-2.632 1.754.032.9.342 1.723.631 2.557.235.739.342 1.53.588 2.622-1.091-1.06-1.551-2.183-2.749-2.61-.31-.119-.396-1.06-.664-1.616-.962-2.236-1.925-4.505-2.567-6.88-.139-.502-.428-1.155-.856-1.348-1.509-.674-2.375-2.118-3.713-3.006-.941-.642-.888-1.327.033-2.193 1.144-1.049 2.45-1.797 3.637-2.728.556-.439.813-.417 1.166.235.46.792.845 1.573 1.188 2.407 1.626 3.788 1.658 5.018 6.697 4.996.867-.01 1.712-.117 2.578-.203.407-.17.792-.214 1.06.225.663-.129 1.294.139 1.39.727.129.62-.62.578-1.048.75h.032Z" fill="#000"/></g><defs><linearGradient id="h" x1="148.155" y1="46.293" x2="190.938" y2="46.999" gradientUnits="userSpaceOnUse"><stop stop-color="#7662AB"/><stop offset=".52" stop-color="#EE4F9C"/><stop offset="1" stop-color="#FDBD50"/></linearGradient><linearGradient id="b" x1="19.161" y1="218.102" x2="114.379" y2="218.102" gradientUnits="userSpaceOnUse"><stop stop-color="#7662AB"/><stop offset=".52" stop-color="#EE4F9C"/><stop offset="1" stop-color="#FDBD50"/></linearGradient><linearGradient id="d" x1="148.304" y1="37.201" x2="191.088" y2="37.907" gradientUnits="userSpaceOnUse"><stop stop-color="#7662AB"/><stop offset=".52" stop-color="#EE4F9C"/><stop offset="1" stop-color="#FDBD50"/></linearGradient><linearGradient id="e" x1="148.55" y1="21.954" x2="191.345" y2="22.66" gradientUnits="userSpaceOnUse"><stop stop-color="#7662AB"/><stop offset=".52" stop-color="#EE4F9C"/><stop offset="1" stop-color="#FDBD50"/></linearGradient><linearGradient id="f" x1="148.668" y1="15.278" x2="191.452" y2="15.974" gradientUnits="userSpaceOnUse"><stop stop-color="#7662AB"/><stop offset=".52" stop-color="#EE4F9C"/><stop offset="1" stop-color="#FDBD50"/></linearGradient><linearGradient id="g" x1="148.229" y1="42.016" x2="191.013" y2="42.722" gradientUnits="userSpaceOnUse"><stop stop-color="#7662AB"/><stop offset=".52" stop-color="#EE4F9C"/><stop offset="1" stop-color="#FDBD50"/></linearGradient><linearGradient id="c" x1="127.957" y1="330.35" x2="235.981" y2="330.35" gradientUnits="userSpaceOnUse"><stop stop-color="#7662AB"/><stop offset=".52" stop-color="#EE4F9C"/><stop offset="1" stop-color="#FDBD50"/></linearGradient><linearGradient id="i" x1="182.369" y1="35.164" x2="190.371" y2="35.164" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="j" x1="182.604" y1="20.152" x2="192.211" y2="20.152" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="k" x1="167.198" y1="12" x2="177.982" y2="12" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="l" x1="159.859" y1="37.422" x2="167.262" y2="37.422" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="m" x1="149" y1="43.133" x2="155.976" y2="43.133" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h328.918v400H0z"/></clipPath></defs></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/mr-pinprivate.svg b/browser/components/newtab/data/content/assets/mr-pinprivate.svg
new file mode 100644
index 0000000000..be3e0c0ba3
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mr-pinprivate.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg width="337" height="400" fill="none" xmlns="http://www.w3.org/2000/svg"><g transform="translate(50 0)" clip-path="url(#a)"><g clip-path="url(#b)"><path d="m22.501 88.36 3.293-12.623 1.646-4.939 3.293 14.818h14.818l-8.78 6.037 6.585 12.073-9.879-2.195v13.171l-7.134-7.683-7.683 6.586-1.098-9.33h-9.33l6.586-4.939L7.135 79.03 22.5 88.36Z" fill="url(#c)"/><path d="m82.32 21.406 3.294-4.39 7.134 4.39-4.39 12.623-6.037-12.623Z" fill="url(#d)"/><path d="m204.155 62.017 4.939-8.232 8.781 6.037-3.293 15.367-10.427-13.172Z" fill="url(#e)"/><path d="m234.888 104.275 1.646-2.744 1.647-.549 3.841 2.196-2.195 6.036-4.939-4.939Z" fill="url(#f)"/><g clip-path="url(#g)"><path d="M170.702 157.546c-5.604-4.084-11.872-6.742-18.497-8.507-4.06-1.087-8.263-1.136-12.442-1.039-3.941.097-7.907-.024-11.848.29-3.514.266-7.005.967-10.59.532-2.992-.363-5.675-1.378-8.216-2.828-4.131-2.344-7.859-5.365-12.038-7.661-5.152-2.852-10.186-5.873-16.264-6.453-4.322-.411-8.43-.218-12.063 2.489-1.495 1.112-3.466 1.33-4.725 3.19-.546.798-1.306 1.426-1.496 2.538-.546 3.094-1.092 6.187-1.78 9.232-1.591 6.937-1.971 13.849-.76 20.809 1.068 6.09 4.321 10.731 9.165 14.404 4.06 3.07 8.714 3.626 13.51 3.771 5.272.145 10.33-1.426 15.482-2.079 3.419-.435 6.862-.556 10.257-.145 3.396.435 6.316 2.272 9.26 3.891a38.753 38.753 0 0 1 6.791 4.761c2.066 1.813 4.274 3.577 6.696 4.786 5.152 2.61 10.732 3.552 17.167 3.504 5.342.314 10.614-1.499 15.172-5.51 2.494-2.2 4.749-4.52 5.509-8 .499-2.369 1.069-4.761 2.018-6.985 1.781-4.108 3.087-8.338 4.132-12.664 1.329-5.389-.071-9.135-4.44-12.326Zm-69.333 4.834c-.404 1.184-1.71 1.402-2.754 1.668-1.995.507-3.966.145-5.936-.314-3.538-.871-7.148-1.571-10.21-3.819-.76-.532-1.544-1.039-1.401-2.151.118-1.112 1.068-1.353 1.875-1.668 1.354-.555 2.802-.845 4.393-.676 4.037.193 8.026.87 11.492 3.432.404.29.903.58 1.164.99.546.798 1.804 1.354 1.377 2.538Zm47.251 13.703c-.285.798-.998 1.523-1.829 1.789-1.187.338-2.374.822-3.086.556-5.984-.459-10.946-1.958-14.959-5.897-1.401-1.354-1.187-2.876.498-3.94 2.066-1.305 4.512-1.812 6.411-.604 2.565 1.692 5.438 2.659 8.073 4.181 1.282.749 2.612 1.45 3.704 2.514.475.435 1.473.628 1.188 1.401Z" fill="#7514CF"/></g><path d="M185.451 266c.362 2.456-.891 5.251-2.746 7.202-2.577 2.722-6.07 4.215-10.141 3.107-4.263-1.156-7.852-3.469-11.2-6.239-.723-.602-1.566-1.011-2.168-1.782-.217-.289-.603-.626-1.06-.289-.386.289 0 .771-.048.915-.868 2.192-.41 4.601-1.108 6.817-.795 2.505-.844 5.131-1.349 7.684-.41 2.096-1.108 4.167-1.373 6.287-.53 4.071-1.47 8.045-1.903 12.14-.747 7.178-.386 14.308-.289 21.486.024 2.288.626 4.48.481 6.769a61.294 61.294 0 0 0 0 7.274c.338 6.504-1.83 12.213-5.901 17.054-2.577 3.059-6.046 5.035-10.141 5.902-3.276.698-6.6.289-9.804.722-4.311.579-8.551.362-12.742-.144-3.204-.385-6.504-.795-9.587-2.288-2.457-1.205-5.275-1.711-7.973-2.457-5.974-1.662-11.972-3.18-17.945-4.77-4.264-1.132-8.359-2.89-12.574-4.239-3.613-1.156-7.274-2.12-10.888-3.252a47.694 47.694 0 0 1-10.14-4.504c-2.987-1.783-5.83-3.854-7.564-6.914-1.325-2.336-1.83-5.034-1.229-7.756.916-4.143 2.41-8.117 3.638-12.14a352.204 352.204 0 0 0 2.529-8.599c1.276-4.577 2.939-9.033 4.263-13.61 1.036-3.565 2.216-7.082 2.746-10.767.313-2.192 1.229-4.215 1.446-6.431a171.432 171.432 0 0 1 2.986-18.524c.314-1.493-.602-1.469-1.469-1.108-2.794 1.18-5.757 1.734-8.623 2.602-3.276.987-6.552 2.143-10.02 2.36-2.795.193-5.854-1.71-6.817-4.456-.482-1.397-1.036-2.794-1.325-4.239-.747-3.686 1.156-6.046 4.72-8.262a115.335 115.335 0 0 1 8.89-5.035c2.191-1.108 4.552-1.903 6.84-2.842 4.673-1.975 9.394-3.878 14.212-5.492 3.18-1.06 6.431-1.927 9.635-2.891 4.528-1.373 9.274-1.589 13.85-2.577 1.927-.41 4.071-.12 6.022-.578 2.819-.675 5.685-.626 8.503-1.156a6.522 6.522 0 0 1 1.205-.121c6.527 0 13.055-.433 19.559.145 4.215.361 8.382 1.06 12.549 1.782 3.349.578 6.721 1.084 9.949 2.24 2.962 1.06 6.166 1.614 8.936 2.987 2.818 1.397 5.998 2.144 8.503 4.336.771.674 2.096.988 3.18 1.542 2.168 1.108 4.191 2.384 5.973 3.95 2.626 2.312 5.155 4.793 7.395 7.491 2.385 2.843 4.914 5.54 6.841 8.768 2.096 3.517 3.541 7.178 3.324 11.924l-.048-.024Zm-91.918-20.306c-.988-.603-1.542.361-2.337.409-5.95.289-11.779 1.469-17.608 2.481-2.89.482-5.781 1.084-8.671 1.71-1.928.41-3.758 1.229-5.83 1.157-.722 0-1.541.529-1.638 1.782-.265 3.613-.554 7.25-1.83 10.719-.338.915-.12 2.023-.169 3.035 0 .361.048.771.53.626 2.12-.626 4.553-.409 6.455-1.349 2.89-1.397 6.07-1.397 9.01-2.481 2.143-.77 4.672-.433 7.033-.674 2.433-.241 4.914-.409 7.323-.771 7.756-1.156 15.488-.241 23.196.169 2.409.12 4.817.289 7.202.385 2.77.121 5.637-.144 8.334.386 4.168.819 8.359 1.228 12.598 1.493 3.252.193 6.335 1.229 9.274 2.409 2.192.867 4.625 1.349 6.576 2.842.385.289 1.156.458 1.228-.506.362-4.793 1.759-9.442 1.879-14.308.048-1.975-.746-2.698-1.975-3.541-2.264-1.541-4.769-2.673-7.419-3.179-5.058-.964-10.117-2.096-15.271-2.65-4.818-.506-9.587-1.301-14.429-1.397-4.818-.096-9.659-.337-14.477.289-3.01.385-6.046.675-8.984.988v-.024ZM55.763 395.76c-.578.818.072 1.252-.048 1.83-2.36-.458-4.697-.674-7.058-.722-1.108-.025-2.192-.603-2.866-1.205-2.072-1.879-4.697-2.818-6.793-4.625-1.903-1.638-2.553-3.733-3.155-5.877-.314-1.084 2.071-3.661 3.588-4.456 1.566-.819 3.325-.843 4.866-1.397 1.88-.651 3.782-.819 5.685-1.181 1.421-.289 2.89-.65 4.288-.506 3.781.41 7.467-.433 11.176-.65 3.132-.193 6.36-.265 9.467-.915.53-.121.867-.313.963.409.024.217.169.338.337.241 3.517-2.168 7.492-.722 11.225-1.349 3.156-.506 6.48-.265 9.732-.385 1.903-.048 4.046-.121 5.805.337 1.734.458 2.963-.891 4.625-.265 1.108.434 2.649-.506 3.709.699.097.12.097.144.241.072 2.457-1.397 4.866-.265 7.299.144.794.145 1.565-.385 2.481-.409 3.227-.048 6.407.385 9.587.626 1.782.121 3.589.506 5.395.337.602-.048 1.325-.192 1.301.844 0 .457.409.602.698.289 1.253-1.349 2.481-.482 3.686 0 .313.12.626.313.963.289 4.047-.506 7.684 1.204 11.49 1.999 2.048.433 3.637 1.301 5.227 2.625 1.951 1.638 2.168 3.565.699 5.637-1.59 2.216-3.71 3.372-6.215 4.095-1.686.482-3.324 1.397-4.962 1.758-2.312.506-4.649.94-6.913 1.59-3.107.891-6.311 1.277-9.442 1.566-2.843.265-5.709 1.541-8.648.554-.409-.145-.53.313-.674.289-.651-.121-1.133 1.421-1.927.096-.241-.385-.651.843-1.133.699-2.842-.747-5.54.506-8.262.433a109.785 109.785 0 0 0-6.286.024c-3.445.121-6.865.41-10.31.458-.819 0-2.12.843-2.553-.747 0-.048-.241-.096-.313-.048-3.204 1.855-6.649.337-9.949.482-1.975.096-4.143.506-6.19-.072-2.048-.554-4.143-.145-6.239-.241-1.638-.072-3.204-.675-4.89-.747-2.433-.096-4.865-.458-7.298-.626-1.205-.072-2.024-.602-2.385-2.048l-.024.049Zm51.668.867c.072-1.397-.795-2.433-1.999-2.505-1.277-.073-1.903.867-1.975 1.806-.097 1.06.216 2.433 1.734 2.337.963-.049 2.288-.049 2.24-1.614v-.024Zm-13.85-16.356c.77.169 1.493.048 1.565-.819.073-.771-.65-1.012-1.276-1.084-.892-.12-1.157.554-1.301 1.229-.193.963.578.578.987.674h.025Zm50.849 5.926c-1.253-.073-2.289-.169-3.324-.193-.362 0-.843.169-.603.747.121.289.506.819.627.65.843-1.108 2.36 0 3.3-1.228v.024ZM81.296 388.1c-.12-.53-.578-.964-1.06-1.108-.289-.073-.867.409-.747.915.097.409.048 1.036.867 1.036.603 0 .771-.338.964-.843h-.024ZM171.167 111.742c-1.397 1.084-2.216-.265-3.035-.77-1.975-1.181-3.734-2.698-5.588-4.047-.771-.554-1.711-.506-2.578-.626-.915-.121-1.18-.627-1.59-1.422-.77-1.445-.818-2.914-1.083-4.432-.145-.915-.868-1.686-.554-2.794.722-2.36 3.372-5.588 5.877-5.082 3.228.674 6.672 1.445 8.599 4.335.723 1.084 1.59 1.253 2.409 1.759 2.818 1.782 5.805 3.227 8.527 5.251 1.445 1.06 3.685 1.686 5.299 2.794 2.409 1.662 5.155 2.722 7.419 4.649.892.771 2.144 1.108 3.156 1.758 2.842 1.831 5.323 4.143 8.069 6.143 1.494 1.084 3.18 1.879 4.649 3.059 2.867 2.336 5.902 4.432 8.792 6.72 2.65 2.096 5.564 3.878 8.383 5.757 2.264 1.494 4.287 3.373 6.479 5.035 1.855 1.397 3.806 2.721 5.54 4.215 2.505 2.168 5.396 3.734 7.997 5.685 1.879 1.397 3.999 2.673 5.998 3.974 1.325.867 2.794 1.566 3.999 2.722 1.06 1.012 2.288 1.999 3.589 2.722 1.758.987 3.3 2.264 4.649 3.637 1.301 1.325 3.083 1.831 4.312 3.204 1.252 1.445 3.275 2.168 4.456 3.517 1.59 1.83 3.709 2.866 5.419 4.504 1.759 1.686 3.373 3.493 5.107 5.203.964.963 1.108 2.192 1.012 3.276-.313 3.011-2.096 5.323-4.264 7.347-.771.698-4.6.385-5.949-.265-2.722-1.277-5.324-2.722-7.805-4.408-1.83-1.229-3.709-2.385-5.492-3.662-3.974-2.866-8.334-5.154-12.26-8.117-3.084-2.361-6.504-4.312-9.467-6.769-3.348-2.77-6.913-5.227-10.165-8.093a43.386 43.386 0 0 0-4.48-3.469c-1.614-1.132-2.915-2.722-4.529-3.758-1.493-.963-2.577-2.36-4.167-3.227-1.734-.94-3.107-2.53-4.769-3.662-1.156-.795-2.24-1.71-3.372-2.409-2.915-1.782-5.782-3.709-8.359-5.877-1.927-1.638-4.697-2.264-5.901-4.793-1.494.216-2.313-.964-3.3-1.711-3.132-2.36-6.191-4.841-9.226-7.322-.554-.458-.939-1.132-1.277-1.783-.144-.241-.168-.481-.481-.602-3.493-1.445-6.215-4.047-9.202-6.215-.747-.529-.626-1.108-.795-1.902l-.048-.049Zm56.269 29.484c-.337-.699-.843-1.422-1.59-1.927-2.457-1.614-4.962-3.156-7.419-4.818-1.782-1.228-3.613-2.433-5.203-3.878-2.047-1.879-4.263-3.613-6.504-5.227-2.143-1.542-4.287-3.18-6.551-4.577-3.084-1.903-5.781-4.311-8.937-6.19-3.131-1.855-6.504-3.324-9.442-5.516-2.626-1.951-5.661-3.276-8.455-4.986-2.891-1.735-5.516-3.758-8.118-5.878-.746-.602-1.469-1.806-2.577-.024-.771 1.253-1.204 2.168-.048 3.18.915.843 1.951 1.565 3.035 2.216.602.361.795.578.409 1.228-.144.241-.53.675-.024 1.06.265.193.723.217.795.048.699-1.638 1.518-.217 2.264-.12 1.012.144 1.253 1.325 2 1.614 2.746 1.084 4.576 3.42 7.13 4.817 2.384 1.301 4.335 3.348 6.551 4.89 2.385 1.638 4.312 3.758 6.576 5.516 2.626 2.023 5.179 4.167 7.925 6.022 1.397.963 2.891 1.831 4.312 2.794 1.855 1.253 3.854 2.337 5.54 3.758 2.409 2.047 5.083 3.733 7.443 5.805 1.614 1.421 3.686 2.144 5.179 3.782.675.746 2.096 1.854 2.794 1.325 1.446-1.157 2.337-2.939 2.963-4.963l-.048.049Zm38.131 27.893c.024 2.12 1.156 4.095-.289 6.143-.265.361-1.229 1.132-.434 1.71 2.385 1.734 4.962 3.203 7.395 4.914 1.782 1.252 3.974 1.927 5.877 3.107.554.337 1.397.482 2.048-.458 1.349-1.854 1.228-3.661-.675-5.203-3.781-3.059-7.828-5.757-11.514-8.984-.578-.506-1.373-1.494-2.432-1.229h.024Zm-33.892-24.834a9.377 9.377 0 0 1-2.553 3.998c-1.084 1.012-.963 1.735.241 2.554 1.541 1.06 2.794 2.505 4.408 3.3.939-1.47 2.529-2.698 3.059-4.673.241-.916.41-1.301-.554-1.855-1.566-.94-2.987-2.144-4.601-3.324ZM147.585 201.106c-6.528.048-12.188-.892-17.415-3.493-2.457-1.228-4.697-2.963-6.793-4.769a39.366 39.366 0 0 0-6.889-4.746c-2.987-1.614-5.95-3.468-9.394-3.878-3.445-.433-6.937-.289-10.406.145-5.251.65-10.382 2.216-15.705 2.071-4.866-.144-9.587-.698-13.706-3.757-4.914-3.638-8.214-8.287-9.298-14.333-1.228-6.961-.843-13.826.77-20.739.7-3.035 1.277-6.142 1.831-9.226.193-1.084.94-1.71 1.518-2.529 1.277-1.83 3.276-2.071 4.793-3.179 3.686-2.674 7.829-2.867 12.237-2.457 6.166.578 11.273 3.589 16.5 6.431 4.24 2.288 8.021 5.299 12.213 7.636 2.577 1.445 5.299 2.457 8.334 2.818 3.637.434 7.178-.265 10.743-.53 4.023-.313 8.021-.192 12.02-.289 4.215-.096 8.503-.072 12.622 1.012 6.72 1.758 13.079 4.408 18.764 8.503 4.432 3.179 5.877 6.889 4.528 12.285-1.083 4.311-2.408 8.527-4.191 12.621-.963 2.192-1.541 4.601-2.071 6.962-.747 3.493-3.059 5.781-5.589 7.973-4.625 3.998-9.972 5.829-15.392 5.516l-.024-.048Zm-87.149-38.589a17.59 17.59 0 0 0 .169 4.047c.843 5.372 3.251 9.78 7.756 12.935.843.578 1.59 1.325 2.48 1.783 3.951 2.023 8.19 2.216 12.502 2.023 1.927-.096 3.758-.578 5.637-.819 4.312-.554 8.6-1.397 12.983-1.518 3.782-.096 7.491.217 11.008 1.783 4.601 2.023 8.913 4.552 12.743 7.828 4.528 3.854 9.635 6.456 15.584 7.154 4.36.506 8.816.964 13.056-.505 4.841-1.687 8.696-4.842 10.791-9.66.891-2.023 1.301-4.263 2.048-6.359 1.878-5.179 3.805-10.333 4.913-15.753.41-2.072.073-3.902-1.71-5.396-1.686-1.421-3.348-2.818-5.299-3.854-3.661-1.975-7.467-3.637-11.345-5.058-5.733-2.096-11.731-1.807-17.681-1.951-5.949-.145-11.875.747-17.8.939-4.192.145-8.022-1.06-11.683-2.842-4.071-1.975-7.443-5.107-11.442-7.275-4.769-2.601-9.394-5.419-14.886-6.407-4.649-.843-8.84-.506-13.104 2.096-2.794 1.71-4.07 3.324-4.432 6.696-.722 6.721-3.227 13.224-2.312 20.137l.024-.024ZM35.481 100.734c-.12 3.541.41 6.865-.096 10.165-.217 1.446-.362 2.843-2.216 3.18-1.903.361-2.794-.626-3.59-2.168-.818-1.614-1.83-3.131-2.794-4.673-.24-.361-.578-1.132-.89-.891-.507.409-1.205.578-1.543 1.325-1.06 2.336-3.083 3.83-5.275 4.914-1.493.722-2.48-.241-2.866-1.831-.482-2.072 0-4.095.096-6.118.073-1.614-.867-2.024-1.999-1.711-2.264.627-4.336-.144-6.48-.457-1.734-.241-2.625-1.494-3.01-3.06-.241-.939-.025-1.806 1.011-2.432 1.638-.988 3.348-1.807 5.179-2.24 1.59-.386 1.566-1.157 1.012-2.289-1.494-2.962-3.035-5.901-4.48-8.888-1.205-2.505-2.313-5.083-3.47-7.612-.312-.698-.288-1.445-.192-2.168.12-.77 1.06-1.517 1.325-1.276 1.18 1.084 2.264-.458 3.42.12 1.132.578 2.096 1.373 3.084 2.12 2.77 2.047 5.54 4.119 8.238 6.263 1.035.843 1.348.505 1.493-.579.313-2.432 1.3-4.745 1.71-7.13.29-1.637 1.012-3.13 1.18-4.793.12-1.156 1.951-2.939 3.035-2.939 1.542 0 2.24 1.06 2.554 2.337.915 3.806 2.264 7.491 2.65 11.417.144 1.446.602 2.698 2.673 2.554 1.614-.12 3.252-.458 4.914-.145 2.072.41 4.143-.433 6.19.024.868.193 1.831.193 2.169 1.277.337 1.132.409 2.216-.723 3.01-1.927 1.374-4.215 1.976-6.335 2.964-.386.192-.386-.049-.506-.362-.169-.385-.843-.216-.819-.048.217.94-1.132 1.59-.145 2.843 1.687 2.143 3.734 3.974 5.107 6.359.337.602.819 1.132 1.108 1.734.554 1.132 1.614 2.312.482 3.613-1.18 1.349-2.867 1.566-4.408.988-1.903-.699-3.686-1.759-5.516-2.674a42.21 42.21 0 0 1-1.325-.698l.048-.025Zm-4.07 5.589c-.434-2.457-.218-4.721-.675-6.962-.313-1.517.192-2.962 1.614-3.757 1.397-.771 2.794-.048 3.974.626.723.41 1.445.867 2.216 1.204.217.097.337.771.747.217.217-.289.144-.506-.048-.746a29.046 29.046 0 0 1-1.06-1.35c-.964-1.204-2-2.384-2.843-3.66-1.18-1.783-.89-3.132.723-4.505.506-.434 1.205-.65 1.542-1.325a6.303 6.303 0 0 0-1.903 0c-4.745.723-6.504-.723-7.106-5.54-.24-1.903-.77-3.758-1.18-5.637h-.434c-.024 3.011-1.325 5.757-1.71 8.72-.169 1.349-1.036 2.65-2.264 3.204-1.229.53-2.53.024-3.662-.867-2.746-2.144-5.588-4.216-8.406-6.287-.169-.12-.241-.627-.627-.265-.313.313-.216.626.12.867.772.53 1.06 1.445 1.205 2.192.217 1.084 1.253 1.903 1.18 2.794-.096 1.204.892 1.397 1.205 2.096.602 1.325 1.782 2.529 1.18 4.215-.217.626.386.506.627.723.722.674 1.902 1.084 1.83 2.312-.072 1.132-.698 1.855-1.782 2.313-1.084.457-2.096 1.083-3.156 1.637.891.241 1.71.17 2.505.145 2.915-.169 5.565 2.288 5.275 5.058-.048.434-.168 1.036.362 1.229.626.241.674-.386.915-.747.241-.385.578-.722.843-1.084 1.975-2.674 3.469-2.649 5.902-.433 1.132 1.035 1.325 2.649 2.866 3.589l.024.024ZM207.299 43.286c.12-1.132.433-2.264.361-3.372-.144-1.975 1.229-2.168 2.578-2.385.819-.144 1.276.458 1.469 1.157.506 1.806.65 3.637.723 5.516.12 2.529.939 4.938 2.095 7.13 1.036 1.999 3.107 2.625 5.251 2.77.795.048 1.831-.169 2.12.698.313.964.819 1.927-.265 3.132-1.301 1.445-1.566 3.54-2.072 5.444-1.011 3.902-1.3 7.948-2.456 11.803-.29.987-.964 2.336-2.457 2.12-2.433-.362-2.77-.868-2.963-2.988-.241-2.529-.819-4.986-1.518-7.419-.626-2.288-2.312-3.589-4.336-4.576-2.505-1.229-4.239-3.132-5.082-5.83-.169-.554-.145-1.228.482-1.18 2.047.12 3.276-.819 3.926-2.65 1.084-3.01 2.072-6.07 2.12-9.321l.024-.049Zm-.843 14.55c3.589 1.95 7.033 3.709 7.852 8.093.314-2.553 1.253-4.89 1.831-7.323.12-.554-.096-1.06-.602-1.3-2.288-1.084-4.071-2.722-5.516-5.203-.578 2.529-1.927 4.167-3.541 5.732h-.024ZM84.668 9.897c-.53-1.325.193-2.602.41-3.854.217-1.301 0-2.578.217-3.854.168-.94.337-1.952 1.59-2.192.963-.193 3.058 1.95 2.697 3.107-.385 1.276.458 2.77-.722 3.902-.12.12-.073.626.072.819 1.517 2.047 1.686 4.673 2.987 6.793.265.457.457.65 1.06.53.89-.169 1.806-.362 2.746.192.939.53 1.18 1.301.794 2.12-2.697 5.974-4.119 12.309-5.708 18.62-.29 1.084-.627 2.601-2.144 2.674-1.71.072-2.53-1.036-2.698-3.108-.361-3.878-1.132-7.66-2.963-11.104-.891-1.686-2.264-3.228-4.046-4.023-2.072-.94-1.759-2.866-2.168-4.48-.169-.626 1.06-1.204 1.638-.867.096.048.264.12.313.072 1.445-1.084 4.215-.217 4.48-3.035.024-.337.193-.578.482-.65.94-.217 1.3-.723 1.011-1.687l-.048.025Zm3.927 16.716c1.156-2.36 1.662-4.624 2.432-6.768.217-.602-.144-1.084-.602-1.253-1.47-.626-2.433-1.734-3.203-3.059-.41-.674-.988-.77-1.253-.024-.289.795-.867 1.204-1.373 1.758-.747.82-1.012 1.494.24 2.481 2.048 1.614 3.012 4.071 3.783 6.865h-.024ZM6.022 167.388c-.434-1.565-1.253-2.746-2.072-3.878-.722-1.011-.674-2.288-1.349-3.324-.41-.626-.072-1.373.554-1.806.65-.458 1.325-.603 2.048-.073.698.53 1.204 1.253 1.638 1.976.554.963.795 1.228 1.541.096 1.012-1.469 2.602-1.204 3.373.506.554-.723 1.06-1.397 1.878-1.903 1.47-.891 2 .313 2.53 1.012.385.505.843 1.686-.579 1.951-.264.048-.264.24-.216.361.963 1.999-1.084 2.529-1.927 3.42-.434.458-.554.771-.578 1.229a.924.924 0 0 0 .963 1.012c.843-.049 1.614.481 2.313.409 2.047-.241 2.48 1.349 2.432 2.505-.072 1.494-1.517 1.759-2.89 1.494-.313-.049-.65 0-.988 0 .747 2.071.506 2.746-1.204 3.589-2.024.987-2.553.746-3.469-1.614-.12-.313-.168-.675-.289-.988-.722-1.806-1.276-1.903-2.529-.433-.337.385-.65.843-1.036 1.132-.602.433-1.228.963-2.047.578-.747-.361-1.35-.867-1.35-1.807 0-.457.194-1.084-.505-.987-1.445.216-2.144-.771-2.216-1.759-.072-.939.988-1.662 1.807-2.216 1.228-.843 2.673-.554 4.215-.506l-.048.024ZM134.867 49.45c1.542.12 2.577 1.107 3.18 2.336 1.951 3.878 4.022 7.684 5.684 11.706 1.157 2.819 2.337 5.66 3.734 8.407.963 1.879 1.975 3.661 3.276 5.3 1.469 1.854 1.325 2.649-.482 3.95-1.084.77-2.577.265-3.493-1.398-1.108-2.023-2.336-3.998-3.203-6.166-.313-.747-1.132-1.349-1.59-2.168-1.012-1.758-1.927-3.661-2.987-5.275-1.517-2.336-2.505-4.914-3.878-7.274-1.108-1.928-1.638-4.095-2.192-6.24-.361-1.348.843-3.227 1.927-3.155l.024-.024ZM76.912 64.001c-.482 1.542-.723 3.42-.217 5.348.265.963.554 1.59 1.71 1.662 2.072.12 2.795 1.397 1.735 3.18-1.518 2.529-2.216 5.37-3.252 8.093-.313.843-.77 1.71-1.397 2.312-1.132 1.132-3.035.29-3.469-1.373-.626-2.36-.746-4.841-1.782-7.082-.434-.915-.675-2.047-1.879-2.24-1.18-.192.169-1.59-1.108-1.95-1.3-.362.072-1.277.024-1.952-.024-.53.602-.65.434-1.349-.241-.94.867-1.204 1.493-1.204 2.192-.048 2.602-.41 2.65-2.89 0-1.133.216-2.072 1.3-2.915.94-.723 1.88-.675 2.554-.362.843.362 1.276 1.421 1.204 2.77v-.048ZM113.381 109.428c-1.181-.217-2.409-.361-2.698-1.758-.289-1.421.409-2.24 1.686-2.915 3.396-1.782 7.25-1.999 10.767-3.396 2.024-.795 4.167-1.614 6.287-1.783.988-.072 1.397-1.06 2.433-.819.939.217 1.951.458 3.011.097.964-.338 1.734-.675 2.072-1.686.529-1.566 1.878-1.277 2.89-.964.819.241 1.229 1.156 1.132 2.24-.313 3.132-2.77 3.927-5.106 4.914-2.915 1.229-6.071 1.542-9.106 2.313-3.757.963-7.563 1.662-11.128 3.251-.723.314-1.542.362-2.264.53l.024-.024ZM135.011 86.98c-.554-.336-.819.025-1.373.483-.77.65-1.782.192-2.649-.313-3.421-1.976-7.034-3.59-10.743-4.963a397.265 397.265 0 0 0-10.623-3.805c-1.373-.482-2.12-1.325-1.855-2.746.241-1.277 1.662-2.144 3.108-1.71 2.938.89 5.949 1.541 8.767 2.986 1.735.891 3.734 1.494 5.541 2.385 1.83.915 3.854 1.397 5.636 2.288 2.481 1.253 5.299.82 7.805 2.048 1.18.578 1.156 1.47 1.084 2.095-.097.892-.964 1.831-2.024 1.494-.891-.29-1.71-.145-2.698-.217l.024-.024ZM231.868 100.377c-.409-.722.747-.506 1.036-.915 1.108-1.542 2.288-3.035 3.372-4.577.434-.626.891-1.95.602-3.107-.217-.94.289-1.759.482-2.626.289-1.276 1.469-1.084 2.216-1.59.578.892 2.023 1.205 1.927 2.53-.096 1.252-.217 2.577-1.228 3.517-.217.192-.506.337-.289.65.168.24.433.385.602-.048.53.313.53.94.65 1.42.265 1.06.964 1.543 1.831 2.072.891.554 2.023 1.253 1.349 2.746-.94 2.072-1.807 4.192-2.722 6.263-.217.458-.506.867-.53 1.421-.072 1.084-.867 1.422-1.783 1.614-.963.193-1.613-.192-1.999-1.036-.289-.626-.506-1.276-.722-1.927-.675-1.999-2.289-3.059-3.927-4.143-.674-.433-.626-1.3-.891-2.312l.024.048Zm8.118.651c-.94.096-1.012-1.18-1.927-1.205-.579 0-.916.795-.868.843.554.554 1.108 1.253 1.976 1.205.265 0 .795-.169.819-.843ZM162.833 20.113c0 .29.024.723-.097 1.085-.385 1.06.313 1.252 1.036 1.252.891 0 1.783-.169 2.674-.265.987-.096 1.903.169 2.312 1.132.362.891-.385 1.373-.819 2.072-1.011 1.614-2.529 1.493-3.878 1.42-1.276-.047-1.325.555-1.108 1.277.506 1.542-.433 2.554-1.084 3.686-.217.361-.482.289-.867.217-.939-.193-1.975-.193-2.216-1.421-.072-.458-.096-.916-.12-1.373-.073-1.157-.217-2.048-1.759-2.216-1.036-.12-1.831-1.108-1.782-2.24.048-1.036.795-1.663 1.854-1.88 1.06-.216 1.59-.794 1.446-2.023-.097-.891.12-1.83.216-2.746.049-.313.073-.626.554-.747.579-.144.554-.216.338-.722-.024-.072-.121-.097-.193-.145.096-.048.217-.072.313-.144 1.325-.795 2.12-.482 2.698.987.337.867.361 1.783.458 2.794h.024ZM27.315 12.883c1.277 1.132 2.65 1.036 4.168.843 1.541-.193 1.637 1.541 2.216 2.48.505.796-.458 1.35-1.06 1.687-1.35.795-1.71 2.313-.53 3.276.722.578.77 1.421 1.204 2.096.482.722-.433 1.565-.626 1.517-2.048-.361-2.842 1.518-4.24 2.264-.819.434-1.42.097-1.999-.41-.53-.457-.433-.915-.096-1.517.361-.65-.241-1.445.144-2.192.024-.072-.36-.457-.578-.505-.602-.12 0 .36-.216.505-.627.506-1.229.265-1.855-.024-.916-.41-1.373-1.108-1.036-2.023.53-1.397.915-2.866 2.216-3.902.626-.506 1.3-1.301.506-2.289-.265-.337-.097-.65.217-.89.265-.194.361.071.554.192.265.168-.265.963.481.65.458-.193.603-.602.338-1.108-.049-.096.072-.313.168-.626l.024-.024ZM202.915 198.579c0-.41-.073-.819 0-1.205.289-1.276-.121-1.71-1.422-1.397-.77.193-1.758.53-1.228-1.036.144-.409-1.012-.481-.554-1.565.53-1.253 1.18-1.735 2.36-1.59.819.096 1.036-.048 1.108-.964.121-1.445.506-2.89 1.494-4.095.265-.337.433-.963.915-.264.675.987.867-1.205 1.686-.193.578.722-.361 1.252.049 1.734.626.747.481 1.638.313 2.337-.313 1.276.265 1.3 1.18 1.349 1.18.072 2.457.072 3.18 1.228.409.65.602 1.469.072 2.096-.843 1.011-1.951 1.638-3.372 1.373-1.205-.241-1.687.313-1.398 1.493.338 1.349.29 1.421-1.059 1.518-.241 0-.554.192-.699.385-.169.265-.072.53.289.65.386.121.554.386.386.795-.169.41-.506.41-.868.434-1.782.168-2.601-.843-2.505-3.156l.073.073ZM33.241 202.531c-1.132-.771-2.023-.049-2.818 1.035-.626.892-1.47.314-2.168.169-.578-.12-.698-.723-.77-1.349-.17-1.277.65-2.746-.627-3.83.963-1.084.096-3.011 2-3.83.794-.337 1.228-1.662 2.047-2.384.843-.747 1.71-.747 2.384.096.265.337.602.723.988.891 1.517.65 2.023 1.71.987 2.963-1.18 1.397-.433 2.65-.048 3.926.41 1.397-.24 2.337-1.95 2.313h-.025Z" fill="#000"/><path d="M142.792 179.623c-6.986-.337-12.55-2.553-17.295-6.576-2.963-2.529-2-6.889 1.011-8.72 1.253-.771 2.602-1.686 4.36-1.638 1.855.048 3.589.313 5.372.843 1.662.506 3.179 1.06 4.601 2.144 1.541 1.156 3.396 1.855 5.034 2.867 1.204.746 2.36 1.589 3.493 2.457 2.986 2.312 1.806 6.286-1.205 7.322-1.927.675-3.902 1.542-5.371 1.325v-.024Zm.12-3.035c.723.265 1.927-.217 3.131-.578a2.928 2.928 0 0 0 1.855-1.759c.289-.794-.722-.987-1.204-1.421-1.132-1.036-2.457-1.734-3.782-2.505-2.65-1.517-5.564-2.481-8.19-4.167-1.903-1.229-4.408-.699-6.503.602-1.687 1.06-1.903 2.578-.506 3.926 4.095 3.903 9.129 5.42 15.175 5.878l.024.024ZM94.376 165.724c-5.107-.77-10.117-1.951-14.646-4.624-1.95-1.157-3.227-2.891-3.637-5.179-.193-1.108 1.397-3.276 2.939-3.999 1.903-.891 3.974-1.132 6.022-1.373 6.335-.747 11.658 1.759 16.042 5.854 3.782 3.516 2.867 6.238-1.83 8.43-1.422.675-3.132 1.132-4.866.867l-.024.024Zm-8.672-12.067c-1.614-.169-3.06.12-4.456.674-.82.313-1.783.554-1.903 1.662-.12 1.108.674 1.59 1.421 2.144 3.107 2.24 6.769 2.939 10.358 3.806 2 .481 3.998.819 5.998.313 1.06-.265 2.384-.482 2.818-1.662.433-1.181-.867-1.735-1.397-2.529-.265-.41-.771-.675-1.18-.988-3.517-2.553-7.564-3.228-11.683-3.42h.024Z" fill="#000"/><g clip-path="url(#h)"><path d="m54.69 276.156 2.707-27.615 49.817-10.83 53.607 12.996-5.957 25.449-45.484-8.663-54.69 8.663Z" fill="url(#i)"/><path d="m22.5 88.36 3.294-12.623 1.646-4.939 3.293 14.818H45.55l-8.78 6.037 6.585 12.073-9.878-2.195v13.171l-7.135-7.683-7.683 6.586-1.098-9.33h-9.33l6.587-4.939L7.134 79.03l15.367 9.33Z" fill="url(#j)"/><path d="m82.32 21.406 3.293-4.39 7.134 4.39-4.39 12.623-6.037-12.623Z" fill="url(#k)"/><path d="m204.154 62.017 4.94-8.232 8.78 6.037-3.292 15.367-10.428-13.172Z" fill="url(#l)"/><path d="m234.887 104.275 1.647-2.744 1.646-.549 3.842 2.196-2.196 6.036-4.939-4.939Z" fill="url(#m)"/><g clip-path="url(#n)"><path d="M170.702 157.546c-5.604-4.084-11.872-6.742-18.497-8.507-4.06-1.087-8.263-1.136-12.441-1.039-3.942.097-7.907-.024-11.849.29-3.514.266-7.004.967-10.59.532-2.991-.363-5.674-1.378-8.215-2.828-4.132-2.344-7.859-5.365-12.038-7.661-5.153-2.852-10.187-5.873-16.265-6.453-4.322-.411-8.43-.218-12.062 2.489-1.496 1.112-3.467 1.33-4.725 3.19-.546.798-1.306 1.426-1.496 2.538-.546 3.094-1.092 6.187-1.78 9.232-1.592 6.937-1.972 13.849-.76 20.809 1.068 6.09 4.32 10.731 9.165 14.404 4.06 3.07 8.714 3.626 13.51 3.771 5.271.145 10.329-1.426 15.481-2.079 3.419-.435 6.862-.556 10.258-.145 3.395.435 6.316 2.272 9.26 3.891a38.79 38.79 0 0 1 6.791 4.761c2.065 1.813 4.274 3.577 6.695 4.786 5.153 2.61 10.733 3.552 17.167 3.504 5.343.314 10.614-1.499 15.173-5.51 2.493-2.2 4.749-4.52 5.509-8 .498-2.369 1.068-4.761 2.018-6.985 1.781-4.108 3.086-8.338 4.131-12.664 1.33-5.389-.071-9.135-4.44-12.326Zm-69.333 4.834c-.403 1.184-1.71 1.402-2.754 1.668-1.994.507-3.965.145-5.936-.314-3.538-.871-7.147-1.571-10.21-3.819-.76-.532-1.543-1.039-1.4-2.151.118-1.112 1.068-1.353 1.875-1.668 1.353-.555 2.802-.845 4.393-.676 4.036.193 8.025.87 11.492 3.432.403.29.902.58 1.163.99.546.798 1.805 1.354 1.377 2.538Zm47.251 13.703c-.285.798-.997 1.523-1.828 1.789-1.187.338-2.375.822-3.087.556-5.983-.459-10.946-1.958-14.959-5.897-1.401-1.354-1.187-2.876.499-3.94 2.066-1.305 4.511-1.812 6.411-.604 2.564 1.692 5.437 2.659 8.073 4.181 1.282.749 2.612 1.45 3.704 2.514.475.435 1.472.628 1.187 1.401Z" fill="#7514CF"/></g><path d="M185.451 266.003c.362 2.457-.891 5.252-2.746 7.203-2.577 2.722-6.07 4.215-10.141 3.107-4.263-1.156-7.852-3.469-11.2-6.239-.723-.602-1.566-1.011-2.168-1.782-.217-.289-.603-.627-1.06-.289-.386.289 0 .771-.048.915-.868 2.192-.41 4.601-1.108 6.817-.795 2.505-.844 5.131-1.349 7.684-.41 2.095-1.108 4.167-1.373 6.287-.53 4.071-1.47 8.045-1.903 12.14-.747 7.178-.386 14.308-.289 21.486.024 2.288.626 4.48.481 6.769a61.294 61.294 0 0 0 0 7.274c.338 6.504-1.83 12.213-5.901 17.054-2.577 3.059-6.046 5.035-10.141 5.902-3.276.698-6.6.289-9.804.722-4.311.578-8.551.362-12.742-.144-3.204-.386-6.504-.795-9.587-2.288-2.457-1.205-5.275-1.711-7.973-2.457-5.974-1.662-11.972-3.18-17.945-4.77-4.264-1.132-8.359-2.89-12.574-4.239-3.613-1.156-7.274-2.12-10.888-3.252a47.745 47.745 0 0 1-10.14-4.504c-2.987-1.783-5.83-3.854-7.564-6.914-1.325-2.336-1.83-5.034-1.229-7.756.916-4.143 2.41-8.117 3.638-12.14a352.204 352.204 0 0 0 2.529-8.599c1.276-4.577 2.939-9.033 4.263-13.61 1.036-3.565 2.216-7.082 2.746-10.767.313-2.192 1.229-4.215 1.446-6.431a171.432 171.432 0 0 1 2.986-18.524c.314-1.493-.602-1.469-1.469-1.108-2.794 1.18-5.757 1.734-8.623 2.602-3.276.987-6.552 2.143-10.02 2.36-2.795.193-5.854-1.71-6.817-4.456-.482-1.397-1.036-2.794-1.325-4.24-.747-3.685 1.156-6.046 4.72-8.262a115.657 115.657 0 0 1 8.89-5.034c2.191-1.108 4.552-1.903 6.84-2.842 4.673-1.975 9.394-3.878 14.212-5.492 3.18-1.06 6.431-1.927 9.635-2.891 4.528-1.373 9.274-1.59 13.85-2.577 1.927-.41 4.071-.121 6.022-.578 2.819-.675 5.685-.627 8.503-1.156a6.522 6.522 0 0 1 1.205-.121c6.527 0 13.055-.433 19.559.145 4.215.361 8.382 1.059 12.549 1.782 3.349.578 6.721 1.084 9.949 2.24 2.962 1.06 6.166 1.614 8.936 2.987 2.818 1.397 5.998 2.144 8.503 4.336.771.674 2.096.988 3.18 1.542 2.168 1.108 4.191 2.384 5.973 3.95 2.626 2.312 5.155 4.793 7.395 7.491 2.385 2.843 4.914 5.54 6.841 8.768 2.096 3.517 3.541 7.178 3.324 11.924l-.048-.025Zm-91.918-20.305c-.988-.603-1.542.361-2.337.409-5.95.289-11.779 1.469-17.608 2.481-2.89.482-5.781 1.084-8.671 1.71-1.928.41-3.758 1.229-5.83 1.156-.722 0-1.541.53-1.638 1.783-.265 3.613-.554 7.25-1.83 10.719-.338.915-.12 2.023-.169 3.035 0 .361.048.771.53.626 2.12-.626 4.553-.409 6.455-1.349 2.89-1.397 6.07-1.397 9.01-2.481 2.143-.77 4.672-.433 7.033-.674 2.433-.241 4.914-.41 7.323-.771 7.756-1.156 15.488-.241 23.196.169 2.409.12 4.817.289 7.202.385 2.77.121 5.637-.144 8.334.386 4.168.819 8.359 1.228 12.598 1.493 3.252.193 6.335 1.228 9.274 2.409 2.192.867 4.625 1.349 6.576 2.842.385.289 1.156.458 1.228-.506.362-4.793 1.759-9.442 1.879-14.308.048-1.975-.746-2.698-1.975-3.541-2.264-1.541-4.769-2.673-7.419-3.179-5.058-.964-10.117-2.096-15.271-2.65-4.818-.506-9.587-1.301-14.429-1.397-4.818-.096-9.659-.337-14.477.289-3.01.385-6.046.674-8.984.988v-.024ZM55.763 395.76c-.578.818.072 1.252-.048 1.83-2.36-.458-4.697-.674-7.058-.722-1.108-.025-2.192-.603-2.866-1.205-2.072-1.879-4.697-2.818-6.793-4.625-1.903-1.638-2.553-3.733-3.155-5.877-.314-1.084 2.071-3.661 3.588-4.456 1.566-.819 3.325-.843 4.866-1.397 1.88-.651 3.782-.819 5.685-1.181 1.421-.289 2.89-.65 4.288-.506 3.781.41 7.467-.433 11.176-.65 3.132-.193 6.36-.265 9.467-.915.53-.121.867-.313.963.409.024.217.169.338.337.241 3.517-2.168 7.492-.722 11.225-1.349 3.156-.506 6.48-.265 9.732-.385 1.903-.048 4.046-.121 5.805.337 1.734.458 2.963-.891 4.625-.265 1.108.434 2.649-.506 3.709.699.097.12.097.144.241.072 2.457-1.397 4.866-.265 7.299.144.794.145 1.565-.385 2.481-.409 3.227-.048 6.407.385 9.587.626 1.782.121 3.589.506 5.395.337.602-.048 1.325-.192 1.301.844 0 .457.409.602.698.289 1.253-1.349 2.481-.482 3.686 0 .313.12.626.313.963.289 4.047-.506 7.684 1.204 11.49 1.999 2.048.433 3.637 1.301 5.227 2.625 1.951 1.638 2.168 3.565.699 5.637-1.59 2.216-3.71 3.372-6.215 4.095-1.686.482-3.324 1.397-4.962 1.758-2.312.506-4.649.94-6.913 1.59-3.107.891-6.311 1.277-9.442 1.566-2.843.265-5.709 1.541-8.648.554-.409-.145-.53.313-.674.289-.651-.121-1.133 1.421-1.927.096-.241-.385-.651.843-1.133.699-2.842-.747-5.54.506-8.262.433a109.785 109.785 0 0 0-6.286.024c-3.445.121-6.865.41-10.31.458-.819 0-2.12.843-2.553-.747 0-.048-.241-.096-.313-.048-3.204 1.855-6.649.337-9.949.482-1.975.096-4.143.506-6.19-.072-2.048-.554-4.143-.145-6.239-.241-1.638-.072-3.204-.675-4.89-.747-2.433-.096-4.865-.458-7.298-.626-1.205-.072-2.024-.602-2.385-2.048l-.024.049Zm51.668.867c.072-1.397-.795-2.433-1.999-2.505-1.277-.073-1.903.867-1.975 1.806-.097 1.06.216 2.433 1.734 2.337.963-.049 2.288-.049 2.24-1.614v-.024Zm-13.85-16.356c.77.169 1.493.048 1.565-.819.073-.771-.65-1.012-1.276-1.084-.892-.12-1.157.554-1.301 1.229-.193.963.578.578.987.674h.025Zm50.849 5.926c-1.253-.073-2.289-.169-3.324-.193-.362 0-.843.169-.603.747.121.289.506.819.627.65.843-1.108 2.36 0 3.3-1.228v.024ZM81.296 388.1c-.12-.53-.578-.964-1.06-1.108-.289-.073-.867.409-.747.915.097.409.048 1.036.867 1.036.603 0 .771-.338.964-.843h-.024ZM171.167 111.742c-1.397 1.084-2.216-.265-3.035-.77-1.975-1.181-3.734-2.698-5.588-4.047-.771-.554-1.711-.506-2.578-.626-.915-.121-1.18-.627-1.59-1.422-.77-1.445-.818-2.914-1.083-4.432-.145-.915-.868-1.686-.554-2.794.722-2.36 3.372-5.588 5.877-5.082 3.228.674 6.672 1.445 8.599 4.335.723 1.084 1.59 1.253 2.409 1.759 2.818 1.782 5.805 3.227 8.527 5.251 1.445 1.06 3.685 1.686 5.299 2.794 2.409 1.662 5.155 2.722 7.419 4.649.892.771 2.144 1.108 3.156 1.758 2.842 1.831 5.323 4.143 8.069 6.143 1.494 1.084 3.18 1.879 4.649 3.059 2.867 2.336 5.902 4.432 8.792 6.72 2.65 2.096 5.564 3.878 8.383 5.757 2.264 1.494 4.287 3.373 6.479 5.035 1.855 1.397 3.806 2.721 5.54 4.215 2.505 2.168 5.396 3.734 7.997 5.685 1.879 1.397 3.999 2.673 5.998 3.974 1.325.867 2.794 1.566 3.999 2.722 1.06 1.012 2.288 1.999 3.589 2.722 1.758.987 3.3 2.264 4.649 3.637 1.301 1.325 3.083 1.831 4.312 3.204 1.252 1.445 3.275 2.168 4.456 3.517 1.59 1.83 3.709 2.866 5.419 4.504 1.759 1.686 3.373 3.493 5.107 5.203.964.963 1.108 2.192 1.012 3.276-.313 3.011-2.096 5.323-4.264 7.347-.771.698-4.6.385-5.949-.265-2.722-1.277-5.324-2.722-7.805-4.408-1.83-1.229-3.709-2.385-5.492-3.662-3.974-2.866-8.334-5.154-12.26-8.117-3.084-2.361-6.504-4.312-9.467-6.769-3.348-2.77-6.913-5.227-10.165-8.093a43.386 43.386 0 0 0-4.48-3.469c-1.614-1.132-2.915-2.722-4.529-3.758-1.493-.963-2.577-2.36-4.167-3.227-1.734-.94-3.107-2.53-4.769-3.662-1.156-.795-2.24-1.71-3.372-2.409-2.915-1.782-5.782-3.709-8.359-5.877-1.927-1.638-4.697-2.264-5.901-4.793-1.494.216-2.313-.964-3.3-1.711-3.132-2.36-6.191-4.841-9.226-7.322-.554-.458-.939-1.132-1.277-1.783-.144-.241-.168-.481-.481-.602-3.493-1.445-6.215-4.047-9.202-6.215-.747-.529-.626-1.108-.795-1.902l-.048-.049Zm56.269 29.484c-.337-.699-.843-1.422-1.59-1.927-2.457-1.614-4.962-3.156-7.419-4.818-1.782-1.228-3.613-2.433-5.203-3.878-2.047-1.879-4.263-3.613-6.504-5.227-2.143-1.542-4.287-3.18-6.551-4.577-3.084-1.903-5.781-4.311-8.937-6.19-3.131-1.855-6.504-3.324-9.442-5.516-2.626-1.951-5.661-3.276-8.455-4.986-2.891-1.735-5.516-3.758-8.118-5.878-.746-.602-1.469-1.806-2.577-.024-.771 1.253-1.204 2.168-.048 3.18.915.843 1.951 1.565 3.035 2.216.602.361.795.578.409 1.228-.144.241-.53.675-.024 1.06.265.193.723.217.795.048.699-1.638 1.518-.217 2.264-.12 1.012.144 1.253 1.325 2 1.614 2.746 1.084 4.576 3.42 7.13 4.817 2.384 1.301 4.335 3.348 6.551 4.89 2.385 1.638 4.312 3.758 6.576 5.516 2.626 2.023 5.179 4.167 7.925 6.022 1.397.963 2.891 1.831 4.312 2.794 1.855 1.253 3.854 2.337 5.54 3.758 2.409 2.047 5.083 3.733 7.443 5.805 1.614 1.421 3.686 2.144 5.179 3.782.675.746 2.096 1.854 2.794 1.325 1.446-1.157 2.337-2.939 2.963-4.963l-.048.049Zm38.131 27.893c.024 2.12 1.156 4.095-.289 6.143-.265.361-1.229 1.132-.434 1.71 2.385 1.734 4.962 3.203 7.395 4.914 1.782 1.252 3.974 1.927 5.877 3.107.554.337 1.397.482 2.048-.458 1.349-1.854 1.228-3.661-.675-5.203-3.781-3.059-7.828-5.757-11.514-8.984-.578-.506-1.373-1.494-2.432-1.229h.024Zm-33.892-24.834a9.377 9.377 0 0 1-2.553 3.998c-1.084 1.012-.963 1.735.241 2.554 1.541 1.06 2.794 2.505 4.408 3.3.939-1.47 2.529-2.698 3.059-4.673.241-.916.41-1.301-.554-1.855-1.566-.94-2.987-2.144-4.601-3.324ZM147.585 201.106c-6.528.048-12.188-.892-17.415-3.493-2.457-1.228-4.697-2.963-6.793-4.769a39.366 39.366 0 0 0-6.889-4.746c-2.987-1.614-5.95-3.468-9.394-3.878-3.445-.433-6.937-.289-10.406.145-5.251.65-10.382 2.216-15.705 2.071-4.866-.144-9.587-.698-13.706-3.757-4.914-3.638-8.214-8.287-9.298-14.333-1.228-6.961-.843-13.826.77-20.739.7-3.035 1.277-6.142 1.831-9.226.193-1.084.94-1.71 1.518-2.529 1.277-1.83 3.276-2.071 4.793-3.179 3.686-2.674 7.829-2.867 12.237-2.457 6.166.578 11.273 3.589 16.5 6.431 4.24 2.288 8.021 5.299 12.213 7.636 2.577 1.445 5.299 2.457 8.334 2.818 3.637.434 7.178-.265 10.743-.53 4.023-.313 8.021-.192 12.02-.289 4.215-.096 8.503-.072 12.622 1.012 6.72 1.758 13.079 4.408 18.764 8.503 4.432 3.179 5.877 6.889 4.528 12.285-1.083 4.311-2.408 8.527-4.191 12.621-.963 2.192-1.541 4.601-2.071 6.962-.747 3.493-3.059 5.781-5.589 7.973-4.625 3.998-9.972 5.829-15.392 5.516l-.024-.048Zm-87.149-38.589a17.59 17.59 0 0 0 .169 4.047c.843 5.372 3.251 9.78 7.756 12.935.843.578 1.59 1.325 2.48 1.783 3.951 2.023 8.19 2.216 12.502 2.023 1.927-.096 3.758-.578 5.637-.819 4.312-.554 8.6-1.397 12.983-1.518 3.782-.096 7.491.217 11.008 1.783 4.601 2.023 8.913 4.552 12.743 7.828 4.528 3.854 9.635 6.456 15.584 7.154 4.36.506 8.816.964 13.056-.505 4.841-1.687 8.696-4.842 10.791-9.66.891-2.023 1.301-4.263 2.048-6.359 1.878-5.179 3.805-10.333 4.913-15.753.41-2.072.073-3.902-1.71-5.396-1.686-1.421-3.348-2.818-5.299-3.854-3.661-1.975-7.467-3.637-11.345-5.058-5.733-2.096-11.731-1.807-17.681-1.951-5.949-.145-11.875.747-17.8.939-4.192.145-8.022-1.06-11.683-2.842-4.071-1.975-7.443-5.107-11.442-7.275-4.769-2.601-9.394-5.419-14.886-6.407-4.649-.843-8.84-.506-13.104 2.096-2.794 1.71-4.07 3.324-4.432 6.696-.722 6.721-3.227 13.224-2.312 20.137l.024-.024ZM35.481 100.731c-.12 3.54.41 6.865-.096 10.165-.217 1.445-.362 2.842-2.216 3.179-1.903.361-2.794-.626-3.59-2.168-.818-1.614-1.83-3.131-2.794-4.673-.24-.361-.578-1.132-.89-.891-.507.409-1.205.578-1.543 1.325-1.06 2.336-3.083 3.83-5.275 4.914-1.493.722-2.48-.241-2.866-1.831-.482-2.072 0-4.095.096-6.118.073-1.614-.867-2.024-1.999-1.711-2.264.627-4.336-.144-6.48-.457-1.734-.241-2.625-1.494-3.01-3.06-.241-.939-.025-1.806 1.011-2.432 1.638-.988 3.348-1.807 5.179-2.24 1.59-.386 1.566-1.157 1.012-2.289-1.494-2.962-3.035-5.901-4.48-8.888-1.205-2.505-2.313-5.082-3.47-7.612-.312-.698-.288-1.445-.192-2.168.12-.77 1.06-1.517 1.325-1.276 1.18 1.084 2.264-.458 3.42.12 1.132.578 2.096 1.373 3.084 2.12 2.77 2.047 5.54 4.119 8.238 6.263 1.035.843 1.348.505 1.493-.578.313-2.433 1.3-4.746 1.71-7.13.29-1.638 1.012-3.132 1.18-4.794.12-1.156 1.951-2.939 3.035-2.939 1.542 0 2.24 1.06 2.554 2.337.915 3.806 2.264 7.491 2.65 11.418.144 1.445.602 2.697 2.673 2.553 1.614-.12 3.252-.458 4.914-.145 2.072.41 4.143-.433 6.19.024.868.193 1.831.193 2.169 1.277.337 1.132.409 2.216-.723 3.011-1.927 1.373-4.215 1.975-6.335 2.963-.386.192-.386-.048-.506-.362-.169-.385-.843-.216-.819-.048.217.94-1.132 1.59-.145 2.843 1.687 2.143 3.734 3.974 5.107 6.359.337.602.819 1.132 1.108 1.734.554 1.132 1.614 2.313.482 3.613-1.18 1.349-2.867 1.566-4.408.988-1.903-.699-3.686-1.759-5.516-2.674a42.21 42.21 0 0 1-1.325-.698l.048-.024Zm-4.07 5.588c-.434-2.457-.218-4.721-.675-6.962-.313-1.517.192-2.962 1.614-3.757 1.397-.771 2.794-.048 3.974.626.723.41 1.445.867 2.216 1.204.217.097.337.771.747.217.217-.289.144-.506-.048-.746a29.046 29.046 0 0 1-1.06-1.35c-.964-1.204-2-2.384-2.843-3.66-1.18-1.783-.89-3.132.723-4.505.506-.434 1.205-.65 1.542-1.325a6.303 6.303 0 0 0-1.903 0c-4.745.723-6.504-.723-7.106-5.54-.24-1.903-.77-3.758-1.18-5.637h-.434c-.024 3.011-1.325 5.757-1.71 8.72-.169 1.35-1.036 2.65-2.264 3.204-1.229.53-2.53.024-3.662-.867-2.746-2.144-5.588-4.216-8.406-6.287-.169-.12-.241-.626-.627-.265-.313.313-.216.626.12.867.772.53 1.06 1.445 1.205 2.192.217 1.084 1.253 1.903 1.18 2.794-.096 1.204.892 1.397 1.205 2.096.602 1.325 1.782 2.529 1.18 4.215-.217.626.386.506.627.723.722.674 1.902 1.084 1.83 2.312-.072 1.132-.698 1.855-1.782 2.313-1.084.457-2.096 1.084-3.156 1.638.891.24 1.71.168 2.505.144 2.915-.169 5.565 2.288 5.275 5.058-.048.434-.168 1.036.362 1.229.626.241.674-.385.915-.747.241-.385.578-.722.843-1.084 1.975-2.673 3.469-2.649 5.902-.433 1.132 1.035 1.325 2.649 2.866 3.589l.024.024ZM207.299 43.286c.12-1.132.433-2.264.361-3.372-.144-1.975 1.229-2.168 2.578-2.385.819-.144 1.276.458 1.469 1.157.506 1.806.65 3.637.723 5.516.12 2.529.939 4.938 2.095 7.13 1.036 1.999 3.107 2.625 5.251 2.77.795.048 1.831-.169 2.12.698.313.964.819 1.927-.265 3.132-1.301 1.445-1.566 3.54-2.072 5.444-1.011 3.902-1.3 7.948-2.456 11.803-.29.987-.964 2.336-2.457 2.12-2.433-.362-2.77-.868-2.963-2.988-.241-2.529-.819-4.986-1.518-7.419-.626-2.288-2.312-3.589-4.336-4.576-2.505-1.229-4.239-3.132-5.082-5.83-.169-.554-.145-1.228.482-1.18 2.047.12 3.276-.819 3.926-2.65 1.084-3.01 2.072-6.07 2.12-9.321l.024-.049Zm-.843 14.55c3.589 1.95 7.033 3.709 7.852 8.093.314-2.553 1.253-4.89 1.831-7.323.12-.554-.096-1.06-.602-1.3-2.288-1.084-4.071-2.722-5.516-5.203-.578 2.529-1.927 4.167-3.541 5.732h-.024ZM84.668 9.897c-.53-1.325.193-2.602.41-3.854.217-1.301 0-2.578.217-3.854.168-.94.337-1.952 1.59-2.192.963-.193 3.058 1.95 2.697 3.107-.385 1.276.458 2.77-.722 3.902-.12.12-.073.626.072.819 1.517 2.047 1.686 4.673 2.987 6.793.265.457.457.65 1.06.53.89-.169 1.806-.362 2.746.192.939.53 1.18 1.301.794 2.12-2.697 5.974-4.119 12.309-5.708 18.62-.29 1.084-.627 2.601-2.144 2.674-1.71.072-2.53-1.036-2.698-3.108-.361-3.878-1.132-7.66-2.963-11.104-.891-1.686-2.264-3.228-4.046-4.023-2.072-.94-1.759-2.866-2.168-4.48-.169-.626 1.06-1.204 1.638-.867.096.048.264.12.313.072 1.445-1.084 4.215-.217 4.48-3.035.024-.337.193-.578.482-.65.94-.217 1.3-.723 1.011-1.687l-.048.025Zm3.927 16.716c1.156-2.36 1.662-4.624 2.432-6.768.217-.602-.144-1.084-.602-1.253-1.47-.626-2.433-1.734-3.203-3.059-.41-.674-.988-.77-1.253-.024-.289.795-.867 1.204-1.373 1.758-.747.82-1.012 1.494.24 2.481 2.048 1.614 3.012 4.071 3.783 6.865h-.024ZM6.022 167.388c-.434-1.565-1.253-2.746-2.072-3.878-.722-1.011-.674-2.288-1.349-3.324-.41-.626-.072-1.373.554-1.806.65-.458 1.325-.603 2.048-.073.698.53 1.204 1.253 1.638 1.976.554.963.795 1.228 1.541.096 1.012-1.469 2.602-1.204 3.373.506.554-.723 1.06-1.397 1.878-1.903 1.47-.891 2 .313 2.53 1.012.385.505.843 1.686-.579 1.951-.264.048-.264.24-.216.361.963 1.999-1.084 2.529-1.927 3.42-.434.458-.554.771-.578 1.229a.924.924 0 0 0 .963 1.012c.843-.049 1.614.481 2.313.409 2.047-.241 2.48 1.349 2.432 2.505-.072 1.494-1.517 1.759-2.89 1.494-.313-.049-.65 0-.988 0 .747 2.071.506 2.746-1.204 3.589-2.024.987-2.553.746-3.469-1.614-.12-.313-.168-.675-.289-.988-.722-1.806-1.276-1.903-2.529-.433-.337.385-.65.843-1.036 1.132-.602.433-1.228.963-2.047.578-.747-.361-1.35-.867-1.35-1.807 0-.457.194-1.084-.505-.987-1.445.216-2.144-.771-2.216-1.759-.072-.939.988-1.662 1.807-2.216 1.228-.843 2.673-.554 4.215-.506l-.048.024ZM134.867 49.453c1.542.12 2.577 1.108 3.18 2.337 1.951 3.878 4.022 7.684 5.684 11.706 1.157 2.818 2.337 5.66 3.734 8.407.963 1.879 1.975 3.661 3.276 5.3 1.469 1.854 1.325 2.649-.482 3.95-1.084.77-2.577.264-3.493-1.398-1.108-2.023-2.336-3.998-3.203-6.166-.313-.747-1.132-1.349-1.59-2.168-1.012-1.758-1.927-3.661-2.987-5.275-1.517-2.337-2.505-4.914-3.878-7.275-1.108-1.927-1.638-4.095-2.192-6.238-.361-1.35.843-3.228 1.927-3.156l.024-.024ZM76.912 64.001c-.482 1.542-.723 3.42-.217 5.348.265.963.554 1.59 1.71 1.662 2.072.12 2.795 1.397 1.735 3.18-1.518 2.529-2.216 5.37-3.252 8.093-.313.843-.77 1.71-1.397 2.312-1.132 1.132-3.035.29-3.469-1.373-.626-2.36-.746-4.841-1.782-7.082-.434-.915-.675-2.047-1.879-2.24-1.18-.192.169-1.59-1.108-1.95-1.3-.362.072-1.277.024-1.952-.024-.53.602-.65.434-1.349-.241-.94.867-1.204 1.493-1.204 2.192-.048 2.602-.41 2.65-2.89 0-1.133.216-2.072 1.3-2.915.94-.723 1.88-.675 2.554-.362.843.362 1.276 1.421 1.204 2.77v-.048ZM113.381 109.432c-1.181-.217-2.409-.361-2.698-1.758-.289-1.421.409-2.24 1.686-2.915 3.396-1.782 7.25-1.999 10.767-3.396 2.024-.795 4.167-1.614 6.287-1.783.988-.072 1.397-1.06 2.433-.819.939.217 1.951.458 3.011.097.964-.338 1.734-.675 2.072-1.687.529-1.565 1.878-1.276 2.89-.963.819.24 1.229 1.156 1.132 2.24-.313 3.132-2.77 3.926-5.106 4.914-2.915 1.228-6.071 1.542-9.106 2.312-3.757.964-7.563 1.662-11.128 3.252-.723.313-1.542.362-2.264.53l.024-.024ZM135.011 86.98c-.554-.336-.819.025-1.373.483-.771.65-1.783.192-2.65-.313-3.42-1.976-7.033-3.59-10.743-4.963a397.197 397.197 0 0 0-10.622-3.805c-1.373-.482-2.12-1.325-1.855-2.746.241-1.277 1.662-2.144 3.107-1.71 2.939.89 5.95 1.541 8.768 2.986 1.734.891 3.734 1.494 5.54 2.385 1.831.915 3.854 1.397 5.637 2.288 2.481 1.253 5.299.82 7.804 2.048 1.18.578 1.156 1.47 1.084 2.095-.096.892-.963 1.831-2.023 1.494-.892-.29-1.711-.145-2.698-.217l.024-.024ZM231.868 100.373c-.409-.722.747-.506 1.036-.915 1.108-1.542 2.288-3.035 3.372-4.577.434-.626.891-1.95.602-3.107-.217-.94.289-1.758.482-2.626.289-1.276 1.469-1.084 2.216-1.59.578.892 2.023 1.205 1.927 2.53-.096 1.252-.217 2.577-1.228 3.517-.217.192-.506.337-.289.65.168.24.433.385.602-.048.53.313.53.94.65 1.421.265 1.06.964 1.542 1.831 2.072.891.553 2.023 1.252 1.349 2.746-.94 2.071-1.807 4.191-2.722 6.262-.217.458-.506.867-.53 1.421-.072 1.084-.867 1.422-1.783 1.614-.963.193-1.613-.192-1.999-1.035-.289-.627-.506-1.277-.722-1.927-.675-2-2.289-3.06-3.927-4.144-.674-.433-.626-1.3-.891-2.312l.024.048Zm8.118.651c-.94.096-1.012-1.18-1.927-1.205-.579 0-.916.795-.868.843.554.554 1.108 1.253 1.976 1.205.265 0 .795-.169.819-.843ZM162.832 20.113c0 .29.024.723-.096 1.085-.386 1.06.313 1.252 1.036 1.252.891 0 1.782-.169 2.673-.265.988-.096 1.903.169 2.313 1.132.361.891-.386 1.373-.819 2.072-1.012 1.614-2.529 1.493-3.878 1.42-1.277-.047-1.325.555-1.108 1.277.505 1.542-.434 2.554-1.084 3.686-.217.361-.482.289-.867.217-.94-.193-1.976-.193-2.217-1.421-.072-.458-.096-.916-.12-1.373-.072-1.157-.217-2.048-1.758-2.216-1.036-.12-1.831-1.108-1.783-2.24.048-1.036.795-1.663 1.855-1.88 1.06-.216 1.59-.794 1.445-2.023-.096-.891.121-1.83.217-2.746.048-.313.072-.626.554-.747.578-.144.554-.216.337-.722-.024-.072-.12-.097-.193-.145.097-.048.217-.072.314-.144 1.324-.795 2.119-.482 2.697.987.338.867.362 1.783.458 2.794h.024ZM27.315 12.887c1.277 1.132 2.65 1.035 4.168.843 1.541-.193 1.637 1.541 2.216 2.48.505.796-.458 1.35-1.06 1.687-1.35.795-1.71 2.312-.53 3.276.722.578.77 1.421 1.204 2.096.482.722-.433 1.565-.626 1.517-2.048-.361-2.842 1.518-4.24 2.264-.819.434-1.42.097-1.999-.41-.53-.457-.433-.915-.096-1.517.361-.65-.241-1.445.144-2.192.024-.072-.36-.457-.578-.506-.602-.12 0 .362-.216.506-.627.506-1.229.265-1.855-.024-.916-.41-1.373-1.108-1.036-2.023.53-1.397.915-2.867 2.216-3.902.626-.506 1.3-1.301.506-2.289-.265-.337-.097-.65.217-.89.265-.194.361.071.554.192.265.168-.265.963.481.65.458-.193.603-.602.338-1.108-.049-.096.072-.313.168-.626l.024-.024ZM202.914 198.583c0-.41-.072-.819 0-1.205.289-1.277-.12-1.71-1.421-1.397-.771.193-1.759.53-1.229-1.036.145-.409-1.011-.481-.554-1.565.53-1.253 1.181-1.735 2.361-1.59.819.096 1.036-.048 1.108-.964.12-1.445.506-2.89 1.493-4.095.265-.337.434-.963.916-.265.674.988.867-1.204 1.686-.192.578.722-.361 1.252.048 1.734.626.747.482 1.638.313 2.337-.313 1.276.265 1.3 1.181 1.348 1.18.073 2.456.073 3.179 1.229.41.65.602 1.469.072 2.096-.843 1.011-1.951 1.638-3.372 1.373-1.204-.241-1.686.313-1.397 1.493.337 1.349.289 1.421-1.06 1.517-.241 0-.554.193-.698.386-.169.265-.073.53.289.65.385.121.554.386.385.795-.169.41-.506.41-.867.434-1.783.168-2.602-.843-2.505-3.156l.072.073ZM33.241 202.535c-1.132-.771-2.023-.049-2.818 1.035-.626.892-1.47.313-2.168.169-.578-.121-.698-.723-.77-1.349-.17-1.277.65-2.746-.627-3.83.963-1.084.096-3.011 2-3.83.794-.337 1.228-1.662 2.047-2.385.843-.746 1.71-.746 2.384.097.265.337.602.722.988.891 1.517.65 2.023 1.71.987 2.963-1.18 1.397-.433 2.649-.048 3.926.41 1.397-.24 2.337-1.95 2.313h-.025Z" fill="#000"/><path d="M142.792 179.619c-6.985-.337-12.55-2.553-17.295-6.576-2.963-2.529-1.999-6.889 1.012-8.72 1.252-.77 2.601-1.686 4.36-1.638 1.854.049 3.589.314 5.371.843 1.662.506 3.18 1.06 4.601 2.144 1.542 1.156 3.396 1.855 5.034 2.867 1.205.746 2.361 1.59 3.493 2.457 2.987 2.312 1.807 6.287-1.204 7.322-1.927.675-3.903 1.542-5.372 1.325v-.024Zm.121-3.035c.722.265 1.927-.217 3.131-.578a2.93 2.93 0 0 0 1.855-1.759c.289-.794-.723-.987-1.205-1.421-1.132-1.035-2.457-1.734-3.781-2.505-2.65-1.517-5.565-2.481-8.19-4.167-1.903-1.228-4.408-.698-6.504.602-1.686 1.06-1.903 2.578-.506 3.927 4.095 3.902 9.129 5.419 15.175 5.877l.025.024ZM94.375 165.728c-5.106-.77-10.117-1.951-14.645-4.624-1.951-1.157-3.228-2.891-3.637-5.179-.193-1.108 1.397-3.276 2.938-3.999 1.903-.891 3.975-1.132 6.022-1.373 6.335-.747 11.659 1.759 16.043 5.853 3.781 3.517 2.866 6.239-1.831 8.431-1.421.675-3.132 1.132-4.866.867l-.024.024Zm-8.671-12.068c-1.614-.168-3.06.121-4.457.675-.819.313-1.782.554-1.903 1.662-.12 1.108.675 1.59 1.422 2.144 3.107 2.24 6.768 2.938 10.357 3.806 2 .481 3.999.819 5.998.313 1.06-.265 2.385-.482 2.818-1.662.434-1.181-.867-1.735-1.397-2.53-.265-.409-.77-.674-1.18-.987-3.517-2.553-7.563-3.228-11.682-3.421h.024Z" fill="#000"/></g></g></g><defs><linearGradient id="l" x1="7.134" y1="17.016" x2="242.022" y2="17.016" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="c" x1="7.135" y1="17.016" x2="242.022" y2="17.016" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="e" x1="7.135" y1="17.016" x2="242.022" y2="17.016" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="f" x1="7.135" y1="17.016" x2="242.022" y2="17.016" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="i" x1="54.69" y1="237.711" x2="160.821" y2="237.711" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="j" x1="7.134" y1="17.016" x2="242.022" y2="17.016" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="k" x1="7.134" y1="17.016" x2="242.022" y2="17.016" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="d" x1="7.135" y1="17.016" x2="242.022" y2="17.016" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="m" x1="7.134" y1="17.016" x2="242.022" y2="17.016" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h286.488v400H0z"/></clipPath><clipPath id="b"><path fill="#fff" d="M0 0h286.475v400H0z"/></clipPath><clipPath id="g"><path fill="#fff" transform="translate(59.27 131.711)" d="M0 0h116.346v71.344H0z"/></clipPath><clipPath id="h"><path fill="#fff" d="M0 0h286.475v400H0z"/></clipPath><clipPath id="n"><path fill="#fff" transform="translate(59.271 131.715)" d="M0 0h116.346v71.344H0z"/></clipPath></defs></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/mr-pintaskbar.svg b/browser/components/newtab/data/content/assets/mr-pintaskbar.svg
new file mode 100644
index 0000000000..386af26d89
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mr-pintaskbar.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg width="341" height="400" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path d="M311.144 181.613c1.216.332 2.576.708 4.036 1.083 5.306 1.371 11.785 2.831 16.395 3.162l1.659-2.211-6.634-4.975c-4.986-1.691-15.478-5.141-20.453-6.633a71.35 71.35 0 0 1 1.072-1.648l.034-.066c2.476-3.748 5.616-8.015 7.894-12.195.011-.011.022-.022.022-.033.884-1.603 1.636-3.206 2.155-4.743l1.537-3.98v-3.869c-1.227.276-3.781.829-4.975 1.105l-7.739 8.292c-.31.564-.719 1.338-1.194 2.211-.011.011-.022.022-.022.033-1.371 2.521-3.239 5.926-4.533 8.292-.343.631-.641 1.183-.884 1.626.066-2.19.199-6.258.32-10.083v-.122c.089-2.996.177-5.826.232-7.485l-.154-.464-.045-.122-4.223-12.128h-2.211c-.044.287-.122.818-.232 1.515-.465 3.007-1.393 9.076-1.825 11.763.012.011.012.022 0 .033-.066.476-.121.84-.154 1.062.11 3.582.431 13.93.552 17.689-4.3-7.319-10.945-25.097-18.794-29.298l-1.106 2.764c1.703 5.749 6.866 21.183 8.845 27.087-7.109-5.672-6.866-6.225-16.031-8.292l-.553 3.317 6.081 8.844 10.867 8.292.299.221.442.332c-.685.243-1.769.619-3.095 1.083-5.285 1.869-14.428 5.075-17.347 6.103l-4.986 5.528 3.869 3.87s.642-.277 1.603-.697c3.096-1.327 9.586-4.102 10.006-4.278 1.083-.719 2.587-1.725 4.102-2.731.011-.011.022-.022.044-.033.265-.177.531-.354.785-.52 1.26-.851 2.465-1.647 3.361-2.244-.022 3.537-.199 7.374-.409 11.299-.332 6.611-.719 13.51-.454 19.768.056 1.249.133 2.454.244 3.626l.066.685c.011-.022.232-.376.586-.928 1.493-2.3 5.252-8.082 5.495-8.469 1.094-3.416 3.14-9.751 4.522-14.505.066-.233.132-.465.188-.686.331-1.161.608-2.2.818-3.051 2.775 6.887 9.353 21.426 13.267 27.639h3.316v-9.95c-.066-.188-.176-.509-.32-.918 0 0 0-.011-.011-.022-.807-2.266-2.576-7.297-2.985-8.457-.045-.454-.122-1.272-.221-2.267l-.034-.365c-.022-.21-.044-.42-.055-.641l-.066-.674-.199-2.101-.266-2.764-.077-.774-.066-.707-.056-.608-.066-.708 12.714 13.82 10.172 6.423.331.21v-6.633c-4.013-8.392-12.261-18.419-18.242-25.429l2.753.719s.022.011.033.011Zm-17.18-1.78c-.155 5.683-8.923.453-4.732-3.162 1.945-2.211 4.997 1.227 4.709 3.162h.023Z" fill="url(#b)"/><path d="m89 4.422 2.21 37.037-7.186-1.659-8.292-4.975-6.08-1.105v3.317l7.739 5.528 10.503 4.422c-4.589 2.94-14.14 8.9-18.795 11.608l.552 2.764c5.628-2.023 17.28-4.732 23.218-5.528l2.211 11.056v12.715l4.422 9.397 3.87-11.609 1.658-9.397v-9.95c4.699 3.36 13.61 14.67 17.137 19.347l7.186 4.423-1.658-8.845c-3.041-4.666-8.867-14.461-11.609-19.348 5.849 3.417 17.789 10.072 23.77 13.267l1.106-2.764-11.609-10.503-12.161-8.291 18.795-11.056h-5.528l-17.69 5.527 6.634-22.664-2.211-4.422L102.266 39.8 88.999 4.42Z" fill="url(#c)"/><path d="m30.956 75.732 3.317-7.74 6.633 9.398-3.87 12.715-6.08-14.373Z" fill="url(#d)"/><path d="m40.906 24.875 3.87-7.186 4.422 7.186-4.422 9.95-3.87-9.95Z" fill="url(#e)"/><path d="m78.496 174.129 4.422-7.186 5.528 8.291-5.528 11.056-4.422-12.161Z" fill="url(#f)"/><path d="m25.285 293.607.143.465h-4.422l-2.764-1.659v7.187L6.633 285.78c.531-.277 2.698-1.349 3.273-1.636.077-.011 3.847-3.859 3.914-3.892v-7.186c3.261 1.603 12.692 5.97 14.925 8.844v2.211h-2.211l2.764 6.634-5.528-2.211 1.515 5.063Z" fill="url(#g)"/><path d="M67.993 279.699c-.132.243-3.195 6.401-3.317 6.634l-2.764-4.423-1.658 6.081-1.658 1.106-2.211-8.292-5.528 8.844-1.659-1.658.553-10.503-7.872 5.771-.42.31v-8.292c2.742-5.937 7.53-14.472 11.056-19.901l4.975 4.423h7.186c1.482 4.986 3.03 14.704 3.317 19.9Z" fill="url(#h)"/><path d="M184.632 42.566c.177-.232 4.721-8.546 4.975-8.292l7.187 7.186-6.634 17.69-5.528-16.584Z" fill="url(#i)"/><path d="m253.731 61.912 4.975-5.528 5.528 6.634-5.528 10.503-4.975-11.609Z" fill="url(#j)"/><path d="M145.484 385.483c-2.057.409-14.251 2.852-16.584 3.316-.221-.044-7.197-1.094-7.186-1.105-8.403-6.877-9.409-9.563-13.267-19.348a390.56 390.56 0 0 1 2.764-3.869l34.273 21.006ZM234.483 370.559a5164.892 5164.892 0 0 1-5.528 13.82c-2.366 2.532-5.362 5.749-7.739 8.292-8.148.298-24.654-.21-32.615-1.659l-11.056-2.211c-1.47-.741-4.046-2.012-5.527-2.764 2.454-3.914 6.887-11.697 8.291-16.031 1.537.332 9.873 1.858 11.609 2.211l11.056-1.658 13.82-4.422c10.503-.255 8.502-.144 17.689 4.422ZM197.391 220.499c-7.883 9.309-24.522 9.099-33.555 1.658-4.234-2.509 4.135-3.626 3.815-12.88 10.912 7.242 26.368-2.432 25.992 2.565-.431 3.704 4.665 5.716 3.748 8.646v.011Z" fill="#845B25"/><path d="M176.926 184.289c3.815-.033 7.319-1.979 9.917-4.676 3.184-1.924 8.126 4.92 15.611 1.747.542-.122 1.006-.487 1.283.42 1.039 5.881 7.761 5.362 7.816 8.104-7.319 22.753-41.061 30.425-54.704 8.811-6.158-11.973-6.324-7.076 1.614-11.852 6.335-1.437 1.095-5.55 11.465-2.543 4.411 1.327.31 2.223 6.589-.895" fill="#845B25"/><path d="M26.634 282.343c9.96-.443-4.633-9.232-7.33-10.857-2.875-1.249-5.385-2.808-7.817-4.776-7.485-3.35-14.218 4.754-10.381 11.708 2.554 5.13 22.244 34.284 16.694 12.438 1.868 1.647 6.28 3.681 7.584.973l-1.514-5.064 5.528 2.211-2.764-6.633ZM3.36 275.798c.32-2.831.774-6.921 4.522-6.081l-.022-.022c6.058-.542 3.759 8.8-.21 9.541-2.709.564-4.566-.044-4.29-3.438Zm20.044 5.716c.675 1.006 1.393 2.012 1.68 3.36-2.188-.608-3.637-2.133-5.538-3.128-4.82.508 3.25 6.456 3.494 8.844-3.14 1.46-7.375-7.219-8.392-2.885-.055 2.377 1.88 3.681 1.36 6.191-3.03-3.693-5.893-7.164-8.834-10.746 1.957-.465 4.246-.664 4.942-3.007 1.216-2.123 3.417-4.367 2.93-7.165-.243-2.476 12.051 5.694 11.974 7.308-1.581-1.514-6.103-1.735-3.616 1.228Zm44.721-10.515c.376-6.467-4.334-12.515-.619-18.441 2.963-8.402-9.066-14.56-14.925-8.513-1.803 1.946-.94 4.732-2.123 6.932a47.588 47.588 0 0 0-3.516 5.407c-4.92 8.877-18.297 37.191 2.908 19.325l-.553 10.503 1.658 1.659 5.528-8.845 2.212 8.292 1.658-1.106 1.658-6.08 2.764 4.422c2.786-4.776 3.87-7.971 3.35-13.555Zm-14.384-20.928c.266-1.902.012-4.434 2.698-4.069 3.04-.343 7.618-.707 8.458 3.228 2.023 8.834-10.68 7.485-11.133.863l-.023-.022Zm10.105 30.425c-1.282-3.095-1.227-5.837-1.392-8.966-.078-2.001-2.798-1.249-2.566.52.166 3.515-.884 6.832-1.625 10.613-1.68-3.615.144-6.887-1.028-10.359-2.919-4.069-4.964 10.216-7.22 11.885.166-4.677 1.051-9.209 2.5-13.632.762-1.271-.708-2.808-1.681-1.426-3.571 2.941-5.362 7.065-9.597 9.574 2.035-8.712 6.048-16.307 10.105-24.046v.022c4.235 7.242 11.045 3.306 11.686 5.329.962 6.921 2.61 13.466.818 20.486Zm47.364 83.98-1.625 2.267c.585.73.176.862-.266 1.017a7.716 7.716 0 0 0-.763.851c3.77 9.663 4.942 12.35 13.157 19.083l.619.099v-.022c1.802-1.238 5.406.221 5.793-1.879-.11-.94-.365-2.057-1.813-1.891-2.875-.022-5.495 2.311-7.916-.188 1.725-1.625 5.495-.133 6.291-2.023.066-1.117-.984-1.67-1.913-1.703-1.658-.088-3.405-.409-4.986.564-1.205.741-2.134.022-3.25-.674 1.37-1.559 8.833.365 7.263-2.399-.608-.42-1.094-1.371-1.99-.885-.696.354-.906-.442-1.537-.354-1.293.188-2.62.078-3.924.078-.398 0-1.007.376-1.117-.299.497-1.625 8.292-.155 4.599-3.239-2.211-2.045-6.092 1.437-7.33-1.349-.033-6.866 28.159 12.714 31.708 14.605l3.273-.652-34.273-21.007Zm114.516 22.853c-1.404.531-6.169 0-6.235 1.603.431 1.736 2.719 1.05 4.057 1.238l2.698-2.885c-.166.022-.343.033-.52.044Zm-1.26-3.649c-1.25-.287-2.001.487-2.93.885-.464.21-.044.619 0 .929.088.608.564.608 1.028.608h4.776c.354-.398 1.858-1.825 1.88-2.388-1.626.442-3.173.342-4.754-.034Zm2.145-3.891c-1.394-.022-4.677-.487-4.821 1.448 1.592 2.045 5.716.033 8.193.564l.95-2.355c-1.448.177-2.852.464-4.322.343Zm4.72-4.588c-2.741.486-8.358-2.532-9.054 1.47 1.757 1.835 6.777-.332 9.342 1.05.221-.552.774-1.934.984-2.465-.409.011-.863-.044-1.272-.055Zm.697-5.871-4.909-2.454c-17.678-1.051-28.303 11.741-46.81 3.128-2.156 5.617-3.859 11.565-7.75 16.308l2.819 1.404c4.068-4.024 5.395-9.165 6.512-14.539 17.114 10.072 35.279-11.464 51.675-.32l.884-2.222c-.752.044-1.592-.708-2.421-1.305Zm102.919-188.436c-6.512-7.12-16.96-10.392-26.424-11.31 4.146-7.805 13.864-17.656 12.549-26.766-8.359-4.478-15.843 10.282-19.89 16.197-.265-7.883.896-16.717-1.725-24.301-8.258-12.327-11.619 19.912-9.43 24.024-.863.144-.829-.42-1.039-.773-3.748-7.364-6.921-15.191-12.67-21.316-12.339-6.368.32 21.26.674 25.771-4.212-2.83-16.108-8.69-13.919 1.415 3.56 6.534 9.497 11.023 14.903 15.943-36.363 10.182-22.101 27.827.133 9.618-.255 10.36-2.256 21.659.044 31.885 6.567 4.821 11.232-15.08 12.504-19.535.431-1.172 1.293-2.377.652-3.627 0-.044.177-.188.277-.232 1.979 2.488 2.542 6.965 3.781 10.149 10.536 30.271 19.458 14.815 9.961-7.617.077.088.144.177.221.265l-.862-8.999 12.714 13.82 10.171 6.423c6.037-6.799-10.237-25.793-15.235-31.244 4.257.63 26.192 10.57 22.61.21Zm-24.356-3.958c-10.824-2.808-1.316 4.788 1.47 7.894 5.417 6.877 13.389 15.434 13.289 24.279-4.29.21-28.325-31.045-27.429-21.858 4.245 10.57 8.988 21.758 8.037 33.378-6.081-9.674-9.74-20.553-13.344-31.31-.011-2.145-2.875-3.582-3.206-.829-.841 10.414-3.295 21.161-8.646 30.204-1.227-2.111.951-9.066-1.791-8.778 2.399-1.349 1.47-3.328 1.603-4.975-.73-4.622 6.435-32.128-3.693-18.364-4.588 4.113-11.863 8.878-17.954 6.777 1.669-3.261 7.109-4.632 10.337-6.501 4.279-2.62 11.1-3.361 14.019-7.197-.056-.785-.31-1.437-1.283-1.813-7.02-2.852-12.836-8.469-16.042-15.334.055-3.616 16.075 6.611 15.733 9.795.652.984 1.282 1.327 2.189.542.453-.376.674-.078 1.028.066 1.05.332 1.935-.586.984-1.437-2.477-2.466-4.898-4.467-5.285-8.104-2.233-7.396-4.444-14.826-6.103-22.366 4.146 1.216 19.481 38.961 19.37 25.804-1.172-10.005-2.344-20.331.84-30.116 1.791 8.933 2.632 17.767 2.952 26.844-.232 1.957.841 6.777 3.052 3.372 3.383-8.281 8.413-16.252 15.92-21.349 3.007-1.072-3.184 9.044-3.726 10.271-18.419 27.993-4.544 9.342 18.486 25.649-7.032 1.117-13.909-3.184-20.807-4.544Z" fill="#010101"/><path d="M333.124 241.016c-8.558 1.847-12.781 10.581-17.038 17.347-6.6 11.443-19.347 16.374-27.153 26.744 4.898-12.305 15.445-21.968 21.935-33.643 11.819-17.103 6.567-38.585-3.892-54.395 5.44 3.538 13.61 18.276 20.598 14.859l-10.172-6.423-12.714-13.82.862 9c18.895 27.219 6.136 48.734-13.068 70.193 1.482-8.988 1.139-19.569-2.377-28.369-2.399-7.662-11.542-20.365-19.745-11.476-9.486 15.003 17.435 32.482 16.318 45.196.409 10.558-8.535 19.392-7.64 30.448.21 10.414.995 20.785 5.827 30.237.696 2.731 7.65 14.373 5.03 15.158-12.393 2.366-25.074 4.876-37.744 4.19l-.067-.232c8.425-5.904 13.455-13.764 16.109-23.648 4.046-10.227-3.671-24.224-15.523-21.416-.641.133-.807-.508-.265-.707 3.339-2.808 4.124-7.496 5.13-11.498-.299-16.694-12.88-31.432-20.1-46.059-3.902-6.943-1.47-18.297-10.083-21.669-1.879.144-3.77.044-5.251-1.161-8.524-5.981-21.404-5.362-26.623-15.368-3.206-3.261 9.862-5.948 11.642-10.89 1.283-1.492 5.34 3.383 11.156 1.67 4.521-.763 8.501-2.62 10.901-6.866.276-.508.552-.597 1.16-.597 12.405.929 16.44-14.66 14.782-24.533-.088-.674.044-.962.586-1.26 7.971-4.555 7.518-17.69 1.603-23.859-.332-3.051 1.846-6.589.586-10.282-2.863-13.355-18.275-11.398-17.601-14.693 2.51-6.136-2.178-12.869-5.771-17.711-6.346-7.761-16.783-14.572-26.965-12.15.122 1.392-.144 1.238-.818.276-3.394-.453-4.876 4.864-8.17 5.196-3.24 1.017-3.837 1.371-5.727-1.382-4.854-6.667-15.821-15.976-24.257-14.384-12.272 4.379-20.122 15.246-25.384 26.656-2.941 2.443-7.783.564-11.454 1.88-7.474 1.293-13.919 6.113-17.081 13.045-6.015 15.998 7.219 29.553 12.006 43.892.398.929.288 1.47-.254 2.278-3.306 4.82-3.936 10.171-2.565 15.71 2.587 9.375 9.906 19.602 20.465 19.834 3.372 1.382 8.8-1.802 10.359-.133.962 1.416 2.311 2.366 3.969 2.72 4.157.652 9.143.896 12.338-2.355.697-.741 1.073-.11 1.46.288 1.359 1.901 3.504 3.405 4.897 5.019-.442 2.255-1.05 4.356-3.106 5.804-.575.409-1.161-.287-1.559.365-7.43 6.446-19.182 5.119-28.148 8.922-2.93.929-5.915 1.813-8.403 3.958-1.514 1.316-2.697 3.251-5.052 3.483-.807.077-1.537.674-2.278 1.139-8.402 4.278-6.047 10.06-9.11 17.479-.387 2.996-3.991 5.904-3.438 8.988 0 .044-.144.166-.166.166-1.238-.564-1.238.719-1.448 1.183-4.235 11.885-14.926 25.627-7.607 38.109-16.042-3.007-24.113 4.091-23.914 20.155 2.311 10.371 8.536 19.149 15.412 27.12-10.746-1.105-21.912-.564-32.294 1.039-1.88-1.072-4.323.222-6.556.421-4.102 2.41-1.758-16.739-2.211-19.459 1.16-39.159 5.638-6.5 22.554-42.156.53-7.307-18.298 10.216-19.514 12.969 1.15-5.771 1.449-11.432 4.356-16.529 1.825 3.914 5.937 3.361 6.501-.84 5.406 4.754 6.313-1.636 6.645-6.103l-3.229 6.468-2.764-4.422-1.658 6.08-1.658 1.106-2.212-8.292-5.527 8.845-1.659-1.659.553-10.503-7.872 5.772c2.023-.553 3.394-2.035 5.064-3.428.276 2.433-1.117 11.034 2.233 11.631 1.537-.299 1.04.398.884 1.194-1.448 7.673-2.542 15.379-3.56 23.129-3.172-10.127-8.225-20.122-17.302-26.18-.398-.266-1.105-5.186-.619-5.484h-2.045l2.764 6.633-5.528-2.211 1.514 5.064c.465-.586-.298-1.758.1-2.466 5.815 3.793 11.288 8.535 13.853 15.103 2.82 6.545 7.451 14.074 5.472 21.227-1.846-11.277-13.664-20.918-24.731-22.09-1.128 0-2.167 1.581-.863 2.035 1.415.74.277 1.348.675 2.421 1.79 3.106 2.41 7.164 5.218 9.497 2.786 7.584 10.591 16.738 19.558 13.886.01 6.368-.177 12.493.785 18.695.21.785-.177.995-.929 1.095-5.174.243-9.994 3.35-15.102 1.625-.653-.155-1.26-.066-1.382.486 6.534 10.194 25.041-1.625 35.157-.641 10.526-.331 21.913-2.465 31.708 2.234 4.434 4.289 9.276 9.22 14.683 11.807l1.625-2.266 34.273 21.006-3.273.652c.332.21.719.42.752.829-6.744 1.968-14.66 3.77-21.249.73-8.226-6.733-9.387-9.442-13.157-19.082-2.951 3.427 1.957 6.202 3.107 9.264.232.31.586.52.498.984-.376 2.256 1.039 3.262 2.808 4.047 1.459-.067-.675 2.609 3.107 3.703.972.376 1.835.631 1.835 1.935 1.736 3.781 7.009 3.173 10.403 3.582 4.898-.331 9.707-2.012 14.506-3.117.984-.443 1.68-.21 2.465.398 17.413 11.652 11.73 15.92 25.727 1.138 1.006-.564 1.537.763 2.399 1.017 13.953 4.567 29.033 5.528 43.637 4.71 6.767-.011 12.803-9.077 14.871-14.693-.653-.763-.067-1.205.022-1.813.088-2.023 1.249-3.306 2.399-4.754-.232-2.09 1.382-3.251 2.476-4.555 2.51-1.935 9.707-13.698 12.383-10.658 2.211 0 11.354 1.902 11.542-.774.089-.895 1.703-1.437 1.471.044 1.547 3.173 12.968-.696 16.55-.829 7.64-1.979 15.478-2.41 23.052-4.146 5.052-4.997-5.407-3.427-7.872-2.731-8.756-13.421-16.274-32.172-12.571-48.612 4.721-9.21 15.423-12.548 23.87-17.391 9.43-5.539 19.889-10.459 25.882-19.978 4.488-5.881 13.123-24.654 0-24.367Zm-115.313-72.714c3.439-1.559 5.196-6.755 2.753-9.729-.851-.608.21-2.344 1.117-1.415 1.514.995 2.675 3.648 2.233 5.793-.752 7.242-10.205 9.674-6.103 5.351Zm-105.417-40.641c-1.006-.011-1.194-1.382-.166-1.581.774.155 1.36 1.658.166 1.581Zm-46.678 163.98c-1.05 5.915-9.972 15.058-14.56 15.014 3.261-6.556 9.176-10.338 14.56-15.014Zm-24.588 38.054c-8.889-3.527-13.787-13.61-17.645-21.714l.022-.022c5.583 2.189 10.337 5.396 14.174 9.851 1.558 1.99 9.32 12.073 3.449 11.885Zm187.717-17.988c1.802-4.09 1.028-21.116 4.588-20.785 6.678-1.415 5.97-5.406-.884-2.532-.509-7.009 2.631-13.853 1.868-20.608-.984-1.094.763-.995.641-1.879-.177-2.355.619-4.577.454-7.153 6.777 14.649 30.635 46.103 4.831 53.753-2.112.343-3.759 1.935-6.092.741-1.139-1.205-5.152.254-5.406-1.537Zm-.166 6.125c.409.066.829-.276 1.36.055-.398.752-1.305 1.117-2.012 1.084-.343-.487-.067-1.404.652-1.139Zm-17.225-212.791c.586-.31.21-1.305 1.006-1.416.409-.033.829.432.697.487-.63.387 0 1.503-.929 1.581-.42.044-.862-.608-.774-.652Zm-30.503 33.609c3.494-7.639 16.042-3.527 15.556 4.511-.299.697-.166.398-.841.188-1.647-.509-1.481-2.112-2.167-3.14-1.459-2.145-3.736-3.538-6.257-3.538v-.022c-3.394-.508-4.666 4.82-6.468 3.98-.707-.486-.309-1.138.177-1.979Zm-3.925 26.048c-.276 1.769-2.664.774-3.891.995-5.716.94.309 7.076-2.355 8.126-1.99.11-2.079-5.218-2.145-6.799 0-2.875 2.83-3.538 5.318-3.328v-.022l.022-.022c1.05.066 2.885-.443 3.051 1.05Zm-15.577-48.027c1.05-3.084 4.057-3.67 6.843-4.157l-.022-.022c1.703.619 8.126 2.488 6.954 5.064-.641.497-1.094.541-1.503 0-6.711-7.164-12.991 3.184-12.272-.885Zm-22.377 75.136c-2.886 1.946-7.872-3.405-8.126-6.324-1.371-1.968-3.063-8.259.53-8.613.708.255.542.929.398 1.261-1.415 3.46.818 6.169 1.979 8.999.442 2.698 5.506 2.432 5.219 4.677Zm14.825-49.32c-5.992-7.806-16.815-2.853-15.522 6.589-.321 1.183 1.139 4.433-.442 5.141-.84.166-1.028-.575-1.194-1.349-.796-5.207-1.15-11.951 4.289-14.66 1.04-.332-.342.84.465.862.398.067.398-.519.398-.818 2.919-3.117 8.137-2.388 11.807 1.028.808.852 2.941 1.803 1.791 3.207-.563.586-1.116.398-1.592 0Zm6.225 57.103c-5.174-11.067-6.91-6.324.906-10.591.885-.642 2.764-.885 3.516-1.869.564-3.781 10.957.31 12.637 1.824 4.5 3.958-2.874 15.379 5.937 15.633l.044.056c2.775.033 8.06-4.312 5.76-6.899-1.116-.443-2.443.077-2.686 1.138-.409 1.637-1.603 2.189-3.041 2.521-3.117-.718-.232-8.424-1.592-11.222.277-1.37-2.719-3.626-1.017-4.068 2.698-.376 4.588-2.145 6.49-3.847 3.085-1.648 7.275 4.477 14.041 1.592 1.78-.752 1.647 5.085 7.363 6.323 2.775 1.803-1.647 7.253-3.195 8.967-11.211 14.892-34.373 16.805-45.163.442Zm7.872 19.901c1.536-2.057 2.531-5.329 2.023-7.076l.022-.044c6.457 2.808 13.577 3.88 20.298 1.37 1.029-.398 1.405-.055 1.515.885.232 2.366 1.603 4.19 2.676 6.235-4.777 4.644-11.565 6.258-17.922 4.356-1.99-.785-11.575-2.896-8.612-5.726Zm-37.657 13.797h.056c9.939-5.904 22.321-4.411 32.172-10.337.553-.42.84-.232 1.261.122 9.043 8.336 25.074 8.911 33.631-.188.244-.42.454-.299.664-.089 2.134 2.3 5.163 2.842 7.883 3.98 3.427 1.725 8.579 2.609 11.409 4.213-7.706 1.05-16.573 1.293-24.511 1.647-.375-.21-.674.077-.928.287-.288.255.53.929-.288 1.04-.575.055-.508-.807-.951-.841-1.26-.132-2.564-.387-3.792-.177-1.581.255-3.327-.497-4.732.719-11.31-1.216-23.106 1.039-34.549-.298-.42.11-1.072-.266-1.238.508-.045.133-.111.299-.277.133-4.853-2.444-10.204.066-15.754-.719l-.1.067.044-.067Zm36.142 97.413c16.551-1.338 33.532.21 49.652-3.306-13.82 11.089-28.049 21.194-44.467 27.751-1.116.431-1.979.254-2.908-.885-7.042-8.214-14.107-16.495-21.746-24.19 6.456.21 12.968.42 19.469.63Zm-5.34-49.95c.166.652 1.282 1.072.464 1.979-.32.343-.32.11-.508-.022-1.028-.653-.022-1.283.044-1.957Zm8.568-10.636c.553-1.249 1.139-4.864 2.985-4.079.144.099.509 0 .719-.111 9.829-5.229 11.045 27.706-.299 20.044-4.101-3.593-4.378-10.746-3.405-15.854Zm18.773-35.522c1.017-.232 1.67.121 1.835 1.448-.818-.254-1.746.785-2.332-.398-.255-.508 0-.929.497-1.05Zm-89.453 55.843c2.267-7.275 6.789-14.174 8.546-21.393-.497-1.095 1.338-.089 1.349-1.449.299-1.083.321-2.189 1.183-3.073.232-.254.863-.973.078-1.526-.056-.033-.078-.376-.045-.376 1.316-.608 1.316-2.1 2.068-3.073 1.758-2.499 1.061 4.776 1.879 5.605.631 1.703.233 3.472.819 5.13.541 1.581-.343 3.604 1.448 4.831-1.415 2.466-.254 4.942-.542 7.64l-.044.044c-1.404-1.526-4.82-2.465-3.45.42.697 1.239 2.234 1.791 2.897 2.985 2.466 6.38 2.278 13.875 3.671 20.686-.94 1.868-5.429-.885-7.12-1.327-6.711-2.056-13.466-7.44-12.737-15.124Zm143.538 68.712c-4.986 2.708-9.906 6.379-15.445 7.728l4.909 2.454c-.409-.287-.608-.398-1.083-.685 3.405-1.913 7.064-3.107 10.525-4.821-2.355 1.99-4.478 5.418-7.021 6.811l-.884 2.222c.984.741.309 2.565-.962 2.399-.21.52-.763 1.924-.984 2.466 1.106.309.232 1.824-.686 1.724l-.95 2.355c1.802.033.63 1.924-.763 1.913-.022.564-1.537 1.99-1.88 2.388h.885l.022-.022v.022h-.022c-.641.774-1.25 1.072-1.979 1.183l-2.698 2.885c.586.023 1.183.056 1.78.122-8.469 7.651-20.564 1.946-30.636 2.112-5.494-.509-15.677-.951-19.314-4.688l-2.819-1.404c-2.2 2.421-7.861 10.813-11.233 9.143-9.563-7.374-19.867-13.665-29.818-20.508-14.007-9.508-31.542-14.638-41.326-29.376-5.55-8.236-13.986-16.219-13.787-26.832.221-8.723 6.247-15.998 15.456-15.158l-.022.022c10.448 1.261 19.27 7.662 29.552 9.763 10.68 7.993 21.15 16.517 30.304 26.39 8.104 9.939 16.584 19.657 24.843 29.419 1.979 1.736 2.145 3.549 1.846 5.473l1.935-4.643 2.532.486c-1.537-1.017-12.184-11.808-8.757-12.117 15.158-6.446 29.132-15.445 41.637-26.092 10.458-9.497 32.028-21.924 46.18-16.241 13.919 15.721-5.628 35.191-19.337 43.107Zm41.294-97.944c-34.107-44.864 12.349-36.385 6.246 10.492l-.022.022s0-.033.011-.055c-1.614-3.881-3.869-7.197-6.235-10.459Zm51.94-10.182c-6.954 20.973-29.364 31.277-47.805 40.431 0 .011-.011.011-.011.022h-.023c4.29-10.282 16.131-13.798 23.074-21.78 5.307-4.975 9.795-10.68 12.803-17.347 3.239-6.191 15.997-15.4 11.962-1.326Z" fill="#000"/><path d="M284.643 87.01c.619-35.545 45.517-37.049 53.787-4.523 9.63 46.026-52.648 49.199-53.776 4.511l-.022.022.011-.01Zm41.205 1.116c7.419-4.621 11.034-10.26 4.025-17.159-1.205-1.47-7.452-8.214-8.734-6.102-.233 2.852-2.786 5.306-3.162 7.75 3.372 4.72 5.881 10.05 7.849 15.544l.022-.022v-.011Zm-27.562-3.427c.52 3.36-.11 9.84 2.488 12.062 2.808-.553 11.255-.597 12.15-3.14-1.448-4.81-2.211-10.88-4.754-14.826-8.612 2.83-9.917-2.123-9.851 5.893h-.022l-.011.01Zm-8.922-9.873c-2.078 5.782-3.991 13.035-1.371 18.695 3.007 1.515 6.147 2.654 9.663 2.952-1.349-5.384-1.902-10.69-1.47-16.175.044-.762-.133-1.094-.951-1.348-2.322-.719-4.334-1.957-5.849-4.146l-.022.022Zm45.185 28.601c3.472-6.445 3.56-16.174.984-21.813-2.576 2.94-4.621 6.17-8.104 8.082-.74.486-1.116.696-.63 1.769 1.99 1.702.708 9.11 2.753 9.309 2.145 0 3.538 1.415 5.008 2.631l-.022.022h.011ZM316.34 73.941c-9.342 7.209-4.3 2.322-1.326 18.453.442 2.653 6.423-2.4 8.214-2.72 1.161-3.107-4.931-12.272-6.865-15.733h-.023Zm-28.059 22.322c2.52 8.159 8.026 14.152 14.969 18.574.255.21 1.239-.21 1.161-.487-.376-1.138.465-1.769.774-2.631-.531-3.129-4.102-5.76-5.008-9.032-1.758-5.307-7.573-4.025-11.896-6.424Zm26.865 6.025c-.652-1.514-.265-5.693-2.399-5.373-3.637 1.073-7.33 1.913-11.155 1.836-.442 0-.885.088-.63.652 1.127 1.703 4.256 9.851 6.08 8.955 1.814-3.239 6.114-3.648 8.127-6.047l-.023-.023Zm11.322-2.564c-.686-1.57-.973-8.115-3.052-7.684-2.255 1.536-6.335 2.288-7.684 4.466 1.493 1.415.509 4.577 2.001 5.451 1.747-.763 3.704-.564 5.407-1.448 1.061-.609 2.178-.642 3.095.022.354-.144.166-.531.233-.796v-.011ZM302.51 64.09c-1.791 4.002-2.532 8.17-3.372 12.316.077 3.118 5.704.84 7.683.553 2.167-.564-3.549-11.145-4.311-12.87Zm19.834 39.148c-.641-.398-4.588.675-4.467 1.471.487 3.471.885 6.976 1.327 10.47.066.541.276.11.442.022 3.483-3.007 6.158-7.983 6.424-12.405-.255-.144-.841-.166-.995 0-.763.829-1.681.442-2.731.442Zm-6.048-32.47c.918-2.477 4.655-6.91 1.703-8.359-3.947-1.194-9.276-2.388-12.991-.32 5.031 1.205 8.248 4.676 11.266 8.678h.022Zm-16.163-6.889c-4.014.697-6.966 5.108-9.365 8.26-1.293 1.735 3.593 4.112 5.009 4.842 1.968.287 2.31-10.625 4.333-13.102h.023Zm15.898 46.247h.022c.652-8.358-3.483-3.67-7.308-.586-1.89 2.377 5.053 4.942 6.799 6.003 2.101.73.233-4.179.509-5.439l-.022.022Zm-10.78-45.528c2.024 1.57 3.295 11.918 5.495 10.757.995-1.05 4.577-2.09 3.582-3.747-2.675-2.72-4.82-6.722-9.077-7.01Zm18.021 50.459c3.881-1.957 15.656-9.63 6.236-11.896-1.681-.862-2.985 9.674-6.213 11.918l-.023-.022Zm-10.038 2.123c-2.377-.896-4.279-3.262-6.258-4.301-3.084 4.234 3.527 4.002 6.258 4.301ZM190.636 29.906c-.254 3.438 1.404 7.495 5.329 7.396 1.282.32 1.725 1.072.951 2.322-2.167 4.521-3.074 9.43-5.683 13.775-1.183 2.19-2.211 4.511-2.72 6.987-.11.564-.11 1.14-.84 1.206-.763.066-1.028-.42-1.205-1.073-1.437-6.865-1.99-14.162-6.313-19.989-1.349-.984-1.095-3.427.696-3.073 4.81 2.708 5.473-10.537 5.727-13.522.1-1.625-.53-4.654 1.681-4.93 2.189-.056 1.714 3.747 1.979 5.24.033 3.438.619 3.383.387 6.324v-.652l.011-.011Zm-2.554 4.842c-.63 2.19-1.305 3.914-2.841 5.163-.487.398-.166.774.044 1.006 2.487 3.24 2.333 7.242 3.051 11.167 5.329-15.965 4.887-6.546-.276-17.336h.022ZM157.568 12.438c-.1 1.493.575 3.295 2.277 3.262 1.67.066-3.106 9.33-3.548 10.713-1.692-2.41-.918-6.755-3.218-9.287-.564-.431-.486-1.504.299-1.36 3.04 1.437 1.57-7.85 3.173-8.137 1.161-.155.873 4.345 1.017 5.097v-.288Zm-1.095 2.134c-.265.962-.563 1.725-1.216 2.277.542 1.593 1.261 3.428 1.327 5.374.464-1.736 1.493-3.483 1.625-5.097-.851-.586-1.426-1.393-1.736-2.543v-.011Z" fill="#010101"/><path d="M157.568 12.438c-.1 1.493.575 3.295 2.277 3.262 1.67.066-3.106 9.33-3.548 10.713-1.692-2.41-.918-6.755-3.218-9.287-.564-.431-.486-1.504.299-1.36 3.04 1.437 1.57-7.85 3.173-8.137 1.161-.155.873 4.345 1.017 5.097v-.288Zm-1.095 2.134c-.265.962-.563 1.725-1.216 2.277.542 1.593 1.261 3.428 1.327 5.374.464-1.736 1.493-3.483 1.625-5.097-.851-.586-1.426-1.393-1.736-2.543v-.011Z" fill="#000"/><path d="M41.691 75.025c-1.88 4.666-5.174 9.21-5.14 14.66-.144 1.98-.763 3.914-.51 5.96.145 1.205-1.26 1.094-1.68 1.857-3.482-2.853-.265-21.139-7.893-21.88-1.007-.11-1.239-1.138-.277-1.702 1.869-1.14 2.753-3.074 3.14-4.843 1.67-2.952 1.028-13.19 3.372-13.565 4.6 3.87 0 16.307 7.606 17.778 1.095.044 1.371.63 1.371 1.79l.022-.044-.01-.01Zm-8.822-5.727c-.608 1.603-.84 2.908-1.493 4.069-.232.398-.608.763-.143 1.327 2.167 2.564 2.51 5.837 3.394 9.076 3.67-10.757.475-4.82-1.747-14.472h-.011ZM259.072 43.284c-.41 2.94-1.57 16.274 3.935 14.405 1.482-1.647 3.793.498 2.212 2.256-3.45 4.93-6.678 9.983-7.33 16.219.342 3.195-3.815 2.067-3.306-.675.685-4.555-.719-9.961-4.445-12.847-1.116-.763-.508-2.09-1.282-2.885 2.233-2.687 4.057-.818 5.097-5.141 2.2-3.273 1.216-13.92 3.77-14.616 1.459.232 1.194 1.902 1.282 3.284h.067Zm-1.858 24.953c4.5-8.989 1.57-4.49-.508-12.383-4.898 9.32-2.245 2.366.486 12.405l.022-.022ZM83.284 154.948c-.41 2.94-1.57 16.274 3.935 14.405 1.482-1.647 3.793.509 2.212 2.256-3.45 4.931-6.678 9.983-7.33 16.219.342 3.195-3.815 2.067-3.306-.675.685-4.555-.708-9.961-4.445-12.847-1.116-.762-.508-2.089-1.282-2.885 2.233-2.687 4.057-.807 5.097-5.141 2.2-3.273 1.216-13.908 3.77-14.616 1.459.232 1.194 1.902 1.282 3.284h.067Zm-1.858 24.953c4.5-9 1.57-4.489-.508-12.383-4.887 9.32-2.245 2.366.486 12.405l.022-.022ZM39.646 37.845c.918-3.46.74-12.382-3.35-13.5-.973-.275-.796-1.912-1.913-2.089-.331-.044-.53-.586-.398-1.006.122-.42.321-.718.84-.906 5.54-1.128 6.06-7.419 6.922-12.029 4.179-6.014.475 14.671 6.28 11.1.961-.63 2.144.453 1.813 1.47-2.521 5.396-6.855 10.702-7.054 17.015.785 2.952-2.83 2.035-3.162-.066h.022v.011Zm2.908-8.259c4.311-8.137 1.536-3.725-.089-11.221-3.493 3.726-.575 6.854.089 11.221ZM62.797 116.506c1.581-2.156 1.935-7.208 5.075-6.655.552.398.53.95.298 1.492-.785 2.255-1.957 4.168-2.543 6.512 2.2-.586 4.788-3.792 6.778-2.399.53.63.165 1.415-.531 1.913-1.183 1.547-6.623 3.04-5.307 5.096.807 1.161 4.124 4.367 1.139 4.721-.929 0-2.023.542-2.698-.995-.143 1.415 1.073 2.952-.74 3.416-1.26.332-1.095-1.116-1.537-1.89-.509.542-.719 1.304-1.625 1.492-3.162.564-1.018-3.261-.741-4.864-1.028-.255-2.654 1.006-3.306-.166-.873-1.736 3.814-2.267 1.537-4.047-2.31-1.746-3.129-4.201.509-4.566.884.089.762-.21.718-.718.055-.73-.564-1.935.675-2.09 2 .089 1.293 2.477 2.3 3.748ZM226.059 14.062c-1.482 1.482-1.416 6.545-4.058 5.628-.553-.21-1.161-.675-.763-1.67.321-1.824 3.66-7.606-.398-5.163-.53.21-1.205.995-1.581 0-.298-.774-.608-1.88.84-2.1.863-.122 1.537-.719 2.333-1.05-1.039-1.66-4.566-6.468-.11-4.865 2.377-.741 1.006 1.503 2.277 2.885.973-1.028.608-2.355.863-3.493.254-1.095.696-1.68 1.835-1.814 3.206-.32 1.526 3.693.674 5.396 2.72-.221 5.042-4.334 7.408-2.256.508.564.884 1.305-.144 1.725-2.421 1.139-5.605 2.167-7.496 3.704.044.84.885 1.304 1.537 1.647.785.398 2.299 2.488 2.045 3.24-.464 1.47-1.901.53-2.609-.255-.94.74.984 2.61-1.028 2.886-2.278 0-1.095-2.985-1.625-4.467v.022ZM31.476 172.161c-1.481 1.481-1.415 6.545-4.057 5.627-3.118-.862 4.278-9.696-1.161-6.821-.531.21-1.205.995-1.581 0-.299-.774-.608-1.88.84-2.101.862-.122 1.537-.719 2.333-1.05-1.04-1.659-4.566-6.468-.11-4.865 2.376-.741 1.005 1.504 2.277 2.886.973-1.029.608-2.355.862-3.494.254-1.095.697-1.68 1.835-1.813 3.206-.321 1.526 3.693.675 5.395 2.72-.221 5.041-4.345 7.407-2.255.509.564.885 1.304-.144 1.724-2.42 1.139-5.605 2.167-7.495 3.704.044.84.884 1.305 1.536 1.647.774.398 2.3 2.488 2.046 3.24-.465 1.481-1.902.53-2.61-.254-.94.729.984 2.609-1.028 2.885-2.277 0-1.094-2.985-1.625-4.466v.022-.011ZM50.05 208.778c-.973.951-.951 4.157-2.665 3.56-.354-.133-.763-.431-.497-1.05.232-1.195 2.377-4.799-.266-3.262-.343.133-.785.63-1.039 0-.807-1.36 1.26-1.404 2.078-2.001-.707-1.084-2.974-4.091-.066-3.074 1.559-.464.652.94 1.493 1.825.63-.653.398-1.493.563-2.212.166-.696.454-1.061 1.194-1.149 2.09-.21 1.007 2.321.443 3.405 1.78-.133 3.306-2.742 4.853-1.426.332.365.575.829-.1 1.094-1.591.719-3.67 1.36-4.908 2.344.31 1.061 2.565 1.725 2.344 3.096-.31.928-1.238.342-1.714-.166-.586.497.586 1.713-.674 1.824-1.482 0-.719-1.868-1.062-2.819l.023.011ZM286.412 178.154c-1.183-7.872 12.947-7.452 12.427-.1 1.172 8.801-13.145 8.436-12.427.089v.022-.011Zm8.845.884c.287-1.934-2.764-5.373-4.721-3.162-4.19 3.616 4.577 8.834 4.732 3.162h-.022.011ZM193.765 203.692c-.487 2.709-5.318 7.12-7.496 4.467-.431-2.2 4.245-2.465 4.732-5.163.674-2.443 2.576-1.371 2.775.696h-.022.011ZM168.413 196.428c-6.456.353-5.373-5.219-2.332-3.472 2.432 2.532 4.245-1.791 6.124-.343 1.206 1.758-2.565 3.947-3.792 3.793v.022ZM192.748 194.474c-1.471-.166-4.257-1.78-2.985-3.516.42-.398.862-.796 1.68-.254.984 1.182 2.863 1.592 3.914-.089 3.339-2.72 3.129 4.091-2.609 3.859ZM100.707 35.809c4.655-8.469 8.281-17.756 14.229-25.296 8.602-3.66-.21 20.365-1.492 23.626 29.64-7.374 37.037-2.045 3.936 9.01 7.308 5.462 14.892 10.791 21.448 17.226 7.905 15.301-15.932-.144-19.812-3.56 3.869 7.031 9.231 14.383 10.005 22.72-.995 3.748-6.335 2.454-8.358-.21-5.782-6.092-10.702-12.803-15.323-19.79-.398-.487-.675-.653-1.238-.487 1.459 4.644-1.714 31.51-8.945 29.652-4.3-4.157-4.477-25.992-5.45-33.19-7.308 2.233-14.395 4.787-21.813 6.468-12.25-.708 9.33-14.693 12.802-15.965-4.123-4.322-17.214-6.998-15.268-14.34 3.615-3.846 8.359.786 12.46 1.405 2.698 1.16 5.605 1.857 8.104 3.471.674.653 1.283.1.84-.674-4.3-53.41 1.404-41.935 14.019-.11l-.144.022v.022Zm36.131 26.788c-12.405-17.336-40.442-17.446-9.475-28.325-29.453 7.86-16.34 6.434-11.852-19.525h-.276c-20.675 35.357-13.488 31.72-26.678-4.311.53 37.18 10.536 35.124-17.877 24.3l-.255.321c22.83 15.644 21.195 7.44-1.348 22.443 33.753-5.804 18.728-15.268 27.352 26.236 10.348-24.29-5.285-47.253 23.77-12.128 6.755 8.723 4.068 2.84 1.581-2.908-2.919-6.29-7.087-11.863-10.968-17.568-3.383-9.862 21.979 12.372 26.026 11.388v.077Z" fill="#010101"/></g><defs><linearGradient id="b" x1="6.633" y1="4.422" x2="333.234" y2="4.422" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="c" x1="6.633" y1="4.422" x2="333.234" y2="4.422" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="d" x1="6.633" y1="4.422" x2="333.234" y2="4.422" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="e" x1="6.633" y1="4.422" x2="333.234" y2="4.422" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="f" x1="6.633" y1="4.422" x2="333.234" y2="4.422" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="g" x1="6.633" y1="4.422" x2="333.234" y2="4.422" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="h" x1="6.633" y1="4.422" x2="333.234" y2="4.422" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="i" x1="6.633" y1="4.422" x2="333.234" y2="4.422" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="j" x1="6.633" y1="4.422" x2="333.234" y2="4.422" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h340.088v400H0z"/></clipPath></defs></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/mr-privacysegmentation.svg b/browser/components/newtab/data/content/assets/mr-privacysegmentation.svg
new file mode 100644
index 0000000000..feda0087d7
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mr-privacysegmentation.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg width="389" height="400" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><g clip-path="url(#b)"><path d="M372.478 328.041c-2.103 2.739-4.104 5.58-6.181 8.319-2.027 2.687-4.079 5.373-6.208 7.957-2.462 2.971-5.155 5.761-7.797 8.577-2.463 2.609-5.31 4.753-7.849 7.233-1.975 1.964-4.284 3.798-6.567 5.529-2.462 1.86-4.976 3.668-7.438 5.503-.513.387-.667.413-1.283 0-4.078-2.636-6.823-6.666-10.131-10.05-2.232-2.299-3.95-5.089-6.054-7.544-2.513-2.945-5.258-5.631-7.977-8.344-2.847-2.816-5.386-5.864-7.926-8.939-.051-.077-.077-.206-.205-.465 2.899-.981 5.387-2.609 7.875-4.159 5.643-3.513 10.747-7.776 15.851-11.987 3.489-2.868 6.772-5.916 9.978-9.016 3.514-3.384 7.003-6.975 9.285-11.445.616-1.188 1.078-2.428 1.334-3.746.128-.697.411-1.472.872-1.679.59-.258.821.723 1.257 1.033 3.206 2.3 5.797 5.322 8.747 7.906 2.077 1.834 4.001 4.004 5.976 6.019 3.053 3.1 5.669 6.614 8.952 9.533 1.565 1.395 3.078 2.919 4.309 4.624.488.698 1.001 0 1.488.569 1.282 1.498 1.282 2.48-.308 4.572ZM321.401 281.546c-1.134 2.261-2.479 4.445-3.85 6.628-1.687 2.73-3.691 5.277-5.748 7.642-1.397 1.56-3.243 3.016-5.009 4.393-2.742 2.08-5.643 4.004-8.306 6.239a151.716 151.716 0 0 1-9.465 7.304c-1.398-.753-1.951.676-2.795 1.066-2.004-2.131-3.243-4.757-5.326-6.862-1.029-1.04-1.767-2.6-2.637-3.925-1.608-2.574-3.48-5.017-5.141-7.565-.739-1.143-.396-1.455.29-2.027 2.214-1.716 4.403-3.509 6.697-5.121 2.768-1.95 5.326-4.133 7.962-6.213 3.771-2.937 7.41-6.004 11.022-9.124 2.768-2.417 5.379-5.017 8.042-7.512.237-.208.448-.364.632-.65 1.345-1.975 2.136-1.975 3.454-.104 1.424 2.028 2.848 4.107 4.43 5.979 1.45 1.767 2.478 3.795 4.06 5.407.291.312.554.883.897.935 3.085.52 1.16 2.756.791 3.51Z" fill="#4E3413"/><path d="m147.992 179.145-19.981-71.35v-8.123l10.978 4.61 14.053 22.174 8.124 44.566-13.174 8.123Z" fill="#FFDBC7"/><path d="M189.62 194.948c-.432 8.627-1.649 17.179-3.551 25.603a85.254 85.254 0 0 1-5.936 17.559c-2.131 4.567-4.794 8.881-7.66 13.042-.863 1.244-1.497 2.69-2.232 4.009-.837 1.447-2.435 2.462-2.993 4.111-.939 2.766-3.501 4.212-5.073 6.47-1.674 2.335-3.678 4.441-5.454 6.725-3.044 3.882-6.569 7.282-9.765 10.987-1.675 1.903-3.323 3.882-5.023 5.734-2.638 2.842-4.794 6.039-7.533 8.881-4.515-5.582-8.092-11.723-12.302-17.457-2.765-3.781-5.352-7.765-8.447-11.292-2.688-3.07-5.504-6.09-8.548-8.855-1.496-1.345-2.891-2.842-4.337-4.238-.355-.33-.507-.584-.305-1.091 2.207-5.303 2.943-10.962 3.78-16.595 1.091-7.282 1.725-14.615 1.623-21.999-.051-5.608-.101-11.241-1.192-16.798-.685-3.451-1.37-6.927-2.486-10.251-1.116-3.248-2.765-6.268-4.388-9.262-2.334-4.288-5.301-8.17-7.736-12.382-1.953-3.426-3.881-6.852-5.403-10.505-.279-.66-.533-1.371-.609-2.081-.101-.787-.583-1.726.305-2.309.963-.66 1.953-.152 2.688.406 5.961 4.618 10.958 10.023 14.408 16.798 1.724 3.374 3.754 6.597 5.529 9.921.381.736 1.015 1.091 1.548 1.37.608.33.989.584 1.192 1.269.228.837.862 1.319 1.801 1.142.837-.153 1.623-.051 2.029-1.218 1.09-3.121 1.192-6.268 1.014-9.49-.431-8.044-2.891-15.631-5.402-23.218-1.674-5.1-3.374-10.2-4.389-15.503-.101-.533-.076-1.092-.025-1.624.051-.99-.203-2.335.761-2.792 1.015-.482 2.308.102 3.196.736 1.877 1.32 3.526 2.944 4.515 5.101.102.228.228.532.406.583 3.221.812 4.084 3.603 4.971 6.191 1.573 4.568 3.602 9.008 4.642 13.753 1.218 5.608 1.573 11.267.964 17.001-.33 3.02-.761 5.988-1.522 8.932-.355 1.472.71 3.349 1.852 3.222 1.268-.127 2.486-.761 2.79-2.309a74.549 74.549 0 0 0 1.573-14.057c.076-4.06-.051-8.069-.888-12.002a75.41 75.41 0 0 0-4.743-14.717c-1.446-3.35-2.461-6.877-3.729-10.302-1.573-4.314-3.145-8.627-3.577-13.22-.202-2.055-.456-4.136.051-6.217.457-1.827 1.598-2.309 3.272-1.522 1.421.685 2.309 1.852 3.323 2.918 1.218 1.294 2.537 2.486 4.109 3.273 1.421.711 1.446 2.182 1.827 3.299 1.217 3.501 3.119 6.699 4.489 10.124 1.395 3.502 3.145 6.851 4.16 10.556.812 3.019 1.902 6.013 2.41 9.033.735 4.415 1.496 8.881 1.547 13.398.051 3.349.279 6.673.178 10.048-.051 1.7-.305 3.375-.305 5.049 0 1.218.66 2.411 2.105 2.436 1.167 0 2.233-.38 2.461-1.903.279-1.827.659-3.603.406-5.455-.178-1.193.355-1.294 1.369-1.041 3.754.965 7.432 1.193 10.933-1.015 1.04-.659 1.471-.101 1.496.99.076 4.846.406 9.693.711 14.514.202 3.096.38 6.267.735 9.389.305 2.461.228 4.948 1.091 7.333.203.507.177 1.116.989.989-.304.939 1.801 1.168.634 2.563-.71.837-.583 2.233.127 3.223.558.735 1.547.989 2.486.761.735-.178 1.446-.432 1.674-1.37.964-4.187 2.993-7.968 4.312-12.028 1.268-3.882 2.613-7.739 3.5-11.697.584-2.512 1.142-5.05 1.471-7.613.33-2.664.711-5.354 1.193-7.992.558-3.02.634-6.141 1.014-9.211.152-1.218.558-2.462.939-3.654.634-2.03 2.257-2.411 4.109-1.345 2.79 1.599 3.551 4.288 3.957 7.079.558 3.933.786 7.892 1.014 11.876.356 6.419.178 12.814-.126 19.233Z" fill="#FFDBC7"/><path d="m69.165 72.448 4.172-13.172 5.49-4.172 6.147 5.489 3.074 11.855-6.806 5.05h-7.905l-4.172-5.05Z" fill="url(#c)"/><path d="m311.134 61.032-6.367-13.392 6.367-5.269 5.929 6.806-5.929 11.855Z" fill="url(#d)"/><path d="m349.779 84.742 10.1-9.88 2.635 2.635-1.756 14.71-4.611 7.464h-6.368l-3.074-7.245 3.074-7.684Z" fill="url(#e)"/><path d="m49.404 203.952-5.49-6.367-3.074 5.05 5.929 10.318 2.635-9.001Z" fill="url(#f)"/><path d="M144.039 170.143v-6.147l8.344-1.318 6.368-4.171 2.854 8.343-9.881 4.61-7.685-1.317Z" fill="url(#g)"/><path d="m286.103 340.285-12.077-17.563-1.756-9.22 3.733-3.952 10.1 8.562 16.248-11.416 14.492-15.587 5.929-11.855-9.223-11.636 5.051-1.756 5.709 5.488 15.809 12.294-4.172 17.783-16.468 17.783-33.375 21.075Z" fill="url(#h)"/><path d="M385.803 291.858c-3.983-6.14-8.523-6.343-14.256-4.11-2.308.913-4.819 1.751-6.518 3.705-1.193 1.37-2.943 1.065-4.262 1.979-1.801 1.268-3.855 2.106-5.884 2.994-.914.38-1.877.913-2.461 1.675-.558.71-.634.659-1.243.126-1.978-1.776-4.109-3.425-6.113-5.176-.786-.71-2.105-1.827-1.953-2.41.406-1.599 0-3.248.381-4.695.735-2.765-.33-4.973-1.852-6.876-1.42-1.726-2.739-3.553-4.642-4.948-2.612-1.929-5.073-3.958-8.269-4.872-1.42-.381-3.17-1.142-3.855-1.979-1.421-1.675-3.12-2.055-4.921-2.385-1.471-.279-3.323-.736-4.414-.102-2.08 1.218-2.79-.355-3.551-1.294-.583-.71-2.156-1.319-1.395-2.563.837-1.319 1.573-2.664 2.334-4.009 2.08-3.603 2.917-7.46 1.75-11.469-.837-2.867-2.181-5.659-5.403-6.673-4.54-1.421-8.548-.406-11.997 2.892-1.04.964-2.309.914-3.298.127-.507-.431-2.283-.787-.862-2.157-.432-.355-.102-1.395-.634-1.268-.888.177-1.015-.381-1.421-.787-1.446-1.345-1.699-3.324-2.587-4.973-.863-1.599-1.395-3.401-2.562-4.822-1.395-1.725-1.522-3.856-1.573-5.81-.05-2.132.355-4.339.99-6.369.583-1.827.913-3.654 2.435-5.354 1.598-1.802 2.409-4.491 3.678-6.724 2.003-3.553 4.591-6.699 7.406-9.617 1.116-1.142 2.232-2.385 3.551-3.35 1.522-1.091 2.943-2.283 4.642-3.146 1.674-.837 3.982-.913 4.642-3.451.127-.533.786-1.649 1.598-2.36 2.917-2.486 5.504-5.227 6.798-9.134 1.09-3.401 1.217-6.446-.558-9.516-1.142-1.979-3.019-3.045-5.073-3.984-.863-.38-.711.609-1.446.483-1.598-.28-3.196.558-4.642 1.141-1.978.812-3.957 1.802-5.783 3.096a179.528 179.528 0 0 0-4.946 3.679c-2.106 1.624-4.363 2.995-6.545 4.492-.355.253-1.344.786-1.699-.686-.431-1.877.33-3.298 1.015-4.871 1.445-3.324 3.094-6.598 5.149-9.516 1.877-2.613 3.779-5.227 5.808-7.764 1.979-2.487 3.78-5.177 5.809-7.587 1.167-1.37 2.308-2.842 3.5-4.212 2.537-2.918 4.693-6.141 6.976-9.262 1.623-2.182 3.373-4.314 4.768-6.572 1.471-2.41 2.917-5.024 2.486-8.272-.304-2.512-1.319-4.973-3.576-5.1-2.435-.127-4.921.482-7.255 1.345-2.156.812-4.109 1.979-5.961 3.273-2.054 1.421-4.083 2.918-5.707 4.821-1.674 1.979-3.449 3.806-5.123 5.76-1.218 1.421-2.436 2.766-3.425 4.39-.507.837-.634 2.41-1.471 2.487-1.167.126-1.75 1.014-1.877 1.497-.304 1.141-1.091 1.953-1.725 2.715-2.004 2.461-3.475 5.328-5.682 7.561-.862.863-.862 2.309-2.079 2.817-.635-.838.431-.939.583-1.472.888-2.994 2.587-5.633 4.058-8.348 1.598-2.944 3.526-5.684 5.226-8.577 2.308-3.857 4.388-7.84 6.518-11.799 1.472-2.74 2.791-5.886 2.664-9.337-.153-3.781-1.37-5.811-4.794-5.735-2.816.076-5.175 1.725-7.508 3.172a26.23 26.23 0 0 0-2.512 1.776c-.71.584-.811 2.081-2.282 1.446-.076 0-.229.153-.229.229-.126.71-.608.989-1.166.761-.66-.254-.203-.964-.33-1.446-.102-.457.076-.99-.051-1.421-.304-1.168-.558-2.436-2.232-2.386-2.46.051-4.794.457-6.95 1.802-2.131 1.294-4.363 2.284-5.859 4.517-.635.989-1.04 2.461-2.435 2.867-1.421.406-1.979 1.649-2.816 2.664-.533.609-1.015 2.056-2.435.939-.127-.101-1.192-.33-1.953-.228-3.45.355-5.834 2.639-8.548 4.263-1.04.609-2.004 1.674-2.714 2.664-1.37 1.852-2.917 3.552-4.236 5.43-.457.634-.431 1.497-.761 1.7-2.258 1.37-3.12 3.908-4.363 5.887-1.775 2.791-3.551 5.811-4.312 9.16-.304 1.37-1.42 2.411-1.42 3.781.025 1.573-.584 3.095-1.193 4.263-1.268 2.385-1.978 4.973-3.246 7.333-1.192 2.258-1.725 4.796-2.816 7.105-.456.938-.862 2.03-1.293 2.994-.787 1.675-1.015 3.476-1.624 5.176-1.42 3.882-2.511 7.917-4.084 11.748-.963 2.36-1.116 4.923-2.206 7.232-1.091 2.335-1.953 4.796-2.435 7.308-.584 3.248-2.03 6.242-2.638 9.49-.279 1.395-.051 2.893-.457 4.161-.888 2.766-.659 5.557-.583 8.323.101 2.893.558 5.76 1.141 8.653.786 3.831 1.75 7.612 3.5 11.063 2.943 5.861 7.762 10.2 12.632 14.463.837.736 1.7 1.497 2.511 2.335 1.04 1.065 2.359 2.004 3.628 2.791 2.587 1.548 5.174 3.095 7.026 5.43 4.058 5.176 7.888 10.556 11.82 15.859.406.507.507.862.177 1.573-1.014 2.334-2.359 4.618-2.612 7.232-.406 4.364.127 8.449 4.185 11.063 2.942 1.878 6.113 1.192 9.03 0 4.819-2.005 4.819-2.487 8.168 1.066.304.329.558.786.659 1.065.685 1.751 3.297 2.462 2.308 5.329-.532 1.472-1.268 3.096-1.293 4.897-.026 3.147-.229 6.268.735 9.287 1.218 3.755 3.704 6.775 5.961 9.921 1.446 2.056 3.145 3.908 4.845 5.76 2.105 2.309 4.921 2.842 7.051 1.497 1.759-1.099 3.34-.879 4.744.66.152.178.38.305.507.457 1.649 2.004 3.094 3.857.482 6.343-1.421 1.345-1.979 3.451-3.171 5.075-1.801 2.462-3.196 5.227-4.261 8.12-1.066 2.944-2.131 5.785-2.308 9.084-.127 2.233.329 4.339.481 6.471.178 2.816 1.827 5.227 3.628 7.18 1.243 1.345 2.587 3.857 5.352 2.259.279-.178.964-.254.659.659-.228.711.355 1.041 1.015 1.472 1.014.685 2.004.229 2.942.482 2.943.736 5.834.229 8.574-.609 6.696-2.08 12.631-5.81 18.516-9.49 2.917-1.827 5.935-3.552 8.624-5.683 1.953-1.548 4.135-2.817 5.986-4.542 2.309-2.107 4.744-4.111 7.026-6.243a180.834 180.834 0 0 1 4.033-3.653c.812-.736.736-.889.254-1.574 1.598.66 2.41-.482 3.019-1.294 1.648-2.157 3.627-3.984 5.428-5.963 1.953-2.182 3.678-4.567 5.504-6.825 1.877-2.309 3.45-4.974 5.352-7.257 2.511-3.045 4.692-6.293 6.95-9.465 1.522-2.182 2.739-4.644 4.236-6.851 2.689-4.009 4.616-8.272 5.504-12.966.989-5.38.736-10.632-2.333-15.377v-.026Zm-65.569-22.583c.355.33 1.192-.076 1.065.609-.127.838-.786 1.447-1.446 1.98-.431.329-.811.076-1.242-.28-.863-.71-1.218-1.674-1.725-2.613 1.192.228 2.409-.508 3.348.304Zm-19.937-24.587c.71-.279 1.446-.685 1.953-1.117.837-.685 1.522-1.167 2.41-.761 5.098-.457 6.899 4.77 5.529 8.5-.71 1.98-1.902 3.73-2.511 5.76-.203.635-.735.305-1.065-.076-2.689-3.248-5.225-6.572-7.229-10.302-.558-1.015-.305-1.548.913-2.004Zm14.864-74.727c.38-.28.862-.559 1.141-.305.355.279.051.761-.127 1.193-1.065 2.233-2.815 3.933-4.286 5.861-.33.381-.71.634-1.167.558-.71-.152-.304-.812-.406-1.218-.076-.33-.482-.685-.33-.761.406-1.497.508-2.461 2.004-3.146 1.066-.508 2.131-1.421 3.171-2.182ZM253.27 298.329c-.431-.254-.634-.482-.634-.964 0-.533.101-1.244-.761-.482.051-.305-1.319-.711.051-.965.482-.076.127-.406.127-.659-.076-1.777.456-3.451.938-5.101.254-.862.685-1.04 1.319-.152 1.015 1.472 2.359 2.639 3.45 4.085.786 1.066 1.496 2.614 3.044 3.147-2.03 2.03-5.276 2.41-7.534 1.091Zm15.803-6.065c-1.167.965-2.41.077-3.222-.558-1.471-1.116-3.145-1.928-4.566-3.045-1.318-1.015-2.282-2.512-4.033-3.019-.101-2.36-1.978-3.806-3.196-5.481-1.192-1.624-2.105-3.578-3.779-4.872-1.37-1.066-1.826-2.816-3.044-4.009a27.864 27.864 0 0 1-4.515-5.938c-1.801-3.197-4.819-4.871-7.406-6.901-2.511-1.98-5.048-4.01-7.635-5.938-3.272-2.461-8.421-8.399-9.74-10.657-1.903-3.299-3.881-6.75-3.957-10.683-.051-1.674-.33-3.375-.406-5.024-.076-1.598-.381-3.4-.381-5.075 0-3.831.254-7.663.964-11.418.152-.863.178-1.751.254-2.588.127-1.574.609-3.071 1.091-4.492.963-2.765 1.699-5.582 2.511-8.373.558-1.954 1.572-3.654 2.181-5.582 1.776-5.836 3.475-11.698 5.631-17.407.989-2.664 2.334-5.329 3.323-7.968 1.547-4.085 3.221-8.145 4.692-12.281 1.117-3.121 2.512-6.166 3.755-9.261 1.344-3.35 3.145-6.445 5.073-9.338 1.978-2.918 3.525-6.217 6.544-8.501 1.395-1.04 2.612-2.562 4.033-3.73.355-.304.609-.685 1.167-.761.558-.076 1.116-.786 1.648-.279.558.558-.025 1.243-.203 1.802a136.987 136.987 0 0 1-2.688 8.094c-.964 2.69-1.928 5.481-3.349 8.044-1.141 2.03-1.826 4.313-2.942 6.369-1.598 2.994-2.46 6.267-3.729 9.388-.481 1.243-.76 2.538.508 3.578.862.736 1.801.558 2.663.076.837-.482 1.116-1.522 1.319-2.284.989-3.755 2.917-7.104 4.49-10.606 1.775-3.958 3.348-7.993 4.997-12.002.938-2.233 1.572-4.618 2.561-6.826 1.091-2.385 2.08-4.796 3.805-6.902 1.395-1.7 2.613-3.552 4.185-5.125 1.598-1.548 3.678-2.791 4.871-4.466 1.04-1.446 2.257-.99 3.246-1.624 1.218-.787.558.66.99.761-1.066 1.573-1.421 3.476-2.207 5.177-.888 1.877-1.827 3.755-2.714 5.658-.964 2.055-2.106 4.035-3.146 6.064-.887 1.726-1.826 3.553-2.333 5.405-.507 1.929-1.649 3.476-2.359 5.253-1.573 3.907-3.45 7.663-4.946 11.596-.508 1.319-1.395 2.588-2.004 3.983-.33.787-.964 1.345-.025 2.107.152.126.177.304-.406.38-1.37.152-2.689 5.43-1.751 6.471 1.624 1.827 2.537 1.624 3.704-.838 1.775-3.755 3.5-7.561 5.225-11.342 2.334-5.05 4.667-10.124 6.696-15.301 1.827-4.618 4.135-9.008 6.57-13.321.761-1.345 2.131-2.208 3.069-3.375 1.015-1.294 2.029-2.563 3.145-3.781 2.943-3.146 6.747-5.049 10.425-7.155.939-.508 1.877.127 1.598 1.167-.456 1.7-1.116 3.375-1.699 5.024-.66 1.802-1.674 3.349-2.384 5.049-1.142 2.715-3.095 4.999-4.11 7.714-.963 2.665-3.17 4.517-4.235 7.156-.812 2.03-2.537 3.628-3.425 5.684-.761 1.801-2.13 3.171-2.486 5.303-.228 1.472-1.192 3.095-1.953 4.491-1.293 2.334-1.953 4.821-2.891 7.232-1.142 2.892-2.232 5.836-3.019 8.855-.406 1.548-.887 3.096-1.243 4.644-.38 1.725 1.015 1.928 1.522 2.867.888-.736 2.461-.33 2.892-1.827.507-1.751 1.623-3.222 2.613-4.694.507-.761 1.395-1.243 1.039-2.385-.076-.152.102-.558.66-.584.583-.025 1.141-1.548 1.091-2.385-.026-.152.025-.406.127-.431 2.435-1.066 2.815-3.629 4.185-5.481.634-.863 1.42-1.726 2.004-2.614 1.927-2.892 4.033-5.633 6.011-8.475.863-1.243 1.471-3.121 2.334-3.781 2.283-1.776 3.12-4.516 5.174-6.343 1.75-1.523 2.79-3.629 4.312-5.354 1.37-1.573 2.968-2.918 4.262-4.542 1.953-2.411 4.312-4.39 7.026-5.811 1.927-.989 3.855-2.08 6.037-2.36 1.065-.126 1.775 1.371 1.09 2.335-.558.736-.862 1.497-.786 2.309.076 1.091-1.979.837-1.243 2.182-1.877.837-2.156 2.969-3.374 4.364-2.105 2.386-3.931 5.025-5.707 7.689-1.699 2.512-3.855 4.669-5.605 7.13-1.877 2.563-3.856 5.075-5.758 7.638-1.649 2.182-3.678 4.085-4.693 6.699-.355.888-1.04 1.623-1.648 2.258-2.207 2.36-3.425 5.328-4.845 8.094-.888 1.675-1.624 3.654-2.182 5.583a3.199 3.199 0 0 0 .254 2.359c1.268 2.386.761 3.654-1.699 4.669-3.019 1.244-5.682 3.02-8.32 4.897-2.105 1.523-4.439 2.741-6.468 4.339-2.435 1.904-5.099 3.578-6.925 6.268-.71 1.091-1.699 2.106-2.486 3.197-1.801 2.436-3.373 4.973-4.692 7.739-1.319 2.715-1.776 5.557-2.587 8.323-.635 2.182 0 4.415-.279 6.623-.127.938 1.192.583 1.369 1.421.127.71.33.786 1.294.507 1.014-.279 1.953.051 1.699-1.446-.152-1.041.508-2.132.178-2.994-.812-1.98.127-3.705.507-5.481.431-2.081.812-4.212 2.308-5.862.33-.38-.076-.812.229-1.268 1.75-2.639 3.424-5.278 5.681-7.613 3.171-3.248 6.57-6.064 10.426-8.424 1.395-.837 2.764-1.725 3.754-3.096.253-.38 1.065-.355 1.623-.634 2.993-1.472 5.809-3.248 8.954-4.44 2.967-1.142 5.884-2.665 8.32-4.771 1.8-1.573 3.956-2.69 5.681-4.263 2.867-2.563 6.443-3.324 9.791-4.719.533-.229 1.091.127 1.345.634.202.457-.153.584-.584.888-.837.634-1.801.888-2.638 1.421-1.04.66-1.293 1.497-.659 2.639-1.116-.863-1.649-.964-2.714.355-2.08 2.614-2.816 6.801-1.091 9.617.558.914.761 1.472-.583 2.335a20.422 20.422 0 0 0-3.831 3.044c-1.674 1.751-3.627 3.223-5.428 4.822-1.851 1.674-3.424 3.679-5.047 5.607-3.298 3.959-5.809 8.45-8.143 12.992-.811 1.573-2.003 2.893-2.536 4.669-.837 2.689-.507 5.455-1.141 8.12-.812 3.552.659 6.394 2.384 9.337 1.649 2.791 3.323 5.608 4.971 8.399 2.004 3.426 3.983 6.851 6.012 10.277 1.42 2.385 2.866 4.77 4.363 7.13.659 1.04 1.978 1.472 2.993 1.801 1.522.533 1.877 2.005 2.968 2.817.558.431-.051 1.472-.381 1.751-3.145 2.512-5.327 5.963-8.472 8.5-3.323 2.715-6.468 5.684-9.816 8.399-3.627 2.944-7.432 5.735-10.907 8.906-1.497 1.371-3.399 2.411-5.022 3.73Zm7.863 23.725c-.355.305-1.218.508-1.471.305-.406-.33-.736-1.117-.635-1.599.153-.659.077-1.319.279-2.004.356.786 1.396.964 1.446 1.954.026.456.989.812.381 1.344Zm-.026-11.266c-1.547-2.512-3.348-4.897-4.946-7.384-.71-1.116-.38-1.421.279-1.979 2.131-1.675 4.236-3.425 6.443-4.999 2.663-1.903 5.124-4.034 7.66-6.064 3.627-2.867 7.128-5.861 10.603-8.906 2.663-2.36 5.174-4.898 7.736-7.334.228-.203.431-.355.609-.634 1.293-1.928 2.054-1.928 3.323-.101 1.369 1.979 2.739 4.009 4.261 5.836 1.395 1.725 2.384 3.704 3.906 5.278.279.304.533.862.863.913 2.967.507 1.116 2.69.761 3.426-1.091 2.207-2.385 4.339-3.704 6.47-1.623 2.664-3.551 5.151-5.529 7.46-1.345 1.522-3.12 2.943-4.82 4.288-2.638 2.03-5.428 3.908-7.99 6.09a146.021 146.021 0 0 1-9.106 7.13c-1.344-.736-1.877.66-2.688 1.041-1.928-2.081-3.12-4.644-5.124-6.699-.989-1.015-1.7-2.538-2.537-3.832Zm15.473 29.663c-1.192.634-2.486 1.142-3.602 1.903-1.344.939-2.181.304-2.79-.761-.279-.483-.685-.812-1.015-1.218-1.953-2.487-3.145-5.456-5.225-7.841-.127-.152-.101-.381-.228-.482-.66-.584-1.801-1.218-1.573-1.979.33-.99 1.751-.965 2.664-1.371 3.627-1.547 6.95-3.577 10.247-5.734 4.135-2.715 7.813-5.988 11.795-8.906 6.29-4.619 12.175-9.693 15.904-16.874 1.598-3.02 3.652-5.836 4.768-9.059.914-2.639 2.131-5.252 2.283-8.297 1.776 1.141 2.943 2.816 4.414 4.161 1.75 1.573 3.602 3.02 5.022 5.024.431.584 1.218 1.193 1.75 1.954.457.66.863 1.167.406 1.954-.279.457.051.786.254 1.142.076.203.431.406.431.456-1.04 1.624-.279 3.604-.939 5.202-.532 1.269-1.166 2.461-1.395 3.857-.203 1.193-1.42 1.776-1.978 2.791-1.065 1.929-2.334 3.857-3.754 5.379-1.7 1.827-3.424 3.705-5.276 5.405-4.87 4.491-9.588 9.11-15.042 12.89-2.029 1.421-3.88 3.071-5.91 4.492-3.525 2.461-7.482 3.958-11.211 5.912Zm78.657-4.542c-2.08 2.689-4.058 5.481-6.113 8.17-2.004 2.639-4.033 5.278-6.138 7.816-2.435 2.918-5.099 5.658-7.711 8.424-2.435 2.563-5.251 4.669-7.762 7.105-1.953 1.928-4.236 3.73-6.493 5.43-2.435 1.827-4.921 3.603-7.356 5.404-.508.381-.66.406-1.268 0-4.034-2.588-6.748-6.546-10.02-9.87-2.206-2.258-3.906-4.999-5.986-7.409-2.486-2.893-5.2-5.532-7.888-8.196-2.816-2.766-5.327-5.76-7.838-8.78-.051-.076-.076-.203-.203-.457 2.866-.964 5.327-2.562 7.787-4.085 5.58-3.451 10.628-7.637 15.676-11.773 3.449-2.817 6.696-5.811 9.867-8.856 3.475-3.324 6.924-6.851 9.182-11.241.609-1.167 1.065-2.385 1.319-3.679.127-.685.406-1.446.862-1.649.584-.254.812.71 1.243 1.014 3.171 2.259 5.733 5.228 8.65 7.765 2.054 1.802 3.956 3.933 5.91 5.912 3.018 3.045 5.605 6.496 8.852 9.363 1.547 1.371 3.044 2.868 4.261 4.542.482.685.99 0 1.471.559 1.269 1.471 1.269 2.435-.304 4.491Z" fill="#000"/><path d="M319.169 110.704c-2.182.279-4.109 1.37-6.037 2.36-2.714 1.421-5.073 3.4-7.026 5.811-1.294 1.624-2.892 2.969-4.262 4.542-1.522 1.725-2.561 3.831-4.312 5.354-2.054 1.827-2.891 4.567-5.174 6.343-.863.66-1.471 2.538-2.334 3.781-1.978 2.842-4.084 5.582-6.011 8.475-.584.888-1.37 1.751-2.004 2.614-1.37 1.852-1.75 4.415-4.185 5.48-.102.026-.153.28-.127.432.051.837-.507 2.36-1.091 2.385-.558.025-.735.431-.659.584.355 1.141-.533 1.624-1.04 2.385-.99 1.472-2.106 2.943-2.613 4.694-.431 1.497-2.004 1.091-2.892 1.827-.507-.939-1.902-1.142-1.521-2.867.355-1.548.837-3.096 1.242-4.644.787-3.019 1.877-5.963 3.019-8.855.938-2.411 1.598-4.898 2.891-7.232.761-1.396 1.725-3.02 1.954-4.491.355-2.132 1.724-3.502 2.485-5.304.888-2.055 2.613-3.653 3.425-5.683 1.065-2.639 3.272-4.492 4.236-7.156 1.014-2.715 2.967-4.999 4.109-7.714.71-1.7 1.725-3.248 2.384-5.049.583-1.649 1.243-3.324 1.7-5.024.279-1.041-.66-1.675-1.598-1.167-3.678 2.106-7.483 4.009-10.425 7.155-1.117 1.218-2.131 2.487-3.146 3.781-.938 1.167-2.308 2.03-3.069 3.375-2.435 4.313-4.743 8.703-6.569 13.321-2.03 5.176-4.363 10.251-6.697 15.301-1.725 3.781-3.45 7.587-5.225 11.342-1.167 2.461-2.08 2.664-3.703.837-.939-1.04.38-6.318 1.75-6.47.583-.076.558-.254.406-.381-.939-.761-.305-1.319.025-2.106.609-1.395 1.497-2.664 2.004-3.983 1.496-3.933 3.373-7.689 4.946-11.597.71-1.776 1.852-3.324 2.359-5.252.507-1.852 1.446-3.679 2.334-5.405 1.04-2.03 2.181-4.009 3.145-6.064.888-1.903 1.826-3.781 2.714-5.659.786-1.7 1.141-3.603 2.207-5.176-.432-.101.228-1.548-.99-.761-.989.634-2.206.177-3.246 1.624-1.192 1.674-3.272 2.918-4.87 4.466-1.573 1.573-2.791 3.425-4.186 5.125-1.724 2.106-2.714 4.517-3.804 6.902-.99 2.208-1.624 4.593-2.562 6.826-1.649 4.009-3.222 8.043-4.997 12.002-1.573 3.501-3.501 6.851-4.49 10.606-.203.761-.482 1.802-1.319 2.284-.862.482-1.801.66-2.663-.076-1.268-1.041-.989-2.335-.507-3.578 1.268-3.121 2.13-6.394 3.728-9.388 1.116-2.056 1.801-4.339 2.943-6.369 1.42-2.563 2.384-5.354 3.348-8.044a137.731 137.731 0 0 0 2.689-8.094c.177-.559.76-1.244.202-1.802-.532-.508-1.09.203-1.648.279-.558.076-.812.457-1.167.761-1.421 1.168-2.638 2.69-4.033 3.73-3.019 2.284-4.566 5.583-6.544 8.501-1.928 2.892-3.729 5.988-5.073 9.337-1.243 3.096-2.638 6.141-3.754 9.262-1.472 4.136-3.146 8.196-4.693 12.281-.989 2.639-2.334 5.303-3.323 7.968-2.156 5.709-3.855 11.57-5.631 17.406-.609 1.929-1.623 3.629-2.181 5.583-.812 2.791-1.547 5.608-2.511 8.373-.482 1.421-.964 2.918-1.091 4.492-.076.837-.101 1.725-.254 2.588-.71 3.755-.989 7.587-.964 11.418 0 1.675.305 3.476.381 5.075.076 1.649.355 3.349.406 5.024.076 3.933 2.054 7.384 3.957 10.683 1.319 2.258 6.468 8.196 9.74 10.657 2.587 1.928 5.124 3.958 7.635 5.937 2.587 2.03 5.605 3.705 7.406 6.902a27.864 27.864 0 0 0 4.515 5.938c1.218 1.192 1.674 2.943 3.044 4.009 1.674 1.294 2.587 3.248 3.78 4.872 1.217 1.675 3.094 3.121 3.196 5.481 1.75.507 2.714 2.004 4.033 3.019 1.42 1.117 3.094 1.929 4.565 3.045.812.634 2.055 1.523 3.222.558 1.623-1.319 3.525-2.359 5.022-3.73 3.475-3.171 7.28-5.963 10.907-8.906 3.348-2.715 6.493-5.684 9.816-8.399 3.146-2.537 5.327-5.988 8.472-8.5.33-.279.939-1.32.381-1.751-1.091-.812-1.446-2.284-2.968-2.817-1.015-.33-2.334-.761-2.993-1.801a299.095 299.095 0 0 1-4.363-7.13c-2.029-3.426-4.008-6.851-6.011-10.277-1.649-2.791-3.323-5.608-4.972-8.399-1.725-2.943-3.196-5.785-2.384-9.338.634-2.664.304-5.43 1.141-8.119.533-1.777 1.725-3.096 2.537-4.669 2.333-4.542 4.844-9.033 8.142-12.992 1.623-1.928 3.196-3.933 5.047-5.608 1.801-1.598 3.754-3.07 5.429-4.821a20.39 20.39 0 0 1 3.83-3.045c1.344-.862 1.141-1.421.583-2.334-1.725-2.817-.989-7.003 1.091-9.617 1.065-1.319 1.598-1.218 2.714-.355-.634-1.142-.381-1.979.659-2.639.837-.533 1.801-.787 2.638-1.421.432-.304.787-.431.584-.888-.254-.508-.812-.863-1.345-.634-3.348 1.395-6.924 2.156-9.791 4.719-1.724 1.573-3.88 2.69-5.681 4.263-2.435 2.106-5.352 3.629-8.32 4.77-3.145 1.193-5.961 2.969-8.954 4.441-.558.279-1.37.254-1.623.634-.99 1.37-2.359 2.259-3.754 3.096-3.856 2.36-7.255 5.176-10.425 8.424-2.258 2.335-3.932 4.974-5.682 7.612-.305.457.101.889-.228 1.269-1.497 1.649-1.877 3.781-2.309 5.862-.38 1.776-1.319 3.501-.507 5.48.33.863-.33 1.954-.178 2.995.254 1.497-.684 1.167-1.699 1.446-.964.279-1.167.203-1.294-.508-.177-.837-1.496-.482-1.369-1.42.279-2.208-.355-4.441.279-6.623.811-2.766 1.268-5.608 2.587-8.323 1.319-2.766 2.892-5.303 4.692-7.739.787-1.091 1.776-2.106 2.486-3.197 1.827-2.69 4.49-4.365 6.925-6.268 2.029-1.598 4.363-2.816 6.468-4.339 2.638-1.877 5.301-3.654 8.32-4.897 2.46-1.015 2.967-2.284 1.699-4.669a3.196 3.196 0 0 1-.253-2.36c.558-1.928 1.293-3.907 2.181-5.582 1.42-2.766 2.638-5.735 4.845-8.094.608-.635 1.293-1.371 1.648-2.259 1.015-2.613 3.044-4.516 4.693-6.698 1.902-2.563 3.881-5.075 5.758-7.638 1.75-2.461 3.906-4.618 5.605-7.13 1.776-2.665 3.602-5.303 5.708-7.689 1.217-1.395 1.496-3.527 3.373-4.364-.735-1.345 1.319-1.091 1.243-2.182-.076-.812.228-1.573.786-2.309.685-.965-.025-2.462-1.09-2.335Zm-61.84 69.805c-1.04.254-2.537.279-3.196-.482-1.142-1.294-2.79-1.573-4.008-2.588-2.029-1.7-4.667-2.106-7.051-2.817-2.08-.634-4.338-1.167-6.595-1.37-.736-.076-1.979.127-1.903-1.32.051-1.091.203-2.106 1.446-2.486.381-.127.482-.203.71.279.33.634.609.583.888-.203.355-.964.786-.178 1.091-.127 1.851.381 3.728.076 5.58.787 3.297 1.319 6.671 2.334 9.74 4.212 1.446.888 2.765 1.954 4.236 2.765.584.305.051.787.051 1.193.456 1.091-.254 1.979-.989 2.157Z" fill="#4E3413"/><path d="M193.205 170.236c-.177-5.734-1.192-11.19-4.87-15.808-1.598-2.03-4.007-3.248-6.468-2.943-4.845.634-6.214 2.41-7.178 7.383-.533 2.868-.609 5.786-1.015 8.628-.862 5.912-1.623 11.824-2.942 17.66-.609 2.563-1.116 5.177-2.131 7.587-1.217 2.893-1.978 5.912-2.967 8.805-.914-1.649-.888-3.705-.964-5.405-.178-5.658-.508-11.266-.812-16.899-.076-1.167-.837-2.588-.634-3.096.888-2.486.051-4.872-.178-7.181-.685-7.028-1.623-14.006-3.323-20.883-1.724-7.003-3.196-14.133-5.58-20.933-1.851-5.278-4.185-10.378-6.95-15.326-3.247-5.887-7.711-10.125-13.19-13.601-1.648-1.04-3.348-1.066-5.073-.203-3.069 1.522-5.2 5.938-4.464 9.211.178.888.406 1.852-.558 2.613-.989-1.421-2.359-2.309-3.729-3.121-1.927-1.167-3.906-.964-6.037-.152-2.688 1.066-2.815 3.603-3.373 5.709-.837 3.147-.457 6.369.203 9.541a409.52 409.52 0 0 0 1.344 5.912c-1.877-1.192-3.779-1.725-5.606-2.157-3.069-.71-5.986.356-6.873 3.198-.482 1.573-.533 3.273-.33 4.948.279 2.309.532 4.618 1.192 6.851.583 2.055 1.42 4.009 1.928 6.115.913 3.704 2.156 7.333 3.399 10.987.989 2.969 1.851 5.988 2.663 8.982.685 2.639.178 5.557.862 8.298.026.152-.228.406-.38.583-.152.153-.355.102-.457-.076-.786-1.471-2.156-2.791-2.562-4.187-.634-2.232-1.826-4.009-3.043-5.81-1.598-2.385-2.41-5.405-5.327-6.801-1.015-3.552-4.287-5.176-6.722-7.383-2.029-1.827-4.54-3.908-7.863-2.563-2.055-1.497-2.74.457-3.399 1.573-1.573 2.639-1.395 5.532-.558 8.373 1.167 3.933 3.45 7.334 5.403 10.886.558.99 1.902 1.852 2.03 2.487.38 1.852 1.521 3.146 2.383 4.592 3.602 5.938 7.23 11.901 9.081 18.625 1.243 4.542 1.852 9.262 2.131 14.007.355 5.684.279 11.342.127 17.001-.102 4.415-.837 8.83-1.472 13.22-.126.888-.05 2.334-1.877 2.283-4.464-.152-9.943 2.69-11.566 6.648-.736 1.726-2.004 3.274-3.221 4.771-4.845 6.039-9.944 11.849-15.194 17.584-4.439 4.846-8.903 9.693-13.291 14.59-5.048 5.633-9.893 11.419-14.712 17.229a204.59 204.59 0 0 1-3.07 3.578c-.532.609-1.166.609-1.547.102-1.648-2.157-4.236-3.096-6.366-4.466-3.957-2.588-8.421-4.39-13.292-4.568-4.007-.152-7.71.736-10.83 3.527-1.193 1.066-3.196 1.548-3.374 3.35-.203 2.157-.609 4.364-.583 6.521.076 4.136 1.877 7.841 3.5 11.571 2.181 4.998 6.214 8.576 9.69 12.535 2.714 3.07 5.63 6.013 8.42 9.007 4.313 4.644 8.828 9.034 13.495 13.271 4.236 3.832 8.852 7.232 13.164 10.987 4.211 3.654 8.32 7.435 12.683 10.886 3.754 2.969 7.635 5.785 11.642 8.348 3.095 1.979 6.393 3.628 9.538 5.506 4.007 2.385 8.117 4.542 12.58 5.963 3.07.99 6.266 1.193 9.437 1.269 3.043.101 6.037-.761 8.903-1.929 3.145-1.294 5.884-2.943 7.482-6.267 1.066-2.258.711-4.314.482-6.521-.405-3.68-1.623-7.054-4.033-9.846-2.536-2.968-5.326-5.683-8.269-8.272-.659-.583-1.471-1.395-.532-2.232 1.877-1.701 3.551-3.502 5.022-5.634 2.359-3.476 5.58-6.318 7.99-9.819 1.243-1.827 2.613-3.604 4.008-5.329 1.319-1.624 2.511-3.375 3.576-5.1 2.689-4.339 5.631-8.501 8.371-12.814.558-.914.405-2.259 1.116-2.766 1.623-1.193 1.902-3.121 2.891-4.618 3.019-4.567 3.602-9.845 3.602-15.149 0-2.232-.076-4.618-1.598-6.673-.33-.431-.862-1.928.076-2.969 1.319-1.471 2.435-3.121 3.754-4.593 2.537-2.816 5.2-5.506 7.686-8.373 1.141-1.294 2.232-2.715 3.373-3.882 2.131-2.157 3.754-4.669 5.758-6.902 2.004-2.208 3.729-4.669 5.504-7.08 2.791-3.755 5.073-7.815 7.788-11.621 4.083-5.785 6.975-12.205 9.359-18.802 1.497-4.212 2.461-8.602 3.653-12.916 1.116-4.009 1.496-8.12 2.207-12.179.456-2.512.583-5.151.837-7.74.558-6.064.532-12.154.634-18.218.051-3.832-.457-7.663-.584-11.495Zm-37.591-2.69c-.837.609-1.369 1.371-2.739 1.168-1.015-.153-2.663-.432-3.374 1.116-.025.076-.203.102-.304.152-.482-1.421-1.776-.659-2.663-.964-1.37-.457-1.37-1.573-1.319-2.588.05-1.116 1.369-.888 1.902-.939 3.754-.254 7.331-.812 10.248-3.933.735 4.136 1.268 3.756-1.751 5.988Zm-25.973-63.993c.253-1.244.913-1.65 2.232-1.092 3.931 1.624 6.823 4.441 9.182 7.816 3.5 5.049 6.29 10.479 8.193 16.315 1.192 3.578 2.004 7.308 3.069 10.937 1.623 5.531 2.765 11.164 4.109 16.772.076.355.076.711.101 1.04-.152.483.356 1.421-.862 1.015-.38-.101-.533.406-.685.711-1.319 2.512-3.627 3.527-6.214 3.882-3.627.508-3.602.432-4.262-3.222-.558-2.995-.989-6.039-1.826-8.983-.786-2.639-.837-5.455-1.725-8.043-.989-2.817-1.877-5.659-3.196-8.323-1.826-3.705-3.399-7.536-5.149-11.292-1.674-3.654-3.145-7.561-3.551-11.723-.177-1.979.178-3.882.584-5.81Zm7.812 212.281c-.507 1.674-1.623 3.045-2.537 4.516-2.561 4.162-4.844 8.551-7.761 12.459-3.12 4.187-5.834 8.678-9.03 12.814-1.75 2.284-3.425 4.644-5.124 6.927-1.395 1.878-3.323 3.578-4.997 5.329-1.116 1.167-2.054 2.512-3.348 3.527-.609.457-.837 1.142-1.902.939-.609-.152-1.649.761-1.573 1.446.254 1.878-1.091 2.842-2.03 3.933-2.08 2.36-4.438 4.466-6.467 6.877-2.968 3.527-6.392 6.622-9.512 9.997-.406.431-.863.913-1.04 1.472-.229.786-.584.888-1.243.583-.66.584-.964-.076-1.344-.38-2.486-1.954-5.15-3.603-7.864-5.253-2.46-1.522-4.794-3.476-7.076-5.379-3.4-2.867-6.722-5.836-10.172-8.678-.736-.609-2.511-.939-2.511-1.37.025-1.472-1.116-1.65-1.826-2.259-3.146-2.588-6.468-4.948-9.461-7.688a253.213 253.213 0 0 1-12.1-11.824c-2.74-2.842-5.377-5.811-8.243-8.552-1.167-1.116-2.004-2.537-3.323-3.501-.634-.457-.558-.914.05-1.396 3.222-2.537 5.961-5.582 9.513-7.84 2.46-1.548 4.59-3.807 6.772-5.837 2.942-2.74 5.606-5.709 8.269-8.678.178-.177.38-.329.482-.532 1.7-3.02 3.83-5.735 5.96-8.45 1.421-1.827 3.12-3.349 4.237-5.532.532-1.015 2.029-2.08 3.12-3.07 2.562-2.309 4.54-5.151 6.95-7.587 2.79-2.791 5.377-5.734 8.04-8.652 2.207-2.411 4.059-5.151 6.29-7.46 2.588-2.665 4.795-5.608 7.154-8.425 1.395-1.649 2.714-3.375 3.88-5.201.787-1.193 1.294-.914 2.055-.127 2.993 3.019 5.834 6.191 9.03 8.957 2.258 2.004 4.109 4.364 6.418 6.293 2.359 1.953 4.033 4.516 5.96 6.851 4.059 4.922 7.61 10.251 11.212 15.529 1.851 2.664 3.5 5.481 5.707 7.916.812.889 1.395 2.183 2.054 3.299.888 1.472 2.08 2.741 3.12 4.009 1.319 1.573 2.232 3.451 3.704 4.897 1.522 1.548 1.014 3.375.507 5.101Zm51.288-120.883c-.431 8.627-1.649 17.178-3.551 25.602a85.21 85.21 0 0 1-5.935 17.559c-2.131 4.568-4.794 8.881-7.661 13.043-.862 1.243-1.496 2.689-2.232 4.009-.837 1.446-2.435 2.461-2.993 4.11-.938 2.766-3.5 4.213-5.073 6.471-1.674 2.334-3.678 4.44-5.453 6.724-3.044 3.882-6.57 7.282-9.766 10.987-1.674 1.903-3.323 3.882-5.022 5.735-2.638 2.842-4.794 6.039-7.534 8.881-4.515-5.583-8.091-11.723-12.302-17.458-2.764-3.781-5.352-7.764-8.446-11.291-2.689-3.071-5.504-6.09-8.548-8.856-1.497-1.345-2.892-2.842-4.338-4.237-.355-.33-.507-.584-.304-1.092 2.207-5.303 2.942-10.961 3.779-16.594 1.091-7.283 1.725-14.616 1.624-22-.051-5.608-.102-11.241-1.192-16.798-.685-3.45-1.37-6.927-2.486-10.251-1.116-3.248-2.765-6.267-4.388-9.261-2.334-4.289-5.302-8.171-7.737-12.383-1.953-3.426-3.88-6.851-5.403-10.505-.279-.66-.532-1.37-.608-2.081-.102-.786-.584-1.725.304-2.309.964-.659 1.953-.152 2.689.406 5.96 4.618 10.957 10.023 14.407 16.798 1.725 3.375 3.754 6.597 5.53 9.921.38.736 1.014 1.091 1.547 1.371.609.329.989.583 1.192 1.268.228.838.863 1.32 1.801 1.142.837-.152 1.623-.051 2.029-1.218 1.091-3.121 1.192-6.267 1.015-9.49-.431-8.043-2.892-15.63-5.403-23.217-1.674-5.1-3.373-10.201-4.388-15.504-.101-.533-.076-1.091-.025-1.624.05-.989-.203-2.334.761-2.791 1.014-.482 2.308.101 3.196.736 1.877 1.319 3.525 2.943 4.515 5.1.101.228.228.533.405.584 3.222.812 4.084 3.603 4.972 6.191 1.573 4.567 3.602 9.008 4.642 13.753 1.217 5.608 1.572 11.266.964 17.001-.33 3.019-.761 5.988-1.522 8.931-.355 1.472.71 3.35 1.851 3.223 1.269-.127 2.486-.761 2.791-2.309a74.64 74.64 0 0 0 1.572-14.058c.076-4.059-.051-8.069-.888-12.002a75.431 75.431 0 0 0-4.743-14.717c-1.446-3.349-2.46-6.876-3.729-10.302-1.572-4.313-3.145-8.627-3.576-13.22-.203-2.055-.457-4.136.051-6.216.456-1.827 1.598-2.309 3.272-1.523 1.42.685 2.308 1.853 3.323 2.918 1.217 1.294 2.536 2.487 4.109 3.274 1.42.71 1.446 2.182 1.826 3.298 1.218 3.502 3.12 6.699 4.49 10.125 1.395 3.501 3.145 6.851 4.16 10.555.811 3.02 1.902 6.014 2.409 9.033.736 4.416 1.497 8.881 1.547 13.398.051 3.349.279 6.674.178 10.048-.051 1.7-.304 3.375-.304 5.05 0 1.218.659 2.41 2.105 2.436 1.167 0 2.232-.381 2.46-1.903.279-1.827.66-3.604.406-5.456-.177-1.192.355-1.294 1.37-1.04 3.754.964 7.432 1.192 10.932-1.015 1.04-.66 1.471-.102 1.497.989.076 4.847.406 9.693.71 14.515.203 3.095.38 6.267.736 9.388.304 2.461.228 4.948 1.09 7.333.203.508.178 1.117.99.99-.305.939 1.8 1.167.634 2.563-.711.837-.584 2.233.126 3.222.559.736 1.548.99 2.486.761.736-.177 1.446-.431 1.674-1.37.964-4.187 2.993-7.967 4.312-12.027 1.269-3.883 2.613-7.739 3.501-11.698.583-2.512 1.141-5.049 1.471-7.612.33-2.664.71-5.354 1.192-7.993.558-3.02.634-6.141 1.015-9.211.152-1.218.558-2.461.938-3.654.634-2.03 2.258-2.41 4.109-1.345 2.791 1.599 3.551 4.289 3.957 7.08.558 3.933.787 7.891 1.015 11.875.355 6.42.178 12.814-.127 19.234ZM75.588 52.73c.634-2.995.938-5.583 1.724-8.12.254-.787.685-1.396 1.116-2.005.102-.152.761-1.548 1.091 0 0 .102.304.178.482.178 2.004-.076 2.511.279 2.765 2.309.406 3.298.685 6.597 1.09 9.896.127.99.356 1.953.635 2.892.304.914.913.533 1.395.153.786-.61 1.395-1.37 2.435-1.7.355-.102.431-.94 1.065-.28.152.153.38.127.38-.279.026-1.903 1.193-2.436 2.867-2.258.127 0 .33.076.33.05.456-1.04 1.192-1.116 1.8-.304.685.888 1.243 1.98.381 3.121-1.725 2.36-3.45 4.72-5.682 6.648-2.029 1.726-2.13 3.299-.076 4.974 2.587 2.131 5.25 4.187 7.838 6.293 2.283 1.852 2.13 4.44-.28 5.379-1.166.457-2.333-.102-3.373-.38-2.282-.61-4.464-1.625-6.696-2.411-.583-.203-.406-.94-1.167-1.218.178 1.294.913 2.157 1.446 3.095.38.71.99 1.218.71 2.259-.203.786.99 1.04 1.42 1.75.888 1.447 1.675 2.868 1.903 4.542.203 1.447.228 3.02-1.37 3.63-1.395.532-2.587-.204-3.55-1.397-2.436-2.968-5.15-5.709-7.078-9.058-.152-.28-.558-.558-.862-.558-.507 0-.66.583-.71.913-.61 4.01-3.146 6.851-5.657 9.744-.989 1.116-3.45 1.472-4.997.761-1.547-.71-1.902-2.005-1.75-3.578.305-2.892 1.776-5.328 3.095-7.815.532-.99.862-2.157 1.851-2.842.33-.228.508-.533.406-.939-.152-.609-.66-.355-1.065-.38-3.602-.381-7.255-.229-10.831-1.066-2.359-.558-3.703-1.573-3.678-3.096.025-1.395 2.283-2.309 4.236-2.309 2.359 0 4.718.026 7.051 0 .406 0 1.066.254 1.243-.406.153-.558-.38-.837-.735-1.142-2.993-2.613-6.113-5.05-9.005-7.764-1.192-1.117-1.42-2.208-.913-3.502.482-1.192 1.7-1.497 2.866-1.42 2.816.202 5.276 1.547 7.711 2.841.634.33 1.294 1.066 1.903.685.482-.304.127-1.192 0-1.852-.533-2.563-1.269-5.151-1.395-7.74-.153-3.146-1.7-5.937-1.75-9.109 0-1.344.05-2.765-.432-4.161-.38-1.066.152-2.284 1.395-2.715 1.066-.355 1.75-.228 2.588 1.04 1.319 2.005 2.003 4.01 2.13 6.344.05.837.71 1.624.99 2.487.862 2.588 1.395 5.277 1.851 7.967.102.61.482.939.837 1.827l.026.025Zm10.754 18.7c-1.344-.99-2.333-2.106-3.246-3.476-.71-1.091.66-1.294.279-2.334-.508-1.37-.203-2.107-1.598-3.07-.61-.432-.812-.99-1.066-1.574-.431-1.015-.811-2.055-1.192-3.07-.152 0-.304.05-.457.05.178 2.284-1.75 4.263-.786 6.7.228.583-.228 1.192-.609 1.268-1.395.33-2.333 1.624-3.83 1.75-.355.026-.786.102-.684.61.278 1.268-1.243 3.298 1.521 3.552.33.026.863.533.888.838.127 1.7 1.37 1.344 2.385 1.395.228 0 .532 0 .71.127 1.319 1.142 1.37.102 1.522-.863.228-1.42.811-2.207 2.536-1.928 1.116.177 2.359.38 3.602 0l.025.025ZM361.249 99.797c-.203 2.918.33 5.709.787 8.475.406 2.309.152 4.618.507 6.927.254 1.599-.913 2.487-2.283 2.791-1.014.229-1.37-.837-1.877-1.548-1.496-2.182-1.471-4.871-2.46-7.257-.939-2.258-1.446-4.668-2.182-7.003-.253-.812-.761-.939-1.471-.33-1.775 1.523-3.957 2.157-6.189 2.715-1.75.432-3.551.381-5.327.482-.684.051-1.471-.126-1.902-.837-.228-.355-.786-.812.203-.964.228-.026.685.152.659-.305 0-.253-.228-.685-.405-.736-2.511-.583-.609-1.7-.153-2.283 1.142-1.421 3.095-1.802 4.465-3.147-.685-.532-1.37-1.09-2.08-1.598-.837-.584-1.243-1.447-1.015-2.36.254-1.015.634-2.132 2.004-2.335.583-.101 1.167-.304 1.75-.482 1.522-.456 1.776-1.37 1.421-2.892-.964-4.11-2.867-8.044-2.588-12.383.102-1.548-.431-3.425 1.827-4.288.634-.254 1.09-.355 1.623-.178.558.178 1.141.508.102.94 0 0-.001.151.025.177 3.526 1.624 2.841 5.658 4.591 8.145 3.374-2.258 5.479-5.963 9.106-7.993 1.978-1.117 4.464-1.117 5.352.28.989 1.547.482 3.323.127 5.023-.584 2.918-2.182 5.481-2.942 8.45 1.648-.355 3.272-.558 4.743-1.091 1.725-.61 3.5-.28 5.25-.533 2.055-.28 3.983 1.066 4.186 2.36.253 1.573-1.015 3.374-2.968 4.186a94.348 94.348 0 0 1-9.005 3.121c-.406.127-.989.254-1.065.736-.051.33.355.559.685.761a25.357 25.357 0 0 1 7.026 7.207c.685 1.04.38 2.182-.381 2.994-1.065 1.116-2.409 1.04-3.601.228-1.649-1.116-3.298-2.207-4.642-3.78-.508-.584-1.75-.584-1.928-1.777l.025.102Zm-.71-21.873c-.304.254-.507.482-.735.635-.254.127-.558.177-.863.253-.71.153-1.522 1.066-1.547 1.168-.457 2.182-1.953 3.577-3.424 4.998-.153.153-.229.178-.254.482 0 1.7-.558 2.107-2.46 2.183-.558.025-1.446.583-1.218.888.685.913.304 1.725-.051 2.41-.862 1.599-.938 2.766 1.218 3.172.127 0 .304.28.304.431-.177 2.106.939 2.411 2.664 2.005.253-.05.684 0 .837.203.887.964 1.395.025 1.572-.457.482-1.345 1.218-2.613 1.167-4.136 0-.583 0-1.116-.558-1.32-1.395-.43-.938-1.75-.634-2.207 1.167-1.801 1.243-4.009 2.41-5.734.482-.71.253-2.005 1.598-2.03.228 0 .228-.33.126-.38-1.293-.762.279-1.523-.126-2.538l-.026-.026ZM187.905 74.116c-.482-.152-.964 1.421-1.193.076-.304-1.7-1.598-2.588-2.485-3.806-3.323-4.542-5.327-9.718-7.585-14.793-1.471-3.299-3.272-6.445-4.235-9.947-.102-.38-.863-.583-.914-1.116-.025-.305-.811-1.117.457-.964.355.05.431-.736.101-.812-.431-.127-.456-.99-1.116-.533-.355.254-.431.228-.608-.305-.609-1.725-1.193-3.45-1.7-5.201-.228-.787.558-.559.913-.736.381-.178 1.142.304.913-.812-.126-.685 0-1.04-.887-.888-.508.076-.66-.482-.711-.964-.076-.71.178-1.523-.405-2.132a.53.53 0 0 1-.127-.33c.05-.355.279-.939.507-.837 1.623.584 2.587-2.31 3.703-1.142 2.156 2.258 4.186 4.821 4.668 8.12.126.786.76.228.989.71.735 1.599 1.75 3.02 2.004 4.872.076.584.634 1.573 1.242 2.335 1.066 1.294 1.649 3.07 2.106 4.669.811 2.867 2.308 5.379 3.297 8.145 1.066 2.943 2.41 5.81 3.653 8.652a232.77 232.77 0 0 0 3.551 7.714c1.167 2.436 2.131 4.973 3.171 7.46.076.152.05.406.152.507 3.221 2.842 3.17 7.156 4.718 10.734.634 1.472.811 3.222 1.395 4.796.101.253 0 .609-.051.888-.38 1.395-.939 2.689-.964 4.212 0 .837-1.116 1.294-2.08 1.167-1.268-.178-2.486-1.015-2.587-2.055-.203-2.182-1.649-3.756-2.283-5.71-.812-2.511-1.852-4.998-2.866-7.46-1.116-2.74-2.384-5.43-3.424-8.17-.558-1.472-1.015-2.969-1.852-4.263-.66-1.04.888-1.193.456-2.03l.077-.05ZM231.71 83.504c-1.497-.228-1.04-1.167-1.167-1.98-.33-2.207.862-4.084 1.192-6.14.304-1.827.178-3.831.786-5.404.711-1.853.381-3.4.229-5.1 0-.28.076-.61.228-.838 1.674-2.385 1.091-4.999.913-7.612-.279-3.502.406-6.928 1.04-10.378.33-1.802 1.116-3.553 1.091-5.43 0-.813.228-1.523.558-2.233 1.319-2.69 1.319-5.735 2.13-8.552.609-2.106 1.345-4.161 2.791-5.861.684-.812 3.069-.28 3.88.888 1.218 1.75 1.548 3.806 1.725 5.861.127 1.777-.05 3.553-.101 5.304-.076 2.182-.584 4.39-.228 6.597.228 1.472-.761 2.74-1.015 4.187-.304 1.725-.888 3.375-1.091 5.176-.253 2.157-1.04 4.212-1.775 6.268-.787 2.258-2.664 4.516-2.613 6.495.076 2.665-1.217 5.05-.837 7.663.152 1.066-.38 2.056-1.547 2.386.101.609 1.268.025.888.939-1.345 3.298-1.345 6.901-2.461 10.276-.456 1.421-1.217 2.639-1.725 4.035-.482 1.319-2.206.888-3.373.279-2.283-1.218-1.142-3.121-1.471-4.72-.279-1.37.076-2.157 1.927-2.106h.026ZM208.095 75.566c.634-.025 1.04-.05 1.572-.076-.152-.228-.228-.38-.329-.457-.914-.558-1.598-1.142-.584-2.258.355-.38.533-.888-.456-.66-.482.127-.381-.507-.381-.812-.177-2.715-.761-5.455-1.446-7.993-.887-3.349-.507-6.85-1.674-10.124-.304-.812-.456-1.878.127-2.918.279-.507-.279-1.37-.38-2.106-.381-3.02.177-5.912.456-8.856.102-1.04 1.243-1.243 1.826-1.37.964-.178 1.903.457 2.562 1.345a10.555 10.555 0 0 1 1.903 4.745c.253 1.878 1.09 3.527 1.395 5.38.253 1.598.304 2.968-.431 4.516-.355.761-.153 2.309.228 2.969 1.268 2.258.71 4.82 1.598 7.13 1.344 3.476 1.04 7.308 2.207 10.91.659 2.056 1.293 4.517.101 7.055-1.141 2.461-.761 2.639-2.435 3.425-.203.102-.533.33-.558.229-.457-1.269-1.928-1.015-2.638-1.7-1.015-.99-1.192-2.462-1.496-3.882-.305-1.472-.051-3.122-1.218-4.492h.051ZM163.782 81.857c-.786.863.051 1.218.558 1.802 1.801 2.08 3.83 3.933 5.733 5.938 2.866 2.994 5.757 5.988 7.888 9.59.609 1.016 1.116 2.031 0 3.046-.938.863-2.029.837-3.12.38-1.902-.786-3.044-2.537-4.718-3.628-1.166-.761-2.105-2.106-3.12-2.715-1.674-.99-3.12-2.182-4.616-3.375-2.283-1.801-4.642-3.552-6.417-5.912-.482-.634-1.218-.736-1.801-1.066-1.979-1.192-3.095-3.222-4.591-4.796-1.776-1.877-3.957-3.882-3.831-7.054.051-1.623 1.117-2.334 2.131-2.968.71-.432 1.624.279 2.41.736 2.207 1.319 4.388 2.69 6.747 3.73 2.308 1.014 4.287 2.537 5.986 4.44.457.533.533 1.193.761 1.903v-.05ZM314.983 32.708c-.202 2.36.102 4.974-.405 7.359-.508 2.41.786 3.933 1.445 5.81.305.863 1.243 1.066 1.776.71 1.344-.938 2.384-.253 3.069.61.888 1.091.228 2.309-.456 3.35-.508.735-1.218 1.344-1.674 2.08-2.537 4.01-4.186 8.399-5.429 12.966a3.496 3.496 0 0 1-.456.99c-.634 1.015-1.395 1.827-2.74 1.472-1.293-.356-1.75-1.396-1.775-2.589-.076-2.639.177-5.303-.431-7.916-.279-1.142-.609-2.31-1.091-3.375-.888-1.878-2.511-2.817-4.515-3.096-1.04-.152-1.877-.457-2.283-1.65-.609-1.725.051-2.79 1.953-2.79 1.319 0 1.75-.457 1.674-1.827-.05-.761.634-.838.939-.787 2.79.508 3.272-1.75 3.957-3.45 1.141-2.843 1.522-5.913 1.953-8.933.203-1.37.964-2.309 2.46-2.36 1.243-.05 2.055 1.295 2.08 3.426h-.051Zm-7.533 15.605c3.095 1.624 3.83 4.212 4.54 7.08 1.015-1.447 1.218-2.867 2.106-3.933.304-.38.329-1.015-.229-1.244-1.902-.786-2.511-2.537-3.119-4.237-1.294.482-1.37 2.157-3.273 2.334h-.025ZM251.545 93.68c.507-1.168-.279-2.843.761-4.162.051-.076 0-.305.025-.33 1.7-.812.559-2.487 1.091-3.654.431-.99.051-2.36 1.471-2.842.102-.025.229-.203.203-.279-.558-2.537.837-4.694 1.243-7.029.482-2.918 1.421-5.734 2.74-8.17 1.42-2.639 2.206-5.735 4.641-7.815 1.167-1.015 2.968-.685 3.678.532 2.131 3.578.787 6.928-.456 10.277-1.04 2.791-1.725 5.71-3.146 8.374-.583 1.09-.532 2.436-.507 3.704.051 1.599-.228 2.867-1.699 4.01-1.446 1.141-2.232 3.07-2.689 4.82-.507 1.954-1.978 3.375-2.435 5.304-.355 1.497-2.029 1.7-2.79 1.192-1.142-.786-2.74-1.725-2.182-3.907l.051-.026Z" fill="#000"/><path d="M43.704 215.426c-.127-2.791-.253-5.583-1.674-8.095-.355-.609-.66-1.37-1.623-1.065-1.192.38-2.308-.127-2.866-.965-.685-.964-.508-2.283.38-3.197 1.928-2.004 1.826-4.592 2.181-7.054.432-2.892.305-5.81.33-8.703 0-.812.152-1.497.634-2.208.609-.837 1.395-1.243 2.283-1.116.863.127 1.497.812 1.725 1.7.38 1.345.025 2.766.203 4.06.406 3.172.177 6.496 1.775 9.464.305.559.432 1.066 1.117 1.244.811.228 1.319-.178 1.674-.761.355-.584.913-.939 1.37-1.421.76-.863 1.623-.863 2.358-.203.812.735 1.522 1.624.812 2.867-1.674 3.019-2.587 6.318-3.45 9.617a173.459 173.459 0 0 1-2.333 8.069c-.33 1.04-1.116 1.827-2.283 1.649-.939-.152-1.979-.152-2.13-1.751-.052-.558-.381-1.421-.457-2.182l-.026.051Zm3.095-8.805c.685-1.472 1.395-2.867-1.04-3.375-.508-.101-.939-.736-1.294-1.218-.279-.38-.583-.761-.99-.431-.557.457.128 1.091.305 1.167 1.598.812 2.03 2.512 3.019 3.857ZM128.144 23.773c-.913 1.548-2.46 1.498-3.703 1.777-1.167.253-1.548.558-1.548 1.827 0 2.36-1.268 2.994-3.322 2.055-.913-.431-.888-1.218-.812-1.827.228-1.827-.66-1.675-1.928-1.421-1.04.228-2.257.33-2.891-.736-.533-.888.025-1.827.456-2.715.33-.66.913-.457 1.421-.584 2.917-.685 3.246-1.09 2.764-4.11-.253-1.523.964-2.715.711-4.238-.026-.152.71-.862 1.293-.66.787.254 1.776.559 1.827 1.472.101 1.472.558 2.918.279 4.44-.229 1.295.101 2.158 1.775 2.005 1.116-.101 2.41-.482 3.221.838.127.203.787.05.432.609-.254.38-.457.076-.736-.051-.735-.33-1.573-.99-2.131.076-.228.457-.025 1.142-.025 1.7.685-.253 1.522.584 2.156-.253.127-.178.254-.432.812-.28l-.051.076ZM340.095 159.3c-1.04-.127-1.624-.71-2.283-1.142-1.091-.71-1.243-2.892-.102-3.273 1.04-.33 1.345-.913 1.548-1.725.203-.787 1.065-.66 1.42-1.218-.279-.66-1.75-.229-1.268-1.599.177-.507.101-1.243.609-1.421.71-.254.279.685.659.914.406.253.888.786 1.268.482 1.852-1.574 1.573.583 1.674 1.091.153.888.279.989 1.193.939 1.293-.102 2.359.532 2.485 2.03.102 1.319-.634 2.004-1.877 2.207-1.369.228-1.978.914-1.826 2.411.127 1.294-.304 2.512-1.573 3.248-.963.558-2.079.507-2.561-.406-.356-.66-1.573-2.03.634-2.538ZM278.94 6.878c-.279.888-.508 1.98-1.547 2.335-.888.279-1.827-.051-2.258-.99-.279-.609-.609-.71-1.243-.736-.938-.05-1.75-.533-2.029-1.497-.254-.888.101-1.573.888-2.131.608-.432.786-1.142.887-1.903.153-1.015.838-1.574 1.878-1.878 1.217-.355 1.471.583 1.851 1.243.964 1.675 1.04 3.654 1.573 5.557ZM258.318 180.108c.457 1.091-.254 1.979-.989 2.157-1.04.254-2.537.279-3.196-.482-1.142-1.294-2.79-1.573-4.008-2.588-2.029-1.7-4.667-2.106-7.051-2.817-2.08-.634-4.338-1.167-6.595-1.37-.736-.076-1.979.127-1.903-1.319.051-1.092.203-2.106 1.446-2.487.381-.127.482-.203.71.279.33.634.609.584.888-.203.355-.964.786-.178 1.091-.127 1.851.381 3.728.076 5.58.787 3.298 1.319 6.671 2.334 9.74 4.212 1.446.888 2.765 1.954 4.236 2.766.584.304.051.786.051 1.192Z" fill="#000"/></g></g><defs><linearGradient id="c" x1="40.84" y1="42.371" x2="388.572" y2="297.259" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="d" x1="40.84" y1="42.371" x2="388.572" y2="297.259" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="e" x1="40.84" y1="42.371" x2="388.572" y2="297.259" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="f" x1="40.84" y1="42.371" x2="388.572" y2="297.259" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="g" x1="40.84" y1="42.371" x2="388.572" y2="297.259" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><linearGradient id="h" x1="40.84" y1="42.371" x2="388.572" y2="297.259" gradientUnits="userSpaceOnUse"><stop stop-color="#9059FF"/><stop offset=".521" stop-color="#FF4AA2"/><stop offset="1" stop-color="#FFBD4F"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h388.656v400H0z"/></clipPath><clipPath id="b"><path fill="#fff" d="M0 0h388.644v400H0z"/></clipPath></defs></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/mr-rtamo-background-image.svg b/browser/components/newtab/data/content/assets/mr-rtamo-background-image.svg
new file mode 100644
index 0000000000..25a66c2a96
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mr-rtamo-background-image.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="400" height="550" fill="none"><g clip-path="url(#a)"><path fill="#fff" d="M0 0h400v550H0z"/><path fill="url(#b)" d="M0 0h400v550H0z"/><path fill="url(#c)" fill-rule="evenodd" d="M272.671 215.932a56.175 56.175 0 0 1 20.086 25.394 102.923 102.923 0 0 1 6.497 50.298c-.062.517-.12 1.034-.178 1.551-.087.775-.174 1.549-.274 2.324-8.841 51.21-55.389 87.146-107.17 82.735-51.78-4.41-91.58-47.701-91.632-99.669v-.516a95.098 95.098 0 0 1 1.64-13.809v-.219c.117-.969.801-5.373.995-6.252l.129-.671a84.495 84.495 0 0 1 13.485-30.329 88.718 88.718 0 0 1 9.352-11.212 72.249 72.249 0 0 1 9.791-8.383 18.712 18.712 0 0 1 3.332-1.782 54.875 54.875 0 0 0 3.462 25.084 74.104 74.104 0 0 1 24.103-18.626 46.31 46.31 0 0 0 .284 24.464 30.49 30.49 0 0 1 2.583 1.964 50.087 50.087 0 0 1 27.565-10.618 73.028 73.028 0 0 1 34.462-55.645h.077a.321.321 0 0 1 .194 0 .283.283 0 0 1 .232.284c.334 1.373.833 2.7 1.486 3.953.31.632.658 1.317 1.111 2.04.571.969 1.165 1.938 1.758 2.907l.592.968c6.306 9.941 13.179 17.733 19.878 25.328 9.963 11.294 19.542 22.154 26.3 38.998v-.168a103.795 103.795 0 0 0-10.14-30.393Zm-95.314 103.765c.135.064.267.129.399.196l-.399-.196Zm.399.196.19.096c.262.133.526.267.806.393l-.996-.489Z" clip-rule="evenodd"/><path fill="url(#d)" d="M292.757 241.316a56.175 56.175 0 0 0-20.086-25.394 103.795 103.795 0 0 1 10.14 30.393v.207a90.665 90.665 0 0 1-3.087 67.567c-15.135 31.483-47.797 50.697-82.668 48.632-47.269-1.323-87.258-35.343-96.139-81.789a43.096 43.096 0 0 1 .711-16.701A73.633 73.633 0 0 0 100 278.039v.516c.052 51.968 39.852 95.259 91.632 99.67 51.781 4.41 98.329-31.525 107.17-82.736.168-1.291.297-2.583.452-3.875a102.923 102.923 0 0 0-6.497-50.298Z"/><path fill="url(#e)" d="M292.757 241.316a56.175 56.175 0 0 0-20.086-25.394 103.795 103.795 0 0 1 10.14 30.393v.207a90.665 90.665 0 0 1-3.087 67.567c-15.135 31.483-47.797 50.697-82.668 48.632-47.269-1.323-87.258-35.343-96.139-81.789a43.096 43.096 0 0 1 .711-16.701A73.633 73.633 0 0 0 100 278.039v.516c.052 51.968 39.852 95.259 91.632 99.67 51.781 4.41 98.329-31.525 107.17-82.736.168-1.291.297-2.583.452-3.875a102.923 102.923 0 0 0-6.497-50.298Z"/><path fill="url(#f)" d="m244.104 253.103.632.465a54.394 54.394 0 0 0-9.3-12.129c-19.584-18.321-21.465-48.742-4.288-69.337a73.03 73.03 0 0 0-34.423 55.568c1.162-.078 2.325-.181 3.513-.181a50.518 50.518 0 0 1 43.866 25.614Z"/><path fill="url(#g)" d="M200.305 259.317a24.205 24.205 0 0 1-12.038 11.07c-28.417 0-33.093 17.231-33.093 17.231a42.266 42.266 0 0 0 23.586 32.77c.556.284 1.124.542 1.679.801.982.439 1.964.839 2.946 1.201a44.374 44.374 0 0 0 13.033 2.583c19.638 1.884 37.881-10.344 43.6-29.225 5.72-18.882-2.67-39.177-20.053-48.508a34.569 34.569 0 0 1 24.141 5.851 50.517 50.517 0 0 0-43.917-25.614c-1.188 0-2.351.104-3.513.181a50.084 50.084 0 0 0-27.564 10.618c1.537 1.292 3.255 3.022 6.884 6.6a157.767 157.767 0 0 0 24.309 14.441Z"/><path fill="url(#h)" d="M200.305 259.317a24.205 24.205 0 0 1-12.038 11.07c-28.417 0-33.093 17.231-33.093 17.231a42.266 42.266 0 0 0 23.586 32.77c.556.284 1.124.542 1.679.801.982.439 1.964.839 2.946 1.201a44.374 44.374 0 0 0 13.033 2.583c19.638 1.884 37.881-10.344 43.6-29.225 5.72-18.882-2.67-39.177-20.053-48.508a34.569 34.569 0 0 1 24.141 5.851 50.517 50.517 0 0 0-43.917-25.614c-1.188 0-2.351.104-3.513.181a50.084 50.084 0 0 0-27.564 10.618c1.537 1.292 3.255 3.022 6.884 6.6a157.767 157.767 0 0 0 24.309 14.441Z"/><path fill="url(#i)" d="m164.489 234.956 2.08 1.37a46.324 46.324 0 0 1-.285-24.465 74.1 74.1 0 0 0-24.102 18.626 49.388 49.388 0 0 1 22.307 4.469Z"/><path fill="url(#j)" d="M100.913 280.951c8.855 46.449 48.821 80.489 96.087 81.841 34.902 2.078 67.592-17.162 82.719-48.683a90.665 90.665 0 0 0 3.126-67.568v-.155.168a67.399 67.399 0 0 1-26.686 60.851l-.065.129c-35.921 29.257-70.305 17.657-77.268 12.917l-1.459-.723c-18.094-7.588-29.287-25.919-27.771-45.48a25.718 25.718 0 0 1-23.702-14.919 37.767 37.767 0 0 1 36.812-1.486 49.82 49.82 0 0 0 37.588 1.486 157.966 157.966 0 0 1-24.258-14.441c-3.629-3.578-5.347-5.309-6.884-6.601a30.882 30.882 0 0 0-2.584-1.963l-2.079-1.369a49.374 49.374 0 0 0-22.307-4.469 54.866 54.866 0 0 1-3.462-25.085 18.79 18.79 0 0 0-3.333 1.783 72.17 72.17 0 0 0-9.79 8.383 88.41 88.41 0 0 0-9.352 11.212 84.473 84.473 0 0 0-13.485 30.328 75.022 75.022 0 0 0-1.847 23.844Z"/><path fill="url(#k)" d="M235.433 241.43a54.418 54.418 0 0 1 9.3 12.128c.542.414 1.059.827 1.498 1.292a48.037 48.037 0 0 1 9.92 52.61 67.4 67.4 0 0 0 26.686-60.915c-11.328-28.224-30.523-39.655-46.204-64.378-.787-1.291-1.588-2.583-2.35-3.875a21.884 21.884 0 0 1-1.111-2.04 17.506 17.506 0 0 1-1.486-3.953.283.283 0 0 0-.232-.284.321.321 0 0 0-.194 0h-.077c-17.237 20.597-15.371 51.074 4.25 69.415Z"/><path fill="url(#l)" d="M246.226 254.776c-.439-.4-.956-.814-1.498-1.291l-.633-.465a34.567 34.567 0 0 0-24.142-5.852c17.295 9.372 25.613 29.614 19.906 48.439-5.707 18.824-23.866 31.039-43.453 29.23a44.35 44.35 0 0 1-13.033-2.584 46.696 46.696 0 0 1-2.945-1.201c-.555-.258-1.124-.517-1.679-.801 6.962 4.754 41.333 16.353 77.268-12.917l.064-.129a48.037 48.037 0 0 0-9.855-52.429Z"/><path fill="url(#m)" d="M155.166 287.63s4.624-17.231 33.092-17.231a24.205 24.205 0 0 0 12.039-11.069 49.82 49.82 0 0 1-37.588-1.486 37.769 37.769 0 0 0-36.813 1.486 25.719 25.719 0 0 0 23.703 14.919c-1.514 19.55 9.666 37.872 27.745 45.467.465.219.904.465 1.395.684a42.262 42.262 0 0 1-23.573-32.77Z"/><path fill="url(#n)" d="M292.757 241.326a56.175 56.175 0 0 0-20.086-25.394 103.795 103.795 0 0 1 10.14 30.393v.168c-11.302-28.172-30.497-39.603-46.178-64.326-.787-1.291-1.588-2.583-2.35-3.875a21.884 21.884 0 0 1-1.111-2.04 17.506 17.506 0 0 1-1.486-3.953.283.283 0 0 0-.232-.284.321.321 0 0 0-.194 0h-.077a73.028 73.028 0 0 0-34.462 55.645c1.162-.077 2.325-.181 3.513-.181a50.517 50.517 0 0 1 43.917 25.614 34.569 34.569 0 0 0-24.141-5.851c17.294 9.372 25.612 29.614 19.905 48.439-5.707 18.824-23.866 31.039-43.453 29.229a44.348 44.348 0 0 1-13.033-2.583 47.554 47.554 0 0 1-2.945-1.201c-.555-.258-1.123-.517-1.679-.801l-1.459-.723c.465.219.904.465 1.395.684a42.264 42.264 0 0 1-23.574-32.666s4.625-17.231 33.093-17.231a24.207 24.207 0 0 0 12.039-11.07 157.758 157.758 0 0 1-24.258-14.441c-3.63-3.578-5.348-5.309-6.885-6.6a30.49 30.49 0 0 0-2.583-1.964 46.31 46.31 0 0 1-.284-24.464 74.104 74.104 0 0 0-24.103 18.626 54.875 54.875 0 0 1-3.462-25.084 18.712 18.712 0 0 0-3.332 1.782 72.249 72.249 0 0 0-9.791 8.383 88.718 88.718 0 0 0-9.352 11.212 84.495 84.495 0 0 0-13.485 30.329l-.129.671c-.194.879-1.046 5.348-1.162 6.316A118.3 118.3 0 0 0 100 278.049v.516c.052 51.968 39.852 95.259 91.632 99.669 51.781 4.411 98.329-31.525 107.17-82.735.168-1.292.297-2.583.452-3.875a102.923 102.923 0 0 0-6.497-50.298Z"/></g><defs><radialGradient id="d" cx="0" cy="0" r="1" gradientTransform="matrix(208.722 0 0 215.61 271.832 145.358)" gradientUnits="userSpaceOnUse"><stop offset=".129" stop-color="#FFBD4F"/><stop offset=".186" stop-color="#FFAC31"/><stop offset=".247" stop-color="#FF9D17"/><stop offset=".283" stop-color="#FF980E"/><stop offset=".403" stop-color="#FF563B"/><stop offset=".467" stop-color="#FF3750"/><stop offset=".71" stop-color="#F5156C"/><stop offset=".782" stop-color="#EB0878"/><stop offset=".86" stop-color="#E50080"/></radialGradient><radialGradient id="e" cx="0" cy="0" r="1" gradientTransform="matrix(208.722 0 0 215.61 195.558 253.731)" gradientUnits="userSpaceOnUse"><stop offset=".3" stop-color="#960E18"/><stop offset=".351" stop-color="#B11927" stop-opacity=".74"/><stop offset=".435" stop-color="#DB293D" stop-opacity=".343"/><stop offset=".497" stop-color="#F5334B" stop-opacity=".094"/><stop offset=".53" stop-color="#FF3750" stop-opacity=".01"/></radialGradient><radialGradient id="f" cx="0" cy="0" r="1" gradientTransform="matrix(629.917 0 0 650.704 199.973 109.859)" gradientUnits="userSpaceOnUse"><stop offset=".132" stop-color="#FFF44F"/><stop offset=".252" stop-color="#FFDC3E"/><stop offset=".506" stop-color="#FF9D12"/><stop offset=".526" stop-color="#FF980E"/></radialGradient><radialGradient id="g" cx="0" cy="0" r="1" gradientTransform="matrix(223.5 0 0 230.876 138.896 398.985)" gradientUnits="userSpaceOnUse"><stop offset=".353" stop-color="#3A8EE6"/><stop offset=".472" stop-color="#5C79F0"/><stop offset=".669" stop-color="#9059FF"/><stop offset="1" stop-color="#C139E6"/></radialGradient><radialGradient id="h" cx="0" cy="0" r="1" gradientTransform="rotate(-12.809 1131.776 -761.948) scale(118.111 121.632)" gradientUnits="userSpaceOnUse"><stop offset=".206" stop-color="#9059FF" stop-opacity=".01"/><stop offset=".278" stop-color="#8C4FF3" stop-opacity=".064"/><stop offset=".747" stop-color="#7716A8" stop-opacity=".45"/><stop offset=".975" stop-color="#6E008B" stop-opacity=".6"/></radialGradient><radialGradient id="i" cx="0" cy="0" r="1" gradientTransform="matrix(586.335 0 0 605.684 516.102 -42.781)" gradientUnits="userSpaceOnUse"><stop stop-color="#FFE226"/><stop offset=".121" stop-color="#FFDB27"/><stop offset=".295" stop-color="#FFC82A"/><stop offset=".502" stop-color="#FFA930"/><stop offset=".732" stop-color="#FF7E37"/><stop offset=".792" stop-color="#FF7139"/></radialGradient><radialGradient id="j" cx="0" cy="0" r="1" gradientTransform="matrix(325.795 0 0 336.546 258.564 87.645)" gradientUnits="userSpaceOnUse"><stop offset=".113" stop-color="#FFF44F"/><stop offset=".456" stop-color="#FF980E"/><stop offset=".622" stop-color="#FF5634"/><stop offset=".716" stop-color="#FF3647"/><stop offset=".904" stop-color="#E31587"/></radialGradient><radialGradient id="k" cx="0" cy="0" r="1" gradientTransform="rotate(77.763 -58.163 151.983) scale(346.995 336.922)" gradientUnits="userSpaceOnUse"><stop stop-color="#FFF44F"/><stop offset=".06" stop-color="#FFE847"/><stop offset=".168" stop-color="#FFC830"/><stop offset=".304" stop-color="#FF980E"/><stop offset=".356" stop-color="#FF8B16"/><stop offset=".455" stop-color="#FF672A"/><stop offset=".57" stop-color="#FF3647"/><stop offset=".737" stop-color="#E31587"/></radialGradient><radialGradient id="l" cx="0" cy="0" r="1" gradientTransform="matrix(469.191 0 0 484.675 130.741 83.866)" gradientUnits="userSpaceOnUse"><stop offset=".137" stop-color="#FFF44F"/><stop offset=".48" stop-color="#FF980E"/><stop offset=".592" stop-color="#FF5634"/><stop offset=".655" stop-color="#FF3647"/><stop offset=".904" stop-color="#E31587"/></radialGradient><radialGradient id="m" cx="0" cy="0" r="1" gradientTransform="matrix(560.313 0 0 578.803 410.764 79.89)" gradientUnits="userSpaceOnUse"><stop offset=".094" stop-color="#FFF44F"/><stop offset=".231" stop-color="#FFE141"/><stop offset=".509" stop-color="#FFAF1E"/><stop offset=".626" stop-color="#FF980E"/></radialGradient><linearGradient id="b" x1="0" x2="368.013" y1="550" y2="282.354" gradientUnits="userSpaceOnUse"><stop stop-color="#0290EE"/><stop offset="1" stop-color="#9059FF"/></linearGradient><linearGradient id="c" x1="201.885" x2="30.656" y1="118.187" y2="273.001" gradientUnits="userSpaceOnUse"><stop offset=".048" stop-color="#FFF44F"/><stop offset=".111" stop-color="#FFE847"/><stop offset=".225" stop-color="#FFC830"/><stop offset=".368" stop-color="#FF980E"/><stop offset=".401" stop-color="#FF8B16"/><stop offset=".462" stop-color="#FF672A"/><stop offset=".534" stop-color="#FF3647"/><stop offset=".705" stop-color="#E31587"/></linearGradient><linearGradient id="n" x1="209.061" x2="63.186" y1="130.117" y2="266.808" gradientUnits="userSpaceOnUse"><stop offset=".167" stop-color="#FFF44F" stop-opacity=".8"/><stop offset=".266" stop-color="#FFF44F" stop-opacity=".634"/><stop offset=".489" stop-color="#FFF44F" stop-opacity=".217"/><stop offset=".6" stop-color="#FFF44F" stop-opacity=".01"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h400v550H0z"/></clipPath></defs></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/mr-settodefault.svg b/browser/components/newtab/data/content/assets/mr-settodefault.svg
new file mode 100644
index 0000000000..a12306e87c
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/mr-settodefault.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg width="258" height="400" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path d="M239.284 83.868c-5.266-12.666-15.932-26.341-24.307-30.663 6.816 13.362 10.761 26.767 12.269 36.771 0 .02.007.069.023.202-13.7-34.148-36.931-47.918-55.902-77.9-.957-1.516-1.918-3.036-2.854-4.638a37.56 37.56 0 0 1-1.334-2.507 22.018 22.018 0 0 1-1.811-4.792.315.315 0 0 0-.275-.325.415.415 0 0 0-.228 0c-.017.006-.042.026-.06.033-.027.01-.061.035-.089.05.014-.018.042-.059.05-.068-30.436 17.825-40.761 50.8-41.71 67.297a60.625 60.625 0 0 0-33.346 12.85 36 36 0 0 0-3.139-2.37 56.132 56.132 0 0 1-.34-29.61c-12.446 5.668-22.127 14.626-29.165 22.536h-.056c-4.803-6.083-4.465-26.152-4.19-30.342-.058-.26-3.584 1.83-4.046 2.145a88.266 88.266 0 0 0-11.84 10.144c-4.143 4.2-7.927 8.739-11.315 13.568 0 .006-.003.014-.006.02 0-.007.004-.014.006-.02a102.261 102.261 0 0 0-16.258 36.706c-.058.263-.107.535-.163.8-.228 1.066-1.049 6.402-1.192 7.562-.012.089-.017.175-.027.264a115.488 115.488 0 0 0-1.966 16.717c0 .206-.013.411-.013.618.002 66.909 54.25 121.148 121.164 121.148 59.928 0 109.686-43.503 119.428-100.646.205-1.551.369-3.11.55-4.674 2.408-20.777-.267-42.614-7.858-60.876Zm-139.65 94.83c.566.271 1.098.567 1.68.827.024.016.057.035.082.05a61.355 61.355 0 0 1-1.763-.877Zm127.645-88.49-.016-.118.02.13-.004-.012Z" fill="url(#b)"/><path d="M239.283 83.859c-5.266-12.667-15.932-26.341-24.307-30.664 6.816 13.363 10.761 26.768 12.269 36.772 0-.03.005.024.018.114l.02.13c11.432 30.991 5.204 62.506-3.771 81.763-13.884 29.796-47.499 60.333-100.114 58.844-56.847-1.61-106.927-43.789-116.276-99.035-1.704-8.712 0-13.135.857-20.209-1.044 5.453-1.442 7.028-1.966 16.717 0 .207-.013.411-.013.619.001 66.906 54.249 121.145 121.163 121.145 59.928 0 109.686-43.503 119.428-100.646.205-1.551.369-3.11.55-4.674 2.408-20.777-.267-42.615-7.858-60.876Z" fill="url(#c)"/><path d="M239.283 83.859c-5.266-12.667-15.932-26.341-24.307-30.664 6.816 13.363 10.761 26.768 12.269 36.772 0-.03.005.024.018.114l.02.13c11.432 30.991 5.204 62.506-3.771 81.763-13.884 29.796-47.499 60.333-100.114 58.844-56.847-1.61-106.927-43.789-116.276-99.035-1.704-8.712 0-13.135.857-20.209-1.044 5.453-1.442 7.028-1.966 16.717 0 .207-.013.411-.013.619.001 66.906 54.249 121.145 121.163 121.145 59.928 0 109.686-43.503 119.428-100.646.205-1.551.369-3.11.55-4.674 2.408-20.777-.267-42.615-7.858-60.876Z" fill="url(#d)"/><path d="M180.403 98.1c.264.186.504.37.752.555a65.859 65.859 0 0 0-11.248-14.677c-37.663-37.66-9.876-81.655-5.189-83.89.013-.018.041-.059.05-.068-30.436 17.825-40.762 50.8-41.71 67.297 1.411-.098 2.819-.216 4.256-.216 22.713 0 42.495 12.488 53.089 31Z" fill="url(#e)"/><path d="M127.389 105.636c-.198 3.014-10.847 13.407-14.57 13.407-34.454 0-40.047 20.84-40.047 20.84 1.526 17.55 13.744 32.002 28.541 39.649.675.349 1.358.664 2.042.975a67.024 67.024 0 0 0 3.559 1.455 53.837 53.837 0 0 0 15.766 3.041c60.388 2.832 72.088-72.193 28.507-93.98 11.161-1.941 22.746 2.548 29.215 7.092-10.593-18.51-30.376-30.998-53.088-30.998-1.437 0-2.844.119-4.256.216a60.626 60.626 0 0 0-33.347 12.85c1.848 1.563 3.933 3.653 8.326 7.98 8.219 8.1 29.307 16.489 29.352 17.473Z" fill="url(#f)"/><path d="M127.389 105.636c-.198 3.014-10.847 13.407-14.57 13.407-34.454 0-40.047 20.84-40.047 20.84 1.526 17.55 13.744 32.002 28.541 39.649.675.349 1.358.664 2.042.975a67.024 67.024 0 0 0 3.559 1.455 53.837 53.837 0 0 0 15.766 3.041c60.388 2.832 72.088-72.193 28.507-93.98 11.161-1.941 22.746 2.548 29.215 7.092-10.593-18.51-30.376-30.998-53.088-30.998-1.437 0-2.844.119-4.256.216a60.626 60.626 0 0 0-33.347 12.85c1.848 1.563 3.933 3.653 8.326 7.98 8.219 8.1 29.307 16.489 29.352 17.473Z" fill="url(#g)"/><path d="M84.061 76.158c.844.544 1.681 1.099 2.512 1.664a56.134 56.134 0 0 1-.34-29.611c-12.447 5.667-22.128 14.626-29.166 22.536.582-.016 18.157-.333 26.994 5.41Z" fill="url(#h)"/><path d="M7.122 131.801c9.349 55.245 59.43 97.425 116.276 99.034 52.615 1.49 86.231-29.049 100.115-58.843 8.974-19.259 15.202-50.769 3.77-81.763l-.004-.013-.016-.117c-.012-.09-.02-.144-.018-.114 0 .02.008.068.024.201 4.297 28.062-9.978 55.248-32.292 73.63l-.067.158c-43.482 35.404-85.09 21.36-93.515 15.612a72.571 72.571 0 0 1-1.764-.879c-25.35-12.114-35.823-35.21-33.577-55.016-21.406 0-28.704-18.054-28.704-18.054s19.218-13.702 44.547-1.785c23.458 11.038 45.489 1.786 45.492 1.785-.045-.984-21.133-9.372-29.354-17.472-4.393-4.328-6.479-6.414-8.326-7.98a35.98 35.98 0 0 0-3.138-2.37 142.568 142.568 0 0 0-2.512-1.663c-8.837-5.743-26.412-5.427-26.994-5.412h-.056c-4.803-6.084-4.464-26.153-4.19-30.343-.058-.26-3.584 1.83-4.046 2.145a88.266 88.266 0 0 0-11.84 10.144 106.12 106.12 0 0 0-11.315 13.572c0 .006-.003.013-.005.019 0-.007.003-.013.005-.02a102.262 102.262 0 0 0-16.257 36.706c-.058.263-4.361 19.079-2.239 28.838Z" fill="url(#i)"/><path d="M169.908 83.986a65.889 65.889 0 0 1 11.248 14.677c.667.502 1.29 1.001 1.819 1.489 27.468 25.309 13.076 61.104 12.003 63.655 22.315-18.381 36.59-45.567 32.292-73.63-13.701-34.148-36.932-47.917-55.902-77.899-.958-1.516-1.919-3.036-2.854-4.638a36.657 36.657 0 0 1-1.334-2.507 22.073 22.073 0 0 1-1.812-4.792.314.314 0 0 0-.275-.325.411.411 0 0 0-.227 0c-.018.006-.043.026-.061.033-.027.01-.06.035-.089.05-4.684 2.233-32.471 46.229 5.192 83.887Z" fill="url(#j)"/><path d="M182.974 100.158a23.914 23.914 0 0 0-1.819-1.489c-.247-.185-.489-.37-.753-.554-6.469-4.545-18.054-9.033-29.215-7.092 43.581 21.787 31.881 96.812-28.508 93.98a53.837 53.837 0 0 1-15.765-3.041 67.024 67.024 0 0 1-3.559-1.455 46.942 46.942 0 0 1-2.042-.975c.024.016.057.035.082.05 8.425 5.747 50.033 19.792 93.515-15.612l.067-.158c1.073-2.548 15.465-38.345-12.003-63.654Z" fill="url(#k)"/><path d="M72.772 139.863s5.592-20.839 40.046-20.839c3.725 0 14.374-10.394 14.571-13.407.197-3.014-22.032 9.252-45.492-1.786-25.33-11.917-44.547 1.786-44.547 1.786s7.298 18.053 28.704 18.053c-2.245 19.807 8.227 42.904 33.577 55.016.567.271 1.099.567 1.681.827-14.796-7.648-27.014-22.1-28.54-39.65Z" fill="url(#l)"/><path d="M239.282 83.868c-5.266-12.666-15.932-26.341-24.307-30.663 6.816 13.362 10.761 26.767 12.269 36.771 0 .02.007.069.024.202-13.701-34.148-36.932-47.918-55.903-77.9-.957-1.516-1.918-3.036-2.854-4.638a37.56 37.56 0 0 1-1.334-2.507 22.018 22.018 0 0 1-1.811-4.792.315.315 0 0 0-.275-.325.415.415 0 0 0-.228 0c-.017.006-.042.026-.06.033-.027.01-.061.035-.089.05.014-.018.042-.059.05-.068-30.436 17.825-40.761 50.8-41.71 67.297 1.412-.097 2.819-.216 4.256-.216 22.714 0 42.497 12.488 53.088 30.998-6.469-4.545-18.054-9.033-29.214-7.092 43.58 21.787 31.881 96.812-28.508 93.98a53.843 53.843 0 0 1-15.766-3.041 67.37 67.37 0 0 1-3.559-1.455 45.756 45.756 0 0 1-2.042-.975l.083.05a72.263 72.263 0 0 1-1.765-.879c.567.271 1.099.567 1.681.827-14.797-7.647-27.015-22.099-28.541-39.649 0 0 5.593-20.84 40.046-20.84 3.725 0 14.374-10.393 14.571-13.407-.045-.984-21.133-9.372-29.354-17.472-4.393-4.328-6.479-6.415-8.326-7.98a35.949 35.949 0 0 0-3.138-2.37 56.133 56.133 0 0 1-.34-29.61C73.779 53.864 64.098 62.823 57.06 70.733h-.056c-4.803-6.084-4.464-26.153-4.19-30.343-.058-.26-3.584 1.83-4.045 2.146a88.26 88.26 0 0 0-11.841 10.143 106.109 106.109 0 0 0-11.311 13.57c0 .006-.004.014-.006.02 0-.007.004-.014.006-.02a102.261 102.261 0 0 0-16.258 36.706c-.058.263-.107.535-.163.8-.228 1.066-1.253 6.48-1.397 7.641-.01.089.01-.089 0 0A140.934 140.934 0 0 0 6.013 128.3c0 .207-.013.412-.013.619 0 66.906 54.248 121.145 121.162 121.145 59.928 0 109.686-43.503 119.428-100.646.205-1.551.369-3.11.55-4.674 2.408-20.777-.267-42.614-7.858-60.876Zm-12.02 6.222.02.13-.004-.012-.016-.118Z" fill="url(#m)"/><path d="m82.412 64.229 2.732 13.683L101 70.242l22.965-3.281 3.281-24.086-10.391-7.121-6.013 7.121L101 40.143l-8.746 7.122h-9.842V64.24v-.011ZM142.575 171.531l16.404 9.305H144.21l-10.94-6.024h-6.013l-4.378 3.28 4.378 3.83-2.183 5.475 5.464 4.378v6.573l13.672 4.927 1.635 5.475 32.807-3.28 28.442-10.951c9.584-5.42 30.635-17.423 39.918-22.999l6.561-14.781v-17.524l-4.378-8.207-18.05 23.548-54.687 26.28-22.417-12.597-12.037-1.098.549 4.379.022.011ZM12.418 127.191 8.04 114.594H5.308L.38 132.655l9.842 26.829L40.3 183.02l39.918 17.524h6.013l4.927-2.195 7.11-1.097v-5.475l7.659-3.281 1.098-5.476 5.464-4.927v-4.378c-4.389-.537-18.442 1.568-22.966 2.184l-6.013-4.378 8.745-6.573 3.281-7.122-4.378-1.646c-5.005 1.982-19.002 8.566-24.063 10.951-11.802-5.654-29.314-17.008-39.918-24.634l-9.294-7.121-5.464-8.208v.023ZM82.96 361.502v-16.975h26.247l6.561 11.5-10.939 2.195-1.646 12.048-20.234-8.756.011-.012ZM140.929 344.527V339.6l8.745-1.097 13.672-4.378 6.013 10.402h-9.294l-6.562 7.67-12.574-7.67Z" fill="#EEC8A7"/><path d="M256.955 137.624c-.717-2.228.403-4.859-.862-6.785-1.053-1.086-2.195-2.139-2.072-3.886.023-.246-.045-.716-.168-.761-1.847-.661-1.276-2.24-1.377-3.538-1.422-13.672-4.748-27.3-10.951-39.627-5.307-13.068-15.631-23.212-27.971-29.752-.985-.66-2.038-1.052-2.833-.268-2.049 2.44 2.128 4.4 2.509 6.808 1.702 4.232 2.922 8.599 3.885 13.056.101.447.661.929-.101 1.478-5.24-7.1-11.175-13.84-17.221-20.212-8.432-8.913-15.262-19.001-22.753-28.665-4.972-6.662-10.29-13.414-11.264-21.935-.045-2.071-2.822-2.878-4.054-1.478-1.478 1.915-3.538 3.191-5.061 4.972-6.651 6.696-14.075 12.619-18.296 21.364-4.3-14.859-19.752-22.047-34.163-23.089-8.264-1.377-15.161 4.266-22.708 6.517-1.03.37-1.669.907-2.307 1.724-3.785 4.994-8.096 9.372-13.829 12.295-2.586 1.332-4.87 3.292-6.102 6.215-1.635 2.832-1.579 6.248-2.956 9.047.93.493.492 1.4.448 2.06-.224 3.594.078 7.054 1.276 10.503.515 1.478 1.478 2.923 1.355 4.546-.145 2.06-.291 4.054 1.176 5.185-1.422 1.366-2.307 3.292-3.886 4.378-2.273-5.073-2.597-10.884-3.079-16.37-.571-4.054 1.12-11.444-4.546-11.993-4.725 1.422-7.424 6.035-11.018 9.17-6.047 6.45-12.43 12.855-17.39 20.111-3.695 5.386-5.587 11.668-7.423 17.87-2.788 7.75-5.095 14.792-6.371 23.134-.448-2.15-1.803-1.847-2.587-.347-5.923 12.127-5.15 26.549-.963 39.068 4.12 8.42 5.52 17.882 8.958 26.627 7.222 27.366 29.661 46.939 54.878 57.901 2.16.985 3.639 3.124 6.248 3.392 1.108.124 3 .684.963 2.43-.27.247.078.538.123.806-.94 21.286-2.24 42.628-5.655 63.724-1.377 6.069-2.609 12.172-3.348 18.319-.224 1.814-1.175 3.762.123 5.531.616.807.717 1.725 1.109 2.71-.784.168-1.624-.784-2.116.291-.392.862.201 1.725.615 2.016 1.49.806 2.374 2.945 4.132 3.068 4.58.672 7.334 5.442 11.444 7.323.492.246.985.716.739 1.254-.605 11.69-3.28 27.668 3.639 37.735 5.52 5.744 12.25 10.738 19.73 13.571 2.485.907 5.385 1.052 7.423 2.653 2.565 1.994 5.409 2.218 8.242 2.218 12.585-.56 19.651-8.309 15.721-20.85-2.206-3.258-3.393-7.524-5.733-10.94-3.83-6.012-8.79-11.118-13.504-16.247-4.86-9.014-7.715-5.419 4.333-9.685 5.8-1.635 3.796-8.365 4.3-12.832.369-4.569.168-9.193.515-13.773.145-1.769-1.21-3.438-.123-5.162 2.116-20.457.47-41.396 2.161-61.932 5.666.011 11.365-.023 16.997-.638 5.464-.784 10.772-2.553 16.382-2.341-.023-.391-1.064-.739.145-1.153 3.415-1.153 6.943-2.038 10.257-3.516 4.714-3.896-1.904 34.32-1.422 37.589-.582 11.097-1.389 22.093-1.792 33.211-.044 3.864-.369 7.715.079 11.556.123 1.131-.079 2.016-.93 2.822-9.629 9.607-11.813 6.875-23.514 8.51-.907.246-2.262.66-3.348-.068-1.03-.694-2.217-.638-3.37-.638-1.713-.448-8.611 1.4-7.032-1.847.123-.291 0-.717 0-1.053.627-19.505 3.639-39.145 2.363-58.64-.224-.683-.247-2.262.123-2.508 1.422-1.008.862-2.408.884-3.538.079-5.017 1.232-10.033.347-15.072-.884.627-2.956-1.086-3.168.638-.829 6.551-2.005 13.403-1.422 19.987-1.131 4.02-.975 8.522-.292 12.441-1.522 1.601-.515 3.538-.761 5.285-.246 15.049-2.128 29.997-2.531 45.035-.022 1.948 1.109 2.9 3.08 3.348 14.657.638 6.964-.985 11.018 20.401 2.004 13.392 20.58 18.79 32.024 20.872 5.968 2.049 14.78-2.956 17.736-8.185.448-2.587 2.777-6.707-.414-8.264-.235-4.546-2.642-8.532-5.195-12.093-4.569-3.202-15.867-12.025-17.345-17.131-.168-.572.963-.863 1.422-1.355 1.792-2.128 4.625-3.998 4.647-7.055.101-6.024-.202-12.048.291-18.072.694-12.944 1.053-25.966 2.587-38.866 6.337-49.021-9.193-14.567 38.933-50.936 12.003-9.854 21.028-22.753 26.224-37.421.94-3.483 3.695-5.453 6.763-7.032 1.545-.515 1.523-2.486 2.362-3.684 6.999-8.689 8.309-20.771 6.618-31.543h.022l-.022.011ZM141.869 338.459c6.775-.818 12.922 1.086 19.551-1.87 1.78-1.109 2.206.839 2.956 1.937 1.948 2.295-5.7.414-7.424 6.908-.269.784-.985 1.255-1.153 2.139-.123.594-.694-.045-.963-.224-3.259-2.284-7.099-4.087-10.111-6.584-.717-1.108-1.669-1.769-2.856-2.306Zm26.616 32.841c5.487.941 10.94 1.232 16.136-1.108.268-.124.515-.247.963-.079-.045.862-.448 1.277-1.154 1.669-2.967 1.377-5.442 4.568-9.002 3.807-7.984-1.501-29.248-6.372-30.3-15.609.324-.269.638.123.907.324 2.318 1.77 4.456 3.863 6.987 5.162 1.4.717 2.362 2.363 4.423 2.184 3.415 1.747 7.188 2.788 11.04 3.639v.011ZM129.396 56.69c.828-2.328-.056-6.393 2.485-7.714 2.352-5.409 4.468-11.153 8.242-15.912 3.896-11.32 14.399-18.15 22.237-26.504 3.248 11.142 10.907 19.876 17.737 28.912 12.888 19.091 32.382 33.3 41.665 54.8.694 1.13 1.332 1.847 2.777 1.276 1.567-.616 1.332-2.162.884-2.9-1.198-4.065-2.351-7.984-3.124-12.172-.1-.84-.1-2.34-1.746-2.284-.202 0-.247-.202-.124-.37 1.736-2.81-2.385-10.156-3.079-13.963 17.669 10.57 25.384 31.364 29.348 50.601.571 7.312 4.546 15.609.862 22.473-9.652 15.385-26.436 24.399-42.012 32.696-8.89 3.594-22.943 13.492-32.046 8.454-3.595-1.355-6.696-3.74-10.257-5.185-.538-.201-.963-.739-.045-1.523 17.39-15.541 22.484-41.922 8.7-61.484-4.199-6.785-9.596-13.213-16.941-16.348 8.219-1.623 16.124 3.068 21.991 8.41 1.422 1.388 3.539-.202 2.733-1.994-5.095-8.219-13.191-14.299-21.152-19.595-8.566-6.618-18.946-9.126-29.471-10.593-2.15-.425 0-7.412.347-9.07l-.011-.01Zm-5.655 119.61c.47 1.422 2.116 3.023 3.661 3.762-4.993.515-9.965.493-15.351.022.862-.537 1.377-.884 1.915-1.209 5.408-2.586 3.516-10.033-2.34-9.809-7.547-.436-15.318 5.039-22.608 1.232-.884-.224-1.153-1.008-.1-1.646 2.16-1.299 3.74-3.27 5.385-5.061 2.139-2.307 4.379-4.669 3.93-8.353-.1-.84 1.154-1.523 1.602-2.531 1.971-4.356-.325-10.402-4.893-11.824-2.833-.862-5.017-2.195-6.45-4.815-.392-.739-.885-1.993-2.284-1.299-.045.045-.37-.19-.347-.246.414-1.355-.863-1.277-1.478-1.725-.594-.448-1.3-.739-1.915-1.175-2.038-1.523-1.915-1.893.291-3.102 2.844-1.87 5.52-3.796 8.857-4.356 6.763-.739 12.966-2.978 19.528-4.691-3.012 9.719 2.979 22.249 14.489 19.181 7.491-2.419 6.439 2.463 8.958 7.255 3.785 6.125-1.265 16.315 6.416 20.234.37.168 1.053.19.84.784-1.388 3.303 7.211 6.763 5.509 7.502-7.804 3.628-12.854-8.723-22.092-2.117-.247.247-.168.538-.224.807.112 3.068-1.926.862-1.333 3.191l.034-.011Zm-49.492-37.489c.38-1.142 3.147-8.588 4.479-6.763 1.904 2.934 5.89 2.979 7.547 6.002 3.27 7.2 9.72 3.583 10.772 9.316.638 10.469-.66 3.281-8.264 6.024-2.217.594-4.233 1.478-6.147 2.755-.638.414-.762.201-.93-.616-1.31-2.923-3.079-5.52-3.101-8.924-.101-1.546.269-3.46-1.523-4.67-1.646-1.007-3.785-.459-2.833-3.124Zm1.254 9.831c-.985-1.399-1.176-2.855-1.668-4.232 1.747.123 1.915.537 1.668 4.232Zm68.572 14.008c-2.262 1.299-3.538.392-3.807-2.183-.381-3.606-1.467-7.099-1.086-10.716-.425-3.729-3.471-6.517-3.415-10.548-.347-2.53-3.74-4.568-6.763-4.176-12.284 3.415-17.983-4.681-14.187-16.035.47-1.444 1.892-1.724 2.9-2.363 4.232-2.776 5.968-7.77 8.163-12.093 1.287-1.612 2.519-.548.963-3.101-.124 0-.247.078-.347.078a1.096 1.096 0 0 0-.023-.47c-2.116-1.579-26.65-9.137-21.846-12.362 2.408-1.332 4.725-2.855 7.278-3.908.885-.347 1.355-1.791 2.654-.963-.84 3.415.325 4.177 6.103 3.908.291.269.101.538-.045.784-2.542 3.919 1.624 6.662 3.639 9.17.291 1.131 2.016 2.094 2.217 3.371.123.101.246.224.37.392.638-.247 1.399-.862 1.455-1.131.079-.66-1.231-3.807-1.892-4.625-1.075-1.522-4.322-3.325-3.146-5.43.492-.325 1.052-.101 1.399.347.515.716 1.355.93 2.016 1.4 2.385 1.858 4.344-.56 6.248-1.87 1.747-1.176 2.094-2.755 1.377-4.67-1.198-3.505 5.811-2.183 7.603-4.11.885-.637 1.971-1.03 2.754-1.768 2.733-2.161 3.595 5.094 6.64 4.423.986-.202 1.299.447 2.094 1.052-7.804 2.452-6.998-2.194-13.336-1.825-1.063 0-2.631 2.463-2.385 4.233.202 1.578-.515 3.437 1.422 4.725 2.106 1.187 3.606-.538 5.655-.291 3.046.806 2.217-2.576 4.109-1.702 2.274 1.78 12.149 4.792 10.828 8.118-.784 1.993.146 4.132-.269 6.192-.347 1.623-.324 3.225.907 4.546.818.885 1.87 2.116 3.001 1.601 1.602-.784 4.11 0 4.815-2.53.818-1.725 3.449 4.546 3.74 5.755-3.348-3.382-10.279-2.105-8.711 3.393.47 1.444 1.298 2.575 2.9 2.922 1.108.146 4.154 2.889 1.702 3.471-1.378 1.434-1.154 2.598-3.516 1.4-2.184-1.243-5.263 2.743-4.031 4.647 4.21 5.89 8.935-.47.94 10.38-2.9 3.538-3.225 7.748-2.777 12.026.146 1.231-.616 1.87-1.086 2.138-2.687 1.523-3.348 4.255-4.3 6.763-1.276 4.591-5.587-.739-8.901 1.646l-.023-.011ZM98.178 79.085c-.415-.123-.124-.56.145-.84 2.038-2.138 4.3-3.684 7.458-3.617 1.254.023 2.485-.223 2.956-2.183 2.138 4.445 12.137-1.568 13.795 2.307.022.907-.863 1.299-1.792 1.579-2.094.593-3.762 2.037-5.677 3.023-4.356 2.374-9.014 4.3-12.989 7.256-.369.268-.492.907-1.254.448-.571-.348-.884-.616-.862-1.333.045-1.4-.414-2.654-1.355-3.684-.448-.47-.201-.761-.145-1.21.022-.537 1.175-1.354-.27-1.746h-.01Zm-2.486 3.102c-1.97-.94-3.001-3.292-5.308-3.863-.593-.202-1.03-.571-1.007-1.154 0-.616.716-.537 1.086-.683 3-1.276 5.8-3 9.271-3.516-4.053 1.938-4.031 5.61-4.031 9.216h-.011Zm35.495 4.008c.325 1.691-1.008 2.262-1.747 3.046-1.948 1.388-3.963-3.124-7.233-2.307 1.926-2.99 1.086-6.65-3.146-5.8 1.209-1.332 2.732-1.456 3.963-2.16 4.446-2.23 3.315-7.447-1.187-8.264-5.43-1.042-10.088.918-15.81.414 10.704-4.67 21.499-1.646 32.315-.023 7.917 1.31 14.837 5.465 21.107 10.224-1.254.414-2.071 2.216-3.348 1.623-2.015-.93-4.871-.515-5.8-3.594-.739-2.34-2.508-2.284-4.725-2.363-3.718-.123-6.372 2.553-9.944 2.833-3.538.269-5.139 2.8-4.456 6.371h.011Zm14.389 2.509c-1.456-.348-5.006 1.903-5.14-.538.168-.761.538-2.116 1.456-1.747 1.209.47 2.609.885 3.695 2.285h-.011Zm16.728 10.962c2.509 1.354 2.195 3.93 3.516 5.576.202.224.101 2.116-.963 2.508-4.68.795-1.623-5.453-2.564-8.084h.011Zm-7.255 64.339c1.601-1.948 1.31-5.341 3.56-6.662 0 2.709.291 5.061 3.595 6.371-.907.717-1.893 1.153-2.363 1.915-.537.884-1.232.716-1.769.47-.963-.414-1.601-1.456-2.8-1.5-.223 0-.369-.37-.223-.594Zm6.64-5.431c.806-1.276.783-2.362-.616-3.224-.493-.269 0-.594.022-.885.168-1.4.571-2.777.392-4.199-2.385-7.267 13.851-16.807 3.516-20.748-.661-.224-1.478-.101-1.355-1.232.638-.011 1.243.358 1.859.582 2.183.84 3.303-2.318 5.285-2.866 2.609-2.352-.358-7.939-3.695-8.678-1.008-.202-1.478-2.329-.37-2.341.717.325 1.131-.783 2.139.079 3.684 3.146 5.117 7.233 5.711 11.802 3.672 10.245-.739 20.502-6.517 29.034-.079-2.262.448-4.915-2.117-5.923-.962-.392-3.224-1.008-3.986 1.276 1.053 0 1.288.627.717 1.893.907.168 1.5-.415 2.43-.885-.023 3.023-1.893 5.084-2.9 7.603-.594-.47-.762-.884-.515-1.276v-.012Zm-2.218-73.364c-.078-.907 1.255-1.03 1.77-1.724.615-.807 1.063-.247 1.668.167 1.31.93 2.777 1.624 3.561 3.225-2.083.28-3.303-.806-5.14-1.209-.638-.269-1.747.739-1.87-.47l.011.01Zm-73.6-31.42c.807-11.522 4.659 1.478 15.453-10.962 4.871-5.106 8.801 3.684 13.974-2.362 6.226-9.652 8.365-2.856 11.511 4.087 2.217 1.086 1.254 2.676.593 4.154-.862 1.87-.268 4.053-1.623 5.822.862-1.892-.594-2.732-1.601-3.538-1.109-.885-1.893.37-2.184 1.053-1.847 3.661-6.225 1.31-9.372 2.138-1.4.336-1.915 3.27-.246 3.539 4.501 1.175 8.902 1.523 12.989-1.993-.471 1.746.492 7.815-1.523 7.547-1.456-.101-2.923.223-4.356-.348-2.799-1.086-5.464-.044-7.95 1.008-7.457 3.057-15.374 4.95-22.305 9.193-.806.515-1.892 1.086-2.363-.806-.391-2.452-2.687-10.033-.739-11.556.515-.145.37-.56.123-.806-1.847-1.937-.57-4.177-.369-6.17h-.011Zm-73.677 46.984c2.99-8.767 5.229-18.274 9.103-26.627C29.09 62.289 38.843 51.898 49.56 42.705c.146 3.471 1.523 36.268 8.364 29.92 5.756-8.253 14.21-14.12 22.339-19.865 1.355-1.063 2.53-.492 1.948 1.154-.739 7.379-.918 21.857 5.487 26.671 6.248 4.11 10.503 10.884 16.953 14.826 3.807 2.43 8.33 3.963 12.541 5.632 1.175.347 1.578 1.523.963 2.53-2.072 3.001 2.049 4.905.447 6.786-4.747 5.991-12.932 6.214-19.505 9.047-5.308 1.199-10.906 1.59-15.81 4.379-8.264 3.717-10.66 8.017-13.426 16.404-.907 6.449 3.93 12.507 5.755 18.531.347.806.448 1.332-.716 1.624-1.277.324-2.262 1.5-3.74 1.332-.493-.045-.616.269-.392.683.324.616-.269 1.053-.269 1.691-1.109-1.87-3.225-1.523-4.77-2.363-3.449-1.108-7.02-2.889-9.91-4.915-10.312-6.965-21.017-13.28-30.893-20.827-1.5-.627-2.172-3.986-4.154-1.915 0-.885 1.086-1.176.224-1.724-2.307-1.501-3.247-4.3-5.588-5.801-2.105-8.151-6.494-17.154-3.168-25.742l-.045.011ZM5.453 144.04a67.316 67.316 0 0 1-1.792-16.202c-.212-2.172 1.814-18.386 4.916-11.6.65 4.445 1.892 9.405 5.386 12.485.616.436-.202.806.202 1.354.716.986 1.422 1.971 2.306 2.8 8.555 8.353 18.946 14.175 28.777 20.849 5.464 3.169 18.453 13.314 24.354 12.25 3.382-1.008 6.338-3.191 9.764-4.21 1.725-.538 3.147-1.109 4.054-2.755.246-.414.929.123 1.545-.145 1.5-.695 2.833-1.77 4.479-2.217 1.668-.616 4.087-1.669 5.486-.045.515.761-.66 1.299-.985 1.993-1.836 3.113-5.027 5.095-7.457 7.748-1.478 1.602-4.994 1.176-5.756 3.225-.145 1.377 1.254 2.06 2.363 2.609 12.507 7.469 27.937-3.762 30.524 1.501.145 2.665-5.476 4.087-7.503 4.814-10.2 3.225-20.905 2.609-30.848-1.153-.806-.291-1.377.448-1.915.907-.616.594 0 1.008.291 1.5.963 1.77 2.878 1.322 4.334 1.848 4.792 1.668 9.741 2.676 14.859 2.284 3.683-.291 7.334-.761 10.995-1.175 1.03-.336 2.117.134 3.024.615-.986.392-.415 1.848-2.016 2.262-9.271 3.774-21.13 4.804-29.684-1.276-.84-.594-2.016-.347-1.97.268.078.784-1.232 2.016.694 2.632 11.51 7.256 13.056 3.023 24.746 4.3-2.934 9.047-19.036-2.811-20.077 3.739-.146 1.456-.616 1.501-1.579.639-1.355-1.232-3.169-1.4-4.77-2.016-4.434-2.452-8.958-4.658-13.627-6.539-1.792-.515-3.785-.246-5.341-1.601-16.83-10.324-40.22-22.451-47.79-41.676l.011-.012Zm80.822 53.501c-1.624.526-5.52.773-5.677-1.176.145-.269.66-.369 1.21-.145 1.376.515 2.798.862 4.478 1.332l-.011-.011Zm-.616 154.119c-.1-1.523.93-3.023 0-4.624-.123-.224.269-1.501.537-2.217.124-.37.717 0 1.008.224.806.537 1.624.66 2.856.078-.84.985-.37 1.568-.146 2.363.717 2.608 1.915 1.455 3.393 1.007a25.4 25.4 0 0 0 3.74-1.478c3.012-1.769 6.584-.156 9.764-1.299 1.299-.291 2.138-.078 2.732 1.087.515 1.377 2.027 2.709 2.071 4.075 0 1.456-1.847.863-2.833 1.355-6.46 2.867-7.994 8.824-4.478 14.747.537 1.053.123 1.131-.538 1.444-4.792 2.587-7.2-3.213-10.704-5.285-2.173-1.668-3.64-4.176-6.047-5.531-1.77-1.725-1.21-3.886-1.355-5.946Zm28.923 37.522c2.754.806 7.535-.784 8.957 2.262.325 1.299-1.332 1.422-1.646 2.385-3.504-1.411-7.636.683-10.973-1.444-2.116-1.602-5.095-1.77-6.785-4.11-1.848.717-2.038-1.791-3.886-1.814-1.5-.022-3.124-1.523-4.423-2.654-.739-.638-1.847-.246-2.34-1.276-.291-.593-.045-2.307-1.668-1.176-1.109-1.5-3.102-2.015-4.031-3.594-.784-1.389-2.14-4.311-.661-5.531.47-.045.392.47.47.783 8.062 6.584 16.897 13.101 27.008 16.18l-.022-.011Zm9.719-139.596c-2.777 12.294-.997 25.059-1.456 37.544-.728 15.475-1.579 31.028-1.971 46.57-.459 3.784-7.67 4.736-10.749 5.576-9.887 1.646-17.11 3.751-25.34-3.37a59.66 59.66 0 0 1-8.856-6.64c-1.176-1.053-1.893-2.632-3.763-2.856-1.892-.683.84-3.852.762-5.307.347-1.501.94-2.855.224-4.625.84-24.846 5.7-50.163 5.8-75.335 0-1.937.537-2.385 2.195-1.5 3.941 2.161 8.04 2.777 12.205 4.131 9.764 2.688 19.796 5.062 30.008 4.502 1.053-.023 1.154.448.93 1.299l.011.011Zm111.133-64.608c-10.291 24.107-33.357 39.616-56.692 49.637-1.5.806-2.094-2.172-4.154.885-4.121 3.628-10.235 3.93-15.352 5.509-12.641 3.404-25.854 4.915-38.91 3.807-30.714-1.725-63.32-16.74-85.547-37.836-13.236-12.619-18.341-30.434-23.347-47.454 16.203 15.576 35.473 28.363 56.603 36.089 4.58 2.307 17.994 9.473 21.274 3.146.516-1.052 1.277-.761 1.915-.66 1.948.269 3.84.168 5.632-.694 6.752-2.094 3.046-7.032 8.633-8.801 2.094-.471 3.292-2.307 4.479-3.931.392-.537.639-.817 1.333-.817 4.3.123 8.633.201 12.966.246.392 0 .963-.291.84.392-.392 2.116 1.277 3.023 2.553 3.561 1.4.616 2.385 1.993 4.087 1.937-6.046 9.338 6.517 10.861 13.157 11.432-.235 3.08 1.679 6.629 5.072 6.461 8.017.84 15.777-1.478 23.716-1.455 13.482-.941 25.239-7.402 37.22-12.978 9.293-3.415 17.445-8.801 26.369-13.448-.224 1.915-1.175 3.415-1.814 4.938l-.033.034Zm16.997-32.797c-1.467 5.274-1.702 12.093-6.102 15.855-9.339 9.865-22.574 15.755-34.734 21.633-5.509 1.971-10.649 4.759-16.012 7.256-1.131.638-2.531 1.87-4.211.862-7.535 2.318-37.824 10.503-43.512 5.061.448-2.776 9.462-1.343 11.903-1.646 2.944.84 3.168-3.437 0-3.437-4.681-.213-29.539 3.191-25.553-5.778.37-1.355 1.21-.291 1.725-.123 3.818 1.377 7.524 3.046 11.589 3.516 2.553.325 5.162.515 7.67-.806.985-.515 2.363.123 3.449-.538.873-.638 2.967-.739 2.262-2.306-.415-.885-1.333-1.232-2.117-.93-1.97.739-4.008.694-6.001.885-5.89.817-20.838-2.721-24.354-7.502 8.901-2.833 15.586 7.547 25.216 5.845 2.06-.571 8.331 1.343 7.334-2.408-.201-.784-.661-.47-1.086-.47-9.674.929-17.401-2.161-25.339-7.402-1.255-.806-2.957-.761-4.278-1.601-1.086-.66-1.847-1.769-3.079-2.239-1.109-.963 3.37-2.34 3.885-2.284 7.603 2.093 13.751 7.692 22.037 7.3 2.183-.168 4.725.146 7.032.818.862.246 1.993.929 2.508-.37 2.127-4.378-8.555-6.673-11.142-9.17-2.351-1.814-5.587-2.688-6.27-5.946-.123-.347.291-.515.806-.515 11.78-.392 26.739 17.221 37.925 12.765 21.32-7.044 40.803-18.812 58.562-32.137 1.668-1.545 3.471-3.224 3.908-5.777 1.467-3.057 4.053-5.453 5.677-8.577 2.161 6.348 2.127 13.582.269 20.188l.033-.022Zm-102.623 25.294c1.624-1.522 2.139-1.545 3.718-.224.201.146.66.168.492.56-1.019.661-2.855-.414-4.21-.347v.011Z" fill="#010101"/><path opacity=".3" d="M97.125 151.811c.101 1.254-.246 1.814-1.702 1.299-4.355-1.232-9.07.761-12.787 3.023-1.086.918-1.019-1.881-1.792-2.463-1.377-2.161-2.037-4.479-2.239-7.077.09-1.825-.112-4.658-2.631-5.184-1.826-.269-2.24-.84-1.725-2.609.381-1.142 3.147-8.589 4.48-6.763 1.455 1.869 3.493 2.9 5.53 3.907.885.448 1.523 1.131 2.016 2.094 1.601 3.247 4.4 5.14 7.827 5.778 3.863 1.12 2.867 4.893 3.023 7.995ZM122.532 74.764c.022.907-.862 1.299-1.792 1.579-2.094.593-3.762 2.037-5.677 3.023-4.355 2.374-9.013 4.3-12.988 7.256-.37.268-.493.907-1.255.448-.571-.348-.884-.616-.862-1.333.045-1.4-.414-2.654-1.355-3.684-.447-.47-.201-.761-.145-1.21.022-.537 1.175-1.354-.269-1.746-.414-.123-.123-.56.146-.84 2.038-2.139 4.299-3.684 7.457-3.617 1.254.023 2.486-.223 2.956-2.183 2.139 4.445 12.138-1.568 13.795 2.307h-.011Z" fill="#000"/><path d="M154.489 106.25c-1.086-1.523-2.956-2.116-4.132-3.471-1.332-1.545-2.833-1.377-4.154-.515-1.131.717-1.702.638-2.71-.168-1.545-1.254-3.964-.537-4.255 1.03-.537-1.915-1.747-3.437-2.855-4.938-1.948-2.183-5.386-.269-5.341 2.508-.123.616.145 1.333-.448 1.792-2.217 1.456-.067 4.86 2.195 3.807 1.108-.325 1.791.045 2.385.963 2.765 4.893 6.83.549 10.234 3.146 3.101 2.845 13.045 1.098 9.081-4.154Zm-17.837-2.038c-1.333-.862-2.901-1.5-2.285-3.639.493 1.378 2.878 1.456 2.285 3.639Zm.907.885c2.239.022 4.646-1.691 6.348.761-3.202 1.355-5.531 1.053-6.348-.761Zm12.395 3.415c-.829.347-6.047-1.456-4.031-2.363 1.03-.638 1.971-1.623 3.27-.47 1.31.918 4.624 3.046.761 2.833ZM93.385 63.645c-1.332-.448-2.956.291-4.3-.985-2.575-1.646-.929-4.423 1.669-3.539 6.718 2.217 10.156-4.736 12.127-1.008 1.422 4.703-6.148 5.465-9.518 5.554l.022-.022Z" fill="#010101"/><path opacity=".3" d="M166.066 120.191c-7.132-3.146-1.142-12.25 5.801-6.315-.258-1.142-2.912-7.469-3.74-5.755-.717 2.553-3.225 1.746-4.826 2.53-1.131.515-2.195-.716-3.001-1.601-1.232-1.333-1.254-2.923-.907-4.546.414-2.06-.515-4.199.269-6.192 1.332-3.315-8.555-6.338-10.828-8.118-1.881-.874-1.075 2.508-4.11 1.702-2.049-.247-3.549 1.478-5.654.29-1.948-1.276-1.232-3.146-1.422-4.724-.247-1.77 1.332-4.233 2.385-4.233 6.315-.38 5.531 4.266 13.336 1.814-.784-.616-1.109-1.254-2.094-1.053-3.046.672-3.908-6.584-6.64-4.422-.784.739-1.87 1.13-2.755 1.769-1.814 1.96-8.711.537-7.603 4.11.717 1.914.37 3.493-1.377 4.668-1.903 1.31-3.863 3.73-6.248 1.87-.661-.47-1.5-.683-2.015-1.4-.348-.447-.907-.66-1.4-.346-1.176 2.116 2.083 3.907 3.146 5.43.661.806 1.971 3.964 1.893 4.625-.045.268-.818.884-1.456 1.131 1.568 2.541.302 1.489-.963 3.101-2.195 4.334-3.93 9.316-8.163 12.093-1.007.639-2.441.907-2.9 2.363-3.852 11.242 2.038 19.506 14.198 16.034 8.488-.515 5.845 7.256 9.417 11.847 1.624 2.576.101 5.756 1.008 8.577.515 1.601.638 3.348.84 5.017.268 2.575 1.545 3.493 3.807 2.183 1.915-1.086 3.695-.515 5.408-.022 2.217.66 2.654.571 3.494-1.624.963-2.508 1.623-5.24 4.299-6.763 2.621-1.601-1.075-8.935 3.863-14.165a36.74 36.74 0 0 0 3.539-5.038c1.008-1.725 1.355-1.949-.986-2.677-2.597-.683-5.285-3.426-2.832-5.945 3.493-4.334 3.863 1.982 6.886-2.755 2.474-.582-.605-3.314-1.702-3.471l.033.011Zm-12.686-9.215c-5.8 2.945-7.401-2.172-11.903-1.4-5.778 1.814-5.374-3.952-8.678-3.269-2.25 1.052-4.411-2.352-2.194-3.807.593-.471.313-1.176.436-1.792-.044-2.766 3.393-4.703 5.341-2.508 1.109 1.5 2.307 3.023 2.856 4.938.291-1.579 2.71-2.284 4.255-1.03 1.008.806 1.579.884 2.71.168 1.332-.863 2.832-1.031 4.154.515 2.385 1.892 8.33 5.912 3.023 8.185Z" fill="#000"/></g><defs><radialGradient id="h" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(85.5666 0 0 85.8708 119.029 18.6)"><stop offset=".1" stop-color="#FFE226"/><stop offset=".79" stop-color="#FF7139"/></radialGradient><radialGradient id="d" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(254.002 0 0 251.98 101.828 131.939)"><stop offset=".3" stop-color="#960E18"/><stop offset=".35" stop-color="#B11927" stop-opacity=".74"/><stop offset=".43" stop-color="#DB293D" stop-opacity=".34"/><stop offset=".5" stop-color="#F5334B" stop-opacity=".09"/><stop offset=".53" stop-color="#FF3750" stop-opacity="0"/></radialGradient><radialGradient id="e" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(81.3368 0 0 138.09 150.945 -11.817)"><stop offset=".13" stop-color="#FFF44F"/><stop offset=".53" stop-color="#FF980E"/></radialGradient><radialGradient id="f" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(107.63 0 0 117.964 97.269 197.007)"><stop offset=".35" stop-color="#3A8EE6"/><stop offset=".67" stop-color="#9059FF"/><stop offset="1" stop-color="#C139E6"/></radialGradient><radialGradient id="g" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(57.1516 0 0 69.5986 115.659 106.045)"><stop offset=".21" stop-color="#9059FF" stop-opacity="0"/><stop offset=".97" stop-color="#6E008B" stop-opacity=".6"/></radialGradient><radialGradient id="c" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(247.807 0 0 251.98 173.682 27.866)"><stop offset=".13" stop-color="#FFBD4F"/><stop offset=".28" stop-color="#FF980E"/><stop offset=".47" stop-color="#FF3750"/><stop offset=".78" stop-color="#EB0878"/><stop offset=".86" stop-color="#E50080"/></radialGradient><radialGradient id="i" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(408.512 0 0 342.923 197.173 -37.735)"><stop offset=".11" stop-color="#FFF44F"/><stop offset=".46" stop-color="#FF980E"/><stop offset=".72" stop-color="#FF3647"/><stop offset=".9" stop-color="#E31587"/></radialGradient><radialGradient id="j" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(77.394 -24.396 66.127) scale(129.607 560.661)"><stop stop-color="#FFF44F"/><stop offset=".3" stop-color="#FF980E"/><stop offset=".57" stop-color="#FF3647"/><stop offset=".74" stop-color="#E31587"/></radialGradient><radialGradient id="k" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(234.546 0 0 230.425 119.907 49.48)"><stop offset=".14" stop-color="#FFF44F"/><stop offset=".48" stop-color="#FF980E"/><stop offset=".66" stop-color="#FF3647"/><stop offset=".9" stop-color="#E31587"/></radialGradient><radialGradient id="l" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(281.917 0 0 252.208 180.784 62.938)"><stop offset=".09" stop-color="#FFF44F"/><stop offset=".63" stop-color="#FF980E"/></radialGradient><linearGradient id="b" x1="217.145" y1="38.76" x2="22.595" y2="226.431" gradientUnits="userSpaceOnUse"><stop offset=".05" stop-color="#FFF44F"/><stop offset=".37" stop-color="#FF980E"/><stop offset=".53" stop-color="#FF3647"/><stop offset=".7" stop-color="#E31587"/></linearGradient><linearGradient id="m" x1="199.598" y1="35.009" x2="44.026" y2="204.989" gradientUnits="userSpaceOnUse"><stop offset=".17" stop-color="#FFF44F" stop-opacity=".8"/><stop offset=".6" stop-color="#FFF44F" stop-opacity="0"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h257.593v400H0z"/></clipPath></defs></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/assets/noodle-C.svg b/browser/components/newtab/data/content/assets/noodle-C.svg
new file mode 100644
index 0000000000..f91f5f1083
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/noodle-C.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="915" height="718" viewBox="0 0 915 718" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path opacity="1" d="M799.853 399.917C742.413 440.039 663.081 427.307 620.71 371.157L618.218 367.8C577.626 314.025 501.27 302.258 446.674 341.731C392.077 381.204 379.712 457.116 418.541 512.166L420.991 515.58C461.938 573.632 448.9 653.676 391.337 695.294C333.193 737.331 251.634 724.247 209.17 666.063C83.9763 494.522 121.467 254.982 292.903 131.034C464.34 7.08669 704.807 45.6649 830.001 217.206C872.04 274.808 859.997 355.012 803.335 397.4L801.604 398.672L799.853 399.917Z" fill="context-fill"/>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/noodle-outline-L.svg b/browser/components/newtab/data/content/assets/noodle-outline-L.svg
new file mode 100644
index 0000000000..d2c1f29ff6
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/noodle-outline-L.svg
@@ -0,0 +1,13 @@
+<!-- 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/. -->
+<svg width="147" height="164" viewBox="0 0 147 164" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M26.0923 73.3091C13.8884 71.367 5.84156 60.0045 8.1684 47.9971C10.4712 36.1135 22.0746 28.0774 34.1527 29.9995L100.16 40.504C112.485 42.4654 120.545 54.0226 118.024 66.1182L104.519 130.898C102.048 142.752 90.3351 150.631 78.2883 148.543C66.1158 146.432 58.2353 134.956 60.7321 122.98L69.6422 80.2397L26.0923 73.3091Z" stroke="url(#paint0_linear)"/>
+<defs>
+<linearGradient id="paint0_linear" x1="52.2466" y1="163.233" x2="0.9998" y2="40.1293" gradientUnits="userSpaceOnUse">
+<stop stop-color="#9059FF"/>
+<stop offset="0.520833" stop-color="#FF4AA2"/>
+<stop offset="1" stop-color="#FFBD4F"/>
+</linearGradient>
+</defs>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/noodle-solid-L.svg b/browser/components/newtab/data/content/assets/noodle-solid-L.svg
new file mode 100644
index 0000000000..7e6a52d12f
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/noodle-solid-L.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="1587" height="1303" viewBox="0 0 1587 1303" xmlns="http://www.w3.org/2000/svg">
+<path d="M446.454 1039.08C360.266 1140.41 210.738 1150.78 113.365 1062.15C16.9963 974.442 8.0789 822.76 93.3782 722.472L559.549 174.385C646.592 72.0471 797.983 62.6514 895.076 153.561L1415.08 640.444C1510.22 729.534 1517.09 881.343 1430.44 980.413C1342.88 1080.52 1193.24 1088.72 1097.1 998.699L754.019 677.469L446.454 1039.08Z" fill="context-fill"/>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/person-typing.svg b/browser/components/newtab/data/content/assets/person-typing.svg
new file mode 100644
index 0000000000..d05cda6a94
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/person-typing.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg width="191" height="186" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path d="M65.459 185.823c3.343-1.18 6.03-1.133 6.03-1.133 15.06-.033 69.71-.134 70.647-.067 1.339.101 8.151-.157 12.216 7.169.033 0 .033.033.033.033a27.027 27.027 0 0 1 1.807 4.288c1.071 3.383 1.808 7.939 1.473 13.567-.201 2.244-.502 7.135-3.347 11.825-2.945 4.891-7.028 8.174-13.085 10.251-5.154 1.742-10.208.938-16.432.368h-.067c-.235-.033-.703-.134-1.272-.234l-1.138-.201a21.616 21.616 0 0 0-1.472-.268h-.067a1814.282 1814.282 0 0 1-15.997-2.948l-.235-.034-1.234-.241c.861 1.196 1.72 2.4 2.576 3.613a469.04 469.04 0 0 1 6.426 9.313l8.4 11.892c1.271 1.775.703 4.254-1.272 5.494l-10.341 6.431-9.37 6.231-1.841 1.173c-1.841 1.138-4.075.602-5.489-.871-3.742-3.901-10.764-13.068-19.578-23.047l-1.035-1.169C66.84 256.5 60.69 268.561 57.098 274.6c-.703 1.206-2.075 1.843-3.48 1.642l-26.573-3.953c-2.276-.335-3.615-2.781-2.644-4.891 4.92-10.82 11.178-27.871 16.499-39.327a425.233 425.233 0 0 0 3.882-8.609l.595-1.357c-1.999-2.746-3.176-4.71-4.206-7.197-1.172-2.814-2.243-5.393-2.176-8.877.1-5.159 2.678-11.021 7.832-14.17 2.878-1.775 5.689-1.876 7.362-2.01 2.242-.067 4.82-.033 7.697-.033 1.503-.012 2.634-.02 3.573.005Z" fill="#BA94FF"/><path opacity=".317" d="M64.968 185.813c-3.915 1.461-8.615 4.619-10.964 11.439-.031.063-5.219 12.567-8.756 20.675-1.92-2.653-3.069-4.586-4.077-7.019-1.172-2.813-2.242-5.393-2.175-8.877.1-5.158 2.677-11.021 7.83-14.17 2.879-1.775 5.69-1.876 7.363-2.01 2.243-.067 4.82-.033 7.698-.033 1.25-.01 2.242-.017 3.08-.005Zm38.263 42.263c.89 1.236 1.778 2.481 2.664 3.736a466.09 466.09 0 0 1 6.426 9.312l8.4 11.892c1.272 1.776.703 4.254-1.272 5.494l-10.341 6.432-9.37 6.23-1.841 1.173c-1.84 1.139-4.075.603-5.489-.871-3.742-3.901-10.764-13.068-19.578-23.047a583.92 583.92 0 0 0-1.172-1.324 317.764 317.764 0 0 1 3.397-6.202s.937-1.675 2.945-4.857c1.64-2.613 3.347-4.891 4.786-6.801a137.78 137.78 0 0 1 3.179-4.153c1.506.2 3.012.401 4.518.636 2.075.368 4.15.77 6.258 1.139 2.18.397 4.337.794 6.49 1.211Z" fill="#444"/><path d="M115.337 119.817c6.046-1.735 12.272-.216 16.788 3.54l.239.16c.693.497 1.461 1.321 2.263 2.37.578.71 1.105 1.469 1.577 2.271 3.608 5.639 7.365 14.305 7.875 17.661 0 .992-.608 1.841-1.472 2.194 0 0 3.687 10.532 5.141 17.508 1.404 6.738 1.917 11.117 2.252 17.479.223 4.241-2.129.894-6.59 1.758-5.235-.054-13.994.044-26.278.294-12.283.251-19.622-13.048-22.016-39.895-2.644-8.781 1.508-17.912 9.405-21.797l-1.002-2.913a.67.67 0 0 1 .415-.851l9.493-3.272c.35-.121.73.065.851.415l1.059 3.078Z" fill="#9871E0"/><path d="m110.463 105.85 2.818 10.53-9.375 3.231-.69-2.743-.415.214c-2.676 1.427-2.52 1.309-2.713 1.397-2.038.787-3.838.943-4.175.945-2.816.094-6.614-4.66-8.851-11.869-.196-.585-.292-1.182-.422-1.774l-.892-5.936c-.207-1.325-.08-2.686.43-3.918.213-.528.43-1.023.692-1.42 2.945-4.959 9.356-4.791 10.502-4.777.133-.014.27.005.403-.009 1.296.167 2.403-.185 3.598-.345.532-.056 1.011.332 1.1.862l1.062 8.51c.078.531 1.099.06 3.064-1.416 2.435 1.282 3.909 2.446 4.422 3.492.851 1.696.508 3.551-.402 4.825-.051.07-.103.136-.156.201ZM75.57 169.278c4.693-1.135 9.943-1.403 15.75-2.803l3.164-21.236c.044-.48.11-1.046.215-1.682.104.481.228.962.373 1.442 3.072 8.451 5.928 16.616 8.567 22.494 6.975-1.012 13.56-1.782 18.316-2.851.007-.454-.465-6.833-1.415-17.137l21.043.732.075.001c.54 3.443.726 7.678.559 12.703-.318 9.556.719 17.346-5.144 21.52-1.366.975-1.757 1.642-6.452 2.006-9.818.76-18.735.538-27.779.142 3.086.15 6.152.283 9.244.364-13.656.649-58.791 1.196-62.73 1.065-4.648-.156-6.996-1.677-7.937-3.916-.755-1.798 3.823-4.152 4.52-4.515.141-.073 7.618-.463 10.43-1.168-2.102-.344 1.631-3.939 4.166-4.665 0 0 3.816-2.743 8.786-3.442l-.114.078c1.185-.153 2.438-.171 3.8.086.755.131 1.61.392 2.563.782Zm24.145 101.676 9.244-6.147 10.342-6.431a4.266 4.266 0 0 0 1.326-1.303l6.011 7.79-20.411 14.955-6.512-8.864Zm-72.34 1.272 26.094 3.882c.196.028.392.039.585.036l-3.482 9.892H21.255l6.12-13.81Z" fill="#F3B175"/><path opacity=".2" d="M103.69 167.608c-3.028.44-6.13.925-9.187 1.5-7.34 1.382-12.96 1.456-16.86 2.221-.79-.408-1.526-1.747-2.21-2.018 4.567-.811 10.023-1.423 15.887-2.836l3.164-21.237c.044-.48.11-1.045.215-1.681.104.481.228.962.373 1.441 3.092 8.507 5.965 16.71 8.618 22.61Zm8.396 17.364c-13.656.649-58.791 1.197-62.73 1.065-4.648-.155-6.996-1.677-7.937-3.916-.756-1.798 3.823-4.152 4.52-4.515.142-.073 1.638-.467 4.488-1.182 1.58.278 3.32.177 4.45.052 3.13.308 6.226.584 9.355.893l2.95 1.165c1.627 2.771 14.233 4.879 19.128 5.24 1.501.106 2.403.184 4.469.25 7.327.306 14.248.765 21.307.948Z" fill="#8C2A00"/><path d="M88.007 105.974c.126.56.323 1.482.033 1.917-.37.645-1.563-.779-1.442-1.87.051-.476.27-.634.536-.662.4-.042.764.223.873.615Zm5.903-.823c.16.556.324 1.482.033 1.917-.37.645-1.562-.779-1.441-1.87.05-.477.27-.634.536-.662.4-.042.764.222.872.615Zm.717 8.581c.226-.091.771-.351.832-.728-.007-.066.016-.17-.024-.233-.154-.186-.576-.04-1.169.089-1.054.212-1.93.203-1.93.203s.336.639.52.788c.389.498 1.416.019 1.771-.119Z" fill="#482D1F"/><path d="M85.24 103.671c-.34-.032-.515-.417-.306-.675.271-.298.736-.684 1.398-.787 1.357-.21 2.939.432 1.524 1.052-.897.431-1.973.443-2.616.41Zm9.656-16.038c-2.6-1.392-4.426-1.778-4.727-4.64-.522-4.968 3.75-9.49 9.54-10.099 5.79-.609 10.907 2.925 11.429 7.893.315 3-1.119 4.838-3.58 6.749 1.439-.146 2.584.886 3.929 1.382.49.185 1.648.635 2.736 1.7 3.101 2.94 2.987 7.298 2.987 8.578-.134 3.854-1.905 6.533-2.61 7.516-1.64 2.329-3.152 3.584-4.537 3.766-.803-1.161-1.436-2.269-1.898-3.324.581-.26 1.395-.742 2.004-1.626.876-1.271 1.223-3.093.379-4.722-.771-1.57-2.568-2.66-4.152-2.359-.891.162-1.538.735-1.631.812-.798.749-1.282 1.713-1.45 2.084l.005-.147c-1.594-.438-4.227-1.475-6.53-3.86a14.266 14.266 0 0 1-1.9-2.394c-1.29.54-3.41 1.168-5.956.964-.903-.071-1.707-.447-2.426-.643l-.007-.01c-.044-.096.375-.68.368-.747 1.973-3.406 5.662-6.52 8.027-6.873Zm-3.199 15.359c-.34-.032-.515-.418-.273-.679a2.428 2.428 0 0 1 1.431-.791c1.358-.21 2.943.466 1.524 1.053-.93.434-2.006.447-2.682.417Z" fill="#924600"/><path d="m103.716 118.871 2.925-3.897-3.428 1.888.503 2.009Zm-13.95-11.126-.004-.049v.024l.004.025Zm-.029 3.558.002.037c.038.364.322.675.691.697.067 0 .105-.001.142-.003.355-.014.608-.037 1.514-.133a.335.335 0 1 0-.07-.666c-.89.094-1.136.116-1.47.13l-.105.003c.007-.001-.025-.036-.034-.085l.025-3.582-.004-.049-.272-1.959a.334.334 0 1 0-.663.093l.27 1.934-.026 3.583Z" fill="#482D1F"/><path d="M150.158 181.8H28.843c-.466 0-.843 1.119-.843 2.5s.377 2.5.843 2.5h121.315c.465 0 .842-1.119.842-2.5s-.377-2.5-.842-2.5Z" fill="#858585"/><path d="m54.55 175.794-4.267-33.841c-.618-4.929-1.105-10.351-3-10.351l-22.309 1.664c-1.895 0-1.461 4.758-.843 9.687l4.799 38.845h65.489c1.115 0 1.694-2.353 1.694-5.253v-.751H54.55Z" fill="url(#b)"/></g><path d="M116.856 15.754c-.968-2.33-2.93-4.842-4.465-5.636a23.12 23.12 0 0 1 2.251 6.756l.007.034c-2.516-6.27-6.784-8.804-10.271-14.311-.179-.28-.354-.563-.523-.849a7.248 7.248 0 0 1-.244-.462 4.04 4.04 0 0 1-.347-.92.055.055 0 0 0-.037-.02.081.081 0 0 0-.044 0l-.01.007-.014.01.007-.017c-5.592 3.273-7.49 9.334-7.66 12.366-2.234.153-4.37.977-6.129 2.363a6.69 6.69 0 0 0-.577-.438 10.32 10.32 0 0 1-.06-5.44 16.484 16.484 0 0 0-5.359 4.143h-.01c-.883-1.12-.822-4.808-.77-5.579-.259.106-.51.238-.74.397a15.817 15.817 0 0 0-2.177 1.865 19.452 19.452 0 0 0-2.081 2.495 18.793 18.793 0 0 0-2.988 6.743l-.028.146a32.433 32.433 0 0 0-.22 1.392l-.007.048a21.64 21.64 0 0 0-.36 3.066v.115a22.26 22.26 0 0 0 44.197 3.766l.102-.863a22.902 22.902 0 0 0-1.446-11.18l.003.003ZM91.201 33.179c.102.05.2.102.305.15l.017.01a11.36 11.36 0 0 1-.322-.16Zm23.448-16.264v-.02l.003.024h-.003v-.004Z" fill="url(#c)"/><path d="M116.856 15.754c-.968-2.326-2.93-4.842-4.465-5.637a23.121 23.121 0 0 1 2.254 6.757v.044a20.151 20.151 0 0 1-.689 15.024c-2.553 5.474-8.726 11.086-18.392 10.811-10.441-.299-19.642-8.047-21.357-18.199-.316-1.596 0-2.41.156-3.71a16.572 16.572 0 0 0-.356 3.072v.115a22.263 22.263 0 0 0 44.193 3.762c.038-.285.068-.57.102-.862a22.881 22.881 0 0 0-1.443-11.18h-.003v.003Z" fill="url(#d)"/><path d="M116.856 15.754c-.968-2.326-2.93-4.842-4.465-5.637a23.121 23.121 0 0 1 2.254 6.757v.044a20.151 20.151 0 0 1-.689 15.024c-2.553 5.474-8.726 11.086-18.392 10.811-10.441-.299-19.642-8.047-21.357-18.199-.316-1.596 0-2.41.156-3.71a16.572 16.572 0 0 0-.356 3.072v.115a22.263 22.263 0 0 0 44.193 3.762c.038-.285.068-.57.102-.862a22.881 22.881 0 0 0-1.443-11.18h-.003v.003Z" fill="url(#e)"/><path d="m106.036 18.367.135.102a12.1 12.1 0 0 0-2.064-2.7c-6.92-6.92-1.813-15-.951-15.415l.007-.013c-5.592 3.276-7.49 9.337-7.663 12.366.261-.017.52-.038.78-.038a11.233 11.233 0 0 1 9.756 5.694v.004Z" fill="url(#f)"/><path d="M96.294 19.753c-.034.55-1.993 2.462-2.676 2.462-6.328 0-7.357 3.826-7.357 3.826.278 3.226 2.526 5.884 5.242 7.283.122.068.251.123.374.18.22.099.438.187.655.269a9.947 9.947 0 0 0 2.896.556c11.096.523 13.242-13.265 5.239-17.268a7.69 7.69 0 0 1 5.365 1.303 11.236 11.236 0 0 0-9.752-5.697c-.264 0-.523.024-.78.04a11.15 11.15 0 0 0-6.13 2.36c.34.29.724.673 1.529 1.467 1.51 1.49 5.385 3.032 5.395 3.212v.007Z" fill="url(#g)"/><path d="M96.294 19.753c-.034.55-1.993 2.462-2.676 2.462-6.328 0-7.357 3.826-7.357 3.826.278 3.226 2.526 5.884 5.242 7.283.122.068.251.123.374.18.22.099.438.187.655.269a9.947 9.947 0 0 0 2.896.556c11.096.523 13.242-13.265 5.239-17.268a7.69 7.69 0 0 1 5.365 1.303 11.236 11.236 0 0 0-9.752-5.697c-.264 0-.523.024-.78.04a11.15 11.15 0 0 0-6.13 2.36c.34.29.724.673 1.529 1.467 1.51 1.49 5.385 3.032 5.395 3.212v.007Z" fill="url(#h)"/><path d="M88.334 14.335c.18.115.326.214.458.305a10.323 10.323 0 0 1-.064-5.439 16.481 16.481 0 0 0-5.358 4.143c.108-.007 3.337-.065 4.964.99Z" fill="url(#i)"/><path d="M74.199 24.557c1.718 10.149 10.92 17.9 21.36 18.196 9.666.271 15.839-5.338 18.389-10.811a20.16 20.16 0 0 0 .693-15.024v-.041l.006.034c.788 5.16-1.833 10.152-5.935 13.534l-.013.027c-7.986 6.509-15.632 3.925-17.177 2.872a11.632 11.632 0 0 1-.323-.16c-4.658-2.227-6.583-6.467-6.17-10.107a5.718 5.718 0 0 1-5.272-3.318 8.4 8.4 0 0 1 8.183-.329 11.103 11.103 0 0 0 8.359.33c-.01-.184-3.884-1.725-5.395-3.213-.805-.794-1.189-1.178-1.528-1.466a6.7 6.7 0 0 0-.577-.435 32.561 32.561 0 0 0-.459-.306c-1.623-1.052-4.852-.998-4.957-.994h-.01c-.883-1.12-.822-4.805-.77-5.575-.262.101-.51.237-.744.393a15.84 15.84 0 0 0-2.173 1.868 19.422 19.422 0 0 0-2.092 2.489 18.805 18.805 0 0 0-2.988 6.743c-.01.044-.801 3.5-.41 5.297l.003-.004Z" fill="url(#j)"/><path d="M104.103 15.77a12.114 12.114 0 0 1 2.071 2.7c.119.091.238.183.333.271 5.046 4.652 2.401 11.229 2.207 11.694 4.098-3.375 6.716-8.373 5.932-13.53-2.52-6.279-6.791-8.811-10.271-14.319-.18-.28-.354-.562-.523-.849a7.264 7.264 0 0 1-.245-.461 4.084 4.084 0 0 1-.346-.92.057.057 0 0 0-.037-.02.078.078 0 0 0-.044 0l-.011.006-.013.01c-.863.408-5.97 8.492.951 15.408v.01h-.004Z" fill="url(#k)"/><path d="M106.508 18.744a4.69 4.69 0 0 0-.336-.271l-.136-.102a7.684 7.684 0 0 0-5.368-1.304c8.006 4.003 5.857 17.788-5.24 17.269a9.9 9.9 0 0 1-2.895-.557 11.78 11.78 0 0 1-1.026-.448l.014.01c1.545 1.056 9.188 3.636 17.18-2.872l.01-.027c.197-.466 2.842-7.043-2.207-11.694l.004-.004Z" fill="url(#l)"/><path d="M86.261 26.039s1.026-3.827 7.358-3.827c.683 0 2.642-1.911 2.676-2.465-2.722.986-5.72.867-8.356-.329a8.39 8.39 0 0 0-8.183.33 5.717 5.717 0 0 0 5.27 3.317c-.411 3.64 1.514 7.877 6.169 10.108l.309.152c-2.717-1.405-4.964-4.06-5.243-7.283v-.003Z" fill="url(#m)"/><path d="M116.856 15.754c-.968-2.33-2.93-4.842-4.468-5.636a23.121 23.121 0 0 1 2.254 6.757l.007.033c-2.519-6.27-6.784-8.804-10.271-14.31-.179-.28-.354-.564-.523-.85a7.273 7.273 0 0 1-.248-.462 4.084 4.084 0 0 1-.346-.92.057.057 0 0 0-.034-.02.078.078 0 0 0-.044 0l-.01.007-.017.01.01-.017c-5.592 3.273-7.49 9.334-7.66 12.366.258-.017.516-.037.781-.037a11.23 11.23 0 0 1 9.751 5.693 7.68 7.68 0 0 0-5.364-1.303c8.003 4.006 5.857 17.788-5.24 17.272a9.899 9.899 0 0 1-2.895-.56c-.222-.083-.44-.173-.656-.269-.125-.058-.251-.112-.373-.18l.013.01a12.07 12.07 0 0 1-.322-.16l.305.15c-2.716-1.402-4.96-4.057-5.242-7.28 0 0 1.029-3.83 7.358-3.83.686 0 2.645-1.91 2.679-2.464-.01-.18-3.885-1.722-5.396-3.209-.804-.794-1.188-1.178-1.528-1.467a6.756 6.756 0 0 0-.577-.434 10.321 10.321 0 0 1-.06-5.443 16.48 16.48 0 0 0-5.359 4.142h-.01c-.883-1.12-.818-4.804-.767-5.575-.262.102-.51.238-.747.394a16.233 16.233 0 0 0-2.173 1.864c-.76.77-1.46 1.606-2.081 2.496v.003-.003a18.801 18.801 0 0 0-2.988 6.743l-.028.146c-.044.197-.23 1.188-.258 1.405A26.351 26.351 0 0 0 74 23.92v.115a22.263 22.263 0 0 0 44.197 3.762l.102-.859a22.896 22.896 0 0 0-1.446-11.184h.003Zm-2.207 1.144v.02-.023.003Z" fill="url(#n)"/><path fill-rule="evenodd" clip-rule="evenodd" d="M145.735 41.46a3.502 3.502 0 0 1 4.053-2.839 3.502 3.502 0 0 1 2.838 4.053l-.738 4.185-6.891-1.215.738-4.185Zm-4.183 3.577.738-4.185a7.004 7.004 0 0 1 8.106-5.676 7.005 7.005 0 0 1 5.676 8.106l-.738 4.185 2.659.469a1.545 1.545 0 0 1 1.243 1.19c.044.199.049.404.013.604l-2.586 14.67a1.55 1.55 0 0 1-1.795 1.256l-19.099-3.368a1.547 1.547 0 0 1-1.257-1.794l2.587-14.669a1.55 1.55 0 0 1 1.795-1.257l2.658.469Zm6.216 9.167a2.231 2.231 0 0 0 1.865-1.814 2.236 2.236 0 0 0-1.82-2.565 2.237 2.237 0 0 0-2.587 1.788 2.23 2.23 0 0 0 1.132 2.342l-2.172 3.94a1.228 1.228 0 0 0 .862 1.801l1.988.35a1.228 1.228 0 0 0 1.426-1.398l-.694-4.444Z" fill="url(#o)"/><path fill-rule="evenodd" clip-rule="evenodd" d="m34.653 37.223 10.72-3.14a4.482 4.482 0 0 1 5.545 3.033l7.535 25.73-8.975-2.027-6.25 6.486-7.534-25.731-4.074 1.193a4.482 4.482 0 0 1 3.033-5.544Zm17.675 13.656c.278-.446-.093-1.037-.626-.947l-2.318.464a.546.546 0 0 1-.596-.238l-1.407-1.879a.606.606 0 0 0-1.09.293l-.276 2.331a.625.625 0 0 1-.395.505l-2.232.785c-.507.19-.556.894-.067 1.134l2.215 1.13a.668.668 0 0 1 .334.548l.1 2.548c.016.553.7.821 1.065.404l1.542-1.768a.626.626 0 0 1 .644-.173l2.222.757c.519.152.982-.397.718-.884l-1.19-2.255a.668.668 0 0 1 .013-.641l1.344-2.114Z" fill="url(#p)"/><path d="m180.376 80.545-2.14-1.846-3.269 3.79a1.412 1.412 0 1 0 2.14 1.846l3.269-3.79Z" fill="#B8B8B8"/><path d="m180.264 77.535.971.837-1.441 1.671-.972-.838 1.442-1.67Z" fill="#B8B8B8"/><path opacity=".2" d="M179.663 79.767c.543-.564.681-1.364.399-2l.203-.234.972.839-1.44 1.67-.219-.19c.024-.028.056-.057.085-.085Z" fill="#000"/><path fill-rule="evenodd" clip-rule="evenodd" d="M180.212 77.597a6.041 6.041 0 0 1-.092-8.15 6.036 6.036 0 0 1 7.936-.933 6.035 6.035 0 1 1-7.844 9.083Zm.183-3.813a4.235 4.235 0 1 0 8.448-.622 4.235 4.235 0 0 0-8.448.622Z" fill="url(#q)"/><path d="M178.237 78.698a1.41 1.41 0 0 0 .195 1.986 1.415 1.415 0 0 0 1.944-.14l-2.139-1.846Z" fill="#B8B8B8"/><path d="M4.364 73.733h.681c.17-.725.427-1.364.81-1.96l-.469-.47c-.511-.51-.511-1.363 0-1.917.512-.511 1.364-.511 1.918 0l.469.47c.596-.384 1.278-.683 1.96-.81v-.682c0-.725.596-1.364 1.364-1.364.724 0 1.363.597 1.363 1.364v.681c.724.17 1.364.427 1.96.81l.512-.469c.511-.511 1.363-.511 1.917 0 .512.512.512 1.364 0 1.918l-.468.469c.383.596.681 1.278.81 1.96h.68c.725 0 1.364.596 1.364 1.364 0 .724-.596 1.363-1.363 1.363h-.682a6.146 6.146 0 0 1-.81 1.96l.427.512c.51.511.51 1.363 0 1.917-.512.512-1.364.512-1.918 0l-.469-.469c-.596.384-1.278.682-1.96.81v.682c0 .724-.597 1.364-1.364 1.364a1.373 1.373 0 0 1-1.363-1.364v-.682a6.146 6.146 0 0 1-1.96-.81l-.47.47c-.51.51-1.363.51-1.917 0-.511-.512-.511-1.364 0-1.918l.47-.47c-.384-.596-.683-1.278-.81-1.96h-.682A1.373 1.373 0 0 1 3 75.14c0-.767.597-1.406 1.364-1.406Zm6.733 5.625a4.274 4.274 0 0 0 4.26-4.261 4.274 4.274 0 0 0-4.26-4.262 4.274 4.274 0 0 0-4.262 4.262 4.274 4.274 0 0 0 4.262 4.26Z" fill="url(#r)"/><path d="M11.096 79.358a4.274 4.274 0 0 0 4.262-4.262 4.274 4.274 0 0 0-4.262-4.261 4.274 4.274 0 0 0-4.26 4.261 4.274 4.274 0 0 0 4.26 4.261Zm0-7.245a2.965 2.965 0 0 1 2.983 2.983 2.965 2.965 0 0 1-2.983 2.983 2.965 2.965 0 0 1-2.982-2.983 2.965 2.965 0 0 1 2.982-2.983Z" fill="#9F9FAD"/><defs><radialGradient id="d" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(112.479 5.513) scale(46.4065)"><stop offset=".129" stop-color="#FFBD4F"/><stop offset=".186" stop-color="#FFAC31"/><stop offset=".247" stop-color="#FF9D17"/><stop offset=".283" stop-color="#FF980E"/><stop offset=".403" stop-color="#FF563B"/><stop offset=".467" stop-color="#FF3750"/><stop offset=".71" stop-color="#F5156C"/><stop offset=".782" stop-color="#EB0878"/><stop offset=".86" stop-color="#E50080"/></radialGradient><radialGradient id="e" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(95.248 24.466) scale(46.4065)"><stop offset=".3" stop-color="#960E18"/><stop offset=".351" stop-color="#B11927" stop-opacity=".74"/><stop offset=".435" stop-color="#DB293D" stop-opacity=".343"/><stop offset=".497" stop-color="#F5334B" stop-opacity=".094"/><stop offset=".53" stop-color="#FF3750" stop-opacity="0"/></radialGradient><radialGradient id="f" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(100.993 -4.827) scale(33.6161)"><stop offset=".132" stop-color="#FFF44F"/><stop offset=".252" stop-color="#FFDC3E"/><stop offset=".506" stop-color="#FF9D12"/><stop offset=".526" stop-color="#FF980E"/></radialGradient><radialGradient id="g" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(90.08 36.526) scale(22.0949)"><stop offset=".353" stop-color="#3A8EE6"/><stop offset=".472" stop-color="#5C79F0"/><stop offset=".669" stop-color="#9059FF"/><stop offset="1" stop-color="#C139E6"/></radialGradient><radialGradient id="h" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(11.38846 -2.75348 3.22363 13.33303 97.495 20.483)"><stop offset=".206" stop-color="#9059FF" stop-opacity="0"/><stop offset=".278" stop-color="#8C4FF3" stop-opacity=".064"/><stop offset=".747" stop-color="#7716A8" stop-opacity=".45"/><stop offset=".975" stop-color="#6E008B" stop-opacity=".6"/></radialGradient><radialGradient id="i" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(94.673 3.789) scale(15.8977)"><stop stop-color="#FFE226"/><stop offset=".121" stop-color="#FFDB27"/><stop offset=".295" stop-color="#FFC82A"/><stop offset=".502" stop-color="#FFA930"/><stop offset=".732" stop-color="#FF7E37"/><stop offset=".792" stop-color="#FF7139"/></radialGradient><radialGradient id="j" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(107.307 -6.551) scale(67.8295)"><stop offset=".113" stop-color="#FFF44F"/><stop offset=".456" stop-color="#FF980E"/><stop offset=".622" stop-color="#FF5634"/><stop offset=".716" stop-color="#FF3647"/><stop offset=".904" stop-color="#E31587"/></radialGradient><radialGradient id="k" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(83.976 52.385 55.089) scale(49.7065 32.622)"><stop stop-color="#FFF44F"/><stop offset=".06" stop-color="#FFE847"/><stop offset=".168" stop-color="#FFC830"/><stop offset=".304" stop-color="#FF980E"/><stop offset=".356" stop-color="#FF8B16"/><stop offset=".455" stop-color="#FF672A"/><stop offset=".57" stop-color="#FF3647"/><stop offset=".737" stop-color="#E31587"/></radialGradient><radialGradient id="l" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(94.675 9.533) scale(42.3403)"><stop offset=".137" stop-color="#FFF44F"/><stop offset=".48" stop-color="#FF980E"/><stop offset=".592" stop-color="#FF5634"/><stop offset=".655" stop-color="#FF3647"/><stop offset=".904" stop-color="#E31587"/></radialGradient><radialGradient id="m" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(105.588 11.833) scale(46.3434)"><stop offset=".094" stop-color="#FFF44F"/><stop offset=".231" stop-color="#FFE141"/><stop offset=".509" stop-color="#FFAF1E"/><stop offset=".626" stop-color="#FF980E"/></radialGradient><linearGradient id="b" x1="24" y1="132" x2="22.896" y2="176.973" gradientUnits="userSpaceOnUse"><stop stop-color="#E0E0E0"/><stop offset="1" stop-color="#A9A9A9"/></linearGradient><linearGradient id="c" x1="113.909" y1="7.456" x2="76.954" y2="43.11" gradientUnits="userSpaceOnUse"><stop offset=".048" stop-color="#FFF44F"/><stop offset=".111" stop-color="#FFE847"/><stop offset=".225" stop-color="#FFC830"/><stop offset=".368" stop-color="#FF980E"/><stop offset=".401" stop-color="#FF8B16"/><stop offset=".462" stop-color="#FF672A"/><stop offset=".534" stop-color="#FF3647"/><stop offset=".705" stop-color="#E31587"/></linearGradient><linearGradient id="n" x1="113.461" y1="7.269" x2="82.02" y2="38.713" gradientUnits="userSpaceOnUse"><stop offset=".167" stop-color="#FFF44F" stop-opacity=".8"/><stop offset=".266" stop-color="#FFF44F" stop-opacity=".634"/><stop offset=".489" stop-color="#FFF44F" stop-opacity=".217"/><stop offset=".6" stop-color="#FFF44F" stop-opacity="0"/></linearGradient><linearGradient id="o" x1="137.223" y1="44.267" x2="159.641" y2="52.954" gradientUnits="userSpaceOnUse"><stop stop-color="#E3C6FF"/><stop offset="1" stop-color="#BC9BFF"/></linearGradient><linearGradient id="p" x1="40.013" y1="35.653" x2="48.804" y2="65.672" gradientUnits="userSpaceOnUse"><stop stop-color="#D7C1FF"/><stop offset=".583" stop-color="#C09BFF"/></linearGradient><linearGradient id="q" x1="184.174" y1="67.454" x2="185.061" y2="79.489" gradientUnits="userSpaceOnUse"><stop stop-color="#B8B8B8"/><stop offset="1" stop-color="#939393"/></linearGradient><linearGradient id="r" x1="11.118" y1="67" x2="11.118" y2="83.236" gradientUnits="userSpaceOnUse"><stop stop-color="#E0E0E6"/><stop offset="1" stop-color="#AFAFBA"/></linearGradient><clipPath id="a"><path fill="#fff" transform="translate(6 72)" d="M0 0h181v114H0z"/></clipPath></defs></svg>
diff --git a/browser/components/newtab/data/content/assets/pocket-onboarding.avif b/browser/components/newtab/data/content/assets/pocket-onboarding.avif
new file mode 100644
index 0000000000..9bd1b3e524
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/pocket-onboarding.avif
Binary files differ
diff --git a/browser/components/newtab/data/content/assets/pocket-onboarding@2x.avif b/browser/components/newtab/data/content/assets/pocket-onboarding@2x.avif
new file mode 100644
index 0000000000..6817e85f2f
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/pocket-onboarding@2x.avif
Binary files differ
diff --git a/browser/components/newtab/data/content/assets/pocket-swoosh.svg b/browser/components/newtab/data/content/assets/pocket-swoosh.svg
new file mode 100644
index 0000000000..0d81c7c453
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/pocket-swoosh.svg
@@ -0,0 +1,11 @@
+<!-- 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/. -->
+<svg width="272" height="221" viewBox="0 0 272 221" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M198.149 217.506C197.027 216.807 149.258 224.525 138.051 218.986C128.922 214.474 157.583 197.26 145.113 191.397C117.229 178.287 84.755 163.892 64.5172 157.556C4.66231 138.817 -3.24386 110.107 0.935229 88.348C5.11432 66.5887 18.2486 80.7262 34.9152 65.6889C51.5819 50.6516 104.716 18.9837 151.432 20.6766C198.149 22.3695 221.034 23.4152 223.074 41.0915C225.114 58.7678 212.726 69.4233 186.059 64.4441C159.393 59.4649 125.96 54.8342 131.034 48.6101C136.109 42.3363 137.092 40.245 145.898 41.0915C149.707 41.4576 140.907 45.1279 146.728 43.0367C152.549 40.9454 143.027 37.6002 138.051 37.1521C133.076 36.7537 146.728 39.6303 120.639 48.6101C93.2259 62.3528 76.5072 66.4358 72.7758 83.166C69.0445 99.8963 94.0196 132.46 127.85 149.838C161.681 167.216 210.686 192.51 208.547 196.742C206.457 200.975 198.149 217.506 198.149 217.506Z" fill="#F9BFD1"/>
+<path d="M205.746 200.389C205.945 200.041 90.7455 153.648 52.4781 140.797C14.2106 127.945 -1.18287 102.054 4.62425 81.3135C10.4314 60.573 24.4848 48.7046 69.0061 31.8343C113.527 14.9639 191.105 8.46391 207.781 22.7044C224.458 36.945 242.624 58.1321 222.324 66.4184C222.324 66.4184 153.234 65.6741 144.201 60.2161C135.168 54.8077 122.459 48.2869 127.522 44.5655C132.584 40.8441 161.225 49.3992 180.582 50.6397C199.939 51.8802 214.929 45.3801 191.253 38.4335C167.578 31.4869 141.024 31.8839 119.682 38.4335C103.7 43.3458 89.8521 52.2771 74.9125 61.8535C59.9728 71.4299 45.4301 82.1475 47.9118 100.01C50.3935 117.873 94.7162 117.923 122.61 128.342C150.504 138.762 213.291 185.404 213.291 185.404L205.746 200.389Z" fill="#EF4056"/>
+<path d="M209.225 191.228C207.134 188.504 145.073 153.09 82.9625 136.052C20.8518 119.064 -2.24359 101.58 8.1082 70.5247C15.8223 47.3945 10.0023 68.8903 27.9189 55.2201C45.8354 41.55 83.0621 7.86999 143.929 10.4455C204.795 13.021 229.132 17.4787 236.647 29.5144C244.162 41.55 253.717 58.9348 236.647 62.2533C219.576 65.5718 183.594 68.1473 163.438 63.8878C140.096 58.9844 114.225 47.2717 117.211 45.5877C117.211 45.5877 160.932 53.89 169.509 55.2021C178.087 56.5142 210.369 60.5693 215.794 52.2979C221.219 44.0265 207.035 31.9908 183.295 29.5144C159.556 27.0379 131.238 22.7783 95.9023 37.6867C73.208 47.1964 56.2868 60.5693 41.7047 70.5247C23.7383 82.808 25.4305 101.481 48.3736 100.738C71.3168 99.9947 145.72 133.576 163.488 138.974C181.255 144.373 218.929 173.546 218.929 173.546L209.225 191.228Z" fill="#FCB643"/>
+<path d="M213.615 176.342C213.615 176.342 159 138.263 118.647 129.929C78.2938 121.594 19.2055 116.205 10.5087 89.3049C1.21562 60.5587 20.8951 78.0759 20.8951 78.0759C23.9266 76.429 20.8951 66.4976 43.4073 48.3316C66.9134 29.3671 94.3952 17.8886 136.14 17.0901C177.884 16.2916 210.634 18.737 223.654 29.6166C233.692 38.0009 241.942 60.5587 210.335 61.8064C178.729 63.054 133.624 51.4307 123.139 45.9908C112.603 40.551 109.227 51.1025 155.819 67.6454C179.574 73.4845 232.053 80.6211 243.681 66.3978C255.31 52.1744 267.784 21.6815 218.684 11.251C169.585 0.820553 107.266 -2.12393 69.597 11.251C31.9276 24.626 17.5158 48.0322 15.8759 65.1501C14.2359 82.2681 27.6538 98.9368 41.7674 101.632C55.9307 104.327 121.181 104.826 139.519 110.266C157.857 115.705 199.353 147.745 205.515 155.88C211.677 164.015 218.635 173.547 218.635 173.547L213.615 176.342Z" fill="#1CB0A8"/>
+<path d="M202.82 146.773C190.024 133.777 166.02 102.605 122.971 90.7038C80.7161 79.0517 51.7524 81.9896 39.6015 81.5414C-11.5313 79.5496 2.55382 51.0168 9.29879 41.5059C16.0438 31.995 44.2139 5.20501 128.476 0.673622C213.185 -3.90756 273.791 15.2637 271.311 46.4356C268.831 77.6076 212.342 88.214 176.633 80.2966C122.971 68.3983 104.917 48.7908 107.149 45.9026C109.331 42.9647 121.033 49.2374 138.241 57.6725C155.449 66.1076 244.331 84.8777 250.134 51.5148C255.936 18.1518 198.654 9.83599 147.62 8.98946C100.604 8.24253 54.5793 27.3142 31.3191 44.4438C21.1025 51.9629 -8.55554 95.9821 54.5793 106.987C117.714 117.992 137.255 109.078 169.145 130.341C201.034 151.604 215.891 172.154 217.153 170.526C218.415 168.898 215.615 159.77 202.82 146.773Z" fill="#95D2FF"/>
+<path d="M138.128 44.9027C124.799 45.702 103.087 55.76 93.8965 60.689C93.8965 58.4909 95.1659 53.0556 100.244 48.8992C106.591 43.7037 120.079 35.1111 138.128 35.5108C156.178 35.9104 154.79 43.9035 138.128 44.9027Z" fill="#FFC0D1"/>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/remote/mountain.svg b/browser/components/newtab/data/content/assets/remote/mountain.svg
new file mode 100644
index 0000000000..4511148820
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/remote/mountain.svg
@@ -0,0 +1,12 @@
+<!-- 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/. -->
+<svg width="115" height="89" fill="none" xmlns="http://www.w3.org/2000/svg">
+ <path d="M86.676 83.103c15.377 0 27.842-12.465 27.842-27.842 0-15.376-12.465-27.842-27.842-27.842-15.377 0-27.842 12.466-27.842 27.842 0 15.377 12.465 27.842 27.842 27.842z" fill="#FFEA80"/>
+ <path d="M84.457 41.839l-25.25 43.159a2.59 2.59 0 002.232 3.898h50.484a2.589 2.589 0 002.591-2.6 2.594 2.594 0 00-.354-1.298L88.914 41.84a2.586 2.586 0 00-4.457 0z" fill="#7542E5"/>
+ <path d="M114.16 85.031L95.432 52.967l-4.084 4.084-4.653-4.657-4.656 4.657-4.085-4.085L59.21 85.03a2.591 2.591 0 002.233 3.904h50.48a2.59 2.59 0 002.236-3.904z" fill="#7542E5"/>
+ <path d="M86.68 52.394l3.923 3.922a1.037 1.037 0 001.465 0l3.34-3.34-6.493-11.142a2.587 2.587 0 00-4.467 0l-6.509 11.132 3.34 3.34a1.037 1.037 0 001.466 0l3.936-3.912z" fill="#B48EFF"/>
+ <path d="M41.036 17.67L.368 85.014a2.586 2.586 0 002.3 3.893h81.346a2.586 2.586 0 002.295-3.893L45.636 17.67a2.706 2.706 0 00-4.6 0z" fill="#AB71FF"/>
+ <path d="M56.329 35.373L45.635 17.671a2.706 2.706 0 00-4.594 0L30.347 35.373l-.954 1.58 5.56 7.635a1.032 1.032 0 001.67 0l6.68-9.214 6.704 9.214a1.03 1.03 0 001.67 0l5.583-7.663-.931-1.551z" fill="#D9BFFF"/>
+ <path d="M41.086 1.131v14.41a1.13 1.13 0 001.13 1.131h26.507a1.12 1.12 0 001.044-.697 1.14 1.14 0 00-.242-1.236l-6.409-6.403 6.39-6.404c.322-.325.417-.811.243-1.235A1.135 1.135 0 0068.723 0H42.216c-.624 0-1.13.507-1.13 1.131z" fill="#FFA266"/>
+</svg>
diff --git a/browser/components/newtab/data/content/assets/remote/umbrella.png b/browser/components/newtab/data/content/assets/remote/umbrella.png
new file mode 100644
index 0000000000..3488d135c6
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/remote/umbrella.png
Binary files differ
diff --git a/browser/components/newtab/data/content/assets/short-zap.svg b/browser/components/newtab/data/content/assets/short-zap.svg
new file mode 100644
index 0000000000..cc004ed607
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/short-zap.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 16" width="400" height="16"><defs><linearGradient id="a" y1="13.69" x2="435.45" y2="13.69" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.91716 0 0 .7708 .27 .687)"><stop offset="0" stop-color="#616eb3"/><stop offset=".5" stop-color="#ec1067"/><stop offset="1" stop-color="#f6901e"/></linearGradient></defs><path d="M3.12 14c161-19.73 207.41 3 223.21-.65 16.76-3.85 20-6.77 31.28-10.29 18.08-5.64-2.49 13.2 8.14 10.71 16.45-3.84 27.73-7.39 39.25-9.4 15-2.6-2 22.49 87.48-2.37" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke="url(#a)"/></svg>
diff --git a/browser/components/newtab/data/content/assets/spinner.svg b/browser/components/newtab/data/content/assets/spinner.svg
new file mode 100644
index 0000000000..2964a31731
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/spinner.svg
@@ -0,0 +1,4 @@
+<!-- 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/. -->
+<svg width="73" height="73" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="93.093%" y1="52.773%" x2="68.513%" y2="119.326%" id="a"><stop stop-color="#FFF" stop-opacity="0" offset="0%"/><stop stop-color="#FFF" offset="69.37%"/><stop stop-color="#FFF" offset="100%"/><stop stop-color="#FFF" stop-opacity=".005" offset="100%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/></linearGradient><path id="b" d="M0 0h48v60H0z"/></defs><g transform="translate(-5 -1)" fill="none" fill-rule="evenodd"><path d="M41.8 73.8c-19.9 0-36-16.1-36-36 0-19.7 15.8-35.6 35.3-36h.7c2.8.4 5 2.7 5 5.5s-2.2 5.2-5 5.4c-13.8.1-25 11.3-25 25.1s11.2 25 25 25 25-11.2 25-25h11c0 19.9-16.1 36-36 36z" fill="url(#a)"/><mask id="c" fill="#fff"><use href="#b"/></mask><path d="M41.8 73.8c-19.9 0-36-16.1-36-36 0-19.7 15.8-35.6 35.3-36h.7c2.8.4 5 2.7 5 5.5s-2.2 5.2-5 5.4c-13.8.1-25 11.3-25 25.1s11.2 25 25 25 25-11.2 25-25h11c0 19.9-16.1 36-36 36z" fill="#FFF" mask="url(#c)"/></g></svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/newtab-render.js b/browser/components/newtab/data/content/newtab-render.js
new file mode 100644
index 0000000000..4fd46fad03
--- /dev/null
+++ b/browser/components/newtab/data/content/newtab-render.js
@@ -0,0 +1,11 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+"use strict";
+
+// exported by activity-stream.bundle.js
+if (window.__FROM_STARTUP_CACHE__) {
+ window.NewtabRenderUtils.renderCache(window.__STARTUP_STATE__);
+} else {
+ window.NewtabRenderUtils.renderWithoutState();
+}
diff --git a/browser/components/newtab/data/content/tippytop/favicons/adidas.png b/browser/components/newtab/data/content/tippytop/favicons/adidas.png
new file mode 100644
index 0000000000..fd7123958c
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/adidas.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/aliexpress-com.ico b/browser/components/newtab/data/content/tippytop/favicons/aliexpress-com.ico
new file mode 100644
index 0000000000..99b86e13aa
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/aliexpress-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/allegro-pl.ico b/browser/components/newtab/data/content/tippytop/favicons/allegro-pl.ico
new file mode 100644
index 0000000000..42b4f90149
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/allegro-pl.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/amazon.ico b/browser/components/newtab/data/content/tippytop/favicons/amazon.ico
new file mode 100644
index 0000000000..1c39eaf8fe
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/amazon.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/avito-ru.ico b/browser/components/newtab/data/content/tippytop/favicons/avito-ru.ico
new file mode 100644
index 0000000000..c41847b27a
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/avito-ru.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/baidu-com.png b/browser/components/newtab/data/content/tippytop/favicons/baidu-com.png
new file mode 100644
index 0000000000..e63737eb30
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/baidu-com.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/bbc-uk.ico b/browser/components/newtab/data/content/tippytop/favicons/bbc-uk.ico
new file mode 100644
index 0000000000..8f62b07af8
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/bbc-uk.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/bing-com.ico b/browser/components/newtab/data/content/tippytop/favicons/bing-com.ico
new file mode 100644
index 0000000000..fdc021cfeb
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/bing-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/ctrip-com.ico b/browser/components/newtab/data/content/tippytop/favicons/ctrip-com.ico
new file mode 100644
index 0000000000..fa44291d84
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/ctrip-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/duckduckgo-com.ico b/browser/components/newtab/data/content/tippytop/favicons/duckduckgo-com.ico
new file mode 100644
index 0000000000..3ad20825c1
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/duckduckgo-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/ebay.ico b/browser/components/newtab/data/content/tippytop/favicons/ebay.ico
new file mode 100644
index 0000000000..3af7a36484
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/ebay.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/etsy.ico b/browser/components/newtab/data/content/tippytop/favicons/etsy.ico
new file mode 100644
index 0000000000..a94f3efd4f
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/etsy.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/facebook-com.ico b/browser/components/newtab/data/content/tippytop/favicons/facebook-com.ico
new file mode 100644
index 0000000000..8ce319b8f7
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/facebook-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/geico.png b/browser/components/newtab/data/content/tippytop/favicons/geico.png
new file mode 100644
index 0000000000..3f61497dd8
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/geico.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/google-com.ico b/browser/components/newtab/data/content/tippytop/favicons/google-com.ico
new file mode 100644
index 0000000000..82339b3b1d
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/google-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/hrblock.ico b/browser/components/newtab/data/content/tippytop/favicons/hrblock.ico
new file mode 100644
index 0000000000..e0d7be35e0
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/hrblock.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/ifeng-com.ico b/browser/components/newtab/data/content/tippytop/favicons/ifeng-com.ico
new file mode 100644
index 0000000000..b0003e058f
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/ifeng-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/iqiyi-com.ico b/browser/components/newtab/data/content/tippytop/favicons/iqiyi-com.ico
new file mode 100644
index 0000000000..4b179bf4d5
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/iqiyi-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/leboncoin-fr.png b/browser/components/newtab/data/content/tippytop/favicons/leboncoin-fr.png
new file mode 100644
index 0000000000..e23e2a34b0
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/leboncoin-fr.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/nike.ico b/browser/components/newtab/data/content/tippytop/favicons/nike.ico
new file mode 100644
index 0000000000..7788d580af
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/nike.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/ok-ru.ico b/browser/components/newtab/data/content/tippytop/favicons/ok-ru.ico
new file mode 100644
index 0000000000..7db8914287
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/ok-ru.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/olx-pl.ico b/browser/components/newtab/data/content/tippytop/favicons/olx-pl.ico
new file mode 100644
index 0000000000..b2a28638f8
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/olx-pl.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/reddit-com.png b/browser/components/newtab/data/content/tippytop/favicons/reddit-com.png
new file mode 100644
index 0000000000..3c09931835
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/reddit-com.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/samsung.ico b/browser/components/newtab/data/content/tippytop/favicons/samsung.ico
new file mode 100644
index 0000000000..eb8c814256
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/samsung.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/turbotax.png b/browser/components/newtab/data/content/tippytop/favicons/turbotax.png
new file mode 100644
index 0000000000..c1d52f99fb
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/turbotax.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/twitter-com.ico b/browser/components/newtab/data/content/tippytop/favicons/twitter-com.ico
new file mode 100644
index 0000000000..e5aaff4379
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/twitter-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/vk-com.ico b/browser/components/newtab/data/content/tippytop/favicons/vk-com.ico
new file mode 100644
index 0000000000..0066072c39
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/vk-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/vodafone.png b/browser/components/newtab/data/content/tippytop/favicons/vodafone.png
new file mode 100644
index 0000000000..1a4ba0089e
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/vodafone.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/weibo-com.ico b/browser/components/newtab/data/content/tippytop/favicons/weibo-com.ico
new file mode 100644
index 0000000000..11a88045ec
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/weibo-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/wikipedia-org.ico b/browser/components/newtab/data/content/tippytop/favicons/wikipedia-org.ico
new file mode 100644
index 0000000000..e70021849b
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/wikipedia-org.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/wix.ico b/browser/components/newtab/data/content/tippytop/favicons/wix.ico
new file mode 100644
index 0000000000..cabcb650a7
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/wix.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/wykop-pl.png b/browser/components/newtab/data/content/tippytop/favicons/wykop-pl.png
new file mode 100644
index 0000000000..5aae5b17f2
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/wykop-pl.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/yandex-com.png b/browser/components/newtab/data/content/tippytop/favicons/yandex-com.png
new file mode 100644
index 0000000000..d1c3f3f8b1
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/yandex-com.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/yandex-ru.png b/browser/components/newtab/data/content/tippytop/favicons/yandex-ru.png
new file mode 100644
index 0000000000..eb187398c7
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/yandex-ru.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/youtube-com.png b/browser/components/newtab/data/content/tippytop/favicons/youtube-com.png
new file mode 100644
index 0000000000..b0c05d0716
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/youtube-com.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/favicons/zhihu-com.ico b/browser/components/newtab/data/content/tippytop/favicons/zhihu-com.ico
new file mode 100644
index 0000000000..c83d0e6d86
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/favicons/zhihu-com.ico
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/adidas@2x.png b/browser/components/newtab/data/content/tippytop/images/adidas@2x.png
new file mode 100644
index 0000000000..f07c17a9a8
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/adidas@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/aliexpress-com@2x.png b/browser/components/newtab/data/content/tippytop/images/aliexpress-com@2x.png
new file mode 100644
index 0000000000..76fac2e935
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/aliexpress-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/allegro-pl@2x.png b/browser/components/newtab/data/content/tippytop/images/allegro-pl@2x.png
new file mode 100644
index 0000000000..7aa6ffd4b3
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/allegro-pl@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/amazon@2x.png b/browser/components/newtab/data/content/tippytop/images/amazon@2x.png
new file mode 100644
index 0000000000..fb20eea921
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/amazon@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/avito-ru@2x.png b/browser/components/newtab/data/content/tippytop/images/avito-ru@2x.png
new file mode 100644
index 0000000000..9ba32a8d96
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/avito-ru@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/baidu-com@2x.png b/browser/components/newtab/data/content/tippytop/images/baidu-com@2x.png
new file mode 100644
index 0000000000..b7662dd21f
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/baidu-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/bbc-uk@2x.png b/browser/components/newtab/data/content/tippytop/images/bbc-uk@2x.png
new file mode 100644
index 0000000000..e019ac3de6
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/bbc-uk@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/bing-com@2x.svg b/browser/components/newtab/data/content/tippytop/images/bing-com@2x.svg
new file mode 100644
index 0000000000..1afdee989a
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/bing-com@2x.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
+ viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
+<g>
+
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="20.4168" y1="-3.0325" x2="39.7202" y2="-14.1773" gradientTransform="matrix(1 0 0 -1 0 18)">
+ <stop offset="0" style="stop-color:#37BDFF"/>
+ <stop offset="0.1832" style="stop-color:#33BFFD"/>
+ <stop offset="0.3576" style="stop-color:#28C5F5"/>
+ <stop offset="0.528" style="stop-color:#15D0E9"/>
+ <stop offset="0.5468" style="stop-color:#12D1E7"/>
+ <stop offset="0.5903" style="stop-color:#1CD2E5"/>
+ <stop offset="0.7679" style="stop-color:#42D8DC"/>
+ <stop offset="0.9107" style="stop-color:#59DBD6"/>
+ <stop offset="1" style="stop-color:#62DCD4"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M39.002,30.234c0,0.437-0.024,0.871-0.071,1.299c-0.282,2.61-1.412,4.969-3.112,6.795
+ c0.214-0.238,0.407-0.493,0.577-0.767c0.131-0.208,0.247-0.425,0.345-0.651c0.036-0.074,0.068-0.152,0.095-0.229
+ c0.032-0.074,0.059-0.152,0.083-0.229c0.027-0.071,0.051-0.146,0.071-0.22c0.021-0.077,0.042-0.154,0.059-0.232
+ c0.003-0.009,0.006-0.018,0.009-0.027c0.018-0.077,0.032-0.154,0.047-0.232c0.015-0.08,0.03-0.161,0.042-0.24
+ c0-0.003,0-0.003,0-0.006c0.012-0.074,0.021-0.149,0.027-0.226c0.018-0.176,0.027-0.35,0.027-0.529
+ c0-1.004-0.277-1.947-0.761-2.749c-0.11-0.187-0.232-0.365-0.365-0.535c-0.157-0.202-0.327-0.392-0.511-0.568
+ c-0.458-0.443-0.993-0.806-1.584-1.061c-0.255-0.113-0.523-0.205-0.796-0.274c-0.003,0-0.009-0.003-0.012-0.003l-0.095-0.032
+ l-1.385-0.475V29.04l-3.623-1.245c-0.012-0.003-0.027-0.003-0.036-0.006l-0.226-0.083c-0.728-0.285-1.332-0.82-1.709-1.501
+ l-1.322-3.374l-1.516-3.864l-0.291-0.746l-0.074-0.152c-0.083-0.202-0.128-0.422-0.128-0.651c0-0.059,0-0.119,0.006-0.172
+ c0.086-0.85,0.808-1.516,1.682-1.516c0.232,0,0.455,0.047,0.657,0.134l6.751,3.462l1.332,0.681
+ c0.705,0.419,1.361,0.913,1.961,1.468c2.176,1.998,3.602,4.797,3.816,7.927C38.99,29.679,39.002,29.955,39.002,30.234z"/>
+
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="9.1031" y1="-19.7528" x2="37.1978" y2="-19.7528" gradientTransform="matrix(1 0 0 -1 0 18)">
+ <stop offset="0" style="stop-color:#39D2FF"/>
+ <stop offset="0.1501" style="stop-color:#38CEFE"/>
+ <stop offset="0.2931" style="stop-color:#35C3FA"/>
+ <stop offset="0.4327" style="stop-color:#2FB0F3"/>
+ <stop offset="0.5468" style="stop-color:#299AEB"/>
+ <stop offset="0.5827" style="stop-color:#2692EC"/>
+ <stop offset="0.7635" style="stop-color:#1A6CF1"/>
+ <stop offset="0.909" style="stop-color:#1355F4"/>
+ <stop offset="1" style="stop-color:#104CF5"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M37.198,34.74c0,0.345-0.032,0.678-0.092,1.002c-0.018,0.086-0.036,0.172-0.056,0.259
+ c-0.039,0.154-0.08,0.303-0.131,0.452c-0.027,0.077-0.054,0.154-0.083,0.229c-0.03,0.077-0.062,0.152-0.095,0.229
+ c-0.098,0.226-0.214,0.443-0.345,0.651c-0.169,0.274-0.363,0.529-0.577,0.767c-0.984,1.088-4.325,3.028-5.556,3.816l-2.733,1.67
+ c-2.003,1.234-3.896,2.107-6.283,2.167c-0.113,0.003-0.223,0.006-0.333,0.006c-0.154,0-0.306-0.003-0.458-0.009
+ c-4.042-0.154-7.567-2.324-9.6-5.531c-0.93-1.465-1.545-3.147-1.753-4.954c0.437,2.47,2.589,4.342,5.184,4.342
+ c0.909,0,1.763-0.229,2.508-0.633c0.006-0.003,0.012-0.006,0.018-0.009l0.267-0.161l1.088-0.642l1.385-0.82v-0.039l0.179-0.107
+ l12.391-7.341l0.954-0.565l0.095,0.032c0.003,0,0.009,0.003,0.012,0.003c0.274,0.068,0.541,0.161,0.796,0.274
+ c0.592,0.255,1.126,0.618,1.584,1.061c0.184,0.176,0.354,0.365,0.511,0.568c0.134,0.169,0.255,0.348,0.365,0.535
+ C36.921,32.793,37.198,33.736,37.198,34.74L37.198,34.74z"/>
+
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="14.2883" y1="-22.2219" x2="14.2883" y2="15.3467" gradientTransform="matrix(1 0 0 -1 0 18)">
+ <stop offset="0" style="stop-color:#1B48EF"/>
+ <stop offset="0.1221" style="stop-color:#1C51F0"/>
+ <stop offset="0.3212" style="stop-color:#1E69F5"/>
+ <stop offset="0.5676" style="stop-color:#2190FB"/>
+ <stop offset="1" style="stop-color:#26B8F4"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M19.557,10.241l-0.004,27.328l-1.385,0.821l-1.089,0.641l-0.268,0.162
+ c-0.004,0-0.012,0.004-0.016,0.008c-0.747,0.402-1.6,0.634-2.51,0.634c-2.595,0-4.744-1.873-5.183-4.342
+ c-0.021-0.114-0.036-0.232-0.049-0.345c-0.016-0.215-0.028-0.427-0.032-0.642V3.749c0-0.971,0.788-1.763,1.763-1.763
+ c0.365,0,0.706,0.114,0.987,0.3l5.39,3.522c0.029,0.024,0.061,0.045,0.094,0.065C18.647,6.824,19.557,8.425,19.557,10.241z"/>
+
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="14.6872" y1="-26.6866" x2="32.0255" y2="-9.3483" gradientTransform="matrix(1 0 0 -1 0 18)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="0.3726" style="stop-color:#FDFDFD"/>
+ <stop offset="0.5069" style="stop-color:#F6F6F6"/>
+ <stop offset="0.6026" style="stop-color:#EBEBEB"/>
+ <stop offset="0.68" style="stop-color:#DADADA"/>
+ <stop offset="0.7463" style="stop-color:#C4C4C4"/>
+ <stop offset="0.805" style="stop-color:#A8A8A8"/>
+ <stop offset="0.8581" style="stop-color:#888888"/>
+ <stop offset="0.9069" style="stop-color:#626262"/>
+ <stop offset="0.9523" style="stop-color:#373737"/>
+ <stop offset="0.9926" style="stop-color:#090909"/>
+ <stop offset="1" style="stop-color:#000000"/>
+ </linearGradient>
+ <path opacity="0.15" fill="url(#SVGID_4_)" enable-background="new " d="M37.198,34.74c0,0.345-0.032,0.678-0.092,1.002
+ c-0.018,0.086-0.036,0.172-0.056,0.259c-0.039,0.154-0.08,0.303-0.131,0.452c-0.027,0.077-0.054,0.154-0.083,0.229
+ c-0.03,0.077-0.062,0.152-0.095,0.229c-0.098,0.226-0.214,0.443-0.345,0.651c-0.169,0.274-0.362,0.529-0.577,0.767
+ c-0.984,1.088-4.325,3.028-5.556,3.816l-2.733,1.67c-2.003,1.234-3.896,2.107-6.283,2.167c-0.113,0.003-0.223,0.006-0.333,0.006
+ c-0.154,0-0.306-0.003-0.458-0.009c-4.042-0.154-7.567-2.324-9.6-5.531c-0.93-1.465-1.545-3.147-1.753-4.954
+ c0.437,2.47,2.589,4.342,5.184,4.342c0.909,0,1.763-0.229,2.508-0.633c0.006-0.003,0.012-0.006,0.018-0.009l0.267-0.161
+ l1.088-0.642l1.385-0.82v-0.039l0.179-0.107l12.391-7.341l0.954-0.565l0.095,0.032c0.003,0,0.009,0.003,0.012,0.003
+ c0.274,0.068,0.541,0.161,0.796,0.274c0.592,0.255,1.126,0.618,1.584,1.061c0.184,0.176,0.354,0.365,0.511,0.568
+ c0.134,0.169,0.255,0.348,0.365,0.535C36.921,32.793,37.198,33.736,37.198,34.74L37.198,34.74z"/>
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="14.2883" y1="16.0132" x2="14.2883" y2="-21.8356" gradientTransform="matrix(1 0 0 -1 0 18)">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="0.3726" style="stop-color:#FDFDFD"/>
+ <stop offset="0.5069" style="stop-color:#F6F6F6"/>
+ <stop offset="0.6026" style="stop-color:#EBEBEB"/>
+ <stop offset="0.68" style="stop-color:#DADADA"/>
+ <stop offset="0.7463" style="stop-color:#C4C4C4"/>
+ <stop offset="0.805" style="stop-color:#A8A8A8"/>
+ <stop offset="0.8581" style="stop-color:#888888"/>
+ <stop offset="0.9069" style="stop-color:#626262"/>
+ <stop offset="0.9523" style="stop-color:#373737"/>
+ <stop offset="0.9926" style="stop-color:#090909"/>
+ <stop offset="1" style="stop-color:#000000"/>
+ </linearGradient>
+ <path opacity="0.1" fill="url(#SVGID_5_)" enable-background="new " d="M19.557,10.241l-0.004,27.328l-1.385,0.821l-1.089,0.641
+ l-0.268,0.162c-0.004,0-0.012,0.004-0.016,0.008c-0.747,0.402-1.6,0.634-2.51,0.634c-2.595,0-4.744-1.873-5.183-4.342
+ c-0.021-0.114-0.036-0.232-0.049-0.345c-0.016-0.215-0.028-0.427-0.032-0.642V3.749c0-0.971,0.788-1.763,1.763-1.763
+ c0.365,0,0.706,0.114,0.987,0.3l5.39,3.522c0.029,0.024,0.061,0.045,0.094,0.065C18.647,6.824,19.557,8.425,19.557,10.241z"/>
+</g>
+</svg>
diff --git a/browser/components/newtab/data/content/tippytop/images/ctrip-com@2x.png b/browser/components/newtab/data/content/tippytop/images/ctrip-com@2x.png
new file mode 100644
index 0000000000..76a81da5af
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/ctrip-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/duckduckgo-com@2x.svg b/browser/components/newtab/data/content/tippytop/images/duckduckgo-com@2x.svg
new file mode 100644
index 0000000000..a28cc833cd
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/duckduckgo-com@2x.svg
@@ -0,0 +1,12 @@
+<svg fill="none" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
+ <path fill="#DE5833" fill-rule="evenodd" d="M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64Z" clip-rule="evenodd"/>
+ <path fill="#DDD" fill-rule="evenodd" d="M73 111.75c0-.5.123-.614-1.466-3.782-4.224-8.459-8.47-20.384-6.54-28.075.353-1.397-3.978-51.744-7.04-53.365-3.402-1.813-7.588-4.69-11.418-5.33-1.943-.31-4.49-.164-6.482.105-.353.047-.368.683-.03.798 1.308.443 2.895 1.212 3.83 2.375.178.22-.06.566-.342.577-.882.032-2.482.402-4.593 2.195-.244.207-.041.592.273.53 4.536-.897 9.17-.455 11.9 2.027.177.16.084.45-.147.512-23.694 6.44-19.003 27.05-12.696 52.344 5.619 22.53 7.733 29.792 8.4 32.004a.718.718 0 0 0 .423.467C55.228 118.38 73 118.524 73 113v-1.25Z" clip-rule="evenodd"/>
+ <path fill="#fff" fill-rule="evenodd" d="M122.75 64c0 32.447-26.303 58.75-58.75 58.75S5.25 96.447 5.25 64 31.553 5.25 64 5.25 122.75 31.553 122.75 64Zm-72.46 51.986c-1.624-5.016-6.161-19.551-10.643-37.92l-.447-1.828-.003-.016c-5.425-22.155-9.855-40.252 14.427-45.937.222-.052.33-.317.183-.492-2.786-3.305-8.005-4.388-14.604-2.111-.27.093-.506-.18-.338-.412 1.294-1.784 3.823-3.155 5.072-3.756.258-.124.242-.502-.031-.588a27.848 27.848 0 0 0-3.771-.9c-.37-.059-.404-.693-.032-.743 9.356-1.259 19.125 1.55 24.028 7.726a.325.325 0 0 0 .185.114c17.953 3.855 19.239 32.235 17.17 33.528-.407.255-1.714.108-3.438-.085-6.985-.781-20.818-2.329-9.401 18.948.113.21-.037.488-.272.525-6.416.997 1.755 21.034 7.812 34.323 23.815-5.52 41.563-26.868 41.563-52.362 0-29.685-24.065-53.75-53.75-53.75S10.25 34.315 10.25 64c0 24.947 16.995 45.924 40.04 51.986Z" clip-rule="evenodd"/>
+ <path fill="#3CA82B" d="M84.28 90.698c-1.367-.633-6.621 3.135-10.11 6.028-.728-1.031-2.103-1.78-5.203-1.242-2.713.472-4.211 1.126-4.88 2.254-4.283-1.623-11.488-4.13-13.229-1.71-1.902 2.646.476 15.161 3.003 16.786 1.32.849 7.63-3.208 10.926-6.005.532.749 1.388 1.178 3.148 1.137 2.662-.062 6.979-.681 7.649-1.921.04-.075.075-.164.105-.266 3.388 1.266 9.35 2.606 10.682 2.406 3.47-.521-.484-16.723-2.09-17.467Z"/>
+ <path fill="#4CBA3C" d="M74.49 97.097c.144.256.26.526.358.8.483 1.352 1.27 5.648.674 6.709-.595 1.062-4.459 1.574-6.843 1.615-2.384.041-2.92-.831-3.403-2.181-.387-1.081-.577-3.621-.572-5.075-.098-2.158.69-2.916 4.334-3.506 2.696-.436 4.121.071 4.944.94 3.828-2.857 10.215-6.889 10.838-6.152 3.106 3.674 3.499 12.42 2.826 15.939-.22 1.151-10.505-1.139-10.505-2.38 0-5.152-1.337-6.565-2.65-6.71Zm-22.53-1.609c.843-1.333 7.674.325 11.424 1.993 0 0-.77 3.491.456 7.604.359 1.203-8.627 6.558-9.8 5.637-1.355-1.065-3.85-12.432-2.08-15.234Z"/>
+ <path fill="#FC3" fill-rule="evenodd" d="M55.269 68.406c.553-2.403 3.127-6.932 12.321-6.822 4.648-.019 10.422-.002 14.25-.436a51.312 51.312 0 0 0 12.726-3.095c3.98-1.519 5.392-1.18 5.887-.272.544.999-.097 2.722-1.488 4.309-2.656 3.03-7.431 5.38-15.865 6.076-8.433.698-14.02-1.565-16.425 2.118-1.038 1.589-.236 5.333 7.92 6.512 11.02 1.59 20.072-1.917 21.19.201 1.119 2.118-5.323 6.428-16.362 6.518-11.039.09-17.934-3.865-20.379-5.83-3.102-2.495-4.49-6.133-3.775-9.279Z" clip-rule="evenodd"/>
+ <g fill="#14307E" opacity=".8">
+ <path d="M69.327 42.127c.616-1.008 1.981-1.786 4.216-1.786 2.234 0 3.285.889 4.013 1.88.148.202-.076.44-.306.34a59.869 59.869 0 0 1-.168-.073c-.817-.357-1.82-.795-3.54-.82-1.838-.026-2.997.435-3.727.831-.246.134-.634-.133-.488-.372Zm-25.157 1.29c2.17-.907 3.876-.79 5.081-.504.254.06.43-.213.227-.377-.935-.755-3.03-1.692-5.76-.674-2.437.909-3.585 2.796-3.592 4.038-.002.292.6.317.756.07.42-.67 1.12-1.646 3.289-2.553Z"/>
+ <path fill-rule="evenodd" d="M75.44 55.92a3.47 3.47 0 0 1-3.474-3.462 3.47 3.47 0 0 1 3.475-3.46 3.47 3.47 0 0 1 3.474 3.46 3.47 3.47 0 0 1-3.475 3.462Zm2.447-4.608a.899.899 0 0 0-1.799 0c0 .494.405.895.9.895.499 0 .9-.4.9-.895Zm-25.464 3.542a4.042 4.042 0 0 1-4.049 4.037 4.045 4.045 0 0 1-4.05-4.037 4.045 4.045 0 0 1 4.05-4.037 4.045 4.045 0 0 1 4.05 4.037Zm-1.193-1.338a1.05 1.05 0 0 0-2.097 0 1.048 1.048 0 0 0 2.097 0Z" clip-rule="evenodd"/>
+ </g>
+</svg> \ No newline at end of file
diff --git a/browser/components/newtab/data/content/tippytop/images/ebay@2x.png b/browser/components/newtab/data/content/tippytop/images/ebay@2x.png
new file mode 100644
index 0000000000..744e2442ff
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/ebay@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/etsy@2x.jpg b/browser/components/newtab/data/content/tippytop/images/etsy@2x.jpg
new file mode 100644
index 0000000000..4bd477ca6a
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/etsy@2x.jpg
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/facebook-com@2x.png b/browser/components/newtab/data/content/tippytop/images/facebook-com@2x.png
new file mode 100644
index 0000000000..8827157878
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/facebook-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/geico@2x.jpg b/browser/components/newtab/data/content/tippytop/images/geico@2x.jpg
new file mode 100644
index 0000000000..938b7948e9
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/geico@2x.jpg
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/google-com@2x.png b/browser/components/newtab/data/content/tippytop/images/google-com@2x.png
new file mode 100644
index 0000000000..263bd973b1
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/google-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/hrblock@2x.png b/browser/components/newtab/data/content/tippytop/images/hrblock@2x.png
new file mode 100644
index 0000000000..ba66c46b72
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/hrblock@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/ifeng-com@2x.png b/browser/components/newtab/data/content/tippytop/images/ifeng-com@2x.png
new file mode 100644
index 0000000000..f7099f334e
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/ifeng-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/iqiyi-com@2x.png b/browser/components/newtab/data/content/tippytop/images/iqiyi-com@2x.png
new file mode 100644
index 0000000000..901d536ad9
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/iqiyi-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/leboncoin-fr@2x.png b/browser/components/newtab/data/content/tippytop/images/leboncoin-fr@2x.png
new file mode 100644
index 0000000000..af293fa8c3
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/leboncoin-fr@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/nike@2x.jpg b/browser/components/newtab/data/content/tippytop/images/nike@2x.jpg
new file mode 100644
index 0000000000..ac5d639d12
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/nike@2x.jpg
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/ok-ru@2x.png b/browser/components/newtab/data/content/tippytop/images/ok-ru@2x.png
new file mode 100644
index 0000000000..c771bf3ad9
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/ok-ru@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/olx-pl@2x.png b/browser/components/newtab/data/content/tippytop/images/olx-pl@2x.png
new file mode 100644
index 0000000000..964cd2df10
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/olx-pl@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/reddit-com@2x.png b/browser/components/newtab/data/content/tippytop/images/reddit-com@2x.png
new file mode 100644
index 0000000000..3b8833d6c6
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/reddit-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/samsung@2x.jpg b/browser/components/newtab/data/content/tippytop/images/samsung@2x.jpg
new file mode 100644
index 0000000000..dec2346e9f
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/samsung@2x.jpg
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/turbotax@2x.jpg b/browser/components/newtab/data/content/tippytop/images/turbotax@2x.jpg
new file mode 100644
index 0000000000..625703943f
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/turbotax@2x.jpg
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/twitter-com@2x.png b/browser/components/newtab/data/content/tippytop/images/twitter-com@2x.png
new file mode 100644
index 0000000000..e5835ff98a
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/twitter-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/vk-com@2x.png b/browser/components/newtab/data/content/tippytop/images/vk-com@2x.png
new file mode 100644
index 0000000000..b4c14412a4
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/vk-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/vodafone@2x.jpg b/browser/components/newtab/data/content/tippytop/images/vodafone@2x.jpg
new file mode 100644
index 0000000000..2597063b47
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/vodafone@2x.jpg
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/weibo-com@2x.png b/browser/components/newtab/data/content/tippytop/images/weibo-com@2x.png
new file mode 100644
index 0000000000..e047eaac87
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/weibo-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/wikipedia-org@2x.png b/browser/components/newtab/data/content/tippytop/images/wikipedia-org@2x.png
new file mode 100644
index 0000000000..53cf1af1c6
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/wikipedia-org@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/wix@2x.jpg b/browser/components/newtab/data/content/tippytop/images/wix@2x.jpg
new file mode 100644
index 0000000000..473caf38a3
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/wix@2x.jpg
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/wykop-pl@2x.png b/browser/components/newtab/data/content/tippytop/images/wykop-pl@2x.png
new file mode 100644
index 0000000000..fbde175696
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/wykop-pl@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/yandex-com@2x.png b/browser/components/newtab/data/content/tippytop/images/yandex-com@2x.png
new file mode 100644
index 0000000000..ebea409306
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/yandex-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/yandex-ru@2x.png b/browser/components/newtab/data/content/tippytop/images/yandex-ru@2x.png
new file mode 100644
index 0000000000..3d4ffd15c3
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/yandex-ru@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/youtube-com@2x.png b/browser/components/newtab/data/content/tippytop/images/youtube-com@2x.png
new file mode 100644
index 0000000000..6f1d7a1d7b
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/youtube-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/images/zhihu-com@2x.png b/browser/components/newtab/data/content/tippytop/images/zhihu-com@2x.png
new file mode 100644
index 0000000000..a1a9db845e
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/images/zhihu-com@2x.png
Binary files differ
diff --git a/browser/components/newtab/data/content/tippytop/top_sites.json b/browser/components/newtab/data/content/tippytop/top_sites.json
new file mode 100644
index 0000000000..82764a0527
--- /dev/null
+++ b/browser/components/newtab/data/content/tippytop/top_sites.json
@@ -0,0 +1,182 @@
+[
+ {
+ "domains": ["adidas.co.uk", "adidas.de", "adidas.fr"],
+ "image_url": "images/adidas@2x.png",
+ "favicon_url": "favicons/adidas.png"
+ },
+ {
+ "domains": ["aliexpress.com"],
+ "image_url": "images/aliexpress-com@2x.png",
+ "favicon_url": "favicons/aliexpress-com.ico"
+ },
+ {
+ "domains": ["allegro.pl"],
+ "image_url": "images/allegro-pl@2x.png",
+ "favicon_url": "favicons/allegro-pl.ico"
+ },
+ {
+ "domains": ["amazon.ae", "amazon.ca", "amazon.cn", "amazon.co.jp", "amazon.co.uk", "amazon.com", "amazon.com.au", "amazon.com.br", "amazon.com.mx", "amazon.de", "amazon.es", "amazon.fr", "amazon.in", "amazon.it", "amazon.nl", "amazon.sa", "amazon.se", "amazon.sg", "amazon.com.tr"],
+ "image_url": "images/amazon@2x.png",
+ "favicon_url": "favicons/amazon.ico"
+ },
+ {
+ "domains": ["avito.ru"],
+ "image_url": "images/avito-ru@2x.png",
+ "favicon_url": "favicons/avito-ru.ico"
+ },
+ {
+ "domains": ["baidu.com"],
+ "image_url": "images/baidu-com@2x.png",
+ "favicon_url": "favicons/baidu-com.png"
+ },
+ {
+ "domains": ["bbc.co.uk"],
+ "image_url": "images/bbc-uk@2x.png",
+ "favicon_url": "favicons/bbc-uk.ico"
+ },
+ {
+ "domains": ["bing.com"],
+ "image_url": "images/bing-com@2x.svg",
+ "favicon_url": "favicons/bing-com.ico"
+ },
+ {
+ "domains": ["ctrip.com"],
+ "image_url": "images/ctrip-com@2x.png",
+ "favicon_url": "favicons/ctrip-com.ico"
+ },
+ {
+ "domains": ["duckduckgo.com"],
+ "image_url": "images/duckduckgo-com@2x.svg",
+ "favicon_url": "favicons/duckduckgo-com.ico"
+ },
+ {
+ "domains": ["mx.ebay.com", "benl.ebay.be", "befr.ebay.be", "ebay.ca", "ebay.ch", "ebay.co.jp", "ebay.co.uk", "ebay.com", "ebay.com.au", "ebay.de", "ebay.es", "ebay.fr", "ebay.ie", "ebay.in", "ebay.it", "ebay.nl"],
+ "image_url": "images/ebay@2x.png",
+ "favicon_url": "favicons/ebay.ico"
+ },
+ {
+ "domains": ["etsy.com"],
+ "image_url": "images/etsy@2x.jpg",
+ "favicon_url": "favicons/etsy.ico"
+ },
+ {
+ "domains": ["facebook.com"],
+ "image_url": "images/facebook-com@2x.png",
+ "favicon_url": "favicons/facebook-com.ico"
+ },
+ {
+ "domains": ["geico.com"],
+ "image_url": "images/geico@2x.jpg",
+ "favicon_url": "favicons/geico.png"
+ },
+ {
+ "domains": ["google.com"],
+ "image_url": "images/google-com@2x.png",
+ "favicon_url": "favicons/google-com.ico"
+ },
+ {
+ "domains": ["hrblock.com"],
+ "image_url": "images/hrblock@2x.png",
+ "favicon_url": "favicons/hrblock.ico"
+ },
+ {
+ "domains": ["ifeng.com"],
+ "image_url": "images/ifeng-com@2x.png",
+ "favicon_url": "favicons/ifeng-com.ico"
+ },
+ {
+ "domains": ["iqiyi.com"],
+ "image_url": "images/iqiyi-com@2x.png",
+ "favicon_url": "favicons/iqiyi-com.ico"
+ },
+ {
+ "domains": ["leboncoin.fr"],
+ "image_url": "images/leboncoin-fr@2x.png",
+ "favicon_url": "favicons/leboncoin-fr.png"
+ },
+ {
+ "domains": ["nike.com"],
+ "image_url": "images/nike@2x.jpg",
+ "favicon_url": "favicons/nike.ico"
+ },
+ {
+ "domains": ["ok.ru"],
+ "image_url": "images/ok-ru@2x.png",
+ "favicon_url": "favicons/ok-ru.ico"
+ },
+ {
+ "domains": ["olx.pl"],
+ "image_url": "images/olx-pl@2x.png",
+ "favicon_url": "favicons/olx-pl.ico"
+ },
+ {
+ "domains": ["reddit.com"],
+ "image_url": "images/reddit-com@2x.png",
+ "favicon_url": "favicons/reddit-com.png"
+ },
+ {
+ "domains": ["samsung.com"],
+ "image_url": "images/samsung@2x.jpg",
+ "favicon_url": "favicons/samsung.ico"
+ },
+ {
+ "domains": ["turbotax.intuit.com"],
+ "image_url": "images/turbotax@2x.jpg",
+ "favicon_url": "favicons/turbotax.png"
+ },
+ {
+ "domains": ["twitter.com"],
+ "image_url": "images/twitter-com@2x.png",
+ "favicon_url": "favicons/twitter-com.ico"
+ },
+ {
+ "domains": ["vk.com"],
+ "image_url": "images/vk-com@2x.png",
+ "favicon_url": "favicons/vk-com.ico"
+ },
+ {
+ "domains": ["vodafone.co.uk"],
+ "image_url": "images/vodafone@2x.jpg",
+ "favicon_url": "favicons/vodafone.png"
+ },
+ {
+ "domains": ["weibo.com"],
+ "image_url": "images/weibo-com@2x.png",
+ "favicon_url": "favicons/weibo-com.ico"
+ },
+ {
+ "domains": ["wikipedia.org"],
+ "image_url": "images/wikipedia-org@2x.png",
+ "favicon_url": "favicons/wikipedia-org.ico"
+ },
+ {
+ "domains": ["wix.com"],
+ "image_url": "images/wix@2x.jpg",
+ "favicon_url": "favicons/wix.ico"
+ },
+ {
+ "domains": ["wykop.pl"],
+ "image_url": "images/wykop-pl@2x.png",
+ "favicon_url": "favicons/wykop-pl.png"
+ },
+ {
+ "domains": ["yandex.com", "yandex.com.tr"],
+ "image_url": "images/yandex-com@2x.png",
+ "favicon_url": "favicons/yandex-com.png"
+ },
+ {
+ "domains": ["yandex.by", "yandex.kz", "yandex.ru", "yandex.ua", "yandex.uz"],
+ "image_url": "images/yandex-ru@2x.png",
+ "favicon_url": "favicons/yandex-ru.png"
+ },
+ {
+ "domains": ["youtube.com"],
+ "image_url": "images/youtube-com@2x.png",
+ "favicon_url": "favicons/youtube-com.png"
+ },
+ {
+ "domains": ["zhihu.com"],
+ "image_url": "images/zhihu-com@2x.png",
+ "favicon_url": "favicons/zhihu-com.ico"
+ }
+]