From fcf72cf9a57892e2732e52fb996cf941fa41db66 Mon Sep 17 00:00:00 2001 From: "Arthur K." Date: Sun, 12 Jan 2025 17:12:34 +0300 Subject: [PATCH] init: first somewhat working version --- .github/dependabot.yml | 7 + .gitignore | 18 + .gitmodules | 3 + LICENSE | 674 ++++++++++++++++++ README.md | 20 + app/build.gradle.kts | 67 ++ app/src/main/AndroidManifest.xml | 42 ++ .../java/com/wzray/openconnect/Application.kt | 54 ++ .../com/wzray/openconnect/MainActivity.kt | 33 + .../wzray/openconnect/core/data/Database.kt | 17 + .../core/data/dao/ConnectionsDao.kt | 31 + .../openconnect/core/data/model/Connection.kt | 33 + .../viewmodels/ConnectionEditorViewModel.kt | 43 ++ .../core/viewmodels/HomeViewModel.kt | 120 ++++ .../core/viewmodels/LogViewModel.kt | 107 +++ .../wzray/openconnect/tunnel/NormalizedIP.kt | 40 ++ .../wzray/openconnect/tunnel/OpenConnect.kt | 121 ++++ .../wzray/openconnect/tunnel/VpnManager.kt | 61 ++ .../com/wzray/openconnect/ui/Navigation.kt | 15 + .../wzray/openconnect/ui/OpenConnectApp.kt | 149 ++++ .../openconnect/ui/components/CheckboxText.kt | 43 ++ .../ui/components/ConnectionElement.kt | 90 +++ .../ui/components/RadioButtonText.kt | 33 + .../ui/components/SimpleIconButton.kt | 25 + .../ui/components/SimpleTextButton.kt | 13 + .../ui/components/SingleSelectDialog.kt | 69 ++ .../openconnect/ui/screens/SettingsScreen.kt | 80 +++ .../ConnectionEditorScreen.kt | 127 ++++ .../openconnect/ui/screens/home/Components.kt | 23 + .../openconnect/ui/screens/home/HomeRoute.kt | 43 ++ .../ui/screens/home/HomeScreenSelection.kt | 93 +++ .../ui/screens/home/HomeScreens.kt | 96 +++ .../openconnect/ui/screens/logs/LogRoute.kt | 30 + .../openconnect/ui/screens/logs/LogScreen.kt | 173 +++++ .../wzray/openconnect/ui/theme/Animations.kt | 59 ++ .../com/wzray/openconnect/ui/theme/Color.kt | 11 + .../com/wzray/openconnect/ui/theme/Theme.kt | 70 ++ .../com/wzray/openconnect/ui/theme/Type.kt | 34 + .../com/wzray/openconnect/util/Extensions.kt | 10 + .../com/wzray/openconnect/util/Settings.kt | 74 ++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6305 bytes .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 839 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 7673 bytes .../mipmap-hdpi/ic_launcher_monochrome.png | Bin 0 -> 5998 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3790 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 446 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 4816 bytes .../mipmap-mdpi/ic_launcher_monochrome.png | Bin 0 -> 3867 bytes app/src/main/res/mipmap-xhdpi/ic_banner.png | Bin 0 -> 22731 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8593 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 1304 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 12047 bytes .../mipmap-xhdpi/ic_launcher_monochrome.png | Bin 0 -> 9663 bytes app/src/main/res/mipmap-xxhdpi/ic_banner.png | Bin 0 -> 35631 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 16276 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 2936 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 21572 bytes .../mipmap-xxhdpi/ic_launcher_monochrome.png | Bin 0 -> 16444 bytes app/src/main/res/mipmap-xxxhdpi/ic_banner.png | Bin 0 -> 52333 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 22499 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 4219 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 34104 bytes .../mipmap-xxxhdpi/ic_launcher_monochrome.png | Bin 0 -> 27096 bytes app/src/main/res/values/colors.xml | 10 + app/src/main/res/values/strings.xml | 34 + app/src/main/res/values/themes.xml | 4 + app/src/main/res/xml/backup_rules.xml | 3 + .../main/res/xml/data_extraction_rules.xml | 5 + build.gradle.kts | 7 + external/openconnect | 1 + gradle.properties | 4 + gradle/libs.versions.toml | 53 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 251 +++++++ misc/banner.png | Bin 0 -> 184711 bytes misc/feature.png | Bin 0 -> 188495 bytes misc/icon-raw.xcf | Bin 0 -> 6767887 bytes misc/icon.png | Bin 0 -> 211405 bytes settings.gradle.kts | 23 + 81 files changed, 3259 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 LICENSE create mode 100644 README.md create mode 100644 app/build.gradle.kts create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/wzray/openconnect/Application.kt create mode 100644 app/src/main/java/com/wzray/openconnect/MainActivity.kt create mode 100644 app/src/main/java/com/wzray/openconnect/core/data/Database.kt create mode 100644 app/src/main/java/com/wzray/openconnect/core/data/dao/ConnectionsDao.kt create mode 100644 app/src/main/java/com/wzray/openconnect/core/data/model/Connection.kt create mode 100644 app/src/main/java/com/wzray/openconnect/core/viewmodels/ConnectionEditorViewModel.kt create mode 100644 app/src/main/java/com/wzray/openconnect/core/viewmodels/HomeViewModel.kt create mode 100644 app/src/main/java/com/wzray/openconnect/core/viewmodels/LogViewModel.kt create mode 100644 app/src/main/java/com/wzray/openconnect/tunnel/NormalizedIP.kt create mode 100644 app/src/main/java/com/wzray/openconnect/tunnel/OpenConnect.kt create mode 100644 app/src/main/java/com/wzray/openconnect/tunnel/VpnManager.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/Navigation.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/OpenConnectApp.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/components/CheckboxText.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/components/ConnectionElement.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/components/RadioButtonText.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/components/SimpleIconButton.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/components/SimpleTextButton.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/components/SingleSelectDialog.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/screens/SettingsScreen.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/screens/connection_editor/ConnectionEditorScreen.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/screens/home/Components.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeRoute.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeScreenSelection.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeScreens.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/screens/logs/LogRoute.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/screens/logs/LogScreen.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/theme/Animations.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/theme/Color.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/theme/Theme.kt create mode 100644 app/src/main/java/com/wzray/openconnect/ui/theme/Type.kt create mode 100644 app/src/main/java/com/wzray/openconnect/util/Extensions.kt create mode 100644 app/src/main/java/com/wzray/openconnect/util/Settings.kt create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_banner.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_banner.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_banner.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/main/res/xml/backup_rules.xml create mode 100644 app/src/main/res/xml/data_extraction_rules.xml create mode 100644 build.gradle.kts create mode 160000 external/openconnect create mode 100644 gradle.properties create mode 100644 gradle/libs.versions.toml create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 misc/banner.png create mode 100644 misc/feature.png create mode 100644 misc/icon-raw.xcf create mode 100644 misc/icon.png create mode 100644 settings.gradle.kts diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..05b4b4b --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + - package-ecosystem: "gradle" + directory: "/" + schedule: + interval: "weekly" + rebase-strategy: "disabled" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dfc0643 --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +*.iml +.DS_Store +.classpath +.cxx +.externalNativeBuild +.gradle +.kotlin +.project +.settings/ +/.idea +/app/build +/app/libs +/app/src/main/assets +/app/src/main/jniLibs +/build +/captures +/kls_database.db +local.properties diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..50fe86f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "external/openconnect"] + path = external/openconnect + url = https://gitlab.com/wzrayyy/openconnect diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..0eda53f --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# OpenConnect for Android + +This version is still **UNDER DEVELOPMENT**. Check [the official repository](https://gitlab.com/openconnect/ics-openconnect) for the legacy (but working on latest Android) version. + + +## Building + +```sh +# clone the repo with submodules +git clone --recurse-submodules https://github.com/wzrayyy/openconnect-android +cd openconnect-android +# make external dependencies (curl and openconnect) +make -C external +# build apk +./gradlew assembleDebug +# copy the apk to the current folder +find -name '*.apk' | head -1 | xargs -I{} cp {} OpenConnect.apk +# install +adb install OpenConnect.apk +``` diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..08fd352 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,67 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.google.ksp) + alias(libs.plugins.google.dagger.hilt) + + alias(libs.plugins.kotlin.serialization) +} + +android { + namespace = "com.wzray.openconnect" + compileSdk = 35 + + defaultConfig { + applicationId = "com.wzray.openconnect" + minSdk = 23 + targetSdk = 35 + versionCode = 1 + versionName = "0.1.0-alpha" + } + + buildTypes { release { isMinifyEnabled = false } } + buildFeatures { compose = true } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlin { + jvmToolchain(17) + } +} + +dependencies { + implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) + + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.material3.adaptive.navigation.suite) + implementation(libs.androidx.compose.material.iconsExtended) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.material3) + implementation(libs.androidx.navigation.compose) + implementation(libs.androidx.room.ktx) + implementation(libs.androidx.ui) + implementation(libs.androidx.ui.graphics) + implementation(libs.androidx.ui.tooling.preview) + implementation(libs.compose.preference) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.datastore.preferences) + ksp(libs.androidx.room.compiler) + + implementation(libs.google.dagger.hilt) + implementation(libs.androidx.hilt.navigation.compose) + ksp(libs.google.dagger.hilt.compiler) + + implementation(libs.compose.destinations.core) + implementation(libs.compose.destinations.bottomSheet) + ksp(libs.compose.destinations.ksp) + + implementation(libs.kotlinx.serialization.json) + + implementation(libs.androidx.core.splashscreen) + + debugImplementation(libs.androidx.ui.tooling) + debugImplementation(libs.androidx.ui.test.manifest) +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..5c81d84 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/wzray/openconnect/Application.kt b/app/src/main/java/com/wzray/openconnect/Application.kt new file mode 100644 index 0000000..2b8beab --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/Application.kt @@ -0,0 +1,54 @@ +package com.wzray.openconnect + +import android.util.Log +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.PreferenceDataStoreFactory +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.preferencesDataStoreFile +import androidx.room.Room +import com.wzray.openconnect.core.data.Database +import com.wzray.openconnect.tunnel.VpnManager +import dagger.hilt.android.HiltAndroidApp +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import java.lang.ref.WeakReference + +@HiltAndroidApp +class Application : android.app.Application() { + private lateinit var prefDataStore: DataStore + private lateinit var db: Database + private val coroutineScope = CoroutineScope(Job() + Dispatchers.Main.immediate) + private var vpnManager: VpnManager = VpnManager(this) + + override fun onCreate() { + super.onCreate() + prefDataStore = PreferenceDataStoreFactory.create { + applicationContext.preferencesDataStoreFile("settings") + } + db = Room.databaseBuilder(this, Database::class.java, "database.db").build() + Log.i(TAG, "Starting application...") + } + + companion object { + private const val TAG = "OpenConnect/Application" + + private lateinit var thisWeakRef: WeakReference + fun get() = thisWeakRef.get()!! + + val prefDataStore + get() = get().prefDataStore + val db: Database + get() = get().db + val coroutineScope + get() = get().coroutineScope + val vpnManager + get() = get().vpnManager + } + + init { + thisWeakRef = WeakReference(this) + System.loadLibrary("openconnect") + System.loadLibrary("stoken") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/MainActivity.kt b/app/src/main/java/com/wzray/openconnect/MainActivity.kt new file mode 100644 index 0000000..47643c0 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/MainActivity.kt @@ -0,0 +1,33 @@ +package com.wzray.openconnect + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.activity.result.contract.ActivityResultContracts +import com.wzray.openconnect.ui.OpenConnectApp +import dagger.hilt.android.AndroidEntryPoint +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen + +@AndroidEntryPoint +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + Application.vpnManager.activityResultLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + Application.vpnManager.activityCallback?.invoke(it) + } + + installSplashScreen() + enableEdgeToEdge() + setContent { + OpenConnectApp() + } + } + + override fun onDestroy() { + super.onDestroy() + Application.vpnManager.activityResultLauncher = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/core/data/Database.kt b/app/src/main/java/com/wzray/openconnect/core/data/Database.kt new file mode 100644 index 0000000..0fe5b0b --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/core/data/Database.kt @@ -0,0 +1,17 @@ +package com.wzray.openconnect.core.data + +import androidx.room.Database +import androidx.room.RoomDatabase +import com.wzray.openconnect.core.data.dao.ConnectionsDao +import com.wzray.openconnect.core.data.model.Connection + +@Database( + entities = [ + Connection::class, + ], + version = 1, + exportSchema = false +) +abstract class Database : RoomDatabase() { + abstract fun connectionsDao(): ConnectionsDao +} diff --git a/app/src/main/java/com/wzray/openconnect/core/data/dao/ConnectionsDao.kt b/app/src/main/java/com/wzray/openconnect/core/data/dao/ConnectionsDao.kt new file mode 100644 index 0000000..9b42fae --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/core/data/dao/ConnectionsDao.kt @@ -0,0 +1,31 @@ +package com.wzray.openconnect.core.data.dao + +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query +import androidx.room.Update +import com.wzray.openconnect.core.data.model.Connection +import kotlinx.coroutines.flow.Flow + + +@Dao +abstract class ConnectionsDao { + @Query("SELECT COUNT(*) FROM connections") + abstract fun count(): Flow + + @Query("SELECT * FROM connections WHERE name = :name") + abstract fun connection(name: String): Flow + + @Query("SELECT * FROM connections") + abstract fun getAll(): Flow> + + @Delete + abstract fun delete(connection: Connection): Int + + @Insert + abstract suspend fun insert(connection: Connection) + + @Update + abstract suspend fun update(connection: Connection) +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/core/data/model/Connection.kt b/app/src/main/java/com/wzray/openconnect/core/data/model/Connection.kt new file mode 100644 index 0000000..b410395 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/core/data/model/Connection.kt @@ -0,0 +1,33 @@ +package com.wzray.openconnect.core.data.model + +import androidx.room.Entity +import androidx.room.Index +import androidx.room.PrimaryKey +import kotlinx.serialization.Serializable +import java.util.UUID + +enum class Protocols(name: String) { + ANYCONNECT("anyconnect") +} + +@Entity( + tableName = "connections", + indices = [ + Index("uuid", unique = true) + ] +) +@Serializable +data class Connection( + val name: String, + val url: String, + val username: String, + val password: String, + + val protocol: Protocols = Protocols.ANYCONNECT, + val xmlPost: Boolean = true, + val pfs: Boolean = false, + val useDTLS: Boolean = true, + val reportedOs: String = "android", + val mtu: Int = 1280, + @PrimaryKey val uuid: String = UUID.randomUUID().toString(), +) \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/core/viewmodels/ConnectionEditorViewModel.kt b/app/src/main/java/com/wzray/openconnect/core/viewmodels/ConnectionEditorViewModel.kt new file mode 100644 index 0000000..49fc796 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/core/viewmodels/ConnectionEditorViewModel.kt @@ -0,0 +1,43 @@ +package com.wzray.openconnect.core.viewmodels + +import androidx.compose.runtime.MutableState +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.ViewModelProvider.* +import androidx.lifecycle.viewModelScope +import com.wzray.openconnect.Application +import com.wzray.openconnect.core.data.model.Connection +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import javax.inject.Inject + +class ConnectionEditorViewModel (c: Connection) : ViewModel() { + private val dao = Application.db.connectionsDao() + + private val connectionFlow = MutableStateFlow(c) + val connection = connectionFlow.asStateFlow() + + + fun updateConnection(c: Connection) { + viewModelScope.launch { + connectionFlow.update { c } + withContext(Dispatchers.IO) { + dao.update(c) + } + } + } +// companion object { +// fun provideFactory( +// connection: Connection +// ): Factory = object : Factory { +// @Suppress("UNCHECKED_CAST") +// override fun create(modelClass: Class): T { +// return ConnectionEditorViewModel(connection) as T +// } +// } +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/core/viewmodels/HomeViewModel.kt b/app/src/main/java/com/wzray/openconnect/core/viewmodels/HomeViewModel.kt new file mode 100644 index 0000000..b7578ed --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/core/viewmodels/HomeViewModel.kt @@ -0,0 +1,120 @@ +package com.wzray.openconnect.core.viewmodels + +import android.util.Log +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.wzray.openconnect.Application +import com.wzray.openconnect.core.data.model.Connection +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import javax.inject.Inject + +sealed interface HomeUiState { + val connections: List + + data class ConnectionList( + override val connections: List + ) : HomeUiState + + data class SelectionList( + override val connections: List, + val selectedConnections: List + ) : HomeUiState +} + +private data class ViewModelState( + val connections: List? = null, + val selectedConnections: List? = null +) { + fun toUiState() = if (selectedConnections == null) + HomeUiState.ConnectionList(connections ?: listOf()) + else + HomeUiState.SelectionList(connections ?: listOf(), selectedConnections) +} + +@HiltViewModel +class HomeViewModel @Inject constructor() : ViewModel() { + private var vmState = MutableStateFlow(ViewModelState()) + var uiState: StateFlow = vmState.map { it.toUiState() } + .stateIn(viewModelScope, SharingStarted.Eagerly, vmState.value.toUiState()) + + private val dao = Application.db.connectionsDao() + + init { + viewModelScope.launch { + dao.getAll().collect { c -> + vmState.update { + it.copy(connections = c) + } + } + } + } + + fun connect(connection: Connection) { + Application.vpnManager.establish(connection) + } + + fun openSettings(connection: Connection) { + + } + + fun toggleSelection(connection: Connection) { + if (vmState.value.selectedConnections == null) + vmState.update { + it.copy(selectedConnections = listOf()) + } + if (!vmState.value.selectedConnections?.contains(connection)!!) + vmState.update { + it.copy(selectedConnections = it.selectedConnections?.plus(connection)) + } + else + vmState.update { + it.copy(selectedConnections = it.selectedConnections?.minus(connection)) + } + + if (vmState.value.selectedConnections?.isEmpty()!!) + vmState.update { + it.copy(selectedConnections = null) + } + + } + + fun deleteSelected() { + viewModelScope.launch { + withContext(Dispatchers.IO) { + val db = Application.db + val dao = db.connectionsDao() + + vmState.value.selectedConnections?.forEach { e -> + dao.delete(e) + } + vmState.update { it.copy(selectedConnections = null) } + } + } + } + + fun selectAll() = viewModelScope.launch { + vmState.value.connections?.forEach { c -> + if (!vmState.value.selectedConnections?.contains(c)!!) + vmState.update { + it.copy(selectedConnections = it.selectedConnections?.plus(c)) + } + } + } + + fun copySelected() { + Log.e(TAG, "Copy selected is not yet implemented.") + } + + companion object { + private const val TAG = "OpenConnect/HomeViewModel" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/core/viewmodels/LogViewModel.kt b/app/src/main/java/com/wzray/openconnect/core/viewmodels/LogViewModel.kt new file mode 100644 index 0000000..d86cf0c --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/core/viewmodels/LogViewModel.kt @@ -0,0 +1,107 @@ +package com.wzray.openconnect.core.viewmodels + +import android.util.Log +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.BufferedReader +import java.io.IOException +import java.io.InputStreamReader +import java.nio.charset.StandardCharsets +import java.util.LinkedList +import javax.inject.Inject + +enum class LogLevel(val shortName: Char, val fullName: String) { + VERBOSE('V', "Verbose"), + DEBUG('D', "Debug"), + INFO('I', "Info"), + WARN('W', "Warn"), + ERROR('E', "Error"), + FATAL('F', "Fatal") +} + +data class UIState( + val isPaused: Boolean = false, + val logLevel: LogLevel = LogLevel.ERROR, + val logList: List = listOf() // TODO: proper structure for log lines +) + +@HiltViewModel +class LogViewModel @Inject constructor() : ViewModel() { + private var logCollectorJob: Job + private val backlog = LinkedList() + private var mutableUiState = MutableStateFlow(UIState()) + val uiState = mutableUiState.asStateFlow() + + init { + logCollectorJob = viewModelScope.launch { + collectLogs() + } + } + + fun pauseLog() { + mutableUiState.update { + it.copy(isPaused = !mutableUiState.value.isPaused, logList = it.logList + backlog) + } + backlog.clear() + } + + fun clearLog() { + mutableUiState.update { + it.copy(logList = listOf()) + } + backlog.clear() + } + + fun setLogLevel(logLevel: LogLevel) { + logCollectorJob.cancel() + backlog.clear() + mutableUiState.update { + it.copy(logLevel = logLevel, logList = listOf()) + } + logCollectorJob = viewModelScope.launch { + collectLogs() + } + } + + private suspend fun collectLogs() = withContext(Dispatchers.IO) { + val builder = ProcessBuilder( + "logcat", "-b", "all", "*:${uiState.value.logLevel.shortName}" + ) + builder.environment()["LC_ALL"] = "C" + var process: Process? = null + try { + process = try { + builder.start() + } catch (e: IOException) { + Log.e(TAG, Log.getStackTraceString(e)) + return@withContext + } + + val stdout = + BufferedReader(InputStreamReader(process!!.inputStream, StandardCharsets.UTF_8)) + + while (isActive) { + val line = stdout.readLine() ?: break + if (uiState.value.isPaused) backlog.add(line) + else mutableUiState.update { + it.copy(logList = it.logList + line) + } + } + } finally { + process?.destroy() + } + } + + companion object { + private const val TAG = "OpenConnect/LogViewModel" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/tunnel/NormalizedIP.kt b/app/src/main/java/com/wzray/openconnect/tunnel/NormalizedIP.kt new file mode 100644 index 0000000..bffebc7 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/tunnel/NormalizedIP.kt @@ -0,0 +1,40 @@ +package com.wzray.openconnect.tunnel + +import java.util.Locale + +// TODO: single interface, v4 and v6 versions + +@Suppress("MemberVisibilityCanBePrivate", "unused") +data class NormalizedIP(val ip: String, val cidr: Int) { + constructor(ip: String, mask: String) : this( + ip, + if(mask.contains(".")) maskToCidr(mask) else mask.toInt() + ) + + constructor(addrWithNetMask: String) : this( + addrWithNetMask.split("/")[0], + addrWithNetMask.split("/")[1], + ) + + override fun toString(): String { + return String.format(Locale.ROOT, "%s/%d", ip, cidr) + } + + companion object { + fun maskToCidr(mask: String) = 32 - ((ipToInt(mask).inv()).countOneBits()) + + fun cidrToMask(cidr: Int) = intToIp(((1 shl cidr) - 1) shl (32 - cidr)) + + fun ipToInt(ip: String) = ip.split(".").map { it.toInt() }.reversed() + .reduceIndexed { idx, acc, it -> acc + (it shl (idx * 8)) } + + fun intToIp(ip: Int) = String.format( + Locale.ROOT, "%d.%d.%d.%d", + ip and (0xff shl 24) shr 24, + ip and (0xff shl 16) shr 16, + ip and (0xff shl 8) shr 8, + ip and 0xff + ) + } +} + diff --git a/app/src/main/java/com/wzray/openconnect/tunnel/OpenConnect.kt b/app/src/main/java/com/wzray/openconnect/tunnel/OpenConnect.kt new file mode 100644 index 0000000..6887f95 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/tunnel/OpenConnect.kt @@ -0,0 +1,121 @@ +package com.wzray.openconnect.tunnel + +import android.util.Log +import com.wzray.openconnect.core.data.model.Connection +import org.infradead.libopenconnect.LibOpenConnect +import java.io.IOException + +class OpenConnect(private val connection: Connection) : Runnable { + private val vpnService: VpnService = VpnService() + private lateinit var backend: Backend + + private fun createBackend() { + backend = Backend() + + backend.setProtocol(connection.protocol.name) + backend.setXMLPost(connection.xmlPost) + backend.setPFS(connection.pfs) + if (!connection.useDTLS) + backend.disableDTLS() + backend.setReportedOS(connection.reportedOs) + + backend.setMobileInfo( + "1.0", + connection.reportedOs, + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + ) + + val retVal = backend.parseURL(connection.url) + Log.e(TAG, "call to oc.parseURL: $retVal") + if (retVal != 0) + throw Exception("Invalid url") + } + + override fun run() { + createBackend() + + var retVal = backend.obtainCookie() + Log.e(TAG, "obtainCookie ret: $retVal") + + retVal = backend.makeCSTPConnection() + Log.e(TAG, "makeCSTPConnection ret: $retVal") + + val b = vpnService.getBuilder() + b.setSession(connection.name) + val ip = backend.ipInfo + + Log.e(TAG, "call to svc.getBuilder()") + + val normalizedIP = NormalizedIP(ip.addr, ip.netmask) + b.addAddress(ip.addr, normalizedIP.cidr) + b.setMtu(1280) + b.addRoute("0.0.0.0", 0) + b.addDnsServer("1.1.1.1") + + val pfd = b.establish() + Log.e(TAG, "call to b.establish(): ${pfd != null}") + + backend.setupTunFD(pfd!!.fd) + Log.e(TAG, "call to oc.setupTunFD(${pfd.fd})") + + while (true) + if (backend.mainloop(300, LibOpenConnect.RECONNECT_INTERVAL_MIN) < 0) + break + + try { + pfd.close() + } catch (_: IOException) { + } + } + + fun cancel() { + backend.cancel() + } + + inner class Backend : LibOpenConnect() { + override fun onProcessAuthForm(authForm: AuthForm): Int { + val opt = authForm.opts[0] + + Log.d(TAG, "Auth form ${authForm.message}") + when (opt.type) { + OC_FORM_OPT_TEXT -> opt.value = connection.username + OC_FORM_OPT_PASSWORD -> opt.value = connection.password + else -> Log.e(TAG, "FAIL AUTH FORM ${authForm.message}") + } + return 0 + } + + override fun onProgress(level: Int, msg: String?) { + if (msg == null) return + + Log.println( + when (level) { + PRG_ERR -> Log.ERROR + PRG_INFO -> Log.INFO + PRG_DEBUG -> Log.DEBUG + else -> Log.VERBOSE + }, TAG, msg + ) + } + + override fun onProtectSocket(fd: Int) { + val x = vpnService.protect(fd) + Log.d(TAG, "onProtectSocket, result: $x, fd: $fd") + } + } + + class VpnService : android.net.VpnService() { + fun getBuilder(): android.net.VpnService.Builder { + return Builder() + } + + override fun onRevoke() { + super.onRevoke() + } + } + + companion object { + private const val TAG = "OpenConnect/Backend" + } +} + diff --git a/app/src/main/java/com/wzray/openconnect/tunnel/VpnManager.kt b/app/src/main/java/com/wzray/openconnect/tunnel/VpnManager.kt new file mode 100644 index 0000000..a52a58c --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/tunnel/VpnManager.kt @@ -0,0 +1,61 @@ +package com.wzray.openconnect.tunnel + +import android.content.Context +import android.content.Intent +import android.net.VpnService +import android.util.Log +import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultLauncher +import com.wzray.openconnect.core.data.model.Connection +import com.wzray.openconnect.util.applicationScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.launch + +class VpnManager(private val context: Context) { + var activityCallback: ((ActivityResult) -> Unit)? = null + private set + + var activityResultLauncher: ActivityResultLauncher? = null + + private var openConnect: OpenConnect? = null + private var openConnectThread: Thread? = null + + fun disconnect() = applicationScope.launch { + openConnect?.cancel() + openConnectThread?.join(1000) + } + + val isConnected: Boolean + get() = openConnect != null || openConnectThread != null + + fun establish(connection: Connection) { + if (isConnected) + disconnect() + + openConnect = OpenConnect(connection) + openConnectThread = Thread(openConnect) + + activityCallback = { + openConnectThread?.start() + } + + val intent = VpnService.prepare(context) + if (intent != null) { + Log.d(TAG, "VPN permission not granted, requesting") + try { + activityResultLauncher!!.launch(intent) + } catch (e: Exception) { // we want to have control over what gets thrown + throw Exception("Missing VPN permission") + } + } else + openConnectThread?.start() + } + + fun reconnect(name: String) { + TODO("Not yet implemented") + } + + companion object { + private const val TAG = "OpenConnect/VpnManager" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/Navigation.kt b/app/src/main/java/com/wzray/openconnect/ui/Navigation.kt new file mode 100644 index 0000000..adbbc83 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/Navigation.kt @@ -0,0 +1,15 @@ +package com.wzray.openconnect.ui + +import com.ramcosta.composedestinations.annotation.NavGraph +import com.ramcosta.composedestinations.annotation.NavHostGraph +import com.ramcosta.composedestinations.annotation.RootGraph +import com.wzray.openconnect.ui.theme.Fade + +@NavGraph +annotation class ConnectionEditorGraph + +@NavHostGraph( + route = "main", + defaultTransitions = Fade::class +) +annotation class MainGraph \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/OpenConnectApp.kt b/app/src/main/java/com/wzray/openconnect/ui/OpenConnectApp.kt new file mode 100644 index 0000000..97f6b5f --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/OpenConnectApp.kt @@ -0,0 +1,149 @@ +package com.wzray.openconnect.ui + +import android.util.Log +import androidx.annotation.StringRes +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.systemBars +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.Article +import androidx.compose.material.icons.automirrored.outlined.Article +import androidx.compose.material.icons.filled.Home +import androidx.compose.material.icons.filled.Settings +import androidx.compose.material.icons.outlined.Home +import androidx.compose.material.icons.outlined.Settings +import androidx.compose.material3.Icon +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.Scaffold +import androidx.compose.material3.ScaffoldDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.navigation.NavController +import androidx.navigation.NavHostController +import androidx.navigation.compose.rememberNavController +import com.ramcosta.composedestinations.DestinationsNavHost +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.annotation.RootGraph +import com.ramcosta.composedestinations.generated.NavGraphs +import com.ramcosta.composedestinations.generated.destinations.HomeRouteDestination +import com.ramcosta.composedestinations.generated.destinations.LogRouteDestination +import com.ramcosta.composedestinations.generated.destinations.SettingsScreenDestination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import com.ramcosta.composedestinations.navigation.dependency +import com.ramcosta.composedestinations.spec.DirectionDestinationSpec +import com.ramcosta.composedestinations.utils.currentDestinationAsState +import com.ramcosta.composedestinations.utils.rememberDestinationsNavigator +import com.ramcosta.composedestinations.utils.startDestination +import com.wzray.openconnect.R +import com.wzray.openconnect.ui.theme.OpenConnectTheme + +enum class NavDestinations( + @StringRes val title: Int, + val route: DirectionDestinationSpec, + val icon: ImageVector, + val iconSelected: ImageVector +) { + LOGS( + title = R.string.logs, + route = LogRouteDestination, + icon = Icons.AutoMirrored.Outlined.Article, + iconSelected = Icons.AutoMirrored.Filled.Article + ), + HOME( + title = R.string.home, + route = HomeRouteDestination, + icon = Icons.Outlined.Home, + iconSelected = Icons.Filled.Home + ), + SETTINGS( + title = R.string.settings, + route = SettingsScreenDestination, + icon = Icons.Outlined.Settings, + iconSelected = Icons.Filled.Settings + ), +} + +@Composable +private fun BottomBar( + navController: NavHostController +) { + val navigator = navController.rememberDestinationsNavigator() + + val currentRoute = + navController.currentDestinationAsState().value ?: NavGraphs.root.startDestination + + NavigationBar { + NavDestinations.entries.forEach { destination -> + val isSelected = currentRoute == destination.route + NavigationBarItem( + selected = isSelected, + onClick = { + navigator.navigate(destination.route) { + popUpTo(NavDestinations.HOME.route) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + }, + icon = { + Icon( + if (isSelected) destination.iconSelected else destination.icon, + null + ) + }, + label = { Text(stringResource(destination.title)) }, + ) + } + } +} + +class RootDestinationsNavigator(value: DestinationsNavigator) : DestinationsNavigator by value + +// This is *really* the only way to have pretty animations with bottom navbar... +@Destination( + start = true +) +@Composable +fun MainGraphNavHost( + rootNavController: NavController +) { + val navController = rememberNavController() + Scaffold( + bottomBar = { + BottomBar(navController) + }, + ) { padding -> + // compensate for Scaffold's smartness + val bottomOffset = WindowInsets.systemBars.asPaddingValues().calculateBottomPadding() + val outerPadding = PaddingValues(bottom = padding.calculateBottomPadding() - bottomOffset) + DestinationsNavHost( + navGraph = NavGraphs.main, + navController = navController, + dependenciesContainerBuilder = { + dependency(RootDestinationsNavigator(rootNavController.rememberDestinationsNavigator())) + dependency(outerPadding) + } + ) + } +} + + +@Composable +fun OpenConnectApp() { + val navHostController = rememberNavController() + + OpenConnectTheme { + DestinationsNavHost( + navGraph = NavGraphs.root, + navController = navHostController, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/components/CheckboxText.kt b/app/src/main/java/com/wzray/openconnect/ui/components/CheckboxText.kt new file mode 100644 index 0000000..8e1373b --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/components/CheckboxText.kt @@ -0,0 +1,43 @@ +package com.wzray.openconnect.ui.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Checkbox +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.wzray.openconnect.ui.theme.OpenConnectTheme + +@Composable +fun CheckboxText( + text: String, + checked: Boolean, +) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxWidth() + ) { + Text(text) + Spacer(Modifier.width(36.dp)) + Checkbox(checked, null) + } +} + +@Preview(showBackground = true) +@Composable +private fun UiPreview() { + val enabled by remember { mutableStateOf(true) } + OpenConnectTheme { + CheckboxText("Preview", enabled) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/components/ConnectionElement.kt b/app/src/main/java/com/wzray/openconnect/ui/components/ConnectionElement.kt new file mode 100644 index 0000000..8fcc60c --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/components/ConnectionElement.kt @@ -0,0 +1,90 @@ +package com.wzray.openconnect.ui.components + +import android.content.res.Configuration +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.clickable +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Settings +import androidx.compose.material3.Icon +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.wzray.openconnect.ui.theme.OpenConnectTheme +import me.zhanghai.compose.preference.CheckboxPreference +import me.zhanghai.compose.preference.ProvidePreferenceLocals +import me.zhanghai.compose.preference.TwoTargetIconButtonPreference +import me.zhanghai.compose.preference.rememberPreferenceState + +// TwoTargetIconButtonPreference specialization for connection list +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun ConnectionElement( + onClick: () -> Unit, + onLongClick: () -> Unit, + onSettingsClick: () -> Unit, + connectionName: String +) { + TwoTargetIconButtonPreference( + title = { Text(connectionName) }, + modifier = Modifier.combinedClickable(onClick = onClick, onLongClick = onLongClick), + onIconButtonClick = onSettingsClick, + iconButtonIcon = { + Icon(imageVector = Icons.Filled.Settings, contentDescription = "Settings") + }, + ) +} + +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun ConnectionElementSelected( + onChangeCallback: () -> Unit, + isEnabled: Boolean, + connectionName: String +) { + CheckboxPreference( + value = isEnabled, + title = { Text(connectionName) }, + onValueChange = { + onChangeCallback.invoke() + } + ) +} + +@Preview(showBackground = true) +@Composable +private fun ConnectionElementPreview() { + OpenConnectTheme { + Surface { + Column { + ConnectionElement({}, {}, {}, "Menu element") + ConnectionElementSelected({}, false, "Not selected element") + ConnectionElementSelected({}, true, "Example selected") + } + } + } +} + +@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +private fun ConnectionElementPreviewDark() { + OpenConnectTheme { + Surface { + Column { + ConnectionElement({}, {}, {}, "Menu element") + ConnectionElementSelected({}, false, "Not selected element") + ConnectionElementSelected({}, true, "Selected element") + } + } + } +} diff --git a/app/src/main/java/com/wzray/openconnect/ui/components/RadioButtonText.kt b/app/src/main/java/com/wzray/openconnect/ui/components/RadioButtonText.kt new file mode 100644 index 0000000..76ddc7e --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/components/RadioButtonText.kt @@ -0,0 +1,33 @@ +package com.wzray.openconnect.ui.components + +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.selection.selectable +import androidx.compose.material3.Text +import androidx.compose.material3.RadioButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + + +@Composable +fun RadioButtonText(text: String, isSelected: Boolean, onClick: () -> Unit) { + Row( + modifier = Modifier + .fillMaxWidth() + .selectable(selected = isSelected, onClick = { + onClick.invoke() + }) + .padding(horizontal = 16.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + RadioButton(selected = isSelected, onClick = { + onClick.invoke() + }) + Text( + text = text, modifier = Modifier.padding(start = 16.dp) + ) + } +} diff --git a/app/src/main/java/com/wzray/openconnect/ui/components/SimpleIconButton.kt b/app/src/main/java/com/wzray/openconnect/ui/components/SimpleIconButton.kt new file mode 100644 index 0000000..027a705 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/components/SimpleIconButton.kt @@ -0,0 +1,25 @@ +package com.wzray.openconnect.ui.components + +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector + +@Composable +fun SimpleIconButton( + onClick: () -> Unit, + icon: ImageVector, + contentDescription: String?, + modifier: Modifier = Modifier +) { + IconButton( + onClick = onClick, + modifier = modifier + ) { + Icon( + imageVector = icon, + contentDescription = contentDescription + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/components/SimpleTextButton.kt b/app/src/main/java/com/wzray/openconnect/ui/components/SimpleTextButton.kt new file mode 100644 index 0000000..df6d209 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/components/SimpleTextButton.kt @@ -0,0 +1,13 @@ +package com.wzray.openconnect.ui.components + +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +fun SimpleTextButton(onClick: () -> Unit, text: String, modifier: Modifier = Modifier) { + TextButton(onClick = onClick, modifier = modifier) { + Text(text = text) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/components/SingleSelectDialog.kt b/app/src/main/java/com/wzray/openconnect/ui/components/SingleSelectDialog.kt new file mode 100644 index 0000000..88d183e --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/components/SingleSelectDialog.kt @@ -0,0 +1,69 @@ +package com.wzray.openconnect.ui.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.requiredWidth +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog + +@Composable +fun SingleSelectDialog( + title: String, + submitButtonText: String, + dismissButtonText: String, + options: Map, + defaultSelected: T, + onSubmitButtonClick: (T) -> Unit, + onDismissRequest: () -> Unit, +) { + var selectedOption by remember { mutableStateOf(defaultSelected) } + + Dialog(onDismissRequest = onDismissRequest) { + Surface( + modifier = Modifier.requiredWidth(300.dp), shape = RoundedCornerShape(24.dp) + ) { + Column(modifier = Modifier.padding(12.dp)) { + Text( + text = title, + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.padding(top = 8.dp, start = 8.dp, bottom = 12.dp) + ) + LazyColumn { + options.forEach { + item { + RadioButtonText( + text = it.value, isSelected = (it.key == selectedOption) + ) { + selectedOption = it.key + } + } + } + } + Row( + horizontalArrangement = Arrangement.Absolute.Right, + modifier = Modifier.fillMaxWidth().padding(top = 4.dp) + ) { + SimpleTextButton(onDismissRequest, dismissButtonText) + SimpleTextButton({ + onSubmitButtonClick.invoke(selectedOption) + onDismissRequest.invoke() + }, submitButtonText) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/screens/SettingsScreen.kt b/app/src/main/java/com/wzray/openconnect/ui/screens/SettingsScreen.kt new file mode 100644 index 0000000..b145466 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/screens/SettingsScreen.kt @@ -0,0 +1,80 @@ +package com.wzray.openconnect.ui.screens + +import android.os.Build +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.DarkMode +import androidx.compose.material.icons.outlined.FormatPaint +import androidx.compose.material.icons.outlined.LightMode +import androidx.compose.material.icons.outlined.Palette +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import com.ramcosta.composedestinations.annotation.Destination +import com.wzray.openconnect.R +import com.wzray.openconnect.ui.MainGraph +import com.wzray.openconnect.util.Settings +import com.wzray.openconnect.util.UiMode +import com.wzray.openconnect.util.toFormalCase +import me.zhanghai.compose.preference.ListPreference +import me.zhanghai.compose.preference.PreferenceCategory +import me.zhanghai.compose.preference.SwitchPreference + +@Destination +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SettingsScreen(outerPadding: PaddingValues) { + Scaffold( + modifier = Modifier.padding(outerPadding), + topBar = { TopAppBar(title = { Text(stringResource(R.string.settings)) }) } + + ) { padding -> + Column(modifier = Modifier.padding(padding)) { + val uiModeToString = UiMode.entries.associateBy { it.toString().toFormalCase() } + val uiMode by Settings.uiMode.asState() + val dynamicColors by Settings.useDynamicColor.asState() + + PreferenceCategory( + title = { Text(stringResource(R.string.look_and_feel)) } + ) + + ListPreference( + value = uiMode.toString().toFormalCase(), + onValueChange = { + Settings.uiMode.set( + uiModeToString[it] + ) + }, + values = uiModeToString.keys.toList(), + title = { Text(stringResource(R.string.app_theme)) }, + summary = { Text(stringResource(R.string.app_theme_summary)) }, + icon = { + Icon( + when (uiMode) { + UiMode.DARK -> Icons.Outlined.DarkMode + UiMode.LIGHT -> Icons.Outlined.LightMode + UiMode.AUTO -> Icons.Outlined.FormatPaint + }, null + ) + }, + ) + + SwitchPreference( + value = dynamicColors && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S), + onValueChange = { Settings.useDynamicColor.set(it) }, + icon = { Icon(Icons.Outlined.Palette, null) }, + title = { Text(stringResource(R.string.use_dynamic_colors)) }, + summary = { Text(stringResource(R.string.use_dynamic_colors_summary)) }, + enabled = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/screens/connection_editor/ConnectionEditorScreen.kt b/app/src/main/java/com/wzray/openconnect/ui/screens/connection_editor/ConnectionEditorScreen.kt new file mode 100644 index 0000000..3c94c42 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/screens/connection_editor/ConnectionEditorScreen.kt @@ -0,0 +1,127 @@ +package com.wzray.openconnect.ui.screens.connection_editor + +import androidx.annotation.StringRes +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListScope +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.hilt.navigation.compose.hiltViewModel +import com.ramcosta.composedestinations.annotation.Destination +import com.wzray.openconnect.R +import com.wzray.openconnect.core.data.model.Connection +import com.wzray.openconnect.core.viewmodels.ConnectionEditorViewModel +import com.wzray.openconnect.ui.ConnectionEditorGraph +import com.wzray.openconnect.ui.theme.SlideEnd +import me.zhanghai.compose.preference.ListPreference +import me.zhanghai.compose.preference.PreferenceCategory +import me.zhanghai.compose.preference.TextFieldPreference +import me.zhanghai.compose.preference.preferenceCategory +import me.zhanghai.compose.preference.textFieldPreference + +//private val protocolToString = mapOf( +// Protocols.ANYCONNECT to R.string.home +//) + +private fun LazyListScope.textFieldPreference( + key: String, + @StringRes title: Int, + value: String, + onValueChange: (String) -> Unit, + modifier: Modifier = Modifier +) { + item(key = key, contentType = "TextFieldPreference") { + TextFieldPreference( + value = value, + summary = { Text(value) }, + title = { Text(stringResource(title)) }, + onValueChange = onValueChange, + textToValue = { it }, + modifier = modifier + ) + } +} + +private fun LazyListScope.passwordTextFieldPreference( + key: String, + @StringRes title: Int, + value: String, + onValueChange: (String) -> Unit, + modifier: Modifier = Modifier +) { + item(key = key, contentType = "TextFieldPreference") { + TextFieldPreference( + value = value, + summary = { Text("•".repeat(value.length)) }, + title = { Text(stringResource(title)) }, + onValueChange = onValueChange, + textToValue = { it }, + modifier = modifier + ) + } +} + +@Destination(start = true, style = SlideEnd::class) +@Composable +fun ConnectionEditorScreen( + initialConnection: Connection, +) { + val viewModel = remember { ConnectionEditorViewModel(initialConnection) } + val connection by viewModel.connection.collectAsState() + + Scaffold { padding -> + LazyColumn(modifier = Modifier.padding(padding)) { + preferenceCategory( + key = "cat_server", + title = { Text(stringResource(R.string.server)) }) + + textFieldPreference( + key = "connection_name", + value = connection.name, + title = R.string.profile_name, + onValueChange = { + viewModel.updateConnection(connection.copy(name = it)) + }, + ) + + textFieldPreference( + key = "server_address", + value = connection.url, + title = R.string.server_address, + onValueChange = { + viewModel.updateConnection(connection.copy(url = it)) + } + ) + + preferenceCategory( + key = "cat_auth", + title = { Text(stringResource(R.string.authentication)) }) + + textFieldPreference( + key = "username", + value = connection.username, + title = R.string.username, + onValueChange = { + viewModel.updateConnection(connection.copy(username = it)) + }, + ) + + passwordTextFieldPreference( + key = "password", + value = connection.password, + title = R.string.password, + onValueChange = { + viewModel.updateConnection(connection.copy(password = it)) + }, + ) + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/screens/home/Components.kt b/app/src/main/java/com/wzray/openconnect/ui/screens/home/Components.kt new file mode 100644 index 0000000..ce18f5a --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/screens/home/Components.kt @@ -0,0 +1,23 @@ +package com.wzray.openconnect.ui.screens.home + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import com.ramcosta.composedestinations.annotation.NavGraph +import com.ramcosta.composedestinations.annotation.NavHostGraph +import com.ramcosta.composedestinations.annotation.RootGraph +import com.wzray.openconnect.R + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun HomeTopBar( + modifier: Modifier = Modifier, + title: @Composable () -> Unit = { Text(stringResource(R.string.app_name)) }, + actions: @Composable (RowScope.() -> Unit) = {} +) { + TopAppBar(title = title, modifier = modifier, actions = actions) +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeRoute.kt b/app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeRoute.kt new file mode 100644 index 0000000..df6b147 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeRoute.kt @@ -0,0 +1,43 @@ +package com.wzray.openconnect.ui.screens.home + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import com.ramcosta.composedestinations.annotation.Destination +import com.wzray.openconnect.core.viewmodels.HomeUiState +import com.wzray.openconnect.core.viewmodels.HomeViewModel +import androidx.hilt.navigation.compose.hiltViewModel +import com.wzray.openconnect.ui.MainGraph +import com.wzray.openconnect.ui.RootDestinationsNavigator + +@Destination( + start = true, +) +@Composable +fun HomeRoute( + viewModel: HomeViewModel = hiltViewModel(), + outerPadding: PaddingValues, + navigator: RootDestinationsNavigator +) { + val uiState by viewModel.uiState.collectAsState() + when (uiState) { + is HomeUiState.ConnectionList -> + HomeScreen( + { viewModel.connect(it) }, + { viewModel.toggleSelection(it) }, + viewModel.uiState, + outerPadding, + navigator + ) + + is HomeUiState.SelectionList -> HomeScreenSelection( + onChangeState = { viewModel.toggleSelection(it) }, + onDeleteClick = { viewModel.deleteSelected() }, + onSelectAllClick = { viewModel.selectAll() }, + onCopyClick = { viewModel.copySelected() }, + uiStateFlow = viewModel.uiState, + paddingValues = outerPadding + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeScreenSelection.kt b/app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeScreenSelection.kt new file mode 100644 index 0000000..bc848ed --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeScreenSelection.kt @@ -0,0 +1,93 @@ +package com.wzray.openconnect.ui.screens.home + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ContentCopy +import androidx.compose.material.icons.filled.Delete +import androidx.compose.material.icons.filled.SelectAll +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.pluralStringResource +import com.wzray.openconnect.R +import com.wzray.openconnect.core.data.model.Connection +import com.wzray.openconnect.ui.components.ConnectionElementSelected +import com.wzray.openconnect.core.viewmodels.HomeUiState +import kotlinx.coroutines.flow.StateFlow + +@Composable +fun SelectionTopBar( + count: Int, + onDeleteClick: () -> Unit, + onSelectAllClick: () -> Unit, + onCopyClick: () -> Unit, + modifier: Modifier = Modifier, + title: @Composable () -> Unit = { + Text( + pluralStringResource( + R.plurals.selection_top_bar_count_selected, + count, + count + ) + ) + } +) { + HomeTopBar(modifier, title) { + if (count == 1) + IconButton(onClick = onCopyClick) { + Icon(imageVector = Icons.Filled.ContentCopy, "Duplicate") + } + + IconButton(onClick = onSelectAllClick) { + Icon(imageVector = Icons.Filled.SelectAll, "Select all") + } + + IconButton(onClick = onDeleteClick) { + Icon(imageVector = Icons.Filled.Delete, "Select all") + } + } +} + +@Composable +fun HomeScreenSelection( + onChangeState: (Connection) -> Unit, + onDeleteClick: () -> Unit, + onSelectAllClick: () -> Unit, + onCopyClick: () -> Unit, + uiStateFlow: StateFlow, + paddingValues: PaddingValues, +) { + val uiState by uiStateFlow.collectAsState() + + Scaffold( + topBar = { SelectionTopBar( + (uiState as HomeUiState.SelectionList).selectedConnections.count(), + onDeleteClick = onDeleteClick, + onSelectAllClick = onSelectAllClick, + onCopyClick = onCopyClick, + ) }, + modifier = Modifier.padding(paddingValues), + ) { padding -> + Box(modifier = Modifier.padding(top = padding.calculateTopPadding())) { + LazyColumn { + items(uiState.connections) { + ConnectionElementSelected( + onChangeCallback = { onChangeState(it) }, + isEnabled = (uiState as HomeUiState.SelectionList) + .selectedConnections.contains(it), + connectionName = it.name + ) + } + } + } + } +} diff --git a/app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeScreens.kt b/app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeScreens.kt new file mode 100644 index 0000000..0e34f27 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/screens/home/HomeScreens.kt @@ -0,0 +1,96 @@ +package com.wzray.openconnect.ui.screens.home + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.filled.Stop +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.platform.LocalHapticFeedback +import com.ramcosta.composedestinations.generated.destinations.ConnectionEditorScreenDestination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import com.wzray.openconnect.Application +import com.wzray.openconnect.core.data.model.Connection +import com.wzray.openconnect.ui.components.ConnectionElement +import com.wzray.openconnect.util.applicationScope +import com.wzray.openconnect.core.viewmodels.HomeUiState +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +@Composable +fun MultiUseFab() { // TODO: you don't have to tell me that this is bad + val vpnManager = Application.vpnManager + + if (vpnManager.isConnected) + FloatingActionButton( + onClick = { vpnManager.disconnect() }, + containerColor = MaterialTheme.colorScheme.secondaryContainer, + contentColor = MaterialTheme.colorScheme.secondary + ) { + Icon(Icons.Filled.Stop, "Stop the VPN") + } + else + FloatingActionButton( + onClick = { + Application.applicationScope.launch { + val dao = Application.db.connectionsDao() + dao.insert(Connection("New connection", "", "", "")) + } + }, + containerColor = MaterialTheme.colorScheme.secondaryContainer, + contentColor = MaterialTheme.colorScheme.secondary + ) { + Icon(Icons.Filled.Add, "Add a new connection") + } +} + +@Composable +fun HomeScreen( + onConnectionClick: (Connection) -> Unit, + onLongClick: (Connection) -> Unit, + uiStateFlow: StateFlow, + paddingValues: PaddingValues, + navigator: DestinationsNavigator, +) { + val uiState by uiStateFlow.collectAsState() + + Scaffold( + topBar = { HomeTopBar() }, + modifier = Modifier.padding(paddingValues), + floatingActionButton = { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + MultiUseFab() + } + } + ) { padding -> + val haptics = LocalHapticFeedback.current + Box(modifier = Modifier.padding(top = padding.calculateTopPadding())) { + LazyColumn { + items(uiState.connections) { + ConnectionElement( + onClick = { onConnectionClick(it) }, + onLongClick = { + haptics.performHapticFeedback(HapticFeedbackType.LongPress) + onLongClick(it) + }, + onSettingsClick = { navigator.navigate(ConnectionEditorScreenDestination(it)) }, + connectionName = it.name + ) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/screens/logs/LogRoute.kt b/app/src/main/java/com/wzray/openconnect/ui/screens/logs/LogRoute.kt new file mode 100644 index 0000000..4624d7f --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/screens/logs/LogRoute.kt @@ -0,0 +1,30 @@ +package com.wzray.openconnect.ui.screens.logs + +import android.widget.Toast +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import androidx.hilt.navigation.compose.hiltViewModel +import com.ramcosta.composedestinations.annotation.Destination +import com.wzray.openconnect.ui.MainGraph +import com.wzray.openconnect.core.viewmodels.LogViewModel + +@Destination +@Composable +fun LogRoute( + viewModel: LogViewModel = hiltViewModel(), + outerPadding: PaddingValues, +) { + val ctx = LocalContext.current // TODO: remove this + val makeToast: (String) -> Unit = { + Toast.makeText(ctx, it, Toast.LENGTH_SHORT).show() + } + LogScreen( // TODO: remove dependency on UIState and provide all values individually + onPauseClick = { viewModel.pauseLog() }, + onShareClick = { makeToast("onShareClick") }, + onSetLogLevel = { viewModel.setLogLevel(it) }, + onClearClick = { viewModel.clearLog() }, + uiStateFlow = viewModel.uiState, + padding = outerPadding + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/screens/logs/LogScreen.kt b/app/src/main/java/com/wzray/openconnect/ui/screens/logs/LogScreen.kt new file mode 100644 index 0000000..75f945b --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/screens/logs/LogScreen.kt @@ -0,0 +1,173 @@ +package com.wzray.openconnect.ui.screens.logs + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.text.selection.SelectionContainer +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Delete +import androidx.compose.material.icons.filled.MoreVert +import androidx.compose.material.icons.filled.Pause +import androidx.compose.material.icons.filled.PlayArrow +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.wzray.openconnect.R +import com.wzray.openconnect.ui.components.CheckboxText +import com.wzray.openconnect.ui.components.SimpleIconButton +import com.wzray.openconnect.ui.components.SingleSelectDialog +import com.wzray.openconnect.util.Settings +import com.wzray.openconnect.core.viewmodels.LogLevel +import com.wzray.openconnect.core.viewmodels.UIState +import kotlinx.coroutines.flow.StateFlow + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun TopBar( + onPauseClick: () -> Unit, + onShareClick: () -> Unit, + onClearClick: () -> Unit, + isPaused: Boolean, + dialogState: MutableState, + + ) { + var isMenuExpanded by remember { mutableStateOf(false) } + val followLogs by Settings.followLogs.asState() + var isDialogOpen by dialogState + + TopAppBar( + title = { Text(stringResource(R.string.logs)) }, + actions = { + SimpleIconButton( + onClick = onPauseClick, + icon = if (isPaused) Icons.Filled.PlayArrow else Icons.Filled.Pause, + contentDescription = stringResource(R.string.pause_logs) + ) + SimpleIconButton( + onClick = onClearClick, + icon = Icons.Filled.Delete, + contentDescription = stringResource(R.string.clear_logs) + ) + Box { + SimpleIconButton( + onClick = { isMenuExpanded = !isMenuExpanded }, + icon = Icons.Filled.MoreVert, + contentDescription = stringResource(R.string.more_options) + ) + DropdownMenu( + expanded = isMenuExpanded, + onDismissRequest = { isMenuExpanded = false } + ) { + DropdownMenuItem( + text = { + CheckboxText( + stringResource(R.string.follow_logs), + followLogs + ) + }, + onClick = { Settings.followLogs.set(!followLogs); isMenuExpanded = false } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.log_level)) }, + onClick = { isMenuExpanded = false; isDialogOpen = true } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.export_logs)) }, + onClick = onShareClick + ) + } + } + }, + ) +} + +@Composable +fun LogScreen( + onPauseClick: () -> Unit, + onShareClick: () -> Unit, + onSetLogLevel: (LogLevel) -> Unit, + onClearClick: () -> Unit, + uiStateFlow: StateFlow, + padding: PaddingValues +) { + val uiState by uiStateFlow.collectAsState() + val dialogState = remember { mutableStateOf(false) } + + Scaffold( + topBar = { + TopBar( + onPauseClick = onPauseClick, + onShareClick = onShareClick, + onClearClick = onClearClick, + isPaused = uiState.isPaused, + dialogState = dialogState, + ) + }, + modifier = Modifier.padding(padding) + ) { innerPadding -> + val followLogs by Settings.followLogs.asState() + var isDialogOpen by dialogState + val scrollState = rememberScrollState() + + if (isDialogOpen) + SingleSelectDialog( + title = stringResource(R.string.log_level), + submitButtonText = stringResource(R.string.submit), + dismissButtonText = stringResource(R.string.cancel), + options = LogLevel.entries.associateWith { it.fullName }, + defaultSelected = uiState.logLevel, + onSubmitButtonClick = onSetLogLevel, + onDismissRequest = { isDialogOpen = false }, + ) + + SelectionContainer( + modifier = Modifier.padding(innerPadding) + ) { + if (followLogs) LaunchedEffect(uiState.logList.size) { + if (uiState.logList.isNotEmpty()) scrollState.scrollTo(scrollState.maxValue) + } + + Column( + modifier = Modifier + .verticalScroll(scrollState) + .fillMaxWidth() + .fillMaxHeight() + .padding(horizontal = 8.dp) + ) { + uiState.logList.toList().forEach { + Row { + Text( + text = it, + fontFamily = FontFamily.Monospace, + fontSize = 14.sp, + lineHeight = 20.sp, + modifier = Modifier.padding(bottom = 12.dp) + ) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/theme/Animations.kt b/app/src/main/java/com/wzray/openconnect/ui/theme/Animations.kt new file mode 100644 index 0000000..91fcc5f --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/theme/Animations.kt @@ -0,0 +1,59 @@ +package com.wzray.openconnect.ui.theme + +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.slideInHorizontally +import androidx.compose.animation.slideOutHorizontally +import androidx.navigation.NavBackStackEntry +import com.ramcosta.composedestinations.animations.NavHostAnimatedDestinationStyle +import com.ramcosta.composedestinations.spec.DestinationStyle + +object SlideEnd : DestinationStyle.Animated() { + private const val DURATION = 200 + + override val enterTransition: + AnimatedContentTransitionScope.() -> EnterTransition? = { + slideInHorizontally( + initialOffsetX = { 1000 }, animationSpec = tween(DURATION) + ) + } + override val exitTransition: + AnimatedContentTransitionScope.() -> ExitTransition? = { + slideOutHorizontally( + targetOffsetX = { -1000 }, animationSpec = tween(DURATION) + ) + } + override val popEnterTransition: + AnimatedContentTransitionScope.() -> EnterTransition? = { + slideInHorizontally( + initialOffsetX = { -1000 }, animationSpec = tween(DURATION) + ) + } + override val popExitTransition: + AnimatedContentTransitionScope.() -> ExitTransition? = { + slideOutHorizontally( + targetOffsetX = { 1000 }, animationSpec = tween(DURATION) + ) + } +} + +object Fade : NavHostAnimatedDestinationStyle() { + private const val DURATION = 175 + + override val enterTransition: + AnimatedContentTransitionScope.() -> EnterTransition = { + fadeIn( + initialAlpha = 0f, animationSpec = tween(DURATION) + ) + } + override val exitTransition: + AnimatedContentTransitionScope.() -> ExitTransition = { + fadeOut( + targetAlpha = 0f, animationSpec = tween(DURATION) + ) + } +} diff --git a/app/src/main/java/com/wzray/openconnect/ui/theme/Color.kt b/app/src/main/java/com/wzray/openconnect/ui/theme/Color.kt new file mode 100644 index 0000000..736b07c --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/theme/Color.kt @@ -0,0 +1,11 @@ +package com.wzray.openconnect.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/theme/Theme.kt b/app/src/main/java/com/wzray/openconnect/ui/theme/Theme.kt new file mode 100644 index 0000000..e76827f --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/theme/Theme.kt @@ -0,0 +1,70 @@ +package com.wzray.openconnect.ui.theme + +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import com.wzray.openconnect.util.Settings +import com.wzray.openconnect.util.UiMode +import me.zhanghai.compose.preference.ProvidePreferenceLocals + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40, + + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), +) + +@Composable +fun OpenConnectTheme( + content: @Composable () -> Unit +) { + val dynamicColor by Settings.useDynamicColor.asState() + val uiMode by Settings.uiMode.asState() + + val darkTheme = when (uiMode) { + UiMode.AUTO -> isSystemInDarkTheme() + UiMode.DARK -> true + UiMode.LIGHT -> false + } + + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = { + ProvidePreferenceLocals { + content() + } + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/ui/theme/Type.kt b/app/src/main/java/com/wzray/openconnect/ui/theme/Type.kt new file mode 100644 index 0000000..a7b153d --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/ui/theme/Type.kt @@ -0,0 +1,34 @@ +package com.wzray.openconnect.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/app/src/main/java/com/wzray/openconnect/util/Extensions.kt b/app/src/main/java/com/wzray/openconnect/util/Extensions.kt new file mode 100644 index 0000000..ab5b929 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/util/Extensions.kt @@ -0,0 +1,10 @@ +package com.wzray.openconnect.util + +import com.wzray.openconnect.Application +import kotlinx.coroutines.CoroutineScope + +fun String.toFormalCase() = this.lowercase().replaceFirstChar { it.uppercaseChar() } + +val Any.applicationScope: CoroutineScope + get() = Application.coroutineScope + diff --git a/app/src/main/java/com/wzray/openconnect/util/Settings.kt b/app/src/main/java/com/wzray/openconnect/util/Settings.kt new file mode 100644 index 0000000..b12e034 --- /dev/null +++ b/app/src/main/java/com/wzray/openconnect/util/Settings.kt @@ -0,0 +1,74 @@ +package com.wzray.openconnect.util + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.remember +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.booleanPreferencesKey +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.stringPreferencesKey +import com.wzray.openconnect.Application +import com.wzray.openconnect.core.viewmodels.LogLevel +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.launch + +abstract class PreferenceFieldBase( + private val dataStore: DataStore, + private val key: Preferences.Key, + protected open val default: ValueType, +) { + abstract fun toStorage(v: ValueType): StorageType + abstract fun fromStorage(v: StorageType?): ValueType? + + @Composable + fun asState(): State = + remember { dataStore.data.map { fromStorage(it[key]) ?: default } }.collectAsState(default) + + fun set(value: ValueType?) = applicationScope.launch { + dataStore.edit { if (value != null) it[key] = toStorage(value) else it.remove(key) } + } +} + + +class PreferenceField( + dataStore: DataStore, + key: Preferences.Key, + default: T, +) : PreferenceFieldBase(dataStore, key, default) { + override fun toStorage(v: T): T = v + override fun fromStorage(v: T?): T? = v +} + + +class EnumPreferenceField>( + dataStore: DataStore, + key: Preferences.Key, + default: E, +) : PreferenceFieldBase(dataStore, key, default) { + override fun toStorage(v: E): String = v.name + override fun fromStorage(v: String?): E? = + v?.let { default::class.java.enumConstants!!.firstOrNull { it.name == v } } +} + +enum class UiMode { + AUTO, DARK, LIGHT +} + +object Settings { + private val dataStore = Application.prefDataStore + + private val KEY_FOLLOW_LOGS = booleanPreferencesKey("follow_logs") + private val KEY_LAST_CONNECTION = stringPreferencesKey("last_connection") + private val KEY_UI_MODE = stringPreferencesKey("ui_mode") + private val KEY_LOG_LEVEL = stringPreferencesKey("log_level") + private val KEY_USE_DYNAMIC_COLOR = booleanPreferencesKey("use_dynamic_color") + + + val followLogs = PreferenceField(dataStore, KEY_FOLLOW_LOGS, true) + val lastConnection = PreferenceField(dataStore, KEY_LAST_CONNECTION, "") + val uiMode = EnumPreferenceField(dataStore, KEY_UI_MODE, UiMode.AUTO) + val logLevel = EnumPreferenceField(dataStore, KEY_LOG_LEVEL, LogLevel.INFO) + val useDynamicColor = PreferenceField(dataStore, KEY_USE_DYNAMIC_COLOR, true) +} \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..345888d --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d2488612dffb9fe28df9900ceeae828c8c45aff8 GIT binary patch literal 6305 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
UfEYX-Zy+7f~+n`As58vZ^4@hRzP8SH0M{gbeY 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 UPYAW(<)n+E2vGx<%UT5f4^%MB3jhEB literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..4cff1a2cb6b722796ee61e6d111aab1f00d36f2f GIT binary patch literal 5998 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 WiXy=-=F%%i2Pny@%ho{5L;nXQk|^B( literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b71df2f0b11fd4f44a6285f15f83045933d291fb GIT binary patch literal 3790 zcmV;<4l(hGP)^q7=5JX3#1E_IDB&eum#2BMu7BwhtF`2|nOqr@UsgyI5QfFe8N;F2J zVj{_COmG`ZV+2LSxX-wNOB8|&i$Snu73gNZbML!N({u|u^JkuQt6w+o-S>U>d}q1m zsiXh%L-#+x&vU5ZgmX2-+?_gg(v_B$HsMqaGtSjezdbUH|Av49s-H7wj^~USGh#zR zLSh2~0%H9A{RimvdLL_4CX?x2MMcHw^78UyMMXtNM~)nM2!C(Xh9dOPL>`3z1J_ds z8M3!#Cv@-LeNIqN&{F{H_ApNep}O0*Z|}Wwg(&#nQ+o(7c-K>>P9^v2*KZ}H;%RS27BOo} z`lmc=-_i1VNUQqHnKO$A4<7tA?!T|e%AqydBH+y6q0{9(dh~d`O+fsZwq_KQw0+^F zOP4V|$ua~?eCI=_laJv~HQF=Z<;#~p z>D8;(d$_jN5eY{GST=4KFJAmJCU~o@hndZ00hT{2>uRX1+DKQ*OX#NYj#%qpuK;>H zFqi^8y~)qrlboEK#Apwhyu7?+k&%(hHA}E_w>az(U;(=xIdUX<*sx(=I07%$Rs(Hn zGEqh4J$my{DqX&N8$atXoS`N?2;ki8gzq>v>nPkifL4v3Or8Dw3H~I8vXG-^<>cfn zh>MHcjK3?Nuv}_OfWNz}UcI{a{Q2{~!4`3JG&VLGKmYvmQE$BQ21loQ4EB5} z%N92+#mq~|qokxby;G;oqa01hz!5FzT3Hb-&Q7JGntKAY8Q@3mx6$miws3r?|DG?zVthA2TlBEUb74pJ& zGvvkJ34`wyq;P$dzaOQ&FrM7p+#cxIyLRoGF>&I=?U;=71J5K54x66&`S}|oA|j^P zBf#K!^-o>DL<@5^3D6?S*n-DzE*NqCp){*!U$L57ez{0LmXuHpf}q*Vxq|(Kfnz9= zu*Sz@2GQ84p5)@P z=j{88t{BUjH4iHb>KH-u`^J*DuP?b84ALoaF!_dt2C4*!)YE6_9|c81 zS|-gJq=i?u#`j6XD7tGX8F0U&(3+l}o;+pBlypp8t4d_g3l}b|M8=zEPd*HQwZG!X z_q6NAc^P#?gwZsQ2kViz*2F$dzYBRx=vV>JA*`Csje-DM;^uE<^y2O;szc?^7BE2s z>?=GU_)tP7r0bVBWTeoiQM4Wxn_F|4aOrW;5mY(1J zDHYdNS;C_t!45kuv=_}D6h~fOUP8mx5-@R%q%A^CO$}{5b&ftdTOgv7$;uZvQ~MiS zDD&mfTU>SC5j#!B2nl;^=^prVwI0Xgz zi-l<62bxdbHQxQj-_Jh|SdC1;6~h-RlLw~@v`2u=&jiNp_=M^j+51>R%_Ram;@%0< z3HgIu5z}o=FXA|E{mg5bK`_jM?!iA_!`rCWCmWh~scT10K3}(lkOM6c6Rv z#@?awNL5uOJ-L2A)i&^4$Pp|fEhMuwv*r$^E}c7IE;mlhtq#mnk7q<6sg+v@KqiIw zQ4p}+Zzuv)RaG?lhtEJxhD{j?W$5I8KTerOetv#raN{gszZkHdYuMU-$O~K$^0iu_ z$8y5z9iA6MVZj~kTR=v&dRVzzXlQ6Nf$FNN3m%@Hb|u6XU;<;)zo2@qI8|++ezy|;jSg)e75Dy6nA7I(|UcGvC3sQ8#gPb^N`&U$2TW6_X znu+M?kA3>kOM?eKFn+6SzT?bgdVBvx;k2?8k`Z9wm?_=&3;AOQM7ve!1UK&8&C`DR@Q4QSj9IQ z0xfLfdaaxgPK*)k=}i0P_jQ<07!nq;cF2(5KXL9{0T*-COu&-N&Ye5A7B$91M}ENN z#DUygT5|lP458Y}%T2u63+SO^SDFzOLGy-22@+{1FVlvTg>R1bULsNs zh(0F0zV|0=;;|dU%nXLh0O61tH~|prBFh6ACQU3mE6vM&viyyS^zw72?^2@0>O0!h zFa~VyXD(d0a1YA|qh1lAUIG|LDP0qxOPGcI z$}IfCtIw?!ewWaqE5T&g7rYlNSkQOHiWS>YoV99fskTaEJt|b}4N8A2r`PuXi}H;P z+UDJ=|0852H!cdiYy>z_h=-oON(!S8lnm^&s*1I@3xnTPE?Tr`;>L{|FKDaJ%`MR! zwAG2&USjxu^UXKYlai7?5VeiXp-8A*7TO(jt>g~9hY(pn zEFp*@y98JqmNjp055c#ywbRnl-bCErhOc)qRJU57YAtlRL*tFT-=RZ?mZHg(;)sND zY<`HU^KafUQfVcU-t8(Xs%#LO_s*UMdOXOBy7+rgh`*U20n^GkBB?Y4P##OYt|3`K)`3bkz0sETD+7cKB_KZ$?JOlGxbTxvW!rtqw&* zHGEaOUA-T`O{k49w6?lxt=sK7z-hQ)eC*hGP((adu3R}BZ``LM=?#aIyQ()X@~unD=~YQB z9G<%qXe}UN9?Htf+P--4Vg}BjdBypCn0o2$@a?3sv?C{Wqy(n{*u|fgvf_3OOUoVg zi8qSCfqnY)8Gt&fAO3$t6bN})PlBjYRZ>!td!z8izt88MKecY%y3-)QGU1hG&|DgD zlzFJP^$$xxVUq0#nKPISM=UXrx(z_Zzsr(T4qizH#)Cof3iGErf299rz+fJgfVBl> zG2cvxiRlro6nJqhe8h|w6Rc;}wIZWdyG^O62ikuA2YVOCSI!FiN&o-=07*qoM6N<$ Ef&$$_DgXcg literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/app/src/main/res/mipmap-mdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..11c72b22a5895149055459019e57973ef801152c GIT binary patch literal 446 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p|}=Ft&QSIEGZjy}ioF$zZ^9FYWfaGl9LY RoPhDd;OXk;vd$@?2>_ver*{AV literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb7e608728b99550aef5c44a49babdd7da96e6e GIT binary patch literal 4816 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 Og{P&ar`n)wAM-!-5pli% literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..04013bb54b039e4c57f7d928b5c7b4d7f7c52f16 GIT binary patch literal 3867 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 X)>Mb35^urw00000NkvXXu0mjfeTISg literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..0f79019111f88e325baa0c9f1e6f61dbe7a3abc3 GIT binary patch literal 1304 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$!4M=t>=)PrOV7c$<;uum9_x7?OFM|OO%f>eQ z7t6HTZ_6;)N9^4BzE9afK~SPmb)6e$4P#>^3)8}e15PoQSy-O2bF?rqaTodu3(SyL z5a8m_Ib!PTkWkm)prNoq;JOK8<4?v>#iOAynl?sr$^aGx35=hEVwcGafA|P2@fbW^ L{an^LB{Ts516hev literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..84c861cadf0dfd36102d13fe1c9de0b173140ced GIT binary patch literal 12047 zcmeI2UfdRGafbrM7q=F7SsdEM-QC@_xVyVM9KV~nKj7Zp z+>0bLnM{(&HxqfDPpFEL3WgkiLtFJ9k-HP5fKB+Z0p(Y`n*fmGlA`s)33 zXf>45!@JOi;DNDpw6?K(f62?r`hAog;JLdfKRi4vD>}%e7Ng@D8Q#O;9J#)pZt+-q zZS}Y*TBPm#pbcO)OhK?o%pg=k#|NOv0tonEv^&Jn0EYNPKqU-(Kt~5s2Q2kyZEOq&Kv;hD(asZmPB@AFhe5UzYM0gx!*?OX5!3sCTH6Q0gUg*9NXO*J(2ylA|=jYf{g(go-O z8>Br2E6`G1wS963#g4D89XRLXV0zl5$?K6iy8o@~z2pKa#t!^V0ULAsN4If8&TcjbL5Z1ZWbPE$??t-75Zb=!LdW#OqnOjO~pYw;FNu*O^$u8cuDHUhN(m z`LWDic%cE>FB)-kc*8wy3OG>&Ky}@eRE4&SS_h+mZ-wB~Hjc8rN0m~wJ4t)h*IO9m z9Og7rC%L#4toTi(G(~BRh2wpoaHM}_e=gr+?6K-~JAD^J#41jr4X>{dqitkh7Sm>F z+s-JHR%zLrshL=y!fy<*>bf&XHJsrrfe!jrfn036H;v~SgI0v2>u~GHuJh|>*ld*p zR7sQonG^h-w{38mxFExHOD@DP6rq zq==e<>M$RA)6}SMowy0SglD&(O3aSN6fu6bpKz)2*pLkfk>$ku1(4>zfKZ@n;%|$& zZQeU!Kca}4_qH=F?iyI@8cF)IClm?4SfNU$lf7tRpe@A2{6hYf6%;;12oK>@W0ivW zdgoXqJ%*Fi73)%|VyT(~z1d2w2fi`euB~d`yPYQvb#MU;k>(DLwZn&ETIUqE!qQ)c z#*$W$nd`Thzb`9^cf$M4S0)URab;2-c6a1fgsvM(h@on6?r;i`#ao2;20+a!4NYTz z%I`cq?T(jop%8x=#GFtDRKRhOpy6kKi(3X?n)M4@wW!A!D^@J*Wc`MRPpX-~A?W#a z^A>Lo?SW=#9nOc5NZ=~O(mo1-xG%|AnQ_-C55KM!GZ=B#u@PbV;#ygGJM8@^FP9jM z38D1zYBF%2^G{)NT0`)2X*t6H6&u>Lmz-`XXBu8LPX^=nW6Vlf9d&+Na|FXB8^x8-+*gvUqJMsS9PA?;vw_SyVlX6`(LgP9yZ2X z1)u_xKpsLcGgYgNsf-ES#ysJWy7kCgJif(-2gYFqN#HcdX8q#NNW?Sk7N>yv^Gj_p zVdCzPNH*T@x#Yfw`lh-z!j!}aKYXs&`*rVyn72jc?sn-0pwmwxDMSSL(f%U2)1?Cs zKUeU)Y=XFUaPH<4o$P41Hzy%1?cdM?59=>q$wiTwnmIQUwL>@@2>_8+Sgq9h1Z*pEGRqCTJvP7`ogf}dC4DZ_SK8p`nXH-@d&qS9$eLMKZlc{UES%$7_Bqc}coM=feibADi-WYb3}s zvbfx~KGdx7HG|V^!9yrcbnc@(L0As3El3^}%VW7PDi%hj4{;yv+23@0-r@{aq0OVH&WjycSYO_P)tCQEddE8#F%zVI*? zm8PRW?-Tv90Z+ZMl>kob->yEH~2hvy)5;}~muD6Xl*VQX#2y6?~ z{D1Ubjkfx}q9<`f#Xx=ROLS3<_EZr=e=G+E#Cjsr<`V?@gELhoVKf#=sW^ujaFNOu zX<0JZXr%`pY9h?JXGsc|xZLlK&_p4(cIYT_(jurnHQGoD(0;vntjSC4udJ=+Hqpyl z9<3p}&11$J|Mm(j=X*<9Ea;+Md6e%sQuZN^%xquUv9T57AEsPV_x?| zOM-Sa`rR_+!{7K2G%1X^lI1cblmGIx-j>J6hTzV$n}A&+_M1r;}< z!7tNWMMB~_J$o~j>8CT^&X}sW#7#vH%0}I8V}x8@a&%5nhY~YY$i#^Hr_&EJlBucn z**D)5FX$gdQ=`>Vjgrg~2CwIJ%XIla*O#Y5R&ekLJuyHk>5{WuQaBB`P-AhaThD6y zA|gCHn{*w)y)wEPQiCtO+6AY7~kt503Nl|&!^G`buA>%5qgPNMvJkR9AS z?13J4b@j*>F0YiJTSi&q6G3e}|J4E?Guu8E4$Cu0dwhVACJ^T(QnCn6^e2JATOZdF z{6Iw@r-%YP!j^;t0&AhHBWAwd)E3nht|1IsU>Zlj#EavvK*UFQGR=i6B!VFMAis%UR z@m%3BDgdjDD^nBN<_E!S^?^LZw>oHJAq3HdC1Ot@St=DfPmyTf=3dSrKf8D3oB^85 z0{xN@KM*`V`!hj3=}9)ddy7QS^_al!ete5Wbf)R}QzMdz~cc)R)$IC=^*F1%Wsz`VczaU+kW(LEW7p1|YQ5Q(k9b2RI zKO6r1B{6TcWy4G~Jz;FxTAje$DcEnW8d|Ifz@2$F=EJL2(9`+oT(-rzHo68nZiN0U zM7}Ohf9G=qdAgHA`3GA}8D%ooETQLgTyok=D@PdC-Y*~?iXyD&hXBaZY37yazC$D` z{!zLO;rprEx4-#Uk6J^D>5S*76L_+k{z}hP5Y&`~&2Yi;pr7u+@yW_1Tu4`Up8)d= z)o#IYvMtbw*DvfqE@Kdt)*KU3sr4pErwGP1T?^y18X^eN&s_>CF1^v!WfZ};vw4MD z&#KqU#SXa6P%!9nuP9bK*n||^>2A)eHp~9~g-fIPDnR1xsnmR@%HO_DKyr3a8#W>Y zgs|J$Mf)T;zEA{|DjMTVT<=Z1nK&5aG+v|#myh~<>@x-scn;Fu1PxFOvx;U@gRlMS zZOHCIZTJ)Pp`AH(3yoB)CNlA#uBj~5#5_gFtZrX4?jE1GyhLpt$VdY_v)Uu~a};(1vlhWQj56;K}WFhRAJ6y1G)k%&nVe z{K%&#*Ag+C6-p4jHSNx|oV2PIt78N&Of*@47c?XGQTXoE({)$y@XokD?)MS;)1YaG zc7B2r62t~*-$_r*eKD(QzkC1BjasDR$EgiEbs(P`#$fC4%mhw14t zjt>v@-8Bc8zZv+)UtENSdAoQI#nekPHa!#95BX`cy1(cU-_}+KYq@FTE;2lGfxbXn zT1m))(lBVlsQiibDYBXRjiPxN)Hy~@;?y-1T#|IG@mWqb&d4G8WJ|rbE(5@bxAOYuB|*pp-c(&x`VR{*|tNdm#0Wn zWG$1mEZGa)c(;OH?3BCrn)SUcq}}?{peIi)WP_u# zn94I)z-)x!xF~DW(Z9Wh=r$`;GS5E^1-_YeiP!!fqM!6XtqJw*ntT+Fo_V?P=l}Qm zqMgenpfFr#ZEs-l#=T@{_M~j9ftVI)$ zh)`aT`A)QI{jGg-bzO9=%M(nXD3n%sVRYw}2ivE=L7J;RMw-fXAMyrqYO#FZVj4nl zz}CkfS{{AllPk1Tk&0`YBG1dFgL~ZvKTv@fAC^+j4hyD2DcFe_85wEKERwDpcG{A* zm%Uno+t~91JB`Gplv*ouHoDDRjPk6Rq#Cc$RHxUTL4ObTn$zBHdpuy+U2PU7&mf8Y z7DR?wR}3ZzRHseb$0Z_W(OFB4w>>f0G#fL^6#w)c$R3oUcAcy9%9emj-y~ z=%`6!?3_hPY zL(_Flnx0u8*TX-0fr_8Oj+LRXw2l6xth*oVRz+T*PO)@6*#^fp+@6*$Uu-z>x?{}l zk{^14Z%atL7C6B;b1>U3b$NMR=@Yv1x+{)!jl6c_9e>Emj z*|1(?G?gLsaEL*&4-s_NE(nbKy52SOAvUPb3{*|lEQb)TKPou9L2r7z&4q!Zms>9^ zG_I=c%*v`dO(D(#!X}kW>Cp?Aap$5Pq$mNZui@C1c-ESo>{b6VV9CQdb~7|M6WGRHC@k~9D;#K z>m;`u6vU<$JxMfhh*hM-k05LksibJ)Wn0O&{_W-CsrgZx`-%Yot6gSzQ2g}Q!MDi< znkLUqL5usjk~JG_GFNHMNKz-qLCn4LttUJKfgAZ8!$skoP)8__v4=Y@m&g=n$zvpS zO(n4dT`GI%Q>rH7=dwrdss1Y;4T+uz1!vQ^07AXdjNZ9)E+O!IhsDGwNzhay`6j)y zZdP~h41OIP>#-e2&7Y^+r8j$AkC3Dnu&bLaTdKJcC0Vc;WIXjQgIci3A+UK_HyJgG zcSB*CWIaJYnmbgm7he=2{J$^U4W4kuJTD|vTi3zAdvO|C=+uY5lbB*++N$$+s4sv{% zPz}1U-k|uSlhg3ejKz(Dn^=I+zL1v!ax=4GyQV*Nf0|va(ZR_XpB(B}Ns(23+=nK! zM*^w@jQZoH1_z>QjO>0E(v|*f+%X2kKrCiDYkPyA>D2D%8NxVh(|j?LFd?C}4vnfJ zRQ5F*A0ivjvisX@BIm*upQ#0r{}pyB&>OK*6OQh|N@Rs>tM|F`V5RX5A6G$_!Egqw z6nbUOXt=1IbNz^>G%D=T0ZXHhRn!wHy6=X1ay~e-bHFIgIEo{Y7s6IiYTfsekBmx7 z%O}u{HPUBPR&}848&ro&kQftYp?*`7oRsD!Jx5&1o*Wb#p=cbtyT0p!lLj2sVWlSk z%n}N(BK)C!w70`B53yJ>T54Q zbFGtKEJ~=VtH@Rt`bx>oG$k(#a&*+YUfsaq^`Vi*hulgf*0>@OL2=Z5D!dQ*H!t4YO zxx!5Ed8N5y<~n+0`=e@OSdvoPeoguY9R9p1e-em&%X>Q%hjvxWKUuXzM$+#k03ev6 zS}~Sth@UZ}(mMGCxxzxU-m^NmmYmgLq_?|Z9tI8=S@*lHBz3;!zLISkEn+e+NAK`C z<6;9a?*hz-Uu+f!c$1uAl7VsB}U#EN-|IohzJ- z%Hj^jeHfankyP2|D`E<8<2h#J3vqWgi$tfl_TTkZldII?v^8I6g!i!ME#Lex;=^P} zaqA4_@5e~D05^La;a#EA+t@<+-f{z_pS1%6!T`m^={{!_8i*w}eJwn^NqfjH2E4S} z*%aADDzLiJMih6|L33I%F{pEudcgRa=o^Mf0+o7qVueG%Vpq7)4I|$ zm26+G30pE;wP@W0y6Y80sp2Ihg(kpw`a-Vus{_#J#pazX)89S_v&8}meY*E5hnCI( zDM4SI*U6J8pF|8C6^7~lYy~DVByHPg2tiBimvb$DN<07I;32W`)h=KnN!!dH{xz#1Wrg|W2zLtbwHU}_}4Js1rr6ufCWDsGj z=$Q!btLqSbHr)Q2<#SgickUboPVthJpy4R0=G`g|E1Y=*A|UHtkzXl_TQpkaeb z{gxC!R9LRFZ}2iH0lkrrxLp}freR7!B`D1UdoVIyHX8`+nk%1O3dRKmTHjmd=;G3k zeE|hWA_a(oRs`dfc!^KCCw2TBijgOR1?2NuD@IOl$wn>UQ!eTA>QvJAHv3Jl1G2jD z3s)W`_lM`+NakNpd{ipN_BYGk&^_?_eQz{el%krS7v;;x4%d!gYD5E<>@&lE4O35c zDoS%X8E?pDv^)0q2#<@tkk3pC{9qxdZMbiReCughTXhP^zv~FJ9AAsW%-=lF1|fg2 z3KPYb5PY6}z7O90K<=(+ZQIL)G7nnL0BtYdkjZQ&M?7#ib6=n6nZ>gS&IvZG*`zIb zOa60bwVTYt^d%#*Tlc_dFIMMz+kZn?`;1^4N@y)EQaru zkvInAHB-~;s?1x)`K6p|O(u|Kftpi`%uGce?~11k^XK!pcj=#Yzoa69Qc4w(-XXRO z#=SA>j*8KXJF|Lpm7&}!WwOa?!(#?tXFNP8OuGkxr_@~8xqwP&ZHP6tABg|3Vbap1 zrqRl7RN^i>A_Gy|f?0%H%~ob|^bPzg{X3stl^|N=I%f%sX=2&_6wY*x7c6y^@7&WX z5BV6X?~?^TDuAI?zE6sEh8y~NlozPx3c zt6~kkxqphO^8k0^T{$l8VKmANS;(d&DaJVac|Ud9c=rZ!X<}WdE44pd9wu?8@fH7m zp8b6r)r9%tEjfj{Hbh8w`!Nu|a9Xm+*Dc5F0`4crAtctxu&E6kTMzE+C$hlCGJG)c zP5IJ5qFj!Gw_vhD==$7__GHH1@+l-o@qqa24gVFTLxop7#{Jmd+oG6U@0!c2zCeL%l(f z;zst&xCN0K-f!ARNFP|mf+w2?oLy(H#n|K$TiB*>BVeU*NS8(Yb*O^wn3@c`(4v;p zP3Etg_hb5)GIVx~f0CyCwXD>puPJixJ}gdMePv>$;#`cm5|fZ}9TRH~+1BIBUFO-( zdEm|8qpmwuQQkGQzOH9PXtuVLXQkW(e=2tZ612RIuHEY$g&};F=6!}cgBx6xk|z22 zZF8j1?Vkc7x-a-!n#^s1*g{X{oB`L=LbVs=w~dnJe!j|Q1}w57*B~RP%6PtjIWt)( zbGf_mEP|T1aPz-gF(PJAN`5(KxsE2aB z^0lYQON+g#A6f~06P|st1>MXw5RgvN6%dldDlN6GHv4l;`L&dOa=NJ(b$87%WsT+=o~+2@&MzuR+U!dS#tmbbOS0RC#SO2MP%T z5_fj`OI1drJBn+i1rT1lo-KTbvVv^Ch1|~khN~bFgH4gk-*dKACJD$*K3k}pYC$HP z-&kqrlN^QASp!$YV5IZ7WheXDQSB8T)7)3+83IVT$wKYIxId3z&dvBtvcHYr+fkGHM+_6- z>-%_ywpN^3IqJU(Taxa??msVnW5bGqZ=e?<4M1yUz_vmyaX-uJ(7H;>dLvwcW1;Gn z@SsuFd1SF6XssX!3{@K38a!~An&v+x6P_T|Lcc9kCb&K-bQ6&(?@kih3h8IRc&Su5 zZ*5p>FK~ZKd9B^hNowO-I2z@>*VqpkoFnGcUvsTqGsqp7{jaAIi~3|1GY^ z*_UI>&AJQ{iS${6-{~rco*dkQ+SZ=ym(Jn>I%yHvIXnmI*1F0ROVurk0#xa87bI^* z`i4k9wNlBDeRsa-Wn0oc<+Nk&>&j&SrW7b@z-QUe4&}D_XV6IyYszHvSXQSi+f>fq zVHq3+wH7CqLo|H?BxE==YQARoHHSxuUh#d`T&-xZAvXs%^i$0Uz-C~rNTw9g`{Xkk zCn!?*L)Tj40NGw2F!Fj-fNNfXB){+eewapV_i~XtZ;saFvNyZl<_zZpB$_g73YZPq zX8Qm7$)SHRB56Kt1j^4I%ja)Yskg+nLv^yX{C=p7BNt#Jm7PZZ(ba`M&L&F6)@>92 zfhQF?dcl!KhqY>fL}IdT?M0P3r0$h=WuC7qw4fC7##6IARr7`W{MaZV3{p;63F=4gC z9HhUoJx>SZ<6CdCG-h9XY)cVnTO&A-NwbN!v9#`tvNIgBJ7DQBga1w(PBXf`$+SOM zw=g*ybmQ+k-p+NoWpPhtICv_$qM1d@V#psO4Qn{a8D z7-e({C0+21&=)5c@S-^VT)Yp~{}7Uu9Cgscfd^+-WkUfLVfk&!Mp@(;%fTQnyhyaz zaP0F2WMhj9h;$1Ss|qy(9EDXdcE9XGmjShRNvH%F8Eh8HWZg&KPs!^-9nO2Q%` z6{u=6DA~|atB-7K{y@XI3){mc`-YK=X}e@ZL1+_WCu3dJ5UiaO^bEeQImX}f$ z2dFE@ev`VQ>(>TBg>8cy{miz^2!3?!>38Dg^Fb;oHVA`C}NZzdqAaN{$+ERbyVPTKkYcP#1Weci-$s#bOfJhEPm2n6?wSlMqB!*8d(b7 zV@g8^B$|4mFoIuo2CPT_JA{Y!;2P|!^Wto{;N%-0pvcXgV^0XmA#p1wK|F&;m_k-1 zn{emA=gd`_)LE{sS?`iB1K$-kz(U9lzAJ)1vQq6#O>LWxl{4n$Av`+Rgz5b*ei`cR zwn7I!j#%a}wEWmgYugzYVVeP+YC`07D;2bmEa%A)(@D;?03FU#9PZ#!MvL!5z3Fr8FqAE#(05U! zv$w^wSOl}g`)OgIZzpZS$az^R93to`*aYYLIOatK=!47iDAj~dXD7QN`+Qkom!IJj zpIy_xz{_3yLm*TkV*#C{`ghQ+2=+e)&QHGs(@|;Vd%-pKTE)kIH>hpl7GBkcru;U*zDlF41rVH#s-^`2CMu@Y+!b+ z`X)8Ef$T^Jg!{`E`3&@^pH9MB#^RFUVvSY+4b+*2tMG|K@E>&BduP%|YF8@NZRhSfC@>cu$W55JPF?8`)tSl4Bz5vxfV_p+8 z{^Kz@ekMR<8J_wn+x~p@dgLl&HGYA_GY$a&74MF=O5Tmc>n=T_)f5Y~Ml}{pA#?~? zob+MwE0*r#^H!|h(FLj*@4GRtcbtgykqGq_-jC2=s6dZh_nsq&iNibk_QL-9z(AG# zwf(2_ZAk+%gblhifW7mGS zpQZ+ye`%7S^jWF$XsLY?u@>@@tq1m#S2`EqwtGMcLWkhVh)2e*5R0OFzw|xJj)L!3 z^_?x~>q4}aW#E4y*b~0{`tP&=5u>qS<&XZJ1qlNyu)}K39rp_E&2} zPT>}uwfN*FV0Fyq>&3IJ{>_bU*tKMrVrAcoLGWkaTD}I?NiDSkNNYauJFHob?vU1T zg&Eg2#$Q8Qu(RhU6Fios6<QeZc8ap4B_vz=9Y^R96nt~$T_!y0O1P>Yd4epc8iPLsDOSe5Z*X;ye7 z8ql#g*J=Aj8YbI!rJ#Y4&9f(YI+P0|LkC@O z=Tu}tN&l*LaiRU!>_^UN($0qMk2XpB(xfgCS33O?4P#EYuCCh$R4^`J)+amVOJClF z)Pzt}+@M>*WBd^OWlOae01HC^+sL_O0q}|!0 zyL10yIqY}M7kVCz8K~CzGd{u)I0iCzJeh;Gj{{YxR~9l*ogK5xA&Ew_c2Tw%R~_IRzY+@Z_~iI=stL zbP*rykV|Cv&7mduf(ZDL4^8fl`yxFPu`-d6A<<2IxGjq*<8#Z96mg9%;FG@GdQ4q& zDJp|O3aK@3x+5|rJ?LRiV$n#;X$^wM7LAhnMtLLHj%oX1ZndBGSrd9PV^1(2;A3@2 zT8vGM`R{GYeqz557odgYg$OwEt5o>ZtvrQd<=Tjb5Y9;Srf+%yLg3bMr-^2fY*}#`myE$u^Ji)i@kU&UDX@I+pDq;?ETyp zE@SeAVSfq7s_2P9?dq!DpC^1yz74VEg?Lp7u#$_;5T8Qz_ z{!|ye$hdYW>ug0etwtkMpvj2~mN7s=^f?@A+=*p`4drZ}LMxbsd3<+= z{DQbtx#}K&k^Tw&TPY_)KDA{Ph}=jK=<^G;vbviK-Q+=JharqSBC)rk5K=8F{oI#FB!FuS zBJS!~P{e(1oniKRrSAtCLuN6XdpcUS9u9mzmyl;zfS_d1@h3}MO4Zt)H+9*;HOK2S zrIYxGzlM;IzyV}>59Zn84&?6dD5{?v3{c>|QPhJ9Tk-D{n?_H) zQxD-Vh6l@@6SoQV06^lU9z2GE#XBPW|5g7NR^nMSsX>|QFH0BZJLnGhDy1Y@CT$8F-FSP#93;fs*QO z`p0@NQ^@BNJ2kFaEhJ=!baW*JC4);sOmY&qDy3>E@@~%FB zbv%psWI9fY+$8nv$zT(q)xOE;gS{6}`nQe1{;VK@-4}vF%>CKE)I!P^`}2qYp8qfN zk;F}_@{^}E_ZLJxIEz|lKlh-bxO?uTX!rw%l11Za=q?;#p*I;4SjJ_xX$l0{3x7{P6qN*@-LMHCH7iWGNvmFWJnoki%Idm@ zuz0yMYFmZSKH!ZDovbYD1#(yh{CP!m3pfhTce(>sbVisa%6p&%I~T=$o`*y*{a}IBbj9Q9;uO zM<=x1C(LK@9=wZ2U6;Ay^uef4WPBJbE26~Q0EAinfiGS9SJTfsXzW)+_6HyBS6V`A zE22*C5M8v*Q*{#l8XE+eJu-cv8!>$!`Wh{xZu7X4f1qMQpaD(G-J(&C#A{+!TM5a6 zb93HGC&r>-5*XpA3x4HxC+dR@;l!~mukSo_znAHne`Sg7V~qd;MvpLtemG3xK-{(v z@E)lou5-5&YfkLAn&iJxPi8AdkAXaDMTQfft9O9D*su)q^Y#8TqvBs^($hyjRGw^e zQ3A*s&d{kypm1L-Zc6Om(!o*v^;D*yx52)-3?ZL(>$;+9oSLqjh7Yx+;%$Ntkr|~H z<$@=x&vZKVJ8C$L+I&V!cEgx9?~j$+u>)FY|DO9uwPXhW$%G+5!QXqO6IR-=N6ABo zMyi;jns*GPh=2`W8KHeH7*c^l+r+W7SQk$i)lTm2I{moWQLkkFKAKM9{{!`1EdFU8 z9AODZ`yPpvv(nAH%+jC_2<_RbL#Lg1_ibG&#Ss(z6&%ILn}xXFvbPC*zS~(C-Tg;#;4WB9q(dZmgC*?| znr@HJ8%I5s@9yOyUtIO}aHPmKO>|?F^|$&=F-i9;j;Gaf+kM?C_F4P8x2a$xoIl+Y zxzfY%Mh4dmM9WJ=QX_o6>kk^5wfXM!t{U^IQX6P!f7CKN?|;m(xHxj!3X7)j)_ zwk>o$#o53a043((UWEki$ogZ(R%C87h2^@n;Z0xDqMu|Oe*K)Fj9l1+2WdD)y&PYY zQk4ycpETlK+uLLc9$%C#3kjlC#fb%C!z2)d;E#ErOnp~M-_0#fLTKQ3bNGyjP$>6U zc^JOAa6ni_^h@Byum$N9Q@$(hNAvGGQ-*Zob!DhhFEuBtP`WcBO086|-#d-QzsJlElyse8Ng$V*LxXZR zoAh>?CKTe$13myp4Q8nrGE0xpNz1M99lM)2@?H2*n&QL~ur&*A-Ln*}JbK>Bs1`|Z zv?*+D1Tk&pK^+0IsvQ{hp>|>`AFO7gT-}|Cld*a)CT>SDZE>IRr?eE*udZea% zYFHfpHgWMknCITEHcGkgfWNKxh<{GY*YUZ<2v2jAAN0WNbMg55JLI0a)ut{QUnaff z>a58?rC;`OL>i-Fj*UyK9Ct={}kVBzfh0H=m#Vb$yV&fe>e4) zQ=G8-g}7@cZqP<$nf|hF;7B?1=ulU)^gZU#c9T&`(0N>L>Spt*$VNWnI@i8*h~ZU; z&pIDdRM|>;o3zGKhl@bFa4<>P2G8-B8u=-QqgN8w-d*SdWY+=E4c@?zd(#p^2gO); zx0W%w^Cp`At}0Jic&SG>m}=+pm$NgjtC{REmj%{5pBtn08{hR;*Qe0!`x>xvZqu3Y z0**b4Oo)C-)B1MH6QdmO0ozWFROoI_IF-iJ)zM zZ4Z=BB4>NaT#|_dmpo&6u*7qJ4vqb zep{E<&uv3AbTSxE^Vi`cKA9Wg0=$s@0F_;M4Ib16p$5|Y`TK?KwPR4voZ3{avD;bU zDs$Z~VCRk2ltzP!;{ZdVt70&DaRt>Pv#&Q{0=R^<>| z&R@jahoPF8m|0RYI?Tb_Y%tO(?0LRBReAAhGl9B^G3vFoG}@+8pzv&t5lMI6x_?l1 zo#`z%`(dWb{;!XA4tWl-KjcqbtDHGiKvJZS^zHP5*^cy$eaK|NUKl`jv1u##rO( z_&!v!qf5VY^QyicYN}diEjU|Pan#bZZIk^%@=3J<>*Y37qE6*at+`Rjy`7XT>z8M6(&DU%;+~2vuf%46T9{2 zF3%5;yM@iUV*Lw>M`FoXJ4ijp_HR)|lWj^jpA7nipDzJ9TFva918XCI9W0j+y%y)| zNbIqxQ5j!s)&n$t``;tPq`!Z0sALg*zmk5`KwMSsl1L%2o0)KKmz~=h9F2K}qyVP{ zO@mLbvjBpkSHI|+><%yh;8`*S7B|f$!Nux!(GbZFi9dUk(G}flb zI%vYp6%9un8ScE|OaNZL)Nmrvk(7`&7OJ4n@|ty?2xC#mkM7O+IR+Y7=@Uo+d5=fo zwF;rgViL99IGQ(cu~%|AHiutuYc1;aArH^^Z0|oUh_CH+799Z@Q<$dwmbgZ(xY|~6 zd1zizz5rD@V3tLL1JPc=A@YuZRmQl%g9e<$Pq*DRI_-8)tp()8a`HZTv#+5J(U_}G z2Xmb;rQ^$;n5k^5B@j^v420+XcAKcvpmW?>t-ns%5@hQ%+(AM-7W-vwo9SoCkAwFp z?-vR57D%URu7}n=KupCnPL#9|tfX?P6xUBSWp`Uw&6DuOSDdOM#_og~d}evA2eR

$xq`KknB^loIEyXcI*3xx{c-3>xy8#IUuGR~omHQF;dQ?2i^mpN8JkHNZ;K~M z0#$Y;)>Cq=G8KQlZ>OX&Xg8{VKMJEVo~e?@*d&oGsIIDXt}zK?ENh!dX!#pjS5`a0fn~; zGfJb^1U6f{n(nkgP;}s1?3}fc*fq7(Ym|iDxibnBeC+;F+uTq4T4YZufx)oI*5FfM zV#-2jz2-U12sTl^O^BTBkUm4?_M`hW(8$A&0m@yMMqjQ(+i5c(P|argyK;`0k&0^G z=W6dw(FAPWc6Fj&VFu1*SzF+-5T(m)!Io&#uTlE|?C^XnDHCsui(ujfiPYaIwS-Ro z9i_X*u`v=&!X&NGWVhQ99T4;fPxKSyb%UCepQmRF_2*U3F%FweOlS&4d&AY=iQ~NB zf7MB{#7gP2lxuTU>6~BW{ZW1kau4Yl)98{lcwSO2^Vn7+>Gns(w<1VN21k{f*E!gX z5+*-f+p;Lvh|RmYOlhxRz-v!&w(F%D-M_QzXV^jCVh#NWZphYm9h|d@ldBn_F4r>R znfTK3Qdkj^p|9&lkk0;1AoyO0_c!G(7&2X5KNiR%95-urn(1gGFD{(7^%CZRpw;6e zPu*9k%y~+G{l;SP|Z_ZOIdxAO+BT`tX{N}n%z6Ote(-0a?xe_%rQF7=(H{lYE@G6oE9sYb!WgvP=Db-& zJjS@3NMw5VT)$l6jg#dah{|d_YB9ca0ZE3uhd#Vyb zFX1-JyWloJsIgtCSfXh6UB&BVgLw_I?z(z7Ji3ydfZu<6L@n1Se#SNXb(}7R(d6C7 zvKl9GX!VH4g8jKG1rI;Tz{GmsR2$XhdKKRc;dM#DS-a44AEn(vk;`M%l2*dy-M?Jp zDrJ_R>4KkZL*3^h^)2+FuUvc*2TR8Pel{OxqyEac>?doozT4{YWh1>2aPErE*(*KNw63sz3;nuPvN2R8uS+PMPG4lh^ztkGubsyZuJ9O7fXvi({r&G8+|n!;Z=M%ul1Jjet#QK)g|n zxE&QA3ycRft;{!ZmhOrEY@!`uk4T37$9?r&nE(CX~}@(bTYs*@=u^wwzrGEIMnm{o>)(mA607Q{^>d zPG(`9QT!KOSX_s-TYUuc7s-5tSGYb%Gj`Pa&TxiguX2$Rngc?Y$+m~*IMJt;`_CAg z7{()3DmB;LBM{z2;*x`!D^5!Q>%!&V6jz~$)XT{K<;9HNoi-ntm9YS^WhQ`HGY)I& zF(;quh7Fc7q(BIWD>!E4yP;l5%6Eb@6}3u4}nIX2_%xF$m@^_#6RiIflZM-5j5)+@(o07-2JY47i$~ww03j^f92Eg>tzm z66D~*m~F^tp1+Zo;_zIT4b?|tkS^QJJkR|ZNKWwL@k4;ujg2B%6WAU76~sN|6Z}|d z81IkB?l&9=v(^LRreboYw79hFByhhM$-71#!I&JQOe1WB6+)kg zZ>8~>UP~spCjmBFqS>e`kuV-+rfItcLNUqIkq{OJ?{2qVr%aYXEtjZ0hZW%47yLq z*v&u5@8)pI*b^;FKzpm|;DwncYyE<0b^YN+A-k3IjtqrD5^KZnr@E*8YOQ5yKY2;U z#jnG?Rt$ql16`U8NJCgxYqz24K3apjAO3W>_bwu$`@~{CgL4k&WUD`iZ8&6vb%=od zL#Cy2(^fg7I}o{2Fp_6z!tuE=|W|g-pZPh z0-nY_s;|EzzqhoH<>oD7k(I~2x=M{66u7z;;Q;zcq#&s1NAuT%W0>xr?yxr2&YL`I zb`0V#kc>7`pi}sANKDL~Ua9hNzt@4yV2kp8XVh_6l^=1dg4tPKQ*;g+c)3XeT_>S9 zB5bME#s$bgkhWQ0l1fCAMRy_5q(i1@o6FR9VdLRJuPxKUyc;J0?*0zr2W_5zG^X-` zbL8B(t-QA4NULC(;#4y?ux~meP-?>YwxfDPKB>lgr-wPVuH1Kz?oN%t89)Fd*=dwk zg&tYiG3x#sPv?u|<28@gxn^4?e?NxDB-3Yn*W(um7m04)poYDfFRb?$0vs8~lM4j- zEAupL5&cQ_!|u-McZ;4xe+4g>mRP}5(KQ2#UqJyYK;+H_b1MFIX<1sY3s1|@!Z5YN z;bj0e7W^Kbd|aJSi&UX7TecqDCT2THDuoP@mF2lc@8YnY$WDsyE;rRK2s)d848f;K zim_Stj^EGod1BPm$TGY4l?n{wn;25@^n-AeevRee?X8Gj@meDkx2A3UI-wD27$Y-D zUjNY&$~22u)G)JZlvtNyPEMdCfy?+z{5Y(*f{;^2YyYsmD+)DEVwJqaw#AcKEBYHW z%@YQmZVdFsUS-NYqWB|SzcTQ`Q7OIkxicKuqIf5RvAHn_Tk7~&W{f(3#}209HKA2~ z+KQ8fM4q$cdj)~n(Z>Y5aDohW4&m?-1{?_{^M-?IICIR~<4bdXz>@j*70 z`16PS2m~qL_8+{ljwkem!4GP(4=_Pgd}giA%`ew+v3#FT^nUKIfs7;M+gSf)!b88! z>b74ro0#UEk;e+u+q^@?&kBet6TacrVqo{5yy?yyftg0>L%n*OdF~PtM~=de4=iui zA~N@ijfQA1;uPgXLXb5%iriVe%qxV(sTX0NoPVe-&frEfe^~0uOZ zyxjGM4Z2$qAd|0R6)R92;4;gNcPP&*w@U@Yc8&0+nW7nFRdHu1oj8VHwtfgVtOlJ$ zRW;X*k{*GDegxZ$;`5%|Q1phq8p-IhBI(8`RR;{Y0JKK4yG4(zq1+=bxewnBlfe^a z8+vOqQ-&q_U{Il9T3)-V)obWoc-vn#-p0Xq9i!Yv1{52Qrz$b#J zFt-ev0Q=dOm6Y}Q!CjSnW90;JANlZza+Vsa1A!1jM*kM)8y)_euPq|&07S~(dGTBK z9#==ce_Td_JDm7_$0kQkS7d^dsuDAD7X9Pu}yxeeWe&$@tM>wCm~ z=cjN$+A1UoT6#eLj0D!840usaoS416BHz=uTl+4eL2#16sjhLN%f7^e7pqu??A;_) z+8!Tw#ee>q@%=>es*i>WcTHgA`5g@=5=qU77)U|E#8iEf0pD!SIt zel!|~j7v3fa|&3BixW)3JSd2JeL}fir5b*9NBzl&*ISoz1RT0?oc^$(EKP4k4z1q5 zSexN~R90mI)?gc5gN4l)=ooHjVz%AZ9=S4hS|wd2ju4Q(V(6 zcU+f?;By82sfkN$9}b-lbd=tyly-lWzJJQ#l87RL!cQ;M&4F>Fox?{at=_9yg~{#l zjJEuvDj|ldZ#O8sW_mDjQ6{w0sThs&{L!B>6bYs&S(DwktNeDUxs;8NLz9*Suf5Gq zGl=nj9!=IRH4bW0ZLj_I4oc3ObOXoDEHwkGaH&|mS5?}917}EBWOwblTbq+|aPwfF zShh7qqTSLzIl%o)%;*G8%9nQifvmBbpOTcxQop}lvDLRtV-X_qluAZ4oqI+@9O#J} zJ9cxGfp~H`E^*a%k+U%os-H}7owb^Lo9gn)bG#bCEP|)W+Y(6qT=YA2gX-O6+Q?&q z5E=Py`UAYC-0D=(P6zOG^)t|7_ejUHJ19wGrFvlgpG3ChG~EmJy3#$y-$=!v5c#hF0jFqq*nw=CcML_3sdF~0%nj)h%>X^qQ7(UM~1e0>$ z#oqNt>n2>#JNKsiqcs)yDGc27;|wnAp?K1Z9b^yDF?tyzg>O9jo;F^J-cCOy5SW-!AM{*kLj9p5&SmR$CA&w>b zkhRSzPavX3U3FWjDYTBeJO!f(bEh@3>gs|g-#IOrKWUQCmfA2n83edcQ`2HQIrZ$u zZOEzfR*1p;Covy}=r1*r|4dH<5s#;1{5WK!K&O;r{AgO}3*wka?+e3`N79B{ycpz} zxeb6k5zx}hQM+A~m28H;NuCd;)t(cy>vFLd;X)iQhN;uk8TO;~N0)U<2f95Y ze`jmHvuB1f4iS@!5$aT7yH0`Llh%PH^N>lCEJhB8P!q_o=D6*w`_Q`B<&Q%Bs_|+a zdpaNc4;^6=zTDcx457i7DQyjL`?}<7Bs2vagl%D}!#e}AxGaIuI4NW}{lPotj7Gwa zd2vG%=KV7OOb#?@clA+|qSJr%k{NzLMFAn3zkt+3qGOqdWl&bX`qAel4Lsdnq8A*s z51fQAMMpJih_tc{bWF(3!QQRE_miD{vnRuWntz zR4d_+jt7N7YjG%1;^jWD#*|3hfO7_rPbfov&rVc9Q%&BG9!XH_5qhA4jQ8+#u+8#_ z{LCXF$;n$|#C}>GmEPy#7B)JkTmSPEol?MjScy*}wUsr*aGZI@TQR9Yq@jAnkZgP7 z4IvJlR)Km8lymKPM7gDXT5hn_jp8$d?be8~Uqdc3jq;%RdNi4bQd+XsqH|oy2HE+Q z{JFo*>>^lmsyq~%s5=ci$LRy7SZh6<8DoGCZo~p%?UmEQ!xp4cJqHaqJkFcO%knT{=f(n5S7u@0}|?{`~;WQQK`@^zfVuk&*~Ep)%Mk zL(lyY-^RLmN&-b@@O2pPg6wzgQcP7s|ExoNHKak2dDp61@snQ`WTq93)xQz&)LqUs z7@@OLTQRQcrSatuv*%Kxl1b{(@`ZMR3qwZYZ>)L}T zw*i4LNv(9{t>xvJL5M&bKnVp4f&yx5z+X^*)zN`EG!zU72564}3N}!GqIoLBP;kG$ z9koedN&ppFZCmjcBu^3PnIK>aIF5P$#ShX(zo`1@N{ zURjlri=7k9&Mg3p2XpZXfjNc1Jd|8uA#Q%44$Ker?w>0H7=e&L51>E1pVs)dOiv5_ zTc$Ta^WQQ_0PQe;t@lYY@c&ZB`xiN&p#Sic1L&dus!yXoP4M^HALk#}K$r?L@-o0g zPYMG5dRzoaf)L^15#Zqv5fBiNkPwkkanVpwP*91maWHVnh$+a)h)GE)Y1tVlsaa`A zNg4T>Sizh;JUkQ(f+7N3!tC5UTu)4(kdTm2QBVod&9E_veo&z%w)qEF3%nA`&tRK+u5sq$wC^SQt1sSXiJp0O$w7 zV!>fkaf-v^sF@*9yWnz#B)&(ak*MjxQ=d4ZMMB0WAS5EDqi0}bV&>uH;};MV zl9ZB`k(HBI(9qP<*3s3|x3ILbwz0K)>E`a?>E-R?`zkCvA~GsECMh{3H7z~kZD#(5 zg2JNWk0qtGb@dI6P0cN>y?yeB0fY(z1#BJ+7Dxagv8}l6I2sCKbIJ7Nd)_4=5<6H74At5ji1}}u}af39j)LY^mq=i^kZ9Z(O zHT%wm8(kF}b_ix^G?Py>_FS_wCtTz_9IQfGmiMkb1Opm~1Bc~-V*U4P2V?U@!?G@-@H%cA_^ znMU&r+DJi`n0NkYt( zCuC-1?LPzQM0w{KCmYY?y2>>vl{4kW?w^b86w?26wcr%(C3d`^nmylN_B0sxjA~bb%SWU=Fnfq@RGIiQLt1kE~h_z*!_~99Oh>Wr^F@C8=(7g5FZ9}WPqrg=5 z1Mat+Or@!<7&*g&np*JBKKOjzc5_MXiA;UbCcpQ_C|OLN$$js)41KYTr`8WK^{-y3 z7-YFM3}W}IFs|gONE#z#&K&(}6AdYo^&+CD_WVrvz;k$YiMu2F*2vMz^w=@3#p^2Y{A78Z>VeBxtZg$nz|1^qku@tUXjfuT?}hp5$D04>8Ske4cD!hG;OxoPn^V$^ z^~kHauG$E^LGSOfq>1}zI=1K_j zgnXO&$SjxaPVJH!jpq*&7?L8J)`BvsB&(2*$oBQFTE9X=e<5bL!AiUdG2V`3X8H0- zGO4)a%qKuci20s}Od3~*a{*UP8uWiEc%;RMFBM)pHQU1U3QKdVY_Lf$RxOYPftnt|wY|T(H^B!RUVt#2uf(FxV5XW?rG_E#7HJRT-@x5)7BoF&XAbWEJM6$0Y;Qgi$#V8&1s%z z0SwAl5T|02YlwjfPSqmYT?w92Np`W>k{>bXJO^O|J!FGrf1gCqk-EJ$;d9!`9(;sy z-U@P`z-FMuY+b$Wo%}`zwury?>j3V9*d0B+#YL$JSuEPY?L%!F^JcaPwQ=%>EV?q4 z+vmpYlO-GxN>&%g$zY0H=ELwiwPJ7k-dSS&7N+`{`g#1B10{!XzMguX=NQ>wP^gH@ zY%u@EF>0n$_yI2l)?$|84zwWKI}H}$rTCiC&BmYD2!o+L5hzjT%?o4U zuBLtVO@5Pxvm5oQdk5w#PN=l)OJnvap3g>S=>{$5cufY05QyVs+rZf98w69$&0Kid zkCo&+9`{*m%H^bXHOH^TmsrZ`B_Ba3CYr9r6!Ww1_{4VWuOCvN3avJBs4t%<8z?5@ zrAVh)aB&I0C`OGdumlTRRNA$g#5i~u9Gg>i*0C?Tvl{JwTNZ@>a-m}@ zM(G${uD#i-XaE~G+SzAa9)YG97pjfnb-isRtvUxmtmswc1^z!2C zeHw&ic$uy*R5MkZ(9*FjVf0m!EYIzLGROCbya1oZg~`+Bw`grm%XXi-omlXeJ?y^6YpqB?o>{yRMf(&2*}hF z>J*D2C$`SA8OzS6^%?VLG5_a+taDM~=6F2xK5@DXW{LP{74ygBkIaI!pGeW2 zw%L~^$9RWhTr4@q6p;t#S@aQFeduc4TPhXy3dJ;Y7Rf{r7e`YbHS1wh@?|%TiC!O; z>j~5n@8>8y20xac*iVONwu-u{Is4aYTfSKuw`WXSv7>t9?mb^Z5mk|JrQ9wL_-9=xc5=7Q09KCcmHzRkENZ2yWzHh^om{XZph=?7XKIN$a`UK zbIZxoek}9%^F6KzbxH5BRd8hSv_AL;&02+@;@dQ+TU7X+5Ja3VjBw4_q0vN3vx~W ztViM5Z@dq1Sp1Abd4y_c2MKC`8VgJ^cCw$KdFMpZ-0Wz7LhjrGgDSe4L?x&moYtiZ zS{eV5<=WlN_O)*NONGblDFjN%I)!BrLS(mYV(pyB%JQ;cQ;?tj=`B=BqicPI*G&uv zgl=G`sq3z*tR!UN1YtL`bTYSM_l7wCzUT^zc{`g~*ju?%np@e}If_spwslcc+F6QF z>+mXrm7OK6Z0+QHU9B{HUuatR+FJ-(Qj3Wq3wsLz3?NqSW|ZC#2S+y{ZxQO>e1(Ae zQ!@uOryMWz&XwX_yemy-F51@I(7ZR_st zEX2X#<>kfh#m(;IYQw=PC@9DQ=HlSuVgo4H+|BIN8A*5D3S=j&O6A_5_&x zwV?m)2sce1XDbeMD>o+(R|_j?Pb)`vntx?sY4MNo&K|A~zs0e%;IMMAf&ip$z^t7A zHsw?L>K`MXRA6HVasE9DQ1-u3y4zX*Q(6DEwx^!o;{5AEfZ_k(`)|~L%l?}fpi)*A zl5(=}cv_yklnC|H{6dya7Iv0GzpGr9yyl#IR$w-6ero|X9i1dhs{ioPf(D{ z3e07}&G#>?&3Q+3f&6meyA0T--d|Y~0+IU^X5u9)3160pL*p%xx{m zZOLWLW6k|9EL2?W092Ye{OhWoSXlzBxcT|5`FO$RY&_PS+-y7mTQ)%+uo)X4kObr5 z6)@+t1`GUVWoaQKgWLgK3OBGg>$;D5HLI+(dz0|P{; zmFyfny#LvuX$P^=a5sC>CMQ2PADHtguO`6BBgn(`Pab56FX%mOFL_y|2OKV!$TEr0MFm)UP{K_8^!eR)Lyn$ zPrCppj1A1m2Il##FfJi(p1%~v@!v0^84qwU1bM94tjw$ch;s7@u$h}%@c`iG)%Bb=6EuTe{ZTV$Nz2H{}B9(9R*bLrwy>rfVt=RhrRzx zXTW;@J3oKH?Z0yhO3MG480f`A&5vz(qA2!w+3RG>ha*@QqNg1fx3 zG{PUg-0`cRoX%M<4&q zAnpLv*!MI)4*36JO}}M9%6MAvZ>pMCA>1v0W~w3Uerx!Tq5m@ZzsdEt8vac1Z&Y&~ zzZZczZ~^*V70C$Jv-oR5-rtfC8epk)!Y<>ePvXN+c~kfOSu~qOsewI((rj)SLSsLe zFb)Do)ztrSe11>r)~NBC9d@+fN%czI&v4fxI?&AKP$UZsUXndAbSHNRT|p1Czv-+S z?IZnA2U}WIMUjQ{77$Mt%8O)jrt8BjTHTAUm*Sgp0aY9*b?C`1{66$Oyqw7HUjrsQLP&7h5wm#X{GIH)cbAb8sU{H!V`C58KrS zG4pAYl)4R4yp@q>&j`p$i#TUu;2O%nUI*&_b!LLw(-pn#5oo$I3sKFuQOISl%%34D z$Gp}zllZ3Cru33QWc}fVgh5wM_EcjSL>dgPLVQM$Zsu)=7m+?^TD%ef{#Z|%hA2C< zs>SpK84FpOwa@iC9O#eA^)=Dsz>TJQoGl=*gR3X<)rS zxMW#ld(r;wa#smHc2C=4V5G&{VmCdbCJ^bTQc<5jYg|}qauF?}9-Rh1R8#UxZ4pI^ z6Auc0uk1Kj<m%mScxyH;*N zXG~18;=;eE)+=TDNxS=>PMe>=vGr;(mmO=lQMk=^VDMa;|Lb_jXZDR0(QT_t%5X_q z@qHm=-PY9dyi)CSc?mR)PHRQoA6X_*$q|RqA3TXeMtaQ|qDG~L%A=l429kFyX4QkJ zVtdf_5z<(xNj%>(m}H-C6@hO3+jN`RySg7~9aL+3YsW@(Y-6;M8K0fMrL-Nyoz#TMXn6bFpM(K43cZ7{{8WOPH9n=JyDH_I+NkXGR9 zj-XOfV6U1*p2yk{->8I$nCh==Sz2OPg56F_kI>(u0HIdJjNbU#`O0~L{6n>YR(xVq zNtaUp(@Haj=j7U%cdY~3^C~kV{cMCI$M<#mJfqV2IBo9BpsAGlVz40$nxAx7m|TB) zbFk_+llSi}%TFCcyc+$6}(b8Z%9z*UZ0PsrQL>vn;nGf|!TI zxzL^tbY7KSaI}f?fPL9^cT&;|lBCR9RP~wxVG|A)bp>q+-qSrOP3uo=b=!6?CDvMn zd#Uu?Xgyv>B~LKEAiELCZk%I0WBLWh(kXBA8gMk|*T~-Zd(5=en!z|;AL3-x`c`JT>}ymYi*8YWE|E>5wpO^lA(gCvgJe<; zfp6!A=BTvn_@0%G%vt8A_4Yb>kww?Z#LK8r_s~9B%V*F~UbCA^X)o6A=}a~*Da4{9 zG*NyaT2)QbD%aDW98j{P;*upd@UU2&XRyO5Y0sYglDsKd4Yu9s_TW7)!)Xia{#9so z^_|KB++NBImWzd{e{vYk7}_1*E*l||3eh*S^h?~|^_29_IDfuKi5c5kKz^0S%gB*I z&95+lomx+;hNRe>u>QLHLg%nou2XbG|5=gU1|`*-dg^BL)d>NYP4XyN>H=(QY{0=P zb&F*9&!n?K#*Euw=K`)6@%hRx;Z?6QAzBo+h+>tray7{fnXg`o`w3B9U%xZL2@Q7R z%t??}Ls>s(^3p{{-=D+i5<7F&#K-rgF8p&WoH3|PMm8N5`M4V6`8)3soBVHB`3m*% z%z5TyW?xl=<@-y^qS;Ksl9uvVMpeoXV>PmvP9(bjyck7Rsj!)H;z}(jV4%YOaaD07 zZ{ezrcN#Nl}B=s4Zf`-ac6l9A|!wPQ8s(^(P0#uM|M&RQdKhx~e`%cbC8%#6d1mTsj~GMq zy~(JJ2ql$g0E_{}}=AQWRqlw9qcmF!$=W&ZaU|UZ0hb+R=g1!3Gvmd{#s?9A} zeiYrJQ|!QZwLw}`k}C?X1i_J%?rCH8Ae5KkKpMviDV64ng3B<~=6)eUAQDt?fvQ^3 z$B(BpDcd`d)MihS+QhQyx&KLOMwgjjApiN}`^E}28eXW{r4O|cDQ18)C#gq=P5V2m zGpXf`9P8f_N;>Nr!%-C)UWx@V(OJHjq|vOe+hN|@WceX4JBy0G);DAC{D~!5ZE;@8 zfCsgL=E;BHITKKtFwx;V8OFPifuxsat{OXBOUf(!-cdw;ASDqjK~0;L5XJb$V&eo?G_(nxu58_IR%N0Wru z)eZ`P>2@~*mGGXXT=OtAyj2PI`>{R6(BOi1c=gjPw%3fNB_CZ?KzJSTDdMFIiV>4E zndj!z>Kd&@rv%n`q=aL1q~edqt!T|R4NVhY7xv`oG*ZFm{_fvwG6sRDZDJX*nR~OX zq!3G|>yi?m*YRsg`8GkJj3kvrMh@JWH6oX@^Z9IO+RYFv5?nE6bI^B~<;@(C;@5T| zJPqm#=RzH`>>kX6&r#N*q~2ywWPVO;&s{DoS{K#yzM#bK@&tdTzKx z0zo1JG`fK?mx1N?1Pb98j{UUT3`0Av&xy5^n&mHKoKuPzUJ9CuwZ^z7;|bI5Q+b(C z)GLmAWq&Z6FQ(22@6lwNp=&{kyleuoH*w;+c?Q4L$L^ArSQA@iALye9igBm6pf$ZG zGRp@-T_9SEj`BEZfROAe5eH>mlNOcd$bOV*5dOdqQXI)Phkc&neFje^zuSd=K4)l8 zyx_BUfCeXp&{BpZDWQuwQjrpKl3KvZpISLx0c|XOp!SPw|5?w=BI2o#PMf@>RI;GM z>rIyS^UwYXMEXJaO5@0XVjue5(pL~qu%lD?n;ti})xqzv#o`M|s?8C;gQ8ICh!fAn z!{o`RTPPhKSC^X98I&5PY0Evi@FlLxZu7ziElG8aCp}6&+B)1DZ-sV-4(asr2nG)_ zn=N8@d7r}g*Sd$thSeRu^?tHLN7~dTs}dyY8+9|Q=Dq10lJmckupO;rlM84`sJ|+x zDWrO)B3hVHx(!mWpiX=#3hZ%qVo;99M#X`BTjsch$%QBZzmUo+9a`|Hml0h{<1sAK zGEr5bI`%E*aH*gZZ&Q5jrb)CvM)}-c{gP=&H>#A zYa3Z-;GlNfM7&J()%aW&DIFqjE)7GK&AgbG9&sD-))y7Tb)KxD8|%VE|B?+dFlLSK zp{Z);5tT0mUin>P_<4M@#mTL$d|`ZYEhWkyO?oB0Dfze)(P+ISaKJfTtdI9t`qC4> zU@}F*iODv`Q+t?zr$?hi#+b}eb4~MWn#FEvuVI4%yfQJPbYAR|XVyn??ELFHJaY!6 z1$Bk*{gQhl{J|;bzZ5tsbYp|=nnV~!3&Os!0{1uIBKPJ-OJ0}E-6Z>#s;KHdjUG+| zlyr8AFa?`NW1KIPiV-5;ff>QWq}Qv2*5#UBv?VUhml8_OWt0C!8Md9?S-lXuNAJdI z4D0=3JFC)8si7DzgP!f2AoLoANx-Y|^r}$EV&#r_kT&4Afw+@8}|^Px|I*aoxS12{_ANA|lWzZs@!Okci4V1Y`_>4V zZk+zELLr8RRFXn@=9EII9HLZYYelrFQe=Rs5bm&K`9sAV{X9(0DQN)FzLY7<`0ADR z1G;jILnfZTK1nZl;+?%w+m#BoxNYufIF%RS3xdLMWwz$6gI!zYLJ@_G`<_3-O;_bP z9q#IBR2R4e$m)*LYSXekQ$XxvV!_pZ_xlO{AtA*qhx7-nd2k%S6cfO1idebnW(l6IiGp* z>A}}cq|?#k2Jy_r5mavU{*Rr#FJlPar_30dbs;)Q9ypfh64vh26!C_4-CuGSq^PIf za9d{n1Wwujx^lM}OqIjpfa2*xEC*l3NMcpkVDU$6q~+!nQ_l;3grsuUFlt;!?zbVI zOL$k-sNL$_8lyXsn^=@Tfm1XoyBFUNpZneU66}lhxh9em(H4EC50l9aoYN@1oU-6N z^0c44pBf)C3KcAy757w{zC-r-lZOzRvo!+(5c1q-aA`Kxv(Iq1UOu}`u9ERoZ-)6; z5Mrw-&E!^OP)DTwJ^7s`{jOFBAFO^MY}oS}JV`6s*PRovH!?UMf5f)T!>hz`;RS&o#_oKpyhYfS!?k+lYvm+(qs&|3 zA58*|>LDa1RR(b-`(0W$Gn4&Pg@}bxOi4#)i+DWIDC0NZ^uLOW%h#)DiUig~nM(;% zJlnyuu+2xjPDG@hU`!gO-8dF7uOZBzU}PP2jq2ZpPkr&Bq5`d=qQVve`PB0kb+&M! z`duNCTUHjhtO5_BX=7~1ZnR5fUtB;pL`~9Z6b~z2+NeQXxkdjK zySE{cAg0@4tS4d31swiov{1KjgCCIvQsuut20S1Gd6ifCFEQ$|b3t_P6YV_TW+}zJ zd=mqXXv0u9<)<3KeUTlcMH_K{I#O*TP6S-?H|dgx#>ZvF#i344PtEiM6GEbSG;4<~ zxojOAqkK|ecD z&NNRs>*(jrx$cg7AJs6y%IeQ=+RwRHr}j&%q;vX+hvovD){xx&%zts+SsogJo6FPp zFS#eU2;;~ygPGPV5XLM6x)R2GNr;$4@N!*YsuwMpL}(dpdG|E%Mx=|3`$ELEZdtY+ zS|?q?XXdL4kW;O;K7Rc8T$nr(v-iW7yQq1=P|N~eDqHhp5o0SWIsgG`&DLn}+gs}` zy!OXxZrnl#r>Tx^Jkr&A;jHmoj4# z1&xL{b*FlY+##kbDJKOEg7xTJr%}I=JDd;ADLS8gJbbTX+$-Jd%kz|K{)q|e;QDNT zkKbak`Eqp5RhrI_1!Ztv?pBxSTIus6#A;U#}bsJaqczyjPEHSr5f@ZXlm#0|g2W zsC&T3eZIm3x46jZ^`=rcR`P~3SdaBwBfO@aTFme#0(_HXcTvQy(6u#9p4f8r^nv{W z7$u7)y#sa^X&NdtT5pssHBd_GN>uBFj8u6eF6KRuD?Lyb^OlGOz&N2)E z#pX1to<;}(6bhB9re>J8@M|gI*I{@)FlBT36KU(G{)xQ%y@N4pr#ZtripFjpB$t_b zNsX{all-GD3zv}}=HG>C(T&9b3G_2tIHkmh%C7|}-uA~kLvo8BR0~TQ@)A>?iFZz} zv0N}s$??hlm>=(!gSOH675086Kvhj`JtO-(U7_6!F@t&?j4Ytou6Htnq>C70$rYU` z8bHa4(pAg4ROgSUPBq-r5&ppqyAzG3U2QCrPW%||R>smkT<`4m2x5UEs@sfh(Z&B& zmmpI<9oQ@|EUD&WOJfU^3hT|h)P*~@@%npG!No(Zq6k2 z^xn!|-y|M+MF*ox_TnDz!Lo)ur%rsHCmMhmFLO-7N`=5%Ld zA);0tv0z7I=GaXcM%1cNAo~f|5Cr;^Ncd$>1ozqb?p&om8%l4j1k>7Qq;4){+cV#x zQly1nAEOE>SO61RTZ`>y%_Y#+c>J~WTn+)3)P*BmDjBI)hy61x8x>T(MB2zW^aHXU zbVg?-xjjE`zKR~FU6KtRV9^_S8x{F!HK1PqWXX~LK5AXChl1=)P)}RTNY1**|Lm ztYl^q-@S99Al1^B(#{Q?MG-8sm6mNo#JPqBOL3tT%BQIADf=x7Bg-4mE&1Wtj>;{G z1)y`0;Rpwq_X0^d5p5_hnfovLO}MK(<&Zow_oBjg8!YZKww@(=hk*q$$m?UX@NlRh z$qF~7d6`gv(QzL8!rW7G_{zVllxqqva~MJCt>*dg3vB?tc@Y5td*L)W6#Bj@HXK-#YMaD8qOXru`Z7(i`sm&_Dx=1 zLP)?%=NFF(^W-Mw&L-674{yTx!dyh;rKF#Y$Mbx&Ed3GbjuW7-(9UCD!ZMi)ByKDL z&uW1Jxd>5Z5>&hCskQNr+E7HL zC3J`2_TAm+WenHv%l0#u zM9}HuFd;w)E(||RFfubUgFQ`onJv^9(cNiE6c~48-W2*m3KQ~ElXCA=^ExID4+cw> zt*X5tWJGs^PasVTW}4KRkzM#=I+A&fn1jBl^GV_H#dDhAH(QK!6Iu9P?ki=1 z=4F9kB_U%%w8KOG=cRnBdp7Uie6l&sWsIJG8 zLU|)g4LNTy8sRk?23m!1e$pZ|)Oyw4-rmjg?oj=J8TB|5aSm6I4Ho+IWYKAY6g41r z@58-)wO1fD>9sF8NU}xYmD9YXC%(*9Sy3sI)@VWZv{l1Lh@%xZ;Ol;TgH^%{2PYm4 zvTRe+aKjG!AgPB{I@4umj!g$ECpF5QJ}5$V2mdorZ0QX>JPe*lCn8))_-O6v1#{Wo5BSX(AV>O$)c7^N10mv&9CpZUc&AuM#&C4{<`X)<}%2l;|vSJ1Xmy zPIRWl7Wc42x?mbU#m;p%pf4zrQck84JAtew@F?}Wj)#JC6>oQjV`rNVBUQW0V*ph) z(XG9>4$9h7%d(?`cUtE|NPbnfs9D}h@mXQEO-x6YRwF(4b?Qkuqm0(2tS~u-l_UDd z@BuOy51Lb%^=vgKJw4I_UWa8wOt3Y4n8K*L` zF<)R-QV?ZDRkHL}VMdk6OYsm(cg1j>MavA?%gmizpcEi$53TS;s@}l(r8eerw7=(l zg-1g2Z43aYFFh1OVl^Axwu3H|0hv3F;A*%8EDQ#7ES^|p3wGKM+wFa<;z^Qjx$8ImN2`fAjVhBzKRNu4l%pB*td7dK(BM#Y23Je0Zl{oEeD`!~7xI4eYx z8rU4Sa&m)SgYrJ;>iovUauj8evL~RhAK(2@UR&ae#}h_Dtt=9c zPoEhvky3@^;Dmo<{e?HONs4>FgriygVnos}{XOf;YgtZ>T&U8lBud1k;dMSHGba*B zyNqrmrt194VO@l$Uncm*K^H+A>8nHLzs@>bT&p8%X%zOb?Y-NAL-AenB%5kef+qY{ zMjGu+?cS=UB9YNuo*(LeHXciId!~TogaZ#S$J{eJXaX!*r8=2o=jpeXVK`HWL&76-J=U*EHhX#3>% zajVZ5EY4@rUcCR@2!s1k$QFgoS(cG)=MLGa`4a27_?NKf=QvIB(GPT1mXRNR;XBU| zVb7-TcIhNUtaPaea>4g%u$cKInEkljSIWR;0n$~{QW9-KE5$Y3P#BbH|BHd-o zl><=V={JnDp%j@oy?z-g<%yChrm>0#1c-!TKKaD8o>!c{XSS$BTw$_xhr!$1*8W$( zKZV~btEzTf7UJROr%9B1m!A*acG&q$CV@P@w^yQ5HO^70n+iVV=W3O`&eg}+7d+bF zpOQD&jhAj0guWxlpu2Yk(8p4}lA?hlO~u!teM&+nrzcZghLQaHn$|TMQ%xm(?!c2gnkFXP}gW*qq8?jOe)t zo^Kss+RG`sVwD_uN`!_~Q!N!@qS3CDy^EqX%?a+s)>EOh+#{CCS36@@@@&Sx8zNAE zf!8Q~TlpsSmWkKZ^H&x)xoUO*3>|VaFw1V`>-h3zFI~D}D2Y>h&D5f??`~o9-O1?N zFf`p-OQef=3k?6G9t2P@a1H+6gFw+A3WxIMMe(9va#N%E!`*fBVdri3!AjsQB-?#b z9!Rfk#?F6s21a~;_X@oiBj`%9+^DTlF=r80_RTC;WMdb}P86NFhAZ_A_$~ zX}NqIU(J$cj59SIe7ba&$cyN}~yJ<+Sm2=2G2 z>Yfp*^-_WowPIBY*)0Kxs|#Pim~3OWGJdgrp;AejZ6bn~{A2y0)ElMw{+6|KDYcAp zyr`pwnv#T>=5igqspN1R;Rb>@9v|xxY%L51=FZyLW{%Hxr(Bjj=6urf+`b6vcKGuC zYCnBp=(Cmjv{#&Fy|Apt?Su@u-uX87qwH;{C4-#B z2c&&+od+g((iTy-n~xD{{UV7`%HlTC!vfg&B5&30pQD%&4e4lfsW;p;MTs_naJQ-&A{`heCsA_EdtEO{$dV1}BBzfFfa6Z6s;q z6iu^}ONX#dfLKzP`1JhMh2>+_ji0-EK0O^=v_Mj?L>&v$66S%DW_yw)uHUbgH5_|h=8ZXMoLLZS=&rj8DJ{THgA71Rje{7OA)Z? z|1hi)h<($!xwW+(hV!D^CNBUU14Onh`UrSiRHC)ce~T$o(e&W>r| zHCZh87Xg@0pFVYt&*e+U9z}}XK}jI~Y~8PHJ{e)ju?Gj?VP(nIwzs$MTXgD*2hQyi6vP!3QLv+7f!ww8-SOb}g5(zx;^N}A*m)v;d=D2* zU1oqO`&dJ8 zONstfp*{ba4aeu_MkCr6RKlAGpvhS+r>GPCc>_p+Ntjz&itD&oKw0%ajkmuB%zg;XYk}VDyX&1i z3&4lESDXTe(QKjKu6ZMdCGPeS*zwTY!!8N{q@6I^0hh~>$KMBUGrMAAVw~^K=e{Q? zvLC=#OS(VLA2p+OKHZ0D=Wi zc(bm1)vKdEjN{Y1$M$6hTfGcHH+tYc>VuXWcw@KZ{XIT|+vc@P&?^Ltf%7?&1i+Xr zN>b{L<%v-|JE%{#fO`vg)yj?w{Uw({vVr>t09O4L2_iC?vyjDss=#xWyYCc_AkbL0 zAkKs>E`gzQ2u_O3`mBM|r&JwdBJX(X@!WVt_7>Qxu7_5aC+#3SMFk-U5xF#63cNk2^n2*XQCX{>dVwOmy6m+|#%(<|UkTfOe-dmpX!8h9Vc*c61BtO!liej9 zvr;HX6oTy+hsQOR#m3{UbQ9mS1Y%z1>6+7%6XylHVnC0M&TM&HRxz=`Oor|g(pSK- z^q=#&_+~Tl^=q(vGJRq=6W3eR%Jvh5C7+#~kR5#!lZ3L$R%8~P%6>AhrFAOGy-Q=j z%UPOc#^{&?;PJ2e*G0Z7NYSk}4LS9hGx9n(yC)Ly+lPavzjkfgz zXS8(8o({ytqLa(zve$=(20XyK^p6KUxRo2WU<3Rb62s~;o_Vpecbus&`5kstv!dMo zYU4l`+{B!oo!vMdr0|+ve+tlg;0R173*fyWtF{ASTxQ+SVVHk3t8YH_1R4PSXSmnuSa0)O$Com8s&4kz5eCdp%i^` z&)8dT7r+LYkEAdOtOdgi1ytxaAQxx5A{V{L*%QV4ZNbR2j znWLX|fWF9G}q#b}W{nCjcdS$wEjaJt07YD7Kst)k4MYDIldG;tVl17YF zX1O<)4OLxe7tnf=N;~U;3pQ)~g1+f@$=pX4nIQeYs`|>Xs-mrHT2g6|2I&T+5hSHs zy1Tnu8YHBVknZl1Lr5baUD6HG-QPO*-uK7n51##a_H*{yYpprw7-P=4jvnP6oxyOe zj#UZ2o6rI=V)=^pWrN)YO~!53p2kv|5`+311{G6UBh@D^&6LHqtbeY_g>;_##C%tr z+2oNsWAm>g#QvHtv0ZvD6JB#B3>y5KtMND=;np2q0T_$eYd0t73PcV2)qbI;8teIN z;UFEWMCH!RE&x)30XFCt71-#HeN_j;%EQgU1a`CEsmxFQo4~;On;kcZ6Lx?Jg&N23_Hi0oT3B>KJs&VUB3oNqn1JVp z9U-2h<_#Y_2mFqw%PL1Ok*&CP&d%?Ccpvem?5A_trWMhBtqiEU0ox;p-MFuL)VVhj zuX#83>&fqTV=yp%QE!5{mpy`fj#5CN33|zg{1u-W4hFhyp^;2cHIdOyMO{4%cyS_s zV80~P4*t%0tlL5@xnvTaSZ78mHI@$|)trw1hL-TFt zb!>m8H;4a|4>}27{cu#-Oe0})$<{=&blqh@a-gz(`Nyr>G$ipgyIq!F^vsvP6F_>q z8&y_#VVp8YE^hTy62Z~%YC}0Q{^u*H@UeJ^K50DnH&z%E+?Jp1X&jRDr(m|clhpyH zT7F^brc-Z$rKP0>*Yr3Z>lbV}S!f7e84A$~6|!Q+^FAfebd(Pb8tqLK5D5AGG+$b@ zYr{apXX?DWJg5P&94ym#1kLC=;4B}(EEli1_mj9AEdTV>XmewRhGVebzr2s=08lNz zbjZk>E-RXddmYTC3(_3`d~iiSyh{7E6g4!$RpfaQp-Yr$+E3;$pjM?v;t>Vb4;KoN zb_91o#4Zwgqz5J=U_K8lMl|ypO!L=`82(Y`AHG0#2e4_|#}Dka8kap~Co%vRVnrbU zj-j!%Y+}C#%9WH9N@d#--wv_)XhsBhc3?)2$)Nk@K-|ra&~rqNXqZ>uH2B+Ex%T1u z??$bYOLD9i6YRY%jCpp#P^Y>1ighplH|;{Vs&W3+PUA>?X;OAMNabKaoju(Se7@}) zg5#lW%cN@r4laX5F<5+U*54xEYTTY5B3&iv#-a{9_Qe!FK<@SO(BA6-7X`fA1=BIQ zW@?~)t@Lp4+OM#ULE5Yy;Htwwjzv{X&1l8p|VL~&2m}x%3(c%cKv1}_B!+ZZu8xKS==sNh|J;nz}r|C zL4RO?U+&u;uNF^#kv;vnc?6Gk>_(w&W%UrWTo4?l3yg^7;Unp%9I#;oU}5}T4PUm)o{4=q~)}04L%k) zZ1i&U)(cdQjK5S{7zVhD(-&m7ZG|2#iiBJr%s~QxL15d=*TEh@FW}&JG-h2`zC@2(lTGS`0G~=%f4$wG+j|VHQt78`G>qz$eUQnYX6b_Pu*MAHnX(okAU za9}K*R?@Dk8yjc7iva+MAaP@sQ+Yl9iOkmRyO^tyXxx^2%}MdS>LADcPv6UF_0b)G zzZf0-Jv}`u2d8RHhcm9Nrfv+wNJ7uf&N?5X3E1Jrgq{VUUiD#5!GGV)*vZA4RKQ3x z++sgjxh8PE@Z^9o z01^g-X0{TEzF?U30dQ$N1;JaBRW}g3D$f1Dhw|C;>%CtyxAG*S7byDv97=bJAXD@9 z7C9wFWJCz7A<^x21~5z6ucQu=Pl_KzxQXZ6M5xgZ-jhF0RaDLMUiW`b9t^-wj9;j_ z_c5Bes?wtg?i`4FtGkKRNfFJa(c#ywYHcSp^N=*BkHuHi40pOfn-1NDLhKyY?pAxF>I6 zBa_F=9EV$2YUa?MqFDurZCR))i$f>ZNBJmucfTA_Dcq^*w+@IM{{AiC+CaO?HNV~7 zZUdz_0CKe?Umh;bz9BE6JA4}}fc=8RMbSd!lqkFj7YT!K^QXF8wjnfp0G`G_x&tCo zFG_u6|AxF$T5@voAHRE>`B7%Wk~uxa$rMum2S_8h6<)kcqxnh;)bZWx2xvn^7@ za)vYD`n?{t%}KF4OGIixmXXp*dFtYde8f!A)A}sHUH^lI|FYndWdc z7UPup$|Z^>3sX~@l$UJ6pL9_)uf_0*xb4uRp00xKn3O)Rc~LeV6ytmqQzDkx?E746 z0rweg;hQqtc%@S}!rHf1EiWYVh7lWM8OC>ITtVuLCM`%utrB8lEDQ5_fd%P|gBBJg zRg7?Ol@@17ur!D9KP6L|e*iW`_EPAFq>4(v)L5i+VA}S9(29pFLcq^>be$)#^T_sudKYT z!3qTnt;l`#mXjIR-iHmZL9J9932a$%h=S0gOWjoy(3F~g@H1q}_V+~-0bGavJCz+? z-|v>Xh{APSsD+wIl^V4HR*7!O4ne8vjfp{Yn{ST(3##^LilpbV&x`xyU(71RQ#Ok& zUQw7oSFX%W`4tp&jLnKS7A8`|=B`E}U)-iKQ8C<_Q7L{SJHWQ3y8Qcx$qsUBCUCo% zuz8*=Uv#>g7wcukrkxxD#f3S11RpM^R80O%f$`{0ht?ACI^~~3vaVP6bNi<;=BsiZVBfNp{BgyDCc$yK z5d!EzTPBeV@>(nYYkeQb-BL3zX`DZL0~=7lC8%<{#b*Yvk5Zn5;Z(7bJYvPDEStLp zB0B8F7^BkgtS{(sbIRX2AEpH?SL;zOV8zu?muzLMz!|cGYnd&MOUF_q2p z%tYYvVsg}c>1xaR1hLzR4YGu&{tu!U-CI0fs9`O z(V()A2;f-;sYWZ#rb>KEND{Kf-AfCruF&HoRfeDneLvPiqU8JutnJBfnhC`nteV)v zv{f2$)>n{Bnb&UOTj_5Ni0bwif0s_pMWedN2pb8BC`XvU(pxCgA@VK6E>eAg6nH}3 z?bz}L#Yp5e128toARhbSiU3Mh(a8jffkMv+NQ&sp$gmm$Wkk%= zlUG_=y8589Eq;3kfb72slpFx0=m3QM!+gDAR__;(hGU0@q(Ruob3b05gMJ6#*SrTn zjP6*Z@$CHQU18JkZWQ>MAb?B>hLf4k1%3e~5=b2{<$2Z+Xxj_zS0K$m(EM;&{>821 z8ma|KQo+$v$M7HV2!Kq%57-Vs!GUPOC;#D6)qEaDL168yz>OA^;qU-iX zbFnoi2Nt@>P|5`~g0&3i(Nm3&U_*pKdBR8U!AanvW6Ooxt)>~Es)7f=C9p71y-nB8 z4{u-W0w@tj${QDIsNKqhW4Cn3AR4_+;s0EbAJ%~qj~l6}RT_pJ3`)-y*(6mqWm37# zIp1eDw!GPr-pqPhbW04k(A_HYe_gQ>j6qN2n4`@McUCWozY9}*m2hNXZmBrUizZ`- zs->IpPZ@9Y?)o?uI!F*UoDuheyRbeHfB8h}+0$fS1#13;(-2&tFwex4X}Hz_j5F{5 zbmGzLhx4&lONW*+tHpUS-9pc|3bf(-RsN5Rq&_FY=%fM!09rDEs^#sG^f0LO0VwK8 zMmpF3oeSVJ^)~<({$z-;>V~VIXFJu{;THz?D#%*E1Hlo4#vi9Rmc}0|_RsC&fYHu0n0u!a{ z>sq>#N}B2twU)UYvw{`a@vS=Eo-y?pjUSeJ(SwX10_)EcIJ=fDe1W^&JPnACC%NVG zKXaj9VCOIHnZc{;y5a%*aJbz{A(E@5&2acnHf96zHV*j-@KWQOlQpQx=~AQ8{{s;V zDhoI~-R>krI$1*rZO=CfQ3sIZSOa`bTtx*3@^oiiOO#})$pa?$wBz}{!=#D+kx&N& zC{VN32b@im_*Z-QGu)Rw7ay+eF*1D426va*xGN!dRz5&P0*R@f z1O-7UwLZSHfw!6XLAZBUhhKq<$LhEpv1hZKpaQvtRiGerqOty5)x1vWc%ZgxJLFm+ zoC0aO-rey$b|6B{HAa`H6dCPLmCOOf!n+jirNY3e2Czqlp)GxE6g8oX!e{}q!8u)!cAUJ zWEa19ErxYK0MoXBP+DD$>Hl<|zvGH9kK6_<|@H zv-xKID-d%C!g$is(!NPjDQap)KvQ5m|Ehn%!M8FEcWatwhTzEaz*hY{LnZax!~&Jt zyj>cAf&g9i7hul+ibYE^cRIho>q_${NxxAErHn&{?#0=b&+6(gp0?p%^1wh73()lB zU-uPX4S=VB-Vda1AgqG|W_GJ7x(DcP_>&_lnqWeO-38_-47evOAlnq^0v@3c_fkzs-(71gE2?rC%s<+lGl@7tgC^8lL<4fj{*E;d41oh3(>|?}!P<+|*QH!ZRnHOxgtLWcA8s zpA4i0yMV(+>pQyQv>4yi-mf#qt?@QW(pdg$<&L6xV#D^G(?$uJ1Yw3Grw6k*NrW1W za+TZiEdQq#TJ9UDMobxOyC|WpovuO*5&$k%&kR$(rYL;gnQaT_OEWXusp-taBJT+? z@PtW&RT;JtOL0ZWNn@{(dx^F+ZLO`HnHa_`rsy?lTdsH7j%1`G0O>a2c%zXVqQTU- zbll6u-&*p;n+eqZ)Mf_-pj@uM5gXYy)EAw8G03|e~$9G1HnObuhB=i{fD7}>4r-8VjNmk~Jp z!UR!A(G?P%!Waj2ti!cz_3AB)Ld6)Zfy9oxT{^AHsk5$FHTv#U&Cc>Tm^UJOh9!)v zKP0+o)(ianwfTYuozw}uN+|BUkUh=)Vaujr%X7Kq|(IdPDgf4 z_rC!rqUf(<+}UX2yU~|?RNWjSlez%e}*H#mVt4+P3`VeIQ5mUY~JPgv1b#{4|fOxCdJkUfEZA<^N!=dJD z@Pn#@f>IAng7?*Bl>$B`b6lAN^&^dp=9Ww|aegvKzHBMNs8~aBsKR!R{d<)5oK|y8?r&ACI(P9^4);DEuq5>G#PPPmQPAvJHIThu zoWS2>)!dcZ+H@_V&03bGj1JQb%iLXEO#48PvK)^1tE`fhGi4jdHp6_eO>@&1dr zmj5(&V`|9<>UsEv?445_=p3{26eCNSqW1z=^&r zCS9fZToPA=E9QWQoD1r;p^3%v-rdjHNvv8Ty)vDyC4 z$AoHJN4T|6)un*FCoj67Z$V_ zG%;Wr=JkiU-dd&$W@gc23z0V(oGQ70@G2F^@#7k)q9J;dS8Vy6CbQTcHb+esDuFd# z%2f4x5A>J(?xxIUm6g{R0SP@+{S`j+XTM!#<3*0k#kRt5uK(mkEjBH72n0@a`)oK{ zatPN|ftr06G`N==pN1<{zNN$p5BfNxiF~-mVSAwz0*;ulKxdVtbnJKyGt*FTGNu4= z0A)Q$X0F_nT#tpSeSP{u89S%FWhLSgSyfb&6Vz}Eirok2oCr=z(){zA&bskW4CDop@JYX|-~R zr27Gs4H7KH2e@*~BvqSg5~$4(agGOT(|1(}P&|CKNu8?m{y3u?O;u3Z&ReWZvP**f z+GDc}lzfzQSt|d@92phfSNDBh<{mzM$i--}&46>Z^|KoSDv7$PP;+pC|W5ni?*#;=;0d zRjE!)3$?+%-NXOeP%@lKa%Io&f?;^MKQsmNx~dLpTSDx_9Ng0<0V6)7RnUX6` zSDk!~e6sG2-zr_pVMHd2lC0%mzjUb_hpr$nNh%fxd1taxQQ3qTm*mh(Z{eB*t8*6k7p)*?x_ZFVvB zjz$key{t!D1NrK#yT3m+Wqhj|iHL=68Gp}D<%$)l%wjsIw_pnvP-5wfM_QGCBtf&X ztG=FMFoJ8lJP47bGE(g@^wIzaeMmG>tY&|a_Z6qaiYhLb=tw)Y6_0M$@{Ce4Q2Uh%Bua=YZ ziNzqTx3`%s!>6;c_?=gqVrUzi{j4_(-U|5?H*(*uL)qMkCe!}D_=>WcsEhVZmd2-o zO|~BFtWWd?ksgn#4jkWm1UVluaj-mOlo-0yLgmHdt<)s}@@rFA5!PkApb)-GrTFq$ zuA=#>;kvpNGOmtjAG^EDwpsS$fL3N^eMr4SOh$_jLGsQt>7EirCeS~GF*8G|kIUvQ z`ek-qdkCTgzBYm4=k-Xxm+Ajq;MNbYDl|fuNt_s3$suXAPEqvC*9>YxTZ~IXQ$myr za-=cg7>W=V)C6g4-j37P4VTSlz4RKBe>TekoA6NXx2V&nj?HCe*XsTKqoOM;TNAKy zd~LdRRPU!Qzi4kU?Jox{DgLj1s2nolD5K2)z)ywaSh7#1Ff6-+i30&${!NrD3? zt$A6#4_~%{dwCXb#z8%xzR%mWEU@yimaEiK1!ME-nyg|ad{{ptFe#nT=kv)7my~-U z#QC0g;l|{YFoS>3IA5jlT?JOKQ2`OT2VU8UrTT8EG*aEfrIzT&7k>2pds#47WD{to z9vLHJAbj^z7))kw@4z=Qp#fW7DJ$)(HX&U*e=Dg#{*ivX2TQ|5^y?S=iENmLM5>(M zgo0YyVb0HwNcadh!E$0Pyka(#ZbH-PHMT#w-KqNoc}a-UCzprKFK+MrlLcpGzun_O z8h$=f=F}}N!n{1f5&vviqxATnjv2L1zEh;QYD~CZaq%0=6<89yl(iKdi8MM13H-!H2IjYUVLwS46M+av=lfU7kKz5 z^iEOi))b@Sc~=VCQ31Iu@Pba?x8s77hE^RLlX7;emt1x_Lh`8EbC3$EF1~bHzZSjYnD!;%)Aqs#K)VU#qpY7Gv6dYFPGdyr6E2 z_oORuK4|m4NI7S!T0f+86x03NJ~-v4vINiH%aF$J`O0Ph{U^ptpZlYUjwPAO1JE_er@^ zlEUQKKl6=RaYI*G=yeKksKp@*ovZ@e_N=!u$R<=L_a#|tf#%D7P1epdmYGr0s9KpL zWL#J+QkRAA-u&dYr$T3!~gnP3zs<@duCj3ub zqcY;7AMVXswGS>n{vDE@(ij!A&5I7PJfT|ZwsgA-bUGeigDkJcZ+G&PLe;nJf*`c1 zL?-9j){4H;k!DOu-uN`38HnrQ-|Llec0=UxkXJQ6wSX_#V~9MhuvF?_R|P7nFff># zkA%q9UMC24Kgcm>6A`Bd%>)ZN4ywI+J6Tu1Z>CJA&)CbGACY0n@w%ITEe?}Fo0{#X z{u|K#E(MvY8-O0K(D>%nkge)t7b~VDb@0Cx&?+bo6{qa|AMxz;n-%F1gvI&G;2RY3 z+^q~|7uR`F(-k41f7P9dK4e{a!$>6Ku3h+s8vnHu#f+7J^NkbkSxvD*fN8YNYplV0 zzOx|xachK<%++YQgVy`|pdD#~hvIbj{PG|KeNzLCZNgC~pBG zpje&~_^Xk;^}u->_&orW!GlPgiC*jf*;E3{;XnMb`wWlKVUjk>z|Hwx6pd-t6xE7_ z`73(Vz<}Mu0y27!G~Do*%vPzlL^k!_RU+VcGm;%;f$|J zCq|e@=>7?rS2$qDJj_kLSMqEF>9ER<5WT|7bW_VHI!z< zw+^_BZWs6j-nnxY+FFP)y~VoBWJ;xF+jhQ8UnQSoI;1psT%iAAJCPlUC_DqhLd@c@ z{`9D*rM0ir(R%w`xdVDusIfMA>r$#d@@tBFMAP|3jNw{EHLb`=B#iFAyervVjlNRK zfs)3;imx=+h#aQBPb3R(5+y?3!t_vK4$pa5&wKrBuz}Yq=t0uXrNjUA?ExXu7>nvH zmPx)C!`qrh&Jf;c+wcW!YM5M-Sst>&nJ<2yi>9Phs?S2iP8veGID~~LLg}n738fWa zW=2D>U%X<47~S(pyl2|jx$E54PT*3vj}6)E+ozR z;wAi`MF~32{{M~g`%)#R@Ge^jsUJt;%vIeM8wpV&YK@NqnR0A4Of_gweT)@J7eVZf z{!`NCPu_aI?+L)&NMhj7>-D&~)H_#(hf*!_Ni%1oR#MUzhCA++yr|Gn;)4j4YZ=7~ zo6^zIAy@c)kNR(~dF%RgMCyJ_KDHyYr)as|(I|_7Id`UNBc}49o+FVI8&~=iUAJW7 zbLJnEvrFAEk7c`Qh7wg$BW#g`szSellEuW9U@FNoyh>vU*Q`$-;vA46T}Jj0SNy zsQtAcudPPqBaLAEYRY=D)0}`f9eakM0{azoq_mR4eyte(ovG9{KL#|ZcJJ#xCHT7> z_xGr=^Ya=~^ybN~Dasd521y777j2kY^Wqc&kz=BFNSsA?q0#C~+|7gi9jMd!vbtr& zmV^g(ZKYw~~wR?HeSktVqmg$4-b&1k^ z{`;@xI)-xBR5oF3KYMW@q0oW4E!EqdSXx#MonZ5mouf z77297rV4Td2s);3>EV(XE+_Z3@4l54Q5Czzw4g-)FlHLCrX0Nep>`rFeGv`6^AAhZ z)zrRdGoS2#ULhc$iCC5)^$hl)aM${ z;hn6Xq|p!6BY^le6xdzz33y2v?CQULFStuqtEq^=`HV_RU)bUA3{oC~)!9AaDxHGb zG)K_#P-ZpKHA30?mHU&#SapB#N^OV*?2_ikHM1=+^2rVfdqO7syVo-@5pL5k%*@+0 z;s2UcxQW!l5>KidWpx!mWmj4YLqaxinvO&Y`RXAr@oij91UNuOk_vlQUpLzM#T5Bi z?STGU9Wi4yM?l-(zfa*#>Y~bXdqh?GGd>zK^z?j~xoB@Z>)O{LN2=%gwt&KwM3b~l zWj2CVUiXE?{i=2$tb^BpaN`AU@5N~$<4E0l)vUSd@=JG>{+)NAdHq)Wxx^ z)ua*p?d|Oh(XoY6^Fn=*0oV0~#9S9}HrChcf4{W)SYjc$bRum_eXs9)AIgP#gov*M zlFD>`4SLl&b5i`-vT#bss$!|TOKrdpUocinS8UEo7}VTMY^iA0s~a9wu8fh&ow-#d zWGC3-%@Fz#2>W!FL|_l84=yMuhzR|`xu*;X#-uUW5@q+GUTzlw~iTuWoG>cD%LEEE;a{m?E%3K~c_OxfQQgz1m|cqA`39 zy9gT@sH=RIqVb}%8(*@&(Z|Mrr$;tVp*?8%#X{%TXeGk&U+wgF{RjT;98E$8Bk8Tn zox1P%8-%pAA2Z#~iYMb>Pt+K@QiODS?-mG$ww(U_se5$Ke~iWgtB2ms7sqU*zb?f( zw4kNkJKMCN!6NQ(wBlNBgkNKlJ^F@G+h6C*m3o-{^kzuLhzZY3yv&6bn~oMnT55Re zTce)d1kcfI)Zuh{Dr+NZki}xg6t8~G59j?meLI?)ee=lX4v3qQ)r8;Jd88f8$1kE| z!I-EX9Q5}?%2s4OdE%N?fA#yho3v76QA@_W#_)5es0Sfu=)IVXTtri-G09<-RSu&hrxO3A)n}G^ zV7*$T%5W0SgN0?eEK8m1Dsx;miXB2S%wB0}ao?iNh%Gw*vokr}*9mkNOkeHVwmOR3 zk$P_$a-^=H={ zJE8h@a#kH!7*q|-tSDo~u!!G@ur~RK>(KIVunzA&`n_kpnKA#O?_r1$E%7$N=MdNC z+1J8fA(540lMhRG_Jx_f+=QU&B-zg^uELA!3N^G?u@hUYhf9U4({thVq>$rUkJ#Zt zaUSI+gukOpL36Hc89Rwm{S+K8J?w$WV3+>mv7nm-_Dea46@u!vc<a<)@P^V`ow<8 zkO8kXEcsJjzGp+O?w-A>r?kMJ`lz{Yugb@sX6$-yUp~UWZSpXQ{T8Yzi;Uk{O&NDs zQ%?mO>xRYQ1(pfc57lKfbTzxWySr0;bWt>j+-9&@#buFOyy5T#Qt)LKURX(@%F8rs zFs)l729XK!cCH*}(w*n1S%vs3sT}=vC}g!$^FcbHand&q8BXDIIr4gNd~{;53LXj5pN6O^m% zcD3Pbb;+U;tPqBs+NG=H;Z2UrX;PTlWB|v*3YIW(Kz^18BG_@e!m1(C&GxnbeSVO?Adfh9 z^%(a%)-=N0kxD|hixJmCv9^Nj_%!Fxp6E}bty3xrV>M}uyr6{iI%Fx_@L{eN>*47u z{KK{yY}s(xYu)HGeC;hxtpV>W6pGCSUO63Km@4+G6DKdUiCso1>|=G}e&dv|UlcE2 zy*hom;(GEe`g&|fw!wq%x~oP-&bu(E?i0chCDa~j!&z&eeooLEXX8tY@w8c1f!!h7 z4Y#`0x*F@}7!WqhSzb|T$mN`eEe_!7DR=-U2n|tzDr`An=W&lFuVv0`^m378++l16C z-}mYks z9pb6LS($T-i@!d#wRyM~g>~GXAl!@ge{-Vo+_pb(WNw!JI$T`)s<;WgKbfH`*gHHr z&BT}fuf_6Vl12DT%B+2Qxgiw;BUF z0{Z9IJj=e549?=$>aOjJ3?OXssp8Ea${c}r8y{?||RPv+#3n>KUv?YeZ-b5TD1J3-=D*~wh2{$cr> zhn1{{`&RE8cZb^Mep9SWMTiy{ob>5LRS6L1e$bbwo9|g)r({TqtTWy0UosN|??kss z#AK-5nZsD*-A)Q#q}tyjn2ZelM1ddvVYVjYm0YaMB;$%K-!zq_lRAIaQd8sDtUC7s zzReYT*l*AQ(Qa_!^|sI6w#TDHv(u<9qM(3UwQRb^^Y1r3NZuaYPzt~#D-KwTa7Ydm zi{^NaMU!1eM=UXXx;E}FZk82Z+;l(;zG=iehs!c=<}eq>qimHOb~JgSY zPv}&-BrBaES|P5gr=cwSVdg2Z8X5W>8M)S#X$IOi&r|FE_Ze^~MWz|}HB=}@G7v$m z*h-?8VY`=J(0#WyuHy5DWL4kI_@{SjHjb#hU-pcfni^A4@J@2okJ6=HA-GmTUIvp0 z7({~lp}-Z5h*L9uVQVgtyz!59^I{chqTu8_n>VOfRgAYWV#70mAi~`wOU)$(`%=zS z5@E<4A0Kb*O}=~?qi`y09!_RM>){k{Q2x^8BXzk8AxTPAXG`?pkMoiD@+WxnY%xx$ zDGh}}v$#Hv#^D8;K_OmT^FpLNk@FqG>|3qSAq$G5$?iI6G( zA}lOy_sVPT=;i5h+^T*o!m;ZZzHL{M4_0cL=~;`3K9Sh{9m2;C93JmeR-+3LSXq!4 z-ic3{oBgqP&&JRHRk3zLLzs{>I#2;AUQ=AVHdtx9sA+vL)UOL0;6-M zNJF?+L*(6WbbNe#maEeR#w6YK%SR^GQ>X*_&x9pcC5Lljg-L2=>f?9q?a|B2%l|pJ z{Ns6t`{+m3-i5jNq3b>qK_TW#7AgElgQqHJBq;}Wn&KaCb3Dmuw zKE58`b8+zTiAqSoK}UkmcxikQiUNMY`-N_o-`MIZ?oIZqf4!ZfFuT;|mJI>JyzApW zrxv8@o3iz$#)_;kjMQCDC>kXMzdz%=FYDYdH=yAtPC}Pf3RW%&)~aw*yR|k$+H%rN z%D2v{w0>1}aO1Mjj#HAt?1w_(t_fYo(0p4*xPc_w@ZiG@1qB6GWv7mnjvGJK%!7X# z*{|V$i8;K7xvRM>VfmN?^IPm=g@qzL+}65h3%ao)6Fz3tcv#$Kg*zQhFE{5*>KWwNo%?bD(+U|soSFO;;vbGp2?5#7({l3UTJltb) zHU!lzo>^SBJs3n}MB?~R&eJFtHIeM315ARUqiU8|G`IiHLNv$ z8LU}z=hzN^hz`DGu)^+0@qD0qbnJodJb-tp46`s!>?jJ49#EJ`GD|23U#z?>2vrs-|^YnODga!0*F{UNsUwa zyjm6i7Ts-DK7|Jt#RZ6B*SJObcH}HYrh1`Jm}tR4;ES#y@Bg(540e}Fg=Q9gc=0cx zm~~!0-h*CG1VoV^t>LsujsqQ#DSiytod{>Gi2@H4ieR{>9u>#ps4VfH3u7W;JSE|x ztSUc)fj`qPQzfSS`|W^6uG5p=1G`2UU|!(mJl=#+{gpbh#)b`hu!-l@kp{jGxL1k| zbG*xU?c+F-Q?zRT`#;u=KgK_{n1^u8!WE%3I49sZ_*+qCAT1tfj{ZUcD8|GTM$)4?eSyq19z;{PtpJ_=ewzv?^eZ9a6;{x=Ls0^&Uy=ty*6|9A2K vKM+JXY#k#}=)fUxMNSbI6v5xp$DZLYn^g7~gm>s+z&|N*d9g|ngTVg>sL3l+ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..78fe5cfe8001dd1b3eb07b376a7fe15c13e313ac GIT binary patch literal 16276 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 KMNUMnLSTYRsdst+ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..e598be57e10e2b592d0aae37d18a7517206ea860 GIT binary patch literal 2936 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..764a7fa0d4ec5129c4a1cf6e3e420243ce2ccdee GIT binary patch literal 16444 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

e46H+`!%APH5UL*6A&(PeHYOH0-bV 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 ZNwi7zfK!@fC;)twf+g{vVOHyx#x- literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4084efbf6a8417849d7d9b1f3965c6948ff3b77c GIT binary patch literal 22499 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?X%Gu~ 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 + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..ae9fb07 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,34 @@ + + OpenConnect + Logs + Pause logs + Share logs + More options + Clear logs + Follow logs + Log level + Export logs + Submit + Dismiss + Cancel + Dark mode + Theme + Enable dynamic colors + Settings + Home + Use Material You colorscheme + Choose between Auto, Light, or Dark mode. + + Server + Authentication + Advanced + Profile name + VPN Protocol + Username + Password + Server address + + %d selected + %d selected + + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..b5779d2 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,4 @@ + + +