Compare commits

..
Author SHA1 Message Date
vladimir.kuznetsov 94b8f80141 chore: fix deploy workflow 2024-12-02 14:25:14 +07:00
Pokamest Nikak 9d96b1cd13 Update Readme 2024-11-29 22:10:35 +00:00
Anton Sosnin 1d721ffb9a SteamDeck/OS installation fix (#1270) 2024-11-27 09:55:23 +07:00
Nethius 2130131a9d bugfix: added scroll on page with services list (#1262)
* added scroll on page with services list

* fixed margins on PageSetupWizardApiServicesList
2024-11-26 11:41:17 +07:00
Aftershock669 e0b091b474 Update readme (#1267) 2024-11-25 23:51:46 +07:00
Nethius 8547de82ea bump xcode-version for macos build (#1249) 2024-11-14 10:58:04 +07:00
Nethius aa871bd1c9 feature: added country selection on home page drawer (#1215) 2024-11-12 13:22:34 +07:00
albexk 23806e1def chore: bump version to 4.8.2.4 (#1240) 2024-11-08 15:22:16 +07:00
Nethius 31867993ce chore: minor fixes (#1235) 2024-11-06 12:57:39 +07:00
pokamest 7b7a922d92 Merge pull request #1226 from amnezia-vpn/fix/android-awg-connection
Fix connection check for AWG/WG
2024-11-05 12:25:49 +01:00
pokamest 09bd958d8d Merge pull request #1231 from amnezia-vpn/fix/android-network-state
Add CHANGE_NETWORK_STATE permission for all Android versions
2024-11-05 12:25:11 +01:00
albexk 576e2226fe fix(android): add CHANGE_NETWORK_STATE permission for all Android versions 2024-11-03 16:11:23 +03:00
albexk 1533270e4e Fix connection check for AWG/WG 2024-11-02 00:54:24 +03:00
33 changed files with 233 additions and 163 deletions

No files matched your search

+6 -2
View File
@@ -217,7 +217,11 @@ jobs:
export QT_BIN_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/ios/bin"
export QT_MACOS_ROOT_DIR="${{ runner.temp }}/Qt/${{ env.QT_VERSION }}/macos"
export PATH=$PATH:~/go/bin
sh deploy/build_ios.sh
sh deploy/build_ios.sh | \
sed -e '/-Xcc -DPROD_AGW_PUBLIC_KEY/,/-Xcc/ { /-Xcc/!d; }' -e '/-Xcc -DPROD_AGW_PUBLIC_KEY/d' | \
sed -e '/-Xcc -DDEV_AGW_PUBLIC_KEY/,/-Xcc/ { /-Xcc/!d; }' -e '/-Xcc -DDEV_AGW_PUBLIC_KEY/d' | \
sed -e '/-DPROD_AGW_PUBLIC_KEY/,/-D/ { /-D/!d; }' -e '/-DPROD_AGW_PUBLIC_KEY/d' | \
sed -e '/-DDEV_AGW_PUBLIC_KEY/,/-D/ { /-D/!d; }' -e '/-DDEV_AGW_PUBLIC_KEY/d'
env:
IOS_TRUST_CERT_BASE64: ${{ secrets.IOS_TRUST_CERT_BASE64 }}
IOS_SIGNING_CERT_BASE64: ${{ secrets.IOS_SIGNING_CERT_BASE64 }}
@@ -256,7 +260,7 @@ jobs:
- name: 'Setup xcode'
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '14.3.1'
xcode-version: '15.4.0'
- name: 'Install Qt'
uses: jurplel/install-qt-action@v3
+2 -2
View File
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR)
set(PROJECT AmneziaVPN)
project(${PROJECT} VERSION 4.8.2.3
project(${PROJECT} VERSION 4.8.2.4
DESCRIPTION "AmneziaVPN"
HOMEPAGE_URL "https://amnezia.org/"
)
@@ -11,7 +11,7 @@ string(TIMESTAMP CURRENT_DATE "%Y-%m-%d")
set(RELEASE_DATE "${CURRENT_DATE}")
set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH})
set(APP_ANDROID_VERSION_CODE 2069)
set(APP_ANDROID_VERSION_CODE 2071)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
set(MZ_PLATFORM_NAME "linux")
+12 -11
View File
@@ -4,21 +4,21 @@
[![Build Status](https://github.com/amnezia-vpn/amnezia-client/actions/workflows/deploy.yml/badge.svg?branch=dev)](https://github.com/amnezia-vpn/amnezia-client/actions/workflows/deploy.yml?query=branch:dev)
[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/amnezia-vpn/amnezia-client)
Amnezia is an open-source VPN client, with a key feature that enables you to deploy your own VPN server on your server.
[Amnezia](https://amnezia.org) is an open-source VPN client, with a key feature that enables you to deploy your own VPN server on your server.
![Image](https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/uipic4.png)
[![Image](https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/uipic4.png)](https://amnezia.org)
<br>
### [Website](https://amnezia.org) | [Alt website link](https://storage.googleapis.com/kldscp/amnezia.org) | [Documentation](https://docs.amnezia.org) | [Troubleshooting](https://docs.amnezia.org/troubleshooting)
<a href="https://amnezia.org/downloads"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/download.png" width="150" style="max-width: 100%;"></a>
<a href="https://play.google.com/store/search?q=amnezia+vpn&c=apps"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/play.png" width="150" style="max-width: 100%;"></a>
<a href="https://apps.apple.com/us/app/amneziavpn/id1600529900"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/apl.png" width="150" style="max-width: 100%;"></a>
> [!TIP]
> If the [Amnezia website](https://amnezia.org) is blocked in your region, you can use an [Alternative website link](https://storage.googleapis.com/kldscp/amnezia.org).
[Alternative download link (mirror)](https://storage.googleapis.com/kldscp/amnezia.org/downloads)
<a href="https://amnezia.org/downloads"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/download-website.svg" width="150" style="max-width: 100%; margin-right: 10px"></a>
<a href="https://storage.googleapis.com/kldscp/amnezia.org/downloads"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/download-alt.svg" width="150" style="max-width: 100%;"></a>
[All releases](https://github.com/amnezia-vpn/amnezia-client/releases)
<br>
<br/>
<a href="https://www.testiny.io"><img src="https://github.com/amnezia-vpn/amnezia-client/blob/dev/metadata/img-readme/testiny.png" height="28px"></a>
@@ -33,7 +33,8 @@ Amnezia is an open-source VPN client, with a key feature that enables you to dep
## Links
- [https://amnezia.org](https://amnezia.org) - project website | [Alternative link (mirror)](https://storage.googleapis.com/kldscp/amnezia.org)
- [https://amnezia.org](https://amnezia.org) - Project website | [Alternative link (mirror)](https://storage.googleapis.com/kldscp/amnezia.org)
- [https://docs.amnezia.org](https://docs.amnezia.org) - Documentation
- [https://www.reddit.com/r/AmneziaVPN](https://www.reddit.com/r/AmneziaVPN) - Reddit
- [https://t.me/amnezia_vpn_en](https://t.me/amnezia_vpn_en) - Telegram support channel (English)
- [https://t.me/amnezia_vpn_ir](https://t.me/amnezia_vpn_ir) - Telegram support channel (Farsi)
@@ -182,8 +183,8 @@ Patreon: [https://www.patreon.com/amneziavpn](https://www.patreon.com/amneziavpn
Bitcoin: bc1q26eevjcg9j0wuyywd2e3uc9cs2w58lpkpjxq6p <br>
USDT BEP20: 0x6abD576765a826f87D1D95183438f9408C901bE4 <br>
USDT TRC20: TELAitazF1MZGmiNjTcnxDjEiH5oe7LC9d <br>
XMR: 48spms39jt1L2L5vyw2RQW6CXD6odUd4jFu19GZcDyKKQV9U88wsJVjSbL4CfRys37jVMdoaWVPSvezCQPhHXUW5UKLqUp3
XMR: 48spms39jt1L2L5vyw2RQW6CXD6odUd4jFu19GZcDyKKQV9U88wsJVjSbL4CfRys37jVMdoaWVPSvezCQPhHXUW5UKLqUp3 <br>
TON: UQDpU1CyKRmg7L8mNScKk9FRc2SlESuI7N-Hby4nX-CcVmns
## Acknowledgments
This project is tested with BrowserStack.
+1 -1
View File
@@ -20,7 +20,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<!-- To request network state -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
@@ -1,11 +1,12 @@
package org.amnezia.vpn.protocol.wireguard
import android.net.VpnService.Builder
import java.io.IOException
import java.util.Locale
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext
import kotlinx.coroutines.launch
import org.amnezia.awg.GoBackend
import org.amnezia.vpn.protocol.Protocol
import org.amnezia.vpn.protocol.ProtocolState.CONNECTED
@@ -27,6 +28,8 @@ open class Wireguard : Protocol() {
private var tunnelHandle: Int = -1
protected open val ifName: String = "amn0"
private lateinit var scope: CoroutineScope
private var statusJob: Job? = null
override val statistics: Statistics
get() {
@@ -49,46 +52,17 @@ open class Wireguard : Protocol() {
override fun internalInit() {
if (!isInitialized) loadSharedLibrary(context, "wg-go")
if (this::scope.isInitialized) {
scope.cancel()
}
scope = CoroutineScope(Dispatchers.IO)
}
override suspend fun startVpn(config: JSONObject, vpnBuilder: Builder, protect: (Int) -> Boolean) {
val wireguardConfig = parseConfig(config)
val startTime = System.currentTimeMillis()
start(wireguardConfig, vpnBuilder, protect)
waitForConnection(startTime)
state.value = CONNECTED
}
private suspend fun waitForConnection(startTime: Long) {
Log.d(TAG, "Waiting for connection")
withContext(Dispatchers.IO) {
val time = String.format(Locale.ROOT,"%.3f", startTime / 1000.0)
try {
delay(1000)
var log = getLogcat(time)
Log.v(TAG, "First waiting log: $log")
// check that there is a connection log,
// to avoid infinite connection
if (!log.contains("Attaching to interface")) {
Log.w(TAG, "Logs do not contain a connection log")
return@withContext
}
while (!log.contains("Received handshake response")) {
delay(1000)
log = getLogcat(time)
}
} catch (e: IOException) {
Log.e(TAG, "Failed to get logcat: $e")
}
}
}
private fun getLogcat(time: String): String =
ProcessBuilder("logcat", "--buffer=main", "--format=raw", "*:S AmneziaWG/awg0", "-t", time)
.redirectErrorStream(true)
.start()
.inputStream.reader().readText()
protected open fun parseConfig(config: JSONObject): WireguardConfig {
val configData = config.getJSONObject("wireguard_config_data")
return WireguardConfig.build {
@@ -178,6 +152,43 @@ open class Wireguard : Protocol() {
tunnelHandle = -1
throw VpnStartException("Protect VPN interface: permission not granted or revoked")
}
launchStatusJob()
}
private fun launchStatusJob() {
Log.d(TAG, "Launch status job")
statusJob = scope.launch {
while (true) {
val lastHandshake = getLastHandshake()
Log.v(TAG, "lastHandshake=$lastHandshake")
if (lastHandshake == 0L) {
delay(1000)
continue
}
if (lastHandshake == -2L || lastHandshake > 0L) state.value = CONNECTED
else if (lastHandshake == -1L) state.value = DISCONNECTED
statusJob = null
break
}
}
}
private fun getLastHandshake(): Long {
if (tunnelHandle == -1) {
Log.e(TAG, "Trying to get config of a non-existent tunnel")
return -1
}
val config = GoBackend.awgGetConfig(tunnelHandle)
if (config == null) {
Log.e(TAG, "Failed to get tunnel config")
return -2
}
val lastHandshake = config.lines().find { it.startsWith("last_handshake_time_sec=") }?.substring(24)?.toLong()
if (lastHandshake == null) {
Log.e(TAG, "Failed to get last_handshake_time_sec")
return -2
}
return lastHandshake
}
override fun stopVpn() {
@@ -185,6 +196,8 @@ open class Wireguard : Protocol() {
Log.w(TAG, "Tunnel already down")
return
}
statusJob?.cancel()
statusJob = null
val handleToClose = tunnelHandle
tunnelHandle = -1
GoBackend.awgTurnOff(handleToClose)
@@ -770,12 +770,6 @@ ErrorCode ServerController::isUserInSudo(const ServerCredentials &credentials, D
if (!stdOut.contains("sudo"))
return ErrorCode::ServerUserNotInSudo;
if (stdOut.contains("command not found"))
return ErrorCode::SudoPackageIsNotPreinstalled;
if (stdOut.contains("sudoers"))
return ErrorCode::ServerUserNotListedInSudoers;
if (stdOut.contains("password is required"))
return ErrorCode::ServerUserPasswordRequired;
return error;
}
-3
View File
@@ -56,9 +56,6 @@ namespace amnezia
ServerCancelInstallation = 204,
ServerUserNotInSudo = 205,
ServerPacketManagerError = 206,
SudoPackageIsNotPreinstalled = 207,
ServerUserNotListedInSudoers = 208,
ServerUserPasswordRequired = 209,
// Ssh connection errors
SshRequestDeniedError = 300,
-3
View File
@@ -21,9 +21,6 @@ QString errorString(ErrorCode code) {
case(ErrorCode::ServerCancelInstallation): errorMessage = QObject::tr("Installation canceled by user"); break;
case(ErrorCode::ServerUserNotInSudo): errorMessage = QObject::tr("The user does not have permission to use sudo"); break;
case(ErrorCode::ServerPacketManagerError): errorMessage = QObject::tr("Server error: Packet manager error"); break;
case(ErrorCode::SudoPackageIsNotPreinstalled): errorMessage = QObject::tr("The sudo package is not pre-installed"); break;
case(ErrorCode::ServerUserNotListedInSudoers): errorMessage = QObject::tr("The user is not listed in sudoers"); break;
case(ErrorCode::ServerUserPasswordRequired): errorMessage = QObject::tr("The user's password is required"); break;
// Libssh errors
case(ErrorCode::SshRequestDeniedError): errorMessage = QObject::tr("SSH request was denied"); break;
+1 -2
View File
@@ -1,3 +1,2 @@
echo $LC_MESSAGES | grep -qE "en_US.UTF-8|C.UTF-8" || export LC_MESSAGES=C.UTF-8;\
CUR_USER=$(whoami);\
groups $CUR_USER | grep sudo && sudo -nu $CUR_USER sudo -n uname > /dev/null
groups $CUR_USER
@@ -848,7 +848,6 @@ bool InstallController::updateServiceFromApi(const int serverIndex, const QStrin
newServerConfig.insert(configKey::apiConfig, newApiConfig);
newServerConfig.insert(configKey::authData, authData);
newServerConfig.insert(config_key::crc, serverConfig.value(config_key::crc));
m_serversModel->editServer(newServerConfig, serverIndex);
if (reloadServiceConfig) {
@@ -84,7 +84,7 @@ DrawerType2 {
Layout.topMargin: 16
text: qsTr("Share")
imageSource: "qrc:/images/controls/share-2.svg"
leftImageSource: "qrc:/images/controls/share-2.svg"
KeyNavigation.tab: copyConfigTextButton
@@ -120,7 +120,7 @@ DrawerType2 {
borderWidth: 1
text: qsTr("Copy")
imageSource: "qrc:/images/controls/copy.svg"
leftImageSource: "qrc:/images/controls/copy.svg"
Keys.onReturnPressed: { copyConfigTextButton.clicked() }
Keys.onEnterPressed: { copyConfigTextButton.clicked() }
@@ -143,7 +143,7 @@ DrawerType2 {
borderWidth: 1
text: qsTr("Copy config string")
imageSource: "qrc:/images/controls/copy.svg"
leftImageSource: "qrc:/images/controls/copy.svg"
KeyNavigation.tab: showSettingsButton
}
+14 -8
View File
@@ -22,9 +22,10 @@ Button {
property int borderWidth: 0
property int borderFocusedWidth: 1
property string imageSource
property string leftImageSource
property string rightImageSource
property string leftImageColor: textColor
property string leftImageColor
property bool changeLeftImageSize: true
property bool squareLeftSide: false
@@ -127,18 +128,23 @@ Button {
anchors.centerIn: parent
Image {
Layout.preferredHeight: 20
Layout.preferredWidth: 20
source: root.imageSource
visible: root.imageSource === "" ? false : true
id: leftImage
source: root.leftImageSource
visible: root.leftImageSource === "" ? false : true
layer {
enabled: true
enabled: leftImageColor !== "" ? true : false
effect: ColorOverlay {
color: leftImageColor
}
}
Component.onCompleted: {
if (root.changeLeftImageSize) {
leftImage.Layout.preferredHeight = 20
leftImage.Layout.preferredWidth = 20
}
}
}
ButtonTextType {
@@ -14,7 +14,7 @@ Popup {
visible: false
Overlay.modal: Rectangle {
color: Qt.rgba(14/255, 14/255, 17/255, 0.8)
color: AmneziaStyle.color.translucentMidnightBlack
}
background: Rectangle {
+1 -1
View File
@@ -19,7 +19,7 @@ RadioButton {
property string textColor: AmneziaStyle.color.midnightBlack
property string pressedBorderColor: Qt.rgba(251/255, 178/255, 106/255, 0.3)
property string pressedBorderColor: AmneziaStyle.color.softGoldenApricot
property string selectedBorderColor: AmneziaStyle.color.goldenApricot
property string defaultBodredColor: AmneziaStyle.color.transparent
property int borderWidth: 0
@@ -145,6 +145,7 @@ Button {
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
enabled: root.enabled
onEntered: {
backgroundRect.color = root.hoveredColor
+1 -1
View File
@@ -92,7 +92,7 @@ Item {
id: background
anchors.fill: parent
color: root.isCollapsed ? AmneziaStyle.color.transparent : Qt.rgba(14/255, 14/255, 17/255, 0.8)
color: root.isCollapsed ? AmneziaStyle.color.transparent : AmneziaStyle.color.translucentMidnightBlack
Behavior on color {
PropertyAnimation { duration: 200 }
+1 -1
View File
@@ -24,7 +24,7 @@ Popup {
Overlay.modal: Rectangle {
visible: root.closeButtonVisible
color: Qt.rgba(14/255, 14/255, 17/255, 0.8)
color: AmneziaStyle.color.translucentMidnightBlack
}
onOpened: {
@@ -183,7 +183,7 @@ Item {
focusPolicy: Qt.NoFocus
text: root.buttonText
imageSource: root.buttonImageSource
leftImageSource: root.buttonImageSource
anchors.top: content.top
anchors.bottom: content.bottom
@@ -14,7 +14,7 @@ Popup {
visible: false
Overlay.modal: Rectangle {
color: Qt.rgba(14/255, 14/255, 17/255, 0.8)
color: AmneziaStyle.color.translucentMidnightBlack
}
background: Rectangle {
@@ -22,5 +22,9 @@ QtObject {
readonly property color sheerWhite: Qt.rgba(1, 1, 1, 0.12)
readonly property color translucentWhite: Qt.rgba(1, 1, 1, 0.08)
readonly property color barelyTranslucentWhite: Qt.rgba(1, 1, 1, 0.05)
readonly property color translucentMidnightBlack: Qt.rgba(14/255, 14/255, 17/255, 0.8)
readonly property color softGoldenApricot: Qt.rgba(251/255, 178/255, 106/255, 0.3)
readonly property color mistyGray: Qt.rgba(215/255, 216/255, 219/255, 0.8)
readonly property color cloudyGray: Qt.rgba(215/255, 216/255, 219/255, 0.65)
}
}
+33 -12
View File
@@ -98,7 +98,6 @@ PageType {
pressedColor: AmneziaStyle.color.sheerWhite
disabledColor: AmneziaStyle.color.mutedGray
textColor: AmneziaStyle.color.mutedGray
leftImageColor: AmneziaStyle.color.transparent
borderWidth: 0
buttonTextLabel.lineHeight: 20
@@ -110,7 +109,7 @@ PageType {
text: isSplitTunnelingEnabled ? qsTr("Split tunneling enabled") : qsTr("Split tunneling disabled")
imageSource: isSplitTunnelingEnabled ? "qrc:/images/controls/split-tunneling.svg" : ""
leftImageSource: isSplitTunnelingEnabled ? "qrc:/images/controls/split-tunneling.svg" : ""
rightImageSource: "qrc:/images/controls/chevron-down.svg"
Keys.onEnterPressed: splitTunnelingButton.clicked()
@@ -166,6 +165,7 @@ PageType {
anchors.left: parent.left
anchors.right: parent.right
spacing: 0
Component.onCompleted: {
drawer.collapsedHeight = collapsed.implicitHeight
@@ -267,18 +267,39 @@ PageType {
RowLayout {
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
Layout.bottomMargin: drawer.isCollapsed ? 44 : ServersModel.isDefaultServerFromApi ? 89 : 44
Layout.topMargin: 8
Layout.bottomMargin: drawer.isCollapsed ? 44 : ServersModel.isDefaultServerFromApi ? 61 : 16
spacing: 0
Image {
Layout.rightMargin: 8
visible: source !== ""
source: ServersModel.defaultServerImagePathCollapsed
}
BasicButtonType {
enabled: (ServersModel.defaultServerImagePathCollapsed !== "") && drawer.isCollapsed
hoverEnabled: enabled
implicitHeight: 36
leftPadding: 16
rightPadding: 16
defaultColor: AmneziaStyle.color.transparent
hoveredColor: AmneziaStyle.color.translucentWhite
pressedColor: AmneziaStyle.color.sheerWhite
disabledColor: AmneziaStyle.color.transparent
textColor: AmneziaStyle.color.mutedGray
buttonTextLabel.lineHeight: 16
buttonTextLabel.font.pixelSize: 13
buttonTextLabel.font.weight: 400
LabelTextType {
id: collapsedServerMenuDescription
text: drawer.isCollapsed ? ServersModel.defaultServerDescriptionCollapsed : ServersModel.defaultServerDescriptionExpanded
leftImageSource: ServersModel.defaultServerImagePathCollapsed
changeLeftImageSize: false
rightImageSource: hoverEnabled ? "qrc:/images/controls/chevron-down.svg" : ""
onClicked: {
ServersModel.processedIndex = ServersModel.defaultIndex
PageController.goToPage(PageEnum.PageSettingsServerInfo)
}
}
}
}
@@ -316,8 +337,8 @@ PageType {
rootButtonImageColor: AmneziaStyle.color.midnightBlack
rootButtonBackgroundColor: AmneziaStyle.color.paleGray
rootButtonBackgroundHoveredColor: Qt.rgba(215, 216, 219, 0.8)
rootButtonBackgroundPressedColor: Qt.rgba(215, 216, 219, 0.65)
rootButtonBackgroundHoveredColor: AmneziaStyle.color.mistyGray
rootButtonBackgroundPressedColor: AmneziaStyle.color.cloudyGray
rootButtonHoveredBorderColor: AmneziaStyle.color.transparent
rootButtonDefaultBorderColor: AmneziaStyle.color.transparent
rootButtonTextTopMargin: 8
@@ -132,8 +132,8 @@ PageType {
implicitHeight: 32
defaultColor: "transparent"
hoveredColor: Qt.rgba(1, 1, 1, 0.08)
pressedColor: Qt.rgba(1, 1, 1, 0.12)
hoveredColor: AmneziaStyle.color.translucentWhite
pressedColor: AmneziaStyle.color.sheerWhite
textColor: AmneziaStyle.color.vibrantRed
text: qsTr("Reload API config")
@@ -172,8 +172,8 @@ PageType {
implicitHeight: 32
defaultColor: "transparent"
hoveredColor: Qt.rgba(1, 1, 1, 0.08)
pressedColor: Qt.rgba(1, 1, 1, 0.12)
hoveredColor: AmneziaStyle.color.translucentWhite
pressedColor: AmneziaStyle.color.sheerWhite
textColor: AmneziaStyle.color.vibrantRed
text: qsTr("Remove from application")
@@ -16,83 +16,82 @@ PageType {
defaultActiveFocusItem: focusItem
FlickableType {
id: fl
ColumnLayout {
id: header
anchors.top: parent.top
anchors.bottom: parent.bottom
contentHeight: content.height
anchors.left: parent.left
anchors.right: parent.right
ColumnLayout {
id: content
spacing: 0
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
Item {
id: focusItem
KeyNavigation.tab: backButton
}
spacing: 0
Item {
id: focusItem
KeyNavigation.tab: backButton
}
BackButtonType {
id: backButton
Layout.topMargin: 20
BackButtonType {
id: backButton
Layout.topMargin: 20
// KeyNavigation.tab: fileButton.rightButton
}
}
HeaderType {
Layout.fillWidth: true
Layout.topMargin: 8
Layout.rightMargin: 16
Layout.leftMargin: 16
Layout.bottomMargin: 32
HeaderType {
Layout.fillWidth: true
Layout.topMargin: 8
Layout.rightMargin: 16
Layout.leftMargin: 16
Layout.bottomMargin: 16
headerText: qsTr("VPN by Amnezia")
descriptionText: qsTr("Choose a VPN service that suits your needs.")
}
headerText: qsTr("VPN by Amnezia")
descriptionText: qsTr("Choose a VPN service that suits your needs.")
}
}
ListView {
id: containers
width: parent.width
height: containers.contentItem.height
spacing: 16
ListView {
id: servicesListView
anchors.top: header.bottom
anchors.right: parent.right
anchors.left: parent.left
anchors.bottom: parent.bottom
anchors.topMargin: 16
spacing: 0
currentIndex: 1
interactive: false
model: ApiServicesModel
currentIndex: 1
clip: true
model: ApiServicesModel
delegate: Item {
implicitWidth: containers.width
implicitHeight: delegateContent.implicitHeight
ScrollBar.vertical: ScrollBar {}
ColumnLayout {
id: delegateContent
delegate: Item {
implicitWidth: servicesListView.width
implicitHeight: delegateContent.implicitHeight
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
ColumnLayout {
id: delegateContent
CardWithIconsType {
id: card
anchors.fill: parent
Layout.fillWidth: true
Layout.rightMargin: 16
Layout.leftMargin: 16
CardWithIconsType {
id: card
headerText: name
bodyText: cardDescription
footerText: price
Layout.fillWidth: true
Layout.rightMargin: 16
Layout.leftMargin: 16
Layout.bottomMargin: 16
rightImageSource: "qrc:/images/controls/chevron-right.svg"
headerText: name
bodyText: cardDescription
footerText: price
onClicked: {
if (isServiceAvailable) {
ApiServicesModel.setServiceIndex(index)
PageController.goToPage(PageEnum.PageSetupWizardApiServiceInfo)
}
}
rightImageSource: "qrc:/images/controls/chevron-right.svg"
enabled: isServiceAvailable
onClicked: {
if (isServiceAvailable) {
ApiServicesModel.setServiceIndex(index)
PageController.goToPage(PageEnum.PageSetupWizardApiServiceInfo)
}
}
}
@@ -47,7 +47,6 @@ PageType {
KeyNavigation.tab: textKey.textField
}
HeaderType {
property bool isVisible: SettingsController.getInstallationUuid() !== "" || PageController.isStartPageVisible()
+1 -1
View File
@@ -573,7 +573,7 @@ PageType {
visible: accessTypeSelector.currentIndex === 0
text: qsTr("Share")
imageSource: "qrc:/images/controls/share-2.svg"
leftImageSource: "qrc:/images/controls/share-2.svg"
Keys.onTabPressed: lastItemTabClicked(focusItem)
+1 -1
View File
@@ -135,7 +135,7 @@ PageType {
Layout.topMargin: 40
text: qsTr("Share")
imageSource: "qrc:/images/controls/share-2.svg"
leftImageSource: "qrc:/images/controls/share-2.svg"
Keys.onTabPressed: lastItemTabClicked(focusItem)
+10
View File
@@ -19,6 +19,11 @@ date > $LOG_FILE
echo "Script started" >> $LOG_FILE
sudo killall -9 $APP_NAME 2>> $LOG_FILE
if command -v steamos-readonly &> /dev/null; then
sudo steamos-readonly disable >> $LOG_FILE
echo "steamos-readonly disabled" >> $LOG_FILE
fi
if sudo systemctl is-active --quiet $APP_NAME; then
sudo systemctl stop $APP_NAME >> $LOG_FILE
sudo systemctl disable $APP_NAME >> $LOG_FILE
@@ -42,6 +47,11 @@ sudo chmod 555 /usr/share/applications/$APP_NAME.desktop >> $LOG_FILE
echo "user desktop creation loop ended" >> $LOG_FILE
if command -v steamos-readonly &> /dev/null; then
sudo steamos-readonly enable >> $LOG_FILE
echo "steamos-readonly enabled" >> $LOG_FILE
fi
date >> $LOG_FILE
echo "Service status:" >> $LOG_FILE
sudo systemctl status $APP_NAME >> $LOG_FILE
+10
View File
@@ -13,6 +13,11 @@ date >> $LOG_FILE
echo "Uninstall Script started" >> $LOG_FILE
sudo killall -9 $APP_NAME 2>> $LOG_FILE
if command -v steamos-readonly &> /dev/null; then
sudo steamos-readonly disable >> $LOG_FILE
echo "steamos-readonly disabled" >> $LOG_FILE
fi
ls /opt/AmneziaVPN/client/lib/* | while IFS=: read -r dir; do
sudo unlink $dir >> $LOG_FILE
done
@@ -59,6 +64,11 @@ if test -f /usr/share/pixmaps/$APP_NAME.png; then
fi
if command -v steamos-readonly &> /dev/null; then
sudo steamos-readonly enable >> $LOG_FILE
echo "steamos-readonly enabled" >> $LOG_FILE
fi
date >> $LOG_FILE
echo "Service after uninstall status:" >> $LOG_FILE
sudo systemctl status $APP_NAME >> $LOG_FILE
Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

+8
View File
@@ -0,0 +1,8 @@
<svg width="208" height="56" viewBox="0 0 208 56" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="208" height="56" rx="16" fill="#FBB36A"/>
<path d="M70.206 13.04H75.466C76.386 13.04 77.226 13.1867 77.986 13.48C78.746 13.7733 79.3927 14.2133 79.926 14.8C80.4593 15.3733 80.8727 16.1 81.166 16.98C81.4593 17.8467 81.606 18.86 81.606 20.02C81.606 21.18 81.4593 22.2 81.166 23.08C80.8727 23.9467 80.4593 24.6733 79.926 25.26C79.3927 25.8333 78.746 26.2667 77.986 26.56C77.226 26.8533 76.386 27 75.466 27H70.206V13.04ZM75.466 24.3C76.3727 24.3 77.086 24.0467 77.606 23.54C78.126 23.0333 78.386 22.22 78.386 21.1V18.94C78.386 17.82 78.126 17.0067 77.606 16.5C77.086 15.9933 76.3727 15.74 75.466 15.74H73.246V24.3H75.466ZM88.2513 27.24C87.478 27.24 86.7847 27.1133 86.1713 26.86C85.5713 26.6067 85.058 26.24 84.6313 25.76C84.218 25.28 83.898 24.7 83.6713 24.02C83.4447 23.34 83.3313 22.58 83.3313 21.74C83.3313 20.9 83.4447 20.14 83.6713 19.46C83.898 18.78 84.218 18.2067 84.6313 17.74C85.058 17.26 85.5713 16.8933 86.1713 16.64C86.7847 16.3867 87.478 16.26 88.2513 16.26C89.0247 16.26 89.7113 16.3867 90.3113 16.64C90.9247 16.8933 91.438 17.26 91.8513 17.74C92.278 18.2067 92.6047 18.78 92.8313 19.46C93.058 20.14 93.1713 20.9 93.1713 21.74C93.1713 22.58 93.058 23.34 92.8313 24.02C92.6047 24.7 92.278 25.28 91.8513 25.76C91.438 26.24 90.9247 26.6067 90.3113 26.86C89.7113 27.1133 89.0247 27.24 88.2513 27.24ZM88.2513 24.9C88.838 24.9 89.2913 24.72 89.6113 24.36C89.9313 24 90.0913 23.4867 90.0913 22.82V20.68C90.0913 20.0133 89.9313 19.5 89.6113 19.14C89.2913 18.78 88.838 18.6 88.2513 18.6C87.6647 18.6 87.2113 18.78 86.8913 19.14C86.5713 19.5 86.4113 20.0133 86.4113 20.68V22.82C86.4113 23.4867 86.5713 24 86.8913 24.36C87.2113 24.72 87.6647 24.9 88.2513 24.9ZM94.0851 16.5H96.9451L97.9651 20.74L98.6851 23.94H98.7651L99.6051 20.74L100.805 16.5H103.505L104.725 20.74L105.585 23.94H105.665L106.385 20.74L107.405 16.5H110.145L107.245 27H104.145L102.865 22.56L102.125 19.84H102.065L101.345 22.56L100.065 27H97.0251L94.0851 16.5ZM111.901 27V16.5H114.861V18.28H114.981C115.168 17.7333 115.495 17.26 115.961 16.86C116.428 16.46 117.075 16.26 117.901 16.26C118.981 16.26 119.795 16.62 120.341 17.34C120.901 18.06 121.181 19.0867 121.181 20.42V27H118.221V20.66C118.221 19.98 118.115 19.48 117.901 19.16C117.688 18.8267 117.308 18.66 116.761 18.66C116.521 18.66 116.288 18.6933 116.061 18.76C115.835 18.8133 115.628 18.9067 115.441 19.04C115.268 19.1733 115.128 19.34 115.021 19.54C114.915 19.7267 114.861 19.9467 114.861 20.2V27H111.901ZM126.756 27C125.742 27 124.996 26.7533 124.516 26.26C124.049 25.7667 123.816 25.0533 123.816 24.12V12.2H126.776V24.7H128.096V27H126.756ZM134.13 27.24C133.357 27.24 132.664 27.1133 132.05 26.86C131.45 26.6067 130.937 26.24 130.51 25.76C130.097 25.28 129.777 24.7 129.55 24.02C129.324 23.34 129.21 22.58 129.21 21.74C129.21 20.9 129.324 20.14 129.55 19.46C129.777 18.78 130.097 18.2067 130.51 17.74C130.937 17.26 131.45 16.8933 132.05 16.64C132.664 16.3867 133.357 16.26 134.13 16.26C134.904 16.26 135.59 16.3867 136.19 16.64C136.804 16.8933 137.317 17.26 137.73 17.74C138.157 18.2067 138.484 18.78 138.71 19.46C138.937 20.14 139.05 20.9 139.05 21.74C139.05 22.58 138.937 23.34 138.71 24.02C138.484 24.7 138.157 25.28 137.73 25.76C137.317 26.24 136.804 26.6067 136.19 26.86C135.59 27.1133 134.904 27.24 134.13 27.24ZM134.13 24.9C134.717 24.9 135.17 24.72 135.49 24.36C135.81 24 135.97 23.4867 135.97 22.82V20.68C135.97 20.0133 135.81 19.5 135.49 19.14C135.17 18.78 134.717 18.6 134.13 18.6C133.544 18.6 133.09 18.78 132.77 19.14C132.45 19.5 132.29 20.0133 132.29 20.68V22.82C132.29 23.4867 132.45 24 132.77 24.36C133.09 24.72 133.544 24.9 134.13 24.9ZM148.919 27C148.386 27 147.939 26.8333 147.579 26.5C147.233 26.1667 147.013 25.72 146.919 25.16H146.799C146.639 25.84 146.286 26.36 145.739 26.72C145.193 27.0667 144.519 27.24 143.719 27.24C142.666 27.24 141.859 26.96 141.299 26.4C140.739 25.84 140.459 25.1 140.459 24.18C140.459 23.0733 140.859 22.2533 141.659 21.72C142.473 21.1733 143.573 20.9 144.959 20.9H146.619V20.24C146.619 19.7333 146.486 19.3333 146.219 19.04C145.953 18.7333 145.506 18.58 144.879 18.58C144.293 18.58 143.826 18.7067 143.479 18.96C143.133 19.2133 142.846 19.5 142.619 19.82L140.859 18.26C141.286 17.6333 141.819 17.1467 142.459 16.8C143.113 16.44 143.993 16.26 145.099 16.26C146.593 16.26 147.713 16.5867 148.459 17.24C149.206 17.8933 149.579 18.8467 149.579 20.1V24.7H150.559V27H148.919ZM144.819 25.18C145.313 25.18 145.733 25.0733 146.079 24.86C146.439 24.6467 146.619 24.3 146.619 23.82V22.58H145.179C144.019 22.58 143.439 22.9733 143.439 23.76V24.06C143.439 24.4467 143.559 24.7333 143.799 24.92C144.039 25.0933 144.379 25.18 144.819 25.18ZM158.986 25.24H158.886C158.806 25.52 158.679 25.7867 158.506 26.04C158.333 26.28 158.119 26.4933 157.866 26.68C157.626 26.8533 157.346 26.9867 157.026 27.08C156.719 27.1867 156.399 27.24 156.066 27.24C154.733 27.24 153.726 26.7733 153.046 25.84C152.366 24.8933 152.026 23.5267 152.026 21.74C152.026 19.9533 152.366 18.5933 153.046 17.66C153.726 16.7267 154.733 16.26 156.066 16.26C156.746 16.26 157.346 16.4467 157.866 16.82C158.399 17.1933 1Line truncated
<path opacity="0.8" d="M76.084 45L75.484 43.008H72.688L72.088 45H70.24L73 36.624H75.256L77.98 45H76.084ZM74.104 38.28H74.044L73.12 41.46H75.04L74.104 38.28ZM80.8068 45C80.1988 45 79.7508 44.852 79.4628 44.556C79.1828 44.26 79.0428 43.832 79.0428 43.272V36.12H80.8188V43.62H81.6108V45H80.8068ZM84.8251 45C84.2091 45 83.7411 44.844 83.4211 44.532C83.1091 44.22 82.9531 43.764 82.9531 43.164V40.08H82.0651V38.7H82.5091C82.7491 38.7 82.9131 38.644 83.0011 38.532C83.0891 38.412 83.1331 38.244 83.1331 38.028V36.996H84.7291V38.7H85.9771V40.08H84.7291V43.62H85.8811V45H84.8251ZM89.7919 45.144C89.3119 45.144 88.8839 45.068 88.5079 44.916C88.1319 44.756 87.8119 44.536 87.5479 44.256C87.2919 43.968 87.0959 43.62 86.9599 43.212C86.8319 42.804 86.7679 42.348 86.7679 41.844C86.7679 41.348 86.8319 40.9 86.9599 40.5C87.0879 40.092 87.2759 39.744 87.5239 39.456C87.7799 39.168 88.0919 38.948 88.4599 38.796C88.8279 38.636 89.2479 38.556 89.7199 38.556C90.2399 38.556 90.6839 38.644 91.0519 38.82C91.4279 38.996 91.7319 39.232 91.9639 39.528C92.2039 39.824 92.3759 40.168 92.4799 40.56C92.5919 40.944 92.6479 41.348 92.6479 41.772V42.3H88.6039V42.396C88.6039 42.812 88.7159 43.144 88.9399 43.392C89.1639 43.632 89.5159 43.752 89.9959 43.752C90.3639 43.752 90.6639 43.68 90.8959 43.536C91.1279 43.384 91.3439 43.204 91.5439 42.996L92.4319 44.1C92.1519 44.428 91.7839 44.684 91.3279 44.868C90.8799 45.052 90.3679 45.144 89.7919 45.144ZM89.7559 39.864C89.3959 39.864 89.1119 39.984 88.9039 40.224C88.7039 40.456 88.6039 40.768 88.6039 41.16V41.256H90.8119V41.148C90.8119 40.764 90.7239 40.456 90.5479 40.224C90.3799 39.984 90.1159 39.864 89.7559 39.864ZM93.9022 45V38.7H95.6782V40.068H95.7382C95.7702 39.892 95.8262 39.724 95.9062 39.564C95.9862 39.396 96.0902 39.248 96.2182 39.12C96.3542 38.992 96.5142 38.892 96.6982 38.82C96.8822 38.74 97.0982 38.7 97.3462 38.7H97.6582V40.356H97.2142C96.6942 40.356 96.3062 40.424 96.0502 40.56C95.8022 40.696 95.6782 40.948 95.6782 41.316V45H93.9022ZM98.7538 45V38.7H100.53V39.768H100.602C100.714 39.44 100.91 39.156 101.19 38.916C101.47 38.676 101.858 38.556 102.354 38.556C103.002 38.556 103.49 38.772 103.818 39.204C104.154 39.636 104.322 40.252 104.322 41.052V45H102.546V41.196C102.546 40.788 102.482 40.488 102.354 40.296C102.226 40.096 101.998 39.996 101.67 39.996C101.526 39.996 101.386 40.016 101.25 40.056C101.114 40.088 100.99 40.144 100.878 40.224C100.774 40.304 100.69 40.404 100.626 40.524C100.562 40.636 100.53 40.768 100.53 40.92V45H98.7538ZM110.558 45C110.238 45 109.97 44.9 109.754 44.7C109.546 44.5 109.414 44.232 109.358 43.896H109.286C109.19 44.304 108.978 44.616 108.65 44.832C108.322 45.04 107.918 45.144 107.438 45.144C106.806 45.144 106.322 44.976 105.986 44.64C105.65 44.304 105.482 43.86 105.482 43.308C105.482 42.644 105.722 42.152 106.202 41.832C106.69 41.504 107.35 41.34 108.182 41.34H109.178V40.944C109.178 40.64 109.098 40.4 108.938 40.224C108.778 40.04 108.51 39.948 108.134 39.948C107.782 39.948 107.502 40.024 107.294 40.176C107.086 40.328 106.914 40.5 106.778 40.692L105.722 39.756C105.978 39.38 106.298 39.088 106.682 38.88C107.074 38.664 107.602 38.556 108.266 38.556C109.162 38.556 109.834 38.752 110.282 39.144C110.73 39.536 110.954 40.108 110.954 40.86V43.62H111.542V45H110.558ZM108.098 43.908C108.394 43.908 108.646 43.844 108.854 43.716C109.07 43.588 109.178 43.38 109.178 43.092V42.348H108.314C107.618 42.348 107.27 42.584 107.27 43.056V43.236C107.27 43.468 107.342 43.64 107.486 43.752C107.63 43.856 107.834 43.908 108.098 43.908ZM114.872 45C114.256 45 113.788 44.844 113.468 44.532C113.156 44.22 113 43.764 113 43.164V40.08H112.112V38.7H112.556C112.796 38.7 112.96 38.644 113.048 38.532C113.136 38.412 113.18 38.244 113.18 38.028V36.996H114.776V38.7H116.024V40.08H114.776V43.62H115.928V45H114.872ZM118.146 38.028C117.786 38.028 117.522 37.948 117.354 37.788C117.194 37.62 117.114 37.408 117.114 37.152V36.888C117.114 36.632 117.194 36.424 117.354 36.264C117.522 36.096 117.786 36.012 118.146 36.012C118.506 36.012 118.766 36.096 118.926 36.264C119.094 36.424 119.178 36.632 119.178 36.888V37.152C119.178 37.408 119.094 37.62 118.926 37.788C118.766 37.948 118.506 38.028 118.146 38.028ZM117.258 38.7H119.034V45H117.258V38.7ZM122.035 45L119.971 38.7H121.723L122.503 41.244L123.091 43.524H123.187L123.775 41.244L124.531 38.7H126.211L124.147 45H122.035ZM129.683 45.144C129.203 45.144 128.775 45.068 128.399 44.916C128.023 44.756 127.703 44.536 127.439 44.256C127.183 43.968 126.987 43.62 126.851 43.212C126.723 42.804 126.659 42.348 126.659 41.844C126.659 41.348 126.723 40.9 126.851 40.5C126.979 40.092 127.167 39.744 127.415 39.456C127.671 39.168 127.983 38.948 128.351 38.796C128.719 38.636 129.139 38.556 129.611 38.556C130.131 38.556 130.575 38.644 130.943 38.82C131.319 38.996 131.623 39.232 131.855 39.528C132.095 39.824 132.267 40.168 132.371 40.56C132.483 40.944 132.539 41.348 132.539 41.772V42.3H128.495V42.396C128.495 42.812 128.607 43.144 128.831 43.392C129.055 43.632 129.407 43.752 129.887 43.752C130.255 43.752 130.5Line truncated
<path d="M40.625 19.125H46.875V25.375" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M35.418 30.5833L46.8763 19.125" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M43.75 29.5417V35.7917C43.75 36.3442 43.5305 36.8741 43.1398 37.2648C42.7491 37.6555 42.2192 37.875 41.6667 37.875H30.2083C29.6558 37.875 29.1259 37.6555 28.7352 37.2648C28.3445 36.8741 28.125 36.3442 28.125 35.7917V24.3333C28.125 23.7808 28.3445 23.2509 28.7352 22.8602C29.1259 22.4695 29.6558 22.25 30.2083 22.25H36.4583" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

+8
View File
@@ -0,0 +1,8 @@
<svg width="208" height="56" viewBox="0 0 208 56" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="208" height="56" rx="16" fill="#FBB36A"/>
<path d="M70.206 13.04H75.466C76.386 13.04 77.226 13.1867 77.986 13.48C78.746 13.7733 79.3927 14.2133 79.926 14.8C80.4593 15.3733 80.8727 16.1 81.166 16.98C81.4593 17.8467 81.606 18.86 81.606 20.02C81.606 21.18 81.4593 22.2 81.166 23.08C80.8727 23.9467 80.4593 24.6733 79.926 25.26C79.3927 25.8333 78.746 26.2667 77.986 26.56C77.226 26.8533 76.386 27 75.466 27H70.206V13.04ZM75.466 24.3C76.3727 24.3 77.086 24.0467 77.606 23.54C78.126 23.0333 78.386 22.22 78.386 21.1V18.94C78.386 17.82 78.126 17.0067 77.606 16.5C77.086 15.9933 76.3727 15.74 75.466 15.74H73.246V24.3H75.466ZM88.2513 27.24C87.478 27.24 86.7847 27.1133 86.1713 26.86C85.5713 26.6067 85.058 26.24 84.6313 25.76C84.218 25.28 83.898 24.7 83.6713 24.02C83.4447 23.34 83.3313 22.58 83.3313 21.74C83.3313 20.9 83.4447 20.14 83.6713 19.46C83.898 18.78 84.218 18.2067 84.6313 17.74C85.058 17.26 85.5713 16.8933 86.1713 16.64C86.7847 16.3867 87.478 16.26 88.2513 16.26C89.0247 16.26 89.7113 16.3867 90.3113 16.64C90.9247 16.8933 91.438 17.26 91.8513 17.74C92.278 18.2067 92.6047 18.78 92.8313 19.46C93.058 20.14 93.1713 20.9 93.1713 21.74C93.1713 22.58 93.058 23.34 92.8313 24.02C92.6047 24.7 92.278 25.28 91.8513 25.76C91.438 26.24 90.9247 26.6067 90.3113 26.86C89.7113 27.1133 89.0247 27.24 88.2513 27.24ZM88.2513 24.9C88.838 24.9 89.2913 24.72 89.6113 24.36C89.9313 24 90.0913 23.4867 90.0913 22.82V20.68C90.0913 20.0133 89.9313 19.5 89.6113 19.14C89.2913 18.78 88.838 18.6 88.2513 18.6C87.6647 18.6 87.2113 18.78 86.8913 19.14C86.5713 19.5 86.4113 20.0133 86.4113 20.68V22.82C86.4113 23.4867 86.5713 24 86.8913 24.36C87.2113 24.72 87.6647 24.9 88.2513 24.9ZM94.0851 16.5H96.9451L97.9651 20.74L98.6851 23.94H98.7651L99.6051 20.74L100.805 16.5H103.505L104.725 20.74L105.585 23.94H105.665L106.385 20.74L107.405 16.5H110.145L107.245 27H104.145L102.865 22.56L102.125 19.84H102.065L101.345 22.56L100.065 27H97.0251L94.0851 16.5ZM111.901 27V16.5H114.861V18.28H114.981C115.168 17.7333 115.495 17.26 115.961 16.86C116.428 16.46 117.075 16.26 117.901 16.26C118.981 16.26 119.795 16.62 120.341 17.34C120.901 18.06 121.181 19.0867 121.181 20.42V27H118.221V20.66C118.221 19.98 118.115 19.48 117.901 19.16C117.688 18.8267 117.308 18.66 116.761 18.66C116.521 18.66 116.288 18.6933 116.061 18.76C115.835 18.8133 115.628 18.9067 115.441 19.04C115.268 19.1733 115.128 19.34 115.021 19.54C114.915 19.7267 114.861 19.9467 114.861 20.2V27H111.901ZM126.756 27C125.742 27 124.996 26.7533 124.516 26.26C124.049 25.7667 123.816 25.0533 123.816 24.12V12.2H126.776V24.7H128.096V27H126.756ZM134.13 27.24C133.357 27.24 132.664 27.1133 132.05 26.86C131.45 26.6067 130.937 26.24 130.51 25.76C130.097 25.28 129.777 24.7 129.55 24.02C129.324 23.34 129.21 22.58 129.21 21.74C129.21 20.9 129.324 20.14 129.55 19.46C129.777 18.78 130.097 18.2067 130.51 17.74C130.937 17.26 131.45 16.8933 132.05 16.64C132.664 16.3867 133.357 16.26 134.13 16.26C134.904 16.26 135.59 16.3867 136.19 16.64C136.804 16.8933 137.317 17.26 137.73 17.74C138.157 18.2067 138.484 18.78 138.71 19.46C138.937 20.14 139.05 20.9 139.05 21.74C139.05 22.58 138.937 23.34 138.71 24.02C138.484 24.7 138.157 25.28 137.73 25.76C137.317 26.24 136.804 26.6067 136.19 26.86C135.59 27.1133 134.904 27.24 134.13 27.24ZM134.13 24.9C134.717 24.9 135.17 24.72 135.49 24.36C135.81 24 135.97 23.4867 135.97 22.82V20.68C135.97 20.0133 135.81 19.5 135.49 19.14C135.17 18.78 134.717 18.6 134.13 18.6C133.544 18.6 133.09 18.78 132.77 19.14C132.45 19.5 132.29 20.0133 132.29 20.68V22.82C132.29 23.4867 132.45 24 132.77 24.36C133.09 24.72 133.544 24.9 134.13 24.9ZM148.919 27C148.386 27 147.939 26.8333 147.579 26.5C147.233 26.1667 147.013 25.72 146.919 25.16H146.799C146.639 25.84 146.286 26.36 145.739 26.72C145.193 27.0667 144.519 27.24 143.719 27.24C142.666 27.24 141.859 26.96 141.299 26.4C140.739 25.84 140.459 25.1 140.459 24.18C140.459 23.0733 140.859 22.2533 141.659 21.72C142.473 21.1733 143.573 20.9 144.959 20.9H146.619V20.24C146.619 19.7333 146.486 19.3333 146.219 19.04C145.953 18.7333 145.506 18.58 144.879 18.58C144.293 18.58 143.826 18.7067 143.479 18.96C143.133 19.2133 142.846 19.5 142.619 19.82L140.859 18.26C141.286 17.6333 141.819 17.1467 142.459 16.8C143.113 16.44 143.993 16.26 145.099 16.26C146.593 16.26 147.713 16.5867 148.459 17.24C149.206 17.8933 149.579 18.8467 149.579 20.1V24.7H150.559V27H148.919ZM144.819 25.18C145.313 25.18 145.733 25.0733 146.079 24.86C146.439 24.6467 146.619 24.3 146.619 23.82V22.58H145.179C144.019 22.58 143.439 22.9733 143.439 23.76V24.06C143.439 24.4467 143.559 24.7333 143.799 24.92C144.039 25.0933 144.379 25.18 144.819 25.18ZM158.986 25.24H158.886C158.806 25.52 158.679 25.7867 158.506 26.04C158.333 26.28 158.119 26.4933 157.866 26.68C157.626 26.8533 157.346 26.9867 157.026 27.08C156.719 27.1867 156.399 27.24 156.066 27.24C154.733 27.24 153.726 26.7733 153.046 25.84C152.366 24.8933 152.026 23.5267 152.026 21.74C152.026 19.9533 152.366 18.5933 153.046 17.66C153.726 16.7267 154.733 16.26 156.066 16.26C156.746 16.26 157.346 16.4467 157.866 16.82C158.399 17.1933 1Line truncated
<path opacity="0.8" d="M70.924 45V36.624H76.48V38.244H72.748V39.96H75.928V41.568H72.748V45H70.924ZM77.4843 45V38.7H79.2603V40.068H79.3203C79.3523 39.892 79.4083 39.724 79.4883 39.564C79.5683 39.396 79.6723 39.248 79.8003 39.12C79.9363 38.992 80.0963 38.892 80.2803 38.82C80.4643 38.74 80.6803 38.7 80.9283 38.7H81.2403V40.356H80.7963C80.2763 40.356 79.8883 40.424 79.6323 40.56C79.3843 40.696 79.2603 40.948 79.2603 41.316V45H77.4843ZM84.8332 45.144C84.3692 45.144 83.9532 45.068 83.5852 44.916C83.2252 44.764 82.9172 44.544 82.6612 44.256C82.4132 43.968 82.2212 43.62 82.0852 43.212C81.9492 42.804 81.8812 42.348 81.8812 41.844C81.8812 41.34 81.9492 40.884 82.0852 40.476C82.2212 40.068 82.4132 39.724 82.6612 39.444C82.9172 39.156 83.2252 38.936 83.5852 38.784C83.9532 38.632 84.3692 38.556 84.8332 38.556C85.2972 38.556 85.7092 38.632 86.0692 38.784C86.4372 38.936 86.7452 39.156 86.9932 39.444C87.2492 39.724 87.4452 40.068 87.5812 40.476C87.7172 40.884 87.7852 41.34 87.7852 41.844C87.7852 42.348 87.7172 42.804 87.5812 43.212C87.4452 43.62 87.2492 43.968 86.9932 44.256C86.7452 44.544 86.4372 44.764 86.0692 44.916C85.7092 45.068 85.2972 45.144 84.8332 45.144ZM84.8332 43.74C85.1852 43.74 85.4572 43.632 85.6492 43.416C85.8412 43.2 85.9372 42.892 85.9372 42.492V41.208C85.9372 40.808 85.8412 40.5 85.6492 40.284C85.4572 40.068 85.1852 39.96 84.8332 39.96C84.4812 39.96 84.2092 40.068 84.0172 40.284C83.8252 40.5 83.7292 40.808 83.7292 41.208V42.492C83.7292 42.892 83.8252 43.2 84.0172 43.416C84.2092 43.632 84.4812 43.74 84.8332 43.74ZM89.0507 45V38.7H90.8267V39.768H90.8987C91.0107 39.432 91.2027 39.148 91.4747 38.916C91.7467 38.676 92.1187 38.556 92.5907 38.556C93.0227 38.556 93.3907 38.664 93.6947 38.88C93.9987 39.096 94.2187 39.412 94.3547 39.828H94.3907C94.4467 39.652 94.5307 39.488 94.6427 39.336C94.7627 39.176 94.9067 39.04 95.0747 38.928C95.2427 38.816 95.4307 38.728 95.6387 38.664C95.8467 38.592 96.0707 38.556 96.3107 38.556C96.9187 38.556 97.3827 38.772 97.7027 39.204C98.0307 39.636 98.1947 40.252 98.1947 41.052V45H96.4187V41.196C96.4187 40.396 96.1307 39.996 95.5547 39.996C95.2907 39.996 95.0507 40.072 94.8347 40.224C94.6187 40.376 94.5107 40.608 94.5107 40.92V45H92.7347V41.196C92.7347 40.396 92.4467 39.996 91.8707 39.996C91.7427 39.996 91.6147 40.016 91.4867 40.056C91.3667 40.088 91.2547 40.144 91.1507 40.224C91.0547 40.304 90.9747 40.404 90.9107 40.524C90.8547 40.636 90.8267 40.768 90.8267 40.92V45H89.0507ZM102.009 38.7H103.725L104.337 41.244L104.769 43.164H104.817L105.321 41.244L106.041 38.7H107.661L108.393 41.244L108.909 43.164H108.957L109.389 41.244L110.001 38.7H111.645L109.905 45H108.045L107.277 42.336L106.833 40.704H106.797L106.365 42.336L105.597 45H103.773L102.009 38.7ZM115.21 45.144C114.73 45.144 114.302 45.068 113.926 44.916C113.55 44.756 113.23 44.536 112.966 44.256C112.71 43.968 112.514 43.62 112.378 43.212C112.25 42.804 112.186 42.348 112.186 41.844C112.186 41.348 112.25 40.9 112.378 40.5C112.506 40.092 112.694 39.744 112.942 39.456C113.198 39.168 113.51 38.948 113.878 38.796C114.246 38.636 114.666 38.556 115.138 38.556C115.658 38.556 116.102 38.644 116.47 38.82C116.846 38.996 117.15 39.232 117.382 39.528C117.622 39.824 117.794 40.168 117.898 40.56C118.01 40.944 118.066 41.348 118.066 41.772V42.3H114.022V42.396C114.022 42.812 114.134 43.144 114.358 43.392C114.582 43.632 114.934 43.752 115.414 43.752C115.782 43.752 116.082 43.68 116.314 43.536C116.546 43.384 116.762 43.204 116.962 42.996L117.85 44.1C117.57 44.428 117.202 44.684 116.746 44.868C116.298 45.052 115.786 45.144 115.21 45.144ZM115.174 39.864C114.814 39.864 114.53 39.984 114.322 40.224C114.122 40.456 114.022 40.768 114.022 41.16V41.256H116.23V41.148C116.23 40.764 116.142 40.456 115.966 40.224C115.798 39.984 115.534 39.864 115.174 39.864ZM119.32 36.12H121.096V39.756H121.156C121.244 39.404 121.444 39.116 121.756 38.892C122.076 38.668 122.44 38.556 122.848 38.556C123.648 38.556 124.252 38.836 124.66 39.396C125.068 39.956 125.272 40.772 125.272 41.844C125.272 42.916 125.068 43.736 124.66 44.304C124.252 44.864 123.648 45.144 122.848 45.144C122.64 45.144 122.444 45.112 122.26 45.048C122.076 44.992 121.908 44.912 121.756 44.808C121.612 44.696 121.488 44.568 121.384 44.424C121.28 44.272 121.204 44.112 121.156 43.944H121.096V45H119.32V36.12ZM122.26 43.704C122.596 43.704 122.872 43.588 123.088 43.356C123.312 43.116 123.424 42.796 123.424 42.396V41.304C123.424 40.904 123.312 40.588 123.088 40.356C122.872 40.116 122.596 39.996 122.26 39.996C121.924 39.996 121.644 40.08 121.42 40.248C121.204 40.408 121.096 40.632 121.096 40.92V42.78C121.096 43.068 121.204 43.296 121.42 43.464C121.644 43.624 121.924 43.704 122.26 43.704ZM128.757 45.144C128.149 45.144 127.637 45.048 127.221 44.856C126.805 44.656 126.433 44.376 126.105 44.016L127.149 42.96C127.373 43.208 127.621 43.404 127.893 43.548C128.165 43.692 128.473 43.764 128.817 43.764C129.169 43.764 129.413 43.712 129.549 43.608C129.685 43.496 129.753 43.348 129.753 43.164C129.753 42.868 129.541 42.692 129.117 42.636LLine truncated
<path d="M37.4987 29.5417V37.8751L33.332 33.7084" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M37.5 37.8749L41.6667 33.7083" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M29.5766 31.9052C28.7259 31.161 28.0598 30.2292 27.631 29.1833C27.2022 28.1374 27.0224 27.0062 27.1058 25.8789C27.1893 24.7516 27.5336 23.6592 28.1118 22.6879C28.6899 21.7165 29.4859 20.8929 30.437 20.282C31.388 19.6712 32.4681 19.2898 33.5919 19.1679C34.7157 19.0461 35.8524 19.1873 36.9122 19.5802C37.9721 19.9731 38.9261 20.6071 39.6989 21.432C40.4717 22.2569 41.0422 23.2502 41.3652 24.3334H43.2298C44.2423 24.3332 45.2277 24.661 46.0385 25.2676C46.8492 25.8742 47.4418 26.727 47.7274 27.6985C48.0131 28.6699 47.9765 29.7077 47.6232 30.6566C47.2698 31.6055 46.6187 32.4145 45.7673 32.9625" stroke="#472402" stroke-width="3.33" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB