#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"

#: ../content/pages/build.md:block 1 (paragraph)
msgid "Title: Building from scratch"
msgstr ""

#: ../content/pages/build.md:block 2 (header)
msgid "GNU/Linux and Mac OS"
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid ""
"Go to the project repository: <https://pagure.io/JShelter/webextension>."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Download the desired branch, e.g. as zip archive."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Unpack the zip archive."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Run `make`."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid ""
"You will need common software, such as `zip`, `wget`, `bash`, `awk`, `sed`."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid ""
"Note that running `make` removes all `console.debug` calls. If you want to "
"keep such calls, run `make debug`."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Import the extension to the browser."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid ""
"[Firefox](https://developer.mozilla.org/en-US/docs/Mozilla/Add-"
"ons/WebExtensions/Your_first_WebExtension#installing)"
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Open `about:debugging`."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Click the *This Firefox* option"
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Click the *Load Temporary Add-on* button"
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Select the file `jshelter_firefox.zip` created by `make`."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Chromium-based browsers:"
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Open `chrome://extensions`."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Enable developper mode."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Click `Load unpacked`."
msgstr ""

#: ../content/pages/build.md:block 3 (ordered list)
msgid "Import the `jshelter_chrome/` directory created by `make`."
msgstr ""

#: ../content/pages/build.md:block 4 (header)
msgid "Windows"
msgstr ""

#: ../content/pages/build.md:block 5 (ordered list)
msgid ""
"Install Windows Subsystem for Linux (WSL): <https://docs.microsoft.com/en-"
"us/windows/wsl/install-win10>."
msgstr ""

#: ../content/pages/build.md:block 5 (ordered list)
msgid "Open the JShelter project folder in WSL, run `make`."
msgstr ""

#: ../content/pages/build.md:block 5 (ordered list)
msgid "Make sure that `zip` and all other necessary tools are installed."
msgstr ""

#: ../content/pages/build.md:block 5 (ordered list)
msgid ""
"Note that EOL in `fix_manifest.sh` must be set to `LF` (you can use the tool"
" `dos2unix` in WSL to convert `CR LF` to `LF`)."
msgstr ""

#: ../content/pages/build.md:block 5 (ordered list)
msgid ""
"On Windows, import the extension to the browser according to the "
"instructions for Linux (above)."
msgstr ""

#: ../content/pages/coding-style.md:block 1 (paragraph)
msgid "Title: Coding style"
msgstr ""

#: ../content/pages/coding-style.md:block 2 (header)
msgid "General guidelines"
msgstr ""

#: ../content/pages/coding-style.md:block 3 (unordered list)
msgid ""
"Use **tabulators** for indentation, and avoid spaces/tabs at the end of the "
"line."
msgstr ""

#: ../content/pages/coding-style.md:block 3 (unordered list)
msgid ""
"Functions, methods, classes, ifs, cycles etc. have opening braces at the "
"same line."
msgstr ""

#: ../content/pages/coding-style.md:block 3 (unordered list)
msgid ""
"Text width preferred less than 80 characters, maximum 100 characters. It is "
"better having readable code than pursuing this limit."
msgstr ""

#: ../content/pages/coding-style.md:block 3 (unordered list)
msgid "Always enclose blocks of expressions into brackets."
msgstr ""

#: ../content/pages/coding-style.md:block 3 (unordered list)
msgid ""
"Names are lower case and preferably explain the purpose of the variable, "
"class, etc."
msgstr ""

#: ../content/pages/coding-style.md:block 3 (unordered list)
msgid ""
"Comment classes, functions, etc. in Doxygen style. Use `make doc` to "
"generate documentation."
msgstr ""

#: ../content/pages/coding-style.md:block 4 (header)
msgid "Code examples"
msgstr ""

#: ../content/pages/coding-style.md:block 5 (paragraph)
msgid "Correct code example:"
msgstr ""

#: ../content/pages/coding-style.md:block 7 (paragraph)
msgid "Bad code example:"
msgstr ""

#: ../content/pages/coding-style.md:block 9 (header)
msgid "Version control workflow"
msgstr ""

#: ../content/pages/coding-style.md:block 10 (unordered list)
msgid ""
"Do not provide commits dealing with bad coding style. The only exception is "
"if you want to improve code that does not follow the coding style rules. "
"Preferably provide one commit that fixes the issues and another (others) "
"that improve the code, add new functionality etc."
msgstr ""

#: ../content/pages/coding-style.md:block 10 (unordered list)
msgid ""
"Atomic commits are useful, see [this "
"page](https://www.freshconsulting.com/atomic-commits/) for help."
msgstr ""

#: ../content/pages/coding-style.md:block 10 (unordered list)
msgid ""
"A commit should not contain adding missing semicolons, changes in generated "
"code, a bugfix, and addition of a new functionality. Each of these changes "
"should go to a separate commit with a message explaining why is the change "
"necessary (if it is not obvious like in the case of missing semicolons)."
msgstr ""

#: ../content/pages/coding-style.md:block 10 (unordered list)
msgid ""
"Provide meaningful commit messages. For help, see points 1, 2 and 7 of [this"
" guide](https://chris.beams.io/posts/git-commit/)"
msgstr ""

#: ../content/pages/coding-style.md:block 10 (unordered list)
msgid ""
"Do not fear changing commits that are not public, yet. If you create a bug "
"and find it before merge, it is better to fix the bug in the original "
"commit. Available Git operations for this are `rebase (-i)`, `fixup`, "
"`squash` and `push --force`."
msgstr ""

#: ../content/pages/coding-style.md:block 10 (unordered list)
msgid ""
"This pull request (FIXME: need to find link) contains an example of big "
"commits that needed to be refactored."
msgstr ""

#: ../content/pages/coding-style.md:block 10 (unordered list)
msgid ""
"Provide merge request more often rather than commiting big changes. If you "
"fix Makefile or other scripts, provide the change and do not wait. Create "
"code that is understandable and does not repeat itself. If possible, use "
"variables instead of copying the same code."
msgstr ""

#: ../content/pages/credits.md:block 1 (paragraph)
msgid "Title: Credits"
msgstr ""

#: ../content/pages/credits.md:block 2 (paragraph)
msgid "[TOC]"
msgstr ""

#: ../content/pages/credits.md:block 3 (header)
msgid "Developers"
msgstr ""

#: ../content/pages/credits.md:block 4 (paragraph)
msgid ""
"**[Libor Polčák](https://www.fit.vutbr.cz/~polcak)** is behind the idea to "
"implement a web extension that works as a firewall for JavaScript APIs. He "
"is the current lead maintainer of JShelter. He received support for this "
"project through the <a "
"href=\"https://nlnet.nl/project/JSRestrictor/\">JavaScript Restrictor</a> "
"project of NGI0 PET Fund, a fund established by NLnet with financial support"
" from the European Commission's Next Generation Internet programme, under "
"the aegis of DG Communications Networks, Content and Technology under grant "
"agreement No 825310. He supervised/supervises diploma theses that improve "
"the web extension."
msgstr ""

#: ../content/pages/credits.md:block 5 (paragraph)
msgid ""
"**Giorgio Maone** is working on the extension as a part of the [JS Shield "
"project](https://nlnet.nl/project/JavascriptShield/). Among other efforts, "
"he is working on cross-browser support, improvements on code injection and "
"the compatibility between the global JS environment, Workers, and iframes."
msgstr ""

#: ../content/pages/credits.md:block 6 (paragraph)
msgid ""
"**Zbyněk Červinka** developed a [proof-of-concept "
"version](https://github.com/cervinka-zbynek/masters-thesis) of the extension"
" as a part of his [master's "
"thesis](https://www.fit.vut.cz/study/thesis/21274/) (in Czech)."
msgstr ""

#: ../content/pages/credits.md:block 7 (paragraph)
msgid ""
"**Martin Timko** developed the first public versions up to "
"[0.2.1](https://pagure.io/JShelter/webextension/archive/0.2.1/webextension-0.2.1.zip)"
" as a part of his [master's "
"thesis](https://www.fit.vut.cz/study/thesis/21824/). He also ported the "
"extension to Chrome and Opera."
msgstr ""

#: ../content/pages/credits.md:block 8 (paragraph)
msgid ""
"**Martin Bednář** developed test suites as a part of his [master's "
"thesis](https://www.fit.vut.cz/study/thesis/22376/) and continued to work on"
" the project for some time afterwards. He also fixed some bugs found during "
"the testing."
msgstr ""

#: ../content/pages/credits.md:block 9 (paragraph)
msgid ""
"**Pavel Pohner** developed the Network Boundary Scanner as a part of his "
"[master's thesis](https://www.fit.vut.cz/study/thesis/22377/)."
msgstr ""

#: ../content/pages/credits.md:block 10 (paragraph)
msgid ""
"**Pater Horňák** ported functionality from [Chrome "
"Zero](https://github.com/IAIK/ChromeZero) as a part of his [bachelor "
"thesis](https://www.fit.vut.cz/study/thesis/22374/). He also provided "
"several small fixes to the code base."
msgstr ""

#: ../content/pages/credits.md:block 11 (paragraph)
msgid ""
"**Matúš Švancár** ported Farbling anti-fingerprinting measures from the "
"Brave browser as a part of his [master's "
"thesis](https://www.fit.vut.cz/study/thesis/23310/)."
msgstr ""

#: ../content/pages/credits.md:block 12 (paragraph)
msgid ""
"**Marek Saloň** created Fingerprint Detector as a part of his [master's "
"thesis](https://www.fit.vut.cz/study/thesis/23645/) and later improved the "
"detector."
msgstr ""

#: ../content/pages/credits.md:block 13 (paragraph)
msgid "**Radek Hranický** created sensor API wrappers."
msgstr ""

#: ../content/pages/credits.md:block 14 (paragraph)
msgid ""
"**Martin Zmitko** improved performance of the extension as a part of his "
"bachelor thesis. He fixed some bugs during the process."
msgstr ""

#: ../content/pages/credits.md:block 15 (paragraph)
msgid ""
"We thank all other minor contributors of the project that are not listed in "
"this section."
msgstr ""

#: ../content/pages/credits.md:block 16 (header)
msgid "Key ideas"
msgstr ""

#: ../content/pages/credits.md:block 17 (paragraph)
msgid ""
"The development of this extension is influenced by the paper [JavaScript "
"Zero: Real JavaScript and Zero Side-Channel "
"Attacks](https://graz.pure.elsevier.com/de/publications/javascript-zero-"
"real-javascript-and-zero-side-channel-attacks). It appeared during the work "
"of Zbyněk Červinka and provided basically the same approach to restrict APIs"
" as was at the time developed by Zbyněk Červinka."
msgstr ""

#: ../content/pages/credits.md:block 18 (paragraph)
msgid ""
"The [Force Point "
"report](https://www.forcepoint.com/sites/default/files/resources/files/report-"
"attacking-internal-network-en_0.pdf) was a key inspiration for the "
"development of the Network Boundary Shield."
msgstr ""

#: ../content/pages/credits.md:block 19 (paragraph)
msgid ""
"Some of the fingerprinting counter-measures are inspired by [Farbling of the"
" Brave browser](blogarticles/farbling.md)."
msgstr ""

#: ../content/pages/credits.md:block 20 (header)
msgid "Borrowed code"
msgstr ""

#: ../content/pages/credits.md:block 21 (paragraph)
msgid "We borrowed code from other free software projects:"
msgstr ""

#: ../content/pages/credits.md:block 22 (unordered list)
msgid "[Chrome Zero](https://github.com/IAIK/ChromeZero)"
msgstr ""

#: ../content/pages/credits.md:block 22 (unordered list)
msgid "[Brave Farbling](https://github.com/brave/brave-browser/issues/8787)"
msgstr ""

#: ../content/pages/credits.md:block 22 (unordered list)
msgid "[NoScript Common Library](https://github.com/hackademix/nscl/)"
msgstr ""

#: ../content/pages/credits.md:block 22 (unordered list)
msgid ""
"[Typed array "
"polyfill](https://github.com/inexorabletash/polyfill/blob/master/typedarray.js),"
" Copyright (c) 2010, Linden Research, Inc., Copyright (c) 2014, Joshua Bell"
msgstr ""

#: ../content/pages/credits.md:block 22 (unordered list)
msgid ""
"[PRNG Alea](https://github.com/nquinlan/better-random-numbers-for-"
"javascript-mirror) by (C) 2010 Johannes Baagøe"
msgstr ""

#: ../content/pages/credits.md:block 22 (unordered list)
msgid "[JS-sha256](https://github.com/emn178/js-sha256) by (C) Chen, Yi-Cyuan"
msgstr ""

#: ../content/pages/faq.md:block 1 (paragraph)
msgid "Title: Frequently Asked Questions"
msgstr ""

#: ../content/pages/faq.md:block 3 (header)
msgid "Project information"
msgstr ""

#: ../content/pages/faq.md:block 4 (header)
msgid "How can I get active and participate?"
msgstr ""

#: ../content/pages/faq.md:block 5 (paragraph)
msgid ""
"Start using JShelter and tell your friends. You can fill an issue on our "
"[bug tracker](https://pagure.io/JShelter/webextension/issues) "
"([alternative](https://github.com/polcak/jsrestrictor/issues)) or pick up an"
" issue and start working on JShelter. You can track the development in our "
"[repository](https://pagure.io/JShelter/webextension) "
"([alternative](https://github.com/polcak/jsrestrictor)). Please let us know "
"before you start implementing, preferably directly in the issue. You can "
"contact us by [e-mail](mailto:jshelter@gnu.org) to privately report issues "
"or if you do not have a forge account. Join our [mailing "
"list](https://lists.nongnu.org/archive/html/js-shield/) to follow updates "
"and join in our discussions."
msgstr ""

#: ../content/pages/faq.md:block 6 (header)
msgid "Can I translate the extension to a new language?"
msgstr ""

#: ../content/pages/faq.md:block 7 (paragraph)
msgid ""
"Yes. Please see [instructions](/i18n/), go to "
"[Weblate](https://hosted.weblate.org/projects/jshelter/), or translate the "
"extension in the JSON files. If you want to start translating a new "
"language, let us know. For example, you can open an issue in the [issue "
"tracker](https://pagure.io/JShelter/webextension/issues) or send us "
"[e-mail](mailto:jshelter@gnu.org). If you are in doubt about how to "
"translate a string or do not understand its meaning, let us know in an "
"[issue](https://pagure.io/JShelter/webextension/issues) or send us "
"[e-mail](mailto:jshelter@gnu.org)."
msgstr ""

#: ../content/pages/faq.md:block 8 (header)
msgid ""
"What is the current JShelter status? Is it ready, or is it still a work in "
"progress?"
msgstr ""

#: ../content/pages/faq.md:block 9 (paragraph)
msgid ""
"We think that JShelter is ready to be used for everyday browsing. We believe"
" that JShelter in the current state fulfills the goal of giving you control "
"over your browser and the APIs available for the web page."
msgstr ""

#: ../content/pages/faq.md:block 10 (paragraph)
msgid ""
"We believe that the `Recommended` level changes your fingerprint, so typical"
" fingerprinting scripts will fail to correlate your cross-origin activities "
"and activities on the same origin during different browser sessions. See the"
" [threat model](/threatmodel/), the questions in the [browser fingerprinting"
" section](#browser-fingerprinting), and [the section on interaction with "
"other tools](#interactions-between-jshelter-and-other-similar-tools) for "
"possible caveats."
msgstr ""

#: ../content/pages/faq.md:block 11 (paragraph)
msgid ""
"Test your browser on common fingerprinting testers. Then, use the `Strict` "
"level and test again to see that it considerably lowers the information "
"about your computer:"
msgstr ""

#: ../content/pages/faq.md:block 12 (unordered list)
msgid "[EFF Cover your tracks](https://coveryourtracks.eff.org/)"
msgstr ""

#: ../content/pages/faq.md:block 12 (unordered list)
msgid "[Am I unique?](https://amiunique.org/)"
msgstr ""

#: ../content/pages/faq.md:block 12 (unordered list)
msgid "[Audio and font fingerprinting](https://audiofingerprint.openwpm.com/)"
msgstr ""

#: ../content/pages/faq.md:block 12 (unordered list)
msgid "[Device info](https://www.deviceinfo.me/)"
msgstr ""

#: ../content/pages/faq.md:block 12 (unordered list)
msgid "[Bromite](https://www.bromite.org/detect)"
msgstr ""

#: ../content/pages/faq.md:block 12 (unordered list)
msgid "[Browser leaks](https://browserleaks.com/)"
msgstr ""

#: ../content/pages/faq.md:block 12 (unordered list)
msgid ""
"[JShelter test page](https://polcak.github.io/jsrestrictor/test/test.html)"
msgstr ""

#: ../content/pages/faq.md:block 13 (paragraph)
msgid ""
"At the same time, we are aware of several JShelter [bugs and "
"issues](https://pagure.io/JShelter/webextension/issues/). We are working on "
"making JShelter bug-free. We do not want to break benign pages. Fixing some "
"issues takes time. Other issues need balancing between several options. "
"JShelter is meant to be used with (ad)blockers like [uBlock "
"Origin](https://github.com/gorhill/uBlock#ublock-origin). Using a blocker "
"will make your online activities considerably safer. At the same time, it "
"will make JShelter break fewer sites."
msgstr ""

#: ../content/pages/faq.md:block 14 (paragraph)
msgid ""
"Right now, JShelter will need more interaction from you than we would "
"prefer. Some protection needs improvements. Some functionality needs to be "
"included. When we achieve the state of fixing the bugs and making JShelter "
"easy to manage, we will release version 1.0. If you are unwilling to tweak "
"JShelter occasionally, consider returning once we release version 1.0. "
"Otherwise, try [other options](/fingerprinting/)."
msgstr ""

#: ../content/pages/faq.md:block 15 (header)
msgid "What is the best source of information about JShelter?"
msgstr ""

#: ../content/pages/faq.md:block 16 (paragraph)
msgid ""
"The best sources for JShelter information can be found on [our "
"website](https://jshelter.org/) and our "
"[paper](https://arxiv.org/abs/2204.01392)."
msgstr ""

#: ../content/pages/faq.md:block 17 (header)
msgid "What is the threat model?"
msgstr ""

#: ../content/pages/faq.md:block 18 (paragraph)
msgid ""
"We created a [dedicated page describing the threat model](/threatmodel/) of "
"JShelter. You should read the page before you install the extension. Make "
"sure that JShelter aligns with the threats you see on the web."
msgstr ""

#: ../content/pages/faq.md:block 19 (header)
msgid "JShelter broke a page, what should I do?"
msgstr ""

#: ../content/pages/faq.md:block 20 (paragraph)
msgid ""
"This happens from time to time. We want to eliminate such pages, but "
"[JShelter is not there yet](#what-is-the-current-jshelter-status-is-it-"
"ready-or-is-it-still-a-work-in-progress)."
msgstr ""

#: ../content/pages/faq.md:block 21 (paragraph)
msgid ""
"Your page might be broken because [Network Boundary Shield](/nbs/) (NBS) or "
"[fingerprint Detector](/fpd/) (FPD) detected a problem. You should have seen"
" a notification in such cases unless you turned notifications off. We do not"
" recommend turning notifications off (see [the questions on "
"notifications](#why-do-i-see-so-many-notifications-from-jshelter)). Whenever"
" NBS or FPD detect a possible problem on the site, it is up to you to decide"
" if you believe the owner of the visited page or are tempted to view the "
"content so much that you turn the protection off."
msgstr ""

#: ../content/pages/faq.md:block 22 (header)
msgid "Fingerprint Detector (FPD)"
msgstr ""

#: ../content/pages/faq.md:block 23 (paragraph)
msgid "If you see a notification like:"
msgstr ""

#: ../content/pages/faq.md:block 24 (paragraph)
msgid ""
"![Fingerprint Detector "
"notification]({attach}/images/fpdetection/notifications.png)"
msgstr ""

#: ../content/pages/faq.md:block 25 (paragraph)
msgid ""
"In this case, FPD evaluated that the page tries to fingerprint you. FPD can "
"be optionally configured to prevent uploading the fingerprint to the server."
" In that case, FPD blocks all further requests of the visited page and "
"removes the storages available to the page. Some web pages employ browser "
"fingerprinting for security purposes. You might want to allow the page to "
"fingerprint you in such a case. Open the popup by clicking on the JShelter "
"logo badge icon and turn off the FPD for the visited site."
msgstr ""

#: ../content/pages/faq.md:block 26 (paragraph)
msgid "![Turn FPD off](/images/faq/fpd_off.png)"
msgstr ""

#: ../content/pages/faq.md:block 27 (paragraph)
msgid ""
"The depicted setting will turn FPD off for all pages of the visited origin. "
"If you want to disable FPD for all pages, change the `Global settings`."
msgstr ""

#: ../content/pages/faq.md:block 28 (header)
msgid "Network Boundary Shield (NBS)"
msgstr ""

#: ../content/pages/faq.md:block 30 (paragraph)
msgid ""
"![JShelter blocks the scan]({attach}/images/portscan-2_request_blocked.png)"
msgstr ""

#: ../content/pages/faq.md:block 31 (paragraph)
msgid ""
"Then, it was NBS that blocked some requests. Rarely can some pages be broken"
" because they require interaction between the public Internet and the local "
"network. For example, the Network Boundary Shield might break some intranet "
"information systems. JShelter users also reported an increased number of "
"false positives when using DNS-based filtering programs. If you use one, "
"make sure that DNS returns 0.0.0.0 for the blocked domains."
msgstr ""

#: ../content/pages/faq.md:block 32 (paragraph)
msgid "![Turn NBS off](/images/faq/nbs_off.png)"
msgstr ""

#: ../content/pages/faq.md:block 33 (paragraph)
msgid ""
"The depicted setting will turn NBS off for all pages of the visited origin. "
"If you want to disable NBS for all pages, change the `Global settings`."
msgstr ""

#: ../content/pages/faq.md:block 34 (header)
msgid "JavaScript Shield (JSS)"
msgstr ""

#: ../content/pages/faq.md:block 35 (paragraph)
msgid ""
"If you have not seen any notifications (and didn't disable notifications "
"manually), it is JavaScript Shield (JSS) that might have broken the page. "
"See questions on [broken videos](#how-can-i-fix-videos-if-they-fail-to-play-"
"or-retrieve-data-in-time) and [web workers](#i-want-to-use-a-website-that-"
"uses-web-workers-but-it-is-broken-how-can-i-fix-the-site) for specific JSS "
"tweaks that might solve your problem."
msgstr ""

#: ../content/pages/faq.md:block 36 (paragraph)
msgid "In other cases, depending on your courage, try:"
msgstr ""

#: ../content/pages/faq.md:block 37 (header)
msgid "Disable JSS for this domain"
msgstr ""

#: ../content/pages/faq.md:block 38 (paragraph)
msgid ""
"You can disable JSS for all pages on the visited domain by turning JSS off:"
msgstr ""

#: ../content/pages/faq.md:block 39 (paragraph)
msgid "![Turn JSS off](/images/faq/jss_off.png)"
msgstr ""

#: ../content/pages/faq.md:block 41 (paragraph)
msgid "Advanced users can change JSS level:"
msgstr ""

#: ../content/pages/faq.md:block 42 (ordered list)
msgid ""
"Spoofing API call results takes some resources. If you see that the page "
"does not try to fingerprint you, you might want to disable all "
"fingerprinting protection."
msgstr ""

#: ../content/pages/faq.md:block 42 (ordered list)
msgid "Click the `Modify` button next to the JavaScript Shield label."
msgstr ""

#: ../content/pages/faq.md:block 42 (ordered list)
msgid ""
"Select `Turn fingerprinting protection off level`. This will keep security-"
"related [wrappers](#what-is-a-wrapper), but all fingerprinting protection "
"will be disabled."
msgstr ""

#: ../content/pages/faq.md:block 43 (paragraph)
msgid "![Turn JSS fingerprinting protection off](/images/faq/jss_low.png)"
msgstr ""

#: ../content/pages/faq.md:block 44 (paragraph)
msgid ""
"You can create your own JSS protection levels on the `Global settings` page."
msgstr ""

#: ../content/pages/faq.md:block 45 (header)
msgid "Tweak JSS for this domain"
msgstr ""

#: ../content/pages/faq.md:block 46 (paragraph)
msgid ""
"Sometimes you will want to tweak JSS a little bit. For example, you "
"generally do not need audio. Still, you might want to make a call on some "
"pages. Or, you generally do not want to reveal your location, but you want "
"to use a map page to navigate. Occasionally, a JSS can modify an API in a "
"way that breaks a page. In that case, you might want to tweak your "
"protection level."
msgstr ""

#: ../content/pages/faq.md:block 47 (ordered list)
msgid "Click the `Detail tweaks of JS Shield for this site` button."
msgstr ""

#: ../content/pages/faq.md:block 48 (paragraph)
msgid "![Go to tweaking JSS mode](/images/faq/jss_tweak_start.png)"
msgstr ""

#: ../content/pages/faq.md:block 49 (paragraph)
msgid ""
"The JSS section will expand. The applied protection groups are sorted "
"depending on the number of calls of each API group. Typically, you will want"
" to tweak the settings of one of the groups with the most calls. See the "
"highlighted column:"
msgstr ""

#: ../content/pages/faq.md:block 50 (paragraph)
msgid "![Tweaking JSS mode](/images/faq/jss_tweak_sorting.png)"
msgstr ""

#: ../content/pages/faq.md:block 51 (ordered list)
msgid "Before you tweak any wrapping group, see the description."
msgstr ""

#: ../content/pages/faq.md:block 51 (ordered list)
msgid "Tweak the protection according to your needs."
msgstr ""

#: ../content/pages/faq.md:block 52 (paragraph)
msgid "![Tweaking JSS mode](/images/faq/jss_tweaking.png)"
msgstr ""

#: ../content/pages/faq.md:block 53 (header)
msgid "How can I fix videos if they fail to play or retrieve data in time?"
msgstr ""

#: ../content/pages/faq.md:block 54 (paragraph)
msgid ""
"JShelter reimplements more than 100 JavaScript APIs. However, pages can use "
"several ways to access the same API. Unfortunately, browsers do not allow "
"patching every possibility consistently through a simple call. Web Workers "
"are one of the possibilities to access the APIs (see further "
"[threats](#what-are-web-workers-and-what-are-the-threats-that-i-face)). Our "
"ultimate goal is to patch APIs consistently. However, patching Web Worker is"
" tricky, and we have yet to find a way to patch Workers seamlessly. Our "
"ultimate goal was to replace Workers with synchronous code. However, so far,"
" we offer only policies that either disable Workers or make them inoperable."
msgstr ""

#: ../content/pages/faq.md:block 55 (paragraph)
msgid ""
"We are [working](https://pagure.io/JShelter/webextension/issue/43) on "
"[improvements](https://pagure.io/JShelter/webextension/issue/80). Currently,"
" we patch Web Workers in the `Recommended` level (`Remove` policy). "
"Nevertheless, the method breaks Web Workers, and they cannot be used for "
"benign purposes. The page also cannot detect breakage to limit the "
"fingerprintability of the browsers."
msgstr ""

#: ../content/pages/faq.md:block 56 (paragraph)
msgid ""
"JShelter users reported that video streaming servers are often affected. We "
"encountered pages that detect the presence of Web Worker support in browsers"
" and provide polyfills if they do not detect Web Worker support. The "
"`Remove` WebWorker policy is ideal for such servers. The page can easily "
"detect missing Web Worker support. Suppose a page provides its own "
"alternatives like polyfills. The alternatives do not have the powers of Web "
"Workers, so you can make the page work at the cost of increased "
"fingerprintability. Use FPD to evaluate that threat."
msgstr ""

#: ../content/pages/faq.md:block 57 (paragraph)
msgid ""
"If you believe the server operator and their partners not to misuse Web "
"Workers to access original APIs and [other ways](#what-are-web-workers-and-"
"what-are-the-threats-that-i-face), or if you do not mind, change the "
"`WebWorker` policy from `Remove` to `Low` (in Chrome) or deactivate it "
"completely ([in Firefox](https://pagure.io/JShelter/webextension/issue/80))."
" Videos and other functionality requiring Web Workers should work. To change"
" the policy, follow these steps:"
msgstr ""

#: ../content/pages/faq.md:block 58 (ordered list)
msgid "Navigate to a page with a video you want to watch."
msgstr ""

#: ../content/pages/faq.md:block 58 (ordered list)
msgid ""
"Click on the JShelter badge icon (typically in the toolbar next to your "
"navigation bar; if you cannot locate the icon, see [this question](#can-i-"
"see-a-jshelter-badge-icon-next-to-my-navigation-bar-i-want-to-interact-with-"
"the-extension-easily-and-avoid-going-through-settings))."
msgstr ""

#: ../content/pages/faq.md:block 58 (ordered list)
msgid "Click on the `Modify` button."
msgstr ""

#: ../content/pages/faq.md:block 58 (ordered list)
msgid "Click on the `Detail tweaks of JS shield for this site` button."
msgstr ""

#: ../content/pages/faq.md:block 58 (ordered list)
msgid ""
"Click and drag the `WebWorker` slider to the left until `Remove` is replaced"
" by the `Low` value (Chromium-based browser) or `Unprotected` (Firefox)."
msgstr ""

#: ../content/pages/faq.md:block 58 (ordered list)
msgid "Click on the `Refresh page` button at the top."
msgstr ""

#: ../content/pages/faq.md:block 58 (ordered list)
msgid "Watch the video."
msgstr ""

#: ../content/pages/faq.md:block 59 (header)
msgid ""
"I want to use a website that uses Web Workers, but it is broken. How can I "
"fix the site?"
msgstr ""

#: ../content/pages/faq.md:block 60 (paragraph)
msgid ""
"First, see the explanation of [Web Workers](#what-are-web-workers-and-what-"
"are-the-threats-that-i-face)."
msgstr ""

#: ../content/pages/faq.md:block 61 (paragraph)
msgid ""
"See the [answer to the video question](#how-can-i-fix-videos-if-they-fail-"
"to-play-or-retrieve-data-in-time)."
msgstr ""

#: ../content/pages/faq.md:block 62 (paragraph)
msgid ""
"If you find a website that needs WebWorker protection set to `Strict` and "
"does not work with `Remove` or vice-versa, please let us know in the [issue "
"tracker](https://pagure.io/JShelter/webextension/issues) or send us "
"[e-mail](mailto:jshelter@gnu.org)."
msgstr ""

#: ../content/pages/faq.md:block 63 (header)
msgid "User interface issues"
msgstr ""

#: ../content/pages/faq.md:block 64 (header)
msgid ""
"Can I see a JShelter (badge) icon next to my navigation bar? I want to "
"interact with the extension easily and avoid going through settings."
msgstr ""

#: ../content/pages/faq.md:block 65 (paragraph)
msgid ""
"JShelter has a badge icon in the toolbar that allows you to open the popup. "
"However, browsers tend to hide the icon. If you cannot see a JShelter icon "
"to the right of the bar where you enter URLs. Try to:"
msgstr ""

#: ../content/pages/faq.md:block 66 (ordered list)
msgid "Click on the extension icon (typically looks like a puzzle tile)."
msgstr ""

#: ../content/pages/faq.md:block 66 (ordered list)
msgid "Pin JShelter to the toolbar."
msgstr ""

#: ../content/pages/faq.md:block 67 (paragraph)
msgid ""
"The figure below shows how to accomplish these two steps in Firefox and a "
"Chromium-based browser."
msgstr ""

#: ../content/pages/faq.md:block 68 (paragraph)
msgid ""
"![Pin JShelter to Firefox "
"toolbar]({attach}/images/faq/firefox_pintoolbar.png) ![Pin JShelter to a "
"Chromium-based browser toolbar]({attach}/images/faq/chromium_pintoolbar.png)"
msgstr ""

#: ../content/pages/faq.md:block 69 (header)
msgid ""
"A site opened a popup window, I want to tweak settings for that window, but "
"I do not see a badge JShelter icon there. How can I tweak JShelter settings?"
msgstr ""

#: ../content/pages/faq.md:block 70 (paragraph)
msgid "If you are using Firefox:"
msgstr ""

#: ../content/pages/faq.md:block 71 (ordered list)
msgid "Open `about:config`, click to `Accept the Risk and Continue`,"
msgstr ""

#: ../content/pages/faq.md:block 71 (ordered list)
msgid "set `browser.link.open_newwindow` to `3`,"
msgstr ""

#: ../content/pages/faq.md:block 71 (ordered list)
msgid "set `browser.link.open_newwindow.restriction` to `0`."
msgstr ""

#: ../content/pages/faq.md:block 72 (paragraph)
msgid ""
"This will force all popup windows to open in a new tab, meaning the JShelter"
" settings could be adjusted easily everywhere."
msgstr ""

#: ../content/pages/faq.md:block 73 (header)
msgid "Why do I see so many notifications from JShelter?"
msgstr ""

#: ../content/pages/faq.md:block 74 (paragraph)
msgid ""
"Generally speaking, you should see only a few notifications by JShelter. The"
" default settings are tailored to give the user critical information about "
"JShelter behavior and its possible changes to the page's ability to make "
"network requests that often break the page's behavior."
msgstr ""

#: ../content/pages/faq.md:block 75 (paragraph)
msgid ""
"We suggest installing a tracker blocker like uBlock Origin. The blocker will"
" eliminate the most common security and privacy threats."
msgstr ""

#: ../content/pages/faq.md:block 76 (paragraph)
msgid ""
"Also, see [the question on NBS notifications](#i-am-seeing-too-many-nbs-"
"notifications)."
msgstr ""

#: ../content/pages/faq.md:block 77 (header)
msgid "I am seeing too many NBS notifications"
msgstr ""

#: ../content/pages/faq.md:block 78 (paragraph)
msgid ""
"NBS protects from attacks that occur very rarely. JShelter users often "
"complain about too many notifications when they employ DNS-based blocking. "
"DNS-blocking resolver resolves predefined domains to a fake IP address, "
"usually `0.0.0.0` or `127.0.0.1` (IPv4) and `::` or `::1` (IPv6). If your "
"DNS-blocking resolver returns `127.0.0.1` and `::1`. Please reconfigure the "
"resolver to return `0.0.0.0` or `::`."
msgstr ""

#: ../content/pages/faq.md:block 79 (ordered list)
msgid ""
"Depending on your OS, you will consume fewer resources. For example, Windows"
" machines do not create any TCP stream when a website connects to `0.0.0.0` "
"or `::`, but it creates a TCP stream to `127.0.0.1` and `::1`. Hence, a "
"remote web page can access a web server if it is running on the local "
"machine. Note that Linux hosts try to establish a connection to a localhost "
"port on all these addresses."
msgstr ""

#: ../content/pages/faq.md:block 79 (ordered list)
msgid ""
"If your DNS-based filtering returns `0.0.0.0` or `::`, it will give JShelter"
" a report on the intentions. If it returns `127.0.0.1` or `::1`, JShelter "
"has no way to differentiate between such DNS blocker and an attack like the "
"one in the [blog](/localportscanning/)."
msgstr ""

#: ../content/pages/faq.md:block 80 (header)
msgid "Browser fingerprinting"
msgstr ""

#: ../content/pages/faq.md:block 81 (header)
msgid "What is the little lies approach to protect from fingerprinters?"
msgstr ""

#: ../content/pages/faq.md:block 82 (paragraph)
msgid "Please see [the blog post](/farbling/)."
msgstr ""

#: ../content/pages/faq.md:block 83 (header)
msgid ""
"What is the difference between the little lies and white lies approach to "
"protect from fingerprinters and farbling?"
msgstr ""

#: ../content/pages/faq.md:block 84 (paragraph)
msgid ""
"None. All refer to the same technique [that is explained in another "
"question](#what-is-the-little-lies-approach-to-protect-from-fingerprinters)."
msgstr ""

#: ../content/pages/faq.md:block 85 (header)
msgid "What JShelter configuration should I pick?"
msgstr ""

#: ../content/pages/faq.md:block 86 (paragraph)
msgid ""
"First, see our [blog post](/fingerprinting/). Consult also other [blog "
"posts](/blog/) and other questions in this FAQ."
msgstr ""

#: ../content/pages/faq.md:block 87 (ordered list)
msgid ""
"If you want to have the same fingerprint as many users, We suggest going for"
" Tor Browser (do not install JShelter in Tor Browser)."
msgstr ""

#: ../content/pages/faq.md:block 87 (ordered list)
msgid ""
"If you want to make cross-site fingerprinting linkage hard, go for the "
"`Recommended` JShelter level. If you want better protection for the real "
"data at the cost of having the same fingerprint on different sites, go for "
"the `Strict` JShelter level."
msgstr ""

#: ../content/pages/faq.md:block 87 (ordered list)
msgid "Keep NBS active."
msgstr ""

#: ../content/pages/faq.md:block 87 (ordered list)
msgid "If you want to detect and prevent fingerprinting attempts, use FPD."
msgstr ""

#: ../content/pages/faq.md:block 88 (header)
msgid ""
"I have a unique fingerprint? Some properties wrapped by JShelter return "
"random values."
msgstr ""

#: ../content/pages/faq.md:block 89 (paragraph)
msgid "First, see our [blog post](/fingerprinting/)."
msgstr ""

#: ../content/pages/faq.md:block 90 (paragraph)
msgid ""
"JShelter indeed modifies some properties like WebGL strings (`renderer`, "
"`vendor`) to random strings in the `Recommended` level. JShelter also does "
"not modify random identifiers of microphones and cameras. All these "
"properties contain random strings that uniquely identify your browser "
"session."
msgstr ""

#: ../content/pages/faq.md:block 91 (paragraph)
msgid ""
"JShelter provides different lies on different domains, so cross-domain "
"linking is hard. But remember that a single domain can link all your "
"activities during a browser session. If you do not want JShelter to generate"
" the random strings, use `Strict` protection (but see [other FAQ "
"entries](#browser-fingerprinting))."
msgstr ""

#: ../content/pages/faq.md:block 92 (paragraph)
msgid ""
"We are [considering](https://pagure.io/JShelter/webextension/issue/68) "
"adding better control for the little lies approach."
msgstr ""

#: ../content/pages/faq.md:block 93 (paragraph)
msgid ""
"We are also [considering](https://pagure.io/JShelter/webextension/issue/69) "
"replacing the random strings of the Web GL API with real-world strings. "
"However, we do not have such a database. We are also worried about creating "
"inconsistencies if we apply invalid combinations of real-world strings. As "
"creating the real-world database would take a lot of time, and a dedicated "
"fingerprinter might reveal the inconsistencies anyway, we do not actively "
"work on the issue."
msgstr ""

#: ../content/pages/faq.md:block 94 (header)
msgid "Is browser fingerprinting a real threat?"
msgstr ""

#: ../content/pages/faq.md:block 95 (paragraph)
msgid ""
"More than 100 advertisement companies reveal in the [adtech transparency a "
"consent framework](https://www.fit.vutbr.cz/~polcak/tcf/tcf2.html) that they"
" actually actively scan device characteristics for identification: devices "
"can be identified based on a scan of the device's unique combination of "
"characteristics. Vendors can create an identifier using data collected via "
"actively scanning a device for specific characteristics, e.g., installed "
"fonts or screen resolution, use such an identifier to re-identify a device."
msgstr ""

#: ../content/pages/faq.md:block 96 (paragraph)
msgid ""
"![TCF participants actively scanning devices to create a "
"fingerprint](https://www.fit.vutbr.cz/~polcak/tcf/graphs/v2sf2.svg)"
msgstr ""

#: ../content/pages/faq.md:block 97 (paragraph)
msgid ""
"See papers like [Browser Fingerprinting: A "
"survey](https://arxiv.org/pdf/1905.01051.pdf), [Fingerprinting the "
"Fingerprinters](https://uiowa-irl.github.io/FP-Inspector/) or [The Elephant "
"in the Background](https://fpmon.github.io/fingerprinting-"
"monitor/files/FPMON.pdf)."
msgstr ""

#: ../content/pages/faq.md:block 98 (header)
msgid "Does FPD collect a list of pages/origins that fingerprinted me?"
msgstr ""

#: ../content/pages/faq.md:block 99 (paragraph)
msgid ""
"No, FPD does not store any information. Each page load starts a new "
"detection that is not dependent on previous interactions between the browser"
" and the site."
msgstr ""

#: ../content/pages/faq.md:block 100 (header)
msgid ""
"When FPD detects that an origin tried to fingerprint me, does it mean that "
"the extension will apply stronger protection like switching to the `Strict` "
"JSS level or applying the blocking of HTTP requests initiated by the domain?"
msgstr ""

#: ../content/pages/faq.md:block 101 (paragraph)
msgid "No."
msgstr ""

#: ../content/pages/faq.md:block 102 (paragraph)
msgid ""
"First of all, the `Strict` JSS level does not mean stronger protection from "
"fingerprinting. In fact, it makes your fingerprint stable. We do not "
"recommend using `Strict` level as an anti-fingerprinting mechanism."
msgstr ""

#: ../content/pages/faq.md:block 103 (paragraph)
msgid ""
"Secondly, fingerprinting is quite common on login pages. If one page "
"fingerprints you, it does not mean that all pages are going to fingerprint "
"you."
msgstr ""

#: ../content/pages/faq.md:block 104 (paragraph)
msgid ""
"Thirdly, the fingerprinting script may be loaded into the page irregularly. "
"We want to prevent blocking the site when no fingerprinting is detected."
msgstr ""

#: ../content/pages/faq.md:block 105 (paragraph)
msgid ""
"If you want to switch to a different level for the website, you can do so "
"manually. We do not recommend such action."
msgstr ""

#: ../content/pages/faq.md:block 106 (header)
msgid ""
"My bank (or another trusted site) fingerprinted me during a login attempt. "
"Should I worry?"
msgstr ""

#: ../content/pages/faq.md:block 107 (paragraph)
msgid ""
"Browser fingerprinting is a common part of multi-factor authentication. The "
"provider tries to protect your account. So you should not worry, but you "
"might be forced to deactivate FPD for that site. However, we suggest that "
"you do not turn off JavaScript Shield and its anti-fingerprinting "
"protections."
msgstr ""

#: ../content/pages/faq.md:block 108 (paragraph)
msgid ""
"From the European perspective, [WP29 "
"clarified](https://ec.europa.eu/justice/article-29/documentation/opinion-"
"recommendation/files/2014/wp224_en.pdf) (use case 7.5) that user-centric "
"security can be viewed as strictly necessary to provide a web service. So it"
" seems likely that browser fingerprinting for security reasons does trigger "
"the ePrivacy exception, and user consent is not necessary. Depending on the "
"circumstances, a fingerprint can be personal data. GDPR might also apply. "
"GDPR lists security as a possible legitimate interest of a data controller, "
"see recital 49. Nevertheless, whether all fingerprinting is proportionate is"
" an open question."
msgstr ""

#: ../content/pages/faq.md:block 109 (paragraph)
msgid ""
"We understand that our users do not want to give information about their "
"devices. Hence, we suggest having JavaScript Shield active on fingerprinting"
" sites. It is up to you if you want to provide as little information as "
"possible (`Strict` level), want to have a different fingerprint every visit "
"(`Recommended` level, keep in mind that you are providing your login, so "
"your actions are linkable), or you want to create your own level."
msgstr ""

#: ../content/pages/faq.md:block 110 (header)
msgid "Do you protect against font enumeration fingerprinting?"
msgstr ""

#: ../content/pages/faq.md:block 111 (paragraph)
msgid ""
"No. We currently do not have a consistent method that spoofs fonts reliably."
" If you are concerned about font enumeration, you can track the relevant "
"JShelter [issue](https://pagure.io/JShelter/webextension/issue/60)."
msgstr ""

#: ../content/pages/faq.md:block 112 (paragraph)
msgid ""
"If you are using Firefox and want your fonts hidden consistently, activate "
"resistFingerprinting. However, cosider [the interaction between JShelter and"
" resistFingerprinting](#i-am-using-firefox-fingerprinting-protection-"
"resistfingerprinting-should-i-continue-should-i-turn-firefox-fingerprinting-"
"protection-on)."
msgstr ""

#: ../content/pages/faq.md:block 113 (header)
msgid "Does JShelter completely prevent browser fingerprinting?"
msgstr ""

#: ../content/pages/faq.md:block 114 (paragraph)
msgid ""
"No. See the [threat model](/threatmodel/). As explained there, JShelter "
"applies reasonable precautions but:"
msgstr ""

#: ../content/pages/faq.md:block 115 (ordered list)
msgid "There is no clear boundary between fingerprinting and benign behavior."
msgstr ""

#: ../content/pages/faq.md:block 115 (ordered list)
msgid ""
"A fingerprinter might deploy focused attacks. While we try to deploy "
"undetectable and reasonable countermeasures, expect that a focused and "
"motivated attacker will be able to detect JShelter users."
msgstr ""

#: ../content/pages/faq.md:block 115 (ordered list)
msgid ""
"We expect that users will run FPD and JSS in parallel. As both protect from "
"fingerprinting differently, they complement each other."
msgstr ""

#: ../content/pages/faq.md:block 116 (paragraph)
msgid ""
"Also, read [the other questions in the browser fingerprinting "
"section](#browser-fingerprinting)."
msgstr ""

#: ../content/pages/faq.md:block 117 (header)
msgid "Other protections by JShelter"
msgstr ""

#: ../content/pages/faq.md:block 118 (header)
msgid "What are Web Workers, and what are the threats that I face?"
msgstr ""

#: ../content/pages/faq.md:block 119 (paragraph)
msgid ""
"In essence, Web Workers are a threat to JShelter users for two reasons:"
msgstr ""

#: ../content/pages/faq.md:block 120 (ordered list)
msgid ""
"They allow access to some of the modified APIs. There is no simple call that"
" JShelter can issue to apply the modifications to Web Workers. So, if you do"
" not apply WebWorker protection, you risk that Web Workers can remove other "
"protections."
msgstr ""

#: ../content/pages/faq.md:block 120 (ordered list)
msgid ""
"They increase the capabilities of attackers. For example, malicious actors "
"can install long-lived proxies to the browser."
msgstr ""

#: ../content/pages/faq.md:block 121 (paragraph)
msgid ""
"For more details, see [Web Worker "
"documentation](https://developer.mozilla.org/en-"
"US/docs/Web/API/Web_Workers_API/Using_web_workers), the [explanation of "
"using Web Workers as Man-In-The-Middle "
"proxy](https://betterprogramming.pub/man-in-the-middle-attacks-via-"
"javascript-service-workers-52647ac929a2), papers like [Assessing the threat "
"of web worker distributed "
"attacks](https://www.researchgate.net/publication/313953354_Assessing_the_threat_of_web_worker_distributed_attacks),"
" and other [works](http://www.diva-"
"portal.se/smash/get/diva2:1218197/FULLTEXT01.pdf)."
msgstr ""

#: ../content/pages/faq.md:block 122 (header)
msgid "What is Network Boundary Shield (NBS)?"
msgstr ""

#: ../content/pages/faq.md:block 123 (paragraph)
msgid ""
"Your browser can be instructed by the creators of the visited page (or "
"malicious actors that successfully inserted their code into the visited "
"page) to act as an intermediary device that creates connections to other "
"devices in the network. NBS detects and prevents such attacks, see its "
"[dedicated page](/nbs/) and our [blog post](/localportscanning/) for more "
"information."
msgstr ""

#: ../content/pages/faq.md:block 124 (header)
msgid ""
"My device has a lot of sensors. Are these accessible by web pages? Does "
"JShelter help me?"
msgstr ""

#: ../content/pages/faq.md:block 125 (paragraph)
msgid ""
"Depending on your browser and your settings, web pages can read sensors "
"leading to various attacks that include revealing hidden information, and "
"fingerprinting. JShelter [deals with sensors](/sensorapi/)."
msgstr ""

#: ../content/pages/faq.md:block 126 (header)
msgid "Does JShelter help me against attacks exploiting hardware faults?"
msgstr ""

#: ../content/pages/faq.md:block 127 (paragraph)
msgid ""
"Yes, JShelter modifies all timestamps, which limits the precision of time "
"measurements. JShelter rounds the timestamps and adds random number of "
"milliseconds to the rounded value, preserving the monotony of the "
"timestamps. The modifications also remove the possibility of [detecting "
"clock "
"skew](https://www.jucs.org/jucs_21_9/clock_skew_based_computer/jucs_21_09_1210_1233_polcak.pdf)"
" of your device quickly. See [our paper](#what-is-the-proper-way-to-cite-"
"jshelter-in-a-paper) for more details."
msgstr ""

#: ../content/pages/faq.md:block 128 (header)
msgid "Does JShelter protect my IP address?"
msgstr ""

#: ../content/pages/faq.md:block 129 (paragraph)
msgid ""
"No, and it never will. You need to find a VPN, Tor, or a similar technique "
"to hide your IP address."
msgstr ""

#: ../content/pages/faq.md:block 130 (header)
msgid "Does JShelter replace a tracker blocker?"
msgstr ""

#: ../content/pages/faq.md:block 131 (paragraph)
msgid ""
"No, many extensions specialize in list-based tracking. We consider list-"
"based tracking out-of-scope of the JShelter mission. You should keep using a"
" tracker blocker like [uBlock "
"Origin](https://github.com/gorhill/uBlock#ublock-origin) in parallel with "
"JShelter."
msgstr ""

#: ../content/pages/faq.md:block 132 (header)
msgid ""
"Does JShelter modify identifiers in cookies, web storage or other tracking "
"IDs?"
msgstr ""

#: ../content/pages/faq.md:block 133 (paragraph)
msgid ""
"Not directly. Use other tools to block such trackers. Firefox's built-in "
"protection mechanisms and tracker blockers are excellent tools that "
"complement JShelter well."
msgstr ""

#: ../content/pages/faq.md:block 134 (paragraph)
msgid ""
"Nevertheless, some IDs might be derived based on fingerprinting scripts. In "
"that case, JShelter will modify such ID, and depending on the implementation"
" and your JShelter settings, your identity might change for each visited "
"origin and each session."
msgstr ""

#: ../content/pages/faq.md:block 135 (header)
msgid "Interactions between JShelter and other similar tools"
msgstr ""

#: ../content/pages/faq.md:block 136 (header)
msgid "What other extension do you recommend to run along JShelter?"
msgstr ""

#: ../content/pages/faq.md:block 137 (paragraph)
msgid ""
"We consider a tracker blocker like [uBlock "
"Origin](https://github.com/gorhill/uBlock#ublock-origin) as a must. It will "
"make your browsing faster, make your pages clean, and improve your privacy. "
"Nevertheless, it is easy to evade blockers. The malicious web server needs "
"to change the URL of the script. JShelter developers encountered several "
"malicious scripts that evaded common lists. Hence, blocklist-based filtering"
" is beneficial as a first-line defense. However, blockers are not enough as "
"niche cases evade the blockers."
msgstr ""

#: ../content/pages/faq.md:block 138 (paragraph)
msgid ""
"Web extensions like [NoScript Security Suite](https://noscript.net/) or "
"[uMatrix](https://github.com/gorhill/uMatrix) allow users to block "
"JavaScript or other content, either completely or per domain. However, the "
"user needs to evaluate which domains to allow scripts. [HTTP Archive "
"reports](https://httparchive.org/reports/page-"
"weight?start=earliest&end=latest&view=list#reqJs) that an average page "
"includes (at the time of writing this text) 22 external requests (21 "
"requests for mobile devices). Many pages depend on JavaScript. Users must "
"select what content to trust. A typical page contains resources from many "
"external sources, so such a user requires excellent knowledge. Moreover, "
"malicious code may be only a part of a resource; the rest of the resource "
"can be necessary for correct page functionality. We believe that web "
"extensions like NoScript Security Suite and uMatrix origin are good but do "
"not protect the user from accidentally allowing malicious code. The NoScript"
" Suite main developer is a part of the JShelter team, and JShelter shares a "
"lot of code with NoScript."
msgstr ""

#: ../content/pages/faq.md:block 139 (paragraph)
msgid ""
"We suggest that you use other extensions like [Cookie "
"AutoDelete](https://github.com/Cookie-AutoDelete/Cookie-AutoDelete), "
"[Decentraleyes](https://decentraleyes.org), "
"[ClearURLs](https://docs.clearurls.xyz). All these extensions are important "
"in making your browser leak as little data as possible, and all these "
"protections are out-of-scope of JShelter."
msgstr ""

#: ../content/pages/faq.md:block 140 (paragraph)
msgid ""
"Also consider that [web extensions cannot hide your IP address](#does-"
"jshelter-protect-my-ip-address)."
msgstr ""

#: ../content/pages/faq.md:block 141 (header)
msgid "I already have a blocking extension installed. Do I need JShelter?"
msgstr ""

#: ../content/pages/faq.md:block 142 (paragraph)
msgid ""
"Blocking extensions are typically based on a list of commonly known "
"malicious URLs. Hence, someone needs to discover such a URL first. Some "
"malicious URLs are never added to blocking lists because they were not "
"discovered. Others might be added to a small or specialized list only. "
"JShelter protects you from some threats not yet added to the lists."
msgstr ""

#: ../content/pages/faq.md:block 143 (paragraph)
msgid ""
"Some login pages fingerprint you during the login process. But you might "
"want to keep your specific device configuration private from such a page. "
"JShelter can limit (`Strict` level) or fake (`Recommended` level) "
"information commonly used for browser fingerprinting."
msgstr ""

#: ../content/pages/faq.md:block 144 (header)
msgid ""
"I am using Firefox Fingerprinting Protection (resistFingerprinting). Should "
"I continue? Should I turn Firefox Fingerprinting Protection on?"
msgstr ""

#: ../content/pages/faq.md:block 145 (paragraph)
msgid ""
"Mozilla is working on integrating fingerprinting resisting techniques [from "
"Torbrowser](https://bugzilla.mozilla.org/show_bug.cgi?id=1329996) to Firefox"
" (Firefox Fingerprinting Protection, also known as resist fingerprinting). "
"However, the work is not done. Firefox Fingerprinting Protection tries to "
"confuse simple fingerprinters with random data. Sophisticated fingerprinters"
" will create a [homogeneous fingerprint](/fingerprinting/). It is a research"
" question if the homogeneous fingerprint strategy makes sense before it is "
"adopted by all users."
msgstr ""

#: ../content/pages/faq.md:block 146 (paragraph)
msgid ""
"Moreover, inconsistencies arise. For example, Torbrowser does not implement "
"WebGL. As Firefox adopts fingerprinting protections from Torbrowser, Firefox"
" modifies readings from 2D canvas and does not modify WebGL canvas. That "
"creates a false sense of protection. JShelter modifies 2D and WebGL canvas "
"consistently."
msgstr ""

#: ../content/pages/faq.md:block 147 (paragraph)
msgid ""
"Firefox Fingerprinting Protection may be useful for cases like having an "
"ordinary laptop with default settings that changes IP addresses a lot. But "
"if you like to have the same fingerprint as many other users, we suggest "
"that you use Tor Browser."
msgstr ""

#: ../content/pages/faq.md:block 148 (paragraph)
msgid ""
"You cannot tweak Firefox Fingerprinting Protection. You must activate all or"
" nothing. JShelter provides options to modify behavior per domain."
msgstr ""

#: ../content/pages/faq.md:block 149 (header)
msgid "Should I install JShelter if I am using Brave browser?"
msgstr ""

#: ../content/pages/faq.md:block 150 (paragraph)
msgid ""
"Many JShelter protections come from Brave. While JShelter offers some "
"additional protections, the key parts are shared with Brave. You should not "
"use JavaScript Shield, or you should tweak its levels to remove duplicates. "
"You should use the Network Boundary Shield and Fingerprint Detector. While "
"we keep a close eye on Brave protection, we do not offer any protection "
"specifically tailored for Brave. If you have one, please let us know."
msgstr ""

#: ../content/pages/faq.md:block 151 (header)
msgid ""
"I am using some other anti-fingerprinting extension. Should I continue? "
"Should I combine such extensions?"
msgstr ""

#: ../content/pages/faq.md:block 152 (paragraph)
msgid ""
"You should consider (at least) the following. But first, see our blog post "
"on [fingerprinting](/fingerprinting/)."
msgstr ""

#: ../content/pages/faq.md:block 153 (paragraph)
msgid ""
"JSS modifies your fingerprint while FPD detects or prevents (if allowed) "
"fingerprinting. If you combine more approaches to modify the fingerprint, "
"the results are not predictable. All extensions might modify the same or "
"similar data, or they might modify different APIs. If you use multiple "
"approaches that focus on different APIs, you might be less fingerprintable. "
"However, you might as well use a unique combination and be easily "
"fingerprintable by a focused or advanced fingerprinter."
msgstr ""

#: ../content/pages/faq.md:block 154 (paragraph)
msgid ""
"Let us see an example. Suppose that you install an extension A that modifies"
" the content of the canvas element. As JShelter modifies only data during "
"reading from canvas, it will apply its countermeasures after the "
"countermeasures of A. In `Strict` level, it will override all modifications "
"by A. The little lies approach would slightly modify the modifications of A."
" That would likely be pointless or even counterproductive."
msgstr ""

#: ../content/pages/faq.md:block 155 (paragraph)
msgid ""
"Now, consider another extension B that modifies the read data as well. Both "
"extensions try to change the same APIs, which likely creates a race "
"condition on which defense mechanism wins. If it is indeed the race "
"condition, you may be fingerprintable better as the one who uses both B and "
"JShelter or less because the fingerprinter sees different fingerprints. "
"Which one is correct depends on how smart and focused the fingerprinter is."
msgstr ""

#: ../content/pages/faq.md:block 156 (paragraph)
msgid ""
"Jshelter tries to apply consistent modifications. However, if B modifies "
"only a subset of APIs that JShelter modifies, and an advanced fingerprinter "
"can misuse that information to improve the fingerprint."
msgstr ""

#: ../content/pages/faq.md:block 157 (paragraph)
msgid ""
"If you use more approaches similar to FPD, they will likely not interact "
"badly with each other."
msgstr ""

#: ../content/pages/faq.md:block 158 (paragraph)
msgid ""
"You can tweak JShelter to apply only some protections. For example, by "
"creating your own JSS levels. You can also use the \"Turn fingerprinting "
"protection off\" built-in level to keep the non-fingerprinting "
"countermeasures. You can also turn JSS off and benefit from FPD and NBS."
msgstr ""

#: ../content/pages/faq.md:block 159 (paragraph)
msgid ""
"JShelter includes advanced techniques through "
"[NSCL](https://noscript.net/commons-library) to inject API [wrappers](#what-"
"is-a-wrapper) in time and reliably. Other extensions might not apply their "
"protection reliably. See also [the question](#i-saw-several-extensions-that-"
"claim-that-it-is-not-possible-to-modify-the-javascript-environment-reliably-"
"are-you-aware-of-the-firefox-bug-1267027) on [Firefox bug "
"1267027](https://bugzilla.mozilla.org/show_bug.cgi?id=1267027)."
msgstr ""

#: ../content/pages/faq.md:block 160 (paragraph)
msgid ""
"Most other tools focus on [homogeneous fingerprints](/fingerprinting/). By "
"running the `Recommended` JShelter JSS level, you will modify the "
"fingerprint and create a very small group, likely consisting only of you. "
"Nevertheless, some fingerprinters can be confused even in that case, so you "
"might be less identifiable by such dumb fingerprinters."
msgstr ""

#: ../content/pages/faq.md:block 161 (paragraph)
msgid ""
"Suppose a dumb fingerprinter that creates a single number by combining all "
"fingerprintable data. As JShelter modifies the APIs differently in each "
"session and on each domain. There is no point in installing other "
"fingerprint-modifying extensions."
msgstr ""

#: ../content/pages/faq.md:block 162 (paragraph)
msgid ""
"Suppose a more clever fingerprinter that somehow analyses the "
"fingerprintable data. It might detect that you use JShelter or a similar "
"approach. However, it is possible that the analysis fails in case of "
"unexpected behavior of multiple extensions, so multiple extensions might "
"help you confuse the fingerprinter."
msgstr ""

#: ../content/pages/faq.md:block 163 (paragraph)
msgid ""
"An even more clever fingerprinter can focus on unique traits of your "
"extensions (that modify the page, including page decorators or extensions "
"that include buttons to the page, like downloaders or password managers. As "
"the JShelter's [threat model](/threatmodel/) does not protect from such "
"fingerprinters, you will be better off if you do not let JShelter modify the"
" fingerprint."
msgstr ""

#: ../content/pages/faq.md:block 164 (header)
msgid ""
"I saw several extensions that claim that it is not possible to modify the "
"JavaScript environment reliably. Are you aware of the [Firefox bug "
"1267027](https://bugzilla.mozilla.org/show_bug.cgi?id=1267027)"
msgstr ""

#: ../content/pages/faq.md:block 165 (paragraph)
msgid ""
"Yes, we are aware of the issues concerning reliable script injections before"
" page scripts can permanently access original API calls. In fact, JShelter "
"(then JavaScript Restrictor) [suffered from the "
"bug](https://github.com/polcak/jsrestrictor/issues/25) for several versions."
" JShelter integrates [NSCL](https://noscript.net/commons-library) that "
"allows JShelter to insert its scripts reliably before page scripts start "
"running. Hence, the APIs are guaranteed to be protected. NSCL provides a "
"cross-browser layer that aims at modifying all ways to obtain API functions "
"like iframes, pages protected by CSP, and others. See our "
"[paper](https://arxiv.org/pdf/1905.01051.pdf) for more details on the "
"integration of NSCL to JShelter."
msgstr ""

#: ../content/pages/faq.md:block 166 (header)
msgid ""
"How does NBS interact with proxies? Do my DNS requests leak through NBS?"
msgstr ""

#: ../content/pages/faq.md:block 167 (paragraph)
msgid ""
"If you are using a proxy, the attacks, which the NBS tries to prevent, go "
"through the proxy to the local network of the proxy (but keep in mind that "
"this might not be true for more complex configurations)."
msgstr ""

#: ../content/pages/faq.md:block 168 (paragraph)
msgid ""
"NBS in Chromium-based browsers works the same way as it would work without "
"the proxy. NBS protects the local network of the proxy in that case. "
"Depending on the deployment and exact configuration, it may also protect "
"your local network."
msgstr ""

#: ../content/pages/faq.md:block 169 (paragraph)
msgid ""
"NBS in Firefox employs the DNS API that initiates DNS requests. Contextual "
"identities allow users to go through a proxy in some tabs and not in others."
" We decided not to perform DNS resolution in NBS for proxied requests. See "
"<a href=\"https://pagure.io/JShelter/webextension/issue/41\">issue 41</a> "
"and <a href=\"https://pagure.io/JShelter/webextension/issue/85\">issue "
"85</a> for more details. We might decide to reimplement NBS in Firefox "
"similarly to the Chromium version in the future for proxied requests. "
"Another possible option, we might consider in the future, is adding a "
"configuration option to allow users to opt-in to perform DNS resolution in "
"NBS, which would be useful for users running an HTTP proxy in their local "
"network. If you have good arguments for changing the behavior, please share "
"them with us."
msgstr ""

#: ../content/pages/faq.md:block 170 (header)
msgid "Limitations of supported browsers"
msgstr ""

#: ../content/pages/faq.md:block 171 (header)
msgid "Why does JShelter/NSCL initiate web requests to ff00::?"
msgstr ""

#: ../content/pages/faq.md:block 172 (paragraph)
msgid ""
"First, see [question on reliable JavaScript environment "
"modifications](#i-saw-several-extensions-that-claim-that-it-is-not-possible-"
"to-modify-the-javascript-environment-reliably-are-you-aware-of-the-firefox-"
"bug-1267027)."
msgstr ""

#: ../content/pages/faq.md:block 173 (paragraph)
msgid ""
"NSCL needs a synchronous way to transfer data between different scripts of "
"the extension. Web Extension APIs only allow asynchronous communication. But"
" do not worry. The request is canceled in the "
"[code](https://github.com/hackademix/nscl/blob/40e765f0d66a10b25a27a375bc62ea141a73734f/common/SyncMessage.js#L106)."
msgstr ""

#: ../content/pages/faq.md:block 174 (paragraph)
msgid "Additionally [ff00::]"
msgstr ""

#: ../content/pages/faq.md:block 175 (unordered list)
msgid ""
"is a [reserved multicast IPV6 "
"address](https://www.iana.org/assignments/ipv6-multicast-"
"addresses/ipv6-multicast-addresses.xhtml#ipv6-scope),"
msgstr ""

#: ../content/pages/faq.md:block 175 (unordered list)
msgid ""
"hence, it is not a valid HTTP endpoint (if you try to navigate "
"http://[ff00::] the browser will always tell you that the resource is "
"unreachable),"
msgstr ""

#: ../content/pages/faq.md:block 175 (unordered list)
msgid ""
"the [SyncMessage back-end cancels the "
"webRequest](https://github.com/hackademix/nscl/blob/40e765f0d66a10b25a27a375bc62ea141a73734f/common/SyncMessage.js#L106)."
msgstr ""

#: ../content/pages/faq.md:block 176 (paragraph)
msgid ""
"Some tools can see such a request, but it will never leave your browser."
msgstr ""

#: ../content/pages/faq.md:block 177 (header)
msgid "Does NBS work the same way in Firefox and Chromium-based browsers?"
msgstr ""

#: ../content/pages/faq.md:block 178 (paragraph)
msgid ""
"No. Firefox allows webextensions to perform DNS resolution of the domain "
"name that the browser is about to get information from. The resolution of "
"the DNS name to an IP address is crucial for FPD. As Firefox allows to "
"perform the resolution before any request leaves the browser, JShelter can "
"prevent each attempt to cross the network boundary."
msgstr ""

#: ../content/pages/faq.md:block 179 (paragraph)
msgid ""
"Chromium-based browsers do not offer the DNS resolution APIs. JShelter "
"collects resolution results in a cache that is filled during the processing "
"of each request (after the browser makes the request). That means that the "
"first request for each domain name goes through. JShleter blocks all "
"subsequent requests only."
msgstr ""

#: ../content/pages/faq.md:block 180 (paragraph)
msgid ""
"Keep in mind that an adversary can change the domain with each request. For "
"example, the attacker can use a.attacker.com, b.a.attacker.com, "
"c.b.a.attacker.com in sequence for its requests to go through. So it is easy"
" for an attacker to bypass NBS. In practice, we know about attackers that do"
" not change domain names (for example, see [our blog](/localportscanning/))."
" So we keep the NBS in Chromium-based browsers, even though it is not "
"perfect."
msgstr ""

#: ../content/pages/faq.md:block 181 (header)
msgid "Do you support Firefox for Android?"
msgstr ""

#: ../content/pages/faq.md:block 182 (paragraph)
msgid ""
"We tested JShelter in Firefox for Android in the past and it worked as "
"expected. We do not test JShelter in Firefox for Android regularly but a "
"volunteer that tracks the status of JShelter in Firefox for Android is "
"welcomed."
msgstr ""

#: ../content/pages/faq.md:block 183 (header)
msgid ""
"I cannot see JShelter listed in the addons supported by Firefox for Android."
msgstr ""

#: ../content/pages/faq.md:block 184 (paragraph)
msgid ""
"For whatever reason, Mozilla decided to only present [a small number of "
"curated extensions](https://support.mozilla.org/en-US/kb/find-and-install-"
"add-ons-firefox-android) in their mobile application by default. There are "
"some great extensions there like uBlock Origin, NoScript, and DarkReader, "
"but JShelter was not one of them."
msgstr ""

#: ../content/pages/faq.md:block 185 (paragraph)
msgid ""
"You should be able to workaround the limitations by creating a [collection "
"with JShelter](https://www.androidpolice.com/install-add-on-extension-"
"mozilla-firefox-android/)."
msgstr ""

#: ../content/pages/faq.md:block 186 (paragraph)
msgid ""
"A change in the policy of the default extensions listed by Addons "
"Mozilla.org is out of our control."
msgstr ""

#: ../content/pages/faq.md:block 187 (header)
msgid "Other questions"
msgstr ""

#: ../content/pages/faq.md:block 188 (header)
msgid "What is a wrapper?"
msgstr ""

#: ../content/pages/faq.md:block 189 (paragraph)
msgid ""
"Wrapper is typically a small block of code that JShelter attach to some of "
"the APIs offered by the browser. These code typically reads the original "
"value to modify that before returning to the caller. Page scripts cannot "
"side-step the wrappers to get direct access to the original API. "
"Nevertheless, see the [question on reliable JavaScript environment "
"modifications](#i-saw-several-extensions-that-claim-that-it-is-not-possible-"
"to-modify-the-javascript-environment-reliably-are-you-aware-of-the-firefox-"
"bug-1267027)."
msgstr ""

#: ../content/pages/faq.md:block 190 (header)
msgid "What is WebAssembly speed-up?"
msgstr ""

#: ../content/pages/faq.md:block 191 (paragraph)
msgid ""
"In 2023, we improved the speed of some code inside JShelter. Some of the "
"[wrappers](#what-is-a-wrapper) were reimplemented in WebAssembly with the "
"focus on providing the same results as the original JavaScript-only "
"wrappers."
msgstr ""

#: ../content/pages/faq.md:block 192 (paragraph)
msgid ""
"Unless hit by Chrome-bug that prevents injecting WebAssembly wrappers to "
"some pages, WebAssembly wrappers are enabled by default. We suggest that you"
" keep WebAssembly wrappers activated. However, you can turn off WebAssembly "
"speed-up and return to JavaScript-only wrappers."
msgstr ""

#: ../content/pages/faq.md:block 193 (header)
msgid "I am a web developer, can JShelter help me?"
msgstr ""

#: ../content/pages/faq.md:block 194 (paragraph)
msgid "Possibly yes."
msgstr ""

#: ../content/pages/faq.md:block 195 (paragraph)
msgid ""
"First of all, you can use [FPD and its reports](/fpd/) to learn the APIs "
"that your page calls. Of course, FPD focuses on APIs that are often misused "
"during browser fingerprinting, so that you learn only some APIs."
msgstr ""

#: ../content/pages/faq.md:block 196 (paragraph)
msgid ""
"You can create JSS levels that remove some functionality like geolocation, "
"workers, or access to sensor API to test that your page handles such "
"browsers."
msgstr ""

#: ../content/pages/faq.md:block 197 (header)
msgid ""
"I am a data protection officer or I work for a data protection agency. Can "
"JShelter help me?"
msgstr ""

#: ../content/pages/faq.md:block 198 (paragraph)
msgid "Yes. Change JShelter configuration to passive mode:"
msgstr ""

#: ../content/pages/faq.md:block 199 (ordered list)
msgid "*Turn JavaScript Shield off*,"
msgstr ""

#: ../content/pages/faq.md:block 199 (ordered list)
msgid "disable blocking behaviour of [NBS](/nbs/) but keep the notifications,"
msgstr ""

#: ../content/pages/faq.md:block 199 (ordered list)
msgid ""
"set [FPD](/fpd/) to passive, keep the notifications on, and depending on "
"your use case, set the detection mode to *default* or *strict*."
msgstr ""

#: ../content/pages/faq.md:block 200 (paragraph)
msgid ""
"Compare the information provided by NBS and FPD in notifications and [FPD "
"report](/fpd/) to the information in the privacy policy of the tested "
"website."
msgstr ""

#: ../content/pages/faq.md:block 201 (paragraph)
msgid ""
"[Let us know](mailto:jshelter@gnu.org) about any question or experience."
msgstr ""

#: ../content/pages/faq.md:block 202 (header)
msgid "What is the proper way to cite JShelter in a paper?"
msgstr ""

#: ../content/pages/faq.md:block 203 (paragraph)
msgid ""
"Please cite *POLČÁK Libor, SALOŇ Marek, MAONE Giorgio, HRANICKÝ Radek and "
"McMAHON Michael. JShelter: Give Me My Browser Back. In: Proceedings of the "
"20th International Conference on Security and Cryptography. Rome: SciTePress"
" - Science and Technology Publications, 2023, pp. 287-294. ISBN "
"978-989-758-666-8.*"
msgstr ""

#: ../content/pages/faq.md:block 205 (paragraph)
msgid ""
"That paper has an extended version at [ArXiv "
"paper](https://arxiv.org/abs/2204.01392). Please cite the published version "
"if possible. We are working on other publications. We will update this "
"answer in the future."
msgstr ""

#: ../content/pages/fpd.md:block 1 (paragraph)
msgid "Title: Fingerprint Detector"
msgstr ""

#: ../content/pages/fpd.md:block 2 (paragraph)
msgid ""
"Fingerprint Detector (FPD) provides heuristic analysis of fingerprinting "
"behaviour. FPD monitors APIs that are commonly used by fingerprinters and "
"applies a heuristic approach to detect fingerprinting behaviour in real-"
"time. When a fingerprinting attempt is detected, FPD notifies the user. The "
"user can configure JShelter to reactively block subsequent asynchronous HTTP"
" requests initiated by the fingerprinting page and clear the storage "
"facilities where the page could have stored a (partial) fingerprint. "
"However, this behaviour may break the page. The goal of the aggressive mode "
"is to prevent the page from uploading the full fingerprint to a server. "
"However, the fingerprinter can gradually upload detected values and a "
"partial fingerprint can leak from the browser."
msgstr ""

#: ../content/pages/fpd.md:block 3 (paragraph)
msgid ""
"The heuristic approach was chosen as many prior studies proved it to be a "
"viable approach with a very low false-positive rate. The most challenging "
"part of this approach is a careful selection of detection conditions. The "
"heuristics contain two basic types of entries:"
msgstr ""

#: ../content/pages/fpd.md:block 4 (ordered list)
msgid ""
"JavaScript API endpoints, which are relevant for fingerprinting detection "
"and"
msgstr ""

#: ../content/pages/fpd.md:block 4 (ordered list)
msgid "a hierarchy of groups of related endpoints."
msgstr ""

#: ../content/pages/fpd.md:block 5 (paragraph)
msgid ""
"For example, FPD groups endpoints according to their semantic properties. "
"Imagine that there are two different endpoints. Both provide hardware "
"information about the device. FPD can assign both endpoints to a group that "
"covers access to the same hardware properties. The heuristics allow "
"clustering groups to other groups and creating a hierarchy of groups. "
"Ultimately, the heuristics are a tree-like structure that computes the "
"threat that a webpage tried to obtain enough information to compute a unique"
" fingerprint."
msgstr ""

#: ../content/pages/fpd.md:block 6 (paragraph)
msgid ""
"The whole evaluation process dynamically observes the API calls performed by"
" a web page. FPD analyses the calls themselves. Hence, the dynamic analysis "
"overcomes any obfuscation of fingerprinting scripts."
msgstr ""

#: ../content/pages/fpd.md:block 7 (paragraph)
msgid ""
"FPD provides a report that explains why FPD evaluated a visited page as a "
"fingerprinter. The report aims to educate users about fingerprinting and "
"report why FPD notified the user and optionally blocked the page. "
"Additionally, the report can be generated from passive observation of web "
"page calls without any JShelter interaction with the page (no API blocking)."
msgstr ""

#: ../content/pages/fpd.md:block 8 (paragraph)
msgid ""
"![FPD report shows the reasoning to claim that a page is fingerprinting the "
"browser]({attach}/images/cooperation/fpd-report.png)"
msgstr ""

#: ../content/pages/home.md:block 1 (paragraph)
msgid "Title: Home Template: home save_as: index.html URL:"
msgstr ""

#: ../content/pages/install.md:block 1 (paragraph)
msgid "Title: Installing"
msgstr ""

#: ../content/pages/install.md:block 2 (paragraph)
msgid ""
"JShelter can be installed directly through each browser's extension "
"repository:"
msgstr ""

#: ../content/pages/install.md:block 3 (unordered list)
msgid ""
"[Firefox](https://addons.mozilla.org/firefox/addon/javascript-restrictor/)"
msgstr ""

#: ../content/pages/install.md:block 3 (unordered list)
msgid ""
"[Chrome](https://chrome.google.com/webstore/detail/javascript-"
"restrictor/ammoloihpcbognfddfjcljgembpibcmb)"
msgstr ""

#: ../content/pages/install.md:block 3 (unordered list)
msgid ""
"[Opera](https://addons.opera.com/extensions/details/javascript-restrictor/)"
msgstr ""

#: ../content/pages/install.md:block 4 (paragraph)
msgid ""
"To compile the extension from the source code, see the [building from "
"scratch](/build/) documentation."
msgstr ""

#: ../content/pages/integration_tests.md:block 1 (paragraph)
msgid "Title: Instructions on how to run integration tests"
msgstr ""

#: ../content/pages/integration_tests.md:block 2 (paragraph)
msgid ""
"JShelter's integration tests automatically verify that JShelter wraps the "
"supported JavaScript APIs and does not affect other attributes. You need to "
"set up your test environment before the first test run!"
msgstr ""

#: ../content/pages/integration_tests.md:block 3 (header)
msgid "SET UP TEST ENVIRONMENT"
msgstr ""

#: ../content/pages/integration_tests.md:block 4 (header)
msgid "Install required programs and tools"
msgstr ""

#: ../content/pages/integration_tests.md:block 5 (paragraph)
msgid "The integration tests depend on the following packages:"
msgstr ""

#: ../content/pages/integration_tests.md:block 6 (unordered list)
msgid "[Python 3.5+](https://www.python.org/downloads/)"
msgstr ""

#: ../content/pages/integration_tests.md:block 6 (unordered list)
msgid "[Python package `pytest`](https://pypi.org/project/pytest/)"
msgstr ""

#: ../content/pages/integration_tests.md:block 6 (unordered list)
msgid "[Python package `selenium`](https://pypi.org/project/selenium/)"
msgstr ""

#: ../content/pages/integration_tests.md:block 6 (unordered list)
msgid "[Google Chrome](https://www.google.com/chrome/) - Chromium also work."
msgstr ""

#: ../content/pages/integration_tests.md:block 6 (unordered list)
msgid ""
"Mozilla Firefox - Be careful, [ESR](https://www.mozilla.org/en-"
"US/firefox/all/#product-desktop-esr), "
"[Developer](https://www.mozilla.org/en-US/firefox/developer/), or "
"[Nightly](https://www.mozilla.org/en-US/firefox/channel/desktop/#nightly) "
"edition are required. The standard edition is not supported."
msgstr ""

#: ../content/pages/integration_tests.md:block 6 (unordered list)
msgid "[Web browser drivers](#webdrivers), see below"
msgstr ""

#: ../content/pages/integration_tests.md:block 7 (paragraph)
msgid ""
"A [web browser driver](#webdrivers) selects the installed version of the web"
" browser. One option is to install only a single version of each browser. "
"The web browser's profiles must not have JShelter installed. The testing "
"script installs JShelter by itself. We suggest that you use a separate "
"profile for testing."
msgstr ""

#: ../content/pages/integration_tests.md:block 8 (header)
msgid "How to install Mozilla Firefox on Linux"
msgstr ""

#: ../content/pages/integration_tests.md:block 9 (paragraph)
msgid ""
"We recommend downloading Firefox binaries from the "
"[ESR](https://www.mozilla.org/en-US/firefox/all/#product-desktop-esr), "
"[Developer](https://www.mozilla.org/en-US/firefox/developer/), or "
"[Nightly](https://www.mozilla.org/en-US/firefox/channel/desktop/#nightly) "
"channels to a local directories. Set `firefox_binary_location` in the test "
"configuration accordingly."
msgstr ""

#: ../content/pages/integration_tests.md:block 10 (paragraph)
msgid "In Ubuntu, you can install ESR following:"
msgstr ""

#: ../content/pages/integration_tests.md:block 12 (header)
msgid "Setup web browsers"
msgstr ""

#: ../content/pages/integration_tests.md:block 13 (paragraph)
msgid ""
"Open Mozilla Firefox ESR and change preference "
"`xpinstall.signatures.required` to `false` in the Firefox Configuration "
"Editor (`about:config` page). You can follow [official Mozilla "
"support](https://support.mozilla.org/en-US/kb/add-on-signing-in-"
"firefox#w_what-are-my-options-if-i-want-to-use-an-unsigned-add-on-advanced-"
"users)."
msgstr ""

#: ../content/pages/integration_tests.md:block 14 (paragraph)
msgid ""
"Open [testing page](https://polcak.github.io/jsrestrictor/test/test.html) "
"and click the button *Show GPS data*. Firefox will ask you if you want to "
"enable the page to access the location. Check the option *Remember this "
"decision* and then click *Allow*."
msgstr ""

#: ../content/pages/integration_tests.md:block 15 (paragraph)
msgid ""
"The default configuration of Google Chrome is sufficient for integration "
"tests, so the Chrome settings do not need to be changed."
msgstr ""

#: ../content/pages/integration_tests.md:block 16 (header)
msgid "<a name=\"webdrivers\">Download web browser drivers</a>"
msgstr ""

#: ../content/pages/integration_tests.md:block 17 (paragraph)
msgid ""
"Selenium needs web browser drivers to control the browser. If the Selenium "
"drivers are not in your package repository or you do not want to use drivers"
" from your repository, download the web browser drivers for your web "
"browsers - Google Chrome and Mozilla Firefox - and your platform - Windows "
"and Linux."
msgstr ""

#: ../content/pages/integration_tests.md:block 18 (paragraph)
msgid ""
"Download the ChromeDriver from [download "
"page](https://chromedriver.chromium.org/downloads) for Google Chrome. Select"
" the version corresponding to the version of your Google Chrome web browser."
" Download the correct ChromeDriver to folder "
"`../common_files/webbrowser_drivers` with the name `chromedriver.exe` (for "
"Windows) or `chromedriver` (for Linux). If you download an incompatible "
"version, you will see an error during the initialization of the tests."
msgstr ""

#: ../content/pages/integration_tests.md:block 19 (paragraph)
msgid ""
"Download the GeckoDriver from [download "
"page](https://github.com/mozilla/geckodriver/releases) for Mozilla Firefox. "
"Select the version corresponding to the version of your Mozilla Firefox web "
"browser (typically the newest version). Download the correct GeckoDriver to "
"folder `../common_files/webbrowser_drivers` with the name `geckodriver.exe` "
"(for Windows) or `geckodriver` (for Linux). If you download an incompatible "
"version, you will see an error during starting tests."
msgstr ""

#: ../content/pages/integration_tests.md:block 20 (header)
msgid "Integration tests' configuration"
msgstr ""

#: ../content/pages/integration_tests.md:block 21 (paragraph)
msgid ""
"You can change selected browsers, their profiles, and tested JShelter levels"
" by modifying the file `./testing/configuration.py`."
msgstr ""

#: ../content/pages/integration_tests.md:block 22 (header)
msgid "RUN TESTS"
msgstr ""

#: ../content/pages/integration_tests.md:block 23 (header)
msgid "on Windows OS"
msgstr ""

#: ../content/pages/integration_tests.md:block 24 (ordered list)
msgid ""
"Install Windows Subsystem for Linux (WSL): https://docs.microsoft.com/en-"
"us/windows/wsl/install-win10."
msgstr ""

#: ../content/pages/integration_tests.md:block 24 (ordered list)
msgid ""
"Convert EOL in the scripts `fix_manifest.sh` (in the root directory of "
"JShelter project) and `nscl/include.sh` from Windows (CR LF) to Unix (LF) - "
"you can use the tool `dos2unix` in WSL to convert CR LF to LF."
msgstr ""

#: ../content/pages/integration_tests.md:block 24 (ordered list)
msgid ""
"Open the root directory of JShelter project in WSL and run the command "
"`make`."
msgstr ""

#: ../content/pages/integration_tests.md:block 24 (ordered list)
msgid ""
"Open PowerShell in folder *integration_tests* and run command: "
"`.\\start_integration_tests.ps1`"
msgstr ""

#: ../content/pages/integration_tests.md:block 25 (paragraph)
msgid ""
"The script may ask you for the path into the directory where the file "
"chrome.exe is stored and where the files of the Firefox ESR default profile "
"are stored."
msgstr ""

#: ../content/pages/integration_tests.md:block 26 (paragraph)
msgid ""
"The default location of chrome.exe is: `C:\\Program Files "
"(x86)\\Google\\Chrome\\Application` The default location of Firefox ESR "
"profile is: "
"`C:\\Users\\<username>\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\<profilename>.default-"
"esr`"
msgstr ""

#: ../content/pages/integration_tests.md:block 27 (paragraph)
msgid ""
"If the script does not find the needed files in the default locations, it "
"prompts you to insert the path."
msgstr ""

#: ../content/pages/integration_tests.md:block 28 (paragraph)
msgid ""
"When script execution starts for the first time, OS Windows may ask you to "
"allow Firewall Exception for this script (for Python). Click *Allow*."
msgstr ""

#: ../content/pages/integration_tests.md:block 29 (header)
msgid "on Linux OS"
msgstr ""

#: ../content/pages/integration_tests.md:block 30 (paragraph)
msgid ""
"Open Terminal in folder *integration_tests* and run command: "
"`./start_integration_tests.sh`"
msgstr ""

#: ../content/pages/integration_tests.md:block 31 (paragraph)
msgid ""
"The script may ask you for the path of the Firefox ESR default profile. The "
"default location of the default profile is: "
"`/home/<username>/.mozilla/firefox/<profilename>.default-esr`"
msgstr ""

#: ../content/pages/integration_tests.md:block 32 (paragraph)
msgid ""
"If the script does not find the needed files in the default location, it "
"prompts you for the path."
msgstr ""

#: ../content/pages/levels.md:block 1 (paragraph)
msgid "Title: JavaScript Shield"
msgstr ""

#: ../content/pages/levels.md:block 2 (paragraph)
msgid ""
"JavaScript Shield modifies the behaviour of the JavaScript environment "
"availble for the visited webpage. JShelter provides fake information to "
"confuse fingerprinters or make webpage triggered attacks impossible or "
"harder."
msgstr ""

#: ../content/pages/levels.md:block 3 (paragraph)
msgid ""
"JavaScript Shield internally consists of wrappers, small pieces of code that"
" modify the original behaviour of a JavaScript API (a function or a "
"property) defined by standards. The behaviour of the most of the wrappers "
"can be divided into several categories:"
msgstr ""

#: ../content/pages/levels.md:block 4 (unordered list)
msgid ""
"**Precision reduction**: The original value is too precise and it is not "
"necessary for most use cases. JavaScript Shield modifies the values so that "
"typical and benign use cases are not affected."
msgstr ""

#: ../content/pages/levels.md:block 4 (unordered list)
msgid ""
"**Provide fake information**: Some wrappers provide fake information mostly "
"to confuse fingerprinters. For example, canvas wrappers modifify the image "
"so that the same instructions produce different result in each session and "
"for each domain."
msgstr ""

#: ../content/pages/levels.md:block 4 (unordered list)
msgid ""
"**Hide information**: Some APIs provide information that is not generally "
"needed and can be hidden from most of the pages. Depending on the API, "
"JavaScript Shield might return an error, an empty value, or block the API "
"completely."
msgstr ""

#: ../content/pages/levels.md:block 5 (paragraph)
msgid ""
"See our blog posts for more information on [browser fingerprinting counter-"
"measures](/fingerprinting/) and [farbling](/farbling/)."
msgstr ""

#: ../content/pages/levels.md:block 6 (header)
msgid "Protection levels"
msgstr ""

#: ../content/pages/levels.md:block 7 (paragraph)
msgid "JShelter supports the following protection levels:"
msgstr ""

#: ../content/pages/levels.md:block 8 (unordered list)
msgid ""
"**Turn JavaScript Shield off**: Use for pages that you trust and you want to"
" give them access to full APIs supported by the browser."
msgstr ""

#: ../content/pages/levels.md:block 8 (unordered list)
msgid ""
"**Turn fingerprinting protection off**: Apply security counter-measures that"
" are likely not to break web pages but do not defend against fingerprinting."
" Disable APIs that are not commonly used. Use this level if Fingerprint "
"Detector reports low likelihood of fingerprinting, you trust the visited "
"service, and/or you think that the protection makes the page slow or broken "
"and your temptation to use the service is so high that you do not want to be"
" protected."
msgstr ""

#: ../content/pages/levels.md:block 8 (unordered list)
msgid ""
"**Recommended**: Make the browser appear differently to distinct "
"fingerprinters. Apply security counter-measures that are likely not to break"
" web pages. Slightly modify the results of API calls in different way on "
"different domains so that the cross-site fingerprint is not stable. The "
"generated fingerprint values also differ with each browser restart. If you "
"need a different fingerprint for the same website without restart, use "
"incognito mode. Keep in mind that even if you log out from a site, clear "
"your cookies, change your IP address, the modified APIs will provide a way "
"to compute the same fingerprint. Restart your browser if you want to change "
"your fingerprint. If in doubt, use this level."
msgstr ""

#: ../content/pages/levels.md:block 8 (unordered list)
msgid ""
"**Strict**: Enable all non-experimental protection. The wrapped APIs return "
"fake values. Some APIs are blocked completely, others provide meaningful but"
" rare values. Some return values are meaningless. This level will make you "
"fingerprintable because the results of API calls are generally modified in "
"the same way on all webistes and in each session. Use this level if you want"
" to limit the information provided by your browser. If you are worried about"
" fingerprinters, make sure the Fingerprint Detector is activated."
msgstr ""

#: ../content/pages/license.md:block 1 (paragraph)
msgid "Title: GNU General Public License"
msgstr ""

#: ../content/pages/license.md:block 2 (paragraph)
msgid "Version 3, 29 June 2007"
msgstr ""

#: ../content/pages/license.md:block 3 (paragraph)
msgid "Copyright (C) 2007 [Free Software Foundation, Inc.](https://fsf.org/)"
msgstr ""

#: ../content/pages/license.md:block 4 (paragraph)
msgid ""
"Everyone is permitted to copy and distribute verbatim copies of this license"
" document, but changing it is not allowed."
msgstr ""

#: ../content/pages/license.md:block 5 (header)
msgid "Preamble"
msgstr ""

#: ../content/pages/license.md:block 6 (paragraph)
msgid ""
"The GNU General Public License is a free, copyleft license for software and "
"other kinds of works."
msgstr ""

#: ../content/pages/license.md:block 7 (paragraph)
msgid ""
"The licenses for most software and other practical works are designed to "
"take away your freedom to share and change the works. By contrast, the GNU "
"General Public License is intended to guarantee your freedom to share and "
"change all versions of a program--to make sure it remains free software for "
"all its users. We, the Free Software Foundation, use the GNU General Public "
"License for most of our software; it applies also to any other work released"
" this way by its authors. You can apply it to your programs, too."
msgstr ""

#: ../content/pages/license.md:block 8 (paragraph)
msgid ""
"When we speak of free software, we are referring to freedom, not price. Our "
"General Public Licenses are designed to make sure that you have the freedom "
"to distribute copies of free software (and charge for them if you wish), "
"that you receive source code or can get it if you want it, that you can "
"change the software or use pieces of it in new free programs, and that you "
"know you can do these things."
msgstr ""

#: ../content/pages/license.md:block 9 (paragraph)
msgid ""
"To protect your rights, we need to prevent others from denying you these "
"rights or asking you to surrender the rights. Therefore, you have certain "
"responsibilities if you distribute copies of the software, or if you modify "
"it: responsibilities to respect the freedom of others."
msgstr ""

#: ../content/pages/license.md:block 10 (paragraph)
msgid ""
"For example, if you distribute copies of such a program, whether gratis or "
"for a fee, you must pass on to the recipients the same freedoms that you "
"received. You must make sure that they, too, receive or can get the source "
"code. And you must show them these terms so they know their rights."
msgstr ""

#: ../content/pages/license.md:block 11 (paragraph)
msgid ""
"Developers that use the GNU GPL protect your rights with two steps: (1) "
"assert copyright on the software, and (2) offer you this License giving you "
"legal permission to copy, distribute and/or modify it."
msgstr ""

#: ../content/pages/license.md:block 12 (paragraph)
msgid ""
"For the developers' and authors' protection, the GPL clearly explains that "
"there is no warranty for this free software. For both users' and authors' "
"sake, the GPL requires that modified versions be marked as changed, so that "
"their problems will not be attributed erroneously to authors of previous "
"versions."
msgstr ""

#: ../content/pages/license.md:block 13 (paragraph)
msgid ""
"Some devices are designed to deny users access to install or run modified "
"versions of the software inside them, although the manufacturer can do so. "
"This is fundamentally incompatible with the aim of protecting users' freedom"
" to change the software. The systematic pattern of such abuse occurs in the "
"area of products for individuals to use, which is precisely where it is most"
" unacceptable. Therefore, we have designed this version of the GPL to "
"prohibit the practice for those products. If such problems arise "
"substantially in other domains, we stand ready to extend this provision to "
"those domains in future versions of the GPL, as needed to protect the "
"freedom of users."
msgstr ""

#: ../content/pages/license.md:block 14 (paragraph)
msgid ""
"Finally, every program is threatened constantly by software patents. States "
"should not allow patents to restrict development and use of software on "
"general-purpose computers, but in those that do, we wish to avoid the "
"special danger that patents applied to a free program could make it "
"effectively proprietary. To prevent this, the GPL assures that patents "
"cannot be used to render the program non-free."
msgstr ""

#: ../content/pages/license.md:block 15 (paragraph)
msgid ""
"The precise terms and conditions for copying, distribution and modification "
"follow."
msgstr ""

#: ../content/pages/license.md:block 16 (header)
msgid "TERMS AND CONDITIONS"
msgstr ""

#: ../content/pages/license.md:block 17 (header)
msgid "0. Definitions."
msgstr ""

#: ../content/pages/license.md:block 18 (paragraph)
msgid "\"This License\" refers to version 3 of the GNU General Public License."
msgstr ""

#: ../content/pages/license.md:block 19 (paragraph)
msgid ""
"\"Copyright\" also means copyright-like laws that apply to other kinds of "
"works, such as semiconductor masks."
msgstr ""

#: ../content/pages/license.md:block 20 (paragraph)
msgid ""
"\"The Program\" refers to any copyrightable work licensed under this "
"License. Each licensee is addressed as \"you\". \"Licensees\" and "
"\"recipients\" may be individuals or organizations."
msgstr ""

#: ../content/pages/license.md:block 21 (paragraph)
msgid ""
"To \"modify\" a work means to copy from or adapt all or part of the work in "
"a fashion requiring copyright permission, other than the making of an exact "
"copy. The resulting work is called a \"modified version\" of the earlier "
"work or a work \"based on\" the earlier work."
msgstr ""

#: ../content/pages/license.md:block 22 (paragraph)
msgid ""
"A \"covered work\" means either the unmodified Program or a work based on "
"the Program."
msgstr ""

#: ../content/pages/license.md:block 23 (paragraph)
msgid ""
"To \"propagate\" a work means to do anything with it that, without "
"permission, would make you directly or secondarily liable for infringement "
"under applicable copyright law, except executing it on a computer or "
"modifying a private copy. Propagation includes copying, distribution (with "
"or without modification), making available to the public, and in some "
"countries other activities as well."
msgstr ""

#: ../content/pages/license.md:block 24 (paragraph)
msgid ""
"To \"convey\" a work means any kind of propagation that enables other "
"parties to make or receive copies. Mere interaction with a user through a "
"computer network, with no transfer of a copy, is not conveying."
msgstr ""

#: ../content/pages/license.md:block 25 (paragraph)
msgid ""
"An interactive user interface displays \"Appropriate Legal Notices\" to the "
"extent that it includes a convenient and prominently visible feature that "
"(1) displays an appropriate copyright notice, and (2) tells the user that "
"there is no warranty for the work (except to the extent that warranties are "
"provided), that licensees may convey the work under this License, and how to"
" view a copy of this License. If the interface presents a list of user "
"commands or options, such as a menu, a prominent item in the list meets this"
" criterion."
msgstr ""

#: ../content/pages/license.md:block 26 (header)
msgid "1. Source Code."
msgstr ""

#: ../content/pages/license.md:block 27 (paragraph)
msgid ""
"The \"source code\" for a work means the preferred form of the work for "
"making modifications to it. \"Object code\" means any non-source form of a "
"work."
msgstr ""

#: ../content/pages/license.md:block 28 (paragraph)
msgid ""
"A \"Standard Interface\" means an interface that either is an official "
"standard defined by a recognized standards body, or, in the case of "
"interfaces specified for a particular programming language, one that is "
"widely used among developers working in that language."
msgstr ""

#: ../content/pages/license.md:block 29 (paragraph)
msgid ""
"The \"System Libraries\" of an executable work include anything, other than "
"the work as a whole, that (a) is included in the normal form of packaging a "
"Major Component, but which is not part of that Major Component, and (b) "
"serves only to enable use of the work with that Major Component, or to "
"implement a Standard Interface for which an implementation is available to "
"the public in source code form. A \"Major Component\", in this context, "
"means a major essential component (kernel, window system, and so on) of the "
"specific operating system (if any) on which the executable work runs, or a "
"compiler used to produce the work, or an object code interpreter used to run"
" it."
msgstr ""

#: ../content/pages/license.md:block 30 (paragraph)
msgid ""
"The \"Corresponding Source\" for a work in object code form means all the "
"source code needed to generate, install, and (for an executable work) run "
"the object code and to modify the work, including scripts to control those "
"activities. However, it does not include the work's System Libraries, or "
"general-purpose tools or generally available free programs which are used "
"unmodified in performing those activities but which are not part of the "
"work. For example, Corresponding Source includes interface definition files "
"associated with source files for the work, and the source code for shared "
"libraries and dynamically linked subprograms that the work is specifically "
"designed to require, such as by intimate data communication or control flow "
"between those subprograms and other parts of the work."
msgstr ""

#: ../content/pages/license.md:block 31 (paragraph)
msgid ""
"The Corresponding Source need not include anything that users can regenerate"
" automatically from other parts of the Corresponding Source."
msgstr ""

#: ../content/pages/license.md:block 32 (paragraph)
msgid ""
"The Corresponding Source for a work in source code form is that same work."
msgstr ""

#: ../content/pages/license.md:block 33 (header)
msgid "2. Basic Permissions."
msgstr ""

#: ../content/pages/license.md:block 34 (paragraph)
msgid ""
"All rights granted under this License are granted for the term of copyright "
"on the Program, and are irrevocable provided the stated conditions are met. "
"This License explicitly affirms your unlimited permission to run the "
"unmodified Program. The output from running a covered work is covered by "
"this License only if the output, given its content, constitutes a covered "
"work. This License acknowledges your rights of fair use or other equivalent,"
" as provided by copyright law."
msgstr ""

#: ../content/pages/license.md:block 35 (paragraph)
msgid ""
"You may make, run and propagate covered works that you do not convey, "
"without conditions so long as your license otherwise remains in force. You "
"may convey covered works to others for the sole purpose of having them make "
"modifications exclusively for you, or provide you with facilities for "
"running those works, provided that you comply with the terms of this License"
" in conveying all material for which you do not control copyright. Those "
"thus making or running the covered works for you must do so exclusively on "
"your behalf, under your direction and control, on terms that prohibit them "
"from making any copies of your copyrighted material outside their "
"relationship with you."
msgstr ""

#: ../content/pages/license.md:block 36 (paragraph)
msgid ""
"Conveying under any other circumstances is permitted solely under the "
"conditions stated below. Sublicensing is not allowed; section 10 makes it "
"unnecessary."
msgstr ""

#: ../content/pages/license.md:block 37 (header)
msgid "3. Protecting Users' Legal Rights From Anti-Circumvention Law."
msgstr ""

#: ../content/pages/license.md:block 38 (paragraph)
msgid ""
"No covered work shall be deemed part of an effective technological measure "
"under any applicable law fulfilling obligations under article 11 of the WIPO"
" copyright treaty adopted on 20 December 1996, or similar laws prohibiting "
"or restricting circumvention of such measures."
msgstr ""

#: ../content/pages/license.md:block 39 (paragraph)
msgid ""
"When you convey a covered work, you waive any legal power to forbid "
"circumvention of technological measures to the extent such circumvention is "
"effected by exercising rights under this License with respect to the covered"
" work, and you disclaim any intention to limit operation or modification of "
"the work as a means of enforcing, against the work's users, your or third "
"parties' legal rights to forbid circumvention of technological measures."
msgstr ""

#: ../content/pages/license.md:block 40 (header)
msgid "4. Conveying Verbatim Copies."
msgstr ""

#: ../content/pages/license.md:block 41 (paragraph)
msgid ""
"You may convey verbatim copies of the Program's source code as you receive "
"it, in any medium, provided that you conspicuously and appropriately publish"
" on each copy an appropriate copyright notice; keep intact all notices "
"stating that this License and any non-permissive terms added in accord with "
"section 7 apply to the code; keep intact all notices of the absence of any "
"warranty; and give all recipients a copy of this License along with the "
"Program."
msgstr ""

#: ../content/pages/license.md:block 42 (paragraph)
msgid ""
"You may charge any price or no price for each copy that you convey, and you "
"may offer support or warranty protection for a fee."
msgstr ""

#: ../content/pages/license.md:block 43 (header)
msgid "5. Conveying Modified Source Versions."
msgstr ""

#: ../content/pages/license.md:block 44 (paragraph)
msgid ""
"You may convey a work based on the Program, or the modifications to produce "
"it from the Program, in the form of source code under the terms of section "
"4, provided that you also meet all of these conditions:"
msgstr ""

#: ../content/pages/license.md:block 45 (unordered list)
msgid ""
"a) The work must carry prominent notices stating that you modified it, and "
"giving a relevant date."
msgstr ""

#: ../content/pages/license.md:block 45 (unordered list)
msgid ""
"b) The work must carry prominent notices stating that it is released under "
"this License and any conditions added under section 7. This requirement "
"modifies the requirement in section 4 to \"keep intact all notices\"."
msgstr ""

#: ../content/pages/license.md:block 45 (unordered list)
msgid ""
"c) You must license the entire work, as a whole, under this License to "
"anyone who comes into possession of a copy. This License will therefore "
"apply, along with any applicable section 7 additional terms, to the whole of"
" the work, and all its parts, regardless of how they are packaged. This "
"License gives no permission to license the work in any other way, but it "
"does not invalidate such permission if you have separately received it."
msgstr ""

#: ../content/pages/license.md:block 45 (unordered list)
msgid ""
"d) If the work has interactive user interfaces, each must display "
"Appropriate Legal Notices; however, if the Program has interactive "
"interfaces that do not display Appropriate Legal Notices, your work need not"
" make them do so."
msgstr ""

#: ../content/pages/license.md:block 46 (paragraph)
msgid ""
"A compilation of a covered work with other separate and independent works, "
"which are not by their nature extensions of the covered work, and which are "
"not combined with it such as to form a larger program, in or on a volume of "
"a storage or distribution medium, is called an \"aggregate\" if the "
"compilation and its resulting copyright are not used to limit the access or "
"legal rights of the compilation's users beyond what the individual works "
"permit. Inclusion of a covered work in an aggregate does not cause this "
"License to apply to the other parts of the aggregate."
msgstr ""

#: ../content/pages/license.md:block 47 (header)
msgid "6. Conveying Non-Source Forms."
msgstr ""

#: ../content/pages/license.md:block 48 (paragraph)
msgid ""
"You may convey a covered work in object code form under the terms of "
"sections 4 and 5, provided that you also convey the machine-readable "
"Corresponding Source under the terms of this License, in one of these ways:"
msgstr ""

#: ../content/pages/license.md:block 49 (unordered list)
msgid ""
"a) Convey the object code in, or embodied in, a physical product (including "
"a physical distribution medium), accompanied by the Corresponding Source "
"fixed on a durable physical medium customarily used for software "
"interchange."
msgstr ""

#: ../content/pages/license.md:block 49 (unordered list)
msgid ""
"b) Convey the object code in, or embodied in, a physical product (including "
"a physical distribution medium), accompanied by a written offer, valid for "
"at least three years and valid for as long as you offer spare parts or "
"customer support for that product model, to give anyone who possesses the "
"object code either (1) a copy of the Corresponding Source for all the "
"software in the product that is covered by this License, on a durable "
"physical medium customarily used for software interchange, for a price no "
"more than your reasonable cost of physically performing this conveying of "
"source, or (2) access to copy the Corresponding Source from a network server"
" at no charge."
msgstr ""

#: ../content/pages/license.md:block 49 (unordered list)
msgid ""
"c) Convey individual copies of the object code with a copy of the written "
"offer to provide the Corresponding Source. This alternative is allowed only "
"occasionally and noncommercially, and only if you received the object code "
"with such an offer, in accord with subsection 6b."
msgstr ""

#: ../content/pages/license.md:block 49 (unordered list)
msgid ""
"d) Convey the object code by offering access from a designated place (gratis"
" or for a charge), and offer equivalent access to the Corresponding Source "
"in the same way through the same place at no further charge. You need not "
"require recipients to copy the Corresponding Source along with the object "
"code. If the place to copy the object code is a network server, the "
"Corresponding Source may be on a different server (operated by you or a "
"third party) that supports equivalent copying facilities, provided you "
"maintain clear directions next to the object code saying where to find the "
"Corresponding Source. Regardless of what server hosts the Corresponding "
"Source, you remain obligated to ensure that it is available for as long as "
"needed to satisfy these requirements."
msgstr ""

#: ../content/pages/license.md:block 49 (unordered list)
msgid ""
"e) Convey the object code using peer-to-peer transmission, provided you "
"inform other peers where the object code and Corresponding Source of the "
"work are being offered to the general public at no charge under subsection "
"6d."
msgstr ""

#: ../content/pages/license.md:block 50 (paragraph)
msgid ""
"A separable portion of the object code, whose source code is excluded from "
"the Corresponding Source as a System Library, need not be included in "
"conveying the object code work."
msgstr ""

#: ../content/pages/license.md:block 51 (paragraph)
msgid ""
"A \"User Product\" is either (1) a \"consumer product\", which means any "
"tangible personal property which is normally used for personal, family, or "
"household purposes, or (2) anything designed or sold for incorporation into "
"a dwelling. In determining whether a product is a consumer product, doubtful"
" cases shall be resolved in favor of coverage. For a particular product "
"received by a particular user, \"normally used\" refers to a typical or "
"common use of that class of product, regardless of the status of the "
"particular user or of the way in which the particular user actually uses, or"
" expects or is expected to use, the product. A product is a consumer product"
" regardless of whether the product has substantial commercial, industrial or"
" non-consumer uses, unless such uses represent the only significant mode of "
"use of the product."
msgstr ""

#: ../content/pages/license.md:block 52 (paragraph)
msgid ""
"\"Installation Information\" for a User Product means any methods, "
"procedures, authorization keys, or other information required to install and"
" execute modified versions of a covered work in that User Product from a "
"modified version of its Corresponding Source. The information must suffice "
"to ensure that the continued functioning of the modified object code is in "
"no case prevented or interfered with solely because modification has been "
"made."
msgstr ""

#: ../content/pages/license.md:block 53 (paragraph)
msgid ""
"If you convey an object code work under this section in, or with, or "
"specifically for use in, a User Product, and the conveying occurs as part of"
" a transaction in which the right of possession and use of the User Product "
"is transferred to the recipient in perpetuity or for a fixed term "
"(regardless of how the transaction is characterized), the Corresponding "
"Source conveyed under this section must be accompanied by the Installation "
"Information. But this requirement does not apply if neither you nor any "
"third party retains the ability to install modified object code on the User "
"Product (for example, the work has been installed in ROM)."
msgstr ""

#: ../content/pages/license.md:block 54 (paragraph)
msgid ""
"The requirement to provide Installation Information does not include a "
"requirement to continue to provide support service, warranty, or updates for"
" a work that has been modified or installed by the recipient, or for the "
"User Product in which it has been modified or installed. Access to a network"
" may be denied when the modification itself materially and adversely affects"
" the operation of the network or violates the rules and protocols for "
"communication across the network."
msgstr ""

#: ../content/pages/license.md:block 55 (paragraph)
msgid ""
"Corresponding Source conveyed, and Installation Information provided, in "
"accord with this section must be in a format that is publicly documented "
"(and with an implementation available to the public in source code form), "
"and must require no special password or key for unpacking, reading or "
"copying."
msgstr ""

#: ../content/pages/license.md:block 56 (header)
msgid "7. Additional Terms."
msgstr ""

#: ../content/pages/license.md:block 57 (paragraph)
msgid ""
"\"Additional permissions\" are terms that supplement the terms of this "
"License by making exceptions from one or more of its conditions. Additional "
"permissions that are applicable to the entire Program shall be treated as "
"though they were included in this License, to the extent that they are valid"
" under applicable law. If additional permissions apply only to part of the "
"Program, that part may be used separately under those permissions, but the "
"entire Program remains governed by this License without regard to the "
"additional permissions."
msgstr ""

#: ../content/pages/license.md:block 58 (paragraph)
msgid ""
"When you convey a copy of a covered work, you may at your option remove any "
"additional permissions from that copy, or from any part of it. (Additional "
"permissions may be written to require their own removal in certain cases "
"when you modify the work.) You may place additional permissions on material,"
" added by you to a covered work, for which you have or can give appropriate "
"copyright permission."
msgstr ""

#: ../content/pages/license.md:block 59 (paragraph)
msgid ""
"Notwithstanding any other provision of this License, for material you add to"
" a covered work, you may (if authorized by the copyright holders of that "
"material) supplement the terms of this License with terms:"
msgstr ""

#: ../content/pages/license.md:block 60 (unordered list)
msgid ""
"a) Disclaiming warranty or limiting liability differently from the terms of "
"sections 15 and 16 of this License; or"
msgstr ""

#: ../content/pages/license.md:block 60 (unordered list)
msgid ""
"b) Requiring preservation of specified reasonable legal notices or author "
"attributions in that material or in the Appropriate Legal Notices displayed "
"by works containing it; or"
msgstr ""

#: ../content/pages/license.md:block 60 (unordered list)
msgid ""
"c) Prohibiting misrepresentation of the origin of that material, or "
"requiring that modified versions of such material be marked in reasonable "
"ways as different from the original version; or"
msgstr ""

#: ../content/pages/license.md:block 60 (unordered list)
msgid ""
"d) Limiting the use for publicity purposes of names of licensors or authors "
"of the material; or"
msgstr ""

#: ../content/pages/license.md:block 60 (unordered list)
msgid ""
"e) Declining to grant rights under trademark law for use of some trade "
"names, trademarks, or service marks; or"
msgstr ""

#: ../content/pages/license.md:block 60 (unordered list)
msgid ""
"f) Requiring indemnification of licensors and authors of that material by "
"anyone who conveys the material (or modified versions of it) with "
"contractual assumptions of liability to the recipient, for any liability "
"that these contractual assumptions directly impose on those licensors and "
"authors."
msgstr ""

#: ../content/pages/license.md:block 61 (paragraph)
msgid ""
"All other non-permissive additional terms are considered \"further "
"restrictions\" within the meaning of section 10. If the Program as you "
"received it, or any part of it, contains a notice stating that it is "
"governed by this License along with a term that is a further restriction, "
"you may remove that term. If a license document contains a further "
"restriction but permits relicensing or conveying under this License, you may"
" add to a covered work material governed by the terms of that license "
"document, provided that the further restriction does not survive such "
"relicensing or conveying."
msgstr ""

#: ../content/pages/license.md:block 62 (paragraph)
msgid ""
"If you add terms to a covered work in accord with this section, you must "
"place, in the relevant source files, a statement of the additional terms "
"that apply to those files, or a notice indicating where to find the "
"applicable terms."
msgstr ""

#: ../content/pages/license.md:block 63 (paragraph)
msgid ""
"Additional terms, permissive or non-permissive, may be stated in the form of"
" a separately written license, or stated as exceptions; the above "
"requirements apply either way."
msgstr ""

#: ../content/pages/license.md:block 64 (header)
msgid "8. Termination."
msgstr ""

#: ../content/pages/license.md:block 65 (paragraph)
msgid ""
"You may not propagate or modify a covered work except as expressly provided "
"under this License. Any attempt otherwise to propagate or modify it is void,"
" and will automatically terminate your rights under this License (including "
"any patent licenses granted under the third paragraph of section 11)."
msgstr ""

#: ../content/pages/license.md:block 66 (paragraph)
msgid ""
"However, if you cease all violation of this License, then your license from "
"a particular copyright holder is reinstated (a) provisionally, unless and "
"until the copyright holder explicitly and finally terminates your license, "
"and (b) permanently, if the copyright holder fails to notify you of the "
"violation by some reasonable means prior to 60 days after the cessation."
msgstr ""

#: ../content/pages/license.md:block 67 (paragraph)
msgid ""
"Moreover, your license from a particular copyright holder is reinstated "
"permanently if the copyright holder notifies you of the violation by some "
"reasonable means, this is the first time you have received notice of "
"violation of this License (for any work) from that copyright holder, and you"
" cure the violation prior to 30 days after your receipt of the notice."
msgstr ""

#: ../content/pages/license.md:block 68 (paragraph)
msgid ""
"Termination of your rights under this section does not terminate the "
"licenses of parties who have received copies or rights from you under this "
"License. If your rights have been terminated and not permanently reinstated,"
" you do not qualify to receive new licenses for the same material under "
"section 10."
msgstr ""

#: ../content/pages/license.md:block 69 (header)
msgid "9. Acceptance Not Required for Having Copies."
msgstr ""

#: ../content/pages/license.md:block 70 (paragraph)
msgid ""
"You are not required to accept this License in order to receive or run a "
"copy of the Program. Ancillary propagation of a covered work occurring "
"solely as a consequence of using peer-to-peer transmission to receive a copy"
" likewise does not require acceptance. However, nothing other than this "
"License grants you permission to propagate or modify any covered work. These"
" actions infringe copyright if you do not accept this License. Therefore, by"
" modifying or propagating a covered work, you indicate your acceptance of "
"this License to do so."
msgstr ""

#: ../content/pages/license.md:block 71 (header)
msgid "10. Automatic Licensing of Downstream Recipients."
msgstr ""

#: ../content/pages/license.md:block 72 (paragraph)
msgid ""
"Each time you convey a covered work, the recipient automatically receives a "
"license from the original licensors, to run, modify and propagate that work,"
" subject to this License. You are not responsible for enforcing compliance "
"by third parties with this License."
msgstr ""

#: ../content/pages/license.md:block 73 (paragraph)
msgid ""
"An \"entity transaction\" is a transaction transferring control of an "
"organization, or substantially all assets of one, or subdividing an "
"organization, or merging organizations. If propagation of a covered work "
"results from an entity transaction, each party to that transaction who "
"receives a copy of the work also receives whatever licenses to the work the "
"party's predecessor in interest had or could give under the previous "
"paragraph, plus a right to possession of the Corresponding Source of the "
"work from the predecessor in interest, if the predecessor has it or can get "
"it with reasonable efforts."
msgstr ""

#: ../content/pages/license.md:block 74 (paragraph)
msgid ""
"You may not impose any further restrictions on the exercise of the rights "
"granted or affirmed under this License. For example, you may not impose a "
"license fee, royalty, or other charge for exercise of rights granted under "
"this License, and you may not initiate litigation (including a cross-claim "
"or counterclaim in a lawsuit) alleging that any patent claim is infringed by"
" making, using, selling, offering for sale, or importing the Program or any "
"portion of it."
msgstr ""

#: ../content/pages/license.md:block 75 (header)
msgid "11. Patents."
msgstr ""

#: ../content/pages/license.md:block 76 (paragraph)
msgid ""
"A \"contributor\" is a copyright holder who authorizes use under this "
"License of the Program or a work on which the Program is based. The work "
"thus licensed is called the contributor's \"contributor version\"."
msgstr ""

#: ../content/pages/license.md:block 77 (paragraph)
msgid ""
"A contributor's \"essential patent claims\" are all patent claims owned or "
"controlled by the contributor, whether already acquired or hereafter "
"acquired, that would be infringed by some manner, permitted by this License,"
" of making, using, or selling its contributor version, but do not include "
"claims that would be infringed only as a consequence of further modification"
" of the contributor version. For purposes of this definition, \"control\" "
"includes the right to grant patent sublicenses in a manner consistent with "
"the requirements of this License."
msgstr ""

#: ../content/pages/license.md:block 78 (paragraph)
msgid ""
"Each contributor grants you a non-exclusive, worldwide, royalty-free patent "
"license under the contributor's essential patent claims, to make, use, sell,"
" offer for sale, import and otherwise run, modify and propagate the contents"
" of its contributor version."
msgstr ""

#: ../content/pages/license.md:block 79 (paragraph)
msgid ""
"In the following three paragraphs, a \"patent license\" is any express "
"agreement or commitment, however denominated, not to enforce a patent (such "
"as an express permission to practice a patent or covenant not to sue for "
"patent infringement). To \"grant\" such a patent license to a party means to"
" make such an agreement or commitment not to enforce a patent against the "
"party."
msgstr ""

#: ../content/pages/license.md:block 80 (paragraph)
msgid ""
"If you convey a covered work, knowingly relying on a patent license, and the"
" Corresponding Source of the work is not available for anyone to copy, free "
"of charge and under the terms of this License, through a publicly available "
"network server or other readily accessible means, then you must either (1) "
"cause the Corresponding Source to be so available, or (2) arrange to deprive"
" yourself of the benefit of the patent license for this particular work, or "
"(3) arrange, in a manner consistent with the requirements of this License, "
"to extend the patent license to downstream recipients. \"Knowingly relying\""
" means you have actual knowledge that, but for the patent license, your "
"conveying the covered work in a country, or your recipient's use of the "
"covered work in a country, would infringe one or more identifiable patents "
"in that country that you have reason to believe are valid."
msgstr ""

#: ../content/pages/license.md:block 81 (paragraph)
msgid ""
"If, pursuant to or in connection with a single transaction or arrangement, "
"you convey, or propagate by procuring conveyance of, a covered work, and "
"grant a patent license to some of the parties receiving the covered work "
"authorizing them to use, propagate, modify or convey a specific copy of the "
"covered work, then the patent license you grant is automatically extended to"
" all recipients of the covered work and works based on it."
msgstr ""

#: ../content/pages/license.md:block 82 (paragraph)
msgid ""
"A patent license is \"discriminatory\" if it does not include within the "
"scope of its coverage, prohibits the exercise of, or is conditioned on the "
"non-exercise of one or more of the rights that are specifically granted "
"under this License. You may not convey a covered work if you are a party to "
"an arrangement with a third party that is in the business of distributing "
"software, under which you make payment to the third party based on the "
"extent of your activity of conveying the work, and under which the third "
"party grants, to any of the parties who would receive the covered work from "
"you, a discriminatory patent license (a) in connection with copies of the "
"covered work conveyed by you (or copies made from those copies), or (b) "
"primarily for and in connection with specific products or compilations that "
"contain the covered work, unless you entered into that arrangement, or that "
"patent license was granted, prior to 28 March 2007."
msgstr ""

#: ../content/pages/license.md:block 83 (paragraph)
msgid ""
"Nothing in this License shall be construed as excluding or limiting any "
"implied license or other defenses to infringement that may otherwise be "
"available to you under applicable patent law."
msgstr ""

#: ../content/pages/license.md:block 84 (header)
msgid "12. No Surrender of Others' Freedom."
msgstr ""

#: ../content/pages/license.md:block 85 (paragraph)
msgid ""
"If conditions are imposed on you (whether by court order, agreement or "
"otherwise) that contradict the conditions of this License, they do not "
"excuse you from the conditions of this License. If you cannot convey a "
"covered work so as to satisfy simultaneously your obligations under this "
"License and any other pertinent obligations, then as a consequence you may "
"not convey it at all. For example, if you agree to terms that obligate you "
"to collect a royalty for further conveying from those to whom you convey the"
" Program, the only way you could satisfy both those terms and this License "
"would be to refrain entirely from conveying the Program."
msgstr ""

#: ../content/pages/license.md:block 86 (header)
msgid "13. Use with the GNU Affero General Public License."
msgstr ""

#: ../content/pages/license.md:block 87 (paragraph)
msgid ""
"Notwithstanding any other provision of this License, you have permission to "
"link or combine any covered work with a work licensed under version 3 of the"
" GNU Affero General Public License into a single combined work, and to "
"convey the resulting work. The terms of this License will continue to apply "
"to the part which is the covered work, but the special requirements of the "
"GNU Affero General Public License, section 13, concerning interaction "
"through a network will apply to the combination as such."
msgstr ""

#: ../content/pages/license.md:block 88 (header)
msgid "14. Revised Versions of this License."
msgstr ""

#: ../content/pages/license.md:block 89 (paragraph)
msgid ""
"The Free Software Foundation may publish revised and/or new versions of the "
"GNU General Public License from time to time. Such new versions will be "
"similar in spirit to the present version, but may differ in detail to "
"address new problems or concerns."
msgstr ""

#: ../content/pages/license.md:block 90 (paragraph)
msgid ""
"Each version is given a distinguishing version number. If the Program "
"specifies that a certain numbered version of the GNU General Public License "
"\"or any later version\" applies to it, you have the option of following the"
" terms and conditions either of that numbered version or of any later "
"version published by the Free Software Foundation. If the Program does not "
"specify a version number of the GNU General Public License, you may choose "
"any version ever published by the Free Software Foundation."
msgstr ""

#: ../content/pages/license.md:block 91 (paragraph)
msgid ""
"If the Program specifies that a proxy can decide which future versions of "
"the GNU General Public License can be used, that proxy's public statement of"
" acceptance of a version permanently authorizes you to choose that version "
"for the Program."
msgstr ""

#: ../content/pages/license.md:block 92 (paragraph)
msgid ""
"Later license versions may give you additional or different permissions. "
"However, no additional obligations are imposed on any author or copyright "
"holder as a result of your choosing to follow a later version."
msgstr ""

#: ../content/pages/license.md:block 93 (header)
msgid "15. Disclaimer of Warranty."
msgstr ""

#: ../content/pages/license.md:block 94 (paragraph)
msgid ""
"THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE "
"LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR "
"OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, "
"EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED "
"WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE "
"ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. "
"SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY "
"SERVICING, REPAIR OR CORRECTION."
msgstr ""

#: ../content/pages/license.md:block 95 (header)
msgid "16. Limitation of Liability."
msgstr ""

#: ../content/pages/license.md:block 96 (paragraph)
msgid ""
"IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL "
"ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE "
"PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY "
"GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE"
" OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA "
"OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD "
"PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), "
"EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF "
"SUCH DAMAGES."
msgstr ""

#: ../content/pages/license.md:block 97 (header)
msgid "17. Interpretation of Sections 15 and 16."
msgstr ""

#: ../content/pages/license.md:block 98 (paragraph)
msgid ""
"If the disclaimer of warranty and limitation of liability provided above "
"cannot be given local legal effect according to their terms, reviewing "
"courts shall apply local law that most closely approximates an absolute "
"waiver of all civil liability in connection with the Program, unless a "
"warranty or assumption of liability accompanies a copy of the Program in "
"return for a fee."
msgstr ""

#: ../content/pages/license.md:block 99 (paragraph)
msgid "END OF TERMS AND CONDITIONS"
msgstr ""

#: ../content/pages/license.md:block 100 (header)
msgid "How to Apply These Terms to Your New Programs"
msgstr ""

#: ../content/pages/license.md:block 101 (paragraph)
msgid ""
"If you develop a new program, and you want it to be of the greatest possible"
" use to the public, the best way to achieve this is to make it free software"
" which everyone can redistribute and change under these terms."
msgstr ""

#: ../content/pages/license.md:block 102 (paragraph)
msgid ""
"To do so, attach the following notices to the program. It is safest to "
"attach them to the start of each source file to most effectively state the "
"exclusion of warranty; and each file should have at least the \"copyright\" "
"line and a pointer to where the full notice is found."
msgstr ""

#: ../content/pages/license.md:block 104 (paragraph)
msgid ""
"Also add information on how to contact you by electronic and paper mail."
msgstr ""

#: ../content/pages/license.md:block 105 (paragraph)
msgid ""
"If the program does terminal interaction, make it output a short notice like"
" this when it starts in an interactive mode:"
msgstr ""

#: ../content/pages/license.md:block 107 (paragraph)
msgid ""
"The hypothetical commands \\`show w' and \\`show c' should show the "
"appropriate parts of the General Public License. Of course, your program's "
"commands might be different; for a GUI interface, you would use an \"about "
"box\"."
msgstr ""

#: ../content/pages/license.md:block 108 (paragraph)
msgid ""
"You should also get your employer (if you work as a programmer) or school, "
"if any, to sign a \"copyright disclaimer\" for the program, if necessary. "
"For more information on this, and how to apply and follow the GNU GPL, see "
"<https://www.gnu.org/licenses/>."
msgstr ""

#: ../content/pages/license.md:block 109 (paragraph)
msgid ""
"The GNU General Public License does not permit incorporating your program "
"into proprietary programs. If your program is a subroutine library, you may "
"consider it more useful to permit linking proprietary applications with the "
"library. If this is what you want to do, use the GNU Lesser General Public "
"License instead of this License. But first, please read "
"<https://www.gnu.org/licenses/why-not-lgpl.html>."
msgstr ""

#: ../content/pages/nbs.md:block 1 (paragraph)
msgid "Title: Network Boundary Shield"
msgstr ""

#: ../content/pages/nbs.md:block 2 (paragraph)
msgid ""
"The Network Boundary Shield (NBS) is a protection against attacks from an "
"external network (the Internet) to an internal network - especially against "
"a reconnaissance attack where a web browser is abused as a proxy. See, for "
"example, [our blog post on port scanning](/localportscanning/) or the "
"[ForcePoint report](https://www.forcepoint.com/blog/x-labs/attacking-"
"internal-network-public-internet-using-browser-proxy)."
msgstr ""

#: ../content/pages/nbs.md:block 3 (paragraph)
msgid ""
"It works by filtering HTTP requests by means of the blocking webRequest API "
"to handle HTTP requests. This means that the processing of each HTTP request"
" is paused before it is analyzed and allowed (if it seems benign) or blocked"
" (if it is suspicious)."
msgstr ""

#: ../content/pages/nbs.md:block 4 (paragraph)
msgid ""
"The main goal of NBS is to prevent attacks where a public website requests a"
" resource from the internal network (e.g. the logo of the manufacturer of "
"the local router); NBS will detect that a web page hosted on the public "
"Internet is trying to connect to a local IP address. NBS only blocks HTTP "
"requests from a web page hosted on a public IP address to a private network "
"resource; the user can allow specific web pages to access local resources "
"(e.g. when using Intranet services)."
msgstr ""

#: ../content/pages/nbs.md:block 5 (paragraph)
msgid ""
"NBS uses [CSV files provided by "
"IANA](https://www.iana.org/assignments/locally-served-dns-zones/locally-"
"served-dns-zones.xml) to determine public and local IP address prefixes. "
"Both IPv4 and IPv6 is supported. The CSV files are downloaded during the "
"JShelter building process."
msgstr ""

#: ../content/pages/nbs.md:block 6 (paragraph)
msgid ""
"The NBS has a small performance footprint, which differs for each browser "
"implementation."
msgstr ""

#: ../content/pages/nbs.md:block 7 (paragraph)
msgid ""
"More information about the Network Boundary Shield can be obtained from the "
"[master thesis by Pavel Pohner](https://www.vutbr.cz/studenti/zav-"
"prace/detail/129272) (in Czech)."
msgstr ""

#: ../content/pages/new-wrapper.md:block 1 (paragraph)
msgid "Title: How to write a new wrapper"
msgstr ""

#: ../content/pages/new-wrapper.md:block 2 (paragraph)
msgid ""
"The primary focus of jShelter is to provide security and privacy oriented "
"wrappers of JavaScript APIs. As some of the code is very similar for each "
"wrapper, we use a unified approach to describe wrappers. The approach is "
"described below. This approach also helps to automatically modify `toString`"
" conversions of the wrapped APIs, i.e. a correctly written wrapper creates a"
" modified function but `wrapper.toString()` returns the original string."
msgstr ""

#: ../content/pages/new-wrapper.md:block 4 (header)
msgid "File structure"
msgstr ""

#: ../content/pages/new-wrapper.md:block 5 (unordered list)
msgid ""
"`wrapping.js` provides main facilities for interacting with specific "
"wrappers:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 5 (unordered list)
msgid ""
"`add_wrappers()` has to be provided with all the wrappers. Hence, a typical "
"module with wrappers of a web standard APIS. ends with a call of "
"`add_wrappers(list_of_all_wrappers_defined_by_the_module)`."
msgstr ""

#: ../content/pages/new-wrapper.md:block 5 (unordered list)
msgid ""
"`build_wrapping_code` contains all the registered wrappers. The keys are "
"referenced by the levels wrapper list. Do not modify the "
"`build_wrapping_code` variable directly, use `add_wrappers` instead."
msgstr ""

#: ../content/pages/new-wrapper.md:block 5 (unordered list)
msgid ""
"The module also provides common functions used by the wrappers, e.g. "
"`rounding_function` and `noise_function`."
msgstr ""

#: ../content/pages/new-wrapper.md:block 5 (unordered list)
msgid ""
"`wrappingS-XYZ` are files dealing with APIs introduced by specific web or "
"ECMA standard. See the **naming conventions** for details on the XYZ part of"
" the name. See the **wrapper specification** section for the properties of "
"the wrapper objects."
msgstr ""

#: ../content/pages/new-wrapper.md:block 6 (header)
msgid "Naming conventions"
msgstr ""

#: ../content/pages/new-wrapper.md:block 7 (paragraph)
msgid ""
"jShelter adopted the naming conventions of the [Web API "
"Manager](https://github.com/pes10k/web-api-"
"manager/tree/master/sources/standards). See the paper:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 8 (paragraph)
msgid ""
"Peter Snyder, Cynthia Taylor, and Chris Kanich, “[Most Websites Don’t Need "
"to Vibrate: A Cost–Benefit Approach to Improving Browser "
"Security](https://arxiv.org/abs/1708.08510),” in Proceedings of the [2017 "
"ACM Conference on Computer and Communications "
"Security](https://www.sigsac.org/ccs/CCS2017/), 2017."
msgstr ""

#: ../content/pages/new-wrapper.md:block 9 (header)
msgid "Wrapper specification"
msgstr ""

#: ../content/pages/new-wrapper.md:block 10 (paragraph)
msgid ""
"Once you are set with the file name for your wrappers, you can start coding."
" The basic structure of the file is:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 12 (paragraph)
msgid ""
"The content of the module should be in an IIFE so that it does not polute "
"the global namespace. The property values are strings that are generally "
"interpreted either as identifiers or JS code."
msgstr ""

#: ../content/pages/new-wrapper.md:block 13 (paragraph)
msgid "Each wrapping object must have the following mandatory properties:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 14 (unordered list)
msgid ""
"`parent_object` and `parent_object_property` are used to define the name of "
"the wrapping (`parent_object.parent_object_property`) that is referenced by "
"level wrappers. Additionally, it is used if `wrapper_prototype` is defined "
"to provide the object name to have the prototype changed. Finally, "
"`Object.freeze` can be optionally called on "
"`parent_object.parent_object_property`."
msgstr ""

#: ../content/pages/new-wrapper.md:block 14 (unordered list)
msgid ""
"`apply_if` optionally provides a condition that needs to be fullfilled to "
"apply the wrapper. For example if a wrapper should be applied only when an "
"API already provides some information. For example, `apply_if: "
"\"navigator.plugins.length > 0\"`."
msgstr ""

#: ../content/pages/new-wrapper.md:block 14 (unordered list)
msgid ""
"`wrapped_objects` is a list of objects, each having the following properties"
" (1 mandatory, 2 optional, typically, wrappers use one of the optional names"
" in the wrapper code to access the original result of the call):"
msgstr ""

#: ../content/pages/new-wrapper.md:block 14 (unordered list)
msgid ""
"`original_name` (*mandatory*) - the original name of the object to be "
"wrapped. Do not mention `window` here!"
msgstr ""

#: ../content/pages/new-wrapper.md:block 14 (unordered list)
msgid ""
"`wrapped_name` - the variable name that points to the actual original "
"object. Wrappers might need it for identity comparisons or other instance-"
"specific use cases. The variable name can be used by "
"`wrapping_function_body`, `helping_code` and other code fragments to "
"reference the original object. Note that this name is not available outside "
"the code generated by this wrappper."
msgstr ""

#: ../content/pages/new-wrapper.md:block 14 (unordered list)
msgid ""
"`callable_name` - is similar to the `wrapped_name` but the variable refers "
"to a proxy of the original object. The proxy intercepts calls and "
"automatically marshals parameters and return values. Wrappers MUST define "
"`callable_name` if the object is passed to other code like `Promise` objects"
" or callbacks. The variable is available only in the code generate by this "
"wrapper. `callable_name` is specifically **meant to be used for native "
"methods and functions** which the wrapper needs to call. This is especially "
"important if it **accepts callback arguments or returns `Promise` objects**:"
" invoking them through their `callable_name` automates complex steps "
"otherwise required for [sandboxed browser extensions to interact with web "
"pages](https://developer.mozilla.org/en-US/docs/Mozilla/Add-"
"ons/WebExtensions/Sharing_objects_with_page_scripts)."
msgstr ""

#: ../content/pages/new-wrapper.md:block 15 (paragraph)
msgid ""
"Generally speaking, use `wrapped_name` whenever you need to access the "
"original objects only inside the wrapper and you do not need to pass the "
"object to other code, such as `Promise` objects or callbacks. Compared to "
"`callable_name`, `wrapped_name` has less overhead and is the preferred way."
msgstr ""

#: ../content/pages/new-wrapper.md:block 16 (paragraph)
msgid "Each wrapping object can have the following optional properties:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 17 (unordered list)
msgid ""
"`wrapping_function_args` is a string that is used as an argument list for "
"the wrapping function. Typically this string reflects the parameters of the "
"original method, it can be an empty string, a list of parameters, such as "
"`\"source, target, color\"` or `\"...args\"`."
msgstr ""

#: ../content/pages/new-wrapper.md:block 17 (unordered list)
msgid ""
"`wrapping_function_body` specified the behaviour of the wrapped function. "
"You can provide a completely different implementation but often, you want to"
" refer to the original implementation (available in the variable "
"`wrapped_name`) and modify the original implementation."
msgstr ""

#: ../content/pages/new-wrapper.md:block 17 (unordered list)
msgid ""
"`wrapping_code_function_name` can be used to call the wrapping function from"
" the other code inside the wrapper. For example to create another wrapper "
"similar to the original wrapper."
msgstr ""

#: ../content/pages/new-wrapper.md:block 17 (unordered list)
msgid ""
"`wrapper_prototype` - if defined, `parent_object.parent_object_property` "
"prototype is set to the prototype identifier provided by "
"`wrapper_prototype`."
msgstr ""

#: ../content/pages/new-wrapper.md:block 17 (unordered list)
msgid ""
"`original_function` if not provided, it defaults to "
"`parent_object.parent_object_property`. This name is used for overloading "
"the `toString` function. Instead of the wrapping code, `toString` returns "
"the content of the original function."
msgstr ""

#: ../content/pages/new-wrapper.md:block 17 (unordered list)
msgid ""
"`helping_code` provides you an option to define code available for both "
"`replacement` function and `post_wrapping_code`"
msgstr ""

#: ../content/pages/new-wrapper.md:block 17 (unordered list)
msgid ""
"`replace_original_function` is used to control which function should be "
"replaced"
msgstr ""

#: ../content/pages/new-wrapper.md:block 17 (unordered list)
msgid ""
"`post_replacement_code` Allows to provide additional code with the access to"
" the original function and to the wrapped function"
msgstr ""

#: ../content/pages/new-wrapper.md:block 17 (unordered list)
msgid ""
"`freeze` if set to `true` causes the API to be freezed. It should not be "
"necessary if the wrapping is performed at the right level of the object's "
"prototype chain (i.e. where the property to be modified was originally "
"defined, i.e. usually in the object's prototype). Use this option with "
"caution, only if strictly needed, because native APIs are configurable "
"(otherwise our wrapping couldn't work) and therefore freezing them "
"introduces a \"weirdness\", exploitable for fingerprinting."
msgstr ""

#: ../content/pages/new-wrapper.md:block 17 (unordered list)
msgid ""
"`post_wrapping_code` is a list of additional wrapping objects with a similar"
" structure to the wrappers, see the section bellow."
msgstr ""

#: ../content/pages/new-wrapper.md:block 18 (header)
msgid "Post wrapping code"
msgstr ""

#: ../content/pages/new-wrapper.md:block 19 (paragraph)
msgid "Complex wrappers need to provide additional wrapping code."
msgstr ""

#: ../content/pages/new-wrapper.md:block 20 (paragraph)
msgid ""
"You can make the generation of the post wrapping code generation conditional"
" by using `apply_if`, e.g.:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 22 (paragraph)
msgid "(`enableGeolocation` is a Booloean variable)"
msgstr ""

#: ../content/pages/new-wrapper.md:block 23 (paragraph)
msgid "Currently jShelter supports additional wrapping of:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 24 (unordered list)
msgid ""
"Definition of a function (used, for example, to reintroduce `Date.now()` "
"function to the wrapped `Date` object)"
msgstr ""

#: ../content/pages/new-wrapper.md:block 26 (unordered list)
msgid ""
"Export a function from the wrapping namespace (currently not used, the "
"following code exposes the unwrapped, i.e. original, version of Date.now to "
"page scripts)"
msgstr ""

#: ../content/pages/new-wrapper.md:block 28 (unordered list)
msgid ""
"Redefine an object property (used to prevent leaking iframe properties to "
"the unwrapped objects):"
msgstr ""

#: ../content/pages/new-wrapper.md:block 30 (unordered list)
msgid "Deleting a property (used when you want to completely disable an API):"
msgstr ""

#: ../content/pages/new-wrapper.md:block 32 (header)
msgid "The WrapHelper API"
msgstr ""

#: ../content/pages/new-wrapper.md:block 33 (paragraph)
msgid ""
"A `WrapHelper` object is globally available to wrappers code, exposing some "
"methods and properties which are mostly used internally by the code builders"
" to automate tasks such as handling [Firefox's content script "
"sandbox](https://developer.mozilla.org/en-US/docs/Mozilla/Add-"
"ons/WebExtensions/Sharing_objects_with_page_scripts) or making replacement "
"objects look as native as possible. However a few of them may be useful to "
"complex wrappers or in edge case not covered by `callable_name` and other "
"declarative object replacement / property definition wrapper constructs:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 34 (unordered list)
msgid ""
"`WrapHelper.shared: {}` - a \"bare\" JavaScript object which a wrapper can "
"use to share information with other wrappers (e.g. to coordinate behavior "
"between related parts of the same API requiring multiple wrappings) by "
"attaching its own data objects as properties. **Warning**: namespacing is "
"not enforced and up to the wrapper implementor, but obviously recommended."
msgstr ""

#: ../content/pages/new-wrapper.md:block 34 (unordered list)
msgid ""
"`WrapHelper.overlay(obj, data)` - Proxies the prototype of the `obj` object "
"in order to return the properties of the `data` object as if they were "
"native properties (e.g. as if they were returned by getters on the prototype"
" chain, rather than defined on the instance). This allows spoofing some "
"native objects data in a less detectable / fingerprintable way than by using"
" `Object.defineProperty()`. See `wrappingS-MCS.js` for an example."
msgstr ""

#: ../content/pages/new-wrapper.md:block 34 (unordered list)
msgid ""
"`WrapHelper.forPage(obj)` - it's mostly used internally and transparently by"
" `code_builder.js`, but may be useful to very complex proxies in edge cases "
"needing to explicitly prepare an object/function created in [Firefox's "
"sandboxed content script environment](https://developer.mozilla.org/en-"
"US/docs/Mozilla/Add-ons/WebExtensions/Sharing_objects_with_page_scripts) to "
"be consumed/called from the page context, and to make replacements for "
"native objects and functions provided by the wrappers look as much native as"
" possible (on Chromium, too). In most cases, however, this gets automated by"
" the code builders replacing Object methods with their WrapHelper "
"counterpart in the wrapper sources and by proxying \"callable_name\" "
"function references through `WrapHelper.pageAPI()` (see below)."
msgstr ""

#: ../content/pages/new-wrapper.md:block 34 (unordered list)
msgid ""
"`WrapHelper.pageAPI(f)` - proxies the function/method f so that arguments "
"and return values, and especially callbacks and `Promise` objects, are "
"recursively managed in order to transparently marshal objects back and forth"
" [Firefox's sandbox for extensions (https://developer.mozilla.org/en-"
"US/docs/Mozilla/Add-ons/WebExtensions/Sharing_objects_with_page_scripts). "
"**Wrapper implementors should almost never need to use this API directly**, "
"since any function referenced via its \"callable_name\" goes automatically "
"through it."
msgstr ""

#: ../content/pages/new-wrapper.md:block 35 (header)
msgid "The generated wrapper structure"
msgstr ""

#: ../content/pages/new-wrapper.md:block 36 (paragraph)
msgid ""
"To get a better idea how the code is generated see the following pseudo "
"code. Please do not refer to any name created by the code builders from your"
" wrapper. Use your custom names. If it is not available, please, open an "
"issue where you explain what you are trying to achieve. It is probable that "
"we will introduce a new property that allows to provide your name to the "
"code builders. The code lives in an anonymous namespaces, so variables "
"introduced here do not directly leak to page scripts."
msgstr ""

#: ../content/pages/new-wrapper.md:block 38 (header)
msgid "Compiling the wrappers"
msgstr ""

#: ../content/pages/new-wrapper.md:block 39 (paragraph)
msgid ""
"Of course the wrappers need to be compiled to JavaScript before inserting "
"the code to page scripts. See `code_builders.js`."
msgstr ""

#: ../content/pages/new-wrapper.md:block 40 (header)
msgid "Registering a new wrapper"
msgstr ""

#: ../content/pages/new-wrapper.md:block 41 (paragraph)
msgid ""
"`fix_manifest.sh` automatically adds all modules with file name of "
"`wrapping*.js` to the manifest.json of the extension. There is no need for "
"any additional action."
msgstr ""

#: ../content/pages/new-wrapper.md:block 42 (header)
msgid ""
"Register new wrapper to be used by the extension in a level or available in "
"the GUI."
msgstr ""

#: ../content/pages/new-wrapper.md:block 43 (paragraph)
msgid ""
"See `levels.js` and its list `wrapping_groups.groups`. Once you add your "
"wrapper to an existing group or create a new group, the wrapper becomes "
"available in the built-in levels containing the group and in the GUI for "
"custom levels."
msgstr ""

#: ../content/pages/new-wrapper.md:block 44 (header)
msgid "Describe the wrapper for Doxygen documentation"
msgstr ""

#: ../content/pages/new-wrapper.md:block 45 (paragraph)
msgid "Describe what the wrapper tries to accomplish and its approach:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 46 (unordered list)
msgid ""
"Add Doxygen comment at the top of the file with the following structure:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 48 (unordered list)
msgid "Describe helping functions and `wrapping_function_body`"
msgstr ""

#: ../content/pages/new-wrapper.md:block 48 (unordered list)
msgid ""
"Use Doxygen command `\\fn fake wrapped.object` for each "
"`wrapping_function_body`"
msgstr ""

#: ../content/pages/new-wrapper.md:block 48 (unordered list)
msgid "Use the following structure for function comments:"
msgstr ""

#: ../content/pages/new-wrapper.md:block 50 (header)
msgid "Write unit tests or integration tests for the wrapper"
msgstr ""

#: ../content/pages/new-wrapper.md:block 51 (paragraph)
msgid ""
"Follow instructions for [unit testing](/unit_tests/) and [integration "
"testing](/integration_tests/)."
msgstr ""

#: ../content/pages/permissions.md:block 1 (paragraph)
msgid "Title: Permissions"
msgstr ""

#: ../content/pages/permissions.md:block 2 (paragraph)
msgid "JShelter requires these permissions:"
msgstr ""

#: ../content/pages/permissions.md:block 3 (unordered list)
msgid "**storage**: for storing extension configuration and user options"
msgstr ""

#: ../content/pages/permissions.md:block 3 (unordered list)
msgid "**tabs**: for updating the extension's icon badge on tab change"
msgstr ""

#: ../content/pages/permissions.md:block 3 (unordered list)
msgid ""
"**webRequest, webRequestBlocking, all_urls**: for modifying JavaScript "
"objects and APIs on all pages, and for capturing and blocking malicious HTTP"
" requests"
msgstr ""

#: ../content/pages/permissions.md:block 3 (unordered list)
msgid ""
"**dns**: for resolving DNS queries in Firefox version of HTTP request shield"
msgstr ""

#: ../content/pages/permissions.md:block 3 (unordered list)
msgid "**notifications**: for notifying users on blocked HTTP requests/hosts"
msgstr ""

#: ../content/pages/permissions.md:block 3 (unordered list)
msgid ""
"**browsingData**: Fingerprint Detector needs to remove data from any storage"
" that can save the fingerprint"
msgstr ""

#: ../content/pages/permissions.md:block 3 (unordered list)
msgid ""
"**webNavigation**: for deploying wrappers as early as possible to avoid page"
" scripts accessing unwrapped objects. NSCL use a different approch for this "
"purpose in Chromium-based browsers. All brosers need the permission to apply"
" `window.name` protection"
msgstr ""

#: ../content/pages/permissions.md:block 4 (paragraph)
msgid ""
"jShelter stores all configuration data in the browser or in the user "
"account. It does not upload any data to our servers."
msgstr ""

#: ../content/pages/threatmodel.md:block 1 (paragraph)
msgid "Title: Threat model"
msgstr ""

#: ../content/pages/threatmodel.md:block 2 (paragraph)
msgid ""
"JShelter focuses on threats that target mainstream internet users. Attackers"
" derive information and create attacks aimed at mainstream browsers, using "
"approaches that minimize the performance requirements for such attacks. For "
"example, we can consider an adversary interested in identifying the user for"
" targeted advertisement purposes. So, they will need to identify the user "
"quickly to display an advertisement; it does not make sense for such an "
"attacker to deploy scripts that take minutes to compute a fingerprint."
msgstr ""

#: ../content/pages/threatmodel.md:block 3 (header)
msgid "Fingerprinting countermeasures"
msgstr ""

#: ../content/pages/threatmodel.md:block 4 (paragraph)
msgid ""
"Our adversary might try to apply low-performance counterattacks. For "
"example, previous literature identified extensions that modify calls in a "
"wrong position in the JavaScript prototype chain. It is straightforward for "
"an adversary to use `Performance.prototype.now()` instead of "
"`performance.now()` so we apply code that modifies the original method, "
"`Performance.prototype.now()`, in the example. Another example is an "
"adversary running canvas fingerprinting several times. If the adversary "
"receives different results, they can compute an average value (or a minimal "
"or maximal value) and use this information to derive the correct "
"fingerprint. As these modifications to fingerprinting are not performance-"
"heavy, we consider them in the JShelter threat model."
msgstr ""

#: ../content/pages/threatmodel.md:block 5 (paragraph)
msgid ""
"It is well-known that some extensions modify the environment of the browser "
"or the web page. For example, password managers add buttons to fill in "
"passwords automatically. Page tweakers add additional buttons to web pages "
"to simplify common tasks or add information likely wanted by a user. "
"JShelter expects such users and tries to help such users from being "
"identifiable. For example, a dumb fingerprinter can combine all "
"fingerprintable data to create a single number. Such a fingerprinter would "
"unintentionally create a unique fingerprint of the users with a unique set "
"of extensions. Such a dumb fingerprinter would not link different visits of "
"the user with Jshelter. JShelter should confuse a more advanced "
"fingerprinter if they identify single or multiple users."
msgstr ""

#: ../content/pages/threatmodel.md:block 6 (paragraph)
msgid ""
"We also want to provide an option that will limit the information that is "
"readable from the computer, even if such behaviour generally results in "
"better fingerprintability. For example, a user might want to disable canvas "
"operations for pages that should not use canvas (from the user's "
"standpoint). As the webpage is in a better position to deploy "
"countermeasures for JShelter anti-fingerprinting techniques, the user might "
"want the page to always read an empty, white, or random canvas. That would "
"limit the information available for the web page at the cost of giving the "
"page an easy way to determine that some countermeasures are in place. Our "
"aim is to explain the consequences of taking such an option but letting the "
"user decide for themselves."
msgstr ""

#: ../content/pages/threatmodel.md:block 7 (paragraph)
msgid ""
"Previous literature identified that it is easy for an adversary to detect "
"inconsistencies in API calls. For example, a fingerprinter can learn the "
"operating system from HTTP headers, `navigator.oscpu`, installed fonts, "
"results of mathematical operations, and other techniques. We do not want to "
"replace such techniques as we do not have the resources to create a "
"consistent environment."
msgstr ""

#: ../content/pages/threatmodel.md:block 8 (paragraph)
msgid ""
"Besides fingerprinting, JShelter also focuses on other threats appearing on "
"the web. For example, JShelter prevents web pages from turning the browser "
"into a proxy to the local [network](/localportscanning/). The user should be"
" able to decouple anti-fingerprinting countermeasures and other "
"countermeasures."
msgstr ""

#: ../content/pages/threatmodel.md:block 9 (header)
msgid "Limitations and mitigation methods"
msgstr ""

#: ../content/pages/threatmodel.md:block 10 (paragraph)
msgid ""
"We do not have the resources to create a bullet-proof solution that "
"eliminates all side channels. For example, we expect that an adversary will "
"be able to detect that something strange is happening in the browser. For "
"example, an adversary might fill a canvas with content controlled by the "
"adversary and detect modifications after reading back the content. Or, the "
"adversary might time the length of each/some operation(s). We modify the "
"time readings, and the countermeasures take some time. Hence, we expect that"
" an adversary will be able to detect that the user has modified the "
"JavaScript environment with a patch or an extension. Our goal is to create a"
" bigger anonymity set into which the user belongs. Hence, we try to "
"eliminate the possibility of an attacker identifying the user uniquely. "
"Still, we accept that the attacker can detect a JShelter user in the worst "
"case. To do so reliably, the attacker should need to keep track of the code "
"base changes."
msgstr ""

#: ../content/pages/threatmodel.md:block 11 (paragraph)
msgid ""
"Nevertheless, we want to avoid allowing the attacker to identify JShelter "
"users easily. We are not aware of any isolated side-effect that reveals "
"JShelter. For example, some similar webextensions do not modify "
"`Function.prototype.toString`. A page script could detect such a "
"webextension as each webextension modifying the same API call by the same "
"technique will likely use a different code. Our goal is to offer protection "
"indistinguishable from another privacy-improving tool for each modified API."
" Nevertheless, a focused observer will very likely be always able to learn "
"that a user is using JShelter if they aggregate the observable "
"inconsistencies of all APIs produced by JShelter. We are aware and do not "
"hide that users of JShelter are vulnerable to focused attacks."
msgstr ""

#: ../content/pages/threatmodel.md:block 12 (paragraph)
msgid ""
"JShelter's goal is to make targeted attacks harder. Still, we do not believe"
" that we are in a position to prevent them completely. We suggest using [Tor"
" Browser](https://www.torproject.org/download/) or a similar privacy-"
"enhancing tool for users concerned with targeted attacks."
msgstr ""

#: ../content/pages/unit_tests.md:block 1 (paragraph)
msgid "Title: Instructions on how to run unit tests"
msgstr ""

#: ../content/pages/unit_tests.md:block 2 (header)
msgid "on Linux"
msgstr ""

#: ../content/pages/unit_tests.md:block 3 (ordered list)
msgid "Install [NodeJS](https://nodejs.org)."
msgstr ""

#: ../content/pages/unit_tests.md:block 3 (ordered list)
msgid "Install `jq` and another necessary tools (e.g. `sed`)."
msgstr ""

#: ../content/pages/unit_tests.md:block 3 (ordered list)
msgid "Open Terminal."
msgstr ""

#: ../content/pages/unit_tests.md:block 3 (ordered list)
msgid "Run `npm install`."
msgstr ""

#: ../content/pages/unit_tests.md:block 3 (ordered list)
msgid "Run `npm test`."
msgstr ""

#: ../content/pages/unit_tests.md:block 4 (header)
msgid "on Windows"
msgstr ""

#: ../content/pages/unit_tests.md:block 5 (ordered list)
msgid ""
"Convert EOL in the script *./start_unit_tests.sh* from Windows (CR LF) to "
"Unix (LF) - you can use the tool `dos2unix` in WSL to convert CR LF to LF."
msgstr ""

#: ../content/pages/unit_tests.md:block 5 (ordered list)
msgid ""
"Follow the instructions for Linux. Install NodeJS and run the following "
"commands in WSL."
msgstr ""

#: ../content/pages/unit_tests.md:block 6 (header)
msgid "Developer documentation"
msgstr ""

#: ../content/pages/unit_tests.md:block 7 (header)
msgid "The framework"
msgstr ""

#: ../content/pages/unit_tests.md:block 8 (paragraph)
msgid ""
"The test cases are based on top of Jasmine framework. `start_unit_tests.sh` "
"preprocesses the files using shell commands. Use `bash` if in doubt. Patches"
" for other shells might be accepted but will probably not be supported by "
"the core team."
msgstr ""

#: ../content/pages/unit_tests.md:block 9 (header)
msgid "Structure"
msgstr ""

#: ../content/pages/unit_tests.md:block 10 (paragraph)
msgid ""
"The test cases are stored in the `tests` directory. The file names typically"
" mirror the tested files in the `common` webextension directory with the "
"suffix `_tests.js`. Each file and its requirements needs to be registered in"
" `config/global.json` file."
msgstr ""

#: ../content/pages/unit_tests.md:block 11 (paragraph)
msgid "The configuration file stores for each test:"
msgstr ""

#: ../content/pages/unit_tests.md:block 13 (unordered list)
msgid "`name` represents the tested file name (no `_tests.js` suffix)"
msgstr ""

#: ../content/pages/unit_tests.md:block 13 (unordered list)
msgid ""
"`remove_custom_namespace` modifies the source file to remove the IIFE to "
"make its internals global. This is typically necessary to test wrappers that"
" commonly create IIFE."
msgstr ""

#: ../content/pages/unit_tests.md:block 13 (unordered list)
msgid ""
"`let_to_var` allows transforming all let variables to var variables. This "
"might be necessary to transform inner variables but might modify the "
"behaviour. Set to `false` unless you have good reason for the modification."
msgstr ""

#: ../content/pages/unit_tests.md:block 13 (unordered list)
msgid ""
"`src_script_requirements` allows specifying dependencies of the file under "
"test (the file used by the webextension)."
msgstr ""

#: ../content/pages/unit_tests.md:block 13 (unordered list)
msgid ""
"`test_script_requirements` allows specifying dependencies of the file with "
"test cases (the file with the `_tests.js` suffix)."
msgstr ""

#: ../content/pages/unit_tests.md:block 13 (unordered list)
msgid ""
"`extra_exports` appends export line to the file under test and imports these"
" objects to the file with the test cases."
msgstr ""

#: ../content/pages/unit_tests.md:block 13 (unordered list)
msgid ""
"`replace_in_src` allows replacing lines in the file under test with a "
"different code, use with caution as this modifies the behaviour."
msgstr ""

#: ../content/pages/unit_tests.md:block 13 (unordered list)
msgid ""
"`inject_code_to_src` allows injecting additional code to the file under "
"test. Currently only inserting to `begin` (first line) and `end` (last line)"
" are supported."
msgstr ""

#: ../content/pages/unit_tests.md:block 14 (paragraph)
msgid ""
"Note that the preprocessor (`start_unit_tests.sh`) modifies the files under "
"test and the file with test cases according to the instuctions in "
"`global.json`. The files are temporarily stored in the `tmp` directory."
msgstr ""

#: ../content/pages/unit_tests.md:block 15 (header)
msgid "Add new unit tests if a test set already exists"
msgstr ""

#: ../content/pages/unit_tests.md:block 16 (paragraph)
msgid ""
"If a test set already exists for the target modul (e.g. a test set "
"*background_tests.js* for the *background.js* file), you can add your own "
"tests to the test script (e.g. to the *background_tests.js* file)."
msgstr ""

#: ../content/pages/unit_tests.md:block 17 (paragraph)
msgid ""
"You may need to update the requirements in the global configuration "
"(*./config/global.json* file). Open the global configuration file for "
"editing and find the configuration of the target script (according to the "
"`name` property). Add the necessary requirements to the "
"`src_script_requirements` and `test_script_requirements` sections."
msgstr ""

#: ../content/pages/unit_tests.md:block 18 (header)
msgid "Add new unit tests if a test set does not already exists"
msgstr ""

#: ../content/pages/unit_tests.md:block 19 (paragraph)
msgid ""
"If a test set does not already exists for the target modul (e.g. a test set "
"*background_tests.js* for the *background.js* file), create new file (e.g. "
"*background_tests.js* file) in the *./tests* directory. It is recommended to"
" create a new test script by copying any existing test script, deleting its "
"tests, and creating new ones."
msgstr ""

#: ../content/pages/unit_tests.md:block 20 (paragraph)
msgid ""
"When a new test script is created, add a new entry to the global "
"configuration (*./config/global.json* file). The new entry must be created "
"according to the example (*./config/global-example.json* file) and schema "
"(*./config/global-schema.json* file)."
msgstr ""

#: ../content/pages/versions.md:block 1 (paragraph)
msgid "Title: Release history"
msgstr ""

#: ../content/pages/versions.md:block 2 (header)
msgid "0.17"
msgstr ""

#: ../content/pages/versions.md:block 3 (unordered list)
msgid ""
"Added support for built-in tweaks for specific domains. The goal is to list "
"several domains that break unnecessarily. Typically, an addition to the list"
" should be well explained and must not lower protection. A nice candidate is"
" WebWorker and the protection of Strict (break) and Remove."
msgstr ""

#: ../content/pages/versions.md:block 3 (unordered list)
msgid "Updated translations"
msgstr ""

#: ../content/pages/versions.md:block 3 (unordered list)
msgid "Improved FPD report based on user feedback:"
msgstr ""

#: ../content/pages/versions.md:block 3 (unordered list)
msgid ""
"Do not refresh report automatically when tracking callers but introduce an "
"update button so that users refresh when convenient (prevent glitches in the"
" interfaces)"
msgstr ""

#: ../content/pages/versions.md:block 3 (unordered list)
msgid "Add buttons to hide/show details and fold/unfold groups"
msgstr ""

#: ../content/pages/versions.md:block 3 (unordered list)
msgid ""
"Do not show traces in bold to better differentiate between API names and "
"traces."
msgstr ""

#: ../content/pages/versions.md:block 3 (unordered list)
msgid ""
"Add possibility to forget current traces. Useful when there is a "
"fingerprinting script that activates after some action. The button allows "
"the user to hide the traces triggered in the past and later load only new "
"traces."
msgstr ""

#: ../content/pages/versions.md:block 3 (unordered list)
msgid ""
"Add support for [signing for Android on "
"AMO](https://blog.mozilla.org/addons/2023/10/05/changes-to-android-"
"extension-signing/), so we needed to increase minimal supported version"
msgstr ""

#: ../content/pages/versions.md:block 4 (header)
msgid "0.16"
msgstr ""

#: ../content/pages/versions.md:block 5 (unordered list)
msgid ""
"Remove Workers in Recommended JSS level to make JShelter compatible with "
"some pages. This change might be reverted when [Pagure issue "
"80](https://pagure.io/JShelter/webextension/issue/80#comment-852202) is "
"solved."
msgstr ""

#: ../content/pages/versions.md:block 5 (unordered list)
msgid ""
"FPD: Add possibility to learn the calling stack of functions that lead to "
"the tracked APIs ([Pagure issue "
"52](https://pagure.io/JShelter/webextension/issue/52)). This information can"
" be used to create block list or to study the calling code and its effects."
msgstr ""

#: ../content/pages/versions.md:block 5 (unordered list)
msgid ""
"FPD: Fix browser overloading by FPD messages by "
"HTMLElement.prototype.offsetHeight and offsetWidth wrappers that might have "
"crashed browsers."
msgstr ""

#: ../content/pages/versions.md:block 5 (unordered list)
msgid "FPD: code cleanup"
msgstr ""

#: ../content/pages/versions.md:block 6 (header)
msgid "0.15.2"
msgstr ""

#: ../content/pages/versions.md:block 7 (unordered list)
msgid ""
"Fix `window.name` protection, do not clear the property in the first visited"
" page see https://pagure.io/JShelter/webextension/issue/116#comment-875070 "
"for more details. The fix affects all Chromium-based browsers and Firefox "
"installs with the protection active (by default it is off in Firefox as "
"Firefox contains the protection since Firefox 88). This fixes, for example, "
"reCaptcha."
msgstr ""

#: ../content/pages/versions.md:block 7 (unordered list)
msgid ""
"options: Improve space distribution, see "
"https://github.com/polcak/jsrestrictor/pull/204#issuecomment-1727519706"
msgstr ""

#: ../content/pages/versions.md:block 8 (header)
msgid "0.15.1"
msgstr ""

#: ../content/pages/versions.md:block 9 (unordered list)
msgid ""
"Fix Chrome manifest that by mistake included a file from a non-existing "
"path. The error prevented the extension from starting."
msgstr ""

#: ../content/pages/versions.md:block 10 (header)
msgid "0.15"
msgstr ""

#: ../content/pages/versions.md:block 11 (unordered list)
msgid "Update NSCL to uses built-in and faster function to compute sha256."
msgstr ""

#: ../content/pages/versions.md:block 11 (unordered list)
msgid "Russian translation added."
msgstr ""

#: ../content/pages/versions.md:block 12 (header)
msgid "0.14"
msgstr ""

#: ../content/pages/versions.md:block 13 (unordered list)
msgid ""
"Added support for internationalization, Czech translation added, see [blog "
"post](/i18n/) for instrctions for translators"
msgstr ""

#: ../content/pages/versions.md:block 13 (unordered list)
msgid "All texts revisited, clarified, and fixed grammar and typos"
msgstr ""

#: ../content/pages/versions.md:block 13 (unordered list)
msgid ""
"Improved performance of Canvas and Audio little-lies wrappers by executing "
"in WebAssembly, there will be a separate blog post with additional "
"explanations. See the [bachelor thesis of Martin "
"Zmitko](https://www.vut.cz/en/students/final-thesis/detail/147218) for more "
"details."
msgstr ""

#: ../content/pages/versions.md:block 13 (unordered list)
msgid ""
"Improved performance of FPD. See the [bachelor thesis of Martin "
"Zmitko](https://www.vut.cz/en/students/final-thesis/detail/147218) for more "
"details."
msgstr ""

#: ../content/pages/versions.md:block 13 (unordered list)
msgid ""
"Expand description of the wrappers applied when the user interacts with the "
"tweak GUI (suggested by the Plain Text UX review)"
msgstr ""

#: ../content/pages/versions.md:block 13 (unordered list)
msgid "Make level names in main options section stable width"
msgstr ""

#: ../content/pages/versions.md:block 13 (unordered list)
msgid "NSCL updated:"
msgstr ""

#: ../content/pages/versions.md:block 13 (unordered list)
msgid ""
"Prevent dead object access on using backward/forward cache of the browser"
msgstr ""

#: ../content/pages/versions.md:block 13 (unordered list)
msgid "Fixed property/function mismatch"
msgstr ""

#: ../content/pages/versions.md:block 14 (header)
msgid "0.13"
msgstr ""

#: ../content/pages/versions.md:block 15 (paragraph)
msgid ""
"Improve performance of the code injection. See the [bachelor thesis of "
"Martin Zmitko](https://www.vut.cz/en/students/final-thesis/detail/147218) "
"for more details."
msgstr ""

#: ../content/pages/versions.md:block 16 (unordered list)
msgid ""
"The code is no longer generated in the background due to the latency of "
"passing huge messages from background to content scripts."
msgstr ""

#: ../content/pages/versions.md:block 16 (unordered list)
msgid "Optimize injection code size (remove duplicate code)."
msgstr ""

#: ../content/pages/versions.md:block 16 (unordered list)
msgid "Do not generate xray wrapper when in Chromium-based browsers."
msgstr ""

#: ../content/pages/versions.md:block 17 (header)
msgid "0.12.2"
msgstr ""

#: ../content/pages/versions.md:block 18 (unordered list)
msgid ""
"Reimplement AudioBuffer.prototype.copyFromChannel to prevent multiple "
"farbling of the same data"
msgstr ""

#: ../content/pages/versions.md:block 18 (unordered list)
msgid "bugfix (Chromium-based): Fix popup to always load current level"
msgstr ""

#: ../content/pages/versions.md:block 18 (unordered list)
msgid "Optimize performance of Canvas and Audio wrappers"
msgstr ""

#: ../content/pages/versions.md:block 18 (unordered list)
msgid ""
"NSCL updated: JShelter benefits from the mechanism to prevent "
"inconsistencies / breakages when the extension gets updated and therefore "
"the old wrappers are invalidated by Firefox which nukes their sandbox and "
"new ones are installed on extension's automatic restart"
msgstr ""

#: ../content/pages/versions.md:block 19 (header)
msgid "0.12.1"
msgstr ""

#: ../content/pages/versions.md:block 20 (unordered list)
msgid ""
"bugfix: Return the correctly created Worker object from the `Strict` "
"wrapper."
msgstr ""

#: ../content/pages/versions.md:block 21 (header)
msgid "0.12"
msgstr ""

#: ../content/pages/versions.md:block 22 (unordered list)
msgid ""
"Cope with the changes of reported plugins and supported MIME types in the "
"HTML standard and browsers: The purpose of the wrappers is solely to prevent"
" fingerprinting. As browsers return the same 5 plugins, browsers modyfing "
"the array stand out, which makes them more fingerprintable. Hence, JShelter "
"does not modify the empty list or the list of five standard plugins."
msgstr ""

#: ../content/pages/versions.md:block 23 (paragraph)
msgid "Reconsider and rewrite Web Worker wrappers (pagure issue 80)"
msgstr ""

#: ../content/pages/versions.md:block 24 (unordered list)
msgid "`Strict` WebWorker policy intentionally breakes Web Workers"
msgstr ""

#: ../content/pages/versions.md:block 24 (unordered list)
msgid ""
"New policy to `Remove` Web Workers used for `Turn fingerprinting protection "
"off` and `Strict` level."
msgstr ""

#: ../content/pages/versions.md:block 24 (unordered list)
msgid ""
"`Medium` WebWorker policy renamed to `Low` as it only tackles a single issue"
" with Workers."
msgstr ""

#: ../content/pages/versions.md:block 25 (paragraph)
msgid "See FAQ for more information on current Worker wrappers."
msgstr ""

#: ../content/pages/versions.md:block 26 (paragraph)
msgid ""
"Note that the `Low` policy does not work as intended in Firefox and will be "
"fixed in future. However, it was broken in the same way before 0.12 and the "
"other changes are worth distributing among our users."
msgstr ""

#: ../content/pages/versions.md:block 27 (header)
msgid "0.11.4"
msgstr ""

#: ../content/pages/versions.md:block 28 (unordered list)
msgid ""
"bugfix: allow tweaking all levels except L0 in the popup (pagure issue 89)"
msgstr ""

#: ../content/pages/versions.md:block 28 (unordered list)
msgid ""
"bugfix: clarify and fix the description of changes to NBS in 0.11.3 (pagure "
"issue 41)"
msgstr ""

#: ../content/pages/versions.md:block 29 (header)
msgid "0.11.3"
msgstr ""

#: ../content/pages/versions.md:block 30 (unordered list)
msgid ""
"bugfix: Remove race condition that reset default level to Recommended from "
"custom levels. Unfortunately, affected users need to manually restore the "
"default level as JShelter cannot distinguish affected users automatically."
msgstr ""

#: ../content/pages/versions.md:block 30 (unordered list)
msgid ""
"bugfix: Prevent DNS leaks in NBS in the presence of HTTP proxy in Firefox, "
"see pagure issues #41 and #85 and FAQ for more details on the interaction of"
" NBS and proxies."
msgstr ""

#: ../content/pages/versions.md:block 30 (unordered list)
msgid "enhancement: Fix empty spaces to improve the look of the option page"
msgstr ""

#: ../content/pages/versions.md:block 31 (header)
msgid "0.11.2"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid ""
"bugfix: check domains property in advanced options (introduced in 0.10)"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid "bugfix: remove unused config.whitelistedHosts"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid "bugfix: Fix several typos in the text in options"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid ""
"bugfix: Do not use hard-coded level in the advanced options validity checks "
"of configuration"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid "feature: Add option to reset configuration to advanced options"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid ""
"enhancement: Reimplement JSS configuration in option to improve "
"understandability"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid ""
"enhancement: Fix race conditions in displaying stored configuration after "
"changes through options"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid "enhancement: Add undo to advanced options"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid ""
"enhancement: Warn users from tweaking their settings due to higher risks of "
"reidentification via browser fingerprinting"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid ""
"enhancement: Add button to cancel the addition of a new level, update the "
"error texts"
msgstr ""

#: ../content/pages/versions.md:block 32 (unordered list)
msgid "website: little improvements and clarifications"
msgstr ""

#: ../content/pages/versions.md:block 33 (paragraph)
msgid "Most of the changes were influenced by the Plain Text UX review"
msgstr ""

#: ../content/pages/versions.md:block 34 (header)
msgid "0.11.1"
msgstr ""

#: ../content/pages/versions.md:block 35 (unordered list)
msgid ""
"NBS: do not show notifications for hostnames resolving to undefined IP "
"addresses as described in FAQ (broken in 0.11 that does not show "
"notifications only for undefined IP addresses, but shows notifications for "
"hostnames resolving to undefined IP addresses)"
msgstr ""

#: ../content/pages/versions.md:block 36 (header)
msgid "0.11"
msgstr ""

#: ../content/pages/versions.md:block 37 (unordered list)
msgid "Reset `window.name` only on eTLD+1 changes"
msgstr ""

#: ../content/pages/versions.md:block 37 (unordered list)
msgid "Farbling: Use eTLD+1 instead of origin to generate hash"
msgstr ""

#: ../content/pages/versions.md:block 37 (unordered list)
msgid ""
"FPD: Clear storage during navigation (prevent the page from storing the hash"
" to a local storage and loading the hash after page reload)"
msgstr ""

#: ../content/pages/versions.md:block 37 (unordered list)
msgid ""
"FPD configuration: Decouple notification and behaviour settings. Let a user "
"to optionally disable notifications without strict effect on behaviour"
msgstr ""

#: ../content/pages/versions.md:block 37 (unordered list)
msgid "Improve CSP of the extension pages, fix broken favicons in FPD report"
msgstr ""

#: ../content/pages/versions.md:block 37 (unordered list)
msgid ""
"NBS: Block requests to undefined IP address (0.0.0.0 or [::]) but do not "
"show notifications"
msgstr ""

#: ../content/pages/versions.md:block 37 (unordered list)
msgid "Fix extension initialization in permanent private mode"
msgstr ""

#: ../content/pages/versions.md:block 37 (unordered list)
msgid "options: Add external links to JShelter.org FAQ and threat model"
msgstr ""

#: ../content/pages/versions.md:block 37 (unordered list)
msgid "Add favicons to options pages"
msgstr ""

#: ../content/pages/versions.md:block 37 (unordered list)
msgid "Remove unused icons"
msgstr ""

#: ../content/pages/versions.md:block 38 (header)
msgid "0.10"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid ""
"Add wrappers modifying calls detecting supported media types and installed "
"codecs (Multimedia playback), github issue 66"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid ""
"Add wrappers modifying `HTMLMediaElement.prototype.canPlayType` (Multimedia "
"playback)"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid ""
"Add wrappers disabling Network Information API inspired by Brave, github "
"issue 66"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid "Add wrappers disabling Web NFC API, github issue 66"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid ""
"Add wrappers for Cooperative Scheduling of Background Tasks API, github "
"issue 66"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid "Add wrappers for User idle detection, github issue 66"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid ""
"Add possibility to set NBS as passive (notify user but do not block), github"
" issue 66"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid "Fix Web Audio wrappers (Pagure issue #16)"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid "FPD Report allows exporting data as JSON"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid "Modified FPD wrappers independent on JSS"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid ""
"FPD can be configured as strict (more aggressive fingerprinting detection)"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid ""
"Better storages removal through content script in the absence of browserData"
" permissions by FPD"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid ""
"Fix early loading of module configuration (FPD used to be disabled after "
"first installation)"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid "FPD initialization reworked"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid ""
"Add support for customizing settings for file:// scheme (Github issue #180)"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid "Improve config checker in advanced options"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid "Improved English, naming consistency, and some descriptions"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid "Apply Content-Security-Policy to webextension pages"
msgstr ""

#: ../content/pages/versions.md:block 39 (unordered list)
msgid ""
"Fix some issues with invalid domains in advanced JavaScript Shield "
"configuration (Pagure issue 45)"
msgstr ""

#: ../content/pages/versions.md:block 40 (header)
msgid "0.9"
msgstr ""

#: ../content/pages/versions.md:block 41 (unordered list)
msgid ""
"Firefox: deactivate window.name wrapper for Firefox; Firefox provides "
"protection since 88 and JShelter wrapper brakes pages"
msgstr ""

#: ../content/pages/versions.md:block 41 (unordered list)
msgid ""
"Enable webworker wrappers by default, see the paper "
"https://arxiv.org/abs/2204.01392, §4.3"
msgstr ""

#: ../content/pages/versions.md:block 41 (unordered list)
msgid "Tidy up popup UI and FPD report UI"
msgstr ""

#: ../content/pages/versions.md:block 41 (unordered list)
msgid "Show wrapper groups descriptions in options.html"
msgstr ""

#: ../content/pages/versions.md:block 42 (header)
msgid "0.8.1"
msgstr ""

#: ../content/pages/versions.md:block 43 (unordered list)
msgid ""
"Add \"Turn fingerprinting protection off\" level. As the AFPD shows the "
"likelihood of fingerprinting, some users might be tempted to trade some "
"performance gain for no protection against fingerprinting. See for example "
"Github #179."
msgstr ""

#: ../content/pages/versions.md:block 43 (unordered list)
msgid "Fix displaying empty FPD report"
msgstr ""

#: ../content/pages/versions.md:block 44 (header)
msgid "0.8"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid "Add FPD report page"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid "Show fingerprinting likelihood in the popup and badge icon colour"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"GPS wrapper reimplemented to use farbling (simulate a stationary device for "
"per domain and sessions), previously each page load generated a new position"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid "Reorganize canvas reading wrappers, all are in the same group"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid "Security review and hardening of the wrappers"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid "Do not change values depending on activated tweaks"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid "Remove obvious reversibility of the canvas farbling"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid "Unify wrapping between H-C and WEBGL"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"Unify the wrappers in Strict and Farbling wrapping of WebGL parameters (some"
" were farbled but not disabled on Strict)"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"Farbling of WebGL parameters spread more wildly to hide the correct number "
"(that might have been revealed after several visits)"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid "WebGL: Farble renderer and vendor the same way as unmasked versions"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"Remove possible dependencies between multiple wrapping groups using "
"randomString()"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"Strict: Return empty UNMASKED VENDOR and RENDERER - Previosuly, these values"
" depended on the domainHash, that meant that the unique value could be used "
"to uniquely fingerprint the device."
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid "Harden WEBA farbling"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"Scramble the output of PRNG with domainHash to prevent guessing the future "
"PRNs"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"Try to improve speed as possible but the wrapping is likely slower than "
"0.7.x"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"Github #125: Add option to disable NBS notifications, limit the number of "
"notifications"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"Fix Pagure #18 Optional permissions for AFPD - it is not necessary to give "
"browsingData"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"Allowlist options in NBS and FPD changed breaking backwards compatibility"
msgstr ""

#: ../content/pages/versions.md:block 45 (unordered list)
msgid ""
"When optionally activated, wrap BigInt typed arrays the same way as other "
"typed arrays"
msgstr ""

#: ../content/pages/versions.md:block 46 (header)
msgid "0.7.1"
msgstr ""

#: ../content/pages/versions.md:block 47 (unordered list)
msgid "Apply proper shielding for `navigator.plugins` in Firefox."
msgstr ""

#: ../content/pages/versions.md:block 47 (unordered list)
msgid ""
"Hide FPD notification after a while to prevent windows notification spam in "
"chromium-based browsers"
msgstr ""

#: ../content/pages/versions.md:block 48 (header)
msgid "0.7"
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid "JavaScript Restrictor rebranded to JShelter."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid ""
"The extension officially consists of JavaScript Shield (originally called "
"wrappers), NBS, and FPD. Unified way to disable each component in the pop "
"up. This should prevent users from disabling NBS thinking they disabled JSS."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid "New UI to create and tweak JavaScript Shield levels."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid ""
"Pop up redesigned. Try not to confuse the user about global/per-page "
"settings."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid ""
"It is possible to create per-domain JavaScript Shield tweaks, i.e. enable or"
" disable specific group of wrappers for certain domain only without the "
"necessity to create a new level."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid "The wrapping strength is defined by the user with a range input."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid ""
"The badge icon does not show level ID anymore. JShelter shows the number of "
"wrapping groups accessed by the current page. Report the number of calls for"
" wrapped APIs in the pop up."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid "Level 1 removed as it was not properly maintained."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid "Timestamp protection in level 2 increased to match level 3."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid ""
"XHR wrappings and (sharred) array buffers not wrapped anymore as XHR is "
"superseded by FPD and array buffers break other APIs."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid "New experimental level added that is based on original level 3."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid "Better and much longer description of built-in levels."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid ""
"Added support for device rotation. Accelerometer, LinearAccelerationSensor, "
"GravitySensor, and Magnetometer now adjust the gravity vector by the "
"rotation matrix."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid ""
"AmbientLightSensor, Gyroscope, AbsoluteOrientationSensor, and "
"RelativeOrientationSensor wrappers added."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid "Accessibility improvements in pop up."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid ""
"New colour scheme based on the logo and JShelter.org web site for both light"
" and dark theme."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid "Load FPD settings from advanced options correctly."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid ""
"Some inconsistences in update mechanism of hardware and enumerateDevices "
"found and fixed."
msgstr ""

#: ../content/pages/versions.md:block 49 (unordered list)
msgid ""
"Level settings are not backward-comptible, backup 0.6.x configuration if you"
" plan to downgrade."
msgstr ""

#: ../content/pages/versions.md:block 50 (header)
msgid "0.6.5"
msgstr ""

#: ../content/pages/versions.md:block 51 (unordered list)
msgid "Update NSCL to work around a change in Chrome permissions:"
msgstr ""

#: ../content/pages/versions.md:block 51 (unordered list)
msgid ""
"Use HTTPS endpoint for Chromium (works around lack of file access by default"
" on packed extensions), see also "
"https://forums.informaction.com/viewtopic.php?p=104921#p104921"
msgstr ""

#: ../content/pages/versions.md:block 51 (unordered list)
msgid ""
"Also includes a work-around for object element initialization "
"inconsistencies on Firefox"
msgstr ""

#: ../content/pages/versions.md:block 52 (header)
msgid "0.6.4"
msgstr ""

#: ../content/pages/versions.md:block 53 (unordered list)
msgid ""
"Fix wrapping of `navigator.plugins` in Firefox. This regression appeared in "
"0.6 in the generated code restricted by `apply_if` condition."
msgstr ""

#: ../content/pages/versions.md:block 54 (header)
msgid "0.6.3"
msgstr ""

#: ../content/pages/versions.md:block 55 (unordered list)
msgid ""
"Make sure that dynamically created iframes are not vulnerable to leaking "
"unwrapped APIs (Update NSCL)"
msgstr ""

#: ../content/pages/versions.md:block 55 (unordered list)
msgid "Fix FPD when run in a limited environment"
msgstr ""

#: ../content/pages/versions.md:block 55 (unordered list)
msgid "Do not interfere with time explicitly given to Date object"
msgstr ""

#: ../content/pages/versions.md:block 55 (unordered list)
msgid "Fix Network Boundary Shield name in the popup"
msgstr ""

#: ../content/pages/versions.md:block 56 (header)
msgid "0.6.2"
msgstr ""

#: ../content/pages/versions.md:block 57 (unordered list)
msgid ""
"Fix required permissions for Chromium-based browsers - webNavigation is not "
"needed"
msgstr ""

#: ../content/pages/versions.md:block 58 (header)
msgid "0.6.1"
msgstr ""

#: ../content/pages/versions.md:block 59 (unordered list)
msgid "Disable FPD by default, you are welcome to opt-in"
msgstr ""

#: ../content/pages/versions.md:block 59 (unordered list)
msgid "Provide access to advanced options from the main options page"
msgstr ""

#: ../content/pages/versions.md:block 59 (unordered list)
msgid "Fix update script to migrate to new configuration"
msgstr ""

#: ../content/pages/versions.md:block 60 (header)
msgid "0.6"
msgstr ""

#: ../content/pages/versions.md:block 61 (unordered list)
msgid ""
"New protection: Fingerprint detector, see the blogpost for explanation."
msgstr ""

#: ../content/pages/versions.md:block 61 (unordered list)
msgid ""
"Physical environment wrapper group added. It contains `Sensor`, "
"`Magnetometer`, `Accelerometer`, `LinearAccelerationSensor`, `GravitySensor`"
" wrappers. Some readings might be inconsistent. `Gyroscope` and "
"`Orientation` sensors will be a part of a future release."
msgstr ""

#: ../content/pages/versions.md:block 61 (unordered list)
msgid "It is possible to import/export configuration (Github issue #159)."
msgstr ""

#: ../content/pages/versions.md:block 61 (unordered list)
msgid "Improved accessibility of the pop up and option pages."
msgstr ""

#: ../content/pages/versions.md:block 61 (unordered list)
msgid ""
"Bugfix: Fix double injection of some wrappers. For example, this solves "
"regression in Geolocation wrapper introduced in 0.5."
msgstr ""

#: ../content/pages/versions.md:block 62 (header)
msgid "0.5.5"
msgstr ""

#: ../content/pages/versions.md:block 63 (unordered list)
msgid "Tighter content script initialization"
msgstr ""

#: ../content/pages/versions.md:block 63 (unordered list)
msgid ""
"Bugfix: wrap `Navigator.prototype` and `Geolocation.prototype` instead of "
"`navigator` and `navigator.geolocation`"
msgstr ""

#: ../content/pages/versions.md:block 63 (unordered list)
msgid ""
"Remove additional Geolocation API objects when Geolocation is disabled "
"completely"
msgstr ""

#: ../content/pages/versions.md:block 63 (unordered list)
msgid "Icons updated and synced with the JShelter website"
msgstr ""

#: ../content/pages/versions.md:block 64 (header)
msgid "0.5.4"
msgstr ""

#: ../content/pages/versions.md:block 65 (unordered list)
msgid "Dark style support added (Github issue #134)"
msgstr ""

#: ../content/pages/versions.md:block 65 (unordered list)
msgid "Bugfix: Removal of debugging noise (Github issue #139)"
msgstr ""

#: ../content/pages/versions.md:block 65 (unordered list)
msgid ""
"Bugfix: Allow removal of user-defined levels with names of a built-in level"
msgstr ""

#: ../content/pages/versions.md:block 65 (unordered list)
msgid ""
"Bugfix: Make sure that all user-defined levels are displayed in \"Specific "
"domain level configuration\" settings page"
msgstr ""

#: ../content/pages/versions.md:block 65 (unordered list)
msgid "Bugfix: Ignore non-existing levels for a specific domain"
msgstr ""

#: ../content/pages/versions.md:block 66 (header)
msgid "0.5.3"
msgstr ""

#: ../content/pages/versions.md:block 67 (unordered list)
msgid ""
"Bugfix: Cascade top document's level to subframes with no explicitly "
"assigned level. (workaround for Github issue #133)."
msgstr ""

#: ../content/pages/versions.md:block 67 (unordered list)
msgid "Bugfix: Improve IPv6 handling in NBS"
msgstr ""

#: ../content/pages/versions.md:block 67 (unordered list)
msgid ""
"Bugfix (Chromium-based browsers): Fix per-domain level options/settings page"
" (Github issue #147)"
msgstr ""

#: ../content/pages/versions.md:block 67 (unordered list)
msgid ""
"Do not display NBS notifications when accessing 0.0.0.0 and :: (workaround "
"for Github issue #125)"
msgstr ""

#: ../content/pages/versions.md:block 67 (unordered list)
msgid "Improve NBS description in the option/settings page."
msgstr ""

#: ../content/pages/versions.md:block 67 (unordered list)
msgid "Display level names in the pop up to improve usability."
msgstr ""

#: ../content/pages/versions.md:block 68 (header)
msgid "0.5.2"
msgstr ""

#: ../content/pages/versions.md:block 69 (unordered list)
msgid ""
"Bugfix: Do not modify JS environment on level 0. Regression appeared in 0.5."
msgstr ""

#: ../content/pages/versions.md:block 70 (header)
msgid "0.5.1"
msgstr ""

#: ../content/pages/versions.md:block 71 (unordered list)
msgid ""
"Bugfix: Display correctly NBS status at the current page (Github issue #114)"
msgstr ""

#: ../content/pages/versions.md:block 71 (unordered list)
msgid "Rebranding step 1: change UI-facing icons"
msgstr ""

#: ../content/pages/versions.md:block 71 (unordered list)
msgid ""
"Set minimal pop up width so that the pop up is usable in Chrome (Github "
"issue #112, Pagure issue #7)"
msgstr ""

#: ../content/pages/versions.md:block 71 (unordered list)
msgid ""
"Chromium-based browsers: revise Battery API protection that should match the"
" expectations of page scripts (mimic Firefox behaviour)."
msgstr ""

#: ../content/pages/versions.md:block 71 (unordered list)
msgid "Fixed typos in settings."
msgstr ""

#: ../content/pages/versions.md:block 72 (header)
msgid "0.5"
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid ""
"Add fingerprinting defenses based on Farbling developed by the Brave browser"
" (improved or added wrappers for Canvas, Audio, WebGL, device memory, "
"hardware concurrency, enumerateDevices). Most wrappers support provisioning "
"of little lies that differ between origins and sessions (the fingeprint is "
"different across origins and across sessions)."
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid ""
"We claimed to generate white image fake Canvas value but instead generated "
"fully transparent black image. We now generate the white image as it is more"
" common in other anti-canvas fingerprinting tools (level 3)."
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid "toDataUrl() no longer destructs the original canvas."
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid ""
"We use NoScript Commons Library to simplify some tasks like cross-browser "
"support."
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid "More reliable early content script configuration."
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid ""
"CSP headers no longer prevents the extension from wrapping JS APIs in "
"Firefox (Github issue #25)"
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid ""
"Wrappers should be injected reliably before page scripts start to operate "
"(Github issue #40)"
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid "We use NSCL to wrap APIs in iframes and workers"
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid ""
"It is no longer possible to access unwrapped functions from iframes and "
"workers (Pagure issue #2, Github issue #56)"
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid ""
"Ignore trailing '.' in domain names when selecting appropriate custom level."
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid ""
"Do not freeze wrappers to prevent fingerprintability of the users of "
"JShelter. We wrap the correct function in the prototype chain instead."
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid "navigator.getGamepads() wrapper added"
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid "navigator.activeVRDisplays() and navigator.xr wrappers added"
msgstr ""

#: ../content/pages/versions.md:block 73 (unordered list)
msgid ""
"Limit precision of high resolution timestamps in the Event, VRFrameData, and"
" Gamepad interface to be consistent with Date and Performance precision"
msgstr ""

#: ../content/pages/versions.md:block 74 (header)
msgid "0.4.7"
msgstr ""

#: ../content/pages/versions.md:block 75 (unordered list)
msgid "Wrap Beacon API"
msgstr ""

#: ../content/pages/versions.md:block 75 (unordered list)
msgid "Bugfix: inject content scripts to all iframes"
msgstr ""

#: ../content/pages/versions.md:block 75 (unordered list)
msgid ""
"Fix exception throwing in the code generator dealing with Firefox bug "
"1267027"
msgstr ""

#: ../content/pages/versions.md:block 76 (header)
msgid "0.4.6"
msgstr ""

#: ../content/pages/versions.md:block 77 (unordered list)
msgid ""
"NBS improvements for Chromium-based browsers: block a host after detecting "
"the first suspicious HTTP request from the public to the private network."
msgstr ""

#: ../content/pages/versions.md:block 78 (header)
msgid "0.4.5"
msgstr ""

#: ../content/pages/versions.md:block 79 (unordered list)
msgid "Add wrapper of MediaDevices.prototype.enumerateDevices"
msgstr ""

#: ../content/pages/versions.md:block 79 (unordered list)
msgid "Fix missing Date properties"
msgstr ""

#: ../content/pages/versions.md:block 79 (unordered list)
msgid "Fix Geolocation overflows appearing near poles"
msgstr ""

#: ../content/pages/versions.md:block 79 (unordered list)
msgid "Improve handling of domain names (URLs):"
msgstr ""

#: ../content/pages/versions.md:block 79 (unordered list)
msgid "Handle IPv4 addresses used as hostnames correctly"
msgstr ""

#: ../content/pages/versions.md:block 79 (unordered list)
msgid ""
"Do not treat TLD specially and allow specifying wrapping levels for TLDs"
msgstr ""

#: ../content/pages/versions.md:block 79 (unordered list)
msgid "Fix handling of two-letters 2-nd level domains"
msgstr ""

#: ../content/pages/versions.md:block 80 (header)
msgid "0.4.4"
msgstr ""

#: ../content/pages/versions.md:block 81 (unordered list)
msgid ""
"Bugfix: Do not try to redefine undefined objects. The exceptions thrown in "
"injected code used to prevent application of all the wrapping code."
msgstr ""

#: ../content/pages/versions.md:block 82 (header)
msgid "0.4.3"
msgstr ""

#: ../content/pages/versions.md:block 83 (unordered list)
msgid "Add an option to clear `window.name` with each page reload."
msgstr ""

#: ../content/pages/versions.md:block 84 (header)
msgid "0.4.2"
msgstr ""

#: ../content/pages/versions.md:block 85 (unordered list)
msgid ""
"Rewrite the NBS for Chromium-based browsers with custom DNS cache build with"
" resolved data available in onResponseStartedListener()"
msgstr ""

#: ../content/pages/versions.md:block 86 (header)
msgid "0.4.1"
msgstr ""

#: ../content/pages/versions.md:block 87 (unordered list)
msgid ""
"Fix the amount of saved data through pop-up (for a specific domain), it is "
"much harder to reach the quoa"
msgstr ""

#: ../content/pages/versions.md:block 88 (header)
msgid "0.4"
msgstr ""

#: ../content/pages/versions.md:block 89 (unordered list)
msgid "Re-introduced Geolocation API wrapping (several settings available)."
msgstr ""

#: ../content/pages/versions.md:block 90 (header)
msgid "0.3.2"
msgstr ""

#: ../content/pages/versions.md:block 91 (unordered list)
msgid "Bugfix: Set up domain-specific levels from storage correctly"
msgstr ""

#: ../content/pages/versions.md:block 91 (unordered list)
msgid ""
"Wrap PerformanceEntry instead of performance.getEntries\\*() - prevents a "
"known leak of precise time stamps in Chromium-based browsers."
msgstr ""

#: ../content/pages/versions.md:block 91 (unordered list)
msgid "Add note on the effectivity of time randomization"
msgstr ""

#: ../content/pages/versions.md:block 91 (unordered list)
msgid ""
"Firefox fix background and content scripts synchronization, use correct "
"naming (improves speed)"
msgstr ""

#: ../content/pages/versions.md:block 91 (unordered list)
msgid ""
"Time wrappers in Firefox affected by the <a "
"href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=1267027\">Fiefox CSP "
"bug</a> should work better. However, the precise timers are not wrapped, see"
" also <a href=\"https://github.com/polcak/jsrestrictor/issues/25\">#25</a>."
msgstr ""

#: ../content/pages/versions.md:block 91 (unordered list)
msgid "NBS message for Chromium-based browsers reworded."
msgstr ""

#: ../content/pages/versions.md:block 92 (header)
msgid "0.3.1"
msgstr ""

#: ../content/pages/versions.md:block 93 (unordered list)
msgid "Improve compatibility with Chromium based browsers"
msgstr ""

#: ../content/pages/versions.md:block 94 (header)
msgid "0.3"
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid "Major code rewrite - make the code more modular, remove duplications"
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid ""
"Add wrappings inspired by [JavaScript Zero: Real JavaScript and Zero S ide-"
"Channel Attacks](https://misc0110.net/web/files/jszero.pdf)"
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid ""
"Network Boundary Shield prevents web pages to use the browser as a proxy "
"between local network and the public Internet. See the [Force Point "
"report](https://www.forcepoint.com/sites/default/files/resources/files/report-"
"attacking-internal-network-en_0.pdf) for an example of the attack. The "
"protection encapsulates the WebRequest API, so it captures all outgoing "
"requests."
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid "Allow multiple custom levels"
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid ""
"Do not modify DOM of displayed pages (the modifications were detectable by "
"the page scripts and may reveal that the user is running JShelter)"
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid ""
"Canvas fingerprinting: originally, only `toDataURL` was blocked. The "
"extension now blocks `CanvasRenderingContext2D.prototype.getImageData` and "
"`HTMLCanvasElement.prototype.toBlob`."
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid "Block additionaly methods to get performance data."
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid ""
"Unfortunately, we do not migrate old settings as the levels were redesigned "
"and several features were removed. We expect to migrate previous settings in"
" the future."
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid ""
"Initial attempt to deal with a bug "
"<https://bugzilla.mozilla.org/show_bug.cgi?id=1267027> but it does not work "
"completely as expected, yet."
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid ""
"Make sure that calling toString on the wrapped function does not leak the "
"wrapping code."
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid "Fix original canvas method leaks through iframes"
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid "Do not allow page scripts to delete wrappers"
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid "GUI rewritten."
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid ""
"Do not open the main page after browser or extension update as it is "
"irritating and may send a signal that the user is tracked."
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid ""
"*Removed feature* Do not change request HTTP headers. See the paper FP-"
"Scanner: The privacy implications of browser fingerprint inconsistencies and"
" pages like "
"<https://ghacksuserjs.github.io/TorZillaPrint/TorZillaPrint.html>."
msgstr ""

#: ../content/pages/versions.md:block 95 (unordered list)
msgid ""
"*Removed feature* GPS/location is not blocked anymore, we expect to "
"reintroduce this feature in the future."
msgstr ""

#: ../content/pages/versions.md:block 96 (header)
msgid "0.2.1"
msgstr ""

#: ../content/pages/versions.md:block 97 (unordered list)
msgid ""
"Fix `Date` wrapping that used to break some pages; `Date` wrapping code "
"improved"
msgstr ""

#: ../content/pages/versions.md:block 97 (unordered list)
msgid "Improve `XMLHttpRequest` wrapping"
msgstr ""

#: ../content/pages/versions.md:block 98 (header)
msgid "0.2"
msgstr ""

#: ../content/pages/versions.md:block 99 (unordered list)
msgid "Additional APIs that can be wrapped:"
msgstr ""

#: ../content/pages/versions.md:block 99 (unordered list)
msgid ""
"`navigator` properties: `userAgent`, `vendor`, `platform`, `appVersion`, "
"`oscpu`, `language`, `languages`"
msgstr ""

#: ../content/pages/versions.md:block 99 (unordered list)
msgid "`document` properties: `referrer`"
msgstr ""

#: ../content/pages/versions.md:block 100 (header)
msgid "0.1"
msgstr ""

#: ../content/pages/versions.md:block 101 (unordered list)
msgid "Initial public version"
msgstr ""

#: ../content/pages/home-tmp.md:block 2 (header)
msgid ""
"JShelter logo\n"
"JShelter"
msgstr ""

#: ../content/pages/home-tmp.md:block 3 (paragraph)
msgid ""
"An anti-malware Web browser extension to mitigate potential threats from "
"JavaScript, including fingerprinting, tracking, and data collection!"
msgstr ""

#: ../content/pages/home-tmp.md:block 4 (paragraph)
msgid ""
"[Install in Firefox](https://addons.mozilla.org/firefox/addon/javascript-"
"restrictor/ \"https://addons.mozilla.org/firefox/addon/javascript-"
"restrictor/\") [Install in "
"Chrome](https://chrome.google.com/webstore/detail/javascript-"
"restrictor/ammoloihpcbognfddfjcljgembpibcmb "
"\"https://chrome.google.com/webstore/detail/javascript-"
"restrictor/ammoloihpcbognfddfjcljgembpibcmb\") [Install in "
"Opera](https://addons.opera.com/extensions/details/javascript-restrictor/ "
"\"https://addons.opera.com/extensions/details/javascript-restrictor/\")"
msgstr ""

#: ../content/pages/home-tmp.md:block 5 (paragraph)
msgid "Visit the [Install page](/install \"/install\") for other options"
msgstr ""

#: ../content/pages/home-tmp.md:block 6 (header)
msgid "About"
msgstr ""

#: ../content/pages/home-tmp.md:block 7 (header)
msgid "What is JShelter?"
msgstr ""

#: ../content/pages/home-tmp.md:block 8 (paragraph)
msgid ""
"JShelter is a browser extension to give you control over what your browser "
"is doing. A JavaScript-enabled web page can access much of the browser's "
"functionality, with little control over this process available to the user: "
"malicious websites can uniquely identify you through fingerprinting and use "
"other tactics for tracking your activity. JShelter improves the privacy and "
"security of your web browsing. For more details, see JShelter [threat "
"model](/threatmodel/ \"/threatmodel/\")."
msgstr ""

#: ../content/pages/home-tmp.md:block 9 (header)
msgid "How does it work?"
msgstr ""

#: ../content/pages/home-tmp.md:block 10 (paragraph)
msgid ""
"Similarly to a firewall that controls network connections, JShelter controls the "
"APIs provided by the browser, restricting the data that javascript code "
"executed on visited web pages can see, gather, and possibly misuse. "
"JShelter adds a safety layer that allows the user to "
"choose if a certain APIs should be forbidden on a site, or if it should be"
" allowed with restrictions, such as reducing the precision of geolocation to"
" the city area. This layer can also aid as a countermeasure against attacks "
"targeting the browser, operating system or hardware."
msgstr ""

#: ../content/pages/home-tmp.md:block 11 (header)
msgid "How can I get started?"
msgstr ""

#: ../content/pages/home-tmp.md:block 12 (paragraph)
msgid ""
"First, install the extension using the button above or checking the various "
"[installation options](/install/ \"/install/\")."
msgstr ""

#: ../content/pages/home-tmp.md:block 13 (paragraph)
msgid ""
"Afterwards, read our [FAQ](/faq/ \"/faq/\"), the [required "
"permissions](/permissions/ \"/permissions/\") and the different protection "
"[levels](/levels/ \"/levels/\")."
msgstr ""

#: ../content/pages/home-tmp.md:block 14 (paragraph)
msgid ""
"For more details about what's going on under the hood, check out the "
"[JShelter blog](/blog/ \"/blog/\") and "
"[paper](https://arxiv.org/abs/2204.01392 "
"\"https://arxiv.org/abs/2204.01392\")."
msgstr ""

#: ../content/pages/home-tmp.md:block 15 (header)
msgid "Who's behind this project?"
msgstr ""

#: ../content/pages/home-tmp.md:block 16 (paragraph)
msgid "See the [credits page](/credits/ \"/credits/\")."
msgstr ""

#: ../content/pages/home-tmp.md:block 17 (header)
msgid "Contribute"
msgstr ""

#: ../content/pages/home-tmp.md:block 18 (header)
msgid "I found a bug!"
msgstr ""

#: ../content/pages/home-tmp.md:block 19 (paragraph)
msgid ""
"If you have any questions or you spotted a bug, the project's [issue "
"tracker](https://pagure.io/JShelter/webextension/issues "
"\"https://pagure.io/JShelter/webextension/issues\") is the place for posting"
" those. We especially appreciate feedback, so feel free to use the issue "
"tracker for chiming in."
msgstr ""

#: ../content/pages/home-tmp.md:block 20 (header)
msgid "How can I help?"
msgstr ""

#: ../content/pages/home-tmp.md:block 21 (paragraph)
msgid ""
"Using JShelter and reporting any problems you find in our [issue "
"tracker](https://pagure.io/JShelter/webextension/issues "
"\"https://pagure.io/JShelter/webextension/issues\") is a huge help. If you "
"want to contribute to the project itself, post your ideas on the issue "
"tracker or just go ahead and make a pull request."
msgstr ""

#: ../content/pages/home-tmp.md:block 22 (header)
msgid "What is the license?"
msgstr ""

#: ../content/pages/home-tmp.md:block 23 (paragraph)
msgid ""
"JShelter is copylefted software, available under the [GNU General Public "
"License](/license/ \"/license/\")."
msgstr ""
