Browse Source

Merge pull request #1 from PurpleI2P/master and some changes in compiling (README + new file for libboost)

pull/58/head
wipedlifepotato 1 year ago committed by startyourday60
parent
commit
5e4bdfb7ec
  1. 75
      .github/workflows/android.yml
  2. 21
      .gitmodules
  3. 27
      LICENSE
  4. 81
      README.md
  5. 24
      app/build.gradle
  6. 37
      app/jni/Android.mk
  7. 11
      app/jni/Application.mk
  8. 154
      app/jni/DaemonAndroid.cpp
  9. 72
      app/jni/DaemonAndroid.h
  10. 2
      app/jni/android-ifaddrs
  11. 2
      app/jni/boost
  12. 80
      app/jni/build_boost.sh
  13. 92
      app/jni/build_miniupnpc.sh
  14. 93
      app/jni/build_openssl.sh
  15. 2
      app/jni/i2pd
  16. 60
      app/jni/i2pd_android.cpp
  17. 2
      app/jni/miniupnp
  18. 2
      app/jni/openssl
  19. 44
      app/jni/org_purplei2p_i2pd_I2PD_JNI.h
  20. 27
      app/src/main/AndroidManifest.xml
  21. 441
      app/src/main/assets/addressbook/addresses.csv
  22. 14
      app/src/main/assets/certificates/family/stormycloud.crt
  23. 33
      app/src/main/assets/certificates/reseed/echelon3_at_mail.i2p.crt
  24. 32
      app/src/main/assets/certificates/reseed/echelon_at_mail.i2p.crt
  25. 32
      app/src/main/assets/certificates/reseed/hiduser0_at_mail.i2p.crt
  26. 34
      app/src/main/assets/certificates/reseed/i2p-reseed_at_mk16.de.crt
  27. 32
      app/src/main/assets/certificates/reseed/orignal_at_mail.i2p.crt
  28. 33
      app/src/main/assets/certificates/reseed/rambler_at_mail.i2p.crt
  29. 31
      app/src/main/assets/certificates/router/orignal_at_mail.i2p.crt
  30. 8
      app/src/main/assets/i2pd.conf
  31. 4
      app/src/main/assets/subscriptions.txt
  32. 109
      app/src/main/java/org/purplei2p/i2pd/DaemonWrapper.java
  33. 14
      app/src/main/java/org/purplei2p/i2pd/ForegroundService.java
  34. 104
      app/src/main/java/org/purplei2p/i2pd/I2PDActivity.java
  35. 122
      app/src/main/java/org/purplei2p/i2pd/I2PDPermsAskerActivity.java
  36. 28
      app/src/main/java/org/purplei2p/i2pd/I2PD_JNI.java
  37. 2
      app/src/main/java/org/purplei2p/i2pd/NetworkStateChangeReceiver.java
  38. 56
      app/src/main/java/org/purplei2p/i2pd/SettingsActivity.java
  39. 3
      app/src/main/java/org/purplei2p/i2pd/WebConsoleActivity.java
  40. 6
      app/src/main/res/drawable/ic_logo.xml
  41. 6
      app/src/main/res/drawable/ic_notification_icon.xml
  42. 146
      app/src/main/res/layout/activity_main.xml
  43. 9
      app/src/main/res/layout/activity_settings.xml
  44. 2
      app/src/main/res/layout/activity_web_console.xml
  45. 3
      app/src/main/res/menu/options_main.xml
  46. 112
      app/src/main/res/mipmap-anydpi-v26/logo.xml
  47. BIN
      app/src/main/res/mipmap-hdpi/logo.png
  48. BIN
      app/src/main/res/mipmap-mdpi/logo.png
  49. BIN
      app/src/main/res/mipmap-xhdpi/logo.png
  50. BIN
      app/src/main/res/mipmap-xxhdpi/logo.png
  51. BIN
      app/src/main/res/mipmap-xxxhdpi/logo.png
  52. 46
      app/src/main/res/values-cs/strings.xml
  53. 46
      app/src/main/res/values-es/strings.xml
  54. 46
      app/src/main/res/values-fr/strings.xml
  55. 46
      app/src/main/res/values-it/strings.xml
  56. 46
      app/src/main/res/values-pt/strings.xml
  57. 31
      app/src/main/res/values-ru/strings.xml
  58. 46
      app/src/main/res/values-tr/strings.xml
  59. 46
      app/src/main/res/values-uk/strings.xml
  60. 46
      app/src/main/res/values-uz/strings.xml
  61. 46
      app/src/main/res/values-zh-rCN/strings.xml
  62. 17
      app/src/main/res/values/preferences_i2pd_options.xml
  63. 23
      app/src/main/res/values/strings.xml
  64. 193
      app/src/main/res/xml/preferences_i2pd.xml
  65. 80
      binary/jni/Android.mk
  66. 34
      binary/jni/Application.mk
  67. 1
      binary/jni/android-ifaddrs
  68. 1
      binary/jni/boost
  69. 1
      binary/jni/build_boost.sh
  70. 1
      binary/jni/build_miniupnpc.sh
  71. 1
      binary/jni/build_openssl.sh
  72. 1
      binary/jni/i2pd
  73. 1
      binary/jni/miniupnp
  74. 1
      binary/jni/openssl
  75. 6
      build.gradle
  76. 2
      contrib/binary_pack/.gitignore
  77. 53
      contrib/binary_pack/build-archive
  78. 33
      contrib/binary_pack/i2pd
  79. 28
      contrib/fix_boost.sh
  80. 9
      fastlane/metadata/android/cs/full_description.txt
  81. 1
      fastlane/metadata/android/cs/short_description.txt
  82. 2
      fastlane/metadata/android/en-US/changelogs/23700.txt
  83. 2
      fastlane/metadata/android/en-US/changelogs/23800.txt
  84. 1
      fastlane/metadata/android/en-US/changelogs/23900.txt
  85. 2
      fastlane/metadata/android/en-US/changelogs/24000.txt
  86. 6
      fastlane/metadata/android/en-US/changelogs/24100.txt
  87. 12
      fastlane/metadata/android/en-US/changelogs/2410001.txt
  88. 3
      fastlane/metadata/android/en-US/changelogs/2420000.txt
  89. 1
      fastlane/metadata/android/en-US/changelogs/2420100.txt
  90. 5
      fastlane/metadata/android/en-US/changelogs/2430000.txt
  91. 4
      fastlane/metadata/android/en-US/changelogs/2440000.txt
  92. 4
      fastlane/metadata/android/en-US/changelogs/2450000.txt
  93. 1
      fastlane/metadata/android/en-US/changelogs/2450001.txt
  94. 1
      fastlane/metadata/android/en-US/changelogs/2450020.txt
  95. 1
      fastlane/metadata/android/en-US/changelogs/2450100.txt
  96. 1
      fastlane/metadata/android/en-US/changelogs/2460000.txt
  97. 12
      fastlane/metadata/android/en-US/full_description.txt
  98. BIN
      fastlane/metadata/android/en-US/images/icon.png
  99. 9
      fastlane/metadata/android/es/full_description.txt
  100. 1
      fastlane/metadata/android/es/short_description.txt
  101. Some files were not shown because too many files have changed in this diff Show More

75
.github/workflows/android.yml

@ -9,22 +9,87 @@ jobs: @@ -9,22 +9,87 @@ jobs:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- name: Setup JDK 1.8
- name: Install GNU C++ compiler
run: |
sudo apt-get update
sudo apt-get install -y g++
- name: Setup JDK 1.11
uses: actions/setup-java@v1
with:
java-version: 1.8
java-version: 1.11
- name: Setup Android SDK
uses: maxim-lobanov/setup-android-tools@v1
with:
packages: |
build-tools;28.0.3
platforms;android-29
ndk;20.0.5594570
build-tools;32.0.0
platforms;android-32
ndk;23.2.8568313
cmake;3.22.1
cache: true
- name: Build required modules
run: |
export ANDROID_SDK_ROOT=$ANDROID_HOME
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/23.2.8568313
pushd app/jni
./build_boost.sh
./build_openssl.sh
./build_miniupnpc.sh
popd
- name: Build with Gradle
run: ./gradlew --no-daemon assembleDebug
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: android-apks
path: app/build/outputs/apk/debug/*.apk
build-binary:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- name: Install GNU C++ compiler
run: |
sudo apt-get update
sudo apt-get install -y g++
- name: Setup JDK 1.11
uses: actions/setup-java@v1
with:
java-version: 1.11
- name: Setup Android SDK
uses: maxim-lobanov/setup-android-tools@v1
with:
packages: |
ndk;23.2.8568313
cmake;3.22.1
cache: true
- name: Build required modules
run: |
export ANDROID_SDK_ROOT=$ANDROID_HOME
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/23.2.8568313
pushd binary/jni
./build_boost.sh
./build_openssl.sh
./build_miniupnpc.sh
popd
- name: Build binaries with NDK
run: |
pushd binary/jni
$ANDROID_NDK_HOME/ndk-build -j2 NDK_MODULE_PATH=$PWD
popd
- name: Create package with built binaries
run: |
pushd contrib/binary_pack
./build-archive
popd
- name: Upload binaries archive
uses: actions/upload-artifact@v2
with:
name: android-binaries
path: binary/libs/*
- name: Upload binaries package
uses: actions/upload-artifact@v2
with:
name: android-binaries-pack
path: contrib/binary_pack/i2pd_*_android_binary.zip

21
.gitmodules vendored

@ -1,17 +1,16 @@ @@ -1,17 +1,16 @@
[submodule "android-ifaddrs"]
path = app/jni/android-ifaddrs
url = https://github.com/PurpleI2P/android-ifaddrs.git
[submodule "i2pd"]
path = app/jni/i2pd
url = https://github.com/PurpleI2P/i2pd.git
branch = openssl
[submodule "boost"]
path = app/jni/boost
url = https://github.com/PurpleI2P/Boost-for-Android-Prebuilt.git
branch = boost-1_72_0
[submodule "openssl"]
path = app/jni/openssl
url = https://github.com/PurpleI2P/OpenSSL-for-Android-Prebuilt.git
[submodule "miniupnp"]
path = app/jni/miniupnp
url = https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git
[submodule "android-ifaddrs"]
path = app/jni/android-ifaddrs
url = https://github.com/PurpleI2P/android-ifaddrs.git
url = https://github.com/miniupnp/miniupnp.git
[submodule "openssl"]
path = app/jni/openssl
url = https://github.com/openssl/openssl.git
[submodule "boost"]
path = app/jni/boost
url = https://github.com/moritz-wundke/Boost-for-Android.git

27
LICENSE

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
Copyright (c) 2013-2021, The PurpleI2P Project
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of
conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used
to endorse or promote products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

81
README.md

@ -1,19 +1,86 @@ @@ -1,19 +1,86 @@
[![GitHub release](https://img.shields.io/github/release/PurpleI2P/i2pd-android.svg?label=latest%20release)](https://github.com/PurpleI2P/i2pd-android/releases/latest)
[![License](https://img.shields.io/github/license/PurpleI2P/i2pd-android.svg)](https://github.com/PurpleI2P/i2pd-android/blob/openssl/LICENSE)
[![Android CI](https://github.com/PurpleI2P/i2pd-android/actions/workflows/android.yml/badge.svg)](https://github.com/PurpleI2P/i2pd-android/actions/workflows/android.yml)
# i2pd android
### Install OpenJDK, gradle 5.1+ (6.8.3 has been tested and is working ok), download Android SDK and NDK r21e
This repository contains Android application sources of i2pd
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
alt="Get it on F-Droid"
height="80">](https://f-droid.org/packages/org.purplei2p.i2pd/)
## How to build
### Install g++, OpenJDK 11+, gradle 5.1+
```bash
sudo apt-get install g++ openjdk-11-jdk gradle
```
If your system provides gradle with version < 5.1, download it from gradle homepage:
https://gradle.org/install/
### Download and prepare Android SDK for building
Android SDK Available here:
https://developer.android.com/studio#downloads
https://developer.android.com/ndk/
Download Android SDK, unpack it to temporary directory `/tmp/anrdoid-sdk` and install it (in `/opt/android-sdk` for example) with required packages
```bash
mkdir /tmp/android-sdk
cd /tmp/android-sdk
wget https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
unzip commandlinetools-linux-8092744_latest.zip
# install required tools
./cmdline-tools/bin/sdkmanager --sdk_root=/opt/android-sdk "build-tools;31.0.0" "cmake;3.18.1" "ndk;22.1.7171670"
```
### Clone repository with submodules
git clone --recurse-submodules https://github.com/PurpleI2P/i2pd-android.git
```bash
git clone --recurse-submodules https://github.com/PurpleI2P/i2pd-android.git
```
### Compile application
export ANDROID_SDK_ROOT=/opt/android-sdk
export ANDROID_NDK_HOME=/opt/android-ndk-r21e
gradle clean assembleDebug
```bash
export ANDROID_SDK_ROOT=/opt/android-sdk
export ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/22.1.7171670
pushd app/jni
./build_boost.sh
pushd boost/build/out
cp ../../../../../contrib/fix_boost.sh .
bash fix_boost.sh
popd
./build_openssl.sh
./build_miniupnpc.sh
popd
./gradlew clean assembleDebug
```
You will find APKs in `app/build/outputs/apk`
### Building on Windows
For building on Windows you must use MSYS2 with `mingw64` or `ucrt64` shell and preinstalled `gcc` ( package `mingw-w64-x86_64-gcc` or `mingw-w64-ucrt-x86_64-gcc`). But you would to use WSL. Is better way in some things.
Java 11 can be downloaded from [jdk.java.com](https://jdk.java.net/java-se-ri/11)
Download Android SDK command line tools for Windows, unpack and install it replacing `--sdk_root=` path.
`ANDROID_SDK_ROOT` variable must point to SDK using linux-way path, like `/c/dev/android-sdk` when SDK installed to `C:\dev\android-sdk`.
Gradle can be called with `./gradlew` command inside project root, or you can install it using `pacman` and call `gradle` like on linux.
## Release signing
Current releases signed with certificate fingerprint (SHA-256):
`FC:C3:C7:34:9E:22:6A:77:B3:70:46:BB:00:FD:04:BB:A5:30:32:21:01:F8:62:F3:6D:8C:3D:B0:EB:B6:35:20`

24
app/build.gradle

@ -3,22 +3,21 @@ plugins { @@ -3,22 +3,21 @@ plugins {
}
dependencies {
implementation 'androidx.core:core:1.3.2'
implementation 'androidx.core:core:1.9.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
}
android {
compileSdkVersion 29
compileSdkVersion 33
defaultConfig {
applicationId "org.purplei2p.i2pd"
targetSdkVersion 29
minSdkVersion 14
versionCode 23600
versionName "2.36.0"
setProperty("archivesBaseName", archivesBaseName + "-" + versionName)
vectorDrawables.useSupportLibrary = true
targetSdkVersion 33
minSdkVersion 16
versionCode 2460000
versionName "2.46.0"
archivesBaseName += "-$versionName"
ndkVersion "23.2.8568313"
ndk {
abiFilters "armeabi-v7a"
@ -30,7 +29,7 @@ android { @@ -30,7 +29,7 @@ android {
externalNativeBuild {
ndkBuild {
arguments "NDK_MODULE_PATH:=${rootProject.projectDir}/app/jni"
arguments "-j3"
arguments "-j${Runtime.getRuntime().availableProcessors()}"
}
}
}
@ -71,9 +70,10 @@ android { @@ -71,9 +70,10 @@ android {
}
compileOptions {
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
namespace 'org.purplei2p.i2pd'
}
ext.abiCodes = ['armeabi-v7a': 1, 'x86': 2, 'arm64-v8a': 3, 'x86_64': 4]

37
app/jni/Android.mk

@ -2,7 +2,7 @@ LOCAL_PATH := $(call my-dir) @@ -2,7 +2,7 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := i2pd
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_C_INCLUDES += $(IFADDRS_PATH) $(LIB_SRC_PATH) $(LIB_CLIENT_SRC_PATH) $(DAEMON_SRC_PATH)
LOCAL_C_INCLUDES += $(IFADDRS_PATH) $(LIB_SRC_PATH) $(LIB_CLIENT_SRC_PATH) $(LANG_SRC_PATH) $(DAEMON_SRC_PATH)
LOCAL_STATIC_LIBRARIES := \
boost_system \
boost_date_time \
@ -16,62 +16,65 @@ LOCAL_LDLIBS := -lz @@ -16,62 +16,65 @@ LOCAL_LDLIBS := -lz
LOCAL_SRC_FILES := \
DaemonAndroid.cpp \
i2pd_android.cpp \
$(IFADDRS_PATH)/ifaddrs.c \
$(IFADDRS_PATH)/ifaddrs.cpp \
$(IFADDRS_PATH)/bionic_netlink.cpp \
$(wildcard $(LIB_SRC_PATH)/*.cpp) \
$(wildcard $(LIB_CLIENT_SRC_PATH)/*.cpp) \
$(wildcard $(LANG_SRC_PATH)/*.cpp) \
$(DAEMON_SRC_PATH)/Daemon.cpp \
$(DAEMON_SRC_PATH)/UPnP.cpp \
$(DAEMON_SRC_PATH)/HTTPServer.cpp \
$(DAEMON_SRC_PATH)/I2PControl.cpp
$(DAEMON_SRC_PATH)/I2PControl.cpp \
$(DAEMON_SRC_PATH)/I2PControlHandlers.cpp
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_system
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_date_time
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_filesystem
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_program_options
LOCAL_SRC_FILES := $(BOOST_PATH)/boost-1_72_0/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/boost-1_72_0/include
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := $(OPENSSL_PATH)/openssl-1.1.1d-clang/$(TARGET_ARCH_ABI)/lib/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/openssl-1.1.1d-clang/include
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := $(OPENSSL_PATH)/openssl-1.1.1d-clang/$(TARGET_ARCH_ABI)/lib/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/openssl-1.1.1d-clang/include
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
LOCAL_STATIC_LIBRARIES := crypto
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := miniupnpc
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc-2.1/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc-2.1/include
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)

11
app/jni/Application.mk

@ -4,19 +4,20 @@ APP_STL := c++_static @@ -4,19 +4,20 @@ APP_STL := c++_static
# Enable c++17 extensions in source code
APP_CPPFLAGS += -std=c++17 -fexceptions -frtti
APP_CPPFLAGS += -DANDROID -D__ANDROID__ -DUSE_UPNP
APP_CPPFLAGS += -DANDROID -D__ANDROID__ -DUSE_UPNP -Wno-deprecated-declarations
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
APP_CPPFLAGS += -DANDROID_ARM7A
endif
IFADDRS_PATH = $(NDK_MODULE_PATH)/android-ifaddrs
BOOST_PATH = $(NDK_MODULE_PATH)/boost
OPENSSL_PATH = $(NDK_MODULE_PATH)/openssl
MINIUPNP_PATH = $(NDK_MODULE_PATH)/miniupnp
IFADDRS_PATH = $(NDK_MODULE_PATH)/android-ifaddrs
OPENSSL_PATH = $(NDK_MODULE_PATH)/openssl
# don't change me
I2PD_SRC_PATH = $(NDK_MODULE_PATH)/i2pd
LIB_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd
LIB_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd
LIB_CLIENT_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd_client
DAEMON_SRC_PATH = $(I2PD_SRC_PATH)/daemon
LANG_SRC_PATH = $(I2PD_SRC_PATH)/i18n
DAEMON_SRC_PATH = $(I2PD_SRC_PATH)/daemon

154
app/jni/DaemonAndroid.cpp

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@ -16,139 +16,49 @@ @@ -16,139 +16,49 @@
#include "FS.h"
#include "DaemonAndroid.h"
#include "Daemon.h"
#include "I18N.h"
namespace i2p
{
namespace android
{
/* Worker::Worker (DaemonAndroidImpl& daemon):
m_Daemon (daemon)
{
}
void Worker::startDaemon()
{
Log.d(TAG"Performing daemon start...");
m_Daemon.start();
Log.d(TAG"Daemon started.");
emit resultReady();
}
void Worker::restartDaemon()
{
Log.d(TAG"Performing daemon restart...");
m_Daemon.restart();
Log.d(TAG"Daemon restarted.");
emit resultReady();
}
void Worker::stopDaemon() {
Log.d(TAG"Performing daemon stop...");
m_Daemon.stop();
Log.d(TAG"Daemon stopped.");
emit resultReady();
}
Controller::Controller(DaemonAndroidImpl& daemon):
m_Daemon (daemon)
{
Worker *worker = new Worker (m_Daemon);
worker->moveToThread(&workerThread);
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect(this, &Controller::startDaemon, worker, &Worker::startDaemon);
connect(this, &Controller::stopDaemon, worker, &Worker::stopDaemon);
connect(this, &Controller::restartDaemon, worker, &Worker::restartDaemon);
connect(worker, &Worker::resultReady, this, &Controller::handleResults);
workerThread.start();
}
Controller::~Controller()
{
Log.d(TAG"Closing and waiting for daemon worker thread...");
workerThread.quit();
workerThread.wait();
Log.d(TAG"Waiting for daemon worker thread finished.");
if(m_Daemon.isRunning())
{
Log.d(TAG"Stopping the daemon...");
m_Daemon.stop();
Log.d(TAG"Stopped the daemon.");
}
}
*/
std::string dataDir = "";
std::string language = "";
DaemonAndroidImpl::DaemonAndroidImpl ()
//:
/*mutex(nullptr), */
//m_IsRunning(false),
//m_RunningChangedCallback(nullptr)
{
}
DaemonAndroidImpl::~DaemonAndroidImpl ()
{
//delete mutex;
}
bool DaemonAndroidImpl::init(int argc, char* argv[])
{
//mutex=new QMutex(QMutex::Recursive);
//setRunningCallback(0);
//m_IsRunning=false;
// make sure assets are ready before proceed
i2p::fs::DetectDataDir(dataDir, false);
int numAttempts = 0;
do
{
if (i2p::fs::Exists (i2p::fs::DataDirPath("assets.ready"))) break; // assets ready
numAttempts++;
std::this_thread::sleep_for (std::chrono::seconds(1)); // otherwise wait for 1 more second
}
while (numAttempts <= 10); // 10 seconds max
return Daemon.init(argc,argv);
return Daemon.init(argc, argv);
}
void DaemonAndroidImpl::start()
{
//QMutexLocker locker(mutex);
//setRunning(true);
Daemon.start();
}
void DaemonAndroidImpl::stop()
{
//QMutexLocker locker(mutex);
Daemon.stop();
//setRunning(false);
}
void DaemonAndroidImpl::restart()
{
//QMutexLocker locker(mutex);
stop();
start();
}
/*
void DaemonAndroidImpl::setRunningCallback(runningChangedCallback cb)
{
m_RunningChangedCallback = cb;
}
bool DaemonAndroidImpl::isRunning()
void DaemonAndroidImpl::setDataDir(std::string path)
{
return m_IsRunning;
Daemon.setDataDir(path);
}
void DaemonAndroidImpl::setRunning(bool newValue)
{
bool oldValue = m_IsRunning;
if(oldValue!=newValue)
{
m_IsRunning = newValue;
if(m_RunningChangedCallback)
m_RunningChangedCallback();
}
}
*/
static DaemonAndroidImpl daemon;
static char* argv[1]={strdup("tmp")};
/**
@ -159,36 +69,32 @@ namespace android @@ -159,36 +69,32 @@ namespace android
{
try
{
//int result;
{
//Log.d(TAG"Initialising the daemon...");
bool daemonInitSuccess = daemon.init(1,argv);
if(!daemonInitSuccess)
// make sure assets are ready before proceed
i2p::fs::DetectDataDir(dataDir, false);
int numAttempts = 0;
do
{
//QMessageBox::critical(0, "Error", "Daemon init failed");
return "Daemon init failed";
if (i2p::fs::Exists (i2p::fs::DataDirPath("assets.ready"))) break; // assets ready
numAttempts++;
std::this_thread::sleep_for (std::chrono::seconds(1)); // otherwise wait for 1 more second
}
//Log.d(TAG"Initialised, creating the main window...");
//MainWindow w;
//Log.d(TAG"Before main window.show()...");
//w.show ();
while (numAttempts <= 10); // 10 seconds max
// Set application directory
daemon.setDataDir(dataDir);
bool daemonInitSuccess = daemon.init(1, argv);
if(!daemonInitSuccess)
{
//i2p::qt::Controller daemonQtController(daemon);
//Log.d(TAG"Starting the daemon...");
//emit daemonQtController.startDaemon();
//daemon.start ();
//Log.d(TAG"Starting GUI event loop...");
//result = app.exec();
//daemon.stop ();
daemon.start();
return "Daemon init failed";
}
}
//QMessageBox::information(&w, "Debug", "demon stopped");
//Log.d(TAG"Exiting the application");
//return result;
// Set webconsole language from application
i2p::i18n::SetLanguage(language);
daemon.start();
}
}
catch (boost::exception& ex)
{
@ -219,10 +125,14 @@ namespace android @@ -219,10 +125,14 @@ namespace android
dataDir = jdataDir;
}
std::string
GetDataDir(void)
std::string GetDataDir(void)
{
return dataDir;
}
}
void SetLanguage(std::string jlanguage)
{
language = jlanguage;
}
}
}

72
app/jni/DaemonAndroid.h

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@ -22,77 +22,31 @@ namespace android @@ -22,77 +22,31 @@ namespace android
DaemonAndroidImpl ();
~DaemonAndroidImpl ();
//typedef void (*runningChangedCallback)();
/**
* @return success
*/
bool init(int argc, char* argv[]);
void start();
void stop();
void restart();
//void setRunningCallback(runningChangedCallback cb);
//bool isRunning();
private:
//void setRunning(bool running);
private:
//QMutex* mutex;
//bool m_IsRunning;
//runningChangedCallback m_RunningChangedCallback;
bool init (int argc, char* argv[]);
void start ();
void stop ();
void restart ();
void setDataDir (std::string path);
};
/**
* returns "ok" if daemon init failed
* returns errinfo if daemon initialized and started okay
*/
std::string start();
std::string start ();
// stops the daemon
void stop();
void stop ();
// set datadir received from jni
void SetDataDir(std::string jdataDir);
void SetDataDir (std::string jdataDir);
// get datadir
std::string GetDataDir(void);
/*
class Worker : public QObject
{
Q_OBJECT
public:
Worker (DaemonAndroidImpl& daemon);
private:
DaemonAndroidImpl& m_Daemon;
public slots:
void startDaemon();
void restartDaemon();
void stopDaemon();
signals:
void resultReady();
};
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller(DaemonAndroidImpl& daemon);
~Controller();
private:
DaemonAndroidImpl& m_Daemon;
public slots:
void handleResults(){}
signals:
void startDaemon();
void stopDaemon();
void restartDaemon();
};
*/
std::string GetDataDir (void);
// set webconsole language
void SetLanguage (std::string jlanguage);
}
}

2
app/jni/android-ifaddrs

@ -1 +1 @@ @@ -1 +1 @@
Subproject commit 41f6ba66f28c3e321e640c249071f332f91f57f6
Subproject commit f302cc7ead971d4068661d34c2f3ba06063d8ea2

2
app/jni/boost

@ -1 +1 @@ @@ -1 +1 @@
Subproject commit 93de5720b8841569f25abe9fe498348582e002c4
Subproject commit 53e6c16ea80c7dcb2683fd548e0c7a09ddffbfc1

80
app/jni/build_boost.sh

@ -0,0 +1,80 @@ @@ -0,0 +1,80 @@
#!/bin/bash
set -e
BOOST_VERSION=1.78.0
BOOST_LIBS=date_time,filesystem,program_options,system
function build_one {
echo "Configuring and building..."
CXXFLAGS="-std=c++14" \
NCPU=$(nproc) \
./build-android.sh \
--boost=$BOOST_VERSION \
--arch=$CPU \
--target-version=$API \
--with-libraries=$BOOST_LIBS \
--layout=system \
$ANDROID_NDK_HOME
}
function checkPreRequisites {
if ! [ -d "boost" ] || ! [ "$(ls -A boost)" ]; then
echo -e "\033[31mFailed! Submodule 'boost' not found!\033[0m"
echo -e "\033[31mTry to run: 'git submodule update --init'\033[0m"
exit
fi
if [ -z "$ANDROID_NDK_HOME" -a "$ANDROID_NDK_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_NDK_HOME is empty. Run 'export ANDROID_NDK_HOME=[PATH_TO_NDK]'\033[0m"
exit
fi
}
function build {
for arg in "$@"; do
case "$arg" in
x86_64)
API=21
TARGET=x86_64
build_one
;;
arm64)
API=21
CPU=arm64-v8a
build_one
;;
x86)
API=16
CPU=x86
build_one
;;
arm)
API=16
CPU=armeabi-v7a
build_one
;;
all)
API=16
build_one
;;
*)
;;
esac
done
}
checkPreRequisites
cd boost
# disable verbose output
sed -i -e 's/d+2/d+0/' build-android.sh
sed -i -e 's/\"23\.1\"\|\"25\.0\"/\"23\.1\"\|\"23\.2\"\|\"25\.0\"/' build-android.sh
if (( $# == 0 )); then
build all
else
build $@
fi

92
app/jni/build_miniupnpc.sh

@ -0,0 +1,92 @@ @@ -0,0 +1,92 @@
#!/bin/bash
set -e
CMAKE_VERSION=3.22.1
function build_one {
mkdir -p build out/$CPU
cd build
cmake \
-G "Unix Makefiles" \
-DUPNPC_BUILD_SHARED=False \
-DUPNPC_BUILD_TESTS=False \
-DUPNPC_BUILD_SAMPLE=False \
-DANDROID_NATIVE_API_LEVEL=$API \
-DANDROID_ABI=$CPU \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_NDK=$ANDROID_NDK_HOME \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
-DCMAKE_INSTALL_PREFIX=../out/$CPU \
..
echo "Building..."
cmake --build . -- libminiupnpc-static
make install
cd ..
rm -rf build
}
function checkPreRequisites {
if ! [ -d "miniupnp" ] || ! [ "$(ls -A miniupnp)" ]; then
echo -e "\033[31mFailed! Submodule 'miniupnp' not found!\033[0m"
echo -e "\033[31mTry to run: 'git submodule update --init'\033[0m"
exit
fi
if [ -z "$ANDROID_SDK_ROOT" -a "$ANDROID_SDK_ROOT" == "" ]; then
echo -e "\033[31mFailed! ANDROID_SDK_ROOT is empty. Run 'export ANDROID_SDK_ROOT=[PATH_TO_NDK]'\033[0m"
exit
fi
if [ -z "$ANDROID_NDK_HOME" -a "$ANDROID_NDK_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_NDK_HOME is empty. Run 'export ANDROID_NDK_HOME=[PATH_TO_NDK]'\033[0m"
exit
fi
}
function build {
for arg in "$@"; do
case "$arg" in
x86_64)
API=21
CPU=x86_64
build_one
;;
arm64)
API=21
CPU=arm64-v8a
build_one
;;
arm)
API=16
CPU=armeabi-v7a
build_one
;;
x86)
API=16
CPU=x86
build_one
;;
*)
;;
esac
done
}
checkPreRequisites
cd miniupnp/miniupnpc
rm -rf build out
# add cmake from Android SDK to PATH
PATH=$ANDROID_SDK_ROOT/cmake/$CMAKE_VERSION/bin:$PATH
if (( $# == 0 )); then
build x86_64 arm64 arm x86
else
build $@
fi

93
app/jni/build_openssl.sh

@ -0,0 +1,93 @@ @@ -0,0 +1,93 @@
#!/bin/bash
set -e
HOST_OS=`uname -a`
function build_one {
mkdir -p out/$CPU
echo "Configuring OpenSSL for $CPU..."
./Configure \
--prefix="$PWD/out/$CPU" \
$TARGET \
no-shared \
no-tests \
-D__ANDROID_API__=$API \
-Wno-macro-redefined
echo "Building OpenSSL for $CPU..."
make -j $(nproc) > out/build.log
make install_sw >> out/build.log
make clean
}
function checkPreRequisites {
if ! [ -d "openssl" ] || ! [ "$(ls -A openssl)" ]; then
echo -e "\033[31mFailed! Submodule 'openssl' not found!\033[0m"
echo -e "\033[31mTry to run: 'git submodule update --init'\033[0m"
exit
fi
if [ -z "$ANDROID_NDK_HOME" -a "$ANDROID_NDK_HOME" == "" ]; then
echo -e "\033[31mFailed! ANDROID_NDK_HOME is empty. Run 'export ANDROID_NDK_HOME=[PATH_TO_NDK]'\033[0m"
exit
fi
}
function build {
for arg in "$@"; do
case "$arg" in
x86_64)
API=21
CPU=x86_64
TARGET=android-x86_64
build_one
;;
arm64)
API=21
CPU=arm64-v8a
TARGET=android-arm64
build_one
;;
arm)
API=16
CPU=armeabi-v7a
TARGET=android-arm
build_one
;;
x86)
API=16
CPU=x86
TARGET=android-x86
build_one
;;
*)
;;
esac
done
}
checkPreRequisites
cd openssl
rm -rf out
if [[ "$HOST_OS" == *"_NT-"* ]]; then
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/windows-x86_64/bin:$PATH
else
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
fi
if [[ -f 'Makefile' ]]; then
make clean
fi
if (( $# == 0 )); then
build x86_64 arm64 arm x86
else
build $@
fi

2
app/jni/i2pd

@ -1 +1 @@ @@ -1 +1 @@
Subproject commit 3bf6db1c08d2b0d6eeac14095d1dc5fef074cb09
Subproject commit 1da9e2e1c0d3b6e95f576f933509126e129cb1b1

60
app/jni/i2pd_android.cpp

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@ -56,9 +56,10 @@ JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon @@ -56,9 +56,10 @@ JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
(JNIEnv *env, jclass clazz) {
return env->NewStringUTF(i2p::android::start().c_str());
}
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir
(JNIEnv *env, jclass clazz) {
return env->NewStringUTF( i2p::android::GetDataDir().c_str() );
return env->NewStringUTF(i2p::android::GetDataDir().c_str());
}
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
@ -89,31 +90,12 @@ JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged @@ -89,31 +90,12 @@ JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setDataDir
(JNIEnv *env, jclass clazz, jstring jdataDir) {
/*
// Method 1: convert UTF-16 jstring to std::string (https://stackoverflow.com/a/41820336)
const jclass stringClass = env->GetObjectClass(jdataDir);
const jmethodID getBytes = env->GetMethodID(stringClass, "getBytes", "(Ljava/lang/String;)[B");
const jbyteArray stringJbytes = (jbyteArray) env->CallObjectMethod(jdataDir, getBytes, env->NewStringUTF("UTF-8"));
size_t length = (size_t) env->GetArrayLength(stringJbytes);
jbyte* pBytes = env->GetByteArrayElements(stringJbytes, NULL);
std::string dataDir = std::string((char *)pBytes, length);
env->ReleaseByteArrayElements(stringJbytes, pBytes, JNI_ABORT);
env->DeleteLocalRef(stringJbytes);
env->DeleteLocalRef(stringClass); */
// Method 2: get string chars and make char array.
auto dataDir = env->GetStringUTFChars(jdataDir, NULL);
env->ReleaseStringUTFChars(jdataDir, dataDir);
// Set DataDir
i2p::android::SetDataDir(dataDir);
env->ReleaseStringUTFChars(jdataDir, dataDir);
}
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_GetTransitTunnelsCount
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getTransitTunnelsCount
(JNIEnv *env, jclass clazz) {
return i2p::tunnel::tunnels.CountTransitTunnels();
}
@ -125,3 +107,35 @@ JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getWebConsAddr @@ -125,3 +107,35 @@ JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getWebConsAddr
std::string result = "http://" + httpAddr + ":" + std::to_string(httpPort) + "/";
return env->NewStringUTF(result.c_str());
}
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setLanguage
(JNIEnv *env, jclass clazz, jstring jlanguage) {
auto language = env->GetStringUTFChars(jlanguage, NULL);
i2p::android::SetLanguage(language);
env->ReleaseStringUTFChars(jlanguage, language);
}
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getHTTPProxyState
(JNIEnv *, jclass) {
return i2p::client::context.GetHttpProxy () ? true : false;
}
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSOCKSProxyState
(JNIEnv *, jclass) {
return i2p::client::context.GetSocksProxy() ? true : false;
}
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getBOBState
(JNIEnv *, jclass) {
return i2p::client::context.GetBOBCommandChannel() ? true : false;
}
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSAMState
(JNIEnv *, jclass) {
return i2p::client::context.GetSAMBridge() ? true : false;
}
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getI2CPState
(JNIEnv *, jclass) {
return i2p::client::context.GetI2CPServer() ? true : false;
}

2
app/jni/miniupnp

@ -1 +1 @@ @@ -1 +1 @@
Subproject commit dd9bad896ba8ff49c3399e5c1624643a0b667e50
Subproject commit 6576eb611b670c4841cc65095914275d6be008b2

2
app/jni/openssl

@ -1 +1 @@ @@ -1 +1 @@
Subproject commit 98d7f124a1873333e0b8d2b5c0640a26185197a9
Subproject commit 129058165d195e43a0ad10111b0c2e29bdf65980

44
app/jni/org_purplei2p_i2pd_I2PD_JNI.h

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright (c) 2013-2020, The PurpleI2P Project
* Copyright (c) 2013-2022, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@ -15,44 +15,58 @@ @@ -15,44 +15,58 @@
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_purplei2p_i2pd_I2PD_JNI
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getABICompiledWith
(JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startDaemon
(JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startAcceptingTunnels
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startAcceptingTunnels
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_reloadTunnelsConfigs
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
(JNIEnv * env, jclass clazz, jboolean isConnected);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setDataDir
(JNIEnv *env, jclass clazz, jstring jdataDir);
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_GetTransitTunnelsCount
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_setLanguage
(JNIEnv *env, jclass clazz, jstring jlanguage);
JNIEXPORT jint JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getTransitTunnelsCount
(JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getWebConsAddr
(JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getDataDir
(JNIEnv *, jclass);
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getHTTPProxyState
(JNIEnv *, jclass);
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSOCKSProxyState
(JNIEnv *, jclass);
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getBOBState
(JNIEnv *, jclass);
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getSAMState
(JNIEnv *, jclass) ;
JNIEXPORT jboolean JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_getI2CPState
(JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged
(JNIEnv * env, jclass clazz, jboolean isConnected);
#ifdef __cplusplus
}
#endif

27
app/src/main/AndroidManifest.xml

@ -1,24 +1,26 @@ @@ -1,24 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.purplei2p.i2pd"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="auto">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_logo"
android:icon="@mipmap/logo"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
android:theme="@android:style/Theme.DeviceDefault"
android:usesCleartextTraffic="true">
<receiver
@ -40,15 +42,17 @@ @@ -40,15 +42,17 @@
<receiver
android:name=".NetworkStateChangeReceiver"
android:label="NetworkChangeReceiver" >
android:label="NetworkChangeReceiver"
android:exported="true" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"
tools:ignore="BatteryLife" />
</intent-filter>
</receiver>
<activity
android:name=".I2PDPermsAskerActivity"
android:label="@string/app_name">
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@ -56,8 +60,7 @@ @@ -56,8 +60,7 @@
</activity>
<activity
android:name=".I2PDActivity"
android:label="@string/app_name" />
android:name=".I2PDActivity" />
<service
android:name=".ForegroundService"

441
app/src/main/assets/addressbook/addresses.csv

@ -1,127 +1,169 @@ @@ -1,127 +1,169 @@
0gitnick.i2p,xpw6ynhbxxuqsr6spcnfiyvuhvimm3jg7uti2oqv3jlh76j532oa
0pl.i2p,gd7qe2pu2jwqabz4zcf3wwablrzym7p6qswczoapkm5oa5ouuaua
102chan.i2p,xxu3lso4h2rh6wmrxiou3ax7r7la7x6dhoepnku3jvrlwp35pefq
2ch.i2p,suzp44odgixf5lthy5ngy6ktabus5gz47squie2shudi6kmlwuaq
2channel.i2p,wirxk4kulmd7v6qmttltnu5nx2vtchzvrg7ewocejrvdjcaiv5sq
0xff.i2p,apo53zid3xe7rewxjw7whdym2rmyowsj7jeoiwrl5zlmf7oqrxwq
0xpaste.i2p,oyfcxkrmrnaplu24aobv7s36hm3vyxszlbees4hl6kpk6izwa5da
111.i2p,s5ekktro7kk24gu67dgwi5xnhzhzjx6abujk44q4v56mmdnrv4lq
333.i2p,ctvfe2fimcsdfxmzmd42brnbf7ceenwrbroyjx3wzah5eudjyyza
600chan.i2p,ncogytpxyaqnu5au4yc6oeiiaidhjcxfsr6cyebcsfki2p3ih7ea
7i3.i2p,y4gh4ocvlsxnyjgqbdlqb6eeff4a4e62wbzuewd3ralagyopzb4q
aaa.i2p,zzhy7rumzzgxzodvgu4xz324nekbbccphegweukj4cm6nrbpg4oa
CrustyIRC.i2p,4ygmttynho5k32vfm64urriqx2vj3s6hkm52jwv2vlwrynu4z6iq
aaoth.i2p,aaoth5tidbhizgerysxlfrqmg5t7jzb76zt6lattwjj3up524qwa
abdlandrubbernetwork.i2p,asnpognglrcx34l5vywatfkoaashziedfylun4w6cf5wue5gujca
acetone.i2p,tzwfy3dnqtm4wuofmcp3gcb5qjcytri635ei7kw7yrl6n3ul5n2a
agoradesk.i2p,ztqnvu7c35jyoqmfjyymqggjpyky6z3tlgewk2qgbgcmcyl4ecta
albatcats.i2p,ilgg7nbtofvgzrpl6kenxugfdsgi3apu6sgilmqi5rhpolnauyga
agentoocat.i2p,voanmdeayaccgaxumtehvxxiv4sdscsixoxsqmhh7nfwhusrvfaa
algorithm.i2p,algout6clo74ywqtjyemehnf4bzhegpju5yvi6zdcfszso7iirka
aliensarehere.i2p,6t3mm7mkmjcepgwbthqvrh3kjfsipqdwqurcptwruyy73enqkawa
alphabay.i2p,tnaefzkcnhryeusi7hdpqujqiqmnbtah3dmjcg3gvezohunjuxbq
amogus.i2p,udcjqqoo7mc54ephxnhzaxdwtqxsgxjzvh4wr4boope6vyr4mrhq
animal.i2p,5iedafy32swqq4t2wcmjb4fvg3onscng7ct7wb237jkvrclaftla
anongw.i2p,owrnciwubb3f3dctvlmnaknb6tjdxtlzvv7klocb45mmhievdjhq
anonroms.i2p,w2sgx2i5n4uxtqjgekckxnhhpymigpn5lmgdaujyzib6sxq7j4cq
anonyradio.i2p,cbobsax3rhoyjbk7ii2nd2fnl5bxh3x7bbearokyxgvmudn7o5bq
anothermusic.i2p,p5mhrtnjfyonumqjzkzxakxais4fjtjgappvoioztqehaii4smpq
apophis.i2p,aybax36xssplylkueyy3szi3n2spd7mgxcmzbawapg3vxznwlkda
apt.idk.i2p,s7qemnncvmy5zs3khd6qzlcnsvtu6drnkeae4r3yyc7akuzuqiia
aqua.i2p,xqwrqfuoae43grkmzs63sw5upathbjerid3ch4bhskle3bibeqba
arav.i2p,t42fkp6zp5dfqywantq3zp427ig3q2onrmfv246tyaztpg4ckb5a
archaicbinarybbs.i2p,t7o2tw36cffedgfr6kahewpkrntofnliuapji2e4rucl3os55epa
archiv.tutorials.i2p,lldr2miowq6353fxy44pnxfk37d6yn2f6kaivzecbmvvnnf5exyq
archlinux.i2p,5ms4k3cn5dx53b46hqgwogigsjhtinuf4g6fdr6pplkldi5vjcxa
ardor-wallet.i2p,tm23k5ny3umhf6vf3kghnnwacli5zywq5wrr3xcqowbcofuyr4gq
arf.i2p,o46lsq4u7udxg3qqlidrmpj4lb4nr7ldxmbb2x53nftndaeyxqeq
azathabar.i2p,v35rwae5zb6fcgd7phzkireghtuen43umi7l5yvahm7ezkqg5uwq
bandura-yacy.i2p,e4t4yer7o6dbttk4xmpsfd56vhuse5upksgjqejnrvrdz35ia2qq
bandura.i2p,n6eqyu6glmtgt544ys43ggrozhpiw7biyrelrvmkmg7llfcjwm4a
bbs.i2p,7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua
ben.i2p,kaqe5l6s2hojtgaaoinn4ucktnc4ixvneldy32ft7zdokncc73sa
bellingcat.i2p,nk6hd2mzzoieui22xzcdiz7i2irp7gel3qscwanuqzstkdxqxp3a
bentasker.i2p,gdncgijky3xvocpkq6xqk5uda4vsnvzuk7ke7jrvxnvyjwkq35iq
bible4u.i2p,xs6lr2g5jiaajtb3nkno2zmy34eipitrggooxb7wtey7uko7bqmq
bitlox.i2p,lqw5khxcdntlv3u4vhn53upcqirplvnc4etjlmoytrzs66ytettq
black.i2p,sjwueu62qpe6dtv5b322k3f23fl4uz3w6qe6wcrwauiwpnymypfq
bitchan.i2p,waycuw2c27ruakfblkf5tcegwmt3ot445dlfoypil6bzmm4yxg7a
blackexchange.i2p,ztgr5kghkyn43fhhkuycroxgfti6cojo3vg4wdd3usqonyvrla5q
blackgnu.i2p,hskxmtmwqnmq7pnxzntlwt36ew4nuqzmwhzbqjo233ncfoaj7mpa
blawg.i2p,uq5hbw7bplczde3pbugbxnvtqbjjdba6wfggpvbmaghuwoulputq
blog.raccoondad.i2p,ouc5i7xknchig3qdtkoydoeg2oqe354roxkjrrwzuzjcqr4xpvna
blog.tinlans.i2p,ylkch2nkrwehakx4z6wiyjbeqwlgasknukdkex6r6yq4xusrjnda
blog.torproject.i2p,woelslt2oh4dn5wlxfmpjggyyu6l7ntgk3rngrooldn57x4kduma
bobross.i2p,54y7lkvndr3fa4c4fw6e5udfx37dkrh4wbdjvxbwapertwz2vtqq
boerse.i2p,7633w56hd53sesr6b532r5qlbdnvyl5bnvama6ign6xryaxol4rq
bofh.i2p,auvuinzogu6gc4pwsgbjijuszxgcjygciu2wy53pfz7mo5nfpc5a
bonobonet.acetone.i2p,keihicq2fcfooqvdqtufjpigg3ge5mw5mjdpdnxy5utazrqkcnxa
boran.i2p,boranyzcefxqw2ktndemy3npt4zhetpp6edldtlym2ap7n5azt5a
boxs.i2p,owm3fy2t5vwbxowk5gsshihkwjfknqq7y4ylbeyhvzta7r3ybrpq
bote.i2p,bhjhc3lsdqzoyhxwzyrd63kvyg4br6n2337d74blyintae66mr2a
braindead.i2p,braindsku6jnpmnaats2cu2qzax4pga6dwhx436kxanpxgx2pcyq
burntout.i2p,lkep3fd7tjvxrs25crr2c3jy7xm4s7bqiua5r327zgpw37sgyerq
brick.i2p,lfeip77mf2j75izalrenv2aft5h3mfwauqqu3nqdmoq5ldwwsvga
bridges.torproject.i2p,2tiwhibsjvys63t43xncar6y52dy3dpct6edglenhzlalmyirb2a
bublik.i2p,npx6e6trk37ovoxzk3j3yoh5huenh24avbmsgeroiejkuzb2vo6q
bugfuzz.i2p,ubszn4gsf22vga67rvzzlg4qj2bfcq6o52fmxz46xruawqm6z7rq
bunkerfiles.i2p,lyrhscn2hfe6mjn7jo3titioitfzcy7x23hhkksydin6ildsgxiq
bunkerirc.i2p,mdt7h4zsbwafsikg3r4iiqh5wriaisznjj5d3f3lyeahipudsxoq
bunkertreffinfo.i2p,ow4q3pdfdwofiqb4btopg5ou734w32k3z4hoiinsezg5zkzdlq6a
bytepay.i2p,7amc4ztwkzu3cgsaaaw3223ohuihn5hlsqc6gpf2rxdyptdkyugq
ca.i2pd.i2p,u5safmawcxj5vlrdtqrsqbsndkr5cfenpicgg5euu4xqm73yicba
cathugger.i2p,vq43xjjcnejqpzfprws5qzrea2siieshu4tglpdepql2w3w3bpba
cake.i2p,hpdbe6o6qqqqvgygbcznssat46kybsm7rcauofqaoly4ajdi2jeq
calculator.i2p,itj23yb325dma24i4qpnhuwrz26hzpps6izkaf3mowavtvoznnva
cantonese.i2p,3r3d43jejiezwb6daqgtk23ccs4jm3bvkhxwwwnpymvjn2aymriq
carvet.i2p,r5ukmkit6n3ztitar6clfc6te3o3235ys4jdbiugnkvzmfurxbnq
cbs.i2p,u3lp7wazvq6opodzwjg5sc5w5kwxehmxd4wcdpt4s4j2k4dx4apq
chudo.i2p,iaublzhzc4ssa3rcrjbdigautm66mslt6g2sninugagiarl4at3q
ci.idk.i2p,antkos5hjxraxduyewoo4qwwr6vyceiggd562nctvmtpnfjsuqlq
closedshop.i2p,6fg67mbw2okopzyonsck4bsy3cy7l2fame56uiysr2cezhjhzdbq
cobalt.idk.i2p,m63cbwomq4e4q6df3n6idnuveqa4yastxnls6kacseuutrp5um4q
chaox.i2p,6bcqgkedaq2krrhvidjlmdsoltmzuwaqtrafycfzbc56h5swumoq
cheapeth.i2p,x6pq4h33wu6txj6vvpgywrgew2y6cwzs5l63w726paqsvogeqdra
chmok.i2p,w7eqh6nndwk4yr5vxtbnvizgsg776vamwingijetnnqojrzjxm3q
chungus.i2p,ot7kljg7js4iedtsxl7es4wnynvxxyyaravier2dqkxmr7wsdzxa
cipherlist.i2p,gbm4kiotqjqmklwsp3qibdtn7mhatjsyeebbb5zxwjlp6w22fuga
citrus.i2p,citrusogkieyk3hleilk5scb5a64jdzoogi5wjv35klrvmqsh5ma
cloaca.i2p,pnsyl5plmmwuqfvpg36cbvvhe6mpoy2j5zzemfb5sfbpvklyozta
co.i2p,3mvo5eifcwplcsoubtvqkzdahwo2sdhfygfdde7lj2glybk4q22q
coffeejazz.i2p,mrt55kugqimzxeittpwwjwznejs3b3zxcfht3hp6dlujetyqh5ua
coldhell.i2p,z2kerfik5dzqd2kj74cuhhtptkrizsblc5nm6ke2gcnj5mnwgwja
community.i2p,64luakopnvffchxnibn3d2p7uqxixtyuallfqfgifkkcmfcrczxa
community.torproject.i2p,wmw22z5c24b35hlepzc2g6k3cpcg44rcg46qdwfo5heiplv7m4ca
contact.i2p,rn5hqxierph4eegft3hiiqkgn2zyyfgj2c6pq75bkahl3pu5shvq
costeira.i2p,abhty5xlmnyab2kqdxcd56352kcescxoux3p6dbqdrghggyygnxa
crypto.i2p,vffax5jzewwv6pfim55hvhqyynafkygdalvzoqd74lkib3hla3ta
cs.i2p,kzaeunogz6s75ptgy6ifjzwwy75xdfenenswvrczd7mewxgrad5a
d73.i2p,uf6madmg2fv7uo25cjnvzpimd6iflsrozyemuypleyz46mxbyreq
darklibrary.i2p,ynv2cgboxkpcyap6hqnbycgj4khyxppxuqjbidkdfhjifkzwdhfa
darknetnow.i2p,gkx3o5fy7mv7l4psqqnhp35d5iun7rt3soci6ylf3rgb7a5a655q
darknut.i2p,2mk37gtvpk2i63o6vl7vna4dr46rqexxetupgn5efuuins7x3qya
cyberchef.i2p,5k22kdukxkobertlyheal5aro32gls6nhgktneq3mtrracubt2bq
cyberia.i2p,3jrfzgnetbjwnyrua5jpyeqk7gb6dgfw3hu5q6lyggnwqhrury5q
darknetbible.i2p,lcaocuhvocje2gociyyuiip5sxhbgmkvaicbm6g6axtflf5wc6pa
darknetdaily.i2p,gehxh3zlns3ezyuc35bszc42hdr4g5uzasexzyrqfxwcwkeiulia
darknethub.i2p,tnh5bp4si7x47vhwk6njtimbbk77gai3abkfh2gz2dhml46uu3uq
darkrealm.i2p,gbh4eerxdsph7etxsxznfhvmuiz54trlkenakqep343u4xcoekzq
darktech.i2p,nlkpudgmmgsdiemnbehq5llymdmxp6tn4rzjuse7nhvavr2kgkga
dashninja.i2p,dzjzoefy7fx57h5xkdknikvfv3ckbxu2bx5wryn6taud343g2jma
datagrip.i2p,ajreyxslv6lijap2hykp3uvnnsca6fyvax76u2w6n3vexngkif4a
dcherukhin.i2p,qa4boq364ndjdgow4kadycr5vvch7hofzblcqangh3nobzvyew7a
dead.i2p,7ko27dxvicr2sezvykkrfiktlghx5y5onup3f2bas5ipocy6ibvq
deavmi.i2p,t4cvvenniup6dcdlu2ehdycos5r3luccfemwd6hhvyqv5zd6obgq
ddosecrets.i2p,vyhw7t7fbj7nghx3oe4y5komczeb5egnhuvlslpkqupaymnhtlka
deavmi.i2p,fh5r3hlkkwh7udtjeqmekmq4qd62jnjqmnqob5hm3ndiuo6lauza
deepwebradio.i2p,2nait2gdeozkgf6gyhzjfij6mwldwkxxwcvtxobb4b5q5cvtm5la
def2.i2p,cepsrw27kdegwo7ihzouwvgcvw2obswwjs23ollgj7hk2yrce3da
def3.i2p,xbf3ots2purqun7orn72ypkpjmrzbfrkj3u654zfe77hbrbow6la
def4.i2p,yyzdq4fwwmnlojp23drfpfqujln2vcjozjrfzfeuriuqzdq7g4mq
det.i2p,y6d4fs3rpqrctuv77ltfajf5m4tl4kzcu7rtwhxgiohylfxxow4q
diasporg.i2p,edvccoobtjukjgw2os5eetywanbb2mpag5aknkrpia5qx2koksua
diffyq.i2p,hkjvyuc3asswxa7uxyalrnpqab4lyvzriu2rsq6jbjc2kaoabghq
digcitlab.i2p,gijabxlt4ox2mblh2nfxnds6u4mlsdeoonizknbdksl7klmbpvoq
dickinass.i2p,5x55ucmwxf2fvrcboapylnrcwdvunlokq5c7mnofno3bkrlqltza
digitalsr.i2p,ldavoapfhoqpxvihdsdjjo3phlt5ujkgkzigzbesab3g42rwvbpq
discuss.i2p,wrnowoalzz5mquzaygmcrm4feuqco5gsxyn42fizbqjaprtdx5gq
dist.torproject.i2p,pbhgoronppg7tq3dssnwmhzkbrscbvtmy3d5pmar5hyhnqwjj46q
diva.i2p,auoqibfnyujhcht4v3nzahpqztwlyomesfywltuls5bqqi3nd3ka
dlms.i2p,krsbxsaw3lnb6ctdpydygm2gqobjcpm4pf367ddo5hylbscnynmq
dns.chudo.i2p,zzfmtnnmacop3xvpznc4c2jfvk226wpep2gaoanja3gfzf3ih7xq
dosje.i2p,ir2ky5ejx4f646l4fsnug22gj4frn6jzlg7fgboudf2n5b4gdj3q
dreadpiratessociety.i2p,fbdd4syj2v52x5zord67av2xclmjsg6bc6xdvrqmvqkyd3whij6q
dropbox.i2p,omax2s5n4mzvymidpuxp2yqknf23asvu54uon6cxl6gdrlblnuiq
dumpteam.i2p,2fwlpuouwxlk2nj4xklvm43m52tqyhqnu2fcfiuv7clvf3wd5nwa
dnl.i2p,4pjdhyaot4kktjathgjmom4ykfccezyezasbtvgdtmar2b76cpqa
dns.acetone.i2p,dnsgzxkak4zlrrs5tfh42ob57iley4xrp7srrltn2j2yl2ynbiaq
donate.torproject.i2p,crxdz4n5viyy46upbd4amlzxcinkea7hwj3mkiudrw3nkpnfv42q
donotafraid.i2p,w6jq5xsixmolxvh5xtxaqolary2nmx5n4orc5bilc2j7ejcytgfa
drommedaris.i2p,2cth2loujyjvouft5z7cr2ajdv7r46tdxxew5xoqwpprucd7nf2a
dysfinis.i2p,6dhhk2azkdqd4zt2azsmnxddhooiztnaxgz6ft5sbusb5a4vonva
e-reading.i2p,z54dnry6rxtmzcg7e6y3qtsig5yf5fmehuvakcg5wnuahx3iafuq
e8.i2p,5spb6cl4ffallahbaj2yadag2zgyuciouhz2rdcnyjcf5phqcu4a
easygpg2.i2p,bwxry5alzx5ihgrd3glah4eotddblzhalvpheppnw4zcajzqoora
ebooks.i2p,bvpy6xf6ivyws6mshhqmdmr36pruh2hvoceznzeag52mpu647nzq
ebuild.agentoocat.i2p,lu56romn7lp6ggjtofbwwsaee6kcfonci2ezi5jb5nyo3vdo7vkq
echo.idk.i2p,63sgpiu6f33arldcxkbjsn3jgf6asyx3onjmz6j6gsk7hgbiehkq
eddysblog.i2p,ieac3ub4g5sy3wuhsbqfembnpp7f3a37xgcx537ytzsmgfzexnbq
epub-eepsite.i2p,yxvzjwd4vin6pnjauekdufh7lxaijal3kqe2bhakuf47g5zkb6xa
exch.i2p,vsyjsbbf2pyggtilpqwqnhgcc7mymjxblamarmxe5hmbxaxvcndq
fa.i2p,6n6p3aj6xqhevfojj36dixwbl4reopkhymxmatz7ai5sroh75rka
elefteria.i2p,f5s6jvekhmq7aj77xmgm7jwnw2f75ci275togqya76urm745zpdq
eleven.i2p,n2er74vsv7szwvsbsukd2lwhz5epedws7eqwahsmxy65agvjizzq
elgoog.i2p,z6hrgkg2ajmuzlrddjlffrgctx7x7fkipm6c4hdzmohyn5wkr4ya
elvn.i2p,vwjtedtgyokakyxgfeoavg535bxe7ymdvfbdwsq4iqngljqtqi3a
equwal.i2p,j7zqkvkokxmpkbqrgrkkjym4j7kzuipko4qdujdjbxnrp3qj6ooa
esperanto.i2p,2yryi2eb72hnxavjpfot7paiminbzgv5w6fv4sl5wez55ventdeq
explorer.gostcoin.i2p,ktoacmumifddtqdw6ewns3szxths2hq2fat2o7xnwq4y3auga3za
fabrice.i2p,fabricexhumxqngfziy4xkao5m5ez27jpih4chtmigg46eu7rroa
false.i2p,77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
fantasy-worlds.i2p,62a4xcyyhvfrcq2bkckb7ia37fmrssrgx467tlkxp32fjpq577wq
fido.r4sas.i2p,i522xmu63hfbaw2k54cthffcoqmeao6urjyq3jg4hddf6wf57p3q
flapflap.i2p,y53ceza7iji2vq3oa7om64whzakt6nnzksaqhmkqiisk5tvqk56q
flibs.i2p,ocdm33e3h5tdml3yyholj4objdwsrhlugfqjnqgdkslmgdzb6b3a
forum.idk.i2p,bg7kaiqjcqqeuuwb5nyo3ptcp5dgza7mihtizwqtnz2itombg6da
forum.rus.i2p,zd37rfivydhkiyvau27qxwzmerlzbqtthsa5ohtcww62zrygjaga
files.arav.i2p,gajftpr47ze6ao7e3q2tb5xmcqneyaczu4edzvwwg2qzmnernpka
fileshare.linuxfarm.i2p,rrx4hxejr4pod3tqrkj5ckzuauwy2aqsfvpiac2tkebp2iuv5qla
fishsticks.i2p,btjbfuh2wav3c7bkjqylgatbkvqaireemvsvxwetkrifuvfa35da
flibusta.i2p,zmw2cyw2vj7f6obx3msmdvdepdhnw2ctc4okza2zjxlukkdfckhq
forbiddenhistory.i2p,nlduiogwtutni5nwf5kbuekrqf3ymqmkor3hughjkckz7tvruhva
fourth.i2p,2cq65hjlt7nnl7mctthj7oejlgep7nh7gmqc6bnbflxw2ti4bxxa
freefallheavens.i2p,7etudb75nhe6vxslitptjlwrnbybdshvzxnweuiepsxbbkkxy5ka
freenet-inproxy.bandura.i2p,rblg2sajac7winv4mgvnkfh2fa3nt2zxfvxfiybj76okpwdrt45a
freehaven.i2p,y4giqqrbcb4xit5gp4y6njypupfklfdr74lfi424seenf7usjvza
freifunkmobi.bandura.i2p,5shuxvx52e3qszylwn4w7qst4siap3latyap3ff7nfnpjgllkcea
fresh.i2p,jii6utg6ubwxgls6jegu24ifrroo4qzbcizjfft2bemodp4k2i6a
frontlinedefenders.i2p,pshxfoeefj67oj4jwjh3cqiztmrgcpsbuttclnc6fiwvv42p6inq
fs.i2p,ah4r4vzunzfa67atljlbrdgtg3zak5esh7ablpm6xno6fhqij35q
fsoc.i2p,vaqc4jm2trq7lx2kkglve7rkzxhhaptcwwl32uicx4ehf5k3hx6q
fuka.i2p,e3aanmaobvwopjrmrnuqvrkr36gyubrv6f2lyygh5brku3ufwrsa
fuck-rkn.i2p,qmlmnhr3ul2lmuu4fjf43kmk6hf3dzsuxv5xu77vwys36xwuu4sa
fxruby.i2p,lqhdnr2pvp2igu5e2cxichboqzcgypvrbooynzgkmoze3xae6qkq
garden.i2p,qkk2dqx6nocycgt3vinsoc76cxkb4jreybcpgz3fcps2dbe4rowq
galacticreststop.i2p,uln6c2abwfzneakdz7dkfmdifwrjr3r53jvkmq6mxrjt2vflvbrq
gedanken.i2p,kw6isjbs66uf7576fbb3aniokxtrpqmbegf4tf3xskg2bmrjci7a
geekcode.i2p,hzmyzxa6jzag67zcqxhicydusdev77byf2qoyxjxhsrtkce4qiqa
gfap.i2p,yasbny2ndcpofprdbtv7dxdtshbebyydjv5zlnwy54gii6xnlmqa
ginnegappen.i2p,kbhfkzx5jeqhfgss4xixnf4cb3jpuo432l3hxc32feelcmnr3yja
git.agentoocat.i2p,5ihrbnmcoewaax5kxsghnmxh6p6srufhmo5pqkybdwuz4yj7efja
git.apophis.i2p,apep7dtwnuom6b7li6jirhrsygxgcdqb5svqpq6mh2rpindrzp2a
git.arav.i2p,p5nkflgogwv4esy3ainup6mgurpugmdyufizhuufauznreyvprsa
git.community.i2p,giteabolfdejtdzblkooalqei6jr67imiugmhtsh6ocw4hlj5a4q
git.i2p,giteayof3hpwkfnwnryy6l4qhq3cwdzqlr72jokzbkc6ol43mypa
git.idk.i2p,7qeve4v2chmjdqlwpa3vl7aojf3nodbku7vepnjwrsxljzqipz6a
git.qorg11.i2p,jf2mrxlbqsct67fces34x6kwbbnmlx6o7gd6g4knqk36soa6efqq
git.repo.i2p,vsd2vtgtuua2vwqsal2mpmxm2b2cpn3qzmqjoeumrrw2p4aot7uq
git.varikvalefor.i2p,6sqxtpnpqqnlqbdxu7dadmorrffnpe3evbz5zye4y5kvljkzkbra
gitssh.idk.i2p,g6u4vqiuy6bdc3dbu6a7gmi3ip45sqwgtbgrr6uupqaaqfyztrka
gopher.anonroms.i2p,wqfhyrnpknap3ushsck3ih3r7inz6uoqlr3u3ktwvejur3bejqha
glue.idk.i2p,ykbx7chmkivx3idmxd3lu2jc5w4wtlps4r3md57wszhk5w7jykyq
gostcoin.i2p,4gzcllfxktrqzv3uys5k4vgkzbth4gqednwhfpt755yivm3davuq
gusion.i2p,4qyfdhizjixe2psu7wcvqufix5wlijocehpb2futurcmlhlktrta
h0p3.i2p,k5fppzxc3bwoz2mjc7q37jojbrxo6vtprac3dzrk4wapv7irr4iq
hacking.i2p,uvxiknnzaxtcijzagp5xuweua2ctghmjfubqdufxilvnkajhezaq
hagen.i2p,e2t6rqd2ysbvs53t5nnaf7drllkgk6kfriq3lfuz6mip6xfg644q
harbour.i2p,zohxpycufzcslwb2dgdkfo75flahkl2q7n57ciqjooqia75ybada
hardenedbsd.i2p,6ebmdsir52bi3q4wfwug7ylouoq6gdafl3wyy6ccfmpffijhtoca
heaven.i2p,y6ejpmln3j2jvf4omb4ptyo2idognputhrccph74yn6eghkpxyhq
heckyel.i2p,lars7whelqo6fp2jzkzrx7aziq7dwiygkixgjarjjc6n3gnlslra
heligoland.i2p,gzrjm62ektpqjfsem3r3kwvg6zpjvvhvpjvwfxkm2ay4zu7sp6oq
hgit.i2p,ny4ev7me2y2ibfi37mykakwvf2jhnl7lfql4etaiykjiwtd735pa
hiddenbooru.i2p,zma5du344hy2ip5xcu6xmt4c7dgibnlv5jm4c2fre5nxv44sln3q
hiddenchan.i2p,6y4tltjdgqwfdcz6tqwc7dxhhuradop2vejatisu64nwjzh5tuwa
hiddenwiki.i2p,2iz3nkopz6fxbzlcjq3ofligi7mwdseuj4ndzqljogyvsggh6dvq
hisdarkmaterials.i2p,qcf3vxllflqfsbvxjlypfxsx36g5srknxnhpyz3ph5bcxdjawraq
homosexualchan.i2p,suzp44odgixf5lthy5ngy6ktabus5gz47squie2shudi6kmlwuaq
horo.i2p,vrxh2vbqsfvh2utnt3ighimu4vrgla2mfpwksipkjsguv5vewhdq
hopjoy.i2p,3wifx34yzdnj5vw3zu3kmqyz57tvlypmdnnyalqjdcaqrege6bpa
hotline.i2p,6cczi27iuxkm3aivazaemzltdqgh42ljzurqp43uclbz2lid2uqq
hp-net.bandura.i2p,z2ufexrgrxry37y4vs5hted35ygpleskfcs2enanl53hmlpzlqhq
hq.postman.i2p,7ewjvbcwgah57n64cwbsxqai7eutqofkesuxfsuhfheijivdjqra
http-false.telegram.i2p,77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
i2p-epub-eepsite.i2p,yxvzjwd4vin6pnjauekdufh7lxaijal3kqe2bhakuf47g5zkb6xa
hungryewok.i2p,to3afquvmrmk4kvozisb562elb2hdka6hwk6oeud32m6h2qtkcqa
i2chan2.i2p,rqd4efol6ooxukq2jj6toml2s7uutj3kbkl6k7kfm7vpmmt2k4fq
i2p-mirror.bandura.i2p,aq7r54ebou47b533y5seiod7dc3aeycucevl2pqvphnjhjwblr6q
i2p-projekt.i2p,udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna
i2pd.i2p,4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa
i2pdocs.str4d.i2p,yfvbtrhjac3jutdsqzugog6mbz3jtyhpwovrt2mqc5mzv534y7cq
i2peek-a-boo.i2p,qgv64klyy4tgk4ranaznet5sjgi7ccsrawtjx3j5tvekvvfl67aa
i2pforum.i2p,tmipbl5d7ctnz3cib4yd2yivlrssrtpmuuzyqdpqkelzmnqllhda
i2pjump.i2p,2mwcgdjvfvd3xwumzqzqntual3l57h3zo7lwdmkjboeraudpkyka
@ -130,221 +172,302 @@ i2pnews.i2p,tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq @@ -130,221 +172,302 @@ i2pnews.i2p,tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq
i2podisy.i2p,3c2jzypzjpxuq2ncr3wn3swn5d4isxlulqgccb6oq5f6zylcrvcq
i2pseed.bandura.i2p,2bpbnalf76ktxzhfekkwcklmo45xzedi5em5bdoyedrhw5bhvtia
i2psurvey.i2p,pemwrlamhiiv74ok4kwoo4eqwzzjshp4q7ir3nlh4jfnt4zjncia
i2ptimes.i2p,563tjwihw2ql5q2kl7d7md7ywedpapoqgkxgazkz4gmlrb2flqbq
i2ptorrents.i2p,yt2qxe6nq3meofloobawy6nlnmu5pxkobqjyspdngfrasd5v7bca
i2pwiki.bandura.i2p,isbf7tzeyrutnd5rvmjpqaohe7cz6onqgci2wvbuyfwc62w74r3q
i2pyacy.bandura.i2p,owy6s5xlkf4zsrwwpemvoru6x6qmrye2pe3v4v3dncvcrzix3fiq
i2speed.i2p,532c5r6ra6rcf2mvfgtlcxbn3lpplybwxul4xsg3ps64dlx73fga
i2search.i2p,cpgupqyhxamjfgdd3qk5ux673qomu3o5kqszvq6fwuigzifkxzta
ibft.i2p,ds36spqcf7dnj46in5vfnbbwcbjpslo6aafkdrkc47a2oq3zvtta
identiguy.i2p,3mzmrus2oron5fxptw7hw2puho3bnqmw2hqy7nw64dsrrjwdilva
idk.i2p,b2o47zwxqjbn7jj37yqkmvbmci7kqubwgxu3umqid7cexmc7xudq
ilcosmista.i2p,6u2rfuq3cyeb7ytjzjxgbfa73ipzpzen5wx3tihyast2f2oeo24q
ilita.i2p,isxls447iuumsb35pq5r3di6xrxr2igugvshqwhi5hj5gvhwvqba
inclib.i2p,ux6prousphswf56bym7yo7kst4ybh45y2z2wrnw7dujmrz56hq4q
in.i2p,r5vbv2akbp6txy5amkftia757klgdy44s6cglqhmstpg65xycyjq
infocon.i2p,ic7rentjh6ilzz6p5kveiuyzov534ksfcexmpeniyallzf5in67a
infoserver.i2p,jd3agbakybnhfvkeoxrx7t33iln6suzomv3kxkxf77j7rkonch6q
infox.i2p,qoz4bwrtnicqyxemrxubdc65uojrqn2iem6v55b6xmxzdmfzcvlq
inr.i2p,joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq
instantexchange.i2p,5wiyndm44bysev22kxvczxt37p6o6qroiqykytrvn2yzi55aqfxq
invisible-internet.i2p,jnpykdpp46zenz4p64eb3opadl5g42dls3rurk2cvq6a3g3rvbvq
insecurities.i2p,4uggkxbumfoufekfu7scfx4vkqfoqslv4fsog7kgwjcat2yqzb2q
ioannism.i2p,g2246vc2tq64rmomwe47v3jnbpz3b3ec2wrrhadukj7lxmwd5aoa
irc.acetone.i2p,qyzbrdw26ejjdjzsrcmq5h3ggdzk6cq5xynrgee5t5q73gq545yq
irc.coldhell.i2p,d4b3dcqt32yq55b6ct6f4rsib5svzgwkfz4klfczuz7e4p2v6rkq
irc.crustyirc.i2p,4ygmttynho5k32vfm64urriqx2vj3s6hkm52jwv2vlwrynu4z6iq
irc.echelon.i2p,ez2czsvej5p3z5bquue5q3thujcodfze7ptybctqhnqc7hms5uzq
irc.ilita.i2p,5xeoyfvtddmo5k3kxzv7b3d5risil6333ntqrr3yvx3yubz5tk3a
irc.kobomy.i2p,2j75o23f3hhpebthdiuzevjo3sphmok4jbr5yrtmwav64v2hzuqq
irc.nerds.i2p,nlqhsdd5a7hanjea33mwizg5ixh3xcv5dczufpf3qcfpo6tx4esa
irc.postman.i2p,hhcy7zznltay2tzwdvtd37g2inptemz3hk5zmxyi57d3sxgxbseq
irc.r4sas.i2p,hodhusp73gltozgrnianlbploon3rrvhrzfn5mf2g46o7aaau5la
irc.rpi.i2p,ppqu4shst5hfjn6jgxyragcanyxurhmof7jdrxag5srpeobevh5q
irc.welterde.i2p,424n5ty6bryfsn3m3buckx4njs4vaw2qch7drfdq32btsyycbflq
ircs.nerds.i2p,w4d6hj3q7eyfrkb3kcy7rox2fdjzywypvmyrudtf2q4gdzs2qlhq
isitup.i2p,xk6ypey2az23vtdkitjxvanlshztmjs2ekd6sp77m4obszf6ocfq
isotoxin.i2p,wue3ycaccf4texikza3fh6p5yrmtgnooisuypnepo5mo67lmpcqq
itphx.i2p,zwu2erk3wtyxlcbmd73kmxcirjghdkk4lpupy3xcavpm3qbob4da
ivorytower.i2p,fpwrfvidfexsz7dspofkwtkmmizm7lyralfz5kvykffk7gubvxsq
javadoc.skank.i2p,us3amyq3emvm6rcxmrar3o3uoiifnafijgseho4dxdsjgonfyaxq
javascript.i2p,idxpwvskkaq3pssrnqpxmiilgeqwf7d2hf5xpusossqz6r2nudva
jikx.i2p,aazr55itvyns4lwppvx5njyx5tjdwemw4w6jbmpegdunznod2ieq
jwebcache.i2p,xdffxnxtjd6ji2zig3cgva7igvl2tiapyjoc7ylbzwqhxudbmvfa
jbo.varikvalefor.i2p,3flbkdhahkgq47s7vytubh3v4vk3lyqgwwh6dd2k5szqlrivdmta
jdj.i2p,mqxhou4icts5tmoq7ndz56sb2ox4s2atzm2urmyn2ndrj2dzzguq
jimkiebs.i2p,epqxjestvatyv2ala7iqbm45elnecqecz2zmpoklzvekwjapu45q
k1773r.i2p,zam7u6vslhemddz347uusuzjdk5wma4h5hcmcqlng4ybbpdbjhnq
kallist.i2p,rpoqwcozn4pdxz7bp2vxsl7vfibpbccsymfuxg3c7v7yj3um4bta
karamba.i2p,g2lizyuyzms7m6gv24pzege5zapbinxfd2dzbaha6k246pl2xu3q
kelvinchan.i2p,6s72dyf6jwlvk2u455lksvcs5r7deafc3iniwo5kp4ssm777noma
keys.dlms.i2p,znl2swe5pez65qxrr2s2s4lmdfky6mnppvh3p5j6suuiovymhjtq
keys.echelon.i2p,mwfpkdmjur5ytq4og36ym3ychinv36b2a57f4rmgqmtrwepq3fva
kibykarni.i2p,xowcvzbeq72slpbrwmjl3zy6xkrkb2ncctpkkskeqts63vedtg7a
kill-9.i2p,3i3bbs2zfabyleqxcqueeegakutrtk3hbxmvbtkrgwvetlmity4q
kislitsa.i2p,khceo3smaxtng2tnuicmcbhdnkk2j6myi4nkigcux76qh3aabdhq
kkk.i2p,kukluxklanib666d73z5fyeyb6vnystmvvreaodhjf73rhl4wxva
knijka.i2p,knjkodsakcxihwk5w5new76hibywia5zqcgoqgjttzsausnd22oa
kobomy.i2p,f2m5wb6iotejsdhimqunkggw2pbboozd6vcha3xi37zjsecya2ua
kuna.i2p,bwzbe3pn3g2oqce6grxocaqgw6p2oleiddsgrm7d3fms3cw44izq
kohlchan.i2p,kohlchanvn6vtsujobyw4pt5naaszmxqutd5hsdatmxfe2qaqhya
korol4ik.i2p,mr3z5lggdppc3yw2r2egstpg33ga2wfocmozac6kjmhhfk3asm2q
kurator.i2p,sp3umnyofy5ytixbqcue4jrpxixccgnrxtiuvhg6juep5s5lrs6q
kycklingar.i2p,gctswdhp4447yibxfbqg3uq2bvx63qjeqnaoaux75zw73leakyva
latinum.i2p,n64izx6kyu3xv6yvc45mvpswlq4txbkc5y2okjwyoseb5lmzxoea
lbt.i2p,5uhjsgyca6ggdvwjjwf67bcmalpbxitopupjpygtahxvkwlh5mzq
ledechaine.i2p,7s4vtwkvxvmigj3r4zrc7s5ajdeqtris4qnj3n35cuuvuzkpgqsq
legalcases.i2p,tms2ibdkp67ddj5ez6l4zwvw33jdpz5tmavv3kpjdcpavfh7np4q
legwork.i2p,cuss2sgthm5wfipnnztrjdvtaczb22hnmr2ohnaqqqz3jf6ubf3a
libertor.i2p,7gajvk4dnnob6wlkoo2zcws7nor3gunvoi7ofalcps5lc76wruuq
lihai2333.i2p,maxh5bc5hom4g7udes2m4uy3lfocrqkmcy2m4mvkqca7ktoe43qq
lenczewski.i2p,7uypwo47x4vnryoz25vwisu5jpyhz7pcdvnfzvopww3wxc7wiiia
libreddit.i2p,libr7vbp7i3lsvqwy5aqgql44uxaufawi5yrloh3x7sezubsoaba
limak.i2p,jzoxeuuqt6wo55pvt4uh7o5i47oyadrvhyjli4hidqldhihu6lna
linuxfarm.i2p,br3njhezhzx7mcv25nrxkrwu5g553xp4oyavsjhfa7jwmzyp3q5q
lists.i2p2.i2p,vmfwbic2brek2ez223j6fc6bl5mmouzqvbsch45msvyyzih3iqua
lm.i2p,yeyar743vuwmm6fpgf3x6bzmj7fxb5uxhuoxx4ea76wqssdi4f3q
lodikon.i2p,u3f67staiwhqxpacya3clmvurdwd2kp7qcthzhstqnhrmlwc2g4a
lnxcloud.i2p,wryxsgqp3xl7fuohijmxlugrndtp2vixqlt2obpgriwt3fpdjn6q
lockdown.bnet.i2p,vgbvuawi5y7rh32xxjlqcmsoh6quigdvypqneoidiy7y7x7r2umq
lockdown.i2p,vgbvuawi5y7rh32xxjlqcmsoh6quigdvypqneoidiy7y7x7r2umq
lolicat.i2p,2mvlbpgzlawdxqv3zlcgcje475kv35ow2itpztjpdqegbtjpvbda
lolicatgirls.i2p,pjhlh4h7zn3slglx46ffob5ifcccrcqr5dzbyyueh3wd6a6bizra
longseason.i2p,ighnngssgd6p4kyrec6m556rasvbtx5xe7bsyxol4lie2dibi4da
losinka.i2p,r2z2tcs6eguevoxlkrmpkcanuwgnsit2o45svnwaer3wq4v76hrq
lyoko.i2p,afuuortfaqejkesne272krqvmafn65mhls6nvcwv3t7l2ic2p4kq
lytor.i2p,ezjrtucwkkf3xgssjtq6tr27hz4zhbkobr4zjnl3x4jrwy7f7m6q
man.i2p,progskxxt44tlefm5uc4jqseanlhgbbkjyz4g3nvjjzbvhhp342q
lucas.i2p,hcb6j5indzeqfyerq4igx45xgruijbs433mh22ye4osoxkxhumwq
lunach.i2p,m27cpx55hqhcfjz4u62tiynjtzqdw4s3kanxdgluuthnndiquoeq
madaidans-insecurities.i2p,4uggkxbumfoufekfu7scfx4vkqfoqslv4fsog7kgwjcat2yqzb2q
mail.i2p,mail4okikc3tknhn2tfyqzq7mxgzltqg2tw5v5frtzkcsm45zdra
major.acetone.i2p,majorivqe4wud5ksadgfycdkgqsesqbbnw4hpgcqfixy4sm77f4q
major.i2p,majorwsiehucyqfqbw3g2on3xqq2pwrwdd6hhyludqqr6ct7xdoa
mapwiki.i2p,p2lufcvbzq3smirs7ijwds3y34cxzchveogb4jflbpmk5pzy3wqa
marenostrum.i2p,tlrae2xdtewfb262daw6ygm5nz5vusc7rbiefpndubjk4jvh5roq
masterdestroyer.i2p,yp2g7frk3ze5ljaxbmhmh6hhda3rmpwmpianozi6or2uzqzdur7q
masflam.i2p,ucvzbekxpbzfizwndx4bgsj5bjbygdu4vc3xukiseiw5bvatxivq
mattermost.i2p,x5oovnhnuli5fnwtgkbd5z5jvrvdvprqyuofywx6uoxkk4bie6ya
mayvaneday.i2p,zli2qsg54w7y42vgw4xxlnj4nktcpg7xp33yjxkp33sjafvznbwa
maza.i2p,wiigkmy5je5ox4byjt7z7fh4btojbixbmfv4chnzqoovmgnvdpoa
mdleom.i2p,ggucqf2jmtfxcw7us5sts3x7u2qljseocfzlhzebfpihkyvhcqfa
metager.i2p,4zdcetlcp3tdg5h23gd3aeyzbvodepid7a6mb3w4qvxkdnm2by6q
metrics.i2p,z45ieamhex2ihqv7oowk5fz4qq47rbvxhhhbaaiinpajbhuevtpq
mhatta.i2p,o4rsxdeepfrnncsnjq675xogp5v5qkbfgbt6ooqeyfvlifobrjxq
miyoisomix.i2p,rtv5ufhxasszywdh3oelqrc4yg4kirtirglub4h3mwovwig624eq
minecraft.reloaded.i2p,qs5ihihltxhhfi6wesihgbvoaurqxgdpxgmwnmsk5d5beabtvmvq
minecraftlog.i2p,vu2v5xnfk4ivrcmjx4fvofzts7fj47jcq23zfpg6ajj6p3ytt3hq
mk16de.bandura.i2p,rrllz7nkoeaydqzc5tqdexbfpkvensi26nqg3ly3cxrm5qt6m5sq
monerod.i2p,fjvlhyxejnssd5yjxqvom6nooqjdrhd43umxnzw33h2nqzhza5qa
moneroauth.i2p,kt6uh4z24tendrol5zbm4wv4apq4nbv4w7k5vcguvbpg3alrqyxa
moneroexplorer.i2p,je4vbduigce7pgjivvo26d4abn3u5mfsos5zemp3a75xzcv7nm4q
monerujo.i2p,puri6y5dtwh6zr4u77ep6ozatun6iz7v4wai2dzxppz7654corlq
mosbot.i2p,5bhmrp43mjwlzf4x64xgdrkwmw4luvng6eq5waa663a7vnkp732a
mooks.i2p,6txhjmnxnrjku4cmdwtyacjzhwythc7l5euqaxieyrc4vjotqwzq
mosfet.i2p,s5ynkgagndmpxpf2kmnenv4x72io664gzd2x3qef54ilammnte3q
mtn.i2p-projekt.i2p,f52x5fp6uhq53f5zle5d6rq5un34xgmxgazvilvmzcby37xcmsfa
mtn.i2p2.i2p,l6kuhtmgvbp57d7jwalj5nksi6nr4gfzbz4oit62lxgipb3llt5a
mtproxy.ilita.i2p,vxxfipsygx6jpz57pmb3d3mjgsk5ls2idxeo2bffs3yp62muyq7q
mucats.i2p,4vjquedemoznbsva4j6wnr7hyms5k3gwucmxgcnwcwweontbcrha
mumble.acetone.i2p,plpu63ftpi5wdr42ew7thndoyaclrjqmcmngu2az4tahfqtfjoxa
muwire.i2p,c3r6by4k4kzbx7yvq36u5rieuymshuq2pebo3dzs6oovpzn52uoa
nekochan.i2p,dszr2z2swmeczeao2bqgop6fyh34jw5baeiybsavwtihllwa5qwq
neodome.i2p,5hkhjehj3ct2pvcah7dcylwef2oti3xij5myxbv3pd7rocio5vkq
neoniet.i2p,jf32pdnofckjvedni77vjt26m6opzzz6ocpkpxof4fptzym56raq
nekit.i2p,axis6zcqacv7le2ms5xqaerecuk3jyrijifrstvxl3or5g5n4ova
nekofiles.i2p,rutorktnoonk3t4sxmv6g5rj6mzsilfwxcplvfybemssjrva663q
nerds.i2p,5wpwlbka4wj74rrnwbieopppgtivbqxljznl3bs542mxtvjz7ffq
netbsd.i2p,jjz5ajknu5rku4p6xb6i5xwjnp3nd6c3jwi2qnzbpaodyf7g2lja
nethack.idk.i2p,zcojbufszefu5bfht5cem3zlhfvv5y3jzpzbaccu3ehje4d7pb2a
news-i2pn.i2p,wwcqkwfo5yhe6uribv5tzylk25j5hkdk6gdnyftzd3k7dawlzwca
news.neodome.i2p,trhwcnygfkeqjj6g4xhmrdp4gsjqsye47lsxshbmwbten4ywt5oq
nitter.i2p,axd6uavsstsrvstva4mzlzh4ct76rc6zdug3nxdgeitrzczhzf4q
normal.i2p,j5fex634r2altzb3kjvu35qekt2r3hgsqzg5qxoy7dp53heu5pma
newsxml.idk.i2p,dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka
nexus.i2p,6uz2ihv4avlfhui5eyrisw7yx2t5mclxyl6blwjgw7zc5q4j3isa
nitter.skank.i2p,l2aoqvwkq2prrv53cbk4k2ilxw5s2fc7eo2rjunnixp2hrv3iwda
nntp.txtcon.i2p,nntpsqgdoky2fuctc2hc6vuls2b4okxpkocic2eo66uup3dtaq7q
notbob.i2p,nytzrhrjjfsutowojvxi7hphesskpqqr65wpistz6wa7cpajhp7a
notochina.i2p,h3xsjhfyf4wah4sou3gepzibetdntrmiax3zl3x7ozyjv5krakaa
novabbs.i2p,bicoankyijabtj2nlwzjmr4mamybr6bgc6xclpvsgzaaalzhhola
nsa.i2p,nsetvbclpomqxfcit4mghn6z7vdhnza6jdzczby4crnto32uykga
nullchan.i2p,nullz2mkp7znirlcersxpk7qmkmgcc6u3yhe462p2qkpxsdb3mja
nvspc.i2p,anlncoi2fzbsadbujidqmtji7hshfw3nrkqvbgdleepbxx3d5xra
obmen.i2p,vodkv54jaetjw7q2t2iethc4cbi4gjdrmw2ovfmr43mcybt7ekxa
ol.i2p,bnb46culzbssz6aipcjkuytanflz6dtndyhmlaxn3pfiv6zqrohq
onelon.i2p,irkvgdnlc6tidoqomre4qr7q4w4qcjfyvbovatgyolk6d4uvcyha
omitracker.i2p,a5ruhsktpdhfk5w46i6yf6oqovgdlyzty7ku6t5yrrpf4qedznjq
openbsd.i2p,ahwlj76krc5do77pibighi2frqmfccpezyiqfmiernvivwomgvuq
opentracker.dg2.i2p,w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa
opentracker.r4sas.i2p,punzipidirfqspstvzpj6gb4tkuykqp6quurj6e23bgxcxhdoe7q
opentracker.skank.i2p,by7luzwhx733fhc5ug2o75dcaunblq2ztlshzd7qvptaoa73nqua
outproxy-tor.meeh.i2p,77igjr2pbg73ox5ngqy5ohzvrnur3ezqcogtl4vpuqtrcl3irsqq
outproxy.bandura.i2p,smaie7bxvpy53iiabfxkhmsjtqs7vzjcr5xxsysjbbobunwrav2q
p4bl0.i2p,lkgdfm4w6e2kkjhcdzr4ahhz26s3aunhrn6t2or436o73qh4z7ga
outproxy.purokishi.i2p,nieasaidj7wy5nammqf4f7zzcdafi4apygwn5qwscpn4pq34hqia
p2p-node.i2p,e7uvwnpkzbn5zdwr76ujlhym4lk5pfkqhvfwivt3mszx7l4lpj7q
packages.i2p,2gbnylztt42dgpjh5r5tmy6oxm5xag6qv4femnbbqbpza4l2l6ja
pagwin.i2p,qggplwxvsvctsdzgld2shfyjlokfoxur3pkfapygs26i4hwawfga
panzerradio.i2p,rawdhtmxzynf5mhrpyhnbjqqxswidr6gvvcbbt4hbpjuv5jebw7q
password.i2p,knmjkeabbhudejkikbzhhjqsb4r77o45vkdhve6d254quttfx3wa
paste.idk.i2p,qvgktychvlbmqwnoqgz2siuna7f5w764wgkbqcwogipfjzf3ksva
paste.r4sas.i2p,csen43keji3qiw6uobsgzysxyjd225g6446ylq5uuz6ur2glkzaa
pay.privex.i2p,cz25423yahhbd2wavtwupsbcbdg6wkn5vvh3466hbmmrzlu4wxyq
pharos.i2p,vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
pharoz.i2p,vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
photosarchive.bentasker.i2p,w4lnfcg2chbkwigogba7q3o5pgtq2baip7z3z4afaj65axhyc5ca
phreeroma.i2p,44fu2fhq6q36re2xqnkuievdfsroi5xchgbowkqib6ekak3ynm6q
pizda666.i2p,bczoowsc6ik7a4mya45qnlq5n6c6llpd5ni3u67r4r4drgohyira
pizdabol.i2p,5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
planet.i2p,pztcztaklof7s4me2vgtdddzesnunvk55zke6oz5e77ci3qk64yq
pleroma.pluralitynet.i2p,22wwp4s4n4sre45cj72zrfcdqcelpga65yrt6jlgahehxtbg2vzq
pluralitynet.i2p,yphtn6ponyelopqiccm3nfznoc34byroack4z33lvi54gyfeuawq
play-it.i2p,oxt7gdu663baue7lugdmgxqkmtrfdy2izluneqdrpv4pfslxjlta
pocketlint.i2p,pocketzsq4r4fef2bw57sn4paufjh5dw75azu5sr4hk2qwdvucsa
podger.i2p,56pcmc4rxmtzs6ojvszpiqmh47et3m6amh7kfszp4wbvz2jbpnya
polistern.i2p,ztqi2zewgtifrg4efs6eyxxi5www27ymley3aiz4obhulbnszlva
pomoyka.i2p,omt56v4jxa4hurbwk44vqbbcwn3eavuynyc24c25cy7grucjh24q
pool.gostcoin.i2p,m4f4k3eeaj7otbc254ccj7d5hivguqgnohwelkibr4ddk43qhywa
pop.postman.i2p,i7vd76psp3oyocljiqkoyz7fpr4fy2xq2asclf7qih6k57aj5xrq
portal.webhosting.i2p,bflwwtclsmmrimszczoafdrdzw6m7bszkggv4qs5e4aymghoxsja
pravtor.i2p,2sr27o5x2v2pyqro7wl5nl6krrsbizwrzsky5y7pkohwh24gn6xq
porest.i2p,46l7beij4rerlbuj7xmcngarlkhlpgaztywrleiwagjuiipcebbq
privacy-handbuch.i2p,3cccw3cxxghkalgichofulid36ekwplv3stubvfot522mwxcnu5q
privatebin.i2p,e7qy5kc7ivqtnrbdn5ymx5nmbdedlrjkdchqmmkhud4ockrime5a
privetalena.i2p,alenabivbkqo2xoikterpsc3gquqzacxfef6usbifrez5ioegjjq
privex.i2p,omgulpderyhggjbaksgcccvjk76yvbp5rsnm4uos2mqfe5iv765q
programthink.i2p,programygfltn24q6foacm5gbuo3z2geub2k2k366llx3bph4ula
project-future.i2p,ivqynpfwxzl746gxf376lxqvgktql2lqshzwnwjk2twut6xq7xta
projectmayhem2012-086.i2p,ehkjj4ptsagxlo27wpv4a5dk4zxqf4kg4p6fh35xrlz4y6mhe4eq
proof-of-loss.i2p,ofhehzoj5p4khpkookxb63tmqvrmcxaapgb3v3nm7kd5wjgebs4a
prophetgram.i2p,cufuwm75gjpt3svl4wjmo6r4zjv6eqyjdpiuqfckgb5aqqdbgyvq
psv.i2p,pmzcuml2oi2ok2h5i6cepcyxxjrughzgliai6hzspdlyt2bucy7a
psy.i2p,s3elzoj3wo6v6wqu5ehd56vevpz2vrhhjc5m6mxoazicrl43y62q
psychonaut.i2p,laf5nvzn4wz7ndgtdysmhvebpyjo3fkth7i4z4c2kp7su3wi6e2a
psyco.i2p,eoilbrgyaiikxzdtmk2zeoalteupjrvcu3ui23p4wvfqo25bb73q
pt.i2p,umbkgg3nhvgunyiwo2odfo3ufbdijb2ofg5eha6nyd4ymp4yitna
pubsub.i2p,kse52thhz4srsf2ibw7zj6ua27df5a2u5gnqgf5jxwvranbw6mpa
pull.git.repo.i2p,3so7htzxzz6h46qvjm3fbd735zl3lrblerlj2xxybhobublcv67q
purokishi.i2p,ia55kcrvskaitnxegirubvderl4vhva6bwkiducbkma4scy2rhca
purplechan.i2p,tyiwxpgs7syjvz3cha3uckaxgondtiktlsvriebyy4qmzgbaj3gq
push.git.repo.i2p,jef4g5vxnqybm4zpouum3lzbl6ti6456q57nbyj5kfyldkempm3a
pvsur.i2p,pvsurxi2hz2n45kfrj5b3ny6ko4ipj2u2piftjen44npkpnbwh6q
qorg11.i2p,ivusryc5mfrroomm6s5no4badevf7djzlgzlwarce33no2bsyi3q
quest.idk.i2p,k6stkvw3jr6of4j5g3pu34jowfpl4k4jiqih3yozhcvinkok56aa
r4sas.i2p,2gafixvoztrndawkmhfxamci5lgd3urwnilxqmlo6ittu552cndq
raccoondad.i2p,utoagugf3imr6mpjsithhnpvvvyehsnebisovn6kqn4vma6va3ca
radio.arav.i2p,plkybcgxt4cdanot75cy3pbnqlbqcsrib2fmrpsnug4bqphqvfda
radio.idk.i2p,gqla6svl56uazumw2a56rzmvfmcr6fb57bm5kpbb6oibqi6o66gq
radio.nerds.i2p,tpbfxyluryodtfxdpwsfvw7fl35p5ezrjk3tlcv2atlmc4fl2ctq
radio.r4sas.i2p,cv72xsje5ihg6e24atitmhyk2cbml6eggi6b6fjfh2vgw62gdpla
radioliberty.i2p,libertyx5gywnmn4snrr2fborvugmthl2x5vf3rh43v3744kmpwa
radioplayer.i2p,5tmr7qghx5eecoyvi77rsy7fqxeoyqcdpvg5wasoitn6ywkyobbq
raklet.i2p,j3vnnihngp3ti2trktoxlyblltjn6gxscbmasb5zun5pdndkxkoq
ramble.i2p,smv3cryi3n7d5ll7xpvlhstubi5yj4dadeltyrdwdr4onwd2jvvq
rambler.i2p,czptodzrdjjzff6jukipd2xv3pdjfg3gv53m6bsaoaab5fyr7zmq
ransack.i2p,mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq
realsite.i2p,ffacpzudiclaqh6fkck7ungeacfoafvijduhmwvnmp6e4jridhta
rebel.i2p,nch2arl45crkyk6bklyk2hrdwjf5nztyxdtoshy6llhwqgxho5jq
redzara.i2p,ty7bt62rw5ryvk44dd3v5sua6c7wnbpxxqb6v4dohajmwmezi7va
recipebook.bentasker.i2p,ajagzagm5uyc2oac32ycx42znnatejliqorbk3y66xt25guxnh2q
reg.i2p,shx5vqsw7usdaunyzr2qmes2fq37oumybpudrd4jjj4e4vk4uusa
reg.rus.i2p,k2r2wda4eavt4hoq5hptprqfmixusirq3gi5bl3z2pqzcd6felwa
reichsmarket.i2p,2uj4xomizi75swws7q5icmnavekb2w2ws2wlcqtyltde7pgymraq
reloaded.i2p,wxbh2yq5twqinsw3ztjogqovvdd6h6j5uxeg3lh53x4w7klzv3tq
repo.i2p,uxe3lqueuuyklel23sf5h25zwgqgjwsofrqchhnptd5y6pedzbxa
repo.i2pd.i2p,ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
repo.r4sas.i2p,ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
retrobbs-nntp.i2p,fkyzl24oxcxvjzkx74t3533x7qjketzmvzk6bwn3d6hj5t7hlw6q
retrobbs.i2p,mnn77stihntxdoade3ca2vcf456w6vhhvdsfepdvq5qggikvprxq
retrobbs2.i2p,ejff7jtyaus37slkwgeqrrcmyhpj26carp7n27f5h6s5vlbeiy6q
rfocke.i2p,pphesm2icsbqi7uzsmxpgyy4kc22b3cdpb4uwplkkjmupexva7dq
ricycal.i2p,tfkz7rgqh6rwvlo2veftw4why2dej3gztiglzfqfvykyzak2syxa
rideronthestorm.i2p,xrdc2qc7quhumhglpbcuiqxr42nuffv4xj4a73jbr4ygepitibqq
rpi.i2p,56p5qxsrvo5ereibevetw2qbj5bronmos7wxunku27g2s4kpbnlq
rslight.i2p,bitag46q3465nylvzuikfwjcj7ewi4gjkjtvuxhn73f6vsxffyiq
rss.i2p,j7qbshtyaxwiuzkshduwqqq35ctb4cnfjvd2pnbjn3ugmblemsza
rsync.anonroms.i2p,4q6llvjjpgncu6wbol2rqq24ksrtscu5njj65jjovqlsxounxbdq
ru.i2p,m7fqktjgtmsb3x7bvfrdx4tf7htnhytnz5qi2ujjcnph33u3hnja
rufurus.i2p,7msryymfdta3ssyz34qur6gi4jyfkvca5iyfmnceviipwu7g2wca
rus.i2p,gh6655arkncnbrzq5tmq4xpn36734d4tdza6flbw5xppye2dt6ga
rvklein.i2p,pzbqr2s25zpgbwiz22nc7hzxlusqxwhpxrsmln63y6fd45whnjcq
sdmr.i2p,o2vtbbcddamtqqomtf7wbkzzkh2xovt23lc6np7qtxbuv6vtul6q
searx.heckyel.i2p,bbttsspdeozbfvmjm3ewnbwpot2fkhhk63w54ytptbyokazkydea
secure.thetinhat.i2p,4q3qyzgz3ub5npbmt3vqqege5lg4zy62rhbgage4lpvnujwfpala
rus.azathabar.i2p,6gp6ykan6ovr7p6dln56msvmdk6nrtvzoypz5dbhkkt4bdnryjna
rutor.i2p,rutorktnoonk3t4sxmv6g5rj6mzsilfwxcplvfybemssjrva663q
ryona.i2p,mzt45ux3budteuxz2b4xkwnphgspgljuwp3rxm3d2yr2sij6wopq
s01.nullchan.i2p,mirrooeo34iokdgf3wno4ubx6x6uj7f2pqyjmmrvtg4m4parvguq
salama.i2p,4uoef63gv2sg6dtqmom5oypt6taypklekvlejfox56eiylprzrmq
samainu.i2p,zlwgylqmlx6wxwnxf3mx64jl6yp6wv4sjeiidqw7k3n2wh2m46pa
satoshivision.i2p,rn5c533w5baghskquu3gtqlehwjkstzzbk5chbc5qhivsz3a3nqq
scamdemia.i2p,fdkiv7o4kzaikwkw6hbn7iedidp25lv6eo7yeyeqxai3jz7mrvzq
scanner.linuxfarm.i2p,kojzsg33v2zxwqp3twpqzfvflaeoxgzxrl3douf2x7xv27ggfnaa
secret-site.i2p,p6hbhjgdv2e6gyydrqh2ztl6onxnyilmj4ts7d7aj3uqssr7vvfq
securityinabox.i2p,np3agu3ekd3isrzqzvsw4llwlr3hg5xbw7n7a23n2zfvhhm4e7iq
serien.i2p,3z5k3anbbk32thinvwcy4g5al7dmb75fagcm3zgh4rzrt3maphda
sftp.anonroms.i2p,uozfd7ttkhjsofmgs7lfcy4pgngs4yp7kvnbhnppebjumgbjhjla
seven.i2p,anqf44jmf7kby2qcvcx7gug6nuyansdu4msdbnp5kojom27rrm7a
shadowwiki.i2p,63gxkfc4hlcbxrdoepw2i2hyxai5qkxmi636ag3y7sf5tq3imoya
share-les-miquelots.i2p,uxwha4jswnt6jrznj7yhfwldfilvyasnjruimmbylbvq5qykpbpq
sharefile.i2p,o7jgnp7bubzdn7mxfqmghn3lzsjtpgkbnpjjsn6ddevqbchz3rta
shoieq3.i2p,3fjk4nfk3mccch4hdreghnyijcvovsi3yucjz3qzj5sxngqk5j6q
shota.i2p,75xxnc5hkeg7a3z5re4cpybbxt7te3p2krgrrgoka4hib2nr7k4q
silkr0adrel0aded.i2p,rdqt2xxpsc5tzj7gjvcrpi7jea5gtbetgx7w2npobveg5teatdvq
silkroadreloaded.i2p,hyn3mwmyeovcn2paujxur2eury2ufqpoahvbbqshfoggljn25tra
skank.i2p,qiii4iqrj3fwv4ucaji2oykcvsob75jviycv3ghw7dhzxg2kq53q
smtp.postman.i2p,3nrunsrgeo6grhx6y6vsx7vibm5vabtockdbys3sqdmj6vha7k5q
solr.chudo.i2p,utl2ds5vztfomjgerohvxrgaq3g6zrspyku4s35knfmu4rihhgxq
snippets.bentasker.i2p,vgduvgxudaceslvwlvtda6b4csobvczygcqpklm3yeuke2zgvcaa
speed-test.i2p,7lk5mgyi2knhqjjwjeiiuwlrn2rs2s577e7jh7z5rmbe2s6qkjpq
spirech.i2p,labhopl3kd3eo7cj7kqa6nkwpczc2qj52i37jky77ugqazy7dmna
spoika.i2p,u7uyxhgikc5ifj73oz6yedpy5pvtynbqo3n7rk5qyy5h5yhz4wbq
sportloto.i2p,sportloto4cqlq6uhzzvgsgd7rcsfu6mqtk7wp6zmzqwcpflbsdq
spyware.i2p,36j7itgqmnbinh3ortujakkvqdrbhlqu4b2qcwb46mue3dpzxqfq
srr.i2p,t6vdyn5sbtorn3bp6i7ndnv4lmxhk4qnqmyqlaxykdhcwatchlza
ssh.vimarsha.i2p,zttfrujqde5ddndps4stdspvro3khawdhcdgf73pae4i7dnvv4ea
stats.i2p,kqypgjpjwrphnzebod5ev3ts2vtii6e5tntrg4rnfijqc7rypldq
status.str4d.i2p,ycyyjo3psqbo45nuz243xvgvwnmzlanzqbzxv3kh6gyjztv7425q
streams.darkrealm.i2p,ud3gcmvysjch4lbjr2khmhqpf7r2x5if4q43xkqdptl4k7lc4muq
svong.i2p,wlamzgxjc4k67fn2c2pdems2dzfq3hkdbbt3n7ela7p2wp3pew6a
support.i2p,supportpwqa4cc7q43hb67tgd3dvntrwsy6725iufahm7kiluysq
support.torproject.i2p,6r7j6jlbrxb35k32zktopvr3w3pidm2baymwol33hq7xmy2sqm3a
syndie-project.i2p,xa63tpfoaqt3zru2ehxjjfbpadwj4ha6qsdvtcqtyr3b7hmt4iaq
syndie.echelon.i2p,vwrl2qmcif722fdkn3ldxcgz76df5cq4qypbndzthxwgmykyewta
tabak.i2p,y5o2vwb6kart7ivpnbpk4yte3i7kf2dsx7fy3i6w7htqtxhmbzia
t-ru.i2p,bkhuehxydyprxpd4372h4boyluardjogyuff5p5l3u7syguavz5a
tahoeserve.i2p,yhs7tsjeznxdenmdho5gjmk755wtredfzipb5t272oi5otipfkoa
tails.i2p,5d7sl23h4uer4czjdtlomkb6ykeiss6vqkxzausp6f6gmty2plaa
takipsizad.i2p,ufkhvmacngokfufxinfkdvfmbpvwvog5vrjiavw5zv32jnekcxia
talk.community.i2p,talkakxfa6ihzn2mbzar6q5chdtkpnjp633w3tarul2bb6tfmoua
talks.i2p,v45dmrrbjg3ucrazgl3t2tktyjajo7gvfexhmbdos3pi5kfuocaa
teddit.i2p,k62ptris7p72aborr4zoanee7xai6wguucveptwgxs5vbgt7qzpq
telegram.i2p,i6jow7hymogz2s42xq62gqgej2zdm4xtnmpc6vjcwktdxpdoupja
term99.linuxfarm.i2p,dg3mso5klqqgcngalxdh5yvkwv56ou7yotsqxw3twneojytiehra
tesla.i2p,em2x6bwsbelqfvlgypcywwoov2rib7mvxiy775dmpfs76m4zcdtq
testbox.i2p,voa7ebdulhpcsupz4zqeyikdjztyhiutgvyri4qxqapistjwptbq
testmk16de.bandura.i2p,gbdgvcv6wkwctls3tdx4ljmzo4zry3awrr37rkvrxcwg7jzjoyra
textboard.i2p,7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua
texterochtankar.i2p,woqimbz4v2synkwyif65izfz2t4gbfbqjrai2ic5ok5qhnvmfszq
testshark.i2p,u64ropzplqkncdmi4wcknqehjqudxb6elyut2k44ocvgx7ilpgia
thealiensarehere.i2p,6t3mm7mkmjcepgwbthqvrh3kjfsipqdwqurcptwruyy73enqkawa
theyosh.i2p,5m7ygxhcdyfa3kx3wfjbbunk4pjey7a5zr5lnfb3upgjbhanrita
thinking-wiki.i2p,feuemwevbvwpnyefpkpet2ign7wvnjww6dhhzis6tobkfh7ybxsq
thornworld.i2p,vinz4ygmodxarocntyjlfwk2wjpvzndlf4hxss2w2t3fk52oplva
tmp.heckyel.i2p,v67szhqv7r2hm65lk7s2r4aqchswtfanove2p3ca746dg7nqwvoa
tome.i2p,qktkxwawgixrm5lzofnj5n24zspbnzxy4pvjm7uvaxvmgwrsuvgq
torrents.chudo.i2p,5ooemze55xiicrlvzjmz3il23dpo4fz5iqr7hmzrygdepan5m3lq
tosios.idk.i2p,4mfy2ggcynt5xjkrdstwju2cqicayq7tg5bcb6o575wvab2div7a
tictactoe.i2p,cbr6sya637smfifq2hxj3kzqw5yv7aws2uknmi6ln45r65xej4aa
tmpsend.i2p,r2al7m32cg2ypjcny627wkoiyanrasmorub2wqla3y6gn6rwzzvq
tomasgl.i2p,tyiu7xok7hvzymxtgg62rjz7mvzr3bryq4i7ii7gudncogn2lpfa
torch.i2p,vdpmmcq4ysca5rdczr5lqohjtaf5togdy5itoos54s6nn6xqox3a
torproject.i2p,torprojaxvxevo4c5qvor3ywgasxkubs5ukazrpq3qcxed6lgbrq
torque.i2p,hc3mefp6cq2btwmmjl76atgtftzswu774dyv4a3qkl34wn4g6vta
trac.i2p2.i2p,i43xzkihpdq34f2jlmtgiyyay5quafg5rebog7tk7xil2c6kbyoa
tracker.chudo.i2p,swhb5i7wcjcohmus3gbt3w6du6pmvl3isdvxvepuhdxxkfbzao6q
tracker.lodikon.i2p,q2a7tqlyddbyhxhtuia4bmtqpohpp266wsnrkm6cgoahdqrjo3ra
tracker.sartorius.i2p,a5ijwlahghzstkkb2dr6kxnhlaasoot4gjkl2sx5f7ecudhjdf3a
tracker2.lodikon.i2p,q2a7tqlyddbyhxhtuia4bmtqpohpp266wsnrkm6cgoahdqrjo3ra
tracker2.postman.i2p,6a4kxkg5wp33p25qqhgwl6sj4yh4xuf5b3p3qldwgclebchm3eea
traditio.i2p,wkpjjloylf6jopu2itgpktr45t2xvpjijxilxd5tq4i7wkqgwhhq
triplechan.i2p,blrplscno3ecqb5ihhg73kufmypydjlv4r4gqiajftup5wmcdwna
trypanom.i2p,tgv5acj4khwvr6t44cmryohybd2e5o2kndysnzae6qwcr4hzda3q
translate.idk.i2p,g2l2zr4moqsk2bec346i5tfd2o22cozm5b2k4ifdhbcayazoz2ea
ts.i2p,nebcjgfx3f7q4wzihqmguwcdeopaf7f6wyk2dojw4bcuku472zxq
tube.i2p,vipzc556nzjraiqsk5xwvyhz54fvtqt3vrepdarat3zsj4a6eypq
tumbach.i2p,u6pciacxnpbsq7nwc3tgutywochfd6aysgayijr7jxzoysgxklvq
tutorials.i2p,zy37tq6ynucp3ufoyeegswqjaeofmj57cpm5ecd7nbanh2h6f2ja
tv.i2p,znccrkhtgz4wqceyofwsqdsraqhdtteqzrag53lgmp6rhkutuy6q
uk.i2p,vydbychnep3mzkzhg43ptewp242issy47whamfbxodc4ma6wc63a
unodice.i2p,fukkqcornjsfn2ggd2h4cgeitu4dbin7hymp5xf6zypwzif2pcoq
w.i2p,j2xorlcb3qxubnthzqu7lt4fvxqn63it4ikwmze55yjkzeeampuq
wallet.gostcoin.i2p,reuvum7lgetglafn72chypesvto773oy53zumagrpigkckybrwda
txtcon.i2p,txtcons5lrayl7bq7zsk2mt24clocassid3kh2rvyd3rd2xeklpq
tymcz.i2p,pyog2x6v3eyna5pdr765osut52tpbmaheyi5atbqfaixmcq4dp7q
ukrainews.i2p,2bocbwrmakg252kicblp5i42feao7qpcw3xppms2i5oevkgelpsa
umbra.i2p,xunb4chkeo5xxpfkwrkaqb5etmqpp4ddgvcmy7qkvtxhk5ihck2q
unqueued.i2p,3gvn4kwd7z74jxc2sn4ucx52dpvpscxbzjluux3ul4t3eu5g64xq
upload.arav.i2p,a5txjx3gjrnw6do4zr66wpwlayxt3dg7kb43wbr3fjp53mkfkbdq
vanity-eth.i2p,6djvwwd3mtozyqhpuyvcwqkje5fk3rbxqbgqgdlr32b6hvdqeq5a
varikvalefor.i2p,yn7ovvjf4nhf7hhk6qqph7utcoce4f2j325rfeuyapw3emlqfqna
vimarsha.i2p,ag5tjs7c4skyt6gh54ebhffgxt2gof2ood4psbciv32l6mg6fzia
vps.webhosting.i2p,kfqflh2y36jzp26vloaptqpgwtvw4qtz232wv53xxbggkydhpkaq
walker.i2p,5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
wbnet.i2p,2deeocx7jmrbmjxcpkxecw7yy2z7ybzwz5i6mg3ska3p3d2dx45q
web.telegram.i2p,re6cgwg2yrkgaixlqvt5ufajbb3w42fsldlq7k5brpvnd5gp6x5a
webcam.i2p,fhrkpj4iscrg6etgdlteseoed37q2ph7cizclgpabgcbnaq6g24a
webhosting.i2p,hxqjbkpn5fxnmurlab6oluyqf3dd2xnxszeawn4ak2s4rpjnfheq
webirc.coldhell.i2p,k2d6bius63w3g35j32dn66fssqwbnyvegx6w6pl5mdeojpp4rjba
wiki.i2p-projekt.i2p,b2rpg7xtzwwfvtorfkrc3m7h222qbobnklra7g4oqhfjx64k2voa
wiki.ilita.i2p,r233yskmowqe4od4he4b37wydr5fqzvj3z77v5fdei2etp2kg34a
wikiless.i2p,x33lx4h6d7h6xs4eiqwhvaxn3ea5gn2ifmu3jobnvuvn4k4aej7a
wikimirror.i2p,2bhh73qhuwjkznnnzjfgo4buo7xy5l4ubhzt3oh23adksscx6gmq
wlm.i2p,nigg3rveztrkpzoimq4z46pvbtml27mfhadt7n5bvl3pzzyzefxa
woah.i2p,yh2eixirhlhvp7exrtalcwgeirg3fxi2vnumsbp7w6tily5oiwwq
wopen.i2p,xvedtnzz3kpwpir23zyr3exrhkrn3267harw7gcjvp25yceyokza
www.i2p2.i2p,rjxwbsw4zjhv4zsplma6jmf5nr24e4ymvvbycd3swgiinbvg7oga
www.imule.i2p,657xcllunctawyjtar5kgh3wpt6z4l7ba6mmam5rf7hev5w2lsvq
worcester.i2p,5jtgpuzaabxyhahvbmokb3oeh2lwzpiiqlrg3w7kyyg63lzkwabq
wordle.i2p,games3kuxvadv3y6tfowiynk2cnbuokrn2guvhkigqulmrvfnyla
www.infoserver.i2p,fq7xhxkdcauhwn4loufcadiiy24zbei25elnup33a3gfrdzrtlyq
xadmpp.i2p,jb67tnpn67i3pwcuf45rtwu7gq6nkrs72iznhnakpkdzb6dkgfmq
xd.i2p,jynrjzdp5qajf2jsdif6bgpijuk72zmuiohq3o7omeksw4pdgejq
xeha.i2p,oartgetziabrdemxctowp7bbeggc7ktmj7tr4qgk5y5jcz4prbtq
xmpp.chudo.i2p,gppd6rx5jkutmt637odkbxh4tjqxy63i4amyhllqn424yt7pd2hq
xinku.i2p,xlsmgjin444ccqu7ff5taoov7hecasdyg53keatpbr2qrvgmzvuq
xmpp.ilita.i2p,2dpg43zlfophx5jo4xeqc6cx3zm4x3tfdoinbfuzychf5lwn3dhq
xmpp.pubsub.i2p,yxbp3sn2x5t6k7hcxsg4njmaxjomr2wvh4xeldxjlij3ms3sikgq
xmpp.reloaded.i2p,hioylmlm3lf3qgp2ncmym3igx6eyytlwioeq2fip4cwpzjtyxfuq
xmpp.rpi.i2p,3yv65pfwiwfuv4ciwtx34clqps6o2mc3vtyltcbqdkcki6untbca
xmpp.xadmpp.i2p,s5ekktro7kk24gu67dgwi5xnhzhzjx6abujk44q4v56mmdnrv4lq
xmpp2.reloaded.i2p,ufeplugqot5e22kottvejlw7yq24kynw5v5faulehc6n2zs62ura
xmrnode.i2p,moneroti7lckp4hjrqckoq5cfi2apuyxia42sp5x7tkbzjfwqfiq
xmrradio.i2p,olwxvhwaq422rcrlmvh6wgrdczyfyeag645du4cwncutqblkfmaq
xn--80ahmijpip2p.i2p,assist2a3jsikp7ufmzpa56mlflhi5kmoack5dm6ua5x2hbgckua
xn--hallchen-q4a.i2p,h5c4idxoweambtqajx3ecpu4iw425mfzckb4rrcvftrr7d2utfgq
xn--n3h.i2p,6a5bfeil667ksrdgg5hx5x2dse2v6ovnsng3r2k5gp5tb4z67egq
xotc.i2p,gqgvzum3xdgtaahkjfw3layb33vjrucmw5btyhrppm463cz3c5oq
xn--r2beng6b4e.i2p,ag5tjs7c4skyt6gh54ebhffgxt2gof2ood4psbciv32l6mg6fzia
xsden.i2p,4dofwhzlkz3k3sedwzs2sx2fudq3jfvaygffc6kp6hsawmfmz6qa
xx.i2p,a7hrmb4kbftyk4ovr2la6azi7vjfqwt2zlckos4svoaclqu52j6a
yacy.idk.i2p,7ccyylqqxnyexz2acn3nqjdlwqmd5pororbovrarar2dkw3ddrbq
yellowonion.i2p,7l4kgsyatdmntck22i27oui3llftjim33ydav7kdew6ewfqvjzfa
yggdrasil.acetone.i2p,tlfhgwzn4v5nlm2or5uy4leqmjbl5bncgcopbqnmcr4hbk3zrvqq
yoitsu.i2p,yaaqmj55lsi5c5nukf4hsrift2zslnqkbcghwvjlaqayidtyctwa
ytlibre.heckyel.i2p,lfrh5ionyyqcqktuhtcnt3tshmvfwh2j5dldntiahxt7xe7xnojq
yggdrasil.i2p,7hhvvtephitji3ibz4vhbapj4rikoppd5324yttp6k35gkqgri3q
yggnet.i2p,deyg5puthy6tc44j56ee2zxv3wu36vlmgxjyz2zoc63w66l5ksua
yourdomain.i2p,witqoik7gjzywta5nss5m6dvialeciismabksrukcvpfdpe6aqha
yt2mp3.i2p,7ai77u54gxta2ry326amfq4ugiqgcxd4r663nmxtswcwezyxsbzq
zab.i2p,n4xen5sohufgjhv327ex4qra77f4tpqohlcyoa3atoboknzqazeq
zeronet.i2p,fe6pk5sibhkr64veqxkfochdfptehyxrrbs3edwjs5ckjbjn4bna
zog.i2p,7su4pwd7xicqu44rd36g2a3zjlsv2k6otommnh7ztjpyixyozq2a
znc.str4d.i2p,ufkajv3stxpxlwgwwb2ae6oixdjircnbwog77qxpxv7nt67rpcxq
zx.i2p,4ru5b25ixgz2wt2aqskbr2iflv42gt6ta6qet7rv4et5rh2kq6fq
zzz.i2p,lhbd7ojcaiofbfku7ixh47qj537g572zmhdc4oilvugzxdpdghua

1 0gitnick.i2p 0xff.i2p xpw6ynhbxxuqsr6spcnfiyvuhvimm3jg7uti2oqv3jlh76j532oa apo53zid3xe7rewxjw7whdym2rmyowsj7jeoiwrl5zlmf7oqrxwq
2 0pl.i2p 0xpaste.i2p gd7qe2pu2jwqabz4zcf3wwablrzym7p6qswczoapkm5oa5ouuaua oyfcxkrmrnaplu24aobv7s36hm3vyxszlbees4hl6kpk6izwa5da
3 102chan.i2p 111.i2p xxu3lso4h2rh6wmrxiou3ax7r7la7x6dhoepnku3jvrlwp35pefq s5ekktro7kk24gu67dgwi5xnhzhzjx6abujk44q4v56mmdnrv4lq
2ch.i2p suzp44odgixf5lthy5ngy6ktabus5gz47squie2shudi6kmlwuaq
2channel.i2p wirxk4kulmd7v6qmttltnu5nx2vtchzvrg7ewocejrvdjcaiv5sq
4 333.i2p 333.i2p ctvfe2fimcsdfxmzmd42brnbf7ceenwrbroyjx3wzah5eudjyyza ctvfe2fimcsdfxmzmd42brnbf7ceenwrbroyjx3wzah5eudjyyza
5 600chan.i2p CrustyIRC.i2p ncogytpxyaqnu5au4yc6oeiiaidhjcxfsr6cyebcsfki2p3ih7ea 4ygmttynho5k32vfm64urriqx2vj3s6hkm52jwv2vlwrynu4z6iq
6 7i3.i2p aaoth.i2p y4gh4ocvlsxnyjgqbdlqb6eeff4a4e62wbzuewd3ralagyopzb4q aaoth5tidbhizgerysxlfrqmg5t7jzb76zt6lattwjj3up524qwa
aaa.i2p zzhy7rumzzgxzodvgu4xz324nekbbccphegweukj4cm6nrbpg4oa
7 abdlandrubbernetwork.i2p abdlandrubbernetwork.i2p asnpognglrcx34l5vywatfkoaashziedfylun4w6cf5wue5gujca asnpognglrcx34l5vywatfkoaashziedfylun4w6cf5wue5gujca
8 acetone.i2p acetone.i2p tzwfy3dnqtm4wuofmcp3gcb5qjcytri635ei7kw7yrl6n3ul5n2a tzwfy3dnqtm4wuofmcp3gcb5qjcytri635ei7kw7yrl6n3ul5n2a
9 agoradesk.i2p agentoocat.i2p ztqnvu7c35jyoqmfjyymqggjpyky6z3tlgewk2qgbgcmcyl4ecta voanmdeayaccgaxumtehvxxiv4sdscsixoxsqmhh7nfwhusrvfaa
10 albatcats.i2p algorithm.i2p ilgg7nbtofvgzrpl6kenxugfdsgi3apu6sgilmqi5rhpolnauyga algout6clo74ywqtjyemehnf4bzhegpju5yvi6zdcfszso7iirka
11 aliensarehere.i2p 6t3mm7mkmjcepgwbthqvrh3kjfsipqdwqurcptwruyy73enqkawa
12 alphabay.i2p tnaefzkcnhryeusi7hdpqujqiqmnbtah3dmjcg3gvezohunjuxbq
13 amogus.i2p udcjqqoo7mc54ephxnhzaxdwtqxsgxjzvh4wr4boope6vyr4mrhq
14 animal.i2p animal.i2p 5iedafy32swqq4t2wcmjb4fvg3onscng7ct7wb237jkvrclaftla 5iedafy32swqq4t2wcmjb4fvg3onscng7ct7wb237jkvrclaftla
anongw.i2p owrnciwubb3f3dctvlmnaknb6tjdxtlzvv7klocb45mmhievdjhq
anonroms.i2p w2sgx2i5n4uxtqjgekckxnhhpymigpn5lmgdaujyzib6sxq7j4cq
15 anonyradio.i2p anonyradio.i2p cbobsax3rhoyjbk7ii2nd2fnl5bxh3x7bbearokyxgvmudn7o5bq cbobsax3rhoyjbk7ii2nd2fnl5bxh3x7bbearokyxgvmudn7o5bq
16 anothermusic.i2p p5mhrtnjfyonumqjzkzxakxais4fjtjgappvoioztqehaii4smpq
17 apophis.i2p aybax36xssplylkueyy3szi3n2spd7mgxcmzbawapg3vxznwlkda
18 apt.idk.i2p apt.idk.i2p s7qemnncvmy5zs3khd6qzlcnsvtu6drnkeae4r3yyc7akuzuqiia s7qemnncvmy5zs3khd6qzlcnsvtu6drnkeae4r3yyc7akuzuqiia
19 aqua.i2p xqwrqfuoae43grkmzs63sw5upathbjerid3ch4bhskle3bibeqba
20 arav.i2p t42fkp6zp5dfqywantq3zp427ig3q2onrmfv246tyaztpg4ckb5a
21 archaicbinarybbs.i2p archaicbinarybbs.i2p t7o2tw36cffedgfr6kahewpkrntofnliuapji2e4rucl3os55epa t7o2tw36cffedgfr6kahewpkrntofnliuapji2e4rucl3os55epa
22 archiv.tutorials.i2p archiv.tutorials.i2p lldr2miowq6353fxy44pnxfk37d6yn2f6kaivzecbmvvnnf5exyq lldr2miowq6353fxy44pnxfk37d6yn2f6kaivzecbmvvnnf5exyq
23 archlinux.i2p archlinux.i2p 5ms4k3cn5dx53b46hqgwogigsjhtinuf4g6fdr6pplkldi5vjcxa 5ms4k3cn5dx53b46hqgwogigsjhtinuf4g6fdr6pplkldi5vjcxa
24 ardor-wallet.i2p azathabar.i2p tm23k5ny3umhf6vf3kghnnwacli5zywq5wrr3xcqowbcofuyr4gq v35rwae5zb6fcgd7phzkireghtuen43umi7l5yvahm7ezkqg5uwq
arf.i2p o46lsq4u7udxg3qqlidrmpj4lb4nr7ldxmbb2x53nftndaeyxqeq
25 bandura-yacy.i2p bandura-yacy.i2p e4t4yer7o6dbttk4xmpsfd56vhuse5upksgjqejnrvrdz35ia2qq e4t4yer7o6dbttk4xmpsfd56vhuse5upksgjqejnrvrdz35ia2qq
26 bandura.i2p bandura.i2p n6eqyu6glmtgt544ys43ggrozhpiw7biyrelrvmkmg7llfcjwm4a n6eqyu6glmtgt544ys43ggrozhpiw7biyrelrvmkmg7llfcjwm4a
27 bbs.i2p bellingcat.i2p 7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua nk6hd2mzzoieui22xzcdiz7i2irp7gel3qscwanuqzstkdxqxp3a
28 ben.i2p bentasker.i2p kaqe5l6s2hojtgaaoinn4ucktnc4ixvneldy32ft7zdokncc73sa gdncgijky3xvocpkq6xqk5uda4vsnvzuk7ke7jrvxnvyjwkq35iq
29 bible4u.i2p bible4u.i2p xs6lr2g5jiaajtb3nkno2zmy34eipitrggooxb7wtey7uko7bqmq xs6lr2g5jiaajtb3nkno2zmy34eipitrggooxb7wtey7uko7bqmq
30 bitlox.i2p bitchan.i2p lqw5khxcdntlv3u4vhn53upcqirplvnc4etjlmoytrzs66ytettq waycuw2c27ruakfblkf5tcegwmt3ot445dlfoypil6bzmm4yxg7a
31 black.i2p blackexchange.i2p sjwueu62qpe6dtv5b322k3f23fl4uz3w6qe6wcrwauiwpnymypfq ztgr5kghkyn43fhhkuycroxgfti6cojo3vg4wdd3usqonyvrla5q
32 blackgnu.i2p hskxmtmwqnmq7pnxzntlwt36ew4nuqzmwhzbqjo233ncfoaj7mpa
33 blawg.i2p uq5hbw7bplczde3pbugbxnvtqbjjdba6wfggpvbmaghuwoulputq
34 blog.raccoondad.i2p ouc5i7xknchig3qdtkoydoeg2oqe354roxkjrrwzuzjcqr4xpvna
35 blog.tinlans.i2p blog.tinlans.i2p ylkch2nkrwehakx4z6wiyjbeqwlgasknukdkex6r6yq4xusrjnda ylkch2nkrwehakx4z6wiyjbeqwlgasknukdkex6r6yq4xusrjnda
36 blog.torproject.i2p woelslt2oh4dn5wlxfmpjggyyu6l7ntgk3rngrooldn57x4kduma
37 bobross.i2p 54y7lkvndr3fa4c4fw6e5udfx37dkrh4wbdjvxbwapertwz2vtqq
38 boerse.i2p boerse.i2p 7633w56hd53sesr6b532r5qlbdnvyl5bnvama6ign6xryaxol4rq 7633w56hd53sesr6b532r5qlbdnvyl5bnvama6ign6xryaxol4rq
39 bofh.i2p bofh.i2p auvuinzogu6gc4pwsgbjijuszxgcjygciu2wy53pfz7mo5nfpc5a auvuinzogu6gc4pwsgbjijuszxgcjygciu2wy53pfz7mo5nfpc5a
40 bonobonet.acetone.i2p bonobonet.acetone.i2p keihicq2fcfooqvdqtufjpigg3ge5mw5mjdpdnxy5utazrqkcnxa keihicq2fcfooqvdqtufjpigg3ge5mw5mjdpdnxy5utazrqkcnxa
41 boran.i2p bote.i2p boranyzcefxqw2ktndemy3npt4zhetpp6edldtlym2ap7n5azt5a bhjhc3lsdqzoyhxwzyrd63kvyg4br6n2337d74blyintae66mr2a
boxs.i2p owm3fy2t5vwbxowk5gsshihkwjfknqq7y4ylbeyhvzta7r3ybrpq
42 braindead.i2p braindead.i2p braindsku6jnpmnaats2cu2qzax4pga6dwhx436kxanpxgx2pcyq braindsku6jnpmnaats2cu2qzax4pga6dwhx436kxanpxgx2pcyq
43 burntout.i2p brick.i2p lkep3fd7tjvxrs25crr2c3jy7xm4s7bqiua5r327zgpw37sgyerq lfeip77mf2j75izalrenv2aft5h3mfwauqqu3nqdmoq5ldwwsvga
44 bridges.torproject.i2p 2tiwhibsjvys63t43xncar6y52dy3dpct6edglenhzlalmyirb2a
45 bublik.i2p npx6e6trk37ovoxzk3j3yoh5huenh24avbmsgeroiejkuzb2vo6q
46 bugfuzz.i2p ubszn4gsf22vga67rvzzlg4qj2bfcq6o52fmxz46xruawqm6z7rq
47 bunkerfiles.i2p lyrhscn2hfe6mjn7jo3titioitfzcy7x23hhkksydin6ildsgxiq
48 bunkerirc.i2p mdt7h4zsbwafsikg3r4iiqh5wriaisznjj5d3f3lyeahipudsxoq
49 bunkertreffinfo.i2p ow4q3pdfdwofiqb4btopg5ou734w32k3z4hoiinsezg5zkzdlq6a
50 bytepay.i2p 7amc4ztwkzu3cgsaaaw3223ohuihn5hlsqc6gpf2rxdyptdkyugq
51 ca.i2pd.i2p ca.i2pd.i2p u5safmawcxj5vlrdtqrsqbsndkr5cfenpicgg5euu4xqm73yicba u5safmawcxj5vlrdtqrsqbsndkr5cfenpicgg5euu4xqm73yicba
52 cathugger.i2p cake.i2p vq43xjjcnejqpzfprws5qzrea2siieshu4tglpdepql2w3w3bpba hpdbe6o6qqqqvgygbcznssat46kybsm7rcauofqaoly4ajdi2jeq
53 calculator.i2p itj23yb325dma24i4qpnhuwrz26hzpps6izkaf3mowavtvoznnva
54 cantonese.i2p 3r3d43jejiezwb6daqgtk23ccs4jm3bvkhxwwwnpymvjn2aymriq
55 carvet.i2p r5ukmkit6n3ztitar6clfc6te3o3235ys4jdbiugnkvzmfurxbnq
56 cbs.i2p cbs.i2p u3lp7wazvq6opodzwjg5sc5w5kwxehmxd4wcdpt4s4j2k4dx4apq u3lp7wazvq6opodzwjg5sc5w5kwxehmxd4wcdpt4s4j2k4dx4apq
57 chudo.i2p chaox.i2p iaublzhzc4ssa3rcrjbdigautm66mslt6g2sninugagiarl4at3q 6bcqgkedaq2krrhvidjlmdsoltmzuwaqtrafycfzbc56h5swumoq
58 ci.idk.i2p cheapeth.i2p antkos5hjxraxduyewoo4qwwr6vyceiggd562nctvmtpnfjsuqlq x6pq4h33wu6txj6vvpgywrgew2y6cwzs5l63w726paqsvogeqdra
59 closedshop.i2p chmok.i2p 6fg67mbw2okopzyonsck4bsy3cy7l2fame56uiysr2cezhjhzdbq w7eqh6nndwk4yr5vxtbnvizgsg776vamwingijetnnqojrzjxm3q
60 cobalt.idk.i2p chungus.i2p m63cbwomq4e4q6df3n6idnuveqa4yastxnls6kacseuutrp5um4q ot7kljg7js4iedtsxl7es4wnynvxxyyaravier2dqkxmr7wsdzxa
61 cipherlist.i2p gbm4kiotqjqmklwsp3qibdtn7mhatjsyeebbb5zxwjlp6w22fuga
62 citrus.i2p citrusogkieyk3hleilk5scb5a64jdzoogi5wjv35klrvmqsh5ma
63 cloaca.i2p pnsyl5plmmwuqfvpg36cbvvhe6mpoy2j5zzemfb5sfbpvklyozta
64 co.i2p 3mvo5eifcwplcsoubtvqkzdahwo2sdhfygfdde7lj2glybk4q22q
65 coffeejazz.i2p mrt55kugqimzxeittpwwjwznejs3b3zxcfht3hp6dlujetyqh5ua
66 coldhell.i2p coldhell.i2p z2kerfik5dzqd2kj74cuhhtptkrizsblc5nm6ke2gcnj5mnwgwja z2kerfik5dzqd2kj74cuhhtptkrizsblc5nm6ke2gcnj5mnwgwja
67 community.i2p community.i2p 64luakopnvffchxnibn3d2p7uqxixtyuallfqfgifkkcmfcrczxa 64luakopnvffchxnibn3d2p7uqxixtyuallfqfgifkkcmfcrczxa
68 community.torproject.i2p wmw22z5c24b35hlepzc2g6k3cpcg44rcg46qdwfo5heiplv7m4ca
69 contact.i2p rn5hqxierph4eegft3hiiqkgn2zyyfgj2c6pq75bkahl3pu5shvq
70 costeira.i2p costeira.i2p abhty5xlmnyab2kqdxcd56352kcescxoux3p6dbqdrghggyygnxa abhty5xlmnyab2kqdxcd56352kcescxoux3p6dbqdrghggyygnxa
71 crypto.i2p cyberchef.i2p vffax5jzewwv6pfim55hvhqyynafkygdalvzoqd74lkib3hla3ta 5k22kdukxkobertlyheal5aro32gls6nhgktneq3mtrracubt2bq
72 cs.i2p cyberia.i2p kzaeunogz6s75ptgy6ifjzwwy75xdfenenswvrczd7mewxgrad5a 3jrfzgnetbjwnyrua5jpyeqk7gb6dgfw3hu5q6lyggnwqhrury5q
73 d73.i2p darknetbible.i2p uf6madmg2fv7uo25cjnvzpimd6iflsrozyemuypleyz46mxbyreq lcaocuhvocje2gociyyuiip5sxhbgmkvaicbm6g6axtflf5wc6pa
74 darklibrary.i2p darknetdaily.i2p ynv2cgboxkpcyap6hqnbycgj4khyxppxuqjbidkdfhjifkzwdhfa gehxh3zlns3ezyuc35bszc42hdr4g5uzasexzyrqfxwcwkeiulia
75 darknetnow.i2p darknethub.i2p gkx3o5fy7mv7l4psqqnhp35d5iun7rt3soci6ylf3rgb7a5a655q tnh5bp4si7x47vhwk6njtimbbk77gai3abkfh2gz2dhml46uu3uq
darknut.i2p 2mk37gtvpk2i63o6vl7vna4dr46rqexxetupgn5efuuins7x3qya
76 darkrealm.i2p darkrealm.i2p gbh4eerxdsph7etxsxznfhvmuiz54trlkenakqep343u4xcoekzq gbh4eerxdsph7etxsxznfhvmuiz54trlkenakqep343u4xcoekzq
77 darktech.i2p nlkpudgmmgsdiemnbehq5llymdmxp6tn4rzjuse7nhvavr2kgkga
78 dashninja.i2p dashninja.i2p dzjzoefy7fx57h5xkdknikvfv3ckbxu2bx5wryn6taud343g2jma dzjzoefy7fx57h5xkdknikvfv3ckbxu2bx5wryn6taud343g2jma
79 datagrip.i2p ajreyxslv6lijap2hykp3uvnnsca6fyvax76u2w6n3vexngkif4a
80 dcherukhin.i2p dcherukhin.i2p qa4boq364ndjdgow4kadycr5vvch7hofzblcqangh3nobzvyew7a qa4boq364ndjdgow4kadycr5vvch7hofzblcqangh3nobzvyew7a
81 dead.i2p ddosecrets.i2p 7ko27dxvicr2sezvykkrfiktlghx5y5onup3f2bas5ipocy6ibvq vyhw7t7fbj7nghx3oe4y5komczeb5egnhuvlslpkqupaymnhtlka
82 deavmi.i2p deavmi.i2p t4cvvenniup6dcdlu2ehdycos5r3luccfemwd6hhvyqv5zd6obgq fh5r3hlkkwh7udtjeqmekmq4qd62jnjqmnqob5hm3ndiuo6lauza
83 deepwebradio.i2p deepwebradio.i2p 2nait2gdeozkgf6gyhzjfij6mwldwkxxwcvtxobb4b5q5cvtm5la 2nait2gdeozkgf6gyhzjfij6mwldwkxxwcvtxobb4b5q5cvtm5la
def2.i2p cepsrw27kdegwo7ihzouwvgcvw2obswwjs23ollgj7hk2yrce3da
def3.i2p xbf3ots2purqun7orn72ypkpjmrzbfrkj3u654zfe77hbrbow6la
def4.i2p yyzdq4fwwmnlojp23drfpfqujln2vcjozjrfzfeuriuqzdq7g4mq
84 det.i2p det.i2p y6d4fs3rpqrctuv77ltfajf5m4tl4kzcu7rtwhxgiohylfxxow4q y6d4fs3rpqrctuv77ltfajf5m4tl4kzcu7rtwhxgiohylfxxow4q
85 diasporg.i2p diasporg.i2p edvccoobtjukjgw2os5eetywanbb2mpag5aknkrpia5qx2koksua edvccoobtjukjgw2os5eetywanbb2mpag5aknkrpia5qx2koksua
86 diffyq.i2p dickinass.i2p hkjvyuc3asswxa7uxyalrnpqab4lyvzriu2rsq6jbjc2kaoabghq 5x55ucmwxf2fvrcboapylnrcwdvunlokq5c7mnofno3bkrlqltza
87 digcitlab.i2p digitalsr.i2p gijabxlt4ox2mblh2nfxnds6u4mlsdeoonizknbdksl7klmbpvoq ldavoapfhoqpxvihdsdjjo3phlt5ujkgkzigzbesab3g42rwvbpq
88 discuss.i2p wrnowoalzz5mquzaygmcrm4feuqco5gsxyn42fizbqjaprtdx5gq
89 dist.torproject.i2p pbhgoronppg7tq3dssnwmhzkbrscbvtmy3d5pmar5hyhnqwjj46q
90 diva.i2p diva.i2p auoqibfnyujhcht4v3nzahpqztwlyomesfywltuls5bqqi3nd3ka auoqibfnyujhcht4v3nzahpqztwlyomesfywltuls5bqqi3nd3ka
91 dlms.i2p dnl.i2p krsbxsaw3lnb6ctdpydygm2gqobjcpm4pf367ddo5hylbscnynmq 4pjdhyaot4kktjathgjmom4ykfccezyezasbtvgdtmar2b76cpqa
92 dns.chudo.i2p dns.acetone.i2p zzfmtnnmacop3xvpznc4c2jfvk226wpep2gaoanja3gfzf3ih7xq dnsgzxkak4zlrrs5tfh42ob57iley4xrp7srrltn2j2yl2ynbiaq
93 dosje.i2p donate.torproject.i2p ir2ky5ejx4f646l4fsnug22gj4frn6jzlg7fgboudf2n5b4gdj3q crxdz4n5viyy46upbd4amlzxcinkea7hwj3mkiudrw3nkpnfv42q
94 dreadpiratessociety.i2p donotafraid.i2p fbdd4syj2v52x5zord67av2xclmjsg6bc6xdvrqmvqkyd3whij6q w6jq5xsixmolxvh5xtxaqolary2nmx5n4orc5bilc2j7ejcytgfa
95 dropbox.i2p drommedaris.i2p omax2s5n4mzvymidpuxp2yqknf23asvu54uon6cxl6gdrlblnuiq 2cth2loujyjvouft5z7cr2ajdv7r46tdxxew5xoqwpprucd7nf2a
96 dumpteam.i2p dysfinis.i2p 2fwlpuouwxlk2nj4xklvm43m52tqyhqnu2fcfiuv7clvf3wd5nwa 6dhhk2azkdqd4zt2azsmnxddhooiztnaxgz6ft5sbusb5a4vonva
97 e-reading.i2p z54dnry6rxtmzcg7e6y3qtsig5yf5fmehuvakcg5wnuahx3iafuq
98 e8.i2p e8.i2p 5spb6cl4ffallahbaj2yadag2zgyuciouhz2rdcnyjcf5phqcu4a 5spb6cl4ffallahbaj2yadag2zgyuciouhz2rdcnyjcf5phqcu4a
99 easygpg2.i2p easygpg2.i2p bwxry5alzx5ihgrd3glah4eotddblzhalvpheppnw4zcajzqoora bwxry5alzx5ihgrd3glah4eotddblzhalvpheppnw4zcajzqoora
100 ebooks.i2p ebooks.i2p bvpy6xf6ivyws6mshhqmdmr36pruh2hvoceznzeag52mpu647nzq bvpy6xf6ivyws6mshhqmdmr36pruh2hvoceznzeag52mpu647nzq
101 ebuild.agentoocat.i2p lu56romn7lp6ggjtofbwwsaee6kcfonci2ezi5jb5nyo3vdo7vkq
102 echo.idk.i2p echo.idk.i2p 63sgpiu6f33arldcxkbjsn3jgf6asyx3onjmz6j6gsk7hgbiehkq 63sgpiu6f33arldcxkbjsn3jgf6asyx3onjmz6j6gsk7hgbiehkq
103 eddysblog.i2p eddysblog.i2p ieac3ub4g5sy3wuhsbqfembnpp7f3a37xgcx537ytzsmgfzexnbq ieac3ub4g5sy3wuhsbqfembnpp7f3a37xgcx537ytzsmgfzexnbq
104 epub-eepsite.i2p elefteria.i2p yxvzjwd4vin6pnjauekdufh7lxaijal3kqe2bhakuf47g5zkb6xa f5s6jvekhmq7aj77xmgm7jwnw2f75ci275togqya76urm745zpdq
105 exch.i2p eleven.i2p vsyjsbbf2pyggtilpqwqnhgcc7mymjxblamarmxe5hmbxaxvcndq n2er74vsv7szwvsbsukd2lwhz5epedws7eqwahsmxy65agvjizzq
106 fa.i2p elgoog.i2p 6n6p3aj6xqhevfojj36dixwbl4reopkhymxmatz7ai5sroh75rka z6hrgkg2ajmuzlrddjlffrgctx7x7fkipm6c4hdzmohyn5wkr4ya
107 elvn.i2p vwjtedtgyokakyxgfeoavg535bxe7ymdvfbdwsq4iqngljqtqi3a
108 equwal.i2p j7zqkvkokxmpkbqrgrkkjym4j7kzuipko4qdujdjbxnrp3qj6ooa
109 esperanto.i2p 2yryi2eb72hnxavjpfot7paiminbzgv5w6fv4sl5wez55ventdeq
110 explorer.gostcoin.i2p ktoacmumifddtqdw6ewns3szxths2hq2fat2o7xnwq4y3auga3za
111 fabrice.i2p fabricexhumxqngfziy4xkao5m5ez27jpih4chtmigg46eu7rroa
112 false.i2p false.i2p 77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha 77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
113 fantasy-worlds.i2p fantasy-worlds.i2p 62a4xcyyhvfrcq2bkckb7ia37fmrssrgx467tlkxp32fjpq577wq 62a4xcyyhvfrcq2bkckb7ia37fmrssrgx467tlkxp32fjpq577wq
114 fido.r4sas.i2p fido.r4sas.i2p i522xmu63hfbaw2k54cthffcoqmeao6urjyq3jg4hddf6wf57p3q i522xmu63hfbaw2k54cthffcoqmeao6urjyq3jg4hddf6wf57p3q
115 flapflap.i2p files.arav.i2p y53ceza7iji2vq3oa7om64whzakt6nnzksaqhmkqiisk5tvqk56q gajftpr47ze6ao7e3q2tb5xmcqneyaczu4edzvwwg2qzmnernpka
116 flibs.i2p fileshare.linuxfarm.i2p ocdm33e3h5tdml3yyholj4objdwsrhlugfqjnqgdkslmgdzb6b3a rrx4hxejr4pod3tqrkj5ckzuauwy2aqsfvpiac2tkebp2iuv5qla
117 forum.idk.i2p fishsticks.i2p bg7kaiqjcqqeuuwb5nyo3ptcp5dgza7mihtizwqtnz2itombg6da btjbfuh2wav3c7bkjqylgatbkvqaireemvsvxwetkrifuvfa35da
118 forum.rus.i2p flibusta.i2p zd37rfivydhkiyvau27qxwzmerlzbqtthsa5ohtcww62zrygjaga zmw2cyw2vj7f6obx3msmdvdepdhnw2ctc4okza2zjxlukkdfckhq
119 forbiddenhistory.i2p nlduiogwtutni5nwf5kbuekrqf3ymqmkor3hughjkckz7tvruhva
120 fourth.i2p 2cq65hjlt7nnl7mctthj7oejlgep7nh7gmqc6bnbflxw2ti4bxxa
121 freefallheavens.i2p freefallheavens.i2p 7etudb75nhe6vxslitptjlwrnbybdshvzxnweuiepsxbbkkxy5ka 7etudb75nhe6vxslitptjlwrnbybdshvzxnweuiepsxbbkkxy5ka
122 freenet-inproxy.bandura.i2p freehaven.i2p rblg2sajac7winv4mgvnkfh2fa3nt2zxfvxfiybj76okpwdrt45a y4giqqrbcb4xit5gp4y6njypupfklfdr74lfi424seenf7usjvza
123 freifunkmobi.bandura.i2p freifunkmobi.bandura.i2p 5shuxvx52e3qszylwn4w7qst4siap3latyap3ff7nfnpjgllkcea 5shuxvx52e3qszylwn4w7qst4siap3latyap3ff7nfnpjgllkcea
124 fresh.i2p frontlinedefenders.i2p jii6utg6ubwxgls6jegu24ifrroo4qzbcizjfft2bemodp4k2i6a pshxfoeefj67oj4jwjh3cqiztmrgcpsbuttclnc6fiwvv42p6inq
125 fs.i2p fs.i2p ah4r4vzunzfa67atljlbrdgtg3zak5esh7ablpm6xno6fhqij35q ah4r4vzunzfa67atljlbrdgtg3zak5esh7ablpm6xno6fhqij35q
126 fsoc.i2p fuck-rkn.i2p vaqc4jm2trq7lx2kkglve7rkzxhhaptcwwl32uicx4ehf5k3hx6q qmlmnhr3ul2lmuu4fjf43kmk6hf3dzsuxv5xu77vwys36xwuu4sa
fuka.i2p e3aanmaobvwopjrmrnuqvrkr36gyubrv6f2lyygh5brku3ufwrsa
127 fxruby.i2p fxruby.i2p lqhdnr2pvp2igu5e2cxichboqzcgypvrbooynzgkmoze3xae6qkq lqhdnr2pvp2igu5e2cxichboqzcgypvrbooynzgkmoze3xae6qkq
128 garden.i2p galacticreststop.i2p qkk2dqx6nocycgt3vinsoc76cxkb4jreybcpgz3fcps2dbe4rowq uln6c2abwfzneakdz7dkfmdifwrjr3r53jvkmq6mxrjt2vflvbrq
129 gedanken.i2p gedanken.i2p kw6isjbs66uf7576fbb3aniokxtrpqmbegf4tf3xskg2bmrjci7a kw6isjbs66uf7576fbb3aniokxtrpqmbegf4tf3xskg2bmrjci7a
130 geekcode.i2p hzmyzxa6jzag67zcqxhicydusdev77byf2qoyxjxhsrtkce4qiqa
131 gfap.i2p yasbny2ndcpofprdbtv7dxdtshbebyydjv5zlnwy54gii6xnlmqa
132 ginnegappen.i2p ginnegappen.i2p kbhfkzx5jeqhfgss4xixnf4cb3jpuo432l3hxc32feelcmnr3yja kbhfkzx5jeqhfgss4xixnf4cb3jpuo432l3hxc32feelcmnr3yja
133 git.agentoocat.i2p 5ihrbnmcoewaax5kxsghnmxh6p6srufhmo5pqkybdwuz4yj7efja
134 git.apophis.i2p apep7dtwnuom6b7li6jirhrsygxgcdqb5svqpq6mh2rpindrzp2a
135 git.arav.i2p p5nkflgogwv4esy3ainup6mgurpugmdyufizhuufauznreyvprsa
136 git.community.i2p giteabolfdejtdzblkooalqei6jr67imiugmhtsh6ocw4hlj5a4q
137 git.i2p giteayof3hpwkfnwnryy6l4qhq3cwdzqlr72jokzbkc6ol43mypa
138 git.idk.i2p git.idk.i2p 7qeve4v2chmjdqlwpa3vl7aojf3nodbku7vepnjwrsxljzqipz6a 7qeve4v2chmjdqlwpa3vl7aojf3nodbku7vepnjwrsxljzqipz6a
139 git.qorg11.i2p jf2mrxlbqsct67fces34x6kwbbnmlx6o7gd6g4knqk36soa6efqq
140 git.repo.i2p vsd2vtgtuua2vwqsal2mpmxm2b2cpn3qzmqjoeumrrw2p4aot7uq
141 git.varikvalefor.i2p 6sqxtpnpqqnlqbdxu7dadmorrffnpe3evbz5zye4y5kvljkzkbra
142 gitssh.idk.i2p gitssh.idk.i2p g6u4vqiuy6bdc3dbu6a7gmi3ip45sqwgtbgrr6uupqaaqfyztrka g6u4vqiuy6bdc3dbu6a7gmi3ip45sqwgtbgrr6uupqaaqfyztrka
143 gopher.anonroms.i2p glue.idk.i2p wqfhyrnpknap3ushsck3ih3r7inz6uoqlr3u3ktwvejur3bejqha ykbx7chmkivx3idmxd3lu2jc5w4wtlps4r3md57wszhk5w7jykyq
144 gostcoin.i2p gostcoin.i2p 4gzcllfxktrqzv3uys5k4vgkzbth4gqednwhfpt755yivm3davuq 4gzcllfxktrqzv3uys5k4vgkzbth4gqednwhfpt755yivm3davuq
145 gusion.i2p gusion.i2p 4qyfdhizjixe2psu7wcvqufix5wlijocehpb2futurcmlhlktrta 4qyfdhizjixe2psu7wcvqufix5wlijocehpb2futurcmlhlktrta
146 h0p3.i2p h0p3.i2p k5fppzxc3bwoz2mjc7q37jojbrxo6vtprac3dzrk4wapv7irr4iq k5fppzxc3bwoz2mjc7q37jojbrxo6vtprac3dzrk4wapv7irr4iq
147 hacking.i2p uvxiknnzaxtcijzagp5xuweua2ctghmjfubqdufxilvnkajhezaq
148 hagen.i2p hagen.i2p e2t6rqd2ysbvs53t5nnaf7drllkgk6kfriq3lfuz6mip6xfg644q e2t6rqd2ysbvs53t5nnaf7drllkgk6kfriq3lfuz6mip6xfg644q
149 harbour.i2p zohxpycufzcslwb2dgdkfo75flahkl2q7n57ciqjooqia75ybada
150 hardenedbsd.i2p 6ebmdsir52bi3q4wfwug7ylouoq6gdafl3wyy6ccfmpffijhtoca
151 heaven.i2p heaven.i2p y6ejpmln3j2jvf4omb4ptyo2idognputhrccph74yn6eghkpxyhq y6ejpmln3j2jvf4omb4ptyo2idognputhrccph74yn6eghkpxyhq
heckyel.i2p lars7whelqo6fp2jzkzrx7aziq7dwiygkixgjarjjc6n3gnlslra
heligoland.i2p gzrjm62ektpqjfsem3r3kwvg6zpjvvhvpjvwfxkm2ay4zu7sp6oq
hgit.i2p ny4ev7me2y2ibfi37mykakwvf2jhnl7lfql4etaiykjiwtd735pa
152 hiddenbooru.i2p hiddenbooru.i2p zma5du344hy2ip5xcu6xmt4c7dgibnlv5jm4c2fre5nxv44sln3q zma5du344hy2ip5xcu6xmt4c7dgibnlv5jm4c2fre5nxv44sln3q
153 hiddenchan.i2p hiddenchan.i2p 6y4tltjdgqwfdcz6tqwc7dxhhuradop2vejatisu64nwjzh5tuwa 6y4tltjdgqwfdcz6tqwc7dxhhuradop2vejatisu64nwjzh5tuwa
154 hiddenwiki.i2p 2iz3nkopz6fxbzlcjq3ofligi7mwdseuj4ndzqljogyvsggh6dvq
155 hisdarkmaterials.i2p hisdarkmaterials.i2p qcf3vxllflqfsbvxjlypfxsx36g5srknxnhpyz3ph5bcxdjawraq qcf3vxllflqfsbvxjlypfxsx36g5srknxnhpyz3ph5bcxdjawraq
156 homosexualchan.i2p hopjoy.i2p suzp44odgixf5lthy5ngy6ktabus5gz47squie2shudi6kmlwuaq 3wifx34yzdnj5vw3zu3kmqyz57tvlypmdnnyalqjdcaqrege6bpa
horo.i2p vrxh2vbqsfvh2utnt3ighimu4vrgla2mfpwksipkjsguv5vewhdq
157 hotline.i2p hotline.i2p 6cczi27iuxkm3aivazaemzltdqgh42ljzurqp43uclbz2lid2uqq 6cczi27iuxkm3aivazaemzltdqgh42ljzurqp43uclbz2lid2uqq
158 hp-net.bandura.i2p hp-net.bandura.i2p z2ufexrgrxry37y4vs5hted35ygpleskfcs2enanl53hmlpzlqhq z2ufexrgrxry37y4vs5hted35ygpleskfcs2enanl53hmlpzlqhq
159 hq.postman.i2p hq.postman.i2p 7ewjvbcwgah57n64cwbsxqai7eutqofkesuxfsuhfheijivdjqra 7ewjvbcwgah57n64cwbsxqai7eutqofkesuxfsuhfheijivdjqra
160 http-false.telegram.i2p http-false.telegram.i2p 77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha 77mpz4z6s4eenjexleclqb36uxvqjtztqikjfqa4sovojh6gwwha
161 i2p-epub-eepsite.i2p hungryewok.i2p yxvzjwd4vin6pnjauekdufh7lxaijal3kqe2bhakuf47g5zkb6xa to3afquvmrmk4kvozisb562elb2hdka6hwk6oeud32m6h2qtkcqa
162 i2chan2.i2p rqd4efol6ooxukq2jj6toml2s7uutj3kbkl6k7kfm7vpmmt2k4fq
163 i2p-mirror.bandura.i2p i2p-mirror.bandura.i2p aq7r54ebou47b533y5seiod7dc3aeycucevl2pqvphnjhjwblr6q aq7r54ebou47b533y5seiod7dc3aeycucevl2pqvphnjhjwblr6q
164 i2p-projekt.i2p i2p-projekt.i2p udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna
165 i2pd.i2p i2pd.i2p 4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa 4bpcp4fmvyr46vb4kqjvtxlst6puz4r3dld24umooiy5mesxzspa
166 i2pdocs.str4d.i2p yfvbtrhjac3jutdsqzugog6mbz3jtyhpwovrt2mqc5mzv534y7cq
167 i2peek-a-boo.i2p i2peek-a-boo.i2p qgv64klyy4tgk4ranaznet5sjgi7ccsrawtjx3j5tvekvvfl67aa qgv64klyy4tgk4ranaznet5sjgi7ccsrawtjx3j5tvekvvfl67aa
168 i2pforum.i2p i2pforum.i2p tmipbl5d7ctnz3cib4yd2yivlrssrtpmuuzyqdpqkelzmnqllhda tmipbl5d7ctnz3cib4yd2yivlrssrtpmuuzyqdpqkelzmnqllhda
169 i2pjump.i2p i2pjump.i2p 2mwcgdjvfvd3xwumzqzqntual3l57h3zo7lwdmkjboeraudpkyka 2mwcgdjvfvd3xwumzqzqntual3l57h3zo7lwdmkjboeraudpkyka
172 i2podisy.i2p i2podisy.i2p 3c2jzypzjpxuq2ncr3wn3swn5d4isxlulqgccb6oq5f6zylcrvcq 3c2jzypzjpxuq2ncr3wn3swn5d4isxlulqgccb6oq5f6zylcrvcq
173 i2pseed.bandura.i2p i2pseed.bandura.i2p 2bpbnalf76ktxzhfekkwcklmo45xzedi5em5bdoyedrhw5bhvtia 2bpbnalf76ktxzhfekkwcklmo45xzedi5em5bdoyedrhw5bhvtia
174 i2psurvey.i2p i2psurvey.i2p pemwrlamhiiv74ok4kwoo4eqwzzjshp4q7ir3nlh4jfnt4zjncia pemwrlamhiiv74ok4kwoo4eqwzzjshp4q7ir3nlh4jfnt4zjncia
175 i2ptimes.i2p 563tjwihw2ql5q2kl7d7md7ywedpapoqgkxgazkz4gmlrb2flqbq
176 i2ptorrents.i2p yt2qxe6nq3meofloobawy6nlnmu5pxkobqjyspdngfrasd5v7bca
177 i2pwiki.bandura.i2p i2pwiki.bandura.i2p isbf7tzeyrutnd5rvmjpqaohe7cz6onqgci2wvbuyfwc62w74r3q isbf7tzeyrutnd5rvmjpqaohe7cz6onqgci2wvbuyfwc62w74r3q
178 i2pyacy.bandura.i2p i2pyacy.bandura.i2p owy6s5xlkf4zsrwwpemvoru6x6qmrye2pe3v4v3dncvcrzix3fiq owy6s5xlkf4zsrwwpemvoru6x6qmrye2pe3v4v3dncvcrzix3fiq
179 i2speed.i2p i2search.i2p 532c5r6ra6rcf2mvfgtlcxbn3lpplybwxul4xsg3ps64dlx73fga cpgupqyhxamjfgdd3qk5ux673qomu3o5kqszvq6fwuigzifkxzta
180 ibft.i2p ds36spqcf7dnj46in5vfnbbwcbjpslo6aafkdrkc47a2oq3zvtta
181 identiguy.i2p identiguy.i2p 3mzmrus2oron5fxptw7hw2puho3bnqmw2hqy7nw64dsrrjwdilva 3mzmrus2oron5fxptw7hw2puho3bnqmw2hqy7nw64dsrrjwdilva
182 idk.i2p idk.i2p b2o47zwxqjbn7jj37yqkmvbmci7kqubwgxu3umqid7cexmc7xudq b2o47zwxqjbn7jj37yqkmvbmci7kqubwgxu3umqid7cexmc7xudq
183 ilcosmista.i2p ilcosmista.i2p 6u2rfuq3cyeb7ytjzjxgbfa73ipzpzen5wx3tihyast2f2oeo24q 6u2rfuq3cyeb7ytjzjxgbfa73ipzpzen5wx3tihyast2f2oeo24q
184 ilita.i2p ilita.i2p isxls447iuumsb35pq5r3di6xrxr2igugvshqwhi5hj5gvhwvqba isxls447iuumsb35pq5r3di6xrxr2igugvshqwhi5hj5gvhwvqba
185 inclib.i2p in.i2p ux6prousphswf56bym7yo7kst4ybh45y2z2wrnw7dujmrz56hq4q r5vbv2akbp6txy5amkftia757klgdy44s6cglqhmstpg65xycyjq
186 infocon.i2p ic7rentjh6ilzz6p5kveiuyzov534ksfcexmpeniyallzf5in67a
187 infoserver.i2p infoserver.i2p jd3agbakybnhfvkeoxrx7t33iln6suzomv3kxkxf77j7rkonch6q jd3agbakybnhfvkeoxrx7t33iln6suzomv3kxkxf77j7rkonch6q
188 infox.i2p qoz4bwrtnicqyxemrxubdc65uojrqn2iem6v55b6xmxzdmfzcvlq
189 inr.i2p inr.i2p joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq
190 instantexchange.i2p insecurities.i2p 5wiyndm44bysev22kxvczxt37p6o6qroiqykytrvn2yzi55aqfxq 4uggkxbumfoufekfu7scfx4vkqfoqslv4fsog7kgwjcat2yqzb2q
191 invisible-internet.i2p ioannism.i2p jnpykdpp46zenz4p64eb3opadl5g42dls3rurk2cvq6a3g3rvbvq g2246vc2tq64rmomwe47v3jnbpz3b3ec2wrrhadukj7lxmwd5aoa
192 irc.acetone.i2p irc.acetone.i2p qyzbrdw26ejjdjzsrcmq5h3ggdzk6cq5xynrgee5t5q73gq545yq qyzbrdw26ejjdjzsrcmq5h3ggdzk6cq5xynrgee5t5q73gq545yq
193 irc.coldhell.i2p d4b3dcqt32yq55b6ct6f4rsib5svzgwkfz4klfczuz7e4p2v6rkq
194 irc.crustyirc.i2p 4ygmttynho5k32vfm64urriqx2vj3s6hkm52jwv2vlwrynu4z6iq
195 irc.echelon.i2p irc.echelon.i2p ez2czsvej5p3z5bquue5q3thujcodfze7ptybctqhnqc7hms5uzq ez2czsvej5p3z5bquue5q3thujcodfze7ptybctqhnqc7hms5uzq
196 irc.ilita.i2p irc.ilita.i2p 5xeoyfvtddmo5k3kxzv7b3d5risil6333ntqrr3yvx3yubz5tk3a 5xeoyfvtddmo5k3kxzv7b3d5risil6333ntqrr3yvx3yubz5tk3a
197 irc.kobomy.i2p irc.nerds.i2p 2j75o23f3hhpebthdiuzevjo3sphmok4jbr5yrtmwav64v2hzuqq nlqhsdd5a7hanjea33mwizg5ixh3xcv5dczufpf3qcfpo6tx4esa
198 irc.postman.i2p irc.postman.i2p hhcy7zznltay2tzwdvtd37g2inptemz3hk5zmxyi57d3sxgxbseq hhcy7zznltay2tzwdvtd37g2inptemz3hk5zmxyi57d3sxgxbseq
199 irc.r4sas.i2p irc.r4sas.i2p hodhusp73gltozgrnianlbploon3rrvhrzfn5mf2g46o7aaau5la hodhusp73gltozgrnianlbploon3rrvhrzfn5mf2g46o7aaau5la
200 irc.rpi.i2p irc.rpi.i2p ppqu4shst5hfjn6jgxyragcanyxurhmof7jdrxag5srpeobevh5q ppqu4shst5hfjn6jgxyragcanyxurhmof7jdrxag5srpeobevh5q
201 irc.welterde.i2p ircs.nerds.i2p 424n5ty6bryfsn3m3buckx4njs4vaw2qch7drfdq32btsyycbflq w4d6hj3q7eyfrkb3kcy7rox2fdjzywypvmyrudtf2q4gdzs2qlhq
202 isitup.i2p isitup.i2p xk6ypey2az23vtdkitjxvanlshztmjs2ekd6sp77m4obszf6ocfq xk6ypey2az23vtdkitjxvanlshztmjs2ekd6sp77m4obszf6ocfq
203 isotoxin.i2p isotoxin.i2p wue3ycaccf4texikza3fh6p5yrmtgnooisuypnepo5mo67lmpcqq wue3ycaccf4texikza3fh6p5yrmtgnooisuypnepo5mo67lmpcqq
204 itphx.i2p itphx.i2p zwu2erk3wtyxlcbmd73kmxcirjghdkk4lpupy3xcavpm3qbob4da zwu2erk3wtyxlcbmd73kmxcirjghdkk4lpupy3xcavpm3qbob4da
205 ivorytower.i2p ivorytower.i2p fpwrfvidfexsz7dspofkwtkmmizm7lyralfz5kvykffk7gubvxsq fpwrfvidfexsz7dspofkwtkmmizm7lyralfz5kvykffk7gubvxsq
206 javadoc.skank.i2p us3amyq3emvm6rcxmrar3o3uoiifnafijgseho4dxdsjgonfyaxq
207 javascript.i2p javascript.i2p idxpwvskkaq3pssrnqpxmiilgeqwf7d2hf5xpusossqz6r2nudva idxpwvskkaq3pssrnqpxmiilgeqwf7d2hf5xpusossqz6r2nudva
208 jikx.i2p jbo.varikvalefor.i2p aazr55itvyns4lwppvx5njyx5tjdwemw4w6jbmpegdunznod2ieq 3flbkdhahkgq47s7vytubh3v4vk3lyqgwwh6dd2k5szqlrivdmta
209 jwebcache.i2p jdj.i2p xdffxnxtjd6ji2zig3cgva7igvl2tiapyjoc7ylbzwqhxudbmvfa mqxhou4icts5tmoq7ndz56sb2ox4s2atzm2urmyn2ndrj2dzzguq
210 jimkiebs.i2p epqxjestvatyv2ala7iqbm45elnecqecz2zmpoklzvekwjapu45q
211 k1773r.i2p k1773r.i2p zam7u6vslhemddz347uusuzjdk5wma4h5hcmcqlng4ybbpdbjhnq zam7u6vslhemddz347uusuzjdk5wma4h5hcmcqlng4ybbpdbjhnq
212 kallist.i2p karamba.i2p rpoqwcozn4pdxz7bp2vxsl7vfibpbccsymfuxg3c7v7yj3um4bta g2lizyuyzms7m6gv24pzege5zapbinxfd2dzbaha6k246pl2xu3q
213 kelvinchan.i2p kelvinchan.i2p 6s72dyf6jwlvk2u455lksvcs5r7deafc3iniwo5kp4ssm777noma 6s72dyf6jwlvk2u455lksvcs5r7deafc3iniwo5kp4ssm777noma
keys.dlms.i2p znl2swe5pez65qxrr2s2s4lmdfky6mnppvh3p5j6suuiovymhjtq
214 keys.echelon.i2p keys.echelon.i2p mwfpkdmjur5ytq4og36ym3ychinv36b2a57f4rmgqmtrwepq3fva mwfpkdmjur5ytq4og36ym3ychinv36b2a57f4rmgqmtrwepq3fva
kibykarni.i2p xowcvzbeq72slpbrwmjl3zy6xkrkb2ncctpkkskeqts63vedtg7a
215 kill-9.i2p kill-9.i2p 3i3bbs2zfabyleqxcqueeegakutrtk3hbxmvbtkrgwvetlmity4q 3i3bbs2zfabyleqxcqueeegakutrtk3hbxmvbtkrgwvetlmity4q
216 kislitsa.i2p kislitsa.i2p khceo3smaxtng2tnuicmcbhdnkk2j6myi4nkigcux76qh3aabdhq khceo3smaxtng2tnuicmcbhdnkk2j6myi4nkigcux76qh3aabdhq
217 kkk.i2p kukluxklanib666d73z5fyeyb6vnystmvvreaodhjf73rhl4wxva
218 knijka.i2p knijka.i2p knjkodsakcxihwk5w5new76hibywia5zqcgoqgjttzsausnd22oa knjkodsakcxihwk5w5new76hibywia5zqcgoqgjttzsausnd22oa
219 kobomy.i2p kohlchan.i2p f2m5wb6iotejsdhimqunkggw2pbboozd6vcha3xi37zjsecya2ua kohlchanvn6vtsujobyw4pt5naaszmxqutd5hsdatmxfe2qaqhya
220 kuna.i2p korol4ik.i2p bwzbe3pn3g2oqce6grxocaqgw6p2oleiddsgrm7d3fms3cw44izq mr3z5lggdppc3yw2r2egstpg33ga2wfocmozac6kjmhhfk3asm2q
221 kurator.i2p sp3umnyofy5ytixbqcue4jrpxixccgnrxtiuvhg6juep5s5lrs6q
222 kycklingar.i2p kycklingar.i2p gctswdhp4447yibxfbqg3uq2bvx63qjeqnaoaux75zw73leakyva gctswdhp4447yibxfbqg3uq2bvx63qjeqnaoaux75zw73leakyva
latinum.i2p n64izx6kyu3xv6yvc45mvpswlq4txbkc5y2okjwyoseb5lmzxoea
223 lbt.i2p lbt.i2p 5uhjsgyca6ggdvwjjwf67bcmalpbxitopupjpygtahxvkwlh5mzq 5uhjsgyca6ggdvwjjwf67bcmalpbxitopupjpygtahxvkwlh5mzq
224 ledechaine.i2p 7s4vtwkvxvmigj3r4zrc7s5ajdeqtris4qnj3n35cuuvuzkpgqsq
225 legalcases.i2p tms2ibdkp67ddj5ez6l4zwvw33jdpz5tmavv3kpjdcpavfh7np4q
226 legwork.i2p legwork.i2p cuss2sgthm5wfipnnztrjdvtaczb22hnmr2ohnaqqqz3jf6ubf3a cuss2sgthm5wfipnnztrjdvtaczb22hnmr2ohnaqqqz3jf6ubf3a
227 libertor.i2p lenczewski.i2p 7gajvk4dnnob6wlkoo2zcws7nor3gunvoi7ofalcps5lc76wruuq 7uypwo47x4vnryoz25vwisu5jpyhz7pcdvnfzvopww3wxc7wiiia
228 lihai2333.i2p libreddit.i2p maxh5bc5hom4g7udes2m4uy3lfocrqkmcy2m4mvkqca7ktoe43qq libr7vbp7i3lsvqwy5aqgql44uxaufawi5yrloh3x7sezubsoaba
229 limak.i2p jzoxeuuqt6wo55pvt4uh7o5i47oyadrvhyjli4hidqldhihu6lna
230 linuxfarm.i2p linuxfarm.i2p br3njhezhzx7mcv25nrxkrwu5g553xp4oyavsjhfa7jwmzyp3q5q br3njhezhzx7mcv25nrxkrwu5g553xp4oyavsjhfa7jwmzyp3q5q
231 lists.i2p2.i2p lnxcloud.i2p vmfwbic2brek2ez223j6fc6bl5mmouzqvbsch45msvyyzih3iqua wryxsgqp3xl7fuohijmxlugrndtp2vixqlt2obpgriwt3fpdjn6q
232 lm.i2p lockdown.bnet.i2p yeyar743vuwmm6fpgf3x6bzmj7fxb5uxhuoxx4ea76wqssdi4f3q vgbvuawi5y7rh32xxjlqcmsoh6quigdvypqneoidiy7y7x7r2umq
233 lodikon.i2p lockdown.i2p u3f67staiwhqxpacya3clmvurdwd2kp7qcthzhstqnhrmlwc2g4a vgbvuawi5y7rh32xxjlqcmsoh6quigdvypqneoidiy7y7x7r2umq
234 lolicat.i2p 2mvlbpgzlawdxqv3zlcgcje475kv35ow2itpztjpdqegbtjpvbda
235 lolicatgirls.i2p lolicatgirls.i2p pjhlh4h7zn3slglx46ffob5ifcccrcqr5dzbyyueh3wd6a6bizra pjhlh4h7zn3slglx46ffob5ifcccrcqr5dzbyyueh3wd6a6bizra
236 longseason.i2p longseason.i2p ighnngssgd6p4kyrec6m556rasvbtx5xe7bsyxol4lie2dibi4da ighnngssgd6p4kyrec6m556rasvbtx5xe7bsyxol4lie2dibi4da
237 losinka.i2p lucas.i2p r2z2tcs6eguevoxlkrmpkcanuwgnsit2o45svnwaer3wq4v76hrq hcb6j5indzeqfyerq4igx45xgruijbs433mh22ye4osoxkxhumwq
238 lyoko.i2p lunach.i2p afuuortfaqejkesne272krqvmafn65mhls6nvcwv3t7l2ic2p4kq m27cpx55hqhcfjz4u62tiynjtzqdw4s3kanxdgluuthnndiquoeq
239 lytor.i2p madaidans-insecurities.i2p ezjrtucwkkf3xgssjtq6tr27hz4zhbkobr4zjnl3x4jrwy7f7m6q 4uggkxbumfoufekfu7scfx4vkqfoqslv4fsog7kgwjcat2yqzb2q
240 man.i2p mail.i2p progskxxt44tlefm5uc4jqseanlhgbbkjyz4g3nvjjzbvhhp342q mail4okikc3tknhn2tfyqzq7mxgzltqg2tw5v5frtzkcsm45zdra
241 major.acetone.i2p majorivqe4wud5ksadgfycdkgqsesqbbnw4hpgcqfixy4sm77f4q
242 major.i2p majorwsiehucyqfqbw3g2on3xqq2pwrwdd6hhyludqqr6ct7xdoa
243 mapwiki.i2p p2lufcvbzq3smirs7ijwds3y34cxzchveogb4jflbpmk5pzy3wqa
244 marenostrum.i2p marenostrum.i2p tlrae2xdtewfb262daw6ygm5nz5vusc7rbiefpndubjk4jvh5roq tlrae2xdtewfb262daw6ygm5nz5vusc7rbiefpndubjk4jvh5roq
245 masterdestroyer.i2p masflam.i2p yp2g7frk3ze5ljaxbmhmh6hhda3rmpwmpianozi6or2uzqzdur7q ucvzbekxpbzfizwndx4bgsj5bjbygdu4vc3xukiseiw5bvatxivq
246 mattermost.i2p mattermost.i2p x5oovnhnuli5fnwtgkbd5z5jvrvdvprqyuofywx6uoxkk4bie6ya x5oovnhnuli5fnwtgkbd5z5jvrvdvprqyuofywx6uoxkk4bie6ya
247 mayvaneday.i2p mayvaneday.i2p zli2qsg54w7y42vgw4xxlnj4nktcpg7xp33yjxkp33sjafvznbwa zli2qsg54w7y42vgw4xxlnj4nktcpg7xp33yjxkp33sjafvznbwa
248 maza.i2p wiigkmy5je5ox4byjt7z7fh4btojbixbmfv4chnzqoovmgnvdpoa
249 mdleom.i2p mdleom.i2p ggucqf2jmtfxcw7us5sts3x7u2qljseocfzlhzebfpihkyvhcqfa ggucqf2jmtfxcw7us5sts3x7u2qljseocfzlhzebfpihkyvhcqfa
250 metager.i2p 4zdcetlcp3tdg5h23gd3aeyzbvodepid7a6mb3w4qvxkdnm2by6q
251 metrics.i2p z45ieamhex2ihqv7oowk5fz4qq47rbvxhhhbaaiinpajbhuevtpq
252 mhatta.i2p mhatta.i2p o4rsxdeepfrnncsnjq675xogp5v5qkbfgbt6ooqeyfvlifobrjxq o4rsxdeepfrnncsnjq675xogp5v5qkbfgbt6ooqeyfvlifobrjxq
253 miyoisomix.i2p minecraft.reloaded.i2p rtv5ufhxasszywdh3oelqrc4yg4kirtirglub4h3mwovwig624eq qs5ihihltxhhfi6wesihgbvoaurqxgdpxgmwnmsk5d5beabtvmvq
254 minecraftlog.i2p vu2v5xnfk4ivrcmjx4fvofzts7fj47jcq23zfpg6ajj6p3ytt3hq
255 mk16de.bandura.i2p mk16de.bandura.i2p rrllz7nkoeaydqzc5tqdexbfpkvensi26nqg3ly3cxrm5qt6m5sq rrllz7nkoeaydqzc5tqdexbfpkvensi26nqg3ly3cxrm5qt6m5sq
256 monerod.i2p moneroauth.i2p fjvlhyxejnssd5yjxqvom6nooqjdrhd43umxnzw33h2nqzhza5qa kt6uh4z24tendrol5zbm4wv4apq4nbv4w7k5vcguvbpg3alrqyxa
257 moneroexplorer.i2p je4vbduigce7pgjivvo26d4abn3u5mfsos5zemp3a75xzcv7nm4q
258 monerujo.i2p monerujo.i2p puri6y5dtwh6zr4u77ep6ozatun6iz7v4wai2dzxppz7654corlq puri6y5dtwh6zr4u77ep6ozatun6iz7v4wai2dzxppz7654corlq
259 mosbot.i2p mooks.i2p 5bhmrp43mjwlzf4x64xgdrkwmw4luvng6eq5waa663a7vnkp732a 6txhjmnxnrjku4cmdwtyacjzhwythc7l5euqaxieyrc4vjotqwzq
260 mosfet.i2p mosfet.i2p s5ynkgagndmpxpf2kmnenv4x72io664gzd2x3qef54ilammnte3q s5ynkgagndmpxpf2kmnenv4x72io664gzd2x3qef54ilammnte3q
261 mtn.i2p-projekt.i2p mtn.i2p-projekt.i2p f52x5fp6uhq53f5zle5d6rq5un34xgmxgazvilvmzcby37xcmsfa f52x5fp6uhq53f5zle5d6rq5un34xgmxgazvilvmzcby37xcmsfa
mtn.i2p2.i2p l6kuhtmgvbp57d7jwalj5nksi6nr4gfzbz4oit62lxgipb3llt5a
262 mtproxy.ilita.i2p mtproxy.ilita.i2p vxxfipsygx6jpz57pmb3d3mjgsk5ls2idxeo2bffs3yp62muyq7q vxxfipsygx6jpz57pmb3d3mjgsk5ls2idxeo2bffs3yp62muyq7q
mucats.i2p 4vjquedemoznbsva4j6wnr7hyms5k3gwucmxgcnwcwweontbcrha
263 mumble.acetone.i2p mumble.acetone.i2p plpu63ftpi5wdr42ew7thndoyaclrjqmcmngu2az4tahfqtfjoxa plpu63ftpi5wdr42ew7thndoyaclrjqmcmngu2az4tahfqtfjoxa
264 muwire.i2p muwire.i2p c3r6by4k4kzbx7yvq36u5rieuymshuq2pebo3dzs6oovpzn52uoa c3r6by4k4kzbx7yvq36u5rieuymshuq2pebo3dzs6oovpzn52uoa
265 nekochan.i2p nekit.i2p dszr2z2swmeczeao2bqgop6fyh34jw5baeiybsavwtihllwa5qwq axis6zcqacv7le2ms5xqaerecuk3jyrijifrstvxl3or5g5n4ova
266 neodome.i2p nekofiles.i2p 5hkhjehj3ct2pvcah7dcylwef2oti3xij5myxbv3pd7rocio5vkq rutorktnoonk3t4sxmv6g5rj6mzsilfwxcplvfybemssjrva663q
267 neoniet.i2p nerds.i2p jf32pdnofckjvedni77vjt26m6opzzz6ocpkpxof4fptzym56raq 5wpwlbka4wj74rrnwbieopppgtivbqxljznl3bs542mxtvjz7ffq
268 netbsd.i2p jjz5ajknu5rku4p6xb6i5xwjnp3nd6c3jwi2qnzbpaodyf7g2lja
269 nethack.idk.i2p zcojbufszefu5bfht5cem3zlhfvv5y3jzpzbaccu3ehje4d7pb2a
270 news-i2pn.i2p news-i2pn.i2p wwcqkwfo5yhe6uribv5tzylk25j5hkdk6gdnyftzd3k7dawlzwca wwcqkwfo5yhe6uribv5tzylk25j5hkdk6gdnyftzd3k7dawlzwca
271 news.neodome.i2p newsxml.idk.i2p trhwcnygfkeqjj6g4xhmrdp4gsjqsye47lsxshbmwbten4ywt5oq dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka
272 nitter.i2p nexus.i2p axd6uavsstsrvstva4mzlzh4ct76rc6zdug3nxdgeitrzczhzf4q 6uz2ihv4avlfhui5eyrisw7yx2t5mclxyl6blwjgw7zc5q4j3isa
273 normal.i2p nitter.skank.i2p j5fex634r2altzb3kjvu35qekt2r3hgsqzg5qxoy7dp53heu5pma l2aoqvwkq2prrv53cbk4k2ilxw5s2fc7eo2rjunnixp2hrv3iwda
274 nntp.txtcon.i2p nntpsqgdoky2fuctc2hc6vuls2b4okxpkocic2eo66uup3dtaq7q
275 notbob.i2p notbob.i2p nytzrhrjjfsutowojvxi7hphesskpqqr65wpistz6wa7cpajhp7a nytzrhrjjfsutowojvxi7hphesskpqqr65wpistz6wa7cpajhp7a
276 notochina.i2p h3xsjhfyf4wah4sou3gepzibetdntrmiax3zl3x7ozyjv5krakaa
277 novabbs.i2p novabbs.i2p bicoankyijabtj2nlwzjmr4mamybr6bgc6xclpvsgzaaalzhhola bicoankyijabtj2nlwzjmr4mamybr6bgc6xclpvsgzaaalzhhola
278 nsa.i2p nsa.i2p nsetvbclpomqxfcit4mghn6z7vdhnza6jdzczby4crnto32uykga nsetvbclpomqxfcit4mghn6z7vdhnza6jdzczby4crnto32uykga
279 nullchan.i2p nullz2mkp7znirlcersxpk7qmkmgcc6u3yhe462p2qkpxsdb3mja
280 nvspc.i2p nvspc.i2p anlncoi2fzbsadbujidqmtji7hshfw3nrkqvbgdleepbxx3d5xra anlncoi2fzbsadbujidqmtji7hshfw3nrkqvbgdleepbxx3d5xra
281 obmen.i2p obmen.i2p vodkv54jaetjw7q2t2iethc4cbi4gjdrmw2ovfmr43mcybt7ekxa vodkv54jaetjw7q2t2iethc4cbi4gjdrmw2ovfmr43mcybt7ekxa
282 ol.i2p ol.i2p bnb46culzbssz6aipcjkuytanflz6dtndyhmlaxn3pfiv6zqrohq bnb46culzbssz6aipcjkuytanflz6dtndyhmlaxn3pfiv6zqrohq
283 onelon.i2p omitracker.i2p irkvgdnlc6tidoqomre4qr7q4w4qcjfyvbovatgyolk6d4uvcyha a5ruhsktpdhfk5w46i6yf6oqovgdlyzty7ku6t5yrrpf4qedznjq
284 openbsd.i2p ahwlj76krc5do77pibighi2frqmfccpezyiqfmiernvivwomgvuq
285 opentracker.dg2.i2p opentracker.dg2.i2p w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa
286 opentracker.r4sas.i2p punzipidirfqspstvzpj6gb4tkuykqp6quurj6e23bgxcxhdoe7q
287 opentracker.skank.i2p by7luzwhx733fhc5ug2o75dcaunblq2ztlshzd7qvptaoa73nqua
288 outproxy-tor.meeh.i2p outproxy-tor.meeh.i2p 77igjr2pbg73ox5ngqy5ohzvrnur3ezqcogtl4vpuqtrcl3irsqq 77igjr2pbg73ox5ngqy5ohzvrnur3ezqcogtl4vpuqtrcl3irsqq
289 outproxy.bandura.i2p outproxy.bandura.i2p smaie7bxvpy53iiabfxkhmsjtqs7vzjcr5xxsysjbbobunwrav2q smaie7bxvpy53iiabfxkhmsjtqs7vzjcr5xxsysjbbobunwrav2q
290 p4bl0.i2p outproxy.purokishi.i2p lkgdfm4w6e2kkjhcdzr4ahhz26s3aunhrn6t2or436o73qh4z7ga nieasaidj7wy5nammqf4f7zzcdafi4apygwn5qwscpn4pq34hqia
291 p2p-node.i2p e7uvwnpkzbn5zdwr76ujlhym4lk5pfkqhvfwivt3mszx7l4lpj7q
292 packages.i2p packages.i2p 2gbnylztt42dgpjh5r5tmy6oxm5xag6qv4femnbbqbpza4l2l6ja 2gbnylztt42dgpjh5r5tmy6oxm5xag6qv4femnbbqbpza4l2l6ja
293 pagwin.i2p qggplwxvsvctsdzgld2shfyjlokfoxur3pkfapygs26i4hwawfga
294 panzerradio.i2p rawdhtmxzynf5mhrpyhnbjqqxswidr6gvvcbbt4hbpjuv5jebw7q
295 password.i2p password.i2p knmjkeabbhudejkikbzhhjqsb4r77o45vkdhve6d254quttfx3wa knmjkeabbhudejkikbzhhjqsb4r77o45vkdhve6d254quttfx3wa
296 paste.idk.i2p paste.idk.i2p qvgktychvlbmqwnoqgz2siuna7f5w764wgkbqcwogipfjzf3ksva qvgktychvlbmqwnoqgz2siuna7f5w764wgkbqcwogipfjzf3ksva
297 paste.r4sas.i2p paste.r4sas.i2p csen43keji3qiw6uobsgzysxyjd225g6446ylq5uuz6ur2glkzaa csen43keji3qiw6uobsgzysxyjd225g6446ylq5uuz6ur2glkzaa
pay.privex.i2p cz25423yahhbd2wavtwupsbcbdg6wkn5vvh3466hbmmrzlu4wxyq
298 pharos.i2p pharos.i2p vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
299 pharoz.i2p pharoz.i2p vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa vathk2pyvaskeie63yyg4tshjkx5xt6zfvhwhgr3de67q46ob3sa
300 photosarchive.bentasker.i2p w4lnfcg2chbkwigogba7q3o5pgtq2baip7z3z4afaj65axhyc5ca
301 phreeroma.i2p 44fu2fhq6q36re2xqnkuievdfsroi5xchgbowkqib6ekak3ynm6q
302 pizda666.i2p bczoowsc6ik7a4mya45qnlq5n6c6llpd5ni3u67r4r4drgohyira
303 pizdabol.i2p pizdabol.i2p 5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa 5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
304 planet.i2p planet.i2p pztcztaklof7s4me2vgtdddzesnunvk55zke6oz5e77ci3qk64yq pztcztaklof7s4me2vgtdddzesnunvk55zke6oz5e77ci3qk64yq
305 pleroma.pluralitynet.i2p play-it.i2p 22wwp4s4n4sre45cj72zrfcdqcelpga65yrt6jlgahehxtbg2vzq oxt7gdu663baue7lugdmgxqkmtrfdy2izluneqdrpv4pfslxjlta
306 pluralitynet.i2p pocketlint.i2p yphtn6ponyelopqiccm3nfznoc34byroack4z33lvi54gyfeuawq pocketzsq4r4fef2bw57sn4paufjh5dw75azu5sr4hk2qwdvucsa
307 podger.i2p podger.i2p 56pcmc4rxmtzs6ojvszpiqmh47et3m6amh7kfszp4wbvz2jbpnya 56pcmc4rxmtzs6ojvszpiqmh47et3m6amh7kfszp4wbvz2jbpnya
308 polistern.i2p ztqi2zewgtifrg4efs6eyxxi5www27ymley3aiz4obhulbnszlva
309 pomoyka.i2p pomoyka.i2p omt56v4jxa4hurbwk44vqbbcwn3eavuynyc24c25cy7grucjh24q omt56v4jxa4hurbwk44vqbbcwn3eavuynyc24c25cy7grucjh24q
310 pool.gostcoin.i2p pool.gostcoin.i2p m4f4k3eeaj7otbc254ccj7d5hivguqgnohwelkibr4ddk43qhywa m4f4k3eeaj7otbc254ccj7d5hivguqgnohwelkibr4ddk43qhywa
311 pop.postman.i2p pop.postman.i2p i7vd76psp3oyocljiqkoyz7fpr4fy2xq2asclf7qih6k57aj5xrq i7vd76psp3oyocljiqkoyz7fpr4fy2xq2asclf7qih6k57aj5xrq
312 portal.webhosting.i2p porest.i2p bflwwtclsmmrimszczoafdrdzw6m7bszkggv4qs5e4aymghoxsja 46l7beij4rerlbuj7xmcngarlkhlpgaztywrleiwagjuiipcebbq
313 pravtor.i2p privacy-handbuch.i2p 2sr27o5x2v2pyqro7wl5nl6krrsbizwrzsky5y7pkohwh24gn6xq 3cccw3cxxghkalgichofulid36ekwplv3stubvfot522mwxcnu5q
314 privatebin.i2p privatebin.i2p e7qy5kc7ivqtnrbdn5ymx5nmbdedlrjkdchqmmkhud4ockrime5a e7qy5kc7ivqtnrbdn5ymx5nmbdedlrjkdchqmmkhud4ockrime5a
315 privetalena.i2p programthink.i2p alenabivbkqo2xoikterpsc3gquqzacxfef6usbifrez5ioegjjq programygfltn24q6foacm5gbuo3z2geub2k2k366llx3bph4ula
privex.i2p omgulpderyhggjbaksgcccvjk76yvbp5rsnm4uos2mqfe5iv765q
316 project-future.i2p project-future.i2p ivqynpfwxzl746gxf376lxqvgktql2lqshzwnwjk2twut6xq7xta ivqynpfwxzl746gxf376lxqvgktql2lqshzwnwjk2twut6xq7xta
317 projectmayhem2012-086.i2p proof-of-loss.i2p ehkjj4ptsagxlo27wpv4a5dk4zxqf4kg4p6fh35xrlz4y6mhe4eq ofhehzoj5p4khpkookxb63tmqvrmcxaapgb3v3nm7kd5wjgebs4a
318 prophetgram.i2p cufuwm75gjpt3svl4wjmo6r4zjv6eqyjdpiuqfckgb5aqqdbgyvq
319 psv.i2p psv.i2p pmzcuml2oi2ok2h5i6cepcyxxjrughzgliai6hzspdlyt2bucy7a pmzcuml2oi2ok2h5i6cepcyxxjrughzgliai6hzspdlyt2bucy7a
320 psy.i2p psy.i2p s3elzoj3wo6v6wqu5ehd56vevpz2vrhhjc5m6mxoazicrl43y62q s3elzoj3wo6v6wqu5ehd56vevpz2vrhhjc5m6mxoazicrl43y62q
321 psychonaut.i2p laf5nvzn4wz7ndgtdysmhvebpyjo3fkth7i4z4c2kp7su3wi6e2a
322 psyco.i2p psyco.i2p eoilbrgyaiikxzdtmk2zeoalteupjrvcu3ui23p4wvfqo25bb73q eoilbrgyaiikxzdtmk2zeoalteupjrvcu3ui23p4wvfqo25bb73q
pt.i2p umbkgg3nhvgunyiwo2odfo3ufbdijb2ofg5eha6nyd4ymp4yitna
323 pubsub.i2p pubsub.i2p kse52thhz4srsf2ibw7zj6ua27df5a2u5gnqgf5jxwvranbw6mpa kse52thhz4srsf2ibw7zj6ua27df5a2u5gnqgf5jxwvranbw6mpa
324 pull.git.repo.i2p 3so7htzxzz6h46qvjm3fbd735zl3lrblerlj2xxybhobublcv67q
325 purokishi.i2p purokishi.i2p ia55kcrvskaitnxegirubvderl4vhva6bwkiducbkma4scy2rhca ia55kcrvskaitnxegirubvderl4vhva6bwkiducbkma4scy2rhca
326 purplechan.i2p tyiwxpgs7syjvz3cha3uckaxgondtiktlsvriebyy4qmzgbaj3gq
327 push.git.repo.i2p jef4g5vxnqybm4zpouum3lzbl6ti6456q57nbyj5kfyldkempm3a
328 pvsur.i2p pvsurxi2hz2n45kfrj5b3ny6ko4ipj2u2piftjen44npkpnbwh6q
329 qorg11.i2p qorg11.i2p ivusryc5mfrroomm6s5no4badevf7djzlgzlwarce33no2bsyi3q ivusryc5mfrroomm6s5no4badevf7djzlgzlwarce33no2bsyi3q
quest.idk.i2p k6stkvw3jr6of4j5g3pu34jowfpl4k4jiqih3yozhcvinkok56aa
330 r4sas.i2p r4sas.i2p 2gafixvoztrndawkmhfxamci5lgd3urwnilxqmlo6ittu552cndq 2gafixvoztrndawkmhfxamci5lgd3urwnilxqmlo6ittu552cndq
331 raccoondad.i2p utoagugf3imr6mpjsithhnpvvvyehsnebisovn6kqn4vma6va3ca
332 radio.arav.i2p plkybcgxt4cdanot75cy3pbnqlbqcsrib2fmrpsnug4bqphqvfda
333 radio.idk.i2p gqla6svl56uazumw2a56rzmvfmcr6fb57bm5kpbb6oibqi6o66gq
334 radio.nerds.i2p tpbfxyluryodtfxdpwsfvw7fl35p5ezrjk3tlcv2atlmc4fl2ctq
335 radio.r4sas.i2p radio.r4sas.i2p cv72xsje5ihg6e24atitmhyk2cbml6eggi6b6fjfh2vgw62gdpla cv72xsje5ihg6e24atitmhyk2cbml6eggi6b6fjfh2vgw62gdpla
336 radioliberty.i2p libertyx5gywnmn4snrr2fborvugmthl2x5vf3rh43v3744kmpwa
337 radioplayer.i2p 5tmr7qghx5eecoyvi77rsy7fqxeoyqcdpvg5wasoitn6ywkyobbq
338 raklet.i2p j3vnnihngp3ti2trktoxlyblltjn6gxscbmasb5zun5pdndkxkoq
339 ramble.i2p ramble.i2p smv3cryi3n7d5ll7xpvlhstubi5yj4dadeltyrdwdr4onwd2jvvq smv3cryi3n7d5ll7xpvlhstubi5yj4dadeltyrdwdr4onwd2jvvq
rambler.i2p czptodzrdjjzff6jukipd2xv3pdjfg3gv53m6bsaoaab5fyr7zmq
340 ransack.i2p ransack.i2p mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq
341 realsite.i2p realsite.i2p ffacpzudiclaqh6fkck7ungeacfoafvijduhmwvnmp6e4jridhta ffacpzudiclaqh6fkck7ungeacfoafvijduhmwvnmp6e4jridhta
342 rebel.i2p recipebook.bentasker.i2p nch2arl45crkyk6bklyk2hrdwjf5nztyxdtoshy6llhwqgxho5jq ajagzagm5uyc2oac32ycx42znnatejliqorbk3y66xt25guxnh2q
redzara.i2p ty7bt62rw5ryvk44dd3v5sua6c7wnbpxxqb6v4dohajmwmezi7va
343 reg.i2p reg.i2p shx5vqsw7usdaunyzr2qmes2fq37oumybpudrd4jjj4e4vk4uusa shx5vqsw7usdaunyzr2qmes2fq37oumybpudrd4jjj4e4vk4uusa
reg.rus.i2p k2r2wda4eavt4hoq5hptprqfmixusirq3gi5bl3z2pqzcd6felwa
344 reichsmarket.i2p reichsmarket.i2p 2uj4xomizi75swws7q5icmnavekb2w2ws2wlcqtyltde7pgymraq 2uj4xomizi75swws7q5icmnavekb2w2ws2wlcqtyltde7pgymraq
345 reloaded.i2p wxbh2yq5twqinsw3ztjogqovvdd6h6j5uxeg3lh53x4w7klzv3tq
346 repo.i2p uxe3lqueuuyklel23sf5h25zwgqgjwsofrqchhnptd5y6pedzbxa
347 repo.i2pd.i2p ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
348 repo.r4sas.i2p repo.r4sas.i2p ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq ymzx5zgt6qzdg6nhxnecdgbqjd34ery6mpqolnbyo5kcwxadnodq
retrobbs-nntp.i2p fkyzl24oxcxvjzkx74t3533x7qjketzmvzk6bwn3d6hj5t7hlw6q
349 retrobbs.i2p retrobbs.i2p mnn77stihntxdoade3ca2vcf456w6vhhvdsfepdvq5qggikvprxq mnn77stihntxdoade3ca2vcf456w6vhhvdsfepdvq5qggikvprxq
350 retrobbs2.i2p retrobbs2.i2p ejff7jtyaus37slkwgeqrrcmyhpj26carp7n27f5h6s5vlbeiy6q ejff7jtyaus37slkwgeqrrcmyhpj26carp7n27f5h6s5vlbeiy6q
rfocke.i2p pphesm2icsbqi7uzsmxpgyy4kc22b3cdpb4uwplkkjmupexva7dq
ricycal.i2p tfkz7rgqh6rwvlo2veftw4why2dej3gztiglzfqfvykyzak2syxa
rideronthestorm.i2p xrdc2qc7quhumhglpbcuiqxr42nuffv4xj4a73jbr4ygepitibqq
351 rpi.i2p rpi.i2p 56p5qxsrvo5ereibevetw2qbj5bronmos7wxunku27g2s4kpbnlq 56p5qxsrvo5ereibevetw2qbj5bronmos7wxunku27g2s4kpbnlq
352 rslight.i2p rslight.i2p bitag46q3465nylvzuikfwjcj7ewi4gjkjtvuxhn73f6vsxffyiq bitag46q3465nylvzuikfwjcj7ewi4gjkjtvuxhn73f6vsxffyiq
rss.i2p j7qbshtyaxwiuzkshduwqqq35ctb4cnfjvd2pnbjn3ugmblemsza
rsync.anonroms.i2p 4q6llvjjpgncu6wbol2rqq24ksrtscu5njj65jjovqlsxounxbdq
ru.i2p m7fqktjgtmsb3x7bvfrdx4tf7htnhytnz5qi2ujjcnph33u3hnja
353 rufurus.i2p rufurus.i2p 7msryymfdta3ssyz34qur6gi4jyfkvca5iyfmnceviipwu7g2wca 7msryymfdta3ssyz34qur6gi4jyfkvca5iyfmnceviipwu7g2wca
354 rus.i2p rus.azathabar.i2p gh6655arkncnbrzq5tmq4xpn36734d4tdza6flbw5xppye2dt6ga 6gp6ykan6ovr7p6dln56msvmdk6nrtvzoypz5dbhkkt4bdnryjna
355 rvklein.i2p rutor.i2p pzbqr2s25zpgbwiz22nc7hzxlusqxwhpxrsmln63y6fd45whnjcq rutorktnoonk3t4sxmv6g5rj6mzsilfwxcplvfybemssjrva663q
356 sdmr.i2p ryona.i2p o2vtbbcddamtqqomtf7wbkzzkh2xovt23lc6np7qtxbuv6vtul6q mzt45ux3budteuxz2b4xkwnphgspgljuwp3rxm3d2yr2sij6wopq
357 searx.heckyel.i2p s01.nullchan.i2p bbttsspdeozbfvmjm3ewnbwpot2fkhhk63w54ytptbyokazkydea mirrooeo34iokdgf3wno4ubx6x6uj7f2pqyjmmrvtg4m4parvguq
358 secure.thetinhat.i2p salama.i2p 4q3qyzgz3ub5npbmt3vqqege5lg4zy62rhbgage4lpvnujwfpala 4uoef63gv2sg6dtqmom5oypt6taypklekvlejfox56eiylprzrmq
359 samainu.i2p zlwgylqmlx6wxwnxf3mx64jl6yp6wv4sjeiidqw7k3n2wh2m46pa
360 satoshivision.i2p rn5c533w5baghskquu3gtqlehwjkstzzbk5chbc5qhivsz3a3nqq
361 scamdemia.i2p fdkiv7o4kzaikwkw6hbn7iedidp25lv6eo7yeyeqxai3jz7mrvzq
362 scanner.linuxfarm.i2p kojzsg33v2zxwqp3twpqzfvflaeoxgzxrl3douf2x7xv27ggfnaa
363 secret-site.i2p p6hbhjgdv2e6gyydrqh2ztl6onxnyilmj4ts7d7aj3uqssr7vvfq
364 securityinabox.i2p np3agu3ekd3isrzqzvsw4llwlr3hg5xbw7n7a23n2zfvhhm4e7iq
365 serien.i2p serien.i2p 3z5k3anbbk32thinvwcy4g5al7dmb75fagcm3zgh4rzrt3maphda 3z5k3anbbk32thinvwcy4g5al7dmb75fagcm3zgh4rzrt3maphda
366 sftp.anonroms.i2p seven.i2p uozfd7ttkhjsofmgs7lfcy4pgngs4yp7kvnbhnppebjumgbjhjla anqf44jmf7kby2qcvcx7gug6nuyansdu4msdbnp5kojom27rrm7a
367 shadowwiki.i2p 63gxkfc4hlcbxrdoepw2i2hyxai5qkxmi636ag3y7sf5tq3imoya
368 share-les-miquelots.i2p uxwha4jswnt6jrznj7yhfwldfilvyasnjruimmbylbvq5qykpbpq
369 sharefile.i2p sharefile.i2p o7jgnp7bubzdn7mxfqmghn3lzsjtpgkbnpjjsn6ddevqbchz3rta o7jgnp7bubzdn7mxfqmghn3lzsjtpgkbnpjjsn6ddevqbchz3rta
370 shoieq3.i2p shoieq3.i2p 3fjk4nfk3mccch4hdreghnyijcvovsi3yucjz3qzj5sxngqk5j6q 3fjk4nfk3mccch4hdreghnyijcvovsi3yucjz3qzj5sxngqk5j6q
371 shota.i2p 75xxnc5hkeg7a3z5re4cpybbxt7te3p2krgrrgoka4hib2nr7k4q
372 silkr0adrel0aded.i2p rdqt2xxpsc5tzj7gjvcrpi7jea5gtbetgx7w2npobveg5teatdvq
373 silkroadreloaded.i2p hyn3mwmyeovcn2paujxur2eury2ufqpoahvbbqshfoggljn25tra
374 skank.i2p skank.i2p qiii4iqrj3fwv4ucaji2oykcvsob75jviycv3ghw7dhzxg2kq53q qiii4iqrj3fwv4ucaji2oykcvsob75jviycv3ghw7dhzxg2kq53q
375 smtp.postman.i2p smtp.postman.i2p 3nrunsrgeo6grhx6y6vsx7vibm5vabtockdbys3sqdmj6vha7k5q 3nrunsrgeo6grhx6y6vsx7vibm5vabtockdbys3sqdmj6vha7k5q
376 solr.chudo.i2p snippets.bentasker.i2p utl2ds5vztfomjgerohvxrgaq3g6zrspyku4s35knfmu4rihhgxq vgduvgxudaceslvwlvtda6b4csobvczygcqpklm3yeuke2zgvcaa
377 speed-test.i2p 7lk5mgyi2knhqjjwjeiiuwlrn2rs2s577e7jh7z5rmbe2s6qkjpq
378 spirech.i2p labhopl3kd3eo7cj7kqa6nkwpczc2qj52i37jky77ugqazy7dmna
379 spoika.i2p spoika.i2p u7uyxhgikc5ifj73oz6yedpy5pvtynbqo3n7rk5qyy5h5yhz4wbq u7uyxhgikc5ifj73oz6yedpy5pvtynbqo3n7rk5qyy5h5yhz4wbq
380 sportloto.i2p sportloto.i2p sportloto4cqlq6uhzzvgsgd7rcsfu6mqtk7wp6zmzqwcpflbsdq sportloto4cqlq6uhzzvgsgd7rcsfu6mqtk7wp6zmzqwcpflbsdq
381 spyware.i2p spyware.i2p 36j7itgqmnbinh3ortujakkvqdrbhlqu4b2qcwb46mue3dpzxqfq 36j7itgqmnbinh3ortujakkvqdrbhlqu4b2qcwb46mue3dpzxqfq
382 srr.i2p t6vdyn5sbtorn3bp6i7ndnv4lmxhk4qnqmyqlaxykdhcwatchlza
383 ssh.vimarsha.i2p zttfrujqde5ddndps4stdspvro3khawdhcdgf73pae4i7dnvv4ea
384 stats.i2p stats.i2p kqypgjpjwrphnzebod5ev3ts2vtii6e5tntrg4rnfijqc7rypldq kqypgjpjwrphnzebod5ev3ts2vtii6e5tntrg4rnfijqc7rypldq
385 status.str4d.i2p ycyyjo3psqbo45nuz243xvgvwnmzlanzqbzxv3kh6gyjztv7425q
386 streams.darkrealm.i2p streams.darkrealm.i2p ud3gcmvysjch4lbjr2khmhqpf7r2x5if4q43xkqdptl4k7lc4muq ud3gcmvysjch4lbjr2khmhqpf7r2x5if4q43xkqdptl4k7lc4muq
387 svong.i2p support.i2p wlamzgxjc4k67fn2c2pdems2dzfq3hkdbbt3n7ela7p2wp3pew6a supportpwqa4cc7q43hb67tgd3dvntrwsy6725iufahm7kiluysq
388 support.torproject.i2p 6r7j6jlbrxb35k32zktopvr3w3pidm2baymwol33hq7xmy2sqm3a
389 syndie-project.i2p syndie-project.i2p xa63tpfoaqt3zru2ehxjjfbpadwj4ha6qsdvtcqtyr3b7hmt4iaq xa63tpfoaqt3zru2ehxjjfbpadwj4ha6qsdvtcqtyr3b7hmt4iaq
390 syndie.echelon.i2p syndie.echelon.i2p vwrl2qmcif722fdkn3ldxcgz76df5cq4qypbndzthxwgmykyewta vwrl2qmcif722fdkn3ldxcgz76df5cq4qypbndzthxwgmykyewta
391 tabak.i2p t-ru.i2p y5o2vwb6kart7ivpnbpk4yte3i7kf2dsx7fy3i6w7htqtxhmbzia bkhuehxydyprxpd4372h4boyluardjogyuff5p5l3u7syguavz5a
392 tahoeserve.i2p tahoeserve.i2p yhs7tsjeznxdenmdho5gjmk755wtredfzipb5t272oi5otipfkoa yhs7tsjeznxdenmdho5gjmk755wtredfzipb5t272oi5otipfkoa
393 tails.i2p 5d7sl23h4uer4czjdtlomkb6ykeiss6vqkxzausp6f6gmty2plaa
394 takipsizad.i2p ufkhvmacngokfufxinfkdvfmbpvwvog5vrjiavw5zv32jnekcxia
395 talk.community.i2p talkakxfa6ihzn2mbzar6q5chdtkpnjp633w3tarul2bb6tfmoua
396 talks.i2p v45dmrrbjg3ucrazgl3t2tktyjajo7gvfexhmbdos3pi5kfuocaa
397 teddit.i2p k62ptris7p72aborr4zoanee7xai6wguucveptwgxs5vbgt7qzpq
398 telegram.i2p telegram.i2p i6jow7hymogz2s42xq62gqgej2zdm4xtnmpc6vjcwktdxpdoupja i6jow7hymogz2s42xq62gqgej2zdm4xtnmpc6vjcwktdxpdoupja
399 term99.linuxfarm.i2p dg3mso5klqqgcngalxdh5yvkwv56ou7yotsqxw3twneojytiehra
400 tesla.i2p em2x6bwsbelqfvlgypcywwoov2rib7mvxiy775dmpfs76m4zcdtq
401 testbox.i2p voa7ebdulhpcsupz4zqeyikdjztyhiutgvyri4qxqapistjwptbq
402 testmk16de.bandura.i2p testmk16de.bandura.i2p gbdgvcv6wkwctls3tdx4ljmzo4zry3awrr37rkvrxcwg7jzjoyra gbdgvcv6wkwctls3tdx4ljmzo4zry3awrr37rkvrxcwg7jzjoyra
403 textboard.i2p testshark.i2p 7ubwrcixdcemzqwqzh2vaakjsnochj2biuzpo6dc2n4f7wqj4pua u64ropzplqkncdmi4wcknqehjqudxb6elyut2k44ocvgx7ilpgia
404 texterochtankar.i2p thealiensarehere.i2p woqimbz4v2synkwyif65izfz2t4gbfbqjrai2ic5ok5qhnvmfszq 6t3mm7mkmjcepgwbthqvrh3kjfsipqdwqurcptwruyy73enqkawa
405 theyosh.i2p theyosh.i2p 5m7ygxhcdyfa3kx3wfjbbunk4pjey7a5zr5lnfb3upgjbhanrita 5m7ygxhcdyfa3kx3wfjbbunk4pjey7a5zr5lnfb3upgjbhanrita
thinking-wiki.i2p feuemwevbvwpnyefpkpet2ign7wvnjww6dhhzis6tobkfh7ybxsq
406 thornworld.i2p thornworld.i2p vinz4ygmodxarocntyjlfwk2wjpvzndlf4hxss2w2t3fk52oplva vinz4ygmodxarocntyjlfwk2wjpvzndlf4hxss2w2t3fk52oplva
407 tmp.heckyel.i2p tictactoe.i2p v67szhqv7r2hm65lk7s2r4aqchswtfanove2p3ca746dg7nqwvoa cbr6sya637smfifq2hxj3kzqw5yv7aws2uknmi6ln45r65xej4aa
408 tome.i2p tmpsend.i2p qktkxwawgixrm5lzofnj5n24zspbnzxy4pvjm7uvaxvmgwrsuvgq r2al7m32cg2ypjcny627wkoiyanrasmorub2wqla3y6gn6rwzzvq
409 torrents.chudo.i2p tomasgl.i2p 5ooemze55xiicrlvzjmz3il23dpo4fz5iqr7hmzrygdepan5m3lq tyiu7xok7hvzymxtgg62rjz7mvzr3bryq4i7ii7gudncogn2lpfa
410 tosios.idk.i2p torch.i2p 4mfy2ggcynt5xjkrdstwju2cqicayq7tg5bcb6o575wvab2div7a vdpmmcq4ysca5rdczr5lqohjtaf5togdy5itoos54s6nn6xqox3a
411 torproject.i2p torprojaxvxevo4c5qvor3ywgasxkubs5ukazrpq3qcxed6lgbrq
412 torque.i2p hc3mefp6cq2btwmmjl76atgtftzswu774dyv4a3qkl34wn4g6vta
413 trac.i2p2.i2p trac.i2p2.i2p i43xzkihpdq34f2jlmtgiyyay5quafg5rebog7tk7xil2c6kbyoa i43xzkihpdq34f2jlmtgiyyay5quafg5rebog7tk7xil2c6kbyoa
tracker.chudo.i2p swhb5i7wcjcohmus3gbt3w6du6pmvl3isdvxvepuhdxxkfbzao6q
tracker.lodikon.i2p q2a7tqlyddbyhxhtuia4bmtqpohpp266wsnrkm6cgoahdqrjo3ra
tracker.sartorius.i2p a5ijwlahghzstkkb2dr6kxnhlaasoot4gjkl2sx5f7ecudhjdf3a
tracker2.lodikon.i2p q2a7tqlyddbyhxhtuia4bmtqpohpp266wsnrkm6cgoahdqrjo3ra
414 tracker2.postman.i2p tracker2.postman.i2p 6a4kxkg5wp33p25qqhgwl6sj4yh4xuf5b3p3qldwgclebchm3eea 6a4kxkg5wp33p25qqhgwl6sj4yh4xuf5b3p3qldwgclebchm3eea
415 traditio.i2p translate.idk.i2p wkpjjloylf6jopu2itgpktr45t2xvpjijxilxd5tq4i7wkqgwhhq g2l2zr4moqsk2bec346i5tfd2o22cozm5b2k4ifdhbcayazoz2ea
416 triplechan.i2p ts.i2p blrplscno3ecqb5ihhg73kufmypydjlv4r4gqiajftup5wmcdwna nebcjgfx3f7q4wzihqmguwcdeopaf7f6wyk2dojw4bcuku472zxq
417 trypanom.i2p tube.i2p tgv5acj4khwvr6t44cmryohybd2e5o2kndysnzae6qwcr4hzda3q vipzc556nzjraiqsk5xwvyhz54fvtqt3vrepdarat3zsj4a6eypq
418 tumbach.i2p tumbach.i2p u6pciacxnpbsq7nwc3tgutywochfd6aysgayijr7jxzoysgxklvq u6pciacxnpbsq7nwc3tgutywochfd6aysgayijr7jxzoysgxklvq
419 tutorials.i2p tutorials.i2p zy37tq6ynucp3ufoyeegswqjaeofmj57cpm5ecd7nbanh2h6f2ja zy37tq6ynucp3ufoyeegswqjaeofmj57cpm5ecd7nbanh2h6f2ja
420 tv.i2p txtcon.i2p znccrkhtgz4wqceyofwsqdsraqhdtteqzrag53lgmp6rhkutuy6q txtcons5lrayl7bq7zsk2mt24clocassid3kh2rvyd3rd2xeklpq
421 uk.i2p tymcz.i2p vydbychnep3mzkzhg43ptewp242issy47whamfbxodc4ma6wc63a pyog2x6v3eyna5pdr765osut52tpbmaheyi5atbqfaixmcq4dp7q
422 unodice.i2p ukrainews.i2p fukkqcornjsfn2ggd2h4cgeitu4dbin7hymp5xf6zypwzif2pcoq 2bocbwrmakg252kicblp5i42feao7qpcw3xppms2i5oevkgelpsa
423 w.i2p umbra.i2p j2xorlcb3qxubnthzqu7lt4fvxqn63it4ikwmze55yjkzeeampuq xunb4chkeo5xxpfkwrkaqb5etmqpp4ddgvcmy7qkvtxhk5ihck2q
424 wallet.gostcoin.i2p unqueued.i2p reuvum7lgetglafn72chypesvto773oy53zumagrpigkckybrwda 3gvn4kwd7z74jxc2sn4ucx52dpvpscxbzjluux3ul4t3eu5g64xq
425 upload.arav.i2p a5txjx3gjrnw6do4zr66wpwlayxt3dg7kb43wbr3fjp53mkfkbdq
426 vanity-eth.i2p 6djvwwd3mtozyqhpuyvcwqkje5fk3rbxqbgqgdlr32b6hvdqeq5a
427 varikvalefor.i2p yn7ovvjf4nhf7hhk6qqph7utcoce4f2j325rfeuyapw3emlqfqna
428 vimarsha.i2p ag5tjs7c4skyt6gh54ebhffgxt2gof2ood4psbciv32l6mg6fzia
429 vps.webhosting.i2p kfqflh2y36jzp26vloaptqpgwtvw4qtz232wv53xxbggkydhpkaq
430 walker.i2p 5vik2232yfwyltuwzq7ht2yocla46q76ioacin2bfofgy63hz6wa
431 wbnet.i2p 2deeocx7jmrbmjxcpkxecw7yy2z7ybzwz5i6mg3ska3p3d2dx45q
432 web.telegram.i2p web.telegram.i2p re6cgwg2yrkgaixlqvt5ufajbb3w42fsldlq7k5brpvnd5gp6x5a re6cgwg2yrkgaixlqvt5ufajbb3w42fsldlq7k5brpvnd5gp6x5a
webcam.i2p fhrkpj4iscrg6etgdlteseoed37q2ph7cizclgpabgcbnaq6g24a
433 webhosting.i2p webhosting.i2p hxqjbkpn5fxnmurlab6oluyqf3dd2xnxszeawn4ak2s4rpjnfheq hxqjbkpn5fxnmurlab6oluyqf3dd2xnxszeawn4ak2s4rpjnfheq
434 webirc.coldhell.i2p k2d6bius63w3g35j32dn66fssqwbnyvegx6w6pl5mdeojpp4rjba
435 wiki.i2p-projekt.i2p wiki.i2p-projekt.i2p b2rpg7xtzwwfvtorfkrc3m7h222qbobnklra7g4oqhfjx64k2voa b2rpg7xtzwwfvtorfkrc3m7h222qbobnklra7g4oqhfjx64k2voa
436 wiki.ilita.i2p wiki.ilita.i2p r233yskmowqe4od4he4b37wydr5fqzvj3z77v5fdei2etp2kg34a r233yskmowqe4od4he4b37wydr5fqzvj3z77v5fdei2etp2kg34a
437 wikiless.i2p x33lx4h6d7h6xs4eiqwhvaxn3ea5gn2ifmu3jobnvuvn4k4aej7a
438 wikimirror.i2p 2bhh73qhuwjkznnnzjfgo4buo7xy5l4ubhzt3oh23adksscx6gmq
439 wlm.i2p wlm.i2p nigg3rveztrkpzoimq4z46pvbtml27mfhadt7n5bvl3pzzyzefxa nigg3rveztrkpzoimq4z46pvbtml27mfhadt7n5bvl3pzzyzefxa
440 woah.i2p yh2eixirhlhvp7exrtalcwgeirg3fxi2vnumsbp7w6tily5oiwwq
441 wopen.i2p wopen.i2p xvedtnzz3kpwpir23zyr3exrhkrn3267harw7gcjvp25yceyokza xvedtnzz3kpwpir23zyr3exrhkrn3267harw7gcjvp25yceyokza
442 www.i2p2.i2p worcester.i2p rjxwbsw4zjhv4zsplma6jmf5nr24e4ymvvbycd3swgiinbvg7oga 5jtgpuzaabxyhahvbmokb3oeh2lwzpiiqlrg3w7kyyg63lzkwabq
443 www.imule.i2p wordle.i2p 657xcllunctawyjtar5kgh3wpt6z4l7ba6mmam5rf7hev5w2lsvq games3kuxvadv3y6tfowiynk2cnbuokrn2guvhkigqulmrvfnyla
444 www.infoserver.i2p www.infoserver.i2p fq7xhxkdcauhwn4loufcadiiy24zbei25elnup33a3gfrdzrtlyq fq7xhxkdcauhwn4loufcadiiy24zbei25elnup33a3gfrdzrtlyq
445 xadmpp.i2p jb67tnpn67i3pwcuf45rtwu7gq6nkrs72iznhnakpkdzb6dkgfmq
446 xd.i2p jynrjzdp5qajf2jsdif6bgpijuk72zmuiohq3o7omeksw4pdgejq
447 xeha.i2p xeha.i2p oartgetziabrdemxctowp7bbeggc7ktmj7tr4qgk5y5jcz4prbtq oartgetziabrdemxctowp7bbeggc7ktmj7tr4qgk5y5jcz4prbtq
448 xmpp.chudo.i2p xinku.i2p gppd6rx5jkutmt637odkbxh4tjqxy63i4amyhllqn424yt7pd2hq xlsmgjin444ccqu7ff5taoov7hecasdyg53keatpbr2qrvgmzvuq
449 xmpp.ilita.i2p 2dpg43zlfophx5jo4xeqc6cx3zm4x3tfdoinbfuzychf5lwn3dhq
450 xmpp.pubsub.i2p yxbp3sn2x5t6k7hcxsg4njmaxjomr2wvh4xeldxjlij3ms3sikgq
451 xmpp.reloaded.i2p hioylmlm3lf3qgp2ncmym3igx6eyytlwioeq2fip4cwpzjtyxfuq
452 xmpp.rpi.i2p xmpp.rpi.i2p 3yv65pfwiwfuv4ciwtx34clqps6o2mc3vtyltcbqdkcki6untbca 3yv65pfwiwfuv4ciwtx34clqps6o2mc3vtyltcbqdkcki6untbca
453 xmpp.xadmpp.i2p s5ekktro7kk24gu67dgwi5xnhzhzjx6abujk44q4v56mmdnrv4lq
454 xmpp2.reloaded.i2p ufeplugqot5e22kottvejlw7yq24kynw5v5faulehc6n2zs62ura
455 xmrnode.i2p xmrnode.i2p moneroti7lckp4hjrqckoq5cfi2apuyxia42sp5x7tkbzjfwqfiq moneroti7lckp4hjrqckoq5cfi2apuyxia42sp5x7tkbzjfwqfiq
456 xmrradio.i2p olwxvhwaq422rcrlmvh6wgrdczyfyeag645du4cwncutqblkfmaq
457 xn--80ahmijpip2p.i2p assist2a3jsikp7ufmzpa56mlflhi5kmoack5dm6ua5x2hbgckua
458 xn--hallchen-q4a.i2p xn--hallchen-q4a.i2p h5c4idxoweambtqajx3ecpu4iw425mfzckb4rrcvftrr7d2utfgq h5c4idxoweambtqajx3ecpu4iw425mfzckb4rrcvftrr7d2utfgq
459 xn--n3h.i2p xn--r2beng6b4e.i2p 6a5bfeil667ksrdgg5hx5x2dse2v6ovnsng3r2k5gp5tb4z67egq ag5tjs7c4skyt6gh54ebhffgxt2gof2ood4psbciv32l6mg6fzia
460 xotc.i2p xsden.i2p gqgvzum3xdgtaahkjfw3layb33vjrucmw5btyhrppm463cz3c5oq 4dofwhzlkz3k3sedwzs2sx2fudq3jfvaygffc6kp6hsawmfmz6qa
461 xx.i2p a7hrmb4kbftyk4ovr2la6azi7vjfqwt2zlckos4svoaclqu52j6a
462 yacy.idk.i2p yacy.idk.i2p 7ccyylqqxnyexz2acn3nqjdlwqmd5pororbovrarar2dkw3ddrbq 7ccyylqqxnyexz2acn3nqjdlwqmd5pororbovrarar2dkw3ddrbq
463 yellowonion.i2p 7l4kgsyatdmntck22i27oui3llftjim33ydav7kdew6ewfqvjzfa
464 yggdrasil.acetone.i2p yggdrasil.acetone.i2p tlfhgwzn4v5nlm2or5uy4leqmjbl5bncgcopbqnmcr4hbk3zrvqq tlfhgwzn4v5nlm2or5uy4leqmjbl5bncgcopbqnmcr4hbk3zrvqq
465 yoitsu.i2p yggdrasil.i2p yaaqmj55lsi5c5nukf4hsrift2zslnqkbcghwvjlaqayidtyctwa 7hhvvtephitji3ibz4vhbapj4rikoppd5324yttp6k35gkqgri3q
466 ytlibre.heckyel.i2p yggnet.i2p lfrh5ionyyqcqktuhtcnt3tshmvfwh2j5dldntiahxt7xe7xnojq deyg5puthy6tc44j56ee2zxv3wu36vlmgxjyz2zoc63w66l5ksua
467 yourdomain.i2p witqoik7gjzywta5nss5m6dvialeciismabksrukcvpfdpe6aqha
468 yt2mp3.i2p 7ai77u54gxta2ry326amfq4ugiqgcxd4r663nmxtswcwezyxsbzq
469 zab.i2p zab.i2p n4xen5sohufgjhv327ex4qra77f4tpqohlcyoa3atoboknzqazeq n4xen5sohufgjhv327ex4qra77f4tpqohlcyoa3atoboknzqazeq
470 zeronet.i2p zeronet.i2p fe6pk5sibhkr64veqxkfochdfptehyxrrbs3edwjs5ckjbjn4bna fe6pk5sibhkr64veqxkfochdfptehyxrrbs3edwjs5ckjbjn4bna
471 zog.i2p znc.str4d.i2p 7su4pwd7xicqu44rd36g2a3zjlsv2k6otommnh7ztjpyixyozq2a ufkajv3stxpxlwgwwb2ae6oixdjircnbwog77qxpxv7nt67rpcxq
472 zx.i2p 4ru5b25ixgz2wt2aqskbr2iflv42gt6ta6qet7rv4et5rh2kq6fq
473 zzz.i2p zzz.i2p lhbd7ojcaiofbfku7ixh47qj537g572zmhdc4oilvugzxdpdghua lhbd7ojcaiofbfku7ixh47qj537g572zmhdc4oilvugzxdpdghua

14
app/src/main/assets/certificates/family/stormycloud.crt

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICKDCCAc6gAwIBAgIUcPHZXtYSqGNRCD6z8gp79WUFtI0wCgYIKoZIzj0EAwIw
gZMxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEPMA0GA1UEBwwGQXVzdGlu
MRgwFgYDVQQKDA9TdG9ybXlDbG91ZCBJbmMxIzAhBgNVBAMMGnN0b3JteWNsb3Vk
LmZhbWlseS5pMnAubmV0MSQwIgYJKoZIhvcNAQkBFhVhZG1pbkBzdG9ybXljbG91
ZC5vcmcwHhcNMjIwMzE5MTU1MjU2WhcNMzIwMzE2MTU1MjU2WjCBkzELMAkGA1UE
BhMCVVMxDjAMBgNVBAgMBVRleGFzMQ8wDQYDVQQHDAZBdXN0aW4xGDAWBgNVBAoM
D1N0b3JteUNsb3VkIEluYzEjMCEGA1UEAwwac3Rvcm15Y2xvdWQuZmFtaWx5Lmky
cC5uZXQxJDAiBgkqhkiG9w0BCQEWFWFkbWluQHN0b3JteWNsb3VkLm9yZzBZMBMG
ByqGSM49AgEGCCqGSM49AwEHA0IABFUli0hvJEmowNjJVjbKEIWBJhqe973S4VdL
cJuA5yY3dC4Y998abWEox7/Y1BhnBbpJuiodA341bXKkLMXQy/kwCgYIKoZIzj0E
AwIDSAAwRQIgD12F/TfY3iV1/WDF7BSKgbD5g2MfELUIy1dtUlJQuJUCIQD69mZw
V1Z9j2x0ZsuirS3i6AMfVyTDj0RFS3U1jeHzIQ==
-----END CERTIFICATE-----

33
app/src/main/assets/certificates/reseed/echelon3_at_mail.i2p.crt

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
-----BEGIN CERTIFICATE-----
MIIFyzCCA7OgAwIBAgIRALWNWsnQ0Vmn/99iCNT7cdQwDQYJKoZIhvcNAQELBQAw
cTELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwGA1UE
ChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGjAYBgNVBAMM
EWVjaGVsb24zQG1haWwuaTJwMB4XDTIxMTEyOTE5MzU1OVoXDTMxMTEyOTE5MzU1
OVowcTELMAkGA1UEBhMCWFgxCzAJBgNVBAcTAlhYMQswCQYDVQQJEwJYWDEeMBwG
A1UEChMVSTJQIEFub255bW91cyBOZXR3b3JrMQwwCgYDVQQLEwNJMlAxGjAYBgNV
BAMMEWVjaGVsb24zQG1haWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA3pccNiQWJUS1t3QHK7rBCNKAsM2dz4szN3+3SrDy1w+rOrK8Vt5aypPU
QYUQwG+odjEPacuoRtO/W14KJl5yAI3eQS+X/cYDXmxvfm4zx5JRumYptXwJD57G
rlPHnFvk8R+Hvh+/UyqgSAZ9ZaKjEzYK4AtbYEXtopaM4U2VYN8xKjvKyWlhPdxo
kI3//qcTlSqGHHeHrkItLG1LubM1EnPu+9zI2WN2zBBRcm8ZtWqHoqFJ1zgJr/49
nMK8Lnb3I54ctva8x5+gsSk4dbG/mMsOIZekFqYJJs3+u9w5fmOYI7v9GlQr7UhE
G3MwjJ5Cj1LmLVlz/4LApZrDSd2JvwIUdGL3UW8+blaTeCPKIRvmsTeRxo1gORMF
ZH0dg39722lK7ScwOlOUX9ggzRUlYCmvnjQJZGJEUoP68QxjlQfkXZyffmMfvm6K
V6mcZ5aHMGO1lYAl40kWNJ0jGpmxJqTDhNFDEKr0TlRGVxXGWzObEOrcJ8ysRMc1
x6oXQhh79HXZcKwhZaXLx23ZvVoTfhRm4JH0SSP6XqQm35j4NI1SllEsDns29wU3
Re4wOWJCCYlPG3CtY32CinwQRoVgtiJk18W8+Pxw7sBFq8sL5L0Z+5bB6nTkBfV6
7OrZGWL0i344zQE0e3yIsLih+5Wyqw6RSSMysenl3alnUB9EvE0CAwEAAaNeMFww
DgYDVR0PAQH/BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAP
BgNVHRMBAf8EBTADAQH/MBoGA1UdDgQTBBFlY2hlbG9uM0BtYWlsLmkycDANBgkq
hkiG9w0BAQsFAAOCAgEAaUMnMYtNFBl9dFON6e4EjYo53Wknj61uIVO11dvLqjnh
7X6guPML+GgNZsPQGLu7Bqw4hVgy/cV5AlFc7SXOhzpaYo1ycpjg3Ws1VK2wrk7+
4bvUThNcS1KZVFDdRE62549rYNfYNfPxXvccOTW9meTCC1kLHerh65ySDr9J02O6
o5Mf685PgBasBH6dlosOLTtee2gRLNFcAluQYKerawS1gDys5239UNHPCqTgO+Od
FiKfl48OIOzPGLKEf4lXC+lkwZElewShrHhzd8aGueedTi0UHOtQuY7ocsofqXc8
OnyT/y2X6wn/YkzviKgfxYDSI7FJiUgXCPcT0jUNmuwR168yL5BfzoQmrCvlOOQg
P7ibdBJ6UkL8pRpv/SYpvaX/kf4agYtwh5IL9FzNCwNu54ZC6JilLUhYAU38Eolq
OZ/cGiMoSFQIeBPvB3cdsqEud9W4P+MqN5A76fMzdVV77lGsIS1eCGMceR3CjOiF
6SdAskcBZWhFiRNQweC0iv57/nPCeTCuNAqbZSHd7zC1AKhNmmsKSJUJQCGijcce
P8Gl0AFfZneN2bVEFvJ/zd71pD8ll1Gkju16bfdWn0V4NRaxFiXNr2bL+ah9blud
EXOomE3R6ow1QZk+Gnpy3wh9jfwlrJuFoANvHnv4WREbdjwr//71XjBri5p1wPE=
-----END CERTIFICATE-----

32
app/src/main/assets/certificates/reseed/echelon_at_mail.i2p.crt

@ -1,32 +0,0 @@ @@ -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-----

32
app/src/main/assets/certificates/reseed/hiduser0_at_mail.i2p.crt

@ -0,0 +1,32 @@ @@ -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-----

34
app/src/main/assets/certificates/reseed/i2p-reseed_at_mk16.de.crt

@ -0,0 +1,34 @@ @@ -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-----

32
app/src/main/assets/certificates/reseed/orignal_at_mail.i2p.crt

@ -0,0 +1,32 @@ @@ -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-----

33
app/src/main/assets/certificates/reseed/rambler_at_mail.i2p.crt

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
-----BEGIN CERTIFICATE-----
MIIFxzCCA6+gAwIBAgIQfKAV7rmoWA8jWpLfMtDQqzANBgkqhkiG9w0BAQsFADBw
MQswCQYDVQQGEwJYWDELMAkGA1UEBxMCWFgxCzAJBgNVBAkTAlhYMR4wHAYDVQQK
ExVJMlAgQW5vbnltb3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEZMBcGA1UEAwwQ
cmFtYmxlckBtYWlsLmkycDAeFw0yMTExMDYwNzEwMzJaFw0zMTExMDYwNzEwMzJa
MHAxCzAJBgNVBAYTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UECRMCWFgxHjAcBgNV
BAoTFUkyUCBBbm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRkwFwYDVQQD
DBByYW1ibGVyQG1haWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
AgEAz4vQlIdjY56uqkFKWld9Oy3E8+06Ag9fUzBVleS2bdJfaFtmEa8xz6Pep7Bb
zJK0Q9t2CW7/xqIWuspWlYn5EYAS7BFiNOX70KX4PMpltj3C4Dpxpjll9LdydU2k
FquCflXNJESnBDdd0qDRMboMf4c9lTz0mTLwAtzInLwHGDrbxEiQ/YqPgPJreOXQ
anhjkpxJcgpLR+9od8EdLNKbShVWEeSBnYp0FcjnZKOb9KC2gjqP0sWdzlw3i1hh
CB38A7a03Q4yUcmxCw4ktM60d/2jCZ+G7KHwcbkfxDjl85r0UgEzgfF7LuIuxxmA
MNLH1eAACnLTl42O72EHdtD9VWWwZF2NuFgAzT3MEFnMKDk+OqZOeZQOEgkIfrNP
O5XYMYxHSWCf/dmSq36ZJwhC40k2S9ArS8BQNY8NvwZG5CSGDU52FKaHzFn6EwLE
4CpsrptUX2itXLaFUiNMw6I+eSgTO7x+gpahZVqpdRSQXmpE0xA5jP/DwPyt3ZVe
/4q4kn3imcSCxBP5NQHWfVszsruRkh9np4R0xVlT8UCwJmY8Yg8zwJG5UddTAck5
JavDsaXgWMwcZ/qQboZKlH/iAdQnbkte8Yd5GL5nmTeS+vwuluwmA/y9kUzSUhk+
86kA0eRJ1+e2HdA1/UOTRmyIoIeQ5/fhELMXzhksLcpMGTUCAwEAAaNdMFswDgYD
VR0PAQH/BAQDAgKEMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAPBgNV
HRMBAf8EBTADAQH/MBkGA1UdDgQSBBByYW1ibGVyQG1haWwuaTJwMA0GCSqGSIb3
DQEBCwUAA4ICAQAxRdSTZGEblnNeVuRoEQq/a/6q4egFaOkzXCPKEnDzB5yvm83g
35ImquGFZkgaoc5qUAHVeBwOQrWgUI4xHPofnbM2VsgEUMz6h3ovobPNkN3+lRT5
30krd0y+A/Q895EHDu0lyf3BHMmtCWiKWQBttuc0dnmoLCRsQxgy+kYJCS/81jCM
4KNnyrtc6a/czqSq758CncjP2nErVucendsguQoA5JUw53YJ4FYHG/f9tYEkhm9C
D6u7L3vTUcMRUrRxSiJyNixH36nEwpM6DNHiPNc+CFKZ/Zx449R1GjcpDhTrXnWP
2H1r3cyKEM8a76VUEs2GQCaaglOR4N1goyqgYEjScf+/4VmARL3VUzfP8Oub70rM
t1fip5QD/4VDQuA/9C9g5Rr2nJ3K2jVnpSSKnBYFYf5z9RZdTOVXjXaEi72lWxpk
mjgK6c5EFOJxYoCaTbKX9Kz9ZIWVOVMrgHWwA/wDW+Qk5zgP9Ysau65xIp9P1RdB
qHgR5BcIrNky9RD8cIzxzMPCSMVgnf0eLFuHmG8uUl/xHHVRprf0pd7DYkQ44HWN
Z/g/gg3DaJdH7vvkShzgjt4iZrmOCHQIKkSGFRYZf0/Mpn6mgK9+grtO9osVgAQr
LBO+5LIxV/S5bcrzWQLOiMABTd2X/0PTOjuXpfinZ3rDSUiNFPq5kLLSlA==
-----END CERTIFICATE-----

31
app/src/main/assets/certificates/router/orignal_at_mail.i2p.crt

@ -1,31 +0,0 @@ @@ -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-----

8
app/src/main/assets/i2pd.conf

@ -12,7 +12,7 @@ loglevel = none @@ -12,7 +12,7 @@ loglevel = none
ipv4 = true
ipv6 = false
# ssu = true
ssu = false
bandwidth = L
# share = 100
@ -23,6 +23,10 @@ bandwidth = L @@ -23,6 +23,10 @@ bandwidth = L
[ntcp2]
enabled = true
[ssu2]
enabled = true
published = true
[http]
enabled = true
address = 127.0.0.1
@ -63,7 +67,7 @@ enabled = false @@ -63,7 +67,7 @@ enabled = false
# port = 7656
[precomputation]
elgamal = true
elgamal = false
[upnp]
enabled = true

4
app/src/main/assets/subscriptions.txt

@ -1,4 +0,0 @@ @@ -1,4 +0,0 @@
http://reg.i2p/hosts.txt
http://identiguy.i2p/hosts.txt
http://stats.i2p/cgi-bin/newhosts.txt
http://i2p-projekt.i2p/hosts.txt

109
app/src/main/java/org/purplei2p/i2pd/DaemonWrapper.java

@ -10,6 +10,7 @@ import java.io.InputStream; @@ -10,6 +10,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashSet;
import java.util.Set;
import java.util.Locale;
import android.annotation.TargetApi;
import android.content.res.AssetManager;
@ -28,9 +29,11 @@ public class DaemonWrapper { @@ -28,9 +29,11 @@ public class DaemonWrapper {
private static final String TAG = "i2pd";
private final AssetManager assetManager;
private final ConnectivityManager connectivityManager;
private String i2pdpath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd/";
private String i2pdpath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd";
private boolean assetsCopied;
private static final String appLocale = Locale.getDefault().getDisplayLanguage(Locale.ENGLISH).toLowerCase(); // lower-case system language (like "english")
public interface StateUpdateListener {
void daemonStateUpdate(State oldValue, State newValue);
}
@ -82,13 +85,12 @@ public class DaemonWrapper { @@ -82,13 +85,12 @@ public class DaemonWrapper {
}
public int getTransitTunnelsCount() {
return I2PD_JNI.GetTransitTunnelsCount();
return I2PD_JNI.getTransitTunnelsCount();
}
public enum State {
uninitialized(R.string.uninitialized),
starting(R.string.starting),
jniLibraryLoaded(R.string.jniLibraryLoaded),
startedOkay(R.string.startedOkay),
startFailed(R.string.startFailed),
gracefulShutdownInProgress(R.string.gracefulShutdownInProgress),
@ -126,7 +128,7 @@ public class DaemonWrapper { @@ -126,7 +128,7 @@ public class DaemonWrapper {
private String daemonStartResult = "N/A";
private void fireStateUpdate1(State oldValue, State newValue) {
Log.i(TAG, "daemon state change: " + state);
Log.d(TAG, "daemon state change: " + state);
for (StateUpdateListener listener : stateUpdateListeners) {
try {
listener.daemonStateUpdate(oldValue, newValue);
@ -150,8 +152,8 @@ public class DaemonWrapper { @@ -150,8 +152,8 @@ public class DaemonWrapper {
public void changeDataDir(String dataDir, Boolean updateAssets) {
I2PD_JNI.setDataDir(dataDir);
if( updateAssets ) processAssets();
//ToDo: move old dir to new dir?
if (updateAssets) processAssets();
//ToDo: move old dir to new dir?
}
public boolean isStartedOkay() {
@ -165,7 +167,6 @@ public class DaemonWrapper { @@ -165,7 +167,6 @@ public class DaemonWrapper {
} catch (Throwable tr) {
Log.e(TAG, "", tr);
}
setState(State.stopped);
}
}
@ -175,8 +176,7 @@ public class DaemonWrapper { @@ -175,8 +176,7 @@ public class DaemonWrapper {
try {
processAssets();
I2PD_JNI.loadLibraries();
setState(State.jniLibraryLoaded);
registerNetworkCallback();
//registerNetworkCallback();
} catch (Throwable tr) {
lastThrowable = tr;
setState(State.startFailed);
@ -184,7 +184,11 @@ public class DaemonWrapper { @@ -184,7 +184,11 @@ public class DaemonWrapper {
}
try {
synchronized (DaemonWrapper.this) {
I2PD_JNI.setDataDir(i2pdpath);//(Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd");
I2PD_JNI.setDataDir(i2pdpath); // (Environment.getExternalStorageDirectory().getAbsolutePath() + "/i2pd");
Log.i(TAG, "setting webconsole language to " + appLocale);
I2PD_JNI.setLanguage(appLocale);
daemonStartResult = I2PD_JNI.startDaemon();
if ("ok".equals(daemonStartResult)) {
setState(State.startedOkay);
@ -199,58 +203,51 @@ public class DaemonWrapper { @@ -199,58 +203,51 @@ public class DaemonWrapper {
}
private void processAssets() {
if (!assetsCopied) {
try {
assetsCopied = true;
File holderFile = new File(i2pdpath, "assets.ready");
String versionName = BuildConfig.VERSION_NAME; // here will be app version, like 2.XX.XX
StringBuilder text = new StringBuilder();
Log.d(TAG, "checking assets");
File holderFile = new File(i2pdpath, "assets.ready");
String versionName = BuildConfig.VERSION_NAME; // here will be app version, like 2.XX.XX
StringBuilder text = new StringBuilder();
if (holderFile.exists()) {
try { // if holder file exists, read assets version string
FileReader fileReader = new FileReader(holderFile);
if (holderFile.exists()) {
try { // if holder file exists, read assets version string
FileReader fileReader = new FileReader(holderFile);
try {
BufferedReader br = new BufferedReader(fileReader);
try {
String line;
while ((line = br.readLine()) != null) {
text.append(line);
}
}finally {
try {
BufferedReader br = new BufferedReader(fileReader);
try {
String line;
while ((line = br.readLine()) != null) {
text.append(line);
}
}finally {
try {
br.close();
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
} finally {
try {
fileReader.close();
} catch (IOException e) {
Log.e(TAG, "", e);
}
br.close();
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
} finally {
try {
fileReader.close();
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
} catch (IOException e) {
Log.e(TAG, "", e);
}
}
// if version differs from current app version or null, try to delete certificates folder
if (!text.toString().contains(versionName))
try {
boolean deleteResult = holderFile.delete();
if (!deleteResult)
Log.e(TAG, "holderFile.delete() returned " + deleteResult + ", absolute path='" + holderFile.getAbsolutePath() + "'");
File certPath = new File(i2pdpath, "certificates");
deleteRecursive(certPath);
}
catch (Throwable tr) {
Log.e(TAG, "", tr);
}
// if version differs from current app version or null, try to delete certificates folder
if (!text.toString().contains(versionName)) {
try {
boolean deleteResult = holderFile.delete();
if (!deleteResult)
Log.e(TAG, "holderFile.delete() returned " + deleteResult + ", absolute path='" + holderFile.getAbsolutePath() + "'");
File certPath = new File(i2pdpath, "certificates");
deleteRecursive(certPath);
// copy assets. If processed file exists, it won't be overwritten
copyAsset("addressbook");
@ -305,7 +302,7 @@ public class DaemonWrapper { @@ -305,7 +302,7 @@ public class DaemonWrapper {
// Make the directory.
File dir = new File(i2pdpath, path);
boolean result = dir.mkdirs();
Log.d(TAG, "dir.mkdirs() returned " + result);
Log.d(TAG, "dir.mkdirs() returned " + result + " for " + dir);
// Recurse on the contents.
for (String entry : contents) {
@ -354,7 +351,7 @@ public class DaemonWrapper { @@ -354,7 +351,7 @@ public class DaemonWrapper {
}
boolean deleteResult = fileOrDirectory.delete();
if (!deleteResult)
Log.e(TAG, "fileOrDirectory.delete() returned " + deleteResult + ", absolute path='" + fileOrDirectory.getAbsolutePath() + "'");
Log.d(TAG, "fileOrDirectory.delete() returned " + deleteResult + ", absolute path='" + fileOrDirectory.getAbsolutePath() + "'");
}
private void registerNetworkCallback(){
@ -376,14 +373,14 @@ public class DaemonWrapper { @@ -376,14 +373,14 @@ public class DaemonWrapper {
public void onAvailable(Network network) {
super.onAvailable(network);
I2PD_JNI.onNetworkStateChanged(true);
Log.i(TAG, "NetworkCallback.onAvailable");
Log.d(TAG, "NetworkCallback.onAvailable");
}
@Override
public void onLost(Network network) {
super.onLost(network);
I2PD_JNI.onNetworkStateChanged(false);
Log.i(TAG, " NetworkCallback.onLost");
Log.d(TAG, " NetworkCallback.onLost");
}
}
}

14
app/src/main/java/org/purplei2p/i2pd/ForegroundService.java

@ -1,5 +1,7 @@ @@ -1,5 +1,7 @@
package org.purplei2p.i2pd;
import static android.app.PendingIntent.FLAG_IMMUTABLE;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
@ -84,7 +86,7 @@ public class ForegroundService extends Service { @@ -84,7 +86,7 @@ public class ForegroundService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("ForegroundService", "Received start id " + startId + ": " + intent);
Log.d("ForegroundService", "Received start id " + startId + ": " + intent);
return START_STICKY;
}
@ -139,19 +141,19 @@ public class ForegroundService extends Service { @@ -139,19 +141,19 @@ public class ForegroundService extends Service {
// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this, I2PDActivity.class), 0);
new Intent(this, I2PDActivity.class),
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? FLAG_IMMUTABLE : 0);
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
String channelId = Build.VERSION.SDK_INT >= 26 ? createNotificationChannel() : "";
String channelId = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? createNotificationChannel() : "";
// Set the info for the views that show in the notification panel.
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelId)
.setOngoing(true)
.setSmallIcon(R.drawable.ic_notification_icon); // the status icon
if (Build.VERSION.SDK_INT >= 16)
builder = builder.setPriority(Notification.PRIORITY_DEFAULT);
if (Build.VERSION.SDK_INT >= 21)
builder = builder.setPriority(Notification.PRIORITY_DEFAULT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
builder = builder.setCategory(Notification.CATEGORY_SERVICE);
Notification notification = builder
.setTicker(text) // the status text

104
app/src/main/java/org/purplei2p/i2pd/I2PDActivity.java

@ -20,6 +20,7 @@ import android.net.ConnectivityManager; @@ -20,6 +20,7 @@ import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Build;
import android.os.Environment;
import android.os.IBinder;
import android.os.PowerManager;
import android.preference.PreferenceManager;
@ -27,8 +28,7 @@ import android.provider.Settings; @@ -27,8 +28,7 @@ import android.provider.Settings;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
@ -37,19 +37,20 @@ import androidx.core.app.ActivityCompat; @@ -37,19 +37,20 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import static android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS;
import static org.purplei2p.i2pd.DaemonWrapper.State.startedOkay;
import static org.purplei2p.i2pd.DaemonWrapper.State.starting;
import static org.purplei2p.i2pd.DaemonWrapper.State.stopped;
public class I2PDActivity extends Activity {
private static final String TAG = "i2pdActvt";
private static final int MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
public static final int GRACEFUL_DELAY_MILLIS = 10 * 60 * 1000;
public static final String PACKAGE_URI_SCHEME = "package:";
private Button enableButton;
private Button disableButton;
private TextView textView;
private CheckBox HTTPProxyState;
private CheckBox SOCKSProxyState;
private CheckBox BOBState;
private CheckBox SAMState;
private CheckBox I2CPState;
private static volatile DaemonWrapper daemon;
@ -65,15 +66,23 @@ public class I2PDActivity extends Activity { @@ -65,15 +66,23 @@ public class I2PDActivity extends Activity {
try {
if (textView == null)
return;
Throwable tr = daemon.getLastThrowable();
if (tr != null) {
textView.setText(throwableToString(tr));
return;
}
DaemonWrapper.State state = daemon.getState();
if(state == startedOkay){
disableButton.setVisibility(View.VISIBLE);
if (daemon.isStartedOkay()) {
HTTPProxyState.setChecked(I2PD_JNI.getHTTPProxyState());
SOCKSProxyState.setChecked(I2PD_JNI.getSOCKSProxyState());
BOBState.setChecked(I2PD_JNI.getBOBState());
SAMState.setChecked(I2PD_JNI.getSAMState());
I2CPState.setChecked(I2PD_JNI.getI2CPState());
}
String startResultStr = DaemonWrapper.State.startFailed.equals(state) ? String.format(": %s", daemon.getDaemonStartResult()) : "";
String graceStr = DaemonWrapper.State.gracefulShutdownInProgress.equals(state) ? String.format(": %s %s", formatGraceTimeRemaining(), getText(R.string.remaining)) : "";
textView.setText(String.format("%s%s%s", getText(state.getStatusStringResourceId()), startResultStr, graceStr));
@ -99,12 +108,17 @@ public class I2PDActivity extends Activity { @@ -99,12 +108,17 @@ public class I2PDActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
enableButton = findViewById(R.id.enableButton);
disableButton = findViewById(R.id.disableButton);
textView = (TextView) findViewById(R.id.textView);
textView = (TextView) findViewById(R.id.appStatusText);
HTTPProxyState = (CheckBox) findViewById(R.id.service_httpproxy_box);
SOCKSProxyState = (CheckBox) findViewById(R.id.service_socksproxy_box);
BOBState = (CheckBox) findViewById(R.id.service_bob_box);
SAMState = (CheckBox) findViewById(R.id.service_sam_box);
I2CPState = (CheckBox) findViewById(R.id.service_i2cp_box);
if (daemon == null) {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
daemon = new DaemonWrapper(getAssets(), connectivityManager);
@ -113,30 +127,17 @@ public class I2PDActivity extends Activity { @@ -113,30 +127,17 @@ public class I2PDActivity extends Activity {
daemon.addStateChangeListener(daemonStateUpdatedListener);
daemonStateUpdatedListener.daemonStateUpdate(DaemonWrapper.State.uninitialized, daemon.getState());
enableButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if( daemon.getState() != startedOkay && daemon.getState() != starting ){
daemon.stopDaemon();
daemon.startDaemon();
disableButton.setVisibility(View.VISIBLE);
}
}
});
disableButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if( daemon.getState() != stopped ){
daemon.stopDaemon();
disableButton.setVisibility(View.INVISIBLE);
}
}
});
// request permissions
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if(!Environment.isExternalStorageManager()) {
Log.e(TAG, "MANAGE_EXTERNAL_STORAGE perm declined, stopping i2pd");
i2pdStop();
}
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
}
}
@ -164,8 +165,13 @@ public class I2PDActivity extends Activity { @@ -164,8 +165,13 @@ public class I2PDActivity extends Activity {
//cancelGracefulStop0();
try {
doUnbindService();
} catch (IllegalArgumentException ex) {
Log.e(TAG, "throwable caught and ignored", ex);
if (ex.getMessage().startsWith("Service not registered: " + org.purplei2p.i2pd.I2PDActivity.class.getName())) {
Log.i(TAG, "Service not registered exception seems to be normal, not a bug it seems.");
}
} catch (Throwable tr) {
Log.e(TAG, "", tr);
Log.e(TAG, "throwable caught and ignored", tr);
}
}
@ -174,11 +180,10 @@ public class I2PDActivity extends Activity { @@ -174,11 +180,10 @@ public class I2PDActivity extends Activity {
{
if (requestCode == MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
Log.e(TAG, "WR_EXT_STORAGE perm granted");
Log.w(TAG, "WR_EXT_STORAGE perm granted");
else {
Log.e(TAG, "WR_EXT_STORAGE perm declined, stopping i2pd");
i2pdStop();
//TODO must work w/o this perm, ask orignal
}
}
}
@ -294,7 +299,7 @@ public class I2PDActivity extends Activity { @@ -294,7 +299,7 @@ public class I2PDActivity extends Activity {
return true;
case R.id.action_start_webview:
if( daemon.getState() == startedOkay)
if(daemon.isStartedOkay())
startActivity(new Intent(getApplicationContext(), WebConsoleActivity.class));
else
Toast.makeText(this,"I2Pd not was started!", Toast.LENGTH_SHORT).show();
@ -319,21 +324,22 @@ public class I2PDActivity extends Activity { @@ -319,21 +324,22 @@ public class I2PDActivity extends Activity {
}
private void onReloadTunnelsConfig() {
Log.d(TAG, "reloading tunnels");
Log.i(TAG, "reloading tunnels");
daemon.reloadTunnelsConfigs();
Toast.makeText(this, R.string.tunnels_reloading, Toast.LENGTH_SHORT).show();
}
private void i2pdStop() {
cancelGracefulStop0();
Log.i(TAG, "stopping");
textView.setText(getText(R.string.stopping));
new Thread(() -> {
Log.d(TAG, "stopping");
try {
daemon.stopDaemon();
} catch (Throwable tr) {
Log.e(TAG, "", tr);
}
quit(); //TODO make menu items for starting i2pd. On my Android, I need to reboot the OS to restart i2pd.
quit();
}, "stop").start();
}
@ -348,10 +354,10 @@ public class I2PDActivity extends Activity { @@ -348,10 +354,10 @@ public class I2PDActivity extends Activity {
Toast.makeText(this, R.string.graceful_stop_is_already_in_progress, Toast.LENGTH_SHORT).show();
return;
}
Log.i(TAG, "graceful stopping");
Toast.makeText(this, R.string.graceful_stop_is_in_progress, Toast.LENGTH_SHORT).show();
new Thread(() -> {
try {
Log.d(TAG, "graceful stopping");
if (daemon.isStartedOkay()) {
daemon.stopAcceptingTunnels();
long gracefulStopAtMillis;
@ -371,9 +377,9 @@ public class I2PDActivity extends Activity { @@ -371,9 +377,9 @@ public class I2PDActivity extends Activity {
private void cancelGracefulStop()
{
cancelGracefulStop0();
Log.i(TAG, "canceling graceful stop");
new Thread(() -> {
try {
Log.d(TAG, "canceling graceful stop");
if (daemon.isStartedOkay()) {
daemon.startAcceptingTunnels();
runOnUiThread(() -> Toast.makeText(this, R.string.shutdown_canceled, Toast.LENGTH_SHORT).show());
@ -390,7 +396,7 @@ public class I2PDActivity extends Activity { @@ -390,7 +396,7 @@ public class I2PDActivity extends Activity {
gracefulQuitTimerOld.cancel();
if (daemon.getTransitTunnelsCount() <= 0) { // no tunnels left
Log.d(TAG, "no transit tunnels left, stopping");
Log.i(TAG, "no transit tunnels left, stopping");
i2pdStop();
return;
}
@ -436,7 +442,7 @@ public class I2PDActivity extends Activity { @@ -436,7 +442,7 @@ public class I2PDActivity extends Activity {
@SuppressLint("BatteryLife")
private void openBatteryOptimizationDialogIfNeeded() {
boolean questionEnabled = getPreferences().getBoolean(getBatteryOptimizationPreferenceKey(), true);
Log.i(TAG, "BATT_OPTIM_questionEnabled==" + questionEnabled);
Log.d(TAG, "BATT_OPTIM_questionEnabled==" + questionEnabled);
if (!isKnownIgnoringBatteryOptimizations()
&& android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M
&& questionEnabled) {
@ -466,14 +472,14 @@ public class I2PDActivity extends Activity { @@ -466,14 +472,14 @@ public class I2PDActivity extends Activity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
final PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
if (pm == null) {
Log.i(TAG, "BATT_OPTIM: POWER_SERVICE==null");
Log.d(TAG, "BATT_OPTIM: POWER_SERVICE==null");
return false;
}
boolean ignoring = pm.isIgnoringBatteryOptimizations(getPackageName());
Log.i(TAG, "BATT_OPTIM: ignoring==" + ignoring);
Log.d(TAG, "BATT_OPTIM: ignoring==" + ignoring);
return ignoring;
} else {
Log.i(TAG, "BATT_OPTIM: old SDK version==" + Build.VERSION.SDK_INT);
Log.d(TAG, "BATT_OPTIM: old SDK version==" + Build.VERSION.SDK_INT);
return false;
}
}
@ -505,6 +511,6 @@ public class I2PDActivity extends Activity { @@ -505,6 +511,6 @@ public class I2PDActivity extends Activity {
} catch (Throwable tr) {
Log.e(TAG, "", tr);
}
//System.exit(0);
System.exit(0);
}
}

122
app/src/main/java/org/purplei2p/i2pd/I2PDPermsAskerActivity.java

@ -4,7 +4,11 @@ import android.Manifest; @@ -4,7 +4,11 @@ import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
@ -16,6 +20,7 @@ import java.lang.reflect.Method; @@ -16,6 +20,7 @@ import java.lang.reflect.Method;
public class I2PDPermsAskerActivity extends Activity {
private static final int PERMISSION_WRITE_EXTERNAL_STORAGE = 0;
private static final int PERMISSION_MANAGE_EXTERNAL_STORAGE = 0;
private Button button_request_write_ext_storage_perms;
private TextView textview_retry;
@ -24,7 +29,7 @@ public class I2PDPermsAskerActivity extends Activity { @@ -24,7 +29,7 @@ public class I2PDPermsAskerActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//if less than Android 6, no runtime perms req system present
if (android.os.Build.VERSION.SDK_INT < 23) {
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
startMainActivity();
return;
}
@ -48,57 +53,66 @@ public class I2PDPermsAskerActivity extends Activity { @@ -48,57 +53,66 @@ public class I2PDPermsAskerActivity extends Activity {
textview_retry.setVisibility(TextView.GONE);
button_request_write_ext_storage_perms.setVisibility(Button.GONE);
Method methodCheckPermission;
Method method_shouldShowRequestPermissionRationale;
Method method_requestPermissions;
try {
methodCheckPermission = getClass().getMethod("checkSelfPermission", String.class);
method_shouldShowRequestPermissionRationale =
getClass().getMethod("shouldShowRequestPermissionRationale", String.class);
method_requestPermissions =
getClass().getMethod("requestPermissions", String[].class, int.class);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
Integer resultObj;
try {
resultObj = (Integer) methodCheckPermission.invoke(
this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
} catch (Throwable e) {
throw new RuntimeException(e);
}
if (resultObj != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if(!Environment.isExternalStorageManager()) {
showExplanation();
} else {
startMainActivity();
}
} else {
Method methodCheckPermission;
Method method_shouldShowRequestPermissionRationale;
Method method_requestPermissions;
// Should we show an explanation?
Boolean aBoolean;
try {
aBoolean = (Boolean) method_shouldShowRequestPermissionRationale.invoke(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
} catch (Exception e) {
methodCheckPermission = getClass().getMethod("checkSelfPermission", String.class);
method_shouldShowRequestPermissionRationale =
getClass().getMethod("shouldShowRequestPermissionRationale", String.class);
method_requestPermissions =
getClass().getMethod("requestPermissions", String[].class, int.class);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
if (aBoolean) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
showExplanation();
} else {
Integer resultObj;
// No explanation needed, we can request the permission.
try {
resultObj = (Integer) methodCheckPermission.invoke(
this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
} catch (Throwable e) {
throw new RuntimeException(e);
}
if (resultObj != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
Boolean aBoolean;
try {
method_requestPermissions.invoke(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_WRITE_EXTERNAL_STORAGE);
aBoolean = (Boolean) method_shouldShowRequestPermissionRationale.invoke(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} else startMainActivity();
if (aBoolean) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
showExplanation();
} else {
// No explanation needed, we can request the permission.
try {
method_requestPermissions.invoke(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_WRITE_EXTERNAL_STORAGE);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} else startMainActivity();
}
}
@Override
@ -136,6 +150,7 @@ public class I2PDPermsAskerActivity extends Activity { @@ -136,6 +150,7 @@ public class I2PDPermsAskerActivity extends Activity {
}
private static final int SHOW_EXPLANATION_REQUEST = 1; // The request code
private static final int APP_STORAGE_ACCESS_REQUEST_CODE = 2;
private void showExplanation() {
Intent intent = new Intent(this, I2PDPermsExplanationActivity.class);
@ -144,11 +159,14 @@ public class I2PDPermsAskerActivity extends Activity { @@ -144,11 +159,14 @@ public class I2PDPermsAskerActivity extends Activity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == SHOW_EXPLANATION_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
// Request the permission
super.onActivityResult(requestCode, resultCode, data);
// Check which request we're responding to and make sure the request was successful
if (requestCode == SHOW_EXPLANATION_REQUEST && resultCode == RESULT_OK) {
// Request the permission
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Intent intentManageAccess = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.parse("package:" + BuildConfig.APPLICATION_ID));
startActivityForResult(intentManageAccess, APP_STORAGE_ACCESS_REQUEST_CODE);
} else {
Method method_requestPermissions;
try {
method_requestPermissions =
@ -163,9 +181,19 @@ public class I2PDPermsAskerActivity extends Activity { @@ -163,9 +181,19 @@ public class I2PDPermsAskerActivity extends Activity {
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} else if (requestCode == APP_STORAGE_ACCESS_REQUEST_CODE && resultCode == RESULT_OK) {
if (Environment.isExternalStorageManager()) {
startMainActivity();
} else {
finish(); //close the app
textview_retry.setText(R.string.permDenied);
textview_retry.setVisibility(TextView.VISIBLE);
button_request_write_ext_storage_perms.setVisibility(Button.VISIBLE);
finish();
}
} else {
finish(); // close the app
}
}
}

28
app/src/main/java/org/purplei2p/i2pd/I2PD_JNI.java

@ -3,33 +3,33 @@ package org.purplei2p.i2pd; @@ -3,33 +3,33 @@ package org.purplei2p.i2pd;
public class I2PD_JNI {
public static native String getABICompiledWith();
public static void loadLibraries() {
System.loadLibrary("i2pd");
}
/**
* returns error info if failed
* returns "ok" if daemon initialized and started okay
*/
public static native String startDaemon();
//should only be called after startDaemon() success
public static native void stopDaemon();
public static native void stopAcceptingTunnels();
public static native void startAcceptingTunnels();
public static native void stopAcceptingTunnels();
public static native void reloadTunnelsConfigs();
public static native void onNetworkStateChanged(boolean isConnected);
public static native void setDataDir(String jdataDir);
public static native void setLanguage(String jlanguage);
public static native int GetTransitTunnelsCount();
public static native int getTransitTunnelsCount();
public static native String getWebConsAddr();
public static native String getDataDir();
public static void loadLibraries() {
//System.loadLibrary("c++_shared");
System.loadLibrary("i2pd");
}
public static native boolean getHTTPProxyState();
public static native boolean getSOCKSProxyState();
public static native boolean getBOBState();
public static native boolean getSAMState();
public static native boolean getI2CPState();
public static native String getDataDir();
public static native void onNetworkStateChanged(boolean isConnected);
}

2
app/src/main/java/org/purplei2p/i2pd/NetworkStateChangeReceiver.java

@ -21,7 +21,7 @@ public class NetworkStateChangeReceiver extends BroadcastReceiver { @@ -21,7 +21,7 @@ public class NetworkStateChangeReceiver extends BroadcastReceiver {
I2PD_JNI.onNetworkStateChanged(isConnected);
} catch (Throwable tr) {
Log.d(TAG, "", tr);
Log.e(TAG, "", tr);
}
}
}

56
app/src/main/java/org/purplei2p/i2pd/SettingsActivity.java

@ -10,23 +10,24 @@ import android.os.Build; @@ -10,23 +10,24 @@ import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.view.MenuItem;
import android.widget.CompoundButton;
import android.widget.Switch;
import java.io.File;
import java.util.List;
import java.util.Objects;
import org.purplei2p.i2pd.iniedotr.IniEditor;
//import org.purplei2p.i2pd.iniedotr.IniEditor;
public class SettingsActivity extends Activity {
protected IniEditor iniedit = new IniEditor();
private String dataDir = DaemonWrapper.getDataDir();//for inieditor
//protected IniEditor iniedit = new IniEditor();
private String TAG = "i2pdSrvcSettings";
private File cacheDir;
public static String onBootFileName="/onBoot"; // just file, empty, if exist the do autostart, if not then no.
public static String onBootFileName = "/onBoot"; // just file, empty, if exist the do autostart, if not then no.
//https://gist.github.com/chandruark/3165a5ee3452f2b9ec7736cf1b4c5ea6
private void addAutoStartupswitch() {
private void addAutoStartupSwitch() {
try {
Intent intent = new Intent();
@ -54,7 +55,7 @@ public class SettingsActivity extends Activity { @@ -54,7 +55,7 @@ public class SettingsActivity extends Activity {
}
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (list.size() > 0) {
if (list.size() > 0) {
startActivity(intent);
}
} catch (Exception e) {
@ -62,6 +63,7 @@ public class SettingsActivity extends Activity { @@ -62,6 +63,7 @@ public class SettingsActivity extends Activity {
}
}
//@Override
private void requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@ -71,38 +73,52 @@ public class SettingsActivity extends Activity { @@ -71,38 +73,52 @@ public class SettingsActivity extends Activity {
Uri.parse("package:" + getPackageName())
);
startActivityForResult(intent, 232);
} else {
//Permission Granted-System will work
}
}
}
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
cacheDir = getApplicationContext().getCacheDir();
setContentView(R.layout.activity_settings);
Objects.requireNonNull(getActionBar()).setDisplayHomeAsUpEnabled(true);
Switch autostart_switch = findViewById(R.id.autostart_enable);
File onBoot= new File( cacheDir.getAbsolutePath()+onBootFileName);
cacheDir = getApplicationContext().getCacheDir();
File onBoot = new File(cacheDir.getAbsolutePath() + onBootFileName);
autostart_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// do something, the isChecked will be
// true if the switch is in the On position
if(isChecked){
if( !onBoot.exists() ) {
if (isChecked) {
if (!onBoot.exists()) {
requestPermission();
addAutoStartupswitch();
addAutoStartupSwitch();
try {
if( !onBoot.createNewFile()) Log.d(TAG, "Cant create new wile on: "+onBoot.getAbsolutePath());
if (!onBoot.createNewFile())
Log.d(TAG, "Cant create new wile on: "+onBoot.getAbsolutePath());
} catch (Exception e) {
Log.d(TAG, "error: " + e.toString());
Log.e(TAG, "error: " + e.toString());
}
}
}else{
if( onBoot.exists() )
} else {
if (onBoot.exists())
onBoot.delete();
}
}
});
if(onBoot.exists()) autostart_switch.setChecked(true);
if(onBoot.exists())
autostart_switch.setChecked(true);
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
return true;
}
return false;
}
}

3
app/src/main/java/org/purplei2p/i2pd/WebConsoleActivity.java

@ -8,7 +8,6 @@ import android.webkit.WebSettings; @@ -8,7 +8,6 @@ import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import java.util.Objects;
public class WebConsoleActivity extends Activity {
@ -22,7 +21,7 @@ public class WebConsoleActivity extends Activity { @@ -22,7 +21,7 @@ public class WebConsoleActivity extends Activity {
Objects.requireNonNull(getActionBar()).setDisplayHomeAsUpEnabled(true);
webView = (WebView) findViewById(R.id.webview1);
webView = (WebView) findViewById(R.id.webconsole);
webView.setWebViewClient(new WebViewClient());
final WebSettings webSettings = webView.getSettings();

6
app/src/main/res/drawable/ic_logo.xml

@ -1,8 +1,8 @@ @@ -1,8 +1,8 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="512dp"
android:height="512dp"
android:width="128dp"
android:height="128dp"
android:viewportWidth="135.46666"
android:viewportHeight="135.46667">
android:viewportHeight="135.46666">
<path
android:pathData="m94.809,2.625 l0.329,0.016 -0.167,0.593 -0.705,-0.171 -0.005,0.302 -0.532,-0.166 -0.167,-0.703 0.143,-0.461 0.533,0.145 0.288,-0.211 0.445,0.236zM92.7,3.347l0,0.142c0,0.832 0.734,1.566 1.566,1.566l0.57,0c0.636,0 1.566,-0.738 1.566,-1.281l0,-0.712c0,-0.903 -0.907,-1.566 -1.851,-1.566 -0.873,0 -1.851,0.978 -1.851,1.851z"
android:fillColor="#F1E726"/>

6
app/src/main/res/drawable/ic_notification_icon.xml

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="256dp"
android:height="256dp"
android:width="48dp"
android:height="48dp"
android:viewportWidth="67.73333"
android:viewportHeight="67.73333">
<path
@ -12,5 +12,5 @@ @@ -12,5 +12,5 @@
android:pathData="m28.237,32.0881c-0.9786,-3.1408 -6.8193,-4.4264 -15.1199,-4.7737 4.1351,5.531 8.9609,7.9108 15.1199,4.7737zM50.159,23.3911c-10.3414,-0.137 -15.6448,2.2441 -14.2333,7.982 5.5091,-0.8369 9.979,-4.1522 14.2333,-7.982zM16.6812,21.3597c2.6043,2.2517 5.2086,4.0418 7.8132,4.5568 5.297,1.7061 5.6425,5.3779 5.281,9.3305v9.3306c-0.3217,3.4969 1.857,4.0152 3.1473,2.4946 0.6986,-0.8231 2.1465,-1.8057 3.3777,-1.9377 1.8931,-0.2029 3.3969,-0.1184 2.3733,-3.2692m-5.5705,0.5424c-0.0241,-4.2433 -0.0482,-8.4866 -0.0725,-12.73M16.6089,18.3219C26.541,27.559 30.9945,26.1085 34.7671,17.0923 39.72,5.2558 49.1877,4.4588 57.1215,16.3689m-9.4048,26.7619c-4.9696,6.6991 -9.1786,18.741 -16.8254,11.1857 -1.9968,-1.9727 -1.9672,-2.5199 -8.2055,-7.6415 2.5469,1.5209 4.8048,3.3307 7.6407,4.5628 0.8114,0.3309 1.3047,0.033 2.4566,0.6863 1.0397,0.5898 1.771,0.6068 2.5286,0 1.4062,-1.1262 2.4482,-1.0302 4.6963,-1.8421 3.5633,-1.2868 5.1391,-4.634 7.7087,-6.9512zM8.1259,22.5676C3.4362,7.1294 12.9037,3.0612 19.9981,9.8293 27.2253,16.7242 28.7593,18.3597 33.8971,8.5266 42.533,-8.0016 62.8223,3.3724 60.8266,22.2781 59.1064,38.5756 55.219,53.2975 47.3619,61.7957 41.2802,68.3735 35.1735,68.7337 30.4224,62.9537 25.8932,58.755 22.0663,53.7378 18.695,48.1889 15.3714,45.2618 12.7532,40.0624 11.1664,31.5422ZM33.3926,50.5808c0.1014,-0.4791 -0.0722,-4.2248 1.5204,-0.0957m1.5285,14.3353c-2.607,-2.3561 2.1116,-3.9639 1.4121,-0.4185M53.8771,36.4639C54.0218,43.6533 51.5124,52.1936 47.7962,57.4531M42.4392,40.3723c6.1774,-3.3295 9.073,-2.4125 8.687,2.7503M15.2932,40.8065c1.5452,3.6162 6.1047,4.1223 9.4827,-1.3028M10.0255,21.7213C9.1816,8.2922 13.3214,6.1141 21.0941,16.9476 25.1871,22.652 28.8678,23.6838 32.6692,15.3563 39.433,0.5392 50.2361,1.582 57.2465,12.0746M33.682,24.2528c6.4671,-11.5489 12.2697,-16.0091 17.0008,-9.0411"
android:strokeWidth="1.32291663"
android:fillColor="#00000000"
android:strokeColor="#1f1a17"/>
android:strokeColor="#FFFFFF"/>
</vector>

146
app/src/main/res/layout/activity_main.xml

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
@ -10,17 +11,19 @@ @@ -10,17 +11,19 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:id="@+id/mainLogo"
android:layout_width="match_parent"
android:layout_height="140dp"
android:src="@drawable/ic_logo" />
android:contentDescription="@string/app_name"
android:src="@drawable/ic_logo"
tools:ignore="ImageContrastCheck" />
<TextView
android:id="@+id/textViewDesc1"
style="@android:style/Widget.Holo.Light.TextView.SpinnerItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -31,7 +34,6 @@ @@ -31,7 +34,6 @@
android:textStyle="bold" />
<TextView
android:id="@+id/textViewDesc2"
style="@android:style/Widget.Holo.Light.TextView.SpinnerItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -45,50 +47,108 @@ @@ -45,50 +47,108 @@
android:layout_width="match_parent"
android:layout_height="@dimen/margin_medium" />
<LinearLayout
<TextView
android:id="@+id/appStatusText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textAppearance="@android:style/TextAppearance.Material.Large"
android:textColor="#DFDFDF" />
<Space
android:layout_width="match_parent"
android:layout_height="@dimen/margin_medium" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:gravity="center_horizontal"
android:text="@string/services"
android:textAppearance="@android:style/TextAppearance.Material.Medium"
android:textColor="#DFDFDF" />
<RelativeLayout
android:layout_height="wrap_content"
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<TableRow
android:layout_width="match_parent"
android:layout_gravity="center">
<Button
android:id="@+id/enableButton"
style="@android:style/Widget.Button.Inset"
android:layout_width="@dimen/margin_huge"
android:layout_height="@dimen/margin_huge"
android:layout_centerInParent="true"
android:background="@android:drawable/presence_offline"
android:longClickable="true" />
<Button
android:id="@+id/disableButton"
style="@android:style/Widget.Button.Inset"
android:layout_width="@dimen/margin_huge"
android:layout_height="@dimen/margin_huge"
android:layout_centerInParent="true"
android:background="@android:drawable/presence_online"
android:longClickable="true"
android:visibility="invisible" />
</RelativeLayout>
<Space
android:layout_width="wrap_content"
android:layout_height="@dimen/margin_medium" />
<TextView
android:id="@+id/textView"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<CheckBox
android:id="@+id/service_httpproxy_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:text="@string/services_http_proxy"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textColor="#DFDFDF" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<CheckBox
android:id="@+id/service_socksproxy_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:text="@string/services_socks_proxy"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textColor="#DFDFDF" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<CheckBox
android:id="@+id/service_bob_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:text="@string/services_bob"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textColor="#DFDFDF" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<CheckBox
android:id="@+id/service_sam_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:text="@string/services_sam"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textColor="#DFDFDF" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textColor="#DFDFDF"
android:textSize="18sp" />
android:layout_height="match_parent"
android:gravity="center_horizontal">
</LinearLayout>
<CheckBox
android:id="@+id/service_i2cp_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:text="@string/services_i2cp"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:textColor="#DFDFDF" />
</TableRow>
</TableLayout>
</LinearLayout>

9
app/src/main/res/layout/activity_settings.xml

@ -3,8 +3,8 @@ @@ -3,8 +3,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/margin_medium"
android:orientation="vertical"
android:padding="@dimen/margin_medium"
tools:context=".SettingsActivity">
<TextView
@ -21,15 +21,14 @@ @@ -21,15 +21,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:textOff="@string/disabled"
android:textOn="@string/enabled"
android:text="@string/autostart_enabled" />
android:text="@string/autostart_enabled"
tools:ignore="TouchTargetSizeCheck" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?android:attr/listDivider" />
<!--
<!--
<TextView
android:id="@+id/settings_section2"
android:layout_width="match_parent"

2
app/src/main/res/layout/activity_web_console.xml

@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
android:id="@+id/swipe">
<WebView
android:id="@+id/webview1"
android:id="@+id/webconsole"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

3
app/src/main/res/menu/options_main.xml

@ -25,10 +25,11 @@ @@ -25,10 +25,11 @@
android:title="@string/action_graceful_stop" />
<item
android:id="@+id/action_settings"
android:orderInCategory="95"
android:title="@string/action_settings" />
<item
android:id="@+id/action_stop"
android:orderInCategory="99"
android:title="@string/action_stop" />
android:title="@string/action_exit" />
</group>
</menu>

112
app/src/main/res/mipmap-anydpi-v26/logo.xml

File diff suppressed because one or more lines are too long

BIN
app/src/main/res/mipmap-hdpi/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
app/src/main/res/mipmap-mdpi/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
app/src/main/res/mipmap-xhdpi/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

BIN
app/src/main/res/mipmap-xxhdpi/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
app/src/main/res/mipmap-xxxhdpi/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

46
app/src/main/res/values-cs/strings.xml

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Síť bez hranic</string>
<string name="action_start">Začít</string>
<string name="action_stop">Zastavit</string>
<string name="action_exit">Odejít</string>
<string name="action_graceful_stop">Hladké vypnutí</string>
<string name="action_cancel_graceful_stop">Zrušit hladké vypnutí</string>
<string name="action_reload_tunnels_config">Znovu načíst tunely</string>
<string name="action_start_webview">Otevřít webovou konzoli</string>
<string name="action_settings">Nastavení</string>
<string name="graceful_stop_is_already_in_progress">Hladké vypnutí již probíhá</string>
<string name="graceful_stop_is_in_progress">Hladké vypnutí právě probíhá</string>
<string name="gracefulShutdownInProgress">Hladké vypnutí právě probíhá</string>
<string name="already_stopped">Již zastaveno</string>
<string name="uninitialized">Aplikace se inicializuje...</string>
<string name="starting">Aplikace se zapíná...</string>
<string name="jniLibraryLoaded">JNI knihovny načteny</string>
<string name="startedOkay">Aplikace spuštěna</string>
<string name="startFailed">Spuštění se nezdrařilo</string>
<string name="stopped">Aplikace zastavena</string>
<string name="stopping">Aplikace se vypíná...</string>
<string name="remaining">zbývá</string>
<string name="services">Vnitřní služby</string>
<string name="services_http_proxy">HTTP Proxy</string>
<string name="services_socks_proxy">SOCKS5 Proxy</string>
<string name="title_activity_i2_pdperms_asker_prompt">Výzva</string>
<string name="permDenied">Oprávnění k zápisu na SD kartu bylo zamítnuto. Abyste mohli pokračovat, je třeba toto oprávnění povolit</string>
<string name="permRequired">Pro zápis klíčů a dalších souborů do I2PD složky na SD kartu je vyžadován přístup k SD kartě.</string>
<string name="retryPermRequest">Opakovat žádost o oprávnění k zápisu na SD kartu</string>
<string name="menu_item_battery_optimizations_str">Optimalizace baterie</string>
<string name="battery_optimizations_enabled">Optimalizace baterie je zapnutá</string>
<string name="battery_optimizations_enabled_explained">Váš Android dělá na I2PD náročné optimalizace baterie, což by mohlo vést k uzavření I2PD služby bez jediného důvodu.\nDoporučuje se povolit vypnutí optimalizace baterie.</string>
<string name="battery_optimizations_enabled_dialog">Váš Android dělá na I2PD náročné optimalizace baterie, což by mohlo vést k uzavření I2PD služby bez jediného důvodu.\n\nNyní budete požádáni o zakázání této optimalizace.</string>
<string name="continue_str">Pokračovat</string>
<string name="device_does_not_support_disabling_battery_optimizations">Vaše verze Androidu nepodporuje vypnutí optimalizace baterie</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Vaše verze Android OS nepodporuje zobrazování dialogových oken pro optimalizaci baterie pro aplikace.</string>
<string name="shutdown_canceled">Plánované vypnutí zrušeno</string>
<string name="tunnels_reloading">Obnovuji konfiguraci tunelů...</string>
<string name="settings_section0">Základní nastavení</string>
<string name="settings_section_tunnels">Tunely</string>
<string name="autostart_enabled">Spustit při spuštění systému</string>
<string name="add_tunnel_button">Přidat tunel</string>
<string name="add_tunnel">Správa tunelů</string>
<string name="del_tunnel_button">Smazat tunel</string>
</resources>

46
app/src/main/res/values-es/strings.xml

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Red sin fronteras</string>
<string name="action_start">Iniciar</string>
<string name="action_stop">Detener</string>
<string name="action_exit">Salir</string>
<string name="action_graceful_stop">Parar con gracia</string>
<string name="action_cancel_graceful_stop">Cancelar parada con gracia</string>
<string name="action_reload_tunnels_config">Recargar túneles</string>
<string name="action_start_webview">Abrir Consola Web</string>
<string name="action_settings">Ajustes</string>
<string name="graceful_stop_is_already_in_progress">La parada con gracia ya se ha iniciado</string>
<string name="graceful_stop_is_in_progress">La parada con gracia está en proceso</string>
<string name="gracefulShutdownInProgress">Apagado con gracia en proceso</string>
<string name="already_stopped">Ya se ha parado</string>
<string name="uninitialized">Inicializando aplicación...</string>
<string name="starting">Iniciando aplicación...</string>
<string name="jniLibraryLoaded">Bibliotecas JNI cargadas</string>
<string name="startedOkay">Aplicación iniciada</string>
<string name="startFailed">Error al iniciar</string>
<string name="stopped">Aplicación detenida</string>
<string name="stopping">Deteniendo aplicación...</string>
<string name="remaining">restantes</string>
<string name="services">Servicios internos</string>
<string name="services_http_proxy">Proxy HTTP</string>
<string name="services_socks_proxy">Proxy SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Permiso</string>
<string name="permDenied">Permiso de escribir a la tarjeta SD denegado, necesitas permitirlo para continuar</string>
<string name="permRequired">Se requiere acceso de escritura de la tarjeta SD para escribir las claves y otros archivos en la carpeta I2PD de la tarjeta SD.</string>
<string name="retryPermRequest">Preguntar permisos de escritura de tarjeta SD de nuevo</string>
<string name="menu_item_battery_optimizations_str">Optimizaciones de Batería</string>
<string name="battery_optimizations_enabled">Optimizaciones de batería activadas</string>
<string name="battery_optimizations_enabled_explained">Tu Android está realizando optimizaciones de batería importantes en I2PD que pueden ocasionar que el servicio se cierre sin razón.\nEs recomendable que desactives esas optimizaciones de batería.</string>
<string name="battery_optimizations_enabled_dialog">Tu Android estáTu Android está realizando optimizaciones de batería importantes en I2PD que pueden ocasionar que el servicio se cierre sin razón.\n\nSe te pedirá que las desactives.</string>
<string name="continue_str">Continuar</string>
<string name="device_does_not_support_disabling_battery_optimizations">Tu versión de Android no soporta desactivar las optimizaciones de batería</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Tu versión de S.O Android no soporta desactivar optimizaciones de batería para ciertas aplicaciones.</string>
<string name="shutdown_canceled">Apagado planeado cancelado</string>
<string name="tunnels_reloading">Recargando configuración de túneles...</string>
<string name="settings_section0">Ajustes comunes</string>
<string name="settings_section_tunnels">Túneles</string>
<string name="autostart_enabled">Iniciar al arrancar</string>
<string name="add_tunnel_button">Añadir túnel</string>
<string name="add_tunnel">Gestión de túneles</string>
<string name="del_tunnel_button">Borrar túnel</string>
</resources>

46
app/src/main/res/values-fr/strings.xml

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Réseau sans frontières</string>
<string name="action_start">Démarrer</string>
<string name="action_stop">Arrêter</string>
<string name="action_exit">Quitter</string>
<string name="action_graceful_stop">Arrêt gracieux</string>
<string name="action_cancel_graceful_stop">Annuler l\'arrêt gracieux</string>
<string name="action_reload_tunnels_config">Actualiser les tunnels</string>
<string name="action_start_webview">Ouvrir console web</string>
<string name="action_settings">Paramètres</string>
<string name="graceful_stop_is_already_in_progress">Arrêt gracieux déjà en cours</string>
<string name="graceful_stop_is_in_progress">Arrêt gracieux en cours</string>
<string name="gracefulShutdownInProgress">Fermeture gracieuse en cours</string>
<string name="already_stopped">Déjà arrêté</string>
<string name="uninitialized">Initialisation de l\'application...</string>
<string name="starting">Démarrage de l\'application...</string>
<string name="jniLibraryLoaded">Librairies JNI chargées</string>
<string name="startedOkay">Application démarrée</string>
<string name="startFailed">Démarrage échoué</string>
<string name="stopped">Application arrêtée</string>
<string name="stopping">Arrêt de l\'application...</string>
<string name="remaining">restant</string>
<string name="services">Services internes</string>
<string name="services_http_proxy">Proxy HTTP</string>
<string name="services_socks_proxy">Proxy SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Message</string>
<string name="permDenied">Permission d\'écrire sur la carte SD refusée, vous devez autoriser pour continuer</string>
<string name="permRequired">La permission d\'écrire sur la carte SD est requise pour écrire les clés et autres fichiers dans le dossier I2PD sur la carte SD.</string>
<string name="retryPermRequest">Réessayer de demander la permission d\'écrire sur la carte SD</string>
<string name="menu_item_battery_optimizations_str">Optimisations de la pile</string>
<string name="battery_optimizations_enabled">Optimisations de la pile activées</string>
<string name="battery_optimizations_enabled_explained">Votre Android fait de l\'optimisation de pile importante pour I2PD et ceci peut mener à l\'arrêt du daemon sans aucune autre raison.\nIl est recommandé d\'autoriser la désactivation de cette optimisation de pile.</string>
<string name="battery_optimizations_enabled_dialog">Votre Android fait de l\'optimisation de pile importante pour I2PD et ceci peut mener à l\'arrêt du daemon sans aucune autre raison.\n\nVous allez maintenant vous faire demander d\'autoriser la désactivation de cette optimisation.</string>
<string name="continue_str">Continuer</string>
<string name="device_does_not_support_disabling_battery_optimizations">Votre version d\'Android ne supporte pas la désactivation de l\'optimisation de pile</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Votre version d\'Android ne supporte pas l\'affichage du dialogue de l\'optimisation de pile pour les applications.</string>
<string name="shutdown_canceled">Fermeture planifiée annulée</string>
<string name="tunnels_reloading">Actualisation de la configuration des tunnels...</string>
<string name="settings_section0">Paramètres généraux</string>
<string name="settings_section_tunnels">Tunnels</string>
<string name="autostart_enabled">Lancer au démarrage</string>
<string name="add_tunnel_button">Ajouter tunnel</string>
<string name="add_tunnel">Gestion des tunnels</string>
<string name="del_tunnel_button">Supprimer tunnel</string>
</resources>

46
app/src/main/res/values-it/strings.xml

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Rete senza confini</string>
<string name="action_start">Avvia</string>
<string name="action_stop">Arresta</string>
<string name="action_exit">Esci</string>
<string name="action_graceful_stop">Interruzione controllata</string>
<string name="action_cancel_graceful_stop">Annulla interruzione controllata</string>
<string name="action_reload_tunnels_config">Ricarica i tunnel</string>
<string name="action_start_webview">Apri la console web</string>
<string name="action_settings">Impostazioni</string>
<string name="graceful_stop_is_already_in_progress">L\'interruzione controllata è già in corso</string>
<string name="graceful_stop_is_in_progress">L\'interruzione controllata è in corso</string>
<string name="gracefulShutdownInProgress">Interruzione controllata in corso</string>
<string name="already_stopped">Già interrotto</string>
<string name="uninitialized">Inizializzazione dell\'applicazione...</string>
<string name="starting">L\'applicazione si sta avviando...</string>
<string name="jniLibraryLoaded">Caricate le librerie JNI</string>
<string name="startedOkay">Applicazione avviata</string>
<string name="startFailed">Avvio fallito</string>
<string name="stopped">Applicazione arrestata</string>
<string name="stopping">Applicazione in arresto...</string>
<string name="remaining">rimanenti</string>
<string name="services">Servizi interni</string>
<string name="services_http_proxy">Proxy HTTP</string>
<string name="services_socks_proxy">Proxy SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Messaggio</string>
<string name="permDenied">Permesso di scrittura scheda SD negato, è necessario consentirlo per continuare</string>
<string name="permRequired">L\'accesso in scrittura della scheda SD è richiesto per scrivare le chiavi e gli altri file nella cartella I2PD sulla scheda SD.</string>
<string name="retryPermRequest">Riprova a richiedere il permesso di scrittura sulla scheda SD</string>
<string name="menu_item_battery_optimizations_str">Ottimizzazione batteria</string>
<string name="battery_optimizations_enabled">Ottimizzazione batteria abilitata</string>
<string name="battery_optimizations_enabled_explained">Il tuo dispositivo Android sta eseguendo alcune pesanti ottimizzazioni della batteria su I2PD che potrebbero comportare l\'arresto di quest\'ultimo senza alcun motivo.\nSi raccomanda di consentire a I2PD di disabilitare queste ottimizzazioni della batteria.</string>
<string name="battery_optimizations_enabled_dialog">Il tuo dispositivo Android sta eseguendo alcune pesanti ottimizzazioni della batteria su I2PD che potrebbero comportare l\'arresto di quest\'ultimo senza alcun motivo.\n\nOra verrà richiesto di disabilitare queste ottimizzazioni della batteria.</string>
<string name="continue_str">Continua</string>
<string name="device_does_not_support_disabling_battery_optimizations">La versione del tuo dispositivo Android non supporta l\'esclusione delle ottimizzazioni della batteria</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">La versione del tuo dispositivo Android non supporta la visualizzazione della finestra di dialogo per l\'ottimizzazione della batteria per le applicazioni.</string>
<string name="shutdown_canceled">Arresto programmato annullato</string>
<string name="tunnels_reloading">Ricaricando le configurazioni dei tunnel...</string>
<string name="settings_section0">Impostazioni generali</string>
<string name="settings_section_tunnels">Tunnel</string>
<string name="autostart_enabled">Avvia all\'accensione</string>
<string name="add_tunnel_button">Aggiungi tunnel</string>
<string name="add_tunnel">Gestione tunnel</string>
<string name="del_tunnel_button">Elimina tunnel</string>
</resources>

46
app/src/main/res/values-pt/strings.xml

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Rede sem fronteiras</string>
<string name="action_start">Iniciar</string>
<string name="action_stop">Parar</string>
<string name="action_exit">Sair</string>
<string name="action_graceful_stop">Saída Graciosa</string>
<string name="action_cancel_graceful_stop">Cancelar Saída Graciosa</string>
<string name="action_reload_tunnels_config">Recarregar túneis</string>
<string name="action_start_webview">Abrir o Web Console</string>
<string name="action_settings">Configurações</string>
<string name="graceful_stop_is_already_in_progress">Saída Graciosa já está em progresso</string>
<string name="graceful_stop_is_in_progress">Saída Graciosa em progresso</string>
<string name="gracefulShutdownInProgress">Saída Graciosa em progresso</string>
<string name="already_stopped">Já parou</string>
<string name="uninitialized">Inicializando aplicação...</string>
<string name="starting">Iniciando aplicação...</string>
<string name="jniLibraryLoaded">Bibliotecas JNI carregadas</string>
<string name="startedOkay">Aplicação iniciada</string>
<string name="startFailed">Inicialização falhou</string>
<string name="stopped">Aplicação parou</string>
<string name="stopping">Parando aplicação...</string>
<string name="remaining">faltando</string>
<string name="services">Serviços internos</string>
<string name="services_http_proxy">Proxy HTTP</string>
<string name="services_socks_proxy">Proxy SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Permissão</string>
<string name="permDenied">Permissões de escrita no cartão SD negadas, você precisa permitir isso para continuar</string>
<string name="permRequired">Permissões de escrita no cartão SD são necessárias para gravar as chaves e outros arquivos na pasta do I2PD no cartão SD.</string>
<string name="retryPermRequest">Tente novamente solicitar as permissões de escrita ao cartão SD</string>
<string name="menu_item_battery_optimizations_str">Otimizações da Bateria</string>
<string name="battery_optimizations_enabled">Otimizações da bateria ativadas</string>
<string name="battery_optimizations_enabled_explained">O seu sistema está realizando fortes otimizações de uso de bateria pelo I2PD que podem levar a fechamentos inesperados do serviço.\nÉ recomendando desativar estas otimizações de bateria.</string>
<string name="battery_optimizations_enabled_dialog">O seu sistema está realizando fortes otimizações de uso de bateria pelo I2PD que podem levar a fechamentos inesperados do serviço.\n\nVocê será solicitado a permitir desativá-las.</string>
<string name="continue_str">Continuar</string>
<string name="device_does_not_support_disabling_battery_optimizations">A sua versão do Android não suporta definir otimizações de bateria</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">A versão do seu sistema Android não suporta mostrar a caixa de diálogo para otimizações de bateria para aplicativos.</string>
<string name="shutdown_canceled">Desligamento planejado cancelado</string>
<string name="tunnels_reloading">Recarregando configurações dos túneis...</string>
<string name="settings_section0">Configurações usuais</string>
<string name="settings_section_tunnels">Túneis</string>
<string name="autostart_enabled">Iniciar no boot</string>
<string name="add_tunnel_button">Adicionar túnel</string>
<string name="add_tunnel">Gerenciamento de túneis</string>
<string name="del_tunnel_button">Exclui túnel</string>
</resources>

31
app/src/main/res/values-ru/strings.xml

@ -1,34 +1,33 @@ @@ -1,34 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_description">Invisible Internet Protocol:</string>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Сеть без границ</string>
<string name="action_start">Запустить</string>
<string name="action_stop">Остановить</string>
<string name="action_exit">Выход</string>
<string name="action_graceful_stop">Корректная остановка</string>
<string name="action_cancel_graceful_stop">Отменить корректную остановку</string>
<string name="action_reload_tunnels_config">Перезагрузить туннели</string>
<string name="action_start_webview">Открыть Веб Консоль</string>
<string name="action_settings">Настройки</string>
<string name="graceful_stop_is_already_in_progress">Корректная остановка уже запущена</string>
<string name="graceful_stop_is_in_progress">Корректная остановка запущена</string>
<string name="gracefulShutdownInProgress">Корректная остановка запущена</string>
<string name="already_stopped">Уже остановлено</string>
<string name="uninitialized">Приложение инициализируется</string>
<string name="starting">Приложение запускается</string>
<string name="uninitialized">Приложение инициализируется...</string>
<string name="starting">Приложение запускается...</string>
<string name="jniLibraryLoaded">Загружены JNI библиотеки</string>
<string name="startedOkay">Приложение запущено</string>
<string name="startFailed">Запуск не удался</string>
<string name="stopped">Приложение было остановлено</string>
<string name="stopping">Остановка приложения...</string>
<string name="remaining">осталось</string>
<string name="services">Внутренние сервисы</string>
<string name="services_http_proxy">HTTP Прокси</string>
<string name="services_socks_proxy">SOCKS5 Прокси</string>
<string name="title_activity_i2_pdperms_asker_prompt">Запрос</string>
<string name="permDenied">Права для записи на SD карту отклонены, вам необходимо предоставить их для продолжения</string>
<string name="permRequired">Права на запись на SD карту необходимы для записи ключей и других файлов в папку I2PD на внутренней памяти.</string>
<string name="retryPermRequest">Повторить запрос прав на запись на SD карту</string>
<string name="menu_item_battery_optimizations_str">Оптимизации аккумулятора</string>
<string name="battery_optimizations_enabled">Оптимизации аккумулятора включены</string>
<string name="battery_optimizations_enabled_explained">Ваша операционная система осуществляет оптимизации расхода аккумулятора, которые могут приводить к выгрузке I2PD из памяти и прекращению его работы с целью сэкономить заряд аккумулятора.\nРекомендуется отключить эти оптимизации.</string>
@ -36,20 +35,12 @@ @@ -36,20 +35,12 @@
<string name="continue_str">Продолжить</string>
<string name="device_does_not_support_disabling_battery_optimizations">Ваша версия Андроид не поддерживает отключение оптимизаций аккумулятора</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Ваша версия Андроид не поддерживает показ диалога об оптимизациях аккумулятора для приложений.</string>
<string name="shutdown_canceled">Плановая остановка отменена</string>
<string name="tunnels_reloading">Перезагрузка конфигурации туннелей...</string>
<string name="autostart_enabled">Запуск после загрузки телефона</string>
<string name="settings_section0">Основные настройки</string>
<string name="settings_section_tunnels">Туннели</string>
<string name="add_tunnel_button">Добавить</string>
<string name="autostart_enabled">Запуск после загрузки телефона</string>
<string name="add_tunnel_button">Добавить туннель</string>
<string name="add_tunnel">Управление туннелями</string>
<string name="del_tunnel_button">Удалить</string>
<string name="enabled">Вкл</string>
<string name="disabled">Выкл</string>
<string name="del_tunnel_button">Удалить туннель</string>
</resources>

46
app/src/main/res/values-tr/strings.xml

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Sınırları olmayan ağ</string>
<string name="action_start">Başlat</string>
<string name="action_stop">Durdur</string>
<string name="action_exit">Çık</string>
<string name="action_graceful_stop">Düzgün durdur</string>
<string name="action_cancel_graceful_stop">Düzgün durdurmayı İptal Et</string>
<string name="action_reload_tunnels_config">Tünelleri yeniden yükle</string>
<string name="action_start_webview">Web Konsolunu Aç</string>
<string name="action_settings">Ayarlar</string>
<string name="graceful_stop_is_already_in_progress">Düzgün durdurma zaten devam ediyor</string>
<string name="graceful_stop_is_in_progress">Düzgün durdurma devam ediyor</string>
<string name="gracefulShutdownInProgress">Düzgün kapatma devam ediyor</string>
<string name="already_stopped">Zaten durduruldu</string>
<string name="uninitialized">Uygulama ilk ayarları yapılıyor...</string>
<string name="starting">Uygulama başlatılıyor...</string>
<string name="jniLibraryLoaded">JNI kütüphaneleri yüklendi</string>
<string name="startedOkay">Uygulama başlatıldı</string>
<string name="startFailed">Başlatılamadı</string>
<string name="stopped">Uygulama durduruldu</string>
<string name="stopping">Uygulama durduruluyor...</string>
<string name="remaining">kalan</string>
<string name="services">İç servisler</string>
<string name="services_http_proxy">HTTP Proxy</string>
<string name="services_socks_proxy">SOCKS5 Proxy</string>
<string name="title_activity_i2_pdperms_asker_prompt">Bilgi</string>
<string name="permDenied">SD karta yazma izni reddedildi, devam etmek için buna izin vermeniz gerekiyor</string>
<string name="permRequired">Anahtarları ve diğer dosyaları SD karttaki I2PD klasörüne yazmak için SD karta yazma erişimi gereklidir.</string>
<string name="retryPermRequest">SD karta yazma izinlerini istemeyi yeniden dene</string>
<string name="menu_item_battery_optimizations_str">Pil İyileştirmeleri</string>
<string name="battery_optimizations_enabled">Pil iyileştirmeleri etkin</string>
<string name="battery_optimizations_enabled_explained">Android aygıtınız, I2PD üzerinde başka bir neden olmaksızın arka plan programının kapanmasına neden olabilecek bazı ağır pil iyileştirmeleri yapıyor.\nBu pil iyileştirmelerinin devre dışı bırakılmasına izin verilmesi tavsiye edilir.</string>
<string name="battery_optimizations_enabled_dialog">Android aygıtınız, I2PD üzerinde başka bir neden olmaksızın arka plan programının kapanmasına neden olabilecek bazı ağır pil iyileştirmeleri yapıyor.\n\nŞimdi bunları devre dışı bırakmaya izin vermeniz istenecek.</string>
<string name="continue_str">Devam et</string>
<string name="device_does_not_support_disabling_battery_optimizations">Android sürümünüz pil iyileştirmelerini devre dışı bırakmayı desteklemiyor</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Android işletim sistemi sürümünüz, uygulamalar için pil iyileştirmeleri iletişim kutusunun gösterilmesini desteklemiyor.</string>
<string name="shutdown_canceled">Zamanlanan kapatma iptal edildi</string>
<string name="tunnels_reloading">Tünel yapılandırması yeniden yükleniyor...</string>
<string name="settings_section0">Ortak ayarlar</string>
<string name="settings_section_tunnels">Tüneller</string>
<string name="autostart_enabled">Önyüklemede başlat</string>
<string name="add_tunnel_button">Tünel ekle</string>
<string name="add_tunnel">Tünel yönetimi</string>
<string name="del_tunnel_button">Tünelis is</string>
</resources>

46
app/src/main/res/values-uk/strings.xml

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Мережа без кордонів</string>
<string name="action_start">Почати</string>
<string name="action_stop">Зупинити</string>
<string name="action_exit">Вийти</string>
<string name="action_graceful_stop">Плавна зупинка</string>
<string name="action_cancel_graceful_stop">Скасувати плавну зупинку</string>
<string name="action_reload_tunnels_config">Перезавантажити тунелі</string>
<string name="action_start_webview">Відкрити веб-консоль</string>
<string name="action_settings">Налаштування</string>
<string name="graceful_stop_is_already_in_progress">Плавна зупинка вже виконується</string>
<string name="graceful_stop_is_in_progress">Плавна зупинка у процесі</string>
<string name="gracefulShutdownInProgress">Виконується плавне завершення</string>
<string name="already_stopped">Вже зупинено</string>
<string name="uninitialized">Додаток запускається...</string>
<string name="starting">Додаток запускається...</string>
<string name="jniLibraryLoaded">Завантажено бібліотеки JNI</string>
<string name="startedOkay">Запуск додатку</string>
<string name="startFailed">Не вдалося запустити</string>
<string name="stopped">Додаток зупинено</string>
<string name="stopping">Додаток зупиняється...</string>
<string name="remaining">залишилось</string>
<string name="services">Внутрішні служби</string>
<string name="services_http_proxy">Проксі HTTP</string>
<string name="services_socks_proxy">Проксі SOCKS5</string>
<string name="title_activity_i2_pdperms_asker_prompt">Запит</string>
<string name="permDenied">Дозвіл на запис до SD-карти відхилений, Вам необхідно дозволити для продовження</string>
<string name="permRequired">Для запису ключів та інших файлів до теки I2PD на SD-карті потрібен доступ до передачі даних на SD-карті.</string>
<string name="retryPermRequest">Повторити запит на запис до SD-карти</string>
<string name="menu_item_battery_optimizations_str">Оптимізація батареї</string>
<string name="battery_optimizations_enabled">Оптимізацію батареї ввімкнено</string>
<string name="battery_optimizations_enabled_explained">Ваш Android виконує деякі складні оптимізації використання заряду на I2PD, які можуть призвести до встановлення демонів без будь-яких інших причин.\nРекомендується дозволити вимкнення цих оптимізації використання акумулятора.</string>
<string name="battery_optimizations_enabled_dialog">Ваш Android виконує деякі складні оптимізації використання заряду на I2PD, які можуть призвести до встановлення демонів без будь-яких інших причин.\n\nРекомендується дозволити вимкнення цих оптимізації використання акумулятора.</string>
<string name="continue_str">Далі</string>
<string name="device_does_not_support_disabling_battery_optimizations">Ваш пристрій не підтримує відключення оптимізації батареї</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Ваша версія ОС Android не підтримує відображення діалогу для оптимізації заряду акумулятора для програм.</string>
<string name="shutdown_canceled">Плановане завершення скасоване</string>
<string name="tunnels_reloading">Перезавантаження налаштувань тунелів...</string>
<string name="settings_section0">Загальні налаштування</string>
<string name="settings_section_tunnels">Тунелі</string>
<string name="autostart_enabled">Автозапуск</string>
<string name="add_tunnel_button">Додайте тунель</string>
<string name="add_tunnel">Керування тунелями</string>
<string name="del_tunnel_button">Видалити тунель</string>
</resources>

46
app/src/main/res/values-uz/strings.xml

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">Chegarasiz tarmoq</string>
<string name="action_start">Boshlash</string>
<string name="action_stop">To\'xtatish</string>
<string name="action_exit">Chiqish</string>
<string name="action_graceful_stop">Yumshoq to\'xtatish</string>
<string name="action_cancel_graceful_stop">Yumshoq to\'xtatish bekor qilish</string>
<string name="action_reload_tunnels_config">Tunnellarni qayta yuklash</string>
<string name="action_start_webview">Veb-konsolni ochish</string>
<string name="action_settings">Sozlamalar</string>
<string name="graceful_stop_is_already_in_progress">Yumshoq to\'xtatish allaqachon amalga oshirilmoqda</string>
<string name="graceful_stop_is_in_progress">Yumshoq to\'xtatish amalga oshirilmoqda</string>
<string name="gracefulShutdownInProgress">Yumshoq to\'xtatish amalga oshirilmoqda</string>
<string name="already_stopped">Allaqachon to\'xtatilgan</string>
<string name="uninitialized">Ilova ishga tushiriladi...</string>
<string name="starting">Ilova ishga tushmoqda...</string>
<string name="jniLibraryLoaded">JNI kutubxonalari yuklangan</string>
<string name="startedOkay">Ilova ishga tushirildi</string>
<string name="startFailed">Ishga tushirish muvaffaqiyatsiz tugadi</string>
<string name="stopped">Ilova toʻxtatildi</string>
<string name="stopping">Ilova toʻxtatilmoqda...</string>
<string name="remaining">qoldi</string>
<string name="services">Ichki xizmatlar</string>
<string name="services_http_proxy">HTTP proksi</string>
<string name="services_socks_proxy">SOCKS5 proksi</string>
<string name="title_activity_i2_pdperms_asker_prompt">So\'rov</string>
<string name="permDenied">SD kartaga yozish ruxsati rad etildi, buni davom ettirishga ruxsat berishingiz kerak</string>
<string name="permRequired">Kalitlarni va boshqa fayllarni SD-kartadagi I2PD jildiga yozish uchun SD kartaga yozish huquqi talab qilinadi.</string>
<string name="retryPermRequest">Endi sizdan ularni o\'chirishga ruxsat berish so\'raladi</string>
<string name="menu_item_battery_optimizations_str">Batareyani optimallashtirish</string>
<string name="battery_optimizations_enabled">Batareya optimallashtirishi yoqilgan</string>
<string name="battery_optimizations_enabled_explained">Sizning Androidingiz I2PD-da batareyani kuchli optimallashtirishni amalga oshirmoqda, bu boshqa sababsiz demonning yopilishiga olib kelishi mumkin.\nUshbu batareyani optimallashtirishni o\'chirishga ruxsat berish tavsiya etiladi.</string>
<string name="battery_optimizations_enabled_dialog">Sizning Androidingiz I2PD-da batareyani kuchli optimallashtirishni amalga oshirmoqda, bu boshqa sababsiz demonning yopilishiga olib kelishi mumkin.\n\nEndi sizdan ularni o\'chirishga ruxsat berish so\'raladi.</string>
<string name="continue_str">Davom etish</string>
<string name="device_does_not_support_disabling_battery_optimizations">Sizning Android versiyangiz batareyani optimallashtirishdan voz kechishni qo\'llab-quvvatlamaydi</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">Sizning Android OS versiyangiz ilovalar uchun batareyani optimallashtirish dialogini ko\'rsatishni qo\'llab-quvvatlamaydi.</string>
<string name="shutdown_canceled">Rejalashtirilgan yumshoq o\'chirish bekor qilindi</string>
<string name="tunnels_reloading">Tunnellar konfiguratsiyalari qayta yuklanmoqda...</string>
<string name="settings_section0">Umumiy sozlamalar</string>
<string name="settings_section_tunnels">Tunnellar</string>
<string name="autostart_enabled">Avtomatik ishga tushirish</string>
<string name="add_tunnel_button">Tunnelni qo\'shish</string>
<string name="add_tunnel">Tunnellarni boshqarish</string>
<string name="del_tunnel_button">Tunnelni o\'chirish</string>
</resources>

46
app/src/main/res/values-zh-rCN/strings.xml

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_description2">网络无国界</string>
<string name="action_start">开始运行</string>
<string name="action_stop">停止运行</string>
<string name="action_exit">退出</string>
<string name="action_graceful_stop">平滑关闭</string>
<string name="action_cancel_graceful_stop">取消平滑关闭</string>
<string name="action_reload_tunnels_config">重新加载隧道</string>
<string name="action_start_webview">打开网页控制台</string>
<string name="action_settings">设置</string>
<string name="graceful_stop_is_already_in_progress">已经平滑退出了 I2P 网络</string>
<string name="graceful_stop_is_in_progress">正在平滑退出</string>
<string name="gracefulShutdownInProgress">正在平滑关闭 剩余时间:</string>
<string name="already_stopped">已停止</string>
<string name="uninitialized">I2Pd 正在初始化...</string>
<string name="starting">I2Pd 正在启动...</string>
<string name="jniLibraryLoaded">已加载Java本地接口库</string>
<string name="startedOkay">I2Pd 已启动</string>
<string name="startFailed">I2Pd 启动失败</string>
<string name="stopped">I2Pd 已停止运行</string>
<string name="stopping">I2Pd 正在停止运行...</string>
<string name="remaining">分钟</string>
<string name="services">内部服务</string>
<string name="services_http_proxy">HTTP 代理</string>
<string name="services_socks_proxy">SOCKS5 代理</string>
<string name="title_activity_i2_pdperms_asker_prompt">需要权限</string>
<string name="permDenied">无法获得 SD 卡写入权限,你需要允许它以继续</string>
<string name="permRequired">需要SD卡写入权限才能将密钥和其他文件写入SD卡上的 I2PD 文件夹中。</string>
<string name="retryPermRequest">尝试重新获取储存权限</string>
<string name="menu_item_battery_optimizations_str">电池优化</string>
<string name="battery_optimizations_enabled">电池优化已启用</string>
<string name="battery_optimizations_enabled_explained">您的安卓设备正在对 I2Pd 使用严格的电池优化策略,这可能导致I2Pd无缘无故停止运行。\n建议关闭电池优化。</string>
<string name="battery_optimizations_enabled_dialog">您的安卓设备正在对 I2Pd 进行严格的电池优化,这可能导致守护进程无缘无故停止运行。\n\n请点击继续以关闭电池优化。</string>
<string name="continue_str">继续</string>
<string name="device_does_not_support_disabling_battery_optimizations">您设备的 Android 版本不支持关闭电池优化</string>
<string name="os_version_does_not_support_battery_optimizations_show_os_dialog_api">您设备的 Android 版本不支持打开电池优化的界面。</string>
<string name="shutdown_canceled">计划关闭已取消</string>
<string name="tunnels_reloading">正在重新加载隧道配置...</string>
<string name="settings_section0">通用设置</string>
<string name="settings_section_tunnels">隧道</string>
<string name="autostart_enabled">开机自启</string>
<string name="add_tunnel_button">添加隧道</string>
<string name="add_tunnel">隧道管理</string>
<string name="del_tunnel_button">删除隧道</string>
</resources>

17
app/src/main/res/values/preferences_i2pd_options.xml

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="pref_bandwidth_limit_flags">
<item>L</item>
<item>O</item>
<item>P</item>
<item>X</item>
</string-array>
<string-array name="pref_loglevel">
<item>none</item>
<item>error</item>
<item>warn</item>
<item>info</item>
<item>debug</item>
</string-array>
</resources>

23
app/src/main/res/values/strings.xml

@ -1,13 +1,14 @@ @@ -1,13 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name" translatable="false">i2pd</string>
<string name="app_description">Invisible Internet Protocol:</string>
<string name="app_description" translatable="false">Invisible Internet Protocol:</string>
<string name="app_description2">Network without borders</string>
<string name="action_start">Start</string>
<string name="action_stop">Stop</string>
<string name="action_graceful_stop">Graceful Stop</string>
<string name="action_cancel_graceful_stop">Cancel Graceful Stop</string>
<string name="action_exit">Exit</string>
<string name="action_graceful_stop">Graceful stop</string>
<string name="action_cancel_graceful_stop">Cancel Graceful stop</string>
<string name="action_reload_tunnels_config">Reload tunnels</string>
<string name="action_start_webview">Open Web Console</string>
<string name="action_settings">Settings</string>
@ -17,15 +18,23 @@ @@ -17,15 +18,23 @@
<string name="gracefulShutdownInProgress">Graceful shutdown in progress</string>
<string name="already_stopped">Already stopped</string>
<string name="uninitialized">Application initializing</string>
<string name="starting">Application starting</string>
<string name="uninitialized">Application initializing...</string>
<string name="starting">Application starting...</string>
<string name="jniLibraryLoaded">Loaded JNI libraries</string>
<string name="startedOkay">Application Started</string>
<string name="startedOkay">Application started</string>
<string name="startFailed">Start failed</string>
<string name="stopped">Application stopped</string>
<string name="stopping">Application stopping...</string>
<string name="remaining">remaining</string>
<string name="ok" translatable="false">OK</string>
<string name="services">Internal services</string>
<string name="services_http_proxy">HTTP Proxy</string>
<string name="services_socks_proxy">SOCKS5 Proxy</string>
<string name="services_bob" translatable="false">BOB</string>
<string name="services_sam" translatable="false">SAM</string>
<string name="services_i2cp" translatable="false">I2CP</string>
<string name="title_activity_i2_pdperms_asker_prompt">Prompt</string>
<string name="permDenied">SD card write permission denied, you need to allow this to continue</string>
<string name="permRequired">SD card write access is required to write the keys and other files to the I2PD folder on SD card.</string>
@ -51,7 +60,5 @@ @@ -51,7 +60,5 @@
<string name="add_tunnel">Tunnels management</string>
<string name="del_tunnel_button">Delete tunnel</string>
<string name="enabled">On</string>
<string name="disabled">Off</string>
</resources>

193
app/src/main/res/xml/preferences_i2pd.xml

@ -0,0 +1,193 @@ @@ -0,0 +1,193 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Main">
<CheckBoxPreference
android:defaultValue="true"
android:key="check_box_preference_1"
android:title="Log" />
<ListPreference
android:defaultValue="1"
android:entries="@array/pref_loglevel"
android:entryValues="@array/pref_loglevel"
android:key="list_preference_1"
android:summary="Logging level to file. Use 'none' to reduce memory usage"
android:title="Log level" />
<CheckBoxPreference
android:defaultValue="true"
android:key="check_box_preference_1"
android:title="IPv4" />
<CheckBoxPreference
android:defaultValue="false"
android:key="check_box_preference_1"
android:title="IPv6" />
<EditTextPreference
android:defaultValue="Default value"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Port" />
<ListPreference
android:entries="@array/pref_bandwidth_limit_flags"
android:entryValues="@array/pref_bandwidth_limit_flags"
android:key="list_preference_1"
android:summary="Bandwidth limit for transit traffic"
android:title="Bandwidth" />
<CheckBoxPreference
android:defaultValue="false"
android:key="check_box_preference_1"
android:summary="Disable transit"
android:title="No transit" />
<CheckBoxPreference
android:defaultValue="false"
android:key="check_box_preference_1"
android:summary="Uses more battery"
android:title="Floodfill" />
<CheckBoxPreference
android:defaultValue="true"
android:key="check_box_preference_1"
android:title="SSU" />
</PreferenceCategory>
<PreferenceCategory android:title="NTCP2">
<CheckBoxPreference
android:defaultValue="true"
android:key="check_box_preference_1"
android:title="Enable" />
<CheckBoxPreference
android:defaultValue="true"
android:key="check_box_preference_1"
android:summary="Disable to make unable to connect to your device"
android:title="Publish" />
</PreferenceCategory>
<PreferenceCategory android:title="Web Console">
<CheckBoxPreference
android:defaultValue="true"
android:key="check_box_preference_1"
android:title="Enable" />
<EditTextPreference
android:defaultValue="127.0.0.1"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Address" />
<EditTextPreference
android:defaultValue="7070"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Port" />
<CheckBoxPreference
android:defaultValue="false"
android:key="check_box_preference_1"
android:summary="Use HTTP authorization to access Web Console"
android:title="Autorization" />
<EditTextPreference
android:defaultValue="Default value"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="User" />
<EditTextPreference
android:defaultValue="Default value"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Password" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/services_http_proxy">
<CheckBoxPreference
android:defaultValue="true"
android:key="check_box_preference_1"
android:title="Enable" />
<EditTextPreference
android:defaultValue="127.0.0.1"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Address" />
<EditTextPreference
android:defaultValue="4444"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Port" />
<EditTextPreference
android:defaultValue="proxy-keys.dat"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Keys" />
</PreferenceCategory>
<PreferenceCategory android:title="SOCKS Proxy">
<CheckBoxPreference
android:defaultValue="false"
android:key="check_box_preference_1"
android:title="Enable" />
<EditTextPreference
android:defaultValue="127.0.0.1"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Address" />
<EditTextPreference
android:defaultValue="4447"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Port" />
<EditTextPreference
android:defaultValue="proxy-keys.dat"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Keys" />
</PreferenceCategory>
<PreferenceCategory android:title="SAM">
<CheckBoxPreference
android:defaultValue="false"
android:key="check_box_preference_1"
android:title="Enable" />
<EditTextPreference
android:defaultValue="127.0.0.1"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Address" />
<EditTextPreference
android:defaultValue="7656"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Port" />
</PreferenceCategory>
<PreferenceCategory android:title="UPnP">
<CheckBoxPreference
android:defaultValue="true"
android:key="check_box_preference_1"
android:title="Enable" />
<EditTextPreference
android:defaultValue="I2Pd"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="Forwarding name" />
</PreferenceCategory>
<PreferenceCategory android:title="Limits">
<EditTextPreference
android:defaultValue="50"
android:key="edit_text_preference_1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:summary="Limit possible built transit tunnels"
android:title="Transit tunnels" />
</PreferenceCategory>
</PreferenceScreen>

80
binary/jni/Android.mk

@ -0,0 +1,80 @@ @@ -0,0 +1,80 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := i2pd
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_C_INCLUDES += $(IFADDRS_PATH) $(LIB_SRC_PATH) $(LIB_CLIENT_SRC_PATH) $(LANG_SRC_PATH) $(DAEMON_SRC_PATH)
LOCAL_STATIC_LIBRARIES := \
boost_system \
boost_date_time \
boost_filesystem \
boost_program_options \
crypto \
ssl \
miniupnpc
LOCAL_LDLIBS := -lz
LOCAL_SRC_FILES := \
$(IFADDRS_PATH)/ifaddrs.cpp \
$(IFADDRS_PATH)/bionic_netlink.cpp \
$(wildcard $(LIB_SRC_PATH)/*.cpp) \
$(wildcard $(LIB_CLIENT_SRC_PATH)/*.cpp) \
$(wildcard $(LANG_SRC_PATH)/*.cpp) \
$(DAEMON_SRC_PATH)/UnixDaemon.cpp \
$(DAEMON_SRC_PATH)/Daemon.cpp \
$(DAEMON_SRC_PATH)/UPnP.cpp \
$(DAEMON_SRC_PATH)/HTTPServer.cpp \
$(DAEMON_SRC_PATH)/I2PControl.cpp \
$(DAEMON_SRC_PATH)/I2PControlHandlers.cpp \
$(DAEMON_SRC_PATH)/i2pd.cpp \
include $(BUILD_EXECUTABLE)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_system
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_date_time
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_date_time.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_filesystem
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_filesystem.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := boost_program_options
LOCAL_SRC_FILES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/lib/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(BOOST_PATH)/build/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/lib/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(OPENSSL_PATH)/out/$(TARGET_ARCH_ABI)/include
LOCAL_STATIC_LIBRARIES := crypto
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := miniupnpc
LOCAL_SRC_FILES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/lib/libminiupnpc.a
LOCAL_EXPORT_C_INCLUDES := $(MINIUPNP_PATH)/miniupnpc/out/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_STATIC_LIBRARY)

34
binary/jni/Application.mk

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
APP_ABI += all
#APP_ABI += arm64-v8a
#APP_ABI += armeabi-v7a
#APP_ABI += x86_64
#APP_ABI += x86
APP_PLATFORM := android-16
#APP_PLATFORM := android-21
NDK_TOOLCHAIN_VERSION := clang
APP_STL := c++_static
# Enable c++17 extensions in source code
APP_CPPFLAGS += -std=c++17 -fexceptions -frtti
APP_CPPFLAGS += -DANDROID_BINARY -DANDROID -D__ANDROID__ -DUSE_UPNP -Wno-deprecated-declarations
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
APP_CPPFLAGS += -DANDROID_ARM7A
endif
APP_LDFLAGS += -fPIE
IFADDRS_PATH = $(NDK_MODULE_PATH)/android-ifaddrs
BOOST_PATH = $(NDK_MODULE_PATH)/boost
MINIUPNP_PATH = $(NDK_MODULE_PATH)/miniupnp
OPENSSL_PATH = $(NDK_MODULE_PATH)/openssl
# don't change me
I2PD_SRC_PATH = $(NDK_MODULE_PATH)/i2pd
LIB_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd
LIB_CLIENT_SRC_PATH = $(I2PD_SRC_PATH)/libi2pd_client
LANG_SRC_PATH = $(I2PD_SRC_PATH)/i18n
DAEMON_SRC_PATH = $(I2PD_SRC_PATH)/daemon

1
binary/jni/android-ifaddrs

@ -0,0 +1 @@ @@ -0,0 +1 @@
../../app/jni/android-ifaddrs

1
binary/jni/boost

@ -0,0 +1 @@ @@ -0,0 +1 @@
../../app/jni/boost

1
binary/jni/build_boost.sh

@ -0,0 +1 @@ @@ -0,0 +1 @@
../../app/jni/build_boost.sh

1
binary/jni/build_miniupnpc.sh

@ -0,0 +1 @@ @@ -0,0 +1 @@
../../app/jni/build_miniupnpc.sh

1
binary/jni/build_openssl.sh

@ -0,0 +1 @@ @@ -0,0 +1 @@
../../app/jni/build_openssl.sh

1
binary/jni/i2pd

@ -0,0 +1 @@ @@ -0,0 +1 @@
../../app/jni/i2pd

1
binary/jni/miniupnp

@ -0,0 +1 @@ @@ -0,0 +1 @@
../../app/jni/miniupnp

1
binary/jni/openssl

@ -0,0 +1 @@ @@ -0,0 +1 @@
../../app/jni/openssl

6
build.gradle

@ -1,17 +1,17 @@ @@ -1,17 +1,17 @@
buildscript {
repositories {
jcenter()
mavenCentral()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.android.tools.build:gradle:7.3.1'
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}

2
contrib/binary_pack/.gitignore vendored

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
archive
i2pd_*_android_binary.zip

53
contrib/binary_pack/build-archive

@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
#!/bin/bash
# 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
GITDESC=$(git describe --tags)
declare -A ABILIST=(
["armeabi-v7a"]="armv7l"
["arm64-v8a"]="aarch64"
["x86"]="x86"
["x86_64"]="x86_64"
)
# Remove old files and archives
if [ -d "archive" ]; then
rm -r archive
fi
if [ -f "../i2pd_*_android_binary.zip" ]; then
rm i2pd_*_android_binary.zip
fi
# Prepare files for package
mkdir archive
if [ ! -d "../../binary/libs/" ]; then
echo "Prebuilt binaries folder is not found. Have you built them?"
exit 1
fi
for ABI in "${!ABILIST[@]}"; do
if [ -f "../../binary/libs/${ABI}/i2pd" ]; then
cp ../../binary/libs/${ABI}/i2pd archive/i2pd-${ABILIST[$ABI]}
fi
done
cp i2pd archive/i2pd
cp -rH ../../app/src/main/assets/certificates archive/
cp -rH ../../app/src/main/assets/tunnels.d archive/
cp -H ../../app/src/main/assets/i2pd.conf archive/
cp -H ../../app/src/main/assets/tunnels.conf archive/
# Compress files
cd archive
zip -r6 ../i2pd_${GITDESC}_android_binary.zip .
# Remove temporary folder
cd ..
rm -r archive

33
contrib/binary_pack/i2pd

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
#!/bin/sh
# Copyright (c) 2013-2020, 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
#
# That script written for use with Termux.
# https://stackoverflow.com/a/246128
SOURCE="${0}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
arch=$(uname -m)
screenfind=$(which screen)
if [ -z $screenfind ]; then
echo "Can't find 'screen' installed. That script needs it!";
exit 1;
fi
if [ -z i2pd-$arch ]; then
echo "Can't find i2pd binary for your architecture.";
exit 1;
fi
screen -AmdS i2pd ./i2pd-$arch --datadir=$DIR

28
contrib/fix_boost.sh

@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
for lib_dir in */lib/
do
#echo $lib_dir
pushd `pwd`/$lib_dir
ls
for file in *
do
echo "~~~~FILE~~~~"
echo $file
tmp=(```echo $file | sed "s/-/ /"```)
newFileName=${tmp[0]}.a
echo "we will copy $file to $newFileName"
cp $file $newFileName
done
popd
done
for include_dir in */include
do
#echo $lib_dir
pushd `pwd`/$include_dir
ls
for file in *
do
mv $file/boost boost
done
popd
done

9
fastlane/metadata/android/cs/full_description.txt

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<b>I2P</b> (Invisible Internet Protocol) je univerzální anonymní síťová vrstva.
Veškerá komunikace přes I2P je anonymní a end-to-end šifrována, účastníci neodhalí své skutečné IP adresy.
<b>I2P klient</b> je software používaný pro vytváření a používání anonymních I2P sítí.
Tyto sítě se běžně používají pro anonymní aplikace typu peer-to-peer (sdílení souborů, kryptoměny) a anonymní aplikace typu klient-server (webové stránky, instantní messengery, chat-servery).
<b>I2P</b> umožňuje lidem z celého světa komunikovat a sdílet informace bez omezení.
Pro více informací o <b>I2P</b> si můžete přečíst <a href="https://en.m.wikipedia.org/wiki/I2P">článek na Wikipedii</a>.

1
fastlane/metadata/android/cs/short_description.txt

@ -0,0 +1 @@ @@ -0,0 +1 @@
Kompletní C++ implementace I2P klienta

2
fastlane/metadata/android/en-US/changelogs/23700.txt

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
* Updated codebase to 2.37.0
* Changes in main activity

2
fastlane/metadata/android/en-US/changelogs/23800.txt

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
* Updated codebase to 2.38.0
* Fix launch on devices with API < 21

1
fastlane/metadata/android/en-US/changelogs/23900.txt

@ -0,0 +1 @@ @@ -0,0 +1 @@
* Updated codebase to 2.39.0

2
fastlane/metadata/android/en-US/changelogs/24000.txt

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
* Updated codebase to 2.40.0
* Disabled Network state changes listener (sometimes android not sends notifications, so application thinks that internet is not available)

6
fastlane/metadata/android/en-US/changelogs/24100.txt

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
* Updated codebase to 2.41.0
* Switch to minSdkVersion 16, ndk 23.1.7779620, gradlew 6.9.2
* Build required modules from source instead of using prebuilt
* Add mipmap icon for compatability with old Android
* Fix crash on start when ifaddrs was called (with meshnets.yggdrasil=true for example)
* Use TCP/IP socket for I2CP instead unix socket

12
fastlane/metadata/android/en-US/changelogs/2410001.txt

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
* Updated codebase to 2.41.0-85-g2f10decf
* Revert to ndk 21.4.7075529, boost 1.74.0
* Switch to androidx.core 1.6.0, gradle 7.1.3, gradlew 7.2
* Add internal services (not user-defined tunnels) status on main page
* Add return button on settings page
* Add turkish translation
* Add uzbek translation
* Fix datadir and locale detection and passing of them to daemon
* Fix getting datadir from daemon
* Fix assets overwriting when they already extracted
* Removed Start/Stop button on main page
* Change application theme to Default (from Holo)

3
fastlane/metadata/android/en-US/changelogs/2420000.txt

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
* Updated codebase to 2.42.0
* Switch to OpenSSL 1.1.1o
* Added French translation

1
fastlane/metadata/android/en-US/changelogs/2420100.txt

@ -0,0 +1 @@ @@ -0,0 +1 @@
* Updated codebase to 2.42.1

5
fastlane/metadata/android/en-US/changelogs/2430000.txt

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
* Updated codebase to 2.43.0
* Remove unused READ_PHONE_STATE permission
* Switch to OpenSSL 1.1.1q
* Added Simplified Chinese translation
* Disable SSU and enable SSU2 for new installations

4
fastlane/metadata/android/en-US/changelogs/2440000.txt

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
* Updated codebase to 2.44.0
* Switch to OpenSSL 1.1.1s
* Added Ukrainian, Spain and Italian translations
* Disable SSU and enable SSU2 for new installations

4
fastlane/metadata/android/en-US/changelogs/2450000.txt

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
* Updated codebase to 2.45.0
* Buildtools 32, target SDK 32, NDK 23c
* Switch to Boost 1.78.0
* Added Czech translation

1
fastlane/metadata/android/en-US/changelogs/2450001.txt

@ -0,0 +1 @@ @@ -0,0 +1 @@
* Fix storage access issue on Android 11+

1
fastlane/metadata/android/en-US/changelogs/2450020.txt

@ -0,0 +1 @@ @@ -0,0 +1 @@
* Fix installation and start on some Android 11+ devices

1
fastlane/metadata/android/en-US/changelogs/2450100.txt

@ -0,0 +1 @@ @@ -0,0 +1 @@
* Updated codebase to 2.45.1

1
fastlane/metadata/android/en-US/changelogs/2460000.txt

@ -0,0 +1 @@ @@ -0,0 +1 @@
* Updated codebase to 2.46.0

12
fastlane/metadata/android/en-US/full_description.txt

@ -1,13 +1,9 @@ @@ -1,13 +1,9 @@
<b>I2P</b> (Invisible Internet Protocol) is a universal anonymous network layer.
All communications over I2P are anonymous and end-to-end encrypted, participants
don't reveal their real IP addresses.
All communications over I2P are anonymous and end-to-end encrypted, participants don't reveal their real IP addresses.
<b>I2P client</b> is a software used for building and using anonymous I2P
networks. Such networks are commonly used for anonymous peer-to-peer
applications (filesharing, cryptocurrencies) and anonymous client-server
applications (websites, instant messengers, chat-servers).
<b>I2P client</b> is a software used for building and using anonymous I2P networks.
Such networks are commonly used for anonymous peer-to-peer applications (filesharing, cryptocurrencies) and anonymous client-server applications (websites, instant messengers, chat-servers).
<b>I2P</b> allows people from all around the world to communicate and share information
without restrictions.
<b>I2P</b> allows people from all around the world to communicate and share information without restrictions.
For more information about <b>I2P</b>, you can read <a href="https://en.m.wikipedia.org/wiki/I2P">article on Wikipedia</a>.

BIN
fastlane/metadata/android/en-US/images/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

9
fastlane/metadata/android/es/full_description.txt

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<b>I2P</b> (Invisible Internet Protocol, Protocolo de Internet Invisible) es una capa de red anónima universal.
Todas las comunicaciones a través de I2P son anónimas y cifradas de extremo a extremo, los participantes no revelan sus direcciones IP reales.
Un <b>cliente de I2P</b> es un software utilizado para construir y utilizar redes I2P anónimas.
Tales redes son comúnmente utilizadas para aplicaciones de par en par (intercambio de archivos, criptomonedas) y aplicaciones anónimas cliente-servidor (sitios web, mensajería instantánea, servidores de chat).
<b>I2P</b> le permite a la gente de todo el mundo comunicarse y compartir información sin restricciones.
Para más información sobre <b>I2P</b>, puedes leer <a href="https://es.m.wikipedia.org/wiki/I2P">este artículo en Wikipedia</a>.

1
fastlane/metadata/android/es/short_description.txt

@ -0,0 +1 @@ @@ -0,0 +1 @@
Implementación completa en C++ del cliente I2P

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

Loading…
Cancel
Save