diff --git a/i18n/de_DE.qm b/i18n/de_DE.qm index eea8d85..8f4be29 100644 Binary files a/i18n/de_DE.qm and b/i18n/de_DE.qm differ diff --git a/i18n/de_DE.ts b/i18n/de_DE.ts index 81a9eca..53b7cd3 100644 --- a/i18n/de_DE.ts +++ b/i18n/de_DE.ts @@ -4,80 +4,90 @@ TableWidget - + Cut Ausschneiden - + Copy Kopieren - + Paste Einfügen - + Delete Löschen - + Cut row Zeile ausschneiden - + Copy row Zeile kopieren - + Paste row Zeile einfügen - + Insert row before Zeile oberhalb einfügen - + Insert row after Zeile unterhalb einfügen - + Remove row Zeile entfernen - + Delete items Zellinhalte löschen - + Row Nr. Zeile Nr. - + to be removed? entfernen? - + Remove Entfernen - + Delete cell content? Zellinhalt löschen? + + + UOM + Maß.einh. + + + + Value + Wert + main @@ -87,122 +97,122 @@ Hallo Welt - + &Settings &Einstellungen - + Language Sprache - + Stuff Gegenstand - + Length Länge - + Width Breite - + Height Höhe - + Weight Gewicht - + Dimension of the garage Dimension der Garage - + Dimensions of the objects to be stored Dimensionen der zu verstauenden Gegenstände - + Result Ergebnis - + Volume of the garage Volumen der Garage - + Volume of the items Volumen der Gegenstände - + Free space in the garage Freier Raum in der Garage - + Total weight Gesamtgewicht New (Ctrl+N) - Neu (Strg+N) + Neu (Strg+N) Open... (Ctrl+O) - Öffnen... (Strg+O) + Öffnen... (Strg+O) Save (Ctrl+S) - Speichern (Strg+S) + Speichern (Strg+S) - + Export to EXCEL... Export nach EXCEL... - + Information about the application Informationen über das Programm Quit the application (Strg+Q) - Programm beenden (Strg+Q) + Programm beenden (Strg+Q) - + Garage Garage - + Quit Beenden - + New Neu - + Save Speichern @@ -212,27 +222,27 @@ CSV-Datei - + All files Alle Dateien - + file Datei - + saved gespeichert - + Open Öffnen - + Export Export @@ -242,32 +252,32 @@ EXCEL-Datei - + Error in the garage dimension Fehler in der Garagen-Dimension - + Error in the dimensions of the objects to be stored Fehler in den Dimensionen der zu verstauenden Gegenstände - + Successfully exported to EXCEL Erfolgreich nach EXCEL exportiert - + CSV-file CSV-Datei - + EXCEL-file EXCEL-Datei - + There are unsaved entries. Without saving, all changes are lost. Continue anyway? Es gibt ungespeicherte Einträge. Ohne zu speichern, gehen alle Änderungen verloren. Trotzdem fortfahren? @@ -277,60 +287,65 @@ Garagenraum-Rechner - + Calculates available garage space Berechnet zur Verfügung stehenden Garagenraum - + Comment Kommentar - + Unit of Measurements Maßeinheit - + Length units Längeneinheit - + Mass units Masseeinheit - + &File &Datei - + Help Hilfe - + Do you want to convert all existing stuff of type length to the new unit of measurement (UOM) Möchten Sie alle vorhandenen Gegenstände vom Typ Länge auf die neue Maßeinheit umrechnen - + UOM conversion Einheiten Umrechnung - + Do you want to convert all existing stuff of type mass to the new unit of measurement (UOM) Möchten Sie alle vorhandenen Gegenstände vom Typ Gewicht auf die neue Maßeinheit umrechnen + + + About Qt + Über Qt + utils - + Idea Idee @@ -340,27 +355,27 @@ Verwendete Icons: Thema - + from von - + Version Version - + Used icons Verwendete Icons - + Currently opened file Aktuell geöffnete Datei - + Location of the Ini-file Dateipfad der Ini-Datei diff --git a/i18n/hu_HU.qm b/i18n/hu_HU.qm index 3dacaf9..90e92f1 100644 Binary files a/i18n/hu_HU.qm and b/i18n/hu_HU.qm differ diff --git a/i18n/hu_HU.ts b/i18n/hu_HU.ts index fda8d22..8f122ac 100644 --- a/i18n/hu_HU.ts +++ b/i18n/hu_HU.ts @@ -4,80 +4,90 @@ TableWidget - + Cut kivágni - + Copy másolás - + Paste Beillesztés - + Delete Törlés - + Cut row Vágott vonal - + Copy row Vettem a szöveget - + Paste row Beilleszteni a sort - + Insert row before A fenti sort beilleszteni - + Insert row after Az alábbi sor beillesztése - + Remove row Távolítsa el a sort - + Delete items Tartalom törlése - + Row Nr. Vonalszám. - + to be removed? eltávolítani? - + Remove A eltávolítása - + Delete cell content? Cellatartalom törlése? + + + UOM + Egység + + + + Value + Érték + main @@ -87,122 +97,122 @@ Hallo Welt - + &Settings &Beállítások - + Language Nyelv - + Stuff Tárgy - + Length Hosszúság - + Width Szélesség - + Height Magasság - + Weight Súly - + Dimension of the garage A garázs mérete - + Dimensions of the objects to be stored A tárolandó objektumok méretei - + Result Eredmény - + Volume of the garage A garázs térfogata - + Volume of the items A tételek mennyisége - + Free space in the garage Szabad hely a garázsban - + Total weight Teljes súly New (Ctrl+N) - Új (Ctrl+N) + Új (Ctrl+N) Open... (Ctrl+O) - Nyissa ki (Ctrl+O) + Nyissa ki (Ctrl+O) Save (Ctrl+S) - Mentés (Ctrl+S) + Mentés (Ctrl+S) - + Export to EXCEL... Exportálás EXCEL-be... - + Information about the application Az alkalmazással kapcsolatos információk Quit the application (Strg+Q) - Az alkalmazás kilépése (Ctrl+Q) + Az alkalmazás kilépése (Ctrl+Q) - + Garage Garázs - + Quit Kilépés - + New Új - + Save Mentés @@ -212,27 +222,27 @@ CSV-fájl - + All files Minden fájl - + file fájl - + saved mentett - + Open Megnyitott - + Export Exportálás @@ -242,32 +252,32 @@ EXCEL-fájl - + Error in the garage dimension Hiba a garázs dimenziójában - + Error in the dimensions of the objects to be stored Hiba a tárolandó objektumok méreteiben - + Successfully exported to EXCEL Sikeresen exportált EXCEL-be - + CSV-file CSV-fájl - + EXCEL-file EXCEL-fájl - + There are unsaved entries. Without saving, all changes are lost. Continue anyway? Vannak mentetlen bejegyzések. Mentés nélkül minden módosítás elveszik. Folytassa mégis? @@ -277,60 +287,65 @@ Garázs hely kalkulátor - + Calculates available garage space Kiszámítja a rendelkezésre álló garázshelyet - + Comment Megjegyzés - + Unit of Measurements Mérési egység - + Length units Hosszúsági egységek - + Mass units Tömegegységek - + &File &Fájl - + Help Segítség - + Do you want to convert all existing stuff of type length to the new unit of measurement (UOM) Át akarja konvertálni az összes meglévő hosszúság típusú anyagot az új mértékegységre - + UOM conversion Egység átváltás - + Do you want to convert all existing stuff of type mass to the new unit of measurement (UOM) Át akarja konvertálni az összes meglévő tömeg típusú anyagot az új mértékegységre + + + About Qt + A Qt-ról + utils - + Idea Ötlet @@ -340,27 +355,27 @@ Használt ikonok: Téma - + from a weboldalról - + Version Verzió - + Used icons Használt ikonok - + Currently opened file Jelenleg megnyitott fájl - + Location of the Ini-file Az Ini-fájl helye diff --git a/img/icons.qrc b/img/icons.qrc new file mode 100644 index 0000000..5ff266f --- /dev/null +++ b/img/icons.qrc @@ -0,0 +1,12 @@ + + + icons8-export-xls-32.png + icons8-garage-32.ico + icons8-information-32.png + icons8-new-file-32.png + icons8-opened-folder-32.png + icons8-save-32.png + qt_logo_small.png + system-shutdown.png + + diff --git a/scripts/create_rc_file.cmd b/scripts/create_rc_file.cmd new file mode 100644 index 0000000..1dfebe2 --- /dev/null +++ b/scripts/create_rc_file.cmd @@ -0,0 +1,22 @@ +@ECHO OFF +:: -------------------------------------------------------------------------------------------------------------------------------------- +:: project: GarageCalc +:: summary: Update or create GarageCalc module file to be imported from Qrc-file +:: file: update_ts_files.cmd +:: date: version author +:: 2021-07-12 1 paul salajean +:: -------------------------------------------------------------------------------------------------------------------------------------- +SET prev_dir=%cd% + +CD .. + +pyside2-rcc --verbose -o .\src\icons_rc.py .\img\icons.qrc +:: for embedded class "clsTableWidget" +pyside2-rcc --verbose -o .\src\clsTableWidget_icons_rc.py .\src\img\icons.qrc + + +:END +CD %prev_dir% +ECHO Done. + +PAUSE diff --git a/scripts/pyinstaller_v2.cmd b/scripts/pyinstaller_v2.cmd new file mode 100644 index 0000000..9e499e1 --- /dev/null +++ b/scripts/pyinstaller_v2.cmd @@ -0,0 +1,94 @@ +@ECHO OFF +:: -------------------------------------------------------------------------------------------------------------------------------------- +:: project: GarageCalc Window-Exe Generator +:: summary: create a GarageCalc-executable for Windows (version with no-console-windows as well as version with console windows for traces) +:: file: pyinstaller.cmd +:: date: version author +:: 2021-06-27 1 paul salajean +:: -------------------------------------------------------------------------------------------------------------------------------------- +SET version="v0.4" +SET release_dir="D:\Temp\Prog\ownCloud\profp@uberspace\transfer" + +SET prev_dir=%cd% +SET reinstall_venv="true" +SET do_zip="false" + +CD .. + +ECHO Creating GarageCalc Windows.exe-version in folder %cd%\dist +PAUSE +REM pyinstaller --noconfirm --log-level=ERROR ^ +REM --onedir --nowindow ^ +REM --add-data="README;." ^ +REM --add-data="image1.png;img" ^ +REM --add-data="img;doc;ui" ^ +REM --add-data="LICENSE.txt;changelog.md;GarageCalc.bat" ^ +REM --add-binary="libfoo.so;lib" ^ +REM --hidden-import=secret1 ^ +REM --hidden-import=secret2 ^ +REM --icon=.\img\GarageCalc.ico ^ +REM --debug=imports ^ +REM --key=N0T1me40pp0ssum5 +REM --paths=.\src ^ +REM GarageCalc.spec +REM The key-string is a string of 16 characters which is used to encrypt each file of Python byte-code before it is stored in the archive inside the executable file. +REM This feature uses the "tinyaes" module internally for the encryption. +REM + +::one dir: +ECHO ...Running... + +RMDIR /S /Q .\dist>nul +RMDIR /S /Q .\build>nul + +::Use Virtual env +IF %reinstall_venv%=="false" GOTO PYINSTALL +ECHO Installing virtual env as ".\env2"... +RMDIR /S /Q .\env2>NUL +python -m venv env2 +CALL .\env2\Scripts\activate.bat + +ECHO Installing necessary python packages... +python -m pip install --upgrade pip +python -m pip install -r requirements.txt + +:PYINSTALL +IF %reinstall_venv%=="false" CALL .\env2\Scripts\activate.bat +ECHO Running "pyinstaller"... +REM pyinstaller .\main.py --name=GarageCalc --noconfirm --console --clean --onedir --log-level=ERROR --hidden-import=PySide2.QtXml --icon=.\img\GarageCalc.ico --add-data="LICENSE;." --add-data="README.md;." --add-data="changelog.md;." --add-data="*.ui;." --add-data="img;.\img" +REM --windowed +pyinstaller .\src\main.py --name=GarageCalc --noconfirm --windowed --clean --onefile --log-level=ERROR --hidden-import=PySide2.QtXml ^ + --icon=.\img\icons8-garage-32.ico ^ + --add-data="ui;.\ui" ^ + --add-data="i18n;.\i18n" + +::MOVE .\dist\GarageCalc\*.md .\dist\ +::MOVE .\dist\GarageCalc\LICENSE .\dist\ + +::clean-up img-folder +::MOVE .\dist\GarageCalc\img .\dist\img>NUL + +::Remove temp dir and files +DEL /Q *.spec>NUL +RMDIR /S /Q .\build + +::Create self extracting archive +IF %do_zip%=="false" GOTO END +::-mx0 = Don't compress at all - just copy the contents to archive. +::-mx1 = Consumes least time, but compression is low. +::-mx3 = Better than -mx1. +::-mx5 = This is default (compression is normal). +::-mx7 = Maximum compression. +::-mx9 = Ultra compression. +"C:\Program Files\7-zip\7z.exe" a %release_dir%\GarageCalc_%version%_portable.exe -mx9 -sfx7z.sfx .\dist\* + +::Disable Virtual env +CALL .\env2\Scripts\deactivate.bat + +:END +CD %prev_dir% + +ECHO Done. Check %prev_dir%\..\dist +IF %do_zip%=="true" ECHO Done. Check %release_dir% + +PAUSE diff --git a/src/clsTableWidget.py b/src/clsTableWidget.py index 2058bcc..46b1001 100644 --- a/src/clsTableWidget.py +++ b/src/clsTableWidget.py @@ -20,6 +20,8 @@ from PySide2.QtGui import QIcon, QColor, QPalette from PySide2.QtUiTools import QUiLoader # local imports +import icons_rc +import clsTableWidget_icons_rc from utils import resource_path, convert_uom_to_length, convert_uom_to_mass # local globals @@ -30,15 +32,15 @@ DEFAULT_UOM_MASS = None UI_DLG_UOM = "./ui/dlg_uom.ui" -ICON_CLEAR = SCRIPT_PATH + "./img/icons8-clear-symbol-16.png" -ICON_COPY = SCRIPT_PATH + "./img/icons8-copy-16.png" -ICON_ERASER = SCRIPT_PATH + "/img/icons8-eraser-16.png" -ICON_INSERT = SCRIPT_PATH + "/img/icons8-insert-clip-16.png" -ICON_APPEND = SCRIPT_PATH + "/img/icons8-append-clip-16.png" -ICON_PASTE = SCRIPT_PATH + "/img/icons8-paste-16.png" -ICON_CUT = SCRIPT_PATH + "/img/icons8-scissors-16.png" -ICON_ADD_ROW = SCRIPT_PATH + "/img/icons8-add-row-16.png" -ICON_DEL = SCRIPT_PATH + "/img/icons8-delete-16.png" +# ICON_CLEAR = SCRIPT_PATH + "./img/icons8-clear-symbol-16.png" +# ICON_COPY = SCRIPT_PATH + "./img/icons8-copy-16.png" +# ICON_ERASER = SCRIPT_PATH + "/img/icons8-eraser-16.png" +# ICON_INSERT = SCRIPT_PATH + "/img/icons8-insert-clip-16.png" +# ICON_APPEND = SCRIPT_PATH + "/img/icons8-append-clip-16.png" +# ICON_PASTE = SCRIPT_PATH + "/img/icons8-paste-16.png" +# ICON_CUT = SCRIPT_PATH + "/img/icons8-scissors-16.png" +# ICON_ADD_ROW = SCRIPT_PATH + "/img/icons8-add-row-16.png" +# ICON_DEL = SCRIPT_PATH + "/img/icons8-delete-16.png" # def resource_path(relative_path): # """ Get absolute path to resource, works for dev and for PyInstaller """ @@ -93,11 +95,11 @@ class TableWidget(QTableWidget): def on_context_menu(self, position): menu = QMenu() - item_cut = menu.addAction(QIcon(ICON_CUT), QCoreApplication.translate("TableWidget", "Cut") + "\tCtrl+X") - item_copy = menu.addAction(QIcon(ICON_COPY), QCoreApplication.translate("TableWidget", "Copy") + "\tCtrl+C") - item_paste = menu.addAction(QIcon(ICON_PASTE), QCoreApplication.translate("TableWidget", "Paste") + "\tCtrl+V") + item_cut = menu.addAction(QIcon(u":ICONS/ICON_CUT"), QCoreApplication.translate("TableWidget", "Cut") + "\tCtrl+X") + item_copy = menu.addAction(QIcon(u":ICONS/ICON_COPY"), QCoreApplication.translate("TableWidget", "Copy") + "\tCtrl+C") + item_paste = menu.addAction(QIcon(u":ICONS/ICON_PASTE"), QCoreApplication.translate("TableWidget", "Paste") + "\tCtrl+V") menu.addSeparator() - item_delete = menu.addAction(QIcon(ICON_ERASER), QCoreApplication.translate("TableWidget", "Delete") + "\tDel") + item_delete = menu.addAction(QIcon(u":ICONS/ICON_ERASER"), QCoreApplication.translate("TableWidget", "Delete") + "\tDel") ac = menu.exec_(self.mapToGlobal(position)) @@ -112,15 +114,15 @@ class TableWidget(QTableWidget): def on_rowheadercontext_menu(self, position): menu = QMenu() - row_cut = menu.addAction(QIcon(ICON_CUT), QCoreApplication.translate("TableWidget", "Cut row")) - row_copy = menu.addAction(QIcon(ICON_COPY), QCoreApplication.translate("TableWidget", "Copy row")) - row_paste = menu.addAction(QIcon(ICON_PASTE), QCoreApplication.translate("TableWidget", "Paste row")) + row_cut = menu.addAction(QIcon(u":ICONS/ICON_CUT"), QCoreApplication.translate("TableWidget", "Cut row")) + row_copy = menu.addAction(QIcon(u":ICONS/ICON_COPY"), QCoreApplication.translate("TableWidget", "Copy row")) + row_paste = menu.addAction(QIcon(u":ICONS/ICON_PASTE"), QCoreApplication.translate("TableWidget", "Paste row")) menu.addSeparator() - row_insert_before = menu.addAction(QIcon(ICON_INSERT), QCoreApplication.translate("TableWidget", "Insert row before")) - row_insert_after = menu.addAction(QIcon(ICON_APPEND), QCoreApplication.translate("TableWidget", "Insert row after")) + row_insert_before = menu.addAction(QIcon(u":ICONS/ICON_INSERT"), QCoreApplication.translate("TableWidget", "Insert row before")) + row_insert_after = menu.addAction(QIcon(u":ICONS/ICON_APPEND"), QCoreApplication.translate("TableWidget", "Insert row after")) menu.addSeparator() - row_remove = menu.addAction(QIcon(ICON_DEL), QCoreApplication.translate("TableWidget", "Remove row")) - row_delete_items = menu.addAction(QIcon(ICON_ERASER), QCoreApplication.translate("TableWidget", "Delete items")) + row_remove = menu.addAction(QIcon(u":ICONS/ICON_DEL"), QCoreApplication.translate("TableWidget", "Remove row")) + row_delete_items = menu.addAction(QIcon(u":ICONS/ICON_ERASER"), QCoreApplication.translate("TableWidget", "Delete items")) ac = menu.exec_(self.mapToGlobal(position)) row = self.vertHeader.logicalIndexAt(position) @@ -220,6 +222,7 @@ class TableWidget(QTableWidget): ui_file.open(QFile.ReadOnly) self.dlg = loader.load(ui_file, self) ui_file.close() + self.retranslateUi_dlg(self.dlg) self.dlg.uom_type = uom_type if uom_type == "UOM_TYPE_MASS": @@ -241,7 +244,7 @@ class TableWidget(QTableWidget): self.dlg.cmbUOM.currentIndexChanged.connect(self.on_cmbUOM_itemChanged) - if self.dlg.exec() == QDialog.Accepted: + if self.dlg.exec_() == QDialog.Accepted: if not item: item = QTableWidgetItem("Dummy") self.setItem(self.currentRow(), self.currentColumn(), item) @@ -380,3 +383,8 @@ class TableWidget(QTableWidget): self.parent.is_modified = False # set parents modification flag (if present) except AttributeError: pass + + def retranslateUi_dlg(self, dlg): + dlg.setWindowTitle(QCoreApplication.translate("TableWidget","UOM")) + dlg.lblValue.setText(QCoreApplication.translate("TableWidget","Value") + ":") + dlg.lblUOM.setText(QCoreApplication.translate("TableWidget","UOM") + ":") diff --git a/src/clsTableWidget_icons_rc.py b/src/clsTableWidget_icons_rc.py new file mode 100644 index 0000000..9b51636 --- /dev/null +++ b/src/clsTableWidget_icons_rc.py @@ -0,0 +1,438 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 5.15.2 +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x01\xd5\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x01\x8aIDAT8\x8d\xbd\x92MK\ +\x02Q\x14\x86\xdf{g&\x0d\x11\x83\xc2,0\x84V\ +m*Z\x04\xf5\x17\x82\xa8\x8d\xfb\xc0\xa5FHn\x03\ +\x83\x16\x85\xe0\xa2\xd6\xd9o\x886A\xfb@h\x91\xd1\ +\x22*\x91\x16\x96E\x1f~\x8c\xce43\xe7\xb6\x98\xb4\ +r\xec\x8b\xa0wu\xef9\xefy\xce\x81s\x80?\x8a\ +\xb5\x07R+\xbb1\xc8l\xb4\xa3\xdb\x14\xb9\xe5\xd5\xd9\ +\xcd\xf7!\xb9\xddc\xf5\xf5\xc4\xcd\xa9\xc9P\xa7z\xf9\ +0[\x00\xf0\x01\xc0\x1d#I\x0e\xe6\x979\x07\xe0\xb7\ +r \x09\xc2\x85\xb3s\xfb\xdd\xe3\xb3\xbb<\x95\xdfr\ +\xdf\x01P\xad\x01\x5c\xaa\x03\x00\xaf\xaa\xce\xdc\xbf*\xbd\ +\x94\x09\xa5\x972\x1d7\xd2\x94\xbc\x11\xdb\x19\x0e\x0c\x0f\ +\x1c+\x1e\xb7\x04\x00 \x08\xadR[_H\xcc$\xc9\ +B\xe0\xd5W\xd8N\xed%\xbb\xbd\xde\x04\xb8};\x86\ +\xaaY7\x97\xd7c2\x13\x22\xe8\x1f\x19\xf2\xf8\x06{\ +[\xd4\xd3\xbd\xec\x04\x00\x90\x80\xbb\x19#\x03\xe3\xa1\xe9\ +\x91\xee\xe6\xbf\x5c\xbcG\xe9\xa2\x18\x94\x01\xa0\xaa\xea\xb0\ +\xca\xf5\x16@S\xb5\xc7T43\x07\xb2\xd7\x9c\x8af\ +\xe64U{|x\xe7\xa9\xab:\x80/\xee\x80+\x9e\ +}\xc6\xd9<\xe3l\x9e+\x9e\xfdO}\x8c\xc8$\x93\ +\xa85\xaaE\xe0\x920\xe2\xe9pCa\x95\x88\xc2*\ +\x91x:\xdc\xe0\x920\xc8j\xd9@&\x11#2\xe5\ +\x9a\xdf\x9b\xbd;\xc9o\xdd\xe6\xf2\xfd6Q\xe8\xcf\x86\ +\xb9\x06\x00\x8b\x9b\x8bz\xb3@\xd7\xcd\xb5\xab\x83\xa3.\ +\x12\xcc\x05\x00L\xa0T\xf3{\xb3\x9fM\xf6c\xbd\x00\ +\xd6\xec\x9b#t\xa1Ts\x00\x00\x00\x00IEND\ +\xaeB`\x82\ +\x00\x00\x02d\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x02\x19IDAT8\x8d}\x90=h\ +SQ\x18\x86\x9fs\xce\xbd7\xf7'i\x8c\xb9M+\ +\xb6\x85\x14\xf1\xa7N.\x1dD\x10\x15Q\x10\xd1\xc1Q\ +\x0a\xeeN\xaeE\xc8R\x17AG\x9d\x1c:)\x08*\ +\xea\xe0\xe4\xe6*\xa2\xa4\x82\x85\x16\x9a*\xcdO\xff\xf2\ +\xdf\xe4\xde\xe3\x10n\xb06\xe9;\x1d\xde\xef\xe5\xf9\xbe\ +\xf3\x0a\x06(\x97\xcb\xc9\xd3n\xf6\x89\xeb\xaa\xf3\x00\x8d\ +F\xf0\xe5gc\xe5A.\x97\x0b\xff\xcf\x8a\xe8\xf1b\ +~q)\x990\xc7\x00\xaa\x8dN\xe2\xea-\xd7\xa8\x94\ +\x03\x04p\xd4W|z\xd7\xec&]\xa3\x0a\xb0\xbb\xdb\ +\xd9\xb8\xf7h\xee\x0c\x80\x11\x01\xbc\x18\xb6\x9fV\xa9r\ +\xdd\xe0\x98/\xf03\x12?#\xfb\x9b\x8eO\x99F\xad\ +f\xa5|\xafKw\xaf\xb3\x13\xf9}\x00@\xb1\xaa8\ +r\xfb\x06[\xf9\x15^}\xde\xf9w\x84=\x9e$5\ +\x93\xa5\xf8\xf6\xc3>\x7f\x1f Rj&;\xc8\x06 \ +\x9dq(\xd5\xea\x87\x03\xaa\xdf\x96p[\xdb\x07|%\ +\x05\x01&\xa3'''\x17\x17^/\xcf\xcd\xdf91\ +\x10\x10\xb6\xda\x5c\xbe>E\xf9O\xad\xefy#q\xb4\ +\x0eh\xb7\x14a\xd0T\x02\x1d\x07\x90\x83\x00\x91\x84\xb2\ +\x11R!\xa4B\x13\xa0L\x870h#\x90\x98\x96\x95\ +\x1c\xfa\x85H\xfe\xb8\x0d\xd8\xa0A\x1a6:\xecb\xdb\ +\x1e\x865\xc2r~sx\x07\x91\x8a\x85m~\xe5+\ +\x08\x04\xb6\x1bc\x22\x1b\xa7\xb0\xdad\xf6\xd2H?s\ +\x08@ \x95\x01\x1a\x84T4\xeb\x0d\x0a\xab\x92\xd9+\ +gA\xaa~jh\x07RY 4\x8e\xe7`Z!\ +\x8e\xe7\x22\x10\x94\xd6\xb7 \x0c\x08\xc3\xb03\xf4\x02%\ +@\x87]\xa4\xe1\xa0\x83\x0a1\xc7\xe6\xdc\x85S\xfd\xb9\ +\xee\xb6\xd8k\xb56\x0f\x002\x89\x80\xf2\xfb\x8f\x98\xa6\ +\x814\xa6I\xfbm\xd2\x17\xa7QV\xbc\x9f)\xfd\xde\ +\x22\xff}\x9d\x8db#\xbe\x0f\xd0hS/\x97z\xd4\ +\xed \x96\xd0\xbak\x22%\xca\xf0\x00\xdd\xdb\xac5?\ +\xbe\xae\xb1\xe3e4V\xf5Y\xaf\xa9\x01z\xf9\xf8\xcd\ +\xd3\xb1\x89\xc4M\xdbuG\x85\x14\xbd%\x1a\xda\xadf\ +\xa5\xb0\xb6\xeb\xe8\x98\xf3\xfc\xee\xfdk\x0f\x01\xfe\x02\xe3\ +\x0e\xb5\xdf\xd6\x99o.\x00\x00\x00\x00IEND\xae\ +B`\x82\ +\x00\x00\x01\xfa\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x01\xafIDAT8\x8d\xc5R\xcfK\ +TQ\x18=\xdf\xbd\xef]\xe71\xea@0N!E\ +\x0d\x8c\xb61\x91\x86)h\x86\x96m\xa3\xbf\xc06b\ +`\xb8qm\xedZ\xb4\x10\x5c\xb8\xf2\x07\xd6\xcaV5\ +-[E\x8b@p3\x8b\x01\xb1!\x8a,\x8b\x08r\ +\x12\xdf{\xf7\xc7\xe7Bft|\x83\xee\xec\xc0\x07\xf7\ +\x9e\xef|\xe7\xbb\x1c.\xf0\xbfA'\x89W\xd3\xcbS\ +\xbd\xbe|&\x05{\xa7N2\xf1_\xe3\x9et\x88\x16\ +\x1f\xaf\x96\xb2\xca\xce\x8e\x05\xae\xf7\xac\xcd\xcc\x0e\xd5]\ +.\x88\x1617\xf1\xf2\xd2\x05\xcf\xae\xde\x90:k\xe3\ +\x18\xdc\xa7\xe0\xc8\xc1\xc6q\xbb\x90\x0d\xdag\xa75\x1c\ +\xc8\x09\x00x:\xbe\x92\x1a\x08\xf4\x9b\xb2\xd2\xd7\xdb\x1b\ +\xfe\x85\xe8\xb9[\x00\x05\x0a\x00\xe0\x0d\xe7@\x99 \xf1\ +\x12\xc1`\xba\x96\xe1\xb5JJ\x17\xe5\xb1D82\x88\ +\xdeoA\x95\xf3\xf0G\x07A\x9e\x80\xa9\xef$\x0d\x96\ +\xa6\x97\x1e\x95z\xcc\xbd4%\x03\xe5\xc8\xc0\xfdl\xc2\ +\x1b\x1a\x80i\xfc\xee\x9a\x850,\xdf}\xd6r\xbb[\ +\xd3\x1b\xce\x01\x00\xc2\xd75\xa8;yP\xe0'\x0d&\ +\xe7\x1fn}\xd3\x98\xaa\x1b\xf1\xfdxC\x0ef@\xbe\ +\x84\xaem\x83\xb5E\xfc\xa1\x01\xbft5a \x01\xe0\ +\xedz\xf5S\xf9\xe6}\xea\x93\xb8\xd5/8\x05\x00\xdc\ +\x8c\xe0~5\x8f\x94\xd6\xc1~\xf9\xd31\xbci\xe4\x86\ +l]\xaa\xeb\xd5\x8f\xb7\x8b\x0f\x0a)r#\x96I\x80\ +\x08\x06\x84\xa6#\xec\xf3a\x9d\xe4\xbeZ\xb1\xd1\xf1\x91\ +\x82\x1f\xe9\x89\xcd\x8b\xbb\x95\xbc\x0e\x0b\x96-\x00 \xa2\ +\xa3l-s\x9bs (\xe5\xa9D\xf2\xcfg^\xa4\ +/\x87\xd1\x82\x03]\xe9\x16l\x0b$\x10\xee\xd9`\xf2\ +4\xcd\xf9\xe0\x00\x19\x1e\xad\x82\xce'*\x04\x00\x00\x00\ +\x00IEND\xaeB`\x82\ +\x00\x00\x02\x97\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x02LIDAT8\x8deR\xcfK\ +TQ\x14\xfe\xeey\xf7\xbd7o\xc6_3\x8e/u\ +\x04\x13\x91\x84\x82Z$-\x5c\x14i\x22(\xb4\x8a \ +Z\xf5'\x18T\x7f@\x08\x06\xb6\x0d\x82hY+5\ +\xd7\x96-\x84\x16I \x82\xa0\x85\x0e\xa3\xf93\x19\xad\ +\xa9\xe9\xbd7\xf7\x9e\x16\xd3\xbc\xdek\xce\xea\xdes\xcf\ +w\xbe\xef;\xe7\x0aD\x82\xc1\xe2\xf9\xe4\xecC\xb0\xd9\ +\x1b\xcd[N\x22\xad\x89\x83\x93\xc2\xce\x83\xfbO\xefm\ +G\xdfd\x14\xfcrjn\xbe\xc5\xe1\xb1\xcc\xf8\x88\xa8\ +\xe5M\x12H\xd9\x84r\xb9\x82\xf5\x99E\x02p;\xda\ +\x80B\xf0\x937sW\x87\xe4Xk\x9b\x11\x07[\x04\ +/`8\x8e\x84!\x8df\xfc\x17\x02\x00\x9e=\x9ey\ +\xd4\x9a\x11\x93\xd9,\x89\xe2\x09\xa1ix\x04\xfa\xfb\x0f\ +T\xb6\xf2\xd0\x1a Q-\xdc_+\x1c65\xca\x05\ +V\xf4\xe9\xd6\xc4\xf8th\x81\xd9\xe8O\x8f\x8e\x0a\x05\ +\xa0\x09\x80:.\xc2\xfc\xb2\x8c\xa4i\xe2\xcaP_U\ +\xaat\x80\xe1\x0e\x97\xa4s\xe7\xfd\xfc\xca\x0d\x00\xd3\xa1\ +\x85h\xa8\xe3\x22\xe4\xe7\x8f\x18\x1c\xf4\xab\x12I\xc2\xb0\ +\x9b\x01\xd6 \xe9\x80\x95\x0fh\xae\xc4f\x10\xf5|\xb8\ +\xb0\x84\xa4\x1d`\xf9\x03\x90\xc9:\x10d\x81u\x00\x92\ +\x0e\xb4\xf2 \xec\x06\xd8\xc9d\xb6n\x0b\xb5\x81\xe5\xfa\ +\x5c\x5c\xbe\xde\xf5O64\x88\x12\xd0\xca\x03XCh\ +\x0d\xd6J\xc5\x1aX\xb6\xdd\x9c\xb2\xab\xd3\xae\xad\xe0\xf8\ + \xc0\xc6j\x01\x82$\xac\x04\xa1\xbb7\x8d\xed\xad\x12\ +\x06\xae\xf5\xc5,S\x95IX^\xc0\xb0\xa5\x08\x99\x05\ +\x09$\x92\x0e,[\x00Z\xe3\xe0k\xb9\x0e\x1c*\xd0\ +\x8a\xcb'k\x9bhl\xcf@\x92\x01\xb0\x86\xdb\x95E\ +[G#\x18\x1a\x86L\xd5\x01c\x0d\x88X\xbb\xe7\xcf\ +\x82\xa4\x81\xd2&\x83\xa4\x83\x83\xc2\x116V\xf7 \xc8\ +\x0c\x8b\xcf]\xcc\xc1\xcd\xb5@U*\xe5X\x83\xa3\xfc\ +\xce\xc4\xca\xab\xb7R\x982\xdd\xdf\x9d\x1ad\xe5\x99m\ +\xb9\x06\xb4w_\xaac\xd4\x952\x02\xdf;\xad\xdd\xc5\ +\xff\x05\x8b\xaf\xdf\xedg;\xd3g\x840\x00\x00ng\ +\xf5\xf7\x1e\xee\x9e\x82\xb5\x0f\xad|\x1c\xed\x96\xf2\xc3w\ +GzB\x051\x06\x0d\xbe0\xd0S\xc7\xdc\xeaZP\ +\x7f\x95\xef\x15\xd6\xfd\x98\x85h\xec\xe5\x8bS\xb3/\x96\ +nFsJ\xb1\xfa\xf5\xd3\xfbV\xbb\xff.\xf9\x0b\xb5\ +\xf3\x1f\xb8\x9f\xd9\x00\xfb\x98vj\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +\x00\x00\x01\xbf\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x01tIDAT8\x8d\xedQ\xbdK\ +Bq\x14=\xbf\x9f\xef=\xf3\xf9\xcc\x0f\xb2!Ql\ +\xc8\xc00\xa3\xa9\xa1\xa5!\xe8\x7fh\x11Z\xda\x9b\xda\ +\x9a\x0a\x82\x9a\x1aZ\xa2\xa1\xb1?\xa0hM\x84\x06\x95\ +\x14\xedK\x02\x1b\xca\xaf\xb4\xe7\x17\xfa~\xfa^\x83\x88\ +\x95ZAkg;\x97s\xcf\xbd\xf7\x5c\xe0\x1f\xe4`\ +\xf7<\xc9\xdbLR\xb7P\xa9\xb1\x8aJ\xa8\xe9W\xcd\ +\xe5j\x85\xd3\x8fYD~\xdc\xea\x94\xfc\x1e\x00\x80|\ +\x11yf\xb33\x13]\x11\x97\xbcC\xcb;\x8dA\x9c\ +\xbf\x0a\xa7)\x00\x10N\xd7\xb3U\x94\x0f\x04\x80\xc2\xf0\ +\x1d\xa7\x9d]\xc8o6\x1e\x08\x0e\x00x\x9b\xf9sU\ +\x03\xe8}\x02\xedz\x06\x8a\xd6\x06\x8d\x14\x01\xcf< \ +I}\x06t\x90+yH\xa0lM\xa38\xa7\xc0\xb0\ + \xa0\xe8\xaf\x017!\xa0\xc5\xfa\xb4TSU\xa2d\ +_{\xc3\xdd.\xb9]\xcd\xa0i\xef\x9c\xe5\x95F\xa1\ +Q\xa0<\xc5@\x9f\xd2P]\x8e\x9eVS\x09\xd7*\ +\xc9\x87\x8d\x97\xbc\xaf\x1c\xbd\xed\xdc\xc44U\xb17\x0c\ +\x0e\xbd\xd5\xe9\x93\xccp\x8bF0M\xc3\xa5\x92\x85.\ +\x1aK@0\xc4\xba)\x13\xbd\x10\x1f\x98\xde\xf6\xce\xc9\ +YaIZ\x01\x05\x16-v\x04\xdf\xf2\x10S\xcd\x92\ +1\xdcX\xde\xdc\x0b\x84\x7f\xcc@-4\xd7m\xc1z\ +\x9c\x97U\x84r9\x88\xa9fI|dG_\x9b\x01\ +`\xe8\xff\xb6\x02\xc7#\x82K\xb7Jt\x98\x14dv\ +\xba\xb1\xbfv=L\xfb'\xbc\x03\xc6\xc5\x8a\x1b\x0fd\ +\xe3\xa5\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x02\xef\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x02\xa4IDAT8\x8d\xa5\x92Ih\ +\x94Y\x14\x85\xbf\xf7\xfe\xe1UY\xb1\x0bc\x95C\xa8\ +\xc4\xb6\x92\x88!E\x14\xbb\x05Q4\x22\xbd\x13Ap\ +\xe5B!\x88\x04\x04]\xb9\xd0]\x89+\x17\xba\xd6\x14\ +\xc4i\x97\xc6\x16\x14\xc7\x8d8!\x88\xda(\x89\xd8\x1d\ +%\x92D\xd4\xc48\x84T\xd5?\xbc\xfa\x9f\x8bJ*\ +q\xd8yv\x97{\xcf\xb9\xf7\x1e\x8e\xe0'8\xbe\xaf\ +\xb7\xb1!%\xf6\xb8\xae\x95\x8b\xb4\xf94\xe9qu$\ +6t9\x9f\xcf\xeb\xefg\xc5\xdc\xe2\xec\xc1B\xc7\x82\ +\x94\xeak\xc8:\xcdMm\x8e]7_\x10\x060\xfe\ +V3\xd4\x1fN~\x19\xaf\x9c\xdb\x91\xdf}@ \xcc\ +\x0f\x02\x17\x8e\x9c\xde\x95nt\x0b\x1d\xeb\x95\x1a\xb8\xef\ +\x11\x8ciL`H\xc6\x05\xc9\xa56\xb1V\x05\xd2\xf0\ +\xf0f\xf9\xe9\xf8\xb0\xb7\xb6\xbb\xa7;\x04\xb0g6\xa7\ +\x1b\xddB6\xe7\xaa\x87}S\xb4\x17}b3\xd2e\ +\xe0\xa3O\xf4\xaa\xcc\x7f\x998\x1b\xb7%V\xdd\xbf\xcc\ +\x0d`\x0b\x80\x04X\x90R}\x1d\x1b\x94z~m\x8a\ +?Js\xc8s \xbd\x88E/K\x0c\xf5\xfb,o\ +w;\xcf\x1f*l\x06\x90\xc7\xf6\x172\x0dY\xa7\xb9\ +\xff\x9eG{)\x00\xc0n\xaaG(\xbbF\xb6Z\xd2\ + \x05\x0b1\x14\x07\x03~owe\xf27\xf7\x18\x80\ +\x5cV\xef\xecmjs\xec`L\xd76W\xdeO\xa2\ +:[\x11q\x07{\xe5b\x84kAT\xf5-S\x0a\ +\x19\x19\x0c\x89'E3\x80\xb4-\x91K\xc4#\xd0Q\ +m\xa3\xf15\xfe\xedAb[s\x88\xb8\x83~\xfe\xae\ +\xd6KJ\xf82\x16\xe28\x22^\x15\xb0#/\xf8<\ +A\xb5\x9c\x85\xd5\x9cB\xbf\x1aG\xa6\xea\xbey'4\ +\xe0\xc4|\xb0\xb4\x0d \xa7Bs\xe9\xc3\x84\x85\x997\ +K\xb6[\xd2\xd5\xe1\x7fG\x09\xee\xbc\xc4\xdd\xd4\x02\xb2\ +\xfa\xdf{%X\xb2D\xa3}S\x02\x90\xc57\xe1?\ +\xa3\xc3v\xd8\x98\xd5\x0c+\xab\xea\xc1\xd0D\xedl\xe3\ +k\xfc[\xff\x831D\xc0D\xda\xc2u\xa1\x5c\x14\xd7\ +\x01dwOwX\xfal\xfd\x1dS\x86\xe2r\x01J\ +\xa0+\xb3~\x00\xa0#*\x06F36\xb95!O\ +\x9f\xb9\xc1\xe3\x01\xba`:\x89\x06#\xae\x9c8\xf3\xfa\ +\xcfu~S\xdc\xb5\x18y`\xa1G*$\x8cAI\ +C\x90\x10\x14\xb36\xad\xab\x03\x9e\xa5\xb2\x85W\x94\xd4\xd7\x1b\ +\xbc\xb0B]\x18p\xf7\xae\x1bx\x93\x95\x9d\xdb\x0f\xef\ +\xbd8s\xdc\x0f\x99\xbbp\xb4\xf7\xafy\xf3\xc5I\x95\ +\x882R\x0a[\x0a\xa2\xa0L\xb1\x5c\x12\xd7\x1f\x0f\xd0\ +\x95?\xd3\xe5}\xcf\xf9%|\x05\xafW\x0di~8\ +\xff\xf6\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x02\xa0\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x02UIDAT8\x8d\x95\x92\xdfK\ +\x93a\x14\xc7\xbf\xcf\xf3\xbes\xbfu\xb5\xad\xcd\xc0j\ +\xd9\xca\x0a\x9aJ\x17\x82\xe9\x85At\x13]\xcd\x8b.\ +B\xd2Z\xab\x94\x8c\xd0\xff@Q\xaa\x0b)\x0a\xd7+\ +B?Xu\x11H\x10\x94\x18\xc4@\x84\x10-o\xcc\ +r\x08C\x9c\xb6\xe9\x9an\xaf\xef\xbb=OWS7\ +\xb4\xf2\xdc\x9e\xf3\xfd\x9c/\xe7{\x80\xff\xa8\x9e\x0e\xc9\ +|\xff\xc6@\xd9v=\xfa/\xb1\xd4\x19\xf4X\x5cG\ +\x7f\x95\xd4W\xcf\x05z?<\xde\x15\xe0\xc9\x9d\xa0G\ +\xb6\xdbB\xe9\x0aw\x91\xf1\x84\x8b\x88\x95G\xae\x07z\ +\xde\x07\xb6\xce\x08\x7f\xdb\xac\x94\xdaB\x89\xfaZ\x93Z\ +\xa4\x832\xbf\x04k\xc5\x01dEM\xf5\x85S\xe7K\ +\x87>\xbex\xb7#@\xea\x0cz\xd2\xfbl\xa1D]\ +\xad\x09\x84\x00\x84@5\x99!\x8fN\xa0\xa4\xa2\x0c\xcc\ +`8\x9d\x83\x90Bq\x7f\xfb\xe0IUo\x1c[9\ +\xd7`\xa4\x89$\xd8~\xe7f\x93s\xe8'&QZ\ +s\x1c\xa9\x1f\x11\xbe26^%\x14\x8a\xed<\xfb\xb6\ +ZP\x9c\x8b\xe9\x0c\xd6\x1d\x0e`5\x05\x18t\xc89\ +\xc98\x1d\x90\xbfLA\x94e\xd0\x85\xd4\x03\xa1P\x5c\ +\xa7\xcb\xb8\xcd`\xb0%\x13\x88*\x1c\xeb\xc5\xc5 Y\ +\x06\x88\x22@)@\x08\xf4\xd1EU3\x17\xf1\xfb{\ +\xbd\xc3\x02\x00H>\xc9c\x13\xd9\xd0\x19]\xb6<\x17\ +\x8b)\x07\xc9\x12\xc8\x06#\x08\x00\xae\xd5\xc2<\xf9U\ +\xd5\xce\x86[}]\x8d\xfd\x00 H>\xc9\xe3\xd8\xab\ +\x19\xad\x5cK\xd85E\x22\x08\xd9<\x8b\x09\x0c\xd6\xe4\ +oD\x19\x85l\xd9\x03\xd3\xf7\x19U\x1f\x8e\xf8\xafu\ +7nD)\x16\x8b\xecUM\x95MO\x88\x1dk#\ +\xd3\xd0\x9bu\xa0t\x13\xe2\x84\x8a\xfa\xf9Y|\x8e-\ ++T\xcd\xdc\xbc\xda\xed\x95\xb6\xde\x8df(\x86\xc3\x9f\ +f9\xc0al8\x86tR\x06cv7\ +\xab\xebu\x8a0\xf7\xe5\xde\xc5\x02Hb\xc1^\x9aO\ +\x8ek\xben].\x02\x00)$\x86\xef8\x00\x04^\ +\xd0~}\xf71\xee\x04^\xd0n\x16\xdd\x1c#d\x19\ +!\xdb,\xba\xb9\x18\xc1$\xe2\xe6\xec\x89\x92\xfe\x01\x00\ +03\xb5\x15#\xe0\x86\x92\x14\xd1\xc8E\x8a\x08\xdcP\ +\xb2\xe2\xe4{&\xeb\x14L\xd6)T\x9c|/F\x10\ +\x86\x83\xc6\xfd\xd9\xd5\x0c)fi\xcdL\x85}9h\ +\x00@i\xbf\x14NJ<\xb1>\x01\x07g\x8a\x88\x97\ +b:g\x00\x00\x00\x00IEND\xaeB`\x82\ +\x00\x00\x03\x09\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x02\xbeIDAT8\x8d\x8d\x91]H\ +Sq\x18\xc6\xdf\xff\xff\x9c\xb3\xb3\x9ds6u\xf3c\ +\xe1\xb4\x0f\x19\x14\x85\x22\x98\xd0\x85E\x04\xdd\xec\xca0\ +#,M\x0d\x13\xc9\xc2\xe5GTxaA\x91\x8a4\ +Y\xa9A\xf8\x05\x09^\x14R\xd0ET\x17\x19XH\ +_f\x88b\xb3f\xe96\xf6uv\xb6s\xce\x12\xa19UQ \x1e\x15_\xb79N\xcf\xfd\xcd\ +\x0c\x00\x80\x9b\xafU>k\xb8h+\xf2\xbe],4\ +\xccD\x0a\xa3~^`\xd2\xd9\xaf\x8cI\xbf\x0d#\x0c\ +\x14K\x978\x9b\x9c\x5c\xaa\xa50\x00\x00\x02\x94h\x1d\ +:\xe3s\xe7D\xaa[\x9d\xb5cl\x06w]\x8eI\ +\xd2\xcc\xfd\x17O\xcdV\xcbN2\xdb|.\x15\x80\x04\ +\x00p4\x8f\x1bd\x90m-\xfd\xb5\xc3v\xa8\x03Z\ +\xcfl\xe1\xd7\x82\xb3\x91@\xb4C\xf0\xf3\xd3\x08\xe3\xdc\ +\x94\x80\xde\xa6{yRB\xb6\xaaL\xe2Q2\xa7\xcc\ +\x8b\xfe\xac\x1d9\xa5\xb4^\xfb\x10\x08\xac\x11\xf8\xe8\xdd\ +\x94\x11\x14\x02k\x12*\x9a\xef\xb8Y\xcf'E>\x18\ +l\x0fy\x82>\x82\xc0\xaa\xef\xcb\xfa\xd5\x96\xee\xaaw\ +\xa9\x00?\x01\x9b\x11$Z\x9c*\xf5$\x00\x00\x00\x00\ +IEND\xaeB`\x82\ +" + +qt_resource_name = b"\ +\x00\x05\ +\x00M\x843\ +\x00I\ +\x00C\x00O\x00N\x00S\ +\x00\x0b\ +\x03xr\xf4\ +\x00I\ +\x00C\x00O\x00N\x00_\x00I\x00N\x00S\x00E\x00R\x00T\ +\x00\x0a\ +\x04M\xd8\x05\ +\x00I\ +\x00C\x00O\x00N\x00_\x00P\x00A\x00S\x00T\x00E\ +\x00\x0a\ +\x04A\xb9\xe2\ +\x00I\ +\x00C\x00O\x00N\x00_\x00C\x00L\x00E\x00A\x00R\ +\x00\x09\ +\x04D\x1fY\ +\x00I\ +\x00C\x00O\x00N\x00_\x00C\x00O\x00P\x00Y\ +\x00\x0c\ +\x0c:\xcf'\ +\x00I\ +\x00C\x00O\x00N\x00_\x00A\x00D\x00D\x00_\x00R\x00O\x00W\ +\x00\x08\ +\x08D1<\ +\x00I\ +\x00C\x00O\x00N\x00_\x00D\x00E\x00L\ +\x00\x0b\ +\x03=o\x22\ +\x00I\ +\x00C\x00O\x00N\x00_\x00E\x00R\x00A\x00S\x00E\x00R\ +\x00\x0b\ +\x03\xfeB\xa4\ +\x00I\ +\x00C\x00O\x00N\x00_\x00A\x00P\x00P\x00E\x00N\x00D\ +\x00\x08\ +\x08D1\x04\ +\x00I\ +\x00C\x00O\x00N\x00_\x00C\x00U\x00T\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\xac\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x90\ +\x00\x00\x01zS6^R\ +\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01zS7uY\ +\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x104\ +\x00\x00\x01zS7W\xda\ +\x00\x00\x00F\x00\x00\x00\x00\x00\x01\x00\x00\x04A\ +\x00\x00\x01zS6\x81\xb2\ +\x00\x00\x00`\x00\x00\x00\x00\x00\x01\x00\x00\x06?\ +\x00\x00\x01zS4|\xf0\ +\x00\x00\x00,\x00\x00\x00\x00\x00\x01\x00\x00\x01\xd9\ +\x00\x00\x01zS4\x9c\xfb\ +\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x11\xd8\ +\x00\x00\x01zS5\xa2\x1a\ +\x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x9d\ +\x00\x00\x01zS<\x13\xb8\ +\x00\x00\x00x\x00\x00\x00\x00\x00\x01\x00\x00\x08\xda\ +\x00\x00\x01zS7\x10Z\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/src/icons_rc.py b/src/icons_rc.py new file mode 100644 index 0000000..e4e28dd --- /dev/null +++ b/src/icons_rc.py @@ -0,0 +1,485 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 5.15.2 +# WARNING! All changes made in this file will be lost! + +from PySide2 import QtCore + +qt_resource_data = b"\ +\x00\x00\x02\xcd\ +\x00\ +\x00\x10\xbex\x9c\xed\x96]O\xd3P\x18\xc7\x8f\xf1\x0b\ +x\xe55\x97~\x0c?\x10\x10\x89\x82\xc4\xa8\xf8\x82H\ +D\xca\xc6X\xf6\xc2\xba\x96u\x08-\x03\x95\x898\xa6\ +\xb8\xe1\x02\x0eXB$F\x19/\x09/\x91\x18I\xe0\ +F'0\xf8{\xceY\x98\xb0\xce\xad\x1b\xa3za\x97\ +\x7fO\xf3\x9c\xe7\xf9\xff\x9e\x9e\xf6\xa4#\xe4\x1c\xfdU\ +U\x11v&\xfd\x17\x08\xb9H\x08\xb9DEC\xe42\ +\xc9\xc4\xff\xd5C\xaa\x16\x92Ru;\xfe\x8e\x84\xe4\xef\ +>\xda\x11UlYI5\xedp\xb5=\xe6b\xd7\xc7\ +\xe7\x8c\xa8P=c\xe9\xd7A\x9f\xe3\x14\xda\xb8r\xe7\ +\x0c\xf1\x0b\xd4\x1b\xe5WR\xe5\xf0\x1d\xf3?*\xa2\xd3\ +\xf0\xfd\x0f|\xd9{P\xe8u1V\xbe|\xa3\xfcI\ +\xd5\x9d\x15\xafO\xa6\xf8\xf8u:\x88\xe4\xe8\x00\xe4+\ +\x16\x1e\x93\x1b]\xba\xf5\x95\xeb\xedP\x16\xbe\xf3\x1c\x96\ +\xcbj\xb8\xc7b\xc6#\xd7;\x1f\x7ffH\xce\xcaw\ +\xad\x13\x83\x9fw\xa0Z\x07\xd0{\xcb\x8d\xbe\xce\x00\xb4\ +\xd0\x07\x0c\xad\xef\x16\x14\xcba\xb9\xacF\xb5\x06\x10X\ +\xd8\xe1^\xc7\xbd\x8d\xf0\xb5\xfbn\xf4\xbf\x9c+\xca+\ +\xa6\xfe\xd19h\xcd\xae\x92\xf9\xe3n7\x94;^\xa8\ +\xe1\x8fP\x1e\xfa!\xd5Z\x0c\xbf\xebrm\x07\x86Z\ +\xbc\x18~\x95\x80\xd2$r\xafR\xf93\x832z\x1b\ +\xbb\xf0\xac\xd9\x8d\xd5\xa9\x18R\xabq\xec\xae\x84\xb1\xb7\ +:\x01l/\x02;+t\x5c\xc2\xde\xda\x04\xdetz\ +\x10\x12$\x8cY\xfd\x88\xb8T\xec\x7fKbcz\x12\ +\xc1V/\xf5\xb0q\xaf\x92\xf9T\xaf\xed\xdd\x88\xfb|\ +Ho\xcer^z3\x91\xb7\x87\xd4J\x14\x9f\x82\x1a\ +\x16B#Ho-e\xe2T\xb3\xda0F;\x9c:\ +_\xa3\xfc\x09\xc9\x83\xe1\x16\x07g\x16\xebao\xed\xdd\ +\x89<\xa6`\xab\x88\xa8\xb7\xbbl\xfe{M\x82Rg\ +\xc1\xcf\xe5p\xc9=\x1cn/\xf3Z\xe6Q.\x9f\xef\ +\x83\x9b6\xacG\x9fr\xdf\x13=|I@\xa5\xcf\xb6\ +\xaf\xc1\x8a\x83\xad\xa4\xae\x87\x8d\xa90\x06n\xdb\xf3z\ +\x96\xc2\x1fwuC\xbd\xd1\xc5{H-\x8d\xe5\xac\xc3\ +\xacn\x1d\x0e\xb6\x16\xb1\x1e\x1b\xa156\xdd{_\x0e\ +\x9f)\x22z\xa159\xe8\xbe\x12\x8a\xee\xbd\x1e\x9a3\ +x\xd7\x85\xb7\xb4\xe6O~\xa5\xf2+\xad\xff\xfc\xfc|\ +3\x95\x8f\x7f\xdao\x8dQU\x82\xaf\xd2\xef\xec\xd1\xbd\ +\xa8\xa1y\xd3\xf9\x95\xba\x7f\xf9\xba\xf8B\xaa\xee84\ +\xfb\xf93\xa6\xdc(\x06\xa5\x1a\xe1\xc0c\x89\xc0c\x8b\ +\x99+\xcadl\xfe\x7f\xc19\x05OW\x0cR\x9d\x9d\ +\xcf\x89\xf7\x02\x5c\xec\xfaLb\x94\xc5\x98Gk\xd1\xd7\ +\x93\xe0\x92\xaf:\xf8\xe8\x7f\xf4\x9c\xeb,cL\x19\xbe\ +\x90~\xe2\x8dgc\xa6I\x8cs\xb6\xaf\xc1\xe9g\xa3\ +\xf9\xef\x9f\x90\x96\xeb\x9d\xfe\xdc}h\xf6\x01z\xb01\ +B\xc8\xf9\xb3R!\xf6/K\x03R\xae\ +\x00\x00\x03\x06\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\ +\x00\x00\x00\x06bKGD\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x02\xbbIDATX\x85\xed\x96MH\ +TQ\x14\xc7\xffw\xde{\xf3\x1c\x99\x9cQ\x89\xacQ\ +H#\xb1\x8dA\xd0\xa6(Z\x88\x8bV}\x80\x18A\ +`-\xda\x88\x8bhhQ\x0bi\x13H\x13-j\x11\ +DJ\xb9h\x13T`\x0b\xc9\x08\x22%\xda\xb8I\xa1\ +\x01E\x19t>\x9cy\xce\xe7\xfb\xba\xef\x9d\x16\xe5\x90\ +\xf9&Q\xe7\xd5\xc6\xff\xee\x9c{8\xff\xdf\xbd\xe7\xdd\ +\xcb\x03v\xf5\x9f\xc5\x1e\xf4\x0f\xdf\x03\xe8&\x81\x89N\ +\x05\x1e\x86\x12\x81\x9e\xe6\x1a\xfd\xe1\xc1\xc1\x1e\xc3\x05\x80\ +g\xe6\xc9c5\xa2(0\xc7\x02\xd3$\xcc\xcc\xf1l\ +\xa1\xc4\xa73A\x7fw\xb5!<\x04V\xd1\x1c\x00$\ +\x89\xa1\xb3]\x0a\xd4\xfb\xc5\xd3\xfbK\xea\xcc\xe8\xe0h\ +s5\x01X\xa4\x7f\x98\xce\x1c\xaf\xd9\xb4\x90\x880\x1f\ +\xe3XJ\xda\x16\xb7I\xd8\x92\x09\x88\x83\xd8\xd0\x8d\xc7\ +}\xb7\xff\x5cs\x9c\xbbc\x13\xc6\xd0\xd6\x22\xa1\xad\x05\ +[2\x07\x00\xce!~\x9e\xd6\xc3\x006\x00x\xb6\xda\ +l;\x12E\x80\x88$\xa7\xb5\x7f\x02\xf07U\x1c\x81\ +\xaa\xd9\xf8\xbe,@I\xab\x00U\xc7,\xd2?\x5c\xee\ +$y\x05\xdd2\xe8|E\x80\xa5\xac\x17\xedG\x9bq\ +\xa2\xbb\x03\xccS\xf9\x96lW\xdf\xbe.\xc8S\xefg\ +\xef8\x03\x10\x90L\xaa\xe8\xea\x09\x82\x1bJ\xd5\xcd\x01\ +`%\x9e\xb2\x8ay\xfd\x93\xe37PP\x09\xb2,\xc2\ +\x1f\x90]1\x07\x80\xc5\xa8R\xe0\x86=\xe1\x08\x90+\ +\x12B\x87\x82\xae\x99sn#\x9d*\xf9\xc8'L:\ +\x02\xe4U\x86\xe6\xd6z\xd7\x00\x96\x17r\x90$!\x1a\ +\xbe\x7f\xa5\xb8\x11\x80\x80L\x96#t0\xe0\x1a@l\ +^\xb1,\xd3\x1e\x03\x1c\xde\x81\xa2F\xf0\xca\x22\xf6\x04\ +7\x7f\x9e\xb7\xab\x85h&oY\xf6\x84#@\xb6`\ +#\xd4\xe6\xde\xf1s\xd3F:Y\xaa5}\xd6\x94#\ +@^\x13\xd0\xd2\xea\xde\xf1\xc7c?\xe7\x7fk\xe8Z\ +~#\x00\x01\xca\xaa\x89P\xab{7 6\xb7jq\ +N\xef\xd6\xe2u\x0fQQ#h\x9a\x85\x91\xc8\x97\x1d\ +\x1b\x05\xebe\xf4^?\x82\x97Of\xb1\xaa\xe8\xe5x\ +1\x9a\xd2\xb8iN8\x02\xe4\x8a\xc0\xe1\x0e?Nu\ +5\xee\x18\x00\x00\x8c\x82\x82\x0b\x97\x9b\xca\xb1\x9a\xcd \ +\x9d\xd0j\xacZ\x9a\x5c\xcb\xad\x1bA\xc1`h\x0a\xc9\ +\x18\x7f\x9bD6c\x22\xb1\xa4\xe3\xe3\xf8\x0a\x00T%\ +\x97J\xe8\xf0\xfa\x84\xd8\xda\xfc\xd7\x03\x10\x90\xce\x98\xd8\ +w@\x86\xa6Z\xf0\xd7\x89\xc8fM4\xee\xf5\x02@\ +Ur\xf1\x98\x01n\xd0\xeb\xdf7\xcd\x1e\x0e\x8c\xa4;\ +\xdb\xa5\x06\xdd \xc4s\x1e\x9c\xebm\x82\x1b\xd25\x1b\ +c\xaf\x12VF\xd1\xbb\xc3\x8f\xae~(\x03D\x06\x9e\ +\x9f\x15`\xbf\xb0ljp\xc5\xf9\x97\x04\x81\xd9u\x01\ +\xef\x9b\xbe\xbb\x97.2\xb0*\xfda\xecjWU\xd0\ +\x0f\xde\xf6\x5c(\x8d\x8f\x0c\x87\x00\x00\x00\x00IEN\ +D\xaeB`\x82\ +\x00\x00\x03s\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\ +\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\ +\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\ +\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\ +\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x01\x0e\ +PLTEGpL\x90r\xa4\x8el\x9f\x8em\xa0\ +\x91q\xa3\x8el\xa0\x8en\xa1\x99f\x99\x93s\xa3\x93\ +t\xa3\x80\x80\xaa\x93s\xa2\xac\x92\xb1\xad\x93\xb1\x92t\ +\xa2\x8el\x9e\x94u\xa4\xad\x92\xb1\x93s\xa3\x92s\xa1\ +\xaa\x8f\xb0\x93s\xa3\x92m\x92\x94t\xa3\x95t\xa4\x93\ +r\xa3\xab\x8f\xaf\x94r\xa2\x93s\xa2\x93t\xa2\x8em\ +\x9f\x8em\xa1\x96\x7f\xaa\x8fm\xa0\x95\x80\xab\x8dl\x9f\ +\xbe\xc7\xe2\xc2\xcd\xe7\xc4\xce\xe8\xcc\xd8\xec\xc8\xd3\xea\xce\ +\xd9\xed\xc6\xce\xe6\xc3\xcf\xe8\xcd\xd7\xec\xcb\xd6\xeb\xc3\xcd\ +\xe7\xc6\xd0\xe8\xd6\xdd\xed\xc8\xd2\xe8\xe4\xe9\xf1\xeb\xef\xf3\ +\xd7\xdf\xee\xd3\xda\xec\xe4\xea\xf2\xd0\xd9\xed\xd2\xda\xed\xca\ +\xd6\xec\xc2\xce\xe7\xf5\xea\xdb\xf8\xec\xdd\xf7\xeb\xdc\x92s\ +\xa4\xd0\xbd\xc6\xfa\xef\xde\xcb\xd6\xec\x92u\xa4\xd1\xbd\xc6\ +\xcd\xd5\xea\xc3\xce\xe8\xe0\xe6\xf0\xd3\xdc\xed\xc5\xcf\xe8\xe2\ +\xe8\xf2\xcf\xd9\xed\x97{\xaa\xb1\xa9\xcb\xac\xa5\xc9\x95z\ +\xaa\xab\xa3\xc8\xc1\xcb\xe1\x93x\xa7\xb4\xc0\xd8\xa2\x9a\xbf\ +\xb2\xbd\xd7\x93w\xa7\xb9\xc5\xde\xaa\xb1\xcc\xac\xb7\xd0\xff\ +\xff\xff\x0b\x1c\x81T\x00\x00\x00#tRNS\x00\x8f\ +\xfc\xfd\x8e\xfc\xfb\x05\xb6\xb6\x06\xb8\xf4\xf5\xbba\xf9\xf5\ +\xba\xb8\xf5\xbf\x07\xb7\xb6\xb9\xf5\xbe\xba\xb5\xfd\xfc\xb1\xfe\ +\xb0c\xd5%\x08\x00\x00\x00\x01bKGDY\x9a\xb2\ +\xf4\x18\x00\x00\x00\x07tIME\x07\xe4\x01\x07\x007\ +\x14kk\x96t\x00\x00\x013IDAT8\xcb\xad\ +\x93W[\xc20\x18\x85\xab\xa8A\xa5\xee\xbd1\xa65\ +\xb6\xee\x8dUP\x01QAPP\xfc\xff\xbf\xc4|\x19\ +5\xa3wz.rs\xde\x9co\xe4\x89\xe7\xfd\x83\x06\ +\x06\xb1\xa5\xdc\x90\x01\x0c\xef\x10\xa9 \x0c\x03\xb2K\xe9\ +\xde\x88\x01`\xe5Gq\x1c\x81\xbf\x7f\x803\x81_?\ +r\x81\xc3#\xdd\x8f\x1d\xe0\xf8\xe4\xf4L\xf3\xa9\x9bp\ +~q\xa9\xf9\x19@t\xa5\xfb.\xa0\xd7\xa7\x02@\xf9\ +\xd1\xb1\x14P\xf3_\x97\x82\x90\x0a\x00\x8d\x17\xfc\x09I\ +`\xfb>eSLN\xdd$\xd33\x82\xc0\x8e\xcf\xf6\ +\x80f\xe7n\x13\x7f~A\x00\xc2\xbf\xb3^\xa4\x5c\x91\ +\x19\x98\xd7\xbf/\xe1\x8a\xa3\xc4_\xe4M\xca\xfdf\x01\ +K\x00\xc8\xfa\x0fV\x89GVb\x19\x01\x00\xf9r>\ +6.\x08\x9a\x5caM\xae\x8a&\xf5\xfe\x89\x04\xf8\x98\ +\xfc>\x03\x0c\xbfZ\x95\x09\x05\x7f\x0d\xc9E\xe9\xf9\xb5\ +z\xbd\x06\x80\x87\xd6\xf3\xc8K7I\xe9\x93\xcao4\ +x\x82\xf1X\xe0?\xbf\xa8\xfa\xc4\x05 \xde\xf0\xb3\x00\ +\xc3w\x80W\xdal\x917\xd2n\xab\xc3\x02:\xef\x1f\ +\xddn\xef\xb3\x97\x1e_&\xb0\xd1\xff\xb6\xd4\xdf4\x80\ +\xad\xa2\xfd\xf5\x8a\xdb\x7f\xfa\xcb\x96~\x00\xc4Fm\x1c\ +q\x94\x90\xba\x00\x00\x00%tEXtdate\ +:create\x002019-11-\ +14T21:30:38+00:0\ +0-z\x13x\x00\x00\x00%tEXtdat\ +e:modify\x002019-07\ +-15T18:11:24+00:\ +00M\xa4\x9d&\x00\x00\x00\x00IEND\xaeB\ +`\x82\ +\x00\x00\x03\xe2\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\ +\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\ +\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\ +\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\ +\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x01G\ +PLTEGpL\x80\x80\xaa\x92t\xa3\x91q\xa2\ +\x8em\xa0\x8fn\x9e\x91r\xa2\xa4\x90\xb4\x8fn\xa0\x99\ +f\x99\x92q\xa1\xa3\x8d\xb4\x92r\xa2\xa4\x90\xb5\x90p\ +\xa1\x94k\xa1\x8em\xa0\x8cn\xa0\x8aj\x9f\x84\x8b\xa5\ +\x8dm\xa0\x90o\x9b\x85\x8a\xa4\x8cn\xa0\x92m\x92\x8c\ +r\xa0\x8cl\xa1\x8bp\xa0\x8dk\x9f\x8fm\x9f\x83\x8b\ +\xa4\x8dn\xa0\xa1\x84\xae\x8fn\xa0\x87\x8d\xa5\x8cm\xa0\ +\x8fp\xa3\x8cq\xa1\x8dl\x9f\xfa\xef\xde\xfc\xf2\xe5\xff\ +\xf7\xee\xfb\xf1\xe1\xff\xf7\xf0\xfd\xf4\xe9\xf3\xe7\xdd\xbb\xdb\ +\xf6\xff\xf7\xef\xfb\xf0\xe2\xfb\xf1\xe2\xff\xf6\xef\xbb\xde\xf9\ +\xfc\xf6\xed\xfc\xf3\xe8\xbb\xdc\xf7\xb8\xd5\xf2\x8fo\xa2\xfe\ +\xfd\xfa\xff\xfb\xf7\xfc\xf4\xe7\x8fn\xa1\xb8\xa9\xc1\xff\xf8\ +\xf1\xfb\xf1\xe3\xfe\xfc\xf8\xff\xfd\xfc\xff\xf8\xf3\xfc\xf3\xe6\ +\xff\xfd\xfb\xff\xf8\xf2\x9e\x7f\xa9\x9e\x80\xab\x9d\x7f\xa9\xff\ +\xf6\xf0\x9d\x7f\xa8\xd7\xc6\xd3\xf5\xea\xe4\xf8\xec\xdd\xdb\xca\ +\xcc\x9b\x82\xa9\xda\xca\xcc\xf3\xe8\xe2\x90r\xa1\x8fq\xa1\ +\x8fu\xa2}\xa4\xa8\xbb\xa4\xb9\x89\x8f\xa7t\xc5\xaes\ +\xc4\xaer\xca\xaf\xff\xf9\xf4\xf5\xeb\xe4\x91s\xa2u\xbd\ +\xadv\xbc\xac\xff\xf7\xf1\xff\xfc\xf9t\xc6\xae|\xa4\xa9\ +\xce\xbb\xcd\xcd\xba\xc9\xcb\xb7\xc3\xf7\xec\xdd\xf7\xed\xea\xf1\ +\xe4\xd9\x90q\xa1s\xc6\xae\xff\xff\xff\xb9p\xe8\xbe\x00\ +\x00\x00&tRNS\x00\x06\x96\xf6\xfb\x86\xb7\xf7\xfc\ +\x05\xb6\xf7\x96\xf7\xf6\x13\xfe\xf6\x18\xf4\x93\x17\xf4\xf9\x07\ +\xf6I\xdcJ\xfd\xf5\xf6\xa0\xfd\xfa\x94\x19\xdb\xae+\xb7\ +l\x00\x00\x00\x01bKGDl\xcc\x010;\x00\x00\ +\x00\x07tIME\x07\xe4\x01\x07\x007\x14kk\x96\ +t\x00\x00\x01fIDAT8\xcb\x8d\x93\xe9W\x82\ +@\x14\xc5\xb1}'*#\xccl\x9fA\xa1\xc5h\xdf\ +\xcc\xca(\xcb\xa5\xd4\x04*\xb3\xd46\xff\xff\xef\xc10\ +\xc8\x0c\xe89\xdes\xe0\x03\xf7\xf7\xde\xbbo8\xc30\ +\xdd*\xd0\xd3\x0b(\xf5\xf5\xd3\xfe\xc0 \x80Hb4\ +&J\x92\x0c7\x86H\x7fxdt\xd3\x06\xc4\xadm\ +\xe4\xc7w\x80\xc7W\x00\xedK\xc0\xe3[\xc0\xee\x9e\xeb\ +\x93\xc0\xd8\xf8\xbe\xa2\x1c\x1c\xc2\xd8\xd11\xf2\xe3'\xa6\ +O\x02\x13V\xea\xd33(\x9e#?q\x91\xbc\xa4\x01\ +'?\xee\x7fu\x9dL\xb5\x03\xdc|)\xab\x81\x0f \ +\xf2\xdb\xf2\x007\xce\x09\xaa\x92j>>\xc0W\xef\x01\ +\xc4\xe8-p[\xf8\x816\xf5\x92L\x02\xf8\xff\xc4\xef\ +\x08\x1f\x92\x80Y\xaf\x02j\x86\x0c)\xa0M=\x0d\x98\ +_\xd2N\xfd\xbd\xe9?d\xb2\xb9<`\x09\x80\xce\xf7\ +\xf8T(\x96\x8a\x93\xdcT\x0b\xf0\xf8\xcfeM7t\ +mz&\xd8:\x074\xff\xc5\xf6_\xdf\xca\x15\xc3\xd2\ +\xfb,\x87\xa7\x00T_\xfd\xa8\xa2|\x99\x82f\xd8\xfa\ +\xe4\xe70@\xe5\xcf\x16u\x0chB\xa8\xb5\x05\xb1_\ +\xaed8\xaa\xcd;\x80*\xd5\xeb\xd6\xab\x01\xd30O\ +t\x08{\x80\xc6\x97\x09|\xfb3,\xfc\xb8\xe7\x07\xe1\ +\xef\x1f\xde\xa2\x12Y\xc4[,-\xd3\xb7\x0e\xac45\ +CoFV\xd7:\xdc\xd3 \xc7\x0b5\x81\xe7:\xf9\ +\x0c\xc3\x06B\xeb\xe1\x00\xcbt\xa3\x7f\x90\xb4\x83\xa9\xe1\ +\xcf\xeb\xaf\x00\x00\x00%tEXtdate:\ +create\x002019-11-1\ +4T21:30:38+00:00\ +-z\x13x\x00\x00\x00%tEXtdate\ +:modify\x002019-07-\ +15T18:11:24+00:0\ +0M\xa4\x9d&\x00\x00\x00\x00IEND\xaeB`\ +\x82\ +\x00\x00\x03G\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\ +\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\ +\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\ +\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\ +\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x01\x1a\ +PLTEGpL\x90r\xa4\x8el\x9f\x8fo\xa1\ +\x91r\xa5\x80\x80\xaa\x8el\xa0\x9a\x85\xb2\x8eo\xa2\x9c\ +\x87\xb3\x8eq\xa1\x92m\x92\x8dn\xa1\x91q\xa3\x91r\ +\xa3\x8dl\x9f\xbe\xc7\xe2\xc2\xcd\xe7\xbb\xde\xf9\xc2\xe1\xfa\ +\xc9\xe4\xfb\xbc\xdf\xf9\xd7\xec\xfe\xde\xf0\xff\xd9\xed\xfe\xbd\ +\xdf\xf9\xc4\xe3\xfb\xde\xef\xff\xbe\xc5\xe1\xbe\xdf\xf9\xcd\xe7\ +\xfc\xd1\xe9\xfd\xdd\xef\xff\xc1\xe1\xfa\xbf\xe0\xfa\xdb\xee\xff\ +\xb4\xab\xca\x91q\xa1\xb5\xab\xca\xc1\xcb\xe5\xbc\xde\xf9\xce\ +\xe8\xfc\xc9\xe6\xfb\xc7\xe4\xfb\xd7\xed\xfe\x90o\xa0\xee\xd9\ +\x9c\x90p\xa1\xcb\xe7\xfc\xc0\xe0\xfa\xc3\xe2\xfa\xff\xeb\x9b\ +\xd6\xec\xfe\xc0\xcb\xe6\xda\xee\xfe\xd5\xeb\xfd\xbb\xdf\xf9\xca\ +\xe6\xfc\xbd\xc4\xe1\xd6\xeb\xfe\xbe\xe0\xf9\xc3\xe3\xfa\x8fo\ +\xa1\xd0\xe8\xfd\xc2\xe2\xfa\xbe\xe0\xfa\xda\xef\xfe\x91r\xa2\ +\xa6\xa4\xc7\x8fn\xa1\xd8\xe6\xf8\xd7\xeb\xfe\xd1\xea\xfd\xb8\ +\xd5\xf2\x8eo\xa2\xaa\x9f\xc5\x8en\xa1\xa6\x9c\xc2\xa8\x9c\ +\xc2\x8fn\xa0\xa9\x9c\xc2\xf2\xe6\xd9\xfa\xef\xde\xf2\xe5\xd9\ +\xed\xa3\xa1\xeb\x96\x97\x9d\x7f\xa8\xcb\xb7\xc3\xf2\xe0\xc8\x9c\ +{\xa4\xef\xd8\xbe\xc5\xaa\xb1\xbf\xc6\xe2\xff\xff\xffSw\ +\x1fW\x00\x00\x00\x0ftRNS\x00\x8f\xfc\xf6\x96\x06\ +\xfc\xf1\xb7\xf2\xbc\x07\xfb\x8e\x8d\xdc\x9b\x9e\xcf\x00\x00\x00\ +\x01bKGD]\x9d\xdf0\x01\x00\x00\x00\x07tI\ +ME\x07\xe4\x01\x07\x007\x14kk\x96t\x00\x00\x01\ +\x0fIDAT8\xcb\xbd\xd3\xd9R\xc20\x14\x06`\ +\x14,\xee\xc7D\xf0W\xdcjU,*\xb8#n\xe0\ +\x86\xbbVk\x15,\xbc\xffs\xd8t\x1cI\x9b\x5c\xb8\ +\xcc\xf0_d2'\xdf\x9c\xc92I$\xba\x92\x9e^\ +R\x92L\xf5u\x801\xc6\x18q>\x9e\xc9N`r\ +*7\x0d\x80f\xd2\xfd\x1dAL\x80\xd99>\x0fs\ +\xc1Z\x5cZ\xce\x83\xd8\xca\xc0\xe0P\x04\xd8\x05{\x15\ +X\xb3\xd7Q,m\x04@\x16!\xd8\xdc\xda6Q\x08\ +\x9a\x80vhW\x94\xf6\xd2)\x19\xe4\xac2\xf6+\x07\ +\x08\x81%J\xec0)\x83\xca\x11\xca\xc7'b\x83\xc5\ +R\x95\x87\x80\x91\x0cj0O\xcf\xce\x83u\xe4/.\ +5\xa0~\x85L\xf6Z\xac\xe3\x86\xf3\xdb;\x05\xdc\xd7\ +\xe5kzxT\x806\xbf\x02ON\xf4-\x9c\xe7\x18\ +p^\xdcH^\xab\xf1c\xba\xb1\x90\x0a\xbc\xb70^\ +0\xf1\xb4\xe0\xa7\x1dD\x0f\xf7o\x1d\xfe\x0d\xde\xddF\ +C\x1a\x14\xd0\xfc\xf0[-\xff{h*\xc0\x8fE\x06\ +F[\x0f\xda\xc3_`\xc4 m\x8c\xd1\xee|\xdcO\ +b\xe8h\xa5Q\xd4)\x01\x00\x00\x00%tEXt\ +date:create\x002019\ +-11-14T21:30:38+\ +00:00-z\x13x\x00\x00\x00%tEX\ +tdate:modify\x00201\ +9-07-15T18:11:24\ ++00:00M\xa4\x9d&\x00\x00\x00\x00IE\ +ND\xaeB`\x82\ +\x00\x00\x02\xbb\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\ +\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\ +\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\ +\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\ +\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\xc3\ +PLTEGpL\xff\x00\xff\x8cq\x9f\x8br\x9f\ +\x8cn\x9f\x8at\x9f\x8bn\x9f\x89t\xa1\x87~\xa2\x8a\ +t\x9f\x8dm\x9d\x8au\xa0\x8el\x9f\x8dk\x9f\x82\x92\ +\xa5\x82\x91\xa5\x8cl\x9e|\x8a\x9e{\x8a\x9e\x8aq\x9f\ +\x8bq\xa0\x8cp\x9e\x84z\x9e\x85z\x9e\x8bo\x9f\x8c\ +n\x9e\x8ao\xa0\x8dl\x9f\x8cl\x9f\x8br\xa0\x8cq\ +\xa0\x8cn\xa0\x8cn\x9f}\xa1\xa8\x8bk\x9e\x8cr\xa1\ +\x8cs\x9f\x8bp\xa0\x8dq\xa0\x8cp\xa0\x8co\x9f\x8d\ +m\x9f\x8at\xa0\x89v\x9fx\xb5\xabs\xc6\xaes\xc4\ +\xaer\xca\xaf]\xbc\x9d`\xb6\x9eh\xa9\x9e`\xb8\x9d\ +\x8dl\x9ft\xc4\xaeu\xc3\xaey\xb3\xabu\xbe\xads\ +\xc8\xaf}\xa2\xa8\x8ay\xa1`\xbe\x9fq\x9a\x9e\x86w\ +\x9fa\xb6\x9d\xff\xff\xff\xbe\xa83/\x00\x00\x00,t\ +RNS\x00\x01j\xed\xfd\xecr\x9a\xfc\x98/\xfb-\ +r\xfe\xfeq\xf5\xf4\xf5\xf4\x9b\xf3\xf3\x9ad\xe3\xfco\ +\x8f\x8e\xfb\xee\xfe7\xa8\xd0\xec\xfa\xfa\xef\xfd\x96\x95\xe7\ +\x83\x7fy\x00\x00\x00\x01bKGD@\xfe\xd9\x5c\xd8\ +\x00\x00\x00\x07tIME\x07\xe4\x01\x07\x007\x14k\ +k\x96t\x00\x00\x00\xbdIDAT8\xcb\xed\xd1\xd7\ +\x0e\x820\x14\x80\xe1\xa2\xa8\x08\xee-8X\x8a(R\ +\xc0*C\x90\xf7\x7f+%\x12$\x81\xd6q\xed\x7f\xd1\ +\x9b~\xe9I[\x00\xbe\x89\xaaT\xe9Z\x9d\xc2\x83\x06\ +c\x1c\x0d\xa6\x89\xddg9\x13Bhr-\x1chw\ +`R\xb7\x87\x05}+i\x80\x05\xec\xd0~\xec\xdb#\ +\xec\x080\x9e8'g:#\xdcs\xce\x0b\xfc\x82p\ +MbK\x01\xa5\x09\xabR \x9ca\xdae]\x0a\x10\ +\xccB\xbf\x01Qr=\x9f\x04dE\xddlI 7\ +\xe6\x0f\xde\xbd\xa4\xf6\x04\xdaFU\xe4\x02\xd8\xbd\xfe\xc2\ +\xf7\x5cI,9>\x08\xe05[\x8acP\x18E\xd6\ +\xcdJ\x97\xb0\x08\xf4\xd8\xca\x15\xd3\x05\xb0\xd7Q.\xfd\ +\x00>\xed\x0ehs3\x98p\xeef\x9d\x00\x00\x00%\ +tEXtdate:create\x00\ +2019-11-14T21:30\ +:38+00:00-z\x13x\x00\x00\x00\ +%tEXtdate:modify\ +\x002019-07-21T07:5\ +8:48+00:00=s\x85\xdd\x00\x00\ +\x00\x00IEND\xaeB`\x82\ +\x00\x00\x025\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00\x10\x00\x00\x00\x0c\x08\x03\x00\x00\x00\x5c9\xcd\xb3\ +\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\ +\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\ +\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\ +\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00{\ +PLTE\xff\xff\xff\xb2\xda\xb51\xd0?.\xd0<\ +7\xd2E\xad\xec\xb2\xe1\xf8\xe3\xa6\xeb\xac4\xd1B\x89\ +\xe4\x91U\xd8`\xa0\xe9\xa6\xeb\xfa\xeco\xdeyv\xe0\ +\x7f\xf2\xfc\xf2\x93\xe6\x9a\xe5\xf9\xe6|\xe1\x85\xdb\xf6\xdd\ +\x96\xe7\x9d\xca\xf3\xce\xb0\xed\xb6\xff\xff\xff\xcb\xf3\xce\x7f\ +\xe2\x88\xde\xf7\xe0\xb4\xee\xb9\xc4\xf1\xc8\xba\xef\xbfr\xdf\ +|\xfb\xfe\xfc\xd1\xf4\xd4\xd8\xf6\xda\xf8\xfd\xf9b\xdbl\ +\xb7\xef\xbcR\xd8];\xd3Hb\xdcmh\xddr\x00\ +X\x0c}\x00\x00\x00\x01tRNS\x00@\xe6\xd8f\ +\x00\x00\x00\x01bKGD\x00\x88\x05\x1dH\x00\x00\x00\ +\x09pHYs\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7o\ +\xa8d\x00\x00\x00\x07tIME\x07\xe4\x01\x07\x007\ +\x14kk\x96t\x00\x00\x00qIDAT\x08\xd7]\ +\xce\xd1\x0e\x820\x0c\x05\xd0\xb2\xab\xa0\xa2\xe0\x809`\ +\xc8\x00\x19\xf2\xff_h%3\x994i\x9a{\xda\x87\ +\x12E\x02a\xed3\x88\xf3\xe1\x18\xc7\xc9\x09\xe7\xcb\x06\ +\xdc\xe9\xf5\x96\xe5w\xc8\xe2\x07e\x05$\xea\xa1u\xed\ +\xe1\xbb\xaadp!\x1b\x866\x00e\x80\xee\x19@o\ +\x87qz\xa1\xcbg\x0fpEj\x1d\x96\xb7\x03\x04\xf9\ +\x7f\xcc\xba\x0d\x11\xd1\xdf\x9b\x9c?>\xbe\x06\x7fR \ +a\x1c\x00\x00\x00%tEXtdate:c\ +reate\x002019-11-14\ +T21:30:38+00:00-\ +z\x13x\x00\x00\x00%tEXtdate:\ +modify\x002019-06-1\ +3T12:59:26+00:00\ +\xc7\x190\xe3\x00\x00\x00\x18tEXtSoft\ +ware\x00paint.net 4\ +.1.6\xfdN\x09\xe8\x00\x00\x00\x00IEND\ +\xaeB`\x82\ +\x00\x00\x02\xbf\ +\x89\ +PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\ +\x00\x00 \x00\x00\x00 \x08\x03\x00\x00\x00D\xa4\x8a\xc6\ +\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\ +\x00\x00\x00 cHRM\x00\x00z%\x00\x00\x80\x83\ +\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00u0\x00\x00\xea`\ +\x00\x00:\x98\x00\x00\x17o\x92_\xc5F\x00\x00\x00~\ +PLTE\xff\xff\xff\x80\x80\xaa\x93s\xa2\x8dl\x9f\ +\x8fn\xa0\x8fn\x9e\xa7\x92\xb3\xfa\xef\xde\xfc\xf2\xe6\xff\ +\xf7\xf0\xfb\xf1\xe2\xfd\xf4\xe8\xf3\xe8\xde\x99f\x99\xba\xde\ +\xf9\xff\xfd\xfb\xb2\xdc\xf7\xff\xfa\xf6\xb3\xae\xc7\xff\xff\xff\ +\x85\xcb\xf8\xe7\xf5\xfe\x95\xd2\xf9\xef\xf8\xfe\xbf\xe4\xfb\xda\ +\xef\xfd\xc4\xe6\xfc\x88\xcc\xf8\xed\xf7\xfe\x8cr\xa0\x8co\ +\x9fr\xca\xaf\x86\xcc\xf8\x9b~\xa9\xf7\xec\xdd\x87\x8a\xa4\ +s\xc6\xaes\xc8\xaf|\xa7\xa9\x9f\x81\xac\xcd\xb9\xc8\xf7\ +\xed\xeaP\xc6\x9ah\x00\x00\x00\x01tRNS\x00@\ +\xe6\xd8f\x00\x00\x00\x01bKGD\x00\x88\x05\x1dH\ +\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x00\x07tIME\x07\xe4\x01\ +\x07\x007\x14kk\x96t\x00\x00\x01\x1cIDAT\ +8\xcb\xad\xd3\xedn\x83 \x18\x05`\x15\x06E7\xa4\ +\x15\xf1\x93Yu\xb6\xee\xfeo\xb0\x80\x9d\x02cK\x96\ +\xec\xfcP\x93\xf3\xc8\x8bQ\xa3\xe8\xbf\x12'\x09p\x02\ +_\xbc\x1e\x01lr\x22\xe9\x89\x90\x0c\xbfB\xbb\x7fK\ +\x10\x05N\x9f\x12\xe0\xf5\x06\xa4Go\x03\xd3k@\xf2\ +\xadOUo\x03\xd33\x88qv\xde\xee\xcf\xcf\x1e0\ +\xbb\xbe\xec\xf3I\x91\xbb\xc0\xdb\x7fJ\xf4\x02\xdf\x81\xb5\ +?\xe2\x83p,\xc0C\xf9+(\x85(9\xa5\x9c\x8b\ +\xaa\xa8D\x00\xd4MS\xf3\xb6U\x17-oi\x00t\ +}\xd5\x19\xc0\xca\x9a\x85FtU\xbf\x01\xce\xdaR\x09\ +\x09\xc0{x\x04U#ju\xff0\x00\x074BT\ +\x9c\x16E\xaf6\xd9\x8b\x00P\xb9:\x0f\x19\x00\xfcg\ +\xe0ed\x17\xa6A\x0c\xe2'\xf8z?:\x19\xc6\x13\ +\x92H\x03)\xe5&\x80\xdbc4\x7f\xcc\x1a\xa8\x93\xf4\ +\x81\xee\x15X\x96\xdb0\xdc\x96e\x07w\xb2\xae\xe6\x80\ +G\xbc\xae\x13\x9c\x97AE\xf5q\x10\xe0\x11i\xb1\xf7\ +\x11\xfc\xb4\xd67\x99\xf4\x94\xbd\x8f\xee0\xf0=\xcdG\ +\x1f\xfeW\xe5\xef\xfd\x91\x07\x10E&Q3\xe4w@\ +\x00\x00\x00%tEXtdate:cre\ +ate\x002019-11-14T2\ +1:30:38+00:00-z\x13\ +x\x00\x00\x00%tEXtdate:mo\ +dify\x002019-08-15T\ +00:24:44+00:00p\x93\ +\x9d1\x00\x00\x00\x00IEND\xaeB`\x82\ +" + +qt_resource_name = b"\ +\x00\x05\ +\x00M\x843\ +\x00I\ +\x00C\x00O\x00N\x00S\ +\x00\x08\ +\x08D?\xf0\ +\x00I\ +\x00C\x00O\x00N\x00_\x00A\x00P\x00P\ +\x00\x09\ +\x04D\xdf\x9e\ +\x00I\ +\x00C\x00O\x00N\x00_\x00O\x00P\x00E\x00N\ +\x00\x09\ +\x04D\xf2\xe4\ +\x00I\ +\x00C\x00O\x00N\x00_\x00Q\x00U\x00I\x00T\ +\x00\x08\ +\x08DK\x07\ +\x00I\ +\x00C\x00O\x00N\x00_\x00N\x00E\x00W\ +\x00\x09\ +\x04D\xed\xa5\ +\x00I\ +\x00C\x00O\x00N\x00_\x00S\x00A\x00V\x00E\ +\x00\x0a\ +\x04<\xc4$\ +\x00I\ +\x00C\x00O\x00N\x00_\x00A\x00B\x00O\x00U\x00T\ +\x00\x0c\ +\x0fT\x9b?\ +\x00I\ +\x00C\x00O\x00N\x00_\x00Q\x00T\x00_\x00L\x00O\x00G\x00O\ +\x00\x0b\ +\x036\x5c\xf4\ +\x00I\ +\x00C\x00O\x00N\x00_\x00E\x00X\x00P\x00O\x00R\x00T\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x08\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x15{\ +\x00\x00\x01o}\x7f\xb8\xc0\ +\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x10\x83\ +\x00\x00\x01o}\x7f\xb8\xc0\ +\x00\x00\x00&\x00\x00\x00\x00\x00\x01\x00\x00\x02\xd1\ +\x00\x00\x01zJ.\xae4\ +\x00\x00\x00l\x00\x00\x00\x00\x00\x01\x00\x00\x0d8\ +\x00\x00\x01o}\x7f\xb8\xc0\ +\x00\x00\x00>\x00\x00\x00\x00\x00\x01\x00\x00\x05\xdb\ +\x00\x00\x01o}\x7f\xb8\xc0\ +\x00\x00\x00\x10\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01zJ\xa3d\xd2\ +\x00\x00\x00V\x00\x00\x00\x00\x00\x01\x00\x00\x09R\ +\x00\x00\x01o}\x7f\xb8\xc0\ +\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x13B\ +\x00\x00\x01o}\x7f\xb8\xc0\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/src/img/icons.qrc b/src/img/icons.qrc new file mode 100644 index 0000000..82f0653 --- /dev/null +++ b/src/img/icons.qrc @@ -0,0 +1,13 @@ + + + icons8-clear-symbol-16.png + icons8-copy-16.png + icons8-eraser-16.png + icons8-insert-clip-16.png + icons8-append-clip-16.png + icons8-paste-16.png + icons8-scissors-16.png + icons8-add-row-16.png + icons8-delete-16.png + + diff --git a/src/main.py b/src/main.py index 5e9d4f4..5b53dff 100644 --- a/src/main.py +++ b/src/main.py @@ -15,13 +15,14 @@ import configparser # Third party imports from PySide2.QtWidgets import QApplication, QMainWindow, QTableWidgetItem, QStatusBar, QFileDialog, \ - QAbstractItemView, QMenu, QMessageBox, QHBoxLayout, QVBoxLayout, QAction, QActionGroup, QSizePolicy + QAbstractItemView, QMenu, QMessageBox, QHBoxLayout, QVBoxLayout, QSizePolicy, QAction, QActionGroup from PySide2.QtGui import QIcon, QColor from PySide2.QtCore import QFile, QSize, Qt, QCoreApplication, QTranslator from PySide2.QtUiTools import QUiLoader import xlsxwriter # Local imports +import icons_rc from utils import show_about, resource_path, str_iff, fit_col_widths, convert_uom_to_length, convert_uom_to_mass, \ optimizeTableLayout, table_has_items @@ -29,7 +30,7 @@ from utils import show_about, resource_path, str_iff, fit_col_widths, convert_uo from clsTableWidget import TableWidget # Local globals -APP_VERSION = "v0.7" +APP_VERSION = "v0.7.2" DIR_CURRENT = os.getcwd() @@ -42,17 +43,7 @@ APP_WEBSITE = "https://gitlab.com/ProfP303" APP_DESKTOPFILENAME = APP_DISPNAME APP_INI_FILE = os.path.join(DIR_CURRENT, APP_DISPNAME + '.ini') -APP_ICON = "./img/icons8-garage-32.ico" - -ICON_NEW = "./img/icons8-new-file-32.png" -ICON_OPEN = "./img/icons8-opened-folder-32.png" -ICON_SAVE = "./img/icons8-save-32.png" -ICON_EXPORT = "./img/icons8-export-xls-32.png" -ICON_ABOUT = "./img/icons8-information-32.png" -ICON_QUIT = "./img/system-shutdown.png" -ICON_QT_LOGO = "./img/qt_logo_small.png" - -UI_MAIN = "./ui/main.ui" +UI_MAIN = "./ui/win_main.ui" DEFAULT_GARAGE_LENGTH = "6" DEFAULT_GARAGE_WIDTH = "2,5" @@ -115,7 +106,7 @@ def main(): qApp.description = APP_DESCR qApp.copyright = APP_COPYRIGHT qApp.website = APP_WEBSITE - qApp.setWindowIcon(QIcon(resource_path(APP_ICON))) + qApp.setWindowIcon(QIcon(u":ICONS/ICON_APP")) qApp.setDesktopFileName(APP_DESKTOPFILENAME) print("Current dir:", DIR_CURRENT) @@ -257,13 +248,27 @@ class MainWindow(QMainWindow): self.ui.lblVol_Free.setText(QCoreApplication.translate("main","Free space in the garage") + ":") self.ui.lblWeight.setText(QCoreApplication.translate("main","Total weight") + ":") - # Tooltips - self.actionNew.setToolTip(QCoreApplication.translate("main","New (Ctrl+N)")) - self.actionOpen.setToolTip(QCoreApplication.translate("main","Open... (Ctrl+O)")) - self.actionSave.setToolTip(QCoreApplication.translate("main","Save (Ctrl+S)")) - self.actionExport.setToolTip(QCoreApplication.translate("main","Export to EXCEL...")) - self.actionAbout.setToolTip(QCoreApplication.translate("main","Information about the application")) - self.actionQuit.setToolTip(QCoreApplication.translate("main","Quit the application (Strg+Q)")) + # Translate actions + self.ui.actionNew.setText(QCoreApplication.translate("main","New")) + self.ui.actionNew.setToolTip(QCoreApplication.translate("main","New")) + + self.ui.actionOpen.setText(QCoreApplication.translate("main","Open") + "...") + self.ui.actionOpen.setToolTip(QCoreApplication.translate("main","Open") + "...") + + self.ui.actionSave.setText(QCoreApplication.translate("main","Save")) + self.ui.actionSave.setToolTip(QCoreApplication.translate("main","Save")) + + self.ui.actionExport.setText(QCoreApplication.translate("main","Export to EXCEL...")) + self.ui.actionExport.setToolTip(QCoreApplication.translate("main","Export to EXCEL...")) + + self.ui.actionAbout_Qt.setText(QCoreApplication.translate("main","About Qt")) + self.ui.actionAbout_Qt.setToolTip(QCoreApplication.translate("main","About Qt")) + + self.ui.actionAbout.setText(QCoreApplication.translate("main","Information about the application")) + self.ui.actionAbout.setToolTip(QCoreApplication.translate("main","Information about the application")) + + self.ui.actionQuit.setText(QCoreApplication.translate("main","Quit")) + self.ui.actionQuit.setToolTip(QCoreApplication.translate("main","Quit")) def load_ui(self): global TableWidget @@ -290,42 +295,26 @@ class MainWindow(QMainWindow): layoutGb.addWidget(self.ui.tableStuff) def create_actions(self): - self.actionNew = QAction(QIcon(resource_path(ICON_NEW)), "&New") - self.actionNew.triggered.connect(self.file_new) - self.actionNew.setShortcut("Ctrl+N") - - self.actionOpen = QAction(QIcon(resource_path(ICON_OPEN)), "&Open...") - self.actionOpen.triggered.connect(self.file_open) - self.actionOpen.setShortcut("Ctrl+O") - - self.actionSave = QAction(QIcon(resource_path(ICON_SAVE)), "&Save") - self.actionSave.triggered.connect(self.file_save) - self.actionSave.setShortcut("Ctrl+S") - - self.actionExport = QAction(QIcon(resource_path(ICON_EXPORT)), "Export to EXCEL...") - self.actionExport.triggered.connect(self.file_export) - - self.actionAbout_Qt = QAction(QIcon(resource_path(ICON_QT_LOGO)), "About Qt") - self.actionAbout_Qt.triggered.connect(QApplication.aboutQt) - - self.actionAbout = QAction(QIcon(resource_path(ICON_ABOUT)), "About " + qApp.applicationDisplayName()) global APP_INI_FILE - self.actionAbout.triggered.connect(lambda: show_about(APP_INI_FILE, self.opened_file)) - self.actionQuit = QAction(QIcon(resource_path(ICON_QUIT)), "Quit") - self.actionQuit.triggered.connect(self.quit_app) - self.actionQuit.setShortcut("Ctrl+Q") + self.ui.actionNew.triggered.connect(self.file_new) + self.ui.actionOpen.triggered.connect(self.file_open) + self.ui.actionSave.triggered.connect(self.file_save) + self.ui.actionExport.triggered.connect(self.file_export) + self.ui.actionAbout_Qt.triggered.connect(QApplication.aboutQt) + self.ui.actionAbout.triggered.connect(lambda: show_about(APP_INI_FILE, self.opened_file)) + self.ui.actionQuit.triggered.connect(self.quit_app) def create_menu(self, language=None, uom_length=None, uom_mass=None): menuMain = self.menuBar() menuFile = menuMain.addMenu(QCoreApplication.translate("main", "&File")) - menuFile_New = menuFile.addAction(self.actionNew) - menuFile_Open = menuFile.addAction(self.actionOpen) - menuFile_Save = menuFile.addAction(self.actionSave) + menuFile_New = menuFile.addAction(self.ui.actionNew) + menuFile_Open = menuFile.addAction(self.ui.actionOpen) + menuFile_Save = menuFile.addAction(self.ui.actionSave) menuFile.addSeparator() - menuFile.addAction(self.actionExport) + menuFile.addAction(self.ui.actionExport) menuFile.addSeparator() - menuFile.addAction(self.actionQuit) + menuFile.addAction(self.ui.actionQuit) self.menuSettings = menuMain.addMenu(QCoreApplication.translate("main", "&Settings")) @@ -380,8 +369,8 @@ class MainWindow(QMainWindow): [action.setChecked(True) for action in self.menuSettings_UOMs_Mass.actions() if action.text()==uom_mass] self.menuHelp = menuMain.addMenu(QCoreApplication.translate("main", "Help")) - self.menuHelp_About_Qt = self.menuHelp.addAction(self.actionAbout_Qt) - self.menuHelp_About = self.menuHelp.addAction(self.actionAbout) + self.menuHelp_About_Qt = self.menuHelp.addAction(self.ui.actionAbout_Qt) + self.menuHelp_About = self.menuHelp.addAction(self.ui.actionAbout) def create_statusbar(self): self.statusBar = QStatusBar() @@ -391,15 +380,15 @@ class MainWindow(QMainWindow): # Main Toolbar (for all pages/views) self.toolbar = self.addToolBar('Main Toolbar') self.toolbar.setIconSize(QSize(32, 32)) - self.toolbar.addAction(self.actionNew) - self.toolbar.addAction(self.actionOpen) - self.toolbar.addAction(self.actionSave) + self.toolbar.addAction(self.ui.actionNew) + self.toolbar.addAction(self.ui.actionOpen) + self.toolbar.addAction(self.ui.actionSave) self.toolbar.addSeparator() - self.toolbar.addAction(self.actionExport) + self.toolbar.addAction(self.ui.actionExport) self.toolbar.addSeparator() - self.toolbar.addAction(self.actionAbout) + self.toolbar.addAction(self.ui.actionAbout) self.toolbar.addSeparator() - self.toolbar.addAction(self.actionQuit) + self.toolbar.addAction(self.ui.actionQuit) def set_defaults(self): tblGarage = self.ui.tableGarage diff --git a/src/utils.py b/src/utils.py index 2e91950..0062a81 100644 --- a/src/utils.py +++ b/src/utils.py @@ -10,17 +10,18 @@ import sys import os # Third party imports -from PySide2.QtWidgets import QMessageBox, QApplication, QMainWindow, QTableWidgetItem, QStatusBar, QAction +from PySide2.QtWidgets import QMessageBox, QApplication, QMainWindow, QTableWidgetItem, QStatusBar from PySide2 import QtCore from PySide2.QtGui import QIcon, QPixmap from PySide2.QtCore import QFile, QSize, Qt from PySide2.QtUiTools import QUiLoader # local globals -APP_ICON = "./img/icons8-garage-32.ico" - STD_COL_WIDTH: int = 7 +# local imports +import icons_rc + def resource_path(relative_path): """ Get absolute path to resource, works for dev and for PyInstaller """ try: @@ -37,7 +38,7 @@ def show_about(ini_file="", opened_file=""): qApp = QApplication.instance() msg = QMessageBox() - msg.setIconPixmap(QPixmap(resource_path(APP_ICON))) + msg.setIconPixmap(QPixmap(u":ICONS/ICON_APP")) text = "

" + qApp.applicationDisplayName() + " " + \ "
" + qApp.applicationVersion() + "

" + \ diff --git a/ui/dlg_uom.ui b/ui/dlg_uom.ui index 711d806..bffa0be 100644 --- a/ui/dlg_uom.ui +++ b/ui/dlg_uom.ui @@ -11,13 +11,13 @@ - Dialog + UOM - + Value: @@ -31,7 +31,7 @@ - + UOM: diff --git a/ui/main.ui b/ui/win_main.ui similarity index 70% rename from ui/main.ui rename to ui/win_main.ui index c4c02e8..9eeaba9 100644 --- a/ui/main.ui +++ b/ui/win_main.ui @@ -116,7 +116,7 @@ true - + @@ -267,7 +267,99 @@ + + + + :/ICONS/ICON_NEW:/ICONS/ICON_NEW + + + &New + + + New + + + Ctrl+N + + + + + + :/ICONS/ICON_OPEN:/ICONS/ICON_OPEN + + + &Open... + + + Open... + + + Ctrl+O + + + + + + :/ICONS/ICON_SAVE:/ICONS/ICON_SAVE + + + &Save + + + Ctrl+S + + + + + + :/ICONS/ICON_EXPORT:/ICONS/ICON_EXPORT + + + Export to EXCEL... + + + Export to EXCEL... + + + + + + :/ICONS/ICON_QT_LOGO:/ICONS/ICON_QT_LOGO + + + About Qt + + + + + + :/ICONS/ICON_ABOUT:/ICONS/ICON_ABOUT + + + Information about the application + + + Information about the application + + + + + + :/ICONS/ICON_QUIT:/ICONS/ICON_QUIT + + + Quit + + + Quit + + + Ctrl+Q + + - + + +