From 5a4235962913abc4b46f647bb0cf65275aea0734 Mon Sep 17 00:00:00 2001 From: Maurice ONeal Date: Sat, 9 Jul 2022 16:22:58 -0400 Subject: [PATCH] initial commit --- .gitignore | 56 +++ CAS.pro | 50 +++ LICENSE.md | 621 ++++++++++++++++++++++++++++++++ README.md | 60 +++ build.py | 300 +++++++++++++++ icons/128x128.png | Bin 0 -> 18153 bytes icons/16x16.png | Bin 0 -> 6060 bytes icons/192x192.png | Bin 0 -> 21736 bytes icons/22x22.png | Bin 0 -> 10052 bytes icons/24x24.png | Bin 0 -> 10109 bytes icons/256x256.png | Bin 0 -> 26328 bytes icons/32x32.png | Bin 0 -> 8293 bytes icons/36x36.png | Bin 0 -> 12528 bytes icons/42x42.png | Bin 0 -> 13301 bytes icons/48x48.png | Bin 0 -> 12748 bytes icons/512x512.png | Bin 0 -> 27496 bytes icons/64x64.png | Bin 0 -> 14071 bytes icons/72x72.png | Bin 0 -> 16228 bytes icons/8x8.png | Bin 0 -> 5388 bytes icons/96x96.png | Bin 0 -> 16091 bytes icons/scalable.svg | 531 +++++++++++++++++++++++++++ icons/win_icon.ico | Bin 0 -> 67646 bytes icons/win_icon.ico~ | Bin 0 -> 15837 bytes install.py | 372 +++++++++++++++++++ src/cas_codec.cpp | 355 ++++++++++++++++++ src/cas_codec.h | 115 ++++++ src/main.cpp | 33 ++ src/ui.cpp | 232 ++++++++++++ src/ui.h | 81 +++++ templates/linux_icon.desktop | 9 + templates/linux_run_script.sh | 5 + templates/linux_uninstall.sh | 21 ++ templates/win_icon.vbs | 6 + templates/windows_uninstall.bat | 6 + 34 files changed, 2853 insertions(+) create mode 100644 .gitignore create mode 100644 CAS.pro create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 build.py create mode 100644 icons/128x128.png create mode 100644 icons/16x16.png create mode 100644 icons/192x192.png create mode 100644 icons/22x22.png create mode 100644 icons/24x24.png create mode 100644 icons/256x256.png create mode 100644 icons/32x32.png create mode 100644 icons/36x36.png create mode 100644 icons/42x42.png create mode 100644 icons/48x48.png create mode 100644 icons/512x512.png create mode 100644 icons/64x64.png create mode 100644 icons/72x72.png create mode 100644 icons/8x8.png create mode 100644 icons/96x96.png create mode 100644 icons/scalable.svg create mode 100644 icons/win_icon.ico create mode 100644 icons/win_icon.ico~ create mode 100644 install.py create mode 100644 src/cas_codec.cpp create mode 100644 src/cas_codec.h create mode 100644 src/main.cpp create mode 100644 src/ui.cpp create mode 100644 src/ui.h create mode 100644 templates/linux_icon.desktop create mode 100644 templates/linux_run_script.sh create mode 100644 templates/linux_uninstall.sh create mode 100644 templates/win_icon.vbs create mode 100644 templates/windows_uninstall.bat diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d4b29bf --- /dev/null +++ b/.gitignore @@ -0,0 +1,56 @@ +# C++ objects and libs +*.slo +*.lo +*.o +*.a +*.la +*.lai +*.so +*.dll +*.dylib + +# Qt-es +object_script.*.Release +object_script.*.Debug +*_plugin_import.cpp +/.qmake.cache +/.qmake.stash +*.pro.user +*.pro.user.* +*.qbs.user +*.qbs.user.* +*.moc +moc_*.cpp +moc_*.h +qrc_*.cpp +ui_*.h +*.qmlc +*.jsc +Makefile* +*build-* +/build +/app_dir +/release +/debug + +# Qt unit tests +target_wrapper.* + +# QtCreator +*.autosave + +# QtCreator Qml +*.qmlproject.user +*.qmlproject.user.* + +# QtCreator CMake +CMakeLists.txt.user* + +# QtCreator 4.8< compilation database +compile_commands.json + +# QtCreator local machine specific files for imported projects +*creator.user* + +# VSCode +/.vscode diff --git a/CAS.pro b/CAS.pro new file mode 100644 index 0000000..c767e8e --- /dev/null +++ b/CAS.pro @@ -0,0 +1,50 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2018-01-12T17:55:51 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TEMPLATE = app + +# The following define makes your compiler emit warnings if you use +# any feature of Qt which has been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +win32 { + + TARGET = cmdr + DESTDIR_TARGET = build\\windows\\cas.exe + OBJECTS_DIR = build\\windows + MOC_DIR = build\\windows + RCC_DIR = build\\windows + DESTDIR = build\\windows + +} else { + + TARGET = build/linux/cas + OBJECTS_DIR = build/linux + MOC_DIR = build/linux + RCC_DIR = build/linux + +} + + +SOURCES += \ + src/main.cpp \ + src/ui.cpp \ + src/cas_codec.cpp + +HEADERS += \ + src/ui.h \ + src/cas_codec.h diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..f718b3e --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,621 @@ + 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 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0d0dea4 --- /dev/null +++ b/README.md @@ -0,0 +1,60 @@ +# CAS # + +Compressed Audio Signals (CAS) is a lossless compression codec that can compress +full pcm audio into manageable file sizes or reasonable streaming bit rates with +0 loss in audio quality. This app was created to encode/decode cas formatted +files just as a proof of concept. + +### Usage ### + +With encoding selected, you can convert any audio file the Qt's gstreamer module +supports into a cas formatted file by selecting it on the input file and choosing +an output file to save (use .cas extension if you like). The other PCM settings +like bitdepth, channels, sample rate and endianness are coded into the cas +header and will be used when decoding. + +When decoding, the file is converted into fully uncompressed PCM audio (use .wav +as the appropriate extension). + +### Build Setup ### + +For Linux you need the following packages to successfully build/install: +``` +qtbase5-dev +libgl1-mesa-dev +libxcb1-dev +gcc +make +python3 +``` + +For Windows support you need to have the following applications installed: +``` +Qt5.12 or newer +Python3 +``` + +### Build ### + +To build this project from source you just need to run the build.py and then the +install.py python scripts. While running the build the script, it will try to +find the Qt API installed in your machine according to the PATH env variable. If +not found, it will ask you to input where it can find the Qt bin folder where +the qmake executable exists or you can bypass all of this by passing the -qt_dir +option on it's command line. + +while running the install script, it will ask you to input 1 of 3 options: + +***local machine*** - This option will install the built application onto the +local machine without creating an installer. + +***create installer*** - This option creates an installer that can be +distributed to other machines for installation. The resulting installer is just +a regular .py script file that the target machine can run if it has Python3 +installed. Only Python3 needs to be installed, an internet connection is not +required. + +***exit*** - Cancel the installation. + +-local or -installer can be passed as command line options for install.py to +explicitly select one of the above options without pausing for user input. diff --git a/build.py b/build.py new file mode 100644 index 0000000..c07bd35 --- /dev/null +++ b/build.py @@ -0,0 +1,300 @@ +#!/usr/bin/python3 + +import os +import re +import subprocess +import shutil +import platform +import sys + +def get_app_target(text): + return re.search(r'(APP_TARGET) +(\"(.*?)\")', text).group(3) + +def get_app_ver(text): + return re.search(r'(APP_VERSION) +(\"(.*?)\")', text).group(3) + +def get_app_name(text): + return re.search(r'(APP_NAME) +(\"(.*?)\")', text).group(3) + +def get_qt_path(): + try: + return str(subprocess.check_output(["qtpaths", "--binaries-dir"]), 'utf-8').strip() + + except: + print("A direct call to 'qtpaths' has failed so automatic retrieval of the QT bin folder is not possible.") + + return input("Please enter the QT bin path (leave blank to cancel the build): ") + +def get_qt_from_cli(): + for arg in sys.argv: + if arg == "-qt_dir": + index = sys.argv.index(arg) + + try: + return sys.argv[index + 1] + + except: + return "" + + return "" + +def get_ver_header(): + current_dir = os.path.dirname(__file__) + + if current_dir == "": + return "src" + os.sep + "main.cpp" + else: + return current_dir + os.sep + "src" + os.sep + "main.cpp" + +def get_nearest_subdir(path, sub_name): + dir_list = os.listdir(path) + ret = "" + + for entry in dir_list: + if sub_name in entry: + ret = entry + + break + + return ret + +def get_maker(qt_path): + ret = "" + + if platform.system() == "Linux": + ret = "make" + + elif platform.system() == "Windows": + path = os.path.abspath(qt_path + "\\..") + name = os.path.basename(path) + + if "mingw" in name: + tools_path = os.path.abspath(qt_path + "\\..\\..\\..\\Tools") + mingw_ver = name[5:7] + mingw_tool_subdir = get_nearest_subdir(tools_path, "mingw" + mingw_ver) + mingw_tool_path = tools_path + "\\" + mingw_tool_subdir + "\\bin" + + if not os.environ['PATH'].endswith(";"): + os.environ['PATH'] = os.environ['PATH'] + ";" + + os.environ['PATH'] = os.environ['PATH'] + mingw_tool_path + + ret = "mingw32-make" + + elif "msvc" in name: + print("Warning: this script will assume you already ran the VsDevCmd.bat or vsvars32.bat script files") + print(" for Microsoft Visual Studio. Either way, a call to 'nmake' should be recognizable as ") + print(" a shell command otherwise this script will fail.\n") + + ans = input("If that is the case enter 'y' to continue or any other key to cancel the build: ") + + if ans == 'y' or ans == 'Y': + ret = "nmake" + + else: + exit() + + else: + print("The system platform is unknown. Output from platform.system() = " + platform.system()) + + return ret + +def cd(): + current_dir = os.path.dirname(__file__) + + if current_dir != "": + os.chdir(current_dir) + +def verbose_copy(src, dst): + print("cpy: " + src + " --> " + dst) + + if os.path.isdir(src): + if os.path.exists(dst) and os.path.isdir(dst): + shutil.rmtree(dst) + + try: + # ignore errors thrown by shutil.copytree() + # it's likely not actually failing to copy + # the directory but still throws errors if + # it fails to apply the same file stats as + # the source. this type of errors can be + # ignored. + shutil.copytree(src, dst) + + except: + pass + + elif os.path.exists(src): + shutil.copyfile(src, dst) + + else: + print("wrn: " + src + " does not exists. skipping.") + +def linux_build_app_dir(app_ver, app_name, app_target, qt_bin): + if not os.path.exists("app_dir/linux/platforms"): + os.makedirs("app_dir/linux/platforms") + + if not os.path.exists("app_dir/linux/xcbglintegrations"): + os.makedirs("app_dir/linux/xcbglintegrations") + + if not os.path.exists("app_dir/linux/lib"): + os.makedirs("app_dir/linux/lib") + + if not os.path.exists("app_dir/icons"): + os.makedirs("app_dir/icons") + + verbose_copy(qt_bin + "/../plugins/platforms/libqxcb.so", "app_dir/linux/platforms/libqxcb.so") + verbose_copy(qt_bin + "/../plugins/xcbglintegrations/libqxcb-egl-integration.so", "app_dir/linux/xcbglintegrations/libqxcb-egl-integration.so") + verbose_copy(qt_bin + "/../plugins/xcbglintegrations/libqxcb-glx-integration.so", "app_dir/linux/xcbglintegrations/libqxcb-glx-integration.so") + verbose_copy("build/linux/" + app_target, "app_dir/linux/" + app_target) + verbose_copy("icons", "app_dir/icons") + + shutil.copyfile("build/linux/" + app_target, "/tmp/" + app_target) + # copying the executable file from the build folder to + # temp bypasses any -noexe retrictions a linux file + # system may have. there is a chance temp is also + # restricted in this way but that kind of config is + # rare. ldd will not run correctly with -noexe + # enabled. + + lines = str(subprocess.check_output(["ldd", "/tmp/" + app_target]), 'utf-8').split("\n") + + os.remove("/tmp/" + app_target) + + for line in lines: + if " => " in line: + if ("libQt" in line) or ("libicu" in line) or ("libssl" in line) or ("libcrypto" in line) or ("libGL.so" in line) or ("libpcre16.so" in line) or ("libpcre.so" in line): + if " (0x0" in line: + start_index = line.index("> ") + 2 + end_index = line.index(" (0x0") + src_file = line[start_index:end_index] + file_name = os.path.basename(src_file) + + verbose_copy(src_file, "app_dir/linux/lib/" + file_name) + + if "/usr/lib/x86_64-linux-gnu/qt5/bin" == qt_bin: + verbose_copy(qt_bin + "/../../libQt5DBus.so.5", "app_dir/linux/lib/libQt5DBus.so.5") + verbose_copy(qt_bin + "/../../libQt5XcbQpa.so.5", "app_dir/linux/lib/libQt5XcbQpa.so.5") + verbose_copy(qt_bin + "/../../libQt6DBus.so.6", "app_dir/linux/lib/libQt6DBus.so.6") + verbose_copy(qt_bin + "/../../libQt6XcbQpa.so.6", "app_dir/linux/lib/libQt6XcbQpa.so.6") + + else: + verbose_copy(qt_bin + "/../lib/libQt5DBus.so.5", "app_dir/linux/lib/libQt5DBus.so.5") + verbose_copy(qt_bin + "/../lib/libQt5XcbQpa.so.5", "app_dir/linux/lib/libQt5XcbQpa.so.5") + verbose_copy(qt_bin + "/../lib/libQt6DBus.so.6", "app_dir/linux/lib/libQt6DBus.so.6") + verbose_copy(qt_bin + "/../lib/libQt6XcbQpa.so.6", "app_dir/linux/lib/libQt6XcbQpa.so.6") + verbose_copy(qt_bin + "/../lib/libQt6OpenGL.so.6", "app_dir/linux/lib/libQt6OpenGL.so.6") + + verbose_copy("templates/linux_run_script.sh", "app_dir/linux/" + app_target + ".sh") + verbose_copy("templates/linux_uninstall.sh", "app_dir/linux/uninstall.sh") + verbose_copy("templates/linux_icon.desktop", "app_dir/linux/" + app_target + ".desktop") + + complete(app_ver, app_target) + +def windows_build_app_dir(app_ver, app_name, app_target, qt_bin): + if os.path.exists("release"): + os.removedirs("release") + + if os.path.exists("debug"): + os.removedirs("debug") + + if not os.path.exists("app_dir\\windows"): + os.makedirs("app_dir\\windows") + + if not os.path.exists("app_dir\\icons"): + os.makedirs("app_dir\\icons") + + verbose_copy("icons", "app_dir\\icons") + verbose_copy("build\\windows\\" + app_target + ".exe", "app_dir\\windows\\" + app_target + ".exe") + verbose_copy("templates\\windows_uninstall.bat", "app_dir\\windows\\uninstall.bat") + verbose_copy("templates\\win_icon.vbs", "app_dir\\windows\\icon.vbs") + + os.chdir("app_dir\\windows\\") + + result = subprocess.run([qt_bin + "\\" + "windeployqt", app_target + ".exe"]) + + cd() + + if result.returncode == 0: + complete(app_ver, app_target) + +def complete(app_ver, app_target): + if os.path.exists("Makefile"): + os.remove("Makefile") + + if os.path.exists("Makefile.Debug"): + os.remove("Makefile.Debug") + + if os.path.exists("Makefile.Release"): + os.remove("Makefile.Release") + + if os.path.exists("object_script." + app_target + ".Debug"): + os.remove("object_script." + app_target + ".Debug") + + if os.path.exists("object_script." + app_target + ".Release"): + os.remove("object_script." + app_target + ".Release") + + print("Build complete for version: " + app_ver) + print("You can now run the install.py script to install onto this machine or create an installer.") + +def main(): + with open(get_ver_header()) as file: + text = file.read() + + app_target = get_app_target(text) + app_ver = get_app_ver(text) + app_name = get_app_name(text) + qt_bin = get_qt_from_cli() + + if qt_bin == "": + qt_bin = get_qt_path() + + maker = get_maker(qt_bin) + + if qt_bin != "": + print("app_target = " + app_target) + print("app_version = " + app_ver) + print("app_name = " + app_name) + print("qt_bin = " + qt_bin) + print("maker = " + maker + "\n") + + if maker == "": + print("Could not find a valid maker/compiler on this platform, unable to continue.") + + else: + cd() + + if platform.system() == "Linux": + if os.path.exists("build/linux"): + shutil.rmtree("build/linux") + + elif platform.system() == "Windows": + if os.path.exists("build/windows"): + shutil.rmtree("build/windows") + + result = subprocess.run([qt_bin + os.sep + "qmake", "-config", "release"]) + + if result.returncode == 0: + result = subprocess.run([maker]) + + if result.returncode == 0: + if not os.path.exists("app_dir"): + os.makedirs("app_dir") + + with open("app_dir" + os.sep + "info.txt", "w") as info_file: + info_file.write(app_target + "\n") + info_file.write(app_ver + "\n") + info_file.write(app_name + "\n") + + if platform.system() == "Linux": + linux_build_app_dir(app_ver, app_name, app_target, qt_bin) + + elif platform.system() == "Windows": + windows_build_app_dir(app_ver, app_name, app_target, qt_bin) + + else: + print("The platform you are running in is not compatible with the app_dir build out procedure.") + print(" output from platform.system() = " + platform.system()) + +if __name__ == "__main__": + main() diff --git a/icons/128x128.png b/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..2ba43ce559b5b2c0b2a1ac7643414f8753b1597b GIT binary patch literal 18153 zcmeIYWmF{1vM$_c<2JZ9?(XjHFu1$ByW8M8xa%MT4DK+vyE_96ZiCz9efK{5?6bc6 z=dAVJf4h5CS5;=jlMzowMptH5l#+rZA{;Ip002OgmJ(C>I0yc9z(9Ze{uD480{{q$ zygzHYsu+2I9GxA^t!&Leu3nC2ATv)Za{$0|bs}5K9iKZ%{JrjrKKOwVH}+Ho!Jq4A z0Z8dYw2)$!lcE8cFL2&15YRt3u~E$K-ro+>-**&U7&6mkCg?53@|KNna)`e9y&T=Q z|G4t+4$u!6=oaj--}K+{qQ3O-^b+-NeY%p+fYI;|IUL`Fuvv{mzS7*o?*q zec|EQd%Y3yfGso~uo*guyzlRz`&(q!0tn@2sf*Zl~~`~&pqBu8Q{r}aS@O=c@l6~Wj(nPzjB)nYvrFYfAaZU zQI`wGtHoi=7voL#MfY4|uM)T3qn>9>f%hS^hI^_WA8W&TgP{3hYfe5K`}HoYyE9K< zeaV`t>k+5QD6Ft+{ffMyR>X{%atzONp*wb9$3LL@qK!~ zd%~i+iOhCJy<5SEcUPi%TYBJ@<*wUL>5i0o3btua=313YEME*^b!GgSWr#$F=@f3g zIWDNr^-q!mIuOk3P|#6I)U@&^wPBZs^U!Fy=T)VcOHx#&*&F9whMCKcSjW7!vUWvfe@Rc+qK`B&qjDD-E?%JS8bziqS)N|jkyBGbIx9B zv@hb#alUZ%Op5(^D==mmSH|W7N9*G4bfOexqMmmw!)+-O3ydkC4)ZSitbp8}vp$I` zZ)?A@Hl9d{2VRB0m6}zpk7QCwZF{~Bz9UCWV=NcM7A+s|5dyjD-Bt?b`Y=2fOM)AK zJF^8r1LFr<@kmp;1w7GMp7`GKj(JzR7&ke!9$>eacD^gS2eyNuIVa7VHqOq2enYEfQFT9MQVx?)(8KOWW|7p@>g`ZbT zktZIz0?C|LQoJhW^B4GUQBAPBUrKNJ+hjCv>ukus>sh*mog@F;e93}eRS4_*UJ<{J zT$%Wc&_xs@SyXuWJJI@O~l2W(4Q3G`F&zOdVj2IIj_BpCrhm>^?BlX)$`wX)xo`+a%# zX$~qmxJ(o$i#t=^k8804G+s`mW3dG%g|z_{e`R4FbOUn$j4z1lhX`F37!mJ}64Ost z%dPs@c#1~0iv-w<#n$;v(o7I;ooQClmf*}y^Iax^hIzV=Zz4oEiy1m-*6Xs7$_L`xi9cRnERUg8_1$mz>~`kz4ObQyUS`h-1Gh-umw zl7K0;X(8k-AbU6TZG5`3h4=!WMFcfEZ^X5g2#UNj?Hv1v3=PZ36K(E6bf7;T-GE4I zN%Z(u*dISJ!NIu~c_9o%*w`r&Yk%xnhq-y*Jil^6!w^S59QQfj`JBaevR5EC509#e z#KO*4B+QHq*0}{fD8PCf#uid@xwd5jy8?WM_I^X%vWH{*=cPojxal@e-1pRwY`3x9 z!*~=MB_)DCj=#Ib4PAozaKCFfUWqxwaD?I1`ga&6lwSVShh;yV&V{c6zPC``e5bG0 zlf1v1?F&}d#_dV`ZZD_#k9k!HPs>g1h1X1=IP=5*;%1X-PIlX zgmVSz{gHZEJaHcZOuCYsdABO5o**+j(QFN|TCZ-!Np4z4>&r2-lB70&8UmEvZ@`^i z7a|es?k2e@40u`mVy{uZ00>^S_Q9SU`LTYx1i>`g2`+bRYj5brbnB*vM25NlkO9S6 z_>vyBNcySB_CPL)x$-{lCRDrkZ4P^%(#>!a3p}$4Sx(fnmmhg@L}x<>Gv9Rk8o+Q7HMiHwWeve}E)T}kFX zBLQ4O14>-E_^A`Pf;u4U&Q-Uuwm@%rJTbeXF-^jY`a?JJw@3XsK{b{z*kBE(?8N8{ zDOfTb7l&!m;L|~{4(;OWK|GQN7JEmK!b~;cRNE(YjI%l_hvvEppE#4JZ!|^jbY@Ka z!r+jKBF0{X;>_!KORVnARoKQvuu{Jxgs8dmg@l;WgsX?}0dVUmCilO+#6aouGpgmo zPe{@z`33q_sIxE{J((=g5Yh6(npL}~Md_~SCz{Nt$lLl0?!)D5UL>oI=9ge@aWoYC z=M%{q{8~&DxVo*KhHeF;T_Ga-Qx1ynx7TB8$ft8z6MmdFQ0oUjAim|umA0YYKct=3 zf6^}rx)zN=0?Br!?IsbZjtLeJ=MQEDeQEIk#$e8X%TG6NQ+R7{1YsDJ4e;;VWka4H zLRob&PhIT9CK9A+9%%6(OhPF9vGSAo|F^>ccl-I1ZtUut7$T* zs$rHL5@DZRrOrq!79UDvag7oNfVp;ft=F>!D1V(AMWbwlUl4q&@wf`os|vxbY6uZ_ z%hvtgVm;*I;!B!#GYoM>@tf(4VnxV(?339Qh;3RbCh@M+nLdtA^)=rN4(V~Wen>2J zN8`s4Rx|{GbQg-O)Ln9?pK_?w&Zzayod^laWI_*!Fy@E{AG$)q7q=;*{bx?j&iM0l z7#3!1{3@7qOtA)Mmf1<>gtYl5RRmwCc%WxU2d>Vmpw#29uw0U&))F;%^`PtA4uoh( zNzgvJAF;xGhm}>^I(2+#DVzc`cy0 zc4d_oXucD#1TGg~oQRPVICc~xyOPTWV?_28?|PZZ(M-_|&IJ#F2gl}2JA>m9)t`}N zzVFtoK(3mB&lVDy91j_c?1Cm-!o?pYvMD=`qmkqQ8&9EPq%db0i2w95Dg;k*<5nU=tU?3ZRj2K0-HQX#Ptxf-#@aa&`m^^gze8wxV0)W*^!!{MmZC_P%m&S2E)eJS6+#5q)uXv2gdJ5vDGVf?4e6^^S zBnGtJ5J2mopsmCWNs6kxO;AEN=5GUL;ju-8V0pouei8%V2nZkde~6tU({Xh7q=)+0 zlrv}V?_k-(>%AYBGfOrMn7>YsU^)`kRo`yEY2xM@CBGw)5h)PFOL$LuNIBPYy>QY+ z(K51h78k}+ucNwQ**C3{L%TYG0I#+K!QDD2$n;4@6(!?s@)Bq_6*%O?JGum9f@mbc zFB+8{^h2j5#X-4ny-eQ#i0IhjdO~zHqKQiCqtm~hv|t3W<#3PLe#AjcpF-(GY;98j zv%tdp+R=%=6$>GE>Wdr&PtrAM@FtpdyU|~A6jN479~ZavQbR6O$kz>e$?G+-d=`6S z6oMIyx446_w%2S3jk%-&$!VEerIH&u%S1AV!!eAf)K_A*5Iyt#$;RIidZ+8b(w*9^ z7Hfo1K>m!MA)(o8 z(9gqz98;pQR4`iB7uT~TE*r}t-0`Jje5fkWkdnOQ#KqdG+Lt(cbmnT!4tDEmF^E!) z=0WDbBBo3}DmL^5AN5r+v!{)Wc3j$>WKd-C|aC-5Rbco}+ zJz~x0Ck*71^-x%6B|%&hFdIB4{@m97dbPDVmLH1lWLIb;*L!cjH z3uH87bg?)N7QKOi{(%$ld1oVxNhp|=SYp}_!M;?6L?K1e70;q}A%b!x%@Mc|#4XW| z6)MvA8Ags8nsO-eh2TNG;pgu&=oX9yjeb0gKVL%#;F%%d@W$f0nG#dfWT9L1x&m7= z5a@pHcwI4;V~2l+y`)EmLDMCflv*iF`}T`W1fJ6Bb8fzu?r<(?=H4Ku;PZ@_ z=2UUJQjspbdFH?Bw$-SAqHjeTC^#nQ;5=DMwxHRXs3l zj8YQ9SJ34^1;{3tkQVsFHl4IAJ81g8$i{3W(|Ao{2@0{0;OvX9TfE;$>Gvf=nCs4& zsCJb>8ji5E&Vq9&&(iWge(l{=c7Lz9L!uHG=|!ft%r$lVBF1&C{%7(Jq)+x25nS;# zj$df18$1eNr%?gPRJ?uTD5xHZGIB6*kY7Gg|2mzbb&)FbH?Cofb`7Yqa${KlJFWY* zUZz^|i{U^LvKqTLKt{|tQELiFHvZfB| zyZWN8UEvo9NCu#&TXQ0hZJ(Ud+b=^)itZ@F1Qqv7h|{h$m-eg#c^_l`e(|SX_fK6` zvJ;b5^OC)r`(lIuolmaX!4%j8Ng@sS(qBc7@Vi+w&f#c;cphr2B@nypT0*|1zN5v5 zjLe?}dHX8Bq!i?WIpNcPo690_Z34;pmZ-WZWP4=XunQts4&%NJk_tfcrhXHUazdT` zQa|YSC-kO*49F7eBr3O7Km9U=Pvs$lVu6+q0j{;yi5gvw*uG)Wh@*yNkAGW6AUkIK zhXJlXTM`sG{Ah<_)_gymBmP}Depxw1FWma3??-q>upHi3?R8MQ~j z7SscEIR6C#Diu$Kxv%0F;~|={AIMkVNNjEby}F+9JF^v}{AiT1GZ9vf9hlcPph$K^ zQ~#O+=zrC;5NPX{k1A@C*g_fkR_MHqfkD%{4bTN~I=k$`cxp6l{;!Pw$zv&G>>gbh|`c{%@kaV+k2 zO(M=PL?3rC!9qP`bT|~sS}nw0*`Vszl4I*};Vt`buc0{MlTuP>z9XAO`%(e3&~;I@ z0OJEK!}`0mXJ~8S?7QV0)VjYZacju%xeFBpJ_IDbTCr4nIGvgQY>Gn#|9W<}#ofjH<)VQZV?aEs#&dy@eJ14qHcR0!+ zsX6U$l|aPrQSvMfajCx;YhR`$#FQ*Yy3XEC8o2c! znvZO$embk&llBB&*Z!h;_D%Xp1(FpehQf=vvaYHodt3~To8)G(e?CjVH%osbT->Sm zOh5o(u`pCr&+cRG6D=-4P?axe#uhb%#i_&rqp{+J{fS9eXTg&#s=Y}RDTw$cgA!1% zqz|va`GC*jsd(WU6AFI_3gaV%n-3LYQB{QN(Nj^VMFtd8q(Vu)bCI}tPHtX|yHygU zG2m<}9ZGdsWg!%u(KwarGWpNn*R7%tKmqzjNz#D9J*XrH%;dJ& zL16=#3qHXri+s;nJ9bv^dOmJAz)I3Y70CPFz5KuZe5?=VI-P6c)Vp{SRaccD>=Mye zEkxgT*IV`d_{(K@xV-iA4@u4>oeF05#*1(lywPJVo0T+ewIDhe&pIDE z8x8_$W4)pA1^zB0fZeh0x#uML&CI4A;n^$+K6$xU^h`+r{`aW4%XE$oR}k; zrgiHGv|icx}%464<1B^`cPakOKOy zo}5F-9A=$g%EYwVA^>cHM~Hr;M2&duasWi!w_rEu!@??Mw=5Np&rz$8o@QsOO5}2g z8tY_x0}%ThHsEP;c?c|S4l+@xi$U_KcaGv^=uWfg;IUKUoiiI|Q{>Qs?@r)-AfYq;Gh`rg2}Rb=5$dXDUQg*Nq8KW7xI z20YkzK$mgEu61_wfI5)&w8c#Pe^(E#S!}iJ2Y66pTp3*XeZ8p}|73}zYceywW$S;&ZG5bck+PZ_$ zj=j_Bt7tGeRjM1963Id(jk<4q!3#nZyDo}7g21e@WN+y)PAVIbNm1;agmkZuQ* zf3K=`)VbwHfN7`XOOzBT|72iHFa&ZwYf<4hZ`^6-C(QX;CN44sdk(GAa)LtpE5E6* zoVmaFi~$WmpMPh?2?eZXh0+;H!7`>{!9=T2w1cJhE4)Nu950PnG4pLeW@D?nUq=*v z)3Nw-ZGN-T-e~kC2PtTm0i15OYm4;km?imURbr_%d0QIE4xf}{-g1dTy7!db74b2c zAcDeev=53Mi%I+!E>vtSVj%W6WumXDL*lQp;ERNES$fmLo7nTL^9oEOy;LXp#jZ4C z1;uU%Qm0OwbxP4ZRl1aE3cL{oOXhDIs1F9>rnzdUZIygTU&l%kl2=(HVy$N^Xx4}< zR3`-aAn%7(KHuEuaYomyUB*T})Yo?js9SbLQ3_oRq8s>A%=&s6PZu;!F4{jeN5D;B zfi>O%hx`mkt#kcDF9`F`rv!do4Lw@j+yl!61qJQ=1%(I%1chGhYRB8B#NPIYjvbZ6(CBNy{89p+R*rHpoEAmD&dZ(g^c^|P zk&!{M;{EKwZ|hRr2&MTgn#7ZR$SW#^hY{b)pc*kQj$4c$0>JxZuO(CHtT?14wW>v$QLNL^ynXW1qtdJdsoKIn` z(vi7JGco0oIfj2I*D5BFmE?ntS#x;|CG{;3YM-iA@kr!sMv|MW=UP^&22B;!(aI-k zx!}8k=SF;Q$CLo8tS&t7GzL=}$w&@m?(d9Lck^0mr8^yLyyIU**CgyDCUB&#@}BAATZ)Gr?zm-ZoWS_@oUfYh_ghGC zoiC?Gcb*H1%Hj(VR#pkhBy>X`000(ZB`T^UEh_q7+qEB?wAp@%{8B%K@COWZ$Z0Sl z+)#0C)t^#3$4$z(`lKqfyif5NuEM*LHME4?P7H1M zzcQ3rlXEHK(4q&B)OpfV;r!gR%SPI*`(syY$SIxWiM%@wJNw^OVb&{ zqKQ$J7sSBX_FFAT*Cmv`hQh!x9PAj3OdX8P7(DG9KX%sv06sxaMyl|FX}{QC|LE@b)hMWZ{DkMo%M0MrH;kMmsykf7ftv z6?gvt`KLkuR}GiXA1@&=s+hSrxH+4ciMyNGyORDpgsI8D^c~%tZU1)1)P&K@*39lh z)a9d9=Ks;8q_n)!zcl`$z{1MT@o%jUvj2yqtCjhGll4Dr`>W<}cmCaw5A}cH{txN@ z^8Ih&4=H(h9x(?Kx4+Dj7UL)Rt9>3*2NNq(p1&`Rm`vC>x!8>8&5XEA=-JFzndyzW z%(&>enLbXOX6DRH<}CjPC2jBGYGiL>_7~I#ID^#(4wpF_t0_0P8NCq)8y7vBDHk_A z7aNNyJ(rQO2`dw;85gJVze6ZGTYW^Ok?p@*^%s=s2b7Ts8#5;>t2w<1HwQO8n+b;r zJ-3Mw8$Aa*_lH5orc7+6rhi*wYQiJo;B05~(VbRyMiyp_j`kLRSNugdkFb(7KM4y1 z(|?yJ*&4Z;e<<*i$XVIDdH#3BXDd51Rac|G*ktBl=Vaw(V`AmxWM|{z{x@xPGiR5N zNc;eBlvwHZyW{aQ^JzV9QVPmr0<%H2)57 z5Z^yKMas(ML&EE?i2rBItC~6eGLsAC0&extsligAcubRGC;B z*;|->jPHL2)PI#*{a-qZ+nkHrh}Fc1-h|bN^P{ua*y)Y9nVIRCjLn(3OwB*oHvNYi z|3Y_hFn9GZayApT`0(_@n~wnc+Zzzo-&9in?exE-JuJ=s;)&^FY%_7vGjV@rX6IpM zi_bXkMaM*3E$rW|CRu!IBZm0`ey z@qx9hqL>t{7Q^=Lth~118Ai$D+&_{dh%`m*7c?N$c?fPt|O z*#n+mD!axKNCwjF(bb#7ge(t?9kp1ZN9*18O`w8S8n^wDe~T}bAxYK;5HW08u@sW} z8c70Z>scSvW>0LG4E#+Ns9Lok?Y_Zb1k5BBcTv;QhXkmDr*%AY=)K-O&$++BK)jcl z9MT3nD3UZZbbJnXQ4jjf0niAUu;rl03mpefganvF$3VlvPWL2a^!{9BASsg`CPZlj zw>0Gd7OZc8v=G;L+TIp*bK`C_l$AFHM=LgGQUR@jbn6eq!07Mk@P#%j={|<8CRe#~>&l+$1OM!h` zTZxJ4ZNI=^uBZaD(p#}5fE0nhO^3Nb-+;AW8#lM{SMDY5r*e<0H*aTBHWAAU3)gdH za&`|ot=AlQJ?-plP-OJr2XX691p&%Va40!at==Tws67;OYfiOB`xrEi7=Ij)Ol0U` zGOfv&-oNW7i{G$m6G=MmF#RtD1~zZ)vv-CZIF*XYKBF zu)gDbEEBS(+NwE!fhI5j+)6JXgV?*!85r})PvYLS>v0qdv;8Xptggmf+Jx;JFrA2! z_~%#R!cW9Y5QSd>Z#QXz26No6()sG&wt-myY6qi(?x30GXPB9a?A-9OU#Q|2|IbPZl{#D~`P zHfupO8d6=Od%vdAt{YPbgLR9|C5=*8p|TTHrPpn|SQa&#B?WW+oZ1c9Q;Dr4Ab~>$ z4b4r;iNtN?7he3j+O~Q}&It}V{VTbL>sR;ac(g@ACLH$-^Syh(8L-brLXWIc@?qJnaV&lB?t1b*uz=6L_G-t{+dXQG@IB_{T`tfS$t2BV{l>_R zZzJ`DqdF-fXyvIip7t&jFz?_8>=ni%a%gnn6d?`a2?E{xmbaNR$5DtLm~JJ5f62X! zyhG3)0>@wMu<4UyA+ck3+3=bVmZ{)iAz>q1a4iV(OLd9_%wIZ0Em8QV5~iB`58s@0 z5Qff>7#@1fYn{8`4lE4W$WIVV0U7<8gcR%il@fAKf`*0kiznEWAZid1f4@90LV24$`8V`Qrm5rO}5YuLChXxC$^se0(fbf z?V!l@gfr!aMO+m)lqe%R(Qc=zv0g>w`+WUmqSoGa!}S1XFMAD%fn{g3U(2am_RLvC zA&+Awb#5jx99KKe_XpaV%^<`TE74KG2w#ezQmP_yV-!_rFyrO4Kf`8PJ?vT>?jDw0 z*$;2>POZkZBlT(PE%F4LdlV^8)iB^S5UA5KEGz=<~e zNwR{EE)p8jJ{;7^mUtLUCH@uGF)TQ{v#oKI8rSGC@E2s#5=#n`%aIA`>G){`OL z{0!pSXT572ye#^poUMjk;ENIjz&6J}a+%o!$T~yRLLr`_K$mC<le&~uOgfeb$Az`xFR7tus8Tk_uU=|lE&K+bl9KU;UVjOw3+|^v9YN8`L zFN(kl0p4wp4UN|o!|6#^Ktbflrn^zq6*E%oQe+kBW(L6^Gev#3oA2PueA^DxkE zx}U7rjs+z_gH_C<4|LD>NinB<_TyFzUDT#pww#yWs>764uPdvo3|>>Sk9!_KNe?0n z9NP10e5qBb)zQvwDuN6!?#P$OqRXcvY+UsCXP-gKj+x*2iZ|Q$w%DJ?5rrREXD!)d z+IjAbIy+F1QLwaeK5}um@Sphs7I%tz=hzvlF}Ur)m+b`MA#D5;_T`llMjY7gXeI$G z4`4TCXpdW~@OqM!7sW8;rWh>8R%UY%vB~=Rc97Ua$%uBVFtxH4dT_pfv32!Mu#y^4 z`|nr3hAno0z5s#v_aacqX*VX?W!MS_5UJcr^(2Ua*Z5I#BOw-SfK$saeG5^dBJms#wF5rn z*?1)D*nQ=LX=5%CC}Xf44~1lo3&tqvO9=_BBie~*F*^18plh&v^1|9qe&|FYvVKM2%v- zDV}7m)(E<=6Whv;X6k@P%tzK6sVu?KNBdMYy-q(eSXVHdj@>pHl!*^jI_YLqq|x3u z3B51~{%kg~Q!9_{Z^Si;pU|lglN4{@e)-a7t9j|8X+9hS5r_$;@4j^KjD?G{4Nv;8 z@0i9UhldvNBRwG?o^yeL(ZMC=xgagoc(qEzfr5G;OT+>8GIw8eQ_Q^ZIjWflwU)>b zVaw19=DH2@)Es%e3=pjKhid5P&oK9o)X$hyaT((vs#^>6bXqHDyny` z#8i=@nT{b;K>w1Ns!PYxrx6PZvK^>##Ec<4`lxKV@^ zh(55WN3fkG88R|f7xi)44z$8XBJX94m_BMf}+{7OnWRpZNkx37W$=q;G83Y}wPU*(&cdHy5N%8ATfnE1UddRl(ogiI1 z5ede5e4VNy^AInE4-X@b&Mv~yt5Lu~^Cq4~Vb6^zoITCAu=$h0Z-|tVNxxhk9K`9K z(!+}_ppic|kQTR3VG2FM*T4;+v``TJ6Q zLtzaa2NR(ILkFrlAPtVqI%je?GJ!vTK{dENB7~6kQLVzi2s%Vi{tz%Tkn%Gn)S4QgEp2D>i}8H%Tw9 zk*b7PghU>nK>63DU6(G@C8p2EhXWX(FAp<#?hQj>UqlT{<^=;In&pPFg}`{`zfD={m2PU*D@p#CA`?`k~=j zR5b)ab9YY?h2Folv-`ZPFsjs&i40Dx7lnp|W=33OG*ePDpTHnNw#kPytGnJsMJlX} zyHy~ooGX(i+nAua&KgNrcoupovhDyQu;NcXBENKsaHafoMM3~G(nNy;A?Z%}b5~Tv zs^Cjd$vT388BTVY8jpk6_~&k_xn%&3Tksxg!L9*OiMMxq~PK8TKO8a^k$P`hEWH-^xj7uT_5qM7ra zn`!Yc2ja;oLy+wXw6H5@OSUUTdNpP0%EC$@1Bxla1PVyFxnJ9Hq$NEoREmQgu89qq zP%A;^D2-1I-k5Q&0{~`IWT|Etap?x&cs*JUu-2k#NV&8eG{sU;BFZL z(*l@u*A5>n)ModQmaur*5%)gFFA*x?HW^Zm5IWk~ zPrE=^Mz@t~q+EM3*WA3h3q_>{4v5&2liU^Y1I8cpe8ycEk#&0Lk02E;FG{u0GzQKX zv~A`ku~CbC_0uDp!2=U21uDZZ_>c^{KZgFrJ+@fm2YwonoF`xZ=sI9_@0v6;WqGau zXdo)B#a4^*JdBk4n-TRUOHbF$hJ!VW(>I+G84V4U0{`fG@e>{F+HhJ_G;)HNW*XL| zV=PicUAtt-I#7sgvz%tkL@`GwZooYuA?~B8XI}jB7VqFz;V4>&s7j(*CMqTe&7i7R zJERopM^6I4n&dnz8LuNi%&n^t=-M86rNrNx4_PxJ)aQR6ju7O^{R_eo!Nehg7iX{9 zq#7x<{F9VQE_ChE_q)I%hUo)G-zPSE1{m^U|3F9+udaQsU-jgLmrn7lIC~pwKiov; zB6)(;%v!@^H@7u>ghF9~yq&j@(X4iK6AgwGDg?1O9uZJ7^&Q^}&+MWKbHqo7Y_gXJ z>9?L0>rmamHTHwDe?B(}MS2UaLO=!@a1Nm0cv>Imz6M@{`-r$9{A6nJ&~Gc_5V4Rm zQjKo=Evhb!>p*btZr|4I`oCN!K~jD2b36g z@NOIo8fc_^$G%c|8MfF%3alKh$H062gnjlfBfC5l%86I#cssqAVr@}Odb5}#H~N(JCoLQNI+ETaz3Wbj}a#DmDf;(31(WU1O--a=BBFY`!DAbM)Z z>bs2gQ?`sWnSGPre(orz zr3b$5v$C>%-bMVvf;8#HQg%KqNrd$^8xqw_IQ zfY|aSu;mDz(C%KC#}L_V`T4MaCBUb=8h`B4E{xJM8w?Ogrj_i!zyH+rc5!Cqbh%q0 z(7-h+3R2}js^Jb2nC*XDJ6`bT(4w*hf&P55@#ziSX7Bm^e9TL#nhv^w9 zmoVrbP+Ji$*4i}wdNmqv@r)|Jyny{vaQ?PnYyqo-pUexN9w69y^>%{GP`q`M)U(qb zbZosgCdT-&U`ts#>v5LBi!Ls&WbstB&IyE-fue_j0*mRqt%M)`WZbxjaalF+#>=}$*{l4xv->##J zJSZayTyxx&B>Pp01F6uqPVp&P0Bh|I9=6cw#95b&scWLbUlwDb$pUN{;ehwm966oD znb&Rn(Rhv1;k5K+z`J9VD4G0H#Euv6u`YOKT0&@1Es!Z}J-RPoT%Bk6d=R_w*>QuM z`aMZ%`?Bd{LFzg8i&I<{qy6y|^?wN0fg&TgmG|DrK|aJBP2bxQMruNPm? zV(>@xlz#Cg3{JitmWn-^#KFov z*ek8&%8v*1N(5kt96aMc(tnIA)GmWYzHZ)yCzJ|x0RUUtzWc4M-##xuKv4`2%#w)2 z;D`E2uP-CaR*iP{>2)DrlYsO+IOMbQj!=>Oipth;ayWl0F$Hx1H0PaB(@b;=d zCp8E=3f$@sy9x_Cy33MRf_ChX9X4&Ev$gJ(K@V;uPI!SGR&g)xB;TMeJ?wSn-j80c zlKC(Wyi}yO#n&20E1SD37thaO&~6$HZ^Rc5kfleV<`5p;K;DU=zB#>lRUdySYU_Sk zh`e^AQ~~2r#L24%64lukYFg@C&tQO)o);XBHf#~-QtWF2z^&n?&H6I*`Pq8I&dp}9 zoT^i9HFdRbPcVTB-UYQ2n5}N-&g;_Yy4C;*>xm4BHdH>^IA`q)oAj^+nlVx2Cg2j2 z)~(!Pt6d7cy&9m8EqmL{5C@R$p`Moq$NUd@ngdXAT6#SRwH5<{C@xtzOG*Y literal 0 HcmV?d00001 diff --git a/icons/16x16.png b/icons/16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..022d4e4c18d89dab55d48f02ffeaad6b327f9bf0 GIT binary patch literal 6060 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 Xe8ws7W&B{-00000NkvXXu0mjf+%U9G literal 0 HcmV?d00001 diff --git a/icons/22x22.png b/icons/22x22.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f63d842a564568c81aaaedc8ee84c0c5f73b5f GIT binary patch literal 10052 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 literal 0 HcmV?d00001 diff --git a/icons/24x24.png b/icons/24x24.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1207db202573d51198e9f67e68b724cfb13481 GIT binary patch literal 10109 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 literal 0 HcmV?d00001 diff --git a/icons/36x36.png b/icons/36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd569cb41cf2e534a332664df9a77c8097ed2ba GIT binary patch literal 12528 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 literal 0 HcmV?d00001 diff --git a/icons/48x48.png b/icons/48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..30b11cdf944b596384d32732c663b9d366708c4f GIT binary patch literal 12748 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 literal 0 HcmV?d00001 diff --git a/icons/512x512.png b/icons/512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..6c036ec7311ea517a34ba8e25913239028eb41cc GIT binary patch literal 27496 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 UHtowl*#H0;2}SX*qQ=4h2c+6Nn*aa+ literal 0 HcmV?d00001 diff --git a/icons/72x72.png b/icons/72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..5c8a677b8288f707a24a5c8ca15d353b92780323 GIT binary patch literal 16228 zcmeHtbyQnl(=P7r#frO2fB?nawOH{0!6Cs*krt;o6bY_Hixqcw_aeoL6fIKx(%-A! zy5B$VTKE3+vn(7MJ7~~jmaB$d4in7|z-->@uG?eF0y`x$M zI5+)!oGg>*I5_X+iVUzjMa$R1Co3XBq>C}vKx~>k z8_k|77mzlvrgFlMSZkt2Hl2yw>8|;yFMC-A+Eiz%P?06!vyIQJ(H!tJ z`os40=H}*p$gBf1p#8W#0N;o8EOjm5>elCJ;qdz%!b#7z;f-6abGBKzL;&ykkK2cZ zkXJ&=TqE4GS-xlv2?j8Lgn)i7rksZ*}*)S73o8=H-wtd|Jq4#Y$ zwTwI~h!c~r8a{zbXwO$kWInnP@wQS7`EfD<>$hb<+IDd}myq9iXS;J}`1{jB03+kv zwZ{Nv07~sUiO0)J%}46D*B^clWG4Er-^4DAplw}4+uKi8S6BVkmc~rb!4Ikj4r~+r zYmI0=zOVFe?B9}RHT-Zmouis_u(tL46~&E7FFWlngCjcX+T%mbNhULT*4u9tO)~S# zNP{!RZb+0b>5|yl5nPZ791@t$@D_X*%P4kDHF3lNb#6sGi4KYi5qdZa*gZ7khE^%R zLR#;z>TAryNVZ^s+zz!UDmI#V=w`tM_&+@6w=(e=Wbt@02|xI9S1bRXO*vo@k5F%| zKK=bw&h8EZFWuXQ`5rw2>$mb!82Q_%>JUjv(VH}rk{JQF_+U-tZ_#|aNo+&=TGzY$ zoMI;*8QZzv8#3e-C_8u%2n^|=ES6-ahzbg*ur(!VtFX64^Es3@r5HJsA#^Nhk5tqx z8yz~;E$K|OT`U`)RK~tiphS1&$d3Wsl3A%c1DnpbXA*@*n>Ll%t7;DH%c`o2v|goD z7}VRWE`4d*Qm23|dNizFFaG)W*&WV?lGYa6Yx@<9@0w-tU_?97(S4MI-a05OdnK?NYWEoR&pPAx;ZV7V=o%Ig zQ5Gv}o@~4k?DeKQW=O#H*v|b^a>MUrk>c404eN1MkEevDr_mL&ny-C;-9$gW0)Vcj zf8Ilkgui?!9J8GG-Hq^;Fmu0NZO8q$kXJ8A5=8o4V|P}^MeaVh{W7JEB}Days_#g( zlGsuRZdVBO3dgRGdM>5KJZ)^0d!6|SJh5^)%<4%?`)}G zWdnBIyi%wSIIUoH8Ar-j%G6`W7-5dFhc^SXWF7`@5WR62iV9ba>DfMn-Zbnlx7BA! zeX|$6bQd3ny6(5#uCXs9HSez?!q3ud#Q9v;5a7H3Fo_D82(5-k8ED27a8`ZuJhDv| z8AZ@Y=3-5lps%ySLY+s~l`;*&*8*JXLKdRWzpRWz+*PKKys@bdv9xj6wXFCg51cUJ zKT0zegA}~|UMq0IVv*!K4An3Wn~N7(QhyVr{oQYyZ12-olxs7DiTD+?2$Rg}Pfj*A zn01CIzmk(n@_Bm}FY)e1IsNw16t!RicxN56jUAKJh-I$T4ahOQ(@N@&>|^-Dyn8GQ z#BEZEEu72kVlTh=Xsih>=keiyO0d( zNpdSbMiK2Av?Jt#pP*m@8z1Rn5?|eXJh;dNyqn!w)~;ivosxXfPN9klvE34O*B%Nl zYL~~P@@})IPYTzU)+GZ%I)H+iFRhKNAwH}xHr!3}Bej~*8G;*ATvTBabqi-Xb8au1 zTz@z_!M;>xgQzybyM;fo?ABV+M4=ElX1q(l+!p5SSW){>>@v-b2kHFDcr7P*n0A!+ zNvd}$2KBfzw`D|?fyX&6L<3=nX0*`Es6qb-;IZ#2X|S%c&L5`iLnZ{jv5y)QM6?c1 zC$&MT&nhzht~nCj*sgjnxuY;Sk5vlhMyGSSIF*G7TwpMv)C*(&D?Mo!|QIH-2VlCMWHFHm;y! z`DFvw`^r2d2T?gN>2EGGKZch&4C3xouH z9Z}WKtDvCVLmpTPl88f>jDHCQvfw#WXQDfWtK=^V06yz*%sD=w+dm?ao?bIjji#Nx z*G`K>%|wx#q5DQ9tnH#+x8T&$CmWI57ufI)ji_;DgqWupa@QJ{gnIS8-!W%fc&A8v z#i+@ph{%cVU=KEElAEATa5!E+Bcyp4`f3!OO7H@ZvBWeS9zi%Mnt5kro{F_igT}t? z#~Px~uGl{RH9r!iH_adj;fo>X>2=aO^OO3OR>n%~Tge9psYuSU`7bCep(`vK$vE;Xzln+c$3|S=yPUC8j(?FZ0{18M*;#9@@X6QSJdMeo6|S%BaG}GeC%tb zPwjz&ytj7o+>Pd77%EZIZXC|xhK|s^e1IB;wjPL`X#)`hRX1FbZa5P_!Gb-^pfN-b z4Ozbi5G220K$b-}v1JfipqQ3gf)_`t6qgU}>*C-dhzQ5E8miOM6fJuL&hIDfD&k@B zUSh0+ZQCM#eV`G43q^mjD-kqS;i(Uk1(w8iku`)~&igo~;&OtKcnH5(xOYP156m6= za;zH}e^4}Wx0&Gw8R8%gS^t{!*mVe^5VdfH>>KH){eZ-`&tm#fF7zL@u~@&wjwXO#0Q!3MJb!(Zmt7 z$n{mErRqNkTGf4>S%Zm8j*);#8qJ)au`FE40lX@ePMg!JI&bO`{*5u%9pzr&$*+eS z?-cJJ4u@bwv#;}_LruL^<|OfDAm@~OID)Q5PClHkAa1$joXxtQ9A0`(_==Quj{6#7 zg+8A23tulqyJ;J2*6>L6aP2Qak1&TI0>)Gi1985JQ0kF4?yZ5dHL=?`ZLJdp@T-eS zyx(xLO2egk5Rf~iM0G;DHMV^~rgk=pTxC%${i=TI+HedgZ&jgaGC=7v!WRhXX0qr5 zcl1uTeaU8haPQlBrVF)R=5$8DcG}DG5i}5+6M+hsK5yWDGO@L9y<-^VP$1f3B1TUO zj04WLd?{?$vBMl*!l6U#_`v8bSx*~^GS)2^BnaI^2xZz(s}0P+>rJHYP&D`;*2%$ za&ZQoO2ct!Xjn*v?>Eghn~|Fz!kXI^E%Nq+q~BRVPPY^&W0C^R*v^Z-#oQXhlSn0? zwK7Lc3p!RN;Hz=KD0Sx`36&+%G!SWbT9O9sJ4eaouobl?Y5%yX#$KBr_yc;$Fg2~t$FFi@+jGw5Z1 z7n!=0BTEEM^NaCBBDV;lG89j2g2GyvW9U>O)?6Z8h@>od1#(e_R*Btj=a%STo;a#aA=EV zk@A+#G3F2%4WX8k^1^}J`Y0vWt?b<<^A%^?&#!c2IdbWOyzsaQw|Krm+>EHjQDkOX zkT5w8m>k5-S+x^MKP~SKEN02MXs3gH_rTmm9;e3!XsT|BcOkS=MmE9s^B6fF{3JNR zQYe&NFd;)e9()bNjNB1b_?}?EcA-Pbwy}_~v?TY|c$FaOc=1o_+*w3(VOk-NCN9G z6yo1sH*twqBDS$LVcF;1v#cxJV2)TX!eOFdmM^0G$o+Xz;c1Y&iI{UE$u1F1>JePPTs4~p zwx}+6T~odRcjrB&PD2Jz#n`B35I7fmh)38)Ke**nW0Y0KaFJ?AaBiJphpjebDhC** zk9`w)>S^xKzS>zZYG)RPPZxi59Z?DZ<*QHx(x_EkG&n#vys}ptu2y6D-AwN02F_@XGK#e;BdW6 za&*{3eeV!Is_mx7ZagB3BxT|t$p>SjhLoJadTPnmwym^fBsY4tq(6+#S{MSeDST>5 zGow5g3V->}T84P`h3l*DF6+?Zn&o44Rcw=n;$oA@Pn7U{JM>pliwyU@D^N1*zBmFi zThUWqWuo-hTRGy3>l!;Nz)0l9O&tpG*51xjN1B^Ynhi2wiEGVVqOb)Uigq?#^Gvp? z3Ybah&2<+RJWX4o>C6tO~ZFIc9o8+;f_wv5@E2vCzqR+Bp<0 zSRPLqAs!{5SMysZp!4xlzvZ$0@7GBZhl5kaxfO+|DBoHrf1NBnR*4z42lH-Yz3X#2 zs;A`_a|~vidS{!bSN}GaM3PW3IbP|7Z4WHMoz~GFl|@RyqLK%hc>mJ}+J!`@@G?p& zmYkVMlbJX;iZzg5_-$a}$9Sz@vmDXbAw$}<=h{3K(XXPMN^+p>c(^RZHaspf?^mWY zZNW6jy%86m6c$%1)sa zG1&UaEr$X8KA?z9^;iy;c4SP!N+9_`+KSQ(|G~^&&vK^&K6rxtc6ETI*$ftP18{29 zp225%Z--3sV^DC)lI&I~!k(6Xj|N4Iq?Kf`wrA2*n0$(LwfoziZ@8|pQHV4mZ~Z>K zKqsolL#PHE+MrH1+&pu|$j#Qc!TG7Cg+8sOeRxoe2L|qPW^s1f)8N2MHheB&WQ ztxf78ii=5MF21taUtiBTJaker)hW}OtIyC(p{^-vqZ@`UEOY2Mv!y$}a5=Q6ae5i0gwazaTj|B$ zjueu5!bwD6+Sr(%&nB;c?41m1gZtqOC+zBIn1{ByY*mZ{(b1*VJ(#X~(^+$T$2 z-;eUpP{rdKYB4aEW*5?W$lH~Q*3Y?=$jq)wUd=4V1>h_bVNWDL7EoFg?4|)mbo1Su z$f;oJdvYGkq|3Z%ijzS6VxTzQlm|bNi+B=_umsz^o6aoiB0(M++LUJ<57%W{hNH>6 zq6JT|Aiypx?6ZM2cA%+7hV-s6;+iLwleN56+bJ?z+Cy0N%zG zyw)6I4(YJ(3(O(vk%%A&JpqoU@1&Y228Pe{S`u-U74L7>K&wCkz9ha|!cW+$^060( z7NI2d)e3WhAHAq!*;zfL^}my$%UR~Y3-#TUXB*8rj}eX%X2xKiHKa9?OTq<6QhFTD z60m-*(PUyP(C%OUsxW7hncjILe;lMiyT;p8$$3;*=+pcbM;Bpfe)l5OqW+sq+ks{; zL5YWN>8i z3)~JLBGF1=r5nX97Yycbp~1_^HFu_>d@r60?YXN8CFwq8t6day+B=U2qajD1PB+o* zqkW;6VPXF)nDK)~qxWod1AZlfv`NQd(?obX7a|$^%G`VGX_4yDRJTAM(#m3I^ybmt zj*zurqmCQf+`bTruz6(ToN5MiBrf%V#h4ki^Y+u1gPZ_tC3vm;uDvUm*kYolBTEe@ zPXU?57mLQ~8%eVT1oxpyIa(Z<7$+usmhB4HDX1)Yy`;FjV+uY*vnfc1LOhn{6phD! z6EHyL(85Q2SVr3xka-g^s!p9I4rHE`pZ=la*ntTnd2-jP9T^ew2g=ey2nt*Bo9qRKxUyjgK zQTZ+{_^bNoD{j@!S8ly&{O~j1<1I~{d$wUJQ;^t9_xV)3c!h-B1srY=^o6jF-cKYh z3g@CVoK~CV{GK+l8LbrpcCa48)dfW6;Je5u1*aCnz{xTt*7AD*z+Q?H#R+9A3y0C0 zCW>8LNxx22nE^j@K!ZUg=MDRZJg3a}=ixJQ#{k9$sAqLN=@88~>+?Xao`vB}b~b&u z-|vR7oUEnRzot9rj^uJ_D#XEI$QV;lj}*J-g(~VfV*0uD9^%gEQZ?e)UjA^5Sm<&O ztN?dG2r!H=DouzbuwOADy>6h%7se957D=tv3}Bh$Flf6#)Y@;n_SSKn>SP$SL&!Je%U<2DW4~YJC$JDFvPof5nk40r}4ts zlH+@YK9$z2C5~A4*klHe3 z4T)sZyofczXU-%S@vU663df`A)*0UL0v407_kt3=TKvDj9!1QO*q1-q<0#@J2tg5| zuI(L&V>J9QPxttK;=vjsjPtkF+nDc-%!tEOS|{hz@m_u2OD!HHC=6VH>$k9~%C{r} z77#$~5moBR1>gV3Z4JAk$(|u2htqnoDM6K4b~taFNJX+h@FpLFwepPe9AjDm=&8@+ z8^;&f18!^RX`c|O{RF_k*|APqe+T5~j5zZuIvIByBlY%{8xZ~WCrGebju_O7$_vYQzr}Jcj;~j1 zk7_03Xh@S*j~;2?X?t_T7K|*+(I zD!3&YpR#51?|Npz^o|n2`ekO`e3LkSALbbHPJz=Ed%a;(?*8v_S|D<>92jsVat(Rt zcHO?dKi=HpqT|Uis9Bm-6y^+Y_o7MSJjnS|(GQ0X%6J{Yd*Xy)pu%TAXjhCPz#k!{ zi6z9+c8xhvS(aec<14?dR{xd;X!tROF^f9C%5Cy=5%2T_Ai&0a?~s8H`!+1JR=0+K zUsE5*Wm&~pajfb7#qQHWpOCMOstMt-uvGT#6Fe$hs@>%+r8B2yA`+(re&BSv-A??W z$7NBlC4q{~5^B{)doe76EAdDmt{lHA0Kqz5=Jk19j>;hBSJ}OUNOlAE@bKy!0=r`j z`rs~+LrT>m!?p#wB8g_;8z5_uU3jzmRI!tH1%ct3IUtZhQ$8HdQwLpV0Q}wlnigSw zGR@k%0GZpq^(6jG2yd#j-J_ym&ov|l?L*A&N12fmAmhjEb?u*lQ~Lh4M`d~WEjXkf zy*eeDu9imceG|9<*g)4OQrH6kiH9$a4h|0fJy=FYQ%OeVA3KQ8`-U+8cyYxZNyv;~8hHW{sX|x%#>Rll$-RO+qY>mNAe2thw7ff&_`O=8mkK*g=tj@E z>vMZ04`)GYH&6BBZqY5BS#s}1 zA>NpIE?jH&l+aG#Am?Pm?&bXQz&>JJZl$(RXBRDxQNd4-Y_DtR)zwLwet^W4y1Pe# zL00qgMlU(|c|+GgO%-V6;>2ZP?P3Yy@^*54-tdKk6O-_EwXkvkL1`>OwqR#*x|5a; zIvTLGINfVOH6Arr8IT=V(bpZMl{k#TVc(Fkw}aPe@;d4oOq=w4yah`C$a0JUZ1{|@oo z5~s6+LS2E}++JQ@TweTKF7CG6ydokZ+&p~Te0-eG8k`UxXQ+iYr!$2955(UvWI+%s zcd#oI?BY!G2h+mR#RDo%NB1nJ`Grz9&*_h)>dwTl(l8u-_xr7*uGAHdpzQ^bK!k@!03c*({cjK&?%?OFv~c`)ul_(;KSS}`@CgXnhzN4>@>%h63RpiwS@2j1 za|!`K&xeSRr47j9FDPp(puCH_lg0CNf}JdELENs+wtor!5Dt{mR1&A-OkEWvq z)aKbhoK6+&?BV?{fiBnyqyx41!zM34P>5edfLD-LkWUC8$oDTLeULlkITQb2^73%; z3H&AbGcCa9V4jJ!_>-s40DtvA#{!gb2U$Q}+;v@C9L4GWxJ2{E@~`x!5&PSuD1sr+ z8a{tA{_i=j19JOY>u*cI5&V~khUTxd1zK4BZ4iisC+Kfs>D;{f30X~p5r-hA$2&WAX000u^=jZuH;QvI2xY$6wEZjj- zw$G71NAsLOe?>#X@)wn?e+B(dZ7(~}AD(!g*EWw3Cy$6OuORUGEy&BsBLL*#q2vC0 zz}$aU^*%VmUM-2Q&%Ky!-|I+mzG4LNL|2Mn-pV5W!uNxka^YgDDujkvD1P8ev&$mJ- zmMRLea8G|;Ic>#>&pqg_iiQw4I84GnCp=s_jO@7+6{@5rhq{Z3PKe9DGnA_b2S<3T zBrB!sy*vhUaD6l9F%aO82|1SGHvWqAbtjBt0A-XN2b-4Y%SX9%>*)gYIBB#YRU5uc zD3DP`Gz~$GMF%ZWeOjF#nvRqCmIe!b;%hEWfys*UARZcTH7XW>>9-SB3Wv)4)|%h( zQrXMnWa!D9zfw)Y@0sddSj&RpkB;lxlP6OLC6^N>+9wU2&+R3r0ZN6pCeLkTj^u;d zh{Fg!_}7hDjSUwfkb#go&UpQa38x;DSjXGvEH*7+tS6YV3f?*M;k>Y0V z;zvyyt9edlt*cR-#&aN>w!AgYa1-v?Wt5|HYa#CyS?u{QXS-rk|J^ta%=MuW{L)? za0i`{yWU?CArK+@8l3o4kxv1<@Q~1wK&@?9^B}9&xBzNK)AOSQ_&&Yv-(%gTGGa~J zI96KDFc?z=MvK&{frDwSugPWAhk8Ein$7yH+C*fn&^k$YhxQ&^R}o2g@|R{0d^3uJ z!&ipsNXDc|A#ba$idy~HJ{gN8rK@@AJy^4^z#p~_6muOBOxar%Al&xu3r}3T@2Q`M z?dzx_39v?WoIMC1JbW%$3*AE*WlZDydJ$3xa3}XruYUjQ8iBC`URWr`x1;M@$1V!$ z*O($|3QR9?RK=dbwBIe)S1YI$-bR-fP`^2nI^EId~&`1@Y%)8mAehDL+FwEFk9 zs33Dfo$_isMtkRL&*k>o9*y#ri`cQBI3GCaHh0$BzlrF~*xM@)!eBbsA~zmodrbrd z={=4Vbl0{xt&dT;ch1q!A>`1e(7bOSipv)rKnn@Vmm=K)m`_{DG}Xt`huC*nXl-;x z10pxvz~=`OGOhTf$7j9i5^&*=e-P0Vt7@%U+N?);We3O%AabWdqO*cK5M*$jEu{^V-6sTV~Pm2(>Z|l~vDd1p-xXWUo%)W^`q-B00*KS=?>Jahz z1nPh33NmV_HoUVy)=?*Q<=>jw`X7dKb7LM3os+$%c4;m zS)k@k5ujmh@^S3wAm&2tHV4My2eNqcr*PPg*@GW50?rah1NQ8D+Of-%dzLwfCn^w!lPI;%i|42VKk$~8C_uM^$A>=2X2?pR>I{Egw@O~F~wYmpxb z^iAuJMMxrqDzOVQGitogu(;QLf&oNFFx^IHH*XbqVf$c;`9V5E)AoH z`}@O~$DoF>4<6&8``L`aj&ck8nY>3J6odv~jo9Q>K*c0lQ-}2?=OB@LUcNN3% z(bw}iE6eTmThXp!6=V}}z)48s$Rab2Bw9!P9N__WBNLC;$5l2X+XNHrJSxvakaXA8 zJ#Jl}iKh4)$(|4;@1~2{c1!YGmcE6?PYk3mgCl)f`3cUyiGrzt>7c_QEN<*j+1#lY zq|1b_R1&F+``szA(=gFFq}10$r1Jr!;bnB?Gv1a@rFst6@^_{*bJyM5&hISe#vxhR zZF>X`T&9er4Y|v&2niZru{xR(6tkXsdkJh;_iTxY$64`^;)nBWZtOo|O;AqokON7O zPU8#F$1hVc(aQs2X@sw3Nz-dPoSUu)*|jI0nq~VYH&^dJuHf|dMXl;CdMopyb9~g- z$)zMFAj=T7gsl+qkjsntiS?-D$9zLl7z$&T{*a9m+InG%qH8#}2{Fug-6aB$1CAxD zvX|0?Vf5CgkLeg^DQ&WaJK{;an<>uz?Sb%v>3xbiOVGl@QbnoSm;+{lTnz^YiB#PM zyR41L+5rTtfWSX+9K_)-(-bLY8%!%9gy(K4pkVSna$GoSmT5>H-Q8ZD{d3dqY)zAi z4eOU%hF#~69v)RnCf9vKU$V0;t%?gTG0iTY3$o!Pgq$g;g3V;+1#^-7lXq{-V;odB z;|JxKu<46IJX#KybA$DtR)b44K@hr18V9+{#I910pv#U|B7M-kn@kepuceqjoGV#8 zlM_3Kj^0>)&O}nIXH{~R-1DVkl4I^_ZtEdhMFY*)d*?i>PMogm&lXr)M zHh9B6ou0GQD0AyK(-_kaezvSlIxUSf&iaM4FP?yVsjjo~?%4UKXpQ9Tofw@INE!s9 zn7GGmFfX^iLKg#>iw$H=q1nzcMp=f6?M93D;O|dP5wMUp+_F?Uv$(*J^uIR2W3z?2 z9jb9(H8|mDwqeYw0L)?rZ)VVvXCE=55DNMCw_sbVbz9yBJf-mB1F}m(1bhkn2pR@i zy6L(O37yM>;L%-qB%tnu!o@jDFLX#_?Gzh86k`)9?I4ny{z#nCn|#$sgLXHujrPWa zF|Ot#^SB$GZL836XEbQ+Rc4Uxwn!nvm*qP9(Os0e5oDX=8W1<^V$Qg+(Qwp>1!gQ* zj+EZH%*0qE-Ty)~Oa>t{jX-#FqvAUUPOf+*2j+HpVy9v0Ctj_S2d)ffJ^pb{n72LR z2YWs&KN}90GpP@R`LxA!MXW)EgP&y)KKfh5oWbb7@5r>f&MR#Yd9X<1AYUd71K4dy zmGMq=FCTW$-tg1trivJefu!Pu?%V3{4aLQ6f#|x#I7L)4X=v*@`T{=Q{cqzs(|hX^ z#?0Sr-i_49DNX`pq~&Uvdj+37!fJ4A`ClXSZ9un$bv8wkLS=Ii1y<^lNdws|esa>UH$JpZ?-b2@4hkb^*u>K(CemKy zN`LshO-WKyd1}JB-FU!o3PnQP5-?j#cgv;x;rbVdOIJdC?_bX6g00s?qcW!W8AtpF=__leP1+)ne0=%Renv`s@0{X zjBv;#A*?XUUH;M8mxX)WE<;*fEhF*K5q%D9d;dBBXY@OpJJIXw3k$lW43QYy57lTS zNHL5`*{QP83dwOgnMicO+`%NUgHhMr1H6T0Kv{UqM2e=|E(Yo%7dVCf za{=os0DlhJz;247t7pu6ezdRwIv9jQ{T7PE$4;<#fXO=)D@4$o2WePZR_M=y-t>5%__*-02GA8la9K9uy;q_BM7>1f>RtxwhejE$ZATRmrENIk?>P zS^^d_g_`~rEBxT z`Ir<*Z?nWt3X<=Y&7->W8uRk7iXgDjCF|y~QKxweelJ;0Qfl^s>+A|xry+X~)9}<; z_|#ls&FwYjeCqtKK@oerK6{U+i|!uo+$iJ)`DxH5~T5Ux6^9X zUdjGW$}%IdWq(ek#!`6`+4_5iK<2n2e8Dp%A5iiGqxZ`g34NVZg7J^<#{!;jYdKlRk2G(*H^irV0nA@Cm zHZkWbi|s|xq%GI^T}ud>*!^PvPEVULz&G*-rg_SkBcav$bFE3EMlD0@ARpyT8lR%{ zHd(@-EK;SfOx@~civ9S5DV!BHOeP_rH^`ONHg*^2^g5U>K_g(veWx$|P{NHU{$)Dk z``<1N;`1xPbwWZxw%Jsq5F z%iXNBuC1xDNf8zWMO8HI5oI;VeHix{MK3?39Cby@&$W6}tKipN%>EfEp7%IM=6h)f zeD+V}>D2@L7p>lWJ+T@^Lt|sR{wX7?qUX{FZz#s$2Cd0mq1IJ^H;@OK_G}`^YhvX{ zd$ypD@tvFNB>|Ks<)&G~A_Bp4W7JN(AT{GoMknf*rj%RLeQqRuNwBUF=322c_4FBi zv$k^Q+GykLb_Wa3!$tb*=7>7k%yMshk66=M4u_=+tCDMs&@n4@bD0AW!!YDM?F2Q2 zEzQ;`Qi=dFRNw}!Uy{l4PV@ye5YVqQKp9?^+GNMv_%iF;BJu9WUSB_GrCRsT z&BQ-&`$SvDQ9Lje#NGA2TIKkx zW5`FRm}!{;1mGf=z1;WPW&9+{<=rLA8}*y9k3*^(+kfARA=@8P)=}~cHT8iw^>wQT zI2vi$P#ni|cTt?F^;H%l4RAir@Il6s%KmdXL=UBndtCtyrWA$oc$vZYPuhj@-FokP=OP9HQF)>o ztJj4(HPGbCa#KC+(LCbeoV?SySN*2G$5gV%LO-r1AnF?@CT$$jckf2q1+O-rs0O5a zn!tS=Go?S72u8BoA5u(i8>$`=exu^=XAi(S*PDC|$y#3i%(`e_osjUq<7~nhr%gWK z=VWV(j$}W6CUXDuA%NP@_g)EdtRDAxGmL&OUh?UI%nO8b6mZbd;q7GbIZgWea+!Vt zYe?VNAjo=ZRl0k~)#V^#Y>v!%cU{Lr)V{wy=eqdQvLB5U1ifPnu}mR9 zB4=vJVK5TDtpBJb06lPn-9@Gq$_fIFMS^~nn99>7bbm9mxjOdU{5)YAAAeOT52FwK zwf62VXU=Xx^CB>UfplpxKfu9roKazuec`xsRKb8bFG5;r%21>`C2zRXSK0id-Sb8$ z%V2;J(W=PRGu2lTW;eQ(UFt&E^+hG~LW+321xh6Ej)Fd{H*XNycv8?&$TEl+6Bx7< z%31l9C44N7@(nrJ(s74#Rk(shsgH6&=t|*j6?W+VHrcly?fD zbI08^C1to5Pw2#pU*L>9?)sS$Po*It;_B}u_``s6TlME|RI$Ok9;0PskWoft#J=#^ z)|9cR&+YMwM%6RlMzQvkh30y`5}6fEoS)~)^F{%wbVA5y)ta9jv1?`=mh(m z#DtRP&SiAWcPy-Z^9ZIl7iwEv58d0bIY!J|Lm8ca&&kaIz5~>1W)V(Vj8gG0(&x3f z9ut3}3fQl9NWnEjPj5v_EX?R~ln1<)9=9fK#aJ~X2N%D_b-StLg-^$UBeL52TZ`E0O6m@~&7b~gZI|8G(pE2gHm~x}BX;Kr)kexxRl48%!3QND z>b6GDxSXPmqaGTnXmj%pobKSrx#xK|s-WQ2?EAwJj-jP9ih|zo?i9pzX_a^cUP?Wf zack3~516h#M|+c_%Syr;0(bUV;@r3ND+g<}-`gES7`+9UL|-2Ma4#Y-gcLv8?VUdn zqWwB$87I5U>|j(FGfb%@At>k9&88!2&cq~Z=lM*pH94q^Rpfy^-NS@xJqG&3Kp*{(6hj&L{WQp47^yK6O~Mn5j~)oUw0c zZ++j8LHYYC?6LjybF-i6=MDd|*moWp_-%>7ijGpPoQ3ADS9Uqf6QNDl8gB1zz7wtz zA6ZjcVcVv!R~v*rhYs#O)4FYrdzII;Uo`77)vt%QwWO;_+$Z}WX zyfg7z4b%!_I(N)SY2;H)udsVqyJIe(*<;nvn8M}Kl>>u^IYGkyn}_w=E3%uZuw z6GNBT={r)|^Y7?QYeL2Any6UKG~J)*QiWN0`XV_)ud3;yUH%q8bCoswKihO3wFXa{ zZXtjPx9N`E=nlHBd4Nl9C)n%Wcx2pA<4yUvgeHF7x$ff zlP-OfMY(x+e9qOw-uDe<-Ld1f!2^eAoo+L?#LbDJpK==Cm0^_Ne(6P4>^s$?Il+Xe zr>s&C8|B;o(7*i;@rHy%j<{NSdCkr3_4B#Ki&@2{9HNEAgJN-Meft2jbgZqiD9%zE z%wAck>UFo#*=I@p@@U!d+cLmr$b%ku!Q9zP=F=h#xVEdI>Tkxr?nPa_GfcN$&iIhI zXZL_5Iqvz}?N)UsqC%?3zE=%gW6|r<;s$tjj(=;Nc&FLJ^VzukWnBGc?cPJ{_Mfh3 zeBtlh*B*c4x~=AT)vnuJ%FTSE0X`<*zI%3xW@TO#5J2;KX(zK%W{V_7e{?q0~!5zgzvZ z$*ZyctDg>M|^CcS-G8nIT^>f5`bwm^N&slopG?K{pz zJ*@CB8;l(YEsM*4(=-cfs@fnbDm6@#ka#ssi$o=R&+m3K$t!gut;qwTZ@R_TZZa(z z$?Cbl@)%ZPJ#Ks+jc!y==%Bs6r8jS8=cvc&oOj`yM#0j*QQCcpfR-CoiK>PJk-wU70S29@ZOkeWlE0MuW ztZXd6Z$*6mshSMK{L9I?g>T#Xx;_NpZWNEbTEkxSBtMluI-q}ZV)xGS;VR9MeJIql zO&n)ux~H@A$2}3*33E5@aPX*KX41GW#A1=b))<|rW_sR|Z7JjkgA}@1hsIHA_L?yj znsKJSp?lq_o}MPg&AP^*)vBwVbl#zlnO4&8}8`oRrS!M$|J$Xv-_V(7sOR%Po= zTE%z07U(f-Di>)S*J({vyP(5j&lY9wOd1@mc27JmiOTOwc;3=>Tn3=0yF3hHXWI;+ zhhCR(1>FnMPG*+t7U-qth@Bp~A6q=PCJI+=@;K*5Qda(gG~LujtpIBFF0bFDDdds} zYM<)wbIWoo$?JC+ufLyF1LodZz59%}$jEaELtWR!vb1o!Mq~r$re{S)$@^c^6Pkxt zKK5z$N1Hb(9cjh<8UMm@^!`!*?A#Zb7u5HUH%2XWLqUe&oj>%C-;Ub5VA)@@tJ?2= zh)~XcJMUa~C&RtA)=3>v=DW+pv|@~u^DKslnr-wH4P|d z6dv=jt*tWygNvR;7f43LZ{7^%1SB}V@fJoG1?E>HN0%`NIidn-UQ{NZi-TBv28@$( z1;`PGLfJb?1rT#REXFY4Fb>ZFJNRb}7QIvh$-X<#2h{kBjG3|Wh#xIv!mcqePi+1r1&jG9UJxyeRFuPF;^9b`i$F!l zsD!VEboZpuKSjtT2;*=CiYP?vuaII6`?FYIWTaSLlzmE5HbfMx(m$ znbGp}JY5{H^6{xGK9j?uDlXX|nLwlvDFB&ZLj6arw&fGIG;hRn9HC4NEW z$rFho9ut;RA>=p?!ec{XF(|Mt8(^^@0$>GNg8&0!!2ra9U@}MqZ9s_i1;r{M2kA;E z^2@B`R4jyw0Z~9(8yEsWh{8gs5K=OM!~%%cYzl+GvSzZGkb;WEq`L8iTnL#?4i^f8 z@d93$!XX!&>O}W+z!GubXA3&BSH|d@{XVCd0#kc@@{eoL~;}^3`WtmRERk_hzN>-C*?%qCSA;Mh!+MU z>wBu9KH53|Fj)i=1hENZ5Fk+q$b2(M1b_lUHUN=l47wgDt=(uQm=$Zm!Iv|UYUCYSMFd`->8zc>Oy{e6&c()YVu-{txy1-=RV zy}Q24^-T(V6Zm^~{omx$`24^F^N@c*66A4amPEx2c@#o3R=T^OCgkt^=MH5d7IlF~ zkO+m+)RTXvq4wq)Ax2fPC(Tt=rmC)Iu&{K?f!Bzs)zihv&*+B5CBlk&fzid@2O|~% zmoVf&r-p?G$#zx4YPjc=W!E#6rJIvfoAcXf8b7S@Df*96lFq(&HMi=*Ha;5|1{}{+ z#|mBrpU_1`%(`}V(C+8wTIsGbyu>vizUAdLBQ>Sl2TDy|jm7l#5gzZ+JS0GwSQ3u^ z5ZJe6#GNp|;%c5~YwFbx+My)0r-1!%tizHRreTyRpxY&@^(GOb*vQ zn`@b%oG{^8HOrZidSHlC^OWva8w_r^ZXA=<>Eq`+(e{2?p*4fI)^7G6NNp%jS8tbN I%R`g?3!e^8^#A|> literal 0 HcmV?d00001 diff --git a/icons/96x96.png b/icons/96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..4b10b21691a71490633da1ac220e9b31187a96f9 GIT binary patch literal 16091 zcmeIYWmH^E);8R@y9AdexVt+9hsIqRXx!a`LvVMu;2JErLxMX5f=h4-9s<1NzGvo{ zS>OBTS?hcMO`mnTPgU)G?Y*zsRn^tiksxImG-M)V004j{Co84)`f2j#MudNT-_G#l z0{{q|eKd63)WDt;PA-lX)^-pIH*Y5h1;oqR0s!z@smZeR_%4tV`eKIH2)kQPGU#f7 z(D?fS*{(Twz!!%}-==l>ZJ>TDv~1(cv1t4Q#W%`buzXWtYdlk9DdjGI{ zUx&Bz6PjTFw0E6bOcxzfDs_!V~C~Z`yhC>CecH zlLOYn8|kEwGZ!my%hjt88-nt&83~T)OET0(D@wBTj`(*o)F<1_6OCC52b1JkKF-g| z*A)(D+0=g2QrAD7Xa(?>rs-QZH!ljlIn8OiI-G>+!Vv9`po$e5EiaB037U%GoDdqT zwrKg5ZVc|jVXXUfWK-qX8Z;Xxc-lEu+i~h2xPnBR=k}AnEYIUths~rA9sFVeijcB68-v9b9F%Bn?i6{o>+nX*|HR5qIOl&_S$xS=P7x!>CSAd1He4W}+cA_UQ|4je{xhD%BONC4_HQF2E}g5iEcyI{x4X$^q-sZIH%o~3maDA7K%k?rxG>}cVpX)Ls_%yJd^PDSCT!j-mN8iUwL+8{F*JX%!SeMXU z$*7j>J)xOOPxVv~S(@>?P8nO8CzUNNE4LNUz@@lCh}&}uj>?Fh=(SFZNHK5jcRg|n zW2kDOjb)OStEs*-0EL+c89R;;BA%uJMi{q(C5aO`X!n?ZM(H};U( zinDf(m*t+iNdJMGyrzZ=Gq=-@sGBf6K|jYNYGr`QA*EB5W6VqE*Y>Q0}fj7&lT7Dt7+R!P2$Z=Bjh>kPx zK?wC=!LmVvV|9_WCptF7w`& zcJ_j=Kzb?0$8j=GzD-0Wx_P%f0Ss9XaUmR5@Ler(ry@FkdtH(up6ktqF&lnb;TAf_ z@>S#84}De5gOYc7NVCU<+{)hvO2`O@EQZ>gF5U+=NPoC)x0JfS!y?|c`ISNUE33e} z77?*?j5Anpl#fAPA$Em6`7FY1RhCn$6{LHiYLJtCnTlmv%g(Fft(RG?rJOJYwJp3O zE|!5cc;C5lR22IHVTucc$O4XB7|sh@YFfFUw*#TS^GD@9=J#3aM*Jwp$^4Nm4%MBBf|0p08=Rsr*d zqV!~;_CG8gobqGvpe6XOHw(vodL+1oif-y3rIXqV`4QF@O=E{J9c-*`t7x&nv6tFo z1TrA*|6v0NS?6m{`%*>;1i+_2J0*K!5LfW08odL!C`e1B9n81O=LmOnD3TQ%WGAuc3>wm;#<_ac|WwQu1iPq42AKIEP}WT$9#BSONeR#Xl}E_0juj zs?}J=(Aj6AW}7kyD+FYOpUm^*%E{Yu;q|xt z3S6M<=hKxOr2!wHVmzziawaD-neklC)aof_LT2C}|jshsP15T|Z&mOLEFt{C(r> z5$v$c?}IDY3=XuplqbB>Rc5R{BSyZf?}-ZMf_V?y$AyOyR71F+q)93n`g^P)Xq`Hm zgV-$!T_fIbgl$KN@fqh0;rw%&si#iDJ9PK@WpFE*tUHo^GXpHLerjT2Ldc-QxJHeh zPJ#ma%J)d91h zKcAVk4?^3P9Nok9m^ak+u&^FGz>Q}5TyrP?dPshxi5SjgCi}6@GkbWSLv9nahPX%X z&%iO5JI!1-yQAbdD&+Ia`%Oz-KfLjSbadX-L-XkSMcZj>DhdT%4~_x}qQ6a|&|7(ecqQ6@Jx1 z6(cT2TU(719yCe=qsxbz5A-aLhRwo6#bMA`y!9oRx!t8tcgXKuH&20?*p9t?Hwxek zDkenh9n4wcGYrK3Y-I{7LY{ycsSgN`#b_f*5_y2a?0ehtS^B%3el2itnjmqY21G^B z9UAA?LmaIo7WkYywoP{xPliU5_^tTe7lK9&XHvrfA`bW7?)TmFY0_Q6mvKX1Mi;zl zKHJ?HXgBb5M&ux2;4&?YAi#lfNFp`$~hvvo!q z6t;v)dM?@`N94JZJGMnZY(`QLe&Bu3)NxAwEsZjo9%3paHW1_6faN~<);;lkA{1g? zTJ({}FNBBU$lql+92pH-3+s`!cUbTx*0QvO!<8jboMz zM^+l%^nbEh%6N~Ng80?=vDEGcy-O-WrDUVh@8LQ_N5e!i#6kW*lg^vKy8FfDOFi?Zu@%_mu=WdO=6k@8yHaIo8=HQK{5{M z66`qI#yK$);@GlBVG;yHCzWYx#T!9$VMx2JX|3Q8|2JWjfj)sjNmuVhk0gY0f0FCB z`#D7mUwf;^S3EM0cZMl`*&XY`#~bl=_j+S_Dj6}$JW$#H9zN?xBm`;T2QPZ=`V~3& zdcn(QIl9wC?bnH{#5R!n=jQFX1|2`}uc{sdVa@OzboeTeGDRue68we`hJ1B%+BrYL z6(1?aqhsBN@i<@c|H{N6G1H>6JSGVYH80COuZ#t0iHvO8ao!9C^mDdzDT>>+^xkZx z_V!u=zrF`c>1;0Pm^^2p_#@!~kh@D=t|h2!cQB3Xxq8-O9{PTf#Z*B*{ad;j*6908$&=@^5sLKprbKq-VqJ);{~HOs+&;l%BFRw|79 zLy^#7hxajI3gYgQz2jF6SdY?rapfaIIjqV!X!SWbgA26enCNYe)B;i z=t2XbHZiA-`fFqxH5W0VlQ}@Lp3Dhl5V#7ks%A*frOOQOhuWMN0@|({euMRt6#!=XIQ?swL*8xl8fZe3;OYIR+D#<~j5kp~%|>@&GV7JUD4RzjjE z(3k8NbV~iz&5v6g2N*uy*ed_=GxV3bio*Ir(&(g-gK)T3TRC=&PDN7id&cY^EfPp% z$V*8N#wL72#>qchz*u#^fC5*!hrfBHCVGOe1e=te5Uh6a4}JTAl$G1jw0+`?4GM?! ztp=3uI#+^hY^iy>?V(u$nQsnw*@?>^$f+2?G#b)QI!Ge4zw5raF5k&qF z+mR6?{9d@W_9&PHtTH~mLo?qUlFP)BJ_Auf&_FoT3;;<6_#Slyef*YUDr$#TE>4~6 zjI1fhe8Tqug?j2HTJ4EJgXwLN60L@P2QKd$Oay(2I&aP6nUI&SWWyMI1d-hia&DwO zzm*uu@f^I5Si;|KFgoDV5yg+nk~hnk1Dw==LMudEQysfob8>Vx3Vy*mT!A>?9^Zr& zL0jhVkaeaZHigq$LNBB7$+qJ5J{3Za6OJA#tiIvC94(itGb3mKrRQ77hygSUS1PV-)%lkSmATs^OY!DMqkzTU?`>A;>(-inFjplz4CK&An5VQ3qESSQB}YXg zFqFwS<5>3#P6rz;b0+t8VRy|tOJ);C?OtM|Yc`gt?$I#)SoB)UC5nh#vOrmQ7a^%R zk*#8tdm*Z4Vv3jjj&Y0~>23=G0>U2kF#>S`Hqq#81U5ZCDhR(po-5f+`Y~2NC6AUM zW*H^U1JJIUDwXCp)R-QS<@?G=ZUTBz%kmiCLQ=2^PB8npk_QG~0K^qH;;OG=2YM0*H z2Fe)z^czzehS*5xn^pI6`LS|Q_}(Nf*h z;fN5B4YRQeEE(+!+9?o5`brl2XRAy3g|u zVv>TcdDGvN1z~=jZ#YdUdwJ>u5!kCsqSowb?#=C;G|C?H+ut~ks(#5%%m|GgM9)H^ zn%-I2`a-Y?D38eUN)I=GyEf=zBGYQ#?E7hVt}BNRY2dNMQqB#*7n0D0#Eskq2s5FB z9^p3|qbK}UM5C~X0@nR#xJTwDu94e>27Nc{KrEEe#jiTMPB>B4rDU%L%+OKc>uIU# z{9;G94Jg$|909*w*2|n{e2DX}Bs_v@V;k+xcBBqWKT<_wwd9tI=Rp%MB(*mhm}PXs zrO*>Dl^E}L!a9#Urk?%~;!&GHp8~s!v$rnTkjg(@tysi=%4bW3x>`N~x373Cf^Cx* z*Dqr#`7#*Hjw>vYOguezI)4B?t@z{>43TY_F@#@)5Xlj{O9u|ynR4(@TDdx}$r49k z+ZxYigke*s_lc55Ms6nWoLNrUiSR73)3RZYd@R(Tx>S>q2zAW$`n{wQT|lI4@5fiLu&S!BQ(1J9JvWzUNB^Dk>u+ZtbevPxu@w%J%I(*!CF`?!G&fqFMGYq7lqZTuNt^;E?>$|75_n(X&99jw#@CYuFjHWs=DuajDW5Mj3s1{BQ2>rtW}duM^u5 zgB`lTOlnO7Clge3$?EsVgRcuGfE~|T)HiN4MH^O3CkpJ zQ8C2eN+^UtE}`r4+zV+A+;dzt5ihm`*SQeg?G~|H+*r2>Uv&5jUR-M?pQlc?sVa7# zMHnw8-uIX^y3nF0k(Qf65(3pTF<*>+`pnm2rCSr7l%Acd4!4gNpb_BcfJ!Zbb;yNB z+-k$>u1sf-Sol58yrJ#Uyd<-Uk>2H-lq9id>K)2ci2)D#gplm#b|OoN2x%t=b(2$U zZVKEackJEZVN@^&7}tDTz7^;?#E)Dg$=u9GIedI~3XOq{u|DYH3{rUMjbq;WMs!6M z%-0m|^2pu-MdW?l{bnhqy-v-9OKK1jcJr-1?lZE`va+XzE)5FLxr_>CLE3!!g%+BK z%c&l>JvM5HW6tuSI6IT`bZt{>&s14WH(b~D?;4JVRCTW;jQ#?}id|R7VKco&soDEj zhew_yic*a1&qMNR@X(AX6A>nrF`i*CCQ#cUQ|c{VhLx7$i-rllW&kEFFQ~c?gYLq- z2hZ-xrbXVQA@MMT=jc=?fTe*I^yE*Fjz1nE1paGOsCJ?jgu76ED<9) z5x5A;O#A8_gj444->5b;{lWv$Y1AT>1U8jS(B)4_c#@zVNJ+e-o8ctf+w}jSrc2{; zmW#_@;IgLF9WVR*F0QOaDx0Re^Pz?$KxpswGJ&|3T-1Id0A>mnfX_AJ`W66y3bB@y z1j$KC{`2tR^~fRTeWI}JfEdY;u|72e-Ukm%=P#gKrids$8@wnG9~4>UQXZRJ@3do&jU@0`?;!YNv7Ra z6=`uyd0H8e>oBLI5&JRCEeKtcQi9L#+hqdlJe~9Q0?wvp>h_u8VWqZpEi!m6;V-XC z?VZ+X<31%-W9Q?m*{&t`u;nair?n}&638)`B4JC>l^4b!+YMST$TcLCK83~ye7RBBRr{g| zPc;HvIZe^we<6CmR->7bbCJ}KRPZ?DEbaz_@#>3mL z^+i*e-d-Lj=e5NY;Y}9=0zVFOb&rpj6DEa#&ionPy}&Qb)2;hAiz_3CFbRdVYP`LD zlx%t>C+_*4cW$@0=b2goqPNN}?j<^T?XPDPi z5da`0>g5DBvxT@(m_jVA9fX1B9X&t_Yja_sHn$R+l9MFF%39XP1)}bwtYPM3YsPO5 z6cs@h@)CFju!p#TDZK3M99#vwgn@tI3cNo5sb&RI{3YUMD-6_80#QghxWa7TumlG4B6 z9bEsx!Yd!FUSKCyb`~~PdwbS@*Kl={_IL&PheQ8Y4OflVBQ;hvh^wQ!iy1`P1LELD z_3seoX8+Q6a(A)&D;#q(R)`(M{#DfV)hhdcn3R!I0{u(l4+WOi_D+9ky^{SOl5W-( z|3lV)`1YseuW9pha#F&;KlTO89nGxG1^#+8 z<>G>H^Kx4-gH0j4%v@#`7R>x+7G}&~3pOqbu$eiBDG%GfLCHC|x`7?cAb+4X6bGk#7kULGz}?tg<&aj|~QO0eC(d-Vs( z{1u9W--4Zw+th-Y-NKBMnTwb2)h`G?J2RNwjLU+DgUuAo%k>wOxtYK_M;CkWYj;}P zgDoMfP7aoTHT)r5KpZ3|4CG+>+ws3@Kz3j^i&q6AP|9^zEATF-2nfM2josEU#Zx{Y_i@<9zuf&4? zz;2E%8jg;3!oWWcQ2f#SE4?X%{_Yf6Yu8r^?>`y;kDOPBIR9PxdkENB|J6i6@mJak zfX)6k;tKYFnEz$yRqyX6Gb^xzCFFH{|0ALPS#SM+=`1#WJ{|}=n+3B4KiK@Wzs>lW z`5-)O%n-0C4}=Q>e!c#t?O*7wjuvj7U>AtEukmPuj%R^oc*Ek|KaN&eewU$!YlNDjr_0p{V!errR#si!2e44zuEO)y8c%T{I7)n zn_d6E(S`g!8y<+m>$f1!*X<035ZA=(RtVlyK}HJj^5-h(DocK?L2{DSbp-%WaQ@s- zfUF#X*GdF8IVEX?eFP*NbS~2txK;q*4Ue3ZxQ5rtsiCh^&Vu_(u4|8@XR}YO-M3GP z%=#w1eW50(_hDEq*ckvyvA%FF`#G`jNiI$r%FHItY0Ofk)e@*AHvuKYLM506Z@hla zFT?Q3d_s2hv3&$6a>Hr$MvG<}8^UD)evII;q?={Kk?i@G8kwH1yS%O+o>TmH-(AZK z3-gGGd0%(k!Z4e|!%AcTa}jm39h&S1JAmxIBT^ugN#k&>!Q@JFHc#h*J=Eq(ndh6# zpQDHf(0HKS!o|e|c2_Zjs>()651M5~>LRsrcn!Eg8n^-spkZK3kP?c9DCoEuJDZ0s zpnTiC4CCxP;3O+d74R9BqR}SI`uoLfq~SRm6X_2Wwv$F49*3myH$Smp6o~}+p0hUG z(-^J{bR4mknSlFn02@ua(1>VpDNtBtU<4FU46YK{6b1mo0sz=8Mf5ST#7M$yS}U8d zFIh0V7!I#J2oLQ2cW1qY0n?zK@m}Yv?)AiauF*F(uh9|ip?rAB!s%Cg;3C%bXn? zRDe8%1TtnUMXxwGWO-v|AQS`ZfL$=aKqoAM0h4;4wxHc;dxlrtzQ+E=cYwojVY@Lx zzLKVSJ@QLb!b3Xi3RK`P>gb8 z_MP@8Gekk!Pep#SlbUzJV?q3uitHcpjG<>@LBfWbQ8aR--=-&}>YXDxWyUdr56WPO z$&Z!n?y0%E>)FY1PeGH`w4~|76Fp1E#?SRR%QdtkPw)|GVyUiDq_oJ4m7n19?i|@B z_uZq*u6gEJA$&nOYFyl0^VtS7ah)At^;Y8FQI&pkBu6hPI~``#2Bvei&XWyvn$m%~jAppKJzLf8IqIqxH-e=( zEttV7jEJn5Ez{0Q%6^WNaGkoZu6#z(m=r>)pbF4Q6dt^0E`M&nx?MnSPIj4wr?--5 zYIGqQpTBt|MNj`tsL@l$ut3Z2zKgP2YwD=beDeO}azSA`*=ah0MqZGytWVLq{wq5q zF}u*GtWpCX(S3JJ?Fjygl;QLFbkt~*uBr-70|Wn6^cR9AGX!hPqhC*P^wHm|D>p>+ z?tR83tOgASr_J!yKI_z1z#b@7miQ z3-Bted=}DPM6W7}!9y8?&LHKXz;mO)tCL|y|A?z~G9Aarrf_J8`K0*>m#9r@oc1lO z*xRN?%l|ZwsQg(`lju`32`ZK{3U-SR9tJ6#i}LS)l-{S50TvL@==1#gI#bI z^xX17KCb64em#2+k7v1le0sNbv)1u$g2+$W<^J6Iw2Zx>seADGnOIWp4Jg3iW_&4t zWw*j$u-Jhz)D&sNR^}vbX!$e~HRU!r%ysOo0##mPxxYqLl1!5ahw4P^BW2~!B~aI) z*_O(r3!BvE&e^_&#%PcsHUW0GW&ssalQgp_Jq92oLzVEYfwMejx(Zq#%9NTZ=6gcZ zo)c2C8RC{5WSK`*B_o7=&c=_q3RLK|*`yMxy-)zu5+;wkk_*2NAKoLOFb3;F4gavj z2a69%C*Y084A2iv-JxwZKXZY+CfCR?Ym7X%Qd-|7UzPXwJnzBmQM9LKsJz@?i~a)4 zVl5=ZHIU%rak7X~^S%9D>qQjbJb1D5B-csWD64~lA*N1rf0ss(=MW2Ifdxv0p&0N} zMIbMU(egR)xK3hukYUwzIY_#~7GUk!Wo2dEWMo%A=9_u0(5ELlKa)unMpkYmrb#x# zeCK0~$U;56rV$ca$?8Sv!p8?(n=xsCHS1Xm>8Kr_??&wfAF*Av{_!<$yDS^r?^rJQ==23}-CEnmf&|HS!%1`6AfBT{7 zXBKP5IO$oE-8@K>Z2*cT4=a4&IcW8J`f%eKnGmUdSTb;VI`LhA9>ro2uvdqj8}V+p zEH|-U0jlfk_|xFU=LFL0*^<|V&-_@>;AXJnB3(6J24tix%DG@}geyJnt* zRnOP6?3(z89qYqWbS|83)s({>-fQw5A^C6QN__t{pbd|BrSP4SvAEY%-V*SujWOUt z;Z3FFmKB)>0zU4lD|lD>)^{uN1^E(Xdj0b8y)bgJwhl+6Ei0h zirBlN!|~e84CFh#q1)P$fO4F|+WE~UKtUMcsFCamQ|ETa9Vv0#t-vZt;9{VXYKx6m z6v{j(eit~FlB{gHLzAR+6Q4NVKL3E1k<5;%qBL;Z{YIk{n5iS5S=NT!nYcM zy=%o<3oRQ&tZ^jvQOWMPh5YOK#tn;){qOOY7jlE6df9fGINqdIhlvS}m=u0y_+0^U z{Scgs#+c3t08xA<5_4{`u|ni)W&$Kf-jFEMXQ>lV_Hz5(WMCXnL2&t71#{h_Sa*xZQQ%OOjn%80`4mZ7S>FE&Wt$;`rcBB#Yr&0wWO56{7c zYdZA%Q(*o#JuhA>*u>~sU$C+C&Tx7d@5w>4ypXoEvM`UdpQ#O^#W*?#gP}2xRA_FO zH3(hfvoKl{T1jCgVmtbgJV}Ze3Ox%~1U1}|qHc)?9SPboGq8X`pZi+F*&}1Ko?I=? zJDB%zjxDDP`OYVJKZuLN6O@4uTWP>BukgZvncGUj=6A|@jvF-bK-Hy~SxzJY+o(W- z`53UulOUmCJwJUWrJRQPAIcjWMutRh7SrW1@~9X})d_sR@@3 z$3hb5?vyhMf6+66hIBuo>Ss7p0{8W3wpR=)z+c$tTmg)nYW_r?%9?y=61Iwgic)S` z4bedLa{4%qbWL}U+WG05JHZ(C3#r6UZQ5XJiDNOMMdS>^L`*ZAylsi1D2l<6y|7Pi zEiet7krU3E)}7YAEEVT&P#4v`aY_B`>k1c%!+4raL&9G2h}e{Nhzl%*YuR>{TVHmF z0885Ze1h1$g75L;$>k|&lC!T4c7CG5XIHeTNlyMw07B0wj*E=ECfmUUqVw@cn1R}S z_*%|z7;Z0#wzIQ4mU7kWKRK@{j-bE5KxQ;BYJB1m%UT3pQ+ws^c6~ zX7KJtklN5~`r)hFiUlL2D+ZiMU#7W0u(^IZ@-6e13f<;a@**B1Vni4`jFpn;9vEH+ zir)N%xm(K)Di^BXB@Nq9fTAq8?4f6hY`psIFzh)osnkggpA#5Y_^}nlY17LBkbBSJ zVF_f>nBS6X$;iXm%Td$>76*?e^x-ZQ2-5Qx3Q`AW7jk)!is9znNFKGdr0}Vq&{?L1 zSa9Sds#tzN)!W98Y=YBJC2|7oVJAqoqa^ia#HiCprC2HF%9B^g!A~1Iowp(KC0t-$ z;o6}>!)K6*oekrON7{zxjHb}aq7mZq8#;QtpH_e81dX@}Yd!zYDZB1$ruY75k)T7mb{> zEocrq)E`B`^ohJR1}{-jFBVVSQwMye#tqgYBRf_{4C9BmIJS8uyl z`gSKx5FP>*9wEKL&^`;``f;pT{}34YKoL}BaiB<|v zKzUnb<3mBBh^*n-y-vs8%ASEC)?9{ZTvvsN{ua;r#=3kN&I0d2CG!)ZXS;&G5hLfe zbze|udi>38d9!`>;;~lZB6O!Jbc8co#evE%?fk945N|MTm9re2s{$&CSpl*et&p1+ zpFkrO?eT(^616Yi+TyItxFAZi)vye`xXgE$M)5!-*Zxq`Jil%b7EGB;a3;)h5jRZ) z!=8Vasb{Yfuc*gF5kZ8}m_`co=OV(jyrJie7odz38e7mj@b7^9A2zPlvzJ_BvPeWED*faoC_1cOw~?L zYvVB??0tglth5!W1NEd*ou|OS2kgL-o>qQ!1zi+&mL}e#LQ!fHGfb{f?;+T{&Ce$9 z3=`Oecgedc`s2=0@`Dmr`56P>x73vl)xa-T>w(GI+}6PWeTt$mf;R#gS|p11D7aWm z<)}sT5BF&2Uc=k~{M6Sa$RDlkS7_Whk z>ZHK`U83=dJS_PzlMy*4=Qzg4-N|q=?k{`s2;0EMU$X8aAlW zlZ}GN&8CDt<3-%9&I%|tT#Ek3E;9eQ#L$VUoI5Mv?Qx#Iqbx6v0~y02IL?9Fg-3en zeR0q3kz*?63`6y21^b?E`BV{6lv=fxuCS{YCq(@px!#Y7o3 zP2)0q0AKSI$v{XL@BvAEfJH=o$HaRyWFRJCOcH^Gb0@?<8bQCvi}q~Ka#E|sisO0i zO}3L_>{(xXq2$ZA`S}=r_bauaZ&w0eokdY7La{vi8*IEfTTN)OZJ|zxFF@kG*QN+8 zII?h*BNUrXG|{RFn470$7%vOhLyt(=b^LeGKi$jEavB0w*_(?eWQU}?_6;?fY;MGX zc{RX%*xoQLMed5;RaJ2=Fcv7t%rBqf5UCx9Z2i3TUdb0ZzJ+#rORjt04oV1?L-erw zIGR3!)MzlZqOfqCu;%l@5i@zNWLzWqxFxR5H*c(H`H=#FUPR8#$O09_4?@!ON2=c( z+VVNOP>PN*j6iLSZ1Px3Gqy5Itb4b6bDqHuWPllonwRlGKBnFd=V*Hv>yrq^EcK{m zwyhuFNma~^IUn)8+TPKt)v+T1s1?+R(xkhp=DWvSD~V*ikE9M0On0};Xl zUkW#6?vPy7u{YTbHZoHuUhz?Bh7Hj%jbfTA!bprbc`?iHbRIp|Hab4W2SY~e(b$&1 zxeg}XprPHo+j;-V;oCJno-cyb`qN9&jhX32*cVb#V?!6v&ij_jus89mL?#9`sM^ee z>290CdAG?==^+QAg=$Y_i}YqW%O2(Hv)&_UDu=x?pSDtYM^0q7V_FYm?BeyxMQRv~ zX*WL%TF6uKThRhm;TBel96PV8-#xN8Yirfwx#_Bsnb+kKy_USM`iQ1_fPD*JTA zCKgSJ&GHt3IewX?{8{po_f*IX!V7))xK>q^MDwJ;4 z<=y&IP#5!MU*5>d5{dSG@vNXqX=mynqX747=B7TV5}sHFnEDhAic4CP50LH+^c2x7`lEyt@> zywqn;wQI}sT&2~odr{TqV%mB2>cVx9Tx$2lMcr;O3b1a)>zYyOw;87NON4KfwD@l- z9bfg44HkdHUxFi_Jcdu`JrwzTVzk1ku5{K&lGiuparAV0f}{j+eTW(=#x)Rso7H1;XqoO%37>} zGLaAKX($Yy__^v6LiXJ;+gr+?mxNSOJmQw}rkKjhm;mp8aMl9jXv>Z6*pC9OU&~(8~+dU4&BM4eB z4#?eQkz-Z0G&naJU9RPGXlr$BsW4}w6cJOnBtp9n8o*KH{8%?)H=TnjKmyju3OrB* zb{&RHw7dkJ*XMIJ^UEBQ5)0Nkxrr=b0&0D?o?O(8bWx^(%^p}-xu;7D^T?X?l%_-& zrzYjHUocP09Xr%9H1su3luiBd23PHjRgMSH+=WMwhIV5;;s$4}z_VB+T)tAznB=U3 z0+iJ{_TTS60eW3}6$3otkF}Jm0_8vI)xi&EDv!GsaA<2<;#{EymR2sSLBl0h2ox>e zhO{L|tQM?PF51FpTbMei+pcn@o`kcn9j9y4vOq8A!rKXj;`FS8mtSDSMRv?NV@O(F Qe^dv^Nh?d$N|*%yAH}JnUjP6A literal 0 HcmV?d00001 diff --git a/icons/scalable.svg b/icons/scalable.svg new file mode 100644 index 0000000..6b17a95 --- /dev/null +++ b/icons/scalable.svg @@ -0,0 +1,531 @@ + + + + + + + + + + diff --git a/icons/win_icon.ico b/icons/win_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..33a4ab8e77a0e792b580882a1c016f3a6b001e53 GIT binary patch literal 67646 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 literal 0 HcmV?d00001 diff --git a/icons/win_icon.ico~ b/icons/win_icon.ico~ new file mode 100644 index 0000000000000000000000000000000000000000..34e88c69c466ecc3780e6683cd02cacda6830648 GIT binary patch literal 15837 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 " + dst) + + if os.path.isdir(src): + files = os.listdir(src) + + if not os.path.exists(dst): + os.makedirs(dst) + + for file in files: + tree_src = src + os.path.sep + file + tree_dst = dst + os.path.sep + file + + if os.path.isdir(tree_src): + if not os.path.exists(tree_dst): + os.makedirs(tree_dst) + + verbose_copy(tree_src, tree_dst) + + else: + shutil.copyfile(src, dst) + +def verbose_create_symmlink(src, dst): + print("lnk: " + src + " --> " + dst) + + if os.path.exists(dst): + os.remove(dst) + + os.symlink(src, dst) + +def local_install(app_target, app_name): + if platform.system() == "Linux": + if not os.path.exists("app_dir/linux"): + print("An app_dir for the Linux platform could not be found.") + + else: + install_dir = get_install_dir(app_target, app_name) + + if os.path.exists(install_dir + "/uninstall.sh"): + subprocess.run([install_dir + "/uninstall.sh"]) + + if make_install_dir(install_dir): + if not os.path.exists("/var/opt/" + app_target): + os.makedirs("/var/opt/" + app_target) + + text_template_deploy("app_dir/linux/" + app_target + ".sh", install_dir + "/" + app_target + ".sh", install_dir, app_name, app_target) + text_template_deploy("app_dir/linux/uninstall.sh", install_dir + "/uninstall.sh", install_dir, app_name, app_target) + text_template_deploy("app_dir/linux/" + app_target + ".desktop", "/usr/share/applications/" + app_target + ".desktop", install_dir, app_name, app_target) + + for image_res in ["8x8", "16x16", "22x22", "24x24", "32x32", "36x36", "42x42", "48x48", "64x64", "192x192", "256x256", "512x512"]: + src = "app_dir/icons/" + image_res + ".png" + dst = "/usr/share/icons/hicolor/" + image_res + + if os.path.exists(dst): + verbose_copy(src, dst + "/apps/" + app_target + ".png") + + subprocess.run(["chmod", "644", dst + "/apps/" + app_target + ".png"]) + + verbose_copy("app_dir/icons/scalable.svg", "/usr/share/icons/hicolor/scalable/apps/" + app_target + ".svg") + verbose_copy("app_dir/linux/" + app_target, install_dir + "/" + app_target) + verbose_copy("app_dir/linux/lib", install_dir + "/lib") + verbose_copy("app_dir/linux/platforms", install_dir + "/platforms") + verbose_copy("app_dir/linux/xcbglintegrations", install_dir + "/xcbglintegrations") + + verbose_create_symmlink(install_dir + "/" + app_target + ".sh", "/usr/bin/" + app_target) + + subprocess.run(["chmod", "644", "/usr/share/icons/hicolor/scalable/apps/" + app_target + ".svg"]) + subprocess.run(["chmod", "755", install_dir + "/" + app_target + ".sh"]) + subprocess.run(["chmod", "755", install_dir + "/" + app_target]) + subprocess.run(["chmod", "755", install_dir + "/uninstall.sh"]) + + print("Installation finished. If you ever need to uninstall this application, run this command with root rights:") + print(" sh " + install_dir + "/uninstall.sh\n") + + elif platform.system() == "Windows": + if not os.path.exists("app_dir\\windows"): + print("An app_dir for the Windows platform could not be found.") + + else: + install_dir = get_install_dir(app_target, app_name) + + if os.path.exists(install_dir + "\\uninstall.bat"): + subprocess.run([install_dir + "\\uninstall.bat"]) + + if os.path.exists(install_dir): + # this block is here to make sure the install_dir is deleted + # if/when the uninstall.bat fails to do so. in my test machine, + # the .bat script will delete install_dir if run directly but + # not when called through subprocess.run() for some reason. + shutil.rmtree(install_dir) + + if make_install_dir(install_dir): + verbose_copy("app_dir\\windows", install_dir) + verbose_copy("app_dir\\icons\\win_icon.ico", install_dir + "\\icon.ico") + + text_template_deploy("app_dir\\windows\\uninstall.bat", install_dir + "\\uninstall.bat", install_dir, app_name, app_target) + text_template_deploy("app_dir\\windows\\icon.vbs", install_dir + "\\icon.vbs", install_dir, app_name, app_target) + text_sub_copy_file(install_dir + "\\icon.vbs", install_dir + "\\icon.vbs", "%SystemDrive%", os.environ['SystemDrive'], 0) + + os.system("\"" + install_dir + "\\icon.vbs\"") + + print("Installation finished. If you ever need to uninstall this application, run this batch file with admin rights:") + print(" " + install_dir + "\\uninstall.bat\n") + + else: + print("The platform you are running in is not compatible.") + print(" output from platform.system() = " + platform.system()) + +def dir_tree(path): + + ret = [] + + if os.path.isdir(path): + for entry in os.listdir(path): + full_path = os.path.join(path, entry) + + if os.path.isdir(full_path): + for sub_dir_file in dir_tree(full_path): + ret.append(sub_dir_file) + + else: + ret.append(full_path) + + return ret + +def to_hex(data): + return str(binascii.hexlify(data))[2:-1] + +def from_hex(text_line): + return binascii.unhexlify(text_line) + +def make_install(app_ver, app_name): + path = get_installer_path(app_ver, app_name) + + with zipfile.ZipFile("app_dir.zip", "w", compression=zipfile.ZIP_DEFLATED) as zip_file: + print("Compressing app_dir --") + + for file in dir_tree("app_dir"): + print("adding file: " + file) + zip_file.write(file) + + text_sub_copy_file(__file__, path, "main(is_sfx=False)", "main(is_sfx=True)\n\n\n", 7700) + + with open(path, "a") as dst_file, open("app_dir.zip", "rb") as src_file: + print("Packing the compressed app_dir into the sfx script file --") + + dst_file.write("# APP_DIR\n") + + stat = os.stat("app_dir.zip") + + while(True): + buffer = src_file.read(4000000) + + if len(buffer) != 0: + dst_file.write("# " + to_hex(buffer) + "\n") + + print(str(src_file.tell()) + "/" + str(stat.st_size)) + + if len(buffer) < 4000000: + break + + os.remove("app_dir.zip") + + print("Finished.") + +def sfx(): + abs_sfx_path = os.path.abspath(__file__) + mark_found = False + + os.chdir(tempfile.gettempdir()) + + with open(abs_sfx_path) as packed_file, open("app_dir.zip", "wb") as zip_file: + stat = os.stat(abs_sfx_path) + + print("Unpacking the app_dir compressed file from the sfx script.") + + while(True): + line = packed_file.readline() + + if not line: + break + + elif mark_found: + zip_file.write(from_hex(line[2:-1])) + + print(str(packed_file.tell()) + "/" + str(stat.st_size)) + + else: + if line == "# APP_DIR\n": + mark_found = True + + print("Done.") + + if not mark_found: + print("The app_dir mark was not found, unable to continue.") + + else: + with zipfile.ZipFile("app_dir.zip", "r", compression=zipfile.ZIP_DEFLATED) as zip_file: + print("De-compressing app_dir --") + + zip_file.extractall() + + print("Preparing for installation.") + + os.remove("app_dir.zip") + + with open("app_dir" + os.sep + "info.txt") as info_file: + info = info_file.read().split("\n") + + local_install(info[0], info[2]) + shutil.rmtree("app_dir") + +def main(is_sfx): + cd() + + app_target = "" + app_ver = "" + app_name = "" + + if not is_sfx: + with open("app_dir" + os.sep + "info.txt") as info_file: + info = info_file.read().split("\n") + + app_target = info[0] + app_ver = info[1] + app_name = info[2] + + if is_sfx: + sfx() + + elif "-local" in sys.argv: + local_install(app_target, app_name) + + elif "-installer" in sys.argv: + make_install(app_ver, app_name) + + else: + print("Do you want to install onto this machine or create an installer?") + print("[1] local machine") + print("[2] create installer") + print("[3] exit") + + while(True): + opt = input("select an option: ") + + if opt == "1": + local_install(app_target, app_name) + break + + elif opt == "2": + make_install(app_ver, app_name) + break + + elif opt == "3": + break + +if __name__ == "__main__": + main(is_sfx=False) \ No newline at end of file diff --git a/src/cas_codec.cpp b/src/cas_codec.cpp new file mode 100644 index 0000000..dc661a5 --- /dev/null +++ b/src/cas_codec.cpp @@ -0,0 +1,355 @@ +#include "cas_codec.h" + +// This file is part of CAS. + +// CAS 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. + +// CAS 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. + +QByteArray wrNum(uchar numOfBits, quint64 value, bool be) +{ + QByteArray ret(numOfBits / 8, (char) 0); + + if (be) value = qToBigEndian(value); + else value = qToLittleEndian(value); + + memcpy(ret.data(), &value, ret.size()); + + return ret; +} + +quint64 rdNum(const QByteArray &dataIn, bool be) +{ + quint64 ret = 0; + + memcpy(&ret, dataIn.data(), dataIn.size()); + + if (be) return qFromBigEndian(ret); + else return qFromLittleEndian(ret); +} + +quint64 rdNum(QIODevice *dev, uchar numOfBits, bool be) +{ + return rdNum(dev->read(numOfBits / 8), be); +} + +Channel::Channel(uchar chId, uchar *bits, bool *be, QObject *parent) : QObject(parent) +{ + channelId = chId; + pcmBits = bits; + bigE = be; + pcmSample = 0; + xGap = 0; + firstReadSample = true; + ramping = false; +} + +void Channel::toCas(uchar id, const QByteArray &pcm, bool forceWr) +{ + if (id == channelId) + { + quint64 currentSample = rdNum(pcm, *bigE); + bool wrCasSample = false; + + if (firstReadSample) + { + // at the very begining of the PCM stream, the codec does + // not know if the signal is ramping or not and xGap is + // assumed to be 1 so the first PCM sample is always + // written to set a base line. + + xGap = 1; + wrCasSample = true; + firstReadSample = false; + } + else if (ramping) + { + if (currentSample < pcmSample) + { + // the currently read pcm sample that reads + // a lower value when the loop is expecting + // a higher value is considered a peak of a + // sinewave signal so a CAS sample needs to + // be written at this point. + + // doing this captures the upper peak of the + // sinewave. + + ramping = false; + wrCasSample = true; + } + } + else + { + if (currentSample > pcmSample) + { + // this does the exact opposite of the above. + // it captures the lower peak of the sinewave. + + ramping = true; + wrCasSample = true; + } + } + + if (wrCasSample || forceWr || (xGap == 255)) + { + // CAS format: [xGap][PCM_Sample] + + emit sampleRdy(channelId, wrNum(8, xGap, *bigE) + wrNum(*pcmBits, pcmSample, *bigE)); + + xGap = 0; + } + + xGap++; + + pcmSample = currentSample; + } +} + +void Channel::fromCas(uchar id, const QByteArray &cas) +{ + if (id == channelId) + { + xGap = rdNum(cas.left(1), *bigE); + + quint64 currentSample = rdNum(cas.mid(1), *bigE); + quint64 prevSample = pcmSample; + quint64 yGap = 0; + + if (currentSample > prevSample) + { + yGap = (currentSample - prevSample) / xGap; + } + else if (currentSample < prevSample) + { + yGap = (prevSample - currentSample) / xGap; + } + + for (; xGap != 0; --xGap) + { + if (currentSample > prevSample) + { + // a current sample higher than previously read sample is + // assumed to be a ramping up sinewave so it increments + // the output pcm samples accordingly. + + pcmSample += yGap; + } + else if (currentSample < prevSample) + { + // this is the opposite of the above. + + pcmSample -= yGap; + } + + emit sampleRdy(channelId, wrNum(*pcmBits, pcmSample, *bigE)); + } + } +} + +CASCodec::CASCodec(QObject *parent) : QObject(0) +{ + QThread *thread = new QThread(); + + connect(this, SIGNAL(destroyed()), thread, SLOT(quit())); + connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); + + moveToThread(thread); + + if (parent) + { + connect(parent, SIGNAL(destroyed()), this, SLOT(deleteLater())); + } + + currentChannel = 0; + sampleRate = 0; + casRev = 0; + srcIO = 0; + dstIO = 0; + + stop(); + + thread->start(); +} + +bool CASCodec::rdCasHeader(QIODevice *rdIO) +{ + bool ret = false; + QByteArray header = rdIO->read(10); + + if (header.startsWith(CAS_TAG) && (header.size() == 10)) + { + casRev = header[3]; + pcmBits = header[4]; + sampleRate = rdNum(header.mid(6, 4), false); + ret = true; + + emit updatePCMBits(pcmBits); + emit updateNumOfChannels(header[5]); + emit updateSampleRate(sampleRate); + } + + return ret; +} + +bool CASCodec::wrCasHeader(QIODevice *wrIO) +{ + bool ret = false; + QByteArray header; + + casRev = CAS_REV; + + header.append(CAS_TAG); + header.append(CAS_REV); + header.append(pcmBits); + header.append((uchar) buffer.size()); + header.append(wrNum(32, sampleRate, false)); + + if (wrIO->write(header) != -1) + { + ret = true; + } + + return ret; +} + +void CASCodec::setEncodeMode(bool state) {encode = state;} +void CASCodec::setBigEndianMode(bool state) {bigE = state;} +void CASCodec::setSampleRate(int rate) {sampleRate = rate;} +void CASCodec::setPCMBits(int numOfBits) {pcmBits = numOfBits;} + +void CASCodec::setNumOfChannels(int ch) +{ + emit delChannels(); + + buffer.clear(); + + for (int i = 0; i < ch; ++i) + { + Channel *channel = new Channel(i, &pcmBits, &bigE); + + connect(this, SIGNAL(delChannels()), channel, SLOT(deleteLater())); + connect(this, SIGNAL(encodeSample(uchar,QByteArray,bool)), channel, SLOT(toCas(uchar,QByteArray,bool))); + connect(this, SIGNAL(decodeSample(uchar,QByteArray)), channel, SLOT(fromCas(uchar,QByteArray))); + connect(channel, SIGNAL(sampleRdy(uchar,QByteArray)), this, SLOT(finishedSample(uchar,QByteArray))); + + buffer.append(QList()); + } +} + +void CASCodec::dataIn() +{ + if (srcIO && dstIO) + { + while (!stopRequested && srcIO->bytesAvailable()) + { + bool forceWr = false; + + for (int i = 0; i < buffer.size(); ++i) + { + if (encode) + { + if (!srcIO->isSequential()) + { + forceWr = (lastBytes >= srcIO->bytesAvailable()); + } + + QByteArray data = srcIO->read(pcmBits / 8); + + emit encodeSample(i, data, forceWr); + } + else + { + QByteArray data = srcIO->read((pcmBits / 8) + 1); + + emit decodeSample(i, data); + } + } + } + } +} + +void CASCodec::finishedSample(uchar id, const QByteArray &data) +{ + buffer[id].append(data); + + bool allChannelsPending = true; + + for (int i = 0; i < buffer.size(); ++i) + { + if (buffer[i].isEmpty()) + { + allChannelsPending = false; + + break; + } + } + + if (allChannelsPending) + { + for (int i = 0; i < buffer.size(); ++i) + { + dstIO->write(buffer[i].takeFirst()); + } + } +} + +void CASCodec::exec(QIODevice *rdIO, QIODevice *wrIO) +{ + if (buffer.size() == 0) + { + emit stopError(tr("The number of channels cannot be zero.")); + } + else if (!rdIO->isOpen() || !rdIO->isReadable()) + { + emit stopError(tr("Input io device is not open or readable.")); + } + else if (!wrIO->isOpen() || !wrIO->isWritable()) + { + emit stopError(tr("Output io device is not open or writable.")); + } + else + { + stopRequested = false; + lastBytes = (pcmBits / 8) * buffer.size(); + srcIO = rdIO; + dstIO = wrIO; + + emit runningState(true); + + if (encode) emit codecStatus(tr("Encoding.")); + else emit codecStatus(tr("Decoding.")); + + connect(rdIO, SIGNAL(readyRead()), this, SLOT(dataIn())); + + if (!rdIO->isSequential()) + { + emit rdIO->readyRead(); + } + } +} + +void CASCodec::stop() +{ + if (srcIO) + { + disconnect(srcIO, SIGNAL(readyRead()), this, SLOT(dataIn())); + } + + setNumOfChannels(buffer.size()); + + stopRequested = true; + currentChannel = 0; + lastBytes = 0; + srcIO = 0; + dstIO = 0; + + emit runningState(false); + emit codecStatus(tr("Ready.")); +} diff --git a/src/cas_codec.h b/src/cas_codec.h new file mode 100644 index 0000000..ed3c9c6 --- /dev/null +++ b/src/cas_codec.h @@ -0,0 +1,115 @@ +#ifndef CAS_CODEC_H +#define CAS_CODEC_H + +#include +#include +#include +#include +#include +#include + +// This file is part of CAS. + +// CAS 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. + +// CAS 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. + +#define CAS_TAG "CAS" +#define CAS_REV 1 + +QByteArray wrNum(uchar numOfBits, quint64 value, bool be); +quint64 rdNum(const QByteArray &dataIn, bool be); +quint64 rdNum(QIODevice *dev, uchar numOfBits, bool be); + +class Channel : public QObject +{ + Q_OBJECT + +private: + + quint64 pcmSample; + quint64 xGap; + uchar channelId; + uchar *pcmBits; + bool *bigE; + bool ramping; + bool firstReadSample; + +public: + + explicit Channel(uchar chId, uchar *bits, bool *be, QObject *parent = nullptr); + +public slots: + + void toCas(uchar id, const QByteArray &pcm, bool forceWr); + void fromCas(uchar id, const QByteArray &cas); + +signals: + + void sampleRdy(uchar id, const QByteArray &data); +}; + +class CASCodec : public QObject +{ + Q_OBJECT + +private: + + QList > buffer; + QIODevice *srcIO; + QIODevice *dstIO; + QString inputFilePath; + QString outPutFilePath; + qint64 lastBytes; + uchar currentChannel; + uchar casRev; + uchar pcmBits; + uint sampleRate; + bool bigE; + bool encode; + +private slots: + + void dataIn(); + void finishedSample(uchar id, const QByteArray &data); + +public: + + bool stopRequested; + + bool rdCasHeader(QIODevice *rdIO); + bool wrCasHeader(QIODevice *wrIO); + + explicit CASCodec(QObject *parent = nullptr); + +public slots: + + void setPCMBits(int numOfBits); + void setEncodeMode(bool state); + void setBigEndianMode(bool state); + void setNumOfChannels(int ch); + void setSampleRate(int rate); + void exec(QIODevice *rdIO, QIODevice *wrIO); + void stop(); + +signals: + + + void encodeSample(uchar id, const QByteArray &pcm, bool forceWr); + void decodeSample(uchar id, const QByteArray &cas); + void delChannels(); + void updateNumOfChannels(int value); + void updatePCMBits(int numOfBits); + void updateSampleRate(int rate); + void stopError(const QString &msg); + void runningState(bool state); + void codecStatus(const QString &msg); +}; + +#endif // CAS_CODEC_H diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..fd3eb7c --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,33 @@ +#include + +#include "ui.h" +#include "cas_codec.h" + +#define APP_NAME "CAS" +#define APP_TARGET "cas" +#define APP_VERSION "1.0" + +// This file is part of CAS. + +// CAS 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. + +// CAS 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. + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Ui window; + + app.setApplicationName(QObject::tr(APP_NAME)); + app.setApplicationVersion(QObject::tr(APP_VERSION)); + + window.show(); + + return app.exec(); +} diff --git a/src/ui.cpp b/src/ui.cpp new file mode 100644 index 0000000..c0939b0 --- /dev/null +++ b/src/ui.cpp @@ -0,0 +1,232 @@ +#include "ui.h" + +// This file is part of CAS. + +// CAS 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. + +// CAS 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. + +Ui::Ui(QWidget *parent) : QMainWindow(parent) +{ + QWidget *mainWid = new QWidget(this); + QGridLayout *mainLayout = new QGridLayout(mainWid); + QPushButton *start = new QPushButton(tr("Start"), mainWid); + QLabel *status = new QLabel(tr("Ready.\n"), mainWid); + + encode = new QRadioButton(tr("Encode"), mainWid); + decode = new QRadioButton(tr("Decode"), mainWid); + bigE = new QRadioButton(tr("Big"), mainWid); + littleE = new QRadioButton(tr("Little"), mainWid); + bits = new QSpinBox(mainWid); + numOfChannels = new QSpinBox(mainWid); + sampleRate = new QSpinBox(mainWid); + inFile = new QLineEdit(mainWid); + outFile = new QLineEdit(mainWid); + pickInput = new QPushButton(tr("Browse"), mainWid); + pickOutput = new QPushButton(tr("Browse"), mainWid); + stop = new QPushButton(tr("Stop"), this); + progress = new QProgressBar(mainWid); + codec = new CASCodec(this); + progTimer = new QTimer(this); + inFileIO = new QFile(this); + outFileIO = new QFile(this); + + // radio groups + + QButtonGroup *io = new QButtonGroup(mainWid); + QButtonGroup *endian = new QButtonGroup(mainWid); + + io->addButton(encode); + io->addButton(decode); + endian->addButton(bigE); + endian->addButton(littleE); + + mainLayout->addWidget(encode, 0, 1, 1, 1); + mainLayout->addWidget(decode, 0, 2, 1, 1); + + // column 0, labels: + + mainLayout->addWidget(new QLabel(tr("Input File: "), mainWid), 1, 0, 1, 1); + mainLayout->addWidget(new QLabel(tr("Output File: "), mainWid), 2, 0, 1, 1); + mainLayout->addWidget(new QLabel(tr("Bit Depth: "), mainWid), 3, 0, 1, 1); + mainLayout->addWidget(new QLabel(tr("Channels: "), mainWid), 4, 0, 1, 1); + mainLayout->addWidget(new QLabel(tr("Sample Rate: "), mainWid), 5, 0, 1, 1); + mainLayout->addWidget(new QLabel(tr("Endianness: "), mainWid), 6, 0, 1, 1); + + // column 1, 2 values: + + mainLayout->addWidget(inFile, 1, 1, 1, 2); + mainLayout->addWidget(outFile, 2, 1, 1, 2); + mainLayout->addWidget(bits, 3, 1, 1, 1); + mainLayout->addWidget(numOfChannels, 4, 1, 1, 1); + mainLayout->addWidget(sampleRate, 5, 1, 1, 1); + mainLayout->addWidget(littleE, 6, 1, 1, 1); + mainLayout->addWidget(bigE, 6, 2, 1, 1); + + // column 3, modifiers: + + mainLayout->addWidget(pickInput, 1, 3, 1, 1); + mainLayout->addWidget(pickOutput, 2, 3, 1, 1); + + status->setWordWrap(true); + encode->setChecked(true); + littleE->setChecked(true); + numOfChannels->setMinimum(1); + numOfChannels->setValue(2); + sampleRate->setMinimum(1); + sampleRate->setMaximum(400000000); + sampleRate->setValue(44100); + bits->setMinimum(8); + bits->setMaximum(64); + bits->setValue(16); + progress->setMinimum(0); + progress->setMaximum(1); + progress->setValue(0); + progTimer->setSingleShot(false); + + mainLayout->addWidget(status, 7, 1, 1, 3); + mainLayout->addWidget(progress, 8, 1, 1, 3); + mainLayout->addWidget(start, 9, 1, 1, 1); + mainLayout->addWidget(stop, 9, 2, 1, 1); + + addLockoutWidget(encode); + addLockoutWidget(decode); + addLockoutWidget(numOfChannels); + addLockoutWidget(sampleRate); + addLockoutWidget(bigE); + addLockoutWidget(littleE); + addLockoutWidget(bits); + addLockoutWidget(inFile); + addLockoutWidget(outFile); + addLockoutWidget(pickInput); + addLockoutWidget(pickOutput); + addLockoutWidget(start); + setCentralWidget(mainWid); + + connect(start, SIGNAL(clicked()), this, SLOT(startProc())); + connect(stop, SIGNAL(clicked()), this, SLOT(stopProc())); + connect(this, SIGNAL(runCodec(QIODevice*,QIODevice*)), codec, SLOT(exec(QIODevice*,QIODevice*))); + connect(stop, SIGNAL(clicked()), codec, SLOT(stop())); + connect(pickInput, SIGNAL(clicked()), this, SLOT(inputFileDialog())); + connect(pickOutput, SIGNAL(clicked()), this, SLOT(outputFileDialog())); + connect(codec, SIGNAL(runningState(bool)), this, SLOT(codecRunningState(bool))); + connect(codec, SIGNAL(stopError(QString)), this, SLOT(codecError(QString))); + connect(bits, SIGNAL(valueChanged(int)), codec, SLOT(setPCMBits(int))); + connect(codec, SIGNAL(updatePCMBits(int)), bits, SLOT(setValue(int))); + connect(encode, SIGNAL(toggled(bool)), codec, SLOT(setEncodeMode(bool))); + connect(bigE, SIGNAL(toggled(bool)), codec, SLOT(setBigEndianMode(bool))); + connect(numOfChannels, SIGNAL(valueChanged(int)), codec, SLOT(setNumOfChannels(int))); + connect(sampleRate, SIGNAL(valueChanged(int)), codec, SLOT(setSampleRate(int))); + connect(codec, SIGNAL(updateSampleRate(int)), sampleRate, SLOT(setValue(int))); + connect(progTimer, SIGNAL(timeout()), this, SLOT(updateProgress())); + connect(codec, SIGNAL(codecStatus(QString)), status, SLOT(setText(QString))); + + emit numOfChannels->valueChanged(numOfChannels->value()); + emit sampleRate->valueChanged(sampleRate->value()); + emit bits->valueChanged(bits->value()); + emit encode->toggled(encode->isChecked()); + emit bigE->toggled(bigE->isChecked()); +} + +void Ui::addLockoutWidget(QWidget *wid) +{ + connect(this, SIGNAL(enableLockWidgets(bool)), wid, SLOT(setEnabled(bool))); +} + +void Ui::inputFileDialog() +{ + inFile->setText(QFileDialog::getOpenFileName(this, tr("Input file"), QDir::homePath(), tr("*.*"))); +} + +void Ui::outputFileDialog() +{ + outFile->setText(QFileDialog::getSaveFileName(this, tr("Output file"), QDir::homePath())); +} + +void Ui::codecRunningState(bool state) +{ + if (state) + { + progress->setMinimum(0); + progress->setMaximum(inFileIO->size()); + progTimer->start(500); + } + else + { + progress->setValue(0); + progTimer->stop(); + inFileIO->close(); + outFileIO->close(); + } + + emit enableLockWidgets(!state); +} + +void Ui::stopProc() +{ + codec->stopRequested = true; +} + +void Ui::startProc() +{ + inFileIO->setFileName(inFile->text()); + outFileIO->setFileName(outFile->text()); + + if (!inFileIO->open(QFile::ReadOnly)) + { + codecError(tr("Could not open the input file - ") + inFileIO->errorString() + "."); + } + else if (!outFileIO->open(QFile::WriteOnly | QFile::Truncate)) + { + codecError(tr("Could not open the output file - ") + outFileIO->errorString() + "."); + } + else + { + if (encode->isChecked()) + { + if (codec->wrCasHeader(outFileIO)) + { + emit runCodec(inFileIO, outFileIO); + } + else + { + codecError(tr("Could not write a new CAS header to the output file.")); + } + } + else + { + if (codec->rdCasHeader(inFileIO)) + { + emit runCodec(inFileIO, outFileIO); + } + else + { + codecError(tr("Could not read the input file's CAS header.")); + } + } + } +} + +void Ui::codecError(const QString &msg) +{ + inFileIO->close(); + outFileIO->close(); + + QMessageBox::critical(this, "", msg); +} + +void Ui::updateProgress() +{ + progress->setValue(inFileIO->pos()); + + if (inFileIO->atEnd()) + { + emit stop->click(); + } +} diff --git a/src/ui.h b/src/ui.h new file mode 100644 index 0000000..9714c3f --- /dev/null +++ b/src/ui.h @@ -0,0 +1,81 @@ +#ifndef UI_H +#define UI_H + +// This file is part of CAS. + +// CAS 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. + +// CAS 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. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cas_codec.h" + +class Ui : public QMainWindow +{ + Q_OBJECT + +private: + + QLineEdit *inFile; + QLineEdit *outFile; + QFile *inFileIO; + QFile *outFileIO; + QSpinBox *bits; + QSpinBox *numOfChannels; + QSpinBox *sampleRate; + QRadioButton *encode; + QRadioButton *decode; + QRadioButton *bigE; + QRadioButton *littleE; + QPushButton *pickInput; + QPushButton *pickOutput; + QPushButton *stop; + QProgressBar *progress; + CASCodec *codec; + QTimer *progTimer; + + void addLockoutWidget(QWidget *wid); + +private slots: + + void codecError(const QString &msg); + void codecRunningState(bool state); + void inputFileDialog(); + void outputFileDialog(); + void stopProc(); + void startProc(); + void updateProgress(); + +public: + + Ui(QWidget *parent = 0); + +signals: + + void enableLockWidgets(bool state); + void runCodec(QIODevice *src, QIODevice *dst); +}; + +#endif // UI_H diff --git a/templates/linux_icon.desktop b/templates/linux_icon.desktop new file mode 100644 index 0000000..5ec88ea --- /dev/null +++ b/templates/linux_icon.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Exec=/usr/bin/$app_target +Name=$app_name +GenericName=CAS codec proof of concept +Icon=$app_target +StartupWMClass=$app_target +Terminal=false +Categories=Media;Audio;CAS; diff --git a/templates/linux_run_script.sh b/templates/linux_run_script.sh new file mode 100644 index 0000000..801f13e --- /dev/null +++ b/templates/linux_run_script.sh @@ -0,0 +1,5 @@ +#!/bin/sh +export QTDIR=$install_dir +export QT_PLUGIN_PATH=$install_dir +export LD_LIBRARY_PATH="$install_dir/lib:\$LD_LIBRARY_PATH" +$install_dir/$app_target $1 $2 $3 \ No newline at end of file diff --git a/templates/linux_uninstall.sh b/templates/linux_uninstall.sh new file mode 100644 index 0000000..abb28fb --- /dev/null +++ b/templates/linux_uninstall.sh @@ -0,0 +1,21 @@ +#!/bin/sh +rm -v /usr/bin/$app_target +rm -rv $install_dir +rm -v /usr/share/icons/hicolor/8x8/apps/$app_target.png +rm -v /usr/share/icons/hicolor/16x16/apps/$app_target.png +rm -v /usr/share/icons/hicolor/22x22/apps/$app_target.png +rm -v /usr/share/icons/hicolor/24x24/apps/$app_target.png +rm -v /usr/share/icons/hicolor/32x32/apps/$app_target.png +rm -v /usr/share/icons/hicolor/36x36/apps/$app_target.png +rm -v /usr/share/icons/hicolor/42x42/apps/$app_target.png +rm -v /usr/share/icons/hicolor/48x48/apps/$app_target.png +rm -v /usr/share/icons/hicolor/64x64/apps/$app_target.png +rm -v /usr/share/icons/hicolor/72x72/apps/$app_target.png +rm -v /usr/share/icons/hicolor/96x96/apps/$app_target.png +rm -v /usr/share/icons/hicolor/128x128/apps/$app_target.png +rm -v /usr/share/icons/hicolor/192x192/apps/$app_target.png +rm -v /usr/share/icons/hicolor/256x256/apps/$app_target.png +rm -v /usr/share/icons/hicolor/512x512/apps/$app_target.png +rm -v /usr/share/icons/hicolor/scalable/apps/$app_target.svg +rm -v /usr/share/applications/$app_target.desktop +echo "Uninstallation Complete" \ No newline at end of file diff --git a/templates/win_icon.vbs b/templates/win_icon.vbs new file mode 100644 index 0000000..823d751 --- /dev/null +++ b/templates/win_icon.vbs @@ -0,0 +1,6 @@ +set WshShell = CreateObject("Wscript.shell") +set oMyShortcut = WshShell.CreateShortcut("%SystemDrive%\ProgramData\Microsoft\Windows\Start Menu\Programs\$app_name.lnk") + +oMyShortcut.IconLocation = "$install_dir\icon.ico" +OMyShortcut.TargetPath = "$install_dir\$app_target.exe" +oMyShortCut.Save \ No newline at end of file diff --git a/templates/windows_uninstall.bat b/templates/windows_uninstall.bat new file mode 100644 index 0000000..192a7dd --- /dev/null +++ b/templates/windows_uninstall.bat @@ -0,0 +1,6 @@ +$app_target -stop +schtasks /delete /f /tn $app_name +del /f "%windir%\$app_target.exe" +del /f "%SystemDrive%\ProgramData\Microsoft\Windows\Start Menu\Programs\$app_name.lnk" +rd /q /s "$install_dir" +echo "Uninstallation Complete" \ No newline at end of file