53 Commits

Author SHA1 Message Date
David Uhden Collado 4137cbb812 Update Firefox, NoScript and I2Pd (#68)
Trunk release / Unix (push) Has been cancelled
Trunk release / Windows (push) Has been cancelled
Trunk release / Publish trunk release (push) Has been cancelled
This pull request updates Firefox ESR from version 115.15.0 to 115.17.0,
NoScript from version 11.4.35 to 11.5.0, and I2Pd from version 2.53.1 to
2.54.0.
2024-11-03 21:52:12 +03:00
R4SAS e905b9241a [gha] upload hashsums
Trunk release / Unix (push) Has been cancelled
Trunk release / Windows (push) Has been cancelled
Trunk release / Publish trunk release (push) Has been cancelled
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2024-09-14 16:53:00 +03:00
R4SAS 9edaa86509 [gha] publish as releases
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2024-09-14 16:49:52 +03:00
R4SAS 22939abb2d [gha] merge artifacts (do not create subdir)
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2024-09-14 16:42:29 +03:00
R4SAS 4009eda24b [gha] extract downloaded artifacts
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2024-09-14 16:34:13 +03:00
R4SAS 34d5240f16 [gha] print downloaded artifacts
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2024-09-14 16:31:53 +03:00
R4SAS ef471b8204 [gha] publish packages on commit
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2024-09-14 16:27:41 +03:00
David Uhden Collado 5c73ec5eb1 Update Firefox and NoScript (#65)
Update Firefox to version 115.15.0esr and NoScript to version 11.4.35
2024-09-13 15:28:49 +03:00
David Uhden Collado 1194af2802 Update Firefox ESR to version 115.14.0, NoScript to version 11.4.31 and I2Pd to version 2.53.1 (#64)
* Update Firefox to 115.13.0esr and i2pd to 2.52.0

* Fix encoding

* Remove references to the Tor Browser

* Remove references to the Tor Browser

* Update the certificates and addressbook

* Update i2pd to version 2.53.0

* Remove prestium and ls reseeds

* Update i2pd to version 2.53.1

* Update NoScript to version 11.4.31

* Minor fixes

* Update to Firefox 115.14.0esr
2024-08-10 13:25:02 +03:00
David Uhden Collado e45d9cd337 Update Firefox to 115.13.0esr and i2pd to 2.52.0 (#62) 2024-07-18 20:20:49 +03:00
R4SAS ea3dc86306 update Firefox to 115.9.1esr and i2pd to 2.51.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2024-04-26 22:52:42 +03:00
R4SAS db0131f882 pre-1.3.4
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2024-01-02 21:07:22 +03:00
R4SAS ce06fc8cf6 Set correct xOS value (closes #46) 2022-11-10 17:56:42 +03:00
R4SAS 2bbd66f0db Merge pull request #43 from Renegade-Master/correct_win_version
Remove version from Windows Terminal;
2022-09-25 15:55:00 +00:00
Renegade-Master e0c88df2ca Remove version from Windows terminals; 2022-09-24 18:29:12 +01:00
Renegade-Master b87f3c7e39 Correct version in Windows Terminal;
- windows/StartI2PdBrowser.bat
- windows_prebuilt/src/StartI2PdBrowser.bat
  - Uses Git to determine current version.
  - Displays the correct version in the startup window.
2022-09-20 21:58:32 +01:00
R4SAS 7e65f8f3aa 1.3.3
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-09-19 20:45:00 +03:00
R4SAS cfbd0dba37 1.3.3
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-09-19 20:15:08 +03:00
R4SAS caf20bffe9 README: add force-push upload note
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-08-19 23:56:27 +03:00
R4SAS 9173b10396 [i2pd] update addressbook, switch to ssu2
Signed-off-by: R4SAS <r4sas@i2pmail.org>
2022-08-19 23:52:17 +03:00
R4SAS 3600bbe347 [FF] update to 91.12.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: fcde8f6616ef0539bf7c257a0681701b34f30a5e
2022-08-03 16:41:29 +03:00
R4SAS e3dd819feb update ff to 91.11.0, update cert storage
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 3721ea9dec974317685d81c69e6ea3d4f15d1f1f
2022-07-25 01:19:09 +03:00
R4SAS 4b161a4839 1.3.2
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 45df2dc2f5308421ed574e875d9357a35f01c470
2022-06-20 01:02:18 +03:00
R4SAS 44307ccfc8 [linux] fix env exec path
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 4b8ba60948
2022-04-27 01:25:10 +03:00
R4SAS a312c404d1 [linux] add modified logo
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 0cf9b6b6d8
2022-04-27 01:16:13 +03:00
R4SAS f344f8767f [linux] fix if statement
Former-commit-id: a40b8e216b
2022-04-21 00:31:10 +00:00
R4SAS a6f28e6fe0 [linux] add Desktop launch scripts
Former-commit-id: 57539ee9f0
2022-04-21 00:22:19 +00:00
R4SAS 677f1671c7 1.3.1
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 69e9c6743e
2022-03-24 03:30:23 +03:00
r4sas 186c28c4a2 pre-1.3.1: run ff without terminal on linux
Signed-off-by: r4sas <r4sas@i2pmail.org>

Former-commit-id: 293d3da278
2022-03-24 00:11:38 +00:00
R4SAS e5f24ca9d4 pre-1.3.1: update i2pd files
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: a2ae68c239
2022-03-24 02:05:30 +03:00
R4SAS 41b610553d pre-1.3.1
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 249d3d81c2
2022-03-24 02:00:56 +03:00
R4SAS 9f4ce50f01 update scripts
[ff] switch to 78.14.0
[i2pd] switch to 2.39.0
[i2pd] update addressbook
[i2pd] add orignal's reseed cert
[win] update CA for curl
[win] update 7z SFX binary version

Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 18510de356
2021-09-20 01:34:35 +03:00
r4sas 11bf97797c [ff] switch to 78.14.0
Signed-off-by: r4sas <r4sas@i2pmail.org>

Former-commit-id: fa9240fc07
2021-09-19 22:14:50 +00:00
R4SAS 059cd2a9c9 workaround for OpenBSD
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: fa0e02f1d6
2021-06-21 17:09:32 +03:00
r4sas f06eee67f0 [macos] fix build script
Signed-off-by: r4sas <r4sas@i2pmail.org>

Former-commit-id: b442b2c71e
2021-06-09 03:20:38 +00:00
R4SAS cd5da5f1a9 1.3.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 6323f326e6
2021-06-09 01:31:33 +03:00
r4sas 4fd1d4f0da [linux] update i2pd to 2.38.0
Signed-off-by: r4sas <r4sas@i2pmail.org>

Former-commit-id: 028a837e06
2021-06-08 22:08:44 +00:00
R4SAS 6d60f9dae1 update macos scripts
Former-commit-id: fbd24f6890
2021-06-02 00:41:14 +01:00
R4SAS 34b8bdaec1 update linux scripts
Former-commit-id: a1b26f90c2
2021-06-02 00:03:36 +01:00
R4SAS fd635c9997 update search engines override
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: f753a91932
2021-06-02 01:24:07 +03:00
R4SAS 2fd7967b17 update windows scripts to 78.11.0/2.38.0
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 232132a3c9
2021-06-01 23:10:07 +03:00
r4sas 98be313ff7 update i2pd to 2.32.1 (linux binary 2.32.1-43-gc4155410)
Signed-off-by: r4sas <r4sas@i2pmail.org>

Former-commit-id: 5066a4f039
2020-07-21 15:26:32 +00:00
R4SAS e2f4436f38 Merge pull request #32 from curbengh/i2pd-2.32.1
chore: update i2pd to 2.32.1 in windows & osx
Former-commit-id: 2e2624d3f8
2020-07-21 13:20:38 +00:00
MDLeom cdcfdb06e8 chore: update i2pd to 2.32.1
https://github.com/PurpleI2P/i2pd/releases/tag/2.32.1

Former-commit-id: b81e7d032b
2020-07-21 09:01:44 +01:00
R4SAS b65fdb3f13 Merge pull request #31 from rex4539/update
Update I2Pd to 2.30.0

Former-commit-id: cdd9bb6cf9
2020-02-28 21:16:21 +00:00
Dimitris Apostolou a94d7d6aa8 Update I2Pd to 2.30.0
Former-commit-id: 9cce2a17fc
2020-02-28 22:49:11 +02:00
R4SAS eb32de6eee Merge pull request #30 from rex4539/i2pd-update
Update I2Pd to 2.29.0 (without linux binary)

Former-commit-id: 92f98a54c7
2019-10-27 16:40:53 +00:00
Dimitris Apostolou 97afe240e5 Update I2Pd to 2.29.0
Former-commit-id: cb6dfd27bd
2019-10-25 01:32:35 +03:00
R4SAS 42e191538d rewrite default search engines - #26
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 2c087e4914
2019-09-28 07:36:12 +03:00
R4SAS d312a41931 Fetch information about legwork from internal resource (closes #26)
Signed-off-by: R4SAS <r4sas@i2pmail.org>

Former-commit-id: 50b06188df
2019-09-28 07:21:21 +03:00
R4SAS 0a1be3ac45 Merge pull request #29 from rex4539/macos-update
Update to Firefox 60.9.0esr, i2pd 2.28.0, NoScript 11.0.3

Former-commit-id: 96fe25cf09
2019-09-25 09:59:29 +00:00
r4sas 3fc37f5da4 add i2pd 2.28.0 linux static binaries
Signed-off-by: r4sas <r4sas@i2pmail.org>

Former-commit-id: 7b97f62dda
2019-09-25 09:57:30 +00:00
Dimitris Apostolou 395a547a95 Update to Firefox 60.9.0esr, i2pd 2.28.0, NoScript 11.0.3
Former-commit-id: fbdd0448ac
2019-09-25 12:12:49 +03:00
194 changed files with 7350 additions and 14888 deletions
+96
View File
@@ -0,0 +1,96 @@
name: Trunk release
on:
push:
branches:
- master
jobs:
pack-nix:
name: Unix
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Commit Hash
id: commit
uses: prompt/actions-commit-hash@v3.0.0
- name: Packing Linux
run: |
cd linux
tar -czf ../I2PdBrowserPortable_${{ steps.commit.outputs.short }}-linux.tar.gz *
- name: Packing MacOS
run: |
cd macos
tar -czf ../I2PdBrowserPortable_${{ steps.commit.outputs.short }}-macos.tar.gz *
- name: Upload Linux archive
uses: actions/upload-artifact@v4
with:
name: i2pdbrowser-${{ steps.commit.outputs.short }}-linux
path: I2PdBrowserPortable_*-linux.tar.gz
- name: Upload MacOS archive
uses: actions/upload-artifact@v4
with:
name: i2pdbrowser-${{ steps.commit.outputs.short }}-macos
path: I2PdBrowserPortable_*-macos.tar.gz
pack-win:
name: Windows
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Commit Hash
id: commit
uses: prompt/actions-commit-hash@v3.0.0
- name: Packaging Windows
run: |
cd windows
7z.exe a -tzip -mx=6 -- ..\I2PdBrowserPortable_${{ steps.commit.outputs.short }}-windows.zip *
- name: Upload Windows archive
uses: actions/upload-artifact@v4
with:
name: i2pdbrowser-${{ steps.commit.outputs.short }}-windows
path: I2PdBrowserPortable_*-windows.zip
publish:
name: Publish trunk release
runs-on: ubuntu-latest
needs:
- pack-nix
- pack-win
steps:
- name: Commit Hash
id: commit
uses: prompt/actions-commit-hash@v3.0.0
- name: Downloading artifacts
uses: actions/download-artifact@v4
with:
pattern: i2pdbrowser-${{ steps.commit.outputs.short }}-*
merge-multiple: true
- name: Create hashsums
run: sha512sum I2PdBrowserPortable_${{ steps.commit.outputs.short }}-* > SHA512SUMS
- name: Creating release
uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
prerelease: false
title: "Latest packages"
files: |
I2PdBrowserPortable_${{ steps.commit.outputs.short }}-*
SHA512SUMS
+7
View File
@@ -1 +1,8 @@
.DS_Store
/*.tar.gz
/*.zip
/*.7z
/*.exe
# Hash sums
/SHA512SUMS*
+4 -7
View File
@@ -1,7 +1,8 @@
# i2pdbrowser
--------
### English
i2pd browser bundle
*Note: repository was force-pushed to remove bundled Firefox and big binaries from repository archive. Clone repository again to fetch new commit tree.*
-----
This is a collection of scripts that will download the recent Firefox ESR release and configure it to connect over I2P, using i2pd.
Since 1.2.6 pre-built version for Windows is excluded from repository, but releases will contain it.
@@ -12,9 +13,5 @@ Since 1.2.6 pre-built version for Windows is excluded from repository, but relea
2. Run i2pd by executing `./i2pd` from `i2pd` folder
3. Run FireFox by executing `./firefox-portable`
### TODO:
* English version of Windows how-to for using it.
* Russian translation of README, both this one and the one for /windows
### Release signing
Release hashsums signed with key [66f6c87b98ebcfe2](http://keyserver.ubuntu.com/pks/lookup?op=vindex&search=0x66F6C87B98EBCFE2)
+2 -2
View File
@@ -1,3 +1,3 @@
/app
/browser
/data
/firefox-portable
/start-i2pd-browser.desktop
+2 -2
View File
@@ -11,9 +11,9 @@ What works now
How to use
-----
1. Build pre-configured Firefox using script `build.sh` from `build` folder
1. Build pre-configured Firefox using script `./build` from `build` folder
2. Run I2Pd by executing `./i2pd` from `i2pd` folder
3. Run Firefox by executing `./firefox-portable`
3. Run Firefox by executing `./start-i2pd-browser.desktop`
Additional info
-----
+50 -44
View File
@@ -1,6 +1,6 @@
#!/bin/sh
# Copyright (c) 2013-2019, The PurpleI2P Project
# Copyright (c) 2013-2024, The PurpleI2P Project
# This file is part of Purple I2P project and licensed under BSD3
# See full license text in LICENSE file at top of project tree
@@ -12,14 +12,23 @@ cd $dir
arch=$(uname -m)
language=$(echo $LANG | cut -c-5 | sed s/_/-/g)
version="60.7.1esr"
version="115.17.0esr"
application="firefox"
ftpmirror="https://ftp.mozilla.org/pub/$application/releases/$version"
if [ "$arch" = "amd64" ]; then # OpenBSD (and maybe FreeBSD) returns amd64 as architecture instead x86_64
arch=x86_64
fi
curlfind=$(which curl)
if [ -z $curlfind ]; then
echo "'cURL' does not seem to be installed. The script needs it!";
exit 1;
echo "'cURL' does not seem to be installed. The script needs it!"
exit 1
fi
# We support only English (US) and Russian
if [ "$language" != "ru" ]; then
language="en-US"
fi
echo "This script is preparing $application $version for use with I2Pd"
@@ -30,27 +39,27 @@ filepath="linux-$arch/$language/$file"
echo "Downloading $application..."
curl -L -f -# -O $ftpmirror/$filepath
if [ $? -ne 0 ]; then # Not found error, trying to cut language variable
echo "[TRY 2] I'll try downloading Firefox with shorter language code";
echo "[TRY 2] I'll try downloading Firefox with shorter language code"
language=$(echo $language | cut -c-2)
# re-create variable with cutted lang
filepath="linux-$arch/$language/$file"
curl -L -f -# -O $ftpmirror/$filepath
if [ $? -ne 0 ]; then # Not found error, trying to download english version
echo "[TRY 3] I'll try downloading Firefox with the English language code";
echo "[TRY 3] I'll try downloading Firefox with the English language code"
language="en_US"
# re-create lang variable
filepath="linux-$arch/$language/$file"
curl -L -f -# -O $ftpmirror/$filepath
if [ $? -ne 0 ]; then # After that i can say only that user haven't internet connection
echo "[Error] Can't download file. Check your internet connectivity."
exit 1;
exit 1
fi
fi
fi
if [ ! -f $file ]; then
echo "[Error] Can't find downloaded file. Does it really exist?"
exit 1;
exit 1
fi
echo "Downloading checksum file and checking SHA512 checksum"
@@ -59,7 +68,7 @@ recv_sum=$(grep "$filepath" SHA512SUMS | cut -c-128)
file_sum=$(sha512sum $file | cut -c-128)
if [ $recv_sum != $file_sum ]; then
echo "[Error] File checksum failed!"
exit 1;
exit 1
else
echo "Checksum correct."
rm SHA512SUMS
@@ -68,51 +77,48 @@ fi
echo "Extracting archive, please wait..."
tar xfj $file
rm $file
mv $application ../app
mkdir ../data
mv $application ../browser
mkdir ../browser/data
# Deleting some not needed files
rm ../app/crashreporter*
rm ../app/minidump-analyzer
rm ../app/pingsender
rm ../app/precomplete
rm ../app/removed-files
rm ../app/update*
rm ../app/browser/blocklist.xml
rm ../app/browser/crashreporter-override.ini
rm ../app/browser/features/aushelper@mozilla.org.xpi
rm ../app/browser/features/firefox@getpocket.com.xpi
rm ../app/browser/features/followonsearch@mozilla.com.xpi
rm ../app/browser/features/formautofill@mozilla.org.xpi
rm ../app/browser/features/jaws-esr@mozilla.org.xpi
rm ../app/browser/features/onboarding@mozilla.org.xpi
rm ../app/browser/features/screenshots@mozilla.org.xpi
rm -r ../app/dictionaries
rm ../browser/crashreporter*
rm ../browser/minidump-analyzer
rm ../browser/pingsender
rm ../browser/precomplete
rm ../browser/removed-files
rm ../browser/update*
rm ../browser/Throbber-small.gif
rm ../browser/browser/crashreporter-override.ini
rm ../browser/browser/features/formautofill@mozilla.org.xpi
rm ../browser/browser/features/screenshots@mozilla.org.xpi
rm -r ../browser/icons
# And edit some places
sed -i 's/Enabled=1/Enabled=0/g' ../app/application.ini
sed -i 's/ServerURL=.*/ServerURL=-/' ../app/application.ini
# sed -i 's/Enabled=1/Enabled=0/g' ../app/webapprt/webapprt.ini
# sed -i 's/ServerURL=.*/ServerURL=-/' ../app/webapprt/webapprt.ini
sed -i 's/Enabled=1/Enabled=0/g' ../browser/application.ini
sed -i 's/ServerURL=.*/ServerURL=-/' ../browser/application.ini
# Done!
echo "Downloading language packs..."
curl -L -f -# -o ../app/browser/extensions/langpack-ru@firefox.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/978562/russian_ru_language_pack-60.0buildid20180605171542-an+fx.xpi
curl -L -f -# -o ../app/browser/extensions/langpack-en-US@firefox.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/978493/english_us_language_pack-60.0buildid20180605171542-an+fx.xpi
mkdir ../browser/browser/extensions
curl -L -f -# -o ../browser/browser/extensions/langpack-ru@firefox.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/4144376/russian_ru_language_pack-115.0.20230726.201356.xpi
curl -L -f -# -o ../browser/browser/extensions/ruspell-wiktionary@addons.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/4215701/2696307-1.77.xpi
curl -L -f -# -o ../browser/browser/extensions/langpack-en-US@firefox.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/4144407/english_us_language_pack-115.0.20230726.201356.xpi
curl -L -f -# -o ../browser/browser/extensions/en-US@dictionaries.addons.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/4175230/us_english_dictionary-115.0.xpi
echo "Downloading NoScript extension..."
curl -L -f -# -o ../app/browser/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi https://addons.mozilla.org/firefox/downloads/file/3028550/noscript_security_suite-10.6.3-an+fx.xpi
curl -L -f -# -o ../browser/browser/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi https://addons.mozilla.org/firefox/downloads/file/4377088/noscript-11.5.0.xpi
echo "Adding standard configs..."
cp profile/* ../data/
cp -r preferences/* ../app/
cp -r preferences/* ../browser/
cp -r profile/* ../browser/data/
echo '#!/bin/sh' > "../${application}-portable"
echo 'dir=${0%/*}' >> "../${application}-portable"
echo 'if [ "$dir" = "$0" ]; then' >> "../${application}-portable"
echo ' dir="."' >> "../${application}-portable"
echo 'fi' >> "../${application}-portable"
echo 'cd "$dir/app"' >> "../${application}-portable"
echo './firefox -profile ../data -no-remote' >> "../${application}-portable"
if [ "$language" = "ru" ]; then
cp -r profile-ru/* ../browser/data/
else
cp -r profile-en/* ../browser/data/
fi
echo "Copying Desktop launch scripts..."
cp -r scripts/* ../browser/
cp scripts/start-i2pd-browser.desktop ../
chmod +x "../$application-portable"
echo ... finished
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

@@ -0,0 +1,363 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="512"
height="512"
version="1.1"
id="svg118"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs92">
<radialGradient
id="g"
cx="210%"
cy="-100%"
r="290%">
<stop
offset=".1"
stop-color="#ffe226"
id="stop2" />
<stop
offset=".79"
stop-color="#ff7139"
id="stop4" />
</radialGradient>
<radialGradient
id="c"
cx="49%"
cy="40%"
r="128%"
gradientTransform="matrix(.82 0 0 1 .088 0)">
<stop
offset=".3"
stop-color="#960e18"
id="stop7" />
<stop
offset=".35"
stop-color="#b11927"
stop-opacity=".74"
id="stop9" />
<stop
offset=".43"
stop-color="#db293d"
stop-opacity=".34"
id="stop11" />
<stop
offset=".5"
stop-color="#f5334b"
stop-opacity=".09"
id="stop13" />
<stop
offset=".53"
stop-color="#ff3750"
stop-opacity="0"
id="stop15" />
</radialGradient>
<radialGradient
id="d"
cx="48%"
cy="-12%"
r="140%">
<stop
offset=".13"
stop-color="#fff44f"
id="stop18" />
<stop
offset=".53"
stop-color="#ff980e"
id="stop20" />
</radialGradient>
<radialGradient
id="e"
cx="22.76%"
cy="110.11%"
r="100%">
<stop
offset=".35"
stop-color="#3a8ee6"
id="stop23" />
<stop
offset=".67"
stop-color="#9059ff"
id="stop25" />
<stop
offset="1"
stop-color="#c139e6"
id="stop27" />
</radialGradient>
<radialGradient
id="f"
cx="52%"
cy="33%"
r="59%"
gradientTransform="scale(.9 1)">
<stop
offset=".21"
stop-color="#9059ff"
stop-opacity="0"
id="stop30" />
<stop
offset=".97"
stop-color="#6e008b"
stop-opacity=".6"
id="stop32" />
</radialGradient>
<radialGradient
id="b"
cx="87.4%"
cy="-12.9%"
r="128%"
gradientTransform="matrix(.8 0 0 1 .178 .129)">
<stop
offset=".13"
stop-color="#ffbd4f"
id="stop35" />
<stop
offset=".28"
stop-color="#ff980e"
id="stop37" />
<stop
offset=".47"
stop-color="#ff3750"
id="stop39" />
<stop
offset=".78"
stop-color="#eb0878"
id="stop41" />
<stop
offset=".86"
stop-color="#e50080"
id="stop43" />
</radialGradient>
<radialGradient
id="h"
cx="84%"
cy="-41%"
r="180%">
<stop
offset=".11"
stop-color="#fff44f"
id="stop46" />
<stop
offset=".46"
stop-color="#ff980e"
id="stop48" />
<stop
offset=".72"
stop-color="#ff3647"
id="stop50" />
<stop
offset=".9"
stop-color="#e31587"
id="stop52" />
</radialGradient>
<radialGradient
id="i"
cx="16.1%"
cy="-18.6%"
r="348.8%"
gradientTransform="scale(1 .47) rotate(84 .279 -.297)">
<stop
offset="0"
stop-color="#fff44f"
id="stop55" />
<stop
offset=".3"
stop-color="#ff980e"
id="stop57" />
<stop
offset=".57"
stop-color="#ff3647"
id="stop59" />
<stop
offset=".74"
stop-color="#e31587"
id="stop61" />
</radialGradient>
<radialGradient
id="j"
cx="18.9%"
cy="-42.5%"
r="238.4%">
<stop
offset=".14"
stop-color="#fff44f"
id="stop64" />
<stop
offset=".48"
stop-color="#ff980e"
id="stop66" />
<stop
offset=".66"
stop-color="#ff3647"
id="stop68" />
<stop
offset=".9"
stop-color="#e31587"
id="stop70" />
</radialGradient>
<radialGradient
id="k"
cx="159.3%"
cy="-44.72%"
r="313.1%">
<stop
offset=".09"
stop-color="#fff44f"
id="stop73" />
<stop
offset=".63"
stop-color="#ff980e"
id="stop75" />
</radialGradient>
<linearGradient
id="a"
x1="87.25%"
y1="15.5%"
x2="9.4%"
y2="93.1%">
<stop
offset=".05"
stop-color="#fff44f"
id="stop78" />
<stop
offset=".37"
stop-color="#ff980e"
id="stop80" />
<stop
offset=".53"
stop-color="#ff3647"
id="stop82" />
<stop
offset=".7"
stop-color="#e31587"
id="stop84" />
</linearGradient>
<linearGradient
id="l"
x1="80%"
y1="14%"
x2="18%"
y2="84%">
<stop
offset=".17"
stop-color="#fff44f"
stop-opacity=".8"
id="stop87" />
<stop
offset=".6"
stop-color="#fff44f"
stop-opacity="0"
id="stop89" />
</linearGradient>
</defs>
<path
d="M478.711 166.353c-10.445-25.124-31.6-52.248-48.212-60.821 13.52 26.505 21.345 53.093 24.335 72.936 0 .039.015.136.047.4C427.706 111.135 381.627 83.823 344 24.355c-1.9-3.007-3.805-6.022-5.661-9.2a73.716 73.716 0 01-2.646-4.972A43.7 43.7 0 01332.1.677a.626.626 0 00-.546-.644.818.818 0 00-.451 0c-.034.012-.084.051-.12.065-.053.021-.12.069-.176.1.027-.036.083-.117.1-.136-60.37 35.356-80.85 100.761-82.732 133.484a120.249 120.249 0 00-66.142 25.488 71.355 71.355 0 00-6.225-4.7 111.338 111.338 0 01-.674-58.732c-24.688 11.241-43.89 29.01-57.85 44.7h-.111c-9.527-12.067-8.855-51.873-8.312-60.184-.114-.515-7.107 3.63-8.023 4.255a175.073 175.073 0 00-23.486 20.12 210.478 210.478 0 00-22.442 26.913c0 .012-.007.026-.011.038 0-.013.007-.026.011-.038a202.838 202.838 0 00-32.247 72.805c-.115.521-.212 1.061-.324 1.586-.452 2.116-2.08 12.7-2.365 15-.022.177-.032.347-.053.524a229.066 229.066 0 00-3.9 33.157c0 .41-.025.816-.025 1.227C16 388.418 123.6 496 256.324 496c118.865 0 217.56-86.288 236.882-199.63.407-3.076.733-6.168 1.092-9.271 4.777-41.21-.53-84.525-15.587-120.746zM201.716 354.447c1.124.537 2.18 1.124 3.334 1.639.048.033.114.07.163.1a126.191 126.191 0 01-3.497-1.739zm55.053-144.93zm198.131-30.59l-.032-.233c.012.085.027.174.04.259z"
fill="url(#a)"
id="path94" />
<path
d="M478.711 166.353c-10.445-25.124-31.6-52.248-48.212-60.821 13.52 26.505 21.345 53.093 24.335 72.936 0-.058.011.048.036.226.012.085.027.174.04.259 22.675 61.47 10.322 123.978-7.479 162.175-27.539 59.1-94.215 119.67-198.576 116.716C136.1 454.651 36.766 370.988 18.223 261.41c-3.379-17.28 0-26.054 1.7-40.084-2.071 10.816-2.86 13.94-3.9 33.157 0 .41-.025.816-.025 1.227C16 388.418 123.6 496 256.324 496c118.865 0 217.56-86.288 236.882-199.63.407-3.076.733-6.168 1.092-9.271 4.777-41.21-.53-84.525-15.587-120.746z"
fill="url(#b)"
id="path96" />
<path
d="M478.711 166.353c-10.445-25.124-31.6-52.248-48.212-60.821 13.52 26.505 21.345 53.093 24.335 72.936 0-.058.011.048.036.226.012.085.027.174.04.259 22.675 61.47 10.322 123.978-7.479 162.175-27.539 59.1-94.215 119.67-198.576 116.716C136.1 454.651 36.766 370.988 18.223 261.41c-3.379-17.28 0-26.054 1.7-40.084-2.071 10.816-2.86 13.94-3.9 33.157 0 .41-.025.816-.025 1.227C16 388.418 123.6 496 256.324 496c118.865 0 217.56-86.288 236.882-199.63.407-3.076.733-6.168 1.092-9.271 4.777-41.21-.53-84.525-15.587-120.746z"
fill="url(#c)"
id="path98" />
<path
d="M361.922 194.6c.524.368 1 .734 1.493 1.1a130.706 130.706 0 00-22.31-29.112C266.4 91.892 321.516 4.626 330.811.194c.027-.036.083-.117.1-.136-60.37 35.356-80.85 100.761-82.732 133.484 2.8-.194 5.592-.429 8.442-.429 45.051 0 84.289 24.77 105.301 61.487z"
fill="url(#d)"
id="path100" />
<path
d="M256.772 209.514c-.393 5.978-21.514 26.593-28.9 26.593-68.339 0-79.432 41.335-79.432 41.335 3.027 34.81 27.261 63.475 56.611 78.643 1.339.692 2.694 1.317 4.05 1.935a132.768 132.768 0 007.059 2.886 106.743 106.743 0 0031.271 6.031c119.78 5.618 142.986-143.194 56.545-186.408 22.137-3.85 45.115 5.053 57.947 14.067-21.012-36.714-60.25-61.484-105.3-61.484-2.85 0-5.641.235-8.442.429a120.249 120.249 0 00-66.142 25.488c3.664 3.1 7.8 7.244 16.514 15.828 16.302 16.067 58.13 32.705 58.219 34.657z"
fill="url(#e)"
id="path102" />
<path
d="M256.772 209.514c-.393 5.978-21.514 26.593-28.9 26.593-68.339 0-79.432 41.335-79.432 41.335 3.027 34.81 27.261 63.475 56.611 78.643 1.339.692 2.694 1.317 4.05 1.935a132.768 132.768 0 007.059 2.886 106.743 106.743 0 0031.271 6.031c119.78 5.618 142.986-143.194 56.545-186.408 22.137-3.85 45.115 5.053 57.947 14.067-21.012-36.714-60.25-61.484-105.3-61.484-2.85 0-5.641.235-8.442.429a120.249 120.249 0 00-66.142 25.488c3.664 3.1 7.8 7.244 16.514 15.828 16.302 16.067 58.13 32.705 58.219 34.657z"
fill="url(#f)"
id="path104" />
<g
id="layer1"
style="display:inline"
transform="matrix(0.35419593,0,0,0.35419593,167.60978,158.9271)">
<path
style="fill:#010101"
d="m 153,239 c -19.29628,10.1068 -35.89784,24.78369 -54.333641,36.46885 -9.746032,8.32066 -25.277462,12.6214 -28.707379,25.98943 10.307056,22.92658 37.56405,33.92848 53.60479,53.08074 23.28522,14.7741 12.39789,37.31214 10.86684,58.46127 -0.65103,19.79563 8.02486,38.22515 19.44408,53.8183 0.0876,13.91995 -31.90349,35.02457 -3.14719,41.12766 31.75568,-0.39587 63.54008,1.13262 95.2725,-0.006 19.25207,-6.5808 41.00426,2.46436 61.81371,-2.43182 23.28106,-1.22258 46.77912,-0.32628 69.92832,-2.57693 22.92231,-15.46076 -28.07351,-30.89777 -1.26144,-46.86781 C 390.50498,438.79689 387.18786,414.04679 382,394 c 17.87423,-14.93999 18.5116,-36.42509 19.87065,-57.42594 5.25206,-19.86251 14.03525,-38.69618 19.17732,-58.49812 -3.84842,-24.03985 -39.1751,-41.31194 -45.80958,-57.14885 17.78713,-29.29972 26.64951,-64.27647 19.59993,-98.29411 C 387.51638,67.544167 342.67824,21.758539 288.8189,10.337029 228.41755,-5.1087959 160.44586,26.883691 133.17057,82.782337 117.33803,113.72488 115.2685,151.24585 123.55952,184.65614 129.00838,205.07414 140.38108,222.47691 153,239 Z"
id="path1" />
<path
style="fill:#ffff01"
d="m 180,329 18,8 c 9.24,-17.53 14.78,-38.36 21.56,-57 2.31,-6.35 3.57,-17.15 9.57,-21.24 4.73,-3.22 14.51,-0.44 19.87,0.07 10.84,1.03 23.37,0.68 34,-1.72 C 335.22,245.34 372.71,199.28 374.96,146 378.07,72.236 305.3,13.58 234,29.02 c -43.93,9.507 -76.57,43.459 -88.57,85.985 -10.53,37.33 1.89,78.48 27.37,106.83 6.71,7.46 14.87,14.11 23.29,19.57 3.73,2.42 9.79,4.83 10.96,9.62 1.32,5.42 -4.33,13.76 -5.85,18.98 -5.82,19.96 -16.4,38.78 -21.2,59 z"
id="path2" />
<path
style="fill:#ce61a9"
d="m 237,270 c -8.48,15.92 -15.41,36.57 -20.08,54 -1.36,5.06 -6.23,11.67 -4.89,17 3.2,12.76 17.13,22.54 28.97,25.62 22.34,5.83 48.15,7.53 70,-1.07 3.88,-1.53 9.74,-2.89 11.97,-6.74 2.07,-3.57 0.82,-8.86 1.2,-12.81 0.99,-10.2 6.53,-18.52 16.83,-21 0.01,-9.11 1.67,-18.72 8.46,-25.47 3.91,-3.89 10.2,-6.15 14.14,-1.19 9.75,12.3 -3.7,27.68 12.4,36.66 13.76,-29.42 26.34,-75.12 -15,-88.74 -5.23,-1.73 -11.36,-4.63 -17,-4.08 -10.25,1.01 -22.68,14.27 -32.42,18.73 -22.23,10.18 -50.54,14.88 -74.58,9.09 z"
id="path3" />
<path
style="fill:#ce61a9"
d="m 137,338 c 3.18,-4.17 6.58,-7.19 11,-10 -1.97,-3.92 -6.68,-6.5 -7.46,-11 -1.64,-9.41 12.19,-20.93 20.46,-21.82 4.38,-0.48 12.3,5.08 15.49,2.99 2.51,-1.64 3.42,-6.55 4.51,-9.17 3.1,-7.51 12.87,-25.96 7.97,-33.72 -2.47285,-3.92245 -7.70872,-3.82217 -13.38023,-2.14588 -7.63086,2.25541 -16.05037,7.36385 -19.58977,9.36588 -13.64,7.73 -26.48,17.21 -39,26.63 -3.86,2.9 -12.34,8.01 -13.48,13 -1.24,5.43 2.89,10.17 6.2,13.83 7.67,8.5 17.17,16.64 27.28,22.04 z"
id="path4" />
<path
style="fill:#9fc79f"
d="m 157,384 c 0,13.94 -0.51,25.95 5.22,39 4.77,10.86 10.96,21.1 18.95,30 6.92,7.7 14.83,8.96 24.83,9 17.21,0.08 33.73,-6.21 42.48,-22 11.07,-19.97 3.58,-55.02 -21.52,-61.31 -7.81,-1.95 -23.68,6.35 -31.96,8.1 -13.65,2.89 -24.79,-0.54 -38,-2.79 z"
id="path5" />
<path
style="fill:#95bb95"
d="m 357,385 c -17.01,3.2 -27.07,2.97 -31,-16 -11.91,1.56 -23.62,7.8 -36,9.57 -4.1,0.59 -11.08,-0.98 -14.3,2.03 -5.1,4.77 -5.44,14.02 -5.74,20.4 -0.22,4.66 -2.39,9.33 -1.6,14 1.72,10.26 13.38,21.18 19.74,29 4.59,5.66 10.59,14.3 17.9,16.49 8.24,2.46 16.55,-4.65 23,-8.83 9.21,-5.99 19.98,-13.42 24.98,-23.66 2.33,-4.78 0.91,-11.82 1.04,-17 0.21,-8.7 1.98,-17.26 1.98,-26 z"
id="path6" />
<path
style="fill:#fbb5a7"
d="m 344.04,338.74 c -8.51,3.44 -8.51,27.18 -1.48,32.23 3.87,2.78 17.29,-0.65 21.44,-2.32 23.49,-9.46 -4.63,-36.1 -19.96,-29.91 z"
id="path7" />
<path
style="fill:#fbb5a7"
d="m 201,365 c -6.76,-9.02 -21.93,-17.44 -33,-19.53 -4.52,-0.85 -12.18,-1.71 -14.24,3.59 -2.56,6.57 3.94,13.06 9.24,15.61 11.8,5.69 25.9,4.17 38,0.33 z"
id="path8" />
<path
style="fill:#576e57"
d="m 365,406 c -0.86,6.78 1.35,18.22 -1.49,24.2 -7.25,15.25 -24.45,25.44 -38.51,33.66 -6.58,3.84 -13.19,7.73 -21,5.03 -16.77,-5.8 -20.94,-25.76 -35,-33.89 0,8.86 0.3,16.69 3.74,25 17.58,42.43 71.5,11.84 89.46,-14 7.43,-10.69 13.35,-29.47 2.8,-40"
id="path9" />
<path
style="fill:#576e57"
d="m 155,432 c 2.63,10.96 11.11,20.8 17.28,30.04 2.17,3.23 4.52,8.56 8.1,10.4 4.57,2.35 11.58,2.11 16.62,2.72 15.31,1.83 33.26,2.59 48,-2.5 5.63,-1.95 11.75,-4.02 14.68,-9.66 2.98,-5.74 -0.56,-14.03 -1.68,-20 -5.56,5.92 -9.39,12.43 -16,17.54 -14.23,10.98 -43.14,17.76 -59,6.03 -12.43,-9.19 -17.42,-24.31 -28,-34.57"
id="path10" />
<path
style="fill:#010101"
d="m 203,78.432 c -41.94,5.523 -52.25,62.648 -12,79.888 7.45,3.19 18.11,2.68 26,1.47 48.64,-7.5 34.78,-87.781 -14,-81.358 z"
id="path11" />
<path
style="fill:#ffffff"
d="m 196,147 c -1.86,-8.13 -2.94,-15.07 3.38,-21.79 10.5,-11.16 28.74,-3.58 30.62,10.79 9.52,-9.43 5.95,-29.23 -3.17,-37.74 -12.58,-11.724 -31.99,-10.389 -42.89,2.76 -3.76,4.52 -5.37,9.22 -6.17,14.98 -0.77,5.56 0.25,11.88 2.58,17 3.12,6.83 8.9,11.17 15.65,14 z"
id="path12" />
<path
style="fill:#010101"
d="m 299,75.518 c -52.42,11.12 -36.2,92.762 16,81.662 52.67,-11.2 36.32,-92.76 -16,-81.662 z"
id="path13" />
<path
style="fill:#ffffff"
d="m 283,134 c 2.92303,-6.34588 4.80429,-9.36607 10.18,-11.66 15.75,-7.07 24.49,8.35 22.82,21.66 38.8,-11.2 14.11,-71.907 -22,-53.85 -4.34,2.168 -8.17,5.944 -10.96,9.85 -3.18,4.48 -5.24,9.49 -5.71,15 -0.59,6.86 2.59,13.13 5.67,19 z"
id="path14" />
</g>
<path
d="M170.829 151.036a244.042 244.042 0 014.981 3.3 111.338 111.338 0 01-.674-58.732c-24.688 11.241-43.89 29.01-57.85 44.7 1.155-.033 36.014-.66 53.543 10.732z"
fill="url(#g)"
id="path106" />
<path
d="M18.223 261.41C36.766 370.988 136.1 454.651 248.855 457.844c104.361 2.954 171.037-57.62 198.576-116.716 17.8-38.2 30.154-100.7 7.479-162.175l-.008-.026-.032-.233c-.025-.178-.04-.284-.036-.226 0 .039.015.136.047.4 8.524 55.661-19.79 109.584-64.051 146.044l-.133.313c-86.245 70.223-168.774 42.368-185.484 30.966a144.108 144.108 0 01-3.5-1.743c-50.282-24.029-71.054-69.838-66.6-109.124-42.457 0-56.934-35.809-56.934-35.809s38.119-27.179 88.358-3.541c46.53 21.893 90.228 3.543 90.233 3.541-.089-1.952-41.917-18.59-58.223-34.656-8.713-8.584-12.85-12.723-16.514-15.828a71.355 71.355 0 00-6.225-4.7 282.929 282.929 0 00-4.981-3.3c-17.528-11.392-52.388-10.765-53.543-10.735h-.111c-9.527-12.067-8.855-51.873-8.312-60.184-.114-.515-7.107 3.63-8.023 4.255a175.073 175.073 0 00-23.486 20.12 210.478 210.478 0 00-22.442 26.919c0 .012-.007.026-.011.038 0-.013.007-.026.011-.038a202.838 202.838 0 00-32.247 72.805c-.115.521-8.65 37.842-4.44 57.199z"
fill="url(#h)"
id="path108" />
<path
d="M341.105 166.587a130.706 130.706 0 0122.31 29.112c1.323.994 2.559 1.985 3.608 2.952 54.482 50.2 25.936 121.2 23.807 126.26 44.261-36.46 72.575-90.383 64.051-146.044C427.706 111.135 381.627 83.823 344 24.355c-1.9-3.007-3.805-6.022-5.661-9.2a73.716 73.716 0 01-2.646-4.972A43.7 43.7 0 01332.1.677a.626.626 0 00-.546-.644.818.818 0 00-.451 0c-.034.012-.084.051-.12.065-.053.021-.12.069-.176.1-9.291 4.428-64.407 91.694 10.298 166.389z"
fill="url(#i)"
id="path110" />
<path
d="M367.023 198.651c-1.049-.967-2.285-1.958-3.608-2.952-.489-.368-.969-.734-1.493-1.1-12.832-9.014-35.81-17.917-57.947-14.067 86.441 43.214 63.235 192.026-56.545 186.408a106.743 106.743 0 01-31.271-6.031 134.51 134.51 0 01-7.059-2.886c-1.356-.618-2.711-1.243-4.05-1.935.048.033.114.07.163.1 16.71 11.4 99.239 39.257 185.484-30.966l.133-.313c2.129-5.054 30.675-76.057-23.807-126.258z"
fill="url(#j)"
id="path112" />
<path
d="M148.439 277.443s11.093-41.335 79.432-41.335c7.388 0 28.509-20.615 28.9-26.593s-43.7 18.352-90.233-3.541c-50.239-23.638-88.358 3.541-88.358 3.541s14.477 35.809 56.934 35.809c-4.453 39.286 16.319 85.1 66.6 109.124 1.124.537 2.18 1.124 3.334 1.639-29.348-15.169-53.582-43.834-56.609-78.644z"
fill="url(#k)"
id="path114" />
<path
d="M478.711 166.353c-10.445-25.124-31.6-52.248-48.212-60.821 13.52 26.505 21.345 53.093 24.335 72.936 0 .039.015.136.047.4C427.706 111.135 381.627 83.823 344 24.355c-1.9-3.007-3.805-6.022-5.661-9.2a73.716 73.716 0 01-2.646-4.972A43.7 43.7 0 01332.1.677a.626.626 0 00-.546-.644.818.818 0 00-.451 0c-.034.012-.084.051-.12.065-.053.021-.12.069-.176.1.027-.036.083-.117.1-.136-60.37 35.356-80.85 100.761-82.732 133.484 2.8-.194 5.592-.429 8.442-.429 45.053 0 84.291 24.77 105.3 61.484-12.832-9.014-35.81-17.917-57.947-14.067 86.441 43.214 63.235 192.026-56.545 186.408a106.743 106.743 0 01-31.271-6.031 134.51 134.51 0 01-7.059-2.886c-1.356-.618-2.711-1.243-4.05-1.935.048.033.114.07.163.1a144.108 144.108 0 01-3.5-1.743c1.124.537 2.18 1.124 3.334 1.639-29.35-15.168-53.584-43.833-56.611-78.643 0 0 11.093-41.335 79.432-41.335 7.388 0 28.509-20.615 28.9-26.593-.089-1.952-41.917-18.59-58.223-34.656-8.713-8.584-12.85-12.723-16.514-15.828a71.355 71.355 0 00-6.225-4.7 111.338 111.338 0 01-.674-58.732c-24.688 11.241-43.89 29.01-57.85 44.7h-.111c-9.527-12.067-8.855-51.873-8.312-60.184-.114-.515-7.107 3.63-8.023 4.255a175.073 175.073 0 00-23.486 20.12 210.478 210.478 0 00-22.435 26.916c0 .012-.007.026-.011.038 0-.013.007-.026.011-.038a202.838 202.838 0 00-32.247 72.805c-.115.521-.212 1.061-.324 1.586-.452 2.116-2.486 12.853-2.77 15.156-.022.177.021-.176 0 0a279.565 279.565 0 00-3.544 33.53c0 .41-.025.816-.025 1.227C16 388.418 123.6 496 256.324 496c118.865 0 217.56-86.288 236.882-199.63.407-3.076.733-6.168 1.092-9.271 4.777-41.21-.53-84.525-15.587-120.746zm-23.841 12.341c.012.085.027.174.04.259l-.008-.026-.032-.233z"
fill="url(#l)"
id="path116" />
</svg>

After

Width:  |  Height:  |  Size: 19 KiB

@@ -1 +0,0 @@
resource cck2 modules/
@@ -1,154 +0,0 @@
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
const EXPORTED_SYMBOLS = [];
var gForceExternalHandler = false;
XPCOMUtils.defineLazyServiceGetter(this, "extProtocolSvc",
"@mozilla.org/uriloader/external-protocol-service;1", "nsIExternalProtocolService");
var documentObserver = {
observe: function observe(subject, topic, data) {
if (subject instanceof Ci.nsIDOMWindow && topic == 'content-document-global-created') {
var doc = subject.document;
doc.addEventListener("DOMContentLoaded", function onLoad(event) {
event.target.removeEventListener("DOMContentLoaded", onLoad, false);
// If the parent document is a local file, don't do anything
// Links will just work
if (doc.location.href.indexOf("file://") == 0) {
return;
}
var links = event.target.getElementsByTagName("a");
for (var i=0; i < links.length; i++) {
var link = links[i];
if (link.href.indexOf("file://") != 0) {
continue;
}
link.addEventListener("click", function(link) {
return function(event) {
event.preventDefault();
if (gForceExternalHandler) {
extProtocolSvc.loadUrl(Services.io.newURI(link.href, null, null));
} else {
var target = "_self";
if (link.hasAttribute("target")) {
target = link.getAttribute("target");
}
// If we were told somewhere other than current (based on modifier keys), use it
var where = whereToOpenLink(event);
if (where != "current" || target == "_blank") {
sendAsyncMessage("cck2:open-url", {
"url": link.href,
"where": (target == "_blank") ? "tab" : where
});
return;
}
switch (target) {
case "_self":
link.ownerDocument.location = link.href;
break;
case "_parent":
link.ownerDocument.defaultView.parent.document.location = link.href;
break;
case "_top":
link.ownerDocument.defaultView.top.document.location = link.href;
break;
default:
// Attempt to find the iframe that this goes into
var iframes = doc.defaultView.parent.document.getElementsByName(target);
if (iframes.length > 0) {
iframes[0].contentDocument.location = link.href;
} else {
link.ownerDocument.location = link.href;
}
break;
}
}
}
}(link), false);
}
}, false);
}
}
}
// Don't do this check before Firefox 29
if (Services.vc.compare(Services.appinfo.version, "29") > 0) {
try {
if (Services.prefs.getCharPref("capability.policy.default.checkloaduri.enabled") == "allAccess") {
gForceExternalHandler = !extProtocolSvc.isExposedProtocol('file');
Services.obs.addObserver(documentObserver, "content-document-global-created", false);
addEventListener("unload", function() {
Services.obs.removeObserver(documentObserver, "content-document-global-created", false);
})
}
} catch (e) {}
}
/* Copied from http://mxr.mozilla.org/mozilla-central/source/browser/base/content/utilityOverlay.js?raw=1 */
function getBoolPref(prefname, def)
{
try {
return Services.prefs.getBoolPref(prefname);
}
catch(er) {
return def;
}
}
/* whereToOpenLink() looks at an event to decide where to open a link.
*
* The event may be a mouse event (click, double-click, middle-click) or keypress event (enter).
*
* On Windows, the modifiers are:
* Ctrl new tab, selected
* Shift new window
* Ctrl+Shift new tab, in background
* Alt save
*
* Middle-clicking is the same as Ctrl+clicking (it opens a new tab).
*
* Exceptions:
* - Alt is ignored for menu items selected using the keyboard so you don't accidentally save stuff.
* (Currently, the Alt isn't sent here at all for menu items, but that will change in bug 126189.)
* - Alt is hard to use in context menus, because pressing Alt closes the menu.
* - Alt can't be used on the bookmarks toolbar because Alt is used for "treat this as something draggable".
* - The button is ignored for the middle-click-paste-URL feature, since it's always a middle-click.
*/
function whereToOpenLink( e, ignoreButton, ignoreAlt )
{
Components.utils.import("resource://gre/modules/AppConstants.jsm");
// This method must treat a null event like a left click without modifier keys (i.e.
// e = { shiftKey:false, ctrlKey:false, metaKey:false, altKey:false, button:0 })
// for compatibility purposes.
if (!e)
return "current";
var shift = e.shiftKey;
var ctrl = e.ctrlKey;
var meta = e.metaKey;
var alt = e.altKey && !ignoreAlt;
// ignoreButton allows "middle-click paste" to use function without always opening in a new window.
var middle = !ignoreButton && e.button == 1;
var middleUsesTabs = true;
// Don't do anything special with right-mouse clicks. They're probably clicks on context menu items.
var metaKey = AppConstants.platform == "macosx" ? meta : ctrl;
if (metaKey || (middle && middleUsesTabs))
return shift ? "tabshifted" : "tab";
if (alt && getBoolPref("browser.altClickSave", false))
return "save";
if (shift || (middle && !middleUsesTabs))
return "window";
return "current";
}
@@ -1,183 +0,0 @@
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
const EXPORTED_SYMBOLS = [];
var gAllowedPasteSites = [];
var gAllowedCutCopySites = [];
var gDeniedPasteSites = [];
var gDeniedCutCopySites = [];
var gDefaultPastePolicy = false;
var gDefaultCutCopyPolicy = false;
function allowCutCopy(doc) {
var win = doc.defaultView;
if (win !== win.top) {
// It's an iframe. Use the top level window
// for security purposes
win = win.top;
}
if (gDefaultCutCopyPolicy == true) {
for (var i=0; i < gDeniedCutCopySites.length; i++) {
if (win.location.href.indexOf(gDeniedCutCopySites[i]) == 0) {
return false;
}
}
return true;
} else {
for (var i=0; i < gAllowedCutCopySites.length; i++) {
if (win.location.href.indexOf(gAllowedCutCopySites[i]) == 0) {
return true;
}
}
return false;
}
}
function allowPaste(doc) {
var win = doc.defaultView;
if (win !== win.top) {
// It's an iframe. Use the top level window
// for security purposes
win = win.top;
}
if (gDefaultPastePolicy == true) {
for (var i=0; i < gDeniedPasteSites.length; i++) {
if (win.location.href.indexOf(gDeniedPasteSites[i]) == 0) {
return false;
break;
}
}
return true;
} else {
for (var i=0; i < gAllowedPasteSites.length; i++) {
if (win.location.href.indexOf(gAllowedPasteSites[i]) == 0) {
return true;
break;
}
}
return false;
}
}
function myExecCommand(doc, originalExecCommand) {
return function(aCommandName, aShowDefaultUI, aValueArgument) {
switch (aCommandName.toLowerCase()) {
case "cut":
case "copy":
if (allowCutCopy(doc)) {
var win = Services.wm.getMostRecentWindow("navigator:browser");
win.goDoCommand("cmd_" + aCommandName.toLowerCase());
return true;
}
break;
case "paste":
if (allowPaste(doc)) {
var win = Services.wm.getMostRecentWindow("navigator:browser");
win.goDoCommand("cmd_" + aCommandName.toLowerCase());
return true;
}
break;
}
return originalExecCommand.call(doc, aCommandName, aShowDefaultUI, aValueArgument);
}
}
function myQueryCommandSupported(doc, originalQueryCommandSupported) {
return function(aCommandName) {
switch (aCommandName.toLowerCase()) {
case "cut":
case "copy":
if (allowCutCopy(doc)) {
return true;
}
break;
case "paste":
if (allowPaste(doc)) {
return true;
}
break;
}
return originalQueryCommandSupported.call(doc, aCommandName, aShowDefaultUI, aValueArgument);
}
}
var documentObserver = {
observe: function observe(subject, topic, data) {
if (subject instanceof Ci.nsIDOMWindow && topic == 'content-document-global-created') {
var doc = subject.document;
var cutCopyAllowed = allowCutCopy(doc);
var pasteAllowed = allowPaste(doc);
if (!cutCopyAllowed && !pasteAllowed) {
return;
}
var originalExecCommand = Cu.waiveXrays(doc).execCommand;
Cu.exportFunction(myExecCommand(doc, originalExecCommand), doc, {defineAs: "execCommand"});
var originalQueryCommandSupported = Cu.waiveXrays(doc).queryCommandSupported;
Cu.exportFunction(myQueryCommandSupported(doc, originalQueryCommandSupported), doc, {defineAs: "queryCommandSupported"});
var originalQueryCommandEnabled = Cu.waiveXrays(doc).queryCommandEnabled;
Cu.exportFunction(myQueryCommandSupported(doc, originalQueryCommandEnabled), doc, {defineAs: "queryCommandEnabled"});
}
}
}
// Don't do this check before Firefox 29
if (Services.vc.compare(Services.appinfo.version, "29") > 0) {
try {
if (Services.prefs.getCharPref("capability.policy.default.Clipboard.cutcopy") == "allAccess") {
gDefaultCutCopyPolicy = true;
}
} catch (e) {}
try {
if (Services.prefs.getCharPref("capability.policy.default.Clipboard.paste") == "allAccess") {
gDefaultPastePolicy = true;
}
} catch (e) {}
try {
var policies = [];
policies = Services.prefs.getCharPref("capability.policy.policynames").split(', ');
for (var i=0; i < policies.length; i++ ) {
try {
if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.cutcopy") == "allAccess") {
var allowedCutCopySites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
for (var j=0; j < allowedCutCopySites.length; j++) {
gAllowedCutCopySites.push(allowedCutCopySites[j]);
}
}
} catch(e) {}
try {
if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.cutcopy") == "noAccess") {
var deniedCutCopySites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
for (var j=0; j < deniedCutCopySites.length; j++) {
gDeniedCutCopySites.push(deniedCutCopySites[j]);
}
}
} catch(e) {}
try {
if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.paste") == "allAccess") {
var allowedPasteSites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
for (var j=0; j < allowedPasteSites.length; j++) {
gAllowedPasteSites.push(allowedPasteSites[j]);
}
}
} catch(e) {}
try {
if (Services.prefs.getCharPref("capability.policy." + policies[i] + ".Clipboard.paste") == "noAccess") {
var deniedPasteSites = Services.prefs.getCharPref("capability.policy." + policies[i] + ".sites").split(" ");
for (var j=0; j < deniedPasteSites.length; j++) {
gDeniedPasteSites.push(deniedPasteSites[j]);
}
}
} catch(e) {}
}
} catch (e) {}
if (gDefaultCutCopyPolicy || gDefaultPastePolicy ||
gAllowedCutCopySites.length > 0 || gAllowedPasteSites> 0) {
Services.obs.addObserver(documentObserver, "content-document-global-created", false);
addEventListener("unload", function() {
Services.obs.removeObserver(documentObserver, "content-document-global-created", false);
})
}
}
File diff suppressed because it is too large Load Diff
@@ -1,111 +0,0 @@
/* This file overlays about:addons. It does the following: */
/* Workaround https://bugzilla.mozilla.org/show_bug.cgi?id=1132971 */
/* Hide the "Install Add-on From File" menu if xpinstall.enabled is false */
/* Hides the discover pane if xpinstall.enabled is false */
/* Hides the add-on entry if specified in the CCK2 config */
const EXPORTED_SYMBOLS = [];
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://cck2/CCK2.jsm");
var addonId = "cck2wizard@kaply.com";
var observer = {
observe: function observe(subject, topic, data) {
switch (topic) {
case "chrome-document-global-created":
var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
win.addEventListener("load", function onLoad(event) {
win.removeEventListener("load", onLoad, false);
var doc = event.target;
var url = doc.location.href.split("?")[0].split("#")[0];
switch (url) {
case "about:addons":
case "chrome://mozapps/content/extensions/extensions.xul":
var configs = CCK2.getConfigs();
var hiddenAddons = [];
var requiredAddons = [];
for (let id in configs) {
var config = configs[id];
if (config && "extension" in config && config.extension.hide) {
hiddenAddons.push(config.extension.id);
}
if (config.requiredAddons) {
requiredAddons.push.apply(requiredAddons, config.requiredAddons.split(","));
}
}
if (hiddenAddons.length > 0 || requiredAddons.length > 0) {
var ss;
for (var i = 0; i < doc.styleSheets.length; i++) {
if (doc.styleSheets[i].href == "chrome://mozapps/skin/extensions/extensions.css") {
ss = doc.styleSheets[i];
break;
}
}
for (var i=0; i < hiddenAddons.length; i++) {
ss.insertRule("richlistitem[value='" + hiddenAddons[i] + "'] { display: none;}", ss.cssRules.length);
}
for (var i=0; i < requiredAddons.length; i++) {
ss.insertRule("richlistitem[value='" + requiredAddons[i] + "'] button[anonid='disable-btn'] { display: none;}", ss.cssRules.length);
ss.insertRule("richlistitem[value='" + requiredAddons[i] + "'] button[anonid='remove-btn'] { display: none;}", ss.cssRules.length);
}
if (requiredAddons.length > 0) {
win.gViewController.commands.cmd_disableItem.origIsEnabled = win.gViewController.commands.cmd_disableItem.isEnabled;
win.gViewController.commands.cmd_disableItem.isEnabled = function(aAddon) { if (aAddon && requiredAddons.indexOf(aAddon.id) != -1) return false; return this.origIsEnabled;}
win.gViewController.commands.cmd_uninstallItem.origIsEnabled = win.gViewController.commands.cmd_disableItem.isEnabled;
win.gViewController.commands.cmd_uninstallItem.isEnabled = function(aAddon) { if (aAddon && requiredAddons.indexOf(aAddon.id) != -1) return false; return this.origIsEnabled;}
}
}
var showDiscoverPane = true;
var xpinstallEnabled = true;
try {
xpinstallEnabled = Services.prefs.getBoolPref("xpinstall.enabled");
} catch (e) {}
try {
showDiscoverPane = Services.prefs.getBoolPref("extensions.getAddons.showPane");
} catch (e) {}
if (!xpinstallEnabled || !showDiscoverPane) {
// Work around Mozilla bug 1132971
// Hide the discover pane if it is the selected pane
if (E("view-port", doc) && E("view-port", doc).selectedIndex == 0) {
try {
win.gViewController.loadView("addons://list/extension");
} catch (ex) {
// This fails with Webconverger installed. Ignore it.
}
}
}
if (!xpinstallEnabled) {
// Hide the "Install Add-on From File" separator
hide(E("utils-installFromFile-separator", doc));
// Hide the "Install Add-on From File" menuitem
hide(E("utils-installFromFile", doc));
win.gDragDrop.onDragOver = function(event) {
event.dataTransfer.dropEffect = "none";
event.stopPropagation();
event.preventDefault();
};
}
break;
}
}, false);
break;
}
}
}
Services.obs.addObserver(observer, "chrome-document-global-created", false);
function E(id, context) {
var element = context.getElementById(id);
return element;
}
function hide(element) {
if (element) {
element.setAttribute("hidden", "true");
}
}
@@ -1,33 +0,0 @@
/* This file is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1139509 */
/* It bolds the Firefox version in the about dialog and unbolds the distribution information */
/* It can be removed once Firefox 38 ESR is out of support */
const EXPORTED_SYMBOLS = [];
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
var observer = {
observe: function observe(subject, topic, data) {
switch (topic) {
case "chrome-document-global-created":
var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
win.addEventListener("load", function onLoad(event) {
win.removeEventListener("load", onLoad, false);
var doc = event.target;
var url = doc.location.href.split("?")[0].split("#")[0];
switch (url) {
case "chrome://browser/content/aboutDialog.xul":
doc.querySelector("#version").style.fontWeight = "bold";
doc.querySelector("#distribution").style.fontWeight = "normal";
doc.querySelector("#distributionId").style.fontWeight = "normal";
break;
}
}, false);
break;
}
}
}
Services.obs.addObserver(observer, "chrome-document-global-created", false);
@@ -1,79 +0,0 @@
/* This file overrides about:home. It does the following:
* Remove the sync button if Sync is disabled
* Remove the Addons button if Sync is disabled
* Remove the snippets if snippets are disabled
*/
const EXPORTED_SYMBOLS = [];
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
var configs = null;
var observer = {
observe: function observe(subject, topic, data) {
switch (topic) {
case "content-document-global-created":
var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
win.addEventListener("load", function onLoad(event) {
win.removeEventListener("load", onLoad, false);
var doc = event.target;
var url = doc.location.href.split("?")[0].split("#")[0];
switch (url) {
case "about:home":
case "chrome://browser/content/abouthome/aboutHome.xhtml":
if (!configs) {
// TODO - Make this Async
configs = sendSyncMessage("cck2:get-configs")[0];
}
for (let id in configs) {
var config = configs[id];
if (config.disableSync) {
remove(E("sync", doc));
}
if (config.disableAddonsManager) {
remove(E("addons", doc));
}
if (config.disableWebApps) {
remove(E("apps", doc));
}
if (config.removeSnippets) {
var snippets = E("snippets", doc);
if (snippets) {
snippets.style.display = "none";
}
}
if (config.hiddenUI) {
for (var i=0; i < config.hiddenUI.length; i++) {
var uiElements = doc.querySelectorAll(config.hiddenUI[i]);
for (var j=0; j < uiElements.length; j++) {
var uiElement = uiElements[j];
uiElement.setAttribute("hidden", "true");
}
}
}
}
break;
}
}, false);
break;
}
}
}
Services.obs.addObserver(observer, "content-document-global-created", false);
addEventListener("unload", function() {
Services.obs.removeObserver(observer, "content-document-global-created", false);
})
function E(id, context) {
var element = context.getElementById(id);
return element;
}
function remove(element) {
if (element && element.parentNode)
element.parentNode.removeChild(element);
}
@@ -1,62 +0,0 @@
/* This file overrides about:support It does the following:
* Remove the reset Firefox button if disableResetFirefox is set
* Remove the safe mode Button if disableSafeMode is set
* Remove the box if both are set
*/
const EXPORTED_SYMBOLS = [];
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://cck2/CCK2.jsm");
var configs = null;
var observer = {
observe: function observe(subject, topic, data) {
switch (topic) {
case "chrome-document-global-created":
var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
win.addEventListener("load", function onLoad(event) {
win.removeEventListener("load", onLoad, false);
var doc = event.target;
var url = doc.location.href.split("?")[0].split("#")[0];
switch (url) {
case "about:support":
case "chrome://global/content/aboutSupport.xhtml":
if (!configs) {
configs = CCK2.getConfigs();
}
for (let id in configs) {
var config = configs[id];
if (config.disableResetFirefox) {
remove(E("reset-box", doc));
}
if (config.disableSafeMode) {
remove(E("safe-mode-box", doc));
}
if (config.disableResetFirefox &&
config.disableSafeMode) {
remove(E("action-box", doc));
}
}
break;
}
}, false);
break;
}
}
}
Services.obs.addObserver(observer, "chrome-document-global-created", false);
function E(id, context) {
var element = context.getElementById(id);
return element;
}
function remove(element) {
if (element && element.parentNode)
element.parentNode.removeChild(element);
}
@@ -1,373 +0,0 @@
/* This file modifies the main browser window. It does the following:
* Goes through the hiddenUI list and hides any UI
*
*/
const EXPORTED_SYMBOLS = [];
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource:///modules/CustomizableUI.jsm");
Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
Cu.import("resource://cck2/CCK2.jsm");
var configs = null;
var observer = {
observe: function observe(subject, topic, data) {
switch (topic) {
case "chrome-document-global-created":
var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
win.addEventListener("load", function onLoad(event) {
win.removeEventListener("load", onLoad, false);
var doc = event.target;
var url = doc.location.href.split("?")[0].split("#")[0];
switch (url) {
case "chrome://browser/content/browser.xul":
// Workaround https://bugzilla.mozilla.org/show_bug.cgi?id=1149617
var origSetReportPhishingMenu = win.gSafeBrowsing.setReportPhishingMenu;
win.gSafeBrowsing.setReportPhishingMenu = function() {
try {
origSetReportPhishingMenu();
} catch (e) {}
}
win.addEventListener("unload", function onUnload(event) {
win.removeEventListener("unload", onUnload, false);
var panelUIPopup = doc.getElementById("PanelUI-popup");
if (panelUIPopup) {
E("PanelUI-popup", doc).removeEventListener("popupshowing", onPanelShowing, false);
}
});
var panelUIPopup = doc.getElementById("PanelUI-popup");
if (panelUIPopup) {
E("PanelUI-popup", doc).addEventListener("popupshowing", onPanelShowing, false);
}
var appMenuPopup = doc.getElementById("appMenu-popup");
if (appMenuPopup) {
E("appMenu-popup", doc).addEventListener("popupshowing", onAppMenuShowing, false);
}
configs = CCK2.getConfigs();
for (let id in configs) {
config = configs[id];
if (config.disablePrivateBrowsing &&
PrivateBrowsingUtils.isWindowPrivate(win)) {
win.setTimeout(function() {
Services.prompt.alert(win, "Private Browsing", "Private Browsing has been disabled by your administrator");
win.close();
}, 0, false);
}
if (config.disablePrivateBrowsing) {
disablePrivateBrowsing(doc);
}
if (config.disableSync) {
disableSync(doc);
}
if (config.disableAddonsManager) {
disableAddonsManager(doc);
}
if (config.removeDeveloperTools) {
Services.tm.mainThread.dispatch(function() {
removeDeveloperTools(doc);
}, Ci.nsIThread.DISPATCH_NORMAL);
}
if (config.disableErrorConsole) {
disableErrorConsole(doc);
}
if (config.disableFirefoxHealthReport) {
var healthReportMenu = doc.getElementById("healthReport");
if (healthReportMenu) {
healthReportMenu.parentNode.removeChild(healthReportMenu);
}
}
if (config.removeSafeModeMenu) {
hide(E("helpSafeMode", doc));
}
if (config.titlemodifier) {
doc.getElementById("main-window").setAttribute("titlemodifier", config.titlemodifier);
}
if (config.removeSetDesktopBackground) {
// Because this is on a context menu, we can't use "hidden"
if (E("context-setDesktopBackground", doc)) {
E("context-setDesktopBackground", doc).setAttribute("style", "display: none;");
}
}
if (config.disableWebApps) {
CustomizableUI.destroyWidget("web-apps-button");
hide(E("menu_openApps", doc));
}
if (config.disableHello) {
CustomizableUI.destroyWidget("loop-button");
hide(E("menu_openLoop", doc));
}
if (config.disablePocket) {
CustomizableUI.destroyWidget("pocket-button");
}
if (config.disableSharePage) {
CustomizableUI.destroyWidget("social-share-button");
// Because these are on a context menu, we can't use "hidden"
if (E("context-sharelink", doc)) {
E("context-sharelink", doc).setAttribute("style", "display: none;");
}
if (E("context-shareselect", doc)) {
E("context-shareselect", doc).setAttribute("style", "display: none;");
}
if (E("context-shareimage", doc)) {
E("context-shareimage", doc).setAttribute("style", "display: none;");
}
if (E("context-sharevideo", doc)) {
E("context-sharevideo", doc).setAttribute("style", "display: none;");
}
if (E("context-sharepage", doc)) {
E("context-sharepage", doc).setAttribute("style", "display: none;");
}
}
if (config.disableSocialAPI) {
win.SocialActivationListener = {};
}
if (config.disableForget) {
CustomizableUI.destroyWidget("panic-button");
}
if (config.hiddenUI) {
hideUIElements(doc, config.hiddenUI);
}
if (config.helpMenu) {
// We need to run this function on a delay, because we won't know
// if the about menu is hidden for mac until after it is run.
Services.tm.mainThread.dispatch(function() {
var helpMenuPopup = doc.getElementById("menu_HelpPopup");
var menuitem = doc.createElement("menuitem");
menuitem.setAttribute("label", config.helpMenu.label);
if ("accesskey" in config.helpMenu) {
menuitem.setAttribute("accesskey", config.helpMenu.accesskey);
}
menuitem.setAttribute("oncommand", "openUILink('" + config.helpMenu.url + "');");
menuitem.setAttribute("onclick", "checkForMiddleClick(this, event);");
if (!E("aboutName", doc) || E("aboutName", doc).hidden) {
// Mac
helpMenuPopup.appendChild(menuitem);
} else {
helpMenuPopup.insertBefore(menuitem, E("aboutName", doc));
helpMenuPopup.insertBefore(doc.createElement("menuseparator"),
E("aboutName", doc));
}
}, Ci.nsIThread.DISPATCH_NORMAL);
}
if (config.firstrun || config.upgrade) {
if (config.displayBookmarksToolbar || (config.bookmarks && config.bookmarks.toolbar)) {
CustomizableUI.setToolbarVisibility("PersonalToolbar", "true");
}
if (config.displayMenuBar) {
CustomizableUI.setToolbarVisibility("toolbar-menubar", "true");
}
if (config.showSearchBar) {
CustomizableUI.addWidgetToArea("search-container", CustomizableUI.AREA_NAVBAR,
CustomizableUI.getPlacementOfWidget("urlbar-container").position + 1);
}
config.firstrun = false;
config.upgrade = false;
}
}
break;
case "chrome://browser/content/places/places.xul":
case "chrome://browser/content/bookmarks/bookmarksPanel.xul":
case "chrome://browser/content/history/history-panel.xul":
configs = CCK2.getConfigs();
for (let id in configs) {
var config = configs[id];
if (config.disablePrivateBrowsing) {
if (E("placesContext_open:newprivatewindow", doc)) {
E("placesContext_open:newprivatewindow", doc).setAttribute("style", "display: none;");
}
}
if (config.hiddenUI) {
hideUIElements(doc, config.hiddenUI);
}
}
break;
}
}, false);
break;
}
}
}
Services.obs.addObserver(observer, "chrome-document-global-created", false);
function disableSync(doc) {
var win = doc.defaultView;
if (win.gSyncUI) {
var mySyncUI = {
init: function() {
return;
},
initUI: function() {
return;
},
updateUI: function() {
hide(E("sync-setup-state", doc));
hide(E("sync-syncnow-state", doc));
hide(E("sync-setup", doc));
hide(E("sync-syncnowitem", doc));
}
}
win.gSyncUI = mySyncUI;
}
CustomizableUI.destroyWidget("sync-button");
CustomizableUI.removeWidgetFromArea("sync-button");
var toolbox = doc.getElementById("navigator-toolbox");
if (toolbox && toolbox.palette) {
let element = toolbox.palette.querySelector("#sync-button");
if (element) {
element.parentNode.removeChild(element);
}
}
hide(E("sync-setup-state", doc));
hide(E("sync-syncnow-state", doc));
hide(E("sync-setup", doc));
hide(E("sync-syncnowitem", doc));
}
function disablePrivateBrowsing(doc) {
disable(E("Tools:PrivateBrowsing", doc));
hide(E("menu_newPrivateWindow", doc));
// Because this is on a context menu, we can't use "hidden"
if (E("context-openlinkprivate", doc))
E("context-openlinkprivate", doc).setAttribute("style", "display: none;");
if (E("placesContext_open:newprivatewindow", doc))
E("placesContext_open:newprivatewindow", doc).setAttribute("style", "display: none;");
CustomizableUI.destroyWidget("privatebrowsing-button")
}
function disableAddonsManager(doc) {
hide(E("menu_openAddons", doc));
disable(E("Tools:Addons", doc)); // Ctrl+Shift+A
CustomizableUI.destroyWidget("add-ons-button")
}
function removeDeveloperTools(doc) {
var win = doc.defaultView;
// Need to delay this because devtools is created dynamically
win.setTimeout(function() {
CustomizableUI.destroyWidget("developer-button")
hide(E("webDeveloperMenu", doc));
var devtoolsKeyset = doc.getElementById("devtoolsKeyset");
if (devtoolsKeyset) {
for (var i = 0; i < devtoolsKeyset.childNodes.length; i++) {
devtoolsKeyset.childNodes[i].removeAttribute("oncommand");
devtoolsKeyset.childNodes[i].removeAttribute("command");
}
}
}, 0);
try {
doc.getElementById("Tools:ResponsiveUI").removeAttribute("oncommand");
} catch (e) {}
try {
doc.getElementById("Tools:Scratchpad").removeAttribute("oncommand");
} catch (e) {}
try {
doc.getElementById("Tools:BrowserConsole").removeAttribute("oncommand");
} catch (e) {}
try {
doc.getElementById("Tools:BrowserToolbox").removeAttribute("oncommand");
} catch (e) {}
try {
doc.getElementById("Tools:DevAppsMgr").removeAttribute("oncommand");
} catch (e) {}
try {
doc.getElementById("Tools:DevToolbar").removeAttribute("oncommand");
} catch (e) {}
try {
doc.getElementById("Tools:DevToolbox").removeAttribute("oncommand");
} catch (e) {}
try {
doc.getElementById("Tools:DevToolbarFocus").removeAttribute("oncommand");
} catch (e) {}
CustomizableUI.destroyWidget("developer-button")
}
function disableErrorConsole(doc) {
doc.getElementById("Tools:ErrorConsole").removeAttribute("oncommand");
}
function onPanelShowing(event) {
var configs = CCK2.getConfigs();
for (let id in configs) {
var config = configs[id];
if (config.disableSync) {
hide(E("PanelUI-fxa-status", event.target.ownerDocument));
hide(E("PanelUI-footer-fxa", event.target.ownerDocument)); // Firefox 42+
}
}
}
function onAppMenuShowing(event) {
var configs = CCK2.getConfigs();
for (let id in configs) {
var config = configs[id];
if (config.disableSync) {
hide(E("appMenu-fxa-container", event.target.ownerDocument));
}
if (config.removeDeveloperTools) {
hide(E("appMenu-developer-button", event.target.ownerDocument));
}
}
}
function E(id, context) {
var element = context.getElementById(id);
return element;
}
function hide(element) {
if (element) {
element.setAttribute("hidden", "true");
}
}
function disable(element) {
if (element) {
element.disabled = true;
element.setAttribute("disabled", "true");
}
}
function hideUIElements(doc, hiddenUI) {
for (var i=0; i < hiddenUI.length; i++) {
var uiElements = doc.querySelectorAll(hiddenUI[i]);
// Don't use .hidden since it doesn't work sometimes
var style = doc.getElementById("cck2-hidden-style");
if (!style) {
style = doc.createElementNS("http://www.w3.org/1999/xhtml", "style");
style.setAttribute("id", "cck2-hidden-style");
style.setAttribute("type", "text/css");
doc.documentElement.appendChild(style);
}
style.textContent = style.textContent + hiddenUI[i] + "{display: none !important;}";
if (!uiElements || uiElements.length == 0) {
continue;
}
for (var j=0; j < uiElements.length; j++) {
var uiElement = uiElements[j];
if (uiElement.nodeName == "menuitem") {
uiElement.removeAttribute("key");
uiElement.removeAttribute("oncommand");
if (uiElement.hasAttribute("command")) {
var commandId = uiElement.getAttribute("command");
uiElement.removeAttribute("command");
var command = doc.getElementById(commandId);
command.removeAttribute("oncommand");
var keys = doc.querySelectorAll("key[command='" + commandId + "']")
for (var k=0; k < keys.length; k++) {
keys[k].removeAttribute("command");
}
}
}
// Horrible hack to work around the crappy Australis help menu
// Items on the menu always show up in the Australis menu, so we have to remove them.
if (uiElements[j].parentNode.id == "menu_HelpPopup") {
uiElements[j].parentNode.removeChild(uiElements[j]);
}
}
}
}
@@ -1,47 +0,0 @@
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
var EXPORTED_SYMBOLS = [];
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
let CCK2FileBlock = {
chromeBlacklist: ["browser", "mozapps", "marionette", "specialpowers",
"branding", "alerts"],
shouldLoad: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aExtra) {
// Prevent the loading of chrome URLs into the main browser window
if (aContentLocation.scheme == "chrome") {
if (aRequestOrigin &&
(aRequestOrigin.spec == "chrome://browser/content/browser.xul" ||
aRequestOrigin.scheme == "moz-nullprincipal")) {
for (var i=0; i < this.chromeBlacklist.length; i++) {
if (aContentLocation.host == this.chromeBlacklist[i]) {
if (aContentLocation.spec.includes(".xul")) {
return Ci.nsIContentPolicy.REJECT_REQUEST;
}
}
}
}
}
return Ci.nsIContentPolicy.ACCEPT;
},
shouldProcess: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aExtra) {
return Ci.nsIContentPolicy.ACCEPT;
},
classDescription: "CCK2 FileBlock Service",
contractID: "@kaply.com/cck2-fileblock-service;1",
classID: Components.ID('{26e7afc9-e22d-4d12-bb57-c184fe24b828}'),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPolicy]),
createInstance: function(outer, iid) {
return this.QueryInterface(iid);
},
};
var registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
registrar.registerFactory(CCK2FileBlock.classID,
CCK2FileBlock.classDescription,
CCK2FileBlock.contractID,
CCK2FileBlock);
var cm = Cc["@mozilla.org/categorymanager;1"].getService(Ci.nsICategoryManager);
cm.addCategoryEntry("content-policy", CCK2FileBlock.contractID,
CCK2FileBlock.contractID, false, true);
@@ -1,51 +0,0 @@
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
var disableSearchEngineInstall = false;
var documentObserver = {
observe: function observe(subject, topic, data) {
if (subject instanceof Ci.nsIDOMWindow && topic == 'content-document-global-created') {
var doc = subject.document;
doc.addEventListener("DOMContentLoaded", function onLoad(event) {
event.target.removeEventListener("DOMContentLoaded", onLoad, false);
if (disableSearchEngineInstall) {
subject.wrappedJSObject.external.AddSearchProvider = function() {};
}
if (!doc.documentURI.startsWith("about:")) {
return;
}
for (let id in configs) {
var config = configs[id];
if (config.hiddenUI) {
for (var i=0; i < config.hiddenUI.length; i++) {
// Don't use .hidden since it doesn't work sometimes
var style = doc.getElementById("cck2-hidden-style");
if (!style) {
style = doc.createElementNS("http://www.w3.org/1999/xhtml", "style");
style.setAttribute("id", "cck2-hidden-style");
style.setAttribute("type", "text/css");
doc.documentElement.appendChild(style);
}
style.textContent = style.textContent + config.hiddenUI[i] + "{display: none !important;}";
}
}
}
}, false);
}
}
}
var configs = sendSyncMessage("cck2:get-configs")[0];
for (var id in configs) {
var config = configs[id];
if (config.disableSearchEngineInstall) {
disableSearchEngineInstall = true;
break;
}
}
Services.obs.addObserver(documentObserver, "content-document-global-created", false);
addEventListener("unload", function() {
Services.obs.removeObserver(documentObserver, "content-document-global-created", false);
})
@@ -1,123 +0,0 @@
/* This file modifies the preferences dialogs. It does the following:
* Removes private browsing from the pref UI if it is disabled
* Removes Sync from the pref UI if it is diabled
* Disables the crash reporter button if crash reporter is disabled
* Removed the master password UI if it is disabled
* Goes through the hiddenUI list and hides any UI
*
*/
const EXPORTED_SYMBOLS = [];
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://cck2/CCK2.jsm");
var configs = null;
var observer = {
observe: function observe(subject, topic, data) {
switch (topic) {
case "chrome-document-global-created":
var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
win.addEventListener("load", function onLoad(event) {
win.removeEventListener("load", onLoad, false);
var doc = event.target;
var url = doc.location.href.split("?")[0].split("#")[0];
switch (url) {
case "chrome://browser/content/preferences/preferences.xul":
configs = CCK2.getConfigs();
win.addEventListener("paneload", function(event) {
updatePrefUI(event.target.ownerDocument);
}, false);
updatePrefUI(doc);
for (let id in configs) {
var config = configs[id];
if (!config.disableSync) {
continue;
}
var prefWindow = E("BrowserPreferences", doc);
var paneSyncRadio = doc.getAnonymousElementByAttribute(prefWindow, "pane", "paneSync");
hide(paneSyncRadio);
var paneDeck = doc.getAnonymousElementByAttribute(prefWindow, "anonid", "paneDeck");
var paneSync = E("paneSync", doc);
paneSync.removeAttribute("helpTopic");
var weavePrefsDeck = E("weavePrefsDeck", doc);
if (weavePrefsDeck)
weavePrefsDeck.parentNode.removeChild(weavePrefsDeck);
if (prefWindow.currentPane == E("paneSync", doc))
prefWindow.showPane(E("paneMain", doc));
}
break;
case "about:preferences":
case "chrome://browser/content/preferences/in-content/preferences.xul":
configs = CCK2.getConfigs();
for (let id in configs) {
var config = configs[id];
if (config.disableSync) {
hide(E("category-sync", doc));
}
}
updatePrefUI(doc);
break;
}
}, false);
break;
}
}
}
Services.obs.addObserver(observer, "chrome-document-global-created", false);
// The IDs are the same, so I can reuse this for regular and in-content prefs
function updatePrefUI(doc) {
for (var id in configs) {
var config = configs[id];
if (config.disablePrivateBrowsing) {
hide(E("privateBrowsingAutoStart", doc));
var privateBrowsingMenu = doc.querySelector("menuitem[value='dontremember']");
hide(privateBrowsingMenu, doc);
}
if (config.disableCrashReporter) {
disable(E("submitCrashesBox", doc));
}
if (config.disableSync) {
hide(E("noFxaAccount", doc));
hide(E("hasFxaAccount", doc));
}
if (config.noMasterPassword == true) {
hide(E("useMasterPassword", doc));
hide(E("changeMasterPassword", doc));
}
if (config.hiddenUI) {
for (var i=0; i < config.hiddenUI.length; i++) {
// Don't use .hidden since it doesn't work sometimes
var style = doc.getElementById("cck2-hidden-style");
if (!style) {
style = doc.createElementNS("http://www.w3.org/1999/xhtml", "style");
style.setAttribute("id", "cck2-hidden-style");
style.setAttribute("type", "text/css");
doc.documentElement.appendChild(style);
}
style.textContent = style.textContent + config.hiddenUI[i] + "{display: none !important;}";
}
}
}
}
function E(id, context) {
var element = context.getElementById(id);
return element;
}
function hide(element) {
if (element) {
element.setAttribute("hidden", "true");
}
}
function disable(element) {
if (element) {
element.disabled = true;
}
}
@@ -1,123 +0,0 @@
/**
* Copied from https://github.com/jvillalobos/CTP-Manager/blob/master/extension/modules/permissions.js
**/
/**
* Copyright 2013 Jorge Villalobos
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
var EXPORTED_SYMBOLS = ["CTP"];
const Cc = Components.classes;
const Ci = Components.interfaces;
Components.utils.import("resource://gre/modules/Services.jsm");
var CTP = {
/**
* Cleans up the plugin name to a more readable form.
* Taken from /browser/base/content/pageinfo/permissions.js (Firefox 20)
* @param aPluginName the name to clean up.
* @return cleaned up plugin name.
*/
makeNicePluginName : function(aPluginName) {
let newName =
aPluginName.replace(/[\s\d\.\-\_\(\)]+$/, "").
replace(/\bplug-?in\b/i, "").trim();
return newName;
},
/**
* Gets the plugin permission string from the tag object. In Firefox 20, this
* is the plugin filename. In 21 an above, the file extension is removed and
* Flash and Java are special-cased.
* @param aTag the tag object with the plugin information.
* @return permission string that corresponds to the plugin in the tag.
*/
getPluginPermissionFromTag : function(aTag) {
let permission = null;
let majorVersion = Services.appinfo.platformVersion.split(".")[0];
if (21 <= majorVersion) {
let mimeTypes = aTag.getMimeTypes();
if (CTP.isFlashPlugin(mimeTypes)) {
permission = "flash";
} else if (CTP.isJavaPlugin(mimeTypes)) {
permission = "java";
} else {
let lastPeriod = aTag.filename.lastIndexOf(".");
permission =
((0 < lastPeriod) ? aTag.filename.substring(0, lastPeriod) :
aTag.filename);
// Remove digits at the end
permission = permission.replace(/[0-9]+$/, "");
permission = permission.toLowerCase();
}
} else {
permission = aTag.filename;
}
return permission;
},
/**
* Checks if the tag object corresponds to the Java plugin.
* @param aMimeTypes the list of MIME types for the plugin.
* @return true if the tag corresponds to the Java plugin.
*/
isJavaPlugin : function(aMimeTypes) {
let isJava = false;
let mimeType;
for (let i = 0; i < aMimeTypes.length; i++) {
mimeType =
((null != aMimeTypes[i].type) ? aMimeTypes[i].type : aMimeTypes[i]);
if ((0 == mimeType.indexOf("application/x-java-vm")) ||
(0 == mimeType.indexOf("application/x-java-applet")) ||
(0 == mimeType.indexOf("application/x-java-bean"))) {
isJava = true;
break;
}
}
return isJava;
},
/**
* Checks if the tag object corresponds to the Flash plugin.
* @param aMimeTypes the list of MIME types for the plugin.
* @return true if the tag corresponds to the Flash plugin.
*/
isFlashPlugin : function(aMimeTypes) {
let isFlash = false;
let mimeType;
for (let i = 0; i < aMimeTypes.length; i++) {
mimeType =
((null != aMimeTypes[i].type) ? aMimeTypes[i].type : aMimeTypes[i]);
if (0 == mimeType.indexOf("application/x-shockwave-flash")) {
isFlash = true;
break;
}
}
return isFlash;
}
};
@@ -1,629 +0,0 @@
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Preferences.
*
* The Initial Developer of the Original Code is Mozilla.
* Portions created by the Initial Developer are Copyright (C) 2008
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Myk Melez <myk@mozilla.org>
* Daniel Aquino <mr.danielaquino@gmail.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
let EXPORTED_SYMBOLS = ["Preferences"];
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cr = Components.results;
const Cu = Components.utils;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
// The minimum and maximum integers that can be set as preferences.
// The range of valid values is narrower than the range of valid JS values
// because the native preferences code treats integers as NSPR PRInt32s,
// which are 32-bit signed integers on all platforms.
const MAX_INT = Math.pow(2, 31) - 1;
const MIN_INT = -MAX_INT;
function Preferences(args) {
if (isObject(args)) {
if (args.branch)
this._prefBranch = args.branch;
}
else if (args)
this._prefBranch = args;
this.isDefaultBranch = false;
}
Preferences.prototype = {
/**
* Get the value of a pref, if any; otherwise return the default value.
*
* @param prefName {String|Array}
* the pref to get, or an array of prefs to get
*
* @param defaultValue
* the default value, if any, for prefs that don't have one
*
* @returns the value of the pref, if any; otherwise the default value
*/
get: function(prefName, defaultValue) {
if (isArray(prefName))
return prefName.map(v => this.get(v, defaultValue));
return this._get(prefName, defaultValue);
},
// In all cases below, the preference might exist as a user pref, but not
// have a default value. In those cases, get* throws. Return the default value.
_get: function(prefName, defaultValue) {
switch (this._prefSvc.getPrefType(prefName)) {
case Ci.nsIPrefBranch.PREF_STRING:
try {
return this._prefSvc.getComplexValue(prefName, Ci.nsISupportsString).data;
} catch (ex) {
if (this.isDefaultBranch)
return defaultValue;
else
return this._prefSvc.getCharPref(prefName);
}
case Ci.nsIPrefBranch.PREF_INT:
try {
return this._prefSvc.getIntPref(prefName);
} catch (ex) {
return defaultValue;
}
case Ci.nsIPrefBranch.PREF_BOOL:
try {
return this._prefSvc.getBoolPref(prefName);
} catch (ex) {
return defaultValue;
}
case Ci.nsIPrefBranch.PREF_INVALID:
return defaultValue;
default:
// This should never happen.
throw "Error getting pref " + prefName + "; its value's type is " +
this._prefSvc.getPrefType(prefName) + ", which I don't know " +
"how to handle.";
}
},
/**
* Set a preference to a value.
*
* You can set multiple prefs by passing an object as the only parameter.
* In that case, this method will treat the properties of the object
* as preferences to set, where each property name is the name of a pref
* and its corresponding property value is the value of the pref.
*
* @param prefName {String|Object}
* the name of the pref to set; or an object containing a set
* of prefs to set
*
* @param prefValue {String|Number|Boolean}
* the value to which to set the pref
*
* Note: Preferences cannot store non-integer numbers or numbers outside
* the signed 32-bit range -(2^31-1) to 2^31-1, If you have such a number,
* store it as a string by calling toString() on the number before passing
* it to this method, i.e.:
* Preferences.set("pi", 3.14159.toString())
* Preferences.set("big", Math.pow(2, 31).toString()).
*/
set: function(prefName, prefValue) {
if (isObject(prefName)) {
for (let [name, value] in Iterator(prefName))
this.set(name, value);
return;
}
this._set(prefName, prefValue);
},
_set: function(prefName, prefValue) {
let prefType;
if (typeof prefValue != "undefined" && prefValue != null)
prefType = prefValue.constructor.name;
var existingPrefType = this._prefSvc.getPrefType(prefName);
if (existingPrefType != Ci.nsIPrefBranch.PREF_INVALID)
{
// convert
if (existingPrefType == Ci.nsIPrefBranch.PREF_INT && prefType == "String")
{
prefValue = parseInt(prefValue);
if (isNaN(prefValue))
throw "Incompatible pref value type - " + prefName;
prefType = "Number";
}
else if (existingPrefType == Ci.nsIPrefBranch.PREF_BOOL && prefType == "String")
{
if (prefValue == "true")
prefValue = true;
else if (prefValue == "false")
prefValue = false;
else
throw "Incompatible pref value type - " + prefName;
prefType = "Boolean";
}
else if (existingPrefType == Ci.nsIPrefBranch.PREF_BOOL && prefType == "Number")
{
prefValue = prefValue != 0;
prefType = "Boolean";
}
}
switch (prefType) {
case "String":
{
try {
this._prefSvc.setStringPref(prefName, prefValue);
} catch (e) {
try {
let string = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString);
string.data = prefValue;
this._prefSvc.setComplexValue(prefName, Ci.nsISupportsString, string);
} catch (e2) {
Components.utils.reportError(e2);
}
}
}
break;
case "Number":
// We throw if the number is outside the range, since the result
// will never be what the consumer wanted to store, but we only warn
// if the number is non-integer, since the consumer might not mind
// the loss of precision.
if (prefValue > MAX_INT || prefValue < MIN_INT)
throw("you cannot set the " + prefName + " pref to the number " +
prefValue + ", as number pref values must be in the signed " +
"32-bit integer range -(2^31-1) to 2^31-1. To store numbers " +
"outside that range, store them as strings.");
try {
this._prefSvc.setIntPref(prefName, prefValue);
} catch (e) {
throw new Error(e.toString() + " - " + prefName);
}
if (prefValue % 1 != 0)
Cu.reportError("Warning: setting the " + prefName + " pref to the " +
"non-integer number " + prefValue + " converted it " +
"to the integer number " + this.get(prefName) +
"; to retain fractional precision, store non-integer " +
"numbers as strings.");
break;
case "Boolean":
this._prefSvc.setBoolPref(prefName, prefValue);
break;
default:
throw "can't set pref " + prefName + " to value '" + prefValue +
"'; it isn't a String, Number, or Boolean";
}
},
/**
* Whether or not the given pref has a value. This is different from isSet
* because it returns true whether the value of the pref is a default value
* or a user-set value, while isSet only returns true if the value
* is a user-set value.
*
* @param prefName {String|Array}
* the pref to check, or an array of prefs to check
*
* @returns {Boolean|Array}
* whether or not the pref has a value; or, if the caller provided
* an array of pref names, an array of booleans indicating whether
* or not the prefs have values
*/
has: function(prefName) {
if (isArray(prefName))
return prefName.map(this.has, this);
return this._has(prefName);
},
_has: function(prefName) {
return (this._prefSvc.getPrefType(prefName) != Ci.nsIPrefBranch.PREF_INVALID);
},
/**
* Whether or not the given pref has a user-set value. This is different
* from |has| because it returns true only if the value of the pref is a user-
* set value, while |has| returns true if the value of the pref is a default
* value or a user-set value.
*
* @param prefName {String|Array}
* the pref to check, or an array of prefs to check
*
* @returns {Boolean|Array}
* whether or not the pref has a user-set value; or, if the caller
* provided an array of pref names, an array of booleans indicating
* whether or not the prefs have user-set values
*/
isSet: function(prefName) {
if (isArray(prefName))
return prefName.map(this.isSet, this);
return (this.has(prefName) && this._prefSvc.prefHasUserValue(prefName));
},
/**
* Whether or not the given pref has a user-set value. Use isSet instead,
* which is equivalent.
* @deprecated
*/
modified: function(prefName) { return this.isSet(prefName) },
reset: function(prefName) {
if (isArray(prefName)) {
prefName.map(v => this.reset(v));
return;
}
this._reset(prefName);
},
_reset: function(prefName) {
try {
this._prefSvc.clearUserPref(prefName);
}
catch(ex) {
// The pref service throws NS_ERROR_UNEXPECTED when the caller tries
// to reset a pref that doesn't exist or is already set to its default
// value. This interface fails silently in those cases, so callers
// can unconditionally reset a pref without having to check if it needs
// resetting first or trap exceptions after the fact. It passes through
// other exceptions, however, so callers know about them, since we don't
// know what other exceptions might be thrown and what they might mean.
if (ex.result != Cr.NS_ERROR_UNEXPECTED)
throw ex;
}
},
/**
* If you need to know the default values, without resetting the actual
* user prefs, you can use this.
* @returns {Preferences} a new Preferences object, which accesses
* the defaults rather than the user prefs.
* *Only* call get() on this.
* If you call set(), you will modify the defaults, so don't do that!
*/
get defaults() {
// nsIPrefService
let defaultBranch = Services.prefs.
getDefaultBranch(this._prefBranch).
QueryInterface(Ci.nsIPrefBranch);
let prefs = new Preferences(this._prefBranch);
// override. nasty, but this is internal, so OK.
Object.defineProperty(prefs, "_prefSvc", {
get: function() {
return defaultBranch;
}
});
prefs.isDefaultBranch = true;
return prefs;
},
/**
* Lock a pref so it can't be changed.
*
* @param prefName {String|Array}
* the pref to lock, or an array of prefs to lock
* @param prefValue {String} (optional)
* default value of pref to lock only works if prefName isn't an array
*/
lock: function(prefName, prefValue) {
if (isArray(prefName))
prefName.map(this.lock, this);
else if (typeof prefValue != "undefined")
this.defaults.set(prefName, prefValue);
this._prefSvc.lockPref(prefName);
},
/**
* Unlock a pref so it can be changed.
*
* @param prefName {String|Array}
* the pref to lock, or an array of prefs to lock
*/
unlock: function(prefName) {
if (isArray(prefName))
prefName.map(this.unlock, this);
this._prefSvc.unlockPref(prefName);
},
/**
* Whether or not the given pref is locked against changes and
* if it is set to the passedi n value
*
* @param prefName {String|Array}
* the pref to check, or an array of prefs to check
* @param prefValue {String|Number|Boolean}}
* the pref value to compare against
*
* @returns {Boolean|Array}
* whether or not the pref is locked; or, if the caller
* provided an array of pref names, an array of booleans indicating
* whether or not the prefs are locked
* If a pref value was specified returns whether or not the pref
* was locked and equal to the passed in value.
*/
locked: function(prefName, prefValue) {
if (isArray(prefName))
return prefName.map(this.locked, this);
if (prefValue)
return this._prefSvc.prefIsLocked(prefName) && (this.get(prefName) == prefValue);
else
return this._prefSvc.prefIsLocked(prefName);
},
/**
* Start observing a pref.
*
* The callback can be a function or any object that implements nsIObserver.
* When the callback is a function and thisObject is provided, it gets called
* as a method of thisObject.
*
* @param prefName {String}
* the name of the pref to observe
*
* @param callback {Function|Object}
* the code to notify when the pref changes;
*
* @param thisObject {Object} [optional]
* the object to use as |this| when calling a Function callback;
*
* @returns the wrapped observer
*/
observe: function(prefName, callback, thisObject) {
let fullPrefName = this._prefBranch + (prefName || "");
let observer = new PrefObserver(fullPrefName, callback, thisObject);
Preferences._prefSvc.addObserver(fullPrefName, observer, true);
observers.push(observer);
return observer;
},
/**
* Stop observing a pref.
*
* You must call this method with the same prefName, callback, and thisObject
* with which you originally registered the observer. However, you don't have
* to call this method on the same exact instance of Preferences; you can call
* it on any instance. For example, the following code first starts and then
* stops observing the "foo.bar.baz" preference:
*
* let observer = function() {...};
* Preferences.observe("foo.bar.baz", observer);
* new Preferences("foo.bar.").ignore("baz", observer);
*
* @param prefName {String}
* the name of the pref being observed
*
* @param callback {Function|Object}
* the code being notified when the pref changes
*
* @param thisObject {Object} [optional]
* the object being used as |this| when calling a Function callback
*/
ignore: function(prefName, callback, thisObject) {
let fullPrefName = this._prefBranch + (prefName || "");
// This seems fairly inefficient, but I'm not sure how much better we can
// make it. We could index by fullBranch, but we can't index by callback
// or thisObject, as far as I know, since the keys to JavaScript hashes
// (a.k.a. objects) can apparently only be primitive values.
let [observer] = observers.filter(v => v.prefName == fullPrefName &&
v.callback == callback &&
v.thisObject == thisObject);
if (observer) {
Preferences._prefSvc.removeObserver(fullPrefName, observer);
observers.splice(observers.indexOf(observer), 1);
}
},
/**
* Same as observe(), but automatically unregisters itself when
* the window closes, saving you from writing an unload handler and
* calling ignore().
* @param win {nsIDOMWindow} your |window|
*/
observeAuto: function(win, prefName, callback, thisObject) {
if (!win instanceof Ci.nsIDOMWindow)
throw "Need your |window| as first parameter";
this.observe(prefName, callback, thisObject);
var self = this;
win.addEventListener("unload", function()
{
self.ignore(prefName, callback, thisObject);
}, false);
win = null; // don't let closure hold on to window unnecessarily
},
resetBranch: function(prefBranch) {
try {
this._prefSvc.resetBranch(prefBranch);
}
catch(ex) {
// The current implementation of nsIPrefBranch in Mozilla
// doesn't implement resetBranch, so we do it ourselves.
if (ex.result == Cr.NS_ERROR_NOT_IMPLEMENTED)
this.reset(this._prefSvc.getChildList(prefBranch, []));
else
throw ex;
}
},
/**
* Returns all child prefs of this pref branch.
* This equals nsIPrefBranch.getChildList().
* This allows you to do e.g.
* var myPrefs = new Preferences("extensions.cooler.");
* var contents = myPrefs.branch("contents.");
* for each (let prefname in contents.childPrefNames())
* dump("have " + contents.get(prefname) + " " + prefname + "\n");
*
* @returns {Array of String} The names of the children,
* without the base pref branch, but with subbranch.
*/
childPrefNames : function() {
return this._prefSvc.getChildList("", []);
},
/**
* Returns an nsIPrefBranch for the pref branch that this object stands for.
* You can use this to use functions that are not supported here.
* @returns {nsIPrefBranch}
*/
get mozillaPrefBranch() {
return this._prefSvc;
},
/**
* Returns the base pref name that this object stands for.
* E.g. "extensions.yourcooler.";
* @returns {String}
*/
get prefBranchName() {
return this._prefBranch;
},
/**
* Returns an Preferences object for an sub pref branch
* underneath the current pref branch.
* @param subbranch {String} Will be appended to the
* current pref branch. Don't forget the trailing dot,
* where necessary.
* E.g. "contents."
* @returns {Preferences}
*/
branch : function(subbranch) {
return new Preferences(this._prefBranch + subbranch);
},
/**
* The branch of the preferences tree to which this instance provides access.
* @private
*/
_prefBranch: "",
/**
* Preferences Service
* @private
*/
get _prefSvc() {
// nsIPrefService
let prefSvc = Services.prefs.
getBranch(this._prefBranch).
QueryInterface(Ci.nsIPrefBranch);
Object.defineProperty(this, "_prefSvc", {
get: function() {
return prefSvc;
}
});
return this._prefSvc;
}
};
// Give the constructor the same prototype as its instances, so users can access
// preferences directly via the constructor without having to create an instance
// first.
Preferences.__proto__ = Preferences.prototype;
/**
* A cache of pref observers.
*
* We use this to remove observers when a caller calls Preferences::ignore.
*
* All Preferences instances share this object, because we want callers to be
* able to remove an observer using a different Preferences object than the one
* with which they added it. That means we have to identify the observers
* in this object by their complete pref name, not just their name relative to
* the root branch of the Preferences object with which they were created.
*/
let observers = [];
function PrefObserver(prefName, callback, thisObject) {
this.prefName = prefName;
this.callback = callback;
this.thisObject = thisObject;
}
PrefObserver.prototype = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
observe: function(subject, topic, data) {
// The pref service only observes whole branches, but we only observe
// individual preferences, so we check here that the pref that changed
// is the exact one we're observing (and not some sub-pref on the branch).
if (data != this.prefName)
return;
if (typeof this.callback == "function") {
let prefValue = Preferences.get(this.prefName);
if (this.thisObject)
this.callback.call(this.thisObject, prefValue);
else
this.callback(prefValue);
}
else // typeof this.callback == "object" (nsIObserver)
this.callback.observe(subject, topic, data);
}
};
function isArray(val) {
// We can't check for |val.constructor == Array| here, since the value
// might be from a different context whose Array constructor is not the same
// as ours, so instead we match based on the name of the constructor.
return (typeof val != "undefined" && val != null && typeof val == "object" &&
val.constructor.name == "Array");
}
function isObject(val) {
// We can't check for |val.constructor == Object| here, since the value
// might be from a different context whose Object constructor is not the same
// as ours, so instead we match based on the name of the constructor.
return (typeof val != "undefined" && val != null && typeof val == "object" &&
val.constructor.name == "Object");
}
@@ -1,43 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* JS module implementation of nsIDOMJSWindow.setTimeout and clearTimeout.
*/
this.EXPORTED_SYMBOLS = ["setTimeout", "clearTimeout"];
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
// This gives us >=2^30 unique timer IDs, enough for 1 per ms for 12.4 days.
let gNextTimeoutId = 1; // setTimeout must return a positive integer
let gTimeoutTable = new Map(); // int -> nsITimer
this.setTimeout = function setTimeout(aCallback, aMilliseconds) {
let id = gNextTimeoutId++;
let args = Array.slice(arguments, 2);
let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
timer.initWithCallback(function setTimeout_timer() {
gTimeoutTable.delete(id);
aCallback.apply(null, args);
}, aMilliseconds, timer.TYPE_ONE_SHOT);
gTimeoutTable.set(id, timer);
return id;
}
this.clearTimeout = function clearTimeout(aId) {
if (gTimeoutTable.has(aId)) {
gTimeoutTable.get(aId).cancel();
gTimeoutTable.delete(aId);
}
}
@@ -1,10 +0,0 @@
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
var EXPORTED_SYMBOLS = ["errorCritical"];
Components.utils.import("resource://gre/modules/Services.jsm");
function errorCritical(e)
{
Services.prompt.alert(null, "", e);
}
@@ -0,0 +1,96 @@
{
"policies": {
"AppUpdateURL": "http://127.0.0.1/",
"CaptivePortal": false,
"Certificates": {
"ImportEnterpriseRoots": false
},
"DNSOverHTTPS": {
"Enabled": false,
"Locked": true
},
"DisableAppUpdate": true,
"DisableFeedbackCommands": true,
"DisableFirefoxAccounts": true,
"DisableFirefoxScreenshots": true,
"DisableFirefoxStudies": true,
"DisablePasswordReveal": true,
"DisablePocket": true,
"DisableProfileImport": true,
"DisableProfileRefresh": true,
"DisableSafeMode": true,
"DisableSetDesktopBackground": true,
"DisableSystemAddonUpdate": true,
"DisableTelemetry": true,
"DontCheckDefaultBrowser": true,
"ExtensionUpdate": false,
"Extensions": {
"Locked": [
"73a6fe31-595d-460b-a920-fcc0f8843232"
]
},
"FirefoxHome": {
"Highlights": false,
"Pocket": false,
"Search": true,
"Snippets": false,
"TopSites": true
},
"FlashPlugin": {
"Default": false
},
"NetworkPrediction": false,
"NoDefaultBookmarks": true,
"OfferToSaveLoginsDefault": false,
"OverrideFirstRunPage": "http://i2pd.i2p/",
"OverridePostUpdatePage": "",
"Permissions": {
"Camera": {
"BlockNewRequests": true
},
"Location": {
"BlockNewRequests": true
},
"Microphone": {
"BlockNewRequests": true
}
},
"PopupBlocking": {
"Default": true
},
"Preferences": {
"browser.cache.disk.enable": true,
"browser.fixup.dns_first_for_single_words": false,
"browser.search.update": false,
"browser.tabs.warnOnClose": false,
"browser.urlbar.suggest.bookmark": true,
"browser.urlbar.suggest.history": true,
"browser.urlbar.suggest.openpage": true,
"datareporting.policy.dataSubmissionPolicyBypassNotification": true,
"dom.disable_window_flip": true,
"dom.disable_window_move_resize": true,
"dom.event.contextmenu.enabled": false,
"network.IDN_show_punycode": false,
"network.dns.disableIPv6": true,
"places.history.enabled": true,
"privacy.file_unique_origin": true
},
"PromptForDownloadLocation": true,
"Proxy": {
"AutoLogin": true,
"FTPProxy": "127.0.0.1:4444",
"HTTPProxy": "127.0.0.1:4444",
"Mode": "manual",
"SOCKSVersion": 5,
"SSLProxy": "127.0.0.1:4444",
"UseHTTPProxyForAllProtocols": false,
"UseProxyForDNS": true
},
"SearchBar": "unified",
"SearchSuggestEnabled": false,
"SupportMenu": {
"Title": "Ilita IRC",
"URL": "http://irc.r4sas.i2p/?nick=WebClient...&channels=dev%2Cen%2Cru&prompt=1&uio=OT10cnVlde"
}
}
}
+87 -127
View File
@@ -1,43 +1,59 @@
// I2Pd Browser preferences
/*
* Copyright (c) 2013-2019, The PurpleI2P Project
* Copyright (c) 2013-2022, The PurpleI2P Project
* This file is part of Purple i2pd project and licensed under BSD3
* See full license text in LICENSE file at top of project tree
*/
/* Do not edit this file.
*
* If you make changes to this file while the browser is running,
* the changes will be overwritten when the browser exits.
*
* To make a manual change to preferences, you can visit the URL about:config
* For more information, see http://www.mozilla.org/unix/customizing.html#prefs
*/
lockPref("accessibility.force_disabled", 1);
defaultPref("app.normandy.first_run", false);
lockPref("app.normandy.api_url", "");
lockPref("app.normandy.enabled", false);
lockPref("app.normandy.optoutstudies.enabled", false);
lockPref("app.shield.optoutstudies.enabled", false);
lockPref("app.update.auto", false);
lockPref("app.update.BITS.enabled", false);
lockPref("app.update.channel", "i2pdbrowser");
lockPref("app.update.disable_button.showUpdateHistory", true);
lockPref("app.update.enabled", false);
lockPref("app.update.interval", 0);
lockPref("app.update.service.enabled", false);
lockPref("app.update.url", "");
defaultPref("beacon.enabled", false);
pref("breakpad.reportURL", "");
pref("browser.aboutHomeSnippets.updateUrl", "");
defaultPref("browser.aboutHomeSnippets.updateUrl", "");
lockPref("browser.aboutwelcome.enabled", false);
defaultPref("browser.cache.disk.capacity", 131072);
defaultPref("browser.cache.offline.enable", false);
defaultPref("browser.casting.enabled", false);
lockPref("browser.contentblocking.database.enabled", false);
lockPref("browser.contentblocking.report.lockwise.enabled", false);
lockPref("browser.contentblocking.report.monitor.enabled", false);
lockPref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
lockPref("browser.discovery.enabled", false);
pref("browser.download.manager.retention", 0);
defaultPref("browser.download.useDownloadDir", false);
defaultPref("browser.feeds.showFirstRunUI", false);
defaultPref("browser.fixup.alternate.enabled", false);
defaultPref("browser.fixup.fallback-to-https", false);
defaultPref("browser.formfill.enable", false);
defaultPref("browser.formfill.expire_days", 0);
lockPref("browser.messaging-system.whatsNewPanel.enabled", false);
lockPref("browser.newtabpage.activity-stream.feeds.asrouterfeed", false);
lockPref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
lockPref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
lockPref("browser.newtabpage.activity-stream.default.sites", "http://i2pd.i2p/,http://333.i2p/,http://inr.i2p/,http://102chan.i2p/,http://flibusta.i2p/,http://fsoc.i2p/,http://lifebox.i2p/,http://onelon.i2p/,http://wiki.ilita.i2p/");
lockPref("browser.newtabpage.activity-stream.discoverystream.enabled", false);
lockPref("browser.newtabpage.activity-stream.feeds.discoverystreamfeed", false);
lockPref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
lockPref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
lockPref("browser.newtabpage.activity-stream.feeds.snippets", false);
lockPref("browser.newtabpage.activity-stream.feeds.telemetry", false);
defaultPref("browser.newtabpage.activity-stream.showSearch", true);
lockPref("browser.newtabpage.activity-stream.section.highlights.includePocket", false);
lockPref("browser.newtabpage.activity-stream.showSponsored", false);
lockPref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
lockPref("browser.newtabpage.activity-stream.telemetry", false);
pref("browser.newtabpage.activity-stream.topSitesRows", 2);
pref("browser.newtabpage.enhanced", false);
@@ -49,8 +65,12 @@ defaultPref("browser.onboarding.tour.onboarding-tour-performance.completed", tru
defaultPref("browser.onboarding.tour.onboarding-tour-private-browsing.completed", true);
defaultPref("browser.onboarding.tour.onboarding-tour-screenshots.completed", true);
defaultPref("browser.pagethumbnails.capturing_disabled", true);
lockPref("browser.ping-centre.telemetry", false);
defaultPref("browser.places.smartBookmarksVersion", -1);
pref("browser.places.speculativeConnect.enabled", false);
pref("browser.reader.detectedFirstArticle", false);
pref("browser.region.network.url", "");
pref("browser.region.update.enabled", false);
pref("browser.rights.3.shown", true);
defaultPref("browser.safebrowsing.appRepURL", "");
defaultPref("browser.safebrowsing.blockedURIs.enabled", false);
@@ -79,34 +99,44 @@ defaultPref("browser.safebrowsing.updateURL", "");
defaultPref("browser.safebrowsing.warning.infoURL", "");
defaultPref("browser.search.countryCode", "US");
defaultPref("browser.search.defaultenginename", "YaCy 'legwork'");
defaultPref("browser.search.defaultenginename.US", "YaCy 'legwork'");
defaultPref("browser.search.geoSpecificDefaults", false);
defaultPref("browser.search.geoSpecificDefaults.url", "");
defaultPref("browser.search.geoip.url", "");
defaultPref("browser.search.hiddenOneOffs", "Amazon.com,Bing,DuckDuckGo,eBay,Google,Twitter,Wikipedia (en)");
defaultPref("browser.search.official", false);
defaultPref("browser.search.order.1", "YaCy 'legwork'");
defaultPref("browser.search.order.2", "");
defaultPref("browser.search.order.3", "");
defaultPref("browser.search.order.US.1", "YaCy 'legwork'");
defaultPref("browser.search.order.US.2", "");
defaultPref("browser.search.order.US.3", "");
defaultPref("browser.search.redirectWindowsSearch", false);
defaultPref("browser.search.region", "US");
defaultPref("browser.search.searchEnginesURL", "");
defaultPref("browser.search.suggest.enabled", false);
defaultPref("browser.search.update", false);
pref("browser.search.widget.inNavBar", true);
lockPref("browser.send_pings", false);
pref("browser.send_pings.require_same_host", true);
defaultPref("browser.shell.checkDefaultBrowser", false);
pref("browser.startup.homepage", "http://i2pd.i2p/");
defaultPref("browser.startup.homepage_override.mstone", "ignore");
defaultPref("browser.tabs.closeWindowWithLastTab", false);
lockPref("browser.tabs.crashReporting.sendReport", false);
defaultPref("browser.translation.engine", "");
defaultPref("browser.uitour.enabled", false);
defaultPref("browser.urlbar.dnsResolveSingleWordsAfterSearch", 0);
defaultPref("browser.urlbar.formatting.enabled", false);
defaultPref("browser.urlbar.maxRichResults", 12);
defaultPref("browser.urlbar.speculativeConnect.enabled", false);
defaultPref("browser.urlbar.suggest.quicksuggest.nonsponsored", false);
defaultPref("browser.urlbar.suggest.quicksuggest.sponsored", false);
defaultPref("browser.urlbar.suggest.searches", false);
defaultPref("browser.urlbar.trimURLs", false);
lockPref("browser.usedOnWindows10", false);
lockPref("browser.usedOnWindows10.introURL", "");
lockPref("camera.control.face_detection.enabled", false);
pref("canvas.capturestream.enabled", false);
lockPref("captivedetect.canonicalURL", "");
pref("clipboard.autocopy", false);
defaultPref("datareporting.healthreport.about.reportUrl", "");
defaultPref("datareporting.healthreport.about.reportUrlUnified", "");
@@ -125,6 +155,8 @@ pref("devtools.debugger.remote-enabled", false);
pref("devtools.webide.autoinstallADBHelper", false);
pref("devtools.webide.autoinstallFxdtAdapters", false);
pref("devtools.webide.enabled", false);
defaultPref("devtools.whatsnew.enabled", false);
defaultPref("devtools.whatsnew.feature-enabled", false);
pref("dom.allow_cut_copy", false);
pref("dom.archivereader.enabled", false);
pref("dom.battery.enabled", false);
@@ -139,6 +171,9 @@ pref("dom.maxHardwareConcurrency", 2);
pref("dom.mozTCPSocket.enabled", false);
pref("dom.netinfo.enabled", false);
pref("dom.network.enabled", false);
defaultPref("dom.push.enabled", false);
defaultPref("dom.security.https_first", false);
defaultPref("dom.security.https_first_pbm", false);
pref("dom.telephony.enabled", false);
pref("dom.vibrator.enabled", false);
pref("dom.vr.enabled", false);
@@ -148,13 +183,19 @@ pref("dom.workers.enabled", false);
pref("experiments.enabled", false);
pref("experiments.manifest.uri", "");
pref("experiments.supported", false);
pref("extensions.abuseReport.enabled", false);
pref("extensions.autoDisableScopes", 0);
pref("extensions.blocklist.enabled", false);
pref("extensions.blocklist.url", "");
pref("extensions.getAddons.cache.enabled", false);
defaultPref("extensions.getAddons.cache.enabled", false);
lockPref("extensions.getAddons.showPane", false);
lockPref("extensions.htmlaboutaddons.recommendations.enabled", false);
pref("extensions.lazarus.showDonateNotification", false);
lockPref("extensions.pocket.enabled", false);
lockPref("extensions.screenshots.upload-disabled", true);
pref("extensions.shownSelectionUI", true);
defaultPref("extensions.systemAddon.update.enabled", false);
defaultPref("extensions.systemAddon.update.url", "");
pref("extensions.ui.lastCategory", "addons://list/extension");
pref("extensions.update.autoUpdateDefault", false);
defaultPref("extensions.update.enabled", false);
@@ -163,23 +204,26 @@ pref("full-screen-api.warning.timeout", 0);
pref("general.buildID.override", "20100101");
lockPref("general.platform.override", "Win32");
lockPref("general.useragent.locale", "en-US");
lockPref("general.useragent.override", "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0");
lockPref("general.useragent.override", "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/78.0");
pref("general.warnOnAboutConfig", false);
defaultPref("geo.enabled", false);
lockPref("geo.wifi.logging.enabled", false);
defaultPref("geo.wifi.uri", "");
lockPref("identity.fxaccounts.commands.enabled", false);
lockPref("identity.fxaccounts.enabled", false);
defaultPref("intl.locale.matchOS", true);
pref("javascript.use_us_english_locale", true);
pref("keyword.enabled", false);
pref("lightweightThemes.update.enabled", false);
pref("loop.logDomains", false);
lockPref("marionette.enabled", false);
defaultPref("media.eme.enabled", false);
lockPref("media.getusermedia.audiocapture.enabled", false);
lockPref("media.getusermedia.screensharing.enabled", false);
pref("media.gmp-eme-adobe.enabled", false);
pref("media.gmp-gmpopenh264.enabled", false);
defaultPref("media.gmp-gmpopenh264.enabled", false);
pref("media.gmp-gmpopenh264.provider.enabled", false);
pref("media.gmp-manager.cert.checkAttributes", false);
pref("media.gmp-manager.url", "");
defaultPref("media.navigator.enabled", false);
defaultPref("media.navigator.video.enabled", false);
@@ -192,35 +236,29 @@ defaultPref("media.peerconnection.use_document_iceservers", false);
defaultPref("media.video_stats.enabled", false);
defaultPref("media.webspeech.recognition.enable", false);
defaultPref("media.webspeech.synth.enabled", false);
defaultPref("messaging-system.rsexperimentloader.enabled", false);
defaultPref("network.IDN.whitelist.i2p", true);
defaultPref("network.IDN_show_punycode", true);
defaultPref("network.allow-experiments", false);
lockPref("network.captive-portal-service.enabled", false);
lockPref("network.connectivity-service.enabled", false);
pref("network.cookie.prefsMigrated", true);
defaultPref("network.dns.disableIPv6", true);
defaultPref("network.dns.disablePrefetchFromHTTPS", true);
defaultPref("network.dns.disableprefetch", true);
pref("network.http.speculative-parallel-limit", 0);
defaultPref("network.dns.disablePrefetch", true);
defaultPref("network.gio.supported-protocols", "");
defaultPref("network.http.speculative-parallel-limit", 0);
defaultPref("network.jar.open-unsafe-types", false);
pref("network.manage-offline-status", false);
defaultPref("network.negotiate-auth.allow-insecure-ntlm-v1", false);
defaultPref("network.notify.changed", false);
pref("network.predictor.enabled", false);
pref("network.predictor.enable-prefetch", false);
defaultPref("network.prefetch-next", false);
pref("network.protocol-handler.expose-all", false);
pref("network.protocol-handler.expose.about", true);
pref("network.protocol-handler.expose.file", true);
pref("network.protocol-handler.expose.ftp", true);
pref("network.protocol-handler.expose.http", true);
pref("network.protocol-handler.expose.https", true);
pref("network.protocol-handler.expose.javascript", true);
pref("network.protocol-handler.expose.moz-extension", true);
pref("network.protocol-handler.external.about", false);
pref("network.protocol-handler.external.file", false);
pref("network.protocol-handler.external.ftp", false);
pref("network.protocol-handler.external.http", false);
pref("network.protocol-handler.external.https", false);
pref("network.protocol-handler.external.javascript", false);
pref("network.protocol-handler.external.moz-extension", false);
pref("network.protocol-handler.expose-all", true);
defaultPref("network.protocol-handler.external-default", false);
defaultPref("network.protocol-handler.warn-external-default", true);
defaultPref("network.proxy.allow_bypass", false);
defaultPref("network.proxy.ftp", "127.0.0.1");
defaultPref("network.proxy.ftp_port", 4444);
defaultPref("network.proxy.http", "127.0.0.1");
@@ -231,6 +269,8 @@ defaultPref("network.proxy.socks_remote_dns", true);
defaultPref("network.proxy.ssl", "127.0.0.1");
defaultPref("network.proxy.ssl_port", 4444);
lockPref("network.proxy.type", 1);
pref("network.http.speculative-parallel-limit", 0);
defaultPref("network.trr.mode", 5);
defaultPref("pdfjs.disabled", true);
defaultPref("pdfjs.enableWebGL", false);
defaultPref("permissions.default.camera", 2);
@@ -250,124 +290,44 @@ defaultPref("privacy.resistFingerprinting", true);
pref("privacy.sanitize.timeSpan", 0);
defaultPref("privacy.spoof_english", 2);
defaultPref("privacy.trackingprotection.enabled", true);
lockPref("privacy.userContext.enabled", true);
//lockPref("privacy.userContext.enabled", true);
defaultPref("reader.parse-on-load.enabled", false);
defaultPref("reader.parse-on-load.force-enabled", false);
defaultPref("security.insecure_field_warning.contextual.enabled", false);
defaultPref("security.insecure_password.ui.enabled", false);
defaultPref("security.ssl.errorReporting.enabled", false);
defaultPref("security.OCSP.enabled", 0);
defaultPref("services.blocklist.update_enabled", false);
pref("services.settings.server", "");
lockPref("services.sync.enabled", false);
pref("services.sync.prefs.sync.browser.download.manager.scanWhenDone", false);
pref("services.sync.prefs.sync.browser.safebrowsing.enabled", false);
pref("services.sync.prefs.sync.browser.search.update", false);
pref("services.sync.prefs.sync.extensions.update.enabled", false);
pref("signon.autofillForms", false);
defaultPref("signon.management.page.breach-alerts.enabled", false);
defaultPref("signon.management.page.vulnerable-passwords.enabled", false);
pref("signon.rememberSignons", false);
defaultPref("startup.homepage_welcome_url", "http://i2pd.i2p/");
pref("startup.homepage_welcome_url.additional", "about:blank");
pref("toolkit.coverage.endpoint.base", "");
pref("toolkit.coverage.opt-out", true);
lockPref("toolkit.telemetry.archive.enabled", false);
lockPref("toolkit.telemetry.bhrPing.enabled", false);
pref("toolkit.telemetry.coverage.opt-out", true);
lockPref("toolkit.telemetry.enabled", false);
lockPref("toolkit.telemetry.firstShutdownPing.enabled", false);
lockPref("toolkit.telemetry.newProfilePing.enabled", false);
defaultPref("toolkit.telemetry.optoutSample", false);
defaultPref("toolkit.telemetry.reportingpolicy.firstRun", false);
lockPref("toolkit.telemetry.server", "");
lockPref("toolkit.telemetry.shutdownPingSender.enabled", false);
defaultPref("toolkit.telemetry.unified", false);
defaultPref("toolkit.telemetry.unifiedIsOptIn", true);
lockPref("toolkit.telemetry.updatePing.enabled", true);
lockPref("toolkit.winRegisterApplicationRestart", false);
defaultPref("webgl.disable-extensions", true);
defaultPref("webgl.disable-fail-if-major-performance-caveat", true);
defaultPref("webgl.disabled", true);
defaultPref("webgl.enable-debug-renderer-info", false);
defaultPref("webgl.min_capability_mode", true);
var config = {
"cckVersion": "2.2.9",
"name": "I2Pd Browser",
"description": "Preconfigured for use with I2P browser",
"version": "1.2.8",
"homePage": "http://i2pd.i2p/",
"welcomePage": "http://i2pd.i2p/",
"titlemodifier": "I2Pd Browser",
"extension": {
"name": "I2Pd Browser"
},
"noWelcomePage": true,
"noUpgradePage": true,
"removeSetDesktopBackground": true,
"removeSafeModeMenu": true,
"noGetAddons": true,
"noAddonCompatibilityCheck": true,
"disableSearchEngineInstall": true,
"removeDefaultSearchEngines": false,
"displayBookmarksToolbar": true,
"removeSmartBookmarks": true,
"removeDefaultBookmarks": true,
"removeDuplicateBookmarkNames": true,
"dontCheckDefaultBrowser": true,
"dontUseDownloadDir": true,
"disableFormFill": true,
"disableSync": true,
"disableCrashReporter": true,
"disableTelemetry": true,
"disableFirefoxHealthReportUpload": true,
"disableFirefoxHealthReport": true,
"disableFirefoxUpdates": true,
"removeSnippets": true,
"disableResetFirefox": true,
"disableWebApps": true,
"disableHello": true,
"disableSharePage": true,
"disableForget": true,
"disableHeartbeat": true,
"disablePocket": true,
"disableAboutSupport": true,
"disableAboutProfiles": true,
"showSearchBar": true,
"autoconfig": {
"disableProfileMigrator": true
},
"id": "i2pdbrowser",
"hiddenUI": [
"#defaultBrowserBox",
"#enableSearchUpdate",
"#dataCollectionCategory",
"#dataCollectionGroup",
".help-button",
"#onboarding-overlay-button",
".prefs-modal-inner-wrapper > section:nth-child(6)"
],
"searchplugins": {
"YaCy 'legwork'": "http://legwork.i2p/opensearchdescription.xml"
},
"defaultSearchEngine": "YaCy 'legwork'",
"certs": {
"ca": [
{
"url": "resource://cck2_i2pdbrowser/certs/purplei2p_ca.pem",
"trust": "CTc,CTc,CTc"
}
]
}
};
var io = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var resource = io.getProtocolHandler("resource")
.QueryInterface(Components.interfaces.nsIResProtocolHandler);
var greDir = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("GreD", Components.interfaces.nsIFile);
var cck2ModuleDir = greDir.clone();
cck2ModuleDir.append("cck2");
cck2ModuleDir.append("modules");
var cck2Alias = io.newFileURI(cck2ModuleDir);
resource.setSubstitution("cck2", cck2Alias);
var configModuleDir = greDir.clone();
configModuleDir.append("cck2");
configModuleDir.append("resources");
var configAlias = io.newFileURI(configModuleDir);
resource.setSubstitution("cck2_i2pdbrowser", configAlias);
Components.utils.import("resource://cck2/CCK2.jsm");
CCK2.init(config, "ä"[0], "ä");
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-1
View File
@@ -1 +0,0 @@
{"chrome://browser/content/browser.xul":{"navigator-toolbox":{"iconsize":"small"},"titlebar-placeholder-on-menubar-for-caption-buttons":{"width":"102"},"titlebar-placeholder-on-TabsToolbar-for-captions-buttons":{"width":"102"},"main-window":{"screenX":"30","screenY":"30","width":"1280","height":"720","sizemode":"normal"},"PersonalToolbar":{"collapsed":"false","currentset":"personal-bookmarks"},"toolbar-menubar":{"currentset":"menubar-items"},"TabsToolbar":{"currentset":"tabbrowser-tabs,new-tab-button,alltabs-button"},"addon-bar":{"currentset":"addonbar-closebutton,status-bar"},"nav-bar":{"currentset":"back-button,forward-button,stop-reload-button,urlbar-container,bookmarks-menu-button,downloads-button,_73a6fe31-595d-460b-a920-fcc0f8843232_-browser-action"},"sidebar-title":{"value":""}}}
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
I2PDB_START_PROG="$(grep '^X-I2PdBrowser-ExecShell' $1 | tail -1 | sed 's/^X-I2PdBrowser-ExecShell=//' | sed 's/%.//')"
shift
if [ "$#" -ge 1 ]
then
echo "Launching '${I2PDB_START_PROG} $@'..."
else
echo "Launching '${I2PDB_START_PROG}'..."
fi
${I2PDB_START_PROG} "$@"
+289
View File
@@ -0,0 +1,289 @@
#!/usr/bin/env bash
#
# GNU/Linux does not really require something like RelativeLink.c
# However, we do want to have the same look and feel with similar features.
#
# Copyright 2017 The Tor Project. See LICENSE for licensing information.
complain_dialog_title="I2Pd Browser"
# Make sure this script wasn't started as 'sh start-i2pd-browser' or similar.
if [ "x$BASH" = "x" ]; then
echo "$complain_dialog_title should be started as './start-i2pd-browser'"
echo "Exiting." >&2
exit 1;
fi
# Do not (try to) connect to the session manager
unset SESSION_MANAGER
# Complain about an error, by any means necessary.
# Usage: complain message
# message must not begin with a dash.
complain () {
# Trim leading newlines, to avoid breaking formatting in some dialogs.
complain_message="`echo "$1" | sed '/./,$!d'`"
# If we're being run in debug/verbose mode, complain to stderr.
if [ "$show_output" -eq 1 ]; then
echo "$complain_message" >&2
return
fi
# Otherwise, we're being run by a GUI program of some sort;
# try to pop up a message in the GUI in the nicest way
# possible.
#
# In mksh, non-existent commands return 127; I'll assume all
# other shells set the same exit code if they can't run a
# command. (xmessage returns 1 if the user clicks the WM
# close button, so we do need to look at the exact exit code,
# not just assume the command failed to display a message if
# it returns non-zero.)
# First, try zenity.
zenity --error \
--title="$complain_dialog_title" \
--text="$complain_message"
if [ "$?" -ne 127 ]; then
return
fi
# Try kdialog.
kdialog --title "$complain_dialog_title" \
--error "$complain_message"
if [ "$?" -ne 127 ]; then
return
fi
# Try xmessage.
xmessage -title "$complain_dialog_title" \
-center \
-buttons OK \
-default OK \
-xrm '*message.scrollVertical: Never' \
"$complain_message"
if [ "$?" -ne 127 ]; then
return
fi
# Try gxmessage. This one isn't installed by default on
# Debian with the default GNOME installation, so it seems to
# be the least likely program to have available, but it might
# be used by one of the 'lightweight' Gtk-based desktop
# environments.
gxmessage -title "$complain_dialog_title" \
-center \
-buttons GTK_STOCK_OK \
-default OK \
"$complain_message"
if [ "$?" -ne 127 ]; then
return
fi
}
if [ "`id -u`" -eq 0 ]; then
complain "The I2Pd Browser Bundle should not be run as root. Exiting."
exit 1
fi
if test -r /proc/cpuinfo && ! grep -q '^flags\s*:.* sse2' /proc/cpuinfo; then
complain "I2Pd Browser requires a CPU with SSE2 support. Exiting."
exit 1
fi
browser_usage () {
printf "\nI2Pd Browser Script Options\n"
printf " --verbose Display Firefox output in the terminal\n"
printf " --log [file] Record Firefox output in file (default: i2pd-browser.log)\n"
printf " --detach Detach from terminal and run I2Pd Browser in the background.\n"
printf " --register-app Register I2Pd Browser as a desktop app for this user\n"
printf " --unregister-app Unregister I2Pd Browser as a desktop app for this user\n"
}
log_output=0
show_output=0
detach=0
show_usage=0
register_desktop_app=0
logfile=/dev/null
while :
do
case "$1" in
--detach)
detach=1
shift
;;
-v | --verbose | -d | --debug)
show_output=1
verbose_arg="$2"
shift
;;
-h | "-?" | --help | -help)
show_usage=1
show_output=1
shift
;;
-l | --log)
if [ -z "$2" -o "${2:0:1}" == "-" ]; then
printf "Logging I2Pd Browser debug information to i2pd-browser.log\n"
logfile="../i2pd-browser.log"
elif [ "${2:0:1}" == "/" -o "${2:0:1}" == "~" ]; then
printf "Logging I2Pd Browser debug information to %s\n" "$2"
logfile="$2"
shift
else
printf "Logging I2Pd Browser debug information to %s\n" "$2"
logfile="../$2"
shift
fi
log_output=1
shift
;;
--register-app)
register_desktop_app=1
show_output=1
shift
;;
--unregister-app)
register_desktop_app=-1
show_output=1
shift
;;
*) # No more options
break
;;
esac
done
# We can't detach and show output at the same time..
if [ "$show_output" -eq 1 -a "$detach" -eq 1 ]; then
detach=0
fi
if [ "$show_output" -eq 0 ]; then
# If the user hasn't requested 'debug mode' or --help, close stdout and stderr,
# to keep Firefox and the stuff loaded by/for it (including the
# system's shared-library loader) from printing messages to
# $HOME/.xsession-errors or other files. (Users wouldn't have seen
# messages there anyway.)
exec > "$logfile"
exec 2> "$logfile"
fi
# If XAUTHORITY is unset, set it to its default value of $HOME/.Xauthority
# before we change HOME below. (See xauth(1) and #1945.) XDM and KDM rely
# on applications using this default value.
if [ -z "$XAUTHORITY" ]; then
XAUTHORITY=~/.Xauthority
export XAUTHORITY
fi
# If this script is being run through a symlink, we need to know where
# in the filesystem the script itself is, not where the symlink is.
myname="$0"
if [ -L "$myname" ]; then
# XXX readlink is not POSIX, but is present in GNU coreutils
# and on FreeBSD. Unfortunately, the -f option (which follows
# a whole chain of symlinks until it reaches a non-symlink
# path name) is a GNUism, so we have to have a fallback for
# FreeBSD. Fortunately, FreeBSD has realpath instead;
# unfortunately, that's also non-POSIX and is not present in
# GNU coreutils.
#
# If this launcher were a C program, we could just use the
# realpath function, which *is* POSIX. Too bad POSIX didn't
# make that function accessible to shell scripts.
# If realpath is available, use it; it Does The Right Thing.
possibly_my_real_name="`realpath "$myname" 2>/dev/null`"
if [ "$?" -eq 0 ]; then
myname="$possibly_my_real_name"
else
# realpath is not available; hopefully readlink -f works.
myname="`readlink -f "$myname" 2>/dev/null`"
if [ "$?" -ne 0 ]; then
# Ugh.
complain "start-i2pd-browser cannot be run using a symlink on this operating system."
fi
fi
fi
# Try to be agnostic to where we're being started from, chdir to where
# the script is.
mydir="`dirname "$myname"`"
test -d "$mydir" && cd "$mydir"
# If ${PWD} results in a zero length string, we can try something else...
if [ ! "${PWD}" ]; then
# "hacking around some braindamage"
PWD="`pwd`"
surveysays="This system has a messed up shell.\n"
fi
# This is a fix for an ibus issue on some Linux systems. See #9353 for more
# details. The symlink needs to be created before we change HOME.
if [ ! -d ".config/ibus" ]; then
mkdir -p .config/ibus
ln -nsf ~/.config/ibus/bus .config/ibus
fi
# Fix up .desktop Icon and Exec Paths, and update the .desktop file from the
# canonical version if it was changed by the updater.
cp start-i2pd-browser.desktop ../
sed -i -e "s,^Name=.*,Name=I2Pd Browser,g" ../start-i2pd-browser.desktop
sed -i -e "s,^Icon=.*,Icon=$PWD/browser/chrome/icons/default/default128.png,g" ../start-i2pd-browser.desktop
sed -i -e "s,^Exec=.*,Exec=sh -c '\"$PWD/start-i2pd-browser\" --detach || ([ ! -x \"$PWD/start-i2pd-browser\" ] \&\& \"\$(dirname \"\$*\")\"/Browser/start-i2pd-browser --detach)' dummy %k,g" ../start-i2pd-browser.desktop
if [ "$register_desktop_app" -eq 1 ]; then
mkdir -p "$HOME/.local/share/applications/"
cp ../start-i2pd-browser.desktop "$HOME/.local/share/applications/"
update-desktop-database "$HOME/.local/share/applications/"
printf "I2Pd Browser has been registered as a desktop app for this user in ~/.local/share/applications/\n"
exit 0
fi
if [ "$register_desktop_app" -eq -1 ]; then
if [ -e "$HOME/.local/share/applications/start-i2pd-browser.desktop" ]; then
rm -f "$HOME/.local/share/applications/start-i2pd-browser.desktop"
update-desktop-database "$HOME/.local/share/applications/"
printf "I2Pd Browser has been removed as a user desktop app (from ~/.local/share/applications/)\n"
else
printf "I2Pd Browser does not appear to be a desktop app (not present in ~/.local/share/applications/)\n"
fi
exit 0
fi
HOME="${PWD}"
export HOME
# Avoid overwriting user's dconf values. Fixes #27903.
export GSETTINGS_BACKEND=memory
cd "${HOME}"
# We pass all additional command-line arguments we get to Firefox.
#
# The --class parameter was added to fix bug 11102.
if [ "$show_usage" -eq 1 ]; then
# Display Firefox help, then our help
./firefox --class "I2Pd Browser" \
-profile data --help 2>/dev/null
browser_usage
elif [ "$detach" -eq 1 ] ; then
./firefox --class "I2Pd Browser" \
-profile data "${@}" > "$logfile" 2>&1 </dev/null &
disown "$!"
elif [ "$log_output" -eq 1 -a "$show_output" -eq 1 ]; then
./firefox --class "I2Pd Browser" \
-profile data "${@}" 2>&1 </dev/null | \
tee "$logfile"
elif [ "$show_output" -eq 1 ]; then
./firefox --class "I2Pd Browser" \
-profile data "${@}" < /dev/null
else
./firefox --class "I2Pd Browser" \
-profile data "${@}" > "$logfile" 2>&1 </dev/null
fi
exit $?
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env ./browser/execdesktop
#
# This file is a self-modifying .desktop file that can be run from the shell.
# It preserves arguments and environment for the start-i2pd-browser script.
#
# Run './start-i2pd-browser.desktop --help' to display the full set of options.
#
# When invoked from the shell, this file must always be in an I2Pd Browser root
# directory. When run from the file manager or desktop GUI, it is relocatable.
#
# After first invocation, it will update itself with the absolute path to the
# current I2Pd Browser location, to support relocation of this .desktop file for
# GUI invocation. You can also add the I2Pd Browser to your desktop's application
# menu by running './start-i2pd-browser.desktop --register-app'
#
# If you use --register-app, and then relocate your I2Pd Browser directory, the
# I2Pd Browser will no longer launch from your desktop's app launcher/dock. However,
# if you re-run --register-app from inside that new directory, the script will
# correct the absolute paths and re-register itself.
#
# This file will also still function if the path changes when I2Pd Browser is
# used as a portable app, so long as it is run directly from that new directory,
# either via the shell or via the file manager.
[Desktop Entry]
Type=Application
Name=I2Pd Browser Setup
GenericName=I2Pd Browser
Comment=I2Pd Browser for surfing I2P sites
Categories=Network;WebBrowser;Security;
Exec=sh -c '"$(dirname "$*")"/browser/start-i2pd-browser --detach || ([ ! -x "$(dirname "$*")"/browser/start-i2pd-browser ] && "$(dirname "$*")"/start-i2pd-browser --detach)' dummy %k
X-I2PdBrowser-ExecShell=./browser/start-i2pd-browser --detach
Icon=web-browser
StartupWMClass=I2Pd Browser
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICKDCCAc6gAwIBAgIUcPHZXtYSqGNRCD6z8gp79WUFtI0wCgYIKoZIzj0EAwIw
gZMxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEPMA0GA1UEBwwGQXVzdGlu
MRgwFgYDVQQKDA9TdG9ybXlDbG91ZCBJbmMxIzAhBgNVBAMMGnN0b3JteWNsb3Vk
LmZhbWlseS5pMnAubmV0MSQwIgYJKoZIhvcNAQkBFhVhZG1pbkBzdG9ybXljbG91
ZC5vcmcwHhcNMjIwMzE5MTU1MjU2WhcNMzIwMzE2MTU1MjU2WjCBkzELMAkGA1UE
BhMCVVMxDjAMBgNVBAgMBVRleGFzMQ8wDQYDVQQHDAZBdXN0aW4xGDAWBgNVBAoM
D1N0b3JteUNsb3VkIEluYzEjMCEGA1UEAwwac3Rvcm15Y2xvdWQuZmFtaWx5Lmky
cC5uZXQxJDAiBgkqhkiG9w0BCQEWFWFkbWluQHN0b3JteWNsb3VkLm9yZzBZMBMG
ByqGSM49AgEGCCqGSM49AwEHA0IABFUli0hvJEmowNjJVjbKEIWBJhqe973S4VdL
cJuA5yY3dC4Y998abWEox7/Y1BhnBbpJuiodA341bXKkLMXQy/kwCgYIKoZIzj0E
AwIDSAAwRQIgD12F/TfY3iV1/WDF7BSKgbD5g2MfELUIy1dtUlJQuJUCIQD69mZw
V1Z9j2x0ZsuirS3i6AMfVyTDj0RFS3U1jeHzIQ==
-----END CERTIFICATE-----
@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIEctG1gDANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEZMBcGA1UEAwwQYWNldG9uZUBtYWls
LmkycDAeFw0yMTAxMjUxMDMyMjBaFw0zMTAxMjMxMDMyMjBaMHAxCzAJBgNVBAYT
AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEMMAoGA1UECwwDSTJQMRkwFwYDVQQDDBBhY2V0b25lQG1h
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwqF/BRRmvZ54
5XArgxbytDi7m7MDjFE/whUADruHj/9jXGCxE8DDiiKTt3yhfakV0SNo5xk7AMD+
wqiSNC5JCHTm18gd2M4cQLIaOVRqucLLge4XVgk2WPX6OT98wfxh7mqA3wlSdEpj
dY3Txtkf7VfZLicG76/RBtLFW3aBdsn63hZaQqZE4x/5MJyPVZx59+lys5RmMi0o
LpXJy4HOu1/Gl1iKDJoI/ARFG3y7uP/B+ZtZBitJetTs0HcqycnNJq0tVZf2HiGF
JNy67AL4foxNYPXP6QsvXvp6LRpGANaBCkFCBlriSF+x1zO2H3uAkRnuLYXuKIfB
HudejTp4R57VgZGiHYoawHaF17FVAApue9G8O82XYECjhET35B9yFoOBHTvaMxLU
CKrmayH8KMQon95mfe1qpoO3/YDa8DCxkjAfjdtytat7nt2pGZMH6/cLJxcFiofh
RtRVvb+omv/X12j/6iCFrwP4NvBnAZsa736igbjpyee5n+CSyYxd9cJkRX1vQVk7
WFSqL58Pz+g6CKJmdMPvqNOfUQ6mieBeejmx35B4pLzLcoNxw8R3O1+I2l4dg042
dEydKRQNwdzOec4jYwnKR40iwIyZxpchXWGRbBdyF5RQCbIIo60QBJlfXMJ2svan
q5lYIeWeY3mlODXu4KH4K09y10KT8FsCAwEAAaMhMB8wHQYDVR0OBBYEFMh+DoIL
APNiu2o+6I9A49joNYQuMA0GCSqGSIb3DQEBDQUAA4ICAQBFeOJi0rmkqN5/E3IB
nE2x4mUeLI82tUcN2D3Yu8J81vy4DnH+oMRQFDtYEHW5pfirRmgSZ7MQwYQnqWLp
iTE7SyCxlqGrmVsYp7PzfS1pUT2QeWPtsNYUDdraG0Zr9BkIGB60VMhjMSa9WUrj
lbchzr6E/j/EsEOE7IK08JxIDKCDZM2LLwis4tAM6tmiylkMf2RlUBIRBs1TCO+q
x3yByttNE2P4nQyQVQpjc1qsaOMvJvbxun37dwo+oTQy+hwkA86BWTDRYdN3xwOk
OfAOtlX6zM/wCKMN0ZRnjZoh59ZCn4JXokt3IjZ4n8qJOuJFRKeKGmGeKA8uaGW8
ih5tdB99Gu5Z8LOT1FxAJKwQBn5My0JijPoMit4B0WKNC8hy2zc2YvNfflu1ZRj5
wF4E5ktbtT/LWFSoRPas/GFS8wSXk/kbSB0ArDcRRszb3JHqbALmSQxngz3rfwb3
SHwQIIg956gjMDueEX5CrGrMqigiK53b9fqtpghUrHDsqtEXqeImpAY65PX1asqo
metDNuETHF7XrAjP7TGJfnrYQyeK90iS7j1G68ScBGkKY2nsTnFoXkSk5s5D338E
SUzPaOlh91spmkVY6gQTVQ7BakADBHw+zBgDA1gBN/4JPvgN36hquj63+aG1cKy3
3ZUnv2ipo2fpr69NtuBnutK6gw==
-----END CERTIFICATE-----
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIF1zCCA7+gAwIBAgIRAMDqFR09Xuj8ZUu+oetSvAEwDQYJKoZIhvcNAQELBQAw
dTELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwGA1UE
ChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxHjAcBgNVBAMM
FWFkbWluQHN0b3JteWNsb3VkLm9yZzAeFw0yNDAxMjUxNDE1MzBaFw0zNDAxMjUx
NDE1MzBaMHUxCzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgx
HjAcBgNVBAoTFUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMR4w
HAYDVQQDDBVhZG1pbkBzdG9ybXljbG91ZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUA
A4ICDwAwggIKAoICAQDbGX+GikPzQXr9zvkrhfO9g0l49KHLNQhUKYqd6T+PfnGo
Fm0d3ZZVVQZ045vWgroOXDGGZZWxUIlb2inRaR2DF1TxN3pPYt59RgY9ZQ9+TL7o
isY91krCRygY8EcAmHIjlfZQ9dBVcL7CfyT0MYZA5Efee9+NDHSewTfQP9T2faIE
83Fcyd93a2mIHYjKUbJnojng/wgsy8srbsEuuTok4MIQmDj+B5nz+za2FgI0/ydh
srlMt4aGJF4/DIem9z9d0zBCOkwrmtFIzjNF1mOSA8ES4m5YnKA/y9rZlRidLPGu
prbXhPVnqHeOnHMz2QCw1wbVo504kl0bMqyEz2tVWsO9ep7iZoQs2xkFAEaegYNT
QLUpwVGlyuq3wXXwopFRffOSimGSazICwWI6j+K0pOtgefNJaWrqKYvtkj1SbK2L
LBNUIENz6VnB7KPRckuX6zxC8PpOiBK9BcftfO+xAz/wC6qq3riBPw30KKSym0nC
Zp5KciDn4Phtw9PGq8Bkl8SyWl0jtFnfTB1tzJkisf2qKcNHaFTEe2JW763YLbh/
AU+8X8evFu40qLgvOgKoyy5DLy6i8zetX+3t9K0Fxt9+Vzzq6lm5V/RS8iIPPn+M
q1/3Z5kD0KQBG9h/Gl8BH+lB71ZxPAOZ3SMu8DJZcxBLVmDWqQPCr5CKnoz0swID
AQABo2IwYDAOBgNVHQ8BAf8EBAMCAoQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsG
AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHgYDVR0OBBcEFWFkbWluQHN0b3JteWNs
b3VkLm9yZzANBgkqhkiG9w0BAQsFAAOCAgEARWOJ69vTHMneSXYscha+4Ytjg0RM
faewJNEGj8qy/Qvh9si2bWYNPRK6BlbHFS7pRYBLAnhaeLBGVv1CCR6GUMMe74zQ
UuMeAoWU6qMDmB3GfYoZJh8sIxpwHqyJeTdeccRbZ4sX4F6u3IHPXYiU/AgbYqH7
pYXQg2lCjXZYaDFAlEf5SlYUDOhhXe5kR8Edhlrsu32/JzA1DQK0JjxKCBp+DQmA
ltdOpQtAg03fHP4ssdj7VvjIDl28iIlATwBvHrdNm7T0tYWn6TWhvxbRqvfTxfaH
MvxnPdIJwNP4/9TyQkwjwHb1h+ucho3CnxI/AxspdOvT1ElMhP6Ce6rcS9pk11Rl
x0ChsqpWwDg7KYpg0qZFSKCTBp4zBq9xoMJ6BQcgMfyl736WbsCzFTEyfifp8beg
NxUa/Qk7w7cuSPGyMIKNOmOR7FLlFbtocy8sXVsUQdqnp/edelufdNe39U9uNtY6
yoXI9//Tc6NgOwy2Oyia0slZ5qHRkB7e4USXMRzJ3p4q9eCVKjAJs81Utp7O2U+9
vhbhwWP8CAnNTT1E5WS6EKtfrdqF7wjkV+noPGLDGmrXi01J1fSMAjMfVO+7/LOL
UN+G4ybKWnEhhOO27yidN8Xx6UrCS23DBlPPQAeA74dTsTExiOxf1o1EXzcQiMyO
LAj3/Ojbi1xkWhI=
-----END CERTIFICATE-----
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
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
+XBgkaYA4iEwYKqlCQ==
-----END CERTIFICATE-----
@@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFfTCCA2WgAwIBAgIEOprmhjANBgkqhkiG9w0BAQ0FADBvMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEYMBYGA1UEAwwPYmFja3VwQG1haWwu
aTJwMB4XDTEzMTAxMzEzNDQ1NVoXDTIzMTAxMzEzNDQ1NVowbzELMAkGA1UEBhMC
WFgxCzAJBgNVBAgTAlhYMQswCQYDVQQHEwJYWDEeMBwGA1UEChMVSTJQIEFub255
bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGDAWBgNVBAMMD2JhY2t1cEBtYWls
LmkycDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIoAkobXwk/Enf1d
roHyqCyvcJfZJVTwb/LgYWAvCBMCr+RGqlSgtk3g69Y3I0xU08fD2kGt3r5Pwsbr
omXIbJAcccyLqmQ5QX6QgL+X9VpMDp9C4h2RogCrqLBAWw4cuZ4RS9VCpP1Yis7H
uejYqENP86p7BsRnuW/4cYnfunAdMpss4LpRGQXt1nTX+kfgCYgnKFbFqwAHt7yV
Ds+Pe6FuBHPlp+sc1amKRcUnSvhXLsv43VicnT7xYL/kUsN83wrtHA3B4aGDx3aA
3/EzuRmIXQB0BlTZILMEyYwG/nc4OsW82QYrvEZ9BIg9A4lF/wS/KZCICPxLF2zo
dGjnmlgkiA4s8eO+va/ElHyELjckVXqmG1eXHhSkEsDvOQJy01IUuwLinvq7cUbJ
HfJBZJllEg+sLDCv3FkEqN+XjBNFfQN4oNew4w6IPY6YH1INVB9LL0Cmdu4DudLv
TY8OcI8eSfez3hmm+pYQ23PJRYYnvRDnRECyIWBegkckWRh8U/WvZUYUvETK6EDl
/0KpTtfzX6MqHA5D6bTAB8Y3ijGMLrZ/B5vj5yCoZbLiGme9X2moR2k1LEhdhtzV
exsqezCpg6dn48FTX7mHjvR5/r4kz2jqBGmdPUWIIxnjFUzDUK3llVQiHihleHpe
jL4LqnhBGKWFRTaVwaIkBG4zAfIzAgMBAAGjITAfMB0GA1UdDgQWBBQNkfW7bSMl
1/4KDbgwrkf9x1Zu/TANBgkqhkiG9w0BAQ0FAAOCAgEAGg3a3rTf0EznQocmio0T
5gCoL0n8h6yKW/PyPAIELrd9wiYjhJFcWvMTcJJJnVqmAL5vpvhaAFVtAfx70MGa
0DZ7FvytK5hEfF4IqOFDyEEVGJR5rIpVK4MeI1nmwEsxdbW+FhODjtRzgYO8XBME
Xj4aY1FWg9vxc3reUj6PSFsZtsB0aLiRgL9JDovJIiRw0Uqr1v2wXBte5yVCxDge
vTREZtpK4cKetoOa68pwSXI32JwKE18j6bfdKVBCcYQKlKP/3gHGduaDrQv3w32S
DRym5s6MREeTUOtAw4wq46KpdOX8yyAqJPrCfMwS6ORd3t+egqOw0PUnsqb97w4O
lUtrRYvb2cOj60SmRx4vJvItyuHbKqIK7o2e1RcUZPXYoAVx2ww4XB2Wk4D7LSAs
cS7nLj8yAqzJ2qqtBzxu+zILJtkVa12dKF0xmS0BxBp4sCYiBtmAVE8AWQqEuSHA
FrMWqoXcjcfdvvyX487FFWWUE7ZBIn0hee2sK9J9+SPtqczJaN7TF3K3nzo65WJG
1epltmq2Ugjb67Gz7v4y7H23DJ/qhm8yLtCHTj69HTta5I08j6Kut924WLZaiMO/
4YoEL5AE63X0sxYibKFQiq7FW5nUJA280GRlY3xSMFzlB2ggazrUV3YAWVDhfdnI
flpzWXkFM2D36OUaubfe9YY=
-----END CERTIFICATE-----
@@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFezCCA2OgAwIBAgIEUQYyQjANBgkqhkiG9w0BAQ0FADBuMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEXMBUGA1UEAwwOYnVnbWVAbWFpbC5p
MnAwHhcNMTQxMTA2MDkxMTE0WhcNMjQxMTA1MDkxMTE0WjBuMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEXMBUGA1UEAwwOYnVnbWVAbWFpbC5p
MnAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCrThOH0eSDT0VnCSBC
sqYmAydWH+O8eNttDXr2mSvZLhvAW+6/xHTkKhaWvkIvvS0Vh8hujMnD90Cgp4Fk
TKCxMj9K527o5xIZwWW05OevbjlBwIpVLO1PjmsfsoD1nIX14eEzJSEoAulKsv7V
jGUC/6hC11mmVvH9buQLSRv6sCjuAcMszmw3TAD+XYBIs+z57KuwYXtX3+OA543c
l1/ZKLYkkwY8cwzZqWDVWqTKP5TfVae58t40HhJk3bOsr21FZsaOjlmao3GO+d/3
exKuUGJRcolSqskL3sZ1ovFqko81obvvx0upI0YA0iMr/NRGl3VPuf/LJvRppYGc
LsJHgy9TIgtHvaXRi5Nt4CbKl9sZh/7WkkTTI5YGvevu00btlabAN+DSAZZqdsB3
wY8HhM1MHiA9SWsqwU65TwErcRrjNna2FiDHEu0xk5+/iAGl6CSKHZBmNcYKXSv8
cwShB0jjmciK0a05nC638RPgj0fng7KRrSglyzfjXRrljmZ40LSBL/GGMZMWpOM7
mEsBH5UZJ/2BEmjc9X9257zBdx8BK8y1TXpAligpNBsERcTw1WP1PJ35einZvlXW
qI3GwMf0sl26sn+evcK0gDl27jVDZ45MtNQEq64M4NV3Tn9zq0eg/39YvjVeqrI5
l7sxmYqYGR6BuSncwdc4x+t6swIDAQABoyEwHzAdBgNVHQ4EFgQU/REZ7NMbVZHr
Xkao6Q8Ccqv2kAMwDQYJKoZIhvcNAQENBQADggIBACc2YjLVNbl1kJUdg2klCLJt
5LjNTiIZa2Cha5GStlC/lyoRRge6+q/y9TN3tTptlzLPS9pI9EE1GfIQaE+HAk+e
/bC3KUOAHgVuETvsNAbfpaVsPCdWpFuXmp/4b9iDN7qZy4afTKUPA/Ir/cLfNp14
JULfP4z2yFOsCQZ5viNFAs1u99FrwobV2LBzUSIJQewsksuOwj96zIyau0Y629oJ
k+og88Tifd9EH3MVZNGhdpojQDDdwHQSITnCDgfRP5yER1WIA4jg6l+mM90QkvLY
5NjWTna5kJ3X6UizvgCk365yzT2sbN3R9UGXfCJa9GBcnnviJtJF3+/gC0abwY2f
NtVYp32Xky45NY/NdRhDg0bjHP3psxmX+Sc0M9NuQcDQ+fUR+CzM0IGeiszkzXOs
RG+bOou2cZ81G4oxWdAALHIRrn7VvLGlkFMxiIZyhYcTGQZzsTPT6n18dY99+DAV
yQWZfIRdm8DOnt0G+cwfeohc/9ZwDmj4jJAAi0aeTXdY6NEGIVydk6MAycEhg2Hx
9EV96kRwZNIW0AGY8CozECFL3Eyo2ClQVV4Q35SsBibsitDjM03usc2DJ/qjynXA
C8HoOSWgbddiBvqZueqK8GdhykOy3J3ysr+MNN/lbG48LqkQr1OWxev9rGGQ6RJT
wpBgPyAFAwouPy1whmnx
-----END CERTIFICATE-----
@@ -0,0 +1,33 @@
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
@@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIESg3kkzANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEZMBcGA1UEAwwQZWNoZWxvbkBtYWls
LmkycDAeFw0xNDA3MzExNjQ3MDJaFw0yNDA3MzAxNjQ3MDJaMHAxCzAJBgNVBAYT
AlhYMQswCQYDVQQIEwJYWDELMAkGA1UEBxMCWFgxHjAcBgNVBAoTFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRkwFwYDVQQDDBBlY2hlbG9uQG1h
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmcEgLwwhzLNe
XLOMSrhwB8hWpOhfjo4s6S/wjBtjjUc8nI3D0hSn3HY26p0rvcvNEWexPUpPULmC
exGkU463nu7PiFONiORI1eJAiUFHibRiaA7Wboyo38pO73KirwjG07Y+Ua0jp+HS
+4FQ/I/9H/bPplReTOU/6hmRbgQ69U8nE68HzZHQxP68yVJ2rPHSXMPhF4R1h0G1
1mCAT+TgTsnwHNGF77XHJnY4/M4e2cgycEZjZow36C3t2mNDVkMgF19QQeb9WmLR
zREn3nq9BJqHpUkn9yWw0kKXTZSds+7UxESfzf3BzK0+hky2fh5H+qbYAo2lz4yj
81MXTAu+4RRkg4DBLlF+2dkclhwQLxxzvkRC6tPkn5i33Yltg7EfzA9IoQ05potJ
I+iOcF+aStfFgFj9u3B5UkcF4P0cH1QD3c6BK4hIezQYqRoPly1gHqg+XdwjG/dr
4as7HA9FTz3p2E8nClpIC1x3hfgwAdfd29aeBxO1WW/z99iMF7TBAF+u5T86XEW1
WpknqCbTli36yJ8a5fPWxZHrryBRJT5yLxejjFeadtutBSwljiVFq+Y38VqwFivq
VLiBt7IxAsZ8iilgfnnnAvBH6chWfSKb4H7kB4TJvDiV96QmmvoEaWYNHZozMhyK
tO3b5w+xqbJXyCLA3Q75jD0km76hjcECAwEAAaMhMB8wHQYDVR0OBBYEFAHQcAam
QRS/EUhuCSr9pB4Ux0rYMA0GCSqGSIb3DQEBDQUAA4ICAQBq1+1QLmgLAjrTg3tb
4XKgAVICQRoBDNUEobQg3pYeUX9eFNya2RxNljuvYpwT80ilGMPOXcjddmr5ngiK
dbGRcuuJk9MPEHtPaPT3+JJlvKQ3B3g2wva2Wz2OAyLZUGQs389K4nTbwh4QF0n2
aHFL8BHiD62hiKnCoNaW4ZovUNNvOxo9lMyAiaFU2gqQNcdad8hP9EAllbvbxDx9
Tjww2UbwQUIHS9rna4Tlu+f0hDXTWIutc2A51W2fJCb7L3+lYO7Wv55ND/WtryLZ
XpMp27+MpuEnN3kQmz/l9R0hIJsWc/x9GQkjm5wEaIZEyTtenqwRKGmVCtAj0Pgv
jn1L3/lWmrNq+OZHb/QeyfKtA3nXfQKVmT98ewQiK/S5i1xIAXCJPytOD887b/o1
cdurTmCiZMwgiQ+HLJqCg3MDa5mvKqRkRdZXfE6aQWEcSbpAhpV15R17q7L+Fg0W
shLSNucxyGNU8PjiC/nOmqfqUiPiMltJjPmscxBLim8foyxjakC4+6N6m+Jzgznj
PocBehFAfKYj66XEwzIBN7Z2uuXoYH9YptkocFjTzvchcryVulDWZ4FWxreUMhpM
4oyjjhSB4tB9clXlwMqg577q3D6Ms0zLTqsztyPN3zr6jGev3jpVq7Q1GOlciHPv
JNJOWTH/Vas1W6XlwGcOOAARTQ==
-----END CERTIFICATE-----
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
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
CCOJyu3XtyzFf+tAeixOnuQ=
-----END CERTIFICATE-----
@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFgTCCA2mgAwIBAgIETWAY1DANBgkqhkiG9w0BAQ0FADBxMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEaMBgGA1UEAwwRaGlkdXNlcjBAbWFp
bC5pMnAwHhcNMjExMjEzMTU0MDI3WhcNMzExMjExMTU0MDI3WjBxMQswCQYDVQQG
EwJYWDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5v
bnltb3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEaMBgGA1UEAwwRaGlkdXNlcjBA
bWFpbC5pMnAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXnjJ8UQ0f
lHHpfPMiHofBPSuL4sbOJY6fOXwPhSg/h6THh9DS/ZWmJXQ3qRD0glDVtv4/Dr/9
ldGQ5eltF9iCFXCQlMEy2HjQrBKq0nsl7RpYK12cyMaod0kkzCUk9ITLi9CmHM3Z
gQZcmG8TWjFEpDR+idx/QkQt2pcO4vzWlDit3Vh4ivnbX5jGQHbsVjQEMQWxr+pX
dsS+YQpjZ6RBmrooGTPO8QDOOeYLAn0lCjmffc/kzIH9E/p4/O0rOpyhVYbdxUD1
5wkqN9l4yrtxmORG/PudnRQQ0r4TUq8vsxfGY0Euo9IbhgXF2Parel1ZhDxB1WZV
VwWtgLIh9jGA1UMa8SYKnEfp8LWNZ3b3mUUnZb3kMrLk6jGYRWNsHmamhd4mC7AZ
qf/8lOkEIw3bPd3YguCDRVcLui5BwIEZmqXg8uoESxfO/sW3pBrN/8M7MkTex9kN
vjitGDDXvenK27qmNgZxbBlX72yTSfys7XTYTLnxZC8AwdAo2Wz9Z6HhGiPonf2h
vZkc9ZxuE0jFIrsbJra4X7iyjXgi4vV4ARNg/9Ft6F4/OIbECgeDcBQqq4TlT2bZ
EfWVrBbqXoj5vNsLigIkd+AyUNwPYEcB5IFSiiOh98pC7BH3pg0m8U5YBjxe1i+9
EQOOG0Qtx+JigXZHu6bGE0Twy9zy+UzoKQIDAQABoyEwHzAdBgNVHQ4EFgQUGK1b
0DkL6aLalcfBc/Uj/SF08C0wDQYJKoZIhvcNAQENBQADggIBAMpXM82bJDpH1TlH
TvhU3Z7nfZdvEhOQfujaFUYiuNripuEKcFGn948+DvAG0FUN+uNlJoqOVs8D7InD
gWlA9zpqw5Cl5Hij/Wns9QbXuAHJeA23fVUoaM2A6v9ifcIQ1A+rDuRQAo6/64KW
ChTg2e99RBpfGOyqgeh7tLLe0lPPekVpKHFuXabokaKRDuBcVHcUL4tWXe3dcyqa
Ej/PJrrS+nWL0EGZ4q80CEd2LPuDzPxNGCJt/R7ZfadENWajcgcXGceh1QBzozrB
SL/Ya6wF9SrsB7V/r5wX0LM4ZdDaLWbtmUe5Op0h/ZMH25Sa8xAXVz+O9L6sWSoO
FaiYTOvAiyyPz+nsxKa3xYryDHno7eKSt+hGOcaurhxbdZaEFY/CegEc73tCt9xK
e9qF8O/WkDLmixuErw3f5en4IfzGR7p3lJAwW/8WD8C6HS39h/eE7dVZNaWgtQnZ
SgGjgZMTJqTcQ3aZmfuCZefxGFok8w6AIkdbnd1pdMBRjYu8aXgl2hQSB9ZADDE9
R5d3rXi0PkSFLIvsNjVa5KXrZk/tB0Hpfmepq7CufBqjP/LG9TieRoXzLYUKFF74
QRwjP+y7AJ+VDUTpY1NV1P+k+2raubU2bOnLF3zL5DtyoyieGPhyeMMvp0fRIxdg
bSl5VHgPXHNM8mcnndMAuzvl7jEK
-----END CERTIFICATE-----
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
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
2Q==
-----END CERTIFICATE-----
@@ -1,33 +1,33 @@
-----BEGIN CERTIFICATE-----
MIIFvjCCA6agAwIBAgIQIDtv8tGMh0FyB2w5XjfZxTANBgkqhkiG9w0BAQsFADBt
MIIFvjCCA6agAwIBAgIQBnsUOmOu2oZZIwHBmQc1BDANBgkqhkiG9w0BAQsFADBt
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEWMBQGA1UEAwwN
aWdvckBub3ZnLm5ldDAeFw0xNzA3MjQxODI4NThaFw0yNzA3MjQxODI4NThaMG0x
aWdvckBub3ZnLm5ldDAeFw0yMzAxMjgxNDM4MzFaFw0zMzAxMjgxNDM4MzFaMG0x
CzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgxHjAcBgNVBAoT
FUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRYwFAYDVQQDDA1p
Z29yQG5vdmcubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxst4
cam3YibBtQHGPCPX13uRQti56U3XZytSZntaKrUFmJxjt41Q/mOy3KYo+lBvhfDF
x3tWKjgP9LJOJ28zvddFhZVNxqZRjcnAoPuSOVCw88g01D9OAasKF11hCfdxZP6h
vGm8WCnjD8KPcYFxJC4HJUiFeProAwuTzEAESTRk4CAQe3Ie91JspuqoLUc5Qxlm
w5QpjnjfZY4kaVHmZDKGIZDgNIt5v85bu4pWwZ6O+o90xQqjxvjyz/xccIec3sHw
MHJ8h8ZKMokCKEJTaRWBvdeNXki7nf3gUy/3GjYQlzo0Nxk/Hw4svPcA+eL0AYiy
Jn83bIB5VToW2zYUdV4u3qHeAhEg8Y7HI0kKcSUGm9AQXzbzP8YCHxi0sbb0GAJy
f1Xf3XzoPfT64giD8ReUHhwKpyMB6uvG/NfWSZAzeAO/NT7DAwXpKIVQdkVdqy8b
mvHvjf9/kWKOirA2Nygf3r79Vbg2mqbYC/b63XI9hheU689+O7qyhTEhNz+11X0d
Zax7UPrLrwOeB9TNfEnztsmrHNdv2n+KcOO2o11Wvz2nHP9g+dgwoZSD1ZEpFzWP
0sD5knKLwAL/64qLlAQ1feqW7hMr80IADcKjLSODkIDIIGm0ksXqEzTjz1JzbRDq
jUjq7EAlkw3G69rv1gHxIntllJRQidAqecyWHOMCAwEAAaNaMFgwDgYDVR0PAQH/
Z29yQG5vdmcubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvLkf
bM3uiYfp9m0vgdoftyXtk2/9bHf3u5iaM0WfoJIsw1iizo/mxJl+Iy7SxLC16nV0
v5FpncVv+Z8x9dgoAYVuLq9zKfsAbpj6kuxAqw6vJMlD1TiIL3nSODV9BJLk47X5
tmvoOSj9BgvemYThTE3nj+DbuJRW5q90KyBV/LdLrQJX3k5R3FFL5tTad2LKFNZ4
vEOcYwwx6mvrkJ2lly6bAQUCtfc648Jyq+NO3Rba1fmn7gcP9zXXc5KYsj/ovyY2
OaocSF5wMhzBuPxO+M2HqbYLMAkc6/GesGds8Rm8wofuhJoI5YtqJuLKZm6nQXSc
fx6PKgbKcTIUWNFMsxyfghz9hpbg0rkvC7PtfAjtV0yaDtUum1eZeNEx1HbRWN2n
TQNCVuv0yaKC41qxqzhEybkdjL9JlgUh7VuskaCelB0lz+kgYjGu8ezOa0ua2iKq
4FC/1MbPulxN8NOt4pmbGqqoxmCdShp38wdnOBM3DsAS9f0JaQZd4CDyY4DCSfVn
xPdWk31+VXVt3Ixh1EUqZWYTRSsZApkCyYzkiZ/qPGG6FR9Hq2SuhC5o4P44k7eo
6wwBWD8a5RjsZhvr05E5yBrKXh/PjLwmtG73QC+ouR54/5xtedvdTwNS94FnNctX
FT6QGZnRwCkhPaRe1oQMzP+88pGoCfO33GBAuwUCAwEAAaNaMFgwDgYDVR0PAQH/
BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8E
BTADAQH/MBYGA1UdDgQPBA1pZ29yQG5vdmcubmV0MA0GCSqGSIb3DQEBCwUAA4IC
AQADyPaec28qc1HQtAV5dscJr47k92RTfvan+GEgIwyQDHZQm38eyTb05xipQCdk
5ruUDFXLB5qXXFJKUbQM6IpaktmWDJqk4Zn+1nGbtFEbKgrF55pd63+NQer5QW9o
3+dGj0eZJa3HX5EBkd2r7j2LFuB6uxv3r/xiTeHaaflCnsmyDLfb7axvYhyEzHQS
AUi1bR+ln+dXewdtuojqc1+YmVGDgzWZK2T0oOz2E21CpZUDiP3wv9QfMaotLEal
zECnbhS++q889inN3GB4kIoN6WpPpeYtTV+/r7FLv9+KUOV1s2z6mxIqC5wBFhZs
0Sr1kVo8hB/EW/YYhDp99LoAOjIO6nn1h+qttfzBYr6C16j+8lGK2A12REJ4LiUQ
cQI/0zTjt2C8Ns6ueNzMLQN1Mvmlg1Z8wIB7Az7jsIbY2zFJ0M5qR5VJveTj33K4
4WSbC/zMWOBYHTVBvGmc6JGhu5ZUTZ+mWP7QfimGu+tdhvtrybFjE9ROIE/4yFr6
GkxEyt0UY87TeKXJ/3KygvkMwdvqGWiZhItb807iy99+cySujtbGfF2ZXYGjBXVW
dJOVRbyGQkHh6lrWHQM4ntBv4x+5QA+OAan5PBF3tcDx1vefPx+asYslbOXpzII5
qhvoQxuRs6j5jsVFG6RdsKNeQAt87Mb2u2zK2ZakMdyD1w==
AQCteAb5/bqhHr/i5CJbDzlofprXFC826c19GxQ/9Hw0kA52l0J9Q8Vz8Vy7VQyP
QNa8MCv6FeNy8a/wXp6cafyFsBtvehVQO8lFlpCgMEl2Bma43+GaCwkrM6bFNXeW
iQ9h4e1KjsUZ8cQDNEcamiJ80+xbMhBrj5bAZwKmZs8MoGEMyXKEZmcmwA+/fy1c
cx4izsOsmRXmEHXsvB9ydJHZZeKW8+r0DAtgPslwXuXHG6MuBQo7dKCqn+iMxHXV
Jxriq3yvNffdGx4maSLJrjQ1ealt/UMzql7huVSItnVFWoYf7GAELXNJ/PmqVyaK
q11LQ8W/Aud6s/bblaJrFJnK8PbPpaw4RvHoWVLYaZYmQnV2msWs5EuESBlEADbv
UklQXLMc2f9HKWPA5678nvYPrmu8IL5pMkAxgGRqmd+7vCz4lU9M5z3HObU+WRBt
qEMYyXywV8o3tbmnlDS5S5Xxf+tLZn1cxz3ZrmcHPHDbLBNdvszF3CTJH/R2sQvD
bizvYJM+p5F+GWM5mt6w0HrOut5MRlpOws/NRrkbijuVA/A45nzTtKplIFYE3qe8
q5SAbwYLc8cJcZCN3PxtWwbEv81V33abMt5QcjnWGLH5t2+1Z2KLCgKLSCQTxM8s
zBPHtUe8qtSQaElnNLILYbtJ1w67dPnGYTphHihC+CXjBg==
-----END CERTIFICATE-----
@@ -1,32 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFeTCCA2GgAwIBAgIEZZozujANBgkqhkiG9w0BAQ0FADBtMQswCQYDVQQGEwJY
WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEWMBQGA1UEAwwNbWVlaEBtYWlsLmky
cDAeFw0xNDA2MjgyMjQ5MDlaFw0yNDA2MjcyMjQ5MDlaMG0xCzAJBgNVBAYTAlhY
MQswCQYDVQQIEwJYWDELMAkGA1UEBxMCWFgxHjAcBgNVBAoTFUkyUCBBbm9ueW1v
dXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRYwFAYDVQQDDA1tZWVoQG1haWwuaTJw
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnVnmPE4uUvCky0yCnnVH
cJEDqzwDPupx0zr0YDlhZk5VOPPecx5haayJ/V6nXPc1aVVWn+CHfedcF2aBgN4K
5aBueS/l6l5WHcv02DofAqlTmyAws3oQeR1qoTuW24cKRtLR7h5bxv63f6bgp6e+
RihFNez6UxErnRPuJOJEO2Im6EgVp6fz7tQ7R35zxAUeES2YILPySvzy2vYm/EEG
jXX7Ap2A5svVo90xCMOeUZ/55vLsjyIshN+tV87U4xwvAkUmwsmWVHm3BQpHkI6z
zMJie6epB8Bqm0GYm0EcElJH4OCxGTvDLoghpswbuUO7iy3JSfoL7ZCnoiQdK9K4
yVVChj8lG+r7KaTowK96iZep+sZefjOt5VFGuW2Fi/WBv3ldiLlJAo/ZfrUM4+vG
fyNBXbl6bX87uTCGOT1p3dazo+zJMsAZ+Y93DlM/mDEWFa1kKNrs74syzaWEqF4L
KQE6VoYn80OOzafSigTVQgSwUtQtB0XGhMzJhyxU2XHWe1LFIy7Pta0B+lDiZj7c
I8nXxYjsDfEu/Elj/Ra9N6bH0awmgB5JDa+Tbir+oEM5SyDfpSaCGuatdGxjweGI
kVmFU0SqCZV/8TXbIu6MUVzTZMZVT94edifFSRad4fqw7eZbSXlPu++3d1/btn6h
ibM04nkv0mm+FxCKB/wdAkECAwEAAaMhMB8wHQYDVR0OBBYEFO7jIkSRkoXyJcho
9/Q0gDOINa5EMA0GCSqGSIb3DQEBDQUAA4ICAQBzfWO7+8HWOKLaYWToJ6XZbpNF
3wXv1yC4W/HRR80m4JSsq9r0d7838Nvd7vLVP6MY6MaVb/JnV76FdQ5WQ6ticD0Y
o3zmpqqbKVSspN0lrkig4surT88AjfVQz/vEIzKNQEbpzc3hC2LCiE2u+cK/ix4j
b9RohnaPvwLnew5RNQRpcmk+XejaNITISr2yQIwXL7TEYy8HdGCfzFSSFhKe9vkb
GsWS5ASrUzRoprswmlgRe8gEHI+d51Z7mWgna0/5mBz9bH/3QXtpxlLWm3bVV+kt
pZjQDTHE0GqG2YsD1Gmp4LU/JFhCojMTtiPCXmr9KFtpiVlx06DuKm5PC8Ak+5w+
m/DQYYfv9z+AA5Y430bjnzwg67bhqVyyek4wcDQinFswv3h4bIB7CJujDcEqXXza
lhG1ufPPCUTMrVjh7AShohZraqlSlyQPY9vEppLwD4W1d+MqDHM7ljOH7gQYaUPi
wE30AdXEOxLZcT3aRKxkKf2esNofSuUC/+NXQvPjpuI4UJKO3eegi+M9dbnKoNWs
MPPLPpycecWPheFYM5K6Ao63cjlUY2wYwCfDTFgjA5q8i/Rp7i6Z6fLE3YWJ4VdR
WOFB7hlluQ//jMW6M1qz6IYXmlUjcXl81VEvlOH/QBNrPvX3I3SYXYgVRnVGUudB
o3eNsanvTU+TIFBh2Q==
-----END CERTIFICATE-----
@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIEbNbRPjANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEZMBcGA1UEAwwQb3JpZ25hbEBtYWls
LmkycDAeFw0yMTA3MDYyMjExMDFaFw0zMTA3MDQyMjExMDFaMHAxCzAJBgNVBAYT
AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEMMAoGA1UECwwDSTJQMRkwFwYDVQQDDBBvcmlnbmFsQG1h
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvNJz2KGuAkHP
tGFobfLvpybtxB50fkcEsTc9opmiy7wBKK9rSI01VS616IhABkWKZVfK2A9NqpGv
v/CyhTKoaeSNeXY7+zORUWgWK/zA9fA4GRZFqlW8j4tbompDwcLYNqRBCsn1C0OY
YA5JhXPBixMcnXl8N8x4sXhQ4l9R3+QrydhUHRvgDc8dOxRyIX7zuQAyf8tmA2Xo
xZLdvDcCJdLBIbFwxhIceIhgcOwaOx7oRkZDZdYcLJd3zjyPbu8JtOM2ZkwH7r+0
ro5PktuDp2LAS6SII5yYNcwcrvPZGPqhLdifIw1BrdTIb/rIkQZ5iXOOdyPmT7e8
IwAJcPFlfvrS4Vbi9oDqyx3aDUBoubgmFnO1TirL56ck83R/ubcKtdnyzAn5dp+f
ZNYW6/foSBpDDOCViylbFAR5H0HJEbBns7PZx6mGEEI4tUAJdNYl7Ly7Df60a9Rz
cD/gz08U9UwFXYKoT6roEjToADGAzb5MI4cVlAb2AmQaMNXNe04HcDL1bU50mkNU
amqPv8nxf72fBQCEmZz2G57T6QiYTtcCwiWS1QdWsuaOtCo9zO0MKcjzSdUxuxEc
dXhjQdNegsgg/Xk7bJ8lKOsACqMpFftdPmuyeZU2t+3RPuBpV/0j2qUfg/y6kb0z
CxAOYmlcL4kqw4VT+5V/EeZLIG0h9I0CAwEAAaMhMB8wHQYDVR0OBBYEFD/wJObg
CCDuhMJCVWTSTj+B3rsUMA0GCSqGSIb3DQEBDQUAA4ICAQC0PjsTSPWlGbLNeeI8
F0B5xAwXYJzZ7/LRxh8u42HDUqVIDjqkuls1l3v9D7htty2Gr3Ws2dcvcOr2KcOy
mEWg+jdP/N3vt9IkZeVS4YQoPgq6orn7lVkk00bcKb24f7ZnoQnnVV0/m42Y5P4j
LLh+8MBxsez9azXyZbDVEkgsMUAkdVO6KNz6scqz7wb8egV2GAMAp7cwChC6lanK
gv9ZyJhG/HdTv6VyuMZhJy6rX4geM97tm1iHu1VLsQcIzBKAdEvWJv8ofMeiyINe
hqAP9NYaeowKi975NOrmf+XZwxd0niApIohV684RCVUfL8H7HSPbdXhBJ/WslyDP
cTGhA2BLqEXZBn/nLQknlnl0SZTQxG2n4fEgD1E5YS/aoBrig/uXtWm2Zdf8U3mM
+bNXhbi9s7LneN2ye8LlNJBSRklNn/bNo8OmzLII1RQwf1+vaHT96lASbTVepMZ/
Y9VcC8fAmho/zfQEKueLEB03K+gr2dGD+1crmMtUBjWJ9vPjtooZArtkDbh+kVYA
cx4N4NXULRwxVWZe5wTQOqcZ3qSS1ClMwaziwychGaj8xRAirHMZnlPOZO1UK4+5
8F4RMJktyZjNgSLP76XPS4rJK5fobuPqFeA4OpDFn/5+/XeQFF6i6wntx1tzztzH
zc+BrVZOdcYPqu9iLXyRQ9JwwA==
-----END CERTIFICATE-----
@@ -0,0 +1,33 @@
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
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
LD8d2z2Lgg==
-----END CERTIFICATE-----
@@ -1,34 +0,0 @@
-----BEGIN CERTIFICATE-----
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
Q5DD3jExbpwG5n35HEcHYw==
-----END CERTIFICATE-----
@@ -1,31 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFVDCCAzwCCQC2r1XWYtqtAzANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMRMwEQYDVQQKDApQdXJwbGUgSTJQ
MQ0wCwYDVQQLDARJMlBEMR8wHQYJKoZIhvcNAQkBFhBvcmlnbmFsQG1haWwuaTJw
MB4XDTE1MDIyMjEzNTgxOFoXDTI1MDIxOTEzNTgxOFowbDELMAkGA1UEBhMCWFgx
CzAJBgNVBAgMAlhYMQswCQYDVQQHDAJYWDETMBEGA1UECgwKUHVycGxlIEkyUDEN
MAsGA1UECwwESTJQRDEfMB0GCSqGSIb3DQEJARYQb3JpZ25hbEBtYWlsLmkycDCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALp3D/gdvFjrMm+IE8tHZCWE
hQ6Pp0CCgCGDBC3WQFLqR98bqVPl4UwRG/MKY/LY7Woai06JNmGcpfw0LMoNnHxT
bvKtDRe/8kQdhdLHhgIkWKSbMvTAl7uUdV6FzsPgDR0x7scoFVWEhkF0wfmzGF2V
yr/WCBQejFPu69z03m5tRQ8Xjp2txWV45RawUmFu50bgbZvLCSLfTkIvxmfJzgPN
pJ3sPa/g7TBZl2uEiAu4uaEKvTuuzStOWCGgFaHYFVlTfFXTvmhFMqHfaidtzrlu
H35WGrmIWTDl6uGPC5QkSppvkj73rDj5aEyPzWMz5DN3YeECoVSchN+OJJCM6m7+
rLFYXghVEp2h+T9O1GBRfcHlQ2E3CrWWvxhmK8dfteJmd501dyNX2paeuIg/aPFO
54/8m2r11uyF29hgY8VWLdXtqvwhKuK36PCzofEwDp9QQX8GRsEV4pZTrn4bDhGo
kb9BF7TZTqtL3uyiRmIyBXrNNiYlA1Xm4fyKRtxl0mrPaUXdgdnCt3KxOAJ8WM2B
7L/kk9U8C/nexHbMxIZfTap49XcUg5dxSO9kOBosIOcCUms8sAzBPDV2tWAByhYF
jI/Tutbd3F0+fvcmTcIFOlGbOxKgO2SfwXjv/44g/3LMK6IAMFB9UOc8KhnnJP0f
uAHvMXn1ahRs4pM1VizLAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAIOxdaXT+wfu
nv/+1hy5T4TlRMNNsuj79ROcy6Mp+JwMG50HjTc0qTlXh8C7nHybDJn4v7DA+Nyn
RxT0J5I+Gqn+Na9TaC9mLeX/lwe8/KomyhBWxjrsyWj1V6v/cLO924S2rtcfzMDm
l3SFh9YHM1KF/R9N1XYBwtMzr3bupWDnE1yycYp1F4sMLr5SMzMQ0svQpQEM2/y5
kly8+eUzryhm+ag9x1686uEG5gxhQ1eHQoZEaClHUOsV+28+d5If7cqcYx9Hf5Tt
CiVjJQzdxBF+6GeiJtKxnLtevqlkbyIJt6Cm9/7YIy/ovRGF2AKSYN6oCwmZQ6i1
8nRnFq5zE7O94m+GXconWZxy0wVqA6472HThMi7S+Tk/eLYen2ilGY+KCb9a0FH5
5MOuWSoJZ8/HfW2VeQmL8EjhWm5F2ybg28wgXK4BOGR3jQi03Fsc+AFidnWxSKo0
aiJoPgOsfyu8/fnCcAi07kSmjzUKIWskApgcpGQLNXHFK9mtg7+VA8esRnfLlKtP
tJf+nNAPY1sqHfGBzh7WWGWal5RGHF5nEm3ta3oiFF5sMKCJ6C87zVwFkEcRytGC
xOGmiG1O1RPrO5NG7rZUaQ4y1OKl2Y1H+nGONzZ3mvoAOvxEq6JtUnU2kZscpPlk
fpeOSDoGBYJGbIpzDreBDhxaZrwGq36k
-----END CERTIFICATE-----
-1
View File
@@ -1 +0,0 @@
8ac8c1452a00b9654755be88ab805982c1d56a92
-1
View File
@@ -1 +0,0 @@
af5de0612c40f715740fd4d168aa444b4baca790
+4 -11
View File
@@ -2,8 +2,9 @@
## See https://i2pd.readthedocs.org/en/latest/configuration.html
## for more options you can use in this file.
#log = file
#logfile = ./i2pd.log
# log = file
# logfile = ./i2pd.log
loglevel = none
ipv4 = true
ipv6 = false
@@ -11,7 +12,7 @@ ipv6 = false
bandwidth = O
[precomputation]
elgamal = true
elgamal = false
[upnp]
enabled = true
@@ -20,9 +21,6 @@ name = I2Pd
[reseed]
verify = true
[addressbook]
subscriptions = http://inr.i2p/export/alive-hosts.txt,http://identiguy.i2p/hosts.txt,http://stats.i2p/cgi-bin/newhosts.txt,http://i2p-projekt.i2p/hosts.txt
[http]
enabled = true
address = 127.0.0.1
@@ -42,8 +40,3 @@ port = 4447
enabled = true
address = 127.0.0.1
port = 7656
[ntcp2]
enabled = true
published = true
#port =
-16
View File
@@ -1,11 +1,3 @@
#[IRC]
#type = client
#address = 127.0.0.1
#port = 6668
#destination = irc.postman.i2p
#destinationport = 6667
#keys = irc-keys.dat
#[SMTP]
#type = client
#address = 127.0.0.1
@@ -22,12 +14,4 @@
#destinationport = 110
#keys = pop3-keys.dat
#[MTN]
#type = client
#address = 127.0.0.1
#port = 8998
#destination = mtn.i2p-projekt.i2p
#destinationport = 4691
#keys = mtn-keys.dat
# see more examples in /usr/share/doc/i2pd/configuration.md.gz
-7
View File
@@ -1,7 +0,0 @@
#[IRC-ILITA]
#type = client
#address = 127.0.0.1
#port = 6669
#destination = irc.ilita.i2p
#destinationport = 6667
#keys = irc-keys.dat
@@ -0,0 +1,7 @@
[IRC-ILITA]
type = client
address = 127.0.0.1
port = 6669
destination = irc.ilita.i2p
destinationport = 6667
keys = irc-keys.dat
-7
View File
@@ -1,7 +0,0 @@
#[IRC-IRC2P]
#type = client
#address = 127.0.0.1
#port = 6668
#destination = irc.postman.i2p
#destinationport = 6667
#keys = irc-keys.dat
@@ -0,0 +1,7 @@
[IRC-IRC2P]
type = client
address = 127.0.0.1
port = 6668
destination = irc.postman.i2p
destinationport = 6667
keys = irc-keys.dat
View File
+1 -1
View File
@@ -10,7 +10,7 @@ What **MUST** work now (needed test)
How to use
-----
1. Build pre-configured Firefox using script `build.sh` from `build` folder
1. Build pre-configured Firefox using script `./build` from `build` folder
2. Run I2Pd by executing `./i2pd` from `i2pd` folder
3. Run Firefox by executing `./i2pdbrowser-portable`
+30 -22
View File
@@ -1,6 +1,6 @@
#!/bin/sh
# Copyright (c) 2013-2019, The PurpleI2P Project
# Copyright (c) 2013-2024, The PurpleI2P Project
# This file is part of Purple I2P project and licensed under BSD3
# See full license text in LICENSE file at top of project tree
@@ -12,15 +12,20 @@ cd $dir
arch=$(uname -m)
language=$(osascript -e 'user locale of (get system info)' | sed -e 's/_/-/g')
version="60.7.1esr"
i2pdversion="2.26.0"
version="115.17.0esr"
i2pdversion="2.54.0"
ftpmirror="https://ftp.mozilla.org/pub/firefox/releases/${version}"
curlfind=$(which curl)
if [ -z $curlfind ]; then
echo "'cURL' does not seem to be installed. The script needs it!";
exit 1;
echo "'cURL' does not seem to be installed. The script needs it!"
exit 1
fi
# We support only English (US) and Russian
if [ "$language" != "ru" ]; then
language="en-US"
fi
echo "This script is preparing Firefox $version for use with I2Pd"
@@ -33,14 +38,14 @@ echo "Downloading $application..."
tmpfilepath=$(echo $filepath | sed 's/ /%20/g')
curl -L -f -# -o "${file}" "${ftpmirror}/${tmpfilepath}"
if [ $? -ne 0 ]; then # Not found error, trying to cut language variable
echo "[TRY 2] I'll try downloading Firefox with shorter language code";
echo "[TRY 2] I'll try downloading Firefox with shorter language code"
language=$(echo $language | cut -c-2)
# re-create variable with cutted lang
filepath="mac/$language/$file"
tmpfilepath=$(echo $filepath | sed 's/ /%20/g')
curl -L -f -# -o "${file}" "${ftpmirror}/${tmpfilepath}"
if [ $? -ne 0 ]; then # Not found error, trying to download english version
echo "[TRY 3] I'll try downloading Firefox with the English language code";
echo "[TRY 3] I'll try downloading Firefox with the English language code"
language="en_US"
# re-create lang variable
filepath="mac/$language/$file"
@@ -48,14 +53,14 @@ if [ $? -ne 0 ]; then # Not found error, trying to cut language variable
curl -L -f -# -o "${file}" "${ftpmirror}/${tmpfilepath}"
if [ $? -ne 0 ]; then # After that i can say only that user haven't internet connection
echo "[Error] Can't download file. Check your internet connectivity."
exit 1;
exit 1
fi
fi
fi
if [ ! -f $file ]; then
if [ ! -f "$file" ]; then
echo "[Error] Can't find downloaded file. Does it really exist?"
exit 1;
exit 1
fi
echo "Downloading checksum file and checking SHA512 checksum"
@@ -64,7 +69,7 @@ recv_sum=$(grep "$filepath" SHA512SUMS | cut -c-128)
file_sum=$(shasum -a 512 "$file" | cut -c-128)
if [ $recv_sum != $file_sum ]; then
echo "[Error] File checksum failed!"
exit 1;
exit 1
else
echo "Checksum correct."
rm SHA512SUMS
@@ -72,7 +77,7 @@ fi
echo "Attaching image and copying files..."
hdiutil attach "$file"
cp -rf /Volumes/Firefox/Firefox.app ../FirefoxESR.app
cp -r /Volumes/Firefox/Firefox.app ../FirefoxESR.app
mkdir ../data
echo "Detaching image and removing image file..."
@@ -85,14 +90,8 @@ rm -r ../FirefoxESR.app/Contents/Library
rm -r ../FirefoxESR.app/Contents/MacOS/crashreporter.app
rm ../FirefoxESR.app/Contents/MacOS/pingsender
rm -r ../FirefoxESR.app/Contents/MacOS/updater.app
rm ../FirefoxESR.app/Contents/Resources/browser/blocklist.xml
rm ../FirefoxESR.app/Contents/Resources/browser/crashreporter-override.ini
rm ../FirefoxESR.app/Contents/Resources/browser/features/aushelper@mozilla.org.xpi
rm ../FirefoxESR.app/Contents/Resources/browser/features/firefox@getpocket.com.xpi
rm ../FirefoxESR.app/Contents/Resources/browser/features/followonsearch@mozilla.com.xpi
rm ../FirefoxESR.app/Contents/Resources/browser/features/formautofill@mozilla.org.xpi
rm ../FirefoxESR.app/Contents/Resources/browser/features/jaws-esr@mozilla.org.xpi
rm ../FirefoxESR.app/Contents/Resources/browser/features/onboarding@mozilla.org.xpi
rm ../FirefoxESR.app/Contents/Resources/browser/features/screenshots@mozilla.org.xpi
rm ../FirefoxESR.app/Contents/Resources/precomplete
rm ../FirefoxESR.app/Contents/Resources/removed-files
@@ -103,15 +102,24 @@ sed -i '' -e "s/ServerURL=.*/ServerURL=-/" "../FirefoxESR.app/Contents/Resources
# Done!
echo "Downloading language packs..."
curl -L -f -# -o ../FirefoxESR.app/Contents/Resources/browser/extensions/langpack-ru@firefox.mozilla.org.xpi "https://addons.mozilla.org/firefox/downloads/file/978562/russian_ru_language_pack-60.0buildid20180605171542-an+fx.xpi"
curl -L -f -# -o ../FirefoxESR.app/Contents/Resources/browser/extensions/langpack-en-US@firefox.mozilla.org.xpi "https://addons.mozilla.org/firefox/downloads/file/978493/english_us_language_pack-60.0buildid20180605171542-an+fx.xpi"
mkdir ../FirefoxESR.app/Contents/Resources/browser/extensions
curl -L -f -# -o ../FirefoxESR.app/Contents/Resources/browser/extensions/langpack-ru@firefox.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/4144376/russian_ru_language_pack-115.0.20230726.201356.xpi
curl -L -f -# -o ../FirefoxESR.app/Contents/Resources/browser/extensions/ruspell-wiktionary@addons.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/4215701/2696307-1.77.xpi
curl -L -f -# -o ../FirefoxESR.app/Contents/Resources/browser/extensions/langpack-en-US@firefox.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/4144407/english_us_language_pack-115.0.20230726.201356.xpi
curl -L -f -# -o ../FirefoxESR.app/Contents/Resources/browser/extensions/en-US@dictionaries.addons.mozilla.org.xpi https://addons.mozilla.org/firefox/downloads/file/4175230/us_english_dictionary-115.0.xpi
echo "Downloading NoScript extension..."
curl -L -f -# -o ../FirefoxESR.app/Contents/Resources/browser/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi "https://addons.mozilla.org/firefox/downloads/file/3028550/noscript_security_suite-10.6.3-an+fx.xpi"
curl -L -f -# -o ../FirefoxESR.app/Contents/Resources/browser/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi https://addons.mozilla.org/firefox/downloads/file/4377088/noscript-11.5.0.xpi
echo "Adding standard configs..."
cp profile/* ../data/
cp -r preferences/* ../FirefoxESR.app/Contents/Resources/
cp -r profile/* ../data/
if [ "$language" = "ru" ]; then
cp -r profile-ru/* ../data/
else
cp -r profile-en/* ../data/
fi
echo '#!/bin/sh' > "../i2pdbrowser-portable"
echo 'dir=${0%/*}' >> "../i2pdbrowser-portable"
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICKDCCAc6gAwIBAgIUcPHZXtYSqGNRCD6z8gp79WUFtI0wCgYIKoZIzj0EAwIw
gZMxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEPMA0GA1UEBwwGQXVzdGlu
MRgwFgYDVQQKDA9TdG9ybXlDbG91ZCBJbmMxIzAhBgNVBAMMGnN0b3JteWNsb3Vk
LmZhbWlseS5pMnAubmV0MSQwIgYJKoZIhvcNAQkBFhVhZG1pbkBzdG9ybXljbG91
ZC5vcmcwHhcNMjIwMzE5MTU1MjU2WhcNMzIwMzE2MTU1MjU2WjCBkzELMAkGA1UE
BhMCVVMxDjAMBgNVBAgMBVRleGFzMQ8wDQYDVQQHDAZBdXN0aW4xGDAWBgNVBAoM
D1N0b3JteUNsb3VkIEluYzEjMCEGA1UEAwwac3Rvcm15Y2xvdWQuZmFtaWx5Lmky
cC5uZXQxJDAiBgkqhkiG9w0BCQEWFWFkbWluQHN0b3JteWNsb3VkLm9yZzBZMBMG
ByqGSM49AgEGCCqGSM49AwEHA0IABFUli0hvJEmowNjJVjbKEIWBJhqe973S4VdL
cJuA5yY3dC4Y998abWEox7/Y1BhnBbpJuiodA341bXKkLMXQy/kwCgYIKoZIzj0E
AwIDSAAwRQIgD12F/TfY3iV1/WDF7BSKgbD5g2MfELUIy1dtUlJQuJUCIQD69mZw
V1Z9j2x0ZsuirS3i6AMfVyTDj0RFS3U1jeHzIQ==
-----END CERTIFICATE-----
@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIEctG1gDANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEZMBcGA1UEAwwQYWNldG9uZUBtYWls
LmkycDAeFw0yMTAxMjUxMDMyMjBaFw0zMTAxMjMxMDMyMjBaMHAxCzAJBgNVBAYT
AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEMMAoGA1UECwwDSTJQMRkwFwYDVQQDDBBhY2V0b25lQG1h
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwqF/BRRmvZ54
5XArgxbytDi7m7MDjFE/whUADruHj/9jXGCxE8DDiiKTt3yhfakV0SNo5xk7AMD+
wqiSNC5JCHTm18gd2M4cQLIaOVRqucLLge4XVgk2WPX6OT98wfxh7mqA3wlSdEpj
dY3Txtkf7VfZLicG76/RBtLFW3aBdsn63hZaQqZE4x/5MJyPVZx59+lys5RmMi0o
LpXJy4HOu1/Gl1iKDJoI/ARFG3y7uP/B+ZtZBitJetTs0HcqycnNJq0tVZf2HiGF
JNy67AL4foxNYPXP6QsvXvp6LRpGANaBCkFCBlriSF+x1zO2H3uAkRnuLYXuKIfB
HudejTp4R57VgZGiHYoawHaF17FVAApue9G8O82XYECjhET35B9yFoOBHTvaMxLU
CKrmayH8KMQon95mfe1qpoO3/YDa8DCxkjAfjdtytat7nt2pGZMH6/cLJxcFiofh
RtRVvb+omv/X12j/6iCFrwP4NvBnAZsa736igbjpyee5n+CSyYxd9cJkRX1vQVk7
WFSqL58Pz+g6CKJmdMPvqNOfUQ6mieBeejmx35B4pLzLcoNxw8R3O1+I2l4dg042
dEydKRQNwdzOec4jYwnKR40iwIyZxpchXWGRbBdyF5RQCbIIo60QBJlfXMJ2svan
q5lYIeWeY3mlODXu4KH4K09y10KT8FsCAwEAAaMhMB8wHQYDVR0OBBYEFMh+DoIL
APNiu2o+6I9A49joNYQuMA0GCSqGSIb3DQEBDQUAA4ICAQBFeOJi0rmkqN5/E3IB
nE2x4mUeLI82tUcN2D3Yu8J81vy4DnH+oMRQFDtYEHW5pfirRmgSZ7MQwYQnqWLp
iTE7SyCxlqGrmVsYp7PzfS1pUT2QeWPtsNYUDdraG0Zr9BkIGB60VMhjMSa9WUrj
lbchzr6E/j/EsEOE7IK08JxIDKCDZM2LLwis4tAM6tmiylkMf2RlUBIRBs1TCO+q
x3yByttNE2P4nQyQVQpjc1qsaOMvJvbxun37dwo+oTQy+hwkA86BWTDRYdN3xwOk
OfAOtlX6zM/wCKMN0ZRnjZoh59ZCn4JXokt3IjZ4n8qJOuJFRKeKGmGeKA8uaGW8
ih5tdB99Gu5Z8LOT1FxAJKwQBn5My0JijPoMit4B0WKNC8hy2zc2YvNfflu1ZRj5
wF4E5ktbtT/LWFSoRPas/GFS8wSXk/kbSB0ArDcRRszb3JHqbALmSQxngz3rfwb3
SHwQIIg956gjMDueEX5CrGrMqigiK53b9fqtpghUrHDsqtEXqeImpAY65PX1asqo
metDNuETHF7XrAjP7TGJfnrYQyeK90iS7j1G68ScBGkKY2nsTnFoXkSk5s5D338E
SUzPaOlh91spmkVY6gQTVQ7BakADBHw+zBgDA1gBN/4JPvgN36hquj63+aG1cKy3
3ZUnv2ipo2fpr69NtuBnutK6gw==
-----END CERTIFICATE-----
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIF1zCCA7+gAwIBAgIRAMDqFR09Xuj8ZUu+oetSvAEwDQYJKoZIhvcNAQELBQAw
dTELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwGA1UE
ChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxHjAcBgNVBAMM
FWFkbWluQHN0b3JteWNsb3VkLm9yZzAeFw0yNDAxMjUxNDE1MzBaFw0zNDAxMjUx
NDE1MzBaMHUxCzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgx
HjAcBgNVBAoTFUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMR4w
HAYDVQQDDBVhZG1pbkBzdG9ybXljbG91ZC5vcmcwggIiMA0GCSqGSIb3DQEBAQUA
A4ICDwAwggIKAoICAQDbGX+GikPzQXr9zvkrhfO9g0l49KHLNQhUKYqd6T+PfnGo
Fm0d3ZZVVQZ045vWgroOXDGGZZWxUIlb2inRaR2DF1TxN3pPYt59RgY9ZQ9+TL7o
isY91krCRygY8EcAmHIjlfZQ9dBVcL7CfyT0MYZA5Efee9+NDHSewTfQP9T2faIE
83Fcyd93a2mIHYjKUbJnojng/wgsy8srbsEuuTok4MIQmDj+B5nz+za2FgI0/ydh
srlMt4aGJF4/DIem9z9d0zBCOkwrmtFIzjNF1mOSA8ES4m5YnKA/y9rZlRidLPGu
prbXhPVnqHeOnHMz2QCw1wbVo504kl0bMqyEz2tVWsO9ep7iZoQs2xkFAEaegYNT
QLUpwVGlyuq3wXXwopFRffOSimGSazICwWI6j+K0pOtgefNJaWrqKYvtkj1SbK2L
LBNUIENz6VnB7KPRckuX6zxC8PpOiBK9BcftfO+xAz/wC6qq3riBPw30KKSym0nC
Zp5KciDn4Phtw9PGq8Bkl8SyWl0jtFnfTB1tzJkisf2qKcNHaFTEe2JW763YLbh/
AU+8X8evFu40qLgvOgKoyy5DLy6i8zetX+3t9K0Fxt9+Vzzq6lm5V/RS8iIPPn+M
q1/3Z5kD0KQBG9h/Gl8BH+lB71ZxPAOZ3SMu8DJZcxBLVmDWqQPCr5CKnoz0swID
AQABo2IwYDAOBgNVHQ8BAf8EBAMCAoQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsG
AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHgYDVR0OBBcEFWFkbWluQHN0b3JteWNs
b3VkLm9yZzANBgkqhkiG9w0BAQsFAAOCAgEARWOJ69vTHMneSXYscha+4Ytjg0RM
faewJNEGj8qy/Qvh9si2bWYNPRK6BlbHFS7pRYBLAnhaeLBGVv1CCR6GUMMe74zQ
UuMeAoWU6qMDmB3GfYoZJh8sIxpwHqyJeTdeccRbZ4sX4F6u3IHPXYiU/AgbYqH7
pYXQg2lCjXZYaDFAlEf5SlYUDOhhXe5kR8Edhlrsu32/JzA1DQK0JjxKCBp+DQmA
ltdOpQtAg03fHP4ssdj7VvjIDl28iIlATwBvHrdNm7T0tYWn6TWhvxbRqvfTxfaH
MvxnPdIJwNP4/9TyQkwjwHb1h+ucho3CnxI/AxspdOvT1ElMhP6Ce6rcS9pk11Rl
x0ChsqpWwDg7KYpg0qZFSKCTBp4zBq9xoMJ6BQcgMfyl736WbsCzFTEyfifp8beg
NxUa/Qk7w7cuSPGyMIKNOmOR7FLlFbtocy8sXVsUQdqnp/edelufdNe39U9uNtY6
yoXI9//Tc6NgOwy2Oyia0slZ5qHRkB7e4USXMRzJ3p4q9eCVKjAJs81Utp7O2U+9
vhbhwWP8CAnNTT1E5WS6EKtfrdqF7wjkV+noPGLDGmrXi01J1fSMAjMfVO+7/LOL
UN+G4ybKWnEhhOO27yidN8Xx6UrCS23DBlPPQAeA74dTsTExiOxf1o1EXzcQiMyO
LAj3/Ojbi1xkWhI=
-----END CERTIFICATE-----
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
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
+XBgkaYA4iEwYKqlCQ==
-----END CERTIFICATE-----
@@ -0,0 +1,33 @@
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
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
CCOJyu3XtyzFf+tAeixOnuQ=
-----END CERTIFICATE-----
@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFgTCCA2mgAwIBAgIETWAY1DANBgkqhkiG9w0BAQ0FADBxMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEaMBgGA1UEAwwRaGlkdXNlcjBAbWFp
bC5pMnAwHhcNMjExMjEzMTU0MDI3WhcNMzExMjExMTU0MDI3WjBxMQswCQYDVQQG
EwJYWDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5v
bnltb3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEaMBgGA1UEAwwRaGlkdXNlcjBA
bWFpbC5pMnAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXnjJ8UQ0f
lHHpfPMiHofBPSuL4sbOJY6fOXwPhSg/h6THh9DS/ZWmJXQ3qRD0glDVtv4/Dr/9
ldGQ5eltF9iCFXCQlMEy2HjQrBKq0nsl7RpYK12cyMaod0kkzCUk9ITLi9CmHM3Z
gQZcmG8TWjFEpDR+idx/QkQt2pcO4vzWlDit3Vh4ivnbX5jGQHbsVjQEMQWxr+pX
dsS+YQpjZ6RBmrooGTPO8QDOOeYLAn0lCjmffc/kzIH9E/p4/O0rOpyhVYbdxUD1
5wkqN9l4yrtxmORG/PudnRQQ0r4TUq8vsxfGY0Euo9IbhgXF2Parel1ZhDxB1WZV
VwWtgLIh9jGA1UMa8SYKnEfp8LWNZ3b3mUUnZb3kMrLk6jGYRWNsHmamhd4mC7AZ
qf/8lOkEIw3bPd3YguCDRVcLui5BwIEZmqXg8uoESxfO/sW3pBrN/8M7MkTex9kN
vjitGDDXvenK27qmNgZxbBlX72yTSfys7XTYTLnxZC8AwdAo2Wz9Z6HhGiPonf2h
vZkc9ZxuE0jFIrsbJra4X7iyjXgi4vV4ARNg/9Ft6F4/OIbECgeDcBQqq4TlT2bZ
EfWVrBbqXoj5vNsLigIkd+AyUNwPYEcB5IFSiiOh98pC7BH3pg0m8U5YBjxe1i+9
EQOOG0Qtx+JigXZHu6bGE0Twy9zy+UzoKQIDAQABoyEwHzAdBgNVHQ4EFgQUGK1b
0DkL6aLalcfBc/Uj/SF08C0wDQYJKoZIhvcNAQENBQADggIBAMpXM82bJDpH1TlH
TvhU3Z7nfZdvEhOQfujaFUYiuNripuEKcFGn948+DvAG0FUN+uNlJoqOVs8D7InD
gWlA9zpqw5Cl5Hij/Wns9QbXuAHJeA23fVUoaM2A6v9ifcIQ1A+rDuRQAo6/64KW
ChTg2e99RBpfGOyqgeh7tLLe0lPPekVpKHFuXabokaKRDuBcVHcUL4tWXe3dcyqa
Ej/PJrrS+nWL0EGZ4q80CEd2LPuDzPxNGCJt/R7ZfadENWajcgcXGceh1QBzozrB
SL/Ya6wF9SrsB7V/r5wX0LM4ZdDaLWbtmUe5Op0h/ZMH25Sa8xAXVz+O9L6sWSoO
FaiYTOvAiyyPz+nsxKa3xYryDHno7eKSt+hGOcaurhxbdZaEFY/CegEc73tCt9xK
e9qF8O/WkDLmixuErw3f5en4IfzGR7p3lJAwW/8WD8C6HS39h/eE7dVZNaWgtQnZ
SgGjgZMTJqTcQ3aZmfuCZefxGFok8w6AIkdbnd1pdMBRjYu8aXgl2hQSB9ZADDE9
R5d3rXi0PkSFLIvsNjVa5KXrZk/tB0Hpfmepq7CufBqjP/LG9TieRoXzLYUKFF74
QRwjP+y7AJ+VDUTpY1NV1P+k+2raubU2bOnLF3zL5DtyoyieGPhyeMMvp0fRIxdg
bSl5VHgPXHNM8mcnndMAuzvl7jEK
-----END CERTIFICATE-----
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIFzTCCA7WgAwIBAgIQeUqFi0fHNQopg6BZlBLhVzANBgkqhkiG9w0BAQsFADBy
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEbMBkGA1UEAwwS
aTJwLXJlc2VlZEBtazE2LmRlMB4XDTIyMDIwNTE3MzkzM1oXDTMyMDIwNTE3Mzkz
M1owcjELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwG
A1UEChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGzAZBgNV
BAMMEmkycC1yZXNlZWRAbWsxNi5kZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAMYxs2D2xpN/8blGawvAlU9DemHIxApOEwaLNfh8aAvqEdB41NTqcx4U
H8VchSormCfkCvezuMHO+K2HX7ihEZ1v6tbr6aX6hY9UZUyDDYsKmJoB1oKEhddv
5UYfcWPE2eSykdFsWgTQD6Z+cRQWHEoCzb7qc+Jrw6KcnHMD0VrmBrEQPzTBxMHW
4HC97PVkSLJTDArnS6ZiX4IbWRPw/mbpJT6EoVZo8J/it0pdn/X4KodEXDcnEMSe
VRulfZH/nSmOOvKhoHPckmgz/u66BlnuSYXEIB0KfDIcAlSYiPDxGnAemTozJYXA
UVMeFMs+YE5wiPgzzu+vpC31xtZLq0gyaCfgEi1P9j2ES/8pH3Gw6W2OH4kBx+jO
TBsfI+ph6qFZ3WWT23MRVyl3ATuI/GHdczTxD9JaOn74lLI+Hnu8wXnyztVWkTMB
4sAnzjdeHkvNDyQ10vSaN0HnGfg6zuAuUSqFQujFF8Vg8ZCcsh8GouWfzYDvi9mj
9pfxx8v6UCC719I4J9CgFjWnn2Hqez3fO8fFulY61VPyCCZp4gKWbI2SIQP/n5gz
ecYJRrJoem+rYfEQ/fwxROsvm3fCO4D6dt7ILRuX286GDIw2qSvP1zZVAioMwSj3
9CAjKLwD/BhTRiMOlpaVv6IWqjtevbiaIKvbHTnoxvkGsDqe3gJhAgMBAAGjXzBd
MA4GA1UdDwEB/wQEAwIChDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
DwYDVR0TAQH/BAUwAwEB/zAbBgNVHQ4EFAQSaTJwLXJlc2VlZEBtazE2LmRlMA0G
CSqGSIb3DQEBCwUAA4ICAQAb+x6XpJdjpVYw2bvWIUbatQJwq0YaEW5W61xGLgIG
a37oll3YZbSY9Vk+N1cE0f61L3ya4Ioz6zlH/MO2zUG/dEk8vqdgIPUYJvyF7wwF
w3/G4VMaDKOJx4bAZNmaiRFGYNhCOhCnZx6uZGrLNIJ2Dc+mflrGmGwYphtXVV3e
Iv+ki3gSRgfXuMfKi4B5bLPnz7XDe4TSmwZZSRac4ly4KqmZUyntqbilRxaGTej3
VYJ1tac8yppyk5N3VopMQNmBarNZG16wSOTD7CtKgn382jgRW8cR7BMeqhORivp0
ZnPJFhzh4uthdlPdXXo6lxfvZjfiwlDPytvEu2QBz3urTgopGqRLcTBnLucWg9li
OSy9z7hNEnIN3iIJJAwI1wBdDa7K0h3PFBbIUa7X2ybn81VeNSfO25Lo8YTZEKsc
wcThJrNV6qOQv8rM/7aXugi6+VzPlCR+18iKRbebCnlqGR2dT1zFtj3negtOkrjo
LH4H6VUr3q2Ie56IubS2hUKiUkDm0ckP3Vum35GGntyEAzl6uyog0hJFOJb3aq30
YQLzyVEOz8NnA+32oMRzJJdDxQ7pqG5fgq7EF4d++YSgEfdVXxvfgXQ6m3jAyC7Z
p/gX4rlxNsjeGU3Ds51wkmhH4IB1aSQr52PE6RaBhhh3SmADEv6S/3eGvE4F4MN5
2Q==
-----END CERTIFICATE-----
@@ -0,0 +1,33 @@
-----BEGIN CERTIFICATE-----
MIIFvjCCA6agAwIBAgIQBnsUOmOu2oZZIwHBmQc1BDANBgkqhkiG9w0BAQsFADBt
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEWMBQGA1UEAwwN
aWdvckBub3ZnLm5ldDAeFw0yMzAxMjgxNDM4MzFaFw0zMzAxMjgxNDM4MzFaMG0x
CzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgxHjAcBgNVBAoT
FUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRYwFAYDVQQDDA1p
Z29yQG5vdmcubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvLkf
bM3uiYfp9m0vgdoftyXtk2/9bHf3u5iaM0WfoJIsw1iizo/mxJl+Iy7SxLC16nV0
v5FpncVv+Z8x9dgoAYVuLq9zKfsAbpj6kuxAqw6vJMlD1TiIL3nSODV9BJLk47X5
tmvoOSj9BgvemYThTE3nj+DbuJRW5q90KyBV/LdLrQJX3k5R3FFL5tTad2LKFNZ4
vEOcYwwx6mvrkJ2lly6bAQUCtfc648Jyq+NO3Rba1fmn7gcP9zXXc5KYsj/ovyY2
OaocSF5wMhzBuPxO+M2HqbYLMAkc6/GesGds8Rm8wofuhJoI5YtqJuLKZm6nQXSc
fx6PKgbKcTIUWNFMsxyfghz9hpbg0rkvC7PtfAjtV0yaDtUum1eZeNEx1HbRWN2n
TQNCVuv0yaKC41qxqzhEybkdjL9JlgUh7VuskaCelB0lz+kgYjGu8ezOa0ua2iKq
4FC/1MbPulxN8NOt4pmbGqqoxmCdShp38wdnOBM3DsAS9f0JaQZd4CDyY4DCSfVn
xPdWk31+VXVt3Ixh1EUqZWYTRSsZApkCyYzkiZ/qPGG6FR9Hq2SuhC5o4P44k7eo
6wwBWD8a5RjsZhvr05E5yBrKXh/PjLwmtG73QC+ouR54/5xtedvdTwNS94FnNctX
FT6QGZnRwCkhPaRe1oQMzP+88pGoCfO33GBAuwUCAwEAAaNaMFgwDgYDVR0PAQH/
BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNVHRMBAf8E
BTADAQH/MBYGA1UdDgQPBA1pZ29yQG5vdmcubmV0MA0GCSqGSIb3DQEBCwUAA4IC
AQCteAb5/bqhHr/i5CJbDzlofprXFC826c19GxQ/9Hw0kA52l0J9Q8Vz8Vy7VQyP
QNa8MCv6FeNy8a/wXp6cafyFsBtvehVQO8lFlpCgMEl2Bma43+GaCwkrM6bFNXeW
iQ9h4e1KjsUZ8cQDNEcamiJ80+xbMhBrj5bAZwKmZs8MoGEMyXKEZmcmwA+/fy1c
cx4izsOsmRXmEHXsvB9ydJHZZeKW8+r0DAtgPslwXuXHG6MuBQo7dKCqn+iMxHXV
Jxriq3yvNffdGx4maSLJrjQ1ealt/UMzql7huVSItnVFWoYf7GAELXNJ/PmqVyaK
q11LQ8W/Aud6s/bblaJrFJnK8PbPpaw4RvHoWVLYaZYmQnV2msWs5EuESBlEADbv
UklQXLMc2f9HKWPA5678nvYPrmu8IL5pMkAxgGRqmd+7vCz4lU9M5z3HObU+WRBt
qEMYyXywV8o3tbmnlDS5S5Xxf+tLZn1cxz3ZrmcHPHDbLBNdvszF3CTJH/R2sQvD
bizvYJM+p5F+GWM5mt6w0HrOut5MRlpOws/NRrkbijuVA/A45nzTtKplIFYE3qe8
q5SAbwYLc8cJcZCN3PxtWwbEv81V33abMt5QcjnWGLH5t2+1Z2KLCgKLSCQTxM8s
zBPHtUe8qtSQaElnNLILYbtJ1w67dPnGYTphHihC+CXjBg==
-----END CERTIFICATE-----
@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIEbNbRPjANBgkqhkiG9w0BAQ0FADBwMQswCQYDVQQGEwJY
WDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhYMR4wHAYDVQQKDBVJMlAgQW5vbnlt
b3VzIE5ldHdvcmsxDDAKBgNVBAsMA0kyUDEZMBcGA1UEAwwQb3JpZ25hbEBtYWls
LmkycDAeFw0yMTA3MDYyMjExMDFaFw0zMTA3MDQyMjExMDFaMHAxCzAJBgNVBAYT
AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxHjAcBgNVBAoMFUkyUCBBbm9u
eW1vdXMgTmV0d29yazEMMAoGA1UECwwDSTJQMRkwFwYDVQQDDBBvcmlnbmFsQG1h
aWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvNJz2KGuAkHP
tGFobfLvpybtxB50fkcEsTc9opmiy7wBKK9rSI01VS616IhABkWKZVfK2A9NqpGv
v/CyhTKoaeSNeXY7+zORUWgWK/zA9fA4GRZFqlW8j4tbompDwcLYNqRBCsn1C0OY
YA5JhXPBixMcnXl8N8x4sXhQ4l9R3+QrydhUHRvgDc8dOxRyIX7zuQAyf8tmA2Xo
xZLdvDcCJdLBIbFwxhIceIhgcOwaOx7oRkZDZdYcLJd3zjyPbu8JtOM2ZkwH7r+0
ro5PktuDp2LAS6SII5yYNcwcrvPZGPqhLdifIw1BrdTIb/rIkQZ5iXOOdyPmT7e8
IwAJcPFlfvrS4Vbi9oDqyx3aDUBoubgmFnO1TirL56ck83R/ubcKtdnyzAn5dp+f
ZNYW6/foSBpDDOCViylbFAR5H0HJEbBns7PZx6mGEEI4tUAJdNYl7Ly7Df60a9Rz
cD/gz08U9UwFXYKoT6roEjToADGAzb5MI4cVlAb2AmQaMNXNe04HcDL1bU50mkNU
amqPv8nxf72fBQCEmZz2G57T6QiYTtcCwiWS1QdWsuaOtCo9zO0MKcjzSdUxuxEc
dXhjQdNegsgg/Xk7bJ8lKOsACqMpFftdPmuyeZU2t+3RPuBpV/0j2qUfg/y6kb0z
CxAOYmlcL4kqw4VT+5V/EeZLIG0h9I0CAwEAAaMhMB8wHQYDVR0OBBYEFD/wJObg
CCDuhMJCVWTSTj+B3rsUMA0GCSqGSIb3DQEBDQUAA4ICAQC0PjsTSPWlGbLNeeI8
F0B5xAwXYJzZ7/LRxh8u42HDUqVIDjqkuls1l3v9D7htty2Gr3Ws2dcvcOr2KcOy
mEWg+jdP/N3vt9IkZeVS4YQoPgq6orn7lVkk00bcKb24f7ZnoQnnVV0/m42Y5P4j
LLh+8MBxsez9azXyZbDVEkgsMUAkdVO6KNz6scqz7wb8egV2GAMAp7cwChC6lanK
gv9ZyJhG/HdTv6VyuMZhJy6rX4geM97tm1iHu1VLsQcIzBKAdEvWJv8ofMeiyINe
hqAP9NYaeowKi975NOrmf+XZwxd0niApIohV684RCVUfL8H7HSPbdXhBJ/WslyDP
cTGhA2BLqEXZBn/nLQknlnl0SZTQxG2n4fEgD1E5YS/aoBrig/uXtWm2Zdf8U3mM
+bNXhbi9s7LneN2ye8LlNJBSRklNn/bNo8OmzLII1RQwf1+vaHT96lASbTVepMZ/
Y9VcC8fAmho/zfQEKueLEB03K+gr2dGD+1crmMtUBjWJ9vPjtooZArtkDbh+kVYA
cx4N4NXULRwxVWZe5wTQOqcZ3qSS1ClMwaziwychGaj8xRAirHMZnlPOZO1UK4+5
8F4RMJktyZjNgSLP76XPS4rJK5fobuPqFeA4OpDFn/5+/XeQFF6i6wntx1tzztzH
zc+BrVZOdcYPqu9iLXyRQ9JwwA==
-----END CERTIFICATE-----
@@ -0,0 +1,33 @@
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
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
LD8d2z2Lgg==
-----END CERTIFICATE-----
View File
@@ -2,8 +2,9 @@
## See https://i2pd.readthedocs.org/en/latest/configuration.html
## for more options you can use in this file.
#log = file
#logfile = ./i2pd.log
# log = file
# logfile = ./i2pd.log
loglevel = none
ipv4 = true
ipv6 = false
@@ -11,7 +12,7 @@ ipv6 = false
bandwidth = O
[precomputation]
elgamal = true
elgamal = false
[upnp]
enabled = true
@@ -20,9 +21,6 @@ name = I2Pd
[reseed]
verify = true
[addressbook]
subscriptions = http://inr.i2p/export/alive-hosts.txt,http://identiguy.i2p/hosts.txt,http://stats.i2p/cgi-bin/newhosts.txt,http://i2p-projekt.i2p/hosts.txt
[http]
enabled = true
address = 127.0.0.1
@@ -42,8 +40,3 @@ port = 4447
enabled = true
address = 127.0.0.1
port = 7656
[ntcp2]
enabled = true
published = true
#port =
@@ -1,11 +1,3 @@
#[IRC]
#type = client
#address = 127.0.0.1
#port = 6668
#destination = irc.postman.i2p
#destinationport = 6667
#keys = irc-keys.dat
#[SMTP]
#type = client
#address = 127.0.0.1
@@ -22,12 +14,4 @@
#destinationport = 110
#keys = pop3-keys.dat
#[MTN]
#type = client
#address = 127.0.0.1
#port = 8998
#destination = mtn.i2p-projekt.i2p
#destinationport = 4691
#keys = mtn-keys.dat
# see more examples in /usr/share/doc/i2pd/configuration.md.gz
@@ -0,0 +1,7 @@
[IRC-ILITA]
type = client
address = 127.0.0.1
port = 6669
destination = irc.ilita.i2p
destinationport = 6667
keys = irc-keys.dat
@@ -0,0 +1,7 @@
[IRC-IRC2P]
type = client
address = 127.0.0.1
port = 6668
destination = irc.postman.i2p
destinationport = 6667
keys = irc-keys.dat

Some files were not shown because too many files have changed in this diff Show More