From a491669b048e9087109aaa9b926e2f14258c7435 Mon Sep 17 00:00:00 2001 From: abysshint Date: Thu, 3 Nov 2022 14:43:53 +1100 Subject: [PATCH] first public release --- .gitignore | 23 + LICENSE | 21 + README.md | 119 + README.ru.md | 120 + images/common/tcp-logo.png | Bin 0 -> 20731 bytes images/english/tcp-circuits.png | Bin 0 -> 47408 bytes images/english/tcp-log.png | Bin 0 -> 30685 bytes images/english/tcp-options-filter.png | Bin 0 -> 49664 bytes images/english/tcp-options-general.png | Bin 0 -> 43485 bytes images/english/tcp-options-hs.png | Bin 0 -> 28299 bytes images/english/tcp-options-lists.png | Bin 0 -> 40043 bytes images/english/tcp-options-network.png | Bin 0 -> 48848 bytes images/english/tcp-options-other.png | Bin 0 -> 46874 bytes images/english/tcp-options-server.png | Bin 0 -> 44311 bytes images/english/tcp-relays.png | Bin 0 -> 68985 bytes images/english/tcp-status.png | Bin 0 -> 48034 bytes images/russian/tcp-circuits.png | Bin 0 -> 49776 bytes images/russian/tcp-log.png | Bin 0 -> 30874 bytes images/russian/tcp-options-filter.png | Bin 0 -> 51044 bytes images/russian/tcp-options-general.png | Bin 0 -> 46718 bytes images/russian/tcp-options-hs.png | Bin 0 -> 30376 bytes images/russian/tcp-options-lists.png | Bin 0 -> 41251 bytes images/russian/tcp-options-network.png | Bin 0 -> 49969 bytes images/russian/tcp-options-other.png | Bin 0 -> 49291 bytes images/russian/tcp-options-server.png | Bin 0 -> 46740 bytes images/russian/tcp-relays.png | Bin 0 -> 69198 bytes images/russian/tcp-status.png | Bin 0 -> 49871 bytes source/Addons.pas | 387 + source/Changelog.txt | 172 + source/ConstData.pas | 407 + source/Defaults.ini | 29 + source/Functions.pas | 3368 ++++++ source/Languages.pas | 1211 ++ source/Main.dfm | 6201 ++++++++++ source/Main.pas | 14765 +++++++++++++++++++++++ source/TCP-RSP-31045-PATCHER.exe | Bin 0 -> 62976 bytes source/TorControlPanel.dpr | 64 + source/TorControlPanel.dproj | 183 + source/TorControlPanel.icons.res | Bin 0 -> 73712 bytes source/TorControlPanel_Icon.ico | Bin 0 -> 74457 bytes source/Translations.ini | 1496 +++ 41 files changed, 28566 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 README.ru.md create mode 100644 images/common/tcp-logo.png create mode 100644 images/english/tcp-circuits.png create mode 100644 images/english/tcp-log.png create mode 100644 images/english/tcp-options-filter.png create mode 100644 images/english/tcp-options-general.png create mode 100644 images/english/tcp-options-hs.png create mode 100644 images/english/tcp-options-lists.png create mode 100644 images/english/tcp-options-network.png create mode 100644 images/english/tcp-options-other.png create mode 100644 images/english/tcp-options-server.png create mode 100644 images/english/tcp-relays.png create mode 100644 images/english/tcp-status.png create mode 100644 images/russian/tcp-circuits.png create mode 100644 images/russian/tcp-log.png create mode 100644 images/russian/tcp-options-filter.png create mode 100644 images/russian/tcp-options-general.png create mode 100644 images/russian/tcp-options-hs.png create mode 100644 images/russian/tcp-options-lists.png create mode 100644 images/russian/tcp-options-network.png create mode 100644 images/russian/tcp-options-other.png create mode 100644 images/russian/tcp-options-server.png create mode 100644 images/russian/tcp-relays.png create mode 100644 images/russian/tcp-status.png create mode 100644 source/Addons.pas create mode 100644 source/Changelog.txt create mode 100644 source/ConstData.pas create mode 100644 source/Defaults.ini create mode 100644 source/Functions.pas create mode 100644 source/Languages.pas create mode 100644 source/Main.dfm create mode 100644 source/Main.pas create mode 100644 source/TCP-RSP-31045-PATCHER.exe create mode 100644 source/TorControlPanel.dpr create mode 100644 source/TorControlPanel.dproj create mode 100644 source/TorControlPanel.icons.res create mode 100644 source/TorControlPanel_Icon.ico create mode 100644 source/Translations.ini diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ec1184 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# Delphi +*.dcu +*.rsm +*.local +*.identcache +*.~* +__history/ +__Temp/ + +# Windows +*.lnk +Thumbs.db +[Dd]esktop.ini + +# Tcp +Skins/ +Data/ +Tor/ + +# Other +*.zip +TorControlPanel.res +TorControlPanel.exe \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..78c178e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020, abysshint + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..0ce6fac --- /dev/null +++ b/README.md @@ -0,0 +1,119 @@ + +
+ +[![Contributors](https://img.shields.io/github/contributors/abysshint/tor-control-panel.svg?style=for-the-badge)](https://github.com/abysshint/tor-control-panel/graphs/contributors) +[![Forks](https://img.shields.io/github/forks/abysshint/tor-control-panel.svg?style=for-the-badge)](https://github.com/abysshint/tor-control-panel/network/members) +[![MIT License](https://img.shields.io/github/license/abysshint/tor-control-panel.svg?style=for-the-badge)](https://github.com/abysshint/tor-control-panel/blob/main/LICENSE) +[![Stargazers](https://img.shields.io/github/stars/abysshint/tor-control-panel.svg?style=for-the-badge)](https://github.com/abysshint/tor-control-panel/stargazers) +[![Downloads](https://img.shields.io/github/downloads/abysshint/tor-control-panel/total.svg?style=for-the-badge)](https://github.com/abysshint/tor-control-panel/releases) + +
+ +
+ Logo +

Tor Control Panel

+

+ Windows GUI Client for Tor Expert Bundle +
+
+ Language: + English · + Русский +

+
+ +## Table of contents + +* [Overview](#overview) +* [System Requirements](#system-requirements) +* [Program Features](#program-features) +* [Screenshots](#screenshots) +* [Project Build](#Project-build) +* [Privacy](#privacy) +* [License](#license) +* [Links](#links) + +## Overview +Tor Control Panel is a free and simple GUI tool for configuring, managing and monitoring the operation of the [Tor Expert Bundle](https://www.torproject.org/download/tor/) on the operating system Windows. The program's operation is based solely on editing configuration files, parsing local descriptor caches, and sending requests/receiving responses through the control port. The program has a nice and intuitive interface that will help you get more out of the Tor network with a minimum of effort. + +## System Requirements +* Operating system: Windows 7 and above +* Tor version: 0.4.0.5 and above + + > Note: The program can run on Windows XP and Vista, but the latest supported version of Tor for these operating systems is 0.4.4.6, and pluggable transports need to be rebuilt in Golang version 1.10 and below. +

[↑ Up]

+ +## Program Features +* Ability to connect to the Tor network via bridges and a proxy server +* Ability to choose as nodes not only countries, but also hashes, IP addresses and CIDR masks +* Ability to reset Guard nodes +* Ability to scan relays for reachability of ports and ping measuring +* Ability to manage hidden services +* Ability to use selected Entry nodes as Vanguards +* Ability to add and configure the launch of pluggable transports +* Saving/Loading your lists of Entry, Middle, Exit and Exlude nodes +* Automatic nodes selection based on user settings +* Running multiple copies of the program with different profiles +* Showing the Tor message log and saving it to a file +* Configuring Tor to Work in Server Mode (Exit Node, Relay, and Bridge) +* View information on all nodes of the current consensus (Nickname, IP address, Country, Version, Consensus weight, Ping, etc.) +* A convenient filtering, searching and sorting system that helps you choose the most suitable nodes +* Viewing and closing circuits/active connections +* Displaying traffic statistics in the form of a graph and digital data +* The program is portable, installation is not required, where it was launched, it works there +* Support for visual themes +* Multilingual interface with the ability to add new localizations +

[↑ Up]

+ +## Screenshots + + + + + + + + + + + + + + + + + + +
tcp-options-generaltcp-options-networktcp-options-filtertcp-options-server
tcp-circuitstcp-statustcp-relays
tcp-options-hstcp-options-liststcp-options-othertcp-log
+

[↑ Up]

+ +## Project Build +1. Install the IDE [Delphi 10.4.2 CE](https://www.embarcadero.com/ru/products/delphi/starter/free-download) + > Warning! Building the project in other versions of Delphi has not been tested and may lead to the most unexpected results. +2. Download and install the Delphi library [Ararat Synapse](https://sourceforge.net/p/synalist/code/HEAD/tree/trunk/) + + * Create a folder **Synapse** and extract the files from the archive **synalist-code-r000-trunk.zip** into it + + `C:\Program Files (x86)\Embarcadero\Studio\21.0\source\Synapse` + + * Open the Delphi Options and add the path **$(BDS)\source\Synapse** to the lists **Library path** and **Browsing path** + + `[Tools] → [Options] → [Language] → [Delphi] → [Library] → [Windows 32-bit]/[Windows 64-bit]` + +3. Open the file **TorControlPanel.dproj**, select platform and compile the project by pressing the **[Run]** button +4. Run the file **TCP-RSP-31045-PATCHER.exe** to fix the Delphi 10.4 bug which causes the buttons to be displayed incorrectly in Windows 7 when Aero is enabled. + > Warning! The [AT4RE-Patcher-v0.7.6](https://github.com/anomous/AT4RE-Patcher-Windows) program was used to create the patch. The patches created in it are defined by some antiviruses as potentially dangerous applications, since "hacker" methods of modifying executable files are used. +

[↑ Up]

+ +## Privacy +The program does not have direct access to the transmitted user data, does not require administrator rights, does not change any operating system system settings, including the system proxy server, does not collect any usage statistics + +## License +This program is free software and distributed under the [MIT license](https://github.com/abysshint/tor-control-panel/blob/main/LICENSE) + +## Links +* [Tor Manual](https://man.archlinux.org/man/tor.1) +* [Tor Specifications and Proposals](https://gitlab.torproject.org/tpo/core/torspec) +* [Tor Project Distribution Server](https://dist.torproject.org/) +* [Tor Project File Archive](https://archive.torproject.org/tor-package-archive/) +

[↑ Up]

\ No newline at end of file diff --git a/README.ru.md b/README.ru.md new file mode 100644 index 0000000..9cc4985 --- /dev/null +++ b/README.ru.md @@ -0,0 +1,120 @@ + +
+ +[![Contributors](https://img.shields.io/github/contributors/abysshint/tor-control-panel.svg?style=for-the-badge)](https://github.com/abysshint/tor-control-panel/graphs/contributors) +[![Forks](https://img.shields.io/github/forks/abysshint/tor-control-panel.svg?style=for-the-badge)](https://github.com/abysshint/tor-control-panel/network/members) +[![MIT License](https://img.shields.io/github/license/abysshint/tor-control-panel.svg?style=for-the-badge)](https://github.com/abysshint/tor-control-panel/blob/main/LICENSE) +[![Stargazers](https://img.shields.io/github/stars/abysshint/tor-control-panel.svg?style=for-the-badge)](https://github.com/abysshint/tor-control-panel/stargazers) +[![Downloads](https://img.shields.io/github/downloads/abysshint/tor-control-panel/total.svg?style=for-the-badge)](https://github.com/abysshint/tor-control-panel/releases) + +
+ +
+ Logo +

Панель управления Tor

+

+ Windows GUI-клиент для Tor Expert Bundle +
+
+ Язык: + English · + Русский +

+
+ +## Оглавление + +* [Обзор](#обзор) +* [Системные требования](#системные-требования) +* [Особенности программы](#особенности-программы) +* [Скриншоты](#скриншоты) +* [Сборка проекта](#сборка-проекта) +* [Конфиденциальность](#конфиденциальность) +* [Лицензия](#лицензия) +* [Ссылки](#ссылки) + +## Обзор +Панель управления Tor - это бесплатный и простой инструмент с графическим интерфейсом для настройки, управления и мониторинга работы [Tor Expert Bundle](https://www.torproject.org/download/tor/) в операционной системе Windows. Работа программы основана исключительно на редактировании конфигурационных файлов, разборе локальных кэшей дескрипторов и отправке запросов/получении ответов через управляющий порт. Программа имеет приятный и интуитивно-понятный интерфейс, который поможет вам использовать больше возможностей сети Tor, прилагая при этом минимум усилий. + +## Системные требования +* Операционная система: Windows 7 и выше +* Версия Tor: 0.4.0.5 и выше + + > Примечание: программа может работать на Windows XP и Vista, но последняя поддерживаемая версия Tor для этих операционных систем - 0.4.4.6, а подключаемые транспорты нужно пересобрать в Gоlang версии 1.10 и ниже. +

[↑ Вверх]

+ +## Особенности программы +* Возможность подключения к сети Tor через мосты и прокси-сервер +* Возможность выбирать в качестве узлов не только страны, но и хэши, IP-адреса и CIDR-маски +* Возможность сброса сторожевых узлов +* Возможность сканировать узлы на доступность портов и измерять пинг +* Возможность управлять скрытыми сервисами +* Возможность использовать избранные сторожевые узлы в качестве Vanguards +* Возможность добавлять и настраивать запуск подключаемых транспортов +* Сохранение/загрузка своих списков входных, промежуточных, выходных и запрещённых узлов +* Автоматический подбор узлов на основе пользовательских настроек +* Запуск нескольких копий программы с разными профилями +* Отображение журнала сообщений Tor и сохранение его в файл +* Настройка работы Tor в режиме сервера (Выходной узел, Ретранслятор и мост) +* Просмотр информации по всем узлам текущего консенсуса (Ник, IP-адрес, Страна, Версия, Вес в консенсусе, Пинг и тд.) +* Удобная система фильтрации, поиска и сортировки, помогающая выбрать наиболее подходящие вам узлы +* Просмотр и закрытие цепочек/активных соединений +* Отображение статистики по трафику в виде графика и цифровых данных +* Программа портативная, установка не требуется, где её запустили там она и работает +* Поддержка визуальных тем оформления +* Мультиязычный интерфейс с возможностю добавлять новые локализации +

[↑ Вверх]

+ +## Скриншоты + + + + + + + + + + + + + + + + + + +
tcp-options-generaltcp-options-networktcp-options-filtertcp-options-server
tcp-circuitstcp-statustcp-relays
tcp-options-hs
tcp-options-liststcp-options-othertcp-log
+

[↑ Вверх]

+ +## Сборка проекта +1. Установите интегрированную среду разработки [Delphi 10.4.2 CE](https://www.embarcadero.com/ru/products/delphi/starter/free-download) + > Внимание! Сборка проекта в других версиях Delphi не тестировалась и может привести к самым неожиданным результатам +2. Загрузите и установите в Delphi библиотеку [Ararat Synapse](https://sourceforge.net/p/synalist/code/HEAD/tree/trunk/) + + * Создайте папку **Synapse** и извлеките в неё файлы из архива **synalist-code-r000-trunk.zip** + + `C:\Program Files (x86)\Embarcadero\Studio\21.0\source\Synapse` + + * Откройте настройки Delphi и добавьте путь **$(BDS)\source\Synapse** в списки **Library path** и **Browsing path** + + `[Tools] → [Options] → [Language] → [Delphi] → [Library] → [Windows 32-bit]/[Windows 64-bit]` + +3. Откройте файл **TorControlPanel.dproj**, выберите платформу и скомпилируйте проект нажатием кнопки **[Run]** +4. Запустите файл **TCP-RSP-31045-PATCHER.exe** для исправления ошибки Delphi 10.4 из-за которой неправильно ображаются кнопки в Windows 7 при включённом Aero. + > Внимание! Для создания патча использовалась программа [AT4RE-Patcher-v0.7.6](https://github.com/anomous/AT4RE-Patcher-Windows). Созданные в ней патчи определяются некоторыми антивирусами как потенциально-опасные приложения, так как используются "хакерские" методы модификации исполняемых файлов. +

[↑ Вверх]

+ +## Конфиденциальность +Программа не имеет прямого доступа к передаваемым данным пользователя, не требует прав администратора, не изменяет никакие системные настройки операционной системы, включая системный прокси-сервер, не собирает никаких статистических данных об использовании + +## Лицензия +Эта программа является свободным программным обеспечением и распространяется по [лицензии MIT](https://github.com/abysshint/tor-control-panel/blob/main/LICENSE) + +## Ссылки +* [Мануал по Tor](https://man.archlinux.org/man/tor.1) +* [Спецификации и предложения Tor](https://gitlab.torproject.org/tpo/core/torspec) +* [Сервер дистрибутивов проекта Tor Project](https://dist.torproject.org/) +* [Файловый архив проекта Tor Project](https://archive.torproject.org/tor-package-archive/) +

[↑ Вверх]

+ diff --git a/images/common/tcp-logo.png b/images/common/tcp-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b468dbce616be3e4d1fdb00577964d4b19355f16 GIT binary patch literal 20731 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 M07*qoM6N<$f}4GoPyhe` literal 0 HcmV?d00001 diff --git a/images/english/tcp-circuits.png b/images/english/tcp-circuits.png new file mode 100644 index 0000000000000000000000000000000000000000..52c19392ad01a48caadf12237577d6c446e87e30 GIT binary patch literal 47408 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 z z6Elt?cHm~ZcP~HMjsb4)y6;zUsaLl?!T^`!{c963fhr{sN$lDbg(wXNmoj( zV|fbQ)dC@U?Zej!YL97HRDz@_RVW|xfI|am6heMv`gjn` zQG4Sm2w`ImBHFm|tY<1(QkiyLqi#zTl912qn5#qfz*E8EFmeY-=j<--lKfa9uP6LB z7=P$Xp3$Y3n^R%J69SOW_t;A5v!gOSB=V)S0mLwxJuT*xuqtTC(txdf_fD{t2A^`3 zly<&f0#WP_nyNrrnrS=2KSXV9VlBQf@ki58qGtyopT8V+T72Z5;t`U->+>0NDxli_ znc=|DC4upt;2sCje)22T+IRJwg2w6LtVm7#lV+~{>v+xv_=FWJ*>+6h)DuZ9rSd@Y zvCHy7j&D6fJ=TnhT;cT~J!hf&hN-ecs%1jz>Jt2;WdbeyXPaVIf0f!Fx$wKDHK7+F z=cv$cb>BBAOtihG`iPpZVZ5*N$-B=!WuiG&cI3ycBX4A^YQw#0REZ;iG8GYH{d`*K zRV3P#{Ot`>t;P+b!@*H4t=S?gn)pr)k>Pw1^<(A*ZHHdjww;yPKoRwtz?G?hsdM>j z7*D7thlhtzCk;uUuI45QbgMHnhmPBpA zoM!Gwg=gE*gX`b9r%s@g4l@A!-(R+?w&WxC^DrqTn?)-<6x&F$^u>&vcnpYvSW8b0 zNT0rUj+?d`kKHDD*Mr=tJT6e`$H2hi(23~dF5jKHi9tzYjaIXNz}^*@ZS@e=y2rUeZ+c+Fao0aQQ=_B3tG!4IBxf3baMBd*cVGTP+Sce-`5%h3m5Mz8#_338x zR;5nJ<;Ts2R`a{C#v>&inY_+D$}jCU_i&wPJW%9L!12%;mvUtTR^6#Y)VuTfCX6*pekdyl6Of&eR@kW^Z%c zpgvX>wwNc?pQPRN7<=voy{C-OpZe;T~SVcu~|)N_NUCUkl1XC z1a=!*-_)%_ zlAn`(MCJA-b!;z{>qi`LCP+$H@Zm3L zZ8-*pC~cM6fSats)(=#}babfbH)lhcU%1T!*pN9t8RhZ#l&&OwFC!=XejZ$qWh*N2 zE=V$|tP8*QWjYI6{L*ra&H24=9MM+1`-$$>kyffkVUy!B$7Bd|&oz~K`O3kR;>HG* z7!qfXX3Gtmsp>aiFpO}D7)dpry0;Ne+{oqsF(}V+o!viav!W^MB5zfS0e*RaJ1RAy zs=jG7X8wLtbW%%hgQ9{R!aMQJw5B|pm0H3*x8QZ>(aae|akebUp!?~&+7wV(R$scg zy4Ex_a9DbP4C1P)K(B%k^MVcJ%#8Xz&jo7g>;RR=#6#||-8xt58+NFhYc@tiX;D5o z+D}R?j`74q`%<>Hz|GAqp+ScO5h|Hp)Nd(p`a^9yU{jGXWp$?R@b1UFIV_ALVK;1! zMZLz)3hvH{ruZ1|=Sm(jxVk?P^~HF1U(*OEDj%SAf>=No^?nYBhn~L!PsO7u@YV

6y)Gp%{B9fpjABBVfE H|HJ~qdOd#}CrTJL(-I#J4sQg6`Tqaz_9y^)a?S4Bd4z7PEIqdf;&?#39lkdVlc zWW+zKdoCV#`eeMD$$biVFBzBqqQg-QGW~)LnaJNuWW@oWwpQT8Z1=Mh_;bN-NxMM( z@pBCD=#|(q9?`G81v87fo3DxRR*vk@zTSOo{H^2HhYxMwUveFZa5k`tXt7%oT1YyZ zr2M@2j=N5{B=nsto@$|bl9PKnx9Ts}7`XJ|RX$OZhSQo5w&M;tQHBYvv zy5nNV>vDI+shMXX(2tetv5nt2T)pc_)Zs|jW- zLF_omfXnQ)94817Sb95_V~jjB$8A;{_?@b0a68-F1r1~M-MHP$mvTf()Vy}c=rj8B z_#uYG>t>cbX1H9xSy*s$#^992tBe3C(d1P011@t=joDsqi|?sRJ~1I-X+?$4Uam)5 zdwT%1!Vvxl>wa1o_rC^y9=7h~Ax*2v)LQ9&x~|26zqdZ7h`&cmyZN)&S`+k}0tkL$H_{$YBPgqQBT_;%b995-+Gp_vNFRqh#?<>tcaD5M{tyNw1)vL z6fksog?*OpGS0gddpQnz0w(KwP?SE#x0kch?m;H#`3XNJE-sEl!2P(n8*ay*`7l%C zAI9VIjNW$EdDO2lH^RT6=gwv}T+xTt%+luRHyswq5B3x|97Nmf$}&*gL)Ki`c|Rx? zQ9k(ire0@O_@R+(rD;7+EMk+`+%ETgJ0VuyGPGRN;2UM54i|;#b|w`@zTj1Xb$yNv zw^0-{@N-97@b_9_E(aFhJH@wZ6A^FqoZ4@*tp^1Gl1g!dPS3`_7f`I7an01@& z{r>$z1q26~Gw?Z?E>kO0M+ZL>*_eNV-w&)PEfQ=UE^)7{xF|e5`rv2i;yMv}X$`nwyX)NsT$|J_b^I~+QPv-qcE3JTS6NiStx^A#&h!9@~muCT5iB(+u4o1Z&u3%v@}> zdRUOcZJ}MahrRU_NJA(ysV;NX`uBaT{^!w*)i>z@x9PZa!guQ-SdX{)Pdh+c%Q=LY zfLZ4S=(+O#J5%}--#u4qp>4i#Rd{2V3)V6W4iCa3YzfnooD|zmQ)J8~lEJ#IevhR5 zDr#8UB6ntG1#b8RH5^W3&gOR;$`kT=ymm;3!eAcmZboe=fzQ?amWFgOmp$U(VkBD@ zV*!mlmp{qeRxh^j=gw@e9p-<6j-J2bbKD*!XMSfyLkVoSMl!-O0Sjb*%@-oCw!}

9-Hm%bd;dF$^gpiQf4zY^;X}R{u&hUpZxENF4-};v zlxMYIix$ggK2Jv&>2Ks81l(iWNfM$F7bvs;|IXx_$|QsL-9gDl*>dY)dByq*;2QF? zC=8ai){t#1-~f%)X~KHq_(p(`CO9qjTJP z%{43Hj>A_4cqRf4HST0jkd1|1kJ)DVJYMmSY`%uh}mSJ%=O-2GMz<0 zO}EJb3QyvSL-sMP(kbiO7~w+KZP3lgxSFPoPuBYPXQD4>N44$7K4fS*xnoekE3ga& zxVf8Z^IlhGyLiU&MLGUC6=+U~we6l-ghwqztbKb_XRp7z&b7fDXHzX&;aPT2su6S~ zdHM{l4;x(B4%cdQm4gzP!x(ia=M4>lDfH&(U};$o#)$O6 zdr&J;G}B*SUDb*GQ+fwg4Ot2_T*F&nvnH=>Tks%IZgB3ss!8AgBcCl zEhtxAULplLE9n7HM$4VfV(w>p<92RD4V(GbFZP`Q{b&?3YrZ2{$(eo@d;Y7!_jBW& zE=_E1F6)nk6rsn4AlScLhzhFxJRB=bPXE|LZ@$tj9?Ja+CKFflyFZqXaLd~7g!B?c z{ZOgV>$_%LZz&+v<96~NsBFkbwDx%iL&NjT?hLzG?iY0t3x-<3-z4KlN5ljGDVp(Z ziK2PkpESokRg{;bQ2;Q3r^!^tcDFAl4%SSF%StdF`xa(9^hS5E;t$oaFx8)$Mcomx za6=khhfncYJ{Ig=H=~rt`7O7~Ce*F%`Gi=X-RYzXb#v4MjGBb#jEhK)ni8;8yPb~L z({3udNgbc~eh2hRXzfZnH=nZ%^t8E6r-4u8j^!;)?{OGRzBNx9wjTxwAy+@wqrv8` z{dNsw2x<(fUATHf5&HVrt4H%1Fec>G<-yEjdY7wm#x->TeEbgYY zsI>1)IWI-%w1cm4Laj_kpIgwHr{i!EA1>WuJ*z;s$QNRXq?@!5ful7okKC6rwd}M++f}?Mn{BMr&8X=G?ST-~fxDkfyJv$2SwvVm35_cjcOVvwdL`4qu231Argx+e@=) zU=p5DAKwYac;;Q<1Z(}|CcTU3#^hErw%VAn=)Al<0s~K@KjCix;0YlA@``HF9)x*k z0Id7*q#SDzH|FctF9f&P`S}k=Ok%P66UfHfdJY|g@6cPV^5DcpsqOK}SNP^7Gxc<% z*$v^?IJ&Lu5Z1CTySb@d#n8lgbJ4>kgN2-r{7nl3)<}KgHeJQfiHM2CfM>7p^W^eY2aK(&4Jv7g>}8 z%dLjT@Blp|Dr{03ijKCb4j0NK=Uf7S4KM;b5|#aQ_e->_{(o;;jOX@)krXD~{9IjA z+Vw{F_bu5PNPs&_D|?GxYyIWsUrg)2SXd5|T?ZPG5~+SYeDHR4o$it*Cd-*S9%}X1 zG_L^U5%_mtD^||Tpf%2m!1O=gB253$Z69uzY`1uw432Q%378002c~?d$V5@I8aOb2*^+m{Lr?U6$B<$3%wkyhbgiJ z2sRjB?usQOUrX6napREL>|INBwXxRHW>TjsY2z+EB%KQ-egg3Q`BuNChDIDQPjz{@ zbqBEz25jl+CgCX%8JOTZhfU+k#Z5g=o_;sIkq#O@n@0Ly($#z&ck{JSN$duJ8M)lSZtcPI_mEW}0i9Cbv>O~i!3d-A*vyd%JR)DvYx0&3%G`kpY*P{SHKz%@ zpM6pDQgq(&*!l?us-yPPZlbP2cMbvYy|(J3y8(`Nx1;(_nBoBk5WX!^M`vnQYcae3!?G-S00nv$U;$TZ9 zkaA6?kNfU&d`=V4&rbDz$XrwZvKDJ=$bQa$(VH=dYdS6x#Kh-yu?@tp-WS_47N??S zpKR}pAI@yYa#nagaO%4J3;!cyioi$cIW6;rQ&tw-$u3@(*-vo~e|BKPHgNcHXXbeP z!>&!t0LYcETbjf_8C!I~A6ZZqk-BZnHiO55hoE!%ro0=&OG}D8>Sw8?qzzP zL<2xLmowMB!^g)N7g|NVI{RGcN!v5_I=?8P1dg9$883(yx~M_*6j)WXx~I)}=@kxZ zo<5Bgd|ytQyb%6fyV-tF{3v0hGTCG|oPX$mpx6o+sBFGqR}Qgw*XDqXz27#?Mci~KLT_N0;yc-V+G&!?tX57Vc^KQ<5uHxBzx`_0{x;X{XR_#<=s88z&zqthFh z6yI!f=yZ)Xm(zF;YhpQ7&9bdbSZsi&A{(| ztahm?XZw55Qu=w;2sZ+h;-r7d^gp7Ka&S}lBY1&E5lZ-U>5-*GlCXBf5oFoHN7ba7Crvj>B&bg^-8MFEE$uMlwooA4XcXbw#D&jTO~P96xLGj=jFl zG!n;^VKaVAbdm+R9TqZ5v8`@Kc{W=krV98C0QPx;yix`K_4J}v)_m#wY~D5!vxZ$k z8#)r(Z;?f|Y({ACeuF#H?mb{MCM`bbDL0IquH`<>i5%AGLwoXqf`qUt+nNko)I!DU z9{V{<06%SFg4*0$#Wdu7WM*q?Ytk7#IF@d9>|FO>9~bg^uGn`q(P?%R6?>-svYbEd zS40q)sK$T5bDXNReXWHOM&=))rAytX-9C{HGt)KbJZ;lFvBF#xVA0s>zrXX)(MW}l z&*TWKpa^7bxv&gnM4el*uW$lFEKF{PoAqB%cXwW$FVk#9d{?NeTq zrS34o+3)LFxS7sXPxpRjAgglrzo$uXB2dY?}ZO7abUetnkHS7$Mf z@I)Jc8#-Thd3uCv>bq&MH5q+f=^f?3I_=PR_R4p3Hs_AQpa@NbDGBI}C;*g}a?by` zsqrIZB0&;{C6$uNHl0dYHY$D7%(*K59 zcrlX#EWl3S6igKu(+pdm?9p$t-HULPJ{4@(wiW;QQdkc?9e+7i50@Yq=He3m2Bn45 zF@4qJ&$|{Hg40#M*DBFLSn0ouP@KxVe}|&%qrcS4Le2k;5~bBpz+Q=55d1*t9(MM$7x1|E{rmR>(Bn;x%NQU0YRXMN z0Kkw>_uWtT7NGlukxULv;caBWG3e328|%|mqsJv zv0pAzD~XK*xC0;H{u943fiuA^F=`w(Qm{BB7@(wVOif>4GM)7HT}I9IlLh!b!C?+7 zZBW4cw{1o<;xp^GE|{e&WO2&OK|R*|U_C*|N`mLTz^s~W7wUF*ciT_fFj`}li}vyZ z{PE4Y02(9pM0G>cFiTZphvoX|IR9n0V7MSeK$cEE&@0)BW+^A1ub(8KUtf z0{3H7j;)Il5ZnqNAg};)0m#AYtP^Gs0EYtfVV+%Ev6ai-n0}qbb#itm?~DFQ_N`r_}Ak~32_sXEwZPZ{!~Uye^~ok=W*RIOWQuB9vKefJ_IIXaM5D?|Q*vLue2s zqpiz1WVUsj$RdX#bN@MmNxqNtJO>L-UclomK*5dX3c&7;YCKlqF_c?JhEI3FC>VLb zy#Pz=w?(`r^1^eh07*h|rvo{={UKmL-+A37|32r=_w|7BtSKM{xilsO$Ga}{7E+N0 zvDh1CQOrr$7QeqSG3}oWAb+}^=c$-@=0zUprgwe1a^DYnJa0Ryu3sBX<1qRiDiMQ! z(AEXm$*=F(>VQC;R?Z_fLw7_eaF6U%_}b%okKJwSiK{UhzW0!ZZM?@gR-^Z@3wk;w ze!3M9Pj_Ws2X^Yr!wp{@8)F{kRUG$LqUq z`dFWPZO(9ez~{Hd;s3gN@^;LRRw2t2^(2P1>t>KH zpGmu}u)STkYUJ6PN$WdFZ+sSwlCm9t4RtsZ`@dJJpu)ERCO^?a>UR> zm%6?^yzPk{24WONffLTY1N;!cjGQ%0DPo*zg6p|Bf~p;CD(Fm2`#Vy(_V5jY}E#h>@_uI+b^;quFQ5nwsi4f zQVZ68sc-tq*n)Ws)T$kCiD`b@P|m7Uad*+s$U320-sL+S(4}$O{8>Rk!6L^=QcW${ ziJKQ-wjORTVW%s^(^~E?NN}4aD;MVuli~)8i;IDXQQvbTOzm9;r`6@~M=q+v}3Jy+J8`_gwmv?|dx ztLEE00TSs5weroB!_oYQ7(0J2*DJc_&RYM~EbVqlDJdz#)rZ4PC~}*k^u>%EKcYp- z1GtUXMa$s)NOe!xAJnehb7S!p-tngbaT2)0;OeH?qvPOWK6qrWyQ{au1&CIBQ+H~a z1y-j~ZENDYI`||bA9v#&bcx+Z`5z>M^t@#W9$ilVnF(ZOe1Yy*X0XG4h=tW zURoTsYcjPL-fsu3aW4%S6kyq9vquR}mrLR1;)0(&J)R+qzv06s!CA*; zJV%keHR7X62*oHg@w&TO@;44W*{{~N;YZb5%c{+)tsrO1-0I;eRzjo5_q`bWhysZt zmO{$}1w5K02tioSM>`YfEUc#ZB>5oFJCwU@0ehXwGxpB*N1IUh;@j>&8-`1|^e}TL zuSvHR>DM{Bv`TsMcA3CJ0$y6apT7H>ooho}A`r~dvC=ZS z$2BoK7PcRV)sB*2pivaw*~A#z_gPmL3}W!!X{IZS zyJXpX9jfW?qxxn2k!-klX0T_#tfHHgjD}(O{;5nd%de8obDcN2Q7jWBQJm5ojH>hi_ zCMGKKvjhQ8-ZXjm+pYnc1Y#vTmL1RNsfp4ncqVH?a8Kz-`G>Gb*&?h_ym) zRXPp-zbq}@eIZIGYfsZ5jMWCpi*!l?>;U-}TS@cbxu^QOI7!fD=J><01;_``5)D#3 zAVYVu+L?{*JfoqB!anNevgB`L!0AWNUBCE=!s|vsf3C!)KFOx-`lzkC`*vh&5KnX5 zL-Fb);PBV{j~YeRBPj_7Vfp+14P4Ez@P57g-1^>ltI1o<8foFjk?b+6+lVDnf3>;2 z8qoFR?)>+wY!q*G>c_ohqg4qF2x#k4u3PA1mMZvZDz{xDz(~@1K`D=>1nqW31Xdp~ z$Lrv~^^|+)Zxq_>Qu{beBWnk&x~$1=Pa?zRd0(z%nrQjZ@u#Cv(^0b~T`1hn?tZ~Z2wo8rd70D0%TZqs)!10hUMZm5!~H?T zVLp<Hv`O&C5a0#vfV{L~R&@$(+aDC+ltKU6_Tf>UVUAr-rZO^{MH$NXlUGA#OPC zO!JtZJ3qEi#(8u{Z5G>QxXSEN;Qp|Nh2NELCm%|bPq<`X)dRuQ%_XD_a1( zx};c3k-B!YP=_i_txA~Qpj3WmNRF=KYAHEg_mX97oU|}a-(!LuAg5lTez`ky zZg;=i9~Uy}Ajd#^GIa;|A&0huV&D$-hH(VNiF>TTvtnvP9EDld1qG)|o3|w6wa0_6 z@ZD>!NBE5Ts!gs9i8QA$*90r3mu)V8p^_ zKqhpVv2av0Nv011J>(VYA;P&Ro03TPE@N*zitWC&oNarat~O)u)Y=fsy$>A? z*U?YS=Y8!368@`JYc9v%X)G+>79C$>fgb(=L5K2kckDUWKY&!+h2O)7F>VvcKzTz} zIRu)2A`n=t_U9dt;e-MR^gWA)5s>!n2JpI44)15X*IZ19k)&m^hWQhr|1APA^ORd| z8;*=542V;xzypXF&psUdO5gjS=-7Vixz%<46OeB`S$jMIq6Z+U+vKojFUavja^?Q4 zyW3{28VH|`I$^8rfM(L)2cijJmIh+mVc9KbE=&9CL{`!e9GiwM5}Fnp%dakLy7gU^ zGZt&=JK-*Txzd*7h6x38btI4q0g+Nqa{j|M9R@zrr(Gmrw-CJj5Mu!D1AzY1m;n&@ zQ@E|XIe568ZrZ7cp|N?D=J-G~ViScZGXaV@m_-MGu(Es2ZBAdng%@ z8g^?y{M~wxt~)dOo+*j1-6gyy4O3sLbhsQ=I|ATy0YaYt)&Z8@83-m2gnekD5A@Mv5cMF36QJ3h1LXge$~dPn;Y642hyUUNVkBIy$7`UCVCQqp#SMAH?t)%p$?2! zTvN7cN1_BXK^}oR7Nvu#aBxeh>j^-ZkjC_NT@|qkJw03wnqB}<9D)G>;B0iC@wun( zlA~IqExdKf1qLk2=5$MJIZs883birtR4Y12urqzXCdLS&w&%; zTg*Q1zjH2It9?4}Cqw1E4(WcD3wWa+K*+(Y6WTS7aw{j_!#dvm3Tz?%vE$8vL%_YR z=s<(j)Nv(BJaen%Yi9^bsQVVm4NDjXc9G*pz4D$jf0)3P^nv67?-e$JaF9jms6ZP! zV0k7C98k0D(mb0B?Ww7AwEFvh_n;506akFN4(I$jz_`%60L3dntcN*_f1SU z8o3kOP_P(+qe-MYZP~)?6RLR5`WA5!-WZ_x`6Wr`@&A=d$-bm!*+@FIjs?gFX=?D0 z#d)0m0XtOR-CvI8;s7d=O{h3mgk$!ex^Kg%`;VYSg)_;G{~I)BWjU6d^-N=Vy-EGJ zv0q>_I_>ngK3Yp#IV4`cYgAv^&*Z>Q4qNu#LJ0f04c^#V#WPn^y};*o#XM?TC57^Q zn%1l0f*syDT7>jaQPSNXGVL6Z>$7zum86@x6}6`|Pt)-EU%IO>yd^&VFzcpo=oQKp zb)YQ6>D?~z_dqmaAY`gu?cu{t?4f0QUZssT=@k+8nuVRk?Ljp}{;3cLEY7fPBUvoq z)p+-Qm#;mA=N~eEh4Ovqx~V;0bb+dQ_LgqZq^Nb>WkaHkkZpS@^QxW7_4oB9<6I{z z%c`TXgV1!@UTM`iH@_B_Pv!;;;fF~8m(TCRz2ldP5SB5?L!QaC5)|-4j(h90L(cJR zW#YZd#V~H0Sm^Sk&Zyn&TXu|kF`LsJtpd+ND~Av#_MIlV&U#ORUWLNO&sw$BN8WX* zoYU4FDrx6Q4b{`L_>-;dS#cJVQZHpzUMqaXS^A!2IYMY3CY{t<2|ivpkZojyMn4tI zm&R8gQ#0#^NoS$a}`SoiKu$C?rh5&u1u z!r`$Ll`?0SuWE1amT8rsX~EWKTTXJSugzFvqb7Bvv+KHd4M+$Wf|#1#*2?z`7&fM% z3Wp09vtJ>Vq}Kp<)QK`}XvR{;m2$onLllc`BTJEb$*}z)bz}1Ps<_jFd6wM|JJIM( z)&}Yv_U;fQu4bd#1-#l|W~+pG^9PF867G^8+kVb)@(HOoyW8c$QLUnF7#imquA&$f z+Q;+{swErWLUI}&usBslS_-n*C3N0_IipF~btBLy;0(zXnLYo|)lW4<=3hjFv>hwxh(D1MevjoflB2E_|E#97Azo^_l|T2r%EO5?}>4vBqz{tTH~>e4U>-X z>vRh}z8nf)`3y3;ZUW*Jk}f`h(k5>Dr* z6RZ`}hfD(FwN~+K=FP|Klax)PX~ZjNR^V2mlTy-E`1)FNEBUn4GgBLF5&x=lh0HR$ zq+uR&jY)Ya;5ReYySTE~@ftR#`U0jc4aMzN*_N+wh%M#&`3m?)qh2(!$?*Uyz-U7w zOpw#n@jTT9PdY05>m1|zfdvCJUp?B&GEU8e_T!D$){9u~-HbVzBzs)m@;ZHogR}8k zlttTZ`@d)7GmhH&>^};kVt$}k288ZfWD?EqXZrJ(;2Rr2&*Sq_Hh$)%cvX~mkIK@7 zmLLskLL5tia~9Vko5O@8t$!`7$=H~`&wFz1)qfw=bfi7XucOG3?4L*M^=D*b>i1L+C-pEyPwpE% zwN@#wS^r)Kg3EXuO$DjOV=IfFzY3;p%Ilp-gvzdzSALg*As=J}EZ#cPx1_x;QWFYk z%))ng-%#;s>|rDdw9+`(K{b`-1MkSER%)gpNuT*jz{ybQ^414$;J|kWCc0k0*-uo^ zs_$9`J0|bWEgCI7IyzOV$i17^C$O7?npRxSrmv{(x2An?Nk0z2tm3MnVP^I#hK=gR zy9Rg|?n;FH%6pOBJg?0w1M|q<8+Fwzpr@oUY`u08ws1SiKb4&a3GE+Pmd@nd*F(e! z7IBN3{Nf`Tb0$?^9SO7xE#!gu?5TS*NvzIk_b^i9#e&OXT)1}J(|FxVx{AyRO#3em zjZr;ajTpJ6^{3|0J-F?YUuWC7oxNT(ypmOXlM zQ=zaVg78=3zAP?|-CTq~ZZq4MKlrt8chwdocH*t}8+ZSL2TY=IFU`;2CN-ZyX@7pH zEts5(l7`p)K5<$i-6-o>>3&FS^GCB-SyRKx$heF;_cm1j<+dxQ9seS7Ws@g)Z1K-# zrP=9nYwI3MYvmS>ol;X4S-1eI355EK{-poW$5qbx&+`^9Ca$TS&T>xAPN_02{#AR> zdl?qBzaO>09XTdw@8%BC3V=u_#jDR|jF<#wozm_y>nmF6R86>BY|-EkJq)&~*cdD= zzO7%);~y)cA&*@;-p&{;gkLD-fqr#$E!c`VJ9BlV5Xxq zjdn4flH_{Nxf=T_%bA|v;_cmWeft-=J3$8m_C{U1jrc|)_twSNlWbbVb2(kbq$<33 zVIDsQirwC`nzO4^nQ_dw#u-P%dU?MsdfU9efu)OvV4f1v4iVkTRyWQowyNv8OeqiiUiqp@kTkBc z56IQf);X+o-Q9UxA0Yxsv!Qoemq4Ai|IHsVi_9%zfbtefmCy>$iZqD*#(^(JoNC7M>1(Zr%pHm@=~BV%)`90#b9{vQ%z}*q3{9| z9Mj9}*I3;)`&ls2f93oyVhzC(BmdR;e|!CT6Nkl&wT|9vMi9d&r9+irD8>x;_B+&8 z_z;~zM>NePc-=5>Ia@;Tn*e%Ri->9MrZ_&_SIP=f9(!TDvDWf$Vc2VgJ?3dy zhY+Ja4qw71WSBdL@z=|Ch%NW%h@nMU`iIgtX>#>ZsQw-|>{w+=*BmU^+LhE`iKoWV zQpR1+=9PVA118Ff-zDF_Q1x5}tH@7KHoFc`xU#=fT~*~1gSc9KImZ_9c=u0Sjm5g$+9S5lt@w#bwe0!P{dOTDhf2i>^k;rpMSo(sd?!9PF`!h*e#Xs| z(e-F3P5F~5{qF8ptL~7{_JK-I4E-EajacL0!!dtoP3}Q;pV&r%kbY#=#}g)gTP@<= z4ZED=P?I6AAsqLh{#S`0t=H*on-qOs)aw}`B?-`?^?@9)s&-TcPU>aT5MQWG!h%y& zikI&MEkYn4z!FMOVK8Z)$j7)T(;#>QB!h~s!Gv*UYND-4d#kaJBbaX}CMZQdw>j6^ zE-$ywB}<%+b;^)|KMW^R%q!qi$9g~>`GJ&{%UWIMC6LEZtISjY8CTNH{CJ`p~hj{edzeP!b#g~7fnNsNOp8Rg=S{nO&!P6<>`R|NF;nZ3$jJGl3 zID=Xyc#qE0rcl8RN87~k=2C%qwJ-SBXq=yKVe76XB@v!On6fLsAXsjas)Vw(M%4!_ z6JEM1M=6c{`@B_6zwVT$5$eRKXbQfWCLAt+L-xV)J3ASzFErQ-#?v({PzsXM8%HS2 zT!f9u|3U6zI6ZjGs$4TH#{W^tdZO2ZhOs{ST{u18#=_5=Pp~dwbVco^Z{)xkUyrpl z?Etk5jI6ctb2R}Fm=pT6Z#nftF;vz4+=+HFr`Vo@z zr9uV?rz!i##Y@>CupD)<25OAUfEq&Y=tp$tXPusBkk}Z9f&2rbvdZSQNw@S>1(ryr ziBu69m-FlQxGwMis9Q}im7ipiUW^1~aqz&%Mf5jIrN@P4hy1aBi#9cJ+WT#fA!H9C zs6p#D3eGZfD(m>vx-xlL8Qn=S5vDe~u={U%V|Zf*(1|~`%p3Wjx>B|VC+k-B?9V2R zj3v+Znu~5pSNxBOE~CJ9Gk!or88Q%;> znCH@HDZ##Sq3j_v1nIleB+(XyeOW-`Usw!KWLJ z(9v=?GdEK$R?=sk=jhKqdU5W?GNm5}9y#3hPRgjzz|;-s-|q|0fzR_14!h3|X@5O^ zq5FQv04UfecM2N#(ayQ>cu=kIL-QvFP2IlU&Wajnyfx}lmj+Bj8OIXAOXT4#OaDCm zEhzb5et|_*4byxX%t68VJK!ns9**GhJF-~;n_;-(WiXPOEi zr5`JOI-6w^JJ@u?mW3bbpZI#`P5Ir6W7L_PLfP$-NG7f0M_q+MZqwE%b#D!hm`d8Y zwS{Qtd*2H?+kxV{vU(YQ6u&u`-D;4%q$#%uC=L^RhD45qc$z+COfZ~giut8cG}Gdo zrY`1Z36K&wH>6oyq9BGvTu*pTMf`I=i-6p`=sS`lU-c9()qQ1;c%HWt#>>lelw&l8 zRmP@ao_C?Js!9<&J86#^C)rEO;W!!I zj6-tHTCi7}nOkpT(p~`TElMseW$@ZyZ%vaU9--M>2Y`Z}AY@NlOvK zqYs@l&h^Haq!dh$L_XsXL^3VjnT!BBv7;^D97|%_S9a7IQv(GFC|?zC2KOb-*dP)T*3a#LmcsV;>B)ATUNhck1@Y@LG~297 z>Fhxb%#Nrix?lNVWJu%~z-2_wz!I>X>gOp>Komy9Di@|L{fPd0Sr7?nJ>-9Z(rfeo zc`1gxj*$Ix4AZWP2Afp9tTZL7DRb|nvm!Z!KqFZr)(H0Tz+gD+q3p+(O1a@d3Y0n` z%9uXpy8W==@*liaD#u-4`Gv+O@+DRiODNLME_M`H!d(o(!%FExD1T}+ysRWh)m8jf z)>~<)(0xq;Zo`L&t-fCa1D5#!y{}osfctStXRQ^7LXI_A=YgML}qj+hfA*=(| z)KKr^$oS4(ZjTf$f)e{ak_lhcl?g4%$Jx(*C2kDlbbG^5wE)M z`diI3WuI3yIy}z4Q^bSijN)Eu@P1Ip*52boom(XKj==P@a&uLNTWo>X_`EV?VGJ~hvU zy!=UDSR^(Xp-1C0Hqx7#Rb4(u&JfAK(EmQuo)MPP{*wW;smPmN-C8~aE!I3ZbecWs)dlB~a@QLw zUV0gv5Ld1g9|4rcJV4$IpM02*s(4ZGFJo(ydfF*v|Gl?+{p%DL2dUgV>V8r)>8@Z zQu~de#b0^v01{#Zjl4zUyyeiPDx_d_<#=ihF$Jb^+aj0f-Yol_rNiVgKOz{nUsqK9-Uw4QHN#9iDgnl^b8?(rff z()#9E4!3rY>Ub>^A8QfeQmMCuxz-MX-R%1Q12K(^_JJQ?h)OIET#PnWX+K9R28rQii(Iqm0@&F_f)^~jX&RoIXdVo zd4;~%UQLXK5;ZgI$vYqiyO5W(N8E`Xp;RwgKE{rJ)OkTS(qk-Nr4-Wbt_+CY;pMJ>O|;4`1e;(@rc>qt~ThxT{3CoD|Bc zsW^^^(k7Gj7*H^e9{LVxT#RMRF z?s4*IOil&DUA~%fb!**qWZuw|)O-3*8oq~P+I z?rA?ucIB@a7&zoreeO@W*Ve58h7S+i7YPYgPWq-2Nr4Heb#2LbkZ3l;tZ@?9?^A_p z-Z>aoDYW)d*|h{$)7j9KaN?0DJlz#6BVE6?xko8{o%Y!GhsLC zvnxtWwjPO__bCkX)n>!N=~TnGjTD*BN0%kZ8DhMQ4c}6NG+T_c2dwlCH1gf=%H2wP zBBer@BHuq+X^i^Pr=`ul;z+r~NqbluZyUkss~nJ1Vir*1E%`eT0mv z+RmCBO<&~{%4h-hwd!#cQ-|sveBJoKxL~}LJtXP^^o`E51whx}NT%Il%N@Ne>A7S# zX08RpzxB1$sRQcc+DF|#$6gs-4B%DEM-Cx}2wt9SJcXCJSfJ3rbnYX^V|T zgloGR*+`A-kT=zy7Wd_jp4ic=eL;Z*k5Cs5ZRmT>~ zv;vxFq2_Uk4I>$r_y53>TY=$Y8>{qw3&yfr#}1K9m{Rb&WVeFZjwUXg7+21QCLC3p z4yf^om`-xr7IyPihVGHkq$QD}PO`T{N@BxzkVqp$f1TU#{4Z|pk>$SYsKlGLN>@!& z?%A1!F-42-ak;r}X+^u|9Vx+o@3mHsKAb}BHPx$5uuycKuS@r$K*iX`&xEd4cvn z2nwifcl_uBD8x<>c@3dD`8JLTB}@l{2pLHviW;CkLV+sSR-LdR#@)ZAwz@{u6gdfV zu|H0JF^i*a$N=y8{>K+Nf+e~;^?zMNqgdxx59I>#ZSk3c*)MXmtO@APv#D z+SDDgC(JqdoT=cBAAfJ3H%dsHwMOr_wXteTnJ|BjvqDj0wP1-omD-b5q#0T9l#>LNtLhkrv=i5Wy7=nVv4-F&$VjE+WDB0r{RCT* znvnZr&ucw2rCn7jB=XSzf_$dBfiF5AFQQ{FHKy@9JNr5FlReBCk1Wq1b_GHTI7j3m zQa5nRIMcZ||F5>M4vX^Z)*cWL5fBgt5Jf?n0i;6#rMqiLg`tsdkd_*xyE~+ZZUyO* zE&=H_08!GjM}O}*=eo}O{qtSd``t_yya@f{v}L(FULCjsXGZIdImi{87mlnS0-Zoa`BbMOnemj{zN9B zf=g>W%Zoc#EXETWFR02-`D$jcE-4J=1SyaNYH^AqrQAV`;2AxYrDG57%RPO8=4FQ} zrsu5N09W&#u+y+L??85SX--9|cA3;6Q>+n<13%>5ycsb$7rM9{y;K9uExP>x0Ko_c zMYr2W(`Nl4k4jX^Hcu}Zb_R6Ni z#S&g8!!z9H*3P{@8 z`h*E#Aqj;g5^u1gaKo{j2pO{}oG#M)bm}asoTyMx$kX?Jea5p%@mx?imMNwAn5*#a zg?NY;2IMss_n(4!kYdmn-_~c0ac|GFgo-2r9GDNULCpOW!Fitku0)|Ivtc7PAl?tl zMDPZ|z#taHPiz>Crglm~YfyBHQxyGW)|HH5^K#DEF1omJ5*u_p+nkU7rTP{NG}HTX zISp1`h?*)jcccllAw0+QQld^E%3LbVRXWKe5oByUeXJmrA^aiQdb~!$JQtLW+J5bY zy=6LT68;>EkBB5I;>eMCBxV7uY&akKTl7d6%j{@rsK@if*IZfZTpuU2N335`kVFvO z0So-&lIo1nBE7E@{^++oo0HrY&kLfX82mc|CwheLaM%EepsFj0!JMqF6_>0yON>kj z>rwSwA%|v1G#v%2z6H^i8sw?WI?Bik@^&R%I)tX%HO!&C7sd%O7dC!7TiC;Z1N!FfKHf0>CpVUj|3boFkO@Gf~)p8)l}=n%T#FvNEJ z$g&onv0S!|UruKJ7O84!sSr;DXL;OcK8OmidB=R)8CZvDeKn-5QG;)YC zJuAy`YSexhq+{wz_|vn2|Lx{&Q3iNP0C$8o^$YO~8O$&OgCBNt^BIAm`6NAdf%|@| z@r6@_LaUDk*to-Q!ypgbfqTzRMvF?8>st;2r9>)AVD}@KjAFWnZq=F4g_VISny1u2 z${OSA`i%dd3iO+)--F6+{-=&%!ZBXzH((OiAxr~k)j$Lv!t7(kNy{}|z;hy4@ox1Y zeR<24MhI6K6B3Z|k4%_3MBVb}&b0vQQ{u1s#9WuF{G&e60+HMD-|F*NIh94+P<56$ zV4B%;N)yIG;oUEE#~R;Cfi>AvuqM&@w~(|u%Zo2PdRBKjJ4 zqgPCG+=LIE9F&W7Z<$=f?u>)@J^iz?vOZe9l8280f%vmpGpVUHw@Tf+n9Z?ump$<| z{uRsWR`e%6-6MN5JG?XgW|Y$-C{;c~TDrFVpB1t=a7sXjZ*^q^a+*NvMhy21KwRTW zbh3Kyr83FSkzlUe%fe7=O~NH@kVGT%<}{bqW%|WWe!7#g*V{W-p}Y*-%=#0HA6i`o z6MGhx0kryfvC|1{`0E}*!+31(p+KqNE09G*n;a z4Vtmr1IBG|IuVFp=V+rwJuvef1BsA6Ro;(=h@sffLANPec<)MK&J|D2w9wwmX{_BS zU8k>A)vd3*G|&^ZmYLqREYQZ4zfVaAk^n>xOjFl7^>?~-n}&F%J|$EN_w&)z=!dQ? ztlTxMPS7oIwedHmfIv_R`YgJLm_;K~=W&!UzAs)JCR4f6v*Q_dT$snxUdsr9taGCe^*i?jHYKs!aA$*LKFZST z++v=DE5f>I9~YiW>BYpj)XEh*7#`5=MyahO%=g_C`#!)s=IZt3{S>q$q-3*-Q;k(d zzfDWar9R#$bc3nzeuh}=ouVXqt$rTjVSkf*gRX4~o^hF;`31rN99<5RFF?X@B$8>7 zuTsbm!}K8WNjOOu^QBnz`$Oi?A(zEd8_CNO4C~f;TLq%R^Op0Wwuo*8;VqSQYLHk) z$i}urm;Q9s?0IYA0N%<;-b_O$=0$B|W#z1t5|J6hgCV!a8pbT-2jZ%c z55_as>*Mu8SC~9R!`pwzye8G19Njw;3zNVEU1XSw*vXhseap+%$XxLwMpR!Lb<6AH zPgm;}w;dhTD^A{Ia79DEN^9foMhVj3iT%Lz_DoLPxGj9PYN;&uhC)b8k*R)?vUJ+< ze5@jFc@VQSo`<-O(&d#ncXGv+yq#x)nT(f}p>YVP6O~z2OQA)!UbZz9pK;p(%(pBK zI__lPXz^0)1w^Od5!W?#xb)+D4(+5Q)jpyh-ij6ihW;wSaER3PHuei>M(6iO6L)Q0 zdtYt$PGpi&Rae#JwJfME7V54gX?*gjH7OKj-!=8uluHdAdtH7{IB3T+^SH3MR-``^ zbjrAewn>uoD2fLqK^Ie7cnm}{SYMX)@tp7PHGqZ!m@1TiY}7+wqd02NHcC>!Aol#c z$e)x%!yk+nn09CE2RKfC{{}84g2T+f@D-dOjq>+j19hC0PnOh|TjfN9+8*1!0ImZL zXt%J=1!8u|P}p08{BTu->Ub0QWp-b#^GBcqZ2w^G=b)cbyacp6<7SNH`=^AG2vwnN z5L5s0h%wi|VCij4QZbUUTVjY9QYD0{2ly$#7CgY>^(CQ~ZtMVOAc5msgFmyN%^a-+ zR9*$4+T>L8?NNt6P%=h7*N$^BAg3|_J;IIY9={D=cd2kJVgdlMQ32SV!)G8Y$Dsck zr}T%x1|DlKF%!X^?^0Fu<^J};fM~Fz1EvQk9S1Pyw-peL+=rbSNr4Y209ryISU1e{ zpJGdR(BT(3mV_|@>fD7w8Q*-=Pl&8&8jtGi*K8>moJ zJfJMJUoca`T}A$ZTZ|7Y4irSwqAf071cw=roLHkC`iydUU9Z+dPJ3e}RF7)^~VnEBJNJ}a%4z>tjx*yIMx{gVVbeUuOJiq zS=f^3#{bfK`mSBualUsw)1DSWj;K$0est%_lVP0)dLzI#05(dz5m=M?p~Sr(7n9D)yiroh3GL!(sxB(>fz}81y_+9(cG)S?M?6 znTnX8#T**F)RCh_)|TDVOR7Eb5gTM54~F-{N_Tsic4Z^_w~yd=e9Cb0XWJr^9LxEo zj3)!-&d-MNWLYe3o2B;GXVk|eWW{e*>$dj0`d`L#e`Nq?Xvd%acUJ*82vaYagIq@F ze*;dBSKPX5BCwVh_fq5={(B%leN;M!9T806q^o^MuNgQRXsW$Hun>n4xZ1KJrZFWI zAWuF1-6;p82(^ z9z%^%V?d`T<**;fy7|MZlEm!C*tazXlU21xR&=LH?ent@ux0cI3=m@uJtd~lAzU3a z)soPJlcJy$#hTfxXn?O6>^xH#spZ6cuRf~S!zRi0zFVx{xav^+8Xt2)vE@#U_V-bq zi7{B^d`cL1=2CtG{U;*c7LgaqC4#Fo6XQOcO5IbYU$9k^;X?0g4Lth{=STH>QWiUJ zkmZ=sl_Ph)wdNW22NgbkK);&g&8skzMQKFv^5wcFW6Iz${;ku-&o1Fcr>bdJSOvT+ zgx&1rZ4L0a8Og={d52!n9*vW6b+XH~xSeze zg-@n>%@8(eGdv9MIVXYFw#)s^L?xx66PB>zZC83B)g4VddV6WByxbbz-n!7NZq7^U zA;4#(&{$2K~pvC*GL9UtZ2EH3fZ+d|Q zkp}aV{Ivk)XVchf$waZQb6w=Kb(1KKLB3EQRiwK4+urt_M;!x`X^8~pUBCa5L5kx< zl5ve%B^kx>}FVQcVY`Wz+9nrdUNo?DcZo zar&mkRwU&dzr5sF{ZLRQ2`#@a43aB-k|us`bpl%{Jx&L5r0q=)o-2pvN8y`c5q)s< zjCaqhjl#9$a??_^r+cy}qBR}E);mEb`C7C|C$CY#PQKA9elwh1D_eyvVd#U}%NIAv zSp>`yO(P|&bkBCpEcT(fZz)S=i&#c@E=NO+)Hc))NO&h$q>=o*vtcdZ_Bo%>tp%_> zW6v!i33A2t@Kmm@XivQ3wId$JU#4EP9yyw~NATOaj^O0FsyL~lak*NQaBN_9Ns&k~ z2e*b$hOZX!FLipKbwiiwQcuGErc)6ZsebVRssim)cHF^XoCl`f>R8>Qd#`9o_=|MQg=};bK~^kz{ud(h-d{??VY(k$Z-k zs@z<6&D9Rn;+EoF{jJ=8*}hg@aD1y>UJ*Q!@1*sV31+p9i)y8>3NB8K&(l05n)-81^hd`B<*(!IGfDc0u}2t5R9yle&~p%J;H2sQCVb;%`i1)m--u(YQ(PsxX4sR zyfn9gmMqpYvM%v)yn6Ln_HW+@VOcrbi;F2`Q{LC~SfcLy0o}fvza8%HEDNToqzPvj z(>fK(T4%CgiP6{O&r?2dc;OnE5MNmwSn5u=(i)y^^HK|X$e{-JDxn}r;v$1P<6dp( zAym_zoejw+@C7>KPxtWpE4?66F5DJz?BkVVB^eMpi-|^%Uai+TWjx)(JwpXeIVjK% z6?`RFAYp!6aOu3qCa;4bQ)sXCeoTEkd3#pGKN>EPG|7>=am9UxYWaoNmGjX*@FIc)jE(mea*a3NWF5?iz579F@oe} zLe`NidqCj@@zznT)Q_afqkQ9NTzVxk7kjc1nshBDy|lX5pO6}^hIpi~)BA_wao#fc z(73m`KNp{nUa>H85mV0z<;WZhAeUKGK0NRL%|)vMtd6Q?Q0M)p?!}&gXM)6KnC}$H z^odvie7~gsVPgYn;bkEje{D`mjiWP92S=V%3*!OK|KM&|Y$ztCb}ScWG4%VLcH3HZ+{}KmLjVJsjGM*Ecvwm++rQ{B z!0(7X-uV8rx-Hup&*Q3+%|1oV+Z_Pli&X|=Q{Wo2apo99!Jw+&91BvL6@H1a?``)w z8jjF?j6H@W3Zzmt;%0p)XxE_AT&H@49ca|VtNUFQM%JHLwygtP)j+g&-vpw*gi9u7 zchf_1sUi-y4DJ#cLkO3F2l2|F9r-%lauhAIb=u8s;YQt$BBiWOKxxtcz%2ql2 zxRz^c^fkRHzIh}?KR1Fkc8e#al)gkqpg#&XD?ncOxQn9cvDy5{rE7z43cnkc{KmAz za7-GD1E3M(jnJMlaBtwgDBJw*>Y&&V)QnS|dt6)G;re57_v0LpVM~LRh zn~Y#ZPKwlL+A-_>i(wm7HSr!tiF#`SZ>%CeX@uzkmre%YnvFp;rrIh^t=`D>XF-4w zlEXlw!~Wqgl%V`G9`Yl$*z3gTVl^BfT1iikv`{%G&ShE;q7_h`_WU1533NS0?;Yno zl+SKvHFf3&V1~V+d4XFDwwl}U( zb_FJspuf0`K7g#{RS}$ihOEAFGCw(AA)>JumK37EcTHEjq#adbmKS zfd<9K>U>K=VFO-ld2-1N5f5m8_&cz=<}a-E-n zh3mu|kqRaKj}@l2C+f{?Jz)qlr9OE{X|*G$GwZR_^}1MK9RLI>6dcqi+Lv z_=Yi(s+CPqKZqpgns$ksNijTn$0_}nn;Y2+E*?%l;1Mp`wRcT=T3nd425rhs=ieJr+t}zD#Z< zFCw%Sp8Kl2Q8N4BP>9}I=RXfWzmImxdZ-!$mljIZ{eZRDSlprizN1uhuQSrTHslc$ z-R7y4Jpja^#4(bUhE8N0#1ccQQ7Q%1O*8bxuZ>{6T|O+aU(mDX#^`{ z9Z*G}YZ7soYn#yJ zab`2hDzjkyjE{Z}0*!UyzdBQm7(PVj8tL**LS0eez`)W?SZqhavlB^nPa}qgjwI|^ zK}w(^ZN?1~Re?8|H~I}fjLr3r2-GUHQL`;;sxvqy}cx5(MIb4(FL3wI@qLxl3~?lbq|>Ef2n5Z6vN6p=@Pf85ZGUDMy-8 zuJTC2w|zu%bT|YGruUCn$PFyZTA_Ou1`A~c_4SiCcw9hPVR)42=^G{Y28Y@Vsk$<8)pmZmOmNAw|6HE_WP-oFL9ssv^O$#LQlF~y zQ@6hLX$V!y%|k$Y8U7irurGJ#Pk38+JMZAkzUXqEkRJn;^`UCqui~ftUAMDiUY0@JLIF(M;^0}C1m6mFvRT^kc4Si1jM9YIK3!+62nE9q{p;loJ*9_ z+Lgx&%2KM|KUhx10q-1GS$Yky9u0u?4EWk~3D*6*Js389TcE-@7vR?#ILHDkn!_#g&~{(CiAx2o-g z7ed@D#cnnklp)HG?Ez)@@$(iLALQu<`dpRp#7Isjis>bNu_~j~r5X}q|M1&nXq6@* zx}%)Bo|Ar83gQQVnnYr7?3gxrBvn|q&}9}0;~RWO=Q|X#P}%8#tlJoni+>j&16n3m z*27NG9)&!$mJh=d3NG`-YN7`qqy6Z&KfE`wK217C_DAfMKK9M1Try_~TMP)(2^!83 zLsaA1u4Q1nb8yEnB|l1TAuY&$2;2^@zkm%`4#*dK3?aQs{dPas9s1E0Y2JU4(veH* z?99yN>3To^E(Qcdtms2PO^aL!gL%5hJu@ZWkrirYW1&Cts;9udmp0+kd`m47;unCX z;qkFTVP?#z;`mNdHP@Jth)*w7ncyzq^sG0#nFIMWApRjxo)`IlpfXx7n*NSH+80Nv)m=AfT9^hHhw6*tVcT=Yq|TEU zZhzL-RAsj;lCe@ZV@Or=(dF{G=r4cUONN5?9>_Qw-mmUl4ZP(iQFo44MsT*WnvWjM zj7$nA)Zl#49(hwPyJmOvVC2g6WyRUPoQ26#c5?l;M>H6d%ql4qKA8cV$#m$>+<} z1nR8n4LZIZY|LPabTeeclbem&{G@WzFD+XxA5$7AYwe zjY3vnf2Ms_VXPkz5Gk3|@OeuD5|8~)1HpIyv^a;*B56P}IxLkmvd`GWq=L*rQL}p4 zDa)P|dSvb!(|c__4#Kqc7ifhgItepE?#{UVrbRBKhPx$uvcS|9RcDuORJmq-zXc3H z=QT8A2n&Ey@IlnV`WVKoHf=T-QQHMoIuh#?r5-GJ5S6C?246qZA~(OJS%t7kGDbE` zNkC1wYU=K)HYqETVLKY zJ|M17;{Nnt822eX+8rmQxE0fl83uDq4DOdg#N>(eSw~jQD5wvkJJ(Hy4m+AQ5Cb(6EDpG`}u`t+3RADpmC2zW`s zXNBD96wyhF+S7z5`7&pH*)r_nv^F;^rNBYO{Uh*A>i4n1VgAIJCg0rRDRLcbMcUd1 zt8FzwhU^xVst*|yIqcIeEFPOcT&K$wuk-_d+Df<8vWhW*`t4B~)6-O9V37@zZlaHM zOdDMgD7mt$MD@}B#@nL*(VIH(BSEYhBuvD9xYIHYXNE!JE;}PEUX;$xpvwm5d1gsx zLP1iauyBylsV0f-pWE(U8ySk{Le}4+vLltSx+}W)5s>Nkg4!%37UDj%IW>2*jD8PY z`Y}%Z6`h=Ps^a(Ranzhq+Oz$ik7Z(&{3uMgUWQFN^Ak+C{Vw~?qNni>agHwOldVlE zYRL2uC`;(bT#!EXL*uui)#(<({&@s7v2#LB9UI~<1Q%~jdvwY}>ludwxHeQ$-adeA z-#bWh1X-t#jZ>1mH7W`}ZQ4uuFH9=DyOC)dj^rJ%+8=jc+~pu(&%YdrCYtQ_*wRG@ zx((yCl=&uA(+O*iYiwyJ%{Zy&2j=frbX!Yu-jD9NK>RKO0EqdQ<#yaHZpFe>zj4}f z`0WX#fDoN-2;3|L77Hr5!P*?o1T*s)xc{&p6vTaVqJ@Ot`djJt;Q2p(5hSKN8b}IM zF`&=*im>wOX%8*zwwwZFoztNND@L+O0%$knhQ=N~M4DXBn9!6Sl`JYJ-_Dto4(Z2$ zBs^YIJE29Mq@J~EGJ|R9$R9F5blGTvmdwiUNj*s*<`E~6&M1?R+J_QLY4B79V z5x98(l(~!~RG2$soE*MhWXDck-K7FGp=VlV`mVq{z=Ja#2<+eYc1c!~7)dd%JB;;w z5vkw75smJnr3up6<=$*+1>^5DiOx&f+;S{uvpkimHkVT_|~t8X`~2 zZU6-nUh|XbR2+*mbbneZj8} z41|1%n^LoFSo$qcs;TM=QA@^2C%+rqem+q$xk=&IMk4G>gL^~u!{U%zu1(s=f~hgOMes+{}olkfrVio^U+H`+`ihF!Ar z%C!@c7tZ)(+P=c2%7-Y*0b zP+tAU7F-K6OwO{^g1_8LjdoQNdJ~lv&!#h5ubOlt_mJnlucc-Sc4+J)-k1_Vu{JqY z>C`j0yN3OzG93!Ie>+otmGHi#)2y8Jy{CQu)40j3t?v(s^V352DW8NV)rM2D0+u6s z>x9EMImVJmXWi^oQ3AO1$d-7R7JCD}DvBa~NW_}-j(6@9$M@pR<9b^*zE0;i#(Pk! z!8kMOLXGiqB6G`rq z-sWJgiu#<3Q0+JVl||9R0*~VGII$Lcl`)&X}#loU)&0ldy7%v#?E6p*LZhX|5w+^>5+0! zMi#h!`=#~|$H7PRNM+Pp0_z$L-RPH^OP=2h=E-$E>D`2ox(|;}D4l#Lg?f5Wg?O0U zP>0x(k(8CqcUGf~<0(c~-Vq`bV4Aj>>SKvP%C6pnxD#`CFk6w(jjRCe&+=|MJ#OeJ zZF~-W_2r;;n*FOA9%oc551R<+eYsP1^#qQHRv3Rrg~oQLP_`l*&P9W-3? z-sZhqB;cgH_4_JQJ@sCS3E10Wgu|J3ilMx{Jw4KCx~|b-`m5}oVVBOEndHDMC(0Z% zX~JLO$XH2wz7VE7B?`fuH-1uZ4Lb+)u}eSh7r#Xk@-2@j`JG2?Dd)-_fqZw9cB72LC8yIbEkRGQd79;-9F_jz}@R4&6wFl{lDn7jy?9!H}SNnwo#i{h)= zNIVHWh?;-79Jk5OU0~SdtY~uns5!l7uSw76?0gLFpnly&(`NTsz-Z-Dar0mASfz<= zA|r&KsN$E*#faZxmxErfXDaCu8qT8)ftAKi&K0Kqi-v{2H-xv zC;lVjFnAeE#j*299@;`E@du=@F^bkrLT^PnU<9n=UVgWQ2bw{Q#-K{qy9Ne%Hq*e;Y=9)kg^|s5N}(acaJ$*Kvp%^p8q< zwkJI0Ezx@D(}HO$64XyE{GqO6Qafa_R5dKJjcHY3yc->9*l)TI861RJa6u(qZ&ih z8ont%)8>zbb={o&tl9jb zYcQTir9dA$5CJ)7g}0VGVE*l8{4=)uRebZtKD|M3lEv6U+xfRu=NQAeUsgCQ$By$v z3nLeklJT4PSYj5fj~v%u<7`6p<6$gt{El7)Jru?M=r9bP9ytG`c4P~(81g;gpf&Xs z)qbM({p+H6koWY*Cpl>Se^l;#5!;>H_{7LpGnaGilpcA`_IjN&L7Qfu7=WqQCCnKW_<_S4+gmj zlQHIauY(U>>ENYK>EMLOL!?n8fN-r_Dk0R&!wSvqOKp^ z|CKH*>4{Me<*U37R+Z-HTh702EwwY@+sg+IswTkr8WJmHfb4tp z8;``A!k(EO7&}pn-RW3gS$Dh7uEfE&g4$|_U?rXP_L{)pLzISRm2yyN7Wh62k*0Sx z$<7xNQ~aH^(&Xotu6N1jUvECOx0FcAV}sv~iR~7lN4EVaHn72eXt34*@12Gse zBKP||?oBRGAKRU{VtN6LmH<66BN0}GbzW)ksrtNX!jgM(663Ciyz^wdr)}C%S5D2dFN`3)`-4dwGX$W&;4kxov$Hes?!uY9 z-y18Ir-1XWnY!M7(7RVNn$~gUeN=mqHM0?-`9=TS-f&6$oAL(LsL1lg&)sMK=XNJr zbIY!bKgxN7wS}X5jB0F~DwLmlFbwkZQM=ca7nz&CIk$;y<8!E!e5)vTnmunjw|_aD zR@1XPd0k8RaOz;#paCDym_LH87Df$F+a&Rf<~33CC;UY&78G@GD|qi=Zjf?E4`#yE zq>~Y3;=Cv?txC0h1H80nc-ZIk@E>`(kb?&1Q8&7N|JZU1L+CK>x3on6>OO&fi+j~# z2!z|Ymo(xc(cR&dXI0u)-fU#OUZhV(W@~%9>+UuDE?~-^+G9Y7K+)`b?EmN`7P&gW zzCq@F07x_izQcd;((g0ozoz(4UxJ(Y*A)NZ%YU91dba=1ONFh42D|bG@auPXYX;d% zB*Dh_46;8igo3S~tps9~R3m?i{*Y|vI>%Xu{-XPwY40R0*seS?a`2BvHmv^^7(cx| zrI8H7c5ll3GN>W{GYKQI3SlVywa#66&LdS>gpEu>9cK0LBh{~K7q(eDoIp` HJrDRVUbox- literal 0 HcmV?d00001 diff --git a/images/english/tcp-options-filter.png b/images/english/tcp-options-filter.png new file mode 100644 index 0000000000000000000000000000000000000000..380a817bdb167ee88759f539f43d8e0ae053f224 GIT binary patch literal 49664 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 `bvCGRcjKe%*hsnW}mF$}d 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 literal 0 HcmV?d00001 diff --git a/images/english/tcp-options-general.png b/images/english/tcp-options-general.png new file mode 100644 index 0000000000000000000000000000000000000000..fd59ea29a8915dd1c9344e8b5bda5320437cdf51 GIT binary patch literal 43485 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 MRURPn?>-LvA0#>2kpKVy literal 0 HcmV?d00001 diff --git a/images/english/tcp-options-hs.png b/images/english/tcp-options-hs.png new file mode 100644 index 0000000000000000000000000000000000000000..a5cf42d728eff860fdc2d0b224b5736d205366b6 GIT binary patch literal 28299 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 literal 0 HcmV?d00001 diff --git a/images/english/tcp-options-lists.png b/images/english/tcp-options-lists.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6391a820368e7a99ac90d3bab17e441fe6ebdc GIT binary patch literal 40043 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 z zESztPJ|q3u+$RmuP@a9BhE{jgDDLq|3r51NyFV~?7a8gAXE-caEXSVK z_63~muj$8A@u#?7$vqQPx}an#y1Merh&L!}X42BqU?b`Psh=CcgQ|J5yDk)1C7xrK zK3k$SzsumsbSQsa#fpSOL1xqIr{?g_i?kWlRTDj*hS)X%_q*tcLHTPl{LoT3=U7Pj z5Zg{pM8|oLg?lTxszt&aKY=oa6TKoa#!kD5<)l_?VVzN=Mm;xms|kB^nXX!-_<;6B zyLK;iZgua|=XKj3tz%6!e$f##3+F48pamIi7$-9=(rRkC8j~5#v7ei}*>UtqS=Yqz zc3CD1aySPoVNhzK(0k&(K_c_)eH&C)rIJg#wTJy+chZ6tJFQY7R`&zyttU;!jh=eR z{)oliv#Wt)^Q0h6wt|s8Dw1L?tt}z~8|PdtkilgATCdPA;x@7OF1p;;oXNH_VLF0L z-CWN&PI5KMrUWP1Y{{md=1`2EdgilEVTwg|Um5FF4NPjns~K0S^?6*W$5W(B?y@GO zGTN;J>~ctlho1x;Hxrr~hI$AOUn2^gG?`{AU5v=p#`iyxhGZ>v*)>X4D~*`aFITXy1a z*qsgvvj39{a7-~kiEj}?)kAy2Alhsm2ayBz-!ymD7n}1*RyhUyC~>N|N-6P1hb#~8Cm33;xISVNo|!*(j_rN}y7qavgqhC7*4nVQG6Pe;ts3*u(whXAY3B7~q4PA!bj#ACvgz}a;yoE~J zf8JWdc!qQ-y3>t*>d`GWmYh0C%~PfGK_|3`g8MBAf0-LWbDmK^)Cir&q;ynBtbt}( z=V7g&G5Cs-s3R{;Y5x{NJtz0)AAVf>@n^WQUdqMxyT>4fvV<#z zKZcjJrW0wxq4e*VU31HO&2{P$m(0SrHEMHeQry^i-cNPK3f8DfWj&wNVHXZZLAtaO z^Ch4PNBT?0&P5$wW)geK6@D*fy}qF(`5-*QMd|*wPMjaF{9Q0WfZ}6x5c%Uhe>FZ1 zVc*5ufL^QzuLCE38Bx3<|M6D|jzFwNZ2zT_lR3&##JoplOQ;TiZqjHy+9~IfR3#^r zh&?dTJ3}UuTx>yN_&K0ncq5p zlzM;N$N^#VVNK)P!vu*@I=jf#Y-Ggytl}6tjQFdvVoGboy4?)#wyFK@ZbLLq*mI?o zLc?Zb^@jvX9TfuDMe{sdl495^3XaBYO&-3pV0v#?uuxoJpw~yW*vHMjXOIkKUdP}l zm#zckxCNzi(@2G30Eg0E3Ar Pzje6o%_?M+39*+w$t8supmf(=wjP@p@7y|?%3 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 T#UQ!H#Pm@8$sfh4=E461p+{!r literal 0 HcmV?d00001 diff --git a/images/english/tcp-options-network.png b/images/english/tcp-options-network.png new file mode 100644 index 0000000000000000000000000000000000000000..d6a1a298a64a53c6e9899bb33b313e2054a3cdad GIT binary patch literal 48848 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 UJhfzePB$qjDkoAVr0@HG0AfSFy8r+H literal 0 HcmV?d00001 diff --git a/images/english/tcp-options-other.png b/images/english/tcp-options-other.png new file mode 100644 index 0000000000000000000000000000000000000000..07db416aa68bd1bfdb546a346ad5998a48af478d GIT binary patch literal 46874 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

CJ~r%9DP*`Qq!5rJG1zr?LFJr0O~uCA`~ku#+C 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

kC!Pn&0%=<>7u{j>4ey(Ic7CsW6%pV%m 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 E1DR5-AOHXW literal 0 HcmV?d00001 diff --git a/images/english/tcp-options-server.png b/images/english/tcp-options-server.png new file mode 100644 index 0000000000000000000000000000000000000000..f1748224eb84dd9c51a3acce31424189c5480c71 GIT binary patch literal 44311 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
2I4Zk} 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 Vk_|iA0XRHFURqhILeezoe*nLbsSW@D literal 0 HcmV?d00001 diff --git a/images/english/tcp-status.png b/images/english/tcp-status.png new file mode 100644 index 0000000000000000000000000000000000000000..478032624ce80928f7db560a80c3790f5060a935 GIT binary patch literal 48034 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 literal 0 HcmV?d00001 diff --git a/images/russian/tcp-circuits.png b/images/russian/tcp-circuits.png new file mode 100644 index 0000000000000000000000000000000000000000..24af7463acc43f1d2029baef614a760ffa1aea0b GIT binary patch literal 49776 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 literal 0 HcmV?d00001 diff --git a/images/russian/tcp-options-general.png b/images/russian/tcp-options-general.png new file mode 100644 index 0000000000000000000000000000000000000000..d23c9b0a8165ba8db456d32fcd9a11c89aa8c59d GIT binary patch literal 46718 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 z zX$KGcSBtW@*3Mj;vwnU0Q@$HX>rBNcsKu*8&M{HiiYbv`oT?bFV6P}cvX{fZP8*p9BPg)jeoM_*)}^gz?0J=LBBIW+2?An1Bi z2bn&V@~grS!uU@bD|AZZ(b~@>2jNPZ=Rcu-S5@mRxf&db;4jM- zUo#t-43%^`u9jM8Xuo=Ej?(*G9_l5vGmTojCb1iJjO)%_&uwalMf*pa36W@t4sJTZ z7~8vZl#zGRZO{bIyu7R0kh`d)Ao7$ag~`OT&3%C*7aRHiaU{-|CD#ls}Qc1&>0>s{XXw| z4_XyCNlEV;yLJm{`fl&T{e6F}MFTMy@2l|d&DVFlm*2P72B!nfBd7xiTNJ=V|KS?inLPBXWbVoZXB%3 z4zDpIL+GL+C3^EO+TZ4ZQZez8$p5Y)ApZSY5!v{ZOf7HQNK4#Hbbp(orLuYD?)&%d zDkM`Gxofv^UlVLP7B4<{{G1#g|8dyNjcOV136h^n&(jv`f5?9D++6#! zh&JV6{(d1uxTYx4xGs1X?9eG#c<=rbOVodJ4Wlr@nWA-)^NNxX_Rwh_jrGPv2g{qT#<9}Vm^`^?Xsdg&lzEQHB<4_F&aLIR zOKmXe@tD;4E>`}jhi63~e@Rpt0=-v$MojJ+HIa%Vg-?v52S&*{!*x^U{ z<@%JSU4KYA-b&fn(gGWO1Bai-ctwUEe%$`-fIlw9-1^#iv!eN6(aSrBKRIvJ;?KJL zFqqy`1>}3yfYt{eI8Z;d{w*%fXi9=ks)0v<0_l^45TU#}NywYc9&^TLc>d%O+W94v zLe^=s$;EhWP9D{a8f0ubvi8Onl;hSltKT25FZ_%WrO4#;Rq7)x;aj6>mnVha+Z(hk zaYf)^aS~hcTHWb4b8mluMtgg9!nbiNL|Z)^*$Rs%5(uglRxt3$mP67DQwqPcgG}=aQ9(g3kLFMCK%_o3QSDXQMW zPRS#;KgT-7CKToc_193i3{9sFf`#?k(}>*dsg=$aOr?kwn%;7jEsx!+9`DXMBfI!g ztMaComUqVTFN4G5rrkteaurwu?H3!}2Nw3Ik&N}obKDrx53}f{uUh@#!-o+R-a6&n z@^c-*;D?=rzX5gQl`R$+OFlSUkvE(fNcY)|v{td4$2EG{R zZ|n_z{1@Ny@3@~jt|mKzXqyyLGVz^-{D{Q^MV|Sml?4J>jjm89{Y#YOWCHc-Bd*AR zzjSp1Q9?*BZI-K|4tt)A##Jy1XMlBt#TPt42fq;@uap0Vxvh_CL*T3L6TSxLlPh5%aZF>i1vMyc% ziC8zAa=v)r9dKVuu8?XCS7aTgCUP{-=n53Gz6-uAE$?M)r$)b9cZOB};-$BqO@I8u zV;^s~y27pMzT8}=q;C9?rBHlGKTTP1cFkYEI}lg-?$qwf6DTOpP-*)H%jyDlwH60V z2}4I!XrLX|trqfL{ZPndL!-r#!+h_t6NK_MA5lxhz`~5g4TSNHJVJdYCV)PNtsDpR zfii)ZdTvJAujazZ^@k;RIaQgVF6J@qwAUa>op1dv`RQKVrh`B+0c9-xD-buSpa_pQ zY;rXTdw~Na*}%$ogA&%f4&jQ=^psqxQ^EI=#vyASCIYsuSk%J2C#W}S90Xi}d>5~{ zDHQ?;k6DLL)h}JjR95t6whXxsu#2NntxusGgbJ$u?_8xKnE&dx^wK|eYC+zv+$_-fTt7!;B4niF~JdP_n86M@D0&kAWN==*xkPKO6 zcy?qZfG4>wTvbnFH~8l(2;^IR+;tx{Sq6gLt8Zmf#;y9(Kx$PkXzAs3k`=gyabbE+ zy_R0m?U=j)*_HX#BJiRr@V)zk(djncmw+7SW#_eSOzUJRy|>`4!R0?)gSyjtu!daE z(Xq{)9c;~v@5OHA+K~a*6>;_LW*&F)L2$^P=C%DK&L>*jdo~$e3$Z!Hhp6B4UCPj} z921pR@%e%r1^L^{e-w99(v&%Dm;;Q$onfz~Bgf%i?9Zc_Q&;Z1bW9V}qpL5OoSigS z+MAm3TmB^;!VS=Pqgs16HE?UZ!uysi=yq#hdkk6)O<>z?$!u;iVcw%Q?^Av+G=g%{UF+xRQU$)8uz7WMh)D4Bk*&vmZ)B zfC)LX`>F0KU^Fg)p0IRvr8u~9Ap{%Ioso7$I@8ykc_U6r`qiZg(h;lXM*Wa&o-)?NorbN#Du$PkZ z*w3|n>jwL2DAV0X3!6bNlM0fPm0F)2`L3d}koalK zSJT8yS|m!l(=`!iUw0Z)Lr1XALg%xBCp!_TUz5KUa1aainDsc&9!Ys39M*a`M?7RB z3@I_9(Wm=*Oh3GJfz0djGr`P6d%NpOwO_SS#@nY87`se~g)a;B&pIag}W9EDZkx4^0KHF>C{5~fm|Kj|%ZC*PO zk|R*VolQ%L4Asjucj=MWoPKiInLw_*egw~+YRP}%Jytd0Ui;_T1$pz}!#7nz2sh6k zmsc9fN?)5~i6sRkD>j~OxQOI>d~Y!fCE}i_EAYkg?B=TAOXbZ`jNpsWqOS;bey7h!Lz?24#O9cPbMhJimVho87l-CSRd;CnSYC2;VZ zR_j~UF?#tz8;~16$oM^wJhVccsg)~KGRRR52-O|s9?(s%4`ZP9Un_&1SxAUkJS>W? zIOsxSS<=Xs2Uf~+gL^p=_GzU>Gff3$1W^ub$-V$zB-!M@Dk$$(!~y90HxG(oukZnv zK4(HwJ1l~AVc2Q$a)Jc*$Zjx*jK14T(i3wFGmRXRzkxku6suV;uIjcvZu}W%-yD+o z{ufh0a|RC-N*mwks!RQqiF#9KOY`84*NdxcZ`{uU2~4GY^v}N8os&&{!?3AyDo!6U zPO3n6g5y$!a<@~b(QvP0lz*}vlo*;SFxgwc2i{Vaa$=2f=x@5XahDs&AWYo#8}!i4 zcGJ7sE58|*Kae(`(R%H(rLJ{}Z!RW6RkT0-mbwph8xOhOz8b^M5B2#$rScW9#N&z; z=F}_!TsY1ers(_Gi(aX;Z9>DSpYbA&VF7hgHjlkeXMp;%A=E<&0;RmsC7;8)n(R8; z16N-U?{Nn$=c{tqUoyEMno=0>$v->dCrWl)3mo=B-qpXosl=b$e-R*kaE=O(`!Zsj zAP8Va!|_04smwo7ZsF#p_78_eHG<~SgaHQY?1lmyuN#-CDte>+)V_Yr++4hq=wTM& zCD3`V>!a2g?qKzZS)Oi-$!^_wS)mb=#kUHRbZ2-d=(_yAe#4R=m0L9s*PK)pLq=9) z^#CwOPuQ+h={FNStky^)kNvt_x=gDHFD6J z^8I_J+343+!Z$Y}DX@8bDjaY2dz^ZJC{U43R4wcAHF8S+#DhTKQ6NK&UG2^8S2Xz- zW_2i4C8Wex8Uw5Z({<=j$ZjN+jxC1vM9XHj z0?xU9K6t7c{IuHUWz4l@5|m;Asuys@0Q^?LpLHOd3edj7Ta|W0Khl{0Mfpr6_u1Q~ z^~af1Fm%#)x+%Z%-#5t7Q5-842Qs}EiZeeYk^Iv|Tn1+M#M~aLUQ$}|;NrP$erBBd zCMm+=^TsdZc03{?UOaHAP;z6FZL7#s`7|~L% z;NbT$d9D-4gDwv4Yvg6J4S13qEEG|Cj*P)yPTQb_I*RPOBSd4;FMU@4`NAZnSm!0J z8yQP|9UnUkxra5s2=lu%g4z46vESKFJ06a{2?R7c;*q)e%>^HG%)Q&+w}hysYiCqliKFJCfvt!IT9EAjaDzmsSz2@8I21Qf2{JzfZr42# z@$2-cwxx7;)p*U?8&nZ~@;n_L9wr!g0;S?JZ3`uW95mjSxdtiGpHVmFJu30sq}oTE zJMO+jSZJhhff-5S>-EM56s$p?W>Z?j2a^dWbtA>uX?Tf6wVAVHDEBq{nU8)dl)E+=oX-nr_bK`OJ+@H!4%KchzQ?a1B1<-jtNWj^)O=)LE6@ zD@s#T;#|`hVg)!CPZaF0KA}G;)3b31FR|;~CBr+(z(JvD;tOsigwP87$C8pK*4_iM znty?$AuG{yIIxhQU<*e=@l~(k*NP7Ud z3WDux%TxHxeD2gGQ@`A&`R*^S729phE;$3AD%sa2SPL$~UC@?!MPioHo#F}ZxhG?k zIwq*7VIwg6na2!&9I+$UeyyfjM@xohlGxGQayXy;Z_1C#q1}l4VN5%l$r-!JqBtKJ zK2`Mg#evPBb5PmBc`q_Vai@_7SjiMWE4;yxjWzNHnr=8@l;2^0IPLpan}-KtUh?_g zZ|*r77{ltH7Xy)%tLnQ{%X)MF+d-D6Ht!8{DcX3Iw>_XZ>&pGwRRO#ycMe7Bj>~aM zx8KJRe!m*r`#3I-3FFi1OgZ!-3?yRJHgOzl(VNkkKbVE0BjQ|JZ)X0%&m(MTTiVm% z)IF2)m5r{EO~0`!eq!G*KQA41wq8B%zP;`{PbBizqoq8`E92GbndGB==>gu8CGWMm zewh|-y?bF=ar<*3d)OjW_MxVY48T^CA{N@vYNA*C`zDDCU!^h^Zf_K;E_+9S(F8v0% zn>0TvBw(Y}`-|^s9OC}(WHJTMYfO9jiFY~qLgRSlSYr3ZEMNLb0|n+aMd(wV>$xE( zYdIfG!nFu6b_CCO`b8X_=2Q7j_ubF8NZ~DNt4M2P&SFkTd@j9|?{V*fd^=bN$}r_j z`I9%Nacl4f8KnhGW{0|JD8grfkuf1=tX;}GiDd`Jp3<^nzBRTZe2zoV`{~r1$$B4j z$JBM=ON9_XMi@pLi|!Hin3cQ^NnK`V$89TkV_urV-mULchojodGK(~c$V%Z0hZ|I5 z<&O`b^I8Fg_?1M!+#!TN!QssaDD^AkCj+a3TNkR*9wC7$P^<|Nn*#%!#3&R~O0>Lj zQu7y^BQbGVMQaUWV%Z$5rOM~#njLy(1&W(JHh-rw-Xhz%aJYG^e4WhBV>2FV8=xg9 zf(tyc?ziFrJ-j8Imw#p7SP*AOhQPOHp9!@{xbKo+^UaC1fPP9)KBMM6$Nsvbgps1A1P`A zKfR7SR32k#$)T(5h00+D5N(Dp&v{jscOF%ARc%bx3d>6#&*R-0(IPVDzKA;K^NgU- z)OR3rovU}w$TU$MFDp`f>=VJ|8>eWag~gW=lOZJ&ev8@Ku3bzdx{$TWd<3oWne zfX4UzCwW-{POp13_LrR*#;YP(P|=EAw5oVnd~(ILwO`r}+7?d!;_NqrJ>Cuh9X^E!O)+9hg8g4Mk9+EMA~^kf7S>Mk`8^W8Y;O3?i} zb^ewjw>a@rvCLT7)Oa|wJ`-JtP6sd4}tpCX*IlOHkyX?qCphFf(bAA`r*DxWcBCuc1y z4&mQ_G(0X;GK}~!RADb;mtt~Ry}t>}#`7-3TqSb%I?^jSy-Bv%m1EOQbhZ+p?2rm! z?&EyZrGz~B)NF~zG%%)$y2*&y&y(nbpb zW1_v0BBqU48#4aU^H`VL0&|#eu04O^bC)A1@toFcV7XtK%L^9mKa%fsHA zO1SnPhv%%c&KlK}NpcjqqViRX^PsUY5qJ+p#63c5YPX_vy7QiaTsvfmQUiaJm^Z<_ zVZPrO@|KSw;#%Ef;N5C<6^uQ#X$GN{}coBuI>sg&{!I^C31sOp_;n7G8Lv2C0g9#mjkJQD|A&Pk$oKdn z=7@DEmdDa1dU@s(K~RArHbu4aj+Y?`bZ$56W|}M!F}_;wDayJ13oSXgsJT-Mf&0uV z3Ak6JPT)i4>8j^_K?!WTru#FB=2xA(ZC=e1Sp%L&T(QEU_cj zB@xU1_JnW`INA6Uk&*cYg==2Ssd?)_7C7_&tG7)dnE+OI5S)fjs*vyRF8#Hw*=)5n zyaXY-22}H0loz}Wu>BYK{2#IZ#Q|Py|8$oB4OS=7nle6d2ay>2Uqc;bW=GG}WUB<& z+J7V>z!L`?;mqa4m2Th-^c+BM8eA2$S5UX>N(`%QfU~IQY2(+`B#P%eQc)G$*lJ@! zA{x1T5#6SFUfc9=D25W`|ebw&zvBZkK`qs1H3o4=)Z} z-(SaNv1+6>l;|W#?di{TG6)xwCwak?s09jcrszp6%EIK9h#9oVMz`MEmyfU8n z@9o%U)?QvTdc-!jDhzos%3SYYwf5<@j8t<}mnz^qdY38Q|t=5%ZKzBoK`dHeL|MoZGoaI**&U`1@>0OmM!d#Xyqm+Q?Ds!I&p1o(V3;HJ8?^ z?d&EeZxlT^GaUJz7xpgPUeHCe)Xl(6F6vP5bbd!Rc{aRvyA$~h=fC^<%}$P#&snrC zmo8yX4qCt?5=`GCx-xy<2X9=ofXBx5g%28$hE>rqU-wF^N2HGioHQLiCnYBr?M7yy z`-cakymi%U8*ANbmq}>vXNU>Nf^^{1O1-wWc0q>s?#Kw8*Ye$+-rnBv<|Bbd2X%>Y zHBcC5WF#ht@)Lh_0E*aAhmjwjWkj1Q+Nkoqeo?cl=TNRy;+|WjmRwHh>Asag@Pj*} zChBurS)Pr*x(t5$(1#xi4!~y>`Q8#VQe(;UsFdMoA7UsWFfErEP^u||!R&$*vU~zU zK?kC{rKN(8hcc?@CUycSD z&jNmsGMbp{UAMhe?Q`@g+rLJD@f)tcQ~B&==+yb=Uqc6?P#!>8y}wG$1ZqwPAw_Xf zLmGnLS8{sAiF2nx7kd1mv>kEupDa}HG8)T(+5UZaC}Z!q?oZAp~Sa4_z+KXZ+MkE6K`9 z*AIrc->ZiQJCB7Wnv@L^Xp1$giq5*U8*EBTCl=adt9-s(vqm=8CXpo2j49d{5jTC+ zF36N}prJ6rZ$KB?xaa1FL$wQ{n#g9*%$mmMi(Oer+WE6tKr#`r&)8QtWojo>$?HT-3&0l)R z0J<>?^YK8E%IJ7t0|e~O{{+Geu$k}|x|nVAzYCgdC@uweoPIe-TIa#YmxG>Km!$@F zrBtgq4%{xD*I|f_(HWcH@w!-0=%jaP?&s{50V(N~rL-WizU1N1aL>=D+g4J=>qBRN zJxDkL2~tfMile_3n8ke?yMnWNmw1_O<8j9VDaXDhc|?ftSkq0EK5I&4Ux%M) zha63Va}yU^-I8TwqbP@7)){ly{jixHF&axRc}{E1pH!?+(vJprR+bcyTZj{sZOOf; z?XlM{1a;c|-~(Pj;IKE?lzwP!-L2j74LnCGoyzdcC>^whi|E&yGkwgO61B8V3445+ z7aeC7i?qAhznzsvkx1F(94HPePI;1Kee1oKTE# z%nz?p;%$#)a@iD4-|p@vqn0)7HtqRC^R;2969sNQJ5gv{aw6Bxd9=ya z-p8{?>+|Q6#?9!po&u2;uF<7Dri0LMv;EVamecStOv9YH!3|l%>NQS)gg#)ssd?`= z51O*ImOolBe8Gr&oMXKmRS-q&Dp{#4k|life6u~G+dVdO@8GTrJ!xC>f!N6$THnV0 z{oHA@Z-F1~kGi`s@!L1Kk?Cj5y79x$Ny`Lua$g`(-Wf!?y;p6CjTX5}S3Zqo2Ta+8 z7F_=P8R6+9L5AA{*h4=OtH5CXOoAJ?7|ti@^=Cq~sWtJDjzBlc52s+zk3&qU2(^66 z3#Mh9o6a{?^Kx7Z$h#BLbAJlbuPy8LCC$IG#Y_q9TI`_Jf=Sa z@dLcc+oQriKyOk#O-l`=BOv|p{0YI&yWJIDMoA`gir?v&>WVXN&&aIhG#0m5n7f~z zliVsU{*3U}#hr{Q7iK&5J}uH>@-b$m zJiMwLs6Oxj_rOd$Z?q-TmbyV$Oq5T3po~Q%iG*eF#uk^)yZp!j($USnddnzd@ra*J z-rhaWw$$M#G2uE4FT2ul0*Ct&t}!z6E~zJ3|c7(G~o-ze!KOb6_q z`uh69#yy1HRPMp*&0HIw_?~%5%&dha+KxEkFJCET89 zTra<@^cN} zGQqUP83Uzx^tQ=od3#eHIy>u5Ne!2tSMqR6>rO%6O+3|n{M^?m1it06*Fg%+@i!-7 z&EP27Dp=<1f<9;2$)3iSBJ11Sv#z=J%` zBf)1NypPl{_iRzjSnq^|J(XK^AGl)oQY1U^tImyA&hP@Pys#PF&zOuqhe!l`{=Iss z<1DBx!Cx>bwaD=|Ee*}irpGWzBlND?Qj*pGEQ+(i{{mu?-hlzyHxnG8--l%I^P#3M z74`DdQntI3qAU*CV!skHWyXaSJl5JQ-Sk34UtLe^&-UTZEsgWo&HHLwb@0@Hm0T_% z*+JKof;X{PgT11%eD!p&q9R7%e%}ujcQZ@8u^1gr?piIf@#q^crA~eE!X7U=-l&?f z$oKCH-S4lunP%QZMZTKJmT2Ac9~ql66rp{1-$?Zf@6+VYQ>13aox*{tpHv5syf^XVy^hS%Vm4uct3c}WR3508O#$|hxE)tRA|{-|RTdHMA`IeB^D4O>=LHZ?t6URDcnxis%;qXb$Rc!m8ioh<24pfQjj#-kB))a=$RysuO8r8YaCvdaEPek60| zfY5|W5Fw$Lu#{8?SqA^AsTT=7t%zgv4ARowkc^=!zh4y1S#|d)<|uS)v@iglNQSxR zN3#T-D3fD!m#)qi#RZG3DzV3>G>7lBDjqz({Jr~*p9}B#k)YAJ-S*$!cW((g%)VZN zkJn;hsk}}fo&2>Rpf~Z&I&o`5BO|+eYxDEZWu{v0p=?H4-vwonu}W239>}cPx3I8C z`kRqQ{El~`rlb2-U+-UekwX8e6A!tNZ2XU0J%clBpw8IX_`B%EzKW;wL&L*(!xz7Q xx0x?yy7=XP({?aiB_yM#qx*jI;)4~E=XlpvH4HjbSI`%)6=l_+Wzx^z{U4$1SBd}t literal 0 HcmV?d00001 diff --git a/images/russian/tcp-options-hs.png b/images/russian/tcp-options-hs.png new file mode 100644 index 0000000000000000000000000000000000000000..05319bc5c052d05498c79cf202e3c1191e8673d8 GIT binary patch literal 30376 zcmc$F1yEeyv*tu0A!tId0D(Y&;K4n?B|vZ;2$10JPGoQk1PLA>xCM6z5F7?~8EkMJ zU|j!RIAFa$FAJ{%tZ4=#?XIEyT6FIqg;K z&s#VIh5=Wn9`jDYDtXzrZ-7E{TQR3)x0)`7u$Mz>wKC0{PW8Sh1eHUR)0|x`MP%23 z-+>Pdi#a2t5oJ~&nYey3-TrK4_YTiMi&W{`LmD!LSbYNn8ylN|s~zJEQ7?50`)d7z z=Cj2)`^G&v3G~Q(z00Y$7&R9NBuyEx@Zyt*8G3!;4&K^N`hbTKPxRU^O1Rp-^cR)2 z%(|W*Mjs>mkHU=&T?YA#0YN8pjIV${u*ZU%vF}l*&-HVC4z5n}B*c8r4;MUO%2yy? zA$Ruls}r?IfyY{@x{0zV>8M=%F@%w+z>Vczj=qfLw17hcnSe8o0E@~Qb#--d%=v0z zVPWefoHO8J4z}ofJb3;6py?ReO&f5zT~uZSyg6Go($wLGKYO9za)BvvAc@oHWC1d& zqFHd8V2n?zcId*?P6-0K*__ zSGyuFdR6`Dqwj)1K|(o=j7_Sw5K2S)didjlJc~7;gKPx3n76BvQh%bce|5p+(XFlOA3EJmLv)so@Zw{nk+AtK%`8Siy9cT z(QZlRe{-CUS^*ObB?;Bbe%shG!as1ESfnozLV@i9QYe1BPv$>=6no(?1ovTU@$gaL zD`|4{f>P!8*Ex?}hLnyY_CMd*?lx>^KIh?>0+!)Bw;ATVTY^T&c`b;_e!9`)pxmrG zLe@-2M@LSsd#2KY{c*oB20@lSa0i`kKu`lMkSG^S+`ml+#pON@MK36k%=g>5sk)tP&B&;Z zX9&hDRj=Qu=@F|1*0p9A-OW2yT&*qAV}3W9Qbv`QlwL1M?5DN_Q&xxGAd!3X46 zFDa9IUOgtcrtNB1sXw7h$e9}ylP5vbj-RZ*CefTeLH%Qi9-{l}U0Zt~-u0#$$(HMv zsuldB?Jv*m0xB8MMv+2ELVC{iT&lSyM1+=R{rBsQLuh!_Cd@^yFj!SSR43Cf`z+FnByeG#LeHP%@hx z+s;-KkK}J*h`L|mv37hszz}Hx9j_ck|A-K&hol>bK92jLx@gRlQg%6e}3d>qOi$r-wK|J3y!`u)T}?CGD!?><5v8QM1;b$$N)8J~*( z64)UsDk}C44yte7#4%Xy&)3h@*!gT14F8jQX?P7 z*p3QDH(0=@t38n`;C%`o#zZ~3jRe-YETBg&Uqekh%=+Sr&G{phZsBz7)A^xt2DTY6 z=i{Ok0@~f1S#R@UsRo*wt~({Qi(VUP*GkN3bh%PFB<{1GWPE*zQ2czU$?KR|Zt1?T z!7h8D2nT_W(xHOAN-~T7?(EQPx|LW%&m%!MhRtuCBa=Mh9b<38qb8r&3hO>}B~Yvl z_U2HI;<6n;E|D$r19~twIH1VH+5HWWy&}0v83Tq z;$jA<_u*z!LEusfTQ3&NZO3T?$oj%hU^iv+8AuMXOE$%AV0cv*m3T7FyQ_w4=8x>BXO_CM)QHR~kzCiey8BG5m#! zWrk{Vy3>g7ciuhPjOmw+>!Go4hkAH2^5th=+Ucinyt!o`W6ftSuGT8TzGQ7Q`l>2#~7HH00-1cCg~WAOYZ!nv8IXFMMX^E_NzZ(dmX&e zkKb)NVOoB)`pAQbD7^iOa6zDVZ>Mc*$Q1#{CynhAQeDfQEE9r0e!}C3Wl+-v-t2f3(N8)9n90`5{?@kyAkc#c-iGZT+i!s0 zy&GQr-yHK_$sqSKUfjQR9|w5O>u9C-y)=vlHZHr4%`|-0T{%YFVv>K+#s*j!XcuU9i3(}}b0c9y2bANYF zsR&PHkQ`Wud^H{<6!z1#OceWSIE9U%--sLboybwXeQhh9g?)PaJc8Dfpp;SA{k;SS zKk9@4rN;{T{q+HdS$7n*h~Xq%Xa0NM&rBqEpl0r29N6r|h8a#I)yjRY!%6tx@`Zd}!6s`u!>8B(oId$kORJ zjHV7CeoZyaYdIJB0F8vrU%Pg$j}IfXA|s2;^BYU=dY6DeUx*FYdPpAou#Y|T8={h3 zJyI5-&MGi1a?h}C(a0wwTEDPY5yM z>ms*Gy`I_TW%tIx)l55@C3=WV5?AiRsr*CBywl5Lr*QZ<1sw!_l+;HQJzZhdx2P-| z5U!Ey?6xf}tRw5Bi|o5%du?w&z39Kl3;Qna)i5fvvTMu@B}^?<)@I5Z-)Xl;TYO=4I%Y5aZd342>^u0e!!WLpgj`q|`e2m?PP|$yKj>7qvkT%0#@$zsT*$nlq+{$n0|5NVr?IrNBJTzVo zub;9P|25^HqOQ#6;y31X1}?mjAZDhOO~fOcHtS&GK8q6 z8oH$|BTwjYz$G}ourz;=D zPY2;ulUS(uu`(RH;(DgvSM;LZ7|(>|yO7^d{Yq$T#~FBUO00Q4h|B*5*i9#~Q73cu zz;a8~%}p$4|E(UY_P)mcrQo%8U8edxOwjgVC;b$39`S=)Z8)h%>av9e(k0ncqacP; zlH{5Asq5?0ogb7Xv#{J-pdi<1B@2r@gg)xsNWII3w@3zrwgsK;xycXDR$xV@K12?R z=N+t^^({Q3=!eba3ssW(gnbd~H({w`Fa6Dzs56#rFOVydvv2B{9@25rbi}NKGsrcb z(-#B!DE~vmb@Q!v!&%a`LpeG+>dU~##|MHGhheW?1(_(8?P#g)KYv_ZT_5zW6crSp zt_}iPO*-zLBE4hq)_#AwML|KKDF^~dj*N_OyKQTheFA)*Xl>XyZ2a1;?RyYQo}8RK z*fTzkVJN7q)HvR;78VgfF+Kx<+5^ij38~8Ja)oXKUdG>XYj;;uWfXyTD&%vX+8Vr} zeGA0(&h)}zvg3Gw9mYdn4FV0*)@ezb0uI6&g7Ptx)@>bU&_6t92Z3Tp4biVquiR+G z@veHFH7Xe!r9Oo??)v{>Qv|*)O<(m;-+4?2;Yy(O@+yCedDO=>AsD^4rJGUsrf48f z^E+6IK!T!mDX<&q%2p}i++CnWy`vFG6r2$O6NQI}-k8q?Vj@6Wr>CdCfBz1A5~s(} zB_9C6QELw9256ZCV<6*fq!xf5fp#;d_D4i%6aiisXi)<`9Zhp|!K52sowHq1KU?{% z-C%kw>Ls|eyK)Ab8W|}U*J5BZI-SP5AjG5lvwX!VS`#+DQq*|eE_TXVTU@tBr(PKQ zU5Ao>r#XFOFUUBJnmmu_b8tZ9kR|%SS12cXm;sae!MzDAB>Sq))8w`9b-M&c+~3P1 zY4fDRrGGzxK_S_5$gl(NRQVwjqk&4gTJ$r9UUf$~-^((4p^AO`sn~sJPe5jiLTvK3 zanDd)qX#PmViG)JR8c~mb9h$yCOR zX8llv`x3qx)5!rabjX}k6!i>`wlZuAeyI{LH(SjgBmP@Lad=@t%=8bgLaeE&srTQu zM#jy}oych%6&f0I@Q{TwPQuJo^c#1p0WOIAJ5AzZ#oS(tRqny_?L55zZ7;!bCye(Y zz758&Kr&?fl(siY)Z#5p^0T2d&%>C70Jp2Oi}_F-TG1mzd+W75x_+Z_)U<}8xQ z;s{t*hp2Vo3;RUx5W5l=oAE2LTh)GmsvS6u?D}ot?F{XcV|n0ZA~at6Juw^i4;BLzs0I*oxDHk z&<0+z_5d>$9j@$*6J!=_DJl-v)zSG37}IPT-HR`!d86?#;hGZa>cJY<`mTY8O7gV>=a6K#7ol+n44!Z<^z;pO`gXV&W~Kq@b#3wu ze&&a$X>R{n5ADCjvGQpn(5jLsiaNS1xuvW~7<@H10|I?k`rcGbAQrH2C7((3kgWA` z#5CH;NIU0iBA8RO`$+x;=f#_x2;Vw{h3R5UD6!t-T$XQ=ly)s@P=PH8U6#JNC-mUm zp7ip<5x$4PL|IM~5o$$-s}An&YMv3_(wCrjKAp&mi7n7j$oPlJO@;3#)U2+cHsr(( z&^~Z0?oJ<86;)zW|F+BKXbaU0V=k;`{jk18$)0mp0)pj&Kc!D-;KsYnkRZ+E)JQM ze521o@Xr2zKO_@?J7>d)LDPu`XE=_wHedY6yOGG_TvV6BzBqaC2M4oX{*-5e`a^Yp zqR2;zu%%&kwM~P-VgLto` z47v)_{mJuZk`LIPHa`nW;-{Tkt0ax0_5*LkUySQ@pNE5>axQ!u zkbtMyc8IjGw3Js;%Kqise1)8A#a(MMnptl^a)SDG+e!Ve-_trn~V-Z zlwsudLbB#2h)4#oin%Ij+kC_3m4VpWu%OILV?iBbc8?5CyP6lEoy$99%ia)=xKXP| zUoW`l{3j%W|BZV9!`M@& z1-PJp7)LJKz>^3iDXCkGZt(Hw`|M?y)SLCra}{NI2}oo19C;S?usC|^;)%M^C3;Ws zvoMr)VBSWz2Aj@GXfyTrD5f;$5sQpsjQYma5iGo)wj+x8|=y4yoyT>SgElQT`xdUmMh{t}K$Kp(D0QQ^Cu8=l3z(87CTYIl3S?KHQw_wmaRQ7et02`RVuyu(# z#-cK?sPz;Fm86$BzkUtBe+l;4t9~SQw?9%~@w}HQqX&z|+mf*v(db=uhBmIbQ*0 zH&wu4ajzCeLq^7=Fv^tS>kKf9eiz8*W2gvVY=#C0!IkFtGmMU*{vs`$Nr(WEhG35v zH2WC0S(oPrGPf`A)4bi)Xo=iUxV}r#6g=ht!rgn=>DAYzqD{|H*!xzyDAge{s)yTfWom2ERjcs8uH8mxHTKh&yN(#&b7F~u_ zbia|M|1m+Sa_?fda!59kQl=hdRyo6A+yc<3tF%~VLJ9%-kDJC=r-b?uCT~G7dvrE&^|#U7rt$;bfdaN7IC=(f!LE!L_zC&U@8U_S3(X zfz_T&eGiNrkBp;fIf!b&{J0f+(c0hq@}%zeg&6Vfl zyaMn95X0%h`G--*8}U;W>FMbJ%kqAAx?Hh)0JvmkYP#vPHCHa-z6&59U7^oKctR1~ z{^Z_<*Hm!o12o%-7V`3w-#1Oegn$w1JH}WVnNeHbo|=3%glYT7cf;NB@uvJ&y)(L z@mh;9XM+U^wbQ5?)?WxIavUuR9D-)28^C&OM7s*6*@bYb^pE zk=PE`uXW6m!UaNhGGXIhw;27+-3N8RY73^~d}}nfz7i6B^POwi0EV7~0LreCD(HWC z?%=m$aPQu|ZDRWtl)2YAaKpY~>p9Bp2Yt?Gf*LN-)oXPFfFq`6&K_^p<7bo4#a?Z| zaSH760E;y90c5`x@3H~y4X_^KuRfozpHCya+U?XU!@L!w zl@qLV8A~Abfs*DCCgHr7oFO21X-NcxmSz&}8glU#WUU!lR6O|V0&A^;6c|CzYS{I3ui=pg?`J4vdlf*S} znr|mdD+~U>zGtU(UuObODq0EP^tE)rq^2I>yIlY$w_RA&j_A$5|$u z(0-DK999XQrx(U@)OcMMP%^3ec}NzgD&1__FCp}RajIe#?wuW=ibMy{sV?%nE>vNL z2VMRilDi&ccG$zRxnnX?vDzNKb`uM%a*Io9)-yy#cufHF(5_>Q&5Mn%&!|jWMKU)- z4g`rcpo-RN*n%WyLlXZwYwtGe9K`esJZUfchMh-jI(+qBK9+fQ8&ZU%WJNZaW*bt9 zoi5GVT5qO&wi_sCNcotUHj-^hdwY9h488z526$E)LC2>j{a=X)Ee_O2$-DC|sU^kI zcS_{hI_m1`u6M=}T}XJih~v_4U>5kyx*}Q(k5MdRuLg5gT z=TPU`c9Kj|2&u&1#_#97k{)_(wIc#FtfoD00u~7Kj^i00GR~pr?&t2s;LsZXT70e` z*>lim7G$RUIUzcchGjTl+sXT4)<=61o}_rY-UVes$Du^;KVl#!u_=yzeKt}^(K%Nl zHoCPfL!qu!D|&cT&G`3Luw6lr9UrYL?Lsq~5lOqZ?Pw)}p$Pk|ag#9CZ8fdmp!our^GPj()%Jy;;ql9eWXsUyk!;K~93XUfCu!UHodQNWYMV4*Koout!i@ zTH0%*%`94M?7n?t$!}92bhd9hLR2t9X9b;l3%hG}YZYP{W{?hEwiB@_fxn)#<`e^F zqS9r^%;0fxt-`jOdrNxV8fm?@`+k!4TN9TS#;FNRS$?zF;l%3N+S=uHe)2kkyUw-& zS-SEDQ5Way_L=t7f&k(!co7%dB`6M;I2wQkKbH4N9V=1&c2~A6OmknHSkkb;wSeh1 z;5~oU1E_nFvv&_*k(+}4baqBk32?;0MOb&Cg9Z_`^Tld!#U~s>*Y$cW$ZlKH^LlLl zAhr590wDt4v&WY%>7d%~RmA+!X|-!+4{79f?JJoQIl%XaaNv;|_5}WRCK4uWoJtQR zLm+y`5qB<9ob#kROXyDpV;Srld+S@x{aKOCl?%zM=WEaC9?T*4^w*m#cBU~ytwga5 z4Bg0p7MuFxY}_D&p>!)7qB#uQen{vR?r z3SjU>H|@fUXl!?0`b29DyIc5IZ^$o>jN=k`!H1I81dILTJfGAXt=VfA3Xy=^fiIJT za#!v!^Y<0hz4 z6F$#%lh#=~*Aqz!x{LYxeCpJyrKV?p;hhP;xx2e-Sm(Ih`;94(2uOg+tEvV7zWXtU z;dHo4;#-0ZBBkDmBf=D0%80B&-&q* z*x|SCYZ9O_c0IF0Fx2QVrOx#Dk)Qm}lU_zq5M;wlXOI8L&d3j?14_DUpNiZ!!pMa;Af*xFr@ zR2u|Q@PO@ko{}Zx%JZ^m^%{no(26vjr=BDA9O`J@E6JHVh0j<1tb=2`N~r+C9iU)S z_3z4(+mli}2yy_}3x^ieIsjNn`bx5ZK(E>7>^|MgmoH13qHXl*nd_SCdQUAh$`Sh2 zvkyYqACL%11cK4|&@N5f3jCMZM67YVUm=ONC9c-~itezO3 zq5Eq|8dafLW<6Pjy|dcnLsBKY731i)kpMRk~4?tAsp--0@ zADZi5r&5kC7i%dd<5b9@RGTc)9r@X7-=>`OlCc*)X^@AkmS^1i zj1a%Pl@`yth(9bXJzYYN3PgO}k)!n+4{i{{tqsEf`_X^4%IZ3+-QsuQf09jmkM1(< zUh0DFuL zA6_Bkr<4Rdx_wOVc4Hus>FA}gy@8j`F0~{s9cH6|ER*W zp6gvXSm3vhJpZ#DU|=(BxN>|D7VptH+h2pCw)o*WF$8G5hpX$K#=@^?w;%nOg=jWG zHUIa1pFRB8*aKDxj`w|x0QOP3UFAv{;m%~zoEUk8H9wZ(mE)A>1PHXVa!slwZW~i7^qU1p$bvvXx1EYEvNc5LoV*X|n`<52V8b8a$6oot%z<4B48GtdZOTkg0C47)s}}nY{K5K=n|} z6uOO;G2AndB%p&>u|G$MYnOd$`O4r}N9Krv{@g7(QV0TBR?*BKoh zT@(My!G?RZF`(J&fdL_=sQ`2-58*1q{-jG?dfMF=0+qiBm9(+*A+`JzcX-n zClCm!p>C|!)d^;gSiVeB*U*6P{mjD6ydt$G7928}yYY%0Umq8cZU!h}njkC7eHI3@|{!sxkhD zZ8*Cznr}*K3219JLMXyT^vH&4otqC<> zVW#Peh$ge9>1_lpe78n(&}ei#t4^t5eML(P1}MgOB0{q4F^m1cIiA+rWH_9L-la?G?Zw3@&vRA8!syuCL2GONrhi#Ko(I#b5#;Yq(#e}HLzC5<&B!z) zTBN)Dv6s5`3BqU>zx^CP|r>>i%~E~ezEAaOt8>RR^EF?zc~u7wbK-Nl}&MEt>kyWe_LGg zOZqG>$5p=@QCDC0&+b4k508!rIH&G}&URMeQI!R6x?k~LRTsl2{rIeiNGO@Y0d`&} zBen37?h!an-OZia+Ro~#+@Q9PvBuj>HbyIT(Z99v;g3IS28MaH8=M&E3V4^VZZUOu(7%0B4>S=KEHxXX5L)X;Ns+V zxm$CAPIE6iRFIM#+g4yo z*0d-G_LN5}%Ph2heGusK4P^0lj~4B0Q2q-=*y?!Ed)_`C!@*qbE5eo&g?|4Q@9gym{!^hW=4l$Gq7Li=1o(3T)$-ARGZTZL>2s?Ku$Gg7J13yH*?9QBUaLgyNel%GPO zK2M@m3~WX!Yx#S~r0lx?bUpZxiawhQHY(_|OIlBWLb-c`>*#E%1t-nzib*KXB-5t! zFr4S}THI_Ro0ETjz<+=xsO3Pxmj+m}@*tYFZxmn8*|~hu z-gUq7Z8Gr$U(>N-U+wyN6wg;XzBWdA*gJJCm7=Nm=FFc!YV>r{0)CZKYN8;cJ*Y6A zxIlB^zEdGxGW`ggNKdCO`3hDuo?Vy9gngy#=t-_fDIGLLywixeR#Jfh-SnR$a;sWm zhK$6LtXtOcH?=x{?LMmC_$5$ov}g^Be_&YdM~D-B^MU(EOM*`Ud)FI+=6DWEhK|~w ztIl}I?!(SDXilr7uEJ3|pEVP4ZuBuf<5%yY@Ss)dcvD6@MTD4&v5N6(~Gi zyYxkxYI6PKHIFNN#_LTBan_j9kE5e(pfYD0g8A$FWad#7K^%YxN$Wu-*vB^IEfa^0 zTFit;d{vFU52N2%99ELxkB9i{jd>-2tJ~Y$JUp`p_%WcKIUD6!;WBEEZ8U;G14lp7z6uA>W%zPT4yc=$f97 z)XZk%>5wbx*Dho{0%V_|J0>RcKo#3>8u2UO9G+V)Pu|?>5TYAW;~{Fb)_&c$Dduh62{r!nlq!6 zH782}X*F1d>Z)VIVC{Q!(Tr#_I2#jOccPG+I#U^#s_i>uIhpknZfa1}D%4*xiL|&? zvJCWhP$rqX*b>B#*&oi7+S=MOlDY=lEwuB)!(Y?VsG0X#TQ~t9dOo^ivJ%$PhCV@F z9CuD)?pdp$CT0;DEu~*tYdd*frTBherJ#$~KnYf*f=$g9676sZY2GL+pQdT4tH;jQ z;U`XV{w|GNYZeE|^^w~8lM{>%C)%@z`5`BJnn-B4O{JHz3jlxr?3t9<&+Ke70OA^D z&)D*N8-9Go_pLJSf+}VBI`URqSHSmZci>s-0uuVQa z0Wzd*cW$vNs(O=?0B{S)df-O@-hH!-now5yGPh{^XuB` z)fwzSy`Zo#_NI3UT3I1>aw^rK@hM{z$)!jYc5iz-Y`~35$eH27^gEWSRCw6^H2|sA zDQka}(9)+i2?Wn&JyTx#k^|J<_m5p1v>u4e0y&0ulo&^+gI|+b?{t@YsGwlgLjJ|c zLn{W>uIGdkH@O+NDd%#i+^z+A`RBkXb8X8hvzsyB5rALcX`y?G<16{Tym<(=izmN7 zE^Xt5yf-1>$dz6IbrPShF{D_2@H4NnuegK>+dOgz9%OUq%;ub(DNtK39`xpC+ta;G zYq(ylXyI0+W4@KTW>R=VI87yw$Dldy^jH@60L><*Sl=%{6Z@7w^)$MDX*8TQ9x@Np zf-g$r38&6j|4C7wyHl_ydBM}IWaK1mXPw0AZv1tYL%#I_N6d%sg^FU0G9$m7;B0x1 zm<2`ud_e6_-L>vpKruKf-aT`uL@S;A*Q2n3_stfYT=&Bn6x4lWDn~Y+ke!1gbL6au z*LC1kMg45&L6sP_`Bj8v6e{V-!rDlKg)LGil@mg=vKy`kwb>cbD-$$aV2J9Ib9rH` zx6!nl&^<0L;u&EUkn{B5o!O#Twp(NrN(ncX}D~Y z0qk-hL+QZOL6%s~%+3s4G9j+%V|Y?u4ak#=sLiYzU-D%V8oRiyqpqzRS46-unOxB> zbe9e?oZ|d4#Xu~a<*-p-DcT+S60c>sIDq%8j+bARBXM?-?Q(D4m#%eM(@Q%f1(T`m zuid&g7{}MD)!E$DR5OEc-1x44d`c;Yb@b|F)9B2^8$H0ZE%{%qzTX&yb8jTWaw4P7 zSyObJUBAgqk#kCK)x)g4TI>fsdiq9wyU95qJP-u;ogB5YTB&@ckQ8J-X7N4T1?pjL zO6mE!CWk&yCB*`p^0U1KW>wbuY8m#>>(x~%?wi?;+08QP$o9L!Y3i2w?mYSs@;y#e z$!oc(ufSK+o^L%NbhTvvqiLb;3uAXyGwT5Xh*PTB`p) z7H;PJTBBm!BTaJiGAJ&_z6Hu!*7AK%M6~n*+-nXh1=*I`-WlpmxeNCR(6_~Xpv?XI z%*#CAeRO%_73yepHhKoXlZLEFPbYTXs7Qt7b%Ozf2svq9wqYz8AW%5Ns+0`R8rhhv z(cw+>6t#MSqN3T`k@(%lI2<2V#JN^nz5UKpT|HdtxOzbQ*dXWZ4zYKVz58i}F8h#$ zN>m@rRDfJ3;YxPj+>v)ucJG^TNB*Q<5kc611;!RtPSjdbi)^3{hmJWWs9GQG+n4K@ z3rX0Te%H{|HY1h9^)b@|E5^2v9T1SBe?H2|Xs=Jxr-GshW4W-xu4auVmMS@uotFEm zxjXw5X-tss)fHS1#5nHNOXw9Ch&I?xt|MVrUv^IWBu8|gbIOFYFOZ#&tG_qSWeVei zjg-Wc`N867qM#ZWFx9N;27`(bBc#W7eW+SAhiZAlajqa$%DLb1wLaPu-q`Lq^>xPy z5RY+v;vOA|n^)jtD;XQDwEQBa@m_W_a~U7I()@v;hopPS3+zGaN|7pg00%D_{(f_! zu|&I!l%ZZ3OpjvdD+SwMV|Tm1M~il^V#D zFWbGG=I+=y`5ji?`zQpxCfzIN?@kdE9`(fJjYD}%z5dc{AS)HWmm}U!9VRMtGra_q zU{XBGKvUZ{VA{O1ni2$Qi&pP`iyM<_h2wzZr?_w)-LdQ&%Mi5v00Ew zwt}W>g>C`|$S7jVJEsjtI22+v3(E%j5a;oCrA>cF>_-Uk*3dtpvM(EO#t%8{fZA6R zoSL_x->Bpq*V@L@*128X&qZW^hhiu7n)BRRa!}cspJ1nY-f_-k$p{(KOk2;No*rrT z6&oCH@zwnFW*hQtD}qcN%WL_=nX!yP%g!rB#E*frkpcom!Bs;~DKNhnyYj?Tp|?MJ zDeIR&LL4u_f|wh!v$!`qvQ-NszTmv`FO&QkKB&X+lgW`-W{mEL@Kye*ximN)hxX%OY* z=H?YD3{IFyjsL)Ju~irN==Fn~QW$r6t@J^eKYnBhZhuf?@a8w3XQ<+FT`e6QKG$#k z%GkGaNQ<-Rci|_ae9(jKQB{7gGuF#>RC|W!Wp3>R!Z(u}j7w+#a&16(aeKyzM#zh8YHHXg(#A5*F4}v*9POT0Xn7o`GV^M23QzD%YZ8x4p3U zYE!9AT1M_BNimxwEE`|@*wR#Vc$gFe!tLbkWX}2L7j+q(-^3&=#~B!edbvrC!x?2e z!6lB)ypv(6t`ni#3$XRjLDoymOH0Yol1TQbmS(Dj6G9!*YCkyvuPS?lM`1;uSOAve zv%n?b*03*XFe>rVe!+r`asSi$$H}f9v?HY)dy94HYE1xZSHB@;&$6w*3s@O7^YNq- zM0L^u?sl)1#1H!tt5RJPqU6;x(@sP70uz-?OM7bmNG*r}QGInR!(c(^{#f_$beN-E z-9)Nxd?la2sB<`1oMP;ImJ`e3S;hi>#AH>*=Q$pujdzjzkL&2uj=SDo@Z>h|wMHiF z7&h8DEVOBbev{jI9>Db1!wRiaFG{U-8v+ATup?X7%{tBlU7#q)>Nh$H#-G+c8BL{x zyGNek8sQIyg{@N-{hH)$d?~kdL|pQ~<-Sjf)J#~tLcvDO5r+pg^Ki&5Cnd$j=7AxH8J9toxU<_L7f@0qkZyr zBj0zNsoK+{R`3O_o4;-s;Iquj@6r9yvzchyQV=*@S;(ZP+nVfZqUNuEPiaF1pbbkq zPgmiKEIm|e92_;!`wf>PeTqM4k91IWV&mDVLc5o--o7G|;x$iw+`TC`wZkL7+#&WC zY&_epdItLQXH}8y>LR|SRrHCC!qUea6qE+U3HY@F+7tDJl|4;%<_@;KR*BXwr$Oop z)~fc@vAytXgmiH;+iht2TCCSU#_o#w}1iX!f4+ z*c$2mwLV08Fytn-ir5%!l$<`abkfLj)ViDPImQE(4Ryo_yF!d<%;DiBYw?atwPDk1 z%Wt0|iX|`IHdkuJ*KHP_%|te+O2o(#)XK<3VFfRpj;_qwPj`k#Fk&2qWxq%98>4}P zMO^dJ7tw5#ii`!kam1(f)z!Q9e+%fib_37O9EgqXSe1XN{&Lr8BS(tp8es8ngfxR5d?ye4w-Zme z9It0sE6?BXULOa3iPPTH7~DQ}kl*qqgqAuwq0pjw6bibX=s3JFiGbI1Z0?T4n#Kfh zj>X0%(w2;L>OV_07%>_#l-!RBOP9I7_~|VedToI2 z7b!BKA&$Y>gLmz5%(pQ~=Nq^j6_=tLT2+iWogBsMe-h|7;Fc=!zG~pash4uGKh?j8 z*X9qOUKIZeg?ilOZYVX)QU5ae#+SoqFtqeeZNG%U0nMn{sY88Q$?S~|JF)tzKm%s057iR^l@j8U?L{<-)wGFzNn zGDXzP!c_9CkR+yHS696k>Q6JL4IfjL$axhU8nQ6e z@r%THUhOHUEhpMjo(KdwVYR-1I@XWbfLIAs3y-(B+BYj=B{>H9xU zGejc+s-c~eMvnuWw4yMSHkWB!8#Rhi@VW*1*n`iZzZ+*THEg}Hc!I_dX}Y36pw8UXrJ-w+nDk-2Hn=ZQ8{7b!W)EQ zp@4lrB|M0y1aY|rZlt)(&CW{F>SY+P!W&eY4T|eoedWrN9~y))6ljaHZs;TfQ0dy2 zA!iMnn_sd@OuyVt{x-*`zzLZs=1Ja=cd_O*w{)iGJQLUXOjRBx4?$ zLE2M1ZA~PJ3piq)vaSYty=u&L43B=RDC?qkrNIM$t!ziICgFJrz0U`2Q!SOo4Gqq| zY_1k528CFj(B>Sdjdo!{awL@MrN7m{uWG$eve%P?045@Te?!|v0WoRl=MdK3j1kfb zHMa?2Ty19a+n)?G&%TbDKfp7W69>CutN>82D=cUIaoz!S3PO*b&17aTb{n zNxWzY;5cK;^e3Yq;FE*j`+kd5Z$X6u$E^BzV|ea zrM(HrIzM3glr0GyI+v9V@|FkkCgTMf&9ape^1e`#@wEa!J|6}m}Dm`$xi3^4SytUfBEG6g{!ne3m3c!;gWhP6UU*1ixS$NoI`AjZ~q0W*1_G_2TV>BWtWOR7=cj;@0W^0?UK`*|;u$jqkYrM8Qzn^|% z2$g&{^%Rlx=6S&XsO+tS>Ug3qKoSTf!S$iR-92~$54WHXdAM6}w+Qa;65Jud-GaNj zySoH^JN&+_-TJm_w`%*3nVMmyUr#gB_ukX@oVMlW;Xwo57(gQ6(-eXx@atM)zpcia z?%7O-l7RFIw=e2H6>+bL02dav8jA==)_7GPM!+dC!ZHw*MF15X*%V`C$Z9LUjz_st#K zoR9_lK%W}|?Ca4K&?zLxo5twaF>(BU2YKE zZ6|{qp${@2@(F)6AjPMbG+4p69adc#5JMS&DYvbeF5rdLvjBBkx~NCogqRxnN+bgO z1)!h{_QMA%+1VpWnmJs_#T3`Y)9nid+mZ%&1WlLn8I_@tSMkZ}205y_pIWhw=q3Z$ z2Z3mp4VP!Rr;o0Vj&8O>qMC(s8&7I{o+F>|)x7qBa?Dk$^Mr1Z8tM{cerKQ^cd^RS zlSE)d=8)6()*KkWxLbNY@AJRbL9R^kMwgupc_>X9?I_PH(mfLL1+*zHcO$>@w^|hB ztlml(7#NI^NB{aGqgtIv2=yhDkwwi?C10gct#Vg|aKerwjdnZ#8133BJqtTpHaeOe zr$7H2b>RnhqU#BqR=WDLDKyL*t(Ir9o-XC2MvUsMZnf;fx0d|5B43v&$rR>Oc}rf( zZQ}2UBKkIqciWh!?q=0l$q)Sa3WWuLZ3fO`lOVeXZFV}JbGK~%G$K_)f{G=YcAblx zMZ9R<&DB^kIkrk!(>sjN7BJ|Q%$HgztT0F?baEKAM(M?=B5FZ(bO(vu>mB8Wt)pPKu!fBJgJ?y9jT-lxc?DJW&~U9zlwmm zZYF9$(-_(+Gb`mXx$Mcx&5@Cj<3+Y7B@k}vRrw~%%^vWY-&=5H5!OiQ45Rocs$wTL zdz`d5!$K+98Onb9YHY@PSzEi{**s zp-;2c)fS3>mB%V^sP$NRHAb5^Rdc0h=ib{!P6&vE7|gwnEN| z8yX~1$rdMaKLEbj8*LBkXj6+*iPy83EsfQkZeP%#hN?+b8Qyx3H1Dh~92I8+VUKC@ z%ra8b%*X$*H|fd}r1lS;UayH|Rub*aT!e8zpgNHpNAHDC&fTfQrqVG(rd6l+V7Vvh znTL~0?+fW z?Rk>0^j|CLBD3LH0G86I4>?_r!yG!RS2L~{l5tutanxf4!g~OSU>SGUVcAlpPAN-? z{imzRA1OO+P#ht@0>W+45nFptmk9PQiT!}94ZJAX^M%n14mK!ecB~-Bq|Q?~`EldRy;t$xojWUKcoWxxq4g=; z-9#2E?p1_Ns-By5yd_+x_LIz(f;KSabnR|9va)cLYX3KvJZT*hsyd5w(^K5Yrl6dd zsKMF$gi!`W%%dIE=vMe!3Ezv`dh1SmwN&zfp?^)0&1UQ z5-|UGq9Q6SZ7iJDlr38LGke;)HbB|`DvK*pc)AoM#3J9l$)m`3abc+DDyw4holY;I zc)nrnDCDF?d@FZ3X3{f!qdQ~)69+~2|ptI>q5(hsL2(y1Np@8-0ubMU^F5zPz zy}S`?7n8QgCus_C9;=8Ii6ihu{iPKBFfvWT??eaCeXaI@T-(jf&1n+w zcVE()vND^Ct^RR0o+1zL)iqdO_J1xMbp?3vIb^~TqiDLcv2kG;fyBq*@u&87;#~#6 zF?T+LjG9)74_AleE)Nq8|qA zS`QW<9gX>KHVa6ZlFd1lSo>1?n4oCtQkoNpV^ zMWDL^_&?jM{OT>nWl32a+9*%dVf2wqTS`kR%hh{%=<#i8o{$d{p{^~73d{I77ra{; zBECKVHSZz{pk<<;&F;MSDWUTM{1MfKI_VcA4rlH6?CLbxj}ij2tf1xYBSQ0;Kp_32 zySp18lz#nU`S!)lzhdbFSXgN4<<#|XLBD1&jtIe}vWYC>o&V!P*ug)dHXwl7igi~d z$>FL4^k?mA-|K&CEA?O7n2ma}X2zh--uc^eL}*tVg2IjiU;zJbasFSF)y>!XY^Wy? zl_j%A+PLx8upQ?1XpSh!_b)ySQ7LO-)F=WVIq_XGH0^ZxwdDJkKfw9*8(-Y28yQh< z!-J=yIqW*}e*Geg8y^@PEFy+O#1f%?3m%W=_$9>hSxh=;9TD!ni0=cZ=@6iQCzlL| z>6v?0L~-@v?2K6Bc3RFPm*F5$Kq3c$Y|$+|z!O;i7QiwQ5tk%YfzF~C?}8RZm-Bz( zv^_f^xQHQ?k4_l@o$Q9(=mWJTSpZ>bPniQeIY7iZgXK+vF;SRrsOC zd$aEnebHDALM+-B;BNK2!WR@OyLi0(#BV&g3_vrPs`v&e)r%$ii>r|hDu$FfiXOFu zx-4hhQO|iJ7~1%E%Rcn-y1YrxGNa?su4znK67%A$YO~NWY77Ke@Iv7nuwUZq0wu7v zmdi+sO}X2rO>1onHTpNNlZ2>^QSzuE5evvrHS*K}U95h*0_gZeK#Y_W_ks>j!+4Al z>qGBXG8-6OjcsLU%CE8`$}F0=j7^02s<($!rQTvvILuqs?-zD@$z8tLv}63bt6Ls< zGV*Z~g@4>8F>!-S-?AFTG+jYWdgj{bvwd97OfvvR@X zuC!h69DTCWXech^HZntz z)O{lvKX7gRN$F=L31e&gwb(h$#YObAWI#KlG$CGFQEA$4P(RsYgEr%-{ZDpy%deXR zXL0r;Zn3;YrZRIZN{kaa-lRTO=I}Q$UJdL&U47ncdh<5PNhtPp7{g}pI2YA!hd;%5 zB(8rkBqWTnBk8o7ih1B6f9*n4kEiI0W!1BfM!?Xlh6MMAl?|T|qS%Sfnb=mbv!k#w zOwjZ{#C=yd5dI^`b^c3LHI!+Xkn((>D7S-<$Kn>AV1u3rwhmQVO|m@VVyAC`aW>We z2$IE5@m30$(cE#>&MlVe#`otxPnXBDtl`2Zyis1_9v|EC^RH-Eoz-@8-Qp2HEh!~P zNh3?tB<5aC9wX6X%8W%(;n69Ur%qE2$9@~*UQ)~kpGVRooSJT8xgXINd^6)n@TF(w zID;*8b-GM-cp@%>zV`%_?Zq@-^MP0jfr*hi8rs}5cvVgHjV`AJO9iz6`uZn}XSj6g zdXcz;Nl+*d6eIDgnT>N4ng_H9x3UJ9W>(DWJEz4b+F|!u)TVS$nKX0us&GK+@x52p zqmJSdsTCaFM)v$x=4MW8$<7M4Qlcry92#J>S55ynLW5jWV#$_YuAxnafz6*K?fyZw z1~Ra(%oFb>QzK8Np*MB(<;nU!d>9e;4_Qmv+r?z89K?6HHWtMZ1jzY~E7|lvX#E+3 zzY*l&6fNk=!>z}K{?b-ORV1*8j}}zGM`@(x&x!wJ37?)Mx`E9prclrfUI3|t3-#Ds z1zg7s;j&0BPc2cn^ZXr?vz&zn@1r!m?rN+oq zbQG27FUPhJq-QCBhD26i5Z>JXTSThyj_0PPRm!k&>z${{gz|g zj(W#FE`4AeW%+Y%WHoCPrBtQfc#Wf*IbIhR-wibpRA&mwy854D`SIL+bB)XDKNWgy zsup!v9FXKIt%ARFoR}G%9-6&82^i1y_i;qlyd>2KU5#6DU~vt~B$aKk_NJ3XvT@YZ zqm10oaXX$jiA|e{Ou>W9X}*`eVB-t)1C$7?8F~@(_AEmS9&OQHF20|!&AnFV`Nls2 z?It6cVgdyjUV$->jm(aix}@PG4BTD?W@+MC#JimA%i$aoT$Boq(F<~M6*+%lYz@u2 zHs@6lG%+>?-?^PFH@PNKyS3=@u*Am3T2uG{%CWS03OF0sa%8~R@bB#_Q#9j__ThdMC6Rg?1`cKX47A~sLt%M&M2&@;8~!Cc z)(_vIWEo(7vCmu~Loiqxj=uh&>vb$VoZn#nX8-Z`jA;7oqG(_%CwZZUT#YQ1X9sXn zfG&}qYSj*m8+I{e#gz}g`bT<}89FTg5X$i?1{nPxm^8;@ztpfDpbHDt_ zW{Jotzjf}}@5`U8`N2WvyRhf<9DWg#hJ;vJ#a2L6>urP;?baW{6mKxtMdXmnK=h-} zzjdS&FeNwl3f$2hj4UC-KZZdsVw%Hs~^3B{v?`0BER2kGu3OxIIg5I}llj5{~#h>0N zL$4G|UflgAX6Aw!-90Q{cIKV#jOSWK=glC<%8IV|!z@C`xOGax0j<+NXwM*O;E;kZ zA^Yh;oUaOu)87u3sT@4CytUp{jfg5*AIMnx@HQ%V@gw)drHOia@N2{1dbJrG>6?uM zsaxgRzwu`}QCy67avPXbE#YdKc_N)7N@B4JeX(xd8HD@iB6K{wEsw{aU>A%_SN;6V z9d7^FVDy3lPl~L&*xRAhcW(shJT|iP<|PyE!>9KRD#kPWWf<4SlKV$1^QB(Fgn&LI z{(jx`)f@J73%&xf&FPRo^EK_%-m}q;HQTeZ=ljGMv`33Fu*U19^S9y8o?fG2u&rnb0 zugVr7hUy7**ah2f7jLH=B+WU@R__^}vDq!3`dKPAW$Ux(X{i((h0tBOxw(&7vyVM> z>3z=ZLW0Z>)_-n50Aow08ITSLV8ITy%m4NiZY(RBU^dvq?cgNe3Q-UB>1@ z75s#W$7P*M{(>`poOs-v`u-@M(w68n1(P@?e}15(qa7QBNq{`mfJeL712}t0sNGqaOe#uG&{8|0}*$ z78dTwLFVr6^fTQLgG^PwOcTCdhYC1^Gp5E&E7{OWyem3+-nxNyi zOwdvQeQ0_iVALXFtdP|4`A06PJNp|#j!_oS`0FeBKaTx-lGngr4)fQe~jRn>$D{{zmviXAL$M5JfZ zc@(s&-%g&t=f5YU@wc*c5~sw7opvz3(9dja+lr@;RYvf|gEV`>X%C<4E74-YPS3!2 zGvd*oZ3ESJcJuDRk}yz!V$m4>C6Anz^I7?juAp|Rax~GISolv#4qpAzko%bE4!`jf zM%whgK-l}ROtC;C!DK%AW@%~Z1~b6~IL8QC1I|)7ODyDVL*)%_`*!EFNz_6l&Jim&}(dalHN+D;^nt)2M*9j-78U=2`z8Tnx^jGYKu?IW+iEyBWI( z|EeZGW9eC0Q*u7SGWdWT_{8_n2@g^%>m+##?adXx`X;+AgxsW(-dtS;F~2<)yj4?# z^*L@_4vRO1JfRo3jQ`xw3CC4BvwNC|$3Kos^ z`d%^r%L-5Y+ro!f>@A1=u96fXu!(U|#mt!RX?@)LwLA&K+C^5tRWZ+r-d=ZJrK`y@-?iYc%6QFUd+&*ldM1x4#Z&CSI_@89*&1{s*c zGk2n8`pojv`snTWmA@G7@oYU$?2o_e{{SxN3*E5~DIyFRvjwV9cTX8gszOPr0(=d+ z8z7AgK@=9;Q-+v0aQP|vPvf~7on&XX`VyW9G-WH9Hzoq_v?C@cyhdLx>#iuu6B&3% zexhWs?+`;~elU>u2*2@KV|;L1)(3`_S)oKO==Hg;QX9vv4-O7b_GOI#IWK2Nv(LhH zcGa!L{-c*&G{>d{FF{9S%0?c)s@U%@f!nco=LZOfEr^nz++ui&x5r3U2jW7l*vOdb z*{CJ9)jrpBe9NgS6}Vsu>n1UN>M@1Se4})%AvZrkaxE8L3C7(X_+suL>P{ew1;HXe zO)ncZFAe5pVWxS7wZeAS{P!@%*vNYMB6ZWN zTI30K&VC91Tw>VmNxiQyZ$GOt8%l@tFNF=>2-P@qjj__8hYZWBs;WX*aBx#ofx+81 z*N?8L`6Pb(Sz8wTBvgm6*wj+u0>Z>i#cr0@p|X`(W{W?jvgYH+g;aXhXPAIMC1s4u zSZ&wnakJC$NLW{r3uZo|SPFX_x2l&nIsr#y$00>^7uQ$aNWE=j6xk5p6}5E5^>yt@ zE+J-|{I&2slp$SLkHaR&y)v4L;Z^b|qV+)*3ov+3ArV{@OA!b&VgoLIVaDh(zEw5p ziqq7x1zW7Z9u~}!sJ9h^T)7Qwi$kP;HPKU#&d=KSZJCI0F6O9 zm3RpNU)o^eH5wA16&Uhz(@iaTKr)q>+-}H?un%ZMym@?-pCGcvpNqiGi#0+)@T@;l z)U*zEfuk+6!)fF_)ONtgpVV-}a3b;8nkmygjmz?ibEeKWx8w6hj4XLo>It^?^op-0 z>q=Gf=-YTAN>(YkTbE$!$re;Jc7N>t4k||WiTU~YnHd@%h1n)mf+qnMz!LKuORG{b zCKEjkRe3Ag#OC@iV`APyw6d+Cnv!`W;=u!u^~)O#R)s;d;cIO%->DtC6RGY2 z6}@E&F`YEQ=yN;B>^dF2%JE*Y!t#9L(+O0fndCUgFKizG0hFM;I@u@WY zojWi&OB2vnxGBTr(&S%%?d^aBaX2;t1|qx-P#(UvYfHTCI0-RFxB1u!Bz!o`hE7WT z=Sf7SO{{ZRHs>)I@u#H#yH!;Wye>nkeaW44oh}|pA*t{R!0nDa>v^Ii!SnbZ0q{~h>_)=quMR^_4O(G z-m7Tt173WtA{G>Iyr0{=yw27>+uO4X+Q4_T80X620>Ke$IE+NAViu5k3ziklcEMDW z{YX4>cun-IcO4)&gLk0Nk=p+%u)KjJ?SXL6st|HRT+i)B~_JmTSSyiijk z^THJ}T_(HaXd*FX4hy2>}2i~%Bz$vC9(e^60veg|*( z@VOcokn{2;GHPmQVE8J4zWD|12abLa3SsbmP9GJ<<`IF7m_@FTX9FTJLiJ@}!}Jzf zQX&2#^EfeU8FNXh1B?Ow)RWnBGU%s#t3>&a#i}|B@*~$!z4PwaS zEgi})DO>-4f9_jN)-}=|i*9pJ|4TLPh!`wLXvFPuuYUOhFHbX|ahMc{V+Y7O_|X7W zV}Xr_KyYL^#uPNB{yMu2Mj$6DLn-SjDchev_q+oonD9=n z@h;i%%s<-R+rQF4BYyQQ_ve4vF>t>PKJ~mI>8XcfLi+nkKlVLH?c(C%MbpeK69fVo z*{FRTkOKsrc)ma&s-&B*wfz9d9i;2_S^Y)Z;Hg*SnVrTAo0FHfu3sW|_ONaZKb8rq zYWucx{S1(g=#m}T?2YV}fAi)|c7C+YK>I@~pt^1+WUQ(F*qr>ekK@Kip~eVUl;Y)M zw99<2?sU+t(beJ34tbGllttzZp`=5irZftS#k;t?)ks!br-c#LH3F(=ckmYEiUmg|Z&Rf&z+ajdLnWz8u8(rLd zd~`!4nth%;n)%X%VK;4Ku^`3dc zeSMOiSKCjXN6|s$jxxMHm+#QaOWC~Fzla~6JliG7VuZUmL5*&YwRh110oPA9qeK5i z+A^FyZ9L+!(Gd(*&6owu=Vm6ULW`Hu%`u=uGIn@f*$m{PhB{`+YzNOd_z9~2P3M`B zMqAcLJ>;^1Td#aStI#xGO1)Ne$_R)&Nj@*`PHrq)n7TKgK86=AS)Z&>qT*_5JEQUR z?#*5aunZJn_yD4bjL4gUrE3;>oGjysH_l<1S>H=0Cm~3Chvi-o5lSrC#EonuF!F1dj z^G%F)<8AIq{R@oEap<)3?pA3MF~}+{ZWQv{uqry)Z|Fk&G)lv_*I&vX=&Z-b2&HQs z^|j@9(n|xaKie)=GeauvYc%MOi@ACRj=a@g@z`vg2sy~D^{t@RDktGgJG7}LeNQ3b z9k~r>wY?4ty_#lf(FJrLfQ56OA22nmZ5DGRBR8P7tvs`>jKd{398FJ&1#`+5r^3Rs zvyxoPi(ls1`EOZ#oyzm?ks5u9Pl%I8e;=7kc0X-8I(mbF3-sH5w^i8h%ADA8>5|1y zBR)1o4o-q+75fDyg?VQcUR)ao2a?ni+<@QrM3oHiwmRph8p|3HWrf9)J18hr?}Sg%{8cJ{Eoea`(Y%} z1%skr?A9_7<92V~w7p-x#{I0HXE(lTT5RFuer~1-32t4nu~165PXhNjVGjV845<3` z_g9XDh3fs`U`g9%l$W}{Y6%gb8yeu*cp$2cd@aHkNn_hJ<0Wk2%iVhitN72q)$I-bksb)PCe0I^x>lmTY=la|e zkz#~|+F8?vosw78bx0TS5}(fKU6rY;59$RJl6>L zDS2~qN0aC{di=2D8G%NW(wMK_{jABwMUDt-u%JsYHG;1n!01djHPHDW!C|U zbdLhlp>5gJrBhfXu*yj3YjybCqc8`Vce))qKtyFVjVtJ>`3^ULWsKbro|SQMsW_J~h?Mm7Az z>e9**%Cy(CWULUwe^P^$~DIb)?IsJ3+bB za@|Y$Ttvx2jtQ*jA0ch}ifv7h%FwnNu0KmXXym3<@K#PBB9;jPU(R}MG>{;;TU^c$Yhb1lL-}w3X$FJX(*%nOJ?IZjL zKQ}wMo;iGR$ZKQL9d~pjT_x7bU(-8PVX51H+$izd$-io4_1O?L@3o5>y|N3=#HpBM zVig`?W{&>A!D!aoxe;Soq0YTh8WJGIvs=+2H&kyP=;^QM6@6M%kdcy{tfan3f?v-+ zIj2GAmHE!whM@+Rqe&WzNIp;eU8L)iDx|2S0vL?i1_9?!s)SxlnD{sy^Kj^jM>V5S zxT!MLZ9k21+lbh5-*4B$sEMtOvqfi_xp$F%DlcuK=;0NEyhrAwJB6u76IS|L(^Az* zU8@mnDOp1cP{rt6PZ#tvVX1*8ty16QekvVuC6gGA-QG|{ioRwuj!d7CP1XrHkr49U1&8@I--V5Y1j&OK^G_Jn*cs^m#pKCZRt{=AqIQvWX0cM>1Z& zb*>u6vQsS$I>%AXFr?DO^aa^aUF{{^FlpF|ZGSqRv(_UYm$Ut;BLygV)Q(>9;G|I$ zbx1N$S-MbC=#HSWHiLOVi4F)2_M8Q#wkPr@+WRGWx8B|YGJ4G3Ua{ux=j_WZ4}X#h z-7JC~%-4JFB5i}*k%O(HYjfh{qg!-~`CP`L$YU#u&n1LD$5zP&;Lug&K2=aygnjV< z-AZI)En4s!oTg(6HC-S~x2j8t=W*FNOVsP0m}0p}t%0|IS1&3| z1`nvrQbr$4UB|fw4Az*JF3q_Huh7vI3Sz!ZD`cW8BrYV`d|hTO6KpD~r_zay$vUQY z!UNQtG-QA^9tnuOZKb^}_mufwYElu8E|UNqkNHYYQ5jdXho@Kdx!{l~HrJ5pdKxOE z5}r;&Bj!aSkKWT&MquZZaJQUL7&r7gkxH?}kA}9-WaoyL>%q%a^!&l-Y{qpF-{hs& ztv(D8Z-qQTRNCFk65=G3r-fba4|xgy?d97QR+DQS4NZUlmT->+N^0Q8Fz3^VZ-r}m zK4eI=-O*sEqApbs-R7RmkT$R~g6y6n`$~B~?mEE$C>0^htO#{~=L>xS|SG+ANU(kDB zY)%9Ij%`@e7l=sch^aJ~SJ?DaeDh}#HC{AR-P7?`v(C$MWEt)|$$-Wfe}3fUUrZP4 z1}<4OH7$N@0utV}IPxXy`F`B#KYR2oKE)RZ=^sk8>@z7}!kqFWCaTBfGPe%(!C*W3 zM&8L1V%3e78S+;-A>+FwX!F(_fQlJXpv(v`Wfn8X`T#chD42Efae>Zd_yx-G3?jJc zInA5<5f!~3=8N+)$8YeRg|)Ac5@%|Z)(?3+yZ1yon3NWL-dZzDPm=|>O}RFHy{@3M z=$gFlu3dcv1iy9lXpSs8)B@&2(~=-M`d2(gT?4+W!^}c4^0%O`X|PjZfUlyn6z{S- zBOAZSCVPztBP^AQB2%)Z)xm$BT}j>b-lTrSQaii2BdWfYI?C-E=w;k0PoOX zV1#baYWdtYtpYAH)3bQt??1M+>`FzJ)GV=@b920mMKhp+@tO-j{-IZfr2DYQ(yXhT zrl}5~(|7@~ojURF2V;^1+Z469!duOmsp20g#gE%^Ql1?2=fO$)@vf{h$sujC1Cz{^ zqwlboUrR0}k?Hz#Kn&R%uVKWTOlOV>YA6Lo zeq#oT89Yy`B7g^*MR>)R%*{PT*RWc-sM%ZK%8Fake8Jr=Xx^rM|1lh(RvLZmpe+Dic_Rol&$Uvzq;Wx?t zxZ~{y3ysHX?B|D6Gsdz zb^QT{j-BkLXwckeAd^Y>ZVUT$Dq0T@4pqr#RX!IH+1T{)#gqEwEi0bA6n{b4Kx>(&gZ1QNqSqo@lp%!k<@jx)E`rn zzko&|cF%6x-x0BC;-dC$HGy4li294oKdO`4=)Pdi1G{??%4|pnNMVy=!<)nWZbx$+ zs+rSUOt{?*CaOB*3-y>(moLQ@lXIO!wrlA>AEnqvZ0{d#JF2C508{~JX2>8j|ld!rt6i_K6>Vy zXlAj)uzb?QFhDpxCI$jXobf8r;4yQT|JS3`g|F z7&>MUhTQJJMhwT3W5);RJLePJ1P~3HraYFhu|yHRBvpQVjrh8jP=nz$S@M5TFoGO6 zoc@#Bdlk4(Sa&yzw(P)C2fuyDUIf+tAECRorlIgA2QP2n{7d}*5>W$6{uKGZa-VQ; z$%qLr+z`0`4*=jB)j1BPPLm5N_RHhyD}c*I^?&>yxzKc( literal 0 HcmV?d00001 diff --git a/images/russian/tcp-options-lists.png b/images/russian/tcp-options-lists.png new file mode 100644 index 0000000000000000000000000000000000000000..8ef9be035e6126a11a22ac50d00848f0aa0feb8e GIT binary patch literal 41251 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 H@#y~mOu&gw literal 0 HcmV?d00001 diff --git a/images/russian/tcp-options-network.png b/images/russian/tcp-options-network.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe5686d4ef19431925764e087032fc85aa3fe5a GIT binary patch literal 49969 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 literal 0 HcmV?d00001 diff --git a/images/russian/tcp-options-other.png b/images/russian/tcp-options-other.png new file mode 100644 index 0000000000000000000000000000000000000000..10b648f8068dd15b1fc143775327c084f89417ce GIT binary patch literal 49291 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 literal 0 HcmV?d00001 diff --git a/images/russian/tcp-options-server.png b/images/russian/tcp-options-server.png new file mode 100644 index 0000000000000000000000000000000000000000..91d88859c21bedd6a3ca2694ccf1fd2ebe9849c1 GIT binary patch literal 46740 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 literal 0 HcmV?d00001 diff --git a/images/russian/tcp-status.png b/images/russian/tcp-status.png new file mode 100644 index 0000000000000000000000000000000000000000..5ae9bc81a1d441ce3d7a4e0c0d2bb9fb0a874d1d GIT binary patch literal 49871 zcmZ^~byyrv&^5XcNC@r{9D+Lpx8M%J-7UDg1%gWm?hxGF-Q9w_ySv*ro8SB1``th8 zJP$jwy(2x<-KWl}Dnh==iXp&$f(3y<2omDL3Lp^VKJdo{0|~S|j!|!cKtv!3VF4xA z#p5(DEk)Jzw{~LU;IElK{8TIpYDGTyu<$vWQja9U*P+F$^h*-fR6CmtIQMgLIR!o^ zp3X{I>2e=+#g^e8TI=fPInD6F|FWQYH*+aPskbyC*~}b@BpzD`35npx;~(_&v_;O& zJ~)czZ;QrvhQ%NwJI33%=W*J)7jyQI?(n&`wiXKL6$lxAAefSc1uYQ#1vH$0G#j$< zrOn~KLP%0uTN^w11Gu>p(jN}IC(;6c{_k!B{8}I)XQMWP4n}Di85t#|=}-)s&!``1 zVSpck#qL99b_rx0t!O9$%l%7&Pmoa}{1z)?QZb+TUIx`Ck+Dv9&P& z-7M=2kMEcUI8PVPO!Vw_4`6 z4v2T)ry;0XW894;UR)eBIh82rtNQ7ah54ukT+nK*dYrXBqEWocXFuGO`{1LX=(DBl z*gyRJ`*$RX<-_~;vKf3{kJksf&zo2jvZ)PkuTOSfpmpgZ-w33(Wuo)W_bZK9%zA_u z-`XvrcCEgkfnF!*mo?ww&)f?3>z1sGi;Jb?<* z6&LYAqjd15`TnfnrlU`!`7i)+bC0BGt#+XBOHfv7A#hN64xDoWSFJbN7jMRm(C>gz z7WGYnUT#U5bww@DJ0T{@^6aF2?exgYf^4<&IH8*Ctg9BDe2fGOD#850afQn}F^up6 zZwnO#CF=KY+so}i#e7*2F)>0;`)yzVsN;r=m}~3neQst{-CJKLbESeup!J@ccD8m? z4fhc9Dq7cnBAqI@;-!D*t+?ofJrcNS#^l7S7H~NY2%mk2OIUJ#i^p8W_N}loj#*)z zrRe*7#f~2AgmPByI3f4FQRs-tpX22isxgcU(ORB+`{dK*PWYo{k!H(E2ASL$&Jr9DGGPpg z|B-xcg$=%e)4R`F!QWS!oFe%i_luN^t=nIm*>Y=Yu5adaeYT^-#xnT%+1N}Nv2Be( zjMfV2o*NRUJMjn%OHlq&Zv%und3%xS&ClT(Jnh$=hmTmy^RhGZ!m&G75=KT=e`CFu zAGc$uR8}@4zRv%tHcyVFaN*az_#+bHs+g@}h&BQFRIk3OI>o&pIL_a`VI20gadG*p znPwja{XEOY7c@=v)yD1TZHWTRb&9bx?!Ep=$QFgL>aQ0biD9Z;#@&Gk z%4-k528}-9;%ZhI4c@ig@oJfaqz4YVGTdse-P)uKCx)M!qfSJN*Ye(@KKh?zB+w%V zb8cageUb0W(`uQcbJmT`62B@G#VvV-Q_VlAOYVxdi>2#NS9dgzx5gKJT_^ zx#*K(X!W-v0g-=wDHBPqPvEn`MW))JdY91srHuTb?o$dSozx$~T8tTYy{(_PNb|7H z-{{w_H0q^GM1i?NS5!CKHDlJC8g^^~3Zu|e7{Kh0zTECKtcjv4j|-2V2| zp5gs?u)Upw#Q%Jr@p^D@cxbMzj$*O+6tSz@$vvOw4X+4}%&o&3ZPlr6iPo1}1>yyT zcB!k|_baaP#&&!$ehGsr>Y%Ud=lU_d*Voqxy54Rli?!r2A;C?}&5`)r&fK$U@AUjC zeAAC%`X=`x57>Cr4j=x6V~rhrk1~lePMZT(pvNSta+QFKYy-bjupJ6K`RM)NRW6bW zPy5mmf!o1V6LfAErr9x^lP2k^8Lijrd?$Q;KAnEG#Tu_xkhGHD*(J+@}rMB_*_cd<2+KL^%a(wFQp830_qUZV;dj zr0JQNK~G+CI=YkUaXwO#aAXK%`x*jDFAuXZCQ200kMB_tTiD{5AVH+zSHH5p-yqOe zyn7y{f6kGS47fU=6YS7IFqr@2{r+=%p#OF-Sm574m83lQkAQ<>L;!!w`|WYs*sr-E zC@di%!HDy($^Z7&xziCI0|NL)^!>JP-x=>4yXs z{k|gwVh`0o(B|Jnfl z{NG&{_(~Ayzg>r%o=Ozq4?CdYM+Yb}tU-;izbd=TDdWaTOKbU8Qz3tC6aLX%Z54yn zULV=aNktl6!uJ4Gtf28jXPDRx#}=18B3qSTVpsfiEEVFG@ZcMhHE=kZ$f?Yxv*aZ( zhfrFK_+6e{Ds0{v~W@zPorDz`gJ=dFt8tg|mmKSnHALQxgetZraOnvmbvYUTW(YTBzvce|5s$z@b!??_`z*MgP+7{vdVt-dEk zCoBu!q0YLbxNGJw6tY!ZQ^C^Mho7Z0Smmzv`tzv-sZ#nczwnPv@L{df$hZ&Z;eSz6 z8BY;UCGo0{Q8@2)(UyF+_3kF&1VQRYm3m$SL$EY-Q)Ju3!lzw53QtH2y5*40Q2lLJ~y$~ zO{C|uTrdLTX-27qiU!^W`E;BtEl1|;&42wZMqn^eTQh07HxNB~6+=UFnbkBN&3@9P zD_0{}S(BV@dXr~MD=B}Vy5UA6Tv^j-XNigwB9PZVF;Bo#_vq8V_jgF;x&D;ax-2Q| zxMNVO_)*EoKu^cSMuNjya!xn;vX>A_|)J_KQ5&)`LJD zH5l|IMi+2m*I|lj&8TsQ$Hh;Yg*q<&N+qc3?icE_6jK$q0}Lx+k&kH>QtBwv3&3_> zBza>lWNNxc=<|7%J}k`6PK8dY%3T{h2EG4GB5)AVgzUF9gplFQL#d;!%X zY190=z*IMg3YbbKzTQ4TV+hjQl! z<5jT;+?00?j{vli#jiA+p)7qQEy?KRg4r4pxY)1&teWIP=WHvQQ!pFt75Xha%&UK# zCP&#P$NfT^O4y0pnIos>RC7FH5csrFr1LX+)jP7lEG1U+>vtGH=c3X4DEMDL1%gM~ zdoR-Ht*orJ=uInM#bu5nQ`3mAe6Ei-!>+R*=)`CrcW2(W4d*z$6>CWXv%+UEfv)`7 z&U+Lkfh)vidNS=MtxmoORP8-jXP!l7hZUKwzOTV$x!A^GEwRi-GPKyl8Ww!$toCck zWbpEsZ-y9yd%lOr`K*ZK`4c-)m&=9efoMb%?}arw&lCTa$TvI zOp9REZ7OH1gs=-e&oE6-r|(1&zklBaI)!n|Id`|G5FQLL4(VJ4axjL@xKFr3{rBTvlFt9?J)?Pin~6AN0mXT`_IpC1H^ zxN|JE%QYL00oG1*;2TJ~)%IY2f1S(h7P@^ro$uxDx`Y*IMrJgMQN6xCZd_m@1>_8X zl*}F9P|(2w1^LUp8$Q)Cxwu0$O$yIZXy&IE*`G?!O3?cXJp8rmO-Q6f zXM^Egw-2w5Y)b?92LCoii`6*-OXJ>9vRq-~!D_DweYTC|CM>xII{JhAcPA$&+^Pyg zeOBWw-p^1d6CqpW{M86Wy-9#j12+9?H%r&V5tF60zsLv(6YGCYZ1g&A=hoz2UMdKH zA*4d4567}iLE}V9V{8*@c`K;hp>1uWrvh(gz0R$#UCO9K*`7Q3cP#MTBTuK@LvxWc znRRP22=M_6^8~UQ(+H8FgN&1G|UuPpqpJtm^2Ep6{#=k$ev@{})fyHFx{3?lB zmvg4C(jiy1zhwD=!u>NRcysGzK&Z2St=UhYaV1EKL$X};ckc!padDYnG{Yk;ZNuqyatveL>H-h?TGJKK{r$`3%!qJUO1_%Wz45|F zo2%!OtviGg81=>}5+~W#tZlet#qv~-?U0{7)otS*JIkbzsUBoGCTm()89fzfbS|7^RW&3VL-b7TSs)n~`^c&C~v;ZrvK zvyIUd)@8dlJ-36xWpBRYBUD;ZcDtu^#(rU2vUy}oX6Wl$#=-rE>kX759%+mqo?zzF z;zMU!U5jGEH-G%2O*LI_<4q_F3L^;La);aZo%{d=AZF0wI2-0r4%C!__{Q)dh~itj(T_)|7fH^n7b|EiYmIU-F?e zPqPf1Rkz`TJy&1V@KCiRi@&9RBtq%B(s$yP#B6IikZt?WLoIoq)!%cWkY^jmpu$~* zDTjG}?__$LO4msQtN^G?TYbUgC*6kEu9q#&zaCrR%>n7FLQC=Ud8jid=U++-PP^x- zW{Xa19`rPB#EN(y%q-pf4YbIk0Mf$u46zriKkkp`FFd3jR;-P5Q*k4cIXi4RsIN2% z2M6N`wloUq&yT{gLwQ1`-(R8|IEJ49r&osl!`RXANPa30J?kWFYd*H5RI^$O{e%+< z1!Yw2QIp}O^yj<4;Kl1t^+A@rLoR=&Pt>YPlLy$+uK*95DU-yIwqVF20Fdl*u9bCAM!!ZINMb3aA{;i3^~vAL%JIIR2PJ}^c-?lvF}RMX>*}_<-y9BdMb3I1W#p)Rob6^xsd{3ir4)+ zYuW+h+Gk~5hIYV@eC;r^v1#8+_rN1ua&mfIEB^io^|CK&cxP;a`dLGh-^nzHW6W$D zLI;~3WetDx$1sv-_fk12Nz9;sF<_cJOn8g{D8QlOC--c&>d5}y2*JL71WZPx)uD7g zcS+a<_B%aav890>=!YHzSnl|KAaGsx{h)^jK98|u3mkd;@uyQWa+o5+6VmXXsDkky z{!IV%UrchH6`T6s!G8kle{@zJolb9qCt!+->7I=s*v=fr!h4y=>r73?fgU$QFZ42n z<$K1$@_Z)w4Z+~?G{&(6NNL!Z(6tYeF|6RjKWjlyX8(NG`9v~s|-sFF@-}&3Oi3nVF zzK89Yt^P=G?D6sD2ta*6R2)p^s;jFfB_%oRj`&VMz$6puFhYQc`~!yn{{80V^ak588{j1zcpeEgj8_K<dmdK=H})FpR_ed zkYHeJY^-LzHHy5N+Wh=Hb_zB?7#0==eTXU;fOsvpFiDiS$yn;b;v($3_w}|H9Gk{$ zDY{-aGn12(zP`RdRK#X9nRPgUA%oQdvzu{cWd#8NK`fHsWjjVL9f(Y{w6p*d0&%go zRRRqawNKteRTWG6FoJhM4CAiD-WAU9Qu^?8%I5Q+fuW&?yE_zrocL!%s)>n-*49=Z zE5c4?>H*S7p38*xXAzR9WtTNCpU0^T+XtEDoUtOHB|IX66R%4WlPzl0^Jup80FP^{ z^7P}!k6R6QFE`(ABKwWMfB!z7&RgDkt6^lc9mddhf8LGM-{0?$U-peMo?g4j`{mKF z|5xk%W*AqRwWZ~;?(2^3A8inf`7%!D)SlY0zCHXyE`O!_=X1@G)zo3X68#E$|v`nPkQQgy6W z%Z}4-Qy7S20evacZYJ<~w(ArE-kcCvhx_~AOI4nN_@8}mhSpX6Jnmnm?>>{0Pu4`1 z-KlxariX-t{1X_AyTUy5$1%l~qnb#P?o}g3%rXwm?rz$Z3(KYiI5@;v$;ruLKwRo? zrVwM{y4>6A>uXPsur+o;b#;u#C^H+|?8-`7V&VX&2^TkacURZC-G%EJ9G@Vd4UL&` zXgVK6*^;DRnF|Sd=z$P*v&-4(*_qEq02as0X6W(pac5^Ioo3zhZGF3To96?*%d&49 z1QhnI$rUB+3MFpG4eV)#@RjMU?n%ahEzI$5=*Y;(INwt^KDB`&7Z=wuVHIF-poeG_ zvK{W$TzWyc>gQQIdm+KWwp;sG=|Bs9z!JOwnUWc+l<{sV@m@!>*kZX zH>b<~KSH*>94+KQi1-@q-Y@-xKJZ74eh9Tjx>rB7@6Us_wRRvjJCTkWrl+Uj5fS;W z{|X^iMwA6dL}*u=AapYV;F#${Ef45lLsQ;QGx8EVP3nWLfsnuH)ZR#vLqEPtMfpk+`pc-&RuFbVU|?WD zL4ombyxTRtT?V~w8xJ}8E-6~&YLV+n1GUH0FjPw!`QEZ++hR}og47~Kp3XK887D2%tfM7~_Mx8JQs z4j9Z7Kk3q~*x!rln+!k=xGExer`wE0dAY4@8gRN@Zl9l@&-Pc}wkVz$C(R+fwmzy# z4V6Wf5RqglHp9v?4`F29jNF{%Mx~@^Dk`E85;AC6cG&n-CdIZcm;xH(L4F?nl{mxa zl`|#is4MkqK1oU0{;`!X7g=6=qeSd&>C#<8C$~*U^0n#udEE~1Fi1#9catk!sDy-s z1O%rEN%E{`ih~D&vV}&Nm?pCrW1Cm=uPQ3*YO7eY3#~glC^W~MO+LJcoqI}dDI2hG zX_oU%Z>qtqo1W2EHV-0e=q_=?^&Ru{LrcFF}bOR{8c zNvUSEDh5aDdq!W|s7lJA7Xy4sL!Sg!ZiQ8Zg?s8KswPdPf(zQ)eSmxnD=VuGmhH|I zQo;GQwQOODtNvXm8uVH!Y4wZM{fkr9(TBIyz{q4$@zU!k>#jSE9+q5Ml>+uZ*Bb1yTU%fH zB58LiEUyxU2WPTWUOrRJPLO=(Axjcc>;-P0$jPM%J{^TyzPd3+hE_`7L68ie;C zxw*J_Qic1*y2I*#q@Z>=SPVB+ll97Jl=ZpES$pJNyW#_ybmd~ww2qf^ZQ;kWLtTrr zIaZ%@sqAaOp`|ZV-wGlBI50A8&zHlQnVA6aZ~81H0TcHEdK75JyM%kLRUu@dZQMe9 z>UnZu*TOZsAI7DLvrz($IPRxD2S&3!H*PG7ch^P*UXlg0v%~B(I-HFA+{}svG6nV> z(yT2$`^>G{?fea#k$!;jSg*eGC`fL9^=y(AXuRXQsN^ zEA9D8PIsOVLYynFaLjyXU1YS6O9+Q~}}G%U0H+lm4SC%=g((*1*}zaFJ68uH@7Y&npyk zVS6w%EZ^R@X~-?V#XD;~9mb5MA&tPg9Im*FfxP_YAZ6wFLaOa?m- zPjIW}#}a9VjFSw7hdlNe1)t!<)e&nvryrj(eD=)3ri9(jRKxAd9MYev*>_aZJ#{1q zUz`N`|Ttxb$F58&1rf1LTX1p}rys)U6W$yKxY`hD* z?k`7O(2m(`?p#@39CK+Bf~EP+!voQ<6z^42M_|jWBpSGNa;A;e;3drC(2#B0wok87 z#sZ6k)c$h2q`e?>j>8=%Bm#J?R;MEsA)%jlQS$&F^78Upd){TIcs&WbKJ($R@*8b{ z>-sQ5@;uLVet&s4=V|@qv?F&2cSj2=jR6Gi|EmR{^|t4eV{^jOsqu2tZ$08MaIbk# znQ_{a3@y!K+!@?NT}=1saOXAQIUhOdKRSwRe;s*;Q^rbm#$IOItkqh8bp$>5BF^

n?c2XW>m^iqBb2#yy*Nu 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 ResetValue) and CanFocus then + begin + SetFocus; + ItemIndex := ResetValue; + Change; + end; + end; + Inherited; +end; + +procedure TCheckBox.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +begin + if Button = mbMiddle then + begin + if (Checked <> ResetValue) and CanFocus then + begin + SetFocus; + Checked := ResetValue; + end; + end; + inherited; +end; + +procedure TEdit.DoExit; +var + UpDown: TUpDown; +begin + UpDown := GetAssocUpDown(Name); + if UpDown <> nil then + Text := IntToStr(UpDown.Position); + inherited; +end; + +procedure TEdit.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +var + UpDown: TUpDown; +begin + if Button = mbMiddle then + begin + UpDown := GetAssocUpDown(Name); + if CanFocus then + begin + SetFocus; + if UpDown <> nil then + begin + if (UpDown.Position <> UpDown.ResetValue) then + UpDown.Position := UpDown.ResetValue; + end + else + begin + if Text <> ResetValue then + Text := ResetValue; + end; + SelStart := Length(Text); + end; + end; + inherited; +end; + +procedure TSplitButtonStyleHook.Paint(Canvas: TCanvas); +var + Icon: TIcon; +begin + Inherited; + if (Win32MajorVersion = 5) and (TButton(Control).Style = bsSplitButton) then + begin + Icon := TIcon.Create; + try + Tcp.lsMain.GetIcon(14, Icon); + Canvas.MoveTo(Control.Width - 15, 2); + Canvas.LineTo(Control.Width - 15, Control.Height - 2); + Canvas.Draw(Control.Width - 16, (Control.Height - 16) div 2, Icon); + ReleaseDC(Handle, Canvas.Handle); + finally + Icon.Free; + end; + end; +end; + +class procedure TStyleManagerHelper.RemoveStyle(StyleName: string); +var + Style: TCustomStyleServices; +begin + if TStyleManager.Style[StyleName] <> nil then + begin + if TStyleManager.FRegisteredStyles.ContainsKey(StyleName) then + begin + Style := TStyleManager.Style[StyleName]; + TStyleManager.FStyles.Remove(Style); + TStyleManager.FRegisteredStyles.Remove(StyleName); + FreeAndNil(Style); + end; + end; +end; + +constructor TMemo.Create(AOwner: TComponent); +begin + inherited; + FTextHint := TStringList.Create; + FCanvas := TControlCanvas.Create; + FTextHintFont := TFont.Create; + FTextHintFont.Color := StyleServices.GetStyleFontColor(sfEditBoxTextDisabled); + FTextHintFont.Name := 'Lucida Console'; + TControlCanvas(FCanvas).Control := Self; +end; + +destructor TMemo.Destroy; +begin + FreeAndNil(FTextHintFont); + FreeAndNil(FCanvas); + FTextHint.Clear; + FreeAndNil(FTextHint); + inherited; +end; + +procedure TMemo.WMPaint(var Message: TWMPaint); +var + i, TextHeight: Integer; +begin + inherited; + if (Text = '') and (not Focused) then + begin + FCanvas.Font := FTextHintFont; + FCanvas.Brush.Color := StyleServices.GetStyleColor(scEdit); + TextHeight := FCanvas.TextHeight('yY'); + for i := 0 to FTextHint.Count - 1 do + FCanvas.TextOut(1, 1 + (i * TextHeight), FTextHint[i]); + end; +end; + +procedure TMemo.SetTextHintFont(const Value: TFont); +begin + FTextHintFont.Assign(Value); +end; + +constructor TStringGrid.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FCellsAlignment := TStringList.Create; + FCellsAlignment.CaseSensitive := True; + FCellsAlignment.Sorted := True; + FCellsAlignment.Duplicates := dupIgnore; + FColsDefaultAlignment := TStringList.Create; + FColsDefaultAlignment.CaseSensitive := True; + FColsDefaultAlignment.Sorted := True; + FColsDefaultAlignment.Duplicates := dupIgnore; + FColsDataType := TStringList.Create; + FColsDataType.CaseSensitive := True; + FColsDataType.Sorted := True; + FColsDataType.Duplicates := dupIgnore; +end; + +destructor TStringGrid.Destroy; +begin + FCellsAlignment.Free; + FColsDefaultAlignment.Free; + FColsDataType.Free; + inherited Destroy; +end; + +procedure TStringGrid.SetCellsAlignment(ACol, ARow: Integer; const Alignment: TAlignment); +var + Index: Integer; +begin + Index := 0; + if (Index > -1) then + FCellsAlignment.Objects[Index] := TObject(Alignment) + else + FCellsAlignment.AddObject(IntToStr(ACol) + '-' + IntToStr(ARow), TObject(Alignment)); +end; + +function TStringGrid.GetCellsAlignment(ACol, ARow: Integer): TAlignment; +var + Index: Integer; +begin + Index := FCellsAlignment.IndexOf(IntToStr(ACol) + '-' + IntToStr(ARow)); + if (Index > -1) then + GetCellsAlignment := TAlignment(FCellsAlignment.Objects[Index]) + else + GetCellsAlignment := ColsDefaultAlignment[ACol]; +end; + +procedure TStringGrid.SetColsDefaultAlignment(ACol: Integer; const Alignment: TAlignment); +var + Index: Integer; +begin + Index := FColsDefaultAlignment.IndexOf(IntToStr(ACol)); + if (Index > -1) then + FColsDefaultAlignment.Objects[Index] := TObject(Alignment) + else + FColsDefaultAlignment.AddObject(IntToStr(ACol), TObject(Alignment)); +end; + +function TStringGrid.GetColsDefaultAlignment(ACol: Integer): TAlignment; +var + Index: Integer; +begin + Index := FColsDefaultAlignment.IndexOf(IntToStr(ACol)); + if (Index > -1) then + GetColsDefaultAlignment := TAlignment(FColsDefaultAlignment.Objects[Index]) + else + GetColsDefaultAlignment := taLeftJustify; +end; + +procedure TStringGrid.SetColsDataType(ACol: Integer; const ColsDataType: TColsDataType); +var + Index: Integer; +begin + Index := FColsDataType.IndexOf(IntToStr(ACol)); + if (Index > -1) then + FColsDataType.Objects[Index] := TObject(ColsDataType) + else + FColsDataType.AddObject(IntToStr(ACol), TObject(ColsDataType)); +end; + +function TStringGrid.GetColsDataType(ACol: Integer): TColsDataType; +var + Index: Integer; +begin + Index := FColsDataType.IndexOf(IntToStr(ACol)); + if (Index > -1) then + GetColsDataType := TColsDataType(FColsDataType.Objects[Index]) + else + GetColsDataType := dtText; +end; + +procedure TStringGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); +var + Temp: Boolean; + NewText: String; +begin + if DefaultDrawing then + begin + NewText := Cells[ACol, ARow]; + case CellsAlignment[ACol, ARow] of + taLeftJustify: + begin + ARect.Left := ARect.Left + 2; + Canvas.TextRect(ARect, NewText, [tfLeft, tfEndEllipsis, tfSingleLine, tfVerticalCenter]); + end; + taRightJustify: + begin + ARect.Right := ARect.Right - 2; + Canvas.TextRect(ARect, NewText, [tfRight, tfEndEllipsis, tfSingleLine, tfVerticalCenter]); + end; + taCenter: + begin + ARect.Left := ARect.Left + 2; + Canvas.TextRect(ARect, NewText, [tfCenter, tfEndEllipsis, tfSingleLine, tfVerticalCenter]); + end; + end; + end; + Temp := DefaultDrawing; + DefaultDrawing := False; + inherited DrawCell(ACol, ARow, ARect, AState); + DefaultDrawing := Temp; +end; + +end. diff --git a/source/Changelog.txt b/source/Changelog.txt new file mode 100644 index 0000000..44785e2 --- /dev/null +++ b/source/Changelog.txt @@ -0,0 +1,172 @@ + : + +2.2.11.4: + + - , . + - , , "". + - "IP-" "" Tor + - , + - " " " " + - 2 3 HiddenServiceVersion torrc-. , 2 . + - Cookie- Tor (-: ) + - + - Ctrl+A , "" "" + - - IP- + - . + - + - , Defaults.ini + - " ", + - + - . + - + - Windows 8.1 10 100% + - : , . + - / . + - : , , + - . . + - , + - torrc-, , Tor + - "", Tor, + - "" / + - ( ) + - , + - , + - Ctrl+C + - (Ctrl+F) + - " ", , , "" + - , , , "" + - . + - + - " " . + - IP- "", Ctrl - "" + - IP- "" "" . + - ", ". ExcludeExitNodes . + - " " " ", - . , . + - " " . , + - . + - geoip geoip6 . + - "", "" "" Tor, + - "" . + - "" . + - . + - , , / . / + - " " " ", , , . + - , " " + - torrc-, settings.ini (-: , , , ) + - torrc / + - + - Ipv6- torrc + - "" "", MyFamily, + - "" " ", StrictNodes + - "" ". ", MaxClientCircuitsPending + - "" "" , MaxAdvertisedBandwidth + - "" " ", DirCache + - "" " IPv6-", IPv4Only ORPort DirPort + - "" " ", AssumeReachable + - "" " ", Address + - "" "" "", BridgeDistribution + - "" " ", HSLayer2Nodes HSLayer3Nodes. . + - : , , . + - OpenDNS, Tor + - Ip-cc- network-cache. + - ClientOnionAuthDir, + - " " Tor. " ", " ", " " + - , + - + - + - "eu" , , + - : 32-bit 64-bit + - GitHub MIT-. " " + +2.0.4.30: + + - + +2.0.4.26: + + - , masterlola + - , + +2.0.4.24: + + - UTF-8 + - : , , + - + - , + - Ctrl+C , + - Windows " " + - , Translations.ini + - , , Google Yandex + +2.0.4.14: + + - 100% + - , + - , / + - , + - torrc- + - torcc + - + - Tor , + - + - , torrc + - , + - Tor (, ) + - , + - " ", Tor , . + - (, ip, , ) + - (/ ) + - IP- , " " + - + - (, , ) + - , + - c , %AppData%\Tcp\* + - , + - Tor , , + - Tor + - "", metrics.torproject.org + - (-: Tor ) + +2.0.3.6: + + - + - 127.0.0.1 + - , Tor . + - + - torrc + - torrc, , + - Tor + - Tor + - Tor + - Tor + - + - ns/id, + - " " , " DNS-" + - , Indy Synapse, + - + - " " + +2.0.2.15: + + - , + - Tor + - (. ) + - + - + - signal newnym, + - , Tor + +2.0.1.3: + + - , + - + - IP + - Tor + - + - Tor + - Tor + - + - stdout + - ( , .) + - (, , ) + - diff --git a/source/ConstData.pas b/source/ConstData.pas new file mode 100644 index 0000000..a456a33 --- /dev/null +++ b/source/ConstData.pas @@ -0,0 +1,407 @@ +unit ConstData; + +interface + +uses + System.Types; + +const + BR = #13#10; + SELECT_CHAR = '★'; + FAVERR_CHAR = '☆'; + BOTH_CHAR = '✿'; + EXCLUDE_CHAR = '✖'; + NONE_CHAR = '-'; + INFINITY_CHAR = '∞'; + + BRIDGES_BOT = 'GetBridgesBot'; + BRIDGES_EMAIL = 'bridges@torproject.org'; + BRIDGES_SITE = 'https://bridges.torproject.org/bridges'; + CHECK_URL = 'https://check.torproject.org'; + DOWNLOAD_URL = 'https://www.torproject.org/download/languages'; + METRICS_URL = 'https://metrics.torproject.org/rs.html'; + GITHUB_URL = 'https://github.com/abysshint/tor-control-panel'; + + DEFAULT_ENTRY_NODES = '{cz},{fi},{fr},{gb},{se},{nl},{de},{no},{at},{ch}'; + DEFAULT_MIDDLE_NODES = '{cz},{fi},{fr},{gb},{se},{nl},{de},{no},{at},{dk},{pl},{ch}'; + DEFAULT_EXIT_NODES = '{gb},{se},{nl},{de},{no},{hr},{at},{pl},{ro},{ch}'; + DEFAULT_ROUTERS_FILTER_DATA = '15;-1;739;-1;10;0;0;0;'; + DEFAULT_CUSTOM_EXIT_POLICY = 'accept *:80,accept *:443,reject *:*'; + DEFAULT_ALLOWED_PORTS = '80,443'; + DEFAULT_COUNTRY_ID = 249; + + CURRENT_CONFIG_VERSION = 2; + MAX_SPEED_DATA_LENGTH = 24 * 60 * 60; + BUFSIZE = 1024 * 1024; + + MAX_COUNTRIES = 251; + MAX_TOTALS = 6; + + CIRCUIT_FILTER_DEFAULT = 32767; + CIRCUIT_FILTER_MAX = 32767; + ROUTER_FILTER_DEFAULT = 15; + ROUTER_FILTER_MAX = 15; + SHOW_NODES_FILTER_DEFAULT = 739; + SHOW_NODES_FILTER_MAX = 8176; + TPL_MENU_DEFAULT = 7; + TPL_MENU_MAX = 7; + + L1_NUM_GUARDS = 2; + L2_NUM_GUARDS = 4; + L3_NUM_GUARDS = 8; + + STOP_NORMAL = 0; + STOP_CONFIG_ERROR = 1; + STOP_AUTH_ERROR = 2; + + LP_OPTIONS = 0; + LP_LOG = 1; + LP_STATUS = 2; + LP_CIRCUITS = 3; + LP_ROUTERS = 4; + + TOTAL_RELAYS = 0; + TOTAL_GUARDS = 1; + TOTAL_EXITS = 2; + TOTAL_PING_SUM = 3; + TOTAL_PING_COUNTS = 4; + TOTAL_ALIVES = 5; + + SORT_ASC = 1; + SORT_DESC = 2; + + PRIORITY_BALANCED = 0; + PRIORITY_WEIGHT = 1; + PRIORITY_PING = 2; + PRIORITY_RANDOM = 3; + + BRIDGE_RELAY = 0; + BRIDGE_NATIVE = 1; + + BRIDGES_TYPE_BUILTIN = 0; + BRIDGES_TYPE_USER = 1; + + TRANSPORT_CLIENT = 0; + TRANSPORT_SERVER = 1; + TRANSPORT_BOTH = 2; + + PROXY_TYPE_SOCKS4 = 0; + PROXY_TYPE_SOCKS5 = 1; + PROXY_TYPE_HTTPS = 2; + + FILTER_TYPE_NONE = 0; + FILTER_TYPE_COUNTRIES = 1; + FILTER_TYPE_FAVORITES = 2; + + NL_TYPE_ENTRY = 0; + NL_TYPE_MIDDLE = 1; + NL_TYPE_EXIT = 2; + NL_TYPE_EXLUDE = 3; + + HS_VERSION_2 = 0; + HS_VERSION_3 = 1; + + HS_STATE_ENABLED = 0; + HS_STATE_DISABLED = 1; + + GRID_FILTER = 1; + GRID_ROUTERS = 2; + GRID_CIRCUITS = 3; + GRID_STREAMS = 4; + GRID_HS = 5; + GRID_HSP = 6; + GRID_CIRC_INFO = 7; + GRID_STREAM_INFO = 8; + GRID_TRANSPORTS = 9; + + FILTER_ID = 0; + FILTER_FLAG = 1; + FILTER_NAME = 2; + FILTER_TOTAL = 3; + FILTER_GUARD = 4; + FILTER_EXIT = 5; + FILTER_ALIVE = 6; + FILTER_PING = 7; + FILTER_ENTRY_NODES = 8; + FILTER_MIDDLE_NODES = 9; + FILTER_EXIT_NODES = 10; + FILTER_EXCLUDE_NODES = 11; + + ROUTER_ID = 0; + ROUTER_NAME = 1; + ROUTER_IP = 2; + ROUTER_FLAG = 3; + ROUTER_COUNTRY = 4; + ROUTER_WEIGHT = 5; + ROUTER_PORT = 6; + ROUTER_VERSION = 7; + ROUTER_PING = 8; + ROUTER_FLAGS = 9; + ROUTER_ENTRY_NODES = 10; + ROUTER_MIDDLE_NODES = 11; + ROUTER_EXIT_NODES = 12; + ROUTER_EXCLUDE_NODES = 13; + + CIRC_ID = 0; + CIRC_PURPOSE = 1; + CIRC_STREAMS = 2; + CIRC_BYTES_READ = 3; + CIRC_BYTES_WRITTEN = 4; + + STREAMS_ID = 0; + STREAMS_TARGET = 1; + STREAMS_TRACK = 2; + STREAMS_COUNT = 3; + STREAMS_BYTES_READ = 4; + STREAMS_BYTES_WRITTEN = 5; + + HS_NAME = 0; + HS_VERSION = 1; + HS_INTRO_POINTS = 2; + HS_MAX_STREAMS = 3; + HS_STATE = 4; + HS_PORTS_DATA = 5; + HS_PREVIOUS_NAME = 6; + + HSP_INTERFACE = 0; + HSP_REAL_PORT = 1; + HSP_VIRTUAL_PORT = 2; + + CIRC_INFO_ID = 0; + CIRC_INFO_NAME = 1; + CIRC_INFO_IP = 2; + CIRC_INFO_FLAG = 3; + CIRC_INFO_COUNTRY = 4; + CIRC_INFO_WEIGHT = 5; + CIRC_INFO_PING = 6; + + STREAMS_INFO_ID = 0; + STREAMS_INFO_SOURCE_ADDR = 1; + STREAMS_INFO_DEST_ADDR = 2; + STREAMS_INFO_PURPOSE = 3; + STREAMS_INFO_BYTES_READ = 4; + STREAMS_INFO_BYTES_WRITTEN = 5; + + PT_TRANSPORTS = 0; + PT_HANDLER = 1; + PT_TYPE = 2; + PT_PARAMS = 3; + + ROUTER_BAD_EXIT = 1; + ROUTER_NOT_RECOMMENDED = 2; + ROUTER_DIR_MIRROR = 4; + ROUTER_HS_DIR = 8; + ROUTER_REACHABLE_IPV6 = 16; + ROUTER_ALIVE = 32; + ROUTER_AUTHORITY = 64; + ROUTER_BRIDGE = 128; + + GENERAL = 0; + HS_CLIENT_HSDIR = 1; + HS_CLIENT_INTRO = 2; + HS_CLIENT_REND = 3; + HS_SERVICE_HSDIR = 4; + HS_SERVICE_INTRO = 5; + HS_SERVICE_REND = 6; + HS_VANGUARDS = 7; + PATH_BIAS_TESTING = 8; + TESTING = 9; + CIRCUIT_PADDING = 10; + MEASURE_TIMEOUT = 11; + + LAUNCHED = 12; + BUILT = 13; + GUARD_WAIT = 14; + EXTENDED = 15; + FAILED = 16; + CLOSED = 17; + + NEW = 18; + NEWRESOLVE = 19; + REMAP = 20; + SENTCONNECT = 21; + SENTRESOLVE = 22; + SUCCEEDED = 23; + DETACHED = 24; + CONTROLLER_WAIT = 25; + + DIR_FETCH = 26; + DIR_UPLOAD = 27; + DIRPORT_TEST = 28; + DNS_REQUEST = 29; + USER = 30; + + FILTER_BY_ALIVE = 5; + FILTER_BY_TOTAL = 6; + FILTER_BY_GUARD = 7; + FILTER_BY_EXIT = 8; + FILTER_BY_QUERY = 9; + + NONE_ID = 0; + ENTRY_ID = ROUTER_ENTRY_NODES; + MIDDLE_ID = ROUTER_MIDDLE_NODES; + EXIT_ID = ROUTER_EXIT_NODES; + EXCLUDE_ID = ROUTER_EXCLUDE_NODES; + FAVORITES_ID = 14; + +type + ArrOfStr = array of string; + ArrOfPoint = array of TPoint; + + TNodeType = ( + ntNone = NONE_ID, + ntEntry = ENTRY_ID, + ntMiddle = MIDDLE_ID, + ntExit = EXIT_ID, + ntExclude = EXCLUDE_ID, + ntFavorites = FAVORITES_ID + ); + TNodeTypes = set of TNodeType; + + TEditMenuType = (emCopy, emCut, emPaste, emSelectAll, emClear, emDelete, emFind); + TListType = (ltNoCheck, ltHost, ltHash, ltPolicy, ltBridge, ltNode, ltSocket, ltTransport, ltIp, ltCidr, ltCode); + TGuardType = (gtNone, gtBridges, gtRestricted, gtDefault, gtAll); + TMsgType = (mtInfo, mtWarning, mtError, mtQuestion); + TParamType = (ptString, ptInteger, ptBoolean, ptSocket, ptHost, ptSize, ptBridge); + TTaskBarPos = (tbTop, tbBottom, tbLeft, tbRight, tbNone); + TScanType = (stNone, stPing, stAlive, stBoth); + TScanPurpose = (spNone, spNew, spFailed, spUserBridges, spAll, spNewAndFailed, spBridges, spAuto); + + TConfigFlag = (cfAutoAppend, cfAutoSave, cfFindComments, cfExistCheck, cfMultiLine, cfBoolInvert); + TConfigFlags = set of TConfigFlag; + + TBridgeType = (btNone, btList, btPrefer); + TBridgeTypes = set of TBridgeType; + + TProcessFlag = (pfHideWindow, pfReadStdOut); + TProcessFlags = set of TProcessFlag; + TProcessInfo = record + hProcess: THandle; + hStdOutput: THandle; + end; + + TStaticPair = record + Key: string; + Value: Integer; + end; + + TIPv4Range = record + IpStart: Cardinal; + IpEnd: Cardinal; + end; + + TSocket = record + Ip: string; + Port: Word; + end; + + TNodeData = record + NodeStr: string; + NodeID: TListType; + RangeData: TIPv4Range; + end; + ArrOfNodes = array of TNodeData; +var + CountryCodes: array [0..MAX_COUNTRIES - 1] of string = ( + 'au','at','az','ax','al','dz','as','ai','ao','ad','aq','ag','ar','am','aw', + 'af','bs','bd','bb','bh','bz','by','be','bj','bm','bg','bo','bq','ba','bw', + 'br','io','bn','bf','bi','bt','vu','va','gb','hu','ve','vg','vi','um','tl', + 'vn','ga','gy','ht','gm','gh','gp','gt','gf','gn','gw','de','gg','gi','hn', + 'hk','ps','gd','gl','gr','ge','gu','dk','cd','je','dj','dm','do','eg','zm', + 'zw','ye','il','in','id','jo','iq','ir','ie','is','es','it','cv','kz','kh', + 'cm','ca','qa','ke','cy','kg','ki','cn','kp','cc','co','km','cr','ci','cu', + 'kw','cw','la','lv','ls','lr','lb','ly','lt','li','lu','mu','mr','mg','yt', + 'mo','mk','mw','my','ml','mv','mt','ma','mq','mh','mx','fm','mz','md','mc', + 'mn','ms','mm','na','nr','np','ne','ng','nl','ni','nu','nz','nc','no','ae', + 'om','bv','im','nf','cx','ky','ck','pn','sh','pk','pw','pa','pg','py','pe', + 'pl','pt','pr','cg','kr','re','ru','rw','ro','eh','sv','ws','sm','st','sa', + 'sz','mp','sc','bl','sn','mf','pm','vc','kn','lc','rs','sg','sx','sy','sk', + 'si','sb','so','sd','sr','us','sl','tj','tw','th','tz','tc','tg','tk','to', + 'tt','tv','tn','tm','tr','ug','uz','ua','wf','uy','fo','fj','ph','fi','fk', + 'fr','pf','tf','hm','hr','cf','td','me','cz','cl','ch','se','sj','lk','ec', + 'gq','er','ee','et','za','gs','ss','jm','jp','??','eu'); + + PlotIntervals: array [0..8] of Integer = ( + 60, 300, 900, 1800, 3600, 10800, 21600, 43200, 86400 + ); + BridgeDistributions: array [0..4] of string = ( + 'any', 'https', 'email', 'moat', 'none' + ); + LogLevels: array [0..4] of string = ( + 'debug', 'info', 'notice', 'warn', 'err' + ); + PolicyTypes: array [0..3] of string = ( + 'accept', 'reject', 'accept6', 'reject6' + ); + MaskTypes: array [0..3] of string = ( + '*', '*4', '*6', 'private' + ); + DataSizes: array [0..4] of string = ( + 'b', 'byte', 'bytes', 'bit', 'bits' + ); + PrefixSizes: array [0..4] of string = ( + '', 'kilo', 'mega', 'giga', 'tera' + ); + PrefixShortSizes: array [0..4] of string = ( + '', 'k', 'm', 'g', 't' + ); + PrivateRanges: array [0..3] of string = ( + '192.168.0.0/16', + '172.16.0.0/12', + '169.254.0.0/16', + '10.0.0.0/8' + ); + DocRanges: array [0..2] of string = ( + '192.0.2.0/24', + '198.51.100.0/24', + '203.0.113.0/24' + ); + + CircuitPurposes: array[0..11] of TStaticPair = ( + (Key: 'GENERAL'; Value: GENERAL), + (Key: 'HS_CLIENT_HSDIR'; Value: HS_CLIENT_HSDIR), + (Key: 'HS_CLIENT_INTRO'; Value: HS_CLIENT_INTRO), + (Key: 'HS_CLIENT_REND'; Value: HS_CLIENT_REND), + (Key: 'HS_SERVICE_HSDIR'; Value: HS_SERVICE_HSDIR), + (Key: 'HS_SERVICE_INTRO'; Value: HS_SERVICE_INTRO), + (Key: 'HS_SERVICE_REND'; Value: HS_SERVICE_REND), + (Key: 'HS_VANGUARDS'; Value: HS_VANGUARDS), + (Key: 'PATH_BIAS_TESTING'; Value: PATH_BIAS_TESTING), + (Key: 'TESTING'; Value: TESTING), + (Key: 'CIRCUIT_PADDING'; Value: CIRCUIT_PADDING), + (Key: 'MEASURE_TIMEOUT'; Value: MEASURE_TIMEOUT) + ); + + CircuitStatuses: array[0..5] of TStaticPair = ( + (Key: 'LAUNCHED'; Value: LAUNCHED), + (Key: 'BUILT'; Value: BUILT), + (Key: 'GUARD_WAIT'; Value: GUARD_WAIT), + (Key: 'EXTENDED'; Value: EXTENDED), + (Key: 'FAILED'; Value: FAILED), + (Key: 'CLOSED'; Value: CLOSED) + ); + + StreamPurposes: array[0..4] of TStaticPair = ( + (Key: 'DIR_FETCH'; Value: DIR_FETCH), + (Key: 'DIR_UPLOAD'; Value: DIR_UPLOAD), + (Key: 'DIRPORT_TEST'; Value: DIRPORT_TEST), + (Key: 'DNS_REQUEST'; Value: DNS_REQUEST), + (Key: 'USER'; Value: USER) + ); + + StreamStatuses: array[0..9] of TStaticPair = ( + (Key: 'NEW'; Value: NEW), + (Key: 'NEWRESOLVE'; Value: NEWRESOLVE), + (Key: 'REMAP'; Value: REMAP), + (Key: 'SENTCONNECT'; Value: SENTCONNECT), + (Key: 'SENTRESOLVE'; Value: SENTRESOLVE), + (Key: 'SUCCEEDED'; Value: SUCCEEDED), + (Key: 'FAILED'; Value: FAILED), + (Key: 'CLOSED'; Value: CLOSED), + (Key: 'DETACHED'; Value: DETACHED), + (Key: 'CONTROLLER_WAIT'; Value: CONTROLLER_WAIT) + ); + +implementation + +end. diff --git a/source/Defaults.ini b/source/Defaults.ini new file mode 100644 index 0000000..369ff04 --- /dev/null +++ b/source/Defaults.ini @@ -0,0 +1,29 @@ +[Bridges] +obfs4.1=obfs4 192.68.11.218:80 D7AE9A9FDCA05666A7BFDD5650063658DE781F8F cert=B525/2egv4zTCq83lhsvm182R3qx/915gGiYX1+hCxvkYYtvbPXa9oB7a2eToww4T2StAQ iat-mode=0 +obfs4.2=obfs4 168.119.187.62:2352 A88F76AA71AA06692BD45A5548A4BC26E9332186 cert=SSOsJZ1mceeGp1D9JimzKoOrjINekaaCQBdEYb78OxzR7ah9Hf19id4irytCod5JPEbeOg iat-mode=0 +obfs4.3=obfs4 116.203.147.82:443 C36F6A3A74864124457257FA8662B2D5EF4F6D29 cert=qNFUCn+6Qj/RLQmgJa1WDbbEy2cGjPBnE9rC47UhWXoTmYkXy1BegVidM0Kt9z7JjHcUJw iat-mode=0 +obfs4.4=obfs4 103.214.6.254:443 9BA5E686B1FEB28C1A62AFE790FDBC8FBE06ECE6 cert=5AVdusnEQKYZ05LDoBtpYLitdqGt9JsQhJmO+ISV1RC+E21P5sSmcXE3xgL+fzIJHZB5Zw iat-mode=0 +obfs4.5=obfs4 104.244.75.82:443 E85E1DAF2819EF4BDA82EB67BA66799F2E171452 cert=dtIY9MpT0O1QEd4VBDjKN9e6QVxdA9xW+2x5GnPn/FrS2sfcYlxTXPmYFc3qRYt8XudWdA iat-mode=0 +obfs4.6=obfs4 5.189.170.3:10338 6412721889430C518D5B8D30BCAE026D96571953 cert=hrWOPQaUr6X+UehLBIMK2Qsh177jh1BeQLViwsFkMNWe0sr7QyHsUf2uLFGW8RlDeNQWeA iat-mode=0 +obfs4.7=obfs4 165.227.225.46:8060 E08E08BDD944C52080CBA44851F8D703BA8EC7DF cert=d9/EHfKcMdRYGcWt4/ktxSDHQxuEo2XR/XpTUKyUheizOhjLv8oL5aOnQP3dcWjtFQWBHA iat-mode=0 +obfs4.8=obfs4 95.217.45.150:8364 17D88EC9D3196D3C5CA126E85C41B2B28B58783C cert=ggBNji0pxQFTlZ4ShZufg597tPOG5w32XUeLx3tPmxch9AQ8hF50703oZWhJVBwNRGc0Xw iat-mode=0 +obfs4.9=obfs4 195.201.202.125:80 D44C0BC5AF900547704BCE5062E4B169672120E8 cert=frdxjWqogIf0Sl85YCOs4wJ6BG5F4RTbTsr5EveRB2FdyoWF8aXyy7ZzCil+E9dXaXO0UQ iat-mode=0 +obfs4.10=obfs4 68.183.36.57:23411 11A47B73E44EC752E77B9864D8A26D250613B642 cert=Jc9MHFAfavb/MmJYz5exrKC7es3lnFq+BOaOv6RgrQ3ALxD/bBmwyDQOi/njk115QK0YGw iat-mode=0 +obfs4.11=obfs4 85.209.48.139:42020 1E1011E5A7BBAA0FE974454228A682295B77F1C1 cert=mh9kD7LJ6BSef95P17J7SRz7qsTJXTPp8WPdTInuAoTLRBguYQ7UL77/dJEpI7ELVC1nSA iat-mode=0 +obfs4.12=obfs4 185.177.207.144:8443 A0A4E85A13F568B6D5BC6C8FFCCF53822DC0950E cert=ZQnVMVv33zlWv6YRYoNDDx8PhKn7yVn6zxJHZOV74saNwE1YQqcU/RlAhbYp+C0QDwtXDQ iat-mode=0 +obfs4.13=obfs4 146.59.95.211:8080 CE03E1E96035DE3BCC2491BF206B0DC0A9011B22 cert=dAwUHhP9BfJ3nmTeSDYaOWFBaBTf1iBJYxcmAHycMfIBKjERLGGnjaT1ZtzmOqAu8880bw iat-mode=0 +snowflake.1=snowflake 192.0.2.3:80 2B280B23E1107BB62ABFC40DDCC8824814F80A72 fingerprint=2B280B23E1107BB62ABFC40DDCC8824814F80A72 url=https://snowflake-broker.torproject.net.global.prod.fastly.net/ front=cdn.sstatic.net ice=stun:stun.l.google.com:19302,stun:stun.stunprotocol.org:3478,stun:stun.ipfire.org:3478,stun:stun.voipgate.com:3478 utls-imitate=hellorandomizedalpn +meek-azure.1=meek_lite 192.0.2.18:80 BE776A53492E1E044A26F17306E1BC46A55A1625 url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com + +[Transports] +0=snowflake|snowflake-client.exe|0 +1=meek_lite,scramblesuit|obfs4proxy.exe|0 +2=obfs4,obfs3,obfs2|obfs4proxy.exe|2 + +[UserOverrides] +BridgesBot=GetBridgesBot +BridgesEmail=bridges@torproject.org +BridgesSite=https://bridges.torproject.org/bridges +DownloadUrl=https://www.torproject.org/download/languages +MetricsUrl=https://metrics.torproject.org/rs.html +CheckUrl=https://check.torproject.org \ No newline at end of file diff --git a/source/Functions.pas b/source/Functions.pas new file mode 100644 index 0000000..4e1d0be --- /dev/null +++ b/source/Functions.pas @@ -0,0 +1,3368 @@ +unit Functions; + +interface + +uses + Winapi.Windows, Winapi.Messages, Winapi.ActiveX, Winapi.ShlObj, System.Classes, + Winapi.ShellApi, Winapi.WinSock, System.StrUtils, System.SysUtils, System.IniFiles, + System.Variants, System.Masks, System.DateUtils, System.Generics.Collections, System.Math, + System.Win.ComObj, System.Win.Registry, Vcl.Graphics, Vcl.Forms, Vcl.Controls, Vcl.Grids, + Vcl.Menus, Vcl.Imaging.pngimage, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.Clipbrd, Vcl.Dialogs, + Vcl.Themes, synacode, blcksock, pingsend, synautil, ConstData, Addons; + +const + JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = $00002000; + CREATE_BREAKAWAY_FROM_JOB = $01000000; + +type + TBridge = record + Ip: string; + Port: Word; + Hash: string; + Transport: string; + Params: string; + end; + + TCharUpCaseTable = array [Char] of Char; + TPing = class(TPINGSend) + public + constructor Create(Timeout: Integer); + end; + TUserGrid = class(TCustomGrid); + +var + CharUpCaseTable: TCharUpCaseTable; + + function CreateJob(lpJobAttributes: PSecurityAttributes; lpName: LPCSTR): THandle; stdcall; + external 'kernel32.dll' name 'CreateJobObjectA'; + + function CompareNaturalText(psz1, psz2: PWideChar): Integer; stdcall; + external 'shlwapi.dll' name 'StrCmpLogicalW'; + + function BoolToStrDef(Value: Boolean): string; + function GetCommandLineFileName(const CommandLine: string): string; + function CheckSplitButton(Button: TButton): Boolean; + function GetAssocUpDown(AName: string): TUpdown; + function GetCountryValue(IpStr: string): Byte; + function GetIntDef(const Value, Default, Min, Max: Integer): Integer; + function GetPortProtocol(PortID: Word): string; + function GetFileVersionStr(const FileName: string): string; + function FindStr(Mask, Str: string): Boolean; + function CtrlKeyPressed(Key: Char): Boolean; + function GetArrayIndex(Data: array of string; Value: string): Integer; + function GetConstantIndex(Key: string): Integer; + function GetDefaultsValue(Key: string; Default: string = ''): string; + function GetSystemDir(CSIDL: Integer): string; + function RegistryFileExists(Root: HKEY; Key, Param: string): Boolean; + function RegistryGetValue(Root: HKEY; Key, Param: string): string; + function CreateShortcut(const CmdLine, Args, WorkDir, LinkFile, IconFile: string): IPersistFile; + function GetFullFileName(FileName: string): string; + function GetHost(SocksHost: TCombobox): string; + function GetAddressFromSocket(SocketStr: string): string; + function GetPortFromSocket(SocketStr: string): Word; + function FormatHost(HostStr: string): string; + function ExtractDomain(Url: string; HasPort: Boolean = False): string; + function GetAvailPhysMemory: Cardinal; + function GetCPUCount: Integer; + function AnsiStrToHex(const Value: AnsiString): string; + function StrToHex(Value: string): string; + function HexToStr(hex: string): string; + function AuthStageReady(AuthMethod: Integer): Boolean; + function Crypt(str, Key: string): string; + function Decrypt(str, Key: string): string; + function FileGetString(Filename: string; Hex: Boolean = False): string; + function ExecuteProcess(CmdLine: string; Flags: TProcessFlags = []; JobHandle: THandle = 0): TProcessInfo; + function RandomString(StrLen: Integer): string; + function GetPasswordHash(const password: string): string; + function CheckFileVersion(FileVersion, StaticVersion: string): Boolean; + function Explode(sPart, sInput: string): ArrOfStr; + function GetLogFileName(SeparateType: Integer): string; + function GetRoutersParamsCount(Mask: Integer): Integer; + function GetTorConfig(const Param, Default: string; Flags: TConfigFlags = []; ParamType: TParamType = ptString; MinValue: Integer = 0; MaxValue: Integer = 0; Prefix: string = ''): string; + function BytesFormat(Bytes: Double): string; + function FormatSizeToBytes(SizeStr: string): Int64; + function UTCToLocalTime(AValue: TDateTime): TDateTime; + function TorDateFormat(Date: string): string; + function CheckEditSymbols(Key: Char; UserSymbols: AnsiString = ''; EditMsg: string = ''): string; + function CheckEditString(Str: string; UserSymbols: AnsiString = ''; AllowNumbersFirst: Boolean = True; EditMsg: string = ''; edComponent: TEdit = nil): string; + function IsEmptyRow(aSg: TStringGrid; ARow: Integer): Boolean; + function IsEmptyGrid(aSg: TStringGrid): Boolean; + function IsDirectoryWritable(const Dir: string): Boolean; + function PortTCPIsOpen(Port: Word; IpStr: string; Timeout: Integer): Boolean; + function GetBridgeCert: string; + function InsensPosEx(const SubStr, S: string; Offset: Integer = 1): Integer; + function GetPrefixSize(Prefix: string; Localize: Boolean = False): Int64; + function ConvertSize(SizeStr: string; Prefix: string = ''): Int64; + function HasBrackets(Str: string): Boolean; + function IsIPv4(IpStr: string): Boolean; + function IsIPv6(IpStr: string): Boolean; + function GetNodeType(NodeStr: string): TListType; + function ValidData(Str: string; ListType: TListType): Boolean; + function ValidSize(SizeStr: string; Min, Max: Int64; Prefix: string): Boolean; + function ValidInt(IntStr: string; Min, Max: Integer): Boolean; overload; + function ValidInt(IntStr: string; Min, Max: Int64): Boolean; overload; + function ValidHash(HashStr: string): Boolean; + function ValidAddress(AddrStr: string; AllowCidr: Boolean = False; ReqBrackets: Boolean = False): Byte; + function ValidHost(HostStr: string; AllowRootDomain: Boolean = False; AllowIp: Boolean = True; ReqBrackets: Boolean = False): Boolean; + function ValidBridge(BridgeStr: string; BridgeType: TBridgeType): Boolean; + function ValidTransport(TransportStr: string): Boolean; + function ValidSocket(SocketStr: string; AllowHostNames: Boolean = False): Boolean; + function ValidPolicy(PolicyStr: string): Boolean; + function GetMsgCaption(Caption: string; MsgType: TMsgType): string; + function TryParseBridge(BridgeStr: string; out Bridge: TBridge): Boolean; + function IpToInt(IpStr: string): Cardinal; + function IntToIp(Ip: Cardinal): string; + function CidrToRange(CidrStr: string): TIPv4Range; + function IpInRanges(const IpStr: string; RangesData: array of string): Boolean; + function CompIntObjectAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; + function CompIntObjectDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; + function CompIntDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; + function CompIntAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; + function CompTextAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; + function CompTextDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; + function CompSizeAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; + function CompSizeDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; + function CompParamsAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; + function CompParamsDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; + function GetTaskBarPos: TTaskBarPos; + function SendPing(const Host: string; Timeout: Integer): Integer; + function RemoveBrackets(Str: string; Square: Boolean = False): string; + function SearchEdit(EditControl: TCustomEdit; const SearchString: String; Options: TFindOptions; FindFirst: Boolean = False): Boolean; + function ShowMsg(Msg: string; Caption: string = ''; MsgType: TMsgType = mtInfo; Question: Boolean = False): Boolean; + function MemoToLine(Memo: TMemo; ListType: TListType; Sorted: Boolean = False; Separator: string = ','): string; + function MenuToInt(Menu: TMenuItem): Integer; + function GetTransportID(TypeStr: string): Byte; + function GetTransportChar(TransportID: Byte): string; + function TryUpdateMask(var Mask: Byte; Param: Byte; Condition: Boolean): Boolean; + function TryGetDataFromStr(Str: string; DataType: TListType; out DatatStr: string): Boolean; + function SampleDown(Data: ArrOfPoint; Threshold: Integer): ArrOfPoint; + procedure DeleteDir(const DirName: string); + procedure LineToMemo(Line: string; Memo: TMemo; ListType: TListType; Sorted: Boolean = False; Separator: string = ','); + procedure IntToMenu(Menu: TMenuItem; Mask: Integer; DisableUnchecked: Boolean = False); + procedure GetNodes(var Nodeslist: string; NodeType: TNodeType; Favorites: Boolean; ini: TMemIniFile = nil); + procedure SetTorConfig(const Param, Value: string; Flags: TConfigFlags = []; Separator: string = '|'); + procedure DeleteTorConfig(const Param: string; Flags: TConfigFlags = []); + procedure SetConfigBoolean(Section, Ident: string; Value: Boolean); + procedure SetConfigInteger(Section, Ident: string; Value: Integer); overload; + procedure SetConfigInteger(Section, Ident: string; Value: Int64); overload; + procedure SetConfigString(Section, Ident: string; Value: string); + procedure SaveToLog(str: string; LogFile: string); + procedure AddUPnPEntry(Port: Integer; Desc, LanIp: string; Test: Boolean; var Msg: string); + procedure RemoveUPnPEntry(First: Integer; Second: Integer = 0; Third: Integer = 0); + procedure SetGridLastCell(aSg: TStringGrid; Show: Boolean = True; ScrollTop: Boolean = False; ManualSort: Boolean = False; ARow: Integer = -1; ACol: Integer = -1; FindCol: Integer = 0); + procedure ClearCol(aSg: TStringGrid; ACol: Integer); + procedure ClearRow(aSg: TStringGrid; ARow: Integer); + procedure ClearGrid(aSg: TStringGrid; DeleteBlankRows: Boolean = True); + procedure FindInGridColumn(aSg: TStringGrid; ACol: Integer; Key: Char); + procedure InitCharUpCaseTable(var Table: TCharUpCaseTable); + procedure DeleteARow(aSg: TStringGrid; ARow: Integer); + procedure CheckFileEncoding(FileName: string); + procedure CheckLabelEndEllipsis(lbComponent: TLabel; MaxWidth: Integer; EllipsisType: TEllipsisPosition; UseHint: Boolean; IgnoreFormSize: Boolean); + procedure BeginUpdateTable(aSg: TStringGrid); + procedure EndUpdateTable(aSg: TStringGrid); + procedure sgSort(aSg: TStringGrid; aCol: Integer; aCompare: TStringListSortCompare); + procedure SetDesktopPosition(Left, Top: Integer; CheckBorders: Boolean = True; SaveToVar: Boolean = False); + procedure GetLocalInterfaces(ComboBox: TComboBox; RecentHost: string = ''; IsSocksPort: Boolean = False); + procedure ComboBoxAutoWidth(const AComboBox: TCombobox); + procedure GridDrawIcon(aSg: TStringGrid; Rect: TRect; ls: TImageList; Index: Integer; W: Integer = 16; H: Integer = 16); + procedure GridDrawSortArrows(aSg: TStringGrid; Rect: TRect); + procedure GridSetKeyboardLayout(aSg: TStringGrid; ACol: Integer); + procedure GridSetFocus(aSg: TStringGrid); + procedure GridShowHints(aSg: TStringGrid); + procedure GridScrollCheck(aSg: TStringGrid; ACol, ColWidth: Integer); + procedure GridSelectCell(aSg: TStringGrid; ACol, ARow: Integer); + procedure GridKeyDown(aSg: TStringGrid; Shift: TShiftState; var Key: Word); + procedure GridCheckAutoPopup(aSg: TStringGrid; ARow: Integer; AllowEmptyRows: Boolean = False); + procedure GoToInvalidOption(PageID: TTabSheet; Msg: string = ''; edComponent: TCustomEdit = nil); + procedure DeleteDuplicatesFromList(List: TStringList); + procedure SortNodesList(ls: TStringList; DescSort: Boolean = False); + procedure ControlsDisable(Control: TWinControl); + procedure ControlsEnable(Control: TWinControl); + procedure LoadTorConfig; + procedure SaveTorConfig; + procedure LoadIconsFromResource(ImageList: TImageList; ResourceName: string); + procedure LoadThemesList(ThemesList: TComboBox; LastStyle: string); + procedure LoadStyle(ThemesList: TCombobox); + procedure EditMenuHandle(MenuType: TEditMenuType); + procedure EditMenuEnableCheck(MenuItem: TMenuItem; MenuType: TEditMenuType); + procedure MenuSelectPrepare(SelMenu: TMenuItem = nil; UnSelMenu: TMenuItem = nil; HandleDisabled: Boolean = False); + procedure ShellOpen(Url: string); + procedure LoadSettings(Section: string; UpDownControl: TUpDown; ini: TMemIniFile); overload; + procedure LoadSettings(Section: string; CheckBoxControl: TCheckBox; ini: TMemIniFile); overload; + procedure LoadSettings(Section: string; MenuControl: TMenuItem; ini: TMemIniFile; Default: Boolean = True); overload; + procedure LoadSettings(Section: string; ComboBoxControl: TComboBox; ini: TMemIniFile; Default: Integer = 0); overload; + procedure LoadSettings(Section: string; EditControl: TEdit; ini: TMemIniFile; UseSquareBrackets: Boolean = False); overload; + procedure LoadSettings(UpDownControl: TUpDown; Flags: TConfigFlags = []); overload; + procedure LoadSettings(CheckBoxControl: TCheckBox; Flags: TConfigFlags = []); overload; + procedure LoadSettings(MenuControl: TMenuItem; Flags: TConfigFlags = []; Default: Boolean = True); overload; + procedure EnableComposited(WinControl: TWinControl); + +implementation + +uses Main, Languages; + +constructor TPing.Create(Timeout: Integer); +begin + inherited Create; + FTimeout := Timeout; +end; + +function BoolToStrDef(Value: Boolean): string; +begin + if Value then + Result := '1' + else + Result := '0' +end; + +function SendPing(const Host: string; Timeout: Integer): Integer; +begin + with TPing.Create(Timeout) do + try + Result := -1; + if Ping(Host) then + if ReplyError = IE_NoError then + Result := PingTime; + finally + Free; + end; +end; + +function GetAssocUpDown(AName: string): TUpdown; +begin + Result := TUpdown(Tcp.FindComponent('ud' + copy(AName, 3))); +end; + +function GetCountryValue(IpStr: string): Byte; +var + GeoIpInfo: TGeoIpInfo; +begin + if GeoIpDic.TryGetValue(IpStr, GeoIpInfo) then + Result := GeoIpInfo.cc + else + Result := DEFAULT_COUNTRY_ID; +end; + +function GetArrayIndex(Data: array of string; Value: string): Integer; +var + i: Integer; +begin + for i := 0 to Length(Data) - 1 do + begin + if Data[i] = Value then + begin + Result := i; + Exit; + end; + end; + Result := -1; +end; + +function GetConstantIndex(Key: string): Integer; +var + Index: Integer; +begin + if ConstDic.TryGetValue(Key, Index) then + Result := Index + else + Result := -1; +end; + +function GetDefaultsValue(Key: string; Default: string = ''): string; +var + Value: string; +begin + if DefaultsDic.TryGetValue(Key, Value) then + begin + if Trim(Value) <> '' then + begin + Result := Value; + Exit; + end; + end; + Result := Default; +end; + +function FindStr(Mask, Str: string): Boolean; +begin + if not MatchesMask(Mask, '*[*?-!]*') then + Result := InsensPosEx(Mask, Str) <> 0 + else + Result := MatchesMask(Str, Mask); +end; + +procedure ShellOpen(Url: string); +var + Port: Word; + Address: string; +begin + if Url = '' then + Exit; + if (Pos('://', Url) <> 0) or (Pos(':\', Url) <> 0) or (Pos('mailto:', Url) = 1) then + ShellExecute(Application.Handle, 'open', PChar(Url), nil, nil, SW_NORMAL) + else + begin + Port := GetPortFromSocket(Url); + if Port = 0 then + Port := 80; + Address := ExtractDomain(Url, True); + ShellExecute(Application.Handle, 'open', PChar(GetPortProtocol(Port) + '://' + FormatHost(Address) + ':' + IntToStr(Port)), nil, nil, SW_NORMAL); + end; +end; + +procedure GridDrawIcon(aSg: TStringGrid; Rect: TRect; ls: TImageList; Index: Integer; W: Integer = 16; H: Integer = 16); +begin + ls.Draw(aSg.Canvas, Rect.Left + (Rect.Width - W) div 2, Rect.Top + (Rect.Height - H) div 2, Index, True); +end; + +procedure GridDrawSortArrows(aSg: TStringGrid; Rect: TRect); +begin + case aSg.SortType of + SORT_ASC: Tcp.lsMain.Draw(aSg.Canvas, Rect.Right - 14, Rect.Top + (Rect.Height - 16) div 2, 13, True); + SORT_DESC: Tcp.lsMain.Draw(aSg.Canvas, Rect.Right - 14, Rect.Top + (Rect.Height - 16) div 2, 14, True); + end; +end; + +procedure GridSetKeyboardLayout(aSg: TStringGrid; ACol: Integer); +var + EN_COLS, LOCALE_COLS: set of Byte; +begin + case aSg.Tag of + GRID_FILTER: + begin + EN_COLS := [0]; + LOCALE_COLS := [2]; + end; + GRID_ROUTERS: + begin + EN_COLS := [1]; + LOCALE_COLS := [4]; + end; + end; + if ACol in EN_COLS then + ActivateKeyboardLayout(1033, 0) + else + if ACol in LOCALE_COLS then + ActivateKeyboardLayout(CurrentLanguage, 0); +end; + +procedure GridSelectCell(aSg: TStringGrid; ACol, ARow: Integer); +begin + if not aSg.ScrollKeyDown then + begin + aSg.SelCol := ACol; + if aSg.Focused then + GridSetKeyboardLayout(aSg, ACol) + end + else + aSg.ScrollKeyDown := False; + aSg.SelRow := ARow; +end; + +procedure GridKeyDown(aSg: TStringGrid; Shift: TShiftState; var Key: Word); +var + i: Integer; +begin + if (ssCtrl in Shift) and (Key = 67) then + Clipboard.AsText := aSg.Cells[aSg.SelCol, aSg.SelRow]; + + if Key in [VK_PRIOR, VK_NEXT, VK_END, VK_HOME, VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN] then + aSg.ScrollKeyDown := True + else + aSg.ScrollKeyDown := False; + + case Key of + VK_APPS: + begin + case aSg.Tag of + GRID_HS, GRID_HSP: GridCheckAutoPopup(aSg, aSg.Row, True); + else + GridCheckAutoPopup(aSg, aSg.Row); + end; + end; + VK_LEFT: + begin + Key := 0; + if (aSg.SelCol > 0) then + begin + if (aSg.ColWidths[aSg.SelCol - 1] > 0) then + dec(aSg.SelCol) + else + begin + for i := aSg.SelCol - 1 downto 0 do + begin + if (aSg.ColWidths[i] > 0) then + begin + aSg.SelCol := i; + Break; + end; + end; + end; + end; + aSg.Col := aSg.SelCol; + GridSetKeyboardLayout(aSg, aSg.SelCol) + end; + VK_RIGHT: + begin + Key := 0; + if (aSg.SelCol < aSg.ColCount - 1) then + begin + if aSg.ColWidths[aSg.SelCol + 1] > 0 then + inc(aSg.SelCol) + else + begin + for i := aSg.SelCol + 1 to aSg.ColCount - 1 do + begin + if (aSg.ColWidths[i] > 0) then + begin + aSg.SelCol := i; + Break; + end; + end; + end; + end; + aSg.Col := aSg.SelCol; + GridSetKeyboardLayout(aSg, aSg.SelCol) + end; + end; +end; + +procedure CheckLabelEndEllipsis(lbComponent: TLabel; MaxWidth: Integer; EllipsisType: TEllipsisPosition; UseHint: Boolean; IgnoreFormSize: Boolean); +begin + if ((FormSize = 0) or IgnoreFormSize) and (lbComponent.Canvas.TextWidth(lbComponent.Caption) > Round(MaxWidth * Scale)) then + begin + lbComponent.EllipsisPosition := EllipsisType; + lbComponent.Width := Round(MaxWidth * Scale); + if UseHint then + lbComponent.Hint := lbComponent.Caption; + end + else + begin + lbComponent.EllipsisPosition := epNone; + lbComponent.AutoSize := True; + if UseHint then + lbComponent.Hint := ''; + end; +end; + +procedure GridSetFocus(aSg: TStringGrid); +begin + if aSg.Focused then + Exit + else + begin + if aSg.CanFocus and (Tcp.FindDialog.Handle = 0) then + aSg.SetFocus; + end; +end; + +procedure GridShowHints(aSg: TStringGrid); +begin + if (aSg.MovCol > -1) and (aSg.Canvas.TextWidth(aSg.Cells[aSg.MovCol, aSg.MovRow]) + 2 > aSg.ColWidths[aSg.MovCol]) then + begin + aSg.Hint := aSg.Cells[aSg.MovCol, aSg.MovRow]; + Application.ActivateHint(Mouse.CursorPos); + end + else + begin + Application.CancelHint; + aSg.Hint := ''; + end; +end; + +procedure GridCheckAutoPopup(aSg: TStringGrid; ARow: Integer; AllowEmptyRows: Boolean = False); +begin + if not Assigned(aSg.PopupMenu) then + Exit; + if (ARow > 0) and (not IsEmptyRow(aSg, ARow) or AllowEmptyRows) then + aSg.PopupMenu.AutoPopup := True + else + aSg.PopupMenu.AutoPopup := False; +end; + +procedure InitCharUpCaseTable(var Table: TCharUpCaseTable); +var + n: cardinal; +begin + for n := 0 to Length(Table) - 1 do + Table[Char(n)] := Char(n); + CharUpperBuff(@Table, Length(Table)); +end; + +function InsensPosEx(const SubStr, S: string; Offset: Integer = 1): Integer; +var + n: Integer; + SubStrLength: Integer; + SLength: Integer; +label + Fail; +begin + Result := 0; + if S = '' then Exit; + if Offset <= 0 then Exit; + + SubStrLength := Length(SubStr); + SLength := Length(s); + + if SubStrLength > SLength then Exit; + + Result := Offset; + while SubStrLength <= (SLength - Result + 1) do + begin + for n := 1 to SubStrLength do + if CharUpCaseTable[SubStr[n]] <> CharUpCaseTable[s[Result+n-1]] then + goto Fail; + Exit; +Fail: + Inc(Result); + end; + Result := 0; +end; + +procedure ClearRow(aSg: TStringGrid; ARow: Integer); +var + i: Integer; +begin + for i := aSg.FixedCols to aSg.ColCount - 1 do + aSg.Cells[i, ARow] := ''; +end; + +procedure ClearCol(aSg: TStringGrid; ACol: Integer); +var + i: Integer; +begin + for i := aSg.FixedRows to aSg.RowCount - 1 do + aSg.Cells[ACol, i] := ''; +end; + +procedure ClearGrid(aSg: TStringGrid; DeleteBlankRows: Boolean = True); +var + i, j: Integer; +begin + for i := 1 to aSg.RowCount - 1 do + for j := 0 to aSg.ColCount - 1 do + aSg.Cells[j, i] := ''; + if DeleteBlankRows then + aSg.RowCount := 2; +end; + +function IsEmptyRow(aSg: TStringGrid; ARow: Integer): Boolean; +var + i: Integer; +begin + Result := True; + for i := 0 to aSg.ColCount - 1 do + if aSg.Cells[i, ARow] <> '' then + begin + Result := False; + Break; + end; +end; + +function IsEmptyGrid(aSg: TStringGrid): Boolean; +begin + if (aSg.RowCount = 2) and (IsEmptyRow(aSg, 1)) then + Result := True + else + Result := False; +end; + +procedure FindInGridColumn(aSg: TStringGrid; ACol: Integer; Key: Char); +var + i: Integer; +begin + if GetTickCount > SearchTimer + 1000 then + SearchStr := ''; + SearchStr := SearchStr + Key; + for i := 1 to aSg.RowCount - 1 do + if AnsiLowerCase(copy(aSg.Cells[ACol, i], 1, Length(SearchStr))) = SearchStr then + begin + aSg.Row := i; + aSg.Col := ACol; + SearchTimer := GetTickCount; + break; + end; +end; + +procedure GoToInvalidOption(PageID: TTabSheet; Msg: string = ''; edComponent: TCustomEdit = nil); +begin + if LastPlace <> 0 then + Tcp.sbShowOptions.Click; + Tcp.pcOptions.ActivePage := PageID; + if Msg <> '' then + begin + ShowMsg(Msg, TransStr('324'), mtWarning); + if Assigned(edComponent) and (edComponent.CanFocus) then + begin + edComponent.SetFocus; + edComponent.SelectAll; + end; + end; + SetConfigInteger('Main', 'LastPlace', LastPlace); + SetConfigInteger('Main', 'OptionsPage', PageID.TabIndex); +end; + +function CheckEditString(Str: string; UserSymbols: AnsiString = ''; AllowNumbersFirst: Boolean = True; EditMsg: string = ''; edComponent: TEdit = nil): string; +var + i: Integer; + Temp: string; + ParentBox: TGroupBox; +begin + Result := ''; + ParentBox := nil; + if Assigned(edComponent) then + begin + if edComponent.GetParentComponent is TGroupBox then + begin + ParentBox := TGroupBox(edComponent.GetParentComponent); + EditMsg := TTabSheet(ParentBox.GetParentComponent).Caption + ' - ' + ParentBox.Caption + ' - ' + EditMsg + BR + BR + end + else + EditMsg := TTabSheet(edComponent.GetParentComponent).Caption + ' - ' + EditMsg + BR + BR; + end; + if Length(Str) > 0 then + begin + if not AllowNumbersFirst and ValidInt(Str[1], 0, MAXINT) then + begin + Result := TransStr('398'); + end; + + if Result = '' then + begin + for i := 1 to Length(Str) do + begin + Temp := CheckEditSymbols(Str[i], UserSymbols, EditMsg); + if Temp <> '' then + begin + Result := Temp; + Break; + end; + end; + end; + + end; + if Assigned(edComponent) and (Result <> '') then + begin + if Assigned(ParentBox) then + GoToInvalidOption(TTabSheet(ParentBox.GetParentComponent), Result, edComponent) + else + GoToInvalidOption(TTabSheet(edComponent.GetParentComponent), Result, edComponent); + end; +end; + +function CheckEditSymbols(Key: Char; UserSymbols: AnsiString = ''; EditMsg: string = ''): string; +var + i: Integer; + UserCharSet: TSysCharSet; + UserMsg: string; +begin + UserMsg := EditMsg + TransStr('269'); + UserCharSet := []; + if UserSymbols <> '' then + begin + UserMsg := StringReplace(UserMsg, ' ' + TransStr('270') + ' ', ', ', []) + ' ' + TransStr('270') + ' '; + for i := 1 to Length(UserSymbols) do + begin + Include(UserCharSet, UserSymbols[i]); + UserMsg := UserMsg + Char(UserSymbols[i]); + end; + end; + if not CharInSet(Key, ['0'..'9', 'A'..'Z', 'a'..'z', #8]) and + not CharInSet(Key, UserCharSet) then + Result := UserMsg + else + Result := ''; +end; + +function MenuToInt(Menu: TMenuItem): Integer; +var + i: Integer; +begin + Result := 0; + for i := 0 to Menu.Count - 1 do + if Menu.Items[i].AutoCheck and Menu.Items[i].Checked then + Inc(Result, Menu.Items[i].Tag); +end; + +procedure IntToMenu(Menu: TMenuItem; Mask: Integer; DisableUnchecked: Boolean = False); +var + i: Integer; + Max, Default: Integer; +begin + Default := 0; + Max := 0; + case Menu.Tag of + 1: begin Default := SHOW_NODES_FILTER_DEFAULT; Max := SHOW_NODES_FILTER_MAX; end; + 2: begin Default := ROUTER_FILTER_DEFAULT; Max := ROUTER_FILTER_MAX; end; + 3: begin Default := CIRCUIT_FILTER_DEFAULT; Max := CIRCUIT_FILTER_MAX;end; + 4,5: begin Default := TPL_MENU_DEFAULT; Max := TPL_MENU_MAX; end; + end; + if (Mask < 0) or (Mask > Max) then + Mask := Default; + for i := Menu.Count - 1 downto 0 do + begin + if Menu.Items[i].AutoCheck then + begin + if Mask and Menu.Items[i].Tag <> 0 then + begin + Menu.Items[i].Checked := True; + Menu.Items[i].Enabled := True; + Dec(Mask, Menu.Items[i].Tag); + end + else + begin + Menu.Items[i].Checked := False; + Menu.Items[i].Enabled := not DisableUnchecked; + end; + end; + + end; +end; + +procedure MenuSelectPrepare(SelMenu: TMenuItem = nil; UnSelMenu: TMenuItem = nil; HandleDisabled: Boolean = False); +var + i: Integer; + SelCount, UnSelCount, EnableCount: Integer; + Parent: TMenuItem; +begin + + if Assigned(SelMenu) then + Parent := SelMenu.Parent + else + if Assigned(UnSelMenu) then + Parent := UnSelMenu.Parent + else + Exit; + + SelCount := 0; + UnSelCount := 0; + EnableCount := 0; + + for i := 0 to Parent.Count - 1 do + begin + if Parent.Items[i].AutoCheck and (Parent.Items[i].Enabled or HandleDisabled) then + begin + Inc(EnableCount); + if Parent.Items[i].Checked then + Inc(SelCount) + else + Inc(UnSelCount); + end; + end; + if Assigned(SelMenu) then + begin + SelMenu.Enabled := (EnableCount > 0) and (UnSelCount > 0); + SelMenu.Tag := 1; + SelMenu.HelpContext := Integer(HandleDisabled); + end; + if Assigned(UnSelMenu) then + begin + UnSelMenu.Enabled := (EnableCount > 0) and (SelCount > 0); + UnSelMenu.Tag := 0; + UnSelMenu.HelpContext := Integer(HandleDisabled); + end; + +end; + +function TorDateFormat(Date: string): string; +var + fs: TFormatSettings; +begin + fs.DateSeparator := '-'; + fs.ShortDateFormat := 'yyyy-MM-dd'; + fs.TimeSeparator := ':'; + fs.ShortTimeFormat := 'hh:mm'; + fs.LongTimeFormat := 'hh:mm:ss'; + Result := DateTimeToStr(UTCToLocalTime(StrToDateTime(Date, fs))); +end; + +function UTCToLocalTime(AValue: TDateTime): TDateTime; +var + ST1, ST2: TSystemTime; + TZ: TTimeZoneInformation; +begin + GetTimeZoneInformation(TZ); + DateTimeToSystemTime(AValue, ST1); + SystemTimeToTzSpecificLocalTime(@TZ, ST1, ST2); + Result := SystemTimeToDateTime(ST2); +end; + +function LocalTimeToUTC(AValue: TDateTime): TDateTime; +var + ST1, ST2: TSystemTime; + TZ: TTimeZoneInformation; +begin + GetTimeZoneInformation(TZ); + TZ.Bias := -TZ.Bias; + TZ.StandardBias := -TZ.StandardBias; + TZ.DaylightBias := -TZ.DaylightBias; + DateTimeToSystemTime(AValue, ST1); + SystemTimeToTzSpecificLocalTime(@TZ, ST1, ST2); + Result := SystemTimeToDateTime(ST2); +end; + +function HasBrackets(Str: string): Boolean; +begin + Result := (Str[1] = '[') and (Str[Length(Str)] = ']'); +end; + +function RemoveBrackets(Str: string; Square: Boolean = False): string; +begin + if Square then + begin + Result := StringReplace(Str, '[', '', [rfReplaceAll]); + Result := StringReplace(Result, ']', '', [rfReplaceAll]); + end + else + begin + Result := StringReplace(Str, '{', '', [rfReplaceAll]); + Result := StringReplace(Result, '}', '', [rfReplaceAll]); + end; +end; + +procedure GetNodes(var Nodeslist: string; NodeType: TNodeType; Favorites: Boolean; ini: TMemIniFile = nil); +var + Count, i: Integer; + Nodes: ArrOfStr; + FilterInfo: TFilterInfo; + FNodeType: TNodeTypes; + NodeStr: string; + lbComponent: TLabel; +begin + Count := 0; + if Nodeslist <> '' then + begin + if Favorites then + begin + Nodes := Explode(',', AnsiUpperCase(StringReplace(RemoveBrackets(Nodeslist), '$', '', [rfReplaceAll]))); + for i := 0 to Length(Nodes) - 1 do + begin + if ValidData(Nodes[i], ltNode) then + begin + if Length(Nodes[i]) = 2 then + Nodes[i] := AnsiLowerCase(Nodes[i]); + if Pos('/', Nodes[i]) <> 0 then + RangesDic.AddOrSetValue(Nodes[i], CidrToRange(Nodes[i])); + NodesDic.TryGetValue(Nodes[i], FNodeType); + Include(FNodeType, NodeType); + NodesDic.AddOrSetValue(Nodes[i], FNodeType); + Inc(Count); + end + else + Nodes[i] := ''; + end; + lbComponent := Tcp.GetFavoritesLabel(Byte(NodeType)); + if (lbComponent.Tag = 0) and (lbComponent.HelpContext = 0) and (Count > 0) then + lbComponent.HelpContext := 1; + lbComponent.Tag := Count; + end + else + begin + Nodes := Explode(',', AnsiLowerCase(RemoveBrackets(Nodeslist))); + for i := 0 to Length(Nodes) - 1 do + begin + if FilterDic.TryGetValue(Nodes[i], FilterInfo) then + begin + Include(FilterInfo.Data, NodeType); + FilterDic.AddOrSetValue(Nodes[i], FilterInfo); + Inc(Count); + end + else + Nodes[i] := ''; + end; + end; + if (ini <> nil) and (Length(Nodes) <> Count) then + begin + Nodeslist := ''; + NodeStr := ''; + for i := 0 to Length(Nodes) - 1 do + if Nodes[i] <> '' then + begin + if Length(Nodes[i]) = 2 then + Nodes[i] := '{' + Nodes[i] + '}'; + Nodeslist := Nodeslist + ',' + Nodes[i]; + end; + Delete(Nodeslist, 1, 1); + case NodeType of + ntEntry: NodeStr := 'EntryNodes'; + ntMiddle: NodeStr := 'MiddleNodes'; + ntExit: NodeStr := 'ExitNodes'; + ntExclude: NodeStr := 'ExcludeNodes'; + end; + if Favorites then + ini.WriteString('Routers', NodeStr, Nodeslist) + else + ini.WriteString('Filter', NodeStr, Nodeslist); + end; + end; +end; + +function BytesFormat(Bytes: Double): string; +var + i: Integer; +begin + i := 0; + while Bytes > 1024 do + begin + Bytes := Bytes / 1024; + inc(i); + end; + Result := FloatToStrF(Bytes, ffFixed, 4, 1) + ' ' + Prefixes[i]; +end; + +function FormatSizeToBytes(SizeStr: string): Int64; +begin + Result := Round(GetPrefixSize(SeparateRight(SeparateLeft(SizeStr, '/'), ' '), True) * StrToFloatDef(SeparateLeft(SizeStr, ' '), 0.0)); +end; + +function GetHost(SocksHost: TCombobox): string; +begin + if SocksHost.Text = '0.0.0.0' then + Result := '127.0.0.1' + else + Result := SocksHost.Text; +end; + +function GetAvailPhysMemory: Cardinal; +var + MS: TMemoryStatusEx; +begin + MS.dwLength := SizeOf(MS); + GlobalMemoryStatusEx(MS); + Result := Round(MS.ullAvailPhys / 1024 / 1024); +end; + +function GetCPUCount: Integer; +var + s: TSystemInfo; +begin + GetSystemInfo(s); + Result := s.dwNumberOfProcessors; +end; + +function AnsiStrToHex(const Value: AnsiString): string; +var + i: Integer; +begin + Result := ''; + for i := 1 to Length(Value) do + Result := Result + IntToHex(Byte(Value[i]), 2); +end; + +function StrToHex(Value: string): string; +var + i: Integer; + c: Char; +begin + Result := ''; + for i := 1 to Length(Value) do + begin + c := Value[i]; + Result := Result + IntToHex(Integer(c), 2); ; + end; +end; + +function HexToStr(hex: string): string; +var + i: Integer; +begin + for i := 1 to Length(hex) div 2 do + Result := Result + Char(StrToInt('$' + copy(hex, (i - 1) * 2 + 1, 2))); +end; + +function Crypt(str, Key: string): string; +var + i, T: Integer; +begin + if (str = '') or (Key = '') then + Exit; + for i := 1 to Length(str) do + begin + T := (ord(str[i]) + (ord(Key[(pred(i) mod Length(Key)) + 1]) - ord('0'))); + str[i] := Char(T); + end; + Result := StrToHex(str); +end; + +function Decrypt(str, Key: string): string; +var + i, T: Integer; +begin + if (str = '') or (Key = '') then + Exit; + str := HexToStr(str); + for i := 1 to Length(str) do + begin + T := (ord(str[i]) - (ord(Key[(pred(i) mod Length(Key)) + 1]) - ord('0'))); + str[i] := Chr(T); + end; + Result := str; +end; + +function FileGetString(Filename: string; Hex: Boolean = False): string; +var + Buf: array of Byte; + F: File of Byte; + FSize, i: Integer; + Str: string; +begin + if FileExists(Filename) then + begin + AssignFile(F, Filename); + try + Reset(F); + FSize := FileSize(F); + SetLength(Buf, FSize); + BlockRead(F, Buf[0], FSize); + finally + Closefile(F); + end; + for i := 0 to FSize - 1 do + Str := Str + Chr(Buf[i]); + end; + if Hex then + Result := StrToHex(Str) + else + Result := Str; +end; + +function AuthStageReady(AuthMethod: Integer): Boolean; +var + Time: TDateTime; +begin + Result := False; + if AuthMethod = 1 then + Result := True + else + begin + if FileAge(UserDir + 'control_auth_cookie', Time) = True then + begin + if LastAuthCookieDate <> Time then + Result := True; + end; + end; +end; + +function ExecuteProcess(CmdLine: string; Flags: TProcessFlags = []; JobHandle: THandle = 0): TProcessInfo; +var + hStdOutRead, hStdOutWrite: THandle; + SA: SECURITY_ATTRIBUTES; + SI: STARTUPINFO; + PI: PROCESS_INFORMATION; + CreationFlags: Cardinal; +begin + Result.hProcess := 0; + Result.hStdOutput := 0; + UniqueString(CmdLine); + SA.nLength := SizeOf(SECURITY_ATTRIBUTES); + SA.bInheritHandle := True; + SA.lpSecurityDescriptor := nil; + if pfReadStdOut in Flags then + if not CreatePipe(hStdOutRead, hStdOutWrite, @SA, BUFSIZE) then + Exit; + FillChar(SI, SizeOf(SI), 0); + SI.cb := SizeOf(SI); + if pfReadStdOut in Flags then + SI.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES + else + SI.dwFlags := STARTF_USESHOWWINDOW; + if pfReadStdOut in Flags then + SI.hStdOutput := hStdOutWrite; + if pfHideWindow in Flags then + SI.wShowWindow := SW_HIDE + else + SI.wShowWindow := SW_SHOWDEFAULT; + if JobHandle <> 0 then + CreationFlags := CREATE_BREAKAWAY_FROM_JOB + else + CreationFlags := 0; + if CreateProcess(nil, PWideChar(CmdLine), nil, nil, True, CreationFlags, nil, nil, SI, PI) then + begin + if JobHandle <> 0 then + AssignProcessToJobObject(JobHandle, PI.hProcess); + if pfReadStdOut in Flags then + Result.hStdOutput := hStdOutRead; + Result.hProcess := PI.hProcess; + end; + if pfReadStdOut in Flags then + CloseHandle(hStdOutWrite); + CloseHandle(PI.hThread); +end; + +function RandomString(StrLen: Integer): string; +var + Str: string; +begin + Result := ''; + str := 'abcdefghijklmnopqrstuvwxyz' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + '0123456789'; + Randomize; + repeat + Result := Result + str[Random(Length(str)) + 1]; + until (Length(Result) = StrLen) +end; + +function GetPasswordHash(const password: string): string; +var + tmp, hash, salt: string; + count: Integer; +begin + if password = '' then + Exit; + salt := RandomString(8); + count := (16 + (96 and 15)) shl ((96 shr 4) + 6); + tmp := salt + password; + while count > 0 do + begin + if count > Length(tmp) then + begin + insert(tmp, hash, Length(hash) + 1); + count := count - Length(tmp); + end + else + begin + insert(copy(tmp, 0, count), hash, Length(hash) + 1); + count := 0; + end; + end; + salt := salt + Chr(96); + Result := '16:' + StrToHex(salt) + AnsiStrToHex(SHA1(AnsiString(hash))); +end; + +function Explode(sPart, sInput: string): ArrOfStr; +begin + Result := nil; + while Pos(sPart, sInput) <> 0 do + begin + SetLength(Result, Length(Result) + 1); + Result[Length(Result) - 1] := copy(sInput, 0, Pos(sPart, sInput) - 1); + Delete(sInput, 1, Pos(sPart, sInput)); + end; + SetLength(Result, Length(Result) + 1); + Result[Length(Result) - 1] := sInput; +end; + +function GetLogFileName(SeparateType: Integer): string; +var + FileName: string; +begin + case SeparateType of + 1: FileName := FormatDateTime('yyyy-mm', Now); + 2: FileName := FormatDateTime('yyyy-mm-dd', Now); + else + FileName := 'console'; + end; + Result := LogsDir + FileName + '.log'; +end; + +procedure SaveToLog(str: string; LogFile: string); +var + log: TextFile; +begin + AssignFile(log, LogFile); +{$i-} + if FileExists(LogFile) then + Append(log) + else + Rewrite(log); +{$i+} + WriteLn(log, str); + Closefile(log); +end; + +procedure DeleteDir(const DirName: string); +var + Path: string; + F: TSearchRec; +begin + Path:= DirName + '\*.*'; + if FindFirst(Path, faAnyFile, F) = 0 then + begin + try + repeat + if (F.Attr and faDirectory <> 0) then + begin + if (F.Name <> '.') and (F.Name <> '..') then + DeleteDir(DirName + '\' + F.Name); + end + else + DeleteFile(DirName + '\' + F.Name); + until FindNext(F) <> 0; + finally + FindClose(F); + end; + end; + RemoveDir(DirName); +end; + +function GetIntDef(const Value, Default, Min, Max: Integer): Integer; +begin + if InRange(Value, Min, Max) then + Result := Value + else + Result := Default; +end; + +procedure LoadSettings(Section: string; EditControl: TEdit; ini: TMemIniFile; UseSquareBrackets: Boolean = False); +var + Str: string; +begin + if FirstLoad then + EditControl.ResetValue := EditControl.Text; + Str := ini.ReadString(Section, StringReplace(EditControl.Name, 'ed', '', [rfIgnoreCase]), EditControl.ResetValue); + + if UseSquareBrackets then + EditControl.Text := RemoveBrackets(Str, True) + else + EditControl.Text := Str; +end; + +procedure LoadSettings(Section: string; ComboBoxControl: TComboBox; ini: TMemIniFile; Default: Integer = 0); +var + Value: Integer; +begin + if FirstLoad then + ComboBoxControl.ResetValue := Default; + + Value := ini.ReadInteger(Section, StringReplace(ComboBoxControl.Name, 'cbx', '', [rfIgnoreCase]), Default); + if InRange(Value, 0, ComboBoxControl.Items.Count - 1) then + ComboBoxControl.ItemIndex := Value + else + ComboBoxControl.ItemIndex := Default; +end; + +procedure LoadSettings(Section: string; UpDownControl: TUpDown; ini: TMemIniFile); +var + Value: Integer; + Ident: string; +begin + if FirstLoad then + UpDownControl.ResetValue := UpDownControl.Position; + Ident := StringReplace(UpDownControl.Name, 'ud', '', [rfIgnoreCase]); + + Value := ini.ReadInteger(Section, Ident, UpDownControl.ResetValue); + if InRange(Value, UpDownControl.Min, UpDownControl.Max) then + UpDownControl.Position := Value + else + UpDownControl.Position := UpDownControl.ResetValue; +end; + +procedure LoadSettings(UpDownControl: TUpDown; Flags: TConfigFlags = []); +begin + if FirstLoad then + UpDownControl.ResetValue := UpDownControl.Position; + UpDownControl.Position := StrToInt(GetTorConfig(StringReplace(UpDownControl.Name, 'ud', '', [rfIgnoreCase]), IntToStr(UpDownControl.ResetValue), Flags, ptInteger, UpDownControl.Min, UpDownControl.Max)); +end; + +procedure LoadSettings(Section: string; CheckBoxControl: TCheckBox; ini: TMemIniFile); +begin + if FirstLoad then + CheckBoxControl.ResetValue := CheckBoxControl.Checked; + CheckBoxControl.Checked := ini.ReadBool(Section, StringReplace(CheckBoxControl.Name, 'cb', '', [rfIgnoreCase]), CheckBoxControl.ResetValue) +end; + +procedure LoadSettings(CheckBoxControl: TCheckBox; Flags: TConfigFlags = []); +begin + if FirstLoad then + CheckBoxControl.ResetValue := CheckBoxControl.Checked; + CheckBoxControl.Checked := StrToBool(GetTorConfig(StringReplace(CheckBoxControl.Name, 'cb', '', [rfIgnoreCase]), BoolToStrDef(CheckBoxControl.ResetValue), Flags, ptBoolean)); +end; + +procedure LoadSettings(Section: string; MenuControl: TMenuItem; ini: TMemIniFile; Default: Boolean = True); +begin + MenuControl.Checked := ini.ReadBool(Section, StringReplace(MenuControl.Name, 'mi', '', [rfIgnoreCase]), Default) +end; + +procedure LoadSettings(MenuControl: TMenuItem; Flags: TConfigFlags = []; Default: Boolean = True); +begin + MenuControl.Checked := StrToBool(GetTorConfig(StringReplace(MenuControl.Name, 'mi', '', [rfIgnoreCase]), BoolToStrDef(Default), Flags, ptBoolean)); +end; + +procedure LoadTorConfig; +var + i: Integer; +begin + if Assigned(TorConfig) then + Exit + else + begin + TorConfig := TStringList.Create; + if FileExists(TorConfigFile) then + TorConfig.LoadFromFile(TorConfigFile, EncodingNoBom); + for i := 0 to TorConfig.Count - 1 do + TorConfig[i] := Trim(TorConfig[i]); + end; +end; + +procedure SaveTorConfig; +var + i: Integer; +begin + LoadTorConfig; + for i := TorConfig.Count - 1 downto 0 do + if (i <> 1) and (TorConfig[i] = '') then + TorConfig.Delete(i); + TorConfig.SaveToFile(TorConfigFile, EncodingNoBom); + FreeAndNil(TorConfig); + FileAge(TorConfigFile, LastTorrcDate); +end; + +function GetTorConfig(const Param, Default: string; Flags: TConfigFlags = []; ParamType: TParamType = ptString; MinValue: Integer = 0; MaxValue: Integer = 0; Prefix: string = ''): string; +var + i, p, ParamSize, CommentPos: Integer; + ls: TStringList; + Values: set of Byte; + Search: Boolean; + + procedure Reset; + begin + if (Default <> '') and (GetDefaultsValue(Param) <> Default) then + TorConfig[i] := Param + ' ' + Default + else + TorConfig[i] := ''; + Result := Default; + end; + +begin + LoadTorConfig; + + if cfFindComments in Flags then + Values := [1,2,3] + else + Values := [1]; + Search := False; + + if cfMultiLine in Flags then + ls := TStringList.Create + else + ls := nil; + + for i := 0 to TorConfig.Count - 1 do + begin + p := InsensPosEx(Param + ' ', TorConfig[i]); + Search := p in Values; + if Search then + begin + if cfExistCheck in Flags then + begin + Result := '1'; + Exit; + end; + ParamSize := Length(Param); + CommentPos := Pos('#', TorConfig[i]); + if CommentPos > p + ParamSize then + Result := Trim(copy(TorConfig[i], p + ParamSize + 1, CommentPos - ParamSize - 2)) + else + Result := Trim(copy(TorConfig[i], p + ParamSize + 1, Length(TorConfig[i]) - ParamSize - 1)); + case ParamType of + ptString: + if (MinValue > 0) or (MaxValue > 0) then + begin + ParamSize := Length(Result); + if (ParamSize < MinValue) or (ParamSize > MaxValue) then + Reset; + end; + ptInteger: + if not ValidInt(Result, MinValue, MaxValue) then + Reset; + ptBoolean: + begin + if not ValidInt(Result, 0, 1) then + Reset + else + begin + if cfBoolInvert in Flags then + Result := BoolToStrDef(not StrToBool(Result)); + end; + end; + ptSocket: + if not ValidSocket(Result, Boolean(MinValue)) then + Reset; + ptHost: + if not ValidHost(Result, False, True, Boolean(MinValue)) then + Reset; + ptSize: + if not ValidSize(Result, MinValue, MaxValue, Prefix) then + Reset; + ptBridge: + if not ValidBridge(Result, btList) then + begin + TorConfig[i] := ''; + Continue; + end; + end; + if cfMultiLine in Flags then + begin + if Result <> '' then + ls.Append(Result) + end + else + Break; + end; + end; + + if cfMultiLine in Flags then + begin + if ls.Count = 0 then + Result := Default + else + begin + Result := ''; + DeleteDuplicatesFromList(ls); + for i := 0 to ls.Count - 1 do + Result := Result + '|' + ls[i]; + Delete(Result, 1, 1); + end; + ls.Free; + end + else + begin + if not Search then + begin + Result := Default; + if cfAutoAppend in Flags then + TorConfig.Append(Param + ' ' + Default); + end; + end; + + if cfAutoSave in Flags then + SaveTorConfig; +end; + +procedure SetTorConfig(const Param, Value: string; Flags: TConfigFlags = []; Separator: string = '|'); +var + i, p: Integer; + Values: set of Byte; + ParseStr: ArrOfStr; +begin + LoadTorConfig; + if cfMultiLine in Flags then + begin + if Value <> '' then + begin + ParseStr := Explode(Separator, Value); + for i := 0 to Length(ParseStr) - 1 do + if ParseStr[i] <> '' then + TorConfig.Append(Param + ' ' + ParseStr[i]); + end + else + DeleteTorConfig(Param, [cfMultiLine]); + end + else + begin + p := 0; + if cfFindComments in Flags then + Values := [1,2,3] + else + Values := [1]; + for i := TorConfig.Count - 1 downto 0 do + begin + p := InsensPosEx(Param + ' ', TorConfig[i]); + if p in Values then + Break; + end; + if p in Values then + begin + if (Value <> '') and (GetDefaultsValue(Param) <> Value) then + TorConfig[i] := Param + ' ' + Value + else + TorConfig.Delete(i); + end + else + begin + if (Value <> '') and (GetDefaultsValue(Param) <> Value) then + TorConfig.Append(Param + ' ' + Value); + end; + end; + if cfAutoSave in Flags then + SaveTorConfig; +end; + +procedure DeleteTorConfig(const Param: string; Flags: TConfigFlags = []); +var + i,j: Integer; + Values: set of Byte; + ParseStr: ArrOfStr; +begin + LoadTorConfig; + if cfFindComments in Flags then + Values := [1,2,3] + else + Values := [1]; + ParseStr := Explode(',', Param); + for i := TorConfig.Count - 1 downto 0 do + begin + for j := 0 to Length(ParseStr) - 1 do + begin + if InsensPosEx(ParseStr[j] + ' ', TorConfig[i]) in Values then + begin + TorConfig.Delete(i); + if not (cfMultiLine in Flags) then + Break; + end; + end; + end; + if cfAutoSave in Flags then + SaveTorConfig; +end; + +procedure SetConfigBoolean(Section, Ident: string; Value: Boolean); +var + ini: TMemIniFile; +begin + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + ini.WriteBool(Section, Ident, Value); + finally + ini.UpdateFile; + ini.Free; + end; +end; + +procedure SetConfigInteger(Section, Ident: string; Value: Int64); overload; +var + ini: TMemIniFile; +begin + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + ini.WriteInteger(Section, Ident, Value); + finally + ini.UpdateFile; + ini.Free; + end; +end; + +procedure SetConfigInteger(Section, Ident: string; Value: Integer); overload; +var + ini: TMemIniFile; +begin + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + ini.WriteInt64(Section, Ident, Value); + finally + ini.UpdateFile; + ini.Free; + end; +end; + +procedure SetConfigString(Section, Ident: string; Value: string); +var + ini: TMemIniFile; +begin + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + ini.WriteString(Section, Ident, Value); + finally + ini.UpdateFile; + ini.Free; + end; +end; + +procedure DeleteDuplicatesFromList(List: TStringList); +var + ls: TDictionary; + i: Integer; +begin + ls := TDictionary.Create; + try + for i := List.Count - 1 downto 0 do + begin + if ls.ContainsKey(List[i]) then + List.Delete(i) + else + ls.AddOrSetValue(List[i], 0); + end; + finally + ls.Free; + end; +end; + +procedure SortNodesList(ls: TStringList; DescSort: Boolean = False); +var + i: Integer; + Hashes, Addresses, CountryCodes: TStringList; +begin + Addresses := TStringList.Create; + CountryCodes := TStringList.Create; + Hashes := TStringList.Create; + try + for i := 0 to ls.Count - 1 do + begin + if ValidHash(ls[i]) then + Hashes.Append(ls[i]) + else + begin + if FilterDic.ContainsKey(AnsiLowerCase(ls[i])) then + CountryCodes.Append(ls[i]) + else + Addresses.Append(ls[i]) + end; + end; + Addresses.CustomSort(CompTextAsc); + CountryCodes.Sort; + Hashes.Sort; + ls.Clear; + if DescSort then + begin + ls.AddStrings(Hashes); + ls.BeginUpdate; + try + for i := Addresses.Count - 1 downto 0 do + ls.AddObject(Addresses[i], Addresses.Objects[i]); + for i := CountryCodes.Count - 1 downto 0 do + ls.AddObject(CountryCodes[i], CountryCodes.Objects[i]); + finally + ls.EndUpdate; + end; + end + else + begin + ls.AddStrings(CountryCodes); + ls.AddStrings(Addresses); + ls.AddStrings(Hashes); + end; + finally + Hashes.Free; + Addresses.Free; + CountryCodes.Free; + end; +end; + +function GetNodeType(NodeStr: string): TListType; +begin + Result := ltNoCheck; + if Length(NodeStr) < 2 then + Exit; + if ValidHash(NodeStr) then + Result := ltHash + else + begin + if ValidAddress(NodeStr, True) = 1 then + begin + if Pos('/', NodeStr) <> 0 then + Result := ltCidr + else + Result := ltIp; + end + else + begin + if FilterDic.ContainsKey(AnsiLowerCase(NodeStr)) then + Result := ltCode + end; + end; +end; + +function ValidData(Str: string; ListType: TListType): Boolean; +begin + case ListType of + ltHost: Result := ValidHost(Str, True, True); + ltHash: Result := ValidHash(Str); + ltPolicy: Result := ValidPolicy(Str); + ltBridge: Result := ValidBridge(Str, btList); + ltNode: Result := ValidHash(Str) or (ValidAddress(Str, True, True) = 1) or FilterDic.ContainsKey(AnsiLowerCase(Str)); + ltSocket: Result := ValidSocket(Str); + ltTransport: Result := ValidTransport(Str); + else + Result := True; + end; +end; + +procedure LineToMemo(Line: string; Memo: TMemo; ListType: TListType; Sorted: Boolean = False; Separator: string = ','); +var + ParseStr: ArrOfStr; + i: Integer; + ls: TStringList; + Str: string; +begin + ParseStr := Explode(Separator, Line); + Memo.Tag := Length(ParseStr); + if (Memo.Tag = 1) and (Trim(ParseStr[0]) = '') then + Memo.Tag := 0; + ls := TStringList.Create; + try + if ListType = ltNoCheck then + begin + if Memo.Tag <> 0 then + for i := 0 to Length(ParseStr) - 1 do + ls.Append(ParseStr[i]); + end + else + begin + for i := 0 to Length(ParseStr) - 1 do + begin + Str := Trim(ParseStr[i]); + if Str <> '' then + begin + if ValidData(Str, ListType) then + begin + if ListType = ltNode then + begin + if Length(Str) = 2 then + Str := AnsiUpperCase(Str); + end; + ls.Append(Str); + end; + end; + end; + DeleteDuplicatesFromList(ls); + if Sorted then + begin + if ListType = ltNode then + SortNodesList(ls) + else + ls.CustomSort(CompTextAsc); + end; + end; + Memo.Text := ls.Text; + finally + ls.Free; + end; +end; + +function MemoToLine(Memo: TMemo; ListType: TListType; Sorted: Boolean = False; Separator: string = ','): string; +var + ls: TStringList; + i: Integer; + Str: string; +begin + ls := TStringList.Create; + try + if ListType = ltNoCheck then + ls.Text := Memo.Text + else + begin + ls.Text := StringReplace(Memo.Text, ',', BR, [rfReplaceAll]); + if ListType = ltNode then + ls.Text := RemoveBrackets(ls.Text); + for i := ls.Count - 1 downto 0 do + begin + Str := Trim(ls[i]); + if Str = '' then + ls.Delete(i) + else + begin + case ListType of + ltHost: Str := ExtractDomain(Str); + ltHash: Str := AnsiUpperCase(Str); + ltPolicy: Str := AnsiLowerCase(Str); + ltNode: Str := AnsiUpperCase(Str); + end; + if not ValidData(Str, ListType) then + ls.Delete(i) + else + ls[i] := Str; + end; + end; + DeleteDuplicatesFromList(ls); + if Sorted then + begin + if ListType = ltNode then + SortNodesList(ls) + else + ls.CustomSort(CompTextAsc); + end; + Memo.Text := ls.Text; + end; + Result := ''; + for i := 0 to ls.Count - 1 do + Result := Result + Separator + ls[i]; + Delete(Result, 1, Length(Separator)); + finally + ls.Free; + end; +end; + +procedure AddUPnPEntry(Port: Integer; Desc, LanIp: string; Test: Boolean; var Msg: string); +var + Nat: OleVariant; + Ports: OleVariant; +begin + try + Nat := CreateOleObject('HNetCfg.NATUPnP'); + Ports := Nat.StaticPortMappingCollection; + if not VarIsClear(Ports) then + begin + Ports.Add(Port, 'TCP', Port, LanIp, True, Desc); + if Test then + begin + Msg := Msg + LanIp + ' : ' + inttostr(Port) + ' - ' + TransStr('245') + BR; + if ConnectState = 0 then + Ports.Remove(Port, 'TCP'); + end; + end; + except + on E:Exception do + Exit + end; +end; + +procedure RemoveUPnPEntry(First: Integer; Second: Integer = 0; Third: Integer = 0); +var + Nat: Variant; + Ports: Variant; +begin + if (First = 0) and (Second = 0) and (Third = 0) then + Exit; + try + Nat := CreateOleObject('HNetCfg.NATUPnP'); + Ports := Nat.StaticPortMappingCollection; + if not VarIsClear(Ports) then + begin + if First > 0 then + Ports.Remove(First, 'TCP'); + if Second > 0 then + Ports.Remove(Second, 'TCP'); + if Third > 0 then + Ports.Remove(Third, 'TCP'); + end; + except + on E:Exception do + Exit; + end; +end; + +function IsDirectoryWritable(const Dir: string): Boolean; +var + TempFile: array[0..MAX_PATH] of Char; +begin + if GetTempFileName(PChar(Dir), 'Tmp', 0, TempFile) <> 0 then + Result := DeleteFile(TempFile) + else + Result := False; +end; + +function GetFullFileName(FileName: string): string; +var + ppshf: IShellFolder; + lpItemID: PItemIDList; + NumChars: Cardinal; + Flags: Cardinal; + s: array[0..MAX_PATH] of Char; + P: PWideChar; +begin + NumChars := Length(FileName); + Flags := SFGAO_FILESYSTEM; + SHGetDesktopFolder(ppshf); + P := StringToOleStr(FileName); + ppshf.ParseDisplayName(Application.Handle, nil, P, NumChars, lpItemID, Flags); + ShGetPathFromIDList(lpItemID, s); + SetString(Result, s, StrLen(s)); +end; + +function CreateShortcut(const CmdLine, Args, WorkDir, LinkFile, IconFile: string): IPersistFile; +var + MyObject: IUnknown; + MySLink: IShellLink; + MyPFile: IPersistFile; + WideFile: WideString; +begin + MyObject := CreateComObject(CLSID_ShellLink); + MySLink := MyObject as IShellLink; + MyPFile := MyObject as IPersistFile; + with MySLink do + begin + SetPath(PChar(CmdLine)); + SetIconLocation(PChar(IconFile), 0 ); + SetArguments(PChar(Args)); + SetWorkingDirectory(PChar(WorkDir)); + end; + WideFile := LinkFile; + MyPFile.Save(PWideChar(WideFile), false); + Result := MyPFile; +end; + +function GetSystemDir(CSIDL: Integer): string; +var + Dir: array[0..MAX_PATH] of WideChar; +begin + if SHGetFolderPath(0, CSIDL, 0, SHGFP_TYPE_CURRENT, @Dir) = S_OK then + Result := Dir; +end; + +function GetCommandLineFileName(const CommandLine: string): string; +var + Count: Integer; + Args: PPWideChar; + DataStr: array[0..MAX_PATH] of WideChar; +begin + Args := CommandLineToArgvW(PWideChar(CommandLine), Count); + if Assigned(Args) and (Count > 0) then + begin + if ExpandEnvironmentStrings(Args^, DataStr, MAX_PATH) > 0 then + Result := DataStr + else + Result := Args^; + Exit; + end; + Result := ''; +end; + +function RegistryFileExists(Root: HKEY; Key, Param: string): Boolean; +begin + Result := FileExists(GetCommandLineFileName(RegistryGetValue(Root, Key, Param))); +end; + +function RegistryGetValue(Root: HKEY; Key, Param: string): string; +var + Reg: TRegistry; +begin + Result := ''; + Reg := TRegistry.Create; + try + Reg.RootKey := Root; + Reg.OpenKey(Key, False); + case Reg.GetDataType(Param) of + rdInteger: Result := IntToStr(Reg.ReadInteger(Param)); + rdString, rdExpandString: Result := Reg.ReadString(Param); + end; + Reg.CloseKey; + finally + Reg.Free; + end; +end; + +function TryGetDataFromStr(Str: string; DataType: TListType; out DatatStr: string): Boolean; +var + i: Integer; + ParseStr: ArrOfStr; +begin + if Str <> '' then + begin + ParseStr := Explode(' ', Str); + for i := 0 to Length(ParseStr) - 1 do + begin + if ValidData(ParseStr[i], DataType) then + begin + Result := True; + DatatStr := ParseStr[i]; + Exit; + end; + end; + end; + Result := False; + DatatStr := ''; +end; + +function PortTCPIsOpen(Port: Word; IpStr: string; Timeout: Integer): Boolean; +var + Socket: TTCPBlockSocket; +begin + Socket := TTCPBlockSocket.Create; + Socket.ConnectionTimeout := Timeout; + Socket.SetLinger(True, 0); + try + Socket.Connect(IpStr, IntToStr(Port)); + Result := Socket.LastError = 0; + CloseSocket(Socket.Socket); + finally + Socket.Free; + end; +end; + +function GetBridgeCert: string; +var + ls: TStringList; + i, p: Integer; + Bridgeline: string; +begin + Result := ''; + ls := TStringList.Create; + try + Bridgeline := UserDir + 'pt_state\obfs4_bridgeline.txt'; + if FileExists(Bridgeline) then + begin + ls.LoadFromFile(Bridgeline, EncodingNoBom); + for i := ls.Count - 1 downto 0 do + begin + p := Pos('cert=', ls[i]); + if (p <> 0) then + begin + Result := Trim(copy(ls[i], p)); + break; + end; + end; + end; + finally + ls.Free; + end; +end; + +function GetMsgCaption(Caption: string; MsgType: TMsgType): string; +begin + if Caption = '' then + begin + case MsgType of + mtInfo: + Result := TransStr('235'); + mtWarning: + Result := TransStr('246'); + mtError: + Result := TransStr('247'); + mtQuestion: + Result := TransStr('262'); + end; + end + else + Result := Caption; +end; + +function ShowMsg(Msg: string; Caption: string = ''; MsgType: TMsgType = mtInfo; Question: Boolean = False): Boolean; +var + MsgCode, MsgButtons, MsgResult: Integer; +begin + MsgCode := 0; + case MsgType of + mtInfo: + MsgCode := MB_ICONINFORMATION; + mtWarning: + MsgCode := MB_ICONWARNING; + mtError: + MsgCode := MB_ICONERROR; + mtQuestion: + MsgCode := MB_ICONQUESTION; + end; + if Question then + begin + MsgButtons := MB_YESNO; + MsgResult := IDYES; + end + else + begin + MsgButtons := MB_OK; + MsgResult := ID_OK; + end; + + if MessageBox(Application.Handle, PChar(Msg), PChar(GetMsgCaption(Caption, MsgType)), MsgButtons + MsgCode) = MsgResult then + Result := True + else + Result := False; +end; + +procedure DeleteARow(aSg: TStringGrid; ARow: Integer); +begin; + if aSg.RowCount = 2 then + ClearGrid(aSg) + else + begin + ClearRow(aSg, ARow); + TUserGrid(aSg).DeleteRow(ARow); + end; +end; + +procedure CheckFileEncoding(FileName: string); +var + AStream: TFileStream; + Options: TStringList; + Hdr: string; +begin + if not FileExists(FileName) then + Exit; + Hdr := ''; + AStream := TFileStream.Create(FileName, fmOpenRead); + try + AStream.Seek(0,soFromBeginning); + SetLength(Hdr, 2); + AStream.ReadBuffer(Hdr[1], 3); + if StrToHex(Hdr) = 'BBEFBF' then + Exit; + finally + AStream.Free; + end; + Options := TStringList.Create; + try + Options.LoadFromFile(FileName); + Options.SaveToFile(FileName, TEncoding.UTF8); + finally + Options.Free; + end; +end; + +function CompIntObjectAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; +begin + Result := CompareValue(Integer(aSl.Objects[aIndex1]), Integer(aSl.Objects[aIndex2])); +end; + +function CompIntObjectDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; +begin + Result := CompareValue(Integer(aSl.Objects[aIndex2]), Integer(aSl.Objects[aIndex1])); +end; + +function CompIntAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; +begin + Result := CompareValue(StrToIntDef(aSl[aIndex1], 0), StrToIntDef(aSl[aIndex2], 0)); +end; + +function CompIntDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; +begin + Result := CompareValue(StrToIntDef(aSl[aIndex2], 0), StrToIntDef(aSl[aIndex1], 0)); +end; + +function CompTextAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; +begin + Result := CompareNaturalText(PWideChar(aSl[aIndex1]), PWideChar(aSl[aIndex2])); +end; + +function CompTextDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; +begin + Result := CompareNaturalText(PWideChar(aSl[aIndex2]), PWideChar(aSl[aIndex1])); +end; + +function CompSizeAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; +begin + Result := CompareValue(FormatSizeToBytes(aSl[aIndex1]), FormatSizeToBytes(aSl[aIndex2])); +end; + +function CompSizeDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; +begin + Result := CompareValue(FormatSizeToBytes(aSl[aIndex2]), FormatSizeToBytes(aSl[aIndex1])); +end; + +function CompParamsAsc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; +begin + Result := CompareValue(RoutersDic.Items[aSl[aIndex1]].Params, RoutersDic.Items[aSl[aIndex2]].Params); +end; + +function CompParamsDesc(aSl: TStringList; aIndex1, aIndex2: Integer) : Integer; +begin + Result := CompareValue(RoutersDic.Items[aSl[aIndex2]].Params, RoutersDic.Items[aSl[aIndex1]].Params); +end; + +procedure SgSort(aSg: TStringGrid; aCol: Integer; aCompare: TStringListSortCompare); +var + SlSort, SlRow: TStringList; + i, j: Integer; +begin + SlSort := TStringList.Create; + for i := aSg.FixedRows to aSg.RowCount - 1 do + begin + SlRow := TStringList.Create; + SlRow.Assign(aSg.Rows[i]); + SlSort.AddObject(aSg.Cells[aCol, i], SlRow); + end; + SlSort.CustomSort(aCompare); + j := 0; + for i := aSg.FixedRows to aSg.RowCount - 1 do + begin + SlRow := Pointer(SlSort.Objects[j]); + aSg.Rows[i].Assign(SlRow); + SlRow.Free; + Inc(j); + end; + FreeAndNil(SlSort); +end; + +procedure SetGridLastCell(aSg: TStringGrid; Show: Boolean = True; ScrollTop: Boolean = False; ManualSort: Boolean = False; ARow: Integer = -1; ACol: Integer = -1; FindCol: Integer = 0); +var + RowIndex, ColIndex: Integer; +begin + if ARow = -1 then + begin + if ScrollTop and ManualSort then + RowIndex := 1 + else + RowIndex := aSg.Cols[FindCol].IndexOf(aSg.RowID); + end + else + RowIndex := ARow; + + if not (goRowSelect in aSg.Options) then + begin + if aSg.Row = RowIndex then + begin + if (RowIndex = 1) and (aSg.RowCount > 2) then + aSg.Row := RowIndex + 1 + else + if aSg.RowCount > 2 then + aSg.Row := RowIndex - 1; + end; + end; + + if (RowIndex > 0) then + begin + if ACol > -1 then + ColIndex := ACol + else + ColIndex := aSg.SelCol; + TUserGrid(aSg).MoveColRow(ColIndex, RowIndex, True, Show); + end; +end; + +procedure BeginUpdateTable(aSg: TStringGrid); +var + i: Integer; +begin + for i := 0 to aSg.ColCount - 1 do + aSg.Cols[i].BeginUpdate; +end; + +procedure EndUpdateTable(aSg: TStringGrid); +var + i: Integer; +begin + for i := 0 to aSg.ColCount - 1 do + aSg.Cols[i].EndUpdate; +end; + +function GetTaskBarPos: TTaskBarPos; +var + hTaskbar: HWND; + T: TRect; + ScrW, ScrH: Integer; +begin + Result := tbNone; + hTaskbar := FindWindow('Shell_TrayWnd', nil); + if hTaskbar <> 0 then + begin + GetWindowRect(hTaskbar, T); + ScrW := Screen.Width; + ScrH := Screen.Height; + if (T.Top > ScrH div 2) and (T.Right >= ScrW) then + Result := tbBottom + else if (T.Top < ScrH div 2) and (T.Bottom <= ScrW div 2) then + Result := tbTop + else if (T.Left < ScrW div 2) and (T.Top <= 0) then + Result := tbLeft + else if T.Left >= ScrW div 2 then + Result := tbRight; + end; +end; + +procedure SetDesktopPosition(Left, Top: Integer; CheckBorders: Boolean = True; SaveToVar: Boolean = False); +var + TP: TTaskBarPos; +begin + if (Left = -1) and (Top = -1) then + begin + Left := Round((Screen.Width - Tcp.Width) / 2); + Top := Round((Screen.Height - Tcp.Height) / 2); + end + else + begin + if CheckBorders or FirstLoad then + begin + TP := GetTaskBarPos; + if Left < Screen.WorkAreaLeft then + Left := Screen.WorkAreaLeft + 5 + else + if Left > Screen.WorkAreaWidth - Tcp.Width then + begin + if TP = tbLeft then + Left := Screen.Width - Tcp.Width - 5 + else + Left := Screen.WorkAreaWidth - Tcp.Width - 5; + end; + + if Top < Screen.WorkAreaTop then + Top := Screen.WorkAreaTop + 5 + else + if Top > Screen.WorkAreaHeight - Tcp.Height then + begin + if TP = tbTop then + Top := Screen.Height - Tcp.Height - 5 + else + Top := Screen.WorkAreaHeight - Tcp.Height - 5; + end; + end; + end; + if not (FirstLoad and (FormSize = 1)) then + begin + Tcp.Left := Left; + Tcp.Top := Top; + end; + + if SaveToVar then + begin + if FormSize = 0 then + begin + DecFormPos.X := Left; + DecFormPos.Y := Top; + end + else + begin + IncFormPos.X := Left; + IncFormPos.Y := Top; + end; + end; +end; + +procedure LoadThemesList(ThemesList: TComboBox; LastStyle: string); +var + Search: TSearchRec; + ls: TStringList; + Index: Integer; +begin + if LastStyle = 'Windows' then + LastStyle := TransStr('104') + else + if LastStyle = '' then + LastStyle := ThemesList.Text; + ls := TStringList.Create; + try + ls.Append(TransStr('104')); + if FindFirst(ThemesDir + '*.vsf', faAnyFile, Search) = 0 then + begin + try + repeat + if (Search.Attr and faDirectory = 0)then + ls.Append(Copy(Search.Name, 1, RPos('.', Search.Name) - 1)); + until FindNext(Search) <> 0; + finally + FindClose(Search); + end; + end; + ThemesList.Items := ls; + Index := ThemesList.Items.IndexOf(LastStyle); + if Index = -1 then + ThemesList.ItemIndex := 0 + else + ThemesList.ItemIndex := Index; + finally + ls.Free; + end; + ComboBoxAutoWidth(ThemesList); +end; + +procedure LoadStyle(ThemesList: TCombobox); +var + SI: TStyleInfo; + i: Integer; + FileName, StyleName: string; +begin + if ThemesList.ItemIndex = 0 then + TStyleManager.SetStyle(TStyleManager.SystemStyle) + else + begin + FileName := ThemesDir + ThemesList.Text + '.vsf'; + if not FileExists(FileName) then + Exit; + if TStyleManager.IsValidStyle(FileName, SI) then + begin + if TStyleManager.ActiveStyle.Name <> SI.Name then + begin + if TStyleManager.Style[SI.Name] = nil then + TStyleManager.LoadFromFile(FileName); + TStyleManager.SetStyle(TStyleManager.Style[SI.Name]); + end; + end; + end; + for i := Length(TStyleManager.StyleNames) - 1 downto 0 do + begin + StyleName := TStyleManager.StyleNames[i]; + if (StyleName <> 'Windows') and (StyleName <> TStyleManager.ActiveStyle.Name) then + TStyleManager.RemoveStyle(StyleName); + end; +end; + +procedure GetLocalInterfaces(ComboBox: TComboBox; RecentHost: string = ''; IsSocksPort: Boolean = False); +var + i, Index: Integer; + ls: TStringList; + TcpSock: TTCPBlockSocket; +begin + Index := 0; + if RecentHost = '' then + RecentHost := Combobox.Text + else + RecentHost := RemoveBrackets(RecentHost, True); + ls := TStringList.Create; + try + TcpSock := TTCPBlockSocket.create; + try + TcpSock.ResolveNameToIP(TcpSock.LocalName, ls); + finally + TcpSock.Free; + end; + for i := ls.Count - 1 downto 0 do + if (Tcp.cbHideIPv6Addreses.Checked and (not IsIPv4(ls[i])) or (Pos('%', ls[i]) <> 0)) then + ls.Delete(i); + if IsSocksPort then + begin + ComboBox.ResetValue := 1; + ls.Insert(0, '0.0.0.0'); + Index := 1; + end; + if ls.IndexOf('127.0.0.1') = -1 then + ls.Insert(Index, '127.0.0.1'); + if not Tcp.cbHideIPv6Addreses.Checked then + begin + if ls.IndexOf('::1') = -1 then + ls.Insert(Index + 1, '::1'); + end; + ComboBox.items := ls; + ComboBox.ItemIndex := ComboBox.Items.IndexOf(RecentHost); + if ComboBox.ItemIndex = -1 then + begin + if IsSocksPort then + begin + ComboBox.ItemIndex := 1; + SetTorConfig('SOCKSPort', '127.0.0.1:' + IntToStr(Tcp.udSOCKSPort.Position) + ComboBox.Hint); + end + else + ComboBox.ItemIndex := 0; + end; + ComboBoxAutoWidth(ComboBox); + finally + ls.Free; + end; +end; + +function ExtractDomain(Url: string; HasPort: Boolean = False): string; +var + Search: Integer; +begin + Result := AnsiLowerCase(Url); + Search := Pos('@', Result); + if Search > 0 then + Delete(Result, 1, Search) + else + begin + Search := Pos('://', Result); + if Search > 0 then + Delete(Result, 1, Search + 2); + end; + Search := Pos('/', Result); + if Search > 0 then + SetLength(Result, Pred(Search)); + Search := RPos(':', Result); + if (Search > 0) then + begin + if (Result[1] = '[') and (Result[Search - 1] = ']') then + SetLength(Result, Pred(Search)) + else + if (Search = Pos(':', Result)) or HasPort then + SetLength(Result, Pred(Search)); + Result := RemoveBrackets(Result, True); + end; + Search := Pos('.$', Result); + if Search > 0 then + SetLength(Result, Pred(Search)); +end; + +function GetAddressFromSocket(SocketStr: string): string; +var + Search: Integer; +begin + Search := RPos(':', SocketStr); + if Search > 0 then + Result := RemoveBrackets(Copy(SocketStr, 1, Search - 1), True) + else + Result := SocketStr; +end; + +function GetPortFromSocket(SocketStr: string): Word; +begin + Result := StrToIntDef(Copy(SocketStr, RPos(':', SocketStr) + 1), 0); +end; + +function FormatHost(HostStr: string): string; +begin + if IsIPv6(HostStr) then + Result := '[' + HostStr + ']' + else + Result := HostStr; +end; + +function GetPrefixSize(Prefix: string; Localize: Boolean = False): Int64; +var + Index: Integer; +begin + if Localize then + ConstDic.TryGetValue(Prefix, Index) + else + begin + if Length(Prefix) > 1 then + Index := GetArrayIndex(PrefixSizes, Prefix) + else + Index := GetArrayIndex(PrefixShortSizes, Prefix) + end; + case Index of + 0: Result := Int64(1); + 1: Result := Int64(1) shl 10; + 2: Result := Int64(1) shl 20; + 3: Result := Int64(1) shl 30; + 4: Result := Int64(1) shl 40; + else + Result := -1; + end; +end; + +function ConvertSize(SizeStr: string; Prefix: string = ''): Int64; +var + Search: Integer; + ParseStr: ArrOfStr; + Value: Int64; + XPrefix, XPostfix: string; +begin + Result := -1; + ParseStr := Explode(' ', AnsiLowerCase(SizeStr)); + if TryStrToInt64(ParseStr[0], Value) then + begin + case Length(ParseStr) of + 1: + Result := Value; + 2: + begin + Search := Pos('b', ParseStr[1]); + if Search > 0 then + begin + XPrefix := Copy(ParseStr[1], 1, Search - 1); + XPostfix := Copy(ParseStr[1], Search); + case GetArrayIndex(DataSizes, XPostfix) of + 0,1,2: Result := Value * GetPrefixSize(XPrefix); + 3,4: Result := Trunc(Value/8) * GetPrefixSize(XPrefix); + else + Exit; + end; + end; + end; + else + Exit; + end; + if Prefix <> '' then + Result := Trunc(Result/GetPrefixSize(Prefix)); + end; +end; + +function ValidSize(SizeStr: string; Min, Max: int64; Prefix: string): Boolean; +begin + Result := ValidInt(IntToStr(ConvertSize(SizeStr, Prefix)), Min, Max); +end; + +function ValidInt(IntStr: string; Min, Max: Integer): Boolean; overload; +var + n: Integer; +begin + if TryStrToInt(IntStr, n) then + begin + if (n >= Min) and (n <= Max) then + begin + Result := True; + Exit; + end; + end; + Result := False; +end; + +function ValidInt(IntStr: string; Min, Max: Int64): Boolean; overload; +var + n: Int64; +begin + if TryStrToInt64(IntStr, n) then + if (n >= Min) and (n <= Max) then + begin + Result := True; + Exit; + end; + Result := False; +end; + +function ValidHash(HashStr: string): Boolean; +var + i: Integer; +begin + Result := False; + if Length(HashStr) = 40 then + begin + for i := 1 to Length(HashStr) do + if not CharInSet(HashStr[i], ['0'..'9', 'A'..'F']) then + Exit; + Result := True; + end; +end; + +function IsIPv4(IpStr: string): Boolean; +var + ParseStr: ArrOfStr; + n, i: Integer; +begin + Result := False; + ParseStr := Explode('.', IpStr); + if Length(ParseStr) <> 4 then + Exit; + for i := 0 to 3 do + begin + if TryStrToInt(ParseStr[i], n) then + begin + if (n < 0) or (n > 255) then + Exit; + if ParseStr[i][1] = '$' then + Exit; + if ParseStr[i][1] = '-' then + Exit; + if ParseStr[i][1] = '0' then + begin + if n <> 0 then + Exit + else + if ParseStr[i][2] = '0' then + Exit; + end; + end + else + Exit; + end; + Result := True; +end; + +function IsIPv6(IpStr: string): Boolean; +var + Parts, Words: ArrOfStr; + Flag: Boolean; + i, j, n, WordCount, PartsCount, Totals: Integer; +begin + Result := False; + Flag := False; + IpStr := StringReplace(IpStr, '::', '|', [rfReplaceAll]); + Parts := Explode('|', IpStr); + PartsCount := Length(Parts); + if PartsCount > 2 then + Exit; + Totals := 0; + for i := 0 to PartsCount - 1 do + begin + if Parts[i] = '' then + Continue; + Words := Explode(':', Parts[i]); + WordCount := Length(Words); + for j := 0 to WordCount - 1 do + begin + if TryStrToInt('$' + Words[j], n) then + begin + if (n < 0) or (n > 65535) then + Exit; + end + else + begin + if (j = WordCount - 1) and (i = PartsCount - 1) and IsIPv4(Words[j]) then + Flag := True + else + Exit; + end; + end; + Inc(Totals, WordCount); + end; + if not Assigned(Words) then + Exit; + if Flag then + Inc(Totals); + case PartsCount of + 1: if Totals <> 8 then Exit; + 2: if (Totals + 1) > 8 then Exit; + end; + Result := True; +end; + +function ValidAddress(AddrStr: string; AllowCidr: Boolean = False; ReqBrackets: Boolean = False): Byte; +var + Search: Integer; + Mask: Byte; + IpStr: string; +begin + Result := 0; + Search := Pos('/', AddrStr); + if Search = 0 then + begin + if IsIPv4(AddrStr) then + Result := 1 + else + begin + if ReqBrackets then + begin + if not HasBrackets(AddrStr) then + Exit; + if IsIPv6(Copy(AddrStr, 2, Length(AddrStr) - 2)) then + Result := 2; + end + else + if IsIPv6(AddrStr) then + Result := 2; + end; + end + else + begin + if AllowCidr then + begin + IpStr := Copy(AddrStr, 1, Search - 1); + if IsIPv4(IpStr) then + Mask := 32 + else + begin + if ReqBrackets then + begin + if not HasBrackets(IpStr) then + Exit; + IpStr := Copy(IpStr, 2, Length(IpStr) - 2); + end; + if IsIPv6(IpStr) then + Mask := 128 + else + Exit; + end; + if ValidInt(Copy(AddrStr, Search + 1), 1, Mask) then + begin + case Mask of + 32: Result := 1; + 128: Result := 2; + end; + end; + end; + end; +end; + +function ValidHost(HostStr: string; AllowRootDomain: Boolean = False; AllowIp: Boolean = True; ReqBrackets: Boolean = False): Boolean; +var + i, j, SubLen, Count: Integer; + SubDomains: ArrOfStr; +begin + Result := False; + if AllowRootDomain and (HostStr = '.') then + begin + Result := True; + Exit; + end; + if ValidAddress(HostStr, False, ReqBrackets) <> 0 then + begin + if AllowIp then + begin + Result := True; + Exit; + end + else + Exit; + end; + if Length(HostStr) > 255 then + Exit; + SubDomains := Explode('.', HostStr); + Count := Length(SubDomains); + if Count < 2 then + Exit; + for i := 0 to Count - 1 do + begin + if (i = 0) and (SubDomains[i] = '') then + begin + if AllowRootDomain then + continue + else + Exit; + end; + SubLen := Length(SubDomains[i]); + if ((SubLen < 2) and (i >= Count - 2)) or (SubLen > 63) then + Exit; + for j := 1 to SubLen do + begin + if ((j = 1) or (j = SubLen)) and not CharInSet(SubDomains[i][j], ['0'..'9', 'a'..'z']) then + Exit + else + if not CharInSet(SubDomains[i][j], ['0'..'9', 'a'..'z', '-']) then + Exit; + end; + end; + if SubDomains[Count - 1] = 'exit' then + Exit; + if SubDomains[Count - 1] = 'onion' then + Exit; + Result := True; +end; + +function ValidSocket(SocketStr: string; AllowHostNames: Boolean = False): Boolean; +var + Search: Integer; +begin + Result := False; + Search := RPos(':', SocketStr); + if Search = 0 then + Exit; + if AllowHostNames then + Result := ValidHost(Copy(SocketStr, 1, Search - 1), False, True, True) + else + Result := ValidAddress(Copy(SocketStr, 1, Search - 1), False, True) <> 0; + if Result then + if not ValidInt(Copy(SocketStr, Search + 1), 1, 65535) then + Result := False +end; + +function ValidPolicy(PolicyStr: string): Boolean; +var + ParseStr, Ports: ArrOfStr; + Search, i: Integer; + Address, Port: string; + PolicyType, AddressType, MaskType: Integer; +begin + Result := False; + ParseStr := Explode(' ', PolicyStr); + if Length(ParseStr) <> 2 then + Exit; + PolicyType := GetArrayIndex(PolicyTypes, ParseStr[0]); + if PolicyType = -1 then + Exit; + if ParseStr[1] <> '*' then + begin + Search := RPos(':', ParseStr[1]); + if Search = 0 then + Exit; + Port := Copy(ParseStr[1], Search + 1); + if Port <> '*' then + begin + Ports := Explode('-', Port); + if Length(Ports) > 2 then + Exit; + for i := 0 to Length(Ports) - 1 do + if not ValidInt(Ports[i], 1, 65535) then + Exit; + end; + Address := Copy(ParseStr[1], 1, Search - 1); + MaskType := GetArrayIndex(MaskTypes, Address); + case MaskType of + -1: + begin + AddressType := ValidAddress(Address, True, True); + case AddressType of + 0: Exit; + 1: if PolicyType > 1 then Exit; + end; + end; + 1,3: if PolicyType > 1 then Exit; + end; + end; + Result := True; +end; + +function GetTransportID(TypeStr: string): Byte; +begin + Result := TRANSPORT_CLIENT; + if Length(TypeStr) > 0 then + begin + case AnsiChar(TypeStr[1]) of + SELECT_CHAR: Result := TRANSPORT_SERVER; + BOTH_CHAR: Result := TRANSPORT_BOTH; + end; + end; +end; + +function GetTransportChar(TransportID: Byte): string; +begin + case TransportID of + TRANSPORT_SERVER: Result := SELECT_CHAR; + TRANSPORT_BOTH: Result := BOTH_CHAR; + else + Result := FAVERR_CHAR; + end; +end; + +function TryParseBridge(BridgeStr: string; out Bridge: TBridge): Boolean; +var + ParseStr: ArrOfStr; + ParamsFlag: Boolean; + ParamsStr: string; + i: Integer; +begin + Bridge.Ip := ''; + Bridge.Port := 0; + Bridge.Hash := ''; + Bridge.Transport := ''; + Bridge.Params := ''; + Result := ValidBridge(BridgeStr, btNone); + if Result then + begin + ParamsFlag := False; + ParamsStr := ''; + ParseStr := Explode(' ', BridgeStr); + for i := 0 to Length(ParseStr) - 1 do + begin + if ParamsFlag then + begin + ParamsStr := ParamsStr + ' ' + ParseStr[i]; + Continue; + end; + if ValidTransport(ParseStr[i]) then + begin + Bridge.Transport := ParseStr[i]; + Continue; + end; + if ValidSocket(ParseStr[i]) then + begin + Bridge.Ip := GetAddressFromSocket(ParseStr[i]); + Bridge.Port := GetPortFromSocket(ParseStr[i]); + Continue; + end; + if ValidHash(ParseStr[i]) then + begin + Bridge.Hash := ParseStr[i]; + ParamsFlag := True; + end; + end; + Bridge.Params := Trim(ParamsStr); + end; +end; + +function ValidTransport(TransportStr: string): Boolean; +var + T: TTransportInfo; +begin + if TransportsDic.TryGetValue(TransportStr, T) then + begin + Result := T.TransportID <> TRANSPORT_SERVER; + Exit; + end; + Result := False; +end; + +function ValidBridge(BridgeStr: string; BridgeType: TBridgeType): Boolean; +var + ParseStr: ArrOfStr; + ParamCount: Integer; + T: TTransportInfo; +begin + Result := False; + BridgeStr := Trim(BridgeStr); + if (BridgeStr = '') or (Pos('|', BridgeStr) <> 0) then + Exit; + ParseStr := Explode(' ', BridgeStr); + ParamCount := Length(ParseStr); + case ParamCount of + 1: if ValidSocket(ParseStr[0]) then Result := True; + 2: if ValidSocket(ParseStr[0]) and ValidHash(ParseStr[1]) then Result := True; + else + begin + if TransportsDic.TryGetValue(ParseStr[0], T) then + begin + if (T.TransportID <> TRANSPORT_SERVER) and ValidSocket(ParseStr[1]) and ValidHash(ParseStr[2]) then + begin + if BridgeType <> btNone then + begin + Include(T.BridgeType, BridgeType); + TransportsDic.AddOrSetValue(ParseStr[0], T); + end; + Result := True; + end; + end; + end; + end; +end; + +function CidrToRange(CidrStr: string): TIPv4Range; +var + Search: Integer; + Prefix: Byte; + Ip, Mask: Cardinal; + ParseStr: ArrOfStr; +begin + Search := Pos('/', CidrStr); + Prefix := StrToInt(Copy(CidrStr, Search + 1)); + ParseStr := Explode('.', Copy(CidrStr, 1, Search - 1)); + + Ip := StrToInt(ParseStr[0]) shl 24 or StrToInt(ParseStr[1]) shl 16 or + StrToInt(ParseStr[2]) shl 8 or StrToInt(ParseStr[3]); + Mask := $FFFFFFFF shl (32 - Prefix); + Result.IpStart := Ip and Mask; + Result.IpEnd := Ip or (Mask xor $FFFFFFFF); +end; + +function IpInRanges(const IpStr: string; RangesData: array of string): Boolean; +var + i: Integer; + Range: TIPv4Range; + Ip: Cardinal; +begin + Ip := IpToInt(IpStr); + for i := 0 to Length(RangesData) - 1 do + begin + Range := CidrToRange(RangesData[i]); + if InRange(Ip, Range.IpStart, Range.IpEnd) then + begin + Result := True; + Exit; + end; + end; + Result := False; +end; + +function IpToInt(IpStr: string): Cardinal; +var + i, x, Index: Byte; +begin + Result := 0; + for i := 0 to 3 do + begin + Index := Pos('.', IpStr); + x := StrToIntDef(copy(IpStr, 0, Index - 1), 0); + Result := (256 * Result) + x; + Delete(IpStr, 1, Index); + end; + Result := Result + Cardinal(StrToIntDef(IpStr, 0)); +end; + +function IntToIp(Ip: Cardinal): string; +begin + Result := Format('%d.%d.%d.%d', [Ip shr 24, (Ip shr 16) and 255, (Ip shr 8) and 255, Ip and 255]); +end; + +procedure ComboBoxAutoWidth(const AComboBox: TCombobox); +var + i: Integer; + FullWidth: Integer; + ItemWidth: Integer; + ScrollSize: Integer; +begin + ScrollSize := 0; + FullWidth := 0; + if AComboBox.DropDownCount < AComboBox.Items.Count then + ScrollSize := GetSystemMetrics(SM_CXVSCROLL); + for i := 0 to AComboBox.Items.Count - 1 do + begin + ItemWidth := ScrollSize + AComboBox.Canvas.TextWidth(AComboBox.Items[i]) + 8; + if ItemWidth > FullWidth then + FullWidth := ItemWidth; + end; + if FullWidth > AComboBox.Width then + SendMessage(AComboBox.Handle, CB_SETDROPPEDWIDTH, FullWidth, 0); +end; + +procedure GridScrollCheck(aSg: TStringGrid; ACol, ColWidth: Integer); +begin + if (aSg.RowCount - aSg.FixedRows) > aSg.VisibleRowCount then + aSg.ColWidths[ACol] := Round(ColWidth * Scale) - GetSystemMetrics(SM_CXVSCROLL) + else + aSg.ColWidths[ACol] := Round(ColWidth * Scale); +end; + +procedure ControlsDisable(Control: TWinControl); +var + i: Integer; +begin + for i := 0 to Control.ControlCount - 1 do + begin + if Control.Controls[i] is TControl and Control.Controls[i].Enabled then + begin + Control.Controls[i].HelpContext := 1; + Control.Controls[i].Enabled := False; + end; + end; +end; + +procedure ControlsEnable(Control: TWinControl); +var + i: Integer; +begin + for i := 0 to Control.ControlCount - 1 do + begin + if Control.Controls[i] is TControl and (Control.Controls[i].HelpContext = 1) then + begin + Control.Controls[i].HelpContext := 0; + Control.Controls[i].Enabled := True; + end; + end; +end; + +function CtrlKeyPressed(Key: Char): Boolean; +var + State: Boolean; +begin + if Key = #0 then + State := True + else + State := GetKeyState(Ord(Key)) < 0; + Result := (GetKeyState(VK_CONTROL) < 0) and State; +end; + +function GetPortProtocol(PortID: Word): string; +begin + case PortID of + 443: Result := 'https'; + else + Result := 'http'; + end; +end; + +procedure LoadIconsFromResource(ImageList: TImageList; ResourceName: string); +var + Bmp: TBitmap; + Png: TPngImage; +begin + Png := TPngImage.Create; + Bmp := TBitmap.Create; + try + Png.LoadFromResourceName(HInstance, ResourceName); + Bmp.Assign(Png); + ImageList.Clear; + ImageList.Add(Bmp, nil); + finally + Png.Free; + Bmp.Free; + end; +end; + +procedure EditMenuEnableCheck(MenuItem: TMenuItem; MenuType: TEditMenuType); +var + Control: TCustomEdit; +begin + if Screen.ActiveControl is TCustomEdit then + begin + Control := TCustomEdit(Screen.ActiveControl); + case MenuType of + emCopy: MenuItem.Enabled := Control.SelLength > 0; + emCut: MenuItem.Enabled := (Control.SelLength > 0) and not Control.ReadOnly; + emPaste: MenuItem.Enabled := (IsClipboardFormatAvailable(CF_TEXT) or IsClipboardFormatAvailable(CF_UNICODETEXT)) and not Control.ReadOnly; + emSelectAll: MenuItem.Enabled := Length(Control.Text) > 0; + emClear: MenuItem.Enabled := (Length(Control.Text) > 0) and (not Control.ReadOnly or (Control = Tcp.meLog)); + emDelete: MenuItem.Enabled := (Control.SelLength > 0) and not Control.ReadOnly; + emFind: + begin + MenuItem.Visible := Control is TMemo; + if MenuItem.Visible then + MenuItem.Enabled := Length(Control.Text) > 0; + end; + end; + end; +end; + +function SearchEdit(EditControl: TCustomEdit; const SearchString: String; Options: TFindOptions; FindFirst: Boolean = False): Boolean; +var + Size: Integer; + SearchOptions: TStringSearchOptions; + Buffer, P: PChar; +begin + Result := False; + if (Length(SearchString) = 0) then Exit; + Size := EditControl.GetTextLen; + if (Size = 0) then Exit; + + SearchOptions := []; + if frDown in Options then + Include(SearchOptions, soDown); + if frMatchCase in Options then + Include(SearchOptions, soMatchCase); + if frWholeWord in Options then + Include(SearchOptions, soWholeWord); + + Buffer := StrAlloc(Size + 1); + try + EditControl.GetTextBuf(Buffer, Size + 1); + if FindFirst then + P := SearchBuf(Buffer, Size, 0, EditControl.SelLength, SearchString, SearchOptions) + else + P := SearchBuf(Buffer, Size, EditControl.SelStart, EditControl.SelLength, SearchString, SearchOptions); + if P <> nil then + begin + EditControl.SelStart := P - Buffer; + EditControl.SelLength := Length(SearchString); + Result := True; + end; + finally + StrDispose(Buffer); + end; +end; + +procedure EditMenuHandle(MenuType: TEditMenuType); +var + Control: TCustomEdit; +begin + if Screen.ActiveControl is TCustomEdit then + begin + Control := TCustomEdit(Screen.ActiveControl); + if Control.Enabled then + begin + case MenuType of + emCopy: Control.CopyToClipboard; + emCut: Control.CutToClipboard; + emPaste: Control.PasteFromClipboard; + emSelectAll: Control.SelectAll; + emClear: Control.Text := ''; + emDelete: Control.ClearSelection; + emFind: + begin + if Control is TMemo then + begin + SearchFirst := False; + FindObject := TMemo(Control); + if Tcp.cbClearPreviousSearchQuery.Checked then + Tcp.FindDialog.FindText := FindObject.SelText + else + begin + if FindObject.SelText <> '' then + Tcp.FindDialog.FindText := FindObject.SelText + end; + Tcp.FindDialog.Execute; + end; + end; + end; + end; + end; +end; + +function GetFileVersionStr(const FileName: string): string; +var + InfoSize, Wnd: DWORD; + VerBuf: Pointer; + FI: PVSFixedFileInfo; + VerSize: DWORD; +begin + Result := '0.0.0.0'; + InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd); + if InfoSize <> 0 then + begin + GetMem(VerBuf, InfoSize); + try + if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then + if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then + Result := Format('%d.%d.%d.%d', [ + HiWord(FI.dwFileVersionMS), LoWord(FI.dwFileVersionMS), + HiWord(FI.dwFileVersionLS), LoWord(FI.dwFileVersionLS) + ]); + finally + FreeMem(VerBuf); + end; + end; +end; + +function CheckFileVersion(FileVersion, StaticVersion: string): Boolean; +begin + FileVersion := SeparateLeft(FileVersion, '-'); + StaticVersion := SeparateLeft(StaticVersion, '-'); + Result := CompareNaturalText(PWideChar(FileVersion), PWideChar(StaticVersion)) <> -1; +end; + +function TryUpdateMask(var Mask: Byte; Param: Byte; Condition: Boolean): Boolean; +begin + if Condition then + begin + Result := Mask and Param = 0; + if Result then + Inc(Mask, Param); + end + else + begin + Result := Mask and Param <> 0; + if Result then + Dec(Mask, Param); + end; +end; + +function GetRoutersParamsCount(Mask: Integer): Integer; + procedure CheckMask(Param: Integer); + begin + if Mask and Param <> 0 then + Inc(Result); + end; +begin + Result := 0; + CheckMask(ROUTER_BRIDGE); + CheckMask(ROUTER_AUTHORITY); + CheckMask(ROUTER_ALIVE); + CheckMask(ROUTER_REACHABLE_IPV6); + CheckMask(ROUTER_HS_DIR); + CheckMask(ROUTER_DIR_MIRROR); + CheckMask(ROUTER_NOT_RECOMMENDED); + CheckMask(ROUTER_BAD_EXIT); +end; + +function CheckSplitButton(Button: TButton): Boolean; +var + MousePoint, MenuPoint: TPoint; +begin + Result := False; + if (Win32MajorVersion = 5) and (Button.Style = bsSplitButton) then + begin + MousePoint := Button.ScreenToClient(Mouse.CursorPos); + if not InRange(MousePoint.X, 0, Button.Width - 16) then + begin + if Assigned(Button.DropDownMenu) then + begin + MenuPoint := Button.ClientOrigin; + Button.DropDownMenu.Popup(MenuPoint.X, MenuPoint.Y + Button.Height); + end; + Result := True; + end; + end; +end; + +function SampleDown(Data: ArrOfPoint; Threshold: Integer): ArrOfPoint; +var + i, DataLength, SampledIndex: Integer; + a, NextA: Integer; + AvgRangeStart, AvgRangeEnd, AvgRangeLength: Integer; + RangeOffs, RangeTo: Integer; + PointAX, PointAY: Integer; + MaxAreaPoint: TPoint; + Every, Area, MaxArea: Real; + AvgX, AvgY: Real; +begin + DataLength := Length(Data); + if (Threshold >= DataLength) or (Threshold < 3) then + begin + Result := Data; + Exit; + end; + + Result := nil; + SetLength(Result, Threshold); + + i := 0; + a := 0; + NextA := 0; + MaxAreaPoint.X := 0; + MaxAreaPoint.Y := 0; + SampledIndex := 0; + Result[SampledIndex] := Data[a]; + Inc(SampledIndex); + + Every := (DataLength - 2) / (Threshold - 2); + + while i < Threshold - 2 do + begin + AvgX := 0; + AvgY := 0; + AvgRangeStart := Floor((i + 1) * Every) + 1; + AvgRangeEnd := Floor((i + 2) * Every) + 1; + if AvgRangeEnd < DataLength then + AvgRangeEnd := AvgRangeEnd + else + AvgRangeEnd := DataLength; + AvgRangeLength := AvgRangeEnd - AvgRangeStart; + while AvgRangeStart < AvgRangeEnd do + begin + AvgX := AvgX + Data[AvgRangeStart].X * 1; + AvgY := AvgY + Data[AvgRangeStart].Y * 1; + Inc(AvgRangeStart); + end; + + AvgX := AvgX / AvgRangeLength; + AvgY := AvgY / AvgRangeLength; + + RangeOffs := Floor((i + 0) * Every) + 1; + RangeTo := Floor((i + 1) * Every) + 1; + + PointAX := Data[a].X * 1; + PointAY := Data[a].Y * 1; + + MaxArea := -1; + + while RangeOffs < RangeTo do + begin + Area := Abs((PointAX - AvgX) * (Data[RangeOffs].Y - PointAY) - (PointAX - Data[RangeOffs].X) * (AvgY - PointAY)) * 0.5; + if Area > MaxArea then + begin + MaxArea := Area; + MaxAreaPoint := Data[RangeOffs]; + NextA := RangeOffs; + end; + Inc(RangeOffs); + end; + + Result[SampledIndex] := MaxAreaPoint; + Inc(SampledIndex); + a := NextA; + Inc(i); + end; + Result[SampledIndex] := Data[DataLength - 1]; +end; + +procedure EnableComposited(WinControl: TWinControl); +begin + SetWindowLong(WinControl.Handle, GWL_EXSTYLE, + GetWindowLong(WinControl.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED); +end; + +initialization + InitCharUpCaseTable(CharUpCaseTable); + +end. diff --git a/source/Languages.pas b/source/Languages.pas new file mode 100644 index 0000000..8f440ba --- /dev/null +++ b/source/Languages.pas @@ -0,0 +1,1211 @@ +unit Languages; + +interface + +uses + Winapi.Windows, System.Classes, System.SysUtils, System.IniFiles, System.DateUtils, + System.Generics.Collections, Vcl.Forms, Vcl.Graphics, Vcl.StdCtrls, + synautil, ConstData, Functions; + + function GetLangList: Integer; + function Load(Key, Default: string): string; + function TransStr(const StrID: string): string; + procedure LoadLns(Key, Default: string); + procedure LoadStr(Key, Default: string); + procedure Translate(Section: string); + procedure TranslateArray(var HeaderArray: array of string; Header: string); + +var + DetailsHeader: array [0..5] of string; + FilterHeader: array [0..7] of string; + HsHeader: array [0..3] of string; + HsPortsHeader: array [0..2] of string; + RoutersHeader: array [0..8] of string; + CircuitsHeader: array [0..0] of string; + StreamsHeader: array [0..0] of string; + StreamsInfoHeader: array [0..2] of string; + TransportsHeader: array [0..2] of string; + Prefixes: array[0..6] of string; + LangStr: TDictionary; + LangIniFile: TMemIniFile; + CurrentTranslate: string; + CurrentLanguage: Word; + +implementation + +uses + Main; + +procedure TranslateArray(var HeaderArray: array of string; Header: string); +var + i: Integer; + ls: TStringList; +begin + ls := TStringList.Create; + try + ParseParametersEx(Header, ',', ls); + for i := 0 to Length(HeaderArray) - 1 do + if i < ls.Count then + HeaderArray[i] := ls[i]; + finally + ls.Free; + end; +end; + +function GetLangList: Integer; +var + ini: TMemIniFile; + ls, rs: TStringList; + i, LangID, English: Integer; + SystemLanguage: Word; +begin + Result := 0; + English := 0; + SystemLanguage := GetSystemDefaultLangID; + ls := TStringList.Create; + try + if FileExists(LangFile) then + begin + ini := TMemIniFile.Create(LangFile, TEncoding.UTF8); + rs := TStringList.Create; + try + ini.ReadSections(rs); + for i := 0 to rs.Count - 1 do + begin + if rs[i] = 'DefaultCountries' then + continue; + LangID := ini.ReadInteger(rs[i], 'Locale', 0); + ls.AddObject(rs[i], TObject(Integer(LangID))); + if LangID = SystemLanguage then + Result := LangID; + if LangID = 1033 then + English := 1033; + end; + finally + ini.Free; + rs.Free; + end; + + if Result = 0 then + begin + case SystemLanguage of + 1049: Result := 1049; + 1058: Result := 1049; + 1059: Result := 1049; + else + begin + if English > 0 then + Result := English; + end; + end; + end; + + end; + ls.AddObject('Русский', TObject(Integer(1049))); + Tcp.cbxLanguage.Items := ls; + finally + ls.Free; + end; +end; + +function TransStr(const StrID: string): string; +begin + LangStr.TryGetValue(StrID, Result); +end; + +function Load(Key, Default: string): string; +begin + Result := LangIniFile.ReadString(CurrentTranslate, Key, Default) +end; + +procedure LoadList(ls: TCombobox; Key, Default: string); +var + Index: Integer; +begin + Index := ls.ItemIndex; + ls.Items.DelimitedText := LangIniFile.ReadString(CurrentTranslate, Key, Default); + ls.ItemIndex := Index; +end; + +procedure LoadStr(Key, Default: string); +begin + LangStr.AddOrSetValue(Key, LangIniFile.ReadString(CurrentTranslate, Key, Default)); +end; + +procedure LoadLns(Key, Default: string); +begin + LangStr.AddOrSetValue(Key, StringReplace(LangIniFile.ReadString(CurrentTranslate, Key, Default), '\n', BR, [rfReplaceAll])); +end; + +procedure Translate(Section: string); +var + i: Integer; +begin + CurrentTranslate := Section; + if Assigned(LangStr) then + LangStr.Clear + else + LangStr := TDictionary.Create; + + LangIniFile := TMemIniFile.Create(LangFile, TEncoding.UTF8); + try + LoadStr('Locale', '1049'); + LoadStr('100', 'Старт'); + LoadStr('101', 'Запуск...'); + LoadStr('102', 'Стоп'); + LoadLns('103', 'Сменить\nцепочку'); + LoadStr('104', 'По умолчанию'); + LoadStr('105', 'Панель управления Tor'); + LoadLns('106', '%s\nПрофиль: %s'); + LoadStr('107', 'Настройки'); + LoadStr('108', 'Журнал'); + LoadStr('109', 'Не получен'); + LoadStr('110', 'Не определена'); + LoadStr('111', 'Получение...'); + LoadStr('112', 'Определение...'); + LoadStr('113', 'IP адрес'); + LoadStr('114', 'Страна'); + LoadStr('122', 'Скрытый сервис'); + LoadStr('130', 'Пароль'); + LoadStr('135', 'сек.'); + LoadStr('146', 'Преобразование в хэши включено'); + LoadStr('151', 'Тип'); + LoadStr('153', 'Порт'); + LoadStr('159', 'Необязательно'); + LoadStr('160', 'Прокручивать вверх при сортировке'); + LoadLns('161', 'Текущая конфигурация авангардов для скрытых сервисов требует как минимум %d избранных входных узлов (Найдено: %d). \n\nИсправить проблему и продолжить сохранение настроек?'); + LoadStr('164', 'Эта операция требует перезапуска Tor'); + LoadStr('175', 'Максимум'); + LoadStr('180', 'c'); + LoadStr('181', 'Проверка переадресации портов'); + LoadStr('197', 'мин.'); + LoadStr('203', 'Всего'); + LoadStr('204', 'Внимание! Отключение кэша каталога ускорит работу сервера, но ваш сервер никогда не станет сторожевым узлом. Хотите продолжить?'); + LoadStr('206', 'Обычный'); + LoadLns('208', '\n Щёлкните здесь для добавления адресов\n\n Примеры:\n\n Ip: 8.8.8.8\n Сайт: metrics.torproject.org\n Домен:.torproject.org\n Все:.'); + LoadLns('209', '\n Щёлкните здесь для добавления узлов\n\n Примеры:\n\n Ip: 8.8.8.8\n CIDR: 8.8.8.8/24\n Страна: RU,DE,US,..\n Хэш: ABCD1234CDEF567..'); + LoadLns('210', '\n Щёлкните здесь для добавления мостов\n\n Примеры:\n\n 8.8.8.8:443\n 8.8.8.8:443 ABCD1234CDEF567..\n obfs4 8.8.8.8:443 ABCD1234CDEF567.. cert=.. iat-mode=..\n\n Примечание: мосты переопределяют настройки входных узлов'); + LoadStr('212', 'Загрузка'); + LoadStr('213', 'Отправка'); + LoadStr('214', 'Получено'); + LoadStr('215', 'Отправлено'); + LoadStr('221', 'Дата создания'); + LoadStr('226', 'Выключен'); + LoadStr('230', 'Название,Версия,Точек входа,Соединений'); + LoadStr('231', 'Интерфейс,Порт,Виртуальный'); + LoadStr('232', 'Ник,IP адрес,,Страна,Вес,Пинг'); + LoadStr('233', 'ID,,Страна,Всего,Вход,Выход,Живые,∑ пинг'); + LoadStr('234', 'Б,КБ,МБ,ГБ,ТБ,ПБ,ЭБ'); + LoadStr('235', 'Информация'); + LoadStr('236', 'Ошибка при разборе конфигурационного файла torrc, подробности смотрите в журнале'); + LoadStr('237', 'Подключение к сети Tor остановлено, неверно указан пароль для управляющего порта!'); + LoadLns('238', 'Исполняемый файл Tor не запускается. Возможно он:\n\n - повреждён или не является приложением Windows\n - является 64-битным приложением, в то время как у вас 32-битная операционная система.'); + LoadStr('239', 'Исполняемый файл Tor не найден. Скачайте Tor Windows Expert Bundle и распакуйте в каталог с программой. Перейти на страницу загрузки прямо сейчас?'); + LoadStr('240', 'Подключение к сети Tor...'); + LoadStr('241', 'Вы отключились от сети Tor'); + LoadStr('242', 'Устройств с поддержкой переадресации портов не найдено!'); + LoadStr('243', 'Результат'); + LoadStr('244', 'Источник,Назначение,Цель'); + LoadStr('245', 'Успешно'); + LoadStr('246', 'Предупреждение'); + LoadStr('247', 'Ошибка'); + LoadStr('248', 'Название не может быть пустым!'); + LoadStr('249', 'Это название уже используется другим сервисом!'); + LoadStr('250', 'Список портов'); + LoadStr('251', 'Вы должны добавить хотя бы один порт!'); + LoadStr('252', 'Такая комбинация интерфейса и портов уже существует!'); + LoadStr('253', 'Пароль для управляющего порта изменён'); + LoadStr('254', 'Ошибка при загрузке шаблона: параметры заданы неверно!'); + LoadStr('255', 'Нельзя использовать разделительный символ " %s "'); + LoadStr('256', 'Сохранение шаблона'); + LoadStr('257', 'Введите название шаблона'); + LoadStr('258', 'Цепочка изменена'); + LoadLns('259', 'Запуск приостановлен, порты указанные в настройках программы уже используются!\n\nЗанятые порты: %s \n\nИзменить порты на случайные и продолжить запуск?'); + LoadStr('260', 'Не определён'); + LoadLns('261', 'Использовать мосты, прокси и разрешённые порты в режиме сервера нельзя!\n\nВыключить эти опции и продолжить сохранение настроек?'); + LoadStr('262', 'Подтверждение'); + LoadStr('263', 'Вы действительно хотите удалить %s"%s"?'); + LoadStr('264', 'Все шаблоны'); + LoadStr('265', 'Создание ярлыка'); + LoadStr('266', 'Введите название профиля'); + LoadStr('267', 'Все сервисы'); + LoadLns('268', 'Вы действительно хотите добавить:\n\n%s\n\nв список "%s узлы"?%s'); + LoadLns('269', 'Используйте только буквы латинского алфавита и цифры'); + LoadStr('270', 'и'); + LoadStr('271', 'Конфигурационный файл Tor'); + LoadStr('274', 'Копировать'); + LoadStr('275', 'Вставить'); + LoadStr('276', 'Вырезать'); + LoadStr('277', 'Выделить всё'); + LoadStr('278', 'Очистить'); + LoadStr('279', 'Добавить'); + LoadStr('280', 'Удалить'); + LoadStr('281', 'Информация по ретранслятору'); + LoadStr('282', 'Статус'); + LoadStr('284', 'Обновить'); + LoadStr('285', 'Изменить список узлов'); + LoadStr('287', 'Запрещённые'); + LoadStr('288', 'Входныe'); + LoadStr('289', 'Средние'); + LoadStr('290', 'Выходные'); + LoadStr('320', 'Ник,IP адрес,,Страна,Вес,Порт,Версия,Пинг,Флаги'); + LoadStr('321', 'Показано: %d из %d'); + LoadLns('322', '\n Список хэшей, определяющих ваше семейство\n\n Пример:\n\n ABCD1234CDEF567..'); + LoadStr('323', 'Роутеры'); + LoadStr('324', 'Неправильные настройки'); + LoadStr('326', 'Протокол скрытых сервисов второй версии устарел, его поддержка была прекращена в версии 0.4.6.1 и выше. Вы действительно хотите использовать эту версию протокола?'); + LoadStr('327', 'Цепочки'); + LoadStr('328', 'Уменьшить окно'); + LoadStr('329', 'Назначение'); + LoadStr('330', 'Целевой адрес'); + LoadStr('331', 'Запрос каталога'); + LoadStr('332', 'Внутренний трафик'); + LoadStr('333', 'Выходной трафик'); + LoadStr('334', 'Клиент: Запрос каталога'); + LoadStr('335', 'Клиент: Точка входа'); + LoadStr('336', 'Клиент: Место встречи'); + LoadStr('337', 'Сервис: Запрос каталога'); + LoadStr('338', 'Сервис: Точка входа'); + LoadStr('339', 'Сервис: Место встречи'); + LoadStr('340', 'Авангард скрытого сервиса'); + LoadStr('341', 'Проверка закрытия цепочки'); + LoadStr('342', 'Проверка доступности'); + LoadStr('343', 'Маскировка времени'); + LoadStr('344', 'Измерение ожидания'); + LoadStr('345', 'Другое назначение'); + LoadStr('346', 'Внимание! Частая смена сторожевых узлов может помочь злоумышленникам обнаружить вас. Используйте только в случае крайней необходимости. %sХотите продолжить?'); + LoadStr('347', '(Все страны)'); + LoadStr('348', '(Выбранные в фильтре)'); + LoadStr('349', 'Цепочек: %d из %d'); + LoadStr('350', 'Соединений'); + LoadStr('351', 'Привязать к выходному узлу'); + LoadStr('352', 'Отвязать от выходного узла'); + LoadStr('353', 'Глобальный домен'); + LoadStr('354', 'Настройки программы были изменены! Хотите применить изменения?'); + LoadStr('355', 'О программе'); + LoadLns('356', '%s, версия: %s\n\n%s\n\n(Windows GUI-клиент для Tor Expert Bundle)\n\n%s\n\nХотите посетить страницу программы на GitHub?'); + LoadStr('357', 'Эта программа является свободным программным обеспечением и распространяется по лицензии MIT'); + LoadLns('358', 'Узлы, отсутствующие в консенсусе, будут удалены из пользовательских списков.\n\nИгнорировать список исключенных узлов при сканировании?'); + LoadStr('359', 'Удалить из списков'); + LoadStr('360', 'Автоподбор роутеров'); + LoadLns('361', 'Вы действительно хотите удалить:\n\n%s\n\nиз всех списков узлов?%s'); + LoadLns('362', 'Вы действительно хотите удалить:\n\n%s\n\nиз списка "%s узлы"?%s'); + LoadStr('363', 'Шаблон "%s" успешно сохранён'); + LoadStr('364', 'Шаблон "%s" успешно загружен'); + LoadStr('365', 'Шаблон "%s" успешно удалён'); + LoadStr('366', 'шаблон'); + LoadStr('367', 'сервис'); + LoadStr('368', 'Выбрать все'); + LoadStr('369', 'Снять все'); + LoadStr('370', 'Запрос каталога'); + LoadStr('371', 'Загрузка каталога'); + LoadStr('372', 'Тест порта каталога'); + LoadStr('373', 'DNS-запрос'); + LoadStr('374', 'Обычный трафик'); + LoadStr('375', 'Другая цель'); + LoadStr('376', 'Внутренний сокет'); + LoadStr('377', 'Для нормальной работы программы требуется Tor Windows Expert Bundle версии 0.4.0.5 и выше.'); + LoadStr('378', 'Не удается найти "%s"'); + LoadStr('379', 'мс'); + LoadStr('380', 'Автоматический режим'); + LoadStr('381', 'Ручной режим'); + LoadStr('382', 'Измерение пинга'); + LoadStr('383', 'Определение живых узлов'); + LoadStr('384', 'Мост (Входной узел)'); + LoadStr('385', 'Корневой каталог'); + LoadStr('386', 'Живой (отвечает на соединения)'); + LoadStr('387', 'Принимает IPv6-соединения'); + LoadStr('388', 'Каталог скрытых сервисов'); + LoadStr('389', 'Зеркало каталога (порт: %d)'); + LoadStr('390', 'Не рекомендуемая версия'); + LoadStr('391', 'Плохой выходной узел'); + LoadStr('392', 'Неизвестный флаг'); + LoadStr('393', 'Транспорты,Обработчик,Тип'); + LoadStr('394', 'Список транспортов не может содержать пустые данные'); + LoadStr('395', 'Не найден файл обработчика, скопируйте его в каталог транспортов и повторите'); + LoadStr('396', 'Определение живых мостов'); + LoadStr('397', 'Последняя поддерживаемая версия для вашей операционной системы: 0.4.4.6'); + LoadStr('398', 'Цифры в начале слова запрещены'); + LoadStr('399', 'Транспорт с таким названием и типом уже существует'); + LoadLns('400', 'Идёт сканирование мостов...\n\nДождитесь окончания и повторите попытку.'); + LoadStr('401', 'Нет соединения'); + LoadStr('402', 'Начало учёта: %s'); + LoadStr('404', 'Остановка сканирования..'); + LoadLns('405', 'Вы действительно хотите: "%s"\n\nВыбранное действие нельзя будет отменить!'); + LoadStr('406', 'Удалить все'); + LoadStr('423', 'Найти...'); + LoadStr('444', 'Сетевой сканер'); + LoadStr('459', 'мсек.'); + LoadStr('470', 'шт.'); + LoadStr('477', 'ч.'); + LoadStr('515', 'Выделять все ячейки в строке'); + LoadStr('521', 'Выбранные страны'); + LoadStr('522', 'Избранные узлы'); + LoadStr('523', 'Запрещённые узлы'); + LoadStr('524', 'Уничтожить'); + LoadStr('525', 'Сортировка'); + LoadStr('526', 'Фильтры'); + LoadStr('528', 'Соединения'); + LoadStr('530', 'Назначение'); + LoadStr('547', 'Тип узла'); + + TranslateArray(HsHeader, TransStr('230')); + TranslateArray(HsPortsHeader, TransStr('231')); + TranslateArray(DetailsHeader, TransStr('232')); + TranslateArray(FilterHeader, TransStr('233')); + TranslateArray(RoutersHeader, TransStr('320')); + TranslateArray(CircuitsHeader, TransStr('329')); + TranslateArray(StreamsHeader, TransStr('330')); + TranslateArray(StreamsInfoHeader, TransStr('244')); + TranslateArray(TransportsHeader, TransStr('393')); + + for i := 0 to Length(Prefixes) - 1 do + ConstDic.Remove(Prefixes[i]); + TranslateArray(Prefixes, TransStr('234')); + for i := 0 to Length(Prefixes) - 1 do + ConstDic.AddOrSetValue(Prefixes[i], i); + + if UserProfile = 'User' then + Tcp.lbUserDir.Caption := TransStr('104') + else + Tcp.lbUserDir.Caption := UserProfile; + Tcp.tiTray.Hint := Format(TransStr('106'), [TransStr('105'), Tcp.lbUserDir.Caption]); + Tcp.Caption := TransStr('105'); + Application.Title := TransStr('105'); + if ConnectState = 0 then + begin + Tcp.btnSwitchTor.Caption := TransStr('100'); + Tcp.miSwitchTor.Caption := TransStr('100'); + Tcp.lbExitIp.Caption := TransStr('109'); + Tcp.lbExitCountry.Caption := TransStr('110'); + end; + if ConnectState = 2 then + begin + Tcp.btnSwitchTor.Caption := TransStr('102'); + Tcp.miSwitchTor.Caption := TransStr('102'); + end; + Tcp.btnChangeCircuit.Caption := TransStr('103'); + Tcp.sbShowOptions.Caption := TransStr('107'); + Tcp.sbShowLog.Caption := TransStr('108'); + Tcp.sbShowStatus.Caption := TransStr('282'); + Tcp.sbShowCircuits.Caption := TransStr('327'); + Tcp.sbShowRouters.Caption := TransStr('323'); + Tcp.sbDecreaseForm.Hint := TransStr('328'); + + Tcp.lbExitIpCaption.Caption := TransStr('113') + ':'; + Tcp.lbExitCountryCaption.Caption := TransStr('114') + ':'; + Tcp.btnApplyOptions.Caption := Load('115', 'Применить'); + Tcp.btnCancelOptions.Caption := Load('116', 'Отмена'); + + Tcp.tsMain.Caption := Load('118', 'Общие'); + Tcp.tsNetwork.Caption := Load('119', 'Сеть'); + Tcp.tsFilter.Caption := Load('120', 'Фильтр'); + Tcp.tsServer.Caption := Load('121', 'Сервер'); + Tcp.tsHs.Caption := TransStr('122'); + Tcp.tsOther.Caption := Load('123', 'Разное'); + Tcp.tsLists.Caption := Load('546', 'Списки'); + + Tcp.gbOptions.Caption := Load('410', 'Основные'); + Tcp.lbMaxCircuitDirtiness.Caption := Load('124', 'Менять цепочку существующую более чем'); + Tcp.lbNewCircuitPeriod.Caption := Load('125', 'Интервал между попытками построить цепочку'); + Tcp.lbCircuitBuildTimeout.Caption := Load('126', 'Макс. время на построение цепочки'); + Tcp.lbMaxClientCircuitsPending.Caption := Load('317', 'Количество ожидающих цепочек клиента'); + Tcp.cbLearnCircuitBuildTimeout.Caption := Load('136', 'Автоматически выбирать время на построение цепочки'); + Tcp.cbEnforceDistinctSubnets.Caption := Load('137', 'Не строить цепочки из узлов одной подсети'); + Tcp.cbAvoidDiskWrites.Caption := Load('138', 'Выполнять меньше операций с диском'); + Tcp.cbStrictNodes.Caption := Load('318', 'Разрешить запрещённые узлы для внутренних цепочек'); + Tcp.cbUseOpenDNS.Caption := Load('407', 'Определять внешний адрес сервера через OpenDNS'); + Tcp.cbUseOpenDNSOnlyWhenUnknown.Caption := Load('408', 'Только если TOR не может определить его сам'); + Tcp.cbUseNetworkCache.Caption := Load('409', 'Кэшировать IP-cc-запросы и результаты сетевого сканера'); + Tcp.lbTheme.Caption := Load('413', 'Тема'); + Tcp.lbLanguage.Caption := Load('132', 'Язык'); + Tcp.lbSeconds1.Caption := TransStr('135'); + Tcp.lbSeconds2.Caption := TransStr('135'); + Tcp.lbSeconds3.Caption := TransStr('135'); + + Tcp.gbControlAuth.Caption := Load('412', 'Управление'); + Tcp.lbControlPort.Caption := Load('127', 'Порт'); + Tcp.lbAuthMetod.Caption := Load('128', 'Аутентификация'); + LoadList(Tcp.cbxAuthMetod, '129', '"Cookie-файл","Пароль"'); + Tcp.lbControlPassword.Caption := TransStr('130'); + Tcp.imGeneratePassword.Hint := Load('131', 'Сгенерировать случайный пароль'); + + Tcp.gbInterface.Caption := Load('411', 'Интерфейс'); + Tcp.cbConnectOnStartup.Caption := Load('139', 'Подключаться при запуске программы'); + Tcp.cbRestartOnControlFail.Caption := Load('140', 'Перезапуск при обрыве связи с клиентом'); + Tcp.cbMinimizeOnStartup.Caption := Load('141', 'Сворачивать в трей при запуске'); + Tcp.cbMinimizeOnClose.Caption := Load('142', 'Сворачивать в трей при закрытии'); + Tcp.cbShowBalloonHint.Caption := Load('143', 'Показывать всплывающие сообщения'); + Tcp.cbShowBalloonOnlyWhenHide.Caption := Load('144', 'Только когда программа свёрнута'); + Tcp.cbStayOnTop.Caption := Load('145', 'Оставаться поверх всех окон'); + Tcp.cbNoDesktopBorders.Caption := Load('414', 'Разрешить окну выходить за границы экрана'); + Tcp.cbNoDesktopBordersOnlyEnlarged.Caption := Load('415', 'Только при увеличенном окне программы'); + Tcp.cbRememberEnlargedPosition.Caption := Load('416', 'Запоминать позицию увеличенного окна'); + Tcp.cbHideIPv6Addreses.Caption := Load('417', 'Скрывать IPv6-адреса в списках интерфейсов'); + Tcp.cbClearPreviousSearchQuery.Caption := Load('418', 'Очищать предыдущий поисковый запрос в списках'); + + Tcp.gbProfile.Caption := Load('134', 'Профиль'); + Tcp.btnCreateProfile.Caption := Load('117', 'Создать..'); + Tcp.lbCreateProfile.Caption := Load('133', 'Ярлык программы с новым профилем на рабочем столе'); + + Tcp.cbUseReachableAddresses.Caption := Load('147', 'Мой сетевой экран разрешает подключаться только к этим портам'); + Tcp.lbReachableAddresses.Caption := Load('148', 'Список портов'); + Tcp.cbEnableSocks.Caption := Load('149', 'Включить встроенный прокси'); + Tcp.cbUseProxy.Caption := Load('150', 'Я использую прокси для подключения к Интернету'); + Tcp.lbProxyType.Caption := TransStr('151'); + Tcp.lbProxyAddress.Caption := Load('152', 'Адрес'); + Tcp.lbProxyPort.Caption := TransStr('153'); + Tcp.lbProxyUser.Caption := Load('154', 'Логин'); + Tcp.lbProxyPassword.Caption := TransStr('130'); + Tcp.cbUseBridges.Caption := Load('155', 'Использовать мосты'); + Tcp.edControlPassword.TextHint := Load('156', 'Введите пароль'); + Tcp.edReachableAddresses.TextHint := Load('157', 'Значения, разделённые запятыми'); + Tcp.edProxyAddress.TextHint := Load('158', 'IP-адрес или имя узла'); + Tcp.edProxyUser.TextHint := TransStr('159'); + Tcp.edProxyPassword.TextHint := TransStr('159'); + Tcp.meBridges.TextHint.Text := TransStr('210'); + Tcp.lbBridgesType.Caption := TransStr('151'); + Tcp.lbBridgesList.Caption := Load('419', 'Список мостов'); + Tcp.cbUsePreferredBridge.Caption := Load('420', 'Задать предпочитаемый мост вручную'); + Tcp.lbPreferredBridge.Caption := Load('421', 'Мост'); + Tcp.edPreferredBridge.TextHint := Load('422', 'Эта настройка переопределяет выбранный список мостов'); + Tcp.btnFindPreferredBridge.Caption := TransStr('423'); + LoadList(Tcp.cbxBridgesType, '424', '"Встроенные","Пользовательские"'); + + Tcp.lbFilterMode.Caption := Load('162', 'Режим'); + Tcp.lbFilterEntry.Caption := TransStr('288') + ': ' + IntToStr(Tcp.lbFilterEntry.Tag); + Tcp.lbFilterMiddle.Caption := TransStr('289') + ': ' + IntToStr(Tcp.lbFilterMiddle.Tag); + Tcp.lbFilterExit.Caption := TransStr('290') + ': ' + IntToStr(Tcp.lbFilterExit.Tag); + Tcp.lbFilterExclude.Caption := TransStr('287') + ': ' + IntToStr(Tcp.lbFilterExclude.Tag); + LoadList(Tcp.cbxFilterMode, '165', '"Отключено", "Выбранные страны", "Избранные узлы"'); + + Tcp.lbServerMode.Caption := Load('166', 'Режим работы'); + Tcp.lbNickname.Caption := Load('167', 'Ник'); + Tcp.lbContactInfo.Caption := Load('168', 'Контакты'); + Tcp.lbBridgeType.Caption := Load('169', 'Тип моста'); + Tcp.lbExitPolicy.Caption := Load('170', 'Политика выхода'); + Tcp.lbORPort.Caption := Load('171', 'Сервер'); + Tcp.lbDirPort.Caption := Load('172', 'Каталог'); + Tcp.lbTransportPort.Caption := Load('173', 'Транспорт'); + Tcp.cbUseMaxMemInQueues.Caption := Load('174', 'Ограничить память'); + Tcp.lbSizeMb.Caption := Prefixes[2]; + Tcp.cbUseRelayBandwidth.Caption := Load('176', 'Ограничить скорость'); + Tcp.cbUseNumCPUs.Caption := Load('177', 'Ограничить процессор'); + Tcp.lbNumCPUs.Caption := Load('178', 'Макс. ядер'); + Tcp.lbRelayBandwidthRate.Caption := Load('179', 'Средняя'); + Tcp.lbSpeed1.Caption := Prefixes[1] + '/' + TransStr('180'); + Tcp.lbSpeed2.Caption := Prefixes[1] + '/' + TransStr('180'); + Tcp.lbMaxMemInQueues.Caption := TransStr('175'); + Tcp.lbRelayBandwidthBurst.Caption := TransStr('175'); + Tcp.imUPnPTest.Hint := TransStr('181'); + Tcp.cbUseUPnP.Caption := Load('182', 'Пытаться автоматически настроить переадресацию портов'); + Tcp.cbPublishServerDescriptor.Caption := Load('183', 'Публиковать сервер в каталоге ретрансляторов'); + Tcp.cbUseDirPort.Caption := Load('184', 'Включить зеркало каталога ретрансляторов'); + Tcp.cbDirReqStatistics.Caption := Load('185', 'Собирать статистику запросов каталога'); + Tcp.cbHiddenServiceStatistics.Caption := Load('186', 'Собирать статистику о своей роли в качестве узла скрытого сервиса'); + Tcp.cbIPv6Exit.Caption := Load('187', 'Разрешить выход IPv6 трафика'); + Tcp.edNickname.TextHint := Load('188', 'Имя вашего узла'); + Tcp.edContactInfo.TextHint := Load('189', 'Электронный адрес'); + LoadList(Tcp.cbxServerMode, '205', '"Отключено","Ретранслятор","Выходной узел","Мост"'); + LoadList(Tcp.cbxExitPolicyType, '207', '"По умолчанию","Ограниченная","Настраиваемая"'); + Tcp.meMyFamily.TextHint.Text := TransStr('322'); + Tcp.lbBridgeDistribution.Caption := Load('425', 'Распространение'); + LoadList(Tcp.cbxBridgeDistribution, '426', '"Любое","Https","E-mail","Moat","Не распространять"'); + Tcp.cbUseAddress.Caption := Load('427', 'Задать внешний адрес вручную'); + Tcp.lbAddress.Caption := Load('428', 'Адрес'); + Tcp.edAddress.TextHint := Load('429', 'IP-адрес или имя узла'); + Tcp.lbPorts.Caption := Load('430', 'Настройка портов'); + Tcp.lbMaxAdvertisedBandwidth.Caption := Load('431', 'Рекламируемая'); + Tcp.lbSpeed4.Caption := Prefixes[1] + '/' + TransStr('180'); + Tcp.cbDirCache.Caption := Load('432', 'Использовать кэш каталога'); + Tcp.cbAssumeReachable.Caption := Load('433', 'Отключить проверку доступности сервера'); + Tcp.cbListenIPv6.Caption := Load('434', 'Прослушивать IPv6-адреса'); + Tcp.cbUseMyFamily.Caption := Load('435', 'Использовать семейство'); + Tcp.lbTotalMyFamily.Caption := TransStr('203') + ': ' + IntToStr(Tcp.meMyFamily.Lines.Count); + + Tcp.lbHsName.Caption := Load('190', 'Название');; + Tcp.edHsName.TextHint := Load('191', 'Имя каталога'); + Tcp.cbHsMaxStreams.Caption := Load('192', 'Ограничить число соединений'); + Tcp.lbHsMaxStreams.Caption := Load('193', 'Соединений на цепочку'); + Tcp.lbHsVersion.Caption := Load('194', 'Версия протокола'); + Tcp.lbHsNumIntroductionPoints.Caption := Load('195', 'Точек входа'); + Tcp.lbRendPostPeriod.Caption := Load('196', 'Интервал публикации'); + Tcp.lbMinutes.Caption := TransStr('197'); + Tcp.lbHsSocket.Caption := Load('198', 'Сервис'); + Tcp.lbHsState.Caption := Load('199', 'Состояние'); + Tcp.lbHsVirtualPort.Caption := Load('200', 'Виртуальный порт'); + Tcp.gbHsEdit.Caption := Load('272', 'Панель редактирования'); + LoadList(Tcp.cbxHsState, '436', '"Включено","Выключено"'); + + Tcp.cbUseTrackHostExits.Caption := Load('201', 'Сохранять выходной узел для указанных адресов'); + Tcp.lbTrackHostExitsExpire.Caption := Load('202', 'Менять по истечении'); + Tcp.lbSeconds4.Caption := TransStr('135'); + Tcp.lbTotalHosts.Caption := TransStr('203') + ': ' + IntToStr(Tcp.meTrackHostExits.Lines.Count); + Tcp.lbTotalNodesList.Caption := TransStr('203') + ': ' + IntToStr(Tcp.meNodesList.Lines.Count); + Tcp.meTrackHostExits.TextHint.Text := TransStr('208'); + Tcp.meNodesList.TextHint.Text := TransStr('209'); + Tcp.cbUseHiddenServiceVanguards.Caption := Load('437', 'Использовать авангарды для скрытых сервисов'); + Tcp.lbVanguardLayerType.Caption := Load('438', 'Изменять узел цепочки'); + LoadList(Tcp.cbxVanguardLayerType, '439', '"Автовыбор","Только второй","Только третий","Второй и третий"'); + Tcp.lbNodesListTypeCaption.Caption := Load('440', 'Выберите список для редактирования'); + Tcp.lbNodesListType.Caption := Load('441', 'Список'); + LoadList(Tcp.cbxNodesListType, '442', '"Входные узлы","Средние узлы","Выходные узлы","Запрещённые узлы"'); + Tcp.cbEnableNodesList.Caption := Load('443', 'Включить'); + + Tcp.gbNetworkScanner.Caption := TransStr('444'); + Tcp.cbEnableDetectAliveNodes.Caption := Load('445', 'Включить определение живых узлов'); + Tcp.cbEnablePingMeasure.Caption := Load('446', 'Включить измерение пинга'); + Tcp.lbScanPortTimeout.Caption := Load('447', 'Таймаут подключения к порту'); + Tcp.lbScanPortAttempts.Caption := Load('448', 'Количество попыток соединения с портом'); + Tcp.lbScanPingTimeout.Caption := Load('449', 'Таймаут пинг-запросов'); + Tcp.lbScanPingAttempts.Caption := Load('450', 'Количество попыток измерить пинг'); + Tcp.lbDelayBetweenAttempts.Caption := Load('451', 'Задержка между попытками'); + Tcp.lbScanMaxThread.Caption := Load('452', 'Количество потоков сканирования'); + Tcp.lbScanPortionTimeout.Caption := Load('453', 'Задержка между порциями'); + Tcp.lbScanPortionSize.Caption := Load('454', 'Количество сканирований на порцию'); + Tcp.cbAutoScanNewNodes.Caption := Load('455', 'Автоматически определять пинг и живые узлы'); + Tcp.lbFullScanInterval.Caption := Load('456', 'Полное сканирование каждые'); + Tcp.lbNonResponsedScanInterval.Caption := Load('457', 'Сканирование узлов без ответа каждые'); + Tcp.lbPartialScansCounts.Caption := Load('458', 'Количество частичных сканирований'); + Tcp.lbMiliseconds1.Caption := TransStr('459'); + Tcp.lbMiliseconds2.Caption := TransStr('459'); + Tcp.lbMiliseconds3.Caption := TransStr('459'); + Tcp.lbMiliseconds4.Caption := TransStr('459'); + Tcp.lbHours1.Caption := TransStr('477'); + Tcp.lbHours2.Caption := TransStr('477'); + + Tcp.gbTransports.Caption := Load('460', 'Подключаемые транспорты'); + Tcp.lbTransports.Caption := Load('461', 'Транспорты'); + Tcp.edTransports.TextHint := Load('462', 'Список поддерживаемых транспортов'); + Tcp.lbTransportsHandler.Caption := Load('463', 'Обработчик'); + Tcp.edTransportsHandler.TextHint := Load('464', 'Введите имя файла'); + Tcp.lbHandlerParams.Caption := Load('465', 'Параметры'); + Tcp.lbTransportType.Caption := TransStr('151'); + LoadList(Tcp.cbxTransportType, '466', '"Клиент","Сервер","Совмещённый"'); + + Tcp.gbAutoSelectRouters.Caption := Load('467', 'Автоподбор роутеров'); + Tcp.lbAutoSelEntry.Caption := TransStr('288'); + Tcp.lbAutoSelMiddle.Caption := TransStr('289'); + Tcp.lbAutoSelExit.Caption := TransStr('290'); + Tcp.lbAutoSelMinWeight.Caption := Load('468', 'Вес'); + Tcp.lbAutoSelMaxPing.Caption := Load('469', 'Пинг'); + Tcp.lbCount1.Caption := TransStr('470'); + Tcp.lbCount2.Caption := TransStr('470'); + Tcp.lbCount3.Caption := TransStr('470'); + Tcp.lbSpeed5.Caption := Prefixes[2] + '/' + TransStr('180'); + Tcp.lbMiliseconds5.Caption := TransStr('459'); + Tcp.lbAutoSelPriority.Caption := Load('471', 'Приоритет'); + LoadList(Tcp.cbxAutoSelPriority, '472', '"Сбалансированный","Вес в консенсусе","Пинг до узла","Случайный"'); + Tcp.cbAutoSelStableOnly.Caption := Load('473', 'Только стабильные'); + Tcp.cbAutoSelFilterCountriesOnly.Caption := Load('474', 'Только страны из фильтра'); + Tcp.cbAutoSelUniqueNodes.Caption := Load('475', 'Только уникальные'); + Tcp.cbAutoSelNodesWithPingOnly.Caption := Load('476', 'Только отвечающие на пинг'); + Tcp.cbAutoSelMiddleNodesWithoutDir.Caption := Load('591', 'Средние узлы без каталогов'); + + Tcp.gbTraffic.Caption := Load('211', 'Скорость'); + Tcp.lbDownloadSpeedCaption.Caption := TransStr('212') + ':'; + Tcp.lbUploadSpeedCaption.Caption := TransStr('213') + ':'; + Tcp.lbDLSpeed.Caption := BytesFormat(DLSpeed) + '/' + TransStr('180'); + Tcp.lbULSpeed.Caption := BytesFormat(ULSpeed) + '/' + TransStr('180'); + + Tcp.gbMaxTraffic.Caption := TransStr('175'); + Tcp.lbMaxDLSpeedCaption.Caption := TransStr('212') + ':'; + Tcp.lbMaxULSpeedCaption.Caption := TransStr('213') + ':'; + Tcp.lbMaxDLSpeed.Caption := BytesFormat(MaxDLSpeed) + '/' + TransStr('180'); + Tcp.lbMaxULSpeed.Caption := BytesFormat(MaxULSpeed) + '/' + TransStr('180'); + + Tcp.gbSession.Caption := Load('229', 'Итого за сеанс'); + Tcp.lbSessionDLCaption.Caption := TransStr('214') + ':'; + Tcp.lbSessionULCaption.Caption := TransStr('215') + ':'; + Tcp.lbSessionDL.Caption := BytesFormat(SessionDL); + Tcp.lbSessionUL.Caption := BytesFormat(SessionUL); + + Tcp.gbTotal.Caption := Load('403', 'Итого за всё время'); + Tcp.gbTotal.Hint := Format(TransStr('402'), [DateTimeToStr(UnixToDateTime(TotalStartDate))]); + Tcp.lbTotalDLCaption.Caption := TransStr('214') + ':'; + Tcp.lbTotalULCaption.Caption := TransStr('215') + ':'; + Tcp.lbTotalDL.Caption := BytesFormat(TotalDL); + Tcp.lbTotalUL.Caption := BytesFormat(TotalUL); + + Tcp.gbInfo.Caption := Load('222', 'Сведения'); + Tcp.lbClientVersionCaption.Caption := Load('223', 'Версия клиента') + ':'; + Tcp.lbUserDirCaption.Caption := Load('224', 'Профиль') + ':'; + Tcp.lbClientVersion.Hint := Load('325', 'Перейти на страницу загрузки Tor'); + Tcp.lbUserDir.Hint := Load('227', 'Открыть папку профиля'); + Tcp.lbStatusProxyAddrCaption.Caption := Load('225', 'Встроенный прокси') + ':'; + Tcp.lbStatusProxyAddr.Hint := Load('228', 'Скопировать в буфер обмена'); + Tcp.lbStatusScannerCaption.Caption := TransStr('444') + ':'; + + Tcp.gbServerInfo.Caption := Load('216', 'Сервер'); + Tcp.lbServerExternalIpCaption.Caption := Load('217', 'Внешний адрес') + ':'; + Tcp.lbFingerprintCaption.Caption := Load('218', 'Идентификатор') + ':'; + Tcp.lbBridgeCaption.Caption := Load('219', 'Адрес моста') + ':'; + if AlreadyStarted then + Tcp.lbDetailsTime.Caption := TransStr('221') + ': ' + SeparateRight(Tcp.lbDetailsTime.Caption, ': ') + else + begin + Tcp.lbDetailsTime.Caption := TransStr('221') + ': ' + TransStr('110'); + Tcp.lbClientVersion.Caption := TransStr('110'); + Tcp.lbServerExternalIp.Caption := TransStr('260'); + Tcp.lbFingerprint.Caption := TransStr('260'); + Tcp.lbBridge.Caption := TransStr('260'); + end; + + Tcp.gbSpeedGraph.Caption := Load('220', 'График скорости'); + + Tcp.lbSpeed3.Caption := Prefixes[2] + '/' + TransStr('180'); + Tcp.btnShowNodes.Caption := TransStr('547'); + LoadList(Tcp.cbxRoutersQuery, '548', '"Хеш","Ник","IPv4","IPv6","OR-порт","DIR-порт","Версия","Пинг"'); + Tcp.edRoutersQuery.TextHint := Load('549', 'Введите запрос'); + Tcp.lbFavoritesEntry.Caption := TransStr('288') + ': ' + IntToStr(Tcp.lbFavoritesEntry.Tag); + Tcp.lbFavoritesMiddle.Caption := TransStr('289') + ': ' + IntToStr(Tcp.lbFavoritesMiddle.Tag); + Tcp.lbFavoritesExit.Caption := TransStr('290') + ': ' + IntToStr(Tcp.lbFavoritesExit.Tag); + Tcp.lbFavoritesTotal.Caption := TransStr('203') + ': ' + IntToStr(Tcp.lbFavoritesTotal.Tag); + Tcp.lbExcludeNodes.Caption := TransStr('287') + ': ' + IntToStr(Tcp.lbExcludeNodes.Tag); + + Tcp.miHsOpenDir.Caption := Load('273', 'Каталог сервиса'); + Tcp.miHsCopy.Caption := TransStr('274'); + Tcp.miHsInsert.Caption := TransStr('279'); + Tcp.miHsDelete.Caption := TransStr('280'); + Tcp.miHsClear.Caption := TransStr('278'); + + Tcp.miServerCopy.Caption := TransStr('274'); + Tcp.miServerInfo.Caption := TransStr('281'); + + Tcp.miCacheOperations.Caption := Load('478', 'Операции с кэшем'); + Tcp.miUpdateIpToCountryCache.Caption := Load('479', 'Обновить страны в сетевом кэше');; + Tcp.miClearDNSCache.Caption := Load('283', 'Очистить DNS-кэш'); + Tcp.miClearServerCache.Caption := Load('480', 'Очистить серверный кэш'); + Tcp.miClearBridgeCacheUnnecessary.Caption := Load('481', 'Очистить кэш от ненужных мостов'); + Tcp.miClearBridgesCacheAll.Caption := Load('482', 'Очистить кэш всех мостов'); + Tcp.miClearPingCache.Caption := Load('483', 'Очистить кэш пинг-запросов'); + Tcp.miClearAliveCache.Caption := Load('484', 'Очистить кэш живых узлов'); + Tcp.miClearUnusedNetworkCache.Caption := Load('485', 'Очистить неиспользуемый сетевой кэш'); + Tcp.miResetScannerSchedule.Caption := Load('486', 'Сбросить расписание сканирования узлов'); + Tcp.miResetTotalsCounter.Caption := Load('487', 'Сбросить счётчик трафика'); + Tcp.miStartScan.Caption := Load('488', 'Запустить сканирование'); + Tcp.miScanNewNodes.Caption := Load('489', 'Новые узлы'); + Tcp.miScanNonResponsed.Caption := Load('490', 'Не отвечающие узлы'); + Tcp.miScanCachedBridges.Caption := Load('491', 'Кэшированные мосты'); + Tcp.miScanAll.Caption := Load('492', 'Все узлы'); + Tcp.miManualPingMeasure.Caption := Load('493', 'Измерять пинг'); + Tcp.miManualDetectAliveNodes.Caption := Load('494', 'Определять живые узлы'); + Tcp.miStopScan.Caption := Load('495', 'Остановить сканирование'); + Tcp.miResetGuards.Caption := Load('496', 'Сбросить сторожевые узлы'); + Tcp.miResetGuardsAll.Caption := Load('497', 'Все сторожевые узлы'); + Tcp.miResetGuardsBridges.Caption := Load('498', 'Мостовые узлы'); + Tcp.miResetGuardsRestricted.Caption := Load('499', 'Выбранные входные узлы'); + Tcp.miResetGuardsDefault.Caption := Load('500', 'Входные узлы по умолчанию'); + + Tcp.miDetailsUpdateIp.Caption := TransStr('284'); + Tcp.miDetailsCopy.Caption := TransStr('274'); + Tcp.miDetailsAddToNodesList.Caption := TransStr('285'); + Tcp.miDetailsRelayInfo.Caption := TransStr('281'); + Tcp.miDetailsSelectTemplate.Caption := Load('286', 'Выбрать шаблон'); + + Tcp.miGetBridges.Caption := Load('291', 'Получить мосты'); + Tcp.miGetBridgesSite.Caption := Load('501', 'Веб-сайт'); + Tcp.miGetBridgesTelegram.Caption := Load('502', 'Телеграм-канал'); + Tcp.miGetBridgesEmail.Caption := Load('503', 'Электронная почта'); + Tcp.miPreferWebTelegram.Caption := Load('504', 'Предпочитать веб-версию Телеграма'); + Tcp.miRequestObfuscatedBridges.Caption := Load('505', 'Запрашивать обфусцированные мосты'); + Tcp.miRequestIPv6Bridges.Caption := Load('506', 'Запрашивать IPv6-мосты'); + Tcp.miCut.Caption := TransStr('276'); + Tcp.miCopy.Caption := TransStr('274'); + Tcp.miPaste.Caption := TransStr('275'); + Tcp.miDelete.Caption := TransStr('280'); + Tcp.miSelectAll.Caption := TransStr('277'); + Tcp.miFind.Caption := TransStr('423'); + Tcp.miClear.Caption := TransStr('278'); + Tcp.miClearBridges.Caption := TransStr('278'); + Tcp.miClearBridgesNotAlive.Caption := Load('507', 'Не отвечающие на соединения'); + Tcp.miClearBridgesNonCached.Caption := Load('508', 'Отсутствующие в кэше'); + Tcp.miClearBridgesCached.Caption := Load('509', 'Найденные в кэше'); + Tcp.miClearBridgesAll.Caption := Load('510', 'Все мосты'); + + Tcp.miLogOptions.Caption := TransStr('107'); + Tcp.miWriteLogFile.Caption := Load('292', 'Записывать в файл'); + Tcp.miAutoClear.Caption := Load('293', 'Очищать при каждом запуске'); + Tcp.miAutoScroll.Caption := Load('294', 'Автоматическая прокрутка'); + Tcp.miScrollBars.Caption := Load('295', 'Полоса прокрутки'); + Tcp.miSbVertical.Caption := Load('296', 'Вертикальная'); + Tcp.miSbHorizontal.Caption := Load('297', 'Горизонтальная'); + Tcp.miSbBoth.Caption := Load('298', 'Все'); + Tcp.miSbNone.Caption := Load('299', 'Нет'); + Tcp.miWordWrap.Caption := Load('300', 'Перенос строк'); + Tcp.miSafeLogging.Caption := Load('301', 'Скрывать сетевые адреса'); + Tcp.miLogLevel.Caption := Load('302', 'Уровень журналирования'); + Tcp.miDebug.Caption := Load('303', 'Отладка'); + Tcp.miInfo.Caption := Load('304', 'Информация'); + Tcp.miNotice.Caption := Load('305', 'Уведомления'); + Tcp.miWarn.Caption := Load('306', 'Предупреждения'); + Tcp.miErr.Caption := Load('307', 'Ошибки'); + Tcp.miOpenFileLog.Caption := Load('308', 'Открыть файл журнала'); + Tcp.miLogCopy.Caption := TransStr('274'); + Tcp.miLogSelectAll.Caption := TransStr('277'); + Tcp.miLogFind.Caption := TransStr('423'); + Tcp.miLogClear.Caption := TransStr('278'); + Tcp.miLogSeparate.Caption := Load('511', 'Разделение файла журнала'); + Tcp.miLogSeparateNone.Caption := Load('512', 'Не разделять'); + Tcp.miLogSeparateMonth.Caption := Load('513', 'По месяцам'); + Tcp.miLogSeparateDay.Caption := Load('514', 'По дням'); + + Tcp.miStat.Caption := Load('309', 'Статистика'); + Tcp.miStatRelays.Caption := Load('310', 'Все'); + Tcp.miStatGuards.Caption := Load('311', 'Сторожевые'); + Tcp.miStatExit.Caption := Load('312', 'Выходные'); + Tcp.miStatAggregate.Caption := Load('313', 'Общая по странам'); + Tcp.miSaveTemplate.Caption := Load('314', 'Сохранить'); + Tcp.miLoadTemplate.Caption := Load('315', 'Загрузить'); + Tcp.miDeleteTemplate.Caption := TransStr('280'); + Tcp.miClearFilter.Caption := TransStr('278'); + Tcp.miClearFilterEntry.Caption := TransStr('288'); + Tcp.miClearFilterMiddle.Caption := TransStr('289'); + Tcp.miClearFilterExit.Caption := TransStr('290'); + Tcp.miClearFilterExclude.Caption := TransStr('287'); + Tcp.miClearFilterAll.Caption := Load('316', 'Все выбранные'); + Tcp.miFilterHideUnused.Caption := Load('163', 'Скрыть неиспользуемые страны'); + Tcp.miFilterScrollTop.Caption := TransStr('160'); + Tcp.miFilterOptions.Caption := TransStr('107'); + Tcp.miFilterSelectRow.Caption := TransStr('515');; + Tcp.miNotLoadEmptyTplData.Caption := Load('516', 'Не загружать пустые данные шаблона'); + Tcp.miIgnoreTplLoadParamsOutsideTheFilter.Caption := Load('517', 'Игнорировать параметры загрузки из шаблона вне фильтра'); + Tcp.miReplaceDisabledFavoritesWithCountries.Caption := Load('518', 'Заменять выключенные списки узлов выбранными странами'); + Tcp.miTplSave.Caption := Load('519', 'Сохранять в шаблоне..'); + Tcp.miTplLoad.Caption := Load('520', 'Загружать из шаблона..'); + Tcp.miTplSaveCountries.Caption := TransStr('521'); + Tcp.miTplSaveRouters.Caption := TransStr('522'); + Tcp.miTplSaveExcludes.Caption := TransStr('523'); + Tcp.miTplSaveSA.Caption := TransStr('368'); + Tcp.miTplSaveUA.Caption := TransStr('369'); + Tcp.miTplLoadCountries.Caption := TransStr('521'); + Tcp.miTplLoadRouters.Caption := TransStr('522'); + Tcp.miTplLoadExcludes.Caption := TransStr('523'); + Tcp.miTplLoadSA.Caption := TransStr('368'); + Tcp.miTplLoadUA.Caption := TransStr('369'); + + Tcp.miChangeCircuit.Caption := TransStr('103'); + Tcp.miShowStatus.Caption := TransStr('282'); + Tcp.miShowOptions.Caption := TransStr('107'); + Tcp.miShowLog.Caption := TransStr('108'); + Tcp.miShowCircuits.Caption := TransStr('327'); + Tcp.miShowRouters.Caption := TransStr('323'); + Tcp.miAbout.Caption := TransStr('355'); + Tcp.miExit.Caption := Load('319', 'Выход'); + + Tcp.miCircuitsDestroy.Caption := TransStr('524'); + Tcp.miDestroyCircuit.Caption := Load('527', 'Цепочку'); + Tcp.miDestroyStreams.Caption := TransStr('528'); + Tcp.miDestroyExitCircuits.Caption := Load('529', 'Все выходные цепочки'); + Tcp.miCircuitsUpdateNow.Caption := TransStr('284'); + Tcp.miCircuitsSort.Caption := TransStr('525'); + Tcp.miCircuitsSortID.Caption := TransStr('221'); + Tcp.miCircuitsSortPurpose.Caption := TransStr('530'); + Tcp.miCircuitsSortStreams.Caption := TransStr('528'); + Tcp.miCircuitsSortDL.Caption := TransStr('214'); + Tcp.miCircuitsSortUL.Caption := TransStr('215'); + Tcp.miCircuitFilter.Caption := TransStr('526'); + Tcp.miCircOneHop.Caption := TransStr('331'); + Tcp.miCircInternal.Caption := TransStr('332'); + Tcp.miCircExit.Caption := TransStr('333'); + Tcp.miCircHsClientDir.Caption := TransStr('334'); + Tcp.miCircHsClientIntro.Caption := TransStr('335'); + Tcp.miCircHsClientRend.Caption := TransStr('336'); + Tcp.miCircHsServiceDir.Caption := TransStr('337'); + Tcp.miCircHsServiceIntro.Caption := TransStr('338'); + Tcp.miCircHsServiceRend.Caption := TransStr('339'); + Tcp.miCircHsVanguards.Caption := TransStr('340'); + Tcp.miCircPathBiasTesting.Caption := TransStr('341'); + Tcp.miCircTesting.Caption := TransStr('342'); + Tcp.miCircCircuitPadding.Caption := TransStr('343'); + Tcp.miCircMeasureTimeout.Caption := TransStr('344'); + Tcp.miCircOther.Caption := TransStr('345'); + Tcp.miCircSA.Caption := TransStr('368'); + Tcp.miCircUA.Caption := TransStr('369'); + Tcp.miCircuitOptions.Caption := TransStr('107'); + + Tcp.miHideCircuitsWithoutStreams.Caption := Load('531', 'Скрывать цепочки без соединений'); + Tcp.miAlwaysShowExitCircuit.Caption := Load('532', 'Всегда показывать выходную цепочку'); + Tcp.miSelectExitCircuitWhetItChanges.Caption := Load('533', 'Выделять выходную цепочку при её изменении'); + Tcp.miShowCircuitsTraffic.Caption := Load('534', 'Показывать трафик цепочек'); + Tcp.miShowStreamsTraffic.Caption := Load('535', 'Показывать трафик соединений'); + Tcp.miShowStreamsInfo.Caption := Load('536', 'Показывать подробности соединений'); + Tcp.miCircuitsUpdateSpeed.Caption := Load('537', 'Скорость обновления'); + Tcp.miCircuitsUpdateHigh.Caption := Load('538', 'Высокая'); + Tcp.miCircuitsUpdateNormal.Caption := Load('539', 'Нормальная'); + Tcp.miCircuitsUpdateLow.Caption := Load('540', 'Низкая'); + Tcp.miCircuitsUpdateManual.Caption := Load('541', 'Обновлять вручную'); + + Tcp.miStreamsDestroyStream.Caption := TransStr('524'); + Tcp.miStreamsOpenInBrowser.Caption := Load('542', 'Открыть в браузере'); + Tcp.miStreamsSort.Caption := TransStr('525'); + Tcp.miStreamsSortID.Caption := TransStr('221'); + Tcp.miStreamsSortTarget.Caption := TransStr('330'); + Tcp.miStreamsSortTrack.Caption := Load('543', 'Привязка к выходному узлу'); + Tcp.miStreamsSortStreams.Caption := TransStr('528'); + Tcp.miStreamsSortDL.Caption := TransStr('214'); + Tcp.miStreamsSortUL.Caption := TransStr('215'); + + Tcp.miStreamsInfoDestroyStream.Caption := TransStr('524'); + Tcp.miStreamsInfoSort.Caption := TransStr('525'); + Tcp.miStreamsInfoSortID.Caption := TransStr('221'); + Tcp.miStreamsInfoSortSource.Caption := Load('544', 'Источник'); + Tcp.miStreamsInfoSortDest.Caption := Load('545', 'Назначение'); + Tcp.miStreamsInfoSortPurpose.Caption := TransStr('530'); + Tcp.miStreamsInfoSortDL.Caption := TransStr('214'); + Tcp.miStreamsInfoSortUL.Caption := TransStr('215'); + + Tcp.miShowExit.Caption := Load('550', 'Выходной'); + Tcp.miShowGuard.Caption := Load('551', 'Сторожевой'); + Tcp.miShowOther.Caption := Load('552', 'Обычный'); + Tcp.miShowAuthority.Caption := Load('553', 'Корневой'); + Tcp.miShowBridge.Caption := Load('554', 'Кэшированный мост'); + Tcp.miShowFast.Caption := Load('555', 'Быстрый'); + Tcp.miShowStable.Caption := Load('556', 'Стабильный'); + Tcp.miShowV2Dir.Caption := Load('557', 'Вторая версия каталога'); + Tcp.miShowHSDir.Caption := Load('558', 'Каталог скрытых сервисов'); + Tcp.miShowDirMirror.Caption := Load('559', 'Зеркало каталога'); + Tcp.miShowRecommend.Caption := Load('560', 'Рекомендуемая версия'); + Tcp.miShowAlive.Caption := Load('561', 'Живой узел'); + Tcp.miReverseConditions.Caption := Load('562', 'Обратить условия фильтра'); + Tcp.miShowNodesUA.Caption := TransStr('369'); + + Tcp.miRtResetFilter.Caption := Load('563', 'Сброс фильтров'); + Tcp.miRtCopy.Caption := TransStr('274'); + Tcp.miRtAddToNodesList.Caption := TransStr('285'); + Tcp.miRtSelectAsBridge.Caption := Load('564', 'Выбрать в качестве моста'); + Tcp.miRtDisableBridges.Caption := Load('565', 'Отменить использование мостов'); + Tcp.miRtRelayInfo.Caption := TransStr('281'); + Tcp.miRtFilters.Caption := TransStr('526'); + Tcp.miRtFiltersType.Caption := TransStr('547'); + Tcp.miRtFiltersCountry.Caption := TransStr('114'); + Tcp.miRtFiltersWeight.Caption := Load('566', 'Вес в консенсусе'); + Tcp.miRtFiltersQuery.Caption := Load('567', 'Запрос пользователя'); + Tcp.miRtFilterSA.Caption := TransStr('368'); + Tcp.miRtFilterUA.Caption := TransStr('369'); + Tcp.miRoutersOptions.Caption := TransStr('107'); + Tcp.miRoutersScrollTop.Caption := TransStr('160'); + Tcp.miRoutersSelectRow.Caption := TransStr('515'); + Tcp.miShowFlagsHint.Caption := Load('568', 'Показывать подсказки флагов при наведении мыши'); + Tcp.miLoadCachedRoutersOnStartup.Caption := Load('569', 'Загружать роутеры из кэша при запуске'); + Tcp.miDisableSelectionUnSuitableAsBridge.Caption := Load('570', 'Запретить выбор в качестве моста неподходящих узлов'); + Tcp.miConvertNodes.Caption := Load('571', 'Преобразовывать IP, CIDR и коды стран в хэши'); + Tcp.miEnableConvertNodesOnIncorrectClear.Caption := Load('572', 'При очистке неправильных узлов'); + Tcp.miEnableConvertNodesOnAddToNodesList.Caption := Load('573', 'При добавлении в список узлов'); + Tcp.miEnableConvertNodesOnRemoveFromNodesList.Caption := Load('574', 'При удалении из списка узлов'); + Tcp.miConvertIpNodes.Caption := Load('575', 'Преобразовывать IP-адреса'); + Tcp.miConvertCidrNodes.Caption := Load('576', 'Преобразовывать CIDR-маски'); + Tcp.miConvertCountryNodes.Caption := Load('577', 'Преобразовывать коды стран'); + Tcp.miIgnoreConvertExcludeNodes.Caption := Load('578', 'Исключить список запрещённых узлов'); + Tcp.miAvoidAddingIncorrectNodes.Caption := Load('579', 'Избегать добавление неправильных узлов'); + Tcp.miDisableFiltersOn.Caption := Load('580', 'Отключать фильтры при событии'); + Tcp.miDisableFiltersOnUserQuery.Caption := Load('581', 'Отправка запроса пользователя'); + Tcp.miDisableFiltersOnAuthorityOrBridge.Caption := Load('582', 'Выбор мостов или корневых узлов'); + Tcp.miRtSaveDefault.Caption := Load('583', 'Сохранить как фильтр по умолчанию'); + Tcp.miClearRouters.Caption := TransStr('278'); + Tcp.miClearRoutersEntry.Caption := TransStr('288'); + Tcp.miClearRoutersMiddle.Caption := TransStr('289'); + Tcp.miClearRoutersExit.Caption := TransStr('290'); + Tcp.miClearRoutersExclude.Caption := TransStr('287'); + Tcp.miClearRoutersFavorites.Caption := Load('584', 'Все избранные'); + Tcp.miClearRoutersIncorrect.Caption := Load('585', 'Неправильные узлы'); + Tcp.miClearRoutersAbsent.Caption := Load('586', 'Отсутствующие в консенсусе'); + + Tcp.miTransportsInsert.Caption := TransStr('279'); + Tcp.miTransportsDelete.Caption := TransStr('280'); + Tcp.miTransportsOpenDir.Caption := Load('587', 'Каталог транспортов'); + Tcp.miTransportsReset.Caption := Load('588', 'Настройки по умолчанию'); + Tcp.miTransportsClear.Caption := TransStr('278'); + + Tcp.miTrafficPeriod.Caption := Load('589', 'Период'); + Tcp.miPeriod1m.Caption := '1 ' + TransStr('197'); + Tcp.miPeriod5m.Caption := '5 ' + TransStr('197'); + Tcp.miPeriod15m.Caption := '15 ' + TransStr('197'); + Tcp.miPeriod30m.Caption := '30 ' + TransStr('197'); + Tcp.miPeriod1h.Caption := '1 ' + TransStr('477'); + Tcp.miPeriod3h.Caption := '3 ' + TransStr('477'); + Tcp.miPeriod6h.Caption := '6 ' + TransStr('477'); + Tcp.miPeriod12h.Caption := '12 ' + TransStr('477'); + Tcp.miPeriod24h.Caption := '24 ' + TransStr('477'); + Tcp.miSelectGraph.Caption := Load('590', 'Показывать графики'); + Tcp.miSelectGraphDL.Caption := TransStr('212'); + Tcp.miSelectGraphUL.Caption := TransStr('213'); + + if ValidInt(TransStr('Locale'), 0, 65535) then + CurrentLanguage := StrToInt(TransStr('Locale')) + else + CurrentLanguage := GetSystemDefaultLangID; + + Tcp.lbExitCountry.Font.Style := [fsUnderline]; + Tcp.lbExitIp.Font.Style := [fsUnderline]; + + if Tcp.cbxThemes.ItemIndex = 0 then + begin + Tcp.cbxThemes.Items[0] := TransStr('104'); + Tcp.cbxThemes.ItemIndex := 0; + end; + + if Load('UseDefaultCountries', '0') = '1' then + CurrentTranslate := 'DefaultCountries'; + + LoadStr('au','Австралия'); + LoadStr('at','Австрия'); + LoadStr('az','Азербайджан'); + LoadStr('ax','Аланды'); + LoadStr('al','Албания'); + LoadStr('dz','Алжир'); + LoadStr('as','Американское Самоа'); + LoadStr('ai','Ангилья'); + LoadStr('ao','Ангола'); + LoadStr('ad','Андорра'); + LoadStr('aq','Антарктида'); + LoadStr('ag','Антигуа и Барбуда'); + LoadStr('ar','Аргентина'); + LoadStr('am','Армения'); + LoadStr('aw','Аруба'); + LoadStr('af','Афганистан'); + LoadStr('bs','Багамы'); + LoadStr('bd','Бангладеш'); + LoadStr('bb','Барбадос'); + LoadStr('bh','Бахрейн'); + LoadStr('bz','Белиз'); + LoadStr('by','Беларусь'); + LoadStr('be','Бельгия'); + LoadStr('bj','Бенин'); + LoadStr('bm','Бермудские острова'); + LoadStr('bg','Болгария'); + LoadStr('bo','Боливия'); + LoadStr('bq','Бонайре, Синт-Эстатиус и Саба'); + LoadStr('ba','Босния и Герцеговина'); + LoadStr('bw','Ботсвана'); + LoadStr('br','Бразилия'); + LoadStr('io','Британская территория в Индийском океане'); + LoadStr('bn','Бруней'); + LoadStr('bf','Буркина Фасо'); + LoadStr('bi','Бурунди'); + LoadStr('bt','Бутан'); + LoadStr('vu','Вануату'); + LoadStr('va','Ватикан'); + LoadStr('gb','Великобритания'); + LoadStr('hu','Венгрия'); + LoadStr('ve','Венесуэла'); + LoadStr('vg','Виргинские острова (Великобритания)'); + LoadStr('vi','Виргинские острова (США)'); + LoadStr('um','Внешние малые острова (США)'); + LoadStr('tl','Восточный Тимор'); + LoadStr('vn','Вьетнам'); + LoadStr('ga','Габон'); + LoadStr('gy','Гайана'); + LoadStr('ht','Гаити'); + LoadStr('gm','Гамбия'); + LoadStr('gh','Гана'); + LoadStr('gp','Гваделупа'); + LoadStr('gt','Гватемала'); + LoadStr('gf','Французская Гвиана'); + LoadStr('gn','Гвинея'); + LoadStr('gw','Гвинея-Биссау'); + LoadStr('de','Германия'); + LoadStr('gg','Гернси'); + LoadStr('gi','Гибралтар'); + LoadStr('hn','Гондурас'); + LoadStr('hk','Гонконг'); + LoadStr('ps','Палестина'); + LoadStr('gd','Гренада'); + LoadStr('gl','Гренландия'); + LoadStr('gr','Греция'); + LoadStr('ge','Грузия'); + LoadStr('gu','Гуам'); + LoadStr('dk','Дания'); + LoadStr('cd','Демократическая Республика Конго'); + LoadStr('je','Джерси'); + LoadStr('dj','Джибути'); + LoadStr('dm','Остров Доминика'); + LoadStr('do','Доминиканская Республика'); + LoadStr('eg','Египет'); + LoadStr('zm','Замбия'); + LoadStr('zw','Зимбабве'); + LoadStr('ye','Йемен'); + LoadStr('il','Израиль'); + LoadStr('in','Индия'); + LoadStr('id','Индонезия'); + LoadStr('jo','Иордания'); + LoadStr('iq','Ирак'); + LoadStr('ir','Иран'); + LoadStr('ie','Ирландия'); + LoadStr('is','Исландия'); + LoadStr('es','Испания'); + LoadStr('it','Италия'); + LoadStr('cv','Кабо-Верде'); + LoadStr('kz','Казахстан'); + LoadStr('kh','Камбоджа'); + LoadStr('cm','Камерун'); + LoadStr('ca','Канада'); + LoadStr('qa','Катар'); + LoadStr('ke','Кения'); + LoadStr('cy','Кипр'); + LoadStr('kg','Кыргызстан'); + LoadStr('ki','Кирибати'); + LoadStr('cn','Китай'); + LoadStr('kp','Северная Корея'); + LoadStr('cc','Кокосовые острова'); + LoadStr('co','Колумбия'); + LoadStr('km','Коморские острова'); + LoadStr('cr','Коста-Рика'); + LoadStr('ci','Кот-д''Ивуар'); + LoadStr('cu','Куба'); + LoadStr('kw','Кувейт'); + LoadStr('cw','Кюрасао'); + LoadStr('la','Лаос'); + LoadStr('lv','Латвия'); + LoadStr('ls','Лесото'); + LoadStr('lr','Либерия'); + LoadStr('lb','Ливан'); + LoadStr('ly','Ливия'); + LoadStr('lt','Литва'); + LoadStr('li','Лихтенштейн'); + LoadStr('lu','Люксембург'); + LoadStr('mu','Маврикий'); + LoadStr('mr','Мавритания'); + LoadStr('mg','Мадагаскар'); + LoadStr('yt','Майотта'); + LoadStr('mo','Макао'); + LoadStr('mk','Северная Македония'); + LoadStr('mw','Малави'); + LoadStr('my','Малайзия'); + LoadStr('ml','Мали'); + LoadStr('mv','Мальдивские острова'); + LoadStr('mt','Мальта'); + LoadStr('ma','Марокко'); + LoadStr('mq','Мартиника'); + LoadStr('mh','Маршалловы острова'); + LoadStr('mx','Мексика'); + LoadStr('fm','Микронезия'); + LoadStr('mz','Мозамбик'); + LoadStr('md','Молдова'); + LoadStr('mc','Монако'); + LoadStr('mn','Монголия'); + LoadStr('ms','Монсеррат'); + LoadStr('mm','Мьянма'); + LoadStr('na','Намибия'); + LoadStr('nr','Науру'); + LoadStr('np','Непал'); + LoadStr('ne','Нигер'); + LoadStr('ng','Нигерия'); + LoadStr('nl','Нидерланды'); + LoadStr('ni','Никарагуа'); + LoadStr('nu','Ниуе'); + LoadStr('nz','Новая Зеландия'); + LoadStr('nc','Новая Каледония'); + LoadStr('no','Норвегия'); + LoadStr('ae','ОАЭ'); + LoadStr('om','Оман'); + LoadStr('bv','Остров Буве'); + LoadStr('im','Остров Мэн'); + LoadStr('nf','Остров Норфолк'); + LoadStr('cx','Остров Рождества'); + LoadStr('ky','Каймановы острова'); + LoadStr('ck','Острова Кука'); + LoadStr('pn','Питкэрн'); + LoadStr('sh','Остров Святой Елены'); + LoadStr('pk','Пакистан'); + LoadStr('pw','Палау'); + LoadStr('pa','Панама'); + LoadStr('pg','Папуа-Новая Гвинея'); + LoadStr('py','Парагвай'); + LoadStr('pe','Перу'); + LoadStr('pl','Польша'); + LoadStr('pt','Португалия'); + LoadStr('pr','Пуэрто-Рико'); + LoadStr('cg','Конго'); + LoadStr('kr','Южная Корея'); + LoadStr('re','Реюньон'); + LoadStr('ru','Россия'); + LoadStr('rw','Руанда'); + LoadStr('ro','Румыния'); + LoadStr('eh','Западная Сахара'); + LoadStr('sv','Сальвадор'); + LoadStr('ws','Самоа'); + LoadStr('sm','Сан-Марино'); + LoadStr('st','Сан-Томе и Принсипе'); + LoadStr('sa','Саудовская Аравия'); + LoadStr('sz','Свазиленд'); + LoadStr('mp','Северные Марианские острова'); + LoadStr('sc','Сейшельские острова'); + LoadStr('bl','Остров Святого Бартоломея'); + LoadStr('sn','Сенегал'); + LoadStr('mf','Остров Святого Мартина'); + LoadStr('pm','Сен-Пьер и Микелон'); + LoadStr('vc','Сент-Винсент и Гренадины'); + LoadStr('kn','Сент-Киттс и Невис'); + LoadStr('lc','Сент-Люсия'); + LoadStr('rs','Сербия'); + LoadStr('sg','Сингапур'); + LoadStr('sx','Синт-Мартен'); + LoadStr('sy','Сирия'); + LoadStr('sk','Словакия'); + LoadStr('si','Словения'); + LoadStr('sb','Соломонские острова'); + LoadStr('so','Сомали'); + LoadStr('sd','Судан'); + LoadStr('sr','Суринам'); + LoadStr('us','США'); + LoadStr('sl','Сьерра-Леоне'); + LoadStr('tj','Таджикистан'); + LoadStr('tw','Тайвань'); + LoadStr('th','Тайланд'); + LoadStr('tz','Танзания'); + LoadStr('tc','Острова Тёркс и Кайкос'); + LoadStr('tg','Того'); + LoadStr('tk','Токелау'); + LoadStr('to','Тонга'); + LoadStr('tt','Тринидад и Тобаго'); + LoadStr('tv','Тувалу'); + LoadStr('tn','Тунис'); + LoadStr('tm','Туркменистан'); + LoadStr('tr','Турция'); + LoadStr('ug','Уганда'); + LoadStr('uz','Узбекистан'); + LoadStr('ua','Украина'); + LoadStr('wf','Уоллис и Футуна'); + LoadStr('uy','Уругвай'); + LoadStr('fo','Фарерские острова'); + LoadStr('fj','Фиджи'); + LoadStr('ph','Филиппины'); + LoadStr('fi','Финляндия'); + LoadStr('fk','Фолклендские острова'); + LoadStr('fr','Франция'); + LoadStr('pf','Французская Полинезия'); + LoadStr('tf','Французские Южные Территории'); + LoadStr('hm','Острова Херд и Макдональд'); + LoadStr('hr','Хорватия'); + LoadStr('cf','ЦАР'); + LoadStr('td','Чад'); + LoadStr('me','Черногория'); + LoadStr('cz','Чешская Республика'); + LoadStr('cl','Чили'); + LoadStr('ch','Швейцария'); + LoadStr('se','Швеция'); + LoadStr('sj','Свальбард и Ян-Майен'); + LoadStr('lk','Шри-Ланка'); + LoadStr('ec','Эквадор'); + LoadStr('gq','Экваториальная Гвинея'); + LoadStr('er','Эритрея'); + LoadStr('ee','Эстония'); + LoadStr('et','Эфиопия'); + LoadStr('za','ЮАР'); + LoadStr('gs','Южная Джорджия и Южные Сандвичевы острова'); + LoadStr('ss','Южный Судан'); + LoadStr('jm','Ямайка'); + LoadStr('jp','Япония'); + LoadStr('??','Неизвестная'); + LoadStr('eu','Европейский союз'); + + finally + LangIniFile.Free; + end; +end; + +end. + + + diff --git a/source/Main.dfm b/source/Main.dfm new file mode 100644 index 0000000..7bf4714 --- /dev/null +++ b/source/Main.dfm @@ -0,0 +1,6201 @@ +object Tcp: TTcp + Left = 299 + Top = 196 + BorderIcons = [biSystemMenu, biMinimize] + BorderStyle = bsSingle + Caption = #1055#1072#1085#1077#1083#1100' '#1091#1087#1088#1072#1074#1083#1077#1085#1080#1103' Tor' + ClientHeight = 531 + ClientWidth = 728 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnDestroy = FormDestroy + OnPaint = FormPaint + OnResize = FormResize + PixelsPerInch = 96 + TextHeight = 13 + object paLog: TPanel + Left = 3 + Top = 92 + Width = 721 + Height = 435 + BevelInner = bvLowered + Color = clWindow + DoubleBuffered = True + ParentBackground = False + ParentDoubleBuffered = False + ShowCaption = False + TabOrder = 2 + Visible = False + object meLog: TMemo + Left = 2 + Top = 2 + Width = 717 + Height = 431 + Align = alClient + BevelInner = bvNone + BevelOuter = bvNone + BorderStyle = bsNone + HideSelection = False + PopupMenu = mnLog + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 0 + WordWrap = False + OnExit = MemoExit + OnKeyPress = MemoKeyPress + OnMouseDown = meLogMouseDown + OnMouseUp = meLogMouseUp + end + end + object paStatus: TPanel + Left = 3 + Top = 92 + Width = 721 + Height = 435 + BevelInner = bvLowered + Color = clWindow + DoubleBuffered = True + ParentBackground = False + ParentDoubleBuffered = False + ShowCaption = False + TabOrder = 3 + Visible = False + object gbSession: TGroupBox + Left = 12 + Top = 126 + Width = 155 + Height = 57 + Caption = #1042#1089#1077#1075#1086' '#1079#1072' '#1089#1077#1089#1089#1080#1102 + ParentBackground = False + TabOrder = 2 + object lbSessionDLCaption: TLabel + Left = 36 + Top = 16 + Width = 53 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1086#1083#1091#1095#1077#1085#1086':' + Transparent = True + end + object lbSessionULCaption: TLabel + Left = 23 + Top = 32 + Width = 66 + Height = 13 + Alignment = taRightJustify + AutoSize = False + Caption = #1054#1090#1087#1088#1072#1074#1083#1077#1085#1086':' + Transparent = True + end + object lbSessionDL: TLabel + Left = 92 + Top = 16 + Width = 25 + Height = 13 + Caption = '0,0 '#1041 + Transparent = True + end + object lbSessionUL: TLabel + Left = 92 + Top = 32 + Width = 25 + Height = 13 + Caption = '0,0 '#1041 + Transparent = True + end + end + object gbServerInfo: TGroupBox + Left = 12 + Top = 307 + Width = 698 + Height = 117 + Caption = #1057#1077#1088#1074#1077#1088 + ParentBackground = False + TabOrder = 6 + Visible = False + object lbServerExternalIpCaption: TLabel + Left = 19 + Top = 16 + Width = 81 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1085#1077#1096#1085#1080#1081' '#1072#1076#1088#1077#1089':' + Transparent = True + end + object lbFingerprintCaption: TLabel + Left = 14 + Top = 33 + Width = 86 + Height = 13 + Alignment = taRightJustify + Caption = #1048#1076#1077#1085#1090#1080#1092#1080#1082#1072#1090#1086#1088':' + Transparent = True + end + object lbServerExternalIp: TLabel + Left = 103 + Top = 17 + Width = 71 + Height = 13 + Caption = #1053#1077' '#1086#1087#1088#1077#1076#1077#1083#1105#1085 + PopupMenu = mnServerInfo + Transparent = True + OnMouseMove = lbServerInfoMouseMove + end + object lbFingerprint: TLabel + Left = 103 + Top = 33 + Width = 71 + Height = 13 + Caption = #1053#1077' '#1086#1087#1088#1077#1076#1077#1083#1105#1085 + PopupMenu = mnServerInfo + Transparent = True + OnMouseMove = lbServerInfoMouseMove + end + object lbBridgeCaption: TLabel + Left = 33 + Top = 49 + Width = 67 + Height = 13 + Alignment = taRightJustify + Caption = #1040#1076#1088#1077#1089' '#1084#1086#1089#1090#1072':' + Transparent = True + end + object lbBridge: TLabel + Left = 103 + Top = 49 + Width = 71 + Height = 13 + Caption = #1053#1077' '#1086#1087#1088#1077#1076#1077#1083#1105#1085 + PopupMenu = mnServerInfo + Transparent = True + OnMouseMove = lbServerInfoMouseMove + end + end + object gbTraffic: TGroupBox + Left = 12 + Top = 6 + Width = 155 + Height = 57 + Caption = #1057#1082#1086#1088#1086#1089#1090#1100 + ParentBackground = False + TabOrder = 0 + object lbDownloadSpeedCaption: TLabel + Left = 39 + Top = 16 + Width = 50 + Height = 13 + Alignment = taRightJustify + Caption = #1047#1072#1075#1088#1091#1079#1082#1072':' + Transparent = True + end + object lbUploadSpeedCaption: TLabel + Left = 35 + Top = 32 + Width = 54 + Height = 13 + Alignment = taRightJustify + Caption = #1054#1090#1087#1088#1072#1074#1082#1072':' + Transparent = True + end + object lbDLSpeed: TLabel + Left = 92 + Top = 16 + Width = 34 + Height = 13 + Caption = '0,0 '#1041'/c' + Transparent = True + end + object lbULSpeed: TLabel + Left = 92 + Top = 32 + Width = 34 + Height = 13 + Caption = '0,0 '#1041'/c' + Transparent = True + end + end + object gbInfo: TGroupBox + Left = 12 + Top = 247 + Width = 698 + Height = 57 + Caption = #1057#1074#1077#1076#1077#1085#1080#1103 + ParentBackground = False + TabOrder = 5 + object lbClientVersionCaption: TLabel + Left = 16 + Top = 16 + Width = 84 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1077#1088#1089#1080#1103' '#1082#1083#1080#1077#1085#1090#1072':' + Transparent = True + end + object lbClientVersion: TLabel + Left = 103 + Top = 16 + Width = 77 + Height = 13 + Cursor = crHandPoint + Hint = #1055#1077#1088#1077#1081#1090#1080' '#1085#1072' '#1089#1090#1088#1072#1085#1080#1094#1091' '#1079#1072#1075#1088#1091#1079#1082#1080' Tor' + Caption = #1053#1077' '#1086#1087#1088#1077#1076#1077#1083#1077#1085#1072 + ParentShowHint = False + ShowHint = True + Transparent = True + OnClick = lbClientVersionClick + end + object lbUserDirCaption: TLabel + Left = 51 + Top = 32 + Width = 49 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1088#1086#1092#1080#1083#1100':' + Transparent = True + end + object lbUserDir: TLabel + Left = 103 + Top = 32 + Width = 73 + Height = 13 + Cursor = crHandPoint + Hint = #1054#1090#1082#1088#1099#1090#1100' '#1087#1072#1087#1082#1091' '#1087#1088#1086#1092#1080#1083#1103 + Caption = #1055#1086' '#1091#1084#1086#1083#1095#1072#1085#1080#1102 + ParentShowHint = False + ShowHint = True + Transparent = True + OnClick = lbUserDirClick + end + object lbStatusProxyAddrCaption: TLabel + Left = 270 + Top = 16 + Width = 103 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1089#1090#1088#1086#1077#1085#1085#1099#1081' '#1087#1088#1086#1082#1089#1080':' + Transparent = True + end + object lbStatusProxyAddr: TLabel + Left = 376 + Top = 16 + Width = 76 + Height = 13 + Cursor = crHandPoint + Hint = #1057#1082#1086#1087#1080#1088#1086#1074#1072#1090#1100' '#1074' '#1073#1091#1092#1077#1088' '#1086#1073#1084#1077#1085#1072 + Caption = '127.0.0.1:9050' + ParentShowHint = False + ShowHint = True + Transparent = True + OnClick = lbStatusProxyAddrClick + end + object lbStatusScannerCaption: TLabel + Left = 288 + Top = 32 + Width = 85 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1077#1090#1077#1074#1086#1081' '#1089#1082#1072#1085#1077#1088':' + Transparent = True + end + object lbStatusScanner: TLabel + Left = 376 + Top = 32 + Width = 53 + Height = 13 + Hint = #1057#1082#1086#1087#1080#1088#1086#1074#1072#1090#1100' '#1074' '#1073#1091#1092#1077#1088' '#1086#1073#1084#1077#1085#1072 + Caption = #1054#1078#1080#1076#1072#1085#1080#1077 + Transparent = True + end + end + object gbSpeedGraph: TGroupBox + Left = 176 + Top = 6 + Width = 534 + Height = 238 + Caption = #1043#1088#1072#1092#1080#1082' '#1089#1082#1086#1088#1086#1089#1090#1080 + ParentBackground = False + TabOrder = 4 + object pbTraffic: TPaintBox + Left = 2 + Top = 15 + Width = 530 + Height = 221 + Align = alClient + PopupMenu = mnTraffic + OnPaint = pbTrafficPaint + end + end + object gbMaxTraffic: TGroupBox + Left = 12 + Top = 66 + Width = 155 + Height = 57 + Caption = #1052#1072#1082#1089#1080#1084#1091#1084 + ParentBackground = False + TabOrder = 1 + object lbMaxDLSpeedCaption: TLabel + Left = 39 + Top = 16 + Width = 50 + Height = 13 + Alignment = taRightJustify + Caption = #1047#1072#1075#1088#1091#1079#1082#1072':' + Transparent = True + end + object lbMaxULSpeedCaption: TLabel + Left = 35 + Top = 32 + Width = 54 + Height = 13 + Alignment = taRightJustify + Caption = #1054#1090#1087#1088#1072#1074#1082#1072':' + Transparent = True + end + object lbMaxDLSpeed: TLabel + Left = 92 + Top = 16 + Width = 34 + Height = 13 + Caption = '0,0 '#1041'/c' + Transparent = True + end + object lbMaxULSpeed: TLabel + Left = 92 + Top = 32 + Width = 34 + Height = 13 + Caption = '0,0 '#1041'/c' + Transparent = True + end + end + object gbTotal: TGroupBox + Left = 12 + Top = 187 + Width = 155 + Height = 57 + Hint = #1053#1072#1095#1072#1083#1086' '#1091#1095#1105#1090#1072': 01.01.1970 00:00' + Caption = #1042#1089#1077#1075#1086' '#1079#1072' '#1074#1089#1105' '#1074#1088#1077#1084#1103 + ParentBackground = False + ParentShowHint = False + ShowHint = True + TabOrder = 3 + object lbTotalDLCaption: TLabel + Left = 36 + Top = 16 + Width = 53 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1086#1083#1091#1095#1077#1085#1086':' + Transparent = True + end + object lbTotalULCaption: TLabel + Left = 23 + Top = 32 + Width = 66 + Height = 13 + Alignment = taRightJustify + AutoSize = False + Caption = #1054#1090#1087#1088#1072#1074#1083#1077#1085#1086':' + Transparent = True + end + object lbTotalDL: TLabel + Left = 92 + Top = 16 + Width = 25 + Height = 13 + Caption = '0,0 '#1041 + Transparent = True + end + object lbTotalUL: TLabel + Left = 92 + Top = 32 + Width = 25 + Height = 13 + Caption = '0,0 '#1041 + Transparent = True + end + end + end + object paCircuits: TPanel + Left = 3 + Top = 92 + Width = 721 + Height = 435 + BevelInner = bvLowered + Color = clWindow + DoubleBuffered = True + ParentBackground = False + ParentDoubleBuffered = False + ShowCaption = False + TabOrder = 4 + Visible = False + object lbDetailsTime: TLabel + Left = 550 + Top = 10 + Width = 160 + Height = 13 + Alignment = taRightJustify + Caption = #1044#1072#1090#1072' '#1089#1086#1079#1076#1072#1085#1080#1103': '#1053#1077' '#1086#1087#1088#1077#1076#1077#1083#1077#1085#1072 + Transparent = True + end + object lbCircuitsCount: TLabel + Left = 12 + Top = 10 + Width = 80 + Height = 13 + Caption = #1062#1077#1087#1086#1095#1077#1082': 0 '#1080#1079' 0' + Transparent = True + end + object lbStreamsCount: TLabel + Left = 143 + Top = 10 + Width = 75 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1086#1077#1076#1080#1085#1077#1085#1080#1081': 0' + Transparent = True + end + object lbULCirc: TLabel + Left = 349 + Top = 10 + Width = 79 + Height = 13 + Caption = #1054#1090#1087#1088#1072#1074#1083#1077#1085#1086': '#8734 + Transparent = True + end + object lbDLCirc: TLabel + Left = 227 + Top = 10 + Width = 66 + Height = 13 + Caption = #1055#1086#1083#1091#1095#1077#1085#1086': '#8734 + Transparent = True + end + object sgStreams: TStringGrid + Tag = 4 + Left = 227 + Top = 149 + Width = 483 + Height = 158 + ColCount = 6 + DefaultRowHeight = 16 + FixedCols = 0 + RowCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goDrawFocusSelected, goRowSelect, goThumbTracking, goFixedRowClick] + ParentShowHint = False + PopupMenu = mnStreams + ScrollBars = ssVertical + ShowHint = True + TabOrder = 2 + OnDblClick = sgStreamsDblClick + OnDrawCell = sgStreamsDrawCell + OnFixedCellClick = sgStreamsFixedCellClick + OnKeyDown = sgStreamsKeyDown + OnMouseDown = sgStreamsMouseDown + OnMouseMove = sgStreamsMouseMove + OnSelectCell = sgStreamsSelectCell + end + object sgCircuits: TStringGrid + Tag = 3 + Left = 12 + Top = 33 + Width = 205 + Height = 391 + DefaultRowHeight = 16 + FixedCols = 0 + RowCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goDrawFocusSelected, goRowSelect, goThumbTracking, goFixedRowClick] + ParentShowHint = False + PopupMenu = mnCircuits + ScrollBars = ssVertical + ShowHint = True + TabOrder = 0 + OnDrawCell = sgCircuitsDrawCell + OnFixedCellClick = sgCircuitsFixedCellClick + OnKeyDown = sgCircuitsKeyDown + OnMouseDown = sgCircuitsMouseDown + OnMouseMove = sgCircuitsMouseMove + OnSelectCell = sgCircuitsSelectCell + end + object sgCircuitInfo: TStringGrid + Tag = 7 + Left = 227 + Top = 33 + Width = 483 + Height = 106 + ColCount = 7 + DefaultRowHeight = 16 + FixedCols = 0 + RowCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goDrawFocusSelected, goRowSelect, goThumbTracking] + ParentShowHint = False + PopupMenu = mnDetails + ScrollBars = ssNone + ShowHint = True + TabOrder = 1 + OnDblClick = sgCircuitInfoDblClick + OnDrawCell = sgCircuitInfoDrawCell + OnKeyDown = sgCircuitInfoKeyDown + OnMouseDown = sgCircuitInfoMouseDown + OnMouseMove = sgCircuitInfoMouseMove + OnSelectCell = sgCircuitInfoSelectCell + end + object sgStreamsInfo: TStringGrid + Tag = 8 + Left = 227 + Top = 318 + Width = 483 + Height = 106 + ColCount = 6 + DefaultRowHeight = 16 + FixedCols = 0 + RowCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goDrawFocusSelected, goRowSelect, goThumbTracking, goFixedRowClick] + ParentShowHint = False + PopupMenu = mnStreamsInfo + ScrollBars = ssVertical + ShowHint = True + TabOrder = 3 + OnDrawCell = sgStreamsInfoDrawCell + OnFixedCellClick = sgStreamsInfoFixedCellClick + OnKeyDown = sgStreamsInfoKeyDown + OnMouseDown = sgStreamsInfoMouseDown + OnMouseMove = sgStreamsInfoMouseMove + OnSelectCell = sgStreamsInfoSelectCell + end + end + object paButtons: TPanel + Left = 0 + Top = 0 + Width = 728 + Height = 91 + BevelOuter = bvNone + DoubleBuffered = True + ParentBackground = False + ParentDoubleBuffered = False + TabOrder = 0 + OnDblClick = paButtonsDblClick + object sbShowLog: TSpeedButton + Left = 229 + Top = 53 + Width = 111 + Height = 35 + GroupIndex = 1 + Caption = #1046#1091#1088#1085#1072#1083 + Spacing = 8 + OnClick = sbShowLogClick + end + object sbShowOptions: TSpeedButton + Left = 116 + Top = 53 + Width = 111 + Height = 35 + GroupIndex = 1 + Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080 + Spacing = 6 + OnClick = sbShowOptionsClick + OnMouseDown = sbShowOptionsMouseDown + end + object sbShowStatus: TSpeedButton + Left = 342 + Top = 53 + Width = 111 + Height = 35 + GroupIndex = 1 + Caption = #1057#1090#1072#1090#1091#1089 + Spacing = 8 + OnClick = sbShowStatusClick + end + object imExitFlag: TImage + Left = 175 + Top = 32 + Width = 20 + Height = 13 + ParentShowHint = False + ShowHint = True + Stretch = True + Visible = False + end + object lbExitCountryCaption: TLabel + Left = 131 + Top = 31 + Width = 41 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1090#1088#1072#1085#1072':' + Transparent = True + end + object lbExitIpCaption: TLabel + Left = 125 + Top = 12 + Width = 47 + Height = 13 + Alignment = taRightJustify + Caption = 'IP '#1072#1076#1088#1077#1089':' + Transparent = True + end + object lbExitIp: TLabel + Left = 174 + Top = 12 + Width = 58 + Height = 13 + Caption = #1053#1077' '#1087#1086#1083#1091#1095#1077#1085 + PopupMenu = mnDetails + Transparent = True + OnMouseDown = lbExitIpMouseDown + OnMouseMove = lbExitMouseMove + end + object lbExitCountry: TLabel + Left = 174 + Top = 31 + Width = 77 + Height = 13 + Caption = #1053#1077' '#1086#1087#1088#1077#1076#1077#1083#1077#1085#1072 + ParentShowHint = False + PopupMenu = mnDetails + ShowHint = True + Transparent = True + OnDblClick = lbExitCountryDblClick + OnMouseMove = lbExitMouseMove + end + object sbShowCircuits: TSpeedButton + Left = 455 + Top = 53 + Width = 111 + Height = 35 + GroupIndex = 1 + Caption = #1062#1077#1087#1086#1095#1082#1080 + Spacing = 8 + OnClick = sbShowCircuitsClick + OnMouseDown = sbShowCircuitsMouseDown + end + object sbShowRouters: TSpeedButton + Left = 568 + Top = 53 + Width = 111 + Height = 35 + GroupIndex = 1 + Caption = #1056#1086#1091#1090#1077#1088#1099 + Spacing = 8 + OnClick = sbShowRoutersClick + OnMouseDown = sbShowRoutersMouseDown + end + object sbDecreaseForm: TSpeedButton + Left = 681 + Top = 53 + Width = 43 + Height = 35 + OnClick = sbDecreaseFormClick + end + object btnChangeCircuit: TButton + Left = 3 + Top = 3 + Width = 111 + Height = 48 + Caption = #1057#1084#1077#1085#1080#1090#1100' '#1094#1077#1087#1086#1095#1082#1091 + DropDownMenu = mnChangeCircuit + ImageIndex = 3 + ImageMargins.Left = 5 + Images = lsButtons + Style = bsSplitButton + TabOrder = 1 + WordWrap = True + OnClick = btnChangeCircuitClick + end + object btnSwitchTor: TButton + Left = 3 + Top = 53 + Width = 111 + Height = 35 + Caption = #1057#1090#1072#1088#1090 + DoubleBuffered = False + ImageIndex = 0 + ImageMargins.Left = 8 + ImageMargins.Right = -8 + Images = lsButtons + ParentDoubleBuffered = False + TabOrder = 0 + OnClick = btnSwitchTorClick + end + end + object paRouters: TPanel + Left = 3 + Top = 92 + Width = 721 + Height = 435 + BevelInner = bvLowered + Color = clWindow + DoubleBuffered = True + ParentBackground = False + ParentDoubleBuffered = False + ShowCaption = False + TabOrder = 5 + Visible = False + OnClick = paRoutersClick + object lbRoutersCount: TLabel + Left = 627 + Top = 10 + Width = 84 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1086#1082#1072#1079#1072#1085#1086': 0 '#1080#1079' 0' + Transparent = True + end + object lbSpeed3: TLabel + Left = 283 + Top = 10 + Width = 23 + Height = 13 + Caption = #1052#1041'/c' + Transparent = True + end + object lbFavoritesChar: TLabel + Left = 10 + Top = 412 + Width = 9 + Height = 13 + Caption = #9733 + Transparent = True + end + object lbFavoritesEntry: TLabel + Left = 23 + Top = 412 + Width = 58 + Height = 13 + Cursor = crHandPoint + Hint = '288' + Caption = #1042#1093#1086#1076#1085#1099#1077': 0' + Transparent = True + OnMouseDown = ShowFavoritesRouters + end + object lbFavoritesMiddle: TLabel + Left = 103 + Top = 412 + Width = 57 + Height = 13 + Cursor = crHandPoint + Hint = '289' + Caption = #1057#1088#1077#1076#1085#1080#1077': 0' + Transparent = True + OnMouseDown = ShowFavoritesRouters + end + object lbFavoritesExit: TLabel + Left = 185 + Top = 412 + Width = 66 + Height = 13 + Cursor = crHandPoint + Hint = '290' + Caption = #1042#1099#1093#1086#1076#1085#1099#1077': 0' + Transparent = True + OnMouseDown = ShowFavoritesRouters + end + object lbExcludeNodes: TLabel + Left = 362 + Top = 412 + Width = 84 + Height = 13 + Cursor = crHandPoint + Hint = '287' + Caption = #1047#1072#1087#1088#1077#1097#1105#1085#1085#1099#1077': 0' + Transparent = True + OnMouseDown = ShowFavoritesRouters + end + object lbExcludeChar: TLabel + Left = 348 + Top = 412 + Width = 9 + Height = 13 + Caption = #10006 + Transparent = True + end + object lbFavoritesTotal: TLabel + Left = 273 + Top = 412 + Width = 41 + Height = 13 + Cursor = crHandPoint + Hint = '203' + Caption = #1042#1089#1077#1075#1086': 0' + Transparent = True + OnMouseDown = ShowFavoritesRouters + end + object sgRouters: TStringGrid + Tag = 2 + Left = 1 + Top = 33 + Width = 720 + Height = 374 + ColCount = 14 + DefaultRowHeight = 16 + FixedCols = 0 + RowCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goDrawFocusSelected, goRowSelect, goThumbTracking, goFixedRowClick] + ParentShowHint = False + PopupMenu = mnRouters + ScrollBars = ssVertical + ShowHint = True + TabOrder = 0 + OnDblClick = sgRoutersDblClick + OnDrawCell = sgRoutersDrawCell + OnFixedCellClick = sgRoutersFixedCellClick + OnKeyDown = sgRoutersKeyDown + OnKeyPress = sgRoutersKeyPress + OnMouseDown = sgRoutersMouseDown + OnMouseMove = sgRoutersMouseMove + OnSelectCell = sgRoutersSelectCell + end + object btnShowNodes: TButton + Left = 6 + Top = 7 + Width = 75 + Height = 21 + Caption = #1058#1080#1087' '#1091#1079#1083#1072 + DropDownMenu = mnShowNodes + Style = bsSplitButton + TabOrder = 1 + OnClick = btnShowNodesClick + end + object cbxRoutersCountry: TComboBox + Tag = -1 + Left = 84 + Top = 7 + Width = 145 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ParentDoubleBuffered = False + Sorted = True + TabOrder = 2 + OnChange = cbxRoutersCountryChange + OnDropDown = cbxRoutersCountryDropDown + OnEnter = cbxRoutersCountryEnter + end + object edRoutersWeight: TEdit + Left = 233 + Top = 7 + Width = 35 + Height = 21 + Alignment = taCenter + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 3 + Text = '10' + OnKeyDown = edRoutersWeightKeyDown + OnMouseDown = edRoutersWeightMouseDown + end + object udRoutersWeight: TUpDown + Left = 268 + Top = 7 + Width = 13 + Height = 21 + HelpContext = 10 + Associate = edRoutersWeight + ArrowKeys = False + DoubleBuffered = True + Max = 65535 + Increment = 5 + ParentDoubleBuffered = False + Position = 10 + TabOrder = 4 + Thousands = False + OnClick = udRoutersWeightClick + end + object cbxRoutersQuery: TComboBox + Tag = -1 + Left = 310 + Top = 7 + Width = 75 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 5 + Text = #1061#1077#1096 + OnChange = cbxRoutersQueryChange + Items.Strings = ( + #1061#1077#1096 + #1053#1080#1082 + 'IPv4' + 'IPv6' + 'OR-'#1087#1086#1088#1090 + 'DIR-'#1087#1086#1088#1090 + #1042#1077#1088#1089#1080#1103 + #1055#1080#1085#1075) + end + object edRoutersQuery: TEdit + Left = 389 + Top = 7 + Width = 178 + Height = 21 + PopupMenu = EditMenu + TabOrder = 6 + TextHint = #1042#1074#1077#1076#1080#1090#1077' '#1079#1072#1087#1088#1086#1089 + OnChange = edRoutersQueryChange + OnKeyDown = edRoutersQueryKeyDown + end + end + object pcOptions: TPageControl + Left = 4 + Top = 94 + Width = 721 + Height = 433 + ActivePage = tsMain + DoubleBuffered = True + Images = lsMain + ParentDoubleBuffered = False + TabHeight = 26 + TabOrder = 1 + TabPosition = tpBottom + OnChange = pcOptionsChange + object tsMain: TTabSheet + Caption = #1054#1073#1097#1080#1077 + object gbProfile: TGroupBox + Left = 390 + Top = 326 + Width = 318 + Height = 65 + Caption = #1055#1088#1086#1092#1080#1083#1100 + TabOrder = 3 + object lbCreateProfile: TLabel + Left = 10 + Top = 20 + Width = 196 + Height = 31 + Alignment = taRightJustify + AutoSize = False + Caption = #1071#1088#1083#1099#1082' '#1087#1088#1086#1075#1088#1072#1084#1084#1099' '#1089' '#1085#1086#1074#1099#1084' '#1087#1088#1086#1092#1080#1083#1077#1084' '#1085#1072' '#1088#1072#1073#1086#1095#1077#1084' '#1089#1090#1086#1083#1077 + Transparent = True + WordWrap = True + end + object btnCreateProfile: TButton + Left = 225 + Top = 25 + Width = 75 + Height = 21 + Caption = #1057#1086#1079#1076#1072#1090#1100'..' + TabOrder = 0 + OnClick = btnCreateProfileClick + end + end + object gbControlAuth: TGroupBox + Left = 10 + Top = 326 + Width = 370 + Height = 65 + Caption = #1059#1087#1088#1072#1074#1083#1077#1085#1080#1077 + TabOrder = 1 + object lbControlPort: TLabel + Left = 8 + Top = 40 + Width = 25 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1086#1088#1090 + Transparent = True + end + object lbAuthMetod: TLabel + Left = 174 + Top = 15 + Width = 87 + Height = 13 + Alignment = taRightJustify + Caption = #1040#1091#1090#1077#1085#1090#1080#1092#1080#1082#1072#1094#1080#1103 + Transparent = True + end + object lbControlPassword: TLabel + Left = 127 + Top = 40 + Width = 37 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1072#1088#1086#1083#1100 + Enabled = False + Transparent = True + end + object imGeneratePassword: TImage + Left = 343 + Top = 37 + Width = 20 + Height = 20 + Cursor = crHandPoint + Hint = #1057#1075#1077#1085#1077#1088#1080#1088#1086#1074#1072#1090#1100' '#1089#1083#1091#1095#1072#1081#1085#1099#1081' '#1087#1072#1088#1086#1083#1100 + Enabled = False + OnClick = imGeneratePasswordClick + end + object edControlPort: TEdit + Left = 36 + Top = 37 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 0 + Text = '9051' + OnChange = EditChange + end + object udControlPort: TUpDown + Left = 78 + Top = 37 + Width = 13 + Height = 21 + Associate = edControlPort + Min = 1 + Max = 65535 + Position = 9051 + TabOrder = 1 + Thousands = False + OnChanging = SpinChanging + end + object cbxAuthMetod: TComboBox + Left = 264 + Top = 12 + Width = 100 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 2 + Text = 'Cookie-'#1092#1072#1081#1083 + OnChange = cbxAuthMetodChange + Items.Strings = ( + 'Cookie-'#1092#1072#1081#1083 + #1055#1072#1088#1086#1083#1100) + end + object edControlPassword: TEdit + Left = 166 + Top = 37 + Width = 174 + Height = 21 + Enabled = False + MaxLength = 255 + PasswordChar = '*' + PopupMenu = EditMenu + TabOrder = 3 + TextHint = #1042#1074#1077#1076#1080#1090#1077' '#1087#1072#1088#1086#1083#1100 + OnChange = EditChange + OnDblClick = edControlPasswordDblClick + end + end + object gbInterface: TGroupBox + Left = 390 + Top = 3 + Width = 318 + Height = 319 + Caption = #1048#1085#1090#1077#1088#1092#1077#1081#1089 + TabOrder = 2 + object cbStayOnTop: TCheckBox + Left = 10 + Top = 165 + Width = 300 + Height = 17 + Caption = #1054#1089#1090#1072#1074#1072#1090#1100#1089#1103' '#1087#1086#1074#1077#1088#1093' '#1074#1089#1077#1093' '#1086#1082#1086#1085 + TabOrder = 6 + OnClick = cbStayOnTopClick + end + object cbShowBalloonOnlyWhenHide: TCheckBox + Left = 29 + Top = 141 + Width = 280 + Height = 17 + Caption = #1058#1086#1083#1100#1082#1086' '#1082#1086#1075#1076#1072' '#1087#1088#1086#1075#1088#1072#1084#1084#1072' '#1089#1074#1105#1088#1085#1091#1090#1072 + Checked = True + State = cbChecked + TabOrder = 5 + OnClick = OptionsChange + end + object cbShowBalloonHint: TCheckBox + Left = 10 + Top = 117 + Width = 300 + Height = 17 + Caption = #1055#1086#1082#1072#1079#1099#1074#1072#1090#1100' '#1074#1089#1087#1083#1099#1074#1072#1102#1097#1080#1077' '#1089#1086#1086#1073#1097#1077#1085#1080#1103 + Checked = True + State = cbChecked + TabOrder = 4 + OnClick = cbShowBalloonHintClick + end + object cbMinimizeOnClose: TCheckBox + Left = 10 + Top = 93 + Width = 300 + Height = 17 + Caption = #1057#1074#1086#1088#1072#1095#1080#1074#1072#1090#1100' '#1074' '#1090#1088#1077#1081' '#1087#1088#1080' '#1079#1072#1082#1088#1099#1090#1080#1080 + Checked = True + State = cbChecked + TabOrder = 3 + OnClick = OptionsChange + end + object cbMinimizeOnStartup: TCheckBox + Left = 10 + Top = 69 + Width = 300 + Height = 17 + Caption = #1057#1074#1086#1088#1072#1095#1080#1074#1072#1090#1100' '#1074' '#1090#1088#1077#1081' '#1087#1088#1080' '#1079#1072#1087#1091#1089#1082#1077 + TabOrder = 2 + OnClick = OptionsChange + end + object cbConnectOnStartup: TCheckBox + Left = 10 + Top = 21 + Width = 300 + Height = 17 + Caption = #1055#1086#1076#1082#1083#1102#1095#1072#1090#1100#1089#1103' '#1087#1088#1080' '#1079#1072#1087#1091#1089#1082#1077' '#1087#1088#1086#1075#1088#1072#1084#1084#1099 + TabOrder = 0 + OnClick = OptionsChange + end + object cbRestartOnControlFail: TCheckBox + Left = 10 + Top = 45 + Width = 300 + Height = 17 + Caption = #1055#1077#1088#1077#1079#1072#1087#1091#1089#1082' '#1087#1088#1080' '#1086#1073#1088#1099#1074#1077' '#1089#1074#1103#1079#1080' '#1089' '#1082#1083#1080#1077#1085#1090#1086#1084 + Checked = True + State = cbChecked + TabOrder = 1 + OnClick = OptionsChange + end + object cbNoDesktopBorders: TCheckBox + Left = 10 + Top = 189 + Width = 300 + Height = 17 + Caption = #1056#1072#1079#1088#1077#1096#1080#1090#1100' '#1086#1082#1085#1091' '#1074#1099#1093#1086#1076#1080#1090#1100' '#1079#1072' '#1075#1088#1072#1085#1080#1094#1099' '#1101#1082#1088#1072#1085#1072 + Checked = True + State = cbChecked + TabOrder = 7 + OnClick = cbNoDesktopBordersClick + end + object cbRememberEnlargedPosition: TCheckBox + Left = 10 + Top = 237 + Width = 300 + Height = 17 + Caption = #1047#1072#1087#1086#1084#1080#1085#1072#1090#1100' '#1087#1086#1079#1080#1094#1080#1102' '#1091#1074#1077#1083#1080#1095#1077#1085#1085#1086#1075#1086' '#1086#1082#1085#1072 + TabOrder = 9 + OnClick = OptionsChange + end + object cbHideIPv6Addreses: TCheckBox + Left = 10 + Top = 261 + Width = 300 + Height = 17 + Caption = #1057#1082#1088#1099#1074#1072#1090#1100' IPv6-'#1072#1076#1088#1077#1089#1072' '#1074' '#1089#1087#1080#1089#1082#1072#1093' '#1080#1085#1090#1077#1088#1092#1077#1081#1089#1086#1074 + Checked = True + State = cbChecked + TabOrder = 10 + OnClick = OptionsChange + end + object cbNoDesktopBordersOnlyEnlarged: TCheckBox + Left = 29 + Top = 213 + Width = 280 + Height = 17 + Caption = #1058#1086#1083#1100#1082#1086' '#1087#1088#1080' '#1091#1074#1077#1083#1080#1095#1077#1085#1085#1086#1084' '#1086#1082#1085#1077' '#1087#1088#1086#1075#1088#1072#1084#1084#1099 + Checked = True + State = cbChecked + TabOrder = 8 + OnClick = OptionsChange + end + object cbClearPreviousSearchQuery: TCheckBox + Left = 10 + Top = 284 + Width = 300 + Height = 17 + Caption = #1054#1095#1080#1097#1072#1090#1100' '#1087#1088#1077#1076#1099#1076#1091#1097#1080#1081' '#1087#1086#1080#1089#1082#1086#1074#1099#1081' '#1079#1072#1087#1088#1086#1089' '#1074' '#1089#1087#1080#1089#1082#1072#1093 + TabOrder = 11 + OnClick = OptionsChange + end + end + object gbOptions: TGroupBox + Left = 10 + Top = 3 + Width = 370 + Height = 319 + Caption = #1054#1089#1085#1086#1074#1085#1099#1077 + TabOrder = 0 + object lbMaxCircuitDirtiness: TLabel + Left = 58 + Top = 22 + Width = 222 + Height = 13 + Alignment = taRightJustify + Caption = #1052#1077#1085#1103#1090#1100' '#1094#1077#1087#1086#1095#1082#1091' '#1089#1091#1097#1077#1089#1090#1074#1091#1102#1097#1091#1102' '#1073#1086#1083#1077#1077' '#1095#1077#1084 + Transparent = True + end + object lbSeconds1: TLabel + Left = 344 + Top = 22 + Width = 21 + Height = 13 + Caption = #1089#1077#1082'.' + ParentShowHint = False + ShowHint = True + Transparent = True + end + object lbCircuitBuildTimeout: TLabel + Left = 96 + Top = 70 + Width = 184 + Height = 13 + Alignment = taRightJustify + Caption = #1052#1072#1082#1089'. '#1074#1088#1077#1084#1103' '#1085#1072' '#1087#1086#1089#1090#1088#1086#1077#1085#1080#1077' '#1094#1077#1087#1086#1095#1082#1080 + Enabled = False + Transparent = True + end + object lbSeconds2: TLabel + Left = 344 + Top = 70 + Width = 21 + Height = 13 + Caption = #1089#1077#1082'.' + Enabled = False + Transparent = True + end + object lbSeconds3: TLabel + Left = 344 + Top = 46 + Width = 21 + Height = 13 + Caption = #1089#1077#1082'.' + Transparent = True + end + object lbNewCircuitPeriod: TLabel + Left = 35 + Top = 46 + Width = 245 + Height = 13 + Alignment = taRightJustify + Caption = #1048#1085#1090#1077#1088#1074#1072#1083' '#1084#1077#1078#1076#1091' '#1087#1086#1087#1099#1090#1082#1072#1084#1080' '#1087#1086#1089#1090#1088#1086#1080#1090#1100' '#1094#1077#1087#1086#1095#1082#1091 + Transparent = True + end + object lbTheme: TLabel + Left = 28 + Top = 294 + Width = 24 + Height = 13 + Alignment = taRightJustify + Caption = #1058#1077#1084#1072 + Transparent = True + end + object lbLanguage: TLabel + Left = 236 + Top = 294 + Width = 26 + Height = 13 + Alignment = taRightJustify + Caption = #1071#1079#1099#1082 + Transparent = True + end + object lbMaxClientCircuitsPending: TLabel + Left = 64 + Top = 94 + Width = 216 + Height = 13 + Alignment = taRightJustify + Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1086#1078#1080#1076#1072#1102#1097#1080#1093' '#1094#1077#1087#1086#1095#1077#1082' '#1082#1083#1080#1077#1085#1090#1072 + Transparent = True + end + object cbAvoidDiskWrites: TCheckBox + Left = 10 + Top = 189 + Width = 350 + Height = 17 + Caption = #1042#1099#1087#1086#1083#1085#1103#1090#1100' '#1084#1077#1085#1100#1096#1077' '#1086#1087#1077#1088#1072#1094#1080#1081' '#1089' '#1076#1080#1089#1082#1086#1084 + TabOrder = 11 + OnClick = OptionsChange + end + object cbLearnCircuitBuildTimeout: TCheckBox + Left = 10 + Top = 117 + Width = 350 + Height = 17 + Caption = #1040#1074#1090#1086#1084#1072#1090#1080#1095#1077#1089#1082#1080' '#1074#1099#1073#1080#1088#1072#1090#1100' '#1074#1088#1077#1084#1103' '#1085#1072' '#1087#1086#1089#1090#1088#1086#1077#1085#1080#1077' '#1094#1077#1087#1086#1095#1082#1080 + Checked = True + State = cbChecked + TabOrder = 8 + OnClick = cbLearnCircuitBuildTimeoutClick + end + object cbEnforceDistinctSubnets: TCheckBox + Left = 10 + Top = 141 + Width = 350 + Height = 17 + Caption = #1053#1077' '#1089#1090#1088#1086#1080#1090#1100' '#1094#1077#1087#1086#1095#1082#1080' '#1080#1079' '#1091#1079#1083#1086#1074' '#1086#1076#1085#1086#1081' '#1087#1086#1076#1089#1077#1090#1080 + Checked = True + State = cbChecked + TabOrder = 9 + OnClick = OptionsChange + end + object edMaxCircuitDirtiness: TEdit + Left = 283 + Top = 19 + Width = 42 + Height = 21 + MaxLength = 7 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 0 + Text = '600' + OnChange = EditChange + end + object udMaxCircuitDirtiness: TUpDown + Left = 325 + Top = 19 + Width = 16 + Height = 21 + Associate = edMaxCircuitDirtiness + Min = 10 + Max = 2592000 + Increment = 60 + Position = 600 + TabOrder = 1 + Thousands = False + OnChanging = SpinChanging + end + object edNewCircuitPeriod: TEdit + Left = 283 + Top = 43 + Width = 42 + Height = 21 + MaxLength = 7 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 2 + Text = '30' + OnChange = EditChange + end + object udNewCircuitPeriod: TUpDown + Left = 325 + Top = 43 + Width = 16 + Height = 21 + Associate = edNewCircuitPeriod + Min = 1 + Max = 2592000 + Increment = 5 + Position = 30 + TabOrder = 3 + Thousands = False + OnChanging = SpinChanging + end + object edCircuitBuildTimeout: TEdit + Left = 283 + Top = 67 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 7 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 4 + Text = '60' + OnChange = EditChange + end + object udCircuitBuildTimeout: TUpDown + Left = 325 + Top = 67 + Width = 16 + Height = 21 + Associate = edCircuitBuildTimeout + Enabled = False + Min = 10 + Max = 2592000 + Increment = 5 + Position = 60 + TabOrder = 5 + Thousands = False + OnChanging = SpinChanging + end + object cbUseOpenDNS: TCheckBox + Left = 10 + Top = 213 + Width = 350 + Height = 17 + Caption = #1054#1087#1088#1077#1076#1077#1083#1103#1090#1100' '#1074#1085#1077#1096#1085#1080#1081' '#1072#1076#1088#1077#1089' '#1089#1077#1088#1074#1077#1088#1072' '#1095#1077#1088#1077#1079' OpenDNS' + Checked = True + State = cbChecked + TabOrder = 12 + OnClick = cbUseOpenDNSClick + end + object cbUseOpenDNSOnlyWhenUnknown: TCheckBox + Left = 26 + Top = 237 + Width = 334 + Height = 17 + Caption = #1058#1086#1083#1100#1082#1086' '#1077#1089#1083#1080' TOR '#1085#1077' '#1084#1086#1078#1077#1090' '#1086#1087#1088#1077#1076#1077#1083#1080#1090#1100' '#1077#1075#1086' '#1089#1072#1084 + Checked = True + State = cbChecked + TabOrder = 13 + OnClick = cbUseOpenDNSOnlyWhenUnknownClick + end + object cbUseNetworkCache: TCheckBox + Left = 10 + Top = 261 + Width = 350 + Height = 17 + Caption = #1050#1101#1096#1080#1088#1086#1074#1072#1090#1100' IP-cc-'#1079#1072#1087#1088#1086#1089#1099' '#1080' '#1088#1077#1079#1091#1083#1100#1090#1072#1090#1099' '#1089#1077#1090#1077#1074#1086#1075#1086' '#1089#1082#1072#1085#1077#1088#1072 + Checked = True + State = cbChecked + TabOrder = 14 + OnClick = cbUseNetworkCacheClick + end + object cbxThemes: TComboBox + Left = 55 + Top = 291 + Width = 130 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 15 + Text = #1055#1086' '#1091#1084#1086#1083#1095#1072#1085#1080#1102 + OnChange = cbxThemesChange + OnDropDown = cbxThemesDropDown + Items.Strings = ( + #1055#1086' '#1091#1084#1086#1083#1095#1072#1085#1080#1102) + end + object cbxLanguage: TComboBox + Left = 264 + Top = 291 + Width = 100 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ItemIndex = 0 + ParentDoubleBuffered = False + Sorted = True + TabOrder = 16 + Text = #1056#1091#1089#1089#1082#1080#1081 + OnChange = OptionsChange + Items.Strings = ( + #1056#1091#1089#1089#1082#1080#1081) + end + object cbStrictNodes: TCheckBox + Left = 10 + Top = 165 + Width = 350 + Height = 17 + Caption = #1056#1072#1079#1088#1077#1096#1080#1090#1100' '#1079#1072#1087#1088#1077#1097#1105#1085#1085#1099#1077' '#1091#1079#1083#1099' '#1076#1083#1103' '#1074#1085#1091#1090#1088#1077#1085#1085#1080#1093' '#1094#1077#1087#1086#1095#1077#1082 + Checked = True + State = cbChecked + TabOrder = 10 + OnClick = OptionsChange + end + object edMaxClientCircuitsPending: TEdit + Left = 283 + Top = 91 + Width = 42 + Height = 21 + MaxLength = 4 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 6 + Text = '32' + OnChange = EditChange + end + object udMaxClientCircuitsPending: TUpDown + Left = 325 + Top = 91 + Width = 16 + Height = 21 + Associate = edMaxClientCircuitsPending + Min = 1 + Max = 1024 + Increment = 8 + Position = 32 + TabOrder = 7 + Thousands = False + OnChanging = SpinChanging + end + end + end + object tsNetwork: TTabSheet + Caption = #1057#1077#1090#1100 + ImageIndex = 1 + object lbReachableAddresses: TLabel + Left = 28 + Top = 30 + Width = 75 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1087#1080#1089#1086#1082' '#1087#1086#1088#1090#1086#1074 + Enabled = False + Transparent = True + end + object lbProxyAddress: TLabel + Left = 117 + Top = 79 + Width = 31 + Height = 13 + Alignment = taRightJustify + Caption = #1040#1076#1088#1077#1089 + Enabled = False + Transparent = True + end + object lbProxyUser: TLabel + Left = 429 + Top = 80 + Width = 30 + Height = 13 + Alignment = taRightJustify + Caption = #1051#1086#1075#1080#1085 + Enabled = False + Transparent = True + end + object lbProxyPort: TLabel + Left = 333 + Top = 80 + Width = 25 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1086#1088#1090 + Enabled = False + Transparent = True + end + object lbProxyPassword: TLabel + Left = 571 + Top = 80 + Width = 37 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1072#1088#1086#1083#1100 + Enabled = False + Transparent = True + end + object lbProxyType: TLabel + Left = 28 + Top = 80 + Width = 18 + Height = 13 + Alignment = taRightJustify + Caption = #1058#1080#1087 + Enabled = False + Transparent = True + end + object lbTotalBridges: TLabel + Left = 666 + Top = 131 + Width = 41 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1089#1077#1075#1086': 0' + Enabled = False + Transparent = True + end + object lbBridgesType: TLabel + Left = 28 + Top = 131 + Width = 18 + Height = 13 + Alignment = taRightJustify + Caption = #1058#1080#1087 + Enabled = False + Transparent = True + end + object lbBridgesList: TLabel + Left = 178 + Top = 132 + Width = 74 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1087#1080#1089#1086#1082' '#1084#1086#1089#1090#1086#1074 + Transparent = True + end + object lbScanBridgesStatus: TLabel + Left = 384 + Top = 132 + Width = 172 + Height = 13 + Caption = #1054#1087#1088#1077#1076#1077#1083#1077#1085#1080#1077' '#1078#1080#1074#1099#1093' '#1084#1086#1089#1090#1086#1074' (0%)' + Transparent = True + Visible = False + end + object lbPreferredBridge: TLabel + Left = 28 + Top = 373 + Width = 25 + Height = 13 + Alignment = taRightJustify + Caption = #1052#1086#1089#1090 + Enabled = False + Transparent = True + end + object cbUseReachableAddresses: TCheckBox + Left = 10 + Top = 6 + Width = 402 + Height = 17 + Margins.Left = 0 + Caption = #1052#1086#1081' '#1089#1077#1090#1077#1074#1086#1081' '#1101#1082#1088#1072#1085' '#1088#1072#1079#1088#1077#1096#1072#1077#1090' '#1087#1086#1076#1082#1083#1102#1095#1072#1090#1100#1089#1103' '#1090#1086#1083#1100#1082#1086' '#1082' '#1101#1090#1080#1084' '#1087#1086#1088#1090#1072#1084 + TabOrder = 0 + WordWrap = True + OnClick = cbUseReachableAddressesClick + end + object edReachableAddresses: TEdit + Left = 106 + Top = 27 + Width = 307 + Height = 21 + Enabled = False + PopupMenu = EditMenu + TabOrder = 1 + Text = '80,443' + TextHint = #1047#1085#1072#1095#1077#1085#1080#1103', '#1088#1072#1079#1076#1077#1083#1105#1085#1085#1099#1077' '#1079#1072#1087#1103#1090#1099#1084#1080 + OnChange = EditChange + OnKeyPress = edReachableAddressesKeyPress + end + object cbUseProxy: TCheckBox + Left = 10 + Top = 56 + Width = 402 + Height = 17 + Caption = #1071' '#1080#1089#1087#1086#1083#1100#1079#1091#1102' '#1087#1088#1086#1082#1089#1080' '#1076#1083#1103' '#1087#1086#1076#1082#1083#1102#1095#1077#1085#1080#1103' '#1082' '#1048#1085#1090#1077#1088#1085#1077#1090#1091 + TabOrder = 6 + OnClick = cbUseProxyClick + end + object edProxyAddress: TEdit + Left = 153 + Top = 77 + Width = 170 + Height = 21 + Enabled = False + MaxLength = 255 + PopupMenu = EditMenu + TabOrder = 8 + TextHint = 'IP-'#1072#1076#1088#1077#1089' '#1080#1083#1080' '#1080#1084#1103' '#1091#1079#1083#1072 + OnChange = EditChange + end + object edProxyUser: TEdit + Left = 462 + Top = 77 + Width = 97 + Height = 21 + Enabled = False + MaxLength = 255 + PopupMenu = EditMenu + TabOrder = 11 + TextHint = #1053#1077#1086#1073#1103#1079#1072#1090#1077#1083#1100#1085#1086 + OnChange = EditChange + end + object edProxyPassword: TEdit + Left = 611 + Top = 77 + Width = 97 + Height = 21 + Enabled = False + MaxLength = 255 + PasswordChar = '*' + PopupMenu = EditMenu + TabOrder = 12 + TextHint = #1053#1077#1086#1073#1103#1079#1072#1090#1077#1083#1100#1085#1086 + OnChange = EditChange + end + object cbxProxyType: TComboBox + Left = 49 + Top = 77 + Width = 63 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + Enabled = False + ItemIndex = 1 + ParentDoubleBuffered = False + TabOrder = 7 + Text = 'SOCKS5' + OnChange = cbxProxyTypeChange + Items.Strings = ( + 'SOCKS4' + 'SOCKS5' + 'HTTPS') + end + object cbUseBridges: TCheckBox + Left = 10 + Top = 107 + Width = 313 + Height = 16 + Caption = #1048#1089#1087#1086#1083#1100#1079#1086#1074#1072#1090#1100' '#1084#1086#1089#1090#1099 + TabOrder = 13 + OnClick = cbUseBridgesClick + OnExit = cbUseBridgesExit + end + object meBridges: TMemo + Left = 10 + Top = 154 + Width = 697 + Height = 190 + Enabled = False + PopupMenu = EditMenu + ScrollBars = ssVertical + TabOrder = 16 + WordWrap = False + OnChange = meBridgesChange + OnExit = MemoExit + OnKeyPress = MemoKeyPress + end + object cbxSocksHost: TComboBox + Left = 473 + Top = 27 + Width = 177 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ItemIndex = 1 + ParentDoubleBuffered = False + TabOrder = 3 + Text = '127.0.0.1' + OnChange = OptionsChange + OnDropDown = cbxSocksHostDropDown + Items.Strings = ( + '0.0.0.0' + '127.0.0.1') + end + object edProxyPort: TEdit + Left = 361 + Top = 77 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 9 + Text = '1080' + OnChange = EditChange + end + object udProxyPort: TUpDown + Left = 403 + Top = 77 + Width = 13 + Height = 21 + Associate = edProxyPort + Enabled = False + Min = 1 + Max = 65535 + Position = 1080 + TabOrder = 10 + Thousands = False + OnChanging = SpinChanging + end + object edSOCKSPort: TEdit + Left = 653 + Top = 27 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 4 + Text = '9050' + OnChange = EditChange + end + object udSOCKSPort: TUpDown + Left = 695 + Top = 27 + Width = 13 + Height = 21 + Associate = edSOCKSPort + Min = 1 + Max = 65535 + Position = 9050 + TabOrder = 5 + Thousands = False + OnChanging = SpinChanging + end + object cbEnableSocks: TCheckBox + Left = 456 + Top = 6 + Width = 251 + Height = 17 + Caption = #1042#1082#1083#1102#1095#1080#1090#1100' '#1074#1089#1090#1088#1086#1077#1085#1085#1099#1081' '#1087#1088#1086#1082#1089#1080 + Checked = True + State = cbChecked + TabOrder = 2 + OnClick = cbEnableSocksClick + end + object cbxBridgesType: TComboBox + Left = 49 + Top = 127 + Width = 120 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + Enabled = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 14 + Text = #1042#1089#1090#1088#1086#1077#1085#1085#1099#1077 + OnChange = cbxBridgesTypeChange + OnCloseUp = cbxBridgesTypeCloseUp + OnKeyDown = cbxBridgesTypeKeyDown + Items.Strings = ( + #1042#1089#1090#1088#1086#1077#1085#1085#1099#1077 + #1055#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1100#1089#1082#1080#1077) + end + object cbxBridgesList: TComboBox + Left = 255 + Top = 129 + Width = 120 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ParentDoubleBuffered = False + TabOrder = 15 + OnChange = cbxBridgesListChange + OnCloseUp = cbxBridgesListCloseUp + OnKeyDown = cbxBridgesListKeyDown + end + object cbUsePreferredBridge: TCheckBox + Left = 10 + Top = 351 + Width = 313 + Height = 16 + Caption = #1047#1072#1076#1072#1090#1100' '#1087#1088#1077#1076#1087#1086#1095#1080#1090#1072#1077#1084#1099#1081' '#1084#1086#1089#1090' '#1074#1088#1091#1095#1085#1091#1102 + TabOrder = 17 + OnClick = cbUsePreferredBridgeClick + OnExit = cbUsePreferredBridgeExit + end + object edPreferredBridge: TEdit + Left = 55 + Top = 370 + Width = 588 + Height = 21 + Enabled = False + MaxLength = 255 + PopupMenu = EditMenu + TabOrder = 18 + TextHint = #1069#1090#1072' '#1085#1072#1089#1090#1088#1086#1081#1082#1072' '#1087#1077#1088#1077#1086#1087#1088#1077#1076#1077#1083#1103#1077#1090' '#1074#1099#1073#1088#1072#1085#1085#1099#1081' '#1089#1087#1080#1089#1086#1082' '#1084#1086#1089#1090#1086#1074 + OnChange = edPreferredBridgeChange + OnExit = edPreferredBridgeExit + end + object btnFindPreferredBridge: TButton + Left = 647 + Top = 370 + Width = 62 + Height = 21 + Caption = #1053#1072#1081#1090#1080'..' + DoubleBuffered = True + Enabled = False + ParentDoubleBuffered = False + TabOrder = 19 + OnClick = btnFindPreferredBridgeClick + end + end + object tsFilter: TTabSheet + Caption = #1060#1080#1083#1100#1090#1088 + ImageIndex = 2 + object lbFilterMode: TLabel + Left = 36 + Top = 6 + Width = 32 + Height = 13 + Alignment = taRightJustify + Caption = #1056#1077#1078#1080#1084 + Transparent = True + end + object lbFilterCount: TLabel + Left = 628 + Top = 6 + Width = 84 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1086#1082#1072#1079#1072#1085#1086': 0 '#1080#1079' 0' + Transparent = True + end + object lbFilterEntry: TLabel + Left = 250 + Top = 6 + Width = 58 + Height = 13 + Hint = '288' + Alignment = taRightJustify + Caption = #1042#1093#1086#1076#1085#1099#1077': 0' + Transparent = True + end + object lbFilterMiddle: TLabel + Left = 334 + Top = 6 + Width = 57 + Height = 13 + Hint = '289' + Alignment = taRightJustify + Caption = #1057#1088#1077#1076#1085#1080#1077': 0' + Transparent = True + end + object lbFilterExit: TLabel + Left = 414 + Top = 6 + Width = 66 + Height = 13 + Hint = '290' + Alignment = taRightJustify + Caption = #1042#1099#1093#1086#1076#1085#1099#1077': 0' + Transparent = True + end + object lbFilterExclude: TLabel + Left = 498 + Top = 6 + Width = 84 + Height = 13 + Hint = '287' + Alignment = taRightJustify + Caption = #1047#1072#1087#1088#1077#1097#1105#1085#1085#1099#1077': 0' + Transparent = True + end + object cbxFilterMode: TComboBox + Left = 71 + Top = 3 + Width = 150 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ItemIndex = 1 + ParentDoubleBuffered = False + TabOrder = 1 + Text = #1042#1099#1073#1088#1072#1085#1085#1099#1077' '#1089#1090#1088#1072#1085#1099 + OnChange = OptionsChange + Items.Strings = ( + #1054#1090#1082#1083#1102#1095#1077#1085#1086 + #1042#1099#1073#1088#1072#1085#1085#1099#1077' '#1089#1090#1088#1072#1085#1099 + #1048#1079#1073#1088#1072#1085#1085#1099#1077' '#1091#1079#1083#1099) + end + object sgFilter: TStringGrid + Tag = 1 + Left = -1 + Top = 29 + Width = 720 + Height = 373 + ColCount = 12 + DefaultRowHeight = 16 + FixedCols = 0 + RowCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goDrawFocusSelected, goRowSelect, goThumbTracking, goFixedRowClick] + ParentShowHint = False + PopupMenu = mnFilter + ScrollBars = ssVertical + ShowHint = True + TabOrder = 0 + OnDrawCell = sgFilterDrawCell + OnExit = sgFilterExit + OnFixedCellClick = sgFilterFixedCellClick + OnKeyDown = sgFilterKeyDown + OnKeyPress = sgFilterKeyPress + OnMouseDown = sgFilterMouseDown + OnMouseMove = sgFilterMouseMove + OnSelectCell = sgFilterSelectCell + ColWidths = ( + 65 + 66 + 66 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64 + 64) + end + end + object tsServer: TTabSheet + Caption = #1057#1077#1088#1074#1077#1088 + ImageIndex = 3 + object lbORPort: TLabel + Left = 614 + Top = 28 + Width = 37 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1077#1088#1074#1077#1088 + Enabled = False + Transparent = True + end + object lbNickname: TLabel + Left = 86 + Top = 29 + Width = 19 + Height = 13 + Alignment = taRightJustify + Caption = #1053#1080#1082 + Enabled = False + Transparent = True + end + object lbServerMode: TLabel + Left = 32 + Top = 7 + Width = 73 + Height = 13 + Alignment = taRightJustify + Caption = #1056#1077#1078#1080#1084' '#1088#1072#1073#1086#1090#1099 + Transparent = True + end + object lbRelayBandwidthRate: TLabel + Left = 449 + Top = 28 + Width = 44 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1088#1077#1076#1085#1103#1103 + Enabled = False + Transparent = True + end + object lbRelayBandwidthBurst: TLabel + Left = 444 + Top = 52 + Width = 49 + Height = 13 + Alignment = taRightJustify + Caption = #1052#1072#1082#1089#1080#1084#1091#1084 + Enabled = False + Transparent = True + end + object lbSpeed1: TLabel + Left = 554 + Top = 28 + Width = 22 + Height = 13 + Caption = #1050#1041'/c' + Enabled = False + Transparent = True + end + object lbSpeed2: TLabel + Left = 554 + Top = 52 + Width = 22 + Height = 13 + Caption = #1050#1041'/c' + Enabled = False + Transparent = True + end + object lbContactInfo: TLabel + Left = 54 + Top = 53 + Width = 51 + Height = 13 + Alignment = taRightJustify + Caption = #1050#1086#1085#1090#1072#1082#1090#1099 + Enabled = False + Transparent = True + end + object lbDirPort: TLabel + Left = 609 + Top = 52 + Width = 42 + Height = 13 + Alignment = taRightJustify + Caption = #1050#1072#1090#1072#1083#1086#1075 + Enabled = False + Transparent = True + end + object lbExitPolicy: TLabel + Left = 14 + Top = 125 + Width = 91 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1086#1083#1080#1090#1080#1082#1072' '#1074#1099#1093#1086#1076#1072 + Enabled = False + Transparent = True + end + object lbMaxMemInQueues: TLabel + Left = 265 + Top = 29 + Width = 49 + Height = 13 + Alignment = taRightJustify + Caption = #1052#1072#1082#1089#1080#1084#1091#1084 + Enabled = False + Transparent = True + end + object lbSizeMb: TLabel + Left = 375 + Top = 29 + Width = 14 + Height = 13 + Caption = #1052#1041 + Enabled = False + Transparent = True + end + object lbBridgeType: TLabel + Left = 55 + Top = 77 + Width = 50 + Height = 13 + Alignment = taRightJustify + Caption = #1058#1080#1087' '#1084#1086#1089#1090#1072 + Enabled = False + Transparent = True + end + object lbNumCPUs: TLabel + Left = 257 + Top = 76 + Width = 57 + Height = 13 + Alignment = taRightJustify + Caption = #1052#1072#1082#1089'. '#1103#1076#1077#1088 + Enabled = False + Transparent = True + end + object lbTransportPort: TLabel + Left = 598 + Top = 76 + Width = 53 + Height = 13 + Alignment = taRightJustify + Caption = #1058#1088#1072#1085#1089#1087#1086#1088#1090 + Enabled = False + Transparent = True + end + object imUPnPTest: TImage + Left = 687 + Top = 114 + Width = 20 + Height = 20 + Cursor = crHandPoint + Hint = #1055#1088#1086#1074#1077#1088#1082#1072' '#1087#1077#1088#1077#1072#1076#1088#1077#1089#1072#1094#1080#1080' '#1087#1086#1088#1090#1086#1074 + ParentShowHint = False + ShowHint = True + OnClick = imUPnPTestClick + end + object lbTotalMyFamily: TLabel + Left = 664 + Top = 285 + Width = 41 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1089#1077#1075#1086': 0' + Enabled = False + Transparent = True + end + object lbPorts: TLabel + Left = 616 + Top = 6 + Width = 93 + Height = 13 + Alignment = taRightJustify + Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1072' '#1087#1086#1088#1090#1086#1074 + Transparent = True + end + object lbAddress: TLabel + Left = 28 + Top = 373 + Width = 31 + Height = 13 + Alignment = taRightJustify + Caption = #1040#1076#1088#1077#1089 + Enabled = False + Transparent = True + end + object lbBridgeDistribution: TLabel + Left = 17 + Top = 101 + Width = 88 + Height = 13 + Alignment = taRightJustify + Caption = #1056#1072#1089#1087#1088#1086#1089#1090#1088#1072#1085#1077#1085#1080#1077 + Enabled = False + Transparent = True + end + object lbMaxAdvertisedBandwidth: TLabel + Left = 415 + Top = 76 + Width = 78 + Height = 13 + Alignment = taRightJustify + Caption = #1056#1077#1082#1083#1072#1084#1080#1088#1091#1077#1084#1072#1103 + Enabled = False + Transparent = True + end + object lbSpeed4: TLabel + Left = 554 + Top = 76 + Width = 22 + Height = 13 + Caption = #1050#1041'/c' + Enabled = False + Transparent = True + end + object edNickname: TEdit + Left = 108 + Top = 26 + Width = 125 + Height = 21 + Enabled = False + MaxLength = 19 + PopupMenu = EditMenu + TabOrder = 1 + Text = 'Unnamed' + TextHint = #1048#1084#1103' '#1074#1072#1096#1077#1075#1086' '#1091#1079#1083#1072 + OnChange = EditChange + end + object cbxServerMode: TComboBox + Left = 108 + Top = 3 + Width = 125 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 0 + Text = #1054#1090#1082#1083#1102#1095#1077#1085#1086 + OnChange = cbxServerModeChange + Items.Strings = ( + #1054#1090#1082#1083#1102#1095#1077#1085#1086 + #1056#1077#1090#1088#1072#1085#1089#1083#1103#1090#1086#1088 + #1042#1099#1093#1086#1076#1085#1086#1081' '#1091#1079#1077#1083 + #1052#1086#1089#1090) + end + object cbUseRelayBandwidth: TCheckBox + Left = 413 + Top = 4 + Width = 160 + Height = 17 + Caption = #1054#1075#1088#1072#1085#1080#1095#1080#1090#1100' '#1089#1082#1086#1088#1086#1089#1090#1100 + Enabled = False + TabOrder = 15 + OnClick = cbUseRelayBandwidthClick + end + object edContactInfo: TEdit + Left = 108 + Top = 50 + Width = 125 + Height = 21 + TabStop = False + Enabled = False + MaxLength = 255 + PopupMenu = EditMenu + TabOrder = 2 + TextHint = #1069#1083#1077#1082#1090#1088#1086#1085#1085#1099#1081' '#1072#1076#1088#1077#1089 + OnChange = EditChange + end + object cbxExitPolicyType: TComboBox + Left = 108 + Top = 122 + Width = 125 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + Enabled = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 5 + Text = #1055#1086' '#1091#1084#1086#1083#1095#1072#1085#1080#1102 + OnChange = cbxExitPolicyTypeChange + Items.Strings = ( + #1055#1086' '#1091#1084#1086#1083#1095#1072#1085#1080#1102 + #1054#1075#1088#1072#1085#1080#1095#1077#1085#1085#1072#1103 + #1053#1072#1089#1090#1088#1072#1080#1074#1072#1077#1084#1072#1103) + end + object cbUseUPnP: TCheckBox + Left = 244 + Top = 121 + Width = 390 + Height = 17 + Caption = #1055#1099#1090#1072#1090#1100#1089#1103' '#1072#1074#1090#1086#1084#1072#1090#1080#1095#1077#1089#1082#1080' '#1085#1072#1089#1090#1088#1086#1080#1090#1100' '#1087#1077#1088#1077#1072#1076#1088#1077#1089#1072#1094#1080#1102' '#1087#1086#1088#1090#1086#1074 + Checked = True + Enabled = False + State = cbChecked + TabOrder = 29 + OnClick = cbUseUPnPClick + end + object cbUseMaxMemInQueues: TCheckBox + Left = 244 + Top = 5 + Width = 160 + Height = 17 + Caption = #1054#1075#1088#1072#1085#1080#1095#1080#1090#1100' '#1087#1072#1084#1103#1090#1100 + Enabled = False + TabOrder = 9 + OnClick = cbUseMaxMemInQueuesClick + end + object cbxBridgeType: TComboBox + Left = 108 + Top = 74 + Width = 125 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + Enabled = False + ParentDoubleBuffered = False + TabOrder = 3 + OnChange = cbxBridgeTypeChange + end + object meExitPolicy: TMemo + Left = 10 + Top = 146 + Width = 223 + Height = 194 + Enabled = False + Lines.Strings = ( + 'accept *:80' + 'accept *:443' + 'reject *:*') + PopupMenu = EditMenu + ScrollBars = ssVertical + TabOrder = 6 + WordWrap = False + OnChange = OptionsChange + OnExit = MemoExit + OnKeyPress = MemoKeyPress + end + object cbUseNumCPUs: TCheckBox + Left = 244 + Top = 52 + Width = 160 + Height = 17 + Caption = #1054#1075#1088#1072#1085#1080#1095#1080#1090#1100' '#1087#1088#1086#1094#1077#1089#1089#1086#1088 + Enabled = False + TabOrder = 12 + OnClick = cbUseNumCPUsClick + end + object cbPublishServerDescriptor: TCheckBox + Left = 244 + Top = 141 + Width = 415 + Height = 17 + Caption = #1055#1091#1073#1083#1080#1082#1086#1074#1072#1090#1100' '#1089#1077#1088#1074#1077#1088' '#1074' '#1082#1072#1090#1072#1083#1086#1075#1077' '#1088#1077#1090#1088#1072#1085#1089#1083#1103#1090#1086#1088#1086#1074 + Checked = True + Enabled = False + State = cbChecked + TabOrder = 30 + OnClick = OptionsChange + end + object cbUseDirPort: TCheckBox + Left = 244 + Top = 161 + Width = 415 + Height = 17 + TabStop = False + Caption = #1042#1082#1083#1102#1095#1080#1090#1100' '#1079#1077#1088#1082#1072#1083#1086' '#1082#1072#1090#1072#1083#1086#1075#1072' '#1088#1077#1090#1088#1072#1085#1089#1083#1103#1090#1086#1088#1086#1074 + Enabled = False + TabOrder = 31 + OnClick = cbUseDirPortClick + end + object cbDirReqStatistics: TCheckBox + Left = 244 + Top = 201 + Width = 415 + Height = 17 + Caption = #1057#1086#1073#1080#1088#1072#1090#1100' '#1089#1090#1072#1090#1080#1089#1090#1080#1082#1091' '#1079#1072#1087#1088#1086#1089#1086#1074' '#1082#1072#1090#1072#1083#1086#1075#1072 + Checked = True + Enabled = False + State = cbChecked + TabOrder = 33 + OnClick = OptionsChange + end + object cbIPv6Exit: TCheckBox + Left = 259 + Top = 261 + Width = 320 + Height = 17 + Caption = #1056#1072#1079#1088#1077#1096#1080#1090#1100' '#1074#1099#1093#1086#1076' IPv6 '#1090#1088#1072#1092#1080#1082#1072 + Enabled = False + TabOrder = 36 + OnClick = OptionsChange + end + object cbHiddenServiceStatistics: TCheckBox + Left = 244 + Top = 181 + Width = 415 + Height = 17 + Caption = + #1057#1086#1073#1080#1088#1072#1090#1100' '#1089#1090#1072#1090#1080#1089#1090#1080#1082#1091' '#1086' '#1089#1074#1086#1077#1081' '#1088#1086#1083#1080' '#1074' '#1082#1072#1095#1077#1089#1090#1074#1077' '#1091#1079#1083#1072' '#1089#1082#1088#1099#1090#1086#1075#1086' '#1089#1077#1088#1074#1080#1089 + + #1072 + Checked = True + Enabled = False + State = cbChecked + TabOrder = 32 + OnClick = OptionsChange + end + object edORPort: TEdit + Left = 654 + Top = 25 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 22 + Text = '9001' + OnChange = EditChange + end + object udORPort: TUpDown + Left = 696 + Top = 25 + Width = 13 + Height = 21 + Associate = edORPort + Enabled = False + Min = 1 + Max = 65535 + Position = 9001 + TabOrder = 23 + Thousands = False + OnChanging = SpinChanging + end + object edDirPort: TEdit + Left = 654 + Top = 49 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 24 + Text = '9030' + OnChange = EditChange + end + object udDirPort: TUpDown + Left = 696 + Top = 49 + Width = 13 + Height = 21 + Associate = edDirPort + Enabled = False + Min = 1 + Max = 65535 + Position = 9030 + TabOrder = 25 + Thousands = False + OnChanging = SpinChanging + end + object edTransportPort: TEdit + Left = 654 + Top = 73 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 26 + Text = '443' + OnChange = EditChange + end + object udTransportPort: TUpDown + Left = 696 + Top = 73 + Width = 13 + Height = 21 + Associate = edTransportPort + Enabled = False + Min = 1 + Max = 65535 + Position = 443 + TabOrder = 27 + Thousands = False + OnChanging = SpinChanging + end + object edMaxMemInQueues: TEdit + Left = 317 + Top = 26 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 10 + Text = '1024' + OnChange = EditChange + end + object udMaxMemInQueues: TUpDown + Left = 359 + Top = 26 + Width = 13 + Height = 21 + Associate = edMaxMemInQueues + Enabled = False + Min = 256 + Max = 32768 + Increment = 256 + Position = 1024 + TabOrder = 11 + Thousands = False + OnChanging = SpinChanging + end + object edNumCPUs: TEdit + Left = 317 + Top = 73 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 2 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 13 + Text = '1' + OnChange = EditChange + end + object udNumCPUs: TUpDown + Left = 359 + Top = 73 + Width = 13 + Height = 21 + Associate = edNumCPUs + Enabled = False + Min = 1 + Max = 32 + Position = 1 + TabOrder = 14 + Thousands = False + OnChanging = SpinChanging + end + object edRelayBandwidthRate: TEdit + Left = 496 + Top = 25 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 7 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 16 + Text = '1250' + OnChange = EditChange + end + object udRelayBandwidthRate: TUpDown + Left = 538 + Top = 25 + Width = 13 + Height = 21 + Associate = edRelayBandwidthRate + Enabled = False + Min = 250 + Max = 1048576 + Increment = 250 + Position = 1250 + TabOrder = 17 + Thousands = False + OnChanging = SpinChanging + end + object edRelayBandwidthBurst: TEdit + Left = 496 + Top = 49 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 7 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 18 + Text = '2500' + OnChange = EditChange + end + object udRelayBandwidthBurst: TUpDown + Left = 538 + Top = 49 + Width = 13 + Height = 21 + Associate = edRelayBandwidthBurst + Enabled = False + Min = 250 + Max = 1048576 + Increment = 250 + Position = 2500 + TabOrder = 19 + Thousands = False + OnChanging = SpinChanging + end + object meMyFamily: TMemo + Left = 244 + Top = 306 + Width = 464 + Height = 85 + DoubleBuffered = True + Enabled = False + ParentDoubleBuffered = False + PopupMenu = EditMenu + ScrollBars = ssVertical + TabOrder = 38 + WordWrap = False + OnChange = meMyFamilyChange + OnExit = MemoExit + OnKeyPress = MemoKeyPress + end + object cbDirCache: TCheckBox + Left = 244 + Top = 101 + Width = 162 + Height = 17 + Caption = #1048#1089#1087#1086#1083#1100#1079#1086#1074#1072#1090#1100' '#1082#1101#1096' '#1082#1072#1090#1072#1083#1086#1075#1072 + Checked = True + State = cbChecked + TabOrder = 28 + OnMouseDown = cbDirCacheMouseDown + end + object cbListenIPv6: TCheckBox + Left = 244 + Top = 241 + Width = 415 + Height = 17 + Caption = #1055#1088#1086#1089#1083#1091#1096#1080#1074#1072#1090#1100' IPv6-'#1072#1076#1088#1077#1089#1072 + Enabled = False + TabOrder = 35 + OnClick = cbListenIPv6Click + end + object cbAssumeReachable: TCheckBox + Left = 244 + Top = 221 + Width = 415 + Height = 17 + Caption = #1054#1090#1082#1083#1102#1095#1080#1090#1100' '#1087#1088#1086#1074#1077#1088#1082#1091' '#1076#1086#1089#1090#1091#1087#1085#1086#1089#1090#1080' '#1089#1077#1088#1074#1077#1088#1072 + Enabled = False + TabOrder = 34 + OnClick = cbListenIPv6Click + end + object cbUseAddress: TCheckBox + Left = 10 + Top = 349 + Width = 222 + Height = 17 + Caption = #1047#1072#1076#1072#1090#1100' '#1074#1085#1077#1096#1085#1080#1081' '#1072#1076#1088#1077#1089' '#1074#1088#1091#1095#1085#1091#1102 + Enabled = False + TabOrder = 7 + OnClick = cbUseAddressClick + end + object edAddress: TEdit + Left = 63 + Top = 370 + Width = 170 + Height = 21 + Enabled = False + MaxLength = 255 + PopupMenu = EditMenu + TabOrder = 8 + TextHint = 'IP-'#1072#1076#1088#1077#1089' '#1080#1083#1080' '#1080#1084#1103' '#1091#1079#1083#1072 + OnChange = EditChange + end + object cbUseMyFamily: TCheckBox + Left = 244 + Top = 281 + Width = 288 + Height = 17 + Caption = #1048#1089#1087#1086#1083#1100#1079#1086#1074#1072#1090#1100' '#1089#1077#1084#1077#1081#1089#1090#1074#1086 + Enabled = False + TabOrder = 37 + OnClick = cbUseMyFamilyClick + end + object cbxBridgeDistribution: TComboBox + Left = 108 + Top = 98 + Width = 125 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + Enabled = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 4 + Text = #1051#1102#1073#1086#1077 + OnChange = OptionsChange + Items.Strings = ( + #1051#1102#1073#1086#1077 + 'https' + 'e-mail' + 'Moat' + #1053#1077' '#1088#1072#1089#1087#1088#1086#1089#1090#1088#1072#1085#1103#1090#1100) + end + object edMaxAdvertisedBandwidth: TEdit + Left = 496 + Top = 73 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 7 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 20 + Text = '2000' + OnChange = EditChange + end + object udMaxAdvertisedBandwidth: TUpDown + Left = 538 + Top = 73 + Width = 13 + Height = 21 + Associate = edMaxAdvertisedBandwidth + Enabled = False + Min = 250 + Max = 1048576 + Increment = 250 + Position = 2000 + TabOrder = 21 + Thousands = False + OnChanging = SpinChanging + end + end + object tsHs: TTabSheet + Caption = #1057#1082#1088#1099#1090#1099#1081' '#1089#1077#1088#1074#1080#1089 + ImageIndex = 4 + object sgHsPorts: TStringGrid + Tag = 6 + Left = 436 + Top = 9 + Width = 272 + Height = 269 + ColCount = 3 + DefaultRowHeight = 16 + FixedCols = 0 + RowCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goDrawFocusSelected, goRowSelect, goThumbTracking] + ParentShowHint = False + PopupMenu = mnHs + ScrollBars = ssVertical + ShowHint = True + TabOrder = 1 + OnDrawCell = sgHsPortsDrawCell + OnEnter = sgHsPortsEnter + OnKeyDown = sgHsPortsKeyDown + OnMouseMove = sgHsPortsMouseMove + OnSelectCell = sgHsPortsSelectCell + end + object sgHs: TStringGrid + Tag = 5 + Left = 10 + Top = 9 + Width = 416 + Height = 269 + ColCount = 7 + DefaultRowHeight = 16 + FixedCols = 0 + RowCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goDrawFocusSelected, goRowSelect, goThumbTracking] + ParentShowHint = False + PopupMenu = mnHs + ScrollBars = ssVertical + ShowHint = True + TabOrder = 0 + OnDrawCell = sgHsDrawCell + OnEnter = sgHsEnter + OnKeyDown = sgHsKeyDown + OnMouseMove = sgHsMouseMove + OnSelectCell = sgHsSelectCell + ColWidths = ( + 64 + 64 + 64 + 64 + 64 + 64 + 64) + end + object gbHsEdit: TGroupBox + Left = 10 + Top = 282 + Width = 698 + Height = 109 + Caption = #1055#1072#1085#1077#1083#1100' '#1088#1077#1076#1072#1082#1090#1080#1088#1086#1074#1072#1085#1080#1103 + TabOrder = 2 + object lbHsSocket: TLabel + Left = 460 + Top = 21 + Width = 36 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1077#1088#1074#1080#1089 + Enabled = False + Transparent = True + end + object lbHsVirtualPort: TLabel + Left = 535 + Top = 49 + Width = 95 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1080#1088#1090#1091#1072#1083#1100#1085#1099#1081' '#1087#1086#1088#1090 + Enabled = False + Transparent = True + end + object lbHsVersion: TLabel + Left = 268 + Top = 21 + Width = 92 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1090#1086#1082#1086#1083#1072 + Enabled = False + Transparent = True + end + object lbHsNumIntroductionPoints: TLabel + Left = 296 + Top = 49 + Width = 64 + Height = 13 + Alignment = taRightJustify + Caption = #1058#1086#1095#1077#1082' '#1074#1093#1086#1076#1072 + Enabled = False + Transparent = True + end + object lbRendPostPeriod: TLabel + Left = 248 + Top = 77 + Width = 112 + Height = 13 + Alignment = taRightJustify + Caption = #1048#1085#1090#1077#1088#1074#1072#1083' '#1087#1091#1073#1083#1080#1082#1072#1094#1080#1080 + Enabled = False + Transparent = True + end + object lbMinutes: TLabel + Left = 420 + Top = 77 + Width = 22 + Height = 13 + Caption = #1084#1080#1085'.' + Enabled = False + Transparent = True + end + object lbHsMaxStreams: TLabel + Left = 28 + Top = 76 + Width = 122 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1086#1077#1076#1080#1085#1077#1085#1080#1081' '#1085#1072' '#1094#1077#1087#1086#1095#1082#1091 + Enabled = False + Transparent = True + end + object lbHsName: TLabel + Left = 12 + Top = 21 + Width = 48 + Height = 13 + Alignment = taRightJustify + Caption = #1053#1072#1079#1074#1072#1085#1080#1077 + Enabled = False + Transparent = True + end + object lbHsState: TLabel + Left = 541 + Top = 77 + Width = 54 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1086#1089#1090#1086#1103#1085#1080#1077 + Enabled = False + Transparent = True + end + object cbxHsAddress: TComboBox + Left = 499 + Top = 18 + Width = 130 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + Enabled = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 9 + Text = '127.0.0.1' + OnChange = cbxHsAddressChange + OnDropDown = cbxHsAddressDropDown + Items.Strings = ( + '127.0.0.1') + end + object cbxHsVersion: TComboBox + Left = 362 + Top = 18 + Width = 54 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + Enabled = False + ItemIndex = 1 + ParentDoubleBuffered = False + TabOrder = 4 + Text = '3' + OnChange = cbxHsVersionChange + Items.Strings = ( + '2' + '3') + end + object cbHsMaxStreams: TCheckBox + Left = 12 + Top = 47 + Width = 213 + Height = 17 + Caption = #1054#1075#1088#1072#1085#1080#1095#1080#1090#1100' '#1095#1080#1089#1083#1086' '#1089#1086#1077#1076#1080#1085#1077#1085#1080#1081 + Enabled = False + TabOrder = 1 + OnClick = cbHsMaxStreamsClick + end + object edHsName: TEdit + Left = 62 + Top = 18 + Width = 145 + Height = 21 + Enabled = False + MaxLength = 25 + PopupMenu = EditMenu + TabOrder = 0 + TextHint = #1048#1084#1103' '#1082#1072#1090#1072#1083#1086#1075#1072 + OnChange = edHsChange + end + object edHsNumIntroductionPoints: TEdit + Left = 362 + Top = 46 + Width = 42 + Height = 21 + HelpType = htKeyword + HelpContext = 1 + Enabled = False + MaxLength = 2 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 5 + Text = '3' + OnChange = edHsChange + end + object udHsNumIntroductionPoints: TUpDown + Tag = 1 + Left = 404 + Top = 46 + Width = 13 + Height = 21 + Associate = edHsNumIntroductionPoints + Enabled = False + Min = 3 + Max = 20 + Position = 3 + TabOrder = 6 + Thousands = False + OnMouseDown = udHsMouseDown + end + object edHsMaxStreams: TEdit + Left = 153 + Top = 73 + Width = 42 + Height = 21 + HelpType = htKeyword + HelpContext = 2 + Enabled = False + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 2 + Text = '32' + OnChange = edHsChange + end + object udHsMaxStreams: TUpDown + Tag = 2 + Left = 195 + Top = 73 + Width = 13 + Height = 21 + Associate = edHsMaxStreams + Enabled = False + Min = 1 + Max = 65535 + Position = 32 + TabOrder = 3 + Thousands = False + OnMouseDown = udHsMouseDown + end + object udRendPostPeriod: TUpDown + Left = 404 + Top = 74 + Width = 13 + Height = 21 + Associate = edRendPostPeriod + Enabled = False + Min = 10 + Max = 5040 + Increment = 10 + Position = 60 + TabOrder = 8 + Thousands = False + OnChanging = SpinChanging + end + object edRendPostPeriod: TEdit + Left = 362 + Top = 74 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 4 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 7 + Text = '60' + OnChange = EditChange + end + object edHsRealPort: TEdit + Left = 632 + Top = 18 + Width = 42 + Height = 21 + HelpType = htKeyword + HelpContext = 3 + Enabled = False + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 10 + Text = '80' + OnChange = edHsChange + end + object udHsRealPort: TUpDown + Tag = 3 + Left = 674 + Top = 18 + Width = 13 + Height = 21 + Associate = edHsRealPort + Enabled = False + Min = 1 + Max = 65535 + Position = 80 + TabOrder = 11 + Thousands = False + OnMouseDown = udHsMouseDown + end + object edHsVirtualPort: TEdit + Left = 632 + Top = 46 + Width = 42 + Height = 21 + HelpType = htKeyword + HelpContext = 4 + Enabled = False + MaxLength = 5 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 12 + Text = '80' + OnChange = edHsChange + end + object udHsVirtualPort: TUpDown + Tag = 4 + Left = 674 + Top = 46 + Width = 13 + Height = 21 + Associate = edHsVirtualPort + Enabled = False + Min = 1 + Max = 65535 + Position = 80 + TabOrder = 13 + Thousands = False + OnMouseDown = udHsMouseDown + end + object cbxHsState: TComboBox + Left = 598 + Top = 74 + Width = 89 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + Enabled = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 14 + Text = #1042#1082#1083#1102#1095#1077#1085#1086 + OnChange = cbxHsStateChange + Items.Strings = ( + #1042#1082#1083#1102#1095#1077#1085#1086 + #1042#1099#1082#1083#1102#1095#1077#1085#1086) + end + end + end + object tsLists: TTabSheet + Caption = #1057#1087#1080#1089#1082#1080 + ImageIndex = 12 + object lbSeconds4: TLabel + Left = 199 + Top = 29 + Width = 21 + Height = 13 + Caption = #1089#1077#1082'.' + Enabled = False + Transparent = True + end + object lbTotalHosts: TLabel + Left = 313 + Top = 29 + Width = 41 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1089#1077#1075#1086': 0' + Enabled = False + Transparent = True + end + object lbTrackHostExitsExpire: TLabel + Left = 26 + Top = 29 + Width = 109 + Height = 13 + Alignment = taRightJustify + Caption = #1052#1077#1085#1103#1090#1100' '#1087#1086' '#1080#1089#1090#1077#1095#1077#1085#1080#1080 + Enabled = False + Transparent = True + end + object lbTotalNodesList: TLabel + Left = 666 + Top = 29 + Width = 41 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1089#1077#1075#1086': 0' + Transparent = True + end + object lbNodesListType: TLabel + Left = 363 + Top = 29 + Width = 36 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1087#1080#1089#1086#1082 + Transparent = True + end + object lbNodesListTypeCaption: TLabel + Left = 364 + Top = 7 + Width = 197 + Height = 13 + Caption = #1042#1099#1073#1077#1088#1080#1090#1077' '#1089#1087#1080#1089#1086#1082' '#1076#1083#1103' '#1088#1077#1076#1072#1082#1090#1080#1088#1086#1074#1072#1085#1080#1103 + Transparent = True + end + object lbVanguardLayerType: TLabel + AlignWithMargins = True + Left = 96 + Top = 373 + Width = 119 + Height = 13 + Alignment = taRightJustify + Caption = #1048#1079#1084#1077#1085#1103#1090#1100' '#1091#1079#1077#1083' '#1094#1077#1087#1086#1095#1082#1080 + Transparent = True + end + object meTrackHostExits: TMemo + Left = 10 + Top = 52 + Width = 344 + Height = 285 + Enabled = False + PopupMenu = EditMenu + ScrollBars = ssVertical + TabOrder = 3 + WordWrap = False + OnChange = meTrackHostExitsChange + OnExit = MemoExit + OnKeyPress = MemoKeyPress + end + object cbUseTrackHostExits: TCheckBox + Left = 10 + Top = 6 + Width = 310 + Height = 17 + Caption = #1057#1086#1093#1088#1072#1085#1103#1090#1100' '#1074#1099#1093#1086#1076#1085#1086#1081' '#1091#1079#1077#1083' '#1076#1083#1103' '#1091#1082#1072#1079#1072#1085#1085#1099#1093' '#1072#1076#1088#1077#1089#1086#1074 + TabOrder = 0 + OnClick = cbUseTrackHostExitsClick + end + object cbEnableNodesList: TCheckBox + Left = 540 + Top = 28 + Width = 75 + Height = 17 + Caption = #1042#1082#1083#1102#1095#1080#1090#1100 + TabOrder = 7 + OnClick = cbEnableNodesListClick + end + object meNodesList: TMemo + Left = 364 + Top = 51 + Width = 344 + Height = 340 + Enabled = False + PopupMenu = EditMenu + ScrollBars = ssVertical + TabOrder = 8 + WordWrap = False + OnChange = meNodesListChange + OnExit = meNodesListExit + OnKeyPress = MemoKeyPress + end + object edTrackHostExitsExpire: TEdit + Left = 139 + Top = 26 + Width = 42 + Height = 21 + Enabled = False + MaxLength = 7 + NumbersOnly = True + PopupMenu = EditMenu + TabOrder = 1 + Text = '1800' + OnChange = EditChange + end + object udTrackHostExitsExpire: TUpDown + Left = 181 + Top = 26 + Width = 13 + Height = 21 + Associate = edTrackHostExitsExpire + Enabled = False + Min = 10 + Max = 2592000 + Increment = 60 + Position = 1800 + TabOrder = 2 + Thousands = False + OnChanging = SpinChanging + end + object cbxNodesListType: TComboBox + Left = 403 + Top = 26 + Width = 130 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ItemIndex = 3 + ParentDoubleBuffered = False + TabOrder = 6 + Text = #1047#1072#1087#1088#1077#1097#1105#1085#1085#1099#1077' '#1091#1079#1083#1099 + OnChange = cbxNodesListTypeChange + OnKeyDown = cbxNodesListTypeKeyDown + Items.Strings = ( + #1042#1093#1086#1076#1085#1099#1077' '#1091#1079#1083#1099 + #1057#1088#1077#1076#1085#1080#1077' '#1091#1079#1083#1099 + #1042#1099#1093#1086#1076#1085#1099#1077' '#1091#1079#1083#1099 + #1047#1072#1087#1088#1077#1097#1105#1085#1085#1099#1077' '#1091#1079#1083#1099) + end + object cbUseHiddenServiceVanguards: TCheckBox + Left = 10 + Top = 347 + Width = 344 + Height = 17 + Caption = #1048#1089#1087#1086#1083#1100#1079#1086#1074#1072#1090#1100' '#1072#1074#1072#1085#1075#1072#1088#1076#1099' '#1076#1083#1103' '#1089#1082#1088#1099#1090#1099#1093' '#1089#1077#1088#1074#1080#1089#1086#1074 + Checked = True + State = cbChecked + TabOrder = 4 + OnClick = cbUseHiddenServiceVanguardsClick + end + object cbxVanguardLayerType: TComboBox + Left = 218 + Top = 370 + Width = 135 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 5 + Text = #1040#1074#1090#1086#1074#1099#1073#1086#1088 + OnChange = OptionsChange + Items.Strings = ( + #1040#1074#1090#1086#1074#1099#1073#1086#1088 + #1058#1086#1083#1100#1082#1086' '#1074#1090#1086#1088#1086#1081 + #1058#1086#1083#1100#1082#1086' '#1090#1088#1077#1090#1080#1081 + #1042#1090#1086#1088#1086#1081' '#1080' '#1090#1088#1077#1090#1080#1081) + end + end + object tsOther: TTabSheet + Caption = #1056#1072#1079#1085#1086#1077 + ImageIndex = 5 + object gbNetworkScanner: TGroupBox + Left = 10 + Top = 3 + Width = 323 + Height = 388 + Caption = #1057#1077#1090#1077#1074#1086#1081' '#1089#1082#1072#1085#1077#1088 + TabOrder = 0 + object lbFullScanInterval: TLabel + Left = 70 + Top = 298 + Width = 155 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1086#1083#1085#1086#1077' '#1089#1082#1072#1085#1080#1088#1086#1074#1072#1085#1080#1077' '#1082#1072#1078#1076#1099#1077 + Transparent = True + end + object lbHours1: TLabel + Left = 290 + Top = 298 + Width = 10 + Height = 13 + Caption = #1095'.' + Transparent = True + end + object lbNonResponsedScanInterval: TLabel + Left = 17 + Top = 322 + Width = 208 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1082#1072#1085#1080#1088#1086#1074#1072#1085#1080#1077' '#1091#1079#1083#1086#1074' '#1073#1077#1079' '#1086#1090#1074#1077#1090#1072' '#1082#1072#1078#1076#1099#1077 + Transparent = True + end + object lbHours2: TLabel + Left = 290 + Top = 322 + Width = 10 + Height = 13 + Caption = #1095'.' + Transparent = True + end + object lbPartialScansCounts: TLabel + Left = 33 + Top = 346 + Width = 192 + Height = 13 + Alignment = taRightJustify + Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1095#1072#1089#1090#1080#1095#1085#1099#1093' '#1089#1082#1072#1085#1080#1088#1086#1074#1072#1085#1080#1081 + Transparent = True + end + object lbScanMaxThread: TLabel + Left = 47 + Top = 191 + Width = 179 + Height = 13 + Alignment = taRightJustify + Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1087#1086#1090#1086#1082#1086#1074' '#1089#1082#1072#1085#1080#1088#1086#1074#1072#1085#1080#1103 + Transparent = True + end + object lbScanPortAttempts: TLabel + Left = 9 + Top = 95 + Width = 217 + Height = 13 + Alignment = taRightJustify + Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1087#1086#1087#1099#1090#1086#1082' '#1089#1086#1077#1076#1080#1085#1077#1085#1080#1103' '#1089' '#1087#1086#1088#1090#1086#1084 + Transparent = True + end + object lbScanPortionSize: TLabel + Left = 35 + Top = 239 + Width = 191 + Height = 13 + Alignment = taRightJustify + Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1089#1082#1072#1085#1080#1088#1086#1074#1072#1085#1080#1081' '#1085#1072' '#1087#1086#1088#1094#1080#1102 + Transparent = True + end + object lbScanPingAttempts: TLabel + Left = 43 + Top = 143 + Width = 183 + Height = 13 + Alignment = taRightJustify + Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1087#1086#1087#1099#1090#1086#1082' '#1080#1079#1084#1077#1088#1080#1090#1100' '#1087#1080#1085#1075 + Transparent = True + end + object lbScanPortTimeout: TLabel + Left = 69 + Top = 71 + Width = 157 + Height = 13 + Alignment = taRightJustify + Caption = #1058#1072#1081#1084#1072#1091#1090' '#1087#1086#1076#1082#1083#1102#1095#1077#1085#1080#1103' '#1082' '#1087#1086#1088#1090#1091 + Transparent = True + end + object lbMiliseconds2: TLabel + Left = 290 + Top = 69 + Width = 27 + Height = 13 + Caption = #1084#1089#1077#1082'.' + Transparent = True + end + object lbScanPingTimeout: TLabel + Left = 107 + Top = 119 + Width = 118 + Height = 13 + Alignment = taRightJustify + Caption = #1058#1072#1081#1084#1072#1091#1090' '#1087#1080#1085#1075'-'#1079#1072#1087#1088#1086#1089#1086#1074 + Transparent = True + end + object lbMiliseconds1: TLabel + Left = 289 + Top = 117 + Width = 27 + Height = 13 + Caption = #1084#1089#1077#1082'.' + Transparent = True + end + object lbDelayBetweenAttempts: TLabel + Left = 80 + Top = 167 + Width = 146 + Height = 13 + Alignment = taRightJustify + Caption = #1047#1072#1076#1077#1088#1078#1082#1072' '#1084#1077#1078#1076#1091' '#1087#1086#1087#1099#1090#1082#1072#1084#1080 + Transparent = True + end + object lbMiliseconds3: TLabel + Left = 290 + Top = 165 + Width = 27 + Height = 13 + Caption = #1084#1089#1077#1082'.' + Transparent = True + end + object lbScanPortionTimeout: TLabel + Left = 88 + Top = 215 + Width = 138 + Height = 13 + Alignment = taRightJustify + Caption = #1047#1072#1076#1077#1088#1078#1082#1072' '#1084#1077#1078#1076#1091' '#1087#1086#1088#1094#1080#1103#1084#1080 + Transparent = True + end + object lbMiliseconds4: TLabel + Left = 290 + Top = 213 + Width = 27 + Height = 13 + Caption = #1084#1089#1077#1082'.' + Transparent = True + end + object cbAutoScanNewNodes: TCheckBox + Left = 13 + Top = 272 + Width = 290 + Height = 17 + Caption = #1040#1074#1090#1086#1084#1072#1090#1080#1095#1077#1089#1082#1080' '#1086#1087#1088#1077#1076#1077#1083#1103#1090#1100' '#1087#1080#1085#1075' '#1080' '#1078#1080#1074#1099#1077' '#1091#1079#1083#1099 + Checked = True + State = cbChecked + TabOrder = 18 + OnClick = cbAutoScanNewNodesClick + end + object cbEnableDetectAliveNodes: TCheckBox + Left = 14 + Top = 21 + Width = 290 + Height = 17 + Caption = #1042#1082#1083#1102#1095#1080#1090#1100' '#1086#1087#1088#1077#1076#1077#1083#1077#1085#1080#1077' '#1078#1080#1074#1099#1093' '#1091#1079#1083#1086#1074 + Checked = True + State = cbChecked + TabOrder = 0 + OnClick = cbEnableDetectAliveNodesClick + end + object cbEnablePingMeasure: TCheckBox + Left = 14 + Top = 44 + Width = 290 + Height = 17 + Caption = #1042#1082#1083#1102#1095#1080#1090#1100' '#1080#1079#1084#1077#1088#1077#1085#1080#1077' '#1087#1080#1085#1075#1072 + Checked = True + State = cbChecked + TabOrder = 1 + OnClick = cbEnablePingMeasureClick + end + object edFullScanInterval: TEdit + Left = 228 + Top = 295 + Width = 42 + Height = 21 + MaxLength = 4 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 19 + Text = '72' + OnChange = EditChange + end + object udFullScanInterval: TUpDown + Left = 270 + Top = 295 + Width = 16 + Height = 21 + Associate = edFullScanInterval + Min = 3 + Max = 720 + Position = 72 + TabOrder = 20 + Thousands = False + OnChanging = SpinChanging + end + object edNonResponsedScanInterval: TEdit + Left = 228 + Top = 319 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 21 + Text = '12' + OnChange = EditChange + end + object udNonResponsedScanInterval: TUpDown + Left = 270 + Top = 319 + Width = 16 + Height = 21 + Associate = edNonResponsedScanInterval + Min = 1 + Max = 360 + Position = 12 + TabOrder = 22 + Thousands = False + OnChanging = SpinChanging + end + object edPartialScansCounts: TEdit + Left = 228 + Top = 343 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 23 + Text = '6' + OnChange = EditChange + end + object udPartialScansCounts: TUpDown + Left = 270 + Top = 343 + Width = 16 + Height = 21 + Associate = edPartialScansCounts + Min = 1 + Max = 24 + Position = 6 + TabOrder = 24 + Thousands = False + OnChanging = SpinChanging + end + object edScanMaxThread: TEdit + Left = 229 + Top = 188 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 12 + Text = '512' + OnChange = EditChange + end + object udScanMaxThread: TUpDown + Left = 271 + Top = 188 + Width = 16 + Height = 21 + Associate = edScanMaxThread + Min = 32 + Max = 65535 + Increment = 32 + Position = 512 + TabOrder = 13 + Thousands = False + OnChanging = SpinChanging + end + object edScanPortAttempts: TEdit + Left = 229 + Top = 92 + Width = 42 + Height = 21 + MaxLength = 2 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 4 + Text = '3' + OnChange = EditChange + end + object udScanPortAttempts: TUpDown + Left = 271 + Top = 92 + Width = 16 + Height = 21 + Associate = edScanPortAttempts + Min = 1 + Max = 32 + Position = 3 + TabOrder = 5 + Thousands = False + OnChanging = SpinChanging + end + object edScanPortionSize: TEdit + Left = 229 + Top = 236 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 16 + Text = '64' + OnChange = EditChange + end + object udScanPortionSize: TUpDown + Left = 271 + Top = 236 + Width = 16 + Height = 21 + Associate = edScanPortionSize + Min = 8 + Max = 65535 + Increment = 8 + Position = 64 + TabOrder = 17 + Thousands = False + OnChanging = SpinChanging + end + object edScanPingAttempts: TEdit + Left = 229 + Top = 140 + Width = 42 + Height = 21 + MaxLength = 2 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 8 + Text = '4' + OnChange = EditChange + end + object udScanPingAttempts: TUpDown + Left = 271 + Top = 140 + Width = 16 + Height = 21 + Associate = edScanPingAttempts + Min = 1 + Max = 32 + Position = 4 + TabOrder = 9 + Thousands = False + OnChanging = SpinChanging + end + object edScanPortTimeout: TEdit + Left = 229 + Top = 68 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 2 + Text = '3000' + OnChange = EditChange + end + object udScanPortTimeout: TUpDown + Left = 271 + Top = 68 + Width = 16 + Height = 21 + Associate = edScanPortTimeout + Min = 1000 + Max = 60000 + Increment = 1000 + Position = 3000 + TabOrder = 3 + Thousands = False + OnChanging = SpinChanging + end + object edScanPingTimeout: TEdit + Left = 229 + Top = 116 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 6 + Text = '2000' + OnChange = EditChange + end + object udScanPingTimeout: TUpDown + Left = 271 + Top = 116 + Width = 16 + Height = 21 + Associate = edScanPingTimeout + Min = 1000 + Max = 60000 + Increment = 1000 + Position = 2000 + TabOrder = 7 + Thousands = False + OnChanging = SpinChanging + end + object edDelayBetweenAttempts: TEdit + Left = 229 + Top = 164 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 10 + Text = '1000' + OnChange = EditChange + end + object udDelayBetweenAttempts: TUpDown + Left = 271 + Top = 164 + Width = 16 + Height = 21 + Associate = edDelayBetweenAttempts + Min = 250 + Max = 60000 + Increment = 250 + Position = 1000 + TabOrder = 11 + Thousands = False + OnChanging = SpinChanging + end + object edScanPortionTimeout: TEdit + Left = 229 + Top = 212 + Width = 42 + Height = 21 + MaxLength = 4 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 14 + Text = '10' + OnChange = EditChange + end + object udScanPortionTimeout: TUpDown + Left = 271 + Top = 212 + Width = 16 + Height = 21 + Associate = edScanPortionTimeout + Min = 1 + Max = 1000 + Position = 10 + TabOrder = 15 + Thousands = False + OnChanging = SpinChanging + end + end + object gbTransports: TGroupBox + Left = 343 + Top = 3 + Width = 365 + Height = 235 + Caption = #1055#1086#1076#1082#1083#1102#1095#1072#1077#1084#1099#1077' '#1090#1088#1072#1085#1089#1087#1086#1088#1090#1099 + TabOrder = 1 + object lbTransports: TLabel + Left = 16 + Top = 132 + Width = 61 + Height = 13 + Alignment = taRightJustify + Caption = #1058#1088#1072#1085#1089#1087#1086#1088#1090#1099 + Enabled = False + Transparent = True + end + object lbTransportsHandler: TLabel + AlignWithMargins = True + Left = 15 + Top = 156 + Width = 62 + Height = 13 + Alignment = taRightJustify + Caption = #1054#1073#1088#1072#1073#1086#1090#1095#1080#1082 + Enabled = False + Transparent = True + end + object lbHandlerParams: TLabel + Left = 20 + Top = 179 + Width = 57 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1072#1088#1072#1084#1077#1090#1088#1099 + Enabled = False + Transparent = True + end + object lbTransportType: TLabel + Left = 236 + Top = 156 + Width = 18 + Height = 13 + Alignment = taRightJustify + Caption = #1058#1080#1087 + Enabled = False + Transparent = True + end + object sgTransports: TStringGrid + Tag = 6 + Left = 12 + Top = 18 + Width = 341 + Height = 108 + ColCount = 4 + DefaultRowHeight = 16 + FixedCols = 0 + RowCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goDrawFocusSelected, goRowSelect, goThumbTracking] + ParentShowHint = False + PopupMenu = mnTransports + ScrollBars = ssVertical + ShowHint = True + TabOrder = 0 + OnDrawCell = sgTransportsDrawCell + OnKeyDown = sgTransportsKeyDown + OnMouseMove = sgTransportsMouseMove + OnSelectCell = sgTransportsSelectCell + end + object edTransports: TEdit + Tag = 1 + Left = 80 + Top = 129 + Width = 273 + Height = 21 + Enabled = False + PopupMenu = EditMenu + TabOrder = 1 + TextHint = #1057#1087#1080#1089#1086#1082' '#1087#1086#1076#1076#1077#1088#1078#1080#1074#1072#1077#1084#1099#1093' '#1090#1088#1072#1085#1089#1087#1086#1088#1090#1086#1074 + OnChange = edTransportsChange + end + object edTransportsHandler: TEdit + Tag = 2 + Left = 80 + Top = 153 + Width = 140 + Height = 21 + Enabled = False + PopupMenu = EditMenu + TabOrder = 2 + TextHint = #1042#1074#1077#1076#1080#1090#1077' '#1080#1084#1103' '#1092#1072#1081#1083#1072 + OnChange = edTransportsChange + end + object meHandlerParams: TMemo + Tag = 3 + Left = 80 + Top = 177 + Width = 273 + Height = 46 + Enabled = False + PopupMenu = EditMenu + ScrollBars = ssVertical + TabOrder = 4 + WantReturns = False + OnChange = edTransportsChange + OnExit = MemoExit + OnKeyPress = MemoKeyPress + end + object cbxTransportType: TComboBox + Left = 257 + Top = 153 + Width = 96 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + Enabled = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 3 + Text = #1050#1083#1080#1077#1085#1090 + OnChange = cbxTransportTypeChange + Items.Strings = ( + #1050#1083#1080#1077#1085#1090 + #1057#1077#1088#1074#1077#1088 + #1057#1086#1074#1084#1077#1097#1105#1085#1085#1099#1081) + end + end + object gbAutoSelectRouters: TGroupBox + Left = 343 + Top = 242 + Width = 365 + Height = 149 + Caption = #1040#1074#1090#1086#1087#1086#1076#1073#1086#1088' '#1088#1086#1091#1090#1077#1088#1086#1074 + TabOrder = 2 + object lbAutoSelEntry: TLabel + Left = 17 + Top = 22 + Width = 45 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1093#1086#1076#1085#1099#1077 + Transparent = True + end + object lbAutoSelMiddle: TLabel + Left = 18 + Top = 45 + Width = 44 + Height = 13 + Alignment = taRightJustify + Caption = #1057#1088#1077#1076#1085#1080#1077 + Transparent = True + end + object lbAutoSelExit: TLabel + Left = 9 + Top = 70 + Width = 53 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1099#1093#1086#1076#1085#1099#1077 + Transparent = True + end + object lbAutoSelMaxPing: TLabel + Left = 38 + Top = 118 + Width = 24 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1080#1085#1075 + Transparent = True + end + object lbAutoSelMinWeight: TLabel + Left = 45 + Top = 94 + Width = 17 + Height = 13 + Alignment = taRightJustify + Caption = #1042#1077#1089 + Transparent = True + end + object lbSpeed5: TLabel + Left = 126 + Top = 94 + Width = 23 + Height = 13 + Caption = #1052#1041'/c' + Transparent = True + end + object lbMiliseconds5: TLabel + Left = 126 + Top = 118 + Width = 27 + Height = 13 + Caption = #1084#1089#1077#1082'.' + Transparent = True + end + object lbCount1: TLabel + Left = 126 + Top = 22 + Width = 18 + Height = 13 + Caption = #1096#1090'.' + Transparent = True + end + object lbCount2: TLabel + Left = 126 + Top = 46 + Width = 18 + Height = 13 + Caption = #1096#1090'.' + Transparent = True + end + object lbCount3: TLabel + Left = 126 + Top = 70 + Width = 18 + Height = 13 + Caption = #1096#1090'.' + Transparent = True + end + object lbAutoSelPriority: TLabel + Left = 161 + Top = 22 + Width = 55 + Height = 13 + Alignment = taRightJustify + Caption = #1055#1088#1080#1086#1088#1080#1090#1077#1090 + Transparent = True + end + object edAutoSelExitCount: TEdit + Left = 65 + Top = 67 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 4 + Text = '40' + OnChange = EditChange + end + object udAutoSelExitCount: TUpDown + Left = 107 + Top = 67 + Width = 16 + Height = 21 + Associate = edAutoSelExitCount + Min = 1 + Max = 65535 + Increment = 10 + Position = 40 + TabOrder = 5 + Thousands = False + OnChanging = SpinChanging + end + object edAutoSelMiddleCount: TEdit + Left = 65 + Top = 43 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 2 + Text = '60' + OnChange = EditChange + end + object udAutoSelMiddleCount: TUpDown + Left = 107 + Top = 43 + Width = 16 + Height = 21 + Associate = edAutoSelMiddleCount + Min = 1 + Max = 65535 + Increment = 10 + Position = 60 + TabOrder = 3 + Thousands = False + OnChanging = SpinChanging + end + object edAutoSelEntryCount: TEdit + Left = 65 + Top = 19 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 0 + Text = '20' + OnChange = EditChange + end + object udAutoSelEntryCount: TUpDown + Left = 107 + Top = 19 + Width = 16 + Height = 21 + Associate = edAutoSelEntryCount + Min = 1 + Max = 65535 + Increment = 10 + Position = 20 + TabOrder = 1 + Thousands = False + OnChanging = SpinChanging + end + object cbAutoSelNodesWithPingOnly: TCheckBox + Left = 161 + Top = 120 + Width = 195 + Height = 17 + Caption = #1058#1086#1083#1100#1082#1086' '#1086#1090#1074#1077#1095#1072#1102#1097#1080#1077' '#1085#1072' '#1087#1080#1085#1075 + Checked = True + State = cbChecked + TabOrder = 15 + OnClick = OptionsChange + end + object cbAutoSelUniqueNodes: TCheckBox + Left = 161 + Top = 82 + Width = 195 + Height = 17 + Caption = #1058#1086#1083#1100#1082#1086' '#1091#1085#1080#1082#1072#1083#1100#1085#1099#1077 + Checked = True + State = cbChecked + TabOrder = 13 + OnClick = OptionsChange + end + object cbAutoSelStableOnly: TCheckBox + Left = 161 + Top = 101 + Width = 195 + Height = 17 + Caption = #1058#1086#1083#1100#1082#1086' '#1089#1090#1072#1073#1080#1083#1100#1085#1099#1077 + TabOrder = 14 + OnClick = OptionsChange + end + object edAutoSelMaxPing: TEdit + Left = 65 + Top = 115 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 8 + Text = '200' + OnChange = EditChange + end + object udAutoSelMaxPing: TUpDown + Left = 107 + Top = 115 + Width = 16 + Height = 21 + Associate = edAutoSelMaxPing + Min = 1 + Max = 60000 + Increment = 50 + Position = 200 + TabOrder = 9 + Thousands = False + OnChanging = SpinChanging + end + object edAutoSelMinWeight: TEdit + Left = 65 + Top = 91 + Width = 42 + Height = 21 + MaxLength = 5 + NumbersOnly = True + ParentShowHint = False + PopupMenu = EditMenu + ShowHint = True + TabOrder = 6 + Text = '10' + OnChange = EditChange + end + object udAutoSelMinWeight: TUpDown + Left = 107 + Top = 91 + Width = 16 + Height = 21 + Associate = edAutoSelMinWeight + Min = 1 + Max = 10240 + Increment = 5 + Position = 10 + TabOrder = 7 + Thousands = False + OnChanging = SpinChanging + end + object cbAutoSelFilterCountriesOnly: TCheckBox + Left = 161 + Top = 63 + Width = 195 + Height = 17 + Caption = #1058#1086#1083#1100#1082#1086' '#1089#1090#1088#1072#1085#1099' '#1080#1079' '#1092#1080#1083#1100#1090#1088#1072 + Checked = True + State = cbChecked + TabOrder = 12 + OnClick = OptionsChange + end + object cbxAutoSelPriority: TComboBox + Left = 219 + Top = 19 + Width = 134 + Height = 21 + AutoDropDown = True + Style = csDropDownList + DoubleBuffered = False + ItemIndex = 0 + ParentDoubleBuffered = False + TabOrder = 10 + Text = #1057#1073#1072#1083#1072#1085#1089#1080#1088#1086#1074#1072#1085#1085#1099#1081 + OnChange = cbxAutoSelPriorityChange + Items.Strings = ( + #1057#1073#1072#1083#1072#1085#1089#1080#1088#1086#1074#1072#1085#1085#1099#1081 + #1042#1077#1089' '#1074' '#1082#1086#1085#1089#1077#1085#1089#1091#1089#1077 + #1055#1080#1085#1075' '#1076#1086' '#1091#1079#1083#1072 + #1057#1083#1091#1095#1072#1081#1085#1099#1081) + end + object cbAutoSelMiddleNodesWithoutDir: TCheckBox + Left = 161 + Top = 44 + Width = 195 + Height = 17 + Caption = #1057#1088#1077#1076#1085#1080#1077' '#1091#1079#1083#1099' '#1073#1077#1079' '#1082#1072#1090#1072#1083#1086#1075#1086#1074 + Checked = True + State = cbChecked + TabOrder = 11 + OnClick = OptionsChange + end + end + end + end + object btnApplyOptions: TButton + Left = 572 + Top = 503 + Width = 72 + Height = 19 + Caption = #1055#1088#1080#1084#1077#1085#1080#1090#1100 + DoubleBuffered = True + ParentDoubleBuffered = False + TabOrder = 6 + OnClick = btnApplyOptionsClick + end + object btnCancelOptions: TButton + Left = 648 + Top = 503 + Width = 72 + Height = 19 + Caption = #1054#1090#1084#1077#1085#1072 + DoubleBuffered = True + ParentDoubleBuffered = False + TabOrder = 7 + OnClick = btnCancelOptionsClick + end + object tiTray: TTrayIcon + Hint = #1055#1072#1085#1077#1083#1100' '#1091#1087#1088#1072#1074#1083#1077#1085#1080#1103' Tor' + Icons = lsTray + PopupMenu = mnTray + Visible = True + OnClick = tiTrayClick + Left = 689 + Top = 320 + end + object mnTray: TPopupMenu + AutoHotkeys = maManual + Images = lsMenus + Left = 273 + Top = 1 + object miChangeCircuit: TMenuItem + Caption = #1057#1084#1077#1085#1080#1090#1100' '#1094#1077#1087#1086#1095#1082#1091 + Enabled = False + ImageIndex = 7 + OnClick = miChangeCircuitClick + end + object miDelimiter5: TMenuItem + Caption = '-' + end + object miSwitchTor: TMenuItem + Caption = #1057#1090#1072#1088#1090 + ImageIndex = 0 + OnClick = miSwitchTorClick + end + object miDelimiter1: TMenuItem + Caption = '-' + end + object miShowStatus: TMenuItem + Caption = #1057#1090#1072#1090#1091#1089 + ImageIndex = 36 + OnClick = miShowStatusClick + end + object miShowCircuits: TMenuItem + Caption = #1062#1077#1087#1086#1095#1082#1080 + ImageIndex = 20 + OnClick = miShowCircuitsClick + end + object miShowRouters: TMenuItem + Caption = #1056#1086#1091#1090#1077#1088#1099 + ImageIndex = 37 + OnClick = miShowRoutersClick + end + object miDelimiter15: TMenuItem + Caption = '-' + end + object miShowOptions: TMenuItem + Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080 + ImageIndex = 4 + OnClick = miShowOptionsClick + end + object miShowLog: TMenuItem + Caption = #1046#1091#1088#1085#1072#1083 + ImageIndex = 5 + OnClick = miShowLogClick + end + object miDelimiter2: TMenuItem + Caption = '-' + end + object miAbout: TMenuItem + Caption = #1054' '#1087#1088#1086#1075#1088#1072#1084#1084#1077 + ImageIndex = 45 + OnClick = miAboutClick + end + object miExit: TMenuItem + Caption = #1042#1099#1093#1086#1076 + ImageIndex = 6 + OnClick = miExitClick + end + end + object tmUpdateIp: TTimer + Enabled = False + OnTimer = tmUpdateIpTimer + Left = 640 + Top = 97 + end + object mnLog: TPopupMenu + AutoHotkeys = maManual + Images = lsMenus + OnPopup = mnLogPopup + Left = 338 + Top = 1 + object miLogOptions: TMenuItem + Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080 + ImageIndex = 11 + object miWriteLogFile: TMenuItem + AutoCheck = True + Caption = #1047#1072#1087#1080#1089#1099#1074#1072#1090#1100' '#1074' '#1092#1072#1081#1083 + Checked = True + OnClick = miWriteLogFileClick + end + object miLogSeparate: TMenuItem + Caption = #1056#1072#1079#1076#1077#1083#1077#1085#1080#1077' '#1092#1072#1081#1083#1072' '#1078#1091#1088#1085#1072#1083#1072 + object miLogSeparateNone: TMenuItem + Caption = #1053#1077' '#1088#1072#1079#1076#1077#1083#1103#1090#1100 + RadioItem = True + OnClick = SelectLogSeparater + end + object miLogSeparateMonth: TMenuItem + Tag = 1 + Caption = #1055#1086' '#1084#1077#1089#1103#1094#1072#1084 + Checked = True + RadioItem = True + OnClick = SelectLogSeparater + end + object miLogSeparateDay: TMenuItem + Tag = 2 + Caption = #1055#1086' '#1076#1085#1103#1084 + RadioItem = True + OnClick = SelectLogSeparater + end + end + object miDelimiter59: TMenuItem + Caption = '-' + end + object miAutoClear: TMenuItem + AutoCheck = True + Caption = #1054#1095#1080#1097#1072#1090#1100' '#1087#1088#1080' '#1082#1072#1078#1076#1086#1084' '#1079#1072#1087#1091#1089#1082#1077 + Checked = True + OnClick = miAutoClearClick + end + object miAutoScroll: TMenuItem + AutoCheck = True + Caption = #1040#1074#1090#1086#1084#1072#1090#1080#1095#1077#1089#1082#1072#1103' '#1087#1088#1086#1082#1088#1091#1090#1082#1072 + Checked = True + OnClick = miAutoScrollClick + end + object miScrollBars: TMenuItem + Caption = #1055#1086#1083#1086#1089#1072' '#1087#1088#1086#1082#1088#1091#1090#1082#1080 + object miSbVertical: TMenuItem + Caption = #1042#1077#1088#1090#1080#1082#1072#1083#1100#1085#1072#1103 + Checked = True + RadioItem = True + OnClick = SelectLogScrollbar + end + object miSbHorizontal: TMenuItem + Tag = 1 + Caption = #1043#1086#1088#1080#1079#1086#1085#1090#1072#1083#1100#1085#1072#1103 + RadioItem = True + OnClick = SelectLogScrollbar + end + object miSbBoth: TMenuItem + Tag = 2 + Caption = #1042#1089#1077 + RadioItem = True + OnClick = SelectLogScrollbar + end + object miSbNone: TMenuItem + Tag = 3 + Caption = #1053#1077#1090 + RadioItem = True + OnClick = SelectLogScrollbar + end + end + object miWordWrap: TMenuItem + AutoCheck = True + Caption = #1055#1077#1088#1077#1085#1086#1089' '#1089#1090#1088#1086#1082 + OnClick = miWordWrapClick + end + object miSafeLogging: TMenuItem + AutoCheck = True + Caption = #1057#1082#1088#1099#1074#1072#1090#1100' '#1089#1077#1090#1077#1074#1099#1077' '#1072#1076#1088#1077#1089#1072 + Checked = True + OnClick = miSafeLoggingClick + end + object miLogLevel: TMenuItem + Caption = #1059#1088#1086#1074#1077#1085#1100' '#1078#1091#1088#1085#1072#1083#1080#1088#1086#1074#1072#1085#1080#1103 + object miDebug: TMenuItem + Caption = #1054#1090#1083#1072#1076#1082#1072 + RadioItem = True + OnClick = SetLogLevel + end + object miInfo: TMenuItem + Caption = #1048#1085#1092#1086#1088#1084#1072#1094#1080#1103 + RadioItem = True + OnClick = SetLogLevel + end + object miNotice: TMenuItem + Caption = #1059#1074#1077#1076#1086#1084#1083#1077#1085#1080#1103 + Checked = True + RadioItem = True + OnClick = SetLogLevel + end + object miWarn: TMenuItem + Caption = #1055#1088#1077#1076#1091#1087#1088#1077#1078#1076#1077#1085#1080#1103 + RadioItem = True + OnClick = SetLogLevel + end + object miErr: TMenuItem + Caption = #1054#1096#1080#1073#1082#1080 + RadioItem = True + OnClick = SetLogLevel + end + end + object miDelimiter6: TMenuItem + Caption = '-' + end + object miOpenFileLog: TMenuItem + Caption = #1054#1090#1082#1088#1099#1090#1100' '#1092#1072#1081#1083' '#1078#1091#1088#1085#1072#1083#1072 + ImageIndex = 19 + OnClick = miOpenFileLogClick + end + end + object miDelimiter3: TMenuItem + Caption = '-' + end + object miLogCopy: TMenuItem + Tag = 2 + Caption = #1050#1086#1087#1080#1088#1086#1074#1072#1090#1100 + ImageIndex = 12 + ShortCut = 16451 + OnClick = EditMenuClick + end + object miLogSelectAll: TMenuItem + Tag = 4 + Caption = #1042#1099#1076#1077#1083#1080#1090#1100' '#1074#1089#1105 + ImageIndex = 16 + ShortCut = 16449 + OnClick = EditMenuClick + end + object miLogFind: TMenuItem + Tag = 7 + Caption = #1053#1072#1081#1090#1080'...' + ImageIndex = 55 + ShortCut = 16454 + OnClick = EditMenuClick + end + object miDelimiter4: TMenuItem + Caption = '-' + end + object miLogClear: TMenuItem + Tag = 5 + Caption = #1054#1095#1080#1089#1090#1080#1090#1100 + ImageIndex = 13 + OnClick = EditMenuClick + end + end + object lsFlags: TImageList + ColorDepth = cd24Bit + Height = 13 + Width = 20 + Left = 690 + Top = 98 + end + object lsButtons: TImageList + ColorDepth = cd32Bit + Height = 20 + Width = 20 + Left = 689 + Top = 229 + end + object lsMenus: TImageList + ColorDepth = cd32Bit + Left = 690 + Top = 186 + end + object mnChangeCircuit: TPopupMenu + AutoHotkeys = maManual + Images = lsMenus + OnPopup = mnChangeCircuitPopup + Left = 435 + Top = 1 + object miCacheOperations: TMenuItem + Caption = #1054#1087#1077#1088#1072#1094#1080#1080' '#1089' '#1082#1101#1096#1077#1084 + object miUpdateIpToCountryCache: TMenuItem + Caption = #1054#1073#1085#1086#1074#1080#1090#1100' '#1089#1090#1088#1072#1085#1099' '#1074' '#1089#1077#1090#1077#1074#1086#1084' '#1082#1101#1096#1077 + OnClick = miUpdateIpToCountryCacheClick + end + object miDelimiter46: TMenuItem + Caption = '-' + end + object miClearDNSCache: TMenuItem + Caption = #1054#1095#1080#1089#1090#1080#1090#1100' DNS-'#1082#1101#1096 + OnClick = miClearDNSCacheClick + end + object miClearServerCache: TMenuItem + Caption = #1054#1095#1080#1089#1090#1080#1090#1100' '#1089#1077#1088#1074#1077#1088#1085#1099#1081' '#1082#1101#1096 + OnClick = miClearServerCacheClick + end + object miDelimiter51: TMenuItem + Caption = '-' + end + object miClearBridgeCacheUnnecessary: TMenuItem + Caption = #1054#1095#1080#1089#1090#1080#1090#1100' '#1082#1101#1096' '#1086#1090' '#1085#1077#1085#1091#1078#1085#1099#1093' '#1084#1086#1089#1090#1086#1074 + OnClick = ClearBridgesCache + end + object miClearBridgesCacheAll: TMenuItem + Tag = 1 + Caption = #1054#1095#1080#1089#1090#1080#1090#1100' '#1082#1101#1096' '#1074#1089#1077#1093' '#1084#1086#1089#1090#1086#1074 + OnClick = ClearBridgesCache + end + object miClearPingCache: TMenuItem + Tag = 1 + Caption = #1054#1095#1080#1089#1090#1080#1090#1100' '#1082#1101#1096' '#1087#1080#1085#1075'-'#1079#1072#1087#1088#1086#1089#1086#1074 + OnClick = ClearScannerCacheClick + end + object miClearAliveCache: TMenuItem + Tag = 2 + Caption = #1054#1095#1080#1089#1090#1080#1090#1100' '#1082#1101#1096' '#1078#1080#1074#1099#1093' '#1091#1079#1083#1086#1074 + OnClick = ClearScannerCacheClick + end + object miClearUnusedNetworkCache: TMenuItem + Caption = #1054#1095#1080#1089#1090#1080#1090#1100' '#1085#1077#1080#1089#1087#1086#1083#1100#1079#1091#1077#1084#1099#1081' '#1089#1077#1090#1077#1074#1086#1081' '#1082#1101#1096 + OnClick = miClearUnusedNetworkCacheClick + end + object miDelimiter60: TMenuItem + Caption = '-' + end + object miResetScannerSchedule: TMenuItem + Caption = #1057#1073#1088#1086#1089#1080#1090#1100' '#1088#1072#1089#1087#1080#1089#1072#1085#1080#1077' '#1089#1082#1072#1085#1080#1088#1086#1074#1072#1085#1080#1103' '#1091#1079#1083#1086#1074 + OnClick = miResetScannerScheduleClick + end + object miResetTotalsCounter: TMenuItem + Caption = #1057#1073#1088#1086#1089#1080#1090#1100' '#1089#1095#1105#1090#1095#1080#1082' '#1090#1088#1072#1092#1080#1082#1072 + OnClick = miResetTotalsCounterClick + end + end + object miStartScan: TMenuItem + Caption = #1047#1072#1087#1091#1089#1090#1080#1090#1100' '#1089#1082#1072#1085#1080#1088#1086#1074#1072#1085#1080#1077 + object miScanNewNodes: TMenuItem + Tag = 1 + Caption = #1053#1086#1074#1099#1077' '#1091#1079#1083#1099 + OnClick = StartScannerManual + end + object miScanNonResponsed: TMenuItem + Tag = 2 + Caption = #1053#1077' '#1086#1090#1074#1077#1095#1072#1102#1097#1080#1077' '#1091#1079#1083#1099 + OnClick = StartScannerManual + end + object miScanCachedBridges: TMenuItem + Tag = 3 + Caption = #1050#1101#1096#1080#1088#1086#1074#1072#1085#1085#1099#1077' '#1084#1086#1089#1090#1099 + OnClick = StartScannerManual + end + object miScanAll: TMenuItem + Tag = 4 + Caption = #1042#1089#1077' '#1091#1079#1083#1099 + OnClick = StartScannerManual + end + object miDelimiter47: TMenuItem + Caption = '-' + end + object miManualPingMeasure: TMenuItem + AutoCheck = True + Caption = #1048#1079#1084#1077#1088#1103#1090#1100' '#1087#1080#1085#1075 + Checked = True + OnClick = miManualPingMeasureClick + end + object miManualDetectAliveNodes: TMenuItem + AutoCheck = True + Caption = #1054#1087#1088#1077#1076#1077#1083#1103#1090#1100' '#1078#1080#1074#1099#1077' '#1091#1079#1083#1099 + Checked = True + OnClick = miManualDetectAliveNodesClick + end + object miDelimiter61: TMenuItem + Caption = '-' + end + object miStopScan: TMenuItem + Caption = #1054#1089#1090#1072#1085#1086#1074#1080#1090#1100' '#1089#1082#1072#1085#1080#1088#1086#1074#1072#1085#1080#1077 + OnClick = miStopScanClick + end + end + object miResetGuards: TMenuItem + Caption = #1057#1073#1088#1086#1089#1080#1090#1100' '#1089#1090#1086#1088#1086#1078#1077#1074#1099#1077' '#1091#1079#1083#1099 + object miResetGuardsAll: TMenuItem + Tag = 4 + Caption = #1042#1089#1077' '#1089#1090#1086#1088#1086#1078#1077#1074#1099#1077' '#1091#1079#1083#1099 + OnClick = SetResetGuards + end + object miDelimiter57: TMenuItem + Caption = '-' + end + object miResetGuardsBridges: TMenuItem + Tag = 1 + Caption = #1052#1086#1089#1090#1086#1074#1099#1077' '#1091#1079#1083#1099 + OnClick = SetResetGuards + end + object miResetGuardsRestricted: TMenuItem + Tag = 2 + Caption = #1042#1099#1073#1088#1072#1085#1085#1099#1077' '#1074#1093#1086#1076#1085#1099#1077' '#1091#1079#1083#1099 + OnClick = SetResetGuards + end + object miResetGuardsDefault: TMenuItem + Tag = 3 + Caption = #1042#1093#1086#1076#1085#1099#1077' '#1091#1079#1083#1099' '#1087#1086' '#1091#1084#1086#1083#1095#1072#1085#1080#1102 + OnClick = SetResetGuards + end + end + end + object mnFilter: TPopupMenu + AutoHotkeys = maManual + AutoPopup = False + Images = lsMenus + OnPopup = mnFilterPopup + Left = 306 + Top = 1 + object miStat: TMenuItem + Caption = #1057#1090#1072#1090#1080#1089#1090#1080#1082#1072 + ImageIndex = 24 + object miStatRelays: TMenuItem + Caption = #1042#1089#1077 + OnClick = MetricsInfo + end + object miStatGuards: TMenuItem + Caption = #1057#1090#1086#1088#1086#1078#1077#1074#1099#1077 + Hint = ' flag:guard' + OnClick = MetricsInfo + end + object miStatExit: TMenuItem + Caption = #1042#1099#1093#1086#1076#1085#1099#1077 + Hint = ' flag:exit' + OnClick = MetricsInfo + end + object miDelimiter14: TMenuItem + Caption = '-' + end + object miStatAggregate: TMenuItem + Caption = #1054#1073#1097#1072#1103' '#1087#1086' '#1089#1090#1088#1072#1085#1072#1084 + OnClick = miStatAggregateClick + end + end + object miDelimiter13: TMenuItem + Caption = '-' + end + object miSaveTemplate: TMenuItem + Caption = #1057#1086#1093#1088#1072#1085#1080#1090#1100 + ImageIndex = 14 + OnClick = miSaveTemplateClick + end + object miLoadTemplate: TMenuItem + Caption = #1047#1072#1075#1088#1091#1079#1080#1090#1100 + ImageIndex = 15 + end + object miDeleteTemplate: TMenuItem + Caption = #1059#1076#1072#1083#1080#1090#1100 + ImageIndex = 17 + end + object miDelimiter19: TMenuItem + Caption = '-' + end + object miFilterOptions: TMenuItem + Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080 + ImageIndex = 11 + object miFilterHideUnused: TMenuItem + AutoCheck = True + Caption = #1057#1082#1088#1099#1090#1100' '#1085#1077#1080#1089#1087#1086#1083#1100#1079#1091#1077#1084#1099#1077' '#1089#1090#1088#1072#1085#1099 + Checked = True + OnClick = miFilterHideUnusedClick + end + object miFilterScrollTop: TMenuItem + AutoCheck = True + Caption = #1055#1088#1086#1082#1088#1091#1095#1080#1074#1072#1090#1100' '#1074#1074#1077#1088#1093' '#1087#1088#1080' '#1089#1086#1088#1090#1080#1088#1086#1074#1082#1077 + Checked = True + OnClick = miFilterScrollTopClick + end + object miFilterSelectRow: TMenuItem + AutoCheck = True + Caption = #1042#1099#1076#1077#1083#1103#1090#1100' '#1074#1089#1077' '#1103#1095#1077#1081#1082#1080' '#1074' '#1089#1090#1088#1086#1082#1077 + Checked = True + OnClick = miFilterSelectRowClick + end + object miDelimiter35: TMenuItem + Caption = '-' + end + object miNotLoadEmptyTplData: TMenuItem + AutoCheck = True + Caption = #1053#1077' '#1079#1072#1075#1088#1091#1078#1072#1090#1100' '#1087#1091#1089#1090#1099#1077' '#1076#1072#1085#1085#1099#1077' '#1096#1072#1073#1083#1086#1085#1072 + OnClick = miNotLoadEmptyTplDataClick + end + object miIgnoreTplLoadParamsOutsideTheFilter: TMenuItem + AutoCheck = True + Caption = #1048#1075#1085#1086#1088#1080#1088#1086#1074#1072#1090#1100' '#1087#1072#1088#1072#1084#1077#1090#1088#1099' '#1079#1072#1075#1088#1091#1079#1082#1080' '#1080#1079' '#1096#1072#1073#1083#1086#1085#1072' '#1074#1085#1077' '#1092#1080#1083#1100#1090#1088#1072 + Checked = True + OnClick = miIgnoreTplLoadParamsOutsideTheFilterClick + end + object miReplaceDisabledFavoritesWithCountries: TMenuItem + AutoCheck = True + Caption = #1047#1072#1084#1077#1085#1103#1090#1100' '#1074#1099#1082#1083#1102#1095#1077#1085#1085#1099#1077' '#1089#1087#1080#1089#1082#1080' '#1091#1079#1083#1086#1074' '#1074#1099#1073#1088#1072#1085#1085#1099#1084#1080' '#1089#1090#1088#1072#1085#1072#1084#1080 + Checked = True + OnClick = OptionsChange + end + object miDelimiter30: TMenuItem + Caption = '-' + end + object miTplSave: TMenuItem + Tag = 4 + Caption = #1057#1086#1093#1088#1072#1085#1103#1090#1100' '#1074' '#1096#1072#1073#1083#1086#1085#1077'..' + ImageIndex = 14 + object miTplSaveCountries: TMenuItem + Tag = 1 + AutoCheck = True + Caption = #1042#1099#1073#1088#1072#1085#1085#1099#1077' '#1089#1090#1088#1072#1085#1099 + Checked = True + OnClick = miTplSaveClick + end + object miTplSaveRouters: TMenuItem + Tag = 2 + AutoCheck = True + Caption = #1048#1079#1073#1088#1072#1085#1085#1099#1077' '#1091#1079#1083#1099 + Checked = True + OnClick = miTplSaveClick + end + object miTplSaveExcludes: TMenuItem + Tag = 4 + AutoCheck = True + Caption = #1047#1072#1087#1088#1077#1097#1105#1085#1085#1099#1077' '#1091#1079#1083#1099 + Checked = True + OnClick = miTplSaveClick + end + object miDelimiter31: TMenuItem + Caption = '-' + end + object miTplSaveSA: TMenuItem + Caption = #1042#1099#1073#1088#1072#1090#1100' '#1074#1089#1077 + ImageIndex = 51 + OnClick = SelectorMenuClick + end + object miTplSaveUA: TMenuItem + Caption = #1057#1085#1103#1090#1100' '#1074#1089#1077 + ImageIndex = 52 + OnClick = SelectorMenuClick + end + end + object miTplLoad: TMenuItem + Tag = 5 + Caption = #1047#1072#1075#1088#1091#1078#1072#1090#1100' '#1080#1079' '#1096#1072#1073#1083#1086#1085#1072'..' + ImageIndex = 15 + object miTplLoadCountries: TMenuItem + Tag = 1 + AutoCheck = True + Caption = #1042#1099#1073#1088#1072#1085#1085#1099#1077' '#1089#1090#1088#1072#1085#1099 + Checked = True + OnClick = miTplLoadClick + end + object miTplLoadRouters: TMenuItem + Tag = 2 + AutoCheck = True + Caption = #1048#1079#1073#1088#1072#1085#1085#1099#1077' '#1091#1079#1083#1099 + Checked = True + OnClick = miTplLoadClick + end + object miTplLoadExcludes: TMenuItem + Tag = 4 + AutoCheck = True + Caption = #1047#1072#1087#1088#1077#1097#1105#1085#1085#1099#1077' '#1091#1079#1083#1099 + Checked = True + OnClick = miTplLoadClick + end + object miDelimiter32: TMenuItem + Caption = '-' + end + object miTplLoadSA: TMenuItem + Caption = #1042#1099#1073#1088#1072#1090#1100' '#1074#1089#1077 + ImageIndex = 51 + OnClick = SelectorMenuClick + end + object miTplLoadUA: TMenuItem + Caption = #1057#1085#1103#1090#1100' '#1074#1089#1077 + ImageIndex = 52 + OnClick = SelectorMenuClick + end + end + end + object miDelimiter7: TMenuItem + Caption = '-' + end + object miClearFilter: TMenuItem + Caption = #1054#1095#1080#1089#1090#1080#1090#1100 + ImageIndex = 13 + object miClearFilterEntry: TMenuItem + Caption = #1042#1093#1086#1076#1085#1099#1077 + ImageIndex = 40 + OnClick = ClearFilterClick + end + object miClearFilterMiddle: TMenuItem + Caption = #1057#1088#1077#1076#1085#1080#1077 + ImageIndex = 41 + OnClick = ClearFilterClick + end + object miClearFilterExit: TMenuItem + Caption = #1042#1099#1093#1086#1076#1085#1099#1077 + ImageIndex = 42 + OnClick = ClearFilterClick + end + object miClearFilterExclude: TMenuItem + Caption = #1047#1072#1087#1088#1077#1097#1105#1085#1085#1099#1077 + ImageIndex = 43 + OnClick = ClearFilterClick + end + object miDelimiter20: TMenuItem + Caption = '-' + end + object miClearFilterAll: TMenuItem + Caption = #1042#1089#1077' '#1074#1099#1073#1088#1072#1085#1085#1099#1077 + ImageIndex = 46 + OnClick = ClearFilterClick + end + end + end + object EditMenu: TPopupMenu + AutoHotkeys = maManual + Images = lsMenus + OnPopup = EditMenuPopup + Left = 370 + Top = 1 + object miGetBridges: TMenuItem + Caption = #1055#1086#1083#1091#1095#1080#1090#1100' '#1084#1086#1089#1090#1099 + ImageIndex = 28 + object miGetBridgesSite: TMenuItem + Caption = #1042#1077#1073'-'#1089#1072#1081#1090 + OnClick = miGetBridgesSiteClick + end + object miGetBridgesTelegram: TMenuItem + Caption = #1058#1077#1083#1077#1075#1088#1072#1084'-'#1082#1072#1085#1072#1083 + OnClick = miGetBridgesTelegramClick + end + object miGetBridgesEmail: TMenuItem + Caption = #1069#1083#1077#1082#1090#1088#1086#1085#1085#1072#1103' '#1087#1086#1095#1090#1072 + OnClick = miGetBridgesEmailClick + end + object miDelimiter54: TMenuItem + Caption = '-' + end + object miPreferWebTelegram: TMenuItem + AutoCheck = True + Caption = #1055#1088#1077#1076#1087#1086#1095#1080#1090#1072#1090#1100' '#1074#1077#1073'-'#1074#1077#1088#1089#1080#1102' '#1058#1077#1083#1077#1075#1088#1072#1084#1072 + Checked = True + OnClick = miPreferWebTelegramClick + end + object miRequestObfuscatedBridges: TMenuItem + AutoCheck = True + Caption = #1047#1072#1087#1088#1072#1096#1080#1074#1072#1090#1100' '#1086#1073#1092#1091#1089#1094#1080#1088#1086#1074#1072#1085#1085#1099#1077' '#1084#1086#1089#1090#1099 + Checked = True + OnClick = miRequestObfuscatedBridgesClick + end + object miRequestIPv6Bridges: TMenuItem + AutoCheck = True + Caption = #1047#1072#1087#1088#1072#1096#1080#1074#1072#1090#1100' IPv6-'#1084#1086#1089#1090#1099 + OnClick = miRequestIPv6BridgesClick + end + end + object miDelimiter10: TMenuItem + Caption = '-' + end + object miCut: TMenuItem + Tag = 1 + Caption = #1042#1099#1088#1077#1079#1072#1090#1100 + ImageIndex = 29 + ShortCut = 16472 + OnClick = EditMenuClick + end + object miCopy: TMenuItem + Tag = 2 + Caption = #1050#1086#1087#1080#1088#1086#1074#1072#1090#1100 + ImageIndex = 12 + ShortCut = 16451 + OnClick = EditMenuClick + end + object miPaste: TMenuItem + Tag = 3 + Caption = #1042#1089#1090#1072#1074#1080#1090#1100 + ImageIndex = 27 + ShortCut = 16470 + OnClick = EditMenuClick + end + object miDelete: TMenuItem + Tag = 6 + Caption = #1059#1076#1072#1083#1080#1090#1100 + ImageIndex = 17 + ShortCut = 4142 + OnClick = EditMenuClick + end + object miDelimiter43: TMenuItem + Caption = '-' + end + object miSelectAll: TMenuItem + Tag = 4 + Caption = #1042#1099#1076#1077#1083#1080#1090#1100' '#1074#1089#1105 + ImageIndex = 16 + ShortCut = 16449 + OnClick = EditMenuClick + end + object miFind: TMenuItem + Tag = 7 + Caption = #1053#1072#1081#1090#1080'...' + ImageIndex = 55 + ShortCut = 16454 + OnClick = EditMenuClick + end + object miDelimiter11: TMenuItem + Caption = '-' + end + object miClear: TMenuItem + Tag = 5 + Caption = #1054#1095#1080#1089#1090#1080#1090#1100 + ImageIndex = 13 + ShortCut = 137 + OnClick = EditMenuClick + end + object miClearBridges: TMenuItem + Caption = #1054#1095#1080#1089#1090#1080#1090#1100 + ImageIndex = 13 + object miClearBridgesAll: TMenuItem + Tag = 5 + Caption = #1042#1089#1077' '#1084#1086#1089#1090#1099 + ImageIndex = 3 + OnClick = EditMenuClick + end + object miDelimiter56: TMenuItem + Caption = '-' + end + object miClearBridgesNotAlive: TMenuItem + Caption = #1053#1077' '#1086#1090#1074#1077#1095#1072#1102#1097#1080#1077' '#1085#1072' '#1089#1086#1077#1076#1080#1085#1077#1085#1080#1103 + ImageIndex = 56 + OnClick = miClearBridgesNotAliveClick + end + object miClearBridgesNonCached: TMenuItem + Caption = #1054#1090#1089#1091#1090#1089#1090#1074#1091#1102#1097#1080#1077' '#1074' '#1082#1101#1096#1077 + ImageIndex = 22 + OnClick = ClearBridgesAvailableCache + end + object miClearBridgesCached: TMenuItem + Tag = 1 + Caption = #1053#1072#1081#1076#1077#1085#1085#1099#1077' '#1074' '#1082#1101#1096#1077 + ImageIndex = 21 + OnClick = ClearBridgesAvailableCache + end + end + end + object mnDetails: TPopupMenu + AutoHotkeys = maManual + AutoPopup = False + Images = lsMenus + OnPopup = mnDetailsPopup + Left = 498 + Top = 1 + object miDetailsUpdateIp: TMenuItem + Caption = #1054#1073#1085#1086#1074#1080#1090#1100 + ImageIndex = 18 + OnClick = miDetailsUpdateIpClick + end + object miDelimiter55: TMenuItem + Caption = '-' + end + object miDetailsCopy: TMenuItem + Caption = #1050#1086#1087#1080#1088#1086#1074#1072#1090#1100 + ImageIndex = 12 + object miDetailsCopyNickname: TMenuItem + Caption = #1053#1080#1082 + ImageIndex = 32 + OnClick = CopyCaptionToClipboard + end + object miDetailsCopyIPv4: TMenuItem + Caption = 'IPv4-'#1072#1076#1088#1077#1089 + ImageIndex = 33 + OnClick = CopyCaptionToClipboard + end + object miDetailsCopyIPv6: TMenuItem + Caption = 'IPv6-'#1072#1076#1088#1077#1089 + ImageIndex = 34 + OnClick = CopyCaptionToClipboard + end + object miDetailsCopyFingerprint: TMenuItem + Caption = #1048#1076#1077#1085#1090#1080#1092#1080#1082#1072#1090#1086#1088 + ImageIndex = 23 + OnClick = CopyCaptionToClipboard + end + object miDelimiter45: TMenuItem + Caption = '-' + end + object miDetailsCopyBridgeIPv4: TMenuItem + Caption = #1052#1086#1089#1090' IPv4' + ImageIndex = 28 + OnClick = CopyCaptionToClipboard + end + object miDetailsCopyBridgeIPv6: TMenuItem + Caption = #1052#1086#1089#1090' IPv4' + ImageIndex = 28 + OnClick = CopyCaptionToClipboard + end + end + object miDetailsAddToNodesList: TMenuItem + Caption = #1048#1079#1084#1077#1085#1080#1090#1100' '#1089#1087#1080#1089#1086#1082' '#1091#1079#1083#1086#1074 + ImageIndex = 31 + end + object miDelimiter16: TMenuItem + Caption = '-' + end + object miDetailsRelayInfo: TMenuItem + Caption = #1048#1085#1092#1086#1088#1084#1072#1094#1080#1103' '#1087#1086' '#1088#1077#1090#1088#1072#1085#1089#1083#1103#1090#1086#1088#1091 + ImageIndex = 35 + OnClick = miDetailsRelayInfoClick + end + object miDelimiter8: TMenuItem + Caption = '-' + end + object miDetailsSelectTemplate: TMenuItem + Caption = #1042#1099#1073#1088#1072#1090#1100' '#1096#1072#1073#1083#1086#1085 + ImageIndex = 26 + end + end + object mnServerInfo: TPopupMenu + AutoHotkeys = maManual + AutoPopup = False + Images = lsMenus + Left = 467 + Top = 1 + object miServerCopy: TMenuItem + Caption = #1050#1086#1087#1080#1088#1086#1074#1072#1090#1100 + ImageIndex = 12 + object miServerCopyIPv4: TMenuItem + Caption = #1042#1085#1077#1096#1085#1080#1081' IPv4-'#1072#1076#1088#1077#1089 + ImageIndex = 33 + OnClick = CopyCaptionToClipboard + end + object miServerCopyIPv6: TMenuItem + Caption = #1042#1085#1077#1096#1085#1080#1081' IPv6-'#1072#1076#1088#1077#1089 + ImageIndex = 34 + OnClick = CopyCaptionToClipboard + end + object miServerCopyFingerprint: TMenuItem + Caption = #1048#1076#1077#1085#1090#1080#1092#1080#1082#1072#1090#1086#1088 + ImageIndex = 23 + OnClick = CopyCaptionToClipboard + end + object miServerCopyBridgeIPv4: TMenuItem + Caption = #1052#1086#1089#1090' IPv4' + ImageIndex = 28 + OnClick = CopyCaptionToClipboard + end + object miServerCopyBridgeIPv6: TMenuItem + Caption = #1052#1086#1089#1090' IPv6' + ImageIndex = 28 + OnClick = CopyCaptionToClipboard + end + end + object miServerInfo: TMenuItem + Caption = #1048#1085#1092#1086#1088#1084#1072#1094#1080#1103' '#1087#1086' '#1088#1077#1090#1088#1072#1085#1089#1083#1103#1090#1086#1088#1091 + ImageIndex = 35 + OnClick = miServerInfoClick + end + end + object mnHs: TPopupMenu + AutoHotkeys = maManual + Images = lsMenus + OnPopup = mnHsPopup + Left = 403 + Top = 1 + object miHsOpenDir: TMenuItem + Caption = #1050#1072#1090#1072#1083#1086#1075' '#1089#1077#1088#1074#1080#1089#1072 + ImageIndex = 39 + Visible = False + OnClick = miHsOpenDirClick + end + object miHsCopy: TMenuItem + Caption = #1050#1086#1087#1080#1088#1086#1074#1072#1090#1100 + ImageIndex = 12 + Visible = False + object miHsCopyOnion: TMenuItem + Caption = 'Onion-'#1072#1076#1088#1077#1089 + ImageIndex = 30 + OnClick = miHsCopyOnionClick + end + end + object miDelimiter12: TMenuItem + Caption = '-' + end + object miHsInsert: TMenuItem + Caption = #1044#1086#1073#1072#1074#1080#1090#1100 + ImageIndex = 19 + OnClick = miHsInsertClick + end + object miHsDelete: TMenuItem + Caption = #1059#1076#1072#1083#1080#1090#1100 + ImageIndex = 17 + OnClick = miHsDeleteClick + end + object miDelimiter9: TMenuItem + Caption = '-' + end + object miHsClear: TMenuItem + Caption = #1054#1095#1080#1089#1090#1080#1090#1100 + ImageIndex = 13 + OnClick = miHsClearClick + end + end + object mnShowNodes: TPopupMenu + Tag = 1 + AutoHotkeys = maManual + Images = lsMenus + OnChange = mnShowNodesChange + OnPopup = mnShowNodesPopup + Left = 241 + Top = 1 + object miShowExit: TMenuItem + Tag = 1 + AutoCheck = True + Caption = #1042#1099#1093#1086#1076#1085#1086#1081 + Checked = True + OnClick = SetRoutersFilter + end + object miShowGuard: TMenuItem + Tag = 2 + AutoCheck = True + Caption = #1057#1090#1086#1088#1086#1078#1077#1074#1086#1081 + Checked = True + OnClick = SetRoutersFilter + end + object miShowOther: TMenuItem + Tag = 8 + AutoCheck = True + Caption = #1054#1073#1099#1095#1085#1099#1081 + OnClick = SetRoutersFilter + end + object miShowAuthority: TMenuItem + Tag = 4 + AutoCheck = True + Caption = #1050#1086#1088#1085#1077#1074#1086#1081 + OnClick = SetRoutersFilter + end + object miShowBridge: TMenuItem + Tag = 16 + AutoCheck = True + Caption = #1050#1101#1096#1080#1088#1086#1074#1072#1085#1085#1099#1081' '#1084#1086#1089#1090 + OnClick = SetRoutersFilter + end + object miDelimiter17: TMenuItem + Caption = '-' + end + object miShowFast: TMenuItem + Tag = 32 + AutoCheck = True + Caption = #1041#1099#1089#1090#1088#1099#1081 + Checked = True + Enabled = False + OnClick = SetRoutersFilter + end + object miShowStable: TMenuItem + Tag = 64 + AutoCheck = True + Caption = #1057#1090#1072#1073#1080#1083#1100#1085#1099#1081 + Checked = True + Enabled = False + OnClick = SetRoutersFilter + end + object miDelimiter18: TMenuItem + Caption = '-' + end + object miShowV2Dir: TMenuItem + Tag = 128 + AutoCheck = True + Caption = #1042#1090#1086#1088#1072#1103' '#1074#1077#1088#1089#1080#1103' '#1082#1072#1090#1072#1083#1086#1075#1072 + Checked = True + OnClick = SetRoutersFilter + end + object miShowHSDir: TMenuItem + Tag = 256 + AutoCheck = True + Caption = #1050#1072#1090#1072#1083#1086#1075' '#1089#1082#1088#1099#1090#1099#1093' '#1089#1077#1088#1074#1080#1089#1086#1074 + OnClick = SetRoutersFilter + end + object miShowDirMirror: TMenuItem + Tag = 1024 + AutoCheck = True + Caption = #1047#1077#1088#1082#1072#1083#1086' '#1082#1072#1090#1072#1083#1086#1075#1072 + OnClick = SetRoutersFilter + end + object miDelimiter49: TMenuItem + Caption = '-' + end + object miShowRecommend: TMenuItem + Tag = 512 + AutoCheck = True + Caption = #1056#1077#1082#1086#1084#1077#1085#1076#1091#1077#1084#1072#1103' '#1074#1077#1088#1089#1080#1103 + Checked = True + OnClick = SetRoutersFilter + end + object miShowAlive: TMenuItem + Tag = 2048 + AutoCheck = True + Caption = #1046#1080#1074#1086#1081' '#1091#1079#1077#1083 + OnClick = SetRoutersFilter + end + object miDelimiter58: TMenuItem + Caption = '-' + end + object miReverseConditions: TMenuItem + Tag = 4096 + AutoCheck = True + Caption = #1054#1073#1088#1072#1090#1080#1090#1100' '#1091#1089#1083#1086#1074#1080#1103' '#1092#1080#1083#1100#1090#1088#1072 + OnClick = SetRoutersFilter + end + object miDelimiter50: TMenuItem + Caption = '-' + end + object miShowNodesUA: TMenuItem + Caption = #1057#1085#1103#1090#1100' '#1074#1089#1077 + ImageIndex = 52 + OnClick = SelectorMenuClick + end + end + object tmConsensus: TTimer + Enabled = False + Interval = 3000 + OnTimer = tmConsensusTimer + Left = 642 + Top = 318 + end + object mnRouters: TPopupMenu + AutoHotkeys = maManual + AutoPopup = False + Images = lsMenus + OnPopup = mnRoutersPopup + Left = 530 + Top = 1 + object miRtResetFilter: TMenuItem + Caption = #1057#1073#1088#1086#1089' '#1092#1080#1083#1100#1090#1088#1086#1074 + ImageIndex = 18 + OnClick = miRtResetFilterClick + end + object miDelimiter25: TMenuItem + Caption = '-' + end + object miRtCopy: TMenuItem + Caption = #1050#1086#1087#1080#1088#1086#1074#1072#1090#1100 + ImageIndex = 12 + object miRtCopyNickname: TMenuItem + Caption = #1053#1080#1082 + ImageIndex = 32 + OnClick = CopyCaptionToClipboard + end + object miRtCopyIPv4: TMenuItem + Caption = 'IPv4-'#1072#1076#1088#1077#1089 + ImageIndex = 33 + OnClick = CopyCaptionToClipboard + end + object miRtCopyIPv6: TMenuItem + Caption = 'IPv6-'#1072#1076#1088#1077#1089 + ImageIndex = 34 + OnClick = CopyCaptionToClipboard + end + object miRtCopyFingerprint: TMenuItem + Caption = #1048#1076#1077#1085#1090#1080#1092#1080#1082#1072#1090#1086#1088 + ImageIndex = 23 + OnClick = CopyCaptionToClipboard + end + object miDelimiter44: TMenuItem + Caption = '-' + end + object miRtCopyBridgeIPv4: TMenuItem + Caption = #1052#1086#1089#1090' IPv4' + ImageIndex = 28 + OnClick = CopyCaptionToClipboard + end + object miRtCopyBridgeIpv6: TMenuItem + Caption = #1052#1086#1089#1090' IPv6' + ImageIndex = 28 + OnClick = CopyCaptionToClipboard + end + end + object miRtAddToNodesList: TMenuItem + Caption = #1048#1079#1084#1077#1085#1080#1090#1100' '#1089#1087#1080#1089#1086#1082' '#1091#1079#1083#1086#1074 + ImageIndex = 31 + end + object miRtSelectAsBridge: TMenuItem + Caption = #1042#1099#1073#1088#1072#1090#1100' '#1074' '#1082#1072#1095#1077#1089#1090#1074#1077' '#1084#1086#1089#1090#1072 + ImageIndex = 28 + object miRtSelectAsBridgeIPv4: TMenuItem + Caption = #1052#1086#1089#1090' IPv4' + ImageIndex = 33 + OnClick = SelectNodeAsBridge + end + object miRtSelectAsBridgeIPv6: TMenuItem + Caption = #1052#1086#1089#1090' IPv6' + ImageIndex = 34 + OnClick = SelectNodeAsBridge + end + object miDelimiter48: TMenuItem + Caption = '-' + end + object miRtDisableBridges: TMenuItem + Caption = #1054#1090#1084#1077#1085#1080#1090#1100' '#1080#1089#1087#1086#1083#1100#1079#1086#1074#1072#1085#1080#1077' '#1084#1086#1089#1090#1086#1074 + ImageIndex = 43 + OnClick = miRtDisableBridgesClick + end + end + object miDelimiter29: TMenuItem + Caption = '-' + end + object miRtRelayInfo: TMenuItem + Caption = #1048#1085#1092#1086#1088#1084#1072#1094#1080#1103' '#1087#1086' '#1088#1077#1090#1088#1072#1085#1089#1083#1103#1090#1086#1088#1091 + ImageIndex = 35 + OnClick = miRtRelayInfoClick + end + object miDelimiter21: TMenuItem + Caption = '-' + end + object miRtFilters: TMenuItem + Tag = 2 + Caption = #1060#1080#1083#1100#1090#1088#1099 + ImageIndex = 8 + object miRtFiltersType: TMenuItem + Tag = 1 + AutoCheck = True + Caption = #1058#1080#1087' '#1091#1079#1083#1072 + Checked = True + OnClick = SetRoutersFilterState + end + object miRtFiltersCountry: TMenuItem + Tag = 2 + AutoCheck = True + Caption = #1057#1090#1088#1072#1085#1072 + Checked = True + OnClick = SetRoutersFilterState + end + object miRtFiltersWeight: TMenuItem + Tag = 4 + AutoCheck = True + Caption = #1042#1077#1089' '#1074' '#1082#1086#1085#1089#1077#1085#1089#1091#1089#1077 + Checked = True + OnClick = SetRoutersFilterState + end + object miRtFiltersQuery: TMenuItem + Tag = 8 + AutoCheck = True + Caption = #1047#1072#1087#1088#1086#1089' '#1087#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1103 + Checked = True + OnClick = SetRoutersFilterState + end + object miDelimiter34: TMenuItem + Caption = '-' + end + object miRtFilterSA: TMenuItem + Caption = #1042#1099#1073#1088#1072#1090#1100' '#1074#1089#1077 + ImageIndex = 51 + OnClick = SelectorMenuClick + end + object miRtFilterUA: TMenuItem + Caption = #1057#1085#1103#1090#1100' '#1074#1089#1077 + ImageIndex = 52 + OnClick = SelectorMenuClick + end + end + object miRoutersOptions: TMenuItem + Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080 + ImageIndex = 11 + object miRoutersScrollTop: TMenuItem + AutoCheck = True + Caption = #1055#1088#1086#1082#1088#1091#1095#1080#1074#1072#1090#1100' '#1074#1074#1077#1088#1093' '#1087#1088#1080' '#1089#1086#1088#1090#1080#1088#1086#1074#1082#1077 + Checked = True + OnClick = miRoutersScrollTopClick + end + object miRoutersSelectRow: TMenuItem + AutoCheck = True + Caption = #1042#1099#1076#1077#1083#1103#1090#1100' '#1074#1089#1077' '#1103#1095#1077#1081#1082#1080' '#1074' '#1089#1090#1088#1086#1082#1077 + Checked = True + OnClick = miRoutersSelectRowClick + end + object miShowFlagsHint: TMenuItem + AutoCheck = True + Caption = #1055#1086#1082#1072#1079#1099#1074#1072#1090#1100' '#1087#1086#1076#1089#1082#1072#1079#1082#1080' '#1092#1083#1072#1075#1086#1074' '#1087#1088#1080' '#1085#1072#1074#1077#1076#1077#1085#1080#1080' '#1084#1099#1096#1080 + Checked = True + OnClick = miShowFlagsHintClick + end + object miDelimiter40: TMenuItem + Caption = '-' + end + object miLoadCachedRoutersOnStartup: TMenuItem + AutoCheck = True + Caption = #1047#1072#1075#1088#1091#1078#1072#1090#1100' '#1088#1086#1091#1090#1077#1088#1099' '#1080#1079' '#1082#1101#1096#1072' '#1087#1088#1080' '#1079#1072#1087#1091#1089#1082#1077 + Checked = True + OnClick = miLoadCachedRoutersOnStartupClick + end + object miDisableSelectionUnSuitableAsBridge: TMenuItem + AutoCheck = True + Caption = #1047#1072#1087#1088#1077#1090#1080#1090#1100' '#1074#1099#1073#1086#1088' '#1074' '#1082#1072#1095#1077#1089#1090#1074#1077' '#1084#1086#1089#1090#1072' '#1085#1077#1087#1086#1076#1093#1086#1076#1103#1097#1080#1093' '#1091#1079#1083#1086#1074 + Checked = True + OnClick = miDisableSelectionUnSuitableAsBridgeClick + end + object miDelimiter62: TMenuItem + Caption = '-' + end + object miConvertNodes: TMenuItem + Caption = #1055#1088#1077#1086#1073#1088#1072#1079#1086#1074#1099#1074#1072#1090#1100' IP, CIDR '#1080' '#1082#1086#1076#1099' '#1089#1090#1088#1072#1085' '#1074' '#1093#1101#1096#1080 + object miEnableConvertNodesOnIncorrectClear: TMenuItem + AutoCheck = True + Caption = #1055#1088#1080' '#1086#1095#1080#1089#1090#1082#1077' '#1085#1077#1087#1088#1072#1074#1080#1083#1100#1085#1099#1093' '#1091#1079#1083#1086#1074 + Checked = True + OnClick = miEnableConvertNodesOnIncorrectClearClick + end + object miEnableConvertNodesOnAddToNodesList: TMenuItem + AutoCheck = True + Caption = #1055#1088#1080' '#1076#1086#1073#1072#1074#1083#1077#1085#1080#1080' '#1074' '#1089#1087#1080#1089#1086#1082' '#1091#1079#1083#1086#1074 + Checked = True + OnClick = miEnableConvertNodesOnAddToNodesListClick + end + object miEnableConvertNodesOnRemoveFromNodesList: TMenuItem + AutoCheck = True + Caption = #1055#1088#1080' '#1091#1076#1072#1083#1077#1085#1080#1080' '#1080#1079' '#1089#1087#1080#1089#1082#1072' '#1091#1079#1083#1086#1074 + Checked = True + OnClick = miEnableConvertNodesOnRemoveFromNodesListClick + end + object miDelimiter63: TMenuItem + Caption = '-' + end + object miConvertIpNodes: TMenuItem + AutoCheck = True + Caption = #1055#1088#1077#1086#1073#1088#1072#1079#1086#1074#1099#1074#1072#1090#1100' IP-'#1072#1076#1088#1077#1089#1072 + Checked = True + OnClick = miConvertIpNodesClick + end + object miConvertCidrNodes: TMenuItem + AutoCheck = True + Caption = #1055#1088#1077#1086#1073#1088#1072#1079#1086#1074#1099#1074#1072#1090#1100' CIDR-'#1084#1072#1089#1082#1080 + Checked = True + OnClick = miConvertCidrNodesClick + end + object miConvertCountryNodes: TMenuItem + AutoCheck = True + Caption = #1055#1088#1077#1086#1073#1088#1072#1079#1086#1074#1099#1074#1072#1090#1100' '#1082#1086#1076#1099' '#1089#1090#1088#1072#1085 + Checked = True + OnClick = miConvertCountryNodesClick + end + object miDelimiter64: TMenuItem + Caption = '-' + end + object miIgnoreConvertExcludeNodes: TMenuItem + AutoCheck = True + Caption = #1048#1089#1082#1083#1102#1095#1080#1090#1100' '#1089#1087#1080#1089#1086#1082' '#1079#1072#1087#1088#1077#1097#1105#1085#1085#1099#1093' '#1091#1079#1083#1086#1074 + Checked = True + OnClick = miIgnoreConvertExcludeNodesClick + end + object miAvoidAddingIncorrectNodes: TMenuItem + AutoCheck = True + Caption = #1048#1079#1073#1077#1075#1072#1090#1100' '#1076#1086#1073#1072#1074#1083#1077#1085#1080#1077' '#1085#1077#1087#1088#1072#1074#1080#1083#1100#1085#1099#1093' '#1091#1079#1083#1086#1074 + Checked = True + OnClick = miAvoidAddingIncorrectNodesClick + end + end + object miDisableFiltersOn: TMenuItem + Caption = #1054#1090#1082#1083#1102#1095#1072#1090#1100' '#1092#1080#1083#1100#1090#1088#1099' '#1087#1088#1080' '#1089#1086#1073#1099#1090#1080#1080 + object miDisableFiltersOnUserQuery: TMenuItem + AutoCheck = True + Caption = #1054#1090#1087#1088#1072#1074#1082#1072' '#1079#1072#1087#1088#1086#1089#1072' '#1087#1086#1083#1100#1079#1086#1074#1072#1090#1077#1083#1103 + Checked = True + OnClick = miDisableFiltersOnUserQueryClick + end + object miDisableFiltersOnAuthorityOrBridge: TMenuItem + AutoCheck = True + Caption = #1042#1099#1073#1086#1088' '#1084#1086#1089#1090#1086#1074' '#1080#1083#1080' '#1082#1086#1088#1085#1077#1074#1099#1093' '#1091#1079#1083#1086#1074 + Checked = True + OnClick = miDisableFiltersOnAuthorityOrBridgeClick + end + end + object miDelimiter26: TMenuItem + Caption = '-' + end + object miRtSaveDefault: TMenuItem + Caption = #1057#1086#1093#1088#1072#1085#1080#1090#1100' '#1082#1072#1082' '#1092#1080#1083#1100#1090#1088' '#1087#1086' '#1091#1084#1086#1083#1095#1072#1085#1080#1102 + ImageIndex = 14 + OnClick = miRtSaveDefaultClick + end + end + object miDelimiter23: TMenuItem + Caption = '-' + end + object miClearRouters: TMenuItem + Caption = #1054#1095#1080#1089#1090#1080#1090#1100 + ImageIndex = 13 + object miClearRoutersEntry: TMenuItem + Caption = #1042#1093#1086#1076#1085#1099#1077 + ImageIndex = 40 + OnClick = ClearRoutersClick + end + object miClearRoutersMiddle: TMenuItem + Caption = #1057#1088#1077#1076#1085#1080#1077 + ImageIndex = 41 + OnClick = ClearRoutersClick + end + object miClearRoutersExit: TMenuItem + Caption = #1042#1099#1093#1086#1076#1085#1099#1077 + ImageIndex = 42 + OnClick = ClearRoutersClick + end + object miClearRoutersExclude: TMenuItem + Caption = #1047#1072#1087#1088#1077#1097#1105#1085#1085#1099#1077 + ImageIndex = 43 + OnClick = ClearRoutersClick + end + object miDelimiter22: TMenuItem + Caption = '-' + end + object miClearRoutersFavorites: TMenuItem + Caption = #1042#1089#1077' '#1080#1079#1073#1088#1072#1085#1085#1099#1077 + ImageIndex = 46 + OnClick = ClearRoutersClick + end + object miClearRoutersIncorrect: TMenuItem + Caption = #1053#1077#1087#1088#1072#1074#1080#1083#1100#1085#1099#1077' '#1091#1079#1083#1099 + ImageIndex = 47 + OnClick = miClearRoutersIncorrectClick + end + object miClearRoutersAbsent: TMenuItem + Caption = #1054#1090#1089#1091#1090#1089#1090#1074#1091#1102#1097#1080#1077' '#1074' '#1082#1086#1085#1089#1077#1085#1089#1091#1089#1077 + ImageIndex = 22 + OnClick = miClearRoutersAbsentClick + end + end + end + object tmCircuits: TTimer + Enabled = False + OnTimer = tmCircuitsTimer + Left = 641 + Top = 185 + end + object mnCircuits: TPopupMenu + AutoHotkeys = maManual + Images = lsMenus + OnPopup = mnCircuitsPopup + Left = 562 + Top = 1 + object miCircuitsDestroy: TMenuItem + Caption = #1059#1085#1080#1095#1090#1086#1078#1080#1090#1100 + ImageIndex = 3 + object miDestroyCircuit: TMenuItem + Caption = #1062#1077#1087#1086#1095#1082#1091 + ShortCut = 46 + OnClick = miDestroyCircuitClick + end + object miDestroyStreams: TMenuItem + Caption = #1057#1086#1077#1076#1080#1085#1077#1085#1080#1103 + ShortCut = 8238 + OnClick = miDestroyStreamsClick + end + object miDelimiter36: TMenuItem + Caption = '-' + end + object miDestroyExitCircuits: TMenuItem + Caption = #1042#1089#1077' '#1074#1099#1093#1086#1076#1085#1099#1077' '#1094#1077#1087#1086#1095#1082#1080 + OnClick = miDestroyExitCircuitsClick + end + end + object miDelimiter39: TMenuItem + Caption = '-' + end + object miCircuitsUpdateNow: TMenuItem + Caption = #1054#1073#1085#1086#1074#1080#1090#1100 + ImageIndex = 18 + ShortCut = 116 + OnClick = miCircuitsUpdateNowClick + end + object miCircuitsSort: TMenuItem + Caption = #1057#1086#1088#1090#1080#1088#1086#1074#1082#1072 + ImageIndex = 10 + object miCircuitsSortID: TMenuItem + Caption = #1044#1072#1090#1072' '#1089#1086#1079#1076#1072#1085#1080#1103 + Checked = True + RadioItem = True + OnClick = SelectCircuitsSort + end + object miCircuitsSortPurpose: TMenuItem + Tag = 1 + Caption = #1053#1072#1079#1085#1072#1095#1077#1085#1080#1077 + RadioItem = True + OnClick = SelectCircuitsSort + end + object miCircuitsSortStreams: TMenuItem + Tag = 2 + Caption = #1057#1086#1077#1076#1080#1085#1077#1085#1080#1103 + RadioItem = True + OnClick = SelectCircuitsSort + end + object miCircuitsSortDL: TMenuItem + Tag = 3 + Caption = #1055#1086#1083#1091#1095#1077#1085#1086 + RadioItem = True + OnClick = SelectCircuitsSort + end + object miCircuitsSortUL: TMenuItem + Tag = 4 + Caption = #1054#1090#1087#1088#1072#1074#1083#1077#1085#1086 + RadioItem = True + OnClick = SelectCircuitsSort + end + end + object miCircuitFilter: TMenuItem + Tag = 3 + Caption = #1060#1080#1083#1100#1090#1088#1099 + ImageIndex = 8 + object miCircOneHop: TMenuItem + Tag = 1 + AutoCheck = True + Caption = #1047#1072#1087#1088#1086#1089' '#1082#1072#1090#1072#1083#1086#1075#1072 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircInternal: TMenuItem + Tag = 2 + AutoCheck = True + Caption = #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081' '#1090#1088#1072#1092#1080#1082 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircExit: TMenuItem + Tag = 4 + AutoCheck = True + Caption = #1042#1099#1093#1086#1076#1085#1086#1081' '#1090#1088#1072#1092#1080#1082 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircHsClientDir: TMenuItem + Tag = 8 + AutoCheck = True + Caption = #1050#1083#1080#1077#1085#1090': '#1047#1072#1087#1088#1086#1089' '#1082#1072#1090#1072#1083#1086#1075#1072 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircHsClientIntro: TMenuItem + Tag = 16 + AutoCheck = True + Caption = #1050#1083#1080#1077#1085#1090': '#1058#1086#1095#1082#1072' '#1074#1093#1086#1076#1072 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircHsClientRend: TMenuItem + Tag = 32 + AutoCheck = True + Caption = #1050#1083#1080#1077#1085#1090': '#1052#1077#1089#1090#1086' '#1074#1089#1090#1088#1077#1095#1080 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircHsServiceDir: TMenuItem + Tag = 64 + AutoCheck = True + Caption = #1057#1077#1088#1074#1080#1089': '#1047#1072#1087#1088#1086#1089' '#1082#1072#1090#1072#1083#1086#1075#1072 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircHsServiceIntro: TMenuItem + Tag = 128 + AutoCheck = True + Caption = #1057#1077#1088#1074#1080#1089': '#1058#1086#1095#1082#1072' '#1074#1093#1086#1076#1072 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircHsServiceRend: TMenuItem + Tag = 256 + AutoCheck = True + Caption = #1057#1077#1088#1074#1080#1089': '#1052#1077#1089#1090#1086' '#1074#1089#1090#1088#1077#1095#1080 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircHsVanguards: TMenuItem + Tag = 512 + AutoCheck = True + Caption = #1040#1074#1072#1085#1075#1072#1088#1076' '#1089#1082#1088#1099#1090#1086#1075#1086' '#1089#1077#1088#1074#1080#1089#1072 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircPathBiasTesting: TMenuItem + Tag = 1024 + AutoCheck = True + Caption = #1055#1088#1086#1074#1077#1088#1082#1072' '#1079#1072#1082#1088#1099#1090#1080#1103' '#1094#1077#1087#1086#1095#1082#1080 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircTesting: TMenuItem + Tag = 2048 + AutoCheck = True + Caption = #1055#1088#1086#1074#1077#1088#1082#1072' '#1076#1086#1089#1090#1091#1087#1085#1086#1089#1090#1080 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircCircuitPadding: TMenuItem + Tag = 4096 + AutoCheck = True + Caption = #1052#1072#1089#1082#1080#1088#1086#1074#1082#1072' '#1074#1088#1077#1084#1077#1085#1080 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircMeasureTimeout: TMenuItem + Tag = 8192 + AutoCheck = True + Caption = #1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1086#1078#1080#1076#1072#1085#1080#1103 + Checked = True + OnClick = SetCircuitsFilter + end + object miCircOther: TMenuItem + Tag = 16384 + AutoCheck = True + Caption = #1044#1088#1091#1075#1086#1077' '#1085#1072#1079#1085#1072#1095#1077#1085#1080#1077 + Checked = True + OnClick = SetCircuitsFilter + end + object miDelimiter33: TMenuItem + Caption = '-' + end + object miCircSA: TMenuItem + Caption = #1042#1099#1073#1088#1072#1090#1100' '#1074#1089#1077 + ImageIndex = 51 + OnClick = SelectorMenuClick + end + object miCircUA: TMenuItem + Caption = #1057#1085#1103#1090#1100' '#1074#1089#1077 + ImageIndex = 52 + OnClick = SelectorMenuClick + end + end + object miDelimiter24: TMenuItem + Caption = '-' + end + object miCircuitOptions: TMenuItem + Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080 + ImageIndex = 11 + object miHideCircuitsWithoutStreams: TMenuItem + AutoCheck = True + Caption = #1057#1082#1088#1099#1074#1072#1090#1100' '#1094#1077#1087#1086#1095#1082#1080' '#1073#1077#1079' '#1089#1086#1077#1076#1080#1085#1077#1085#1080#1081 + OnClick = miHideCircuitsWithoutStreamsClick + end + object miAlwaysShowExitCircuit: TMenuItem + AutoCheck = True + Caption = #1042#1089#1077#1075#1076#1072' '#1087#1086#1082#1072#1079#1099#1074#1072#1090#1100' '#1074#1099#1093#1086#1076#1085#1091#1102' '#1094#1077#1087#1086#1095#1082#1091 + Checked = True + OnClick = miAlwaysShowExitCircuitClick + end + object miSelectExitCircuitWhetItChanges: TMenuItem + AutoCheck = True + Caption = #1042#1099#1076#1077#1083#1103#1090#1100' '#1074#1099#1093#1086#1076#1085#1091#1102' '#1094#1077#1087#1086#1095#1082#1091' '#1087#1088#1080' '#1077#1105' '#1080#1079#1084#1077#1085#1077#1085#1080#1080 + Checked = True + OnClick = miSelectExitCircuitWhetItChangesClick + end + object miDelimiter38: TMenuItem + Caption = '-' + end + object miShowCircuitsTraffic: TMenuItem + Tag = 1 + AutoCheck = True + Caption = #1055#1086#1082#1072#1079#1099#1074#1072#1090#1100' '#1090#1088#1072#1092#1080#1082' '#1094#1077#1087#1086#1095#1077#1082 + Checked = True + OnClick = ShowTrafficSelect + end + object miShowStreamsTraffic: TMenuItem + Tag = 2 + AutoCheck = True + Caption = #1055#1086#1082#1072#1079#1099#1074#1072#1090#1100' '#1090#1088#1072#1092#1080#1082' '#1089#1086#1077#1076#1080#1085#1077#1085#1080#1081 + Checked = True + OnClick = ShowTrafficSelect + end + object miShowStreamsInfo: TMenuItem + AutoCheck = True + Caption = #1055#1086#1082#1072#1079#1099#1074#1072#1090#1100' '#1087#1086#1076#1088#1086#1073#1085#1086#1089#1090#1080' '#1089#1086#1077#1076#1080#1085#1077#1085#1080#1081 + Checked = True + OnClick = miShowStreamsInfoClick + end + object miDelimiter41: TMenuItem + Caption = '-' + end + object miCircuitsUpdateSpeed: TMenuItem + Caption = #1057#1082#1086#1088#1086#1089#1090#1100' '#1086#1073#1085#1086#1074#1083#1077#1085#1080#1103 + object miCircuitsUpdateHigh: TMenuItem + Tag = 500 + Caption = #1042#1099#1089#1086#1082#1072#1103 + RadioItem = True + OnClick = SetCircuitsUpdateInterval + end + object miCircuitsUpdateNormal: TMenuItem + Tag = 1000 + Caption = #1053#1086#1088#1084#1072#1083#1100#1085#1072#1103 + Checked = True + RadioItem = True + OnClick = SetCircuitsUpdateInterval + end + object miCircuitsUpdateLow: TMenuItem + Tag = 4000 + Caption = #1053#1080#1079#1082#1072#1103 + RadioItem = True + OnClick = SetCircuitsUpdateInterval + end + object miDelimiter37: TMenuItem + Caption = '-' + end + object miCircuitsUpdateManual: TMenuItem + Caption = #1054#1073#1085#1086#1074#1083#1103#1090#1100' '#1074#1088#1091#1095#1085#1091#1102 + RadioItem = True + OnClick = SetCircuitsUpdateInterval + end + end + end + end + object mnStreams: TPopupMenu + AutoHotkeys = maManual + Images = lsMenus + OnPopup = mnStreamsPopup + Left = 595 + Top = 1 + object miStreamsDestroyStream: TMenuItem + Caption = #1059#1085#1080#1095#1090#1086#1078#1080#1090#1100 + ImageIndex = 3 + ShortCut = 46 + OnClick = miStreamsDestroyStreamClick + end + object miDelimiter27: TMenuItem + Caption = '-' + end + object miStreamsOpenInBrowser: TMenuItem + Caption = #1054#1090#1082#1088#1099#1090#1100' '#1074' '#1073#1088#1072#1091#1079#1077#1088#1077 + ImageIndex = 25 + ShortCut = 13 + OnClick = miStreamsOpenInBrowserClick + end + object miStreamsBindToExitNode: TMenuItem + Caption = #1055#1088#1080#1074#1103#1079#1072#1090#1100' '#1082' '#1074#1099#1093#1086#1076#1085#1086#1084#1091' '#1091#1079#1083#1091 + ImageIndex = 21 + end + object miDelimiter28: TMenuItem + Caption = '-' + end + object miStreamsSort: TMenuItem + Caption = #1057#1086#1088#1090#1080#1088#1086#1074#1082#1072 + ImageIndex = 10 + object miStreamsSortID: TMenuItem + Caption = #1044#1072#1090#1072' '#1089#1086#1079#1076#1072#1085#1080#1103 + Checked = True + RadioItem = True + OnClick = SelectStreamsSort + end + object miStreamsSortTarget: TMenuItem + Tag = 1 + Caption = #1062#1077#1083#1077#1074#1086#1081' '#1072#1076#1088#1077#1089 + RadioItem = True + OnClick = SelectStreamsSort + end + object miStreamsSortTrack: TMenuItem + Tag = 2 + Caption = #1055#1088#1080#1074#1103#1079#1082#1072' '#1082' '#1074#1099#1093#1086#1076#1085#1086#1084#1091' '#1091#1079#1083#1091 + RadioItem = True + OnClick = SelectStreamsSort + end + object miStreamsSortStreams: TMenuItem + Tag = 3 + Caption = #1057#1086#1077#1076#1080#1085#1077#1085#1080#1103 + RadioItem = True + OnClick = SelectStreamsSort + end + object miStreamsSortDL: TMenuItem + Tag = 4 + Caption = #1055#1086#1083#1091#1095#1077#1085#1086 + RadioItem = True + OnClick = SelectStreamsSort + end + object miStreamsSortUL: TMenuItem + Tag = 5 + Caption = #1054#1090#1087#1088#1072#1074#1083#1077#1085#1086 + RadioItem = True + OnClick = SelectStreamsSort + end + end + end + object lsTray: TImageList + ColorDepth = cd4Bit + GrayscaleFactor = 255 + Height = 20 + Width = 20 + Left = 689 + Top = 275 + Bitmap = { + 494C010103000800040014001400FFFFFFFF0510FFFFFFFFFFFFFFFF424D7600 + 0000000000007600000028000000500000001400000001000400000000002003 + 0000000000000000000000000000000000000000000000008000008000000080 + 8000800000008000800080800000C0C0C000808080000000FF0000FF000000FF + FF00FF000000FF00FF00FFFF0000FFFFFF000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000FFFFFFFFFFF + FFFFFFF00BBBBBBBBBBBBBBBBBB00AAAAAAAAAAAAAAAAAA00000000000000000 + 00000F0000000000000000F00B0000000000000000B00A0000000000000000A0 + 000000000000000000000F0000000000000000F00B0000000000000000B00A00 + 00000000000000A0000000000000000000000F0000000000000000F00B000000 + 0000000000B00A0000000000000000A0000000000000000000000F0000000000 + 000000F00B0000000000000000B00A0000000000000000A00000000000000000 + 00000F0000F0000FFFFF00F00B0000B0000BBBBB00B00A0000A0000AAAAA00A0 + 000000000000000000000F0000F0000F000F00F00B0000B0000B000B00B00A00 + 00A0000A000A00A0000000000000000000000F0000F0000F000000F00B0000B0 + 000B000000B00A0000A0000A000000A0000000000000000000000F0000F0000F + 000000F00B0000B0000B000000B00A0000A0000A000000A00000000000000000 + 00000F0000F0000F000000F00B0000B0000B000000B00A0000A0000A000000A0 + 000000000000000000000F0000F0000F000000F00B0000B0000B000000B00A00 + 00A0000A000000A0000000000000000000000F0000F0000F000F00F00B0000B0 + 000B000B00B00A0000A0000A000A00A0000000000000000000000F00FFFFF00F + FFFF00F00B00BBBBB00BBBBB00B00A00AAAAA00AAAAA00A00000000000000000 + 00000F0000000000000000F00B0000000000000000B00A0000000000000000A0 + 000000000000000000000F0000000000000000F00B0000000000000000B00A00 + 00000000000000A0000000000000000000000F0000000000000000F00B000000 + 0000000000B00A0000000000000000A0000000000000000000000F0000000000 + 000000F00B0000000000000000B00A0000000000000000A00000000000000000 + 00000FFFFFFFFFFFFFFFFFF00BBBBBBBBBBBBBBBBBB00AAAAAAAAAAAAAAAAAA0 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000050000000140000000100010000000000F00000000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000} + end + object lsMain: TImageList + ColorDepth = cd32Bit + Left = 690 + Top = 142 + end + object mnStreamsInfo: TPopupMenu + AutoHotkeys = maManual + Images = lsMenus + OnPopup = mnStreamsInfoPopup + Left = 628 + Top = 1 + object miStreamsInfoDestroyStream: TMenuItem + Caption = #1059#1085#1080#1095#1090#1086#1078#1080#1090#1100 + ImageIndex = 3 + ShortCut = 46 + OnClick = miStreamsInfoDestroyStreamClick + end + object miDelimiter42: TMenuItem + Caption = '-' + end + object miStreamsInfoSort: TMenuItem + Caption = #1057#1086#1088#1090#1080#1088#1086#1074#1082#1072 + ImageIndex = 10 + object miStreamsInfoSortID: TMenuItem + Caption = #1044#1072#1090#1072' '#1089#1086#1079#1076#1072#1085#1080#1103 + Checked = True + RadioItem = True + OnClick = SelectStreamsInfoSort + end + object miStreamsInfoSortSource: TMenuItem + Tag = 1 + Caption = #1048#1089#1090#1086#1095#1085#1080#1082 + RadioItem = True + OnClick = SelectStreamsInfoSort + end + object miStreamsInfoSortDest: TMenuItem + Tag = 2 + Caption = #1053#1072#1079#1085#1072#1095#1077#1085#1080#1077 + RadioItem = True + OnClick = SelectStreamsInfoSort + end + object miStreamsInfoSortPurpose: TMenuItem + Tag = 3 + Caption = #1062#1077#1083#1100 + RadioItem = True + OnClick = SelectStreamsInfoSort + end + object miStreamsInfoSortDL: TMenuItem + Tag = 4 + Caption = #1055#1086#1083#1091#1095#1077#1085#1086 + RadioItem = True + OnClick = SelectStreamsInfoSort + end + object miStreamsInfoSortUL: TMenuItem + Tag = 5 + Caption = #1054#1090#1087#1088#1072#1074#1083#1077#1085#1086 + RadioItem = True + OnClick = SelectStreamsInfoSort + end + end + end + object FindDialog: TFindDialog + OnFind = FindDialogFind + Left = 644 + Top = 361 + end + object tmScanner: TTimer + Enabled = False + OnTimer = tmScannerTimer + Left = 642 + Top = 229 + end + object mnTransports: TPopupMenu + AutoHotkeys = maManual + Images = lsMenus + OnPopup = mnTransportsPopup + Left = 660 + Top = 1 + object miTransportsInsert: TMenuItem + Caption = #1044#1086#1073#1072#1074#1080#1090#1100 + ImageIndex = 19 + OnClick = miTransportsInsertClick + end + object miTransportsDelete: TMenuItem + Caption = #1059#1076#1072#1083#1080#1090#1100 + ImageIndex = 17 + OnClick = miTransportsDeleteClick + end + object miDelimiter52: TMenuItem + Caption = '-' + end + object miTransportsOpenDir: TMenuItem + Caption = #1050#1072#1090#1072#1083#1086#1075' '#1090#1088#1072#1085#1089#1087#1086#1088#1090#1086#1074 + ImageIndex = 39 + OnClick = miTransportsOpenDirClick + end + object miTransportsReset: TMenuItem + Caption = #1053#1072#1089#1090#1088#1086#1081#1082#1080' '#1087#1086' '#1091#1084#1086#1083#1095#1072#1085#1080#1102 + ImageIndex = 18 + OnClick = miTransportsResetClick + end + object miDelimiter53: TMenuItem + Caption = '-' + Default = True + end + object miTransportsClear: TMenuItem + Caption = #1054#1095#1080#1089#1090#1080#1090#1100 + ImageIndex = 13 + OnClick = miTransportsClearClick + end + end + object tmSaveTotals: TTimer + Enabled = False + Interval = 2000 + OnTimer = tmSaveTotalsTimer + Left = 641 + Top = 143 + end + object mnTraffic: TPopupMenu + AutoHotkeys = maManual + Left = 693 + Top = 1 + object miTrafficPeriod: TMenuItem + Caption = #1055#1077#1088#1080#1086#1076 + object miPeriod1m: TMenuItem + Caption = '1 '#1084#1080#1085'.' + RadioItem = True + OnClick = SelectTrafficPeriod + end + object miPeriod5m: TMenuItem + Tag = 1 + Caption = '5 '#1084#1080#1085'.' + Checked = True + RadioItem = True + OnClick = SelectTrafficPeriod + end + object miPeriod15m: TMenuItem + Tag = 2 + Caption = '15 '#1084#1080#1085'.' + RadioItem = True + OnClick = SelectTrafficPeriod + end + object miPeriod30m: TMenuItem + Tag = 3 + Caption = '30 '#1084#1080#1085'.' + RadioItem = True + OnClick = SelectTrafficPeriod + end + object miPeriod1h: TMenuItem + Tag = 4 + Caption = '1 '#1095'.' + RadioItem = True + OnClick = SelectTrafficPeriod + end + object miPeriod3h: TMenuItem + Tag = 5 + Caption = '3 '#1095'.' + RadioItem = True + OnClick = SelectTrafficPeriod + end + object miPeriod6h: TMenuItem + Tag = 6 + Caption = '6 '#1095 + RadioItem = True + OnClick = SelectTrafficPeriod + end + object miPeriod12h: TMenuItem + Tag = 7 + Caption = '12 '#1095'.' + RadioItem = True + OnClick = SelectTrafficPeriod + end + object miPeriod24h: TMenuItem + Tag = 8 + Caption = '24 '#1095'.' + RadioItem = True + OnClick = SelectTrafficPeriod + end + end + object miSelectGraph: TMenuItem + Caption = #1055#1086#1082#1072#1079#1099#1074#1072#1090#1100' '#1075#1088#1072#1092#1080#1082#1080 + object miSelectGraphDL: TMenuItem + AutoCheck = True + Caption = #1047#1072#1075#1088#1091#1079#1082#1072 + Checked = True + OnClick = miSelectGraphDLClick + end + object miSelectGraphUL: TMenuItem + AutoCheck = True + Caption = #1054#1090#1087#1088#1072#1074#1082#1072 + Checked = True + OnClick = miSelectGraphULClick + end + end + end + object tmTraffic: TTimer + Enabled = False + OnTimer = tmTrafficTimer + Left = 642 + Top = 274 + end +end diff --git a/source/Main.pas b/source/Main.pas new file mode 100644 index 0000000..cbf8ff7 --- /dev/null +++ b/source/Main.pas @@ -0,0 +1,14765 @@ +unit Main; + +interface + +uses + Winapi.Windows, Winapi.Messages, Winapi.CommCtrl, Winapi.Winsock, Winapi.ShellApi, + Winapi.ShlObj, Winapi.GDIPAPI, Winapi.GDIPOBJ, System.SysUtils, System.IniFiles, + System.Generics.Collections, System.ImageList, System.DateUtils, System.Math, + Vcl.Forms, System.Classes, System.Masks, Vcl.ImgList, Vcl.Controls, Vcl.ExtCtrls, + Vcl.Menus, Vcl.StdCtrls, Vcl.Grids, Vcl.ComCtrls, Vcl.Clipbrd, Vcl.Dialogs, Vcl.Graphics, + Vcl.Themes, Vcl.Buttons, blcksock, dnssend, httpsend, pingsend, synacode, synautil, + ConstData, Functions, Addons, Languages; + +type + TUserGrid = class(TCustomGrid); + + TRouterFlag = (rfAuthority, rfBadExit, rfExit, rfFast, rfGuard, rfHSDir, rfStable, rfV2Dir, rfBridge, rfRelay); + TRouterFlags = set of TRouterFlag; + TRouterInfo = record + Name: string; + IPv4: string; + IPv6: string; + OrPort: Word; + DirPort: Word; + Flags: TRouterFlags; + Version: string; + Bandwidth: Integer; + Params: Byte; + end; + + TSpeedData = record + DL: Integer; + UL: Integer; + end; + + TTransportInfo = record + TransportID: Byte; + BridgeType: TBridgeTypes; + end; + + TBridgeInfo = record + Router: TRouterInfo; + Kind: Byte; + Transport: string; + Params: string; + end; + + TFilterInfo = record + cc: Byte; + Data: TNodeTypes; + end; + + TGeoIpInfo = record + cc: Byte; + ping: Integer; + ports: string; + end; + + TBuildFlag = (bfOneHop, bfInternal, bfNeedCapacity, bfNeedUptime); + TBuildFlags = set of TBuildFlag; + TCircuitInfo = record + BuildFlags: TBuildFlags; + PurposeID: Integer; + Streams: Integer; + Nodes: string; + Date: string; + BytesRead: int64; + BytesWritten: int64; + end; + + TStreamInfo = record + CircuitID: string; + Target: string; + SourceAddr: string; + DestAddr: string; + PurposeID: Integer; + BytesRead: int64; + BytesWritten: int64; + end; + + TReadPipeThread = class(TThread) + public + hStdOut: THandle; + VersionCheck: Boolean; + private + Data: string; + DataSize, dwRead: DWORD; + Buffer: PAnsiChar; + procedure UpdateLog; + procedure UpdateVersionInfo; + protected + procedure Execute; override; + end; + + TSendHttpThread = class(TThread) + protected + procedure Execute; override; + end; + + TDNSSendThread = class(TThread) + private + Temp: string; + procedure UpdateIpStage; + protected + procedure Execute; override; + end; + + TScanThread = class(TThread) + public + sScanPortionSize, sMaxThreads, sAttemptsDelay: Integer; + sMaxPortAttempts, sMaxPingAttempts: Byte; + sScanType: TScanType; + sScanPurpose: TScanPurpose; + sPingTimeout, sPortTimeout, sScanPortionTimeout: Integer; + protected + procedure Execute; override; + end; + + TScanItemThread = class(TThread) + public + IpStr: string; + Port: Word; + MaxPortAttempts, MaxPingAttempts: Byte; + ScanType: TScanType; + PingTimeout, PortTimeout, AttemptsDelay: Integer; + Result: Integer; + protected + procedure Execute; override; + end; + + TConsensusThread = class(TThread) + protected + procedure Execute; override; + end; + + TDescriptorsThread = class(TThread) + protected + procedure Execute; override; + end; + + TControlThread = class(TThread) + private + Socket: TTCPBlockSocket; + StreamStatusID, CircuitStatusID: Integer; + CircuitInfo: TCircuitInfo; + StreamInfo: TStreamInfo; + SendBuffer: string; + Data, AuthParam: string; + Ip, Temp, CircuitID, StreamID: string; + ParseStr: ArrOfStr; + SearchPos, InfoCount: Integer; + CountryCode, IpID: Byte; + procedure GetData; + procedure SendData(cmd: string); + protected + procedure Execute; override; + end; + + TUTF8EncodingNoBOM = class(TUTF8Encoding) + public + function GetPreamble: TBytes; override; + end; + + TPageControl = class(Vcl.ComCtrls.TPageControl) + private + procedure TCMAdjustRect(var Msg: TMessage); message TCM_ADJUSTRECT; + end; + + TTcp = class(TForm) + tiTray: TTrayIcon; + mnTray: TPopupMenu; + miExit: TMenuItem; + tmUpdateIp: TTimer; + miSwitchTor: TMenuItem; + mnLog: TPopupMenu; + miLogClear: TMenuItem; + miAutoScroll: TMenuItem; + miShowOptions: TMenuItem; + miShowLog: TMenuItem; + miDelimiter1: TMenuItem; + miDelimiter2: TMenuItem; + miWriteLogFile: TMenuItem; + miSafeLogging: TMenuItem; + miLogOptions: TMenuItem; + miLogSelectAll: TMenuItem; + miLogCopy: TMenuItem; + miDelimiter3: TMenuItem; + miDelimiter4: TMenuItem; + miLogLevel: TMenuItem; + miDebug: TMenuItem; + miInfo: TMenuItem; + miNotice: TMenuItem; + miWarn: TMenuItem; + miErr: TMenuItem; + miWordWrap: TMenuItem; + miScrollBars: TMenuItem; + miSbVertical: TMenuItem; + miSbHorizontal: TMenuItem; + miSbBoth: TMenuItem; + miSbNone: TMenuItem; + lsFlags: TImageList; + lsButtons: TImageList; + lsMenus: TImageList; + btnCancelOptions: TButton; + miAutoClear: TMenuItem; + miOpenFileLog: TMenuItem; + miDelimiter6: TMenuItem; + miChangeCircuit: TMenuItem; + mnChangeCircuit: TPopupMenu; + miDelimiter5: TMenuItem; + mnFilter: TPopupMenu; + miLoadTemplate: TMenuItem; + miSaveTemplate: TMenuItem; + miDeleteTemplate: TMenuItem; + miDelimiter7: TMenuItem; + miClearFilter: TMenuItem; + miClearFilterAll: TMenuItem; + miClearFilterEntry: TMenuItem; + miClearFilterMiddle: TMenuItem; + miClearDNSCache: TMenuItem; + EditMenu: TPopupMenu; + miCut: TMenuItem; + miCopy: TMenuItem; + miPaste: TMenuItem; + miSelectAll: TMenuItem; + miDelimiter11: TMenuItem; + miClear: TMenuItem; + miDelimiter10: TMenuItem; + miGetBridges: TMenuItem; + btnApplyOptions: TButton; + mnDetails: TPopupMenu; + miDetailsUpdateIp: TMenuItem; + miDetailsCopy: TMenuItem; + miDetailsCopyFingerprint: TMenuItem; + miDetailsCopyIPv4: TMenuItem; + miDetailsSelectTemplate: TMenuItem; + miDelimiter8: TMenuItem; + miDetailsCopyNickname: TMenuItem; + paStatus: TPanel; + gbSpeedGraph: TGroupBox; + miDetailsRelayInfo: TMenuItem; + miDelimiter16: TMenuItem; + gbSession: TGroupBox; + lbSessionDLCaption: TLabel; + lbSessionULCaption: TLabel; + lbSessionDL: TLabel; + lbSessionUL: TLabel; + gbServerInfo: TGroupBox; + lbServerExternalIpCaption: TLabel; + lbFingerprintCaption: TLabel; + miShowStatus: TMenuItem; + mnServerInfo: TPopupMenu; + miServerCopy: TMenuItem; + miServerCopyIPv4: TMenuItem; + miServerCopyFingerprint: TMenuItem; + miDetailsAddToNodesList: TMenuItem; + miServerInfo: TMenuItem; + gbTraffic: TGroupBox; + lbDownloadSpeedCaption: TLabel; + lbUploadSpeedCaption: TLabel; + lbDLSpeed: TLabel; + lbULSpeed: TLabel; + gbMaxTraffic: TGroupBox; + lbMaxDLSpeedCaption: TLabel; + lbMaxULSpeedCaption: TLabel; + lbMaxDLSpeed: TLabel; + lbMaxULSpeed: TLabel; + gbInfo: TGroupBox; + lbClientVersionCaption: TLabel; + lbClientVersion: TLabel; + mnHs: TPopupMenu; + miHsInsert: TMenuItem; + miHsDelete: TMenuItem; + lbUserDirCaption: TLabel; + lbUserDir: TLabel; + lbServerExternalIp: TLabel; + lbFingerprint: TLabel; + miServerCopyBridgeIPv4: TMenuItem; + lbBridgeCaption: TLabel; + lbBridge: TLabel; + miDelimiter9: TMenuItem; + miHsClear: TMenuItem; + miDelimiter12: TMenuItem; + miHsCopy: TMenuItem; + miHsCopyOnion: TMenuItem; + miHsOpenDir: TMenuItem; + miDelimiter13: TMenuItem; + miStat: TMenuItem; + miStatRelays: TMenuItem; + miStatGuards: TMenuItem; + miStatExit: TMenuItem; + miDelimiter14: TMenuItem; + miStatAggregate: TMenuItem; + paRouters: TPanel; + sgRouters: TStringGrid; + miShowRouters: TMenuItem; + miDelimiter15: TMenuItem; + btnShowNodes: TButton; + mnShowNodes: TPopupMenu; + lbRoutersCount: TLabel; + miShowExit: TMenuItem; + miShowGuard: TMenuItem; + miShowStable: TMenuItem; + miShowFast: TMenuItem; + miDelimiter17: TMenuItem; + miDelimiter18: TMenuItem; + miShowV2Dir: TMenuItem; + miShowHSDir: TMenuItem; + miShowOther: TMenuItem; + cbxRoutersCountry: TComboBox; + edRoutersWeight: TEdit; + udRoutersWeight: TUpDown; + lbSpeed3: TLabel; + pcOptions: TPageControl; + tsMain: TTabSheet; + gbProfile: TGroupBox; + lbCreateProfile: TLabel; + btnCreateProfile: TButton; + tsNetwork: TTabSheet; + lbReachableAddresses: TLabel; + lbProxyAddress: TLabel; + lbProxyUser: TLabel; + lbProxyPort: TLabel; + lbProxyPassword: TLabel; + lbProxyType: TLabel; + cbUseReachableAddresses: TCheckBox; + edReachableAddresses: TEdit; + cbUseProxy: TCheckBox; + edProxyAddress: TEdit; + edProxyUser: TEdit; + edProxyPassword: TEdit; + cbxProxyType: TComboBox; + cbUseBridges: TCheckBox; + meBridges: TMemo; + cbxSocksHost: TComboBox; + edProxyPort: TEdit; + udProxyPort: TUpDown; + edSOCKSPort: TEdit; + udSOCKSPort: TUpDown; + cbEnableSocks: TCheckBox; + tsFilter: TTabSheet; + lbFilterMode: TLabel; + cbxFilterMode: TComboBox; + sgFilter: TStringGrid; + tsServer: TTabSheet; + lbORPort: TLabel; + lbNickname: TLabel; + lbServerMode: TLabel; + lbRelayBandwidthRate: TLabel; + lbRelayBandwidthBurst: TLabel; + lbSpeed1: TLabel; + lbSpeed2: TLabel; + lbContactInfo: TLabel; + lbDirPort: TLabel; + lbExitPolicy: TLabel; + lbMaxMemInQueues: TLabel; + lbSizeMb: TLabel; + lbBridgeType: TLabel; + lbNumCPUs: TLabel; + lbTransportPort: TLabel; + imUPnPTest: TImage; + edNickname: TEdit; + cbxServerMode: TComboBox; + cbUseRelayBandwidth: TCheckBox; + edContactInfo: TEdit; + cbxExitPolicyType: TComboBox; + cbUseUPnP: TCheckBox; + cbUseMaxMemInQueues: TCheckBox; + cbxBridgeType: TComboBox; + meExitPolicy: TMemo; + cbUseNumCPUs: TCheckBox; + cbPublishServerDescriptor: TCheckBox; + cbUseDirPort: TCheckBox; + cbDirReqStatistics: TCheckBox; + cbIPv6Exit: TCheckBox; + cbHiddenServiceStatistics: TCheckBox; + edORPort: TEdit; + udORPort: TUpDown; + edDirPort: TEdit; + udDirPort: TUpDown; + edTransportPort: TEdit; + udTransportPort: TUpDown; + edMaxMemInQueues: TEdit; + udMaxMemInQueues: TUpDown; + edNumCPUs: TEdit; + udNumCPUs: TUpDown; + edRelayBandwidthRate: TEdit; + udRelayBandwidthRate: TUpDown; + edRelayBandwidthBurst: TEdit; + udRelayBandwidthBurst: TUpDown; + meMyFamily: TMemo; + tsHs: TTabSheet; + sgHsPorts: TStringGrid; + sgHs: TStringGrid; + gbHsEdit: TGroupBox; + lbHsSocket: TLabel; + lbHsVirtualPort: TLabel; + lbHsVersion: TLabel; + lbHsNumIntroductionPoints: TLabel; + lbRendPostPeriod: TLabel; + lbMinutes: TLabel; + lbHsMaxStreams: TLabel; + lbHsName: TLabel; + cbxHsAddress: TComboBox; + cbxHsVersion: TComboBox; + cbHsMaxStreams: TCheckBox; + edHsName: TEdit; + edHsNumIntroductionPoints: TEdit; + udHsNumIntroductionPoints: TUpDown; + edHsMaxStreams: TEdit; + udHsMaxStreams: TUpDown; + udRendPostPeriod: TUpDown; + edRendPostPeriod: TEdit; + edHsRealPort: TEdit; + udHsRealPort: TUpDown; + edHsVirtualPort: TEdit; + udHsVirtualPort: TUpDown; + tsLists: TTabSheet; + lbSeconds4: TLabel; + lbTotalHosts: TLabel; + lbTrackHostExitsExpire: TLabel; + lbTotalNodesList: TLabel; + meTrackHostExits: TMemo; + cbUseTrackHostExits: TCheckBox; + cbEnableNodesList: TCheckBox; + meNodesList: TMemo; + edTrackHostExitsExpire: TEdit; + udTrackHostExitsExpire: TUpDown; + lbTotalMyFamily: TLabel; + tmConsensus: TTimer; + miFilterOptions: TMenuItem; + miDelimiter19: TMenuItem; + miFilterHideUnused: TMenuItem; + miFilterScrollTop: TMenuItem; + mnRouters: TPopupMenu; + miRtCopy: TMenuItem; + miRtCopyNickname: TMenuItem; + miRtCopyIPv4: TMenuItem; + miRtCopyFingerprint: TMenuItem; + miRtRelayInfo: TMenuItem; + lbFilterCount: TLabel; + lbFilterEntry: TLabel; + lbFilterMiddle: TLabel; + lbFilterExit: TLabel; + miClearFilterExit: TMenuItem; + miDelimiter20: TMenuItem; + lbFavoritesChar: TLabel; + lbFavoritesEntry: TLabel; + lbFavoritesMiddle: TLabel; + lbFavoritesExit: TLabel; + lbExcludeNodes: TLabel; + lbExcludeChar: TLabel; + miDelimiter21: TMenuItem; + miClearRouters: TMenuItem; + miClearRoutersEntry: TMenuItem; + miClearRoutersMiddle: TMenuItem; + miClearRoutersExit: TMenuItem; + miDelimiter22: TMenuItem; + miClearRoutersFavorites: TMenuItem; + miClearRoutersExclude: TMenuItem; + lbNodesListType: TLabel; + cbxNodesListType: TComboBox; + miRtCopyIPv6: TMenuItem; + miDetailsCopyIPv6: TMenuItem; + paCircuits: TPanel; + tmCircuits: TTimer; + mnCircuits: TPopupMenu; + miDestroyCircuit: TMenuItem; + miFilterSelectRow: TMenuItem; + miRoutersOptions: TMenuItem; + miDelimiter23: TMenuItem; + miRoutersSelectRow: TMenuItem; + miRoutersScrollTop: TMenuItem; + sgStreams: TStringGrid; + sgCircuitInfo: TStringGrid; + lbDetailsTime: TLabel; + lbNodesListTypeCaption: TLabel; + sgCircuits: TStringGrid; + miCircuitsDestroy: TMenuItem; + miDestroyStreams: TMenuItem; + miCircuitsSort: TMenuItem; + miCircuitsSortID: TMenuItem; + miCircuitsSortPurpose: TMenuItem; + miCircuitsSortStreams: TMenuItem; + miResetGuards: TMenuItem; + miShowCircuits: TMenuItem; + miCircuitOptions: TMenuItem; + miDelimiter24: TMenuItem; + miShowBridge: TMenuItem; + lbTotalBridges: TLabel; + miRtSaveDefault: TMenuItem; + miRtResetFilter: TMenuItem; + miDelimiter25: TMenuItem; + miDelimiter26: TMenuItem; + lbFavoritesTotal: TLabel; + miRtFilters: TMenuItem; + miRtFiltersType: TMenuItem; + miRtFiltersCountry: TMenuItem; + miRtFiltersWeight: TMenuItem; + miShowAuthority: TMenuItem; + lbPorts: TLabel; + cbDirCache: TCheckBox; + cbListenIPv6: TCheckBox; + cbAssumeReachable: TCheckBox; + lbAddress: TLabel; + cbUseAddress: TCheckBox; + edAddress: TEdit; + lbStatusProxyAddrCaption: TLabel; + lbStatusProxyAddr: TLabel; + miCircuitFilter: TMenuItem; + miCircOneHop: TMenuItem; + miCircInternal: TMenuItem; + miCircExit: TMenuItem; + miCircHsClientDir: TMenuItem; + miCircHsClientIntro: TMenuItem; + miCircHsClientRend: TMenuItem; + miCircHsServiceDir: TMenuItem; + miCircHsServiceIntro: TMenuItem; + miCircHsServiceRend: TMenuItem; + miCircHsVanguards: TMenuItem; + miCircPathBiasTesting: TMenuItem; + miCircTesting: TMenuItem; + miCircCircuitPadding: TMenuItem; + miCircMeasureTimeout: TMenuItem; + miCircOther: TMenuItem; + miHideCircuitsWithoutStreams: TMenuItem; + miAlwaysShowExitCircuit: TMenuItem; + lbCircuitsCount: TLabel; + lbStreamsCount: TLabel; + mnStreams: TPopupMenu; + miStreamsSort: TMenuItem; + miStreamsSortStreams: TMenuItem; + miStreamsSortID: TMenuItem; + miStreamsSortTarget: TMenuItem; + miStreamsDestroyStream: TMenuItem; + miStreamsOpenInBrowser: TMenuItem; + miDelimiter28: TMenuItem; + miDelimiter27: TMenuItem; + miStreamsBindToExitNode: TMenuItem; + cbUseHiddenServiceVanguards: TCheckBox; + lbVanguardLayerType: TLabel; + cbxVanguardLayerType: TComboBox; + miLoadCachedRoutersOnStartup: TMenuItem; + miUpdateIpToCountryCache: TMenuItem; + gbControlAuth: TGroupBox; + lbControlPort: TLabel; + lbAuthMetod: TLabel; + lbControlPassword: TLabel; + imGeneratePassword: TImage; + edControlPort: TEdit; + udControlPort: TUpDown; + cbxAuthMetod: TComboBox; + edControlPassword: TEdit; + gbInterface: TGroupBox; + cbStayOnTop: TCheckBox; + cbShowBalloonOnlyWhenHide: TCheckBox; + cbShowBalloonHint: TCheckBox; + cbMinimizeOnClose: TCheckBox; + cbMinimizeOnStartup: TCheckBox; + cbConnectOnStartup: TCheckBox; + cbRestartOnControlFail: TCheckBox; + cbNoDesktopBorders: TCheckBox; + cbRememberEnlargedPosition: TCheckBox; + gbOptions: TGroupBox; + lbMaxCircuitDirtiness: TLabel; + lbSeconds1: TLabel; + lbCircuitBuildTimeout: TLabel; + lbSeconds2: TLabel; + lbSeconds3: TLabel; + lbNewCircuitPeriod: TLabel; + cbAvoidDiskWrites: TCheckBox; + cbLearnCircuitBuildTimeout: TCheckBox; + cbEnforceDistinctSubnets: TCheckBox; + edMaxCircuitDirtiness: TEdit; + udMaxCircuitDirtiness: TUpDown; + edNewCircuitPeriod: TEdit; + udNewCircuitPeriod: TUpDown; + edCircuitBuildTimeout: TEdit; + udCircuitBuildTimeout: TUpDown; + cbUseOpenDNS: TCheckBox; + cbUseOpenDNSOnlyWhenUnknown: TCheckBox; + miStreamsSortTrack: TMenuItem; + miSelectExitCircuitWhetItChanges: TMenuItem; + lsTray: TImageList; + paButtons: TPanel; + sbShowLog: TSpeedButton; + sbShowOptions: TSpeedButton; + paLog: TPanel; + meLog: TMemo; + sbShowStatus: TSpeedButton; + sbShowCircuits: TSpeedButton; + sbShowRouters: TSpeedButton; + sbDecreaseForm: TSpeedButton; + btnChangeCircuit: TButton; + imExitFlag: TImage; + lbExitCountryCaption: TLabel; + lbExitIpCaption: TLabel; + lbExitIp: TLabel; + lbExitCountry: TLabel; + cbUseNetworkCache: TCheckBox; + lbTheme: TLabel; + cbxThemes: TComboBox; + btnSwitchTor: TButton; + lsMain: TImageList; + lbLanguage: TLabel; + cbxLanguage: TComboBox; + cbUseMyFamily: TCheckBox; + cbxRoutersQuery: TComboBox; + edRoutersQuery: TEdit; + cbxBridgeDistribution: TComboBox; + lbBridgeDistribution: TLabel; + miShowRecommend: TMenuItem; + miAbout: TMenuItem; + miShowDirMirror: TMenuItem; + miRtFiltersQuery: TMenuItem; + miDisableFiltersOnUserQuery: TMenuItem; + miClearRoutersAbsent: TMenuItem; + cbHideIPv6Addreses: TCheckBox; + miClearRoutersIncorrect: TMenuItem; + sgStreamsInfo: TStringGrid; + miDelimiter29: TMenuItem; + miRtAddToNodesList: TMenuItem; + miDelimiter30: TMenuItem; + miTplLoadExcludes: TMenuItem; + miTplLoadCountries: TMenuItem; + miTplLoadRouters: TMenuItem; + miTplSaveCountries: TMenuItem; + miTplSaveRouters: TMenuItem; + miTplSaveExcludes: TMenuItem; + miTplSave: TMenuItem; + miTplLoad: TMenuItem; + miTplSaveSA: TMenuItem; + miDelimiter31: TMenuItem; + miDelimiter32: TMenuItem; + miTplLoadSA: TMenuItem; + miDelimiter33: TMenuItem; + miCircSA: TMenuItem; + miDelimiter34: TMenuItem; + miRtFilterSA: TMenuItem; + miCircUA: TMenuItem; + miTplSaveUA: TMenuItem; + miTplLoadUA: TMenuItem; + miRtFilterUA: TMenuItem; + miIgnoreTplLoadParamsOutsideTheFilter: TMenuItem; + miNotLoadEmptyTplData: TMenuItem; + miDelimiter35: TMenuItem; + miGetBridgesSite: TMenuItem; + miGetBridgesEmail: TMenuItem; + miDelimiter36: TMenuItem; + miDestroyExitCircuits: TMenuItem; + miCircuitsUpdateSpeed: TMenuItem; + miCircuitsUpdateHigh: TMenuItem; + miCircuitsUpdateNormal: TMenuItem; + miCircuitsUpdateLow: TMenuItem; + miDelimiter37: TMenuItem; + miCircuitsUpdateManual: TMenuItem; + miDelimiter38: TMenuItem; + miCircuitsUpdateNow: TMenuItem; + miDelimiter39: TMenuItem; + cbStrictNodes: TCheckBox; + tsOther: TTabSheet; + miReplaceDisabledFavoritesWithCountries: TMenuItem; + miDelimiter40: TMenuItem; + lbULCirc: TLabel; + lbDLCirc: TLabel; + miCircuitsSortDL: TMenuItem; + miCircuitsSortUL: TMenuItem; + miDelimiter41: TMenuItem; + miShowCircuitsTraffic: TMenuItem; + miShowStreamsTraffic: TMenuItem; + mnStreamsInfo: TPopupMenu; + miStreamsInfoDestroyStream: TMenuItem; + miDelimiter42: TMenuItem; + miStreamsInfoSort: TMenuItem; + miStreamsInfoSortID: TMenuItem; + miStreamsInfoSortSource: TMenuItem; + miStreamsInfoSortPurpose: TMenuItem; + miStreamsInfoSortDL: TMenuItem; + miStreamsInfoSortUL: TMenuItem; + miStreamsSortDL: TMenuItem; + miStreamsSortUL: TMenuItem; + miStreamsInfoSortDest: TMenuItem; + miShowStreamsInfo: TMenuItem; + cbNoDesktopBordersOnlyEnlarged: TCheckBox; + lbMaxClientCircuitsPending: TLabel; + edMaxClientCircuitsPending: TEdit; + udMaxClientCircuitsPending: TUpDown; + miDelimiter43: TMenuItem; + miDelete: TMenuItem; + miFind: TMenuItem; + miLogFind: TMenuItem; + FindDialog: TFindDialog; + miRtCopyBridgeIPv4: TMenuItem; + miDetailsCopyBridgeIPv4: TMenuItem; + miDelimiter44: TMenuItem; + miDelimiter45: TMenuItem; + gbNetworkScanner: TGroupBox; + tmScanner: TTimer; + miClearServerCache: TMenuItem; + miDelimiter47: TMenuItem; + miCacheOperations: TMenuItem; + miDelimiter46: TMenuItem; + miShowAlive: TMenuItem; + miDelimiter49: TMenuItem; + miDelimiter50: TMenuItem; + miShowNodesUA: TMenuItem; + miDelimiter51: TMenuItem; + miClearPingCache: TMenuItem; + miClearAliveCache: TMenuItem; + lbFilterExclude: TLabel; + lbStatusScannerCaption: TLabel; + lbStatusScanner: TLabel; + miShowFlagsHint: TMenuItem; + lbHsState: TLabel; + cbxHsState: TComboBox; + gbTransports: TGroupBox; + sgTransports: TStringGrid; + lbTransports: TLabel; + edTransports: TEdit; + lbTransportsHandler: TLabel; + edTransportsHandler: TEdit; + lbHandlerParams: TLabel; + meHandlerParams: TMemo; + mnTransports: TPopupMenu; + miTransportsInsert: TMenuItem; + miTransportsDelete: TMenuItem; + miDelimiter53: TMenuItem; + miTransportsClear: TMenuItem; + miDelimiter52: TMenuItem; + miTransportsOpenDir: TMenuItem; + miTransportsReset: TMenuItem; + lbTransportType: TLabel; + cbxTransportType: TComboBox; + lbBridgesType: TLabel; + cbxBridgesType: TComboBox; + cbxBridgesList: TComboBox; + lbBridgesList: TLabel; + miDelimiter54: TMenuItem; + miRequestIPv6Bridges: TMenuItem; + miRequestObfuscatedBridges: TMenuItem; + miGetBridgesTelegram: TMenuItem; + miPreferWebTelegram: TMenuItem; + miDelimiter55: TMenuItem; + miClearBridgesNotAlive: TMenuItem; + lbScanBridgesStatus: TLabel; + miClearBridges: TMenuItem; + miClearBridgesAll: TMenuItem; + miDelimiter56: TMenuItem; + miClearBridgesNonCached: TMenuItem; + miResetGuardsDefault: TMenuItem; + miResetGuardsAll: TMenuItem; + miDelimiter57: TMenuItem; + miResetGuardsRestricted: TMenuItem; + miResetGuardsBridges: TMenuItem; + cbUsePreferredBridge: TCheckBox; + edPreferredBridge: TEdit; + lbPreferredBridge: TLabel; + cbClearPreviousSearchQuery: TCheckBox; + miRtSelectAsBridge: TMenuItem; + miServerCopyIPv6: TMenuItem; + miServerCopyBridgeIPv6: TMenuItem; + miRtCopyBridgeIpv6: TMenuItem; + miDetailsCopyBridgeIPv6: TMenuItem; + miDisableSelectionUnSuitableAsBridge: TMenuItem; + miRtSelectAsBridgeIPv4: TMenuItem; + miRtSelectAsBridgeIPv6: TMenuItem; + miRtDisableBridges: TMenuItem; + btnFindPreferredBridge: TButton; + miClearBridgesCacheAll: TMenuItem; + lbFullScanInterval: TLabel; + lbHours1: TLabel; + lbNonResponsedScanInterval: TLabel; + lbHours2: TLabel; + cbAutoScanNewNodes: TCheckBox; + cbEnableDetectAliveNodes: TCheckBox; + cbEnablePingMeasure: TCheckBox; + edFullScanInterval: TEdit; + udFullScanInterval: TUpDown; + edNonResponsedScanInterval: TEdit; + udNonResponsedScanInterval: TUpDown; + lbPartialScansCounts: TLabel; + edPartialScansCounts: TEdit; + udPartialScansCounts: TUpDown; + lbScanMaxThread: TLabel; + lbScanPortAttempts: TLabel; + lbScanPortionSize: TLabel; + edScanMaxThread: TEdit; + udScanMaxThread: TUpDown; + edScanPortAttempts: TEdit; + udScanPortAttempts: TUpDown; + edScanPortionSize: TEdit; + udScanPortionSize: TUpDown; + lbScanPingAttempts: TLabel; + edScanPingAttempts: TEdit; + udScanPingAttempts: TUpDown; + lbScanPortTimeout: TLabel; + edScanPortTimeout: TEdit; + udScanPortTimeout: TUpDown; + lbMiliseconds2: TLabel; + lbScanPingTimeout: TLabel; + lbMiliseconds1: TLabel; + edScanPingTimeout: TEdit; + udScanPingTimeout: TUpDown; + lbDelayBetweenAttempts: TLabel; + lbMiliseconds3: TLabel; + edDelayBetweenAttempts: TEdit; + udDelayBetweenAttempts: TUpDown; + lbScanPortionTimeout: TLabel; + edScanPortionTimeout: TEdit; + udScanPortionTimeout: TUpDown; + lbMiliseconds4: TLabel; + miDelimiter48: TMenuItem; + gbTotal: TGroupBox; + lbTotalDLCaption: TLabel; + lbTotalULCaption: TLabel; + lbTotalDL: TLabel; + lbTotalUL: TLabel; + tmSaveTotals: TTimer; + miDelimiter60: TMenuItem; + miResetTotalsCounter: TMenuItem; + miResetScannerSchedule: TMenuItem; + miLogSeparate: TMenuItem; + miDelimiter59: TMenuItem; + miLogSeparateNone: TMenuItem; + miLogSeparateMonth: TMenuItem; + miLogSeparateDay: TMenuItem; + miDelimiter58: TMenuItem; + miReverseConditions: TMenuItem; + miStopScan: TMenuItem; + miStartScan: TMenuItem; + miScanNewNodes: TMenuItem; + miScanCachedBridges: TMenuItem; + miScanNonResponsed: TMenuItem; + miScanAll: TMenuItem; + miManualDetectAliveNodes: TMenuItem; + miManualPingMeasure: TMenuItem; + gbAutoSelectRouters: TGroupBox; + miDelimiter61: TMenuItem; + miClearBridgesCached: TMenuItem; + miClearBridgeCacheUnnecessary: TMenuItem; + miDelimiter62: TMenuItem; + miDisableFiltersOn: TMenuItem; + miDisableFiltersOnAuthorityOrBridge: TMenuItem; + miClearUnusedNetworkCache: TMenuItem; + miClearFilterExclude: TMenuItem; + miConvertNodes: TMenuItem; + miEnableConvertNodesOnIncorrectClear: TMenuItem; + miEnableConvertNodesOnAddToNodesList: TMenuItem; + miDelimiter63: TMenuItem; + miIgnoreConvertExcludeNodes: TMenuItem; + miConvertIpNodes: TMenuItem; + miConvertCidrNodes: TMenuItem; + miConvertCountryNodes: TMenuItem; + miDelimiter64: TMenuItem; + miAvoidAddingIncorrectNodes: TMenuItem; + lbMaxAdvertisedBandwidth: TLabel; + edMaxAdvertisedBandwidth: TEdit; + udMaxAdvertisedBandwidth: TUpDown; + lbSpeed4: TLabel; + edAutoSelExitCount: TEdit; + udAutoSelExitCount: TUpDown; + edAutoSelMiddleCount: TEdit; + udAutoSelMiddleCount: TUpDown; + edAutoSelEntryCount: TEdit; + udAutoSelEntryCount: TUpDown; + lbAutoSelEntry: TLabel; + lbAutoSelMiddle: TLabel; + lbAutoSelExit: TLabel; + miEnableConvertNodesOnRemoveFromNodesList: TMenuItem; + cbAutoSelNodesWithPingOnly: TCheckBox; + cbAutoSelUniqueNodes: TCheckBox; + cbAutoSelStableOnly: TCheckBox; + lbAutoSelMaxPing: TLabel; + lbAutoSelMinWeight: TLabel; + lbSpeed5: TLabel; + lbMiliseconds5: TLabel; + edAutoSelMaxPing: TEdit; + udAutoSelMaxPing: TUpDown; + edAutoSelMinWeight: TEdit; + udAutoSelMinWeight: TUpDown; + lbCount1: TLabel; + lbCount2: TLabel; + lbCount3: TLabel; + cbAutoSelFilterCountriesOnly: TCheckBox; + lbAutoSelPriority: TLabel; + cbxAutoSelPriority: TComboBox; + pbTraffic: TPaintBox; + mnTraffic: TPopupMenu; + miTrafficPeriod: TMenuItem; + miSelectGraph: TMenuItem; + miPeriod1m: TMenuItem; + miPeriod5m: TMenuItem; + miPeriod15m: TMenuItem; + miPeriod30m: TMenuItem; + miPeriod1h: TMenuItem; + miPeriod3h: TMenuItem; + miPeriod6h: TMenuItem; + miPeriod12h: TMenuItem; + miPeriod24h: TMenuItem; + miSelectGraphDL: TMenuItem; + miSelectGraphUL: TMenuItem; + tmTraffic: TTimer; + cbAutoSelMiddleNodesWithoutDir: TCheckBox; + function CheckCacheOpConfirmation(OpStr: string): Boolean; + function CheckVanguards(Silent: Boolean = False): Boolean; + function CheckNetworkOptions: Boolean; + function CheckHsPorts: Boolean; + function CheckHsTable: Boolean; + function CheckTransports: Boolean; + function CheckSimilarPorts: Boolean; + function NodesToFavorites(NodesID: Integer): Integer; + function FavoritesToNodes(FavoritesID: Integer): Integer; + function GetFavoritesLabel(FavoritesID: Integer): TLabel; + function GetFilterLabel(FilterID: Integer): TLabel; + function GetFormPositionStr: string; + function FindTrackHost(Host: string): Boolean; + function FindInRanges(IpStr: string): string; + function RouterInNodesList(RouterID: string; RouterInfo: TRouterInfo; NodeType: TNodeType; SkipCodes: Boolean = False): Boolean; + function GetTrackHostDomains(Host: string; OnlyExists: Boolean): string; + function GetControlEvents: string; + function GetCheckBorders: Boolean; + function GetTorHs: Integer; + function LoadHiddenServices(ini: TMemIniFile): Integer; + function PreferredBridgeFound: Boolean; + function CheckRouterFlags(NodeTypeID: Integer; RouterInfo: TRouterInfo): Boolean; + procedure UpdateBridgesControls(UpdateList: Boolean = True; UpdateUserBridges: Boolean = True); + procedure ShowRoutersParamsHint; + procedure CalculateFilterNodes(AlwaysUpdate: Boolean = True); + procedure CalculateTotalNodes(AlwaysUpdate: Boolean = True); + procedure CloseCircuit(CircuitID: string; AutoUpdate: Boolean = True); + procedure CloseStream(StreamID: string); + procedure CloseStreams(CircuitID: string; FindTarget: Boolean = False; TargetID: string = ''); + procedure CheckOptionsChanged; + procedure LoadNetworkCache; + procedure SaveNetworkCache; + procedure LoadBridgesCache; + procedure SaveBridgesCache; + procedure SetServerPort(PortControl: TUpDown); + procedure SetNodes(FilterEntry, FilterMiddle, FilterExit, FavoritesEntry, FavoritesMiddle, FavoritesExit, ExcludeNodes: string); + procedure ShowFilter; + procedure ApplyOptions(AutoResolveErrors: Boolean = False); + procedure InsertNodesMenu(ParentMenu: TMenuItem; NodeID: string; AutoSave: Boolean = True); + procedure InsertNodesListMenu(ParentMenu: TmenuItem; NodeID: string; NodeTypeID: Integer; AutoSave: Boolean = True); + procedure InsertNodesToDeleteMenu(ParentMenu: TmenuItem; NodeID: string; AutoSave: Boolean = True); + procedure ChangeFilter; + procedure ChangeRouters; + procedure UpdateRoutersAfterFilterUpdate; + procedure UpdateOptionsAfterRoutersUpdate; + procedure UpdateRoutersAfterBridgesUpdate; + procedure SaveRoutersFilterdata(Default: Boolean = False; SaveFilters: Boolean = True); + procedure LoadRoutersFilterData(Data: string; AutoUpdate: Boolean = True; ResetCustomFilter: Boolean = False); + procedure ChangeHsTable(Param: Integer); + procedure ChangeTransportTable(Param: Integer); + procedure LoadOptions; + procedure GetTorVersion; + procedure CheckAuthMetodContols; + procedure CheckAutoSelControls; + procedure CheckFilterMode; + procedure CheckHsVersion; + procedure CheckStatusControls; + procedure CheckOpenPorts(PortSpin: TUpDown; IP: string; var PortStr: string); + procedure CheckServerControls; + procedure CheckScannerControls; + procedure CheckShowRouters; + procedure CheckCachedFiles; + procedure ClearFilter(NodeType: TNodeType; Silent: Boolean = True); + procedure ClearRouters(NodeType: TNodeType; Silent: Boolean = True); + procedure ControlPortConnect; + procedure LogListenerStart(hStdOut: THandle); + procedure CheckVersionStart(hStdOut: THandle); + procedure DecreaseFormSize(AutoRestore: Boolean = True); + procedure ChangeButtonsCaption; + procedure UpdateFormSize; + procedure HsMaxStreamsEnable(State: Boolean); + procedure HsPortsEnable(State: Boolean); + procedure TransportsEnable(State: Boolean); + procedure ServerAddressEnable(State: Boolean); + procedure BridgesCheckControls; + procedure EnableOptionButtons(State: Boolean = True); + procedure FindInFilter(IpAddr: string); + procedure FindInRouters(RouterID: string); + procedure FindInCircuits(CircID, NodeID: string; AutoSelect: Boolean = False); + procedure SendDataThroughProxy; + procedure GetDNSExternalAddress(UpdateExternalIp: Boolean = True); + procedure GetServerInfo(UpdateExternalIp: Boolean = True); + procedure UpdateServerInfo; + procedure IncreaseFormSize; + procedure SetDownState; + procedure InitPortForwarding(Test: Boolean); + procedure ResetFocus; + procedure ScanStart(ScanType: TScanType; ScanPurpose: TScanPurpose); + procedure ScanNetwork(ScanType: TScanType; ScanPurpose: TScanPurpose); + procedure LoadConsensus; + procedure LoadDescriptors; + procedure CheckCountryIndexInList; + procedure CheckNodesListControls; + procedure CheckFavoritesState(FavoritesID: Integer = -1); + procedure LoadNodesList(UseDic: Boolean = True; NodesStr: string = ''); + procedure SaveNodesList(NodesID: Integer); + procedure LoadFilterTotals; + procedure LoadRoutersCountries; + procedure MaxMemInQueuesEnable(State: Boolean); + procedure NumCPUsEnable(State: Boolean); + procedure OpenMetricsUrl(Page, Query: string); + procedure ProxyParamCheck; + procedure RelayBandwidthEnable(State: Boolean); + procedure ReloadTorConfig; + procedure CheckRequiredFiles; + procedure SetIconsColor; + procedure SaveHiddenServices(ini: TMemIniFile); + procedure UpdateConfigVersion; + procedure LoadUserBridges(ini: TMemIniFile); + procedure LoadBuiltinBridges(UpdateBridges, UpdateList: Boolean; ListName: string = ''); + procedure ResetTransports; + procedure LoadTransportsData(Data: TStringList); + procedure LoadUserOverrides; + procedure SaveReachableAddresses(ini: TMemIniFile); + procedure SaveProxyData(ini: TMemIniFile); + procedure SaveTransportsData(ini: TMemIniFile; ReloadServerTransport: Boolean); + procedure SaveBridgesData(ini: TMemIniFile); + procedure SetButtonGlyph(ls: TImageList; Index: Integer; Button: TSpeedButton); + procedure LoadStaticArray(Data: array of TStaticPair); + procedure ResetOptions; + procedure RestartTor(RestartCode: Byte = 0); + procedure RestoreForm; + procedure SelectHs; + procedure SelectHsPorts; + procedure SelectTransports; + procedure CheckStreamsControls; + procedure SendCommand(const cmd: string); + procedure CheckSelectRowOptions(aSg: TStringGrid; Checked: Boolean; Save: Boolean = False); + procedure SetButtonsProp(Btn: TSpeedButton; LeftSmall, LeftBig: Integer); + procedure SetVisible(vOptions, vLog, vStatus, vCircuits, vRouters, vButtons: Boolean); + procedure ShowBalloon(Msg: string; Title: string = ''; Notice: Boolean = False; MsgType: TMsgType = mtInfo); + procedure ShowCircuits; + procedure ShowStreams(CircID: string); + procedure ShowStreamsInfo(CircID, Target: string); + procedure ShowCircuitInfo(CircID: string); + procedure ShowRouters; + procedure CheckNodesListState(NodeTypeID: Integer); + procedure CheckCircuitExists(CircID: string; UpdateStreamsCount: Boolean = False); + procedure CheckCircuitStreams(CircID: string; TargetStreams: Integer); + procedure SelectRowPopup(aSg: TStringGrid; aPopup: TPopupMenu); + procedure SaveTrackHostExits(ini: TMemIniFile; UseDic: Boolean = False); + procedure SaveServerOptions(ini: TMemIniFile); + procedure SetOptionsEnable(State: Boolean); + procedure StartTor(AutoResolveErrors: Boolean = False); + procedure StopTor; + procedure SetSortMenuData(aSg: TStringGrid); + procedure SetCustomFilterStyle(CustomFilterID: Integer); + procedure ResetGuards(GuardType: TGuardType); + procedure MyFamilyEnable(State: Boolean); + procedure TransportPortEnable(State: Boolean); + procedure FastAndStableEnable(State: Boolean; AutoCheck: Boolean = True); + procedure HsControlsEnable(State: Boolean); + procedure CheckLogAutoScroll(AlwaysUpdate: Boolean = False); + procedure UpdateBridgeCopyMenu(Menu: TMenuItem; RouterID: string; Router: TRouterInfo; UseIPv6: Boolean); + procedure UpdateHs; + procedure UpdateHsPorts; + procedure UpdateTransports; + procedure UseDirPortEnable(State: Boolean); + procedure SaveSortData; + procedure UpdateScaleFactor; + procedure CheckTorAutoStart; + procedure CheckPrefferedBridgeExclude(RouterID: string); + function PrepareNodesToRemove(Data: string; NodeType: TNodeType; out Nodes: ArrOfNodes): Boolean; + procedure RemoveFromNodesListWithConvert(Nodes: ArrOfNodes; NodeType: TNodeType); + procedure SortPrepare(aSg: TStringGrid; ACol: Integer; ManualSort: Boolean = False); + procedure GridSort(aSg: TStringGrid); + procedure SelectLogSeparater(Sender: TObject); + procedure SelectLogScrollbar(Sender: TObject); + procedure StartScannerManual(Sender: TObject); + procedure SelectCircuitsSort(Sender: TObject); + procedure ShowTrafficSelect(Sender: TObject); + procedure SelectStreamsSort(Sender: TObject); + procedure SelectStreamsInfoSort(Sender: TObject); + procedure ClearScannerCacheClick(Sender: TObject); + procedure SetLogLevel(Sender: TObject); + procedure EditMenuClick(Sender: TObject); + procedure ConnectOnStartupTimer(Sender: TObject); + procedure CursorStopTimer(Sender: TObject); + procedure RestartTimer(Sender: TObject); + procedure SetCircuitsFilter(Sender: TObject); + procedure RoutersAutoSelectClick(Sender: TObject); + procedure ClearFilterClick(Sender: TObject); + procedure ClearRoutersClick(Sender: TObject); + procedure SetRoutersFilter(Sender: TObject); + procedure SetRoutersFilterState(Sender: TObject); + procedure SetLogScrollBar(ScrollType: Byte; Menu: TMenuItem = nil); + procedure EditMenuPopup(Sender: TObject); + procedure FilterDeleteClick(Sender: TObject); + procedure FilterLoadClick(Sender: TObject); + procedure SelectNodeAsBridge(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure lbExitCountryDblClick(Sender: TObject); + procedure lbExitMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure lbServerInfoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure EditChange(Sender: TObject); + procedure MemoExit(Sender: TObject); + procedure SpinChanging(Sender: TObject; var AllowChange: Boolean); + procedure SetCircuitsUpdateInterval(Sender: TObject); + procedure MainButtonssMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure AddToNodesListClick(Sender: TObject); + procedure RemoveFromNodeListClick(Sender: TObject); + procedure ScanThreadTerminate(Sender: TObject); + procedure LogThreadTerminate(Sender: TObject); + procedure VersionCheckerThreadTerminate(Sender: TObject); + procedure ControlThreadTerminate(Sender: TObject); + procedure TConsensusThreadTerminate(Sender: TObject); + procedure TDescriptorsThreadTerminate(Sender: TObject); + procedure btnApplyOptionsClick(Sender: TObject); + procedure btnCancelOptionsClick(Sender: TObject); + procedure btnCreateProfileClick(Sender: TObject); + procedure cbEnableNodesListClick(Sender: TObject); + procedure cbHsMaxStreamsClick(Sender: TObject); + procedure cbLearnCircuitBuildTimeoutClick(Sender: TObject); + procedure cbUseMaxMemInQueuesClick(Sender: TObject); + procedure cbUseNumCPUsClick(Sender: TObject); + procedure cbUseRelayBandwidthClick(Sender: TObject); + procedure cbShowBalloonHintClick(Sender: TObject); + procedure cbStayOnTopClick(Sender: TObject); + procedure cbUseTrackHostExitsClick(Sender: TObject); + procedure cbUseBridgesClick(Sender: TObject); + procedure cbUseDirPortClick(Sender: TObject); + procedure cbUseProxyClick(Sender: TObject); + procedure cbUseUPnPClick(Sender: TObject); + procedure cbxBridgeTypeChange(Sender: TObject); + procedure cbxExitPolicyTypeChange(Sender: TObject); + procedure cbxHsAddressChange(Sender: TObject); + procedure cbxHsVersionChange(Sender: TObject); + procedure cbxProxyTypeChange(Sender: TObject); + procedure cbxServerModeChange(Sender: TObject); + procedure cbxSocksHostDropDown(Sender: TObject); + procedure edHsChange(Sender: TObject); + procedure edTransportsChange(Sender: TObject); + procedure edReachableAddressesKeyPress(Sender: TObject; var Key: Char); + procedure MemoKeyPress(Sender: TObject; var Key: Char); + procedure imGeneratePasswordClick(Sender: TObject); + procedure imUPnPTestClick(Sender: TObject); + procedure lbStatusProxyAddrClick(Sender: TObject); + procedure lbUserDirClick(Sender: TObject); + procedure meNodesListChange(Sender: TObject); + procedure meTrackHostExitsChange(Sender: TObject); + procedure MetricsInfo(Sender: TObject); + procedure miAutoClearClick(Sender: TObject); + procedure miAutoScrollClick(Sender: TObject); + procedure miChangeCircuitClick(Sender: TObject); + procedure miClearDNSCacheClick(Sender: TObject); + procedure miExitClick(Sender: TObject); + procedure miHsDeleteClick(Sender: TObject); + procedure miHsInsertClick(Sender: TObject); + procedure miOpenFileLogClick(Sender: TObject); + procedure miDetailsRelayInfoClick(Sender: TObject); + procedure miSafeLoggingClick(Sender: TObject); + procedure miSaveTemplateClick(Sender: TObject); + procedure miServerInfoClick(Sender: TObject); + procedure miShowLogClick(Sender: TObject); + procedure miShowOptionsClick(Sender: TObject); + procedure miShowStatusClick(Sender: TObject); + procedure miSwitchTorClick(Sender: TObject); + procedure miWordWrapClick(Sender: TObject); + procedure miWriteLogFileClick(Sender: TObject); + procedure mnDetailsPopup(Sender: TObject); + procedure mnFilterPopup(Sender: TObject); + procedure mnHsPopup(Sender: TObject); + procedure mnLogPopup(Sender: TObject); + procedure SelectorMenuClick(Sender: TObject); + procedure sgFilterDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure sgFilterKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure sgFilterKeyPress(Sender: TObject; var Key: Char); + procedure sgFilterMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure sgHsDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure sgHsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure sgHsPortsDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure sgHsPortsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure sgHsPortsSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + procedure sgHsSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + procedure tiTrayClick(Sender: TObject); + procedure tmUpdateIpTimer(Sender: TObject); + procedure udHsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure miHsClearClick(Sender: TObject); + procedure edControlPasswordDblClick(Sender: TObject); + procedure miHsCopyOnionClick(Sender: TObject); + procedure miHsOpenDirClick(Sender: TObject); + procedure miStatAggregateClick(Sender: TObject); + procedure sgFilterMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure sgFilterSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + procedure cbEnableSocksClick(Sender: TObject); + procedure sgRoutersDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure miShowRoutersClick(Sender: TObject); + procedure sgRoutersFixedCellClick(Sender: TObject; ACol, ARow: Integer); + procedure btnShowNodesClick(Sender: TObject); + procedure cbeRoutersCountrySelect(Sender: TObject); + procedure cbxRoutersCountryEnter(Sender: TObject); + procedure udRoutersWeightClick(Sender: TObject; Button: TUDBtnType); + procedure edRoutersWeightKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure sgFilterFixedCellClick(Sender: TObject; ACol, ARow: Integer); + procedure tmConsensusTimer(Sender: TObject); + procedure miFilterHideUnusedClick(Sender: TObject); + procedure miFilterScrollTopClick(Sender: TObject); + procedure sgRoutersKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure sgRoutersSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + procedure sgRoutersMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure sgRoutersDblClick(Sender: TObject); + procedure CopyCaptionToClipboard(Sender: TObject); + procedure mnRoutersPopup(Sender: TObject); + procedure miRtRelayInfoClick(Sender: TObject); + procedure sgRoutersMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure sgRoutersKeyPress(Sender: TObject; var Key: Char); + procedure paRoutersClick(Sender: TObject); + procedure lbClientVersionClick(Sender: TObject); + procedure meMyFamilyChange(Sender: TObject); + procedure tmCircuitsTimer(Sender: TObject); + procedure sgCircuitsSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + procedure miFilterSelectRowClick(Sender: TObject); + procedure miRoutersSelectRowClick(Sender: TObject); + procedure miRoutersScrollTopClick(Sender: TObject); + procedure sgCircuitsDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure sgCircuitsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure mnCircuitsPopup(Sender: TObject); + procedure sgStreamsDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure sgCircuitInfoDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure sgCircuitInfoDblClick(Sender: TObject); + procedure sgCircuitInfoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure sgCircuitInfoSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + procedure sgCircuitsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure sgStreamsSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + procedure sgStreamsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure sgCircuitInfoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure miDestroyCircuitClick(Sender: TObject); + procedure miDestroyStreamsClick(Sender: TObject); + procedure sgCircuitInfoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure sgCircuitsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure mnChangeCircuitPopup(Sender: TObject); + procedure sgStreamsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure miShowCircuitsClick(Sender: TObject); + procedure sgHsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure sgHsPortsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure sgHsPortsEnter(Sender: TObject); + procedure sgHsEnter(Sender: TObject); + procedure meBridgesChange(Sender: TObject); + procedure OptionsChange(Sender: TObject); + procedure SetResetGuards(Sender: TObject); + procedure cbxHsAddressDropDown(Sender: TObject); + procedure miRtSaveDefaultClick(Sender: TObject); + procedure miRtResetFilterClick(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure miDetailsUpdateIpClick(Sender: TObject); + procedure ShowFavoritesRouters(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure cbListenIPv6Click(Sender: TObject); + procedure cbDirCacheMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure cbUseAddressClick(Sender: TObject); + procedure cbUseOpenDNSClick(Sender: TObject); + procedure cbUseOpenDNSOnlyWhenUnknownClick(Sender: TObject); + procedure miHideCircuitsWithoutStreamsClick(Sender: TObject); + procedure miAlwaysShowExitCircuitClick(Sender: TObject); + procedure sgStreamsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure mnStreamsPopup(Sender: TObject); + procedure miStreamsDestroyStreamClick(Sender: TObject); + procedure miStreamsOpenInBrowserClick(Sender: TObject); + procedure BindToExitNodeClick(Sender: TObject); + procedure cbUseHiddenServiceVanguardsClick(Sender: TObject); + procedure miLoadCachedRoutersOnStartupClick(Sender: TObject); + procedure miUpdateIpToCountryCacheClick(Sender: TObject); + procedure pcOptionsChange(Sender: TObject); + procedure cbUseNetworkCacheClick(Sender: TObject); + procedure cbUseReachableAddressesClick(Sender: TObject); + procedure miSelectExitCircuitWhetItChangesClick(Sender: TObject); + procedure sgStreamsFixedCellClick(Sender: TObject; ACol, ARow: Integer); + procedure sgCircuitsFixedCellClick(Sender: TObject; ACol, ARow: Integer); + procedure sbShowOptionsClick(Sender: TObject); + procedure sbShowLogClick(Sender: TObject); + procedure sbShowStatusClick(Sender: TObject); + procedure sbShowCircuitsClick(Sender: TObject); + procedure sbShowRoutersClick(Sender: TObject); + procedure sbShowCircuitsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure paButtonsDblClick(Sender: TObject); + procedure cbxThemesDropDown(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure btnSwitchTorClick(Sender: TObject); + procedure sbDecreaseFormClick(Sender: TObject); + procedure cbUseMyFamilyClick(Sender: TObject); + procedure lbExitIpMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure cbxRoutersCountryDropDown(Sender: TObject); + procedure edRoutersQueryKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure miAboutClick(Sender: TObject); + procedure meNodesListExit(Sender: TObject); + procedure cbxAuthMetodChange(Sender: TObject); + procedure cbxThemesChange(Sender: TObject); + procedure cbxRoutersCountryChange(Sender: TObject); + procedure cbxRoutersQueryChange(Sender: TObject); + procedure cbxNodesListTypeChange(Sender: TObject); + procedure miClearRoutersAbsentClick(Sender: TObject); + procedure sgFilterExit(Sender: TObject); + procedure miClearRoutersIncorrectClick(Sender: TObject); + procedure sbShowRoutersMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure sgStreamsInfoSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); + procedure sgStreamsInfoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); + procedure sgStreamsInfoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure sgStreamsInfoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure miTplSaveClick(Sender: TObject); + procedure miTplLoadClick(Sender: TObject); + procedure mnShowNodesChange(Sender: TObject; Source: TMenuItem; Rebuild: Boolean); + procedure miIgnoreTplLoadParamsOutsideTheFilterClick(Sender: TObject); + procedure miNotLoadEmptyTplDataClick(Sender: TObject); + procedure sbShowOptionsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure miGetBridgesSiteClick(Sender: TObject); + procedure miGetBridgesEmailClick(Sender: TObject); + procedure miDestroyExitCircuitsClick(Sender: TObject); + procedure miCircuitsUpdateNowClick(Sender: TObject); + procedure sgStreamsInfoDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); + procedure sgStreamsInfoFixedCellClick(Sender: TObject; ACol, ARow: Integer); + procedure miStreamsInfoDestroyStreamClick(Sender: TObject); + procedure mnStreamsInfoPopup(Sender: TObject); + procedure miShowStreamsInfoClick(Sender: TObject); + procedure cbNoDesktopBordersClick(Sender: TObject); + procedure FindDialogFind(Sender: TObject); + procedure sgStreamsDblClick(Sender: TObject); + procedure tmScannerTimer(Sender: TObject); + procedure cbEnablePingMeasureClick(Sender: TObject); + procedure cbEnableDetectAliveNodesClick(Sender: TObject); + procedure miClearServerCacheClick(Sender: TObject); + procedure mnShowNodesPopup(Sender: TObject); + procedure cbAutoScanNewNodesClick(Sender: TObject); + procedure edRoutersQueryChange(Sender: TObject); + procedure miShowFlagsHintClick(Sender: TObject); + procedure cbxHsStateChange(Sender: TObject); + procedure sgTransportsDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); + procedure sgTransportsKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure sgTransportsMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); + procedure miTransportsOpenDirClick(Sender: TObject); + procedure mnTransportsPopup(Sender: TObject); + procedure miTransportsResetClick(Sender: TObject); + procedure sgTransportsSelectCell(Sender: TObject; ACol, ARow: Integer; + var CanSelect: Boolean); + procedure miTransportsInsertClick(Sender: TObject); + procedure miTransportsDeleteClick(Sender: TObject); + procedure miTransportsClearClick(Sender: TObject); + procedure btnChangeCircuitClick(Sender: TObject); + procedure cbxTransportTypeChange(Sender: TObject); + procedure cbxBridgesTypeChange(Sender: TObject); + procedure cbxBridgesListChange(Sender: TObject); + procedure cbxBridgesTypeKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure cbxBridgesListKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure cbxNodesListTypeKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure cbxBridgesTypeCloseUp(Sender: TObject); + procedure cbxBridgesListCloseUp(Sender: TObject); + procedure miRequestIPv6BridgesClick(Sender: TObject); + procedure miRequestObfuscatedBridgesClick(Sender: TObject); + procedure miGetBridgesTelegramClick(Sender: TObject); + procedure miPreferWebTelegramClick(Sender: TObject); + procedure miClearBridgesNotAliveClick(Sender: TObject); + procedure ClearBridgesAvailableCache(Sender: TObject); + procedure cbUsePreferredBridgeClick(Sender: TObject); + procedure miDisableSelectionUnSuitableAsBridgeClick(Sender: TObject); + procedure miRtDisableBridgesClick(Sender: TObject); + procedure edPreferredBridgeChange(Sender: TObject); + procedure edPreferredBridgeExit(Sender: TObject); + procedure cbUsePreferredBridgeExit(Sender: TObject); + procedure cbUseBridgesExit(Sender: TObject); + procedure btnFindPreferredBridgeClick(Sender: TObject); + procedure ClearBridgesCache(Sender: TObject); + procedure tmSaveTotalsTimer(Sender: TObject); + procedure miResetTotalsCounterClick(Sender: TObject); + procedure miResetScannerScheduleClick(Sender: TObject); + procedure miDisableFiltersOnUserQueryClick(Sender: TObject); + procedure miStopScanClick(Sender: TObject); + procedure miDisableFiltersOnAuthorityOrBridgeClick(Sender: TObject); + procedure miClearUnusedNetworkCacheClick(Sender: TObject); + procedure miEnableConvertNodesOnIncorrectClearClick(Sender: TObject); + procedure miEnableConvertNodesOnAddToNodesListClick(Sender: TObject); + procedure miIgnoreConvertExcludeNodesClick(Sender: TObject); + procedure miConvertIpNodesClick(Sender: TObject); + procedure miConvertCidrNodesClick(Sender: TObject); + procedure miConvertCountryNodesClick(Sender: TObject); + procedure miAvoidAddingIncorrectNodesClick(Sender: TObject); + procedure edRoutersWeightMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure meLogMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure meLogMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure miEnableConvertNodesOnRemoveFromNodesListClick(Sender: TObject); + procedure miManualPingMeasureClick(Sender: TObject); + procedure miManualDetectAliveNodesClick(Sender: TObject); + procedure cbxAutoSelPriorityChange(Sender: TObject); + procedure pbTrafficPaint(Sender: TObject); + procedure SelectTrafficPeriod(Sender: TObject); + procedure tmTrafficTimer(Sender: TObject); + procedure miSelectGraphDLClick(Sender: TObject); + procedure miSelectGraphULClick(Sender: TObject); + procedure FormPaint(Sender: TObject); + + private + procedure WMExitSizeMove(var msg: TMessage); message WM_EXITSIZEMOVE; + procedure WMDpiChanged(var msg: TWMDpi); message WM_DPICHANGED; + end; + +var + Tcp: TTcp; + TorConfig: TStringList; + CountryTotals: array [0..MAX_TOTALS - 1, 0..MAX_COUNTRIES - 1] of Integer; + SpeedData: array [0..MAX_SPEED_DATA_LENGTH - 1] of TSpeedData; + RoutersDic: TDictionary; + FilterDic: TDictionary; + GeoIpDic: TDictionary; + NodesDic: TDictionary; + CircuitsDic: TDictionary; + StreamsDic: TDictionary; + TrackHostDic: TDictionary; + VersionsDic: TDictionary; + TransportsDic: TDictionary; + BridgesDic: TDictionary; + RangesDic: TDictionary; + PortsDic: TDictionary; + ConstDic: TDictionary; + DefaultsDic: TDictionary; + ProgramDir, UserDir, HsDir, ThemesDir, TransportsDir, OnionAuthDir, LogsDir: string; + DefaultsFile, UserConfigFile, TorConfigFile, TorStateFile, TorLogFile, + TorExeFile, GeoIpFile, GeoIpv6File, NetworkCacheFile, BridgesCacheFile, + UserProfile, LangFile, ConsensusFile, DescriptorsFile, NewDescriptorsFile: string; + ControlPassword, SelectedNode, SearchStr, UPnPMsg: string; + Circuit, LastRoutersFilter, LastPreferredBridgeHash, ExitNodeID, ServerIPv4, ServerIPv6, TorVersion: string; + jLimit: TJobObjectExtendedLimitInformation; + TorVersionProcess, TorMainProcess: TProcessInfo; + hJob: THandle; + DLSpeed, ULSpeed, MaxDLSpeed, MaxULSpeed, CurrentTrafficPeriod: Integer; + SessionDL, SessionUL, TotalDL, TotalUL: Int64; + ConnectState, StopCode, FormSize, LastPlace, InfoStage, GetIpStage, NodesListStage: Byte; + EncodingNoBom: TUTF8EncodingNoBOM; + SearchTimer: Cardinal; + DecFormPos, IncFormPos: TPoint; + RoutersCustomFilter, LastRoutersCustomFilter, RoutersFilters, LastFilters: Integer; + GeoIpExists, FirstLoad, Restarting, Closing, CursorShow, GeoIpUpdating, ServerIsObfs4: Boolean; + CursorStop, StartTimer, RestartTimeout: TTimer; + Controller: TControlThread; + Consensus: TConsensusThread; + Descriptors: TDescriptorsThread; + Logger, VersionChecker: TReadPipeThread; + OptionsLocked, OptionsChanged, ShowNodesChanged, Connected, AlreadyStarted, SearchFirst, StopScan: Boolean; + ConsensusUpdated, DescriptorsUpdated, FilterUpdated, RoutersUpdated, ExcludeUpdated, OpenDNSUpdated, LanguageUpdated, BridgesUpdated: Boolean; + SelectExitCircuit, TotalsNeedSave: Boolean; + Scale: Real; + HsToDelete: ArrOfStr; + SystemLanguage: Word; + LastAuthCookieDate, LastConsensusDate, LastNewDescriptorsDate, LastTorrcDate: TDateTime; + LastFullScanDate, LastNonResponsedScanDate, TotalStartDate: Int64; + LastPartialScansCounts: Integer; + LockCircuits, LockCircuitInfo, LockStreams, LockStreamsInfo, UpdateTraffic: Boolean; + FindObject: TMemo; + ScanStage, AutoScanStage: Byte; + CurrentScanType: TScanType; + CurrentScanPurpose, CurrentAutoScanPurpose: TScanPurpose; + ScanThreads, CurrentScans, TotalScans, AliveNodesCount, PingNodesCount: Integer; + Scanner: TScanThread; + +implementation + +{$R *.dfm} +{$R TorControlPanel.icons.res} + +function TTcp.GetCheckBorders: Boolean; +begin + if FormSize = 0 then + Result := not cbNoDesktopBorders.Checked + or not (cbNoDesktopBorders.Checked and not cbNoDesktopBordersOnlyEnlarged.Checked) + else + Result := not cbNoDesktopBorders.Checked; +end; + +procedure TTcp.WMExitSizeMove(var msg: TMessage); +begin + if FormSize = 0 then + SetDesktopPosition(Tcp.Left, Tcp.Top, GetCheckBorders, True) + else + SetDesktopPosition(Tcp.Left, Tcp.Top, GetCheckBorders, True); +end; + +procedure TTcp.WMDpiChanged(var msg: TWMDpi); +begin + inherited; + UpdateScaleFactor; + UpdateFormSize; +end; + +procedure TTcp.SendCommand(const cmd: string); +begin + if Assigned(Controller) then + Controller.SendData(cmd); +end; + +procedure TTcp.LogThreadTerminate(Sender: TObject); +begin + Logger := nil; +end; + +procedure TTcp.VersionCheckerThreadTerminate(Sender: TObject); +begin + VersionChecker := nil; +end; + +procedure TReadPipeThread.UpdateVersionInfo; +var + ParseStr: ArrOfStr; +begin + ParseStr := Explode(' ', Data); + if Length(ParseStr) > 1 then + TorVersion := ParseStr[2] + else + TorVersion := '0.0.0.0'; + Tcp.LoadOptions; + Terminate; +end; + +procedure TReadPipeThread.UpdateLog; +var + SelStart, SelLength, CharFromPos: Integer; + Caret: TPoint; +begin + if Tcp.miAutoScroll.Checked and (Tcp.meLog.Tag = 0) then + Tcp.meLog.Lines.Add(Data) + else + begin + GetCaretPos(Caret); + CharFromPos := SendMessage(Tcp.meLog.Handle, EM_CHARFROMPOS, 0, Caret.Y * $FFFF + Caret.X) AND $FFFF; + SelStart := Tcp.meLog.SelStart; + SelLength := Tcp.meLog.SelLength; + Tcp.meLog.Lines.BeginUpdate; + Tcp.meLog.Lines.Add(Data); + Tcp.meLog.Lines.EndUpdate; + + if SelStart <> CharFromPos then + begin + Tcp.meLog.SelStart := SelStart; + if SelLength > 0 then + Tcp.meLog.SelLength := SelLength; + end + else + begin + Tcp.meLog.SelStart := SelStart + SelLength; + Tcp.meLog.SelLength := - SelLength; + end; + end; + if Tcp.miWriteLogFile.Checked then + SaveToLog(Data, TorLogFile); + + if ConnectState = 1 then + begin + if Pos('Failed to parse/validate config', Data) <> 0 then + StopCode := STOP_CONFIG_ERROR; + end; +end; + +procedure TReadPipeThread.Execute; +begin + while not Terminated do + begin + if PeekNamedPipe(hStdOut, nil, 0, nil, @DataSize, nil) then + begin + if DataSize > 0 then + begin + Buffer := AllocMem(DataSize + 1); + if ReadFile(hStdOut, Buffer^, DataSize, dwRead, nil) then + begin + Data := Trim(string(Buffer)); + Data := StringReplace(Data, CR + BR, BR, [rfReplaceAll]); + Data := StringReplace(Data, BR + BR, BR, [rfReplaceAll]); + if Data <> '' then + begin + if VersionCheck then + Synchronize(UpdateVersionInfo) + else + Synchronize(UpdateLog); + end; + end; + FreeMem(Buffer); + end; + end + else + begin + if GetLastError = ERROR_BROKEN_PIPE then + begin + if VersionCheck and (TorVersion = '') then + begin + Data := ''; + Synchronize(UpdateVersionInfo) + end + else + Terminate; + end; + end; + Sleep(1); + end; +end; + +procedure TDNSSendThread.UpdateIpStage; +begin + ServerIPv4 := Temp; + if ConnectState = 2 then + GetIpStage := 2 + else + begin + GetIpStage := 0; + Tcp.UpdateServerInfo; + end; +end; + +procedure TDNSSendThread.Execute; +var + DNS: TDNSSend; + ls: TStringList; +begin + DNS := TDNSSend.Create; + ls := TStringList.Create; + try + DNS.TargetHost := 'resolver1.opendns.com'; + DNS.DNSQuery('myip.opendns.com', QTYPE_A, ls); + Temp := Trim(ls.Text); + Synchronize(UpdateIpStage); + finally + DNS.Free; + ls.Free; + end; +end; + +procedure TSendHttpThread.Execute; +var + Http: THTTPSend; +begin + Http := THTTPSend.Create; + try + Http.Sock.SocksType := ST_Socks5; + Http.Sock.SocksIP := GetHost(Tcp.cbxSocksHost); + Http.Sock.SocksPort := IntToStr(Tcp.udSOCKSPort.Position); + Http.HTTPMethod('HEAD', GetDefaultsValue('CheckUrl', CHECK_URL)); + finally + Http.Free; + end; +end; + +procedure TScanItemThread.Execute; +var + GeoIpInfo: TGeoIpInfo; + ParseStr: ArrOfStr; + i, Search, ALength: Integer; + PortStr, PortsData: string; +begin + try + if ScanType = stPing then + begin + for i := 1 to MaxPingAttempts do + begin + if StopScan then + Exit; + Result := SendPing(IpStr, PingTimeOut); + if Result <> -1 then + Break; + if i <> MaxPingAttempts then + Sleep(AttemptsDelay); + end; + if GeoIpDic.TryGetValue(IpStr, GeoIpInfo) then + begin + GeoIpInfo.ping := Result; + GeoIpDic.AddOrSetValue(IpStr, GeoIpInfo); + end + else + begin + GeoIpInfo.ping := Result; + GeoIpInfo.ports := ''; + GeoIpInfo.cc := DEFAULT_COUNTRY_ID; + GeoIpDic.AddOrSetValue(IpStr, GeoIpInfo); + end; + end; + + if ScanType = stAlive then + begin + for i := 1 to MaxPortAttempts do + begin + if StopScan then + Exit; + if PortTCPIsOpen(Port, IpStr, PortTimeout) then + begin + Result := 1; + Break; + end + else + Result := -1; + if i <> MaxPortAttempts then + Sleep(AttemptsDelay); + end; + PortStr := IntToStr(Port); + if GeoIpDic.TryGetValue(IpStr, GeoIpInfo) then + begin + if GeoIpInfo.ports = '' then + GeoIpInfo.ports := PortStr + ':' + IntToStr(Result) + else + begin + ParseStr := Explode('|', GeoIpInfo.ports); + Search := -1; + ALength := Length(ParseStr); + for i := 0 to ALength - 1 do + begin + if Pos(PortStr + ':', ParseStr[i]) = 1 then + begin + Search := i; + Break; + end; + end; + if Search < 0 then + GeoIpInfo.ports := GeoIpInfo.ports + '|' + PortStr + ':' + IntToStr(Result) + else + begin + ParseStr[Search] := PortStr + ':' + IntToStr(Result); + PortsData := ''; + for i := 0 to ALength - 1 do + PortsData := PortsData + '|' + ParseStr[i]; + Delete(PortsData, 1, 1); + GeoIpInfo.ports := PortsData; + end; + end; + GeoIpDic.AddOrSetValue(IpStr, GeoIpInfo); + end + else + begin + GeoIpInfo.ping := 0; + GeoIpInfo.ports := PortStr + ':' + IntToStr(Result); + GeoIpInfo.cc := DEFAULT_COUNTRY_ID; + GeoIpDic.AddOrSetValue(IpStr, GeoIpInfo); + end; + end; + finally + InterlockedDecrement(ScanThreads); + end; +end; + +procedure TTcp.ScanThreadTerminate(Sender: TObject); +begin + Scanner := nil; +end; + +procedure TScanThread.Execute; +var + MemoryStatus: TMemoryStatusEx; + ls: TStringList; + Item: TPair; + RouterInfo: TRouterInfo; + GeoIpInfo: TGeoIpInfo; + AvailMemoryBefore: Int64; + NeedScan: Boolean; + ParseStr: ArrOfStr; + i, LastResult: Integer; + IpToScan, SocketStr: string; + PortToScan: Word; +begin + ls := TStringList.Create; + try + if CurrentAutoScanPurpose <> spNone then + sScanPurpose := CurrentAutoScanPurpose; + + if sScanPurpose = spUserBridges then + begin + ParseStr := Explode('|', MemoToLine(Tcp.meBridges, ltBridge, False, '|')); + for i := 0 to Length(ParseStr) - 1 do + begin + if TryGetDataFromStr(ParseStr[i], ltSocket, SocketStr) then + ls.Append(SocketStr); + end; + end + else + begin + for Item in RoutersDic do + begin + LastResult := 0; + NeedScan := False; + if GeoIpDic.TryGetValue(Item.Value.IPv4, GeoIpInfo) then + begin + if sScanType = stAlive then + begin + if GeoIpInfo.ports <> '' then + begin + ParseStr := Explode('|', GeoIpInfo.ports); + for i := 0 to Length(ParseStr) - 1 do + begin + if Pos(IntToStr(Item.Value.OrPort) + ':', ParseStr[i]) = 1 then + begin + LastResult := StrToIntDef(SeparateRight(ParseStr[i], ':'), 0); + Break; + end; + end; + end; + end; + + case sScanPurpose of + spAll: NeedScan := True; + spNew: + begin + case sScanType of + stPing: NeedScan := GeoIpInfo.ping = 0; + stAlive: NeedScan := LastResult = 0; + end; + end; + spFailed: + begin + case sScanType of + stPing: NeedScan := GeoIpInfo.ping = -1; + stAlive: NeedScan := LastResult = -1; + end; + end; + spNewAndFailed: + begin + case sScanType of + stPing: NeedScan := GeoIpInfo.ping < 1; + stAlive: NeedScan := LastResult < 1; + end; + end; + spBridges: NeedScan := rfBridge in Item.Value.Flags; + end; + + if NeedScan then + ls.Append(Item.Key); + end; + end; + end; + + if ls.Count > 0 then + begin + TotalScans := ls.Count; + i := 0; + PortToScan := 0; + IpToScan := ''; + MemoryStatus.dwLength := SizeOf(MemoryStatus); + GlobalMemoryStatusEx(MemoryStatus); + AvailMemoryBefore := MemoryStatus.ullAvailVirtual; + while not Terminated do + begin + NeedScan := False; + if ScanThreads < sMaxThreads then + begin + if sScanPurpose = spUserBridges then + begin + IpToScan := GetAddressFromSocket(ls[i]); + PortToScan := GetPortFromSocket(ls[i]); + NeedScan := True; + end + else + begin + if RoutersDic.TryGetValue(ls[i], RouterInfo) then + begin + IpToScan := RouterInfo.IPv4; + PortToScan := RouterInfo.OrPort; + NeedScan := True; + end; + end; + if NeedScan then + begin + with TScanItemThread.Create(True) do + begin + IpStr := IpToScan; + Port := PortToScan; + ScanType := sScanType; + MaxPortAttempts := sMaxPortAttempts; + MaxPingAttempts := sMaxPingAttempts; + AttemptsDelay := sAttemptsDelay; + PingTimeout := sPingTimeout; + PortTimeout := sPortTimeout; + FreeOnTerminate := True; + Priority := tpNormal; + Start; + end; + CurrentScans := i + 1; + InterlockedIncrement(ScanThreads); + end; + + if (i = ls.Count - 1) or StopScan then + Exit; + Inc(i); + + GlobalMemoryStatusEx(MemoryStatus); + if MemoryStatus.ullAvailVirtual < Round(AvailMemoryBefore * 0.2) then + sMaxThreads := ScanThreads; + if i mod sScanPortionSize = 0 then + Sleep(sScanPortionTimeout); + end + else + Sleep(1); + end; + end; + finally + ls.Free; + end; +end; + +procedure TTcp.CheckTorAutoStart; +begin + if FirstLoad then + begin + if cbConnectOnStartup.Checked then + begin + StartTimer := TTimer.Create(Tcp); + StartTimer.OnTimer := ConnectOnStartupTimer; + StartTimer.Interval := 25; + end; + FirstLoad := False; + end; +end; + +procedure TTcp.ConnectOnStartupTimer(Sender: TObject); +begin + if TorVersion <> '' then + begin + StartTor(True); + FreeAndNil(StartTimer); + end; +end; + +procedure TTcp.TConsensusThreadTerminate(Sender: TObject); +begin + Consensus := nil; + ConsensusUpdated := False; + if cbUseBridges.Checked or DescriptorsUpdated then + LoadDescriptors + else + begin + if ConnectState = 0 then + begin + LoadFilterTotals; + LoadRoutersCountries; + ShowFilter; + ShowRouters; + ShowCircuits; + BridgesCheckControls; + CheckTorAutoStart; + end + else + InfoStage := 1; + SaveBridgesCache; + end; +end; + +procedure TTcp.TDescriptorsThreadTerminate(Sender: TObject); +begin + Descriptors := nil; + DescriptorsUpdated := False; + if ConnectState = 0 then + begin + LoadFilterTotals; + LoadRoutersCountries; + ShowFilter; + ShowRouters; + ShowCircuits; + BridgesCheckControls; + CheckTorAutoStart; + end + else + InfoStage := 1; + SaveBridgesCache; +end; + +procedure TConsensusThread.Execute; +var + ls, lb: TStringList; + i, j: Integer; + Find: Boolean; + RouterID: string; + ParseStr: ArrOfStr; + Router: TRouterInfo; + Bridge: TPair; + BridgeInfo: TBridgeInfo; +begin + if not FileExists(ConsensusFile) then + Exit; + RoutersDic.Clear; + VersionsDic.Clear; + ls := TStringList.Create; + try + ls.LoadFromFile(ConsensusFile); + for i := 0 to ls.Count - 1 do + begin + if Pos('r ', ls[i]) = 1 then + begin + ParseStr := Explode(' ', ls[i]); + RouterID := AnsiStrToHex(decodebase64(AnsiString(ParseStr[2]))); + Router.Name := ParseStr[1]; + Router.IPv4 := ParseStr[5]; + Router.IPv6 := ''; + Router.OrPort := StrToInt(ParseStr[6]); + Router.DirPort := StrToInt(ParseStr[7]); + Router.Flags := [rfRelay]; + Router.Version := ''; + Router.Params := 0; + if Router.DirPort <> 0 then + Inc(Router.Params, ROUTER_DIR_MIRROR); + Continue; + end; + if Pos('a ', ls[i]) = 1 then + begin + Router.IPv6 := Copy(ls[i], 3, RPos(':', ls[i]) - 3); + Inc(Router.Params, ROUTER_REACHABLE_IPV6); + Continue; + end; + if Pos('s ', ls[i]) = 1 then + begin + if Pos('Authority', ls[i]) <> 0 then + begin + Include(Router.Flags, rfAuthority); + Inc(Router.Params, ROUTER_AUTHORITY); + end; + if Pos('BadExit', ls[i]) <> 0 then + begin + Include(Router.Flags, rfBadExit); + Inc(Router.Params, ROUTER_BAD_EXIT); + end; + if Pos('Exit', ls[i]) <> 0 then + Include(Router.Flags, rfExit); + if Pos('Fast', ls[i]) <> 0 then + Include(Router.Flags, rfFast); + if Pos('Guard', ls[i]) <> 0 then + Include(Router.Flags, rfGuard); + if Pos('HSDir', ls[i]) <> 0 then + begin + Include(Router.Flags, rfHSDir); + Inc(Router.Params, ROUTER_HS_DIR); + end; + if Pos('Stable', ls[i]) <> 0 then + Include(Router.Flags, rfStable); + if Pos('V2Dir', ls[i]) <> 0 then + Include(Router.Flags, rfV2Dir); + Continue; + end; + if Pos('v ', ls[i]) = 1 then + begin + Router.Version := Copy(ls[i], 7); + if not VersionsDic.ContainsKey(Router.Version) then + Inc(Router.Params, ROUTER_NOT_RECOMMENDED); + Continue; + end; + + if Pos('w ', ls[i]) = 1 then + begin + ParseStr := Explode(' ', ls[i]); + Router.Bandwidth := StrToInt(SeparateRight(ParseStr[1], '=')); + + if BridgesDic.TryGetValue(RouterID, BridgeInfo) then + begin + Include(Router.Flags, rfBridge); + Inc(Router.Params, ROUTER_BRIDGE); + BridgeInfo.Router := Router; + BridgeInfo.Kind := BRIDGE_RELAY; + BridgesDic.AddOrSetValue(RouterID, BridgeInfo); + end; + + RoutersDic.AddOrSetValue(RouterID, Router); + Continue; + end; + + if Pos('server-versions', ls[i]) = 1 then + begin + ParseStr := Explode(',', ls[i]); + for j := 0 to Length(ParseStr) - 1 do + VersionsDic.AddOrSetValue(ParseStr[j], 0); + Continue; + end; + + if Pos('directory-footer', ls[i]) = 1 then + Break; + end; + FileAge(ConsensusFile, LastConsensusDate); + + if BridgesDic.Count > 0 then + begin + lb := TStringList.Create; + try + for Bridge in BridgesDic do + begin + Find := RoutersDic.ContainsKey(Bridge.Key); + if Bridge.Value.Kind = BRIDGE_RELAY then + begin + if not Find then + begin + lb.Append(Bridge.Key); + Continue; + end; + end + else + begin + BridgeInfo := Bridge.Value; + if TryUpdateMask(BridgeInfo.Router.Params, ROUTER_NOT_RECOMMENDED, + not VersionsDic.ContainsKey(BridgeInfo.Router.Version)) then + BridgesDic.AddOrSetValue(Bridge.Key, BridgeInfo); + RoutersDic.AddOrSetValue(Bridge.Key, BridgeInfo.Router); + end; + end; + if lb.Count > 0 then + begin + for i := 0 to lb.Count - 1 do + BridgesDic.Remove(lb[i]); + end; + finally + lb.Free; + end; + end; + finally + ls.Free; + end; +end; + +procedure TDescriptorsThread.Execute; +var + ls, lb: TStringList; + i: Integer; + ParseStr: ArrOfStr; + DescRouter, Router: TRouterInfo; + UserBridges: TDictionary; + Bridge: TBridge; + RouterID, Temp: string; + BridgeRelay, UpdateFromDesc: Boolean; + + procedure LoadDesc(FileName: string); + var + Desc: TStringList; + begin + if not FileExists(FileName) then + Exit; + Desc := TStringList.Create; + try + Desc.LoadFromFile(FileName); + if Desc.Count > 0 then + ls.AddStrings(Desc); + finally + Desc.Free; + end; + end; + + procedure UpdateBridges(var RouterInfo: TRouterInfo); + var + BridgeInfo, BridgeInfoDic: TBridgeInfo; + begin + if UserBridges.TryGetValue(RouterID, Bridge) then + begin + if not IpInRanges(Bridge.Ip, DocRanges) then + RouterInfo.OrPort := Bridge.Port; + BridgeInfo.Transport := Bridge.Transport; + BridgeInfo.Params := Bridge.Params; + end + else + begin + if BridgesDic.TryGetValue(RouterID, BridgeInfoDic) then + begin + RouterInfo.OrPort := BridgeInfoDic.Router.OrPort; + BridgeInfo.Transport := BridgeInfoDic.Transport; + BridgeInfo.Params := BridgeInfoDic.Params; + end + else + begin + BridgeInfo.Transport := ''; + BridgeInfo.Params := ''; + end; + end; + if rfRelay in RouterInfo.Flags then + BridgeInfo.Kind := BRIDGE_RELAY + else + BridgeInfo.Kind := BRIDGE_NATIVE; + BridgeInfo.Router := RouterInfo; + BridgesDic.AddOrSetValue(RouterID, BridgeInfo); + end; + +begin + ls := TStringList.Create; + lb := TStringList.Create; + UserBridges := TDictionary.Create; + try + if Tcp.cbUsePreferredBridge.Checked then + lb.Append(Tcp.edPreferredBridge.Text) + else + lb.Text := Tcp.meBridges.Text; + + for i := 0 to lb.Count - 1 do + begin + if TryParseBridge(lb[i], Bridge) then + UserBridges.AddOrSetValue(Bridge.Hash, Bridge); + end; + BridgeRelay := False; + UpdateFromDesc := False; + LoadDesc(DescriptorsFile); + LoadDesc(NewDescriptorsFile); + for i := 0 to ls.Count - 1 do + begin + if Pos('@purpose bridge', ls[i]) = 1 then + begin + BridgeRelay := True; + UpdateFromDesc := True; + Continue; + end; + if BridgeRelay then + begin + if Pos('router ', ls[i]) = 1 then + begin + ParseStr := Explode(' ', ls[i]); + DescRouter.Name := ParseStr[1]; + DescRouter.IPv4 := ParseStr[2]; + DescRouter.IPv6 := ''; + DescRouter.OrPort := StrToInt(ParseStr[3]); + DescRouter.DirPort := 0; + DescRouter.Flags := [rfBridge]; + DescRouter.Params := ROUTER_BRIDGE; + DescRouter.Version := ''; + Continue; + end; + + if Pos('or-address ', ls[i]) = 1 then + begin + Temp := Copy(ls[i], 12, RPos(':', ls[i]) - 12); + if ValidAddress(Temp, False, True) = 2 then + begin + DescRouter.IPv6 := Temp; + Inc(DescRouter.Params, ROUTER_REACHABLE_IPV6); + end; + Continue; + end; + + if Pos('platform ', ls[i]) = 1 then + begin + ParseStr := Explode(' ', ls[i]); + DescRouter.Version := ParseStr[2]; + if not VersionsDic.ContainsKey(ParseStr[2]) then + Inc(DescRouter.Params, ROUTER_NOT_RECOMMENDED); + Continue; + end; + + if Pos('fingerprint ', ls[i]) = 1 then + begin + RouterID := StringReplace(Copy(ls[i], 13), ' ', '', [rfReplaceAll]); + Continue; + end; + + if Pos('bandwidth ', ls[i]) = 1 then + begin + ParseStr := Explode(' ', ls[i]); + DescRouter.Bandwidth := Round(StrToInt(ParseStr[3]) / 1024); + Continue; + end; + + if Pos('tunnelled-dir-server', ls[i]) = 1 then + begin + Include(DescRouter.Flags, rfV2Dir); + Continue; + end; + + if Pos('router-signature', ls[i]) = 1 then + begin + if RoutersDic.TryGetValue(RouterID, Router) then + begin + if (rfRelay in Router.Flags) and not (rfBridge in Router.Flags) then + begin + Include(Router.Flags, rfBridge); + Inc(Router.Params, ROUTER_BRIDGE); + if Router.Bandwidth < DescRouter.Bandwidth then + Router.Bandwidth := DescRouter.Bandwidth; + UpdateBridges(Router); + RoutersDic.AddOrSetValue(RouterID, Router); + UpdateFromDesc := False; + end; + end; + if UpdateFromDesc then + begin + UpdateBridges(DescRouter); + RoutersDic.AddOrSetValue(RouterID, DescRouter); + UpdateFromDesc := False; + end; + BridgeRelay := False; + Continue; + end; + end; + end; + FileAge(NewDescriptorsFile, LastNewDescriptorsDate); + finally + ls.Free; + lb.Free; + UserBridges.Free; + end; +end; + +procedure TTcp.ControlThreadTerminate(Sender: TObject); +begin + Connected := False; + Controller := nil; + if (ConnectState > 0) then + begin + case StopCode of + STOP_NORMAL: RestartTor; + STOP_CONFIG_ERROR: + begin + StopTor; + Tcp.Show; + sbShowLog.Click; + ShowMsg(TransStr('236'), '', mtError); + end; + STOP_AUTH_ERROR: + begin + StopTor; + ShowMsg(TransStr('237'), '', mtWarning); + end; + end; + end; +end; + +function TTcp.GetControlEvents: string; +begin + Result := 'BW CIRC STREAM STATUS_CLIENT'; + if cbxServerMode.ItemIndex <> 0 then + Result := Result + ' STATUS_SERVER'; + if miShowCircuitsTraffic.Checked then + Result := Result + ' CIRC_BW'; + if miShowStreamsTraffic.Checked then + Result := Result + ' STREAM_BW'; +end; + +procedure TControlThread.Execute; +begin + Socket := TTCPBlockSocket.Create; + try + repeat + Socket.Connect('127.0.0.1', IntToStr(Tcp.udControlPort.Position)); + if StopCode <> STOP_NORMAL then + Terminate; + until (Terminated = True) or (Socket.LastError = 0); + + repeat + Sleep(1); + until (Terminated = True) or (AuthStageReady(Tcp.cbxAuthMetod.ItemIndex) = True); + + case Tcp.cbxAuthMetod.ItemIndex of + 0: AuthParam := FileGetString(UserDir + 'control_auth_cookie', True); + 1: AuthParam := '"' + Decrypt(ControlPassword, 'True') + '"'; + end; + Socket.SendString('AUTHENTICATE ' + AnsiString(AuthParam) + BR); + Socket.SendString('SETEVENTS ' + AnsiString(Tcp.GetControlEvents) + BR); + Connected := True; + while not Terminated do + begin + Data := string(socket.RecvString(1)); + if Socket.LastError = 0 then + Synchronize(GetData); + + if SendBuffer <> '' then + begin + Socket.SendString(AnsiString(SendBuffer)); + SendBuffer := ''; + end; + + if Socket.LastError = WSAECONNRESET then + Terminate; + end; + finally + Socket.CloseSocket; + Socket.Free; + end; +end; + +procedure TControlThread.SendData(cmd: string); +begin + if Connected then + SendBuffer := SendBuffer + cmd + BR; +end; + +procedure TControlThread.GetData; +var + i: Integer; + UpdateCountry: Boolean; + Item: TPair; + GeoIpItem: TPair; + GeoIpInfo: TGeoIpInfo; + FilterInfo: TFilterInfo; + RouterInfo: TRouterInfo; +begin + if InfoStage > 0 then + begin + + if InfoStage = 1 then + begin + Temp := ''; + InfoCount := 0; + + if GeoIpExists then + begin + if GeoIpUpdating then + begin + for GeoIpItem in GeoIpDic do + begin + Inc(InfoCount); + Temp := Temp + ' ip-to-country/' + GeoIpItem.Key; + end; + end + else + begin + for Item in RoutersDic do + begin + UpdateCountry := True; + if GeoIpDic.TryGetValue(Item.Value.IPv4, GeoIpInfo) then + begin + if GeoIpInfo.cc <> DEFAULT_COUNTRY_ID then + UpdateCountry := False; + end; + if UpdateCountry then + begin + Inc(InfoCount); + Temp := Temp + ' ip-to-country/' + Item.Value.IPv4; + end; + end; + end; + end; + + if InfoCount > 0 then + begin + SendData('GETINFO' + Temp); + InfoStage := 2; + end + else + InfoStage := 3; + end; + + if InfoStage = 2 then + begin + if Pos('250-ip-to-country/', Data) = 1 then + begin + ParseStr := Explode('=', copy(Data, 19)); + if FilterDic.TryGetValue(ParseStr[1], FilterInfo) then + CountryCode := FilterInfo.cc + else + CountryCode := DEFAULT_COUNTRY_ID; + + if GeoIpDic.TryGetValue(ParseStr[0], GeoIpInfo) then + GeoIpInfo.cc := CountryCode + else + begin + GeoIpInfo.cc := CountryCode; + GeoIpInfo.ping := 0; + GeoIpInfo.ports := ''; + end; + GeoIpDic.AddOrSetValue(ParseStr[0], GeoIpInfo); + + Dec(InfoCount); + + if InfoCount = 0 then + begin + GeoIpUpdating := False; + InfoStage := 3; + end + else + Exit; + end; + end; + + if InfoStage = 3 then + begin + InfoStage := 0; + Tcp.LoadFilterTotals; + Tcp.LoadRoutersCountries; + Tcp.ShowFilter; + Tcp.ShowRouters; + Tcp.tmConsensus.Enabled := True; + if (ConnectState = 2) and (Circuit = '') then + Tcp.SendDataThroughProxy; + + if AutoScanStage = 0 then + begin + if Tcp.cbAutoScanNewNodes.Checked and + (Tcp.cbEnablePingMeasure.Checked or Tcp.cbEnableDetectAliveNodes.Checked) then + AutoScanStage := 1; + end + else + begin + if AutoScanStage = 3 then + AutoScanStage := 0; + end; + Tcp.SaveNetworkCache; + end; + end; + + if GetIpStage > 0 then + begin + if GetIpStage = 1 then + begin + if (Pos('250-address', Data) = 1) then + begin + ServerIPv4 := SeparateRight(Data, '='); + GetIpStage := 2; + end; + + if Pos('551 Address unknown', Data) = 1 then + begin + if Tcp.cbUseOpenDNS.Checked and Tcp.cbUseOpenDNSOnlyWhenUnknown.Checked then + begin + Tcp.GetDNSExternalAddress; + Exit; + end + else + begin + ServerIPv4 := ''; + GetIpStage := 2; + end; + end; + end; + + if GetIpStage = 2 then + begin + Tcp.UpdateServerInfo; + GetIpStage := 0; + Exit; + end; + end; + + if ConnectState = 1 then + begin + if Pos('515 Authentication failed', Data) = 1 then + begin + StopCode := STOP_AUTH_ERROR; + Exit; + end; + + SearchPos := Pos('BOOTSTRAP PROGRESS', Data); + if SearchPos <> 0 then + begin + Temp := copy(Data, SearchPos + 19, Pos('TAG', Data) - (SearchPos + 20)); + Tcp.btnChangeCircuit.Caption := Temp + ' %'; + + if Temp = '75' then + begin + Tcp.LoadConsensus; + Exit; + end; + if Temp = '100' then + begin + ConnectState := 2; + AlreadyStarted := True; + Tcp.btnChangeCircuit.Caption := TransStr('103'); + Tcp.tiTray.IconIndex := 2; + Tcp.btnSwitchTor.ImageIndex := 2; + Tcp.btnSwitchTor.Caption := TransStr('102'); + Tcp.miSwitchTor.ImageIndex := 2; + Tcp.miSwitchTor.Caption := Tcp.btnSwitchTor.Caption; + Tcp.SetOptionsEnable(True); + Tcp.GetServerInfo; + if Tcp.cbEnableSocks.Checked then + Tcp.SendDataThroughProxy; + end; + Exit; + end; + end; + + if Pos('650 CIRC ', Data) = 1 then + begin + ParseStr := Explode(' ', Data); + CircuitID := ParseStr[2]; + CircuitStatusID := GetConstantIndex(ParseStr[3]); + case CircuitStatusID of + BUILT: + begin + CircuitInfo.BuildFlags := []; + CircuitInfo.Streams := 0; + CircuitInfo.BytesRead := 0; + CircuitInfo.BytesWritten := 0; + if Pos('ONEHOP_TUNNEL', ParseStr[5]) <> 0 then + Include(CircuitInfo.BuildFlags, bfOneHop); + if Pos('IS_INTERNAL', ParseStr[5]) <> 0 then + Include(CircuitInfo.BuildFlags, bfInternal); + if Pos('NEED_CAPACITY', ParseStr[5]) <> 0 then + Include(CircuitInfo.BuildFlags, bfNeedCapacity); + if Pos('NEED_UPTIME', ParseStr[5]) <> 0 then + Include(CircuitInfo.BuildFlags, bfNeedUptime); + CircuitInfo.PurposeID := GetConstantIndex(SeparateRight(ParseStr[6], '=')); + for i := 7 to Length(ParseStr) - 1 do + begin + if Pos('TIME_CREATED', ParseStr[i]) <> 0 then + begin + CircuitInfo.Date := TorDateFormat(SeparateRight(ParseStr[i], '=')); + Break; + end; + end; + ParseStr := Explode(',', ParseStr[4]); + Temp := ''; + for i := 0 to Length(ParseStr) - 1 do + Temp := Temp + ',' + Copy(SeparateLeft(ParseStr[i], '~'), 2); + Delete(Temp, 1, 1); + CircuitInfo.Nodes := Temp; + CircuitsDic.AddOrSetValue(CircuitID, CircuitInfo); + end; + CLOSED: + begin + CircuitsDic.Remove(CircuitID); + if CircuitID = Circuit then + Tcp.SendDataThroughProxy; + end; + end; + Exit; + end; + + if Pos('650 STREAM ', Data) = 1 then + begin + ParseStr := Explode(' ', Data); + StreamID := ParseStr[2]; + StreamStatusID := GetConstantIndex(ParseStr[3]); + CircuitID := ParseStr[4]; + case StreamStatusID of + NEW: + begin + StreamInfo.CircuitID := CircuitID; + StreamInfo.Target := ParseStr[5]; + StreamInfo.SourceAddr := ''; + StreamInfo.DestAddr := ''; + StreamInfo.BytesRead := 0; + StreamInfo.BytesWritten := 0; + for i := 6 to Length(ParseStr) - 1 do + begin + if Pos('SOURCE_ADDR', ParseStr[i]) = 1 then + StreamInfo.SourceAddr := SeparateRight(ParseStr[i], '='); + if Pos('PURPOSE', ParseStr[i]) = 1 then + begin + StreamInfo.PurposeID := GetConstantIndex(SeparateRight(ParseStr[i], '=')); + Break; + end; + end; + StreamsDic.AddOrSetValue(StreamID, StreamInfo); + Exit; + end; + SENTCONNECT: + begin + if StreamsDic.TryGetValue(StreamID, StreamInfo) then + begin + StreamInfo.CircuitID := CircuitID; + StreamsDic.AddOrSetValue(StreamID, StreamInfo); + if (Circuit <> CircuitID) and (StreamInfo.PurposeID = USER) then + begin + if CircuitsDic.TryGetValue(CircuitID, CircuitInfo) then + begin + if not (bfInternal in CircuitInfo.BuildFlags) then + begin + ParseStr := Explode(',', CircuitInfo.Nodes); + Temp := ParseStr[Length(ParseStr) - 1]; + if RoutersDic.TryGetValue(Temp, RouterInfo) then + begin + Circuit := CircuitID; + Ip := RouterInfo.IPv4; + CountryCode := GetCountryValue(Ip); + if ExitNodeID = '' then + begin + Tcp.lbExitIp.Cursor := crHandPoint; + Tcp.lbExitCountry.Cursor := crHandPoint; + Tcp.miChangeCircuit.Enabled := True; + end; + ExitNodeID := Temp; + Tcp.lbExitIp.Caption := Ip; + Tcp.lbExitCountry.Caption := TransStr(CountryCodes[CountryCode]); + Tcp.lbExitCountry.Left := Round(198 * Scale); + Tcp.imExitFlag.Picture := nil; + Tcp.lsFlags.GetBitmap(CountryCode, Tcp.imExitFlag.Picture.Bitmap); + Tcp.imExitFlag.Visible := True; + CheckLabelEndEllipsis(Tcp.lbExitCountry, 150, epEndEllipsis, True, False); + if CountryCode = DEFAULT_COUNTRY_ID then + Tcp.ShowBalloon(TransStr('113') + ': ' + Ip, TransStr('258')) + else + Tcp.ShowBalloon(TransStr('113') + ': ' + Ip + BR + ' ' + TransStr('114') + ': ' + TransStr(CountryCodes[CountryCode]), TransStr('258')); + Tcp.btnChangeCircuit.Enabled := True; + Tcp.miChangeCircuit.Enabled := True; + Tcp.tmUpdateIp.Interval := Tcp.udMaxCircuitDirtiness.Position * 1000; + Tcp.tmUpdateIp.Enabled := True; + if Tcp.miSelectExitCircuitWhetItChanges.Checked then + SelectExitCircuit := True; + end; + end; + end; + end; + end; + end; + REMAP: + begin + if StreamsDic.TryGetValue(StreamID, StreamInfo) then + begin + StreamInfo.DestAddr := ParseStr[5]; + StreamsDic.AddOrSetValue(StreamID, StreamInfo); + end; + Exit; + end; + end; + if CircuitsDic.TryGetValue(CircuitID, CircuitInfo) then + begin + if StreamsDic.ContainsKey(StreamID) then + begin + case StreamStatusID of + SENTCONNECT: Inc(CircuitInfo.Streams); + DETACHED: Dec(CircuitInfo.Streams); + CLOSED: + begin + Dec(CircuitInfo.Streams); + StreamsDic.Remove(StreamID); + end; + end; + CircuitsDic.AddOrSetValue(CircuitID, CircuitInfo); + end; + end + else + begin + if StreamStatusID = CLOSED then + begin + if Tcp.cbEnableSocks.Checked and (ConnectState = 2) and (ExitNodeID = '') then + begin + if ExtractDomain(ParseStr[5], True) = ExtractDomain(GetDefaultsValue('CheckUrl', CHECK_URL)) then + Tcp.SendDataThroughProxy; + end; + StreamsDic.Remove(StreamID); + end; + end; + Exit; + end; + + if Pos('650 BW ', Data) = 1 then + begin + ParseStr := Explode(' ', Data); + DLSpeed := StrToIntDef(ParseStr[2], 0); + ULSpeed := StrToIntDef(ParseStr[3], 0); + if DLSpeed > MaxDLSpeed then + begin + MaxDLSpeed := DLSpeed; + Tcp.lbMaxDLSpeed.Caption := BytesFormat(MaxDLSpeed) + '/' + TransStr('180'); + end; + if ULSpeed > MaxULSpeed then + begin + MaxULSpeed := ULSpeed; + Tcp.lbMaxULSpeed.Caption := BytesFormat(MaxULSpeed) + '/' + TransStr('180'); + end; + if DLSpeed > 0 then + begin + Inc(SessionDL, DLSpeed); + inc(TotalDL, DLSpeed); + Tcp.lbSessionDL.Caption := BytesFormat(SessionDL); + Tcp.lbTotalDL.Caption := BytesFormat(TotalDL); + TotalsNeedSave := True; + end; + if ULSpeed > 0 then + begin + Inc(SessionUL, ULSpeed); + inc(TotalUL, ULSpeed); + Tcp.lbSessionUL.Caption := BytesFormat(SessionUL); + Tcp.lbTotalUL.Caption := BytesFormat(TotalUL); + TotalsNeedSave := True; + end; + + Exit; + end; + if Tcp.miShowCircuitsTraffic.Checked then + begin + if Pos('650 CIRC_BW ', Data) = 1 then + begin + ParseStr := Explode(' ', Data); + CircuitID := SeparateRight(ParseStr[2], '='); + if CircuitsDic.TryGetValue(CircuitID, CircuitInfo) then + begin + Inc(CircuitInfo.BytesRead, StrToInt64Def(SeparateRight(ParseStr[3], '='), 0)); + Inc(CircuitInfo.BytesWritten, StrToInt64Def(SeparateRight(ParseStr[4], '='), 0)); + CircuitsDic.AddOrSetValue(CircuitID, CircuitInfo); + end; + Exit; + end; + end; + + if Tcp.miShowStreamsTraffic.Checked then + begin + if Pos('650 STREAM_BW ', Data) = 1 then + begin + ParseStr := Explode(' ', Data); + StreamID := SeparateRight(ParseStr[2], '='); + if StreamsDic.TryGetValue(StreamID, StreamInfo) then + begin + Inc(StreamInfo.BytesWritten, StrToInt64Def(SeparateRight(ParseStr[3], '='), 0)); + Inc(StreamInfo.BytesRead, StrToInt64Def(SeparateRight(ParseStr[4], '='), 0)); + StreamsDic.AddOrSetValue(StreamID, StreamInfo); + end; + Exit; + end; + end; + + if Tcp.cbxServerMode.ItemIndex <> 0 then + begin + if Pos('650 STATUS_SERVER ', Data) = 1 then + begin + ParseStr := Explode(' ', Data); + for i := 2 to Length(ParseStr) - 1 do + begin + if Pos('ADDRESS=', ParseStr[i]) = 1 then + begin + Temp := SeparateRight(ParseStr[i], '='); + IpID := ValidAddress(Temp); + case IpID of + 1: if Temp <> ServerIPv4 then ServerIPv4 := Temp; + 2: if Temp <> ServerIPv6 then ServerIPv6 := Temp; + end; + if IpID <> 0 then + Tcp.UpdateServerInfo; + end; + end; + Exit; + end; + end; + +end; + +function TUTF8EncodingNoBOM.GetPreamble: TBytes; +begin + SetLength(Result, 0); +end; + +procedure TPageControl.TCMAdjustRect(var Msg: TMessage); +begin + inherited; + if Msg.WParam = 0 then + InflateRect(PRect(Msg.LParam)^, 3, 1) + else + InflateRect(PRect(Msg.LParam)^, -3, -3); +end; + +procedure TTcp.sgCircuitInfoDblClick(Sender: TObject); +begin + if sgCircuitInfo.MovRow > 0 then + begin + case sgCircuitInfo.MovCol of + CIRC_INFO_IP: FindInRouters(sgCircuitInfo.Cells[CIRC_INFO_ID, sgCircuitInfo.MovRow]); + CIRC_INFO_FLAG, CIRC_INFO_COUNTRY: + FindInFilter(sgCircuitInfo.Cells[CIRC_INFO_IP, sgCircuitInfo.MovRow]); + end; + end; +end; + +procedure TTcp.sgCircuitInfoDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); +begin + if (ARow = 0) and (ACol > 0) then + begin + case ACol of + CIRC_INFO_FLAG: GridDrawIcon(sgCircuitInfo, Rect, lsMain, 6); + else + DrawText(sgCircuitInfo.Canvas.Handle, PChar(DetailsHeader[ACol - 1]), Length(DetailsHeader[ACol - 1]), Rect, DT_CENTER); + end; + end; + if ARow > 0 then + begin + if ACol = CIRC_INFO_FLAG then + begin + if sgCircuitInfo.Cells[CIRC_INFO_IP, ARow] <> '' then + GridDrawIcon(sgCircuitInfo, Rect, lsFlags, GetCountryValue(sgCircuitInfo.Cells[CIRC_INFO_IP, ARow]), 20, 13); + end; + end; +end; + +procedure TTcp.sgCircuitInfoKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + GridKeyDown(sgCircuitInfo, Shift, Key); + case Key of + VK_F5: ShowCircuits; + end; +end; + +procedure TTcp.sgCircuitInfoMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if Button = mbRight then + sgCircuitInfo.MouseToCell(X, Y, sgCircuitInfo.MovCol, sgCircuitInfo.MovRow); +end; + +procedure TTcp.sgCircuitInfoMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +begin + lbExitIp.Tag := 0; + sgCircuitInfo.MouseToCell(X, Y, sgCircuitInfo.MovCol, sgCircuitInfo.MovRow); + GridSetFocus(sgCircuitInfo); + GridShowHints(sgCircuitInfo); + GridCheckAutoPopup(sgCircuitInfo, sgCircuitInfo.MovRow); + if (sgCircuitInfo.MovCol in [CIRC_INFO_IP..CIRC_INFO_COUNTRY]) and (sgCircuitInfo.MovRow > 0) and not IsEmptyRow(sgCircuitInfo, sgCircuitInfo.MovRow) then + sgCircuitInfo.Cursor := crHandPoint + else + sgCircuitInfo.Cursor := crDefault; +end; + +procedure TTcp.sgCircuitInfoSelectCell(Sender: TObject; ACol, ARow: Integer; + var CanSelect: Boolean); +begin + GridSelectCell(sgCircuitInfo, ACol, ARow); +end; + +procedure TTcp.sgCircuitsDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); +begin + if ARow = 0 then + begin + case ACol of + CIRC_PURPOSE: DrawText(sgCircuits.Canvas.Handle, PChar(CircuitsHeader[ACol - 1]), Length(CircuitsHeader[ACol - 1]), Rect, DT_CENTER); + CIRC_STREAMS: GridDrawIcon(sgCircuits, Rect, lsMain, 8); + end; + if (ACol = sgCircuits.SortCol) and (ACol = CIRC_PURPOSE) then + GridDrawSortArrows(sgCircuits, Rect); + end; +end; + +procedure TTcp.sgCircuitsKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + GridKeyDown(sgCircuits, Shift, Key); +end; + +procedure TTcp.sgCircuitsMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if Button = mbRight then + sgCircuits.MouseToCell(X, Y, sgCircuits.MovCol, sgCircuits.MovRow); +end; + +procedure TTcp.sgCircuitsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); +begin + sgCircuits.MouseToCell(X, Y, sgCircuits.MovCol, sgCircuits.MovRow); + GridSetFocus(sgCircuits); + GridShowHints(sgCircuits); + GridCheckAutoPopup(sgCircuits, sgCircuits.MovRow, True); +end; + +procedure TTcp.sgCircuitsSelectCell(Sender: TObject; ACol, ARow: Integer; + var CanSelect: Boolean); +begin + GridSelectCell(sgCircuits, ACol, ARow); + ShowCircuitInfo(sgCircuits.Cells[CIRC_ID, ARow]); +end; + +procedure TTcp.sgFilterDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); +begin + if ARow = 0 then + begin + case ACol of + FILTER_FLAG: GridDrawIcon(sgFilter, Rect, lsMain, 6); + FILTER_ENTRY_NODES: GridDrawIcon(sgFilter, Rect, lsMain, 7); + FILTER_MIDDLE_NODES: GridDrawIcon(sgFilter, Rect, lsMain, 8); + FILTER_EXIT_NODES: GridDrawIcon(sgFilter, Rect, lsMain, 9); + FILTER_EXCLUDE_NODES: GridDrawIcon(sgFilter, Rect, lsMain, 10); + else + DrawText(sgFilter.Canvas.Handle, PChar(FilterHeader[ACol]), Length(FilterHeader[ACol]), Rect, DT_CENTER); + end; + if (ACol = sgFilter.SortCol) and (ACol < FILTER_ENTRY_NODES) then + GridDrawSortArrows(sgFilter, Rect); + end; + if ARow > 0 then + begin + if (ACol = FILTER_FLAG) and (sgFilter.Cells[FILTER_ID, ARow] <> '') then + GridDrawIcon(sgFilter, Rect, lsFlags, FilterDic.Items[AnsiLowerCase(sgFilter.Cells[FILTER_ID, ARow])].cc, 20, 13); + end; +end; + +procedure TTcp.UpdateRoutersAfterBridgesUpdate; +begin + if BridgesUpdated then + begin + if LastPreferredBridgeHash <> '' then + ShowRouters; + BridgesUpdated := False; + end; +end; + +procedure TTcp.UpdateRoutersAfterFilterUpdate; +begin + if FilterUpdated then + begin + if (cbxRoutersCountry.Tag = -2) or ExcludeUpdated then + ShowRouters; + if ExcludeUpdated then + begin + CalculateTotalNodes; + LoadNodesList; + ExcludeUpdated := False; + end; + FilterUpdated := False; + end; +end; + +procedure TTcp.UpdateOptionsAfterRoutersUpdate; +begin + if FilterUpdated then + begin + CalculateFilterNodes; + ShowFilter; + FilterUpdated := False; + end; + if RoutersUpdated then + begin + LoadNodesList; + RoutersUpdated := False; + end; +end; + +procedure TTcp.sgFilterExit(Sender: TObject); +begin + UpdateRoutersAfterFilterUpdate; +end; + +procedure TTcp.sgFilterFixedCellClick(Sender: TObject; ACol, ARow: Integer); +begin + if ACol = FILTER_FLAG then + Exit; + SortPrepare(sgFilter, ACol, True); +end; + +procedure TTcp.ChangeFilter; +var + i: Integer; + Key: string; + FNodeType: TNodeType; + FilterInfo: TFilterInfo; + + procedure DeleteExclude; + begin + if sgFilter.Cells[FILTER_EXCLUDE_NODES, sgFilter.SelRow] = EXCLUDE_CHAR then + begin + sgFilter.Cells[FILTER_EXCLUDE_NODES, sgFilter.SelRow] := ''; + NodesDic.Remove(Key); + FilterInfo.Data := []; + ExcludeUpdated := True; + end; + end; + +begin + Key := AnsiLowerCase(sgFilter.Cells[FILTER_ID, sgFilter.SelRow]); + if not FilterDic.ContainsKey(Key) then + Exit; + case sgFilter.SelCol of + FILTER_ENTRY_NODES: FNodeType := ntEntry; + FILTER_MIDDLE_NODES: FNodeType := ntMiddle; + FILTER_EXIT_NODES: FNodeType := ntExit; + FILTER_EXCLUDE_NODES: FNodeType := ntExclude; + else + Exit; + end; + FilterDic.TryGetValue(Key, FilterInfo); + + if FNodeType = ntExclude then + begin + if sgFilter.Cells[FILTER_EXCLUDE_NODES, sgFilter.SelRow] = '' then + begin + sgFilter.Cells[FILTER_EXCLUDE_NODES, sgFilter.SelRow] := EXCLUDE_CHAR; + for i := FILTER_ENTRY_NODES to FILTER_EXIT_NODES do + sgFilter.Cells[i, sgFilter.SelRow] := ''; + NodesDic.AddOrSetValue(Key, [ntExclude]); + FilterInfo.Data := []; + ExcludeUpdated := True; + end + else + DeleteExclude; + end + else + begin + if sgFilter.Cells[sgFilter.SelCol, sgFilter.SelRow] = '' then + begin + DeleteExclude; + sgFilter.Cells[sgFilter.SelCol, sgFilter.SelRow] := SELECT_CHAR; + Include(FilterInfo.Data, FNodeType); + end + else + begin + sgFilter.Cells[sgFilter.SelCol, sgFilter.SelRow] := ''; + Exclude(FilterInfo.Data, FNodeType); + end; + end; + + FilterDic.AddOrSetValue(Key, FilterInfo); + CheckNodesListState(EXCLUDE_ID); + CalculateFilterNodes(False); + FilterUpdated := True; + EnableOptionButtons; +end; + +procedure TTcp.sgFilterKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key = VK_RETURN) and (sgFilter.SelCol > FILTER_PING) then + ChangeFilter; + GridKeyDown(sgFilter, Shift, Key); +end; + +procedure TTcp.sgFilterKeyPress(Sender: TObject; var Key: Char); +begin + if sgFilter.SelCol < FILTER_ENTRY_NODES then + FindInGridColumn(sgFilter, sgFilter.SelCol, Key); +end; + +procedure TTcp.sgFilterMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var + CountryIndex: Integer; +begin + if Button = mbRight then + sgFilter.MouseToCell(X, Y, sgFilter.MovCol, sgFilter.MovRow); + + if (Button = mbLeft) and (ssDouble in Shift) then + begin + if (sgFilter.MovCol in [FILTER_TOTAL..FILTER_ALIVE]) and (sgFilter.MovRow > 0) and (sgFilter.Cells[sgFilter.MovCol, sgFilter.MovRow] <> NONE_CHAR) then + begin + LoadRoutersFilterData(LastRoutersFilter, False, True); + case sgFilter.MovCol of + FILTER_TOTAL: RoutersCustomFilter := FILTER_BY_TOTAL; + FILTER_GUARD: + begin + RoutersCustomFilter := FILTER_BY_GUARD; + IntToMenu(mnShowNodes.Items, 2); + end; + FILTER_EXIT: + begin + RoutersCustomFilter := FILTER_BY_EXIT; + IntToMenu(mnShowNodes.Items, 1); + end; + FILTER_ALIVE: + begin + RoutersCustomFilter := FILTER_BY_ALIVE; + IntToMenu(mnShowNodes.Items, 2048); + end; + end; + CountryIndex := FilterDic.Items[AnsiLowerCase(sgFilter.Cells[FILTER_ID, sgFilter.MovRow])].cc; + cbxRoutersCountry.ItemIndex := cbxRoutersCountry.Items.IndexOf(TransStr(CountryCodes[CountryIndex])); + cbxRoutersCountry.Tag := CountryIndex; + CheckShowRouters; + ShowRouters; + sbShowRouters.Click; + SaveRoutersFilterdata(False, False); + end; + end; + if (sgFilter.SelCol > FILTER_PING) and (sgFilter.MovRow > 0) and (Button = mbLeft) then + ChangeFilter; +end; + +procedure TTcp.sgFilterMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); +begin + sgFilter.MouseToCell(X, Y, sgFilter.MovCol, sgFilter.MovRow); + GridSetFocus(sgFilter); + GridShowHints(sgFilter); + GridCheckAutoPopup(sgFilter, sgFilter.MovRow); + if (sgFilter.MovCol in [FILTER_TOTAL..FILTER_ALIVE]) and (sgFilter.MovRow > 0) and (sgFilter.Cells[sgFilter.MovCol, sgFilter.MovRow] <> NONE_CHAR) then + sgFilter.Cursor := crHandPoint + else + sgFilter.Cursor := crDefault; +end; + +procedure TTcp.sgFilterSelectCell(Sender: TObject; ACol, ARow: Integer; + var CanSelect: Boolean); +begin + GridSelectCell(sgFilter, ACol, ARow); +end; + +procedure TTcp.sgHsDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); +begin + if ARow = 0 then + begin + case ACol of + HS_STATE: GridDrawIcon(sgHs, Rect, lsMain, 17); + else + if ACol < HS_STATE then + DrawText(sgHs.Canvas.Handle, PChar(HsHeader[ACol]), Length(HsHeader[ACol]), Rect, DT_CENTER); + end; + end; + GridScrollCheck(sgHs, HS_NAME, 163); +end; + +procedure TTcp.sgHsEnter(Sender: TObject); +begin + tsHs.Tag := 1; +end; + +procedure TTcp.sgHsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); +begin + GridKeyDown(sgHs, Shift, Key); +end; + +procedure TTcp.sgHsPortsDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); +begin + if ARow = 0 then + DrawText(sgHsPorts.Canvas.Handle, PChar(HsPortsHeader[ACol]), Length(HsPortsHeader[ACol]), Rect, DT_CENTER); + GridScrollCheck(sgHsPorts, HSP_INTERFACE, 139); +end; + +procedure TTcp.sgHsPortsEnter(Sender: TObject); +begin + tsHs.Tag := 2; +end; + +procedure TTcp.sgHsPortsKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + GridKeyDown(sgHsPorts, Shift, Key); +end; + +procedure TTcp.sgHsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); +begin + sgHs.MouseToCell(X, Y, sgHs.MovCol, sgHs.MovRow); + GridSetFocus(sgHs); + GridShowHints(sgHs); + GridCheckAutoPopup(sgHs, sgHs.MovRow, True); +end; + +procedure TTcp.sgHsPortsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); +begin + sgHsPorts.MouseToCell(X, Y, sgHsPorts.MovCol, sgHsPorts.MovRow); + GridSetFocus(sgHsPorts); + GridShowHints(sgHsPorts); + GridCheckAutoPopup(sgHsPorts, sgHsPorts.MovRow, True); +end; + +procedure TTcp.UpdateTransports; +begin + if IsEmptyGrid(sgTransports) then + begin + edTransports.Text := ''; + edTransportsHandler.Text := ''; + cbxTransportType.ItemIndex := 0; + meHandlerParams.Clear; + TransportsEnable(False); + end; +end; + +procedure TTcp.UpdateHs; +begin + if IsEmptyGrid(sgHs) then + begin + ClearGrid(sgHsPorts); + edHsName.Text := ''; + cbxHsVersion.ItemIndex := HS_VERSION_3; + cbxHsState.ItemIndex := HS_STATE_DISABLED; + udHsNumIntroductionPoints.Position := 3; + cbHsMaxStreams.Checked := False; + cbxHsAddress.ItemIndex := 0; + udHsRealPort.Position := 80; + udHsVirtualPort.Position := 80; + HsControlsEnable(False); + end; +end; + +procedure TTcp.UpdateHsPorts; +var + i: Integer; + Ports: string; +begin + Ports := ''; + if IsEmptyGrid(sgHsPorts) then + begin + sgHs.Cells[HS_PORTS_DATA, sgHs.SelRow] := ''; + cbxHsAddress.ItemIndex := 0; + udHsRealPort.Position := 80; + udHsVirtualPort.Position := 80; + HsPortsEnable(False); + end + else + begin + for i := 1 to sgHsPorts.RowCount - 1 do + Ports := Ports + '|' + + sgHsPorts.Cells[HSP_INTERFACE, i] + ',' + + sgHsPorts.Cells[HSP_REAL_PORT, i] + ',' + + sgHsPorts.Cells[HSP_VIRTUAL_PORT, i]; + Delete(Ports, 1, 1); + sgHs.Cells[HS_PORTS_DATA, sgHs.SelRow] := Ports; + end; +end; + +procedure TTcp.sgHsSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); +begin + GridSelectCell(sgHs, ACol, ARow); + SelectHs; +end; + +procedure TTcp.sgRoutersDblClick(Sender: TObject); +begin + if (sgRouters.MovCol in [ROUTER_FLAG, ROUTER_COUNTRY]) and (sgRouters.MovRow > 0) then + FindInFilter(sgRouters.Cells[ROUTER_IP, sgRouters.MovRow]); +end; + +procedure TTcp.sgRoutersDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); +var + RouterID: string; + RouterInfo: TRouterInfo; + Indent, Mask, Interval: Integer; + + procedure DrawFlagIcon(Flag: Byte; Index: Integer); + begin + if Mask and Flag <> 0 then + begin + lsMenus.Draw(sgRouters.Canvas, Rect.Left + (Rect.Width - Indent) div 2 + Interval, Rect.Top + (Rect.Height - 16) div 2, Index, True); + Inc(Interval, 16); + end; + end; + +begin + if ARow = 0 then + begin + if ACol = ROUTER_WEIGHT then + Rect.Right := Rect.Right + 2; + case ACol of + ROUTER_FLAG: GridDrawIcon(sgRouters, Rect, lsMain, 6); + ROUTER_ENTRY_NODES: GridDrawIcon(sgRouters, Rect, lsMain, 7); + ROUTER_MIDDLE_NODES: GridDrawIcon(sgRouters, Rect, lsMain, 8); + ROUTER_EXIT_NODES: GridDrawIcon(sgRouters, Rect, lsMain, 9); + ROUTER_EXCLUDE_NODES: GridDrawIcon(sgRouters, Rect, lsMain, 10); + else + DrawText(sgRouters.Canvas.Handle, PChar(RoutersHeader[ACol - 1]), Length(RoutersHeader[ACol - 1]), Rect, DT_CENTER); + end; + if (ACol = sgRouters.SortCol) and (ACol < ROUTER_ENTRY_NODES) then + GridDrawSortArrows(sgRouters, Rect); + end; + if ARow > 0 then + begin + if ACol = ROUTER_FLAG then + begin + if sgRouters.Cells[ROUTER_IP, ARow] <> '' then + GridDrawIcon(sgRouters, Rect, lsFlags, GetCountryValue(sgRouters.Cells[ROUTER_IP, ARow]), 20, 13); + end; + if ACol = ROUTER_FLAGS then + begin + RouterID := sgRouters.Cells[ROUTER_ID, ARow]; + + if RoutersDic.TryGetValue(RouterID, RouterInfo) then + begin + Mask := RouterInfo.Params; + if Mask <> 0 then + begin + Interval := 0; + Indent := GetRoutersParamsCount(Mask) * 16; + DrawFlagIcon(ROUTER_BRIDGE, 28); + DrawFlagIcon(ROUTER_AUTHORITY, 54); + DrawFlagIcon(ROUTER_ALIVE, 56); + DrawFlagIcon(ROUTER_REACHABLE_IPV6, 34); + DrawFlagIcon(ROUTER_HS_DIR, 53); + DrawFlagIcon(ROUTER_DIR_MIRROR, 38); + DrawFlagIcon(ROUTER_NOT_RECOMMENDED, 44); + DrawFlagIcon(ROUTER_BAD_EXIT, 43); + end; + end; + end; + end; +end; + +procedure TTcp.sgRoutersFixedCellClick(Sender: TObject; ACol, ARow: Integer); +begin + if ACol = ROUTER_FLAG then + Exit; + SortPrepare(sgRouters, ACol, True); +end; + +procedure TTcp.sgRoutersKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key = VK_RETURN) and (sgRouters.SelCol > ROUTER_FLAGS) then + ChangeRouters; + GridKeyDown(sgRouters, Shift, Key); +end; + +procedure TTcp.sgRoutersKeyPress(Sender: TObject; var Key: Char); +begin + if sgRouters.SelCol < ROUTER_FLAGS then + FindInGridColumn(sgRouters, sgRouters.SelCol, Key); +end; + +procedure TTcp.sgRoutersMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if Button = mbRight then + sgRouters.MouseToCell(X, Y, sgRouters.MovCol, sgRouters.MovRow); + + if (sgRouters.SelCol > ROUTER_FLAGS) and (sgRouters.MovRow > 0) and (Button = mbLeft) then + ChangeRouters; +end; + +function TTcp.GetFilterLabel(FilterID: Integer): TLabel; +begin + case FilterID of + FILTER_ENTRY_NODES: Result := lbFilterEntry; + FILTER_MIDDLE_NODES: Result := lbFilterMiddle; + FILTER_EXIT_NODES: Result := lbFilterExit; + FILTER_EXCLUDE_NODES: Result := lbFilterExclude; + else + Result := nil; + end; +end; + +function TTcp.GetFavoritesLabel(FavoritesID: Integer): TLabel; +begin + case FavoritesID of + ENTRY_ID: Result := lbFavoritesEntry; + MIDDLE_ID: Result := lbFavoritesMiddle; + EXIT_ID: Result := lbFavoritesExit; + EXCLUDE_ID: Result := lbExcludeNodes; + FAVORITES_ID: Result := lbFavoritesTotal; + else + Result := nil; + end; +end; + +procedure TTcp.ChangeRouters; +var + i: Integer; + Key, CountryCode, FindCidr, NodeStr, SelData, ConvertMsg: string; + FNodeTypes: TNodeTypes; + NodeTypeID: TNodeType; + RouterInfo: TRouterInfo; + NodesList: TStringList; + HashMode, FindCountry, ConvertNodes: Boolean; + PreferredBridge: TBridge; + ItemID: TListType; + Nodes: ArrOfNodes; + + function IsHashMode: Boolean; + begin + case NodesList.Count of + 0: Result := True; + 1: Result := ValidHash(NodesList[0]); + else + Result := False; + end; + end; + + procedure FindNode(NodeStr: string; NodeType: TNodeType; IsCountry: Boolean = False); + begin + if NodesDic.ContainsKey(NodeStr) then + begin + if NodeType in NodesDic.Items[NodeStr] then + begin + if IsCountry then + begin + NodesList.Append(AnsiUpperCase(NodeStr) + ' (' + TransStr(NodeStr) + ')'); + FindCountry := True; + end + else + NodesList.Append(NodeStr); + end; + end; + end; + + procedure CreateNodesList(NodeType: TNodeType); + var + i: Integer; + ParseStr: ArrOfStr; + begin + NodesList.Clear; + FindNode(Key, NodeType); + FindNode(RouterInfo.IPv4, NodeType); + FindCidr := FindInRanges(RouterInfo.IPv4); + if FindCidr <> '' then + begin + ParseStr := Explode(',', FindCidr); + for i := 0 to Length(ParseStr) - 1 do + FindNode(ParseStr[i], NodeType); + SortNodesList(NodesList, True); + end; + FindNode(CountryCode, NodeType, True); + end; + +begin + if ConnectState = 1 then + Exit; + Key := sgRouters.Cells[ROUTER_ID, sgRouters.SelRow]; + SelData := sgRouters.Cells[sgRouters.SelCol, sgRouters.SelRow]; + if (SelData = NONE_CHAR) or (SelData = BOTH_CHAR) then + Exit; + if RoutersDic.TryGetValue(Key, RouterInfo) then + begin + + FindCountry := False; + NodeTypeID := TNodeType(sgRouters.SelCol); + CountryCode := CountryCodes[GetCountryValue(RouterInfo.IPv4)]; + + NodesList := TStringList.Create; + try + NodesList.QuoteChar := #0; + CreateNodesList(NodeTypeID); + HashMode := IsHashMode; + if HashMode then + begin + NodesDic.TryGetValue(Key, FNodeTypes); + if SelData = '' then + begin + if sgRouters.SelCol = ROUTER_EXCLUDE_NODES then + begin + sgRouters.Cells[ROUTER_EXCLUDE_NODES, sgRouters.SelRow] := EXCLUDE_CHAR; + for i := ROUTER_ENTRY_NODES to ROUTER_EXIT_NODES do + begin + if sgRouters.Cells[i, sgRouters.SelRow] <> NONE_CHAR then + begin + CreateNodesList(TNodeType(i)); + if IsHashMode then + begin + if CheckRouterFlags(i, RouterInfo) then + sgRouters.Cells[i, sgRouters.SelRow] := '' + else + sgRouters.Cells[i, sgRouters.SelRow] := NONE_CHAR; + end + else + sgRouters.Cells[i, sgRouters.SelRow] := FAVERR_CHAR; + end; + end; + FNodeTypes := []; + end + else + begin + if sgRouters.Cells[ROUTER_EXCLUDE_NODES, sgRouters.SelRow] = EXCLUDE_CHAR then + sgRouters.Cells[sgRouters.SelCol, sgRouters.SelRow] := FAVERR_CHAR + else + sgRouters.Cells[sgRouters.SelCol, sgRouters.SelRow] := SELECT_CHAR; + end; + Include(FNodeTypes, NodeTypeID); + end + else + begin + if sgRouters.SelCol = ROUTER_EXCLUDE_NODES then + begin + sgRouters.Cells[ROUTER_EXCLUDE_NODES, sgRouters.SelRow] := ''; + for i := ROUTER_ENTRY_NODES to ROUTER_EXIT_NODES do + begin + if sgRouters.Cells[i, sgRouters.SelRow] <> NONE_CHAR then + begin + if (sgRouters.Cells[i, sgRouters.SelRow] = FAVERR_CHAR) and CheckRouterFlags(i, RouterInfo) then + sgRouters.Cells[i, sgRouters.SelRow] := SELECT_CHAR; + end; + end; + end + else + begin + if (SelData = FAVERR_CHAR) and not CheckRouterFlags(Integer(NodeTypeID), RouterInfo) then + sgRouters.Cells[sgRouters.SelCol, sgRouters.SelRow] := NONE_CHAR + else + sgRouters.Cells[sgRouters.SelCol, sgRouters.SelRow] := ''; + end; + Exclude(FNodeTypes, NodeTypeID); + end; + NodesDic.AddOrSetValue(Key, FNodeTypes); + end + else + begin + if SelData <> '' then + begin + ConvertNodes := PrepareNodesToRemove(NodesList.DelimitedText, NodeTypeID, Nodes);; + if ConvertNodes then + ConvertMsg := BR + BR + TransStr('146') + else + ConvertMsg := ''; + if ShowMsg(Format(TransStr('362'), [StringReplace(NodesList.DelimitedText, ',', BR, [rfReplaceAll]), TransStr(GetFavoritesLabel(Integer(NodeTypeID)).Hint), ConvertMsg]), '', mtQuestion, True) then + begin + for i := 0 to NodesList.Count - 1 do + begin + NodeStr := SeparateLeft(NodesList[i], ' '); + ItemID := GetNodeType(NodeStr); + if ItemID = ltCode then + NodeStr := AnsiLowerCase(NodeStr); + if NodesDic.TryGetValue(NodeStr, FNodeTypes) then + begin + Exclude(FNodeTypes, NodeTypeID); + NodesDic.AddOrSetValue(NodeStr, FNodeTypes); + end; + end; + if ConvertNodes then + RemoveFromNodesListWithConvert(Nodes, NodeTypeID); + end + else + Exit; + end; + end; + finally + NodesList.Free; + end; + if TryParseBridge(edPreferredBridge.Text, PreferredBridge) then + CheckPrefferedBridgeExclude(PreferredBridge.Hash); + CheckNodesListState(Integer(NodeTypeID)); + CalculateTotalNodes(False); + if not HashMode then + begin + ShowRouters; + FilterUpdated := FindCountry; + end; + RoutersUpdated := True; + EnableOptionButtons; + end; +end; + +procedure TTcp.ShowRoutersParamsHint; +var + RouterInfo: TRouterInfo; + Mask, MaxItems: Integer; + Fail: Boolean; + CellRect, CellPoint: TRect; + Data: array of Byte; + ArrayIndex: Integer; + + procedure CheckMask(Param: Integer); + begin + if Mask and Param <> 0 then + begin + SetLength(Data, MaxItems + 1); + Data[MaxItems] := Param; + Inc(MaxItems); + end; + end; + +begin + Fail := True; + if not IsEmptyRow(sgRouters, sgRouters.MovRow) then + begin + if RoutersDic.TryGetValue(sgRouters.Cells[ROUTER_ID, sgRouters.MovRow], RouterInfo) then + begin + Mask := RouterInfo.Params; + if Mask > 0 then + begin + MaxItems := 0; + CheckMask(ROUTER_BRIDGE); + CheckMask(ROUTER_AUTHORITY); + CheckMask(ROUTER_ALIVE); + CheckMask(ROUTER_REACHABLE_IPV6); + CheckMask(ROUTER_HS_DIR); + CheckMask(ROUTER_DIR_MIRROR); + CheckMask(ROUTER_NOT_RECOMMENDED); + CheckMask(ROUTER_BAD_EXIT); + + CellRect := sgRouters.CellRect(9, sgRouters.MovRow); + CellPoint := sgRouters.ClientToScreen(CellRect); + + ArrayIndex := (Mouse.CursorPos.X - CellPoint.Left - (CellRect.Width - MaxItems * 16) div 2); + if InRange(ArrayIndex, 0, MaxItems * 16) then + begin + case Data[ArrayIndex div 16] of + ROUTER_BRIDGE: sgRouters.Hint := TransStr('384'); + ROUTER_AUTHORITY: sgRouters.Hint := TransStr('385'); + ROUTER_ALIVE: sgRouters.Hint := TransStr('386'); + ROUTER_REACHABLE_IPV6: sgRouters.Hint := TransStr('387'); + ROUTER_HS_DIR: sgRouters.Hint := TransStr('388'); + ROUTER_DIR_MIRROR: sgRouters.Hint := Format(TransStr('389'), [RouterInfo.DirPort]); + ROUTER_NOT_RECOMMENDED: sgRouters.Hint := TransStr('390'); + ROUTER_BAD_EXIT: sgRouters.Hint := TransStr('391'); + else + sgRouters.Hint := TransStr('392'); + end; + Application.ActivateHint(Mouse.CursorPos); + Exit; + end; + end; + end; + end; + + if Fail then + begin + Application.CancelHint; + sgRouters.Hint := ''; + end; +end; + +procedure TTcp.sgRoutersMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +begin + sgRouters.MouseToCell(X, Y, sgRouters.MovCol, sgRouters.MovRow); + if not (edRoutersQuery.Focused or edRoutersWeight.Focused) then + GridSetFocus(sgRouters); + if miShowFlagsHint.Checked and (sgRouters.MovCol = ROUTER_FLAGS) then + ShowRoutersParamsHint + else + GridShowHints(sgRouters); + GridCheckAutoPopup(sgRouters, sgRouters.MovRow, True); + if (sgRouters.MovCol in [ROUTER_FLAG, ROUTER_COUNTRY]) and (sgRouters.MovRow > 0) and not IsEmptyRow(sgRouters, sgRouters.MovRow) then + sgRouters.Cursor := crHandPoint + else + sgRouters.Cursor := crDefault; +end; + +procedure TTcp.sgRoutersSelectCell(Sender: TObject; ACol, ARow: Integer; + var CanSelect: Boolean); +begin + GridSelectCell(sgRouters, ACol, ARow); +end; + +procedure TTcp.sgStreamsInfoDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); +begin + if ARow = 0 then + begin + if ACol > 0 then + begin + case ACol of + STREAMS_INFO_BYTES_READ: GridDrawIcon(sgStreamsInfo, Rect, lsMain, 15); + STREAMS_INFO_BYTES_WRITTEN: GridDrawIcon(sgStreamsInfo, Rect, lsMain, 16); + else + DrawText(sgStreamsInfo.Canvas.Handle, PChar(StreamsInfoHeader[ACol - 1]), Length(StreamsInfoHeader[ACol - 1]), Rect, DT_CENTER); + end; + if ACol = sgStreamsInfo.SortCol then + GridDrawSortArrows(sgStreamsInfo, Rect); + end; + end; +end; + +procedure TTcp.sgStreamsInfoFixedCellClick(Sender: TObject; ACol, + ARow: Integer); +begin + miStreamsInfoSort.Items[ACol].Checked := True; + SortPrepare(sgStreamsInfo, ACol, True); +end; + +procedure TTcp.sgStreamsInfoKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + GridKeyDown(sgStreamsInfo, Shift, Key); + case Key of + VK_F5: ShowCircuits; + end; +end; + +procedure TTcp.sgStreamsInfoMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if Button = mbRight then + sgStreamsInfo.MouseToCell(X, Y, sgStreamsInfo.MovCol, sgStreamsInfo.MovRow); +end; + +procedure TTcp.sgStreamsInfoMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +begin + sgStreamsInfo.MouseToCell(X, Y, sgStreamsInfo.MovCol, sgStreamsInfo.MovRow); + GridSetFocus(sgStreamsInfo); + GridShowHints(sgStreamsInfo); + GridCheckAutoPopup(sgStreamsInfo, sgStreamsInfo.MovRow, True); +end; + +procedure TTcp.sgStreamsInfoSelectCell(Sender: TObject; ACol, ARow: Integer; + var CanSelect: Boolean); +begin + GridSelectCell(sgStreamsInfo, ACol, ARow); +end; + +procedure TTcp.sgStreamsDblClick(Sender: TObject); +begin + if (sgStreams.MovRow > 0) and (sgStreams.MovCol = STREAMS_TARGET) then + ShellOpen(sgStreams.Cells[STREAMS_TARGET, sgStreams.SelRow]); +end; + +procedure TTcp.sgStreamsDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); +begin + if ARow = 0 then + begin + if ACol > 0 then + begin + case ACol of + STREAMS_TRACK: GridDrawIcon(sgStreams, Rect, lsMain, 11); + STREAMS_COUNT: GridDrawIcon(sgStreams, Rect, lsMain, 8); + STREAMS_BYTES_READ: GridDrawIcon(sgStreams, Rect, lsMain, 15); + STREAMS_BYTES_WRITTEN: GridDrawIcon(sgStreams, Rect, lsMain, 16); + else + DrawText(sgStreams.Canvas.Handle, PChar(StreamsHeader[ACol - 1]), Length(StreamsHeader[ACol - 1]), Rect, DT_CENTER); + end; + if (ACol = sgStreams.SortCol) and (ACol in [STREAMS_TARGET, STREAMS_BYTES_READ, STREAMS_BYTES_WRITTEN]) then + GridDrawSortArrows(sgStreams, Rect); + end; + end; +end; + +procedure TTcp.sgStreamsKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + GridKeyDown(sgStreams, Shift, Key); + case Key of + VK_F5: ShowCircuits; + end; +end; + +procedure TTcp.sgStreamsMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if Button = mbRight then + sgStreams.MouseToCell(X, Y, sgStreams.MovCol, sgStreams.MovRow); +end; + +procedure TTcp.sgStreamsMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +begin + sgStreams.MouseToCell(X, Y, sgStreams.MovCol, sgStreams.MovRow); + GridSetFocus(sgStreams); + GridShowHints(sgStreams); + GridCheckAutoPopup(sgStreams, sgStreams.MovRow, True); + if (sgStreams.MovCol = STREAMS_TARGET) and (sgStreams.MovRow > 0) and not IsEmptyRow(sgStreams, sgStreams.MovRow) then + sgStreams.Cursor := crHandPoint + else + sgStreams.Cursor := crDefault; +end; + +procedure TTcp.sgStreamsSelectCell(Sender: TObject; ACol, ARow: Integer; + var CanSelect: Boolean); +begin + GridSelectCell(sgStreams, ACol, ARow); + ShowStreamsInfo(sgCircuits.Cells[CIRC_ID, sgCircuits.SelRow], sgStreams.Cells[STREAMS_TARGET, sgStreams.SelRow]); +end; + +procedure TTcp.sgTransportsDrawCell(Sender: TObject; ACol, ARow: Integer; + Rect: TRect; State: TGridDrawState); +begin + if (ARow = 0) and (ACol < PT_PARAMS) then + DrawText(sgTransports.Canvas.Handle, PChar(TransportsHeader[ACol]), Length(TransportsHeader[ACol]), Rect, DT_CENTER); + GridScrollCheck(sgTransports, PT_TRANSPORTS, 179); +end; + +procedure TTcp.sgTransportsKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + GridKeyDown(sgTransports, Shift, Key); +end; + +procedure TTcp.sgTransportsMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +begin + sgTransports.MouseToCell(X, Y, sgTransports.MovCol, sgTransports.MovRow); + GridSetFocus(sgTransports); + GridShowHints(sgTransports); + GridCheckAutoPopup(sgTransports, sgTransports.MovRow, True); +end; + +procedure TTcp.sgTransportsSelectCell(Sender: TObject; ACol, ARow: Integer; + var CanSelect: Boolean); +begin + GridSelectCell(sgTransports, ACol, ARow); + SelectTransports; +end; + +procedure TTcp.sgHsPortsSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); +begin + GridSelectCell(sgHsPorts, ACol, ARow); + SelectHsPorts; +end; + +procedure TTcp.SelectHs; +var + i: Integer; + ParseStr, Items: ArrOfStr; +begin + if sgHs.SelRow = 0 then + sgHs.SelRow := 1; + if IsEmptyRow(sgHs, sgHs.SelRow) then + Exit; + edHsName.Text := sgHs.Cells[HS_NAME, sgHs.SelRow]; + case StrToIntDef(sgHs.Cells[HS_VERSION, sgHs.SelRow], HS_VERSION_3) of + 2: cbxHsVersion.ItemIndex := HS_VERSION_2; + 3: cbxHsVersion.ItemIndex := HS_VERSION_3; + end; + if sgHs.Cells[HS_STATE, sgHs.SelRow] = SELECT_CHAR then + cbxHsState.ItemIndex := HS_STATE_ENABLED + else + cbxHsState.ItemIndex := HS_STATE_DISABLED; + udHsNumIntroductionPoints.Position := StrToInt(sgHs.Cells[HS_INTRO_POINTS, sgHs.SelRow]); + CheckHsVersion; + if sgHs.Cells[HS_MAX_STREAMS, sgHs.SelRow] = NONE_CHAR then + begin + cbHsMaxStreams.Checked := False; + HsMaxStreamsEnable(False); + end + else + begin + cbHsMaxStreams.Checked := True; + HsMaxStreamsEnable(True); + udHsMaxStreams.Position := StrToInt(sgHs.Cells[HS_MAX_STREAMS, sgHs.SelRow]); + end; + if sgHs.Cells[HS_PORTS_DATA, sgHs.SelRow] <> '' then + begin + Items := Explode('|', sgHs.Cells[HS_PORTS_DATA, sgHs.SelRow]); + sgHsPorts.RowCount := Length(Items) + 1; + for i := 0 to Length(Items) - 1 do + begin + ParseStr := Explode(',', Items[i]); + sgHsPorts.Cells[HSP_INTERFACE, i + 1] := ParseStr[0]; + sgHsPorts.Cells[HSP_REAL_PORT, i + 1] := ParseStr[1]; + sgHsPorts.Cells[HSP_VIRTUAL_PORT, i + 1] := ParseStr[2]; + end; + SelectHsPorts; + HsPortsEnable(True); + end + else + begin + ClearGrid(sgHsPorts); + HsPortsEnable(False); + end; +end; + +procedure TTcp.SelectHsPorts; +begin + if sgHsPorts.SelRow = 0 then + sgHsPorts.SelRow := 1; + if IsEmptyRow(sgHsPorts, sgHsPorts.SelRow) then + Exit; + cbxHsAddress.ItemIndex := cbxHsAddress.Items.IndexOf(sgHsPorts.Cells[HSP_INTERFACE, sgHsPorts.SelRow]); + udHsRealPort.Position := StrToInt(sgHsPorts.Cells[HSP_REAL_PORT, sgHsPorts.SelRow]); + udHsVirtualPort.Position := StrToInt(sgHsPorts.Cells[HSP_VIRTUAL_PORT, sgHsPorts.SelRow]); +end; + +procedure TTcp.SelectTransports; +begin + if sgTransports.SelRow = 0 then + sgTransports.SelRow := 1; + edTransports.Text := sgTransports.Cells[PT_TRANSPORTS, sgTransports.SelRow]; + edTransportsHandler.Text := sgTransports.Cells[PT_HANDLER, sgTransports.SelRow]; + meHandlerParams.Text := sgTransports.Cells[PT_PARAMS, sgTransports.SelRow]; + cbxTransportType.ItemIndex := GetTransportID(sgTransports.Cells[PT_TYPE, sgTransports.SelRow]); +end; + +procedure TTcp.SelectorMenuClick(Sender: TObject); +var + i: Integer; + Parent: TMenuItem; + State, HandleDisabled: Boolean; +begin + State := Boolean(TMenuItem(Sender).Tag); + Parent := TMenuItem(Sender).Parent; + HandleDisabled := Boolean(TMenuItem(Sender).HelpContext); + + for i := 0 to Parent.Count - 1 do + begin + if Parent.Items[i].AutoCheck and (Parent.Items[i].Enabled or HandleDisabled) then + Parent.Items[i].Checked := State; + end; + case Parent.Tag of + 1: SetRoutersFilter(Sender); + 2: SetRoutersFilterState(Sender); + 3: SetCircuitsFilter(Sender); + 4: miTplSaveClick(Sender); + 5: miTplLoadClick(Sender); + end; +end; + +procedure TTcp.EnableOptionButtons(State: Boolean = True); +begin + if State and OptionsLocked then + Exit; + btnApplyOptions.Enabled := State; + btnCancelOptions.Enabled := State; + OptionsChanged := State; +end; + +procedure TTcp.ShowBalloon(Msg: string; Title: string = ''; Notice: Boolean = False; MsgType: TMsgType = mtInfo); +var + MsgIcon: TBalloonFlags; +begin + MsgIcon := bfNone; + case MsgType of + mtInfo: MsgIcon := bfInfo; + mtWarning: MsgIcon := bfWarning; + mtError: MsgIcon := bfError; + end; + if (Notice or ((cbShowBalloonHint.Checked) and (not cbShowBalloonOnlyWhenHide.Checked or + (cbShowBalloonOnlyWhenHide.Checked and Visible = False)))) and not Closing then + begin + tiTray.BalloonFlags := MsgIcon; + tiTray.BalloonTitle := GetMsgCaption(Title, MsgType); + tiTray.BalloonHint := Msg; + tiTray.ShowBalloonHint; + end; +end; + +procedure TTcp.SendDataThroughProxy; +var + Http: TSendHttpThread; +begin + if cbEnableSocks.Checked and (ConnectState = 2) then + begin + Http := TSendHttpThread.Create(True); + Http.FreeOnTerminate := True; + Http.Priority := tpNormal; + Http.Start; + end; +end; + +procedure TTcp.GetDNSExternalAddress(UpdateExternalIp: Boolean = True); +var + Dns: TDNSSendThread; +begin + if not UpdateExternalIp then + begin + if ValidAddress(ServerIPv4) = 1 then + begin + GetIpStage := 0; + UpdateServerInfo; + Exit; + end; + end; + Dns := TDNSSendThread.Create(True); + Dns.FreeOnTerminate := True; + Dns.Priority := tpNormal; + Dns.Start; +end; + +procedure TTcp.GetServerInfo(UpdateExternalIp: Boolean = True); +begin + if cbxServerMode.ItemIndex > 0 then + begin + GetIpStage := 1; + if cbUseOpenDNS.Checked and not cbUseOpenDNSOnlyWhenUnknown.Checked then + GetDNSExternalAddress(UpdateExternalIp) + else + begin + if ConnectState = 2 then + begin + if UpdateExternalIp then + SendCommand('GETINFO address') + end + else + UpdateServerInfo; + end; + end; +end; + +procedure TTcp.UpdateServerInfo; +var + Fingerprint, ServerIp, BridgeStr: string; + IsIPv4, IsIPv6, IsFingerprint, ServerIsBridge: Boolean; + + function ReplaceIp(Str: string): string; + begin + Result := StringReplace(Str, ServerIPv4, FormatHost(ServerIPv6), [rfReplaceAll]); + end; + +begin + miServerCopyBridgeIPv4.Visible := False; + miServerCopyBridgeIPv6.Visible := False; + miServerCopyBridgeIPv4.Hint := ''; + miServerCopyBridgeIPv6.Hint := ''; + + Fingerprint := SeparateRight(Trim(FileGetString(UserDir + 'fingerprint')), ' '); + IsFingerprint := ValidHash(Fingerprint); + if IsFingerprint then + lbFingerprint.Caption := Fingerprint + else + lbFingerprint.Caption := TransStr('260'); + miServerCopyFingerprint.Caption := Fingerprint; + miServerCopyFingerprint.Visible := IsFingerprint; + + IsIPv4 := ValidAddress(ServerIPv4) = 1; + IsIPv6 := (ValidAddress(ServerIPv6) = 2) and cbListenIPv6.Checked; + ServerIsBridge := cbxServerMode.ItemIndex = 3; + + miServerCopyIPv4.Caption := ServerIPv4; + miServerCopyIPv6.Caption := FormatHost(ServerIPv6); + miServerCopyIPv4.Visible := IsIPv4; + miServerCopyIPv6.Visible := IsIPv6; + + if IsIPv4 then + begin + if IsIPv6 then + ServerIp := ServerIPv4 + ', ' + FormatHost(ServerIPv6) + else + ServerIp := ServerIPv4; + lbServerExternalIp.Caption := ServerIp; + + if ServerIsBridge and IsFingerprint then + begin + if cbxBridgeType.ItemIndex = 0 then + BridgeStr := ServerIPv4 + ':' + edORPort.Text + ' ' + lbFingerprint.Caption + else + begin + BridgeStr := cbxBridgeType.Text + ' ' + ServerIPv4 + ':' + edTransportPort.Text + ' ' + lbFingerprint.Caption; + if ServerIsObfs4 then + begin + miServerCopyBridgeIPv4.Hint := BridgeStr + ' ' + GetBridgeCert; + BridgeStr := BridgeStr + '...'; + end; + end; + miServerCopyBridgeIPv4.Caption := BridgeStr; + + if IsIPv6 then + begin + lbBridge.Caption := BridgeStr + BR + ReplaceIp(BridgeStr); + miServerCopyBridgeIPv6.Hint := ReplaceIp(miServerCopyBridgeIPv4.Hint); + miServerCopyBridgeIPv6.Caption := ReplaceIp(BridgeStr); + end + else + lbBridge.Caption := BridgeStr; + + miServerCopyBridgeIPv4.Visible := True; + miServerCopyBridgeIPv6.Visible := IsIPv6; + end + end + else + begin + lbServerExternalIp.Caption := TransStr('260'); + lbBridge.Caption := TransStr('260'); + end; +end; + +procedure TTcp.InitPortForwarding(Test: Boolean); +var + i: Integer; +begin + UPnPMsg := ''; + GetLocalInterfaces(cbxSocksHost); + if (cbxServerMode.ItemIndex > 0) and (cbUseUPnP.Checked) then + begin + for i := 0 to cbxSocksHost.items.Count - 1 do + begin + if not IpInRanges(cbxSocksHost.Items[i], PrivateRanges) then + Continue; + AddUPnPEntry(udORPort.Position, 'ORPort', cbxSocksHost.Items[i], Test, UPnPMsg); + udORPort.Tag := udORPort.Position; + if cbUseDirPort.Checked then + begin + AddUPnPEntry(udDirPort.Position, 'DirPort', cbxSocksHost.Items[i], Test, UPnPMsg); + udDirPort.Tag := udDirPort.Position; + end; + if (cbxServerMode.ItemIndex = 3) and (cbxBridgeType.ItemIndex > 0) then + begin + AddUPnPEntry(udTransportPort.Position, 'PTPort', cbxSocksHost.Items[i], Test, UPnPMsg); + udTransportPort.Tag := udTransportPort.Position; + end; + end; + end; +end; + +procedure TTcp.LogListenerStart(hStdOut: THandle); +begin + if not Assigned(Logger) then + begin + Logger := TReadPipeThread.Create(True); + Logger.hStdOut := hStdOut; + Logger.FreeOnTerminate := True; + Logger.Priority := tpNormal; + Logger.OnTerminate := LogThreadTerminate; + Logger.Start; + end; +end; + +procedure TTcp.CheckVersionStart(hStdOut: THandle); +begin + if not Assigned(VersionChecker) then + begin + VersionChecker := TReadPipeThread.Create(True); + VersionChecker.hStdOut := hStdOut; + VersionChecker.VersionCheck := True; + VersionChecker.FreeOnTerminate := True; + VersionChecker.Priority := tpNormal; + VersionChecker.OnTerminate := VersionCheckerThreadTerminate; + VersionChecker.Start; + end; +end; + +procedure TTcp.ControlPortConnect; +begin + if not Assigned(Controller) then + begin + Controller := TControlThread.Create(True); + Controller.FreeOnTerminate := True; + Controller.Priority := tpNormal; + Controller.OnTerminate := ControlThreadTerminate; + Controller.Start; + end; +end; + +procedure TTcp.CheckOpenPorts(PortSpin: TUpDown; IP: string; var PortStr: string); +var + Port: Integer; +begin + if PortTCPIsOpen(PortSpin.Position, IP, 1) then + begin + PortStr := PortStr + ', ' + IntToStr(PortSpin.Position); + Randomize; + repeat + Port := RandomRange(9000, 10000) + until not PortTCPIsOpen(Port, IP, 1); + PortSpin.Position := Port; + end; +end; + +procedure TTcp.CheckStatusControls; +var + ServerIsBridge, ServerEnabled: Boolean; +begin + if cbEnableSocks.Checked then + lbStatusProxyAddr.Caption := FormatHost(GetHost(cbxSocksHost)) + ':' + IntToStr(udSOCKSPort.Position) + else + lbStatusProxyAddr.Caption := TransStr('226'); + CheckLabelEndEllipsis(lbStatusProxyAddr, 300, epPathEllipsis, False, True); + + ServerEnabled := cbxServerMode.ItemIndex > 0; + ServerIsBridge := cbxServerMode.ItemIndex = 3; + + lbBridge.Visible := ServerIsBridge; + lbBridgeCaption.Visible := ServerIsBridge; + gbServerInfo.Visible := ServerEnabled; + if ServerEnabled then + GetServerInfo(False); + + if cbEnablePingMeasure.Checked or cbEnableDetectAliveNodes.Checked then + begin + if cbAutoScanNewNodes.Checked then + lbStatusScanner.Caption := TransStr('380') + else + lbStatusScanner.Caption := TransStr('381') + end + else + lbStatusScanner.Caption := TransStr('226'); + + if TorVersion = '0.0.0.0' then + lbClientVersion.Caption := TransStr('110') + else + lbClientVersion.Caption := TorVersion; +end; + +procedure TTcp.SetOptionsEnable(State: Boolean); +var + i: Integer; +begin + for i := 0 to pcOptions.PageCount - 1 do + pcOptions.Pages[i].Enabled := State; +end; + +procedure TTcp.CheckOptionsChanged; +var + TorrcDate: TDateTime; + TorrcChanged: Boolean; +begin + FileAge(TorConfigFile, TorrcDate); + TorrcChanged := TorrcDate <> LastTorrcDate; + if OptionsChanged or TorrcChanged then + begin + if Restarting or TorrcChanged then + ResetOptions + else + begin + if ShowMsg(TransStr('354'), '', mtWarning, True) then + begin + if NodesListStage = 1 then + SaveNodesList(cbxNodesListType.ItemIndex); + ApplyOptions(True); + end + else + ResetOptions; + end; + end; +end; + +procedure TTcp.StartTor(AutoResolveErrors: Boolean = False); +var + PortStr, Msg: string; +begin + CheckOptionsChanged; + if FileExists(TorExeFile) then + begin + PortStr := ''; + OptionsLocked := True; + ForceDirectories(LogsDir); + ForceDirectories(OnionAuthDir); + CheckOpenPorts(udSOCKSPort, cbxSocksHost.Text, PortStr); + CheckOpenPorts(udControlPort, '127.0.0.1', PortStr); + if cbxServerMode.ItemIndex > 0 then + begin + CheckOpenPorts(udORPort, '127.0.0.1', PortStr); + if cbUseDirPort.Checked then + CheckOpenPorts(udDirPort, '127.0.0.1', PortStr); + if cbxBridgeType.ItemIndex > 0 then + CheckOpenPorts(udTransportPort, '127.0.0.1', PortStr); + end; + Delete(PortStr, 1, 1); + if PortStr <> '' then + begin + if ShowMsg(Format(TransStr('259'), [PortStr]), TransStr('246'), mtWarning, True) then + ApplyOptions + else + begin + ResetOptions; + Exit; + end; + end; + OptionsLocked := False; + FileAge(UserDir + 'control_auth_cookie', LastAuthCookieDate); + TorMainProcess := ExecuteProcess(TorExeFile + ' -f "' + TorConfigFile + '"', [pfHideWindow, pfReadStdOut], hJob); + if TorMainProcess.hProcess <> 0 then + begin + if CheckFileVersion(TorVersion, '0.4.0.5') then + begin + StopCode := STOP_NORMAL; + if miAutoClear.Checked then + meLog.Clear; + StreamsDic.Clear; + CircuitsDic.Clear; + ExitNodeID := ''; + Circuit := ''; + DLSpeed := 0; + ULSpeed := 0; + SessionDL := 0; + SessionUL := 0; + MaxDLSpeed := 0; + MaxULSpeed := 0; + ConnectState := 1; + TotalsNeedSave := False; + GeoIpUpdating := False; + SelectExitCircuit := False; + LockCircuits := False; + LockCircuitInfo := False; + LockStreams := False; + LockStreamsInfo := False; + tmTraffic.Enabled := True; + tmCircuits.Enabled := True; + tmSaveTotals.Enabled := True; + btnSwitchTor.ImageIndex := 1; + btnSwitchTor.Caption := TransStr('101'); + btnChangeCircuit.Caption := '0 %'; + if cbEnableSocks.Checked then + begin + lbExitIp.Caption := TransStr('111'); + lbExitCountry.Caption := TransStr('112'); + end; + SetOptionsEnable(False); + ControlsDisable(tsNetwork); + ControlsDisable(tsServer); + edControlPort.Enabled := False; + lbControlPort.Enabled := False; + cbxAuthMetod.Enabled := False; + lbAuthMetod.Enabled := False; + if cbxAuthMetod.ItemIndex = 1 then + begin + edControlPassword.Enabled := False; + lbControlPassword.Enabled := False; + imGeneratePassword.Enabled := False; + end; + tiTray.IconIndex := 1; + miSwitchTor.ImageIndex := 1; + miSwitchTor.Caption := btnSwitchTor.Caption; + CheckStatusControls; + if(cbShowBalloonHint.Checked and not cbShowBalloonOnlyWhenHide.Checked) + or (not cbConnectOnStartup.Checked or (cbConnectOnStartup.Checked and cbMinimizeOnStartup.Checked)) then + if not Restarting then + ShowBalloon(TransStr('240')); + ControlPortConnect; + if TorMainProcess.hStdOutput <> 0 then + LogListenerStart(TorMainProcess.hStdOutput); + InitPortForwarding(False); + end + else + begin + TerminateProcess(TorMainProcess.hProcess, 0); + if not AutoResolveErrors then + begin + if Win32MajorVersion = 5 then + Msg := TransStr('377') + BR + BR + TransStr('397') + else + Msg := TransStr('377'); + ShowMsg(Msg, '', mtWarning); + end; + end; + end + else + if not AutoResolveErrors then + ShowMsg(TransStr('238'), '', mtWarning); + end + else + begin + if not AutoResolveErrors then + begin + if (ShowMsg(TransStr('239'),'', mtWarning, True)) then + ShellOpen(GetDefaultsValue('DownloadUrl', DOWNLOAD_URL)); + end; + end; +end; + +procedure TTcp.StopTor; +begin + TerminateProcess(TorMainProcess.hProcess, 0); + if Assigned(Controller) then + Controller.Terminate; + if Assigned(Consensus) then + Consensus.Terminate; + if Assigned(Descriptors) then + Descriptors.Terminate; + if Assigned(Logger) then + Logger.Terminate; + ConnectState := 0; + InfoStage := 0; + GetIpStage := 0; + AutoScanStage := 0; + + LockCircuits := False; + LockCircuitInfo := False; + LockStreams := False; + LockStreamsInfo := False; + tmUpdateIp.Enabled := False; + tmConsensus.Enabled := False; + tmCircuits.Enabled := False; + tmSaveTotals.Enabled := False; + btnChangeCircuit.Caption := TransStr('103'); + btnChangeCircuit.Enabled := True; + btnSwitchTor.ImageIndex := 0; + btnSwitchTor.Caption := TransStr('100'); + imExitFlag.Visible := False; + lbExitCountry.Left := Round(174 * Scale); + lbExitCountry.Caption := TransStr('110'); + lbExitCountry.Cursor := crDefault; + lbExitCountry.Hint := ''; + lbExitIp.Caption := TransStr('109'); + lbExitIp.Cursor := crDefault; + tiTray.IconIndex := 0; + miChangeCircuit.Enabled := False; + miSwitchTor.ImageIndex := 0; + miSwitchTor.Caption := btnSwitchTor.Caption; + if not Restarting then + begin + SetOptionsEnable(True); + edControlPort.Enabled := True; + lbControlPort.Enabled := True; + cbxAuthMetod.Enabled := True; + lbAuthMetod.Enabled := True; + if cbxAuthMetod.ItemIndex = 1 then + begin + edControlPassword.Enabled := True; + lbControlPassword.Enabled := True; + imGeneratePassword.Enabled := True; + end; + ControlsEnable(tsNetwork); + ControlsEnable(tsServer); + BridgesCheckControls; + ShowBalloon(TransStr('241')); + end; + RemoveUPnPEntry(udORPort.Tag, udDirPort.Tag, udTransportPort.Tag); + udORPort.Tag := 0; + udDirPort.Tag := 0; + udTransportPort.Tag := 0; +end; + +procedure TTcp.RestartTor(RestartCode: Byte = 0); +begin + if not Assigned(RestartTimeout) then + begin + if (RestartCode > 0) or cbRestartOnControlFail.Checked then + Restarting := True; + StopTor; + RestartTimeout := TTimer.Create(Tcp); + RestartTimeout.Tag := RestartCode; + RestartTimeout.OnTimer := RestartTimer; + RestartTimeout.Interval := 200; + end; +end; + +procedure TTcp.RestartTimer(Sender: TObject); +begin + if not Assigned(Controller) and not Assigned(Logger) and not Assigned(Consensus) and not Assigned(Descriptors) then + begin + case TTimer(Sender).Tag of + 1: + begin + ResetGuards(TGuardType(miResetGuards.Tag)); + StartTor; + end; + else + if cbRestartOnControlFail.Checked then + StartTor; + end; + Restarting := False; + FreeAndNil(RestartTimeout); + end +end; + +procedure TTcp.ReloadTorConfig; +begin + if ConnectState = 2 then + begin + SendCommand('SIGNAL RELOAD'); + SendDataThroughProxy; + end; +end; + +procedure TTcp.imGeneratePasswordClick(Sender: TObject); +begin + edControlPassword.Text := RandomString(15); + EnableOptionButtons; +end; + +procedure TTcp.imUPnPTestClick(Sender: TObject); +begin + InitPortForwarding(True); + if UPnPMsg <> '' then + ShowMsg(UPnPMsg, TransStr('181')) + else + ShowMsg(TransStr('242'), TransStr('181'), mtWarning); +end; + +procedure TTcp.CheckRequiredFiles; +begin + SetTorConfig('DataDirectory', ExcludeTrailingPathDelimiter(UserDir)); + SetTorConfig('ClientOnionAuthDir', ExcludeTrailingPathDelimiter(OnionAuthDir)); + + GeoIpExists := FileExists(GeoIpFile); + if GeoIpExists then + SetTorConfig('GeoIPFile', GeoIpFile) + else + DeleteTorConfig('GeoIPFile'); + + if FileExists(GeoIpv6File) then + SetTorConfig('GeoIPv6File', GeoIpv6File) + else + DeleteTorConfig('GeoIPv6File'); +end; + +procedure TTcp.SetIconsColor; + function GetRGBSum(AColor: TColor): Integer; + begin + Result := GetRValue(AColor) + GetGValue(AColor) + GetBValue(AColor); + end; +begin + if GetRGBSum(ColorToRGB(StyleServices.GetStyleColor(scButtonNormal))) >= 384 then + LoadIconsFromResource(lsButtons, 'ICON_BUTTONS_DARK') + else + LoadIconsFromResource(lsButtons, 'ICON_BUTTONS_LIGHT'); + if GetRGBSum(ColorToRGB(StyleServices.GetStyleColor(scWindow))) >= 384 then + LoadIconsFromResource(lsMain, 'ICON_MAIN_DARK') + else + LoadIconsFromResource(lsMain, 'ICON_MAIN_LIGHT'); + if GetRGBSum(ColorToRGB(StyleServices.GetStyleColor(scEdit))) >= 384 then + begin + lsMenus.GrayscaleFactor := 0; + LoadIconsFromResource(lsMenus, 'ICON_MENUS_DARK') + end + else + begin + lsMenus.GrayscaleFactor := 128; + LoadIconsFromResource(lsMenus, 'ICON_MENUS_LIGHT'); + end; + + if StyleServices.Enabled and StyleServices.IsSystemStyle then + pbTraffic.Color := clWindow + else + pbTraffic.Color := ColorToRGB(StyleServices.GetStyleColor(scWindow)); + + lsButtons.GetIcon(6, imGeneratePassword.Picture.Icon); + lsButtons.GetIcon(7, imUPnPTest.Picture.Icon); + SetButtonGlyph(lsButtons, 4, sbShowOptions); + SetButtonGlyph(lsButtons, 5, sbShowLog); + SetButtonGlyph(lsButtons, 9, sbShowStatus); + SetButtonGlyph(lsButtons, 10, sbShowCircuits); + SetButtonGlyph(lsButtons, 8, sbShowRouters); + SetButtonGlyph(lsButtons, 11, sbDecreaseForm); + + btnSwitchTor.ImageIndex := ConnectState; + btnSwitchTor.Refresh; + btnChangeCircuit.Refresh; + if FormSize = 1 then + begin + case LastPlace of + LP_OPTIONS: sgFilter.Refresh; + LP_CIRCUITS: sgCircuits.Refresh; + LP_ROUTERS: sgRouters.Refresh; + end; + end; +end; + +procedure TTcp.SetButtonGlyph(ls: TImageList; Index: Integer; Button: TSpeedButton); +begin + Button.Glyph := nil; + ls.GetBitmap(Index, Button.Glyph); +end; + +procedure TTcp.UpdateConfigVersion; +var + ini: TMemIniFile; + TemplateList: TStringlist; + TemplateName, Temp: string; + ParseStr: ArrOfStr; + FirstRun: Boolean; + i, ConfigVersion: Integer; + + function ConvertCodes(Str: string): string; + var + Mas: ArrOfStr; + i: Integer; + begin + Result := ''; + Mas := Explode(',', Str); + for i := 0 to Length(Mas) - 1 do + if ValidInt(Mas[i], 0, MAX_COUNTRIES - 1) then + Result := Result + ',' + CountryCodes[StrToInt(Mas[i])] + else + Result := Result + ',' + Mas[i]; + Delete(Result, 1, 1); + end; + + function ConvertNodes(FilterData: string; TorFormat: Boolean): string; + var + ParsedData: ArrOfStr; + NodesList: TStringlist; + EntryNodes, MiddleNodes, ExitNodes, ExcludeList, IncludeList: string; + FMode, FNodes: Byte; + i: Integer; + begin + ParsedData := Explode(';', FilterData); + if (Length(ParsedData) in [4,5]) then + begin + if ValidInt(ParsedData[1], 0, 2) then + FMode := StrToInt(ParsedData[1]) + else + FMode := 0; + + if (Length(ParsedData) = 5) and ValidInt(ParsedData[4], 1, 7) then + FNodes := StrToInt(ParsedData[4]) + else + FNodes := 4; + + ExcludeList := ConvertCodes(ParsedData[2]); + IncludeList := ConvertCodes(ParsedData[3]); + + if FMode in [0, 2] then + begin + NodesList := TStringList.Create; + try + ParseParametersEx(RemoveBrackets(DEFAULT_EXIT_NODES), ',', NodesList); + for i := NodesList.Count - 1 downto 0 do + begin + if Pos(NodesList[i], ExcludeList) <> 0 then + NodesList.Delete(i); + end; + for i := 0 to NodesList.Count - 1 do + begin + if TorFormat then + ExitNodes := ExitNodes + ',{' + NodesList[i] + '}' + else + ExitNodes := ExitNodes + ',' + NodesList[i]; + end; + Delete(ExitNodes, 1, 1); + finally + NodesList.Free; + end; + end; + case FMode of + 0: Fmode := 1; + 1: ExitNodes := IncludeList; + 2: FMode := 0; + end; + case FNodes of + 1: begin EntryNodes := ExitNodes; ExitNodes := ''; end; + 2: begin MiddleNodes := ExitNodes; ExitNodes := ''; end; + 3: begin EntryNodes := ExitNodes; MiddleNodes := ExitNodes; ExitNodes := ''; end; + 5: begin EntryNodes := ExitNodes; end; + 6: begin MiddleNodes := ExitNodes; end; + 7: begin EntryNodes := ExitNodes; MiddleNodes := ExitNodes; end; + end; + Result := ParsedData[0] + ';' + IntToStr(FMode) + ';' + EntryNodes + ';' + MiddleNodes + ';' + ExitNodes; + end; + end; + +begin + if FileExists(UserConfigFile) and FileExists(TorConfigFile) then + FirstRun := False + else + FirstRun := True; + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + ConfigVersion := ini.ReadInteger('Main', 'ConfigVersion', 1); + if ConfigVersion = CURRENT_CONFIG_VERSION then + Exit; + if not FirstRun then + begin + if ConfigVersion = 1 then + begin + case ini.ReadInteger('Main', 'Language', 0) of + 1: ini.WriteInteger('Main', 'Language', 1033); + 2: ini.WriteInteger('Main', 'Language', 1031); + else + ini.WriteInteger('Main', 'Language', 1049); + end; + + if ini.ReadInteger('Server', 'BridgeType', 0) = 1 then + ini.WriteString('Server', 'BridgeType', 'obfs4'); + + ParseStr := Explode(';', ConvertNodes( + ';' + IntToStr(ini.ReadInteger('Main', 'FilterMode', 0)) + + ';' + GetTorConfig('ExcludeExitNodes', '', [cfFindComments]) + + ';' + GetTorConfig('ExitNodes', '', [cfFindComments]) + + ';' + IntToStr(ini.ReadInteger('Main', 'FilterNodes', 4)), True + )); + ini.WriteInteger('Filter', 'FilterMode', StrToInt(ParseStr[1])); + ini.WriteString('Filter', 'EntryNodes', ParseStr[2]); + ini.WriteString('Filter', 'MiddleNodes', ParseStr[3]); + ini.WriteString('Filter', 'ExitNodes', ParseStr[4]); + + SetTorConfig('EntryNodes', ParseStr[2], [cfFindComments]); + SetTorConfig('MiddleNodes', ParseStr[3], [cfFindComments]); + SetTorConfig('ExitNodes', ParseStr[4], [cfFindComments]); + DeleteTorConfig('ExcludeExitNodes', [cfFindComments]); + + Temp := GetTorConfig('ExcludeNodes', '', [cfFindComments]); + ini.WriteString('Routers', 'ExcludeNodes', Temp); + if GetTorConfig('ExcludeNodes', '0', [cfExistCheck]) = '1' then + ini.WriteBool('Lists', 'UseExcludeNodes', True) + else + DeleteTorConfig('ExcludeNodes', [cfFindComments]); + + Temp := GetTorConfig('TrackHostExits', '', [cfFindComments]); + ini.WriteString('Lists', 'TrackHostExits', Temp); + if GetTorConfig('TrackHostExits', '0', [cfExistCheck]) = '1' then + ini.WriteBool('Lists', 'UseTrackHostExits', True) + else + DeleteTorConfig('TrackHostExits', [cfFindComments]); + + Temp := GetTorConfig('TrackHostExitsExpire', '1800', [cfFindComments], ptInteger, Tcp.udTrackHostExitsExpire.Min, Tcp.udTrackHostExitsExpire.Max); + ini.WriteInteger('Lists', 'TrackHostExitsExpire', StrToInt(Temp)); + if GetTorConfig('TrackHostExitsExpire', '0', [cfExistCheck]) = '0' then + DeleteTorConfig('TrackHostExitsExpire', [cfFindComments]); + + Temp := GetTorConfig('HashedControlPassword', '', [cfFindComments]); + ini.WriteString('Main', 'HashedControlPassword', Temp); + if GetTorConfig('HashedControlPassword', '0', [cfExistCheck]) = '0' then + DeleteTorConfig('HashedControlPassword', [cfFindComments]); + + Temp := GetTorConfig('Bridge', '', [cfMultiLine, cfFindComments]); + if Temp <> '' then + begin + ParseStr := Explode('|', Temp); + for i := 0 to Length(ParseStr) - 1 do + ini.WriteString('Bridges', IntToStr(i), ParseStr[i]); + ini.WriteBool('Network', 'UseBridges', StrToBool(GetTorConfig('UseBridges', '0', [], ptBoolean))); + ini.WriteInteger('Network', 'BridgesType', 1); + DeleteTorConfig('Bridge', [cfMultiLine, cfFindComments]); + end; + + ini.WriteBool('Server', 'UseNumCPUs', StrToBool(GetTorConfig('NumCPUs', '0', [cfExistCheck]))); + ini.WriteBool('Server', 'UseRelayBandwidth', StrToBool(GetTorConfig('RelayBandwidthRate', '0', [cfExistCheck])) or StrToBool(GetTorConfig('RelayBandwidthBurst', '0', [cfExistCheck])) or StrToBool(GetTorConfig('MaxAdvertisedBandwidth', '0', [cfExistCheck]))); + ini.WriteBool('Server', 'UseMaxMemInQueues', StrToBool(GetTorConfig('MaxMemInQueues', '0', [cfExistCheck]))); + ini.WriteBool('Server', 'UseDirPort', StrToBool(GetTorConfig('DirPort', '0', [cfExistCheck]))); + ini.WriteBool('Server', 'PublishServerDescriptor', StrToBool(GetTorConfig('PublishServerDescriptor', '1', [], ptBoolean))); + ini.WriteBool('Server', 'DirReqStatistics', StrToBool(GetTorConfig('DirReqStatistics', '1', [], ptBoolean))); + ini.WriteBool('Server', 'HiddenServiceStatistics', StrToBool(GetTorConfig('HiddenServiceStatistics', '1', [], ptBoolean))); + ini.WriteBool('Server', 'IPv6Exit', StrToBool(GetTorConfig('IPv6Exit', '0', [], ptBoolean))); + + GetLocalInterfaces(cbxHsAddress); + GetTorHs; + SaveHiddenServices(ini); + + ini.WriteString('Main', 'FormPosition', + IntToStr(ini.ReadInteger('Main', 'PositionLeft', -1)) + ',' + + IntToStr(ini.ReadInteger('Main', 'PositionTop', -1)) + ',-1,-1'); + + ini.DeleteKey('Main', 'ConfirmBanRelay'); + ini.DeleteKey('Main', 'PositionLeft'); + ini.DeleteKey('Main', 'PositionTop'); + ini.DeleteKey('Main', 'FilterMode'); + ini.DeleteKey('Main', 'FilterNodes'); + ini.DeleteKey('Main', 'UseExcludeNodes'); + ini.DeleteKey('Main', 'UseTrackHostExits'); + + TemplateList := TStringlist.Create; + try + ini.ReadSectionValues('Templates', TemplateList); + if TemplateList.Count > 0 then + begin + for i := 0 to TemplateList.Count - 1 do + begin + TemplateName := SeparateLeft(TemplateList[i], '='); + ini.WriteString('Templates', TemplateName, ConvertNodes(ini.ReadString('Templates', TemplateName, ''), False)); + end; + end; + finally + TemplateList.Free; + end; + ForceDirectories(LogsDir); + RenameFile(UserDir + 'console.log', LogsDir + 'console.log'); + ConfigVersion := 2; + end; + end + else + ConfigVersion := CURRENT_CONFIG_VERSION; + ini.WriteInteger('Main', 'ConfigVersion', ConfigVersion); + finally + ini.UpdateFile; + ini.Free; + end; +end; + +function TTcp.GetTorHs: Integer; +const + DEFAULT_ADDRESS = '127.0.0.1'; + DEFAULT_PORT = '80'; +var + Name, Version, MaxStreams, IntroPoints, Port, Temp, Data, Delimiter: string; + VirtualPort, RealPort, Address: string; + ParseStr: ArrOfStr; + Reset: Boolean; + i, Min, Max: Integer; + + function GetParam(Param, Str: string): string; + var + p, CommentPos, ParamSize: Integer; + begin + p := InsensPosEx(Param + ' ', Str); + if p = 1 then + begin + ParamSize := Length(Param); + CommentPos := Pos('#', Str); + if CommentPos > p + ParamSize then + Result := Trim(copy(Str, p + ParamSize + 1, CommentPos - ParamSize - 2)) + else + Result := Trim(copy(Str, p + ParamSize + 1, Length(Str) - ParamSize - 1)); + end + else + Result := ''; + end; + +begin + Result := 0; + Min := 0; + Max := 0; + + for i := 0 to TorConfig.Count - 1 do + begin + Name := GetParam('HiddenServiceDir', TorConfig[i]); + if Name <> '' then + begin + Inc(Result); + sgHs.Cells[HS_VERSION, Result] := '3'; + sgHs.Cells[HS_INTRO_POINTS, Result] := '3'; + sgHs.Cells[HS_MAX_STREAMS, Result] := NONE_CHAR; + sgHs.cells[HS_STATE, Result] := SELECT_CHAR; + sgHs.Cells[HS_PORTS_DATA, Result] := ''; + if Result > 1 then + sgHs.RowCount := sgHs.RowCount + 1; + Name := ExcludeTrailingPathDelimiter(Name); + Name := copy(Name, RPos('\', Name) + 1); + TorConfig[i] := 'HiddenServiceDir ' + HsDir + Name; + + sgHs.Cells[HS_NAME, Result] := Name; + sgHs.Cells[HS_PREVIOUS_NAME, Result] := sgHs.Cells[HS_NAME, Result]; + + continue; + end; + + Version := GetParam('HiddenServiceVersion', TorConfig[i]); + if Version <> '' then + begin + if ValidInt(Version, 2, 3) then + sgHs.Cells[HS_VERSION, Result] := Version + else + TorConfig[i] := 'HiddenServiceVersion 3'; + continue; + end; + + Port := GetParam('HiddenServicePort', TorConfig[i]); + if Port <> '' then + begin + Reset := False; + Delimiter := ''; + Address := ''; + RealPort := ''; + VirtualPort := ''; + Temp := sgHs.Cells[HS_PORTS_DATA, Result]; + if Temp <> '' then + Delimiter := '|'; + ParseStr := Explode(' ', Port); + VirtualPort := ParseStr[0]; + if not ValidInt(VirtualPort, 1, 65535) then + begin + VirtualPort := DEFAULT_PORT; + Reset := True; + end; + if Length(ParseStr) > 1 then + begin + if ValidSocket(ParseStr[1]) then + begin + Address := GetAddressFromSocket(ParseStr[1]); + RealPort := IntToStr(GetPortFromSocket(ParseStr[1])); + if Reset then + VirtualPort := RealPort; + if Tcp.cbxHsAddress.Items.IndexOf(Address) = -1 then + begin + Address := DEFAULT_ADDRESS; + Reset := True; + end; + end + else + begin + Address := RemoveBrackets(ParseStr[1], True); + if ValidAddress(Address) <> 0 then + begin + RealPort := VirtualPort; + if Tcp.cbxHsAddress.Items.IndexOf(Address) = -1 then + begin + Address := DEFAULT_ADDRESS; + Reset := True; + end; + end + else + begin + Address := DEFAULT_ADDRESS; + if ValidInt(ParseStr[1], 1, 65535) then + begin + RealPort := ParseStr[1]; + if Reset then + VirtualPort := RealPort; + end + else + begin + RealPort := VirtualPort; + Reset := True; + end; + end; + end + end + else + begin + Address := DEFAULT_ADDRESS; + RealPort := VirtualPort; + end; + Data := Address + ',' + RealPort + ',' + VirtualPort; + sgHs.Cells[HS_PORTS_DATA, Result] := Temp + Delimiter + Data; + if Reset then + TorConfig[i] := 'HiddenServicePort ' + VirtualPort + ' ' + FormatHost(Address) + ':' + RealPort; + continue; + end; + + IntroPoints := GetParam('HiddenServiceNumIntroductionPoints', TorConfig[i]); + if IntroPoints <> '' then + begin + case StrToInt(sgHs.Cells[HS_VERSION, Result]) of + 2: begin Min := 1; Max := 10 end; + 3: begin Min := 3; Max := 20 end; + end; + if ValidInt(IntroPoints, Min, Max) then + sgHs.Cells[HS_INTRO_POINTS, Result] := IntroPoints + else + TorConfig[i] := 'HiddenServiceNumIntroductionPoints 3'; + continue; + end; + + MaxStreams := GetParam('HiddenServiceMaxStreams', TorConfig[i]); + if MaxStreams <> '' then + begin + if ValidInt(MaxStreams, 1, 65535) then + sgHs.Cells[HS_MAX_STREAMS, Result] := MaxStreams + else + TorConfig[i] := ''; + continue; + end; + end; + udRendPostPeriod.Position := Round(StrToInt(GetTorConfig('RendPostPeriod', '3600', [], ptInteger, Tcp.udRendPostPeriod.Min * 60, Tcp.udRendPostPeriod.Max * 60)) / 60); +end; + +function TTcp.LoadHiddenServices(ini: TMemIniFile): Integer; +const + DEFAULT_ADDRESS = '127.0.0.1'; + DEFAULT_PORT = '80'; +var + HsList, PortList: TStringList; + i, j, Min, Max: Integer; + ParseStr, PortsStr: ArrOfStr; + Address, RealPort, VirtualPort: string; + Name, Version, MaxStreams, IntroPoints, PortsData, State: string; +begin + Result := 0; + Min := 0; + Max := 0; + + BeginUpdateTable(sgHs); + HsList := TStringList.Create; + PortList := TStringList.Create; + try + LoadSettings('HiddenServices', udRendPostPeriod, ini); + ini.ReadSectionValues('HiddenServices', HsList); + for i := 0 to HsList.Count - 1 do + begin + if ValidInt(SeparateLeft(HsList[i], '='), 0, MAXINT) then + begin + ParseStr := Explode(';', SeparateRight(HsList[i], '=')); + if Length(ParseStr) = 6 then + begin + Name := ParseStr[0]; + Version := ParseStr[1]; + IntroPoints := ParseStr[2]; + MaxStreams := ParseStr[3]; + State := ParseStr[4]; + PortsData := ParseStr[5]; + if not ValidInt(Version, 2, 3) then + Version := '3'; + case StrToInt(Version) of + 2: begin Min := 1; Max := 10 end; + 3: begin Min := 3; Max := 20 end; + end; + if not ValidInt(IntroPoints, Min, Max) then + IntroPoints := '3'; + if not ValidInt(MaxStreams, 1, 65535) then + MaxStreams := NONE_CHAR; + if State = '1' then + State := SELECT_CHAR + else + State := FAVERR_CHAR; + PortList.Clear; + ParseStr := Explode('|', PortsData); + for j := 0 to Length(ParseStr) - 1 do + begin + PortsStr := Explode(',', ParseStr[j]); + if Length(PortsStr) = 3 then + begin + Address := PortsStr[0]; + RealPort := PortsStr[1]; + VirtualPort := PortsStr[2]; + if (ValidAddress(Address) = 0) or (cbxHsAddress.Items.IndexOf(Address) = -1) then + Address := DEFAULT_ADDRESS; + if not ValidInt(RealPort, 1, 65535) then + RealPort := DEFAULT_PORT; + if not ValidInt(VirtualPort, 1, 65535) then + VirtualPort := DEFAULT_PORT; + end + else + begin + Address := DEFAULT_ADDRESS; + RealPort := DEFAULT_PORT; + VirtualPort := DEFAULT_PORT; + end; + PortList.Append(Address + ',' + RealPort + ',' + VirtualPort); + end; + DeleteDuplicatesFromList(PortList); + PortsData := ''; + for j := 0 to PortList.Count - 1 do + PortsData := PortsData + '|' + PortList[j]; + Delete(PortsData, 1, 1); + + Inc(Result); + sgHs.Cells[HS_NAME, Result] := Name; + sgHs.Cells[HS_VERSION, Result] := Version; + sgHs.Cells[HS_INTRO_POINTS, Result] := IntroPoints; + sgHs.Cells[HS_MAX_STREAMS, Result] := MaxStreams; + sgHs.Cells[HS_STATE, Result] := State; + sgHs.Cells[HS_PORTS_DATA, Result] := PortsData; + sgHs.Cells[HS_PREVIOUS_NAME, Result] := Name; + end; + end; + end; + if Result > 0 then + sgHs.RowCount := Result + 1 + else + sgHs.RowCount := 2; + + EndUpdateTable(sgHs); + finally + HsList.Free; + PortList.Free; + end; +end; + +procedure TTcp.SaveHiddenServices(ini: TMemIniFile); +var + i, j, Count: Integer; + ParseStr, ParsePort: ArrOfStr; + Name, PrevName, Version, MaxStreams, IntroPoints, PortsData, State: string; +begin + DeleteTorConfig('HiddenServiceDir', [cfMultiLine]); + DeleteTorConfig('HiddenServiceVersion', [cfMultiLine]); + DeleteTorConfig('HiddenServicePort', [cfMultiLine]); + DeleteTorConfig('HiddenServiceNumIntroductionPoints', [cfMultiLine]); + DeleteTorConfig('HiddenServiceMaxStreams', [cfMultiLine]); + DeleteTorConfig('RendPostPeriod'); + ini.EraseSection('HiddenServices'); + + if Length(HsToDelete) > 0 then + begin + for i := 0 to Length(HsToDelete) - 1 do + DeleteDir(HsDir + HsToDelete[i]); + HsToDelete := nil; + end; + ini.WriteInteger('HiddenServices', 'RendPostPeriod', Tcp.udRendPostPeriod.Position); + + if not IsEmptyGrid(sgHs) then + begin + if not DirectoryExists(UserDir + 'services') then + ForceDirectories(UserDir + 'services'); + Count := 0; + for i := 1 to sgHs.RowCount - 1 do + begin + Name := sgHs.Cells[HS_NAME, i]; + PrevName := sgHs.Cells[HS_PREVIOUS_NAME, i]; + Version := sgHs.Cells[HS_VERSION, i]; + IntroPoints := sgHs.Cells[HS_INTRO_POINTS, i]; + MaxStreams := sgHs.Cells[HS_MAX_STREAMS, i]; + State := sgHs.Cells[HS_STATE, i]; + PortsData := sgHs.Cells[HS_PORTS_DATA, i]; + + if not ValidInt(MaxStreams, 1, 65535) then MaxStreams := '0'; + if State = SELECT_CHAR then State := '1' else State := '0'; + + if State = '1' then + begin + Inc(Count); + if DirectoryExists(HsDir + PrevName) then + begin + if Name <> PrevName then + begin + RenameFile(HsDir + PrevName, HsDir + Name); + sgHs.Cells[HS_PREVIOUS_NAME, i] := Name; + end; + end; + TorConfig.Append('HiddenServiceDir ' + HsDir + Name); + TorConfig.Append('HiddenServiceVersion ' + Version); + ParseStr := Explode('|', PortsData); + for j := 0 to Length(ParseStr) - 1 do + begin + ParsePort := Explode(',', ParseStr[j]); + TorConfig.Append('HiddenServicePort ' + ParsePort[2] + ' ' + FormatHost(ParsePort[0]) + ':' + ParsePort[1]); + end; + if IntroPoints <> '3' then + TorConfig.Append('HiddenServiceNumIntroductionPoints ' + IntroPoints); + if MaxStreams <> '0' then + TorConfig.Append('HiddenServiceMaxStreams ' + MaxStreams); + end; + + ini.WriteString('HiddenServices', IntToStr(i - 1), + Name + ';' + + Version + ';' + + IntroPoints + ';' + + MaxStreams + ';' + + State + ';' + + PortsData + ); + end; + if Count > 0 then + SetTorConfig('RendPostPeriod', IntToStr(Tcp.udRendPostPeriod.Position * 60)); + end; +end; + +procedure TTcp.ResetTransports; +var + ls: TStringList; + ini: TMemIniFile; +begin + if FileExists(DefaultsFile) then + begin + ini := TMemIniFile.Create(DefaultsFile, TEncoding.UTF8); + try + ls := TStringList.Create; + try + ini.ReadSectionValues('Transports', ls); + if ls.Count > 0 then + LoadTransportsData(ls); + finally + ls.Free; + end; + finally + ini.Free; + end; + end; +end; + +procedure TTcp.LoadUserOverrides; +var + ini: TMemIniFile; +begin + if FileExists(DefaultsFile) then + begin + ini := TMemIniFile.Create(DefaultsFile, TEncoding.UTF8); + try + DefaultsDic.AddOrSetValue('BridgesBot', ini.ReadString('UserOverrides', 'BridgesBot', BRIDGES_BOT)); + DefaultsDic.AddOrSetValue('BridgesEmail', ini.ReadString('UserOverrides', 'BridgesEmail', BRIDGES_EMAIL)); + DefaultsDic.AddOrSetValue('BridgesSite', ini.ReadString('UserOverrides', 'BridgesSite', BRIDGES_SITE)); + DefaultsDic.AddOrSetValue('CheckUrl', ini.ReadString('UserOverrides', 'CheckUrl', CHECK_URL)); + DefaultsDic.AddOrSetValue('DownloadUrl', ini.ReadString('UserOverrides', 'DownloadUrl', DOWNLOAD_URL)); + DefaultsDic.AddOrSetValue('MetricsUrl', ini.ReadString('UserOverrides', 'MetricsUrl', METRICS_URL)); + finally + ini.Free; + end; + end; +end; + +procedure TTcp.LoadTransportsData(Data: TStringList); +var + i, j, TotalTransports: Integer; + TransportID: Byte; + ParseStr, TransList: ArrOfStr; + Transports, Handler, Params, StrType, Item: string; + T: TTransportInfo; + IsValid: Boolean; +begin + TotalTransports := 0; + sgTransports.RowID := sgTransports.Cells[PT_HANDLER, sgTransports.SelRow]; + BeginUpdateTable(sgTransports); + ClearGrid(sgTransports); + TransportsDic.Clear; + + for i := 0 to Data.Count - 1 do + begin + ParseStr := Explode('|', SeparateRight(Data[i], '=')); + if Length(ParseStr) in [3, 4] then + begin + Transports := ParseStr[0]; + Handler := ParseStr[1]; + StrType := GetTransportChar(StrToIntDef(ParseStr[2], 0)); + TransportID := GetTransportID(StrType); + + if Length(ParseStr) = 4 then + Params := ParseStr[3] + else + Params := ''; + + if FileExists(TransportsDir + Handler) then + begin + TransList := Explode(',', Transports); + Transports := ''; + for j := 0 to Length(TransList) - 1 do + begin + IsValid := False; + Item := Trim(TransList[j]); + if (Item <> '') and (CheckEditString(Item, '_', False) = '') then + begin + if TransportsDic.TryGetValue(Item, T) then + begin + if T.TransportID = TRANSPORT_BOTH then + Continue + else + begin + if (TransportID <> TRANSPORT_BOTH) and (TransportID <> T.TransportID) then + begin + T.TransportID := TRANSPORT_BOTH; + IsValid := True; + end; + end; + end + else + begin + T.TransportID := TransportID; + IsValid := True; + end; + if IsValid then + begin + T.BridgeType := []; + TransportsDic.AddOrSetValue(Item, T); + Transports := Transports + ',' + Item; + end; + end; + end; + Delete(Transports, 1, 1); + end; + + if Transports <> '' then + begin + Inc(TotalTransports); + sgTransports.Cells[PT_TRANSPORTS, TotalTransports] := Transports; + sgTransports.Cells[PT_HANDLER, TotalTransports] := Handler; + sgTransports.Cells[PT_TYPE, TotalTransports] := StrType; + sgTransports.Cells[PT_PARAMS, TotalTransports] := Params; + end; + end; + end; + + if TotalTransports > 0 then + begin + sgTransports.RowCount := TotalTransports + 1; + TransportsEnable(True); + SelectTransports; + end + else + UpdateTransports; + SetGridLastCell(sgTransports, True, False, False, -1, -1, PT_HANDLER); + EndUpdateTable(sgTransports); +end; + +procedure TTcp.SaveTransportsData(ini: TMemIniFile; ReloadServerTransport: Boolean); +var + i, j, TransportID: Integer; + Transports, UsedTransports, Handler, Params, StrType, ServerTransport: string; + ParseStr: ArrOfStr; + Find, InBridges: Boolean; + T: TTransportInfo; +begin + DeleteTorConfig('ClientTransportPlugin', [cfMultiLine]); + DeleteTorConfig('ServerTransportPlugin', [cfMultiLine]); + DeleteTorConfig('ServerTransportListenAddr', [cfMultiLine]); + DeleteTorConfig('ExtORPort', [cfMultiLine]); + ini.EraseSection('Transports'); + + if ReloadServerTransport then + ServerTransport := ini.ReadString('Server', 'BridgeType', '') + else + ServerTransport := cbxBridgeType.Text; + + cbxBridgeType.Clear; + cbxBridgeType.Items.Insert(0, TransStr('206')); + if not IsEmptyGrid(sgTransports) then + begin + for i := 1 to sgTransports.RowCount - 1 do + begin + Transports := sgTransports.Cells[PT_TRANSPORTS, i]; + Handler := sgTransports.Cells[PT_HANDLER, i]; + StrType := sgTransports.Cells[PT_TYPE, i]; + Params := sgTransports.Cells[PT_PARAMS, i]; + + TransportID := GetTransportID(StrType); + ParseStr := Explode(',', Transports); + Transports := ''; + UsedTransports := ''; + Find := False; + for j := 0 to Length(ParseStr) - 1 do + begin + ParseStr[j] := Trim(ParseStr[j]); + if TransportsDic.TryGetValue(ParseStr[j], T) then + begin + if cbUsePreferredBridge.Checked then + InBridges := btPrefer in T.BridgeType + else + InBridges := btList in T.BridgeType; + if (T.TransportID <> TRANSPORT_SERVER) and InBridges then + begin + UsedTransports := UsedTransports + ',' + ParseStr[j]; + Find := True; + end; + end; + if TransportID <> TRANSPORT_CLIENT then + begin + cbxBridgeType.Items.Append(ParseStr[j]); + if (cbxServerMode.ItemIndex = 3) and (ServerTransport = ParseStr[j]) then + begin + SetTorConfig('ServerTransportPlugin', Trim(ServerTransport + ' exec ' + TransportsDir + Handler + ' ' + Params)); + SetTorConfig('ServerTransportListenAddr', ServerTransport + ' 0.0.0.0:' + IntToStr(udTransportPort.Position)); + SetTorConfig('ExtORPort', 'auto'); + end; + end; + Transports := Transports + ',' + ParseStr[j]; + end; + Delete(Transports, 1, 1); + Delete(UsedTransports, 1, 1); + + if cbUseBridges.Checked and Find then + TorConfig.Append('ClientTransportPlugin ' + UsedTransports + ' exec ' + TransportsDir + Handler + ' ' + Params); + + if Params <> '' then + Params := '|' + Params; + + ini.WriteString('Transports', IntToStr(i - 1), + Transports + '|' + Handler + '|' + IntToStr(TransportID) + Params); + end; + end; + cbxBridgeType.ItemIndex := GetIntDef(cbxBridgeType.Items.IndexOf(ServerTransport), 0, 0, MAXINT); + ini.WriteString('Server', 'BridgeType', cbxBridgeType.Text); + ServerIsObfs4 := cbxBridgeType.Text = 'obfs4'; +end; + +procedure TTcp.LoadUserBridges(ini: TMemIniFile); +var + Bridges: TStringList; + i: Integer; +begin + meBridges.Clear; + Bridges := TStringList.Create; + try + ini.ReadSectionValues('Bridges', Bridges); + if Bridges.Count > 0 then + begin + for i := Bridges.Count - 1 downto 0 do + begin + Bridges[i] := Trim(SeparateRight(Bridges[i], '=')); + if not ValidBridge(Bridges[i], btList) then + Bridges.Delete(i); + end; + meBridges.Text := Bridges.Text; + end; + finally + Bridges.Free; + end; +end; + +procedure TTcp.LoadBuiltinBridges(UpdateBridges, UpdateList: Boolean; ListName: string = ''); +const + Delimiter = '|'; +var + ini: TMemIniFile; + ls: TStringList; + i: Integer; + Key, Value, Str: string; + Bridges: TDictionary; + Bridge: TBridge; +begin + if UpdateBridges then + meBridges.Clear; + if FileExists(DefaultsFile) then + begin + ini := TMemIniFile.Create(DefaultsFile, TEncoding.UTF8); + try + ls := TStringList.Create; + Bridges := TDictionary.Create; + try + if UpdateList then + cbxBridgesList.Clear; + ini.ReadSectionValues('Bridges', ls); + if ls.Count > 0 then + begin + for i := 0 to ls.Count - 1 do + begin + Key := SeparateLeft(SeparateLeft(ls[i], '='), '.'); + Value := SeparateRight(ls[i], '='); + if Pos(Delimiter, Value) = 0 then + begin + if TryParseBridge(Value, Bridge) then + begin + if Bridges.TryGetValue(Key, Str) then + Str := Str + Delimiter + Value + else + begin + Str := Value; + if UpdateList then + cbxBridgesList.Items.Append(Key); + end; + Bridges.AddOrSetValue(Key, Str) + end; + end; + end; + if Bridges.Count > 0 then + begin + if UpdateList then + begin + cbxBridgesList.ItemIndex := cbxBridgesList.Items.IndexOf(ListName); + if cbxBridgesList.ItemIndex = -1 then + cbxBridgesList.ItemIndex := 0; + end; + if UpdateBridges then + begin + if Bridges.TryGetValue(cbxBridgesList.Text, Str) then + LineToMemo(Str, meBridges, ltBridge, False, Delimiter); + end; + end; + end; + finally + ls.Free; + Bridges.Free; + end; + finally + ini.Free; + end; + end; +end; + +procedure TTcp.SaveBridgesData(ini: TMemIniFile); +var + Bridges, PreferredBridge: string; + i: Integer; +begin + DeleteTorConfig('Bridge', [cfMultiLine]); + PreferredBridge := Trim(edPreferredBridge.Text); + if not ValidBridge(PreferredBridge, btPrefer) then + begin + PreferredBridge := ''; + cbUsePreferredBridge.Checked := False; + end; + edPreferredBridge.Text := PreferredBridge; + + Bridges := MemoToLine(meBridges, ltBridge, False, '|'); + + if (Bridges = '') and ((cbUsePreferredBridge.Checked and (PreferredBridge = '')) or not cbUsePreferredBridge.Checked) then + cbUseBridges.Checked := False; + + SetTorConfig('UseBridges', IntToStr(Integer(cbUseBridges.Checked))); + if cbUseBridges.Checked then + begin + if cbUsePreferredBridge.Checked then + SetTorConfig('Bridge', PreferredBridge) + else + SetTorConfig('Bridge', Bridges, [cfMultiLine], '|'); + end; + + if cbxBridgesType.ItemIndex = BRIDGES_TYPE_USER then + begin + ini.EraseSection('Bridges'); + for i := 0 to meBridges.Lines.Count - 1 do + ini.WriteString('Bridges', IntToStr(i), meBridges.Lines[i]); + end; + + ini.WriteBool('Network', 'UseBridges', cbUseBridges.Checked); + ini.WriteString('Network', 'BridgesList', cbxBridgesList.Text); + ini.WriteInteger('Network', 'BridgesType', cbxBridgesType.ItemIndex); + ini.WriteBool('Network', 'UsePreferredBridge', cbUsePreferredBridge.Checked); + ini.WriteString('Network', 'PreferredBridge', edPreferredBridge.Text); + BridgesCheckControls; +end; + +procedure TTcp.SaveProxyData(ini: TMemIniFile); +begin + DeleteTorConfig('Socks4Proxy'); + DeleteTorConfig('Socks5Proxy'); + DeleteTorConfig('Socks5ProxyUsername'); + DeleteTorConfig('Socks5ProxyPassword'); + DeleteTorConfig('HTTPProxy'); + DeleteTorConfig('HTTPProxyAuthenticator'); + DeleteTorConfig('HTTPSProxy'); + DeleteTorConfig('HTTPSProxyAuthenticator'); + edProxyAddress.Text := ExtractDomain(Trim(edProxyAddress.Text)); + edProxyUser.Text := Trim(edProxyUser.Text); + edProxyPassword.Text := Trim(edProxyPassword.Text); + if (cbUseProxy.Checked) and ValidHost(edProxyAddress.Text) then + begin + case cbxProxyType.ItemIndex of + PROXY_TYPE_SOCKS4: + SetTorConfig('Socks4Proxy', FormatHost(edProxyAddress.Text) + ':' + IntToStr(udProxyPort.Position)); + PROXY_TYPE_SOCKS5: + begin + SetTorConfig('Socks5Proxy', FormatHost(edProxyAddress.Text) + ':' + IntToStr(udProxyPort.Position)); + if (edProxyUser.Text <> '') and (edProxyPassword.Text <> '') then + begin + SetTorConfig('Socks5ProxyUsername', edProxyUser.Text); + SetTorConfig('Socks5ProxyPassword', edProxyPassword.Text); + end; + end; + PROXY_TYPE_HTTPS: + begin + SetTorConfig('HTTPSProxy', FormatHost(edProxyAddress.Text) + ':' + IntToStr(udProxyPort.Position)); + if (edProxyUser.Text <> '') and (edProxyPassword.Text <> '') then + SetTorConfig('HTTPSProxyAuthenticator', edProxyUser.Text + ':' + edProxyPassword.Text); + end; + end; + end + else + cbUseProxy.Checked := False; + ini.WriteBool('Network', 'UseProxy', cbUseProxy.Checked); + ini.WriteInteger('Network', 'ProxyType', cbxProxyType.ItemIndex); + ini.WriteString('Network', 'ProxyAddress', FormatHost(edProxyAddress.Text)); + ini.WriteInteger('Network', 'ProxyPort', udProxyPort.Position); + ini.WriteString('Network', 'ProxyUser', edProxyUser.Text); + ini.WriteString('Network', 'ProxyPassword', edProxyPassword.Text); +end; + +procedure TTcp.SaveReachableAddresses(ini: TMemIniFile); +var + AllowedPorts: TStringList; + Data: string; + i: Integer; +begin + DeleteTorConfig('ReachableAddresses'); + AllowedPorts := TStringList.Create; + try + AllowedPorts.CommaText := edReachableAddresses.Text; + for i := AllowedPorts.Count - 1 downto 0 do + begin + AllowedPorts[i] := Trim(AllowedPorts[i]); + if not ValidInt(AllowedPorts[i], 1, 65535) or (AllowedPorts.IndexOf(AllowedPorts[i]) <> i) then + AllowedPorts.Delete(i); + end; + + if AllowedPorts.Count > 0 then + begin + AllowedPorts.CustomSort(CompTextAsc); + edReachableAddresses.Text := AllowedPorts.CommaText; + Data := ''; + for i := 0 to AllowedPorts.Count - 1 do + Data := Data + ',*:' + AllowedPorts[i]; + Delete(Data, 1, 1); + if cbUseReachableAddresses.Checked then + SetTorConfig('ReachableAddresses', Data); + end + else + begin + cbUseReachableAddresses.Checked := False; + edReachableAddresses.Text := DEFAULT_ALLOWED_PORTS; + end; + ini.WriteBool('Network', 'UseReachableAddresses', cbUseReachableAddresses.Checked); + ini.WriteString('Network', 'ReachableAddresses', edReachableAddresses.Text); + finally + AllowedPorts.Free; + end; +end; + +procedure TTcp.ResetOptions; +var + i, Search, LogID: Integer; + ini: TMemIniFile; + ScrollBars, SeparateType: Byte; + ParseStr: ArrOfStr; + Transports: TStringList; + SocksHost, Temp: string; + FilterEntry, FilterMiddle, FilterExit: string; + FavoritesEntry, FavoritesMiddle, FavoritesExit, ExcludeNodes: string; + Fail: Boolean; +begin + OptionsLocked := False; + Fail := False; + LoadTorConfig; + LoadUserOverrides; + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + cbxLanguage.ItemIndex := cbxLanguage.Items.IndexOfObject(TObject(Integer(ini.ReadInteger('Main', 'Language', GetLangList)))); + cbxLanguage.ResetValue := cbxLanguage.Items.IndexOf('Русский'); + if cbxLanguage.ItemIndex = -1 then + begin + cbxLanguage.ItemIndex := cbxLanguage.ResetValue; + ini.WriteInteger('Main', 'Language', 1049); + end; + cbxLanguage.Tag := cbxLanguage.ItemIndex; + if FirstLoad then + Translate(cbxLanguage.Text); + + LoadThemesList(cbxThemes, ini.ReadString('Main', 'Theme', 'Windows')); + LoadStyle(cbxThemes); + SetIconsColor; + + if TorConfig.Count = 0 then + begin + TorConfig.Append('# ' + TransStr('271')); + TorConfig.Append(''); + end; + CheckRequiredFiles; + + LoadSettings('Main', cbConnectOnStartup, ini); + LoadSettings('Main', cbRestartOnControlFail, ini); + LoadSettings('Main', cbMinimizeOnClose, ini); + LoadSettings('Main', cbMinimizeOnStartup, ini); + LoadSettings('Main', cbShowBalloonHint, ini); + LoadSettings('Main', cbShowBalloonOnlyWhenHide, ini); + LoadSettings('Main', cbStayOnTop, ini); + LoadSettings('Main', cbNoDesktopBorders, ini); + LoadSettings('Main', cbNoDesktopBordersOnlyEnlarged, ini); + LoadSettings('Main', cbHideIPv6Addreses, ini); + LoadSettings('Main', cbUseNetworkCache, ini); + LoadSettings('Main', cbUseOpenDNS, ini); + LoadSettings('Main', cbUseOpenDNSOnlyWhenUnknown, ini); + LoadSettings('Main', cbRememberEnlargedPosition, ini); + LoadSettings('Main', cbClearPreviousSearchQuery, ini); + + LoadSettings('Log', miWriteLogFile, ini); + LoadSettings('Log', miAutoScroll, ini); + LoadSettings('Log', miWordWrap, ini, False); + LoadSettings('Log', miAutoClear, ini); + + LoadSettings('Network', miPreferWebTelegram, ini); + LoadSettings('Network', miRequestIPv6Bridges, ini, False); + LoadSettings('Network', miRequestObfuscatedBridges, ini); + + LoadSettings('Lists', cbUseHiddenServiceVanguards, ini); + LoadSettings('Lists', cbxVanguardLayerType, ini); + + LoadSettings('Filter', miFilterHideUnused, ini); + LoadSettings('Filter', miFilterScrollTop, ini); + LoadSettings('Filter', miFilterSelectRow, ini); + LoadSettings('Filter', miIgnoreTplLoadParamsOutsideTheFilter, ini); + LoadSettings('Filter', miNotLoadEmptyTplData, ini, False); + LoadSettings('Filter', miReplaceDisabledFavoritesWithCountries, ini); + + LoadSettings('Routers', miRoutersScrollTop, ini); + LoadSettings('Routers', miRoutersSelectRow, ini); + LoadSettings('Routers', miShowFlagsHint, ini); + LoadSettings('Routers', miDisableSelectionUnSuitableAsBridge, ini); + LoadSettings('Routers', miDisableFiltersOnAuthorityOrBridge, ini); + LoadSettings('Routers', miLoadCachedRoutersOnStartup, ini); + LoadSettings('Routers', miDisableFiltersOnUserQuery, ini); + LoadSettings('Routers', miEnableConvertNodesOnIncorrectClear, ini); + LoadSettings('Routers', miEnableConvertNodesOnAddToNodesList, ini); + LoadSettings('Routers', miEnableConvertNodesOnRemoveFromNodesList, ini); + LoadSettings('Routers', miConvertIpNodes, ini); + LoadSettings('Routers', miConvertCidrNodes, ini); + LoadSettings('Routers', miConvertCountryNodes, ini); + LoadSettings('Routers', miIgnoreConvertExcludeNodes, ini); + LoadSettings('Routers', miAvoidAddingIncorrectNodes, ini); + + LoadSettings('Circuits', miHideCircuitsWithoutStreams, ini, False); + LoadSettings('Circuits', miAlwaysShowExitCircuit, ini); + LoadSettings('Circuits', miSelectExitCircuitWhetItChanges, ini); + LoadSettings('Circuits', miShowCircuitsTraffic, ini); + LoadSettings('Circuits', miShowStreamsTraffic, ini); + LoadSettings('Circuits', miShowStreamsInfo, ini); + + LoadSettings('Scanner', cbEnablePingMeasure, ini); + LoadSettings('Scanner', cbEnableDetectAliveNodes, ini); + LoadSettings('Scanner', cbAutoScanNewNodes, ini); + LoadSettings('Scanner', miManualPingMeasure, ini); + LoadSettings('Scanner', miManualDetectAliveNodes, ini); + LoadSettings('Scanner', udScanPortTimeout, ini); + LoadSettings('Scanner', udScanPingTimeout, ini); + LoadSettings('Scanner', udScanPortionTimeout, ini); + LoadSettings('Scanner', udDelayBetweenAttempts, ini); + LoadSettings('Scanner', udScanPingAttempts, ini); + LoadSettings('Scanner', udScanPortAttempts, ini); + LoadSettings('Scanner', udScanMaxThread, ini); + LoadSettings('Scanner', udScanPortionSize, ini); + LoadSettings('Scanner', udFullScanInterval, ini); + LoadSettings('Scanner', udNonResponsedScanInterval, ini); + LoadSettings('Scanner', udPartialScansCounts, ini); + + LoadSettings('AutoSelNodes', cbxAutoSelPriority, ini); + LoadSettings('AutoSelNodes', udAutoSelEntryCount, ini); + LoadSettings('AutoSelNodes', udAutoSelMiddleCount, ini); + LoadSettings('AutoSelNodes', udAutoSelExitCount, ini); + LoadSettings('AutoSelNodes', udAutoSelMinWeight, ini); + LoadSettings('AutoSelNodes', udAutoSelMaxPing, ini); + LoadSettings('AutoSelNodes', cbAutoSelStableOnly, ini); + LoadSettings('AutoSelNodes', cbAutoSelFilterCountriesOnly, ini); + LoadSettings('AutoSelNodes', cbAutoSelUniqueNodes, ini); + LoadSettings('AutoSelNodes', cbAutoSelNodesWithPingOnly, ini); + LoadSettings('AutoSelNodes', cbAutoSelMiddleNodesWithoutDir, ini); + + CheckAutoSelControls; + + LoadSettings('Status', miSelectGraphDL, ini); + LoadSettings('Status', miSelectGraphUL, ini); + CurrentTrafficPeriod := GetIntDef(ini.ReadInteger('Status', 'CurrentTrafficPeriod', 1), 1, 0, 8); + miTrafficPeriod.items[CurrentTrafficPeriod].Checked := True; + + LastFullScanDate := ini.ReadInt64('Scanner', 'LastFullScanDate', 0); + LastNonResponsedScanDate := ini.ReadInt64('Scanner', 'LastNonResponsedScanDate', 0); + LastPartialScansCounts := ini.ReadInteger('Scanner', 'LastPartialScansCounts', 0); + + tmCircuits.Interval := GetIntDef(ini.ReadInteger('Circuits', 'UpdateInterval', 1000), 1000, 0, 4000); + case tmCircuits.Interval of + 0: miCircuitsUpdateManual.Checked := True; + 500: miCircuitsUpdateHigh.Checked := True; + 1000: miCircuitsUpdateNormal.Checked := True; + 4000: miCircuitsUpdateLow.Checked := True; + else + begin + miCircuitsUpdateNormal.Checked := True; + tmCircuits.Interval := 1000; + end; + end; + + IntToMenu(miCircuitFilter, ini.ReadInteger('Circuits', 'PurposeFilter', CIRCUIT_FILTER_DEFAULT)); + IntToMenu(miTplSave, ini.ReadInteger('Filter', 'TplSave', TPL_MENU_DEFAULT)); + IntToMenu(miTplLoad, ini.ReadInteger('Filter', 'TplLoad', TPL_MENU_DEFAULT)); + + CheckSelectRowOptions(sgFilter, miFilterSelectRow.Checked); + CheckSelectRowOptions(sgRouters, miRoutersSelectRow.Checked); + + ParseStr := Explode(',', ini.ReadString('Main', 'SortData', + Format('%d,%d,%d,%d,%d,%d,%d,%d,%d,%d', [ + SORT_DESC, FILTER_TOTAL, + SORT_DESC, ROUTER_WEIGHT, + SORT_DESC, CIRC_ID, + SORT_DESC, STREAMS_ID, + SORT_DESC, STREAMS_INFO_ID + ]) + )); + for i := 0 to Length(ParseStr) - 1 do + case i of + 0: sgFilter.SortType := StrToIntDef(ParseStr[i], SORT_DESC); + 1: sgFilter.SortCol := StrToIntDef(ParseStr[i], FILTER_TOTAL); + 2: sgRouters.SortType := StrToIntDef(ParseStr[i], SORT_DESC); + 3: sgRouters.SortCol := StrToIntDef(ParseStr[i], ROUTER_WEIGHT); + 4: sgCircuits.SortType := StrToIntDef(ParseStr[i], SORT_DESC); + 5: sgCircuits.SortCol := StrToIntDef(ParseStr[i], CIRC_ID); + 6: sgStreams.SortType := StrToIntDef(ParseStr[i], SORT_DESC); + 7: sgStreams.SortCol := StrToIntDef(ParseStr[i], STREAMS_ID); + 8: sgStreamsInfo.SortType := StrToIntDef(ParseStr[i], SORT_DESC); + 9: sgStreamsInfo.SortCol := StrToIntDef(ParseStr[i], STREAMS_INFO_ID); + end; + + LoadSettings('Network', cbUseProxy, ini); + LoadSettings('Network', cbxProxyType, ini, PROXY_TYPE_SOCKS5); + LoadSettings('Network', edProxyAddress, ini); + LoadSettings('Network', udProxyPort, ini); + LoadSettings('Network', edProxyUser, ini); + LoadSettings('Network', edProxyPassword, ini); + SaveProxyData(ini); + + LoadSettings('Network', edReachableAddresses, ini); + LoadSettings('Network', cbUseReachableAddresses, ini); + SaveReachableAddresses(ini); + + meLog.WordWrap := miWordWrap.Checked; + SeparateType := GetIntDef(ini.ReadInteger('Log', 'SeparateType', 1), 1, 0, 2); + miLogSeparate.items[SeparateType].Checked := True; + TorLogFile := GetLogFileName(SeparateType); + + ScrollBars := GetIntDef(ini.ReadInteger('Log', 'ScrollBars', 0), 0, 0, 3); + miScrollBars.items[ScrollBars].Checked := True; + SetLogScrollBar(ScrollBars); + LogID := GetArrayIndex(LogLevels, AnsiLowerCase(SeparateLeft(GetTorConfig('Log', 'notice stdout', [cfAutoAppend]), ' '))); + if LogID <> -1 then + miLogLevel.items[LogID].Checked := True + else + begin + miNotice.Checked := True; + SetTorConfig('Log', 'notice stdout'); + end; + + ControlPassword := ini.ReadString('Main', 'ControlPassword', ''); + Temp := ini.ReadString('Main', 'HashedControlPassword', ''); + if Temp = '' then + begin + ControlPassword := ''; + ini.WriteString('Main', 'ControlPassword', ''); + end; + if (ControlPassword = '')then + begin + SetTorConfig('CookieAuthentication', '1'); + edControlPassword.Text := ''; + end + else + edControlPassword.Text := Decrypt(ControlPassword, 'True'); + if GetTorConfig('CookieAuthentication', '0') = '1' then + begin + cbxAuthMetod.ItemIndex := 0; + DeleteTorConfig('HashedControlPassword'); + end + else + begin + cbxAuthMetod.ItemIndex := 1; + SetTorConfig('HashedControlPassword', Temp); + end; + CheckAuthMetodContols; + + LoadSettings(miSafeLogging); + LoadSettings(cbLearnCircuitBuildTimeout); + LoadSettings(cbAvoidDiskWrites); + LoadSettings(cbStrictNodes, [cfBoolInvert]); + LoadSettings(cbEnforceDistinctSubnets); + LoadSettings(udMaxCircuitDirtiness); + LoadSettings(udCircuitBuildTimeout); + LoadSettings(udNewCircuitPeriod); + LoadSettings(udMaxClientCircuitsPending); + LoadSettings(udControlPort, [cfAutoAppend]); + + LoadSettings('Network', udSOCKSPort, ini); + SocksHost := ini.ReadString('Network', 'SOCKSHost', '127.0.0.1'); + ParseStr := Explode(' ', GetTorConfig('SOCKSPort', '127.0.0.1:9050', [cfAutoAppend])); + Temp := ''; + if Length(ParseStr) > 1 then + begin + for i := 1 to Length(ParseStr) - 1 do + begin + ParseStr[i] := Trim(ParseStr[i]); + if ParseStr[i] <> '' then + Temp := Temp + ' ' + ParseStr[i]; + end; + end; + cbxSocksHost.Hint := Temp; + Search := RPos(':', ParseStr[0]); + if Search = 0 then + begin + if ValidInt(ParseStr[0], 0, udSOCKSPort.Max) then + begin + cbEnableSocks.Checked := StrToBool(ParseStr[0]); + if StrToInt(ParseStr[0]) > 0 then + udSOCKSPort.Position := StrToInt(ParseStr[0]); + end + else + Fail := True; + end + else + begin + cbEnableSocks.Checked := True; + if ValidSocket(ParseStr[0]) then + begin + udSOCKSPort.Position := GetPortFromSocket(ParseStr[0]); + SocksHost := GetAddressFromSocket(ParseStr[0]); + end + else + Fail := True; + end; + if Fail or CheckSimilarPorts then + SetTorConfig('SOCKSPort', FormatHost(SocksHost) + ':' + IntToStr(udSOCKSPort.Position) + cbxSocksHost.Hint); + GetLocalInterfaces(cbxSocksHost, SocksHost, True); + + if ini.SectionExists('Transports') then + begin + Transports := TStringList.Create; + try + ini.ReadSectionValues('Transports', Transports); + if Transports.Count > 0 then + LoadTransportsData(Transports); + finally + Transports.Free; + end; + end + else + ResetTransports; + + LoadSettings('Network', cbUseBridges, ini); + LoadSettings('Network', cbUsePreferredBridge, ini); + LoadSettings('Network', cbxBridgesType, ini); + LoadSettings('Network', edPreferredBridge, ini); + LoadBuiltinBridges(cbxBridgesType.ItemIndex = BRIDGES_TYPE_BUILTIN, True, ini.ReadString('Network', 'BridgesList', '')); + if cbxBridgesType.ItemIndex = BRIDGES_TYPE_USER then + LoadUserBridges(ini); + SaveBridgesData(ini); + + LoadSettings('Filter', cbxFilterMode, ini, FILTER_TYPE_COUNTRIES); + FilterEntry := ini.ReadString('Filter', 'EntryNodes', DEFAULT_ENTRY_NODES); + FilterMiddle := ini.ReadString('Filter', 'MiddleNodes', DEFAULT_MIDDLE_NODES); + FilterExit := ini.ReadString('Filter', 'ExitNodes', DEFAULT_EXIT_NODES); + if not FirstLoad then + ClearFilter(ntNone); + GetNodes(FilterEntry, ntEntry, False, ini); + GetNodes(FilterMiddle, ntMiddle, False, ini); + GetNodes(FilterExit, ntExit, False, ini); + + FavoritesEntry := ini.ReadString('Routers', 'EntryNodes', ''); + FavoritesMiddle := ini.ReadString('Routers', 'MiddleNodes', ''); + FavoritesExit := ini.ReadString('Routers', 'ExitNodes', ''); + ExcludeNodes := ini.ReadString('Routers', 'ExcludeNodes', ''); + if not FirstLoad then + ClearRouters(ntNone); + GetNodes(FavoritesEntry, ntEntry, True, ini); + GetNodes(FavoritesMiddle, ntMiddle, True, ini); + GetNodes(FavoritesExit, ntExit, True, ini); + GetNodes(ExcludeNodes, ntExclude, True, ini); + + CalculateTotalNodes; + CalculateFilterNodes; + + lbFavoritesEntry.HelpContext := GetIntDef(ini.ReadInteger('Lists', 'UseFavoritesEntry', 0), 0, 0, 1); + lbFavoritesMiddle.HelpContext := GetIntDef(ini.ReadInteger('Lists', 'UseFavoritesMiddle', 0), 0, 0, 1); + lbFavoritesExit.HelpContext := GetIntDef(ini.ReadInteger('Lists', 'UseFavoritesExit', 0), 0, 0, 1); + lbExcludeNodes.HelpContext := GetIntDef(ini.ReadInteger('Lists', 'UseExcludeNodes', 0), 0, 0, 1); + + LoadSettings('Lists', cbxNodesListType, ini, NL_TYPE_EXLUDE); + case cbxNodesListType.ItemIndex of + NL_TYPE_ENTRY: LoadNodesList(False, FavoritesEntry); + NL_TYPE_MIDDLE: LoadNodesList(False, FavoritesMiddle); + NL_TYPE_EXIT: LoadNodesList(False, FavoritesExit); + NL_TYPE_EXLUDE: LoadNodesList(False, ExcludeNodes); + end; + CheckFilterMode; + CheckFavoritesState; + CheckVanguards(True); + + SetNodes(FilterEntry, FilterMiddle, FilterExit, FavoritesEntry, FavoritesMiddle, FavoritesExit, ExcludeNodes); + ini.WriteInteger('Filter', 'FilterMode', cbxFilterMode.ItemIndex); + + LoadSettings('Server', edNickname, ini); + LoadSettings('Server', edContactInfo, ini); + LoadSettings('Server', edAddress, ini); + LoadSettings('Server', cbxServerMode, ini); + LoadSettings('Server', udORPort, ini); + LoadSettings('Server', udDirPort, ini); + LoadSettings('Server', cbUseDirPort, ini); + LoadSettings('Server', cbDirCache, ini); + LoadSettings('Server', cbListenIPv6, ini); + LoadSettings('Server', cbUseAddress, ini); + LoadSettings('Server', udNumCPUs, ini); + LoadSettings('Server', udTransportPort, ini); + LoadSettings('Server', cbUseNumCPUs, ini); + LoadSettings('Server', udNumCPUs, ini); + LoadSettings('Server', cbUseMaxMemInQueues, ini); + LoadSettings('Server', udMaxMemInQueues, ini); + LoadSettings('Server', cbUseRelayBandwidth, ini); + LoadSettings('Server', udRelayBandwidthRate, ini); + LoadSettings('Server', udRelayBandwidthBurst, ini); + LoadSettings('Server', udMaxAdvertisedBandwidth,ini); + LoadSettings('Server', cbUseUPnP, ini); + LoadSettings('Server', cbIPv6Exit, ini); + LoadSettings('Server', cbPublishServerDescriptor, ini); + LoadSettings('Server', cbDirReqStatistics, ini); + LoadSettings('Server', cbHiddenServiceStatistics, ini); + LoadSettings('Server', cbAssumeReachable, ini); + LoadSettings('Server', cbUseMyFamily, ini); + LoadSettings('Server', cbxBridgeDistribution, ini); + LoadSettings('Server', cbxExitPolicyType, ini); + LineToMemo(ini.ReadString('Server', 'CustomExitPolicy', DEFAULT_CUSTOM_EXIT_POLICY), meExitPolicy, ltPolicy); + LineToMemo(ini.ReadString('Server', 'MyFamily', ''), meMyFamily, ltHash, True); + SaveServerOptions(ini); + + SaveTransportsData(ini, True); + + LoadSettings('Lists', cbUseTrackHostExits, ini); + LoadSettings('Lists', udTrackHostExitsExpire, ini); + LineToMemo(ini.ReadString('Lists', 'TrackHostExits', ''), meTrackHostExits, ltHost, True); + SaveTrackHostExits(ini); + + CheckServerControls; + CheckScannerControls; + CheckStatusControls; + CheckStreamsControls; + CheckCachedFiles; + + HsToDelete := nil; + ClearGrid(sgHs); + ClearGrid(sgHsPorts); + GetLocalInterfaces(cbxHsAddress); + if LoadHiddenServices(ini) = 0 then + UpdateHs + else + begin + HsControlsEnable(True); + SelectHs; + end; + SaveHiddenServices(ini); + + LoadRoutersFilterData(ini.ReadString('Routers', 'CurrentFilter', DEFAULT_ROUTERS_FILTER_DATA), False); + ParseStr := Explode(';', ini.ReadString('Routers', 'DefaultFilter', DEFAULT_ROUTERS_FILTER_DATA)); + if Length(ParseStr) > 4 then + udRoutersWeight.ResetValue := StrToIntDef(ParseStr[4], 10); + + CheckShowRouters; + if FirstLoad then + begin + if ini.ReadBool('Main', 'Terminated', False) = True then + begin + if (cbUseUPnP.Checked) and (cbxServerMode.ItemIndex > 0) then + RemoveUPnPEntry(udORPort.Position, udDirPort.Position, udTransportPort.Position); + end; + TotalDL := ini.ReadInt64('Status', 'TotalDL', 0); + TotalUL := ini.ReadInt64('Status', 'TotalUL', 0); + TotalStartDate := ini.ReadInt64('Status', 'TotalStartDate', 0); + + lbTotalDL.Caption := BytesFormat(TotalDL); + lbTotalUL.Caption := BytesFormat(TotalUL); + if (TotalStartDate = 0) then + begin + TotalStartDate := DateTimeToUnix(Now); + ini.WriteInteger('Status', 'TotalStartDate', TotalStartDate); + end; + gbTotal.Hint := Format(TransStr('402'), [DateTimeToStr(UnixToDateTime(TotalStartDate))]); + + LastPlace := GetIntDef(ini.ReadInteger('Main', 'LastPlace', LP_OPTIONS), LP_OPTIONS, LP_OPTIONS, LP_ROUTERS); + pcOptions.TabIndex := GetIntDef(ini.ReadInteger('Main', 'OptionsPage', 0), 0, 0, pcOptions.PageCount - 1); + ParseStr := Explode(',', ini.ReadString('Main', 'FormPosition', '-1,-1,-1,-1')); + for i := 0 to Length(ParseStr) - 1 do + case i of + 0: DecFormPos.X := StrToIntDef(ParseStr[i], -1); + 1: DecFormPos.Y := StrToIntDef(ParseStr[i], -1); + 2: IncFormPos.X := StrToIntDef(ParseStr[i], -1); + 3: IncFormPos.Y := StrToIntDef(ParseStr[i], -1); + end; + + SetDesktopPosition(IncFormPos.X, IncFormPos.Y, GetCheckBorders, True); + DecreaseFormSize; + SetDesktopPosition(DecFormPos.X, DecFormPos.Y, GetCheckBorders, True); + ini.WriteBool('Main', 'Terminated', True); + LoadNetworkCache; + LoadBridgesCache; + if miLoadCachedRoutersOnStartup.Checked then + LoadConsensus + else + begin + LoadRoutersCountries; + ShowFilter; + ShowRouters; + ShowCircuits; + CheckTorAutoStart; + end; + end + else + begin + SetDesktopPosition(Tcp.Left, Tcp.Top, GetCheckBorders, True); + if ConsensusUpdated then + LoadConsensus + else + begin + CheckCountryIndexInList; + ShowFilter; + ShowRouters; + if ConnectState = 0 then + ShowCircuits; + end; + RoutersUpdated := False; + FilterUpdated := False; + end; + SaveTorConfig; + EnableOptionButtons(False); + finally + ini.UpdateFile; + ini.Free; + end; +end; + +procedure TTcp.LoadNetworkCache; +var + DataLength, i: Integer; + ParseStr: ArrOfStr; + GeoIpCache: TStringList; + GeoIpInfo: TGeoIpInfo; + FilterInfo: TFilterInfo; +begin + if FileExists(NetworkCacheFile) then + begin + GeoIpCache := TStringList.Create; + try + GeoIpCache.LoadFromFile(NetworkCacheFile); + for i := 0 to GeoIpCache.Count - 1 do + begin + ParseStr := Explode(',', GeoIpCache[i]); + DataLength := Length(ParseStr); + if DataLength in [2..4] then + begin + if FilterDic.TryGetValue(ParseStr[1], FilterInfo) then + begin + if ValidAddress(ParseStr[0]) = 1 then + begin + GeoIpInfo.cc := FilterInfo.cc; + if DataLength > 2 then + GeoIpInfo.ping := StrToIntDef(ParseStr[2], 0) + else + GeoIpInfo.ping := 0; + if DataLength > 3 then + GeoIpInfo.ports := ParseStr[3] + else + GeoIpInfo.ports := ''; + GeoIpDic.AddOrSetValue(ParseStr[0], GeoIpInfo); + end; + end; + end; + end; + finally + GeoIpCache.Free; + end; + end; +end; + +procedure TTcp.SaveNetworkCache; +var + GeoIpCache: TStringList; + Item: TPair; + PingData, PortsData: string; +begin + if cbUseNetworkCache.Checked then + begin + GeoIpCache := TStringList.Create; + try + for Item in GeoIpDic do + begin + if Item.Value.ports = '' then + PortsData := '' + else + PortsData := ',' + Item.Value.ports; + + if Item.Value.ping = 0 then + begin + if PortsData = '' then + PingData := '' + else + PingData := ',0' + end + else + PingData := ',' + IntToStr(Item.Value.ping); + + GeoIpCache.Append(Item.Key + ',' + CountryCodes[Item.Value.cc] + PingData + PortsData); + end; + if GeoIpCache.Count > 0 then + GeoIpCache.SaveToFile(NetworkCacheFile); + finally + GeoIpCache.Free; + end; + end; +end; + +procedure TTCP.LoadBridgesCache; +var + DataLength, i, j: Integer; + BridgesCache: TStringList; + BridgeInfo: TBridgeInfo; + ParseStr, IpStr: ArrOfStr; + BridgeStr: string; +begin + if FileExists(BridgesCacheFile) then + begin + BridgesCache := TStringList.Create; + try + BridgesCache.LoadFromFile(BridgesCacheFile); + if BridgesCache.Count = 0 then + Exit; + for i := 0 to BridgesCache.Count - 1 do + begin + ParseStr := Explode('|', BridgesCache[i]); + DataLength := Length(ParseStr); + if DataLength in [8..10] then + begin + BridgeInfo.Router.Flags := [rfBridge]; + BridgeInfo.Router.Params := ROUTER_BRIDGE; + BridgeInfo.Router.Name := ParseStr[1]; + BridgeInfo.Router.IPv4 := ''; + BridgeInfo.Router.IPv6 := ''; + IpStr := Explode(',', ParseStr[2]); + for j := 0 to Length(IpStr) - 1 do + begin + case ValidAddress(IpStr[j], False, True) of + 1: BridgeInfo.Router.IPv4 := IpStr[j]; + 2: BridgeInfo.Router.IPv6 := IpStr[j]; + end; + end; + if BridgeInfo.Router.IPv6 <> '' then + Inc(BridgeInfo.Router.Params, ROUTER_REACHABLE_IPV6); + BridgeInfo.Router.OrPort := StrToIntDef(ParseStr[3], 0); + BridgeInfo.Router.DirPort := 0; + BridgeInfo.Router.Bandwidth := StrToIntDef(ParseStr[4], 0); + BridgeInfo.Router.Version := ParseStr[5]; + BridgeInfo.Kind := GetIntDef(StrToIntDef(ParseStr[6], BRIDGE_RELAY), BRIDGE_RELAY, BRIDGE_RELAY, BRIDGE_NATIVE); + if ParseStr[7] = '1' then + Include(BridgeInfo.Router.Flags, rfV2Dir); + if DataLength > 8 then + BridgeInfo.Transport := ParseStr[8] + else + BridgeInfo.Transport := ''; + if DataLength > 9 then + BridgeInfo.Params := ParseStr[9] + else + BridgeInfo.Params := ''; + + BridgeStr := Trim( + BridgeInfo.Transport + ' ' + + BridgeInfo.Router.IPv4 + ':' + + IntToStr(BridgeInfo.Router.OrPort) + ' ' + + ParseStr[0] + ' ' + + BridgeInfo.Params + ); + if ValidBridge(BridgeStr, btNone) then + BridgesDic.AddOrSetValue(ParseStr[0], BridgeInfo); + end; + end; + finally + BridgesCache.Free; + end; + end; +end; + +procedure TTcp.SaveBridgesCache; +var + BridgesCache: TStringList; + Item: TPair; + Address, Transport, Params: string; +begin + BridgesCache := TStringList.Create; + try + for Item in BridgesDic do + begin + if Item.Value.Router.IPv6 = '' then + Address := Item.Value.Router.IPv4 + else + Address := Item.Value.Router.IPv4 + ',' + Item.Value.Router.IPv6; + + if Item.Value.Transport = '' then + Transport := '' + else + Transport := '|' + Item.Value.Transport; + + if Item.Value.Params <> '' then + begin + Params := '|' + Item.Value.Params; + if Transport = '' then + Params := '|' + Params; + end + else + Params := ''; + BridgesCache.Append( + Item.Key + '|' + + Item.Value.Router.Name + '|' + + Address + '|' + + IntToStr(Item.Value.Router.OrPort) + '|' + + IntToStr(Item.Value.Router.Bandwidth) + '|' + + Item.Value.Router.Version + '|' + + IntToStr(Item.Value.Kind) + '|' + + IntToStr(Integer(rfV2Dir in Item.Value.Router.Flags)) + + Transport + + Params + ); + end; + if BridgesDic.Count > 0 then + BridgesCache.SaveToFile(BridgesCacheFile) + else + DeleteFile(BridgesCacheFile); + finally + BridgesCache.Free; + end; +end; + +procedure TTcp.SetServerPort(PortControl: TUpDown); +var + PortName, FlagsStr: string; +begin + PortName := Copy(PortControl.Name, 3); + if cbListenIPv6.Checked then + FlagsStr := '' + else + FlagsStr := ' IPv4Only'; + SetTorConfig(PortName, IntToStr(PortControl.Position) + FlagsStr); +end; + +procedure TTcp.CheckFilterMode; +var + FMode: Integer; +begin + FMode := cbxFilterMode.ItemIndex; + if (FMode = 2) and (lbFavoritesTotal.Tag = 0) then + FMode := 1; + if (FMode = 2) and (lbFavoritesEntry.HelpContext = 0) and (lbFavoritesMiddle.HelpContext = 0) and (lbFavoritesExit.HelpContext = 0) then + FMode := 1; + if (FMode = 1) and (lbFilterEntry.Tag = 0) and (lbFilterMiddle.Tag = 0) and (lbFilterExit.Tag = 0) then + FMode := 0; + if (FMode = 1) and not GeoIpExists then + FMode := 0; + cbxFilterMode.ItemIndex := FMode; +end; + +function TTcp.CheckTransports: Boolean; +var + i, j, ResultCode: Integer; + TransportID: Byte; + T: TTransportInfo; + Transports, Item, Handler, Params, Msg, ResultMsg: string; + ParseStr: ArrOfStr; +begin + Result := True; + ResultCode := 0; + TransportsDic.Clear; + if not edTransports.Enabled then + Exit; + edTransports.Text := StringReplace(edTransports.Text, ' ', '', [rfReplaceAll]); + edTransportsHandler.Text := StringReplace(edTransportsHandler.Text, ' ', '', [rfReplaceAll]); + meHandlerParams.Text := Trim(meHandlerParams.Text); + Msg := TTabSheet(gbTransports.GetParentComponent).Caption + ' - ' + gbTransports.Caption + BR + BR; + for i := 1 to sgTransports.RowCount - 1 do + begin + TransportID := GetTransportID(sgTransports.Cells[PT_TYPE, i]); + Transports := sgTransports.Cells[PT_TRANSPORTS, i]; + Handler := sgTransports.Cells[PT_HANDLER, i]; + Params := sgTransports.Cells[PT_PARAMS, i]; + + if not FileExists(TransportsDir + Handler) then + begin + ResultCode := 2; + Break; + end; + + if Pos('|', Params) <> 0 then + begin + ResultCode := 5; + Break; + end; + + ParseStr := Explode(',', Transports); + for j := 0 to Length(ParseStr) - 1 do + begin + Item := Trim(ParseStr[j]); + if Item = '' then + begin + ResultCode := 1; + Break; + end; + + ResultMsg := CheckEditString(Item, '_', False); + if ResultMsg <> '' then + begin + ResultCode := 3; + Break; + end; + + if TransportsDic.TryGetValue(Item, T) then + begin + if (T.TransportID = TransportID) or + (T.TransportID = TRANSPORT_BOTH) or + (TransportID = TRANSPORT_BOTH) then + begin + ResultCode := 4; + Break; + end; + end; + T.TransportID := TransportID; + T.BridgeType := []; + TransportsDic.AddOrSetValue(Item, T); + end; + + if ResultCode > 0 then + Break; + + end; + if ResultCode > 0 then + begin + Result := False; + sgTransports.Row := i; + SelectTransports; + case ResultCode of + 1: GoToInvalidOption(tsOther, Msg + TransStr('394'), edTransports); + 2: GoToInvalidOption(tsOther, Msg + TransStr('395'), edTransportsHandler); + 3: GoToInvalidOption(tsOther, Msg + ResultMsg, edTransports); + 4: GoToInvalidOption(tsOther, Msg + TransStr('399'), edTransports); + 5: GoToInvalidOption(tsOther, Msg + Format(TransStr('255'), ['|']), meHandlerParams); + end; + end; +end; + +function TTcp.CheckHsTable: Boolean; +var + Duplicate: Boolean; + DirName, Msg, ResultMsg: string; + i, j, ResultCode: Integer; +begin + Result := True; + ResultCode := 0; + j := 0; + Duplicate := False; + if not edHsName.Enabled then + Exit; + Msg := TTabSheet(sgHs.GetParentComponent).Caption + ' - ' + lbHsName.Caption + BR + BR; + for i := 1 to sgHs.RowCount - 1 do + begin + DirName := sgHs.Cells[HS_NAME, i]; + if DirName = '' then + begin + ResultCode := 1; + Break; + end; + ResultMsg := CheckEditString(DirName, '_'); + if ResultMsg <> '' then + begin + ResultCode := 3; + Break; + end; + for j := 1 to sgHs.RowCount - 1 do + if (i <> j) and (DirName = sgHs.Cells[HS_NAME, j]) then + begin + Duplicate := True; + Break; + end; + if Duplicate then + begin + ResultCode := 2; + Break; + end; + end; + if ResultCode > 0 then + begin + Result := False; + if Duplicate then + sgHs.Row := j + else + sgHs.Row := i; + SelectHs; + case ResultCode of + 1: GoToInvalidOption(tsHs, Msg + TransStr('248'), edHsName); + 2: GoToInvalidOption(tsHs, Msg + TransStr('249'), edHsName); + 3: GoToInvalidOption(tsHs, Msg + ResultMsg, edHsName); + end; + end; +end; + +function TTcp.CheckHsPorts: Boolean; +var + Duplicate: Boolean; + i, j, k, ResultCode: Integer; + Msg: string; + ParseStr: ArrOfStr; +begin + ResultCode := 0; + Result := True; + Duplicate := False; + if not sgHsPorts.Enabled then + Exit; + Msg := TTabSheet(sgHs.GetParentComponent).Caption + ' - ' + TransStr('250') + BR + BR; + k := 0; + for i := 1 to sgHs.RowCount - 1 do + begin + if (sgHs.Cells[HS_PORTS_DATA, i]) = '' then + begin + ResultCode := 1; + Break; + end; + ParseStr := Explode('|', sgHs.Cells[HS_PORTS_DATA, i]); + if Length(ParseStr) > 1 then + begin + for j := 0 to Length(ParseStr) - 1 do + begin + for k := j + 1 to Length(ParseStr) - 1 do + begin + if ParseStr[j] = ParseStr[k] then + begin + Duplicate := True; + Break; + end; + end; + if Duplicate then + Break; + end; + if Duplicate then + begin + ResultCode := 2; + Break; + end; + end; + end; + + if ResultCode > 0 then + begin + Result := False; + sgHs.Row := i; + SelectHs; + if Duplicate then + begin + sgHsPorts.Row := k + 1; + SelectHsPorts; + end; + case ResultCode of + 1: GoToInvalidOption(tsHs, Msg + TransStr('251')); + 2: GoToInvalidOption(tsHs, Msg + TransStr('252')); + end; + end; +end; + +function TTcp.CheckNetworkOptions: Boolean; +begin + if (cbxServerMode.ItemIndex > 0) and (cbUseReachableAddresses.Checked or cbUseProxy.Checked or cbUseBridges.Checked) then + begin + Result := False; + if ShowMsg(TransStr('261'), TransStr('324'), mtWarning, True) then + begin + cbUseReachableAddresses.Checked := False; + cbUseProxy.Checked := False; + cbUseBridges.Checked := False; + ApplyOptions; + end + else + GoToInvalidOption(tsNetwork); + end + else + Result := True; +end; + +function TTcp.RouterInNodesList(RouterID: string; RouterInfo: TRouterInfo; NodeType: TNodeType; SkipCodes: Boolean = False): Boolean; +var + ParseStr: ArrOfStr; + KeyStr: string; + i,j: Integer; +begin + Result := False; + for i := 0 to 3 do + begin + if i < 3 then + begin + if SkipCodes and (i = 1) then + Continue; + case i of + 0: KeyStr := RouterID; + 1: KeyStr := CountryCodes[GetCountryValue(RouterInfo.IPv4)]; + 2: KeyStr := RouterInfo.IPv4; + end; + if NodesDic.ContainsKey(KeyStr) then + Result := NodeType in NodesDic.Items[KeyStr]; + end + else + begin + KeyStr := FindInRanges(RouterInfo.IPv4); + if KeyStr <> '' then + begin + ParseStr := Explode(',', KeyStr); + for j := 0 to Length(ParseStr) - 1 do + begin + if NodesDic.ContainsKey(ParseStr[j]) then + begin + Result := NodeType in NodesDic.Items[ParseStr[j]]; + if Result then + Exit; + end; + end; + end; + end; + if Result then + Exit; + end; +end; + +function TTcp.CheckVanguards(Silent: Boolean = False): Boolean; +var + SupportVanguardsLite: Boolean; + Router: TPair; + NodesCount: Integer; + + function GetMinGuards: Integer; + begin + case cbxVanguardLayerType.ItemIndex of + 1: Result := L1_NUM_GUARDS + L2_NUM_GUARDS; + 2: Result := L1_NUM_GUARDS + L3_NUM_GUARDS; + 3: Result := L1_NUM_GUARDS + L2_NUM_GUARDS + L3_NUM_GUARDS; + else + Result := L1_NUM_GUARDS; + end; + end; + + procedure ResetVanguards; + begin + if SupportVanguardsLite then + cbxVanguardLayerType.ItemIndex := 0 + else + cbUseHiddenServiceVanguards.Checked := False; + end; + +begin + Result := True; + SupportVanguardsLite := CheckFileVersion(TorVersion, '0.4.7.1'); + if cbUseHiddenServiceVanguards.Checked then + begin + NodesCount := 0; + if RoutersDic.Count > 0 then + begin + for Router in RoutersDic do + begin + if (rfGuard in Router.Value.Flags) then + begin + if RouterInNodesList(Router.Key, Router.Value, ntEntry, True) then + begin + if not RouterInNodesList(Router.Key, Router.Value, ntExclude) then + Inc(NodesCount); + end; + end; + end; + end; + + if ((NodesCount < GetMinGuards) and (RoutersDic.Count > 0)) and (cbxVanguardLayerType.ItemIndex <> 0) then + begin + if Silent then + ResetVanguards + else + begin + Result := False; + if ShowMsg(Format(TransStr('161'), [GetMinGuards, NodesCount]), TransStr('324'), mtWarning, True) then + begin + ResetVanguards; + ApplyOptions; + end + else + GoToInvalidOption(tsLists); + end; + end + else + begin + if cbxVanguardLayerType.ItemIndex = 0 then + ResetVanguards; + end; + end; +end; + +procedure TTcp.SetNodes(FilterEntry, FilterMiddle, FilterExit, FavoritesEntry, FavoritesMiddle, FavoritesExit, ExcludeNodes: string); +var + Vanguards: string; + ParseStr: ArrOfStr; + i: Integer; +begin + DeleteTorConfig('HSLayer2Nodes'); + DeleteTorConfig('HSLayer3Nodes'); + DeleteTorConfig('VanguardsLiteEnabled'); + if cbUseHiddenServiceVanguards.Checked then + begin + ParseStr := Explode(',', RemoveBrackets(FavoritesEntry)); + Vanguards := ''; + for i := 0 to Length(ParseStr) - 1 do + begin + if Length(ParseStr[i]) > 2 then + Vanguards := Vanguards + ',' + ParseStr[i]; + end; + Delete(Vanguards, 1, 1); + + case cbxVanguardLayerType.ItemIndex of + 1: SetTorConfig('HSLayer2Nodes', Vanguards); + 2: SetTorConfig('HSLayer3Nodes', Vanguards); + 3: + begin + SetTorConfig('HSLayer2Nodes', Vanguards); + SetTorConfig('HSLayer3Nodes', Vanguards); + end; + end; + end + else + begin + if CheckFileVersion(TorVersion, '0.4.7.1') then + SetTorConfig('VanguardsLiteEnabled', '0'); + end; + + case cbxFilterMode.ItemIndex of + 0: + begin + DeleteTorConfig('EntryNodes'); + DeleteTorConfig('MiddleNodes'); + DeleteTorConfig('ExitNodes'); + end; + 1: + begin + if cbUseBridges.Checked then + DeleteTorConfig('EntryNodes') + else + SetTorConfig('EntryNodes', FilterEntry); + SetTorConfig('MiddleNodes', FilterMiddle); + SetTorConfig('ExitNodes', FilterExit); + end; + 2: + begin + if miReplaceDisabledFavoritesWithCountries.Checked and + ((FavoritesEntry = '') or (lbFavoritesEntry.HelpContext = 0)) then + FavoritesEntry := FilterEntry; + if miReplaceDisabledFavoritesWithCountries.Checked and + ((FavoritesMiddle = '') or (lbFavoritesMiddle.HelpContext = 0)) then + FavoritesMiddle := FilterMiddle; + if miReplaceDisabledFavoritesWithCountries.Checked and + ((FavoritesExit = '') or (lbFavoritesExit.HelpContext = 0)) then + FavoritesExit := FilterExit; + + if cbUseBridges.Checked then + DeleteTorConfig('EntryNodes') + else + SetTorConfig('EntryNodes', FavoritesEntry); + SetTorConfig('MiddleNodes', FavoritesMiddle); + SetTorConfig('ExitNodes', FavoritesExit); + end; + end; + if lbExcludeNodes.HelpContext = 1 then + SetTorConfig('ExcludeNodes', ExcludeNodes) + else + DeleteTorConfig('ExcludeNodes'); + DeleteTorConfig('ExcludeExitNodes'); +end; + +procedure TTcp.ApplyOptions(AutoResolveErrors: Boolean = False); +var + ini: TMemIniFile; + i: Integer; + Item: TPair; + NodeItem: TPair; + Temp: string; + FilterEntry, FilterMiddle, FilterExit, ExcludeNodes, NodeStr: string; + FavoritesEntry, FavoritesMiddle, FavoritesExit: string; + StyleName: string; +begin + OptionsLocked := False; + if (cbxAuthMetod.ItemIndex = 1) and (CheckEditString(edControlPassword.Text, '', True, lbControlPassword.Caption, edControlPassword) <> '') then + Exit; + if (cbxServerMode.ItemIndex > 0) and (CheckEditString(edNickname.Text, '', True, lbNickname.Caption, edNickname) <> '') then + Exit; + if not CheckVanguards(AutoResolveErrors) then + Exit; + if not CheckNetworkOptions then + Exit; + if not CheckHsTable then + Exit; + if not CheckHsPorts then + Exit; + if not CheckTransports then + Exit; + LoadTorConfig; + CheckRequiredFiles; + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + if cbxLanguage.ItemIndex <> cbxLanguage.Tag then + Translate(cbxLanguage.Text); + + if cbxThemes.ItemIndex = 0 then + StyleName := 'Windows' + else + StyleName := cbxThemes.Text; + + if (ConnectState = 2) and (AutoScanStage = 0) and not ConsensusUpdated and + (ini.ReadBool('Scanner', 'AutoScanNewNodes', True) = False) then + begin + if Tcp.cbAutoScanNewNodes.Checked and + (Tcp.cbEnablePingMeasure.Checked or Tcp.cbEnableDetectAliveNodes.Checked) then + AutoScanStage := 1; + end; + + ini.WriteInteger('Main', 'Language', Integer(cbxLanguage.Items.Objects[cbxLanguage.ItemIndex])); + ini.WriteString('Main', 'Theme', StyleName); + ini.WriteInteger('Main', 'LastPlace', LastPlace); + ini.WriteInteger('Main', 'OptionsPage', pcOptions.TabIndex); + + ini.WriteBool('Main', 'ConnectOnStartup', cbConnectOnStartup.Checked); + ini.WriteBool('Main', 'RestartOnControlFail', cbRestartOnControlFail.Checked); + ini.WriteBool('Main', 'MinimizeOnClose', cbMinimizeOnClose.Checked); + ini.WriteBool('Main', 'MinimizeOnStartup', cbMinimizeOnStartup.Checked); + ini.WriteBool('Main', 'ShowBalloonHint', cbShowBalloonHint.Checked); + ini.WriteBool('Main', 'ShowBalloonOnlyWhenHide', cbShowBalloonOnlyWhenHide.Checked); + ini.WriteBool('Main', 'StayOnTop', cbStayOnTop.Checked); + ini.WriteBool('Main', 'NoDesktopBorders', cbNoDesktopBorders.Checked); + ini.WriteBool('Main', 'NoDesktopBordersOnlyEnlarged', cbNoDesktopBordersOnlyEnlarged.Checked); + ini.WriteBool('Main', 'HideIPv6Addreses', cbHideIPv6Addreses.Checked); + ini.WriteBool('Main', 'UseOpenDNS', cbUseOpenDNS.Checked); + ini.WriteBool('Main', 'UseOpenDNSOnlyWhenUnknown', cbUseOpenDNSOnlyWhenUnknown.Checked); + ini.WriteBool('Main', 'RememberEnlargedPosition', cbRememberEnlargedPosition.Checked); + ini.WriteBool('Main', 'ClearPreviousSearchQuery', cbClearPreviousSearchQuery.Checked); + ini.WriteBool('Main', 'UseNetworkCache', cbUseNetworkCache.Checked); + + ini.WriteBool('Scanner', 'EnablePingMeasure', cbEnablePingMeasure.Checked); + ini.WriteBool('Scanner', 'EnableDetectAliveNodes', cbEnableDetectAliveNodes.Checked); + ini.WriteBool('Scanner', 'AutoScanNewNodes', cbAutoScanNewNodes.Checked); + ini.WriteInteger('Scanner', 'ScanPortTimeout', udScanPortTimeout.Position); + ini.WriteInteger('Scanner', 'ScanPingTimeout', udScanPingTimeout.Position); + ini.WriteInteger('Scanner', 'ScanPortionTimeout', udScanPortionTimeout.Position); + ini.WriteInteger('Scanner', 'DelayBetweenAttempts', udDelayBetweenAttempts.Position); + ini.WriteInteger('Scanner', 'ScanPingAttempts', udScanPingAttempts.Position); + ini.WriteInteger('Scanner', 'ScanPortAttempts', udScanPortAttempts.Position); + ini.WriteInteger('Scanner', 'ScanMaxThread', udScanMaxThread.Position); + ini.WriteInteger('Scanner', 'ScanPortionSize', udScanPortionSize.Position); + ini.WriteInteger('Scanner', 'FullScanInterval', udFullScanInterval.Position); + ini.WriteInteger('Scanner', 'NonResponsedScanInterval', udNonResponsedScanInterval.Position); + ini.WriteInteger('Scanner', 'PartialScansCounts', udPartialScansCounts.Position); + + ini.WriteInteger('AutoSelNodes', 'AutoSelEntryCount', udAutoSelEntryCount.Position); + ini.WriteInteger('AutoSelNodes', 'AutoSelMiddleCount', udAutoSelMiddleCount.Position); + ini.WriteInteger('AutoSelNodes', 'AutoSelExitCount', udAutoSelExitCount.Position); + ini.WriteInteger('AutoSelNodes', 'AutoSelMinWeight', udAutoSelMinWeight.Position); + ini.WriteInteger('AutoSelNodes', 'AutoSelMaxPing', udAutoSelMaxPing.Position); + ini.WriteInteger('AutoSelNodes', 'AutoSelPriority', cbxAutoSelPriority.ItemIndex); + ini.WriteBool('AutoSelNodes', 'AutoSelFastAndStableOnly', cbAutoSelStableOnly.Checked); + ini.WriteBool('AutoSelNodes', 'AutoSelFilterCountriesOnly', cbAutoSelFilterCountriesOnly.Checked); + ini.WriteBool('AutoSelNodes', 'AutoSelUniqueNodes', cbAutoSelUniqueNodes.Checked); + ini.WriteBool('AutoSelNodes', 'AutoSelNodesWithPingOnly', cbAutoSelNodesWithPingOnly.Checked); + ini.WriteBool('AutoSelNodes', 'AutoSelMiddleNodesWithoutDir', cbAutoSelMiddleNodesWithoutDir.Checked); + + SetDesktopPosition(Tcp.Left, Tcp.Top, GetCheckBorders, True); + ini.WriteString('Main', 'FormPosition', GetFormPositionStr); + + edControlPassword.Hint := ini.ReadString('Main', 'HashedControlPassword', ''); + if cbxAuthMetod.ItemIndex = 1 then + begin + if edControlPassword.Text <> '' then + begin + if (edControlPassword.Text <> Decrypt(ControlPassword, 'True')) or (edControlPassword.Hint = '') then + begin + ControlPassword := Crypt(edControlPassword.Text, 'True'); + Temp := GetPasswordHash(edControlPassword.Text); + SetTorConfig('HashedControlPassword', Temp); + ini.WriteString('Main', 'HashedControlPassword', Temp); + ShowBalloon(TransStr('253')); + end + else + SetTorConfig('HashedControlPassword', edControlPassword.Hint); + end + else + cbxAuthMetod.ItemIndex := 0; + end; + if cbxAuthMetod.ItemIndex = 0 then + begin + SetTorConfig('CookieAuthentication', '1'); + if edControlPassword.Text <> '' then + ini.WriteString('Main', 'HashedControlPassword', edControlPassword.Hint) + else + begin + ControlPassword := ''; + ini.WriteString('Main', 'HashedControlPassword', ''); + end; + DeleteTorConfig('HashedControlPassword'); + end + else + DeleteTorConfig('CookieAuthentication'); + ini.WriteString('Main', 'ControlPassword', ControlPassword); + CheckAuthMetodContols; + + for i := 0 to miLogLevel.Count - 1 do + begin + if miLogLevel.items[i].Checked then + begin + SetTorConfig('Log', AnsiLowerCase(copy(miLogLevel.items[i].Name, 3, Length(miLogLevel.items[i].Name) - 2)) + ' stdout'); + Break; + end; + end; + + SetTorConfig('SafeLogging', IntToStr(Integer(miSafeLogging.Checked))); + SetTorConfig('MaxCircuitDirtiness', IntToStr(udMaxCircuitDirtiness.Position)); + SetTorConfig('CircuitBuildTimeout', IntToStr(udCircuitBuildTimeout.Position)); + SetTorConfig('MaxClientCircuitsPending', IntToStr(udMaxClientCircuitsPending.Position)); + SetTorConfig('LearnCircuitBuildTimeout', IntToStr(Integer(cbLearnCircuitBuildTimeout.Checked))); + SetTorConfig('EnforceDistinctSubnets', IntToStr(Integer(cbEnforceDistinctSubnets.Checked))); + SetTorConfig('StrictNodes', IntToStr(Integer(not cbStrictNodes.Checked))); + SetTorConfig('NewCircuitPeriod', IntToStr(udNewCircuitPeriod.Position)); + SetTorConfig('AvoidDiskWrites', IntToStr(Integer(cbAvoidDiskWrites.Checked))); + + CheckSimilarPorts; + if cbEnableSocks.Checked then + SetTorConfig('SOCKSPort', FormatHost(cbxSocksHost.Text) + ':' + IntToStr(udSOCKSPort.Position) + cbxSocksHost.Hint) + else + SetTorConfig('SOCKSPort', '0' + cbxSocksHost.Hint); + ini.WriteString('Network', 'SOCKSHost', FormatHost(cbxSocksHost.Text)); + ini.WriteInteger('Network', 'SOCKSPort', udSOCKSPort.Position); + SetTorConfig('ControlPort', IntToStr(udControlPort.Position)); + + SaveReachableAddresses(ini); + SaveProxyData(ini); + UpdateBridgesControls(True, False); + SaveBridgesData(ini); + + for Item in FilterDic do + begin + if ntEntry in Item.Value.Data then + FilterEntry := FilterEntry + ',{' + Item.Key + '}'; + if ntMiddle in Item.Value.Data then + FilterMiddle := FilterMiddle + ',{' + Item.Key + '}'; + if ntExit in Item.Value.Data then + FilterExit := FilterExit + ',{' + Item.Key + '}'; + end; + Delete(FilterEntry, 1, 1); + Delete(FilterMiddle, 1, 1); + Delete(FilterExit, 1, 1); + ini.WriteString('Filter', 'EntryNodes', FilterEntry); + ini.WriteString('Filter', 'MiddleNodes', FilterMiddle); + ini.WriteString('Filter', 'ExitNodes', FilterExit); + + for NodeItem in NodesDic do + begin + NodeStr := NodeItem.Key; + if FilterDic.ContainsKey(NodeStr) then + NodeStr := '{' + NodeStr + '}'; + if ntEntry in NodeItem.Value then + FavoritesEntry := FavoritesEntry + ',' + NodeStr; + if ntMiddle in NodeItem.Value then + FavoritesMiddle := FavoritesMiddle + ',' + NodeStr; + if ntExit in NodeItem.Value then + FavoritesExit := FavoritesExit + ',' + NodeStr; + if ntExclude in NodeItem.Value then + ExcludeNodes := ExcludeNodes + ',' + NodeStr; + end; + Delete(FavoritesEntry, 1, 1); + Delete(FavoritesMiddle, 1, 1); + Delete(FavoritesExit, 1, 1); + Delete(ExcludeNodes, 1, 1); + + CheckFilterMode; + CheckFavoritesState; + SetNodes(FilterEntry, FilterMiddle, FilterExit, FavoritesEntry, FavoritesMiddle, FavoritesExit, ExcludeNodes); + + ini.WriteString('Routers', 'EntryNodes', FavoritesEntry); + ini.WriteString('Routers', 'MiddleNodes', FavoritesMiddle); + ini.WriteString('Routers', 'ExitNodes', FavoritesExit); + ini.WriteString('Routers', 'ExcludeNodes', ExcludeNodes); + ini.WriteInteger('Lists', 'UseFavoritesEntry', lbFavoritesEntry.HelpContext); + ini.WriteInteger('Lists', 'UseFavoritesMiddle', lbFavoritesMiddle.HelpContext); + ini.WriteInteger('Lists', 'UseFavoritesExit', lbFavoritesExit.HelpContext); + ini.WriteInteger('Lists', 'UseExcludeNodes', lbExcludeNodes.HelpContext); + ini.WriteInteger('Lists', 'NodesListType', cbxNodesListType.ItemIndex); + ini.WriteBool('Lists', 'UseHiddenServiceVanguards', cbUseHiddenServiceVanguards.Checked); + ini.WriteInteger('Lists', 'VanguardLayerType', cbxVanguardLayerType.ItemIndex); + ini.WriteInteger('Filter', 'FilterMode', cbxFilterMode.ItemIndex); + ini.WriteBool('Filter', 'ReplaceDisabledFavoritesWithCountries', miReplaceDisabledFavoritesWithCountries.Checked); + + SaveServerOptions(ini); + SaveTransportsData(ini, False); + SaveHiddenServices(ini); + SaveTrackHostExits(ini); + + CheckCachedFiles; + CheckStatusControls; + EnableOptionButtons(False); + if ConsensusUpdated then + LoadConsensus + else + begin + if cbxLanguage.ItemIndex <> cbxLanguage.Tag then + begin + LoadRoutersCountries; + ShowFilter; + ShowRouters; + if ConnectState = 0 then + ShowCircuits; + end + else + begin + if RoutersUpdated then + ShowRouters; + end; + end; + + if cbxLanguage.ItemIndex <> cbxLanguage.Tag then + cbxLanguage.Tag := cbxLanguage.ItemIndex; + + UpdateOptionsAfterRoutersUpdate; + + SaveTorConfig; + ReloadTorConfig; + if OpenDNSUpdated then + begin + OpenDNSUpdated := False; + GetServerInfo; + end; + finally + ini.UpdateFile; + ini.Free; + end; +end; + +procedure TTcp.CheckCachedFiles; +begin + if ConnectState = 0 then + begin + if ((cbxServerMode.ItemIndex = 0) and not cbUseBridges.checked) or + ((cbxServerMode.ItemIndex > 0) and not cbDirCache.Checked) then + begin + RenameFile(UserDir + 'cached-consensus', UserDir + 'cached-consensus.tmp'); + RenameFile(UserDir + 'cached-descriptors', UserDir + 'cached-descriptors.tmp'); + RenameFile(UserDir + 'cached-descriptors.new', UserDir + 'cached-descriptors.new.tmp'); + end + else + begin + RenameFile(UserDir + 'cached-consensus.tmp', UserDir + 'cached-consensus'); + RenameFile(UserDir + 'cached-descriptors.tmp', UserDir + 'cached-descriptors'); + RenameFile(UserDir + 'cached-descriptors.new.tmp', UserDir + 'cached-descriptors.new'); + ConsensusUpdated := True; + end; + end; +end; + +procedure TTcp.ClearFilter(NodeType: TNodeType; Silent: Boolean = True); +var + Item: TPair; + Filter: TFilterInfo; +begin + for Item in FilterDic do + begin + Filter := Item.Value; + case NodeType of + ntNone: Filter.Data := []; + ntExclude: NodesDic.Remove(CountryCodes[Filter.cc]); + else + Exclude(Filter.Data, NodeType); + end; + if NodeType <> ntExclude then + FilterDic.AddOrSetValue(Item.Key, Filter); + end; + + if not Silent then + begin + CalculateFilterNodes; + FilterUpdated := True; + if NodeType = ntExclude then + ExcludeUpdated := True; + ShowFilter; + EnableOptionButtons; + end; +end; + +procedure TTcp.ClearRouters(NodeType: TNodeType; Silent: Boolean = True); +var + Item: TPair; + Data, ExcludeData: TNodeTypes; +begin + if NodeType = ntNone then + begin + NodesDic.Clear; + RangesDic.Clear; + end + else + begin + if NodeType = ntFavorites then + ExcludeData := [ntEntry, ntMiddle, ntExit] + else + ExcludeData := [NodeType]; + for Item in NodesDic do + begin + Data := Item.Value; + Data := Data - ExcludeData; + NodesDic.AddOrSetValue(Item.Key, Data); + end; + end; + if not Silent then + begin + CalculateTotalNodes(False); + ShowRouters; + RoutersUpdated := True; + if NodeType = ntExclude then + FilterUpdated := True; + EnableOptionButtons; + end; +end; + +procedure TTcp.miClearRoutersAbsentClick(Sender: TObject); +var + IpList: TDictionary; + NodeItem: TPair; + RouterItem: TPair; + ListItem: TPair; + DeleteExcludeNodes, Search: Boolean; + Cidr: TIPv4Range; + + procedure SetNodesData; + begin + if DeleteExcludeNodes or not (ntExclude in NodeItem.Value) then + NodesDic.AddOrSetValue(NodeItem.Key, []) + else + NodesDic.AddOrSetValue(NodeItem.Key, [ntExclude]); + end; + +begin + if (InfoStage > 0) or Assigned(Consensus) or Assigned(Descriptors) or (RoutersDic.Count = 0) then + Exit; + DeleteExcludeNodes := not ShowMsg(TransStr('358'), '', mtQuestion, True); + IpList := TDictionary.Create; + try + for RouterItem in RoutersDic do + IpList.AddOrSetValue(RouterItem.Value.IPv4, 0); + + for NodeItem in NodesDic do + begin + if ValidHash(NodeItem.Key) then + begin + if not RoutersDic.ContainsKey(NodeItem.Key) then + SetNodesData; + end + else + begin + if ValidAddress(NodeItem.Key, True, True) = 1 then + begin + if Pos('/', NodeItem.Key) = 0 then + begin + if not IpList.ContainsKey(NodeItem.Key) then + SetNodesData; + end + else + begin + Search := False; + Cidr := CidrToRange(NodeItem.Key); + for ListItem in IpList do + if InRange(IpToInt(ListItem.Key), Cidr.IpStart, Cidr.IpEnd) then + begin + Search := True; + Break; + end; + if not Search then + begin + RangesDic.Remove(NodeItem.Key); + SetNodesData; + end; + end; + end + else + begin + if GeoIpDic.Count > 0 then + begin + if FilterDic.ContainsKey(NodeItem.Key) then + begin + if CountryTotals[TOTAL_RELAYS][FilterDic.Items[NodeItem.Key].cc] = 0 then + SetNodesData; + end; + end; + end; + end; + end; + CalculateTotalNodes(False); + ShowRouters; + FilterUpdated := True; + RoutersUpdated := True; + EnableOptionButtons; + finally + IpList.Free; + end; +end; + +procedure TTcp.miClearRoutersIncorrectClick(Sender: TObject); +var + IpList: TDictionary; + UpdateList: TDictionary; + NodeItem: TPair; + RouterItem: TPair; + UpdateItem: TPair; + ConvertToHash: Boolean; + RouterInfo: TRouterInfo; + Ip, CountryCode: string; + + procedure CheckNode(NodeID: string; NodeTypes: TNodeTypes; HashID: string = ''); + var + NodeIsChanged, NodeIsExcluded, NodeIsBridge: Boolean; + Flags: TRouterFlags; + Node, CountryCode: string; + begin + NodeIsChanged := False; + NodeIsExcluded := False; + + if HashID = '' then + Node := NodeID + else + Node := HashID; + + if RoutersDic.TryGetValue(Node, RouterInfo) then + begin + if NodesDic.ContainsKey(NodeID) then + begin + Flags := RouterInfo.Flags; + NodeIsBridge := (NodeTypes <> [ntExclude]) and (rfBridge in Flags) and not (rfRelay in Flags); + + if GeoIpDic.Count > 0 then + begin + CountryCode := CountryCodes[GetCountryValue(RouterInfo.IPv4)]; + if NodesDic.ContainsKey(CountryCode) then + NodeIsExcluded := ntExclude in NodesDic.Items[CountryCode]; + end; + + if NodeIsExcluded or NodeIsBridge then + NodesDic.AddOrSetValue(NodeID, []) + else + begin + if (ntEntry in NodeTypes) and not (rfGuard in Flags) then + begin + Exclude(NodeTypes, ntEntry); + NodeIsChanged := True; + end; + if (ntExit in NodeTypes) and not (rfExit in Flags) then + begin + Exclude(NodeTypes, ntExit); + NodeIsChanged := True; + end; + if NodeIsChanged then + NodesDic.AddOrSetValue(NodeID, NodeTypes); + end; + end; + end; + end; + + procedure CheckRanges(NodeIp: string; NodeTypes: TNodeTypes; HashID: string = ''); + var + RangeItem: TPair; + RangeInfo: TNodeTypes; + NodeID: string; + begin + if RangesDic.Count > 0 then + begin + if HashID = '' then + NodeID := NodeIp + else + NodeID := HashID; + for RangeItem in RangesDic do + begin + if InRange(IpToInt(NodeIp), RangeItem.Value.IpStart, RangeItem.Value.IpEnd) then + begin + if NodesDic.TryGetValue(RangeItem.Key, RangeInfo) then + begin + if NodeTypes = [ntNone] then + CheckNode(RangeItem.Key, RangeInfo, HashID) + else + begin + if NodesDic.ContainsKey(NodeID) then + begin + if (ntExclude in RangeInfo) then + begin + if NodeTypes <> [ntExclude] then + NodesDic.AddOrSetValue(NodeID, []) + end + else + begin + if ntExclude in NodesDic.Items[NodeID] then + NodesDic.AddOrSetValue(RangeItem.Key, []) + end; + end; + end; + end; + end; + end; + end; + end; + + procedure CheckIp(NodeIp: string; NodeTypes: TNodeTypes; HashID: string = ''); + var + ParseStr: ArrOfStr; + NodesList, CountryCode: string; + i: Integer; + begin + + if HashID <> '' then + begin + CheckRanges(NodeIp, NodeTypes, HashID); + CheckNode(HashID, NodeTypes); + Exit; + end + else + CheckRanges(NodeIp, NodeTypes); + + if IpList.TryGetValue(NodeIp, NodesList) then + begin + ParseStr := Explode(',', NodesList); + for i := 0 to Length(ParseStr) - 1 do + begin + if NodesDic.ContainsKey(ParseStr[i]) then + begin + CheckRanges(NodeIp, NodeTypes, ParseStr[i]); + + if (ntExclude in NodeTypes) and (NodesDic.Items[ParseStr[i]] <> [ntExclude]) then + NodesDic.AddOrSetValue(ParseStr[i], []) + else + CheckNode(ParseStr[i], NodesDic.Items[ParseStr[i]]); + + if NodesDic.ContainsKey(NodeIp) then + begin + if NodesDic.Items[NodeIp] <> [ntExclude] then + begin + if (NodesDic.Items[ParseStr[i]] = [ntExclude]) then + NodesDic.AddOrSetValue(NodeIp, []) + else + CheckNode(NodeIp, NodeTypes, ParseStr[i]); + end; + end; + end + else + CheckNode(NodeIp, NodeTypes, ParseStr[i]); + end; + end + else + begin + if NodesDic.ContainsKey(NodeIp) then + begin + if GeoIpDic.Count > 0 then + begin + CountryCode := CountryCodes[GetCountryValue(NodeIp)]; + if NodesDic.ContainsKey(CountryCode) then + begin + if ntExclude in NodesDic.Items[CountryCode] then + NodesDic.AddOrSetValue(NodeIp, []); + end; + end; + end; + end; + end; + + procedure CheckCountry(NodeIp, HashID: string); + begin + if GeoIpDic.Count > 0 then + begin + CountryCode := CountryCodes[GetCountryValue(NodeIp)]; + if NodesDic.ContainsKey(CountryCode) then + begin + if not (ntExclude in NodesDic.Items[CountryCode]) then + CheckNode(CountryCode, NodesDic.Items[CountryCode], HashID); + end; + end; + end; + + procedure CheckRangesNesting(RangeID: string; NodeTypes: TNodeTypes); + var + RangeItem: TPair; + Range: TIpv4Range; + begin + if RangesDic.Count > 1 then + begin + if RangesDic.ContainsKey(RangeID) then + Range := RangesDic.Items[RangeID] + else + Range := CidrToRange(RangeID); + for RangeItem in RangesDic do + begin + if RangeID <> RangeItem.Key then + begin + if InRange(Range.IpStart, RangeItem.Value.IpStart, RangeItem.Value.IpEnd) and + InRange(Range.IpEnd, RangeItem.Value.IpStart, RangeItem.Value.IpEnd) then + begin + if NodesDic.ContainsKey(RangeItem.Key) then + begin + if (ntExclude in NodesDic.Items[RangeItem.Key]) then + begin + if NodesDic.ContainsKey(RangeID) then + NodesDic.AddOrSetValue(RangeID, []); + end + else + begin + if (ntExclude in NodeTypes) then + NodesDic.AddOrSetValue(RangeItem.Key, []) + else + if NodesDic.Items[RangeItem.Key] = NodeTypes then + begin + if NodesDic.ContainsKey(RangeID) then + NodesDic.AddOrSetValue(RangeID, []); + end; + end; + end; + end; + end; + end; + end; + end; + + procedure ConvertNodesToHash(NodeIp, HashID: string); + var + RangeItem: TPair; + CountryCode: string; + IgnoreExclude: Boolean; + + procedure UpdateNodes(NodeID: string); + begin + if NodesDic.ContainsKey(NodeID) then + begin + if NodesDic.ContainsKey(HashID) then + begin + if (ntExclude in NodesDic.Items[NodeID]) then + begin + if IgnoreExclude then + Exit; + NodesDic.AddOrSetValue(HashID, [ntExclude]); + end + else + begin + if NodesDic.Items[HashID] <> [ntExclude] then + NodesDic.AddOrSetValue(HashID, NodesDic.Items[HashID] + NodesDic.Items[NodeID]); + end; + end + else + begin + if IgnoreExclude and (ntExclude in NodesDic.Items[NodeID]) then + Exit; + NodesDic.AddOrSetValue(HashID, NodesDic.Items[NodeID]); + end; + UpdateList.AddOrSetValue(NodeID, 0); + end; + end; + + begin + IgnoreExclude := miIgnoreConvertExcludeNodes.Checked; + + if miConvertIpNodes.Checked then + UpdateNodes(NodeIp); + + if miConvertCidrNodes.Checked then + begin + if RangesDic.Count > 0 then + begin + for RangeItem in RangesDic do + begin + if InRange(IpToInt(NodeIp), RangeItem.Value.IpStart, RangeItem.Value.IpEnd) then + UpdateNodes(RangeItem.Key); + end; + end; + end + else + CheckRanges(NodeIp, [ntNone], HashID); + + if miConvertCountryNodes.Checked then + begin + if GeoIpDic.Count > 0 then + begin + CountryCode := CountryCodes[GetCountryValue(NodeIp)]; + UpdateNodes(CountryCode); + end; + end + else + CheckCountry(NodeIp, HashID); + end; + +begin + + if (RoutersDic.Count = 0) or (InfoStage > 0) or Assigned(Consensus) or Assigned(Descriptors) then + Exit; + + ConvertToHash := miEnableConvertNodesOnIncorrectClear.Checked; + + IpList := TDictionary.Create; + UpdateList := TDictionary.Create; + try + for NodeItem in NodesDic do + begin + if (ntExclude in NodeItem.Value) and (NodeItem.Value <> [ntExclude]) then + NodesDic.AddOrSetValue(NodeItem.Key, [ntExclude]); + if Pos('/', NodeItem.Key) <> 0 then + CheckRangesNesting(NodeItem.Key, NodeItem.Value) + end; + + for RouterItem in RoutersDic do + begin + if IpList.ContainsKey(RouterItem.Value.IPv4) then + IpList.AddOrSetValue(RouterItem.Value.IPv4, IpList.Items[RouterItem.Value.IPv4] + ',' + RouterItem.Key) + else + IpList.AddOrSetValue(RouterItem.Value.IPv4, RouterItem.Key); + if ConvertToHash then + ConvertNodesToHash(RouterItem.Value.IPv4, RouterItem.Key) + else + begin + CheckCountry(RouterItem.Value.IPv4, RouterItem.Key); + CheckRanges(RouterItem.Value.IPv4, [ntNone], RouterItem.Key); + end; + end; + + if ConvertToHash then + begin + for UpdateItem in UpdateList do + begin + if NodesDic.ContainsKey(UpdateItem.Key) then + begin + NodesDic.AddOrSetValue(UpdateItem.Key, []); + if Pos('/', UpdateItem.Key) <> 0 then + RangesDic.Remove(UpdateItem.Key); + end; + end; + end; + + for NodeItem in NodesDic do + begin + if NodeItem.Value <> [] then + begin + if RoutersDic.ContainsKey(NodeItem.Key) then + begin + Ip := RoutersDic.Items[NodeItem.Key].IPv4; + if NodesDic.ContainsKey(Ip) then + CheckIp(Ip, NodesDic.Items[Ip]) + else + CheckIp(Ip, NodeItem.Value, NodeItem.Key); + end + else + begin + if ValidAddress(NodeItem.Key) = 1 then + CheckIp(NodeItem.Key, NodeItem.Value) + end; + end; + end; + finally + IpList.Free; + UpdateList.Free; + end; + + CalculateTotalNodes(False); + ShowRouters; + FilterUpdated := True; + RoutersUpdated := True; + EnableOptionButtons; +end; + +procedure TTcp.miClearServerCacheClick(Sender: TObject); +begin + if not CheckCacheOpConfirmation(TMenuItem(Sender).Caption) then + Exit; + if FileExists(UserDir + 'cached-consensus') or + FileExists(UserDir + 'cached-consensus.tmp') then + begin + DeleteFile(UserDir + 'cached-consensus'); + DeleteFile(UserDir + 'cached-descriptors'); + DeleteFile(UserDir + 'cached-descriptors.new'); + DeleteFile(UserDir + 'cached-descriptors.tmp'); + DeleteFile(UserDir + 'cached-consensus.tmp'); + DeleteFile(UserDir + 'cached-descriptors.new.tmp'); + DeleteDir(UserDir + 'diff-cache'); + end; +end; + +procedure TTcp.miClearUnusedNetworkCacheClick(Sender: TObject); +var + IpList: TDictionary; + DeleteList: TStringList; + Router: TPair; + Item: TPair; + i: Integer; +begin + if not CheckCacheOpConfirmation(TMenuItem(Sender).Caption) then + Exit; + DeleteList := TStringList.Create; + IpList := TDictionary.Create; + try + for Router in RoutersDic do + IpList.AddOrSetValue(Router.Value.IPv4, 0); + for Item in GeoIpDic do + begin + if not IpList.ContainsKey(Item.Key) then + DeleteList.Append(Item.Key); + end; + for i := 0 to DeleteList.Count - 1 do + GeoIpDic.Remove(DeleteList[i]); + finally + IpList.Free; + DeleteList.Free; + end; + SaveNetworkCache; +end; + +procedure TTcp.miConvertCidrNodesClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'ConvertCidrNodes', miConvertCidrNodes.Checked); +end; + +procedure TTcp.miConvertCountryNodesClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'ConvertCountryNodes', miConvertCountryNodes.Checked); +end; + +procedure TTcp.miConvertIpNodesClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'ConvertIpNodes', miConvertIpNodes.Checked); +end; + +procedure TTcp.miIgnoreConvertExcludeNodesClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'IgnoreConvertExcludeNodes', miIgnoreConvertExcludeNodes.Checked); +end; + +procedure TTcp.ClearFilterClick(Sender: TObject); +begin + ClearFilter(TNodeType(TMenuItem(Sender).Tag), False); +end; + +procedure TTcp.ClearRoutersClick(Sender: TObject); +begin + ClearRouters(TNodeType(TMenuItem(Sender).Tag), False); +end; + +procedure TTcp.cbxExitPolicyTypeChange(Sender: TObject); +begin + if cbxExitPolicyType.ItemIndex = 2 then + meExitPolicy.Enabled := True + else + meExitPolicy.Enabled := False; + EnableOptionButtons; +end; + +procedure TTcp.miWriteLogFileClick(Sender: TObject); +begin + SetConfigBoolean('Log', 'WriteLogFile', miWriteLogFile.Checked); +end; + +procedure TTcp.FilterDeleteClick(Sender: TObject); +var + ini: TMemIniFile; + TemplateName, Temp: string; +begin + TemplateName := TMenuItem(Sender).Caption; + if TemplateName = TransStr('264') then + Temp := '' + else + Temp := TransStr('366') + ' '; + + if ShowMsg(Format(TransStr('263'), [Temp, TemplateName]), '', mtQuestion, True) then + begin + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + if TMenuItem(Sender).Tag = 0 then + ini.EraseSection('Templates') + else + ini.DeleteKey('Templates', IntToStr(TMenuItem(Sender).Tag)); + finally + ini.UpdateFile; + ini.Free; + end; + ShowBalloon(Format(TransStr('365'), [TemplateName])); + end; +end; + +procedure TTcp.FilterLoadClick(Sender: TObject); +var + ParseStr: ArrOfStr; + FUpdated, RUpdated, ImmediateApplyOptions, IgnoreSettings: Boolean; + EmptyCountries, EmptyFavorites, EmptyExcludes: Boolean; + LoadCountries, LoadFavorites, LoadExcludes: Boolean; + ini: TMemIniFile; + n: Integer; +begin + + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + ParseStr := Explode(';', ini.ReadString('Templates', IntToStr(TMenuItem(Sender).Tag), '')); + n := Length(ParseStr); + if n in [5,9] then + begin + if ValidInt(ParseStr[1], 0, 2) then + cbxFilterMode.ItemIndex := StrToInt(ParseStr[1]) + else + begin + ShowMsg(TransStr('254'), '', mtError); + Exit; + end; + + FUpdated := False; + RUpdated := False; + ImmediateApplyOptions := TMenuItem(Sender).Hint = 'ApplyOptions'; + IgnoreSettings := miIgnoreTplLoadParamsOutsideTheFilter.Checked and ImmediateApplyOptions; + EmptyCountries := ((ParseStr[2] = '') and (ParseStr[3] = '') and (ParseStr[4] = '')) and miNotLoadEmptyTplData.Checked; + LoadCountries := (miTplLoadCountries.Checked or IgnoreSettings) and not EmptyCountries; + + if LoadCountries then + begin + ClearFilter(ntNone); + GetNodes(ParseStr[2], ntEntry, False); + GetNodes(ParseStr[3], ntMiddle, False); + GetNodes(ParseStr[4], ntExit, False); + FUpdated := True; + end; + + if n = 9 then + begin + EmptyFavorites := ((ParseStr[5] = '') and (ParseStr[6] = '') and (ParseStr[7] = '')) and miNotLoadEmptyTplData.Checked; + EmptyExcludes := (ParseStr[8] = '') and miNotLoadEmptyTplData.Checked; + LoadFavorites := (miTplLoadRouters.Checked or IgnoreSettings) and not EmptyFavorites; + LoadExcludes := (miTplLoadExcludes.Checked or IgnoreSettings) and not EmptyExcludes; + + if LoadFavorites then + begin + if LoadExcludes then + ClearRouters(ntNone) + else + ClearRouters(ntFavorites); + GetNodes(ParseStr[5], ntEntry, True); + GetNodes(ParseStr[6], ntMiddle, True); + GetNodes(ParseStr[7], ntExit, True); + RUpdated := True; + end; + + if LoadExcludes then + begin + if not LoadFavorites then + ClearRouters(ntExclude); + GetNodes(ParseStr[8], ntExclude, True); + RUpdated := True; + end; + end; + + CalculateTotalNodes; + CalculateFilterNodes; + + if FUpdated then + begin + FilterUpdated := True; + ShowFilter; + if not RUpdated then + begin + CheckFilterMode; + UpdateRoutersAfterFilterUpdate; + end; + end; + + if RUpdated then + begin + RoutersUpdated := True; + UpdateOptionsAfterRoutersUpdate; + ShowRouters; + FilterUpdated := False; + end; + + if FUpdated or RUpdated then + begin + if ImmediateApplyOptions and not OptionsChanged then + ApplyOptions(True) + else + EnableOptionButtons; + ShowBalloon(Format(TransStr('364'), [ParseStr[0]])); + end; + end + else + ShowMsg(TransStr('254'), '', mtError); + finally + ini.Free; + end; +end; + +procedure TTcp.CopyCaptionToClipboard(Sender: TObject); +begin + if TMenuItem(Sender).Hint = '' then + Clipboard.AsText := TMenuItem(Sender).Caption + else + Clipboard.AsText := TMenuItem(Sender).Hint; +end; + +procedure TTcp.mnDetailsPopup(Sender: TObject); +var + ini: TMemIniFile; + SelectMenu: TMenuItem; + i, TimeStampIndex, TemplateNameIndex: Integer; + TimeStamp: Int64; + TemplateList: TStringList; + TemplateName, TimeStampStr: string; + Router: TRouterInfo; + Search, IsIPv6: Boolean; +begin + if lbExitIp.Tag = 1 then + SelectedNode := ExitNodeID + else + begin + SelectRowPopup(sgCircuitInfo, mnDetails); + SelectedNode := sgCircuitInfo.Cells[CIRC_INFO_ID, sgCircuitInfo.SelRow]; + end; + miDetailsCopyFingerprint.Caption := SelectedNode; + + Search := False; + IsIPv6 := False; + if RoutersDic.TryGetValue(SelectedNode, Router) then + begin + Search := True; + IsIPv6 := Router.IPv6 <> ''; + miDetailsCopyNickname.Caption := Router.Name; + miDetailsCopyIPv4.Caption := Router.IPv4; + miDetailsCopyIPv6.Caption := Router.IPv6; + UpdateBridgeCopyMenu(miDetailsCopyBridgeIPv4, SelectedNode, Router, False); + UpdateBridgeCopyMenu(miDetailsCopyBridgeIPv6, SelectedNode, Router, True); + end; + + miDetailsCopyNickname.Visible := Search; + miDetailsCopyIPv4.Visible := Search; + miDetailsCopyIPv6.Visible := IsIPv6; + miDetailsCopyBridgeIPv4.Visible := Search; + miDetailsCopyBridgeIPv6.Visible := IsIPv6; + + miDetailsUpdateIp.Enabled := ConnectState = 2; + miDetailsAddToNodesList.Enabled := Search and (ConnectState <> 1); + miDetailsSelectTemplate.Enabled := False; + + if miDetailsAddToNodesList.Enabled then + InsertNodesMenu(miDetailsAddToNodesList, SelectedNode); + + if ConnectState = 1 then + Exit; + + miDetailsSelectTemplate.Clear; + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + TemplateList := TStringList.Create; + try + ini.ReadSectionValues('Templates', TemplateList); + if TemplateList.Count > 0 then + begin + miDetailsSelectTemplate.Enabled := True; + for i := 0 to TemplateList.Count - 1 do + begin + TimeStampIndex := Pos('=', TemplateList[i]); + TemplateNameIndex := Pos(';', TemplateList[i]); + TimeStampStr := copy(TemplateList[i], 0, TimeStampIndex - 1); + if ValidInt(TimeStampStr, 0, MaxInt) then + TimeStamp := StrToInt(TimeStampStr) + else + begin + TimeStamp := DateTimeToUnix(Now); + ini.WriteString('Templates', IntToStr(TimeStamp), SeparateRight(TemplateList[i], '=')); + ini.DeleteKey('Templates', TimeStampStr); + ini.UpdateFile; + end; + TemplateName := copy(TemplateList[i], TimeStampIndex + 1, (TemplateNameIndex - TimeStampIndex) - 1); + SelectMenu := TMenuItem.Create(self); + SelectMenu.Caption := TemplateName; + SelectMenu.Tag := TimeStamp; + SelectMenu.Hint := 'ApplyOptions'; + SelectMenu.OnClick := Tcp.FilterLoadClick; + miDetailsSelectTemplate.Add(SelectMenu); + end; + end; + finally + TemplateList.Free; + end; + finally + ini.Free; + end; +end; + + +procedure TTcp.SetSortMenuData(aSg: TStringGrid); +var + SortMenu: TMenuItem; + Fail: Boolean; +begin + Fail := False; + if not (aSg.SortCol in [0..aSg.ColCount - 1]) then + begin + aSg.SortCol := 0; + Fail := True; + end; + if not aSg.SortType in [SORT_ASC..SORT_DESC] then + begin + aSg.SortType := SORT_DESC; + Fail := True; + end; + case aSg.Tag of + GRID_CIRCUITS: SortMenu := miCircuitsSort; + GRID_STREAMS: SortMenu := miStreamsSort; + GRID_STREAM_INFO: SortMenu := miStreamsInfoSort; + else + SortMenu := nil; + end; + if Assigned(SortMenu) then + begin + SortMenu.Items[aSg.SortCol].Checked := True; + case aSg.SortType of + SORT_ASC: SortMenu.ImageIndex := 9; + SORT_DESC: SortMenu.ImageIndex := 10; + end; + end; + if Fail then + SaveSortData; +end; + +procedure TTcp.mnCircuitsPopup(Sender: TObject); +begin + SetSortMenuData(sgCircuits); + SelectRowPopup(sgCircuits, mnCircuits); + MenuSelectPrepare(miCircSA, miCircUA); + + miCircuitsDestroy.Enabled := ConnectState = 2; + miCircuitsUpdateNow.Enabled := ConnectState = 2; + if IsEmptyRow(sgCircuits, sgCircuits.SelRow) or (ConnectState <> 2) then + begin + miDestroyCircuit.Enabled := False; + miDestroyStreams.Enabled := False; + end + else + begin + miDestroyCircuit.Enabled := sgCircuits.Cells[CIRC_STREAMS, sgCircuits.SelRow] <> EXCLUDE_CHAR; + miDestroyStreams.Enabled := ValidInt(sgCircuits.Cells[CIRC_STREAMS, sgCircuits.SelRow], 1, MaxInt); + end; + miDestroyExitCircuits.Enabled := ConnectState = 2; + miShowCircuitsTraffic.Enabled := ConnectState <> 1; + miShowStreamsTraffic.Enabled := ConnectState <> 1; + miCircuitsSortDL.Enabled := miShowCircuitsTraffic.Checked; + miCircuitsSortUL.Enabled := miShowCircuitsTraffic.Checked; +end; + +procedure TTcp.SelectRowPopup(aSg: TStringGrid; aPopup: TPopupMenu); +var + Origin: TPoint; +begin + aSg.SelRow := aSg.Row; + aSg.SelCol := aSg.Col; + Origin := aSg.ClientOrigin; + if ((Origin.X <> TPoint(aPopup.PopupPoint).X) and (Origin.Y <> TPoint(aPopup.PopupPoint).Y)) then + begin + if aSg.MovRow > 0 then + aSg.SelRow := aSg.MovRow; + if aSg.MovCol > -1 then + aSg.SelCol := aSg.MovCol; + end; + if aSg.SelRow < 1 then + aSg.SelRow := 0; + if aSg.SelRow >= aSg.RowCount then + aSg.SelRow := aSg.RowCount - 1; + if aSg.SelCol < 0 then + aSg.SelCol := 0; + if aSg.SelCol >= aSg.ColCount then + aSg.SelCol := aSg.ColCount - 1; + TUserGrid(aSg).MoveColRow(aSg.SelCol, aSg.SelRow, True, True); +end; + +procedure TTcp.mnFilterPopup(Sender: TObject); +var + ini: TMemIniFile; + DeleteMenu, LoadMenu: TMenuItem; + i, TimeStampIndex, TemplateNameIndex: Integer; + TimeStamp: Int64; + TemplateList: TStringList; + TemplateName, TimeStampStr: string; + State: Boolean; +begin + SelectRowPopup(sgFilter, mnFilter); + State := not IsEmptyGrid(sgFilter); + miStatRelays.Enabled := State; + miStatGuards.Enabled := State; + miStatExit.Enabled := State; + miClearFilterEntry.Enabled := lbFilterEntry.Tag > 0; + miClearFilterMiddle.Enabled := lbFilterMiddle.Tag > 0; + miClearFilterExit.Enabled := lbFilterExit.Tag > 0; + miClearFilterExclude.Enabled := lbFilterExclude.Tag > 0; + miClearFilterAll.Enabled := miClearFilterEntry.Enabled or miClearFilterMiddle.Enabled or miClearFilterExit.Enabled; + + MenuSelectPrepare(miTplSaveSA, miTplSaveUA); + MenuSelectPrepare(miTplLoadSA, miTplLoadUA); + + miLoadTemplate.Clear; + miDeleteTemplate.Clear; + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + TemplateList := TStringList.Create; + try + ini.ReadSectionValues('Templates', TemplateList); + if TemplateList.Count > 0 then + begin + miDeleteTemplate.Enabled := True; + miLoadTemplate.Enabled := True; + for i := 0 to TemplateList.Count - 1 do + begin + TimeStampIndex := Pos('=', TemplateList[i]); + TemplateNameIndex := Pos(';', TemplateList[i]); + TimeStampStr := copy(TemplateList[i], 0, TimeStampIndex - 1); + if ValidInt(TimeStampStr, 0, MaxInt) then + TimeStamp := StrToInt(TimeStampStr) + else + begin + TimeStamp := DateTimeToUnix(Now); + ini.WriteString('Templates', IntToStr(TimeStamp), SeparateRight(TemplateList[i], '=')); + ini.DeleteKey('Templates', TimeStampStr); + ini.UpdateFile; + end; + TemplateName := copy(TemplateList[i], TimeStampIndex + 1, (TemplateNameIndex - TimeStampIndex) - 1); + LoadMenu := TMenuItem.Create(self); + LoadMenu.Caption := TemplateName; + LoadMenu.Tag := TimeStamp; + LoadMenu.OnClick := Tcp.FilterLoadClick; + miLoadTemplate.Add(LoadMenu); + + DeleteMenu := TMenuItem.Create(self); + DeleteMenu.Caption := TemplateName; + if TemplateList.Count > 1 then + DeleteMenu.Tag := TimeStamp + else + DeleteMenu.Tag := 0; + DeleteMenu.OnClick := Tcp.FilterDeleteClick; + miDeleteTemplate.Add(DeleteMenu); + end; + DeleteMenu := TMenuItem.Create(self); + DeleteMenu.Caption := '-'; + miDeleteTemplate.Add(DeleteMenu); + + DeleteMenu := TMenuItem.Create(self); + DeleteMenu.Caption := TransStr('264'); + DeleteMenu.Tag := 0; + DeleteMenu.OnClick := Tcp.FilterDeleteClick; + miDeleteTemplate.Add(DeleteMenu); + end + else + begin + miDeleteTemplate.Enabled := False; + miLoadTemplate.Enabled := False; + end; + finally + TemplateList.Free; + end; + finally + ini.Free; + end; +end; + +procedure TTcp.mnHsPopup(Sender: TObject); +begin + if tsHs.Tag = 1 then + begin + SelectRowPopup(sgHs, mnHs); + if DirectoryExists(HsDir + sgHs.Cells[HS_NAME, sgHs.SelRow]) and (sgHs.Cells[HS_NAME, sgHs.SelRow] <> '') then + miHsOpenDir.Visible := True + else + miHsOpenDir.Visible := False; + + if FileExists(HsDir + sgHs.Cells[HS_NAME, sgHs.SelRow] + '\hostname') then + begin + miHsCopyOnion.Caption := Trim(FileGetString(HsDir + sgHs.Cells[HS_NAME, sgHs.SelRow] + '\hostname')); + miHsCopy.Visible := True; + end + else + miHsCopy.Visible := False; + + if IsEmptyGrid(sgHs) then + begin + miHsDelete.Enabled := False; + miHsClear.Enabled := False; + end + else + begin + miHsDelete.Enabled := True; + miHsClear.Enabled := True; + end; + SelectHs; + end; + + if tsHs.Tag = 2 then + begin + SelectRowPopup(sgHsPorts, mnHs); + miHsOpenDir.Visible := False; + miHsCopy.Visible := False; + if IsEmptyGrid(sgHsPorts) then + begin + miHsDelete.Enabled := False; + miHsClear.Enabled := False; + end + else + begin + miHsDelete.Enabled := True; + miHsClear.Enabled := True; + end; + SelectHsPorts; + end; +end; + +procedure TTcp.mnLogPopup(Sender: TObject); +var + State: Boolean; +begin + State := ConnectState <> 1; + miLogLevel.Enabled := State; + miSafeLogging.Enabled := State; + miOpenFileLog.Enabled := FileExists(TorLogFile); + miLogSeparate.Enabled := miWriteLogFile.Checked; + + EditMenuEnableCheck(miLogCopy, emCopy); + EditMenuEnableCheck(miLogSelectAll, emSelectAll); + EditMenuEnableCheck(miLogClear, emClear); + EditMenuEnableCheck(miLogFind, emFind); +end; + +procedure TTcp.UpdateBridgeCopyMenu(Menu: TMenuItem; RouterID: string; Router: TRouterInfo; UseIPv6: Boolean); +var + Data, BridgeStr, Transport, IpStr: string; + BridgeInfo: TBridgeInfo; +begin + if UseIPv6 then + IpStr := Router.IPv6 + else + IpStr := Router.IPv4; + Menu.Hint := ''; + Menu.Caption := ''; + Menu.Visible := IpStr <> ''; + if not Menu.Visible then + Exit; + Data := IpStr + ':' + IntToStr(Router.OrPort) + ' ' + RouterID; + + if BridgesDic.TryGetValue(RouterID, BridgeInfo) then + BridgeStr := Trim(BridgeInfo.Transport + ' ' + IpStr + ':' + IntToStr(BridgeInfo.Router.OrPort) + ' ' + RouterID + ' ' + BridgeInfo.Params) + else + BridgeStr := ''; + + if TryGetDataFromStr(BridgeStr, ltTransport, Transport) then + begin + Data := Transport + ' ' + Data; + if BridgesDic.ContainsKey(RouterID) then + Menu.Hint := BridgeStr + else + Menu.Hint := Data + Copy(BridgeStr, Pos(RouterID, BridgeStr) + Length(RouterID)); + Data := Data + '...'; + end; + Menu.Caption := Data; +end; + +procedure TTcp.mnRoutersPopup(Sender: TObject); +var + State, ClearState, ActionState, TypeState, NotStarting: Boolean; + + Router: TRouterInfo; + RouterID: string; +begin + SelectRowPopup(sgRouters, mnRouters); + NotStarting := ConnectState <> 1; + State := not IsEmptyRow(sgRouters, sgRouters.SelRow); + + miRtCopy.Visible := State; + miRtRelayInfo.Visible := State; + miRtAddToNodesList.Visible := State; + miRtAddToNodesList.Enabled := NotStarting; + miRtSelectAsBridge.Visible := State; + miRtSelectAsBridge.Enabled := NotStarting; + + miClearRouters.Enabled := NotStarting; + miClearRoutersEntry.Enabled := lbFavoritesEntry.Tag > 0; + miClearRoutersMiddle.Enabled := lbFavoritesMiddle.Tag > 0; + miClearRoutersExit.Enabled := lbFavoritesExit.Tag > 0; + miClearRoutersExclude.Enabled := lbExcludeNodes.Tag > 0; + miClearRoutersFavorites.Enabled := lbFavoritesTotal.Tag > 0; + + ClearState := ((lbFavoritesTotal.Tag > 0) or (lbExcludeNodes.Tag > 0)) and (RoutersDic.Count > 0) and (InfoStage = 0) and not (Assigned(Consensus) or Assigned(Descriptors)); + miClearRoutersIncorrect.Enabled := ClearState; + miClearRoutersAbsent.Enabled := ClearState; + + ActionState := miEnableConvertNodesOnIncorrectClear.Checked or miEnableConvertNodesOnAddToNodesList.Checked or miEnableConvertNodesOnRemoveFromNodesList.Checked; + TypeState := miConvertIpNodes.Checked or miConvertCidrNodes.Checked or miConvertCountryNodes.Checked; + + miEnableConvertNodesOnIncorrectClear.Enabled := TypeState; + miEnableConvertNodesOnAddToNodesList.Enabled := TypeState; + miEnableConvertNodesOnRemoveFromNodesList.Enabled := TypeState; + miConvertIpNodes.Enabled := ActionState; + miConvertCidrNodes.Enabled := ActionState; + miConvertCountryNodes.Enabled := ActionState; + miIgnoreConvertExcludeNodes.Enabled := ActionState and TypeState; + miAvoidAddingIncorrectNodes.Enabled := ActionState and TypeState; + + MenuSelectPrepare(miRtFilterSA, miRtFilterUA); + + if State then + begin + RouterID := sgRouters.Cells[ROUTER_ID, sgRouters.SelRow]; + if RoutersDic.TryGetValue(RouterID, Router) then + begin + miRtCopyNickname.Caption := Router.Name; + miRtCopyFingerprint.Caption := RouterID; + miRtCopyIPv4.Caption := Router.IPv4; + miRtCopyIPv6.Caption := Router.IPv6; + miRtCopyIPv6.Visible := Router.IPv6 <> ''; + UpdateBridgeCopyMenu(miRtCopyBridgeIPv4, RouterID, Router, False); + UpdateBridgeCopyMenu(miRtCopyBridgeIPv6, RouterID, Router, True); + miRtSelectAsBridgeIPv4.Caption := miRtCopyBridgeIPv4.Caption; + miRtSelectAsBridgeIPv4.Hint := miRtCopyBridgeIPv4.Hint; + miRtSelectAsBridgeIPv4.Visible := miRtCopyBridgeIPv4.Caption <> ''; + miRtSelectAsBridgeIPv6.Caption := miRtCopyBridgeIPv6.Caption; + miRtSelectAsBridgeIPv6.Hint := miRtCopyBridgeIPv6.Hint; + miRtSelectAsBridgeIPv6.Visible := miRtCopyBridgeIPv6.Caption <> ''; + + miRtSelectAsBridge.Visible := (cbxServerMode.ItemIndex = 0) and + (sgRouters.Cells[ROUTER_EXCLUDE_NODES, sgRouters.SelRow] <> EXCLUDE_CHAR) and + ((((rfBridge in Router.Flags) or (rfGuard in Router.Flags)) and ((Router.Params and ROUTER_ALIVE <> 0)) or (AliveNodesCount = 0)) or (not miDisableSelectionUnSuitableAsBridge.Checked)); + miRtDisableBridges.Visible := cbUseBridges.Checked; + end; + InsertNodesMenu(miRtAddToNodesList, RouterID, False); + end; +end; + +function TTcp.GetTrackHostDomains(Host: string; OnlyExists: Boolean): string; +var + DotIndex: Integer; +begin + Result := ''; + Host := ExtractDomain(Host, True); + if ValidHost(Host, True, True) then + begin + DotIndex := 1; + while DotIndex > 0 do + begin + if (OnlyExists and TrackHostDic.ContainsKey(Host)) or not OnlyExists then + Result := Result + ';' + Host; + DotIndex := Pos('.', Host, 2); + if DotIndex <> -1 then + Host := Copy(Host, DotIndex); + end; + if OnlyExists and TrackHostDic.ContainsKey('.') then + Result := Result + ';' + TransStr('353'); + Delete(Result, 1, 1); + end; +end; + +procedure TTcp.mnShowNodesChange(Sender: TObject; Source: TMenuItem; + Rebuild: Boolean); +begin + mnShowNodes.Items.Tag := mnShowNodes.Tag; + ShowNodesChanged := True; +end; + +procedure TTcp.mnShowNodesPopup(Sender: TObject); +begin + MenuSelectPrepare(nil, miShowNodesUA, True); +end; + +procedure TTcp.mnStreamsInfoPopup(Sender: TObject); +var + Flag: Boolean; +begin + SelectRowPopup(sgStreamsInfo, mnStreamsInfo); + SetSortMenuData(sgStreamsInfo); + Flag := (ConnectState = 2) and not IsEmptyRow(sgStreamsInfo, sgStreamsInfo.SelRow); + miStreamsInfoDestroyStream.Enabled := Flag and (sgStreams.Cells[STREAMS_COUNT, sgStreams.SelRow] <> EXCLUDE_CHAR); + miStreamsInfoSortDL.Enabled := miShowStreamsTraffic.Checked; + miStreamsInfoSortUL.Enabled := miShowStreamsTraffic.Checked; +end; + +procedure TTcp.mnStreamsPopup(Sender: TObject); +var + i: Integer; + Flag, Search: Boolean; + ParseStr: ArrOfStr; + HostMenu: TMenuItem; + Domains: string; +begin + SetSortMenuData(sgStreams); + SelectRowPopup(sgStreams, mnStreams); + Flag := IsEmptyRow(sgStreams, sgStreams.SelRow); + if Flag or (ConnectState <> 2) or (sgStreams.Cells[STREAMS_COUNT, sgStreams.SelRow] = EXCLUDE_CHAR) then + miStreamsDestroyStream.Enabled := False + else + miStreamsDestroyStream.Enabled := True; + miStreamsOpenInBrowser.Enabled := not Flag; + miStreamsBindToExitNode.Enabled := False; + miStreamsBindToExitNode.Clear; + miStreamsSortDL.Enabled := miShowStreamsTraffic.Checked; + miStreamsSortUL.Enabled := miShowStreamsTraffic.Checked; + + miStreamsBindToExitNode.Caption := TransStr('351'); + miStreamsBindToExitNode.ImageIndex := 21; + + if not Flag then + begin + Search := sgStreams.Cells[STREAMS_TRACK, sgStreams.SelRow] <> NONE_CHAR; + if Search then + begin + miStreamsBindToExitNode.Caption := TransStr('352'); + miStreamsBindToExitNode.ImageIndex := 22; + end; + + Domains := GetTrackHostDomains(sgStreams.Cells[STREAMS_TARGET, sgStreams.SelRow], Search); + if Domains <> '' then + begin + ParseStr := Explode(';', Domains); + for i := 0 to Length(ParseStr) - 1 do + begin + HostMenu := TMenuItem.Create(self); + HostMenu.Caption := ParseStr[i]; + HostMenu.Tag := Integer(Search); + HostMenu.OnClick := Tcp.BindToExitNodeClick; + miStreamsBindToExitNode.Add(HostMenu); + end; + miStreamsBindToExitNode.Enabled := True; + end; + end; +end; + +procedure TTcp.mnTransportsPopup(Sender: TObject); +begin + SelectRowPopup(sgTransports, mnTransports); + miTransportsOpenDir.Enabled := DirectoryExists(TransportsDir); + miTransportsReset.Enabled := FileExists(DefaultsFile); + if IsEmptyGrid(sgTransports) then + begin + miTransportsDelete.Enabled := False; + miTransportsClear.Enabled := False; + end + else + begin + miTransportsDelete.Enabled := True; + miTransportsClear.Enabled := True; + end; +end; + +procedure TTcp.mnChangeCircuitPopup(Sender: TObject); +var + State, StartScanState, ClearNetworkState, ClearBridgesState, ScanState: Boolean; + NotStarting: Boolean; +begin + NotStarting := ConnectState <> 1; + State := (InfoStage = 0) and not (Assigned(Consensus) or Assigned(Descriptors)); + ScanState := State and NotStarting and not tmScanner.Enabled; + StartScanState := ScanState and + ((cbEnablePingMeasure.Checked and miManualPingMeasure.Checked) or + (miManualDetectAliveNodes.Checked and cbEnableDetectAliveNodes.Checked)); + ClearNetworkState := ScanState and FileExists(NetworkCacheFile); + ClearBridgesState := ScanState and (ConnectState = 0) and FileExists(BridgesCacheFile); + + miCacheOperations.Enabled := NotStarting; + miUpdateIpToCountryCache.Enabled := ClearNetworkState and GeoIpExists and (ConnectState = 2); + miClearDNSCache.Enabled := ConnectState = 2; + miClearServerCache.Enabled := (ConnectState = 0) and + (FileExists(UserDir + 'cached-consensus') or FileExists(UserDir + 'cached-consensus.tmp')); + miClearPingCache.Enabled := ClearNetworkState; + miClearAliveCache.Enabled := ClearNetworkState; + miClearUnusedNetworkCache.Enabled := ClearNetworkState; + miClearBridgesCacheAll.Enabled := ClearBridgesState; + miClearBridgeCacheUnnecessary.Enabled := ClearBridgesState; + + miStartScan.Enabled := NotStarting; + miScanNewNodes.Enabled := StartScanState; + miScanNonResponsed.Enabled := StartScanState; + miScanCachedBridges.Enabled := StartScanState; + miScanAll.Enabled := StartScanState; + miManualPingMeasure.Enabled := cbEnablePingMeasure.Checked and ScanState; + miManualDetectAliveNodes.Enabled := cbEnableDetectAliveNodes.Checked and ScanState; + miStopScan.Enabled := NotStarting and tmScanner.Enabled; + + miResetGuards.Enabled := NotStarting; + miResetTotalsCounter.Enabled := NotStarting and (TotalDL <> 0) and (TotalUL <> 0); + miResetScannerSchedule.Enabled := ScanState; +end; + +procedure TTcp.EditMenuPopup(Sender: TObject); +var + IsBridgeEdit, IsUserBridges, State: Boolean; +begin + IsBridgeEdit := Screen.ActiveControl = meBridges; + IsUserBridges := IsBridgeEdit and IsBridgeEdit and (cbxBridgesType.ItemIndex = BRIDGES_TYPE_USER) and (meBridges.Lines.Count > 0); + State := IsUserBridges and not tmScanner.Enabled; + + miGetBridges.Visible := IsBridgeEdit; + miClear.Visible := not IsUserBridges; + miClearBridges.Visible := IsUserBridges; + + miGetBridgesEmail.Enabled := IsBridgeEdit and RegistryFileExists(HKEY_CLASSES_ROOT, 'mailto\shell\open\command', ''); + miGetBridgesTelegram.Enabled := IsBridgeEdit and (RegistryFileExists(HKEY_CLASSES_ROOT, 'tg\shell\open\command', '') or miPreferWebTelegram.Checked); + + miClearBridgesNotAlive.Enabled := State and cbEnableDetectAliveNodes.Checked; + miClearBridgesCached.Enabled := State; + miClearBridgesNonCached.Enabled := State; + + EditMenuEnableCheck(miCopy, emCopy); + EditMenuEnableCheck(miCut, emCut); + EditMenuEnableCheck(miPaste, emPaste); + EditMenuEnableCheck(miSelectAll, emSelectAll); + if IsUserBridges then + miClearBridgesAll.Enabled := State + else + EditMenuEnableCheck(miClear, emClear); + EditMenuEnableCheck(miDelete, emDelete); + EditMenuEnableCheck(miFind, emFind); +end; + +procedure TTcp.ResetFocus; +begin + if FormSize = 0 then + Exit; + if Closing then + Exit; + case LastPlace of + LP_OPTIONS: if pcOptions.CanFocus then pcOptions.SetFocus; + LP_LOG: if meLog.CanFocus then meLog.SetFocus; + LP_STATUS: if paStatus.CanFocus then paStatus.SetFocus; + LP_CIRCUITS: if paCircuits.CanFocus then paCircuits.SetFocus; + LP_ROUTERS: if paRouters.CanFocus then paRouters.SetFocus; + end; +end; + +procedure TTcp.lbServerInfoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); +begin + if TLabel(Sender).Caption <> TransStr('260') then + TLabel(Sender).Cursor := crHandPoint + else + TLabel(Sender).Cursor := crDefault; + if (cbxServerMode.ItemIndex > 0) and (TLabel(Sender).Cursor = crHandPoint) then + mnServerInfo.AutoPopup := True + else + mnServerInfo.AutoPopup := False; +end; + +procedure TTcp.lbStatusProxyAddrClick(Sender: TObject); +begin + Clipboard.AsText := lbStatusProxyAddr.Caption; +end; + +procedure TTcp.lbUserDirClick(Sender: TObject); +begin + ShellOpen(GetFullFileName(UserDir)); +end; + +procedure TTcp.paButtonsDblClick(Sender: TObject); +begin + if FormSize = 1 then + begin + CheckOptionsChanged; + DecreaseFormSize; + end + else + begin + case LastPlace of + LP_OPTIONS: sbShowOptions.Click; + LP_LOG: sbShowLog.Click; + LP_STATUS: sbShowStatus.Click; + LP_CIRCUITS: sbShowCircuits.Click; + LP_ROUTERS: sbShowRouters.Click; + end; + end; +end; + +procedure TTcp.paRoutersClick(Sender: TObject); +begin + ResetFocus; +end; + +procedure TTcp.pbTrafficPaint(Sender: TObject); +const + GRID_XN = 6; + GRID_YN = 4; +var + i, IntervalSize, Threshold, StepSpeed: Integer; + MinIndex, MaxIndex, MinValue, MaxValue: Integer; + ZeroX, ZeroY, CurrX, CurrY, LastX, LastY: Integer; + AText: string; + ARect: TRect; + AHeight, AWidth: Integer; + APen: TGPPen; + Plot : TGPGraphics; + Data, ScaledData: ArrOfPoint; + StepX, StepY: Real; + + procedure DrawData(AColor: TColor; IsDL: Boolean); + var + i, j, DataLength: Integer; + begin + j := 0; + for i := MinIndex to MaxIndex do + begin + Data[j].X := j; + if IsDL then + Data[j].Y := SpeedData[i].DL + else + Data[j].Y := SpeedData[i].UL; + Inc(j); + end; + ScaledData := SampleDown(Data, Threshold); + DataLength := Length(ScaledData) - 1; + + APen.SetColor(ColorRefToARGB(AColor)); + LastX := ZeroX + AWidth; + LastY := AHeight - Round((ScaledData[DataLength].Y - MinValue) / StepY); + for i := DataLength - 1 downto 1 do + begin + CurrX := Round(LastX - StepX); + CurrY := AHeight - Round((ScaledData[i].Y - MinValue) / StepY); + if ScaledData[i].Y <> -1 then + Plot.DrawLine(APen, LastX, LastY, CurrX, CurrY); + LastX := CurrX; + LastY := CurrY; + end; + end; + +begin + IntervalSize := PlotIntervals[CurrentTrafficPeriod]; + MaxIndex := MAX_SPEED_DATA_LENGTH - 1; + MinIndex := MaxIndex - IntervalSize + 1; + + MinValue := 0; + MaxValue := 0; + + for i := MinIndex to MaxIndex do + begin + if miSelectGraphDL.Checked then + begin + if SpeedData[i].DL > -1 then + begin + if SpeedData[i].DL > MaxValue then + MaxValue := SpeedData[i].DL; + if SpeedData[i].DL < MinValue then + MinValue := SpeedData[i].DL; + end; + end; + if miSelectGraphUL.Checked then + begin + if SpeedData[i].UL > -1 then + begin + if SpeedData[i].UL > MaxValue then + MaxValue := SpeedData[i].UL; + if SpeedData[i].UL < MinValue then + MinValue := SpeedData[i].UL; + end; + end; + end; + + ZeroX := 55; + ZeroY := 0; + + AWidth := pbTraffic.Width - ZeroX - 8; + AHeight := pbTraffic.Height - ZeroY - 8; + + StepY := Round(AHeight / GRID_YN); + StepX := Round(AWidth / GRID_XN); + StepSpeed := Round(MaxValue / GRID_YN); + + with pbTraffic.Canvas do + begin + Pen.Color := clSilver; + Pen.Style := psDot; + Pen.Width := 1; + Font.Color := StyleServices.GetStyleFontColor(sfWindowTextNormal); + + CurrX := ZeroX; + for i := 1 to GRID_XN + 1 do + begin + MoveTo(CurrX, ZeroY); + LineTo(CurrX, AHeight); + CurrX := Floor(CurrX + StepX); + end; + + CurrY := ZeroY; + for i := GRID_YN + 1 downto 1 do + begin + MoveTo(ZeroX, CurrY); + LineTo(AWidth + ZeroX, CurrY); + if i <> 1 then + begin + ARect := ClipRect; + ARect.Right := ZeroX - 3; + ARect.Top := CurrY; + AText := BytesFormat(StepSpeed * (i - 1)); + TextRect(ARect, AText, [tfRight, tfSingleLine]); + end; + CurrY := Floor(CurrY + StepY); + end; + end; + + case CurrentTrafficPeriod of + 0: Threshold := IntervalSize; + 1: Threshold := Floor(AWidth / 2); + else + Threshold := AWidth; + end; + + Dec(AHeight, 2); + StepX := AWidth / Threshold; + StepY := (MaxValue - MinValue) / AHeight; + + if StepY = 0 then + Exit; + + Plot := TGPGraphics.Create(pbTraffic.Canvas.Handle); + APen := TGPPen.Create(ColorRefToARGB(clDefault), 1); + try + Plot.SetSmoothingMode(SmoothingModeAntiAlias); + SetLength(Data, IntervalSize); + + if miSelectGraphUL.Checked then + DrawData($00FF9932, False); + + if miSelectGraphDL.Checked then + DrawData($003FC486, True); + finally + Plot.Free; + APen.Free; + end; +end; + +procedure TTcp.pcOptionsChange(Sender: TObject); +begin + SetConfigInteger('Main', 'OptionsPage', pcOptions.TabIndex); +end; + +function TTcp.CheckSimilarPorts: Boolean; +begin + if udControlPort.Position <> udSOCKSPort.Position then + Result := False + else + begin + Result := True; + udSOCKSPort.Position := udControlPort.Position - 1; + end; +end; + +procedure TTcp.SetVisible(vOptions, vLog, vStatus, vCircuits, vRouters, vButtons: Boolean); +begin + paRouters.Visible := vRouters; + paCircuits.Visible := vCircuits; + paStatus.Visible := vStatus; + paLog.Visible := vLog; + pcOptions.Visible := vOptions; + btnApplyOptions.Visible := vButtons; + btnCancelOptions.Visible := vButtons; +end; + +procedure TTcp.SetButtonsProp(Btn: TSpeedButton; LeftSmall, LeftBig: Integer); +begin + if FormSize = 0 then + begin + Btn.Hint := Btn.Caption; + Btn.Caption := ''; + Btn.ShowHint := True; + Btn.Margin := -1; + Btn.Width := Round(41 * Scale); + Btn.Left := Round(LeftSmall * Scale); + end + else + begin + Btn.Caption := Btn.Hint; + Btn.ShowHint := False; + Btn.Hint := ''; + Btn.Margin := 8; + Btn.Width := Round(111 * Scale); + Btn.Left := Round(LeftBig * Scale); + end; +end; + +procedure TTcp.ChangeButtonsCaption; +begin + if FormSize = 0 then + begin + btnChangeCircuit.Width := Round(111 * Scale); + btnSwitchTor.Width := Round(111 * Scale); + end + else + begin + btnChangeCircuit.Width := Round(111 * Scale); + btnSwitchTor.Width := Round(111 * Scale); + end; + SetButtonsProp(sbShowOptions, 116, 116); + SetButtonsProp(sbShowLog, 159, 229); + SetButtonsProp(sbShowStatus, 202, 342); + SetButtonsProp(sbShowCircuits, 245, 455); + SetButtonsProp(sbShowRouters, 288, 568); + CheckLabelEndEllipsis(lbExitCountry, 150, epEndEllipsis, True, False); +end; + +procedure TTcp.UpdateFormSize; +var + H, W: Integer; +begin + if FormSize = 0 then + begin + H := Round(91 * Scale); + W := Round(332 * Scale); + if (ClientHeight = H) and (ClientWidth = W) then + Exit; + Tcp.ClientHeight := H; + Tcp.ClientWidth := W; + end + else + begin + H := Round(531 * Scale); + W := Round(728 * Scale); + if (ClientHeight = H) and (ClientWidth = W) then + Exit; + Tcp.ClientHeight := H; + Tcp.ClientWidth := W; + end; +end; + +procedure TTcp.DecreaseFormSize(AutoRestore: Boolean = True); +begin + FindDialog.CloseDialog; + if FormSize = 1 then + begin + FormSize := 0; + sbShowOptions.AllowAllUp := True; + sbShowOptions.Down := False; + sbShowLog.Down := False; + sbShowStatus.Down := False; + sbShowCircuits.Down := False; + sbShowRouters.Down := False; + sbShowOptions.AllowAllUp := False; + UpdateFormSize; + ChangeButtonsCaption; + Tcp.Left := DecFormPos.X; + Tcp.Top := DecFormPos.Y; + if not FirstLoad then + SetDesktopPosition(Tcp.Left, Tcp.Top, GetCheckBorders, True); + end; +end; + +procedure TTcp.IncreaseFormSize; +begin + SetDownState; + if FormSize = 0 then + begin + FormSize := 1; + paButtons.Visible := False; + SetVisible(False, False, False, False, False, False); + UpdateFormSize; + ChangeButtonsCaption; + if cbRememberEnlargedPosition.Checked then + begin + Tcp.Left := IncFormPos.X; + Tcp.Top := IncFormPos.Y; + end + else + begin + Tcp.Left := Round((Screen.Width - Width) / 2); + Tcp.Top := Round((Screen.Height - Height) / 2); + end; + end; + case LastPlace of + LP_OPTIONS: SetVisible(True, False, False, False, False, True); + LP_LOG: SetVisible(False, True, False, False, False, False); + LP_STATUS: SetVisible(False, False, True, False, False, False); + LP_CIRCUITS: SetVisible(False, False, False, True, False, False); + LP_ROUTERS: SetVisible(False, False, False, False, True, True); + end; + paButtons.Visible := True; + SetConfigInteger('Main', 'LastPlace', LastPlace); +end; + +procedure TTcp.MainButtonssMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); +begin + if ssLeft in Shift then + TButton(Sender).Perform(BM_SETSTATE, 1, 0); +end; + +procedure TTcp.MetricsInfo(Sender: TObject); +var + cc: string; +begin + if sgFilter.Cells[FILTER_ID, sgFilter.SelRow] <> '??' then + cc := AnsiLowerCase(sgFilter.Cells[FILTER_ID, sgFilter.SelRow]) + else + cc := 'xz'; + OpenMetricsUrl('#search', 'country:' + cc + TMenuItem(Sender).Hint); +end; + +procedure TTcp.miStatAggregateClick(Sender: TObject); +begin + OpenMetricsUrl('#aggregate', 'cc'); +end; + +procedure TTcp.miStopScanClick(Sender: TObject); +begin + if tmScanner.Enabled then + StopScan := True; +end; + +procedure TTcp.SaveTrackHostExits(ini: TMemIniFile; UseDic: Boolean = False); +var + TrackHostExits: string; + ls: TStringList; + Item: TPair; + i: Integer; +begin + if UseDic then + begin + ls := TStringList.Create;; + try + for Item in TrackHostDic do + ls.Append(Item.Key); + ls.CustomSort(CompTextAsc); + TrackHostExits := ''; + for i := 0 to ls.Count - 1 do + TrackHostExits := TrackHostExits + ',' + ls[i]; + Delete(TrackHostExits, 1, 1); + meTrackHostExits.Text := ls.Text; + finally + ls.Free; + end; + end + else + begin + TrackHostExits := MemoToLine(meTrackHostExits, ltHost, True); + TrackHostDic.Clear; + if TrackHostExits <> '' then + for i := 0 to meTrackHostExits.Lines.Count - 1 do + TrackHostDic.AddOrSetValue(meTrackHostExits.Lines[i], 0); + end; + if cbUseTrackHostExits.Checked and (TrackHostExits <> '') then + begin + SetTorConfig('TrackHostExits', TrackHostExits); + SetTorConfig('TrackHostExitsExpire', IntToStr(udTrackHostExitsExpire.Position)); + end + else + begin + cbUseTrackHostExits.Checked := False; + DeleteTorConfig('TrackHostExits'); + DeleteTorConfig('TrackHostExitsExpire'); + end; + ini.WriteBool('Lists', 'UseTrackHostExits', cbUseTrackHostExits.Checked); + ini.WriteString('Lists', 'TrackHostExits', TrackHostExits); + ini.WriteInteger('Lists', 'TrackHostExitsExpire', udTrackHostExitsExpire.Position); + if UseDic and (ConnectState = 2) then + begin + if cbUseTrackHostExits.Checked then + SendCommand('SETCONF TrackHostExits=' + TrackHostExits) + else + SendCommand('SETCONF TrackHostExits='); + end; +end; + +procedure TTcp.SaveServerOptions(ini: TMemIniFile); +var + ExitPolicy, MyFamily, Address: string; + ParseStr: ArrOfStr; + i: Integer; +begin + DeleteTorConfig('Nickname'); + DeleteTorConfig('ContactInfo'); + DeleteTorConfig('Address', [cfMultiLine]); + DeleteTorConfig('RelayBandwidthRate'); + DeleteTorConfig('RelayBandwidthBurst'); + DeleteTorConfig('MaxAdvertisedBandwidth'); + DeleteTorConfig('MaxMemInQueues'); + DeleteTorConfig('NumCPUs'); + DeleteTorConfig('PublishServerDescriptor'); + DeleteTorConfig('DirReqStatistics'); + DeleteTorConfig('HiddenServiceStatistics'); + DeleteTorConfig('AssumeReachable'); + DeleteTorConfig('DirCache'); + DeleteTorConfig('ORPort'); + DeleteTorConfig('DirPort'); + DeleteTorConfig('BridgeRelay'); + DeleteTorConfig('BridgeDistribution'); + DeleteTorConfig('ExitRelay'); + DeleteTorConfig('ExitPolicy', [cfMultiLine]); + DeleteTorConfig('IPv6Exit'); + DeleteTorConfig('ReducedExitPolicy'); + DeleteTorConfig('MyFamily'); + + MyFamily := MemoToLine(meMyFamily, ltHash, True); + ExitPolicy := MemoToLine(meExitPolicy, ltPolicy); + if ExitPolicy = '' then + begin + if cbxExitPolicyType.ItemIndex <> 1 then + cbxExitPolicyType.ItemIndex := 0; + meExitPolicy.Text := StringReplace(DEFAULT_CUSTOM_EXIT_POLICY, ',', BR, [rfReplaceAll]); + meExitPolicy.Enabled := False; + end; + if cbxServerMode.ItemIndex > 0 then + begin + SetTorConfig('Nickname', edNickname.Text); + edContactInfo.Text := Trim(edContactInfo.Text); + SetTorConfig('ContactInfo', edContactInfo.Text); + + SetServerPort(udORPort); + if cbUseDirPort.Checked then + SetServerPort(udDirPort); + + ParseStr := Explode(',', RemoveBrackets(edAddress.Text, True)); + Address := ''; + for i := 0 to Length(ParseStr) - 1 do + begin + ParseStr[i] := ExtractDomain(Trim(ParseStr[i])); + if ValidHost(ParseStr[i]) then + begin + if cbUseAddress.Checked then + TorConfig.Append('Address ' + FormatHost(ParseStr[i])); + Address := Address + ',' + ParseStr[i]; + end; + end; + Delete(Address, 1, 1); + edAddress.Text := Address; + if Address = '' then + cbUseAddress.Checked := False; + + if cbUseRelayBandwidth.Checked then + begin + SetTorConfig('RelayBandwidthRate', IntToStr(udRelayBandwidthRate.Position) + ' kb'); + SetTorConfig('RelayBandwidthBurst', IntToStr(udRelayBandwidthBurst.Position) + ' kb'); + SetTorConfig('MaxAdvertisedBandwidth', IntToStr(udMaxAdvertisedBandwidth.Position) + ' kb'); + end; + if cbUseMaxMemInQueues.Checked then + SetTorConfig('MaxMemInQueues', IntToStr(udMaxMemInQueues.Position) + ' mb'); + if cbUseNumCPUs.Checked then + SetTorConfig('NumCPUs', IntToStr(udNumCPUs.Position)); + if cbxServerMode.ItemIndex = 2 then + begin + if cbListenIPv6.Checked and cbIPv6Exit.Checked then + SetTorConfig('IPv6Exit', '1') + else + SetTorConfig('ExitRelay', '1'); + case cbxExitPolicyType.ItemIndex of + 1: SetTorConfig('ReducedExitPolicy', '1'); + 2: SetTorConfig('ExitPolicy', ExitPolicy); + end; + end; + if cbxServerMode.ItemIndex = 3 then + begin + SetTorConfig('BridgeRelay', '1'); + SetTorConfig('BridgeDistribution', BridgeDistributions[cbxBridgeDistribution.ItemIndex]); + + end; + if cbxServerMode.ItemIndex in [1, 3] then + SetTorConfig('ExitPolicy', 'reject *:*'); + + if MyFamily <> '' then + begin + if cbUseMyFamily.Checked and (cbxServerMode.ItemIndex <> 3) then + SetTorConfig('MyFamily', MyFamily) + end + else + begin + cbUseMyFamily.Checked := False; + MyFamilyEnable(False); + end; + + SetTorConfig('PublishServerDescriptor', IntToStr(Integer(cbPublishServerDescriptor.Checked))); + SetTorConfig('DirReqStatistics', IntToStr(Integer(cbDirReqStatistics.Checked))); + SetTorConfig('HiddenServiceStatistics', IntToStr(Integer(cbHiddenServiceStatistics.Checked))); + SetTorConfig('DirCache', IntToStr(Integer(cbDirCache.Checked))); + SetTorConfig('AssumeReachable', IntToStr(Integer(cbAssumeReachable.Checked))); + end; + + ini.WriteInteger('Server', 'ServerMode', cbxServerMode.ItemIndex); + ini.WriteString('Server', 'Nickname', edNickname.Text); + ini.WriteString('Server', 'ContactInfo', edContactInfo.Text); + ini.WriteString('Server', 'Address', FormatHost(edAddress.Text)); + ini.WriteInteger('Server', 'ORPort', udORPort.Position); + ini.WriteInteger('Server', 'DirPort', udDirPort.Position); + ini.WriteInteger('Server', 'TransportPort', udTransportPort.Position); + ini.WriteInteger('Server', 'RelayBandwidthRate', udRelayBandwidthRate.Position); + ini.WriteInteger('Server', 'RelayBandwidthBurst', udRelayBandwidthBurst.Position); + ini.WriteInteger('Server', 'MaxAdvertisedBandwidth', udMaxAdvertisedBandwidth.Position); + ini.WriteInteger('Server', 'MaxMemInQueues', udMaxMemInQueues.Position); + ini.WriteInteger('Server', 'NumCPUs', udNumCPUs.Position); + ini.WriteInteger('Server', 'ExitPolicyType', cbxExitPolicyType.ItemIndex); + ini.WriteInteger('Server', 'BridgeDistribution', cbxBridgeDistribution.ItemIndex); + ini.WriteString('Server', 'CustomExitPolicy', ExitPolicy); + ini.WriteBool('Server', 'UseRelayBandwidth', cbUseRelayBandwidth.Checked); + ini.WriteBool('Server', 'UseNumCPUs', cbUseNumCPUs.Checked); + ini.WriteBool('Server', 'UseMaxMemInQueues', cbUseMaxMemInQueues.Checked); + ini.WriteBool('Server', 'UseAddress', cbUseAddress.Checked); + ini.WriteBool('Server', 'UseDirPort', cbUseDirPort.Checked); + ini.WriteBool('Server', 'UseUPnP', cbUseUPnP.Checked); + ini.WriteBool('Server', 'AssumeReachable', cbAssumeReachable.Checked); + ini.WriteBool('Server', 'DirCache', cbDirCache.Checked); + ini.WriteBool('Server', 'DirReqStatistics', cbDirReqStatistics.Checked); + ini.WriteBool('Server', 'IPv6Exit', cbIPv6Exit.Checked); + ini.WriteBool('Server', 'ListenIPv6', cbListenIPv6.Checked); + ini.WriteBool('Server', 'HiddenServiceStatistics', cbHiddenServiceStatistics.Checked); + ini.WriteBool('Server', 'PublishServerDescriptor', cbPublishServerDescriptor.Checked); + ini.WriteBool('Server', 'UseMyFamily', cbUseMyFamily.Checked); + ini.WriteString('Server', 'MyFamily', MyFamily); +end; + +procedure TTcp.BindToExitNodeClick(Sender: TObject); +var + ini: TMemIniFile; + Host: string; +begin + Host := TMenuItem(Sender).Caption; + if Host = TransStr('353') then + Host := '.'; + OptionsLocked := True; + if TMenuItem(Sender).Tag = 0 then + begin + if TrackHostDic.Count = 0 then + cbUseTrackHostExits.Checked := True; + TrackHostDic.AddOrSetValue(Host, 0) + end + else + TrackHostDic.Remove(Host); + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + SaveTrackHostExits(ini, True); + finally + ini.UpdateFile; + ini.Free; + end; + OptionsLocked := False; + SaveTorConfig; + ShowStreams(sgCircuits.Cells[CIRC_ID, sgCircuits.Row]); +end; + +procedure TTcp.miStreamsDestroyStreamClick(Sender: TObject); +begin + CloseStreams(sgCircuits.Cells[CIRC_ID, sgCircuits.SelRow], True, sgStreams.Cells[STREAMS_TARGET, sgStreams.SelRow]); +end; + +procedure TTcp.miStreamsInfoDestroyStreamClick(Sender: TObject); +begin + CloseStream(sgStreamsInfo.Cells[STREAMS_INFO_ID, sgStreamsInfo.SelRow]); +end; + +procedure TTcp.miStreamsOpenInBrowserClick(Sender: TObject); +begin + ShellOpen(sgStreams.Cells[STREAMS_TARGET, sgStreams.SelRow]); +end; + +procedure TTcp.ScanStart(ScanType: TScanType; ScanPurpose: TScanPurpose); +begin + TotalScans := 0; + CurrentScans := 0; + CurrentScanType := ScanType; + Scanner := TScanThread.Create(True); + Scanner.sScanType := ScanType; + Scanner.sScanPurpose := ScanPurpose; + Scanner.sMaxPortAttempts := udScanPortAttempts.Position; + Scanner.sMaxPingAttempts := udScanPingAttempts.Position; + Scanner.sAttemptsDelay := udDelayBetweenAttempts.Position; + Scanner.sMaxThreads := udScanMaxThread.Position; + Scanner.sPingTimeout := udScanPingTimeout.Position; + Scanner.sPortTimeout := udScanPortTimeout.Position; + Scanner.sScanPortionTimeout := udScanPortionTimeout.Position; + Scanner.sScanPortionSize := udScanPortionSize.Position; + Scanner.FreeOnTerminate := True; + Scanner.Priority := tpNormal; + Scanner.OnTerminate := ScanThreadTerminate; + Scanner.Start; +end; + +procedure TTcp.ScanNetwork(ScanType: TScanType; ScanPurpose: TScanPurpose); +var + CurrentDate: Int64; +begin + if (ScanType = stNone) or (ScanPurpose = spNone) then + Exit; + if cbEnablePingMeasure.Checked or cbEnableDetectAliveNodes.Checked or (ScanPurpose = spUserBridges) then + begin + if not tmScanner.Enabled then + begin + CurrentDate := DateTimeToUnix(Now); + CurrentScanPurpose := ScanPurpose; + ScanStage := 1; + if ScanType = stBoth then + begin + if (cbEnablePingMeasure.Checked and cbEnableDetectAliveNodes.Checked) or (ScanPurpose = spUserBridges) then + ScanStage := 2 + else + begin + if cbEnablePingMeasure.Checked then + ScanType := stPing + else + ScanType := stAlive; + end; + end; + + if CurrentScanPurpose = spAuto then + begin + if CurrentDate >= (LastFullScanDate + (udFullScanInterval.Position * 3600)) then + begin + CurrentAutoScanPurpose := spAll; + LastFullScanDate := CurrentDate; + LastPartialScansCounts := udPartialScansCounts.Position; + end + else + begin + if (LastPartialScansCounts > 0) and (CurrentDate >= (LastNonResponsedScanDate + (udNonResponsedScanInterval.Position * 3600))) then + begin + CurrentAutoScanPurpose := spNewAndFailed; + LastNonResponsedScanDate := CurrentDate; + Dec(LastPartialScansCounts); + end + else + CurrentAutoScanPurpose := spNew; + end; + AutoScanStage := 2; + end + else + CurrentAutoScanPurpose := spNone; + + case ScanStage of + 1: ScanStart(ScanType, CurrentScanPurpose); + 2: ScanStart(stPing, CurrentScanPurpose); + end; + if CurrentScanPurpose = spUserBridges then + begin + lbScanBridgesStatus.Visible := True; + lbScanBridgesStatus.Caption := TransStr('396') + ' (0%)'; + SetOptionsEnable(False); + end; + tmScanner.Enabled := True; + end; + end; +end; + +procedure TTcp.tmSaveTotalsTimer(Sender: TObject); +var + ini: TMemIniFile; +begin + if TotalsNeedSave then + begin + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + ini.WriteInt64('Status', 'TotalDL', TotalDL); + ini.WriteInt64('Status', 'TotalUL', TotalUL); + finally + ini.UpdateFile; + ini.Free; + end; + TotalsNeedSave := False; + end; +end; + +procedure TTcp.tmScannerTimer(Sender: TObject); +var + ls: TStringList; + i, j: Integer; + PortsData: ArrOfStr; + IpStr, PortStr, StatusStr, SocketStr: string; + GeoIpInfo: TGeoIpInfo; + ini: TMemIniFile; +begin + if not Assigned(Scanner) and (ScanThreads = 0) then + begin + if (ScanStage = 2) and not StopScan then + begin + ScanStart(stAlive, CurrentScanPurpose); + ScanStage := 1; + end + else + begin + if (CurrentScanPurpose = spUserBridges) and (CurrentScanType = stAlive) then + begin + if meBridges.Text <> '' then + begin + ls := TStringList.Create; + try + ls.Text := meBridges.Text; + for i := ls.Count - 1 downto 0 do + begin + if TryGetDataFromStr(ls[i], ltSocket, SocketStr) then + begin + IpStr := GetAddressFromSocket(SocketStr); + PortStr := IntToStr(GetPortFromSocket(SocketStr)); + if GeoIpDic.TryGetValue(IpStr, GeoIpInfo) then + begin + PortsData := Explode('|', GeoIpInfo.ports); + for j := 0 to Length(PortsData) - 1 do + begin + if Pos(PortStr + ':', PortsData[j]) = 1 then + begin + if SeparateRight(PortsData[j], ':') <> '1' then + begin + ls.Delete(i); + Break; + end; + end; + end; + if (GeoIpInfo.cc = DEFAULT_COUNTRY_ID) and (GeoIpInfo.ping = 0) then + GeoIpDic.Remove(IpStr); + end; + end; + end; + if not StopScan then + meBridges.Text := ls.Text; + finally + ls.Free; + end; + end; + end; + + case CurrentScanPurpose of + spUserBridges: + begin + lbScanBridgesStatus.Visible := False; + SetOptionsEnable(True); + end; + spAuto: + begin + if not StopScan then + begin + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + case CurrentAutoScanPurpose of + spAll: ini.WriteInt64('Scanner', 'LastFullScanDate', LastFullScanDate); + spFailed, spNewAndFailed: ini.WriteInt64('Scanner', 'LastNonResponsedScanDate', LastNonResponsedScanDate); + end; + ini.WriteInteger('Scanner', 'LastPartialScansCounts', LastPartialScansCounts); + finally + ini.UpdateFile; + ini.Free; + end; + end; + end; + end; + if AutoScanStage = 2 then + AutoScanStage := 3; + LoadConsensus; + if ConnectState = 0 then + SaveNetworkCache; + CheckStatusControls; + ScanStage := 0; + CurrentScanPurpose := spNone; + CurrentAutoScanPurpose := spNone; + CurrentScanType := stNone; + StopScan := False; + tmScanner.Enabled := False + end; + end + else + begin + if TotalScans > 0 then + begin + if StopScan then + StatusStr := TransStr('404') + else + begin + case CurrentScanType of + stPing: StatusStr := TransStr('382') + ' (' + IntToStr(Round((CurrentScans - ScanThreads) / TotalScans * 100)) + ' %)'; + stAlive: + begin + if CurrentScanPurpose = spUserBridges then + StatusStr := TransStr('396') + ' (' + IntToStr(Round((CurrentScans - ScanThreads) / TotalScans * 100)) + ' %)' + else + StatusStr := TransStr('383') + ' (' + IntToStr(Round((CurrentScans - ScanThreads) / TotalScans * 100)) + ' %)'; + end; + end; + end; + lbStatusScanner.Caption := StatusStr; + if CurrentScanPurpose = spUserBridges then + lbScanBridgesStatus.Caption := StatusStr; + end; + end; +end; + +procedure TTcp.tmTrafficTimer(Sender: TObject); +begin + if ConnectState = 0 then + begin + DLSpeed := 0; + ULSpeed := 0; + end; + Move(SpeedData[1], SpeedData[0], (MAX_SPEED_DATA_LENGTH - 1) * Sizeof(TSpeedData)); + SpeedData[MAX_SPEED_DATA_LENGTH - 1].DL := DLSpeed; + SpeedData[MAX_SPEED_DATA_LENGTH - 1].UL := ULSpeed; + + lbDLSpeed.Caption := BytesFormat(DLSpeed) + '/' + TransStr('180'); + lbULSpeed.Caption := BytesFormat(ULSpeed) + '/' + TransStr('180'); + + if UpdateTraffic then + begin + UpdateTraffic := False; + pbTraffic.Repaint; + end + else + UpdateTraffic := True; +end; + +procedure TTCp.LoadConsensus; +begin + if not Assigned(Consensus) then + begin + Consensus := TConsensusThread.Create(True); + Consensus.FreeOnTerminate := True; + Consensus.Priority := tpNormal; + Consensus.OnTerminate := TConsensusThreadTerminate; + Consensus.Start; + end; +end; + +procedure TTcp.LoadDescriptors; +begin + if not Assigned(Descriptors) then + begin + Descriptors := TDescriptorsThread.Create(True); + Descriptors.FreeOnTerminate := True; + Descriptors.Priority := tpNormal; + Descriptors.OnTerminate := TDescriptorsThreadTerminate; + Descriptors.Start; + end; +end; + +procedure TTcp.ShowFilter; +var + FilterCount: Integer; + Item: TPair; + cdTotal, cdUser, HideRow, IsExclude: Boolean; + NodeTypes: TNodeTypes; + CountryID: Byte; +begin + FilterCount := 0; + if sgFilter.SelRow = 0 then + sgFilter.SelRow := 1; + sgFilter.RowID := sgFilter.Cells[FILTER_ID, sgFilter.SelRow]; + BeginUpdateTable(sgFilter); + ClearGrid(sgFilter, False); + if (lbFilterEntry.Tag = 0) and (lbFilterMiddle.Tag = 0) and (lbFilterExit.Tag = 0) and (lbFilterExclude.Tag = 0) and not AlreadyStarted then + HideRow := False + else + HideRow := miFilterHideUnused.Checked; + for Item in FilterDic do + begin + CountryID := Item.Value.cc; + if HideRow then + begin + if CountryTotals[TOTAL_RELAYS][CountryID] > 0 then + cdTotal := True + else + cdTotal := False; + + if (Item.Value.Data = []) then + begin + if NodesDic.TryGetValue(Item.Key, NodeTypes) then + cdUser := ntExclude in NodeTypes + else + cdUser := False; + end + else + cdUser := True; + end + else + begin + cdTotal := True; + cdUser := True; + end; + if cdTotal or cdUser then + begin + Inc(FilterCount); + sgFilter.Cells[FILTER_ID, FilterCount] := UpperCase(Item.Key); + sgFilter.Cells[FILTER_NAME, FilterCount] := TransStr(Item.Key); + + if CountryTotals[TOTAL_RELAYS][CountryID] > 0 then + sgFilter.Cells[FILTER_TOTAL, FilterCount] := IntToStr(CountryTotals[TOTAL_RELAYS][CountryID]) + else + sgFilter.Cells[FILTER_TOTAL, FilterCount] := NONE_CHAR; + + if CountryTotals[TOTAL_GUARDS][CountryID] > 0 then + sgFilter.Cells[FILTER_GUARD, FilterCount] := IntToStr(CountryTotals[TOTAL_GUARDS][CountryID]) + else + sgFilter.Cells[FILTER_GUARD, FilterCount] := NONE_CHAR; + + if CountryTotals[TOTAL_EXITS][CountryID] > 0 then + sgFilter.Cells[FILTER_EXIT, FilterCount] := IntToStr(CountryTotals[TOTAL_EXITS][CountryID]) + else + sgFilter.Cells[FILTER_EXIT, FilterCount] := NONE_CHAR; + + if CountryTotals[TOTAL_ALIVES][CountryID] > 0 then + sgFilter.Cells[FILTER_ALIVE, FilterCount] := IntToStr(CountryTotals[5][CountryID]) + else + sgFilter.Cells[FILTER_ALIVE, FilterCount] := NONE_CHAR; + + if CountryTotals[TOTAL_PING_COUNTS][CountryID] > 0 then + sgFilter.Cells[FILTER_PING, FilterCount] := IntToStr(Round(CountryTotals[TOTAL_PING_SUM][CountryID] / CountryTotals[TOTAL_PING_COUNTS][CountryID])) + ' ' + TransStr('379') + else + sgFilter.Cells[FILTER_PING, FilterCount] := NONE_CHAR; + + IsExclude := False; + if NodesDic.ContainsKey(Item.Key) then + IsExclude := ntExclude in NodesDic.Items[Item.Key]; + + if IsExclude then + sgFilter.Cells[FILTER_EXCLUDE_NODES, FilterCount] := EXCLUDE_CHAR + else + begin + if ntEntry in Item.Value.Data then + sgFilter.Cells[FILTER_ENTRY_NODES, FilterCount] := SELECT_CHAR; + if ntMiddle in Item.Value.Data then + sgFilter.Cells[FILTER_MIDDLE_NODES, FilterCount] := SELECT_CHAR; + if ntExit in Item.Value.Data then + sgFilter.Cells[FILTER_EXIT_NODES, FilterCount] := SELECT_CHAR; + end; + end; + end; + if FilterCount > 0 then + sgFilter.RowCount := FilterCount + 1 + else + sgFilter.RowCount := 2; + GridSort(sgFilter); + SetGridLastCell(sgFilter, True, miFilterScrollTop.Checked); + if cbEnablePingMeasure.Checked and cbEnableDetectAliveNodes.Checked then + GridScrollCheck(sgFilter, FILTER_NAME, 280) + else + begin + if cbEnablePingMeasure.Checked or cbEnableDetectAliveNodes.Checked then + GridScrollCheck(sgFilter, FILTER_NAME, 336) + else + GridScrollCheck(sgFilter, FILTER_NAME, 392); + end; + EndUpdateTable(sgFilter); + lbFilterCount.Caption := Format(TransStr('321'), [FilterCount, FilterDic.Count]); +end; + +function TTcp.FindInRanges(IpStr: string): string; +var + RangeItem: TPair; +begin + Result := ''; + if RangesDic.Count > 0 then + begin + for RangeItem in RangesDic do + if InRange(IpToInt(IpStr), RangeItem.Value.IpStart, RangeItem.Value.IpEnd) then + Result := Result + ',' + RangeItem.Key; + Delete(Result, 1, 1); + end; +end; + +procedure TTcp.ShowRouters; +var + RoutersCount, i, j: Integer; + cdExit, cdGuard, cdAuthority, cdOther, cdBridge, cdFast, cdStable, cdV2Dir, cdHSDir, cdRecommended, cdDirMirror, cdAlive: Boolean; + cdRouterType, cdCountry, cdWeight, cdQuery, cdFavorites: Boolean; + Item: TPair; + CountryCode: string; + CountryID: Byte; + FindCountry, FindHash, FindIp, IsExclude, IsNativeBridge, IsPrefferedBridge, WrongQuery: Boolean; + FindCidr, Query, Temp: string; + ParseStr, RangeStr: ArrOfStr; + GeoIpInfo: TGeoIpInfo; + PreferredBridge: TBridge; + + procedure SelectNodes(KeyStr: string; Exclude: Boolean); + var + i: Integer; + begin + for i := ROUTER_ENTRY_NODES to ROUTER_EXIT_NODES do + begin + if TNodeType(i) in NodesDic.Items[KeyStr] then + begin + if sgRouters.Cells[i, RoutersCount] <> FAVERR_CHAR then + begin + if (sgRouters.Cells[i, RoutersCount] = NONE_CHAR) or Exclude then + sgRouters.Cells[i, RoutersCount] := FAVERR_CHAR + else + begin + if not IsPrefferedBridge then + sgRouters.Cells[i, RoutersCount] := SELECT_CHAR; + end; + end; + end; + end; + end; + + function CheckRouterType(Menu: TMenuItem; Condition: Boolean): Boolean; + begin + if Menu.Enabled and Menu.Checked then + begin + Result := Condition; + if miReverseConditions.Checked then + Result := not Result; + end + else + Result := True; + end; + + function CheckNodesDic(KeyStr: string): Boolean; + var + NodeTypes: TNodeTypes; + begin + if NodesDic.TryGetValue(KeyStr, NodeTypes) then + begin + if NodeTypes <> [] then + begin + case RoutersCustomFilter of + ENTRY_ID: Result := ntEntry in NodeTypes; + MIDDLE_ID: Result := ntMiddle in NodeTypes; + EXIT_ID: Result := ntExit in NodeTypes; + EXCLUDE_ID: Result := ntExclude in NodeTypes; + FAVORITES_ID: Result := (ntEntry in NodeTypes) or + (ntMiddle in NodeTypes) or (ntExit in NodeTypes); + else + Result := False; + end; + Exit; + end; + end; + Result := False; + end; + +begin + if Assigned(Consensus) or Assigned(Descriptors) then + Exit; + WrongQuery := False; + Query := StringReplace(Trim(edRoutersQuery.Text), ';', '', [rfReplaceAll]); + if miRtFiltersQuery.Checked and (Query <> '') then + begin + case cbxRoutersQuery.ItemIndex of + 4,5: + begin + PortsDic.Clear; + ParseStr := Explode(',', Query); + Temp := ''; + for i := 0 to Length(ParseStr) - 1 do + begin + ParseStr[i] := Trim(ParseStr[i]); + if ValidInt(ParseStr[i], 0, 65535) then + PortsDic.AddOrSetValue(StrToInt(ParseStr[i]), 0) + else + begin + RangeStr := Explode('-', ParseStr[i]); + if Length(RangeStr) <> 2 then + ParseStr[i] := '' + else + begin + if ValidInt(RangeStr[0], 0, 65535) and ValidInt(RangeStr[1], 1, 65535) then + begin + if StrToInt(RangeStr[0]) <= StrToInt(RangeStr[1]) then + begin + for j := StrToInt(RangeStr[0]) to StrToInt(RangeStr[1]) do + PortsDic.AddOrSetValue(j, 0); + end + else + ParseStr[i] := ''; + end + else + ParseStr[i] := ''; + end; + end; + if ParseStr[i] <> '' then + Temp := Temp + ',' + ParseStr[i]; + end; + Delete(Temp, 1, 1); + Query := Temp; + end; + 7: + begin + if not (ValidInt(Query, -1, 65535) or (CharInSet(AnsiChar(Query[1]), [NONE_CHAR, INFINITY_CHAR]) and (Length(Query) = 1))) then + WrongQuery := True + end; + else + begin + try + MatchesMask('', Query); + except + on E:Exception do + WrongQuery := True; + end; + end; + end; + + edRoutersQuery.Text := Query; + edRoutersQuery.SelStart := Length(Query); + if Query = '' then + WrongQuery := True; + end; + + RoutersCount := 0; + if sgRouters.SelRow = 0 then + sgRouters.SelRow := 1; + + sgRouters.RowID := sgRouters.Cells[ROUTER_ID, sgRouters.SelRow]; + BeginUpdateTable(sgRouters); + ClearGrid(sgRouters, False); + + if not WrongQuery then + begin + LastPreferredBridgeHash := ''; + if cbUseBridges.Checked and cbUsePreferredBridge.Checked then + TryParseBridge(edPreferredBridge.Text, PreferredBridge); + + for Item in RoutersDic do + begin + FindCidr := ''; + CountryID := GetCountryValue(Item.Value.IPv4); + CountryCode := CountryCodes[CountryID]; + if miRtFiltersCountry.Checked then + begin + case cbxRoutersCountry.Tag of + -1: cdCountry := True; + -2: cdCountry := FilterDic.Items[CountryCode].Data <> []; + else + cdCountry := CountryID = cbxRoutersCountry.Tag; + end; + end + else + cdCountry := True; + + if miRtFiltersWeight.Checked then + cdWeight := Item.Value.Bandwidth >= udRoutersWeight.Position * 1024 + else + cdWeight := True; + + if miRtFiltersQuery.Checked and (Query <> '') then + begin + case cbxRoutersQuery.ItemIndex of + 0: cdQuery := FindStr(Query, Item.Key); + 1: cdQuery := FindStr(Query, Item.Value.Name); + 2: cdQuery := FindStr(Query, Item.Value.IPv4); + 3: cdQuery := FindStr(RemoveBrackets(Query, True), RemoveBrackets(Item.Value.IPv6, True)); + 4: cdQuery := PortsDic.ContainsKey(Item.Value.OrPort); + 5: cdQuery := PortsDic.ContainsKey(Item.Value.DirPort); + 6: cdQuery := FindStr(Query, Item.Value.Version); + 7: + begin + if GeoIpDic.TryGetValue(Item.Value.IPv4, GeoIpInfo) then + begin + case AnsiChar(Query[1]) of + NONE_CHAR: cdQuery := GeoIpInfo.ping = 0; + INFINITY_CHAR: cdQuery := GeoIpInfo.ping = -1; + else + cdQuery := (GeoIpInfo.ping <= StrToInt(Query)) and (GeoIpInfo.ping > 0); + end; + end + else + cdQuery := False; + end; + else + cdQuery := True; + end; + end + else + cdQuery := True; + + if miRtFiltersType.Checked then + begin + cdBridge := CheckRouterType(miShowBridge, rfBridge in Item.Value.Flags); + cdAuthority := CheckRouterType(miShowAuthority, rfAuthority in Item.Value.Flags); + cdExit := CheckRouterType(miShowExit, rfExit in Item.Value.Flags); + cdGuard := CheckRouterType(miShowGuard, rfGuard in Item.Value.Flags); + cdOther := CheckRouterType(miShowOther, not (rfExit in Item.Value.Flags) and not (rfGuard in Item.Value.Flags) and not (rfBridge in Item.Value.Flags) and not (rfAuthority in Item.Value.Flags)); + cdFast := CheckRouterType(miShowFast, rfFast in Item.Value.Flags); + cdStable := CheckRouterType(miShowStable, rfStable in Item.Value.Flags); + cdHSDir := CheckRouterType(miShowHSDir, rfHSDir in Item.Value.Flags); + cdDirMirror := CheckRouterType(miShowDirMirror, Item.Value.DirPort > 0); + cdV2Dir := CheckRouterType(miShowV2Dir, rfV2Dir in Item.Value.Flags); + cdAlive := CheckRouterType(miShowAlive, Item.Value.Params and ROUTER_ALIVE <> 0); + cdRecommended := CheckRouterType(miShowRecommend, VersionsDic.ContainsKey(Item.Value.Version)); + + cdRouterType := cdExit and cdGuard and cdBridge and cdAuthority and cdOther and cdFast and cdStable and cdV2Dir and cdHSDir and cdDirMirror and cdRecommended and cdAlive; + end + else + cdRouterType := True; + + if RoutersCustomFilter in [ENTRY_ID..FAVORITES_ID] then + begin + if CheckNodesDic(Item.Key) then + cdFavorites := True + else + begin + if CheckNodesDic(Item.Value.IPv4) then + cdFavorites := True + else + begin + if CheckNodesDic(CountryCode) then + cdFavorites := True + else + begin + FindCidr := FindInRanges(Item.Value.IPv4); + if FindCidr <> '' then + begin + cdFavorites := False; + ParseStr := Explode(',', FindCidr); + for i := 0 to Length(ParseStr) - 1 do + begin + if not cdFavorites then + cdFavorites := CheckNodesDic(ParseStr[i]) + else + Break; + end; + end + else + cdFavorites := False; + end; + end; + end; + end + else + cdFavorites := True; + + if cdRouterType and cdWeight and cdCountry and cdFavorites and cdQuery then + begin + Inc(RoutersCount); + sgRouters.Cells[ROUTER_ID, RoutersCount] := Item.Key; + sgRouters.Cells[ROUTER_NAME, RoutersCount] := Item.Value.Name; + sgRouters.Cells[ROUTER_IP, RoutersCount] := Item.Value.IPv4; + sgRouters.Cells[ROUTER_COUNTRY, RoutersCount] := TransStr(CountryCode); + sgRouters.Cells[ROUTER_WEIGHT, RoutersCount] := BytesFormat(Item.Value.Bandwidth * 1024) + '/' + TransStr('180'); + sgRouters.Cells[ROUTER_PORT, RoutersCount] := IntToStr(Item.Value.OrPort); + if Item.Value.Version <> '' then + sgRouters.Cells[ROUTER_VERSION, RoutersCount] := Item.Value.Version + else + sgRouters.Cells[ROUTER_VERSION, RoutersCount] := NONE_CHAR; + if GeoIpDic.TryGetValue(Item.Value.IPv4, GeoIpInfo) then + begin + if GeoIpInfo.ping > 0 then + sgRouters.Cells[ROUTER_PING, RoutersCount] := IntToStr(GeoIpInfo.ping) + ' ' + TransStr('379') + else + begin + if GeoIpInfo.ping < 0 then + sgRouters.Cells[ROUTER_PING, RoutersCount] := INFINITY_CHAR + else + sgRouters.Cells[ROUTER_PING, RoutersCount] := NONE_CHAR; + end; + end + else + sgRouters.Cells[ROUTER_PING, RoutersCount] := NONE_CHAR; + + if Item.Value.Params = 0 then + sgRouters.Cells[ROUTER_FLAGS, RoutersCount] := NONE_CHAR; + + IsNativeBridge := (rfBridge in Item.Value.Flags) and not (rfRelay in Item.Value.Flags); + IsPrefferedBridge := Item.Key = PreferredBridge.Hash; + + if not (rfGuard in Item.Value.Flags) or IsNativeBridge then + sgRouters.Cells[ROUTER_ENTRY_NODES, RoutersCount] := NONE_CHAR; + if not (rfExit in Item.Value.Flags) or IsNativeBridge then + sgRouters.Cells[ROUTER_EXIT_NODES, RoutersCount] := NONE_CHAR; + if IsNativeBridge then + sgRouters.Cells[ROUTER_MIDDLE_NODES, RoutersCount] := NONE_CHAR; + + FindHash := NodesDic.ContainsKey(Item.Key); + FindIp := NodesDic.ContainsKey(Item.Value.IPv4); + FindCountry := NodesDic.ContainsKey(CountryCode); + FindCidr := FindInRanges(Item.Value.IPv4); + + IsExclude := False; + + if FindHash then + if ntExclude in NodesDic.Items[Item.Key] then + IsExclude := True; + if FindCountry then + if ntExclude in NodesDic.Items[CountryCode] then + IsExclude := True; + if FindIp then + if ntExclude in NodesDic.Items[Item.Value.IPv4] then + IsExclude := True; + if FindCidr <> '' then + begin + ParseStr := Explode(',', FindCidr); + for i := 0 to Length(ParseStr) - 1 do + begin + if NodesDic.ContainsKey(ParseStr[i]) then + begin + if ntExclude in NodesDic.Items[ParseStr[i]] then + begin + IsExclude := True; + Break; + end; + end; + end; + end; + + if IsExclude then + sgRouters.Cells[ROUTER_EXCLUDE_NODES, RoutersCount] := EXCLUDE_CHAR; + + if IsPrefferedBridge then + begin + sgRouters.Cells[ROUTER_ENTRY_NODES, RoutersCount] := BOTH_CHAR; + LastPreferredBridgeHash := Item.Key; + end; + + if FindHash then + SelectNodes(Item.Key, IsExclude); + if FindCountry then + SelectNodes(CountryCode, IsExclude); + if FindIp then + SelectNodes(Item.Value.IPv4, IsExclude); + if FindCidr <> '' then + begin + for i := 0 to Length(ParseStr) - 1 do + begin + if NodesDic.ContainsKey(ParseStr[i]) then + SelectNodes(ParseStr[i], IsExclude); + end; + end; + + end; + end; + end; + + if RoutersCount > 0 then + sgRouters.RowCount := RoutersCount + 1 + else + sgRouters.RowCount := 2; + + GridSort(sgRouters); + SetGridLastCell(sgRouters, True, miRoutersScrollTop.Checked); + if cbEnablePingMeasure.Checked then + GridScrollCheck(sgRouters, ROUTER_COUNTRY, 105) + else + GridScrollCheck(sgRouters, ROUTER_COUNTRY, 125); + EndUpdateTable(sgRouters); + lbRoutersCount.Caption := Format(TransStr('321'), [RoutersCount, RoutersDic.Count]); + + if PortsDic.Count > 0 then + PortsDic.Clear; +end; + + +procedure TTcp.CheckCountryIndexInList; +var + Index: Integer; +begin + Index := cbxRoutersCountry.Items.IndexOfObject(TObject(cbxRoutersCountry.Tag)); + if Index = -1 then + begin + Index := 0; + cbxRoutersCountry.Tag := -1; + end; + if cbxRoutersCountry.ItemIndex <> Index then + cbxRoutersCountry.ItemIndex := Index; +end; + +procedure TTcp.LoadFilterTotals; +var + Item: TPair; + RouterInfo: TRouterInfo; + Flags: TRouterFlags; + GeoIpInfo: TGeoIpInfo; + CountryID: Byte; + ParseStr: ArrOfStr; + i, j: Integer; +begin + AliveNodesCount := 0; + PingNodesCount := 0; + for j := 0 to MAX_TOTALS - 1 do + for i := 0 to MAX_COUNTRIES - 1 do + CountryTotals[j][i] := 0; + + for Item in RoutersDic do + begin + if GeoIpDic.TryGetValue(Item.Value.IPv4, GeoIpInfo) then + begin + CountryID := GeoIpInfo.cc; + if GeoIpInfo.ping > 0 then + begin + Inc(CountryTotals[TOTAL_PING_SUM][CountryID], GeoIpInfo.ping); + Inc(CountryTotals[TOTAL_PING_COUNTS][CountryID]); + Inc(PingNodesCount); + end; + if GeoIpInfo.ports <> '' then + begin + ParseStr := Explode('|', GeoIpInfo.ports); + for i := 0 to Length(ParseStr) - 1 do + begin + if Pos(IntToStr(Item.Value.OrPort) + ':1', ParseStr[i]) = 1 then + begin + Inc(CountryTotals[TOTAL_ALIVES][CountryID]); + if Item.Value.Params and ROUTER_ALIVE = 0 then + begin + RouterInfo := Item.Value; + Inc(RouterInfo.Params, ROUTER_ALIVE); + RoutersDic.AddOrSetValue(Item.Key, RouterInfo); + Inc(AliveNodesCount); + end; + Break; + end; + end; + end; + end + else + CountryID := DEFAULT_COUNTRY_ID; + Flags := Item.Value.Flags; + + Inc(CountryTotals[TOTAL_RELAYS][CountryID]); + if rfGuard in Flags then + Inc(CountryTotals[TOTAL_GUARDS][CountryID]); + if rfExit in Flags then + Inc(CountryTotals[TOTAL_EXITS][CountryID]); + end; +end; + +procedure TTcp.LoadRoutersCountries; +var + i: Integer; +begin + cbxRoutersCountry.Clear; + cbxRoutersCountry.AddItem(TransStr('347'), TObject(-1)); + cbxRoutersCountry.AddItem(TransStr('348'), TObject(-2)); + for i := 0 to MAX_COUNTRIES - 1 do + if CountryTotals[TOTAL_RELAYS][i] > 0 then + cbxRoutersCountry.AddItem(TransStr(CountryCodes[i]), TObject(i)); + CheckCountryIndexInList; +end; + +procedure TTcp.ShowCircuits; +var + CircuitsCount: Integer; + Item: TPair; + PurposeStr: string; + TotalConnections: Integer; +begin + if LockCircuits then + Exit; + LockCircuits := True; + CircuitsCount := 0; + TotalConnections := 0; + PurposeStr := ''; + if sgCircuits.SelRow = 0 then + sgCircuits.SelRow := 1; + sgCircuits.RowID := sgCircuits.Cells[CIRC_ID, sgCircuits.SelRow]; + BeginUpdateTable(sgCircuits); + ClearGrid(sgCircuits, False); + for Item in CircuitsDic do + begin + Inc(TotalConnections, Item.Value.Streams); + if miHideCircuitsWithoutStreams.Checked then + begin + if Item.Value.Streams = 0 then + begin + if (Item.Key = Circuit) then + begin + if not miAlwaysShowExitCircuit.Checked then + Continue; + end + else + Continue; + end; + end; + PurposeStr := ''; + if bfOneHop in (Item.Value.BuildFlags) then + begin + if miCircOneHop.Checked then + PurposeStr := TransStr('331') + end + else + begin + case Item.Value.PurposeID of + GENERAL: + begin + if bfInternal in (Item.Value.BuildFlags) then + begin + if miCircInternal.Checked then + PurposeStr := TransStr('332') + end + else + if miCircExit.Checked or (miAlwaysShowExitCircuit.Checked and (Item.Key = Circuit)) then + PurposeStr := TransStr('333') + end; + HS_CLIENT_HSDIR: if miCircHsClientDir.Checked then PurposeStr := TransStr('334'); + HS_CLIENT_INTRO: if miCircHsClientIntro.Checked then PurposeStr := TransStr('335'); + HS_CLIENT_REND: if miCircHsClientRend.Checked then PurposeStr := TransStr('336'); + HS_SERVICE_HSDIR: if miCircHsServiceDir.Checked then PurposeStr := TransStr('337'); + HS_SERVICE_INTRO: if miCircHsServiceIntro.Checked then PurposeStr := TransStr('338'); + HS_SERVICE_REND: if miCircHsServiceRend.Checked then PurposeStr := TransStr('339'); + HS_VANGUARDS: if miCircHsVanguards.Checked then PurposeStr := TransStr('340'); + PATH_BIAS_TESTING: if miCircPathBiasTesting.Checked then PurposeStr := TransStr('341'); + TESTING: if miCircTesting.Checked then PurposeStr := TransStr('342'); + CIRCUIT_PADDING: if miCircCircuitPadding.Checked then PurposeStr := TransStr('343'); + MEASURE_TIMEOUT: if miCircMeasureTimeout.Checked then PurposeStr := TransStr('344'); + else + if miCircOther.Checked then PurposeStr := TransStr('345'); + end; + end; + if PurposeStr <> '' then + begin + Inc(CircuitsCount); + sgCircuits.Cells[CIRC_ID, CircuitsCount] := Item.Key; + sgCircuits.Cells[CIRC_PURPOSE, CircuitsCount] := PurposeStr; + if Item.Value.Streams > 0 then + sgCircuits.Cells[CIRC_STREAMS, CircuitsCount] := IntToStr(Item.Value.Streams) + else + sgCircuits.Cells[CIRC_STREAMS, CircuitsCount] := NONE_CHAR; + sgCircuits.Cells[CIRC_BYTES_READ, CircuitsCount] := IntToStr(Item.Value.BytesRead); + sgCircuits.Cells[CIRC_BYTES_WRITTEN, CircuitsCount] := IntToStr(Item.Value.BytesWritten); + end; + end; + if CircuitsCount > 0 then + sgCircuits.RowCount := CircuitsCount + 1 + else + sgCircuits.RowCount := 2; + GridSort(sgCircuits); + if SelectExitCircuit then + FindInCircuits(Circuit, ExitNodeID) + else + SetGridLastCell(sgCircuits, False); + GridScrollCheck(sgCircuits, CIRC_PURPOSE, 170); + EndUpdateTable(sgCircuits); + lbCircuitsCount.Caption := Format(TransStr('349'), [CircuitsCount, CircuitsDic.Count]); + lbStreamsCount.Caption := TransStr('350') + ': ' + IntToStr(TotalConnections); + ShowCircuitInfo(sgCircuits.Cells[CIRC_ID, sgCircuits.SelRow]); + LockCircuits := False; +end; + +procedure TTcp.ShowCircuitInfo(CircID: string); +var + NodesCount, i: Integer; + Router: TRouterInfo; + NodesData: ArrOfStr; + CountryCode: Byte; + CircuitInfo: TCircuitInfo; + GeoIpInfo: TGeoIpInfo; + PingData: string; +begin + if LockCircuitInfo then + Exit; + LockCircuitInfo := True; + NodesCount := 0; + BeginUpdateTable(sgCircuitInfo); + ClearGrid(sgCircuitInfo, False); + + if CircuitsDic.TryGetValue(CircID, CircuitInfo) then + begin + NodesData := Explode(',', CircuitInfo.Nodes); + for i := 0 to Length(NodesData) - 1 do + begin + PingData := NONE_CHAR; + inc(NodesCount); + if RoutersDic.TryGetValue(NodesData[i], Router) then + begin + CountryCode := GetCountryValue(Router.IPv4); + sgCircuitInfo.Cells[CIRC_INFO_ID, NodesCount] := NodesData[i]; + sgCircuitInfo.Cells[CIRC_INFO_NAME, NodesCount] := Router.Name; + sgCircuitInfo.Cells[CIRC_INFO_IP, NodesCount] := Router.IPv4; + sgCircuitInfo.Cells[CIRC_INFO_COUNTRY, NodesCount] := TransStr(CountryCodes[CountryCode]); + sgCircuitInfo.Cells[CIRC_INFO_WEIGHT, NodesCount] := BytesFormat(Router.Bandwidth * 1024) + '/' + TransStr('180'); + if GeoIpDic.TryGetValue(Router.IPv4, GeoIpInfo) then + begin + if GeoIpInfo.ping > 0 then + PingData := IntToStr(GeoIpInfo.ping) + ' ' + TransStr('379') + else + begin + if GeoIpInfo.ping < 0 then + PingData := INFINITY_CHAR; + end; + end; + end + else + begin + sgCircuitInfo.Cells[CIRC_INFO_ID, NodesCount] := NodesData[i]; + sgCircuitInfo.Cells[CIRC_INFO_NAME, NodesCount] := TransStr('260'); + sgCircuitInfo.Cells[CIRC_INFO_IP, NodesCount] := TransStr('260'); + sgCircuitInfo.Cells[CIRC_INFO_COUNTRY, NodesCount] := TransStr(CountryCodes[DEFAULT_COUNTRY_ID]); + sgCircuitInfo.Cells[CIRC_INFO_WEIGHT, NodesCount] := BytesFormat(0) + '/' + TransStr('180'); + end; + sgCircuitInfo.Cells[CIRC_INFO_PING, NodesCount] := PingData; + end; + lbDetailsTime.Caption := TransStr('221') + ': ' + CircuitInfo.Date; + end + else + begin + lbDetailsTime.Caption := TransStr('221') + ': ' + TransStr('110'); + CheckCircuitExists(CircID); + end; + + if NodesCount > 0 then + sgCircuitInfo.RowCount := NodesCount + 1 + else + sgCircuitInfo.RowCount := 2; + EndUpdateTable(sgCircuitInfo); + ShowStreams(CircID); + LockCircuitInfo := False; +end; + +procedure TTcp.CheckCircuitExists(CircID: string; UpdateStreamsCount: Boolean = False); +var + Search, i: Integer; +begin + if miCircuitsUpdateLow.Checked or miCircuitsUpdateManual.Checked or (ConnectState = 0) then + begin + Search := sgCircuits.Cols[CIRC_ID].IndexOf(CircID); + if Search > 0 then + begin + sgCircuits.Cells[CIRC_STREAMS, Search] := EXCLUDE_CHAR; + if (Search = sgCircuits.Row) and not IsEmptyGrid(sgStreams) then + begin + for i := 1 to sgStreams.RowCount - 1 do + sgStreams.Cells[STREAMS_COUNT, i] := EXCLUDE_CHAR; + end; + end; + if UpdateStreamsCount and not IsEmptyGrid(sgCircuits) then + lbStreamsCount.Caption := TransStr('350') + ': ' + IntToStr(StreamsDic.Count); + end; +end; + +procedure TTcp.CheckCircuitStreams(CircID: string; TargetStreams: Integer); +var + CircuitInfo: TCircuitInfo; + i: Integer; +begin + if miCircuitsUpdateLow.Checked or miCircuitsUpdateManual.Checked then + begin + if CircuitsDic.TryGetValue(CircID, CircuitInfo) then + begin + if CircuitInfo.Streams > 0 then + sgCircuits.Cells[CIRC_STREAMS, sgCircuits.SelRow] := IntToStr(CircuitInfo.Streams) + else + begin + sgCircuits.Cells[CIRC_STREAMS, sgCircuits.SelRow] := NONE_CHAR; + if not IsEmptyGrid(sgStreams) then + for i := 1 to sgStreams.RowCount - 1 do + sgStreams.Cells[STREAMS_COUNT, i] := EXCLUDE_CHAR; + end; + end; + + if StrToIntDef(sgStreams.Cells[STREAMS_COUNT, sgStreams.SelRow], 0) > 0 then + begin + if TargetStreams = 0 then + sgStreams.Cells[STREAMS_COUNT, sgStreams.SelRow] := EXCLUDE_CHAR + else + sgStreams.Cells[STREAMS_COUNT, sgStreams.SelRow] := IntToStr(TargetStreams); + end; + + if not IsEmptyGrid(sgCircuits) then + lbStreamsCount.Caption := TransStr('350') + ': ' + IntToStr(StreamsDic.Count); + end; +end; + +procedure TTcp.ShowStreams(CircID: string); +var + StreamsCount, Search, i: Integer; + Item: TPair; + Target, FoundStr: String; + CircuitInfo: TCircuitInfo; + ReadSum, WrittenSum: Int64; +begin + if LockStreams then + Exit; + LockStreams := True; + StreamsCount := 0; + if sgStreams.SelRow = 0 then + sgStreams.SelRow := 1; + sgStreams.RowID := sgStreams.Cells[STREAMS_TARGET, sgStreams.SelRow]; + BeginUpdateTable(sgStreams); + ClearGrid(sgStreams, False); + if CircuitsDic.TryGetValue(CircID, CircuitInfo) then + begin + for Item in StreamsDic do + begin + if Item.Value.CircuitID = CircID then + begin + Target := Item.Value.Target; + Search := -1; + for i := 1 to StreamsCount do + if sgStreams.Cells[STREAMS_TARGET, i] = Target then + begin + Search := i; + Break; + end; + if Search > 0 then + begin + sgStreams.Cells[STREAMS_ID, Search] := Item.Key; + sgStreams.Cells[STREAMS_COUNT, Search] := IntToStr(StrToIntDef(sgStreams.Cells[STREAMS_COUNT, Search], 0) + 1); + ReadSum := FormatSizeToBytes(sgStreams.Cells[STREAMS_BYTES_READ, Search]) + Item.Value.BytesRead; + WrittenSum := FormatSizeToBytes(sgStreams.Cells[STREAMS_BYTES_WRITTEN, Search]) + Item.Value.BytesWritten; + sgStreams.Cells[STREAMS_BYTES_READ, Search] := BytesFormat(ReadSum); + sgStreams.Cells[STREAMS_BYTES_WRITTEN, Search] := BytesFormat(WrittenSum); + end + else + begin + if FindTrackHost(Target) then + begin + if cbUseTrackHostExits.Checked then + FoundStr := SELECT_CHAR + else + FoundStr := FAVERR_CHAR; + end + else + FoundStr := NONE_CHAR; + Inc(StreamsCount); + sgStreams.Cells[STREAMS_ID, StreamsCount] := Item.Key; + sgStreams.Cells[STREAMS_TARGET, StreamsCount] := Target; + sgStreams.Cells[STREAMS_TRACK, StreamsCount] := FoundStr; + sgStreams.Cells[STREAMS_COUNT, StreamsCount] := '1'; + sgStreams.Cells[STREAMS_BYTES_READ, StreamsCount] := BytesFormat(Item.Value.BytesRead); + sgStreams.Cells[STREAMS_BYTES_WRITTEN, StreamsCount] := BytesFormat(Item.Value.BytesWritten); + end; + end; + end; + lbDLCirc.Caption := TransStr('214') + ': ' + BytesFormat(CircuitInfo.BytesRead); + lbULCirc.Caption := TransStr('215') + ': ' + BytesFormat(CircuitInfo.BytesWritten); + end + else + begin + lbDLCirc.Caption := TransStr('214') + ': ' + INFINITY_CHAR; + lbULCirc.Caption := TransStr('215') + ': ' + INFINITY_CHAR; + end; + + if StreamsCount > 0 then + sgStreams.RowCount := StreamsCount + 1 + else + sgStreams.RowCount := 2; + + GridSort(sgStreams); + SetGridLastCell(sgStreams, False, False, False, -1, -1, 1); + if miShowStreamsTraffic.Checked then + GridScrollCheck(sgStreams, STREAMS_TARGET, 301) + else + GridScrollCheck(sgStreams, STREAMS_TARGET, 424); + EndUpdateTable(sgStreams); + ShowStreamsInfo(CircID, sgStreams.Cells[STREAMS_TARGET, sgStreams.SelRow]); + LockStreams := False; +end; + +procedure TTcp.ShowStreamsInfo(CircID, Target: string); +var + StreamsCount, i: Integer; + Item: TPair; + PurposeStr, DestAddr: string; + CircuitInfo: TCircuitInfo; +begin + if LockStreamsInfo then + Exit; + LockStreamsInfo := True; + StreamsCount := 0; + DestAddr := ''; + if sgStreamsInfo.SelRow = 0 then + sgStreamsInfo.SelRow := 1; + sgStreamsInfo.RowID := sgStreamsInfo.Cells[STREAMS_INFO_ID, sgStreamsInfo.SelRow]; + BeginUpdateTable(sgStreamsInfo); + ClearGrid(sgStreamsInfo, False); + + if CircuitsDic.TryGetValue(CircID, CircuitInfo) then + begin + if CircuitInfo.Streams > 0 then + begin + for Item in StreamsDic do + begin + if (Item.Value.CircuitID = CircID) and (Item.Value.Target = Target) then + begin + Inc(StreamsCount); + sgStreamsInfo.Cells[STREAMS_INFO_ID, StreamsCount] := Item.Key; + if Item.Value.SourceAddr <> '' then + sgStreamsInfo.Cells[STREAMS_INFO_SOURCE_ADDR, StreamsCount] := Item.Value.SourceAddr + else + sgStreamsInfo.Cells[STREAMS_INFO_SOURCE_ADDR, StreamsCount] := TransStr('376'); + + if Item.Value.DestAddr <> '' then + begin + DestAddr := Item.Value.DestAddr; + sgStreamsInfo.Cells[STREAMS_INFO_DEST_ADDR, StreamsCount] := DestAddr; + end + else + begin + if RPos('.onion:', Target) <> 0 then + sgStreamsInfo.Cells[STREAMS_INFO_DEST_ADDR, StreamsCount] := TransStr('122') + else + begin + if RPos('.exit:', Target) <> 0 then + sgStreamsInfo.Cells[STREAMS_INFO_DEST_ADDR, StreamsCount] := Copy(Target, 1, Pos('.$', Target) - 1) + ':' + IntToStr(GetPortFromSocket(Target)) + else + sgStreamsInfo.Cells[STREAMS_INFO_DEST_ADDR, StreamsCount] := TransStr('401'); + end; + end; + + case Item.Value.PurposeID of + DIR_FETCH: PurposeStr := TransStr('370'); + DIR_UPLOAD: PurposeStr := TransStr('371'); + DIRPORT_TEST: PurposeStr := TransStr('372'); + DNS_REQUEST: PurposeStr := TransStr('373'); + USER: PurposeStr := TransStr('374'); + else + PurposeStr := TransStr('375'); + end; + sgStreamsInfo.Cells[STREAMS_INFO_PURPOSE, StreamsCount] := PurposeStr; + sgStreamsInfo.Cells[STREAMS_INFO_BYTES_READ, StreamsCount] := BytesFormat(Item.Value.BytesRead); + sgStreamsInfo.Cells[STREAMS_INFO_BYTES_WRITTEN, StreamsCount] := BytesFormat(Item.Value.BytesWritten); + end; + end; + end; + end; + + if StreamsCount > 0 then + begin + sgStreamsInfo.RowCount := StreamsCount + 1; + if DestAddr <> '' then + begin + for i := 1 to sgStreamsInfo.RowCount - 1 do + if sgStreamsInfo.Cells[STREAMS_INFO_DEST_ADDR, i] = TransStr('401') then + sgStreamsInfo.Cells[STREAMS_INFO_DEST_ADDR, i] := DestAddr; + end; + end + else + sgStreamsInfo.RowCount := 2; + + GridSort(sgStreamsInfo); + SetGridLastCell(sgStreamsInfo, False); + if miShowStreamsTraffic.Checked then + GridScrollCheck(sgStreamsInfo, STREAMS_INFO_PURPOSE, 119) + else + GridScrollCheck(sgStreamsInfo, STREAMS_INFO_PURPOSE, 163); + EndUpdateTable(sgStreamsInfo); + CheckCircuitStreams(CircID, StreamsCount); + LockStreamsInfo := False; +end; + +function TTcp.FindTrackHost(Host: string): Boolean; +var + DotIndex: Integer; +begin + if TrackHostDic.ContainsKey('.') then + begin + Result := True; + Exit; + end + else + begin + Host := ExtractDomain(Host, True); + if ValidHost(Host, True, True) then + begin + DotIndex := 1; + while DotIndex > 0 do + begin + if TrackHostDic.ContainsKey(Host) then + begin + Result := True; + Exit; + end; + DotIndex := Pos('.', Host, 2); + if DotIndex <> -1 then + Host := Copy(Host, DotIndex); + end; + end; + end; + Result := False; +end; + +procedure TTcp.btnCreateProfileClick(Sender: TObject); +var + Input: string; +begin + Input := InputBox(TransStr('265'), TransStr('266') + ':', ''); + if Trim(Input) <> '' then + begin + CreateShortcut(ParamStr(0), '-profile="' + Input + '"', ExtractFileDir(ParamStr(0)), + GetSystemDir(CSIDL_DESKTOPDIRECTORY) + '\TCP (' + Input + ').lnk', ParamStr(0)); + end; +end; + +procedure TTcp.btnFindPreferredBridgeClick(Sender: TObject); +begin + FindInRouters(LastPreferredBridgeHash); +end; + +procedure TTcp.cbEnableSocksClick(Sender: TObject); +var + State: Boolean; +begin + State := cbEnableSocks.Checked; + edSOCKSPort.Enabled := State; + udSOCKSPort.Enabled := State; + cbxSocksHost.Enabled := State; + EnableOptionButtons; +end; + +procedure TTcp.cbeRoutersCountrySelect(Sender: TObject); +begin + ResetFocus; +end; + +procedure TTcp.ServerAddressEnable(State: Boolean); +begin + edAddress.Enabled := State; + lbAddress.Enabled := State; +end; + +procedure TTcp.cbUseAddressClick(Sender: TObject); +begin + if cbUseAddress.Checked then + ServerAddressEnable(True) + else + ServerAddressEnable(False); + EnableOptionButtons; +end; + +procedure TTcp.cbAutoScanNewNodesClick(Sender: TObject); +begin + if cbAutoScanNewNodes.Focused then + begin + CheckScannerControls; + CheckStatusControls; + EnableOptionButtons; + end; +end; + +procedure TTcp.cbDirCacheMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if (Button = mbLeft) and (cbxServerMode.ItemIndex in [1,2]) and cbDirCache.Checked then + begin + if ShowMsg(TransStr('204'), '', mtWarning, True) then + begin + cbDirCache.Checked := False; + EnableOptionButtons; + end + else + cbDirCache.Checked := True; + end + else + EnableOptionButtons; +end; + +procedure TTcp.cbEnableNodesListClick(Sender: TObject); +begin + if not cbEnableNodesList.Focused then + Exit; + GetFavoritesLabel(NodesToFavorites(cbxNodesListType.ItemIndex)).HelpContext := Integer(cbEnableNodesList.Checked); + CheckNodesListControls; + EnableOptionButtons; +end; + +procedure TTcp.CheckScannerControls; +var + PingState, AliveState, State, AutoState: Boolean; +begin + PingState := cbEnablePingMeasure.Checked; + AliveState := cbEnableDetectAliveNodes.Checked; + State := PingState or AliveState; + AutoState := State and cbAutoScanNewNodes.Checked; + + edFullScanInterval.Enabled := AutoState; + edNonResponsedScanInterval.Enabled := AutoState; + edPartialScansCounts.Enabled := AutoState; + edScanPingTimeout.Enabled := PingState; + edScanPortTimeout.Enabled := AliveState; + edDelayBetweenAttempts.Enabled := State; + edScanPortAttempts.Enabled := AliveState; + edScanPingAttempts.Enabled := PingState; + edScanMaxThread.Enabled := State; + edScanPortionTimeout.Enabled := State; + edScanPortionSize.Enabled := State; + udFullScanInterval.Enabled := AutoState; + udNonResponsedScanInterval.Enabled := AutoState; + udPartialScansCounts.Enabled := AutoState; + udScanPingTimeout.Enabled := PingState; + udScanPortTimeout.Enabled := AliveState; + udDelayBetweenAttempts.Enabled := State; + udScanPortAttempts.Enabled := AliveState; + udScanPingAttempts.Enabled := PingState; + udScanMaxThread.Enabled := State; + udScanPortionTimeout.Enabled := State; + udScanPortionSize.Enabled := State; + lbFullScanInterval.Enabled := AutoState; + lbHours1.Enabled := AutoState; + lbNonResponsedScanInterval.Enabled := AutoState; + lbHours2.Enabled := AutoState; + lbPartialScansCounts.Enabled := AutoState; + lbScanPingTimeout.Enabled := PingState; + lbMiliseconds1.Enabled := PingState; + lbScanPortTimeout.Enabled := AliveState; + lbMiliseconds2.Enabled := AliveState; + lbDelayBetweenAttempts.Enabled := State; + lbMiliseconds3.Enabled := State; + lbScanPortAttempts.Enabled := AliveState; + lbScanPingAttempts.Enabled := PingState; + lbScanMaxThread.Enabled := State; + lbScanPortionTimeout.Enabled := State; + lbMiliseconds4.Enabled := State; + lbScanPortionSize.Enabled := State; + cbAutoScanNewNodes.Enabled := State; + + if PingState and AliveState then + begin + sgFilter.ColWidths[FILTER_ALIVE] := Round(55 * Scale); + sgFilter.ColWidths[FILTER_PING] := Round(55 * Scale); + GridScrollCheck(sgFilter, FILTER_NAME, 280); + end + else + begin + if PingState and not AliveState then + begin + sgFilter.ColWidths[FILTER_ALIVE] := -1; + sgFilter.ColWidths[FILTER_PING] := Round(55 * Scale); + GridScrollCheck(sgFilter, FILTER_NAME, 336); + end + else + begin + if AliveState and not PingState then + begin + sgFilter.ColWidths[FILTER_ALIVE] := Round(55 * Scale); + sgFilter.ColWidths[FILTER_PING] := -1; + GridScrollCheck(sgFilter, FILTER_NAME, 336); + end + else + begin + sgFilter.ColWidths[FILTER_ALIVE] := -1; + sgFilter.ColWidths[FILTER_PING] := -1; + GridScrollCheck(sgFilter, FILTER_NAME, 392); + end; + end; + end; + + if PingState then + begin + sgCircuitInfo.ColWidths[CIRC_INFO_NAME] := Round(111 * Scale); + sgCircuitInfo.ColWidths[CIRC_INFO_IP] := Round(100 * Scale); + sgCircuitInfo.ColWidths[CIRC_INFO_COUNTRY] := Round(120 * Scale); + sgCircuitInfo.ColWidths[CIRC_INFO_PING] := Round(48 * Scale); + sgRouters.ColWidths[ROUTER_NAME] := Round(90 * Scale); + sgRouters.ColWidths[ROUTER_IP] := Round(88 * Scale); + sgRouters.ColWidths[ROUTER_PING] := Round(44 * Scale); + GridScrollCheck(sgRouters, ROUTER_COUNTRY, 105); + end + else + begin + sgCircuitInfo.ColWidths[CIRC_INFO_NAME] := Round(126 * Scale); + sgCircuitInfo.ColWidths[CIRC_INFO_IP] := Round(115 * Scale); + sgCircuitInfo.ColWidths[CIRC_INFO_COUNTRY] := Round(140 * Scale); + sgCircuitInfo.ColWidths[CIRC_INFO_PING] := -1; + sgRouters.ColWidths[ROUTER_NAME] := Round(105 * Scale); + sgRouters.ColWidths[ROUTER_IP] := Round(98 * Scale); + sgRouters.ColWidths[ROUTER_PING] := Round(-1 * Scale); + GridScrollCheck(sgRouters, ROUTER_COUNTRY, 125); + end; +end; + +procedure TTcp.cbEnablePingMeasureClick(Sender: TObject); +begin + if cbEnablePingMeasure.Focused then + begin + CheckScannerControls; + CheckStatusControls; + if cbEnablePingMeasure.Checked then + ConsensusUpdated := True; + EnableOptionButtons; + end; +end; + +procedure TTcp.cbEnableDetectAliveNodesClick(Sender: TObject); +begin + if cbEnableDetectAliveNodes.Focused then + begin + CheckScannerControls; + CheckStatusControls; + if cbEnableDetectAliveNodes.Checked then + ConsensusUpdated := True; + EnableOptionButtons; + end; +end; + +procedure TTcp.cbHsMaxStreamsClick(Sender: TObject); +begin + if not TCheckBox(Sender).Focused then + Exit; + HsMaxStreamsEnable(cbHsMaxStreams.Checked); + ChangeHsTable(2); +end; + +procedure TTcp.meBridgesChange(Sender: TObject); +begin + lbTotalBridges.Caption := TransStr('203') + ': ' + IntToStr(meBridges.Lines.Count); + EnableOptionButtons; +end; + +procedure TTcp.meLogMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if Button = mbLeft then + meLog.Tag := 1; +end; + +procedure TTcp.meLogMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if Button = mbLeft then + begin + if meLog.SelLength = 0 then + begin + meLog.Tag := 0; + CheckLogAutoScroll; + end; + end; +end; + +procedure TTcp.MemoKeyPress(Sender: TObject; var Key: Char); +begin + if CtrlKeyPressed('A') then + TMemo(Sender).SelectAll; +end; + +procedure TTcp.SaveSortData; +begin + SetConfigString('Main', 'SortData', + IntToStr(sgFilter.SortType) + ',' + IntToStr(sgFilter.SortCol) + ',' + + IntToStr(sgRouters.SortType) + ',' + IntToStr(sgRouters.SortCol) + ',' + + IntToStr(sgCircuits.SortType) + ',' + IntToStr(sgCircuits.SortCol) + ',' + + IntToStr(sgStreams.SortType) + ',' + IntToStr(sgStreams.SortCol) + ',' + + IntToStr(sgStreamsInfo.SortType) + ',' + IntToStr(sgStreamsInfo.SortCol) + ); +end; + +procedure TTcp.GridSort(aSg: TStringGrid); +var + aCompare: TStringListSortCompare; + aCol: Integer; +begin + case aSg.ColsDataType[aSg.SortCol] of + dtInteger: + if aSg.SortType = SORT_ASC then aCompare := CompIntAsc else aCompare := CompIntDesc; + dtSize: + if aSg.SortType = SORT_ASC then aCompare := CompSizeAsc else aCompare := CompSizeDesc; + dtParams: + if aSg.SortType = SORT_ASC then aCompare := CompParamsAsc else aCompare := CompParamsDesc; + else + if aSg.SortType = SORT_ASC then aCompare := CompTextAsc else aCompare := CompTextDesc; + end; + if aSg.ColsDataType[aSg.SortCol] = dtParams then + aCol := 0 + else + aCol := aSg.SortCol; + sgSort(aSg, aCol, aCompare); +end; + +procedure TTcp.SortPrepare(aSg: TStringGrid; ACol: Integer; ManualSort: Boolean = False); +var + ScrollTop: Boolean; +begin + if (aSg.SortCol = ACol) then + case aSg.SortType of + SORT_ASC: aSg.SortType := SORT_DESC; + SORT_DESC: aSg.SortType := SORT_ASC; + end + else + aSg.SortType := SORT_ASC; + aSg.SortCol := ACol; + aSg.RowID := aSg.Cells[0, aSg.SelRow]; + + GridSort(aSg); + case aSg.Tag of + GRID_FILTER: ScrollTop := miFilterScrollTop.Checked; + GRID_ROUTERS: ScrollTop := miRoutersScrollTop.Checked; + else + ScrollTop := False; + end; + SetGridLastCell(aSg, True, ScrollTop, ManualSort); + SaveSortData; +end; + +procedure TTcp.SelectCircuitsSort(Sender: TObject); +begin + TMenuItem(Sender).Checked := True; + SortPrepare(sgCircuits, TMenuItem(Sender).Tag); +end; + +procedure TTcp.sgCircuitsFixedCellClick(Sender: TObject; ACol, ARow: Integer); +begin + miCircuitsSort.Items[ACol].Checked := True; + SortPrepare(sgCircuits, ACol, True); +end; + +procedure TTcp.SelectStreamsSort(Sender: TObject); +begin + TMenuItem(Sender).Checked := True; + SortPrepare(sgStreams, TMenuItem(Sender).Tag); +end; + +procedure TTcp.SelectStreamsInfoSort(Sender: TObject); +begin + TMenuItem(Sender).Checked := True; + SortPrepare(sgStreamsInfo, TMenuItem(Sender).Tag); +end; + +procedure TTcp.sgStreamsFixedCellClick(Sender: TObject; ACol, ARow: Integer); +begin + miStreamsSort.Items[ACol].Checked := True; + SortPrepare(sgStreams, ACol, True); +end; + +procedure TTcp.meNodesListChange(Sender: TObject); +begin + lbTotalNodesList.Caption := TransStr('203') + ': ' + IntToStr(meNodesList.Lines.Count); + if not meNodesList.Focused then + Exit; + NodesListStage := 1; + EnableOptionButtons; +end; + +procedure TTcp.meNodesListExit(Sender: TObject); +begin + FindDialog.CloseDialog; + if NodesListStage = 1 then + SaveNodesList(cbxNodesListType.ItemIndex); +end; + +procedure TTcp.meMyFamilyChange(Sender: TObject); +begin + lbTotalMyFamily.Caption := TransStr('203') + ': ' + IntToStr(meMyFamily.Lines.Count); + EnableOptionButtons; +end; + +procedure TTcp.MaxMemInQueuesEnable(State: Boolean); +begin + edMaxMemInQueues.Enabled := State; + udMaxMemInQueues.Enabled := State; + lbMaxMemInQueues.Enabled := State; + lbSizeMb.Enabled := State; +end; + +procedure TTcp.cbUseMaxMemInQueuesClick(Sender: TObject); +begin + MaxMemInQueuesEnable(cbUseMaxMemInQueues.Checked); + EnableOptionButtons; +end; + +procedure TTcp.NumCPUsEnable(State: Boolean); +begin + edNumCPUs.Enabled := State; + udNumCPUs.Enabled := State; + lbNumCPUs.Enabled := State; +end; + +procedure TTcp.cbNoDesktopBordersClick(Sender: TObject); +begin + cbNoDesktopBordersOnlyEnlarged.Enabled := cbNoDesktopBorders.Checked; + EnableOptionButtons; +end; + +procedure TTcp.cbUseNumCPUsClick(Sender: TObject); +begin + NumCPUsEnable(cbUseNumCPUs.Checked); + EnableOptionButtons; +end; + +procedure TTcp.RelayBandwidthEnable(State: Boolean); +begin + edRelayBandwidthRate.Enabled := State; + edRelayBandwidthBurst.Enabled := State; + edMaxAdvertisedBandwidth.Enabled := State; + udRelayBandwidthRate.Enabled := State; + udRelayBandwidthBurst.Enabled := State; + udMaxAdvertisedBandwidth.Enabled := State; + lbRelayBandwidthRate.Enabled := State; + lbRelayBandwidthBurst.Enabled := State; + lbMaxAdvertisedBandwidth.Enabled := State; + lbSpeed1.Enabled := State; + lbSpeed2.Enabled := State; + lbSpeed4.Enabled := State; +end; + +procedure TTcp.cbUseReachableAddressesClick(Sender: TObject); +var + State: Boolean; +begin + State := cbUseReachableAddresses.Checked; + edReachableAddresses.Enabled := State; + lbReachableAddresses.Enabled := State; + EnableOptionButtons; +end; + +procedure TTcp.cbUseRelayBandwidthClick(Sender: TObject); +begin + RelayBandwidthEnable(cbUseRelayBandwidth.Checked); + EnableOptionButtons; +end; + +procedure TTcp.cbxRoutersCountryChange(Sender: TObject); +begin + if cbxRoutersCountry.ItemIndex <> -1 then + begin + cbxRoutersCountry.Tag := Integer(cbxRoutersCountry.Items.Objects[cbxRoutersCountry.ItemIndex]); + ShowRouters; + SaveRoutersFilterdata; + end; +end; + +procedure TTcp.cbxRoutersCountryDropDown(Sender: TObject); +begin + ComboBoxAutoWidth(cbxRoutersCountry); +end; + +procedure TTcp.cbxRoutersCountryEnter(Sender: TObject); +begin + ActivateKeyboardLayout(CurrentLanguage, 0); +end; + +procedure TTcp.cbxRoutersQueryChange(Sender: TObject); +begin + SaveRoutersFilterdata(False, False); +end; + +procedure TTcp.cbShowBalloonHintClick(Sender: TObject); +begin + cbShowBalloonOnlyWhenHide.Enabled := cbShowBalloonHint.Checked; + EnableOptionButtons; +end; + +procedure TTcp.cbStayOnTopClick(Sender: TObject); +begin + if cbStayOnTop.Checked then + FormStyle := fsStayOnTop + else + FormStyle := fsNormal; + EnableOptionButtons; +end; + +procedure TTcp.cbUseTrackHostExitsClick(Sender: TObject); +var + State: Boolean; +begin + State := cbUseTrackHostExits.Checked; + edTrackHostExitsExpire.Enabled := State; + udTrackHostExitsExpire.Enabled := State; + meTrackHostExits.Enabled := State; + lbTrackHostExitsExpire.Enabled := State; + lbSeconds4.Enabled := State; + lbTotalHosts.Enabled := State; + EnableOptionButtons; +end; + +function TTcp.PreferredBridgeFound: Boolean; +var + RouterID: string; +begin + LastPreferredBridgeHash := ''; + Result := TryGetDataFromStr(edPreferredBridge.Text, ltHash, RouterID); + if Result then + begin + Result := RoutersDic.ContainsKey(RouterID); + if Result then + LastPreferredBridgeHash := RouterID; + end; +end; + +procedure TTcp.BridgesCheckControls; +var + State, BuiltinState, PreferredState: Boolean; +begin + if cbUseBridges.HelpContext = 1 then + Exit; + State := cbUseBridges.Checked; + PreferredState := State and cbUsePreferredBridge.Checked; + BuiltinState := State and (cbxBridgesType.ItemIndex = BRIDGES_TYPE_BUILTIN) and (cbxBridgesList.Items.Count > 0); + + edPreferredBridge.Enabled := PreferredState; + cbxBridgesType.Enabled := State; + cbxBridgesList.Enabled := BuiltinState; + cbUsePreferredBridge.Enabled := State; + meBridges.Enabled := BuiltinState or (State and (cbxBridgesType.ItemIndex = BRIDGES_TYPE_USER)); + meBridges.ReadOnly := cbxBridgesType.ItemIndex = BRIDGES_TYPE_BUILTIN; + btnFindPreferredBridge.Enabled := PreferredState and PreferredBridgeFound; + lbBridgesType.Enabled := State; + lbBridgesList.Enabled := BuiltinState; + lbTotalBridges.Enabled := State; + lbTotalBridges.Caption := TransStr('203') + ': ' + IntToStr(meBridges.Lines.Count); + lbPreferredBridge.Enabled := PreferredState; +end; + +procedure TTcp.cbUseBridgesClick(Sender: TObject); +begin + if not cbUseBridges.Focused then + Exit; + BridgesUpdated := True; + BridgesCheckControls; + EnableOptionButtons; +end; + +procedure TTcp.cbUseBridgesExit(Sender: TObject); +begin + UpdateRoutersAfterBridgesUpdate; +end; + +procedure TTcp.UseDirPortEnable(State: Boolean); +begin + edDirPort.Enabled := State; + udDirPort.Enabled := State; + if State then + begin + cbDirCache.Checked := True; + cbDirCache.Enabled := False; + end + else + begin + if cbxServerMode.ItemIndex > 0 then + cbDirCache.Enabled := True + else + cbDirCache.Enabled := False; + end; + lbDirPort.Enabled := State; +end; + +procedure TTcp.cbUseDirPortClick(Sender: TObject); +begin + UseDirPortEnable(cbUseDirPort.Checked); + EnableOptionButtons; +end; + +procedure TTcp.cbUseNetworkCacheClick(Sender: TObject); +begin + if not cbUseNetworkCache.Focused then + Exit; + SaveNetworkCache; + EnableOptionButtons; +end; + +procedure TTcp.cbUseHiddenServiceVanguardsClick(Sender: TObject); +var + State: Boolean; +begin + State := cbUseHiddenServiceVanguards.Checked; + cbxVanguardLayerType.Enabled := State; + lbVanguardLayerType.Enabled := State; + if cbUseHiddenServiceVanguards.Focused then + EnableOptionButtons; +end; + +procedure TTcp.cbUseMyFamilyClick(Sender: TObject); +begin + if FirstLoad then + Exit; + MyFamilyEnable(cbUseMyFamily.Checked); + if cbUseMyFamily.Checked then + begin + if meMyFamily.CanFocus then + meMyFamily.SetFocus; + end; + EnableOptionButtons; +end; + +procedure TTcp.cbUseOpenDNSClick(Sender: TObject); +begin + cbUseOpenDNSOnlyWhenUnknown.Enabled := cbUseOpenDNS.Checked; + OpenDNSUpdated := True; + EnableOptionButtons; +end; + +procedure TTcp.cbUseOpenDNSOnlyWhenUnknownClick(Sender: TObject); +begin + OpenDNSUpdated := True; + EnableOptionButtons; +end; + +procedure TTcp.ProxyParamCheck; +var + State: Boolean; +begin + State := cbxProxyType.ItemIndex <> PROXY_TYPE_SOCKS4; + edProxyUser.Enabled := State; + edProxyPassword.Enabled := State; + if not State then + begin + edProxyUser.Text := ''; + edProxyPassword.Text := ''; + end; + lbProxyUser.Enabled := State; + lbProxyPassword.Enabled := State; +end; + +procedure TTcp.cbxProxyTypeChange(Sender: TObject); +begin + ProxyParamCheck; + EnableOptionButtons; +end; + +procedure TTcp.cbUsePreferredBridgeClick(Sender: TObject); +begin + if not cbUsePreferredBridge.Focused then + Exit; + BridgesUpdated := True; + BridgesCheckControls; + EnableOptionButtons; +end; + +procedure TTcp.cbUsePreferredBridgeExit(Sender: TObject); +begin + UpdateRoutersAfterBridgesUpdate; +end; + +procedure TTcp.cbUseProxyClick(Sender: TObject); +var + State: Boolean; +begin + State := cbUseProxy.Checked; + edProxyAddress.Enabled := State; + edProxyPort.Enabled := State; + udProxyPort.Enabled := State; + cbxProxyType.Enabled := State; + if State then + ProxyParamCheck + else + begin + edProxyUser.Enabled := False; + edProxyPassword.Enabled := False; + lbProxyUser.Enabled := False; + lbProxyPassword.Enabled := False; + end; + lbProxyType.Enabled := State; + lbProxyAddress.Enabled := State; + lbProxyPort.Enabled := State; + EnableOptionButtons; +end; + +procedure TTcp.cbUseUPnPClick(Sender: TObject); +begin + imUPnPTest.Visible := cbUseUPnP.Checked; + EnableOptionButtons; +end; + +procedure TTcp.CheckAuthMetodContols; +var + State: Boolean; +begin + State := cbxAuthMetod.ItemIndex = 1; + edControlPassword.PasswordChar := '*'; + edControlPassword.Enabled := State; + lbControlPassword.Enabled := State; + imGeneratePassword.Enabled := State; + imGeneratePassword.ShowHint := State; +end; + +procedure TTcp.cbLearnCircuitBuildTimeoutClick(Sender: TObject); +var + State: Boolean; +begin + State := not cbLearnCircuitBuildTimeout.Checked; + edCircuitBuildTimeout.Enabled := State; + udCircuitBuildTimeout.Enabled := State; + lbCircuitBuildTimeout.Enabled := State; + lbSeconds2.Enabled := State; + EnableOptionButtons; +end; + +procedure TTcp.cbListenIPv6Click(Sender: TObject); +begin + if cbListenIPv6.Checked and (cbxServerMode.ItemIndex = 2) then + cbIPv6Exit.Enabled := True + else + cbIPv6Exit.Enabled := False; + EnableOptionButtons; +end; + +procedure TTcp.cbxAuthMetodChange(Sender: TObject); +begin + CheckAuthMetodContols; + EnableOptionButtons; +end; + +procedure TTcp.cbxAutoSelPriorityChange(Sender: TObject); +begin + CheckAutoSelControls; + EnableOptionButtons; +end; + +procedure TTCP.CheckAutoSelControls; +begin + cbAutoSelNodesWithPingOnly.Enabled := cbxAutoSelPriority.ItemIndex in [1, 3]; +end; + +procedure TTcp.TransportPortEnable(State: Boolean); +begin + edTransportPort.Enabled := State; + udTransportPort.Enabled := State; + lbTransportPort.Enabled := State; +end; + +procedure TTcp.cbxBridgesListChange(Sender: TObject); +begin + UpdateBridgesControls(False); +end; + +procedure TTcp.cbxBridgesListCloseUp(Sender: TObject); +begin + if meBridges.CanFocus then + meBridges.SetFocus; +end; + +procedure TTcp.cbxBridgesListKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key = VK_RETURN) and meBridges.CanFocus then + meBridges.SetFocus; +end; + +procedure TTcp.cbxBridgeTypeChange(Sender: TObject); +begin + TransportPortEnable(cbxBridgeType.ItemIndex > 0); + EnableOptionButtons; +end; + +procedure TTcp.UpdateBridgesControls(UpdateList: Boolean = True; UpdateUserBridges: Boolean = True); +var + ini: TMemIniFile; +begin + case cbxBridgesType.ItemIndex of + BRIDGES_TYPE_BUILTIN: + LoadBuiltinBridges(True, UpdateList, cbxBridgesList.Text); + BRIDGES_TYPE_USER: + begin + if UpdateUserBridges and FileExists(UserConfigFile) then + begin + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + LoadUserBridges(ini); + finally + ini.Free; + end; + end; + end; + end; + BridgesCheckControls; + EnableOptionButtons; +end; + +procedure TTcp.cbxBridgesTypeChange(Sender: TObject); +begin + UpdateBridgesControls; +end; + +procedure TTcp.cbxBridgesTypeCloseUp(Sender: TObject); +begin + if meBridges.CanFocus then + meBridges.SetFocus; +end; + +procedure TTcp.cbxBridgesTypeKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key = VK_RETURN) and meBridges.CanFocus then + meBridges.SetFocus; +end; + +procedure TTcp.cbxHsAddressChange(Sender: TObject); +begin + sgHsPorts.Cells[HSP_INTERFACE, sgHsPorts.SelRow] := cbxHsAddress.Text; + UpdateHsPorts; + EnableOptionButtons; +end; + +procedure TTcp.cbxHsAddressDropDown(Sender: TObject); +begin + GetLocalInterfaces(cbxHsAddress); +end; + +procedure TTcp.CheckHsVersion; +begin + case cbxHsVersion.ItemIndex of + HS_VERSION_2: + begin + udHsNumIntroductionPoints.Min := 1; + udHsNumIntroductionPoints.Max := 10; + end; + HS_VERSION_3: + begin + udHsNumIntroductionPoints.Min := 3; + udHsNumIntroductionPoints.Max := 20; + end; + end; + if udHsNumIntroductionPoints.Position < udHsNumIntroductionPoints.Min then + begin + udHsNumIntroductionPoints.Position := udHsNumIntroductionPoints.Min; + sgHs.Cells[HS_INTRO_POINTS, sgHs.SelRow] := IntToStr(udHsNumIntroductionPoints.Position); + end; + + if udHsNumIntroductionPoints.Position > udHsNumIntroductionPoints.Max then + begin + udHsNumIntroductionPoints.Position := udHsNumIntroductionPoints.Max; + sgHs.Cells[HS_INTRO_POINTS, sgHs.SelRow] := IntToStr(udHsNumIntroductionPoints.Position); + end; +end; + +procedure TTcp.cbxHsVersionChange(Sender: TObject); +begin + if cbxHsVersion.ItemIndex = HS_VERSION_2 then + begin + if not ShowMsg(TransStr('326'), '', mtWarning, True) then + begin + cbxHsVersion.ItemIndex := HS_VERSION_3; + Exit; + end; + end; + CheckHsVersion; + case cbxHsVersion.ItemIndex of + HS_VERSION_2: sgHs.Cells[HS_VERSION, sgHs.SelRow] := '2'; + HS_VERSION_3: sgHs.Cells[HS_VERSION, sgHs.SelRow] := '3'; + end; + EnableOptionButtons; +end; + +procedure TTcp.MyFamilyEnable(State: Boolean); +begin + meMyFamily.Enabled := State; + lbTotalMyFamily.Enabled := State; +end; + +function TTcp.NodesToFavorites(NodesID: Integer): Integer; +begin + case NodesID of + NL_TYPE_ENTRY: Result := ENTRY_ID; + NL_TYPE_MIDDLE: Result := MIDDLE_ID; + NL_TYPE_EXIT: Result := EXIT_ID; + NL_TYPE_EXLUDE: Result := EXCLUDE_ID; + else + Result := -1; + end; +end; + +function TTcp.FavoritesToNodes(FavoritesID: Integer): Integer; +begin + case FavoritesID of + ENTRY_ID: Result := NL_TYPE_ENTRY; + MIDDLE_ID: Result := NL_TYPE_MIDDLE; + EXIT_ID: Result := NL_TYPE_EXIT; + EXCLUDE_ID: Result := NL_TYPE_EXLUDE; + else + Result := -1; + end; +end; + +procedure TTcp.CalculateFilterNodes(AlwaysUpdate: Boolean = True); +const + differ = FILTER_ENTRY_NODES; +var + FilterItem: TPair; + NodeType: TNodeTypes; + Counters: array[0..3] of integer; + lbComponent: TLabel; + IsExclude: Boolean; + i, j: Integer; +begin + for i := 0 to Length(Counters) - 1 do + Counters[i] := 0; + for FilterItem in FilterDic do + begin + if NodesDic.TryGetValue(FilterItem.Key, NodeType) then + IsExclude := ntExclude in NodeType + else + IsExclude := False; + + if IsExclude then + Inc(Counters[3]) + else + begin + NodeType := FilterItem.Value.Data; + if ntEntry in NodeType then Inc(Counters[0]); + if ntMiddle in NodeType then Inc(Counters[1]); + if ntExit in NodeType then Inc(Counters[2]); + end; + end; + + for i := FILTER_ENTRY_NODES to FILTER_EXCLUDE_NODES do + begin + lbComponent := GetFilterLabel(i); + j := i - differ; + if AlwaysUpdate or (lbComponent.Tag <> Counters[j]) then + begin + lbComponent.Tag := Counters[j]; + lbComponent.Caption := TransStr(lbComponent.Hint) + ': ' + IntToStr(Counters[j]) + end; + end; +end; + +procedure TTCP.CalculateTotalNodes(AlwaysUpdate: Boolean = True); +const + differ = ENTRY_ID; +var + NodeItem: TPair; + Counters: array[0..4] of integer; + lbComponent: TLabel; + ls: TStringList; + i, j: Integer; +begin + for i := 0 to Length(Counters) - 1 do + Counters[i] := 0; + + ls := TStringList.Create; + try + for NodeItem in NodesDic do + begin + if NodeItem.Value = [] then + begin + RangesDic.Remove(NodeItem.Key); + ls.Add(NodeItem.Key); + end; + end; + for i := 0 to ls.Count - 1 do + NodesDic.Remove(ls[i]); + finally + ls.Free; + end; + + for NodeItem in NodesDic do + begin + if ntEntry in NodeItem.Value then Inc(Counters[0]); + if ntMiddle in NodeItem.Value then Inc(Counters[1]); + if ntExit in NodeItem.Value then Inc(Counters[2]); + if ntExclude in NodeItem.Value then Inc(Counters[3]) else Inc(Counters[4]); + end; + + for i := ENTRY_ID to FAVORITES_ID do + begin + lbComponent := GetFavoritesLabel(i); + j := i - differ; + if AlwaysUpdate or (lbComponent.Tag <> Counters[j]) then + begin + lbComponent.Tag := Counters[j]; + lbComponent.Caption := TransStr(lbComponent.Hint) + ': ' + IntToStr(Counters[j]) + end; + end; +end; + +procedure TTcp.cbxNodesListTypeChange(Sender: TObject); +begin + LoadNodesList; + SetConfigInteger('Lists', 'NodesListType', cbxNodesListType.ItemIndex); +end; + +procedure TTcp.cbxNodesListTypeKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key = VK_RETURN) and meNodesList.CanFocus then + meNodesList.SetFocus; +end; + +procedure TTcp.SaveNodesList(NodesID: Integer); +var + FavoritesID: Integer; + NodesList: string; +begin + FavoritesID := NodesToFavorites(NodesID); + ClearRouters(TNodeType(FavoritesID)); + NodesList := MemoToLine(meNodesList, ltNode, True); + GetNodes(NodesList, TNodeType(FavoritesID), True); + CalculateTotalNodes; + if NodesListStage > 0 then + NodesListStage := 0; + ShowRouters; + FilterUpdated := True; + UpdateOptionsAfterRoutersUpdate; +end; + +procedure TTcp.LoadNodesList(UseDic: Boolean = True; NodesStr: string = ''); +var + NodeItem: TPair; + NodeType: TNodeType; + FavoritesID: Integer; +begin + FavoritesID := NodesToFavorites(cbxNodesListType.ItemIndex); + if UseDic then + begin + NodesStr := ''; + NodeType := TNodeType(FavoritesID); + for NodeItem in NodesDic do + if NodeType in NodeItem.Value then + NodesStr := NodesStr + ',' + NodeItem.Key; + Delete(NodesStr, 1, 1); + end; + + LineToMemo(RemoveBrackets(NodesStr), meNodesList, ltNode, True); + if UseDic then + CheckFavoritesState(FavoritesID); +end; + +procedure TTcp.CheckFavoritesState(FavoritesID: Integer = -1); +var + StartPos, EndPos, i: Integer; + lbComponent: TLabel; +begin + if FavoritesID in [ENTRY_ID..EXCLUDE_ID] then + begin + StartPos := FavoritesID; + EndPos := FavoritesID; + end + else + begin + StartPos := ENTRY_ID; + EndPos := EXCLUDE_ID; + end; + for i := StartPos to EndPos do + begin + lbComponent := GetFavoritesLabel(i); + if lbComponent.Tag = 0 then + lbComponent.HelpContext := 0; + if NodesToFavorites(cbxNodesListType.ItemIndex) = i then + cbEnableNodesList.Checked := Boolean(lbComponent.HelpContext); + end; + CheckNodesListControls; +end; + +procedure TTcp.CheckNodesListControls; +var + State: Boolean; +begin + State := cbEnableNodesList.Checked; + meNodesList.Enabled := State; + lbTotalNodesList.Enabled := State; +end; + +procedure TTcp.CheckServerControls; +var + State: Boolean; +begin + if cbxServerMode.HelpContext = 1 then + Exit; + State := cbxServerMode.ItemIndex <> 0; + edNickname.Enabled := State; + edContactInfo.Enabled := State; + edORPort.Enabled := State; + udOrPort.Enabled := State; + cbUseRelayBandwidth.Enabled := State; + cbUseMaxMemInQueues.Enabled := State; + cbUseNumCPUs.Enabled := State; + cbUseUPnP.Enabled := State; + cbPublishServerDescriptor.Enabled := State; + cbDirReqStatistics.Enabled := State; + cbHiddenServiceStatistics.Enabled := State; + cbAssumeReachable.Enabled := State; + cbListenIPv6.Enabled := State; + cbUseAddress.Enabled := State; + if State then + begin + if cbUseRelayBandwidth.Checked then + RelayBandwidthEnable(True); + if cbUseMaxMemInQueues.Checked then + MaxMemInQueuesEnable(True); + if cbUseNumCPUs.Checked then + NumCPUsEnable(True); + if cbUseAddress.Checked then + ServerAddressEnable(True); + if cbxServerMode.ItemIndex <> 3 then + begin + MyFamilyEnable(cbUseMyFamily.Checked); + UseDirPortEnable(cbUseDirPort.Checked); + cbUseMyFamily.Enabled := True; + end + else + begin + cbUseMyFamily.Enabled := False; + MyFamilyEnable(False); + end; + imUPnPTest.Visible := True; + lbNickname.Enabled := True; + lbContactInfo.Enabled := True; + lbPorts.Enabled := True; + lbORPort.Enabled := True; + end + else + begin + cbUseDirPort.Enabled := False; + cbUseMyFamily.Enabled := False; + TransportPortEnable(False); + UseDirPortEnable(False); + RelayBandwidthEnable(False); + MaxMemInQueuesEnable(False); + NumCPUsEnable(False); + MyFamilyEnable(False); + ServerAddressEnable(False); + meExitPolicy.Enabled := False; + imUPnPTest.Visible := False; + lbNickname.Enabled := False; + lbContactInfo.Enabled := False; + lbPorts.Enabled := False; + lbORPort.Enabled := False; + lbTotalMyFamily.Enabled := False; + end; + + if cbxServerMode.ItemIndex = 2 then + begin + if cbListenIPv6.Checked then + cbIPv6Exit.Enabled := True; + cbxExitPolicyType.Enabled := True; + meExitPolicy.enabled := cbxExitPolicyType.ItemIndex = 2; + lbExitPolicy.Enabled := True; + end + else + begin + cbIPv6Exit.Enabled := False; + cbxExitPolicyType.Enabled := False; + meExitPolicy.enabled := False; + lbExitPolicy.Enabled := False; + end; + + if cbxServerMode.ItemIndex = 3 then + begin + cbUseDirPort.Checked := False; + cbUseDirPort.Enabled := False; + cbDirCache.Enabled := False; + cbDirCache.Checked := True; + cbxBridgeType.Enabled := True; + cbxBridgeDistribution.Enabled := True; + cbUseMyFamily.Checked := False; + TransportPortEnable(cbxBridgeType.ItemIndex > 0); + lbBridgeType.Enabled := True; + lbBridgeDistribution.Enabled := True; + end + else + begin + cbxBridgeType.Enabled := False; + cbxBridgeDistribution.Enabled := False; + if cbxServerMode.ItemIndex > 0 then + cbUseDirPort.Enabled := True; + TransportPortEnable(False); + lbBridgeType.Enabled := False; + lbBridgeDistribution.Enabled := False; + end; +end; + +procedure TTcp.cbxServerModeChange(Sender: TObject); +begin + CheckServerControls; + EnableOptionButtons +end; + +procedure TTcp.cbxHsStateChange(Sender: TObject); +begin + case cbxHsState.ItemIndex of + HS_STATE_ENABLED: sgHs.Cells[HS_STATE, sgHs.SelRow] := SELECT_CHAR; + HS_STATE_DISABLED: sgHs.Cells[HS_STATE, sgHs.SelRow] := FAVERR_CHAR; + end; + EnableOptionButtons; +end; + +procedure TTcp.cbxSocksHostDropDown(Sender: TObject); +begin + GetLocalInterfaces(cbxSocksHost, '', True); +end; + +procedure TTcp.cbxThemesChange(Sender: TObject); +begin + LoadStyle(cbxThemes); + SetIconsColor; + EnableOptionButtons; +end; + +procedure TTcp.cbxThemesDropDown(Sender: TObject); +begin + LoadThemesList(cbxThemes, ''); +end; + +procedure TTcp.cbxTransportTypeChange(Sender: TObject); +begin + sgTransports.Cells[PT_TYPE, sgTransports.SelRow] := GetTransportChar(cbxTransportType.ItemIndex); + EnableOptionButtons; +end; + +procedure TTcp.ChangeTransportTable(Param: Integer); +begin + case Param of + 1: sgTransports.Cells[PT_TRANSPORTS, sgTransports.SelRow] := StringReplace(edTransports.Text, ' ', '', [rfReplaceAll]); + 2: sgTransports.Cells[PT_HANDLER, sgTransports.SelRow] := StringReplace(edTransportsHandler.Text, ' ', '', [rfReplaceAll]); + 3: sgTransports.Cells[PT_PARAMS, sgTransports.SelRow] := Trim(meHandlerParams.Text); + end; + EnableOptionButtons; +end; + +procedure TTcp.ChangeHsTable(Param: Integer); +begin + if mnHs.Tag = 1 then + Exit; + case Param of + 0: sgHs.Cells[HS_NAME, sgHs.SelRow] := edHsName.Text; + 1: sgHs.Cells[HS_INTRO_POINTS, sgHs.SelRow] := IntToStr(udHsNumIntroductionPoints.Position); + 2: + begin + if cbHsMaxStreams.Checked then + sgHs.Cells[HS_MAX_STREAMS, sgHs.SelRow] := IntToStr(udHsMaxStreams.Position) + else + begin + sgHs.Cells[HS_MAX_STREAMS, sgHs.SelRow] := NONE_CHAR; + udHsMaxStreams.Position := 32; + end; + end; + 3: sgHsPorts.Cells[HSP_REAL_PORT, sgHsPorts.SelRow] := IntToStr(udHsRealPort.Position); + 4: sgHsPorts.Cells[HSP_VIRTUAL_PORT, sgHsPorts.SelRow] := IntToStr(udHsVirtualPort.Position); + end; + if Param in [3, 4] then + UpdateHsPorts; + EnableOptionButtons; +end; + +procedure TTcp.edControlPasswordDblClick(Sender: TObject); +begin + if edControlPassword.PasswordChar = '*' then + edControlPassword.PasswordChar := #0 + else + edControlPassword.PasswordChar := '*'; +end; + +procedure TTcp.edTransportsChange(Sender: TObject); +begin + if CtrlKeyPressed('A') then + Exit; + if TCustomEdit(Sender).Focused then + ChangeTransportTable(TEdit(Sender).Tag) +end; + +procedure TTcp.edHsChange(Sender: TObject); +var + UD: TUpDown; +begin + if CtrlKeyPressed('A') then + Exit; + if TEdit(Sender).Focused then + ChangeHsTable(TEdit(Sender).HelpContext) + else + begin + UD := GetAssocUpDown(TEdit(Sender).Name); + if UD <> nil then + UD.Enabled := TEdit(Sender).Enabled; + end; +end; + +procedure TTcp.udHsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +begin + ChangeHsTable(TUpDown(Sender).Tag); +end; + +procedure TTcp.udRoutersWeightClick(Sender: TObject; Button: TUDBtnType); +begin + ShowRouters; + SaveRoutersFilterdata; +end; + +procedure TTcp.EditChange(Sender: TObject); +begin + if TEdit(Sender).Focused then + begin + if CtrlKeyPressed('A') then + Exit; + EnableOptionButtons; + end; +end; + +procedure TTcp.MemoExit(Sender: TObject); +begin + FindDialog.CloseDialog; +end; + +procedure TTcp.SetDownState; +begin + case LastPlace of + LP_OPTIONS: sbShowOptions.Down := True; + LP_LOG: sbShowLog.Down := True; + LP_STATUS: sbShowStatus.Down := True; + LP_CIRCUITS: sbShowCircuits.Down := True; + LP_ROUTERS: sbShowRouters.Down := True; + end; +end; + +procedure TTcp.sbShowOptionsClick(Sender: TObject); +begin + LastPlace := LP_OPTIONS; + UpdateOptionsAfterRoutersUpdate; + IncreaseFormSize; + ResetFocus; +end; + +procedure TTcp.sbShowOptionsMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if (pcOptions.TabIndex = 2) and (ssDouble in Shift) and (Button = mbLeft) then + SetGridLastCell(sgFilter, True, True, True); +end; + +procedure TTcp.sbShowRoutersClick(Sender: TObject); +begin + LastPlace := LP_ROUTERS; + IncreaseFormSize; + ResetFocus; +end; + +procedure TTcp.sbShowRoutersMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if (ssDouble in Shift) and (Button = mbLeft) then + SetGridLastCell(sgRouters, True, True, True); +end; + +procedure TTcp.sbShowStatusClick(Sender: TObject); +begin + LastPlace := LP_STATUS; + IncreaseFormSize; + ResetFocus; +end; + +procedure TTcp.sbDecreaseFormClick(Sender: TObject); +begin + CheckOptionsChanged; + DecreaseFormSize; +end; + +procedure TTcp.sbShowCircuitsClick(Sender: TObject); +begin + LastPlace := LP_CIRCUITS; + IncreaseFormSize; + ResetFocus; +end; + +procedure TTcp.sbShowCircuitsMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if (ssDouble in Shift) and (Button = mbLeft) then + begin + ShowCircuits; + FindInCircuits(Circuit, ExitNodeID, True); + end; +end; + +procedure TTcp.CheckLogAutoScroll(AlwaysUpdate: Boolean = False); +begin + if AlwaysUpdate or (miAutoScroll.Checked and (meLog.Tag = 0)) then + meLog.Perform(WM_VSCROLL, SB_BOTTOM, 0); +end; + +procedure TTcp.sbShowLogClick(Sender: TObject); +begin + LastPlace := LP_LOG; + CheckLogAutoScroll; + IncreaseFormSize; + ResetFocus; +end; + +procedure TTcp.SpinChanging(Sender: TObject; var AllowChange: Boolean); +begin + EnableOptionButtons; +end; + +procedure TTcp.edPreferredBridgeChange(Sender: TObject); +begin + if CtrlKeyPressed('A') then + Exit; + if not TEdit(Sender).Focused then + Exit; + btnFindPreferredBridge.Enabled := PreferredBridgeFound; + BridgesUpdated := True; + EnableOptionButtons; +end; + +procedure TTcp.edPreferredBridgeExit(Sender: TObject); +begin + UpdateRoutersAfterBridgesUpdate; +end; + +procedure TTcp.edReachableAddressesKeyPress(Sender: TObject; + var Key: Char); +begin + if not CharInSet(Key, ['0'..'9', #44, #8]) then + Key := #0; +end; + +procedure TTcp.edRoutersWeightKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key = VK_RETURN then + begin + ShowRouters; + SaveRoutersFilterdata; + end; +end; + +procedure TTcp.edRoutersWeightMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + ShowRouters; + SaveRoutersFilterdata; +end; + +procedure TTcp.edRoutersQueryChange(Sender: TObject); +var + Query: string; + Data: Integer; + procedure SetIndex(Index: Integer); + begin + if (cbxRoutersQuery.ItemIndex <> Index) and + InRange(Index, 0, cbxRoutersQuery.Items.Count - 1) then + cbxRoutersQuery.ItemIndex := Index; + end; +begin + Query := Trim(edRoutersQuery.Text); + if ValidHash(Query) then + SetIndex(0) + else + begin + Data := ValidAddress(RemoveBrackets(Query, True)); + if Data <> 0 then + begin + if Data = 1 then + begin + if SeparateLeft(Query, '.') <> '0' then + SetIndex(2) + else + SetIndex(6) + end + else + SetIndex(3) + end; + end; +end; + +procedure TTcp.edRoutersQueryKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key = VK_RETURN then + begin + SaveRoutersFilterdata(False, False); + LoadRoutersFilterData(LastRoutersFilter, False, True); + if Trim(edRoutersQuery.Text) <> '' then + begin + if (miDisableFiltersOnUserQuery.Checked and not (ssCtrl in Shift)) + or (not miDisableFiltersOnUserQuery.Checked and (ssCtrl in Shift)) then + RoutersCustomFilter := FILTER_BY_QUERY; + end + else + edRoutersQuery.Text := ''; + CheckShowRouters; + ShowRouters; + SaveRoutersFilterdata(False, False); + end; +end; + +procedure TTcp.RestoreForm; +begin + Tcp.Visible := True; + Application.Restore; + Application.BringToFront; +end; + +procedure TTcp.miShowLogClick(Sender: TObject); +begin + RestoreForm; + sbShowLog.Click; +end; + +procedure TTcp.miShowOptionsClick(Sender: TObject); +begin + RestoreForm; + sbShowOptions.Click; +end; + +procedure TTcp.miShowStatusClick(Sender: TObject); +begin + RestoreForm; + sbShowStatus.Click; +end; + +procedure TTcp.miShowStreamsInfoClick(Sender: TObject); +begin + CheckStreamsControls; + SetConfigBoolean('Circuits', 'ShowStreamsInfo', miShowStreamsInfo.Checked); +end; + +procedure TTcp.miShowCircuitsClick(Sender: TObject); +begin + RestoreForm; + sbShowCircuits.Click; +end; + +procedure TTcp.miShowFlagsHintClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'ShowFlagsHint', miShowFlagsHint.Checked); +end; + +procedure TTcp.CheckStreamsControls; +begin + lbDLCirc.Visible := miShowCircuitsTraffic.Checked; + lbULCirc.Visible := miShowCircuitsTraffic.Checked; + sgStreamsInfo.Visible := miShowStreamsInfo.Checked; + if miShowStreamsInfo.Checked then + sgStreams.Height := Round(158 * Scale) + else + sgStreams.Height := Round(275 * Scale); + + if miShowStreamsTraffic.Checked then + begin + sgStreams.ColWidths[STREAMS_BYTES_READ] := Round(60 * Scale); + sgStreams.ColWidths[STREAMS_BYTES_WRITTEN] := Round(60 * Scale); + GridScrollCheck(sgStreams, STREAMS_TARGET, 301); + sgStreamsInfo.ColWidths[STREAMS_INFO_SOURCE_ADDR] := Round(118 * Scale); + sgStreamsInfo.ColWidths[STREAMS_INFO_DEST_ADDR] := Round(118 * Scale); + sgStreamsInfo.ColWidths[STREAMS_INFO_BYTES_READ] := Round(60 * Scale); + sgStreamsInfo.ColWidths[STREAMS_INFO_BYTES_WRITTEN] := Round(60 * Scale); + GridScrollCheck(sgStreamsInfo, STREAMS_INFO_PURPOSE, 119); + end + else + begin + sgStreams.ColWidths[STREAMS_BYTES_READ] := -1; + sgStreams.ColWidths[STREAMS_BYTES_WRITTEN] := -1; + GridScrollCheck(sgStreams, STREAMS_TARGET, 424); + sgStreamsInfo.ColWidths[STREAMS_INFO_SOURCE_ADDR] := Round(158 * Scale); + sgStreamsInfo.ColWidths[STREAMS_INFO_DEST_ADDR] := Round(158 * Scale); + sgStreamsInfo.ColWidths[STREAMS_INFO_BYTES_READ] := -1; + sgStreamsInfo.ColWidths[STREAMS_INFO_BYTES_WRITTEN] := -1; + GridScrollCheck(sgStreamsInfo, STREAMS_INFO_PURPOSE, 163); + end; +end; + +procedure TTcp.ShowTrafficSelect(Sender: TObject); +begin + CheckStreamsControls; + if ConnectState = 2 then + SendCommand('SETEVENTS ' + GetControlEvents); + case TMenuItem(Sender).Tag of + 1: SetConfigBoolean('Circuits', 'ShowCircuitsTraffic', miShowCircuitsTraffic.Checked); + 2: SetConfigBoolean('Circuits', 'ShowStreamsTraffic', miShowStreamsTraffic.Checked); + end; +end; + +procedure TTcp.FastAndStableEnable(State: Boolean; AutoCheck: Boolean = True); +begin + miShowFast.Enabled := State; + miShowStable.Enabled := State; + if AutoCheck and not State then + begin + miShowFast.Checked := True; + miShowStable.Checked := True; + end; +end; + +procedure TTcp.CheckShowRouters; +var + AuthorityState, BridgeState, AuthorityOrBridgeState: Boolean; +begin + AuthorityState := not miShowAuthority.Checked; + BridgeState := not miShowBridge.Checked; + AuthorityOrBridgeState := AuthorityState and BridgeState; + + if (RoutersCustomFilter > 0) then + begin + case RoutersCustomFilter of + FILTER_BY_ALIVE: IntToMenu(miRtFilters, 3); + FILTER_BY_TOTAL: IntToMenu(miRtFilters, 2); + FILTER_BY_GUARD: IntToMenu(miRtFilters, 3); + FILTER_BY_EXIT: IntToMenu(miRtFilters, 3); + FILTER_BY_QUERY: IntToMenu(miRtFilters, 8); + ENTRY_ID..FAVORITES_ID: IntToMenu(miRtFilters, 0, True); + end; + end; + + if miShowOther.Checked or miShowBridge.Checked or miShowAuthority.Checked then + begin + miShowExit.Checked := False; + miShowGuard.Checked := False; + end; + + if miShowGuard.Checked or miShowHSDir.Checked then + begin + FastAndStableEnable(False); + if miShowGuard.Checked then + miShowV2Dir.Checked := True; + miShowV2Dir.Enabled := not miShowGuard.Checked; + end + else + begin + FastAndStableEnable(AuthorityOrBridgeState, False); + miShowV2Dir.Enabled := True; + end; + + miShowHsDir.Enabled := AuthorityOrBridgeState; + miShowDirMirror.Enabled := AuthorityOrBridgeState; + + edRoutersQuery.Enabled := miRtFiltersQuery.Checked; + cbxRoutersQuery.Enabled := miRtFiltersQuery.Checked; + edRoutersWeight.Enabled := miRtFiltersWeight.Checked; + udRoutersWeight.Enabled := miRtFiltersWeight.Checked; + cbxRoutersCountry.Enabled := miRtFiltersCountry.Checked; + btnShowNodes.Enabled := miRtFiltersType.Checked; + lbSpeed3.Enabled := miRtFiltersWeight.Checked; + SetCustomFilterStyle(RoutersCustomFilter); +end; + +procedure TTcp.SetCustomFilterStyle(CustomFilterID: Integer); +begin + if not FirstLoad then + begin + TFont(lbFavoritesEntry.Font).Style := []; + TFont(lbFavoritesMiddle.Font).Style := []; + TFont(lbFavoritesExit.Font).Style := []; + TFont(lbFavoritesTotal.Font).Style := []; + TFont(lbExcludeNodes.Font).Style := []; + end; + if CustomFilterID in [ENTRY_ID..FAVORITES_ID] then + TFont(GetFavoritesLabel(CustomFilterID).Font).Style := [fsUnderline]; +end; + +procedure TTcp.SetRoutersFilter(Sender: TObject); +var + Mask: Integer; +begin + Mask := TMenuItem(Sender).Tag; + case Mask of + 1:if miShowExit.Checked then + begin + miShowOther.Checked := False; miShowBridge.Checked := False; miShowAuthority.Checked := False; + end; + 2:if miShowGuard.Checked then + begin + miShowOther.Checked := False; miShowBridge.Checked := False; miShowAuthority.Checked := False; + end; + 4:if miShowAuthority.Checked then + begin + miShowBridge.Checked := False; miShowOther.Checked := False; + end; + 8:if miShowOther.Checked then + begin + miShowBridge.Checked := False; miShowAuthority.Checked := False; + end; + 16:if miShowBridge.Checked then + begin + miShowOther.Checked := False; miShowAuthority.Checked := False; + end; + end; + + if ShowNodesChanged and miDisableFiltersOnAuthorityOrBridge.Checked then + begin + if (Mask in [1,2,8]) or ((Mask in [4,16]) and not TMenuItem(Sender).Checked) then + begin + if LastFilters > -1 then + begin + IntToMenu(miRtFilters, LastFilters); + LastFilters := -1; + end; + end + else + begin + if TMenuItem(Sender).Checked and (Mask in [4,16])then + begin + if LastFilters = -1 then + LastFilters := MenuToInt(miRtFilters); + if miRtFiltersCountry.Checked and (cbxRoutersCountry.Tag <> -1) then + miRtFiltersCountry.Checked := False; + if miRtFiltersWeight.Checked and (udRoutersWeight.Position > 0) then + miRtFiltersWeight.Checked := False; + if miRtFiltersQuery.Checked and (Trim(edRoutersQuery.Text) <> '') then + miRtFiltersQuery.Checked := False; + end; + end; + end; + + ShowNodesChanged := False; + CheckShowRouters; + ShowRouters; + SaveRoutersFilterdata(False, True); +end; + +procedure TTcp.SetRoutersFilterState(Sender: TObject); +begin + if RoutersCustomFilter in [FILTER_BY_ALIVE..FILTER_BY_QUERY] then + RoutersCustomFilter := 0; + LastFilters := -1; + CheckShowRouters; + ShowRouters; + SaveRoutersFilterdata; +end; + +procedure TTcp.LoadRoutersFilterData(Data: string; AutoUpdate: Boolean = True; ResetCustomFilter: Boolean = False); +var + ParseStr: ArrOfStr; + i, QueryType: Integer; +begin + if not FirstLoad then + LastRoutersFilter := Data; + ParseStr := Explode(';', Data); + + for i := 0 to Length(ParseStr) - 1 do + begin + case i of + 0: + begin + RoutersFilters := StrToIntDef(ParseStr[i], ROUTER_FILTER_DEFAULT); + IntToMenu(miRtFilters, RoutersFilters); + end; + 1: LastFilters := StrToIntDef(ParseStr[i], -1); + 2: IntToMenu(mnShowNodes.Items, StrToIntDef(ParseStr[i], SHOW_NODES_FILTER_DEFAULT)); + 3: cbxRoutersCountry.Tag := StrToIntDef(ParseStr[i], -1); + 4: udRoutersWeight.Position := StrToIntDef(ParseStr[i], 10); + 5: + begin + if ResetCustomFilter then + RoutersCustomFilter := 0 + else + begin + RoutersCustomFilter := StrToIntDef(ParseStr[i], 0); + if not (RoutersCustomFilter in [0, FILTER_BY_ALIVE..FAVORITES_ID]) then + RoutersCustomFilter := 0; + end; + end; + 6: + begin + LastRoutersCustomFilter := StrToIntDef(ParseStr[i], 0); + if not (LastRoutersCustomFilter in [0, FILTER_BY_ALIVE..FAVORITES_ID]) then + LastRoutersCustomFilter := 0; + end; + 7: + begin + QueryType := StrToIntDef(ParseStr[i], -1); + if (QueryType < 0) or (QueryType > cbxRoutersQuery.Items.Count - 1) then + begin + cbxRoutersQuery.ItemIndex := 0; + edRoutersQuery.Text := ''; + Break; + end + else + if FirstLoad then + cbxRoutersQuery.ItemIndex := QueryType; + end; + 8: edRoutersQuery.Text := ParseStr[i]; + end; + end; + + if AutoUpdate then + begin + CheckCountryIndexInList; + CheckShowRouters; + ShowRouters; + end; +end; + +procedure TTcp.SaveRoutersFilterdata(Default: Boolean = False; SaveFilters: Boolean = True); +var + Ident, UserQuery: string; + Filters, Search: Integer; +begin + if Default then + begin + Ident := 'DefaultFilter'; + LastFilters := -1; + udRoutersWeight.ResetValue := udRoutersWeight.Position; + end + else + Ident := 'CurrentFilter'; + if SaveFilters then + begin + RoutersFilters := MenuToInt(miRtFilters); + Filters := RoutersFilters; + end + else + Filters := RoutersFilters; + + UserQuery := Trim(edRoutersQuery.Text); + Search := Pos(';', UserQuery); + if Search <> 0 then + begin + case cbxRoutersQuery.ItemIndex of + 4,5: UserQuery := StringReplace(UserQuery, ';', ',', [rfReplaceAll]); + else + SetLength(UserQuery, Pred(Search)); + end; + end; + LastRoutersFilter := IntToStr(Filters) + ';' + + IntToStr(LastFilters) + ';' + + IntToStr(MenuToInt(mnShowNodes.Items)) + ';' + + IntToStr(cbxRoutersCountry.Tag) + ';' + + IntToStr(udRoutersWeight.Position) + ';' + + IntToStr(RoutersCustomFilter) + ';' + + IntToStr(LastRoutersCustomFilter) + ';' + + IntToStr(cbxRoutersQuery.ItemIndex) + ';' + + UserQuery; + SetConfigString('Routers', Ident, LastRoutersFilter); +end; + +procedure TTcp.miShowRoutersClick(Sender: TObject); +begin + RestoreForm; + sbShowRouters.Click; +end; + +procedure TTcp.miSwitchTorClick(Sender: TObject); +begin + btnSwitchTor.Click; +end; + +procedure TTcp.miTplSaveClick(Sender: TObject); +begin + SetConfigInteger('Filter', 'TplSave', MenuToInt(miTplSave)); +end; + +procedure TTcp.miTransportsClearClick(Sender: TObject); +begin + ClearGrid(sgTransports); + UpdateTransports; + EnableOptionButtons; +end; + +procedure TTcp.miTransportsDeleteClick(Sender: TObject); +begin + DeleteARow(sgTransports, sgTransports.SelRow); + UpdateTransports; + EnableOptionButtons; +end; + +procedure TTcp.miTransportsInsertClick(Sender: TObject); +begin + if IsEmptyGrid(sgTransports) then + TransportsEnable(True) + else + begin + sgTransports.RowCount := sgTransports.RowCount + 1; + sgTransports.Row := sgTransports.RowCount - 1; + end; + sgTransports.Cells[PT_TRANSPORTS, sgTransports.SelRow] := 'transport'; + sgTransports.Cells[PT_HANDLER, sgTransports.SelRow] := 'program.exe'; + sgTransports.Cells[PT_Type, sgTransports.SelRow] := FAVERR_CHAR; + sgTransports.Cells[PT_PARAMS, sgTransports.SelRow] := ''; + SelectTransports; + EnableOptionButtons; +end; + +procedure TTcp.miTransportsOpenDirClick(Sender: TObject); +begin + ShellOpen(GetFullFileName(TransportsDir)); +end; + +procedure TTcp.miTransportsResetClick(Sender: TObject); +begin + ResetTransports; + EnableOptionButtons; +end; + +procedure TTcp.StartScannerManual(Sender: TObject); +var + ScanPurpose: TScanPurpose; + ScanType: TScanType; + ScanPing, ScanAlive: Boolean; +begin + ScanPing := miManualPingMeasure.Checked; + ScanAlive := miManualDetectAliveNodes.Checked; + if ScanPing or ScanAlive then + begin + if ScanPing and ScanAlive then + ScanType := stBoth + else + begin + if miManualPingMeasure.Checked then + ScanType := stPing + else + ScanType := stAlive; + end; + end + else + ScanType := stNone; + + case TMenuItem(Sender).Tag of + 1: ScanPurpose := spNew; + 2: ScanPurpose := spFailed; + 3: ScanPurpose := spBridges; + 4: ScanPurpose := spAll; + else + ScanPurpose := spNone; + end; + + ScanNetwork(ScanType, ScanPurpose); +end; + +procedure TTcp.miTplLoadClick(Sender: TObject); +begin + SetConfigInteger('Filter', 'TplLoad', MenuToInt(miTplLoad)); +end; + +procedure TTcp.miSelectExitCircuitWhetItChangesClick(Sender: TObject); +begin + ShowCircuits; + SetConfigBoolean('Circuits', 'SelectExitCircuitWhetItChanges', miSelectExitCircuitWhetItChanges.Checked); +end; + +procedure TTcp.miSelectGraphDLClick(Sender: TObject); +begin + pbTraffic.Repaint; + SetConfigBoolean('Status', 'SelectGraphDL', miSelectGraphDL.Checked); +end; + +procedure TTcp.miSelectGraphULClick(Sender: TObject); +begin + pbTraffic.Repaint; + SetConfigBoolean('Status', 'SelectGraphUL', miSelectGraphUL.Checked); +end; + +procedure TTcp.btnApplyOptionsClick(Sender: TObject); +begin + ApplyOptions; +end; + +procedure TTcp.btnCancelOptionsClick(Sender: TObject); +begin + ResetOptions; +end; + +procedure TTcp.CursorStopTimer(Sender: TObject); +begin + if CursorShow then + begin + CursorShow := False; + btnChangeCircuit.Enabled := True; + btnChangeCircuit.Cursor := crDefault; + FreeAndNil(CursorStop); + end + else + begin + btnChangeCircuit.Cursor := crNo; + CursorStop.Interval := 250; + CursorShow := True; + btnChangeCircuit.Enabled := False; + end; +end; + +procedure TTcp.btnChangeCircuitClick(Sender: TObject); +begin + if CheckSplitButton(btnChangeCircuit) then + Exit; + if cbEnableSocks.Checked and (ConnectState = 2) and (Circuit <> '') then + begin + btnChangeCircuit.Enabled := False; + miChangeCircuit.Enabled := False; + CloseCircuit(Circuit, False); + CheckCircuitExists(Circuit, True); + ResetFocus; + end + else + begin + if not Assigned(CursorStop) then + begin + CursorStop := TTimer.Create(Tcp); + CursorStop.OnTimer := CursorStopTimer; + CursorStop.Interval := 25; + end; + end; +end; + +procedure TTcp.btnShowNodesClick(Sender: TObject); +var + P: TPoint; +begin + P := btnShowNodes.ClientOrigin; + btnShowNodes.DropDownMenu.Popup(P.X, P.Y + btnShowNodes.Height); +end; + +procedure TTcp.btnSwitchTorClick(Sender: TObject); +begin + if ConnectState = 0 then + begin + if not Assigned(Controller) and not Assigned(Logger) and not Assigned(Consensus) and not Assigned(Descriptors) then + begin + if CurrentScanPurpose = spUserBridges then + ShowMsg(TransStr('400')) + else + StartTor; + end; + end + else + StopTor; + if paButtons.CanFocus then + paButtons.SetFocus; +end; + +procedure TTcp.miChangeCircuitClick(Sender: TObject); +begin + btnChangeCircuit.Click; +end; + +procedure TTcp.SetCircuitsUpdateInterval(Sender: TObject); +begin + if TMenuItem(Sender).Checked then + Exit; + TMenuItem(Sender).Checked := True; + tmCircuits.Interval := TMenuItem(Sender).Tag; + SetConfigInteger('Circuits', 'UpdateInterval', TMenuItem(Sender).Tag); +end; + +procedure TTcp.miCircuitsUpdateNowClick(Sender: TObject); +begin + ShowCircuits; +end; + +procedure TTcp.SetCircuitsFilter(Sender: TObject); +begin + ShowCircuits; + SetConfigInteger('Circuits', 'PurposeFilter', MenuToInt(miCircuitFilter)); +end; + +procedure TTcp.miEnableConvertNodesOnIncorrectClearClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'EnableConvertNodesOnIncorrectClear', miEnableConvertNodesOnIncorrectClear.Checked); +end; + +procedure TTcp.miEnableConvertNodesOnRemoveFromNodesListClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'EnableConvertNodesOnRemoveFromNodesList', miEnableConvertNodesOnRemoveFromNodesList.Checked); +end; + +procedure TTcp.miEnableConvertNodesOnAddToNodesListClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'EnableConvertNodesOnAddToNodesList', miEnableConvertNodesOnAddToNodesList.Checked); +end; + +procedure TTcp.miExitClick(Sender: TObject); +begin + Closing := True; + Tcp.Close; +end; + +procedure TTcp.miFilterHideUnusedClick(Sender: TObject); +begin + ShowFilter; + SetConfigBoolean('Filter', 'FilterHideUnused', miFilterHideUnused.Checked); +end; + +procedure TTcp.miFilterScrollTopClick(Sender: TObject); +begin + SetConfigBoolean('Filter', 'FilterScrollTop', miFilterScrollTop.Checked); +end; + +procedure TTcp.CheckSelectRowOptions(aSg: TStringGrid; Checked: Boolean; Save: Boolean = False); +begin + if Checked then + aSg.Options := aSg.Options + [goRowSelect] + else + begin + aSg.Options := aSg.Options - [goRowSelect]; + if aSg.SelRow > 0 then + begin + aSg.Row := aSg.SelRow; + aSg.Col := aSg.SelCol; + end; + end; + if Save then + begin + case aSg.Tag of + GRID_FILTER: SetConfigBoolean(Copy(aSg.Name, 3), 'FilterSelectRow', Checked); + GRID_ROUTERS: SetConfigBoolean(Copy(aSg.Name, 3), 'RoutersSelectRow', Checked); + end; + end; +end; + +procedure TTcp.miFilterSelectRowClick(Sender: TObject); +begin + CheckSelectRowOptions(sgFilter, miFilterSelectRow.Checked, True); +end; + +procedure TTcp.miGetBridgesEmailClick(Sender: TObject); +var + Param: AnsiString; +begin + if miRequestIPv6Bridges.Checked then + Param := 'get ipv6' + else + begin + if miRequestObfuscatedBridges.Checked then + Param := 'get transport obfs4' + else + Param := 'get vanilla'; + end; + ShellOpen('mailto:' + GetDefaultsValue('BridgesEmail', BRIDGES_EMAIL) + '?Body=' + string(EncodeURL(Param))); +end; + +procedure TTcp.miRequestIPv6BridgesClick(Sender: TObject); +begin + SetConfigBoolean('Network', 'RequestIPv6Bridges', miRequestIPv6Bridges.Checked); +end; + +procedure TTcp.miRequestObfuscatedBridgesClick(Sender: TObject); +begin + SetConfigBoolean('Network', 'RequestObfuscatedBridges', miRequestObfuscatedBridges.Checked); +end; + +function TTCP.CheckCacheOpConfirmation(OpStr: string): Boolean; +begin + Result := ShowMsg(Format(TransStr('405'),[OpStr]), '', mtQuestion, True); +end; + +procedure TTcp.miResetScannerScheduleClick(Sender: TObject); +var + ini: TMemIniFile; +begin + if not CheckCacheOpConfirmation(TMenuItem(Sender).Caption) then + Exit; + LastFullScanDate := 0; + LastNonResponsedScanDate := 0; + LastPartialScansCounts := udPartialScansCounts.Position; + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + ini.WriteInt64('Scanner', 'LastFullScanDate', LastFullScanDate); + ini.WriteInt64('Scanner', 'LastNonResponsedScanDate', LastNonResponsedScanDate); + ini.WriteInteger('Scanner', 'LastPartialScansCounts', LastPartialScansCounts); + finally + ini.UpdateFile; + ini.Free; + end; +end; + +procedure TTcp.miResetTotalsCounterClick(Sender: TObject); +var + ini: TMemIniFile; +begin + if not CheckCacheOpConfirmation(TMenuItem(Sender).Caption) then + Exit; + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + TotalDL := 0; + TotalUL := 0; + TotalStartDate := DateTimeToUnix(Now); + ini.WriteInt64('Status', 'TotalDL', TotalDL); + ini.WriteInt64('Status', 'TotalUL', TotalUL); + ini.WriteInt64('Status', 'TotalStartDate', TotalStartDate); + lbTotalDL.Caption := BytesFormat(TotalDL); + lbTotalUL.Caption := BytesFormat(TotalUL); + gbTotal.Hint := Format(TransStr('402'), [DateTimeToStr(UnixToDateTime(TotalStartDate))]); + finally + ini.UpdateFile; + ini.Free; + end; +end; + +procedure TTcp.miGetBridgesSiteClick(Sender: TObject); +var + Transport, IPv6: string; +begin + if miRequestObfuscatedBridges.Checked then + Transport := 'transport=obfs4' + else + Transport := 'transport=0'; + if miRequestIPv6Bridges.Checked then + IPv6 := '&ipv6=yes' + else + IPv6 := ''; + ShellOpen(GetDefaultsValue('BridgesSite', BRIDGES_SITE) + '?' + Transport + IPv6); +end; + +procedure TTcp.miGetBridgesTelegramClick(Sender: TObject); +var + Url: string; +begin + if RegistryFileExists(HKEY_CLASSES_ROOT, 'tg\shell\open\command', '') and not miPreferWebTelegram.Checked then + Url := 'tg://resolve?domain=' + else + Url := 'https://t.me/'; + ShellOpen(Url + GetDefaultsValue('BridgesBot', BRIDGES_BOT)); +end; + +procedure TTcp.FindInFilter(IpAddr: string); +var + Index: Integer; + GeoIpInfo: TGeoIpInfo; +begin + if ValidAddress(IpAddr) <> 0 then + begin + sbShowOptions.Click; + pcOptions.TabIndex := tsFilter.TabIndex; + if GeoIpDic.TryGetValue(IpAddr, GeoIpInfo) then + Index := sgFilter.Cols[FILTER_ID].IndexOf(CountryCodes[GeoIpInfo.cc]) + else + Index := sgFilter.Cols[FILTER_ID].IndexOf('??'); + SetGridLastCell(sgFilter, True, False, False, Index, FILTER_NAME); + end; +end; + +procedure TTcp.FindInRouters(RouterID: string); +var + Index: Integer; + Router: TRouterInfo; + Sum, Temp: Integer; +begin + if ValidHash(RouterID) then + begin + if RoutersDic.TryGetValue(RouterID, Router) then + begin + LoadRoutersFilterData(LastRoutersFilter, False, True); + + if miRtFiltersType.Checked then + begin + Sum := 0; + if rfExit in Router.Flags then Inc(Sum, 1); + if rfGuard in Router.Flags then Inc(Sum, 2); + if rfAuthority in Router.Flags then Inc(Sum, 4); + if rfBridge in Router.Flags then Inc(Sum, 16); + if Sum = 0 then Inc(Sum, 8); + if rfFast in Router.Flags then Inc(Sum, 32); + if rfStable in Router.Flags then Inc(Sum, 64); + if rfV2Dir in Router.Flags then Inc(Sum, 128); + if rfHSDir in Router.Flags then Inc(Sum, 256); + if VersionsDic.ContainsKey(Router.Version) then Inc(Sum, 512); + if Router.DirPort > 0 then Inc(Sum, 1024); + if (Router.Params and ROUTER_ALIVE <> 0) then Inc(Sum, 2048); + + IntToMenu(mnShowNodes.Items, Sum); + end; + + if miRtFiltersCountry.Checked then + begin + if cbxRoutersCountry.Tag <> -1 then + begin + Temp := GetCountryValue(Router.IPv4); + if cbxRoutersCountry.Tag = -2 then + if FilterDic.Items[CountryCodes[Temp]].Data <> [] then + Temp := -2; + if cbxRoutersCountry.Tag <> Temp then + begin + cbxRoutersCountry.ItemIndex := 0; + cbxRoutersCountry.Tag := -1; + end; + end; + end; + + if miRtFiltersWeight.Checked then + begin + if Router.Bandwidth < udRoutersWeight.Position * 1024 then + begin + Temp := Floor(Router.Bandwidth/1024); + if Temp < 5 then + Temp := 0 + else + Temp := Temp - (Temp mod 5); + udRoutersWeight.Position := Temp; + end; + end; + + if miRtFiltersQuery.Checked then + begin + if Trim(edRoutersQuery.Text) <> '' then + edRoutersQuery.Text := ''; + end; + + CheckShowRouters; + ShowRouters; + Index := sgRouters.Cols[FILTER_ID].IndexOf(RouterID); + if Index < 0 then + Index := 1; + SetGridLastCell(sgRouters, True, False, False, Index, ROUTER_IP); + sbShowRouters.Click; + SaveRoutersFilterdata; + end; + end; +end; + +procedure TTcp.HsMaxStreamsEnable(State: Boolean); +begin + edHsMaxStreams.Enabled := State; + udHsMaxStreams.Enabled := State; + if not State then + udHsMaxStreams.Position := 32; + lbHsMaxStreams.Enabled := State; +end; + +procedure TTcp.TransportsEnable(State: Boolean); +begin + edTransports.Enabled := State; + edTransportsHandler.Enabled := State; + cbxTRansportType.Enabled := State; + meHandlerParams.Enabled := State; + lbTransports.Enabled := State; + lbTransportsHandler.Enabled := State; + lbTransportType.Enabled := State; + lbHandlerParams.Enabled := State; +end; + +procedure TTcp.HsPortsEnable(State: Boolean); +begin + edHsRealPort.Enabled := State; + edHsVirtualPort.Enabled := State; + udHsRealPort.Enabled := State; + udHsVirtualPort.Enabled := State; + cbxHsAddress.Enabled := State; + lbHsSocket.Enabled := State; + lbHsVirtualPort.Enabled := State; +end; + +procedure TTcp.HsControlsEnable(State: Boolean); +begin + sgHsPorts.Enabled := State; + edHsName.Enabled := State; + edHsNumIntroductionPoints.Enabled := State; + edRendPostPeriod.Enabled := State; + udHsNumIntroductionPoints.Enabled := State; + udRendPostPeriod.Enabled := State; + cbxHsVersion.Enabled := State; + cbxHsState.Enabled := State; + cbHsMaxStreams.Enabled := State; + HsMaxStreamsEnable(State); + HsPortsEnable(State); + lbHsName.Enabled := State; + lbHsVersion.Enabled := State; + lbHsNumIntroductionPoints.Enabled := State; + lbRendPostPeriod.Enabled := State; + lbMinutes.Enabled := State; + lbHsState.Enabled := State; +end; + +procedure TTcp.miHideCircuitsWithoutStreamsClick(Sender: TObject); +begin + ShowCircuits; + SetConfigBoolean('Circuits', 'HideCircuitsWithoutStreams', miHideCircuitsWithoutStreams.Checked); +end; + +procedure TTcp.miHsClearClick(Sender: TObject); +var + i: Integer; +begin + if tsHs.Tag = 1 then + begin + if ShowMsg(Format(TransStr('263'), ['', TransStr('267')]), '', mtQuestion, True) then + begin + for i := 1 to sgHs.RowCount - 1 do + begin + if sgHs.Cells[HS_PREVIOUS_NAME, i] <> '' then + begin + SetLength(HsToDelete, Length(HsToDelete) + 1); + HsToDelete[Length(HsToDelete) - 1] := sgHs.Cells[HS_PREVIOUS_NAME, i]; + end; + end; + ClearGrid(sgHs); + UpdateHs; + EnableOptionButtons; + end; + end; + + if tsHs.Tag = 2 then + begin + ClearGrid(sgHsPorts); + UpdateHsPorts; + EnableOptionButtons; + end; +end; + +procedure TTcp.miHsCopyOnionClick(Sender: TObject); +begin + Clipboard.AsText := miHsCopyOnion.Caption; +end; + +procedure TTcp.miHsDeleteClick(Sender: TObject); +begin + mnHs.Tag := 1; + + if tsHs.Tag = 1 then + begin + if ShowMsg(Format(TransStr('263'), [TransStr('367') + ' ', sgHs.Cells[HS_NAME, sgHs.SelRow]]), '', mtQuestion, True) then + begin + if sgHs.Cells[HS_PREVIOUS_NAME, sgHs.SelRow] <> '' then + begin + SetLength(HsToDelete, Length(HsToDelete) + 1); + HsToDelete[Length(HsToDelete) - 1] := sgHs.Cells[HS_PREVIOUS_NAME, sgHs.SelRow]; + end; + DeleteARow(sgHs, sgHs.SelRow); + UpdateHs; + EnableOptionButtons; + end; + end; + + if tsHs.Tag = 2 then + begin + DeleteARow(sgHsPorts, sgHsPorts.SelRow); + UpdateHsPorts; + EnableOptionButtons; + end; + + mnHs.Tag := 0; +end; + +procedure TTcp.miHsInsertClick(Sender: TObject); +begin + mnHs.Tag := 1; + + if tsHs.Tag = 1 then + begin + if IsEmptyGrid(sgHs) then + HsControlsEnable(True) + else + begin + sgHs.RowCount := sgHs.RowCount + 1; + sgHs.Row := sgHs.RowCount - 1; + end; + sgHs.Cells[HS_NAME, sgHs.SelRow] := ''; + sgHs.Cells[HS_VERSION, sgHs.SelRow] := '3'; + sgHs.Cells[HS_INTRO_POINTS, sgHs.SelRow] := '3'; + sgHs.Cells[HS_MAX_STREAMS, sgHs.SelRow] := NONE_CHAR; + sgHs.Cells[HS_STATE, sgHs.SelRow] := SELECT_CHAR; + sgHs.Cells[HS_PORTS_DATA, sgHs.SelRow] := '127.0.0.1,80,80'; + ClearGrid(sgHsPorts); + SelectHs; + if edHsName.CanFocus then + edHsName.SetFocus; + end; + + if tsHs.Tag = 2 then + begin + if IsEmptyGrid(sgHsPorts) then + HsControlsEnable(True) + else + begin + sgHsPorts.RowCount := sgHsPorts.RowCount + 1; + sgHsPorts.Row := sgHsPorts.RowCount - 1; + end; + sgHsPorts.Cells[HSP_INTERFACE, sgHsPorts.SelRow] := '127.0.0.1'; + sgHsPorts.Cells[HSP_REAL_PORT, sgHsPorts.SelRow] := '80'; + sgHsPorts.Cells[HSP_VIRTUAL_PORT, sgHsPorts.SelRow] := '80'; + UpdateHsPorts; + SelectHsPorts; + end; + mnHs.Tag := 0; + EnableOptionButtons; +end; + +procedure TTcp.meTrackHostExitsChange(Sender: TObject); +begin + lbTotalHosts.Caption := TransStr('203') + ': ' + IntToStr(meTrackHostExits.Lines.Count); + EnableOptionButtons; +end; + +procedure TTcp.InsertNodesMenu(ParentMenu: TMenuItem; NodeID: string; AutoSave: Boolean = True); +var + SubMenu: TMenuItem; + i: Integer; +begin + ParentMenu.Clear; + if ConnectState = 1 then + Exit; + for i := ENTRY_ID to EXCLUDE_ID do + begin + SubMenu := TMenuItem.Create(self); + SubMenu.Tag := i; + case i of + ENTRY_ID: + begin + SubMenu.Caption := TransStr('288'); SubMenu.ImageIndex := 40; + end; + MIDDLE_ID: + begin + SubMenu.Caption := TransStr('289'); SubMenu.ImageIndex := 41; + end; + EXIT_ID: + begin + SubMenu.Caption := TransStr('290'); SubMenu.ImageIndex := 42; + end; + EXCLUDE_ID: + begin + SubMenu.Caption := TransStr('287'); SubMenu.ImageIndex := 43; + end; + end; + InsertNodesListMenu(SubMenu, NodeID, i, AutoSave); + ParentMenu.Add(SubMenu); + end; + + for i := 1 to 4 do + begin + SubMenu := TMenuItem.Create(self); + SubMenu.Tag := i; + case i of + 1,3: SubMenu.Caption := '-'; + 2: + begin + SubMenu.Caption := TransStr('359'); + SubMenu.ImageIndex := 17; + InsertNodesToDeleteMenu(SubMenu, NodeID, AutoSave); + end; + 4: + begin + SubMenu.Caption := TransStr('360'); + SubMenu.ImageIndex := 50; + SubMenu.OnClick := RoutersAutoSelectClick; + Submenu.Enabled := (RoutersDic.Count > 0) and (InfoStage = 0) and not (Assigned(Consensus) or Assigned(Descriptors) or tmScanner.Enabled); + Submenu.Visible := not AutoSave; + end; + end; + ParentMenu.Add(SubMenu); + end; +end; + +procedure TTcp.InsertNodesToDeleteMenu(ParentMenu: TmenuItem; NodeID: string; AutoSave: Boolean = True); +var + Router: TRouterInfo; + ls: TStringList; + i: Integer; + ItemID: TListType; + RangesStr, NodeStr, DeleteList, CountryCode: string; + ParseStr: ArrOfStr; + SubMenu: TMenuItem; +begin + if RoutersDic.TryGetValue(NodeID, Router) then + begin + CountryCode := CountryCodes[GetCountryValue(Router.IPv4)]; + ls := TStringList.Create; + try + ls.Add(NodeID); + ls.Add(Router.IPv4); + RangesStr := FindInRanges(Router.IPv4); + if RangesStr <> '' then + begin + ParseStr := Explode(',', RangesStr); + for i := 0 to Length(ParseStr) - 1 do + ls.Add(ParseStr[i]); + end; + SortNodesList(ls, True); + ls.Add(AnsiUpperCase(CountryCode) + ' (' + TransStr(CountryCode) + ')'); + + DeleteList := ''; + for i := 0 to ls.Count - 1 do + begin + NodeStr := SeparateLeft(ls[i], ' '); + ItemID := GetNodeType(NodeStr); + if ItemID = ltCode then + NodeStr := AnsiLowerCase(NodeStr); + + if NodesDic.ContainsKey(NodeStr) then + begin + if NodesDic.Items[NodeStr] <> [] then + begin + SubMenu := TMenuItem.Create(self); + SubMenu.Tag := Integer(AutoSave); + case ItemID of + ltHash: SubMenu.ImageIndex := 23; + ltIp: SubMenu.ImageIndex := 33; + ltCidr: SubMenu.ImageIndex := 48; + ltCode: SubMenu.ImageIndex := 57; + end; + SubMenu.Caption := ls[i]; + SubMenu.Hint := ''; + SubMenu.OnClick := RemoveFromNodeListClick; + ParentMenu.Add(SubMenu); + DeleteList := DeleteList + ',' + ls[i]; + end; + end; + end; + Delete(DeleteList, 1, 1); + if ParentMenu.Count > 1 then + begin + ls.Clear; + ls.Add('-'); + ls.Add(TransStr('406')); + for i := 0 to ls.Count - 1 do + begin + SubMenu := TMenuItem.Create(self); + SubMenu.Tag := Integer(AutoSave); + SubMenu.Caption := ls[i]; + if SubMenu.Caption <> '-' then + begin + SubMenu.ImageIndex := 17; + SubMenu.Hint := DeleteList; + SubMenu.OnClick := RemoveFromNodeListClick; + end; + ParentMenu.Add(SubMenu); + end; + end; + ParentMenu.Visible := ParentMenu.Count > 0; + finally + ls.Free; + end; + end; +end; + +procedure TTcp.InsertNodesListMenu(ParentMenu: TmenuItem; NodeID: string; NodeTypeID: Integer; AutoSave: Boolean = True); +var + SubMenu: TMenuItem; + ls, lr: TStringList; + i: Integer; + CountryID: Byte; + Router: TRouterInfo; + RangesStr: string; + ParseStr: ArrOfStr; + ItemID: TListType; + NodeStr: string; + + function IpToMask(IpStr: string; Mask: Byte): string; + var + i, n: Byte; + ParseStr: ArrOfStr; + begin + ParseStr := Explode('.', IpStr); + n := 32; + for i := Length(ParseStr) - 1 downto 0 do + begin + dec(n, 8); + if n >= Mask then + ParseStr[i] := '0'; + end; + Result := Format('%s.%s.%s.%s/%d', [ParseStr[0], ParseStr[1], ParseStr[2], ParseStr[3], Mask]); + end; + +begin + ls := TStringList.Create; + try + ls.Add(NodeID); + if RoutersDic.TryGetValue(NodeID, Router) then + begin + CountryID := GetCountryValue(Router.IPv4); + ls.Add(Router.IPv4); + ls.Add('-'); + ls.Add(IpToMask(Router.IPv4, 24)); + ls.Add(IpToMask(Router.IPv4, 16)); + ls.Add(IpToMask(Router.IPv4, 8)); + RangesStr := FindInRanges(Router.IPv4); + if RangesStr <> '' then + begin + lr := TStringList.Create; + try + ls.Add('-'); + ParseStr := Explode(',', RangesStr); + for i := 0 to Length(ParseStr) - 1 do + if ls.IndexOf(ParseStr[i]) < 0 then + lr.Add(ParseStr[i]); + SortNodesList(lr, True); + ls.AddStrings(lr); + finally + lr.Free; + end; + end; + ls.Add('-'); + ls.Add(AnsiUpperCase(CountryCodes[CountryID]) + ' (' + TransStr(CountryCodes[CountryID]) + ')'); + end; + + for i := 0 to ls.Count - 1 do + begin + NodeStr := SeparateLeft(ls[i], ' '); + ItemID := GetNodeType(NodeStr); + if ItemID = ltCode then + NodeStr := AnsiLowerCase(NodeStr); + + SubMenu := TMenuItem.Create(self); + SubMenu.Hint := BoolToStr(AutoSave); + SubMenu.Tag := NodeTypeID; + SubMenu.Caption := ls[i]; + + if NodesDic.ContainsKey(NodeStr) then + begin + if TNodeType(NodeTypeID) in NodesDic.Items[NodeStr] then + SubMenu.Enabled := False; + end; + + if SubMenu.Enabled and (ItemID in [ltHash]) then + begin + if not CheckRouterFlags(NodeTypeID, Router) and (NodeTypeID <> EXCLUDE_ID) then + SubMenu.Visible := False; + end; + + if ItemID <> ltNoCheck then + begin + case ItemID of + ltHash: SubMenu.ImageIndex := 23; + ltIp: SubMenu.ImageIndex := 33; + ltCidr: SubMenu.ImageIndex := 48; + ltCode: SubMenu.ImageIndex := 57; + end; + if SubMenu.Enabled then + SubMenu.OnClick := Tcp.AddToNodesListClick; + end; + ParentMenu.Add(SubMenu); + end; + finally + ls.Free; + end; +end; + +procedure TTcp.CheckNodesListState(NodeTypeID: Integer); +var + lbComponent: TLabel; +begin + lbComponent := GetFavoritesLabel(NodeTypeID); + if Assigned(lbComponent) then + begin + if lbComponent.Tag = 0 then + lbComponent.HelpContext := 1; + end; + if NodeTypeID <> EXCLUDE_ID then + begin + if (lbFavoritesTotal.Tag = 0) and (cbxFilterMode.ItemIndex <> 2) then + cbxFilterMode.ItemIndex := 2; + end; +end; + +function TTCP.CheckRouterFlags(NodeTypeID: Integer; RouterInfo: TRouterInfo): Boolean; +begin + Result := False; + if (rfBridge in RouterInfo.Flags) and not (rfRelay in RouterInfo.Flags) then + Exit; + if (NodeTypeID = ENTRY_ID) and not (rfGuard in RouterInfo.Flags) then + Exit; + if (NodeTypeID = EXIT_ID) and not (rfExit in RouterInfo.Flags) then + Exit; + Result := True; +end; + +procedure TTcp.CheckPrefferedBridgeExclude(RouterID: string); +var + RouterInfo: TRouterInfo; +begin + if cbUsePreferredBridge.Checked then + begin + if RoutersDic.TryGetValue(RouterID, RouterInfo) then + begin + if RouterInNodesList(RouterID, RouterInfo, ntExclude) then + begin + cbUseBridges.Checked := False; + cbUsePreferredBridge.Checked := False; + edPreferredBridge.Text := ''; + BridgesCheckControls; + end; + end; + end; +end; + +procedure TTCP.AddToNodesListClick(Sender: TObject); +var + NodeStr, NodeCap, ConvertMsg: string; + ConvertNodes, CtrlPressed, EnableConvertNodes: Boolean; + NodeTypeID: Integer; + FNodeTypes: TNodeTypes; + FilterInfo: TFilterInfo; + ItemID: TListType; + Router: TPair; + Range: TIPv4Range; + PreferredBridge: TBridge; + + procedure AddRouterToNodesList(RouterID: string; RouterInfo: TRouterInfo); + begin + if NodeTypeID <> EXCLUDE_ID then + begin + if miAvoidAddingIncorrectNodes.Checked then + begin + if not CheckRouterFlags(NodeTypeID, RouterInfo) then + Exit; + if RouterInNodesList(RouterID, RouterInfo, ntExclude) then + Exit; + end; + end; + NodesDic.TryGetValue(RouterID, FNodeTypes); + if (ntExclude in FNodeTypes) or (NodeTypeID = EXCLUDE_ID) then + FNodeTypes := []; + Include(FNodeTypes, TNodeType(NodeTypeID)); + NodesDic.AddOrSetValue(RouterID, FNodeTypes); + end; + +begin + ConvertMsg := ''; + CtrlPressed := CtrlKeyPressed(#0); + NodeCap := TMenuItem(Sender).Caption; + NodeStr := SeparateLeft(NodeCap, ' '); + NodeTypeID := TMenuItem(Sender).Tag; + ItemID := GetNodeType(NodeStr); + case ItemID of + ltCode: NodeStr := AnsiLowerCase(NodeStr); + ltCidr: Range := CidrToRange(NodeStr); + end; + ConvertNodes := miEnableConvertNodesOnAddToNodesList.Checked and + (((ItemID = ltIp) and miConvertIpNodes.Checked) or + ((ItemID = ltCidr) and miConvertCidrNodes.Checked) or + ((ItemID = ltCode) and miConvertCountryNodes.Checked)) and + (((NodeTypeID = EXCLUDE_ID) and not miIgnoreConvertExcludeNodes.Checked) or + (NodeTypeID <> EXCLUDE_ID)); + + EnableConvertNodes := (ConvertNodes and not CtrlPressed) or (not ConvertNodes and CtrlPressed); + if EnableConvertNodes then + ConvertMsg := BR + BR + TransStr('146'); + + if ShowMsg(Format(TransStr('268'), [NodeCap, TMenuItem(Sender).Parent.Caption, ConvertMsg]), '', mtQuestion, True) then + begin + if EnableConvertNodes then + begin + for Router in RoutersDic do + begin + case ItemID of + ltIp: + begin + if Router.Value.IPv4 = NodeStr then + AddRouterToNodesList(Router.Key, Router.Value); + end; + ltCidr: + begin + if InRange(IpToInt(Router.Value.IPv4), Range.IpStart, Range.IpEnd) then + AddRouterToNodesList(Router.Key, Router.Value); + end; + ltCode: + begin + if CountryCodes[GetCountryValue(Router.Value.IPv4)] = NodeStr then + AddRouterToNodesList(Router.Key, Router.Value); + end; + end; + end; + end + else + begin + NodesDic.TryGetValue(NodeStr, FNodeTypes); + if (ntExclude in FNodeTypes) or (NodeTypeID = EXCLUDE_ID) then + FNodeTypes := []; + Include(FNodeTypes, TNodeType(NodeTypeID)); + NodesDic.AddOrSetValue(NodeStr, FNodeTypes); + + if NodeTypeID = EXCLUDE_ID then + begin + if FilterDic.TryGetValue(NodeStr, FilterInfo) then + begin + FilterInfo.Data := []; + FilterDic.AddOrSetValue(NodeStr, FilterInfo); + end; + end; + + if ItemID = ltCidr then + RangesDic.AddOrSetValue(NodeStr, CidrToRange(NodeStr)); + end; + if TryParseBridge(edPreferredBridge.Text, PreferredBridge) then + CheckPrefferedBridgeExclude(PreferredBridge.Hash); + CheckNodesListState(NodeTypeID); + CalculateTotalNodes; + ShowRouters; + RoutersUpdated := True; + FilterUpdated := True; + UpdateOptionsAfterRoutersUpdate; + + if StrToBool(TMenuItem(Sender).Hint) then + ApplyOptions + else + EnableOptionButtons; + end; +end; + +procedure TTcp.RemoveFromNodeListClick(Sender: TObject); +var + ConvertNodes: Boolean; + NodesList, NodeStr, ConvertMsg: string; + ParseStr: ArrOfStr; + ItemID: TListType; + i: Integer; + Nodes: ArrOfNodes; + +begin + if TMenuItem(Sender).Hint = '' then + NodesList := TMenuItem(Sender).Caption + else + NodesList := TMenuItem(Sender).Hint; + + ConvertNodes := PrepareNodesToRemove(NodesList, ntNone, Nodes);; + if ConvertNodes then + ConvertMsg := BR + BR + TransStr('146') + else + ConvertMsg := ''; + + if ShowMsg(Format(TransStr('361'), [StringReplace(NodesList, ',', BR, [rfReplaceAll]), ConvertMsg]), '', mtQuestion, True) then + begin + ParseStr := Explode(',', NodesList); + for i := 0 to Length(ParseStr) - 1 do + begin + NodeStr := SeparateLeft(ParseStr[i], ' '); + ItemID := GetNodeType(NodeStr); + if ItemID = ltCode then + NodeStr := AnsiLowerCase(NodeStr); + + NodesDic.Remove(NodeStr); + if ItemID = ltCidr then + RangesDic.Remove(NodeStr); + end; + if ConvertNodes then + RemoveFromNodesListWithConvert(Nodes, ntNone); + + CalculateTotalNodes; + ShowRouters; + RoutersUpdated := True; + FilterUpdated := True; + UpdateOptionsAfterRoutersUpdate; + + if Boolean(TMenuItem(Sender).Tag) then + ApplyOptions + else + EnableOptionButtons; + end; +end; + +function TTcp.PrepareNodesToRemove(Data: string; NodeType: TNodeType; out Nodes: ArrOfNodes): Boolean; +var + ParseStr: ArrOfStr; + i, j: Integer; + NodeStr: string; + NodeID: TListType; + CtrlPressed, ConvertNodes: Boolean; +begin + Result := False; + Nodes := nil; + CtrlPressed := CtrlKeyPressed(#0); + ParseStr := Explode(',', Data); + if Length(ParseStr) = 0 then + Exit; + j := 0; + for i := 0 to Length(ParseStr) - 1 do + begin + NodeStr := SeparateLeft(ParseStr[i], ' '); + NodeID := GetNodeType(NodeStr); + + ConvertNodes := miEnableConvertNodesOnRemoveFromNodesList.Checked and + (((NodeID = ltIp) and miConvertIpNodes.Checked) or + ((NodeID = ltCidr) and miConvertCidrNodes.Checked) or + ((NodeID = ltCode) and miConvertCountryNodes.Checked)); + + if (ConvertNodes and not CtrlPressed) or + (not ConvertNodes and CtrlPressed and (NodeID <> ltHash)) then + begin + SetLength(Nodes, j + 1); + case NodeID of + ltCode: NodeStr := AnsiLowerCase(NodeStr); + ltCidr: Nodes[j].RangeData := CidrToRange(NodeStr); + end; + Nodes[j].NodeStr := NodeStr; + Nodes[j].NodeID := NodeID; + Inc(j); + end; + end; + + Result := Assigned(Nodes); +end; + +procedure TTcp.RemoveFromNodesListWithConvert(Nodes: ArrOfNodes; NodeType: TNodeType); +var + NodesCount, i: Integer; + Router: TPair; + + procedure RemoveRouterFromNodesList(RouterID: string); + var + FNodeTypes: TNodeTypes; + begin + if NodeType = ntNone then + NodesDic.Remove(RouterID) + else + begin + if NodesDic.TryGetValue(RouterID, FNodeTypes) then + begin + Exclude(FNodeTypes, NodeType); + NodesDic.AddOrSetValue(RouterID, FNodeTypes); + end; + end; + end; + +begin + NodesCount := Length(Nodes); + if NodesCount = 0 then + Exit; + for Router in RoutersDic do + begin + for i := 0 to NodesCount - 1 do + begin + case Nodes[i].NodeID of + ltIp: + begin + if Router.Value.IPv4 = Nodes[i].NodeStr then + RemoveRouterFromNodesList(Router.Key); + end; + ltCidr: + begin + if InRange(IpToInt(Router.Value.IPv4), Nodes[i].RangeData.IpStart, Nodes[i].RangeData.IpEnd) then + RemoveRouterFromNodesList(Router.Key); + end; + ltCode: + begin + if CountryCodes[GetCountryValue(Router.Value.IPv4)] = Nodes[i].NodeStr then + RemoveRouterFromNodesList(Router.Key); + end; + end; + end; + end; + +end; + +procedure TTcp.RoutersAutoSelectClick(Sender: TObject); +var + Router: Tpair; + ParseStr: ArrOfStr; + cdWeight, cdPing, CheckEntryPorts: Boolean; + GeoIpInfo: TGeoIpInfo; + Flags: TRouterFlags; + PriorityType, PingData, PingSum, PingCount, PingAvg, i: Integer; + NodeTypes: TNodeTypes; + FilterInfo: TFilterInfo; + CountryID: Byte; + EntryStr, MiddleStr, ExitStr, CountryCode, PortsData: string; + EntryNodes, MiddleNodes, ExitNodes: TStringList; + UniqueList: TDictionary; + SortCompare: TStringListSortCompare; + + function ListToStr(ls: TStringList; Max: Integer): string; + var + i, Count: Integer; + Search: Boolean; + RouterInfo: TRouterInfo; + GeoIpInfo: TGeoIpInfo; + begin + Result := ''; + Count := 0; + + for i := 0 to ls.Count - 1 do + begin + if PriorityType = PRIORITY_BALANCED then + begin + Search := False; + if RoutersDic.TryGetValue(ls[i], RouterInfo) then + begin + if GeoIpDic.TryGetValue(RouterInfo.IPv4, GeoIpInfo) then + Search := InRange(GeoIpInfo.ping, 1 , PingAvg); + end; + end + else + Search := True; + + if Count < Max then + begin + if Search then + begin + if cbAutoSelUniqueNodes.Checked then + begin + if UniqueList.ContainsKey(ls[i]) then + Continue + else + begin + UniqueList.AddOrSetValue(ls[i], 0); + Result := Result + ',' + ls[i]; + Inc(Count); + end; + end + else + begin + Result := Result + ',' + ls[i]; + Inc(Count); + end; + end; + + end + else + Break; + end; + Delete(Result, 1, 1); + end; + + procedure AddRouterToList(ls: TStringList; NodeType: TNodeType); + begin + if NodeType in NodeTypes then + begin + case PriorityType of + PRIORITY_BALANCED: + begin + ls.AddObject(Router.Key, TObject(Router.Value.Bandwidth)); + if not UniqueList.ContainsKey(Router.Key) then + begin + if (PingData <= udAutoSelMaxPing.Position) then + begin + UniqueList.AddOrSetValue(Router.Key, 0); + Inc(PingSum, PingData); + Inc(PingCount); + end; + end; + end; + PRIORITY_WEIGHT: ls.AddObject(Router.Key, TObject(Router.Value.Bandwidth)); + PRIORITY_PING: ls.AddObject(Router.Key, TObject(PingData)); + else + ls.AddObject(Router.Key, TObject(Random(MAXWORD))); + end; + end; + end; + +begin + if (RoutersDic.Count = 0) or (InfoStage > 0) or Assigned(Consensus) or Assigned(Descriptors) or tmScanner.Enabled then + Exit; + + EntryNodes := TStringList.Create; + MiddleNodes := TStringList.Create; + ExitNodes := TStringList.Create; + UniqueList := TDictionary.Create; + PriorityType := cbxAutoSelPriority.ItemIndex; + + PingCount := 0; + PingSum := 0; + PingAvg := 0; + + try + if cbUseReachableAddresses.Checked then + begin + PortsDic.Clear; + ParseStr := Explode(',', StringReplace(edReachableAddresses.Text, ' ', '', [rfReplaceAll])); + for i := 0 to Length(ParseStr) - 1 do + begin + if ValidInt(ParseStr[i], 1, 65535) then + PortsDic.AddOrSetValue(StrToInt(ParseStr[i]), 0); + end; + end; + CheckEntryPorts := PortsDic.Count > 0; + + for Router in RoutersDic do + begin + Flags := Router.Value.Flags; + CountryID := DEFAULT_COUNTRY_ID; + PingData := MAXWORD; + PortsData := ''; + NodeTypes := [ntEntry, ntMiddle, ntExit]; + + if PingNodesCount > 0 then + begin + if GeoIpDic.TryGetValue(Router.Value.IPv4, GeoIpInfo) then + begin + CountryID := GeoIpInfo.cc; + case GeoIpInfo.ping of + -1: PingData := MAXINT; + 0: PingData := MAXWORD; + else + PingData := GeoIpInfo.ping; + end; + PortsData := GeoIpInfo.ports; + end; + end; + + cdPing := (PingData <= udAutoSelMaxPing.Position) or ((PingData >= MAXWORD) and not cbAutoSelNodesWithPingOnly.Checked); + + CountryCode := CountryCodes[CountryID]; + + cdWeight := Router.Value.Bandwidth >= udAutoSelMinWeight.Position * 1024; + + if cdWeight and cdPing and (rfRelay in Flags) and not RouterInNodesList(Router.Key, Router.Value, ntExclude) then + begin + if cbAutoSelFilterCountriesOnly.Checked then + begin + if FilterDic.TryGetValue(CountryCode, FilterInfo) then + NodeTypes := FilterInfo.Data; + end; + + if (rfStable in Flags) or not cbAutoSelStableOnly.Checked then + begin + if (rfGuard in Flags) then + begin + if (Router.Value.Params and ROUTER_ALIVE <> 0) or (AliveNodesCount = 0) then + begin + if CheckEntryPorts then + begin + if PortsDic.ContainsKey(Router.Value.OrPort) then + AddRouterToList(EntryNodes, ntEntry); + end + else + AddRouterToList(EntryNodes, ntEntry); + end; + end; + + if (rfExit in Flags) and not (rfBadExit in Flags) then + AddRouterToList(ExitNodes, ntExit); + + if (not (rfHsDir in Flags) and (Router.Value.DirPort = 0)) or not cbAutoSelMiddleNodesWithoutDir.Checked then + AddRouterToList(MiddleNodes, ntMiddle); + end; + end; + end; + if PriorityType = PRIORITY_BALANCED then + begin + if PingCount > 0 then + PingAvg := Round(PingSum / PingCount); + end; + + case PriorityType of + PRIORITY_PING: SortCompare := CompIntObjectAsc + else + SortCompare := CompIntObjectDesc; + end; + + EntryNodes.CustomSort(SortCompare); + ExitNodes.CustomSort(SortCompare); + MiddleNodes.CustomSort(SortCompare); + + UniqueList.Clear; + EntryStr := ListToStr(EntryNodes, udAutoSelEntryCount.Position); + ExitStr := ListToStr(ExitNodes, udAutoSelExitCount.Position); + MiddleStr := ListToStr(MiddleNodes, udAutoSelMiddleCount.Position); + + ClearRouters(ntFavorites); + GetNodes(ExitStr, ntExit, True); + GetNodes(EntryStr, ntEntry, True); + GetNodes(MiddleStr, ntMiddle, True); + + CheckNodesListState(FAVORITES_ID); + CalculateTotalNodes; + ShowRouters; + RoutersUpdated := True; + EnableOptionButtons; + + finally + EntryNodes.Free; + MiddleNodes.Free; + ExitNodes.Free; + UniqueList.Free; + if PortsDic.Count > 0 then + PortsDic.Clear; + end; + +end; + +procedure TTcp.miAboutClick(Sender: TObject); +begin + if ShowMsg(Format(TransStr('356'), + [ + TransStr('105'), + GetFileVersionStr(Paramstr(0)), + 'Copyright © 2020, abysshint', + TransStr('357') + ]), TransStr('355'), mtInfo, True) then + begin + ShellOpen(GITHUB_URL); + end; +end; + +procedure TTcp.miDisableFiltersOnAuthorityOrBridgeClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'DisableFiltersOnAuthorityOrBridge', miDisableFiltersOnAuthorityOrBridge.Checked); +end; + +procedure TTcp.miDisableFiltersOnUserQueryClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'DisableFiltersOnUserQuery', miDisableFiltersOnUserQuery.Checked); +end; + +procedure TTcp.miDisableSelectionUnSuitableAsBridgeClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'DisableSelectionUnSuitableAsBridge', miDisableSelectionUnSuitableAsBridge.Checked); +end; + +procedure TTcp.miAlwaysShowExitCircuitClick(Sender: TObject); +begin + ShowCircuits; + SetConfigBoolean('Circuits', 'AlwaysShowExitCircuit', miAlwaysShowExitCircuit.Checked); +end; + +procedure TTcp.miAutoClearClick(Sender: TObject); +begin + SetConfigBoolean('Log', 'AutoClear', miAutoClear.Checked); +end; + +procedure TTcp.miAutoScrollClick(Sender: TObject); +begin + SetConfigBoolean('Log', 'AutoScroll', miAutoScroll.Checked); + CheckLogAutoScroll; +end; + +procedure TTcp.miAvoidAddingIncorrectNodesClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'AvoidAddingIncorrectNodes', miAvoidAddingIncorrectNodes.Checked); +end; + +procedure TTcp.miClearDNSCacheClick(Sender: TObject); +begin + if not CheckCacheOpConfirmation(TMenuItem(Sender).Caption) then + Exit; + SendCommand('SIGNAL CLEARDNSCACHE'); +end; + +procedure TTcp.ClearScannerCacheClick(Sender: TObject); +var + GeoIpItem: TPair; + GeoIpInfo: TGeoIpInfo; + ClearType: Byte; +begin + if not CheckCacheOpConfirmation(TMenuItem(Sender).Caption) then + Exit; + ClearType := TMenuItem(Sender).Tag; + for GeoIpItem in GeoIpDic do + begin + GeoIpInfo := GeoIpItem.Value; + case ClearType of + 1: GeoIpInfo.ping := 0; + 2: GeoIpInfo.ports := ''; + end; + GeoIpDic.AddOrSetValue(GeoIpItem.Key, GeoIpInfo); + end; + LoadConsensus; + if ConnectState = 0 then + SaveNetworkCache; +end; + +procedure TTcp.EditMenuClick(Sender: TObject); +begin + case TMenuItem(Sender).Tag of + 1: EditMenuHandle(emCut); + 2: EditMenuHandle(emCopy); + 3: EditMenuHandle(emPaste); + 4: EditMenuHandle(emSelectAll); + 5: EditMenuHandle(emClear); + 6: EditMenuHandle(emDelete); + 7: EditMenuHandle(emFind); + end; +end; + +procedure TTcp.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Closing := True; +end; + +procedure TTcp.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if (cbMinimizeOnClose.Checked) and not Closing then + begin + CanClose := False; + Hide; + end; +end; + +procedure TTcp.LoadStaticArray(Data: array of TStaticPair); +var + i: Integer; +begin + for i := 0 to Length(Data) - 1 do + ConstDic.AddOrSetValue(Data[i].Key, Data[i].Value); +end; + +procedure TTcp.UpdateScaleFactor; +var + Factor: Integer; +begin + Scale := 1.0; + if Screen.PixelsPerInch <> Screen.DefaultPixelsPerInch then + Scale := Screen.PixelsPerInch / Screen.DefaultPixelsPerInch + else + begin + if (Win32MajorVersion = 6) and (Win32MinorVersion = 3) then + begin + Factor := StrToIntDef(RegistryGetValue(HKEY_CURRENT_USER, 'Control Panel\Desktop', 'DesktopDPIOverride'), 0); + if Factor <> 0 then + begin + case Factor of + 1: Scale := 1.25; + 2: Scale := 1.50; + 3: Scale := 2.0; + end; + end; + end; + end; + + sgHs.ColWidths[HS_VERSION] := Round(50 * Scale); + sgHs.ColWidths[HS_INTRO_POINTS] := Round(80 * Scale); + sgHs.ColWidths[HS_MAX_STREAMS] := Round(90 * Scale); + sgHs.ColWidths[HS_STATE] := Round(24 * Scale); + sgHs.ColWidths[HS_PORTS_DATA] := -1; + sgHs.ColWidths[HS_PREVIOUS_NAME] := -1; + sgHsPorts.ColWidths[HSP_REAL_PORT] := Round(40 * Scale); + sgHsPorts.ColWidths[HSP_VIRTUAL_PORT] := Round(87 * Scale); + sgFilter.ColWidths[FILTER_ID] := Round(35 * Scale); + sgFilter.ColWidths[FILTER_FLAG] := Round(23 * Scale); + sgFilter.ColWidths[FILTER_TOTAL] := Round(55 * Scale); + sgFilter.ColWidths[FILTER_GUARD] := Round(55 * Scale); + sgFilter.ColWidths[FILTER_EXIT] := Round(55 * Scale); + sgFilter.ColWidths[FILTER_ALIVE] := Round(55 * Scale); + sgFilter.ColWidths[FILTER_PING] := Round(55 * Scale); + sgFilter.ColWidths[FILTER_ENTRY_NODES] := Round(23 * Scale); + sgFilter.ColWidths[FILTER_MIDDLE_NODES] := Round(23 * Scale); + sgFilter.ColWidths[FILTER_EXIT_NODES] := Round(23 * Scale); + sgFilter.ColWidths[FILTER_EXCLUDE_NODES] := Round(23 * Scale); + sgRouters.ColWidths[ROUTER_ID] := -1; + sgRouters.ColWidths[ROUTER_FLAG] := Round(23 * Scale); + sgRouters.ColWidths[ROUTER_WEIGHT] := Round(63 * Scale); + sgRouters.ColWidths[ROUTER_PORT] := Round(43 * Scale); + sgRouters.ColWidths[ROUTER_VERSION] := Round(60 * Scale); + sgRouters.ColWidths[ROUTER_FLAGS] := Round(96 * Scale); + sgRouters.ColWidths[ROUTER_ENTRY_NODES] := Round(23 * Scale); + sgRouters.ColWidths[ROUTER_MIDDLE_NODES] := Round(23 * Scale); + sgRouters.ColWidths[ROUTER_EXIT_NODES] := Round(23 * Scale); + sgRouters.ColWidths[ROUTER_EXCLUDE_NODES] := Round(23 * Scale); + sgCircuits.ColWidths[CIRC_ID] := -1; + sgCircuits.ColWidths[CIRC_STREAMS] := Round(30 * Scale); + sgCircuits.ColWidths[CIRC_BYTES_READ] := 0; + sgCircuits.ColWidths[CIRC_BYTES_WRITTEN] := 0; + sgCircuitInfo.ColWidths[CIRC_INFO_ID] := -1; + sgCircuitInfo.ColWidths[CIRC_INFO_FLAG] := Round(23 * Scale); + sgCircuitInfo.ColWidths[CIRC_INFO_WEIGHT] := Round(72 * Scale); + sgStreams.ColWidths[STREAMS_ID] := -1; + sgStreams.ColWidths[STREAMS_TRACK] := Round(24 * Scale); + sgStreams.ColWidths[STREAMS_COUNT] := Round(30 * Scale); + sgStreamsInfo.ColWidths[STREAMS_INFO_ID] := -1; + sgTransports.ColWidths[PT_HANDLER] := Round(120 * Scale); + sgTransports.ColWidths[PT_TYPE] := Round(35 * Scale); + sgTransports.ColWidths[PT_PARAMS] := -1; + CheckScannerControls; + CheckStreamsControls; +end; + +procedure TTcp.FormCreate(Sender: TObject); +var + i: Integer; + Filter: TFilterInfo; +begin + FirstLoad := True; + FormSize := 1; + + udNumCPUs.Max := GetCPUCount; + udMaxMemInQueues.Max := GetAvailPhysMemory; + LoadIconsFromResource(lsFlags, 'ICON_FLAGS'); + if not StyleServices.Enabled then + begin + paStatus.Color := clBtnFace; + paCircuits.Color := clBtnFace; + paRouters.Color := clBtnFace; + end; + + if (Win32MajorVersion = 5) then + begin + btnChangeCircuit.ImageMargins.Right := btnChangeCircuit.ImageMargins.Right - 16; + btnShowNodes.Images := lsMain; + btnShowNodes.ImageIndex := 14; + btnShowNodes.ImageMargins.Left := -32; + end; + + UpdateScaleFactor; + + hJob := CreateJob(nil, PAnsiChar(AnsiString('TCP-' + UserProfile))); + if hJob <> 0 then + begin + jLimit.BasicLimitInformation.LimitFlags := JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; + SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, @jLimit, SizeOf(TJobObjectExtendedLimitInformation)); + end; + + EncodingNoBom := TUTF8EncodingNoBOM.Create; + ThemesDir := ProgramDir + 'Skins\'; + TransportsDir := ProgramDir + 'Tor\PluggableTransports\'; + HsDir := UserDir + 'services\'; + OnionAuthDir := UserDir + 'onion-auth\'; + LogsDir := UserDir + 'logs\'; + ConsensusFile:= UserDir + 'cached-microdesc-consensus'; + DescriptorsFile := UserDir + 'cached-descriptors'; + NewDescriptorsFile := UserDir + 'cached-descriptors.new'; + UserConfigFile := UserDir + 'settings.ini'; + LangFile := ProgramDir + 'Translations.ini'; + DefaultsFile := ProgramDir + 'Defaults.ini'; + TorConfigFile := UserDir + 'torrc'; + TorStateFile := UserDir + 'state'; + TorExeFile := ProgramDir + 'Tor\tor.exe'; + GeoIpFile := ProgramDir + 'Data\Tor\geoip'; + GeoIpv6File := ProgramDir + 'Data\Tor\geoip6'; + NetworkCacheFile := UserDir + 'network-cache'; + BridgesCacheFile := UserDir + 'bridges-cache'; + + GeoIpDic := TDictionary.Create; + CircuitsDic := TDictionary.Create; + StreamsDic := TDictionary.Create; + RoutersDic := TDictionary.Create; + FilterDic := TDictionary.Create; + NodesDic := TDictionary.Create; + TrackHostDic := TDictionary.Create; + VersionsDic := TDictionary.Create; + RangesDic := TDictionary.Create; + PortsDic := TDictionary.Create; + ConstDic := TDictionary.Create; + TransportsDic := TDictionary.Create; + BridgesDic := TDictionary.Create; + + DefaultsDic := TDictionary.Create; + DefaultsDic.AddOrSetValue('MaxCircuitDirtiness', '600'); + DefaultsDic.AddOrSetValue('CircuitBuildTimeout', '60'); + DefaultsDic.AddOrSetValue('NewCircuitPeriod', '30'); + DefaultsDic.AddOrSetValue('MaxClientCircuitsPending', '32'); + DefaultsDic.AddOrSetValue('AvoidDiskWrites', '0'); + DefaultsDic.AddOrSetValue('TrackHostExitsExpire', '1800'); + DefaultsDic.AddOrSetValue('LearnCircuitBuildTimeout', '1'); + DefaultsDic.AddOrSetValue('SafeLogging', '1'); + DefaultsDic.AddOrSetValue('UseBridges', '0'); + DefaultsDic.AddOrSetValue('BridgeDistribution', 'any'); + DefaultsDic.AddOrSetValue('DirCache', '1'); + DefaultsDic.AddOrSetValue('Nickname', 'Unnamed'); + DefaultsDic.AddOrSetValue('PublishServerDescriptor', '1'); + DefaultsDic.AddOrSetValue('DirReqStatistics', '1'); + DefaultsDic.AddOrSetValue('HiddenServiceStatistics', '1'); + DefaultsDic.AddOrSetValue('EnforceDistinctSubnets', '1'); + DefaultsDic.AddOrSetValue('AssumeReachable', '0'); + DefaultsDic.AddOrSetValue('RendPostPeriod', '3600'); + DefaultsDic.AddOrSetValue('StrictNodes', '0'); + + cbEnableSocks.ResetValue := cbEnableSocks.Checked; + udHsMaxStreams.ResetValue := udHsMaxStreams.Position; + udHsNumIntroductionPoints.ResetValue := udHsNumIntroductionPoints.Position; + udHsRealPort.ResetValue := udHsRealPort.Position; + udHsVirtualPort.ResetValue := udHsVirtualPort.Position; + cbxHsVersion.ResetValue := HS_VERSION_3; + + for i := 0 to MAX_COUNTRIES - 1 do + begin + Filter.cc := i; + Filter.Data := []; + FilterDic.Add(CountryCodes[i], Filter); + end; + for i := 0 to MAX_SPEED_DATA_LENGTH - 1 do + begin + SpeedData[i].DL := -1; + SpeedData[i].UL := -1; + end; + + LoadStaticArray(CircuitStatuses); + LoadStaticArray(CircuitPurposes); + LoadStaticArray(StreamStatuses); + LoadStaticArray(StreamPurposes); + + sgHs.ColsDefaultAlignment[HS_VERSION] := taCenter; + sgHs.ColsDefaultAlignment[HS_INTRO_POINTS] := taCenter; + sgHs.ColsDefaultAlignment[HS_MAX_STREAMS] := taCenter; + sgHs.ColsDefaultAlignment[HS_STATE] := taCenter; + sgHsPorts.ColsDefaultAlignment[HSP_INTERFACE] := taCenter; + sgHsPorts.ColsDefaultAlignment[HSP_REAL_PORT] := taCenter; + sgHsPorts.ColsDefaultAlignment[HSP_VIRTUAL_PORT] := taCenter; + sgFilter.ColsDefaultAlignment[FILTER_ID] := taCenter; + sgFilter.ColsDefaultAlignment[FILTER_TOTAL] := taCenter; + sgFilter.ColsDefaultAlignment[FILTER_GUARD] := taCenter; + sgFilter.ColsDefaultAlignment[FILTER_EXIT] := taCenter; + sgFilter.ColsDefaultAlignment[FILTER_ALIVE] := taCenter; + sgFilter.ColsDefaultAlignment[FILTER_PING] := taCenter; + sgFilter.ColsDefaultAlignment[FILTER_ENTRY_NODES] := taCenter; + sgFilter.ColsDefaultAlignment[FILTER_MIDDLE_NODES] := taCenter; + sgFilter.ColsDefaultAlignment[FILTER_EXIT_NODES] := taCenter; + sgFilter.ColsDefaultAlignment[FILTER_EXCLUDE_NODES] := taCenter; + sgRouters.ColsDefaultAlignment[ROUTER_WEIGHT] := taRightJustify; + sgRouters.ColsDefaultAlignment[ROUTER_PORT] := taCenter; + sgRouters.ColsDefaultAlignment[ROUTER_VERSION] := taCenter; + sgRouters.ColsDefaultAlignment[ROUTER_PING] := taCenter; + sgRouters.ColsDefaultAlignment[ROUTER_FLAGS] := taCenter; + sgRouters.ColsDefaultAlignment[ROUTER_ENTRY_NODES] := taCenter; + sgRouters.ColsDefaultAlignment[ROUTER_MIDDLE_NODES] := taCenter; + sgRouters.ColsDefaultAlignment[ROUTER_EXIT_NODES] := taCenter; + sgRouters.ColsDefaultAlignment[ROUTER_EXCLUDE_NODES] := taCenter; + sgCircuits.ColsDefaultAlignment[CIRC_STREAMS] := taCenter; + sgCircuitInfo.ColsDefaultAlignment[CIRC_INFO_WEIGHT] := taRightJustify; + sgCircuitInfo.ColsDefaultAlignment[CIRC_INFO_PING] := taCenter; + sgStreams.ColsDefaultAlignment[STREAMS_TRACK] := taCenter; + sgStreams.ColsDefaultAlignment[STREAMS_COUNT] := taCenter; + sgStreams.ColsDefaultAlignment[STREAMS_BYTES_READ] := taRightJustify; + sgStreams.ColsDefaultAlignment[STREAMS_BYTES_WRITTEN] := taRightJustify; + sgStreamsInfo.ColsDefaultAlignment[STREAMS_INFO_SOURCE_ADDR] := taCenter; + sgStreamsInfo.ColsDefaultAlignment[STREAMS_INFO_DEST_ADDR] := taCenter; + sgStreamsInfo.ColsDefaultAlignment[STREAMS_INFO_PURPOSE] := taCenter; + sgStreamsInfo.ColsDefaultAlignment[STREAMS_INFO_BYTES_READ] := taRightJustify; + sgStreamsInfo.ColsDefaultAlignment[STREAMS_INFO_BYTES_WRITTEN] := taRightJustify; + sgTransports.ColsDefaultAlignment[PT_TYPE] := taCenter; + + sgFilter.ColsDataType[FILTER_TOTAL] := dtInteger; + sgFilter.ColsDataType[FILTER_GUARD] := dtInteger; + sgFilter.ColsDataType[FILTER_EXIT] := dtInteger; + sgFilter.ColsDataType[FILTER_ALIVE] := dtInteger; + sgRouters.ColsDataType[ROUTER_WEIGHT] := dtSize; + sgRouters.ColsDataType[ROUTER_PORT] := dtInteger; + sgRouters.ColsDataType[ROUTER_FLAGS] := dtParams; + sgCircuits.ColsDataType[CIRC_ID] := dtInteger; + sgCircuits.ColsDataType[CIRC_STREAMS] := dtInteger; + sgStreams.ColsDataType[STREAMS_ID] := dtInteger; + sgStreams.ColsDataType[STREAMS_TRACK] := dtInteger; + sgStreams.ColsDataType[STREAMS_BYTES_READ] := dtSize; + sgStreams.ColsDataType[STREAMS_BYTES_WRITTEN] := dtSize; + sgStreamsInfo.ColsDataType[STREAMS_INFO_ID] := dtInteger; + sgStreamsInfo.ColsDataType[STREAMS_INFO_BYTES_READ] := dtSize; + sgStreamsInfo.ColsDataType[STREAMS_INFO_BYTES_WRITTEN] := dtSize; + + sgFilter.Tag := GRID_FILTER; + sgRouters.Tag := GRID_ROUTERS; + sgCircuits.Tag := GRID_CIRCUITS; + sgStreams.Tag := GRID_STREAMS; + sgHs.Tag := GRID_HS; + sgHsPorts.Tag := GRID_HSP; + sgCircuitInfo.Tag := GRID_CIRC_INFO; + sgStreamsInfo.Tag := GRID_STREAM_INFO; + sgTransports.Tag := GRID_TRANSPORTS; + + miClearFilterEntry.Tag := ENTRY_ID; + miClearFilterMiddle.Tag := MIDDLE_ID; + miClearFilterExit.Tag := EXIT_ID; + miClearFilterExclude.Tag := EXCLUDE_ID; + miClearFilterAll.Tag := NONE_ID; + + miClearRoutersEntry.Tag := ENTRY_ID; + miClearRoutersMiddle.Tag := MIDDLE_ID; + miClearRoutersExit.Tag := EXIT_ID; + miClearRoutersExclude.Tag := EXCLUDE_ID; + miClearRoutersFavorites.Tag := FAVORITES_ID; + + lbFavoritesEntry.HelpKeyword := IntToStr(ENTRY_ID); + lbFavoritesMiddle.HelpKeyword := IntToStr(MIDDLE_ID); + lbFavoritesExit.HelpKeyword := IntToStr(EXIT_ID); + lbExcludeNodes.HelpKeyword := IntToStr(EXCLUDE_ID); + lbFavoritesTotal.HelpKeyword := IntToStr(FAVORITES_ID); + + GetTorVersion; +end; + +procedure TTcp.LoadOptions; +begin + CheckFileEncoding(UserConfigFile); + UpdateConfigVersion; + ResetOptions; + if cbMinimizeOnStartup.Checked then + Application.ShowMainForm := False + else + RestoreForm; +end; + +procedure TTCP.GetTorVersion; +var + ErrorMode: DWORD; + Fail: Boolean; +begin + Fail := True; + if FileExists(TorExeFile) then + begin + if not Assigned(GetProcAddress(GetModuleHandle('IPHLPAPI.DLL'), 'if_nametoindex')) then + begin + ErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); + SetErrorMode(ErrorMode or SEM_FAILCRITICALERRORS); + end; + TorVersionProcess := ExecuteProcess(TorExeFile + ' --version', [pfHideWindow, pfReadStdOut], hJob); + if TorVersionProcess.hProcess <> 0 then + begin + CheckVersionStart(TorVersionProcess.hStdOutput); + Fail := False; + end; + SetErrorMode(0); + end; + if Fail then + begin + TorVersion := '0.0.0.0'; + LoadOptions; + end; +end; + +procedure TTcp.FindDialogFind(Sender: TObject); +begin + if Assigned(FindObject) then + begin + if SearchEdit(FindObject, FindDialog.FindText, FindDialog.Options, SearchFirst) then + SearchFirst := False + else + begin + if frDown in FindDialog.Options then + FindObject.SelStart := 1 + else + FindObject.SelStart := FindObject.GetTextLen; + + if SearchEdit(FindObject, FindDialog.FindText, FindDialog.Options, SearchFirst) then + SearchFirst := False + else + ShowMsg(Format(TransStr('378'), [FindDialog.FindText])); + end; + if FindObject.CanFocus then + FindObject.SetFocus; + end; +end; + +procedure TTcp.FindInCircuits(CircID, NodeID: string; AutoSelect: Boolean = False); +var + CircuitIndex: Integer; + NodeIndex: Integer; +begin + if AutoSelect then + SelectExitCircuit := True; + if (not cbEnableSocks.Checked) or + (not miAlwaysShowExitCircuit.Checked and + (miHideCircuitsWithoutStreams.Checked or not miCircExit.Checked)) then + begin + SelectExitCircuit := False; + Exit; + end; + CircuitIndex := sgCircuits.Cols[CIRC_ID].IndexOf(CircID); + if CircuitIndex > 0 then + begin + SetGridLastCell(sgCircuits, True, False, False, CircuitIndex, CIRC_PURPOSE); + NodeIndex := sgCircuitInfo.Cols[CIRC_ID].IndexOf(NodeID); + if NodeIndex > 0 then + begin + SelectExitCircuit := False; + SetGridLastCell(sgCircuitInfo, True, False, False, NodeIndex, CIRC_INFO_NAME); + Exit; + end; + end; +end; + +procedure TTcp.lbClientVersionClick(Sender: TObject); +begin + ShellOpen(GetDefaultsValue('DownloadUrl', DOWNLOAD_URL)); +end; + +procedure TTcp.lbExitCountryDblClick(Sender: TObject); +begin + if cbEnableSocks.Checked and (ConnectState = 2) then + FindInFilter(lbExitIp.Caption); +end; + +procedure TTcp.lbExitIpMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if cbEnableSocks.Checked and (ConnectState = 2) then + begin + if (Button = mbLeft) and (ssDouble in Shift) then + begin + if ssCtrl in Shift then + FindInRouters(ExitNodeID) + else + begin + ShowCircuits; + FindInCircuits(Circuit, ExitNodeID, True); + sbShowCircuits.Click; + end; + end; + end; +end; + +procedure TTcp.lbExitMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); +var + State: Boolean; +begin + State := cbEnableSocks.Checked and (ConnectState = 2); + if State then + begin + lbExitIp.Tag := 1; + if (TLabel(Sender) = lbExitCountry) and (lbExitCountry.Hint <> '') then + Application.ActivateHint(Mouse.CursorPos) + else + Application.CancelHint; + end; + mnDetails.AutoPopup := State and (ExitNodeID <> ''); +end; + +procedure TTcp.ShowFavoritesRouters(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var + FavoritesID: Integer; +begin + if (Button = mbLeft) and (ssDouble in Shift) then + begin + FavoritesID := StrToInt(TLabel(Sender).HelpKeyword); + if (ssCtrl in Shift) and (FavoritesID in [ENTRY_ID..EXCLUDE_ID]) then + begin + sbShowOptions.Click; + pcOptions.TabIndex := tsLists.TabIndex; + cbxNodesListType.ItemIndex := FavoritesToNodes(FavoritesID); + LoadNodesList; + end + else + begin + if RoutersCustomFilter = FavoritesID then + begin + IntToMenu(miRtFilters, RoutersFilters); + RoutersCustomFilter := LastRoutersCustomFilter; + LastRoutersCustomFilter := 0; + end + else + begin + if RoutersCustomFilter in [ENTRY_ID..FAVORITES_ID] then + LastRoutersCustomFilter := 0 + else + LastRoutersCustomFilter := RoutersCustomFilter; + RoutersCustomFilter := FavoritesID; + end; + CheckShowRouters; + ShowRouters; + SaveRoutersFilterdata(False, False); + end; + end; +end; + +function TTcp.GetFormPositionStr: string; +begin + Result := Format('%d,%d,%d,%d', [DecFormPos.X, DecFormPos.Y, IncFormPos.X, IncFormPos.Y]); +end; + +procedure TTcp.FormDestroy(Sender: TObject); +var + ini: TMemIniFile; +begin + if ConnectState > 0 then + StopTor; + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + ini.WriteString('Main', 'FormPosition', GetFormPositionStr); + ini.WriteInteger('Main', 'OptionsPage', pcOptions.TabIndex); + ini.WriteInteger('Main', 'LastPlace', LastPlace); + ini.WriteBool('Main', 'Terminated', False); + ini.WriteInt64('Status', 'TotalDL', TotalDL); + ini.WriteInt64('Status', 'TotalUL', TotalUL); + finally + ini.UpdateFile; + ini.Free; + end; + tiTray.Free; + StreamsDic.Free; + CircuitsDic.Free; + FilterDic.Free; + RoutersDic.Free; + GeoIpDic.Free; + NodesDic.Free; + TrackHostDic.Free; + VersionsDic.Free; + TransportsDic.Free; + BridgesDic.Free; + RangesDic.Free; + PortsDic.Free; + ConstDic.Free; + DefaultsDic.Free; + LangStr.Free; + TorConfig.Free; + EncodingNoBom.Free; + ExitProcess(Handle); +end; + +procedure TTcp.FormPaint(Sender: TObject); +begin + EnableComposited(Tcp.gbOptions); + EnableComposited(Tcp.gbControlAuth); + EnableComposited(Tcp.gbInterface); + EnableComposited(Tcp.gbProfile); + EnableComposited(Tcp.gbHsEdit); + EnableComposited(Tcp.gbNetworkScanner); + EnableComposited(Tcp.gbAutoSelectRouters); +end; + +procedure TTcp.FormResize(Sender: TObject); +begin + UpdateFormSize; +end; + +procedure TTcp.tiTrayClick(Sender: TObject); +begin + if Tcp.Visible then + begin + FindDialog.CloseDialog; + Tcp.Visible := False; + end + else + RestoreForm; +end; + +procedure TTcp.tmCircuitsTimer(Sender: TObject); +begin + ShowCircuits; +end; + +procedure TTcp.tmConsensusTimer(Sender: TObject); +var + ConsensusDate, NewDescriptorsDate: TDatetime; +begin + if FileAge(ConsensusFile, ConsensusDate) then + begin + if (ConsensusDate <> LastConsensusDate) then + LoadConsensus + else + begin + if cbUseBridges.Checked then + begin + if FileAge(NewDescriptorsFile, NewDescriptorsDate) then + begin + if (NewDescriptorsDate <> LastNewDescriptorsDate) then + LoadDescriptors; + end; + end; + end; + end; + if (AutoScanStage = 1) and not (Assigned(Consensus) or Assigned(Descriptors)) then + ScanNetwork(stBoth, spAuto); +end; + +procedure TTcp.tmUpdateIpTimer(Sender: TObject); +begin + SendDataThroughProxy; +end; + +procedure TTcp.miSafeLoggingClick(Sender: TObject); +begin + SetTorConfig('SafeLogging', IntToStr(Integer(miSafeLogging.Checked)), [cfAutoSave]); + ReloadTorConfig; +end; + +procedure TTcp.miSaveTemplateClick(Sender: TObject); +var + ini: TMemIniFile; + TemplateName, EntryNodes, MiddleNodes, ExitNodes: string; + FavoritesEntry, FavoritesMiddle, FavoritesExit, ExcludeNodes: string; + Item: TPair; + NodeItem: TPair; +begin + TemplateName := InputBox(TransStr('256'), TransStr('257') + ':', ''); + if Trim(TemplateName) <> '' then + begin + if Pos(';', TemplateName) = 0 then + begin + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + EntryNodes := ''; + MiddleNodes := ''; + ExitNodes := ''; + FavoritesEntry := ''; + FavoritesMiddle := ''; + FavoritesExit := ''; + ExcludeNodes := ''; + + if miTplSaveCountries.Checked then + begin + for Item in FilterDic do + begin + if ntEntry in Item.Value.Data then + EntryNodes := EntryNodes + ',' + Item.Key; + if ntMiddle in Item.Value.Data then + MiddleNodes := MiddleNodes + ',' + Item.Key; + if ntExit in Item.Value.Data then + ExitNodes := ExitNodes + ',' + Item.Key; + end; + Delete(EntryNodes, 1, 1); + Delete(MiddleNodes, 1, 1); + Delete(ExitNodes, 1, 1); + end; + + if miTplSaveRouters.Checked or miTplSaveExcludes.Checked then + begin + for NodeItem in NodesDic do + begin + if miTplSaveRouters.Checked then + begin + if ntEntry in NodeItem.Value then + FavoritesEntry := FavoritesEntry + ',' + NodeItem.Key; + if ntMiddle in NodeItem.Value then + FavoritesMiddle := FavoritesMiddle + ',' + NodeItem.Key; + if ntExit in NodeItem.Value then + FavoritesExit := FavoritesExit + ',' + NodeItem.Key; + end; + if miTplSaveExcludes.Checked then + if ntExclude in NodeItem.Value then + ExcludeNodes := ExcludeNodes + ',' + NodeItem.Key; + end; + if miTplSaveRouters.Checked then + begin + Delete(FavoritesEntry, 1, 1); + Delete(FavoritesMiddle, 1, 1); + Delete(FavoritesExit, 1, 1); + end; + if miTplSaveExcludes.Checked then + Delete(ExcludeNodes, 1, 1); + end; + + ini.WriteString('Templates', IntToStr(DateTimeToUnix(Now)), TemplateName + ';' + + IntToStr(cbxFilterMode.ItemIndex) + ';' + + EntryNodes + ';' + MiddleNodes + ';' + ExitNodes + ';' + + FavoritesEntry + ';' + FavoritesMiddle + ';' + FavoritesExit + ';' + ExcludeNodes + ); + + finally + ini.UpdateFile; + ini.Free; + end; + ShowBalloon(Format(TransStr('363'), [TemplateName])); + end + else + ShowMsg(Format(TransStr('255'), [';']), '', mtWarning); + end; +end; + +procedure TTcp.SelectLogSeparater(Sender: TObject); +var + SeparateType: Byte; +begin + TMenuItem(Sender).Checked := True; + SeparateType := TMenuItem(Sender).Tag; + TorLogFile := GetLogFileName(SeparateType); + SetConfigInteger('Log', 'SeparateType', SeparateType); +end; + +procedure TTcp.SelectLogScrollbar(Sender: TObject); +begin + SetLogScrollBar(TMenuItem(Sender).Tag, TMenuItem(Sender)); +end; + +procedure TTcp.SetLogScrollBar(ScrollType: Byte; Menu: TMenuItem = nil); +begin + case ScrollType of + 0: meLog.ScrollBars := ssVertical; + 1: meLog.ScrollBars := ssHorizontal; + 2: meLog.ScrollBars := ssBoth; + 3: meLog.ScrollBars := ssNone; + end; + if ScrollType in [1,2] then + miWordWrap.Enabled := False + else + miWordWrap.Enabled := True; + + if Menu <> nil then + begin + Menu.Checked := True; + CheckLogAutoScroll(True); + SetConfigInteger('Log', 'ScrollBars', ScrollType); + end; +end; + +procedure TTcp.miServerInfoClick(Sender: TObject); +begin + OpenMetricsUrl('#details', lbFingerprint.Caption); +end; + +procedure TTcp.SetLogLevel(Sender: TObject); +begin + if TMenuItem(Sender).Checked then + Exit; + TMenuItem(Sender).Checked := True; + SetTorConfig('Log', AnsiLowerCase(copy(TMenuItem(Sender).Name, 3, Length(TMenuItem(Sender).Name) - 2)) + ' stdout', [cfAutoSave]); + ReloadTorConfig; +end; + +procedure TTcp.miOpenFileLogClick(Sender: TObject); +begin + ShellOpen(TorLogFile); +end; + +procedure TTcp.SelectTrafficPeriod(Sender: TObject); +begin + if TMenuItem(Sender).Checked then + Exit; + TMenuItem(Sender).Checked := True; + CurrentTrafficPeriod := TMenuItem(Sender).Tag; + pbTraffic.Repaint; + SetConfigInteger('Status', 'CurrentTrafficPeriod', CurrentTrafficPeriod); +end; + +procedure TTcp.miPreferWebTelegramClick(Sender: TObject); +begin + SetConfigBoolean('Network', 'PreferWebTelegram', miPreferWebTelegram.Checked); +end; + +procedure TTcp.ResetGuards(GuardType: TGuardType); +var + ls: TStringList; + i: Integer; + TypeStr: string; +begin + if not FileExists(TorStateFile) then + Exit; + case Byte(GuardType) of + 1: TypeStr := 'in=bridges'; + 2: TypeStr := 'in=restricted'; + 3: TypeStr := 'in=default'; + else + TypeStr := ''; + end; + + ls := TStringList.Create; + try + ls.LoadFromFile(TorStateFile); + for i := ls.Count - 1 downto 0 do + begin + if (Pos('Guard ' + TypeStr, ls[i]) = 1) then + ls.Delete(i); + end; + ls.SaveToFile(TorStateFile); + miResetGuards.Tag := 0; + finally + ls.Free; + end; +end; + +procedure TTcp.miUpdateIpToCountryCacheClick(Sender: TObject); +begin + if not CheckCacheOpConfirmation(TMenuItem(Sender).Caption) then + Exit; + GeoIpUpdating := True; + InfoStage := 1; +end; + +procedure TTcp.SetResetGuards(Sender: TObject); +var + Temp: string; +begin + miResetGuards.Tag := TMenuItem(Sender).Tag; + if ConnectState = 2 then + Temp := TransStr('164') + '. ' + else + Temp := ''; + if ShowMsg(Format(TransStr('346'), [Temp]), '', mtWarning, True) then + begin + if ConnectState = 2 then + RestartTor(1) + else + ResetGuards(TGuardType(miResetGuards.Tag)); + end; +end; + +procedure TTcp.miRtDisableBridgesClick(Sender: TObject); +begin + cbUseBridges.Checked := False; + ShowRouters; + BridgesCheckControls; + EnableOptionButtons; +end; + +procedure TTcp.miRtRelayInfoClick(Sender: TObject); +begin + OpenMetricsUrl('#details', miRtCopyFingerprint.Caption); +end; + +procedure TTcp.miRtResetFilterClick(Sender: TObject); +var + ini: TMemIniFile; + Data: string; + ParseStr: ArrOfStr; + i: Integer; +begin + ini := TMemIniFile.Create(UserConfigFile, TEncoding.UTF8); + try + Data := ini.ReadString('Routers', 'DefaultFilter', DEFAULT_ROUTERS_FILTER_DATA); + LoadRoutersFilterData(Data); + ParseStr := Explode(';', Data); + if Length(ParseStr) > 7 then + begin + if Trim(ParseStr[8]) = '' then + ParseStr[7] := IntToStr(cbxRoutersQuery.ItemIndex); + Data := ''; + for i := 0 to Length(ParseStr) - 1 do + Data := Data + ';' + ParseStr[i]; + Delete(Data, 1, 1); + end; + + ini.WriteString('Routers', 'CurrentFilter', Data); + finally + ini.UpdateFile; + ini.Free; + end; +end; + +procedure TTcp.miRtSaveDefaultClick(Sender: TObject); +begin + SaveRoutersFilterdata(True); +end; + +procedure TTcp.miRoutersScrollTopClick(Sender: TObject); +begin + SetConfigBoolean('Routers', 'RoutersScrollTop', miRoutersScrollTop.Checked); +end; + +procedure TTcp.SelectNodeAsBridge(Sender: TObject); +var + BridgeStr: string; +begin + cbUseBridges.Checked := True; + cbUsePreferredBridge.Checked := True; + BridgeStr := TMenuItem(Sender).Hint; + if BridgeStr = '' then + BridgeStr := TMenuItem(Sender).Caption; + edPreferredBridge.Text := BridgeStr; + ShowRouters; + BridgesCheckControls; + EnableOptionButtons; +end; + +procedure TTcp.miRoutersSelectRowClick(Sender: TObject); +begin + CheckSelectRowOptions(sgRouters, miRoutersSelectRow.Checked, True); +end; + +procedure TTcp.OpenMetricsUrl(Page, Query: string); +begin + if Query = '' then + Exit; + ShellOpen(GetDefaultsValue('MetricsUrl', METRICS_URL) + Page + '/' + Query); +end; + +procedure TTcp.OptionsChange(Sender: TObject); +begin + EnableOptionButtons; +end; + +procedure TTcp.miDetailsRelayInfoClick(Sender: TObject); +begin + OpenMetricsUrl('#details', SelectedNode); +end; + +procedure TTcp.miDetailsUpdateIpClick(Sender: TObject); +begin + SendDataThroughProxy; +end; + +procedure TTcp.miDestroyExitCircuitsClick(Sender: TObject); +var + Item: TPair; + ParseStr: ArrOfStr; + Temp: string; + i: Integer; +begin + if (ConnectState <> 2) then + Exit; + + Temp := ''; + for Item in CircuitsDic do + if not (bfInternal in Item.Value.BuildFlags) then + Temp := Temp + ',' + Item.Key; + Delete(Temp, 1, 1); + + if Temp <> '' then + begin + btnChangeCircuit.Enabled := False; + miChangeCircuit.Enabled := False; + ParseStr := Explode(',', Temp); + Temp := ''; + for i := 0 to Length(ParseStr) - 1 do + begin + CircuitsDic.Remove(ParseStr[i]); + Temp := Temp + BR + 'CLOSECIRCUIT ' + ParseStr[i]; + end; + Delete(Temp, 1, Length(BR)); + ShowCircuits; + SendCommand(Temp); + end; +end; + +procedure TTcp.CloseCircuit(CircuitID: string; AutoUpdate: Boolean = True); +begin + if (CircuitID = '') or (ConnectState <> 2) then + Exit; + if CircuitsDic.ContainsKey(CircuitID) then + begin + CircuitsDic.Remove(CircuitID); + SendCommand('CLOSECIRCUIT ' + CircuitID); + end; + if AutoUpdate then + ShowCircuits; +end; + +procedure TTcp.ClearBridgesCache(Sender: TObject); +var + Item: TPair; + GeoIpInfo: TGeoIpInfo; + RouterInfo: TRouterInfo; + PortsData: ArrOfStr; + PreferredBridge: TBridge; + LastPreferredBridge: string; + ClearAll, Deleted: Boolean; + Search, i: Integer; + ls: TStringList; +begin + if not CheckCacheOpConfirmation(TMenuItem(Sender).Caption) then + Exit; + ClearAll := TMenuItem(Sender).Tag = 1; + if ClearAll then + begin + DeleteFile(DescriptorsFile); + DeleteFile(NewDescriptorsFile); + BridgesDic.Clear; + end + else + begin + ls := TStringList.Create; + try + LastPreferredBridge := ''; + if TryParseBridge(edPreferredBridge.Text, PreferredBridge) then; + LastPreferredBridge := PreferredBridge.Hash; + for Item in BridgesDic do + begin + Deleted := False; + if RoutersDic.TryGetValue(Item.Key, RouterInfo) then + begin + if rfRelay in RouterInfo.Flags then + begin + if LastPreferredBridge <> Item.Key then + begin + ls.Append(Item.Key); + Deleted := True; + end; + end; + end; + if not Deleted then + begin + if GeoIpDic.TryGetValue(Item.Value.Router.IPv4, GeoIpInfo) then + begin + Search := -1; + PortsData := Explode('|', GeoIpInfo.ports); + for i := 0 to Length(PortsData) - 1 do + begin + if Pos(IntToStr(Item.Value.Router.OrPort) + ':', PortsData[i]) = 1 then + begin + Search := i; + Break; + end; + end; + if Search <> -1 then + begin + if SeparateRight(PortsData[Search], ':') <> '1' then + ls.Append(Item.Key); + end; + end; + end; + end; + for i := 0 to ls.Count - 1 do + BridgesDic.Remove(ls[i]); + finally + ls.Free; + end; + end; + DescriptorsUpdated := True; + LoadConsensus; +end; + +procedure TTcp.ClearBridgesAvailableCache(Sender: TObject); +var + ls: TStringList; + i: Integer; + HashStr: string; + DeleteFound: Boolean; +begin + DeleteFound := TMenuItem(Sender).Tag = 1; + ls := TStringList.Create; + try + ls.Text := meBridges.Text; + for i := ls.Count - 1 downto 0 do + begin + if TryGetDataFromStr(ls[i], ltHash, HashStr) then + begin + if BridgesDic.ContainsKey(HashStr) then + begin + if DeleteFound then + ls.Delete(i); + end + else + begin + if not DeleteFound then + ls.Delete(i); + end; + end; + end; + meBridges.Text := ls.Text; + finally + ls.Free; + end; +end; + +procedure TTcp.miClearBridgesNotAliveClick(Sender: TObject); +begin + ScanNetwork(stAlive, spUserBridges); +end; + +procedure TTcp.miDestroyCircuitClick(Sender: TObject); +begin + CloseCircuit(sgCircuits.Cells[CIRC_ID, sgCircuits.SelRow]); +end; + +procedure TTcp.CloseStream(StreamID: string); +var + CircuitInfo: TCircuitInfo; + StreamInfo: TStreamInfo; +begin + if (ConnectState <> 2) or (StreamID = '') then + Exit; + if StreamsDic.TryGetValue(StreamID, StreamInfo) then + begin + if CircuitsDic.TryGetValue(StreamInfo.CircuitID, CircuitInfo) then + begin + Dec(CircuitInfo.Streams); + CircuitsDic.AddOrSetValue(StreamInfo.CircuitID, CircuitInfo); + end; + StreamsDic.Remove(StreamID); + SendCommand('CLOSESTREAM ' + StreamID + ' 1'); + ShowCircuits; + end; +end; + +procedure TTcp.CloseStreams(CircuitID: string; FindTarget: Boolean = False; TargetID: string = ''); +var + Item: TPair; + CircuitInfo: TCircuitInfo; + Temp: string; + ParseStr: ArrOfStr; + i: Integer; + Flag: Boolean; + StreamsCount: Integer; +begin + if (ConnectState <> 2) or (CircuitID = '') then + Exit; + if FindTarget and (TargetID = '') then + Exit; + if sgCircuits.Cells[CIRC_STREAMS, sgCircuits.SelRow] = EXCLUDE_CHAR then + Exit; + if CircuitsDic.TryGetValue(CircuitID, CircuitInfo) then + begin + StreamsCount := 0; + Temp := ''; + for Item in StreamsDic do + begin + if TargetID = '' then + Flag := Item.Value.CircuitID = CircuitID + else + Flag := (Item.Value.CircuitID = CircuitID) and (Item.Value.Target = TargetID); + if Flag then + begin + Temp := Temp + ',' + Item.Key; + Inc(StreamsCount); + end; + end; + Delete(Temp, 1, 1); + if StreamsCount > 0 then + begin + ParseStr := Explode(',', Temp); + Temp := ''; + for i := 0 to Length(ParseStr) - 1 do + begin + StreamsDic.Remove(ParseStr[i]); + Temp := Temp + BR + 'CLOSESTREAM ' + ParseStr[i] + ' 1'; + end; + Delete(Temp, 1, Length(BR)); + Dec(CircuitInfo.Streams, StreamsCount); + CircuitsDic.AddOrSetValue(CircuitID, CircuitInfo); + SendCommand(Temp); + ShowCircuits; + end; + end; +end; + +procedure TTcp.miDestroyStreamsClick(Sender: TObject); +begin + CloseStreams(sgCircuits.Cells[CIRC_ID, sgCircuits.SelRow]); +end; + +procedure TTcp.miWordWrapClick(Sender: TObject); +begin + SetConfigBoolean('Log', 'WordWrap', miWordWrap.Checked); + meLog.WordWrap := miWordWrap.Checked; + CheckLogAutoScroll(True); +end; + +procedure TTcp.miHsOpenDirClick(Sender: TObject); +begin + ShellOpen(GetFullFileName(HsDir + sgHs.Cells[HS_NAME, sgHs.SelRow])); +end; + +procedure TTcp.miIgnoreTplLoadParamsOutsideTheFilterClick(Sender: TObject); +begin + SetConfigBoolean('Filter', 'IgnoreTplLoadParamsOutsideTheFilter', miIgnoreTplLoadParamsOutsideTheFilter.Checked); +end; + +procedure TTcp.miLoadCachedRoutersOnStartupClick(Sender: TObject); +begin + if (ConnectState = 0) and miLoadCachedRoutersOnStartup.Checked and (RoutersDic.Count = 0) then + LoadConsensus; + SetConfigBoolean('Routers', 'LoadCachedRoutersOnStartup', miLoadCachedRoutersOnStartup.Checked); +end; + +procedure TTcp.miManualDetectAliveNodesClick(Sender: TObject); +begin + SetConfigBoolean('Scanner', 'ManualDetectAliveNodes', miManualDetectAliveNodes.Checked); +end; + +procedure TTcp.miManualPingMeasureClick(Sender: TObject); +begin + SetConfigBoolean('Scanner', 'ManualPingMeasure', miManualPingMeasure.Checked); +end; + +procedure TTcp.miNotLoadEmptyTplDataClick(Sender: TObject); +begin + SetConfigBoolean('Filter', 'NotLoadEmptyTplData', miNotLoadEmptyTplData.Checked); +end; + +end. diff --git a/source/TCP-RSP-31045-PATCHER.exe b/source/TCP-RSP-31045-PATCHER.exe new file mode 100644 index 0000000000000000000000000000000000000000..733aac5b33a7128bb6c974e6a63804ac3dc12f08 GIT binary patch literal 62976 zcmeFXXHZko*XW&|5JD0lbc6t*_ue6NL`vuZsY(+N5E6>CU}zzt*s-HxM?po2h!Tnv zD=G>CQWO;oU_gW*~%7kJ!dViPzneF0)b#4 z90&kFAkJocOUNME|F7}CyMsZXW;_V1*eLW`i39e0tyEPNkgz9%n3kRzpB}xJxR;(m zBkqbNrqff1^pu#`bYk$H6k{V1G|Bvb=l1{R7{vty@&rRcG7*ki|Gn-w=x~uR7$O52 z-|Qi7UIs7_MFPGV6xgP|$<641@SE5S+-A>zerF{9)AfILlY)b!|IcRp$2yQgHTX|sb8r9sy#I4E|K*PX0*!Cl8U9Bd z-@I?_e{hrkbF=>$*^0)vUV29Q?k$zLb#2CA>*q7FdHpX!27$Q$i~9eX|Nln7SkKZ7 zwE6y&M1)YNl`c!2THj0NrT`4&@NskDb1;ya5Gc4cYXgAc$sj1wF*P+gHaZ0i64HXZ zMlS;of#i%>SU@^Gwo+C{8I0VXLW_-$O@}$IzWOrE06>LouCqSOF((y3JR8`UtD>r- zoTAfX_N0`;^+8o>b7spcrFgiRi8>2hSamQC*bA7U5&pFFnD}Z*VRZ1Gm{>)A3%w{4 zY!8zPQ2Uc}VIT?-lMrU1`UfcV38=y%1AKNR#_py8sxwN?AU3zRw|D#08`kGUn`iK@?85hb zWUfx-?f&V_l7JDVi>8D(IiuiG2}f32-cU`1kxg8u!G{~OJ{O;A)(Z5 zh$G0$hFnB}qSfHSL)L!NmPb$ucYUYzw1n|{R+UWaIB?fsXBKk>mM$bOPM~^B7JC8_qkU~Ruj96{ZVJ;uzW7S z9%I`XFY$a+EMg_BJ2C?g?FED@#LEfhPOgNkziktWQgWj=cD}iJG(0lCez*eOHHF)SiK!?`kW?Id(Y?8(#o2fL)0`D-trt~_2`Xh=wC_wz4V_ym)* zN|#`{R~_v#0p>bp4*aT?knocyi#i2s_2G<-JoXSZy zpW?1yw1&Ta*2O8@ub5j}`fNj@Vwp3jG5lF-Xv8b&@q6Ooh)z+?d;EI5)yJ4PGpRVX z6D-cQVW1&t@$6mngMm!slelGVRT}cip6)^?v_>2&1BP-3*)ema(T{veGm+g+)l#T5 zf9V4y!@rSgL%!7*kGST01F~@0^zBb3yCm;F2#GL09du7G*#dw`vR2|GKn^a!TFQ%igtR8-sHv$TNZL7cDo zV?xWAUkXQ-0zKVv$1k5mRb3Q%)jgV)f*2{D)%p5_}QGk>opS3eZ8qgkH6=OJ||>;pexn-$&&GN@NuaT;_$!Ozq)RP#ReqAO?5 z^bI-!KcKDk5PP2e@3;#d*W?dV>9cO9 zQ{TP5n@4e3Tb`rXl>>p8o?-8AT+!3#$UOT5?}RMhwbA7alr(|xW&?uaW7s#cc`DZQ zHJZX}a^oj?RHUAzlI#dbKQHopJ02w2Fz%Xa6OQsvm`=!+@koqu-FUb+I&Y^H3{*B~ zymYTxGh&Z^mS&vlh!`RW&iBi9`Na3k%cZVJkZ5vO26-%`Tet zF7-B^`{!2Vwga%p)I#a&1Db+etq2=NE?542ScCiB=7f&B$h(BriW1V-ED~p&O7r>YT`cTj)A_B>(*#L& zx4aAIcu1lG{fCFPRqGOeZ!u2>#TxvRT0BX6F+Yb%)e6y^kIeFObb1w9j;=hk#29dO2O$vJMP*nhZ}@5eotW&l-1P+cb) zi3Q~uK;_f2etc#E(6Mf92kkuGD5qZdvoABac6VfjhzjF=r}hSR6p{(K2Pv8Wi{PPv z_J*Awb4Ku%)pgpiPqXha`rB0Ngw3$z@;tNMpqwD@M4DgT7TH*p4~NO?I+ZKdc#;T3 zE6lM)U{?YBnC9mKB*+J7Af{C~%LC;%Z|wt+Zae5p%ueZlqc2b_g;D-{Eaq(&<#_Vw z@GS7Cv-K4SQ=#C>SS8W~4?!4R+Afqf&D=crOe86r7D}ZB8qmd;uX*J9D7!oTpb>d6 z^c-N`q03NH7Rpk!6l5t?!WdvKc+hWbakgIV$Hr@#(EEIEo{($8@?e2WcI1%)z-g!E zD9>TzIhohdioylbysVR&#tuZMLyrS+Dxa1jy>`#7A*ZZ-JlF?0;;2aA)5~?GL!-c?Esk2zx;9 zrBZlG0?WmIY$*{;le_RnVBJF!>2fB4(TvpI87;nlDZxY=yjy5h>8()0Wr6&|-&DK0 z@^83DeAxTTpIg7`r@ta;jNzJ?y zj^g-1!OQ7fI)XS}@H+iV0S|R+djmi#SC6#6b>Ckt_=+3t^V~i|1qE&KcjLI?QA|D( z##>ITI1KL|cW&vr9$nqHOS(sq< z#;@LaF_Wn%;RHX)qGjlzvZ2ZyOuRO17C*j!#XKg_Q6s{7+YJaad z=OqDD5{?en`TtZtJ{mR!r_r?^?Vp^%(J=bkNHAKsD>1?T<4dOpJRhAS`Od7Hp4($r z3|6Ee&zJRAccKBC1~B>s4)D_&!G zGxD1OuyP_2*4is~$mF?R%jJ9Kq1;nB0e%0;Uw7EGnP!fsdHb6)lx2gZKj$Jm-w zliI+bb5&i6QFdvWdt)%#UNYh44gdhmFU`JsBiH`Hn_N>&AV>R#6#J2TuF6zBzM6V< za~KFDTj7X{>W5#xp^}S*jtjCa?Tf<5--REW4ImF+iX?B@jCseyUiU8a?joO5E^;B~ zrLM)2FFZ`szH#UI`90*1*8re!^)0YnF}sm`g>d${H6`;z1%F~_7pb<4`-wDCMggI=3&z)8P~pN@w%$Lq=GS9t}ue4P&JCx*$asl9*V zl=D?E(9mC(wiYkQLejH`rVz+1htCEN&k5D1<^_ffYYo8??A)f3$xf?spkyD<{ zk_px^lFa&@SI4-6sm1R>Ud^F}r9`03S(3-UqW$e@iUJ z0pGPlUk7fpcMJ~6eH)weZJUN{|8qOUfz`+Qs>K0P@*W%q`?7bAEW+4wyjjbBT4d#& zU)y%F4|d3A;3X04Tmows_}Q=tQbB$@-Gct@B7xc#8P~-&V+ZwTW@{n;-Fi1qnjAbj z?HGJ=4gliMSrzn^05lO?6V8{}4Oxh*r=df_Sp`7r(!mZYn5)^trn#*}Uf=+LRh!}? zF7_lcD2{CuCj=X;*-sL0A9eFj{qhjI-~ic0H8m$;r}lW3Q!ge z-&cB)@G)#zmJDkTs#}O}z32dYtj2Y~#IVpiZI%Moc1TL~vzOPc=MX?^?_fI_FCs3D}OdP0O8t5s!=BF|hy6?S|`5}faVGx`tTF}uikoz_EZx#zk zV8+cs?>!UYnUtsiJ*!EZ*LS4jP}H}2;BjV|?kQM3lH$J`CeROaR`--)JAfIM(`T3f zVg$vbV-_47cu-~=9NcF1YNI4New&a~n(vc|IOKt{kdSyWKl`t#$NimT9hb>4#9B(b zVjZqT+_}hN)P_xw{yI99vY(c+7D8Z4ps0PAZqDXE<9yxwLt;Pqk*ve60VGTvtjO}s zzu#Dzc`9{Jf)EicovFDki&(TI*HYd!n)mHBb4SWsZ|h_7Y2L_A1n9zII+Ac%BsRSpiCsradcW|&0E?$`caWI zMYcz^WAI1(515H2J#kmt^`v@{`6}R@YpOwaT$%U8+c)=LK0&jF9Wl%(*!qJLua5st zkw;G*_ID_|1(gaVP!g#;gxT`c6hKI-90zRr0&Y%G1 zp+8lhSJ=PUd=BOd(8}?&hMQ1v$2+Xo3yj&YITx00ZOw;JsiBk?ebsV1HpU+Luf1h| zWOupC@nA89uWw!&?SMb1iNy^X_p+%kTrQ+s!3}i7gR@1&@#Sd)H*&8;@UMJeN!-9L z?~E=IyCQGZ1t*~$_`eZtvSC5kGC1ha@}LZtJTWZg^)9k8l>lVP!-#D2$HH14DE#z4 zS7E)1PoCws0kcW18pj#A8X&qP(>`02Eye1C*p;OuNGTHOzsEGQzwi2v2(1o)&}(Ht zvuLKB5uBxE@d3M$1I~ogl-W-B9yvXYDP1a`?T=5uTc^;_8i=2L$Ci2tF*bB4W2I)# zZ>191MyB<+6rn5r3pz`boz%#N25~@o8n;%@Mx0R|%#+Tmzj9D&@-W=X;XD4vG#mTA zoBON>FLh9`Jr4(<;j+=kXrqn-3F=rNb|wE4Tij2k8!Cdz8OIj;CV10_?Uxd{zr9r) z9SUWm9O?201K$kYdPJ3UUyIM=-3uLn)h3ty6+cmxa3X%7RH(q;n=`>4Eg(^t+)v{h zln4HQ%-2KXx}6~#qf9O;ltoz+1SU$i^aH_1?!#TO4+zv(Slus#%vhPzSDAc6v2>R8 zr|r`a#iJkFgrbyFB)a?Wh0Pq|RGI0&0vERZPA%$$@c}@qbB#UEB9QoiL|9Z|b$1gl zvN8o+v<@H_p~r=99DIl>q=8v)JDK3Z}#U0v*2FE}AX>L5_=z zow;h8D;Jp$F}4-pPv&3q)&J=i0A`1ZuiM)odJii3S)plCRvzFARHlPl281RIz00KW zrW`?^U$?Kb-i2zun+``tRG=N@5|gL;s)Dlz$`|e~ggigB{*DT6qedEDhnuV=r+z%L zkg`p_97VjMew(U$ z)JCn0`}gAAXyy%TJT1%`Mf>8nEw@abcyM~8{=>d*IG6QiVGZi~x%+j2+vo^ukiCQT z?>W?e8}-YuQn7+wosWP$!Mbzlm@+&28SfElI?l(5Q7cKuf$_4_S&bSNmVJwdi#-$GXZrce5APWa6 zi*>pc1{l$vz!!Z(6io=Hse`#Z72xUbf;OIfKSm-n3LlDTo5r{C603S!@Ujs58;iyt z9=lQmjxQ7;9UzX!azif5ny{1A7e*vq z!>#FejrntQ+0?ZFHIF6)9moFN4=V{^d)fx+wHRl_ct#_^!K**Xa;Dt(q6xXu5*ri*XB3 zsK@2__(6Fg#p3D$ceT3i3aN1wW_AF58*_@*E|eyRZEzZw$)g@*?MhqQ88cYY)z8x~ zXx+^?pg7d`ugY>hFL54btwk=psMN4DM7w*z?geF7P4k72+xi9nkr39<&S{J%kz+7@ z6+VJ>zqzAvQh)uFLfRLEpZ<(uJeI--?~c*U^1-zzW}9MsD3+%6A9Nh1ey87U*?r>8 zVk6<6@8I{zeG5#4Mwv2*7q0sD1sJ&vR-kVQ-B6z4X|caBRk+(=vZ|I!D%@*_+X!n* z7{G&~|7v5KL5F!LV8nu`R3V`n)G5>H{wSm@<#WJ&keHS+R{?%k;p5(SQo_3R84*y>L4&TWOmlF0}TWA6;K4gRrbc?!({(lh2rHzv|TQD7}Cn zSL0+-91Uv3t@*?k*mD;qdZ4`|U9r}QuZQ>Y%aGEP%C@LXj%lcQ!@7Y!w{le7zrq9D zTS*gL%o9bhm6JgT4KcQuI?^YPPYS5@Dg1frt=BEz@CrSjgO@A#k?_GF@F6{A8)2G) z4TeTq-Bu_yXKaI|dD-ALY(#1321s_(5xo*#Vzq$hk{bFUMU1rr218*;_}@IEzyome zb=F6AfF9Zg8m8CasVDj6^V6qdfW=fek6>lYTF@pz@nI(Xl`_>Zbo>!{#xBLp1C0{- z>)&HPb1pCssoMER48X3R&Zd^0#8zG&{rKs^w4fM#t`L2Ks3u6BzP0v3if@SmBy^%q z#Jx?)HW4#O(Gr?GkUHe8kv;i`7rFCs)k{@*hbf+RiSdIM*I~NJ^72+nI&sm(X9wqb z!sK4*nn$OuCHM$@5irfR0)uuu;q^S24<5Sc zc2`R6?9L9^2t7lTFwGW2v#CCNcDo2I5KBw5U=U_aX7QrsOW|L@-V_@)!2q*&vL{+j zk(aNeY?EBM@6wGmjWiB^=b36iF>^kw3IfnPYlPg?O{lzRwehFc_IeNx!_Pg@uhpcL zAL*>9a1Ggt4+LcB?O;jWTaondo)8Dd>z=`ardyfJUf|0sK9w#O^3}o`9-_; z5KrYFIoB$Qbdi7l&nUzL2G&FN?;D%?nd?nYV@MdV7>p$PA|#|8l~5rOU>-m z>;)B9FAM)-X=rI}xG-j!TH|?oKy8-^sKQy&=8KwOPM4070lV8yWc-t46 zoQOff5FV!Y^n;z`ziJz*!VA;0OG|S>E=+bGqaF4Ooi2u5L8Nno1I|eOkblJ%6#WE_ z+02gG8t|lL%z47WtHN__%sfB(<|p@bHy$L6|`hg&RoY2@`Ja_|Cq2py$3B1`L`9- zI4MpRW$e<_cw6LYu-yguHdo{Z9V3Q%rKhi;l+ahG+m6sd) zKQAjV)5g1Zm;pZ?a23Wcsk?aN8gZ7#>a)k~%7(7+y#(xqYvC}tYAE$f0o$SkD3nFy zBO44~>6O&ynti%sQL57c;=g&7t$I+H$%7q|#NI;xR_42c!Che#yjRJiy1*$k!obR? zFv*;7cgbUU@091{!O7FhfVImMpgz<UDKM?UbW>Ki_!qJDaqE13{>Z~PmU|6-W)Apc@9W)RxZm)6#LotZBH7wA=Qe)>7?^V;P0SX!R4Ter)i<`9Zd`8)GKoHJKY zLIxCk=s$W`6}kneN9^yG0nA(7gWFqR)=l*rjAH^|yMV6VsU09HenDp2ZS0UE@`Tu7 zSz@(If%LD4GHFL@oj9;#{<+r3ek{e$%1OWrrA9#Q+tX4dh(`D;Uv}7zi|9pcBS~L_ zWKN`DngM@;WNTbk8}_`?XY{;h26uLQLrz$<47kB zv2FZVS?B1rpSA$J>iX$jrZse(b7->r2wsdi=czWQ<((l256}$+XV`h>d9{36yh7`S zgT}50juXA(2nG!U_%+d-JIB>~#C_c3z+uwrHAIa>{dEA4D@#qM?MY3^AUdU{<)rV4 zPoNPsc54z1Eep%$TR}QT1_s7Nhs@ZN7~-xRqIW_7D7kNML?W53^OJ+pzid2zSUtPx z{&s_GGp22AiN#k?Me&<^a@=S3$vv2fqPY*6JPhTMpNh@B3GtT33XwEP9o6D=wU{$Y zv%Y#dNw5Psj9`=X!QqDHhD&*&9ZJI;oEsqRiTI1UHm5QQ`$Qnb9MTn9lTfZ%Zqt=I zEsF+`#y$G5=KP3#^F_Y0*>Bxg_MO(8?b!u)YvMbPx=lzrRoPFfrJXvY8|Yrvc4%_& zF(b8yk>W2M38?A}Xy8cRn?jVACTtOpnVH(+W(Irk+_@3&{@;DCdd_XiW(u3L#myA< zjV*4bu&cLtyy{^27K<5q*;}NgB`0h#CMt}&#Q=(@`xc$aHWphnSraUJd&e6P*hPlC1*(7FTD2Y zB)suwPMJj-27xDB+&o4|%M(c&Yn1sT@Xp|%Qd0|fExRi{aMe_o1gfehXB^lGzHWG1 zD7QG62wL_hr*#>(99=cy>`c|SoOHf;#I?BEb@nJ*2v^*jnofeIm-m&QRhwA#e^P~I zT0=||EHax6gdJbku%Md7#MRWV0q&6oH?ACysCvOLQI4smX+iyD&K1{GVccWMwdZaS zPk?W7>UshYwMGqtjZ-q4W*k8aBS0?%wVf;Nx2bn(^jJibwVaK4Dv+MKJ2oT3D|T;cdJaf#ucCPR zJsrAzaPa5B!Td)F>DTfV^BZ(~Q|-J`W9Z4TiuNXNiampaBSHBV=7-D%4+sbO0}>IX za@aD|?H-r(hgJ4<4Lzh(wECCr2Pb3Pv6I^m4u>H^f;^`Xwbn;x_$tzioAC(H5jbDijM`clNGf?NY_L4kW;||JCt>Q2 zZ0h(P!j~iRy_>I9WpXo&M3O**cw$Eo!Ar-0zNs5Ho3IN$`fPpybD(SoyQI+fcCU-6 z#=#U#HQZupF9)8TmvW4D_m18h>!9wsCmCCH`-@AqR&a1I?#@5*_LMlYz0t%#r`arh zm%VAUoM7doQvW;fAI+{HUwVRK*q(ss)FDjlD37KVQ{_fPhyJ0`V6b?f%)U8?gFs_IC(xP;&Txy9 z7lYD}aX=4EjAzyb?`$~m!P^MKtyL2pLTmJFJ4*0F;N49uBrRFh)1Tn9qdOz#7Sld8 zMJ%!c1^oOUyQlcaNT_F?dW*#v)1FGoa2aBkIH~cVyU)ynO#NcSEl!Q228oKoJD%`B zVTe(S{5H|P?}KqCchrjS1=peQ&jefKSa45sRU8KdnW*7A zq*wTs__=_b0}uD5y9Vg%2p$8jvxz`Z6YQ-9Cjlt<({$*Z@eGl&G7$ zdSv{b{i-t5p%Ri98GUTMSvx4dMlq8C|bdZRl;dr`x z?{1$v{yPGH7CG@1J8M{d0YXFJovlL1|__bPlP&T&4R6=f4}!p zaG7n8jQjmTY=rp4w!&p{W#EV;!LdIPW;f!W(C7~q9x?D?BowOzt%6Z7$5Ar{jQrIG zIIYLHx5=Ks_7bKB@KB*m|^7(L17Xp^ONt-;M6#Sq)SIIq}SxSDcG)47^ASs z$#~!7GiER;1rdsP;rQiUs1V`rVBTJpHFS_2pJ5B8FW@_2W|ra-iGiKPZ=x^#Xj707 zglpLyba?^p;y1|2#0=VrPE7_2{|d7h*mo)Is!6r!taMqU!(T+u@fS{3;!~|bo#5Q< z$bg=yiht+wgEjspMkl21jm8pY-A|w;cVNsw8YwNpr2^1yP%J3CTP9dfAGcN~sRiHlADEZ(XgM&C`#pn7A4128H}&9mT1;SjJ68Kt;c ze>aQ4;R(`Pm3Z5fbPYv5gWs6CzWNDEpT$dmi;ty+u7TaG&D(mw{6eF@ppVDKZjUDy zN>hD|!7-B_7evWqllYCcO9@mnOn^^ZT!tx=sXrp_w>YDW6i=@IY3nGAwZZ9g&owG*h4PF>hLGyF>^H5)JStMr%2w#I$6!E&0W!C5y$1!mAI$vD|Hb zZ~q8QiTv;!e)6R+6$3b3*qx-P19`dgIkHIzC(@K161=ATP+~aYNpNh@AO1pSU5JHF zVo$tV+xZP_VZV>1xRI)xT?{pbx~6G4{1mEZV7QDA@x_OvFRbM+X@mwF8Y;TGr;PQ$ z0*vZu!L;Gk(_{u#BtTy~OXXsjgc$rrNFP?Qt@2#7AVh@}N_m}mYuCW<&N6I(XZ*SJ z9C4cVzf(egbEedd3vjN1`_u?KgG~&RCrhm6gUF`!(F;AGWHUo>)e)gj`k>%ybI^e! z;7*ICG*Cv8xBB^wdIuT}n~^~bL*~?5<1S2=;4h%CHk+rNpO^&val(_$7FT*k zKJB_tz@4D^>CMt?2b|YR)%U=KwyLn-21YGm#0R%04UMLPjiAI+P(rvd*(Pu4cKBiU z)C_q`0vYCZNPgvD7$3EaM}XD6A$-9PD2A5352PV zLg9{M&S?dTPeg!v=zN8~~uF)|T zBtDO)|LXxiA26%ze7T*)5O7glz5soK9&}bZw5vJCf4q@0SXX!W2=v2a!=0H|k=CBz z+v=5t;a{IoO9eMe;z*LN+K20{qGp;eKGt|qevHri{jAEWxO{&+%jZmmtglm<7xj}= zp0M28T^$olGWOKQD!2gZ4IP!a6s7%Zs5(Sytnac^SJyjEJYRYLBXi^4A-Zw2?Nouk zh+v_@50Y_Xq}hF3b-m3D=Uyo8|3KTnVdV815G`m1>ky7YBwVgfi+@QCs~7OoGOf$~ z@19u1qqi;JCdR7|M5|PmteQA11q3U}d#RB3`xLyUlqj88Y+*}?o~xk@&g@l4cKE81 z{bDrIZK^F?s?E{O-*!;Q2luA`5S)YWJY@TQ|6fI^-~b~@_vH{Dt{!yc+G9abH;mN1 z{A}k+@QD66yW=rfD}CD{G|e{$UzO$j{FXZ@zdt;8()U~oR)9GhvHP62gyiLFOdE0E zi*g88=FMO4v0n@+gGUjCp*w!Y7}(ni=sxBrd-B{+hNot9U)trb3`5J}{aZdi)N}pp zsjfdo(4E}p61%$;lZN`h_~sw67qKh9CoHK>vj4DU9SDObX# z6{Wd>C%^9YUozVnDXN&D5kt0!Nmi(Zt-id0@{_j zscWparBRG&^8RvigGD<=LwM>*vXljsq`Q7NJ9cg1zTfq-76SLu*T1u|m8Qy9lQLVr zm9)l7X&F#a5|jtvzhzZUx{I+@r;ajvfz$sAOBMw*#KK*7cg-HwKu3X8|84B!NF$Tw zck4doeIc#Lk64ZqlqDdqMQ+nv;xsL?SYiDoPlNI$q@hPyi#&bu8LIdgK`jX5o`yO* zZT!oGVR7`|*6$4A4s(!D4Y*{YBpgk7WFP@t-L28bjOJzduBQHY6x(8J?Xn^PuxEykLY8j_q$b6tWO2l&u)E9>_N39H zV=_?&uH(^Zdm?{Bt_1E1#^)3A^GbS z`+~K_0T(?eINn8?+Vs7(2n0uCq3siCG%j4UG6f>d+G43wy}*(5xD(iQ)94QHkoArSJ2BL4}UdKN_2s<`X^PNwv|#z-Hw_Q16}6OLA1+v-hV-b z#)7iNu9{*UA!Q`#7RdR@L&`#4?#Zfe%k4)6C;MBbv-b&>-jdqfSk)ljRj@RZ2Pi z$?|NkXjPHXNAB_oN@nXF+u<0KYkMXindTG@$x8(jiKnZIh$I!+9o^IuhMzOmxt%lP*;LrNk*U2VF+(g|2p0GyZp-5hmN~Nn#GwO~B*WbVRJ2g}OT}d!y+2x?X{CUl~q6H@&X8@M#bto@4J5vPi zI0)}<7k=cp!ZhzNPV=e_N|=+_E($V)9bUFD!KXPftzUnu*B5j#O~NszA9MxPoiAWY^+~YB&LZV~N>VxlJN?^Siw7@^)3jCw=}K)7p=aVVvo|PabE-u1(xE%t zM3kJSbmfi$nb`IK^4$xEyjxVikWv>pHv5#6JTERjJi&XpQ&_lW)cw(NroWa?pGLsn}C-6Mn=Io)XfT;A>{SvPN^k{09xms?HbpzCxHlhbx%`al;P~cGvpMD+>CZ6 zk2tux&leF+VFb;)A9Q4ET%?IJxvAsuM`9bNc^H2MoZ0J}jTt$Ns+0Js*ie>EF|L*O^wEuiQejJm?`$E1#l5WE+6MKX)T}3;5 z?heBL4o9zrC!Di|T)-WEIwbYAsG!*T7E?ehOd;$@?rx2gz?Jpm0a8gP?e39mWT~p< zEGSD#Hrw7YOLf3o-N$G<;?aAv*63@t8sI{;DWNF?eB6`97einLWjix`BILs-E+V#4 zcTj<}=eNU z3rAh6(u~nC35Y?Tc8p>;Y-$H@^uUK@{gcX>{Ux6F+#)chVQxJHqhfyKX~%0-$7>rV zMHf&}sOYHt+nJgJyv#^#%Cy3r1)W_9k>R@s_1(@MeW4PA(I-9S?t;}yMN=V6cds8- zpaJN|XKte?)#ztOb6~K0Z`z-JrQS&>RFg7A^SK5M#z&hy7?ty0h>MA9DxXK5Ql=mY zWJVB_z$%m|xae(K;|S9=^tVP@a7T%#g5!Jc=Hbc(GYx>5sl5C>z`6?eS;3e~yvHDA z5*I?Ey2&cHv8UoVak9!cKW|gXdp}1>P*@T{bTL9uHWVvS)52`746e?&qWnO2wsWGQ z1tS3@^jDQ}{b+b|Laygi<+@9vsRFDw_TGIKhZ39`!T59Tl2X7WN&9`7OD{!P)lLwc z8^k;kGFmdIU@HmVanW5m-lCJ7_5i+|T|B58U7yV1(%R~`)9GvK(gfPr$>Ghq5TkgO^LL<#- zpwwfxJbpuxv3pW7tnAz^hHPb{#URGz@6>cW#;*HP@4`7coHALgx`HcN+vvu!i2nPk zk|gc!?_Ae(V>zP+`qyP4cCsY<=;3F&=Q$?FeC5W~jA2g2`dLx)T3iiQ3v&4GqC^1bQI*n%_~gc0a_{TvOffq8 zEl0$m@vaVVFt)}Y^f0+jAP=grzuw9gXXHVEH$^8Y=5LxQ`M?iM+gF5MB(7c9iqTPC%)Wkqdd@)TXt!oru&PRrPc%+ zX{oGS(TYDOaFzzFTwqU=D+0BPZx(OZf7{#Lc{BUEMRly&o2!q{OQ6ryC_ucE?|8g_ zR5*EnyWOR(88kOb-PvQxH*62^fW`WCFcr?}%6 z*L)s;D^Fb2)>VqiRtr-a4I!QQIjb9<0wY$JIl3EFKYdzgB)MQy4V~tM?C}i-0Y{-m zy(@(}AVwWDNk->HA+f=-QTZzrg8p-zeng_O4!M9Qzn=?hr;-P=MLifQ{4`X@+pCL3 zr!dq@hnBLFV-2Eq`>Pm6?auTyGsqlJk#@_p|3+km%%bWfAJCL^5v~v3J=CBOB3FCn zM!`X9ggpmB%HKaV>DhPAgZ#uGtwJH>?GqCx*t!DanFT6=cHmONpyi3a;sZNuq*b<3 z4dipqH@3c+yK_9ZQVpGy{;gC)z$8_W-ur?PhGIrli6Cn6F;_@T>i61QM1p}eB7yv$ zsmTFpQCm}KY1vy-%k!$YrZR36b2W6{Fv^qO(YQyK8H@4|zenqC>RE2dsk@?+9i&rt zOHo#@t-Gej#_Bm`#JWePc*ZhxE}d`PajG-A375TxCg-}xJ45=(5q>H?eYd%1YP90x z*(UG$*g#79o>UkuN4>^t82l?WZijzYtQYKa5;Zv54r7y&TqxTRuN(-7ELa1Gm`qK8tc9k2o4Y_)@40 zUtE(bM78?v?^Kcj%MFHmB#~wH;TJiz9#{gG2Mfu2!`r4|Y*^)_ksZ33tE z*Zx7o%nu(4<^+=H7Yu>aj{^sn+A_h=LaD|h6*8gsV7wb{(jTUpgg16k87oLSl*u=7 zwv;)yf=U;Jae?n~%pW*bmJ-LdxJrsEEGexYx;*jNxKX<&9mO&{ahmI+D#R&kN}b3` zI>?93lzZ`@CLKVlM&^t!8wqxkEsB=~0I{&8s_Z1GWE4$AAiG(K@20+rfCA1HF1(E% zo3#c=xyvfKaNvyqLL)v7`}C|5%4fUEva!LQLGw zXKkr{rJS8hv8zR#r3erz<8r}?dFy7N!Uwg~w&UvOAOH6MBgzwqE3Jec zPDkkynoE~?flgH5*ji%q9&8&K@@JvCjKDk(cUcRpX5nP630kbqs?Zd|)3Jfjudn>R zC#p}|7As`~rHe}fZ@nuygp2u5Mm`UcF2t~9lzBxfQb9q_1iB1f#cWeyyh58ml2It6 z0SCLx@SrIEhV$NbdxiF=xC2^ep5^R({=7et+BSi=AVi>+fuX|gIEV1Vaz5lC!1ueoI~^iw zFwKCZ-dG^dXCzuQ75#yrlD%`S|p<@I;FMVtR zcxcP+iBkow#o2=T&5r-R6O^P_F<8+?&w9ZVk}XfI2plT97+t(;lJO6j-uQl_34;>J zLb@^bqL4gMB9@TVKXH4x2SUQW&$H?049*im^P_Gjx8^0pl{G1M%h|(M@%2nRy z-h3osBiyqfymX^VV0<&;faec`MgniSutNSY*iraBuH^B*IB3s3yW0U(_2_XcHAH@orKH^>Qie%R#L1GblmYaJ#x&_y|Wa%jW~zT4lzrq zy1x5N+Gwwrj?$5NKJYd^^25HhZFXju`agK2GNm`wvj&EN?ptD zb~vqm?-~4E=oMiG(+9qUdbAw*q~X&p6>PcM;T_({q9xVY+P2VY6r%u{z7+oPGjziu z><}lAk&Og0NSFgjOmZm#9w+3K+ z>%A*UqL@Pdl6_pd9NZvHs<)OwMm)&Iy0=OPcl=ksgYw53}p| zZzNdH4j4cy$b(?uT&Sd+E;0{ahRM11!PxH$^c6({LrmRAJpZWP`y-Sg0y`=QE_JwRj5I}) z3hWGb&kY#Ji0~J$phz-;rYY)2SRzYg0-}p@XF@Z*e+^DL7}x=&e(}mlQ7Xd-BgULR z9Q2d_{5%prOZc44EneUYY$8^}ZvJZ9KMnHThQ!55B3BZb)p+VcU$CCT9omZJKVKMnX0u1pbzuz#zH}NB)9r;Vvsa&75o&in2FZf81=xz|z9370Lo$5$> zzEmW*L`Is+%eBivCJl;(3Lq~v%F4){{I4T_0W2>sC4(cu|7$37gR;)HD_{jlZZoDX ziuiaXc&JrqjDbpqI9%EJK>8)Daw9dXjO#ng@@A~tjJv9wp`cpHJw4wBO?3zhrvYW@ z7QgwLr#Z!#TFWRaZurEHIU=17jV<%lb4+WUmXtkQp`hgIi>OhP7J-zBy2p`Ue&0e( zvLN5TP8XhcmTGrbJej-Fn*j+;carrZa+Aj<)Zm)@c~Q*0ch_<&1(kSCD&U`wefMVZ zUzcML9uaoU@ly7I9^5(^-eta!)h$!Jul5NqHtkiFV3gV~YR_Q!)ftt|nRgWM4& zjOV~o-D{M$E$TIRmt*_-$7_@po*$%u7J3?VY%dpXEEbar<^guI&k$=^0{4Gd_xG3b zmw}W)1(vyc(RlcpMQY&ZyH*wjiP59gsqTkeS`YGzK|Xccq_+hgBeti>i_aE#GEwKs zlEl*uoc!XD=Rcmi@xG`?(iNLNl%C{$B3~Gt1<#e%Ol|n3J-FofH=T7f4ia(!S;4RG zEMm5{O(|*s40b;IS;B9$M9Stt61i$wr=boaHDx-sm0nzEIS9Pfn*F z5uEP1{A8l1ilZ-XUEwDhH@G-ka;xx2i?JV3)3mYgA1PB6m8MWq{Osup|0$Xb%lP0t z`fE$R^asC7u22X^VHjcmCABlq+1<-8)41++U`RwT+^P)sr{0Wmlb7$vUkXHN>0q*O!}kufIh6V z3Aup5)iy??$yqm=US?kA&CRZk5#jY>4ToUgl;&Odlz9QZ{9lJ?NCS+B!Zs8Iy}tYm z->~{{b+*#9(|!Yep&%P!WO|9m%Qp7&3Aq?`O+R_r!4ItnxUjukM*BhO5wWoevMXCz$oHC?q~OV2*lh;K?QVlp6Nq z3T*<0y9ZFMspykBl(hTEHxoi^LM<4%hl8JS|3*R%wPbLH-2FoIeNRV*u*4`yXHY|g zd0bXT1=MsReIiE@!XavMTBB#oA^zZ?Tq;UWc zPlc>=4)59MfgrDDIIce}I{xSL0vTphDH7LOv6yQ~NW+u{Qi`;=IUo9Tv86B;cbzf( z_;+FD`$@2R|L!RhXfbK6Gzu*qjAAq!b0?N5YPMAe1QCMgb-Uyr{u;5_)j)1JLmc-{ zYO0>ue{CgpR#bPa>@{Wh66zwQ)LX2=q%Q;ky7Ine0={ge$9pt5^$Bqw&+&nq&^hMF zHj;$jo9|~Nn~L`qgcC|LAc6&NEuZBs{8B#C-tcjl0BIntK>mg#Cn7 zZ|+h1-7ab}kquJB_KAjBLBL2GH6W)On1=c@Y%bE{nYRy2&go)32_U)R3!v4WX)K2!lq| zavv*~6G93S7Mn*6DUrg5*Rf&||1hLH!D6|{>ELC>7D(&23^$()TkY}d){zlf>#G^Crkrb=l4BT8?^RFj-i~#1={9Lqa*r z$8d|+6ab7eaNZ{hSPzBHsKk=BXan z5~1)aaQC$pygd`X_&tBT} z^QAb7=Rw@lHhS4hsGP{KpzHLcpUa_`q%qpRsXU}<|F5rRc{etn_PxTa2BSSzI@;yL z3E&Elf=#Vy)A5-toC!zLk2@B*e}+>(X53abwV#|UNdy1ka2X#I$ zbs?88fxbI5i7)l9qs(5m+d$e@da0?O+y3tK2aT3-zdlZ6S_a@Q-1XkgsuofZ z`+5a;F6K6SHHTJF=r0bZUEO~=3_16OdPR%3;>*Jm*?1WQ?OF{C34XWzzN0%u zHg(n9$31i9Ll>risvOM{2>2?M_FJ7jimk68p-PFh0*a*{-M6(oVw~B8hnf-%H4O0@AqYe{j-jh7uq!}TuWes z|9QOlcyPtXl{|na?-{3p`M63%yh!W*0V+RN8V)!ruhLP#sdl`|91C0m(IM`|J#RhR z&4*0~MfsF|&ELQt>-=!@*@dNB}^Nyjh2~+pp%f|TbXgies5+7O@r76&ezvW(7x`8P09Z+ zxt+RRPrmM!pD0$p1;s~99J`w!Vt;z_I^+7G@5#Qq8to;T>8@hR$;IvBfD#KNF|K@DEOp6J2{NqDgN@xacmRydypOhsrq5k;l^fa>?^LIpr^{u!`S z{D-JDV=x5vLVrG6Mi*koN-rzG*)-8Ne;L>`&SG#%gG!o(m#Tk0A7~om^q#UZy#A&%VD*euh&EMI z(hmgzr4hQlSj*2=#sjh#zl@clWMwb`VuCC46vj9@8@n$TangU2@XnBcSwn zyd50j<4E5ygP)<7Q_|})I{?bG>b~SJnQY8&`b}KZ08i8i0mL6&gjnUn`oSHC^QU^P zSG+M8`w!0dZp1x3ZREZPH}bLYZu2dot7BjzLxo(Z5_kWHqz>o2@@(*hxjFMgAYu=) zx!4b-J^}y{jCK{)H6){K5KpHHKRV_i*2=k~?{)0(|B8ZGHYp zZ{J;?Y@~=TA&ULlFsZg61Llj&{hQkz9`1D8?}eF=A8DpAS0T5ZpO|!cxHj>KxCt2_LB|1=jtV{qJ3#tH z?~!<(=vVRCH2ZwlZTg7f3$XRr^Dso(`1SrcLa@IEc9*aQc5WiS=!8%ZQiBbwoxwlN zh<^glCtXZqSYc~Am-VjbbC-31GUpvG;#qcaLJ90Rv6$^e6P1gi$vX^TDZfp!g@-SI z&Lh(8t5aVk0W|%)IeSlJ<)tMplXiWGrgZYZf0gbWVNq}EJky9hP-U2>r)|R8%{| zA<~VXs!M#FxRu0pHW<0K4>WB$wBb%!6rQizI% z520HPR_}{j94$A-KL=t(WTwhRT~~NBqW;6ccMksZv$k@gB{)jo1QaP{=d$ zrS?M@47tr~-2ma=Zz#gb-@br$u7Xu>2v_by?tv1Hu&qQ*>uW)2f70m$XI-_@Lds_t z^Rz!kOT_=pY^kNGa`eDCB}0)-Q!CTh=st_}F>Sas0o+OD(KAf7q_ukrJP`ePuajCQ z*|&SI&&M^3=(80=z5njNSD|)7GTJC&a7=S~tkSS2PfWWQ9W?~^z?n(n1s#+a@W*bPn2;20!Hi)d^l-^cm(r=rD-4Zo0d4)c(~d)pRjgzhWEK6uh@}4 zDKol=Tb`%Vh>?jrKf15K^VD6~ZvxCY>ph_TX9=twm*goUpAnU_i?P@$yW%%C9qn4{>h4QCYP{Irt!z(!KuXv9n?W|EIC(GmhzB1J%lJ$KStyl;z@ zmucQ-zC5ZxeMV@fdtjLa`eEvmm2|3ol-!=`X{$N9c(zk=j2yVwx45LE@g%zMV&ibB zN92o#cjOu3VL&j~y;HGoX3u--n$1`YmAm!3C+NTNFhUS$N2>mE76?(f*)*2`Qk0#f z+rRNl$ zG+lS;;$2_Q=91Xau6kM`+eD8jyf^z7NJ?d=yM5bi9`#*Hkykj6UFdjZdJYOgef0hE zNY)5j&DeNU043Kk_8(<{*uOmc9jf5itW*^V;6cn|Gj`)fyX!mda?6nQ zsnH^`hvD#4iy>JbXf-%L2|wL1MzMugk3vFIxBwL4U7BIHNJwjI=k?tg;5~$p%pBPt zvfsY~uCRjSfU*Fcccr3_J%uf2_z0S$!LxbQJ)fet0Csq?+4<0q_s=wMO6!hZ{a&^C zrB$Q$aQ}KE^E^vGy`&npry`u=lqBj%gI{nLQyZ@7Uj|PC>EEr;Y#wViu-s1;n-aaM zH|H{#g50YJ+Ru0rY>`}FTxyc#%CaFj+QA<^;sle;+gre8ws3VsnL3#CgJN_?=@*Zh z%P#M(!Rv*$8XXxoFcD-!UXp+}G!}(O?a)#exBue&WLw4IvN%Ad?Mdzg(ib|R^J#*j zbnZFIP>*Kba`)u})qB*y{kkgy>-dva1GzVr55kJ{&Pyp)cx}Nw_<8w@E#mGB1k`cN zU~@0o?l4fC4q)dRVg3mx3(9k!E;e)pJ4j4{AM-1I1$&6emTc`n@_}-oSVd+IALUiy z*i;VT&3^w0mH-Y;EC863r*zb-Z*CHqc_#e`-`I!DB&UT3l2k880=1gVhw!n~^1m*Wlg3Bqt z`D#JU^CAPUhB--V`Tc#T3t*}w)yLl`k7~+WwfF$h?jp~L?%{TQ@U#3iHU})7^lCXR zdSoytT8n+wK67T`0H2=&87QC=kKP5XU^wZionG6&lz~V+Z;Fe;`S?Q!oqJt1E+(V-}M9bvc~MnH9sMwr&e>uZnti6&?PYjliyrchC<(9h$(SqM>_UTZ>P5ylgUm z>sj3C9ZKSZqmz?;!i^64?!&miteoon0>BF^H!#)ezzrRE}|IBmM55--CprAB5e9K(i8kd%o+}SD&{i!@p4Af73wKz{a#1d{`@4AFrkpzTRelJr><_F1utZ_ZvioEJx4 z@^5;x=arpuo|3cQoqm?sL{ib|+Fmr%%-7=T%Rlj%v{_ku)IWKAY=pJNJ9g&KJ z{;0!JVUVwgG*Q`SMd41s+5RKDPmPa98fLouH<))fVfKY|;GOy(OI9FX*^wAN$o}o$ zXBX{sO?GpN%Lu7$`~xqZHQC$2aGkJ12htxV`pFIc-M8HXHD#(tVPwNR=a0(j>i%W3 z0~fA8S2a$rW{K6gsj8tBdc!Lb!RPO&{-d(zXBizGA_8W2dC=8XA7XM-Ha1Wf`XDEj z2qQE9x|#D9_jdg$7^AJ_y_ACWyRMHKpPX0t>m6=FKP!knt&VMB+>pS+1xYJiyFkb0 zLL8%w2QgkJBTtcJit$_@tY&sGeBuzIgvZKvafRtG;tcQg|8P;3CTk%R^S;Gy@5ggDWyPtGrWe%9MA;3yjodANCeik@^su{`^i*;J&3NDzVB3Q` zoN-^(DONB=cGb6Ye|doS2|=F}#5&%!;r;Ur>MzN0hGccVK1Y9a+{JyeYk$DtT7DRF za`Y6PbEG!#;=p(pubk-i+b^r&n8-|ML`HIIgkW{d>a@ zKOPy=TzkyqBj8m@nw9Zm_k-&x{tvT@Y*BJ^#jWlvykN+(pe-ZnJT4?w)pTS3BOV>n z{UgkTBow<4UT)KupLy6zPFcGu@B_HkwLNf?c&+_U=nb)+jt-r%duRHEOQ)F>A*QwA zAeS4^0){uk+W!K`;bcp5J>sv#WBDBOe;oeCQlfzl zKwXX~pe{|ss7sJ!ygv-nUU76-Qr_kdX3>KEjC=v&gZyzNtn4?5wM)&VPj`w?cl||{6<#kis?%>Nti~yz9f;FwM-H2>$);f zB^v(5>LsN7=WACD_FDx#{K0v4iRjv0!7@g2JA5oke-MJ6c=@g{iAz$u{#nuWw}W_L zw){V~&uzO#GFa|IR;jVjF?P1!u%>piGSM$H`~cqfjXOr0yseR?8%myq(KDy{sEjCu z6}mDqdb9es9YhrgV=38rAu`??!Cky9+>s~WmWC?9gg_Bx6P*lrVZxc>G1*|ieB|)< ztxBF#3B%h=F*UeKauT{vR`eZsSmBK?>I4z};3*N5QktaEHuzfyTNlXxeRn%oNy%<^ z*Y}v(HIcSm^f8Y*;bV8&c7Le)rh#Pm$XkMcv0qBW1Mh;|alZXwZBT^hgS^rFPdMg`qhLzzmkMhfrGqp?%aMYKgIc9xS+Me9^O^3Xe%}jj89Ru{O&NSi)F+COI zPZVzNE%?~YRmbNO;7cJ3;VF;a)tDA*ca84)KgR!Yd-n{hd`c@x#Tc7EYABZvuZ~4e z<>)D%scPXLO}UdCp>1;Af(&? zlX*m-C^a?o)O<*Yyu>fBKEqN2kexeq{&j07>|TX1g4W&{s9D!B-q$lKoKl`PR6u`~ zS7ylcfBpApfA<>nqLEkqNa2i^@@wn|@%yzxVn##{E)PadQnyM)VdeC1N?^m=M74KV zpYqXh?||rYt|7wiEj@$F5~-aIJ$=G{kAc(D$qus}YP78C%Gk%W_R99AdmY83V7YTR^MI!mLfG#yI z&%1c_3+J%!F+8W5tZYJF-{t=EprF01%woj*7-j7pNTle>pjvZ4F6U~Ns;w^PtM&7~ zxd+!3ewo|8x!$kkr_#G{ z9{sdb4`=d=$AMd-h>leQ_4@ryjf-o6m44>KtNWN=qjQ9 z&(Ot_$!|uNVbr&kZ$wOyf=>dYGash3dIt>^ye1<0&N>bQC2b1Eh(b*TXMCgo!!>F4 zTHG-6&`1+a7RYii9MMkyZMc0Kve}6YE$CGLTkNvG!^74nk(J4boP4qaY`+?dK<^=c zJOsmTRPR1VeW+HH|uH9Ubk}t9efC7I*hMBdB$UbgQ;Dr^84~ zOLOgEpgFd2yOHaLSsT_A27lRJDQS4XEPuX==f)Q%OnP4BVK#Q5QCym*%4i5TTI-go zLPiE5ux_dvdJ-OWr{{%WW3#R>f8m29$5ZYOXl<0%(;WeD=dQ0g?VlI7!%;Z!SS;uH zyYMSfltMZ-N`nVTgd+e49O4TFmhG?=P2taoX!w%i=d@tX*Omi>y1AP3ZKcjfQX=%?l+^9e& zjgLbnXXyik{K&6=RmQCP?Yu_bQI8%9Azn#0S~gT;C!8d=I|isp?AW?0F3qj%Gvz(P zY#d{vP&l_uz-#(-N`#Zyb|wDnPf?1Pir{^Ak|ozqf6;VL1Hm9{$v}?@iRmgEHJxoW z`^0T2yS#b3Xm?K7kmHN$f4@)%M?Z35s!hBpZU5kXonrmj8Whr$LcjH<^i5Owc(D}q zdDRcy9dfoUpOvUrBWYXw0EFZ*hH#S#hjmD_H4XGa|0!quh!wwrLgz`D10>5hPOo#( zr;7=Hz(cUent0ZsT=R)jaqY9|6H=KV&3TSsL=*_!6CHXw4 z8C!N1ntz;PmUG_j!uq`n^okY+xA`+Nm{mUb~nA_>a?uz zdc8LB4lh+_I=(SNH;>VItou>LH&nRf@<3`56X2%#qWLH94%Rshn;84)05y=77$B>T zbs&m|o;n=(v-#ouBdjq2ouV5VVJ`dT=?;e%VV#UUl}y5BgeEx>MZ%N$%1DdNn~x%G z?nfn<|JEPR1-^MJ3Spfs`e$k3bcNqCG(4V^f_ERb0yLCM}QmQlRVWCgL~ARAqMY|;`;r0%M%ohP(r91*4aIN@3YnxAt- zoMX47HlQ|aGMakzx!%ADQ1k{}Nr#KNSqpz}po@Dicv+6y77k&@_e3-dgaZ-$eNz#| z6Oi`?7ZUU?U*6THd}y&jtDo^c8c<~?yheA(?}HqfwqJ6Cyq7t5rxsnfW;)U*qitA# zC+)T9Oy9`sO`BbI$#`MF8MX#-gghX^K-N)d_U}`_aUD;rUP8KORNPr z)o1Sjnr;BB_zMGWxkIxit3Ck1SDL_~X&`g+WSq;4t!rBwy=reiV(E+M!79$b~__a1;PR9{zBV>KO!VFk1 zN4;lVr*v;xK+e>hkfrp{UIQWLj0QuFujrDWA^(~%Dpv07 zN^0evC9;g`(}#+L8-Vs?zBoh-!nD195wJDfjfY-F-p@r2YC_&UlA7 z<&Lcz=~Euk#OX%RCFC+n1Ets*QH4fhFyA!)AmSxEfgDe%{thR_Lxh3s_u7uiKm|n= zT%B{j#&HepI_K0eZGC+s#~Vi!j1^2G9B)LJnjO7y_%9sFy3r znY;7eQ*Z6vJiR<++9N;)P~)<%;aC~PgZi($cjFVJwJb_KPo9C_3?6tQ`*EY%Ej~n* ze^mcOe&a@aM#>kcz($4lZ#5Zbg#q&Hv>Y%ww~(pGPi~)|rRKQ&wyUkkE6rM&fEunf zPafKs{MN4c+a`ScF+*~R!*^{auf()`#j#^L_+t9FnJ$vcUhE4nH=Diz7feMbcGV7) z?_pQ#+F0C^n zduOxXo?bxM{5r!2VYUXbqxawCc`GD)#YAG2g5ZNyqGC%?+oFzn{~LnJPxCjZR2@bhyGjh$8z|h{2!S9Gh*~>TMz@9oJO$fdE(5`4M9#!jh&NAKj`{ z!U-y+Az4xxAeK;mdVLIwu?{ko-T0ht$$~0#h$c(mjdxc8yUI?6-|FUULZ*ml?|5TO zQkf7s?BAMeRk(`l+6&arL7z@%mbu6aklh?+H7B-}J79KYY z=A0}RE}BV_<_eLUl(R(K3_5w63aE#zxL-D7)|f`l!Hn3!Sh(&^MGnxn!V0J+tCT$2 z=C2N&R1!+n;ojxNX&D(&0|eaT4|WUl7I-LY6%d-QD%q4aT-a?AScbQ;rU7$Hj~h;) zCArO@J@2}_{I$5Bs3WM{M{;?NBS9AlioAS1RooH$C~}rgH+c&1IYWS;NQVe&2K$F@j8pasN4NOVAc1F)>7&Y8v`gX>W8^{f<_gig< zCU65mLbjLQp9#HrxM^0G*hfp(r1RW;mKG@woFEptNL>yW-;vwzxLbm>DQc~Dktgjq zTcqLCR1ID+7Vp|9DizAh3!_p*p=uCb-lW_>TNJO>2e>8`$}J#CQH(f}{?Ck;circm z-nw7rK+7Z_dx}15h6wo3pN3F!@6G0>5H{{N9v7KL*#r|yX4VrQl zxbyPwgrTsFE*zVx^ha!sNmFEYnRZ=~HCkgV(!A`ioW67!`8A;{K@8=hi{pyNcx5x_ zm$sH?CofG_c+aNJcJ;^_Q8Ve|uu&!wv`kG-Wz4)xGz z3dpfsQ(70Tr$chIdcU0}-rhCdVR{(7+eVXb>tgI5#_zT?(@;3Bk?Q8IZLXFcxiQ_w znxi#c@V^bBZ}KpP^+_({^${V*2^jR>dyPrGt_nn|hX;Y$r5t$5+Ue)^A8MDRPT%dy z-!i_iW415~$f&RH2LX!#z| z)74RUp>y0|)edPzN==PSnm_U9DX~?H+bc3LRRdz+hFFMwJ9|J=%dkixh7#wO z`ags!xQVK`S$~kq+mB3(Cnl%x2Wo0Y=jNg;(O+&ReiTnqu?3R`8g#0@sJEWBq=Hz9~kF1pBn; zeeWW$ykD>YiaXN`5`rAHel*c|@Nr8+FS135%Qr>89 zgzu4dDGOxr2XK8SQ?dN&%X~wokZ70ptzPj=d#az`(VB~30Tpzj#w$39v{`IEn zu@IsKQHdR;-Tz$VAXJk%{z5l(kT~KVRHqX+`tVEW>LkcQeuF1^1*-_WFFuVuIe#*{ z9CR^6a_bx+3n|pd+GE4P7L030E>L`YfJ&OOM6G2Z&5k~O_t6PL2q=9-Vn48*P&kFm zH>IZZ$DnC=NrnEv%;9kt9N!Kju~!~KaY2@38?)SUH=-Hs9>QPu`RbntOl(#!FJy&aDH?J^e@d{=>*? zr%wP>7O|<4qQ&O`O{-7tg=YdsIk5VhPl-*dr(Vu}-XhBIY1$`lWJUiQi5P= zP@PRCQ36woyG7?Kq3<*c-6VL9>yWD{1Q32rY-Ur+mrx zGmP6L4EGz&MR{OL1L^OJWCq)pGaO2)+>#Q;51hJBZTo84$3{d%Ci#kB5;h94ie}LZ zC1wCkfULzZP8;*@ZC3C|GlEDKc3 zi^2iQjGuBB;lmMMVVQ(O3v2NOL-4Vkx73~bps9)hH>9(0)Jh~a-$}~KbA5$Hej!i( zO22KZDvzN9C9t01JeLQG5}%sZ8poZ%!7Z%9oNhfk5s6qid=2<1pf4&pLRGE3NyF5o2b%v&J zSqsK5cPj(_^1EiT{ic2-B-u33Z6*DgJc@|ML@5qP1PWJlb2n&Q=(2w-eQq}<5R(qu zX&>b1)yp80Z=qqLXl03qnz1fGx3I*({LUcdE_jbx0l-_!rr>tBz=vblsz8sF-A_Ts z;y$j9aN`r{<61y@b1o%-FVCn@ujty0Pi}rsL|?#Tv8(hp(2{(105b7n*wqxB$%P4m zfZepRalu0#ju(02zQ~W}5*t=lI5wkkNX#OJtF}F<|DJGvZd~ZOnK_Y0jbu^ZHYW^= z(gj<|J>|%LubsaJO9-Pno)~A2ls=yS;h(K`eDauBX_TzofX`%7dW@=xUrg6ch76rs z!%f%%J3l&J%-x;;lJVlv{*zDKqYufZjBguR&eA30u4-&ZGSNi6%X=Y1MI|x$(p$ z_dvsl9ZJrsM{EhNo;gZw>XSfSsec?=h&RGYJV5Y1pm_^uLO>>L9TNXoFI~|fKMSN9 zY#C!xqGHo|waWDb;+X)&V2ehvVbj9*RYUrvXzqKyWgjb?8tOYb9xGcJOWpDB9d8%j z&kg3(QI`5YBbQvR#;=}o$8bMX;2jJQQ;BzQ*QPw5J9p7p)H=ys3>ttt;psx~X#ZxT zyfkvv`>xpDw{L#Vt#`L)yc&Sy4q4jfU5Z9T8?0J%ks^78;#{kY16)W*e?Um$i*1&C z-GZ5hb++iH)ccIyo0)5zZ=@ZwDfzXCxThE6g#yoH&&347f3?ZowDk0{>=I~{=y1mZ zKFBIlzMEnk=}lH#I#Q!3rtB=gN3Ij{Nc4^;c$GxbhbgGPx){`OiN8n5BDe?$9r@3M+pTZCmU>IwJm9}n*ZeI zhAKRCu{&lk7nqkW_s}b^F|38}54jT}Mb>ISoqw89n1#-clTlrgkp=eZE~Ei<93nFh zry?F(EHLr&M>^a=U9@EICwzU!mL^DnmAMXBM*LTpC%H?c;J4!NClzqL^scrHdlFYS zS)mu%u6x533_E2HRpXt;gp%8FQQu9(38rA>FOwfxes&Yu+ zeJM2R0ONft8N*lQpz0n&9+c)y5CCK=a1wPPn?#HVOz=~g8 zalMd;6k)3|T!i#UZezspS&(#p3*cglP6#ywq$fIak6$g)drlRXhm>+hyO@8^f_Fj8 zs3q}BLQ>MzMx)S0z&n~WAB5&sQR}zgNvXKV^km382X;*c<}yNM`zw%`F_{fgec2}# z-oQGKH$G|pp?fk~k9YD)@VF&?ejwq7%-ep-Ka2MopUi+PVKWGq>;-La?(btbu+Eb; z_bQ%FNp~+VppG@_3U}qN66ULRVS2F~tIx2IdaD)VC;2tk%&;Msl#Z3*LuI$F^*?uw zE7B5#IkSNV5l9)C7ff5^@}t`Tm(!TR=4f+o%7J8ycL2N_?yB&Pk%v4L)xmfnq-~E}rykh)|ccO9s7#m<(H<*xILHl(+#m4WoP*HuN%xzMv8al-&UPFH9SeeUOv zYh&*N#7E_WUI-*Wa8dd?20;I?<d4?Rf>H$x&}v{^Mjlu-MGQzx~6P9t1`R2S(!S zZ&`B|fcZ~ZLt6y^&;T6K8AC-Yt0geb41m%4hZNQ{W7pGUms9Cc@}pjl(B_|i3(q`}F<$nt z!u}Jpu3C^a5WI2v1Krsu*~MBvu#X?C^Drh^G}@ZM3(!pFr)gAy@0OQnAXP zg}1Xc(!#q6SC=oy{yshhXIoqnvpdS)-GbBvya~o211H_DPdHgvHC#_awlJzhrx2AN z&s)_rsE3CJ|I)Ff%t*xWZvvU52;Vw_T%#iMw9zzEK6$7w7Nyq9uKz~_>-a- zPkQnIFMCCQz-AV%M3>2Zz@tqeVMcJ`TVOH-V1cu^gxhaA9G${nPz4HgThQap8)dTr zs#$T0XR*>Wkci-sQc0N^8rkkO}kw<8`Bg{VAwm?`7ov%8tEmykFb&HU~b7FxgCSCYoX6rNF+rMsIP|3tWl zc~tm6impALssI0%O2k|d2JAuUOgLk|a?+Qc02| zsn6&pNh*~}TJkBMQt9qfee37<-+7$J>+yJg%A1rqFjq7(5xY%@%NQ?_nw9hyM^eVEjJugerq=Q2b+LyCe=FyhSrnu`m?SZ zyYA3>pJd>MZ4$qg9-CpJ=1$%&e|spvnP&YehF`~cLUqJ|4ff3w5^|BeOKto@MW2C}!ikwOyYP3y{sYZ=vS1-~dWl&VzY8l@ zOg~0OZTO#`&7e&mdPmQ;gWn#d3nf&WJ{t_UF zVrTHZau{9wP&IyBfN+WtdxoX`bzrY>(aLqn^C_>c{U#U?`FN9tCdI~qdh^aILtWY< z>!6anby)}M_#D^Ru<~9~jhEPA3pgQs+sg@BKPf)rtAmkz4h~EGC);Oduyy%gU-%x# zLO!4dui50yC;aQDr8M~p3p={=j>m#1{ys6ap+$FX!H4W5Ou{TDW3Jfr^b)f_x_|E(yqef*dA7ke za|6Y6C~NCn1h;u7$BW++4@;2sr{=gMT8ND`kNiAQ?BO}OunoWv8(f3VZ|-XwpYtbaZ%nTOHw>t z{@u1>JjKMW4xlZ38(Q~^?ejDQoMVwVt+UtmUE~?b32!a4+&ZM`RhQ0fVqQm*_Hy#y zqO4#=rI5we;op*6@R+&5mni1n+#g}#@K#-ZGED05+7|71v@8|*Qn&(E^+oQ9bt_Q+ zMmKL067sq)iRSN4J9?_f4D_|DEFMVc8)Z*D`>kLRdgE?53OP zt9x(VG7RWOpgE#aieoKG-f z|E>L1yU{n7UEIeODqRUApP>9p=obnI_PQ!~2O*WxX|@uUq8}Og3?qCY$N8@+tCDoYqs9*l#&_}^({ftOzn9sqnH-*x226Pbo9LOhe9isIMb`rz7=ir3nkWmK)5RX_ zjepK$XKhHc>ZZjV5y(!tG_UfIIh3?qwc`LWa*^y)I~?{C|Q+jBE=kOQo12@lO0x2=)k=E7Wkb|V+>yD|9WSnhZ( z{NYH?*72+R_=sfvn61$WyLFfQHssi_dHBUSHD&21bq3i1n~{-|Nc?s&Tp&t%OwdH| zuyx}v4(T7=3t2jMv$^@g6?F)kExO>hGm^<%(WDGacKX6Xq;bS9WBlP!NWuUnBT&gc4WY&i_ z81%Zrwnc%#|53U&riM`c=PwEfqb~>y?e^>7c}B0>n6mj8#(T9S^m3Q4$!;Oq78u#0; zuNnf%8keW7-qQZvFTP-nuW(7IdN}c?>iLYUk2{pNH3ZCRU;R_{bQ{#NH!G$lNmVm& z_Hj+^;Yj~FcHPm>qsRV(^nZE$I(7M!tmW{l&t1^fy;H4*>h`KTpH(y2be;0g182AT zT`L8yU5BRC`iX&FSUuk5K4LQ@?C59N6A||R1$V?bdviPf`aH@vis$UZ&5(i5LMF12^~;6_q^J;&&~a7CjBf2uDvQ-dy+3hqKiC=$-rO zuFlskFALc8W|XcfgLG~y^ic6|1aV(lCxtf2OKW_iooT&!mRh@Um-IvDDxV2 zs;B#9{U5W=EG%rzVc@YmGN!CgxIZQ?u8gI($k>Rho7~bVz9QTYTQeLHq2s?R>(f=M zB13`?j4MLIW^Assp6HjKVc6rskC zIHP}qc7eF_8Lw>TpK}&*lWN3xLHGhQH{%BH?DzQ|Z^1qLc=sKszc&3j^Jl^2#)i+T znFNNTDvjp-_g%oDhWT@ zVcL89`6GsTmd4(1OX>;6;obSvARpoydV#6AgB*L;OAj+&wKULT^yv02DFMOdF!MDt z4q{-8A2bdCXv}3p+M>OFO7B1d)_r{P<3mb#d?w7I zY)2;g$c$NQCul;reY-p2P0HJ!FkRl?-xl&+W23Gk;7XFrpq^> z2uJgslKDE4t-EKZs(t>u)sa7(-wGDfX>qmIo}m$pv_f~~&Ex7IQQ+sGqwAbKe{m}r zJCOk!ibSjpUN1^kidf?3Hua6`Zss2^n|pGMa5O4v%^dqhbCgW z9q%zP7O&^vawx;I>^Bt6TbHA3xs*)hSI>=oS3hcC=iC0#f5Ww%KEU4;l6W3u{P*O~ zoW*nP=lF*4*RBhZ9S)AJI``gu)#2z2`$`Lok=@^tq77>{Zs;_QKK{1x(WU5Bj#uyP z%#Ln~nmF&(Env)Av@SMf)0Z_di)v$M=M1DZRj1sz{H}4~22W8`N}c`%Bh};`J#bKP zqs*DE@k_k;*SQ4?}|m;i}bLc_5R_UHSu$O#I0gnps(_V8K>N{*MIJ!V0%Pb(hZsaoJAk~ zT{wZuWMcRVz8n9;6aAi9UY_3b7YFgOAGPn=Zyylo`Y6Dw$JOiNAEyoaRV!_6Wmsql zMKWh1TBy3XFspH^uZ#!4He5n5&`o9t9)7g5V+T-lYsR>hqKR-zJBx zc`!1b3TbAx$4)i3`g?Cay3>1m;OTJR<0m7}MxPsByadMod42BcIKuFO+sXYF4-fHLQ7R)qoNscRUq8yC#_Hv%0sve$Tza3%6s>uEo1WLYeNv;$KXy>fr4h8e^Jl zHPgdln8vQ}uVV9)ayC0WoFV>fYgns2!(BFm-R(oWqh!zr@F(nlK+UDKizh~BYECQVS{O`a~4Ibm5)* z0hkz)hnb%wOIj8Lgz)QtMh`DoP<9@?7H)#{K$0<87$Fsy2>@mSU^4;mnE>QW0A?nD zIumdw1Zj&Z%ZfiRt@SVf$LhV;&Yh)#t@ycCb>s@LYogO1h6gWdXUYqlkI;gjXRd;f zdZ;8X_|{d}Yt_LI4EJA97n{g1Gf5BpIZeV-Gi3d3A1=vaI@GmLFU^)HyIMJU>3bT4 z<`SV1nk9^V9Fu#Z%wsl?r87mjExJSS@Bz^Ev>;Zjp5FlR0hK=uiNK%TGN#OP-iC{VUIa&lorqZ^3K6qQm60w*}bHGj@ zr>_8&*wq$tvLn4w;^#WWKEM3zm$QQa@OKSxHo?2GfTgoVp|h#Lsy{hvf6hk%@gb0Y zQRv2Se98(MP`s81{4rHO-JPJWOxv`!w50?K6s0c&&Xm)Bt@~pQ+-blA4~`Ag?~MkA zPRoG1XLF|R{Q2|eIsW3A-N1*w`M{3{VZi4H8-SmWw)KYj{#F_pZ@yuco*=$ z@gm^YKb64flm3ZDX!5-1(|>D!{%HliPu>K6f9wU`PmXcF4nyC^f!{wS#ZTmCe|<(j zv}rK~AI2a}O@LM&`S#P4Z46Vg8J*2XaM^6E!0gnEceq%j3Ct7@l0ma-I$-v2;K^+> zGR6do6X>)68PVPO?lEY}L1N>d|Gnz8fe=YR8t7;?j00nXC}2F{^*1*jhX-2nEa4U? zi`blXn}wD_&`QYALtVJZbuL1&jaY2S1=MH&v;>j7O90^oz?lGS%g=@m00WCIL10N#G~bFwrNurgc;?i~X5i5oA%FU+DvJQ2qs z#(cAp{e*X)e_^S1u(T_hq!Foj96U5gmx?3N@ZboYB!PR_xM+fm zGI^sQz-jw%ko_2n@aawPh%Eb@5=+E_jPI0>SO|JC{f-ZDHra-`;3=h``Bj)X*pIR< z25HYvOqe`v(^;p%O+I0NF3Y`^^J*dIKMuo6JXZU{?2Sz6D1#inS*AT2yJifblAe)> z4Auc$e^ic0HUR=x8t-O9_bl%_JWTH6x}9Z<_?Az-pohAaBLyIXM48G(e-aXn_o>V> zCgc70{8Q4Po-c%0kU$=3+uhgBL=Z&2{bN{eF=^?8n@`awnBNNs_tAV3Da90?nz(e~ zMEE_ccv%H%fVlj08*z97(G^+TABw#^Pu^swR7h+G*5{kM$aACK`RGwp0k@$TIxRA9u~$R--Et=kkk zLyCp8ZW@FpwP-4MOB_QXRLbzx|Q=||!hGZ}_E0NA^1T!Xz~xH%kr#)7@lsfqzj)k?YOlGH$|M#`)%0%^2I7SGY zp_20edNT^< zI>Ce(3eoAkK%d#ql*UHCaophy%e|=Z9YSOPW*u5$wxVdVxYQz;UujS%l(~-vC+)1Q zw8gv>2m=2QPc?hfS6U^;z6puTf}G?BCCP#kE!rQ>MKie!w6E+_@c^ak9lii!;#{~_ zrInA3?OvuxpDAfjfPUI(SrwX(C4zKdE{z`grun}?EykZhK}H6=AH6csg{Yl}s6d97 zPivakn?L!o5j*vo&HgB?dm-tpKN2UQ=!hl|y8EBOHYojTpr(hU22cn=mcRM6Jcs*A|#vf$)9jJ@9yp`-zy-a449$efWv4r!nB8h&ZJlV+d}eZGg4aMKdzjc--!$&WVRv6bn@ek2R3e?CpM;- z#bA_M+SIi-KWEaS*k*4CbQundqp`(wg6LBmhJGmm9*vLJd#v(6d&II4 z$HXZQkTb_>=MC8N8B0Z>*xn}TS_^C?V?E8$>Q&*Dm(hh~gSNI$?5D9Qp)5u+UnEzl zTmZMiO>wI+RB2A5FlniG=`P^s>ts1-b6D}1$o%*gEdmbxxArt`p_ITt@}*J{5{F61 zeToh7x{Q=fas}Fxk5L=ogc-W4$Q^FhgCf2hK~?CaTyw+w$QIcEQ6ObU#`zq1n?zv; z@#R>S04I`4_1Ao90*QdjFEX3cO`uo3BMRA{pev3UShgk2G8n~7jdfLVK%dJDEZ(+)UiHLPPi$vtP8m4mfl}{BpK1 z!d?PO44E-D(uvedj?@}WygR7XB3)@(m#RX-Z5l8u*D@V4+ba%ZYz7A<$8wF0D_AA+ zuon;u&y0r)?jRr$TL0vw7SrOs9CKU8a&Hr`B``8Jk%@bn+O`2l)IuT#Gs{7Q`JgNG zW@e^mrpNIY6uv8^_rr0b8Z086Z5p<4>LQ}(Dw4ofq2!h#btUdq<>gFZDPKb4;0i3q z1^&b@%&2MI9WjFlWr*2=g4H+Py^^ubabL{E#0(zR{*HuaVJ}P)*^6`I3(@kgKFN*? z5M3DH3WTs$sYVXc*h*Wml`Ppl)4uUHGMXK%(YkA0HEOl6G;!sYR!Aui(*B#A%gUSO zrZVnVSZ!uE=fq3x+ywo*a@R)vx#qTc^WD-uCiN@Vo&(uqY z!{|gz=Bg8`{or)3iWG)KDp_^(VDB&l(n$C%I7IW6D+y9Eevq(Dw4M4eico?QO^T9z zI0d{%S0$5wuo-V4!h%=4>k_t@6v58GALW(W;KZDtmUt|dBKxK9o}%C>>=~YyrD5Mz zb&^78XHCpOwdZ!r+fr4@G<)kSDU;0`={&1nHr@#x4<>S`ISR5kCawSng=DB5WxjT^ z3%_L=?CfmtOtxbwah9o*;mR!c?Y}_>#+4}=S|a>wi^AZUwU@tWqRvx4+@=-zK?JyF z1kK#SEkz!HGjy^>Be2+7o`rv3Fgioiqz`iw`)Evow6Cym&KzzJ{YMb)$@ljCaF7~7 z7eo@a_~Ra3?hxRv(iJg?#FYhyoquKZ&Vq=WX}Ca6kUEK^B_?tH+muphmPWP3C^$GQ z2LD2!^eVJsj{kHT&qf0Gz}pEwzL+xL?0f%fcE3EBXp(OIp1m|9gwwPwlcDa? zbQ?9QIQxjI=x+b81H+|0KllveoZJ+>>n|7S@0+?7?gnd7eUeGxx}1o=;drS~!w&dR zkHXA6QY@t@DY}at2{TnR*;4k#!ZT!A6fyILX(|>+2ygjf#$-w50&Nu@6*kJ|clWQ) zF?tPWors_W!ps!YiSWs-?50u>qw0khAbSW6oqcTmK?b)UIaHCHr+$JY{imI&t~ z_M!+lk3jVL%f@%+F|x|vp%4!lUz76^CGQBGcg#}iS6@8fF>M^Q zvlNapuW!27Q^}7(ayUI`YEGefQID%ZCE_mFwV2~%t(F28t*l1g=8A$b{2|r{@5+a0 z5R0MF`3P5NlN(od8!mNey_0Xj_RKiKv!C*Bo z^H_LFHmslhpXFW1I*A{x^b)>_zD7)&zMJo0)YCf`zdF#3%S*##U~a zz~a%Qnf@WS@Pe`rj{wIF=usRytPRb8p45MlZ}>(9=#+KcjKg^VReA~M8Oe)$z!Wc8 zK%VSraaY*iOSX~>e)-CgIJ@8Vkc@T2uHzP1+gbwxnHSYMb7X#t;sN^JTa|#@?{Z?Z zl}5e}rE+PBOMl_948z@g&2-hp2`UYa8bC6CFPx3A-~KmV4)domd~-Xe7+E9=-Wo40 z1G_zPl#~(QYakZiAj4~_cMD8+Js7`+HVxlz)-62g5|frkZ;@KvHo$hRwmEtOkf|QM zHCo!aUK8OJGcxK(dZ&rPwq4=!$b2s$QSV0p6h*q|xM{e}e7rg+)C+Ec? zFw~tpmL1*1!PD`mSZgHaiVb zv%8)$vr$U`;fww$O;BlCv2YCXBKCLfz2F_h(E5_~_5O3tqCaM0UU}YLQdFtjsO%blH^-!!pTBpGk=a=p6;NY&8ujVu8BfjN=$;!nja?l ztBVF==+hp#4}a9{eTS$@&Gy`sCu0x`nrB2R>R?UO%H2KnLoMOHuI3$^qL!@1Vv(m< zCZXCJD<2Z6j@U0*Z_sNfxjEfNRqMQH+lp(ivN2_CZq61qssF%h7b%S)>0Vz9zRh-O zc1-qT%d_SHL={%(JL_AzljUlc4%x~Q?IlLr%K0^L+(JFT?%>k+?I_@FR&X$<7X(zS zklxNI^l3B|oECou+7b0g91M%!u|ZeowYrk%t68aAUdsbZ+|sILtdf!d_GF^3cl~UR zBgWMc)!9s>ddNVUBW_#xYtO(5Fmi+7Ft&%@UeCHsfzoCvuZNG zdd}~<=i$H|{vf^uH7m@absk5sm&3rp_pnDybI^Gu@FGm?|E8YcAg6W^m!#0_1Wyv=FXY>r@5t#^oSFJIv z)u@+BqkXSH2F&F~_zEo5bwxkbN&FQzs*5LG&qN^GFc><5KQ|3gS~&^hYf%nmN<&zGb6#JqtE* zd0&Y}zBYhiO2rdAel&HsFu!v7B#8g-e0b$$?~FxM%cHWX>leF)vSH?-?nM_tlr7rX zZ4K*)b(fPnnM9}miE|SUj14S1b$m|lvD41yPLO(J)M9mpyTC?+MoEHv zTbwUz_JQeVh+1u}MxN!c-4fX(#XMvR=)-GL^3>*>s!$0`ioo1Jo}`rOg0u@*N+#~-&!dKF){2=jYSzMel`*;tx2`wO^L5|@$3s0iVSZ$E%>8%rnIN1Mqt+37s z%por)2q6Gy7WBi=ivMbF3742zdUji*8GcpNQ0FiN&R5X5-v-}492NToKIp0qLl4be zs3SM4LWaybYCB@okwYP38mf=Na^YK?uv?OCc5q(+mB~ehBe@j)5wBVmZ`9;&)}!eH zJaWS4_9U1s$CmHk^$SHW2ZVrtoaa4{mFR zi1A_&54OSSSYtqJOTZcRSp<&aoEC+cg=RFhBB?2Zwe*Hn)@{Og-PPmP>WdVT>a$>QJL-=K!RCXOl!qzAZ?qSxP6Z}?}>^*n) z1*6<9UVOcCsv(ewGGn?xY=oI>7Q+V!3`cv^S2$*{z%1W*YjCCSU{k$B-g1{u<-^Y< zQ^`+c0z4YtK6EBK1& z>>5|K0+gg_r1uoP?+woPnMhHSw8W+Pdf|z<;&{L%UFD;S@J0LjcJ(B8>gc6ZRiB94 z2@`|9bb7{RnB+Wq1J;wQDx!{Y+Hl3WmIHIo1&bWR+PcSF`HaMKmUb0V;*2!F&=FgF zI>XXd>27ve9xq^VkAr89ZaxPRS82FiuA-?MKhn1)ZuGHtbat1s7jF%^YJJ{X`AWmF z@?AcEFj|eB3dku&v@7DBnqGDL5<4m~_hP0z_*v-p?H4tE{OmR7G~b%en386vLS(eMf0B-e_lEXiawwYgh_Z;FlmWzBY? zR#^?W$#LT|=XI+~|3^wB-5rO`$u)o7#5_$hob0xHbIKulJK}6XV@|WPy+r?l9&eXC zp53!5PGNg5HF$ukxpCJO?)08KQMtpnC_Tk3Ufb24BWRH~smO9=R{Z6Nu(($l0_zI~ z%Ti$y@Fd7Apyw|TZI_6FBO_3q_UWIz*fMFmO}vzv&d{5!J?=*=;`X%@J-&Di-eh&g z$%)+l;M)Dh4Ya=%pmx|e4X0Q(F)6H08&<97jdsA^N$&uD>^Wi_?p4Z*5Z&`r){^xd z7u&9}UT73~p>FX+hx}l8yhr7P=4^3f;*HHnnqVjFq+m5{=-e_6yNe_EQ z*Lebr%RXk7!Mr}gq54^huyKam$b~)Z%n6uyepUdUciZ+ee>}KdX+FVV7MTR%& z39R714IfXA2?%<|WumCIqkmOi^N|2i1x=sAK0WRnXT)`~4?PmU^0VF*95@FJwHitW zY`s$k8E;4`s6(;Pe$g#0+PMZZ8>KRm-vHu?dG{0K1}I zrI)7FzE}R&w4z?)T)kK14$~qvz)>11m(tKETWUk8vg{gUXMmQ)!8lt!)-{r2U9x3+qG`61-ML zt%|zqeH16%Y8&X5zSG?c3$AhggKTi!ao+}Y#2E=H0eu$D{;V5ZE%B6FMyB;8+IhIS z)H3S4vd8?DJ4jPn=NC;v;orKf7rLWwXpoys*30(+KP0RPLi;weT*737jZ5+$zKNK% zg~)6gW{PoS9?RF!{T6K}bim{W`v8>m`gs(tiChUqwbyg;wFwl#}hzWoPuHhstTbKU_Nx9h;+ttM@dx{OgI> z9Q8l$*+tW1OQtiiG^QI92MbO_;FFH-S%`@aO>?l76q%@PV>9@)Q*dNn&Px0@>e&7R z=pDg{ks7V$Eda0dmG*1V1v}BsYHk5#_rG3@@m`ywxyJ)ud<|i^MCM za^64!CFqDr*SaZI1$J9jDw~uJHGTfOjecBrt=cS(8&d4tXw6YxmTDNcvbjmU$8~_p z@tA21L;1Bf*5p?r&_$yfdhZ7(F;%U1Q{2qrGhBjLAO?f=i&C^Y1{1@hYOJGhtOA87 z4VjbL0H^h~N~x@c*z5vs%!CaX-l&Hh)zLJ>d71_|`=dSS2e1Pbg+VGsj!us3B5Iua z^1N2f9z-BwqQlNu&WO@mg5X5US8`NsO`X(hF1_ZXQ6R*oOPPdpFnxB~oBVQg)W zK6q#O&PKCXEeuWLYUC1^XZdCWB(|LnVjhnewz)_Zi;`Hl2o9$EOETZyzY$Y>_(T+i zhnBH+1Yist_zh0^BYZX3Y2GQOX&DF>dX=C55HM(b0Os0U99Av_S)pCEZO-;WJLiTC zeHQt|>;3T68J?@ua@QYj0A1?@)ESX05-wVB@NE2jZ|0T|1Z_-Z_M#8f31Q$}Xkr}m ztd11vt}@$8<#xDBv%70gZ;3*vC zM1Z+lob^3-JFEN0QwGhfFZ}}V{SOD_G_`l2ot#~r`?Z<_eA!T^Mngttiznq^MDSmm z)j{PKgj{!C)+^F#9;;?C_nBX1e@%w$y2W;Hjt_Kn1=OR;>IavG0Fhk)`S%h;g5^A{%J&SXEBnRV1sZ9N#fb{f z#$3~cvuWpbwP{6uXT!2gS1+NIE(Ko|Cu!q`1y`w(5&;%-`g~+@`pz`2B0AUdj5)Vv zSij)~|3{3_fn&biQyG88hC`(_?Mhm?nCBO))MK^wPlhR zQVX#|Z%n^a(QNm;s2F`M2#~bo=EG#eE|D!oJM7JLEH^pr8@}#k!pHI*F}sWs$Yx~1 zib~YCw#y#XO_{&3b?~sWeWSx7a}2RI`N#pr1p42o`?{7rH=Uds+wKka-fa(1+lMQX zVJ>}EVU7Ml?di!DdySm7$!JLq%Kinb-G@RyYlO>+myTgJhL4Qlafs-w>*UgpS@~S$ z4`L;XQ4G+dWi07st;YTl!(8Ojc4g(X*+>Id+~(_VsEsRvRR}AI7t;r#Wk!<32@VvDqem zQNk)HFe-Ay>|{8^{VGYr)Do}3Fc;Crf3hrVc=AU*2`Z+xg^GL2AJ`3Jqh&Q=ef0rd zsUF#oC3bJ+-mtSiy#S|lniZ$$P#yhbV?gJ0*QU4>a2}%xj@1xKPS-QxUDw^O7;jRa zfcF%S#Fl1HzDZp4s5k%K-47jcw?!$hp3@IqWPwbYS*N->)PC6j9vcQTs&so|889Nt zfWDGln<~PTuf6qptQO-dqcKZxOh!`{A|1z1Y|zeF)!O0fXl16li$;J;sdJsQusr`S z*8YleVA+=@l47HPbS%*zWv|5mPN80Wvb0fuHKjvH?Wlc3>e%jh$lf%v7M)JIB&y+Y zMbSBQFB0x>#5YU?5vEIQf_2{~-7aIU-bLk?T3pb0h<wRg6S<(e zz!`s8d)I%VuX_sFOCBjtTaVOQ&vqP%G!@VXet*J|b=yl#k7A9?n}`hDH0$6eUP4b)OH{)>8J(0Q(8A63?j!&ST(0ZPC8q4BI5KM8|`UX?83$DsRT z;)RZk2H&tZ9{$tnfKUWN3HvEK8JCld+2zy%HlCQuJHV{w1_uwLlb*p{0aQT|@oHmA zNHJqd!PVQgAhH!FxWhDp8QfutcoL3h?A5x@%uJ{!Pt!07XCg2AF>v%|6`iI*HTcj@ z*fmyq-nm(QI1&7f5h}V(d?uq;itf8|ITVpo+F?KyXk+|s?p5nZV@ft+?^$~_L8s4v zTBhHzdH6#Cahd5##r|tkYXYd|)LKI#U&jb-7FyT%t_FOM#h~vm-7;IqzBi9y8cLX; zlG0B*uwmJK5i3&mW*_hbPeItT@W$Vrt3st1zIMPli!?irmGmPiqF3crWl67G9E6Oe zOkyrCNYAr@TStprJs3_~Vf3i)XU$LKq><#oHVoZ#SooibXt|re3p?|Z(X`*=xX!VT zf7uB&0MTB%0#*x~$ngDvFj;}aCz*vMgSJ=!T&Iz&f^$#Pmm%c9Y1Vd|=(bv-7b4(M zt+@h=XXjbGnhiHD+HrZS#;^pLLd&p#x zTRGaEgp$eK1&)m6VPSK3?7_*Wjodz@v+TKr){u|?U&c*^y%kf^s~M!>%_|JjVdjA0 zufjdcXpjzf^e@@0_~ji?eAzA7ocg5mu$^xym$Yid2t3J!xyuSo^jm-G{IIRM4tikd z{qcs_Z-$$PA~RfO)iPSrgf5{=IkgLscHDSc9Y-d~2iMg~HKSME!yLkvqOsVaVwlsZ ziXCRZX-;iU*hEiLmLC2H8s<68Gdi{sw}rGSiSUFm(VZR(W==s9`3_l2 z87PD~8rn6_8ui>6xnb)VDUbI^73s1ZevHUqFhLlNMIFZ6bkrQKB@hT4q7!zOtkE${JT0mQo0agH&HmDoFDXc39al#f zzh~-L)2-zCpnm1Mn^{@$L^a_U0z%0*TqecbgBK=H5H-Q`gI;4p>UI#? zjj`FAxHUJr>sTD6Kz0Mn%6r6wF4*hMo||J{Z0$kPer{5<8>=z*&TYtvtpP zwB?%rixHU$TAz?_c2H@zVzFV?jA1=7;yT_Dx?a$IrR`>L9=hN(8zeEbT~Z4dc9n|1 zDc|r|ljqm!Fcy`%MJAmm0Ol}-WPJbIvERr7-rM*TOK5iv?l6&Xo%o4z=nd_%$Vbw6 zcjx;GiNA)r#37Gz`+*i?g1Y*^`L1n}6M*O;i0Aaocg5H#cclk8lKvLKr4kifjxm+S z2n`F8=~ooyo9dSfph+Fk^io=l2^NoX$$xNV+BX$Jk#i~;T4Zy^0F_DuE}kLPN|-@J zaMCvAU(;G~u`O5N3O_yr7e`GBddlk&1oPN}5dHchAIp9HxZztR%NCZeLIrtcm_!2= z)KbAf7NRC|shfv`w70{|q{>uh8Ha@&k#-JzsQA(aH%)RAQ#H?_AB?MK_*jxj-1GQY*3en z{3y2gaBV_WHYQmiOl4w5d*)si5v_Vk?(a`mR#tRpW9iZE$XPk9gru)yz-;HFoB*sd zOnE&IpHmU6Z(+Y{8&HuY7zkLc0g`UIaCB~<47)JlvxC_{N&BTw~ zbQlY&VhU|c9qrDPa)*^Ow$P2R%dUVDQqYuu&_1yP3jM1(r)R#+$1e^l4R;B*2;v$ZtEy5=9;)+fv z#va&VjFgz=aD5mWQR%}BDjH(7yeZ)94p17;tmk`k3NV{9$mgj%u~2J&r|Xf$U6fP1 z>oSzWM5(Ve(Rb2tz(2t-o=N?Q&}i{gG&6%Gl4>N~kSRjoo7`Ubx!$IQenj_cSMW}@l5H8s?=>W78>d&44vPULtf6dE-yYWAAFB_KioC)hnPbN=hMedU_J;vcCD%$=q zDV$fW*<+!P*}92k;-eupFeTYXV1XX}O^^b-fjDDBcK=eNIkBcZ1dVC-D$L$n`^}ZS z#-zzz;6xVY-3a*ghAZ!puwL?lfz?CsuyO%WL>HM4XUs@hp9A~xhqnAfC-7vYqQBl+}$tuW~kPp!uj z`YA^cq_DN3BT0BGR=I0Lk8#SXG2)@j9tUy7+Rtf63UI=XXf5d0c>>NX&0RuhbNJPG)hayAfxfW zR(dSiDC64dPh(b$uVPLXG+|Iwu>M-F$*(zV*Z?=;%P{{su3lx%tR1SIQ$+1G;Szk% zXbUFOC-t^8mz`E6|2G# zV+Sg{vv#J}*7Brb$Bkyh?TSHl!xjYM>< zd0QL9yyxXunGheSwQZjWc=N$_1D+LB;s7$5pZq4p7pPFZVZ z3EKSgP3j*8j5Mm0rWp6?lh0GY0u%SL?3tOAV$u02i6m9=Tk~b0mI$}O98qXIF78V< zK=j8J4C8UxO3=MPWfB-|8>&TX#=LY{GMX(mv|1=o+430q+5<==xjv5-rZxIq9K)FA zQ(Shrqtml6*&b8;23AF8R=RF#XPi1aSK)^7;i44DqIiF7e~v0O ztw=mKs8!Nl%p37$vIkTjDFh0m#7i8wsxNP9s9f(mbiQnIALPFc4D!)7s#?asa4`C0 zU8D%o2n_wJs&#&7%+ZzJ-ARdNG7_O4pZnm!mC)D8;`ms=v?oi}wMH8XU6N_pOM-fj zZ-4Bbbop$>F}`lyYhE;a>08!Iqhs;07fw-OS1s97w5f%xTHF|ncq29{=K-Pzv7T+B zt-N~#9r_C3N1CMkl@`tBbnncw>*a8;DlP-FuI8lo9xi+=9*&fS50bE z8|>)`R`XP zCF9vYjo#vcT>6I9I`n0R6kR(W!yM1ao?2hIm)VW>EirTrWt^MSjhf<`%Pp7j;o0J$ z7sl5n0*}Jg&uy_B3kIS6+y^9xcUm6}gy_!R($Ly%_F4;%-ssEk(Fw0CeSpfDw?&Kg zl`sdcEMF~Q-r(Y{{rdl7E&268xforUv+t)Ocr$Wo?dOXqEa#2WNpHQLD$J1OKl z0KI-<#xeDx&GnUC=R7RP%5Mg%Evoc^p6eW9hgvgsYZSHdX#w(#y1i1&Hj!YAI3 z6Xu|M8al?=+^%j+u7GV$SZ6+L{GOKPI|L7eXqG%8Vb?6$i**VZE!dJ{?FX1JJvQ2I z3}yu`ec7AL$#`>tsRlpUM`%~NRm8SB=Sd9Sx7U04q)Hqp83oxf$wgf#?7G;iL2p&| zKm5Bs2H$iMHf}cHFt)=L&shA5fch>2`PE1m;Y_rL3fuLT?eZG@2i?H4px_GcEJWD> z*BKGi*+K5^0n z`6Ji+UwPfL=*m7PauLwl5)qoqsm8!h2ndN|1qY28V-TMrUXC2ArN-NuV5{}~ZhcA* zp|bZObL%{}mh>^5Q@YtF=)7ZsB&+)URy2KFf)1(wzCmP3qWxwuIsV&8Tgc2$HS56x za3U29W&C0QtRpxYF^EQ}CGT{3e~;%+^b;Arq%Nl={R)3P@ua$x5H^(=iN#$c4N@#D zD$Vj8^k3k_f1n#)u}#&P5fVSE;gV%CCkr{lc5!^@K;?KpA(rQ4)l|{lEeN-hWk|OK zt_f?I-ux|Y7+aq`m#{G_EvVK+i>Q_|N`lA>(%xgfgCFhvEsc!w&BSNiK$yG=nlET+(AgIH^KJf^#uw` zgP7C*+;LZ`#(~=w-_o##8~TGhM=%GoI^gQUvle>KxY*xQjGm%TaiLcxt}GM~f?@=uos5n|JkSjIC*j7$hI}fluQnjdwrh^y!2ZA1iK6$8*iaVSb19=Q{q5lQ}ta zdVTW16Y<_!#+LyT3>y6Ogs(BifuHUy%yk<|4u7>w!q!hj^liua%GONf`3W+|KnCou zDE$*ynXk8AlnPG?iA(Oy6BHORf{wqeTJSExiCMmi!OoSn%C>(`LTCX(LQ5bZp-7VwI#PrHp=iJe2wn>kAV4G}AqfaJ zLb0JJj*f!`#V)pCMn_>Z2r7z>qre~{2;zthDY1f5_Sn35r9Cd-GPOD<$_*JXW;?1my&h_2N(OjvyJj zSvh@+T4-4k^3shM@N0zLH~1D!g0|8$Bc&z3FI=LK7w-|<>ZBzuT3mbWDb`mpNO|Gw zhPWmU(xmN160eKTifN-RG`A0`CRkb+;jqR_o}ft%{B`*6U5>?>d(2;#DbY)8xL1oy z$0?P?&atm0VQ(Oz(t}$b3c8M7sX;VT59iq}k5QdnpU&tpGAFMsPhX8=ni*I{r$vl_-x(lTlpkB7uQPV%$qoxA_+CVUF;4g4&ZCIQo-1ye z4M#8E({e7{WVy~%%(NlonUu54OSwd+n%z1~`x$qzJ^rS{2{_;C>hD5G_wG)~@$AxqMoN7^(&OUy~ z;fF6!U>Bk_gHZ3I8f{J@R(p8ATyl`KEUUuM&~lmo)2WeZzkeURCGRShfX_ zH`94rK5pyHMBKpwo!HG;UF#L6H2fGM+qUouTBE?cv*uEk$V+X?)04qdaVuZh#$82( zwb7kg%evI{3KK%kk_?x~wr6O3cvm?kZ?@Tr@Dj`|PtvkWI`4G130+ARmO~~s`!R7J z`c(GMJ7)F@c`Xk@P5z9^RjeX?#XA2S{a~7z!rYQ#O+Q1%oVA6+6dd0&=US!{X?Y|t$ONiaZ%Xkn4r zc&kqjcf@~xs*NC~zdL)=X%o$`nQlW%e4G=&b>wPw^oZz(t$5#H1vGLEvEDr>ctwbc z6&&M_EfnA*(a|(i#U|tzB&P0&Qo-W<9J*Vfg@ZEk$kd&%d&9gN$l z>b@wx5HsrtT7$_V_;5lP@vfjldVH3evZD(X<>Bw*N}WDmbUFZQ7!-i`q7cz9Q7UUX z0)*|+wH+vzdd%{39?c%Efy54!`LH4pof#Ftw2O#T%2m~^6r|V&V@sNYILR)-PJp

7>TN{=PxC`FwD!7Sb4p3HKk8&yermP{Rso00Cvpb6t=+CF6 zrU;5D1@i!sFX3>Mcf+cqt}TJw~u_m#x(#(3c}w!^*$b);{1 zDMx0c2nG)hCS`D&<`>{Lac%{rBoWk0YjJw*4W#;X6%;n>yvLRn%nCyzl#!C&2>Qf8 zkC3%Y%t>$&iqUnNRy!DMPLfS!b6bv}Wsenulgbub`%2OT-xPR;^Yg%W?N%$*bnr)I z)a$4QSBA|10A#I=Ciokhi1;Ey{C-q9Qo0+jvUmT*d*@*fJycgE`-EA477J%WGMmD=#O#N#;{i#;YCH7qK13A=lucn@aPGySrC`#VE^+j!vM zp8Sb*Jnpe$z9|&sse%!bF6Y-dj@;yd~{tjvG=z48J^(Y49rdRIw%&gCq9K z=6ZnAx+Ck)YwD75CH!mdiU`$~>a5%Wx2^eU)pNu?2l(Q1l*UGfQA0RCB9jVqzI_tcKV?>>|pD2nkQ3kfyUA1P@_Ps|>OY55-_K%hiwF4u2RNSHAB1__-ks>pd(IR8w zest&DGlkzrP|(Fn97JuxePu${0{suT&hlBpmiBDb!KkLx}MeGS8{z-gJP*B zL3Zc*;9?obX+X;!UtigPl`0S-C`TC{+SgY!Offju_uEYpXRB0+PQSHeX)C>mxl~vGup6(D7 zojkm~Og&-{qEOLZ5fo z(mJ~;#m0ogK4DAiT`y=ftE>HV@!h$jZVf6YNA-NPhLmtdx`ZNZ$@kW00o-d{vj|O; zj>){4uVx}0#wB(bT$f&wDPCbLcP5LcQbJmpbf(gnTu5u-I}} z{_fv@?^1q}6Tfb&^wJ@xCY^N_x6a;j@%eV<*|TRUd2a)TPv93WIXEhpADTh>^$cjlpp#;U5SIQ^YZD+G}r8Vi2EtIs((ny}-MR{fZDUh{?RP^0<6g$wGd zHv1MZR_h&pqj9qB{qWh2hvxaQ(#`^V4>sS?)jVa#I@#hk51VgL)g86UWkrL{<(k`ieKE!q znMOaJsYVQ?6shRxrfIqrz4P#2{f()hTm$e>8}i~PXH^xf6s)!NwKwMMd!wVMLFsm+ z0OSMGFq*SzMUJs#7=sw20#KT75sA&qH45hlQ~IWQ1J{lzq?*Nm0JGt14!&Euo)$1KrBNeX)eU;mpTojGx$IQ81cdVQu(=j&x ze(l0NzxeqvU6_GC9M3c{e^9=6C50#~FSmL&6nw};9sjH1EMBVev%!5+6p*3QAaoDr zyPzp#}8@V@^=7*XhLCx^g|8m0WaW6?ZE1U_YlRj=zji=`q;L@iBC0*Y5-dvFnI?8*M3mhQ0u zl)^Hh@Hz%h(9_Yb(!LWIucXy{k@S<|0p)?ly{&wcr>M=-lyem&ROQ_F5^qYbv$7=D zRhitk$jvw&OC?OzQyY#Z*y<8mo2u_jCD|{J zRU19;0#x#RRU{tno`gb@QtoYa?NSUnUQwbdZBM!=A(PfAY9rSYb# z`$}6n+pSb-p&q#vYiuPRG(hg{y`!h-u1ah*xM$E~@WB8})))c6fb2w`NscEkBY#6a zM!rODBR?k(k>S~X!z)7@Ll?tf!)QaEVY=Za!{dgPhVX}_VmX?zuC;)tUXEfsYAr%x z_jNYwIJJG#@N>nksF^ft#pn036&zf&xc^Yr&>snk(eBom)1M&7*6kR5uqF@DnafLK z38FddrL&W)Z{}??@hv_&EiD;Uy!#*Vcc(PZHIuc@LF+U56+tuuXQ8p;J3VtRn#H^- zV=_L1@qJhZcfl@|{yI|*4+b@TAlqhIhis*H zT~pV)<7G@sOcc^caXq7bMvu4E*d_#V%UcA>)c2-$POdrKs&7QPO^TS)WMOwLe^!3& zzLn&aCqwu1NPX`%QNJ}ZIBD!TBeXdTwO?@PMTKS{otNo-A??CJ>GB_m-7cJa2T#_h z+oRbz9jlk?_32j&7Is?fJZVYelXP#N>YU)nM9H2r^M8KfmF7f`1XQc#J0o(=|1ZeI55dTl%p)zKps zsg95KQjzP@{nXxR@XF zYuk0x_!jfSwDhd!^@h43!8)21vyY2y&1lxnPBFEZ_T_eUbb5eN-U0zKDAIBL&Ghor zbq7vm;Lh6KE#E?>FF%35IV-YyqrcG8%%kW<9Oq7A`Jyc|H~q*>w6qfJWe?cn{JE7b z+m9sZJPzD;zvRP)V*AL9G%L1Sy#DlV6Ly7GU)t015aLDgsg#qo3xkyeH8=ee5B}Vk zalyNU9~G6_6{T=PBzbdXw2%+b zj8BQ`u$WXbyxeF^+pqoOg6K!S8};kAttIckJ&?TEE#%UTvayfyBvrb)=&*8_4QHA^zrx4!(#1WZ7-E{f+v!9*_dLptRC*=P|+bHH80CF6LekeOD$ezaB%sVy24En$<&x>#`by(oM`I@RioF}8LM8h zR=707G(lvh$gNxc5MKNXBf2|RQ3IkG*OKedz7K?}%>SGjrWVc^*;SKZEE<^($NlQ(sFSGYYiG3&LvaW&g$wqcU9l5OT{ z!x&>#kB4kRxu#}HD!O*n%ybi!^6g-mKQCwM{MFBGm&EBh5vHWyTJ(m{8h!|iF71D2 zsfAZ{iQjl&gD*MWg!$x+{^k{ml(;)PFNeug>d=E% zaYWRwU61?x^lJPgBd2TBZaIOgs~NghW4~@@C&s_&DJ5Lzf^;d{Ps|k!nCw-@cz4uq z6Ov{#(aZNsx9wquvzzvK)r7}t^~d36i-e4A-uyzMBz&3aHw8-v5ShhPhk+3cf_!Tp z3Xp$pan%Ui;-;t?X&44E@Kxk5@Wmfnp;FK~+4>qeWoV7N&B3u{){19 zhtUQyRL7%8Ycfa zX6Z}R?dP^o8oPe5Diez!h04LU&%9Af2PM9$8Lu`d7cRym)jm_Ht--IkVm%~z@eC!C z+bXVW{rw)Sj|>Cvcvh_udv92bDJr1$PE|xuubKJRRKRxllO6dMx>KnU-(UYeCgjzr zxnMg93Zc64dWHPUm=_Phb{#0#aLN#V%Dn+_9&VX}Fr$`WB4favqP1`nF+@Vik;GZ$ z%wt9|<-&QaqCj)W5@h<7j1T#}lIQoyBY;GtBNT{(esJ@k|A!kqnqgByVAT*mSUCkq zCGfu@q&1Mj1%?MJBEdmY1}O>BE=VEy*yQ%|^Li;L6C+x>}<$^nNVURF{ zhQNKfU@s8%q98CI`5-u|1V?8>`CPb*7adXgq#KF^KzTSqYQ!K`Fg69k4+8bE2Rm>r zwbcFq30(pt^F5dSkK}N7widV>^9sfXUyJ`{y#D>iLqY#OI_NL?7$3+Ayui!l?$>1L zPUiouJX)jHzt|f1`oSXm=l3J62OkOCp1wRX^W8-K|0Vu+{$QYJ1{lcq0t3t3LBGK1 zRezH0y#HzrFA8YA4`!Qz2jM1vf@uyOr+fCxk3V_*m#1fe{$rt_56-`DI}P-2^a1^O z(?NfhE9m7>K@Zy&Jj!vE{--$%9;dUq=R?~l^RHs?((K?j=NaAd_x#aB1nzasUsx)}Ujt322Qp0C)H%J$KvY!Wu06%WE*ebD%?j$?&!K6S6Lm&9eK+ z=CAJlgAAGz^!wUx`Gb3Hvq4MyyuTd(mB^6}0VcyltS@QbuVno52A#O>tA=MgDonwH z78h{8)ep4Yn+aOmBL8yyH_M#p5MVNV8TZ{48~p2QQ;P>~7=stLNZ@Is4(R^P1U$TB z2RiRg2kotNSc7otmv)o!Zzaxj2rwDGv>Uo?Tl2Qg3cRd01${RS!Se=P@VLnUJZiQ8 zT`f+a7A6)A~hX9k|bK8*`C(8Rv_F(Xe4R~|a0?2MqK<_PmSOYE4-DC_N zHctbcE$))fZT@%tp(0m01egq;+mBv!E*`F>0$2m^uFe{~sy74uzZij@+j`(h6A3)} z%^W_~Nd3#-J-P1>-?-5sz-0L6_%5=Mi%#G}tpgamJPp>s63DK@8vJSio;7OA9yb~N z<#nI%J6z&UhX9jdLT{|vjX75B3SbSuaE&8)f5{HKyJ8JqUo!^-zf7rlahv!b&3nS{ za4C#m3gb_L2|XZnuaL(dt9JRAgS-ag$Kqf9u6^?L+3$fL$~@>0U^0BNk-E!()D6a$ z*TAJ~q{fl?Y3wt9|EcW#0S`I^m<*r%N!_Wi1~qUU;y%g#8*wLmygxFX4gn^^gx=pp z-yehVkHPqp;O~k%;rIPX82==UKM5xE{w_N7gC`vVOoqQJ?u6gL)1Gt)@O4aoIidG= z(ZO?GbO`Wuc&_=o;!gN|_p=ur0{kof{@C&y-b%gc5a3UEHNTa5xlH8uchk2uGqm1b zgfTCAy?lGoGxP6`_kYko05!(&-V|k6bpLfm@rZ&P63r2XE{Gur8AOd7 za`^;&pMC_@-SfUg6F8PSCBg)@e&;jR3t3QB&Bg7U|e3i%Z$C!`z7y?wLN zxRgw`P{iT$d`unfsiqV*FM*%P;U)W+&W#GP^MLQ!6tj4VEH0nN_A$+7i%flIXkfir zA`v?+o|{d94tOFT(+nZcQGHr0D~>%@SL4YDLhshWN1v&KNF?eyW6|TlNAX032c#w zFQf?*QaECEf;dA6m2FHN{_vd07O;8HYeF{URlO%zF>O43x%4k45H>L@`xp){k-t=A zAHYvbZm!c^>BsVj*a;azSpV^= z2-)cwaKYG#Od%(e!(}J4Me-3vhH@=qUAmMD~$3Fj*`rDSku z3GxNA|MeL8uA}_eZCl~+h+uPx@9OQbRW&$I7J4_sPGyb@=_UUsWyoXHYCcnD- zXX8NG&=;~yC`07>)^ykj;+dB*Ibzv&E6DOm+}F zM8n~^f`%Y+HZTA|0#eussqinrVJv}wohVm85PB9z4BtpEKPvyQl{51D5 0 then + begin + for i := 1 to ParamCount do + begin + if pos('-profile=', ParamStr(i)) <> 0 then + UserProfile := SeparateRight(ParamStr(i), '='); + end; + end; + ProgramDir := ExtractShortPathName(GetCurrentDir + '\'); + if IsDirectoryWritable(ProgramDir) then + UserDir := ProgramDir + 'Data\' + UserProfile + '\' + else + UserDir := GetEnvironmentVariable('appdata') + '\Tcp\' + UserProfile + '\'; + ForceDirectories(UserDir); + + FH := FileCreate(UserDir + 'lock.tcp'); + if FH = -1 then + Exit; + UserDir := ExtractShortPathName(UserDir); + + Application.Initialize; + Application.MainFormOnTaskbar := False; + Application.ShowMainForm := False; + Application.Title := 'Панель управления Tor'; + Application.CreateForm(TTcp, Tcp); + Application.Run; +end. + diff --git a/source/TorControlPanel.dproj b/source/TorControlPanel.dproj new file mode 100644 index 0000000..3681131 --- /dev/null +++ b/source/TorControlPanel.dproj @@ -0,0 +1,183 @@ + + + {D2FF7A62-ADDB-4AF8-98EA-04980D0CD3C2} + TorControlPanel.dpr + True + Release + 3 + Application + VCL + 19.2 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + false + false + false + false + false + 00400000 + TorControlPanel + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;FMXTee.Chart;$(DCC_Namespace) + 1049 + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;CFBundleName= + .\__Temp\$(Platform)-$(Config) + true + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + $(BDS)\bin\default_app.manifest + TorControlPanel_Icon.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + true + PerMonitorV2 + + + $(BDS)\bin\default_app.manifest + TorControlPanel_Icon.ico + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + PerMonitorV2 + + + RELEASE;$(DCC_Define) + 0 + false + 0 + + + 1033 + true + CompanyName=;FileDescription=GUI for Tor Expert Bundle;FileVersion=2.2.11.4;InternalName=;LegalCopyright=Copyright © 2020, abysshint;LegalTrademarks=;OriginalFilename=TorControlPanel.exe;ProductName=Tor Control Panel;ProductVersion=2.2.11.4;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 2 + 11 + 2 + 4 + + + 1033 + true + CompanyName=;FileDescription=GUI for Tor Expert Bundle;FileVersion=2.2.11.4;InternalName=;LegalCopyright=Copyright © 2020, abysshint;LegalTrademarks=;OriginalFilename=TorControlPanel.exe;ProductName=Tor Control Panel;ProductVersion=2.2.11.4;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 2 + 11 + 2 + 4 + + + DEBUG;$(DCC_Define) + false + true + + + 1033 + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + + + 1033 + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + + + MainSource + + +

Tcp + + + + + + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + + + + Delphi.Personality.12 + + + + + TorControlPanel.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + True + True + + + 12 + + + + + diff --git a/source/TorControlPanel.icons.res b/source/TorControlPanel.icons.res new file mode 100644 index 0000000000000000000000000000000000000000..f1c3e6590b16ae955f1cc2623787254e53f70099 GIT binary patch literal 73712 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 literal 0 HcmV?d00001 diff --git a/source/TorControlPanel_Icon.ico b/source/TorControlPanel_Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..44eb8121da558ee29523161c5ea3f80d7070d01c GIT binary patch literal 74457 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 literal 0 HcmV?d00001 diff --git a/source/Translations.ini b/source/Translations.ini new file mode 100644 index 0000000..137adf4 --- /dev/null +++ b/source/Translations.ini @@ -0,0 +1,1496 @@ +[English] +Locale=1033 +UseDefaultCountries=1 +100=Start +101=Starting... +102=Stop +103=Change\nCircuit +104=Default +105=Tor Control Panel +106=%s\nProfile: %s +107=Settings +108=Log +109=Not received +110=Not defined +111=Receiving... +112=Defining... +113=IP address +114=Country +115=Apply +116=Cancel +117=Create.. +118=General +119=Network +120=Filter +121=Server +122=Hidden Service +123=Other +124=Change a circuit that exists more than +125=Interval between attempts to build a circuit +126=Maximum time to build a circuit +127=Port +128=Authentication +129="Cookie-file","Password" +130=Password +131=Generate random password +132=Language +133=Program shortcut on desktop with a new profile +134=Profile +135=sec. +136=Automatically select timeout to build a circuit +137=Don't build circuits from nodes of the same subnet +138=Perform less disk operations +139=Connect on program startup +140=Restart on lost connection with client +141=Minimize to tray on startup +142=Minimize to tray on close +143=Show pop-up messages +144=Only when program minimized +145=Always stay on top +146=Conversion to hashes is enabled +147=My firewall let me connect only to these ports +148=Allowed ports +149=Enable built-in proxy +150=I use a proxy to connect to the Internet +151=Type +152=Host +153=Port +154=User +155=Use Bridges +156=Enter password +157=Comma-separated values +158=IP address or hostname +159=Optional +160=Scroll up when sorting +161=The current vanguards configuration for hidden services requires at least %d favorite entry nodes (Found: %d). \n\nCorrect the problem and continue saving your settings? +162=Mode +163=Hide unused countries +164=This operation requires restarting Tor +165="Disabled","Selected countries","Favorite nodes" +166=Work mode +167=Nickname +168=Contact info +169=Bridge type +170=Exit policy +171=Server +172=Directory +173=Transport +174=Limit memory usage +175=Maximum +176=Limit speed +177=Limit CPU usage +178=Max. cores +179=Average +180=s +181=Port Forwarding Check +182=Try to configure port forwarding automatically +183=Publish server in the relay directory +184=Enable the relay directory mirror +185=Collect directory requests statistics +186=Collect statistics about your role as a hidden-service directory +187=Allow IPv6 traffic to exit +188=Name of your relay +189=e-mail address +190=Name +191=Catalog name +192=Limit the number of connections +193=Connections per circuit +194=Protocol version +195=Introduction points +196=Publish Interval +197=min. +198=Service +199=State +200=Virtual port +201=Save exit node for specified hosts +202=Change after expiry +203=Total +204=Warning: Disabling the directory cache will speed up the server, but your server will never become a Guard. Do you want to continue? +205="Disabled","Relay","Exit relay","Bridge" +206=Normal +207="Default","Reduced","Custom" +208=\n Click here to add addresses\n\n Examples:\n\n Ip: 8.8.8.8\n Site: metrics.torproject.org\n Domain:.torproject.org\n All:. +209=\n Click here to add nodes\n\n Examples:\n\n Ip: 8.8.8.8\n CIDR: 8.8.8.8/24\n Country: RU,DE,US,..\n Hash: ABCD1234CDEF567.. +210=\n Click here to add bridges\n\n Examples:\n\n 8.8.8.8:443\n 8.8.8.8:443 ABCD1234CDEF567..\n obfs4 8.8.8.8:443 ABCD1234CDEF567.. cert=.. iat-mode=..\n\n Note:\n\n Bridges override EntryNodes settings. +211=Speed +212=Download +213=Upload +214=Recieved +215=Sent +216=Server +217=External address +218=Fingerprint +219=Bridge Address +220=Speed graph +221=Creation date +222=Information +223=Client version +224=Profile +225=Built-in proxy +226=Disabled +227=Open profile folder +228=Copy to clipboard +229=Total per session +230=Name,Version,Intro points,Connections +231=Interface,Port,Virtual port +232=Nickname,IP address,,Country,Weight,Ping +233=ID,,Country,Total,Guard,Exit,Alive,∑ Ping +234=B,KB,MB,GB,TB,PB,EB +235=Information +236=Error when parsing the torrc configuration file, see the log for details +237=Connect to the Tor network stopped, the password for control port is incorrect! +238=The Tor executable file does not start. Maybe he:\n\n - is corrupted or is not a Windows application\n - is a 64-bit application, while you have a 32-bit operating system +239=The Tor executable file was not found. Download the Tor Windows Expert Bundle and unpack it into the program directory. Go to the download page right now? +240=Connecting to the Tor network... +241=You are disconnected from the Tor network +242=No devices with port forwarding support were found +243=Result +244=Source,Destination,Purpose +245=Successfully +246=Warning +247=Error +248=The name cannot be empty! +249=This name is already in use by another service! +250=Port list +251=You must add at least one port! +252=This combination of interface and ports already exists! +253=Password for control port changed +254=Error when loading the template: parameters set incorrectly! +255=You cannot use the delimiter character " %s " +256=Save template +257=Enter a template name +258=Circuit is changed +259=The launch suspended, the ports specified in the program settings are already in use!\n\nBusy ports: %s\n\nChange ports to random and continue starting? +260=Not defined +261=You can't use bridges, proxies, and allowed ports in server mode!\n\nDisable these options and continue saving settings? +262=Confirmation +263=Do you really want to delete %s"%s"? +264=All templates +265=Create shortcut +266=Enter profile name +267=All services +268=Do you really want to add:\n\n%s\n\nto the list of "%s nodes"?%s +269=Use only Latin letters and numbers +270=and +271=Tor configuration file +272=Edit panel +273=Service Folder +274=Copy +275=Paste +276=Cut +277=Select All +278=Clear +279=Add +280=Delete +281=Relay Info +282=Status +283=Clear DNS Cache +284=Refresh +285=Change node lists +286=Select Template +287=Exclude +288=Entry +289=Middle +290=Exit +291=Get bridges +292=Write to file +293=Clear at every start +294=Auto scroll +295=Scroll bars +296=Vertical +297=Horizontal +298=Both +299=No +300=Word wrap +301=Hide network addresses +302=Logging level +303=Debug +304=Info +305=Notice +306=Warning +307=Error +308=Open log file +309=Statistics +310=Relay +311=Guard +312=Exit +313=Total by countries +314=Save +315=Load +316=All selected +317=Number of pending client circuits +318=Allow exluded nodes for internal circuits +319=Exit +;new +320=Nickname,IP address,,Country,Weight,Port,Version,Ping,Flags +321=Shown: %d of %d +322=\n List of hashes that define your family\n\n Example:\n\n ABCD1234CDEF567.. +323=Relays +324=Incorrect settings +325=Go to the Tor download page +326=The hidden services protocol version 2 is obsolete, its support was discontinued in version 0.4.6.1 and higher. Do you really want to use this version of the protocol? +327=Circuits +328=Reduce window +329=Purpose +330=Target address +331=Directory request +332=Internal traffic +333=Exit traffic +334=HS Client: dir request +335=HS Client: intro point +336=HS Client: rend point +337=HS Service: dir request +338=HS Service: intro point +339=HS Service: rend point +340=HS vanguards +341=Path bias testing +342=Reachability testing +343=Closing time masking +344=Measure timeout +345=Other purpose +346=Attention! Frequent change of Guard-nodes can help attackers to detect you. Use only if absolutely necessary. %sDo you want to continue? +347=(All countries) +348=(Selected in the filter) +349=Circuits: %d of %d +350=Streams +351=Bind to the exit node +352=Unbind from the exit node +353=Global domain +354=The program settings have been changed! Do you want to apply the changes? +355=About.. +356=%s, version: %s\n\n%s\n\n(Windows GUI Client for Tor Expert Bundle)\n\n%s\n\nWould you like to visit the program page on GitHub? +357=This program is free software and is distributed under the MIT license. +358=Nodes missing from the consensus will be removed from user of lists.\n\nIgnore the list of exlude nodes when scanning? +359=Remove from lists +360=Auto select relays +361=Do you really want to remove:\n\n%s\n\nfrom all node lists?%s +362=Do you really want to remove:\n\n%s\n\nfrom the "%s nodes" list?%s +363=Template "%s" saved successfully +364=Template "%s" loaded successfully +365=Template "%s" deleted successfully +366=template +367=service +368=Select All +369=Unselect All +370=Dir request +371=Dir downloading +372=Dir port testing +373=DNS query +374=Normal traffic +375=Other purpose +376=Internal socket +377=Tor Windows Expert Bundle version 0.4.0.5 and higher is required for the normal operation of the program. +378=Can't find "%s" +379=ms +380=Automatic mode +381=Manual mode +382=Ping measuring +383=Alive nodes detecting +384=Bridge (Guard node) +385=Authority +386=Alive (responds to connections) +387=Accepts IPv6 connections +388=Hidden Service Directory +389=Directory mirror (port: %d) +390=Not recommended version +391=Bad exit node +392=Unknown flag +393=Transports,Handler,Type +394=The list of transports cannot contain empty data +395=Handler file not found, copy it to the transport directory and try again +396=Alive bridges detecting +397=Latest supported version for your operating system: 0.4.4.6 +398=Digits at the beginning of a word are not allowed +399=Transport with this name and type already exists +400=Bridges scanning in progress...\n\nPlease wait until the end and try again. +401=No connection +402=Start of accounting: %s +403=Total for all time +404=Stop scanning.. +405=Do you really want: "%s"\n\nThe selected action cannot be undone! +406=Delete all +407=Determine the external address of the server via OpenDNS +408=Only if TOR cannot detect it by itself +409=Cache IP-cc requests and network scanner results +410=Main +411=Interface +412=Control +413=Theme +414=Allow window to go borders screen +415=Only when the program window is enlarged +416=Remember the position of the enlarged window +417=Hide IPv6 addresses in interface lists +418=Clear previous search query in lists +419=List of bridges +420=Set preferred bridge manually +421=Bridge +422=This setting overrides the selected list of bridges +423=Find... +424="Built-in","Custom" +425=Distribution +426="Any","Https","E-mail","Moat","None" +427=Set external address manually +428=Address +429=IP address or hostname +430=Ports settings +431=Advertised +432=Use directory cache +433=Disable server reachability check +434=Listen on IPv6 addresses +435=Use MyFamily option +436="Enabled","Disabled" +437=Use Vanguards for Hidden Services +438=Change the circuit node +439="Auto","Second only","Third only","Second and third" +440=Select the list to edit +441=List +442="Entry nodes","Middle nodes","Exit nodes","Exclude nodes" +443=Enable +444=Network scanner +445=Enable alive node detection +446=Enable ping measurement +447=Port connection timeout +448=Number of port connection attempts +449=Ping request timeout +450=Number of attempts to measure ping +451=Delay between attempts +452=Number of scan threads +453=Delay between portions +454=Number of scans per serving +455=Automatically detect ping and alive nodes +456=Full scan every +457=Scan nodes without response every +458=Number of partial scans +459=msec. +460=Pluggable transports +461=Transports +462=List of supported transports +463=Handler +464=Enter file name +465=Parameters +466="Client","Server","Combined" +467=Auto select relays +468=Weight +469=Ping +470=pcs. +471=Priority +472="Balanced","Consensus Weight","Ping to Node","Random" +473=Only stable +474=Only countries from the Filter +475=Only unique +476=Only nodes responding to a ping +477=h. +478=Cache operations +479=Refresh countries in network cache +480=Clear server cache +481=Clear unnecessary bridges cache +482=Clear all bridges cache +483=Clear ping requests cache +484=Clear alive nodes cache +485=Clear unused network cache +486=Reset nodes scan schedule +487=Reset traffic counter +488=Start the network scanner +489=New nodes +490=Non-responding nodes +491=Cached Bridges +492=All nodes +493=Ping measurement +494=Alive nodes detection +495=Stop scanning... +496=Reset guard nodes +497=All guard nodes +498=Bridge nodes +499=Selected entry nodes +500=Default entry nodes +501=Web site +502=Telegram channel +503=E-mail +504=Prefer the web version of Telegram +505=Request obfuscated bridges +506=Request IPv6 bridges +507=Not responding to connections +508=Missing in the cache +509=Found in the cache +510=All bridges +511=Splitting the log file +512=Don't split +513=By month +514=By days +515=Select all cells in a row +516=Do not load empty template data +517=Ignore loading parameters from a template outside the filter +518=Replace disabled NodeLists with selected countries +519=Save in template.. +520=Load from template.. +521=Selected countries +522=Favorite nodes +523=Exclude nodes +524=Destroy +525=Sort +526=Filters +527=Circuit +528=Streams +529=All exit circuits +530=Purpose +531=Hide circuits without streams +532=Always show last exit circuit +533=Select exit circuit when it changes +534=Show traffic of circuits +535=Show traffic of streams +536=Show streams detail +537=Update rate +538=High +539=Normal +540=Low +541=Update manually +542=Open in browser +543=Binding to the exit node +544=Source +545=Destination +546=Lists +547=Node type +548="Hash","Nickname","IPv4","IPv6","OR-port","DIR-port","Version","Ping" +549=Enter a request +550=Exit +551=Guard +552=Ordinary +553=Authority +554=Cached Bridge +555=Fast +556=Stable +557=2nd Directory version +558=Hidden service directory +559=Directory mirror +560=Recommended version +561=Alive node +562=Reverse filter conditions +563=Reset filters +564=Select as bridge +565=Cancel the use of bridges.. +566=Consensus weight +567=User query +568=Show flag hints on mouse hover +569=Load relays from cache on startup +570=Prevent selection of unsuitable nodes as a bridge +571=Convert IP, CIDR and country codes to hashes +572=When clearing the incorrect nodes +573=When adding to the node list +574=When deleting from the node list +575=Convert IP addresses +576=Convert CIDR masks +577=Convert country codes +578=Ignore the list of excluded nodes +579=Avoid adding incorrect nodes +580=Disable filters on event +581=Sending a user query +582=Choosing Bridges or Authority nodes +583=Save as Default filter +584=All favorites +585=Incorrect nodes +586=Missing from the consensus +587=Transports Folder +588=Default settings +589=Period +590=Show Graphs +591=Middle nodes without directories + +[Deutsch] +Locale=1031 +100=Starten +101=Starte... +102=Anhalten +103=Kette\nändern +104=Standard +105=Tor Control Panel +106=%s\nProfil: %s +107=Einstellungen +108=Protokoll +109=Nicht erhalten +110=Nicht definiert +111=Empfange... +112=Definiere... +113=IP-Adresse +114=Land +115=Übernehmen +116=Abbrechen +117=Erstellen.. +118=Allgemein +119=Netzwerk +120=Filter +121=Server +122=Versteckte Dienste +123=Sonstiges +124=Die Kette ändern der länger existiert als +125=Intervall zwischen Versuchen, eine Kette aufzubauen +126=Maximale Zeit zum Aufbau einer Kette +127=Port +128=Authentifizierung +129="Cookie-Datei","Passwort" +130=Passwort +131=Zufälliges Passwort erstellen +132=Sprache +133=Desktop-Verknüpfung mit neuem Profil +134=Profile +135=Sek. +136=Automatische Auswahl der Zeit zum Aufbau einer Kette +137=Erstellen Sie keine Ketten von Knoten desselben Subnetzes +138=Weniger Festplattenoperationen ausführen +139=Beim Programmstart verbinden +140=Neustart bei verlorener Verbindung zum Client +141=Beim Starten in die Tray minimieren +142=Beim Schließen in die Tray minimieren +143=Pop-Up Benachrichtungen anzeigen +144=Nur wenn Programm minimiert +145=Immer im Vordergrund +146=Umwandlung in Hashes inklusive +147=Firewall lässt Verbindungen nur zu diesen Ports zu +148=Erlaubte Ports +149=Integrierten Proxy aktivieren +150=Ich verwenden einen Proxy +151=Typ +152=Host +153=Port +154=Benutzer +155=Brücken benutzen +156=Passwort eingeben +157=Kommagetrennte Werte +158=IP-Adresse oder Hostname +159=Optional +160=Beim Sortieren nach oben scrollen +161=Die aktuelle vanguards-Konfiguration für versteckte Dienste erfordert mindestens %d Favoriten Eintrag Knoten (Gefunden: %d). \n\nKorrigieren Sie das Problem und speichern Sie Ihre Einstellungen weiter? +162=Modus +163=Nicht verwendete Länder ausblenden +164=Diese Aktion erfordert einen Neustart von Tor +165="Deaktiviert","Ausgewählte Länder","Favoritenknoten" +166=Modus +167=Spitzname +168=Kontaktinfo +169=Brückentyp +170=Exit-Richtlinie +171=Server +172=Verzeichnis +173=Transport +174=Speichernutzung begrenzen +175=Maximum +176=Geschwindigkeit begrenzen +177=CPU-Nutzung begrenzen +178=Max. Kerne +179=Durchschnitt +180=s +181=Port-Weiterleitung prüfen +182=Versuche Port-Weiterleitung automatisch zu konfigurieren +183=Server im Relay-Verzeichnis veröffentlichen +184=Aktivieren Sie den Relay-Verzeichnisspiegel +185=Statistiken über Verzeichnisabfragen sammeln +186=Statistiken über deine Rolle als Verborgener Dienst sammeln +187=IPv6-Verkehr zum Ausgang zulassen +188=Name deines Relays +189=E-Mailadresse +190=Name +191=Katalogname +192=Anzahl der Verbindungen begrenzen +193=Verbindungen pro Zweig +194=Protokollversion +195=Einstiegspunkte +196=Veröffentlichungsintervall +197=Min. +198=Service +199=Zustand +200=Virtueller Post +201=Exit-Knoten für bestimmte Hosts speichern +202=Ändern nach Ablauf von +203=Gesamt +204=Warnung: Die Deaktivierung des Verzeichnis-Caches wird den Server beschleunigen, aber Ihr Server wird nie zu einem Guard. Möchten Sie fortfahren? +205="Deaktiviert","Relais","Exit-relais","Brücke" +206=Normal +207="Standard","Reduziert","Beliebig" +208=\n Hier klicken um Adressen hinzuzufügen\n\n Beispiele:\n\n Ip: 8.8.8.8\n Seite: metrics.torproject.org\n Domäne:.torproject.org\n Alle:. +209=\n Hier klicken um Knotten hinzuzufügen\n\n Beispiele:\n\n Ip: 8.8.8.8\n CIDR: 8.8.8.8/24\n Land: RU,DE,US,..\n Hash: ABCD1234CDEF567.. +210=\n Hier klicken um Brücken hinzuzufügen\n\n Beispiele:\n\n 8.8.8.8:443\n 8.8.8.8:443 ABCD1234CDEF567..\n obfs4 8.8.8.8:443 ABCD1234CDEF567.. cert=.. iat-mode=..\n\n Hinweis:\n\n Brücken überschreiben die EntryNodes-Einstellungen +211=Geschwindigkeit +212=Download +213=Upload +214=Empfangen +215=Gesendet +216=Server +217=Externe Adresse +218=Fingerabdruck +219=Brücken-Addresse +220=Geschwindigkeits-Diagramm +221=Erstelldatum +222=Information +223=Client version +224=Profil +225=Integrierter Proxy +226=Deaktiviert +227=Profil-Ordner öffnen +228=In Zwischenablage kopieren +229=Gesamt pro Sitzung +230=Name,Version,Einstiegepunkte,Verbindungen +231=Schnittstelle,Port,Virtueller Port +232=Spitzname,IP-adresse,,Land,Gewicht,Ping +233=ID,,Land,Gesamt,Guard,Exit,Alive,∑ Ping +234=B,KB,MB,GB,TB,PB,EB +235=Informationen +236=Fehler beim analyiseren der torcc Konfigurationsdatei. Protokolldatei für mehr Details ansehen +237=Verbinden zum Tor Netzwerk angehalten. Das Passwort für den Kontroll-Port ist falsch! +238=Die ausführbare Tor-Datei lässt sich nicht starten. Vielleicht ist er:\n\n - beschädigt oder ist keine Windows-Anwendung\n - ist eine 64-Bit-Anwendung, während du ein 32-Bit-Betriebssystem hast +239=Die ausführbare Tor-Datei wurde nicht gefunden. Lade das Tor Windows Expert Bundle herunter und entpacke es in das Programmverzeichnis. Jetzt gleich zur Download-Seite gehen? +240=Verbinde zum Tor Netzwerk... +241=Sie haben die Verbindung zum Tor Netzwerk getrennt +242=Kein Gerät das Port-Weiterleitungen unterstützt gefunden +243=Ergebnis +244=Quelle,Ziel,Zweck +245=Erfolgreich +246=Warnung +247=Fehler +248=Der Name darf nicht leer sein! +249=Der Name wird bereits von einem anderen Dienst verwendet! +250=Port-Liste +251=Du musst mindestens einen Port hinzufügen! +252=Die Kombination von Schnittstelle und Port existiert bereits! +253=Passwort für Kontroll-Port geändert +254=Fehler beim Laden der Vorlage: Parameter falsch eingestellt! +255=Sie können das Trennzeichen " %s " nicht verwenden. +256=Vorlage speichern +257=Vorlagenname eingeben +258=Die Kette wird geändert +259=Der Start wird gestoppt. Die in den Programmeinstellungen festgelegten Ports sind bereits in Verwendung!\n\nBelegte Ports: %s\n\nZufällige Ports verwenden und fortfahren? +260=Nicht definiert +261=Du kannst Bridges, Proxies und erlaubte Ports nicht im Server-Modus benutzen!\n\nDiese Optionen deaktivieren und die Einstellungen weiterhin speichern? +262=Bestätigung +263=Möchtest Du %s"%s" wirklich löschen? +264=Alle Vorlagen +265=Verknüpfung erstellen +266=Profilname eingeben +267=Alle Dienste +268=Möchten Sie wirklich:\n\n%s\n\nzur Liste der "%s-Knoten" hinzufügen?%s +269=Nur lateinische Buchstaben und Zahlen verwenden +270=und +271=Tor Konfigurationsdatei +272=Panel bearbeiten +273=Dienst-Ordner +274=Kopieren +275=Einfügen +276=Ausschneiden +277=Alle auswählen +278=Leeren +279=Hinzufügen +280=Löschen +281=Relay-Info +282=Status +283=DNS-Cache leeren +284=Aktualisieren +285=Ändern der Knotenliste +286=Vorlage auswähken +287=Exclude +288=Entry +289=Middle +290=Exit +291=Bridges holen +292=In Datei schreiben +293=Bei jedem Start leeren +294=Automatisch Scrollen +295=Scrollbalken +296=Vertikal +297=Horizontal +298=Beide +299=Nein +300=Zeilenumbruch +301=Netzwerk-Adressen ausblenden +302=Protokollstufe +303=Debug +304=Info +305=Notiz +306=Warnung +307=Fehler +308=Protokolldatei öffnen +309=Statistiken +310=Relay +311=Guard +312=Exit +313=Gesamt nach Ländern +314=Speichern +315=Laden +316=Alle ausgewählt +317=Anzahl der wartenden Client-Ketten +318=Ausgeschlossene Knoten für interne Ketten zulassen +319=Schließen +320=Spitzname,IP-Adresse,,Land,Gewicht,Port,Version,Ping,Flags +321=Gezeigt: %d von %d +322=\n Liste der Hashes, die Ihre Familie definieren\n\n Beispiel:\n\n ABCD1234CDEF567.. +323=Relais +324=Falsche Einstellungen +325=Gehen Sie zur Tor-Download-Seite +326=Das Hidden Services Protocol Version 2 ist veraltet, seine Unterstützung wurde in Version 0.4.6.1 und höher eingestellt. Möchten Sie diese Version des Protokolls wirklich verwenden? +327=Ketten +328=Fenster verkleinern +329=Zweck +330=Zieladresse +331=Dir-Anfrage +332=Interner Verkehr +333=Exit Verkehr +334=HS-Client: Dir-Anfrage +335=HS-Client: Intro-punkt +336=HS-Client: Rend-punkt +337=HS-Dienst: Dir-Anfrage +338=HS-Dienst: Intro-punkt +339=HS-Dienst: Rend-punkt +340=HS vanguards +341=Pfad-Bias-Tests +342=Erreichbarkeitstests +343=Schließzeitmaskierung +344=Timeout-Messung +345=Anderer Zweck +346=Aufmerksamkeit! Häufiges Wechseln der Guard-Knoten kann Angreifern helfen, Sie zu entdecken. Nur verwenden, wenn es absolut notwendig ist. %sMöchten Sie fortfahren? +347=(Alle Länder) +348=(Im Filter ausgewählt) +349=Ketten: %d von %d +350=Ströme +351=Bindung an den Exit-knoten +352=Entbinden vom Exit-knoten +353=Globale Domäne +354=Die Programmeinstellungen wurden geändert! Möchtest du die Änderungen anwenden? +355=Über das Programm... +356=%s, version: %s\n\n%s\n\n(Windows GUI Client für Tor Expert Bundle)\n\n%s\n\nMöchten Sie die Programmseite auf GitHub besuchen? +357=Dieses Programm ist freie Software und wird unter der MIT-Lizenz vertrieben. +358=Knoten, die im Konsens fehlen, werden aus Benutzerlisten entfernt.\n\nIgnore die Liste der Exlude-Knoten beim Scannen? +359=Aus Listen entfernen +360=Automatische Relais-Auswahl +361=Wollen Sie wirklich entfernen:\n\n%s\n\naus allen Knotenlisten?%s +362=Wollen Sie wirklich entfernen:\n\n%s\n\naus der Liste "%s Knoten"?%s +363=Vorlage "%s" erfolgreich gespeichert +364=Vorlage "%s" erfolgreich geladen +365=Vorlage "%s" erfolgreich gelöscht +366=vorlage +367=dienst +368=Alle auswählen +369=Alle abwählen +370=Dir-Anfrage +371=Dir-Download +372=Dir-Port-Tests +373=DNS-Abfrage +374=Normaler Verkehr +375=Anderer Zweck +376=Interner Sockel +377=Tor Windows Expert Bundle Version 0.4.0.5 und höher ist für den normalen Betrieb des Programms erforderlich. +378=Kann "%s" nicht finden +379=ms +380=Automatischer Modus +381=Manueller Modus +382=Ping-Messung +383=Erkennung Alive Knoten +384=Brücke (Guard-Knoten) +385=Behörde +386=Alive (reagiert auf Verbindungen) +387=Akzeptiert IPv6-Verbindungen +388=Versteckte Dienste-Katalog +389=Verzeichnisspiegel (Port: %d) +390=Nicht empfohlene Version +391=Schlechter Exit-Knoten +392=Unbekannte Flagge +393=Transporte,Handler,Typ +394=Die Transportliste darf keine leeren Daten enthalten +395=Handler-Datei nicht gefunden, kopieren Sie sie in das Transportverzeichnis und versuchen Sie es erneut +396=Erkennung lebenden Brücken +397=Neueste unterstützte Version für Ihr Betriebssystem: 0.4.4.6 +398=Ziffern am Wortanfang sind nicht erlaubt +399=Transport mit diesem Namen und Typ ist bereits vorhanden +400=Brücken werden gescannt...\n\nBitte warten Sie bis zum Ende und versuchen Sie es erneut. +401=Keine Verbindung +402=Beginn der zählung: %s +403=Insgesamt für alle Zeiten +404=Hör auf zu scannen.. +405=Möchten Sie wirklich: "%s"\n\nDie ausgewählte Aktion kann nicht rückgängig gemacht werden! +406=Alles löschen +407=Ermitteln Sie die externe Adresse des Servers über OpenDNS +408=Nur wenn TOR es nicht selbst erkennen kann +409=IP-cc Anfragen und Netzwerkscanner-Ergebnisse zwischenspeichern +410=Grundeinstellungen +411=Schnittstelle +412=Kontrolle +413=Thema +414=Erlauben, dass das Fenster über den Bildschirm hinausgeht +415=Nur wenn das Programmfenster vergrößert wird +416=Merken Sie sich die Position des vergrößerten Fensters +417=IPv6-Adressen in Schnittstellenlisten ausblenden +418=Vorherige Suchanfrage in Listen löschen +419=Liste der Brücken +420=Bevorzugte Brücke manuell einstellen +421=Brücke +422=Diese Einstellung überschreibt die ausgewählte Liste der Brücken +423=Finden... +424="Eingebaut","Benutzerdefiniert" +425=Verbreitung +426="Irgendein","Https","E-mail","Moat","Nicht verteilen" +427=Externe Adresse manuell einstellen +428=Adresse +429=IP-Adresse oder Hostname +430=Ports-Einstellungen +431=Angepriesene +432=Verwenden Sie den Verzeichnis-Cache +433=Server-Erreichbarkeitsprüfung deaktivieren +434=Lauschen auf IPv6-Adressen +435=MyFamily-Option verwenden +436="Aktiviert","Deaktiviert" +437=Verwenden Sie Vanguards für versteckte Dienste +438=Ändern Sie den Kettenknoten +439="Automatisch","Nur Zweiter","Nur Dritter","Zweiter und dritter" +440=Wählen Sie die zu bearbeitende Liste aus +441=Liste +442="Entry-Knoten","Middle-Knoten","Exit-Knoten","Exclude-Knoten" +443=Aktiviert +444=Netzwerkscanner +445=Erkennung Alive Knoten aktivieren +446=Ping-Messung aktivieren +447=Timeout der Portverbindung +448=Anzahl der Port-Verbindungsversuche +449=Timeout für Ping-Anfragen +450=Anzahl der Versuche, den Ping zu messen +451=Verzögerung zwischen Versuchen +452=Anzahl der Scanfäden +453=Verzögerung zwischen den Portionen +454=Anzahl der Scans pro Portion +455=Automatische Erkennung von Ping und Alive Knoten +456=Vollständiger Scan alle +457=Scan-Knoten ohne Antwort alle +458=Anzahl der Teilscans +459=msek. +460=Steckbare Transporte +461=Transporte +462=Liste der unterstützten Transporte +463=Handler +464=Dateinamen eingeben +465=Parameters +466="Client","Server","Kombiniert" +467=Automatische Relais-Auswahl +468=Gewicht +469=Ping +470=Stk. +471=Priorität +472="Ausgewogen","Gewicht im Konsens","Ping zum Knoten","Zufällig" +473=Nur stabil +474=Nur Länder aus dem Filter +475=Nur einzigartig +476=Nur Knoten, die auf Ping reagieren +477=Uhr. +478=Cache-Operationen +479=Länder im Netzwerk-Cache aktualisieren +480=Server-Cache Leeren +481=Leeren Sie den Cache für unnötige Brücken +482=Leeren Sie den Cache alle Brücken +483=Leeren Sie den Cache Ping-Abfragen +484=Leeren Sie den Cache von Alive-Knoten +485=Leeren Sie den ungenutzter Netzwerk-Cache +486=Scan-Zeitplan für Knoten zurücksetzen +487=Verkehrszähler zurücksetzen +488=Starten Sie den Netzwerkscanner +489=Neue Knoten +490=Nicht reagierende Knoten +491=Zwischengespeicherte Brücken +492=Alle Knoten +493=Ping-Messung +494=Erkennung Alive Knoten +495=Scannen stoppen... +496=Guard-Knoten zurücksetzen +497=Alle Guard-Knoten +498=Brückenknoten +499=Ausgewählte Entry-knoten +500=Standard Entry-Knoten +501=Webseite +502=Telegramm-Kanal +503=Email +504=Bevorzugen Sie die Webversion von Telegram +505=Verschleierte Brücken abfragen +506=IPv6-Brücken anfordern +507=Reagiert nicht auf Verbindungen +508=Fehlt im Cache +509=Im Cache gefunden +510=Alle Brücken +511=Aufteilen der Protokolldatei +512=Nicht spalten +513=Nach Monat +514=Nach Tag +515=Alle Zellen in einer Zeile markieren +516=Laden Sie keine leeren Vorlagendaten +517=Ladeoptionen aus der Vorlage außerhalb des Filters ignorieren +518=Ersetzen Sie deaktivierte Listen von Knoten durch ausgewählte Länder +519=In Vorlage speichern.. +520=Aus Vorlage laden.. +521=Ausgewählte Länder +522=Favoritenknoten +523=Exclude-Knoten +524=Zerstören +525=Sortieren +526=Filters +527=Kette +528=Ströme +529=Alle Exit-Ketten +530=Zweck +531=Ketten ohne Ströme ausblenden +532=Immer letzten Exit-Kette anzeigen +533=Hervorheben der Exit-kette, wenn Sie sie ändern +534=Verkehrs der Ketten anzeigen +535=Verkehrs der Ströme anzeigen +536=Ströme details anzeigen +537=Aktualisierungsrate +538=Hoch +539=Normal +540=Niedrig +541=Manuell aktualisieren +542=Im Browser öffnen +543=Bindung an den Exit-Knoten +544=Quelle +545=Ziel +546=Listen +547=Knotentyp +548="Hash","Spitzname","IPv4","IPv6","OR-port","DIR-port","Version","Ping" +549=Geben Sie eine Abfrage ein +550=Exit +551=Guard +552=Ordinär +553=Behörde +554=Zwischengespeicherte Brücke +555=Schneller +556=Stabiler +557=Zweite Verzeichnisversion +558=Versteckte Dienste-Katalog +559=Verzeichnisspiegel +560=Empfohlene Version +561=Alive-Knoten +562=Umkehrung der Filterbedingungen +563=Filter zurücksetzen +564=Als Brücke auswählen +565=Brechen Sie die Verwendung von Brücken ab.. +566=Gewicht im Konsens +567=Benutzerabfrage +568=Flaggenhinweise beim Mauszeiger anzeigen +569=Relais beim Start aus dem Cache laden +570=Verhindern Sie die Auswahl ungeeigneter Knoten als Brücke +571=Konvertieren Sie IP, CIDR und Ländercodes in Hashes +572=Beim Löschen der falschen Knoten +573=Beim Hinzufügen zur Knotenliste +574=Beim Löschen aus der Knotenliste +575=IP-Adressen konvertieren +576=CIDR-Masken konvertieren +577=Ländercodes konvertieren +578=Ignorieren Sie die Liste der ausgeschlossenen Knoten +579=Vermeiden Sie das Hinzufügen Falscher Knoten +580=Filter bei Ereignis deaktivieren +581=Senden einer Benutzeranfrage +582=Auswahl von Brücken oder Behördenknoten +583=Als Standardfilter speichern +584=Alle Favoriten +585=Falscher Knoten +586=Die im Konsens fehlen +587=Transporte-Ordner +588=Standard-Einstellungen +589=Zeitraum +590=Grafiken anzeigen +591=Middle-Knoten ohne Verzeichnisse + +au=Australien +at=Österreich +az=Aserbaidschan +ax=Alandinseln +al=Albanien +dz=Algerien +as=Amerikanisch-Samoa +ai=Anguilla +ao=Angola +ad=Andorra +aq=Antarktis +ag=Antigua und Barbuda +ar=Argentinien +am=Armenien +aw=Aruba +af=Afghanistan +bs=Bahamas +bd=Bangladesch +bb=Barbados +bh=Bahrain +bz=Belize +by=Weißrussland +be=Belgien +bj=Benin +bm=Bermuda +bg=Bulgarien +bo=Bolivien +bq=Bonaire +ba=Bosnien und Herzegowina +bw=Botswana +br=Brasilien +io=Britisches Territorium im Indischen Ozean +bn=Brunei +bf=Burkina Faso +bi=Burundi +bt=Bhutan +vu=Vanuatu +va=Vatikanstadt +gb=Großbritannien +hu=Ungarn +ve=Venezuela +vg=Britische Jungferninseln +vi=Amerikanische Jungferninseln +um=Amerikanisch-Ozeanien +tl=Timor-Leste +vn=Vietnam +ga=Gabun +gy=Guyana +ht=Haiti +gm=Gambia +gh=Ghana +gp=Guadeloupe +gt=Guatemala +gf=Französisch-Guayana +gn=Guinea +gw=Guinea-Bissau +de=Deutschland +gg=Guernsey +gi=Gibraltar +hn=Honduras +hk=Hongkong +ps=Palästina +gd=Grenada +gl=Grönland +gr=Griechenland +ge=Georgien +gu=Guam +dk=Dänemark +cd=Demokratische Republik Kongo +je=Jersey +dj=Dschibuti +dm=Dominica +do=Dominikanische Republik +eg=Ägypten +zm=Sambia +zw=Simbabwe +ye=Jemen +il=Israel +in=Indien +id=Indonesien +jo=Jordanien +iq=Irak +ir=Iran +ie=Irland +is=Island +es=Spanien +it=Italien +cv=Kapverden +kz=Kasachstan +kh=Kambodscha +cm=Kamerun +ca=Kanada +qa=Katar +ke=Kenia +cy=Zypern +kg=Kirgistan +ki=Kiribati +cn=China +kp=Nordkorea +cc=Kokosinseln +co=Kolumbien +km=Komoren +cr=Costa Rica +ci=Elfenbeinküste +cu=Kuba +kw=Kuwait +cw=Kyurasao +la=Laos +lv=Lettland +ls=Lesotho +lr=Liberia +lb=Libanon +ly=Libyen +lt=Litauen +li=Liechtenstein +lu=Luxemburg +mu=Mauritius +mr=Mauretanien +mg=Madagaskar +yt=Mayotte +mo=Macau +mk=Nordmazedonien +mw=Malawi +my=Malaysia +ml=Mali +mv=Malediven +mt=Malta +ma=Marokko +mq=Martinique +mh=Marshall-Inseln +mx=Mexiko +fm=Mikronesien +mz=Mosambik +md=Moldau +mc=Monaco +mn=Mongolei +ms=Montserrat +mm=Myanmar +na=Namibia +nr=Nauru +np=Nepal +ne=Niger +ng=Nigeria +nl=Niederlande +ni=Nikaragua +nu=Niue +nz=Neuseeland +nc=Neukaledonien +no=Norwegen +ae=Vereinigte Arabische Emirate +om=Oman +bv=Bouvetinsel +im=Isle of Man +nf=Norfolkinsel +cx=Weihnachtsinsel +ky=Kaimaninseln +ck=Cookinseln +pn=Pitcairn +sh=St. Helena +pk=Pakistan +pw=Palau +pa=Panama +pg=Papua-Neuguinea +py=Paraguay +pe=Peru +pl=Polen +pt=Portugal +pr=Puerto Rico +cg=Kongo +kr=Südkorea +re=Réunion +ru=Russland +rw=Ruanda +ro=Rumänien +eh=Westsahara +sv=El Salvador +ws=Samoa +sm=San Marino +st=São Tomé und Príncipe +sa=Saudi-Arabien +sz=Swasiland +mp=Nördliche Marianen +sc=Seychellen +bl=St. Barthélemy +sn=Senegal +mf=St. Martin +pm=St. Pierre und Miquelon +vc=St. Vincent und die Grenadinen +kn=Saint Kitts und Nevis +lc=St. Lucia +rs=Serbien +sg=Singapur +sx=Sint Maarten +sy=Syrien +sk=Slowakei +si=Slowenien +sb=Solomon-Inseln +so=Somalia +sd=Sudan +sr=Suriname +us=USA +sl=Sierra Leone +tj=Tadschikistan +tw=Taiwan +th=Thailand +tz=Tansania +tc=Turks- und Caicosinseln +tg=Togo +tk=Tokelau +to=Tonga +tt=Trinidad und Tobago +tv=Tuwalu +tn=Tunesien +tm=Turkmenistan +tr=Türkei +ug=Uganda +uz=Usbekistan +ua=Ukraine +wf=Wallis und Futuna +uy=Uruguay +fo=Färöer-Inseln +fj=Fidschi +ph=Philippinen +fi=Finnland +fk=Falklandinseln +fr=Frankreich +pf=Französisch-Polynesien +tf=Französische Süd- und Antarktisgebiete +hm=Heard- und McDonald-Inseln +hr=Kroatien +cf=Zentralafrikanische Republik +td=Tschad +me=Montenegro +cz=Tschechien +cl=Chile +ch=Schweiz +se=Schweden +sj=Svalbard und Jan Mayen +lk=Sri Lanka +ec=Ecuador +gq=Äquatorialguinea +er=Eritrea +ee=Estland +et=Äthiopien +za=Südafrika +gs=Südgeorgien und die Südlichen Sandwichinseln +ss=Südsudan +jm=Jamaika +jp=Japan +eu=Europäische Union +??=Unbekannte + +[DefaultCountries] +au=Australia +at=Austria +az=Azerbaijan +ax=Aland Islands +al=Albania +dz=Algeria +as=American Samoa +ai=Anguilla +ao=Angola +ad=Andorra +aq=Antarctica +ag=Antigua and Barbuda +ar=Argentina +am=Armenia +aw=Aruba +af=Afghanistan +bs=Bahamas +bd=Bangladesh +bb=Barbados +bh=Bahrain +bz=Belize +by=Belarus +be=Belgium +bj=Benin +bm=Bermuda +bg=Bulgaria +bo=Bolivia +bq=Bonaire, Sint Eustatius, and Saba +ba=Bosnia and Herzegovina +bw=Botswana +br=Brazil +io=British Indian Ocean Territory +bn=Brunei +bf=Burkina Faso +bi=Burundi +bt=Bhutan +vu=Vanuatu +va=Vatican City +gb=United Kingdom +hu=Hungary +ve=Venezuela +vg=British Virgin Islands +vi=U.S. Virgin Islands +um=U.S. Minor Outlying Islands +tl=East Timor +vn=Vietnam +ga=Gabon +gy=Guyana +ht=Haiti +gm=Gambia +gh=Ghana +gp=Guadeloupe +gt=Guatemala +gf=French Guiana +gn=Guinea +gw=Guinea-Bissau +de=Germany +gg=Guernsey +gi=Gibraltar +hn=Honduras +hk=Hong Kong +ps=Palestine +gd=Grenada +gl=Greenland +gr=Greece +ge=Georgia +gu=Guam +dk=Denmark +cd=Democratic Republic of the Congo +je=Jersey +dj=Djibouti +dm=Dominica +do=Dominican Republic +eg=Egypt +zm=Zambia +zw=Zimbabwe +ye=Yemen +il=Israel +in=India +id=Indonesia +jo=Jordan +iq=Iraq +ir=Iran +ie=Ireland +is=Iceland +es=Spain +it=Italy +cv=Cabo Verde +kz=Kazakhstan +kh=Cambodia +cm=Cameroon +ca=Canada +qa=Qatar +ke=Kenya +cy=Cyprus +kg=Kyrgyzstan +ki=Kiribati +cn=China +kp=North Korea +cc=Cocos Islands +co=Colombia +km=Comoros +cr=Costa Rica +ci=Ivory Coast +cu=Cuba +kw=Kuwait +cw=Kyurasao +la=Laos +lv=Latvia +ls=Lesotho +lr=Liberia +lb=Lebanon +ly=Libya +lt=Lithuania +li=Liechtenstein +lu=Luxembourg +mu=Mauritius +mr=Mauritania +mg=Madagascar +yt=Mayotte +mo=Macao +mk=North Macedonia +mw=Malawi +my=Malaysia +ml=Mali +mv=Maldives +mt=Malta +ma=Morocco +mq=Martinique +mh=Marshall Islands +mx=Mexico +fm=Federated States of Micronesia +mz=Mozambique +md=Moldova +mc=Monaco +mn=Mongolia +ms=Montserrat +mm=Myanmar +na=Namibia +nr=Nauru +np=Nepal +ne=Niger +ng=Nigeria +nl=Netherlands +ni=Nicaragua +nu=Niue +nz=New Zealand +nc=New Caledonia +no=Norway +ae=United Arab Emirates +om=Oman +bv=Bouvet Island +im=Isle of Man +nf=Norfolk Island +cx=Christmas Island +ky=Cayman Islands +ck=Cook Islands +pn=Pitcairn Islands +sh=Saint Helena +pk=Pakistan +pw=Palau +pa=Panama +pg=Papua New Guinea +py=Paraguay +pe=Peru +pl=Poland +pt=Portugal +pr=Puerto Rico +cg=Congo Republic +kr=South Korea +re=Réunion +ru=Russia +rw=Rwanda +ro=Romania +eh=Western Sahara +sv=El Salvador +ws=Samoa +sm=San Marino +st=Sao Tome and Principe +sa=Saudi Arabia +sz=Eswatini +mp=Northern Mariana Islands +sc=Seychelles +bl=Saint Barthélemy +sn=Senegal +mf=Saint Martin +pm=Saint Pierre and Miquelon +vc=Saint Vincent and the Grenadines +kn=St Kitts and Nevis +lc=Saint Lucia +rs=Serbia +sg=Singapore +sx=Sint Maarten +sy=Syria +sk=Slovakia +si=Slovenia +sb=Solomon Islands +so=Somalia +sd=Sudan +sr=Suriname +us=United States +sl=Sierra Leone +tj=Tajikistan +tw=Taiwan +th=Thailand +tz=Tanzania +tc=Turks and Caicos Islands +tg=Togo +tk=Tokelau +to=Tonga +tt=Trinidad and Tobago +tv=Tuvalu +tn=Tunisia +tm=Turkmenistan +tr=Turkey +ug=Uganda +uz=Uzbekistan +ua=Ukraine +wf=Wallis and Futuna +uy=Uruguay +fo=Faroe Islands +fj=Fiji +ph=Philippines +fi=Finland +fk=Falkland Islands +fr=France +pf=French Polynesia +tf=French Southern Territories +hm=Heard Island and McDonald Islands +hr=Croatia +cf=Central African Republic +td=Chad +me=Montenegro +cz=Czechia +cl=Chile +ch=Switzerland +se=Sweden +sj=Svalbard and Jan Mayen +lk=Sri Lanka +ec=Ecuador +gq=Equatorial Guinea +er=Eritrea +ee=Estonia +et=Ethiopia +za=South Africa +gs=South Georgia and the South Sandwich Islands +ss=South Sudan +jm=Jamaica +jp=Japan +eu=European Union +??=Unknown