commit 2a189cc6890e56bde4d3dd2c946a0fe26b55eb24 Author: BarsTiger Date: Wed Feb 1 17:03:14 2023 +0200 First files added diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5f13a3b --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/.idea/ +/venv/ +/build/ +/dist/ +/tests/ diff --git a/D0CXUN7R4C3.py b/D0CXUN7R4C3.py new file mode 100644 index 0000000..cf0a067 --- /dev/null +++ b/D0CXUN7R4C3.py @@ -0,0 +1,15 @@ +import sys +from PySide6 import QtWidgets +from gui.gui import Ui_MainWindow +from gui.modules.initialize import setup_ui + + +app = QtWidgets.QApplication(sys.argv) +MainWindow = QtWidgets.QMainWindow() +ui = Ui_MainWindow() +ui.setupUi(MainWindow) +setup_ui.on_load(ui, MainWindow) + +MainWindow.show() + +sys.exit(app.exec()) diff --git a/README.md b/README.md new file mode 100644 index 0000000..e00a363 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +![DOCXunTraceOpenGraph](/gui/img/docxuntraceog.png) + +# DOCXUNTRACE +Ultimate and powerful util to spoof .docx (and other .*x MS Office files) private properties, such as author name, +creation and save date, words, pages and other \ No newline at end of file diff --git a/gui/__init__.py b/gui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gui/gui.py b/gui/gui.py new file mode 100644 index 0000000..a2800c8 --- /dev/null +++ b/gui/gui.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'gui.ui' +## +## Created by: Qt User Interface Compiler version 6.4.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import * # type: ignore +from PySide6.QtGui import * # type: ignore +from PySide6.QtWidgets import * # type: ignore +from . import images_rc + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + MainWindow.resize(800, 460) + icon = QIcon() + icon.addFile(u":/img/img/icon.ico", QSize(), QIcon.Normal, QIcon.Off) + MainWindow.setWindowIcon(icon) + self.centralwidget = QWidget(MainWindow) + self.centralwidget.setObjectName(u"centralwidget") + MainWindow.setCentralWidget(self.centralwidget) + + self.retranslateUi(MainWindow) + + QMetaObject.connectSlotsByName(MainWindow) + # setupUi + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"D0CXUN7R4C3", None)) + # retranslateUi + diff --git a/gui/gui.ui b/gui/gui.ui new file mode 100644 index 0000000..c3bcd61 --- /dev/null +++ b/gui/gui.ui @@ -0,0 +1,26 @@ + + + MainWindow + + + + 0 + 0 + 800 + 460 + + + + D0CXUN7R4C3 + + + + :/img/img/icon.ico:/img/img/icon.ico + + + + + + + + diff --git a/gui/images.qrc b/gui/images.qrc new file mode 100644 index 0000000..e207c73 --- /dev/null +++ b/gui/images.qrc @@ -0,0 +1,5 @@ + + + img/icon.ico + + diff --git a/gui/images_rc.py b/gui/images_rc.py new file mode 100644 index 0000000..445078d --- /dev/null +++ b/gui/images_rc.py @@ -0,0 +1,586 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 6.4.2 +# WARNING! All changes made in this file will be lost! + +from PySide6 import QtCore + +qt_resource_data = b"\ +\x00\x00\x22\x02\ +\x00\ +\x00\x01\x00\x01\x00\x00\x00\x00\x00\x01\x00 \x00\xec!\x00\ +\x00\x16\x00\x00\x00\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\ +\x0dIHDR\x00\x00\x01\x00\x00\x00\x01\x00\x08\x06\x00\ +\x00\x00\x5cr\xa8f\x00\x00!\xb3IDATx\xda\ +\xed\x9dyxdU\x9d\xf7?\xe7\xdeZ\x92J\xaa\xb2\ +vz\xdfYzakzX\x1a\x11h\xa0eq\x01\ +\x01u\x18q\xd4Q\xc7mF\x1d\xe7\xd5\xf7\x1dud\ +\x9c\xf7uy\x1e\xc7Wgt\xf4U\xc6}C\x18g\ +\x04\x05\x05\x91\x16\x11\xe8f\xb3\xe9\xa6\x17\xe8\x85\xde\xb7\ +t\xf6\xa4R\xdb\xbd\xe7\xfd\xa3\xaa+U\xa9J'i\ +\xe8$\x95|?\xcf\xd3KR\xf7V\xdd:\xf7\xfc>\ +\xf7\x9c\xdf9\xf7\x5c\x10B\x08!\x84\x10B\x08!\x84\ +\x10B\x08!\x84\x10B\x08!\x84\x10B\x08!\x84\x10\ +B\x08!\x84\x10B\x08!\x84\x10B\x08!\x84\x10B\ +\x08!\x84\x10B\x08!\x84\x10B\x8c)f\xb2\x7f\xc1\ +\x1fm\xf2Y\xd2l\xf8\xca:\xcb\xba\x83\x96\xe6j\x08\ +\xba:\xf1\x13\xa6\xfa%\x13\xc4w\xef$\x10\x89\xb0\xfe\ +S\x8bU$\x12\xc0+\xc3\x1b~\xe6\xd1Rc\xd8\xde\ +ny\xe4Q\xcb\xff~\x9bS}\xd7V[{F\xa3\ +i1\x86\x86\xc9\xfc\xdd+\xaa\xfe\xa5\x93\xc9\xc4\x81\xfd\ +\x9b\x0f\x1d\xeb\xebmk\xefe\xf7\xb7.U\xa9H\x00\ +'\xcf\xdb~\xe1sf\x93\xe1\xc1]>\xf7\xfd\xb9\xe3\ +\xdcv\x8f]\xf4R\x87\xbd<\x91aMw\x8a\xc5@\ +\xb31\xd4\xe9\xd4O\x8c\xfa\xe7\xc7\xe3}\xec}\xf1\x87\ +\xb3\xe8\xfc|\xaf\x0dw\xa7-\x92\x80\x04pr\xbc\xee\ +N\x9f\x05\xf5\xf0\xb5?\xf8\xbc\xf6l3wg'\xb7\ +\xf5\xa4xS\xdac\x99o\x09\xebtO\xbc\xea\x97\xe9\ +\xeb%\xbe\xeb\xc5\x9e:\x93\xfc\xfa\xbcZ\xefs\xdd)\ +G\x12\x18C\x9c\xc9\xf2En\xba\xdbcF-|\xed\ +\xdaNV,4\x97?\xdf\xca\x1dmq>\x93\xcc\xb0\ +B\xc1?a\xe3\x1f\x00\xcf\x12\xedL;\x1f\xd8\xdb\x17\ +\xf8D,\xe4\xc7\x82\x06\x16\xfc\xf5\x1fU>c\xc0\xa4\ +H\x87\xad\xb8\xc3cN\x14\xbe\xfbz\x87\xff\x9e\x1d~\ +\xe3\x91>\xbe\x9a\xf4\xb8p\xb2|\xbf\xc9+\x00\x83\x9f\ +J\x91\xeah\xc3\xf7m8\xe5\x9bs\x93\xbe\xa9j\xa9\ +\xf6\x9e\xcc\xf8&\x19[\xf9Wt>\xf3\x1d\x95\xd3)\ +dR\xb4\x00\x02\x0e\xac\xdd\x03\xe7|\xcb_\xdd\xda\xc7\ +\x173>\xa7\xe9\xd4V\x1e\x9e%\xda\x99RK@\x02\ +\x18\x05\xd7\xfc\xc4'\xe0\xc0\xe9\x8d\x9c\xd1\x91\xe0\x9f\xd2\ +>\x1aK\x92\x04\xc4T\x11@m\x08\xdez\xb6\x13\xdc\ +\xdb\xcd\xdb\x13\x19.\xd1)\x95\x04\xc4\x14\x11\xc0\xdb\xee\ +\xf1\xd9\xddi\xf9\xf1&{A<\xc5m@@\xa7T\ +\x12\x10SD\x00\xb10\xdc\x7f\xab\xe3\xb6\xf5\xdbk\xd3\ +>su:%\x011\x85\x04\xf0\xd8>\xcb-\xff\xe9\ +\xd7\xc7\xd3\xacF3\xfb$\x011\xb5\x04\x10v\xa1\xbe\ +\xca,\xca\xf8,\xd0\xa9\x94\x04\xc4\x14\x13@_\x1a\x8e\ +\xf4\xda\xc5@\xb3N\xa5$ \xa6\x98\x00\xda\xe2p\xa0\ +\x87:\xcf'\xa8S)\x09\x88)&\x80\xb4\x0fI\x8f\ +\x80U\xff_\x12\x10SO\x00B\x12\x90\x04$\x00!\ +\x09H\x02\x12\x80\x90\x04$\x01\x09@H\x02\x92\x80\x04\ + $\x01!\x01\x08I@H\x00B\x12\x10\x12\x80\x90\ +\x04\x84\x04 $\x01!\x01\x08I@\x02P\x11\x08I\ +@\x02\x10B\x12\x90\x00\x84\x90\x04$\x00!$\x01\x09\ +@\x08I@\x02\x10B\x12\x90\x00\x84\x90\x04$\x00!\ +$\x01\x09@\x88W\x84q\x5c\xccM\x12\x90\x00\xc4x\ +b-\xc6q0\xe3h\x81\xa9.\x01\x09@\x8c+\xc6\ +q\xc1\x19\xdf5]\xa7\xb2\x04$\x001\xbe\x02p]\ +\x9cP\x18\xac\x95\x04$\x001\x15\x05\x10\x88\xd4L\x88\ +c\x99\x8a\x12\x90\x00\xc48\x1b\xc0\x10\x88F1\xae+\ +\x09H\x00b\xcaa-\xc1\x9aZ\xdcH\xcd\xb8w\x03\ +\xa6\xa2\x04$\x001\xee\x98@\x80\xaai-\x13\xa6\x15\ +0\x95$ \x01\x88\x09A\xb0\xae\x9ePC\xd3\x84:\ +\xa6\xa9 \x01\x09@L\x08\x8c\xe3P=s&\xc1h\ +t\xc2t\x05\xa6\x82\x04$\x001q*c(Ld\ +\xce<\x02\xd1\xd8\x84:\xae\xc9,\x01\x09@L(\xdc\ +\xea\x08\xb5\xf3\x17\x12nl\xc68\x13\xa7zNV\x09\ +H\x00b\xe2U\xcap\x98\xc8\xbcyDf\xce\xc6\x0d\ +\x84\x98(O\x7f/\x94@4\xe0\xc5\xa2A\xc3\xd9\x7f\ +\xbb\xbe\xa2\xcb:\xa0\xea&&\x22\xc6q\x09\xb7L\xc7\ +u\x83\xa4\x8e\x1d\xc3K'\xf1<\x0fk}`\xfcr\ +\x04\x1eD\xbb\xd2\xee\x07\x8cqXR\xe7}\xae#\xe5\ +uK\x00B\x9c\x12\x0b\x18\x02\x8d\x8d\x18\x0b^W\x17\ +\xd6\xda\xdc\x1f\x7f\x04\xfb\x8e\xfa\x85\xd144\xa2i\xc7\ +\xbe;a\xfb\x1e\xf7\x5c\xf7^\x09@\x88S\x85cp\ +\x1b\xeb\xb1\xbe\x8f\xdf\xdb\x9b\xbds\xd0\x9cL\xe0g_\ +\xb2\x85\x1b\x15\xffS\xb6]\x91\xdf\xc7\x14\xff\xd6\xe0\xd7\ +fH\xd4\xfa\xa6\xb2CH\x02\x10\x13\x1f\xd7\xc5mj\ +\x04\xeb\xe3\xc7\xfb\x07\xa2\xd2\x9c\xc8\x00\xb6$\xc2\x87\xea\ +8\xd8\xa2]M\xd1+\xb6\xe0\xe7\x22Q\x18,\x06;\ +Q\xf2\x13\x12\x80\x98\xd4\x98@V\x02\xd6\x1e\xc3&\x92\ +`\x86i\x09\x14\xbe\x98\x0fl[\xfeu\x86\x93\xc9\xc0\ +\xcf\x03\xb20\xd9?\x15\x8eF\x01D\xe5H \x18$\ +\xd0\xd4\x84S\x15\xce\xc6\xa6a@\x04\xb9\xff\x9b\xe3\x81\ +i\x0c\xc6\x19\xf8\xff\xc0\xb6\xa6d\x9fl \x9b\xdc?\ +\xb9\x17L\xe9\x1f\x9b\xdf\xa7p\xb7\xca\x96\x80\x04 *\ +K\x02\xa1\x10nc#&\x14\xccE\x22e\x82:\xfb\ +;\x8b\xc9\xd6pC\xb1\x18\xca\x8a\x00\xec\xf1\x9fK\xf6\ +\x19$\x0bg\xd0{U0\xea\x02\x8c\x03\xe31\x88U\ +\xf9\x8d\xd5\x82\xef\x12\x0e\xe364\xe0\xb5\xb7c=\xaf\ +\xe8*\x5cR\xb6\xb9\xd7l\xd9\xd2(N$\x18S\xbc\ +\x9d\x1d\xaa\xf4\xf2\xad\x84\xf1\x1c\x90\x94\x00*\x0a\xdff\ ++K\xd8\x05w\x1c\xa21c!\x95\x19\xb8\x80U:\ +Nu54\xd4\xe3uvb}\xbf$\xb0MQ\x7f\ +}H\x95\x14\xfdds\xc1m\xb0\xc5\xa3\x05e\xc8v\ +\x07\x8c5J\x02\x8a\xe1\xb0\xc0i\x0dp\xcdb\xc3\x19\ +\x8dP\x1d\x1c\xfbc\x88\xa7\xe1\xf9V\xf8\xcdN\xcb\x81\ +\xeeI\x91\xbf\xc2\x89\xd4`}\x8b\xdf\x9d\x9d#P\x18\ +\xd8E?\xe5[\x016\xaf\x87\xc1\xe1]n$\xa0\xb8\ +\x9d0\xa0\x85l\xbe\xc0@\xa5G\xbf\x0406\xc1\x7f\ +\xf5B\xc3?^jX>m\x9c\x8f\xc5\xc2-K\x0c\ +\xb7?\xe2\xf3\xe4\xc1\xc9!\x01\xb7\xa6&;<\xd8\xdb\ +\x83\xb5\xa5c\xfa\xc5\xcd\xfar\x11;\xa8;0hn\ +@\xf9m)3dX\x99(\x09x\x0a\xf1-,n\ +`B\x04\xff\xf1`\xb8`\x16|\xea\xd5\x0e-\x13g\ +\x01\x9e\x97\xfd\xa5\xdc\xda(NMm6\xd8\x0bF\x03\ +\xb2\xa3\x00\xd9\x16\x80)\xc9\xe8\x17'\xf8\xb2\xdb\x0ct\ +\xef\xed\xa0D\xa1\x1d2\x81\xa8Q\x001\x04\x16\xb8n\ +\xf1\xc4\x08\xfeB.\x98\x05\xab\x17\x18\xfc\xc9 \x80\x02\ +\x09\x98\xeaHQP[\xb2\xcd}k\x0af\xf3\xe5\x03\ +\x992\xc3|\xa6 \xd0)\x92\xc3\xc0HA\xd1~\xb6\ +\xd2\x05\xa0.\xc0)$\xec\xc2i\x8d\x13\xef\xb8\x82\x0e\ +\x9c\xd949\xba\x00y\x1c\x077\x96]G\xc0&\xfb\ +\x19\xdc\x8f\xcf_\xea\xecq9\x0c\xee\x0e\x98\x82V}\ +\xf9i\x86f\xf0\x0f\x93\xa0\x00%\x80S\x84%\x9bm\ +\x0fO\x9ce\xee\x8aO\xbc\x99\x5cC\x83\x90\xbd\x83\xd0\ +\x8d\xc6\xf0\xb0\xd8Tr@\x01\xf9\xa0\x1e\x08\xda\xc1\x09\ +@S\x18\xd8\xd6\x94\x99\xfb_\xf0\x1e\xb9\x99@\x86\xca\ +\x97\x80\x04p\xaa*#\x90\xf2\xe0P\xef\xc4<\xbeC\ +}\xe0\xd9\xac\x08&U\xb9\xbb.nm\x14\xaf\xc7b\ +3\xe9\x13\x04\xf5\x80\x06La`\xc3\x09:\xc6\x83\x92\ +\x80\x06L\x85w\xa3\x94\x038\x85x\x16\xfe\xb0\xc7\xd2\ +\x99\x98X\xc7u\xa0\x07\x9e\xd8o'\xc5|\x80\xb2a\ +\x1a\x08\xe2Fc\x98@` [o\xca\xfd\xe1\x843\ +\x09\xcbO!.\xf3G\x02\x10e\x0b\xd7\xc0\x13\x07\xe0\ +?6X\x92\xde\xc48\xa6x\x1a\xee\xf8\x93\xe5\xf9\xd6\ +\xc91!\xe8\x84\x12\xa8\x89b\xdc\xc0@P3T\xe0\ +\x0f\x0eh3\xc4\xbd\x06\x94\x97H\x05\xa3.\xc0\xa9\xac\ +\x84@2\x03_}\xca\xd2\xda\x077-1\xcc\xaf\x1b\ +\x9f\xc0\xf3,\xech\x87;\xb7X\xeey\xd1\x92\xf1'\ +_\x0e\xa0\xa4\xfcCa\x1c,^\xbc\x17|\x7fPG\ +\xbf\xdc\xd9\xb2'\xe8.\x94\xdfC9\x00q\xe2Jb\ +\xa0/\x0d\xdf~\xce\xf2_/X\x1a\xaa 0\x0e\x06\ +Hy\x96\xf6\x04t'\x80I\x98\x00\x1c\x0a'T\x05\ +\x16\xbc\xfe^\xc0gD\xab\x89\x18\x86\x90Ea\xba0\ +7\xa7\xdaJ\x00b8\x09\xe4\xfe\xed\xe8\x87\xf6\xfe\xe3\ +\x15i|\x8ecR\x0d\xfd\x8dT\x02\xe1*\xac\xf5\xf1\ +\x93q\x18\x9c\xf0+\xf9\x99\x91\xdd;`\x86\xdbV\x02\ +\x10\x83\xab\xcf\x14\xba\xf2N4\xdcp5`\xf1S\xfd\ +C\x07u\xfe\xc7\xf2w\x0b\x96\x9c\xcc\xe2\xa6\x82\x04 \ +\xc4\x84\xc5\x18\xdcp$+\x81t\xf2\xc4\xc1]\x22\x82\ +RY\x98I\xd2\x8f\x92\x00\xc4\x94\x92\x80\x13\x8edW\ +\x16\xf6Re\x02\xbbp\xa2O\xc1\xaf\xcc\xd0\xef\xa7\x16\ +\x80\x10\x15\xe5\x00\x07\xb7\xaa\x06?\x09\xbe\x97\x1e\xfcj\ +\xe9\x0e\xceP&P\x0b@\x88\x8a\x95\x80\x13\x8a`S\ +}X?\xc3\xd0\xfd\xfca\xe40\x09r\x00\x9a\x08$\ +\xa6\xa6\x04\x1c\x177T\x83q\x02e&\xfa\x14\xc4\xb5\ +\x19j\x81P3\x19\xe2_-\x80\xb1\xc2\x92[\x16l\ +\xb2\xdc\x82{\xaa\x02\xf3\xf8\x9a\x9bc&\x81\x08^:\ +>\xe8iC\xd9\xdb\x81m\xc9]B\x85[\xe4\xb6S\ +\x0e@\x0c\x87o!\x1a\x82\xf3g\xc2\xbc\x98!\xe0T\ +\xfeb\x92\xafx0\x92\x9d\xa6\xf3R\x87\xe5\xd9\xc3\xd0\ +\x9b\x1a\x9b\x19\x93\xc6\x09\xe0\x04\xab\xf13\xfd9\x09\xe4\ +\xee\xfb\x1b\xf6\xean0\xc5\xcf\x0d\x91\x00D\xf9\xe0?\ +\xb3\x09\xfe\xfeb\xc3\xd5\x0b\x0d5\xc1\xa99\x19gD\ +X\xe8M\x1b~\xbb\xcb\xf2\xc5u\x96\x1d\xedc#\x01\ +\xc7\x09B\xc0\xe2g\x12\x05\xeb\xfeQ\xb0\xb0h\xf1r\ +a\xc7_\xcd\xdf[ \x01\x88\xb2\xf5\xd9\xc2\xf4\x1a\xf8\ +\xcce\x865\x8b\x14\xf5\xc3b\xa0.\x0c\xb7,5D\ +\xc3\xf0\xe1\x07,\xc7\xe2c\x13c\x8e\x13\xcaJ\xc0K\ +\x96\xae&l\xcd\xd0\x09A\xdd\x0d(\x86\xc2\x07\xaeZ\ +h\xb8b\xbe\x82\x7f\xb4\x5c\xb9\xc0\xf0\x9aEc\xbbl\ +\x99\xe3\x84q\xdcp~\x090[\xf6\x09Ce\x1eF\ +\x22\x01\x88r\x04\x1dX1\x1d\x82\x13tU\xa0\x09_\ +v3\xc6\xbe\xec\x1c'\x8cqBEO\xfc\xb1%O\ +\x09*\x0c~\xb5\x00D\x19,\x10p \x16VY\x9c\ +,\xd1\x10\xe3\x920u\x9d\x10\xc6\x09\xe6\x83\xde\xe4\x9e\ +\x0bh\x06-\x10\xaa\xf5\x00\xc4\x90\x18 \xe3CWR\ +eq\xb2t& =.\xeb\x16\x18\x1c\x13\xc67\x00\ +\x99!\x9e\x1249\xbauj\x01\x9cB\xd2\x1e\x07\xba\ +'\xc5\x9a\x1b\x13\x1a\xcd\x038\xc5\x18\x93\xad\xd0\xef\xbe\ +\xcfg\xf5|\xc3i\x8dd\xd7\x05T\xd1\x14\xe1\x03\xf1\ +4\xech\xcf.\xa4z\xa0G\xc1/\x01L\x22\x09\xec\ +\xeb\x86\xefm\xb4\xb8\x0e\x04\xb42P)\x162\x16|\ +?\x1b\xf8\x0a~\x09`RQX\xa9=\x8b\xc6\xb6\xca\ +`\xc8N\x02\x12cX/U\x04BH\x00B\x08\x09\ +@\x08!\x01\x08!$\x00!\xc4\xe4F\xa3\x00c\x8c\ +U\xf6\xff\xc4\x18\x8d\x90J\x00\x93\x10\xcff\xef\x0e\x8c\ +\x864\xc6=\x14\xbe\x85\xdeT\xf6q\xea*#\x09`\ +R`\xc9\xae\x0bp\xf9|\xc3\xebO\x87%M\x86p\ +@\xd3\x00\x06c\xc8\xde\xfd\xb7\xad\xcd\xf2\xf3m\x96'\ +\xf6g\xa5)\x0fH\x00\x15\x8d\x03\xbcy\xa9\xe1\xd3\x97\ +\x19\xa6im\x80a\xb9`\x96\xe1\xea\x85\x86\xcf\xfe\xd1\ +r\xf7V\xab\x15\x81\xc6\xa0~\x8aS\x84oa\xd94\ +\xf8\xd8%\x0a\xfe\xd10\xb3\x16\xfe\xe1U\x86\xf3\xa6k\ +I0\x09\xa0\x821\xc0\xf5\xa7\x19\xe6\xc5T\x16\xa3e\ +v\x14\xae\x5c\xa0\x0e\x80\x04P\xa1\x1c_\x12L\xc1\x7f\ +\xf2\xcc\xab\x83\xb0\x96\x04\x93\x00*\x16\xa3u\xed\x85\x04\ +0Uc\x9fd\x06\xf6t\xa9,N\x96\xdd\x9d\xd9e\ +\xd5\xe4P\x09\xa0b\xf9]nq\x0b1:\xf6v\xc1\ +\x03\xbb\xd4\xf8\x97\x00*\xb9p\x0dl8\x02\x9f\x7f\xcc\ +r\xa8W\xe51RZ\xe3\xf0\x85\xc7-\x9b[5!\ +\xe8T\xa3y\x00\xa7\x18\xcf\xc2\xdd[-\xfb{,7\ +/1,i2\x04]\x95K9\x92\x99\xecD\xa0_\ +n\x87G\xf7Z,j\xfeK\x00\x15\xce\xf1\xe7\x03<\ +\xba\x17\xd6\x1f\xb0DCZ\xe9v(|\x0b=\xb9\xa9\ +\xc0\xae\xee\x09\x90\x00&\x13\x8e\xc9>\xfe\xba\xbd_e\ +q\x22\x8cA\x8f\x03\x93\x00&i\xe5\xce\xff%\xc4\xc4\ +@I@!$\x00!\x84\x04 \x84\x90\x00\x84\x10\x12\ +\x80\x10B\x02\x10BH\x00B\x08\x09@\x08!\x01\x08\ +!$\x00!\x84\x04 \x84\x90\x00\x84\x10\x12\x80\x10B\ +\x02\x10BH\x00B\x08\x09@\x08!\x01\x08!$\x00\ +!\x84\x04 \x84\x90\x00\x84\x10\x12\x80\x10B\x02\x10B\ +H\x00B\x08\x09@\x08!\x01\x08!$\x00!\x84\x04\ + \x84\x90\x00\x84\x10\x12\x80\x10\xe3\xc2dx\xcekE\ +?\x1d\xd8f2\xd8\xec\x13\xa5\x85\x18\xbbz\x07X|\ +<\x9b1~\x85_C+Z\x00\xdd;^\x04\x08\x1a\ +\xb5d\xc4\x18\x0b h|\xa7;\xd0\x13\x8e\xdb\x8a\x0e\ +\xa1\xca\x16\x80\x17\xef\x050XUJ1\x96\x18\x8c\xf1\ +M&\xdco<\xdf\x95\x00\xc6\xf3D\x14\xfe#\xc4\x98\ +\xd5Z4\ +B\x02\x18\x12\xdf\x1fT\xf3r\xb5\xc6qJk\x8do\ +\x8f\xff5\xf4\xb6\xbeW\xe6\xfed\xc7\xe0\x98Q|~\ +n\xfb\xb2\xaf\x8d\x10\xe3\x98|\xc5/{Lew\xca\ +\xfdc\xccI\x05\xcd\x89\xbe\xcb\x90\xfb\xe4\xa2\xb6>\xe2\ +R[\xe5\xe6\xcb2\x99\xf6\xe9\xe9\xf7\x88\xa7|0#\ +{\x8f\xda\xb0C\xb4:@0\x90\xdd8\xe3Y\xfa\x12\ +\x1e]\xfd\xde\xb0\xef!\x01L\xd1\xe0_\xbd\xbc\x8e+\ +\x97\xc7\xf0\xfd\x5c}u\xe0\xe1\xcd\xdd\xac\xdd\xdcU\x1c\ +\xd8\x16\xce\x99]\xc5\x0d\x174\x12p\x9d\x5c\xa0\xc0\xce\ +C\xfd\xdc\xf5d;\x89\xb4%Z\xed\xf2\x8e\xcb\x9ai\ +\x8e\x06\xf3W\xa2\x8c\xe7\xf3\x8b\xa7\xda\xd9\xb4?\x81S\ +\xd0\xe9\xb2@\xd85\xdcrq#g\xcc\x8e\x94l\xbf\ +\xfdH\x92\xb7\x5c\xd2\xc4\xe2\x99\xd5%W\xb5\xe1H\xa6\ +=\xee~\xa2\x8d\xed\xad)be\x8e\xa9\x1c\x19\xcfg\ +\xdf\xd1\x04[\x0e&\xd8z(AO\xd2/\xb8\xedu\ +x\x1c\x037\xacl`\xc5\xa2\xda\xfc\xe7Xk\xf9\xcd\ +s\x9d\xac\xdb\xd9W\x12|\xd6f\xf79oN\x15\xd7\ +\x9dW\xcf\x95Kc,\x9eUM(\x90-\xa4\xd6\xce\ +\x14/\x1c\xe8\xe7\xe1\xad\xdd\xfcjC'\x07\xbb2e\ +\x03\xd8\xb703\x16\xe0\x86\x95\x0d\xacY\x16c\xc9\xdc\ +\x08u\xb5\xd9\xaa\xdd\xd7\xef\xb1\xfbH\x82\xdfo\xeb\xe6\ +\xd7\x1b:\xd9t \x81\x8f\xee \x97\x00\x0a\xa2\xf0\xca\ +\xe51>u\xe3\xec\x92\x97\xd6>\xdfURc\xcf\x9e\ +]\xcd\xedo\x9c\x8d\x1b\x18\x88\xe4G6ur\xef\xb3\ +\x1d\xf4\xa7|\xa2U\x0e\x7fw\xed\x0c\x16\xb4T\x15\xed\ +:\xbf1\xc4\x87~\xb8\x87\xfe\x8c\x1d\xa8|\x16\xc2\x01\ +\xc3_\xbe\xaa\x895+\x1a\xf3\xdbz\x19\x9f\x9d\x07\xfb\ +\xd9},\xc5;_\xdd\xcc\xe5g\xd7\x8f\xfak\xf5'\ +<\xfe\xb4\xbd\x87\xedG\x92C\x1eS9Ri\x9f\xce\ +x\x86'\xb6\xf5\xf0\xad\x87\x8f\xf2\xd0\xd6n\xd2\xfe\xf0\ +\x01\xe3\xfb\x96\x95\x0b\x22|\xe9\xad\xf3X8\xa3\xba\xe8\ +\xb5\xae\xde4\xeb\xb6\xf7\x82k\x8a\x82?\x122\xbc\xeb\ +\xd2f>t\xfdL\x16\xcf\xac.y\xcf\xd9\x8d!\xce\ +[T\xcb\xcd\x974\xf3\xce\x1d=|\xfe\x9e\x83\xdc\xbf\ +\xb1\x0b\xaf \x80}\x0b\x97\x9fQ\xc3\xffy\xd3\x5cV\ +\x9d\x19\xc3u\x07\x1di\x03\x9c1\xab\x9a\xd7\xach\xe0\ +=\xab[\xf8\xf2}\x87\xf8\xf6\xa3\xc7\x8a\xcf\xc3\x14F\ +I@\xc8_\xf9\x87\xfb\xdd\xf1\x8a\x9b\x1e\xd4\x9c\xf6\x06\ +\xfd\x9c)\xd3\xdc\xbe\xf9\xa2&\xd6,\x8ba\xfd\xd2\xd7\ +\xbcA\xbfK{\x16\x9b\xbb\x84\xfa\xfe\xc9\xb5\xffS\x19\ +K\xb2\xe082#\xec\x02\x84\x82\x0e-u!n\xb8\ +\xa8\x89\xef\xbe\x7f1\xef\xbb|\x1a\xc1aj\x89\xb5\x10\ +\xadr\xf9\xf053J\x82\xdfZ[\xd2c\xb2@U\ +\xc0\xf0\xb1kg\xf0\x85\xdb\xe6\x97\x0d\xfeB\x02\xae\xe1\ +\xe23c|\xe3]\x0b\xb9ee}Q\xf0_\xb8 \ +\xc2\xbf\xbfs!\x97.\xab+\x0d\xfeA,\x9cQ\xcd\ +go\x9d\xc7\xad\x176b\xb4\x8aT\xb6lU\x04c\ +C}m\x80\xf7_=\x9d\xc7v\xf4\xd2\xd6\xe7\x8d\xa8\ +\x7fm\xad\xe5hO\x86C\x9d\xe9\x12I\x14\x12t\x0d\ +\xd3\xa2\x81\xa2\xee\xca\x8b\x87\xfa\xd9z8\xf9\xb2\xda\xba\ +-\xf5!>q\xd3\x1c6\x1f\xe8\xe7w\xdbz\xca\xe6\ +D\x8e\x1f\xe7\x0d+\xea\xb9\xf1\xa2\xa6\x11\xbd\xaf\xb5\xf0\ +\xbas\xeb\xf8\xc8kgQ\x1d.^R\xab'\xee\xd1\ +\x9d\xf0p\x1dCS\xadK\xb0\xa0\xa55\xab)\xccg\ +\xde4\x97m\x87\x13l\xd8\xd7O$\xe4\xf0\xc1\xabZ\ +X>\xaf\xa6\xe8=\xf6\xb5&\xb8\x7fC'm}\x1e\ +\xd7\x9dS\xc7y\x0bk\xf3\xe5\x1d\x8d\x04x\xffk\xa6\ +\xf3\xeb\xe7\xbb\x86\xecRH\x00\xe2\x94\xb0\xfa\xec:n\ +\xfa\xb3\x06\xbe\xf5\xfbV\xcc0\x060\x18zS\x96\x0f\ +\xfdx/U\xc1\xfdCn\xe7\xf9\x96\xeb\xcf\x8a\xf1\x95\ +w.$\x92\x0b&k\xe1\x9e\xa7\xda9\xdc\x9d\x192\ +\xfd\x1dO\xfa\xfc\xe4\x8f\xad\xec\xefLc\x0c\x04\x1d\xc3\ +\xaaE5\xacZ\x12\xa3*4\x10t\xd3\x1bB\xdc\xf6\ +\xaaf\x1e\xdf\xd9G\xc2+m6\xfb\x16No\x09\xf3\ +\xd1\xebgRS5\xfc\xfax\xd6\xc2\x8cX\x80\x8f\x5c\ +?3\xdfO?\xfe\xfb\x877v\xf0\xe5\xfb\x0f\xf3\xfc\ +\xa1\x04\x91\xa0\xe1\x8a%Q>x\xcd\x8c\xa2\x00?c\ +N\x84w\x5c6\x8d\xbf\xff\xe9>\xea\x22\x01V-\x89\ +\x15\xbd\xff\xb1\xee4\x7f}\xc7K\xfcvK7\x9eg\ +\xb9\xf3\x8f\xc7\xf8\xee\xfb\x16\xb1\xf2\xb4h~\x9b%s\ +\x22\x5c\xb8\xa0\x86_l\xe8\x9c\xf2\xc3\x03\x12\xc0\x18\x12\ +\x0a:\xbc\xef\xaa\xe9\xac\xdd\xdc\xcd\xf6c\xa9\xe1/\xce\ +\xd6\xd2\xda\x9d\x19z\x10\xc0Z\xc2\x01\x87K\xcf\x8c\xe6\ +\x83\x1f`\xef\xd1\x04\xbf\xfcS\xe7\x09\x07\x0f\xe2I\x8f\ +\xff\xf7\xe0a\x9e\xd9\x1d\xe7\xf8e\xb09\x1a\xe0\xf6\x1b\ +g\xf1\x81kg\x16]\xed\xcf_TC,\xe2\xd2\xdf\ +\x9d)\x8a\x97\xe3I\xcc\xf7]\xd9\xc2y\x8bjGT\ +\x06\xd6ZV/\x89r\xfe\xa0\xed7\xed\xee\xe5C\xdf\ +\xdf\xc3\x96C\x89\xfc\xf1l=\x98`_[\x8a\xef\x7f\ +\xf04\x1a\xa3\xc1\xfc\xb6k\xce\xa9g\xc6\xfd\x87\xe9I\ +\xfa|sm+\xb1\x88\xcb\xf1\xf5\xe1\xf7\xb6&x\xe4\ +\xc5\x1e|\x0b\x8ek\xd8t\xb0\x9f\xdfn\xea.\x12@\ +8`\x98\x16S\xd5\x97\x00\xc6\x81\xf3\x16\xd5\xf0\xf6W\ +7\xf3O\xbf8\xc8H\xba\xe5'\xca\xc2\xfb\x16\xce_\ +\x10\xe15\xe75\x14\xfd\xfe\x81\x8d\x9dl;\x92\xc4\x18\ +\x86\xcc\xfa\x1b \xe0\x18p\x9d\xfc\xc8\xc4\xb1\xde\x0c?\ +y\xbc\x8d\xbfx\xf5\xb4\xa2\x80\x8b\xd5\x04\x8b\x9a\xe2\xf9\ +`\xf6-\xab\x97Fy\xdbe\xd3\xf2bH\xa5}\x82\ +\x01\xa7\xec\x85\xd5\xe6\x82\xef\xaae\xc5\xad\x0c\x80_>\ +\xdb\xc1\x96\xc3\x09\x9c\xc2D\xa1cX\xb7\xab\x8f\x9d\x87\ +\xfa\x8b\x8eg\xe1\xb40g\xcf\xaa\xe27\x9b\xbb\xf9\xd2\ +\xaf\x0e\x96|1\xc7)\x1e\xc2t\x9c\xd2r\xebO\xf9\ +\xaa\x8c\x12\xc0\xd8c\x8c\xe1m\x97M\xe3\x97\x1b:Y\ +\xbf\xab\xefe\xbdW\xd05\xdczq#3\x1aB\xf9\ +\xdfu\xf4f\xb8k]\x1b\xa9\x8c\x8f\xe3\x8cr\xc5t\ +c8\xdc\x93!\x91\xb1\x83\x02f )Y\x18D\xd3\ +\xa2\x01>z\xfdL\xa6\xd5g?\x7f\xff\xb1$\xcf\xed\ +\xee\xe3\xfa\x95\x8d\xe5\xdf?\x97,\x5c:\xa78\xe9\x97\ +Hyl\xd9\xdf_\xd6R\xbdI\x9f\xaf>x\x84\xd3\ +7\xf7\xe4e\xe6{>\xc7z\xb2\xdd\x9br\xc1\x9d\x9f\ +\xf3``\xe5\xbc\x08\xd7\x9dS_\xb4\xcd\xae\xc3\x09\x9e\ +~)\xae\xd9A\x12\xc0\xd8\x90H\xf9\xb4w\xa7\x99\xd5\ +\x1c\x06`^K\x15\xefY\xdd\xc2\xc6}{F=\xbe\ +_X\xd1\x97\xcf\xac\xe2u\xe7\x17_\xfd\xd7\xbf\xd8\xcd\ +3\xbb\xe3\xc3\xe6\x18 \xd7:\xb0\x16\xdf\x9a\xfc\x9b^\ +0?B]uq_\xfeXW\x8aT\xda/j\x89\ +\xb8\x06\xdeu\xd94V\x17\x04\xd7O\xff\xd8JW\xd2\ +\xe7\xb5\x7f\xd68T\xfc\x13\x0e9ya\x0c\x94\x8f\xe5\ +`{\xaa\x5c\xfc\x93\xf2,?|\xbc\x0dl[\xd1k\ +\x8e[:\xa9\xc7\xb7p\xf1\xe2\x1a\xae=\xb7\x1e\x0c\xd4\ +\x06\x1d\xae9\xbb\x8e\xb3\x16\x0c\xe4\x10\xfa\x12\x1e_\x7f\ +\xe00\xdb[\x93\x9a\x14$\x01\x8c\x0d\xddq\x8f\xbb\x1f\ +=\xca_];\x93hu\xb6\xc8o\xbe\xa8\x89{\x9f\ +n\xe7\xe1m='5\xd3\xcf\x01nZ\xd9\xc0\x82\xe9\ +\x03W\xd3T\xda\xe7?\x9fl\xa7\xb3\xdf\x1b2c\x9f\ +\xdf\xdf\x18\xa6\xd7\x07\x99\xdd\x1b\xc6q `\xe0\x92\xc5\ +5|\xfc\x0d\xb3K\x92y\xeb\xb6\xf7\xd2\x19\x1f\x18\xb9\ +\xf0}\xcb\xaaE5\xbco\xcdt\x02\xb9&\xfb\xe6\xbd\ +}|sm+7]\xd4x\xe2\xcfuLI\xe6\xdf\ +\xf3m\xaeIn\x86\xdcg\xa4V\x5c\xb5\xb8\x86\xdbo\ +\x9eS\xf6\xe5\xbd\xad\x09\xfe\xe5\xde\x83|\xfb\x8f\xc74\ +\x19H\x02\x18;\x1c\x03\xf7o\xecbvK\x15\xb7\xbc\ +j\x1a\x90\x1b\x16\x5c3\x9dM\xfb\xfbG\x1d\xff\xbe\x85\ +\x85\x8dA\xdexacQ+v\xf3\xde8\xbf\xde\xd8\ +=\xa2\xa6m]\x8d\xcb\x7f\xbc\xff4R\xb9\xe6\xb2c\ +\xa0!\xe2\x96\x04\xe7\x9e\xa3\x09~\xf2D\x1bi\xcff\ +\xbb\x14\x16\xea\xaa]>r\xed\x0c\xe6\xe7&\x16\xa53\ +>w\xdd\xce\xe1\xee\xf4\x88\x9a\xb6\ +\x8ech\xa9\x0b2\xa71\xc4\x9c\xc6\x10\xb3\x1aB%\ +\xc1\xbf\xb75\xc9'\xef\xdc\xcbS\xbb\xe3\xf9\xab\xb0\xb5\ +\x96\x9bV6\xf0\xfa\x0b\x06\xae\xf4\x8fl\xee\xe2\xc7\xeb\ +\xda\xc1\xda\xb22\xcb\xce\xd3'\x9f\x91\xb7\xbb\x8fx\xc2\xa7\xa6`t\ +\xe3\xdc9\xd5T\x05\x1d\x92\xde\xd4\xce\x07H\x00@w\ +o\xa6\xa4\xf5\xb9tz\x15\xb5a\x87\xde\x94\xc51\x03\ +us\xe1\xb4*\xc2\x83\xee\x8ei\xeb\xcd\x90\xca\xd8\x11\ +\x5cM\x0c\x9e\x85\x1f<\xde\xc6\x0d\x174r\xc9\xa0i\ +\xac\xc3\x0b \x9b\xe5\xbetY\xf1~\xeb_\xeca\xfd\ +\xae\xbe\x11\x0d\xfd\x0d\x04\x86\xe5Hg\x9aC\xed)\x8e\ +v\xa5\xf9\xf9\xba6>\xfa\x86\x81;\x22C\x01\x87\xf7\ +\x5c\xd9\xc2\x03\x1b\xbb\xd8\xdd\x91\xcd+$\xd2\x96\xdd\x1d\ +\xe9\x93.g\xc7\xc9v\x19\xd6\xef\xea\xe3\x9a\x82\xb9\x02\ +\xc1\x80\xc3egF\xf9\xf1\x13\xed\xf4gl\xbe\xc5a\ +}\xcb\x8cX\x80\x1b.j\xe6\xb4Y\x03\xa3\x1d\x1d\xbd\ +\x19\xfa\x7fq\x90\x15\x0b\x22\xbc~e#nn\x07\xc7\ +\x81?l\xed\xe6\xb7\xcfw\x175\xed3\xbe\xc5\x1fd\ +\xe8P@k\x03H\x00\xd9\x98d\xfb\xc1~z\x13\x1e\ +\xb5\x05W\x88W-\x8bq\xd3\xf9\x0d\xdc\xfdt\xf66\ +\xdf@\xc0p\xc1\xa2\x1a\xde\xbc\xaa\xa9\xb8e`\xe1\x99\ +=q\xe2i\x7fD\xcdI\xc7\xc0\xe1\xae4\xff\xfe\xc0\ +a\xce\x9d_StU:a\xf0\x03\xd5A\x87[/\ +i\xa6\xaef\xe0\xb4\xa53>\xff\xb9\xbe\x8d\xf6\xb87\ +\xf2\xe1\xb2\xe3_=\xb7T\x8e\xe7[~\xf8\xd81\xde\ +xac\xd1\xdd|\xe7-\xac\xe5\xe6\x0b\x1a\xf8\xbf\x0f\ +\x1e\xcd\x1f\xfc\x03\x1b\xbb\x18*\x95\xe7Y\xcb\xab\xcf\x8c\ +r\xf5Yu\x05\xd2\x82\x07\x9e\xebd\xdd\xce^\x1e}\ +\xa1\x07\x8c\xe1\xf7[\xba\xf9@W\x9a\xe6\x82\xd6\xc4\xf5\ ++\x1by\xd3\xf3\xdd\xfc\xfc\x99\x0e\xfar\xeb\x10\xcc\xa8\ +\x0b\xf27k\xa6\xb3`z\xf1m\xcc\x9b\xf7\xf6\xb1\xed\ +H\x82k\x96\xc7\xf8\xc7\x1bg\x11(hA\xad]T\ +\xc3\xb3/\xf5\xd1\xd6\x9b\x01\xc05\x86\x0b\x17\xd7\x96\x0c\ +m\xee\xedH\x93H\xdb)?\x17h\xca\x0b\xc0\x18\xc3\ +\xfa\xddq6\xee\xe9+\xba\x227F\x83|\xe5\x1d\x0b\ +\xb8~E=\xdb\x8e$\x99U\x17\xe4\xaa\xe51\x16\x0d\ +\xbau\xf5@[\x92\xb5[\xba\x19Mn\xdb\x18\xc3}\ +\x1b\xbbx`C\x077\xadj\x1e\x99\x00|\xcby\x0b\ +#\xac9\xb7\xbe\xe8\xf7\xdb\xf6\xc5yhs\xf7\xcb\xea\ +\xcb:\x8ea\xd3\x81\x04?\xf8C+\x9f~\xd3\xbc\xfc\ +[\xb9\xae\xe1\x9dW\xb4\xf0\xab\x0d\x9d\xbcp4\x85c\ +\xe0\xb1\xed\xbd<\xf6BO\xf97\xf2,\x1f\xbbqV\ +\x91\x00\xb0\x96\xfb\x9em\xe7k\xbf9\x02A\x07\xe3\x1a\ +\x9e|\xa9\x8f\xfb\x9fi\xe7/\xaf\x9c\x9e\xdf\xac)\x96\ +-\xef7\xacl`\xcb\xe1$\x91\xa0\xe1\xd23jY\ +\xb1\xb8\xb6(\xd9\x99\xf1,?_\xdfNg\xdc\xe3\xd9\ +=q\xf6\xb4&\x8bn'\xbedi\x8c\xcf\xdd2\x87\ +;~\xdfJ{\xdc\xe3\x8d+\xeax\xef\x9a\x19Er\ +\xecKx\xac\xdb\xde\x83o-\x8er\x00S]\x00p\ +\xb4'\xc3\xbf\xfe\xfa\x10\xcb\xe6D\xa8/\xb8C\xad!\ +\x1a\xe4-\x97N\x1br_\xcf\xb3|g\xed\x116\x1e\ +\xe8\xc7qN<\x06=\xf83\xbb\xfa=\xfe\xed\x81#\ +\xbcji\x8c\xe9\x83f\xc6\x95#\xe8\x1a\xderQS\ +\xd1\xb4_\x80{\x9e\xee`OG\xfae7g=\x0b\ +w>\xd1\xce\x9f_\xd2\xcc\x99\xb9\x04%\xc0\xb2y5\ +\xfc\xc5\xaa&\xfe\xf9\xdeCXr\x09\xc1!\xee\xbb\xf7\ +\xa1t\x1e\x80\xc9\xe6\x09(\x98\xb9\xd7\x97\xb6\xfc\xeb\x83\ +G8waMQB\xb1!\x1a\xe4\xe6K\x9a\xb9\xf9\ +\x04\xc7\xf9\xab\xa7\xda\xf9\xd1\xba60\x86\xdd\xed)~\ +\xfch+\x9f\xbcyn~-\x80p\xd0\xe1\xaf\xd7\xcc\ +\xe0\xa6UM\xa42\x96i\xd1@\xc9}\x0c\xbfy\xb6\ +\x83\xb5\xdbzG\xd5e\x9a\xach\x1e@. \xef\xf9\ +S\x17\x9f\xb9{\x1f\xad]\xa9\x11\xed\x93H\xf9|\xfd\ +\x81C|\xf9\xc1\xa3d\xbcA\xef7(\x1aM\xe1\x12\ +@\x05\xdb<\xb1\xab\x8f\xbb\x1e?VzR\x9c\xe2\x04\ +\xa4oa\xd9\xcc*n\xbc\xa0x\xfc\xfaP{\x92_\ +<\xdb1\xa2EC\x86;&\xc7\xc0\xf6\xd6$?}\ +\xecXQ2\xce\x18x\xfb\xe5-\x9c;\xa7z\xc8E\ +R\xca\xbf\xef\xf1\x9fK\x83\xcc1\xf0\xec\xbe~\xfe\xf6\ +{\xbb\xf9\xd3\xce\xde\x91\x09\xca\xb3\xdc\xbb\xbe\x8dO\xdc\ +\xb5\x8fc\xbd\x1e\x8e\x81\x8c\x07_\xf9\xedQ\xbe\xb3\xf6\ +h\xf1\x82'\x06\x9a\xa3Af5\x84\x8a\x82\xdfZx\ +\xf0\xd9\x0en\xff\xf9~\xda\xe3\x9en\x05@-\x80\xe3\ +\xf5\x85\x94o\xf9\xfa\xc3G\xd9q$\xc1{\xafj\xe1\ +\xa23c4D\xdc\xa2\xfe\xa5\xef[z\xfa=\xb6\xee\ +\x8f\xf3\xed\xb5G\xb9\xeb\xc9\x0e\xba\x93~\xd1\xd5\xd7\xf3\ +\xe1PG\x8a\xea\x90\x93\x1fBk\xcb\x0d\xb7\x15\xd68\ +Cv\xd5\x9eo>\xdc\xca\x05\xa7E\x997-\x8c\x9f\ +\xdb$\x91\xf4\xb3\x0ba\xe6p\x0d\x5c\xb1$\x8a\x130\ +\x1chOe3\xf2\x8e\xe1\xde\xa7:rC\x7f'\xae\ +\xc9#=&\xcf\xc2O\x9ehc\xf5\xf2:N\x9f]\ +M.\xe9N \xe8\xb0\xe6\xac\x18\xcf\x8d`\xd6bw\ +\xbf\xc7\xc1\x8e\xd4\xc0\x8d;\xd6\xd2\x9b,]S\xcc1\ +\xf0\xe8\x8e>n\xfb\xfa\x0e\xde\x7f\xf5t^w~\x03\ +3\x1aBEw\x09Z\xdf\xd2\xdd\xef\xb1\xed@??\ +z\xec\x18?[\xd7Fk.\xf8\x8f\xcb\xa6#\xee\xf1\ +\xf1;\xf7\xb1aO\x1f\xef\xb8|\x1aKgE\xb2\xb9\ +\x9c\x82\xcf\x8b'=v\x1fM\xf2_\xeb\xdb\xb8cm\ ++{;\xd3J\x00\x16\xd4\xc3\x8a\xc5y\xeb:\x80\x8f\ +\x02_z%\xde\xcf\xe6*]\xb4\xcae\xf9\xec*\xce\ +\x9e]\xcd\xcc\xe6\xaa|\x969\xbbHe\x9c\xe7\x0e$\ +8\xda\x93)\xbb\xdc\xb4\xebdW\xe7)\xec\xb7z\xbe\ +\x1d\x08\xb82'\xa09\x1a(\x1aY\xb0\x16:\xfa2\ +y\x09\x18\xa0\xb16@\xf5\xa0[h\xbbs\xab\xe7\x0c\ +\xc7h\x8ei\xa8\xcfJ\xa4|\xda\xfa2\xc3\x0ewF\ +\xab\x5c\xea\x0a&\x03Y\xb2\xc3\x94\xbd\xc9\xf2\xcd\x07?\ +\xb7.\xe2\x82\xc6\x10\xe7\xcf\x8f\xb0\xe8\xf8\xa2\xa0\x06\xda\ +\xbaRl\xdd\x97+\xef\xee\xf4\x90+\x15[\x9b\x1d!\ +\x99Q\x17\xe4\xfc\xb9\xd5\xd9EAk\xb2\x09\xc6\x9ex\ +\x86\x97\x0e\xf7\xf3\xd4\x9e8\x07;\xd3d|^\x91\xe0\ +\x0f\x1a?\xb5 \xd4\xf7\x9e\xb8\x1f\xf8\xc1\xbe\xef\xad\x96\ +\x00&\x83\x00\x06W\xa8|\x0d\x1eTb\xc3-\x99\xed\ +\x97_\x15\xfc\xc4\x9f7\xf8c\x06MC\xb0\xe5W.\ +\x1fq3v4\xc7\xf4r>\xebd\xf6\xcd\xcf\x12\x1e\ +b\xe7\x91.Q\x9e?oC\x1c\xc0+y\xd5\x9f,\ +\x02P\x17\xa0\x0c\xc6\xf0\xb2\x12D\xa3\xadh#Yz\ +\xdb\x98\x97g\xeb\xd1\x1c\xd3\xcb\xf9\xac\x93\xd97/\x88\ +\x97\xd9)\x7f\xb9\xe7m*\xa2$\xa0\x10\x12\x80\x10B\ +\x02\x10BH\x00B\x08\x09@\x08!\x01\x08!$\x00\ +!\x84\x04 \x84\x90\x00\x84\x10\x12\x80\x10S\x13[\xf0\ +\xa7\x92\xa9\xe8\xa9\xc0\xa1\x80\x83\xeb\x90I\xa4}k\xb5\ +\xd4\xbb\x18C\x8c1~M\xd8Mz\x99\xca\xbe\x86V\ +\xf4\xd1\xcfm\x0a\xb1tV\xf5\x0bA\xd7\xb4\xabJ\x8a\ +1\x0e\x9c\xa3M\xb5\x81\x17\xaaBn\xa5\x7f\x8f\xca\xa5\ +%\x16`\xc9\xac\xea\xc7\x22!\xe7\x1e\x93]\x90F\x88\ +S\x1f4\xc6\xa4b!\xfb\xc3\xd3M\xeb\x96f\xdbS\ +\xd1\xdf\xa5\xc2\x9b\xcd\xcd\xf0\x96_r\xc5Yu\xb3\xb7\ +\x1c\xe8\xff\x9b\xaex\xe6Fc\x98\x8er\x1b\xe2\xd4\xe0\ +\x198\xd8Xm\xee\xae\xab\xab\xfe\xaaI\xc6;\x22\xa9\ +^\x9e\xfa\xfaU\x12\xc0x\xf0\xfb-]\x5c\xb1\xec>\ +\xce\xf9\x9fgq\xc5\xd2X\xf0\xd9=}s\xeb\x22\xee\ +\x5ck%\x00\xf1\xca\xc7\x8a\x83M\xf5\xc6S\xfb\xfer\ +~\xe7\x81\x7f\xd9T\x9b\xe9N\xc1\xfe\xaf\xad\xac\xec/\ +5\x19\xce\xcc\xb9\xffk#\x0d5\x01\xf6\xb5'\x89U\ +Wv\x9fLL`,\xc4\x13i\x96\xc7\x92\xb4%\x1d\ +\x1e\xf9\xc2\xc5*\x13!\x84\x10B\x08!\x84\x10B\x08\ +!\x84\x10B\x08!\x84\x10B\x08!\x84\x10B\x08!\ +\x84\x10B\x08!\x84\x10B\x08!\x84\x10B\x08!\x84\ +\x10B\x08!\x84\x10B\x08!\xc4\xe8\xf8\xffA~\xc9\ +QK\x05\xc0\xad\x00\x00\x00\x00IEND\xaeB`\ +\x82\ +" + +qt_resource_name = b"\ +\x00\x03\ +\x00\x00p7\ +\x00i\ +\x00m\x00g\ +\x00\x08\ +\x0aaB\x7f\ +\x00i\ +\x00c\x00o\x00n\x00.\x00i\x00c\x00o\ +" + +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\x01\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x86\x0d, J\ +" + +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/gui/img/docxuntraceog.png b/gui/img/docxuntraceog.png new file mode 100644 index 0000000..069ae50 Binary files /dev/null and b/gui/img/docxuntraceog.png differ diff --git a/gui/img/icon.ico b/gui/img/icon.ico new file mode 100644 index 0000000..a75ac02 Binary files /dev/null and b/gui/img/icon.ico differ diff --git a/gui/modules/__init__.py b/gui/modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gui/modules/core/__init__.py b/gui/modules/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gui/modules/core/blur.py b/gui/modules/core/blur.py new file mode 100644 index 0000000..44af303 --- /dev/null +++ b/gui/modules/core/blur.py @@ -0,0 +1,133 @@ +# source: https://github.com/Opticos/GWSL-Source/blob/master/blur.py, +# https://www.cnblogs.com/zhiyiYo/p/14659981.html , +# https://github.com/ifwe/digsby/blob/master/digsby/src/gui/vista.py +import platform +import ctypes + + +if platform.system() == 'Windows': + from ctypes.wintypes import DWORD, BOOL, HRGN, HWND + + user32 = ctypes.windll.user32 + dwm = ctypes.windll.dwmapi + + + class ACCENTPOLICY(ctypes.Structure): + _fields_ = [ + ("AccentState", ctypes.c_uint), + ("AccentFlags", ctypes.c_uint), + ("GradientColor", ctypes.c_uint), + ("AnimationId", ctypes.c_uint) + ] + + + class WINDOWCOMPOSITIONATTRIBDATA(ctypes.Structure): + _fields_ = [ + ("Attribute", ctypes.c_int), + ("Data", ctypes.POINTER(ctypes.c_int)), + ("SizeOfData", ctypes.c_size_t) + ] + + + class DWM_BLURBEHIND(ctypes.Structure): + _fields_ = [ + ('dwFlags', DWORD), + ('fEnable', BOOL), + ('hRgnBlur', HRGN), + ('fTransitionOnMaximized', BOOL) + ] + + + class MARGINS(ctypes.Structure): + _fields_ = [("cxLeftWidth", ctypes.c_int), + ("cxRightWidth", ctypes.c_int), + ("cyTopHeight", ctypes.c_int), + ("cyBottomHeight", ctypes.c_int) + ] + + + SetWindowCompositionAttribute = user32.SetWindowCompositionAttribute + SetWindowCompositionAttribute.argtypes = (HWND, WINDOWCOMPOSITIONATTRIBDATA) + SetWindowCompositionAttribute.restype = ctypes.c_int + + +def ExtendFrameIntoClientArea(hwnd): + margins = MARGINS(-1, -1, -1, -1) + dwm.DwmExtendFrameIntoClientArea(hwnd, ctypes.byref(margins)) + + +def Win7Blur(hwnd, Acrylic): + if not Acrylic: + DWM_BB_ENABLE = 0x01 + bb = DWM_BLURBEHIND() + bb.dwFlags = DWM_BB_ENABLE + bb.fEnable = 1 + bb.hRgnBlur = 1 + dwm.DwmEnableBlurBehindWindow(hwnd, ctypes.byref(bb)) + else: + ExtendFrameIntoClientArea(hwnd) + + +def HEXtoRGBAint(HEX: str): + alpha = HEX[7:] + blue = HEX[5:7] + green = HEX[3:5] + red = HEX[1:3] + + gradient_color = alpha + blue + green + red + return int(gradient_color, base=16) + + +def blur(hwnd, hex_color=False, acrylic=False, dark=False): + accent = ACCENTPOLICY() + accent.AccentState = 3 # Default window Blur #ACCENT_ENABLE_BLURBEHIND + + gradient_color = 0 + + if hex_color: + gradient_color = HEXtoRGBAint(hex_color) + accent.AccentFlags = 2 # Window Blur With Accent Color #ACCENT_ENABLE_TRANSPARENTGRADIENT + + if acrylic: + accent.AccentState = 4 # UWP but LAG #ACCENT_ENABLE_ACRYLICBLURBEHIND + if not hex_color: # UWP without color is translucent + accent.AccentFlags = 2 + gradient_color = HEXtoRGBAint('#12121240') # placeholder color + + accent.GradientColor = gradient_color + + data = WINDOWCOMPOSITIONATTRIBDATA() + data.Attribute = 19 # WCA_ACCENT_POLICY + data.SizeOfData = ctypes.sizeof(accent) + data.Data = ctypes.cast(ctypes.pointer(accent), ctypes.POINTER(ctypes.c_int)) + + SetWindowCompositionAttribute(int(hwnd), data) + + if dark: + data.Attribute = 26 # WCA_USEDARKMODECOLORS + SetWindowCompositionAttribute(int(hwnd), data) + + +def BlurLinux(WID): # may not work in all distros (working in Deepin) + import os + + c = "xprop -f _KDE_NET_WM_BLUR_BEHIND_REGION 32c -set _KDE_NET_WM_BLUR_BEHIND_REGION 0 -id " + str(WID) + os.system(c) + + +def GlobalBlur(hwnd, hex_color=False, acrylic=False, dark=False): + release = platform.release() + system = platform.system() + + if system == 'Windows': + if release == 'Vista': + Win7Blur(hwnd, acrylic) + else: + release = int(float(release)) + if release == 10 or release == 8 or release == 11: + blur(hwnd, hex_color, acrylic, dark) + else: + Win7Blur(hwnd, acrylic) + + if system == 'Linux': + BlurLinux(hwnd) diff --git a/gui/modules/core/popup.py b/gui/modules/core/popup.py new file mode 100644 index 0000000..53124fe --- /dev/null +++ b/gui/modules/core/popup.py @@ -0,0 +1,26 @@ +import ctypes + + +def qtpopup(title, text): + """ + Popup using Qt + :param title: Title of popup + :param text: Text + :return: None + """ + from PySide6 import QtWidgets + QtWidgets.QMessageBox.information(None, title, text) + + +def popup(title, text, style=0): + """ + Styles: + 0 : OK + 1 : OK | Cancel + 2 : Abort | Retry | Ignore + 3 : Yes | No | Cancel + 4 : Yes | No + 5 : Retry | Cancel + 6 : Cancel | Try Again | Continue + """ + return ctypes.windll.user32.MessageBoxW(0, text, title, style) diff --git a/gui/modules/initialize/__init__.py b/gui/modules/initialize/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gui/modules/initialize/setup_ui.py b/gui/modules/initialize/setup_ui.py new file mode 100644 index 0000000..e8f18c9 --- /dev/null +++ b/gui/modules/initialize/setup_ui.py @@ -0,0 +1,8 @@ +from PySide6.QtWidgets import QMainWindow +from gui.gui import Ui_MainWindow +from gui.modules.core.blur import GlobalBlur +from gui.modules.initialize import styles + + +def on_load(ui: Ui_MainWindow, MainWindow: QMainWindow): + pass diff --git a/gui/modules/initialize/styles.py b/gui/modules/initialize/styles.py new file mode 100644 index 0000000..5210c8a --- /dev/null +++ b/gui/modules/initialize/styles.py @@ -0,0 +1,598 @@ +centralwidget_b = """ +QWidget { + background-color: rgba(30, 30, 30, 0); + color: rgba(255, 255, 255, 1); + font: 10pt "Segoe UI"; +} + +QScrollBar:vertical, +QScrollBar:horizontal { + border: none; + background: rgba(30, 30, 30, 0); + width: 10px; + margin: 15px 0 15px 0; + border-radius: 0px; +} +QScrollBar::handle:vertical, +QScrollBar::handle:horizontal { + background-color: rgba(139, 139, 139, 0); + min-height: 30px; + border-radius: 5px; +} +QScrollBar::handle:vertical:hover, +QScrollBar::handle:vertical:pressed, +QScrollBar::handle:horizontal:hover, +QScrollBar::handle:horizontal:pressed { + background-color: rgba(149, 149, 149, 0); +} +QScrollBar::sub-line:vertical, +QScrollBar::add-line:vertical, +QScrollBar::up-arrow:vertical, +QScrollBar::down-arrow:vertical { + height: 0px; +} +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, +QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical, +QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal, +QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + background: none; +} + +QPushButton { + color: white; + border-width: 1px; + border-radius:6px; + border-style: solid; + border-color: rgba(48, 48, 48, 0.5); + background-color: rgba(44, 45, 46, 0.2); +} +QPushButton:hover { + border-width: 2px; + background-color: rgba(50, 50, 50, 0.7); +} +QPushButton:pressed { + background-color: rgba(38, 39, 40, 0.7); +} +QPushButton:disabled { + background-color: rgba(67, 67, 67, 0.7); + border-color: rgba(0, 0, 0, 0.7); +} + +QLineEdit, QTextBrowser, QPlainTextEdit, QTextEdit { + border-width: 1px; + border-radius: 5px; + border-style: solid; + border-color: rgba(48, 48, 48); + background-color: rgba(36, 36, 36, 0); + font: 10pt "Segoe UI"; +} + +QListWidget, QListView, QTreeView { + border-width: 1px; + border-radius: 15px; + border-style: solid; + border-color: rgba(48, 48, 48); + padding: 10px; + background-color: rgba(100, 100, 100, 0); + font: 10pt "Segoe UI"; +} +QListWidget:item, QListView:item, QTreeView:item { + background-color: rgba(36, 36, 36, 0); + selection-color: white; +} +QListWidget:item:hover, QListView:item:hover, QTreeView:item:hover { + background-color: rgba(50, 50, 50, 0); +} +QListWidget:item:selected, QListView:item:selected, QTreeView:item:selected { + background-color: rgba(119, 119, 119, 1); +} + +QTreeView::branch:has-children:closed { + image: url(":/img/img/down.svg"); +} + +QTreeView::branch:has-children:open { + image: url(":/img/img/up.svg"); +} + +QComboBox +{ + border-width: 1px; + border-radius:6px; + border-style: solid; + border-color: rgba(48, 48, 48); + background-color: rgba(44, 45, 46, 0); + color: white; +} +QComboBox::disabled +{ + background-color: rgba(67, 67, 67, 0); + color: rgba(101, 101, 101, 1);; + border-color: rgba(67, 67, 67); +} +QComboBox:hover +{ + background-color: rgba(50, 50, 50, 0); +} +QComboBox:on +{ + background-color: rgba(67, 67, 67, 0); +} +QComboBox QAbstractItemView +{ + background-color: rgba(67, 67, 67, 0); + color: white; + selection-background-color: rgba(119, 119, 119, 0); + selection-color: white; + outline: 0; +} +QComboBox::drop-down +{ + subcontrol-origin: padding; + subcontrol-position: top right; + border-radius: 6px; +} + +QTabBar::tab +{ + background-color: rgba(44, 45, 46, 0); + color: white; + border-style: solid; + border-width: 1px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-color: rgba(48, 48, 48); + padding: 5px; +} +QTabBar::tab:disabled +{ + background-color: rgba(101, 101, 101, 0); + color: rgba(101, 101, 101, 1);; +} +QTabWidget::pane +{ + background-color: rgba(160, 160, 160, 0); + color: white; + border: 3px solid; + border-radius: 15px; + border-color: rgba(28, 28, 28); +} +QTabBar::tab:selected +{ + background-color: rgba(38, 39, 40, 0); + color: white; + border-style: solid; + border-width: 1px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-color: rgba(48, 48, 48); + padding: 5px; +} +QTabBar::tab:selected:disabled +{ + background-color: rgba(64, 64, 64, 0); + color: rgba(101, 101, 101, 1); +} +QTabBar::tab:!selected +{ + background-color: rgba(38, 38, 38, 0); +} +QTabBar::tab:!selected:hover +{ + background-color: rgba(50, 50, 50, 0); +} +QTabBar::tab:top:!selected +{ + margin-top: 3px; +} +QTabBar::tab:bottom:!selected +{ + margin-bottom: 3px; +} +QTabBar::tab:top, QTabBar::tab:bottom +{ + min-width: 8ex; + margin-right: -1px; + padding: 5px 10px 5px 10px; +} +QTabBar::tab:top:selected +{ + border-bottom-color: none; +} +QTabBar::tab:bottom:selected +{ + border-top-color: none; +} +QTabBar::tab:top:last, QTabBar::tab:bottom:last, +QTabBar::tab:top:only-one, QTabBar::tab:bottom:only-one +{ + margin-right: 0; +} +QTabBar::tab:left:!selected +{ + margin-right: 3px; +} +QTabBar::tab:right:!selected +{ + margin-left: 3px; +} +QTabBar::tab:left, QTabBar::tab:right +{ + min-height: 8ex; + margin-bottom: -1px; + padding: 10px 5px 10px 5px; +} +QTabBar::tab:left:selected +{ + border-left-color: none; +} +QTabBar::tab:right:selected +{ + border-right-color: none; +} +QTabBar::tab:left:last, QTabBar::tab:right:last, +QTabBar::tab:left:only-one, QTabBar::tab:right:only-one +{ + margin-bottom: 0; +} + +QSpinBox { + border-width: 1px; + border-radius: 5px; + border-style: solid; + border-color: rgba(48, 48, 48); + background-color: rgba(36, 36, 36, 0); + font: 10pt "Segoe UI"; +} +QSpinBox::up-button { + border: none; + background: none; +} +QSpinBox::down-button { + border: none; + background: none; +} + +QToolBox::tab { + border-style: solid; + border-width: 1px; + border-radius: 5px; + border-color: rgba(48, 48, 48, 0); +} + +QSlider::groove:horizontal { + border-radius: 1px; + height: 10px; + margin: 0px; + background-color: rgba(36, 36, 36, 0); +} +QSlider::groove:horizontal:hover { + background-color: rgba(48, 48, 48, 0); +} +QSlider::handle:horizontal { + background-color: white; + border: none; + width: 5px; + border-radius: 40px; +} +QSlider::handle:horizontal:hover { + background-color: rgba(191, 191, 191, 0); +} +QSlider::handle:horizontal:pressed { + background-color: rgba(191, 191, 191, 0); +} + +QProgressBar { + text-align: center; + color: white; + border-width: 1px; + border-radius: 10px; + border-color: rgba(58, 58, 58, 0.5); + border-style: inset; + background-color: rgba(32, 32, 32, 0.5); +} +QProgressBar::chunk { + background-color: rgba(132, 132, 132, 0.5); + border-radius: 5px; +} +""" + + +centralwidget_g = """ +QWidget { + background-color: #1e1e1e; + color: white; + font: 10pt "Segoe UI"; +} + +QScrollBar:vertical, +QScrollBar:horizontal { + border: none; + background: #1e1e1e; + width: 10px; + margin: 15px 0 15px 0; + border-radius: 0px; +} +QScrollBar::handle:vertical, +QScrollBar::handle:horizontal { + background-color: #8b8b8b; + min-height: 30px; + border-radius: 5px; +} +QScrollBar::handle:vertical:hover, +QScrollBar::handle:vertical:pressed, +QScrollBar::handle:horizontal:hover, +QScrollBar::handle:horizontal:pressed { + background-color: #959595; +} +QScrollBar::sub-line:vertical, +QScrollBar::add-line:vertical, +QScrollBar::up-arrow:vertical, +QScrollBar::down-arrow:vertical { + height: 0px; +} +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical, +QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical, +QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal, +QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + background: none; +} + +QPushButton { + color: white; + border-width: 1px; + border-radius:6px; + border-style: solid; + border-color: #303030; + background-color: #2c2d2e; +} +QPushButton:hover { + border-width: 2px; + background-color: #323232; +} +QPushButton:pressed { + background-color: #262728; +} +QPushButton:disabled { + background-color: #434343; + border-color: #0000; +} + +QLineEdit, QTextBrowser, QPlainTextEdit, QTextEdit { + border-width: 1px; + border-radius: 5px; + border-style: solid; + border-color: #303030; + background-color: #242424; + font: 10pt "Segoe UI"; +} + +QListWidget, QListView, QTreeView { + border-width: 1px; + border-radius: 15px; + border-style: solid; + border-color: #303030; + padding: 10px; + background-color: #242424; + font: 10pt "Segoe UI"; +} +QListWidget:item, QListView:item, QTreeView:item { + background-color: #242424; + selection-color: white; +} +QListWidget:item:hover, QListView:item:hover, QTreeView:item:hover { + background-color: #323232; +} +QListWidget:item:selected, QListView:item:selected, QTreeView:item:selected { + background-color: #777777; +} + +QTreeView::branch:has-children:closed { + image: url(":/img/img/down.svg"); +} + +QTreeView::branch:has-children:open { + image: url(":/img/img/up.svg"); +} + +QComboBox +{ + border-width: 1px; + border-radius:6px; + border-style: solid; + border-color: #303030; + background-color: #2c2d2e; + color: white; +} +QComboBox::disabled +{ + background-color: #434343; + color: #656565; + border-color: #434343; +} +QComboBox:hover +{ + background-color: #323232; +} +QComboBox:on +{ + background-color: #434343; +} +QComboBox QAbstractItemView +{ + background-color: #434343; + color: white; + selection-background-color: #777777; + selection-color: white; + outline: 0; +} +QComboBox::drop-down +{ + subcontrol-origin: padding; + subcontrol-position: top right; + border-radius: 6px; +} + +QTabBar::tab +{ + background-color: #2c2d2e; + color: white; + border-style: solid; + border-width: 1px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-color: #303030; + padding: 5px; +} +QTabBar::tab:disabled +{ + background-color: #656565; + color: #656565; +} +QTabWidget::pane +{ + background-color: #a0a0a0; + color: white; + border: 3px solid; + border-radius: 15px; + border-color: #1c1c1c; +} +QTabBar::tab:selected +{ + background-color: #262728; + color: white; + border-style: solid; + border-width: 1px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-color: #303030; + padding: 5px; +} +QTabBar::tab:selected:disabled +{ + background-color: #404040; + color: #656565; +} +QTabBar::tab:!selected +{ + background-color: #262626; +} +QTabBar::tab:!selected:hover +{ + background-color: #323232; +} +QTabBar::tab:top:!selected +{ + margin-top: 3px; +} +QTabBar::tab:bottom:!selected +{ + margin-bottom: 3px; +} +QTabBar::tab:top, QTabBar::tab:bottom +{ + min-width: 8ex; + margin-right: -1px; + padding: 5px 10px 5px 10px; +} +QTabBar::tab:top:selected +{ + border-bottom-color: none; +} +QTabBar::tab:bottom:selected +{ + border-top-color: none; +} +QTabBar::tab:top:last, QTabBar::tab:bottom:last, +QTabBar::tab:top:only-one, QTabBar::tab:bottom:only-one +{ + margin-right: 0; +} +QTabBar::tab:left:!selected +{ + margin-right: 3px; +} +QTabBar::tab:right:!selected +{ + margin-left: 3px; +} +QTabBar::tab:left, QTabBar::tab:right +{ + min-height: 8ex; + margin-bottom: -1px; + padding: 10px 5px 10px 5px; +} +QTabBar::tab:left:selected +{ + border-left-color: none; +} +QTabBar::tab:right:selected +{ + border-right-color: none; +} +QTabBar::tab:left:last, QTabBar::tab:right:last, +QTabBar::tab:left:only-one, QTabBar::tab:right:only-one +{ + margin-bottom: 0; +} + +QSpinBox { + border-width: 1px; + border-radius: 5px; + border-style: solid; + border-color: #303030; + background-color: #242424; + font: 10pt "Segoe UI"; +} +QSpinBox::up-button { + border: none; + background: none; +} +QSpinBox::down-button { + border: none; + background: none; +} + +QToolBox::tab { + border-style: solid; + border-width: 1px; + border-radius: 5px; + border-color: #303030; +} + +QSlider::groove:horizontal { + border-radius: 1px; + height: 10px; + margin: 0px; + background-color: #242424; +} +QSlider::groove:horizontal:hover { + background-color: #303030; +} +QSlider::handle:horizontal { + background-color: white; + border: none; + width: 5px; + border-radius: 40px; +} +QSlider::handle:horizontal:hover { + background-color: #bfbfbf; +} +QSlider::handle:horizontal:pressed { + background-color: #bfbfbf; +} + +QProgressBar { + text-align: center; + color: white; + border-width: 1px; + border-radius: 10px; + border-color: #3a3a3a; + border-style: inset; + background-color: #202020; +} +QProgressBar::chunk { + background-color: #848484; + border-radius: 5px; +} +""" diff --git a/modules/__init__.py b/modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d537b5c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +wheel +PySide6 +pyinstaller