HEX
Server: Apache/2.4.41
System: Linux mainweb 5.4.0-182-generic #202-Ubuntu SMP Fri Apr 26 12:29:36 UTC 2024 x86_64
User: nationalmedicaregrp (1119)
PHP: 8.3.7
Disabled: exec,passthru,shell_exec,system,popen,proc_open,pcntl_exec
Upload Files
File: /home/ubuntu/bin/firefox/browser/features/[email protected]
�TPK
!<��S''���-bootstrap.jsPK
!<��i%%���Tinstall.rdfPK
!<���^��'��Xwebextension/_locales/ach/messages.jsonPK
!<������&��Ygwebextension/_locales/ar/messages.jsonPK
!<��		'��m�webextension/_locales/ast/messages.jsonPK
!<�U�CC&����webextension/_locales/az/messages.jsonPK
!<1s�o[[&��B�webextension/_locales/be/messages.jsonPK
!<�!�"��&���webextension/_locales/bg/messages.jsonPK
!<�?���$�$)����webextension/_locales/bn_BD/messages.jsonPK
!<�@�11&��webextension/_locales/br/messages.jsonPK
!<���ww&���webextension/_locales/bs/messages.jsonPK
!<�
����&��;1webextension/_locales/ca/messages.jsonPK
!<}��ˋ�'��JHwebextension/_locales/cak/messages.jsonPK
!<��LL&��`webextension/_locales/cs/messages.jsonPK
!<�D�iii&���wwebextension/_locales/cy/messages.jsonPK
!<c�o�&��W�webextension/_locales/da/messages.jsonPK
!<i�&����webextension/_locales/de/messages.jsonPK
!<f\�`��'���webextension/_locales/dsb/messages.jsonPK
!<�x����&��"�webextension/_locales/el/messages.jsonPK
!<R����)��4�webextension/_locales/en_GB/messages.jsonPK
!<��7W��)��vwebextension/_locales/en_US/messages.jsonPK
!<��
��&��`webextension/_locales/eo/messages.jsonPK
!<K�(���)��44webextension/_locales/es_AR/messages.jsonPK
!<|�F�ZZ)��OKwebextension/_locales/es_CL/messages.jsonPK
!<\V�Q**)���bwebextension/_locales/es_ES/messages.jsonPK
!<5s����)��azwebextension/_locales/es_MX/messages.jsonPK
!<��((&����webextension/_locales/et/messages.jsonPK
!<�����&����webextension/_locales/eu/messages.jsonPK
!<�QU��&��8�webextension/_locales/fa/messages.jsonPK
!<"�ǑDD&���webextension/_locales/ff/messages.jsonPK
!<�=p�""&����webextension/_locales/fi/messages.jsonPK
!<��--&����webextension/_locales/fr/messages.jsonPK
!<(f�)��cwebextension/_locales/fy_NL/messages.jsonPK
!<o{��uu)���"webextension/_locales/ga_IE/messages.jsonPK
!<�ʁ$$)��n4webextension/_locales/gu_IN/messages.jsonPK
!<!�
��&���Xwebextension/_locales/he/messages.jsonPK
!<R�F8  )���lwebextension/_locales/hi_IN/messages.jsonPK
!<"����&��+�webextension/_locales/hr/messages.jsonPK
!<�g:�'��J�webextension/_locales/hsb/messages.jsonPK
!<;�H�\\&����webextension/_locales/hu/messages.jsonPK
!<�|'��)��@�webextension/_locales/hy_AM/messages.jsonPK
!<�SS&��0�webextension/_locales/ia/messages.jsonPK
!<�D���&���webextension/_locales/id/messages.jsonPK
!<ո�6��&���webextension/_locales/it/messages.jsonPK
!<�t�66&���-webextension/_locales/ja/messages.jsonPK
!<6Ĝ^�&�&&��aIwebextension/_locales/ka/messages.jsonPK
!<�j��'��{pwebextension/_locales/kab/messages.jsonPK
!<�LR���&��X�webextension/_locales/kk/messages.jsonPK
!<ح�JVV&��t�webextension/_locales/km/messages.jsonPK
!<,�n��&���webextension/_locales/kn/messages.jsonPK
!<X���&���webextension/_locales/ko/messages.jsonPK
!<%hRZZ'���webextension/_locales/lij/messages.jsonPK
!<ZY��&��e�webextension/_locales/lo/messages.jsonPK
!<�f 9��&��|�webextension/_locales/lt/messages.jsonPK
!<,��77&��twebextension/_locales/mk/messages.jsonPK
!<�AD``&���webextension/_locales/ml/messages.jsonPK
!<p)���&���7webextension/_locales/mr/messages.jsonPK
!<^���&���Swebextension/_locales/ms/messages.jsonPK
!<����

&���jwebextension/_locales/my/messages.jsonPK
!<�˓uu)���wwebextension/_locales/nb_NO/messages.jsonPK
!<�Ggg&����webextension/_locales/nl/messages.jsonPK
!<��GG)��R�webextension/_locales/nn_NO/messages.jsonPK
!<��Y,��)���webextension/_locales/pa_IN/messages.jsonPK
!<0�}f��&����webextension/_locales/pl/messages.jsonPK
!<�5�(()����webextension/_locales/pt_BR/messages.jsonPK
!<t�
��)����webextension/_locales/pt_PT/messages.jsonPK
!<ϥ�99&���webextension/_locales/rm/messages.jsonPK
!<���ww&��[ webextension/_locales/ro/messages.jsonPK
!<��@Jll&��8webextension/_locales/ru/messages.jsonPK
!<�����&���Vwebextension/_locales/sk/messages.jsonPK
!<XO�P��&��owebextension/_locales/sl/messages.jsonPK
!<���Zvv&��ƅwebextension/_locales/sq/messages.jsonPK
!<���ç�&����webextension/_locales/sr/messages.jsonPK
!<�8��cc)��k�webextension/_locales/sv_SE/messages.jsonPK
!<QW��!�!&���webextension/_locales/ta/messages.jsonPK
!<��o__&��E�webextension/_locales/te/messages.jsonPK
!<� ���&���webextension/_locales/th/messages.jsonPK
!<���ESS&��webextension/_locales/tl/messages.jsonPK
!<�����&���.webextension/_locales/tr/messages.jsonPK
!<��<pp&���Fwebextension/_locales/uk/messages.jsonPK
!<JB��~~&���ewebextension/_locales/ur/messages.jsonPK
!<)�S{�
�
&��Lywebextension/_locales/uz/messages.jsonPK
!<��w���&���webextension/_locales/vi/messages.jsonPK
!<Y��{��)��E�webextension/_locales/zh_CN/messages.jsonPK
!<���VV)����webextension/_locales/zh_TW/messages.jsonPK
!<e�L��%��#�webextension/assertIsBlankDocument.jsPK
!<�xZ������webextension/assertIsTrusted.jsPK
!<��=��'�'$����webextension/background/analytics.jsPK
!<|��Mnn���webextension/background/auth.jsPK
!<�WҠf
f
(���webextension/background/communication.jsPK
!<�Y����%��2webextension/background/deviceInfo.jsPK
!<�5T(T(��Rwebextension/background/main.jsPK
!<O
;)���Ewebextension/background/selectorLoader.jsPK
!<	6�;��$��6Ywebextension/background/senderror.jsPK
!<0�D8DD*��jwebextension/background/startBackground.jsPK
!<BӰ�HH#���xwebextension/background/takeshot.jsPK
!<�����'�webextension/blank.htmlPK
!<{ڌ����j�webextension/blobConverters.jsPK
!<5�̂�#����webextension/build/buildSettings.jsPK
!<J��7b7b(��P�webextension/build/inlineSelectionCss.jsPK
!<�W���#���	webextension/build/onboardingCss.jsPK
!<����
�
$���	webextension/build/onboardingHtml.jsPK
!<l�S�S����+	webextension/build/raven.jsPK
!<0/�N�W�W��]webextension/build/shot.jsPK
!<B�ƞ�(��K_webextension/build/thumbnailGenerator.jsPK
!<4<۷����/uwebextension/catcher.jsPK
!<d������]}webextension/clipboard.jsPK
!<�s�`00��B�webextension/domainFromUrl.jsPK
!<����%����webextension/icons/back-highlight.svgPK
!<0������webextension/icons/back.svgPK
!<S�:(((��G�webextension/icons/cancel.svgPK
!<�26GYY����webextension/icons/cloud.svgPK
!<I4�)����=�webextension/icons/copy.pngPK
!<�?�zz��O�webextension/icons/copy.svgPK
!<*�������webextension/icons/done.svgPK
!<�f&�ZZ��+�webextension/icons/download.svgPK
!<�ҫ

��–webextension/icons/help-16.svgPK
!<h.�SS+���webextension/icons/icon-highlight-32-v2.svgPK
!<b��||����webextension/icons/icon-v2.svgPK
!<�9���5��\�webextension/icons/icon-welcome-face-without-eyes.svgPK
!<�4�^PP$����webextension/icons/menu-fullpage.svgPK
!<$v��YY(��*�webextension/icons/menu-myshot-white.svgPK
!< P�HH"��ɨwebextension/icons/menu-myshot.svgPK
!<�i��#��Q�webextension/icons/menu-visible.svgPK
!<�;��k�k#����webextension/icons/onboarding-1.pngPK
!<�0�(
(
#���webextension/icons/onboarding-2.pngPK
!<��6{v{v#��'
webextension/icons/onboarding-3.pngPK
!<8{cN����#��Ν
webextension/icons/onboarding-4.pngPK
!<�O��P<P<#���webextension/icons/onboarding-5.pngPK
!<z�M�������webextension/log.jsPK
!<����NN����webextension/makeUuid.jsPK
!<������3�webextension/manifest.jsonPK
!<Ğ=B2
2
#��L�webextension/onboarding/slides.htmlPK
!<4@�mBB!����webextension/onboarding/slides.jsPK
!<����~~��@�webextension/randomString.jsPK
!<��\��'����webextension/selector/callBackground.jsPK
!<0Ԗ,B
B
)����webextension/selector/documentMetadata.jsPK
!<��}��"�" ��Hwebextension/selector/shooter.jsPK
!<�GWA�A���q(webextension/selector/ui.jsPK
!<ީ��y�y"���webextension/selector/uicontrol.jsPK
!<��kv�����$webextension/selector/util.jsPK
!<�	������0webextension/sitehelper.jsPK��|-PK
!<��S''bootstrap.js/* globals ADDON_DISABLE Services CustomizableUI LegacyExtensionsUtils AppConstants PageActions */
const ADDON_ID = "[email protected]";
const TELEMETRY_ENABLED_PREF = "datareporting.healthreport.uploadEnabled";
const PREF_BRANCH = "extensions.screenshots.";
const USER_DISABLE_PREF = "extensions.screenshots.disabled";
const UPLOAD_DISABLED_PREF = "extensions.screenshots.upload-disabled";
const HISTORY_ENABLED_PREF = "places.history.enabled";

const { interfaces: Ci, utils: Cu } = Components;
ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
ChromeUtils.defineModuleGetter(this, "AddonManager",
                               "resource://gre/modules/AddonManager.jsm");
ChromeUtils.defineModuleGetter(this, "AppConstants",
                               "resource://gre/modules/AppConstants.jsm");
ChromeUtils.defineModuleGetter(this, "Console",
                               "resource://gre/modules/Console.jsm");
ChromeUtils.defineModuleGetter(this, "CustomizableUI",
                               "resource:///modules/CustomizableUI.jsm");
ChromeUtils.defineModuleGetter(this, "LegacyExtensionsUtils",
                               "resource://gre/modules/LegacyExtensionsUtils.jsm");
ChromeUtils.defineModuleGetter(this, "PageActions",
                               "resource:///modules/PageActions.jsm");
ChromeUtils.defineModuleGetter(this, "Services",
                               "resource://gre/modules/Services.jsm");

let addonResourceURI;
let appStartupDone;
let appStartupPromise = new Promise((resolve, reject) => {
  appStartupDone = resolve;
});

const prefs = Services.prefs;
const prefObserver = {
  register() {
    prefs.addObserver(PREF_BRANCH, this, false); // eslint-disable-line mozilla/no-useless-parameters
  },

  unregister() {
    prefs.removeObserver(PREF_BRANCH, this, false); // eslint-disable-line mozilla/no-useless-parameters
  },

  observe(aSubject, aTopic, aData) {
    // aSubject is the nsIPrefBranch we're observing (after appropriate QI)
    // aData is the name of the pref that's been changed (relative to aSubject)
    if (aData === USER_DISABLE_PREF) {
      // eslint-disable-next-line promise/catch-or-return
      appStartupPromise = appStartupPromise.then(handleStartup);
    }
  }
};


const appStartupObserver = {
  register() {
    Services.obs.addObserver(this, "sessionstore-windows-restored", false); // eslint-disable-line mozilla/no-useless-parameters
  },

  unregister() {
    Services.obs.removeObserver(this, "sessionstore-windows-restored", false); // eslint-disable-line mozilla/no-useless-parameters
  },

  observe() {
    appStartupDone();
    this.unregister();
  }
}

const LibraryButton = {
  ITEM_ID: "appMenu-library-screenshots",

  init(webExtension) {
    this._initialized = true;
    const permissionPages = [...webExtension.extension.permissions].filter(p => (/^https?:\/\//i).test(p));
    if (permissionPages.length > 1) {
      Cu.reportError(new Error("Should not have more than 1 permission page, but got: " + JSON.stringify(permissionPages)));
    }
    this.PAGE_TO_OPEN = permissionPages.length === 1 ? permissionPages[0].replace(/\*$/, "") : "https://screenshots.firefox.com/";
    this.PAGE_TO_OPEN += "shots";
    this.ICON_URL = webExtension.extension.getURL("icons/icon-v2.svg");
    this.LABEL = webExtension.extension.localizeMessage("libraryLabel");
    CustomizableUI.addListener(this);
    for (const win of CustomizableUI.windows) {
      this.onWindowOpened(win);
    }
  },

  uninit() {
    if (!this._initialized) {
      return;
    }
    for (const win of CustomizableUI.windows) {
      const item = win.document.getElementById(this.ITEM_ID);
      if (item) {
        item.remove();
      }
    }
    CustomizableUI.removeListener(this);
    this._initialized = false;
  },

  onWindowOpened(win) {
    const libraryViewInsertionPoint = win.document.getElementById("appMenu-library-remotetabs-button");
    // If the library view doesn't exist (on non-photon builds, for instance),
    // this will be null, and we bail out early.
    if (!libraryViewInsertionPoint) {
      return;
    }
    const parent = libraryViewInsertionPoint.parentNode;
    const {nextSibling} = libraryViewInsertionPoint;
    const item = win.document.createElement("toolbarbutton");
    item.className = "subviewbutton subviewbutton-iconic";
    item.addEventListener("command", () => win.openUILinkIn(this.PAGE_TO_OPEN, "tab"));
    item.id = this.ITEM_ID;
    const iconURL = this.ICON_URL;
    item.setAttribute("image", iconURL);
    item.setAttribute("label", this.LABEL);

    parent.insertBefore(item, nextSibling);
  },
};

const APP_STARTUP = 1;
const APP_SHUTDOWN = 2;
let startupReason;

function startup(data, reason) { // eslint-disable-line no-unused-vars
  startupReason = reason;
  if (reason === APP_STARTUP) {
    appStartupObserver.register();
  } else {
    appStartupDone();
  }
  prefObserver.register();
  addonResourceURI = data.resourceURI;
  // eslint-disable-next-line promise/catch-or-return
  appStartupPromise = appStartupPromise.then(handleStartup);
}

function shutdown(data, reason) { // eslint-disable-line no-unused-vars
  prefObserver.unregister();
  const webExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
    id: ADDON_ID,
    resourceURI: addonResourceURI
  });
  // Immediately exit if Firefox is exiting, #3323
  if (reason === APP_SHUTDOWN) {
    stop(webExtension, reason);
    return;
  }
  // Because the prefObserver is unregistered above, this _should_ terminate the promise chain.
  appStartupPromise = appStartupPromise.then(() => { stop(webExtension, reason); });
}

function install(data, reason) {} // eslint-disable-line no-unused-vars

function uninstall(data, reason) {} // eslint-disable-line no-unused-vars

function getBoolPref(pref) {
  return prefs.getPrefType(pref) && prefs.getBoolPref(pref);
}

function shouldDisable() {
  return getBoolPref(USER_DISABLE_PREF);
}

function handleStartup() {
  const webExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
    id: ADDON_ID,
    resourceURI: addonResourceURI
  });

  if (!shouldDisable() && !webExtension.started) {
    start(webExtension);
  } else if (shouldDisable()) {
    stop(webExtension, ADDON_DISABLE);
  }
}

function start(webExtension) {
  return webExtension.startup(startupReason).then((api) => {
    api.browser.runtime.onMessage.addListener(handleMessage);
    LibraryButton.init(webExtension);
    initPhotonPageAction(api, webExtension);
  }).catch((err) => {
    // The startup() promise will be rejected if the webExtension was
    // already started (a harmless error), or if initializing the
    // WebExtension failed and threw (an important error).
    console.error(err);
    if (err.message !== "This embedded extension has already been started") {
      // TODO: Should we send these errors to Sentry? #2420
    }
  });
}

function stop(webExtension, reason) {
  if (reason !== APP_SHUTDOWN) {
    LibraryButton.uninit();
    if (photonPageAction) {
      photonPageAction.remove();
      photonPageAction = null;
    }
  }
  return Promise.resolve(webExtension.shutdown(reason));
}

function handleMessage(msg, sender, sendReply) {
  if (!msg) {
    return;
  }

  if (msg.funcName === "isTelemetryEnabled") {
    const telemetryEnabled = getBoolPref(TELEMETRY_ENABLED_PREF);
    sendReply({type: "success", value: telemetryEnabled});
  } else if (msg.funcName === "isUploadDisabled") {
    const isESR = AppConstants.MOZ_UPDATE_CHANNEL === "esr";
    const uploadDisabled = getBoolPref(UPLOAD_DISABLED_PREF);
    sendReply({type: "success", value: uploadDisabled || isESR});
  } else if (msg.funcName === "isHistoryEnabled") {
    const historyEnabled = getBoolPref(HISTORY_ENABLED_PREF);
    sendReply({type: "success", value: historyEnabled});
  } else if (msg.funcName === "incrementCount") {
    const allowedScalars = ["download", "upload", "copy"];
    const scalar = msg.args && msg.args[0] && msg.args[0].scalar;
    if (!allowedScalars.includes(scalar)) {
      sendReply({type: "error", name: `incrementCount passed an unrecognized scalar ${scalar}`});
    } else {
      Services.telemetry.scalarAdd(`screenshots.${scalar}`, 1);
      sendReply({type: "success", value: true});
    }
  }
}

let photonPageAction;

// If the current Firefox version supports Photon (57 and later), this sets up
// a Photon page action and removes the UI for the WebExtension browser action.
// Does nothing otherwise.  Ideally, in the future, WebExtension page actions
// and Photon page actions would be one in the same, but they aren't right now.
function initPhotonPageAction(api, webExtension) {
  const id = "screenshots";
  let port = null;

  const {tabManager} = webExtension.extension;

  // Make the page action.
  photonPageAction = PageActions.actionForID(id) || PageActions.addAction(new PageActions.Action({
    id,
    title: "Take a Screenshot",
    iconURL: webExtension.extension.getURL("icons/icon-v2.svg"),
    _insertBeforeActionID: null,
    onCommand(event, buttonNode) {
      if (port) {
        const browserWin = buttonNode.ownerGlobal;
        const tab = tabManager.getWrapper(browserWin.gBrowser.selectedTab);
        port.postMessage({
          type: "click",
          tab: {id: tab.id, url: tab.url}
        });
      }
    },
  }));

  // Establish a port to the WebExtension side.
  api.browser.runtime.onConnect.addListener((listenerPort) => {
    if (listenerPort.name !== "photonPageActionPort") {
      return;
    }
    port = listenerPort;
    port.onMessage.addListener((message) => {
      switch (message.type) {
      case "setProperties":
        if (message.title) {
          photonPageAction.setTitle(message.title);
        }
        if (message.iconPath) {
          photonPageAction.setIconURL(webExtension.extension.getURL(message.iconPath));
        }
        break;
      default:
        console.error("Unrecognized message:", message);
        break;
      }
    });
  });
}
PK
!<��i%%install.rdf<?xml version="1.0" encoding="UTF-8"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  <Description about="urn:mozilla:install-manifest">
    <em:id>[email protected]</em:id>
    <em:name>Firefox Screenshots</em:name>
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!--Firefox-->
        <em:minVersion>57.0a1</em:minVersion>
        <em:maxVersion>*</em:maxVersion>
      </Description>
    </em:targetApplication>
    <em:type>2</em:type>
    <em:version>30.1.0</em:version>
    <em:bootstrap>true</em:bootstrap>
    <em:homepageURL>https://screenshots.firefox.com/</em:homepageURL>
    <em:multiprocessCompatible>true</em:multiprocessCompatible>
  </Description>
</RDF>
PK
!<���^��'webextension/_locales/ach/messages.json{
  "addonDescription": {
    "message": "Mak vidio ma ki ngolo macego cego ki cal me wang kio ki i Kakube ka igwok gi pi tutunu onyo matwal."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Mak cal me wang kio"
  },
  "myShotsLink": {
    "message": "Cal Na"
  },
  "screenshotInstructions": {
    "message": "Ywar onyo dii ii potbuk me yero bute. Dii ESC me juko."
  },
  "saveScreenshotSelectedArea": {
    "message": "Gwoki"
  },
  "saveScreenshotVisibleArea": {
    "message": "Gwok ma nen"
  },
  "saveScreenshotFullPage": {
    "message": "Gwok potbuk weng"
  },
  "cancelScreenshot": {
    "message": "Juki"
  },
  "downloadScreenshot": {
    "message": "Gam"
  },
  "notificationLinkCopiedTitle": {
    "message": "Ki loko kakube"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ki loko kakube me cal mamegi i bao me coc. Dii $META_KEY$-V me mwono ne.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Pe tye katic."
  },
  "requestErrorDetails": {
    "message": "Timwa kica! Pe onongo wa twero gwoko cal mamegi. Tim ber item doki lacen."
  },
  "connectionErrorTitle": {
    "message": "Pe watwero kube ki cal me wang kio mamegi."
  },
  "connectionErrorDetails": {
    "message": "Tim ber i rot kakube ni me intanet. Kace itwero kube i intanet, peko mo pi tutuno romo bedo tye i tic me Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Pe onongo wa twero gwoko cal mamegi pien peko mo tye i tic me Firefox Screenshots. Tim ber item doki lacen."
  },
  "unshootablePageErrorTitle": {
    "message": "Pe watwero mako cal me wang kio me potbuk man."
  },
  "unshootablePageErrorDetails": {
    "message": "Man pe obedo Kakube me rwom, pi meno pe watwero mako cal me wang kio ne."
  },
  "selfScreenshotErrorTitle": {
    "message": "Pe itwero mako cal me potbuk pa Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Yer mamegi tidi tutwal"
  },
  "genericErrorTitle": {
    "message": "Woo! Firefox Screenshots opo oo."
  },
  "genericErrorDetails": {
    "message": "Pe wa ngeyo ngo ma otime kombedi. Iromo temo ne doki onyo mako cal pa potbuk mukene?"
  },
  "tourBodyIntro": {
    "message": "Maki, gwoki, ki nywak cal me wang kio labongo weko Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Yoo manyen me gwoko"
  },
  "tourHeaderClickAndDrag": {
    "message": "Mak ngo ma imito keken"
  },
  "tourBodyClickAndDrag": {
    "message": "Dii ka i ywar me mako cal pa but potbuk keken. Itwero bene wot iwiye me wero yer mamegi."
  },
  "tourHeaderFullPage": {
    "message": "Mak dirica onyo Potbuk weng"
  },
  "tourBodyFullPage": {
    "message": "Yer mapeca ma i tung lacuc malo me mako kabedo ma nen i dirica onyo me mako potbuk weng."
  },
  "tourHeaderDownloadUpload": {
    "message": "Kit ma imito"
  },
  "tourBodyDownloadUpload": {
    "message": "Gwok cal mamegi ma ki ngolo ii Kakube pi nywako i yoo ma yot, onyo gamo gi i kompiuta ni. Itwero bene diyo mapeca me Cal Na me nongo cal ma i mako weng."
  },
  "tourSkip": {
    "message": "Kal"
  },
  "tourNext": {
    "message": "Cal malubo"
  },
  "tourPrevious": {
    "message": "Cal mukato"
  },
  "tourDone": {
    "message": "Otum"
  },
  "termsAndPrivacyNotice2": {
    "message": "Tic ki Firefox Screenshots nyuto ni, i yee $TERMSANDPRIVACYNOTICETERMSLINK$ ki $TERMSANDPRIVACYNOTICEPRIVACYLINK$ wa.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Cik"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Ngec me mung"
  }
}PK
!<������&webextension/_locales/ar/messages.json{
  "addonDescription": {
    "message": "خذ مقاطع و لقطات من الوب و احفظهم مؤقتًا أو دائمًا."
  },
  "addonAuthorsList": {
    "message": "موزيلا <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "خذ لقطة شاشة"
  },
  "myShotsLink": {
    "message": "لقطاتي"
  },
  "screenshotInstructions": {
    "message": "اسحب أو انقر في الصفحة لاختيار منطقة. اضغط ESC للإلغاء."
  },
  "saveScreenshotSelectedArea": {
    "message": "احفظ"
  },
  "saveScreenshotVisibleArea": {
    "message": "احفظ الجزء المرئي"
  },
  "saveScreenshotFullPage": {
    "message": "احفظ كل الصفحة"
  },
  "cancelScreenshot": {
    "message": "ألغِ"
  },
  "downloadScreenshot": {
    "message": "نزّل"
  },
  "downloadOnlyNotice": {
    "message": "أنت حاليًا في وضع ”التنزيل فقط“."
  },
  "downloadOnlyDetails": {
    "message": "تنتقل لقطات فَيرفُكس تلقائيا إلى وضع ”التنزيل فقط“ في الحالات التالية:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "في نافذة تصفح خاص."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "الكعكات من أطراف خارجية غير مفعلة."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "”لا تتذكر التأريخ أبدًا“ مفعّل."
  },
  "downloadOnlyDetailsESR": {
    "message": "تستخدم الإصدارة طويلة الدعم من فَيَرفُكس."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "عُطل الرفع."
  },
  "notificationLinkCopiedTitle": {
    "message": "نُسخ الرابط"
  },
  "notificationLinkCopiedDetails": {
    "message": "نُسِخَ رابط اللقطة إلى الحافظة. اضغط $META_KEY$-V للصقها.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "انسخ"
  },
  "notificationImageCopiedTitle": {
    "message": "نُسخت اللقطة"
  },
  "notificationImageCopiedDetails": {
    "message": "نُسخت اللقطة إلى الحافظة. اضغط $META_KEY$-V للصقها.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "اقتُصّت هذه الصورة لتصبح $PIXELS$بكسل.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "خارج الخدمة."
  },
  "requestErrorDetails": {
    "message": "تعذّر حفظ لقطتك. رجاء أعد المحاولة فيما بعد."
  },
  "connectionErrorTitle": {
    "message": "تعذّر الاتصال بلقطات شاشتك."
  },
  "connectionErrorDetails": {
    "message": "رجاء فحص اتصال الإنترنت. إذا كان باستطاعتك الاتصال بالإنترنت، فربما هناك عطل مؤقت في خدمة «لقطات شاشة فَيَرفُكس»."
  },
  "loginErrorDetails": {
    "message": "تعذّر حفظ لقطتك لعُطل في خدمة «لقطات شاشة فَيَرفُكس». رجاء إعادة المحاولة لاحقًا."
  },
  "unshootablePageErrorTitle": {
    "message": "تعذّر أخذ لقطة شاشة لهذه الصفحة."
  },
  "unshootablePageErrorDetails": {
    "message": "ليست هذه صفحة وِب قياسية، لذا لا يمكنك أخذ لقطة لها."
  },
  "selfScreenshotErrorTitle": {
    "message": "لا يمكننا أخذ لقطة لصفحة من صفحات «لقطات شاشة فَيَرفُكس»!"
  },
  "emptySelectionErrorTitle": {
    "message": "التحديد صغير جدا"
  },
  "privateWindowErrorTitle": {
    "message": "لقطات الشاشة معطّلة في وضع التصفح الخاص"
  },
  "privateWindowErrorDetails": {
    "message": "نأسف على الإزعاج. نعمل على هذه الخاصية للإصدارات اللاحقة."
  },
  "genericErrorTitle": {
    "message": "هناك عطل في «لقطات شاشة فَيَرفُكس»."
  },
  "genericErrorDetails": {
    "message": "لسنا متأكدين ما المشكلة. أتمانع إعادة المحاولة أو أخذ لقطة لصفحة أخرى؟"
  },
  "tourBodyIntro": {
    "message": "خذ لقطات الشاشة و احفظها و شاركها دون مغادرة فَيَرفُكس."
  },
  "tourHeaderPageAction": {
    "message": "طريقة جديدة لحفظ اللقطات بها"
  },
  "tourBodyPageAction": {
    "message": "وسّع قائمة إجراءات الصفحة في شريط العنوان لأخذ لقطة في أي وقت."
  },
  "tourHeaderClickAndDrag": {
    "message": "التقط ما تريده فقط"
  },
  "tourBodyClickAndDrag": {
    "message": "انقر و اسحب لالتقاط جزء معين من الصفحة. يمكنك أيضًا التحويم لإبراز التحديد."
  },
  "tourHeaderFullPage": {
    "message": "التقط النوافذ أو صفحات كاملة"
  },
  "tourBodyFullPage": {
    "message": "اختر الأزرار في أعلى اليمين لالتقاط المنطقة المرئية في النافذة أو الصفحة كلها."
  },
  "tourHeaderDownloadUpload": {
    "message": "كما تريدها"
  },
  "tourBodyDownloadUpload": {
    "message": "احفظ اللقطات التي أخذتها على الوب لمشاركتها بسهولة، أو نزّلها على حاسوبك. يمكنك أيضًل النقر على زر ”لقطاتي“ للعثور على كل اللقطات التي أخذتها."
  },
  "tourSkip": {
    "message": "تخطَّ"
  },
  "tourNext": {
    "message": "الشريحة التالية"
  },
  "tourPrevious": {
    "message": "الشريحة السابقة"
  },
  "tourDone": {
    "message": "تمّ"
  },
  "termsAndPrivacyNotice2": {
    "message": "استخدامك للقطات شاشة فَيَرفُكس يُعد موافقة على $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "الشروط"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "تنويه الخصوصية"
  },
  "libraryLabel": {
    "message": "لقطات الشاشة"
  }
}PK
!<��		'webextension/_locales/ast/messages.json{
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Facer una captura"
  },
  "myShotsLink": {
    "message": "Les mios captures"
  },
  "screenshotInstructions": {
    "message": "Arrastra o primi na páxina pa esbillar una rexón. Primi ESC pa encaboxar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar lo visible"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar la páxina completa"
  },
  "cancelScreenshot": {
    "message": "Encaboxar"
  },
  "downloadScreenshot": {
    "message": "Baxar"
  },
  "notificationLinkCopiedTitle": {
    "message": "Copióse l'enllaz"
  },
  "requestErrorDetails": {
    "message": "¡Perdón, pero nun pudimos guardar la to captura! Volvi tentalo más sero, por favor."
  },
  "unshootablePageErrorTitle": {
    "message": "Nun pue capturase esta páxina."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta páxina web nun ye estándar, asina que nun pues capturala."
  },
  "emptySelectionErrorTitle": {
    "message": "La esbilla ye perpequeña"
  },
  "privateWindowErrorTitle": {
    "message": "Les captures de pantalla tán desactivaes nel mou Restolar en privao"
  },
  "privateWindowErrorDetails": {
    "message": "Perdón poles molesties. Tamos trabayando nesta carauterística pa llanzamientos futuros."
  },
  "tourHeaderClickAndDrag": {
    "message": "Captura lo que quies"
  },
  "tourHeaderDownloadUpload": {
    "message": "Como te preste"
  },
  "tourSkip": {
    "message": "SALTAR"
  },
  "tourDone": {
    "message": "Fecho"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Términos"
  },
  "libraryLabel": {
    "message": "Captures de pantalla"
  }
}PK
!<�U�CC&webextension/_locales/az/messages.json{
  "addonDescription": {
    "message": "Web səhifələrin ekran görüntülərini alın, müvəqqəti və ya qalıcı saxlayın."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Ekran görüntüsü al"
  },
  "myShotsLink": {
    "message": "Ekran Görüntülərim"
  },
  "screenshotInstructions": {
    "message": "Səhifədə hər hansı bir yerdə sürüşdürərək və ya basaraq ərazini seçin. Ləğv etmək üçün ESC basın."
  },
  "saveScreenshotSelectedArea": {
    "message": "Saxla"
  },
  "saveScreenshotVisibleArea": {
    "message": "Görünən ərazini saxla"
  },
  "saveScreenshotFullPage": {
    "message": "Tam səhifəni saxla"
  },
  "cancelScreenshot": {
    "message": "Ləğv et"
  },
  "downloadScreenshot": {
    "message": "Endir"
  },
  "downloadOnlyNotice": {
    "message": "Hazırda Ancaq-Endirmə rejimindəsiniz."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots bu vəziyyətlərdə avtomatik olaraq Ancaq-Endirmə rejiminə keçir:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Məxfi Səyahət pəncərəsində."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Üçüncü tərəf çərəzlər söndürülüb."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Tarixçəni heç vaxt xatırlama” aktivdir."
  },
  "downloadOnlyDetailsESR": {
    "message": "Firefox ESR işlədirsiniz."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Yükləmələr söndürülüb."
  },
  "notificationLinkCopiedTitle": {
    "message": "Keçid Köçürüldü"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ekran görüntüsünün keçidi buferə köçürüldü. Yapışdırmaq üçün $META_KEY$-V basın.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Köçür"
  },
  "notificationImageCopiedTitle": {
    "message": "Görüntü Köçürüldü"
  },
  "notificationImageCopiedDetails": {
    "message": "Görüntünüz mübadilə buferinə köçürüldü. Yapışdırmaq üçün $META_KEY$-V basın.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Şəkil $PIXELS$px ölçülərinə kəsildi.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Xəta baş verdi."
  },
  "requestErrorDetails": {
    "message": "Üzr istəyirik! Ekran görüntünüzü saxlaya bilmədik. Lütfən biraz sonra təkrar yoxlayın."
  },
  "connectionErrorTitle": {
    "message": "Ekran görüntülərinizə qoşula bilmirik."
  },
  "connectionErrorDetails": {
    "message": "Lütfən internet bağlantınızı yoxlayın. Əgər internetdə problem yoxdursa Firefox Screenshots xidmətində müvəqqəti xəta ola bilər."
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshots xidmətindəki müvəqqəti xəta üzündən ekran görüntünüzü saxlaya bilmədik. Lütfən biraz sonra təkrar yoxlayın."
  },
  "unshootablePageErrorTitle": {
    "message": "Bu səhifənin ekran görüntüsü alına bilmir."
  },
  "unshootablePageErrorDetails": {
    "message": "Bu normal Web səhifəsi deyil, bu səbəbdən ekran görüntüsünü almaq mümkün olmur."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots səhifəsinin ekran görüntüsünü ala bilməzsiz!"
  },
  "emptySelectionErrorTitle": {
    "message": "Seçiminiz çox balacadır"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots özəlliyi Məxfi Səyahət rejimində sönülüdür"
  },
  "privateWindowErrorDetails": {
    "message": "Narahatlıq üçün üzr istəyirik. Gələcək buraxılışlarda bu özəllik üzərində işləyirik."
  },
  "genericErrorTitle": {
    "message": "Off! Firefox Screenshots dəli olub."
  },
  "genericErrorDetails": {
    "message": "Nə baş verdiyindən əmin deyilik. Bir daha yoxlayın və ya başqa səhifənin ekran görüntüsünü alaraq işləyib işləmədiyinə əmin olun."
  },
  "tourBodyIntro": {
    "message": "Firefoxu tərk etmədən ekran görüntüləri alın, saxlayın və paylaşın."
  },
  "tourHeaderPageAction": {
    "message": "Saxlamağın yeni yolu"
  },
  "tourBodyPageAction": {
    "message": "Ekran görüntüsü almaq istədiyinizdə ünvan sətrindəki səhifə əməliyyatları menyusunu açın."
  },
  "tourHeaderClickAndDrag": {
    "message": "İstədiyiniz hər şeyin görüntüsünü alın"
  },
  "tourBodyClickAndDrag": {
    "message": "Səhifənin hər hansı bir hissəsini almaq üçün basın və ya sürüşdürün. Seçiminizi işıqlandırmaq üçün üzərinə gedin."
  },
  "tourHeaderFullPage": {
    "message": "Pəncərəni və ya bütün səhifəni çəkin"
  },
  "tourBodyFullPage": {
    "message": "Sadəcə pəncərədə görünən hissəni və ya bütün səhifəni çəkmək üçün sağ üstdəki düymələrdən birini seçin."
  },
  "tourHeaderDownloadUpload": {
    "message": "İstədiyiniz kimi"
  },
  "tourBodyDownloadUpload": {
    "message": "Kəsdiyiniz hissələri rahat paylaşmaq üçün internetdə saxlayın və ya kompüterinizə endirin. Həmçinin Ekran Görüntülərim düyməsinə basaraq çəkdiyiniz bütün ekran görüntülərini görə bilərsiz."
  },
  "tourSkip": {
    "message": "Ötür"
  },
  "tourNext": {
    "message": "Növbəti Slayd"
  },
  "tourPrevious": {
    "message": "Əvvəlki Slayd"
  },
  "tourDone": {
    "message": "Tamamlandı"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots işlədərək $TERMSANDPRIVACYNOTICETERMSLINK$ və $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ilə razılaşmış olursunuz.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Şərtlər"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Məxfilik Bildirişi"
  },
  "libraryLabel": {
    "message": "Ekran Görüntüləri"
  }
}PK
!<1s�o[[&webextension/_locales/be/messages.json{
  "addonDescription": {
    "message": "Рабіце кліпы і здымкі экрана ў Сеціве і захоўвайце іх часова або назаўжды."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Зрабіць здымак экрана"
  },
  "myShotsLink": {
    "message": "Мае здымкі"
  },
  "screenshotInstructions": {
    "message": "Пацягніце або пстрыкніце на старонцы для выбару вобласці. Для адмены націсніце ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Захаваць"
  },
  "saveScreenshotVisibleArea": {
    "message": "Захаваць бачную вобласць"
  },
  "saveScreenshotFullPage": {
    "message": "Захаваць усю старонку"
  },
  "cancelScreenshot": {
    "message": "Скасаваць"
  },
  "downloadScreenshot": {
    "message": "Сцягнуць"
  },
  "downloadOnlyNotice": {
    "message": "Вы цяпер у рэжыме толькі сцягвання."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots аўтаматычна пераходзіць у рэжым толькі сцягвання ў наступных выпадках:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "У акне прыватнага аглядання."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Кукі ад трэцяга боку адключаны."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Уключана “не будзе запамінаць гісторыю”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Вы выкарыстоўваеце Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Зацягванне было выключана."
  },
  "notificationLinkCopiedTitle": {
    "message": "Спасылка скапіявана"
  },
  "notificationLinkCopiedDetails": {
    "message": "Спасылка на ваш здымак была скапіявана ў буфер абмену. Націсніце $META_KEY$-V для ўстаўкі.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Капіраваць"
  },
  "notificationImageCopiedTitle": {
    "message": "Скрыншот скапіраваны"
  },
  "notificationImageCopiedDetails": {
    "message": "Скрыншот скапіраваны ў буфер абмену. Націсніце $META_KEY$-V, каб уставіць.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Гэта выява была абрэзана да $PIXELS$пікселяў.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Адбылася памылка."
  },
  "requestErrorDetails": {
    "message": "Выбачайце! Нам не ўдалося захаваць ваш здымак. Паспрабуйце пазней."
  },
  "connectionErrorTitle": {
    "message": "Мы не можам атрымаць доступ да вашых скрыншотаў."
  },
  "connectionErrorDetails": {
    "message": "Калі ласка, праверце ваша злучэнне з Інтэрнэтам. Калі ў вас усё ў парадку з падлучэннем да Інтэрнэту, магчыма, паўсталі часовыя праблемы са службай Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Нам не ўдалося захаваць ваш здымак, таму што ўзніклі праблемы са службай Firefox Screenshots. Паспрабуйце пазней."
  },
  "unshootablePageErrorTitle": {
    "message": "Мы не можам зрабіць скрыншот гэтай старонкі."
  },
  "unshootablePageErrorDetails": {
    "message": "Гэта не стандартная вэб-старонка, таму вы не можаце зрабіць яе скрыншот."
  },
  "selfScreenshotErrorTitle": {
    "message": "Вы не можаце зрабіць здымак старонкі Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Абраная вобласць занадта малая"
  },
  "privateWindowErrorTitle": {
    "message": "Здымкі экрана адключаны ў рэжыме прыватнага аглядання"
  },
  "privateWindowErrorDetails": {
    "message": "Прабачце за нязручнасць. Мы працуем над даданнем гэтай магчымасці у будучыя выпускі."
  },
  "genericErrorTitle": {
    "message": "Вой! З Firefox Screenshots нешта не так."
  },
  "genericErrorDetails": {
    "message": "Мы не ўпэўненыя, у чым праблема. Паспрабаваць яшчэ раз, ці зрабіць здымак іншай старонкі?"
  },
  "tourBodyIntro": {
    "message": "Рабіце здымкі экрана, захоўвайце і дзяліцеся імі не выходзячы з Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Новы спосаб захаваць"
  },
  "tourBodyPageAction": {
    "message": "Разгарніце меню Дзеянні старонкі ў адрасным радку, калі жадаеце зрабіць скрыншот."
  },
  "tourHeaderClickAndDrag": {
    "message": "Рабіце скрыншоты чаго заўгодна"
  },
  "tourBodyClickAndDrag": {
    "message": "Пстрыкніце і пацягніце мышшу для захопу часткі старонкі. Вы таксама можаце навесці курсор мышы для падсвятлення абранай вобласці."
  },
  "tourHeaderFullPage": {
    "message": "Рабіце захоп вокнаў або цэлых старонак"
  },
  "tourBodyFullPage": {
    "message": "З дапамогай кнопак у верхнім правым куце выбірайце захоп бачнай вобласці акна або старонкі цалкам."
  },
  "tourHeaderDownloadUpload": {
    "message": "Як вам падабаецца"
  },
  "tourBodyDownloadUpload": {
    "message": "Захоўваеце свае здымкі ў Інтэрнэце, каб лёгка імі дзяліцца, або загружайце іх на свой камп'ютар. Вы таксама можаце прагледзець усе захаваныя здымкі, націснуўшы на кнопку Мае здымкі."
  },
  "tourSkip": {
    "message": "Прапусьціць"
  },
  "tourNext": {
    "message": "Наступны слайд"
  },
  "tourPrevious": {
    "message": "Папярэдні слайд"
  },
  "tourDone": {
    "message": "Гатова"
  },
  "termsAndPrivacyNotice2": {
    "message": "Выкарыстоўваючы Firefox Screenshots, вы згаджаецеся з нашымі $TERMSANDPRIVACYNOTICETERMSLINK$ і $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Умовамі выкарыстання"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Паведамленнем аб прыватнасці"
  },
  "libraryLabel": {
    "message": "Скрыншоты"
  }
}PK
!<�!�"��&webextension/_locales/bg/messages.json{
  "addonDescription": {
    "message": "Прави клипове и снимки на уебстраница и ги запазва временно или за постоянно."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Снимка на екрана"
  },
  "myShotsLink": {
    "message": "Моите снимки"
  },
  "screenshotInstructions": {
    "message": "За да изберете участък влачете или щракнете с мишката в страницата. Натиснете ESC за отказ."
  },
  "saveScreenshotSelectedArea": {
    "message": "Запазване"
  },
  "saveScreenshotVisibleArea": {
    "message": "Запазване на видимата област"
  },
  "saveScreenshotFullPage": {
    "message": "Запазване на цялата страница"
  },
  "cancelScreenshot": {
    "message": "Отказ"
  },
  "downloadScreenshot": {
    "message": "Изтегляне"
  },
  "downloadOnlyNotice": {
    "message": "В момента сте в режим на изтегляне."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots автоматично преминава в режим на изтегляне в следните ситуации"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "в поверителен прозорец"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Бисквитките от трети страни са забранени"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "настройката „Не помни история“ е включена"
  },
  "downloadOnlyDetailsESR": {
    "message": "Използвате Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Качването на снимки е изключено."
  },
  "notificationLinkCopiedTitle": {
    "message": "Препратката е копирана"
  },
  "notificationLinkCopiedDetails": {
    "message": "Препратка към снимката е копирана в системния буфер. За да я поставите натиснете $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Копиране"
  },
  "notificationImageCopiedTitle": {
    "message": "Снимката е копирана"
  },
  "notificationImageCopiedDetails": {
    "message": "Снимката е копирана в системния буфер. За да я поставите натиснете $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Изображението е отрязано до $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Повреда."
  },
  "requestErrorDetails": {
    "message": "Съжаляваме! Снимката не е запазена. Опитайте по-късно."
  },
  "connectionErrorTitle": {
    "message": "Няма връзка с вашите снимки."
  },
  "connectionErrorDetails": {
    "message": "Моля, проверете своята връзка към интернет. Ако имате връзка с Мрежата, в такъв случай може да има временен проблем с услугата на Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Снимката не може да бъде запазена, защото има проблем с услугата на Firefox Screenshots. Опитайте по-късно."
  },
  "unshootablePageErrorTitle": {
    "message": "Снимка на тази страница не може да бъде направена."
  },
  "unshootablePageErrorDetails": {
    "message": "Това не е обикновена уебстраница и за това снимка не може да ѝ бъде направена."
  },
  "selfScreenshotErrorTitle": {
    "message": "Не може да правите снимки на страницата на Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Избраната област е твърде малка"
  },
  "privateWindowErrorTitle": {
    "message": "Снимането е изключено в поверителен режим"
  },
  "privateWindowErrorDetails": {
    "message": "Съжаляваме за неудобството. Очаквайте тази възможност в бъдещите версии."
  },
  "genericErrorTitle": {
    "message": "Леле! Нещо се обърка с Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "Не сме сигурни какво точно се случи. Може да опитате отново, както и да снимате друга страница."
  },
  "tourBodyIntro": {
    "message": "Създавайте, запазвайте и споделяйте снимки на екрана без да напускате Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Нов начин за запазване"
  },
  "tourBodyPageAction": {
    "message": "Отворете менюто за действия със страницата, което се намира в адресната лента, когато желаете да направите снимка на екрана."
  },
  "tourHeaderClickAndDrag": {
    "message": "Уловете само нужното"
  },
  "tourBodyClickAndDrag": {
    "message": "Щракнете с мишката или влачете, за да уловите части от страницата. А когато посочите елементи от страницата – те се осветяват."
  },
  "tourHeaderFullPage": {
    "message": "Улавяйте прозорци и цели страници"
  },
  "tourBodyFullPage": {
    "message": "Използвайте бутоните в горния десен ъгъл, за да уловите само видимата част или цялата страница."
  },
  "tourHeaderDownloadUpload": {
    "message": "Както ви харесва"
  },
  "tourBodyDownloadUpload": {
    "message": "Запазвайте снимките на страници от Мрежата, за да ги споделяте по-лесно или ги изтегляйте на компютъра си. А бутонът „Моите снимки“ ще ви покаже всички направени от вас снимки."
  },
  "tourSkip": {
    "message": "Пропускане"
  },
  "tourNext": {
    "message": "Напред"
  },
  "tourPrevious": {
    "message": "Назад"
  },
  "tourDone": {
    "message": "Готово"
  },
  "termsAndPrivacyNotice2": {
    "message": "Използвайки Firefox Screenshots вие се съгласявате с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Условията"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Политиката на поверителност"
  },
  "libraryLabel": {
    "message": "Снимки"
  }
}PK
!<�?���$�$)webextension/_locales/bn_BD/messages.json{
  "addonDescription": {
    "message": "ওয়েব থেকে ক্লিপ এবং স্ক্রিনশট নিন এবং সেগুলো সাময়িকভাবে বা স্থায়ীভাবে সংরক্ষণ করুন।"
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "একটি স্ক্রীনশট নিন"
  },
  "myShotsLink": {
    "message": "আমার সটসমূহ"
  },
  "screenshotInstructions": {
    "message": "ড্রাগ করে অথবা পেজে ক্লিক করে একটি অংশ নির্বাচন করুন। বাতিল করতে ESC টিপুন।"
  },
  "saveScreenshotSelectedArea": {
    "message": "সংরক্ষণ"
  },
  "saveScreenshotVisibleArea": {
    "message": "যতটুকু দেখা যাচ্ছে সংরক্ষণ করুন"
  },
  "saveScreenshotFullPage": {
    "message": "সম্পূর্ণ পেজ সংরক্ষণ করুন"
  },
  "cancelScreenshot": {
    "message": "বাতিল"
  },
  "downloadScreenshot": {
    "message": "ডাউনলোড"
  },
  "downloadOnlyNotice": {
    "message": "আপনি বর্তমানে Download-Only মোডে আছেন।"
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screeenshots স্বয়ংক্রিয়ভাবে Download-Only এ পরিবর্তণ হয় যেসব অবস্থায়:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "ব্যক্তিগত ব্রাউজিং উইন্ডোতে।"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "তৃতীয়-পক্ষীয় কুকি নিষ্ক্রিয় আছে।"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“ইতিহাস কখনো মনে রাখবেন না” সক্রিয় হয়েছে।"
  },
  "downloadOnlyDetailsESR": {
    "message": "অাপনি Firefox ESR ব্যবহার করছেন।"
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "আপলোড নিষ্ক্রিয় করা হয়েছে।"
  },
  "notificationLinkCopiedTitle": {
    "message": "লিঙ্ক কপি করা হয়েছে"
  },
  "notificationLinkCopiedDetails": {
    "message": "আপার সট এর লিংক ক্লিপবোর্ডে কপি করা হয়েছে। পেস্ট করতে $META_KEY$-V চাপুন।",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "অনুলিপি"
  },
  "notificationImageCopiedTitle": {
    "message": "শট অনুলিপি করা হয়েছে"
  },
  "notificationImageCopiedDetails": {
    "message": "আপনার শট ক্লিপবোর্ডে অনুলিপি করা হয়েছে। প্রতিলেপন করতে $META_KEY$-V চাপুন।",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "ইমেজটিকে $PIXELS$পিক্সেলে ক্রপ করা হয়েছে।",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "বিকল।"
  },
  "requestErrorDetails": {
    "message": "দুঃখিত! আমরা আপনার সট সংরক্ষণ করতে পারিনি। অনুগ্রহ পুনরায় চেষ্টা করুন।"
  },
  "connectionErrorTitle": {
    "message": "আমরা আপনার স্ক্রিটসটসমূহ সংযোগ করতে পারছি না।"
  },
  "connectionErrorDetails": {
    "message": "অনুগ্রহ করে আপনার ইন্টারনেট সংযোগ পরীক্ষা করুন। আর যদি আপনার ইন্টারনেট সংযোগ ঠিক থাকে, তাহলে Firefox স্ক্রিনশট সেবাটিতে সাময়িক সমস্যা দেখা দিয়েছে।"
  },
  "loginErrorDetails": {
    "message": "আমরা আপনার শট সংরক্ষণ করতে পারিনি কারণ সেখানে Firefox স্ক্রিণশট সেবার সমস্যা আছে। অনুগ্রহ করে আবার চেস্টা করুন।"
  },
  "unshootablePageErrorTitle": {
    "message": "আমার এই পেজের স্ক্রিনশট নিতে পারব না।"
  },
  "unshootablePageErrorDetails": {
    "message": "এটা কোন আদর্শ ওয়েব পেজ না, তাই আপনি এটার স্ক্রিনশট তুলতে পারবেন না।"
  },
  "selfScreenshotErrorTitle": {
    "message": "আপনি Firefox স্ক্রিনশটের পেজের শট নিতে পারেন না!"
  },
  "emptySelectionErrorTitle": {
    "message": "আপনি অল্প স্থান নির্বাচন করেছেন"
  },
  "privateWindowErrorTitle": {
    "message": "ব্যক্তিগত ব্রাউজিং মোডে স্ক্রিনশট নেওয়া নিস্ক্রিয় করা হয়েছে"
  },
  "privateWindowErrorDetails": {
    "message": "অসুবিধার জন্য দুঃখিত। আমরা এই বৈশিষ্ট্যটি নিয়ে কাজ করছি, খুব শীঘ্রই রিলিজ করা হবে।"
  },
  "genericErrorTitle": {
    "message": "আয় হায়! Firefox স্ক্রিনশট পাগল হয়ে গেছে।"
  },
  "genericErrorDetails": {
    "message": "এই মাত্র কি ঘটেছে আমরা নিশ্চিত নই। আপনি কি অনুগ্রহ করে পুরনায় সট নেবেন কিংবা ভিন্ন একটি পেজে চেষ্টা করবেন?"
  },
  "tourBodyIntro": {
    "message": "Firefox ত্যাগ করা ছাড়াই স্ক্রিনশট তোল, সংরক্ষণ কর এবং শেয়ার কর।"
  },
  "tourHeaderPageAction": {
    "message": "সংরক্ষণ করার এক নতুন পদ্ধতি"
  },
  "tourBodyPageAction": {
    "message": "আপনি যখন কোন স্ক্রিনশট নিবেন, এড্রেস বার থেকে একশন মেনু খুলে নিন।"
  },
  "tourHeaderClickAndDrag": {
    "message": "ক্যাপচার করুন আপনি যা চান"
  },
  "tourBodyClickAndDrag": {
    "message": "একটি পেজের কিয়দংশ ক্যাপচার করতে ক্লিক করে ড্রাগ করুন। অতঃপর আপনি মাউজ হোভার করে আপনার নির্বাচিত অংশ হাইলাইট করতে পারবেন।"
  },
  "tourHeaderFullPage": {
    "message": "উইন্ডো ক্যাপচার করুন অথবা পুরো পেজ"
  },
  "tourBodyFullPage": {
    "message": "ইউন্ডোতে দৃশ্যমান অংশ অথবা সম্পূর্ণ পেজ ক্যাপচার করতে উপরে ডানদিকের বাটনগুলো থেকে নির্বাচন করুন।"
  },
  "tourHeaderDownloadUpload": {
    "message": "আপনি যেমন পছন্দ করেন"
  },
  "tourBodyDownloadUpload": {
    "message": "আপনার ক্রপ করা সটসমূহ ওয়েবে রাখুন সহজে শেয়ার করার সুবিধার্থে, অথবা আপনার কম্পিউটারে ডাউনলোড করুন। আপনার সকল সটসমূহ খুঁজে পেতে আমার সটসমূহ বাটনে ক্লিক করুন।"
  },
  "tourSkip": {
    "message": "এড়িয়ে যান"
  },
  "tourNext": {
    "message": "পরবর্তী স্লাইড"
  },
  "tourPrevious": {
    "message": "পূর্ববর্তী স্লাইড"
  },
  "tourDone": {
    "message": "সম্পন্ন"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots ব্যবহারের জন্য, আপনি আমাদের $TERMSANDPRIVACYNOTICETERMSLINK$ এবং $TERMSANDPRIVACYNOTICEPRIVACYLINK$ নীতিতে সম্মত হয়েছেন।",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "শর্তাবলী"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "গোপনীয়তা নীতি"
  },
  "libraryLabel": {
    "message": "স্ক্রীনশট"
  }
}PK
!<�@�11&webextension/_locales/br/messages.json{
  "addonDescription": {
    "message": "Tapit skeudennoù war ar Web hag enrollit anezho e-pad ur mare pe da viken."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Kemer un dapadenn-skramm"
  },
  "myShotsLink": {
    "message": "Ma zapadennoù"
  },
  "screenshotInstructions": {
    "message": "Riklit pe klikit war ar bajenn da ziuzañ ur vaezienn. Pouezit war ESC evit nullañ."
  },
  "saveScreenshotSelectedArea": {
    "message": "Enrollañ"
  },
  "saveScreenshotVisibleArea": {
    "message": "Enrollañ ar pezh a vez gwelet"
  },
  "saveScreenshotFullPage": {
    "message": "Enrollañ ar bajenn glok"
  },
  "cancelScreenshot": {
    "message": "Nullañ"
  },
  "downloadScreenshot": {
    "message": "Pellgargañ"
  },
  "downloadOnlyNotice": {
    "message": "E mod pellgargañ hepken emaoc'h bremañ."
  },
  "downloadOnlyDetails": {
    "message": "Mont a raio Firefox Screenshots e mod pellgargañ hepken en degouezhioù da heul:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "En ur prenestr merdeiñ prevez."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Diweredekaet eo toupinoù an tredeoù."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Gweredekaet eo \"Na enrollañ ar roll istor\"."
  },
  "downloadOnlyDetailsESR": {
    "message": "Arverañ a rit Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Diweredekaet eo bet an hizivadurioù."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ere eilet"
  },
  "notificationLinkCopiedDetails": {
    "message": "Eilet eo bet ere ho tapadenn er golver. Pouezit war $META_KEY$-V evit pegañ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Eilañ"
  },
  "notificationImageCopiedTitle": {
    "message": "Tapadenn eilet"
  },
  "notificationImageCopiedDetails": {
    "message": "Eilet eo bet ho tapadenn er golver. Pouezit war $META_KEY$-V evit pegañ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Digresket eo bet ho skeudenn da $PIXELS$ piksel.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Degouezhet ez eus bet ur fazi."
  },
  "requestErrorDetails": {
    "message": "Digarezit! N'haller ket enrollañ ho tapadenn. Klaskit en-dro diwezhatoc'h."
  },
  "connectionErrorTitle": {
    "message": "N'haller ket adkennaskañ d'ho tapadennoù-skramm."
  },
  "connectionErrorDetails": {
    "message": "Gwiriekait ho kennask kenrouedad. Ma 'z hoc'h gouest da gennaskañ ouzh ar genrouedad e c'hall bezañ abalamour d'ur gudenn gant ar gwazerezhioù Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "N'haller ket enrollañ ho tapadenn dre ma 'z eus bet ur gudenn gant ar gwazerezh Firefox Screenshots. Klaskit en-dro diwezhatoc'h."
  },
  "unshootablePageErrorTitle": {
    "message": "N'haller ket tapout ar bajenn-mañ."
  },
  "unshootablePageErrorDetails": {
    "message": "N'eo ket ur bajenn web reoliek neuze n'haller ket kemer un dapadenn-skramm ganti."
  },
  "selfScreenshotErrorTitle": {
    "message": "N'hallit ket kemer un dapadenn-skramm eus ur bajenn Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Re vihan eo ho tiuzadenn"
  },
  "privateWindowErrorTitle": {
    "message": "Diweredekaet eo an tapadennoù-skramm er merdeiñ prevez."
  },
  "privateWindowErrorDetails": {
    "message": "Digarezit evit ar gudenn. Labourat a reomp war ar c'heweriuster-mañ evit ermaeziadennoù da zont."
  },
  "genericErrorTitle": {
    "message": "Chaous! Ur gudenn a zo savet gant Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "N'omp ket sur eus ar pezh a zo c'hoarvezet. Gallout a rit adklask pe kemer ur dapadenn eus ur bajenn all."
  },
  "tourBodyIntro": {
    "message": "Kemerit, enrollit ha skignit tapadennoù-skramm he kuitaat Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Un doare nevez da enrollañ"
  },
  "tourBodyPageAction": {
    "message": "Kreskiñ lañser gweredoù ar bajenn er varrenn chomlec'h pa fell deoc'h kemer un dapadenn-skramm."
  },
  "tourHeaderClickAndDrag": {
    "message": "Tapit ar pezh a fell deoc'h hepken"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikit ha riklit evit tapout ul lodenn eus ar bajenn hepken. Gallout a rit ivez tremen a-us evit usskediñ an diuzad."
  },
  "tourHeaderFullPage": {
    "message": "Tapit prenestroù pe pajennoù a-bezh"
  },
  "tourBodyFullPage": {
    "message": "Diuzit an afelloù a-us a-zehou evit skeudenniñ ar vaezienn welus er prenestr pe evit skeudenniñ ar bajenn a-bezh."
  },
  "tourHeaderDownloadUpload": {
    "message": "Evel ma fell deoc'h"
  },
  "tourBodyDownloadUpload": {
    "message": "Enrollit ho tapadennoù didroc'het evit ar web evit skignañ aesoc'h, pe pellgargit anezho war ho urzhiataer. Gallout a rit ivez klikañ war an afell Ma zapadennoù evit kavout an holl dapadennoù kemeret ganeoc'h."
  },
  "tourSkip": {
    "message": "TREMEN"
  },
  "tourNext": {
    "message": "Treyonenn da-heul"
  },
  "tourPrevious": {
    "message": "Treyonenn gent"
  },
  "tourDone": {
    "message": "Graet"
  },
  "termsAndPrivacyNotice2": {
    "message": "En ur implij Firefox Screenshots ec'h asantit d'hor $TERMSANDPRIVACYNOTICETERMSLINK$ ha $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Divizoù"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Evezhiadenn a-fed buhez prevez"
  },
  "libraryLabel": {
    "message": "Tapadennoù-skramm"
  }
}PK
!<���ww&webextension/_locales/bs/messages.json{
  "addonDescription": {
    "message": "Snimite ili slikajte stvari s weba te ih sačuvajte privremeno ili trajno."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Snimi zaslon"
  },
  "myShotsLink": {
    "message": "Moji snimci"
  },
  "screenshotInstructions": {
    "message": "Povucite ili kliknite na stranicu kako biste izabrali područje. Pritisnite ESC za otkazivanje radnje."
  },
  "saveScreenshotSelectedArea": {
    "message": "Sačuvaj"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sačuvaj vidljivo"
  },
  "saveScreenshotFullPage": {
    "message": "Sačuvaj cijelu stranicu"
  },
  "cancelScreenshot": {
    "message": "Otkaži"
  },
  "downloadScreenshot": {
    "message": "Preuzmi"
  },
  "downloadOnlyNotice": {
    "message": "Trenutno ste u režimu preuzimanja."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots se automatski mijenja u režim preuzimanja u sljedećim situacijama:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "U prozoru privatnog pretraživanja."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Kada su kolačići trećih strana onemogućeni."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Kada je omogućeno “Nikad ne pamti historiju”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Koristite Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Prijenosi su onemogućeni."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link je kopiran"
  },
  "notificationLinkCopiedDetails": {
    "message": "Veza do vašeg snimka je kopirana u međuspremnik. Pristinite $META_KEY$-V da je zalijepite.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiraj"
  },
  "notificationImageCopiedTitle": {
    "message": "Snimak kopiran"
  },
  "notificationImageCopiedDetails": {
    "message": "Vaš snimak je kopiran u međuspremnik. Pritisnite $META_KEY$-V da zalijepite.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Slika je isječena na $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Nije u funkciji."
  },
  "requestErrorDetails": {
    "message": "Žao nam je! Nismo uspjeli sačuvati vaš snimak. Molimo pokušajte ponovo."
  },
  "connectionErrorTitle": {
    "message": "Ne možemo se povezati s vašim snimcima."
  },
  "connectionErrorDetails": {
    "message": "Molimo provjerite vašu internet konekciju. Ako se možete povezati na internet, moguće je da postoji privremeni problem sa Firefox Screenshots servisom."
  },
  "loginErrorDetails": {
    "message": "Nismo uspjeli sačuvati vaš snimak zbog toga što postoji problem s uslugama Firefox Screenshots. Molimo pokušajte kasnije."
  },
  "unshootablePageErrorTitle": {
    "message": "Ovu stranicu ne možemo snimiti."
  },
  "unshootablePageErrorDetails": {
    "message": "Ovo nije standardna web stranica stoga je ne možete snimiti."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ne možete snimiti Firefox Screenshots stranicu!"
  },
  "emptySelectionErrorTitle": {
    "message": "Vaš odabir je premalen"
  },
  "privateWindowErrorTitle": {
    "message": "Snimci ekrana su onemogućeni u načinu privatnog pretraživanja"
  },
  "privateWindowErrorDetails": {
    "message": "Žao nam je na neugodnosti. Radimo na ovoj mogućnosti za buduća izdanja."
  },
  "genericErrorTitle": {
    "message": "Uf! Firefox Screenshots se zbrkao."
  },
  "genericErrorDetails": {
    "message": "Nismo sigurni šta se upravo dogodilo. Možete li pokušati ponovo ili snimiti drukčiju stranicu?"
  },
  "tourBodyIntro": {
    "message": "Snimite, sačuvajte i dijelite snimke bez da napuštate Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Novi način da sačuvate"
  },
  "tourBodyPageAction": {
    "message": "Proširite meni radnji stranice u adresnoj traci svaki put kada želite snimiti ekran."
  },
  "tourHeaderClickAndDrag": {
    "message": "Uslikajte baš ono što želite"
  },
  "tourBodyClickAndDrag": {
    "message": "Kliknite i povucite ako želite snimiti samo dio stranice. Također možete označiti vaš odabir tako da preko njega stavite pokazivač miša."
  },
  "tourHeaderFullPage": {
    "message": "Uslikajte prozore ili cijele stranice"
  },
  "tourBodyFullPage": {
    "message": "Izaberite dugmad u gorenjem desnom uglu da uslikate vidljive dijelove prozora ili da uslikate cijelu stranicu."
  },
  "tourHeaderDownloadUpload": {
    "message": "Kao što volite"
  },
  "tourBodyDownloadUpload": {
    "message": "Sačuvajte vaš isječeni snimak na web radi lakšeg dijeljenja ili preuzimanja na vaš računar. Takođe možete kliknuti na dugme Moji snimci da pronađete sve vaše snimke."
  },
  "tourSkip": {
    "message": "PRESKOČI"
  },
  "tourNext": {
    "message": "Sljedeći slajd"
  },
  "tourPrevious": {
    "message": "Prethodni slajd"
  },
  "tourDone": {
    "message": "Gotovo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Koristeći Firefox Screenshots slažete se s našim $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Uslovi"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Obavještenje o privatnosti"
  },
  "libraryLabel": {
    "message": "Snimci ekrana"
  }
}PK
!<�
����&webextension/_locales/ca/messages.json{
  "addonDescription": {
    "message": "Feu captures de pantalla de pàgines web i deseu-les temporalment o per sempre."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Fes una captura de pantalla"
  },
  "myShotsLink": {
    "message": "Les meves captures"
  },
  "screenshotInstructions": {
    "message": "Arrossegueu o feu clic a la pàgina per seleccionar una regió. Premeu ESC per cancel·lar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Desa"
  },
  "saveScreenshotVisibleArea": {
    "message": "Captura la part visible"
  },
  "saveScreenshotFullPage": {
    "message": "Captura tota la pàgina"
  },
  "cancelScreenshot": {
    "message": "Cancel·la"
  },
  "downloadScreenshot": {
    "message": "Baixa"
  },
  "downloadOnlyNotice": {
    "message": "Actualment esteu en mode de només baixada."
  },
  "downloadOnlyDetails": {
    "message": "El Firefox Screenshots canvia automàticament al mode de només baixada en aquestes situacions:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "En una finestra de navegació privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "S'han desactivat les galetes de tercers."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "S'ha activat l'opció «No recordarà mai l'historial»."
  },
  "notificationLinkCopiedTitle": {
    "message": "S'ha copiat l'enllaç"
  },
  "notificationLinkCopiedDetails": {
    "message": "L'enllaç de la captura s'ha copiat al porta-retalls. Premeu $META_KEY$-V per enganxar-lo.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copia"
  },
  "notificationImageCopiedTitle": {
    "message": "S'ha copiat la captura"
  },
  "notificationImageCopiedDetails": {
    "message": "La captura s'ha copiat al porta-retalls. Premeu $META_KEY$-V per enganxar-la.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Aquesta imatge s'ha retallat a $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "No funciona."
  },
  "requestErrorDetails": {
    "message": "Malauradament, s'ha pogut desar la vostra captura. Torneu a provar més tard."
  },
  "connectionErrorTitle": {
    "message": "No s'ha pogut accedir a les vostres captures de pantalla."
  },
  "connectionErrorDetails": {
    "message": "Comproveu la connexió a Internet. Si podeu connectar-vos a Internet, podria ser un problema temporal del servei del Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "No s'ha pogut desar la vostra captura perquè hi ha un problema amb el servei del Firefox Screenshots. Torneu-ho a provar més tard."
  },
  "unshootablePageErrorTitle": {
    "message": "No es pot fer una captura de pantalla d'aquesta pàgina."
  },
  "unshootablePageErrorDetails": {
    "message": "No podeu fer una captura de pantalla perquè aquesta no és una pàgina web estàndard."
  },
  "selfScreenshotErrorTitle": {
    "message": "No podeu fer una captura de pantalla de la pàgina del Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "La selecció és massa petita"
  },
  "privateWindowErrorTitle": {
    "message": "Les captures de pantalla estan desactivades en el mode de navegació privada"
  },
  "privateWindowErrorDetails": {
    "message": "Perdoneu les molèsties. Estem treballant en aquesta característica per a versions futures."
  },
  "genericErrorTitle": {
    "message": "El Firefox Screenshots ha tingut un problema."
  },
  "genericErrorDetails": {
    "message": "S'ha produït un error inesperat. Torneu-ho a provar o captureu una altra pàgina."
  },
  "tourBodyIntro": {
    "message": "Feu, deseu i compartiu captures de pantalla sense sortir del Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Una forma nova de desar les captures"
  },
  "tourBodyPageAction": {
    "message": "Amplieu el menú d'accions de la pàgina de la barra d'adreces quan vulgueu fer una captura de pantalla."
  },
  "tourHeaderClickAndDrag": {
    "message": "Captureu tot allò que vulgueu"
  },
  "tourBodyClickAndDrag": {
    "message": "Feu clic i arrossegueu per capturar només una part de la pàgina. També podeu moure el ratolí per sobre per ressaltar la vostra selecció."
  },
  "tourHeaderFullPage": {
    "message": "Captureu la finestra o la pàgina sencera"
  },
  "tourBodyFullPage": {
    "message": "Seleccioneu amb els botons de la part superior dreta si voleu capturar l'àrea visible de la finestra o la pàgina sencera."
  },
  "tourHeaderDownloadUpload": {
    "message": "Com vulgueu"
  },
  "tourBodyDownloadUpload": {
    "message": "Deseu les vostres captures al web per compartir-les fàcilment o baixeu-les a l'ordinador. També podeu fer clic al botó «Les meves captures» per veure totes les captures que heu fet."
  },
  "tourSkip": {
    "message": "OMET"
  },
  "tourNext": {
    "message": "Diapositiva següent"
  },
  "tourPrevious": {
    "message": "Diapositiva anterior"
  },
  "tourDone": {
    "message": "Fet"
  },
  "termsAndPrivacyNotice2": {
    "message": "Si utilitzeu el Firefox Screenshots, esteu acceptant les nostres $TERMSANDPRIVACYNOTICETERMSLINK$ i l'$TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "condicions d'ús"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "avís de privadesa"
  },
  "libraryLabel": {
    "message": "Captures de pantalla"
  }
}PK
!<}��ˋ�'webextension/_locales/cak/messages.json{
  "addonDescription": {
    "message": "Ke'achapa' silowachib'al chuqa' chapoj wachib'äl pan Ajk'amaya'l richin ye'ayäk."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Tichap jun Chapoj Wachib'äl"
  },
  "myShotsLink": {
    "message": "Taq Nuwachib'al"
  },
  "screenshotInstructions": {
    "message": "Taqirirej o tapitz'a' ri ruxaq richin nacha' ri k'ojlem. Tapitz'a' ESC richin niq'at."
  },
  "saveScreenshotSelectedArea": {
    "message": "Tiyak"
  },
  "saveScreenshotVisibleArea": {
    "message": "Tiyak wachel"
  },
  "saveScreenshotFullPage": {
    "message": "Tiyak chijun ruxaq"
  },
  "cancelScreenshot": {
    "message": "Tiq'at"
  },
  "downloadScreenshot": {
    "message": "Tiqasäx"
  },
  "downloadOnlyNotice": {
    "message": "Wakami k'o pa rub'eyal Xa Xe Qasanïk."
  },
  "downloadOnlyDetails": {
    "message": "Ri Firefox Chapoj Wachaj pa ruyonil nuk'ëx pa rub'anikil Xa Xe Qasanïk pa ri taq k'ulwachitajinem re':"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Pa jun rutzuwäch Ichin Okem pa K'amaya'l."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "E chupül ri taq kikaxlanwey aj rox winäq."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Majub'ey tinatäx natab'äl” tzijon."
  },
  "downloadOnlyDetailsESR": {
    "message": "Tajin nawokisaj ri Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "E chupül ri kisamajib'exik taq yakb'äl."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ximonel Wachib'en"
  },
  "notificationLinkCopiedDetails": {
    "message": "Xwachib'ëx pa molwuj ri ruximonel awachib'al. Tapitz'a' $META_KEY$-V richin natz'äm.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Tiwachib'ëx"
  },
  "notificationImageCopiedTitle": {
    "message": "Xwachib'ëx chapoj"
  },
  "notificationImageCopiedDetails": {
    "message": "Xwachib'ëx pa molwuj ri ruchapoj awachib'al. Tapitz'a' $META_KEY$-V richin natz'äm.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Re wachib'äl re' xqupïx pa $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Man nisamäj ta."
  },
  "requestErrorDetails": {
    "message": "¡Takuyu! Man yojtikïr ta niqayäk ri awachib'al. Tatojtob'ej jumej."
  },
  "connectionErrorTitle": {
    "message": "Man yojtikïr ta yojok pari taq chapoj awachib'al."
  },
  "connectionErrorDetails": {
    "message": "Tanik'oj awokem pa K'amaya'l. We yatok pa K'amaya'l, rik'in jub'a' xtuya' k'ayewal pa rusamaj ri Firefox taq Chapoj Wachib'äl."
  },
  "loginErrorDetails": {
    "message": "Man xkatikïr ta xtayäk ri awachib'al ruma jun ruk'ayewal toq nisamäj ri Firefox Chapoj Wachib'äl. Tatojtob'ej chik pa jun mej."
  },
  "unshootablePageErrorTitle": {
    "message": "Man yojtikïr ta nichap ruwachib'al re ruxaq re'."
  },
  "unshootablePageErrorDetails": {
    "message": "Re re' man pa rub'eyal ta chi ruxaq Ajk'amaya'l, ruma ri' man yojtikïr ta niqachäp ruwachib'al."
  },
  "selfScreenshotErrorTitle": {
    "message": "¡Man yatikïr ta nawelesaj ruwachib'al jun ruxaq Firefox Chapoj Wachib'äl!"
  },
  "emptySelectionErrorTitle": {
    "message": "Yalan ko'öl ri acha'oj"
  },
  "privateWindowErrorTitle": {
    "message": "Echupun ri Chapoj taq Wachib'äl pa Ichinan Okem pa K'amaya'l"
  },
  "privateWindowErrorDetails": {
    "message": "Takuyu' chi qe ruma ri k'ayewal. Tajin niqasamajij re rub'anikil re' richin ri ch'aqa' chik taq ruwäch."
  },
  "genericErrorTitle": {
    "message": "¡Itz! Itzel xe'el ri Firefox Chapoj Wachib'äl."
  },
  "genericErrorDetails": {
    "message": "Man öj jikïl chi rij ri xk'ulwachitäj. ¿La nawajo' natojtob'ej chik o nachäp ruwachib'al jun chik ruxaq?"
  },
  "tourBodyIntro": {
    "message": "Ke'achapa', ke'ayaka', chuqa' ke'akomonij chapoj taq wachib'äl rik'in man yatel ta el pa Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Jun k'ak'a' rub'anikil richin niyak"
  },
  "tourBodyPageAction": {
    "message": "Tarik'a' ri ruk'utsamaj kisamaj taq ruxaq pa kik'ajtz'ik ochochib'äl xab'achike ramaj toq nawajo' nawelesaj jun chapoj wachib'äl."
  },
  "tourHeaderClickAndDrag": {
    "message": "Tachapa' ri Nawajo'"
  },
  "tourBodyClickAndDrag": {
    "message": "Tapitz'a' chuqa' taqirirej richin nacha' xa jun peraj ruxaq. Chuqa' yatikïr yaq'axaj richin nipe retal ri acha'oj."
  },
  "tourHeaderFullPage": {
    "message": "Chapoj Tzuwäch o Tz'aqät taq Ruxaq"
  },
  "tourBodyFullPage": {
    "message": "Ke'acha' ri ikim ajkiq'a' taq pitz'b'äl richin nachäp ri tz'etel ruk'ojlem tzuwäch o richin nachäp jun tz'aqät ruxaq."
  },
  "tourHeaderDownloadUpload": {
    "message": "Achi'el Niqa Chawäch"
  },
  "tourBodyDownloadUpload": {
    "message": "Ke'ayaka' ri qupin taq awachib'al pa ajk'amaya'l richin man k'ayew ta ye'akomonij o ye'aqasaj pan akematz'ib'. Chuqa' yatikïr napïtz ri Taq Nuwachib'al richin ye'awïl konojel ri taq wachib'al e'elesan."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Jun chik Q'axewäch"
  },
  "tourPrevious": {
    "message": "Jun kan Q'axewäch"
  },
  "tourDone": {
    "message": "Xb'an"
  },
  "termsAndPrivacyNotice2": {
    "message": "Rik'in rokisaxik ri Firefox Chapoj Wachib'äl, nawoqaj $TERMSANDPRIVACYNOTICETERMSLINK$ chuqa' $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Taq ojqanem"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Rutzijol Ichinanem"
  },
  "libraryLabel": {
    "message": "Chapoj taq wachib'äl"
  }
}PK
!<��LL&webextension/_locales/cs/messages.json{
  "addonDescription": {
    "message": "Pořizujte snímky webových stránek a ukládejte je dočasně nebo natrvalo."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Pořídit snímek stránky"
  },
  "myShotsLink": {
    "message": "Mé snímky"
  },
  "screenshotInstructions": {
    "message": "Oblast vyberete kliknutím nebo tahem myší. Pro zrušení stiskněte ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Uložit"
  },
  "saveScreenshotVisibleArea": {
    "message": "Uložit viditelnou oblast"
  },
  "saveScreenshotFullPage": {
    "message": "Uložit celou stránku"
  },
  "cancelScreenshot": {
    "message": "Zrušit"
  },
  "downloadScreenshot": {
    "message": "Stáhnout"
  },
  "downloadOnlyNotice": {
    "message": "Nyní jste v režimu pouze ke stažení."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots se automaticky přepne do režimu pouze ke stažení, pokud:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Jste v okně anonymního prohlížení."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Máte zakázané cookies třetích stran."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Máte zcela zakázané ukládání historie."
  },
  "downloadOnlyDetailsESR": {
    "message": "Používáte Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Nahrávání bylo zakázáno."
  },
  "notificationLinkCopiedTitle": {
    "message": "Odkaz zkopírován"
  },
  "notificationLinkCopiedDetails": {
    "message": "Odkaz na váš snímek byl zkopírován do schránky. Pro vložení stiskněte $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopírovat"
  },
  "notificationImageCopiedTitle": {
    "message": "Snímek zkopírován"
  },
  "notificationImageCopiedDetails": {
    "message": "Váš snímek byl zkopírován do schránky. Pro vložení stiskněte $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tento obrázek byl oříznutý na $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Mimo provoz."
  },
  "requestErrorDetails": {
    "message": "Je nám líto, ale nemohli jsme vás snímek uložit. Zkuste to prosím znovu později."
  },
  "connectionErrorTitle": {
    "message": "Nedaří se nám připojit k vašim snímkům."
  },
  "connectionErrorDetails": {
    "message": "Zkontrolujte prosím připojení k internetu. Pokud vám připojení funguje, mohlo dojít k dočasnému problému s naší službou Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nemohli jsme uložit váš snímek, protože došlo k problému se službou Firefox Screenshots. Zkuste to prosím znovu později."
  },
  "unshootablePageErrorTitle": {
    "message": "Snímek této stránky nelze pořídit."
  },
  "unshootablePageErrorDetails": {
    "message": "Toto není běžná webová stránka, a proto z ní nelze pořizovat žádné snímky."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nelze pořizovat snímek stránky Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Vybraná oblast je moc malá"
  },
  "privateWindowErrorTitle": {
    "message": "Služba Firefox Screenshots je v anonymním prohlížení vypnutá"
  },
  "privateWindowErrorDetails": {
    "message": "Omlouváme se za nepříjemnosti. Na této funkci pracujeme pro některé příští vydání."
  },
  "genericErrorTitle": {
    "message": "Jejda! Služba Firefox Screenshots přestala pracovat."
  },
  "genericErrorDetails": {
    "message": "Nejsme si jistí, co se právě stalo. Chcete to zkusit znovu, nebo zkusíte pořídit snímek na jiné stránce?"
  },
  "tourBodyIntro": {
    "message": "Pořizujte, ukládejte a sdílejte snímky webových stránek bez opuštění Firefoxu."
  },
  "tourHeaderPageAction": {
    "message": "Nový způsob ukládání"
  },
  "tourBodyPageAction": {
    "message": "Kdykoliv chcete pořídit snímek, otevřete nabídku akcí stránky v adresním řádku."
  },
  "tourHeaderClickAndDrag": {
    "message": "Zachyťte cokoliv chcete"
  },
  "tourBodyClickAndDrag": {
    "message": "Stiskem tlačítka myši a tahem můžete vybrat oblast stránky. Výběr můžete provést také najetím myši na prvek stránky."
  },
  "tourHeaderFullPage": {
    "message": "Pořizujte snímky jen částí nebo i celých stránek"
  },
  "tourBodyFullPage": {
    "message": "Pomocí tlačítek vpravo nahoře můžete pořídit snímek jen viditelné části nebo úplně celé stránky."
  },
  "tourHeaderDownloadUpload": {
    "message": "Jak sami chcete"
  },
  "tourBodyDownloadUpload": {
    "message": "Uložte si oříznutý snímek stránky na web pro rychlejší sdílení, nebo si ho stáhněte do počítače. Pro zobrazení všech snímků stačí klepnout na tlačítko Mé snímky."
  },
  "tourSkip": {
    "message": "Přeskočit"
  },
  "tourNext": {
    "message": "Další snímek"
  },
  "tourPrevious": {
    "message": "Předchozí snímek"
  },
  "tourDone": {
    "message": "Hotovo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Používáním služby Firefox Screenshots souhlasíte s našimi $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "podmínkami"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "zásadami ochrany osobních údajů"
  },
  "libraryLabel": {
    "message": "Snímky stránek"
  }
}PK
!<�D�iii&webextension/_locales/cy/messages.json{
  "addonDescription": {
    "message": "Cymrwch clipiau a lluniau sgrin o'r We a'u cadw dros dro neu'n barhaol."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Cymryd Llun Sgrin Screenshot"
  },
  "myShotsLink": {
    "message": "Fy Lluniau Sgrin"
  },
  "screenshotInstructions": {
    "message": "Llusgwch neu glicio ar y dudalen i ddewis adran. Pwyso ESC i ddiddymu."
  },
  "saveScreenshotSelectedArea": {
    "message": "Cadw"
  },
  "saveScreenshotVisibleArea": {
    "message": "Cadw'r gweladwy"
  },
  "saveScreenshotFullPage": {
    "message": "Cadw tudalen lawn"
  },
  "cancelScreenshot": {
    "message": "Diddymu"
  },
  "downloadScreenshot": {
    "message": "Llwytho i Lawr"
  },
  "downloadOnlyNotice": {
    "message": "Rydych yn y modd Llwytho i Lawr yn Unig."
  },
  "downloadOnlyDetails": {
    "message": "Mae Firefox Screenshots yn newid yn awtomatig i'r modd Llwytho i Lawr y Unig yn y sefyllfaoedd hyn:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Mewn ffenestr Pori Prefat."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Mae cwcis trydydd parti wedi eu hanalluogi."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Mae “Peidio cofio hanes” wedi ei alluogi."
  },
  "downloadOnlyDetailsESR": {
    "message": "Rydych yn defnyddio Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Mae llwytho i fyny wedi ei atal."
  },
  "notificationLinkCopiedTitle": {
    "message": "Dolen wedi ei Chadw"
  },
  "notificationLinkCopiedDetails": {
    "message": "Mae'r ddolen i'ch llun wedi ei gopïo i'r clipfwrdd. Pwyswch $META_KEY$-V i'w ludo.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copïo"
  },
  "notificationImageCopiedTitle": {
    "message": "Copïwyd y Llun"
  },
  "notificationImageCopiedDetails": {
    "message": "Mae eich llun wedi ei gopïo i'r clipfwrdd. Pwyswch $META_KEY$-V i'w ludo.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Mae'r ddelwedd wedi ei thocio i $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ddim yn gweithio."
  },
  "requestErrorDetails": {
    "message": "Ymddiheuriadau! Nid oedd modd cadw eich llun. Ceisiwch eto'n hwyrach."
  },
  "connectionErrorTitle": {
    "message": "Nid oes modd i ni gysylltu a'ch lluniau sgrin."
  },
  "connectionErrorDetails": {
    "message": "Gwiriwch eich cysylltiad Rhyngrwyd. Os ydych yn gallu cysylltu â'r Rhyngrwyd, efallai bod anhawster dros dro gyda gwasanaeth lluniau sgrin, Firefox Screnshots."
  },
  "loginErrorDetails": {
    "message": "Nid oedd modd i ni gadw eich llun gan fod yna anhawster gyda gwasanaeth Firefox Screenshots. Ceisiwch eto'n hwyrach."
  },
  "unshootablePageErrorTitle": {
    "message": "Nid oes modd tynnu llun sgrin o'r dudalen."
  },
  "unshootablePageErrorDetails": {
    "message": "Nid yw hwn yn dudalen Gwe safonol, felly does dim modd tynnu llun sgrin ohono."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nid oes modd cymryd llun o dudalen lluniau sgrin Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Mae eich dewis yn rhy fach"
  },
  "privateWindowErrorTitle": {
    "message": "Mae Screenshot wedi ei analluogi yn y Modd Pori Preifat"
  },
  "privateWindowErrorDetails": {
    "message": "Ymddiheuriadau am yr anhwylustod. Rydym yn gweithio ar y nodwedd hwn ar gyfer fersiynau'r dyfodol."
  },
  "genericErrorTitle": {
    "message": "Www! Mae Firefox Screenshots wedi mynd yn hurt."
  },
  "genericErrorDetails": {
    "message": "Nid ydym yn gwybod beth sydd wedi ddigwydd. Ceisiwch eto neu dynnu llun o dudalen wahanol?"
  },
  "tourBodyIntro": {
    "message": "Cymryd, cadw a rhannu lluniau sgrin heb adael Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ffordd newydd i gadw"
  },
  "tourBodyPageAction": {
    "message": "Ehangwch y ddewislen gweithredoedd tudalen yn y bar cyfeiriad unrhyw bryd fyddwch am gymryd llun sgrin."
  },
  "tourHeaderClickAndDrag": {
    "message": "Cipio Dim ond Beth Rydych ei Angen"
  },
  "tourBodyClickAndDrag": {
    "message": "Cliciwch a llusgo i gipio rhan o dudalen. Gallwch hofran i amlygu eich dewis."
  },
  "tourHeaderFullPage": {
    "message": "Cipio Ffenestri neu Dudalennau Cyfan"
  },
  "tourBodyFullPage": {
    "message": "Dewiswch y botymau ar y dde uchod i gipio ardal gweladwy mewn ffenestr neu i gipio tudalen gyfan."
  },
  "tourHeaderDownloadUpload": {
    "message": "Yn Ôl eich Dewis"
  },
  "tourBodyDownloadUpload": {
    "message": "Cadwch eich lluniau wedi eu golygu i'r We ar gyfer rhannu haws, neu eu llwytho i lawr i'ch cyfrifiadur. Gallwch hefyd glicio ar Fy Lluniau i weld pob llun sydd gennych."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Sleid Nesaf"
  },
  "tourPrevious": {
    "message": "Sleid Flaenorol"
  },
  "tourDone": {
    "message": "Gorffen"
  },
  "termsAndPrivacyNotice2": {
    "message": "Drwy ddefnyddio Firefox Screenshots, rydych yn cytuno i'n $TERMSANDPRIVACYNOTICETERMSLINK$ a'n $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Telerau"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Hysbysiad Preifatrwydd"
  },
  "libraryLabel": {
    "message": "Rhannu ar Pinterest"
  }
}PK
!<c�o�&webextension/_locales/da/messages.json{
  "addonDescription": {
    "message": "Tag udklip og skærmbilleder fra nettet og gem dem midlertidigt eller permanent."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Tag et skærmbillede"
  },
  "myShotsLink": {
    "message": "Mine skærmbilleder"
  },
  "screenshotInstructions": {
    "message": "Træk eller klik på siden for at vælge et område. Tryk på ESC for at fortryde."
  },
  "saveScreenshotSelectedArea": {
    "message": "Gem"
  },
  "saveScreenshotVisibleArea": {
    "message": "Gem synligt område"
  },
  "saveScreenshotFullPage": {
    "message": "Gem hele siden"
  },
  "cancelScreenshot": {
    "message": "Fortryd"
  },
  "downloadScreenshot": {
    "message": "Hent"
  },
  "downloadOnlyNotice": {
    "message": "Du kan i øjeblikket kun hente skærmbilleder."
  },
  "downloadOnlyDetails": {
    "message": "I følgende situationer lader Firefox Screenshots dig kun hente skærmbilleder:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "I et privat browsing-vindue."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Når tredjeparts cookies er deaktiveret."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Når Firefox-indstillingen “Aldrig gemme historik” er valgt."
  },
  "downloadOnlyDetailsESR": {
    "message": "Du bruger Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Uploads er blevet deaktiveret."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link kopieret"
  },
  "notificationLinkCopiedDetails": {
    "message": "Linket til dit skærmbillede er blevet gemt i udklipsholderen. Tryk på $META_KEY$-V for at sætte ind. ",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopier"
  },
  "notificationImageCopiedTitle": {
    "message": "Skærmbillede kopieret"
  },
  "notificationImageCopiedDetails": {
    "message": "Dit skærmbillede er blevet kopieret til udklipsholderen. Tryk $META_KEY$-V for at indsætte.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Billedet er blevet beskåret til $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ude af funktion"
  },
  "requestErrorDetails": {
    "message": "Vi kunne desværre ikke gemme dit skærmbillede. Prøv igen senere."
  },
  "connectionErrorTitle": {
    "message": "Vi kan ikke oprette forbindelse til dine skærmbilleder."
  },
  "connectionErrorDetails": {
    "message": "Kontroller din internet-forbindelse. Hvis du ikke kan oprette forbindelse til internettet, kan der være et midlertidigt teknisk problem med Firefox Screenshots. "
  },
  "loginErrorDetails": {
    "message": "Vi kunne ikke gemme dit skærmbillede, fordi der er et teknisk problem med Firefox Screenshots. Prøv igen senere. "
  },
  "unshootablePageErrorTitle": {
    "message": "Vi kan ikke tage et skærmbillede af denne side. "
  },
  "unshootablePageErrorDetails": {
    "message": "Dette er ikke en almindelig webside, så du kan ikke tage skærmbilleder af den. "
  },
  "selfScreenshotErrorTitle": {
    "message": "Du kan ikke tage skærmbilleder af en side i Firefox Screenshots."
  },
  "emptySelectionErrorTitle": {
    "message": "Din markering er for lille"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots er deaktiveret i privat browsing-tilstand"
  },
  "privateWindowErrorDetails": {
    "message": "Vi beklager ulejligheden. Vi arbejder på at få funktionen til at virke i fremtidige udgivelser."
  },
  "genericErrorTitle": {
    "message": "Hov! Noget gik helt galt med Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "Vi er ikke sikre på, hvad der lige skete. Vil du prøve igen - eller vil du tage et skærmbillede af en anden side?"
  },
  "tourBodyIntro": {
    "message": "Tag, gem og del skærmbilleder uden at forlade Firefox. "
  },
  "tourHeaderPageAction": {
    "message": "En ny måde at gemme på"
  },
  "tourBodyPageAction": {
    "message": "Klik på Sidehandlinger i adressefeltet, når du vil tage et skærmbillede."
  },
  "tourHeaderClickAndDrag": {
    "message": "Gem lige hvad du vil."
  },
  "tourBodyClickAndDrag": {
    "message": "Klik og træk for at tage et udklip af en del af en side. Du kan også holde markøren over for at fremhæve din markering."
  },
  "tourHeaderFullPage": {
    "message": "Tag skærmbilleder af vinduer eller hele sider."
  },
  "tourBodyFullPage": {
    "message": "Brug knapperne øverst til højre for at tage et skærmbillede af det synlige område i vinduet eller for at tage et skærmbillede af hele siden."
  },
  "tourHeaderDownloadUpload": {
    "message": "Som du vil have det."
  },
  "tourBodyDownloadUpload": {
    "message": "Gem dine beskårne skærmbilleder på nettet for nemmere at dele dem - eller hent dem ned på din computer. Du kan også klikke på knappen \"Mine skærmbilleder\" for at finde de skærmbilleder, du har taget."
  },
  "tourSkip": {
    "message": "SPRING OVER"
  },
  "tourNext": {
    "message": "Næste side"
  },
  "tourPrevious": {
    "message": "Forrige side"
  },
  "tourDone": {
    "message": "Færdig"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ved at anvende Firefox Screenshots godkender du vores $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "vilkår"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "privatlivspolitik"
  },
  "libraryLabel": {
    "message": "Skærmbilleder"
  }
}PK
!<i�&webextension/_locales/de/messages.json{
  "addonDescription": {
    "message": "Erstellen Sie Bildschirmfotos von vollständigen Webseiten oder Ausschnitten und speichern Sie diese temporär oder dauerhaft."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Bildschirmfoto aufnehmen"
  },
  "myShotsLink": {
    "message": "Meine Bildschirmfotos"
  },
  "screenshotInstructions": {
    "message": "Ziehen oder klicken Sie auf der Seite, um einen Bereich auszuwählen. Drücken Sie ESC zum Abbrechen."
  },
  "saveScreenshotSelectedArea": {
    "message": "Speichern"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sichtbaren Bereich speichern"
  },
  "saveScreenshotFullPage": {
    "message": "Gesamte Seite speichern"
  },
  "cancelScreenshot": {
    "message": "Abbrechen"
  },
  "downloadScreenshot": {
    "message": "Herunterladen"
  },
  "downloadOnlyNotice": {
    "message": "Sie sind aktuell im Modus „Nur herunterladen“."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots schaltet in diesen Fällen automatisch in den Modus „Nur herunterladen“:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "In einem privaten Fenster."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies von Drittanbietern sind deaktiviert."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "„Chronik niemals anlegen“ ist aktiviert."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link kopiert"
  },
  "notificationLinkCopiedDetails": {
    "message": "Der Link zu Ihrem Bildschirmfoto wurde in die Zwischenablage kopiert. Drücken Sie $META_KEY$-V zum Einfügen.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopieren"
  },
  "notificationImageCopiedTitle": {
    "message": "Bildschirmfoto kopiert"
  },
  "notificationImageCopiedDetails": {
    "message": "Ihr Bildschirmfoto wurde in die Zwischenablage kopiert. Drücken Sie Strg-V zum Einfügen.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Diese Grafik wurde auf $PIXELS$ px zugeschnitten.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Außer Betrieb."
  },
  "requestErrorDetails": {
    "message": "Wir konnten Ihr Bildschirmfoto leider nicht speichern. Bitte versuchen Sie es später erneut."
  },
  "connectionErrorTitle": {
    "message": "Es war keine Verbindung zu Ihren Bildschirmfotos möglich."
  },
  "connectionErrorDetails": {
    "message": "Bitte überprüfen Sie Ihre Internetverbindung. Wenn diese funktioniert, gibt es eventuell ein temporäres Problem mit dem Dienst von Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Ihr Bildschirmfoto konnte nicht gespeichert werden, weil ein Problem mit dem Dienst Firefox Screenshots aufgetreten ist. Bitte versuchen Sie es später erneut."
  },
  "unshootablePageErrorTitle": {
    "message": "Ein Bildschirmfoto dieser Seite ist nicht möglich."
  },
  "unshootablePageErrorDetails": {
    "message": "Dies ist keine Standard-Webseite, deshalb sind keine Bildschirmfotos von ihr möglich."
  },
  "selfScreenshotErrorTitle": {
    "message": "Sie können kein Bildschirmfoto einer Firefox-Screenshots-Seite machen!"
  },
  "emptySelectionErrorTitle": {
    "message": "Ihr Auswahlbereich ist zu klein"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots ist im Privaten Modus deaktiviert"
  },
  "privateWindowErrorDetails": {
    "message": "Wir bitten um Entschuldigung für diese Unannehmlichkeiten. Wir arbeiten daran, diese Funktion in zukünftigen Versionen zur Verfügung zu stellen."
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshots funktioniert nicht richtig."
  },
  "genericErrorDetails": {
    "message": "Wir wissen auch nicht, was gerade passiert ist. Könnten Sie das Bildschirmfoto erneut oder auf einer anderen Seite aufnehmen?"
  },
  "tourBodyIntro": {
    "message": "Bildschirmfotos aufnehmen, speichern und teilen, ohne Firefox zu verlassen."
  },
  "tourHeaderPageAction": {
    "message": "Neue Speichermöglichkeit"
  },
  "tourBodyPageAction": {
    "message": "Erweitern Sie das Menü „Aktionen für Seite“ in der Adressleiste immer dann, wenn Sie ein Bildschirmfoto machen möchten."
  },
  "tourHeaderClickAndDrag": {
    "message": "Nehmen Sie auf, was Sie möchten"
  },
  "tourBodyClickAndDrag": {
    "message": "Klicken und ziehen Sie, um nur einen Teil einer Seite aufzunehmen. Sie können den Mauszeiger auch darüber bewegen, um Ihre Auswahl hervorzuheben."
  },
  "tourHeaderFullPage": {
    "message": "Fenster oder ganze Seiten speichern"
  },
  "tourBodyFullPage": {
    "message": "Nutzen Sie die Schaltflächen rechts oben, um den sichtbaren Bereich im Fenster oder eine ganze Seite zu speichern."
  },
  "tourHeaderDownloadUpload": {
    "message": "Wie Sie möchten"
  },
  "tourBodyDownloadUpload": {
    "message": "Speichern Sie Ihre zugeschnittenen Bildschirmfotos im Internet, sodass sie leicht zu teilen sind, oder laden Sie sie auf Ihren Computer herunter. Sie können auch auf die Schaltfläche „Meine Bildschirmfotos“ klicken, um alle Ihre Bildschirmfotos zu finden."
  },
  "tourSkip": {
    "message": "Überspringen"
  },
  "tourNext": {
    "message": "Nächste Folie"
  },
  "tourPrevious": {
    "message": "Vorherige Folie"
  },
  "tourDone": {
    "message": "Fertig"
  },
  "termsAndPrivacyNotice2": {
    "message": "Durch die Verwendung von Firefox Screenshots stimmen Sie unseren $TERMSANDPRIVACYNOTICETERMSLINK$ und $TERMSANDPRIVACYNOTICEPRIVACYLINK$ zu.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Nutzungsbedingungen"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Datenschutzhinweis"
  },
  "libraryLabel": {
    "message": "Bildschirmfotos"
  }
}PK
!<f\�`��'webextension/_locales/dsb/messages.json{
  "addonDescription": {
    "message": "Wzejśo klipy a fota wobrazowki z weba a składujśo je nachylu abo na pśecej."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Foto wobrazowki gótowaś"
  },
  "myShotsLink": {
    "message": "Móje fota wobrazowki"
  },
  "screenshotInstructions": {
    "message": "Śěgniśo abo klikniśo na bok, aby wobcerk wubrał. Tłocćo na ESC, aby pśetergnuł."
  },
  "saveScreenshotSelectedArea": {
    "message": "Składowaś"
  },
  "saveScreenshotVisibleArea": {
    "message": "Widobny wobcerk składowaś"
  },
  "saveScreenshotFullPage": {
    "message": "Ceły bok składowaś"
  },
  "cancelScreenshot": {
    "message": "Pśetergnuś"
  },
  "downloadScreenshot": {
    "message": "Ześěgnuś"
  },
  "downloadOnlyNotice": {
    "message": "Tuchylu sćo w modusu „Jano ześěgnuś“."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots w slědujucych situacijach awtomatiski do modusa „Jano ześěgnuś“ pśešaltujo:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "W priwatnem woknje."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookieje tśeśich póbitowarjow su znjemóžnjone."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "„Se historiju nigda njespomnjeś“ jo zmóžnjone."
  },
  "downloadOnlyDetailsESR": {
    "message": "Wužywaśo Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Nagraśa su znjemóžnjone."
  },
  "notificationLinkCopiedTitle": {
    "message": "Wótkaz kopěrowany"
  },
  "notificationLinkCopiedDetails": {
    "message": "Wótkaz k wašomu fotoju wobrazowki jo se do mjazywótkłada kopěrował. Tłocćo $META_KEY$-V, aby jen zasajźił.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopěrowaś"
  },
  "notificationImageCopiedTitle": {
    "message": "Foto kopěrowane"
  },
  "notificationImageCopiedDetails": {
    "message": "Wašo foto jo se do mjezywótkłada kopěrowało. Tłocćo $META_KEY$-V, aby jo zasajźił.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Toś ten wobraz jo se na $PIXELS$px pśirězał.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Njeźěła."
  },
  "requestErrorDetails": {
    "message": "Bóžko njejsmy mógli wašo foto wobrazowki składowaś. Pšosym wopytajśo pózdźej hyšći raz."
  },
  "connectionErrorTitle": {
    "message": "Njamóžomy z wašymi fotami wobrazowki zwězaś."
  },
  "connectionErrorDetails": {
    "message": "Pšosym pśekontrolěrujśo swój internetny zwisk. Jolic móžośo z internetom zwězaś, dajo snaź nachylny problem ze słužbu Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Njesjmy mógli swójo foto wobrazowki składowaś, dokulaž dajo problem ze słužbu Firefox Screenshots. Pšosym wopytajśo pózdźej hyšći raz."
  },
  "unshootablePageErrorTitle": {
    "message": "Foto wobrazowki toś togo boka njejo móžne."
  },
  "unshootablePageErrorDetails": {
    "message": "To njejo standardny webbok, togodla foto wobrazowki wót njeje njejo móžne."
  },
  "selfScreenshotErrorTitle": {
    "message": "Njamóžośo wobrazowku boka Firefox Screenshots fotografěrowaś!"
  },
  "emptySelectionErrorTitle": {
    "message": "Waš wuběrk jo pśemały"
  },
  "privateWindowErrorTitle": {
    "message": "Firefox Screenshots jo w priwatnem modusu znjemóžnjony"
  },
  "privateWindowErrorDetails": {
    "message": "Wódajśo pšosym wobuznosći. Źěłamy na toś tej funkciji za pśichodne wersije."
  },
  "genericErrorTitle": {
    "message": "Hopla! Firefox Screenshots njeźěła."
  },
  "genericErrorDetails": {
    "message": "Njejsmy se wěste, což jo se stało. Cośo hyšći raz wopytaś abo cośo drugi bok fotografěrowaś?"
  },
  "tourBodyIntro": {
    "message": "Gótujśo, składujśo a źělśo fota wobrazowki mimo až Firefox spušćaśo."
  },
  "tourHeaderPageAction": {
    "message": "Nowa wašnja składowanja"
  },
  "tourBodyPageAction": {
    "message": "Wócyńśo meni akcijow boka w adresowem pólu kuždy raz, gaž cośo foto worazowki gótowaś."
  },
  "tourHeaderClickAndDrag": {
    "message": "Fotografěrujśo jadnorje, což cośo"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikniśo a ześěgniśo, aby źěl boka fotografěrował. Móžośo teke špěrku myški nad nim gibaś, aby swój wuběr wuzwignuł."
  },
  "tourHeaderFullPage": {
    "message": "Wokna abo cełe boki składowaś"
  },
  "tourBodyFullPage": {
    "message": "Wubjeŕśo tłocašk górjejce napšawo, aby widobny wobcerk we woknje abo ceły bok fotografěrowaś."
  },
  "tourHeaderDownloadUpload": {
    "message": "Tak, kaž se wam spódoba"
  },
  "tourBodyDownloadUpload": {
    "message": "Składujśo swóje pśirězane fota wobrazowki w interneśe, aby je lažcej źělił, abo ześěgniśo je na swójo licadło. Móžośo teke na tłocašk „Móje fota wobrazowki“ kliknuś, abye wšě fota wobrazowki namakał, kótarež sćo gótował."
  },
  "tourSkip": {
    "message": "Pśeskócyś"
  },
  "tourNext": {
    "message": "Pśiduce foto"
  },
  "tourPrevious": {
    "message": "Pjerwjejšne foto"
  },
  "tourDone": {
    "message": "Gótowo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Pśez wužywanje Firefox ScreenShots, zwolijośo do našych $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Screenshots.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Wuměnjenja"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Powěźeńka priwatnosći"
  },
  "libraryLabel": {
    "message": "Fota wobrazowki"
  }
}PK
!<�x����&webextension/_locales/el/messages.json{
  "addonDescription": {
    "message": "Πραγματοποιήστε λήψη στιγμιοτύπων από το Διαδίκτυο και αποθηκεύστε τα προσωρινά ή μόνιμα."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Λήψη στιγμιότυπου"
  },
  "myShotsLink": {
    "message": "Οι λήψεις μου"
  },
  "screenshotInstructions": {
    "message": "Σύρετε ή κάντε κλικ στη σελίδα για να επιλέξετε μια περιοχή. Για ακύρωση πιέστε το πλήκτρο ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Αποθήκευση"
  },
  "saveScreenshotVisibleArea": {
    "message": "Αποθήκευση ορατής περιοχής"
  },
  "saveScreenshotFullPage": {
    "message": "Αποθήκευση ολόκληρης σελίδας"
  },
  "cancelScreenshot": {
    "message": "Ακύρωση"
  },
  "downloadScreenshot": {
    "message": "Λήψη"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Τα cookies τρίτων είναι απενεργοποιημένα."
  },
  "downloadOnlyDetailsESR": {
    "message": "Χρησιμοποιείτε το Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Οι μεταφορτώσεις έχουν απενεργοποιηθεί."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ο σύνδεσμος αντιγράφηκε"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ο σύνδεσμος προς την λήψη σας αντιγράφηκε στο πρόχειρο. Πατήστε $META_KEY$-V για επικόλληση.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Αντιγραφή"
  },
  "notificationImageCopiedTitle": {
    "message": "Το στιγμιότυπο αντιγράφηκε"
  },
  "imageCroppedWarning": {
    "message": "Αυτή η εικόνα έχει περικοπεί σε $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Εκτός λειτουργίας."
  },
  "requestErrorDetails": {
    "message": "Συγνώμη! Δεν μπορέσαμε να αποθηκεύουμε την λήψη σας. Προσπαθήστε ξανά αργότερα."
  },
  "connectionErrorTitle": {
    "message": "Δεν μπορούμε να συνδεθούμε στις λήψεις σας."
  },
  "connectionErrorDetails": {
    "message": "Ελέγξτε τη σύνδεσή σας στο Internet. Εάν είστε σε θέση να συνδεθείτε στο Internet, ίσως υπάρχει ένα προσωρινό πρόβλημα με την υπηρεσία Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Δεν μπορέσαμε να αποθηκεύσουμε την λήψη σας γιατί υπάρχει κάποιο πρόβλημα με την υπηρεσία Firefox Screenshots. Προσπαθήστε ξανά αργότερα."
  },
  "unshootablePageErrorTitle": {
    "message": "Δεν μπορούμε να λάβουμε στιγμιότυπο αυτής της σελίδας."
  },
  "unshootablePageErrorDetails": {
    "message": "Δεν μπορεί να γίνει λήψη στιγμιότυπου καθώς αυτή δεν είναι μια τυπική σελίδα του Διαδικτύου."
  },
  "selfScreenshotErrorTitle": {
    "message": "Δεν μπορεί να γίνει λήψη ενός στιγμιότυπου της σελίδας Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Η επιλογή σας είναι πολύ μικρή"
  },
  "privateWindowErrorTitle": {
    "message": "Το Screenshots είναι απενεργοποιημένο στη λειτουργία ιδιωτικής περιήγησης"
  },
  "privateWindowErrorDetails": {
    "message": "Λυπούμαστε για την ταλαιπωρία. Εργαζόμαστε πάνω σε αυτό το χαρακτηριστικό για μελλοντικές εκδόσεις."
  },
  "genericErrorTitle": {
    "message": "Ωχ! Κάτι πήγε στραβά στην υπηρεσία Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "Δεν είμαστε σίγουροι για το τι ακριβώς συνέβη. Προσπαθήστε ξανά ή κάντε λήψη σε μια άλλη σελίδα."
  },
  "tourBodyIntro": {
    "message": "Λήψη, αποθήκευση και διαμοιρασμός στιγμιοτύπων μέσα από το Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ένας νέος τρόπος αποθήκευσης"
  },
  "tourHeaderClickAndDrag": {
    "message": "Καταγράψτε αυτό που εσείς επιθυμείτε"
  },
  "tourBodyClickAndDrag": {
    "message": "Κάντε κλικ και σύρετε για την καταγραφή ενός τμήματος της σελίδας. Μπορείτε να επισημάνετε την επιλογή σας μετακινώντας τον ποντίκι σας επάνω της."
  },
  "tourHeaderFullPage": {
    "message": "Λήψη παραθύρων ή ολόκληρων σελίδων"
  },
  "tourBodyFullPage": {
    "message": "Επιλέξτε τα κουμπιά επάνω δεξιά για να καταγράψετε την ορατή περιοχή του παραθύρου ή να καταγράψετε μια ολόκληρη σελίδα."
  },
  "tourHeaderDownloadUpload": {
    "message": "Ακριβώς όπως το θέλετε"
  },
  "tourBodyDownloadUpload": {
    "message": "Αποθηκεύστε της λήψεις σας στο Διαδίκτυο για ευκολότερο διαμοιρασμό, η λήψη τους στον υπολογιστή σας. Μπορείτε να βρείτε όλες τις λήψεις σας πατώντας στο κουμπί «Οι λήψεις μου»."
  },
  "tourSkip": {
    "message": "Παράβλεψη"
  },
  "tourNext": {
    "message": "Επόμενη διαφάνεια"
  },
  "tourPrevious": {
    "message": "Προηγούμενη διαφάνεια"
  },
  "tourDone": {
    "message": "Τέλος"
  },
  "termsAndPrivacyNotice2": {
    "message": "Χρησιμοποιώντας το Firefox Screenshots, συμφωνείτε με τους $TERMSANDPRIVACYNOTICETERMSLINK$ και την $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Όρους"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Σημείωση απορρήτου"
  },
  "libraryLabel": {
    "message": "Στιγμιότυπα"
  }
}PK
!<R����)webextension/_locales/en_GB/messages.json{
  "addonDescription": {
    "message": "Take clips and screenshots from the Web and save them temporarily or permanently."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Take a Screenshot"
  },
  "myShotsLink": {
    "message": "My Shots"
  },
  "screenshotInstructions": {
    "message": "Drag or click on the page to select a region. Press ESC to cancel."
  },
  "saveScreenshotSelectedArea": {
    "message": "Save"
  },
  "saveScreenshotVisibleArea": {
    "message": "Save visible"
  },
  "saveScreenshotFullPage": {
    "message": "Save full page"
  },
  "cancelScreenshot": {
    "message": "Cancel"
  },
  "downloadScreenshot": {
    "message": "Download"
  },
  "downloadOnlyNotice": {
    "message": "You are currently in Download-Only mode."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automatically changes to Download-Only mode in these situations:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "In a Private Browsing window."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Third-party cookies are disabled."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Never remember history” is enabled."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link Copied"
  },
  "notificationLinkCopiedDetails": {
    "message": "The link to your shot has been copied to the clipboard. Press $META_KEY$-V to paste.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copy"
  },
  "notificationImageCopiedTitle": {
    "message": "Shot Copied"
  },
  "notificationImageCopiedDetails": {
    "message": "Your shot has been copied to the clipboard. Press $META_KEY$-V to paste.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "This image has been cropped to $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Out of order."
  },
  "requestErrorDetails": {
    "message": "Sorry! We couldn’t save your shot. Please try again later."
  },
  "connectionErrorTitle": {
    "message": "We can’t connect to your screenshots."
  },
  "connectionErrorDetails": {
    "message": "Please check your Internet connection. If you are able to connect to the Internet, there may be a temporary problem with the Firefox Screenshots service."
  },
  "loginErrorDetails": {
    "message": "We couldn’t save your shot because there is a problem with the Firefox Screenshots service. Please try again later."
  },
  "unshootablePageErrorTitle": {
    "message": "We can’t screenshot this page."
  },
  "unshootablePageErrorDetails": {
    "message": "This isn’t a standard Web page, so you can’t take a screenshot of it."
  },
  "selfScreenshotErrorTitle": {
    "message": "You can’t take a shot of a Firefox Screenshots page!"
  },
  "emptySelectionErrorTitle": {
    "message": "Your selection is too small"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots is disabled in Private Browsing Mode"
  },
  "privateWindowErrorDetails": {
    "message": "Sorry for the inconvenience. We are working on this feature for future releases."
  },
  "genericErrorTitle": {
    "message": "Whoa! Firefox Screenshots went haywire."
  },
  "genericErrorDetails": {
    "message": "We’re not sure what just happened. Care to try again or take a shot of a different page?"
  },
  "tourBodyIntro": {
    "message": "Take, save, and share screenshots without leaving Firefox."
  },
  "tourHeaderPageAction": {
    "message": "A new way to save"
  },
  "tourBodyPageAction": {
    "message": "Expand the page actions menu in the address bar any time you want to take a screenshot."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capture Just What You Want"
  },
  "tourBodyClickAndDrag": {
    "message": "Click and drag to capture just a portion of a page. You can also hover to highlight your selection."
  },
  "tourHeaderFullPage": {
    "message": "Capture Windows or Entire Pages"
  },
  "tourBodyFullPage": {
    "message": "Select the buttons in the upper right to capture the visible area in the window or to capture an entire page."
  },
  "tourHeaderDownloadUpload": {
    "message": "As You Like It"
  },
  "tourBodyDownloadUpload": {
    "message": "Save your cropped shots to the web for easier sharing, or download them to your computer. You also can click on the My Shots button to find all the shots you’ve taken."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Next Slide"
  },
  "tourPrevious": {
    "message": "Previous Slide"
  },
  "tourDone": {
    "message": "Done"
  },
  "termsAndPrivacyNotice2": {
    "message": "By using Firefox Screenshots, you agree to our $TERMSANDPRIVACYNOTICETERMSLINK$ and $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Terms"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Privacy Notice"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<��7W��)webextension/_locales/en_US/messages.json{
  "addonDescription": {
    "message": "Take clips and screenshots from the Web and save them temporarily or permanently."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Take a Screenshot"
  },
  "myShotsLink": {
    "message": "My Shots"
  },
  "screenshotInstructions": {
    "message": "Drag or click on the page to select a region. Press ESC to cancel."
  },
  "saveScreenshotSelectedArea": {
    "message": "Save"
  },
  "saveScreenshotVisibleArea": {
    "message": "Save visible"
  },
  "saveScreenshotFullPage": {
    "message": "Save full page"
  },
  "cancelScreenshot": {
    "message": "Cancel"
  },
  "downloadScreenshot": {
    "message": "Download"
  },
  "downloadOnlyNotice": {
    "message": "You are currently in Download-Only mode."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automatically changes to Download-Only mode in these situations:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "In a Private Browsing window."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Third-party cookies are disabled."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Never remember history” is enabled."
  },
  "downloadOnlyDetailsESR": {
    "message": "You are using Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Uploads have been disabled."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link Copied"
  },
  "notificationLinkCopiedDetails": {
    "message": "The link to your shot has been copied to the clipboard. Press $META_KEY$-V to paste.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copy"
  },
  "notificationImageCopiedTitle": {
    "message": "Shot Copied"
  },
  "notificationImageCopiedDetails": {
    "message": "Your shot has been copied to the clipboard. Press $META_KEY$-V to paste.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "This image has been cropped to $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Out of order."
  },
  "requestErrorDetails": {
    "message": "Sorry! We couldn’t save your shot. Please try again later."
  },
  "connectionErrorTitle": {
    "message": "We can’t connect to your screenshots."
  },
  "connectionErrorDetails": {
    "message": "Please check your Internet connection. If you are able to connect to the Internet, there may be a temporary problem with the Firefox Screenshots service."
  },
  "loginErrorDetails": {
    "message": "We couldn’t save your shot because there is a problem with the Firefox Screenshots service. Please try again later."
  },
  "unshootablePageErrorTitle": {
    "message": "We can’t screenshot this page."
  },
  "unshootablePageErrorDetails": {
    "message": "This isn’t a standard Web page, so you can’t take a screenshot of it."
  },
  "selfScreenshotErrorTitle": {
    "message": "You can’t take a shot of a Firefox Screenshots page!"
  },
  "emptySelectionErrorTitle": {
    "message": "Your selection is too small"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots is disabled in Private Browsing Mode"
  },
  "privateWindowErrorDetails": {
    "message": "Sorry for the inconvenience. We are working on this feature for future releases."
  },
  "genericErrorTitle": {
    "message": "Whoa! Firefox Screenshots went haywire."
  },
  "genericErrorDetails": {
    "message": "We’re not sure what just happened. Care to try again or take a shot of a different page?"
  },
  "tourBodyIntro": {
    "message": "Take, save, and share screenshots without leaving Firefox."
  },
  "tourHeaderPageAction": {
    "message": "A new way to save"
  },
  "tourBodyPageAction": {
    "message": "Expand the page actions menu in the address bar any time you want to take a screenshot."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capture Just What You Want"
  },
  "tourBodyClickAndDrag": {
    "message": "Click and drag to capture just a portion of a page. You can also hover to highlight your selection."
  },
  "tourHeaderFullPage": {
    "message": "Capture Windows or Entire Pages"
  },
  "tourBodyFullPage": {
    "message": "Select the buttons in the upper right to capture the visible area in the window or to capture an entire page."
  },
  "tourHeaderDownloadUpload": {
    "message": "As You Like It"
  },
  "tourBodyDownloadUpload": {
    "message": "Save your cropped shots to the web for easier sharing, or download them to your computer. You also can click on the My Shots button to find all the shots you’ve taken."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Next Slide"
  },
  "tourPrevious": {
    "message": "Previous Slide"
  },
  "tourDone": {
    "message": "Done"
  },
  "termsAndPrivacyNotice2": {
    "message": "By using Firefox Screenshots, you agree to our $TERMSANDPRIVACYNOTICETERMSLINK$ and $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Terms"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Privacy Notice"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<��
��&webextension/_locales/eo/messages.json{
  "addonDescription": {
    "message": "Prenu eltondaĵon aŭ faru ekrankopiojn de retpaĝoj kaj konservu ilin ĉu daŭre ĉu provizore."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Fari ekrankopion"
  },
  "myShotsLink": {
    "message": "Miaj ekrankopioj"
  },
  "screenshotInstructions": {
    "message": "Trenu aŭ alklaku sur la paĝo por elekti areon. Premu ESK por nuligi."
  },
  "saveScreenshotSelectedArea": {
    "message": "Konservi"
  },
  "saveScreenshotVisibleArea": {
    "message": "Konservi tion, kio videblas"
  },
  "saveScreenshotFullPage": {
    "message": "Konservi tutan paĝon"
  },
  "cancelScreenshot": {
    "message": "Nuligi"
  },
  "downloadScreenshot": {
    "message": "Elŝuti"
  },
  "downloadOnlyNotice": {
    "message": "Vi estas nun en la reĝimo \"Nur elŝutoj\"."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots aŭtomate transiras al reĝimo \"Nur elŝutoj\" en la jenaj situacioj:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "en fenestro de privata retumo"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "se nerektaj kuketoj estas malaktivaj."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Neniam memori historion” estas aktiva."
  },
  "downloadOnlyDetailsESR": {
    "message": "Vi uzas Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "La alŝutoj estis malaktivigitaj."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ligilo kopiita"
  },
  "notificationLinkCopiedDetails": {
    "message": "La ligilo al via ekrankopio estis kopiita al la tondujo. Premu $META_KEY$-V por alglui.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopii"
  },
  "notificationImageCopiedTitle": {
    "message": "Ekrankopio kopiita"
  },
  "notificationImageCopiedDetails": {
    "message": "Via ekrankopio estis kopiita al la tondujo. Premu $META_KEY$-V por alglui.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tiu ĉi bildo estis pritondita je $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ne funkcianta."
  },
  "requestErrorDetails": {
    "message": "Bedaŭrinde ni ne povis konservi vian ekrankopion. Bonvolu klopodi denove poste."
  },
  "connectionErrorTitle": {
    "message": "Ni ne povas konektiĝi al viaj ekrankopioj."
  },
  "connectionErrorDetails": {
    "message": "Bonvolu kontroli vian retaliron. Se vi povas konektiĝi al la reto, eble estas provizora problemo kun la servo de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Ni ne povis konservi vian ekrankopion ĉar estis problemo kun la servo de Firefox Screenshots. Bonvolu klopodi denove poste."
  },
  "unshootablePageErrorTitle": {
    "message": "Ni ne povas fari ekrankopion de tiu ĉi paĝo."
  },
  "unshootablePageErrorDetails": {
    "message": "Tiu ĉi ne estas norma retpaĝo, do vi ne povas fari ekrankopion de ĝi."
  },
  "selfScreenshotErrorTitle": {
    "message": "Vi ne povas fari ekrankopion de paĝo de Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Via elektita areo estas tro eta"
  },
  "privateWindowErrorTitle": {
    "message": "Ekrankopioj estas malaktivaj en la reĝimo de privata retumo"
  },
  "privateWindowErrorDetails": {
    "message": "Bonvolu pardoni la ĝenon. Ni prilaboras tiun ĉi trajton por venontaj eldonoj."
  },
  "genericErrorTitle": {
    "message": "Ŭoo! Firefox Screenshots tute frenezis."
  },
  "genericErrorDetails": {
    "message": "Ni ne tro certas, kio ĵus okazis. Ĉu vi povus klopodi denove aŭ fari ekrankopion de alia paĝo?"
  },
  "tourBodyIntro": {
    "message": "Faru, konservu kaj dividu ekrankopiojn sen forlasi Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Nova maniero konservi ekrankopiojn"
  },
  "tourBodyPageAction": {
    "message": "Kiam vi volas fari ekrankopion, iru al la menuo «Retpaĝaj agoj» en la adresa strio."
  },
  "tourHeaderClickAndDrag": {
    "message": "Kopiu nur tion, kion vi volas."
  },
  "tourBodyClickAndDrag": {
    "message": "Alklaku kaj trenu por kopii nur parton de paĝo. Vi povas ankaŭ ŝvebi por elstarigi vian elekton."
  },
  "tourHeaderFullPage": {
    "message": "Kapti fenestrojn aŭ tutaj paĝojn"
  },
  "tourBodyFullPage": {
    "message": "Elektu la butonojn supre kaj dekstre por kapti la videblan areon en la fenestro aŭ por kapti tutan paĝon."
  },
  "tourHeaderDownloadUpload": {
    "message": "Kiel vi volas"
  },
  "tourBodyDownloadUpload": {
    "message": "Konservu vian eltonditajn ekrankopiojn en la reto, por pli facile dividi ilin, aŭ elŝutu ilin al via komputilo. Vi ankaŭ povas alklaki la butonon 'Miaj ekrankopioj' por trovi ĉiujn ekrankopiojn faritajn de vi."
  },
  "tourSkip": {
    "message": "Pretersalti"
  },
  "tourNext": {
    "message": "Venonta ekrano"
  },
  "tourPrevious": {
    "message": "Antaŭa ekrano"
  },
  "tourDone": {
    "message": "Farita"
  },
  "termsAndPrivacyNotice2": {
    "message": "Se vi uzas Firefox Screenshots, vi akceptas nian $TERMSANDPRIVACYNOTICETERMSLINK$ kaj $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "kondiĉojn"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "rimarkon pri privateco"
  },
  "libraryLabel": {
    "message": "Ekrankopioj"
  }
}PK
!<K�(���)webextension/_locales/es_AR/messages.json{
  "addonDescription": {
    "message": "Tomá imágenes y capturas de la web y guardalos temporal o permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Hacer captura de pantalla"
  },
  "myShotsLink": {
    "message": "Mis capturas"
  },
  "screenshotInstructions": {
    "message": "Arrastrá o hacé clic en la página para seleccionar una región. Presioná ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar visible"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar página completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Descargar"
  },
  "downloadOnlyNotice": {
    "message": "Estás actualmente en modo solo descargas."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots cambia automáticamente al modo solo descargas en estas situaciones:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "En una ventana de navegación privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies de terceros están deshabilitadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Nunca recordar historial” está habilitado."
  },
  "downloadOnlyDetailsESR": {
    "message": "Está usando Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Las cargas de archivos están desactivadas."
  },
  "notificationLinkCopiedTitle": {
    "message": "Enlace copiado"
  },
  "notificationLinkCopiedDetails": {
    "message": "El enlace a la captura ha sido copiado al portapapeles. Presioná $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiada"
  },
  "notificationImageCopiedDetails": {
    "message": "Tu captura ha sido copiada al portapapeles. Presioná $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Esta imagen ha sido recortada a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "No funciona."
  },
  "requestErrorDetails": {
    "message": "¡Perdón! No pudimos guardar la captura. Intentá más tarde."
  },
  "connectionErrorTitle": {
    "message": "No podemos conectar a las capturas de pantalla."
  },
  "connectionErrorDetails": {
    "message": "Verificá la conexión a Internet. Si te podés conectar a Internet, hay un problema temporal con el servicio de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "No pudimos guardar la captura porque hay un problema con el servicio de Firefox Screenshots. Intentá más tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "No podemos capturar esta página."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta no es una página web estándar, así que no podemos guardar una captura."
  },
  "selfScreenshotErrorTitle": {
    "message": "¡No se puede hacer una captura de la página de Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "La selección es demasiado chica"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots está deshabilitado en el modo de navegación privada"
  },
  "privateWindowErrorDetails": {
    "message": "Lamentamos el inconveniente. Estamos trabajando en esta característica para versiones futuras."
  },
  "genericErrorTitle": {
    "message": "¡Apa! Firefox Screenshots se volvió loco."
  },
  "genericErrorDetails": {
    "message": "No estamos seguros de lo que pasó. ¿Querés intenar de nuevo o tomar una captura de una página diferente?"
  },
  "tourBodyIntro": {
    "message": "Hacer, guardar y compartir capturas de pantalla sin dejar Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Una nueva forma de guardar"
  },
  "tourBodyPageAction": {
    "message": "Expandí el menú de acciones de página en la barra de direcciones cuando quieras tomar una captura."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capturar sólo lo que querés"
  },
  "tourBodyClickAndDrag": {
    "message": "Hacé clic y arrastrá para capturar una porción de la página. También podés pasar por encima para resaltar la selección."
  },
  "tourHeaderFullPage": {
    "message": "Capturar ventanas o páginas enteras"
  },
  "tourBodyFullPage": {
    "message": "Seleccioná los botones arriba a la derecha para capturar el área visible en la ventana o la página completa."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como te guste"
  },
  "tourBodyDownloadUpload": {
    "message": "Guardá tus capturas recortadas a la web para compartir o descargarlas más fácilmente a tu computadora. También podés hacer clic en el botón Mis capturas para encontrar todas las capturas hechas."
  },
  "tourSkip": {
    "message": "SALTEAR"
  },
  "tourNext": {
    "message": "Próxima diapositiva"
  },
  "tourPrevious": {
    "message": "Diapositiva anterior"
  },
  "tourDone": {
    "message": "Listo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Al usar Firefox Screenshots, aceptás los $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Términos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Nota de privacidad"
  },
  "libraryLabel": {
    "message": "Capturas"
  }
}PK
!<|�F�ZZ)webextension/_locales/es_CL/messages.json{
  "addonDescription": {
    "message": "Toma capturas de un sitio Web para guardarlas de forma temporal o permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Tomar una captura de pantalla"
  },
  "myShotsLink": {
    "message": "Mis capturas"
  },
  "screenshotInstructions": {
    "message": "Arrastra o haz clic en la página para seleccionar una región. Presiona ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar lo visible"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar la página completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Descargar"
  },
  "downloadOnlyNotice": {
    "message": "Actualmente estás en el modo de solo descarga."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots cambia automáticamente al modo de solo descarga en estas situaciones:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "En una ventana de navegación privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies de terceros desactivadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Al estar activado \"Nunca recordar el historial\"."
  },
  "downloadOnlyDetailsESR": {
    "message": "Estás usando Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Las subidas han sido desactivadas."
  },
  "notificationLinkCopiedTitle": {
    "message": "Enlace copiado"
  },
  "notificationLinkCopiedDetails": {
    "message": "El enlace a tu captura ha sido copiado al portapapeles. Presiona $META_KEY$-V para pegarla.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiada"
  },
  "notificationImageCopiedDetails": {
    "message": "Tu captura ha sido copiada al portapapeles. Presiona $META_KEY$-V para pegarla.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Esta imagen ha sido recortada a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Fuera de orden."
  },
  "requestErrorDetails": {
    "message": "¡Lo sentimos! No pudimos guardar tu captura. Por favor, vuelve a intentarlo más tarde."
  },
  "connectionErrorTitle": {
    "message": "No podemos conectar a tus capturas."
  },
  "connectionErrorDetails": {
    "message": "Por favor, revisa tu conexión a Internet. Si eres capaz de conectarte a Internet, puede que haya un problema temporal con el servicio de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "No pudimos guardar tu captura porque hay un problema con el servicio de Firefox Screenshots. Por favor, vuelve a intentarlo más tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "No podemos capturar esta página."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta no es una página Web estándar, por lo que no puedes tomar una captura de ella."
  },
  "selfScreenshotErrorTitle": {
    "message": "¡No puedes tomar una captura de una página de Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tu selección es muy pequeña"
  },
  "privateWindowErrorTitle": {
    "message": "Firefox Screenshots está desactivado en el modo de navegación privada"
  },
  "privateWindowErrorDetails": {
    "message": "Disculpa las molestias. Estamos trabajando en esta función para una futura versión."
  },
  "genericErrorTitle": {
    "message": "¡Guau! Firefox Screenshots se copetió."
  },
  "genericErrorDetails": {
    "message": "No estamos seguros de lo que sucedió. ¿Te importaría volver a intentarlo o tomar una captura de una página diferente?"
  },
  "tourBodyIntro": {
    "message": "Toma, guarda y comparte capturas sin salir de Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Una nueva forma de guardar"
  },
  "tourBodyPageAction": {
    "message": "Expande el menú de acciones de página en la barra de direcciones en cualquier momento en que quieras tomar una captura."
  },
  "tourHeaderClickAndDrag": {
    "message": "Captura lo que necesitas"
  },
  "tourBodyClickAndDrag": {
    "message": "Haz clic y arrastra para captura justo una parte de la página. También puedes colocarte sobre una parte para destacar tu selección."
  },
  "tourHeaderFullPage": {
    "message": "Captura ventanas o páginas completas"
  },
  "tourBodyFullPage": {
    "message": "Selecciona los botones en la parte superior derecha para capturar el área visible ne la ventana o para capturar una página completa."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como tu quieras"
  },
  "tourBodyDownloadUpload": {
    "message": "Guarda tus capturas recortadas en la Web para compartirlas fácilmente o descargarlas a tu computador. También puedes hacer clic en el botón Mis capturas para encontrar todas las que hayas tomado."
  },
  "tourSkip": {
    "message": "SALTAR"
  },
  "tourNext": {
    "message": "Siguiente diapositiva"
  },
  "tourPrevious": {
    "message": "Diapositiva anterior"
  },
  "tourDone": {
    "message": "Hecho"
  },
  "termsAndPrivacyNotice2": {
    "message": "Al usar Firefox Screenshots, aceptas nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Términos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Aviso de privacidad"
  },
  "libraryLabel": {
    "message": "Capturas de pantalla"
  }
}PK
!<\V�Q**)webextension/_locales/es_ES/messages.json{
  "addonDescription": {
    "message": "Haz capturas y recortes de la web y guárdalos temporal o permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Hacer una captura de pantalla"
  },
  "myShotsLink": {
    "message": "Mis capturas"
  },
  "screenshotInstructions": {
    "message": "Arrastra o haz clic en la página para seleccionar una región. Pulsa ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar visible"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar página completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Descargar"
  },
  "downloadOnlyNotice": {
    "message": "Estás en modo Solo descargas."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots se cambia automáticamente al modo Solo descargas en los siguientes casos:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Durante la navegación privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cuando las cookies de terceros están deshabilitadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Cuando está activada la opción “No recordar nunca el historial”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Estás usando Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Las cargas se han deshabilitado."
  },
  "notificationLinkCopiedTitle": {
    "message": "Enlace copiado"
  },
  "notificationLinkCopiedDetails": {
    "message": "Se ha copiado el enlace a la captura en el portapapeles. Pulsa $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiada"
  },
  "notificationImageCopiedDetails": {
    "message": "Tu captura ha ido copiada al portapapeles. Presiona $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Se recortó la imagen a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "No funciona."
  },
  "requestErrorDetails": {
    "message": "¡Lo sentimos! No hemos podido guardar tu captura. Inténtalo más tarde."
  },
  "connectionErrorTitle": {
    "message": "No podemos acceder a tus capturas de pantalla."
  },
  "connectionErrorDetails": {
    "message": "Comprueba tu conexión a Internet. Si puedes conectarte, puede que haya un problema temporal con el servicio de capturas de pantalla de Firefox."
  },
  "loginErrorDetails": {
    "message": "No se pudo guardar la captura porque hay un problema con el servicio Firefox Screenshots. Inténtalo más tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "No podemos hacer una captura de esta página."
  },
  "unshootablePageErrorDetails": {
    "message": "No es una página web común, por lo que no podemos hacer captura de pantalla."
  },
  "selfScreenshotErrorTitle": {
    "message": "¡No puedes hacer una captura de la página de Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tu selección es demasiado pequeña"
  },
  "privateWindowErrorTitle": {
    "message": "Firefox Screenshots está desactivado en el modo de navegación privada"
  },
  "privateWindowErrorDetails": {
    "message": "Sentimos las molestias. Estamos trabajando en esta característica para próximos lanzamientos."
  },
  "genericErrorTitle": {
    "message": "¡Vaya! Firefox Screenshots se ha vuelto loco."
  },
  "genericErrorDetails": {
    "message": "No estamos seguros de lo que acaba de pasar. ¿Te importa volver a intentarlo o hacer una captura de otra página?"
  },
  "tourBodyIntro": {
    "message": "Hacer, guardar y compartir capturas de pantalla sin salir de Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Una nueva forma de guardar"
  },
  "tourBodyPageAction": {
    "message": "Expande el menú de acciones de la página en la barra de direcciones cuando quieras hacer una captura."
  },
  "tourHeaderClickAndDrag": {
    "message": "Haz capturas solo de lo que tú quieras"
  },
  "tourBodyClickAndDrag": {
    "message": "Haz clic y arrastra para capturar solo una parte de la página. También puedes pasar por encima para resaltar tu selección."
  },
  "tourHeaderFullPage": {
    "message": "Haz capturas de ventanas o de páginas completas"
  },
  "tourBodyFullPage": {
    "message": "Selecciona los botones de la parte superior derecha para capturar el área visible en la ventana o en la página completa."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como más te guste"
  },
  "tourBodyDownloadUpload": {
    "message": "Guarda las capturas de la Web recortadas para compartirlas mejor o descárgalas en tu ordenador. También puedes hacer clic en Mis capturas para ver todas las capturas que has hecho."
  },
  "tourSkip": {
    "message": "Saltar"
  },
  "tourNext": {
    "message": "Diapositiva siguiente"
  },
  "tourPrevious": {
    "message": "Diapositiva anterior"
  },
  "tourDone": {
    "message": "Hecho"
  },
  "termsAndPrivacyNotice2": {
    "message": "Al usar Firefox Screenshots, estás de acuerdo con nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Términos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Aviso de privacidad"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<5s����)webextension/_locales/es_MX/messages.json{
  "addonDescription": {
    "message": "Tomar clips y capturas de pantalla de la web y guardarlos temporalmente o permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Tomar captura de pantalla"
  },
  "myShotsLink": {
    "message": "Mis capturas"
  },
  "screenshotInstructions": {
    "message": "Arrastra o haz clic en la página para seleccionar la región. Presiona ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar visible"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar página completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Descarga"
  },
  "downloadOnlyNotice": {
    "message": "Estás en modo de Solo-Descargas."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automáticamente cambia al modo Solo-Descarga en estas situaciones:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "En una ventana de navegación privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies de terceros están desactivadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Nunca recordar el historial” está habilitado."
  },
  "downloadOnlyDetailsESR": {
    "message": "Estás usando Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Las cargas de archivos están deshabilitadas."
  },
  "notificationLinkCopiedTitle": {
    "message": "Enlace copiado"
  },
  "notificationLinkCopiedDetails": {
    "message": "El enlace que has capturado ha sido copiado al portapapeles. Presiona $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiada"
  },
  "notificationImageCopiedDetails": {
    "message": "Tu captura ha sido copiada al portapapeles. Presiona $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Esta imagen ha sido recortada a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Fuera de orden."
  },
  "requestErrorDetails": {
    "message": "¡Lo sentimos! No pudimos guardar tu captura. Por favor, intenta de nuevo más tarde."
  },
  "connectionErrorTitle": {
    "message": "No podemos conectar a tus capturas de pantalla."
  },
  "connectionErrorDetails": {
    "message": "Por favor, revisa tu conexión a Internet. Si eres capaz de conectarte a Internet, puede ser que exista un error temporal con el servicio de capturas de pantalla de Firefox."
  },
  "loginErrorDetails": {
    "message": "No pudimos guardar tu captura porque hay un problema con el servicio de capturas de pantalla de Firefox. Por favor, intenta de nuevo más tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "No podemos realizar una captura de pantalla a esta página."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta no es una página web estándar, por lo tanto no podemos tomar una captura de pantalla de ella."
  },
  "selfScreenshotErrorTitle": {
    "message": "¡No puedes tomar una captura de la página de capturas de pantalla de Firefox!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tu selección es demasiado pequeña"
  },
  "privateWindowErrorTitle": {
    "message": "La captura de pantalla está deshabilitada en el modo navegación privada"
  },
  "privateWindowErrorDetails": {
    "message": "Disculpen las molestias. Estamos trabajando en esta característica para las versiones futuras."
  },
  "genericErrorTitle": {
    "message": "¡Oye! Las capturas de pantalla de Firefox salieron mal."
  },
  "genericErrorDetails": {
    "message": "No estamos seguros qué pasó. ¿Te importaría intentarlo de nuevo o tomar una captura de una página diferente?"
  },
  "tourBodyIntro": {
    "message": "Toma, guarda y comparte capturas de pantalla sin dejar Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Una nueva forma de guardar"
  },
  "tourBodyPageAction": {
    "message": "Expande el menú de acciones de la página en la barra de direcciones en cualquier momento que quieras tomar una captura de pantalla."
  },
  "tourHeaderClickAndDrag": {
    "message": "Captura sólo lo que necesitas"
  },
  "tourBodyClickAndDrag": {
    "message": "Haz clic y arrastra para capturas sólo una parte de la página. También puedes desplazarte para resaltar tu selección."
  },
  "tourHeaderFullPage": {
    "message": "Captura ventanas o páginas enteras"
  },
  "tourBodyFullPage": {
    "message": "Selecciona los botones en la parte superior derecha para capturar el área visible en la ventana o para capturar una página completa."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como te gusta"
  },
  "tourBodyDownloadUpload": {
    "message": "Guarda tus capturas recortadas en la Web para compartirlas más fácilmente o descárgalas en tu computadora. También puedes hacer clic en el botón Mis Capturas para encontrar todas las fotos que has tomado."
  },
  "tourSkip": {
    "message": "Ignorar"
  },
  "tourNext": {
    "message": "Siguiente diapositiva"
  },
  "tourPrevious": {
    "message": "Diapositiva anterior"
  },
  "tourDone": {
    "message": "Terminado"
  },
  "termsAndPrivacyNotice2": {
    "message": "Al usar Firefox Screenshots, estás de acuerdo con nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Términos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Aviso de privacidad"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<��((&webextension/_locales/et/messages.json{
  "addonDescription": {
    "message": "Tee veebist klippe või ekraanipilte ning salvesta need ajutiselt või püsivalt."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Tee ekraanipilt"
  },
  "myShotsLink": {
    "message": "Minu pildid"
  },
  "screenshotInstructions": {
    "message": "Ala valimiseks klõpsavõi lohista lehel. Tühistamiseks vajuta ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Salvesta"
  },
  "saveScreenshotVisibleArea": {
    "message": "Salvesta nähtav"
  },
  "saveScreenshotFullPage": {
    "message": "Salvesta terve leht"
  },
  "cancelScreenshot": {
    "message": "Tühista"
  },
  "downloadScreenshot": {
    "message": "Laadi alla"
  },
  "downloadOnlyNotice": {
    "message": "Oled hetkel režiimis, kus saab vaid alla laadida."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots lülitub sellesse režiimi automaatselt, kui:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "oled privaatse veebilehitsemise aknas"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "kolmanda osapoole küpsised on keelatud"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“ei säilita ajalugu” on lubatud"
  },
  "notificationLinkCopiedTitle": {
    "message": "Link kopeeriti"
  },
  "notificationLinkCopiedDetails": {
    "message": "Link sinu pildile kopeeriti lõikepuhvrisse. Asetamiseks vajuta $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopeeri"
  },
  "imageCroppedWarning": {
    "message": "See pilt on vähendatud $PIXELS$-le pikslile.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Tekkis viga."
  },
  "requestErrorDetails": {
    "message": "Vabandame! Me ei suutnud su pilti salvestada. Palun proovi hiljem uuesti."
  },
  "connectionErrorTitle": {
    "message": "Ühendumine sinu ekraanipiltidega ei õnnestunud."
  },
  "connectionErrorDetails": {
    "message": "Palun kontrolli internetiühenduse toimimist. Kui saad internetiga ühendust, siis võib tegemist olla Firefox Screenshots teenuse ajutise probleemiga."
  },
  "loginErrorDetails": {
    "message": "Ekraanipildi salvestamine ebaõnnestus Firefox Screenshots teenuse probleemi tõttu. Palun proovi hiljem uuesti."
  },
  "unshootablePageErrorTitle": {
    "message": "Sellest lehest ei saa ekraanipilti teha."
  },
  "unshootablePageErrorDetails": {
    "message": "Tegemist pole standardse veebilehega, seetõttu ei saa sellest ekraanipilti teha."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots lehest ei saa ekraanipilti teha!"
  },
  "emptySelectionErrorTitle": {
    "message": "Valik on liiga väike"
  },
  "privateWindowErrorTitle": {
    "message": "Ekraanipilte ei saa privaatsel veebilehitsemisel teha"
  },
  "privateWindowErrorDetails": {
    "message": "Vabandame tüli tekitamise pärast. Töötame selle võimaluse lisamiseks tulevikus."
  },
  "genericErrorTitle": {
    "message": "Oi-oi! Firefox Screenshots läks sassi."
  },
  "genericErrorDetails": {
    "message": "Me pole kindlad, mis just juhtus. Proovid ehk uuesti või teed ekraanipildi mõnest teisest lehest?"
  },
  "tourBodyIntro": {
    "message": "Tee, salvesta ja jaga ekraanipilte Firefoxist lahkumata."
  },
  "tourHeaderPageAction": {
    "message": "Uus viis salvestamiseks"
  },
  "tourBodyPageAction": {
    "message": "Laienda lehe tegevuste menüüd aadressiribal, kui soovid ekraanipildi teha."
  },
  "tourHeaderClickAndDrag": {
    "message": "Salvesta just seda, mida soovid"
  },
  "tourBodyClickAndDrag": {
    "message": "Klõpsa ja lohista lehe osa valimiseks. Samuti võid valiku esile toomiseks kursorit selle kohal hoida."
  },
  "tourHeaderFullPage": {
    "message": "Salvesta aknaid või terveid lehti"
  },
  "tourBodyFullPage": {
    "message": "Kasuta nuppe ülal paremal aknas nähtava ala või terve lehe salvestamiseks."
  },
  "tourHeaderDownloadUpload": {
    "message": "Nii, kuidas sulle meeldib"
  },
  "tourBodyDownloadUpload": {
    "message": "Salvesta kärbitud pilte lihtsamaks jagamiseks veebi või laadi need alla enda arvutisse. Võid ka klõpsata Minu pildid nupul kõigi tehtud piltide vaatamiseks."
  },
  "tourSkip": {
    "message": "Jäta vahele"
  },
  "tourNext": {
    "message": "Järgmine slaid"
  },
  "tourPrevious": {
    "message": "Eelmine slaid"
  },
  "tourDone": {
    "message": "Valmis"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots'i kasutades nõustud meie $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "kasutustingimuste"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "privaatsuspoliitikaga"
  },
  "libraryLabel": {
    "message": "Ekraanipildid"
  }
}PK
!<�����&webextension/_locales/eu/messages.json{
  "addonDescription": {
    "message": "Hartu webetik pantaila-zatiak eta -argazkiak eta gorde aldi baterako edo behin betiko."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Hartu pantaila-argazkia"
  },
  "myShotsLink": {
    "message": "Nire argazkiak"
  },
  "screenshotInstructions": {
    "message": "Eremu bat hautatzeko, arrastatu edo egin klik orrian. Uzteko, sakatu ESK."
  },
  "saveScreenshotSelectedArea": {
    "message": "Gorde"
  },
  "saveScreenshotVisibleArea": {
    "message": "Gorde ikusgai dagoena"
  },
  "saveScreenshotFullPage": {
    "message": "Gorde orri osoa"
  },
  "cancelScreenshot": {
    "message": "Utzi"
  },
  "downloadScreenshot": {
    "message": "Deskargatu"
  },
  "notificationLinkCopiedTitle": {
    "message": "Lotura kopiatuta"
  },
  "notificationLinkCopiedDetails": {
    "message": "Zure argazkirako lotura arbelean kopiatu da. Itsasteko, sakatu $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Zerbitzuz kanpo."
  },
  "requestErrorDetails": {
    "message": "Barkatu! Ezin izan dugu zure argazkia gorde. Saiatu berriro geroago."
  },
  "connectionErrorTitle": {
    "message": "Ezin gara zure pantaila-argazkietara konektatu."
  },
  "connectionErrorDetails": {
    "message": "Egiaztatu zure Internet-konexioa. Internetera konekta bazaitezke, aldi baterako arazo bat egon liteke Firefox Screenshots zerbitzuarekin."
  },
  "loginErrorDetails": {
    "message": "Ezin izan dugu zure argazkia gorde Firefox Screenshots zerbitzuarekin arazo bat dagoelako. Saiatu berriro geroago mesedez."
  },
  "unshootablePageErrorTitle": {
    "message": "Ezin dugu orri honen pantaila-argazkia hartu."
  },
  "unshootablePageErrorDetails": {
    "message": "Hau ez da web orri arrunt bat eta beraz, ezin duzu bere pantaila-argazkirik hartu."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ezin duzu Firefox Screenshots-eko orri baten pantaila-argazkirik hartu!"
  },
  "emptySelectionErrorTitle": {
    "message": "Zure hautapena txikiegia da"
  },
  "privateWindowErrorTitle": {
    "message": "Pantaila-argazkien zerbitzua desgaituta dago nabigatze pribatuko moduan"
  },
  "privateWindowErrorDetails": {
    "message": "Barkatu eragozpenak. Eginbide honetan lanean ari gara etorkizuneko bertsio baterako."
  },
  "genericErrorTitle": {
    "message": "Kontxo! Firefox Screenshots zerbitzua pikutara joan da."
  },
  "genericErrorDetails": {
    "message": "Ez gaude ziur zer gertatu den. Axola dizu berriro saiatzea edo beste orri baten argazkia hartzea?"
  },
  "tourBodyIntro": {
    "message": "Hartu, gorde eta partekatu pantaila-argazkiak Firefox utzi gabe."
  },
  "tourHeaderPageAction": {
    "message": "Gordetzeko modu berri bat"
  },
  "tourBodyPageAction": {
    "message": "Pantaila-argazki bat hartu nahi duzun bakoitzean, zabaldu orri-ekintzen menua helbide-barran."
  },
  "tourHeaderClickAndDrag": {
    "message": "Hartu soilik nahi duzunaren argazkia"
  },
  "tourBodyClickAndDrag": {
    "message": "Egin klik eta arrastatu soilik orriaren zati baten argazkia hartzeko. Sagua gainean jar dezakezu zure hautapena nabarmentzeko."
  },
  "tourHeaderFullPage": {
    "message": "Hartu leiho edo orri osoen argazkiak"
  },
  "tourBodyFullPage": {
    "message": "Hautatu goian eskuinean dauden botoiak leihoko eremu ikusgarriaren edo orri osoaren argazkia hartzeko."
  },
  "tourHeaderDownloadUpload": {
    "message": "Nahi duzun bezala"
  },
  "tourBodyDownloadUpload": {
    "message": "Gorde webean zure moztutako argazkiak, hauek errazago partekatu edo zure ordenagailura deskargatzeko. 'Nire argazkiak' botoian klik eginda hartutako argazki guztiak aurkituko dituzu."
  },
  "tourSkip": {
    "message": "SALTATU"
  },
  "tourNext": {
    "message": "Hurrengo diapositiba"
  },
  "tourPrevious": {
    "message": "Aurreko diapositiba"
  },
  "tourDone": {
    "message": "Eginda"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots erabilita, gure $TERMSANDPRIVACYNOTICETERMSLINK$ eta $TERMSANDPRIVACYNOTICEPRIVACYLINK$ onartzen dituzu.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Baldintzak"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Pribatutasun-oharra"
  },
  "libraryLabel": {
    "message": "Pantaila-argazkiak"
  }
}PK
!<�QU��&webextension/_locales/fa/messages.json{
  "addonDescription": {
    "message": "از وب عکس بگیرید و کلیپ بسازید و به صورت موقت یا دایمی ذخیره کنید."
  },
  "addonAuthorsList": {
    "message": "موزیلا <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "از صفحه عکس بگیرید"
  },
  "myShotsLink": {
    "message": "عکس‌های من"
  },
  "screenshotInstructions": {
    "message": "با کشیدن یا کلیک کردن روی صفحه یک منطقه را انتخاب کنید. برای لغو، ESC را فشار دهید."
  },
  "saveScreenshotSelectedArea": {
    "message": "ذخیره"
  },
  "saveScreenshotVisibleArea": {
    "message": "ذخیره ناحیه قابل مشاهده"
  },
  "saveScreenshotFullPage": {
    "message": "ذخیره صفحه کامل"
  },
  "cancelScreenshot": {
    "message": "لغو"
  },
  "downloadScreenshot": {
    "message": "دریافت"
  },
  "downloadOnlyNotice": {
    "message": "شما در حال حاضر در حالت فقط-دریافت هستید."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots در خصوص چنین موقعیتی به صورت خودکارحالت را به تنها دریافت تبدیل می‌کند:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "در پنجره‌های مرور ناشناس."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "کوکی‌های شخص ثالث غیرفعال شده باشند."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "امکان «هیچ‌وقت تاریخچه ذخیره نشود» فعال باشد."
  },
  "downloadOnlyDetailsESR": {
    "message": "شما از فایرفاکس ESR استفاده می‌کنید."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "بارگیری ها غیرفعال شده اند."
  },
  "notificationLinkCopiedTitle": {
    "message": "پیوند کپی شد"
  },
  "notificationLinkCopiedDetails": {
    "message": "لینک عکس شما در کلیپ‌بورد رونوشت شد. $META_KEY$-V را برای جای‌گذاری فشار دهید.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "رونوشت"
  },
  "notificationImageCopiedTitle": {
    "message": "رونوشت تصویر تهیه شد"
  },
  "notificationImageCopiedDetails": {
    "message": "عکس شما در کلیپ‌بورد رونوشت شد. $META_KEY$-V را برای جای‌گذاری فشار دهید.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "این تصویر برید شده است به $PIXELS$ پیکسل.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "خارج از سرویس."
  },
  "requestErrorDetails": {
    "message": "متاسفم! نتوانستیم عکس شما را ذخیره کنیم. لطفاً بعدا دوباره تلاش کنید."
  },
  "connectionErrorTitle": {
    "message": "نمی‌توانیم به تصاویر صفحه شما متصل شویم."
  },
  "connectionErrorDetails": {
    "message": "لطفا اتصال اینترنت خود را بررسی کنید. اگر قادر به اتصال به اینترنت هستید، ممکن است مشکلی موقتی در سرویس تصاویر صفحهٔ فایرفاکس وجود داشته باشد."
  },
  "loginErrorDetails": {
    "message": "به علت وجود مشکل در سرویس تصاویر صفحه فایرفاکس نتوانستیم عکس شما را ذخیره کنیم. لطفاً بعدا دوباره تلاش کنید."
  },
  "unshootablePageErrorTitle": {
    "message": "نمی‌توانیم از این صفحه تصویر بگیریم."
  },
  "unshootablePageErrorDetails": {
    "message": "این یک صفحه استاندارد وب نیست، بنابراین شما نمی‌توانید از آن تصویر بگیرید."
  },
  "selfScreenshotErrorTitle": {
    "message": "نمی‌توانید از صفحهٔ تصاویرِ فایرفاکس عکس بگیرید!"
  },
  "emptySelectionErrorTitle": {
    "message": "انتخاب شما خیلی کوچک است"
  },
  "privateWindowErrorTitle": {
    "message": "در حالت مرور خصوصی تصاویرصفحه غیرفعال است"
  },
  "privateWindowErrorDetails": {
    "message": "به خاطر مزاحمت متاسفیم. ما در حال کار روی این ویژگی برای انتشار‌های آینده هستیم."
  },
  "genericErrorTitle": {
    "message": "اوه! سرویس تصاویر صفحه فایرفاکس قاطی کرده."
  },
  "genericErrorDetails": {
    "message": "مطمئن نیستیم چه اتفاقی افتاده است. می‌خواهید دوباره امتحان کنید یا از یک صفحهٔ دیگر عکس بگیرید؟"
  },
  "tourBodyIntro": {
    "message": "بدون خارج شدن از فایرفاکس، عکس بگیرید، ذخیره کنید و به اشتراک بگذارید."
  },
  "tourHeaderPageAction": {
    "message": "روش جدیدی برای ذخیره کردن"
  },
  "tourBodyPageAction": {
    "message": "بازکردن صفحه اقدامات فهرست در آدرس بار هر زمانی که شما تمایل داشته باشید از صفحه عکس بگیرید."
  },
  "tourHeaderClickAndDrag": {
    "message": "ضبط آنچه شما می‌خواهید"
  },
  "tourBodyClickAndDrag": {
    "message": "کلیک کنید و بکشید تا فقط از قسمتی از صفحه عکس بگیرید. می‌توانید برای برجسته کردن روی ناحیه انتخاب شده حرکت کنید."
  },
  "tourHeaderFullPage": {
    "message": "ضبط پنجره یا کل صفحه‌ها"
  },
  "tourBodyFullPage": {
    "message": "برای گرفتن عکس از ناحیه قابل مشاهده در پنجره یا تمام صفحه از دکمه‌های بالا سمت راست استفاده کنید."
  },
  "tourHeaderDownloadUpload": {
    "message": "همانطور که می‌پسندید"
  },
  "tourBodyDownloadUpload": {
    "message": "عکس‌های بریده شده خود را برای به اشتراک‌گذاری راحت‌تر روی وب ذخیره کنید، یا آن‌ها را روی رایانه خود دریافت کنید. همچنین برای دیدن همهٔ عکس‌هایی که گرفتید می‌توانید روی دکمه «عکس‌های من» کلیک کنید."
  },
  "tourSkip": {
    "message": "رد کردن"
  },
  "tourNext": {
    "message": "اسلاید بعدی"
  },
  "tourPrevious": {
    "message": "اسلاید قبلی"
  },
  "tourDone": {
    "message": "انجام شد"
  },
  "termsAndPrivacyNotice2": {
    "message": "با استفاده از سرویس تصاویر صفحه فایرفاکس، شما با $TERMSANDPRIVACYNOTICETERMSLINK$ ما و $TERMSANDPRIVACYNOTICEPRIVACYLINK$ موافقت می‌کنید.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "شرایط"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "نکات حریم‌خصوصی"
  },
  "libraryLabel": {
    "message": "تصاویر صفحه"
  }
}PK
!<"�ǑDD&webextension/_locales/ff/messages.json{
  "addonDescription": {
    "message": "Ƴettu kilip walla nattal yaynirde rewrude e geese, ndaɗndaa ɗum e mudda walla e ko duumii."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "downloadOnlyNotice": {
    "message": "Ngonɗaa e oo sahaa ko e mbaydi Aawto-Tan."
  },
  "downloadOnlyDetails": {
    "message": "Leƴƴande kuurgal Firefox ina wayla ɗoon e ɗoon e mbaydi Aawto-Tan e ɗii ngonkaaji:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Nder henorde Banngogol Suturo."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cuukiije jiggaaɗe ɗee ndaaƴaama."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Woto siiftor aslol abadaa” hurminaama."
  },
  "copyScreenshot": {
    "message": "Natto"
  },
  "notificationImageCopiedTitle": {
    "message": "Natto ngoo nattaama"
  },
  "notificationImageCopiedDetails": {
    "message": "Natto maa nattaama e ɗakkitorde ndee. Ñoƴƴu $META_KEY$-V ngam ɗakkude.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  }
}PK
!<�=p�""&webextension/_locales/fi/messages.json{
  "addonDescription": {
    "message": "Ota leikkeitä ja kuvakaappauksia verkosta ja tallenna ne tilapäisesti tai pysyvästi."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Ota kuvakaappaus"
  },
  "myShotsLink": {
    "message": "Omat kaappaukset"
  },
  "screenshotInstructions": {
    "message": "Valitse alue vetämällä tai napsauttamalla sivua. Peruuta painamalla ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Tallenna"
  },
  "saveScreenshotVisibleArea": {
    "message": "Tallenna näkyvä alue"
  },
  "saveScreenshotFullPage": {
    "message": "Tallenna koko sivu"
  },
  "cancelScreenshot": {
    "message": "Peruuta"
  },
  "downloadScreenshot": {
    "message": "Lataa"
  },
  "downloadOnlyNotice": {
    "message": "Olet vain lataus -tilassa."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots vaihtuu automaattisesti vain lataus -tilaan, kun"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "käytetään yksityisen selaamisen ikkunaa"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "kolmannen osapuolen evästeet ovat estetty"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "”Ei mitään historiatietoja” on valittuna"
  },
  "downloadOnlyDetailsESR": {
    "message": "Käytät Firefox ESR:ää."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Verkkoon tallentaminen on poistettu käytöstä."
  },
  "notificationLinkCopiedTitle": {
    "message": "Linkki kopioitu"
  },
  "notificationLinkCopiedDetails": {
    "message": "Linkki kuvaasi on kopioitu leikepöydälle. Voit liittää sen painamalla $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopioi"
  },
  "notificationImageCopiedTitle": {
    "message": "Kaappaus kopioitu"
  },
  "notificationImageCopiedDetails": {
    "message": "Kaappauksesi on kopioitu leikepöydälle. Liitä se painamalla $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tämä kuva on rajattu $PIXELS$ kuvapisteeseen.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Epäkunnossa."
  },
  "requestErrorDetails": {
    "message": "Kuvan tallentaminen epäonnistui. Yritä myöhemmin uudestaan."
  },
  "connectionErrorTitle": {
    "message": "Emme saa yhteyttä kuvakaappauksiisi."
  },
  "connectionErrorDetails": {
    "message": "Tarkista internetyhteytesi. Jos olet yhteydessä internetiin, Firefox Screenshots -palvelussa voi olla tilapäinen häiriö."
  },
  "loginErrorDetails": {
    "message": "Emme pystyneet tallentamaan kuvaasi, koska Firefox Screenshots -palvelussa on ongelma. Yritä myöhemmin uudestaan."
  },
  "unshootablePageErrorTitle": {
    "message": "Tästä sivusta ei voi ottaa kuvaa."
  },
  "unshootablePageErrorDetails": {
    "message": "Tämä ei ole tavallinen verkkosivu, joten et voi ottaa kuvaa siitä."
  },
  "selfScreenshotErrorTitle": {
    "message": "Et voi ottaa kuvaa Firefox Screenshots -sivusta!"
  },
  "emptySelectionErrorTitle": {
    "message": "Valinta on liian pieni"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots ei ole käytettävisssä yksityisen selauksen tilassa"
  },
  "privateWindowErrorDetails": {
    "message": "Anteeksi häiriö. Tämä ominaisuus on vielä työn alla."
  },
  "genericErrorTitle": {
    "message": "Oho! Firefox Screenshots meni päin prinkkalaa."
  },
  "genericErrorDetails": {
    "message": "Emme oikein tiedä, mitä tapahtui. Haluatko yrittää uudestaan tai ottaa kuvan eri sivusta?"
  },
  "tourBodyIntro": {
    "message": "Ota, tallenna ja jaa kuvakaappaus poistumatta Firefoxista."
  },
  "tourHeaderPageAction": {
    "message": "Uusi tapa tallentaa"
  },
  "tourBodyPageAction": {
    "message": "Avaa osoitepalkissa oleva Sivun toiminnot -valikko milloin vain, kun haluat ottaa kuvakaappauksen."
  },
  "tourHeaderClickAndDrag": {
    "message": "Kaappaa mitä haluat"
  },
  "tourBodyClickAndDrag": {
    "message": "Kaappaa vain osa sivusta napsauttamalla ja vetämällä. Voit myös korostaa valinnan pitämällä hiirtä sen päällä."
  },
  "tourHeaderFullPage": {
    "message": "Kaappaa näkyvä alue tai kokonainen sivu"
  },
  "tourBodyFullPage": {
    "message": "Valitse oikean yläkulman painikkeista joko ikkunassa näkyvän alueen tai koko sivun kaappaus."
  },
  "tourHeaderDownloadUpload": {
    "message": "Haluamallasi tavalla"
  },
  "tourBodyDownloadUpload": {
    "message": "Tallenna rajaamasi kuvat verkkoon helpompaa jakamista varten tai lataa ne tietokoneellesi. Voit myös napsauttaa Omat kaappaukset -painiketta ja nähdä kaikki ottamasi kuvat."
  },
  "tourSkip": {
    "message": "OHITA"
  },
  "tourNext": {
    "message": "Seuraava sivu"
  },
  "tourPrevious": {
    "message": "Edellinen sivu"
  },
  "tourDone": {
    "message": "Valmis"
  },
  "termsAndPrivacyNotice2": {
    "message": "Käyttämällä Firefox Screenshots -ominaisuutta hyväksyt meidän $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "käyttöehdot"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "tietosuojakäytännön"
  },
  "libraryLabel": {
    "message": "Kuvakaappaukset"
  }
}PK
!<��--&webextension/_locales/fr/messages.json{
  "addonDescription": {
    "message": "Effectuez des captures d’écran sur le Web et sauvegardez-les de manière temporaire ou permanente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Effectuer une capture d’écran"
  },
  "myShotsLink": {
    "message": "Mes captures d’écran"
  },
  "screenshotInstructions": {
    "message": "Sélectionnez une zone de la page par cliquer-glisser ou en cliquant sur l’élément à sélectionner. Appuyez sur Échap pour annuler."
  },
  "saveScreenshotSelectedArea": {
    "message": "Enregistrer"
  },
  "saveScreenshotVisibleArea": {
    "message": "Capturer la zone visible"
  },
  "saveScreenshotFullPage": {
    "message": "Capturer la page complète"
  },
  "cancelScreenshot": {
    "message": "Annuler"
  },
  "downloadScreenshot": {
    "message": "Télécharger"
  },
  "downloadOnlyNotice": {
    "message": "Vous êtes actuellement dans un mode ne permettant que le téléchargement."
  },
  "downloadOnlyDetails": {
    "message": "Dans les situations suivantes, Firefox Screenshots permet uniquement les téléchargements :"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "lorsque vous naviguez en navigation privée."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "lorsque les cookies tiers sont désactivés."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "lorsque « Ne jamais conserver l’historique » est activé."
  },
  "downloadOnlyDetailsESR": {
    "message": "Vous utilisez Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "L’envoi de fichiers est désactivé."
  },
  "notificationLinkCopiedTitle": {
    "message": "Lien copié"
  },
  "notificationLinkCopiedDetails": {
    "message": "Le lien de votre capture a été copié dans le presse-papiers. Appuyez sur $META_KEY$-V pour le coller.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copier"
  },
  "notificationImageCopiedTitle": {
    "message": "Capture copiée"
  },
  "notificationImageCopiedDetails": {
    "message": "Votre capture a été copiée dans le presse-papiers. Appuyez sur $META_KEY$-V pour la coller.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Cette image a été rognée à $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Impossible d’effectuer cette action."
  },
  "requestErrorDetails": {
    "message": "Votre capture d’écran n’a pas pu être enregistrée. Veuillez réessayer plus tard."
  },
  "connectionErrorTitle": {
    "message": "Nous ne pouvons pas nous connecter à vos captures d’écran."
  },
  "connectionErrorDetails": {
    "message": "Veuillez vérifier votre connexion à Internet. Si celle-ci fonctionne normalement, il peut y avoir un problème temporaire avec le service de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nous n’avons pas pu enregistrer votre capture d’écran, car le service de Firefox Screenshot rencontre des difficultés. Veuillez réessayer plus tard."
  },
  "unshootablePageErrorTitle": {
    "message": "Impossible d’effectuer une capture de cette page."
  },
  "unshootablePageErrorDetails": {
    "message": "Impossible d’effectuer une capture d’écran, car cette page web n’est pas standard."
  },
  "selfScreenshotErrorTitle": {
    "message": "Vous ne pouvez pas effectuer une capture d’écran d’une page Firefox Screenshots."
  },
  "emptySelectionErrorTitle": {
    "message": "La zone sélectionnée est trop petite"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots est désactivé en mode de navigation privée"
  },
  "privateWindowErrorDetails": {
    "message": "Désolé pour la gêne occasionnée. Nous travaillons sur cette fonctionnalité pour de prochaines versions."
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshots semble avoir un problème."
  },
  "genericErrorDetails": {
    "message": "Un problème non identifié est survenu. Vous pouvez réessayer ou effectuer une capture d’écran d’une autre page."
  },
  "tourBodyIntro": {
    "message": "Effectuez des captures d’écran, enregistrez et partagez-les sans quitter Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Une nouvelle façon d’enregistrer ses captures"
  },
  "tourBodyPageAction": {
    "message": "Dès que vous voulez effectuer une capture d’écran, il vous suffit d’ouvrir le menu d’actions de la page, depuis la barre d’adresse."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capturez ce que vous voulez"
  },
  "tourBodyClickAndDrag": {
    "message": "Cliquez et glissez pour capturer seulement une partie de la page. Vous pouvez aussi survoler une zone avec votre curseur pour surligner votre sélection."
  },
  "tourHeaderFullPage": {
    "message": "Effectuez des captures d’écran de fenêtres ou de pages entières"
  },
  "tourBodyFullPage": {
    "message": "Utilisez les boutons en haut à droite pour capturer au choix la zone visible dans la fenêtre ou la page entière."
  },
  "tourHeaderDownloadUpload": {
    "message": "À votre guise"
  },
  "tourBodyDownloadUpload": {
    "message": "Sauvegardez en ligne vos captures recadrées pour les partager plus facilement, ou téléchargez-les sur votre ordinateur. Vous pouvez aussi cliquer sur « Mes captures d’écran » pour retrouver toutes vos captures."
  },
  "tourSkip": {
    "message": "IGNORER"
  },
  "tourNext": {
    "message": "Écran suivant"
  },
  "tourPrevious": {
    "message": "Écran précédent"
  },
  "tourDone": {
    "message": "Terminé"
  },
  "termsAndPrivacyNotice2": {
    "message": "En utilisant Firefox Screenshots, vous acceptez nos $TERMSANDPRIVACYNOTICETERMSLINK$ et notre $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "mentions légales"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "politique de confidentialité"
  },
  "libraryLabel": {
    "message": "Captures d’écran"
  }
}PK
!<(f�)webextension/_locales/fy_NL/messages.json{
  "addonDescription": {
    "message": "Meitsje skermôfdrukken of klips fan it web en bewarje se tydlik of permanint."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Skermôfdruk meitsje"
  },
  "myShotsLink": {
    "message": "Myn skermôfdrukken"
  },
  "screenshotInstructions": {
    "message": "Sleep of klik op de side om in gebiet te selektearjen. Druk op ESC om te annulearjen."
  },
  "saveScreenshotSelectedArea": {
    "message": "Bewarje"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sichtbere bewarje"
  },
  "saveScreenshotFullPage": {
    "message": "Folsleine side bewarje"
  },
  "cancelScreenshot": {
    "message": "Annulearje"
  },
  "downloadScreenshot": {
    "message": "Downloade"
  },
  "downloadOnlyNotice": {
    "message": "Jo binne op dit stuit yn Allinnich-downloademodus."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots wikselet yn de folgjende situaasjes automatysk nei Allinnich-downloademodus:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Yn in priveenavigaasjefinster."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies fan tredden útskeakele binne."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "‘Nea skiednis ûnthâlde’ ynskeakele is."
  },
  "downloadOnlyDetailsESR": {
    "message": "Jo brûke Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Oplaads binne útskeakele."
  },
  "notificationLinkCopiedTitle": {
    "message": "Keppeling kopiearre"
  },
  "notificationLinkCopiedDetails": {
    "message": "De keppeling nei jo skermôfdruk is nei it klamboerd kopiearre. Brûk $META_KEY$-V om te plakken.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiearje"
  },
  "notificationImageCopiedTitle": {
    "message": "Ofbylding kopiearre"
  },
  "notificationImageCopiedDetails": {
    "message": "Jo ôfbylding is nei it klamboerd kopiearre. Druk op $META_KEY$-V om te plakken.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Dizze ôfbylding is ferlytse nei $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Bûten tsjinst."
  },
  "requestErrorDetails": {
    "message": "Sorry! Wy koene jo skermôfdruk net bewarje. Probearje it letter nochris."
  },
  "connectionErrorTitle": {
    "message": "Wy kinne net ferbine nei jo skermôfdrukken."
  },
  "connectionErrorDetails": {
    "message": "Kontrolearje jo ynternetferbining. As jo wol ferbining meitsje kinne mei it ynternet, kin it wêze dat der tydlik in probleem is mei de tsjinst Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Wy koene jo skermôfdruk net bewarje, omdat der in probleem is mei de tsjinst Firefox Screenshots. Probearje it letter nochris."
  },
  "unshootablePageErrorTitle": {
    "message": "It is net mooglik in skermôfdruk fan dizze side te meitsjen."
  },
  "unshootablePageErrorDetails": {
    "message": "Dit is net in standert webside, dus jo kinne der net in skermôfdruk fan meitsje."
  },
  "selfScreenshotErrorTitle": {
    "message": "Jo kinne net in skermôfdruk meitsje fan in Firefox Screenshots-side!"
  },
  "emptySelectionErrorTitle": {
    "message": "Jo seleksje is te lyts"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots is útskeakele yn Priveenavigaasjemodus"
  },
  "privateWindowErrorDetails": {
    "message": "Sorry foar it ûngemak. Foar takomstige útjeften wurdt oan dizze funksje wurke."
  },
  "genericErrorTitle": {
    "message": "Oeps! Firefox Screenshots is yn 'e war."
  },
  "genericErrorDetails": {
    "message": "Wy binne net wis wat der krekt bard is. Wolle jo it nochris probearje of in skermôfdruk fan in oare side meitsje?"
  },
  "tourBodyIntro": {
    "message": "Meitsje, bewarje en diel skermôfdrukken sûnder Firefox te ferlitten."
  },
  "tourHeaderPageAction": {
    "message": "In nije manier om te bewarjen"
  },
  "tourBodyPageAction": {
    "message": "Klap it menu Side-aksjes yn de adresbalke út sa gau as jo in skermôfbylding meitsje wolle."
  },
  "tourHeaderClickAndDrag": {
    "message": "Fetsje wat jo wolle"
  },
  "tourBodyClickAndDrag": {
    "message": "Klik en sleep om in part fan in side te fetsjen. Jo kinne ek oer in gebiet gean om jo seleksje út te ljochtsjen."
  },
  "tourHeaderFullPage": {
    "message": "Fetsje finsters of folsleine websiden"
  },
  "tourBodyFullPage": {
    "message": "Selektearje knoppen rjochts boppe-oan om it sichtbere gebiet yn it finster te fetsjen, of fetsje in folsleine side."
  },
  "tourHeaderDownloadUpload": {
    "message": "Nei jo winsk"
  },
  "tourBodyDownloadUpload": {
    "message": "Bewarje jo byknippe skermôfdrukken nei it web om se maklik te dielen, of download se nei jo kompjûter. Jo kinne ek op de knop Myn skermôfdrukken klikke om al jo makke skermôfdrukken te finen."
  },
  "tourSkip": {
    "message": "Oerslaan"
  },
  "tourNext": {
    "message": "Folgjende ôfbylding"
  },
  "tourPrevious": {
    "message": "Foarige ôfbylding"
  },
  "tourDone": {
    "message": "Dien"
  },
  "termsAndPrivacyNotice2": {
    "message": "Troch Firefox Screenshots te brûken, gean jo akkoard mei ús $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Betingsten"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Privacyferklearring"
  },
  "libraryLabel": {
    "message": "Skermôfbyldingen"
  }
}PK
!<o{��uu)webextension/_locales/ga_IE/messages.json{
  "addonDescription": {
    "message": "Glac gearrthóga agus gabhálacha scáileáin ón Ghréasán agus sábháil iad, go sealadach nó go buan."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Glac Gabháil Scáileáin"
  },
  "myShotsLink": {
    "message": "Mo Chuid Gabhálacha"
  },
  "screenshotInstructions": {
    "message": "Tarraing nó cliceáil ar an leathanach chun réigiún a roghnú. Brúigh ESC le cealú."
  },
  "saveScreenshotSelectedArea": {
    "message": "Sábháil"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sábháil an réigiún infheicthe"
  },
  "saveScreenshotFullPage": {
    "message": "Sábháil an leathanach iomlán"
  },
  "cancelScreenshot": {
    "message": "Cealaigh"
  },
  "downloadScreenshot": {
    "message": "Íoslódáil"
  },
  "notificationLinkCopiedTitle": {
    "message": "Cóipeáladh an Nasc"
  },
  "notificationLinkCopiedDetails": {
    "message": "Cóipeáladh nasc leis an ngabháil go dtí an ghearrthaisce. Brúigh $META_KEY$-V lena ghreamú.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Tá rud éigin as alt."
  },
  "requestErrorDetails": {
    "message": "Ár leithscéal! Theip orainn an ghabháil a shábháil. Bain triail eile as ar ball."
  },
  "connectionErrorTitle": {
    "message": "Ní féidir linn ceangal le do chuid gabhálacha."
  },
  "connectionErrorDetails": {
    "message": "Deimhnigh go bhfuil tú ceangailte leis an Idirlíon. Mura bhfuil tú ceangailte, ní bheidh tú in ann úsáid a bhaint as seirbhís Gabhálacha Scáileáin Firefox."
  },
  "loginErrorDetails": {
    "message": "Níorbh fhéidir linn an ghabháil scáileáin a shábháil toisc gur tharla earráid le seirbhís Gabhálacha Scáileáin Firefox. Bain triail eile as ar ball."
  },
  "unshootablePageErrorTitle": {
    "message": "Ní féidir linn gabháil scáileáin a ghlacadh ar an leathanach seo."
  },
  "unshootablePageErrorDetails": {
    "message": "Ní féidir gabháil scáileáin a ghlacadh toisc nach gnáthleathanach Gréasáin é seo."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ní féidir leat gabháil scáileáin a ghlacadh ar leathanach Gabhálacha Scáileáin Firefox!"
  },
  "emptySelectionErrorTitle": {
    "message": "Roghnaigh tú réigiún róbheag"
  },
  "genericErrorTitle": {
    "message": "Úps! Tá Gabhálacha Scáileáin Firefox imithe sa fhraoch."
  },
  "genericErrorDetails": {
    "message": "Nílimid cinnte cad a tharla. An bhfuil fonn ort triail eile a bhaint as, nó gabháil scáileáin eile a ghlacadh?"
  },
  "tourBodyIntro": {
    "message": "Glac, sábháil, agus comhroinn gabhálacha scáileáin gan Firefox a fhágáil."
  },
  "tourHeaderClickAndDrag": {
    "message": "An rud atá uait a ghabháil"
  },
  "tourBodyClickAndDrag": {
    "message": "Cliceáil agus tarraing le cuid de leathanach a ghabháil. Nó is féidir leat an luch a chur os cionn an réigiúin le gabháil."
  },
  "tourHeaderFullPage": {
    "message": "Fuinneoga nó leathanaigh iomlána a ghabháil"
  },
  "tourBodyFullPage": {
    "message": "Úsáid na cnaipí ag barr na fuinneoige ar dheis chun an réigiún infheicthe san fhuinneog a ghabháil, nó an leathanach iomlán."
  },
  "tourHeaderDownloadUpload": {
    "message": "Go díreach mar is áil leat"
  },
  "tourBodyDownloadUpload": {
    "message": "Is féidir leat gabhálacha a bhearradh agus a shábháil ar an nGréasán, nó iad a íoslódáil ar do ríomhaire. Is féidir teacht orthu go léir leis an gcnaipe Mo Chuid Gabhálacha."
  },
  "tourSkip": {
    "message": "NÁ BAC LEIS"
  },
  "tourNext": {
    "message": "An chéad sleamhnán eile"
  },
  "tourPrevious": {
    "message": "An sleamhnán roimhe seo"
  },
  "tourDone": {
    "message": "Críochnaithe"
  },
  "termsAndPrivacyNotice2": {
    "message": "Má úsáideann tú Gabhálacha Scáileáin Firefox, glacann tú leis na $TERMSANDPRIVACYNOTICETERMSLINK$ agus leis an $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Téarmaí"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "bhFógra Príobháideachais"
  }
}PK
!<�ʁ$$)webextension/_locales/gu_IN/messages.json{
  "addonDescription": {
    "message": "વેબમાંથી ક્લિપ્સ અને સ્ક્રીનશૉટ્સ લો અને તેમને કામચલાઉ અથવા કાયમી રીતે સાચવો."
  },
  "addonAuthorsList": {
    "message": "Mozilla<[email protected]>"
  },
  "contextMenuLabel": {
    "message": "સ્ક્રીનશૉટ લેવા"
  },
  "myShotsLink": {
    "message": "મારા શોટ્સ"
  },
  "screenshotInstructions": {
    "message": "ખેંચો અથવા એક પ્રદેશ પસંદ કરવા માટે પાનાં પર ક્લિક કરો. રદ કરવા માટે ESC દબાવો."
  },
  "saveScreenshotSelectedArea": {
    "message": "સાચવો"
  },
  "saveScreenshotVisibleArea": {
    "message": "દૃશ્યમાન સાચવો"
  },
  "saveScreenshotFullPage": {
    "message": "સંપૂર્ણ પૃષ્ઠ સાચવો"
  },
  "cancelScreenshot": {
    "message": "રદ"
  },
  "downloadScreenshot": {
    "message": "ડાઉનલોડ"
  },
  "downloadOnlyNotice": {
    "message": "તમે હાલમા ફક્ત ડાઉનલોડ-કરો પ્રકારમાં છો."
  },
  "downloadOnlyDetails": {
    "message": "આ પરિસ્થિતિઓ માં Firefox સ્ક્રિનશોટસ આપમેળે જ ફક્ત-ડાઉનલોડ પ્રકારમાં જતું રહેશે:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "ખાનગી બ્રાઉઝિંગ વિન્ડો માં."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "અન્ય સ્થાનેથી કુકીઓનું વહન અક્ષમ કરેલું છે."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“ઇતિહાસ ક્યારેય ન સંભારવો” સક્ષમ કરેલુ છે."
  },
  "downloadOnlyDetailsESR": {
    "message": "તમે Firefox ESR નો ઉપયોગ કરી રહ્યા છો."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "અપલોડ્સ અક્ષમ કરવામાં આવ્યા છે."
  },
  "notificationLinkCopiedTitle": {
    "message": "લિંક કૉપિ"
  },
  "notificationLinkCopiedDetails": {
    "message": "તમારા શોટ માટે લિંક ક્લિપબોર્ડ પર કૉપિ કરવામાં આવ્યું છે. પ્રેસ $META_KEY$ -V પેસ્ટ કરવા માટે.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "નકલ કરો"
  },
  "notificationImageCopiedTitle": {
    "message": "શોટ નકલ કર્યો"
  },
  "notificationImageCopiedDetails": {
    "message": "તમારા શોટ ક્લિપબોર્ડ પર નકલ કરવામાં આવ્યાં છે. પેસ્ટ કરવા માટે $META_KEY$-V દબાવો.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "આ છબીને $PIXELS$px પર કાપવામાં આવી છે.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "હુકમ બહાર."
  },
  "requestErrorDetails": {
    "message": "માફ કરશો! અમે તમારા શોટ સાચવી શક્યા નથી. પછીથી ફરી પ્રયત્ન કરો."
  },
  "connectionErrorTitle": {
    "message": "અમે તમારા સ્ક્રીનશૉટ્સ ને કનેક્ટ થઈ શકતા નથી."
  },
  "connectionErrorDetails": {
    "message": "તમારું ઇન્ટરનેટ કનેક્શન તપાસો. તમે ઇન્ટરનેટથી કનેક્ટ કરવા માટે સક્ષમ છો, તો ત્યાં ફાયરફોક્સ સ્ક્રીનશોટ્સ સેવા સાથે એક અસ્થાયી સમસ્યા હોઈ શકે છે."
  },
  "loginErrorDetails": {
    "message": "અમે તમારા શોટ સાચવી શક્યા નથી કારણ કે Firefox સ્ક્રીનશોટ્સ સેવા સાથે એક સમસ્યા છે. પછીથી ફરી પ્રયત્ન કરો."
  },
  "unshootablePageErrorTitle": {
    "message": "અમે આ પૃષ્ઠ સ્ક્રીનશૉટ ન કરી શકીએ."
  },
  "unshootablePageErrorDetails": {
    "message": "આ એક પ્રમાણભૂત વેબ પૃષ્ઠ, જેથી તમે તેને એક સ્ક્રીનશૉટ ન લઈ શકો."
  },
  "selfScreenshotErrorTitle": {
    "message": "તમે પૃષ્ઠના Firefox સ્ક્રીનશોટ્સ શોટ લઇ શકો નહિ!"
  },
  "emptySelectionErrorTitle": {
    "message": "તમારી પસંદગી ખૂબ નાની છે"
  },
  "privateWindowErrorTitle": {
    "message": "ખાનગી બ્રાઉઝિંગ મોડમાં સ્ક્રીનશોટ અક્ષમ કરેલ છે"
  },
  "privateWindowErrorDetails": {
    "message": "અસુવીધી બદલ માફી. અમે ભવિષ્યના પ્રકાશનો માટે આ સુવિધા પર કામ કરી રહ્યા છીએ."
  },
  "genericErrorTitle": {
    "message": "થોભો! Firefox સ્ક્રીનશોટ્સ અવ્યવસ્થિત થઈ ગયા."
  },
  "genericErrorDetails": {
    "message": "અમે ખાતરી નથીકે શું માત્ર થયું છે . ફરી પ્રયાસ કરો અથવા એક અલગ પૃષ્ઠ એક શોટ લેવા માટે કાળજી કરો?"
  },
  "tourBodyIntro": {
    "message": "લેવા, સાચવેલા, અને વહેંચાયેલ સ્ક્રીનશૉટ્સ Firefox છોડ્યાં વિના."
  },
  "tourHeaderPageAction": {
    "message": "સાચવવાનો એક નવો રસ્તો"
  },
  "tourBodyPageAction": {
    "message": "જ્યારે પણ સ્ક્રીનશૉટ લેવા માંગો ત્યારે સરનામાં બારમાં પૃષ્ઠ ક્રિયાઓ મેનૂને વિસ્તૃત કરો."
  },
  "tourHeaderClickAndDrag": {
    "message": "કેદ કરો તમને જોઈએ તે"
  },
  "tourBodyClickAndDrag": {
    "message": "પાનાંના માત્ર એક ભાગ મેળવવા માટે ક્લિક કરો અને ખેંચો. તમે પણ તમારી પસંદગી પ્રકાશિત કરવા માટે હૉવર કરી શકો છો."
  },
  "tourHeaderFullPage": {
    "message": "વિન્ડોઝ અથવા સમગ્ર પાના કેદ કરો"
  },
  "tourBodyFullPage": {
    "message": "ઉપર જમણા બટનો પસંદ કરો વિન્ડોમાં દૃશ્યમાન વિસ્તાર મેળવવા માટે અથવા આખુ પાનું કેપ્ચર કરવા માટે."
  },
  "tourHeaderDownloadUpload": {
    "message": "તમને જે ગમે"
  },
  "tourBodyDownloadUpload": {
    "message": "સરળ શેરિંગ માટે વેબ પર તમારા કપાઈ શોટ સાચવો, અથવા તેમને તમારા કમ્પ્યુટર પર ડાઉનલોડ કરો. તમે બધા શોટ મેળવવા માટે મારું શોટ્સ બટન પર ક્લિક કરી પણ શકો છો બધા શોટ તમે લીધેલા શોધવા માટે."
  },
  "tourSkip": {
    "message": "છોડવા"
  },
  "tourNext": {
    "message": "આગલી સ્લાઇડ"
  },
  "tourPrevious": {
    "message": "પહેલાની સ્લાઇડ"
  },
  "tourDone": {
    "message": "થઈ ગયું"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox સ્ક્રિનશોટનો ઉપયોગ કરીને, તમે અમારી સાથે સંમત થાઓ છો $TERMSANDPRIVACYNOTICETERMSLINK$ અને $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "શરતો"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ખાનગી સૂચના"
  },
  "libraryLabel": {
    "message": "સ્ક્રીનશૉટ્સ"
  }
}PK
!<!�
��&webextension/_locales/he/messages.json{
  "addonDescription": {
    "message": "יצירת צילומי מסך של דפי אינטרנט ושמירה שלהם באופן זמני או קבוע."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "צילום מסך"
  },
  "myShotsLink": {
    "message": "צילומי המסך שלי"
  },
  "screenshotInstructions": {
    "message": "נא לגרור או ללחוץ על הדף כדי לבחור תחום או על ESC לביטול."
  },
  "saveScreenshotSelectedArea": {
    "message": "שמירה"
  },
  "saveScreenshotVisibleArea": {
    "message": "שמירת התחום המוצג"
  },
  "saveScreenshotFullPage": {
    "message": "שמירת הדף במלואו"
  },
  "cancelScreenshot": {
    "message": "ביטול"
  },
  "downloadScreenshot": {
    "message": "הורדה"
  },
  "notificationLinkCopiedTitle": {
    "message": "הקישור הועתק"
  },
  "notificationLinkCopiedDetails": {
    "message": "הקישור לתמונה שלך הועתק ללוח. נא ללחוץ על $META_KEY$-V כדי להדביק.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "לא תקין."
  },
  "requestErrorDetails": {
    "message": "אנו מצטערים, אך לא ניתן היה לשמור את התמונה. נא לנסות שוב מאוחר יותר."
  },
  "connectionErrorTitle": {
    "message": "לא ניתן היה להתחבר אל מאגר צילומי המסך שלך."
  },
  "connectionErrorDetails": {
    "message": "נא לבדוק את החיבור לאינטרנט. אם הצלחת להתחבר לאינטרנט כנראה שקיימת תקלה זמנית עם שירות Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "אין אפשרות לשמור את צילום המסך שלך כיוון שישנה תקלה עם שירות Firefox Screenshots. נא לנסות שוב מאוחר יותר."
  },
  "unshootablePageErrorTitle": {
    "message": "לא ניתן לצלם דף זה."
  },
  "unshootablePageErrorDetails": {
    "message": "דף זה אינו דף אינטרנט תקני, ולכן לא ניתן היה לצלם אותו."
  },
  "selfScreenshotErrorTitle": {
    "message": "לא ניתן לצלם את הדף של Firefox Screenshot עצמו!"
  },
  "emptySelectionErrorTitle": {
    "message": "הבחירה שלך קטנה מידי"
  },
  "privateWindowErrorTitle": {
    "message": "‏Screenshots מנוטרל במצב גלישה פרטית"
  },
  "privateWindowErrorDetails": {
    "message": "מצטערים על אי הנוחות. אנחנו עובדים על תכונה זו בגרסאות עתידיות."
  },
  "genericErrorTitle": {
    "message": "אויש! Firefox Screenshots ירד מהפסים."
  },
  "genericErrorDetails": {
    "message": "אנחנו לא בטוחים מה קרה פה הרגע. אכפת לך לנסות שוב או לצלם דף אחר?"
  },
  "tourBodyIntro": {
    "message": "צילום, שמירה ושיתוף של צילומי מסך מבלי לעזוב את Firefox."
  },
  "tourHeaderPageAction": {
    "message": "דרך חדשה לשמירה"
  },
  "tourHeaderClickAndDrag": {
    "message": "לצלם רק את מה שנחוץ לך"
  },
  "tourBodyClickAndDrag": {
    "message": "ניתן ללחוץ ולגרור כדי לצלם רק מקטע מהעמוד. ניתן גם לרחף מעל כדי לסמן את הבחירה שלך."
  },
  "tourHeaderFullPage": {
    "message": "לצלם חלונות או דפים שלמים"
  },
  "tourBodyFullPage": {
    "message": "בחרו בכפתורים שבחלק העליון כדי לצלם את האזור הגלוי בחלון או כדי לצלם את הדף כולו."
  },
  "tourHeaderDownloadUpload": {
    "message": "לפי טעמך"
  },
  "tourBodyDownloadUpload": {
    "message": "שמירת הצילומים החתוכים שלך לאחסון מקוון לצורך שיתוף פשוט יותר, או להוריד אותם למחשב שלך. ניתן גם ללחוץ על כפתור הצילומים שלי כדי למצוא את כל הצילומים שצילמת."
  },
  "tourSkip": {
    "message": "דילוג"
  },
  "tourNext": {
    "message": "השקופית הבאה"
  },
  "tourPrevious": {
    "message": "השקופית הקודמת"
  },
  "tourDone": {
    "message": "סיום"
  },
  "termsAndPrivacyNotice2": {
    "message": "השימוש ב־Firefox Screenshots מהווה הסכמה ל$TERMSANDPRIVACYNOTICETERMSLINK$ ול$TERMSANDPRIVACYNOTICEPRIVACYLINK$ שלנו.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "תנאים"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "הצהרת פרטיות"
  },
  "libraryLabel": {
    "message": "צילומי מסך"
  }
}PK
!<R�F8  )webextension/_locales/hi_IN/messages.json{
  "addonDescription": {
    "message": "वेब से फ़ोटो और स्क्रीनशॉट लें और उन्हें अस्थायी या स्थायी रूप से सहेजें."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "स्क्रीनशॉट लें"
  },
  "myShotsLink": {
    "message": "मेरे चित्र"
  },
  "screenshotInstructions": {
    "message": "किसी क्षेत्र को चुनने के लिए पृष्ठ पर खींचें या क्लिक करें. रद्द करने के लिए ESC दबाएँ."
  },
  "saveScreenshotSelectedArea": {
    "message": "सहेजें"
  },
  "saveScreenshotVisibleArea": {
    "message": "दृश्यमान सहेजें"
  },
  "saveScreenshotFullPage": {
    "message": "पूर्ण पृष्ठ सहेजें"
  },
  "cancelScreenshot": {
    "message": "रद्द करें"
  },
  "downloadScreenshot": {
    "message": "डाउनलोड करें"
  },
  "downloadOnlyNotice": {
    "message": "आप अभी केवल-डाउनलोड मोड में हैं."
  },
  "downloadOnlyDetailsPrivate": {
    "message": "एक निजी ब्राउज़िंग विंडो में."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "तृतीय-पक्ष कुकीज़ अक्षम हैं."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“कभी इतिहास याद न रखें” सक्षम है."
  },
  "downloadOnlyDetailsESR": {
    "message": "आप Firefox ESR का उपयोग कर रहे हैं."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "अपलोड अक्षम कर दिए गए हैं."
  },
  "notificationLinkCopiedTitle": {
    "message": "लिंक की नक़ल की गयी"
  },
  "notificationLinkCopiedDetails": {
    "message": "आपके शॉट के लिंक क्लिपबोर्ड पर कॉपी किए गए हैं. पेस्ट करने के लिए $META_KEY$-V दबाएँ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "इस छवि को $PIXELS$px में छोटा किया गया है.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "कार्यरत नहीं है."
  },
  "requestErrorDetails": {
    "message": "क्षमा करें! हम आपके शॉट को सहेज़ नहीं सके. कृपया बाद में पुन: प्रयास करें."
  },
  "connectionErrorTitle": {
    "message": "हम आपके स्क्रीनशॉट से जुड़ नहीं सकते हैं."
  },
  "connectionErrorDetails": {
    "message": "कृपया अपने इंटरनेट संपर्क की जाँच करें. यदि आप इंटरनेट से जुड़ने में सक्षम हैं, तो Firefox स्क्रीनशॉट सेवा के साथ एक अस्थायी समस्या हो सकती है."
  },
  "loginErrorDetails": {
    "message": "हम आपका शॉट सहेज नहीं सके क्योंकि Firefox स्क्रीनशॉट सेवा में कोई समस्या है. कृपया बाद में पुन: प्रयास करें."
  },
  "unshootablePageErrorTitle": {
    "message": "हम इस पृष्ठ का स्क्रीनशॉट नहीं ले सकते."
  },
  "unshootablePageErrorDetails": {
    "message": "यह एक मानक वेब पेज नहीं है, इसलिए आप इसका स्क्रीनशॉट नहीं ले सकते."
  },
  "selfScreenshotErrorTitle": {
    "message": "आप एक Firefox स्क्रीनशॉट पृष्ठ का शॉट नहीं ले सकते!"
  },
  "emptySelectionErrorTitle": {
    "message": "आपका चयन बहुत छोटा है"
  },
  "privateWindowErrorTitle": {
    "message": "निजी ब्राउज़िंग मोड में स्क्रीनशॉट निष्क्रिय कर दिया गया हैं"
  },
  "privateWindowErrorDetails": {
    "message": "असुविधा के लिए खेद हैं. हमलोग भविष्य संस्करण के लिए इस सुविधा पर काम कर रहे हैं."
  },
  "genericErrorTitle": {
    "message": "ओह! Firefox स्क्रीनशॉट बिगड़ गया."
  },
  "genericErrorDetails": {
    "message": "हम सुनिश्चित नहीं हैं कि अभी क्या हुआ. पुन: प्रयास या एक भिन्न पृष्ठ का एक शॉट लेना चाहते हैं?"
  },
  "tourBodyIntro": {
    "message": "Firefox छोड़े बिना स्क्रीनशॉट लें, सहेजें, और साझा करें."
  },
  "tourHeaderPageAction": {
    "message": "सहेजने का एक नया तरीका"
  },
  "tourHeaderClickAndDrag": {
    "message": "जो आप चाहते हैं उसे कैद करें"
  },
  "tourBodyClickAndDrag": {
    "message": "पृष्ठ के बस एक हिस्से को कैद करने के लिए क्लिक करें और खींचें. आप अपने चयन को हाइलाइट करने के लिए भी जा सकते हैं."
  },
  "tourHeaderFullPage": {
    "message": "विंडोज़ या संपूर्ण पृष्ठों को कैद करें"
  },
  "tourBodyFullPage": {
    "message": "विंडो में दिखाई देने वाले क्षेत्र या एक पूरे पृष्ठ को कैद करने के लिए ऊपर में दाहिनी तरफ़ के बटन का चयन करें."
  },
  "tourHeaderDownloadUpload": {
    "message": "जैसा आप इसे चाहते हैं"
  },
  "tourBodyDownloadUpload": {
    "message": "आसानी से साझा करने या उन्हें अपने कंप्यूटर पर डाउनलोड करने के लिए अपने क्रॉप किये गये शॉट को वेब पर सहेजें. आपके द्वारा लिए गये सभी शॉट्स को ढूंढने के लिए आप मेरे शॉट्स बटन पर भी क्लिक कर सकते हैं."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "अगली स्लाइड"
  },
  "tourPrevious": {
    "message": "पिछली स्लाइड"
  },
  "tourDone": {
    "message": "पूर्ण"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox स्क्रीनशॉट्स का उपयोग करके, आप हमारी $TERMSANDPRIVACYNOTICETERMSLINK$ और $TERMSANDPRIVACYNOTICEPRIVACYLINK$ से सहमत हैं.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "शर्तें"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "गोपनीयता सूचना"
  },
  "libraryLabel": {
    "message": "स्क्रीनशॉट"
  }
}PK
!<"����&webextension/_locales/hr/messages.json{
  "addonDescription": {
    "message": "Snimite ili slikajte stvari s Weba te ih spremite privremeno ili trajno."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Snimi zaslon"
  },
  "myShotsLink": {
    "message": "Moje snimke"
  },
  "screenshotInstructions": {
    "message": "Povucite ili kliknite na stranicu kako biste izabrali područje. Pritisnite ESC za otkazivanje radnje."
  },
  "saveScreenshotSelectedArea": {
    "message": "Spremi"
  },
  "saveScreenshotVisibleArea": {
    "message": "Spremi vidljivo"
  },
  "saveScreenshotFullPage": {
    "message": "Spremi cijelu stranicu"
  },
  "cancelScreenshot": {
    "message": "Otkaži"
  },
  "downloadScreenshot": {
    "message": "Preuzmi"
  },
  "notificationLinkCopiedTitle": {
    "message": "Poveznica je kopirana"
  },
  "notificationLinkCopiedDetails": {
    "message": "Poveznica do vaše snimke je kopirana u međuspremnik. Pristinite $META_KEY$-V da ju zalijepite.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ne radi."
  },
  "requestErrorDetails": {
    "message": "Ups! Nismo uspjeli spremiti vašu snimku. Molimo pokušajte ponovo kasnije."
  },
  "connectionErrorTitle": {
    "message": "Ne možemo se spojiti s vašim snimkama."
  },
  "connectionErrorDetails": {
    "message": "Molimo provjerite vašu internet vezu. Ako ste uspješno povezani s internetom, možda postoji privremeni problem sa uslugama Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nismo uspjeli spremiti vaš snimak zbog toga što postoji problem sa uslugama Firefox Screenshots. Molimo pokušajte kasnije."
  },
  "unshootablePageErrorTitle": {
    "message": "Ovu stranicu ne možemo snimiti."
  },
  "unshootablePageErrorDetails": {
    "message": "Ovo nije standardna Web stranica stoga ju ne možete snimiti."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ne možete snimiti Firefox Screenshots stranicu!"
  },
  "emptySelectionErrorTitle": {
    "message": "Vaš odabir je premalen"
  },
  "privateWindowErrorTitle": {
    "message": "Snimke ekrana su onemogućene u načinu privatnog pretraživanja"
  },
  "privateWindowErrorDetails": {
    "message": "Žao nam je na neugodnosti. Radimo na ovoj mogućnosti za buduća izdanja."
  },
  "genericErrorTitle": {
    "message": "Uf! Firefox Screenshots se zbrkao."
  },
  "genericErrorDetails": {
    "message": "Nismo sigurno što se upravo dogodilo. Možete li pokušati ponovno ili snimiti drukčiju stranicu?"
  },
  "tourBodyIntro": {
    "message": "Snimite, spremite i dijelite snimke bez da napuštate Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Novi način za spremanje"
  },
  "tourBodyPageAction": {
    "message": "Proširite izbornik radnji stranice u adresnoj traci svaki puta kada želite snimiti ekran."
  },
  "tourHeaderClickAndDrag": {
    "message": "Snimite ono što želite"
  },
  "tourBodyClickAndDrag": {
    "message": "Kliknite i povucite ako želite snimiti samo dio stranice. Također možete označiti vaš odabir tako da preko njega stavite pokazivač miša."
  },
  "tourHeaderFullPage": {
    "message": "Baš kako vam se sviđa"
  },
  "tourBodyFullPage": {
    "message": "Spremite vaše odrezane snimke na Web kako biste ih jednostavnije dijelili, ili ih jednostavno skinite na vaše računalo. Također možete kliknuti gumb Moje snimke kako biste pronašli sve vaše dosadašnje snimke."
  },
  "tourHeaderDownloadUpload": {
    "message": "Snimajte prozore ili cijele stranice"
  },
  "tourBodyDownloadUpload": {
    "message": "Odaberite gumbove na gornjem desnom kutu kako biste snimili vidljivo područje u prozoru ili cijelu stranicu."
  },
  "tourSkip": {
    "message": "PRESKOČI"
  },
  "tourNext": {
    "message": "Sljedeći slajd"
  },
  "tourPrevious": {
    "message": "Prijašnji slajd"
  },
  "tourDone": {
    "message": "Gotovo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Koristeći Firefox Screenshots slažete se s našim $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Uvjeti"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Pravila o privatnosti"
  },
  "libraryLabel": {
    "message": "Snimke ekrana"
  }
}PK
!<�g:�'webextension/_locales/hsb/messages.json{
  "addonDescription": {
    "message": "Wzmiće klipy a fota wobrazowki z weba a składujće je nachwilu abo na přeco."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Foto wobrazowki činić"
  },
  "myShotsLink": {
    "message": "Moje fota wobrazowki"
  },
  "screenshotInstructions": {
    "message": "Ćehńće abo klikńće na stronu, zo byšće wobwod wubrał. Tłóčće na ESC, zo byšće přetorhnył."
  },
  "saveScreenshotSelectedArea": {
    "message": "Składować"
  },
  "saveScreenshotVisibleArea": {
    "message": "Widźomny wobwod składować"
  },
  "saveScreenshotFullPage": {
    "message": "Cyłu stronu składować"
  },
  "cancelScreenshot": {
    "message": "Přetorhnyć"
  },
  "downloadScreenshot": {
    "message": "Sćahnyć"
  },
  "downloadOnlyNotice": {
    "message": "Tuchwilu sće w modusu „Jenož sćahnyć“."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots w slědowacych situacijach awtomatisce do modusa „Jenož sćahnyć“ přepina:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "W priwatnym woknje."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Placki třećich poskićowarjow su znjemóžnjene."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "„Sej historiju ženje njespomjatkować“ je zmóžnjene."
  },
  "downloadOnlyDetailsESR": {
    "message": "Wužiwaće Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Nahraća su znjemóžnjene."
  },
  "notificationLinkCopiedTitle": {
    "message": "Wotkaz kopěrowany"
  },
  "notificationLinkCopiedDetails": {
    "message": "Wotkaz k wašemu fotu wobrazowki je so do mjezyskłada kopěrował. Tłóčće $META_KEY$-V, zo byšće jón zasadźił.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopěrować"
  },
  "notificationImageCopiedTitle": {
    "message": "Foto kopěrowane"
  },
  "notificationImageCopiedDetails": {
    "message": "Waše foto je so do mjezyskłada kopěrowało. Tłóčće $META_KEY$-V, zo byšće jo zasadźił.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tutón wobraz je so na $PIXELS$px přitřihał.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Skóncowany."
  },
  "requestErrorDetails": {
    "message": "Bohužel njemóžachmy waše foto wobrazowki składować. Prošu spytajće pozdźišo hišće raz."
  },
  "connectionErrorTitle": {
    "message": "Njemóžemy z wašimi fotami wobrazowki zwjazać."
  },
  "connectionErrorDetails": {
    "message": "Prošu přepruwujće swój internetny zwisk. Jeli móžeće z internetom zwjazać, je snano nachwilny problem ze słužbu Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Njemóžachmy swoje foto wobrazowki składować, dokelž je problem ze słužbu Firefox Screenshots. Prošu spytajće pozdźišo hišće raz."
  },
  "unshootablePageErrorTitle": {
    "message": "Foto wobrazowki tuteje strony móžne njeje."
  },
  "unshootablePageErrorDetails": {
    "message": "To standardna webstrona njeje, tohodla foto wobrazowki wot njeje móžne njeje."
  },
  "selfScreenshotErrorTitle": {
    "message": "Njemóžeće wobrazowku strony Firefox Screenshots fotografować!"
  },
  "emptySelectionErrorTitle": {
    "message": "Waš wuběr je přemały"
  },
  "privateWindowErrorTitle": {
    "message": "Firefox Screenshots je w priwatnym modusu znjemóžnjeny"
  },
  "privateWindowErrorDetails": {
    "message": "Wodajće prošu njepřijomnosće. Dźěłamy na tutej funkciji za přichodne wersije."
  },
  "genericErrorTitle": {
    "message": "Hopla! Firefox Screenshots njefunguje."
  },
  "genericErrorDetails": {
    "message": "Njejsmy sej wěsći, štož je so stało. Chceće hišće raz spytać abo chceće druhu stronu fotografować?"
  },
  "tourBodyIntro": {
    "message": "Čińće, składujće a dźělće fota wobrazowki bjez toho, zo byšće Firefox wopušćił."
  },
  "tourHeaderPageAction": {
    "message": "Nowe wašnje składowanja"
  },
  "tourBodyPageAction": {
    "message": "Wočińće meni akcijow strony w adresowym polu kóždy raz, hdyž chceće foto wobrazowki činić."
  },
  "tourHeaderClickAndDrag": {
    "message": "Fotografujće prosće, štož chceće"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikńće a ćehńće, zo byšće dźěl strony fotografował. Móžeće tež pokazowak myški nad nim pohibować, zo byšće swój wuběr wuzběhnył."
  },
  "tourHeaderFullPage": {
    "message": "Wokna abo cyłe strony składować"
  },
  "tourBodyFullPage": {
    "message": "Wubjerće tłóčatka horjeka naprawo, zo byšće widźomny wobwod we woknje abo cyłu stronu fotografować."
  },
  "tourHeaderDownloadUpload": {
    "message": "Tak, kaž so wam spodoba"
  },
  "tourBodyDownloadUpload": {
    "message": "Składujće swoje přitřihane fota wobrazowki w interneće, zo byšće je lóšo dźělił, abo sćehńće je na swój ličak. Móžeće tež na tłóčatko „Moje fota wobrazowki“ kliknyć, zo byšće wšě fota wobrazowki namakał, kotrež sće činił."
  },
  "tourSkip": {
    "message": "Přeskočić"
  },
  "tourNext": {
    "message": "Přichodne foto"
  },
  "tourPrevious": {
    "message": "Předchadne foto"
  },
  "tourDone": {
    "message": "Hotowo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Přez wužiwanje Firefox ScreenShots, zwoliće do našich $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Screenshots.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Wuměnjenja"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Pokaz priwatnosće"
  },
  "libraryLabel": {
    "message": "Fota wobrazowki"
  }
}PK
!<;�H�\\&webextension/_locales/hu/messages.json{
  "addonDescription": {
    "message": "Készítsen videoklipeket és képernyőképeket a webről, és mentse őket ideiglenesen vagy véglegesen."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Készítsen képernyőképet"
  },
  "myShotsLink": {
    "message": "Az Ön képei"
  },
  "screenshotInstructions": {
    "message": "Húzza, vagy kattintson a lapra a terület kiválasztásához. Nyomjon ESC-t a megszakításhoz."
  },
  "saveScreenshotSelectedArea": {
    "message": "Mentés"
  },
  "saveScreenshotVisibleArea": {
    "message": "Láthatóak mentése"
  },
  "saveScreenshotFullPage": {
    "message": "Teljes oldal mentése"
  },
  "cancelScreenshot": {
    "message": "Mégse"
  },
  "downloadScreenshot": {
    "message": "Letöltés"
  },
  "downloadOnlyNotice": {
    "message": "Jelenleg csak letöltési módban van."
  },
  "downloadOnlyDetails": {
    "message": "A Firefox Screenshots ezekben az esetekben automatikusan csak letöltési módba vált:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Privát böngészési ablakban."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Ha a harmadik féltől származó sütik tiltottak."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "A „Soha ne jegyezze meg az előzményeket” engedélyezett."
  },
  "downloadOnlyDetailsESR": {
    "message": "Firefox ESR-t használ."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "A feltöltések le lettek tiltva."
  },
  "notificationLinkCopiedTitle": {
    "message": "Hivatkozás másolva"
  },
  "notificationLinkCopiedDetails": {
    "message": "A képernyőképre mutató hivatkozás a vágólapra lett másolva. Nyomjon $META_KEY$-V-t a beillesztéshez.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Másolás"
  },
  "notificationImageCopiedTitle": {
    "message": "Képernyőkép másolva"
  },
  "notificationImageCopiedDetails": {
    "message": "A képernyőkép a vágólapra lett másolva. Nyomjon $META_KEY$-V-t a beillesztéshez.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "A kép $PIXELS$px méretűre lett vágva.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Nem működik."
  },
  "requestErrorDetails": {
    "message": "Bocsánat! Nem tudtuk menteni a képet. Próbálkozzon később."
  },
  "connectionErrorTitle": {
    "message": "Nem tudunk kapcsolódni a képernyőképekhez."
  },
  "connectionErrorDetails": {
    "message": "Ellenőrizze az internetkapcsolatot. Ha tud kapcsolódni az internetre, akkor lehet, hogy ideiglenes probléma van a Firefox képernyőképek szolgáltatással."
  },
  "loginErrorDetails": {
    "message": "Nem tudtuk elmenteni a képét, mert probléma lépett fel a Firefox képernyőképek szolgáltatással. Próbálja újra később."
  },
  "unshootablePageErrorTitle": {
    "message": "Nem lehet képet készíteni erről a lapról."
  },
  "unshootablePageErrorDetails": {
    "message": "Ez egy nem szabványos weblap, így nem készíthet róla képernyőképet."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nem készíthet képet a Firefox Screenshots oldalról!"
  },
  "emptySelectionErrorTitle": {
    "message": "A kijelölés túl kicsi"
  },
  "privateWindowErrorTitle": {
    "message": "A képernyőképek le vannak tiltva Privát böngészésben"
  },
  "privateWindowErrorDetails": {
    "message": "Sajnáljuk a kényelmetlenséget. Dolgozunk ezen a funkción a jövőbeli kiadásokhoz."
  },
  "genericErrorTitle": {
    "message": "Húha! A Firefox Screenshots megkergült."
  },
  "genericErrorDetails": {
    "message": "Nem vagyunk benne biztosak, hogy mi történt. Próbálja újra, vagy készítsen képet egy másik oldalról."
  },
  "tourBodyIntro": {
    "message": "Készítsen, mentsen és osszon meg képernyőképeket, anélkül, hogy elhagyná a Firefoxot."
  },
  "tourHeaderPageAction": {
    "message": "A mentés új módja"
  },
  "tourBodyPageAction": {
    "message": "Nyissa le a lapműveletek menüt a címsávban bármikor, ha képernyőképet akar készíteni."
  },
  "tourHeaderClickAndDrag": {
    "message": "Csak azt mentse, amit szeretne"
  },
  "tourBodyClickAndDrag": {
    "message": "Kattintson és húzzon, hogy csak a lap egy részét mentse el. Vagy csak rá is mutathat a kijelöléshez."
  },
  "tourHeaderFullPage": {
    "message": "Mentsen ablakokat vagy teljes lapokat"
  },
  "tourBodyFullPage": {
    "message": "Válassza a jobb felső sarokban lévő gombokat, hogy egy látható területet mentsen az ablakból, vagy elmentsen egy teljes oldalt."
  },
  "tourHeaderDownloadUpload": {
    "message": "Ahogy tetszik"
  },
  "tourBodyDownloadUpload": {
    "message": "Mentse a kivágott képeket a webre a könnyebb megosztáshoz, vagy töltse le a számítógépére. Rá is kattinthat a Képernyőképek gombra, hogy megtalálja az összes képét."
  },
  "tourSkip": {
    "message": "Kihagyás"
  },
  "tourNext": {
    "message": "Következő dia"
  },
  "tourPrevious": {
    "message": "Előző dia"
  },
  "tourDone": {
    "message": "Kész"
  },
  "termsAndPrivacyNotice2": {
    "message": "A Firefox képernyőképek használatával, Ön beleegyezik a $TERMSANDPRIVACYNOTICETERMSLINK$ és $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Feltételekbe"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Adatvédelmi nyilatkozatba"
  },
  "libraryLabel": {
    "message": "Képernyőképek"
  }
}PK
!<�|'��)webextension/_locales/hy_AM/messages.json{
  "addonDescription": {
    "message": "Ստացեք հոլովակներ և էկրանի հանույթներ վեբից և պահպանեք դանք ժամանակավոր կամ մշտապես:"
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Ստանալ էկրանի հանույթը"
  },
  "myShotsLink": {
    "message": "Իմ պատկերները"
  },
  "screenshotInstructions": {
    "message": "Քաշեք և սեղմեք էջի վրա՝ ընտրելու տարածքը: Սեղմեք ESC՝ չեղարկելու համար:"
  },
  "saveScreenshotSelectedArea": {
    "message": "Պահպանել"
  },
  "saveScreenshotVisibleArea": {
    "message": "Պահպանելի տեսանելի"
  },
  "saveScreenshotFullPage": {
    "message": "Պահպանել ամբողջ էջը"
  },
  "cancelScreenshot": {
    "message": "Չեղարկել"
  },
  "downloadScreenshot": {
    "message": "Ներբեռնել"
  },
  "notificationLinkCopiedTitle": {
    "message": "Հղումը պատճենվել է"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ձեր պատկերի հղումը պատճենվել է: Սեղմեք $META_KEY$-V՝ այն տեղադրելու համար:",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Անսարք:"
  },
  "requestErrorDetails": {
    "message": "Ցավոք մենք չենք կարող պահպանել պատկեր: Կրկին փորձեք ավելի ուշ:"
  },
  "connectionErrorTitle": {
    "message": "Հնարավոր չէ ապակցել էկրանի ձեր հանույթներին:"
  },
  "connectionErrorDetails": {
    "message": "Խնդրում ենք ստուգել համացանցային կապակցումը: Եթե մուտք չունեք համացանց՝ հնարավոր է՝ դա Firefox Screenshots ծառայության հետ կապված ժամանակավոր խնդիր է:"
  },
  "loginErrorDetails": {
    "message": "Մենք չենք կարող պահպանել ձեր պատկերը, քանի որ խնդիր կա Firefox Screenshots ծառայության հետ: Փորձեք ավելի ուշ:"
  },
  "unshootablePageErrorTitle": {
    "message": "Հնարավոր չէ ստանալ էկրանի հանույթը:"
  },
  "unshootablePageErrorDetails": {
    "message": "Սա ստանդարտ վեբ էջ չէ, ուստի դուք չեք կարող ստանալ դրա հանույթը:"
  },
  "selfScreenshotErrorTitle": {
    "message": "Դուք չեք կարող ստանալ Firefox Screenshots-ի էջի հանույթը:"
  },
  "emptySelectionErrorTitle": {
    "message": "Ընտրվածը քիչ է"
  },
  "privateWindowErrorTitle": {
    "message": "Էկրանի հանույթը անջատած է Գաղտնի Դիտարկման կերպում:"
  },
  "privateWindowErrorDetails": {
    "message": "Ներողություն անհարմարության համար: Մենք աշխատում ենք այս յուրահատկության վրա:"
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshots-ը գնաց գլխիվայր:"
  },
  "genericErrorDetails": {
    "message": "Մենք վստահ չենք, թե ինչ է տեղի ունեցնել: Կրկին փորձեք կամ փորձեք ստանալ մեկ այլ էջի հանույթ:"
  },
  "tourBodyIntro": {
    "message": "Ստացեք, պահպանեք և համօգտագործեք էկրանի հանույթները՝ առանց Firefox-ը լքելու:"
  },
  "tourHeaderPageAction": {
    "message": "Պահպանելու նոր ճանապարհ"
  },
  "tourBodyPageAction": {
    "message": "Ընդարձակել էջի գործույթների ցանկը հասցեի գոտիում՝ ցանկացած ժամանակ էկրանի հանույթը ստանալու համար:"
  },
  "tourHeaderClickAndDrag": {
    "message": "Ստացեք միայն այն, ինչ Ձեզ պետք է:"
  },
  "tourBodyClickAndDrag": {
    "message": "Սեղմեք և քաշեք՝ ստանալու համար միայն էջի մի մասը: Նաև կարող եք վրայով անցկացնել՝ գունանշելու համար ընտրումը:"
  },
  "tourHeaderFullPage": {
    "message": "Ստանալ պատուհանը կամ ամբողջ էջեր"
  },
  "tourBodyFullPage": {
    "message": "Ընտրեք կոճակները վերևի աջ մասում՝ տեսանելի հատվածը ստանալու համար պատուհանում կամ ամբողջ էջը ստանալու համար:"
  },
  "tourHeaderDownloadUpload": {
    "message": "Ինչպես որ հավանում եք այն"
  },
  "tourBodyDownloadUpload": {
    "message": "Պահպանեք ձեր եզրատած որոշ պատկերներ վեբում՝ դրանք հեշտությամբ համօգտագործելու կամ ներբեռնելու համար ձեր համակարգչում: Նաև կարող եք սեղմել Իմ պատկերները՝ գտնելու ձեր բոլոր ֆայլերը:"
  },
  "tourSkip": {
    "message": "Բաց թողնել"
  },
  "tourNext": {
    "message": "Հաջորդ սահիկը"
  },
  "tourPrevious": {
    "message": "Նախորդ սահիկը"
  },
  "tourDone": {
    "message": "Պատրաստ է"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots-ը օգտագործելով՝ դուք ընդունեւմ եք $TERMSANDPRIVACYNOTICETERMSLINK$ը և $TERMSANDPRIVACYNOTICEPRIVACYLINK$ը:",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Պայմաններ"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Գաղտնիության ծանուցում"
  },
  "libraryLabel": {
    "message": "Էկրանի հանույթներ"
  }
}PK
!<�SS&webextension/_locales/ia/messages.json{
  "addonDescription": {
    "message": "Prende retalios video e instantaneos de schermo ab le Web e salva los temporarimente o permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Captura un instantaneo de schermo"
  },
  "myShotsLink": {
    "message": "Mi instantaneos"
  },
  "screenshotInstructions": {
    "message": "Trahe o clicca sur le pagina pro seliger un parte. Pulsa ESC pro cancellar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Salvar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Salvar le area visibile"
  },
  "saveScreenshotFullPage": {
    "message": "Salvar le pagina"
  },
  "cancelScreenshot": {
    "message": "Cancellar"
  },
  "downloadScreenshot": {
    "message": "Discargar"
  },
  "downloadOnlyNotice": {
    "message": "Tu es actualmente in modo solo-discargamento."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automaticamente se converte al modo de solo discargamento in le situationes sequente:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "In un fenestra de Navigation Private."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies de tertie parte disactivate."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Oblidar le chronologia” activate."
  },
  "downloadOnlyDetailsESR": {
    "message": "Tu usa Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Le cargamentos ha essite disactivate."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ligamine copiate"
  },
  "notificationLinkCopiedDetails": {
    "message": "Le ligamine a tu instantaneo ha essite copiate al area de transferentia. Pulsa $META_KEY$-V pro collar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Instantaneo copiate"
  },
  "notificationImageCopiedDetails": {
    "message": "Tu instantaneo ha essite copiate al area de transferentia. Pulsa $META_KEY$-V pro collar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Iste imagine ha essite retaliate a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Foras de servicio."
  },
  "requestErrorDetails": {
    "message": "Pardono! Nos non pote salvar tu instantaneo. Per favor reproba plus tarde."
  },
  "connectionErrorTitle": {
    "message": "Nos non pote te connecter a tu instantaneos de schermo."
  },
  "connectionErrorDetails": {
    "message": "Per favor controla tu connexion Internet. Si tu pote te connecter a Internet, il pote haber forsan un problema temporanee con le servicio de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nos non pote salvar tu instantaneo pois que il ha un problema con le servicio de Firefox Screenshots. Per favor reproba plus tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "Impossibile capturar iste pagina."
  },
  "unshootablePageErrorDetails": {
    "message": "Isto non es un pagina Web standard, assi tu non pote prender un instantaneo de schermo de illo."
  },
  "selfScreenshotErrorTitle": {
    "message": "Tu non pote prender un instantaneo de un pagina de Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tu selection es troppo micre"
  },
  "privateWindowErrorTitle": {
    "message": "Le instantaneos es disactivate durante le navigation private"
  },
  "privateWindowErrorDetails": {
    "message": "Pardono pro le incommoditate. Nos labora sur iste functionalitate pro futur publicationes."
  },
  "genericErrorTitle": {
    "message": "Problemas de Firefox Screenshots!"
  },
  "genericErrorDetails": {
    "message": "Nos non sape lo que occurreva. Reprobar o capturar un instantaneo de un altere pagina?"
  },
  "tourBodyIntro": {
    "message": "Captura, salva e comparti instantaneos de schermo sin lassar Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Un nove modo pro salvar"
  },
  "tourBodyPageAction": {
    "message": "Aperi le menu del actiones de pagina in le barra de adresse quando tu desira prender un instantaneo de schermo."
  },
  "tourHeaderClickAndDrag": {
    "message": "Captura solo lo que tu vole"
  },
  "tourBodyClickAndDrag": {
    "message": "Clicca e trahe pro capturar justo un parte del pagina. Tu pote alsi passar supra pro evidentiar tu selection."
  },
  "tourHeaderFullPage": {
    "message": "Captura fenestras o paginas integre"
  },
  "tourBodyFullPage": {
    "message": "Elige le buttones in alto a dextra pro capturar le area visibile in le fenestra o pro capturar un pagina integre."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como tu lo agrada"
  },
  "tourBodyDownloadUpload": {
    "message": "Salvar tu instantaneos retaliate al web pro los compartir plus facilemente, o los discargar a tu computator. Tu alsi pote cliccar sur le button Mi Instantaneos pro trovar tote le instantaneos que tu ha prendite."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Diapositiva sequente"
  },
  "tourPrevious": {
    "message": "Previe diapositiva"
  },
  "tourDone": {
    "message": "Facite"
  },
  "termsAndPrivacyNotice2": {
    "message": "Usante Firefox Screenshots, tu concorda con nostre $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Terminos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Advertentia de confidentialitate"
  },
  "libraryLabel": {
    "message": "Instantaneos de schermo"
  }
}PK
!<�D���&webextension/_locales/id/messages.json{
  "addonDescription": {
    "message": "Rekam klip dan tangkapan layar dari Web dan simpan untuk sementara atau secara permanen."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Buat Tangkapan Layar"
  },
  "myShotsLink": {
    "message": "Tangkapan Saya"
  },
  "screenshotInstructions": {
    "message": "Seret atau klik pada laman untuk memilih area. Tekan ESC untuk membatalkan."
  },
  "saveScreenshotSelectedArea": {
    "message": "Simpan"
  },
  "saveScreenshotVisibleArea": {
    "message": "Simpan yang terlihat"
  },
  "saveScreenshotFullPage": {
    "message": "Simpan laman sepenuhnya"
  },
  "cancelScreenshot": {
    "message": "Batal"
  },
  "downloadScreenshot": {
    "message": "Unduh"
  },
  "downloadOnlyNotice": {
    "message": "Anda saat ini berada di mode Hanya-Unduh."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots secara otomatis berganti ke mode Hanya-Unduh pada situasi berikut:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Di jendela Penjelajahan Pribadi."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Kuki pihak ketiga dinonaktifkan."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Jangan pernah ingat riwayat” diaktifkan."
  },
  "downloadOnlyDetailsESR": {
    "message": "Anda menggunakan Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Unduhan dinonaktifkan."
  },
  "notificationLinkCopiedTitle": {
    "message": "Tautan Disalin"
  },
  "notificationLinkCopiedDetails": {
    "message": "Tautan ke gambar Anda telah disalin ke papan klip. Tekan $META_KEY$-V untuk menempelkan.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Salin"
  },
  "notificationImageCopiedTitle": {
    "message": "Tangkapan Disalin"
  },
  "notificationImageCopiedDetails": {
    "message": "Tangkapan Anda telah disalin ke papan klip. Tekan $META_KEY$-V untuk menempelkan.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Gambar ini telah dipotong menjadi $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Tak dapat digunakan."
  },
  "requestErrorDetails": {
    "message": "Maaf! Kami tidak dapat menyimpan gambar Anda. Silakan coba lagi."
  },
  "connectionErrorTitle": {
    "message": "Kami tidak dapat terhubung dengan tangkapan layar Anda."
  },
  "connectionErrorDetails": {
    "message": "Silakan periksa sambungan Internet Anda. Jika Anda dapat tersambung ke Internet, mungkin terjadi masalah sementara pada layanan Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Kami tidak dapat menyimpan gambar Anda karena ada masalah dengan layanan Firefox Screenshots. Silakan coba kembali nanti."
  },
  "unshootablePageErrorTitle": {
    "message": "Kami tidak dapat menangkap layar laman ini."
  },
  "unshootablePageErrorDetails": {
    "message": "Ini bukan laman Web yang standar, sehingga Anda tidak dapat membuat tangkapan dari layar ini."
  },
  "selfScreenshotErrorTitle": {
    "message": "Anda tidak dapat merekam gambar dari laman Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Seleksi Anda terlalu kecil"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots dinonaktifkan di Mode Penjelajahan Pribadi"
  },
  "privateWindowErrorDetails": {
    "message": "Maaf atas ketidaknyamanannya. Kami sedang mengerjakan fitur ini untuk peluncuran masa mendatang."
  },
  "genericErrorTitle": {
    "message": "Wah! Firefox Screenshots mendadak kacau."
  },
  "genericErrorDetails": {
    "message": "Kami tidak yakin akan apa yang terjadi. Ingin mencoba lagi atau merekam gambar dari laman yang berbeda?"
  },
  "tourBodyIntro": {
    "message": "Ambil, simpan, dan bagikan tangkapan layar tanpa meninggalkan Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Cara baru untuk menyimpan"
  },
  "tourBodyPageAction": {
    "message": "Bentangkan menu tindakan laman di bilah alamat setiap kali Anda ingin buat tangkapan layar."
  },
  "tourHeaderClickAndDrag": {
    "message": "Rekam Bagian Yang Anda Inginkan"
  },
  "tourBodyClickAndDrag": {
    "message": "Klik dan seret untuk merekam sebagian area laman. Anda juga dapat menggeser kursor untuk menyoroti pilihan Anda."
  },
  "tourHeaderFullPage": {
    "message": "Rekam Jendela atau Seluruh Laman"
  },
  "tourBodyFullPage": {
    "message": "Pilih tombol di kanan atas untuk merekam area yang terlihat pada jendela atau rekam seluruh laman."
  },
  "tourHeaderDownloadUpload": {
    "message": "Sesuka Anda"
  },
  "tourBodyDownloadUpload": {
    "message": "Simpan potongan tangkapan Anda ke Web agar mudah dibagikan, atau unduh ke komputer. Anda pun dapat mengeklik pada tombol Gambar Saya untuk menemukan semua tangkapan yang pernah Anda rekam."
  },
  "tourSkip": {
    "message": "LEWATI"
  },
  "tourNext": {
    "message": "Salindia Selanjutnya"
  },
  "tourPrevious": {
    "message": "Salindia Sebelumnya"
  },
  "tourDone": {
    "message": "Selesai"
  },
  "termsAndPrivacyNotice2": {
    "message": "Dengan menggunakan Firefox Screenshots, Anda setuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kami.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Ketentuan"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Kebijakan Privasi"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<ո�6��&webextension/_locales/it/messages.json{
  "addonDescription": {
    "message": "Crea screenshot di contenuti sul Web e salvali, solo per un periodo di tempo o in modo permanente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Cattura screenshot"
  },
  "myShotsLink": {
    "message": "I miei screenshot"
  },
  "screenshotInstructions": {
    "message": "Trascina o fai clic su una pagina per selezionare un’area della pagina. Premi ESC per annullare."
  },
  "saveScreenshotSelectedArea": {
    "message": "Salva"
  },
  "saveScreenshotVisibleArea": {
    "message": "Salva l’area visibile"
  },
  "saveScreenshotFullPage": {
    "message": "Salva l’intera schermata"
  },
  "cancelScreenshot": {
    "message": "Annulla"
  },
  "downloadScreenshot": {
    "message": "Scarica"
  },
  "downloadOnlyNotice": {
    "message": "Al momento è attiva la modalità “Solo download”."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots entra automaticamente in modalità “Solo download” nelle seguenti situazioni:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Se è attiva la modalità Navigazione anonima."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Se i cookie di terze parti sono disattivati."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Se è attiva l’opzione “Non salvare la cronologia”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Stai usando Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Il caricamento è disattivato."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link copiato"
  },
  "notificationLinkCopiedDetails": {
    "message": "Il link all’immagine è stato copiato negli appunti. Utilizza $META_KEY$-V per incollarlo.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copia"
  },
  "notificationImageCopiedTitle": {
    "message": "Immagine copiata"
  },
  "notificationImageCopiedDetails": {
    "message": "L’immagine è stata copiata negli appunti. Premi $META_KEY$-V per incollarla.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Questa immagine è stata ritagliata a $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Fuori servizio"
  },
  "requestErrorDetails": {
    "message": "Siamo spiacenti, non è stato possibile salvare l’immagine. Riprova più tardi."
  },
  "connectionErrorTitle": {
    "message": "Non è possibile accedere agli screenshot salvati."
  },
  "connectionErrorDetails": {
    "message": "Verifica che la connessione a Internet stia funzionando correttamente. Se è possibile accedere ad altri siti, potrebbe trattarsi di un problema temporaneo con il servizio Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Non è stato possibile salvare l’immagine in quanto si è verificato un problema con il servizio Firefox Screenshots. Riprova più tardi."
  },
  "unshootablePageErrorTitle": {
    "message": "Non è possibile salvare uno screenshot di questa pagina."
  },
  "unshootablePageErrorDetails": {
    "message": "Non è possibile salvare uno screenshot in quanto non si tratta di una normale pagina web."
  },
  "selfScreenshotErrorTitle": {
    "message": "Non è possibile salvare uno screenshot di una pagina di Firefox Screenshots"
  },
  "emptySelectionErrorTitle": {
    "message": "L’area selezionata è troppo piccola"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots è disattivato in navigazione anonima."
  },
  "privateWindowErrorDetails": {
    "message": "Ci dispiace per l’inconveniente. Stiamo lavorando a questa funzione per le prossime versioni."
  },
  "genericErrorTitle": {
    "message": "Wow! Firefox Screenshots è andato in tilt"
  },
  "genericErrorDetails": {
    "message": "Non sappiamo che cosa sia successo. Riprova, magari con una pagina diversa."
  },
  "tourBodyIntro": {
    "message": "Cattura, salva e condividi screenshot senza mai uscire da Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Un nuovo modo per salvare informazioni"
  },
  "tourBodyPageAction": {
    "message": "Hai bisogno di catturare un’istantanea della pagina? Ti basta aprire il menu nella barra degli indirizzi."
  },
  "tourHeaderClickAndDrag": {
    "message": "Cattura solo ciò che ti serve"
  },
  "tourBodyClickAndDrag": {
    "message": "Fai clic e trascina per catturare solo una parte della pagina. Posiziona il mouse sopra all’area selezionata per evidenziarla."
  },
  "tourHeaderFullPage": {
    "message": "Cattura una finestra o una pagina intera"
  },
  "tourBodyFullPage": {
    "message": "Utilizza i pulsanti in alto a destra per catturare una parte della finestra o l’intera pagina."
  },
  "tourHeaderDownloadUpload": {
    "message": "Come piace a te"
  },
  "tourBodyDownloadUpload": {
    "message": "Cattura lo screenshot di una pagina web, ritaglialo e salvalo online per condividerlo in modo più veloce, oppure scaricalo sul tuo computer. Puoi anche utilizzare il pulsante “I miei screenshot” per ritrovare tutte le immagini che hai salvato."
  },
  "tourSkip": {
    "message": "Ignora"
  },
  "tourNext": {
    "message": "Schermata successiva"
  },
  "tourPrevious": {
    "message": "Schermata precedente"
  },
  "tourDone": {
    "message": "Fine"
  },
  "termsAndPrivacyNotice2": {
    "message": "Utilizzando Firefox Screenshots si accettano le $TERMSANDPRIVACYNOTICETERMSLINK$ e l’$TERMSANDPRIVACYNOTICEPRIVACYLINK$ del servizio.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "condizioni di utilizzo"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "informativa sulla privacy"
  },
  "libraryLabel": {
    "message": "Screenshot"
  }
}PK
!<�t�66&webextension/_locales/ja/messages.json{
  "addonDescription": {
    "message": "ウェブからスクリーンショットを撮って、一時的または永久にそれを保存しましょう。"
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "スクリーンショットを撮る"
  },
  "myShotsLink": {
    "message": "自分のショット"
  },
  "screenshotInstructions": {
    "message": "ページをドラッグまたはクリックして範囲を選択してください。ESC キーを押すとキャンセルできます。"
  },
  "saveScreenshotSelectedArea": {
    "message": "保存"
  },
  "saveScreenshotVisibleArea": {
    "message": "表示範囲を保存"
  },
  "saveScreenshotFullPage": {
    "message": "ページ全体を保存"
  },
  "cancelScreenshot": {
    "message": "キャンセル"
  },
  "downloadScreenshot": {
    "message": "ダウンロード"
  },
  "downloadOnlyNotice": {
    "message": "ダウンロード専用モードが有効になっています。"
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots は以下のような状況では自動的にダウンロード専用モードへ切り替わります。"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "プライベートブラウジングを使用している場合。"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "サードパーティ Cookie が無効になっている場合。"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "「履歴を一切記憶させない」設定が有効になっている場合。"
  },
  "downloadOnlyDetailsESR": {
    "message": "あなたは Firefox ESR をお使いです。"
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "アップロードは無効化されています。"
  },
  "notificationLinkCopiedTitle": {
    "message": "リンクをコピーしました"
  },
  "notificationLinkCopiedDetails": {
    "message": "ショットへのリンクがクリップボードへコピーされました。$META_KEY$+V キーで貼り付けられます。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "コピー"
  },
  "notificationImageCopiedTitle": {
    "message": "ショットをコピーしました"
  },
  "notificationImageCopiedDetails": {
    "message": "ショットがクリップボードへコピーされました。$META_KEY$+V キーで貼り付けられます。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "この画像は $PIXELS$px にトリミングされました。",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "問題が発生しました。"
  },
  "requestErrorDetails": {
    "message": "申し訳ありませんが、ショットを保存できませんでした。また後で試してください。"
  },
  "connectionErrorTitle": {
    "message": "Screenshots ライブラリへ接続できません。"
  },
  "connectionErrorDetails": {
    "message": "お使いのインターネット接続を確認してください。インターネットへ接続できる場合は、Firefox Screenshots サービスに一時的な問題が発生しているものと思われます。"
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshots サービスに問題があるため、ショットを保存できませんでした。また後で試してください。"
  },
  "unshootablePageErrorTitle": {
    "message": "このページはスクリーンショットを撮れません。"
  },
  "unshootablePageErrorDetails": {
    "message": "これは通常のウェブページでないため、スクリーンショットを撮ることができません。"
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots ページのショットは撮れません。"
  },
  "emptySelectionErrorTitle": {
    "message": "選択範囲が小さすぎます"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots はプライベートブラウジングモードでは使用できません"
  },
  "privateWindowErrorDetails": {
    "message": "ご不便をおかけして申し訳ありません。今後のリリースでこの機能を提供できるよう取り組んでいます。"
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshots に問題が発生しました。"
  },
  "genericErrorDetails": {
    "message": "何か問題が発生したようです。再度試すか、別のページのショットを撮ってみてください。"
  },
  "tourBodyIntro": {
    "message": "Firefox を離れることなく、スクリーンショットを撮影、保存、共有。"
  },
  "tourHeaderPageAction": {
    "message": "新たな保存方法"
  },
  "tourBodyPageAction": {
    "message": "スクリーンショットを撮りたいときは、いつでもアドレスバー内のページアクションメニューを開いてください。"
  },
  "tourHeaderClickAndDrag": {
    "message": "必要な部分だけをキャプチャ"
  },
  "tourBodyClickAndDrag": {
    "message": "クリック&ドラッグでページの一部だけをキャプチャできます。また、マウスを当てれば選択範囲が強調表示されます。"
  },
  "tourHeaderFullPage": {
    "message": "ウィンドウもしくはページ全体をキャプチャ"
  },
  "tourBodyFullPage": {
    "message": "右上のボタンを選択して、ウィンドウ内の表示範囲もしくはページ全体をキャプチャしましょう。"
  },
  "tourHeaderDownloadUpload": {
    "message": "お好きなように"
  },
  "tourBodyDownloadUpload": {
    "message": "切り取ったショットを簡単に共有できるようウェブ上に保存したり、手元へダウンロードしたり。また「自分のショット」ボタンをクリックすれば、これまでに撮ったすべてのショットを見られます。"
  },
  "tourSkip": {
    "message": "スキップ"
  },
  "tourNext": {
    "message": "次のスライド"
  },
  "tourPrevious": {
    "message": "前のスライド"
  },
  "tourDone": {
    "message": "完了"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots を使うことで、あなたは $TERMSANDPRIVACYNOTICETERMSLINK$ と $TERMSANDPRIVACYNOTICEPRIVACYLINK$ に同意したことになります。",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "利用規約"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "プライバシー通知"
  },
  "libraryLabel": {
    "message": "スクリーンショット"
  }
}PK
!<6Ĝ^�&�&&webextension/_locales/ka/messages.json{
  "addonDescription": {
    "message": "გადაუღეთ ვიდეოები და სურათები ვებგვერდებს და შეინახეთ დროებით, ან მუდმივად."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "ეკრანისთვის სურათის გადაღება"
  },
  "myShotsLink": {
    "message": "ჩემი გადაღებულები"
  },
  "screenshotInstructions": {
    "message": "გადაადგილეთ ან დააწკაპეთ გვერდზე სივრცის მოსანიშნად. გასაუქმებლად დააჭირეთ ESC-ს."
  },
  "saveScreenshotSelectedArea": {
    "message": "შენახვა"
  },
  "saveScreenshotVisibleArea": {
    "message": "ხილული ნაწილის შენახვა"
  },
  "saveScreenshotFullPage": {
    "message": "მთლიანი გვერდის შენახვა"
  },
  "cancelScreenshot": {
    "message": "გაუქმება"
  },
  "downloadScreenshot": {
    "message": "ჩამოტვირთვა"
  },
  "downloadOnlyNotice": {
    "message": "თქვენ ახლა იმყოფებით „მხოლოდ ჩამოტვირთვის“ რეჟიმში."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots გადადის „მხოლოდ ჩამოტვირთვის“ რეჟიმზე, შემდეგ შემთხვევებში:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "პირადი ფანჯრით სარგებლობისას."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "მესამე მხარის ფუნთუშების შენახვა, შეზღუდულია."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "მითითებულია, რომ “არასოდეს დაიმახსოვრებს ისტორიას” ბრაუზერი."
  },
  "downloadOnlyDetailsESR": {
    "message": "თქვენ იყენებთ Firefox ESR-ს."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "ატვირთვა შეზღუდულია."
  },
  "notificationLinkCopiedTitle": {
    "message": "ბმული დაკოპირებულია"
  },
  "notificationLinkCopiedDetails": {
    "message": "თქვენი სურათის ბმული დაკოპირებულია. ჩასმისთვის დააწექით $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "კოპირება"
  },
  "notificationImageCopiedTitle": {
    "message": "სურათი დაკოპირებულია"
  },
  "notificationImageCopiedDetails": {
    "message": "თქვენი სურათი დაკოპირებულია. ჩასმისთვის დააწექით $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "სურათი მოიჭრა $PIXELS$ პიქსელამდე.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "გაფუჭებულია."
  },
  "requestErrorDetails": {
    "message": "ვწუხვარ! გადაღებული სურათის შენახვა ვერ ხერხდება. მოგვიანებით სცადეთ."
  },
  "connectionErrorTitle": {
    "message": "თქვენს გადაღებულ სურათებთან კავშირი ვერ ხერხდება."
  },
  "connectionErrorDetails": {
    "message": "გთხოვთ შეამოწმოთ ქსელთან კავშირი. თუ ინტერნეტში თავისუფლად გადიხართ, ე.ი. Firefox Screenshot-ის მომსახურებას აქვს დროებითი პრობლემა."
  },
  "loginErrorDetails": {
    "message": "თქვენი სურათის შენახვა ვერ ხერხდება, რადგან შეფერხებაა Firefox Screenshots მომსახურებასთან დაკავშირებით. გთხოვთ სცადოთ მოგვიანებით."
  },
  "unshootablePageErrorTitle": {
    "message": "ამ გვერდისთვის სურათის გადაღება ვერ ხერხდება."
  },
  "unshootablePageErrorDetails": {
    "message": "ეს არ არის ჩვეულებრივი ვებგვერდი, ამიტომაც შეუძლებელია სურათის გადაღება."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots-ის გვერდისთვის სურათის გადაღება არ შეგიძლიათ!"
  },
  "emptySelectionErrorTitle": {
    "message": "შერჩეული სივრცე ძალიან მცირეა"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots გათიშულია პირადი თვალიერების რეჟიმისას"
  },
  "privateWindowErrorDetails": {
    "message": "ბოდიშს გიხდით გაუგებრობის გამო. ჩვენ ვმუშაობთ ამ შესაძლებლობის დამატებაზე, სამომავლო ვერსიებში."
  },
  "genericErrorTitle": {
    "message": "ვაი! Firefox Screenshots მწყობრიდან გამოვიდა."
  },
  "genericErrorDetails": {
    "message": "გაუგებარია რა მოხდა. ისევ ცდით ხელახლა, თუ სხვა ვებგვერდს გადაუღებთ სურათს?"
  },
  "tourBodyIntro": {
    "message": "გადაიღეთ, შეინახეთ და გააზიარეთ ეკრანის სურათები Firefox-იდან გაუსვლელად."
  },
  "tourHeaderPageAction": {
    "message": "შენახვის ახალი ხერხი"
  },
  "tourBodyPageAction": {
    "message": "როცა მოგესურვებათ ეკრანისთვის სურათის გადაღება, ჩამოშალეთ გვერდზე მოქმედებების მენიუ, რომელიც მდებარეობს მისამართების ველში."
  },
  "tourHeaderClickAndDrag": {
    "message": "გადაუღეთ სურათი რასაც გინდათ"
  },
  "tourBodyClickAndDrag": {
    "message": "გადაადგილეთ, ან დააწკაპეთ გვერდზე გადასაღები სივრცის შესარჩევად. ასევე, მაჩვენებელი ისარის გადატარებით შეგიძლიათ მონიშნოთ სასურველი არე."
  },
  "tourHeaderFullPage": {
    "message": "გადაუღეთ სურათები ფანჯრებს, ან მთლიან ვებგვერდებს"
  },
  "tourBodyFullPage": {
    "message": "მარჯვენა ზედა კუთხეში არსებული ღილაკების საშუალებით, შეგიძლიათ გადაუღოთ სურათი ხილულ ნაწილს, ან მთლიან გვერდს."
  },
  "tourHeaderDownloadUpload": {
    "message": "როგორც გენებოთ"
  },
  "tourBodyDownloadUpload": {
    "message": "ამოჭრილი სურათები შეგიძლიათ განათავსოთ ინტერნეტში, მარტივად გასაზიარებლად, ან ჩამოტვირთოთ კომპიუტერში. ასევე, „ჩემი გადაღებულების“ ღილაკზე დაწკაპებით, იხილავთ თქვენ მიერ გადაღებულ ყველა სურათს."
  },
  "tourSkip": {
    "message": "გამოტოვება"
  },
  "tourNext": {
    "message": "შემდეგი"
  },
  "tourPrevious": {
    "message": "წინა"
  },
  "tourDone": {
    "message": "მზადაა"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots-ის გამოყენებით, თქვენ ეთანხმებით $TERMSANDPRIVACYNOTICETERMSLINK$ და $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "პირობებს"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "პირადი მონაცემების შესახებ განცხადებას"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<�j��'webextension/_locales/kab/messages.json{
  "addonDescription": {
    "message": "Ṭṭef imrayen akked igdilen si Web sakin sekles-iten s wudem askudan neγ s wudem yezgan."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Ṭṭef agdil"
  },
  "myShotsLink": {
    "message": "Tuṭṭfiwin-iw"
  },
  "screenshotInstructions": {
    "message": "Zuγer sakin sit γef af usebter akken ad tferneḍ tamnaṭ. Senned γef ESC akken ad tesfesxeḍ."
  },
  "saveScreenshotSelectedArea": {
    "message": "Sekles"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sekles ayen ibanen"
  },
  "saveScreenshotFullPage": {
    "message": "Sekles asebter meṛṛa"
  },
  "cancelScreenshot": {
    "message": "Sefsex"
  },
  "downloadScreenshot": {
    "message": "Sider"
  },
  "downloadOnlyNotice": {
    "message": "Aql-ak tura deg umskar n usider kan."
  },
  "downloadOnlyDetails": {
    "message": "Deg isekaren-agi, Firefox Screenshots ad k-yeǧǧ kan ad tsidreḍ:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Deg iccer n tungin uslig."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Inagan n tuqna n tama tis kraḍ ttwasensen."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Werǧin ad tecfuḍ γef umazray” insa."
  },
  "downloadOnlyDetailsESR": {
    "message": "Aql-ak teseqdaceḍ Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Tuzna n ifayluyen tensa."
  },
  "notificationLinkCopiedTitle": {
    "message": "Aseγwen yettwanγel"
  },
  "notificationLinkCopiedDetails": {
    "message": "Aseγwen ar tuṭṭfa-ik yettwanγel yef afus. Senned yef $META_KEY$-V akken ad tsenṭḍeḍ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Nγel"
  },
  "notificationImageCopiedTitle": {
    "message": "Tuṭṭfa tettwanγel"
  },
  "notificationImageCopiedDetails": {
    "message": "Tuṭṭfa-inek tettwanγel yer ufus. Senned yef $META_KEY$-V akken ad tsenṭḍeḍ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tugna-agi tettwaẓreg ɣer $PIXELS$ ipiksilen.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Yeffeγ i talast."
  },
  "requestErrorDetails": {
    "message": "Suref-aγ! Ur nezmir ara ad nsekles tuṭṭfa-ik. Ɛreḍ tikelt-nniḍen."
  },
  "connectionErrorTitle": {
    "message": "Ur nezmir ara ad neqqen ar tuṭṭfiwin-ik n ugdil."
  },
  "connectionErrorDetails": {
    "message": "Senqed tuqqna-ik Internet. Ma yella tzemred ad teqqneḍ ar Internet, ahat d ugur kan meẓẓiyen deg umeẓlu Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "UR nseklas ara tuṭṭfa-ik acku yella ugur akked umezlu Firefox Screenshots. Ma ulac aɣilif ɛreḍ tikelt-nniḍen."
  },
  "unshootablePageErrorTitle": {
    "message": "Ur nezmir ara ad neṭṭef agdil n usebter-agi."
  },
  "unshootablePageErrorDetails": {
    "message": "Mačči d asebter Web am iyaḍ, ur tizmireḍ ara ad s-teṭṭfeḍ agdil."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ur tezmireḍ ar ad teṭṭfeḍ agdil n usebter Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tafrant inek wezzil-t aṭas"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots yensa deg uskar uslig"
  },
  "privateWindowErrorDetails": {
    "message": "Suref-aɣ ɣef aya. Aqlaɣ nxeddem ɣef tmahilt i yileqman d-iteddun."
  },
  "genericErrorTitle": {
    "message": "Ihuh! Firefox Screenshots ur iteddu ara."
  },
  "genericErrorDetails": {
    "message": "Ur neẓri ara acu yeḍran. Ɛreḍ tikelt-nniḍen neɣ ṭṭef agdil n usebter-nniḍen?"
  },
  "tourBodyIntro": {
    "message": "Ṭṭef, sekles, bḍu igdilen war ma teffɣeḍ si Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Abrid amaynut i wsekles"
  },
  "tourBodyPageAction": {
    "message": "Mi tebγiḍ ad teṭṭfeḍ agdil ldi umuγ n tigawin n usebter illan deg ufeggag n tansiwin."
  },
  "tourHeaderClickAndDrag": {
    "message": "Ṭṭef kan ayen tebγiḍ"
  },
  "tourBodyClickAndDrag": {
    "message": "Sit sakin zuɣer akken ad teṭṭfeḍ aḥric seg usebter. Tzemreḍ daɣen ad tesrifgeḍ akken ad tsebṛuṛqeḍ afran-ik."
  },
  "tourHeaderFullPage": {
    "message": "Ṭṭef isfuyla neγ isebtar meṛṛa"
  },
  "tourBodyFullPage": {
    "message": "Fren tiqeffalin s afella ayeffus akken ad teṭṭfeḍ tamnaṭ yettbanen deg usfaylu neɣ asebter i meṛṛa."
  },
  "tourHeaderDownloadUpload": {
    "message": "Akken tebγiḍ"
  },
  "tourBodyDownloadUpload": {
    "message": "Sekles tuṭṭfiwin-ik ar Web i beṭṭu fessusen, neɣ sider-itent-id ar uselkim-ik. Tzemr€d daɣen ad tiseḍ ɣef tqeffalt Tiṭṭfiwin-iw akken ad tafeḍ akk tuṭṭfiwin n ugdil i teggid."
  },
  "tourSkip": {
    "message": "Zgel"
  },
  "tourNext": {
    "message": "Tigri n zdat"
  },
  "tourPrevious": {
    "message": "Tigri n deffir"
  },
  "tourDone": {
    "message": "Immed"
  },
  "termsAndPrivacyNotice2": {
    "message": "S useqdec Firefox Screenshots, ad tqebleḍ $TERMSANDPRIVACYNOTICETERMSLINK$ akked $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Tiwtilin"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Tasertit n tbaḍnit"
  },
  "libraryLabel": {
    "message": "Tuṭṭfiwin n ugdil"
  }
}PK
!<�LR���&webextension/_locales/kk/messages.json{
  "addonDescription": {
    "message": "Интернеттен скриншоттарды түсіріп, оларды уақытша немесе тұрақты түрде сақтаңыз."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Скриншотты түсіру"
  },
  "myShotsLink": {
    "message": "Менің скриншоттарым"
  },
  "screenshotInstructions": {
    "message": "Аймақты таңдау үшін бетте шертіңіз. Бас тарту үшін ESC басыңыз."
  },
  "saveScreenshotSelectedArea": {
    "message": "Сақтау"
  },
  "saveScreenshotVisibleArea": {
    "message": "Көрінетінді сақтау"
  },
  "saveScreenshotFullPage": {
    "message": "Толық парақты сақтау"
  },
  "cancelScreenshot": {
    "message": "Бас тарту"
  },
  "downloadScreenshot": {
    "message": "Жүктеп алу"
  },
  "downloadOnlyNotice": {
    "message": "Сіз тек жүктеп алу режиміндесіз."
  },
  "downloadOnlyDetails": {
    "message": "Firefox скриншоттары тек жүктеп алу режиміне келесі жағдайларда ауысады:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Жекелік шолу терезесінде."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Үшінші жақты cookies сөндірілген."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "\"Тарихты ешқашан сақтамау\" іске қосылған."
  },
  "downloadOnlyDetailsESR": {
    "message": "Сіз Firefox ESR қолданып отырсыз."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Жүктеп жіберу сөндірілген."
  },
  "notificationLinkCopiedTitle": {
    "message": "Сілтеме көшірілді"
  },
  "notificationLinkCopiedDetails": {
    "message": "Сіздің скриншотыңызға сілтеме алмасу буферіне көшірілді. Кірістіру үшін $META_KEY$-V басыңыз.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Көшіріп алу"
  },
  "notificationImageCopiedTitle": {
    "message": "Скриншот көшірілді"
  },
  "notificationImageCopiedDetails": {
    "message": "Сіздің скриншотыңыз алмасу буферіне көшірілді. Кірістіру үшін $META_KEY$-V басыңыз.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Бұл сурет $PIXELS$ пиксельге дейін қиылды.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Жұмыс істемейді."
  },
  "requestErrorDetails": {
    "message": "Кешіріңіз! Сіздің скриншотыңызды сақтай алмадық. Кейінірек қайталап көріңіз."
  },
  "connectionErrorTitle": {
    "message": "Скриншоттарыңызға байланыса алмадық."
  },
  "connectionErrorDetails": {
    "message": "Интернетпен байланысыңызды тексеріңіз. Егер сізде интернетпен байланыс бар болса, онда Firefox скриншоттары қызметімен уақытша мәселелер болуы мүмкін."
  },
  "loginErrorDetails": {
    "message": "Скриншотыңызды сақтай алмадық, өйткені Firefox скриншоттары қызметімен мәселе бар болып тұр. Кейінірек қайталап көріңіз."
  },
  "unshootablePageErrorTitle": {
    "message": "Бұл беттің скриншотын түсіре алмаймыз."
  },
  "unshootablePageErrorDetails": {
    "message": "Бұл қалыпты веб беті емес, сондықтан оның скриншотын түсіру мүмкін емес."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox скриншоттары бетінің скриншотын түсіру мүмкін емес!"
  },
  "emptySelectionErrorTitle": {
    "message": "Сіздің таңдауыңыз тым кішкентай"
  },
  "privateWindowErrorTitle": {
    "message": "Скриншоттар жекелік шолу режимінде сөнідірілген"
  },
  "privateWindowErrorDetails": {
    "message": "Қолайсыздық үшін кешірім сұраймыз. Бұл мүмкіндікті болашақ шығарылымдарда іске асыруға жұмысты жасаймыз."
  },
  "genericErrorTitle": {
    "message": "Қап! Firefox скриншоттары жасамай қалған сияқты."
  },
  "genericErrorDetails": {
    "message": "Не болғанын білмейміз. Қайталап көресіз бе, немесе басқа парақтың скриншотын түсіріп көресіз бе?"
  },
  "tourBodyIntro": {
    "message": "Firefox ішінен скриншоттарды түсіру, сақтау және олармен бөлісу."
  },
  "tourHeaderPageAction": {
    "message": "Сақтаудың жаңа жолы"
  },
  "tourBodyPageAction": {
    "message": "Скриншотты жасағыңыз келген уақытта адрестік жолақтың бет әрекеттері мәзірін ашыңыз."
  },
  "tourHeaderClickAndDrag": {
    "message": "Тек керек нәрсені түсіріңіз"
  },
  "tourBodyClickAndDrag": {
    "message": "Беттің тек бір бөлігін түсіру үшін тышқанды шертіп, тартыңыз. Таңдауыңызды түспен ерекшелеу үшін үстінен өткізсеңіз болады."
  },
  "tourHeaderFullPage": {
    "message": "Терезелер немесе толық беттерді түсіріңіз"
  },
  "tourBodyFullPage": {
    "message": "Жоғарғы оң жақта орналасқан батырмаларды терезенің көрінетін аймағын, немесе толық бетті түсіру үшін қолданыңыз."
  },
  "tourHeaderDownloadUpload": {
    "message": "Өзіңізге керек түрде"
  },
  "tourBodyDownloadUpload": {
    "message": "Қиылған скриншоттармен оңай бөлісу үшін оларды интернетте сақтауға, немесе сіздің компьютеріңізге жүктеп алуға болады. Сонымен қатар, сіз жасаған барлық скриншоттарды табу үшін Менің скриншоттарым батырмасына шерте аласыз."
  },
  "tourSkip": {
    "message": "Аттап кету"
  },
  "tourNext": {
    "message": "Келесі слайд"
  },
  "tourPrevious": {
    "message": "Алдыңғы слайд"
  },
  "tourDone": {
    "message": "Дайын"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox скриншоттарын қолдану арқылы, сіз біздің $TERMSANDPRIVACYNOTICETERMSLINK$ және $TERMSANDPRIVACYNOTICEPRIVACYLINK$ келісесіз.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Қолдану шарттары"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Жекелік ескертуі"
  },
  "libraryLabel": {
    "message": "Скриншоттар"
  }
}PK
!<ح�JVV&webextension/_locales/km/messages.json{
  "saveScreenshotSelectedArea": {
    "message": "រក្សា​ទុក"
  }
}PK
!<,�n��&webextension/_locales/kn/messages.json{
  "saveScreenshotSelectedArea": {
    "message": "ಉಳಿಸು"
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourDone": {
    "message": "ಆಯಿತು"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "ನಿಯಮಗಳು"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ಗೌಪ್ಯತಾ ಸೂಚನೆ"
  },
  "libraryLabel": {
    "message": "ತೆರೆಚಿತ್ರಗಳು"
  }
}PK
!<X���&webextension/_locales/ko/messages.json{
  "addonDescription": {
    "message": "웹 페이지를 찍거나 영상으로 만들어 임시로, 혹은 영구히 보관하세요."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "스크린샷 찍기"
  },
  "myShotsLink": {
    "message": "내 스크린샷"
  },
  "screenshotInstructions": {
    "message": "캡처 할 범위를 드래그하거나 클릭하세요. ESC를 누르면 취소됩니다."
  },
  "saveScreenshotSelectedArea": {
    "message": "저장"
  },
  "saveScreenshotVisibleArea": {
    "message": "보이는 내용 저장"
  },
  "saveScreenshotFullPage": {
    "message": "전체 페이지 저장"
  },
  "cancelScreenshot": {
    "message": "취소"
  },
  "downloadScreenshot": {
    "message": "다운로드"
  },
  "downloadOnlyNotice": {
    "message": "현재 다운로드 전용 모드에 있습니다."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots은 다음과 같은 경우에만 다운로드 전용 모드로 전환됩니다:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "개인정보 보호 창에 있을 때"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "제 3자 쿠키가 비활성화되어 있을 때"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“히스토리 기억 안함”이 활성화되어 있을 때"
  },
  "notificationLinkCopiedTitle": {
    "message": "링크 복사됨"
  },
  "notificationLinkCopiedDetails": {
    "message": "방금 찍은 스냅샷의 링크가 클립보드에 저장됐습니다. 붙여넣으려면 $META_KEY$-V를 누르세요.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "복사"
  },
  "notificationImageCopiedTitle": {
    "message": "스크린샷 복사됨"
  },
  "notificationImageCopiedDetails": {
    "message": "스크린샷이 클립보드에 복사되었습니다. 붙여넣으려면 $META_KEY$-V를 누르세요.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "이 이미지는 $PIXELS$px로 잘렸습니다.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "문제가 발생했습니다."
  },
  "requestErrorDetails": {
    "message": "죄송합니다. 스크린샷을 저장하지 못했습니다. 잠시 후에 다시 시도해주세요."
  },
  "connectionErrorTitle": {
    "message": "스크린샷에 접속할 수 없습니다."
  },
  "connectionErrorDetails": {
    "message": "인터넷 연결 상태를 확인해주세요. 만약 인터넷이 연결돼있다면, Firefox Screenshots 서비스에 잠깐 문제가 있을 수도 있습니다."
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshots 서비스에 잠시 문제가 있어 저장에 실패했습니다. 잠시 후에 다시 시도해주세요."
  },
  "unshootablePageErrorTitle": {
    "message": "이 페이지를 캡처할 수 없습니다."
  },
  "unshootablePageErrorDetails": {
    "message": "표준 웹 페이지가 아니어서 스크린샷을 찍을 수 없습니다."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots 페이지는 캡처할 수 없어요!"
  },
  "emptySelectionErrorTitle": {
    "message": "선택영역이 너무 작음"
  },
  "privateWindowErrorTitle": {
    "message": "개인정보 보호 모드에서는 스크린샷이 비활성화 됨"
  },
  "privateWindowErrorDetails": {
    "message": "불편을 끼쳐 드려서 죄송합니다. 다음 출시에 넣을 수 있도록 기능을 개선중입니다."
  },
  "genericErrorTitle": {
    "message": "이런! Firefox Screenshots이 망가졌네요."
  },
  "genericErrorDetails": {
    "message": "무슨 일이 있었는지 모르겠네요. 다시 시도하시거나 다른 페이지 스크린샷을 찍어 보시겠어요?"
  },
  "tourBodyIntro": {
    "message": "Firefox를 떠나지 않은 채로 찍고, 저장하고, 공유하세요."
  },
  "tourHeaderPageAction": {
    "message": "새로운 저장방법"
  },
  "tourBodyPageAction": {
    "message": "스크린 샷을 찍고 싶을 때는 언제든지 주소창의 페이지 작업 메뉴를 열어주세요."
  },
  "tourHeaderClickAndDrag": {
    "message": "원하는 것을 캡처하세요"
  },
  "tourBodyClickAndDrag": {
    "message": "캡처할 페이지의 부분을 클릭해서 드래그 해 보세요. 마우스를 올려서 선택한 부분을 확인할 수 있습니다."
  },
  "tourHeaderFullPage": {
    "message": "창이나 페이지 전체를 캡처할 수 있습니다"
  },
  "tourBodyFullPage": {
    "message": "우측 위에 있는 버튼을 눌러 창을 캡처하거나 페이지 전체를 캡처할 수 있습니다."
  },
  "tourHeaderDownloadUpload": {
    "message": "내가 원하는 대로"
  },
  "tourBodyDownloadUpload": {
    "message": "스크린샷을 공유하거나, 컴퓨터로 다운로드할 수도 있습니다. 내 스크린샷 버튼을 눌러서 지금까지 찍었던 모든 스크린샷을 찾을 수도 있습니다."
  },
  "tourSkip": {
    "message": "건너뛰기"
  },
  "tourNext": {
    "message": "다음 슬라이드"
  },
  "tourPrevious": {
    "message": "이전 슬라이드"
  },
  "tourDone": {
    "message": "완료"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots을 사용함으로써, $TERMSANDPRIVACYNOTICETERMSLINK$과 $TERMSANDPRIVACYNOTICEPRIVACYLINK$에 동의하게 됩니다.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "이용약관"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "개인 정보 취급 방침"
  },
  "libraryLabel": {
    "message": "스크린샷"
  }
}PK
!<%hRZZ'webextension/_locales/lij/messages.json{
  "addonDescription": {
    "message": "Fanni de föto do schermo da-o Web e sarvale in mòddo tenporaneo ò cin mòddo che restan."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Fanni 'na föto do schermo"
  },
  "myShotsLink": {
    "message": "E mæ föto do schermo"
  },
  "screenshotInstructions": {
    "message": "Rebela ò sciacca in sciâ pagina pe seleçionâ 'na region. Sciacca ESC pe anulâ."
  },
  "saveScreenshotSelectedArea": {
    "message": "Sarva"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sarva o vixibile"
  },
  "saveScreenshotFullPage": {
    "message": "Sarva tutta a pagina"
  },
  "cancelScreenshot": {
    "message": "Anulla"
  },
  "downloadScreenshot": {
    "message": "Descarega"
  },
  "notificationLinkCopiedTitle": {
    "message": "Colegamento copiou inti aponti"
  },
  "notificationLinkCopiedDetails": {
    "message": "O colegamento a l'inmagine o l'é stæto copiou inti aponti. Sciacca$META_KEY$-V pe incolalo.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Feua serviçio."
  },
  "requestErrorDetails": {
    "message": "Ne spiaxe! No poemmo sarvâ l'inmagine. Pe piaxei preuva torna dòppo."
  },
  "connectionErrorTitle": {
    "message": "No poemmo conetise a-e teu föto do schermo."
  },
  "connectionErrorDetails": {
    "message": "Pe piaxei contròlla a teu conescion a l'Internet. Se ti riesci a conetite a l'Internet, ghe poeiva ese 'n problema tenporaneo co-o serviçio de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "No poemmo sarvâ a teu inmagine perché gh'é 'n problema co-o serviçio de Firefox Screenshot. Pe piaxei preuva torna dòppo."
  },
  "unshootablePageErrorTitle": {
    "message": "No poemmo fâ 'na föto do schermo de sta pagina."
  },
  "unshootablePageErrorDetails": {
    "message": "Sta chi a no l'é 'na pagina Web standard, coscì no peu faghe 'na föto do schermo."
  },
  "selfScreenshotErrorTitle": {
    "message": "No ti peu fâ 'na föto do schermo a 'na pagina de Firefox Screenshots!"
  },
  "genericErrorTitle": {
    "message": "Ahime mi! Firefox Screeshot o s'é ciantou."
  },
  "genericErrorDetails": {
    "message": "Niatri no emmo ben acapio cöse l'é sucesso. Ti peu miga preuvâ co-ina pagina dispægia?"
  },
  "tourBodyIntro": {
    "message": "Fanni, sarva e condividdi föto do schermo sensa sciortî da Firefox."
  },
  "tourHeaderClickAndDrag": {
    "message": "Catua solo quello che t'eu"
  },
  "tourBodyClickAndDrag": {
    "message": "Sciacca e rebela pe catuâ solo 'na porçion de 'na pagina. Ti peu anche anâ co-o ratto sorvia l'area seleçionâ pe evidençiala."
  },
  "tourHeaderFullPage": {
    "message": "Catua 'n barcon ò 'na pagina intrega"
  },
  "tourBodyFullPage": {
    "message": "Seleçionn-a i pomelli de d'ato a drita pe catuâ l'area vixibile into barcon ò a pagina intrega."
  },
  "tourHeaderDownloadUpload": {
    "message": "Comme te piaxe"
  },
  "tourBodyDownloadUpload": {
    "message": "Sarva 'n ritaggio de 'na pagina Web pe condividila in mòddo ciù façile ò scaregala into teu computer. Ti peu anche sciacâ into pomello  “E mæ föto do schermo pe atrovâ” quello che t'æ za pigiou."
  },
  "tourSkip": {
    "message": "Ignòra"
  },
  "tourNext": {
    "message": "Pròscima schermâ"
  },
  "tourPrevious": {
    "message": "Schermâ de primma"
  },
  "tourDone": {
    "message": "Fæto"
  },
  "termsAndPrivacyNoticeCloudServices": {
    "message": "Se ti deuvi Firefox Screenshots, ti e d'acordio con {termsAndPrivacyNoticeTermsLink} e {termsAndPrivacyNoticePrivacyLink} de Firefox Cloud Services."
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Termini"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Informativa in sciâ privacy"
  }
}PK
!<ZY��&webextension/_locales/lo/messages.json{
  "addonDescription": {
    "message": "ຖ່າຍຄຣິບ ແລະ ພາບຫນ້າຈໍຈາກຫນ້າເວັບ ແລ້ວບັນທຶກໄວ້ຊົ່ວຄາວ ຫລື ຖາວອນ."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "ຖ່າຍພາບຫນ້າຈໍ"
  },
  "myShotsLink": {
    "message": "ພາບຂອງຂ້ອຍ"
  },
  "screenshotInstructions": {
    "message": "ລາກ ຫລື ຄິກໃສ່ຫນ້າເວັບເພື່ອເລືອກເອົາບ່ອນທີ່ຕ້ອງການ. ກົດ ESC ເພື່ອຍົກເລີກ."
  },
  "saveScreenshotSelectedArea": {
    "message": "ບັນທຶກ"
  },
  "saveScreenshotVisibleArea": {
    "message": "ບັນທຶກສ່ວນທີ່ເບິງເຫັນໄດ້"
  },
  "saveScreenshotFullPage": {
    "message": "ບັນທຶກຫມົດຫນ້າ"
  },
  "cancelScreenshot": {
    "message": "ຍົກເລີກ"
  },
  "downloadScreenshot": {
    "message": "ດາວໂຫລດ"
  },
  "notificationLinkCopiedTitle": {
    "message": "ໄດ້ສຳເນົາລີ້ງໄວ້ແລ້ວ"
  },
  "notificationLinkCopiedDetails": {
    "message": "ລີ້ງໄປຫາຮູບພາບຂອງທ່ານໄດ້ຖືກບັນທຶກໄວ້ໃນຄຣິບບອດ. ກົດ $META_KEY$-V ເພື່ອວາງ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "ໃຊ້ວຽກບໍ່ໄດ້."
  },
  "requestErrorDetails": {
    "message": "ຂໍອະໄພ! ພວກເຮົາບໍ່ສາມາດບັນທຶກພາບຂອງທ່ານໄດ້. ກະລູນາລອງໃຫມ່ອີກຄັ້ງ."
  },
  "connectionErrorTitle": {
    "message": "ພວກເຮົາບໍ່ສາມາດເຊື່ອມຕໍ່ໄປຫາພາບຫນ້າຈໍຂອງທ່ານໄດ້."
  },
  "connectionErrorDetails": {
    "message": "ກະລູນາກວດເບິງການເຊື່ອມຕໍ່ກັບອິນເຕີເນັດຂອງທ່ານ. ຖ້າຫາກວ່າທ່ານສາມາດເຊື່ອມຕໍ່ກັບອິນເຕີເນັດໄດ້ແມ່ນ ບໍລິການພາບຖ່າຍຫນ້າຈໍຂອງ Firefox ອາດຈະເກີດມີບັນຫາຊົ່ວຄາວ."
  },
  "loginErrorDetails": {
    "message": "ພວກເຮົາບໍ່ສາມາດບັນທຶກພາບຖ່າຍຂອງທ່ານໄດ້ ເພາະວ່າບໍລິການພາບຖ່າຍຫນ້າຈໍຂອງ Firefox ໄດ້ເກີດມີບັນຫາ. ກະລູນາລອງໃຫມ່ອີກຄັ້ງ."
  },
  "unshootablePageErrorTitle": {
    "message": "ພວກເຮົາບໍ່ສາມາດຖ່າຍຮູບຫນ້າຈໍຂອງຫນ້ານີ້ໄດ້."
  },
  "unshootablePageErrorDetails": {
    "message": "ນີ້ບໍ່ແມ່ນຫນ້າເວັບມາດຕະຖານ, ສະນັ້ນທ່ານຈຶ່ງບໍ່ສາມາດຖ່າຍພາບຫນ້າຈໍໄດ້."
  },
  "selfScreenshotErrorTitle": {
    "message": "ທ່ານບໍ່ສາມາດຖ່າຍພາບຫນ້າຈໍຂອງ Firefox ໄດ້!"
  },
  "emptySelectionErrorTitle": {
    "message": "ການເລືອກຂອງທ່ານນ້ອຍເກີນໄປ"
  },
  "genericErrorTitle": {
    "message": "ໂອ! Firefox Screenshots ລວນ."
  },
  "genericErrorDetails": {
    "message": "ພວກເຮົາບໍ່ແນ່ໃຈວ່າມັນຫາກະເກີດຫຍັງຂື້ນ. ກະລຸນາລອງໃຫມ່ອີກຄັ້ງ ຫລື ຖ່າຍພາບຫນ້າຈໍອື່ນລອງເບິງ"
  },
  "tourBodyIntro": {
    "message": "ຖ່າຍ, ບັນທຶກ ແລະ ແບ່ງປັນພາບຫນ້າຈໍໂດຍບໍ່ຕ້ອງອອກຈາກ Firefox."
  },
  "tourHeaderPageAction": {
    "message": "ບັນທຶກໃນຮູບແບບໃໝ່"
  },
  "tourHeaderClickAndDrag": {
    "message": "ຖ່າຍພາບຕາມທີ່ທ່ານຕ້ອງການ"
  },
  "tourBodyClickAndDrag": {
    "message": "ຄິກ ຫລື ລາກເພື່ອຖ່າຍພາບສະເພາະບາງສ່ວນຂອງຫນ້າເວັບ. ພ້ອມດຽວກັນນັ້ນທ່ານຍັງສາມາດເລື່ອນມາເພື່ອເນັ້ນພາບທີ່ທ່ານເລືອກ."
  },
  "tourHeaderFullPage": {
    "message": "ຖ່າຍພາບວິນໂດ ຫລື ຫມົດທັ້ງຫນ້າ"
  },
  "tourBodyFullPage": {
    "message": "ເລືອກປຸ່ມກົດທີ່ຢູ່ເທິງເບື້ອງຂວາມືເພື່ອຈັບພາບໃນບໍລິເວນທີ່ເບິງເຫັນໄດ້ໃນວິນໂດ ຫລື ເພື່ອຈັບພາບທັງຫມົດໃນຫນ້າເວັບ."
  },
  "tourHeaderDownloadUpload": {
    "message": "ຕາມທີ່ທ່ານມັກ"
  },
  "tourBodyDownloadUpload": {
    "message": "ບັນທຶກຮູບພາບທີ່ທ່ານໄດ້ຄັອບເອົາໄວ້ລົງໄປໄວ້ໃນເວັບເພື່ອເຮັດໃຫ້ແບ່ງປັນໄດ້ງ່າຍ ຫລື ດາວໂຫລດໄປໄວ້ໃນຄອມພິວເຕີຂອງທ່ານ. ທ່ານຍັງສາມາດຄິກໃສ່ໃນປຸ່ມກົດ \"ຮູບພາບຂອງຂ້ອຍ\" ເພື່ອຊອກຫາຮູບພາບທັງຫມົດທີ່ທ່ານໄດ້ຖ່າຍເອົາໄວ້."
  },
  "tourSkip": {
    "message": "ຂ້າມໄປ"
  },
  "tourNext": {
    "message": "ສະໄລດ໌ຕໍ່ໄປ"
  },
  "tourPrevious": {
    "message": "ສະໄລດ໌ກ່ອນຫນ້ານີ້"
  },
  "tourDone": {
    "message": "ສຳເລັດ"
  },
  "termsAndPrivacyNotice2": {
    "message": "ເພື່ອນຳໃຊ້ Firefox Screenshots ທ່ານໄດ້ຍອມຮັບ $TERMSANDPRIVACYNOTICETERMSLINK$ ແລະ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ຂອງພວກເຮົາ.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "ຂໍ້ກຳນົດ"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ຄຳເຕືອນກ່ຽວກັບຄວາມເປັນສ່ວນຕົວ"
  },
  "libraryLabel": {
    "message": "ຖ່າຍພາບໜ້າຈໍ"
  }
}PK
!<�f 9��&webextension/_locales/lt/messages.json{
  "addonDescription": {
    "message": "Darykite iškarpas ir ekrano nuotraukos su interneto turiniu bei saugokite jas laikinai arba visąlaik."
  },
  "addonAuthorsList": {
    "message": "„Mozilla“ <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Padaryti ekrano nuotrauką"
  },
  "myShotsLink": {
    "message": "Mano nuotraukos"
  },
  "screenshotInstructions": {
    "message": "Tempkite arba spustelėkite tinklalapyje norėdami pasirinkti regioną. Spustelėkite „ESC“ norėdami atsisakyti."
  },
  "saveScreenshotSelectedArea": {
    "message": "Įrašyti"
  },
  "saveScreenshotVisibleArea": {
    "message": "Įrašyti matomą"
  },
  "saveScreenshotFullPage": {
    "message": "Įrašyti visą tinklalapį"
  },
  "cancelScreenshot": {
    "message": "Atsisakyti"
  },
  "downloadScreenshot": {
    "message": "Atsisiųsti"
  },
  "downloadOnlyNotice": {
    "message": "Dabar esate tik atsiuntimo veiksenoje."
  },
  "downloadOnlyDetails": {
    "message": "„Firefox“ ekrano nuotraukos automatiškai įjungia tik atsiuntimo veikseną tokiais atvejais:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "privačiojo naršymo lange"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "kai išjungti trečiųjų šalių slapukai"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "kai įjungta „niekada nevesti žurnalo“ nuostata"
  },
  "downloadOnlyDetailsESR": {
    "message": "Jūs naudojate „Firefox“ ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Įkėlimai išjungti."
  },
  "notificationLinkCopiedTitle": {
    "message": "Saitas nukopijuotas"
  },
  "notificationLinkCopiedDetails": {
    "message": "Jūsų nuotraukos saitas buvo nukopijuotas į iškarpinę. Spustelėkite „$META_KEY$-V“ norėdami įdėti.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopijuoti"
  },
  "notificationImageCopiedTitle": {
    "message": "Nuotrauka nukopijuota"
  },
  "notificationImageCopiedDetails": {
    "message": "Jūsų nuotrauka nukopijuota į iškarpinę. Spustelėkite $META_KEY$-V, norėdami įdėti.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Ši nuotrauka buvo apkirpta iki $PIXELS$ taškų.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Neveikia."
  },
  "requestErrorDetails": {
    "message": "Atsiprašome! Mums nepavyko įrašyti jūsų nuotraukos. Prašome pabandyti vėliau."
  },
  "connectionErrorTitle": {
    "message": "Mums nepavyko prisijungti prie jūsų ekrano nuotraukų."
  },
  "connectionErrorDetails": {
    "message": "Patikrinkite savo interneto ryšį. Jeigu galite prisijungti prie interneto, gali būti, kad yra laikina problema su „Firefox Screenshots“ paslauga."
  },
  "loginErrorDetails": {
    "message": "Mums nepavyko įrašyti jūsų nuotraukos, nes yra problema su „Firefox Screenshots“ paslauga. Prašome pabandyti vėliau."
  },
  "unshootablePageErrorTitle": {
    "message": "Mums nepavyko nufotografuoti šio tinklalapio."
  },
  "unshootablePageErrorDetails": {
    "message": "Tai nėra įprastas tinklalapis, tad negalite padaryti jo nuotraukos."
  },
  "selfScreenshotErrorTitle": {
    "message": "Negalite padaryti „Firefox Screenshots“ tinklalapio nuotraukos!"
  },
  "emptySelectionErrorTitle": {
    "message": "Jūsų pasirinkimas yra per mažas"
  },
  "privateWindowErrorTitle": {
    "message": "Ekrano nuotraukos privačiajame naršyme neveikia"
  },
  "privateWindowErrorDetails": {
    "message": "Atsiprašome už nepatogumą. Mes dirbame prie šio funkcionalumo vėlesnėms versijoms."
  },
  "genericErrorTitle": {
    "message": "Vau! „Firefox Screenshots“ sugedo."
  },
  "genericErrorDetails": {
    "message": "Mes nesame tikri, kas ką tik nutiko. Norite pabandyti dar kartą arba nufotografuoti kitą tinklalapį?"
  },
  "tourBodyIntro": {
    "message": "Darykite, įrašykite ir dalinkitės ekrano nuotraukomis nepalikdami „Firefox“."
  },
  "tourHeaderPageAction": {
    "message": "Naujas būdas įrašyti"
  },
  "tourBodyPageAction": {
    "message": "Išskleiskite tinklalapio veiksmų meniu, esantį adreso juostoje, bet kada, kai norite padaryti ekrano nuotrauką."
  },
  "tourHeaderClickAndDrag": {
    "message": "Užfiksuokite būtent tai, ką norite"
  },
  "tourBodyClickAndDrag": {
    "message": "Spustelėkite ir tempkite, kad užfiksuotumėte tik dalį tinklalapio. Taip pat galite užvesti pelę, norėdami paryškinti savo pasirinkimą."
  },
  "tourHeaderFullPage": {
    "message": "Fiksuokite langus arba ištisus tinklalapius"
  },
  "tourBodyFullPage": {
    "message": "Pasirinkite mygtukus aukščiau dešinėje, norėdami užfiksuoti matomą lango dalį arba visą tinklalapį."
  },
  "tourHeaderDownloadUpload": {
    "message": "Kaip jums patogiau"
  },
  "tourBodyDownloadUpload": {
    "message": "Įrašykite padarytas nuotraukas saityne patogesniam dalinimuisi, arba atsisiųskite jas į savo kompiuterį. Spustelėję mygtuką „Mano nuotraukos“, matysite visas savo padarytas nuotraukas."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Kita skaidrė"
  },
  "tourPrevious": {
    "message": "Buvusi skaidrė"
  },
  "tourDone": {
    "message": "Baigta"
  },
  "termsAndPrivacyNotice2": {
    "message": "Naudodamiesi „Firefox“ ekrano nuotraukomis, sutinkate su mūsų $TERMSANDPRIVACYNOTICETERMSLINK$ bei $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "sąlygomis"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "privatumo nuostatais"
  },
  "libraryLabel": {
    "message": "Ekrano nuotraukos"
  }
}PK
!<,��77&webextension/_locales/mk/messages.json{
  "addonDescription": {
    "message": "Земете исечоци и слики од Интернет и зачувајте ги привремено или трајно."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Фати слика"
  },
  "myShotsLink": {
    "message": "Мои слики"
  },
  "screenshotInstructions": {
    "message": "Влечете и кликнете на страницата за да означите регион. Притиснете ESC за да се откажете."
  },
  "saveScreenshotSelectedArea": {
    "message": "Сними"
  },
  "saveScreenshotVisibleArea": {
    "message": "Сними видлив дел"
  },
  "saveScreenshotFullPage": {
    "message": "Сними цела страница"
  },
  "cancelScreenshot": {
    "message": "Откажи"
  },
  "downloadScreenshot": {
    "message": "Преземи"
  },
  "notificationLinkCopiedTitle": {
    "message": "Врската е ископирана"
  },
  "notificationLinkCopiedDetails": {
    "message": "Врската до вашата слика е ископирана во меморија. Притиснете $META_KEY$-V за да ја вметнете.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Оваа слика е скратена до $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Не работи."
  },
  "requestErrorDetails": {
    "message": "Извинете! Не можевме да ја снимиме вашата слика. Ве молиме обидете се повторно подоцна."
  },
  "connectionErrorTitle": {
    "message": "Не можеме да пристапиме до вашите слики од екран."
  },
  "connectionErrorDetails": {
    "message": "Ве молиме проверете ја вашата Интернет-врска. Ако можете да се поврзете на Интернет, тогаш можно е да има привремен проблем со сервисот Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Не можевме да ја зачуваме вашата слика бидејќи има проблем со сервисот Firefox Screenshots. Ве молиме обидете се повторно подоцна."
  },
  "unshootablePageErrorTitle": {
    "message": "Не можеме да фатиме слика од оваа страница."
  },
  "unshootablePageErrorDetails": {
    "message": "Ова не е обична веб-страница, па не можете да фатите слика од неа."
  },
  "selfScreenshotErrorTitle": {
    "message": "Не можете да фатите слика од страницата на Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Делот што го избравте е премногу мал"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots е деактивиран во текот на Приватното прелистување"
  },
  "privateWindowErrorDetails": {
    "message": "Извинете за незгодата. Работиме на оваа функционалност за во идните верзии."
  },
  "genericErrorTitle": {
    "message": "Ајдее! Firefox Screenshots излезе од контрола."
  },
  "genericErrorDetails": {
    "message": "Не сме баш сигурни што се случи. Сакате да се обидете повторно или да направите слика од друга страница?"
  },
  "tourBodyIntro": {
    "message": "Фаќајте, снимајте и споделувајте слики од екран без да го напуштите Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Нов начин за снимање"
  },
  "tourBodyPageAction": {
    "message": "Отворете го менито со активности за страница во адресната лента кога и да сакате да фатите слика."
  },
  "tourHeaderClickAndDrag": {
    "message": "Фати слика од тоа што сакаш"
  },
  "tourBodyClickAndDrag": {
    "message": "Кликнете и влечете за да фатите само дел од страницата. Исто така можете да означите дел и со покажувачот."
  },
  "tourHeaderFullPage": {
    "message": "Фати слики од прозорци или цели страници"
  },
  "tourBodyFullPage": {
    "message": "Кликнете на копчињата во горниот десен дел за да го снимите видливиот дел на прозорецот или пак, целата страница."
  },
  "tourHeaderDownloadUpload": {
    "message": "Како што Вие сакате"
  },
  "tourBodyDownloadUpload": {
    "message": "Снимете ги вашите исечоци на Интернет за полесно споделување или преземете ги на вашиот компјутер. Исто така можете да кликнете на копчето Мои слики за да ги најдете сите слики што ги имате направено."
  },
  "tourSkip": {
    "message": "ПРЕСКОКНИ"
  },
  "tourNext": {
    "message": "Следен слајд"
  },
  "tourPrevious": {
    "message": "Претходен слајд"
  },
  "tourDone": {
    "message": "Готово"
  },
  "termsAndPrivacyNotice2": {
    "message": "Со користење на Firefox Screenshots, се согласувате со нашите $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Услови"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Известување за приватност"
  },
  "libraryLabel": {
    "message": "Слики од екран"
  }
}PK
!<�AD``&webextension/_locales/ml/messages.json{
  "addonDescription": {
    "message": "വെബിൽ നിന്ന് ക്ലിപ്പുകളും സ്ക്രീൻഷോട്ടുകളും എടുത്ത് അവ താൽക്കാലികമായോ അല്ലെങ്കിൽ സ്ഥിരമായോ സംരക്ഷിക്കുക."
  },
  "addonAuthorsList": {
    "message": "മോസില്ല <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "സ്ക്രീൻഷോട്ട് എടുക്കുക"
  },
  "myShotsLink": {
    "message": "എന്റെ ഷോട്ടുകള്‍"
  },
  "screenshotInstructions": {
    "message": "ഒരു പ്രദേശം തിരഞ്ഞെടുക്കാൻ താളില്‍ ഡ്രാഗ് ചെയ്യുക അല്ലെങ്കിൽ ക്ലിക്കുചെയ്യുക. റദ്ദാക്കാൻ ESC അമർത്തുക."
  },
  "saveScreenshotSelectedArea": {
    "message": "സംരക്ഷിക്കുക"
  },
  "saveScreenshotVisibleArea": {
    "message": "കാണുന്നതു സംരക്ഷിക്കുക"
  },
  "saveScreenshotFullPage": {
    "message": "താള്‍ മുഴുവന്‍ സംരക്ഷിക്കുക"
  },
  "cancelScreenshot": {
    "message": "റദ്ദാക്കുക"
  },
  "downloadScreenshot": {
    "message": "ഡൗണ്‍ലോഡ് ചെയ്യുക"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "സ്വകാര്യ ബ്രൌസിങ്ങ് ജാലകത്തില്‍."
  },
  "notificationLinkCopiedTitle": {
    "message": "ലിങ്ക് പകര്‍ത്തി"
  },
  "notificationLinkCopiedDetails": {
    "message": "നിങ്ങളുടെ ഷോട്ടിലേക്കുള്ള ലിങ്ക് ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി. ഒട്ടിക്കാൻ $META_KEY$-V അമർത്തുക.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "പകര്‍ത്തുക"
  },
  "notificationImageCopiedTitle": {
    "message": "ഷോട്ട് പകര്‍ത്തി"
  },
  "requestErrorTitle": {
    "message": "പണി പാളി."
  },
  "requestErrorDetails": {
    "message": "ക്ഷമിക്കണം! താങ്കളുടെ സ്ക്രീൻഷോട്ട് സൂക്ഷിക്കാന്‍ കഴിഞ്ഞില്ല. ദയവായി പിന്നീടു ശ്രമിക്കുക."
  },
  "connectionErrorTitle": {
    "message": "നിങ്ങളുടെ സ്ക്രീൻഷോട്ടുകളിലേക്കു ബന്ധിപ്പിക്കാന്‍ കഴിയുന്നില്ല."
  },
  "connectionErrorDetails": {
    "message": "നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക. നിങ്ങൾക്ക് ഇന്റർനെറ്റിലേക്ക് ബന്ധിപ്പിക്കാൻ കഴിയുന്നുണ്ടെങ്കിൽ, ഫയർഫോക്സ് സ്ക്രീൻഷോട്ടുകൾ സേവനത്തിൽ താൽക്കാലിക പ്രശ്നം ഉണ്ടായേക്കാം."
  },
  "loginErrorDetails": {
    "message": "ഫയർഫോക്സ് സ്ക്രീൻഷോട്ടുകൾ സേവനത്തിൽ ഒരു പ്രശ്നമുള്ളതിനാൽ ഞങ്ങൾക്ക് നിങ്ങളുടെ ഷോട്ട് സംരക്ഷിക്കാൻ കഴിഞ്ഞില്ല. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."
  },
  "unshootablePageErrorTitle": {
    "message": "ഈ താളിന്റെ സ്ക്രീൻഷോട്ട് എടുക്കാന്‍ സാധ്യമല്ല."
  },
  "unshootablePageErrorDetails": {
    "message": "ഇതൊരു സാധാരണ താള്‍ അല്ല, അതിനാൽ അതിന്റെ ഒരു സ്ക്രീൻഷോട്ട് എടുക്കാനാകില്ല."
  },
  "selfScreenshotErrorTitle": {
    "message": "സ്ക്രീൻഷോട്ട് താളിന്റെ സ്ക്രീൻഷോട്ട് എടുക്കാന്‍ പറ്റില്ല‌!"
  },
  "emptySelectionErrorTitle": {
    "message": "നിങ്ങളുടെ തെരഞ്ഞെടുപ്പ് തീരെ ചെറുതാണ്"
  },
  "privateWindowErrorDetails": {
    "message": "അസൗകര്യം നേരിടേണ്ടി വന്നതിൽ ഖേദിക്കുന്നു. ഈ സവിശേഷതയുള്ള ഭാവിയിലെ റിലീസുകൾക്കായി ഞങ്ങൾ പ്രവർത്തിക്കുന്നു."
  },
  "genericErrorTitle": {
    "message": "അയ്യോ! ഫയര്‍ഫോക്സ് സ്ക്രീൻഷോട്ടിനു എന്തോ പറ്റി."
  },
  "genericErrorDetails": {
    "message": "എന്താ സംഭവിച്ചതെന്ന് വല്യ പിടി ഇല്ല. ഒന്നുകൂടി നോക്കുകയോ അല്ലെങ്കില്‍ വേറെ താളിന്റെ സ്ക്രീൻഷോട്ട് എടുക്കുകയോ ചെയ്യുന്നോ?"
  },
  "tourHeaderPageAction": {
    "message": "സൂക്ഷിക്കാന്‍ പുതിയൊരു മാർഗ്ഗം"
  },
  "tourHeaderDownloadUpload": {
    "message": "നിങ്ങളുടെ ഇഷ്ടാനുസൃതം"
  },
  "tourSkip": {
    "message": "ഒഴിവാക്കുക"
  },
  "tourNext": {
    "message": "അടുത്ത സ്ലൈഡ്"
  },
  "tourPrevious": {
    "message": "മുമ്പത്തെ സ്ലൈഡ്"
  },
  "tourDone": {
    "message": "തീര്‍ന്നു"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "നിബന്ധനകൾ"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "സ്വകാര്യതാ അറിയിപ്പ്"
  },
  "libraryLabel": {
    "message": "സ്ക്രീൻഷോട്ടുകൾ"
  }
}PK
!<p)���&webextension/_locales/mr/messages.json{
  "addonDescription": {
    "message": "वेबवरून क्लिप आणि स्क्रीनशॉट घ्या आणि त्यांना तात्पुरते किंवा कायमचे जतन करा."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "स्क्रीनशॉट घ्या"
  },
  "myShotsLink": {
    "message": "माझे शॉट"
  },
  "screenshotInstructions": {
    "message": "प्रदेश निवडण्यासाठी पृष्ठावर ड्रॅग करा किंवा क्लिक करा. रद्द करण्यासाठी ESC दाबा."
  },
  "saveScreenshotSelectedArea": {
    "message": "साठवा"
  },
  "saveScreenshotVisibleArea": {
    "message": "दृश्यमय साठवा"
  },
  "saveScreenshotFullPage": {
    "message": "संपूर्ण पृष्ठ साठवा"
  },
  "cancelScreenshot": {
    "message": "रद्द करा"
  },
  "downloadScreenshot": {
    "message": "डाउनलोड करा"
  },
  "notificationLinkCopiedTitle": {
    "message": "दुवा कॉपी केला"
  },
  "notificationLinkCopiedDetails": {
    "message": "आपल्या शॉटचा दुवा क्लिपबोर्डवर कॉपी झाला आहे. चिटकवण्यासाठी $META_KEY$ -V दाबा.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "नादुरुस्त."
  },
  "requestErrorDetails": {
    "message": "क्षमस्व! आम्ही आपला शॉट साठवु शकलो नाही. कृपया नंतर प्रयत्न करा."
  },
  "connectionErrorTitle": {
    "message": "आम्ही आपल्या स्क्रीनशॉटशी जोडणी करु शकत नाही."
  },
  "connectionErrorDetails": {
    "message": "कृपया आपले इंटरनेट जोडणी तपासा. आपण इंटरनेटशी जुळण्यास अक्षम असल्यास, Firefox स्क्रीनशॉट सेवेमध्ये एक तात्पुरती समस्या असु शकते."
  },
  "loginErrorDetails": {
    "message": "Firefox स्क्रीनशॉट सेवेमध्ये समस्या असल्या कारणाने आम्ही आपला शॉट साठवु शकलो नाही. कृपया नंतर प्रयत्न करा."
  },
  "unshootablePageErrorTitle": {
    "message": "आम्ही हे पृष्ठ स्क्रीनशॉट करू शकत नाही."
  },
  "unshootablePageErrorDetails": {
    "message": "हे मानक वेब पृष्ठ नाही, म्हणून आपण त्याचा स्क्रीनशॉट घेऊ शकत नाही."
  },
  "selfScreenshotErrorTitle": {
    "message": "आपण Firefox स्क्रीनशॉट पृष्ठाचा शॉट घेऊ शकत नाही!"
  },
  "emptySelectionErrorTitle": {
    "message": "आपली निवड खूप लहान आहे"
  },
  "privateWindowErrorTitle": {
    "message": "खाजगी ब्राउझिंग पद्धतीमध्ये स्क्रीनशॉट्स निष्क्रिय केले आहेत"
  },
  "privateWindowErrorDetails": {
    "message": "गैरसोयीबद्दल क्षमस्व. आम्ही भविष्यातील प्रकाशनासाठी या वैशिष्ट्यांवर कार्यरत आहोत."
  },
  "genericErrorTitle": {
    "message": "हुअ! Firefox स्क्रीनशॉट अव्यवस्थित झाले आहे."
  },
  "genericErrorDetails": {
    "message": "काय घडले याची आम्हाला खात्री नाही. पुन्हा प्रयत्न करा किंवा भिन्न पृष्ठाचा शॉट घ्या?"
  },
  "tourBodyIntro": {
    "message": "Firefox न सोडता स्क्रीनशॉट घ्या, जतन करा आणि सामायिक करा."
  },
  "tourHeaderClickAndDrag": {
    "message": "आपल्याला पाहिजे असलेल्या गोष्टी फक्त कॅप्चर करा"
  },
  "tourBodyClickAndDrag": {
    "message": "पृष्ठाचा फक्त एक भाग कॅप्चर करण्यासाठी क्लिक आणि ड्रॅग करा. आपण आपल्या निवडीवर ठळकपणे होव्हर देखील करू शकता."
  },
  "tourHeaderFullPage": {
    "message": "Windows किंवा संपूर्ण पृष्ठे कॅप्चर करा"
  },
  "tourBodyFullPage": {
    "message": "पटलामध्ये दृश्यमान क्षेत्र कॅप्चर करण्यासाठी किंवा संपूर्ण पृष्ठ कॅप्चर करण्यासाठी वरील उजवीकडील बटणे निवडा."
  },
  "tourHeaderDownloadUpload": {
    "message": "जसे आपल्याला आवडते"
  },
  "tourBodyDownloadUpload": {
    "message": "आपले क्रॉप केलेले शॉट्स वेबवर सुलभ सामायिक करण्यासाठी जतन करा, किंवा त्यांना आपल्या संगणकावर डाउनलोड करा. आपण घेतलेले सर्व शॉट्स शोधण्यासाठी आपण माझे शॉट्स बटणावर क्लिक करू शकता."
  },
  "tourSkip": {
    "message": "दुर्लक्षित करा"
  },
  "tourNext": {
    "message": "पुढील स्लाइड"
  },
  "tourPrevious": {
    "message": "मागची स्लाइड"
  },
  "tourDone": {
    "message": "झाले"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots वापरून, आपण आमच्या $TERMSANDPRIVACYNOTICETERMSLINK$आणि $TERMSANDPRIVACYNOTICEPRIVACYLINK$ शी सहमत आहात.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "अटी"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "गोपनीयता सूचना"
  },
  "libraryLabel": {
    "message": "स्क्रीनशॉट"
  }
}PK
!<^���&webextension/_locales/ms/messages.json{
  "addonDescription": {
    "message": "Ambil klip dan skrinsyot dari Web dan simpan untuk sementara waktu atau kekal."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Ambil skrinsyot"
  },
  "myShotsLink": {
    "message": "Syot Saya"
  },
  "screenshotInstructions": {
    "message": "Seret atau klik pada halaman untuk memilih kawasan. Tekan ESC untuk batalkan."
  },
  "saveScreenshotSelectedArea": {
    "message": "Simpan"
  },
  "saveScreenshotVisibleArea": {
    "message": "Simpan yang terpapar"
  },
  "saveScreenshotFullPage": {
    "message": "Simpan halaman penuh"
  },
  "cancelScreenshot": {
    "message": "Batal"
  },
  "downloadScreenshot": {
    "message": "Muat turun"
  },
  "downloadOnlyNotice": {
    "message": "Anda sedang dalam mod Muat turun-Sahaja."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots secara automatik bertukar ke mod Muat turun-Sahaja dalam situasi berikut:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Dalam tetingkap Pelayaran Peribadi."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Kuki pihak ketiga dinyahdayakan."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Jangan sesekali ingat sejarah” didayakan."
  },
  "downloadOnlyDetailsESR": {
    "message": "Anda sedang menggunakan Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Muat naik telah dinyahdayakan."
  },
  "notificationLinkCopiedTitle": {
    "message": "Pautan Disalin"
  },
  "notificationLinkCopiedDetails": {
    "message": "Pautan ke syot anda telah disalin ke klipbod. Tekan $META_KEY$-V untuk tampal.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Salin"
  },
  "notificationImageCopiedTitle": {
    "message": "Syot Disalin"
  },
  "notificationImageCopiedDetails": {
    "message": "Syot anda telah disalin ke klipbod. Tekan $META_KEY$-V untuk tampal.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Imej ini akan dipangkas menjadi $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Tidak berfungsi."
  },
  "requestErrorDetails": {
    "message": "Maaf! Kita tidak dapat menyimpan syot anda. Sila cuba lagi nanti."
  },
  "connectionErrorTitle": {
    "message": "Kami tidak dapat menyambungkan ke skrinsyot anda."
  },
  "connectionErrorDetails": {
    "message": "Sila semak sambungan Internet anda. Jika anda boleh dapat sambungan ke Internet, mungkin ada masalah sementara dengan perkhidmatan Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Kami tidak dapat menyimpan skrinsyot anda kerana ada masalah dengan perkhidmatan Firefox Screenshots. Sila cuba lagi nanti."
  },
  "unshootablePageErrorTitle": {
    "message": "Kami tidak boleh skrinsyot halaman ini."
  },
  "unshootablePageErrorDetails": {
    "message": "Ini bukan halaman Web piawai, jadi anda tidak boleh membuat skrinsyot."
  },
  "selfScreenshotErrorTitle": {
    "message": "Anda tidak boleh syot halaman Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Pilihan anda terlalu kecil"
  },
  "privateWindowErrorTitle": {
    "message": "Skrinsyot dinyahdayakan dalam Mod Pelayaran Peribadi"
  },
  "privateWindowErrorDetails": {
    "message": "Maaf atas sebarang kesulitan. Kami sedang berusaha untuk menyediakan ciri ini dalam keluaran akan datang."
  },
  "genericErrorTitle": {
    "message": "Oh tidak! Firefox Screenshots tidak berfungsi dengan betul."
  },
  "genericErrorDetails": {
    "message": "Kami tidak pasti apa yang baru berlaku. Anda mahu cuba lagi atau mengambil gambar halaman lain?"
  },
  "tourBodyIntro": {
    "message": "Ambil, simpan, dan kongsi skrinsyot tanpa meninggalkan pelayar Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Satu cara baru untuk menyimpan"
  },
  "tourBodyPageAction": {
    "message": "Kembangkan menu tindakan halaman di dalam bar alamat apabila anda mahu mengambil skrinsyot."
  },
  "tourHeaderClickAndDrag": {
    "message": "Ambil gambar hanya yang anda mahu"
  },
  "tourBodyClickAndDrag": {
    "message": "Klik dan seret untuk mengambil gambar sebahagian daripada halaman. Anda boleh juga serlahkan pilihan anda."
  },
  "tourHeaderFullPage": {
    "message": "Tangkap Tetingkap atau Keseluruhan Halaman"
  },
  "tourBodyFullPage": {
    "message": "Pilih butang di bahagian atas kanan untuk merakam kawasan paparan dalam tetingkap atau untuk merakamkan keseluruhan halaman."
  },
  "tourHeaderDownloadUpload": {
    "message": "Seperti Yang Anda Suka"
  },
  "tourBodyDownloadUpload": {
    "message": "Simpan rakaman yang dipotong ke Web, cara yang lebih mudah untuk berkongsi, atau memuat turun ke komputer anda. Anda juga boleh klik pada butang Syot Saya untuk mencari semua rakaman yang telah dibuat."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Slaid Seterusnya"
  },
  "tourPrevious": {
    "message": "Slaid Dahulu"
  },
  "tourDone": {
    "message": "Selesai"
  },
  "termsAndPrivacyNotice2": {
    "message": "Apabila menggunakan Firefox Screenshots, anda bersetuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Terma"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Notis Privasi"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<����

&webextension/_locales/my/messages.json{
  "addonDescription": {
    "message": "ဝဘ်ထံမှ ဓါတ်ပုံများနှင့် မျက်နှာပြင်ပုံဖမ်းချက်များကို ရိုက်ယူပြီး ယာယီ သို့မဟုတ် အမြဲတမ်းသိုလှောင်ရာတွင် သိမ်းဆည်းပါ။"
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "မျက်နှာပြင်ပုံရိပ် ဖမ်းယူပါ"
  },
  "myShotsLink": {
    "message": "ရိုက်ကူးထားသော ပုံများ"
  },
  "saveScreenshotSelectedArea": {
    "message": "သိမ်းရန်"
  },
  "saveScreenshotVisibleArea": {
    "message": "မြင်ရသည်များကို သိမ်းပါ"
  },
  "saveScreenshotFullPage": {
    "message": "စာမျက်နှာတစ်ခုလုံးကို သိမ်းပါ"
  },
  "cancelScreenshot": {
    "message": "မဆောင်ရွက်တော့ပါ"
  },
  "downloadScreenshot": {
    "message": "ဆွဲယူရန်"
  },
  "notificationLinkCopiedTitle": {
    "message": "လင့်ခ်ကို ကူယူပြီး"
  },
  "requestErrorTitle": {
    "message": "ပျက်နေသည်"
  },
  "requestErrorDetails": {
    "message": "စိတ်မကောင်းပါ၊ သင်ရိုက်ကူးထားသော ပုံကို မသိမ်းနိုင်ပါ။ နောင်တွင် ပြန်စမ်းကြည့်ပါ။"
  },
  "connectionErrorTitle": {
    "message": "သင်ရိုက်ကူးထားသော မျက်နှာပြင်ပုံရိပ်များထံ မချိတ်ဆက်နိုင်ပါ။"
  },
  "unshootablePageErrorTitle": {
    "message": "ဒီစာမျက်နှာ၏ မျက်နှာပြင်ပုံရိပ်ကို မရိုက်ကူးနိုင်ပါ။"
  },
  "tourBodyIntro": {
    "message": "Firefox ကနေ ထွက်ခွာရန် မလိုဘဲ မျက်နှာပြင်ပုံရိပ်များကို ရိုက်ကူး၊ သိမ်းဆည်း၊ မျှဝေပါ။"
  },
  "tourHeaderClickAndDrag": {
    "message": "ကိုယ်နှစ်သက်ရာ စာမျက်နှာများကို ဖမ်းယူပါ"
  },
  "tourHeaderFullPage": {
    "message": "ဝင်ဒိုးများ သို့မဟုတ် စာမျက်နှာတစ်ခုလုံးကို ဖမ်းယူပါ"
  },
  "tourHeaderDownloadUpload": {
    "message": "နှစ်သက်သလို"
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "နောက်ဆလိုက်"
  },
  "tourPrevious": {
    "message": "အရင်ကဆလိုက်"
  },
  "tourDone": {
    "message": "ပြီးပြီ"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "စကားရပ်များ"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ကိုယ်ရေးကာကွယ်မှု သတိပေးချက်"
  }
}PK
!<�˓uu)webextension/_locales/nb_NO/messages.json{
  "addonDescription": {
    "message": "Ta klipp og skjermbilder fra nettet og lagre de midlertidig eller permanent."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Ta et skjermbilde"
  },
  "myShotsLink": {
    "message": "Mine skjermbilder"
  },
  "screenshotInstructions": {
    "message": "Dra eller klikk på siden for å velge et område. Trykk på ESC for å avbryte."
  },
  "saveScreenshotSelectedArea": {
    "message": "Lagre"
  },
  "saveScreenshotVisibleArea": {
    "message": "Lagre synlig område"
  },
  "saveScreenshotFullPage": {
    "message": "Lagre hele siden"
  },
  "cancelScreenshot": {
    "message": "Avbryt"
  },
  "downloadScreenshot": {
    "message": "Last ned"
  },
  "downloadOnlyNotice": {
    "message": "Du er for tiden i nedlastingsmodus."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots endres automatisk til nedlastingsmodus i disse situasjonene:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "I et privat nettlesingsvindu."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Tredjeparts infokapsler er deaktivert."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "«Husk aldri historikk» er aktivert."
  },
  "downloadOnlyDetailsESR": {
    "message": "Du bruker Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Opplastinger er slått av."
  },
  "notificationLinkCopiedTitle": {
    "message": "Lenke kopiert"
  },
  "notificationLinkCopiedDetails": {
    "message": "Lenken til skjermbildet ditt er kopiert til utklippstavlen. Trykk på $META_KEY$-V for å lime inn.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopier"
  },
  "notificationImageCopiedTitle": {
    "message": "Bilde kopiert"
  },
  "notificationImageCopiedDetails": {
    "message": "Bildet ditt er kopiert til utklippstavlen. Trykk på $META_KEY$-V for å lime det inn.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Dette bildet har blitt beskåret til $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "I ustand."
  },
  "requestErrorDetails": {
    "message": "Beklager! Vi klarte ikke å lagre skjermbildet ditt. Prøv igjen senere."
  },
  "connectionErrorTitle": {
    "message": "Vi kan ikke koble til dine skjermbilder."
  },
  "connectionErrorDetails": {
    "message": "Kontroller din internett-tilkopling. Om du kan koble til internett, kan det være et midlertidig problem med tjenesten Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Vi klarte ikke å lagre skjermbildet ditt, fordi det er et problem med tjenesten Firefox Screenshots. Prøv igjen senere."
  },
  "unshootablePageErrorTitle": {
    "message": "Vi kan ikke ta skjermbilde av siden."
  },
  "unshootablePageErrorDetails": {
    "message": "Dette er ikke en vanlig nettside, og du kan ikke ta skjermbilde av den."
  },
  "selfScreenshotErrorTitle": {
    "message": "Du kan ikke ta skjermbilde av siden Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Det valgte området er for liten"
  },
  "privateWindowErrorTitle": {
    "message": "Skjermbildetaking er deaktivert i privat nettlesings-modus"
  },
  "privateWindowErrorDetails": {
    "message": "Beklager ulempen. Vi jobber med denne funksjonen for fremtidige utgivelser."
  },
  "genericErrorTitle": {
    "message": "Oi! Det ser ut til at Firefox Screenshots ikke fungerer korrekt."
  },
  "genericErrorDetails": {
    "message": "Vi er ikke sikre på hva som hendte. Kan du prøve igjen eller ta et bilde av en annen side?"
  },
  "tourBodyIntro": {
    "message": "Ta, lagre og del skjermbilder uten å forlate Firefox."
  },
  "tourHeaderPageAction": {
    "message": "En ny måte å lagre på"
  },
  "tourBodyPageAction": {
    "message": "Utvid sidehandlingsmenyen i adresselinjen når du vil ta et skjermbilde."
  },
  "tourHeaderClickAndDrag": {
    "message": "Ta bilde av akkurat hva du vil"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikk for å dra og ta skjermbilde av bare en del av siden. Du kan også føre musen over for å framheve merket område."
  },
  "tourHeaderFullPage": {
    "message": "Ta skjermbilde av vinduer eller hele sider."
  },
  "tourBodyFullPage": {
    "message": "Bruk knappene i det øvre høyre hjørnet for å ta skjermbilde av det synlige området i vinduet eller for å ta skjermbilde av en hel side."
  },
  "tourHeaderDownloadUpload": {
    "message": "Som du vil ha det"
  },
  "tourBodyDownloadUpload": {
    "message": "Lagre de beskjærte skjermbildene dine på nettet for enklere deling, eller last de ned til din datamaskin. Du kan også klikke på knappen Mine skjermbilde for å finne alle skjermbildene du har tatt."
  },
  "tourSkip": {
    "message": "Hopp over"
  },
  "tourNext": {
    "message": "Neste slide"
  },
  "tourPrevious": {
    "message": "Forrige slide"
  },
  "tourDone": {
    "message": "Ferdig"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ved å bruke Firefox Screenshots, godtar du vår $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "vilkår"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "personvernbestemmelser"
  },
  "libraryLabel": {
    "message": "Skjermbilder"
  }
}PK
!<�Ggg&webextension/_locales/nl/messages.json{
  "addonDescription": {
    "message": "Maak clips en schermafbeeldingen van het web en sla deze tijdelijk of permanent op."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Een schermafbeelding maken"
  },
  "myShotsLink": {
    "message": "Mijn afbeeldingen"
  },
  "screenshotInstructions": {
    "message": "Sleep of klik op de pagina om een gebied te selecteren. Druk op ESC om te annuleren."
  },
  "saveScreenshotSelectedArea": {
    "message": "Opslaan"
  },
  "saveScreenshotVisibleArea": {
    "message": "Zichtbaar gebied opslaan"
  },
  "saveScreenshotFullPage": {
    "message": "Volledige pagina opslaan"
  },
  "cancelScreenshot": {
    "message": "Annuleren"
  },
  "downloadScreenshot": {
    "message": "Downloaden"
  },
  "downloadOnlyNotice": {
    "message": "U bevindt zich momenteel in Alleen-downloadenmodus."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots wisselt in de volgende situaties automatisch naar Alleen-downloadenmodus:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "In een privénavigatievenster."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies van derden zijn uitgeschakeld."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "‘Nooit geschiedenis onthouden’ is ingeschakeld."
  },
  "downloadOnlyDetailsESR": {
    "message": "U gebruikt Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Uploads zijn uitgeschakeld."
  },
  "notificationLinkCopiedTitle": {
    "message": "Koppeling gekopieerd"
  },
  "notificationLinkCopiedDetails": {
    "message": "De koppeling naar uw afbeelding is naar het klembord gekopieerd. Druk op $META_KEY$-V om te plakken.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiëren"
  },
  "notificationImageCopiedTitle": {
    "message": "Afbeelding gekopieerd"
  },
  "notificationImageCopiedDetails": {
    "message": "Uw afbeelding is naar het klembord gekopieerd. Druk op $META_KEY$-V om te plakken.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Deze afbeelding is bijgesneden naar $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Buiten werking."
  },
  "requestErrorDetails": {
    "message": "Sorry! Uw afbeelding kon niet worden opgeslagen. Probeer het later opnieuw."
  },
  "connectionErrorTitle": {
    "message": "We kunnen geen verbinding met uw schermafdrukken maken."
  },
  "connectionErrorDetails": {
    "message": "Controleer uw internetverbinding. Als u verbinding met het internet kunt maken, kan er sprake zijn van een tijdelijk probleem met de Firefox Screenshots-service."
  },
  "loginErrorDetails": {
    "message": "Uw afbeelding kon niet worden opgeslagen, omdat er een probleem is met de Firefox Screenshots-service. Probeer het later opnieuw."
  },
  "unshootablePageErrorTitle": {
    "message": "Van deze pagina kan geen schermafbeelding worden gemaakt."
  },
  "unshootablePageErrorDetails": {
    "message": "Dit is geen standaardwebpagina, dus u kunt er geen schermafbeelding van maken."
  },
  "selfScreenshotErrorTitle": {
    "message": "U kunt geen afbeelding van een Firefox Screenshots-pagina maken!"
  },
  "emptySelectionErrorTitle": {
    "message": "Uw selectie is te klein"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots is uitgeschakeld in Privénavigatiemodus"
  },
  "privateWindowErrorDetails": {
    "message": "Sorry voor het ongemak. Voor toekomstige releases wordt aan deze functie gewerkt."
  },
  "genericErrorTitle": {
    "message": "Ho! Er is iets mis met Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "We weten niet precies wat er zonet is gebeurd. Wilt u het nogmaals proberen, of een schermafbeelding van een andere pagina maken?"
  },
  "tourBodyIntro": {
    "message": "Maak, bewaar en deel schermafbeeldingen zonder Firefox te verlaten."
  },
  "tourHeaderPageAction": {
    "message": "Een nieuwe manier om op te slaan"
  },
  "tourBodyPageAction": {
    "message": "Vouw het menu Pagina-acties in de adresbalk uit zodra u een schermafbeelding wilt maken."
  },
  "tourHeaderClickAndDrag": {
    "message": "Leg alleen vast wat u wilt"
  },
  "tourBodyClickAndDrag": {
    "message": "Klik en sleep om alleen een gedeelte van een pagina vast te leggen. U kunt ook de muisaanwijzer boven een gebied houden om uw selectie te accentueren."
  },
  "tourHeaderFullPage": {
    "message": "Leg vensters of hele pagina’s vast"
  },
  "tourBodyFullPage": {
    "message": "Selecteer de knoppen rechtsboven om het zichtbare gebied in het venster vast te leggen, of om een hele pagina vast te leggen."
  },
  "tourHeaderDownloadUpload": {
    "message": "Zoals u wilt"
  },
  "tourBodyDownloadUpload": {
    "message": "Bewaar uw bijgesneden afbeeldingen op het web voor makkelijker delen, of download ze naar uw computer. U kunt ook op de knop Mijn afbeeldingen klikken om al uw gemaakte afbeeldingen te vinden."
  },
  "tourSkip": {
    "message": "Overslaan"
  },
  "tourNext": {
    "message": "Volgende slide"
  },
  "tourPrevious": {
    "message": "Vorige slide"
  },
  "tourDone": {
    "message": "Gereed"
  },
  "termsAndPrivacyNotice2": {
    "message": "Door Firefox Screenshots te gebruiken, gaat u akkoord met onze $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Voorwaarden"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Privacyverklaring"
  },
  "libraryLabel": {
    "message": "Schermafbeeldingen"
  }
}PK
!<��GG)webextension/_locales/nn_NO/messages.json{
  "addonDescription": {
    "message": "Ta klipp og skjermbilde frå nettet og lagre dei mellombels eller permanent."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Ta eit skjermbilde"
  },
  "myShotsLink": {
    "message": "Mine skjermbilde"
  },
  "screenshotInstructions": {
    "message": "Drag eller klikk på sida for å velje eit område. Trykk på ESC for å avbryte."
  },
  "saveScreenshotSelectedArea": {
    "message": "Lagre"
  },
  "saveScreenshotVisibleArea": {
    "message": "Lagre synleg område"
  },
  "saveScreenshotFullPage": {
    "message": "Lagre heile sida"
  },
  "cancelScreenshot": {
    "message": "Avbryt"
  },
  "downloadScreenshot": {
    "message": "Last ned"
  },
  "downloadOnlyNotice": {
    "message": "Du er for tida i nedlastingsmodus."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots endrar automatisk til nedlastingsmodus i følgjande situasjonar:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "I eit privat nettlesingsvindauge."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Tredjeparts infokapslar er deaktiverte."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "«Hugs aldri historikk» er aktivert."
  },
  "downloadOnlyDetailsESR": {
    "message": "Du brukar Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Opplastingar er slått av."
  },
  "notificationLinkCopiedTitle": {
    "message": "Lenke kopiert"
  },
  "notificationLinkCopiedDetails": {
    "message": "Lenka til skjermbildet ditt er kopiert til utklippstavla. Trykk på $META_KEY$-V for å lime inn.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopier"
  },
  "notificationImageCopiedTitle": {
    "message": "Bilde kopiert"
  },
  "notificationImageCopiedDetails": {
    "message": "Bildet ditt er kopiert til utklippstavla. Trykk på $META_KEY$-V for å lime det inn.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Dette bildet har vorte skore til til $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "I ustand."
  },
  "requestErrorDetails": {
    "message": "Beklagar! Vi klarte ikkje å lagre skjermbiildet ditt. Prøv igjen seinare."
  },
  "connectionErrorTitle": {
    "message": "Vi kan ikkje kople til skjermbilda dine."
  },
  "connectionErrorDetails": {
    "message": "Kontroller internett-tilkoplinga di. Om du kan kople til internett, kan det vere eit mellombels problem med tenesta Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Vi klarte ikkje å lagre skjermbildet ditt, fordi det er eit problem med tenesta Firefox Screenshots. Prøv igjen seinare."
  },
  "unshootablePageErrorTitle": {
    "message": "Vi kan ikkje ta skjermbilde av sida."
  },
  "unshootablePageErrorDetails": {
    "message": "Dette er ikkje ei vanleg nettside, og du kan ikkje ta skjermbilde av henne."
  },
  "selfScreenshotErrorTitle": {
    "message": "Du kan ikkje ta skjermbilde av sida Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Markeringa di er for lita"
  },
  "privateWindowErrorTitle": {
    "message": "Skjermbildeknipsing er slått av i Privat nettlesings-modus"
  },
  "privateWindowErrorDetails": {
    "message": "Ein er lei for ulempa. Vi jobbar med denne funksjonen for framtidige versjonar."
  },
  "genericErrorTitle": {
    "message": "Oj! Det ser ut til at Firefox Screenshots ikkje fungerer korrekt."
  },
  "genericErrorDetails": {
    "message": "Vi er ikkje sikre på kva som hende. Kan du prøve igjen eller ta eit bilde på ei anna side?"
  },
  "tourBodyIntro": {
    "message": "Ta, lagre og del skjermbilde utan å forlate Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ein ny måte å lagre på"
  },
  "tourBodyPageAction": {
    "message": "Utvid sidehandlingsmenyen i adresselinja når du vil ta eit skjermbilde."
  },
  "tourHeaderClickAndDrag": {
    "message": "Knips akkurat det du vil"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikk for å drage og knipse berre ein del av sida. Du kan også føre musa over for å framheve merkt område."
  },
  "tourHeaderFullPage": {
    "message": "Knips vindauge eller heile sider"
  },
  "tourBodyFullPage": {
    "message": "Vel knappane i det øvre høgre hjørnet for å knipse det synlege området i vindauget eller for å knipse ei heil side."
  },
  "tourHeaderDownloadUpload": {
    "message": "Som du vil ha det"
  },
  "tourBodyDownloadUpload": {
    "message": "Lagre dei tilskjerte bilda dine på nettet for enklare deling, eller last dei ned til datamaskina di. Du kan også klikke på knappen Mine skjermbilde for å finne alle bilda du har tatt."
  },
  "tourSkip": {
    "message": "Hopp over"
  },
  "tourNext": {
    "message": "Neste slide"
  },
  "tourPrevious": {
    "message": "Føregåande slide"
  },
  "tourDone": {
    "message": "Ferdig"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ved å bruke Firefox Screenshots, seier du deg samd i $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Vilkår"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Personvernmerknad"
  },
  "libraryLabel": {
    "message": "Skjermbilde"
  }
}PK
!<��Y,��)webextension/_locales/pa_IN/messages.json{
  "addonAuthorsList": {
    "message": "ਮੌਜ਼ੀਲਾ <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "ਸਕਰੀਨ-ਸ਼ਾਟ ਲਵੋ"
  },
  "myShotsLink": {
    "message": "ਮੇਰੇ ਸ਼ਾਟ"
  },
  "screenshotInstructions": {
    "message": "ਖੇਤਰ ਨੂੰ ਚੁਣਨ ਵਾਸਤੇ ਖਿੱਚੋ ਜਾਂ ਕਲਿੱਕ ਕਰੋ। ਰੱਦ ਕਰਨ ਵਾਸਤੇ ESC ਦੱਬੋ।"
  },
  "saveScreenshotSelectedArea": {
    "message": "ਸੰਭਾਲੋ"
  },
  "saveScreenshotVisibleArea": {
    "message": "ਦਿੱਖ ਨੂੰ ਸੰਭਾਲੋ"
  },
  "saveScreenshotFullPage": {
    "message": "ਪੂਰੇ ਸਫ਼ੇ ਨੂੰ ਸੰਭਾਲੋ"
  },
  "cancelScreenshot": {
    "message": "ਰੱਦ ਕਰੋ"
  },
  "downloadScreenshot": {
    "message": "ਡਾਊਨਲੋਡ ਕਰੋ"
  },
  "notificationLinkCopiedTitle": {
    "message": "ਲਿੰਕ ਕਾਪੀ ਕੀਤਾ ਗਿਆ"
  },
  "requestErrorTitle": {
    "message": "ਖ਼ਰਾਬ ਹੈ।"
  },
  "tourHeaderPageAction": {
    "message": "ਸੰਭਾਲਣ ਦਾ ਨਵਾਂ ਢੰਗ"
  },
  "tourSkip": {
    "message": "ਛੱਡੋ"
  },
  "tourNext": {
    "message": "ਅਗਲੀ ਸਲਾਈਡ"
  },
  "tourPrevious": {
    "message": "ਪਿਛਲੀ ਸਲਾਈਡ"
  },
  "tourDone": {
    "message": "ਮੁਕੰਮਲ"
  }
}PK
!<0�}f��&webextension/_locales/pl/messages.json{
  "addonDescription": {
    "message": "Twórz wycinki i zrzuty stron internetowych i zapisuj je tymczasowo lub trwale."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Wykonaj zrzut ekranu"
  },
  "myShotsLink": {
    "message": "Moje zrzuty"
  },
  "screenshotInstructions": {
    "message": "Przeciągnij lub kliknij na stronie, aby wybrać obszar. Naciśnij klawisz Esc, aby anulować."
  },
  "saveScreenshotSelectedArea": {
    "message": "Zapisz"
  },
  "saveScreenshotVisibleArea": {
    "message": "Zapisz widoczne"
  },
  "saveScreenshotFullPage": {
    "message": "Zapisz całą stronę"
  },
  "cancelScreenshot": {
    "message": "Anuluj"
  },
  "downloadScreenshot": {
    "message": "Pobierz"
  },
  "downloadOnlyNotice": {
    "message": "Obecnie używany jest tryb umożliwiający tylko pobieranie."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automatycznie przełącza na tryb umożliwiający tylko pobieranie w tych sytuacjach:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Okno jest prywatne."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Ciasteczka witryn zewnętrznych podmiotów są wyłączone."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Zachowywanie historii jest wyłączone."
  },
  "downloadOnlyDetailsESR": {
    "message": "Używany jest Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Wysyłanie zostało wyłączone."
  },
  "notificationLinkCopiedTitle": {
    "message": "Skopiowano odnośnik"
  },
  "notificationLinkCopiedDetails": {
    "message": "Odnośnik do zrzutu został skopiowany do schowka. Naciśnij $META_KEY$-V, aby go wkleić.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiuj"
  },
  "notificationImageCopiedTitle": {
    "message": "Skopiowano zrzut"
  },
  "notificationImageCopiedDetails": {
    "message": "Zrzut został skopiowany do schowka. Naciśnij $META_KEY$-V, aby go wkleić.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Ten obraz został przycięty do $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Awaria."
  },
  "requestErrorDetails": {
    "message": "Nie można zapisać zrzutu. Spróbuj ponownie później."
  },
  "connectionErrorTitle": {
    "message": "Nie można połączyć się z zrzutami ekranu."
  },
  "connectionErrorDetails": {
    "message": "Sprawdź swoje połączenie z Internetem. Jeśli działa ono prawidłowo, to może występować tymczasowy problem z usługą Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nie można zapisać zrzutu, ponieważ występuje problem z usługą Firefox Screenshots. Spróbuj ponownie później."
  },
  "unshootablePageErrorTitle": {
    "message": "Nie można wykonać zrzutu tej strony."
  },
  "unshootablePageErrorDetails": {
    "message": "To nie jest standardowa strona internetowa, więc nie można wykonać jej zrzutu."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nie można wykonać zrzutu strony Firefox Screenshots."
  },
  "emptySelectionErrorTitle": {
    "message": "Zaznaczenie jest za małe"
  },
  "privateWindowErrorTitle": {
    "message": "Firefox Screenshots jest wyłączony w trybie prywatnym"
  },
  "privateWindowErrorDetails": {
    "message": "Przepraszamy za utrudnienia. Pracujemy nad dodaniem tej funkcji."
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshots wymknął się spod kontroli."
  },
  "genericErrorDetails": {
    "message": "Nie bardzo wiemy, co się wydarzyło. Spróbujesz ponownie lub wykonasz zrzut innej strony?"
  },
  "tourBodyIntro": {
    "message": "Wykonuj, zapisuj i udostępniaj zrzuty ekranu bez wychodzenia z Firefoksa."
  },
  "tourHeaderPageAction": {
    "message": "Nowy sposób zapisywania"
  },
  "tourBodyPageAction": {
    "message": "Rozwiń menu interakcji na pasku adresu, kiedy chcesz wykonać zrzut ekranu."
  },
  "tourHeaderClickAndDrag": {
    "message": "Zapisuj tylko to, co potrzebujesz"
  },
  "tourBodyClickAndDrag": {
    "message": "Kliknij i przeciągnij, aby zapisać tylko część strony. Możesz także najechać, aby wyróżnić zaznaczony obszar."
  },
  "tourHeaderFullPage": {
    "message": "Zapisuj zrzuty okien lub całych stron"
  },
  "tourBodyFullPage": {
    "message": "Kliknij przycisk w górnym prawym rogu, aby zapisać obszar widoczny w oknie lub całą stronę."
  },
  "tourHeaderDownloadUpload": {
    "message": "Tak, jak lubisz"
  },
  "tourBodyDownloadUpload": {
    "message": "Zapisuj przycięte zrzuty w Internecie, aby łatwiej je udostępniać, albo pobierz je na swój komputer. Możesz też kliknąć przycisk „Moje zrzuty”, aby przeglądać wszystkie wykonane zrzuty."
  },
  "tourSkip": {
    "message": "Pomiń"
  },
  "tourNext": {
    "message": "Dalej"
  },
  "tourPrevious": {
    "message": "Wstecz"
  },
  "tourDone": {
    "message": "Zamknij"
  },
  "termsAndPrivacyNotice2": {
    "message": "Używając Firefox Screenshots, zgadzasz się na $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "warunki korzystania"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "zasady ochrony prywatności"
  },
  "libraryLabel": {
    "message": "Zrzuty ekranu"
  }
}PK
!<�5�(()webextension/_locales/pt_BR/messages.json{
  "addonDescription": {
    "message": "Tire capturas de tela da Web e guarde-as temporariamente ou permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Capturar tela"
  },
  "myShotsLink": {
    "message": "Minhas capturas"
  },
  "screenshotInstructions": {
    "message": "Arraste ou clique na página para selecionar uma região. Pressione ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Salvar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Salvar área visível"
  },
  "saveScreenshotFullPage": {
    "message": "Salvar página completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Baixar"
  },
  "downloadOnlyNotice": {
    "message": "Você está atualmente no modo somente baixar."
  },
  "downloadOnlyDetails": {
    "message": "O Firefox Screenshots muda automaticamente para o modo Somente baixar nessas situações:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Em uma janela de navegação privativa."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies de terceiros estão desabilitados."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Nunca lembrar o histórico” está habilitado."
  },
  "downloadOnlyDetailsESR": {
    "message": "Você está usando o Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Os envios foram desabilitados."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link copiado"
  },
  "notificationLinkCopiedDetails": {
    "message": "O link da sua captura foi copiado para a área de transferência. Pressione $META_KEY$-V para colar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Capturado"
  },
  "notificationImageCopiedDetails": {
    "message": "Sua captura de tela foi copiada para a área de transferência. Pressione $META_KEY$-V para colar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Esta imagem foi recortada para $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Oops! Fora do ar."
  },
  "requestErrorDetails": {
    "message": "Desculpe! Não conseguimos salvar a sua captura de tela. Tente novamente mais tarde."
  },
  "connectionErrorTitle": {
    "message": "Não conseguimos nos conectar às suas capturas de tela."
  },
  "connectionErrorDetails": {
    "message": "Por favor, verifique a sua conexão com a Internet. Se consegue conectar-se à Internet, pode haver um problema temporário com o serviço Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Não conseguimos salvar sua captura porque há um problema com o serviço Firefox Screenshots. Por favor, tente novamente mais tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "Não conseguimos capturar a tela nesta página."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta não é uma página web padrão, por isso não podemos capturar sua tela."
  },
  "selfScreenshotErrorTitle": {
    "message": "Você não pode capturar uma página do Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Sua seleção é muito pequena"
  },
  "privateWindowErrorTitle": {
    "message": "As capturas de tela é desativadas no modo de navegação privativa"
  },
  "privateWindowErrorDetails": {
    "message": "Lamentamos o inconveniente. Estamos trabalhando neste recurso para lançamentos futuros."
  },
  "genericErrorTitle": {
    "message": "Uoou! O Firefox Screenshot enlouqueceu."
  },
  "genericErrorDetails": {
    "message": "Não temos certeza do que acabou de acontecer. Tentar novamente ou fazer uma captura de uma página diferente?"
  },
  "tourBodyIntro": {
    "message": "Capture, salve e compartilhe telas sem sair do Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Um novo jeito de salvar"
  },
  "tourBodyPageAction": {
    "message": "Abra o menu de ações da página na barra de endereços sempre que quiser fazer uma captura de tela."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capture apenas o que você quer"
  },
  "tourBodyClickAndDrag": {
    "message": "Clique e arraste para capturar apenas uma parte de uma página. Você também pode passar o mouse para realçar sua seleção."
  },
  "tourHeaderFullPage": {
    "message": "Capture janelas ou páginas inteiras"
  },
  "tourBodyFullPage": {
    "message": "Selecione os botões no canto superior direito para capturar a área visível na janela ou capturar uma página inteira."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como você quiser"
  },
  "tourBodyDownloadUpload": {
    "message": "Salve suas capturas na web para compartilhar mais facilmente, ou baixe-as no seu computador. Você também pode clicar no botão Minhas capturas para encontrar todas as capturas que tirou."
  },
  "tourSkip": {
    "message": "Pular"
  },
  "tourNext": {
    "message": "Próximo slide"
  },
  "tourPrevious": {
    "message": "Slide anterior"
  },
  "tourDone": {
    "message": "Concluído"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ao usar o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Termos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Política de privacidade"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<t�
��)webextension/_locales/pt_PT/messages.json{
  "addonDescription": {
    "message": "Tire clipes e capturas de ecrã da Web e guarde-as temporariamente ou permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Tirar uma captura de ecrã"
  },
  "myShotsLink": {
    "message": "Minhas capturas"
  },
  "screenshotInstructions": {
    "message": "Arraste ou clique na página para selecionar uma região. Pressione ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar visível"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar página inteira"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Transferir"
  },
  "downloadOnlyNotice": {
    "message": "Está atualmente no modo Transferências-apenas."
  },
  "downloadOnlyDetails": {
    "message": "O Firefox Screenshots muda automaticamente para o modo Transferências-apenas nestas situações:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Numa janela de navegação privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "As cookies de terceiros estão desativadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Nunca memorizar histórico” está ativado."
  },
  "downloadOnlyDetailsESR": {
    "message": "Está a utilizar o Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Os carregamentos foram desativados."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ligação copiada"
  },
  "notificationLinkCopiedDetails": {
    "message": "A ligação para a sua captura foi copiada para a área de transferência. Pressione $META_KEY$-V para colar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiada"
  },
  "notificationImageCopiedDetails": {
    "message": "A sua captura foi copiada para a área de transferência. Pressione $META_KEY$-V para colar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Esta imagem foi recortada para $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Fora de serviço."
  },
  "requestErrorDetails": {
    "message": "Desculpe! Não conseguimos guardar a sua captura. Por favor tente novamente mais tarde."
  },
  "connectionErrorTitle": {
    "message": "Não conseguimos ligar às suas capturas de ecrã."
  },
  "connectionErrorDetails": {
    "message": "Por favor, verifique a sua ligação à Internet. Se consegue ligar-se à Internet, pode existir um problema temporário com o serviço Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Não conseguimos guardar a sua captura porque existe um problema com o serviço Firefox Screenshots. Por favor tente novamente mais tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "Não conseguimos capturar o ecrã nesta página."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta não é uma página Web padrão, por isso não podemos tirar uma captura de ecrã da mesma."
  },
  "selfScreenshotErrorTitle": {
    "message": "Não pode tirar uma captura de uma página Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "A sua seleção é demasiado pequena"
  },
  "privateWindowErrorTitle": {
    "message": "O Screenshots está desativado no modo de navegação privada"
  },
  "privateWindowErrorDetails": {
    "message": "Desculpe pela inconveniência. Estamos a trabalhar nesta funcionalidade para futuros lançamentos."
  },
  "genericErrorTitle": {
    "message": "Uau! Algo correu mal com o Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "Não temos a certeza do que acabou de acontecer. Importa-se de tentar novamente ou tirar uma captura de uma página diferente?"
  },
  "tourBodyIntro": {
    "message": "Tire, guarde e partilhe capturas de ecrã sem sair do Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Uma nova maneira de guardar"
  },
  "tourBodyPageAction": {
    "message": "Expanda o menu de ações da página na barra de endereço sempre que quiser tirar uma captura de ecrã."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capture exatamente o que quer"
  },
  "tourBodyClickAndDrag": {
    "message": "Clique e arraste para capturar apenas uma parte de uma página. Pode também pairar para destacar a sua seleção."
  },
  "tourHeaderFullPage": {
    "message": "Capture janelas ou páginas inteiras"
  },
  "tourBodyFullPage": {
    "message": "Selecione os botões no canto superior direito para capturar a área visível na janela ou para capturar uma página inteira."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como você gosta"
  },
  "tourBodyDownloadUpload": {
    "message": "Guarde as suas capturas na web para partilhar mais facilmente ou transfira-as para o seu computador. Pode também clicar no botão Minhas capturas para encontrar todas as capturas que tirou."
  },
  "tourSkip": {
    "message": "SALTAR"
  },
  "tourNext": {
    "message": "Diapositivo seguinte"
  },
  "tourPrevious": {
    "message": "Diapositivo anterior"
  },
  "tourDone": {
    "message": "Feito"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ao utilizar o Firefox Screenshots, concorda com os nossos $TERMSANDPRIVACYNOTICETERMSLINK$ e com o $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Termos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Aviso de privacidade"
  },
  "libraryLabel": {
    "message": "Capturas de ecrã"
  }
}PK
!<ϥ�99&webextension/_locales/rm/messages.json{
  "addonDescription": {
    "message": "Fai maletgs da visur dal web ed als memorisescha temporarmain u permanentamain."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Far in maletg dal visur"
  },
  "myShotsLink": {
    "message": "Mes maletgs da visur"
  },
  "screenshotInstructions": {
    "message": "Tira u clicca sin la pagina per tscherner ina regiun. Smatga ESC per interrumper."
  },
  "saveScreenshotSelectedArea": {
    "message": "Memorisar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Memorisar la regiun visibla"
  },
  "saveScreenshotFullPage": {
    "message": "Memorisar la pagina cumpletta"
  },
  "cancelScreenshot": {
    "message": "Interrumper"
  },
  "downloadScreenshot": {
    "message": "Telechargiar"
  },
  "downloadOnlyNotice": {
    "message": "Ti es actualmain en il modus che permetta mo da telechargiar."
  },
  "downloadOnlyDetails": {
    "message": "En suandantas situaziuns permetta Firefox Screenshots mo da telechargiar:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Sche ti navigheschas en il modus privat."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Sche cookies da terzs èn deactivads."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Sche l'opziun «Mai memorisar la cronologia» è activada."
  },
  "notificationLinkCopiedTitle": {
    "message": "Copià la colliaziun"
  },
  "notificationLinkCopiedDetails": {
    "message": "La colliaziun tar tes maletg da visur è vegnida copiada en l'archiv provisoric. Smatga $META_KEY$-V per l'encollar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Copià il maletg"
  },
  "notificationImageCopiedDetails": {
    "message": "Tes maletg dal visur è vegnì copià en l'archiv provisoric. Smatga $META_KEY$-V per l'encollar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Quest maletg è vegnì retaglià a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ord funcziun."
  },
  "requestErrorDetails": {
    "message": "Perstgisa! I è actualmain betg pussibel da memorisar tes maletg da visur. Emprova p.pl. pli tard anc ina giada."
  },
  "connectionErrorTitle": {
    "message": "Impussibel da connectar a tes maletgs da visur."
  },
  "connectionErrorDetails": {
    "message": "Controllescha tia connexiun a l'internet. Sche ti has access a l'internet ha il servetsch da Firefox Screenshots forsa temporarmain in problem."
  },
  "loginErrorDetails": {
    "message": "Impussibel da memorisar tes maletg da virus perquai ch'i dat in problem un il servetsch da Firefox Screenshots. Emprova p.pl. pli tard."
  },
  "unshootablePageErrorTitle": {
    "message": "Impussibel da far in maletg da visur da questa pagina."
  },
  "unshootablePageErrorDetails": {
    "message": "Quai n'è betg ina pagina web da standard, perquai n'èsi betg pussaivel da far in maletg da visur dad ella."
  },
  "selfScreenshotErrorTitle": {
    "message": "Impussibel da far in maletg da visur dad ina pagina da Firefox Screenshots."
  },
  "emptySelectionErrorTitle": {
    "message": "La zona selecziunada è memia pitschna"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots è deactivà en il modus privat"
  },
  "privateWindowErrorDetails": {
    "message": "Perstgisa las malempernaivladads. Nus furnin questa funcziun en ina da las proximas versiuns."
  },
  "genericErrorTitle": {
    "message": "Oh dieu! Firefox Screenshots ha il singlut."
  },
  "genericErrorDetails": {
    "message": "Nus na savain betg tge ch'è gist capità. Vuls empruvar anc ina giada, forsa cun in'autra pagina?"
  },
  "tourBodyIntro": {
    "message": "Far, memorisar e cundivider maletgs da visur senza bandunar Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ina nova pussaivladad da memorisar"
  },
  "tourBodyPageAction": {
    "message": "Vuls far in maletg dal visur? Avra il menu da las «Acziuns da pagina» en la trav d'adressas."
  },
  "tourHeaderClickAndDrag": {
    "message": "Far maletgs da visur da tut che vi vuls"
  },
  "tourBodyClickAndDrag": {
    "message": "Clicca e tira per far in maletg da be ina part da la pagina. Ti pos posiziunar la mieur sur la selecziun per la relevar."
  },
  "tourHeaderFullPage": {
    "message": "Far maletgs da fanestras u paginas cumplettas"
  },
  "tourBodyFullPage": {
    "message": "Tscherna il buttun sura dretg per far in maletg da la part visibla en la fanestra u per far in maletg da la pagina cumpletta."
  },
  "tourHeaderDownloadUpload": {
    "message": "Co che ti prefereschas"
  },
  "tourBodyDownloadUpload": {
    "message": "Memorisescha ils maletgs da visur en il web per als pudair cundivider u telechargiar sin tes computer. Ti pos era cliccar sin il buttun «Mes maletgs da visur» per vesair tut ils maletgs dal visur che ti has fatg."
  },
  "tourSkip": {
    "message": "Sursiglir"
  },
  "tourNext": {
    "message": "Proxim pass"
  },
  "tourPrevious": {
    "message": "Ultim pass"
  },
  "tourDone": {
    "message": "Finì"
  },
  "termsAndPrivacyNotice2": {
    "message": "Cun utilisar Firefox Screenshots acceptas ti $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "las cundiziuns d'utilisaziun"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "la decleraziun da protecziun da datas"
  },
  "libraryLabel": {
    "message": "Maletgs dal visur"
  }
}PK
!<���ww&webextension/_locales/ro/messages.json{
  "addonDescription": {
    "message": "Realizează decupaje și capturi de ecran de pe web și salvează-le temporar sau permanent."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Realizează o captură de ecran"
  },
  "myShotsLink": {
    "message": "Capturile mele"
  },
  "screenshotInstructions": {
    "message": "Trage sau dă clic pe pagină pentru a selecta o regiune. Apasă ESC pentru a renunța."
  },
  "saveScreenshotSelectedArea": {
    "message": "Salvează"
  },
  "saveScreenshotVisibleArea": {
    "message": "Salvează porțiunea vizibilă"
  },
  "saveScreenshotFullPage": {
    "message": "Salvează pagina completă"
  },
  "cancelScreenshot": {
    "message": "Renunță"
  },
  "downloadScreenshot": {
    "message": "Descarcă"
  },
  "downloadOnlyNotice": {
    "message": "Momentan sunteți în modul descărcare."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots se mută automat în modul descărcare în aceste situații:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "În fereastra de navigare privată."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Atunci când cookie-urile terțe sunt dezactivate."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Atunci când este activată opțiunea „Nu memora istoricul”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Acum folosești Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Încărcările au fost dezactivate."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link copiat"
  },
  "notificationLinkCopiedDetails": {
    "message": "Linkul către captura ta a fost copiat în clipboard. Apasă $META_KEY$-V pentru lipire.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiază"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiată"
  },
  "notificationImageCopiedDetails": {
    "message": "Captura a fost copiată în clipboard. Apasă $META_KEY$-V pentru a lipi.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Imaginea a fost decupată la $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Nefuncțional."
  },
  "requestErrorDetails": {
    "message": "Ne pare rău! Nu am putut salva captura. Încearcă din nou mai târziu."
  },
  "connectionErrorTitle": {
    "message": "Nu ne putem conecta la capturile tale."
  },
  "connectionErrorDetails": {
    "message": "Verifică conexiunea la internet. Dacă te poți conecta la internet ar putea fi o problemă temporară cu serviciul Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nu am putut să salvăm captura ta deoarece este o problemă cu serviciul Firefox Screenshots. Încearcă din nou mai târziu."
  },
  "unshootablePageErrorTitle": {
    "message": "Nu putem realiza o captură de ecran a acestei pagini."
  },
  "unshootablePageErrorDetails": {
    "message": "Aceasta este o pagină web standard așa că nu putem lua o captură a acesteia."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nu poți realiza o captură a paginii Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Selecția este prea mică"
  },
  "privateWindowErrorTitle": {
    "message": "Capturile de ecran sunt dezactivate în modul de navigare privată"
  },
  "privateWindowErrorDetails": {
    "message": "Ne pare rău pentru inconveniență. Lucrăm să introducem această funcție în versiunile viitoare."
  },
  "genericErrorTitle": {
    "message": "Ups! Firefox Screenshots a întâmpinat o eroare."
  },
  "genericErrorDetails": {
    "message": "Nu știm ce s-a întâmplat. Poți încerca să iei o nouă captură sau o captură de la o altă pagină?"
  },
  "tourBodyIntro": {
    "message": "Preia, salvează și împărtășește capturi de ecran fără a părăsi Firefox."
  },
  "tourHeaderPageAction": {
    "message": "O nouă modalitate de salvare"
  },
  "tourBodyPageAction": {
    "message": "Extinde meniul de acțiuni ale paginii în bara de adrese oricând vrei să faci o captură."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capturează întocmai ceea ce vrei"
  },
  "tourBodyClickAndDrag": {
    "message": "Clic și trage pentru a captura doar o porțiune a unei pagini. Poți și să poziționezi cursorul peste porțiune pentru a evidenția selecția."
  },
  "tourHeaderFullPage": {
    "message": "Capturează ferestre sau pagini întregi"
  },
  "tourBodyFullPage": {
    "message": "Selectează butoanele din partea dreaptă sus pentru a captura zona vizibilă din fereastră sau pentru a captura o pagină întreagă."
  },
  "tourHeaderDownloadUpload": {
    "message": "Pe placul tău"
  },
  "tourBodyDownloadUpload": {
    "message": "Salvează capturile decupate pe web pentru a le împărtăși mai ușor, sau descarcă-le pe calculator. Mai poți face clic pe butonul My Shots (capturile mele) pentru a găsi toate capturile luate."
  },
  "tourSkip": {
    "message": "OMITE"
  },
  "tourNext": {
    "message": "Diapozitivul următor"
  },
  "tourPrevious": {
    "message": "Diapozitivul anterior"
  },
  "tourDone": {
    "message": "Terminat"
  },
  "termsAndPrivacyNotice2": {
    "message": "Folosind Firefox Screenshots, ești de acord cu $TERMSANDPRIVACYNOTICETERMSLINK$ și $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Termenii"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Politica de confidenţialitate"
  },
  "libraryLabel": {
    "message": "Capturi de ecran"
  }
}PK
!<��@Jll&webextension/_locales/ru/messages.json{
  "addonDescription": {
    "message": "Делайте вырезки и скриншоты из Интернета и сохраняйте их временно или навсегда."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Сделать скриншот"
  },
  "myShotsLink": {
    "message": "Мои снимки"
  },
  "screenshotInstructions": {
    "message": "Потяните мышью или щёлкните по странице, чтобы выбрать область. Нажмите ESC для отмены."
  },
  "saveScreenshotSelectedArea": {
    "message": "Сохранить"
  },
  "saveScreenshotVisibleArea": {
    "message": "Сохранить видимую область"
  },
  "saveScreenshotFullPage": {
    "message": "Сохранить всю страницу"
  },
  "cancelScreenshot": {
    "message": "Отмена"
  },
  "downloadScreenshot": {
    "message": "Загрузить"
  },
  "downloadOnlyNotice": {
    "message": "Сейчас вы в режиме только загрузки."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots автоматически переходит в режим только загрузки в следующих ситуациях:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "В приватном окне."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Сторонние куки отключены."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Включено «не будет запоминать историю»."
  },
  "downloadOnlyDetailsESR": {
    "message": "Вы используете Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Загрузка была отключена."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ссылка скопирована"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ссылка на ваш снимок была скопирована в буфер обмена. Нажмите $META_KEY$-V для её вставки.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Копировать"
  },
  "notificationImageCopiedTitle": {
    "message": "Снимок скопирован"
  },
  "notificationImageCopiedDetails": {
    "message": "Ваш снимок был скопирован в буфер обмена. Нажмите $META_KEY$-V для его вставки.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Это изображение было обрезано до $PIXELS$ пикселей.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Произошла ошибка."
  },
  "requestErrorDetails": {
    "message": "Извините! Мы не смогли сохранить ваш снимок. Пожалуйста, попробуйте позже."
  },
  "connectionErrorTitle": {
    "message": "Мы не смогли получить доступ к вашим скриншотам."
  },
  "connectionErrorDetails": {
    "message": "Пожалуйста, проверьте соединение с Интернетом. Если у вам удаётся войти в Интернет, то возможно, возникла временная проблема со службой Скриншотов Firefox."
  },
  "loginErrorDetails": {
    "message": "Мы не можем сохранить ваш снимок, так как возникла проблема с сервисом Скриншотов Firefox. Пожалуйста, попробуйте позже."
  },
  "unshootablePageErrorTitle": {
    "message": "Мы не можем сделать скриншот этой страницы."
  },
  "unshootablePageErrorDetails": {
    "message": "Так как это не обычная веб-страница, мы не сможем сделать её скриншот."
  },
  "selfScreenshotErrorTitle": {
    "message": "Вы не можете сделать скриншот страницы Скриншотов Firefox."
  },
  "emptySelectionErrorTitle": {
    "message": "Выбрана слишком небольшая область"
  },
  "privateWindowErrorTitle": {
    "message": "Скриншоты отключены в режиме Приватного просмотра"
  },
  "privateWindowErrorDetails": {
    "message": "Приносим извинения за неудобства. Мы работаем над включением этой функции в будущие релизы."
  },
  "genericErrorTitle": {
    "message": "Ого! Скриншоты Firefox вышли из строя."
  },
  "genericErrorDetails": {
    "message": "Мы не уверены, в чём проблема. Попробуете ещё раз или сделаете снимок другой страницы?"
  },
  "tourBodyIntro": {
    "message": "Делайте, сохраняйте и делитесь скриншотами прямо в Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Новый способ сохранения"
  },
  "tourBodyPageAction": {
    "message": "Раскройте меню действий на странице в адресной строке в любой момент, когда вы захотите сделать снимок экрана."
  },
  "tourHeaderClickAndDrag": {
    "message": "Делайте снимки чего угодно"
  },
  "tourBodyClickAndDrag": {
    "message": "Щелкните и потяните мышью для захвата части страницы. Вы также можете навести курсор мыши для подсветки выбранной области."
  },
  "tourHeaderFullPage": {
    "message": "Захватывайте окна или целые страницы"
  },
  "tourBodyFullPage": {
    "message": "С помощью кнопок в верхнем правом углу выбирайте захват видимой области окна или страницы целиком."
  },
  "tourHeaderDownloadUpload": {
    "message": "Как вам нравится"
  },
  "tourBodyDownloadUpload": {
    "message": "Сохраняйте свои снимки в Интернете, чтобы легко ими делиться, или загружайте их на свой компьютер. Вы также можете просмотреть все сохранённые снимки, нажав на кнопку Мои снимки."
  },
  "tourSkip": {
    "message": "Пропустить"
  },
  "tourNext": {
    "message": "Следующий слайд"
  },
  "tourPrevious": {
    "message": "Предыдущий слайд"
  },
  "tourDone": {
    "message": "Готово"
  },
  "termsAndPrivacyNotice2": {
    "message": "Используя Firefox Screenshots, вы соглашаетесь с нашими $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Условиями использования"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Уведомлением о приватности"
  },
  "libraryLabel": {
    "message": "Скриншоты"
  }
}PK
!<�����&webextension/_locales/sk/messages.json{
  "addonDescription": {
    "message": "Vytvorte si snímky obrazovky na webe a uložte si ich dočasne či navždy."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Urobiť snímku obrazovky"
  },
  "myShotsLink": {
    "message": "Moje snímky"
  },
  "screenshotInstructions": {
    "message": "Potiahnutím alebo kliknutím si vyberte oblasť, ktorú chcete zachytiť. Výber zrušíte stlačením klávesa ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Uložiť"
  },
  "saveScreenshotVisibleArea": {
    "message": "Uložiť viditeľnú časť"
  },
  "saveScreenshotFullPage": {
    "message": "Uložiť celú stránku"
  },
  "cancelScreenshot": {
    "message": "Zrušiť"
  },
  "downloadScreenshot": {
    "message": "Prevziať"
  },
  "downloadOnlyNotice": {
    "message": "Ste v režime len na prevzatie."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automaticky prejde do režimu len na prevzatie v nasledujúcich situáciách:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Ste v režime Súkromné prehliadanie."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Máte zakázané cookies tretích strán."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Máte úplne zakázané ukladanie histórie prehliadania."
  },
  "downloadOnlyDetailsESR": {
    "message": "Používate Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Nahrávanie bolo zakázané."
  },
  "notificationLinkCopiedTitle": {
    "message": "Odkaz bol skopírovaný"
  },
  "notificationLinkCopiedDetails": {
    "message": "Odkaz na vašu snímku bol skopírovaný do schránky. Stlačením $META_KEY$-V ho prilepíte.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopírovať"
  },
  "notificationImageCopiedTitle": {
    "message": "Snímka bola skopírovaná"
  },
  "notificationImageCopiedDetails": {
    "message": "Vaša snímka bola skopírovaná do schránky. Stlačením $META_KEY$-V ju prilepíte.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tento obrázok bol orezaný na $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Mimo prevádzky."
  },
  "requestErrorDetails": {
    "message": "Mrzí nás to, no nemôžeme uložiť vašu snímku. Skúste to, prosím, neskôr."
  },
  "connectionErrorTitle": {
    "message": "Nemôžeme sa spojiť s vašimi snímkami."
  },
  "connectionErrorDetails": {
    "message": "Prosím, skontrolujte svoje internetové pripojenie. Ak ste pripojení na internet, môže ísť o dočasný problém na strane služby Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nemohli sme uložiť vašu snímku, pretože nastal problém so službou Firefox Screenshots. Skúste to, prosím, neskôr."
  },
  "unshootablePageErrorTitle": {
    "message": "Túto stránku nemôžeme zachytiť."
  },
  "unshootablePageErrorDetails": {
    "message": "Toto nie je štandardná webová stránka, takže z nej nemôžeme vytvoriť snímku obrazovky."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nemôžete vytvoriť snímku obrazovky stránky Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Váš výber je príliš malý"
  },
  "privateWindowErrorTitle": {
    "message": "Služba Firefox Screenshots je v režime Súkromné prehliadanie zakázaná"
  },
  "privateWindowErrorDetails": {
    "message": "Ospravedlňujeme sa za spôsobené nepríjemnosti. Pracujeme na vylepšení tejto funkcie v budúcich verziách."
  },
  "genericErrorTitle": {
    "message": "Ups! Služba Firefox Screenshots prestala pracovať."
  },
  "genericErrorDetails": {
    "message": "Nie sme si istí, čo sa práve stalo. Chcete tú skúsiť znova alebo chcete vytvoriť snímku inej stránky?"
  },
  "tourBodyIntro": {
    "message": "Tvorte, ukladajte a zdieľajte snímky obrazovky bez toho, aby ste museli opustiť Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Nový spôsob ukladania"
  },
  "tourBodyPageAction": {
    "message": "Kedykoľvek chcete urobiť snímku, otvorte ponuku akcii stránky v paneli s adresou."
  },
  "tourHeaderClickAndDrag": {
    "message": "Zachyťte to, čo chcete"
  },
  "tourBodyClickAndDrag": {
    "message": "Ak chcete zachytiť časť stránky, urobíte to kliknutím a potiahnutím. Váš výber zvýrazníte tak, že sa naň presuniete myšou."
  },
  "tourHeaderFullPage": {
    "message": "Zachyťte okná alebo celé webové stránky"
  },
  "tourBodyFullPage": {
    "message": "Kliknutím na tlačidlo v pravom hornom rohu môžete zachytiť viditeľnú časť stránky. Pomocou ďalšieho tlačidla zachytíte celú stránku."
  },
  "tourHeaderDownloadUpload": {
    "message": "Urobte to, čo chcete"
  },
  "tourBodyDownloadUpload": {
    "message": "Uložte si orezanú snímku na web, aby ste ju mohli ľahšie zdieľať alebo si ju prevziať do počítača. Môžete si taktiež pozrieť všetky vaše snímky - stačí, ak kliknete na tlačidlo Moje snímky."
  },
  "tourSkip": {
    "message": "Preskočiť"
  },
  "tourNext": {
    "message": "Ďalšia snímka"
  },
  "tourPrevious": {
    "message": "Predchádzajúca snímka"
  },
  "tourDone": {
    "message": "Hotovo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Používaním služby Firefox Screenshots súhlasíte s našimi $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "podmienkami"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "zásadami ochrany súkromia"
  },
  "libraryLabel": {
    "message": "Snímky obrazovky"
  }
}PK
!<XO�P��&webextension/_locales/sl/messages.json{
  "addonDescription": {
    "message": "Zajemajte posnetke zaslona s spleta ter jih shranite začasno ali trajno."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Zajemi posnetek zaslona"
  },
  "myShotsLink": {
    "message": "Moji posnetki"
  },
  "screenshotInstructions": {
    "message": "Povlecite ali kliknite na strani za izbiro območja. Pritisnite ESC za preklic."
  },
  "saveScreenshotSelectedArea": {
    "message": "Shrani"
  },
  "saveScreenshotVisibleArea": {
    "message": "Shrani vidno"
  },
  "saveScreenshotFullPage": {
    "message": "Shrani celotno stran"
  },
  "cancelScreenshot": {
    "message": "Prekliči"
  },
  "downloadScreenshot": {
    "message": "Prenesi"
  },
  "downloadOnlyNotice": {
    "message": "Trenutno ste v načinu samo za prenos."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots se samodejno preklopi v način samo za prenos v naslednjih primerih:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "V oknu zasebnega brskanja."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Ko so piškotki tretjih strani onemogočeni."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Ko je Firefox nastavljen, naj ne shranjuje zgodovine."
  },
  "downloadOnlyDetailsESR": {
    "message": "Uporabljate Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Nalaganje je onemogočeno."
  },
  "notificationLinkCopiedTitle": {
    "message": "Povezava kopirana"
  },
  "notificationLinkCopiedDetails": {
    "message": "Povezava do vašega posnetka zaslona je bila kopirana v odložišče. Pritisnite $META_KEY$-V, da jo prilepite.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiraj"
  },
  "notificationImageCopiedTitle": {
    "message": "Posnetek kopiran"
  },
  "notificationImageCopiedDetails": {
    "message": "Posnetek zaslona je bil kopiran na odložišče. Pritisnite $META_KEY$-V, da ga prilepite.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Ta slika je bila obrezana na $PIXELS$ pikslov.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ne dela."
  },
  "requestErrorDetails": {
    "message": "Vašega posnetka nismo uspeli shraniti. Poskusite znova kasneje."
  },
  "connectionErrorTitle": {
    "message": "Ne moremo vzpostaviti povezave do vaših posnetkov."
  },
  "connectionErrorDetails": {
    "message": "Preverite svojo internetno povezavo. V kolikor povezava deluje, gre morda za začasno težavo s storitvijo Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Ne moremo shraniti vašega posnetka, ker je prišlo do težave s storitvijo Firefox Screenshots. Poskusite znova kasneje."
  },
  "unshootablePageErrorTitle": {
    "message": "Ne moremo zajeti posnetka te strani."
  },
  "unshootablePageErrorDetails": {
    "message": "To ni običajna spletna stran, zato ne morete zajeti njenega zaslonskega posnetka."
  },
  "selfScreenshotErrorTitle": {
    "message": "Posnetka strani Firefox Screenshots ni mogoče zajeti!"
  },
  "emptySelectionErrorTitle": {
    "message": "Vaš izbor je premajhen"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots je onemogočen v zasebnem načinu brskanja"
  },
  "privateWindowErrorDetails": {
    "message": "Oprostite za nevšečnost. To možnost izboljšujemo za prihodnje izdaje."
  },
  "genericErrorTitle": {
    "message": "Uf! Firefox Screenshots se je pokvaril."
  },
  "genericErrorDetails": {
    "message": "Ne vemo točno, kaj se je pravkar zgodilo. Bi radi poskusili znova ali pa zajeli posnetek kakšne druge strani?"
  },
  "tourBodyIntro": {
    "message": "Zajemite, shranite in delite zaslonske posnetke, ne da bi zapustili Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Nov način shranjevanja"
  },
  "tourBodyPageAction": {
    "message": "Kadarkoli želite zajeti posnetek zaslona, v naslovni vrstici razširite meni dejanj strani."
  },
  "tourHeaderClickAndDrag": {
    "message": "Zajemite to, kar hočete"
  },
  "tourBodyClickAndDrag": {
    "message": "Kliknite in povlecite, če želite zajeti samo del strani. Svojo izbiro lahko tudi poudarite, tako da preko nje povlečete miškin kazalec."
  },
  "tourHeaderFullPage": {
    "message": "Zajemite okna ali celotne strani"
  },
  "tourBodyFullPage": {
    "message": "V zgornjem desnem kotu izberite gumb za zajem vidnega območja v oknu ali celotne strani."
  },
  "tourHeaderDownloadUpload": {
    "message": "Kot vi želite"
  },
  "tourBodyDownloadUpload": {
    "message": "Shranite obrezane posnetke na splet za lažje deljenje ali jih prenesite na svoj računalnik. Vse zajete posnetke lahko najdete s klikom na gumb Moji posnetki."
  },
  "tourSkip": {
    "message": "Preskoči"
  },
  "tourNext": {
    "message": "Naslednji diapozitiv"
  },
  "tourPrevious": {
    "message": "Prejšnji diapozitiv"
  },
  "tourDone": {
    "message": "Končano"
  },
  "termsAndPrivacyNotice2": {
    "message": "Z uporabo razširitve Firefox Screenshots se strinjate z našimi $TERMSANDPRIVACYNOTICETERMSLINK$ in $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "pogoji"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "obvestilom o zasebnosti"
  },
  "libraryLabel": {
    "message": "Posnetki zaslona"
  }
}PK
!<���Zvv&webextension/_locales/sq/messages.json{
  "addonDescription": {
    "message": "Përftoni copëza dhe bëni foto në Web dhe ruajini ato përkohësisht ose përfundimisht."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Bëni një Foto"
  },
  "myShotsLink": {
    "message": "Shkrepjet e Mia"
  },
  "screenshotInstructions": {
    "message": "Tërhiqni kursorin ose klikoni te faqja që të përzgjidhni një zonë. Shtypni ESC që të anulohet."
  },
  "saveScreenshotSelectedArea": {
    "message": "Ruaje"
  },
  "saveScreenshotVisibleArea": {
    "message": "Ruaj pjesën e dukshme"
  },
  "saveScreenshotFullPage": {
    "message": "Ruaj krejt faqen"
  },
  "cancelScreenshot": {
    "message": "Anuloje"
  },
  "downloadScreenshot": {
    "message": "Shkarkoje"
  },
  "downloadOnlyNotice": {
    "message": "Gjendeni nën mënyrën Vetëm Shkarkim."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots kalon vetvetiu nën mënyrën Vetëm Shkarkim në këto situata:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Në një dritare Shfletimi Privat."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookie-t e palëve të treta janë të çaktivizuara."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Mos mbaj kurrë mend historikun” është e aktivizuar."
  },
  "downloadOnlyDetailsESR": {
    "message": "Po përdorni Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Ngarkimet janë çaktivizuar."
  },
  "notificationLinkCopiedTitle": {
    "message": "Lidhja u Kopjua"
  },
  "notificationLinkCopiedDetails": {
    "message": "Lidhja për te fotoja juaj u kopjua në të papastër. Shtypni $META_KEY$-V për ta ngjitur diku.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopjoje"
  },
  "notificationImageCopiedTitle": {
    "message": "Fotoja u Kopjua"
  },
  "notificationImageCopiedDetails": {
    "message": "Fotoja juaj u kopjua në të papastër. Për ta ngjitur diku, shtypni $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Kjo figurë është qethur në $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "S’ka gjendje."
  },
  "requestErrorDetails": {
    "message": "Na ndjeni! S’e ruajtëm dot foton tuaj. Ju lutemi, riprovoni më vonë."
  },
  "connectionErrorTitle": {
    "message": "S’lidhemi dot te fotot tuaja."
  },
  "connectionErrorDetails": {
    "message": "Ju lutemi, kontrolloni lidhjen tuaj Internet. Nëse jeni në gjendje të lidheni në Internet, mund të bëhet fjalë për një problem të përkohshëm me shërbimin Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "S’e ruajtëm dot foton tuaj, ngaqë pati një problem me shërbimin Firefox Screenshots. Ju lutemi, riprovoni më vonë."
  },
  "unshootablePageErrorTitle": {
    "message": "S’bëjmë dot foto të kësaj faqeje."
  },
  "unshootablePageErrorDetails": {
    "message": "Kjo s’është një faqe Web standarde, ndaj s’mund të bëni një foto ekrani të saj."
  },
  "selfScreenshotErrorTitle": {
    "message": "S’mund të bëni foto të një faqeje të Firefox Screenshots-it!"
  },
  "emptySelectionErrorTitle": {
    "message": "Përzgjedhja juaj është shumë e vogël"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots çaktivizohet nën Mënyrën Shfletim Privat"
  },
  "privateWindowErrorDetails": {
    "message": "Na ndjeni për mungesën. Po punojmë mbi këtë veçori për hedhjet e ardhshme në qarkullim."
  },
  "genericErrorTitle": {
    "message": "Yhaaa! Firefox Screenshots shkalloi."
  },
  "genericErrorDetails": {
    "message": "S’jemi të sigurt se ç’ndodhi. Ju prish punë të bëni një foto të një faqeje tjetër?"
  },
  "tourBodyIntro": {
    "message": "Bëni, ruani dhe ndani foto ekrani me të tjerët pa dalë nga Firefox-i."
  },
  "tourHeaderPageAction": {
    "message": "Një mënyrë e re për të ruajtur"
  },
  "tourBodyPageAction": {
    "message": "Kurdo që doni të bëni një foto ekrani, zgjeroni menunë e veprimeve mbi faqen, te shtylla e adresave."
  },
  "tourHeaderClickAndDrag": {
    "message": "Fiksoni Në Foto Aq Sa Doni"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikoni dhe tërhiqeni që të fotografoni thjesht një copë të faqes. Mund edhe të kaloni kursorin përsipër që të theksoni përzgjedhjen tuaj."
  },
  "tourHeaderFullPage": {
    "message": "Fiksoni Dritare ose Krejt Faqet"
  },
  "tourBodyFullPage": {
    "message": "Përzgjidhni butonat në cepin e sipërm djathtas që të fotografoni zonën e dukshme te dritarja ose një faqe të tërë."
  },
  "tourHeaderDownloadUpload": {
    "message": "Si T’ju Pëlqejë"
  },
  "tourBodyDownloadUpload": {
    "message": "Ruajini fotot tuaja në web, për ndarje më të lehtë me të tjerët, ose shkarkojini në kompjuterin tuaj. Mund edhe të klikoni te butoni Shkrepjet e Mia që të gjeni krejt shkrepjet që keni bërë."
  },
  "tourSkip": {
    "message": "ANASHKALOJE"
  },
  "tourNext": {
    "message": "Diapozitivi Pasues"
  },
  "tourPrevious": {
    "message": "Diapozitivi i Mëparshëm"
  },
  "tourDone": {
    "message": "U bë"
  },
  "termsAndPrivacyNotice2": {
    "message": "Duke përdorur Firefox Screenshots, pajtoheni me $TERMSANDPRIVACYNOTICETERMSLINK$ dhe $TERMSANDPRIVACYNOTICEPRIVACYLINK$ tonat.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Kushte"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Shënim Privatësie"
  },
  "libraryLabel": {
    "message": "Foto ekrani"
  }
}PK
!<���ç�&webextension/_locales/sr/messages.json{
  "addonDescription": {
    "message": "Бележите снимке екрана са веба и сачувајте их привремено или трајно."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Усликај екран"
  },
  "myShotsLink": {
    "message": "Моји снимци"
  },
  "screenshotInstructions": {
    "message": "Превуците или кликните на страницу да изаберете област. Притисните ESC да прекинете."
  },
  "saveScreenshotSelectedArea": {
    "message": "Сачувај"
  },
  "saveScreenshotVisibleArea": {
    "message": "Сачувај видљиво"
  },
  "saveScreenshotFullPage": {
    "message": "Сачувај целу страницу"
  },
  "cancelScreenshot": {
    "message": "Откажи"
  },
  "downloadScreenshot": {
    "message": "Преузми"
  },
  "downloadOnlyNotice": {
    "message": "Тренутно сте у режиму где можете само преузимати."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots се пребацује у режим где се само преузима у следећим ситуацијама:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "У прозору приватног прегледања."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Колачићи трећих страна су онемогућени."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Опција „Никада не памти историјат“ је омогућена."
  },
  "downloadOnlyDetailsESR": {
    "message": "Користите Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Отпремања су онемогућена."
  },
  "notificationLinkCopiedTitle": {
    "message": "Веза копирана"
  },
  "notificationLinkCopiedDetails": {
    "message": "Веза коју сте забележили је копирана у бележницу. Притисните $META_KEY$-V да налепите.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Копирај"
  },
  "notificationImageCopiedTitle": {
    "message": "Снимак је копиран"
  },
  "notificationImageCopiedDetails": {
    "message": "Ваш снимак је копиран. Притисните $META_KEY$-V да налепите.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Слика је исечена на $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Не ради."
  },
  "requestErrorDetails": {
    "message": "Жао нам је! Нисмо могли сачувати ваш снимак. Покушајте поново касније."
  },
  "connectionErrorTitle": {
    "message": "Не можемо се повезати на ваше снимке."
  },
  "connectionErrorDetails": {
    "message": "Проверите вашу интернет конекцију. Ако можете да се конектујете, онда можда постоји привремени проблем са Firefox Screenshots-ом."
  },
  "loginErrorDetails": {
    "message": "Нисмо могли сачувати ваш снимак јер постоји проблем са Firefox Screenshots-ом. Покушајте поново касније."
  },
  "unshootablePageErrorTitle": {
    "message": "Не можемо забележити снимак ове странице."
  },
  "unshootablePageErrorDetails": {
    "message": "Ово није стандардна веб страница, тако да не можете забележити њен снимак."
  },
  "selfScreenshotErrorTitle": {
    "message": "Не можете усликати Firefox Screenshots страницу!"
  },
  "emptySelectionErrorTitle": {
    "message": "Ваша селекција је премала"
  },
  "privateWindowErrorTitle": {
    "message": "Снимци екрана су онемогућени у приватном режиму"
  },
  "privateWindowErrorDetails": {
    "message": "Жао нам је због овог неспоразума. Радимо на овој могућности за следећа издања."
  },
  "genericErrorTitle": {
    "message": "Ајој! Firefox Screenshots је пошашавио."
  },
  "genericErrorDetails": {
    "message": "Нисмо сигурни шта се управо догодило. Желите ли покушати поново или да усликате другачију страницу?"
  },
  "tourBodyIntro": {
    "message": "Забележите, сачувајте и поделите снимке екрана без напуштања Firefox-а."
  },
  "tourHeaderPageAction": {
    "message": "Нови начин да сачувате"
  },
  "tourBodyPageAction": {
    "message": "Проширите страницу из менија у адресној траци кад год желите да усликате екран."
  },
  "tourHeaderClickAndDrag": {
    "message": "Усликајте баш оно што желите"
  },
  "tourBodyClickAndDrag": {
    "message": "Кликните и превуците да усликате само део странице. Такође можете означити вашу селекцију."
  },
  "tourHeaderFullPage": {
    "message": "Усликајте прозоре или целе странице"
  },
  "tourBodyFullPage": {
    "message": "Изаберите дугмад у горњем десном углу да усликате видљиве делове прозора или да усликате целу страницу."
  },
  "tourHeaderDownloadUpload": {
    "message": "Као што волите"
  },
  "tourBodyDownloadUpload": {
    "message": "Сачувајте ваш исечени снимак на веб ради лакшег дељења или преузимања на ваш рачунар. Такође можете кликнути на дугме \"Моји снимци\" да пронађете све ваше снимке."
  },
  "tourSkip": {
    "message": "Прескочи"
  },
  "tourNext": {
    "message": "Следећи слајд"
  },
  "tourPrevious": {
    "message": "Претходни слајд"
  },
  "tourDone": {
    "message": "Готово"
  },
  "termsAndPrivacyNotice2": {
    "message": "Коришћењем Firefox Screenshots прихватате наше $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "услове"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "обавештење о приватности"
  },
  "libraryLabel": {
    "message": "Снимци екрана"
  }
}PK
!<�8��cc)webextension/_locales/sv_SE/messages.json{
  "addonDescription": {
    "message": "Ta klipp och skärmbilder från webben och spara dem tillfälligt eller permanent."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Ta en skärmbild"
  },
  "myShotsLink": {
    "message": "Mina skärmbilder"
  },
  "screenshotInstructions": {
    "message": "Dra eller klicka på sidan för att välja en region. Tryck på ESC för att avbryta."
  },
  "saveScreenshotSelectedArea": {
    "message": "Spara"
  },
  "saveScreenshotVisibleArea": {
    "message": "Spara synligt område"
  },
  "saveScreenshotFullPage": {
    "message": "Spara hela sidan"
  },
  "cancelScreenshot": {
    "message": "Avbryt"
  },
  "downloadScreenshot": {
    "message": "Ladda ner"
  },
  "downloadOnlyNotice": {
    "message": "Du är för närvarande i nedladdningsbart läge."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots ändrar automatiskt till nedladdningsbart läge i följande situationer:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "I ett privat surffönster."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Kakor från tredje part är inaktiverade."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "\"Inte spara någon historik\" är aktiverad."
  },
  "downloadOnlyDetailsESR": {
    "message": "Du använder Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Uppladdningar har inaktiverats."
  },
  "notificationLinkCopiedTitle": {
    "message": "Länk kopierad"
  },
  "notificationLinkCopiedDetails": {
    "message": "Länken till din skärmbild har kopierats till urklipp. Tryck på $META_KEY$-V för att klistra in.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiera"
  },
  "notificationImageCopiedTitle": {
    "message": "Bild kopierad"
  },
  "notificationImageCopiedDetails": {
    "message": "Din bild har kopierats till urklipp. Tryck på $META_KEY$-V för att klistra in.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Den här bilden har beskurits till $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ur funktion."
  },
  "requestErrorDetails": {
    "message": "Förlåt! Vi kunde inte spara din skärmbild. Försök igen senare."
  },
  "connectionErrorTitle": {
    "message": "Vi kan inte ansluta till dina skärmbilder."
  },
  "connectionErrorDetails": {
    "message": "Kontrollera din internetanslutning. Om du kan ansluta till internet, kan det vara ett tillfälligt problem med tjänsten Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Vi kunde inte spara din skärmbild eftersom det finns ett problem med tjänsten Firefox Screenshots. Försök igen senare."
  },
  "unshootablePageErrorTitle": {
    "message": "Vi kan inte ta en skärmbild av sidan."
  },
  "unshootablePageErrorDetails": {
    "message": "Detta är inte en vanlig webbsida, så du kan inte ta en skärmbild av den."
  },
  "selfScreenshotErrorTitle": {
    "message": "Du kan inte ta en skärmbild av sidan Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Ditt val är för litet"
  },
  "privateWindowErrorTitle": {
    "message": "Skärmbilder är inaktiverad i privat surfläge"
  },
  "privateWindowErrorDetails": {
    "message": "Ledsen för besväret. Vi arbetar med den här funktionen för framtida versioner."
  },
  "genericErrorTitle": {
    "message": "Oj! Firefox Screenshots verkar inte fungera korrekt."
  },
  "genericErrorDetails": {
    "message": "Vi är inte säkra på vad som just hände. Kan du försöka igen eller ta en bild på en annan sida?"
  },
  "tourBodyIntro": {
    "message": "Ta, spara, och dela skärmbilder utan att lämna Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ett nytt sätt att spara"
  },
  "tourBodyPageAction": {
    "message": "Expandera sidåtgärdsmenyn i adressfältet när du vill ta en skärmbild."
  },
  "tourHeaderClickAndDrag": {
    "message": "Fånga precis vad du vill"
  },
  "tourBodyClickAndDrag": {
    "message": "Klicka och dra för att fånga bara en del av en sida. Du kan också hovra för att markera ditt val."
  },
  "tourHeaderFullPage": {
    "message": "Fånga fönster eller hela sidor"
  },
  "tourBodyFullPage": {
    "message": "Välj knapparna i det övre högra hörnet för att fånga det synliga området i fönstret eller för att fånga en hel sida."
  },
  "tourHeaderDownloadUpload": {
    "message": "Som du vill ha det"
  },
  "tourBodyDownloadUpload": {
    "message": "Spara dina beskurna bilder till webben för enklare delning, eller hämta dem till datorn. Du kan också klicka på knappen Mina skärmbilder för att hitta alla bilder du tagit."
  },
  "tourSkip": {
    "message": "Hoppa över"
  },
  "tourNext": {
    "message": "Nästa sida"
  },
  "tourPrevious": {
    "message": "Föregående sida"
  },
  "tourDone": {
    "message": "Färdig"
  },
  "termsAndPrivacyNotice2": {
    "message": "Genom att använda Firefox Screenshots, godkänner du $TERMSANDPRIVACYNOTICETERMSLINK$ och $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Villkor"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Sekretesspolicy"
  },
  "libraryLabel": {
    "message": "Skärmbilder"
  }
}PK
!<QW��!�!&webextension/_locales/ta/messages.json{
  "addonDescription": {
    "message": "வலைபக்கங்களை நிரந்தரமாக (அ) தற்காலிகமாக துணுக்குகளாக (அ) திரைப்பிடிப்புகளாக சேமியுங்கள்."
  },
  "addonAuthorsList": {
    "message": "மொசில்லா <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "ஒரு திரைப்பிடிப்பு செய்"
  },
  "myShotsLink": {
    "message": "எனது திரைகள்"
  },
  "screenshotInstructions": {
    "message": "பக்கத்தில் இழுத்தோ (அ) சொடுக்கியோ ஒரு பகுதியைத் தேர்வுச்செய்க. இரத்து செய்ய ESC விசையை அழுத்தவும்."
  },
  "saveScreenshotSelectedArea": {
    "message": "சேமி"
  },
  "saveScreenshotVisibleArea": {
    "message": "பார்ப்பதைச் சேமி"
  },
  "saveScreenshotFullPage": {
    "message": "முழு பக்கத்தைச் சேமி"
  },
  "cancelScreenshot": {
    "message": "இரத்து"
  },
  "downloadScreenshot": {
    "message": "பதிவிறக்கு"
  },
  "notificationLinkCopiedTitle": {
    "message": "தொடுப்பு நகலெடுக்கப்பட்டது"
  },
  "notificationLinkCopiedDetails": {
    "message": "நீங்கள் எடுத்த திரைப்பிடிப்பிற்கான தொடுப்பு ஒட்டுபலகைக்கு நகலெடுக்கப்பட்டது. ஒட்ட $META_KEY$ விசையை அழுத்தவும்.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "சேவை இணைப்பில் இல்லை."
  },
  "requestErrorDetails": {
    "message": "மன்னிக்க! உங்களின் திரைப்பிடிப்பைச் சேமிக்க முடியவில்லை. மீண்டும் முயற்சிக்கவும்."
  },
  "connectionErrorTitle": {
    "message": "உங்களின் திரைப்பிடிப்பு சேவையகத்தை அணுக முடியவில்லை."
  },
  "connectionErrorDetails": {
    "message": "தயவுச்செய்து உங்கள் இணைய இணைப்பைச் சரிபாருங்கள். உங்களால் இணையத்தை அணுக முடிந்தால் இது பயர்பாஃசு திரைப்பிடிப்பிற்கான இடைப்பட்ட சேவை துண்டிப்பாகும்."
  },
  "loginErrorDetails": {
    "message": "பயர்பாஃசின் திரைப்பிடிப்பு சேவை தடைப்பட்டதால் உங்களின் திரைப்பிடிப்பைச் சேமிக்க முடியவில்லை. மீண்டும் முயற்சிக்கவும்."
  },
  "unshootablePageErrorTitle": {
    "message": "இப்பக்கத்தை திரைப்பிடிப்பு செய்ய முடியாது."
  },
  "unshootablePageErrorDetails": {
    "message": "இது ஒரு இணையத்தளம் போன்று தெரிவில்லை, எனவே உங்களால் திரைப்பிடிப்பு எடுக்க முடியாது."
  },
  "selfScreenshotErrorTitle": {
    "message": "பயர்பாஃசு திரைப்பிடிப்பு பக்கத்தை உங்களால் திரைப்பிடிப்பு செய்ய முடியாது!"
  },
  "emptySelectionErrorTitle": {
    "message": "உங்களின் தேர்வு மிகச் சிறியது"
  },
  "privateWindowErrorTitle": {
    "message": "அந்தரங்க உலாவல் முறையில் திரைபிடிப்பு முடக்கப்பட்டுள்ளது"
  },
  "privateWindowErrorDetails": {
    "message": "சிரமத்திற்கு வருந்துகிறோம். எதிர்கால வெளியீடுகளில் நாங்கள் இந்த வசதியைச் செய்து தருகிறோம்."
  },
  "genericErrorTitle": {
    "message": "அய் அய்யோ! பயர்பாஃசு திரைப்பிடிப்பு வீணாய் போனது. "
  },
  "genericErrorDetails": {
    "message": "என்ன நடந்தது என எங்களுக்குத் தெரியவில்லை. முடிந்தால் மீண்டும் முயற்சியுங்கள் (அ) வேறொரு பக்கத்தில் முயற்சியுங்கள்?"
  },
  "tourBodyIntro": {
    "message": "பயர்பாஃசை விட்டு வெளியேறாமல் திரைப்பிடிப்புகளை எடுக்கலாம், சேமித்து மற்றவருடன் பகிர்ந்துக்கொள்ளலாம்."
  },
  "tourHeaderPageAction": {
    "message": "சேமிப்பதற்கானபுதியவழி"
  },
  "tourHeaderClickAndDrag": {
    "message": "உங்களுக்கு என்ன வேண்டுமோ அதைக் கைப்பற்றுங்கள்"
  },
  "tourBodyClickAndDrag": {
    "message": "சொடுக்கி இழுத்து சும்மா ஒரு பகுதியைத் தேர்வுச்செய்க. நீங்கள் இங்கும் அங்குமாக நகர்த்திக் கூட நீங்கள் தேர்வுச்செய்த பக்கத்தை மிளிர்க்கச் செய்யலாம்."
  },
  "tourHeaderFullPage": {
    "message": "சாளரங்களை (அ) முழுப் பக்கங்களை கைப்பற்றவும்"
  },
  "tourBodyFullPage": {
    "message": "வலது மேல்முனையில் உள்ள கத்திரிகோல் போன்ற பயன்படுத்தி பார்வையில் இருக்கும் வலைப்பக்கத்தையோ (அ) முழு பக்கத்தையோ திரைப்பிடிப்புச் செய்யுங்கள்."
  },
  "tourHeaderDownloadUpload": {
    "message": "நீங்கள் விரும்பியவாறே"
  },
  "tourBodyDownloadUpload": {
    "message": "நீங்கள் எடுத்த வெட்டிய திரைப்பிடிப்புகளை இணையத்தில் எளிதில் சேமித்து பகிரவோ (அ) கணினியில் பதிவிறக்கவோ முடியும். 'எனது பிடிப்புகள்' மீது சொடுக்கி உங்களின் திரைப்பிடிப்புகளைக் காணலாம்."
  },
  "tourSkip": {
    "message": "தாவு"
  },
  "tourNext": {
    "message": "அடுத்த வில்லை"
  },
  "tourPrevious": {
    "message": "முந்தைய வில்லை"
  },
  "tourDone": {
    "message": "முடிந்தது"
  },
  "termsAndPrivacyNotice2": {
    "message": "பயர்பாஃசு திரைப்பிடிப்புகளைப் பயன்படுத்துவதன் மூலம் $TERMSANDPRIVACYNOTICETERMSLINK$ மற்றும் $TERMSANDPRIVACYNOTICEPRIVACYLINK$ சேவை நிபற்தனைகளை ஏற்கிறீர்கள்.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "நிபந்தனைகள்"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "தனியுரிம கொள்கை"
  },
  "libraryLabel": {
    "message": "திரைபிடிப்புகள்"
  }
}PK
!<��o__&webextension/_locales/te/messages.json{
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "ఒక తెరపట్టు తీసుకోండి"
  },
  "myShotsLink": {
    "message": "నా తెరపట్లు"
  },
  "saveScreenshotSelectedArea": {
    "message": "భద్రపరచు"
  },
  "saveScreenshotVisibleArea": {
    "message": "కనిపించే దానిని బద్రపరచండి"
  },
  "saveScreenshotFullPage": {
    "message": "పూర్తి పేజీని భద్రపరచు"
  },
  "cancelScreenshot": {
    "message": "రద్దుచేయి"
  },
  "downloadScreenshot": {
    "message": "దింపుకోండి"
  },
  "downloadOnlyNotice": {
    "message": "మీరు ప్రస్తుతం దింపుకోలు-మాత్రమే రీతిలో ఉన్నారు."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "ఎక్కింపులు అచేతమై ఉన్నాయి."
  },
  "notificationLinkCopiedTitle": {
    "message": "లంకె కాపీ అయింది"
  },
  "copyScreenshot": {
    "message": "కాపీచెయ్యి"
  },
  "requestErrorTitle": {
    "message": "పని చెయుట లేదు."
  },
  "requestErrorDetails": {
    "message": "క్షమిచండి! మీ తెరను భద్రపరచలేకపోయాం. దయచేసి కాసేపాగి మళ్ళీ ప్రయత్నించండి."
  },
  "connectionErrorTitle": {
    "message": "మేము మీ స్క్రీన్షాట్లకు కనెక్ట్ చేయలేము."
  },
  "unshootablePageErrorTitle": {
    "message": "మేము ఈ పేజీని స్క్రీన్షాట్ చేయలేము."
  },
  "unshootablePageErrorDetails": {
    "message": "ఇది ప్రామాణిక వెబ్ పేజీ కాదు, కాబట్టి దాని యొక్క స్క్రీన్షాట్ని మీరు తీసుకోలేరు."
  },
  "selfScreenshotErrorTitle": {
    "message": "మీరు Firefox స్క్రీన్షాట్స్ పేజీ యొక్క షాట్ ను తీసుకోలేరు!"
  },
  "emptySelectionErrorTitle": {
    "message": "మీ ఎంపిక చాలా చిన్న్దగా ఉంది"
  },
  "genericErrorTitle": {
    "message": "అయ్యో! Firefox స్క్రీన్షాట్లు haywire వెళ్ళింది."
  },
  "tourBodyIntro": {
    "message": "Firefoxను వదలకుండానే తెరపట్లు తీసుకోండి, భద్రపరచుకోండి, పంచుకోండి."
  },
  "tourHeaderPageAction": {
    "message": "భద్రపరచుకోడానికి కొత్త మార్గం"
  },
  "tourHeaderClickAndDrag": {
    "message": ""
  },
  "tourHeaderDownloadUpload": {
    "message": "మీకు నచ్చినట్టుగా"
  },
  "tourSkip": {
    "message": "దాటవేయి"
  },
  "tourNext": {
    "message": "తర్వాతి ఫలకం"
  },
  "tourPrevious": {
    "message": "మునుపటి ఫలకం"
  },
  "tourDone": {
    "message": "పూర్తయింది"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "నియమాలు"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "గోప్యతా నోటీసు"
  },
  "libraryLabel": {
    "message": "తెరపట్లు"
  }
}PK
!<� ���&webextension/_locales/th/messages.json{
  "addonDescription": {
    "message": "จับภาพหน้าจอจากเว็บและบันทึกไว้ชั่วคราวหรือถาวร"
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "จับภาพหน้าจอ"
  },
  "myShotsLink": {
    "message": "ภาพของฉัน"
  },
  "screenshotInstructions": {
    "message": "ลากหรือคลิกที่หน้าเพื่อเลือกบริเวณ กด ESC เพื่อยกเลิก"
  },
  "saveScreenshotSelectedArea": {
    "message": "บันทึก"
  },
  "saveScreenshotVisibleArea": {
    "message": "บันทึกส่วนที่มองเห็น"
  },
  "saveScreenshotFullPage": {
    "message": "บันทึกเต็มหน้า"
  },
  "cancelScreenshot": {
    "message": "ยกเลิก"
  },
  "downloadScreenshot": {
    "message": "ดาวน์โหลด"
  },
  "downloadOnlyNotice": {
    "message": "คุณกำลังอยู่ในโหมดดาวน์โหลดเท่านั้น"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "ในหน้าต่างการท่องเว็บแบบส่วนตัว"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "คุกกี้บุคคลที่สามถูกปิดการใช้งาน"
  },
  "notificationLinkCopiedTitle": {
    "message": "คัดลอกลิงก์แล้ว"
  },
  "notificationLinkCopiedDetails": {
    "message": "คัดลอกลิงก์ไปยังภาพของคุณไปยังคลิปบอร์ดแล้ว กด $META_KEY$-V เพื่อวาง",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "ภาพนี้ถูกตัดเป็น $PIXELS$ พิกเซล",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "ใช้งานไม่ได้"
  },
  "requestErrorDetails": {
    "message": "ขออภัย! เราไม่สามารถบันทึกภาพของคุณ โปรดลองอีกครั้งในภายหลัง"
  },
  "connectionErrorTitle": {
    "message": "เราไม่สามารถเชื่อมต่อกับภาพหน้าจอของคุณ"
  },
  "connectionErrorDetails": {
    "message": "โปรดตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณ หากคุณสามารถเชื่อมต่ออินเทอร์เน็ต บริการ Firefox Screenshots อาจมีปัญหาชั่วคราว"
  },
  "loginErrorDetails": {
    "message": "เราไม่สามารถบันทึกภาพของคุณเนื่องจากบริการ Firefox Screenshots มีปัญหา โปรดลองอีกครั้งในภายหลัง"
  },
  "unshootablePageErrorTitle": {
    "message": "เราไม่สามารถจับภาพหน้าจอหน้านี้"
  },
  "unshootablePageErrorDetails": {
    "message": "นี่ไม่ใช่หน้าเว็บมาตรฐาน คุณจึงไม่สามารถจับภาพหน้าจอได้"
  },
  "selfScreenshotErrorTitle": {
    "message": "คุณไม่สามารถจับภาพของหน้า Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "การเลือกของคุณเล็กเกินไป"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots ถูกปิดใช้งานในโหมดการท่องเว็บแบบส่วนตัว"
  },
  "privateWindowErrorDetails": {
    "message": "ขออภัยในความไม่สะดวก เรากำลังพัฒนาคุณลักษณะนี้สำหรับรุ่นในอนาคต"
  },
  "genericErrorTitle": {
    "message": "โอ๊ย! Firefox Screenshots รวน"
  },
  "genericErrorDetails": {
    "message": "เราไม่แน่ใจว่าเกิดอะไรขึ้น ต้องการลองอีกครั้งหรือจับภาพของหน้าอื่น?"
  },
  "tourBodyIntro": {
    "message": "จับ บันทึก และแบ่งปันภาพหน้าจอโดยไม่ต้องออกจาก Firefox"
  },
  "tourHeaderPageAction": {
    "message": "หนทางใหม่ในการบันทึก"
  },
  "tourHeaderClickAndDrag": {
    "message": "จับภาพแค่สิ่งที่คุณต้องการ"
  },
  "tourBodyClickAndDrag": {
    "message": "คลิกแล้วลากเพื่อจับภาพแค่บางส่วนของหน้า คุณยังสามารถวางเมาส์เพื่อเน้นการเลือกของคุณ"
  },
  "tourHeaderFullPage": {
    "message": "จับภาพหน้าต่างหรือทั้งหน้า"
  },
  "tourBodyFullPage": {
    "message": "คลิกที่ปุ่มด้านบนขวาเพื่อจับภาพพื้นที่ที่มองเห็นในหน้าต่างหรือเพื่อจับภาพทั้งหน้า"
  },
  "tourHeaderDownloadUpload": {
    "message": "ตามใจชอบ"
  },
  "tourBodyDownloadUpload": {
    "message": "บันทึกภาพที่ครอบตัดของคุณไปยังเว็บเพื่อการแบ่งปันที่ง่ายขึ้น หรือดาวน์โหลดไปยังคอมพิวเตอร์ของคุณ คุณยังสามารถคลิกที่ปุ่ม ภาพของฉัน เพื่อค้นหาภาพทั้งหมดที่คุณจับไว้"
  },
  "tourSkip": {
    "message": "ข้าม"
  },
  "tourNext": {
    "message": "ภาพนิ่งถัดไป"
  },
  "tourPrevious": {
    "message": "ภาพนิ่งก่อนหน้า"
  },
  "tourDone": {
    "message": "เสร็จสิ้น"
  },
  "termsAndPrivacyNotice2": {
    "message": "เพื่อใช้ Firefox Screenshots คุณยอมรับ $TERMSANDPRIVACYNOTICETERMSLINK$ และ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ของเรา",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "ข้อกำหนด"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ประกาศความเป็นส่วนตัว"
  },
  "libraryLabel": {
    "message": "ภาพหน้าจอ"
  }
}PK
!<���ESS&webextension/_locales/tl/messages.json{
  "addonDescription": {
    "message": "Dalhin ang clip at mga screenshot mula sa Web at i-save ang mga ito pansamantala o permanente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Kumuha ng Screenshot"
  },
  "myShotsLink": {
    "message": "Aking Shots"
  },
  "screenshotInstructions": {
    "message": "I-drag o i-click sa pahina upang pumili ng rehiyon. Pindutin ang ESC upang kanselahin."
  },
  "saveScreenshotSelectedArea": {
    "message": "I-save"
  },
  "saveScreenshotVisibleArea": {
    "message": "I-save na nakikita"
  },
  "saveScreenshotFullPage": {
    "message": "I-save ang buong pahina"
  },
  "cancelScreenshot": {
    "message": "Kanselahin"
  },
  "downloadScreenshot": {
    "message": "Download"
  },
  "notificationLinkCopiedTitle": {
    "message": "Kinopya ang Link"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ang link na ito sa iyong shot ay kinopya sa clipboard. Pindutin $META_KEY$-V i-paste.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Mula sa pagkakasunod-sunod."
  },
  "requestErrorDetails": {
    "message": "Paumanhin! Hindi namin mai-save ang iyong mga shot. Subukang muli mamaya."
  },
  "connectionErrorTitle": {
    "message": "Hindi namin maaaring i-kunekta sa iyong mga screenshot."
  },
  "connectionErrorDetails": {
    "message": "Mangyaring suriin ang iyong koneksyon sa Internet. Kung ikaw ay kumonekta sa Internet, maaaring may isang pansamantalang problema sa serbisyo Firefox screenshot."
  },
  "loginErrorDetails": {
    "message": "Hindi namin mai-save ang iyong mga shot dahil may problema sa serbisyo Firefox screenshot. Subukang muli mamaya."
  },
  "unshootablePageErrorTitle": {
    "message": "Hindi namin maaaring screenshot pahinang ito."
  },
  "unshootablePageErrorDetails": {
    "message": "Ito ay hindi isang standard na Web page, kaya hindi ka maaaring kumuha ng isang screenshot ng mga ito."
  },
  "selfScreenshotErrorTitle": {
    "message": "Hindi ka maaaring kumuha ng isang shot ng isang pahina ng Firefox screenshot!"
  },
  "genericErrorTitle": {
    "message": "Whoa! Nagiging magulo ang Firefox screenshot."
  },
  "genericErrorDetails": {
    "message": "Hindi kami sigurado kung ano ang nangyari. Pag-aalaga upang subukang muli o kumuha ng isang shot ng isang iba't ibang mga pahina?"
  },
  "tourBodyIntro": {
    "message": "Dumaan, i-save, at ibahagi ang mga screenshot nang hindi umaalis sa Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ang bagong paraan para mag-save"
  },
  "tourHeaderClickAndDrag": {
    "message": "Kunan Kung Ano Ang Gusto Mo"
  },
  "tourBodyClickAndDrag": {
    "message": "I-click at i-drag upang makuha lamang ang isang bahagi ng isang pahina. Maaari mo ring i-hover upang i-highlight ang iyong pagpili."
  },
  "tourHeaderFullPage": {
    "message": "I-capture ang Windows o Buong Pahina"
  },
  "tourBodyFullPage": {
    "message": "Piliin ang pindutan sa kanang itaas upang makuha ang nakikitang lugar sa window o upang makuha ang isang buong pahina."
  },
  "tourHeaderDownloadUpload": {
    "message": "Bilang Nagustuhan Mo ito"
  },
  "tourBodyDownloadUpload": {
    "message": "I-save ang iyong crop shot sa Web para sa madaling pagbabahagi, o i-download ito sa iyong computer. Maaari mo ring i-click sa pindutan ng My Shots upang mahanap ang lahat ng mga pag-shot na kinunan mo."
  },
  "tourSkip": {
    "message": "Laktawan"
  },
  "tourNext": {
    "message": "Susunod na Slide"
  },
  "tourPrevious": {
    "message": "Nakaraan na Slide"
  },
  "tourDone": {
    "message": "Tapos"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Mga tuntunin"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Abiso sa Privacy"
  },
  "libraryLabel": {
    "message": "Mga screenshot"
  }
}PK
!<�����&webextension/_locales/tr/messages.json{
  "addonDescription": {
    "message": "Web sayfalarının ekran görüntülerini alın, ister geçici ister kalıcı olarak kaydedin."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Ekran görüntüsü al"
  },
  "myShotsLink": {
    "message": "Ekran görüntülerim"
  },
  "screenshotInstructions": {
    "message": "Bir bölgeyi seçmek için işaretçiyi sürükleyin veya tıklayın. İptal etmek için ESC tuşuna basın."
  },
  "saveScreenshotSelectedArea": {
    "message": "Kaydet"
  },
  "saveScreenshotVisibleArea": {
    "message": "Görünür alanı kaydet"
  },
  "saveScreenshotFullPage": {
    "message": "Tüm sayfayı kaydet"
  },
  "cancelScreenshot": {
    "message": "Vazgeç"
  },
  "downloadScreenshot": {
    "message": "İndir"
  },
  "downloadOnlyNotice": {
    "message": "Şu anda Yalnızca İndirme modundasınız."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots şu durumlarda kendiliğinden Yalnızca İndirme moduna geçer:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Gizli Gezinti penceresindeyken"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Üçüncü taraf çerezleri devre dışıyken"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Geçmişi asla hatırlama” devredeyken"
  },
  "downloadOnlyDetailsESR": {
    "message": "Firefox ESR kullanıyorsunuz."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Gönderme işlemi devre dışı bırakılmıştır."
  },
  "notificationLinkCopiedTitle": {
    "message": "Bağlantı kopyalandı"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ekran görüntünüzün bağlantısı panoya kopyalandı. Yapıştırmak için $META_KEY$-V tuşlarına basabilirsiniz.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopyala"
  },
  "notificationImageCopiedTitle": {
    "message": "Görüntü kopyalandı"
  },
  "notificationImageCopiedDetails": {
    "message": "Ekran görüntünüz panoya kopyalandı. Yapıştırmak için $META_KEY$-V tuşlarına basabilirsiniz.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Resim $PIXELS$ piksele kırpıldı.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Arıza var."
  },
  "requestErrorDetails": {
    "message": "Ekran görüntünüzü kaydedemedik. Lütfen daha sonra yeniden deneyin."
  },
  "connectionErrorTitle": {
    "message": "Ekran görüntülerinize bağlanamadık."
  },
  "connectionErrorDetails": {
    "message": "Lütfen internet bağlantınızı kontrol edin. İnternete bağlanabiliyorsanız Firefox Screenhosts hizmeti ile ilgili geçici bir sorun olabilir."
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshosts hizmetinde bir sorun yaşandığı için ekran görüntünüzü kaydedemedik. Lütfen daha sonra yeniden deneyin."
  },
  "unshootablePageErrorTitle": {
    "message": "Bu sayfanın ekran görüntüsü alınamıyor."
  },
  "unshootablePageErrorDetails": {
    "message": "Bu sayfa standart bir web sayfası olmadığı için ekran görüntüsünü alamazsınız."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots sayfalarının ekran görüntüsünü alamazsınz."
  },
  "emptySelectionErrorTitle": {
    "message": "Seçiminiz çok küçük"
  },
  "privateWindowErrorTitle": {
    "message": "Gizli Gezinti modunda Screenshosts özelliği kullanılamaz"
  },
  "privateWindowErrorDetails": {
    "message": "Aksaklıktan dolayı özür dileriz. Gelecek sürümlerde bu özelliği devreye almak için çalışıyoruz."
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshosts kafayı yedi!"
  },
  "genericErrorDetails": {
    "message": "Ne olduğunu biz de anlamadık. Bir daha denemeye veya başka bir sayfanın ekran görüntüsünü almaya ne dersiniz?"
  },
  "tourBodyIntro": {
    "message": "Firefox'tan çıkmadan ekran görüntüleri alın, kaydedin ve paylaşın."
  },
  "tourHeaderPageAction": {
    "message": "Kaydetmenin yeni yolu"
  },
  "tourBodyPageAction": {
    "message": "Ekran görüntüsü almak istediğiniz zaman adres çubuğundaki sayfa eylemleri menüsünü açabilirsiniz."
  },
  "tourHeaderClickAndDrag": {
    "message": "İstediğini yakala"
  },
  "tourBodyClickAndDrag": {
    "message": "Sayfanın belli bir kısmını yakalamak için işaretçiyi tıklayıp sürükleyin. Seçiminizi vurgulamak için fareyle üzerine gelebilirsiniz."
  },
  "tourHeaderFullPage": {
    "message": "Pencereleri veya sayfaların tamamını yakala"
  },
  "tourBodyFullPage": {
    "message": "Yalnızca pencerede gördüğünüz alanı veya sayfanın tamamını yakalamak için sağ üstteki düğmelerden uygun olanı seçin."
  },
  "tourHeaderDownloadUpload": {
    "message": "İstediğin gibi yakala"
  },
  "tourBodyDownloadUpload": {
    "message": "Ekran görüntülerinizi daha kolay paylaşmak veya bilgisayarınıza indirmek için web’e kaydedin. Kaydettiğiniz tüm görüntüleri bulmak için \"Ekran görüntülerim\" düğmesine tıklayabilirsiniz."
  },
  "tourSkip": {
    "message": "GEÇ"
  },
  "tourNext": {
    "message": "Sonraki slayt"
  },
  "tourPrevious": {
    "message": "Önceki slayt"
  },
  "tourDone": {
    "message": "Tamam"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots'ı kullandığınızda $TERMSANDPRIVACYNOTICETERMSLINK$ ve $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kabul etmiş sayılırsınız.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Koşullarımızı"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Gizlilik Bildirimimizi"
  },
  "libraryLabel": {
    "message": "Ekran görüntüleri"
  }
}PK
!<��<pp&webextension/_locales/uk/messages.json{
  "addonDescription": {
    "message": "Робіть вирізки та знімки екрану в Інтернеті та зберігайте їх для подальшої роботи."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Зробити знімок екрану"
  },
  "myShotsLink": {
    "message": "Мої знімки"
  },
  "screenshotInstructions": {
    "message": "Потягніть або клацніть на сторінці для вибору області. Натисніть ESC для скасування."
  },
  "saveScreenshotSelectedArea": {
    "message": "Зберегти"
  },
  "saveScreenshotVisibleArea": {
    "message": "Зберегти видиму область"
  },
  "saveScreenshotFullPage": {
    "message": "Зберегти всю сторінку"
  },
  "cancelScreenshot": {
    "message": "Скасувати"
  },
  "downloadScreenshot": {
    "message": "Завантажити"
  },
  "downloadOnlyNotice": {
    "message": "Ви зараз в режимі лише завантаження."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots автоматично переходить в режим лише завантаження в таких випадках:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "У вікні приватного перегляду."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Сторонні куки вимкнено."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Активовано налаштування “Ніколи не пам'ятати історії”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Ви використовуєте Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Вивантаження було вимкнено."
  },
  "notificationLinkCopiedTitle": {
    "message": "Посилання скопійовано"
  },
  "notificationLinkCopiedDetails": {
    "message": "Посилання на ваш знімок було скопійоване до буфера обміну. Натисніть $META_KEY$-V для вставлення.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Копіювати"
  },
  "notificationImageCopiedTitle": {
    "message": "Знімок скопійовано"
  },
  "notificationImageCopiedDetails": {
    "message": "Ваш знімок був скопійований в буфер обміну. Натисніть $META_KEY$-V, щоб вставити.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Зображення було обрізано до $PIXELS$ пікселів.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Сталася помилка."
  },
  "requestErrorDetails": {
    "message": "Вибачте! Нам не вдалося зберегти ваш знімок. Спробуйте знову пізніше."
  },
  "connectionErrorTitle": {
    "message": "Ми не можемо отримати доступ до ваших знімків."
  },
  "connectionErrorDetails": {
    "message": "Будь ласка, перевірте ваше підключення до Інтернету. Якщо у вас все в порядку з Інтернетом, можливо, виникли тимчасові проблеми зі службою Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Нам не вдалося зберегти ваш знімок, тому що виникли проблеми зі службою Firefox Screenshots. Спробуйте знову пізніше."
  },
  "unshootablePageErrorTitle": {
    "message": "Ми не можемо зробити знімок цієї сторінки."
  },
  "unshootablePageErrorDetails": {
    "message": "Це не стандартна веб-сторінка, тому ви не можете зробити її знімок."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ви не можете зробити знімок сторінки Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Обрана область є замалою"
  },
  "privateWindowErrorTitle": {
    "message": "Знімки екрану вимкнено в приватному перегляді"
  },
  "privateWindowErrorDetails": {
    "message": "Вибачте за незручності. Ми працюємо над цією функцією для майбутніх випусків."
  },
  "genericErrorTitle": {
    "message": "Оу! З Firefox Screenshots щось негаразд."
  },
  "genericErrorDetails": {
    "message": "Ми не впевнені, в чому проблема. Спробувати ще раз, або ж зробити знімок іншої сторінки?"
  },
  "tourBodyIntro": {
    "message": "Робіть знімки екрану, зберігайте та діліться ними прямо в Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Новий спосіб збереження"
  },
  "tourBodyPageAction": {
    "message": "Розгорніть меню дій для сторінки в панелі адреси, коли ви хочете зробити знімок екрану."
  },
  "tourHeaderClickAndDrag": {
    "message": "Робіть знімки чого завгодно"
  },
  "tourBodyClickAndDrag": {
    "message": "Клацніть і потягніть мишею для захоплення частини сторінки. Ви також можете навести курсор миші для підсвічення вибраної області."
  },
  "tourHeaderFullPage": {
    "message": "Захоплюйте вікна або цілі сторінки"
  },
  "tourBodyFullPage": {
    "message": "За допомогою кнопок у верхній правій частині обирайте захоплення видимої області вікна, або сторінки повністю."
  },
  "tourHeaderDownloadUpload": {
    "message": "Як вам подобається"
  },
  "tourBodyDownloadUpload": {
    "message": "Зберігайте свої знімки в Інтернеті, щоб легко ними ділитися, або завантажуйте їх на свій комп'ютер. Ви також можете переглянути всі збережені знімки, натиснувши на кнопку Мої знімки."
  },
  "tourSkip": {
    "message": "Пропустити"
  },
  "tourNext": {
    "message": "Наступний слайд"
  },
  "tourPrevious": {
    "message": "Попередній слайд"
  },
  "tourDone": {
    "message": "Готово"
  },
  "termsAndPrivacyNotice2": {
    "message": "Використовуючи Firefox Screenshots, ви погоджуєтеся з нашими $TERMSANDPRIVACYNOTICETERMSLINK$ та $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Умовами використання"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Повідомленням про приватність"
  },
  "libraryLabel": {
    "message": "Знімки екрану"
  }
}PK
!<JB��~~&webextension/_locales/ur/messages.json{
  "addonDescription": {
    "message": "ویب سے کللبس یاا اسکرین شاٹیں لیں اور ان کو عارظی یا مستقل طور پر محفوظ کریں۔"
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "ایک سکرین شاٹ لیں"
  },
  "myShotsLink": {
    "message": "میری شاٹس"
  },
  "screenshotInstructions": {
    "message": "علاقہ منتخب کرنے کے لیئے گھسیٹیں یا صفحہ پر کلک کریں۔ منسوخ کرنے کے لیئے ESC دبائیں۔"
  },
  "saveScreenshotSelectedArea": {
    "message": "محفوظ کریں"
  },
  "saveScreenshotVisibleArea": {
    "message": "مرئی محفوظ کریں"
  },
  "saveScreenshotFullPage": {
    "message": "پورا صفحہ محفوظ کریں"
  },
  "cancelScreenshot": {
    "message": "منسوخ کریں"
  },
  "downloadScreenshot": {
    "message": "ڈاؤن لوڈ"
  },
  "notificationLinkCopiedTitle": {
    "message": "تبط نقل کر دیا گیا"
  },
  "notificationLinkCopiedDetails": {
    "message": "آُپ کی شاٹس کا ربط و تختہ تراشہ پر نقل کر دیا گیا ہے۔ چسپاں کرنے کے لیئے $META_KEY$-V دبائِں۔",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "خراب ہے۔"
  },
  "requestErrorDetails": {
    "message": "معاف کیجیئے گا! ہم آپ کی شاٹ محفوظ نہیں کر سکے۔ براہ مہربانی کچھ دیر بعد کوشش کریں۔"
  },
  "connectionErrorTitle": {
    "message": "ہم آپ کی اسکرین شاٹس سے نہیں جڑ سکتے۔"
  },
  "connectionErrorDetails": {
    "message": "براہ مہربانی اپنے انٹرنیٹ کنکشن کی پڑتال کریں۔ اگر آپ انٹرنیٹ سے جڑنے کے قابل ہیں، تو شاید Firefox اسکرین شاٹ خدمات کے ساتھ عارظی مسلہ ہو۔"
  },
  "loginErrorDetails": {
    "message": "ہم آُپ کی شاٹ محفوظ نہیں کر سکے کیونکہ Firefox اسکرین شاٹ خدمت کے ساتھ مسلہ ہے۔ براہ مہربانی کچھ دیربعد کوشش کیجیئے۔"
  },
  "unshootablePageErrorTitle": {
    "message": "ہم اس صفحہ کی اسکرین شاٹ نہیں کر سکتے۔"
  },
  "unshootablePageErrorDetails": {
    "message": "یہ ایک میعاری صفحہ نہہیں، تو آپ اسکی اسکرین شاٹ نہیں لے سکتے۔"
  },
  "selfScreenshotErrorTitle": {
    "message": "آپ Firefox اسکرین شاٹس صفحے! کی ایک شاٹ نہیں لے سکت"
  },
  "emptySelectionErrorTitle": {
    "message": "آپ کا انتخاب بہت چھوٹا ہے"
  },
  "genericErrorTitle": {
    "message": "لاجواب! Firefox Screenshots بہت مشہور ہو گیا۔"
  },
  "genericErrorDetails": {
    "message": "ہمیں یقین نہیں کہ کیا ہوا تھا۔ خیال رکھ کر پھر کوشش کریں یا بھر مختلف صفحہ کی تصویرلیں؟"
  },
  "tourBodyIntro": {
    "message": "۔Firefox کو چھوڑے بغیر اسکرینشاٹس لیں، محفوظ کریں اور شیئر کریں۔"
  },
  "tourHeaderPageAction": {
    "message": "محفوظ کرنے کا نیا طریقہ"
  },
  "tourHeaderClickAndDrag": {
    "message": "جو آپ چاہتے ہیں وہ گرفت کریں"
  },
  "tourBodyClickAndDrag": {
    "message": "صفحہ کا ایک حصہ گرفت کرنے کے لیئے گھسیتیں اور کلک کریں.آُپ اپنے انتخاب کو نمایاں کرنے کے لیئے منڈلا سکتے ہیں۔"
  },
  "tourHeaderFullPage": {
    "message": "دریچہ ہا مکمل صفحہ گرفت کریں"
  },
  "tourBodyFullPage": {
    "message": "دریچہ میں نظر آنے والے علاقے یا مکمل صفحہ کو گرفت کرنے کے لیئے بالائی دائیں جانب بٹن کا انتخاب کریں۔"
  },
  "tourHeaderDownloadUpload": {
    "message": "جس طرح آپ کو پسند ہے"
  },
  "tourBodyDownloadUpload": {
    "message": "اپنے کمپیوٹڑ میں ڈائونلوڈ کرنے یا ویب پر آسانی سے شیئر کرنے کے لیئےاپنی کتری ہوئی شاٹس محفوظ کریں۔ آپ میری شاٹس کے بٹن پ کلک کر کے بھی اتمام پنی لی گئی شاٹس ڈھّونڈ سکتےہیں۔"
  },
  "tourSkip": {
    "message": "اچٹیں"
  },
  "tourNext": {
    "message": "اگلى سلائيڈ"
  },
  "tourPrevious": {
    "message": "پچھلی سلائڈ"
  },
  "tourDone": {
    "message": "ہوگیا"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "شرائط"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "اطلاع نامہ نجی نوعیت"
  },
  "libraryLabel": {
    "message": "اسکرین شاٹس"
  }
}PK
!<)�S{�
�
&webextension/_locales/uz/messages.json{
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Rasmini olish"
  },
  "myShotsLink": {
    "message": "Rasmlarim"
  },
  "screenshotInstructions": {
    "message": "Hududni belgilash uchun sahifa ustiga tashlang yoki bosing. Chiqish uchun “ESC” tugmasidan foydalaning."
  },
  "saveScreenshotSelectedArea": {
    "message": "Saqlash"
  },
  "saveScreenshotVisibleArea": {
    "message": "Ko‘rinadiganini saqlash"
  },
  "saveScreenshotFullPage": {
    "message": "To‘liq sahifani saqlash"
  },
  "cancelScreenshot": {
    "message": "Bekor qilish"
  },
  "downloadScreenshot": {
    "message": "Yuklab olish"
  },
  "notificationLinkCopiedTitle": {
    "message": "Havoladan nusxa olindi"
  },
  "notificationLinkCopiedDetails": {
    "message": "Rasm havolasidan vaqtinchalik xotiraga nusxa olindi. Qo‘yish uchun $META_KEY$-V tugmalarini bosing.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Bu rasm $PIXELS$px hajmida kesildi.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Xizmat hozircha ishlamayapti."
  },
  "requestErrorDetails": {
    "message": "Uzr! Rasmni saqlay olmaymiz. Keyinroq urinib ko‘ring."
  },
  "connectionErrorTitle": {
    "message": "Ekran rasmiga ulana olmadik."
  },
  "connectionErrorDetails": {
    "message": "Internetga ulanishni tekshiring. Ulana olsangiz, demak Firefox Screenshot xizmatida vaqtinchalik muammo bo‘lishi mumkin."
  },
  "loginErrorDetails": {
    "message": "Olingan rasmni saqlay olmaymiz, chunki Firefox Screenshot xizmatida muammo mavjud. Keyinroq urinib ko‘ring."
  },
  "unshootablePageErrorTitle": {
    "message": "Bu sahifani rasmga tushira olmaymiz."
  },
  "unshootablePageErrorDetails": {
    "message": "Bu sahifa standart sahifa emas, shuning uchun uni rasmga tushira olmaymiz."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshot sahifasini rasmga tushirish mumkin emas!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tanlangan hudud juda kichik"
  },
  "privateWindowErrorTitle": {
    "message": "Maxfiy ko‘rish rejimida rasmga olib bo‘lmaydi"
  },
  "privateWindowErrorDetails": {
    "message": "Noqulaylik uchun uzr. Biz keyingi versiyalar uchun bu funksiya ustida ishlayapmiz."
  },
  "tourBodyIntro": {
    "message": "Firefox brauzeridan chiqmasdan sahifalarni rasmga olish, saqlash va bo‘lishish mumkin."
  },
  "tourHeaderPageAction": {
    "message": "Saqlashning yangi usuli"
  },
  "libraryLabel": {
    "message": "Rasmlar"
  }
}PK
!<��w���&webextension/_locales/vi/messages.json{
  "addonDescription": {
    "message": "Chụp ảnh và chụp màn hình từ Web và lưu chúng tạm thời hoặc vĩnh viễn."
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "Chụp ảnh màn hình"
  },
  "myShotsLink": {
    "message": "Các ảnh chụp của tôi"
  },
  "screenshotInstructions": {
    "message": "Kéo hoặc nhấp vào trang để chọn một khu vực. Nhấn ESC để hủy bỏ."
  },
  "saveScreenshotSelectedArea": {
    "message": "Lưu lại"
  },
  "saveScreenshotVisibleArea": {
    "message": "Lưu phần nhìn thấy"
  },
  "saveScreenshotFullPage": {
    "message": "Lưu toàn trang"
  },
  "cancelScreenshot": {
    "message": "Hủy bỏ"
  },
  "downloadScreenshot": {
    "message": "Tải xuống"
  },
  "downloadOnlyNotice": {
    "message": "Bạn hiện đang ở chế độ chỉ tải về."
  },
  "downloadOnlyDetails": {
    "message": "Ảnh chụp màn hình của Firefox sẽ tự động chuyển sang chế độ chỉ tải về trong các tình huống:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Trong một cửa sổ duyệt web riêng tư."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies của bên thứ ba đã bị vô hiệu hóa."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Không bao giờ ghi nhớ lược sử” đã được kích hoạt."
  },
  "downloadOnlyDetailsESR": {
    "message": "Bạn đang sử dụng Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Tải lên đã bị vô hiệu hóa."
  },
  "notificationLinkCopiedTitle": {
    "message": "Đã sao chép liên kết"
  },
  "notificationLinkCopiedDetails": {
    "message": "Liên kết ảnh chụp màn hình của bạn đã được sao chép vào clipboard. Nhấn $META_KEY$-V để dán.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Sao chép"
  },
  "notificationImageCopiedTitle": {
    "message": "Ảnh chụp màn hình đã được sao chép"
  },
  "notificationImageCopiedDetails": {
    "message": "Ảnh chụp màn hình của bạn đã được sao chép vào clipboard. Nhấn $META_KEY$-V để dán.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Ảnh này đã được cắt đến $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Không sử dụng được."
  },
  "requestErrorDetails": {
    "message": "Xin lỗi! Chúng tôi không thể sao lưu ảnh chụp của bạn. Vui lòng thử lại sau."
  },
  "connectionErrorTitle": {
    "message": "Chúng tôi không thể kết nối với ảnh chụp màn hình của bạn."
  },
  "connectionErrorDetails": {
    "message": "Vui lòng kiểm tra kết nối Internet của bạn. Nếu bạn có thể kết nối với Internet, đó có thể là sự cố tạm thời với dịch vụ Ảnh chụp màn hình của Firefox."
  },
  "loginErrorDetails": {
    "message": "Chúng tôi không thể lưu hình của bạn vì có sự cố với dịch vụ Ảnh chụp màn hình của Firefox. Vui lòng thử lại sau."
  },
  "unshootablePageErrorTitle": {
    "message": "Chúng tôi không thể chụp màn hình trang này."
  },
  "unshootablePageErrorDetails": {
    "message": "Đây không phải là trang Web bình thường, bạn không thể chụp ảnh màn hình nó."
  },
  "selfScreenshotErrorTitle": {
    "message": "Bạn không thể chụp một trang của Ảnh chụp màn hình Firefox !"
  },
  "emptySelectionErrorTitle": {
    "message": "Vùng chọn của bạn quá nhỏ"
  },
  "privateWindowErrorTitle": {
    "message": "Ảnh chụp màn hình đã bị vô hiệu hóa ở chế độ duyệt Web riêng tư"
  },
  "privateWindowErrorDetails": {
    "message": "Xin lỗi vì sự bất tiện này. Chúng tôi đang làm việc trên các tính năng này cho bản phát hành trong tương lai."
  },
  "genericErrorTitle": {
    "message": "Whoa! Ảnh chụp màn hình của Firefox đã bị hoãn."
  },
  "genericErrorDetails": {
    "message": "Chúng tôi không chắc những gì vừa xảy ra. Thử lại hoặc chụp một trang khác?"
  },
  "tourBodyIntro": {
    "message": "Tạo, lưu và chia sẻ ảnh chụp màn hình mà không rời khỏi Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Một cách mới để lưu"
  },
  "tourBodyPageAction": {
    "message": "Mở rộng trình đơn tác vụ trên trang trong thanh địa chỉ bất kỳ lúc nào bạn muốn chụp ảnh màn hình."
  },
  "tourHeaderClickAndDrag": {
    "message": "Chỉ chụp những gì bạn muốn"
  },
  "tourBodyClickAndDrag": {
    "message": "Nhấp và kéo để chụp một phần của một trang. Bạn cũng có thể di chuột để làm nổi bật lựa chọn của bạn."
  },
  "tourHeaderFullPage": {
    "message": "Chụp Windows hoặc Toàn bộ trang"
  },
  "tourBodyFullPage": {
    "message": "Chọn các nút ở phía trên bên phải để chụp khu vực nhìn thấy được trong cửa sổ hoặc để chụp toàn bộ trang."
  },
  "tourHeaderDownloadUpload": {
    "message": "Như bạn thích"
  },
  "tourBodyDownloadUpload": {
    "message": "Lưu ảnh đã cắt của bạn lên web để chia sẻ dễ dàng hơn hoặc tải chúng xuống máy tính của bạn. Bạn cũng có thể nhấp vào nút Ảnh chụp của tôi để tìm tất cả ảnh bạn đã chụp."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Slide tiếp theo"
  },
  "tourPrevious": {
    "message": "Slide trước đó"
  },
  "tourDone": {
    "message": "Xong"
  },
  "termsAndPrivacyNotice2": {
    "message": "Bằng cách sử dụng Ảnh chụp màn hình Firefox, bạn đồng ý với $TERMSANDPRIVACYNOTICETERMSLINK$ và $TERMSANDPRIVACYNOTICEPRIVACYLINK$ của chúng tôi.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Điều khoản"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Chính sách riêng tư"
  },
  "libraryLabel": {
    "message": "Các ảnh chụp màn hình"
  }
}PK
!<Y��{��)webextension/_locales/zh_CN/messages.json{
  "addonDescription": {
    "message": "截取网页截图,可临时或永久存储。"
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "截图"
  },
  "myShotsLink": {
    "message": "我的截图"
  },
  "screenshotInstructions": {
    "message": "在此页上拖拽或单击选择截图区域。按 ESC 键取消截图。"
  },
  "saveScreenshotSelectedArea": {
    "message": "保存"
  },
  "saveScreenshotVisibleArea": {
    "message": "截取可见范围"
  },
  "saveScreenshotFullPage": {
    "message": "截取整个页面"
  },
  "cancelScreenshot": {
    "message": "取消"
  },
  "downloadScreenshot": {
    "message": "下载"
  },
  "downloadOnlyNotice": {
    "message": "您目前处在仅下载模式。"
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots 在如下情况将自动变更为仅下载模式:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "处于隐私浏览窗口。"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "第三方 Cookie 已禁用。"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "已启用“不记录历史记录”。"
  },
  "downloadOnlyDetailsESR": {
    "message": "您目前使用 Firefox ESR 版本。"
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "上传已被禁用。"
  },
  "notificationLinkCopiedTitle": {
    "message": "链接已复制"
  },
  "notificationLinkCopiedDetails": {
    "message": "您的截图的链接已复制到剪贴板。按 $META_KEY$-V 可粘贴。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "复制"
  },
  "notificationImageCopiedTitle": {
    "message": "截图已复制"
  },
  "notificationImageCopiedDetails": {
    "message": "您的截图已复制到剪贴板。按 $META_KEY$+-V 粘贴。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "此图片已裁剪为 $PIXELS$px。",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "出故障了。"
  },
  "requestErrorDetails": {
    "message": "很抱歉,我们无法为您保存截图。请稍后再试。"
  },
  "connectionErrorTitle": {
    "message": "我们无法连接到您的截图。"
  },
  "connectionErrorDetails": {
    "message": "请检查您的互联网连接。如果您正常连接到互联网,可能是 Firefox Screenshots 的服务器临时出了问题。"
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshots 服务遇到问题,我们现在无法保存您的截图。请稍后再试。"
  },
  "unshootablePageErrorTitle": {
    "message": "我们无法截图此页面。"
  },
  "unshootablePageErrorDetails": {
    "message": "这不是一个标准的网页,所以无法截图。"
  },
  "selfScreenshotErrorTitle": {
    "message": "您不能截取 Firefox Screenshots 的页面!"
  },
  "emptySelectionErrorTitle": {
    "message": "您选择的范围太小"
  },
  "privateWindowErrorTitle": {
    "message": "隐私浏览模式下屏幕截图已被禁用"
  },
  "privateWindowErrorDetails": {
    "message": "很抱歉因此带来的不便。我们将在后续版本中提供此功能。"
  },
  "genericErrorTitle": {
    "message": "哎呀,Firefox Screenshots 遇到问题。"
  },
  "genericErrorDetails": {
    "message": "我们不确定发生了什么。您可以再试一次或者试试另一个页面。"
  },
  "tourBodyIntro": {
    "message": "截取、保存和分享屏幕截图,无需 Firefox 以外的工具。"
  },
  "tourHeaderPageAction": {
    "message": "新的保存方法"
  },
  "tourBodyPageAction": {
    "message": "随时可以展开地址栏中的页面操作菜单来截图。"
  },
  "tourHeaderClickAndDrag": {
    "message": "截取你所需"
  },
  "tourBodyClickAndDrag": {
    "message": "单击并拖动以截取页面某个区域。您也可以把光标移到你要的地方,高亮后单击即可截图。"
  },
  "tourHeaderFullPage": {
    "message": "截取窗口或整个页面"
  },
  "tourBodyFullPage": {
    "message": "选择右上角的按钮可以截取窗口中的可见区域或者整个页面。"
  },
  "tourHeaderDownloadUpload": {
    "message": "做您所想"
  },
  "tourBodyDownloadUpload": {
    "message": "将您裁剪后的截图保存到网上以便共享,或者下载到您的计算机。您也可以点击“我的截图”按钮找到您截取的所有截图。"
  },
  "tourSkip": {
    "message": "跳过"
  },
  "tourNext": {
    "message": "下一页"
  },
  "tourPrevious": {
    "message": "上一页"
  },
  "tourDone": {
    "message": "完成"
  },
  "termsAndPrivacyNotice2": {
    "message": "使用 Firefox Screenshots 即代表您同意我们的$TERMSANDPRIVACYNOTICETERMSLINK$和$TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "条款"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "隐私声明"
  },
  "libraryLabel": {
    "message": "屏幕截图"
  }
}PK
!<���VV)webextension/_locales/zh_TW/messages.json{
  "addonDescription": {
    "message": "拍攝網頁的擷圖,可暫時儲存或永久儲存。"
  },
  "addonAuthorsList": {
    "message": "Mozilla <[email protected]>"
  },
  "contextMenuLabel": {
    "message": "拍攝畫面擷圖"
  },
  "myShotsLink": {
    "message": "我的擷圖"
  },
  "screenshotInstructions": {
    "message": "拖曳或點擊頁面來選擇區域,按下 ESC 取消。"
  },
  "saveScreenshotSelectedArea": {
    "message": "儲存"
  },
  "saveScreenshotVisibleArea": {
    "message": "儲存可見範圍"
  },
  "saveScreenshotFullPage": {
    "message": "儲存完整頁面"
  },
  "cancelScreenshot": {
    "message": "取消"
  },
  "downloadScreenshot": {
    "message": "下載"
  },
  "downloadOnlyNotice": {
    "message": "您目前處於「僅可下載模式」。"
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots 會在下列狀況時,進入「僅可下載模式」:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "使用隱私瀏覽模式開啟時。"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "停用第三方 Cookie 時。"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "開啟「永不保留瀏覽紀錄」時。"
  },
  "downloadOnlyDetailsESR": {
    "message": "您使用的是 Firefox ESR 版本。"
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "已停用上傳。"
  },
  "notificationLinkCopiedTitle": {
    "message": "已複製鏈結"
  },
  "notificationLinkCopiedDetails": {
    "message": "已將您拍攝的圖片鏈結複製到剪貼簿,按下 $META_KEY$+V 即可貼上。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "複製"
  },
  "notificationImageCopiedTitle": {
    "message": "已複製擷圖"
  },
  "notificationImageCopiedDetails": {
    "message": "已將擷圖複製到剪貼簿,按下 $META_KEY$-V 即可貼上。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "已將圖片裁切為 $PIXELS$px 大小。",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "系統維護中。"
  },
  "requestErrorDetails": {
    "message": "抱歉!無法儲存您拍攝的圖片,請稍候再試一次。"
  },
  "connectionErrorTitle": {
    "message": "無法連線至您的畫面擷圖。"
  },
  "connectionErrorDetails": {
    "message": "請檢查您的網路連線。若您可以正常上網,可能是 Firefox Screenshots 臨時出了問題。"
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshots 服務發生問題,我們無法儲存您拍攝的擷圖。請稍候再試。"
  },
  "unshootablePageErrorTitle": {
    "message": "無法幫此頁面拍照。"
  },
  "unshootablePageErrorDetails": {
    "message": "這不是標準的網頁,無法拍照。"
  },
  "selfScreenshotErrorTitle": {
    "message": "您不能幫 Firefox Screenshots 的頁面拍照!"
  },
  "emptySelectionErrorTitle": {
    "message": "您的選擇範圍太小"
  },
  "privateWindowErrorTitle": {
    "message": "隱私瀏覽模式中將停用 Screenshots 套件"
  },
  "privateWindowErrorDetails": {
    "message": "很抱歉帶來不便,我們將在未來提供此功能。"
  },
  "genericErrorTitle": {
    "message": "唉呀,Firefox Screenshots 有點秀逗了。"
  },
  "genericErrorDetails": {
    "message": "我們不確定剛剛發生了什麼事,您可以再試一次,或拍攝其他頁面的擷圖嗎?"
  },
  "tourBodyIntro": {
    "message": "不用離開 Firefox 就可以拍攝、儲存、分享畫面擷圖。"
  },
  "tourHeaderPageAction": {
    "message": "全新的存檔方式"
  },
  "tourBodyPageAction": {
    "message": "想要拍攝擷圖時,打開網址列當中的頁面操作選單即可拍照。"
  },
  "tourHeaderClickAndDrag": {
    "message": "只拍你想拍的"
  },
  "tourBodyClickAndDrag": {
    "message": "點擊並拖曳出要擷取的範圍。或者您也可以用滑鼠移上頁面中的各部分,擷取該範圍。"
  },
  "tourHeaderFullPage": {
    "message": "擷取可見範圍或整張網頁"
  },
  "tourBodyFullPage": {
    "message": "透過右上角的不同按鈕來選擇只拍攝視窗中的可見區域,或是整張網頁。"
  },
  "tourHeaderDownloadUpload": {
    "message": "用您想要的方式分享"
  },
  "tourBodyDownloadUpload": {
    "message": "裁切過的擷圖,可直接傳到網路上方便分享,也能下載到電腦裡;也可以點擊「我的擷圖」按鈕,尋找拍過的所有擷圖。"
  },
  "tourSkip": {
    "message": "略過"
  },
  "tourNext": {
    "message": "下一頁"
  },
  "tourPrevious": {
    "message": "上一頁"
  },
  "tourDone": {
    "message": "完成"
  },
  "termsAndPrivacyNotice2": {
    "message": "使用 Firefox Screenshots 時,代表您同意我們的 $TERMSANDPRIVACYNOTICETERMSLINK$ 及 $TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "使用條款"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "隱私權保護政策"
  },
  "libraryLabel": {
    "message": "擷圖"
  }
}PK
!<e�L��%webextension/assertIsBlankDocument.js/** For use inside an iframe onload function, throws an Error if iframe src is not blank.html

    Should be applied *inside* catcher.watchFunction
*/
this.assertIsBlankDocument = function assertIsBlankDocument(doc) {
  if (doc.documentURI !== browser.extension.getURL("blank.html")) {
    const exc = new Error("iframe URL does not match expected blank.html");
    exc.foundURL = doc.documentURI;
    throw exc;
  }
}
null;
PK
!<�xZ���webextension/assertIsTrusted.js/** For use with addEventListener, assures that any events have event.isTrusted set to true
      https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted
    Should be applied *inside* catcher.watchFunction
*/
this.assertIsTrusted = function assertIsTrusted(handlerFunction) {
  return function(event) {
    if (!event) {
      const exc = new Error("assertIsTrusted did not get an event");
      exc.noPopup = true;
      throw exc;
    }
    if (!event.isTrusted) {
      const exc = new Error(`Received untrusted event (type: ${event.type})`);
      exc.noPopup = true;
      throw exc;
    }
    return handlerFunction.call(this, event);
  };
}
null;
PK
!<��=��'�'$webextension/background/analytics.js/* globals main, auth, catcher, deviceInfo, communication, log */

"use strict";

this.analytics = (function() {
  const exports = {};

  let telemetryPrefKnown = false;
  let telemetryEnabled;

  const EVENT_BATCH_DURATION = 1000; // ms for setTimeout
  let pendingEvents = [];
  let pendingTimings = [];
  let eventsTimeoutHandle, timingsTimeoutHandle;
  const fetchOptions = {
    method: "POST",
    mode: "cors",
    headers: { "content-type": "application/json" },
    credentials: "include"
  };

  function flushEvents() {
    if (pendingEvents.length === 0) {
      return;
    }

    const eventsUrl = `${main.getBackend()}/event`;
    const deviceId = auth.getDeviceId();
    const sendTime = Date.now();

    pendingEvents.forEach(event => {
      event.queueTime = sendTime - event.eventTime
      log.info(`sendEvent ${event.event}/${event.action}/${event.label || "none"} ${JSON.stringify(event.options)}`);
    });

    const body = JSON.stringify({deviceId, events: pendingEvents});
    const fetchRequest = fetch(eventsUrl, Object.assign({body}, fetchOptions));
    fetchWatcher(fetchRequest);
    pendingEvents = [];
  }

  function flushTimings() {
    if (pendingTimings.length === 0) {
      return;
    }

    const timingsUrl = `${main.getBackend()}/timing`;
    const deviceId = auth.getDeviceId();
    const body = JSON.stringify({deviceId, timings: pendingTimings});
    const fetchRequest = fetch(timingsUrl, Object.assign({body}, fetchOptions));
    fetchWatcher(fetchRequest);
    pendingTimings.forEach(t => {
      log.info(`sendTiming ${t.timingCategory}/${t.timingLabel}/${t.timingVar}: ${t.timingValue}`);
    });
    pendingTimings = [];
  }

  function sendTiming(timingLabel, timingVar, timingValue) {
    // sendTiming is only called in response to sendEvent, so no need to check
    // the telemetry pref again here.
    const timingCategory = "addon";
    pendingTimings.push({
      timingCategory,
      timingLabel,
      timingVar,
      timingValue
    });
    if (!timingsTimeoutHandle) {
      timingsTimeoutHandle = setTimeout(() => {
        timingsTimeoutHandle = null;
        flushTimings();
      }, EVENT_BATCH_DURATION);
    }
  }

  exports.sendEvent = function(action, label, options) {
    const eventCategory = "addon";
    if (!telemetryPrefKnown) {
      log.warn("sendEvent called before we were able to refresh");
      return Promise.resolve();
    }
    if (!telemetryEnabled) {
      log.info(`Cancelled sendEvent ${eventCategory}/${action}/${label || "none"} ${JSON.stringify(options)}`);
      return Promise.resolve();
    }
    measureTiming(action, label);
    // Internal-only events are used for measuring time between events,
    // but aren't submitted to GA.
    if (action === "internal") {
      return Promise.resolve();
    }
    if (typeof label === "object" && (!options)) {
      options = label;
      label = undefined;
    }
    options = options || {};

    // Don't send events if in private browsing.
    if (options.incognito) {
      return Promise.resolve();
    }

    // Don't include in event data.
    delete options.incognito;

    const di = deviceInfo();
    options.applicationName = di.appName;
    options.applicationVersion = di.addonVersion;
    const abTests = auth.getAbTests();
    for (const [gaField, value] of Object.entries(abTests)) {
      options[gaField] = value;
    }
    pendingEvents.push({
      eventTime: Date.now(),
      event: eventCategory,
      action,
      label,
      options
    });
    if (!eventsTimeoutHandle) {
      eventsTimeoutHandle = setTimeout(() => {
        eventsTimeoutHandle = null;
        flushEvents();
      }, EVENT_BATCH_DURATION);
    }
    // This function used to return a Promise that was not used at any of the
    // call sites; doing this simply maintains that interface.
    return Promise.resolve();
  };

  exports.refreshTelemetryPref = function() {
    return communication.sendToBootstrap("isTelemetryEnabled").then((result) => {
      telemetryPrefKnown = true;
      if (result === communication.NO_BOOTSTRAP) {
        telemetryEnabled = true;
      } else {
        telemetryEnabled = result;
      }
    }, (error) => {
      // If there's an error reading the pref, we should assume that we shouldn't send data
      telemetryPrefKnown = true;
      telemetryEnabled = false;
      throw error;
    });
  };

  exports.isTelemetryEnabled = function() {
    catcher.watchPromise(exports.refreshTelemetryPref());
    return telemetryEnabled;
  };

  const timingData = new Map();

  // Configuration for filtering the sendEvent stream on start/end events.
  // When start or end events occur, the time is recorded.
  // When end events occur, the elapsed time is calculated and submitted
  // via `sendEvent`, where action = "perf-response-time", label = name of rule,
  // and cd1 value is the elapsed time in milliseconds.
  // If a cancel event happens between the start and end events, the start time
  // is deleted.
  const rules = [{
    name: "page-action",
    start: { action: "start-shot", label: "toolbar-button" },
    end: { action: "internal", label: "unhide-preselection-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" },
      { action: "internal", label: "unhide-onboarding-frame" }
    ]
  }, {
    name: "context-menu",
    start: { action: "start-shot", label: "context-menu" },
    end: { action: "internal", label: "unhide-preselection-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" },
      { action: "internal", label: "unhide-onboarding-frame" }
    ]
  }, {
    name: "page-action-onboarding",
    start: { action: "start-shot", label: "toolbar-button" },
    end: { action: "internal", label: "unhide-onboarding-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" },
      { action: "internal", label: "unhide-preselection-frame" }
    ]
  }, {
    name: "context-menu-onboarding",
    start: { action: "start-shot", label: "context-menu" },
    end: { action: "internal", label: "unhide-onboarding-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" },
      { action: "internal", label: "unhide-preselection-frame" }
    ]
  }, {
    name: "capture-full-page",
    start: { action: "capture-full-page" },
    end: { action: "internal", label: "unhide-preview-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "capture-visible",
    start: { action: "capture-visible" },
    end: { action: "internal", label: "unhide-preview-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "make-selection",
    start: { action: "make-selection" },
    end: { action: "internal", label: "unhide-selection-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "save-shot",
    start: { action: "save-shot" },
    end: { action: "internal", label: "open-shot-tab" },
    cancel: [{ action: "cancel-shot" }, { action: "upload-failed" }]
  }, {
    name: "save-visible",
    start: { action: "save-visible" },
    end: { action: "internal", label: "open-shot-tab" },
    cancel: [{ action: "cancel-shot" }, { action: "upload-failed" }]
  }, {
    name: "save-full-page",
    start: { action: "save-full-page" },
    end: { action: "internal", label: "open-shot-tab" },
    cancel: [{ action: "cancel-shot" }, { action: "upload-failed" }]
  }, {
    name: "save-full-page-truncated",
    start: { action: "save-full-page-truncated" },
    end: { action: "internal", label: "open-shot-tab" },
    cancel: [{ action: "cancel-shot" }, { action: "upload-failed" }]
  }, {
    name: "download-shot",
    start: { action: "download-shot" },
    end: { action: "internal", label: "deactivate" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "download-full-page",
    start: { action: "download-full-page" },
    end: { action: "internal", label: "deactivate" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "download-full-page-truncated",
    start: { action: "download-full-page-truncated" },
    end: { action: "internal", label: "deactivate" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "download-visible",
    start: { action: "download-visible" },
    end: { action: "internal", label: "deactivate" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }];

  // Match a filter (action and optional label) against an action and label.
  function match(filter, action, label) {
    return filter.label ?
      filter.action === action && filter.label === label :
      filter.action === action;
  }

  function anyMatches(filters, action, label) {
    return filters.some(filter => match(filter, action, label));
  }

  function measureTiming(action, label) {
    rules.forEach(r => {
      if (anyMatches(r.cancel, action, label)) {
        delete timingData[r.name];
      } else if (match(r.start, action, label)) {
        timingData[r.name] = Math.round(performance.now());
      } else if (timingData[r.name] && match(r.end, action, label)) {
        const endTime = Math.round(performance.now());
        const elapsed = endTime - timingData[r.name];
        sendTiming("perf-response-time", r.name, elapsed);
        delete timingData[r.name];
      }
    });
  }

  function fetchWatcher(request) {
    catcher.watchPromise(
      request.then(response => {
        if (!response.ok) {
          throw new Error(`Bad response from ${request.url}: ${response.status} ${response.statusText}`);
        }
        return response;
      }),
      true
    );
  }

  return exports;
})();
PK
!<|��Mnnwebextension/background/auth.js/* globals log */
/* globals main, makeUuid, deviceInfo, analytics, catcher, buildSettings, communication */

"use strict";

this.auth = (function() {
  const exports = {};

  let registrationInfo;
  let initialized = false;
  let authHeader = null;
  let sentryPublicDSN = null;
  let abTests = {};

  const registrationInfoFetched = catcher.watchPromise(browser.storage.local.get(["registrationInfo", "abTests"]).then((result) => {
    if (result.abTests) {
      abTests = result.abTests;
    }
    if (result.registrationInfo) {
      registrationInfo = result.registrationInfo;
    } else {
      registrationInfo = generateRegistrationInfo();
      log.info("Generating new device authentication ID", registrationInfo);
      browser.storage.local.set({registrationInfo});
    }
  }));

  exports.getDeviceId = function() {
    return registrationInfo && registrationInfo.deviceId;
  };

  function generateRegistrationInfo() {
    const info = {
      deviceId: `anon${makeUuid()}`,
      secret: makeUuid(),
      registered: false
    };
    return info;
  }

  function register() {
    return new Promise((resolve, reject) => {
      const registerUrl = main.getBackend() + "/api/register";
      // TODO: replace xhr with Fetch #2261
      const req = new XMLHttpRequest();
      req.open("POST", registerUrl);
      req.setRequestHeader("content-type", "application/json");
      req.onload = catcher.watchFunction(() => {
        if (req.status === 200) {
          log.info("Registered login");
          initialized = true;
          saveAuthInfo(JSON.parse(req.responseText));
          resolve(true);
          analytics.sendEvent("registered");
        } else {
          analytics.sendEvent("register-failed", `bad-response-${req.status}`);
          log.warn("Error in response:", req.responseText);
          const exc = new Error("Bad response: " + req.status);
          exc.popupMessage = "LOGIN_ERROR";
          reject(exc);
        }
      });
      req.onerror = catcher.watchFunction(() => {
        analytics.sendEvent("register-failed", "connection-error");
        const exc = new Error("Error contacting server");
        exc.popupMessage = "LOGIN_CONNECTION_ERROR";
        reject(exc);
      });
      req.send(JSON.stringify({
        deviceId: registrationInfo.deviceId,
        secret: registrationInfo.secret,
        deviceInfo: JSON.stringify(deviceInfo())
      }));
    });
  }

  function login(options) {
    const { ownershipCheck, noRegister } = options || {};
    return new Promise((resolve, reject) => {
      const loginUrl = main.getBackend() + "/api/login";
      // TODO: replace xhr with Fetch #2261
      const req = new XMLHttpRequest();
      req.open("POST", loginUrl);
      req.onload = catcher.watchFunction(() => {
        if (req.status === 404) {
          if (noRegister) {
            resolve(false);
          } else {
            resolve(register());
          }
        } else if (req.status >= 300) {
          log.warn("Error in response:", req.responseText);
          const exc = new Error("Could not log in: " + req.status);
          exc.popupMessage = "LOGIN_ERROR";
          analytics.sendEvent("login-failed", `bad-response-${req.status}`);
          reject(exc);
        } else if (req.status === 0) {
          const error = new Error("Could not log in, server unavailable");
          error.popupMessage = "LOGIN_CONNECTION_ERROR";
          analytics.sendEvent("login-failed", "connection-error");
          reject(error);
        } else {
          initialized = true;
          const jsonResponse = JSON.parse(req.responseText);
          log.info("Screenshots logged in");
          analytics.sendEvent("login");
          saveAuthInfo(jsonResponse);
          if (ownershipCheck) {
            resolve({isOwner: jsonResponse.isOwner});
          } else {
            resolve(true);
          }
        }
      });
      req.onerror = catcher.watchFunction(() => {
        analytics.sendEvent("login-failed", "connection-error");
        const exc = new Error("Connection failed");
        exc.url = loginUrl;
        exc.popupMessage = "CONNECTION_ERROR";
        reject(exc);
      });
      req.setRequestHeader("content-type", "application/json");
      req.send(JSON.stringify({
        deviceId: registrationInfo.deviceId,
        secret: registrationInfo.secret,
        deviceInfo: JSON.stringify(deviceInfo()),
        ownershipCheck
      }));
    });
  }

  function saveAuthInfo(responseJson) {
    if (responseJson.sentryPublicDSN) {
      sentryPublicDSN = responseJson.sentryPublicDSN;
    }
    if (responseJson.authHeader) {
      authHeader = responseJson.authHeader;
      if (!registrationInfo.registered) {
        registrationInfo.registered = true;
        catcher.watchPromise(browser.storage.local.set({registrationInfo}));
      }
    }
    if (responseJson.abTests) {
      abTests = responseJson.abTests;
      catcher.watchPromise(browser.storage.local.set({abTests}));
    }
  }

  exports.getDeviceId = function() {
    return registrationInfo.deviceId;
  };

  exports.authHeaders = function() {
    let initPromise = Promise.resolve();
    if (!initialized) {
      initPromise = login();
    }
    return initPromise.then(() => {
      if (authHeader) {
        return {"x-screenshots-auth": authHeader};
      }
      log.warn("No auth header available");
      return {};
    });
  };

  exports.getSentryPublicDSN = function() {
    return sentryPublicDSN || buildSettings.defaultSentryDsn;
  };

  exports.getAbTests = function() {
    return abTests;
  };

  exports.isRegistered = function() {
    return registrationInfo.registered;
  };

  communication.register("getAuthInfo", (sender, ownershipCheck) => {
    return registrationInfoFetched.then(() => {
      return exports.authHeaders();
    }).then((authHeaders) => {
      let info = registrationInfo;
      if (info.registered) {
        return login({ownershipCheck}).then((result) => {
          return {
            isOwner: result && result.isOwner,
            deviceId: registrationInfo.deviceId,
            authHeaders
          };
        });
      }
      info = Object.assign({authHeaders}, info);
      return info;
    });
  });

  return exports;
})();
PK
!<�WҠf
f
(webextension/background/communication.js/* globals catcher, log */

"use strict";

this.communication = (function() {
  const exports = {};

  const registeredFunctions = {};

  exports.onMessage = catcher.watchFunction((req, sender, sendResponse) => {
    if (!(req.funcName in registeredFunctions)) {
      log.error(`Received unknown internal message type ${req.funcName}`);
      sendResponse({type: "error", name: "Unknown message type"});
      return;
    }
    if (!Array.isArray(req.args)) {
      log.error("Received message with no .args list");
      sendResponse({type: "error", name: "No .args"});
      return;
    }
    const func = registeredFunctions[req.funcName];
    let result;
    try {
      req.args.unshift(sender);
      result = func.apply(null, req.args);
    } catch (e) {
      log.error(`Error in ${req.funcName}:`, e, e.stack);
      // FIXME: should consider using makeError from catcher here:
      sendResponse({type: "error", message: e + "", errorCode: e.errorCode, popupMessage: e.popupMessage});
      return;
    }
    if (result && result.then) {
      result.then((concreteResult) => {
        sendResponse({type: "success", value: concreteResult});
      }).catch((errorResult) => {
        log.error(`Promise error in ${req.funcName}:`, errorResult, errorResult && errorResult.stack);
        sendResponse({type: "error", message: errorResult + "", errorCode: errorResult.errorCode, popupMessage: errorResult.popupMessage});
      });
      return;
    }
    sendResponse({type: "success", value: result});
  });

  exports.register = function(name, func) {
    registeredFunctions[name] = func;
  };

  /** Send a message to bootstrap.js
      Technically any worker can listen to this.  If the bootstrap wrapper is not in place, then this
      will *not* fail, and will return a value of exports.NO_BOOTSTRAP  */
  exports.sendToBootstrap = function(funcName, ...args) {
    return browser.runtime.sendMessage({funcName, args}).then((result) => {
      if (result.type === "success") {
        return result.value;
      }
      throw new Error(`Error in ${funcName}: ${result.name || "unknown"}`);
    }, (error) => {
      if (isBootstrapMissingError(error)) {
        return exports.NO_BOOTSTRAP;
      }
      throw error;
    });
  };

  function isBootstrapMissingError(error) {
    if (!error) {
      return false;
    }
    return ("errorCode" in error && error.errorCode === "NO_RECEIVING_END") ||
      (!error.errorCode && error.message === "Could not establish connection. Receiving end does not exist.");
  }


  // A singleton/sentinel (with a name):
  exports.NO_BOOTSTRAP = {name: "communication.NO_BOOTSTRAP"};

  return exports;
})();
PK
!<�Y����%webextension/background/deviceInfo.js/* globals catcher */

"use strict";

this.deviceInfo = (function() {
  const manifest = browser.runtime.getManifest();

  let platformInfo = {};
  catcher.watchPromise(browser.runtime.getPlatformInfo().then((info) => {
    platformInfo = info;
  }));

  return function deviceInfo() {
    let match = navigator.userAgent.match(/Chrom(?:e|ium)\/([0-9.]{1,1000})/);
    const chromeVersion = match ? match[1] : null;
    match = navigator.userAgent.match(/Firefox\/([0-9.]{1,1000})/);
    const firefoxVersion = match ? match[1] : null;
    const appName = chromeVersion ? "chrome" : "firefox";

    return {
      addonVersion: manifest.version,
      platform: platformInfo.os,
      architecture: platformInfo.arch,
      version: firefoxVersion || chromeVersion,
      // These don't seem to apply to Chrome:
      // build: system.build,
      // platformVersion: system.platformVersion,
      userAgent: navigator.userAgent,
      appVendor: appName,
      appName
    };
  };

})();
PK
!<�5T(T(webextension/background/main.js/* globals selectorLoader, analytics, communication, catcher, log, makeUuid, auth, senderror, startBackground, blobConverters buildSettings */

"use strict";

this.main = (function() {
  const exports = {};

  const pasteSymbol = (window.navigator.platform.match(/Mac/i)) ? "\u2318" : "Ctrl";
  const { sendEvent } = analytics;

  const manifest = browser.runtime.getManifest();
  let backend;

  let hasSeenOnboarding;

  browser.storage.local.get(["hasSeenOnboarding"]).then((result) => {
    hasSeenOnboarding = !!result.hasSeenOnboarding;
    if (!hasSeenOnboarding) {
      setIconActive(false, null);
      // Note that the branded name 'Firefox Screenshots' is not localized:
      startBackground.photonPageActionPort.postMessage({
        type: "setProperties",
        title: "Firefox Screenshots"
      });
    }
  }).catch((error) => {
    log.error("Error getting hasSeenOnboarding:", error);
  });

  exports.setBackend = function(newBackend) {
    backend = newBackend;
    backend = backend.replace(/\/*$/, "");
  };

  exports.getBackend = function() {
    return backend;
  };

  communication.register("getBackend", () => {
    return backend;
  });

  function getOnboardingUrl() {
    return backend + "/#hello";
  }

  for (const permission of manifest.permissions) {
    if (/^https?:\/\//.test(permission)) {
      exports.setBackend(permission);
      break;
    }
  }

  function setIconActive(active, tabId) {
    const path = active ? "icons/icon-highlight-32-v2.svg" : "icons/icon-v2.svg";
    startBackground.photonPageActionPort.postMessage({
      type: "setProperties",
      iconPath: path
    });
  }

  function toggleSelector(tab) {
    return analytics.refreshTelemetryPref()
      .then(() => selectorLoader.toggle(tab.id, hasSeenOnboarding))
      .then(active => {
        setIconActive(active, tab.id);
        return active;
      })
      .catch((error) => {
        if (error.message && /Missing host permission for the tab/.test(error.message)) {
          error.noReport = true;
        }
        error.popupMessage = "UNSHOOTABLE_PAGE";
        throw error;
      });
  }

  function startSelectionWithOnboarding(tab) {
    return analytics.refreshTelemetryPref().then(() => {
      return selectorLoader.testIfLoaded(tab.id);
    }).then((isLoaded) => {
      if (!isLoaded) {
        sendEvent("start-shot", "site-request", {incognito: tab.incognito});
        setIconActive(true, tab.id);
        selectorLoader.toggle(tab.id, false);
      }
    });
  }

  function shouldOpenMyShots(url) {
    return /^about:(?:newtab|blank|home)/i.test(url) || /^resource:\/\/activity-streams\//i.test(url);
  }

  // This is called by startBackground.js, directly in response to clicks on the Photon page action
  exports.onClicked = catcher.watchFunction((tab) => {
    if (shouldOpenMyShots(tab.url)) {
      if (!hasSeenOnboarding) {
        catcher.watchPromise(analytics.refreshTelemetryPref().then(() => {
          sendEvent("goto-onboarding", "selection-button", {incognito: tab.incognito});
          return forceOnboarding();
        }));
        return;
      }
      catcher.watchPromise(analytics.refreshTelemetryPref().then(() => {
        sendEvent("goto-myshots", "about-newtab", {incognito: tab.incognito});
      }));
      catcher.watchPromise(
        auth.authHeaders()
        .then(() => browser.tabs.update({url: backend + "/shots"})));
    } else {
      catcher.watchPromise(
        toggleSelector(tab)
          .then(active => {
            const event = active ? "start-shot" : "cancel-shot";
            sendEvent(event, "toolbar-button", {incognito: tab.incognito});
          }, (error) => {
            if ((!hasSeenOnboarding) && error.popupMessage === "UNSHOOTABLE_PAGE") {
              sendEvent("goto-onboarding", "selection-button", {incognito: tab.incognito});
              return forceOnboarding();
            }
            throw error;
          }));
    }
  });

  function forceOnboarding() {
    return browser.tabs.create({url: getOnboardingUrl()});
  }

  exports.onClickedContextMenu = catcher.watchFunction((info, tab) => {
    if (!tab) {
      // Not in a page/tab context, ignore
      return;
    }
    if (!urlEnabled(tab.url)) {
      senderror.showError({
        popupMessage: "UNSHOOTABLE_PAGE"
      });
      return;
    }
    catcher.watchPromise(
      toggleSelector(tab)
        .then(() => sendEvent("start-shot", "context-menu", {incognito: tab.incognito})));
  });

  function urlEnabled(url) {
    if (shouldOpenMyShots(url)) {
      return true;
    }
    if (isShotOrMyShotPage(url) || /^(?:about|data|moz-extension):/i.test(url) || isBlacklistedUrl(url)) {
      return false;
    }
    return true;
  }

  function isShotOrMyShotPage(url) {
    // It's okay to take a shot of any pages except shot pages and My Shots
    if (!url.startsWith(backend)) {
      return false;
    }
    const path = url.substr(backend.length).replace(/^\/*/, "").replace(/[?#].*/, "");
    if (path === "shots") {
      return true;
    }
    if (/^[^/]{1,4000}\/[^/]{1,4000}$/.test(path)) {
      // Blocks {:id}/{:domain}, but not /, /privacy, etc
      return true;
    }
    return false;
  }

  function isBlacklistedUrl(url) {
    // These specific domains are not allowed for general WebExtension permission reasons
    // Discussion: https://bugzilla.mozilla.org/show_bug.cgi?id=1310082
    // List of domains copied from: https://dxr.mozilla.org/mozilla-central/source/browser/app/permissions#18-19
    // Note we disable it here to be informative, the security check is done in WebExtension code
    const badDomains = ["addons.mozilla.org", "testpilot.firefox.com"];
    let domain = url.replace(/^https?:\/\//i, "");
    domain = domain.replace(/\/.*/, "").replace(/:.*/, "");
    domain = domain.toLowerCase();
    return badDomains.includes(domain);
  }

  communication.register("sendEvent", (sender, ...args) => {
    catcher.watchPromise(sendEvent(...args));
    // We don't wait for it to complete:
    return null;
  });

  communication.register("openMyShots", (sender) => {
    return catcher.watchPromise(
      auth.authHeaders()
      .then(() => browser.tabs.create({url: backend + "/shots"})));
  });

  communication.register("openShot", (sender, {url, copied}) => {
    if (copied) {
      const id = makeUuid();
      return browser.notifications.create(id, {
        type: "basic",
        iconUrl: "../icons/copy.png",
        title: browser.i18n.getMessage("notificationLinkCopiedTitle"),
        message: browser.i18n.getMessage("notificationLinkCopiedDetails", pasteSymbol)
      });
    }
    return null;
  });

  // This is used for truncated full page downloads and copy to clipboards.
  // Those longer operations need to display an animated spinner/loader, so
  // it's preferable to perform toDataURL() in the background.
  communication.register("canvasToDataURL", (sender, imageData) => {
    const canvas = document.createElement("canvas");
    canvas.width = imageData.width;
    canvas.height = imageData.height;
    canvas.getContext("2d").putImageData(imageData, 0, 0);
    let dataUrl = canvas.toDataURL();
    if (buildSettings.pngToJpegCutoff && dataUrl.length > buildSettings.pngToJpegCutoff) {
      const jpegDataUrl = canvas.toDataURL("image/jpeg");
      if (jpegDataUrl.length < dataUrl.length) {
        // Only use the JPEG if it is actually smaller
        dataUrl = jpegDataUrl;
      }
    }
    return dataUrl;
  });

  communication.register("copyShotToClipboard", (sender, blob) => {
    return blobConverters.blobToArray(blob).then(buffer => {
      return browser.clipboard.setImageData(
        buffer, blob.type.split("/", 2)[1]).then(() => {
          catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "copy"}));
          return browser.notifications.create({
            type: "basic",
            iconUrl: "../icons/copy.png",
            title: browser.i18n.getMessage("notificationImageCopiedTitle"),
            message: browser.i18n.getMessage("notificationImageCopiedDetails", pasteSymbol)
          });
        });
    })
  });

  communication.register("downloadShot", (sender, info) => {
    // 'data:' urls don't work directly, let's use a Blob
    // see http://stackoverflow.com/questions/40269862/save-data-uri-as-file-using-downloads-download-api
    const blob = blobConverters.dataUrlToBlob(info.url);
    const url = URL.createObjectURL(blob);
    let downloadId;
    const onChangedCallback = catcher.watchFunction(function(change) {
      if (!downloadId || downloadId !== change.id) {
        return;
      }
      if (change.state && change.state.current !== "in_progress") {
        URL.revokeObjectURL(url);
        browser.downloads.onChanged.removeListener(onChangedCallback);
      }
    });
    browser.downloads.onChanged.addListener(onChangedCallback)
    catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "download"}));
    return browser.windows.getLastFocused().then(windowInfo => {
      return browser.downloads.download({
        url,
        incognito: windowInfo.incognito,
        filename: info.filename
      }).then((id) => {
        downloadId = id;
      });
    });
  });

  communication.register("closeSelector", (sender) => {
    setIconActive(false, sender.tab.id);
  });

  communication.register("hasSeenOnboarding", () => {
    hasSeenOnboarding = true;
    catcher.watchPromise(browser.storage.local.set({hasSeenOnboarding}));
    setIconActive(false, null);
    startBackground.photonPageActionPort.postMessage({
      type: "setProperties",
      title: browser.i18n.getMessage("contextMenuLabel")
    });
  });

  communication.register("abortStartShot", () => {
    // Note, we only show the error but don't report it, as we know that we can't
    // take shots of these pages:
    senderror.showError({
      popupMessage: "UNSHOOTABLE_PAGE"
    });
  });

  // A Screenshots page wants us to start/force onboarding
  communication.register("requestOnboarding", (sender) => {
    return startSelectionWithOnboarding(sender.tab);
  });

  communication.register("getPlatformOs", () => {
    return catcher.watchPromise(browser.runtime.getPlatformInfo().then(platformInfo => {
      return platformInfo.os;
    }));
  });

  return exports;
})();
PK
!<O
;)webextension/background/selectorLoader.js/* globals catcher, communication, log */

"use strict";

// eslint-disable-next-line no-var
var global = this;

this.selectorLoader = (function() {
  const exports = {};

  // These modules are loaded in order, first standardScripts, then optionally onboardingScripts, and then selectorScripts
  // The order is important due to dependencies
  const standardScripts = [
    "build/buildSettings.js",
    "log.js",
    "catcher.js",
    "assertIsTrusted.js",
    "assertIsBlankDocument.js",
    "blobConverters.js",
    "background/selectorLoader.js",
    "selector/callBackground.js",
    "selector/util.js"
  ];

  const selectorScripts = [
    "clipboard.js",
    "makeUuid.js",
    "build/shot.js",
    "randomString.js",
    "domainFromUrl.js",
    "build/inlineSelectionCss.js",
    "selector/documentMetadata.js",
    "selector/ui.js",
    "selector/shooter.js",
    "selector/uicontrol.js"
  ];

  // These are loaded on request (by the selector worker) to activate the onboarding:
  const onboardingScripts = [
    "build/onboardingCss.js",
    "build/onboardingHtml.js",
    "onboarding/slides.js"
  ];

  exports.unloadIfLoaded = function(tabId) {
    return browser.tabs.executeScript(tabId, {
      code: "this.selectorLoader && this.selectorLoader.unloadModules()",
      runAt: "document_start"
    }).then(result => {
      return result && result[0];
    });
  };

  exports.testIfLoaded = function(tabId) {
    if (loadingTabs.has(tabId)) {
      return true;
    }
    return browser.tabs.executeScript(tabId, {
      code: "!!this.selectorLoader",
      runAt: "document_start"
    }).then(result => {
      return result && result[0];
    });
  };

  const loadingTabs = new Set();

  exports.loadModules = function(tabId, hasSeenOnboarding) {
    loadingTabs.add(tabId);
    let promise = downloadOnlyCheck(tabId);
    if (hasSeenOnboarding) {
      promise = promise.then(() => {
        return executeModules(tabId, standardScripts.concat(selectorScripts));
      });
    } else {
      promise = promise.then(() => {
        return executeModules(tabId, standardScripts.concat(onboardingScripts).concat(selectorScripts));
      });
    }
    return promise.then((result) => {
      loadingTabs.delete(tabId);
      return result;
    }, (error) => {
      loadingTabs.delete(tabId);
      throw error;
    });
  };

  // TODO: since bootstrap communication is now required, would this function
  // make more sense inside background/main?
  function downloadOnlyCheck(tabId) {
    return communication.sendToBootstrap("isHistoryEnabled").then((historyEnabled) => {
      return communication.sendToBootstrap("isUploadDisabled").then((uploadDisabled) => {
        return browser.tabs.get(tabId).then(tab => {
          const downloadOnly = !historyEnabled || uploadDisabled || tab.incognito;
          return browser.tabs.executeScript(tabId, {
            // Note: `window` here refers to a global accessible to content
            // scripts, but not the scripts in the underlying page. For more
            // details, see https://mdn.io/WebExtensions/Content_scripts#Content_script_environment
            code: `window.downloadOnly = ${downloadOnly}`,
            runAt: "document_start"
          });
        });
      });
    });
  }

  function executeModules(tabId, scripts) {
    let lastPromise = Promise.resolve(null);
    scripts.forEach((file) => {
      lastPromise = lastPromise.then(() => {
        return browser.tabs.executeScript(tabId, {
          file,
          runAt: "document_start"
        }).catch((error) => {
          log.error("error in script:", file, error);
          error.scriptName = file;
          throw error;
        });
      });
    });
    return lastPromise.then(() => {
      log.debug("finished loading scripts:", scripts.join(" "));
    },
    (error) => {
      exports.unloadIfLoaded(tabId);
      catcher.unhandled(error);
      throw error;
    });
  }

  exports.unloadModules = function() {
    const watchFunction = catcher.watchFunction;
    const allScripts = standardScripts.concat(onboardingScripts).concat(selectorScripts);
    const moduleNames = allScripts.map((filename) =>
      filename.replace(/^.*\//, "").replace(/\.js$/, ""));
    moduleNames.reverse();
    for (const moduleName of moduleNames) {
      const moduleObj = global[moduleName];
      if (moduleObj && moduleObj.unload) {
        try {
          watchFunction(moduleObj.unload)();
        } catch (e) {
          // ignore (watchFunction handles it)
        }
      }
      delete global[moduleName];
    }
    return true;
  };

  exports.toggle = function(tabId, hasSeenOnboarding) {
    return exports.unloadIfLoaded(tabId)
      .then(wasLoaded => {
        if (!wasLoaded) {
          exports.loadModules(tabId, hasSeenOnboarding);
        }
        return !wasLoaded;
      })
  };

  return exports;
})();
null;
PK
!<	6�;��$webextension/background/senderror.js/* globals startBackground, analytics, communication, makeUuid, Raven, catcher, auth, log */

"use strict";

this.senderror = (function() {
  const exports = {};

  const manifest = browser.runtime.getManifest();

  // Do not show an error more than every ERROR_TIME_LIMIT milliseconds:
  const ERROR_TIME_LIMIT = 3000;

  const messages = {
    REQUEST_ERROR: {
      title: browser.i18n.getMessage("requestErrorTitle"),
      info: browser.i18n.getMessage("requestErrorDetails")
    },
    CONNECTION_ERROR: {
      title: browser.i18n.getMessage("connectionErrorTitle"),
      info: browser.i18n.getMessage("connectionErrorDetails")
    },
    LOGIN_ERROR: {
      title: browser.i18n.getMessage("requestErrorTitle"),
      info: browser.i18n.getMessage("loginErrorDetails")
    },
    LOGIN_CONNECTION_ERROR: {
      title: browser.i18n.getMessage("connectionErrorTitle"),
      info: browser.i18n.getMessage("connectionErrorDetails")
    },
    UNSHOOTABLE_PAGE: {
      title: browser.i18n.getMessage("unshootablePageErrorTitle"),
      info: browser.i18n.getMessage("unshootablePageErrorDetails")
    },
    SHOT_PAGE: {
      title: browser.i18n.getMessage("selfScreenshotErrorTitle")
    },
    MY_SHOTS: {
      title: browser.i18n.getMessage("selfScreenshotErrorTitle")
    },
    EMPTY_SELECTION: {
      title: browser.i18n.getMessage("emptySelectionErrorTitle")
    },
    PRIVATE_WINDOW: {
      title: browser.i18n.getMessage("privateWindowErrorTitle"),
      info: browser.i18n.getMessage("privateWindowErrorDetails")
    },
    generic: {
      title: browser.i18n.getMessage("genericErrorTitle"),
      info: browser.i18n.getMessage("genericErrorDetails"),
      showMessage: true
    }
  };

  communication.register("reportError", (sender, error) => {
    catcher.unhandled(error);
  });

  let lastErrorTime;

  exports.showError = function(error) {
    if (lastErrorTime && (Date.now() - lastErrorTime) < ERROR_TIME_LIMIT) {
      return;
    }
    lastErrorTime = Date.now();
    const id = makeUuid();
    let popupMessage = error.popupMessage || "generic";
    if (!messages[popupMessage]) {
      popupMessage = "generic";
    }
    const title = messages[popupMessage].title;
    let message = messages[popupMessage].info || "";
    const showMessage = messages[popupMessage].showMessage;
    if (error.message && showMessage) {
      if (message) {
        message += "\n" + error.message;
      } else {
        message = error.message;
      }
    }
    if (Date.now() - startBackground.startTime > 5 * 1000) {
      browser.notifications.create(id, {
        type: "basic",
        // FIXME: need iconUrl for an image, see #2239
        title,
        message
      });
    }
  };

  exports.reportError = function(e) {
    if (!analytics.isTelemetryEnabled()) {
      log.error("Telemetry disabled. Not sending critical error:", e);
      return;
    }
    const dsn = auth.getSentryPublicDSN();
    if (!dsn) {
      log.warn("Screenshots error:", e);
      return;
    }
    if (!Raven.isSetup()) {
      Raven.config(dsn, {allowSecretKey: true}).install();
    }
    const exception = new Error(e.message);
    exception.stack = e.multilineStack || e.stack || undefined;

    // To improve Sentry reporting & grouping, replace the
    // moz-extension://$uuid base URL with a generic resource:// URL.
    if (exception.stack) {
      exception.stack = exception.stack.replace(
        /moz-extension:\/\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/g,
        "resource://screenshots-addon"
      );
    }
    const rest = {};
    for (const attr in e) {
      if (!["name", "message", "stack", "multilineStack", "popupMessage", "version", "sentryPublicDSN", "help", "fromMakeError"].includes(attr)) {
        rest[attr] = e[attr];
      }
    }
    rest.stack = exception.stack;
    Raven.captureException(exception, {
      logger: "addon",
      tags: {category: e.popupMessage},
      release: manifest.version,
      message: exception.message,
      extra: rest
    });
  };

  catcher.registerHandler((errorObj) => {
    if (!errorObj.noPopup) {
      exports.showError(errorObj);
    }
    if (!errorObj.noReport) {
      exports.reportError(errorObj);
    }
  });

  return exports;
})();
PK
!<0�D8DD*webextension/background/startBackground.js/* globals browser, main, communication */
/* This file handles:
     clicks on the Photon page action
     browser.contextMenus.onClicked
     browser.runtime.onMessage
   and loads the rest of the background page in response to those events, forwarding
   the events to main.onClicked, main.onClickedContextMenu, or communication.onMessage
*/
const startTime = Date.now();

this.startBackground = (function() {
  const exports = {startTime};

  const backgroundScripts = [
    "log.js",
    "makeUuid.js",
    "catcher.js",
    "blobConverters.js",
    "background/selectorLoader.js",
    "background/communication.js",
    "background/auth.js",
    "background/senderror.js",
    "build/raven.js",
    "build/shot.js",
    "build/thumbnailGenerator.js",
    "background/analytics.js",
    "background/deviceInfo.js",
    "background/takeshot.js",
    "background/main.js"
  ];

  browser.contextMenus.create({
    id: "create-screenshot",
    title: browser.i18n.getMessage("contextMenuLabel"),
    contexts: ["page"],
    documentUrlPatterns: ["<all_urls>"]
  });

  browser.contextMenus.onClicked.addListener((info, tab) => {
    loadIfNecessary().then(() => {
      main.onClickedContextMenu(info, tab);
    }).catch((error) => {
      console.error("Error loading Screenshots:", error);
    });
  });

  browser.runtime.onMessage.addListener((req, sender, sendResponse) => {
    loadIfNecessary().then(() => {
      return communication.onMessage(req, sender, sendResponse);
    }).catch((error) => {
      console.error("Error loading Screenshots:", error);
    });
    return true;
  });

  let photonPageActionPort = null;
  initPhotonPageAction();

  let loadedPromise;

  function loadIfNecessary() {
    if (loadedPromise) {
      return loadedPromise;
    }
    loadedPromise = Promise.resolve();
    backgroundScripts.forEach((script) => {
      loadedPromise = loadedPromise.then(() => {
        return new Promise((resolve, reject) => {
          const tag = document.createElement("script");
          tag.src = browser.extension.getURL(script);
          tag.onload = () => {
            resolve();
          };
          tag.onerror = (error) => {
            const exc = new Error(`Error loading script: ${error.message}`);
            exc.scriptName = script;
            reject(exc);
          };
          document.head.appendChild(tag);
        });
      });
    });
    return loadedPromise;
  }

  function initPhotonPageAction() {
    // Set up this side of the Photon page action port.  The other side is in
    // bootstrap.js.  Ideally, in the future, WebExtension page actions and
    // Photon page actions would be one in the same, but they aren't right now.
    photonPageActionPort = browser.runtime.connect({ name: "photonPageActionPort" });
    photonPageActionPort.onMessage.addListener((message) => {
      switch (message.type) {
      case "click":
        loadIfNecessary().then(() => {
          return browser.tabs.get(message.tab.id);
        }).then((tab) => {
          main.onClicked(tab);
        }).catch((error) => {
          console.error("Error loading Screenshots:", error);
        });
        break;
      default:
        console.error("Unrecognized message:", message);
        break;
      }
    });
    photonPageActionPort.postMessage({
      type: "setProperties",
      title: browser.i18n.getMessage("contextMenuLabel")
    });

    // Export these so that main.js can use them.
    Object.defineProperties(exports, {
      "photonPageActionPort": {
        enumerable: true,
        get() {
          return photonPageActionPort;
        }
      }
    });
  }

  return exports;
})();
PK
!<BӰ�HH#webextension/background/takeshot.js/* globals communication, shot, main, auth, catcher, analytics, buildSettings, blobConverters, thumbnailGenerator */

"use strict";

this.takeshot = (function() {
  const exports = {};
  const Shot = shot.AbstractShot;
  const { sendEvent } = analytics;

  communication.register("takeShot", catcher.watchFunction((sender, options) => {
    const { captureType, captureText, scroll, selectedPos, shotId } = options;
    const shot = new Shot(main.getBackend(), shotId, options.shot);
    shot.favicon = sender.tab.favIconUrl;
    let imageBlob = options.imageBlob;
    let capturePromise = Promise.resolve();
    let openedTab;
    let thumbnailBlob;
    if (!shot.clipNames().length) {
      // canvas.drawWindow isn't available, so we fall back to captureVisibleTab
      capturePromise = screenshotPage(selectedPos, scroll).then((dataUrl) => {
        imageBlob = buildSettings.uploadBinary ? blobConverters.dataUrlToBlob(dataUrl) : null;
        shot.addClip({
          createdDate: Date.now(),
          image: {
            url: buildSettings.uploadBinary ? "" : dataUrl,
            captureType,
            text: captureText,
            location: selectedPos,
            dimensions: {
              x: selectedPos.right - selectedPos.left,
              y: selectedPos.bottom - selectedPos.top
            }
          }
        });
      });
    }
    const shotAbTests = {};
    const abTests = auth.getAbTests();
    for (const testName of Object.keys(abTests)) {
      if (abTests[testName].shotField) {
        shotAbTests[testName] = abTests[testName].value;
      }
    }
    if (Object.keys(shotAbTests).length) {
      shot.abTests = shotAbTests;
    }
    return catcher.watchPromise(capturePromise.then(() => {
      if (buildSettings.uploadBinary) {
        const blobToUrlPromise = blobConverters.blobToDataUrl(imageBlob);
        return thumbnailGenerator.createThumbnailBlobFromPromise(shot, blobToUrlPromise);
      }
      return thumbnailGenerator.createThumbnailUrl(shot);
    }).then((thumbnailImage) => {
      if (buildSettings.uploadBinary) {
        thumbnailBlob = thumbnailImage;
      } else {
        shot.thumbnail = thumbnailImage;
      }
    }).then(() => {
      return browser.tabs.create({url: shot.creatingUrl})
    }).then((tab) => {
      openedTab = tab;
      sendEvent("internal", "open-shot-tab");
      return uploadShot(shot, imageBlob, thumbnailBlob);
    }).then(() => {
      return browser.tabs.update(openedTab.id, {url: shot.viewUrl, loadReplace: true}).then(
        null,
        (error) => {
          // FIXME: If https://bugzilla.mozilla.org/show_bug.cgi?id=1365718 is resolved,
          // use the errorCode added as an additional check:
          if ((/invalid tab id/i).test(error)) {
            // This happens if the tab was closed before the upload completed
            return browser.tabs.create({url: shot.viewUrl});
          }
          throw error;
        }
      );
    }).then(() => {
      catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "upload"}));
      return shot.viewUrl;
    }).catch((error) => {
      browser.tabs.remove(openedTab.id);
      throw error;
    }));
  }));

  communication.register("screenshotPage", (sender, selectedPos, scroll) => {
    return screenshotPage(selectedPos, scroll);
  });

  function screenshotPage(pos, scroll) {
    pos = {
      top: pos.top - scroll.scrollY,
      left: pos.left - scroll.scrollX,
      bottom: pos.bottom - scroll.scrollY,
      right: pos.right - scroll.scrollX
    };
    pos.width = pos.right - pos.left;
    pos.height = pos.bottom - pos.top;
    return catcher.watchPromise(browser.tabs.captureVisibleTab(
      null,
      {format: "png"}
    ).then((dataUrl) => {
      const image = new Image();
      image.src = dataUrl;
      return new Promise((resolve, reject) => {
        image.onload = catcher.watchFunction(() => {
          const xScale = image.width / scroll.innerWidth;
          const yScale = image.height / scroll.innerHeight;
          const canvas = document.createElement("canvas");
          canvas.height = pos.height * yScale;
          canvas.width = pos.width * xScale;
          const context = canvas.getContext("2d");
          context.drawImage(
            image,
            pos.left * xScale, pos.top * yScale,
            pos.width * xScale, pos.height * yScale,
            0, 0,
            pos.width * xScale, pos.height * yScale
          );
          const result = canvas.toDataURL();
          resolve(result);
        });
      });
    }));
  }

  /** Combines two buffers or Uint8Array's */
  function concatBuffers(buffer1, buffer2) {
    const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
    tmp.set(new Uint8Array(buffer1), 0);
    tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
    return tmp.buffer;
  }

  /** Creates a multipart TypedArray, given {name: value} fields
      and a files array in the format of
      [{fieldName: "NAME", filename: "NAME.png", blob: fileBlob}, {...}, ...]

      Returns {body, "content-type"}
      */
  function createMultipart(fields, files) {
    const boundary = "---------------------------ScreenshotBoundary" + Date.now();
    let body = [];
    for (const name in fields) {
      body.push("--" + boundary);
      body.push(`Content-Disposition: form-data; name="${name}"`);
      body.push("");
      body.push(fields[name]);
    }
    body.push("");
    body = body.join("\r\n");
    const enc = new TextEncoder("utf-8");
    body = enc.encode(body).buffer;

    const blobToArrayPromises = files.map(f => {
      return blobConverters.blobToArray(f.blob);
    });

    return Promise.all(blobToArrayPromises).then(buffers => {
      for (let i = 0; i < buffers.length; i++) {
        let filePart = [];
        filePart.push("--" + boundary);
        filePart.push(`Content-Disposition: form-data; name="${files[i].fieldName}"; filename="${files[i].filename}"`);
        filePart.push(`Content-Type: ${files[i].blob.type}`);
        filePart.push("");
        filePart.push("");
        filePart = filePart.join("\r\n");
        filePart = concatBuffers(enc.encode(filePart).buffer, buffers[i]);
        body = concatBuffers(body, filePart);
        body = concatBuffers(body, enc.encode("\r\n").buffer);
      }

      let tail = `\r\n--${boundary}--`;
      tail = enc.encode(tail);
      body = concatBuffers(body, tail.buffer);
      return {
        "content-type": `multipart/form-data; boundary=${boundary}`,
        body
      };
    });
  }

  function uploadShot(shot, blob, thumbnail) {
    let headers;
    return auth.authHeaders().then((_headers) => {
      headers = _headers;
      if (blob) {
        const files = [ {fieldName: "blob", filename: "screenshot.png", blob} ];
        if (thumbnail) {
          files.push({fieldName: "thumbnail", filename: "thumbnail.png", blob: thumbnail});
        }
        return createMultipart(
          {shot: JSON.stringify(shot.asJson())},
          files
        );
      }
      return {
        "content-type": "application/json",
        body: JSON.stringify(shot.asJson())
      };

    }).then((submission) => {
      headers["content-type"] = submission["content-type"];
      sendEvent("upload", "started", {eventValue: Math.floor(submission.body.length / 1000)});
      return fetch(shot.jsonUrl, {
        method: "PUT",
        mode: "cors",
        headers,
        body: submission.body
      });
    }).then((resp) => {
      if (!resp.ok) {
        sendEvent("upload-failed", `status-${resp.status}`);
        const exc = new Error(`Response failed with status ${resp.status}`);
        exc.popupMessage = "REQUEST_ERROR";
        throw exc;
      } else {
        sendEvent("upload", "success");
      }
    }, (error) => {
      // FIXME: I'm not sure what exceptions we can expect
      sendEvent("upload-failed", "connection");
      error.popupMessage = "CONNECTION_ERROR";
      throw error;
    });
  }

  return exports;
})();
PK
!<���webextension/blank.html<html></html>
PK
!<{ڌ��webextension/blobConverters.jsthis.blobConverters = (function() {
  const exports = {};

  exports.dataUrlToBlob = function(url) {
    const binary = atob(url.split(",", 2)[1]);
    let contentType = exports.getTypeFromDataUrl(url);
    if (contentType !== "image/png" && contentType !== "image/jpeg") {
      contentType = "image/png";
    }
    const data = Uint8Array.from(binary, char => char.charCodeAt(0));
    const blob = new Blob([data], {type: contentType});
    return blob;
  };

  exports.getTypeFromDataUrl = function(url) {
    let contentType = url.split(",", 1)[0];
    contentType = contentType.split(";", 1)[0];
    contentType = contentType.split(":", 2)[1];
    return contentType;
  };

  exports.blobToArray = function(blob) {
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.addEventListener("loadend", function() {
        resolve(reader.result);
      });
      reader.readAsArrayBuffer(blob);
    });
  };

  exports.blobToDataUrl = function(blob) {
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.addEventListener("loadend", function() {
        resolve(reader.result);
      });
      reader.readAsDataURL(blob);
    });
  };

  return exports;
})();
null;
PK
!<5�̂�#webextension/build/buildSettings.jswindow.buildSettings = {
  defaultSentryDsn: "https://904ccdd4866247c092ae8fc1a4764a63:[email protected]/224",
  logLevel: "" || "warn",
  captureText: ("" === "true"),
  uploadBinary: ("" === "true"),
  pngToJpegCutoff: parseInt("" || 2500000, 10),
  maxImageHeight: parseInt("" || 10000, 10),
  maxImageWidth: parseInt("" || 10000, 10)
};
null;

PK
!<J��7b7b(webextension/build/inlineSelectionCss.js/* Created from build/server/static/css/inline-selection.css */
window.inlineSelectionCss = `
.button, .highlight-button-cancel, .highlight-button-save, .highlight-button-download, .highlight-button-copy, .preview-button-save {
  display: flex;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: 3px;
  cursor: pointer;
  font-size: 16px;
  font-weight: 400;
  height: 40px;
  min-width: 40px;
  outline: none;
  padding: 0 10px;
  position: relative;
  text-align: center;
  text-decoration: none;
  transition: background 150ms cubic-bezier(0.07, 0.95, 0, 1), border 150ms cubic-bezier(0.07, 0.95, 0, 1);
  user-select: none;
  white-space: nowrap; }
  .button.small, .small.highlight-button-cancel, .small.highlight-button-save, .small.highlight-button-download, .small.highlight-button-copy, .small.preview-button-save {
    height: 32px;
    line-height: 32px;
    padding: 0 8px; }
  .button.tiny, .tiny.highlight-button-cancel, .tiny.highlight-button-save, .tiny.highlight-button-download, .tiny.highlight-button-copy, .tiny.preview-button-save {
    font-size: 14px;
    height: 26px;
    border: 1px solid #c7c7c7; }
    .button.tiny:hover, .tiny.highlight-button-cancel:hover, .tiny.highlight-button-save:hover, .tiny.highlight-button-download:hover, .tiny.highlight-button-copy:hover, .tiny.preview-button-save:hover, .button.tiny:focus, .tiny.highlight-button-cancel:focus, .tiny.highlight-button-save:focus, .tiny.highlight-button-download:focus, .tiny.highlight-button-copy:focus, .tiny.preview-button-save:focus {
      background: #ededf0;
      border-color: #989898; }
    .button.tiny:active, .tiny.highlight-button-cancel:active, .tiny.highlight-button-save:active, .tiny.highlight-button-download:active, .tiny.highlight-button-copy:active, .tiny.preview-button-save:active {
      background: #dedede;
      border-color: #989898; }
  .button.block-button, .block-button.highlight-button-cancel, .block-button.highlight-button-save, .block-button.highlight-button-download, .block-button.highlight-button-copy, .block-button.preview-button-save {
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    border: 0;
    border-right: 1px solid #c7c7c7;
    box-shadow: 0;
    border-radius: 0;
    flex-shrink: 0;
    font-size: 20px;
    height: 100px;
    line-height: 100%;
    overflow: hidden; }
    @media (max-width: 719px) {
      .button.block-button, .block-button.highlight-button-cancel, .block-button.highlight-button-save, .block-button.highlight-button-download, .block-button.highlight-button-copy, .block-button.preview-button-save {
        justify-content: flex-start;
        font-size: 16px;
        height: 72px;
        margin-right: 10px;
        padding: 0 5px; } }
    .button.block-button:hover, .block-button.highlight-button-cancel:hover, .block-button.highlight-button-save:hover, .block-button.highlight-button-download:hover, .block-button.highlight-button-copy:hover, .block-button.preview-button-save:hover {
      background: #ededf0; }
    .button.block-button:active, .block-button.highlight-button-cancel:active, .block-button.highlight-button-save:active, .block-button.highlight-button-download:active, .block-button.highlight-button-copy:active, .block-button.preview-button-save:active {
      background: #dedede; }
  .button.download, .download.highlight-button-cancel, .download.highlight-button-save, .download.highlight-button-download, .download.highlight-button-copy, .download.preview-button-save, .button.edit, .edit.highlight-button-cancel, .edit.highlight-button-save, .edit.highlight-button-download, .edit.highlight-button-copy, .edit.preview-button-save, .button.trash, .trash.highlight-button-cancel, .trash.highlight-button-save, .trash.highlight-button-download, .trash.highlight-button-copy, .trash.preview-button-save, .button.share, .share.highlight-button-cancel, .share.highlight-button-save, .share.highlight-button-download, .share.highlight-button-copy, .share.preview-button-save, .button.flag, .flag.highlight-button-cancel, .flag.highlight-button-save, .flag.highlight-button-download, .flag.highlight-button-copy, .flag.preview-button-save {
    background-repeat: no-repeat;
    background-size: 50%;
    background-position: center;
    margin-right: 10px;
    transition: background-color 150ms cubic-bezier(0.07, 0.95, 0, 1); }
  .button.download, .download.highlight-button-cancel, .download.highlight-button-save, .download.highlight-button-download, .download.highlight-button-copy, .download.preview-button-save {
    background-image: url("../img/icon-download.svg"); }
    .button.download:hover, .download.highlight-button-cancel:hover, .download.highlight-button-save:hover, .download.highlight-button-download:hover, .download.highlight-button-copy:hover, .download.preview-button-save:hover {
      background-color: #ededf0; }
    .button.download:active, .download.highlight-button-cancel:active, .download.highlight-button-save:active, .download.highlight-button-download:active, .download.highlight-button-copy:active, .download.preview-button-save:active {
      background-color: #dedede; }
  .button.share, .share.highlight-button-cancel, .share.highlight-button-save, .share.highlight-button-download, .share.highlight-button-copy, .share.preview-button-save {
    background-image: url("../img/icon-share.svg"); }
    .button.share:hover, .share.highlight-button-cancel:hover, .share.highlight-button-save:hover, .share.highlight-button-download:hover, .share.highlight-button-copy:hover, .share.preview-button-save:hover {
      background-color: #ededf0; }
    .button.share.active, .share.active.highlight-button-cancel, .share.active.highlight-button-save, .share.active.highlight-button-download, .share.active.highlight-button-copy, .share.active.preview-button-save, .button.share:active, .share.highlight-button-cancel:active, .share.highlight-button-save:active, .share.highlight-button-download:active, .share.highlight-button-copy:active, .share.preview-button-save:active {
      background-color: #dedede; }
  .button.share.newicon, .share.newicon.highlight-button-cancel, .share.newicon.highlight-button-save, .share.newicon.highlight-button-download, .share.newicon.highlight-button-copy, .share.newicon.preview-button-save {
    background-image: url("../img/icon-share-alternate.svg"); }
  .button.trash, .trash.highlight-button-cancel, .trash.highlight-button-save, .trash.highlight-button-download, .trash.highlight-button-copy, .trash.preview-button-save {
    background-image: url("../img/icon-trash.svg"); }
    .button.trash:hover, .trash.highlight-button-cancel:hover, .trash.highlight-button-save:hover, .trash.highlight-button-download:hover, .trash.highlight-button-copy:hover, .trash.preview-button-save:hover {
      background-color: #ededf0; }
    .button.trash:active, .trash.highlight-button-cancel:active, .trash.highlight-button-save:active, .trash.highlight-button-download:active, .trash.highlight-button-copy:active, .trash.preview-button-save:active {
      background-color: #dedede; }
  .button.edit, .edit.highlight-button-cancel, .edit.highlight-button-save, .edit.highlight-button-download, .edit.highlight-button-copy, .edit.preview-button-save {
    background-image: url("../img/icon-edit.svg"); }
    .button.edit:hover, .edit.highlight-button-cancel:hover, .edit.highlight-button-save:hover, .edit.highlight-button-download:hover, .edit.highlight-button-copy:hover, .edit.preview-button-save:hover {
      background-color: #ededf0; }
    .button.edit:active, .edit.highlight-button-cancel:active, .edit.highlight-button-save:active, .edit.highlight-button-download:active, .edit.highlight-button-copy:active, .edit.preview-button-save:active {
      background-color: #dedede; }
  .button.flag, .flag.highlight-button-cancel, .flag.highlight-button-save, .flag.highlight-button-download, .flag.highlight-button-copy, .flag.preview-button-save {
    background-image: url("../img/icon-flag.svg"); }
    .button.flag:hover, .flag.highlight-button-cancel:hover, .flag.highlight-button-save:hover, .flag.highlight-button-download:hover, .flag.highlight-button-copy:hover, .flag.preview-button-save:hover {
      background-color: #ededf0; }
    .button.flag:active, .flag.highlight-button-cancel:active, .flag.highlight-button-save:active, .flag.highlight-button-download:active, .flag.highlight-button-copy:active, .flag.preview-button-save:active {
      background-color: #dedede; }

.inverse-color-scheme {
  background: #38383d;
  color: #f9f9fa; }
  .inverse-color-scheme a {
    color: #e1e1e6; }

.default-color-scheme {
  background: #f9f9fa;
  color: #38383d; }
  .default-color-scheme a {
    color: #009ec0; }

.highlight-color-scheme {
  background: #009ec0;
  color: #fff; }
  .highlight-color-scheme a {
    color: #fff;
    text-decoration: underline; }

.alt-color-scheme {
  background: #38383d;
  color: #f9f9fa; }
  .alt-color-scheme h1 {
    color: #6f7fb6; }
  .alt-color-scheme a {
    color: #e1e1e6;
    text-decoration: underline; }

.button.primary, .primary.highlight-button-cancel, .highlight-button-save, .primary.highlight-button-download, .primary.highlight-button-copy, .preview-button-save {
  background-color: #009ec0;
  color: #fff; }
  .button.primary:hover, .primary.highlight-button-cancel:hover, .highlight-button-save:hover, .primary.highlight-button-download:hover, .primary.highlight-button-copy:hover, .preview-button-save:hover, .button.primary:focus, .primary.highlight-button-cancel:focus, .highlight-button-save:focus, .primary.highlight-button-download:focus, .primary.highlight-button-copy:focus, .preview-button-save:focus {
    background-color: #00819c; }
  .button.primary:active, .primary.highlight-button-cancel:active, .highlight-button-save:active, .primary.highlight-button-download:active, .primary.highlight-button-copy:active, .preview-button-save:active {
    background-color: #006c83; }

.button.secondary, .highlight-button-cancel, .secondary.highlight-button-save, .highlight-button-download, .highlight-button-copy, .secondary.preview-button-save {
  background-color: #f9f9fa;
  color: #38383d; }
  .button.secondary:hover, .highlight-button-cancel:hover, .secondary.highlight-button-save:hover, .highlight-button-download:hover, .highlight-button-copy:hover, .secondary.preview-button-save:hover {
    background-color: #ededf0; }
  .button.secondary:active, .highlight-button-cancel:active, .secondary.highlight-button-save:active, .highlight-button-download:active, .highlight-button-copy:active, .secondary.preview-button-save:active {
    background-color: #dedede; }

.button.transparent, .transparent.highlight-button-cancel, .transparent.highlight-button-save, .transparent.highlight-button-download, .transparent.highlight-button-copy, .transparent.preview-button-save {
  background-color: transparent;
  color: #38383d; }
  .button.transparent:hover, .transparent.highlight-button-cancel:hover, .transparent.highlight-button-save:hover, .transparent.highlight-button-download:hover, .transparent.highlight-button-copy:hover, .transparent.preview-button-save:hover {
    background-color: #ededf0; }
  .button.transparent:focus, .transparent.highlight-button-cancel:focus, .transparent.highlight-button-save:focus, .transparent.highlight-button-download:focus, .transparent.highlight-button-copy:focus, .transparent.preview-button-save:focus, .button.transparent:active, .transparent.highlight-button-cancel:active, .transparent.highlight-button-save:active, .transparent.highlight-button-download:active, .transparent.highlight-button-copy:active, .transparent.preview-button-save:active {
    background-color: #dedede; }

.button.warning, .warning.highlight-button-cancel, .warning.highlight-button-save, .warning.highlight-button-download, .warning.highlight-button-copy, .warning.preview-button-save {
  color: #fff;
  background: #d92215; }
  .button.warning:hover, .warning.highlight-button-cancel:hover, .warning.highlight-button-save:hover, .warning.highlight-button-download:hover, .warning.highlight-button-copy:hover, .warning.preview-button-save:hover, .button.warning:focus, .warning.highlight-button-cancel:focus, .warning.highlight-button-save:focus, .warning.highlight-button-download:focus, .warning.highlight-button-copy:focus, .warning.preview-button-save:focus {
    background: #b81d12; }
  .button.warning:active, .warning.highlight-button-cancel:active, .warning.highlight-button-save:active, .warning.highlight-button-download:active, .warning.highlight-button-copy:active, .warning.preview-button-save:active {
    background: #a11910; }

.subtitle-link {
  color: #009ec0; }

.loader {
  background: #2e2d30;
  border-radius: 2px;
  height: 4px;
  overflow: hidden;
  position: relative;
  width: 200px; }
  #shot-index .loader {
    background-color: #dedede; }

.loader-inner {
  animation: bounce infinite alternate 1250ms cubic-bezier(0.7, 0, 0.3, 1);
  background: #04d1e6;
  border-radius: 2px;
  height: 4px;
  transform: translateX(-40px);
  width: 50px; }

@keyframes bounce {
  0% {
    transform: translateX(-40px); }
  100% {
    transform: translate(190px); } }

@keyframes fade-in {
  0% {
    opacity: 0; }
  100% {
    opacity: 1; } }

@keyframes pop {
  0% {
    transform: scale(1); }
  97% {
    transform: scale(1.04); }
  100% {
    transform: scale(1); } }

@keyframes pulse {
  0% {
    opacity: 0.3;
    transform: scale(1); }
  70% {
    opacity: 0.25;
    transform: scale(1.04); }
  100% {
    opacity: 0.3;
    transform: scale(1); } }

@keyframes slide-left {
  0% {
    opacity: 0;
    transform: translate3d(160px, 0, 0); }
  100% {
    opacity: 1;
    transform: translate3d(0, 0, 0); } }

@keyframes bounce-in {
  0% {
    opacity: 0;
    transform: scale(1); }
  60% {
    opacity: 1;
    transform: scale(1.02); }
  100% {
    transform: scale(1); } }

.mover-target {
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: auto;
  position: absolute;
  z-index: 5; }

.highlight,
.mover-target {
  background-color: transparent;
  background-image: none; }

.mover-target,
.bghighlight {
  border: 0; }

.hover-highlight {
  animation: fade-in 125ms forwards cubic-bezier(0.07, 0.95, 0, 1);
  background: rgba(255, 255, 255, 0.2);
  border-radius: 1px;
  pointer-events: none;
  position: absolute;
  z-index: 10000000000; }
  .hover-highlight::before {
    border: 2px dashed rgba(255, 255, 255, 0.4);
    bottom: 0;
    content: "";
    left: 0;
    position: absolute;
    right: 0;
    top: 0; }
  body.hcm .hover-highlight {
    background-color: white;
    opacity: 0.2; }

.mover-target.direction-topLeft {
  cursor: nwse-resize;
  height: 60px;
  left: -30px;
  top: -30px;
  width: 60px; }

.mover-target.direction-top {
  cursor: ns-resize;
  height: 60px;
  left: 0;
  top: -30px;
  width: 100%;
  z-index: 4; }

.mover-target.direction-topRight {
  cursor: nesw-resize;
  height: 60px;
  right: -30px;
  top: -30px;
  width: 60px; }

.mover-target.direction-left {
  cursor: ew-resize;
  height: 100%;
  left: -30px;
  top: 0;
  width: 60px;
  z-index: 4; }

.mover-target.direction-right {
  cursor: ew-resize;
  height: 100%;
  right: -30px;
  top: 0;
  width: 60px;
  z-index: 4; }

.mover-target.direction-bottomLeft {
  bottom: -30px;
  cursor: nesw-resize;
  height: 60px;
  left: -30px;
  width: 60px; }

.mover-target.direction-bottom {
  bottom: -30px;
  cursor: ns-resize;
  height: 60px;
  left: 0;
  width: 100%;
  z-index: 4; }

.mover-target.direction-bottomRight {
  bottom: -30px;
  cursor: nwse-resize;
  height: 60px;
  right: -30px;
  width: 60px; }

.mover-target:hover .mover {
  transform: scale(1.05); }

.mover {
  background-color: #fff;
  border-radius: 50%;
  box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);
  height: 16px;
  opacity: 1;
  position: relative;
  transition: transform 125ms cubic-bezier(0.07, 0.95, 0, 1);
  width: 16px; }
  .small-selection .mover {
    height: 10px;
    width: 10px; }

.direction-topLeft .mover,
.direction-left .mover,
.direction-bottomLeft .mover {
  left: -1px; }

.direction-topLeft .mover,
.direction-top .mover,
.direction-topRight .mover {
  top: -1px; }

.direction-topRight .mover,
.direction-right .mover,
.direction-bottomRight .mover {
  right: -1px; }

.direction-bottomRight .mover,
.direction-bottom .mover,
.direction-bottomLeft .mover {
  bottom: -1px; }

.bghighlight {
  background-color: rgba(0, 0, 0, 0.7);
  position: absolute;
  z-index: 9999999999; }
  body.hcm .bghighlight {
    background-color: black;
    opacity: 0.7; }

.notice {
  display: flex;
  height: 41px;
  left: 50%;
  position: fixed;
  transform: translate(-50%, 0);
  transition: top 125ms ease-out, translate 125ms ease-out;
  user-select: none;
  will-change: top, translate;
  z-index: 10000000000; }
  .notice .notice-wrapper {
    align-items: center;
    background: #737373;
    border-radius: 100px;
    display: flex;
    flex-wrap: nowrap;
    justify-content: space-between;
    padding: 10px 15px; }
  .notice .notice-content {
    color: #fff;
    flex: 1;
    font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
    font-size: 14px;
    font-weight: bold;
    white-space: nowrap; }
  .notice .notice-help {
    background-image: url("MOZ_EXTENSION/icons/help-16.svg");
    background-position: center center;
    background-repeat: no-repeat;
    height: 16px;
    width: 16px; }

.notice-tooltip {
  background: #fff;
  border-radius: 3px;
  border: 1px solid #9d9d9e;
  bottom: 60px;
  color: #000;
  cursor: default;
  display: none;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
  font-size: 14px;
  font-weight: normal;
  line-height: 22px;
  overflow-wrap: break-word;
  padding: 15px;
  position: absolute;
  right: -14px;
  white-space: normal;
  width: 300px;
  z-index: 10000000000;
  /* down-arrow for the tooltip */ }
  .notice:hover .notice-tooltip {
    display: block; }
  .notice-tooltip p {
    margin: 0; }
  .notice-tooltip ul {
    margin-bottom: 0; }
  .notice-tooltip::after {
    border-left: 10px solid transparent;
    border-right: 10px solid transparent;
    border-top: 10px solid #f9f9fa;
    content: "";
    height: 0;
    left: 86%;
    position: absolute;
    top: 100%;
    width: 0; }

.preview-overlay {
  align-items: center;
  background-color: rgba(0, 0, 0, 0.7);
  display: flex;
  height: 100%;
  justify-content: center;
  left: 0;
  margin: 0;
  padding: 0;
  position: fixed;
  top: 0;
  width: 100%;
  z-index: 9999999999; }
  body.hcm .preview-overlay {
    background-color: black;
    opacity: 0.7; }

.highlight {
  border-radius: 2px;
  border: 2px dashed rgba(255, 255, 255, 0.8);
  box-sizing: border-box;
  cursor: move;
  position: absolute;
  z-index: 9999999999; }
  body.hcm .highlight {
    border: 2px dashed white;
    opacity: 1.0; }

.highlight-buttons {
  display: flex;
  align-items: center;
  justify-content: center;
  bottom: -55px;
  position: absolute;
  z-index: 6; }
  html[dir="rtl"] .highlight-buttons {
    left: 5px; }
  html[dir="ltr"] .highlight-buttons {
    right: 5px; }
  .bottom-selection .highlight-buttons {
    bottom: 5px; }
  .left-selection .highlight-buttons {
    right: auto;
    left: 5px; }

.highlight-button-cancel {
  border: 1px solid #dedede;
  margin: 5px;
  width: 40px; }

.highlight-button-save {
  font-size: 18px;
  margin: 5px;
  min-width: 80px; }
  html[dir="ltr"] .highlight-button-save img {
    padding-right: 8px; }
  html[dir="rtl"] .highlight-button-save img {
    padding-left: 8px; }

.highlight-button-download {
  border: 1px solid #dedede;
  display: block;
  margin: 5px;
  width: 40px; }
  .highlight-button-download.download-only-button {
    font-size: 18px;
    width: auto; }
    .highlight-button-download.download-only-button img {
      height: 16px;
      width: 16px; }
      html[dir="ltr"] .highlight-button-download.download-only-button img {
        padding-right: 8px; }
      html[dir="rtl"] .highlight-button-download.download-only-button img {
        padding-left: 8px; }

.highlight-button-copy {
  border: 1px solid #dedede;
  display: block;
  margin: 5px;
  width: 40px; }

.pixel-dimensions {
  position: absolute;
  pointer-events: none;
  font-weight: bold;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
  font-size: 70%;
  color: #000;
  text-shadow: -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff; }

.preview-buttons {
  display: flex;
  align-items: center;
  justify-content: center;
  position: absolute;
  top: -2px; }
  html[dir="rtl"] .preview-buttons {
    left: 0; }
  html[dir="ltr"] .preview-buttons {
    right: 0; }

.preview-image {
  position: relative;
  height: 80%;
  max-width: 100%;
  margin: auto 2em;
  text-align: center;
  animation-delay: 50ms;
  animation: bounce-in 300ms forwards ease-in-out; }

.preview-image > img {
  display: block;
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 90%;
  margin: 50px auto;
  border: 1px solid rgba(255, 255, 255, 0.8); }

.preview-button-save {
  font-size: 18px;
  margin: 5px;
  min-width: 80px; }
  html[dir="ltr"] .preview-button-save img {
    padding-right: 8px; }
  html[dir="rtl"] .preview-button-save img {
    padding-left: 8px; }

.fixed-container {
  align-items: center;
  display: flex;
  flex-direction: column;
  height: 100vh;
  justify-content: center;
  left: 0;
  margin: 0;
  padding: 0;
  pointer-events: none;
  position: fixed;
  top: 0;
  width: 100%; }

.face-container {
  position: relative;
  width: 64px;
  height: 64px; }

.face {
  width: 62.4px;
  height: 62.4px;
  display: block;
  background-image: url("MOZ_EXTENSION/icons/icon-welcome-face-without-eyes.svg"); }

.eye {
  background-color: #fff;
  width: 10.8px;
  height: 14.6px;
  position: absolute;
  border-radius: 100%;
  overflow: hidden;
  left: 16.4px;
  top: 19.8px; }

.eyeball {
  position: absolute;
  width: 6px;
  height: 6px;
  background-color: #000;
  border-radius: 50%;
  left: 2.4px;
  top: 4.3px;
  z-index: 10; }

.left {
  margin-left: 0; }

.right {
  margin-left: 20px; }

.preview-instructions {
  display: flex;
  align-items: center;
  justify-content: center;
  animation: pulse 125mm cubic-bezier(0.07, 0.95, 0, 1);
  color: #fff;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
  font-size: 24px;
  line-height: 32px;
  text-align: center;
  padding-top: 20px;
  width: 400px;
  user-select: none; }

.cancel-shot {
  background-color: transparent;
  cursor: pointer;
  outline: none;
  border-radius: 3px;
  border: 1px #9b9b9b solid;
  color: #fff;
  cursor: pointer;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
  font-size: 16px;
  margin-top: 40px;
  padding: 10px 25px;
  pointer-events: all; }

.myshots-all-buttons-container {
  display: flex;
  flex-direction: row-reverse;
  background: #f5f5f5;
  border-radius: 2px;
  box-sizing: border-box;
  height: 80px;
  padding: 8px;
  position: absolute;
  right: 5px;
  top: 5px; }
  html[dir="rtl"] .myshots-all-buttons-container {
    left: 5px;
    right: inherit; }
  .myshots-all-buttons-container .spacer {
    background-color: #c9c9c9;
    flex: 0 0 1px;
    height: 80px;
    margin: 0 10px;
    position: relative;
    top: -8px; }
  .myshots-all-buttons-container button {
    display: flex;
    align-items: center;
    flex-direction: column;
    justify-content: flex-end;
    background-color: #f5f5f5;
    background-position: center top;
    background-repeat: no-repeat;
    background-size: 46px 46px;
    border: 1px solid transparent;
    cursor: pointer;
    height: 100%;
    min-width: 90px;
    padding: 46px 5px 5px;
    pointer-events: all;
    transition: border 150ms cubic-bezier(0.07, 0.95, 0, 1), background-color 150ms cubic-bezier(0.07, 0.95, 0, 1);
    white-space: nowrap; }
    .myshots-all-buttons-container button:hover {
      background-color: #ebebeb;
      border: 1px solid #c7c7c7; }
    .myshots-all-buttons-container button:active {
      background-color: #dedede;
      border: 1px solid #989898; }
  .myshots-all-buttons-container .myshots-button {
    background-image: url("MOZ_EXTENSION/icons/menu-myshot.svg"); }
  .myshots-all-buttons-container .full-page {
    background-image: url("MOZ_EXTENSION/icons/menu-fullpage.svg"); }
  .myshots-all-buttons-container .visible {
    background-image: url("MOZ_EXTENSION/icons/menu-visible.svg"); }

.myshots-button-container {
  display: flex;
  align-items: center;
  justify-content: center; }

@keyframes pulse {
  0% {
    transform: scale(1); }
  50% {
    transform: scale(1.06); }
  100% {
    transform: scale(1); } }

@keyframes fade-in {
  0% {
    opacity: 0; }
  100% {
    opacity: 1; } }

`;
null;

PK
!<�W���#webextension/build/onboardingCss.js/* Created from build/server/static/css/onboarding.css */
window.onboardingCss = `
.loader {
  background: #2e2d30;
  border-radius: 2px;
  height: 4px;
  overflow: hidden;
  position: relative;
  width: 200px; }
  #shot-index .loader {
    background-color: #dedede; }

.loader-inner {
  animation: bounce infinite alternate 1250ms cubic-bezier(0.7, 0, 0.3, 1);
  background: #04d1e6;
  border-radius: 2px;
  height: 4px;
  transform: translateX(-40px);
  width: 50px; }

@keyframes bounce {
  0% {
    transform: translateX(-40px); }
  100% {
    transform: translate(190px); } }

@keyframes fade-in {
  0% {
    opacity: 0; }
  100% {
    opacity: 1; } }

@keyframes pop {
  0% {
    transform: scale(1); }
  97% {
    transform: scale(1.04); }
  100% {
    transform: scale(1); } }

@keyframes pulse {
  0% {
    opacity: 0.3;
    transform: scale(1); }
  70% {
    opacity: 0.25;
    transform: scale(1.04); }
  100% {
    opacity: 0.3;
    transform: scale(1); } }

@keyframes slide-left {
  0% {
    opacity: 0;
    transform: translate3d(160px, 0, 0); }
  100% {
    opacity: 1;
    transform: translate3d(0, 0, 0); } }

@keyframes bounce-in {
  0% {
    opacity: 0;
    transform: scale(1); }
  60% {
    opacity: 1;
    transform: scale(1.02); }
  100% {
    transform: scale(1); } }

html,
body {
  box-sizing: border-box;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
  height: 100%;
  margin: 0;
  width: 100%; }

#slide-overlay {
  display: flex;
  align-items: center;
  flex-direction: column;
  justify-content: center;
  animation: fade-in 250ms forwards cubic-bezier(0.07, 0.95, 0, 1);
  background: rgba(0, 0, 0, 0.8);
  height: 100%;
  opacity: 0;
  width: 100%; }

#slide-container {
  animation-delay: 50ms;
  animation: fade-in 250ms forwards cubic-bezier(0.07, 0.95, 0, 1);
  opacity: 0; }

.slide {
  display: flex;
  align-items: center;
  flex-direction: column;
  justify-content: center;
  background-color: #f9f9fa;
  border-radius: 5px;
  height: 520px;
  overflow: hidden;
  width: 700px; }
  .slide .slide-image {
    background-size: 700px 378px;
    flex: 0 0 360px;
    font-size: 16px;
    width: 100%; }
  .slide .slide-content {
    display: flex;
    align-items: center;
    flex-direction: column;
    justify-content: center;
    box-sizing: border-box;
    flex: 0 0 160px;
    padding: 5px;
    text-align: center; }
  .slide h1 {
    font-size: 30px;
    font-weight: 400;
    margin: 0 0 10px; }
    .slide h1 sup {
      background: #00d1e6;
      border-radius: 2px;
      color: #fff;
      font-size: 16px;
      margin-left: 5px;
      padding: 2px; }
  .slide p {
    animation-duration: 350ms;
    font-size: 16px;
    line-height: 23px;
    margin: 0;
    width: 75%; }
  .slide .slide-content-aligner h1 {
    font-size: 34px; }
  .slide .slide-content-aligner p {
    margin: 0 auto; }
  .slide .onboarding-legal-notice {
    font-size: 12px;
    color: #858585; }
    .slide .onboarding-legal-notice a {
      color: #009ec0;
      text-decoration: none; }
  .slide:not(.slide-1) h1 {
    opacity: 0;
    transform: translate3d(160px, 0, 0);
    animation: slide-left 500ms forwards cubic-bezier(0.07, 0.95, 0, 1); }
  .slide:not(.slide-1) p {
    opacity: 0;
    transform: translate3d(160px, 0, 0);
    animation: slide-left 600ms forwards cubic-bezier(0.07, 0.95, 0, 1); }
  .slide:not(.slide-1) .slide-image {
    background-color: #00d1e6; }
  .slide.slide-1 {
    background: #fff; }
    .slide.slide-1 .slide-content {
      justify-content: space-between;
      width: 100%; }

.slide-1,
.slide-2,
.slide-3,
.slide-4,
.slide-5 {
  display: none; }

.active-slide-1 .slide-1,
.active-slide-2 .slide-2,
.active-slide-3 .slide-3,
.active-slide-4 .slide-4,
.active-slide-5 .slide-5 {
  display: flex; }

#slide-status-container {
  display: flex;
  align-items: center;
  justify-content: center;
  padding-top: 15px; }

.goto-slide {
  background: transparent;
  background-color: #f9f9fa;
  border-radius: 50%;
  border: 0;
  flex: 0 0 9px;
  height: 9px;
  margin: 0 4px;
  opacity: 0.7;
  padding: 0;
  transition: height 100ms cubic-bezier(0.07, 0.95, 0, 1), opacity 100ms cubic-bezier(0.07, 0.95, 0, 1); }

.goto-slide:hover {
  opacity: 1; }

.active-slide-1 .goto-slide-1,
.active-slide-2 .goto-slide-2,
.active-slide-3 .goto-slide-3,
.active-slide-4 .goto-slide-4,
.active-slide-5 .goto-slide-5 {
  opacity: 1;
  transform: scale(1.1); }

#prev, #next,
#done {
  background-color: #f0f0f0;
  border-radius: 50%;
  border: 0;
  box-shadow: 0 0 12px rgba(0, 0, 0, 0.2);
  display: inline-block;
  height: 70px;
  margin-top: -70px;
  position: absolute;
  text-align: center;
  top: 50%;
  transition: background-color 150ms cubic-bezier(0.07, 0.95, 0, 1), background-size 250ms cubic-bezier(0.07, 0.95, 0, 1);
  width: 70px; }

#prev {
  background-image: url("MOZ_EXTENSION/icons/back.svg");
  left: 50%; }
  html[dir="ltr"] #prev {
    margin-left: -385px; }
  html[dir="rtl"] #prev {
    margin-left: 315px; }

#next,
#done {
  left: 50%; }
  html[dir="ltr"] #next, html[dir="ltr"]
  #done {
    margin-left: 315px; }
  html[dir="rtl"] #next, html[dir="rtl"]
  #done {
    margin-left: -385px; }

#prev,
#next,
#done {
  background-position: center center;
  background-repeat: no-repeat;
  background-size: 20px 20px; }
  #prev:hover,
  #next:hover,
  #done:hover {
    background-color: #fff;
    background-size: 22px 22px; }
  #prev:active,
  #next:active,
  #done:active {
    background-color: #fff;
    background-size: 24px 24px; }

#next {
  background-image: url("MOZ_EXTENSION/icons/back.svg");
  transform: rotate(180deg); }
  .active-slide-1 #next {
    background-image: url("MOZ_EXTENSION/icons/back-highlight.svg"); }

[dir='rtl'] #next {
  transform: rotate(0deg); }

[dir='rtl'] #prev {
  transform: rotate(180deg); }

#skip {
  background: none;
  border: 0;
  color: #fff;
  font-size: 16px;
  left: 50%;
  margin-left: -330px;
  margin-top: 257px;
  opacity: 0.7;
  position: absolute;
  top: 50%;
  transition: opacity 100ms cubic-bezier(0.07, 0.95, 0, 1);
  z-index: 10; }

#skip:hover {
  opacity: 1; }

.active-slide-1 #prev,
.active-slide-5 #next {
  display: none; }

#done {
  background-image: url("MOZ_EXTENSION/icons/done.svg");
  display: none; }

.active-slide-5 #done {
  display: inline-block; }

/* for smaller screen sizes */
@media screen and (max-width: 768px) {
  .slide {
    height: 360px;
    width: 450px; }
    .slide .slide-image {
      background-size: contain;
      background-repeat: no-repeat;
      background-position: center;
      flex: 0 0 200px; }
    .slide .slide-content {
      flex: 0 0 160px; }
      .slide .slide-content h1 {
        font-size: 24px; }
      .slide .slide-content p {
        font-size: 14px;
        line-height: 21px;
        width: 85%; }
      .slide .slide-content .onboarding-legal-notice {
        font-size: 10px;
        line-height: 16px; }
  #skip {
    margin-left: -205px;
    margin-top: 177px; }
  #prev {
    margin-left: -260px; }
  #next,
  #done {
    margin-left: 190px; } }

`;
null;

PK
!<����
�
$webextension/build/onboardingHtml.js/* Created from addon/webextension/onboarding/slides.html */
window.onboardingHtml = `
<!DOCTYPE html>
<html>
  <head>
    <!-- onboarding.scss is automatically inserted here: -->
    <style></style>
    <!-- Here and in onboarding.scss use MOZ_EXTENSION/path to refer to local files -->
  </head>
  <body>
    <div id="slide-overlay">
      <!-- The current slide is set by having .active-slide-1, .active-slide-2, etc on #slide element: -->
      <div id="slide-container" data-number-of-slides="5" class="active-slide-1">
        <div class="slide slide-1">
          <!-- Note: all images must be listed in manifest.json.template under web_accessible_resources -->
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-1.png');"></div>
          <div class="slide-content">
            <div class="slide-content-aligner">
              <h1><span><strong>Firefox</strong> Screenshots</span><sup>Beta</sup></h1>
              <p data-l10n-id="tourBodyIntro"></p>
            </div>
            <p class="onboarding-legal-notice"><!-- Substituted with termsAndPrivacyNotice --></p>
          </div>
        </div>
        <div class="slide slide-2">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-2.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderPageAction"></h1>
            <p data-l10n-id="tourBodyPageAction"></p>
          </div>
        </div>
        <div class="slide slide-3">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-3.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderClickAndDrag"></h1>
            <p data-l10n-id="tourBodyClickAndDrag"></p>
          </div>
        </div>
        <div class="slide slide-4">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-4.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderFullPage"></h1>
            <p data-l10n-id="tourBodyFullPage"></p>
          </div>
        </div>
        <div class="slide slide-5">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-5.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderDownloadUpload"></h1>
            <p data-l10n-id="tourBodyDownloadUpload"></p>
          </div>
        </div>

        <!-- Clickable elements should be buttons for accessibility -->
        <button id="skip" data-l10n-id="tourSkip" tabindex=1>Skip</button>
        <button id="prev" tabindex=2 data-l10n-label-id="tourPrevious"></button>
        <button id="next" tabindex=3 data-l10n-label-id="tourNext"></button>
        <button id="done" tabindex=4 data-l10n-label-id="tourDone"></button>
        <div id="slide-status-container">
          <button class="goto-slide goto-slide-1" data-number="1" tabindex=4></button>
          <button class="goto-slide goto-slide-2" data-number="2" tabindex=5></button>
          <button class="goto-slide goto-slide-3" data-number="3" tabindex=6></button>
          <button class="goto-slide goto-slide-4" data-number="4" tabindex=7></button>
          <button class="goto-slide goto-slide-5" data-number="5" tabindex=8></button>
        </div>
        <!-- FIXME: Need to put in privacy / etc links -->
      </div>
    </div>
  </body>
</html>

`;
null;

PK
!<l�S�S�webextension/build/raven.js/*! Raven.js 3.18.1 (2dca364) | github.com/getsentry/raven-js */

/*
 * Includes TraceKit
 * https://github.com/getsentry/TraceKit
 *
 * Copyright 2017 Matt Robenolt and other contributors
 * Released under the BSD license
 * https://github.com/getsentry/raven-js/blob/master/LICENSE
 *
 */

(function(f) {
  if (typeof exports === 'object' && typeof module !== 'undefined') {
    module.exports = f();
  } else if (typeof define === 'function' && define.amd) {
    define([], f);
  } else {
    var g;
    if (typeof window !== 'undefined') {
      g = window;
    } else if (typeof global !== 'undefined') {
      g = global;
    } else if (typeof self !== 'undefined') {
      g = self;
    } else {
      g = this;
    }
    g.Raven = f();
  }
})(function() {
  var define, module, exports;
  return (function e(t, n, r) {
    function s(o, u) {
      if (!n[o]) {
        if (!t[o]) {
          var a = typeof require == 'function' && require;
          if (!u && a) return a(o, !0);
          if (i) return i(o, !0);
          var f = new Error("Cannot find module '" + o + "'");
          throw ((f.code = 'MODULE_NOT_FOUND'), f);
        }
        var l = (n[o] = {exports: {}});
        t[o][0].call(
          l.exports,
          function(e) {
            var n = t[o][1][e];
            return s(n ? n : e);
          },
          l,
          l.exports,
          e,
          t,
          n,
          r
        );
      }
      return n[o].exports;
    }
    var i = typeof require == 'function' && require;
    for (var o = 0; o < r.length; o++) s(r[o]);
    return s;
  })(
    {
      1: [
        function(_dereq_, module, exports) {
          function RavenConfigError(message) {
            this.name = 'RavenConfigError';
            this.message = message;
          }
          RavenConfigError.prototype = new Error();
          RavenConfigError.prototype.constructor = RavenConfigError;

          module.exports = RavenConfigError;
        },
        {}
      ],
      2: [
        function(_dereq_, module, exports) {
          var wrapMethod = function(console, level, callback) {
            var originalConsoleLevel = console[level];
            var originalConsole = console;

            if (!(level in console)) {
              return;
            }

            var sentryLevel = level === 'warn' ? 'warning' : level;

            console[level] = function() {
              var args = [].slice.call(arguments);

              var msg = '' + args.join(' ');
              var data = {
                level: sentryLevel,
                logger: 'console',
                extra: {arguments: args}
              };

              if (level === 'assert') {
                if (args[0] === false) {
                  // Default browsers message
                  msg =
                    'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert');
                  data.extra.arguments = args.slice(1);
                  callback && callback(msg, data);
                }
              } else {
                callback && callback(msg, data);
              }

              // this fails for some browsers. :(
              if (originalConsoleLevel) {
                // IE9 doesn't allow calling apply on console functions directly
                // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193
                Function.prototype.apply.call(
                  originalConsoleLevel,
                  originalConsole,
                  args
                );
              }
            };
          };

          module.exports = {
            wrapMethod: wrapMethod
          };
        },
        {}
      ],
      3: [
        function(_dereq_, module, exports) {
          (function(global) {
            /*global XDomainRequest:false, __DEV__:false*/

            var TraceKit = _dereq_(6);
            var stringify = _dereq_(7);
            var RavenConfigError = _dereq_(1);
            var utils = _dereq_(5);

            var isError = utils.isError,
              isObject = utils.isObject;

            var wrapConsoleMethod = _dereq_(2).wrapMethod;

            var dsnKeys = 'source protocol user pass host port path'.split(' '),
              dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;

            function now() {
              return +new Date();
            }

            // This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
            var _window =
              typeof window !== 'undefined'
                ? window
                : typeof global !== 'undefined'
                  ? global
                  : typeof self !== 'undefined' ? self : {};
            var _document = _window.document;
            var _navigator = _window.navigator;

            function keepOriginalCallback(original, callback) {
              return isFunction(callback)
                ? function(data) {
                    return callback(data, original);
                  }
                : callback;
            }

            // First, check for JSON support
            // If there is no JSON, we no-op the core features of Raven
            // since JSON is required to encode the payload
            function Raven() {
              this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);
              // Raven can run in contexts where there's no document (react-native)
              this._hasDocument = !isUndefined(_document);
              this._hasNavigator = !isUndefined(_navigator);
              this._lastCapturedException = null;
              this._lastData = null;
              this._lastEventId = null;
              this._globalServer = null;
              this._globalKey = null;
              this._globalProject = null;
              this._globalContext = {};
              this._globalOptions = {
                logger: 'javascript',
                ignoreErrors: [],
                ignoreUrls: [],
                whitelistUrls: [],
                includePaths: [],
                collectWindowErrors: true,
                maxMessageLength: 0,

                // By default, truncates URL values to 250 chars
                maxUrlLength: 250,
                stackTraceLimit: 50,
                autoBreadcrumbs: true,
                instrument: true,
                sampleRate: 1
              };
              this._ignoreOnError = 0;
              this._isRavenInstalled = false;
              this._originalErrorStackTraceLimit = Error.stackTraceLimit;
              // capture references to window.console *and* all its methods first
              // before the console plugin has a chance to monkey patch
              this._originalConsole = _window.console || {};
              this._originalConsoleMethods = {};
              this._plugins = [];
              this._startTime = now();
              this._wrappedBuiltIns = [];
              this._breadcrumbs = [];
              this._lastCapturedEvent = null;
              this._keypressTimeout;
              this._location = _window.location;
              this._lastHref = this._location && this._location.href;
              this._resetBackoff();

              // eslint-disable-next-line guard-for-in
              for (var method in this._originalConsole) {
                this._originalConsoleMethods[method] = this._originalConsole[method];
              }
            }

            /*
 * The core Raven singleton
 *
 * @this {Raven}
 */

            Raven.prototype = {
              // Hardcode version string so that raven source can be loaded directly via
              // webpack (using a build step causes webpack #1617). Grunt verifies that
              // this value matches package.json during build.
              //   See: https://github.com/getsentry/raven-js/issues/465
              VERSION: '3.18.1',

              debug: false,

              TraceKit: TraceKit, // alias to TraceKit

              /*
     * Configure Raven with a DSN and extra options
     *
     * @param {string} dsn The public Sentry DSN
     * @param {object} options Set of global options [optional]
     * @return {Raven}
     */
              config: function(dsn, options) {
                var self = this;

                if (self._globalServer) {
                  this._logDebug('error', 'Error: Raven has already been configured');
                  return self;
                }
                if (!dsn) return self;

                var globalOptions = self._globalOptions;

                // merge in options
                if (options) {
                  each(options, function(key, value) {
                    // tags and extra are special and need to be put into context
                    if (key === 'tags' || key === 'extra' || key === 'user') {
                      self._globalContext[key] = value;
                    } else {
                      globalOptions[key] = value;
                    }
                  });
                }

                self.setDSN(dsn);

                // "Script error." is hard coded into browsers for errors that it can't read.
                // this is the result of a script being pulled in from an external domain and CORS.
                globalOptions.ignoreErrors.push(/^Script error\.?$/);
                globalOptions.ignoreErrors.push(
                  /^Javascript error: Script error\.? on line 0$/
                );

                // join regexp rules into one big rule
                globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);
                globalOptions.ignoreUrls = globalOptions.ignoreUrls.length
                  ? joinRegExp(globalOptions.ignoreUrls)
                  : false;
                globalOptions.whitelistUrls = globalOptions.whitelistUrls.length
                  ? joinRegExp(globalOptions.whitelistUrls)
                  : false;
                globalOptions.includePaths = joinRegExp(globalOptions.includePaths);
                globalOptions.maxBreadcrumbs = Math.max(
                  0,
                  Math.min(globalOptions.maxBreadcrumbs || 100, 100)
                ); // default and hard limit is 100

                var autoBreadcrumbDefaults = {
                  xhr: true,
                  console: true,
                  dom: true,
                  location: true
                };

                var autoBreadcrumbs = globalOptions.autoBreadcrumbs;
                if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {
                  autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);
                } else if (autoBreadcrumbs !== false) {
                  autoBreadcrumbs = autoBreadcrumbDefaults;
                }
                globalOptions.autoBreadcrumbs = autoBreadcrumbs;

                var instrumentDefaults = {
                  tryCatch: true
                };

                var instrument = globalOptions.instrument;
                if ({}.toString.call(instrument) === '[object Object]') {
                  instrument = objectMerge(instrumentDefaults, instrument);
                } else if (instrument !== false) {
                  instrument = instrumentDefaults;
                }
                globalOptions.instrument = instrument;

                TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;

                // return for chaining
                return self;
              },

              /*
     * Installs a global window.onerror error handler
     * to capture and report uncaught exceptions.
     * At this point, install() is required to be called due
     * to the way TraceKit is set up.
     *
     * @return {Raven}
     */
              install: function() {
                var self = this;
                if (self.isSetup() && !self._isRavenInstalled) {
                  TraceKit.report.subscribe(function() {
                    self._handleOnErrorStackInfo.apply(self, arguments);
                  });
                  if (
                    self._globalOptions.instrument &&
                    self._globalOptions.instrument.tryCatch
                  ) {
                    self._instrumentTryCatch();
                  }

                  if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();

                  // Install all of the plugins
                  self._drainPlugins();

                  self._isRavenInstalled = true;
                }

                Error.stackTraceLimit = self._globalOptions.stackTraceLimit;
                return this;
              },

              /*
     * Set the DSN (can be called multiple time unlike config)
     *
     * @param {string} dsn The public Sentry DSN
     */
              setDSN: function(dsn) {
                var self = this,
                  uri = self._parseDSN(dsn),
                  lastSlash = uri.path.lastIndexOf('/'),
                  path = uri.path.substr(1, lastSlash);

                self._dsn = dsn;
                self._globalKey = uri.user;
                self._globalSecret = uri.pass && uri.pass.substr(1);
                self._globalProject = uri.path.substr(lastSlash + 1);

                self._globalServer = self._getGlobalServer(uri);

                self._globalEndpoint =
                  self._globalServer +
                  '/' +
                  path +
                  'api/' +
                  self._globalProject +
                  '/store/';

                // Reset backoff state since we may be pointing at a
                // new project/server
                this._resetBackoff();
              },

              /*
     * Wrap code within a context so Raven can capture errors
     * reliably across domains that is executed immediately.
     *
     * @param {object} options A specific set of options for this context [optional]
     * @param {function} func The callback to be immediately executed within the context
     * @param {array} args An array of arguments to be called with the callback [optional]
     */
              context: function(options, func, args) {
                if (isFunction(options)) {
                  args = func || [];
                  func = options;
                  options = undefined;
                }

                return this.wrap(options, func).apply(this, args);
              },

              /*
     * Wrap code within a context and returns back a new function to be executed
     *
     * @param {object} options A specific set of options for this context [optional]
     * @param {function} func The function to be wrapped in a new context
     * @param {function} func A function to call before the try/catch wrapper [optional, private]
     * @return {function} The newly wrapped functions with a context
     */
              wrap: function(options, func, _before) {
                var self = this;
                // 1 argument has been passed, and it's not a function
                // so just return it
                if (isUndefined(func) && !isFunction(options)) {
                  return options;
                }

                // options is optional
                if (isFunction(options)) {
                  func = options;
                  options = undefined;
                }

                // At this point, we've passed along 2 arguments, and the second one
                // is not a function either, so we'll just return the second argument.
                if (!isFunction(func)) {
                  return func;
                }

                // We don't wanna wrap it twice!
                try {
                  if (func.__raven__) {
                    return func;
                  }

                  // If this has already been wrapped in the past, return that
                  if (func.__raven_wrapper__) {
                    return func.__raven_wrapper__;
                  }
                } catch (e) {
                  // Just accessing custom props in some Selenium environments
                  // can cause a "Permission denied" exception (see raven-js#495).
                  // Bail on wrapping and return the function as-is (defers to window.onerror).
                  return func;
                }

                function wrapped() {
                  var args = [],
                    i = arguments.length,
                    deep = !options || (options && options.deep !== false);

                  if (_before && isFunction(_before)) {
                    _before.apply(this, arguments);
                  }

                  // Recursively wrap all of a function's arguments that are
                  // functions themselves.
                  while (i--)
                    args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];

                  try {
                    // Attempt to invoke user-land function
                    // NOTE: If you are a Sentry user, and you are seeing this stack frame, it
                    //       means Raven caught an error invoking your application code. This is
                    //       expected behavior and NOT indicative of a bug with Raven.js.
                    return func.apply(this, args);
                  } catch (e) {
                    self._ignoreNextOnError();
                    self.captureException(e, options);
                    throw e;
                  }
                }

                // copy over properties of the old function
                for (var property in func) {
                  if (hasKey(func, property)) {
                    wrapped[property] = func[property];
                  }
                }
                wrapped.prototype = func.prototype;

                func.__raven_wrapper__ = wrapped;
                // Signal that this function has been wrapped already
                // for both debugging and to prevent it to being wrapped twice
                wrapped.__raven__ = true;
                wrapped.__inner__ = func;

                return wrapped;
              },

              /*
     * Uninstalls the global error handler.
     *
     * @return {Raven}
     */
              uninstall: function() {
                TraceKit.report.uninstall();

                this._restoreBuiltIns();

                Error.stackTraceLimit = this._originalErrorStackTraceLimit;
                this._isRavenInstalled = false;

                return this;
              },

              /*
     * Manually capture an exception and send it over to Sentry
     *
     * @param {error} ex An exception to be logged
     * @param {object} options A specific set of options for this error [optional]
     * @return {Raven}
     */
              captureException: function(ex, options) {
                // If not an Error is passed through, recall as a message instead
                if (!isError(ex)) {
                  return this.captureMessage(
                    ex,
                    objectMerge(
                      {
                        trimHeadFrames: 1,
                        stacktrace: true // if we fall back to captureMessage, default to attempting a new trace
                      },
                      options
                    )
                  );
                }

                // Store the raw exception object for potential debugging and introspection
                this._lastCapturedException = ex;

                // TraceKit.report will re-raise any exception passed to it,
                // which means you have to wrap it in try/catch. Instead, we
                // can wrap it here and only re-raise if TraceKit.report
                // raises an exception different from the one we asked to
                // report on.
                try {
                  var stack = TraceKit.computeStackTrace(ex);
                  this._handleStackInfo(stack, options);
                } catch (ex1) {
                  if (ex !== ex1) {
                    throw ex1;
                  }
                }

                return this;
              },

              /*
     * Manually send a message to Sentry
     *
     * @param {string} msg A plain message to be captured in Sentry
     * @param {object} options A specific set of options for this message [optional]
     * @return {Raven}
     */
              captureMessage: function(msg, options) {
                // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an
                // early call; we'll error on the side of logging anything called before configuration since it's
                // probably something you should see:
                if (
                  !!this._globalOptions.ignoreErrors.test &&
                  this._globalOptions.ignoreErrors.test(msg)
                ) {
                  return;
                }

                options = options || {};

                var data = objectMerge(
                  {
                    message: msg + '' // Make sure it's actually a string
                  },
                  options
                );

                if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
                  var ex;
                  // Generate a "synthetic" stack trace from this point.
                  // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative
                  //       of a bug with Raven.js. Sentry generates synthetic traces either by configuration,
                  //       or if it catches a thrown object without a "stack" property.
                  try {
                    throw new Error(msg);
                  } catch (ex1) {
                    ex = ex1;
                  }

                  // null exception name so `Error` isn't prefixed to msg
                  ex.name = null;

                  options = objectMerge(
                    {
                      // fingerprint on msg, not stack trace (legacy behavior, could be
                      // revisited)
                      fingerprint: msg,
                      // since we know this is a synthetic trace, the top N-most frames
                      // MUST be from Raven.js, so mark them as in_app later by setting
                      // trimHeadFrames
                      trimHeadFrames: (options.trimHeadFrames || 0) + 1
                    },
                    options
                  );

                  var stack = TraceKit.computeStackTrace(ex);
                  var frames = this._prepareFrames(stack, options);
                  data.stacktrace = {
                    // Sentry expects frames oldest to newest
                    frames: frames.reverse()
                  };
                }

                // Fire away!
                this._send(data);

                return this;
              },

              captureBreadcrumb: function(obj) {
                var crumb = objectMerge(
                  {
                    timestamp: now() / 1000
                  },
                  obj
                );

                if (isFunction(this._globalOptions.breadcrumbCallback)) {
                  var result = this._globalOptions.breadcrumbCallback(crumb);

                  if (isObject(result) && !isEmptyObject(result)) {
                    crumb = result;
                  } else if (result === false) {
                    return this;
                  }
                }

                this._breadcrumbs.push(crumb);
                if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
                  this._breadcrumbs.shift();
                }
                return this;
              },

              addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
                var pluginArgs = [].slice.call(arguments, 1);

                this._plugins.push([plugin, pluginArgs]);
                if (this._isRavenInstalled) {
                  this._drainPlugins();
                }

                return this;
              },

              /*
     * Set/clear a user to be sent along with the payload.
     *
     * @param {object} user An object representing user data [optional]
     * @return {Raven}
     */
              setUserContext: function(user) {
                // Intentionally do not merge here since that's an unexpected behavior.
                this._globalContext.user = user;

                return this;
              },

              /*
     * Merge extra attributes to be sent along with the payload.
     *
     * @param {object} extra An object representing extra data [optional]
     * @return {Raven}
     */
              setExtraContext: function(extra) {
                this._mergeContext('extra', extra);

                return this;
              },

              /*
     * Merge tags to be sent along with the payload.
     *
     * @param {object} tags An object representing tags [optional]
     * @return {Raven}
     */
              setTagsContext: function(tags) {
                this._mergeContext('tags', tags);

                return this;
              },

              /*
     * Clear all of the context.
     *
     * @return {Raven}
     */
              clearContext: function() {
                this._globalContext = {};

                return this;
              },

              /*
     * Get a copy of the current context. This cannot be mutated.
     *
     * @return {object} copy of context
     */
              getContext: function() {
                // lol javascript
                return JSON.parse(stringify(this._globalContext));
              },

              /*
     * Set environment of application
     *
     * @param {string} environment Typically something like 'production'.
     * @return {Raven}
     */
              setEnvironment: function(environment) {
                this._globalOptions.environment = environment;

                return this;
              },

              /*
     * Set release version of application
     *
     * @param {string} release Typically something like a git SHA to identify version
     * @return {Raven}
     */
              setRelease: function(release) {
                this._globalOptions.release = release;

                return this;
              },

              /*
     * Set the dataCallback option
     *
     * @param {function} callback The callback to run which allows the
     *                            data blob to be mutated before sending
     * @return {Raven}
     */
              setDataCallback: function(callback) {
                var original = this._globalOptions.dataCallback;
                this._globalOptions.dataCallback = keepOriginalCallback(
                  original,
                  callback
                );
                return this;
              },

              /*
     * Set the breadcrumbCallback option
     *
     * @param {function} callback The callback to run which allows filtering
     *                            or mutating breadcrumbs
     * @return {Raven}
     */
              setBreadcrumbCallback: function(callback) {
                var original = this._globalOptions.breadcrumbCallback;
                this._globalOptions.breadcrumbCallback = keepOriginalCallback(
                  original,
                  callback
                );
                return this;
              },

              /*
     * Set the shouldSendCallback option
     *
     * @param {function} callback The callback to run which allows
     *                            introspecting the blob before sending
     * @return {Raven}
     */
              setShouldSendCallback: function(callback) {
                var original = this._globalOptions.shouldSendCallback;
                this._globalOptions.shouldSendCallback = keepOriginalCallback(
                  original,
                  callback
                );
                return this;
              },

              /**
     * Override the default HTTP transport mechanism that transmits data
     * to the Sentry server.
     *
     * @param {function} transport Function invoked instead of the default
     *                             `makeRequest` handler.
     *
     * @return {Raven}
     */
              setTransport: function(transport) {
                this._globalOptions.transport = transport;

                return this;
              },

              /*
     * Get the latest raw exception that was captured by Raven.
     *
     * @return {error}
     */
              lastException: function() {
                return this._lastCapturedException;
              },

              /*
     * Get the last event id
     *
     * @return {string}
     */
              lastEventId: function() {
                return this._lastEventId;
              },

              /*
     * Determine if Raven is setup and ready to go.
     *
     * @return {boolean}
     */
              isSetup: function() {
                if (!this._hasJSON) return false; // needs JSON support
                if (!this._globalServer) {
                  if (!this.ravenNotConfiguredError) {
                    this.ravenNotConfiguredError = true;
                    this._logDebug('error', 'Error: Raven has not been configured.');
                  }
                  return false;
                }
                return true;
              },

              afterLoad: function() {
                // TODO: remove window dependence?

                // Attempt to initialize Raven on load
                var RavenConfig = _window.RavenConfig;
                if (RavenConfig) {
                  this.config(RavenConfig.dsn, RavenConfig.config).install();
                }
              },

              showReportDialog: function(options) {
                if (
                  !_document // doesn't work without a document (React native)
                )
                  return;

                options = options || {};

                var lastEventId = options.eventId || this.lastEventId();
                if (!lastEventId) {
                  throw new RavenConfigError('Missing eventId');
                }

                var dsn = options.dsn || this._dsn;
                if (!dsn) {
                  throw new RavenConfigError('Missing DSN');
                }

                var encode = encodeURIComponent;
                var qs = '';
                qs += '?eventId=' + encode(lastEventId);
                qs += '&dsn=' + encode(dsn);

                var user = options.user || this._globalContext.user;
                if (user) {
                  if (user.name) qs += '&name=' + encode(user.name);
                  if (user.email) qs += '&email=' + encode(user.email);
                }

                var globalServer = this._getGlobalServer(this._parseDSN(dsn));

                var script = _document.createElement('script');
                script.async = true;
                script.src = globalServer + '/api/embed/error-page/' + qs;
                (_document.head || _document.body).appendChild(script);
              },

              /**** Private functions ****/
              _ignoreNextOnError: function() {
                var self = this;
                this._ignoreOnError += 1;
                setTimeout(function() {
                  // onerror should trigger before setTimeout
                  self._ignoreOnError -= 1;
                });
              },

              _triggerEvent: function(eventType, options) {
                // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
                var evt, key;

                if (!this._hasDocument) return;

                options = options || {};

                eventType =
                  'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);

                if (_document.createEvent) {
                  evt = _document.createEvent('HTMLEvents');
                  evt.initEvent(eventType, true, true);
                } else {
                  evt = _document.createEventObject();
                  evt.eventType = eventType;
                }

                for (key in options)
                  if (hasKey(options, key)) {
                    evt[key] = options[key];
                  }

                if (_document.createEvent) {
                  // IE9 if standards
                  _document.dispatchEvent(evt);
                } else {
                  // IE8 regardless of Quirks or Standards
                  // IE9 if quirks
                  try {
                    _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
                  } catch (e) {
                    // Do nothing
                  }
                }
              },

              /**
     * Wraps addEventListener to capture UI breadcrumbs
     * @param evtName the event name (e.g. "click")
     * @returns {Function}
     * @private
     */
              _breadcrumbEventHandler: function(evtName) {
                var self = this;
                return function(evt) {
                  // reset keypress timeout; e.g. triggering a 'click' after
                  // a 'keypress' will reset the keypress debounce so that a new
                  // set of keypresses can be recorded
                  self._keypressTimeout = null;

                  // It's possible this handler might trigger multiple times for the same
                  // event (e.g. event propagation through node ancestors). Ignore if we've
                  // already captured the event.
                  if (self._lastCapturedEvent === evt) return;

                  self._lastCapturedEvent = evt;

                  // try/catch both:
                  // - accessing evt.target (see getsentry/raven-js#838, #768)
                  // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
                  //   can throw an exception in some circumstances.
                  var target;
                  try {
                    target = htmlTreeAsString(evt.target);
                  } catch (e) {
                    target = '<unknown>';
                  }

                  self.captureBreadcrumb({
                    category: 'ui.' + evtName, // e.g. ui.click, ui.input
                    message: target
                  });
                };
              },

              /**
     * Wraps addEventListener to capture keypress UI events
     * @returns {Function}
     * @private
     */
              _keypressEventHandler: function() {
                var self = this,
                  debounceDuration = 1000; // milliseconds

                // TODO: if somehow user switches keypress target before
                //       debounce timeout is triggered, we will only capture
                //       a single breadcrumb from the FIRST target (acceptable?)
                return function(evt) {
                  var target;
                  try {
                    target = evt.target;
                  } catch (e) {
                    // just accessing event properties can throw an exception in some rare circumstances
                    // see: https://github.com/getsentry/raven-js/issues/838
                    return;
                  }
                  var tagName = target && target.tagName;

                  // only consider keypress events on actual input elements
                  // this will disregard keypresses targeting body (e.g. tabbing
                  // through elements, hotkeys, etc)
                  if (
                    !tagName ||
                    (tagName !== 'INPUT' &&
                      tagName !== 'TEXTAREA' &&
                      !target.isContentEditable)
                  )
                    return;

                  // record first keypress in a series, but ignore subsequent
                  // keypresses until debounce clears
                  var timeout = self._keypressTimeout;
                  if (!timeout) {
                    self._breadcrumbEventHandler('input')(evt);
                  }
                  clearTimeout(timeout);
                  self._keypressTimeout = setTimeout(function() {
                    self._keypressTimeout = null;
                  }, debounceDuration);
                };
              },

              /**
     * Captures a breadcrumb of type "navigation", normalizing input URLs
     * @param to the originating URL
     * @param from the target URL
     * @private
     */
              _captureUrlChange: function(from, to) {
                var parsedLoc = parseUrl(this._location.href);
                var parsedTo = parseUrl(to);
                var parsedFrom = parseUrl(from);

                // because onpopstate only tells you the "new" (to) value of location.href, and
                // not the previous (from) value, we need to track the value of the current URL
                // state ourselves
                this._lastHref = to;

                // Use only the path component of the URL if the URL matches the current
                // document (almost all the time when using pushState)
                if (
                  parsedLoc.protocol === parsedTo.protocol &&
                  parsedLoc.host === parsedTo.host
                )
                  to = parsedTo.relative;
                if (
                  parsedLoc.protocol === parsedFrom.protocol &&
                  parsedLoc.host === parsedFrom.host
                )
                  from = parsedFrom.relative;

                this.captureBreadcrumb({
                  category: 'navigation',
                  data: {
                    to: to,
                    from: from
                  }
                });
              },

              /**
     * Wrap timer functions and event targets to catch errors and provide
     * better metadata.
     */
              _instrumentTryCatch: function() {
                var self = this;

                var wrappedBuiltIns = self._wrappedBuiltIns;

                function wrapTimeFn(orig) {
                  return function(fn, t) {
                    // preserve arity
                    // Make a copy of the arguments to prevent deoptimization
                    // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
                    var args = new Array(arguments.length);
                    for (var i = 0; i < args.length; ++i) {
                      args[i] = arguments[i];
                    }
                    var originalCallback = args[0];
                    if (isFunction(originalCallback)) {
                      args[0] = self.wrap(originalCallback);
                    }

                    // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
                    // also supports only two arguments and doesn't care what this is, so we
                    // can just call the original function directly.
                    if (orig.apply) {
                      return orig.apply(this, args);
                    } else {
                      return orig(args[0], args[1]);
                    }
                  };
                }

                var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;

                function wrapEventTarget(global) {
                  var proto = _window[global] && _window[global].prototype;
                  if (
                    proto &&
                    proto.hasOwnProperty &&
                    proto.hasOwnProperty('addEventListener')
                  ) {
                    fill(
                      proto,
                      'addEventListener',
                      function(orig) {
                        return function(evtName, fn, capture, secure) {
                          // preserve arity
                          try {
                            if (fn && fn.handleEvent) {
                              fn.handleEvent = self.wrap(fn.handleEvent);
                            }
                          } catch (err) {
                            // can sometimes get 'Permission denied to access property "handle Event'
                          }

                          // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
                          // so that we don't have more than one wrapper function
                          var before, clickHandler, keypressHandler;

                          if (
                            autoBreadcrumbs &&
                            autoBreadcrumbs.dom &&
                            (global === 'EventTarget' || global === 'Node')
                          ) {
                            // NOTE: generating multiple handlers per addEventListener invocation, should
                            //       revisit and verify we can just use one (almost certainly)
                            clickHandler = self._breadcrumbEventHandler('click');
                            keypressHandler = self._keypressEventHandler();
                            before = function(evt) {
                              // need to intercept every DOM event in `before` argument, in case that
                              // same wrapped method is re-used for different events (e.g. mousemove THEN click)
                              // see #724
                              if (!evt) return;

                              var eventType;
                              try {
                                eventType = evt.type;
                              } catch (e) {
                                // just accessing event properties can throw an exception in some rare circumstances
                                // see: https://github.com/getsentry/raven-js/issues/838
                                return;
                              }
                              if (eventType === 'click') return clickHandler(evt);
                              else if (eventType === 'keypress')
                                return keypressHandler(evt);
                            };
                          }
                          return orig.call(
                            this,
                            evtName,
                            self.wrap(fn, undefined, before),
                            capture,
                            secure
                          );
                        };
                      },
                      wrappedBuiltIns
                    );
                    fill(
                      proto,
                      'removeEventListener',
                      function(orig) {
                        return function(evt, fn, capture, secure) {
                          try {
                            fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
                          } catch (e) {
                            // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
                          }
                          return orig.call(this, evt, fn, capture, secure);
                        };
                      },
                      wrappedBuiltIns
                    );
                  }
                }

                fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
                fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
                if (_window.requestAnimationFrame) {
                  fill(
                    _window,
                    'requestAnimationFrame',
                    function(orig) {
                      return function(cb) {
                        return orig(self.wrap(cb));
                      };
                    },
                    wrappedBuiltIns
                  );
                }

                // event targets borrowed from bugsnag-js:
                // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
                var eventTargets = [
                  'EventTarget',
                  'Window',
                  'Node',
                  'ApplicationCache',
                  'AudioTrackList',
                  'ChannelMergerNode',
                  'CryptoOperation',
                  'EventSource',
                  'FileReader',
                  'HTMLUnknownElement',
                  'IDBDatabase',
                  'IDBRequest',
                  'IDBTransaction',
                  'KeyOperation',
                  'MediaController',
                  'MessagePort',
                  'ModalWindow',
                  'Notification',
                  'SVGElementInstance',
                  'Screen',
                  'TextTrack',
                  'TextTrackCue',
                  'TextTrackList',
                  'WebSocket',
                  'WebSocketWorker',
                  'Worker',
                  'XMLHttpRequest',
                  'XMLHttpRequestEventTarget',
                  'XMLHttpRequestUpload'
                ];
                for (var i = 0; i < eventTargets.length; i++) {
                  wrapEventTarget(eventTargets[i]);
                }
              },

              /**
     * Instrument browser built-ins w/ breadcrumb capturing
     *  - XMLHttpRequests
     *  - DOM interactions (click/typing)
     *  - window.location changes
     *  - console
     *
     * Can be disabled or individually configured via the `autoBreadcrumbs` config option
     */
              _instrumentBreadcrumbs: function() {
                var self = this;
                var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;

                var wrappedBuiltIns = self._wrappedBuiltIns;

                function wrapProp(prop, xhr) {
                  if (prop in xhr && isFunction(xhr[prop])) {
                    fill(xhr, prop, function(orig) {
                      return self.wrap(orig);
                    }); // intentionally don't track filled methods on XHR instances
                  }
                }

                if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
                  var xhrproto = XMLHttpRequest.prototype;
                  fill(
                    xhrproto,
                    'open',
                    function(origOpen) {
                      return function(method, url) {
                        // preserve arity

                        // if Sentry key appears in URL, don't capture
                        if (isString(url) && url.indexOf(self._globalKey) === -1) {
                          this.__raven_xhr = {
                            method: method,
                            url: url,
                            status_code: null
                          };
                        }

                        return origOpen.apply(this, arguments);
                      };
                    },
                    wrappedBuiltIns
                  );

                  fill(
                    xhrproto,
                    'send',
                    function(origSend) {
                      return function(data) {
                        // preserve arity
                        var xhr = this;

                        function onreadystatechangeHandler() {
                          if (xhr.__raven_xhr && xhr.readyState === 4) {
                            try {
                              // touching statusCode in some platforms throws
                              // an exception
                              xhr.__raven_xhr.status_code = xhr.status;
                            } catch (e) {
                              /* do nothing */
                            }

                            self.captureBreadcrumb({
                              type: 'http',
                              category: 'xhr',
                              data: xhr.__raven_xhr
                            });
                          }
                        }

                        var props = ['onload', 'onerror', 'onprogress'];
                        for (var j = 0; j < props.length; j++) {
                          wrapProp(props[j], xhr);
                        }

                        if (
                          'onreadystatechange' in xhr &&
                          isFunction(xhr.onreadystatechange)
                        ) {
                          fill(
                            xhr,
                            'onreadystatechange',
                            function(orig) {
                              return self.wrap(
                                orig,
                                undefined,
                                onreadystatechangeHandler
                              );
                            } /* intentionally don't track this instrumentation */
                          );
                        } else {
                          // if onreadystatechange wasn't actually set by the page on this xhr, we
                          // are free to set our own and capture the breadcrumb
                          xhr.onreadystatechange = onreadystatechangeHandler;
                        }

                        return origSend.apply(this, arguments);
                      };
                    },
                    wrappedBuiltIns
                  );
                }

                if (autoBreadcrumbs.xhr && 'fetch' in _window) {
                  fill(
                    _window,
                    'fetch',
                    function(origFetch) {
                      return function(fn, t) {
                        // preserve arity
                        // Make a copy of the arguments to prevent deoptimization
                        // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
                        var args = new Array(arguments.length);
                        for (var i = 0; i < args.length; ++i) {
                          args[i] = arguments[i];
                        }

                        var fetchInput = args[0];
                        var method = 'GET';
                        var url;

                        if (typeof fetchInput === 'string') {
                          url = fetchInput;
                        } else {
                          url = fetchInput.url;
                          if (fetchInput.method) {
                            method = fetchInput.method;
                          }
                        }

                        if (args[1] && args[1].method) {
                          method = args[1].method;
                        }

                        var fetchData = {
                          method: method,
                          url: url,
                          status_code: null
                        };

                        self.captureBreadcrumb({
                          type: 'http',
                          category: 'fetch',
                          data: fetchData
                        });

                        return origFetch.apply(this, args).then(function(response) {
                          fetchData.status_code = response.status;

                          return response;
                        });
                      };
                    },
                    wrappedBuiltIns
                  );
                }

                // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
                // to the document. Do this before we instrument addEventListener.
                if (autoBreadcrumbs.dom && this._hasDocument) {
                  if (_document.addEventListener) {
                    _document.addEventListener(
                      'click',
                      self._breadcrumbEventHandler('click'),
                      false
                    );
                    _document.addEventListener(
                      'keypress',
                      self._keypressEventHandler(),
                      false
                    );
                  } else {
                    // IE8 Compatibility
                    _document.attachEvent(
                      'onclick',
                      self._breadcrumbEventHandler('click')
                    );
                    _document.attachEvent('onkeypress', self._keypressEventHandler());
                  }
                }

                // record navigation (URL) changes
                // NOTE: in Chrome App environment, touching history.pushState, *even inside
                //       a try/catch block*, will cause Chrome to output an error to console.error
                // borrowed from: https://github.com/angular/angular.js/pull/13945/files
                var chrome = _window.chrome;
                var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
                var hasPushState =
                  !isChromePackagedApp && _window.history && history.pushState;
                if (autoBreadcrumbs.location && hasPushState) {
                  // TODO: remove onpopstate handler on uninstall()
                  var oldOnPopState = _window.onpopstate;
                  _window.onpopstate = function() {
                    var currentHref = self._location.href;
                    self._captureUrlChange(self._lastHref, currentHref);

                    if (oldOnPopState) {
                      return oldOnPopState.apply(this, arguments);
                    }
                  };

                  fill(
                    history,
                    'pushState',
                    function(origPushState) {
                      // note history.pushState.length is 0; intentionally not declaring
                      // params to preserve 0 arity
                      return function(/* state, title, url */) {
                        var url = arguments.length > 2 ? arguments[2] : undefined;

                        // url argument is optional
                        if (url) {
                          // coerce to string (this is what pushState does)
                          self._captureUrlChange(self._lastHref, url + '');
                        }

                        return origPushState.apply(this, arguments);
                      };
                    },
                    wrappedBuiltIns
                  );
                }

                if (autoBreadcrumbs.console && 'console' in _window && console.log) {
                  // console
                  var consoleMethodCallback = function(msg, data) {
                    self.captureBreadcrumb({
                      message: msg,
                      level: data.level,
                      category: 'console'
                    });
                  };

                  each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
                    wrapConsoleMethod(console, level, consoleMethodCallback);
                  });
                }
              },

              _restoreBuiltIns: function() {
                // restore any wrapped builtins
                var builtin;
                while (this._wrappedBuiltIns.length) {
                  builtin = this._wrappedBuiltIns.shift();

                  var obj = builtin[0],
                    name = builtin[1],
                    orig = builtin[2];

                  obj[name] = orig;
                }
              },

              _drainPlugins: function() {
                var self = this;

                // FIX ME TODO
                each(this._plugins, function(_, plugin) {
                  var installer = plugin[0];
                  var args = plugin[1];
                  installer.apply(self, [self].concat(args));
                });
              },

              _parseDSN: function(str) {
                var m = dsnPattern.exec(str),
                  dsn = {},
                  i = 7;

                try {
                  while (i--) dsn[dsnKeys[i]] = m[i] || '';
                } catch (e) {
                  throw new RavenConfigError('Invalid DSN: ' + str);
                }

                if (dsn.pass && !this._globalOptions.allowSecretKey) {
                  throw new RavenConfigError(
                    'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
                  );
                }

                return dsn;
              },

              _getGlobalServer: function(uri) {
                // assemble the endpoint from the uri pieces
                var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');

                if (uri.protocol) {
                  globalServer = uri.protocol + ':' + globalServer;
                }
                return globalServer;
              },

              _handleOnErrorStackInfo: function() {
                // if we are intentionally ignoring errors via onerror, bail out
                if (!this._ignoreOnError) {
                  this._handleStackInfo.apply(this, arguments);
                }
              },

              _handleStackInfo: function(stackInfo, options) {
                var frames = this._prepareFrames(stackInfo, options);

                this._triggerEvent('handle', {
                  stackInfo: stackInfo,
                  options: options
                });

                this._processException(
                  stackInfo.name,
                  stackInfo.message,
                  stackInfo.url,
                  stackInfo.lineno,
                  frames,
                  options
                );
              },

              _prepareFrames: function(stackInfo, options) {
                var self = this;
                var frames = [];
                if (stackInfo.stack && stackInfo.stack.length) {
                  each(stackInfo.stack, function(i, stack) {
                    var frame = self._normalizeFrame(stack, stackInfo.url);
                    if (frame) {
                      frames.push(frame);
                    }
                  });

                  // e.g. frames captured via captureMessage throw
                  if (options && options.trimHeadFrames) {
                    for (
                      var j = 0;
                      j < options.trimHeadFrames && j < frames.length;
                      j++
                    ) {
                      frames[j].in_app = false;
                    }
                  }
                }
                frames = frames.slice(0, this._globalOptions.stackTraceLimit);
                return frames;
              },

              _normalizeFrame: function(frame, stackInfoUrl) {
                // normalize the frames data
                var normalized = {
                  filename: frame.url,
                  lineno: frame.line,
                  colno: frame.column,
                  function: frame.func || '?'
                };

                // Case when we don't have any information about the error
                // E.g. throwing a string or raw object, instead of an `Error` in Firefox
                // Generating synthetic error doesn't add any value here
                //
                // We should probably somehow let a user know that they should fix their code
                if (!frame.url) {
                  normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
                }

                normalized.in_app = !// determine if an exception came from outside of our app
                // first we check the global includePaths list.
                (
                  (!!this._globalOptions.includePaths.test &&
                    !this._globalOptions.includePaths.test(normalized.filename)) ||
                  // Now we check for fun, if the function name is Raven or TraceKit
                  /(Raven|TraceKit)\./.test(normalized['function']) ||
                  // finally, we do a last ditch effort and check for raven.min.js
                  /raven\.(min\.)?js$/.test(normalized.filename)
                );

                return normalized;
              },

              _processException: function(
                type,
                message,
                fileurl,
                lineno,
                frames,
                options
              ) {
                var testString = (type || '') + ': ' + (message || '');

                if (
                  !!this._globalOptions.ignoreErrors.test &&
                  this._globalOptions.ignoreErrors.test(testString)
                )
                  return;

                var stacktrace;

                if (frames && frames.length) {
                  fileurl = frames[0].filename || fileurl;
                  // Sentry expects frames oldest to newest
                  // and JS sends them as newest to oldest
                  frames.reverse();
                  stacktrace = {frames: frames};
                } else if (fileurl) {
                  stacktrace = {
                    frames: [
                      {
                        filename: fileurl,
                        lineno: lineno,
                        in_app: true
                      }
                    ]
                  };
                }

                if (
                  !!this._globalOptions.ignoreUrls.test &&
                  this._globalOptions.ignoreUrls.test(fileurl)
                )
                  return;
                if (
                  !!this._globalOptions.whitelistUrls.test &&
                  !this._globalOptions.whitelistUrls.test(fileurl)
                )
                  return;

                var data = objectMerge(
                  {
                    // sentry.interfaces.Exception
                    exception: {
                      values: [
                        {
                          type: type,
                          value: message,
                          stacktrace: stacktrace
                        }
                      ]
                    },
                    culprit: fileurl
                  },
                  options
                );

                // Fire away!
                this._send(data);
              },

              _trimPacket: function(data) {
                // For now, we only want to truncate the two different messages
                // but this could/should be expanded to just trim everything
                var max = this._globalOptions.maxMessageLength;
                if (data.message) {
                  data.message = truncate(data.message, max);
                }
                if (data.exception) {
                  var exception = data.exception.values[0];
                  exception.value = truncate(exception.value, max);
                }

                var request = data.request;
                if (request) {
                  if (request.url) {
                    request.url = truncate(request.url, this._globalOptions.maxUrlLength);
                  }
                  if (request.Referer) {
                    request.Referer = truncate(
                      request.Referer,
                      this._globalOptions.maxUrlLength
                    );
                  }
                }

                if (data.breadcrumbs && data.breadcrumbs.values)
                  this._trimBreadcrumbs(data.breadcrumbs);

                return data;
              },

              /**
     * Truncate breadcrumb values (right now just URLs)
     */
              _trimBreadcrumbs: function(breadcrumbs) {
                // known breadcrumb properties with urls
                // TODO: also consider arbitrary prop values that start with (https?)?://
                var urlProps = ['to', 'from', 'url'],
                  urlProp,
                  crumb,
                  data;

                for (var i = 0; i < breadcrumbs.values.length; ++i) {
                  crumb = breadcrumbs.values[i];
                  if (
                    !crumb.hasOwnProperty('data') ||
                    !isObject(crumb.data) ||
                    objectFrozen(crumb.data)
                  )
                    continue;

                  data = objectMerge({}, crumb.data);
                  for (var j = 0; j < urlProps.length; ++j) {
                    urlProp = urlProps[j];
                    if (data.hasOwnProperty(urlProp) && data[urlProp]) {
                      data[urlProp] = truncate(
                        data[urlProp],
                        this._globalOptions.maxUrlLength
                      );
                    }
                  }
                  breadcrumbs.values[i].data = data;
                }
              },

              _getHttpData: function() {
                if (!this._hasNavigator && !this._hasDocument) return;
                var httpData = {};

                if (this._hasNavigator && _navigator.userAgent) {
                  httpData.headers = {
                    'User-Agent': navigator.userAgent
                  };
                }

                if (this._hasDocument) {
                  if (_document.location && _document.location.href) {
                    httpData.url = _document.location.href;
                  }
                  if (_document.referrer) {
                    if (!httpData.headers) httpData.headers = {};
                    httpData.headers.Referer = _document.referrer;
                  }
                }

                return httpData;
              },

              _resetBackoff: function() {
                this._backoffDuration = 0;
                this._backoffStart = null;
              },

              _shouldBackoff: function() {
                return (
                  this._backoffDuration &&
                  now() - this._backoffStart < this._backoffDuration
                );
              },

              /**
     * Returns true if the in-process data payload matches the signature
     * of the previously-sent data
     *
     * NOTE: This has to be done at this level because TraceKit can generate
     *       data from window.onerror WITHOUT an exception object (IE8, IE9,
     *       other old browsers). This can take the form of an "exception"
     *       data object with a single frame (derived from the onerror args).
     */
              _isRepeatData: function(current) {
                var last = this._lastData;

                if (
                  !last ||
                  current.message !== last.message || // defined for captureMessage
                  current.culprit !== last.culprit // defined for captureException/onerror
                )
                  return false;

                // Stacktrace interface (i.e. from captureMessage)
                if (current.stacktrace || last.stacktrace) {
                  return isSameStacktrace(current.stacktrace, last.stacktrace);
                } else if (current.exception || last.exception) {
                  // Exception interface (i.e. from captureException/onerror)
                  return isSameException(current.exception, last.exception);
                }

                return true;
              },

              _setBackoffState: function(request) {
                // If we are already in a backoff state, don't change anything
                if (this._shouldBackoff()) {
                  return;
                }

                var status = request.status;

                // 400 - project_id doesn't exist or some other fatal
                // 401 - invalid/revoked dsn
                // 429 - too many requests
                if (!(status === 400 || status === 401 || status === 429)) return;

                var retry;
                try {
                  // If Retry-After is not in Access-Control-Expose-Headers, most
                  // browsers will throw an exception trying to access it
                  retry = request.getResponseHeader('Retry-After');
                  retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds
                } catch (e) {
                  /* eslint no-empty:0 */
                }

                this._backoffDuration = retry
                  ? // If Sentry server returned a Retry-After value, use it
                    retry
                  : // Otherwise, double the last backoff duration (starts at 1 sec)
                    this._backoffDuration * 2 || 1000;

                this._backoffStart = now();
              },

              _send: function(data) {
                var globalOptions = this._globalOptions;

                var baseData = {
                    project: this._globalProject,
                    logger: globalOptions.logger,
                    platform: 'javascript'
                  },
                  httpData = this._getHttpData();

                if (httpData) {
                  baseData.request = httpData;
                }

                // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
                if (data.trimHeadFrames) delete data.trimHeadFrames;

                data = objectMerge(baseData, data);

                // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
                data.tags = objectMerge(
                  objectMerge({}, this._globalContext.tags),
                  data.tags
                );
                data.extra = objectMerge(
                  objectMerge({}, this._globalContext.extra),
                  data.extra
                );

                // Send along our own collected metadata with extra
                data.extra['session:duration'] = now() - this._startTime;

                if (this._breadcrumbs && this._breadcrumbs.length > 0) {
                  // intentionally make shallow copy so that additions
                  // to breadcrumbs aren't accidentally sent in this request
                  data.breadcrumbs = {
                    values: [].slice.call(this._breadcrumbs, 0)
                  };
                }

                // If there are no tags/extra, strip the key from the payload alltogther.
                if (isEmptyObject(data.tags)) delete data.tags;

                if (this._globalContext.user) {
                  // sentry.interfaces.User
                  data.user = this._globalContext.user;
                }

                // Include the environment if it's defined in globalOptions
                if (globalOptions.environment)
                  data.environment = globalOptions.environment;

                // Include the release if it's defined in globalOptions
                if (globalOptions.release) data.release = globalOptions.release;

                // Include server_name if it's defined in globalOptions
                if (globalOptions.serverName) data.server_name = globalOptions.serverName;

                if (isFunction(globalOptions.dataCallback)) {
                  data = globalOptions.dataCallback(data) || data;
                }

                // Why??????????
                if (!data || isEmptyObject(data)) {
                  return;
                }

                // Check if the request should be filtered or not
                if (
                  isFunction(globalOptions.shouldSendCallback) &&
                  !globalOptions.shouldSendCallback(data)
                ) {
                  return;
                }

                // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
                // so drop requests until "cool-off" period has elapsed.
                if (this._shouldBackoff()) {
                  this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
                  return;
                }

                if (typeof globalOptions.sampleRate === 'number') {
                  if (Math.random() < globalOptions.sampleRate) {
                    this._sendProcessedPayload(data);
                  }
                } else {
                  this._sendProcessedPayload(data);
                }
              },

              _getUuid: function() {
                return uuid4();
              },

              _sendProcessedPayload: function(data, callback) {
                var self = this;
                var globalOptions = this._globalOptions;

                if (!this.isSetup()) return;

                // Try and clean up the packet before sending by truncating long values
                data = this._trimPacket(data);

                // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
                // but this would require copying an un-truncated copy of the data packet, which can be
                // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
                if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
                  this._logDebug('warn', 'Raven dropped repeat event: ', data);
                  return;
                }

                // Send along an event_id if not explicitly passed.
                // This event_id can be used to reference the error within Sentry itself.
                // Set lastEventId after we know the error should actually be sent
                this._lastEventId = data.event_id || (data.event_id = this._getUuid());

                // Store outbound payload after trim
                this._lastData = data;

                this._logDebug('debug', 'Raven about to send:', data);

                var auth = {
                  sentry_version: '7',
                  sentry_client: 'raven-js/' + this.VERSION,
                  sentry_key: this._globalKey
                };

                if (this._globalSecret) {
                  auth.sentry_secret = this._globalSecret;
                }

                var exception = data.exception && data.exception.values[0];
                this.captureBreadcrumb({
                  category: 'sentry',
                  message: exception
                    ? (exception.type ? exception.type + ': ' : '') + exception.value
                    : data.message,
                  event_id: data.event_id,
                  level: data.level || 'error' // presume error unless specified
                });

                var url = this._globalEndpoint;
                (globalOptions.transport || this._makeRequest).call(this, {
                  url: url,
                  auth: auth,
                  data: data,
                  options: globalOptions,
                  onSuccess: function success() {
                    self._resetBackoff();

                    self._triggerEvent('success', {
                      data: data,
                      src: url
                    });
                    callback && callback();
                  },
                  onError: function failure(error) {
                    self._logDebug('error', 'Raven transport failed to send: ', error);

                    if (error.request) {
                      self._setBackoffState(error.request);
                    }

                    self._triggerEvent('failure', {
                      data: data,
                      src: url
                    });
                    error =
                      error ||
                      new Error('Raven send failed (no additional details provided)');
                    callback && callback(error);
                  }
                });
              },

              _makeRequest: function(opts) {
                var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
                if (!request) return;

                // if browser doesn't support CORS (e.g. IE7), we are out of luck
                var hasCORS =
                  'withCredentials' in request || typeof XDomainRequest !== 'undefined';

                if (!hasCORS) return;

                var url = opts.url;

                if ('withCredentials' in request) {
                  request.onreadystatechange = function() {
                    if (request.readyState !== 4) {
                      return;
                    } else if (request.status === 200) {
                      opts.onSuccess && opts.onSuccess();
                    } else if (opts.onError) {
                      var err = new Error('Sentry error code: ' + request.status);
                      err.request = request;
                      opts.onError(err);
                    }
                  };
                } else {
                  request = new XDomainRequest();
                  // xdomainrequest cannot go http -> https (or vice versa),
                  // so always use protocol relative
                  url = url.replace(/^https?:/, '');

                  // onreadystatechange not supported by XDomainRequest
                  if (opts.onSuccess) {
                    request.onload = opts.onSuccess;
                  }
                  if (opts.onError) {
                    request.onerror = function() {
                      var err = new Error('Sentry error code: XDomainRequest');
                      err.request = request;
                      opts.onError(err);
                    };
                  }
                }

                // NOTE: auth is intentionally sent as part of query string (NOT as custom
                //       HTTP header) so as to avoid preflight CORS requests
                request.open('POST', url + '?' + urlencode(opts.auth));
                request.send(stringify(opts.data));
              },

              _logDebug: function(level) {
                if (this._originalConsoleMethods[level] && this.debug) {
                  // In IE<10 console methods do not have their own 'apply' method
                  Function.prototype.apply.call(
                    this._originalConsoleMethods[level],
                    this._originalConsole,
                    [].slice.call(arguments, 1)
                  );
                }
              },

              _mergeContext: function(key, context) {
                if (isUndefined(context)) {
                  delete this._globalContext[key];
                } else {
                  this._globalContext[key] = objectMerge(
                    this._globalContext[key] || {},
                    context
                  );
                }
              }
            };

            /*------------------------------------------------
 * utils
 *
 * conditionally exported for test via Raven.utils
 =================================================
 */
            var objectPrototype = Object.prototype;

            function isUndefined(what) {
              return what === void 0;
            }

            function isFunction(what) {
              return typeof what === 'function';
            }

            function isString(what) {
              return objectPrototype.toString.call(what) === '[object String]';
            }

            function isEmptyObject(what) {
              for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars
              return true;
            }

            function each(obj, callback) {
              var i, j;

              if (isUndefined(obj.length)) {
                for (i in obj) {
                  if (hasKey(obj, i)) {
                    callback.call(null, i, obj[i]);
                  }
                }
              } else {
                j = obj.length;
                if (j) {
                  for (i = 0; i < j; i++) {
                    callback.call(null, i, obj[i]);
                  }
                }
              }
            }

            function objectMerge(obj1, obj2) {
              if (!obj2) {
                return obj1;
              }
              each(obj2, function(key, value) {
                obj1[key] = value;
              });
              return obj1;
            }

            /**
 * This function is only used for react-native.
 * react-native freezes object that have already been sent over the
 * js bridge. We need this function in order to check if the object is frozen.
 * So it's ok that objectFrozen returns false if Object.isFrozen is not
 * supported because it's not relevant for other "platforms". See related issue:
 * https://github.com/getsentry/react-native-sentry/issues/57
 */
            function objectFrozen(obj) {
              if (!Object.isFrozen) {
                return false;
              }
              return Object.isFrozen(obj);
            }

            function truncate(str, max) {
              return !max || str.length <= max ? str : str.substr(0, max) + '\u2026';
            }

            /**
 * hasKey, a better form of hasOwnProperty
 * Example: hasKey(MainHostObject, property) === true/false
 *
 * @param {Object} host object to check property
 * @param {string} key to check
 */
            function hasKey(object, key) {
              return objectPrototype.hasOwnProperty.call(object, key);
            }

            function joinRegExp(patterns) {
              // Combine an array of regular expressions and strings into one large regexp
              // Be mad.
              var sources = [],
                i = 0,
                len = patterns.length,
                pattern;

              for (; i < len; i++) {
                pattern = patterns[i];
                if (isString(pattern)) {
                  // If it's a string, we need to escape it
                  // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
                  sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
                } else if (pattern && pattern.source) {
                  // If it's a regexp already, we want to extract the source
                  sources.push(pattern.source);
                }
                // Intentionally skip other cases
              }
              return new RegExp(sources.join('|'), 'i');
            }

            function urlencode(o) {
              var pairs = [];
              each(o, function(key, value) {
                pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
              });
              return pairs.join('&');
            }

            // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
            // intentionally using regex and not <a/> href parsing trick because React Native and other
            // environments where DOM might not be available
            function parseUrl(url) {
              var match = url.match(
                /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/
              );
              if (!match) return {};

              // coerce to undefined values to empty string so we don't get 'undefined'
              var query = match[6] || '';
              var fragment = match[8] || '';
              return {
                protocol: match[2],
                host: match[4],
                path: match[5],
                relative: match[5] + query + fragment // everything minus origin
              };
            }
            function uuid4() {
              var crypto = _window.crypto || _window.msCrypto;

              if (!isUndefined(crypto) && crypto.getRandomValues) {
                // Use window.crypto API if available
                // eslint-disable-next-line no-undef
                var arr = new Uint16Array(8);
                crypto.getRandomValues(arr);

                // set 4 in byte 7
                arr[3] = (arr[3] & 0xfff) | 0x4000;
                // set 2 most significant bits of byte 9 to '10'
                arr[4] = (arr[4] & 0x3fff) | 0x8000;

                var pad = function(num) {
                  var v = num.toString(16);
                  while (v.length < 4) {
                    v = '0' + v;
                  }
                  return v;
                };

                return (
                  pad(arr[0]) +
                  pad(arr[1]) +
                  pad(arr[2]) +
                  pad(arr[3]) +
                  pad(arr[4]) +
                  pad(arr[5]) +
                  pad(arr[6]) +
                  pad(arr[7])
                );
              } else {
                // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
                return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
                  var r = (Math.random() * 16) | 0,
                    v = c === 'x' ? r : (r & 0x3) | 0x8;
                  return v.toString(16);
                });
              }
            }

            /**
 * Given a child DOM element, returns a query-selector statement describing that
 * and its ancestors
 * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
 * @param elem
 * @returns {string}
 */
            function htmlTreeAsString(elem) {
              /* eslint no-extra-parens:0*/
              var MAX_TRAVERSE_HEIGHT = 5,
                MAX_OUTPUT_LEN = 80,
                out = [],
                height = 0,
                len = 0,
                separator = ' > ',
                sepLength = separator.length,
                nextStr;

              while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
                nextStr = htmlElementAsString(elem);
                // bail out if
                // - nextStr is the 'html' element
                // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
                //   (ignore this limit if we are on the first iteration)
                if (
                  nextStr === 'html' ||
                  (height > 1 &&
                    len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
                ) {
                  break;
                }

                out.push(nextStr);

                len += nextStr.length;
                elem = elem.parentNode;
              }

              return out.reverse().join(separator);
            }

            /**
 * Returns a simple, query-selector representation of a DOM element
 * e.g. [HTMLElement] => input#foo.btn[name=baz]
 * @param HTMLElement
 * @returns {string}
 */
            function htmlElementAsString(elem) {
              var out = [],
                className,
                classes,
                key,
                attr,
                i;

              if (!elem || !elem.tagName) {
                return '';
              }

              out.push(elem.tagName.toLowerCase());
              if (elem.id) {
                out.push('#' + elem.id);
              }

              className = elem.className;
              if (className && isString(className)) {
                classes = className.split(/\s+/);
                for (i = 0; i < classes.length; i++) {
                  out.push('.' + classes[i]);
                }
              }
              var attrWhitelist = ['type', 'name', 'title', 'alt'];
              for (i = 0; i < attrWhitelist.length; i++) {
                key = attrWhitelist[i];
                attr = elem.getAttribute(key);
                if (attr) {
                  out.push('[' + key + '="' + attr + '"]');
                }
              }
              return out.join('');
            }

            /**
 * Returns true if either a OR b is truthy, but not both
 */
            function isOnlyOneTruthy(a, b) {
              return !!(!!a ^ !!b);
            }

            /**
 * Returns true if the two input exception interfaces have the same content
 */
            function isSameException(ex1, ex2) {
              if (isOnlyOneTruthy(ex1, ex2)) return false;

              ex1 = ex1.values[0];
              ex2 = ex2.values[0];

              if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;

              return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
            }

            /**
 * Returns true if the two input stack trace interfaces have the same content
 */
            function isSameStacktrace(stack1, stack2) {
              if (isOnlyOneTruthy(stack1, stack2)) return false;

              var frames1 = stack1.frames;
              var frames2 = stack2.frames;

              // Exit early if frame count differs
              if (frames1.length !== frames2.length) return false;

              // Iterate through every frame; bail out if anything differs
              var a, b;
              for (var i = 0; i < frames1.length; i++) {
                a = frames1[i];
                b = frames2[i];
                if (
                  a.filename !== b.filename ||
                  a.lineno !== b.lineno ||
                  a.colno !== b.colno ||
                  a['function'] !== b['function']
                )
                  return false;
              }
              return true;
            }

            /**
 * Polyfill a method
 * @param obj object e.g. `document`
 * @param name method name present on object e.g. `addEventListener`
 * @param replacement replacement function
 * @param track {optional} record instrumentation to an array
 */
            function fill(obj, name, replacement, track) {
              var orig = obj[name];
              obj[name] = replacement(orig);
              if (track) {
                track.push([obj, name, orig]);
              }
            }

            if (typeof __DEV__ !== 'undefined' && __DEV__) {
              Raven.utils = {
                isUndefined: isUndefined,
                isFunction: isFunction,
                isString: isString,
                isObject: isObject,
                isEmptyObject: isEmptyObject,
                isError: isError,
                each: each,
                objectMerge: objectMerge,
                truncate: truncate,
                hasKey: hasKey,
                joinRegExp: joinRegExp,
                urlencode: urlencode,
                uuid4: uuid4,
                htmlTreeAsString: htmlTreeAsString,
                htmlElementAsString: htmlElementAsString,
                parseUrl: parseUrl,
                fill: fill
              };
            }

            // Deprecations
            Raven.prototype.setUser = Raven.prototype.setUserContext;
            Raven.prototype.setReleaseContext = Raven.prototype.setRelease;

            module.exports = Raven;
          }.call(
            this,
            typeof global !== 'undefined'
              ? global
              : typeof self !== 'undefined'
                ? self
                : typeof window !== 'undefined' ? window : {}
          ));
        },
        {'1': 1, '2': 2, '5': 5, '6': 6, '7': 7}
      ],
      4: [
        function(_dereq_, module, exports) {
          (function(global) {
            /**
 * Enforces a single instance of the Raven client, and the
 * main entry point for Raven. If you are a consumer of the
 * Raven library, you SHOULD load this file (vs raven.js).
 **/

            var RavenConstructor = _dereq_(3);

            // This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
            var _window =
              typeof window !== 'undefined'
                ? window
                : typeof global !== 'undefined'
                  ? global
                  : typeof self !== 'undefined' ? self : {};
            var _Raven = _window.Raven;

            var Raven = new RavenConstructor();

            /*
 * Allow multiple versions of Raven to be installed.
 * Strip Raven from the global context and returns the instance.
 *
 * @return {Raven}
 */
            Raven.noConflict = function() {
              _window.Raven = _Raven;
              return Raven;
            };

            Raven.afterLoad();

            module.exports = Raven;
          }.call(
            this,
            typeof global !== 'undefined'
              ? global
              : typeof self !== 'undefined'
                ? self
                : typeof window !== 'undefined' ? window : {}
          ));
        },
        {'3': 3}
      ],
      5: [
        function(_dereq_, module, exports) {
          function isObject(what) {
            return typeof what === 'object' && what !== null;
          }

          // Yanked from https://git.io/vS8DV re-used under CC0
          // with some tiny modifications
          function isError(value) {
            switch ({}.toString.call(value)) {
              case '[object Error]':
                return true;
              case '[object Exception]':
                return true;
              case '[object DOMException]':
                return true;
              default:
                return value instanceof Error;
            }
          }

          function wrappedCallback(callback) {
            function dataCallback(data, original) {
              var normalizedData = callback(data) || data;
              if (original) {
                return original(normalizedData) || normalizedData;
              }
              return normalizedData;
            }

            return dataCallback;
          }

          module.exports = {
            isObject: isObject,
            isError: isError,
            wrappedCallback: wrappedCallback
          };
        },
        {}
      ],
      6: [
        function(_dereq_, module, exports) {
          (function(global) {
            var utils = _dereq_(5);

            /*
 TraceKit - Cross brower stack traces

 This was originally forked from github.com/occ/TraceKit, but has since been
 largely re-written and is now maintained as part of raven-js.  Tests for
 this are in test/vendor.

 MIT license
*/

            var TraceKit = {
              collectWindowErrors: true,
              debug: false
            };

            // This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
            var _window =
              typeof window !== 'undefined'
                ? window
                : typeof global !== 'undefined'
                  ? global
                  : typeof self !== 'undefined' ? self : {};

            // global reference to slice
            var _slice = [].slice;
            var UNKNOWN_FUNCTION = '?';

            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
            var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;

            function getLocationHref() {
              if (typeof document === 'undefined' || document.location == null) return '';

              return document.location.href;
            }

            /**
 * TraceKit.report: cross-browser processing of unhandled exceptions
 *
 * Syntax:
 *   TraceKit.report.subscribe(function(stackInfo) { ... })
 *   TraceKit.report.unsubscribe(function(stackInfo) { ... })
 *   TraceKit.report(exception)
 *   try { ...code... } catch(ex) { TraceKit.report(ex); }
 *
 * Supports:
 *   - Firefox: full stack trace with line numbers, plus column number
 *              on top frame; column number is not guaranteed
 *   - Opera:   full stack trace with line and column numbers
 *   - Chrome:  full stack trace with line and column numbers
 *   - Safari:  line and column number for the top frame only; some frames
 *              may be missing, and column number is not guaranteed
 *   - IE:      line and column number for the top frame only; some frames
 *              may be missing, and column number is not guaranteed
 *
 * In theory, TraceKit should work on all of the following versions:
 *   - IE5.5+ (only 8.0 tested)
 *   - Firefox 0.9+ (only 3.5+ tested)
 *   - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
 *     Exceptions Have Stacktrace to be enabled in opera:config)
 *   - Safari 3+ (only 4+ tested)
 *   - Chrome 1+ (only 5+ tested)
 *   - Konqueror 3.5+ (untested)
 *
 * Requires TraceKit.computeStackTrace.
 *
 * Tries to catch all unhandled exceptions and report them to the
 * subscribed handlers. Please note that TraceKit.report will rethrow the
 * exception. This is REQUIRED in order to get a useful stack trace in IE.
 * If the exception does not reach the top of the browser, you will only
 * get a stack trace from the point where TraceKit.report was called.
 *
 * Handlers receive a stackInfo object as described in the
 * TraceKit.computeStackTrace docs.
 */
            TraceKit.report = (function reportModuleWrapper() {
              var handlers = [],
                lastArgs = null,
                lastException = null,
                lastExceptionStack = null;

              /**
     * Add a crash handler.
     * @param {Function} handler
     */
              function subscribe(handler) {
                installGlobalHandler();
                handlers.push(handler);
              }

              /**
     * Remove a crash handler.
     * @param {Function} handler
     */
              function unsubscribe(handler) {
                for (var i = handlers.length - 1; i >= 0; --i) {
                  if (handlers[i] === handler) {
                    handlers.splice(i, 1);
                  }
                }
              }

              /**
     * Remove all crash handlers.
     */
              function unsubscribeAll() {
                uninstallGlobalHandler();
                handlers = [];
              }

              /**
     * Dispatch stack information to all handlers.
     * @param {Object.<string, *>} stack
     */
              function notifyHandlers(stack, isWindowError) {
                var exception = null;
                if (isWindowError && !TraceKit.collectWindowErrors) {
                  return;
                }
                for (var i in handlers) {
                  if (handlers.hasOwnProperty(i)) {
                    try {
                      handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
                    } catch (inner) {
                      exception = inner;
                    }
                  }
                }

                if (exception) {
                  throw exception;
                }
              }

              var _oldOnerrorHandler, _onErrorHandlerInstalled;

              /**
     * Ensures all global unhandled exceptions are recorded.
     * Supported by Gecko and IE.
     * @param {string} message Error message.
     * @param {string} url URL of script that generated the exception.
     * @param {(number|string)} lineNo The line number at which the error
     * occurred.
     * @param {?(number|string)} colNo The column number at which the error
     * occurred.
     * @param {?Error} ex The actual Error object.
     */
              function traceKitWindowOnError(message, url, lineNo, colNo, ex) {
                var stack = null;

                if (lastExceptionStack) {
                  TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
                    lastExceptionStack,
                    url,
                    lineNo,
                    message
                  );
                  processLastException();
                } else if (ex && utils.isError(ex)) {
                  // non-string `ex` arg; attempt to extract stack trace

                  // New chrome and blink send along a real error object
                  // Let's just report that like a normal error.
                  // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
                  stack = TraceKit.computeStackTrace(ex);
                  notifyHandlers(stack, true);
                } else {
                  var location = {
                    url: url,
                    line: lineNo,
                    column: colNo
                  };

                  var name = undefined;
                  var msg = message; // must be new var or will modify original `arguments`
                  var groups;
                  if ({}.toString.call(message) === '[object String]') {
                    var groups = message.match(ERROR_TYPES_RE);
                    if (groups) {
                      name = groups[1];
                      msg = groups[2];
                    }
                  }

                  location.func = UNKNOWN_FUNCTION;

                  stack = {
                    name: name,
                    message: msg,
                    url: getLocationHref(),
                    stack: [location]
                  };
                  notifyHandlers(stack, true);
                }

                if (_oldOnerrorHandler) {
                  return _oldOnerrorHandler.apply(this, arguments);
                }

                return false;
              }

              function installGlobalHandler() {
                if (_onErrorHandlerInstalled) {
                  return;
                }
                _oldOnerrorHandler = _window.onerror;
                _window.onerror = traceKitWindowOnError;
                _onErrorHandlerInstalled = true;
              }

              function uninstallGlobalHandler() {
                if (!_onErrorHandlerInstalled) {
                  return;
                }
                _window.onerror = _oldOnerrorHandler;
                _onErrorHandlerInstalled = false;
                _oldOnerrorHandler = undefined;
              }

              function processLastException() {
                var _lastExceptionStack = lastExceptionStack,
                  _lastArgs = lastArgs;
                lastArgs = null;
                lastExceptionStack = null;
                lastException = null;
                notifyHandlers.apply(
                  null,
                  [_lastExceptionStack, false].concat(_lastArgs)
                );
              }

              /**
     * Reports an unhandled Error to TraceKit.
     * @param {Error} ex
     * @param {?boolean} rethrow If false, do not re-throw the exception.
     * Only used for window.onerror to not cause an infinite loop of
     * rethrowing.
     */
              function report(ex, rethrow) {
                var args = _slice.call(arguments, 1);
                if (lastExceptionStack) {
                  if (lastException === ex) {
                    return; // already caught by an inner catch block, ignore
                  } else {
                    processLastException();
                  }
                }

                var stack = TraceKit.computeStackTrace(ex);
                lastExceptionStack = stack;
                lastException = ex;
                lastArgs = args;

                // If the stack trace is incomplete, wait for 2 seconds for
                // slow slow IE to see if onerror occurs or not before reporting
                // this exception; otherwise, we will end up with an incomplete
                // stack trace
                setTimeout(function() {
                  if (lastException === ex) {
                    processLastException();
                  }
                }, stack.incomplete ? 2000 : 0);

                if (rethrow !== false) {
                  throw ex; // re-throw to propagate to the top level (and cause window.onerror)
                }
              }

              report.subscribe = subscribe;
              report.unsubscribe = unsubscribe;
              report.uninstall = unsubscribeAll;
              return report;
            })();

            /**
 * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
 *
 * Syntax:
 *   s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
 * Returns:
 *   s.name              - exception name
 *   s.message           - exception message
 *   s.stack[i].url      - JavaScript or HTML file URL
 *   s.stack[i].func     - function name, or empty for anonymous functions (if guessing did not work)
 *   s.stack[i].args     - arguments passed to the function, if known
 *   s.stack[i].line     - line number, if known
 *   s.stack[i].column   - column number, if known
 *
 * Supports:
 *   - Firefox:  full stack trace with line numbers and unreliable column
 *               number on top frame
 *   - Opera 10: full stack trace with line and column numbers
 *   - Opera 9-: full stack trace with line numbers
 *   - Chrome:   full stack trace with line and column numbers
 *   - Safari:   line and column number for the topmost stacktrace element
 *               only
 *   - IE:       no line numbers whatsoever
 *
 * Tries to guess names of anonymous functions by looking for assignments
 * in the source code. In IE and Safari, we have to guess source file names
 * by searching for function bodies inside all page scripts. This will not
 * work for scripts that are loaded cross-domain.
 * Here be dragons: some function names may be guessed incorrectly, and
 * duplicate functions may be mismatched.
 *
 * TraceKit.computeStackTrace should only be used for tracing purposes.
 * Logging of unhandled exceptions should be done with TraceKit.report,
 * which builds on top of TraceKit.computeStackTrace and provides better
 * IE support by utilizing the window.onerror event to retrieve information
 * about the top of the stack.
 *
 * Note: In IE and Safari, no stack trace is recorded on the Error object,
 * so computeStackTrace instead walks its *own* chain of callers.
 * This means that:
 *  * in Safari, some methods may be missing from the stack trace;
 *  * in IE, the topmost function in the stack trace will always be the
 *    caller of computeStackTrace.
 *
 * This is okay for tracing (because you are likely to be calling
 * computeStackTrace from the function you want to be the topmost element
 * of the stack trace anyway), but not okay for logging unhandled
 * exceptions (because your catch block will likely be far away from the
 * inner function that actually caused the exception).
 *
 */
            TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
              // Contents of Exception in various browsers.
              //
              // SAFARI:
              // ex.message = Can't find variable: qq
              // ex.line = 59
              // ex.sourceId = 580238192
              // ex.sourceURL = http://...
              // ex.expressionBeginOffset = 96
              // ex.expressionCaretOffset = 98
              // ex.expressionEndOffset = 98
              // ex.name = ReferenceError
              //
              // FIREFOX:
              // ex.message = qq is not defined
              // ex.fileName = http://...
              // ex.lineNumber = 59
              // ex.columnNumber = 69
              // ex.stack = ...stack trace... (see the example below)
              // ex.name = ReferenceError
              //
              // CHROME:
              // ex.message = qq is not defined
              // ex.name = ReferenceError
              // ex.type = not_defined
              // ex.arguments = ['aa']
              // ex.stack = ...stack trace...
              //
              // INTERNET EXPLORER:
              // ex.message = ...
              // ex.name = ReferenceError
              //
              // OPERA:
              // ex.message = ...message... (see the example below)
              // ex.name = ReferenceError
              // ex.opera#sourceloc = 11  (pretty much useless, duplicates the info in ex.message)
              // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'

              /**
     * Computes stack trace information from the stack property.
     * Chrome and Gecko use this property.
     * @param {Error} ex
     * @return {?Object.<string, *>} Stack trace information.
     */
              function computeStackTraceFromStackProp(ex) {
                if (typeof ex.stack === 'undefined' || !ex.stack) return;

                var chrome = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,
                  gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,
                  winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,
                  // Used to additionally parse URL/line/column from eval frames
                  geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i,
                  chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/,
                  lines = ex.stack.split('\n'),
                  stack = [],
                  submatch,
                  parts,
                  element,
                  reference = /^(.*) is undefined$/.exec(ex.message);

                for (var i = 0, j = lines.length; i < j; ++i) {
                  if ((parts = chrome.exec(lines[i]))) {
                    var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
                    var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
                    if (isEval && (submatch = chromeEval.exec(parts[2]))) {
                      // throw out eval line/column and use top-most line/column number
                      parts[2] = submatch[1]; // url
                      parts[3] = submatch[2]; // line
                      parts[4] = submatch[3]; // column
                    }
                    element = {
                      url: !isNative ? parts[2] : null,
                      func: parts[1] || UNKNOWN_FUNCTION,
                      args: isNative ? [parts[2]] : [],
                      line: parts[3] ? +parts[3] : null,
                      column: parts[4] ? +parts[4] : null
                    };
                  } else if ((parts = winjs.exec(lines[i]))) {
                    element = {
                      url: parts[2],
                      func: parts[1] || UNKNOWN_FUNCTION,
                      args: [],
                      line: +parts[3],
                      column: parts[4] ? +parts[4] : null
                    };
                  } else if ((parts = gecko.exec(lines[i]))) {
                    var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
                    if (isEval && (submatch = geckoEval.exec(parts[3]))) {
                      // throw out eval line/column and use top-most line number
                      parts[3] = submatch[1];
                      parts[4] = submatch[2];
                      parts[5] = null; // no column when eval
                    } else if (
                      i === 0 &&
                      !parts[5] &&
                      typeof ex.columnNumber !== 'undefined'
                    ) {
                      // FireFox uses this awesome columnNumber property for its top frame
                      // Also note, Firefox's column number is 0-based and everything else expects 1-based,
                      // so adding 1
                      // NOTE: this hack doesn't work if top-most frame is eval
                      stack[0].column = ex.columnNumber + 1;
                    }
                    element = {
                      url: parts[3],
                      func: parts[1] || UNKNOWN_FUNCTION,
                      args: parts[2] ? parts[2].split(',') : [],
                      line: parts[4] ? +parts[4] : null,
                      column: parts[5] ? +parts[5] : null
                    };
                  } else {
                    continue;
                  }

                  if (!element.func && element.line) {
                    element.func = UNKNOWN_FUNCTION;
                  }

                  stack.push(element);
                }

                if (!stack.length) {
                  return null;
                }

                return {
                  name: ex.name,
                  message: ex.message,
                  url: getLocationHref(),
                  stack: stack
                };
              }

              /**
     * Adds information about the first frame to incomplete stack traces.
     * Safari and IE require this to get complete data on the first frame.
     * @param {Object.<string, *>} stackInfo Stack trace information from
     * one of the compute* methods.
     * @param {string} url The URL of the script that caused an error.
     * @param {(number|string)} lineNo The line number of the script that
     * caused an error.
     * @param {string=} message The error generated by the browser, which
     * hopefully contains the name of the object that caused the error.
     * @return {boolean} Whether or not the stack information was
     * augmented.
     */
              function augmentStackTraceWithInitialElement(
                stackInfo,
                url,
                lineNo,
                message
              ) {
                var initial = {
                  url: url,
                  line: lineNo
                };

                if (initial.url && initial.line) {
                  stackInfo.incomplete = false;

                  if (!initial.func) {
                    initial.func = UNKNOWN_FUNCTION;
                  }

                  if (stackInfo.stack.length > 0) {
                    if (stackInfo.stack[0].url === initial.url) {
                      if (stackInfo.stack[0].line === initial.line) {
                        return false; // already in stack trace
                      } else if (
                        !stackInfo.stack[0].line &&
                        stackInfo.stack[0].func === initial.func
                      ) {
                        stackInfo.stack[0].line = initial.line;
                        return false;
                      }
                    }
                  }

                  stackInfo.stack.unshift(initial);
                  stackInfo.partial = true;
                  return true;
                } else {
                  stackInfo.incomplete = true;
                }

                return false;
              }

              /**
     * Computes stack trace information by walking the arguments.caller
     * chain at the time the exception occurred. This will cause earlier
     * frames to be missed but is the only way to get any stack trace in
     * Safari and IE. The top frame is restored by
     * {@link augmentStackTraceWithInitialElement}.
     * @param {Error} ex
     * @return {?Object.<string, *>} Stack trace information.
     */
              function computeStackTraceByWalkingCallerChain(ex, depth) {
                var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
                  stack = [],
                  funcs = {},
                  recursion = false,
                  parts,
                  item,
                  source;

                for (
                  var curr = computeStackTraceByWalkingCallerChain.caller;
                  curr && !recursion;
                  curr = curr.caller
                ) {
                  if (curr === computeStackTrace || curr === TraceKit.report) {
                    // console.log('skipping internal function');
                    continue;
                  }

                  item = {
                    url: null,
                    func: UNKNOWN_FUNCTION,
                    line: null,
                    column: null
                  };

                  if (curr.name) {
                    item.func = curr.name;
                  } else if ((parts = functionName.exec(curr.toString()))) {
                    item.func = parts[1];
                  }

                  if (typeof item.func === 'undefined') {
                    try {
                      item.func = parts.input.substring(0, parts.input.indexOf('{'));
                    } catch (e) {}
                  }

                  if (funcs['' + curr]) {
                    recursion = true;
                  } else {
                    funcs['' + curr] = true;
                  }

                  stack.push(item);
                }

                if (depth) {
                  // console.log('depth is ' + depth);
                  // console.log('stack is ' + stack.length);
                  stack.splice(0, depth);
                }

                var result = {
                  name: ex.name,
                  message: ex.message,
                  url: getLocationHref(),
                  stack: stack
                };
                augmentStackTraceWithInitialElement(
                  result,
                  ex.sourceURL || ex.fileName,
                  ex.line || ex.lineNumber,
                  ex.message || ex.description
                );
                return result;
              }

              /**
     * Computes a stack trace for an exception.
     * @param {Error} ex
     * @param {(string|number)=} depth
     */
              function computeStackTrace(ex, depth) {
                var stack = null;
                depth = depth == null ? 0 : +depth;

                try {
                  stack = computeStackTraceFromStackProp(ex);
                  if (stack) {
                    return stack;
                  }
                } catch (e) {
                  if (TraceKit.debug) {
                    throw e;
                  }
                }

                try {
                  stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
                  if (stack) {
                    return stack;
                  }
                } catch (e) {
                  if (TraceKit.debug) {
                    throw e;
                  }
                }
                return {
                  name: ex.name,
                  message: ex.message,
                  url: getLocationHref()
                };
              }

              computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
              computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;

              return computeStackTrace;
            })();

            module.exports = TraceKit;
          }.call(
            this,
            typeof global !== 'undefined'
              ? global
              : typeof self !== 'undefined'
                ? self
                : typeof window !== 'undefined' ? window : {}
          ));
        },
        {'5': 5}
      ],
      7: [
        function(_dereq_, module, exports) {
          /*
 json-stringify-safe
 Like JSON.stringify, but doesn't throw on circular references.

 Originally forked from https://github.com/isaacs/json-stringify-safe
 version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
 and IE8 compatibility. Tests for this are in test/vendor.

 ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
*/

          exports = module.exports = stringify;
          exports.getSerialize = serializer;

          function indexOf(haystack, needle) {
            for (var i = 0; i < haystack.length; ++i) {
              if (haystack[i] === needle) return i;
            }
            return -1;
          }

          function stringify(obj, replacer, spaces, cycleReplacer) {
            return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
          }

          // https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
          function stringifyError(value) {
            var err = {
              // These properties are implemented as magical getters and don't show up in for in
              stack: value.stack,
              message: value.message,
              name: value.name
            };

            for (var i in value) {
              if (Object.prototype.hasOwnProperty.call(value, i)) {
                err[i] = value[i];
              }
            }

            return err;
          }

          function serializer(replacer, cycleReplacer) {
            var stack = [];
            var keys = [];

            if (cycleReplacer == null) {
              cycleReplacer = function(key, value) {
                if (stack[0] === value) {
                  return '[Circular ~]';
                }
                return (
                  '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']'
                );
              };
            }

            return function(key, value) {
              if (stack.length > 0) {
                var thisPos = indexOf(stack, this);
                ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
                ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);

                if (~indexOf(stack, value)) {
                  value = cycleReplacer.call(this, key, value);
                }
              } else {
                stack.push(value);
              }

              return replacer == null
                ? value instanceof Error ? stringifyError(value) : value
                : replacer.call(this, key, value);
            };
          }
        },
        {}
      ]
    },
    {},
    [4]
  )(4);
});
PK
!<0/�N�W�Wwebextension/build/shot.jsthis.shot = (function () {let exports={}; // Note: in this library we can't use any "system" dependencies because this can be used from multiple
// environments

/** Throws an error if the condition isn't true.  Any extra arguments after the condition
    are used as console.error() arguments. */
function assert(condition, ...args) {
  if (condition) {
    return;
  }
  console.error("Failed assertion", ...args);
  throw new Error(`Failed assertion: ${args.join(" ")}`);
}

/** True if `url` is a valid URL */
function isUrl(url) {
  // FIXME: this is rather naive, obviously
  if ((/^about:.{1,8000}$/i).test(url)) {
    return true;
  }
  if ((/^file:\/.{0,8000}$/i).test(url)) {
    return true;
  }
  if ((/^data:.*$/i).test(url)) {
    return true;
  }
  if ((/^chrome:.{0,8000}/i).test(url)) {
    return true;
  }
  if ((/^view-source:/i).test(url)) {
    return isUrl(url.substr("view-source:".length));
  }
  return (/^https?:\/\/[a-z0-9._-]{1,8000}[a-z0-9](:[0-9]{1,8000})?\/?/i).test(url);
}

function isValidClipImageUrl(url) {
    return isUrl(url) && !(url.indexOf(")") > -1);
}

function assertUrl(url) {
  if (!url) {
    throw new Error("Empty value is not URL");
  }
  if (!isUrl(url)) {
    const exc = new Error("Not a URL");
    exc.scheme = url.split(":")[0];
    throw exc;
  }
}

function isSecureWebUri(url) {
  return (/^https?:\/\/[a-z0-9._-]{1,8000}[a-z0-9](:[0-9]{1,8000})?\/?/i).test(url);
}

function assertOrigin(url) {
  assertUrl(url);
  if (url.search(/^https?:/i) !== -1) {
    const match = (/^https?:\/\/[^/:]{1,4000}\/?$/i).exec(url);
    if (!match) {
      throw new Error("Bad origin, might include path");
    }
  }
}

function originFromUrl(url) {
  if (!url) {
    return null;
  }
  if (url.search(/^https?:/i) === -1) {
    // Non-HTTP URLs don't have an origin
    return null;
  }
  const match = (/^https?:\/\/[^/:]{1,4000}/i).exec(url);
  if (match) {
    return match[0];
  }
  return null;
}

/** Check if the given object has all of the required attributes, and no extra
    attributes exception those in optional */
function checkObject(obj, required, optional) {
  if (typeof obj !== "object" || obj === null) {
    throw new Error("Cannot check non-object: " + (typeof obj) + " that is " + JSON.stringify(obj));
  }
  required = required || [];
  for (const attr of required) {
    if (!(attr in obj)) {
      return false;
    }
  }
  optional = optional || [];
  for (const attr in obj) {
    if (!required.includes(attr) && !optional.includes(attr)) {
      return false;
    }
  }
  return true;
}

/** Create a JSON object from a normal object, given the required and optional
    attributes (filtering out any other attributes).  Optional attributes are
    only kept when they are truthy. */
function jsonify(obj, required, optional) {
  required = required || [];
  const result = {};
  for (const attr of required) {
    result[attr] = obj[attr];
  }
  optional = optional || [];
  for (const attr of optional) {
    if (obj[attr]) {
      result[attr] = obj[attr];
    }
  }
  return result;
}

/** Resolve url relative to base */
function resolveUrl(base, url) {
  // FIXME: totally ad hoc and probably incorrect, but we can't
  // use any libraries in this file
  if (url.search(/^https?:/) !== -1) {
    // Absolute url
    return url;
  }
  if (url.indexOf("//") === 0) {
    // Protocol-relative URL
    return (/^https?:/i).exec(base)[0] + url;
  }
  if (url.indexOf("/") === 0) {
    // Domain-relative URL
    return (/^https?:\/\/[a-z0-9._-]{1,4000}/i).exec(base)[0] + url;
  }
  // Otherwise, a full relative URL
  while (url.indexOf("./") === 0) {
    url = url.substr(2);
  }
  if (!base) {
    // It's not an absolute URL, and we don't have a base URL, so we have
    // to throw away the URL
    return null;
  }
  let match = (/.*\//).exec(base)[0];
  if (match.search(/^https?:\/$/i) === 0) {
    // Domain without path
    match = match + "/";
  }
  return match + url;
}

/** True if the two objects look alike.  Null, undefined, and absent properties
    are all treated as equivalent.  Traverses objects and arrays */
function deepEqual(a, b) {
  if ((a === null || a === undefined) && (b === null || b === undefined)) {
    return true;
  }
  if (typeof a !== "object" || typeof b !== "object") {
    return a === b;
  }
  if (Array.isArray(a)) {
    if (!Array.isArray(b)) {
      return false;
    }
    if (a.length !== b.length) {
      return false;
    }
    for (let i = 0; i < a.length; i++) {
      if (!deepEqual(a[i], b[i])) {
        return false;
      }
    }
  }
  if (Array.isArray(b)) {
    return false;
  }
  const seen = new Set();
  for (const attr of Object.keys(a)) {
    if (!deepEqual(a[attr], b[attr])) {
      return false;
    }
    seen.add(attr);
  }
  for (const attr of Object.keys(b)) {
    if (!seen.has(attr)) {
      if (!deepEqual(a[attr], b[attr])) {
        return false;
      }
    }
  }
  return true;
}

function makeRandomId() {
  // Note: this isn't for secure contexts, only for non-conflicting IDs
  let id = "";
  while (id.length < 12) {
    let num;
    if (!id) {
      num = Date.now() % Math.pow(36, 3);
    } else {
      num = Math.floor(Math.random() * Math.pow(36, 3));
    }
    id += num.toString(36);
  }
  return id;
}

class AbstractShot {

  constructor(backend, id, attrs) {
    attrs = attrs || {};
    assert((/^[a-zA-Z0-9]{1,4000}\/[a-z0-9._-]{1,4000}$/).test(id), "Bad ID (should be alphanumeric):", JSON.stringify(id));
    this._backend = backend;
    this._id = id;
    this.origin = attrs.origin || null;
    this.fullUrl = attrs.fullUrl || null;
    if ((!attrs.fullUrl) && attrs.url) {
      console.warn("Received deprecated attribute .url");
      this.fullUrl = attrs.url;
    }
    if (this.origin && !isSecureWebUri(this.origin)) {
      this.origin = "";
    }
    if (this.fullUrl && !isSecureWebUri(this.fullUrl)) {
      this.fullUrl = "";
    }
    this.docTitle = attrs.docTitle || null;
    this.userTitle = attrs.userTitle || null;
    this.createdDate = attrs.createdDate || Date.now();
    this.favicon = attrs.favicon || null;
    this.siteName = attrs.siteName || null;
    this.images = [];
    if (attrs.images) {
      this.images = attrs.images.map(
        (json) => new this.Image(json));
    }
    this.openGraph = attrs.openGraph || null;
    this.twitterCard = attrs.twitterCard || null;
    this.documentSize = attrs.documentSize || null;
    this.thumbnail = attrs.thumbnail || null;
    this.abTests = attrs.abTests || null;
    this._clips = {};
    if (attrs.clips) {
      for (const clipId in attrs.clips) {
        const clip = attrs.clips[clipId];
        this._clips[clipId] = new this.Clip(this, clipId, clip);
      }
    }

    const isProd = typeof process !== "undefined" && process.env.NODE_ENV === "production";

    for (const attr in attrs) {
      if (attr !== "clips" && attr !== "id" && !this.REGULAR_ATTRS.includes(attr) && !this.DEPRECATED_ATTRS.includes(attr)) {
        if (isProd) {
          console.warn("Unexpected attribute: " + attr);
        } else {
          throw new Error("Unexpected attribute: " + attr);
        }
      } else if (attr === "id") {
        console.warn("passing id in attrs in AbstractShot constructor");
        console.trace();
        assert(attrs.id === this.id);
      }
    }
  }

  /** Update any and all attributes in the json object, with deep updating
      of `json.clips` */
  update(json) {
    const ALL_ATTRS = ["clips"].concat(this.REGULAR_ATTRS);
    assert(checkObject(json, [], ALL_ATTRS), "Bad attr to new Shot():", Object.keys(json));
    for (const attr in json) {
      if (attr === "clips") {
        continue;
      }
      if (typeof json[attr] === "object" && typeof this[attr] === "object" && this[attr] !== null) {
        let val = this[attr];
        if (val.asJson) {
          val = val.asJson();
        }
        if (!deepEqual(json[attr], val)) {
          this[attr] = json[attr];
        }
      } else if (json[attr] !== this[attr] &&
          (json[attr] || this[attr])) {
        this[attr] = json[attr];
      }
    }
    if (json.clips) {
      for (const clipId in json.clips) {
        if (!json.clips[clipId]) {
          this.delClip(clipId);
        } else if (!this.getClip(clipId)) {
          this.setClip(clipId, json.clips[clipId]);
        } else if (!deepEqual(this.getClip(clipId).asJson(), json.clips[clipId])) {
          this.setClip(clipId, json.clips[clipId]);
        }
      }
    }

  }

  /** Returns a JSON version of this shot */
  asJson() {
    const result = {};
    for (const attr of this.REGULAR_ATTRS) {
      let val = this[attr];
      if (val && val.asJson) {
        val = val.asJson();
      }
      result[attr] = val;
    }
    result.clips = {};
    for (const attr in this._clips) {
      result.clips[attr] = this._clips[attr].asJson();
    }
    return result;
  }

  /** A more minimal JSON representation for creating indexes of shots */
  asRecallJson() {
    const result = {clips: {}};
    for (const attr of this.RECALL_ATTRS) {
      let val = this[attr];
      if (val && val.asJson) {
        val = val.asJson();
      }
      result[attr] = val;
    }
    for (const name of this.clipNames()) {
      result.clips[name] = this.getClip(name).asJson();
    }
    return result;
  }

  get backend() {
    return this._backend;
  }

  get id() {
    return this._id;
  }

  get url() {
    return this.fullUrl || this.origin;
  }
  set url(val) {
    throw new Error(".url is read-only");
  }

  get fullUrl() {
    return this._fullUrl;
  }
  set fullUrl(val) {
    if (val) {
      assertUrl(val);
    }
    this._fullUrl = val || undefined;
  }

  get origin() {
    return this._origin;
  }
  set origin(val) {
    if (val) {
      assertOrigin(val);
    }
    this._origin = val || undefined;
  }

  get filename() {
    let filenameTitle = this.title;
    const date = new Date(this.createdDate);
    // eslint-disable-next-line no-control-regex
    filenameTitle = filenameTitle.replace(/[:\\<>/!@&?"*.|\x00-\x1F]/g, " ");
    filenameTitle = filenameTitle.replace(/\s{1,4000}/g, " ");
    let clipFilename = `Screenshot-${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${filenameTitle}`;
    const clipFilenameBytesSize = clipFilename.length * 2; // JS STrings are UTF-16
    if (clipFilenameBytesSize > 251) { // 255 bytes (Usual filesystems max) - 4 for the ".png" file extension string
      const excedingchars = (clipFilenameBytesSize - 246) / 2; // 251 - 5 for ellipsis "[...]"
      clipFilename = clipFilename.substring(0, clipFilename.length - excedingchars);
      clipFilename = clipFilename + "[...]";
    }
    const clip = this.getClip(this.clipNames()[0]);
    let extension = ".png";
    if (clip && clip.image && clip.image.type) {
      if (clip.image.type === "jpeg") {
        extension = ".jpg";
      }
    }
    return clipFilename + extension;
  }

  get urlDisplay() {
    if (!this.url) {
      return null;
    }
    if (/^https?:\/\//i.test(this.url)) {
      let txt = this.url;
      txt = txt.replace(/^[a-z]{1,4000}:\/\//i, "");
      txt = txt.replace(/\/.{0,4000}/, "");
      txt = txt.replace(/^www\./i, "");
      return txt;
    } else if (this.url.startsWith("data:")) {
      return "data:url";
    }
    let txt = this.url;
    txt = txt.replace(/\?.{0,4000}/, "");
    return txt;
  }

  get viewUrl() {
    const url = this.backend + "/" + this.id;
    return url;
  }

  get creatingUrl() {
    let url = `${this.backend}/creating/${this.id}`;
    url += `?title=${encodeURIComponent(this.title || "")}`;
    url += `&url=${encodeURIComponent(this.url)}`;
    return url;
  }

  get jsonUrl() {
    return this.backend + "/data/" + this.id;
  }

  get oembedUrl() {
    return this.backend + "/oembed?url=" + encodeURIComponent(this.viewUrl);
  }

  get docTitle() {
    return this._title;
  }
  set docTitle(val) {
    assert(val === null || typeof val === "string", "Bad docTitle:", val);
    this._title = val;
  }

  get openGraph() {
    return this._openGraph || null;
  }
  set openGraph(val) {
    assert(val === null || typeof val === "object", "Bad openGraph:", val);
    if (val) {
      assert(checkObject(val, [], this._OPENGRAPH_PROPERTIES), "Bad attr to openGraph:", Object.keys(val));
      this._openGraph = val;
    } else {
      this._openGraph = null;
    }
  }

  get twitterCard() {
    return this._twitterCard || null;
  }
  set twitterCard(val) {
    assert(val === null || typeof val === "object", "Bad twitterCard:", val);
    if (val) {
      assert(checkObject(val, [], this._TWITTERCARD_PROPERTIES), "Bad attr to twitterCard:", Object.keys(val));
      this._twitterCard = val;
    } else {
      this._twitterCard = null;
    }
  }

  get userTitle() {
    return this._userTitle;
  }
  set userTitle(val) {
    assert(val === null || typeof val === "string", "Bad userTitle:", val);
    this._userTitle = val;
  }

  get title() {
    // FIXME: we shouldn't support both openGraph.title and ogTitle
    const ogTitle = this.openGraph && this.openGraph.title;
    const twitterTitle = this.twitterCard && this.twitterCard.title;
    let title = this.userTitle || ogTitle || twitterTitle || this.docTitle || this.url;
    if (Array.isArray(title)) {
      title = title[0];
    }
    if (!title) {
      title = "Screenshot";
    }
    return title;
  }

  get createdDate() {
    return this._createdDate;
  }
  set createdDate(val) {
    assert(val === null || typeof val === "number", "Bad createdDate:", val);
    this._createdDate = val;
  }

  get favicon() {
    return this._favicon;
  }
  set favicon(val) {
    // We allow but ignore bad favicon URLs, as they seem somewhat common
    val = val || null;
    if (!isUrl(val)) {
      val = null;
    }
    if (val) {
      val = resolveUrl(this.url, val);
    }
    this._favicon = val;
  }

  clipNames() {
    const names = Object.getOwnPropertyNames(this._clips);
    names.sort(function(a, b) {
      return a.sortOrder < b.sortOrder ? 1 : 0;
    });
    return names;
  }
  getClip(name) {
    return this._clips[name];
  }
  addClip(val) {
    const name = makeRandomId();
    this.setClip(name, val);
    return name;
  }
  setClip(name, val) {
    const clip = new this.Clip(this, name, val);
    this._clips[name] = clip;
  }
  delClip(name) {
    if (!this._clips[name]) {
      throw new Error("No existing clip with id: " + name);
    }
    delete this._clips[name];
  }
  delAllClips() {
    this._clips = {};
  }
  biggestClipSortOrder() {
    let biggest = 0;
    for (const clipId in this._clips) {
      biggest = Math.max(biggest, this._clips[clipId].sortOrder);
    }
    return biggest;
  }
  updateClipUrl(clipId, clipUrl) {
    const clip = this.getClip(clipId);
    if ( clip && clip.image ) {
      clip.image.url = clipUrl;
    } else {
      console.warn("Tried to update the url of a clip with no image:", clip);
    }
  }

  get siteName() {
    return this._siteName || null;
  }
  set siteName(val) {
    assert(typeof val === "string" || !val);
    this._siteName = val;
  }

  get documentSize() {
    return this._documentSize;
  }
  set documentSize(val) {
    assert(typeof val === "object" || !val);
    if (val) {
      assert(checkObject(val, ["height", "width"], "Bad attr to documentSize:", Object.keys(val)));
      assert(typeof val.height === "number");
      assert(typeof val.width === "number");
      this._documentSize = val;
    } else {
      this._documentSize = null;
    }
  }

  get thumbnail() {
    return this._thumbnail;
  }
  set thumbnail(val) {
    assert(typeof val === "string" || !val);
    if (val) {
      assert(isUrl(val));
      this._thumbnail = val;
    } else {
      this._thumbnail = null;
    }
  }

  get abTests() {
    return this._abTests;
  }
  set abTests(val) {
    if (val === null || val === undefined) {
      this._abTests = null;
      return;
    }
    assert(typeof val === "object", "abTests should be an object, not:", typeof val);
    assert(!Array.isArray(val), "abTests should not be an Array");
    for (const name in val) {
      assert(val[name] && typeof val[name] === "string", `abTests.${name} should be a string:`, typeof val[name]);
    }
    this._abTests = val;
  }

}

AbstractShot.prototype.REGULAR_ATTRS = (`
origin fullUrl docTitle userTitle createdDate favicon images
siteName openGraph twitterCard documentSize
thumbnail abTests
`).split(/\s+/g);

// Attributes that will be accepted in the constructor, but ignored/dropped
AbstractShot.prototype.DEPRECATED_ATTRS = (`
microdata history ogTitle createdDevice head body htmlAttrs bodyAttrs headAttrs
readable hashtags comments showPage isPublic resources deviceId url
fullScreenThumbnail
`).split(/\s+/g);

AbstractShot.prototype.RECALL_ATTRS = (`
url docTitle userTitle createdDate favicon
openGraph twitterCard images thumbnail
`).split(/\s+/g);

AbstractShot.prototype._OPENGRAPH_PROPERTIES = (`
title type url image audio description determiner locale site_name video
image:secure_url image:type image:width image:height
video:secure_url video:type video:width image:height
audio:secure_url audio:type
article:published_time article:modified_time article:expiration_time article:author article:section article:tag
book:author book:isbn book:release_date book:tag
profile:first_name profile:last_name profile:username profile:gender
`).split(/\s+/g);

AbstractShot.prototype._TWITTERCARD_PROPERTIES = (`
card site title description image
player player:width player:height player:stream player:stream:content_type
`).split(/\s+/g);

/** Represents one found image in the document (not a clip) */
class _Image {
  // FIXME: either we have to notify the shot of updates, or make
  // this read-only
  constructor(json) {
    assert(typeof json === "object", "Clip Image given a non-object", json);
    assert(checkObject(json, ["url"], ["dimensions", "title", "alt"]), "Bad attrs for Image:", Object.keys(json));
    assert(isUrl(json.url), "Bad Image url:", json.url);
    this.url = json.url;
    assert((!json.dimensions) ||
           (typeof json.dimensions.x === "number" && typeof json.dimensions.y === "number"),
           "Bad Image dimensions:", json.dimensions);
    this.dimensions = json.dimensions;
    assert(typeof json.title === "string" || !json.title, "Bad Image title:", json.title);
    this.title = json.title;
    assert(typeof json.alt === "string" || !json.alt, "Bad Image alt:", json.alt);
    this.alt = json.alt;
  }

  asJson() {
    return jsonify(this, ["url"], ["dimensions"]);
  }
}

AbstractShot.prototype.Image = _Image;

/** Represents a clip, either a text or image clip */
class _Clip {
  constructor(shot, id, json) {
    this._shot = shot;
    assert(checkObject(json, ["createdDate", "image"], ["sortOrder"]), "Bad attrs for Clip:", Object.keys(json));
    assert(typeof id === "string" && id, "Bad Clip id:", id);
    this._id = id;
    this.createdDate = json.createdDate;
    if ("sortOrder" in json) {
      assert(typeof json.sortOrder === "number" || !json.sortOrder, "Bad Clip sortOrder:", json.sortOrder);
    }
    if ("sortOrder" in json) {
      this.sortOrder = json.sortOrder;
    } else {
      const biggestOrder = shot.biggestClipSortOrder();
      this.sortOrder = biggestOrder + 100;
    }
    this.image = json.image;
  }

  toString() {
    return `[Shot Clip id=${this.id} sortOrder=${this.sortOrder} image ${this.image.dimensions.x}x${this.image.dimensions.y}]`;
  }

  asJson() {
    return jsonify(this, ["createdDate"], ["sortOrder", "image"]);
  }

  get id() {
    return this._id;
  }

  get createdDate() {
    return this._createdDate;
  }
  set createdDate(val) {
    assert(typeof val === "number" || !val, "Bad Clip createdDate:", val);
    this._createdDate = val;
  }

  get image() {
    return this._image;
  }
  set image(image) {
    if (!image) {
      this._image = undefined;
      return;
    }
    assert(checkObject(image, ["url"], ["dimensions", "text", "location", "captureType", "type"]), "Bad attrs for Clip Image:", Object.keys(image));
    assert(isValidClipImageUrl(image.url), "Bad Clip image URL:", image.url);
    assert(
      image.captureType === "madeSelection" ||
      image.captureType === "selection" ||
      image.captureType === "visible" ||
      image.captureType === "auto" ||
      image.captureType === "fullPage" ||
      image.captureType === "fullPageTruncated" ||
      !image.captureType, "Bad image.captureType:", image.captureType);
    assert(typeof image.text === "string" || !image.text, "Bad Clip image text:", image.text);
    if (image.dimensions) {
      assert(typeof image.dimensions.x === "number" && typeof image.dimensions.y === "number", "Bad Clip image dimensions:", image.dimensions);
    }
    if (image.type) {
      assert(image.type === "png" || image.type === "jpeg", "Unexpected image type:", image.type);
    }
    assert(image.location &&
      typeof image.location.left === "number" &&
      typeof image.location.right === "number" &&
      typeof image.location.top === "number" &&
      typeof image.location.bottom === "number", "Bad Clip image pixel location:", image.location);
    if (image.location.topLeftElement || image.location.topLeftOffset ||
        image.location.bottomRightElement || image.location.bottomRightOffset) {
      assert(typeof image.location.topLeftElement === "string" &&
        image.location.topLeftOffset &&
        typeof image.location.topLeftOffset.x === "number" &&
        typeof image.location.topLeftOffset.y === "number" &&
        typeof image.location.bottomRightElement === "string" &&
        image.location.bottomRightOffset &&
        typeof image.location.bottomRightOffset.x === "number" &&
        typeof image.location.bottomRightOffset.y === "number",
        "Bad Clip image element location:", image.location);
    }
    this._image = image;
  }

  isDataUrl() {
    if (this.image) {
      return this.image.url.startsWith("data:");
    }
    return false;
  }

  get sortOrder() {
    return this._sortOrder || null;
  }
  set sortOrder(val) {
    assert(typeof val === "number" || !val, "Bad Clip sortOrder:", val);
    this._sortOrder = val;
  }

}

AbstractShot.prototype.Clip = _Clip;

if (typeof exports !== "undefined") {
  exports.AbstractShot = AbstractShot;
  exports.originFromUrl = originFromUrl;
  exports.isValidClipImageUrl = isValidClipImageUrl;
}

return exports;
})();
null;

PK
!<B�ƞ�(webextension/build/thumbnailGenerator.jsthis.thumbnailGenerator = (function () {let exports={}; // This is used in addon/webextension/background/takeshot.js,
// server/src/pages/shot/controller.js, and
// server/scr/pages/shotindex/view.js. It is used in a browser
// environment.

// Resize down 1/2 at a time produces better image quality.
// Not quite as good as using a third-party filter (which will be
// slower), but good enough.
const maxResizeScaleFactor = 0.5

// The shot will be scaled or cropped down to 210px on x, and cropped or
// scaled down to a maximum of 280px on y.
// x: 210
// y: <= 280
const maxThumbnailWidth = 210;
const maxThumbnailHeight = 280;

/**
 * @param {int} imageHeight Height in pixels of the original image.
 * @param {int} imageWidth Width in pixels of the original image.
 * @returns {width, height, scaledX, scaledY}
 */
function getThumbnailDimensions(imageWidth, imageHeight) {
  const displayAspectRatio = 3 / 4;
  const imageAspectRatio = imageWidth / imageHeight;
  let thumbnailImageWidth, thumbnailImageHeight;
  let scaledX, scaledY;

  if (imageAspectRatio > displayAspectRatio) {
    // "Landscape" mode
    // Scale on y, crop on x
    const yScaleFactor = (imageHeight > maxThumbnailHeight) ? (maxThumbnailHeight / imageHeight) : 1.0;
    thumbnailImageHeight = scaledY = Math.round(imageHeight * yScaleFactor);
    scaledX = Math.round(imageWidth * yScaleFactor);
    thumbnailImageWidth = Math.min(scaledX, maxThumbnailWidth);
  } else {
    // "Portrait" mode
    // Scale on x, crop on y
    const xScaleFactor = (imageWidth > maxThumbnailWidth) ? (maxThumbnailWidth / imageWidth) : 1.0;
    thumbnailImageWidth = scaledX = Math.round(imageWidth * xScaleFactor);
    scaledY = Math.round(imageHeight * xScaleFactor);
    // The CSS could widen the image, in which case we crop more off of y.
    thumbnailImageHeight = Math.min(scaledY, maxThumbnailHeight,
                                    maxThumbnailHeight / (maxThumbnailWidth / imageWidth));
  }

  return {
    width: thumbnailImageWidth,
    height: thumbnailImageHeight,
    scaledX,
    scaledY
  }
}

/**
 * @param {dataUrl} String Data URL of the original image.
 * @param {int} imageHeight Height in pixels of the original image.
 * @param {int} imageWidth Width in pixels of the original image.
 * @param {String} urlOrBlob 'blob' for a blob, otherwise data url.
 * @returns A promise that resolves to the data URL or blob of the thumbnail image, or null.
 */
function createThumbnail(dataUrl, imageWidth, imageHeight, urlOrBlob) {
  // There's cost associated with generating, transmitting, and storing
  // thumbnails, so we'll opt out if the image size is below a certain threshold
  const thumbnailThresholdFactor = 1.20;
  const thumbnailWidthThreshold = maxThumbnailWidth * thumbnailThresholdFactor;
  const thumbnailHeightThreshold = maxThumbnailHeight * thumbnailThresholdFactor;

  if (imageWidth <= thumbnailWidthThreshold &&
      imageHeight <= thumbnailHeightThreshold) {
    // Do not create a thumbnail.
    return Promise.resolve(null);
  }

  const thumbnailDimensions = getThumbnailDimensions(imageWidth, imageHeight);

  return new Promise((resolve, reject) => {
    const thumbnailImage = new Image();
    let srcWidth = imageWidth;
    let srcHeight = imageHeight;
    let destWidth, destHeight;

    thumbnailImage.onload = function() {
      destWidth = Math.round(srcWidth * maxResizeScaleFactor);
      destHeight = Math.round(srcHeight * maxResizeScaleFactor);
      if (destWidth <= thumbnailDimensions.scaledX || destHeight <= thumbnailDimensions.scaledY) {
        srcWidth = Math.round(srcWidth * (thumbnailDimensions.width / thumbnailDimensions.scaledX));
        srcHeight = Math.round(srcHeight * (thumbnailDimensions.height / thumbnailDimensions.scaledY));
        destWidth = thumbnailDimensions.width;
        destHeight = thumbnailDimensions.height;
      }

      const thumbnailCanvas = document.createElement("canvas");
      thumbnailCanvas.width = destWidth;
      thumbnailCanvas.height = destHeight;
      const ctx = thumbnailCanvas.getContext("2d");
      ctx.imageSmoothingEnabled = false;

      ctx.drawImage(
        thumbnailImage,
        0, 0, srcWidth, srcHeight,
        0, 0, destWidth, destHeight);

      if (thumbnailCanvas.width <= thumbnailDimensions.width ||
        thumbnailCanvas.height <= thumbnailDimensions.height) {
        if (urlOrBlob === "blob") {
          thumbnailCanvas.toBlob((blob) => {
            resolve(blob);
          });
        } else {
          resolve(thumbnailCanvas.toDataURL("image/png"))
        }
        return;
      }

      srcWidth = destWidth;
      srcHeight = destHeight;
      thumbnailImage.src = thumbnailCanvas.toDataURL();
    }
    thumbnailImage.src = dataUrl;
  });
}

function createThumbnailUrl(shot) {
  const image = shot.getClip(shot.clipNames()[0]).image;
  if (!image.url) {
    return Promise.resolve(null);
  }
  return createThumbnail(
    image.url, image.dimensions.x, image.dimensions.y, "dataurl");
}

function createThumbnailBlobFromPromise(shot, blobToUrlPromise) {
  return blobToUrlPromise.then(dataUrl => {
    const image = shot.getClip(shot.clipNames()[0]).image;
    return createThumbnail(
      dataUrl, image.dimensions.x, image.dimensions.y, "blob");
  });
}

if (typeof exports !== "undefined") {
  exports.getThumbnailDimensions = getThumbnailDimensions;
  exports.createThumbnailUrl = createThumbnailUrl;
  exports.createThumbnailBlobFromPromise = createThumbnailBlobFromPromise;
}

return exports;
})();
null;

PK
!<4<۷��webextension/catcher.js"use strict";

// eslint-disable-next-line no-var
var global = this;

this.catcher = (function() {
  const exports = {};

  let handler;

  let queue = [];

  const log = global.log;

  exports.unhandled = function(error, info) {
    if (!error.noReport) {
      log.error("Unhandled error:", error, info);
    }
    const e = makeError(error, info);
    if (!handler) {
      queue.push(e);
    } else {
      handler(e);
    }
  };

  /** Turn an exception into an error object */
  function makeError(exc, info) {
    let result;
    if (exc.fromMakeError) {
      result = exc;
    } else {
      result = {
        fromMakeError: true,
        name: exc.name || "ERROR",
        message: String(exc),
        stack: exc.stack
      };
      for (const attr in exc) {
        result[attr] = exc[attr];
      }
    }
    if (info) {
      for (const attr of Object.keys(info)) {
        result[attr] = info[attr];
      }
    }
    return result;
  }

  /** Wrap the function, and if it raises any exceptions then call unhandled() */
  exports.watchFunction = function watchFunction(func, quiet) {
    return function() {
      try {
        return func.apply(this, arguments);
      } catch (e) {
        if (!quiet) {
          exports.unhandled(e);
        }
        throw e;
      }
    };
  };

  exports.watchPromise = function watchPromise(promise, quiet) {
    return promise.catch((e) => {
      if (quiet) {
        if (!e.noReport) {
          log.debug("------Error in promise:", e);
          log.debug(e.stack);
        }
      } else {
        if (!e.noReport) {
          log.error("------Error in promise:", e);
          log.error(e.stack);
        }
        exports.unhandled(makeError(e));
      }
      throw e;
    });
  };

  exports.registerHandler = function(h) {
    if (handler) {
      log.error("registerHandler called after handler was already registered");
      return;
    }
    handler = h;
    for (const error of queue) {
      handler(error);
    }
    queue = [];
  };

  return exports;
})();
null;
PK
!<d����webextension/clipboard.js/* globals catcher, assertIsBlankDocument */

"use strict";

this.clipboard = (function() {
  const exports = {};

  exports.copy = function(text) {
    return new Promise((resolve, reject) => {
      const element = document.createElement("iframe");
      element.src = browser.extension.getURL("blank.html");
      // We can't actually hide the iframe while copying, but we can make
      // it close to invisible:
      element.style.opacity = "0";
      element.style.width = "1px";
      element.style.height = "1px";
      element.addEventListener("load", catcher.watchFunction(() => {
        try {
          const doc = element.contentDocument;
          assertIsBlankDocument(doc);
          const el = doc.createElement("textarea");
          doc.body.appendChild(el);
          el.value = text;
          if (!text) {
            const exc = new Error("Clipboard copy given empty text");
            exc.noPopup = true;
            catcher.unhandled(exc);
          }
          el.select();
          if (doc.activeElement !== el) {
            const unhandledTag = doc.activeElement ? doc.activeElement.tagName : "No active element";
            const exc = new Error("Clipboard el.select failed");
            exc.activeElement = unhandledTag;
            exc.noPopup = true;
            catcher.unhandled(exc);
          }
          const copied = doc.execCommand("copy");
          if (!copied) {
            catcher.unhandled(new Error("Clipboard copy failed"));
          }
          el.remove();
          resolve(copied);
        } finally {
          element.remove();
        }
      }), {once: true});
      document.body.appendChild(element);
    });
  };

  return exports;
})();
null;
PK
!<�s�`00webextension/domainFromUrl.js/** Returns the domain of a URL, but safely and in ASCII; URLs without domains
    (such as about:blank) return the scheme, Unicode domains get stripped down
    to ASCII */

"use strict";

this.domainFromUrl = (function() {

  return function urlDomainForId(location) { // eslint-disable-line no-unused-vars
    let domain = location.hostname;
    if (!domain) {
      domain = location.origin.split(":")[0];
      if (!domain) {
        domain = "unknown";
      }
    }
    if (domain.search(/^[a-z0-9._-]{1,1000}$/i) === -1) {
      // Probably a unicode domain; we could use punycode but it wouldn't decode
      // well in the URL anyway.  Instead we'll punt.
      domain = domain.replace(/[^a-z0-9._-]/ig, "");
      if (!domain) {
        domain = "site";
      }
    }
    return domain;
  };

})();
null;
PK
!<����%webextension/icons/back-highlight.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="#009ec0" d="M18.8 8.5H4.2l5.4-5.4c.5-.5.5-1.2 0-1.8s-1.2-.5-1.8 0L.4 8.9c-.5.5-.5 1.2 0 1.8l7.5 7.5c.2.2.5.4.9.4s.6-.1.9-.4c.5-.5.5-1.2 0-1.8L4.2 11h14.5c.8 0 1.2-.5 1.2-1.2s-.4-1.3-1.1-1.3z"/></svg>PK
!<0��webextension/icons/back.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="#3d3d40" d="M18.8 8.5H4.2l5.4-5.4c.5-.5.5-1.2 0-1.8s-1.2-.5-1.8 0L.4 8.9c-.5.5-.5 1.2 0 1.8l7.5 7.5c.2.2.5.4.9.4s.6-.1.9-.4c.5-.5.5-1.2 0-1.8L4.2 11h14.5c.8 0 1.2-.5 1.2-1.2s-.4-1.3-1.1-1.3z"/></svg>PK
!<S�:(((webextension/icons/cancel.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M10.5 8.7L5.2 3.3c-.5-.5-1.3-.5-1.8 0s-.5 1.3 0 1.8l5.3 5.3-5.3 5.3c-.5.5-.5 1.3 0 1.8s1.3.5 1.8 0l5.3-5.3 5.3 5.3c.5.5 1.3.5 1.8 0s.5-1.3 0-1.8l-5.3-5.3 5.3-5.3c.5-.5.5-1.3 0-1.8s-1.3-.5-1.8 0l-5.3 5.4z" fill="#3e3d40"/></svg>PK
!<�26GYYwebextension/icons/cloud.svg<svg width="20" height="18" xmlns="http://www.w3.org/2000/svg"><g fill="#FFF" fill-rule="evenodd"><path d="M15 5.6h-.3C14.5 2.7 12 .5 9.2.5c-3 0-5.4 2.4-5.5 5.3C1.5 6.4 0 8.3 0 10.6c0 2.8 2.2 5 5 5a1 1 0 0 0 1-1v-.1a1 1 0 0 0-1-1c-1.7 0-3-1.3-3-3 0-1.3.8-2.5 2.2-2.9l1.4-.4.1-1.4c.1-1.9 1.6-3.3 3.5-3.3 1.8 0 3.4 1.4 3.5 3.2l.1 1.8h2.1c1.7 0 3 1.3 3 3s-1.3 3-3 3h-1.85a1.05 1.05 0 1 0 0 2.1H15c2.8 0 5-2.2 5-5s-2.2-5-5-5z" fill-rule="nonzero"/><path d="M10 11.414V17c0 .667-.333 1-1 1s-1-.333-1-1v-5.586l-.293.293a1 1 0 1 1-1.414-1.414L9 7.586l2.707 2.707a1 1 0 0 1-1.414 1.414L10 11.414z"/></g></svg>PK
!<I4�)��webextension/icons/copy.png�PNG


IHDR``�F�
#PLTEFFF@=B>>A?>@?>@>=@?>AUUU@>B?>@DDD?>@?>@>=A?>A?>A?>ADDD>>@@@H??A@@G@@`@@C?>A?>A?>@?=A?>@���@>@?>@NNN?>@fff>>A>>@CCC>>@KKKCCC?>A>>A?>AAAA@@F���>>@>>A>=AIII??@>>@>>B@=B>>@>>A?>@BBB?=AIII??B>>A?>@?>A?=A?>@?>A?=A@@D@@�?=A>>@?=@@=BUUU?>A@>@??A??B??C>>A??A?>@??A>=A>>@CCC?>@?=A>=@?=@CCC>=A@>B?>A��!�atRNSp���|���ȝ��"� f$L�����g�
���&�*���3,����o�lJ�#�m�˽���@�ޯ`	�[�I=�j�z��.���݀�Tw�IDATxb@{�`�Eax�ֵ��6culۜ�$b\���}NX���q=?)�E�L<��˃���2�U��®�v���?*K��|��U�U��F�"�PpD+p�(�8PR�1ZsW@Y����t{��
�*`���VU{�P	طP
X�h,j�5�,z�+mu�?�z���
���ܒ���\�ؒY�����C2�Bd���8B�B4����cL0�L0�@3�D0�@3�D0�@3t�qL�=&(��@�$Ԁ�ڡ���gΞ�Ou^��	0�H������K+��[�\�r�P�H�k�o�cvƀ�����[�-r�6 K���]ˀȽˀ��}P�e �V@<�	����@1.�(-qr
q<�Tx�%Qs*�<�H��_��T*���z	m��^A�ˁ�P�u�w�2��7ДOKX�˚N�˽��ݕͤ%R�o�� ^�﹎|��E�
]�S�IEND�B`�PK
!<�?�zzwebextension/icons/copy.svg<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#3e3d40" d="M14.707 8.293l-3-3A1 1 0 0 0 11 5h-1V4a1 1 0 0 0-.293-.707l-3-3A1 1 0 0 0 6 0H3a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h3v3a2 2 0 0 0 2 2h5a2 2 0 0 0 2-2V9a1 1 0 0 0-.293-.707zM12.586 9H11V7.414zm-5-5H6V2.414zM6 7v2H3V2h2v2.5a.5.5 0 0 0 .5.5H8a2 2 0 0 0-2 2zm2 7V7h2v2.5a.5.5 0 0 0 .5.5H13v4z"/></svg>PK
!<*����webextension/icons/done.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M19.5 4c-.6-.6-1.6-.6-2.2 0l-10 10-4.6-4.6c-.6-.6-1.6-.6-2.2 0-.6.6-.6 1.6 0 2.2l5.8 5.8c.3.3.7.5 1.1.5.4 0 .8-.2 1.1-.5l11-11.1c.7-.6.7-1.6 0-2.3z" fill="#009ec0"/></svg>PK
!<�f&�ZZwebextension/icons/download.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M9.1 12L4.9 7.9c-.5-.5-1.3-.5-1.8 0s-.5 1.3 0 1.8l6.2 6.2c.5.5 1.3.5 1.8 0l6.2-6.2c.5-.5.5-1.3 0-1.8s-1.3-.5-1.8 0L11.6 12V1.2C11.6.6 11 0 10.3 0c-.7 0-1.2.6-1.2 1.2V12zM4 20c-.7 0-1.2-.6-1.2-1.2s.6-1.2 1.2-1.2h12.5c.7 0 1.2.6 1.2 1.2s-.5 1.2-1.2 1.2H4z" fill="#3e3d40"/></svg>PK
!<�ҫ

webextension/icons/help-16.svg<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="rgba(249, 249, 250, .8)" d="M8 1a7 7 0 1 0 7 7 7.008 7.008 0 0 0-7-7zm0 13a6 6 0 1 1 6-6 6.007 6.007 0 0 1-6 6zM8 3.125A2.7 2.7 0 0 0 5.125 6a.875.875 0 0 0 1.75 0c0-1 .6-1.125 1.125-1.125a1.105 1.105 0 0 1 1.13.744.894.894 0 0 1-.53 1.016A2.738 2.738 0 0 0 7.125 9v.337a.875.875 0 0 0 1.75 0v-.37a1.041 1.041 0 0 1 .609-.824A2.637 2.637 0 0 0 10.82 5.16 2.838 2.838 0 0 0 8 3.125zm0 7.625A1.25 1.25 0 1 0 9.25 12 1.25 1.25 0 0 0 8 10.75z"/></svg>PK
!<h.�SS+webextension/icons/icon-highlight-32-v2.svg<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg"><path d="M8 2a4 4 0 0 0-4 4h4V2zm12 0h-4v4h4V2zm8 0v4h4a4 4 0 0 0-4-4zM14 2h-4v4h4V2zm12 0h-4v4h4V2zm2 10h4V8h-4v4zm0 12a4 4 0 0 0 4-4h-4v4zm0-6h4v-4h-4v4zm-.882-4.334a4 4 0 0 0-5.57-.984l-7.67 5.662-3.936-2.76c.031-.193.05-.388.058-.584a4.976 4.976 0 0 0-2-3.978V8H4v2.1a5 5 0 1 0 3.916 8.948l2.484 1.738-2.8 1.964a4.988 4.988 0 1 0 2.3 3.266l17.218-12.35zM5 17.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm0 12a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm10.8-4.858l6.034 4.6a4 4 0 0 0 5.57-.984L19.28 22.2l-3.48 2.442z" fill="#989898"/></svg>PK
!<b��||webextension/icons/icon-v2.svg<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M8 2a4 4 0 0 0-4 4h4V2zm12 0h-4v4h4V2zm8 0v4h4a4 4 0 0 0-4-4zM14 2h-4v4h4V2zm12 0h-4v4h4V2zm2 10h4V8h-4v4zm0 12a4 4 0 0 0 4-4h-4v4zm0-6h4v-4h-4v4zm-.882-4.334a4 4 0 0 0-5.57-.984l-7.67 5.662-3.936-2.76c.031-.193.05-.388.058-.584a4.976 4.976 0 0 0-2-3.978V8H4v2.1a5 5 0 1 0 3.916 8.948l2.484 1.738-2.8 1.964a4.988 4.988 0 1 0 2.3 3.266l17.218-12.35zM5 17.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm0 12a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm10.8-4.858l6.034 4.6a4 4 0 0 0 5.57-.984L19.28 22.2l-3.48 2.442z"/></svg>PK
!<�9���5webextension/icons/icon-welcome-face-without-eyes.svg<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><style>.st0{fill:#fff}</style><g id="Visual-design"><g id="_x31_.2-Div-selection" transform="translate(-575 -503)"><g id="Introduction" transform="translate(250 503)"><g id="icon-welcomeface" transform="translate(325)"><g id="Layer_1_1_"><path id="Shape" class="st0" d="M11.4.9v2.9h-6c-.9 0-1.5.8-1.5 1.5v6H.8V3.8C.8 2.1 2.2.7 3.9.7h7.6v.2h-.1z"/><path id="Shape_1_" class="st0" d="M63.2 11.4h-3.1v-6c0-.8-.6-1.5-1.5-1.5h-6v-3h7.6c1.7 0 3.1 1.4 3.1 3.1l-.1 7.4z"/><path id="Shape_2_" class="st0" d="M52.6 63.2v-3.1h6c.9 0 1.5-.6 1.5-1.5v-6h3.1v7.6c0 1.7-1.4 3.1-3.1 3.1l-7.5-.1z"/><path id="Shape_3_" class="st0" d="M.8 52.7h3.1v6c0 .9.6 1.5 1.5 1.5h6v3.1H3.8c-1.7 0-3.1-1.4-3.1-3.1l.1-7.5z"/><path id="Shape_6_" class="st0" d="M33.3 49.2H33c-4.6-.1-7.8-3.6-7.9-3.8-.6-.8-.6-2 .1-2.7.8-.8 1.9-.6 2.6.1 0 0 2.3 2.6 5.2 2.6 1.8 0 3.6-.9 5.2-2.6.8-.8 1.9-.8 2.7 0s.8 1.9 0 2.7c-2.2 2.4-4.9 3.7-7.6 3.7z"/></g></g></g></g></g></svg>PK
!<�4�^PP$webextension/icons/menu-fullpage.svg<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 46 46"><style>.st2{fill:#004c66}</style><path id="bg" d="M7 42h32V5.1H7z" fill="#00fdff"/><g id="frame" transform="translate(0 6)"><path d="M40 5c.5 0 1 .4 1 1v24c0 .5-.5 1-1 1H6c-.6 0-1-.5-1-1V6c0-.6.4-1 1-1h34zM7 29h32V7H7v22z" fill="#3e3d40"/><path id="Fill-4" class="st2" d="M7 7h32V5H7z"/><path id="Fill-6" class="st2" d="M7 31h32v-2H7z"/></g><path id="dash" d="M38 11h1V9h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm-1 1h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-2-3H7v3h2v-1H8v-2zm-1-1h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1V9H7v2zm2-6H7v3h1V6h1V5zm1 1h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm5-1h-2v1h1v2h1V5z" fill="#00d1e6"/></svg>PK
!<$v��YY(webextension/icons/menu-myshot-white.svg<svg width="40" height="40" viewBox="0 0 46 46" xmlns="http://www.w3.org/2000/svg"><path d="M11 11.995a1 1 0 0 1 .995-.995h23.01a1 1 0 0 1 .995.995v23.01a1 1 0 0 1-.995.995h-23.01a1 1 0 0 1-.995-.995v-23.01zM11 25v-2h7v2h-7zm9-5h7v-2h-7v2zm9 5h7v-2h-7v2zm-9 4h7v-2h-7v2zm-2-18h2v25h-2V11zm9 0h2v25h-2V11z" fill="#FFF" fill-rule="evenodd"/></svg>PK
!< P�HH"webextension/icons/menu-myshot.svg<svg width="46" height="46" xmlns="http://www.w3.org/2000/svg"><path d="M11 11.995a1 1 0 0 1 .995-.995h23.01a1 1 0 0 1 .995.995v23.01a1 1 0 0 1-.995.995h-23.01a1 1 0 0 1-.995-.995v-23.01zM11 25v-2h7v2h-7zm9-5h7v-2h-7v2zm9 5h7v-2h-7v2zm-9 4h7v-2h-7v2zm-2-18h2v25h-2V11zm9 0h2v25h-2V11z" fill="#3E3D40" fill-rule="evenodd"/></svg>PK
!<�i��#webextension/icons/menu-visible.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 46 46"><path d="M5 12c0-.6.5-1 1-1h34c.6 0 1 .5 1 1v24c0 .6-.5 1-1 1H6c-.6 0-1-.5-1-1V12zm2 23V13h32v22H7z" fill="#3e3d40"/><path d="M7 35h32V13H7z" fill="#00fdff"/><path d="M38 19h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm-1 1h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-2-3H7v3h2v-1H8v-2zm-1-1h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm2-6H7v3h1v-2h1v-1zm1 1h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm5-1h-2v1h1v2h1v-3z" fill="#00d1e6"/></svg>PK
!<�;��k�k#webextension/icons/onboarding-1.png�PNG


IHDRx�*�:k�IDATx���a��c�y�Z���]���Œ�4۶�--�a��w7ۼz�z�e����IR_�g�u厖����厾n�=_7��K�҇�r��=	�ʓr���~o�mU�V��*�[��w�����\�/�V�.�y[xk=�P��j���@UL~x��=	U�\}��g���E�u��I��j8Z$����v�J@�xxx^^^����@�@�@�xxxx^^^����@�@�@�xxx^^��B�@�xxx^^^����@�@�@�xxxx^^^����@�@�@�xxx^^^^���@�@�@�@�xxx^^^^���@�@�@�@�xxx^^^����@�@�@�xxxx^^^����@�@�@�xxxx^^^���@�@�@�@�xxx^^^^���@�@�@�@�xxx^^^����@�@�@�xxxx^��e����e_�,ݘ��f�/��̆/Z����fɾ�9r�B�@�~��o��yiؾg��]���̬Y�A�����������@�v�����502�._������W�o��̞�wOѱ�yǟ����܎=w�I�m۶m��ܶyl�m۞��:9�Nw�J���L�U����O�E�����o� �@Y�>W�$�='�O~�(	`�x�{?���
��qC���Iˢ$����3VT$���w�qQ���o~ϐ"I�F͏��c��4�HR���?�)R<��YX�Æ$鎯7R<��v]�Æ$��@���A:lH�n���H���f`����n�7R<+�$x/`�$x/`�$x/`�$/`���$/`���>!Ұ���-oIc�F8+R�a��9�^��[3(R׉��Ό�cJ�6�0����H}fF�6)R���jZ
����H��顟6Ϥ�i�HC�U��nT��S#����ƹGDZ���5-R�Q-d�������HӶF�|"ҎsO��l��7E�=���
�󮍴��S��t��WF�4�iǧ�S"���aWڲ?R�}�/��ro��?��G"�_�nȥ]?��h��H�?���E�(R�@/`��t��;+���r�&o�?��^������3��4T�)��1P��u�����^����ћ}0��@�Xtc��/`�2`�;Ƽ�~x-���˿���_?k�bG���SU�-�Q�s�����ҟ�
��?R�݈�-���lW��^��[%��[7��q����(���G�~���o=�Q�5w��O�_��z��=WcW���eэ��c޵��c�:/`�`������*����w�ɛ���k�S�hƆb������]~=��z�w��o9�a��U��_��W��%�<�"m9���3D�n�S��c�<W�fg�q�~�3a]�{�g��U����G�8������j=��>S�~j9���w̪���s�P�1
^��[��[6n���\�I�4��K�4�觖��{�x'n��/���@���x�x��?����6������s�c��O-�]�3�Z����]i��sU�{�[m��U�s��7�l+�G���w�{��Z
�t�[Ƹ'm9P�s�cJ��uL������{z���0���o�sU�U{���i�1�Ic��\�9X�s��qLi�o?2����{d:����0�ެ�;�{���ү�zX��e����Cy�g���%�?�I��T�c�,������������0��v�"m8R��ug�#�����ݖ���N���n8]�Þ��O�2��&�1�.�U�;ٛ��n,�ӶfWE/`�����Kw]|�t<R�ٗv&����"u_���fX�#�V�'���4�U��
�3���<�|��F�;���H��仾�0���8���7=z�–ӑ��4vuv�¥_?bF,�?b�{l>Y�ް�%��Y��{�����ۿi⪦}��:��4yS��8���`��H����s��G�ɑfl�?c7�~6�=X�C�ce�`������jU�=r6`f�-"��J��ܼ=���E:xW��WFj;�2����E_�
^��x�6C�CR���x�$�x�$x/`�$x/`�$x/`�$/`�0�J��0�^I��0�^I��0�^I2�^��+I2�^��+I2�^��+I^��x%I^��x%I^��x%����+Iޒ^��;hF���V���*x/`�]�1RD�'I������/`�$/@
�$x/P�$xRx%�x��x%����+I^���+I^�^I2�^�8^I2��0�J������W����0�>��|ad�xE�~^I2�^�9
��fv���&���h�$/�	^��{�ڶ���<Q�_�,^I2�^�������Yث9��d��������ٰ�x�Vu2�J��0�6`�=}]����8Qϯ5�J��0�=�g�o6�>���{T�+I^��x7��
��讝m��d��@�����7�~>t��O�e�$/`�*q�ݾ�)o�>�{w���3�J��0��5�_����ڋ�Y�&w3�J��0��2�̀�gW�l�m�_���׵�W	�$x/`�<�K6ޖ���:x%�x��x?ؿw����Q�)ݛj�$/`��o��7~x�U6ؖ�_�����.z�$/`�xI�q�Mm��6w?>Vo�ԯ��W�������W��F�K�[��;�o�W��������l��l=��u��C�Fx%�x��׈/O�F���7��wu�{�^I2�^���<�a��h��D]|b��6�H��0��c�.��8�8�OpX������/������^����IH �~�\�w�Q���~�>�s��a��e���Ց"�7�����WK�ǭ1����6�h�zG�W�oW���K�1,#�/�-v��ha�Vjw��"�DboQ��ok�#�-��N+!(��#�/��hI��0�R|�:Z�Н*��J���t���	B�8��xh�E��ɿrkX�W#�W5��U��"��UP
ؕ��*O.�+�U�!�X#�h���(R.���H�(P�fΈ�3��z��V�c���	0��E"F�Xj��yT��bc�x4Ɣx�
��YC�u2��B,b��4/�&��-_��!�5���2�#Gˆ�ge�i�\j�!1�N�x���v��H�ԧE"�|؍I�_&�m���ġN�#�hZ@K�H���~^uZ��
�!��#�/04s�H��v#?$�iH�xs��\"w�Z�֜-�d�I�b�x}x@�!���~	�5�7}CXǛW�Y��}e��\J�b�g#�h�4�d��Ӹ�;y�\n��x���*�ߔ�OZ�1/�C���#9��q���J/у>�|�)甸��6b8A�1F�~
��Y"��z%�Z‡ʵ�"�"�ܑ��i��q�`�紞�:�]��Ѣ��[Z�h���xn�h��=�~csD+����[D���3I.���z��K{~��\Ѫ�wU���{�{d���w�v��ߞ__=W�|Eܛz�)��9>R$��A�%�/�`;8ɣq�q�0����T�0L�ݶ�*Ꞷ�����
	���뙩@&�ۥ�����	�������-�p��ؓ�=��~�y�Dk4w~���:����t��)�__=_��Quo���8B�z�^k�nᑸۼg��n�$x/1�ı�w��wA��m��sQLm]����ݰw����W6�w��Q]��F7#{^EW'�ݻ��C]�ÒH�~��E\߲�ӯ�N4������q��b�p��m�0��]�T�0T�/�us;\��A2��(�����T�{ͯT'q]�~�������;t�V�z�Tsr�{�_Ͷί�bs����D:_T���W�����=b�=��xN8���x†N��O�"�ˁw���U�0\�M�Csϸq�sO��Z��Jk�w��i=�~ջe�ݻ��!ZvYϟIQu��T��{�4��b��[���{v}����K�{+��3R���������K�^��"ŒY7�w?y�:��
xR�i�U۷��E��0z#�x��/𪭞=�Gq7u�H8b�!�zǮ��]�g�Q^��^@�x�MD�ն���M�u�SB�c'w�}��}��Ǔ&�_g��{yK��V��V�]q��1/�x�s]A�hI��ug�ń[��[���7�W_o����G�w��+z˕s�x#�x�����\�}���v`��N�n���2x�C��UR��n^�
'�2F�%�/�3F��-�[�����wx�|�&�u���&=��m�f[�[�:w��x	�^@��Ϭ�|X�,��50���%v,�a�-�:B�
�b��޽k^5@E�oѢ�x};F�%�/@��iF��5�����7�ߐ����I*ֺ4�u?��)��c^/ �oX�2֏<%�Z‡�yc&2�*R�a*ֺ��ߖ^����^#�x�x�f�p�)�w��cտn���G�K��H�f,����������{���N	�#�g��@ƫ*�zd���Ŗ2��c^/ ����5����a�ȩ���nH��UU�����{c��K�^@�}����-�Ǩn����i���?TQ��-�}��c^/ ��%�M�޽^~4q�����땩S�ߩO!�����'�^�@���f��;�d��+�T��ڒ�}W�	,4�}"���x	�������diX3DEX�om�p	���Bc��k�ε	���@�=�Z%9�����ܑ��?���x��f	��]}�q�s�`.�1/�&!x��6ٸ��*��e��eD�BX���@����)K��W�կ���/+�A��#�h������T`
�5�����|�;��#� �o�EVG���=�$/�k`̍x
x�w��Qv����1��w�ޚ?��`�x4	!��{Ms�$n��
�=}E�<�<K�D'�1F�%�/ �b�T��@Ԡٚ���q'��#� ��ݙo�me_M�nG�}O�Րv�=1��� �^l)����BiP�y� ����)��#�hbP��;�t����HR�lm�p��Rq�c^Mx/o)��cT5�מ'�s?~c^Mx��v�'�MiX3D�P�/b�o�u�	h�x=x�����ӬJ���B0�0��¥����*|��+z˜��rus>!�1/ �w�ʯ-�������J7ȡ�?R�3�g]�O�>t�\b6�#�
x@�.�`�K|K�/`�@G�L�DR�~���I�U'zP�DXc��8����ԧ�K���us����=��N3��1o@^��EM��W���i�;~B�uqukΖ��&�+�Jo�Apc��P����#r`�ȑ�D�
AxU��Ce��x�I���W��<Y}��\�@.�V�#� ���$vO]�kAx�l)��-_'�h��}��Y8�5�EO�b�f/��
 �sO��#E-Ax�M~�����+��<k5һc��E����mH �x���)s�����*2���DW�tå�W� �;6'�D�N�%�/(�!�㸫��NP��wb��w����6Y���^�o4fx?p1�w��x	����P��́7�֠�m;�V'c��˜��R��\��vp�O剔��5%Lt�##�z`g;uy��N��eIy���j#�v ��ĻU�=�r�3�[�EF��u��me_bmV��Jy��#��T/�-��W�JAA��-��$����]'�/脵ZE��W�4�o�]h���S��K��lG���ߦ��K�^
[�x`�����bJ���V����6vx�e��۶~N��ϛ#G�}��{l�t�z���}0F��F��3.��$S˫�^�t���]�9ϐ��m��M%g�WB6��+�dQ��զlB�A���Z�<9MN��VVx`߲٥�ФBn�{k�V�3l:��@�-�*�voy�
x��W�Ɍ��b݅!w����.�jНg��Y9}������_U��m�7gS�y;�� ������������m�Y��Ӄ�թVC���
��<g��~[W/��U�m?Y��,��~�W��o;�ۃ-��yo��� n����_m|�޶��*��u��%o�[��6YX�&��$*&^��3nxEe�ܗ��m�w��ެ�S�֥}�v��:-d/ ���$m{��WC.�wZT5�iޢ�Wȟ*�8n�>�.�g媀���:"}���6'��[���"W9��vz��==oM�^@�i/�<�F��Մ\�mۿL[Ĵ�����+"�ȹ��M�O��lo���e�q�hsE�o��ԟӋm�w��ȧ�����l���m�W� d��Ŗ29���Av�+��Y�<n���.�g�hۣmJHR��g�]�pJv��]7���/_��hH^@����X��bnqZC6�sZ峸IAw�מ')��=�����K��T�3�ў��Wq�c۰�zoH^@��&��kU�u}��!x�vW��ꇕt�M�m�JSND36�����v�w��O��N�,j;���ʧ!x��r/��O#���KĶ�o@�ݸ�?���!��o��U�u{JL<O/ofm�
�ߑ�\��{
x��6����^��H�ǴIZV
���w�e��!�;�n��	I	���e���s���q�VT���W��5�����W�8�%�'���T�'`"����9D�{%3[�Y�mZQI��oI�h+cD[+Zim�}V�5��efȅ7�k����,s����[�o����~]C�_˗M!7�o�^���<�(C�����Ѣ���V��g5D��H��]/n��+
x�,PQֳ��(��	�'�¥~��k��(��jC$n�>�.˓�U����,,�Va�msƒ���{�wۿ�w���x��jE�ƪ(��#��Y�<�l�J.���P�dc�*T������mv��6H�%����7��wx��|�b�ws������n�곸ۼz����P�M֧ukQ1�k�?����MohR��g[�u�a/ �����*�zo9xۭ�n�}{~�����E�C,p�VU��Յ�&x�/�w@���4���ː1wx��ো$ݧ"�w1\�1���nZ*�d�e^
�/~8'����"��Hn���MhlV�����7	���@�3mT�7K�GD��v�[�u��+q7v���I����*�E�W��@l�\l�x]\��E���%�p=�xj����T|��J�x;ثIx<�6�,_k�
��ɦ����=��G�uq7������/ ���_V�շSA�ZE�m�~N�$n��G���B4p�%�S|x#b��j�����n��
���"�;|�xJ{Up�ϒg��N�m�_TLjsE/���=+�q��o�����=��K���F7�����}k�,/ �t,�m�f�ߊWx;�	��w��ȷ/��^]�/ט������ԫu�K+�x�5���
����"�R�տ�)ҔM�m��mubZ�[��م���("D'{0�PW����l�?�}�'����6�U`��nz��
���
����.�x�M�;�ո[��<8{[^�AZ����YL�|��ſ�@o]Ae��3
k�6Se@�{>X4�x@}�H�WgYoxۭ���-�t)�N_p�:��mNHR��o{;=�ϡ���Ţ�j@l��UAx�X+EboQQ5�f�H�m�1E+zw��^.}f��˾�t���}���ϣ�m(�
���x^@�N�H��*��"F�_�O�=ia�K����(��4���!x�ek@�w�3�<������Wx@�^���
�����+7O"���t;�l�R��
�˾�ܬk@��
|&lU��U{蓥^Ё-U5(��f�5��{l}t�n��[�����U�
��~Z�0��Ӕt�=�]-�>��X�*��&�>��6����"Â&�m�?F�#�큌W���
k��Y��B�e?mhTq5`���:�?��b�愋6�ui%��,)�����Yox@@^P��m��i�m٧�J��^�sl�b^5���^��9�*j��ˢB0p��76T�<9��a��9X8��jSA5���%��^�����n�L�5�Py������Ii���vʘ���SfN�P��p�4Ʉm�l�� ��� i�7{i%�L�ز���z������7[���W$e�l�Ҹ�?�>U�^�<����[=9���(�����܃׈���7�����R��٬��12�OWx�VI��#i��GN�W�}�����͟�Xk���h�M���3>a\�}��L��<�~q�kd�M�+���4&�/���ϰ�h���H��k�Z�k�9d�]\~Ͼ�16GRz�Ӹ������4���u[�	���ʥ���(�p{��Ӓ:��{�y�!�'�jxc���/�jv��Oۧw[��g�7#/ ��^��y���6�{��>>y�[^?(�Vn��A�c�ъj;���;��2�>��k�T#��3�#���^Е.e�dGЄ�+�����O�{�oX�k�: �>Rp�A�c�/�#���M���1�OnCO�n���$���^жYJ_`�Ϥ٦gO�q']�t��ަ��xپ���
��1:A�L�}����F���
��t�{z���Wx@�/�Ku��gR�x����Y�%]�=�iվ�[����/_;�1.w j-O����ؙ�;��Wz����z~��YVR��|�3��nMm��~��ޘ����R��v�L�um]��]�0��������;���=�e��akU6�3������wzk{R�{{��=���w	����4J���̛z�.��,���^H't&�ttx�p��H��}~w������ӻ��r��^@� �Ҥ�S:ٿ���cN$�x���������������}��&��n`���\��
>���Ԡ�.�x�T�~��;�*^;Q_?�</��퍌5nc�fg���#�������w���j2�������D�`e�d`�)�u��gj�W^���ac��<-	y�o�06�n�pu	���@�R�+R�	��l�����/�X��oe��ޭyz�ϗP��~KeMm�����(�x���*�`�6�+n;S��YB�eI�o�}���FOB]�k������;�b/ �1�!��)}AC'��t��9X������%�����z�71N�ɲTl���3�j	���@Dt�H9�D(r2�=Y�7��7�t����}����nO��=Q��W�{z���FG�t9�x�����:Y{�ٺ��uay�*�2���������;�a��L��{�Q��{�e��c���˞xΎ�^@� l�j���c:Y}�_��}��ȟ8�oɱ<u�Z�M��7���>�O���n��}�?~�K���p`�ظ[UӠ��v5�x��T���>߀���\����J��WPoG�@�i'l��%�"sO�����|�N�/K���=JR����{��5!�]/ ��_"�����
�%��m�������ܮAb����S�����e�]88ll�u����C�^f��I���Eq:YW�����9�w�7!��KE����l�>06W�w���fsO�>�rS�!�����H
/H��4t���B�C�uo�f�J�����{z�>�{gM]\�3�F�����p��i^��R�F�����9w�t/՗���>�16[���coF�S���;GRZK��qw�]�
�^@�`�Wj�&��-e�����_���V�kC�q��l������S��W��E�=y��ӻߺ�n��K��_�
����'q�d-9��_�O����7bF��,9�;���2�aO��.(17�f;�����lI�[:���o�9��^@���Z�9琡�������^}p�+��n[���;�)H�~��m�)�G+���5���onz�����Y3���X��2͑?6���c���J椏el��u�FG��

x7��{z7�Y�9�/"�/�\=��ؗ�ݱ�v�����}<c��2:�>]^5��r�߃�Yῇ�ȘѧwO���^@���V��Ƭ��x'�7.��Z�^�/2:�~ep(����m�`���Q���el��ol�Q'^J�= ��_*e�L��rlI�3rH޸[��it�]RVi����ѧw/i�>d�%�/#MR�I��2�<E�W�J�,��WcGX�^w�}���}��\����ޭhj�[{�	�S^�_�V�XJ?�ș��ͻ@O�M��u�(kb�(D�5{����J+��N�3�����9����@P|�Rg�Tv�7�W�H�4��ώx��B^�ǎ�,mty�����b{��q���U�	���@H&���W��E�Yw��}u��PNx��s�٧x�-.��-P�6>a���������@،4Hu�2�L(���*^���2t���x�	=v�߯MN�O�g���{� Ǹ/,�gyG�с��^/ ��!ɳ6���Md����ׇj#��揝��nt�}��T���Y6�=�R�u������@�&�/�:S�������7�t�W�B�H���a�U'ђ�c�~mqy���5�gY����`Ej���o��F�x����Β\�Wc���S찫���'��wʱ2K���rt-Y�;������Ds���d_����׫��Vc���@�&�/QgI;���c7����i��y2Ǝ���5��S�'�wF-�>�e���_���4�/��R��R���(����6B�a����V��bͳ��ޏz}r|z7��C�%#/ ��T�6B�t^����1Ǝ�=/���{Z[{����}F��=ehD�(��O�i
�,���ا�Q��	���K$ץD�0mt�|���:���b�x7��t�eE,�~��S���w�<�:R�j�u��U���njT�x��<������!l�s��g�'�=��ro�#��S�紴E,����o�����r�rK�^�eAlu���,K�
@��
R����ڽ�3�F	/c3܅M�F���B�=���W���w˚���}���/ �`����]J�O��Ɗ֝�/.<ώ^�B�[�^�2��}+�p��{�>��?vĕ�*�/�uJ9�q'��g�=v��\��K
?Ż5���R������;�~U6�{z׾/�{}�����&�����Z���U���0���{�J�qy�}��^��?����.�0���=�rH^@� ����v	a70U�v�>sN��Ȍ�+=F^�����G��c{�;��d�_,��ۚx[�)����$��MRƉIw7?w��z�vx �Fp��sbB���⽪�)��yMߠѧw���C"�/	��D�>3)��C���9�/���7
c��&�oJ�K��n���dY*2��o�Ox���3�"坟4aןv�.�嬽����1���	�6������������w�!x���4�-�.M���M=^g�p����`��7x�r\v��smI��v��OG����@B�HW'l��5_\��^�b����+=�it佹�>��u��٧w��tj�D�^�oD*^�pqw`���҅v` �2���n0:����c��<GJ�5���ãr$I�^�O��;�c��{Q �x��>06��l�O��Q��9wp�踛�ܮ#��
���|#	q������q��k���������G�q��y�2��>�{��Ix����4��Pm�Ձ{�x�cS��xﭪ��s�>4bt�-ij�q����x�x��w~��]k����vP �:�n�ux������Ȥ���Ԗ��}�rHIx���J�g�U��3C�^�_���`죣��4�oJF��/���4l�����V���'�/��_"e�q�oO�J� �y�X�"�sir4tE�����S�7m�Ҽe�t��]z_i�A�{���-�F޻z���=x��m6>|��͟q| �Z�+R�X�+�59}=�>12�,O�yEʾ߃7=�z�����q���U�����[�C���`q�߹{T1��x@�3�޼��]�^J| �{��]{/�G�5���Ψ���g��{0kϾ28t�{��j��ݧ�z同����Qؒc?��qx�_*�ɼ���'iحY�_D�%�8ۧ�G��K�+���_��w�}m|���":�$/�x��_�9Ǭ�۱S6/����5:���w���}����B{���ElG�ꕾQρ��f��ʇd#�xY��C����V�ǣ�Ɵ��踱���]9���8ߐe	�D���O�{��!�&@�e�����-�mF�ݭ��rH��Wv�	�!3�+�_���~�4P.�����_2:�\EƟޝ?<J�^��F)����e#�&N�e쑊jcoU��踛�ܮ��x@�<��w���x,�2���!#��i���s�� �/���/���K�x/�2�DE�q�����ӻEMm:Ʋ�3�`����	�5O�F�M�����
�_X�i���E��!^w/ ���'#wsΖ|C���-)�4&�_n��q���U��	���B���όl���)�7�/c�4"�~���O������N�^к1rq��z��^��GiE���F�]wc�>�x���לF&�G;�x��-G���6�
cp��ǂx����od��oYr��A�����`t������3؏�����)�nܝ�e�r�޿vf���ї��7����]�rH^@�aԙ��[z�lQ��з"U����ޏF7���S�Fm��Sg��尦qM�����-G[�ԟ��Q�e)3{�������/g��_ΐ�?�g��%�3���7ei���?�e��]{_� �/���+�w��KC��x��^w��~�{B{�W�S�F ��|S�ʖО{�ԟ�ٴ�^ch��ϟW���������gx�|JH�/������lG��x@��/�V< �7J[�����4�[3,K	!��L�[�f���S��́'�H�]3�gX�3��.M��Q�1R�zB�s���,�՗C��wg�z��c�^@�Tx}xN�x�ќ}�ԭ�r��쓻��r�L��~j���4��)��O#�٧Ww��7�Q�1��P�$�������݇�wX�m%����2�{�Z{�t˱���ۏϫ�jC��~��t�]���_�ޭϾ��~�:]5n�O�nj�C"�/�����oٝ�xK�͒�|Q�o4VVVe���?��x�D�_ʻ ���_L�e��=�Q��99.�~����͑�����嵙�݂Eڋ���x_**��98,G��i��,�7b	x�>�Q)봙ގ�^�ؾ���'�q7;�ӻ�6m)n�ㅭr��ŭ^��{i�q7w�d����}�-ieaI�oII��w/��C�x�|q��-n3zo*i�C^��hK��9�7/c��]=:����1:�V6��m~+��{�/(�>��;�L�e��9�V�$���[z����b�u���n�u���1����p�{�ӻu�����G�^#�!)����7���16WҺ�����r�O�>��'�D�^C�Nw3N��^��aw|GW��d|����� ƺ����wk*^��\�ҫ�E!ޢ"�O�.��C"�/�1���q��o�V��;��3�ӻuu��������Jo�<�ϗ&z��c���뮢N�w7�u�!x
����o�"���;��cƁ��������1�A���Mx�#�5�ؑ���� �na���wS[:4["�x��Cށro�c����t୩��������U۷tPAA���UXX���
UV֪��9"����9��^P��ปs�$?�7�1Ǝ��Y��ݒi֊�9���N�DpXo����(������4d�z`�m~U3E�e������݆��պ���a7�eg穴�2,����!9��^0T+U< ��"�mV(���c�~mqLa
z���N99�)�g�ר���8�7��-~���'�xc紴�tz��ƭ�l�����t�޼7��!x@�^/c�X�_[�&?��r������
׊�˃�����z��O��x������:ip�����K�\E�c¾�ʺ���}rH^�|����{�ϧ�y��8�[t�����DdNg��oc�>=�%���
�^����C��u��n������jz�x���#�D��x�����|ڑ���h'��n��~LDWTT6����	/ �/��1vqS��[YY��?e�]��%�D�^@�%�2���jWn�aO��+-��x�W_�9����x�{���ѣ�������<*����i���آY�x�{����蔷F(*�}��]V�#,���޽c�=��;e�-)��J�u�}���:����:�����^Ƙ��x}r7�Nx��#�%k99���""�7:u��O�^@�%�2���2�ګ�k�x�-((9�k���v����ͭ^�܁�����ϯ���i��,�h୨�=�떖V�-y:��'���
�^��]=�ӎ����k"|{��^���>����/�x@r^/c�=~���8��7����G$�UM�����y�z��G��x���[{��땝޸�tN�zyy����F�$W� �2���T�8�;�٧m�w��n�琯SYYw���|���%���	�^��
}�ӻ����*,q���q��p���|�k�	� 9/��1��RiS[ȁ7p¶V99����b��{{+��<Oj�K ����^����v@
���TTT����޼�UT�L��v�n,�����;�xc�Y���w�>�>����*((�#�'{���qٷZPqq�}*wZ�US��i��9.�|��� d�;�&�1f�.����+,,
���ֺ�M�z	���,�^s/!�1w�%�<���ݺ����{j�N}xl,�׵���� �碑��	j������ݢ�
;��hwU�E����"�/H��k����ƘA;RRn���w�nόN��]f�S�޵��o^@�	x�ZBTc̠�=�wKK��P�����um��K���0���/#�1f��I�h�0>���7+'�r���v��Ñ���<c�]G�^�����k�h�q�b��:4�w�˫�@�=VQ��j����x@^{g_/Ge]��cl���������a���48�kjYr,_k��F�^���ނK�x�E9�z��c'��Eܭ��
kܵ�TyUxî�T���^#�/0?�Fd����+7ʱ~+c,���g�*�qx��°^{�ܸs��pݞ=�^���e������������3u���Ѹ��UU��]{_�!�~v^@�^����θ�.Wq���,���?�xc���Cqwkk"w�-_���?�xc�w��E�-((�x��k�!�x��1��k�[W���k�W�h��t�������2�"��G-���
x�������Uw�Eܭ��(;����m�3�"���xc�oN���[ZZiGר�&�x��1���n���k�Y99�1	�k7���x�����[�ag\޲�j;��l'���������_tk\�]{yy�1
��oM�.!�x��1�dݶ����vd��N��'	���b�����7���9.��YhD�ݸ-MG�x)�x@lxc���q���Ύ����{��o�^��N�,��c�#�*�;>N���x��ܭcO6��5�p`���8�[���_�q���������f��v{a����K^���{��׫���������=%Co>�
#���>80�Eq�cw>�>.�nmm�S�ݥ�Ӹ��g/�US^��.~8�c��g\���Ƹ�EEeFޝ��z۟�4����0e�(ih�q
�
��;j�y���������e��oS���ظ�v{���C��[�2c~ƿ��IL;�l�+����38�eя��h�9�J��V��������n�oV^�P�_��l���E1�Y}�]SP� ��Z�;�z��c�w�V
K��C��[�n�fݨ�ڊ��݊��u���n^�6����ԗu�3���g}ʽ�Șfx��u��:6��(����tϭ_�e��̿�X��],O�3f���ekuĂK����nI�R�o<A�k�u�u�y�(�}�:��_i���G�g����К�� ,��ǕZZ�G_ݮ떮֥ϼ�K�y�1�mY񇙄�C޾ap�j.��{��7��k�Ϣ�Wo4"��zJ�~e�׮��������{Y�<��V��TUK�)�����:kφ��Jm%�x�����eYr�
cv+v>���_�ٵ[5K*�A�%/���ֿՎ����o��`��#x'&��O���Q�������6<��y���u�����?��܇��k������r:�q�7GU;���O���U?./�Ck��e�Ĩη���ɼI��a	�cc�:����ȅ��lUo�K#�>�k��hi�^ �(^l�ĘͿ�8��]"O�k�q���K�	��-s��R��5��CѹNY�	���@ށ��ލ��U�4��T5W�xGF�t8�ͭa	��YY��v�F�~ ��g�li�\�xT>dD�f���_��d���nKK����W0󰛙����ؚ����d�)/�kB��A;���H��x��F4��-��݌�ro�N�k���j�4X%/ɽ����Z5G=�72�z<�.�ϧ���i�ݜ�ݪ߲H��a��Y(/��]i���h7H=���?�`x<-S��45��rM�~���a�\i�N�x��fø[O���nSS�,�R0�S����>�[����5{y� �/�?��k������v�Uo�f������۲������I�
H��+��q����Wcc�|>�f��p��m���w� /��qx�5�V(=v�U�����9R� �/��riլ�����
�o~�f�V��!�
E ��|�H�ԙ&5� U?!U�'��*^X�RٝR��ie�v
cm
��g��߮�+T)��9Jm�7��ԙ*U=*e�-m���z��c���ߗ\�J����K�F���G$F���>��7�u(�Za7�.��J����R��R�#��2��1���R��R�kR�K� ��o�*p*7���c"�6~\ʿRj�&Y^M��Ĉ��ֿU!iߖ�a�1� ;#��W �>#�/m�����3[�,�+U?8�����k�O��q,���Ns��&���w��*$�'ε��tM�I
�I��^}g�o!��+��Kc/бC�}��j�y�o�%�I����/q���m�VH�L�k��Xi�S���R�:i�c{��M��J��}��X��ǭ_����/B��>�X��u�B�8��G�bd�3T_{�y�׾�t�˒�U�/дJ����������-
I��ĺ��$M�Ȧ�)�*i��q�ey���&��@�u쒶}ˤ(��/��_!�_�xץ�:�����_����mD|�
 ��]R�Bc�yZ!v'����etIڷ�70�̰���̌�233333�1����9��ْ,���[���x ��VU���9��ѭ�>\�������fx�c���/%��q�/��YUŲDZϰ��GK#�"x��ƧR��O�\V�T�?�bq|
����������O6���d2�;L:���v���a_����Z:oe�a���ҶJ�,^b�a�_'W?��aulll|R�����$��f�U�^���4�#�U=����5��>��&/N1�q��~�ud�Ov����
{�b�TUw���5
S?[�m����P;�vb�=A��#m������M<���累�꼲����8*��ER))@����흣-�v�3ԡ�g�"2�կ5��3n�u�̛�0�o��M��
�7b�V&����q��\�1v@��O���y����XD[�:�R�#e�T�I�w��o���J�;F`�$-�'{��4](
� �8
���[?ޚEpu;Ɂ�*/|0�,BS\�l+ς��)���_��͜3��U ����'pM4
]�%�Ry��"����s��<�J˵�;�/_;�O/�����?����u����,��Hg�Hv�O�y�n�=���p����p����==��I����_���{�n��� @�5z?n�X4w���D.SX��F+�<�J$F�>+�]?d�Q��ӥ��^PC17��r���F4X1��?�w�*�W���NùRb�����g�g�L���58�#��n��P�T�.3W&��dw|'ʻc��(axA�ӹL�w�*��6B��\i�Z�ŏWq��Th{��m/Sq�3Tj}���j:��%��g�G��K��?f�S%�����r�P(��]fŒ�����
������Y��Ǝ-6W�<R��W��Mʯ�*so��8�5����@��l�7��f�.��OZ�i�ӥeO�?Tj�@�/�R�d����愓k�Z8B����)�����\cG穰����f�:*�7}(�g�|_�Ƌk+��͐�<J�����,ף����F6I�-mx��|I�>S�|�^@��f�D]椓�\+��`�n�,V�N���v���iWa�by����ɾ�����̽J��U)ۥ�H�m��wJ��㳵\.�����<Q�ԇV�������+ս���5W=���/V�����y��:Ui�0�a����U[JI"ͻ.�Ϲ�^��n:�&V2����*-�(}����Wa�[�qz�?�����>�}1�W1̔�?!�Ӳ�R�o�m
�����d^�b����1B%3�I���iKs]Bb�#ظ���Q����~߳5x\^������+T�].�
�Ҧ�xU�RqTv@���%�N{��:��ȫ?S�=��2����k
�K��|&q��%����d~s�{��k5�5�l}��/��y�d2��i�����j���_�]d��^^���dž�t��1y
�F;�.y�C]w=��͎�;��V>3��)fH�vU^�r�\���1L��n�����m�>r۾��>xS�����OD7�.z��='�l��&;�̉Z^��7��J�d2I���0���NO�V�ݨd���eT��ωL�,Ͽ��o��sΎ\�5��8t�ϗLseþ���JM^��]�n��ӻ/w����������U/�D���U$v���H�]��4�u�<�g&�T�R�s�v7�����P͗�1��&���]��<�:�Dj?����	��+���>�IXo�Y�	���_��gL��2b����/��.Q����7��M�Ϥ���=*����z�6~0�^,|���S����)�?�nGm��$@�(�D��
3�mN�:�A�-���Ǝ���
�����>���՟��;v�©~�`��5��	��h��@��\�(Y�a̽�N"Pi�c�H�DzW��G�2B�6},�'���[\��i}>so`
����j�{5IxR�q�*Ô?�z2���z�F?��S�N�֟nN�Fr�ɾ��f�=�{�uʟ�Fnp�T7��ΕJ)/��B�0��0ɞvG/��Z<v6�/��PE�º�F���u��ݻ1�}��g�m�������`������ڿf?�ͻ�#��Ya��sz��J�l��>�������K�v�x��:�WhTr҂{��ي�i
 ��r9B%3�)�>�z�I�)V;K�9<w�$�|�[C�S?�'M>V'�~�
����V7C�vj
 ���I���0�}֣�	ȱ��PghN��_��B��Y�	��%O�ҝ��Z��j{������/��y��s��b�dv��z�1�]㸻R�#C!���־)4�7���:����z#����D�i��P�T��dN%��r���2�F%����y1X��m��i�g���f��d��y�v���ond�z���՟&�R^P���N�2L��r�/�����.��g����r��կ
�����\�q���
���E�w�3O���|uC�P���Q��pZr��HV���Gb���Ѧ@#df���\vo2/8t��������
5�����Avw�	/��\.��<�lLf��F����<�o.@�\���P|�Y��`�6^��/NsZ׶C?��å� �ˈ�L~��0���X�/9t,����x����ŵo�m4������,�u\�T��1���z���t���˔�>���3�8��sz��B%��c�|�^�)ޝ�Q�|��oT� ��J%s���9I��T�.�wJ���zu����ܖO��ѝ��;Ż�k��ÿ��ãPx@�����q9��uX�;�
祉�{�L��ѫ?�?]S\��`��+��{,�h��^�{����l��eRmv��������_��{NWx�}G5��r{;\�|/��)_s�o&�	��L��-VY�gk���yɚ9-��m��g������&�{����_1�p�7\�;0��?�"���ߡ��.�c���5���_�>�L5a�W����^�i߉���5Lnۗ������k��FDZ��5�W�[`~�o���0�H�9>Ż�u�	����cqT5/ ���S,ǯz�f���z`�>l-ꔖ>�6"��;��eO����ߴ���o����y�BCk���OTMH찻��a�^��<�)�{���S\�š�ai�S�����\�3�>�;G\�<%m�rx�%U
�����=�l֔@� �r9�eows�SX�F{wŮzu�w82 o��Nbc�������o���U
�+ݞ�\����R�{;X.@���J��G`��_�$p�]QX�:{�w�[��#M�Bcf��]����O�o�n����}�VMh����Z��`�EpO�18�WCV��^�]����a��N"ce�
J�W崭yv���6϶y�ͳn��H�_�.�x�jB�e�v��"@������+"��lh�pa�[�������y�v��~�ڻ������)ۉ��<�����no�L)?��k��b�X��@�s�xb��"��P<�X�_�n{�w��cwS��F��y�̝C-�Zݝ�=�'�^��hX�S���'�'c?��؏ǥퟵ�R����`��q�`�O�c�?���+����<{����Ǻ�V�P�V��fY|Q]��6�����
���?@We<ϻ�qÓ��h?,6�#�t��&��ϖ�}��\��%vx`���
;�~���*7aq�G��X�H7���+�F���]�C���솝�劥�owsj4sL8��&7�w�[7��]%'@��
�c�;Y�i�Y����7�T��?�M�\�X��i{;k�L��[��4�{q��Y��?�?_X�-Eg���d�kKmϲ��%� ����Ζ�YņW��]o?$�z�0���A����YR�b���ε��
� ����o��:oUlt�dsW��.�Y^|׷��~C�����n�Y�r�BiL�w�����1�TT���{�{*=?���a���#@��M�����ӥ\/!�T��a����S��Q)H-���U�C��ۑg�Yv#���E�c��a?6_:�}`/
\po�ߓy��(�:n����+\^`�s톞��RR�dNϽ����O�t���|Ws���#��O���u�px�?��v|:����?�M0��)��T�I͗���ֿN�տ�~��V�E�R��Ǟ�Ӥ�~Eʦ��ߋ?k_&TɎO����L���1�w3vH�U�Zh?��x���"a�g�EB3��*�v�Ppt�z�Ի@�r�_��./���n�؞���;��U������5щߍ��ɮ�����!ww��*�<iǧ��]3#��*;(��v��h:�N�敥�g����vׁX�G'�	ߕ��yi�����ł%[�����sݿT���Cn���!A^�?�Ű�����
���ҒG9�����	�亥9g��N��I�s�g�vp�GA^�+Js�r{ⱧE��Ij��}�5��S�e�>�w��R%�P�}w���°@P��-�!�n���k�W�S�i�+��fLH/���ii�u�|Nj.%v{���ϸ�̛�)d��	��B�1l�c��nYg��	�
gw�t�$8����=�k8vE*g�T�KZ�T�X3�+GE��|=�fN�n~���ڪ�K{�a�
6�Y�*���/�;7����]�ʲ�"���|	�55x�RJj�"�S��_#�/��i�*�����R��]3f��A��l��r���^ґ�J����=��eq۶m�Fal۶m��m۶�vw������$kU��c�~��ާr~Փ�����h�Ù˔q��@El�a5���'�l�qrt�	c��gr`r��ɬ��%n�T�N�ʱ{pu���y��'��g�{O��+���5��Y��T
�PK&߯z�tХˏ���u2����$cn��R��*���
��UU��AĬ''k?Q�\�t���q�W���+�[��U�����j��-K_�|D g���zh�N�߹9�̐+���ïU�SW��\��U
����칞�7+Kި�S��<^g��ʈ	@����}g?��)�V�-	�⹾����
/M���*�0	`WHL
���蹜�� ��,v-΄��_��iIF�83��@������� qw�C�X�w�LΨ��)
/Mk�K�o�w/�l�Yh&u��t�Ы��o��tm֓���v_.��Ќjɒ׹×��bϰ/ͮ֝�|���g�5���Ӳ��5vd�O�J@�@��D�J��:9�&���_I]ƽ�縻�^ZM�?Y����_���
-f߸d��"�^&��/�l�Jj�y��?��B�:�!����C����v/��>o<��YrhF����E/o��;�ɑ�i' �@�d��Z{��W'}��f�5(~����S�t�N;����%C��Z�k���C�Ҷ(�s�3Z{������m^8�)���^#��l�jR�
�ž1ɘ[�V�w���/��l�f\T5�j��'�'�a��,~��_���cI�;���{l�_$���˥n���d�{8p���&�ޟ�j�cX�¤s[�NS-�3,�����)L����F1@�d����J���&�_���prmY�4�捋]co���Hrjc���&;~�L}H��n%���Iǖ�G����Ȃd��I�I]������d×�kP���Ʉ�6&��|2�Ɏ_��/\$}Ǔ}c���H�<���rų��{�d��ůN�|/9�(���ck��s�qa���I��E�-�c�@��Zҵ+9�8�?>��d�ϓ�?L��,��d������Ԇ�����Ԇr�W�'���d���lQ���'���zJ��]���&�6xh��#e>���ɡ��ƾ�Ɂ)��9�z�H���///�������� � � �����///�������� � � ����////������ � � � ����////������ � � �����///�������� � � �����/�x�?�c2�����F x/��c� xUD�}���IEND�B`�PK
!<�0�(
(
#webextension/icons/onboarding-2.png�PNG


IHDRx�*�:sRGB���@IDATx��	�Wy�{�g�g�hF�H#Y�d[�dɖw���!@��|$aI.I ��
…�����?,!		p	|11x�nٖem�e�^���3�f鵺������OwWW�:�w�����o��\{hdHB���.����-
���r�� � � � � ��E�P(�1�C�}V{�QfZ�'����-T�'���L�c2z��LK�}؈ � � � � �`�P^�3_�h�mա�'[�}t�)��F�����{@@@@@�&�BS���vٵ���^�F~�w����"� � � � � ��0	������p��d�\�	�.�.ؙ� � � � � �M�
����L޹�l��ܓd�6qa85 � � � � P��)���fj��e�f�Ap�9�A@@@@�,`�5�����<42$�y^d������ � � � � �U	��"���ʼ��nUb� � � � ��D@v5�kJ4��%#b � � � � ���6��w�T�?{"� � � � ��B@c�Z�!���a � � � � ��hl�d�vU{"� � � � ��B@c��/
@@@@@��x=�h@@@@0x�@@@@@�
���1l@@@@@�/� � � � � �Q�]8�� � � � ���@@@@@<*@�ףǰ@@@@@�\ � � � � ��G�zt�6 � � � � @��k@@@@�^�.�F@@@@�r
 � � � � � ��хc� � � � � �^�@@@@@��x=�p@@@@ ��5� � � � �xT��G�a#� � � � �x�@@@@@�
���1l@@@@@�/� � � � � �Q�]8�� � � � ���@@@@@<*@�ףǰ@@@@@�\ � � � � ��G�zt�6 � � � � @��k@@@@�^�.�F@@@@�r
 � � � � � ��хc� � � � � �^�@@@@@��x=�p@@@@ ��5� � � � �xT ��q3l@@�z
3"��H�0�K��ݿU����=�� � ���x��| � �@34�+�	��H<%2�)>��V��Ho�HO�H��nlE@@w�u�:0
@@�13�=:.rdL$��|�5�cs���DV���[Y�=@@h�@H:d�9h � �~�L��;2W�����FE6�֬^��!� � ���(���`0 � ��M����9Pp����}��c"&#�� � ���D�k��� � �6����EF�l�lIG��CZ�7�:HɆ%4�E@@�Yd�6K��"� ��xAK24"�;?�	�Q�s@&�w^�g@@�*@�����@�Q��L�����yh� � �4]�oӗ� � �6���]M��!� � �@S�6���#� �6	�;�
�L9�B��	�
 � �X �kE�c@@7	�L�D�er"�;^Έ � �'�� � �Q�#Z.�Y��Mjy � �4E�oS�9) � `�@Z�h��6uf��}Z�a��� � �u	ୋ��@@�&Lě<=}rZ�f��@@@�q���sB@@�F�x��w�r�H&;��g@@pH��CМ@h�@2Ӑnk5�k��� � ��
�u���!� �6d��[ڸ���r�h � ���b�L@�@.�e4���,��g}�3�‹������^�,ޞ.�p�M�b, � ��V��o���!� ��'���l7����)
�N���m��j@MF��"VU�7� � � �@�x��p@@�&��q�"I}�>k0׋��r�>:�Ak�����<6��3����m��҇��
k�0��Ң}��GT_�GD��ξ��q�N�g � �O�o�֜#� ���Ӛ�;�|�v:y�f����-�4�;��������z�+lk�>̳yh�M�����i � �H@�	�@@l�j�r21��Ҁ��n�f�$�ؑ�5��f>k�6��ـ�y֠o�yև	�@@�^�-(�A@ P��4�j�dM�/�)���&�g�|�m"����ߜ�d�Nh`7��5O`�t�ƒ!����"}z8 � �> ���d* �B�d�����V����j�z����`�]���5c0A]ॹS �_w�Ez��s��
@@�!y���.,w � �@��{pd.�k�Zi�]���>
��X�[��Ӡ��$A]+�Nc��+u�W�uҝs!� �8.@��qrN� �5Lh����w����گA^�3�Y�5S��d�jP�����	�5�]
�u�i � ��\�����!� �y�C�E�6n]��@�)�Z�՛�� 
䥹[��\m�v�hО���׊�!� ��*@
^[9�@l�T�踭].��d���4Y�a}67L35vi�0�\�5�]�!� � 0�[p�� ��gL�n���1�Z�wxl�^{A �Y׉�fyk}fSn#��lJ5�@@��,2SD@�sSIS���8S��A[�CߘLX�0�gKU�x#;�d��������.kJVX�ѝik��x&s�����@�lзM���"���!� � �#�>ZL�� ��/L���}1WL”-h1��f�5�ѯ�&j��V�	���"��>����Έ\��/��p�&�ݦ_cҡϫ��^^�/�@@�^,CD@ PG�L�	�j0��&K5��KS���6��h-86R�o&�k�)
��%�t�[��c�� M}崎q��\^xc��}xF@@�Cx=�X@��`��T�o�m�u��]�K�lոkӚ�6�����9W�y��&v�T5��nh�L�i�u��!� � �q�_@�� ���Ʀ�j��jR
��ɚ�~1�u��9�k���V��q
��k}�|M�o3ZW�ȖAn��{Ή � ����!�S@p��	�Ҋ���
Nv�D�
*�P��6m�`��26sc���{��h�d�S�_K2����Nys@@G�:��I@@�������N
���h���0����
�V���w�e�h�7�A�F���5+y�F@@�)>��BS�8) ��%�ћ^��F�]s�ڏ�A�	�h���oւ�+�t���<�A^�l&H�IK2����@@�^.*SB@���'�m�M��~
D��_&�;��LP�Ȅ}���fj[։���4@@|*@�ק˴@𜀩��f2t{5��R�����)ݰ^�($�E��E�u^&`Lp7���b� � �@����@�5�E@���k���*���k��F��	�N��f��
�N$Ol��5�k&�@@�	�ޚ1b@�)`j���i�jf�	�j�*��@X��D:���a
��X�@*�7o+��@/��V@@?��*2@� �z�~o=z31�
z)�Z�٘��M��hɆ\-G��O��k?�#@@���X&� �@�|c��(7�Y��wk���4'aӀ�q���/
@@���25@<%`~Fӟ�E��:�i�)�D����ȵkQˍ�5%jixk�b_@@
��1d@|+`j����~l�ȩz����f�9ס~�.�	[�-1-R�:�4@@|*@�ק˴@�J
�z����Z�a���5I���t�fEW��knΖЛ��@@�^�.,�B@����j��Tˋ-�_����-#@��Ʈ�|��ڲ�ih�z�; � �@S�6���#� ��2�u�|�5S���c�hp�k�f�&��^�S��R��Wڃ�@@�^�.G@��],5�k���/�07R����%���݊ʧ5ux�R
@@?
�/?�*sB@����m[�ݳ0�u�
����ZS�So���Uy��Wއ=@@�^.CF@��-�e�:��������M�:�j���֌o��[��,^�x�� � ��7\��&o�2j@�I ��ӭ���h0�xi�07][�[~,������) � � ��Ec� �F���=c���5�kIT��G���h�P��Ș{��H@@�I��M�t� �
0��g������v4h�t[���
Y���D��Sp0 � �n ��a< � �\���ݴVd�F
�v.���-&S4�W('ɫ>W��p��B-��ɪ�cG@@� ��N��J�@�:5�g������j3�=ॹT@��+��D\���xi � ��D��O�i � (S�a��][�[#�L��;��4�
T
��g�LCҽ�gd � ��(@��F0vG@	�z�&��ǡ�
��:yn��+`�Pb�F�
eƦ��@@<*@�ףǰ@@`���C�Z"��~��
�4�׋&��@@�^?�"s@@ �ٜH:�@��ॹ^��B��|^$��\��@@�.@���+�@��T�S�5�̹8K}Z'��
���[�1G#� ��F��k��� � ��%��C�v�ޥ���%r� �N���'��"� � ���P�O@pN 1�̹���uڦ��,�r-����g � �xB��'��A"� �@Q���Rx�#E��F�
T
�aS�ץ�ǰ@@j �[��"� ���R���D�]��m:M�f\W���Ty��D7 � � �[L�m � �
����ީF��)i���Y�LCܡ�o�fDO � �, ����
 � ���-����;�y溘h���:�3N����g@@���������?4�q�@��
N�V�29�l�9L��r��p6A�j���@@?	�Hl��r�7��	�f�swr�n�nXƀ ��s�E[�8�[���r�cq�FC@X �_����L�w�;_�m��d�_�?l�:p~@�	��y�"sQ�2y���5�Ĭ]V�k�ji���K��� � ��L�y���v�~�j%��4?&��2/���ڝ�l��] ����KCi�	�%��9,��0#!ѯ��M�Ͼ���Pxv���4Vg�gt_s̸��t�-�Z��m?�)�P6�����t� ��F`6~�ߗ�M�]Èd�ri	�6kY�w����qBC@���%*��i�
ݞ�ϝFn�6�-ޞ�g��F�/m�U��6
�N�J4��J7�+�� � ,��f`���|�b��=�����m�R�����󟪫���<֢��-��f�s"� ��d�M2�~������l!��1W���o�6��(?[�>���(� �M ����i*/���s�_�j���5��r ��%1�����wo\�W��w�QxF�@$R�ߘ�z`N5�NI��*��l�2
���# �xY�$ �X��Y��Չ�}�NP��^�W#�?55A�۟i�n�0�3 �@@�������`i�G�S�j��4o
Tq��}��|��$5 � ��2���Ĵ��~�ļ('�0_n?>�K �8�ȔeЈ�]�� ����Z��A.o=�6�u迟z387�L"O��o��g�Jze�x���Z�n� �}
L�����`�t(M�B^#� ��bW�K��V��Z��+@�����{7�_�Z	�.��% �@�Z��uxGse��\�Դ����,m#���H��cҵ�<�I��+H����F�x����@@�
,�]-�m=���
�u�[O��<�ӧ�| ��I��:��e�I4����'���CiI������ȥ�o��s����{7J��$ׯ�W_!�[6Y���0�.}�a'�9�� � �� ��uj��X\G€@@�	���>h	�RE�7��;�X��1�>��G�>�l�M�?��TB��?K�CNOK�s��t}�~|��t+��=����N�Q � �4O�o��93 ����X�1Q<���QC!�\�!\�K���N19���v�o\��㳁݅�g�2p��7U��B6%��dO@@�	�uߚ0"@#`n�f��x�M֚�:�i�7���-��m���n��\�IZ�X����%��5UlrlC@@��@s��bq�� ���Z�wʩ�������v�WK��ӛB\��E���=%��Ak��5��f�i��p � �%��.�dw|� �T/`��Ca)��\Kն{�*�g(Tl�c�J;�N���l=ѡQ-�����Ю^!�w2P;rL"%jOn�dm(Ux�ryl��QnmP� � ��=d���H/ � `Q�ʍ�2N޹��%f��>�����`g��ژ����9���qdBD������_.z�v��@��mU��"��h]�Ύ � �T �[و=@@��-�ڳ&��n^o����d��O����vWo�.V�A���&O�T���z2�#���N�O�O� � �x@�
X$�� ���L��Z[��
M�Z��43Z&"��#������.�v�jek��m���0�i�ϴTC����gj낒��o"-Ҫ����֨�2��u.:C6"� � `M��57�B@���h�:Y����M˺��蔧^�I�\�\p��NO��~���� ���܍/��D�t���������
�4p[�͖��kd���t0�f^o\�A�
E��XC�E�؄ � �	��X&� ���d�:�QEp�񤵔��M�L�ĺ
���h�4�G�zW��}K�OV�M�/:�B"+��-2�g��: m��h�w|p�Lg5��̰��5�{4S�aJ��&�]��JK]�{<_�Å;�@@�	�uق0@�&�j8��L-u��[��v/�Xb.�[.Y윦lARk4�j����,^-� f�EZ.��;g�>^����}��&mK?:����O|(2m��i � �xP�܏�<8�� �^p}�S�����*(�jZn,&FyX��*�W�?[�A�.�j�X��^��*db��[	��@@�*@�׭+ø@����Ne�쨖Z�������1}��캕"=�*T:{�~�]ׯu}��?\!�@���6�#� ��T�
.]�� �@�BR!��#r2W�ؖ������	ʖk����70AM�L�1��l�fx2��9ƭͤ���9ip�̽��&8�Fk��Z�u���$FU�d'@@/@���Ɯ@*	���-;:Z����gC��e���c��2�Z��i=s�ݥ�0Aܣ5�w6�l�"�u�1�z��5�ɫ��Ii��Kk".-:�P>/�B~�Y�fk�hDr=ݒ�LO�d�������5S������ � �, ��T�� � ฀��Z-�թ�	fP���Ji6n���W�,U�r-�ӪA�!-Q`J;�@�	b˵zL�{�wC���qxX��� KL_���K$�,�Pbk��]������2���ڴ�Ğ��R���i � �xP���!#� �7�p�ڟ��ͼ�T��!0
>YB��Z��8�j�i+5�W��&Pܦ_�j�l���	�r�Ⱨd�#�K�{�%�$���9��i�ڻo�1���Ib�<��_�違�{���D�r2� � �xC��7։Q"� �k�Z�kmNf�6\�Hp�d���Z�	�vh9����)Y{����%Y"�mӘ;_8 g����k�'���
�p�Y�6
�n@@�[�o݄t� ��
�z��Ζg�.�P�O��)2��	�0�"E�����&cw�-�-���.!}�Tk��?-�;�\r���vos/�+o@@�$@�7H��\@p�@��]NxK��	��mHK
�h]�M+�1s�1���I���H��̢������y���&n4@@�(@�׋�Ƙ@�@���e��ta��e��eC���5��
7�ܴ�!�vi��V(,|W�u��?@@�$@��%6B@;j���7�FWN89���'쫮�5o�ZKw����?_y
c~���b�!� ��X�����!� ����ES1�]�j��8�E
�Bk[�f>�{��W.�A�)}Q�u��[A��@@�*@�׭+ø@�@a��O�r�q�T�=�]tnS���~���箦D5x���@@�x=�L@��-p,�w�y_Q`��Ke⌭��s�\w�<�;o�lG��n���k�r8� � �xA�o�^X%ƈ ���ff*��~)A,�P�ڇ�t��{?�k��o���td�
C���#�����W���|-.��V@@��M��+�@�	���g��T���q�(D"���"_}�H�n`��z�/���]I�����U��폶�>�O@@p�@��cch � ����q�U�8�>�Ŷ������W�\��<]6}����A�f5�e��{�5�\��r���@���)�Pّ=@@\)@�ו� @�@�P>�VJ"�T�������t�����s�l����U�t���j9x�2����2x��]��{@@/	��j1V@|(`�<�a�9e�T ٩�4�<��؅���;e��.�w�%�T���$6����_*�;ϒ�P�)�2x��[�2�# � ���pQ �A�f����#�֒[��G�rx�9rʩ�̳��G�c�x�a��d�������Ԧ�E��jc�o+�w�rd'@@W
�u�0(@�!`�3f*���ƤS5,��ؘ٦
�2Rh�ȱ3Θ}t��矓���Y�Ԇu2q�i2�m���pݭB���V��mL � �M��l��91 ���
-d5{7�w�v�C�	��p<�l���~1���Md���u���*d{���[�1#� �4U �Գsr@�����Τ-�ܩ�]3�
�AK�A�Zsw2Yy�	�.Ɩ�+Xd�L�?"�ې%\��lB@@�	2x�P� � �L 5��\�a����
���
)
؎h�6>]=Ñ	����-R�=����,�6�/2�
 � ����6��b� ��C�ws�ʙ��f�����,���%i�~�uv%��Sԭ�E�n�L��z�f��t�th�mD��Fk,�PE�w]���eג@@\-��YW/�C@��4C&���:�i�j�j���Ӓ��I��5%L��jZOL���=<^|��i6�|��Y�B�U�֛��Y�y����%q�@@��|�u�1@@�#0�Y��TRf��i��+���ѱxq̾ɩ��tS��֠�yT�]�[g��`��j5Xk��U��55|�4���gaO�_W��Ռ�nKQ�O@@�.@���+�@�@:��8`����R��Q5k��U��s���� �	��ͳ	���B�ٹ��ր�*
�u��cu���j��S�!��в�*�hX�^cɇ�'�C@@� ��9gD@ �
�3�����n=�t0���^�6%r����v5ٹ��l�7��t�M�l�����n��Y䍵����q�j1��[M3�7A�2mS�}�郏@@h��f�sn@$�J��.�`�����N]�<W#��}���e5�inl7��k^k�JY+c����Zk���5�ʵnS�WK7�'D&���^�Z5�[my3�
mk��i � �xX�����#� ��l.�	�Ku�H�r��b���)�Z� �l���M9?S���8�j�����9~�f���l�_��k�a���*��g�48<�}��*����˼߿���Oo�O�d�d��24�F��:$g��Y�n���]�8�@@p\����@��	��]��]��s�y��	n:�]7�"�F�r�x��9������|Ʀ�X�Ҭ^+���[3x���?������ǝw=<����U��u�\|��rх�ż�!� �S�o0םY#� ���Z��,X�K{פ=��U���^l)��-Jp�hD�<����ـ�!�r(/�������#�Y��uN��6Y�뚯fj	Wh[:���O�.;�t:#w�����Vy�KΕ׽楲A�|i � �� ���f� �8*0�ٯv�Xm~Џi0q"�t�����϶��ڿ�udCrƱ�p5�;�*g˶"��4P��Ҭos�I���Ӡ���K�Whi7���X��"�-j�a�0=��[4 l]�C~�m������c@@����/3g � �p;�w�`��}Y�UOޫ7Y�i
܁S�wI��?m2q�����y�E�Sd�\n.��`n�D�D�Xs;~�͝5р�M��
7�����]~�y�J4T+t����/�B^s�K�Ϳ~����3C��� � �@e����@,؝�k��Q�5-�@�Ȋ�h��
��\g??#���Q��R�9�1Г7��5�[l,�c2��7����kƾ���w��u�DĔjH$j�a���军~6���.�7��\F���m � ��൅�N@@`��)�0�4ut�N5�X�3LkV��-w2��m9��I�y��>��qI$�o-?G�-�Dg��
DF��y��?sIƨ�-�Զwk��K[KKx�Ԃ)�01���ڞg��C�<-O>��dMоB;<|\����˻����/��7#� �xU��WW�q#� �b����T��2��Kײ�}��t�8�T_O/���னN;_�p{�{��-	���2���?ٹlss6T�����B���.1�۷�~�r17X{�g䶟= ��Ⱳ�ޜ����/~KL���\}��ny� � ��>YH�� ���2�̉��v�+���G���>L�Ӕ1(Ь���q��i�/��XHB�y�b�nMY���\-�p�ذ�_p���i=���qwH2n�vY!�
���h���ö�V9�Y��q���?���~K��=1Y�W��R��@@��n�
�Q>�� ����޽a$-�fVJ��,OX-6uWo{��i���z���)���\
�j�wYK�R'���C{[����-�9LY
s��2�t��
�x�c��
��}뛯����j��?���쾒ü��ߗS6ʶ36�܇@@�'@��{kƈ@p��܍���j����~}���L��U��ވ�d۪�q�N]ҷ����%R��uĴ�B�X贖��f�US��9���|�?���v�li�5�W����rꐜu�fٺuH3mk��V�����7��������'�-�����|�r��|@:;c�>g � ��7�zs�5 ��H���㱌H73}W�M���-��޿����QЀvj�dI�Ύ�A��%�p�=�R�K�/c����7$7j9���������y�ó�L��sv�._p�\t�v1�ki]�C֭[%��etlr١c��[߹E~���Y�@@�)�z�Q#� �G���k��r�M̈́#�|hy&�m'��#ͺ�z�������f2�Л���[��j�h� �w/tI���Aޝ�͉F��'w���Lݻ�yT����w������l��AK>ܠ���{��K3����n�C9^�6!� �xQ��W�1#� �R���ɓ�q��G3�tʾr��fK4X>�^�D��H$O�;�fo���o�7�o��W:a��50]!��ڻ;��-;�%Nk��[4 ����|�3_����e����-Kz�{kJ5��ۋ~�F@@�	�ޚ1b@\+��V�"Z�r������*i�.>�vx.#���Ng��l��m���[��v��Hw����8��)?WS����9��/;ϒ��>*�g�_�ALේvή3䲗�.���~���@/
@@��x����@W�`�)�`W���i�7��J4t�,�[v��ĉ����%\�
��{Qs��'��E��]���i�u���k���O�Tξ�v�P��~��_'�r��nrf�7v�M?�^�Yٻ�P��m{ۛ��px��LM%��Z�?@@�'�"�Ǽ7l�8��.���~�dϞ�#��X �Iۖ8���̔L;w+�2mQ�����_�S��*b���'�+�{�����w�e�r��3B�q����[KOl*�ȁ�t$)�>�3{�䔘�s��	���y���$W���}�6Қ��汹���]��'�'�}���͛֗ݽ��]����,ۯ��Sv��m�v6 � �K�nb�w����]x�DV����@?	d���x����j�F�[��z��]Uy����s��p(,���Q�_l�?P�o�HΕ���|G4 ���GO�wn��к�����ر}���/s��G{Fn��r�/�l�t�:���?|�[��^s��e��w�E�u�yv��@@�x��N�@W�Y�a��T�_�VYO�)�*�*�����q��~X��D�d�������i����?�_��c��G��44�W>��qy^k�~��iF���V9�Y�����ß��a���_������*�.�Nۺ��G-��� � ��h�wWo	1Z@�(��ٗ���}	q]¬ŠaE8w���L��?aj:ub�Ύ��˽��%.
�&j��]:��hM�w=<�%��q�
~�B3{ߪ�s?��?��_V��l�����Sϗ���E��&��e��%;�@@W	�u�r0@�)�˕�)y-3���i�oʾ`q-�.�����mB�-|��僱1���m��J[k�÷��3k]$��?�kfs󱄼��Z&��뾲�G��!�ǿ%]]�Kf�����7$�8�_�*�PH:c���N�Nh��� � �m��^?F� �@��M����3Ss�3��tѸc}��kp>�֐�.ʹr�Jٰn��Y�Q��`��}b?�[��j�'�ҥj�}����_��Kn�[k?v�х;�{���o�fn����R��m���3�6
@@��x=�|@����5���.���BZ��~ �w����1�����<��Bx�a�_O[��[jh{y�/�ޤ;��7����=%3yo��9|�x��l�:�l�)�W"`�lg6 � ��V��k���!� �
;�3���w�������d��j�����߫/0���C�o����s��Dc����9y�}剸}�'�l��������葦T�M?���go}󫥿���g�hD�{o*Z���N�@@�^�#���u� '��c�ƨ+�� @�*0��|�z�R�� ��ظ<��އձ�tܦ�"���!�,��x�
������7�,�k��f�&�[L�7�"�8g���S�6q����v��)����e�vww�_����h
�%-�5��1�N���s���U}K��- � P\`�K~���D�G��d�o͙1 ��	���	|�h��]3P�p�î�/�ٰ\���������+$��:���ց�n�V�w"��7�X��ڼnho{��E�o��r��Ob,�&/�l�\��K�b# � �M�à!� ��rٜ�_<jT�|�P��>;�g^�6�B�w?$�m��j2�/=2#g
ɊČL���[�{����!�3�t�'�Z���p��l�����3(��Uػ���];O��s~d�\p�Y��#� ��F��k��� � �=S��I�25��4���6�!�/
�>��X9��U
��[l����փ���.���E��<����ن � �SJ4�ta� �N�O�-��zc�㍫�jqX��ԗ�\�c>�[���k�� �=�-�p�֍E�<Zt;@@�)@�ן�ʬ@pD������Hi�yɤ���O �7�����{O���b�A����#���E��&�ӒNs�V�&�@�^��$�@@�	V3x��ɝ@�z���󚰼�8�T�,ڭ���?���붯�HȾ��&�oj��'�͹.B:��X�Z�	
��@@�!@�7��,@�]��ߝ�xg�/J�>G:���x�f�# .8I�r �sA�7�풯�Z+�����=�6
�>��L�&��.-�\���N���	@�^_.+�B@���k�wM�ݻ'��[%�����
�$`n|7]9��AP�算�h�'+1@IDATM�9���[�\�p�4o�:�l+z����g�v6 � ��S��?וY!� �p��	�Yh�8�ڻK�x|����K�}╯��pX.�k_t�ݽm���d�վ �~��}��e,W����o~���%�Ȼ�MEk�؉ � ���C�����K:��g��7F�<;�B@�6��tJҙ�j�N�g����>ޥá~�,�Ȣ���
%�萯�,z��ɬ���eX3p�j�˿i�-l_�JcK��rϽ��t:-瞳MV����r���� � ��
/,�^��?��_��3$������@p�����p$��YT���=�����
�A����W��,9��Q����e]{��>�~p�Ĵ���G������/�-W�����.�#� �> ��Ed
 �xE��R�29�7\3AFZs�ܝ��C4��[����^6��U�
G���hv1
@@�:��)@�@��q-�p�T�?���1��Kk�@�g������ٹC���ZVa����_�7._?8�Ί � (��Zn&� ��}3UdO.<�}��j<f��|=�^R�̕�٠�uT������w�� ￟�Nֶ�w�?��1F)��μF@�_����� �E��4:<���L�M�0��*�X�2�w�
Δk����eu[��b�/ݦI���G�e�G��K'�{@@���m�0@�!�f�^��KsN`�rV�P,";��j���ڿ�;(+"�d�g�·K�D{i � �4@�oP�@� fj�����Z�֯��Z�x~nZ�Bu�^����u���5���������g䏟8�p�@@�M��m�t� �@pj����X��LmaOi���qO
ٳ��k�n�^Scy����
�iנD�yo<��/��5�ԙ� � ���ߐ@�@(T[�k8��VSv�r�],vO���kZ#rފ��������Y���g��O=3*L�uBC@@�F�6b� ��������8S���:��\G�t��zM��'��]�~M�|����;��IN3���#2�uyi � ��%@��.I�A@ h5�3*�xVN'zt"hW�s�5�U�g�^��d޽q��sCo��j�v ��?y�h��q � ���a; ����LC���\ٓy�ÉdUY�^��k�:���@k�\hCy������r�@��͖��hB�~Po�GC@@��6 � �A�%��j���=����vb]�Z�9Y�<�5ZR��כ���kd[W�-��Ğ�o:kK_t� � l��^f� ��#��D��œds"��д�W��*�ẃ�fn�Z�F���k��k�p�-���?��Q���I���x@@�
���2-@-PKoG��,.B��}��)}Q�
�"r^o{���x�="_>{�DB���⮱i��j6׷"� � @��k@,	����X�Vƣ�A6� ��yxLK54s>9�tF$�Y��/�n\���S_�5~������,���gF��,r  �F�i�ÍcdL �+��<t�v8���Ӌ�h_�l�E�@*�ѽS�c�k�V;��w�C޵������CzvJn��Z��'*�o���* �@9����?}b�_k���3o�[�}������{FY}�{��H@@��	�C��D��I�;�7��N�c��䴎H��{2+?�!P\�@�@@��d�:�l%2x7o���H8 �������|�Ok�|�@����3g�Y���f�''S��z\R�B]��E���.��P׀8@������cW�\��=o�޽{g�K��W;�wϓ�!� �U�ΖUrnߒ��U}���:��?}d�l���|z�ƺ�qX��퓇��@@�'@�7xkΌ@@�����t��$Ta�Z>�����x��Zk9'�:#��SW�5��>�uO�An�V�# � �A ��g� � P��y+;坚�kW3?��={����%�~>�&Yk�kP�z�|�уu��� � �� ��5g� � P���ڵ����S�qlJ���R
M��zekD>{�)uO�_�#ӻnE:@@�%@�7X��l@@���h���
�U���: �Q�a!�o^_�~��qC}7��k��_=F�o.
&� �8 @��dN� ��x�P�-�U�L���R�a��wϟ�?�l��5��7"�����`@@���
�Z3S@�(�w�"=��kW���j�Ҟ�vuG?.X����=T׈
���O
��#� �G�op֚�"� ��E�A
�}B����>��~ٛH��%}�D�zs�]}�u��kZ�w"���F@��`�3�D@�:ީA���ꮳ���'sy��{E�5i>0_����� `��{~�g2L@@�x�J� � �;����.�$�a�ʞfJ5|��#�tF/��T��+Z����O�Rƣ?�E@�"@�7(+�<@@�n�ӻ��O�ZWw?;���jxr2�p�}"�g;��5�'&R�h��>8@@��x����@l��Y�u�W]8�t~F~���$G���,�x}Vo��,�xa�L@@�qxgK� � �C�h($�x�&��X�ၱ�|��>�bJ�^_�w���*B@(/@����"� ��v�萏��~�Cr?�_��;�Zy��
��8��ȣ�I��s  � ������! �4@��
ʅ�]�����Z�!�/��'�C�][W�5��O�u<#� ��[���ח�!� �@�ZB"_�h��Z�:��Դ��Р�m��Z�BcQ˧��ؔ�c9@@������V�@X$���]�׮
���柞=&?:4^o7�"�7N�<�{�Dž{�Y��@@@��x}��L@)��V�e�{l=�{�}^�Ngm�Κ+�+VZ�d6/OON[>�@@�-@������@@��Z�A����"-���wߣA^��_�)�ڭ�ixr2�f� � `�^[9�@�(���U�f�F[�~��i���#��Ig�0�t��M��6o�83 � �v�n_!Ƈ ��������_l���~yt<Y�#�yP�:������3d@@���0s@��ߟ�I6h6�]-S��w��$�����&
l�Y>����c9@@��x����@荶�W.�"a�{|���i�����覙���-��x:g�XD@�^�/�C@�.џ�_{�:[���ɷ^��O:s^`M7YK���v~�8# � �
��X'F� ��v�z���z�Ŧ��_</����>b�G�"a����\�#�d� � �N�uZ��!� ���Z�D�)����b�\��y��;�����yW�+b�H�Yw�:#G@+@����� �ب7[37]��=8��?���]җ�&��JKs�=+l� �B��7�@�0I@@�>�7mX)�8uU}�,9��g�ɿ�Y���^�Y��M���5f� � ���x��| � (����(�Wt�:��x��L��'�9#
i�-?C�l� �B�o ��I"� �@�b-a�g���i��Ɲ��-�?#S�x���������-�q � �Yh�� ��8��]����ӓ��{w��:���V����k�\� � �H0���Yf2��=��S�$#C@��vko�o��32���;�n88&��a��5mvtG$S�Jk���f~_�D"���.]]]���#!�\-�@�N����@�[�O���̎���Y�������M�v�@A��h����(��I<���aٻw�LLL��	G � �4D�ކ�����[�A� ������}2���2vS���2r��vȶޘ-}�I�Z��+�J�|��֨4�b�P���I�����@�y^�fM�s�@@{��ד�@@������/�f�O�'29��GdT�i�HX�1^�ƛ��*�g�3�^�Z�<�Lٰa��;>>.G���;�G@�Y��͠t� �Tx��J��sN��[M�?3��_��q�q׵�ܜ�9�+X:eW��EN{``@�l�r"�K���6�B@�!@���@/�Q
�nC��?94&��i[��3�Lh�d[[i=��	��www�����TLن���`e]9@�C���� ��(`n�����)��v�xd�ݯ��|��}�w�Ӧ�kp�`1��-ڔ1�;���moo�l6;[��ܾ|� � �8����g@@��@o�E����ҥ�v����|�j��ijG_GR���0�k&��?����-ύ@@� �[�G#� �u	l_�!߸�L[o�f�{�?-7�kll���D�r�kc���m�===��OOO7�4� � PF�o>B@�x��~��s7�z�l� �z�c���	[��3������;��mm�W.g���uM�D@� �;/�3 � �D���(��i��#���[�{�O��/�Y�3��v������<0���o@@���U��> � �@��M׾v�6�=�m��ټ����cym������	G�rj�;��'ā � ��	്��@@��:Z��+vȺ���:Zr�D&'���!�����8���1k�P($[{b����!� �xG��w֊�"� �@�w����!�H���5�����G�&n�f�k��
���?n�Fd�t��	��@@(&�7�b*lC@�(p~�|C�5�5s�Ζ����Q��S��얾��ّ�*�*��ξ���@@ ��e� ��P�ȧ/8���
3�;��߿s�d�5���|���Z��@@@ �̑)"� �����!ynjZ>��A���'��x�5Sx����Ó}y���j|��ս5�� �4N ���-��"��~�8p@R�T�N�žc��

ɥ�^*W^y�D"��\�L�Wa�	#� �����E[e"-7�p�a?02%�~�>�#
$h�Y��WCۑ����d�R��pX.Y�c�XB@�n���1�ԧ>%���k��g�{��}�z�r��J__�g��@�)��x�+�B@��h���L��G˝G'l�U�P�O?�Ó��7���紵�5d��m�`|J}��VuKg��jV��~܌^@&S.�/�x�����*3/>kݽ����}�Z�|��Yfs9o���f�\�YJ�L����w�.�	t�O~�d�.�ὣx��d � �@�1
��p�y�Mȓ���;��D6/_�3,_}�ٮ���s7i��V��)�����o�v͆�z������3��d���l��џ����ˎ�F#��HkkT-�>g�w�>��V~�)����RkjL���W_]j�#�p�N�	@@����"�W픡ζ�;+�Ì��}�}�<.in�VF��G9;����g�3�~#������d�&��266%��q}��:�[��M���i�6�0�2�yC�����Q�q�A���9bc���l �k#&]!� ��8E��?�j��Gy�پ����-��C��c�r@�'[m�Vvə��Ϫ��3٘��I5A��l�F�۔{0�2�4�6c��S��Ý��Q�߿?��/;wl���x@� � ��]�zc������F��:8*���'}���X����z�4
��LF�)�Ьf�m�@��Y+P��\�]؊ PZ�oi>A@\)p^�����@-�o>wT���C�tp��R�)i�uj��wl%�k�ϭǙ(�xj6����R��@��#�9\�q��lܸ����'6[pN���!!� ��^��w��k�������:J
T��_?_k�<�w�>(+Z��e@���m\��3.�ܐ����Xi�
p}8��٬	��e/�v`��&���)6�_.`x � ��W^1�B��;��Aޤ��d�7�q=�du��B���0ٻ�I�T�p.>�d�NN&<qc3sC/3V3f�3\�8s�����Jټys���cblh4S�o3�97 � P��U��W�X��5���jH��v-˵Qo�w庾Z��jpw�7ҫy`P��	���n��-5)3f3v3Zc�>�J����G>B�w�	�� ���� � �@��� ���k2?�&�'�=<ި�}���^�EZ[���}n����|����e��y�j���j�[?��ׇ�����)��-�z׻�3ΐX,���6dlf�f��X�h�헛=CΏ �@�֮�[��%���#2��6d�OO��U2R2�t�cE�|��3�7n}B�2!����Wl������0��l�?ܰ����	���h����C'����\�_��r�W�J^��WK8�T���2�d���Y/υ��G��֒� � �@�.^�-���y��ˡd�v���3mǨ��7l��^w����=rϱ�eG��C�k���*�m|=_�
s����}�L0cr2�A�.��u�*�G����5�C�o��XF� ��"�]3F�f�l&�ãq[���d]G�K�k���%wk��������	9�HK�f�n�z��Jj�������O��
�ܝ�6s2s���H�k~ϟ�o�\~[Q��G��{ւ� � ��u���_{���Oȍ�Gl�3���+׭��� wb��A���\p�G��K�i.�7!+Vt�,{�Ǽ-#��Q��@����u��@@������!;w��m��SW�`�թ�s<'09�Ԛ��
��/����+�6��ڼ�@�6��y�7 � ������"?�j�l�j�<���1���X>��@<��Z�y�O���\͜i�	p}T��^ ���Z��H@@��\!����Cջ]���薟\������o�2��LOg5g3Y3g3wZy���>|� `�@m���9'� � �8,�m��j��o�P�ݹQv���eJ7����%��]��-���������<"`j�9����Њp}p}�2؊�/�M��7�G@@��&X�W�m�}Ld���h\%32��J���h��yz0��v	���i��[pш����1��9{b������#�*�D�"2@@�����lM��C9���:�A,Ͱt�A{{�D�D��\s\'�	^!���DC#u�@@|)�L�}9/+��b�&'M�8i�+@�Qx%K� � � �K����d}97+�2Ƅ6'����J�X�;@�x�J� � � �[2�/-&'M�8i1�
�y	�@���m�+�"� � ��̍���]���$�7����X���؃w ���x��?@@�7V+���7�+}y`SƆ�@�z��+�� � � �t�ڻ�J]ؔ��@�~��� � �@��<+�/`�֦hl�|�5����MЯ��:|��'@��>?�F@@��P{��B�(�s�|e��Q�R��&�mw�F@@�)���9�fd� Ͻ�K�j�ܽ_.��[n�En��v9p�R)w����b1�K/�T���J�D��LLw�
-�q � �K`fF$��k�fk��U(d�`�Q�����N�{���ɧ>�)ٷo�7܀Q����={f��z�\{����׀3�%��ފ=@@j������r�=���Çg��/�P^���IOOO�=ֶ{��_�{�0k���U4�jr}Twm���x}T���=��=��t�L�ۘ|�$�w)��u��d � �@���N���$�L.�x���<������~��K}nכ���.G����j�_	�*�~?��Q�*�^��{��A��-�:���\}�եva;
�&k
'� � �@�Lp�d�,
�.�0��}̾v����nO�!�W�UD� ι�+b�X-��һ;��K�ut��8��Ɋ�-��&@@��,��ܝ1E)+4����cW�����@��|���{��R.�P��I�B(�����Ci�`GDAA���N/bEl����Io	%��].����}�2{�s�}vwf��f�;��睻s�}��)'[��T�G��(ZE���|ǰʧ�c���Z�+X��aSG|.m	��F@@�U@���7r�}1ͫ��~}�)'[ �Je�`+�@����7@�X�0 P��2�8@@ ��…s�qD��W����r��l�T����3��E�(���;�r����o\�J���c"T-��l�� ��B`ٲe%_f�ҥ%��넨_?��+ �[�`�������Xe{�gk���
Oek\Slj����C�@@@ [�Q�����h�6���*�N����~2w��`W��S�!!PO����� � �@
̜9��V�sN���SV9������~@*8묳�:5��&$�-@���=��@@��e�]JnQ9��H9e�sNP���^�L �UV@�Ύ�U�\�-�U�r�8oܸqr�%�ȉ'�([n������b5���Yۮj�&$�-�\�
p}@@��8������հ���s�JQ��_����/s��U�������F��r�t:-�dR��9�%�K,�>U�T*%��ÖE8{�Z7��F�Qڃ ��Y`�ĉ�/|A.��B�7A���)Լz�_)��ˑr�tԡy?O*B �#4�?��1�e��Q�Nxrj�W_$�S4�� � �P�ᄏ�q���ss%=�y4��)��ۓ����Cq:�/j)�m.���*W��@�����m�@@�
4�:�|��,.�e˖Y���t�[�J�ϑ��F��n�+hj�^в\�(ZE����
p �@L#���f�K\՟�Gƭ��w�qǬ�l � � �G}Ԫ�>p��S���Y���M�m�ǷK[[�o兡 ��{)
�GWWWȔ)S���@ L�/���M��[Y��Ԍ��+C7|�@@@�T���F�*�m.���ΉU�[ ��x�P�@@hh��ff�+���h�6{?��a�a�\�o冔� � �
.��$yu��U��Gq=��8r!���-ߎ3@@@ B�DS�Z[^S�l�{�`T��@����En@@��@KK"�-/��Q6�rۋ�C0*V�| �@ixK�"7 � �DT���Ix@T��W5�j����Q�?��p�L�oe~�� � �hmeo���F�\w6�e8�T.@��rCJ@@@�����D���7r�7��� P��J9@@"#�DžyD�v���M���������^@�/��%I9 � � 	����H���Fb2��Ũ����-�����R* � �@@��z��T#$�0-F�v�ZD��j�#k��"��l!��h�F��� � �@�4x[i*TF,����`:"qpp��ZU^s�9֍�cԄ�cԂ5@�Z�ୖ,�"� �TE�=�*q�f����t6P@Gi�Ш���1zw�
�1b�?#�c�� �~0��oQ�C@�] �U�N���CS�qmfoRR�Th��gE��bj@����3¿7�L�]w�%��{�,Y�D����ߨZ���.n������~��1���G�*	pV	�b@@������)v��o���Ǐo�U����U�����>7-��G�#�G�����/�W^y%������~���?��O9�3d������T&�
��q6 � �@�4pjO�t	_�
S]}mx�kii��T
��{m;)��G~��K@G�F=���1
t��ڐ���z�sm@@�� ��P�Ytct$k��նj�I�	p�D���Q�����DmH�S�o=��6 � ����ROvX`����c��?U�6j[I�	p��E�`
�w�}��Xj�M:!�U ����#� �A�VpW�u���jտu�L��c'�k�9iuNYm���T��Gi^���k��̊�V��"^&M��
@�@@� 	��*G����oy���D���+U��(�~�e���+�Shtժ5�>n=˩���Zm�6���(ύ�@
��ka#r � ��@�+([�e�|��>o�ʕ�O��������e�w��m��J�Tɹ^ub_8	
�o������m#U&��Q�g�W`�7�o|ul�9�ވt4�D@�,Pn0��@��ի���W���ڛ+d�[+��@D���}�B�����.���
�uv�T៓W۠m!�����%%�V`�����Ct5lB�Y
ZU�
ڱ4@ht�b��:bwժU�J���ݲ�;��]w�Nz��g�����Ťr��Գ��'\�u�I��K��4h�6��i�FhCP�k�����s��zu����
	�z
0o=��6 Pe�
U�x��@��m��AkZ��/�"�{�L}�������2w�t�����Ys��?W��w<sNJ]'Ǯ�Y��f/KiX�������`-
�Y��?�JEס��EƏ�=Ou��1��GNXଳΒ��;O/^�Z֮j�U� �[�� �@�r�(�(�� �@C��>6<<��c���ˁ���Z�޻�$w�}�l��l+���$---���<� d��
^�F8˽�W��[V���@iKK�
��h� '
:�ԗ����'�ZIs?ƍ'�\r��y�r��w˫��j�o�G�a)CҪs��޲�����?������3���f�P+���� bNs@�$�|�#���+VXo�-Y*��k����r�?��ͶΙ>}�5��y�}�\��Bǝe���,9W_9��z���Y&O/k�v4���7���굶l��q4b�6f��wn2���x��k<��j��i`W-HA�oz�: �@$�ސF�F#��~Gz��uww��А���[��b3i]7*��2֮�칛ܳ���
� �iӬ7�z�(��w�
1��ǝ���X�V���j��C뢣55���; ��C���q5]����s4-T��?B�]���6	nF�6 @x�T_�����[K@������+�s�Χ�V[��'��'�zS��D"�,�o3O^\�XfL�lM�0e�+0h���گ���v�k�gYg�/��T'v���p]�vks�z�R�ȏ @��{����
f�.9&�P��r@�O�\�?�{{{eժU��&���=�Pt5�L�(S�N�UkV[����Hgggf��Z� ��߹�}Q;�{�l����+�[)��W�X�k櫛�ӯ��C���W~�;GoSS\Z[�(b�j5)����j�M�o�z�� �@�	��X�j�]lȇTK��w\�}:%�ʕ+��<�x���=K�֦�7������Y_�_k�ū���
�u����k��?9l�\�ƹ�߾f5�.�.v~
�vt�Y/իS7

��?s;�(�DB"�`=DK�uUE�$@��N�\�!`���~��W�(�T���7��>}ȉ>TMGA>��U�ݫ��,�n��u�B�|�V����Ɍtl�F���oo�������~���i�e�otԦ�4�*Zs\�^���y*e�>�G�b挎�c�R��:J�~577�vZ���?�i P�U@�H@@�oJ�U���J�/�ޜ�T*�˽O�]�� ��חɻ߹k������U��e���HWW��C��D&h���za{�������n��^�./�B�:�Q���<?�q��׶fGF�U"�4��G#�&mA*`ҥ�8�p���P�N-��r�^�".E@ 0��c�J��}��N�088(˻V�V�o&�--v����.yzѫ֨`;�l_�.ؽ���}����r��m��{����GJۣ�@@�00�7̽G�@ ���Q,�b�q�9�]� �@-�~o9����j��}�>~�̘>շ���}v_ >�̞��5JXG���ߝu�|�mg%�ǜ�i�n��,ԶbF̺��w��7_�Bu�2*9�P�G@�)@������� `�A�u��x2�4_�������O��U/�#�~��9�t�m}������]�'{��_���ܻ[n��,ym�L��iyu>S;9��u����w�����ի������-DחZ���t��<�<��WZ/�G@�*0��P�ZC��H�~sYJ���>��ܑ�j�Vp����(�� ��p��ʵ��+o����Y��Θ>M�{VKo_�u���k�":��x�5�R�.i�]��}*%k�A��v����A�}�[�}��W�9��,@@�z
୧>�F���oB� ���sOO�5ZM�ɲ�C2��Il�h'�r��1�`�(���s���f�8}tut-��If�n�ZX��cz�yP/1�=�_��<�Z��:����\3�at�a֩YvaYej	#��udw�=n��r�%�R��M��fs�ѧ�3#y�ڻ�-���^����i���y��T��x���~�Nrl��ϔ���b2s�dg2�7V֬Y#'N�����.�������D@A�o#�"m@�@8��S�\���Mnww��{me�����e˦�b.E@�
v��e�%�t�ߛ��Pd�v���4��x�4�i t���ɓ�ѼZg�^�^=�?W[K͟��#� �� �[Km����ߌ�A�����9u�R�а�eb�{l���4�@#�2&Cv�����u'���w���9�Z_�b�L�2Ō���3Wp6�4�*"� �E	ċ�E&@������ʫ��u�nWW����kE�&����@hT��챫4�����U��F�v���t&���z�7�y�{����s�F@�!��z�sM���כF�>{[�J>h����?)S�M���M,�
jd�i8 �@�
��|Y��ҽ�m�`Z�+u^^MΩ�o�s[�{��$@@ ���
{R��̵ao���59���x�ܵ�D@ �s7�%C�$���5����j۸��,@@�F ��h=J{@ ���h:��Z��j����a���mC@����2������K�}�e��μ�#� �a`����ԣ�>��P
(U��7�^y�����dҚ{w8-�`��J��@���;��/]��6m�7�y���<��F����38�m�}�1{YL;/K@@����wp}����q��{}``�:��2A֟<�p;/K@���ty�ͷ�������hp�m�@hdF�ֹw[ZZ�̝;��5�� P���M�W���m����.���#���d ��4'Z-}(�&���5z׹ߝ�:�@@�0�7ĝG�@�q�@�.�a1��9y���JZ� ����\��i������^��@@��
�
n�P3h��L綽n/��[�3���&a� ����3ֳ��;�L��V{����^��,@@��	0EC�z��"�@�
�O�k\S44lg�0@_&���n��=E�/�@@ ��
A'QEh�����^w/��x���N+@�'`�������u��y�z5�d@@��xko�@ "�Kws�ٟ+��,�@����o�s��R�~繬#� �A ���~ а��M{�
u�7l�i �Up�
���e.G� � �@`��+�4�@�7����F6�m ��%���\�*��q�s؇ �Y�o�{��!�@hr�y�����P{_hM�@����o���^��hw�g@�ް��D�@
���Y�s=�
�R �T��7Թ^nu�(��ks � P��R�ȋ�!��
�s�s]/��.㲜� �@$�3���u'F���<�#� �a ����� z�ͤ���םۡo0
@@���7�w�kݹ��U�R � �@U��Z:�#��,�~�Zr�� �@��F��i* �x
0�ד�� �@�xcZ;k�� 
��F��i% ����N@|(�M�;�{��*Q ��p�Muo{A���<�!� �A`�� �u@�����}L��W�0@�P�CQ��J:�~�b������0+��9� �]��A�!�
%�o&�I��+�,� � ����,6_#[�6@hLF�6f��*�@�7���k����T@����X�ѻ����T@(Y��%�q �@� ��W�4@�!���h�3�D@���	 � � � � �@H��6�W�kT���^��u�@���C�^���YG@�,@�7̽G�@���7������4@�*8�n�
�� �� ��.�� � � � � ���^o�"�U`�QUy)@��s3� � �@�
�mЎ�Y � � � � �x��i! � � � �4���X����+���j� -�G��i- �Q ����� � � � � �p�
�"� )500$����Jʐy�R)�J[u��c��%�h�f�jii��ք�b����� � � � d�A���T��@z{��ϼ�%
�RÒL��
��k���m�a^mm��N� � � �� ��[@�?���~Y�j�5R��R5�E@IDAT0�/�;a�8ioo��8�E@@@�a�6l��0@�v:�g�*���:�C׊3��O:'M���&_˧0@@@�.@�7 =�x��Ԅj �@)^O�v��ui�k�����^걷�z�:��v��f����^�iS5*���7W���E�ob�9�]�6���Ttɰ����sr�ʽ������r�˻�Ȓ%K���u�wM:���e�:�{���K愷%X"�@)���Y�y���TA�oP)���*3��Ukj�\
�wu��3Zx����� � �@zzz�X-�
,@�7 �;}��	�@�R쑸�s���u]�[�7��:3y��m}��ղvMoͫ��T*%�&M����  �@��l��5bwڬY:|7k�=�ѫ�w��-����v^�6� �DM��g��Z�C��x(kM�@�*�#w�ܵ���:�@@@��#x�~�~�@,�u�9wk5-C>�C��9�s��{0��~��
��wm���zs5@��#x�~�~@�������;8s�i]�N$@@@�*@�7�=O�@�2zV�j~`��X�DB@@@ �x���(Q���_��K<��ٵNZ7 � � �Q`�(�:mF�P�V� ̻��D���ޖ�0���VD�ɂ@���ES��o_)@(Z�o�TdDj,�g����P���_N�600 �m�şD�l��o�c��}@,��K�"+ � P�S4TnH	 �@���|�P�#RA@@@��	�
]�Qa@��� �����q�uԺ�@@@���(�6mE�*�����G��"� � �4��F�Qڃ�,0h�
K
S]�bJ=@@@�-@�7�C�@����jn�0��]w�@@@(G�o9j��DH 9�Mk�T�РRQ@@@�@�
t�P9@���T���(�a�k�M" � � �y����  �@*�
B��T*� � � h���*� � � � �� ��ۆ# �F ���!Lu

*E@@��@w�C�/���OE��Z��� � � �� �w퍠M@�
4'�CS�0�54�T@@@ �x�=T��@"D�0յ�=K
@@@A�o#�"m@�(���Z��-:Lu��唆 � � U�Q�yڍ)�Қ(2g������ע � � �� @��z�6 �U��b���V�+�S��Q�JB@@@ Jx��۴(S�c\{�g��0Աv\	@@@ *x��Ӵ�@���U��3��֑� � � �@��F��i/ P�����e�Y�ӂ\�귞+ � � �DY�o�{��#�%����Q�-%�Q��Z'�	@@@�(
4G�Ѵ�@��9y���l��ө@�bq�:��*@%UÒ��2���v޵��j � uF�F��� �@	��M2iJg	gT7��E�DB@@@ �x���(S���M&L�P����uк�@@@���(�>mG�Ї��?�̳+?M�̓�*w�@@@���
�@�.��'�e$����k�@@@@@���q ��-��h�Ͳ����^��霻L�Pvwq" � � �@
�m�N�I �@-4�hIHOw��T�ҭm�f�.T�
.�"� � ��Z�o����#��hnn��ӧH_���Y#CCC�T,�HXs��05_@)@@@���6\�� @�~�՗���]�'}���2�+��a��.:r7,�%�A訷?,�)�,M���4/r#� ��G�o}ܹ* ����פ)i2�3�7)I�J�R�5��c�ǭy|f.ߖ�V�JH,kh� � � ��_x���@�1�mmk�^c�@@@*�W\ � � � � ��E�o]ع( � � � � P���
)@@@@��޺�sQ@@@@@�r��R � � � � P�ua� � � � � �@�x+7�@@@@@�.x���E@@@@@���VnH	 � � � � �@]�օ��"� � � � ���ܐ@@@@@���;E@@@@* �[�!% � � � � �u �[v.� � � � �T.@��rCJ@@@@@�"@��.�\@@@@�\�o冔� � � � ��E�o]ع( � � � � P���
)@@@@��޺�sQ@@@@@�r��R � � � � P�ua� � � � � �@�x+7�@@@@@�.x���E@@@@@���VnH	 � � � � �@]�օ��"� � � � ���ܐ@@@@@��4��\@ �tZ��k@����4�T*e^i���xL��4'�%a^-��敐X,	� � � �@�x+�|@�1�һ�O�z�ͱ�`�Lf�z5�L&��Os�1���w�IǸvimk՝$@@@�!@�7�@J����=k�hݡ�OΜ�6�a
��Q�	��9^���2G��2h�N��@K���U���+��_vm��o���v`� � ��S��S�u@����a�����g�@q��nk$o��Ninn�x�B@@@ �<d-�]H@��
�4o/[�{p��*
�5F�|pa@@@�h�v��z@�"���{E��ө��)�d��^K�IB@@@���	 �e	�t��իV�un%'�5��$@@@!��]� P����]�fm��u�^���~iR � � �@���; P��#w�M�:0'�[�m@@@��	�Z��^@��drXVv�TP���j]�N$@@@�*@�7�=O�@�2z�{j�@�b��^�:�@@@��ި�<�FJ��뗁��Ϫ~v��֍� � � �@�F��i3 P�@�j井A�) � � �-@��h*2"���Q�CCC�кqtq`�� � � �@��m���! �@�z�U�p�JC}j*� � � � � ���`@�K �NK_o���:j]I � � �DI�o�z��"�e��a��e��e4�S@@@�ސv�Fj%080P�KU|�0յ��R � � �F�/� �@^���d��A:��ɍ� � � ��W�ox���#�5H�(���֤� � � �@��m�.�� �@e�T��jxv��ZC.� � � �x�si �@*����4Lu��o(@@@�� � � � � �@H��6 P+�x<V�KU|�0յ��R � � �F�/� �@^�x<<*�T׼�D@@@�H��k/�AdC�W�9��o�U,-Lu�"E#� � �DH�o�:��"��$B�
S]���A@@@�-@��-�6 �@�@Kkk�v�7�T� ;R7@@@���
O_QS@�.-�	s�0<h-&#u�E@@@�.x���E@���b1i�h|���ZW � � �Q ��ަ� �@����<�v�������J � � �Q ����� �@�m��H�T
�LZ7�#	@@@��	�Z��^@�L�	���<����n�o=W@�#[q�苄 � P;����J �@����9JVG�j�H ����y�苄 � P;����J �@�:'w���O��E�DB��@��q��|�z�:	@@�6�y�^��r@�
���dҔ�T�.Z' �@���I��K3����> � �@��Vߘ+ �
%���&&N�{��Z �@}t�n��Kl�;S]��1�7c�
 � P-��jL� ��+�5K�R�v�ں4r�qƒ��B�E@����@53߮N�� �SgIj�N�^IO��+�@@*`o����DU�s�ĺ��Ց�zm �@�bf�}�@@�+���
5C/��h�Ͳ��G��TU�T�9w������d	�_mmoqj�~����K���`�
���dI��ҝۏ9� � ��	�ϒ�@�H
h�5ђ������Ak[������3pU:�J��_U��r��[��]��^�Yb�����^�E�|ȕcdS���^�5o�wu����<�� � ��	0E����DV���I�N�"S�M�D"ᛃ��ej�z
 �@��z$��W2�?�e������Ѻv��	��,@@��
0�����DK�͌b՗���]�'}�� ]"B̚��c\���] �@����X��.�\X��+��'�MG���41-C��@@��x�N�@��	h`V_���ep`ȼdh()I�J�R�5��c�ǭy|f.ߖ�V�JH,�-F� ���������M��[DL�7����Fz��ǜ�@@��
୮/�#���@mk[���4�G� �v�4-��ĺ��Y������E2��/D���O�FB@��s��֛�!� � ,��7%��ץ���w�J�V�g��s����% � �@��['x.� � �@=b/_+��o�ز�J,=XRUb�~�={�Ğ���g�/�Y�Jz��%�Af@@��#� � � Q3oz���|�� �`o:�* � � Pk��O��D�hx�{�Rё�Ťt�M�[�*��?/Һ~1�H���|�����L � ��	�Q{qN�B@@�1L�6��2���%=��C�4���s�
%��?����@@� ��%%!� � ^�qsex�Ij�O�l��<b�V=-��n�%f�� � �^�,)	@@�p�[$��zI�������cb���n˜_v{f�@@���VnH	 � �4�@��r��t��(]]�}b����^���{3�Ŗ�#�Ff�@@���V��� � �4�@�SR�7�.k��+'�_�Ab�ʜ���Wn�l�� � P���8@@��Ho�aIO�7�2��؊�$n^�_q��1 � �@�͕A	 � � Ј��Ǘ߬���g9Ϗ/�L�'l)�25g � �`oa#r � � I�����JNý���9K��<56���#&/	@@�|���q& � ��4��̷%���Ș�X��V^��ch؁ �-@��h*2"� � �@^�����[�d�l΃����E̔$@@���n� � � ����_�������H�M���9���" � ��!k.6@����S���I�!ZA#@��	�!�Wn���{+������܅���NIm|�H���� � �@T�F��i' � ��	�!W=-�e�Kl�=��o%��(�؊$=mI�8Hd�<S6�LA � �px�Ki � ����r����Ć��v
ǖ�G��NL��z�Jj�1U�#� �a ��ޣ� �%��a%@�@@@ @x�T@@��X#ig�n����H�{}��A۟����aO3EÁL����!� �@��ֽ� �@��F�2����B
@ ��w���2/�����Y�ϗꦦ��wg������<
A@]�o��0�C@@���Hj�3$m��~&�dOYWK'&Ij��%=u����$@@ ��6�v#� �_@G��_���( e���w��ߗt���sdx{s.�ݒ�8@ ��=� � ���L��m/���m�.O��9�2��sȈ � 0*@�wԂ5@@�T��C�����;�`I:�W�JS{��d@@� ����^@<�)<�@`T@���):�n��n���KB@(_�o�v�� � ��̔�д\)��9f�t !� �T&@��2?�F��#y#��4JЇ����1演y �>��� � P���
)@@r�f%i}ۡ멍�ʑ�� � ��
4�z�@�|���
e����?�����e,��X����Ά���TJ�Si��������k�W���I�	k_-���[�k5�5�qi��� �Pm�$=mO�-��լ�43��}��j"�A@�)@����\;r#��찝�5���"�TL�W�Mq+����$q�%�'�2���)I��nҼ��TI%�II55�Fm�|P�أ��ˋ�a�4��k�Ϭ;W���1�M���7ʜ�se�w�D
X+Οg~6�m�BFR3���oj�A�XC@�X�oń�@�M�-:\�	&�	CJjxX�b�KY�|�M�W_Z)��u��gFO�J�K�FZ`������D�VtYDY�����^f]�ԩr��>#��{w��� ���$��<R�NB@�O�����@A����i�#vu۞ �n��\�i�!3�T_q3��N�0�J��aTL�Tj@79l��f�nqI��0#0Mך.Ü�KYm��4�Mf$��^\�
����,?��ն+Vȷ�u�twuɇ>��u�^ڣy�w���# X�����w]�=�n�b � J���6*f��	��t^X�J@G�Z�
x�>�c�C�JZ#z[��=}�Nw1h��I�a�s@k�)>2Z�����м�́�ؽh�b�ُ���U��;�(�l27X�6 ��@j�1H � �TA�oP)?�L�Q��"�e��#w�f�X��A�ٓ��1�4/����9a΍N��
��+ttt��hOče�r�&�n��=�Z�7��ևEf�y6�@D�xڙg��A�`ww�\}�YU<��eƌY��@��~�N8�D�4i��$@@�	��V@ $:�TG��Э��s
�a3�l�y��-�Sq�f�A�:��}�
�ZSX�|�ƭ�jս�<�H�.U�u}�p���T�Oƛo�)�>��HaY��W�	�;�U�}}}r߽�du�Oe�uY����,|�y����\�+d�ʕև�'O�iӧ[���n��̙3��c#:^?wG������@����zs5|���5�K�cV��u��,fF�jpӚ����:-Ši�׈]��>�&�'�b������-��f�^����|���]n��6�J�׷
R�,_��
��=5�-[*�z��ϯ�N�}�{��c���'z�g' � � �^?)�:
4�i�ZZ�)4Л5M���aݾ�L���-�c]��Ѻ:j�k�]
�$���q�Y!ݴ�����8�H�8�3x[�<�,L����^G�����g$�1l�&��/�7��
���-�̴���w�#?,�]p�l��E�G6�'p����ڵk38�S��>���`@@ �
	�-�B��:�C�	�v�����S��Ѯk���e��VM+\��4���? C�c���mom5���	��Cv���N�q޷��#����[�p74�����ʕ�V`X�q !t���^�>�2��@@�/���5D�$�k�͌�M��&:d=�m��5�tz�hj� �ܠ�h��SP��`��s��<��M|V�-S���_w�g�9G�z�o�ϯ�S��%^��Pn����,��'��E�e�����C�l�W�N����v@~�����ի�j3}�z��SN���͓���̱���_��/i���̾���e|ꤓ2�XA@@� ��$� 0�x<f�hM�9z5��2��4�M�{Y��5H��2d�zM�@��T:Z��9aͳ;�&֪-�o�Λn���+W��ꫳ�:?���+;�*�z�j��_�ʪݜ9s�iƍ��_7v�yg�f�m�[g�%�=�l���S�8�H�:'��@@@��e�q
ah6�4���!lV�7k$�R��KG��ٚ�<��uҠc��G�bfᄎ<n6#��2��x���W_�W�k�y��,3�뜹seΜ9����k��Abz=g�2e������]Y�:g�c�>*:���O�#���[o�uV^?7j���k���M�_S�g�}�j[���cL0���O�47���/���l�ٗk�|뭷�k�
�;9.��&Y���ۛ�չ����,Y�)��|�� B?�ӹ��o��'������%��	�ٷ������pm�SO>)��}���Fol݋�Q��&�z�7d���^�:j_��p�
E]+I:�C>h�����gL�����}݁�y�G2?�XL�M�n�������Օ)2m�;Ӛ5k�y\=����� � ��	�~�P^y���i��F�C&�����C�%C7�Ӹ{M�7n��i�N�&r�L#1���^S0��ԯ�'�!qvm��/_x���_��f�(F��6���Ŝ������?����䚿5&�:�cd��)2o��K�����Y�ө.��"��4��_�J�}��288�G��G>�냚j�ABw�l��ݻ�lo��Vr�ɧd}{B����Q��{�!3߸W��'���9�����~'s��|ٕW�+��"?��M�3�g�=�����F�Uf�6j���Γ'��_��Ε}߳�w�	����ܝ����_�p�����yO�ߤC?�!��'>�7؞U�
�ۧSx���,��Y�o~SfΜ�uz־�����_����7^�y���cG���Z�I��!�}�_��zї����V��m� � �� ��~��L����A3����3�3��vJ���!1�^�ի�|��nk�������.2%�2���\�O�:7p�\�k���3��h�
4�����#p�=�ʕ�_!:��T;�x�嗛��
\4m��U���癠ˑr�G?Z ���sM`�L��$�<�\�:u�_x����{t�ߘLf��/�����3�ȉ��t�1g��p�<y��
��?.��ܻ��8�P����{L�w�%�f���>���޵r��WY#�O:�伣o��u$��_��g@���\V�o�Q���8�����3��y������G?e�N����/���~�}(k;m>���ߋ�ٗ��fD}��]z����w�̾t�r��g[���\I=/��wdŊ干X�׮]c����>�~�2gΜ��9� � N�L�~��T,�_7Շ��ko�V��|s�Z�Y�����|�fdY��y��R}����/��v�R׭�z܌��:=�>�;eF����NgZ���Bp��.���/�L��Y���/I?��,#o�K̞��R^|�9���f�i���_��
8y+����O�ַ�W��e��Hѳ�9Gf͚��g��H߳L��+�;a�D�u�����;�믷�(kYk��~-ߝ~w�r�_��5:ם��m}�yƺPp�Y�z~���j�4h~W_u�Ew�ѷ�(��f5���k�8w{��=~��?�:i����[o=�F�sbY���.0#���}����];�[o�iyuD�W�=w��j��gv��� � �x��m�>�E�$�oWG�?hu�47��M��-�"y2�`
.�K��h�e���s*��(��_�F~�������9Y>��Ë�_L&�v���eK�m���[�;v�ɚ�>��c��Wj�s�>�dzڴ�;v���~ѩ:;;EG����Y_��M�t�-��;�`o����w�H�ŋe򷴴ʙ�!as�jP+;�H���YC�ʺ~]}�w��ͨc��A�W_}%S����'���)g^�Z�ؕ���l��y`�K�.냪���\�x뭲��[V��L�Pμ�����*3s�2o�|9��Cd��6�v�\�7���s����|B�z��<��s��+Wv�ћZ���;�{h�-�����O�M$F?0�F�V�Lg�t��k����V3:<!��{ok�f���f�;����?�u���|�̚�@��|��tMM��C��N�դ#����)OG��z�B�W���ʲ�;X����՟�G~�<��Y����}Vt�eg�o���e��6��i#�wİ�;������o���yl���0��>���g>��)a�e�{�X
��Ϟ3�^e� �  ����@��=�앑�w#S*��M�0�L�VEG�-��:Ńy���ad�u��@���\�S_��k��*l�yS����4h�Tn��Vy��3y����{߽�>�+�9ϊ5��ʫ�7�j)�Yu$�WO��l��v���NVs�Jv�"�*����ѳv�={�����e'��\���$iF�����YM`�V�FG����֮����8#��U�g�y�Q|L>��eͱ�a���l"_7eiL�~�]���xk��h�����|�ݩ�w&i��E}��&��[�����|C����3�����ݢA7��Ϧ��f��>w�)�!xo٧˟�\����Bi���}���f��+U�o�Q�W��C�/|�K�Ǟ{f�}��������~
`��4�m�����nc\Ǎ3��c��O?5:��>��t�1�ʇ>���{��]�}s�O��_���s�=��o��v�S��cg�^_.�e���>0z��G�4Odm��g�LyW����^����桂$@@�`�
v�P�	X�̚�5A
��Xk���u
�"m�0�F�
}����Z�P�jCM���Wk+�c�[�m��e���0�s�tu��W
�e�͌��f��7w���vi۵}je����kf���. �����Tv5�@�=����:@��Y�)�#A��C�;���J^�C����s�Hҗ=��'���/��R;-��3O#�ԇ!高�w�
��h^�G�k�\��t���7sH�d����;���^���{�v��Y�]�A
D}�r�w.��~�GD�z�5j&��J-]ܗ�̌�=�y�Mu��z�筗|[[۬��!��F�<0��lO8�Ĭ�]!|��>e�v�ۻD��:�}ڴi�}�󷑳�ʅ��ѷ�(��>�>��
��y�Î#�<2+��ǖ�iF��5k�اXK��+}��rʻ_�zpw����6�`7g�_G��=��O�.��s1;��v��E���w�Nh�l����% � �@�m�N�	�6A}��Cʒf�����3�9�m
�56,{��U��K�oR���̺X�F��j���O(S*�A�d	{s���Q{��L��/ɛ��4:#���V����f���ݗO��5�������3_������~���k�?���{��h֩�GY?��z�b��x�oĝ&LӬ~3v1���V�����:�$�ф����=8�u;��V͗�͟�uXG>����hԬ>nT⒫������/��O\#���0��ۭ�44�3݂;���5��L�������t]��߹�����lY�{�Q�������j���0�F���ܹs���I���uI���Ln��鋇3�t��7� �;���	E��U`�-̈bg���ŋ�J����AJ���@�`�������…�i3�� � �8x�/iI�4d���YsԚ �=QA�/k�2#��@�F�Se�l��ftm���բnA���[2��ߊ�Ӧ����ɴv��Հx��3\�Q�Ŵmٲ�mm��&9�:bP���‹V���R�����w/5O��G�S?��C�$3��ed�P_�z�h�I�ݾ��%K�W���9SuP}���ʛ��*�<�Z��}w�)Gy�`�Y�ROO��feyՌ�����/�T�y]]]��}�o�B��<p�|�<����}���yY�:WG�^{�U�k����l:��3��9w�2�6�#O]�<7��ndZσ�vV�o�Qf�6�ܳ���jw>D0e��;�.fJ�?���]�~'7���t���[�)4[(��U�cC�������:���3��~p�L��/j������Q�βYG@����5������!$s[�ʬ��~�r(����M�@o��٬׷^A����M���.��o���CG�6�9;5P�+��Ub����<�B8�]�矗��9O^}d~�\�ut�W�8Mv�mW�|�Fn�U�V��à�1��L@&;ؓ˫���ஞ��+�v��t��o��{W�m�F��TM�b���ˇ?���M�����yX��f�ux��_��fn�}���<���v�N�L��U�J��e�����[h�|3��3�]���'�g���x�ItT�>PP��������.p��`D�f.���hYz�@@C�oc�#��������N��o>M�w����F��e��~�`j����2`bv�Hl�u-�۵jό32��.zi���1������4`F�}�3�+�Ah�'O�w{.o��r�eW�ыI��N�������)�8��hF�j@�=Z�v����L6�b�7�p�k��r��gF����R��:��N���~�hP��n��o��|�c�֩atj
�^�-T�Bǫѷ�(�P;*9���Ι;W���ڬ��2���M7�hMu�3�E�_�{L�����ݻ�o���@@��
�
m�Q�j	�%@8��f*LЗ>y��<x��<�+*ipȴ�k9u�?���̼��f�&�� ��J
k���r�)k?�LG�����9�����{u�w��f���=^N���{��<d�����^x�y��c�9w�H��O<A>r��W��e�S�����]s��r1���Y�d�ĉ֨A
�h�������[ܦ{�
&�����~�L���Y�W0�*%�bԂ�6_u/5�ʥ�z�����N8��*��߽$���<��`�ҝ�x�uѹ�k��ѷ�(��.��3���W�^�}BzzƎ\�ztww�~G.0?7[�G�����"�;�1���Y��R> � �@
���K[@�i�Q���9h�/㧭U�DŽ��E��J�\�}楁�V�m���7T���9�|��6�u�:З[;m�=�&��l�\�tȡ�[n�ٚ�Q��Ѓ�ɟ����CM�q�,}c��z˭���/{VQ��7Ζ>HN6Ooooo��=�'�;�}[�~{��y��ٳ7�3��l����,5`���(��[n��|��}�;���ex�M�.�]p���jyp��b_y�e��+��~6�Ϲ�52{�v�BZs�Q�z�\ʩ[�s��k/k�ҥ�S�,z饬�^�:��Y�j��U�J��e�BC?��)�I����p��>�P֜�:���f��M�����S�IQ(-�mW�X���2�� � �!�$�X]��uЌF�4��>��q�-��}̬��<�֫�&h�0e�Po���Z��Y�"��@�z{M�t
��D�輯��t��B����'�_���3�+�?��tYD��GZ�;�3]W�a�?�/���,:��L3��~����鼌�w�\u����i0����bVn��m�#��ig�.���>�=��]���	.��9�t]x�:E׏>���m��(��i%fw\���W_}U������i�e���<���I_�җ��7?��/ȗ��X�z��L1w��Nчr9�������'Ț5��]V���Z�d�X��)�����Σ{�1��ѓ�#��#�u����IY#D_^�x��k������;m�����n{��e5��e�ӶJϙ9s��k��GV��s�ٲd����K��}���u���st���s�b���g�e�	���I���-�
�A@�C����J
������r���4p7_��і&XQ�ӛ��������W��	�%M�K������Ɔ̓�4Л(*pYQc�xr���	��}�S"T�mV�k���7�i�;M���i �ԇ��=���.9��3A���on,�Ԭ�:��B�>���ΉfZ��xN�`�c����G{�}�Zj_:�d�ƫ���U�f3ʔ)Y��:�����62�Z��3O?=k���~�S�l�ͭ�����v�]4l'��G?�1�+
09�[ֹ~=�._��rq^�^ש0^}��)���C�k^�f2��%K����v&��Z��nr�_��d[��ִ:��W�۝w��~��C����r7�ѷ�(���:O���t�i��6���ܧ���9D.��O2�tz�A3�;����㊎*���2%�ϟ~���g�9W�z�)y�g���{��>�ΠϜ�_tn�� � P��>�h����~�F�ϼ�+=�k��&x�n�3�|�%a͙�z?TN�򞣁߄����"��u�-f����߈�-Ą�t�ڵ}捨5Wm��A;:lF"��>��FʖR?}ês���VG[��K��|��Bu�R-��b����bGM*��O��Irη�
tx%��s�%GsTE��џ�_sU���u���^��א���[Κ]J5���gҌR��=�{�_�*����=���ss�=��c�N�����ue�:��3���b���ۛkt�u�\#�:�,����X�����Ҷ.��,'�z=\���N���4���}�9�S)�J��1q'����S�����6w�}?��s�̭x�]��.~�m5ʴ��ײ�<���/|>�u����`p_�==͔)S"H�V@IDATk��z�ޮ���K.�7��og���?����n�=�.׾���[otìi�9Z<�  � ��`o`���T[@G�j�3�Zk���Q�	�k6#`�@R��V#��C_:-��I��_��Ŵ5%��^�iM��>�F�2u�>�ld䲽��e��[M��H�z'�@����`���d�^�f���V�����/�Q`�ɪ�U2ь��r�-e�-6�.���{�>E���#:b�ؤsD��DG��n���cN���Gi�t��:��v�Y���];i�o�=���v�Yf�������_˾����Y*^~��HԇI=���LY�/�k��JN��3�tE�X�ˮYy��>��Yg��FՑ��}��z�1g:����V	箂�rъ��_��'Y�zU���?������øfϙc}�b>�ӑ�:ł�5�L�m��e�ܧ�������ʕ�r�I'Y�;/X`M��#��SO>i���*�#���]�F5��eV�F�sun۹s71�\�9��duD���s�g�-[&���w�~{&���C�j���{�.��?��\��W_�Ӿ�ey�	��ϊd�������wz3�t��9�W��N��=�(�g[�i��@@�%@�7X�Am|�Й��� hyB�92���R���j�t�K�����?��`�zu� $�7��w:��Ԥ�C���]}�]���N'L�wP����7wi���`�����䲫��3O;�
��ʒ�Ov��_�'YJ��9}�i��iV�7w��v��u��8�L�Lf����w��zev�[�}d}��}���ϛ��fN޷�~+s��4�y������ԓO�����r��6���^�c�v�ӥ��]�x�����
�k�9UE���<�_��Wrf9���g����L�w}��!x���V8� +���_�v5��eV�F�s?y��f�����	��t$�������B�&Ȱ��ȝ�_����wWu[?ty��gd��ч����^П�c>�I�C�}�۝�l��ڵk̇wY��ﰏV�Տ\�����~Y�@@���?���js�4��#$u:����எ�mki�3"K�����qu�
l��u*��f�^�3s��X�b�aoŜ�s��g�K�M��w5����&�f�UP��N2ի�y�:BG���oΒ�>88$�]}MQ��:P~v��ws�x3݃&
�5��O�Q�,X�c>y�w�	��A��=��_5#޳?��)�_��4i�\���ɦ�nVd�1�`���?��z�h]u��}��f��%W}�
6�o�{��|�va���rɥ��ё[ػ�.��N:��1���T�j�m5�,�9Eg�2.��"�5k�1�h��+�;{�9�
��<��
w���4o��K�i�V�
���ӟ�j$
��O�~�������f{ � �@%���*)�s���Ϋ�A\�S�ԇY9���]�
��h
k��]0��!3*T��-%ԕ2�e��2o����M�+�w-�g��~�[��#}�#u��iu~[]�1)��_�7`�#���,��|S4,^�H.8�|����^^�_��~��]Y��G���J�'��;��Ye�uCG�ס����"�kO����![��14���GS��gҩ7�<�h���k2�����]|�r>Hmڴi־��u��y�����D�08�<�Mh��z�h�5��+���n�Q�i���g���͜9K���YS<�և����w�������uI���y�#�����)���j�m5�,Ќ�oaF�^j��/~a�=�S28G�j�:{�ܹ�;����*���NР��fT����O���g��(*f���o�C��EG!J�!<w�M��g���^����c�;:
���U+�k�썎��Y@@<b���"xT��v���jΓ�G�F��u�ިe]0D�(R�5�X_a7sΚ�IJ�LpP�#�*��c�˂`K�8��յi�5`��:�A��S�\5��7~:��{��ti�/�/+��8�/����~3�a�o�]i�����_`w�Y-_׶�}�q]�[�7��X��!�s�y��a�{.���R���y��7A���F�����x�׿&�כ�u����1s�^ SL���g�zB}V�<���=YGO��g�C��u+���%��d�cO���l�yǙ:�^��\�3gN�J�*y�._�\�z�-�Z��z��Ƴg��������/Z�*���Z����iګm���6��cG��b���ey�0���d�՟9��J)�ܼ���j�Yn�r����ҥK�%KD���+�yO�G1����3��i��ߩ��4^i��Ԣ���q%���y|�9��d��`L�����8_z]{�kݮ��q'�}�<l#� ��o?�ռm�]�Nlk�f��mxk�ex��S}j�a�V��vM�DG�6r� ���P��G��G�:�A�v�����g�g�&��zf��e�Ae���#1s�]�+.�\~��+��>��c��#������.LGn��_�/~~�5�[�k �t^��;[ޥ�:u����Sd�w�c�׷��͋�A@ ��(g��F3�I��#�h��*��y	�f�� ���x}�Za�ժWK`dZ��#����8M���	ǎ���
�*CGܶ�yi�ͻ&iY�4�lY���t�ŵ���TܝeFR}�3e+��wgz��7��o_`=$ȹ����<����'>.�w�5E��{�ēO�9s��;�`M��>�6 �@0����~��曭��5�S����;f*�y��ɛ)�@@ bx#��Ao��p9_�+�U1��Q�e�̻�&���C:Rڇ��רƶ�;i͍��Uà�e���{�m�Y�w��{]��'9	Q��KBJ���}Q�WX�J�VŖ!�B����)e��Av��*�p8`1��:PH��1�	�c�%g_�u��{�~֞k�u��9�w&��˚k�g~�u��뷟�����|��)����'?dua��|�I�G����=�h�>��ǯw?����_k�o�pa۽�Ʈ�~:��k���w_��_�%�%�;��n��XF�.��#���I�n��v��w��}�ww��	y;, � �#	,�p�H�c�U���g?��ڕ��۪V��W1܍�jDo�j�ۨڼl'�_�����u[�Pw�R�[�.@�?W�ꔏ��w��UɄ����M�e�x��k�W)���-�����?��#���ؖ���t����W<�������/~�}��
܏;@�%���I�,�
���_�uT�/��Cް�@@`���@�\�@�.2�I%���/K�e!f���Y{�K�1T�v��M�u��e����F��6���]ԍi��~�t�P�?��#%J�7���|�^C����~�͝�Zx�����;pox�{��٦W���~����֜G�w��@��
�m�I�����x��.����ɰ밬 � ���g��ui�OH�����52�
����>�-�,�-�}��;?{kT�F�*�~6�\����Qf|�V.��C�[U�V���jd�.�Ŵ<�o|��'��yW�K�j�&m�aҕ�/��Ұ:p�����gܿ���U��M�?>��o~کt �@��?=$G��j�W�W�C=6��~��O]$� � �G�y�	�)P���7|���|SH��.��R�����
Uf`Ӗ5JW�Q�9}��X��ײ]�NgS��wü�6�VA��x��Z�O���܃��~�.d�0O�W�XQ��
�oZV��o�ôr�}�s���+��b�?�կ�[��O����_܏;@�-�koh��_��?�p��焼]� � �Gx���a��>��@�)`�M#;*tT ��Ppq���UiS-\�
��'
h�?������f���_��
��߲���btv��n�!tg��vku�Wo�z#�h]�.3�Rҋ�jw�e�u�푇�{A4](M���2+�0�t�WZ�Aw��w��/\������}��c���=��@`�F�C����n��=���'!ob� � �=j�@�K�f�qN���Mc{��Z�k����l�Z��^���ޮ۱@x�j
6,�m��F^���;�+���o��u�5ݩ��h{������4�hR����şw?�3o?R�7y@٫ �@���
g��������{,l�sB�.V@@��o��@���F�;�8^~[�f��Nm�B�=���=����`W��{?�տ���?�_���ϵ��aR=n��?�&���Gu����'�S�֟��G�c �@6���
g�om(�}����&?'���`@�E@��s*Ӱ�����Z�V?��F��J�4�*���ԅ�J�t�|饗��������������We��o��YO.�؏�3���b���W���o�[�Ѓ:������ݵ/y�+���@�+0��pv�ϟ�!��n�>�+��q�eZ�@��@:Ӆ��3GG�P��^���Բ��e#w}����p�o����F�����`�&N[Łyˏ�s�ι?���ir�?��v?��In�z��W=��Ƅ �]�dA�QG�3>{�l'�,V#��71G@��{Ǩ!��(�'N�����f�ⶬ�l�T���) N~�Uܴ�E�z�V��'ny�{�m�u�����|�]�k�4Lq�r�F@"�qF����zʇ���7�&?�\C+ � ����]����@`���ߢ�d(��.��zhX]^��O�۴�
���E��w.q��*���<�5���K8�j�^s�5���|�[v��c���NrvG:�v� ��"0���r��i������.�䒰�)�}��r�~�[�m, � ��&@��j=�"�����W���*����Z�
��-�UGJ�0�ՖhJ�^hs@�IF��o}�[���ԩSa�{��������� � �Z�hX���l@ %�[-�}�bQ�k�G��Hߔ45���v��-�x�}�a��k�#���toh�7��
_�A�y���򞴋�2!� ��(@�����9#�@jT�A�z7�^o�:��ij*2��<���Q �n����'��!����&??a�r�k+ � ��*�B/s� �z�u��[��:��o�]5#���f�� �	���ӎ�
����}���O�M~�Q��KT��Ba@r/@���.�@ K�v��nP���_ �d����G(RH�
���� ��Y��
-���/��/�.�M~���bB�.V@@ ����_�2*P��L�@�iCd�k�p?^ �����p��>��������N���'�T�E�B�6V@@��
� �g9/@ 'a����Sۣ�7������Ċ�@�.0���\y��+��+nww7l�s���
|��Ba@r)�O<��VN
ȏ@�kC_��Yr& ��j�zoP��׾�~��~�%���w��701G@��
��c9-Ⱦ@<�\�e�du�ѫ�~��s"�y���`�����}.�'��&!o`b� �9 ��a�rJ ��P�`���͙�c��˂�@2%��
]��r�fs���W��~���+�]�F��z�v!S&@@ ��y�U�	r!F���\��G�\��9	Xq�Z���/����o�
�	yBϓ � ���x���"��V=��u��Ն�?�Н��!<ٴ��� �@��J�K_�����͞!o5>�8��� � �xy � � �����d��>w�w8��S4�w�U�7&@@ '�9�HN@`��i�q7 0_�E�:�{�׽���w�v�sr>䵋��vHX@@���f�i> ��|ȃ���Q@`u��J��{�q��z��eF���3G@ G�9�LN@@��$��e���g?�>������ɻ��y;$, � �@Fx3�q4@`�@~��=~WxH|� ��,3�U�?��O�;Sg�[���8 � �4ޥ��� � �����^I�S�r��G�У��k�ص�@@ ;���+Z� ���/U*޸�6�'GR%���W ���'�G?��.���5w�OF]&� � �@v�1&;}EK@@Ȭ@Z^�ɟ������.ˢ��� � �1ތu�E��@|�m|y6G�( �I�4�j��?�q��O~���U�.V@@ ���'Z��(OYv�ݫ���sF�$��N[�+Z���_a@ȈoF:�f"� � �e�4��"�V��k��#� �@$�O4�@f&����굆�j��h�[��v����5������+W����`��i~�4�#/ʆ�A�)����b�Ao}�[�N�ٵ�
 � �
�l��DR-P۫���]���7��
z��k6[���l�m���f�mlm�J�2��܉ �]����zֳ�M7��^��׹'Nt��E�����
 � �v޴��CR,����.���6Zw�I��n%�{�1WݨNs����w\�|��u"� �Xf�[*���_�n��f�]�]=�9R�o��f�EF�@XQ��xN�F@#pϟ9�j{�is�
�Ϝ>k#y����]���n� �Ȩ�2ޫ��ʇ��zի���V_����g�}��@@ ������O@#m�=uΩ��&ǧ�~�?uܩ|C����bfZ�@y�Q����g]`����4�=��qXT�{�E��^�Z��W��]q�O�m�e�V>h���Y~`��@S��wL0vGVY�i+�p��(@>�g�Bm��EV�!L� l_�<�X�9�l ��t�xo��Fw뭷�7@̩[��c7U��߯+���� � ������(� �{�sgλ�;?O��v�?y�Ÿ�'D���"އ~�o�۲_��nׂ��Z�:F�ή9 �,O`}yO�3#��Gϴ�t!�e���Gϭ6,�l��2� ��
,"�}��'݃=�դ����t��^o���NwYЮC�� ��B��7�@#@��
����*�0HAmP[�@�)���W2���'��4Jw�F�2!� �y ��k�r^ ���͖;kTKˤ��M��¨��^�y�l ��l&	x/��b����3�s�=no���Ex��>�!�"� �@�x��_�X���3�.v��ImQ��@�/pP��7T�~������^�җ�_��w����~�Fz\�IA��w�V�|�P�Zg@ȓY�Sor. ���v�\mo��3|ڡ�R�Զ�Fu�� ��Q~Yx�e��׾���5�y�;u�T������>���~�g�g��o�c�F��׃��@@����/9@`�O�E��:�m�x�:oZ��v!�@6��0�W�r���
��c�u5�R��n���/|���+*�𒗼�}�K_
�����������o�6����n�ݶ]d�	@ț%�֣� 0��^�5�θڦ62!��W Y��[nq�_~�+X�����mo{����;ݭ������4�w�鮻��zȖ��L � �@���^�@�)v�w�<��6V��=�ug�a@��@2���w�ѹ�B|�{�+^�;�.\��%�����@Y�(Y�����M�/���M
��i���j�Ff��?[�m�`�fƅ������2���o�]�����_�}�ˣ��ӹb�થ�3@��
�k�,�L(��;�W��0s��>���x@��0Y�4֤l���=� ��/��կ~�X�:w���������a%
wՑ�7����2�\��t�f�B`��o����u;V+�.��oܴ�}�ЦUڥm�>d�7��|w�ל�]��a�M뇖���� ���W�I���sE�� �]ݾ��@���Z�(��;�dc�ښ2��,T@o��{
r�O�n>�=ha�Z�$et����I��8�H˅	�36[6�ׂߝڞ�v�V#[6�i��Bݺ�;��x;�-�ݷw�ɏ����L ���DC����C��ۨ��Ljk�Z�\>���.@`!����_�ʶ�3&�WC��z�����Jw�UW�Gy���=������ٳ�ĉ�~�ذ�kOgI`�R�#H52�w���HQ�X?��z�#j�����[	�
(�����ڬ�d��ahD��A�Jb�_{M�rv��O���-���Vʓ�EVM��w�z��E����jɦg��ɶ������+�Ɲ�x8�Q���m1���|ƽ��o�<��^Ձ`Y�d��(����ܗohE���t_��[��{e+����#L�ˏ��,�Ǡ�\�ma�`�u�n�ߍ�3� ��%@����o�2%��k6��lLQ[e�<h% �@o�d{�7�Ҙ�J�i(+(�tl�R�`A���Ѧ]u�Z��r��z=��8X+�k�z�Ҥ`We+T��a�^����b�m��,��U�K��J��.@�;܈=@���ț�LYjkVLi' �&E~
�´��宿���:��'�p>�`g_��T����Z�o�\v[Q�۫�o���ZЫ���l�'�]'ص�ɱ�*aQ�Pw��M+�Q*�2yF��@� �� ����ծ���|�J8@`qɸo����u�]]
V���
H\a�F��o*ϐի���b{6�5�A��Rl�ڈ����/(��粅��̈́ �����J� � �,\ ��������|�X��ݞ}>L�0U��,p,|�Q�~T���E����Z�@��}邅7o�Oذ��)ح7v��_Y(؍B�P�b�O�@V@��w:�SD��҅N���q��}@�������ūp�s��\�A��ű��e��^�����F#^5�E��ܱ�T����Z�~�ƮB��*[1���@�� �]����@���*sV�,�5+��H�@r�M7���3%/�V�Ǐw�q��}�P9_���7hDk�dA�.F�G�ZЛ�W͋���W�j�V�Q�
���f
@`r��|���y$ ��E����)Km͊)�D�(��,�]r�%��k���<���¤�x��7p�b�o�l؅Ū��%�A�k��k��k�좰�\Si	�5b7��V)E5v�>���G#@�	�Β���T@�Y�j�Y���֬��N@ �Ɂ��i�y}�ӟ�:�
.��呖��}�h�B^�tՈ��i�5ZM�[�Euz-T]�EW�j�n��x���J�8�/CQ���>�@��@��r6G�( ��(���LYjkVLi' �V��/�;w�u׹���������Y�Q����X����5�u�.Ħ��W9��U���ڞ9�g�M\��cڷ�6[m�k�i�uw4��F�M�f��v7��l�c��<z�c"�� �@��+%�g�c����m��@VE �ەlT�|��u�gϞu_�����ֺ8R���W$Өޣc��ܶ˘5m4��
^U�w�F��Y9�N�H�f�n���e/&�
m5��o��j]�M��N�m�ݫ��>5����֭���	oY0M�T�#��[�_X�[��#��5	7�nwg7�-߰6�{��T��C*�Q��Kp�Lß��}\|���˽�e/�l���4�w�XH����*<�\��mZ��^�guݺ}r��k��TF�X,�R���&��� �}���� ��*lnm������#�@@ c
�l�egz�s����t�GY��ܹs�:��[��J���i1ꮒ�ջU��/��^ջ]Ĥ�)�H�J��6�U_Fֵ� �� �]�:ω�\�b_+�W_�:�mj# ���	��]�7�|�X-���_��_t=�B0�呥u��^_���nZ�eտU�Q�Q�;I���/��-̭��V&���y�����Tt^;Yz��V@ ��h�m�rb ��t?�:}f�����j ��j
$�o������:�����o��^T��<p��.��*c�k�Z[�k����ā-'iBL��$ي�SKA�Ũ6ײU��v�[ �k��vp^���}n��s��a��^�Y��N�Y�`���o�6����ҹ���֬�
VfB��~a�3h��k�g6�����^�zqj�^�*�QI񀋃�2C���#h �6���N�(ٚ]%:M�ڤ�1!���@�BRi:v옻����w�m�ϝ����V%�R�Z��v1]l�0N���Z	�S��**��Q�?��\ui�t���)L\��ME��)�oϨM�v[��X�M��S��oYb���Q�R�9�;W:�_�M�v�;g}7�߷�l��_���a�ř@�a�Ä�Xa��'��o}��}�ߖ.�f6�&&@��P���t��q��=�y]�-0��NK%)�vkYH8I08)K�~v�A�.p�ЈQ���*w�З����-����ۈA|���s�h�f[]�-\@Η�HAH?��,z_����]����Xz
�wfѽ��!�=��-F&����8uܝ��t�jP[�&&@��Я���^�.��w���0�MozS�~
?�1wݝ��lX��h*]�>d��~Y�Pp�l���dAo�X��Y=��H�f�i��FW/����5|�X,}��E<w�ca��c~��«�6"�\���E�m	ώ �J��ͪ��⋖�6�AmaB@@>�=�P)���
s�W�w��]��K/��R���@;m�tA#uwk5�c7�i	w�磰��l��=W�7|M��>��� ~�Jb��k~�uZ�M#Ik�����g�o�׏]�~�������߱���F�Ϋ�T.�	&��aB܏ �tQ3�ھ����c[�
Kyr�@ ����7��=����{��jo�\v7�p�S���E]�ieǂ+�I�z��fkڷ��M+؈�r�d�D����+$U�-�t�x-���p�Ue����Z;��Q�۰~�_�o�FL�…L ��0�aB܏ �����_,���O/TD#w03!� Р[�-�+���w��}�_p������5�\�^��W:�e�5��O����7��T�S!��F?�)
�4vp�/��_:X�V��S��w��bAo^C-�5��%�!w�oQ�Ͳ�Ts�JJ��t��lRS�����~�e�⺅�%"���q����Z�HGs� ��,��ͳO�����t1�ܥ,�,z�c ��P��n!m<Tz��_�t6�Z�{>��j�*l�6��{�F�*_�Xp͖e�o��~�^�j�����-Osa0�;v~���­<�U8��*2�d�e}�L}��}���ӫ
�;��_�oj��߇I�f#��^������c���b�E��;�ݘ�U골�
����_R�Ik"�3 �"�@VI@�k�\r�Μs5�7��R���'���<l9& �'EQ_{�����/9�Y�u�¬�=8k���SMQ���{R��º8m��X�����e�h)<�@��CE���62�_l�`dh���p�@~݂��g�i�@u�^�ё�뻪$��3��
|Uj��Q��U�[��wڶ��*��#| o�3Y	�(�Ո�~�b�,[�N�#!���x�%�q@����3�y��م%�>w��0?��-�8��np1�Yxr@`N�?��"G������kRبQ��^�-f�Z�۶PZ#?u��'uͥdAS�B�EM
~��P_�o��p��7��M�yKڲ�\�M�鸓^�%��Z���!���p�e�N�����zݍw��U��UWY��4�6iMk��%��9k��d��h+ �=j�@��ꦑ�;ۻnwg�9�=њ/ð���4r7kS�0:k]��K�e��h4}��}�ɝ]W�`eӂ���(Ŗ�%�,\�����L��>A���I����4��ڡ������3��6�R��}�k�g��Q#v�F�*�{��[�Պ��F�.{��F���������h?��C�~�Ro��>���_B�ks��'���/9-�(�~}� �.�t��A2)�`V���X�>��j��yM� ��P�)�S}6}m�\��;v��Oi�����@]�h#�ɫ����YP�;���*�, T�T�Q��{y��hž���[���_�?z�Q�
��_GQu�����W��oi9�d��g�����߷~�hr�G���6*Y?�ٹ���~��Ze%F=�C;���~���5 �L�e��� �@���z�Z������ ��\�i����M҈ݲ��i
v[z��Ѹ�)�Յ���۴�u_�W໌�Me�V�@���h��`���ђrL��
��;;����#]�6[����Ѻ���%��<��Q���]�k���VY��w�{�sG@@����-
�t�4}��pP
���M
8�:���j�xA��_��7-d��Q����&�Z����I
s������F�Y�J�a�[�2�n��4��c��pTk8�Y�����>���
u�o���F�H��f�ڊ�Ο �������H@@@�#��{k���+߶M��Z�pP�R�_�o�c.X
4e�V�NS��z-���ѹ��荎�کm{-3��|ػ�9�nɤ�I-����_*+���7���ߴ>i�'�#�C�{��-�nh�-�U�aPǝ|�5b�fǔ��B���~�����~���K{MD�6n���Wm�B�8`B�(@���^�M � � ��:����$��VE�
&yt��C!ٶsԅզ��|����V`�Z�y	䓢
c7�e?2W#z�62}�I�lk_�&=���@7�5�gw�	�.@����� � � �4���@3:�fh$�.P��09�t~Ϻ�#�+�U���n�4A���"*?��`7i�����kZ�������c/r�`w��<�B��w�@@VR�>�W�ǁZ���,�U��Uv�6z��k�
����"t���{]_�f5�Wq*Z�[��W�-�o�};my��;��Ӭ��g�6�xH�oZ{�v!� � �@�fQ���IZ�d�n�.�D��hDo�J7覐W��.ԕ��p�"x�[��Z���}%̡`5z��K����M5w�4�|�.�����ii�ڂ��ž � � �@L@lk�z��P*�PP�d#5'2G�c��F���׊�.+�U8X�>+ڈ]͙zX>��2#��`�Ψﴼ��>��݂��0�w��2%@��� � � �&���(ݫ��.�5�d��J��YP@hsF|����hK�Ap����-��Q�
�gZo�����o��2�3���s����v�@�;�o
���w�ñ�.
^��D��_����p7�@�l	�f��h- � ��H@��F���F���Gk@FAR4b��@
ξ嬺���u��P}�oa�Ji�����s[\�����4���P����~���4;�o�ZQ���>�?�C��}?�^�~�x�E���mT�j���ݏa
țo�z��A@@��
(TmX�t	(��E��t5l�Q��Z��L>�Ӈ���׭_�T#[u&5cM��Q4��*%r��K��_4�Z��O�J��oJd�� 0��hN� � � �@&�p7ąQ�-K�ƿvo��2v�1Y�&Ј��Aɉ������r
� ]�JX0�2��*
�b�s� � � ������}۶�5]˹fÏ�-���Bd��/r�6�)�Յ�6zZu���TXB���@�QxG�b?@@@2 �Q)[]�֑��:�F�Bt��ߤ�I��j�l@�PLM)�~�^�v97ZM��ў�FJ�6p(�a�a�u��tm{���F�^ � ��P�� � � �@>T�u�Iua�VF@�N}Y��Ou_��[�iToY�V���e߮n�n�<��
n��hy��Hh���dW��w\1�G&�x�
��!� ��~�����Q�`��BH��]����R� ���:���{8���v+���d�]��R65Ѭ2�.A(
qK�[��/��b��Q��w��@@@�,	�!�kѭ�vf*�m�(�Բz��v�#zK�\_Lw���e/z������F��JXF�E	�.J��A@@@ C���^.�orT������U��K7X@���n��=�]��s.Z�\&@`�����@`eF)נ�E�� ������m�,C�E�(XفB��K8-S`�J�5��F�f=����4j�W�]��(��V��`w��E�
���C!������ݚ;~��ga�1@�)p��Ybz�dB���&Up�6rUh���}�G�Z8��d�d-�U���ʺ�\rR�[�s'�Mʰ�� 9Xv� �@B�h?�JƧϞ��w+q/� � �I������Ʉ�P�٪��m���c��l����M�
|�k�JKs���U��~��j�*إ�a����'�t��A��e�Œ������
kp� ��/CO)�N�G�cn��Z`}}�mTʮi�j���t�.B��ѯ�}װo�5-��U�A������!fB�,@���ޡm �K����)��R����mEP�gm����N�V,#�  ����\��1���^!o�ma� 0���/(V*�d�z�J(Hm��F��lE�c�pxѓBݖ]N׻Ѕ�zM�VXB��b��^��6ȿo���3D����]5�l_u+��}�����{�s�H��<@/p���s�Ǐ��L�w�'ݸ�,V@e��(�m4U��;DUm�z�n����+��w������3u��H�����^�u�sF᳂�B�j�s`��)@�����Y#�@J�ᮚ�m�[[�s��nϮ��fL � 	<m�u��0��:v�giB^^-,W �*٠�u_�-j[�
#�u�V�s���Q�
Z�\��|��w�f��h��gk��F��?�Uxߞ�W酃�vf�6�����Y0!�Y ��b��fȜ@� w�Illn���]ۥ���k���~��T� 3�CX
�f���sϸ�2W�_�V��8��8Z���V�A���Bf�J#�xւYg�\��m�7���F�60�.�adL�� cFs@ �����6�����8��,��_x�o|=ްs@VQ@��'>�Yw��K�{��+��i+=��{m|y�8g�-�Q�
T7�N�Vu�UJe?b֏�]@��<��[���mX��j�F�{�۱��� ��L�;SN��3暯�+���0��E��S\�<���p�_}ս��S�a$�#��R@e�|��IDAT4rW�&�G�2>����/Ǐ�2�G�~\�FϺ�$BTRA�qUZ!��Ă����[�0�z��t)�I�@��
t�D�ӓ�@��	$���zh��vz��)w����\é�.r/���-<�K��9 �@~4jWT�YXs�Y��<=q�d��ɰ6��_)���
�@�O�[���|��WO�2[Ŷ�
qm���ĸ�<,!����N_s� �R�d��׭���U���b_!;u�%��ٳV����n_p���Wl�Cٝ��{手��Fվ��?�)�b�� 0�@�����{�{�Iw���-W��mZp����[*��jQ�c��u�OA��`�l�_q���a'B|��ޤ� 0/Ҁy�r\@ !��0����^�a�>Ȟz�3����5�jÍv�}���ͳOi7+�g��Ѷ���]�� �@��AlXV��R�]��K|��R[��"������Lr[|=,�y�q,#� �Y ��z�~H��>L��5�����d����m�p[��\�n
夰W__�b=M��Dž���Xa�9 ��H�/���B��nBR���� S�n�`�?.<��$��J�`?K���e@@ k�Y�1ڋ��������We�aWS�/����}�:s@�)��B��a9>��_����q�#� �� @��
��9"����3��'�=~��e�`�V���w����}G�?�X�@X�@��J����}��=����~a9��>a>��8� � �@Zx���VR@*C@�o�>��Iă۰��'���#� ��x��k9l�<����0��Z��e� ��Q��7���9!�@��Sak�)~XR���{+�Ɨ���c&��� ��<�{Z�c�����:��I���z��-<&�3G@�.@����� �Z}�����ɹN��6�yPz!�ɹv6���y�@X�@�����^�a[�ۛe'�U��0�-~_���m���2 � �v޴��C���CdX{�T�?>�~� ��A��ٰ_�cǏ��~�#� ��d��o=ls��º���}~���{��&@@ ����:�Y����������ѼI�p��p��6�@X�@��5���r�p7�;�?l�g� ��M��7o=� �@��aSa�)��k��q�a4o�@7��Q�I>�u@f-��q��:�}��p���H�߉e@@ ���4������Ɨ��m��h^{pzu�ܠ�@ �z��5um����:�;<&��e@@ o�y�Q�R'��!�U���a9��m��ɓ#z��w�:�o6!�,M@�mG�ض����ö�\��-<g�'�3G@�,@���ޣ� �}�l�����:�rٯ����ctbV@X�@,�
Ϛ]�뽖ö0�q�r��c3G@�,@������@`!���~O��'����s�70�=��Z8^��G��m�@X����zM���^˽�%��G�%ד���O�DZ
@X��2�yN@��3�ÖÇщ��>�/�� ��2�{[�
���i����: � �޼�$��Ї���Ʒ���B�~�u��}�؃��a@�e	�����'���GY������c� �dU��7�=G�@ ��`9(��I�I.�d��\�h�Y)0!��]��Ur۠�A��sO��3G@�.@����� �
}hL���k����5���-��o��3!� �f���:ʶ�>�~��g���e; � ��4�m@L@(C�+��3l�o�m�7>��ŷ�� �����e����>�l�<lG@�"@�����<@ S�j2p�}�6�t8F�/	��~�$�: ������^�{mS��m���q|@@`�����@ ��SG9�~��=�!5�<��z�}ZOޯmL ��M`��$�
zL�s��1���v@@`Q����y@�>�0�e�k�Cf�Q���G6'�d6 � 0�@�}j��u�:����A���D� � � ��x�|H��>PN����;�p_\��q�ė{#~?� ��S`��a�
��9L��A��>@@`���� �r��8n���=6��s�s��f� �@F}Ou�^�<���؆ �,R��w��< 0�@�C�!�GxjvA@`��Q2��}@@��	�f��h/dB@8g����+�	$� ����|���&<� �L%@�;F���l��D�$?|��Þ��@H�@�}pm��1g�.�� ��+@�;��#�c���d�q�M��sď�2 ���7��^�s̺�@�'@��O�� ���Ar�,Vg�a
@ ��_�k91@VV��we��G�E���z}^< �Y��Yh+mD@� �G�}@��?`���C � �G ���g6#� �� ��|r �e��O�,�&mGX�@�}u���@@�E�.B��@F���xDHvCȥ����\�4'� � ��� �@��`��ޠ- � � �,_`}�M� � � � � ���N��c@@@@@��h � � � � 0��$j<@@@@H�o
:�& � � � � ���N��c@@@@@��h � � � � 0��$j<@@@@H�o
:�& � � � � ���N��c@@@@@��/OKe�CP�IEND�B`�PK
!<��6{v{v#webextension/icons/onboarding-3.png�PNG


IHDRx�=�PLTEGpL������������������������������
��N��^lneeeffflll��L��oka4��sss```___ddd���������������������҆��aaa^^^��������������}}}��������������������������zzz���ccc]]]\\\bbb[[[��y��z������������������������{����������������������}������{������������~������ZZZ���WWW��������������������������������������������������������������������Y��׬R}s]��M�����������\���P����������VfcZ�	�r@������%��~3ߡ�����vhK���ΘjaQ��������ڿ��������������������������������������ټ������x�����������,~�Boy7w���
��Khn����Vdg���� ��S_b�������������������� n�69Y
�����(\yNMO/Ki����&�ղEDG>=@j����w�k��@^[T��XC���>`�tRNSl�����MN)�uHsIDATx��G��00g'-��G�>I ?Jm}L1z�%^�}&�:{şkL7�Q� ����Jz�sLJ5&IƊ�=H�#ʙ�9%� Q�6HԢO��D#&�� ^� ^� ^� ^��������@��@��@��@��@��@��@��/�/�/�/�x/�x/�x/�x��x��x��x� ^� ^� ^� ^� ^� ^� ^��������@��@��@��@��@��@��@��@��/@&� ^� ^� ^��������ݺ� ��(x�4`Z�?Υ�ZO�N
�f�Mi9=���Wv�t��^&��2+�3���ط��-»��Km��Z-��+�	oxws��'�wBx_/�]��z��.˺�u�+x�X~� ���.��.�]:�E/��^�^�� �� ��@x�@x/��
/��^�^� ��+��0@x�Wx� ����/@�^�^�� �� ��@x�@x/��
/��^�^�@x���ةc  `CP����u_|2D@��/�W��R�+^@��/�W���+^�x�+^@��/�W���+^@��/�W���+^�x�+^@��/�W���+^@��/�W���+^�x�+^@��/�W���+^@��/�W���+^�x�+^@��/�W���+^@��/�W���+^�x�+^@��/�W���+^@��/�W���+^�x�+^@��/�W���+^@��/�W���+^�x�+^@��/�W���+^@��/�W���+^�x�+^@��/�W���+^@��/t"^���xA��/ ^��+^���zPd"�n��W��uŋ{�+���Ž�o�]�b^�7��w�g��a�.�(�6!]��5;��Q��ji��sT�+�=N����$��"-�~�
��״]���X6S�#T��8��j�i<��x�~�6[�Ig�8^�%9���F���hF�9��e��+���x���^>�BZ$J�Iyd����w�鄯�>^:7��Eh��_�e�nƻ���x��l�b|+�gK$���x����޳����8[!����>L��:'q�^�]�@k��P	���2^��Ut�hm�)�^�,P���2^��a�{��6���� ��%�e�N����v��H�`��=�o`T1^���I�F�/�.ډ?읅v�FFߡ\S81.���J
�‰!̌�Ng<��U���=�v�]�]�%�=����m�R�?K�}&-cF��Ex_��_��ץ@�} =#9�,�g8aPx^�7A,��b@c0��Yb�'gNx^���#���Eb%v��{��5�����,۲%�395=#�ʅ�
�\}��yۄ(�����(ʕy�{c�ᄑ9��{��\ �wi��5&��<q,ʹa��>�&�%�xp�>�Ex^�V�cıl�١vy���W��Տ�!��t�ExM	ov���BQ'	�ף�wI?��(‹��]I��j���3���|x��]�J���D��<��wž7D��׈c]?|�8�!��A��DX�Y�����Ib��ƃo�{��5'��1l��K����,7�N���Ex
Y�f����$vg��~�!=3�xp���jRx^�7Gz\o�Xݵ
��M����ƃ�|ڤ�"���Eұg���'(,`���^��e���m�y�8\��[�ǃ�ok��^��:�ͦ�Q8��95V�Ebp���Ey&�xp��)&���^���&���} 熺�-���Q���� �jZx^�7;>L��mVzv�"�P߉6|�8����^�ᭌ�(��]��)��z��z3�xT^���ˉ���ۜ��q���p��n4���σ�jC��‹�޲`��0}Oˑ�B����)��p_6|�|�MNL��~Cx^��[��~��Z�?ؑx�Bg}i�3u9^}�x�ս�7���T�Ex

oE��v]3V��\�Z\�?����U�u��p6v�����޴�v��K�o�Ex������Z��\�X�'��o�Ex
�_�v��|�ܛ
���
��M�^�״�f��}CD�璝��%�×^e���^���^�s~�x�P7�8^)�^��V����Q�,O�8^���Y��5ś!"W>��Y �XGx�>Y���<8������/�kxxk*���G�=�����px7�/�kxx�/�́�Gx޾	o�����6q9��"�}^�Y����px�Ex�%���ߝ�8��
�^��_�+�{�S{������_^��_���+"J ����g�@�?Ɋ	`���!�0c��˥k�d�[���^ӔU��������wp��O�x���#��M�{�!^�W�x�;�NwE��?�����
o۝����]C`08~��B����ɶ�e���0��x!^!7ޝxsz(M�~�`0��
���0���p��7\`p/��E�����/�+��{w3�7t�
{���å*��7���.ׇxň���y�ME#�T`p�
	���o�Z�[�xň�T�����/���%��v�h���!^�W�x�}pR��ǸV�;���~/�+G��C���G�i�>e@�F��ONw2����p�v�6q�>'���#q�_��d���J[m-����&�NW��Sc���������J@w�p�u���RK֧Fr��h�#H��No��o�)i�v��ޙ����������&作��F��p4��kY
!DЛKڹ���M*�`��bc���̆�9��{���S�J��������<7t�.�]�?*��+����s�*����U�4m�����Q䫝??��:U'�[vx����J>����ޱA���5
�Z���ρ�MC��2��_~��W�:��Ֆ��@���ŢC�E~�6�x�9�	?���T�s�w��{X�@�j�`��:ى�C!+�Y��CH,2f�>���u�x/��Ք�z5Hu�,qH���0G�M���g�|&3^����o??�@���@e}��:��x����B0G�M��z����6.��s+S�]v���F�_���x�ds���vu��S&ī��W&�G�^2f�:�v�R-�<{%Sg���@��Q��WK�[딭j���@�c7�]�C�\p)璉$ᅮ�`օ�bX��Ǐ�P��z�ۦx��!&Ui}2�
>z���/1-R֗R�
�@����&x���پxK�2��0G�-�r.��?��ޢ�ǛK�����/��Վje]�RmK����`�y.��|�]����Q��x�sgo.4��au2ūk�u��ګ�[*���>0G��D�R*c�¸� �?�R&=����G�X��/�W�0��s��p)�����k��5���G���҅�1�N��ũ��ꑁ��+I0G��.%�L��W��7V�Ǎ�mE��(^��wrmP��}���\���%�a�0�
��\t�a�83��/�擾/�/';����Eu2:�F)�#̆Ky+��?��[��x`7{��hu~�
�x�:Y��@�xo�Uu2t_�Y�hHu�]a��4��O)���4�L�+؂5l���V'P�Z2���𣽽����dO�}��ĥLL�:&�q�.N���K��-j��C���(^M���j-��<��}�\��IlN�`&�K�8�6��M���q�l����&^/�wHU���e��:Y9. �K�,�5f���-���d��tY��q��F�xuEQ���:�x�%�9�l�+ɺ���͊.�^f����Р��H��P��WSZ����|�6eXst��&x'S��x��@:~��L�gשq�
�@����ye=�k�u<��!|��$W�SmF��y�oz�@�C�8;���A1���9�l���To81�ی8����-Z�a��
�flz;/��߀	^γG?������Ӆ9�̼�O�z������^R��g`u2o�z̛x)^��61G�-�2>��-�)��)����P����<�Z�x���E�R7�s�~'N9,Ƨ?n`u2o_Q}�'��T/ao�9�L��j*&g�L,L9Ĥ?~�ErP�}D��^+���;���;�_�p!�S����O���S����]�NV&l���l��1�0�L�B�O9�Km���*V'C�j���f��>�;��OYu2iҍ��1.%��
��6�^u��au2�f������;{���H�<<�L�$�ٿ�a*�n����?�:^�fTi	�潻|�A��?��^����5cfޭ_JE��/3b�(�ŋ�Ռ5Z��ʃ��=;O��M�:��O��j�\`�OE�ٺk�WaE�(^�f��0�жzA�pU�зiu2���v!�P3�"�e�e*R��N�:���ū�Le+���i�I�G�(�7�@/c��=HE��|��e��?P�(^��^֔^n���}��5��p�5cv�B2;��S�Ʒ*���ŋ��m�l)�yH�n��k5�w>8�f�3�wm^'r�o\�kZ���ū݀Xkϼ;_�NF<���V!f�0�/��ƅ���?�:�W��j�8*�w�'�x�����3f,�b���F	�B���P�zQY�lC|�<��E�6��)��8�˘
�n�'R'�r�v��|�M���X�ū�5��M�d�ѧ�z��/aW���!��2���$�/�J�%��I&Eq?��}�n���"�p��],����q���Ɇ�������}�ȱ�k���_�C�l����(?.L���%����T��-���d(^�Hl��T�C����(^V������s��£���A�<�${�"z�R��:�W�	^Κr�{��;G���U'����&�0��
[�_��,Fq��O||o�Ϥ�xm���?X�ūەd"k*����x��MCO��t5&޼�g̖^[�'J�m�=l�:a�p+��?x/�WS��
�!ob����7���V�?
=Ϙ-Ю{V�_h��Ϥ��SŰ�ŋ��ջ��B��h���cV���3lx�r\r.��f�LI�_�lٶ��j-@5��z�܄ͮ�-��?(^�$*��n%^Jb� ^^���v���qȥ��őc����pn>���q�\�I���q��E6+��A�x�������h)�V�R�_��kl���k�� �ҟ�R��0[8�Ω��.�w$)�
��X���P���,�M'��A�xu�ބ���&����
�nㅢ"ϙwF�l�,<ȗ��5ɖ
.���,�0�_���B�/�7����l'Z��h��ki̷Q�R���$_�=r2]��k�0���,�4����84����F�F���E�ƛ�:D�*�z�77k�C�(snv��J���ɼ�^�\�����d|���Y�{~��B�����xc=�UiWbk��j�_��vx������-���z�h�=-�mlc�.|ͥ���ؾ�(��1a��J�6�z���V'C�Ƙ�Ze�}*k�W�x��pc�Q.��ɢ��+�s���}.�SU� 5����P#lӅ�����U��%�N����xc���zP*��x)�2���f9�\.eZL1�Us��R��>[0]j��Q(�8�l�O�������l�kz�?X��c��A�$ށ|{�x��r
F��܃�V#[��EF�s�/�l���yIj9s$��Ⱥ���g����P��es;�z+�U�xYu26�T��n���ge�*�bT<:[
�|�f�]pZ�����F�~u�_�Л���d(��B߃���Z�B�xyu2��?�A�s��1,XI�r�Qo)��G�Y}{V�����/�����.���:�7�$ֶ��O���d�#�Ѓ����'��$�q�)��l��,[�M�0�QJN\ˏ"l�]Wf[=�/��ū�I6ЮR�Ru28�?;�N�]Yh쁲U�z��<4�`3��N9�G�Ѷ��
�k:=�//�7�l�j���X��#@��r)}Q)W�>@!�9���
�W���_`3c33�
�
�-��ML��ۑ��̸�H
��//�W�9�J�Z�ru2�x�q��織��T��	��G���>���o���\�@���f�	����E�j@B=蕇�^�oy���:�җ��1�d�9�S<��`�f�$�LD�_�?�0�@1�]�/�x)G���ࠪ@�&�S~�0���?}��!f�^>�4g母�˱��o�x����ё���$��Y�ѷ��\���B�(�3x��y��pg��%������Gz�s��8Y��~%�^�TI�f���:;�?\aG�Z��//��Հ�M�w��#āI66��\���h3#�#t
��������gǤ��� ��r��֑�y�2�JW���(^
h�w�x=¨�@�r���o��$�
�
Q��戙o��>/���sф�a�ƙ33gf8tS��m���O���f\�b:]�/��(^=�n��
(^���'�ҽ\ʤ�rsa$l�ȯ'�\d�݉�j	�at	vL�n~�]��l�Td�K��d(^�Pe]d�HP�z�9����u!�r��uP�0�(tš���mu�TY~}�e�;M�?CٵiN��ρ�h` �~�����<�mu���:��Յ�x=o��`0�#58tͦ�:�
�K������,ɯ/�\`��'��\p�\f���Ʒ�x��?n�Us��_X�@�j€x�m+q$؈��@�����!��o�/�c��z��s���%QXⶌ꾸��N�6�-t���:��Շma�!�xYu2�֧aX������d�]n�C���+���3�7��)
ى��_@l�?`��^�Fau2ū	���`@��ɲN�s�95����\���M��X��n�n�.ɯ?�l�0�,�Sm�Y&��oL�+z���^��x�aM��!ЈׯNָ��#N��:s�.ǜoJ��;3�驀�‹y��36�5�]�?/��Յ���
�`#�oAu2l�Aqj�3�/7��Վ?�wn���	7[6�[���ڀiu�(^ū�|�t��?��]��x�C�զ�ˤ�����e���F��a-��� BcH��'�l��Y���-��Wg�*F���P��0�fy��/ŁA�î�q�&f0�u0��ܒ�'�l��٩�i�L-���T���.����C�(^���K����8p�)f�2�������V.�6�}k����(�3� 4m�/�m�,v�(^ū�p-o�P�e����e�&�`��74Ɇ|<a�E߻���(G���(�k��~�[��@�jD��Z,^�/>R#�{����\�e�e�G<�p2�[_UK8X��^�N؀�I�au2ū�i8䈗��X��2����
YPm!>V����ۀ�x���d�W/6+�É�+�!l�р��<�ڔ�_��
�n�Ҷ�;d�au2ū��#�/i<��sٲ���_G.��D����(^�	P�l�!+�ָ����6���*z{�m��$�S�i�պ
��?�N�x5'@u2s���t066��f,M/�e����E&
M���k\Wv����d�WsT's��g+����nv�YR ���Y������6�_J7����:��՜����v�?�̇ʋ�
\1q)�Dۢ�`��5o��cS����(^�	P��Y!�!�#̇ɾw�?q!�5���m�OEr�o�ڸ�7x�x���N��0�FWtq0"�ڵ)������# K�_�;�o��q߼�����E�&#ޣ߾�����r%�_��g��݉{o7�Qfr����~�O��O/��5�o~g8,=|�sH�q�痋0�$_�m:�9��( �����~օ�p�'�����P�&S
�Ϭ�ȋ��J��e�	�5��6ٰ�̻���e�'�^�����ŋ��s��o)��Jl���";�܅\�j�9�;���k�V��2�ғ/F�l�b���Q�4&z��'������h���?VH��P:ˋWM�f�a�5
���ٸ|����$]�m
���8N����k�ߟ}]�ŋ�}3�j���<�=v�y>���y0��my�;L�0�I�$�I��[ճ�1�B0yF.�uI��Q g�pOd��/�ؼ��%��C/G�z����\5
�@���u��wsP��?����s�L�Q�Q���x����ed�	P4�{\��Z����>��p�N&��lu�w�8�L^ھF��<��z2�A���V
�N�x���9u�@���C*ta��]����)�����3���G�:��7��}a��R%����n�Od
ލ#\+���T:�l�J�����<��f>_Fe�#���K��s�G,C��
x�	ާv[�U��\	?�yk��=��gpQդ��j���J�t�3���Ϸ��t_kr�O]
>��	G��q�߿Լ�t�+^o���N+@#	�)��H	���]�j�n���S>S�w�?�6�t�p���^
��?�V��'����=V�.ݹ^����f4��i�PS-i71�
��J��T���ݸ:y�RLަ�Zo��8�����W�+��v=-���;�`�0�
��*����Ώ[}�~�m'���{��om�˨�{��F��*�%P��Wq�ì��N�mu�O	x�a�n+X�*-Q�F�ЧWEDh�����z�V5�?��zu��I��A�c?
mL��٤�H}���2�
x�_�z�kwJsgCJ����w{Z�n=�~�d�(�Ǽ�?���3�|�K23?��A�?6��^�J&g��O��������W����K�N���z�z�]ɐL�֤���x�{���֯w��|�Λ&
��_�Z輟�V�>&�
x���.�����V±���u�Z�&Z��Z�p���[��s��m1W��,tHtڥ5("�?���ʻ<��i+H#o�
�^�x�Y���4��jz��jY)k�֩�y�Y������T�|/��c�G(~>K�^�V�[���t��+���e��9���%W�&л��J��vkj�NU��o0�o��Bϯr�
t$�4��|���S�U|?S#=>w�,��F+�md@�{����jcN�5(��2
ٖq���
>�/g�)P����I[O�����&�
x��X��3�c�%]@Ҹs�}��s��[�Ԓ.9`���߿�>'��3���Z�C"�:�bsh�P��W�+�}��%��S��"w����݌������$-��)�߿�>���I���Ih��+b�?��?k�԰z��!��W���꥔�i�\C
;��B�CP��ϏY/�����N�
�<�|Q�L�����5_	x�ާG�`}>��I|��{	-y�5,���wO[���&�BF���
4B�}d���w�^�&�
x��^�5�� ���j:���jb��n
S�4�W�+8��g3|!S��9=����"o���k=3�P�W�+��UkHepB	��л~޻�!��B
�Pn��Z/?�
�yu�E�ϯX�/���r����K�*5x����4�w�0����}��N��vk#d�w��?�J��� ��K8;���|���+SV/=&�
x��)�H
?S����>�?�S��1��ߧ��޸Q��H�����z�3�nI�������:^������]�t�	�X�D
���F�z��*��^��������iwzR�{�߃��I:���1I|��@%�
xQO����f��%W���}��>�g�b�
Eo�v��T�p����|N�w��>��P��?bKnx��gv[�Z��y�uL�T����+(�Cxc�ǣ{��8m~~����I&@4���O�@�¶H��W�{��3�9o�V�U�I
=��1�y~e{������c{c{��H��?ߡ�x���…Ľ�e�H�/Y���e!��cO��yG�_UsI%��F���
�7�nm�>x���t9��w^�7�����p$>V�S�O��^�;�Ue
G�$a��xs�{͟rzC�{���/��P1��w��͔մZcrb��:a���c �F��WyC��?^;v��ߦ1��r�W�t�G����-3���������_��m3�~/��w�~����H(x�k�ã�"�$�ſӝ�o���.�ދ/>��W������2���s}�����;�v�mOW�����_~Y�U]�$*���;P�W7��O*�t	�m�@����]O��^/�O@.^:�>�¦��ƴo�����ۿ�o~[��'��?�A���jg�v��g-��S�9ᄃ^9x�ދ���N������z���б���=�7���L~z����.�j���&�,����Ն�G�
9x�ާ[�wTM;�`����pI��҃������x�����|A��텅���	�3g�H�0������``7mK|�����d�^x�ٰ�W�+��/��q�o�
t�n����t�
��|_��v�/Ō������o, �3g�i�T4gF�cM�H|@��{f�{h�s/��^�ŝ�d$�5��jjD�O�o��	zjD�6�&?FۨA��MyA�i~��qUf���D����$����BO��ğ���&O}ti���3ǎ�$�x%��Z	]��~N��W���.�$$���og+�~��zZ-9��3�	���D����^䘀7�wd���$�N}�6|A�]z�%�NW�U�9~���zZ��h,4�

�ƙ�G!��3������,��ވ�W2���%�N��:��՜�S�Mh��\Ê�q��z����{�@�������p?��d��#��֍��\ǫ���A�*�>_VLK�P;���@�d��@Z|��d	~2y~�k򷜴}���D��6��H���L��u$��F�^�w�2>�O��n��@�`�p���Po@��9�i�o˹�W�1Xz�a��?e�@u�$��;�LB�+�xV9M ����ֿہI��WE����S��7��ӏ��\��ˬ+žPؽ7�7��#x��8Ō�Ҷ�Z�+�x�@���x�J.5��@H{�v&j��d����實�^�k(��aT�AB�G4�6t$�Ǐ�����d�8����=M/���ŁIڀ�x?E[��� �J܌�k����G(�p��(�C=f��O~g��^o�&�\�t"�i�Gw���<=]�s�H�}8z��	I�Q�����e�<%��F����qp��LUe�vs[ɮWP�L�����+��)_]f�7�@`�a�1;;>�=	v�n�8܆���/�_�,�oD�+��y3�9c���2�K���6Ӓ�o"�N����>��>\hfy׃�	�ۇB��j�)^�����Nv�u1,�۴�W=�\�0��\Y����^�������7<>��(ef�����K]���E�`�ayw��M#;��x�ϲ�</�xeu2�TR3N�
*�D ���l���)�z����n��2|��(�xL�`�\T�/�g>9�C&����Z�,���^�WgH�W�O���pCm�h�7+���To���^��[1��`���F��g�5�Ǘ�u�"����q$ڿ�x���x��ӓ��QG�?�⋀b`�^��n'�����L5�P���uo�5ɦ�C�t���F����!�Gs�C��'^���h����^��)���22G�� �4�pP�}�͍NjzQ�i׻O�V�_�K���.ek:#�mSֆ��ݭ+^���d�/�K�9=�/�E�	h�+r�n������G~��YM������1��O�k�w}��a25;5�<��<�[_��x��c.ћ��PU��ۋ�+�+m�f��6���b�7���xupķN�9o��r
}�����&t�y�C<�c���K��W��Ҫ1 �ݪM<k#�tzI������q�=~���&q��O���T�U��fB��M�A���%^�+�xs��ם��M(xA�3L�4��{���H�cǷH|���ta�d��ʻ�a$|Lm�V��ў��K��7J�RC.�]��m?�k��ꦨ�9:N����-�\qo�����T
E �Ao׺��I��eu2od�[P�nλ]-�/�:{�?��=%�ݏo~����)s
�'״^��n���X�ď��dQ��@7_Ae쥘�����o/�xM���cw58$h���G���q���w#�:��W2^(2���.=�#����<�O�Qyw�V��A��'��%`P� �%>:��x�ϥ�����\Z��)�����/h��`|�ʻZ���c�Q�o��
x�����
���%�0U�E���ˏoZ����e��A���K��#���P�c��%>2��	x�ju���]�05��·�P}704.�����po��	s�Â�d �?�n4V'�
x_ډୠR*�Į
}�%�78��ֹ�aJ`%�����"+R}q�d���u���N�e� ԼO�j���F暐}�M‡�<֯��]�6�5�x�� x��:Y��{v΀��$��"�4y<���U�ݰ����mȳ,�𪄦)�,�V@>�*wicl�L�ϳ�?3���dGz{�$�w�3��9���N���6�����v�$ٗ�u�?ܙ�׻hm�{��� !r�{��������f/<wO�\��6��>!��^�������5�_[[�\_�,B�!������c.�����IR�~�+x�K�;^΀CS~�X�52D�_�qbC���-��7�_��Ĉ�f�PZ���A��h���l�&�
�q�R��e��W�����:�-`���EmO�E?��/�߹䮵PmN��;y�$L�߷����U�>�$�1L��e�P�Fx�_Ŀs��,4���J�cK�+lw�3�k2�{��ѿ<�U�*x��x4x�b�_&�$q��������B�km��Ƒ%�DM�о�yAm�y\į����L���}��g�bb�>ױ�Q۾�Dܻ���TŢt^�4�7� �P�9��_��}�4��)x����C�#3�5��տ��w����4	��14۝� �Ȭ����N��U��1hhX듴�M�|��.��;{Lܲ�gva�K`��.�Q���d�ێrR��)��e�n�?���;��k1wQ�rQŕ���������%P��_
�+R�@��Wo'��6 ��3Y�� z�6�u����_�������C(@7E��z)��~�+������X���v���W������I�d-��s�VM,�u4�W��_c�{|xc��
B�W̯��{��l�5@�*x�v��jW������`�Z�}��8�k"&�y?���&�n�f��l��]4>|*��1�/f���~���;^��^��N��,
pz�:Kr5E��-j[�}p��w.�	��La|H�MV�e����w��Dq��``@	��~��^o2{�z;�=� ��^��A9JgC�k��:�o�<�;\����d�Y��~���l��I`\�s*�Wo�i��U���d������Tԗ����#�ˌ��J�DŽ]���� �H¢�_������[�
^��3��%�$Q(=`���Ӎ�w�J�!�+9Tد����-��[r���U��]�f�M0v�G�{?�(���Dܝ]�S�A�ca��{�Jyu���W��{Y�;_������UΝnGݾ��勳����i@0�!
�<�#�O���OI�S��K�4����]���E��W���Z��*�:B��~�8�fs����E��㧗(�g�����|;Y��z�
ުr�Go�/�k��r�&�

̐��5�����Og��b�?���P\kF�_��q����P�u�U�*x#_#`Q���U���x�����M��ُ���`ȯs^ޯ�η���z����U��Q!-nh)C\W�z�!�>j7P��+����r��^>/�W�//�2�~Gj���;�W��������
2�15������b��r�v4=:Z�zi��K�WWH�����z�z;�a��~��'&�.�����-1�	��Ŝ��k�&���n'[��S7��_M^��N��y)
ְ
�~x���1��-������Ȁ��_���n'�q���}S��N�:�*x�v��

(�'���e��8�?rw�_���q��}{�L��8U道�)��b�D�+R��O��N�0iU�Y��T,c;I���mf4����3iri�w�O��y�[l��a4��ꊋ�U��;d�S���{���n6o��b�f�ɥ�k��ɢߕ�m�qh���j��M��^$��J`��V{�%�k���>D�8�Gt�Ft��c�c�����p��w	��-���o�L����zM�^)���C�]CQ�x�t�>��DD�x4z
;g���WQ����y~�W^���2!����;���4��.}K��k��uӠi��=�l�ޒ�"��	H���7e���.��D��_{I~�*a)�^oA�reI�G�xx˯c��C���Unv{�#��X��U���.�ݻY�s���B~�~����5�xYR<�19O����k�yP��O#]a��ۧ�wY��~Y���Ws�em�u��� |�\�*P���k�5�f�7�#H��#��T2�T$��[��YC��<��9���Zm~�7�/��;B#��]1|���f��@.��A��5�Z����130c�v?�]y�n��4d �����������ݖ�� �
�E��n�
{E�:�=��/���~����V?y
���5�1&[$S�E:��_���^��|v�͛����O'���HI��8Ni�e��^��;m�F�Fv�&���*^�
~����I^6H�֡��Ç6�����:r�0}�o:$���?��	��D��ln�O��eo�V���@����l�x��X\mF��9�����s���*��~y���U��6Ȥuޤ2c�������2���O��Ͳ�k�5��N�����]�M>�B�	%�=fb�~��@�p�}{XX3}����t2O�����]��͖$\q�J�U���%�j+E/�[��5���d7T\2�g<�b�EX���q����m��x��۞������s����%-�O��_;F/�=h�W�Uy
�����FjG���F�yI�"�ӏ��G<��C�
�n����Ve�m��[Z��yQ�7-�2dj琷x
�v:cL~��[z):�57�я6����J�qUF�~��K�7��%*n���W�G}����-y
�����(>������P�j���I?̮�0�v��ˀ��p7�I1�~m���.Cn��p�k��ɘf���q�k(�.y{X�m����B���={��
��<)�ݢ�"�ː�}��m����^�_�G���t�w�XG.��ܧ4�m��_W�+�j���x���|��M�i�]��]�<��k�5�f�7v@'w`�bϞ��h3Lz����ߌ���{�i4����")��~��\����^o>xc��_4��ũKD{����w?��M߯&�Xj�����xϔ�6ԭ�%���W��^o>x񾟡ǯ���iL⫳^�g�L�Û1'
���T�7�U��jx5v��.��rP��Q�g��5�n�u�����
/���Z
\}Ƥ(d΅*>L�NJS�,��6Co�'Ç
�c� ��\@`_�~�3k�Z�cq~��������
^�hh��+k�*^�x
���XT�4��R4�X�󅁉u�����_>�	�����AT�7�Y@X�X>�����
��<yu͊��^/Cm0��B�A�sY���a#ݎ{N���7�*��ʫ
s��o~Z%�S ���~~~��f���,�Ѱ�%����ᔼ^o��dS� DS����I*s��$ǧ���0���������'�8�u�X6w�
��29�6n�k�5��NƤ�\�*��ȟ�'���wVFB\���k�ۡ�ȓ��ׅ�v~��\�
��r��69��R��5x�t�����'��x&��������K�f��N�r!ѝti�E���َ(���O�S�^R!��p��D�w~i�k���Pu�x�sN)0ƈ��'�_v��$�C��^�T�7�x�wh���q�F�����,��x������Dk��D�Y���5d��k��
���*Kh'q,	�t���I���_>XY����g����ϰU��x%k����%�r�m4,�iO�
܏�r�k���P�6㐰K�7���dLCr�.�~���b'
݋���LS+��/�w���T�7�%oz
�v:��෡k�����A�9C�J:/���an�W��|�.R�/tՋ9+��q
����
����k���~#�����>�UZ��<�W�Q�g�b���?~?���T�Rh�ib��R�Y�BX�hWBBBȩh�f���e{lT���f���K�۞��4���2�hH @�8��m���o�=����x�̛�o3u>����ʿEI��:rr�xͽ;�ͻ+/���c���^���7(�#�f`^'^{8�����
�ܽC�m�k�$vˢ��C�̻ɰ;[�@���-��%M�0X����P�g����nh�`��嬆q.^]�ի׉׉�r�^7�{���R�cґ
���f��(� ��Y�粩w�I�
�oI�|�
�w���A��2R�F��ֻ��.�/��r]u�j�]��8"��y�x�x	��DŽ5�ƾ��F�h��\,�ԻzTj���(��e�����$�K�����dIg�͍4 �5�b<y
����Z
�DEޏ�����i6ïwNbڤ�lgT��yzEr�m����"�3���P��ÿK���SX�w��]d]6�Խ���"�F^żN�.��wn79e�̥�Y��鵮M�P/(������=�����C	�¼�ޕo�=R��aWep}����dz�z�x��x��g3$EP�[ge�N�-8�곫���xe����V��K�E������(�%���w��j�vM1��OH���׉׉w�\�����l����!��H2 �9`��3�u�n�崶��Z�`XW�v����How�
n�A�.�� ��͆��u�uO'�x��_��6�,9u�@�/K��gZ/�(��8b��>')�4<����d�!^�ػC�w6ގ�u��y��k�׉�=����~m����2 �N����wق1��Y�]}f�E1.�Y��ۢ�+��4dȽ^�����V{~:�����Ç���������}���q�}�B��&�u�uO'��TZ�ٞ�KdROq���<.z CL���@�.�k[1-�FR�7&^
Ȁ���O��;
�A���]Mz���ջ��<E^��S����N��
�r�-����i6����hĠ��c�>�z2o��o�}W�gKk�wa^N	ʕeM�=���N�����u�.C�ݵ��.xi�o@���y�/�=���g34C�fP��c�02�w���^ɯ�p�wy95ٽ���?p���`ޏ�X��y%�b���'��>$��Շ^'^�t�K�1�M�c�U˿�n,%�e]��E�b@�%�-	�]{ɴ��ܺ53���
3&:�W�ʼn�KI�n�)�k��"��y�x�<�K��J��:xU�e;���]����>o"�"��v>��֭ù����ާ�2�.H����5l�:�:�"z*�ɠ���q�ؕ��Ͷ"��κ����I����/�[�_PB�=�9D�:*�7m�r�w��ɶ�T6o�F����Ɏ!	cnM�8��=���m��^�+!`l���؇5p�=�/
��������J杅z�]!��s�:J�gf�x�aV�]��I�K�������>l3t�c��>Wߣ�B�y�T"���K��J��y������m�L@�ū���e�`��C��u�=��ͳ�����cǂ_�q}�f�K�@��@�����[�e��E޶GÖ"^�ˑ�.��tN�z
$^B��<�!c�M�v�l�N�u�=���o��LB�c�тO�e�h3D��υN�C?�E/w�=�/ʼnw.��Po����+ヿ}�QNb�m/xK�hP&4�n{�:��؜x�x�Rw�(����ٽ��n3��.	Wߛ��[�B���-^¼h���s2LJȼ/�ѻC���g�������np�=�������BT��i��fT�c��|5��W�>O��fP�P�>��?
W߻�A��`�
�x[aD�������G��$Cr�^��5ջ��ύ�N���dռ���܈�$�i��I=�nJ��]�Ե|����#/��"��v��m���	��rI�B�Ж�ON�|��l6z�=57��}:�^�UE��y��J�$B�§��%$-���p����x�R�%�0�y�{���r�A� ������ͻ��ܼN���dy��͐��&+%�����m���'^�4R�{:�2/c톹����3T���]N��`���#s�4�Ļ_ċ�j򅮿�b���d�v╼��B�~�xW	�gF���a�.��&4�4/xln^'��t�b�2�|��p3�XE�B��G�-�Z^�7b/]�m�^Zt���x�B�
�)7��w��&7��׉��=��ʔh�����e,׼u}���|�4��B�>��ԻzY��/S�B�a��4��׊x��C!^�F��F��trC'�'�#މ�<�*)�^|]��o3�B�I��zW/�;ǽ�y��3���'l�zAD:�)Qīo4Xh�
6
̻l2�8��=q*w��kW/��z��H��Co��Q$�#��"e������+W����_��-���z!^2/E�8�R��RxG��W��Px��+�U
�h4��X��m0�V����u�=|�C�͗�X��'�|،"���7�ͱR���#�6#W�����z�h��_A��F^2/#�.���]�D���hX��o^�WO��׉��S��%�6U���&�>1��p�\�m�ś�.~m��C�\�~>�aF:�4��5�7�_}�#5�Wě�h@�w�7]�D�׉���� _
 � T��I42
���q��ߴ�o6)����Biaana�-lS��防�6��z
#�Z8��f�-e��P��$T]�%�{�8�j�dB��
�XK7�j^���x�x	���O<Wg�I�l�:�\!�@���pM�M�34�����aM�����6���,Y8�,��Z
y!�fF��P���B�G!^m��:�l_�WVo�{�M�N�'�fP�[�C���%��5�l�К#��q}Տ����$.Z�"�������u����n=��xo�q�����y��_1�)�fF+�s�3�5�K�RvWBo�{�K�N�G���ė�)H��%FMz)2H�����^G.[8���8�ժ�Nv;�U����^n�f��ъ�\��0��j�l������}$^'�N{]����P�[�7]��z����(,�	�ք���'l�_��י)�o��'^�ׯ�g�u�����V���$[
��ŝ5��0�br�
�z���?�u��0��ǟ'���^����;`?�U��ׅk%�o��S
���W��ܨI^��^K�S85skr<!^0!�Y3o4X�
�
̫�7Ž�"^'�ßyݸ�x�k�&mN0?_����򋚠1[�m@"`�٪��ו�,���zN��Z������Ȼ����r
Gx��<�Ԡ�W{gmp�&뿤��Ũz�����'�u��s�q����:�V��`���+^W�.X8�����K��&�6���&�Uy_����f:�W������v�6��Q�zU�j���u�=�u�r����q�Ņ� %*���ث/�xݙ�p���ej�S�����>�2�r�rr*��xG�J���e�w�$^����?JS�j�~��/���S��?�n�"�|�ߛ���a��;/��Z8��b<�2o�xY�%�6��
I�p�&��b�o�rJ|g�;k�7���z��թ׉���Ę�Fq7֭�]��1��{�{l�?��W�Kᚅ�__���_	o�����]��([\|@K��K��s�'�{���;k�7��C2/�
P��N[�׉�8�1���W�,���(�UU�������؇m�}��zi�Y8���i.�i&^��v�7yQ�7yu���uЫC�E�A�<�,���>[�|�M��8�+�7]�N��x�4�Wz�X	�5zW��q��۾��4�ԥ`�~�K㎅�X?=MK����+4�M^���p����N�NJxE�at)-�n��W��>k�>?����l�y����^�/�xg��8��QM�4ǾJ�~�w�_�'q1ǣ{���f�|4/.�x$�1��c��Hdڟ�A�'4��%BvX�y^*�I$B�K�����ϯ���C�H��cҹP��;È�|�wF#��;S�����<��9r�_�q�a����O~��5D[�~�iKy�O�� �pL�q.��J���g��yW����������_7���{�#�� ���HrD[�w��"�_��h)q-���±�\"� ��#4tS���@T��vSs�(���0�0	���J�1��S}N�t�E_|��{��0>����П.�O��un��ך�������,;s�?�s_�~��ZMo^�Q�c}��Լ�p�n���p��mޣ#o�oNh����E����ק����=�����..�
յxc�ekipj���4C��e�R�
�Mv�SW8�F�4}���L��]�?��z{�z�%^:\+T.~�]h2�{}j�?�ӕغ����<�����B����T2���Ia��W+ED5���8��A&^`:� �������xC.^�8Y�I�"<��ތ-���M�m-/���ED
^G�m{�{\�F?S&f8l?��zK�$�k�4~ȷ�?�^�ۨ�0���Μd!Wq�m4!�����=k��Ng�0��3�duX�`�λ\�K�= �^��� ��2���T0g]�Wf�$�\f��KV4�+nx!p����uFлăήh=o��\�$޲@5EQ�/Y���z��k��V8H3ĥRu��\x�;��G�W��]t��K��i�e�P��=x�}9��gN��m�j�w�
���P�?�=eb�ؼ#^o��xe!D�7�~��D��6�&g��k�WO �Z�W�i�X�l+}C�)h��7�WE�%���kysi���7�[�I�(��2<�[b�����/��0�:��T��x0I|���̋�W��K��Y<�J�!|��h"�_�{k��{�l����x!�q�ş󵕵>����w6��	yC/^/�����R���E�J,M�f��6���{�/ޞK���<a���bּ�OǓ���Ltހ���{`�%��2�{)�n҄��fc��bϾV��f���2x׶��=�#x�x�}����m�3\)f�NC�@�=$��3���T�Ķ���^U)Y�
f��+��7�v�O�:_-��xW�X���!9_>�Q�=�xc�n8/K��B��m���#�=�B赊�����
��?@����ޕ����\4���53� �x�'&��|b�v�T�ג����S#M`�eU/+z������I2���@�c���x�R/H:�k)��$�3/�7��V�]����=����؞��,��i|\�ɕ/UH���6�������w�<��^Ȼ!���;���5�xC���D:1����ԉ8Y�K�ȪG���{���?Qo�T�w�Mᣵc,^�硭�M�im�F���x�"�	��I}O$���eGl�x�,��8��5<K6鮼t�	3tH"��K�=$��� �������yc����7
m��@��Y�������3�Y�^:�w
$��#�z�̛���2��DY�	/Z��r���s����xS�+;��C/����mA�%�x
�3���f+�DY����,`��<ZV�� ��tv�>
�%�$��!��╡��n�D����M�}��Y��/O�-�k�xS�/^2/�Ļ#$^��M�V�~���Dު
�5
u����%;�}�0��t��{hH�G!"�*	��I�yk�!����j�u�����Q؃~���&�yI�{��{����0��2���4���bs��ȋ��p
�%/���K�%����[���Zނ�n3�֚��^qi�=�+o�b�i���{��x��ě���N�V�����x��!^`���B�@�q⭓xo��x�Ŭ�j0H6�����]h���\�e.�>�x�m���P�'9�/�he��a��a>�NmyW���F�+�=�]�BU�k �$^	�7ω���\�`���n]6,�0��9M�%H�;B⭃xᾆSrs�4ٚ��i�∩�Wͫ-Vϯ�Øv�@O�q�W@�%H��C��M��Eku-W�E���x�օ'OAͻ�yy���L������x���	/�.o�
1�I����օ۸i�5��7���*�;��%�!�$^�U���p
&9ל�9`ٻix�6�����A�/A�%x�b���+U�fQ��.i�؞��t�e+H�AU�=����%H�ސx%��iP�7C����x�M�w�c
	��%���
�����x/+g�'��w�|���+y+\Gۈ��j�RC�K^��?�L��}=dWgT�Ϳ�޹F�W���](��;(/D�n�٧�~mqʟ���k���]�v�i�� 1r5�@�
Wc��{D�%�"޳���;�|�{�w��a����,r�0ɵxy�w=�i�'��)�]��=/V6�.F����@y1
䆜�C/�ޝ �*�$���j��r�#;C���a�޼����f�O&���iZ�;�OOoc�3�A4
ڃ�o�x	/�W�]λxKE3D%�E^����K�.��⭌D��#�a/H���A�.�.�S>-^���>fXڅ�|�����i�ݚ���z�^/A�%�J�;��Ԋvr3D6yo��x�/~��P�O���߻i�c�B�%�$�h��Ϻzե��բ����"�y�M�U��\:Z��ŋ����i���n�E^/A�%���"�62E�'��@=i�w���98��L�m�x��=�n��Zw�����,
�xw�J\t�}���[��AA�M|v\o_��#MMEa��u�谥�l����[��P�	��猄tGb;@�ޛ���q�_f37�������O�~~3�&�7�S�n.����W��mx3�>�.�K����#�ʝ����[��/[K��-������0Y��ixc�fz�K��«��jxŧ����w��~��8�c�~���-?������.[K�m�;DZM�L��/^�}����.qWX4hxg7
��7#��.q�U�Y��ӑ�ɇ]�W�1�x���ㅃk�6������]�M��+��讆W���4����[�Y"�+���/���
(/�
>L曫<�"��?��?�Qv%����4�3
of^u�]�n�f��.X֣�awq�&���!�����T�Et��m�B�xq\؇xO|�]X3��K�Fë�yx���2[�f^yv�]xEz�2z6`�k�Vca�n�&��J(?���|�E[j�kZ�]:��jxu^l���/��
/qWT/|�ߢ/�w�b�0vq�@G^����;��׾
�-�i���{mY��讆W��x�wY�$�L%S��0�N3��J�����[�`����\Δ^�b�&2�oK���#�1uWw��sW��4����kx�a�����{�3�j'�O^BI<��
^w%إ/�w��o�T�Qvs�)^/,�_[yU�q���zWwEw5��Oûҷ(��}kQi�]ށ������`�Ç�Q���K�q(xCu�S�V,�x���G�/��W���ͱ@�Jv�Kr���PÅ���2�,a�v��$殆7�ixd\^�L�d�W#\5�6
㠛�f��r��ۤa�/�-c�ι�� :x����W�R�V)�3Y�m���W5�o��m&O~��+oGuf%3o�f+��Qw��]tWë������oDoG�p��1�w�۟
#�c��Hv���"�{e�.T-�J�e��E ��U,W+�B�R)��Gq�����ښ��n��P�.��>���]�7���]�P^p��V
��L��z}����n��Ku�	��E�%U�J�W�����V�>�wzy[	�a�`�����:�%�ҳ�������Rw��xa�U�V#��&a��c���^�.w�+�|t�P���c�:%��t�O�5鋶�oJm���+��P��4�(����'c�>[V� ��`Р��g�ٟ�.�x�2"x�^2�*��V����=E�A>��wbN5�&���㣵�;��`v�]
o���k���>�6FV
�sx�m~��خ�ffܮ�Y��/l�Ԉ^��=y<�*N���?��Η����oa���_Dw5�1O��B�<�p,��0�xӫ쟖:����w���I7
ބ{�_�{v{�l?�DoX��U쩺�r]�i�Oʦ���#檟%�����]:�jx�]^*�•k���;x��}���ü�Z������{�.w|�;NV�B�Wa�;��r*lxMˤ'y�����Mk��ߓ���Ȅ���Ew5��OÛ^�Y�*�#��
0�/����(�9kw
]vȁ}^E�����=}@���0�/O+o�M֫m�����"�!=\�a
�-q�����>
/�g�Se��B��޵��xP�K�q�9�xg`2��0�_��Mw}�B�s�]<Q�.����d�v����د6[m7�}ɠ#:�������$wA^x��}V��/�����du�lbɃ����zm���2���#�7�]Vq�R����Չ�e�e��i�8��^��ԙ�mBxO�сW�]
�.>Mrw�By���z}�bM�/\�ĉ�`e�q�t��;�^p���^a��r��6�B�˽��âF���ūO{�O
�k9>5Y��s8�)���jxu�k���x�W^�FO���/ެR��&�8�oÇo|��Ը�w�%���<��dӪ{Yt�U+�U=o1�f?����:q�Ե=���^8"JG�c/.��`v5���5�]r%�ʕkk}����w';�[�����[�7�h𙁗��w'�^��%��͡�P)p��4�9;vx�š7,z�y]G��0�/�������$w��*�/sy�{���l����!|
�"��୎�땻�7಴�9V����F���ΕM�R�Iy[�j���<����Lhx�MާCwQ^���.f������Tr�l\����}a�%��7�r<*��lA�N���B���x����u�?Z#^q� ����~��.ʫt?^�����b1��D�$�.�{uDi�.��M�ڶ���e]��������&��{�;��jxu��a��)� ��T�L�m��|�v��m���y�P����Ȼ��yk�w/;uh�By�^����k�α�K�����4�O��^���/�|f�Z�բ��EI!߫#J�.}�\I<�����7�H����6}۝�9�6�^q�}�὇ix�����aW!f�������e��|��f!|;�DY��k�v�rk��_�H��������f
^��'���no��n�8�a��R����jϰ<P����U"��.	N�$I��[��<.�`�J�����w��s����T�Z��'�w%ޞ�6xO�*w�m=/+4��~^��c�i_�B������r�w�������D|g�Lb�[��ͥek�K��x��)BH�+�~
���N�e�]Bk8��#낷������U��=t�[gI���F�ńw�o�4W���ȹa�7V��A�C/�+G�ēĻu���˓ֻ���v��zoUx%�.x�O ^�B�$x�xgG��E�ͻ�"���=􋗾�sC��6��Ok/�x�K/b��?�KN)��4x�ʯv�p
���^�I"���5@�(^*^�݌w��n�W�'��;�Z�~Z�x��N��L�7?���z�y�.	škx��,����Ug�������{�uio���g:j�-�1
^���B�.��R�o��y����tÎD\��hĮm��̇��^2�@��7 
t9Wq�>�5/o���~��A�x}G׾}$xŤ�5@��\���+��y�]�wJ�[/�Iu�@Y9�&�D���O���6�<�
��G�w˔YC�5�!k���%�J��˼��Y�#�����dcS�.
����o���9W�d��n�÷�y�����}�e-N�̢�����S����$.�Sy�9Cџ���滛/�k
��c��>�4P�T�Ʝ�� �yUUyQ���k9�ydQ�&Ã�/���ּ^��K�n��!�h�ˊ���+:����p�/� ^�^�Cf
�p�1��4�\
��Y1�c�jW4�}��H�B����B��K����򁄌��+��˲�{��2^�� ^�W$/�7e�@�a�3��0lh�	޲��� ^��$����u�7랉ī5����,x!^�B�:��K�͡?�Q�F��5�p9��4@����=��Ξ�S���mn�'9G�B��xe�nCF Ό�HE���˳5��s�]��x���=���9l(�s�YH?Zsv"3^�@��6y��I�n�1�Z�y�C��%�[�%x!^�
��B��O�c�J�}�Z󪋮��޲>K�B��xe�
f>�4��u�rљ?`���N�����}Ǽ۠#J_cɴ��E�L�V���F�K���Ȋ�B��.��E�ہ����[���<��	-o��)�S��[gI\�i��q'_�ʏ6�Go�V4�Q�ޅx���g޻CO��̂(
�0������5��[k�,[�$O��R�!�8���������w�
F��h�/�<��d*�+��%֕��7�������/�{+Yu��x� y�y�z[�|)Թ���z������5{v�7��ػ���q(�G�ʛ�=s�I&ʁ�P�ز���N�����	������z�,�-�[>J�߇��K���6�^�+|����Kܽ��V��m�����u���^�%^[^�+{U��G'��w�wE�V�vy�ʫ����D�k˻����J3��]ڭ���)f�']K6x�^"F^ɫ��O��8��>ۧW����
�)�+������Dd����^#\�g?�}�[���ͽ�njˠ>���<�D4�f^��$A���^zR�~��[���=�&���Z_w���&��;zg�T��$��a�Ju���v����8K��#Bަ��U��*=���k�}��B��$�Ů�Ǡ�x�hbʻ��_��Q[y5���;�V�����r�Wk�K��W�~6S��*=��$��q�!oY\�]�L�Β��D�+yE���v�V��gp6��w�dv��M�x��d�^��/[�fװ�W�ηo�]�n}�6Q����|�۵/�vװ� ՅoY�|f��M�x3"^�+{�ᬕ�9yW]u�`��ɮz�7
�;<"��=�P�
޹
o����B�f�06
�/�*Z3���x׭��\7�����^/�?�$S^�;<�;�m��m_�J�uC���깹���4L;^^��^5���5��wa��R�/1�U���V��7
�K�Kƺa|�.�ђ����_��]i�U/]+�iw�K�K��7�ߖ�����~��(�1���*?R�֊x{D��j2n��`���w��ʅц^g��5��x�=^^��'�-k���FU�k�
~�>�nm�x	x�W]��ד�T�S�*?v�-7�
px	x�w|{��m�����ެ*N�������0�fG���R�nN«����X$��"���Z��ր7?^��0�~H����U�)��b���`K�)��G��cd�k\Nf��B(�z����?�/��x��(V6����r޼�M��&�%�р����*E?z!u]��m��dS�%�ـw��G���.i������zW�U�F�1�M�����?*�}|\��^~�-c���Y�ZW�/�-�ͻ��o��H�]�|F�)���l���o��r��J�g�^����#��M�a�^��;	x���S�A�f/��pm
��7�62\հȇ7�g�e,Z	/�x���w�߳�ѥ�/�����{g��-O���U��l
������b�ɵ��_4��^�q���R�\��g1F�T�Q�ٽ/��]��9�ߢ7��K�K��J��+�x�x�,���`DQ]H�_S��2�y�1�.���/:K�^�W�͇���?���;7������+�%j/x�+����	������ޞ��R�^_��,@���]IEND�B`�PK
!<8{cN����#webextension/icons/onboarding-4.png�PNG


IHDRx�*�:sRGB���@IDATx��	��W}��:���ւ	6�Y��r��yyvNr^�s���=���c�Y^���8�؆�Xl���b����@HB#iF��tOO���j�{���������w����.�[���׭�m+��N\ڦ�Oy]���<����Wz�� @� @� @`�mm�1{0�bk�7�w*<ǁr���|�c��_�mw�0�Q�	 @� @� @��ms�}��CWׯ�kv\�ع�G�!���p�oZ~�� @� @� P����qA�{������	�=�Obp����KT�!@� @� @�@}҂ܶ�Ob��z���gW���Ҡ�$@� @� @��:
����+y����l���sw�1+w�81�&@� @� @�@%)]Cw�5)'��պ33�Zp�9� @� @� @��)]C����:qa�O�0�Q�ni� @� @�*h������6�&�݊ĜD� @� @�����1��R4�.'=�
 @� @��\�u�1��啟�L @� @�ȅ@���
m��3:A� @� @����nZ�;X�3�I� @� @����ݔ�W!@� @� @���m�I�e @� @�$^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @@��k� @� @�
* �۠�� @� @�� @� @� @�@�
�6���6 @� @�x� @� @� �
:q�M� @� @�^� @� @�4��o�N�n @� @� @�A��s�)]"@� @�hz����b�
P�73��3s!̞9{�C�� @� @�5:�ӥ�#�ܿx�=E�1�;5�U���	� @� @�$��"ĩ������Ur+ �[��I���M+w @� @�y(įfB���:�aD�y�6C����kZV�v�T'����kj�K� @�hE�����#�[����}̑���c
RZ��?jwG[������B�\����Sm @� @����|Ggx�LG�'���]()����Jװ@��qV��
���)��rGG����)��E.n @� @��V -<L1���s`Y�]�H�v2*lM��B��N��9Km��5���ݝ���� @� @`�)�?wv��Z()��b[J�xk=�K7U��{�B������ @� @�,h�A�|^����b[Kt���V_��$���.�z�z
�G� @� P����bW�b[���j
�VS�T݋�3���l�VJ�1 @� @��t�-�5��ԣ9�.D�:��|��� @� @�X�Z���
��N�� @� @� @`eޕ}<J� @� @���
��vjt� @� @�+���Q @� @��V@�7�S�c @� @�XY@�we� @� @� @ ����#@� @� @����+�x� @� @������� @� @�V�]�ǣ @� @�ȭ�on�F� @� @� �����>%@� @� @�@nxs;5:F� @� @���xW��( @� @�r+ ��۩�1 @� @��, ����G	 @� @� �[��N�� @� @� @`eޕ}<J� @� @���
��vjt� @� @�+���Q @� @��V@�7�S�c @� @�XY�s�=J�v�����v
j�9�Qot� @�E@��Qf�������[`��H��sx�5q� @�V��au#g @� @� @ �����"@� @� @�����9� @� @������ @� @�V�]�� @� @�ȥ�o.�E� @� @� �����F� @� @� @�@.xs9-:E� @� @���xW7r @� @�r)Й�^� P����%�vtt,�� @�4��oc͗� @��
	<�УK���7-�� @�4��
�5_zK� @� @���
7 @� @� �X��5_zK� @� @���
7 @� @� �X��5_zK� @� @���
7 @� @� �X���]�%@�V���[��s[���s�� @��G@�7?s�' @`�>���X�[o�iM�9� @�j+ ECm��F� @� @���x3�T @� @�j+ ECm��F��*�Z���9wW;���U9 @�lX@�wÄ* @�����_�bg���%��v����!@� @���	Hѐ�)�! @� @�T& �[��� @� @� �;��M� @� @� @�2�ʜ�E� @� @���	��nJt� @� @��	�V��, @� @��N�3w=�! @�jU�[� @� P{�ڛk��M�'�}���0 @�d/ EC��j$@� @� @�@Mxk¬ @� @�d/ ����	 @� @� Pޚ0k� @� @���fo�F @� @��D@��&�!@� @� @�@��ٛ�� @� @�5�	�F @� @� ���o��j$@� @� @�@Mxk¬ @� @�d/ ����	 @� @� Pޚ0k� @� @���fo�F @� @��D@��&�!@� @� @�@���W�Ƶ������>�-�h�	68V�`E @� @�@�20�:�c׎Z5�ȱ��9�]#@� ������@��/EC��G� @� @� P^@����G @� @� �k�\OOkuN��֚o�%@� @�ظ���
Ր����|F5�� @� @�@k��<% @� @�M( �ۄ�jH @� @����ok̳Q @� @� Є�M8��D� @� @�@k��<% @� @�M( �ۄ�jH @� @����ok�sMF9??�E!@� @� @�6��iF+�"p�̙0;;[���ͅt?]�v���B{{{����:;;�tL!@� @� @ �l�������	SSS��n����n*ŕ�)�.�Œ�===�����-wM� @� @���x�n�2�H�����0==��B7q;::Cwww��(\Rж�-� oZ�[�:��ή�M�������B��&@� @� @�r�ʭZ�̴bwbb��b�8�����۴�vy0�x���tNZ��.���ip�LO��N�S�}}}V�.t� @� @�@� ��))�:>>^�W����fH����2;;�-�>�����`�R @� @���m��^m�i�n
�T
��U������V{�zO�͛��8���V�����@���֣�9 @� @��& ��j3^b�)O��ӧC
�U�����*۞gf(��M���ɩ0::R0���6m��7{n5 @� @�4�@{���p�(���###��n
�nݺ�f���]M��v�C
4�>��) @� @������M�?��i��|L��W�n�+x�7씶!yO��)&}K+yS�W!@�6鿷tI���E!@���@�l�.鳚/�s�]�
�F��u������ݼ�����0R<)�%�S�R:�U!@���M���9�w��v @�@)��,�G�ޓ�ͩ�'+���NJA��e�ѵ����x����F��Ӕ������jz��y+�O�N�)��M}M+ym���YҟfH+�o��f�X @��FH���{����F���H����M�333��N�����Z�����TZ}��4��R��A�{0>>^X��Xl޼���W�`����������J��<� ��-�]�S	 @�5H���{5�j^�f�
��6�Z5uW*�TqԩB�7-~���o��ݭ>����c6" ���|���T���Fap0i�1�t
��##Å>���o��H @��|
��s^�ӫ�Zw�>y�d!ػm۶��׷�n��9�>���k�%��m�i>;Ȕ�!}S�J�`��/�A�����TR�����-[O� @���^-K�ԕ>Ǟ8q"?~|���=O�Ԥ�R�����ǿx��&P-�j����mY�9DW�ل�9�b�.��R�S����![O� @���^-K��ו��G�]Xl�e�"�Tw�7&o��g9��"����J:M�X�G5�8H%�M���M�pvoC��x5��~ @� @���F���}�ȑUs�ndRچ�F�Z}��W�%�V���F�#r~I��Ϋ==��$�%O��w*�}jj����@�{�k @� �^�����o��~�T;�fp�����/��°w�V]��_�;v�&��HMm�ٳ'7�����juqjk�޽��^h"�#�x)�X���#M�mV��>=���v��喛3��5�=x�X�kh�/���	�����b�J���jtt�0����s����ݽ���n�CC�ᢋ���
 @��)�>K}�3�
�ַ�95|���%w�8��U?���i3����V��ێ;j������ήxN���R�y��=����СC�������vJ�r�y煫��j�Ou~�$��[
�vuuUm�n
���}0�� o*)�]w�&Sݴ�7�!��Jc���ɴ��*����/|�k�(T��o�>���L�M)3�o�y��p��J�����^n���s^���?>X���
ׇ����YtK @�4��'>���݇)�<�.����j��M�7�y���c��V����l.G�~A[�༖Lm�_��}l�YZ}�������Ň6|;�E.���
ף���m��,9�M������=�<���{z���������}��}Oo:~��?ԔA�oƟL}�_*��X���3O?S�|��^�ʗ��n�u�'�|b�[����� @� @�����o-w�o�~�]��w�^��>g�ٟ}�<}����_^������͡0<4үJ�"�������W������P�K�Jj;��gi��/���ͩN��r��"Mv?��-�,b��ʯg襂���k��v=խ���Ҙ����5�\�?�0�f�&����>��M�&��τ'"�-��Ms9;{f�)� @�ZO`bb"�_B��V�����	�b�wy���K
��?��h��{�L��K�����K�wlll�3����~����P�}kZ}���믏+ϟ	\�к���!թX. ��\����)�A�M�wo�+4_���VE2�!�%�+]�O�V��0<<�_�7�Y��33����C��-a�/�/����y�B�=}����O��ŕ�ōғ�����w����� @��)�#LO���i�,Y*�[�I{w�=_R:���\�Y�\��O�.ץ�O}�W���ǿ|�S��-oyKf���F��(��.i����V��j��^)���7�q�խ�4�<x�`^�����lA�O~�SK��g�t��^���srC̫����;�m�bL�v7M%����?v�]^ @�Z[ࡇ.t����v˪/��%��J'��+=\����ԔR��%�!�%kYZ}�嬓�B������p��/Բ�������YKqlu&.�|
�.sR\ɛ6�k�r���G�fjŒ�����w��Β���y)�V5���@��q����p����i�	 @�hA������Sgs�^}�ՅTn�1l۶5\|�E+����+>y�����R�їz�Y�;O})�G�	d) ���f�*�5M+-�(��1�R[�V��M�8~�_\`Js�Ο{G�����v#�
��w�k�OS��
 @�Vc1���#�ᡱ�ot2̬���Z�I;Z]`��.��۫ݸ��˞�R�]y�e��i����z�m���S_��qY
�v�~�=WWE� h�w��M�.��8�� �xR3�k�΃�Ӫݔ�j�%�_���/��ԩ��Z�X�O�4��C1��O����SKrvv� Э;7�7_�#�aOo��whe�$�~�C�-<y-�1.���
�+��2�׃
T�F�~�_��ԣ�rS���������R3�u�η�olo^����8���r�~N�=�ȣ?N͐v����3�R�{��&k��gs�s��f���b��x#@�G ���o�0ܻ�|j���Y�7��*\~��?���k?qq�Թ��΍����/02rvS���o�Νwh���eϽ���>V��T�G_��f���K_���/}�K�pLO��F[[[ػwox��_����r�w��x�|΋����]�wo�;����w����-��T�	\q,ű�{`kx���t���W��
��=��wZ.���v�i�ׅΔ��ƽ���^}�U����e~�Cq�	��� @�j"�ѧ�������/�Wkx2�o�������O��p��گ�[��'�L���;~��J�ڹs�¯5+��_��{?��۳��q����F?3���UO�G_��f9����ѸX��)8�E9z�hصkW�馛��NM$ ��D���PRz���{r�ԩ�{��������~ �KeO����'lٲe��j�*mxx8|�$9rt�~���b���*�z�Y�󆆆
����Waj����5wo�Vl�5 @`���w��y�Sk}��?85n��p�ow�޼p�
�H���~�k�����B������&&&�}�}!��o/<w��t�_}���s�z��z?����V�j�+=w�����K����d�M�'�T�B`���r�&�_�6��Y�?�_�믕�f�t���z��fժ�0�3�U+_v�׿���w�ͥ �׾���3�����\���/�˖ͫ�����^����z8��,�#ݙ��)����!�pV @��Ⱦc
��>5=�|�#�o�9\:�[<��
�_F~���8<�̳�Ԕ������v�T
}�}���9###q����SO���A���W�'N�<��jH���%]q�j�yq��>�����\sM���(��u��&�Y��l�2On*ަ��sS�oI��k�=���ήڽD�*l��S�Zx��k��F-�*?��>�޾�$g��
֞���G��5!] @�@��W����2k��Lx�
�z�-�s�ۡ�ڨFE�o�
�G���n�����q7l(\ګѨ:	T(���e��n��O��.Y��{�dQ͚����h�o���ԋ%bo���p�-��zx��R}y�a͝���
�.zW�a���@�-DϜI�\�}�����e�?�A8v�ؒ&R�]]�?S�//�mURΎ%m�V���/��p4�=}�v�L�s�A)��w箝!�����߿�[�u� �7��7O��G7��(����t�YV[���ph8����}�DY��1��Kw�z��*9��2*]Y �#�EI��ү	k]�g��y/����}n��o������l9dz��R3�u�o���Š�Z�������~pI�7�/���w�+��X�@��~ǒ�V�����ߕI3��?��?�?�Ē�Rp���_�kڭ[�����yfz���}O�/|�mK�� @��_;:�pp�*]���k�(xk����<vj"���<�`�iU���s���?����n�,v�ud�8�q��Eyw����=���1���i/�<�zx[}�y�w}h]͛|\S�w�epp��ݵ{ג*~s}�#)�Q]�@���R[��ˤ�Ղ��8�%9_WX�O>�Ǘ��->� P�����*�G'���ؼ�������?uE���?�������OO.~�mUx��/�j���k���n�{�U}|�6P��ԣ�ry�K�>:N K+x���a]�'iѴ��FJ1Ȼ|%o1�[˕�űd�"b#.�<������=��7�'�x�p7mh�/~9����h�#qU�'�9^�t����v`l*���+gBڈm8^Ff����|�My�e6^�c
��x~zN�l�����v�쎷/�	
�u���/���7�O�<�)?�Ͽ�3����'�e6����V(�~	��?\�lQ���t�u�__�t~�:�~e������J=\�c����������{,��Rwltc��z�+����
���f�X4�c�W�F�~C>vsu��@�����l߾c�ȏ�����!_}��5Iא��'O����: ]�4Cp7�����'�:5����w��0�*��^�<.��ܦ��`Mw��<�M7@"@�����~6��o�k�1��o
�^��/\��?^µ[������=˿�?��#�������xK�h%������-�c�lQ��=�┟}˛�6�i������i���ܹ3�kk���ܤ����‰'�?���;v�o{���@LwR�2�=�{k�� ���?���P�SKS%��y�Y����MA�tI?����X���m�����>��~�b������C��Ҧi�*��gW#�~�o%�\�%����Է�G���cq��1mGz�PIy�������>�H���n��ֺ}�^I[�FY
�Jsb� P�@�R��|��j�ʞ���&��p���G��—��܏�;�K����}w�Գ'ƒ'GCZ�|��=q��<��/ܳM��;����gU�z2(��1�j�R]Z�x�}_Ȥ��γ?J^�2r"~f|�k��Zq@���d�3x�X-��g��^��ǿ��G)l\�>SgqI�����p�y�-o���в��=�T}

��v
X�zjq	V?)�k�GN���c��4Sp�h|�׆�_t{�nH���#���attt���{?��¹�?�Pahh(�>]�9��p� PJ���|6��m�2=w&|���†h��?������*������B!Pm�C��S�+��"�V�p��=�U����+�����W,��H���آ�HK�ѝzX��v���}�g���/��F �u.�ۍ) �ޘ�^�o��7Eis��ٙ��ٵ��:��eN��4�4�<�8l��n�5p�]��18��<^<�}��;>.���z�ҰiӦ�c�O���=���d����[�nY|�m @����JW%�����?~(����$�
�B���𩥛�@�w�QH�ҹ>|8;v������T�Lym{{��-[CZdt��-|�HM������-����k}#��4}.J��jYR�y��k������=�yO8t��/6�W��I��]�v��%I%�wNs�[�q���R�t���	[�dX+���Η���5��3�N����
���O���|�s�_��7���s���/����yr�t$�;)g��>�W�o��7��[o	�{�OKϰ.��<I�긪��+�T\�{�Ǿ�Cn��7l�}�֨���)oJݖ~	�R��O�2�q�K6̔>����>��B]��?���}{�S�=z�f�����ݻ7l�e)�R
Ԣ��)��RL͐E�R:��)I����:��T�>�Y�[������O���i�ߔ�
�������x-��̲�>������Jc{��Kn��nXz#��׾��Z�/>�qӻ�%�-wg۶m�?}W���ʝ�8 @`E��;���l8�����y�nrW�d?���x����:x��w����*��?.z��BJ��EI�Q���7��n�1���Ep7�+�W���)�p5KJaX��(����ӆ`�j+���Aټ��W��ٛ���/}��V񎎞�?�����t�l��1�����c�J����l*���/�
}N�1���\{�5��.����}�)V�.7��+�W\^�p��qZ
�/_Y�V���
7�tC�^���[>F�	 @���	����o;�yh��}/���q30�:)�/��~~\ɫ��@�<w[�p��Ҙ2.O%�5�*=~�x�V�P)����ɭ>�<�����h���)ECfzÖ�������l߸��M�}�јkh0\~��Ɏ���$�c�?X)�DZś���SO��ӣ!��;���Y�/�S�!��F#�Δ���j����/�� ����3�ˇ�×�*\?:�l��T�|�g^^�'��n7�IJ�s\�=vٓ<�{��Y|dd$�~n޼9���vnYe�>�e
yW��|O�����L{�8)������gYl�V�dWWgx��_���u�X��*4��Q�P�]vY&�o�J�	�6ڬ�—>q�
��R`��|�J��sC�r2<"�[K��m�v��re;���:J���Jia�Pܴz�)�g��/]7Ji��7�<�g�
�6�ܭ��)�n�	���T���m�R��|��M�T�o8�u�sVy���I�X`nn.�6�r$���T�w��p�K����\�z�+I�9����Y�tg�) �gϞŠ�ſ~����$�u#�V#Ι>7��o��Uf=MyQS@'�Q8uj8��ckg�I��R�>+TG �[������U+Z]�����z�Dx8�ҭ[I�uǏ?=]g�;�tI+V�ょ����uiG��r2�4.\�`�L���c~�0=s�:=�$��p^_�l���>����\)@�.in��tI����p*i!Vz^\��=5��Vs���&/�y���cq���Gdd�Tؼ9yk؉�J�R�R�RR�FJͰ°<D ��Me3�i�5�� @��ҏɿz�T��3��'��ٸiW]J
�ը1hzcвs���{��-d1����+Ufb�mr:��𝜊�xݠA��^�����@1�W��5[��M��ZuAS���/1M���oM�⡦H7m�TH����[�n��J��m���Pauq
D�>6˷����&�G��M���U�鿿tQ @��Z>S/��7���Tu))���7^�ϗ���Z��2�+���,��Z!{�b`{<~�E�,�{VւN�
��C�~ae��>� @�@i����y�Qz
wtd�
�����u�M���h���٠���M+vO�Y�����n]_'@��]`l�L�/���s��/�
�Ҋ�j��2w�@[�%[�V��ǭ��N��)��
��ܵ)��+�ɛ�� @�@N8��'���Jnxk=9��]YS�7}K�V���"Ԓ�l���·�i�`
��
 @�@�
�t
ߊ9x?sp��ީ�̪�|�;C��jh�_��\d�1�;2�c�7��A�9������[���s�)] @��\	��j:���9$U>��oq����D��<��8��,�䬦H�I����ĩ����B�y?
����	 @��8�����퉣�X�R/��tv�n#gJyzO�@�p�L�Tu,���K�ݗ�c4M�y�����Y�R@5%vO;t����$������{2[�*��L�IiRI�b�5�� @��*plj&|�p��3'�׎��`[1��V��n���]i�q�l!�DJ/���X\�W8�8�ÿ��B�ݕ��c @�x`�j���ݼysa%oZ͛��N�*`{zz+zS
����"�؝��\�0 �Ӫ�t�jw=��C�ȗ��������G�=�s��.�]!��-��x݌�'�k��vo������`x��7ƕпs����hFQc"@�-%��H]K��`S������=��*d����۱Bn������,~S�7��lO�b9n�Uw~���
��Ӆ\�E͔_����p�k��� Иic��g��Ϟ���M��Y�q����q�nV渞�~:���;�'����o�8\��Q @����m�)��R�5z����MA�b����w-���q
�K

[��=� @��+����ahz6�Nv�`�y�Cl�]�zή�=4��g�i[Og���}��B�4��o�Le���)uC�V�o���9��%mҖ.����%��%s�%��U @��O��
o�p[��G�ߍ���n4�@W|���:�YS2T����h��{��&ȕ<e�s���+����	�g��@IDAT @�@
���f����u�G��A�yO�{�= @�Ux"$��w���Ɣ
�*)�{Q���-_b>��ԑLS5|��ׅ۶Ǎ� ����ߣ�es��f�sv�=g�� @�X�ʸJ�c/�2|��W���U�k))��6��=��V2o�6�;��q. ��
0I�H� @��^�gs��k��V�Z43��]i��N���L7���C�����6�#@�Z@����O�	 @��W �VQ>��oC�p�����2�f��W�u���'��빞D��S@�7��W @��B�T�#�Z9ok=�.˴-��Ͱ����3lSU @�@�x�g�f @�-/0<�J�7��p�jS��u�Н]���t�򑑦�2( Њ��8��L� @�F�ӳ�[Jywwo)��G~,�e����%o}�%�;H�4��o�͙ @�h���3av~�,��cj����WY]`s��{�
�gV���{� @ '�9�� @� �l+��Mi6�6ې�7��ڹ�+��O���>�Y}*"@��' �[?{- @�hj����3����c���6e���ރ�U�J	 @���
���[k @�ZF��
޴a؀ջk~!d��OI�<�@�r'��V��Zct����Q�$@� �F��-����ɖn�	���xW�̬�q��}xb:���τ��K����J�
%S)�����o�f�{�y @����e/a��V>�s�1G*�+����+�a�Y��υ�ޒc� @��s��sȁ�Hѐ��� @�M%0Կ����CnvnM~d nN�a9�eo�������o=ԵI� @��δ�����eJ1Ж��ʺ��
���l��\) @�@�
�K޸s�� @�r+p�g0̵��ח��*�h�����V�εw�c�����$@��. �[�)� @��'0һ��xK���hv����ͻ�Һs	 @���	��lBt� @�@3��,=��.k9ڟ�&uG��]�s	 @�@�x�6#�C� @�	Fb�����Dچ�':XV�/x3��{lpG٦<@��_@��ϑ @�h8��ގ�\c�19���C��p8q�M��U�Wo�Rޞ�&g2ic�g Lt�����L�S	 P[��|wU[C� @� �L`��wّ�m���|����1�փ�����O�VG�*���m֦* @������ @����+LK���2�́%���_Xr?�;}e|������|�� @��h�wW�V�> @�����.-Бa���-����-iw`���i�3K�ez'����Ώ� @�@
xk��) @��"Pvo�y���y_��9�2;�7��0X>ܷ9�������om��F� @��f�:™��\^ښs�n��K�F�eq��c����Ň���[f��:Z9ջi�� @ �y�} @� �D�����-���|��Y��;�x�,�e���	S��jd�gu @���fN�B @��-P.�BsGx�n�.L�ؾd�;������NO����f�=� @��୍�V @�83�f�����~fn�ϫ����g�pW��Qz���p�E7W�+��xG{��W5 @�U�Z�*&@� @�5bj��%O��V�^t��ž�|#�w��}�xs8q󍥫��ѡ�
��/��'���ޞ���ȩڣ�y�B�_��ҳW��?Υz�8/U�i�R,� @���X���)�A @�
&P.���Q�b�M����_�jh��w�gf¥�'tNL6����a��K�
�Ν	��p4��3����Ǔa��Q)6>j @�u��&	 @�4�@�\h��A�R���e�vLL,9�>5v�[K��Sq5��0�b�ۥ-n���8�ū�S�w�%��H����'@��େ�6	 @�4�@��L�V�<}�E�LO�:����8��X\
W����C��^rn��q?��[H�P�)���EU� @��xj�t� @�@ctϖ	��V��a.w��x�e]##a���H��bI)!���ۑ�:wz�أ��)�!,��65��n[�ӽ�L�����= @������6 @��&(��7C+,G^���k��y_��ٔ��V�
��QR��#1������u
����h�|$��H�'�����+����u=�ԓ��:�p��R9F��X`黥wT� @�h����M#M����醥����L]\:�ǚ��,����)���u
�=s,����v��J��ywS��!����V>/��3*��gT�j @��Z	d�N�V=� @������*��,>'�2x.E��9uG��c`����(�1���xS�ޛ���<�;ҪӶ�5��vo����݋v�
�����p����7�h(�:�����t� @��5
N�	��S��?W���(���T��������_������Aܾ�rw[�l�8���b�����5�bX��w�E7��{�9i'����)MC�m}5,<��=�� @�C@��1�I/	 @�4����h�N������o�<mf6̵�������AJ�M}!��hj����q���8���ꐂ�)��Sf��*?�a�'�������7ǡ @�
!P�w
1v�$@� @�J�eS4��g�I[j5�Mq%쩲=ꘙ	=##�kr���ZgoG�?z �ǜ�gb uf˦0�sG��Êޔ�ns�K�K������r^��Z�B{ @��:x�	�i @���47+U~�*7�
Jn�+a{�u����
Ǐ��ᓡk�Lڇe��l�F��,�|�
a��+�|ڈ��KwL_�aٷ�"�=UE��- �[ma� @�hA��m�?δ���%�)���'~v}끰�'B[Lϰ��5r:�x��eb���?�@�����t~=�Ii 
�̥���-{�tGW螛�xej @��. �[ub
 @�h=���:y:���甩8�9k���'��g���C��n�f��#a��|;|�K7^Y^kH��H�Y!���~��#<���p��'��,� @��(�uz���] @��I`��P��L.]��W}�3���(�l��+�72���r#O�\ @���5�� @��V�6Qfô��%='N��#ǖ��N���-7eV]n+��6�m���ݹ�� @�?��[ @�d(�}�L�w�̒ts}qc�*���~y?o�j�Q�]�g�{�r4@]!@��	�q� @��
	�;Y��S��
�N�|���n}�Á�^�Uu���;��i��fkG6������^ @�ZD�-�+H�Z����.%��4
O���a���J�����_qGx歯_�S�9UX�� �q�͍�� @��x[h�
� @��^�;�{���7�9\�
����� �O/�Ƣ���ޞ��?�;}�m!F�K?����1й�o
Ͼ��0_��MsJV�&���;��.m&!@��( �ی�jL @�J���ΰk��p��/	o}�;�%�T7x�g�D���CS�!��-y,y�~��w��?	�^|k8ӳ���m��_��p셷,��%�Ǐv�x�V�Nv���A @��F��;�F��g @�M.�ѱt#��}�+_n�񦪍|�h�ojqli��b'&v��������Ի���}��߈m>���ͷ�G��0��_�������ÛSp���ƕ�
 �K����r�E�"@� @ ������n{Q8uj$<���Y4���]1��qf.̵�h{l2��}K�_|g.��8~����3��0���w�X��������
7���O
aK��wm��۰�S�wr�*�j�E�����UǞ�J�*%@��/ ��~;�$@� �P��iw���p��0;S'dXRp����-{ϭ5x+,��ma�����S�s��X��㻷�0W�V)mA�ݮ�i�%���૗�v���LJ3�UU @��Fx7*� @�D`�oJ�p�W�����Gs��C���gή8��Z{�#��3�=4t�񴪵;֟�;��mis����n!a]�_(1:<�.�N�뙋7���p&�Nש�;8]�����l
�?9j��m�����g���3[:�Ə ] @�5�!�� @��S`�o�W�p��N)?�w���!����%��MA��e&cӥZ%m����8/���H��V)���Gz7��_���3�}!����B��]`�;�D @�����M֖7�s��2��s|��������@�S!��ť3~��tw����]|z����’��k^[�5�ܼ;|����7g @�U���j�*&@� �/��V�vuu�������Ŵ?�yɹ iS��]18��Ŕ�)EBJOp���)N��
ie�t6�����B_��z>�δ�C1��XO
�������u�K�M�ѭ�w^6M��x�ի�X�����J� @��:+����^��]<�\�oM����iG��傻�6/]���=�ƀk���B ���…Gf��e,t�@m[<�Wݶ�m
>�ܺm)^��ո�X�צ�R+sx�`x��s�Ơr����n�j�ײ|�›b�{2\{��Z6�- @`�@u޽-k�] @�VH�g��w�o�i�7�h{
H�R��F5W9k�_7Zk/W�h\m�b)�:6m�v��v�@k����i���[‰]=���t���3�=�bݶ��x6^��i��gb�7�_����9�_���p�SѲ'T��M�L��R.���^v[xz��jآ� @�����뿼u�	 @�(�y���W\�Ʒ�W��7,�ܠ�j)R��
�v�N��#e6[�:`-7��1���_z�
ݴj��!l�/����ѯn��w~c�du?��5,q�s��ʗ�Û�����C�hX����a�t� @�@����í��xӪ�oqؽ{O���?&'cz�J%���L����K����l�2��n_a5nʳ�.(_�>��=��_<󣅷mp��陙pb�D<����Ħ511hz��+vS�˜����!<��ū�
�6����εu����e�͏|.l�yy @��V���[k @������Cww���^zY���W�.y`�wr�=#��ʩl��/��7Lm�
==�S6t��� {��Ĭ}�T
c�c1�nG������-]���xI���GJ�p(�U��_�e��'|����ɮ�z4�M ���-=�O� ��]����ƶm���wõ�^W������{�\�;8=��>V��Sq3�t�r9�r��7�5��˖�1�C|���阖7��-S��pّ�y밂��3һ)|��;B\]<����o
�5A� @`%����_�LI����-�/�+Ϯ-s�j�;;W�`-�Q�o����O���%�i�A��׷�#[�7���
���9U���}�7�>\�
���m�xލ��	 @�@���: @�@>���W��w�,��?z{��JR4T;��y��q}g� �pJ�P�U�*?a�'����+�2=���-�M��٘��\y������Vײ7�}x.z @�6��q�
 @���Ǐ�I[��W\qe��~1�ܹs�#�߭,EC���}3��SGJw8(OO�~,㣿�����򕦀���M�p���p�k�ݲ�/y`�|:�%�U�N�Q��+^�+LR�4��o�ϰ� @��^��U�a��1/�/����fM�d��o��ؾ�}?5V����)���V^Ży�����Ƨ&���T��O��<\���9	��яw���/��>Z%@�-& ��bn� @���y^���;������/}�OV��J��H��:|���5W&�h��h%���-<������a����	iõR�+J�ӱ��:5\����:��) @�@Ux�ʫr @��	�w����
�^K�򲗽"��m���ݥ^r��o�V�v�͆�O<��K��.�[�;g��_���?m��n�6�(л�/�qߺ�u�ʫ��_���e��Uo�tgb��/��� @��	��n&�fTD� @��JCC'�g>sOũ�u]}����
۶m/*y]I����;w�ѧ�7Ͻ�����85���B���v�x�-)7�o� ��~�-�_{:�b��_O�+�����K�T��_@d��F �:��3�FJ� �s�Gy8�s�'™3g���]�v���{������d��������N.;y���ubd���M�?��5*�ﷇ�k̥�ým�W>P�V��l4�Qj�J�S<g��#<����]� @�@x���J @����w��&&�����
�|�Ë_|Gɦ;;c>�UJ��.���#O,�>��pm6[K�>~~?���é�szQ�.l?�oB��Qz���}��};.�C7�4��o�N�� @�4��3�<>����;��!�t�|�����BW�ҟ�W���v+x��:�/t��+=Ɣn`,n�V��C�����cNݔ��T�����;��Ϳ�s�˜Tꉵ86Q;���Ц]a��s�Os> P����B9� @�@-���‡>�?b���+�^(է뮻!�ر3|�c�����ǟʯVj��Z�=s����c�ˤ�8y:�����U�>��-����p�p�w�Íτ�;3�on߾,�{oiK��U�S�
�MV|j�O�okG���G�ֺi� @����m�i6H @��F���
���z�]�/|њ��g��B^ޏ�����JV�Ɲ���F'_w���޴�wj6���~lyfW����
��u��R)�nr�q9.�����5ht)}�� @���cb���/§?��07W&�A�����w�7�vۋBg��A�Z��M��9>҆keKZū�,��ջŎ��n*�tM�d, ��1�� @�TCࡇ���7_koo�y�k�^�!��]��~o�ύ�+߭S!��Jy���(�e�g �=�= и��;wzN� �b��?7_�ݸ���s��w����+�jH���Q.9�?l�+�t����2�9f��x��`�8CS]ś�	 @���x3U @��j
�M���Gx��������s���Uz�z�hH�h��o<��*����䄧ջ��˗�N��3�yݝ�\�'@��#�z"���� @�@��ڵ+��
oW]uU��)�h
�$@���b�Չ����L)v��FF������{�����Zr̝|��/
߭������ï�xA�gW�WU����y�ȑ��X��]vY����m_u������?�x��{�����$P�긪��$�����˿����Ԃj	 �8����=���-kJŻe�ָ��+zGS3����qlZ�����/
ү4�7]�u��=F��&7�xc��+
_��ȩ�N!P5)�F�b��@Z�+�[
Yu Ш���a���V段����w��鹫���_U���đ��x�'��v�U�D�"�>���&
�<��]`z� в)-�B�K:;;
A�t]i����������6���.���	�̉��򶋶W|�	 @�2�M*srV��h��� @ C9w3�TM%����.�ӧ����lٱ������033S8'�iضm{�˻3���e�@M�������wW{ϥ;k�/� @��|6i���X����� @����b��͛�fN�7�<y��Bp7U��)��R6�5�oŝsbf#3s�[Cz��Wm�ͬ} @�����|�
 @��
�M��ϩ�g�N�ܪ�Ə?�&�w��t���Bˎ싲)��n��G�_D^T^@E�EE�
DeED�Z�@�B[�N��t:K��y��
777�d&3�$��I�=��s��$�s�}�s���ѽ��]]=���!�x<m{���O�^'[���v����u��@�r �[N�&ǂ � �@�@8�s�.��D��e�6��Yb:z��L�7�2&���D�7W/�!� 0��W�>#� � ���{�5ͷ�O�%L�d-n򻶵m����\�9�*� �7��5z�s;�Hu�7=c � P,�Œg� � ��@��k�&P�m���y�=k�W'Y�*	3�W'm����ZͲaX��#7�gm�{
����ݵ%�TD@��)�~�~d�F@@�f�4�ra����K}}���bM�����Jgg��b1�m�h��R�o.xWz���\˧���������G=@(M�����+@@
*�H��hܭV`���I����j��L�)t�6M��w�� ��ψ�|�u����j%'���>I��w����c��=�n�p�&x�I9ק" ��\�#���� � ��,���tuuʆ
Q=z���_�6�K��ɨ��n�ظc%�r\oÞ�&���W�R�ޗ�zֲ�gKt����3&�[c/���N�~���r���Cm~A��v@e@(�%�R�@@�F ��4�Dd��
V�7�
�Ƶ��1��;ICh�-��E�̺Vė��·�U�z�Kh{�޼�{��ץj��%���j�M>��m*��w^_%�:zs(�r������s�J@(&Y+��C@@@ �@������H�
ֈ^���:^�ы/Hw튡e?���^o/����z��yw��~��!�����E���U�����<&VS�v� �kȽ[q,0 �@�
�ؗ�G@��o�'d��Ͳm[� ���Uƾ��'�<����������_���b��u�Y\�g�]����٬l�Gc�g�H�Ʉ�*����ƀA@���oD
@@F�@��a{{�l٢x�%�um�K�-��{�8��=�w���c$��I�w&�C�j�$���w,��g�/~D��r�y�fP�+��,�A~�U��
Nj P����*ۂ�G@@�,�9x����Kjj�V+΀�w.������&O��<��nM�;~Fb;�-��9}9{���,_�o��?m2�{�TK��ϿPN
͓C��I@b�n����C�D����ߢ�/� w�[>尖�Դ��lB]@(�e�"r � �dȜ�!u�D".MM��u�v���u����
��V�3�۽��o�ϵ�OވN��_�K�Fb�u�b{�"gH�o�xNN>/�%���/�#]�>i���_����_/,Kz�� ���Mͥ*u@@������ � � ��5�k"��� o{�v��7wSz�=�W��ަ._�2%����D��=ƺ�̊�:���O>$��z�2��,S<�j��m���V�餏/�5Ivi�v/�9 �T��
x�9D@@���%E�
�4��Wj%�谟�>:������?ٚ}�7{C�� ��,0���f���2��N5i	[/�����#wd�X\�|u����u�!�|�ws�\8���r�" �e&@���^P@@�@<�#
]�M��;���l�i6kN�41��"mϧ,�Il�'�n�;��Yk������M��U���V�w�����Z٫�Vj�=ᘎԽ�����dMg$� sxVk&T��};K���a;� � �@��-�ג#A@@ ] �UF/8Y&����α$毕
�
��_M.�N?_|=�%���|�G�u���7Ƚ�n�Z'ו�l��ݹl���Ǝg���9&лǨ�6یv�X#}�n�?,�(�^�A�v��z�i������fHSa ��%@���^o�@@��B��'�~��J�o��+�)�-S%6ьܵ�O"�[�3��/�/� 2l�k��ٓ�&�l�9g�[K]�iln�nݜk���2��Zv��[�
��l���P[%cÅ����%Vt�ȋ���<3��?�n��&�;�r��������#� ��(��^F8�G@@���[��u8�5w;���Ʀ|\��w��g��;����fI��2�afc��ʤ8�L,�sb�����bsOT�۰ͺ��V�a�k�d�	�N�	��m2�Q��4��(�X�h�I��7-Ѹ�Gc��Y�ƵvEdi߈�e��er��:�A~~�B6I[ � 0B���n#� � ��@��n3ԏ7 ]�>i��g��한v���m/K�6{ ��)���13��/��M^�bI��d�V��`��Ỗ|~�R��_ ���@i�8Pn� � ��.�d�a�z�t���N<-c����݋<��;�N���,y�3�YeO�7��.p��&y���:�o�@(g���rl � ��-��O�@������2�ܲ�����׾��j�������"���,9�Fn_+��S�
3[rG#�&��d�I����;�^:�� �����aȉ� � �#H ����'�ߐD�R������*�#�	�_����O�`�km��S���C�nZ�ty<��<�G�8\6uDz7P&kuB����*��4��q � PH��Ԥ-@@F�@N�ރ�M8�n�����Z���[_���I�����5�����$������/�]f�_ om�y��3��Y3i�;fR�r*-�!�p�D9o�	�M�VN�DZ � �@a�ƑV@@(�@�Sk������f���H�C���J^m71jN��k�ϔ���2�*��i	?w�t`�������T-8O|]k=��&�d������vg�[��6v�|3Q�K���[�l0�FZ�5�F���x��ԱR�i�K@@`�x	�� � �U �#�wn�В�gF����n��.U��/����؅����_�Hd����	8����
�z����T�:]��̶��\7.�'5Y7�ªΈ,��!�n�.�:�
s[��)�\ۍý�a8�L����F���a�#�@@�r �[.�$ǁ � Pq:yYx���߱�p�>����_%=s~&�Yz�23��;���n��Z'6�S�I�� �����4�ܞ�:�8�������N�	��Ԡo$���9,n�%&��b��A�l���#5뇲T�}������:��L*wDK��TW5���m@(c�e��rh � ��+�o���_�D�	�t�>��6�7�N�o���.��_t��8�^���+��K�z��{Y��3W�|�3������v�wEd�����Ǻ_c��"1i�ƥ=���d[4&�xŒN����	܆~�2YBAi�
HsUP&XA�*hɮ&��Ժ��y�-�s@�ށʱ � �EБ��g�/�U�$dp^�P��8�:�	3������E飦f��v���� �ejD3���fz��\���@@�����J�P� � � н�w�n?�݄I�0�2�
��%�w�&_�N<ݵ&��Vpw�/$>��7f@@���[�/0�� � P^U�_ ��֫$|A��t�D�~Au����]��\)�
�Y��;�xm���@^�Q�[�g��Hl�z�[��^����i����~"��s�M@@���V�k�#� ��P�|	��ϳ��p�t�g������j+�5����H荋%����{=*d����ؔOJl�i\�	��k�o{�k��e	3�Z|����p���)�3 � �#\���> � �@�}��`��:�~I4���ZhR6Df�h=���$k;����X7_�������g�5Q\"�(��&@����fO��+@@� ����@@(]��	��ݳ�Wd�:��̺^�mF�DZ��pF�&fI��( � ��`���� � �C.h}X|�H�~��V�ݴ��H��gZK:��2�A@JR��%���)@�ތ���.�i��I
�
H{$&O�nO.�1�Qj�~���g�n��ݏ�����m�.+�{���掫���!��C˷؋��~���(k���z������6�efs��T����T�;濴T�Ls̔��oy��&���Þ�2-�M8If4_4��C��Lj,G@JS�oi�.�
@�6�|�f{���?�e��_��z���_כ�/��^c򍾮�h��S7��ݧ�ا.��i�v�1�,u��V�3vݮ�Hg����w�}��b�>��%�o���c�\�u�/(�0����aHѐ�O � �X����@�]�{�o�P5���AW�M+���� `�g�k۞m��5#s�%�z�Mֺ�����lu�޿��x\$aӔ��l�<�x�4��-L�M��&��Y-�@@��«@@@ 7�"AZR�MpwfK�2��ߝl�u'����Kɵͦj��RvjΥ���[�%���SP�� �F�@t�w79�}��NT�u-�{�'R( � �#F�1dd��"� � Py~�@�/�y`�R1��[!� �E�oQ��) � ��	$��<7�m{�sy�����8��sk"� ����g � �@ Q���V����\�uat��7>�Y%Q���r"� �����|]� � �)���S��Ok��3MCp���ﲛH�'�/�ƽ��y� � P�xK�5�� �T�@K��weg3�ޚ�$k�T5��R����>�y4�X�����s����	-��sU|̡"��u,D@(M�����+@���5��[�����a�I��e�V��"���Ab���<��Lʅ'=ץ,LĤ�ϋ��5e��$:�C�@@F���F�E7@�T��x$�{�%*�!�q�I��e��&k�@ :�˞Gᓸ�_����?��Z됪�>%�և<��$n��gz�c! � �@�
K�k�@Y����7ڰ�^�����m"��f��i��K@�<S�U 6�T���[�m/���L�~�d�M��Dw���7W�_mF뮑��$���w�L��^�k&=C��t@�������7$3'e(2k�YRSC����  �#X��~��: � �@�	��{�ϥ���<'I��~p������/�)ִ�D�~��z�*�Z�J.��dÆ�٪�n�cǎ�k��_�<y� [bs@(���Jr ���@WW�<���Ҷu�uD�U"s�����'�^*�#-�at��G�g�e5����h��xTc�u�QR]]]��J�$fId��굯d�5�;��n�j���+_ k{���ŭ�����5���ߺ��F���o�!7����g<ߣ���?+���6��Wʫ����|�;�P��¯�m���^��=i��`�S�>.�iӦ
ds�A� �[�/�C@��b��_t�,^�$y�[�MJx��o��ח%��L��d���ׯN>����o���eݔ�����Zz�,l���D�{Gm��E��)��)�u�`T�
�X��`��zg����=!]����{r��^,+�~/Z,���gr�׺w�s(�� �e"���/�w�䰊v(WSJy
Df~Wzf^#	���u�J�!OX9}!��|ٔa�zX���(���x�9uy]�F6�3*!���
����Ev� ��"��¿Ҙ޴�Z�N�o�>�񼂴	�Dv��t��$�w+�á/ � � E���@�F ������+�UL����	Һ}R��.�w-�
��/֑v�q��76����9I�'����S�ʺ�~9��Im�s�k������nTZ�}6�+u}9��?]�>+�pZ=]0�k��e��nE]�,o�Y�^���R�|��	;ۋ=��w�ˌ��|���G˻�͞���.��xLb>���=�e.��c�Z��n�{@@ M�o	@@��Bߺ��J��C�����'jLb}>jE�T��ǟ =�&	�پT|]kD�&�Y�$��]DB�Aԡ��m��'��f��"{��5*nHH/8p�H����B�MdI�T#�����^�i��w�ƴ�-X𾽍G_n�׍S�2�V�1�Ϯ�ݴ�-[mYp�>"s����Z�6{��3�B�7�#+@�t�����#� P�;��c�X�����|��{\���x�����=���/ 	�_Wo@@�� �[��1G� � �@�j�DZ�{�Q�7zV�5׊ԅ�g���5;���M�ջ$�h��Z����9�;eO��{e��Ǒ����9є����AG	w�d��@@��@?��I�� � � 0p��	|6xr5
���!S�^�e��ASg�4S={y>m�M�z˵�ն�a�\�@=@@@�N/#� � � � � 0��W��"� � � � �}�h�O@JZ`{c����q��9����;���afV뽜۲Z�nػ�@@@�xx�gϞ@@ �D�LT��֌�sآª�I��eUa���"� � P�x+�/��G@@`�7��{L�kݜ���&���rAV]5��m+j!� �@�
����F@@`������n�νp�f��� �T�ފ{�9`@@�G ���X_j}�'\��|܌�M��sڈJ � P�x+���@@b��1-"o�M��P-�����+����.��e�β~7� �T���r�#G@@@@F�ޑ���{@@@@�`R4T�ϡ#� 0j�l�9�����L��Ջ�����U�E���X� � ��)@��<_W�
@����DC.:����U�މ�,��Y� ��8��AX���6�L�R��h*S�oe��5 �#F �t��7�27�{=1����bY���GN�H@IDAT � 0�r��J� ����܎-@@`�D��ػ�����<��'�e�H�6�e��!� � �@p�c��" � � � �����|]9*@�A
�z�K�[��6G*[ ��Ì�ב��6���1�9z��s��ٖ� � Pq�h����F�E ��Y�w.�������&�Ap	To7�CH��R��iSM��e�|�@@ ]�o�	K@��y�B`�Sx�{@@H
������K���`Μ�䬳�l3l�,@���_|@�[��u�����2��Q�L��H�����X�d���(����B8$2�6seּ'��L����[������w���`=i5�`m�T�9x+�u�@2
�%���Z_�[B��M>� �@���I5��+���;�
+��Z��Y����#� �@V�YyX� Pi�u��ɻ�,�և̈�E�E<F�@���`&�[�ѫI��e�V� � � P�x����@��o{3e�OR�ΏD"[�E��@uG��Nͽ7��C�؅�ޕ��XV��[z� � � �[`P�C����^�}�%����Yo�_/��\�B@@@�!@����@����K�����O�VS7T��-�E6�T�˽3�uu"+��i��u����|j��cY��[ � � �� �;�_<�� 0H3Z7��^|�	�	�r(���R��%��T��R�hUXdKg�oV�B�[6m�I��eU6Ɓ � � �@.�T��u@�L .����к{�߽.�c�E�Ix����D&�.��y�� � � �B�o!i@`Dh��ІG$��y�E���3)[`�w$^=IbMJd��"�Q�n�@@������ߨ��8��O��( �@x�b= �@��;���W�u���VKb�k�u�$�:ix�.0j��Jb��
W���Ԝ�H
M�
 � �Q�oFV ���@l�7�;\��6��$|��@�D�+�qǚ���Æ � � �T��@��@`�
�k�I����7��R��gؾ(�c��>Bz&J$X����6��ቒ��9S�#�#J �Db�}���g&s<��F�"����aNQ	@*U�o���7 ��$��H�nWIh͟%����D��	���F�S��+��mϝ"�Qs���Gsތ� �@)�7��Oko�E�J��E�۪6��.���,-z�� �����}m� ����%2��W���?7)2�D�A�w���N�\i�k�_�K����� b�C�o�f�B�{�T�_����Q�"5U�b��
	��b �e/�b�
���~�
4zt�466���͛7K[��'�;
e���S�@����TF/&�� 0p�ؘ��UĝR�귞�$|!�~ѐwu����[�՜���Jl�s��c���4���$6�����*S=�#� P�����JWW�Nu~�s��SO)����E��
�������`����I�J絠' �E��|P����E���x�n���0�]kz��Vp��n�����h.ʾ|��tl;�>�Y*X�h@@�X���< ����r�$BM)��5��;TE��XG������׾0���lo6����W:G��I��e�^�% � � P�x����@ ��Ȅ�$7��=�?�|^�q	.�9�����-c � � �n�n�#�T�@t̑5[�QH�zʐ�V�)��Ei�V�Q���*�@@@���d��_~@�S��X�!�o}P4�;dŤe��j��}��ߐ���乞� � ���3g/inJM�5��̚5k0��-  x�#@@�C �|�7>&�ƽ<�fQ��k�ߵ2cc�ֿIl݃���uX���@x�6����.������[S�HM��'5�,���*^ଳάx@�����Ao@JD ^��t�v���;ſi�ɽ{S�MW�v�t6 n�.@�R��n&�l�+�n�~FU'�h&��@H o�	K@��	C#ѵF�^>[|�S�e/��V	���D${E�"� � �T�ފ|�9h@��	D�I������s�B`�R���\��*��&0�v���]�__c��cY�W`	E��`rT���{�`F�RrP�>7�0���� �*04םV(&�� �@V�DL�/Z�m�V�Z\�;���$���Z]��j�6��$EE�Y/�^��ՙQ�E���"[��*�ɚ��k��e��iﲪZ�9mD%@�T����s� ��+�nw�x�U��k�:�$2����� � ��x����5k׈c�iӦ��G�X�C@ ?��yQ@��4���K���umZt��:WJ�^?�	�\�,��H�L6�a{o?jC"z��'���g֛)��{kx� �C ��OȂW�"+SW�0�]��tX����E�: �P���T��I�o_6��7�t
����=�6��!�.}�E[�S[+���w�-�xݯ�6sw�6k�e�^�s@@(kf*)뗗�C(�@""�E�I��#ܵ�G'^�y� 	���^�= � � �@
��CFZ������J��W�/�����K،��a�1d��a@@@�� EC�6�@`D	�%��A	.���<?�=��C�[�ؤ�Ht�K|��úv� � � P<�ųg� �#^ !~3qZ`�}X��w�.��$!���n1�M����H5;�O��D�L�wѠ�H�je��!@�"@�7�@�$�k_(��N��LU��<`&vӛ,��Ě���]�_]���c�\�Q�_�=���[�ag�@@�tr𦛰@�tҳ����&�Y���j
��ж�2�3jnh�i@@(�#x�gϞ@�Q ���Zs�$|A����&8[;��'�w���^�&7�
�Uw��;�j�Pǚ���0)>(���B5[�vB�]"-����
�%�c5i��Z-
%#���}�M��ؒ�Krzq"1�xoj�0���� ��*@��R_y��0�@ۋ��Q	��jRT�D�,��m���LvZz�6�� m�ӈ�l��%�i_�D��|6-��U]�M���Y�֛Q�z3Ų*ZG�1�ۚLj,Z߻����٩9�K�Voi�=]cʒ�:,A@�8�Ο �@��:����q���|\�>��'�=$]�E��d����]G̗�9?/��n�^ZB@@�S���rT ���֗ė0����@�|�(nnCs�3>�h�:�i	.�������=��z��� =�d�b(h�%��
��]`�*0��}��zX��D:Hb��kuB�����@f����m��]_e�~�h
���>��
ԙ���vɕ�A�^M_{ږ��U-��ޤ6�ӓ��vȴ]m�մ�ӗr"٘�A>mgrP+
 � ������ 0r���J�/�nM��KYY�'&�ot�%6���	��wi�Z�ډ���tϹ�H���Rl,"I��M2���h̎ʔbo��'c"}>jEA�d:�ɮ�z�7��Nh�}�٤a�Б��]��^�E$�%��d&�������ڠդ8�Vv3�)��b���Y���M�I�z�����nK��\2s���nN &L�����6�@@����#!� P�������pӓΧC�8Ѹ�t�������3ҽ��e������!L-J{ � ���#xK�7 �n|�\��>�+���"�%�	��Z�y�^>[��:�#�q�Dw�tPm����[zG�rGZ�Ə7�	)I�{�z���v7j�[/��ߵ�n���t�5�u]����$��i-�0{�$��Ǧ��l���Xu��L��	�\��>��=��X��>�+]Ϫ_�(
+�[K�]m?[���J��
{��VUrqPC
 � �M�o6�!��l�DTB�<��\��D&�鹾�5ҳ��1	�{h@��v�Dw����)�����.;���KFJ�K��j�����t�\y���J�~yg�A��,I��:/z�q6Ӛ|��|�ֺ��o&��z����w��U���c �$�&)x� Pn���2�tM��%h����\�&w�p_@����T?s�I�J^{Դ��U�@  ����c�K�����U�j�Vx\�TϞ��;�2&�}�?�D�#�;�ߨ�F9��,S�@@@�|��kˑ!��-��w�ޓ��P���Ѭ�
�2P']��-�O.��U95���̾1���P���ZN8��<K�
��{��<X��8.��F��=9��q>U
�ǘ����ub1ʰ`=,��@�#���F�KEG@�����#��$�jr�FR/��w��V�� ={�.	�k8a�vϽM��9���=���]w��zR�$H��Ô��<I�a
>�"<C�|��X>�%G� `������e��Ż�j͝ҳ�yY�ze|���	-�>2�{��"f��J.�&�[��kY&Y�X�1�"͵��O����D�Rp�������ɟ�X6l��Zq{:��>v�Qk
�\x�r�O&�Z��ʝ^+�%u�u��G�-�'nӦ�&����l?�җ��"��� �;�_C�@�%P���mw-�4��	�>R�g�4k"3.���?�T
+=[��?I���KU�Y�Z�Y	*�Hx�����.�����)6C`0�'O���3yc��Ŭ���D�w�
�ي�v��ڪޟmA�^���,����x��6m�\w��^�
���/*h{�;�#���( �@x�b= ����͗����f,�Z�3��:U^��r�V"�]!��5�0�Ef~7my%.������C�@f��������Y��C�݊z�K�`5��~��t�g<A@(���
-J{ ��0��&P;���^#U�~3�M�Ml�Y�K�[��II��<���e�֘	`.��{��Q.�U��P�>˪p-� � ���#�E�� ���%��'�nͥ�g��J`˳��n����=?�y����,�O@@@� �˟ �@Y�V�!��W},U�*���n'���ϒD�L��W�c�D�L�)� � � �d ���� �#E@'I�>X����^�}3�vKA�˩��76��dU
�R@@@�E�o.J�A(Y�@ۋf�������R������{�M8�:���$6�C=C@@(_�`�G� P�����MH�L�U���\!���J�.�#bF�u��=Rf?�QsE�F��Fn��M�}cgo���	D�c"K7��.cEB�\vgTd٦��*��z��m��׾��y?y�Hc�wɛ��5���>���.��%�&Kn�1�﫥/E���"�#�m9�ys����]�@@J[�oi�>�@ �@`��R��G�K������ER���ҵ�7D�
C���fu�}���~Fz�	3]�t����iq.�]�o���R
�&�w��8n�i�g��HJ��Zױ�h?��c�J?m���@@�_�o���! Pv�
�H��_
��]7��;R��[�=�|�^]�����^�4Vg$��l]�ٗ�`".Qs��c�h
���~��z��PuP�L=-�U~��R���ϩ���,�|f�ؾz�f�mY�֘Q�}u7�%�
�}��;f�� � � �@e	୬כ�EF����B��&!����Z-�o_&�S/�x����5�2{|�ibM�Eܤ2��Kg�>�cF�m���b�I���ޤ|���W�Z�	�usmScӹ�2�����w�6c1 � ���@�1"�{� ���S����0�][��fr�^#����E�e�Z�@@@(�#x���^@�8pz��u`�Ԅ�X��ܪ�Q�I�N_�D�r�x�� � � 0x��&@
#0�!*�8h�̜�]��J`ۛR��E�p�D[>$�3��S@@@(��"��K@����	9a�v9bF��J4v�H��;%��_��1�51AZ�W�� � � �C!@�w(Ti@`@�5q9j��V�t��N�~���.��@�fS_��S@@@�A	�#�B`�9t�N9`Z���ͳ;��	l_*�wn����w�D�	5
�9�C@@@ '�91Q	@��>3�u���sr�0�K��G�|Q��Jժ�Jh��%>j�DG�/�ƽM�����b� � � ��)@��<_W�
(Y�c��c��&
���c!:擸�^�n:&9nR8��EI��P��i@@@K�� ��)�9�e�u{jF^M��o�*�#� � � 0(���cc@�|�z�Q�m
�و���M�����}t@@@��H�Pz�	=B�Z��E����Ƙ�9�˚Xm�H�s�_%����@�5�)�.�c�@@@�/@����=@*R�Ռ�}�:�6aTL٥C��)5����7^;U"c������ז�F@@>��g͞@2�m�����r�	�g&bU�P�4�(��S$�0�4;H�@@@�R�oY�� 02��~kD�o��13��q�;J~Do�v�D&}������� � � ��� �;�_B(?����C���Ӌk���S;K� �:�L��D�Sr}�C � � ��#@��r^k�q[;��7ɳKj��Cڤ��4�6D����	5�8S:� � � P^��:�@�^_��+���b��/$=;|Vzv���n1_�� � � � ���� �@)�w���GGKd��E�f<�,�3����c��v� � � ���)�TX� P����x��Z�c�%L��a(q3�Z��K�y) � � ���#xK�ՠ/ �9	Ě�'�;_"	�Чl��ϔ�].'���+C%@�0k֬�x<^��ie8��OWX� �H��bc#@�b����].���k������2#w/�W
I�4:8���N��+R9����c�I.˥N�2@���?���~��~�zihh�SN9ź
E�r����/O=�Tr��@@������|𙔯�(==��u�V	�BRWW�s����~�t�A9�AE@ ��L2,G(y�x�+^rm��5��v5m��+x��eݺu�{��?=��r�(�HȲe�R�nٲ%�y.uR6��DG�=��#־����ZF�-;�����e"��CY�W��̞=[��g�"�Ǜ7o����/)������NK.��;���˟��'뤍�+t�e_�g���?� ��Th�C _�Lߋ��1cF��E"�뮻�F��w������/���<����+��~.�{YK0�v�A��o?9�#d�������9
 P��P�
@��	�fK�ԯH�;7��@��WO6) .5�ݡOQ�.i3:z���>�2�;�
p�
6���kjҤI�я~T=�����#�'Q�A�E������m�:��머���+2�Ѩh��e8�U��� ��{q���r�����y�扎�w������.�������s��z�w�۽��+'�|��q����Gj�?~��nKK�L�>}��F�bw
�b�8P@�R�5 :�Z!J"PgM�&枂�`V�^-7�t��r�-�i�m()��>8�?o����2
�^J����ѱzR$�=���O8�in.��ù���fe,�ꫯ�Es-z�P��z�[�V�஻���{�?�aڈdw�R~����D~�$o���K���
��˟ �@YD'�.���$�€�G/��6���	n�
p<���%���ݫx�����#::]O`�EG��eˇv��(��'-H�i��k���:jOG��U:bL��U�}
�1�.�(�)�r��GG���Z4ȩ��E��N�2E���e�ʕ��]gy��@�G>��b#�C*@�wHyi@`8zv:O�o.dӀv���h�J�H���E�\{�￿��k^=�pE�=����8������� 0�9�+7��8^|�Ŭ^��Y��΢��˘u�9��Y<��r;�(g��\�:�,k�l�Yʣw��
@;KSS�|�_LII��DS3h�p=�eMGs�'Jmm���{@`H�)/�#���I�гӗ$��;y���N5i>6���;����oikkK�lsڴi�˱������'ʨQ��Պ�XG2x�i}P����ZV�X�\�?�{챌�q���a���w�qG�6y�d� X�q�
4�����xz��	d�ܹ�D0Zu����q���VUUU���Ӽ�:��^�������رc��t�N��l��!�i4��,,���7�U�K�`o��m۶�O���O=��v�Z��?�o�n�m�3F��cillL��~������K�ʒ%K�<��C��R?/^l����i+���)-���2�!��᧟~Z�<�Ȍ����ϥh�=�WOe��T?��f�?�W�w9��R���^��'�C����w�Kn�ǧ�k�7ע����R�k0y�̙�n>_�Lhz��ʦM���%mG?�����	8;߹3P�}�����x}���8�8@`�xLdž ��(�����-�
��ܽ���{�/���Z�m5@���8e�n�����<immM����_�r���6��\��#��FJ^{���z�DG��/�7ր�'?�I��?h/�נ�o�[+�l�H�+j��K_���ᄁ���h#��7N4ߞW�6����X�Q�v}
f�}��2k�,{�e.�3����w�M����T�*��Wz�N��^x�d������s����΀�s�\4��y}����ٮ>�}^w�u�P��n���~��'�6��k>S����Zt�:���� P*���?�~g��.��K� ��7�l�dt���ϼ��Z�G?�QJPX�+��v�s����̞=۽(�\S��I�^���,���G���SFk]�����>��������9�
���V�M��.���/ESJy
�;����>�5��c�����>Ş_�F@��z&~\���6F�+��i%utfd��.��C�Q�gё�:Ӹ��������o�Y���H�o�ۢ�����چ���\��f�:�#u���o������]�FG0^u�U־�m�|�&[ә׽���տwgɔ��Y'�c��_�Z������]�V�zBCG�g
g�G��:���k����vh���+�7���L��|�A��w��1��
�}��{�+Wh�;�p�\������h�Y�F�:�kjw�+����5��,z�3�� z���d{Ok �k_��\t�EɛTs)Xu�x���c�ඞ$�T�_'�ӓl�������K/�4�$Z���./��q���� @��^e��4�`}��V�3*M��b��R'aq���Yt�m
�Zt�]w��Y]G�ז�4 ���ݸ�Ԁ�e��E�{�'�!��udT}H6ƒ/�O��+�iZtԻ?ݥ��E4u��rf
0��g?sW�s���������k��o��>ם���ݗJ�i �]4��ӟ�Խ����i����?w�^�'W�Ze?;cƌ�s�:���d
���w��Y���=�s�J�]�{�����v��?����ޚu{
�f��M����/D��R�I��yF.�e�S���L}b9�*������s� �@�D�%�ֿ��;�;�GZN6	Ԙ�i���(�h:́g
���	p�V�����^n�����S>�O��X��w��J��[�j�뭷��K��KVG���#.�<�L+/����g������H�1}�-�X?S:ȓ��K|����Γ�W����jZg�5=�s�l�z衔��Ǐ�F�j^h-:�]S7�L�v� ���jʓ��;�����@�/�A��A}��DK�""��Aaw@Z��j��'��_��W���'��c|�gd0��dc<@`���_�j�us���ӟ�t�Dc��Վ?�xϓ6�.h�Us�;��ہ\�Iw�WOL�W���5w�q�n׫n�YS��W�����s.��`�O[S�(c͡�|ok;��B?c��]u�~Vx���Ϧ�;Nt����{D��`=�)��J��g���B���I1�ęs�v=ݶ���v߹G�^���E@JU��Ȅ�Hxyj�Wgw�&��;޹��9��5�]�s��:�Qۏ���]ܣ��Ǘ]���g��>���2�Sh
�j���J'�q�T�s�=��/���jk��?�j��K.�&^���t�u�?t��S{����tT�]t���$t���s_^Htx��4X����V=��,�I��u���ON	��Ig���󽡣��g��}|���s�N��Aei�,���7�k��q��9��y�5�����rg~���_x�p<V��Ѽ�z�P�%�o�NH�C�Ü�K��P?�F�'7�{��;���.�~H' t�'H������	�4���	T�\���'g��o?9�#DO:�S>��ȉ'���Dk>^���,����j�[�t=V�l����d�~�k
���w��k���px�c��s7��R�<N��P���s� �@%�F"��w�?���p#c��Wy�caf�d��'��\�o�Yg��o�r��$
�zxu"$�h��������3���u��3H��˧#�t�';�k��3i_p�r�W؋<�5`��p;������cPM����c۹
��G@�w�yg���:�Νf`0#L���j�#�{�1kr�ɓ''���\��
�x�| %�k7����!�#����|��0�2o޼��;S�煾'���$Q�50�?4�Q� 0D�7ixu,tx�J�g��~�����U)�����@�w��ش)��}Γ1^�fZ�'���F��
����>{N:餜�K����9�S�tD��3����������:��������R]�wڥ���I)|��M� P1x+��@@�J�[#t�Vߑv�	_H�c?����*��^;G�i�UGy�|3���6[�l�&����.q}���U�$������2s�L�RYU���Gdj=�I������]����e,��48�����G4 �-�NϠ��\����z�BG���婏�'B���lF��{��ߓz�$���=�ﱿ���\�.5
��t�D�4��@14}��4}���Д{챇���]tR6
��Z4吾��ߍzR���OO6�NϠ9��?)z��뿬����I̜�i�65���q����U%e�~Vy=��#�����gq����z�O��=!�>9����v.�K��8�~R�J �[)�4ljT����
������X�A"���e<A �,�}i��d����VYa�,U�b�#X���%�z���2J�Vg+�6Ӷ�1��\��)�#�#�^��G/��G�G�k�A�:�)g�}��Ht��������:��PE�(����]2��q׳���C����\�nO�7W-�
���Ե�ھ�����q���g�'b4M�3��y�'���t���9蠃Do`ՓV�͇��L�Gy�Je���:�>�ܓ��_+��u�<�zu���<)����~.ϋ�y�K��@�୔W��D*U�qc�s%�b�@t�a)�y����R���+�� �m�68+�!��e���4p�Aځ�m푓��lh�~b#� s��uy��ٶc�������i����u�8���9Z�~饗Z�ePhk����_�җ��%�o
y���6���DH�=a�#SxF�m!�vi0QG�k�	���\͙�>��g��ߞ�j�U'>ԓG��q�hz���5J4ݒ�rI˯���u5���E�Y��uO�n#�s=Vg������w�x����b~g;V�!P�x+�U�@�
��><%�5K�a�
S(���%y�.)�w/�Ѩ�m3-w�)���I�j�L�hEG,y�S{�m�����X�i:Q����ʱgo��Z�q��r�õ�9�5?a��k�:\�E'̡T���пY�f����N�`���@�馛�ɚ�}�Y�pg�Jg]��P'����J��l�~�#�u\�I���u���.v�z�'�����'�4��kq�"�u�!PH�±���ѭ���s���I�~z�IG�j�#g[���^
�:O�466��k?�,���+����N���m.��TG?'4}��D�{�{[�z�)D)��q!�N���rz59@O�X�I���4
�Q��z>Ϻ,^�L�.ۣ~��7���ӟ���$*)��S6�QA�]v��,�΢#��^�h}�?v��u���5c���/G��rQ
��L�^#�}�q�
��G����5U���u�B�gp���=��7�;�˥��i=���i;O|�(ڧ�zJ>��;��c�O��WN�|�(�lmmM�MӮ�IF��~o��OJ�2�Q��2�ѻ���������v=MϠ��|��r����55������GiM�>���v�y�'T�'��}��;�[��b}Əm(7��?��M��A(X��ǩ)(�/�5��9Q��G�n�rg��^6�ud�;�~0-�����3h��a�=SG��%��Il���^/kuo�\��u�/yu��yex�]x�R&BS!�z��ӓ��V��~�ߐ�|�;iM;!i+�X��U��G�[�}��=	Q�[#����z�-�9���R����֫h0����Z��2
�:Ob�	}����ɧ����v�����rs��q��Aa��Y�\ѹ]��u�9gQMW�U�x�dZ{�n��f?�z�g�lV��q}a=�$��Jz�9V@��bMfb��W%a�����,Q�C�˸��/��5;��b��2ӌ���G�s����Ǡ�n�E���_�r/N{������NYnr�>�h�N���c�e�:7��u��3���^�Ν+�}:R�k�It�gZ#~�m�4-�
t�#��G�
f&{�M��v�^�"9��d�ԩ)�4����:sL��~S6�㉞���;䬳�J���?���<��~5g�y�=�	5���r���_t�F�hP��k�M	~��G`�t�59�.�� �@��0�{ュ�v���]tt�@R@�&L���L��ǡ'T��wѫf�{ҝ�넩{�<����	���o���8�X�j��}��i�ʔ�XS?8����R�gY)|;��c*]�o��p� �@�D�ci���p��.���d<t��Ѧ_|���V/}�uziw9���jk��3��3�ȭ��*�쳏�SG�j�FG�W4�;}���I5��/�K�կ~%�q������C�~N<�D��[��֯_/^x���W�Hh0KG_�,��Q��/�t�Ry(p�M�
��A����Dgrנ�~�h?}�є�g��������ڇ���Q{:j���z:�8ߢ�`r^n�'mt�8�u=�p�´�6'�|2��|��?dz�C�3�'1����~�h:��O�(_��T�n����P����߫7�|����@�I���R��:���эtBF
pe�3g�u�~6�E�uJ�L��]���9Ovi]�ɔjF��o�l���h�5p��3::�T>��~r�@������D��C�bx��@��;���,�Q�΢�muto�
��a���?Do΢#��������CTG0^u�Ui?�4���v�i�#yܣ+��{͝���ϧL����;��v]���j�v.�qeh�QO(d*�JϠ	����˒5ȫ%�	��w�ݚ�)S�r]��f4���!
�j�$S���a��iu��PH�?�|����S.�~���Eo��~^��VJI@����=Ѣ�
���~�'L���Whz�-���|��Lgy��7Eo����+5U��^S�|�+_�K.�$��gut��'c�=��L�ES?��΢���+�:�(+�[��cg�x�f � ��p	|���}
���2Б8�vJ�N��_�Au��Һ��#����jkDQ�}4���^�{m���Q�����??��R�:e(��ř3gzY��3؍�k_�RB�ϝ�^��5��o}�Ym�����~�����g+:��.�V%�:
���
:"9��#
����r�%,�������}���TUU�^��U4��'uS���;��߱:)�~�GєJz2(�p�~hJ�+��2%��s�>��^{��^���Ǟb!,��
~�9t@�!�/|���#�֭[��8�(�5��x�=�K7u��^>��d�}�]�RO=n٤?Z�8�Y�xq�G�?�n��Fk�'͗��5要"��;q�Ĝ�Ҋ���N̢#��Rg�( m��sΑ����ڧr�	�9��m�J�`�i~H
P��هz(��o�����Г�&z���^߿Ը뮻D�k˖-K���`�	'�`�7��l��k0�믷�f���K�u�)�L\G��L�`9���~�E��wz�O�ܲ��A�C�=���"�Y�m�QO��T=�:�EGEk?5��z8�ܱ���m�<�H�IO�f+�9v�e��=�ܓL?a��ihhHIS���l�:*M�'V'*�z�[S/!9����;�i?��GZ��oM?�AL
>j~�J-z���ի�`�`&���OS98g����]w]��j���s�ƍV^_
D;'q�* 0D�пO���K�5�;Գ�;E߿�SORi~\�C�K$��]�1jZ����l�����\��Y;ؠ�iqz�t�R+=�{��ޅ.�=��[o���u�V+E�<��{�1���
�W��U�����_O���R�'y��� �����؟��~�s�����?ui�a6f?Y�Z�gC-�ޡ�}@�(��crM���2X�A݁ζ��|��H�CG�y����	�t`.E��j3�m���P
h`UoC�ɥ��ռ�CY4/���FA�F��d��ߥC�Y�ߗ�~g��5\�5�'�}�\?�r)�<Υ��A�\��+�q!� �@E訚��;�X_z�%+���G���ڷ�z��hCg�/��.�@(������:񙦃Y�|yZWN>��e,@*A�o%��# �����ٳ�	�t$�]4�{�Z.i�=�땓oΜ9���{ۛq� �@�
�X�Bn����;wn���f�	+@�(|��=P�� ����N��2�Kww��b��������7�9 �#N�`��~#�IDAT���M�6�0�0T�#x+�e�@@��4��^*��͓_���քS��O��z�r�Gd��r@J^���Κp�㏗�;��K@�� �;���� ����l]��)tm�S�i�&�����V*�q��
c�� ���9s�\u�UVnyM?�'7) ��x�K@@�L@��z�}�����8@�J����Y�fU��s� �@Vr�f�a% � � � � P�xK���g � � � � �@V�YyX� � � � �����}m� � � � � �U�oVV"� � � � ��+@��t_z� � � � �d ����� � � � � �@�
�-�׆�!� � � � �Y�f�a% � � � � P����=C@@�#��$���}��%�Z���{E@��z��@@*T@���p�
���L��XL������#� �E EC�_:� � ��"��u�]g���TWW;�@(�ޢ�s@@(%��A�lEG���&�:@N�é;@@@��4��,���+����z˹���K�7��' � P$�E�g� � � Pz�ѻ]]]r�=�X�ݫ��Z^~��۹zS�@f����@@@�4��]��M�$�[��F���_^}�Ք�kN^��KA@�%@��X��@@JJ������D�믗�:A�� � ��0�fpv� � �#C���'�����k�M��K�7�� � 0Lx�	�� � � ���p��{���-�\s�����"� o
O@@`��4�A�{��GU�����HH�@PW@�R�V����6$^�$I�H4�DB0F���
M�C"�@����x�Zl�P�H�KKm�-`��eiKw�}���tg�������|&�<s�9s.����x� Po��[4��	�l)�M!�Ν;�K�O!o�C��@@�[�. @��}�=���dpp0n���ؽ{wv���B޹s��) @�fJ@�;S��%@� @`V	L�	�lb���j|��ߎ={�d�Z����Bޜ� 0Sޙ��.̈@��A��8���>�
y_x��R�Sț�P @�@�	�ۤ�t�NH�;k��	 �L��/�i��Y @�@�;��C��B޽{����8 �Q�6��Փ����3x4O`�����k�5o�fL�3.0v���O�f;p�@+�ݿv��)��q( @�#��$�o�:x�
�@��^~��я~;v�����l* @��&�o���V��K/e�Z�B��f�@�$�-��&I�8�A���0 0��/R��w�dnQ��Vছn��+W��M�	�������o}���`���r��wӦM��_��}�	 @`�����	 @����s���1�'x���L!oz�w�f͚���G_rN�����wZ|n&@� @�S�8��T��o�ȋ/��ڮ!��;���������K�	 @�S�N�΍ @�t�@�O�f.{��m����.�>?���
7ܐ��@�����w*j�!@� @�����}�7z�Z!�����R��믏�� @�LG@�;=� @� �1c���;eϞ=q�m���Çs_��x?��) @�&# ��� @�t�@�{�ڽ{w�~��188���c�X�}y @���x��� @�:N`&��Ͱv����w��^�.�>o���X�fM� @�������: @�t��L?��>��q�w��=~?��OƵ�^�U�I�($ �-Ĥ @��.P����@|��ߍ���~�ӟ�k��&�� pZ�i�T @� @��zzz"�d���P?~<+���O>��r!oWWW�t�M�lٲ�S� @�@�	�vޔ̈:Y`����d;s#@����̙����ѣ��Lv�������F�ߟg�����}.^��x��g��Y�n�2kl� @�bo��#@���	x���n8���wS������??��bݺu���_�B+�ݶm[���C��إ7q((`���P� @� йc�߭2�M��>�h�y睑��Ȏ:�|��q�Wd�| @�N�D� @�M8�3rS�:�M���~�����p{,���[o�5�,YҾ� 0Z@�;Z�9 @��x����зl�w�u�I!��˳j>	 @�mo��	 @�M������>w�}w���d�"���_�r,Z��}�	 @ 	x� @� �x�:�i1x��{r!oz�+_�J,\�����8! �=a� @���
�-�M���?�9��܊�q~��_�����u @���殽� @� �uكw������g��g�yf��k�l @����� @�����٢�����_��Y��y�y�ŪU�r� @��f
x���fM� @��(�:�i�����O5∥K���
 @�@3��\w�&@� @`�@]�h5�V�;�|��.:'@�* �m�›6 @�'�o�=wO��3 @�����3 @�*P�'xS���~6�:���?se @��^���u7k @�F	�	�s�=7V�^�]w]�s�9�F��ߟ++ @���6s�͚ @��Qu
x�̙˖-��k��e�]]]]�F���u�֓��@�4O@�ۼ57c @���a���/���X�"�͛7f�'��v튻���g @�@���^~�'@� @ 	�QO��-o�U�V��ݾ��	cpp0~�������8v�؄u}I�4G@�ۜ�6S @��x#ޕ+W�-�����Y��s��ƍ㡇�#G��3�	 @���
L�oMU1o @�%�FlѰs��q�݃��͛[��}��&K�LN@�;9/�	 @��@�7�	�ܦ��]z�m���ǯ~��x���cxx�}�	 @`<���p� @�Mx#�d����%G��$޾}�p7��@�L$ �H�w @�4B��-�>��H/M�̱e˖ܾ���ϏŋO�	u	 @���x�`� @��.����ޑ��8v�X!����x����֭���;>��/�t������ϊ��k��6WV @�L$`މt|G� @�@���v����~�Y�&>�Dz�6;V�^�����H�=i���k�fŸ�+⬳ΊÇ��9!@��' �O�u @�!044���j̛7�5�����Ş={r�O��._���.Z�(�]Vx�[�K�,i�$-�v��g�y&�������V����X�bE��8ݭ�'@�D�?U!@� @�@�z�ܬo�������'.�������sO�r�-1^��5����aÆ�-�i�q( @�x�w_ @� ��|0����d/�䒸��;��N�>�����ꪫ&���_���ԧ>�
�S;�x�;⢋.��>k�' @���=%�� @�4I`�����c�Mj���zo���ؿ�޴��d��=x�`�1�>&���{� @���6g�͔ @��	~�����	jD���+�~����׿w�qGl޼9�;7n��7�m���FW_}u̙3g�%� @���l�p� @�4Q �?��#m����M�4�y�q�x�駣��?v��###'�->�ODzA[:��w��_�v�:��x�ĩ�s�9�U��o~sk,�_ @`<�x2� @� �H�m۶E��̑�Xx�'�}�{_����d����֓�7�pC��U�V���' @��1�1 � Po��6s����M�r�ʕ+��?�y���녇��i�.Z�(�?��x����I���:i:�B�fD@�;#�%@�����L�j��+��SOšC����n55o޼X�lY���{��mm�p���-)�L�E���E�P�h����5l�M� @�����z(�T^��aÆ\˗/O��H @��Q�QN	 @� 0�͛7�n�����mo{[���
�jG�iW�?~�� @��S	xO�� @�� �o߾܋�ғ��}�7��[�n��bŊ\Y� �	x3	� @�(A`�S��W����ek��%K�D���A�+ �+�L� @��i<��#q�رv,�ŋ��EN"�p-;�KF�� @���ޱ"� @���@�b��G͵0�m��<�@��k��&WV @�$�� @��,0v���K�Nz����G��w�3����e' @��$ �{@� @����}��x饗ڭ�-V�Z�.99p�@l߾=W���r
 @���
x� @� @`���s�Ne��
6�ڸꪫ���7wM�h������o� @�̐��-[r[,\t�Eq�N������̛7o�/lk���HoG.�I @� �F�-��䆱v��\�t����شiS��e�]�++ @���6{�͞ @������+WNz�����w�y38bM @��M@�;�V�x	 @��5O<�D>|�=޳�:+�.]�.9�U�;wn��@�4[@���7{ @�fP m��u��\�}�ڻ���i� @ �f>	 @� 0c�iX�xq,X��POozӛ��h��Ν;se @���f��� @� 0�{��ݻw�{�������x'}}}��o~3F�{���ضm�x��N�4P���s6e @�T*�iӦ����}^�����O��?ܾ�N��˗/����{���w��aÆx�WN�� �\os���	 @��H`˖-�B���zLO�~�k_�Gy${�����W_i[�S�=�\��7�9�W� @�
�6x�M��Q �_S @`�	�~�{アnݺH�nv\y啑~Nw� ���G���j)���S�H� @��
�S�d] @�@y��,�D��
���������>���~��H�Vy_�c� pj�]\%@� @�@�����o߾��g>�\r�)�O{�n޼96n�/���)�H�����O @�T ����m��}}}���7�=��V�)�}��'�g�����
F� @������@� @���سgO� @`:'v��N+�%@� @� @������� @� @��x�q�
 @� @�*�VN�C @� @��# �-�Q+ @� @��\@�[9�	 @� @� P����G� @� @� @�ro��:$@� @� @�@9�r�B� @� @������� @� @��x�q�
 @� @�*�VN�C @� @��# �-�Q+ @� @��\@�[9�	 @� @� P����G� @� @� @�ro��:$@� @� @�@9�r�B� @� @������� @� @��x�q�
 @� @�*�VN�C @� @��# �-�Q+ @� @��\@�[9�	 @� @� P����G� @� @� @�ro��:$@� @� @�@9�r�B� @� @������� @� @��x�q�
 @� @�*譼G @��i���L�n� @� @����v�z�
:^`Μ9?G$@� @�El�PTJ= @� @��L@�[�1 @� @���R� @� @�5��lA� @� @�E�E��#@� @� @�@��5[�!@� @� @�@QoQ)� @� @� P3o��p @� @� PT@�[TJ= @� @��L@�[�1 @� @���R� @� @�5��lA� @� @�E�E��#@� @� @�@��5[�!@� @� @�@QoQ)� @� @� P3o��p @� @� PT@�[TJ= @� @��L@�[�1 @� @��-ZQ= P�#G��a�0����c�ܹS���H

M�~7 @�)===���Ք�'������` PT`pp�hU��z{{��������9!@��S�p7�� @�:[4Tg�' @� @��* �-�Sc @� @��N@�[��� @� @� P����TN� @� @� @�:ou�z"@� @� @�@��R95F� @� @�����Y� @� @��
xK�� @� @���Vg�' @� @��* �-�Sc @� @��N@�[��� @� @� P����TN� @� @� @�:ou�z"@� @� @�@��R95F� @� @�����Y� @� @��
xK�� @� @���Vg�' @� @��* �-�Sc @� @��N@�[��� @� @� P����TN� @� @� @�:ou�z"@� @� @�@��R95F� @� @�����Y� @� @��
xK�� @� @���Vg�' @� @��* �-�Sc @� @��N@�[��� @� @� P����TN� @� @� @�:ou�z"@� @� @�@��R95F� @� @���z��JO @���)���===�s�FM��
�^: @��j��z�����ݑ~ @�����T�"�C� @� @���ނP� @� @� @�n޺��� @� @� @����� �j @� @������n+b< @� @�(( �-� @� @��& �ۊ @� @�

xB�F� @� @���	x�"�C� @� @���ނP� @� @� @�n޺��� @� @� @����� �j @� @������n+b< @� @�(( �-� @� @��& �ۊ @� @�

�]�O�Th�pIEND�B`�PK
!<�O��P<P<#webextension/icons/onboarding-5.png�PNG


IHDRx�=��PLTEGpL����������������������������/Y^8X\FVX��```fff^^^TTTeee]kn>fn��Ju~aaa[[[bbbcccz��y��y��{��|��|��}��}��~������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������뉾�z�����������������������������������ݵ������������������YYY��rrtBBDNMP������IHJSTU>=@���jjl������zy{VVW���___������\\\��������������̨�[ݯS�xa��MͦU��^��N�P���h����"��E��njb��tQ�~A����+˓"��5�xp`9���$�����Q��X��M666&&&֫TMZ\H^c+w�6nz����
tRNSl���M`�>9IDATx�؅�$AE�jƥa���cm��J6���2}S�M���k��J�������Kz���@7�oꐹ�XۻA�`��'U؟���w��0�T>�T���S��Im�6u} �ԇ@x�@x^�@x��^�@x��^�@x��^�@x^�^�@x^�@x�@x^�@x��^�@x��^�@x��^�@x^�^�@x^�@x�@x^�@x��^�@x��^�@x��^�@x^�^�@x� ����/� �/��/� �/�� �� �/�� ��;�n,*������K&Ƹ�tw}x`khy��]�_(���%<�q�M��ww/��9��#��?���.�ϛ���|@x��Gw>\רɛ������
/������;��'�C^��YE��r��+�\�	o&��Wx9�C&��N� @,���47�Da���c�^�W���^�����^���x�^����^��/x^��/x^��/x^�W�/x^�
�/x^�
��x^�
��x�^�
��x�^���x�+�
��x�+�W�x�+�W�/x�+�W�/x^�W���+�W���^��'	��x^�
��x�+�
��x�+���x�+��/x�+�W�x�+�W���+�W���^�W���^�
����^�W���^����^�7�㩫^�����{:x�ho�����/x�+�7x�^���x�+��/x���x�^���x�+������x�+��/x�+�7x�^���x�+��/x���x�^���x�+������x�+��/x�+�7x�^���x�+��/x����x�^���x�+������x�+��/x�+�7x�^���x�+��/x����x�^���x�+������x�+��/x�+�7x�^���x�+��/x����x�^���x�+������x�+��/x�+�7x�^���x�+��/x���x�^���x�+������x�+��/x�+�7x�^���x�+��/x���x�^���x�+������x�+��/x�+�7x�^���x�+��/x���x�^���x�;x���J��^wL&O/x�+��/x^�W�^�
���^�W�/x^�
���<��x��
����^�
��x�^y:x�+�x�^���x�+���t�W�o7��/x�+�W�/x������p�/x^�W���^���^���^�
����^�����/x����x�^��/x�+O/x^�v/x�+��/x^�W�^�
���^�W�/x^�
���<��x��
����^�
��x�^y:x�+�x�^���x�+���t�W�o7��/x�+�W�/x������v�/x^�W���^������+O/x��;f�1C��H�m������)ҨS9�{����EDK�"�;��s ����z\T�����Cg鄗�2�TTU<.�o<<v�Nx	/sL�����}�cg�9^�Kx�쾨�ߊ��ҳ ���5�K��-x�,��^昂�1T6���^›�u>�����^��S�8��|౳t�Kx� ��_<v�Nx	o������7;K'���9��\�g���΍���	/�́��~�]������^›᭵�4ϋ_x�,��^�Bm�6��_�cg鄗�2���U��Ǝ�t�Kx�c
��~h�Ď�t�Kx� �}��}b�Y:�%�9�1~�{8=v��^��Sc���q�Nx	/sLa�eN���,����a�qb�Y:�%��1�5�4�:_��,��^昂e��?��g鄗�2��z��ο7;Kρ�^�����w���Ιw���a�5!���1.a��]`n���7-wIn���{�����K�{��E�zld����v������Z��c�C�/�������_�.\���wvw��a�+�x��P_��������.�-;�ݝ�*
7��X�/�k�w���Pٽ����nn7�=7�X�/�k��ޚU$ל���T��Aga��x
�PZ5��Ry��~�뭕��w��S��� ^��m��ֵ��V'׽�Ք��{����/���U�_V���X�F�x!^�7Z�� ��EMn�J�wɕW��{a��l�n�O��䱗3>V� ^�ⵃ��S�P�aerw0�d�X�2����5��B�1yeh�t��xh�L�E"bt���[��j"�Q�?j|�t#@�/���q߶�vZ���]r��[��޿ǂM�x�+�/��V栰"9���<G�^I7����q��!^��o�O����=ҫ���߼���_�g��]�kb�C�� ^֊�[+�-A<H�e�v������ѯ��a�y���B�f�x�a:����p�l~��]�J��]�s7�ۇ
�t��5	v�.�jd���{r�6/�B��xg��B�/0��U�F�'��d�G"��[������K��!^���rM����d!7G'�y���]gc��}̦�"��!^��5Ļ���M�\�2ݰ�O�:W�88>~x|�ҍ�B�oG�н�9��$VoW>�w�k�܇��hm�tC@�/��A���
d�'����g��u�X������B�<j�	�qR���^�Y�
{��+�0/��ƪZ�l	b���z3�g���+�/��λ��j�3�MO�%ex0So�Y�3>V�! ^��r��b�=��x���iMHzv��!^�@�/�[ȹ�]��9�
�N��YS�*���x��e��\-{�	�YR��/�
�����n��xm6���RgKDB8I5&ON��U+�/ċG
�����zɳG�<y�T��85�gW+�/��Ξc�Y��r琬)^$�y�Z0�]a|��/��}��_����8�.ޜ����
�c��x�O�c[��^��3O�&�Ǎw��k�+�/ċo�N����ę4DO��I���9�d�{���K���a���
�B����߬b�,q�ؗ�s%^%���\�h����tI�s��`���J7��B���\Lul�l�7�n�b�*EIV	�*��:Ǩ�����!,9�t3@�/�������7�x�!G��9��)y|~:{�(��a��`��x�7&��.vL���;nG�n6�
�ߊ�*�:��_��%�~a��`��x����?$`�ĕ�����n�ø�_7��Dyr��Z
]���6�%���x!^��#��Q!;
������O�~�P�x�zgr:�rzuN��o�;Fa��`��x񌗷vC:�����S�.#����_>[$I1��)�KX�����垷�| ^c@�/v��~���e]2w>힁���/�-?���W�S��~-�=d^~�[x>X�F�x!^���B���{��ego� �R�Gf粛߿T��Wa���\�HX�����y��+�/ċ����2��e���v��|�7��=~�0�dJ�2�+}�P/8�t#@�/�;����`�⹳��D��S7��\'�F���K���$��/GG���B������E���| ^c@�/~N6��
�q������ȼ7�W�׺��y&L%ϴȔ
�����Ωcv��`���5��B��p=�f�1'[��Q��W�{���Re�2t�<ΠL� �*������a��x
�B���2q�rU(;
M��~����Cc4�vg˨�~d��z%_���[惕n��x�qlSe�M^n�l6v��w�w3ٞ��B�_!ׅ����2E��"���1?��Z��J7��b��o�����_��\T��Q�U�_:�����D9=�R9bT;uM�,�?u��k���5���w�s���`Q�8�����2l�+�=��gM�
����YK���+�/ċ���P*Ǧb��;�C�ɥyu����M�~�2?��u�*t��,����F����`���x�{�e2rg<��qX��~�2��[ѻ����z�t��ߺ; �r惕n��x�!�%�?v������!іU��-��d�cj����V7D���|�jd�/�����z�烕�B���x��_M}�}vn[r�/���6un����/���l�y�w��I��6,�V:��❹%���;�K�T��)���~���
���%�锏��P�ξ�`�?y�;��x!^S��5���]g��C�������s���P����@ɄQ�U�\�*��h��D<^���@�/�k���b�t�?�~��g��F�|M��シ'�H
՞��GF?W��go ����x!^3@���
˥��j�LS�g�Z����/֢;sBդ���#�G$ށ�:o~/��?'�;�V��ÏV�2��|�md�d����8�l��懕�B�f�x�����g�4�W _����s>m$W��Vo����$��zuݵ#�+Vj�s%Z��@i*�0�8u��$mõM�_�}3L�`c3�"�xޛ�7�я�������-��+�%��N'x	^�u2���̯ï	�N��ʋY%�+R��) M�/Yw:�K�z��U�h�����#�`�{�c�	�r|�������/��GoVU������*8�}(���܆�h���N.�p��	^�דx�G�wd���v'��䶩��x,X]3^���(f��
1A�q~PKcQ������������})������^�>߷�B�A�_�o����ZFy�q���K���J�T	.����'9�XN#�ߣ_�9C�@H�dC�n��I���3ǿ�ף�q���'�:��%S��J�^�q��R��U���x_~���?�C�#dlԐ�n׳�7�}֣��q���1��צ�����"?�������U��Q�K��گ��Wq�?f�/��Go���*~��W�#~'9����[j�K�\��z����T�m����KY����bƘ�k���U�q�����ڝ S��:�������t�F��tخ�̷�F��)N2Jv�j���%�L
������\�:��N'x	^/"xqkV�H����Gq��N{�?Ӡ�Xg�n���Tx�����D����W;�>�t���#>\��I��a���^��~(���#7~v?,����8�X�m��l�����x�X��G���71��
�j��5���~�V8��-Ы��Ѝ�яʘ�ϊ�R�Ր���c<�?W?W�q���'��Z�?$t8d
�q�|���:,�џ$�4r�g��
ޯ�c4�F���������	^�ן�Y
�}���凕$��/��a��CI������x��γ�i%!Ϥ��S|)o%:[w:�K��e�
��Q%y��z��ȉ�N�x��;~�
�7���E�_|[�׬�G
/��I/r9)�@P��_,'yb�&�7Q�M�x�7��b�֞f��m�Z��/n���T���ج�/�K��rM��V�}�,0~M�����W�!%%o�7���)�y6���n>kJ��c�R�V���S]3��Z��Y/w:�K�z�Y� �0���n�k�jjt���2g�+�!��!1!M�
r�|�/��aR�zy���%x)_�U)��OJ�$T��2R�B�U��9���|W�E��8 Z}���{�OOs�
�^�t���#f�YU+Q5�@��|��W�*��+�;ߕ��n��-�ml�����V�z��	^�חx�7��R�.�n�?�%�jm<���g�`��∸�t��j2\���Q	�^�t���#>\��~FRO)��y�$��z]�߻u{ii�AÞ�O���{͙�N���o���W�^�t���"�W���Q"Jbw#�J��`��m)Kw�|f�q~
�Ý��xm67�4'�s�����̝N����3^`��]�>x]̑�N��7���}H�ֆ���?��O����c)��͆����b���7���g�/��I/؇O��`Y 3w����G�?�ᱥ��|�����M���BRِT�v�B��XGJ^#x	^�׏�Ӽ3�*C]������C�ߝ���?@��"g�Q?�����w��h�ɋ-Ӧ�lonv7�6�}�7Hy�;��%x=�	U�0��
v{�i�?޻��{|����b�O�5��~��A�)d 9Y~���2w:�K�z3�HXeR*��5�_]�W�]���D��I%Ĕ���1r�º��{$Edž������6`��	^�ד�pM10SLs�Kg����(��V�;�F�X)E�)�7�X{�Q?�9Ck�k4#D�x�I)Ir�t���&~VC��^#u���
Y˶�ƴC�F=��̚��k�/��tr�vW�RVM;l�
��C��Z	3^���$�7�L���u5>^��Ǟ���}�?5'����z�_HD����?��@��_��/��M<j�,
�}&E
ОSTdEx����(���Win`�aa���� `'��N�BWGs���;��%x���=�C�H_�j[�kh�v�l��J�/�C=��x�=i���	:^=Y52�s%CNN�Ntl{n�o��	^�׋�0�B��8�z!���@j����v���;����P͏0BTOXZ��H���~.�۝�9�s������1 �z�@��Ou��K1绥���Hp��#@m2�>�s�'x	^�׫�񦉨��0�\��7�	tlG�K������nbˋB����O���G�otDZ�xi��/��ke&���0{�	:Z?QZ?Y__]�B���+�<��	^�׏^䡋e�SU|i�z�J�Lg�
���~k��Ѫ!�v��O��/����p�\�:��@=è�p����P�Z��:�r��5�;��%x}�g���ww00Y+,T����|�����w�K	�^
p�1��Pm@BR2�&n����/��Io���:�:QU5daA�o�oF\��7�S���R�3%d �vȅ$��Fs��N�$����QC��Rx�_�aOX�Y�T��C�P�T���/��K㋻��v���Hq�͕��{����D��oY���U�4�^u��#�L����l�m�AR��}3���W��eif��&A����F�ֆ$u}���M��tM�b޿f�]u�6k�(��o�ի�(?e�gK4�<Oz(^����}�+k�xS�'IϬ��3���h��Rᅲ��ZI0O�Ɓ�x)��/'���)Tr��a3�v���ݺ��DžW{}]���:�<����x���?���p���+��u����O��o\1��7�ߣU�@���P��7wI�y�)^�7��I�ݣ�u��J���κ�o&^�۶i��ZQ���;��d�'��xcA�)�NHT��k�/�f�Y�o�6λ_'<�/�	��ө>�H�B}"����]d��d:�JL�`���>[9�U-���?�h�'��x#A����c�.��MgLi����?�l:ͧc��n���oY/%��r��XI��3��y�)^�7��"�G	#.=
���%��$X	�h cUJh�ϳ��\In������C�����G��x)ޟ�c���(���~)����l�?�=�m���C��f(�0��^e�:�<����x?���@��{��E����nϊs�gW��E~�E��:�%Bѹ��p�'=
/�K��������������.$�0+���n��8C�I�ý��o(^���Nq����p�⺷���+��Z�5��v�?���0�<�	���卷�� [#�,�l�
�����<�]�O�]����<�_7xw�0��v���e�y�7/�K�º��������Q��z��Z�o�/�9�wUl@!aO%�9�<Oz(^��⵶��$[�F�;��q�n�s…wo%F��@�����f�Bg�u/�<Oz$(^���5V�$��k���ʚ�[(��4��Dv���ؾ�4�<�Q�x)^�W<k������BjY����������C�'�9����yң@�R��5����D���-�F�*�?{f�����H�t�3��X�X[M
v�&@ +�tq�.}5#������f�GP�
^������M�����E��X��؏�=w˘{��q���������(<�o����+�J��ڋ�)�����9w�_����,B��B�u���+��A�o�+��mC�=���h|(�D���%^�W⭃�m����5�t��S�#�����ւ��u�%^��
��Ks�2uq�]��h����;ek�ȼn��+��A/^��b��kQQ�L&�ݻ���EX�I����[���S�m���Q��u�f���<��sy�nw��
�7�OQz��y��:H���k�-T)R�T-����C�4O�.�ݳ�,�32/y����+�B��g��gP1s�zm���S�q�_Lϻw%���bd�ʼnz$^�W�L!�@B(�p61���w����j��ې��	�M��̼�[	�W�x�xt+P�Yδ���x%^��i$��q��0���D7�؛>���M���+�J��Eٓ:5��e�meP`f4�&)����s��ȼnz$^�W�M=~�SR����'��+J�g$������A�x%^�$AZ�v�~�_̃y���[�W�x�C���"��Z��M�x%�7E�k��Џ��k6�,���ּ�+�J���o���p�@v~%��w��x%^����ḥ�\j�k�ف�%�ܼ�+�J�o���?'=+r�w)�i�1����y�W�x��w��i�؋�w;U7t�Ϻ�E����B�;p�X�6��^	�W�x�X�Ty�>�������ݢ���q��y��*H��Ļ	��n�[[��
#a� �7�~]$�,���y����+�Ү�Ѫ#s>i-�ClX,�,3�i�~��y��b�u�nm�Գ5��^�����[
�W�x�p��6�n�U�΍9V��oJFj���}�����$����s
�g�����V�uӫ �J��Y�����zq~�R��n�s��>��۝�M���+�J�u�w?��#X?��;�Qf~��l�}�۝�M���+�J���4W�ͻ���D���Sj��ns^7]�xB/^x�QVeɁ(:�^����+��A�=�7�7�3��[s�z���6����#m��K�oe$^�\��g��O��ǥE�?�k����H����+�VB�
��%q�~��(�XGb��y�t�W⭄^�.׳X7X��}ͼ[�nygq���;���+�𗸊w5�q
�����wMN���twrQ��9v�^���M�t��?�������f�?�Kk����y��E�s�^�۟�Mo�K�x����_�a��q��0��+U
$�;�M4[�)�	q�����^?��X���m��D+x�#d?'�;$��ߓ����T�޶"��Ϥz��x�W�����X�b�W�7���gҁx[x��y�O�Zy���8/r��l?r�;�gҁx�x�5-�PeYl�Y��~�t~�y�x����<���i�Ϥ/�6	�d�������2}�1��r���t�%�t֛�^��t�ަ�zm=��{;0��뭗~&x��}�wo������vOQ���^��x�h��ۨ}�����t�޶�E;�c�����z�ؖ��L��X�Zѝ����t��6�`�zU��s�pvwc3�<B�����r�I^�m�
�,���yv|}�gt����R�W�t�����)��s���A�krWP킬|�t������{�߻9bJy��;}�3���
���y��>�Jw�E�~Q꽳~�^�Z�wM�HB��]�~�I^�V�7�;{^���1���nw������o����&��we��^����AE��;C׶�@���M)Q뫟I^�m��_�y��h	���i>٪C'�T��Ϥ/�6	�����Kݧ߻���^'�m��w�;d�Q�u�Ϥ/�6
���dm�n~����p���N��t��&�_�C��?�������ñ��x�{"^�+^�"^�"^��W��W�]��x�xŋxŋx�+^�+^�"^�v�W��E��/�/��x�xŋx�&^��W��W��W��E��/�x�xŋxŋx�+^�+^�"��w��Ar����E��2�tv�oꀅ��K`Eq���OmM@{C/�Fm��WMխ�O��X?��׃����$�F�[��s�I_������^����ͥ��|�KO)|���^�{��0��O�L�\O�Y2v^Fx	/�=�����O�{� �)$����v����~�"/�Dx	�#��g��:lx�%��Gx�o���t�T�Y1Lqu�*	/�%�C��K�_�N�|�dEx	/�V�7��e(�o���^�;�o��B��&�f	�%��wHޣ��0=�4��=�=^�Kx�-��LQ�Y�u�o�o/�%�l8�#�QS8:ț�Ҳ�P*�n����R�"�Kx	/���݉�Qu�7�v���
�Z�	��^�ˆ��W�W&y������^�2^�Kxـ�`��)�2��K��[wH��	/�%�lX�Щ@��W]!�k�{�ky0�	/�%�lX�B&r�G`�I���%��me���^���2
��7�t�܆��Q��.E0M�J;�F���^���x+m�	�ҭ���@:5�imE�Bx	/�e�;��Y��
o������ؽ��>^~ ��Dx	/�m`J�W��aJF��d�}��Ax݉�^�[c_s^/�Wy��-���e�ם/�%�����ؗ���f�-�J��5�ם/�%��m=������Ux�ݑ[��P����S]?N�=7�Ex�t�D.��T^�"�������)�Q�}�8�D��0��ש/�%����{���*i�}~SD�ፊ�k-���.��V���^�̱�?��:�����o�e-o
]c]�@x]��^�+�¾_LY���tha��~��Ү�
��2��\���^#���R��@���+;�i����"�Fx	/���E�)�VvxW0�q�w]Ax]��^��	�z����6���b3���d����`{&�/�û�,~���"��Dx	/ᵿ/}1��gxO���In�^G#����J�����R�M];��`�Ʌ�0y���^W#��pl>�^��j��s��\/�%��Fx��{��x�u�wq�y�~^�Kx���'�
q��yt�%����o�����-�k�	/�%��MxM��"���6b����}���� ����2g��?���bi��
�L��M����^6(x�^o�+m�wt��rXwӆ�^��܂wR�oJ�R�]*-����C�zkZ0M	/�%��)xWw��ҪwK�a-/�%��%x_s�U%����Ҷ�*!����2��mp_�DZ5ǝͥu��ք��^��5�+�U#��R#i]P�R&���^���w�I�6�ev���N�y����7?鄗��L�7��8�_,fi��KL@2���cﮑ�0
_��t
sfv��zK�cC:�of�hA�R{��$h-ϼ�������t�k��^���K'���^�빮��	/�9����9��^�{S/�u�\�t�Kxo�%�Ή;r�t�Kxo�%�~�N>K'����^��x��a鄗�^9����~Dxǎ���G,���+Ex�Ej$��#� �����Ej&�(7�T�uuK�%���k��?e=.��Y�v� �����jY���^��n'�
�m�t^�KxC�*��:<@���]_:�%���͇7T�BY�G��L��Ax��ww䝬�Kr�Z�h�ww�j�DVⵐi����/�%�{���%�|z__S ����DDxG�͟��X_��%����1��,�.�\��%����P��Hx���`(�@x	/��&"U��τ����b���b_6��R���Œ5�.�%���������r����#iO�p���^��s�L�y��Er'<;4�n>Ы���^‹��ػ��Ա(���MУ�&Nb�2�xU�P�&E���z��3n���0���=����h�][�+}�g�o�0ItS�Ev#�I��E�f�n.��NMu����e�	�#�M;�p-l._���[O�C^ޖ�*��/;���w0
 ���4�8�PE���df��g�9���ja�ͥ�1O���A�7T�'	TǾ�S�WwO6NG@xAx�ѵ�"�W3����;�0e�}S�E���<	AxAx��Z�nE���� � �A�v����|.�����k��C.�lp�~�78{��[9'�{��#3m����BqS���Yx[/�e���A*�@x	/��|���/��"]�Ϻ�1��Kx��oW�5��ƺ"ј��w  ���|{_VV��B�
ӵ_Eޑ�Y@x	/��vUV����-�EO4/�Q* �����e5/W�(���J�b�I�%���ۛ���	/�I7��ur���h��^���~�+�<�tVQlR���Kx�ͷ��ݝ�h%�nE��{R�/�2�^��-�ܓu�W�ͤ/�2��:G�9�d"Y���(�</�o��sF`ǔ{���]WQ�y&.^�u�}�����!��v/E����%�p�[7��Rc���b�ha*{R�%���[��;	��!��u��Kx�o��9�����m3}��Kx�xխ�+	�����v_�(# ��{�x��S�1�m
Q��v���r��^���{=]#�%� ���|��&��k.#i^X�8#u@x	/������%��{����n�	/�B�oͶ�k����w��]�����B�̷�e啧k������B�ͷ˲r�?]S��jȸ# ��:}��++�S��_6���^‹�֬����t�/
Gt��^4�ͷ�˲���<]プ�u�����B�o�MYY�l�,y?�p�@x	/����U��>nj%�'i�g# ��{Q�[�Q��m�%�L�ҳ�ř��^�G�o�~�����w*��6[4��^(�[ޛ&Kޖ�%�m�X/�E#�|���ɒw"�ɹh �����m��]_5Y�%0i̓5�Kxќ>ߞ�֫S�%/��x	/�E3�|�ksP��
km_p|���.~a/�r m��M�5�6?䤁���3��D��V�5oI������^�{DS�ia�Kx	�1��5�m. �����9w
��_Y���^�/�
;�2g��1�ҏ��G���ދ�}�����v�/��^~���sǶ��0F��Ŀ�"�@j�����nq�RE�῟���μ��^�7f~vEo�x��+?�w�^���}���W�/x�����+��+�{�5�
���ߝ�x^�7~�e�x�ޢ7��Eg�x�����^��E�]�W^�
��oѓ�W^�
��oѯ��^���-:�y��/x�[t�w��+��uo���/x�[6��ޟ��W�/x�V]�x^�lܳy��/x�[te�x^�h���^���-����+��eOV�F�^���-���
�x�ޢ'ˎ���^�6^y�;���^�V�3{?���^����W�/x���<���^��Y6���/x�[4������^�Yw�~�x�ޢqe�x^����W�/x�Vn�Fx^�}-�ہW�/x��l��/x�[t5�^���-g���x�[�#�*���^�6r�Q^���m6dn�^���-:r���W�/x�V�u���/x�[�˽~w�W�/x��^���W�/x�Ǽ9WԁW�/x�V�v�Q^���W�vQ^��୺��n����^�=3�;��c��_;uTBA�Ł׿�A6��oѯ�aY8fB�x�{!�>-v�x�+ު	���W�e;2�/��x�fd�v/��x?�7�/��xK�z#�m���x�B��t3{<IEND�B`�PK
!<z�M���webextension/log.js/* globals buildSettings */
/* eslint-disable no-console */

"use strict";

this.log = (function() {
  const exports = {};

  const levels = ["debug", "info", "warn", "error"];
  if (!levels.includes(buildSettings.logLevel)) {
    console.warn("Invalid buildSettings.logLevel:", buildSettings.logLevel);
  }
  const shouldLog = {};

  {
    let startLogging = false;
    for (const level of levels) {
      if (buildSettings.logLevel === level) {
        startLogging = true;
      }
      if (startLogging) {
        shouldLog[level] = true;
      }
    }
  }

  function stub() {}
  exports.debug = exports.info = exports.warn = exports.error = stub;

  if (shouldLog.debug) {
    exports.debug = console.debug.bind(console);
  }

  if (shouldLog.info) {
    exports.info = console.info.bind(console);
  }

  if (shouldLog.warn) {
    exports.warn = console.warn.bind(console);
  }

  if (shouldLog.error) {
    exports.error = console.error.bind(console);
  }

  return exports;
})();
null;
PK
!<����NNwebextension/makeUuid.js"use strict";

this.makeUuid = (function() {

  // generates a v4 UUID
  return function makeUuid() { // eslint-disable-line no-unused-vars
    // get sixteen unsigned 8 bit random values
    const randomValues = window
      .crypto
      .getRandomValues(new Uint8Array(36));

    return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
      const i = Array.prototype.slice.call(arguments).slice(-2)[0]; // grab the `offset` parameter
      const r = randomValues[i] % 16|0, v = c === "x" ? r : (r & 0x3 | 0x8);
      return v.toString(16);
    });
  };
})();
null;
PK
!<����webextension/manifest.json{
  "manifest_version": 2,
  "name": "Firefox Screenshots",
  "version": "30.1.0",
  "description": "__MSG_addonDescription__",
  "author": "__MSG_addonAuthorsList__",
  "homepage_url": "https://github.com/mozilla-services/screenshots",
  "applications": {
    "gecko": {
      "id": "[email protected]",
      "strict_min_version": "57.0a1"
    }
  },
  "default_locale": "en_US",
  "background": {
    "scripts": [
      "build/buildSettings.js",
      "background/startBackground.js"
    ]
  },
  "content_scripts": [
    {
      "matches": ["https://screenshots.firefox.com/*"],
      "js": [
        "build/buildSettings.js",
        "log.js",
        "catcher.js",
        "selector/callBackground.js",
        "sitehelper.js"
      ]
    }
  ],
  "web_accessible_resources": [
    "blank.html",
    "icons/cancel.svg",
    "icons/download.svg",
    "icons/copy.svg",
    "icons/icon-256.png",
    "icons/back.svg",
    "icons/back-highlight.svg",
    "icons/help-16.svg",
    "icons/menu-fullpage.svg",
    "icons/menu-visible.svg",
    "icons/menu-myshot.svg",
    "icons/onboarding-1.png",
    "icons/onboarding-2.png",
    "icons/onboarding-3.png",
    "icons/onboarding-4.png",
    "icons/onboarding-5.png",
    "icons/done.svg",
    "icons/icon-welcome-face-without-eyes.svg"
  ],
  "permissions": [
    "activeTab",
    "downloads",
    "tabs",
    "storage",
    "notifications",
    "clipboardWrite",
    "contextMenus",
    "<all_urls>",
    "https://screenshots.firefox.com/"
  ]
}
PK
!<Ğ=B2
2
#webextension/onboarding/slides.html<!DOCTYPE html>
<html>
  <head>
    <!-- onboarding.scss is automatically inserted here: -->
    <style></style>
    <!-- Here and in onboarding.scss use MOZ_EXTENSION/path to refer to local files -->
  </head>
  <body>
    <div id="slide-overlay">
      <!-- The current slide is set by having .active-slide-1, .active-slide-2, etc on #slide element: -->
      <div id="slide-container" data-number-of-slides="5" class="active-slide-1">
        <div class="slide slide-1">
          <!-- Note: all images must be listed in manifest.json.template under web_accessible_resources -->
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-1.png');"></div>
          <div class="slide-content">
            <div class="slide-content-aligner">
              <h1><span><strong>Firefox</strong> Screenshots</span><sup>Beta</sup></h1>
              <p data-l10n-id="tourBodyIntro"></p>
            </div>
            <p class="onboarding-legal-notice"><!-- Substituted with termsAndPrivacyNotice --></p>
          </div>
        </div>
        <div class="slide slide-2">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-2.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderPageAction"></h1>
            <p data-l10n-id="tourBodyPageAction"></p>
          </div>
        </div>
        <div class="slide slide-3">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-3.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderClickAndDrag"></h1>
            <p data-l10n-id="tourBodyClickAndDrag"></p>
          </div>
        </div>
        <div class="slide slide-4">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-4.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderFullPage"></h1>
            <p data-l10n-id="tourBodyFullPage"></p>
          </div>
        </div>
        <div class="slide slide-5">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-5.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderDownloadUpload"></h1>
            <p data-l10n-id="tourBodyDownloadUpload"></p>
          </div>
        </div>

        <!-- Clickable elements should be buttons for accessibility -->
        <button id="skip" data-l10n-id="tourSkip" tabindex=1>Skip</button>
        <button id="prev" tabindex=2 data-l10n-label-id="tourPrevious"></button>
        <button id="next" tabindex=3 data-l10n-label-id="tourNext"></button>
        <button id="done" tabindex=4 data-l10n-label-id="tourDone"></button>
        <div id="slide-status-container">
          <button class="goto-slide goto-slide-1" data-number="1" tabindex=4></button>
          <button class="goto-slide goto-slide-2" data-number="2" tabindex=5></button>
          <button class="goto-slide goto-slide-3" data-number="3" tabindex=6></button>
          <button class="goto-slide goto-slide-4" data-number="4" tabindex=7></button>
          <button class="goto-slide goto-slide-5" data-number="5" tabindex=8></button>
        </div>
        <!-- FIXME: Need to put in privacy / etc links -->
      </div>
    </div>
  </body>
</html>
PK
!<4@�mBB!webextension/onboarding/slides.js/* globals log, catcher, onboardingHtml, onboardingCss, util, shooter, callBackground, assertIsTrusted, assertIsBlankDocument */

"use strict";

this.slides = (function() {
  const exports = {};

  const { watchFunction } = catcher;

  let iframe;
  let doc;
  let currentSlide = 1;
  let numberOfSlides;
  let callbacks;

  exports.display = function(addCallbacks) {
    if (iframe) {
      throw new Error("Attemted to call slides.display() twice");
    }
    return new Promise((resolve, reject) => {
      callbacks = addCallbacks;
      // FIXME: a lot of this iframe logic is in ui.js; maybe move to util.js
      iframe = document.createElement("iframe");
      iframe.src = browser.extension.getURL("blank.html");
      iframe.id = "firefox-screenshots-onboarding-iframe";
      iframe.style.zIndex = "99999999999";
      iframe.style.border = "none";
      iframe.style.position = "fixed";
      iframe.style.top = "0";
      iframe.style.left = "0";
      iframe.style.margin = "0";
      iframe.scrolling = "no";
      updateIframeSize();
      let html = onboardingHtml.replace("<style></style>", `<style>${onboardingCss}</style>`);
      html = html.replace(/MOZ_EXTENSION([^"]+)/g, (match, filename) => {
        return browser.extension.getURL(filename);
      });
      iframe.addEventListener("load", catcher.watchFunction(() => {
        doc = iframe.contentDocument;
        assertIsBlankDocument(doc);
        const parsedDom = (new DOMParser()).parseFromString(
          html,
          "text/html"
        );
        doc.replaceChild(
          doc.adoptNode(parsedDom.documentElement),
          doc.documentElement
        );
        doc.addEventListener("keyup", onKeyUp);
        doc.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
        doc.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
        localizeText(doc);
        activateSlide(doc);
        resolve();
      }), {once: true});
      document.body.appendChild(iframe);
      iframe.focus();
      window.addEventListener("resize", onResize);
    });
  };

  exports.remove = exports.unload = function() {
    window.removeEventListener("resize", onResize);
    if (doc) {
      doc.removeEventListener("keyup", onKeyUp);
    }
    util.removeNode(iframe);
    iframe = doc = null;
    currentSlide = 1;
    numberOfSlides = undefined;
    callbacks = undefined;
  };

  function localizeText(doc) {
    let els = doc.querySelectorAll("[data-l10n-id]");
    for (const el of els) {
      const id = el.getAttribute("data-l10n-id");
      const text = browser.i18n.getMessage(id);
      el.textContent = text;
    }
    els = doc.querySelectorAll("[data-l10n-label-id]");
    for (const el of els) {
      const id = el.getAttribute("data-l10n-label-id");
      const text = browser.i18n.getMessage(id);
      el.setAttribute("aria-label", text);
    }
    // termsAndPrivacyNoticeCloudServices is a more complicated substitution:
    const termsContainer = doc.querySelector(".onboarding-legal-notice");
    termsContainer.innerHTML = "";
    const termsSentinel = "__TERMS__";
    const privacySentinel = "__PRIVACY__";
    const sentinelSplitter = "!!!";
    const linkTexts = {
      [termsSentinel]: browser.i18n.getMessage("termsAndPrivacyNoticeTermsLink"),
      [privacySentinel]: browser.i18n.getMessage("termsAndPrivacyNoticyPrivacyLink")
    };
    const linkUrls = {
      [termsSentinel]: "https://www.mozilla.org/about/legal/terms/services/",
      [privacySentinel]: "https://www.mozilla.org/privacy/firefox/"
    };
    const text = browser.i18n.getMessage(
      "termsAndPrivacyNotice2",
      [sentinelSplitter + termsSentinel + sentinelSplitter,
       sentinelSplitter + privacySentinel + sentinelSplitter]);
    const parts = text.split(sentinelSplitter);
    for (const part of parts) {
      let el;
      if (part === termsSentinel || part === privacySentinel) {
        el = doc.createElement("a");
        el.href = linkUrls[part];
        el.textContent = linkTexts[part];
        el.target = "_blank";
        el.id = (part === termsSentinel) ? "terms" : "privacy";
      } else {
        el = doc.createTextNode(part);
      }
      termsContainer.appendChild(el);
    }
  }

  function activateSlide(doc) {
    numberOfSlides = parseInt(doc.querySelector("[data-number-of-slides]").getAttribute("data-number-of-slides"), 10);
    doc.querySelector("#next").addEventListener("click", watchFunction(assertIsTrusted(() => {
      shooter.sendEvent("navigate-slide", "next");
      next();
    })));
    doc.querySelector("#prev").addEventListener("click", watchFunction(assertIsTrusted(() => {
      shooter.sendEvent("navigate-slide", "prev");
      prev();
    })));
    for (const el of doc.querySelectorAll(".goto-slide")) {
      el.addEventListener("click", watchFunction(assertIsTrusted((event) => {
        shooter.sendEvent("navigate-slide", "goto");
        const el = event.target;
        const index = parseInt(el.getAttribute("data-number"), 10);
        setSlide(index);
      })));
    }
    doc.querySelector("#skip").addEventListener("click", watchFunction(assertIsTrusted((event) => {
      shooter.sendEvent("cancel-slides", "skip");
      callbacks.onEnd();
    })));
    doc.querySelector("#done").addEventListener("click", watchFunction(assertIsTrusted((event) => {
      shooter.sendEvent("finish-slides", "done");
      callbacks.onEnd();
    })));
    doc.querySelector("#slide-overlay").addEventListener("click", watchFunction(assertIsTrusted((event) => {
      if (event.target === doc.querySelector("#slide-overlay")) {
        shooter.sendEvent("cancel-slides", "background-click");
        callbacks.onEnd();
      }
    })));
    setSlide(1);
  }

  function next() {
    setSlide(currentSlide + 1);
  }

  function prev() {
    setSlide(currentSlide - 1);
  }

  const onResize = catcher.watchFunction(function() {
    if (!iframe) {
      log.warn("slides onResize called when iframe is not setup");
      return;
    }
    updateIframeSize();
  });

  function updateIframeSize() {
    iframe.style.height = window.innerHeight + "px";
    iframe.style.width = window.innerWidth + "px";
  }

  const onKeyUp = catcher.watchFunction(assertIsTrusted(function(event) {
    if ((event.key || event.code) === "Escape") {
      shooter.sendEvent("cancel-slides", "keyboard-escape");
      callbacks.onEnd();
    }
    if ((event.key || event.code) === "ArrowRight") {
      shooter.sendEvent("navigate-slide", "keyboard-arrowright");
      next();
    }
    if ((event.key || event.code) === "ArrowLeft") {
      shooter.sendEvent("navigate-slide", "keyboard-arrowleft");
      prev();
    }
  }));

  function setSlide(index) {
    if (index < 1) {
      index = 1;
    }
    if (index > numberOfSlides) {
      index = numberOfSlides;
    }
    shooter.sendEvent("visited-slide", `slide-${index}`);
    currentSlide = index;
    const slideEl = doc.querySelector("#slide-container");
    for (let i = 1; i <= numberOfSlides; i++) {
      const className = `active-slide-${i}`;
      if (i === currentSlide) {
        slideEl.classList.add(className);
      } else {
        slideEl.classList.remove(className);
      }
    }
  }

  return exports;
})();
null;
PK
!<����~~webextension/randomString.js/* exported randomString */

"use strict";

this.randomString = function randomString(length, chars) {
  const randomStringChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  chars = chars || randomStringChars;
  let result = "";
  for (let i = 0; i < length; i++) {
    result += chars[Math.floor(Math.random() * chars.length)]
  }
  return result;
}
null;
PK
!<��\��'webextension/selector/callBackground.js/* globals log */

"use strict";

this.callBackground = function callBackground(funcName, ...args) {
  return browser.runtime.sendMessage({funcName, args}).then((result) => {
    if (result && result.type === "success") {
      return result.value;
    } else if (result && result.type === "error") {
      const exc = new Error(result.message || "Unknown error");
      exc.name = "BackgroundError";
      if ("errorCode" in result) {
        exc.errorCode = result.errorCode;
      }
      if ("popupMessage" in result) {
        exc.popupMessage = result.popupMessage;
      }
      throw exc;
    } else {
      log.error("Unexpected background result:", result);
      const exc = new Error(`Bad response type from background page: ${result && result.type || undefined}`);
      exc.resultType = result ? (result.type || "undefined") : "undefined result";
      throw exc;
    }
  });
}
null;
PK
!<0Ԗ,B
B
)webextension/selector/documentMetadata.js"use strict";

this.documentMetadata = (function() {

  function findSiteName() {
    let el = document.querySelector("meta[property='og:site_name']");
    if (el) {
      return el.getAttribute("content");
    }
    // nytimes.com uses this property:
    el = document.querySelector("meta[name='cre']");
    if (el) {
      return el.getAttribute("content");
    }
    return null;
  }

  function getOpenGraph() {
    const openGraph = {};
    // If you update this, also update _OPENGRAPH_PROPERTIES in shot.js:
    const forceSingle = `title type url`.split(" ");
    const openGraphProperties = `
    title type url image audio description determiner locale site_name video
    image:secure_url image:type image:width image:height
    video:secure_url video:type video:width image:height
    audio:secure_url audio:type
    article:published_time article:modified_time article:expiration_time article:author article:section article:tag
    book:author book:isbn book:release_date book:tag
    profile:first_name profile:last_name profile:username profile:gender
    `.split(/\s+/g);
    for (const prop of openGraphProperties) {
      let elems = document.querySelectorAll(`meta[property='og:${prop}']`);
      if (forceSingle.includes(prop) && elems.length > 1) {
        elems = [elems[0]];
      }
      let value;
      if (elems.length > 1) {
        value = [];
        for (const elem of elems) {
          const v = elem.getAttribute("content");
          if (v) {
            value.push(v);
          }
        }
        if (!value.length) {
          value = null;
        }
      } else if (elems.length === 1) {
        value = elems[0].getAttribute("content");
      }
      if (value) {
        openGraph[prop] = value;
      }
    }
    return openGraph;
  }

  function getTwitterCard() {
    const twitterCard = {};
    // If you update this, also update _TWITTERCARD_PROPERTIES in shot.js:
    const properties = `
    card site title description image
    player player:width player:height player:stream player:stream:content_type
    `.split(/\s+/g);
    for (const prop of properties) {
      const elem = document.querySelector(`meta[name='twitter:${prop}']`);
      if (elem) {
        const value = elem.getAttribute("content");
        if (value) {
          twitterCard[prop] = value;
        }
      }
    }
    return twitterCard;
  }

  return function documentMetadata() {
    const result = {};
    result.docTitle = document.title;
    result.siteName = findSiteName();
    result.openGraph = getOpenGraph();
    result.twitterCard = getTwitterCard();
    return result;
  };

})();
null;
PK
!<��}��"�" webextension/selector/shooter.js/* globals global, documentMetadata, util, uicontrol, ui, catcher */
/* globals buildSettings, domainFromUrl, randomString, shot, blobConverters */

"use strict";

this.shooter = (function() { // eslint-disable-line no-unused-vars
  const exports = {};
  const { AbstractShot } = shot;

  const RANDOM_STRING_LENGTH = 16;
  let backend;
  let shotObject;
  let supportsDrawWindow;
  const callBackground = global.callBackground;
  const clipboard = global.clipboard;

  function regexpEscape(str) {
    // http://stackoverflow.com/questions/3115150/how-to-escape-regular-expression-special-characters-using-javascript
    return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
  }

  function sanitizeError(data) {
    const href = new RegExp(regexpEscape(window.location.href), "g");
    const origin = new RegExp(`${regexpEscape(window.location.origin)}[^ \t\n\r",>]*`, "g");
    const json = JSON.stringify(data)
      .replace(href, "REDACTED_HREF")
      .replace(origin, "REDACTED_URL");
    const result = JSON.parse(json);
    return result;
  }

  catcher.registerHandler((errorObj) => {
    callBackground("reportError", sanitizeError(errorObj));
  });

  catcher.watchFunction(() => {
    const canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
    const ctx = canvas.getContext("2d");
    supportsDrawWindow = !!ctx.drawWindow;
  })();

  function captureToCanvas(selectedPos, captureType) {
    const height = selectedPos.bottom - selectedPos.top;
    const width = selectedPos.right - selectedPos.left;
    const canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
    const ctx = canvas.getContext("2d");
    let expand = window.devicePixelRatio !== 1;
    if (captureType === "fullPage" || captureType === "fullPageTruncated") {
      expand = false;
      canvas.width = width;
      canvas.height = height;
    } else {
      canvas.width = width * window.devicePixelRatio;
      canvas.height = height * window.devicePixelRatio;
    }
    if (expand) {
      ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
    }
    ui.iframe.hide();
    ctx.drawWindow(window, selectedPos.left, selectedPos.top, width, height, "#fff");
    return canvas;
  }

  const screenshotPage = exports.screenshotPage = function(selectedPos, captureType) {
    if (!supportsDrawWindow) {
      return null;
    }
    const canvas = captureToCanvas(selectedPos, captureType);
    const limit = buildSettings.pngToJpegCutoff;
    let dataUrl = canvas.toDataURL();
    if (limit && dataUrl.length > limit) {
      const jpegDataUrl = canvas.toDataURL("image/jpeg");
      if (jpegDataUrl.length < dataUrl.length) {
        // Only use the JPEG if it is actually smaller
        dataUrl = jpegDataUrl;
      }
    }
    return dataUrl;
  };

  function screenshotPageAsync(selectedPos, captureType) {
    if (!supportsDrawWindow) {
      return Promise.resolve(null);
    }
    const canvas = captureToCanvas(selectedPos, captureType);
    ui.iframe.showLoader();
    const imageData = canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height);
    return callBackground("canvasToDataURL", imageData);
  }

  let isSaving = null;

  exports.takeShot = function(captureType, selectedPos, url) {
    // isSaving indicates we're aleady in the middle of saving
    // we use a timeout so in the case of a failure the button will
    // still start working again
    if (Math.floor(selectedPos.left) === Math.floor(selectedPos.right) ||
        Math.floor(selectedPos.top) === Math.floor(selectedPos.bottom)) {
        const exc = new Error("Empty selection");
        exc.popupMessage = "EMPTY_SELECTION";
        exc.noReport = true;
        catcher.unhandled(exc);
        return;
    }
    let imageBlob;
    const uicontrol = global.uicontrol;
    let deactivateAfterFinish = true;
    if (isSaving) {
      return;
    }
    isSaving = setTimeout(() => {
      if (typeof ui !== "undefined") {
        // ui might disappear while the timer is running because the save succeeded
        ui.Box.clearSaveDisabled();
      }
      isSaving = null;
    }, 1000);
    selectedPos = selectedPos.asJson();
    let captureText = "";
    if (buildSettings.captureText) {
      captureText = util.captureEnclosedText(selectedPos);
    }
    const dataUrl = url || screenshotPage(selectedPos, captureType);
    let type = blobConverters.getTypeFromDataUrl(dataUrl);
    type = type ? type.split("/", 2)[1] : null;
    if (dataUrl) {
      imageBlob = buildSettings.uploadBinary ? blobConverters.dataUrlToBlob(dataUrl) : null;
      shotObject.delAllClips();
      shotObject.addClip({
        createdDate: Date.now(),
        image: {
          url: buildSettings.uploadBinary ? "" : dataUrl,
          type,
          captureType,
          text: captureText,
          location: selectedPos,
          dimensions: {
            x: selectedPos.right - selectedPos.left,
            y: selectedPos.bottom - selectedPos.top
          }
        }
      });
    }
    catcher.watchPromise(callBackground("takeShot", {
      captureType,
      captureText,
      scroll: {
        scrollX: window.scrollX,
        scrollY: window.scrollY,
        innerHeight: window.innerHeight,
        innerWidth: window.innerWidth
      },
      selectedPos,
      shotId: shotObject.id,
      shot: shotObject.asJson(),
      imageBlob
    }).then((url) => {
      return clipboard.copy(url).then((copied) => {
        return callBackground("openShot", { url, copied });
      });
    }, (error) => {
      if ("popupMessage" in error && (error.popupMessage === "REQUEST_ERROR" || error.popupMessage === "CONNECTION_ERROR")) {
        // The error has been signaled to the user, but unlike other errors (or
        // success) we should not abort the selection
        deactivateAfterFinish = false;
        // We need to unhide the UI since screenshotPage() hides it.
        ui.iframe.unhide();
        return;
      }
      if (error.name !== "BackgroundError") {
        // BackgroundError errors are reported in the Background page
        throw error;
      }
    }).then(() => {
      if (deactivateAfterFinish) {
        uicontrol.deactivate();
      }
    }));
  };

  exports.downloadShot = function(selectedPos, previewDataUrl, type) {
    const shotPromise = previewDataUrl ? Promise.resolve(previewDataUrl) : screenshotPageAsync(selectedPos, type);
    catcher.watchPromise(shotPromise.then(dataUrl => {
      let promise = Promise.resolve(dataUrl);
      if (!dataUrl) {
        promise = callBackground(
          "screenshotPage",
          selectedPos.asJson(),
          {
            scrollX: window.scrollX,
            scrollY: window.scrollY,
            innerHeight: window.innerHeight,
            innerWidth: window.innerWidth
          });
      }
      catcher.watchPromise(promise.then((dataUrl) => {
        let type = blobConverters.getTypeFromDataUrl(dataUrl);
        type = type ? type.split("/", 2)[1] : null;
        shotObject.delAllClips();
        shotObject.addClip({
          createdDate: Date.now(),
          image: {
            url: dataUrl,
            type,
            location: selectedPos
          }
        });
        ui.triggerDownload(dataUrl, shotObject.filename);
        uicontrol.deactivate();
      }));
    }))
  };

  let copyInProgress = null;
  exports.copyShot = function(selectedPos, previewDataUrl, type) {
    // This is pretty slow. We'll ignore additional user triggered copy events
    // while it is in progress.
    if (copyInProgress) {
      return;
    }
    // A max of five seconds in case some error occurs.
    copyInProgress = setTimeout(() => {
      copyInProgress = null;
    }, 5000);

    const unsetCopyInProgress = () => {
      if (copyInProgress) {
        clearTimeout(copyInProgress);
        copyInProgress = null;
      }
    }
    const shotPromise = previewDataUrl ? Promise.resolve(previewDataUrl) : screenshotPageAsync(selectedPos, type);
    catcher.watchPromise(shotPromise.then(dataUrl => {
      const blob = blobConverters.dataUrlToBlob(dataUrl);
      catcher.watchPromise(callBackground("copyShotToClipboard", blob).then(() => {
        uicontrol.deactivate();
        unsetCopyInProgress();
      }, unsetCopyInProgress));
    }));
  };

  exports.sendEvent = function(...args) {
    const maybeOptions = args[args.length - 1];

    if (typeof maybeOptions === "object") {
      maybeOptions.incognito = browser.extension.inIncognitoContext;
    } else {
      args.push({incognito: browser.extension.inIncognitoContext});
    }

    callBackground("sendEvent", ...args);
  };

  catcher.watchFunction(() => {
    shotObject = new AbstractShot(
      backend,
      randomString(RANDOM_STRING_LENGTH) + "/" + domainFromUrl(location),
      {
        origin: shot.originFromUrl(location.href)
      }
    );
    shotObject.update(documentMetadata());
  })();

  return exports;
})();
null;
PK
!<�GWA�A�webextension/selector/ui.js/* globals log, util, catcher, inlineSelectionCss, callBackground, assertIsTrusted, assertIsBlankDocument, buildSettings blobConverters */

"use strict";

this.ui = (function() { // eslint-disable-line no-unused-vars
  const exports = {};
  const SAVE_BUTTON_HEIGHT = 50;

  const { watchFunction } = catcher;

  exports.isHeader = function(el) {
    while (el) {
      if (el.classList &&
          (el.classList.contains("myshots-button") ||
           el.classList.contains("visible") ||
           el.classList.contains("full-page") ||
           el.classList.contains("cancel-shot"))) {
        return true;
      }
      el = el.parentNode;
    }
    return false;
  }

  const substitutedCss = inlineSelectionCss.replace(/MOZ_EXTENSION([^"]+)/g, (match, filename) => {
    return browser.extension.getURL(filename);
  });

  function makeEl(tagName, className) {
    if (!iframe.document()) {
      throw new Error("Attempted makeEl before iframe was initialized");
    }
    const el = iframe.document().createElement(tagName);
    if (className) {
      el.className = className;
    }
    return el;
  }

  function onResize() {
    if (this.sizeTracking.windowDelayer) {
      clearTimeout(this.sizeTracking.windowDelayer);
    }
    this.sizeTracking.windowDelayer = setTimeout(watchFunction(() => {
      this.updateElementSize(true);
    }), 50);
  }

  function localizeText(doc) {
    const els = doc.querySelectorAll("[data-l10n-id], [data-l10n-title]");
    for (const el of els) {
      const id = el.getAttribute("data-l10n-id");
      if (id) {
        const text = browser.i18n.getMessage(id);
        el.textContent = text;
      }
      const title = el.getAttribute("data-l10n-title");
      if (title) {
        const titleText = browser.i18n.getMessage(title);
        const sanitized = titleText && titleText.replace("&", "&amp;")
                                              .replace('"', "&quot;")
                                              .replace("<", "&lt;")
                                              .replace(">", "&gt;");
        el.setAttribute("title", sanitized);
      }
    }
  }

  function highContrastCheck(win) {
    const doc = win.document;
    const el = doc.createElement("div");
    el.style.backgroundImage = "url('#')";
    el.style.display = "none";
    doc.body.appendChild(el);
    const computed = win.getComputedStyle(el);
    doc.body.removeChild(el);
    // When Windows is in High Contrast mode, Firefox replaces background
    // image URLs with the string "none".
    return (computed && computed.backgroundImage === "none");
  }

  const isDownloadOnly = exports.isDownloadOnly = function() {
    return window.downloadOnly;
  }

  // the download notice is rendered in iframes that match the document height
  // or the window height. If parent iframe matches window height, pass in true
  function renderDownloadNotice(initAtBottom = false) {
    const notice = makeEl("table", "notice");
    notice.innerHTML = `
      <div class="notice-tooltip">
        <p data-l10n-id="downloadOnlyDetails"></p>
        <ul>
          <li data-l10n-id="downloadOnlyDetailsPrivate"></li>
          <li data-l10n-id="downloadOnlyDetailsNeverRemember"></li>
          <li data-l10n-id="downloadOnlyDetailsESR"></li>
          <li data-l10n-id="downloadOnlyDetailsNoUploadPref"></li>
        </ul>
      </div>
      <tbody>
        <tr class="notice-wrapper">
          <td class="notice-content" data-l10n-id="downloadOnlyNotice"></td>
          <td class="notice-help"></td>
        </tr>
      <tbody>`;
    localizeText(notice);
    if (initAtBottom) {
      notice.style.bottom = "10px";
    }
    return notice;
  }

  function initializeIframe() {
    const el = document.createElement("iframe");
    el.src = browser.extension.getURL("blank.html");
    el.style.zIndex = "99999999999";
    el.style.border = "none";
    el.style.top = "0";
    el.style.left = "0";
    el.style.margin = "0";
    el.scrolling = "no";
    el.style.clip = "auto";
    return el;
  }

  const iframeSelection = exports.iframeSelection = {
    element: null,
    addClassName: "",
    sizeTracking: {
      timer: null,
      windowDelayer: null,
      lastHeight: null,
      lastWidth: null
    },
    document: null,
    display(installHandlerOnDocument) {
      return new Promise((resolve, reject) => {
        if (!this.element) {
          this.element = initializeIframe();
          this.element.id = "firefox-screenshots-selection-iframe";
          this.element.style.display = "none";
          this.element.style.setProperty("position", "absolute", "important");
          this.updateElementSize();
          this.element.addEventListener("load", watchFunction(() => {
            this.document = this.element.contentDocument;
            assertIsBlankDocument(this.document);
            // eslint-disable-next-line no-unsanitized/property
            this.document.documentElement.innerHTML = `
               <head>
                <style>${substitutedCss}</style>
                <title></title>
               </head>
               <body></body>`;
            installHandlerOnDocument(this.document);
            if (this.addClassName) {
              this.document.body.className = this.addClassName;
            }
            this.document.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
            this.document.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
            resolve();
          }), {once: true});
          document.body.appendChild(this.element);
        } else {
          resolve();
        }
      });
    },

    hide() {
      this.element.style.display = "none";
      this.stopSizeWatch();
    },

    unhide() {
      this.updateElementSize();
      this.element.style.display = "";
      catcher.watchPromise(callBackground("sendEvent", "internal", "unhide-selection-frame"));
      if (highContrastCheck(this.element.contentWindow)) {
        this.element.contentDocument.body.classList.add("hcm");
      }
      this.initSizeWatch();
      this.element.focus();
    },

    updateElementSize(force) {
      // Note: if someone sizes down the page, then the iframe will keep the
      // document from naturally shrinking.  We use force to temporarily hide
      // the element so that we can tell if the document shrinks
      const visible = this.element.style.display !== "none";
      if (force && visible) {
        this.element.style.display = "none";
      }
      const height = Math.max(
        document.documentElement.clientHeight,
        document.body.clientHeight,
        document.documentElement.scrollHeight,
        document.body.scrollHeight);
      if (height !== this.sizeTracking.lastHeight) {
        this.sizeTracking.lastHeight = height;
        this.element.style.height = height + "px";
      }
      // Do not use window.innerWidth since that includes the width of the
      // scroll bar.
      const width = Math.max(
        document.documentElement.clientWidth,
        document.body.clientWidth,
        document.documentElement.scrollWidth,
        document.body.scrollWidth);
      if (width !== this.sizeTracking.lastWidth) {
        this.sizeTracking.lastWidth = width;
        this.element.style.width = width + "px";
        // Since this frame has an absolute position relative to the parent
        // document, if the parent document's body has a relative position and
        // left and/or top not at 0, then the left and/or top of the parent
        // document's body is not at (0, 0) of the viewport. That makes the
        // frame shifted relative to the viewport. These margins negates that.
        if (window.getComputedStyle(document.body).position === "relative") {
          const docBoundingRect = document.documentElement.getBoundingClientRect();
          const bodyBoundingRect = document.body.getBoundingClientRect();
          this.element.style.marginLeft = `-${bodyBoundingRect.left - docBoundingRect.left}px`;
          this.element.style.marginTop = `-${bodyBoundingRect.top - docBoundingRect.top}px`;
        }
      }
      if (force && visible) {
        this.element.style.display = "";
      }
    },

    initSizeWatch() {
      this.stopSizeWatch();
      this.sizeTracking.timer = setInterval(watchFunction(this.updateElementSize.bind(this)), 2000);
      window.addEventListener("resize", this.onResize, true);
    },

    stopSizeWatch() {
      if (this.sizeTracking.timer) {
        clearTimeout(this.sizeTracking.timer);
        this.sizeTracking.timer = null;
      }
      if (this.sizeTracking.windowDelayer) {
        clearTimeout(this.sizeTracking.windowDelayer);
        this.sizeTracking.windowDelayer = null;
      }
      this.sizeTracking.lastHeight = this.sizeTracking.lastWidth = null;
      window.removeEventListener("resize", this.onResize, true);
    },

    getElementFromPoint(x, y) {
      this.element.style.pointerEvents = "none";
      let el;
      try {
        el = document.elementFromPoint(x, y);
      } finally {
        this.element.style.pointerEvents = "";
      }
      return el;
    },

    remove() {
      this.stopSizeWatch();
      util.removeNode(this.element);
      this.element = this.document = null;
    }
  };

  iframeSelection.onResize = watchFunction(assertIsTrusted(onResize.bind(iframeSelection)), true);

  const iframePreSelection = exports.iframePreSelection = {
    element: null,
    document: null,
    display(installHandlerOnDocument, standardOverlayCallbacks) {
      return new Promise((resolve, reject) => {
        if (!this.element) {
          this.element = initializeIframe();
          this.element.id = "firefox-screenshots-preselection-iframe";
          this.element.style.setProperty("position", "fixed", "important");
          this.element.style.width = "100%";
          this.element.style.height = "100%";
          this.element.addEventListener("load", watchFunction(() => {
            this.document = this.element.contentDocument;
            assertIsBlankDocument(this.document)
            // eslint-disable-next-line no-unsanitized/property
            this.document.documentElement.innerHTML = `
               <head>
                <style>${substitutedCss}</style>
                <title></title>
               </head>
               <body>
                 <div class="preview-overlay">
                   <div class="fixed-container">
                     <div class="face-container">
                       <div class="eye left"><div class="eyeball"></div></div>
                       <div class="eye right"><div class="eyeball"></div></div>
                       <div class="face"></div>
                     </div>
                     <div class="preview-instructions" data-l10n-id="screenshotInstructions"></div>
                     <button class="cancel-shot">${browser.i18n.getMessage("cancelScreenshot")}</button>
                     <div class="myshots-all-buttons-container">
                       ${isDownloadOnly() ? "" : `
                         <button class="myshots-button" tabindex="1" data-l10n-id="myShotsLink"></button>
                         <div class="spacer"></div>
                       `}
                       <button class="visible" tabindex="2" data-l10n-id="saveScreenshotVisibleArea"></button>
                       <button class="full-page" tabindex="3" data-l10n-id="saveScreenshotFullPage"></button>
                     </div>
                   </div>
                 </div>
               </body>`;
            installHandlerOnDocument(this.document);
            if (this.addClassName) {
              this.document.body.className = this.addClassName;
            }
            this.document.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
            this.document.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
            const overlay = this.document.querySelector(".preview-overlay");
            localizeText(this.document);
            if (!(isDownloadOnly())) {
              overlay.querySelector(".myshots-button").addEventListener(
                "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onOpenMyShots)));
            }
            overlay.querySelector(".visible").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onClickVisible)));
            overlay.querySelector(".full-page").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onClickFullPage)));
            overlay.querySelector(".cancel-shot").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onClickCancel)));
            resolve();
          }), {once: true});
          document.body.appendChild(this.element);
        } else {
          resolve();
        }
      });
    },

    hide() {
      window.removeEventListener("scroll", watchFunction(assertIsTrusted(this.onScroll)));
      window.removeEventListener("resize", this.onResize, true);
      if (this.element) {
        this.element.style.display = "none";
      }
    },

    unhide() {
      window.addEventListener("scroll", watchFunction(assertIsTrusted(this.onScroll)));
      window.addEventListener("resize", this.onResize, true);
      this.element.style.display = "";
      catcher.watchPromise(callBackground("sendEvent", "internal", "unhide-preselection-frame"));
      if (highContrastCheck(this.element.contentWindow)) {
        this.element.contentDocument.body.classList.add("hcm");
      }
      this.element.focus();
    },

    onScroll() {
      exports.HoverBox.hide();
    },

    getElementFromPoint(x, y) {
      this.element.style.pointerEvents = "none";
      let el;
      try {
        el = document.elementFromPoint(x, y);
      } finally {
        this.element.style.pointerEvents = "";
      }
      return el;
    },

    remove() {
      this.hide();
      util.removeNode(this.element);
      this.element = null;
      this.document = null;
    }
  };

  const iframePreview = exports.iframePreview = {
    element: null,
    document: null,
    display(installHandlerOnDocument, standardOverlayCallbacks) {
      return new Promise((resolve, reject) => {
        if (!this.element) {
          this.element = initializeIframe();
          this.element.id = "firefox-screenshots-preview-iframe";
          this.element.style.display = "none";
          this.element.style.setProperty("position", "fixed", "important");
          this.element.style.height = "100%";
          this.element.style.width = "100%";
          this.element.onload = watchFunction(() => {
            this.document = this.element.contentDocument;
            // eslint-disable-next-line no-unsanitized/property
            this.document.documentElement.innerHTML = `
              <head>
                <style>${substitutedCss}</style>
                <title></title>
              </head>
              <body>
                <div class="preview-overlay">
                  <div class="preview-image">
                    <div class="preview-buttons">
                      <button class="highlight-button-cancel"
                        data-l10n-title="cancelScreenshot"><img
                        src="${browser.extension.getURL("icons/cancel.svg")}" /></button>
                      <button class="highlight-button-copy"
                        data-l10n-title="copyScreenshot"><img
                        src="${browser.extension.getURL("icons/copy.svg")}" /></button>
                      ${isDownloadOnly() ?
                        `<button class="highlight-button-download download-only-button"
                          data-l10n-title="downloadScreenshot"><img
                          src="${browser.extension.getURL("icons/download.svg")}"
                          />${browser.i18n.getMessage("downloadScreenshot")}</button>` :
                        `<button class="highlight-button-download"
                          data-l10n-title="downloadScreenshot"><img
                          src="${browser.extension.getURL("icons/download.svg")}" /></button>
                         <button class="preview-button-save"
                          data-l10n-title="saveScreenshotSelectedArea"><img
                          src="${browser.extension.getURL("icons/cloud.svg")}"
                          />${browser.i18n.getMessage("saveScreenshotSelectedArea")}</button>`
                      }
                    </div>
                  </div>
                  <div class="loader" style="display:none">
                    <div class="loader-inner"></div>
                  </div>
                </div>
              </body>`;
            installHandlerOnDocument(this.document);
            this.document.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
            this.document.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
            localizeText(this.document);
            const overlay = this.document.querySelector(".preview-overlay");
            if (isDownloadOnly()) {
              overlay.appendChild(renderDownloadNotice(true));
            } else {
              overlay.querySelector(".preview-button-save").addEventListener(
                "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onSavePreview)));
            }
            overlay.querySelector(".highlight-button-copy").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onCopyPreview)));
            overlay.querySelector(".highlight-button-download").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onDownloadPreview)));
            overlay.querySelector(".highlight-button-cancel").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.cancel)));
            resolve();
          });
          document.body.appendChild(this.element);
        } else {
          resolve();
        }
      });
    },

    hide() {
      if (this.element) {
        this.element.style.display = "none";
      }
    },

    unhide() {
      this.element.style.display = "";
      catcher.watchPromise(callBackground("sendEvent", "internal", "unhide-preview-frame"));
      this.element.focus();
    },

    showLoader() {
      this.document.body.querySelector(".preview-image").style.display = "none";
      this.document.body.querySelector(".notice").style.display = "none";
      this.document.body.querySelector(".loader").style.display = "";
    },

    remove() {
      this.hide();
      util.removeNode(this.element);
      this.element = null;
      this.document = null;
    }
  };

  iframePreSelection.onResize = watchFunction(onResize.bind(iframePreSelection), true);

  const iframe = exports.iframe = {
    currentIframe: iframePreSelection,
    display(installHandlerOnDocument, standardOverlayCallbacks) {
      return iframeSelection.display(installHandlerOnDocument)
        .then(() => iframePreSelection.display(installHandlerOnDocument, standardOverlayCallbacks))
        .then(() => iframePreview.display(installHandlerOnDocument, standardOverlayCallbacks));
    },

    hide() {
      this.currentIframe.hide();
    },

    unhide() {
      this.currentIframe.unhide();
    },

    showLoader() {
      if (this.currentIframe.showLoader) {
        this.currentIframe.showLoader();
        this.currentIframe.unhide();
      }
    },

    getElementFromPoint(x, y) {
      return this.currentIframe.getElementFromPoint(x, y);
    },

    remove() {
      iframeSelection.remove();
      iframePreSelection.remove();
      iframePreview.remove();
    },

    document() {
      return this.currentIframe.document;
    },

    useSelection() {
      if (this.currentIframe === iframePreSelection || this.currentIframe === iframePreview) {
        this.hide();
      }
      this.currentIframe = iframeSelection;
      this.unhide();
    },

    usePreSelection() {
      if (this.currentIframe === iframeSelection || this.currentIframe === iframePreview) {
        this.hide();
      }
      this.currentIframe = iframePreSelection;
      this.unhide();
    },

    usePreview() {
      if (this.currentIframe === iframeSelection || this.currentIframe === iframePreSelection) {
        this.hide();
      }
      this.currentIframe = iframePreview;
      this.unhide();
    }
  };

  const movements = ["topLeft", "top", "topRight", "left", "right", "bottomLeft", "bottom", "bottomRight"];

  /** Creates the selection box */
  exports.Box = {

    display(pos, callbacks) {
      this._createEl();
      if (callbacks !== undefined && callbacks.cancel) {
        // We use onclick here because we don't want addEventListener
        // to add multiple event handlers to the same button
        this.cancel.onclick = watchFunction(assertIsTrusted(callbacks.cancel));
        this.cancel.style.display = "";
      } else {
        this.cancel.style.display = "none";
      }
      if (callbacks !== undefined && callbacks.save && this.save) {
        // We use onclick here because we don't want addEventListener
        // to add multiple event handlers to the same button
        this.save.removeAttribute("disabled");
        this.save.onclick = watchFunction(assertIsTrusted((e) => {
          this.save.setAttribute("disabled", "true");
          callbacks.save(e);
        }));
        this.save.style.display = "";
      } else if (this.save) {
        this.save.style.display = "none";
      }
      if (callbacks !== undefined && callbacks.download) {
        this.download.removeAttribute("disabled");
        this.download.onclick = watchFunction(assertIsTrusted((e) => {
          this.download.setAttribute("disabled", true);
          callbacks.download(e);
          e.preventDefault();
          e.stopPropagation();
          return false;
        }));
        this.download.style.display = "";
      } else {
        this.download.style.display = "none";
      }
      if (callbacks !== undefined && callbacks.copy) {
        this.copy.removeAttribute("disabled");
        this.copy.onclick = watchFunction(assertIsTrusted((e) => {
          this.copy.setAttribute("disabled", true);
          callbacks.copy(e);
          e.preventDefault();
          e.stopPropagation();
        }));
        this.copy.style.display = "";
      } else {
        this.copy.style.display = "none";
      }

      const winBottom = window.innerHeight;
      const pageYOffset = window.pageYOffset;

      if ((pos.right - pos.left) < 78 || (pos.bottom - pos.top) < 78) {
        this.el.classList.add("small-selection");
      } else {
        this.el.classList.remove("small-selection");
      }

      // if the selection bounding box is w/in SAVE_BUTTON_HEIGHT px of the bottom of
      // the window, flip controls into the box
      if (pos.bottom > ((winBottom + pageYOffset) - SAVE_BUTTON_HEIGHT)) {
        this.el.classList.add("bottom-selection");
      } else {
        this.el.classList.remove("bottom-selection");
      }

      if (pos.right < 200) {
        this.el.classList.add("left-selection");
      } else {
        this.el.classList.remove("left-selection");
      }
      this.el.style.top = `${pos.top}px`;
      this.el.style.left = `${pos.left}px`;
      this.el.style.height = `${pos.bottom - pos.top}px`;
      this.el.style.width = `${pos.right - pos.left}px`;
      this.bgTop.style.top = "0px";
      this.bgTop.style.height = `${pos.top}px`;
      this.bgTop.style.left = "0px";
      this.bgTop.style.width = "100%";
      this.bgBottom.style.top = `${pos.bottom}px`;
      this.bgBottom.style.height = "100vh";
      this.bgBottom.style.left = "0px";
      this.bgBottom.style.width = "100%";
      this.bgLeft.style.top = `${pos.top}px`;
      this.bgLeft.style.height = `${pos.bottom - pos.top}px`;
      this.bgLeft.style.left = "0px";
      this.bgLeft.style.width = `${pos.left}px`;
      this.bgRight.style.top = `${pos.top}px`;
      this.bgRight.style.height = `${pos.bottom - pos.top}px`;
      this.bgRight.style.left = `${pos.right}px`;
      this.bgRight.style.width = "100%";
      // the download notice is injected into an iframe that matches the document size
      // in order to reposition it on scroll we need to bind an updated positioning
      // function to some window events.
      this.repositionDownloadNotice = () => {
        if (this.downloadNotice) {
          const currentYOffset = window.pageYOffset;
          const currentWinBottom = window.innerHeight;
          this.downloadNotice.style.top = (currentYOffset + currentWinBottom - 60) + "px";
        }
      };

      if (this.downloadNotice) {
        this.downloadNotice.style.top = (pageYOffset + winBottom - 60) + "px";
        // event callbacks are delayed 100ms each to keep from overloading things
        this.windowChangeStop = this.delayExecution(100, this.repositionDownloadNotice);
        window.addEventListener("scroll", watchFunction(assertIsTrusted(this.windowChangeStop)));
        window.addEventListener("resize", watchFunction(assertIsTrusted(this.windowChangeStop)));
      }
    },

    // used to eventually move the download-only warning
    // when a user ends scrolling or ends resizing a window
    delayExecution(delay, cb) {
      let timer;
      return function() {
        if (typeof timer !== "undefined") {
          clearTimeout(timer);
        }
        timer = setTimeout(cb, delay);
      }
    },

    remove() {
      if (this.downloadNotice) {
        window.removeEventListener("scroll", this.windowChangeStop, true);
        window.removeEventListener("resize", this.windowChangeStop, true);
      }
      for (const name of ["el", "bgTop", "bgLeft", "bgRight", "bgBottom", "downloadNotice"]) {
        if (name in this) {
          util.removeNode(this[name]);
          this[name] = null;
        }
      }
    },

    _createEl() {
      let boxEl = this.el;
      if (boxEl) {
        return;
      }
      boxEl = makeEl("div", "highlight");
      const buttons = makeEl("div", "highlight-buttons");
      const cancel = makeEl("button", "highlight-button-cancel");
      const cancelImg = makeEl("img");
      cancelImg.src = browser.extension.getURL("icons/cancel.svg");
      cancel.title = browser.i18n.getMessage("cancelScreenshot");
      cancel.appendChild(cancelImg);
      buttons.appendChild(cancel);

      const copy = makeEl("button", "highlight-button-copy");
      copy.title = browser.i18n.getMessage("copyScreenshot");
      const copyImg = makeEl("img");
      copyImg.src = browser.extension.getURL("icons/copy.svg");
      copy.appendChild(copyImg);
      buttons.appendChild(copy);

      let download, save;

      if (isDownloadOnly()) {
        download = makeEl("button", "highlight-button-download download-only-button");
        const downloadImg = makeEl("img");
        downloadImg.src = browser.extension.getURL("icons/download.svg");
        download.appendChild(downloadImg);
        download.append(browser.i18n.getMessage("downloadScreenshot"));
        download.title = browser.i18n.getMessage("downloadScreenshot");
      } else {
        download = makeEl("button", "highlight-button-download");
        download.title = browser.i18n.getMessage("downloadScreenshot");
        const downloadImg = makeEl("img");
        downloadImg.src = browser.extension.getURL("icons/download.svg");
        download.appendChild(downloadImg);
        save = makeEl("button", "highlight-button-save");
        const saveImg = makeEl("img");
        saveImg.src = browser.extension.getURL("icons/cloud.svg");
        save.appendChild(saveImg);
        save.append(browser.i18n.getMessage("saveScreenshotSelectedArea"));
        save.title = browser.i18n.getMessage("saveScreenshotSelectedArea");
      }
      buttons.appendChild(download);
      if (save) {
        buttons.appendChild(save);
      }
      this.cancel = cancel;
      this.download = download;
      this.copy = copy;
      this.save = save;
      boxEl.appendChild(buttons);
      for (const name of movements) {
        const elTarget = makeEl("div", "mover-target direction-" + name);
        const elMover = makeEl("div", "mover");
        elTarget.appendChild(elMover);
        boxEl.appendChild(elTarget);
      }
      this.bgTop = makeEl("div", "bghighlight");
      iframe.document().body.appendChild(this.bgTop);
      this.bgLeft = makeEl("div", "bghighlight");
      iframe.document().body.appendChild(this.bgLeft);
      this.bgRight = makeEl("div", "bghighlight");
      iframe.document().body.appendChild(this.bgRight);
      this.bgBottom = makeEl("div", "bghighlight");
      iframe.document().body.appendChild(this.bgBottom);
      iframe.document().body.appendChild(boxEl);
      if (isDownloadOnly()) {
        this.downloadNotice = renderDownloadNotice();
        iframe.document().body.appendChild(this.downloadNotice);
      }
      this.el = boxEl;
    },

    draggerDirection(target) {
      while (target) {
        if (target.nodeType === document.ELEMENT_NODE) {
          if (target.classList.contains("mover-target")) {
            for (const name of movements) {
              if (target.classList.contains("direction-" + name)) {
                return name;
              }
            }
            catcher.unhandled(new Error("Surprising mover element"), {element: target.outerHTML});
            log.warn("Got mover-target that wasn't a specific direction");
          }
        }
        target = target.parentNode;
      }
      return null;
    },

    isSelection(target) {
      while (target) {
        if (target.tagName === "BUTTON") {
          return false;
        }
        if (target.nodeType === document.ELEMENT_NODE && target.classList.contains("highlight")) {
          return true;
        }
        target = target.parentNode;
      }
      return false;
    },

    isControl(target) {
      while (target) {
        if (target.nodeType === document.ELEMENT_NODE && target.classList.contains("highlight-buttons")) {
          return true;
        }
        target = target.parentNode;
      }
      return false;
    },

    clearSaveDisabled() {
      if (!this.save) {
        // Happens if we try to remove the disabled status after the worker
        // has been shut down
        return;
      }
      this.save.removeAttribute("disabled");
    },

    el: null,
    boxTopEl: null,
    boxLeftEl: null,
    boxRightEl: null,
    boxBottomEl: null
  };

  exports.HoverBox = {

    el: null,

    display(rect) {
      if (!this.el) {
        this.el = makeEl("div", "hover-highlight");
        iframe.document().body.appendChild(this.el);
      }
      this.el.style.display = "";
      this.el.style.top = (rect.top - 1) + "px";
      this.el.style.left = (rect.left - 1) + "px";
      this.el.style.width = (rect.right - rect.left + 2) + "px";
      this.el.style.height = (rect.bottom - rect.top + 2) + "px";
    },

    hide() {
      if (this.el) {
        this.el.style.display = "none";
      }
      if (this.downloadNotice) {
        this.downloadNotice.display = "none";
      }
    },

    remove() {
      util.removeNode(this.el);
      this.el = null;
    }
  };

  exports.PixelDimensions = {
    el: null,
    xEl: null,
    yEl: null,
    display(xPos, yPos, x, y) {
      if (!this.el) {
        this.el = makeEl("div", "pixel-dimensions");
        this.xEl = makeEl("div");
        this.el.appendChild(this.xEl);
        this.yEl = makeEl("div");
        this.el.appendChild(this.yEl);
        iframe.document().body.appendChild(this.el);
      }
      this.xEl.textContent = x;
      this.yEl.textContent = y;
      this.el.style.top = (yPos + 12) + "px";
      this.el.style.left = (xPos + 12) + "px";
    },
    remove() {
      util.removeNode(this.el);
      this.el = this.xEl = this.yEl = null;
    }
  };

  exports.Preview = {
    display(dataUrl, showCropWarning) {
      const img = makeEl("IMG");
      const imgBlob = blobConverters.dataUrlToBlob(dataUrl);
      img.src = URL.createObjectURL(imgBlob);
      iframe.document().querySelector(".preview-image").appendChild(img);
      if (showCropWarning && !(isDownloadOnly())) {
        const imageCroppedEl = makeEl("table", "notice");
        imageCroppedEl.style.bottom = "10px";
        imageCroppedEl.innerHTML = `<tbody>
          <tr class="notice-wrapper">
            <td class="notice-content"></td>
          </tr>
        </tbody>`;
        const contentCell = imageCroppedEl.getElementsByTagName("td");
        contentCell[0].textContent = browser.i18n.getMessage("imageCroppedWarning", buildSettings.maxImageHeight);
        iframe.document().querySelector(".preview-overlay").appendChild(imageCroppedEl);
      }
    }
  };

  /** Removes every UI this module creates */
  exports.remove = function() {
    for (const name in exports) {
      if (name.startsWith("iframe")) {
        continue;
      }
      if (typeof exports[name] === "object" && exports[name].remove) {
        exports[name].remove();
      }
    }
    exports.iframe.remove();
  };

  exports.triggerDownload = function(url, filename) {
    return catcher.watchPromise(callBackground("downloadShot", {url, filename}));
  };

  exports.unload = exports.remove;

  return exports;
})();
null;
PK
!<ީ��y�y"webextension/selector/uicontrol.js/* globals log, catcher, util, ui, slides */
/* globals shooter, callBackground, selectorLoader, assertIsTrusted, buildSettings */

"use strict";

this.uicontrol = (function() {
  const exports = {};

  /** ********************************************************
   * selection
   */

  /* States:

  "crosshairs":
    Nothing has happened, and the crosshairs will follow the movement of the mouse
  "draggingReady":
    The user has pressed the mouse button, but hasn't moved enough to create a selection
  "dragging":
    The user has pressed down a mouse button, and is dragging out an area far enough to show a selection
  "selected":
    The user has selected an area
  "resizing":
    The user is resizing the selection
  "cancelled":
    Everything has been cancelled
  "previewing":
    The user is previewing the full-screen/visible image

  A mousedown goes from crosshairs to dragging.
  A mouseup goes from dragging to selected
  A click outside of the selection goes from selected to crosshairs
  A click on one of the draggers goes from selected to resizing

  State variables:

  state (string, one of the above)
  mousedownPos (object with x/y during draggingReady, shows where the selection started)
  selectedPos (object with x/y/h/w during selected or dragging, gives the entire selection)
  resizeDirection (string: top, topLeft, etc, during resizing)
  resizeStartPos (x/y position where resizing started)
  mouseupNoAutoselect (true if a mouseup in draggingReady should not trigger autoselect)

  */

  const { watchFunction, watchPromise } = catcher;

  const MAX_PAGE_HEIGHT = buildSettings.maxImageHeight;
  const MAX_PAGE_WIDTH = buildSettings.maxImageWidth;
  // An autoselection smaller than these will be ignored entirely:
  const MIN_DETECT_ABSOLUTE_HEIGHT = 10;
  const MIN_DETECT_ABSOLUTE_WIDTH = 30;
  // An autoselection smaller than these will not be preferred:
  const MIN_DETECT_HEIGHT = 30;
  const MIN_DETECT_WIDTH = 100;
  // An autoselection bigger than either of these will be ignored:
  const MAX_DETECT_HEIGHT = Math.max(window.innerHeight + 100, 700);
  const MAX_DETECT_WIDTH = Math.max(window.innerWidth + 100, 1000);
  // This is how close (in pixels) you can get to the edge of the window and then
  // it will scroll:
  const SCROLL_BY_EDGE = 20;
  // This is how wide the inboard scrollbars are, generally 0 except on Mac
  const SCROLLBAR_WIDTH = (window.navigator.platform.match(/Mac/i)) ? 17 : 0;


  const { sendEvent } = shooter;
  const log = global.log;

  function round10(n) {
    return Math.floor(n / 10) * 10;
  }

  function eventOptionsForBox(box) {
    return {
      cd1: round10(Math.abs(box.bottom - box.top)),
      cd2: round10(Math.abs(box.right - box.left))
    };
  }

  function eventOptionsForResize(boxStart, boxEnd) {
    return {
      cd1: round10(
        (boxEnd.bottom - boxEnd.top)
        - (boxStart.bottom - boxStart.top)),
      cd2: round10(
        (boxEnd.right - boxEnd.left)
        - (boxStart.right - boxStart.left))
    };
  }

  function eventOptionsForMove(posStart, posEnd) {
    return {
      cd1: round10(posEnd.y - posStart.y),
      cd2: round10(posEnd.x - posStart.x)
    };
  }

  function downloadShot() {
    const previewDataUrl = (captureType === "fullPageTruncated") ? null : dataUrl;
    // Downloaded shots don't have dimension limits
    removeDimensionLimitsOnFullPageShot();
    shooter.downloadShot(selectedPos, previewDataUrl, captureType);
  }

  function copyShot() {
    const previewDataUrl = (captureType === "fullPageTruncated") ? null : dataUrl;
    // Copied shots don't have dimension limits
    removeDimensionLimitsOnFullPageShot();
    shooter.copyShot(selectedPos, previewDataUrl, captureType);
  }

  /** *********************************************
   * State and stateHandlers infrastructure
   */

  // This enumerates all the anchors on the selection, and what part of the
  // selection they move:
  const movements = {
    topLeft: ["x1", "y1"],
    top: [null, "y1"],
    topRight: ["x2", "y1"],
    left: ["x1", null],
    right: ["x2", null],
    bottomLeft: ["x1", "y2"],
    bottom: [null, "y2"],
    bottomRight: ["x2", "y2"],
    move: ["*", "*"]
  };

  const doNotAutoselectTags = {
    H1: true,
    H2: true,
    H3: true,
    H4: true,
    H5: true,
    H6: true
  };

  let captureType;

  function removeDimensionLimitsOnFullPageShot() {
    if (captureType === "fullPageTruncated") {
      captureType = "fullPage";
      selectedPos = new Selection(
        0, 0,
        getDocumentWidth(), getDocumentHeight());
    }
  }

  const standardDisplayCallbacks = {
    cancel: () => {
      sendEvent("cancel-shot", "overlay-cancel-button");
      exports.deactivate();
    }, save: () => {
      sendEvent("save-shot", "overlay-save-button");
      shooter.takeShot("selection", selectedPos);
    }, download: () => {
      sendEvent("download-shot", "overlay-download-button");
      downloadShot();
    }, copy: () => {
      sendEvent("copy-shot", "overlay-copy-button");
      copyShot();
    }
  };

  const standardOverlayCallbacks = {
    cancel: () => {
      sendEvent("cancel-shot", "cancel-preview-button");
      exports.deactivate();
    },
    onClickCancel: e => {
      sendEvent("cancel-shot", "cancel-selection-button");
      e.preventDefault();
      e.stopPropagation();
      exports.deactivate();
    },
    onOpenMyShots: () => {
      sendEvent("goto-myshots", "selection-button");
      callBackground("openMyShots")
        .then(() => exports.deactivate())
        .catch(() => {
          // Handled in communication.js
        });
    },
    onClickVisible: () => {
      sendEvent("capture-visible", "selection-button");
      selectedPos = new Selection(
        window.scrollX, window.scrollY,
        window.scrollX + window.innerWidth, window.scrollY + window.innerHeight);
      captureType = "visible";
      setState("previewing");
    },
    onClickFullPage: () => {
      sendEvent("capture-full-page", "selection-button");
      captureType = "fullPage";
      let width = getDocumentWidth();
      if (width > MAX_PAGE_WIDTH) {
        captureType = "fullPageTruncated";
      }
      width = Math.min(width, MAX_PAGE_WIDTH);
      let height = getDocumentHeight();
      if (height > MAX_PAGE_HEIGHT) {
        captureType = "fullPageTruncated";
      }
      height = Math.min(height, MAX_PAGE_HEIGHT);
      selectedPos = new Selection(
        0, 0,
        width, height);
      setState("previewing");
    },
    onSavePreview: () => {
      sendEvent(`save-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "save-preview-button");
      shooter.takeShot(captureType, selectedPos, dataUrl);
    },
    onDownloadPreview: () => {
      sendEvent(`download-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "download-preview-button");
      downloadShot();
    },
    onCopyPreview: () => {
      sendEvent(`copy-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "copy-preview-button");
      copyShot();
    }
  };

  /** Holds all the objects that handle events for each state: */
  const stateHandlers = {};

  function getState() {
    return getState.state;
  }
  getState.state = "cancel";

  function setState(s) {
    if (!stateHandlers[s]) {
      throw new Error("Unknown state: " + s);
    }
    const cur = getState.state;
    const handler = stateHandlers[cur];
    if (handler.end) {
      handler.end();
    }
    getState.state = s;
    if (stateHandlers[s].start) {
      stateHandlers[s].start();
    }
  }

  /** Various values that the states use: */
  let mousedownPos;
  let selectedPos;
  let resizeDirection;
  let resizeStartPos;
  let resizeStartSelected;
  let resizeHasMoved;
  let mouseupNoAutoselect = false;
  let autoDetectRect;

  /** Represents a selection box: */
  class Selection {
    constructor(x1, y1, x2, y2) {
      this.x1 = x1;
      this.y1 = y1;
      this.x2 = x2;
      this.y2 = y2;
    }

    rect() {
      return {
        top: Math.floor(this.top),
        left: Math.floor(this.left),
        bottom: Math.floor(this.bottom),
        right: Math.floor(this.right)
      };
    }

    get top() {
      return Math.min(this.y1, this.y2);
    }
    set top(val) {
      if (this.y1 < this.y2) {
        this.y1 = val;
      } else {
        this.y2 = val;
      }
    }

    get bottom() {
      return Math.max(this.y1, this.y2);
    }
    set bottom(val) {
      if (this.y1 > this.y2) {
        this.y1 = val;
      } else {
        this.y2 = val;
      }
    }

    get left() {
      return Math.min(this.x1, this.x2);
    }
    set left(val) {
      if (this.x1 < this.x2) {
        this.x1 = val;
      } else {
        this.x2 = val;
      }
    }

    get right() {
      return Math.max(this.x1, this.x2);
    }
    set right(val) {
      if (this.x1 > this.x2) {
        this.x1 = val;
      } else {
        this.x2 = val;
      }
    }

    get width() {
      return Math.abs(this.x1 - this.x2);
    }
    get height() {
      return Math.abs(this.y1 - this.y2);
    }

    /** Sort x1/x2 and y1/y2 so x1<x2, y1<y2 */
    sortCoords() {
      if (this.x1 > this.x2) {
        const tmp = this.x2;
        this.x2 = this.x1;
        this.x1 = tmp;
      }
      if (this.y1 > this.y2) {
        const tmp = this.y2;
        this.y2 = this.y1;
        this.y1 = tmp;
      }
    }

    union(other) {
      return new Selection(
        Math.min(this.left, other.left),
        Math.min(this.top, other.top),
        Math.max(this.right, other.right),
        Math.max(this.bottom, other.bottom)
      );
    }

    clone() {
      return new Selection(this.x1, this.y1, this.x2, this.y2);
    }

    asJson() {
      return {
        left: this.left,
        right: this.right,
        top: this.top,
        bottom: this.bottom
      };
    }
  }

  Selection.getBoundingClientRect = function(el) {
    if (!el.getBoundingClientRect) {
      // Typically the <html> element or somesuch
      return null;
    }
    const rect = el.getBoundingClientRect();
    if (!rect) {
      return null;
    }
    return new Selection(rect.left, rect.top, rect.right, rect.bottom);
  };

  /** Represents a single x/y point, typically for a mouse click that doesn't have a drag: */
  class Pos {
    constructor(x, y) {
      this.x = x;
      this.y = y;
    }

    elementFromPoint() {
      return ui.iframe.getElementFromPoint(
        this.x - window.pageXOffset,
        this.y - window.pageYOffset
      );
    }

    distanceTo(x, y) {
      return Math.sqrt(Math.pow(this.x - x, 2) + Math.pow(this.y - y, 2));
    }
  }

  /** *********************************************
   * all stateHandlers
   */

  let dataUrl;

  stateHandlers.previewing = {
    start() {
      dataUrl = shooter.screenshotPage(selectedPos, captureType);
      ui.iframe.usePreview();
      ui.Preview.display(dataUrl, captureType === "fullPageTruncated");
    }
  };

  stateHandlers.onboarding = {
    start() {
      if (typeof slides === "undefined") {
        throw new Error("Attempted to set state to onboarding without loading slides");
      }
      sendEvent("internal", "unhide-onboarding-frame");
      catcher.watchPromise(slides.display({
        onEnd: this.slidesOnEnd.bind(this)
      }));
    },

    slidesOnEnd() {
      callBackground("hasSeenOnboarding");
      setState("crosshairs");
    },

    end() {
      slides.remove();
    }
  };

  stateHandlers.crosshairs = {

    cachedEl: null,

    start() {
      selectedPos = mousedownPos = null;
      this.cachedEl = null;
      watchPromise(ui.iframe.display(installHandlersOnDocument, standardOverlayCallbacks).then(() => {
        ui.iframe.usePreSelection();
        ui.Box.remove();
      }));
    },

    mousemove(event) {
      ui.PixelDimensions.display(event.pageX, event.pageY, event.pageX, event.pageY);
      if (event.target.classList &&
          (!event.target.classList.contains("preview-overlay"))) {
        // User is hovering over a toolbar button or control
        autoDetectRect = null;
        if (this.cachedEl) {
          this.cachedEl = null;
        }
        ui.HoverBox.hide();
        return;
      }
      let el;
      if (event.target.classList && event.target.classList.contains("preview-overlay")) {
        // The hover is on the overlay, so we need to figure out the real element
        el = ui.iframe.getElementFromPoint(
          event.pageX + window.scrollX - window.pageXOffset,
          event.pageY + window.scrollY - window.pageYOffset
        );
        const xpos = Math.floor(10 * (event.pageX - window.innerWidth / 2) / window.innerWidth);
        const ypos = Math.floor(10 * (event.pageY - window.innerHeight / 2) / window.innerHeight)

        for (let i = 0; i < 2; i++) {
          const move = `translate(${xpos}px, ${ypos}px)`;
          event.target.getElementsByClassName("eyeball")[i].style.transform = move;
        }
      } else {
        // The hover is on the element we care about, so we use that
        el = event.target;
      }
      if (this.cachedEl && this.cachedEl === el) {
        // Still hovering over the same element
        return;
      }
      this.cachedEl = el;
      this.setAutodetectBasedOnElement(el);
    },

    setAutodetectBasedOnElement(el) {
      let lastRect;
      let lastNode;
      let rect;
      let attemptExtend = false;
      let node = el;
      while (node) {
        rect = Selection.getBoundingClientRect(node);
        if (!rect) {
          rect = lastRect;
          break;
        }
        if (rect.width < MIN_DETECT_WIDTH || rect.height < MIN_DETECT_HEIGHT) {
          // Avoid infinite loop for elements with zero or nearly zero height,
          // like non-clearfixed float parents with or without borders.
          break;
        }
        if (rect.width > MAX_DETECT_WIDTH || rect.height > MAX_DETECT_HEIGHT) {
          // Then the last rectangle is better
          rect = lastRect;
          attemptExtend = true;
          break;
        }
        if (rect.width >= MIN_DETECT_WIDTH && rect.height >= MIN_DETECT_HEIGHT) {
          if (!doNotAutoselectTags[node.tagName]) {
            break;
          }
        }
        lastRect = rect;
        lastNode = node;
        node = node.parentNode;
      }
      if (rect && node) {
        const evenBetter = this.evenBetterElement(node, rect);
        if (evenBetter) {
          node = lastNode = evenBetter;
          rect = Selection.getBoundingClientRect(evenBetter);
          attemptExtend = false;
        }
      }
      if (rect && attemptExtend) {
        let extendNode = lastNode.nextSibling;
        while (extendNode) {
          if (extendNode.nodeType === document.ELEMENT_NODE) {
            break;
          }
          extendNode = extendNode.nextSibling;
          if (!extendNode) {
            const parent = lastNode.parentNode;
            for (let i = 0; i < parent.childNodes.length; i++) {
              if (parent.childNodes[i] === lastNode) {
                extendNode = parent.childNodes[i + 1];
              }
            }
          }
        }
        if (extendNode) {
          const extendSelection = Selection.getBoundingClientRect(extendNode);
          const extendRect = rect.union(extendSelection);
          if (extendRect.width <= MAX_DETECT_WIDTH && extendRect.height <= MAX_DETECT_HEIGHT) {
            rect = extendRect;
          }
        }
      }

      if (rect && (rect.width < MIN_DETECT_ABSOLUTE_WIDTH || rect.height < MIN_DETECT_ABSOLUTE_HEIGHT)) {
        rect = null;
      }
      if (!rect) {
        ui.HoverBox.hide();
      } else {
        ui.HoverBox.display(rect);
      }
      autoDetectRect = rect;
    },

    /** When we find an element, maybe there's one that's just a little bit better... */
    evenBetterElement(node, origRect) {
      let el = node.parentNode;
      const ELEMENT_NODE = document.ELEMENT_NODE;
      while (el && el.nodeType === ELEMENT_NODE) {
        if (!el.getAttribute) {
          return null;
        }
        const role = el.getAttribute("role");
        if (role === "article" || (el.className && typeof el.className === "string" && el.className.search("tweet ") !== -1)) {
          const rect = Selection.getBoundingClientRect(el);
          if (!rect) {
            return null;
          }
          if (rect.width <= MAX_DETECT_WIDTH && rect.height <= MAX_DETECT_HEIGHT) {
            return el;
          }
          return null;
        }
        el = el.parentNode;
      }
      return null;
    },

    mousedown(event) {
      // FIXME: this is happening but we don't know why, we'll track it now
      // but avoid popping up messages:
      if (typeof ui === "undefined") {
        const exc = new Error("Undefined ui in mousedown");
        exc.unloadTime = unloadTime;
        exc.nowTime = Date.now();
        exc.noPopup = true;
        throw exc;
      }
      if (ui.isHeader(event.target)) {
        return undefined;
      }
      // If the pageX is greater than this, then probably it's an attempt to get
      // to the scrollbar, or an actual scroll, and not an attempt to start the
      // selection:
      const maxX = window.innerWidth - SCROLLBAR_WIDTH;
      if (event.pageX >= maxX) {
        event.stopPropagation();
        event.preventDefault();
        return false;
      }

      mousedownPos = new Pos(event.pageX + window.scrollX, event.pageY + window.scrollY);
      setState("draggingReady");
      event.stopPropagation();
      event.preventDefault();
      return false;
    },

    end() {
      ui.HoverBox.remove();
      ui.PixelDimensions.remove();
    }
  };

  stateHandlers.draggingReady = {
    minMove: 40, // px
    minAutoImageWidth: 40,
    minAutoImageHeight: 40,
    maxAutoElementWidth: 800,
    maxAutoElementHeight: 600,

    start() {
      ui.iframe.usePreSelection();
      ui.Box.remove();
    },

    mousemove(event) {
      if (mousedownPos.distanceTo(event.pageX, event.pageY) > this.minMove) {
        selectedPos = new Selection(
          mousedownPos.x,
          mousedownPos.y,
          event.pageX + window.scrollX,
          event.pageY + window.scrollY);
        mousedownPos = null;
        setState("dragging");
      }
    },

    mouseup(event) {
      // If we don't get into "dragging" then we attempt an autoselect
      if (mouseupNoAutoselect) {
        sendEvent("cancel-selection", "selection-background-mousedown");
        setState("crosshairs");
        return false;
      }
      if (autoDetectRect) {
        selectedPos = autoDetectRect;
        selectedPos.x1 += window.scrollX;
        selectedPos.y1 += window.scrollY;
        selectedPos.x2 += window.scrollX;
        selectedPos.y2 += window.scrollY;
        autoDetectRect = null;
        mousedownPos = null;
        ui.iframe.useSelection();
        ui.Box.display(selectedPos, standardDisplayCallbacks);
        sendEvent("make-selection", "selection-click", eventOptionsForBox(selectedPos));
        setState("selected");
        sendEvent("autoselect");
      } else {
        sendEvent("no-selection", "no-element-found");
        setState("crosshairs");
      }
      return undefined;
    },

    click(event) {
      this.mouseup(event);
    },

    findGoodEl() {
      let el = mousedownPos.elementFromPoint();
      if (!el) {
        return null;
      }
      const isGoodEl = (el) => {
        if (el.nodeType !== document.ELEMENT_NODE) {
          return false;
        }
        if (el.tagName === "IMG") {
          const rect = el.getBoundingClientRect();
          return rect.width >= this.minAutoImageWidth && rect.height >= this.minAutoImageHeight;
        }
        const display = window.getComputedStyle(el).display;
        if (["block", "inline-block", "table"].includes(display)) {
          return true;
          // FIXME: not sure if this is useful:
          // let rect = el.getBoundingClientRect();
          // return rect.width <= this.maxAutoElementWidth && rect.height <= this.maxAutoElementHeight;
        }
        return false;
      };
      while (el) {
        if (isGoodEl(el)) {
          return el;
        }
        el = el.parentNode;
      }
      return null;
    },

    end() {
      mouseupNoAutoselect = false;
    }

  };

  stateHandlers.dragging = {

    start() {
      ui.iframe.useSelection();
      ui.Box.display(selectedPos);
    },

    mousemove(event) {
      selectedPos.x2 = util.truncateX(event.pageX);
      selectedPos.y2 = util.truncateY(event.pageY);
      scrollIfByEdge(event.pageX, event.pageY);
      ui.Box.display(selectedPos);
      ui.PixelDimensions.display(event.pageX, event.pageY, selectedPos.width, selectedPos.height);
    },

    mouseup(event) {
      selectedPos.x2 = util.truncateX(event.pageX);
      selectedPos.y2 = util.truncateY(event.pageY);
      ui.Box.display(selectedPos, standardDisplayCallbacks);
      sendEvent(
        "make-selection", "selection-drag",
        eventOptionsForBox({
          top: selectedPos.y1,
          bottom: selectedPos.y2,
          left: selectedPos.x1,
          right: selectedPos.x2
        }));
      setState("selected");
    },

    end() {
      ui.PixelDimensions.remove();
    }
  };

  stateHandlers.selected = {
    start() {
      ui.iframe.useSelection();
    },

    mousedown(event) {
      const target = event.target;
      if (target.tagName === "HTML") {
        // This happens when you click on the scrollbar
        return undefined;
      }
      const direction = ui.Box.draggerDirection(target);
      if (direction) {
        sendEvent("start-resize-selection", "handle");
        stateHandlers.resizing.startResize(event, direction);
      } else if (ui.Box.isSelection(target)) {
        sendEvent("start-move-selection", "selection");
        stateHandlers.resizing.startResize(event, "move");
      } else if (!ui.Box.isControl(target)) {
        mousedownPos = new Pos(event.pageX, event.pageY);
        setState("crosshairs");
      }
      event.preventDefault();
      return false;
    }
  };

  stateHandlers.resizing = {
    start() {
      ui.iframe.useSelection();
      selectedPos.sortCoords();
    },

    startResize(event, direction) {
      selectedPos.sortCoords();
      resizeDirection = direction;
      resizeStartPos = new Pos(event.pageX, event.pageY);
      resizeStartSelected = selectedPos.clone();
      resizeHasMoved = false;
      setState("resizing");
    },

    mousemove(event) {
      this._resize(event);
      return false;
    },

    mouseup(event) {
      this._resize(event);
      sendEvent("selection-resized");
      ui.Box.display(selectedPos, standardDisplayCallbacks);
      if (resizeHasMoved) {
        if (resizeDirection === "move") {
          const startPos = new Pos(resizeStartSelected.left, resizeStartSelected.top);
          const endPos = new Pos(selectedPos.left, selectedPos.top);
          sendEvent(
            "move-selection", "mouseup",
            eventOptionsForMove(startPos, endPos));
        } else {
          sendEvent(
            "resize-selection", "mouseup",
            eventOptionsForResize(resizeStartSelected, selectedPos));
        }
      } else if (resizeDirection === "move") {
        sendEvent("keep-resize-selection", "mouseup");
      } else {
        sendEvent("keep-move-selection", "mouseup");
      }
      setState("selected");
    },

    _resize(event) {
      const diffX = event.pageX - resizeStartPos.x;
      const diffY = event.pageY - resizeStartPos.y;
      const movement = movements[resizeDirection];
      if (movement[0]) {
        let moveX = movement[0];
        moveX = moveX === "*" ? ["x1", "x2"] : [moveX];
        for (const moveDir of moveX) {
          selectedPos[moveDir] =  util.truncateX(resizeStartSelected[moveDir] + diffX);
        }
      }
      if (movement[1]) {
        let moveY = movement[1];
        moveY = moveY === "*" ? ["y1", "y2"] : [moveY];
        for (const moveDir of moveY) {
          selectedPos[moveDir] = util.truncateY(resizeStartSelected[moveDir] + diffY);
        }
      }
      if (diffX || diffY) {
        resizeHasMoved = true;
      }
      scrollIfByEdge(event.pageX, event.pageY);
      ui.Box.display(selectedPos);
    },

    end() {
      resizeDirection = resizeStartPos = resizeStartSelected = null;
      selectedPos.sortCoords();
    }
  };

  stateHandlers.cancel = {
    start() {
      ui.iframe.hide();
      ui.Box.remove();
    }
  };

  function getDocumentWidth() {
    return Math.max(
      document.body && document.body.clientWidth,
      document.documentElement.clientWidth,
      document.body && document.body.scrollWidth,
      document.documentElement.scrollWidth);
  }
  function getDocumentHeight() {
    return Math.max(
      document.body && document.body.clientHeight,
      document.documentElement.clientHeight,
      document.body && document.body.scrollHeight,
      document.documentElement.scrollHeight);
  }

  function scrollIfByEdge(pageX, pageY) {
    const top = window.scrollY;
    const bottom = top + window.innerHeight;
    const left = window.scrollX;
    const right = left + window.innerWidth;
    if (pageY + SCROLL_BY_EDGE >= bottom && bottom < getDocumentHeight()) {
      window.scrollBy(0, SCROLL_BY_EDGE);
    } else if (pageY - SCROLL_BY_EDGE <= top) {
      window.scrollBy(0, -SCROLL_BY_EDGE);
    }
    if (pageX + SCROLL_BY_EDGE >= right && right < getDocumentWidth()) {
      window.scrollBy(SCROLL_BY_EDGE, 0);
    } else if (pageX - SCROLL_BY_EDGE <= left) {
      window.scrollBy(-SCROLL_BY_EDGE, 0);
    }
  }

  /** *********************************************
   * Selection communication
   */

   // If the slides module is loaded then we're supposed to onboard
  const shouldOnboard = typeof slides !== "undefined";

  exports.activate = function() {
    if (!document.body) {
      callBackground("abortStartShot");
      const tagName = String(document.documentElement.tagName || "").replace(/[^a-z0-9]/ig, "");
      sendEvent("abort-start-shot", `document-is-${tagName}`);
      selectorLoader.unloadModules();
      return;
    }
    if (isFrameset()) {
      callBackground("abortStartShot");
      sendEvent("abort-start-shot", "frame-page");
      selectorLoader.unloadModules();
      return;
    }
    addHandlers();
    if (shouldOnboard) {
      setState("onboarding");
    } else {
      setState("crosshairs");
    }
  }

  function isFrameset() {
    return document.body.tagName === "FRAMESET";
  }

  exports.deactivate = function() {
    try {
      sendEvent("internal", "deactivate");
      setState("cancel");
      callBackground("closeSelector");
      selectorLoader.unloadModules();
    } catch (e) {
      log.error("Error in deactivate", e)
      // Sometimes this fires so late that the document isn't available
      // We don't care about the exception, so we swallow it here
    }
  };

  let unloadTime = 0;

  exports.unload = function() {
    // Note that ui.unload() will be called on its own
    unloadTime = Date.now();
    removeHandlers();
  };

  /** *********************************************
   * Event handlers
   */

  const primedDocumentHandlers = new Map();
  let registeredDocumentHandlers = []

  function addHandlers() {
    ["mouseup", "mousedown", "mousemove", "click"].forEach((eventName) => {
      const fn = watchFunction(assertIsTrusted((function(eventName, event) {
        if (typeof event.button === "number" && event.button !== 0) {
          // Not a left click
          return undefined;
        }
        if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {
          // Modified click of key
          return undefined;
        }
        const state = getState();
        const handler = stateHandlers[state];
        if (handler[eventName]) {
          return handler[eventName](event);
        }
        return undefined;
      }).bind(null, eventName)));
      primedDocumentHandlers.set(eventName, fn);
    });
    primedDocumentHandlers.set("keyup", watchFunction(assertIsTrusted(keyupHandler)));
    primedDocumentHandlers.set("keydown", watchFunction(assertIsTrusted(keydownHandler)));
    window.document.addEventListener("visibilitychange", visibilityChangeHandler);
    window.addEventListener("beforeunload", beforeunloadHandler);
  }

  let mousedownSetOnDocument = false;

  function installHandlersOnDocument(docObj) {
    for (const [eventName, handler] of primedDocumentHandlers) {
      const watchHandler = watchFunction(handler);
      const useCapture = eventName !== "keyup";
      docObj.addEventListener(eventName, watchHandler, useCapture);
      registeredDocumentHandlers.push({name: eventName, doc: docObj, handler: watchHandler, useCapture});
    }
    if (!mousedownSetOnDocument) {
      const mousedownHandler = primedDocumentHandlers.get("mousedown");
      document.addEventListener("mousedown", mousedownHandler, true);
      registeredDocumentHandlers.push({name: "mousedown", doc: document, handler: mousedownHandler, useCapture: true});
      mousedownSetOnDocument = true;
    }
  }

  function beforeunloadHandler() {
    sendEvent("cancel-shot", "tab-load");
    exports.deactivate();
  }

  function keydownHandler(event) {
    // In MacOS, the keyup event for 'c' is not fired when performing cmd+c.
    if (event.code === "KeyC" && (event.ctrlKey || event.metaKey)
        && ["previewing", "selected"].includes(getState.state)) {
      catcher.watchPromise(callBackground("getPlatformOs").then(os => {
        if ((event.ctrlKey && os !== "mac") ||
            (event.metaKey && os === "mac")) {
          sendEvent("copy-shot", "keyboard-copy");
          copyShot();
        }
      }));
    }
  }

  function keyupHandler(event) {
    if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) {
      // unused modifier keys
      return;
    }
    if ((event.key || event.code) === "Escape") {
      sendEvent("cancel-shot", "keyboard-escape");
      exports.deactivate();
    }
    // Enter to trigger Save or Download by default. But if the user tabbed to
    // select another button, then we do not want this.
    if ((event.key || event.code) === "Enter"
        && getState.state === "selected"
        && ui.iframe.document().activeElement.tagName === "BODY") {
      if (ui.isDownloadOnly()) {
        sendEvent("download-shot", "keyboard-enter");
        downloadShot();
      } else {
        sendEvent("save-shot", "keyboard-enter");
        shooter.takeShot("selection", selectedPos);
      }
    }
  }

  function visibilityChangeHandler(event) {
    // The document is the event target
    if (event.target.hidden) {
      sendEvent("internal", "document-hidden");
    }
  }

  function removeHandlers() {
    window.removeEventListener("beforeunload", beforeunloadHandler);
    window.document.removeEventListener("visibilitychange", visibilityChangeHandler);
    for (const {name, doc, handler, useCapture} of registeredDocumentHandlers) {
      doc.removeEventListener(name, handler, !!useCapture);
    }
    registeredDocumentHandlers = [];
  }

  catcher.watchFunction(exports.activate)();

  return exports;
})();

null;
PK
!<��kv��webextension/selector/util.js"use strict";

this.util = (function() { // eslint-disable-line no-unused-vars
  const exports = {};

  /** Removes a node from its document, if it's a node and the node is attached to a parent */
  exports.removeNode = function(el) {
    if (el && el.parentNode) {
      el.remove();
    }
  };

  /** Truncates the X coordinate to the document size */
  exports.truncateX = function(x) {
    const max = Math.max(document.documentElement.clientWidth, document.body.clientWidth, document.documentElement.scrollWidth, document.body.scrollWidth);
    if (x < 0) {
      return 0;
    } else if (x > max) {
      return max;
    }
    return x;
  };

  /** Truncates the Y coordinate to the document size */
  exports.truncateY = function(y) {
    const max = Math.max(document.documentElement.clientHeight, document.body.clientHeight, document.documentElement.scrollHeight, document.body.scrollHeight);
    if (y < 0) {
      return 0;
    } else if (y > max) {
      return max;
    }
    return y;
  };

  // Pixels of wiggle the captured region gets in captureSelectedText:
  const CAPTURE_WIGGLE = 10;
  const ELEMENT_NODE = document.ELEMENT_NODE;

  exports.captureEnclosedText = function(box) {
    const scrollX = window.scrollX;
    const scrollY = window.scrollY;
    const text = [];
    function traverse(el) {
      let elBox = el.getBoundingClientRect();
      elBox = {
        top: elBox.top + scrollY,
        bottom: elBox.bottom + scrollY,
        left: elBox.left + scrollX,
        right: elBox.right + scrollX
      };
      if (elBox.bottom < box.top ||
          elBox.top > box.bottom ||
          elBox.right < box.left ||
          elBox.left > box.right) {
        // Totally outside of the box
        return;
      }
      if (elBox.bottom > box.bottom + CAPTURE_WIGGLE ||
          elBox.top < box.top - CAPTURE_WIGGLE ||
          elBox.right > box.right + CAPTURE_WIGGLE ||
          elBox.left < box.left - CAPTURE_WIGGLE) {
        // Partially outside the box
        for (let i = 0; i < el.childNodes.length; i++) {
          const child = el.childNodes[i];
          if (child.nodeType === ELEMENT_NODE) {
            traverse(child);
          }
        }
        return;
      }
      addText(el);
    }
    function addText(el) {
      let t;
      if (el.tagName === "IMG") {
        t = el.getAttribute("alt") || el.getAttribute("title");
      } else if (el.tagName === "A") {
        t = el.innerText;
        if (el.getAttribute("href") && !el.getAttribute("href").startsWith("#")) {
          t += " (" + el.href + ")";
        }
      } else {
        t = el.innerText;
      }
      if (t) {
        text.push(t);
      }
    }
    traverse(document.body);
    if (text.length) {
      let result = text.join("\n");
      result = result.replace(/^\s+/, "");
      result = result.replace(/\s+$/, "");
      result = result.replace(/[ \t]+\n/g, "\n");
      return result;
    }
    return null;
  };


  return exports;
})();
null;
PK
!<�	���webextension/sitehelper.js/* globals catcher, callBackground, content */
/** This is a content script added to all screenshots.firefox.com pages, and allows the site to
    communicate with the add-on */

"use strict";

this.sitehelper = (function() {

  // This gives us the content's copy of XMLHttpRequest, instead of the wrapped
  // copy that this content script gets:
  const ContentXMLHttpRequest = content.XMLHttpRequest;

  catcher.registerHandler((errorObj) => {
    callBackground("reportError", errorObj);
  });


  function sendCustomEvent(name, detail) {
    if (typeof detail === "object") {
      // Note sending an object can lead to security problems, while a string
      // is safe to transfer:
      detail = JSON.stringify(detail);
    }
    document.dispatchEvent(new CustomEvent(name, {detail}));
  }

  /** Set the cookie, even if third-party cookies are disabled in this browser
      (when they are disabled, login from the background page won't set cookies) */
  function sendBackupCookieRequest(authHeaders) {
    // See https://bugzilla.mozilla.org/show_bug.cgi?id=1295660
    //   This bug would allow us to access window.content.XMLHttpRequest, and get
    //   a safer (not overridable by content) version of the object.

    // This is a very minimal attempt to verify that the XMLHttpRequest object we got
    // is legitimate. It is not a good test.
    if (Object.toString.apply(ContentXMLHttpRequest) !== "function XMLHttpRequest() {\n    [native code]\n}") {
      console.warn("Insecure copy of XMLHttpRequest");
      return;
    }
    const req = new ContentXMLHttpRequest();
    req.open("POST", "/api/set-login-cookie");
    for (const name in authHeaders) {
      req.setRequestHeader(name, authHeaders[name]);
    }
    req.send("");
    req.onload = () => {
      if (req.status !== 200) {
        console.warn("Attempt to set Screenshots cookie via /api/set-login-cookie failed:", req.status, req.statusText, req.responseText);
      }
    };
  }

  document.addEventListener("delete-everything", catcher.watchFunction((event) => {
    // FIXME: reset some data in the add-on
  }, false));

  document.addEventListener("request-login", catcher.watchFunction((event) => {
    const shotId = event.detail;
    catcher.watchPromise(callBackground("getAuthInfo", shotId || null).then((info) => {
      sendBackupCookieRequest(info.authHeaders);
      sendCustomEvent("login-successful", {deviceId: info.deviceId, isOwner: info.isOwner, backupCookieRequest: true});
    }));
  }));

  document.addEventListener("request-onboarding", catcher.watchFunction((event) => {
    callBackground("requestOnboarding");
  }));

  // Depending on the script loading order, the site might get the addon-present event,
  // but probably won't - instead the site will ask for that event after it has loaded
  document.addEventListener("request-addon-present", catcher.watchFunction(() => {
    sendCustomEvent("addon-present");
  }));

  sendCustomEvent("addon-present");

})();
null;
PK��|-