1
0
Fork 0
mirror of https://github.com/Athemis/PyDSF.git synced 2025-04-20 20:09:13 +00:00

First commit

This commit is contained in:
Alexander Minges 2015-01-30 03:34:25 +01:00
commit 41b252a3c9
12 changed files with 2715 additions and 0 deletions

271
ui/Ui_mainwindow.py Normal file
View file

@ -0,0 +1,271 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '/home/alex/Dokumente/Programmieren/PyDSF/ui/mainwindow.ui'
#
# Created: Tue Oct 30 14:57:02 2012
# by: PyQt4 UI code generator 4.9.5
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(352, 548)
MainWindow.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
self.centralWidget = QtGui.QWidget(MainWindow)
self.centralWidget.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
self.gridLayout_2 = QtGui.QGridLayout(self.centralWidget)
self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
self.groupBox_experiment = QtGui.QGroupBox(self.centralWidget)
self.groupBox_experiment.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.groupBox_experiment.setFlat(False)
self.groupBox_experiment.setCheckable(False)
self.groupBox_experiment.setObjectName(_fromUtf8("groupBox_experiment"))
self.gridLayout = QtGui.QGridLayout(self.groupBox_experiment)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.label_instrument = QtGui.QLabel(self.groupBox_experiment)
self.label_instrument.setObjectName(_fromUtf8("label_instrument"))
self.gridLayout.addWidget(self.label_instrument, 0, 0, 1, 1)
self.comboBox_instrument = QtGui.QComboBox(self.groupBox_experiment)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.comboBox_instrument.sizePolicy().hasHeightForWidth())
self.comboBox_instrument.setSizePolicy(sizePolicy)
self.comboBox_instrument.setObjectName(_fromUtf8("comboBox_instrument"))
self.comboBox_instrument.addItem(_fromUtf8(""))
self.gridLayout.addWidget(self.comboBox_instrument, 0, 1, 1, 1)
self.groupBox_data = QtGui.QGroupBox(self.groupBox_experiment)
self.groupBox_data.setEnabled(True)
self.groupBox_data.setObjectName(_fromUtf8("groupBox_data"))
self.gridLayout_4 = QtGui.QGridLayout(self.groupBox_data)
self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4"))
self.listWidget_data = QtGui.QListWidget(self.groupBox_data)
self.listWidget_data.setAlternatingRowColors(True)
self.listWidget_data.setObjectName(_fromUtf8("listWidget_data"))
self.gridLayout_4.addWidget(self.listWidget_data, 0, 0, 1, 1)
self.buttonBox_open = QtGui.QDialogButtonBox(self.groupBox_data)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.buttonBox_open.sizePolicy().hasHeightForWidth())
self.buttonBox_open.setSizePolicy(sizePolicy)
self.buttonBox_open.setLayoutDirection(QtCore.Qt.LeftToRight)
self.buttonBox_open.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox_open.setStandardButtons(QtGui.QDialogButtonBox.Open)
self.buttonBox_open.setCenterButtons(False)
self.buttonBox_open.setObjectName(_fromUtf8("buttonBox_open"))
self.gridLayout_4.addWidget(self.buttonBox_open, 0, 1, 1, 1)
self.groupBox_replicates = QtGui.QGroupBox(self.groupBox_data)
self.groupBox_replicates.setCheckable(True)
self.groupBox_replicates.setChecked(False)
self.groupBox_replicates.setObjectName(_fromUtf8("groupBox_replicates"))
self.gridLayout_3 = QtGui.QGridLayout(self.groupBox_replicates)
self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
self.radioButton_rep_files = QtGui.QRadioButton(self.groupBox_replicates)
self.radioButton_rep_files.setEnabled(False)
self.radioButton_rep_files.setChecked(True)
self.radioButton_rep_files.setObjectName(_fromUtf8("radioButton_rep_files"))
self.gridLayout_3.addWidget(self.radioButton_rep_files, 0, 0, 1, 1)
self.gridLayout_4.addWidget(self.groupBox_replicates, 1, 0, 1, 2)
self.gridLayout.addWidget(self.groupBox_data, 1, 0, 1, 2)
self.groupBox_temp = QtGui.QGroupBox(self.groupBox_experiment)
self.groupBox_temp.setEnabled(True)
self.groupBox_temp.setAutoFillBackground(False)
self.groupBox_temp.setCheckable(False)
self.groupBox_temp.setObjectName(_fromUtf8("groupBox_temp"))
self.formLayout = QtGui.QFormLayout(self.groupBox_temp)
self.formLayout.setFieldGrowthPolicy(QtGui.QFormLayout.ExpandingFieldsGrow)
self.formLayout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout.setFormAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
self.formLayout.setObjectName(_fromUtf8("formLayout"))
self.label_tmin = QtGui.QLabel(self.groupBox_temp)
self.label_tmin.setObjectName(_fromUtf8("label_tmin"))
self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.label_tmin)
self.doubleSpinBox_tmin = QtGui.QDoubleSpinBox(self.groupBox_temp)
self.doubleSpinBox_tmin.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.doubleSpinBox_tmin.setDecimals(1)
self.doubleSpinBox_tmin.setProperty("value", 25.0)
self.doubleSpinBox_tmin.setObjectName(_fromUtf8("doubleSpinBox_tmin"))
self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.doubleSpinBox_tmin)
self.label_tmax = QtGui.QLabel(self.groupBox_temp)
self.label_tmax.setObjectName(_fromUtf8("label_tmax"))
self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.label_tmax)
self.doubleSpinBox_tmax = QtGui.QDoubleSpinBox(self.groupBox_temp)
self.doubleSpinBox_tmax.setDecimals(1)
self.doubleSpinBox_tmax.setProperty("value", 95.0)
self.doubleSpinBox_tmax.setObjectName(_fromUtf8("doubleSpinBox_tmax"))
self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.doubleSpinBox_tmax)
self.label_dt = QtGui.QLabel(self.groupBox_temp)
self.label_dt.setObjectName(_fromUtf8("label_dt"))
self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.label_dt)
self.doubleSpinBox_dt = QtGui.QDoubleSpinBox(self.groupBox_temp)
self.doubleSpinBox_dt.setDecimals(1)
self.doubleSpinBox_dt.setProperty("value", 1.0)
self.doubleSpinBox_dt.setObjectName(_fromUtf8("doubleSpinBox_dt"))
self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.doubleSpinBox_dt)
self.gridLayout.addWidget(self.groupBox_temp, 2, 0, 1, 1)
self.groupBox_cutoff = QtGui.QGroupBox(self.groupBox_experiment)
self.groupBox_cutoff.setEnabled(True)
self.groupBox_cutoff.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.groupBox_cutoff.setCheckable(True)
self.groupBox_cutoff.setChecked(False)
self.groupBox_cutoff.setObjectName(_fromUtf8("groupBox_cutoff"))
self.formLayout_2 = QtGui.QFormLayout(self.groupBox_cutoff)
self.formLayout_2.setFieldGrowthPolicy(QtGui.QFormLayout.ExpandingFieldsGrow)
self.formLayout_2.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout_2.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.formLayout_2.setObjectName(_fromUtf8("formLayout_2"))
self.label_cutoff_high = QtGui.QLabel(self.groupBox_cutoff)
self.label_cutoff_high.setObjectName(_fromUtf8("label_cutoff_high"))
self.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.label_cutoff_high)
self.doubleSpinBox_upper = QtGui.QDoubleSpinBox(self.groupBox_cutoff)
self.doubleSpinBox_upper.setPrefix(_fromUtf8(""))
self.doubleSpinBox_upper.setDecimals(1)
self.doubleSpinBox_upper.setObjectName(_fromUtf8("doubleSpinBox_upper"))
self.formLayout_2.setWidget(0, QtGui.QFormLayout.FieldRole, self.doubleSpinBox_upper)
self.label_cutoff_low = QtGui.QLabel(self.groupBox_cutoff)
self.label_cutoff_low.setObjectName(_fromUtf8("label_cutoff_low"))
self.formLayout_2.setWidget(1, QtGui.QFormLayout.LabelRole, self.label_cutoff_low)
self.doubleSpinBox_lower = QtGui.QDoubleSpinBox(self.groupBox_cutoff)
self.doubleSpinBox_lower.setDecimals(1)
self.doubleSpinBox_lower.setObjectName(_fromUtf8("doubleSpinBox_lower"))
self.formLayout_2.setWidget(1, QtGui.QFormLayout.FieldRole, self.doubleSpinBox_lower)
self.gridLayout.addWidget(self.groupBox_cutoff, 2, 1, 1, 1)
self.groupBox_signal_threshold = QtGui.QGroupBox(self.groupBox_experiment)
self.groupBox_signal_threshold.setEnabled(True)
self.groupBox_signal_threshold.setCheckable(True)
self.groupBox_signal_threshold.setChecked(False)
self.groupBox_signal_threshold.setObjectName(_fromUtf8("groupBox_signal_threshold"))
self.verticalLayout = QtGui.QVBoxLayout(self.groupBox_signal_threshold)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.spinBox_signal_threshold = QtGui.QSpinBox(self.groupBox_signal_threshold)
self.spinBox_signal_threshold.setMaximum(1000000)
self.spinBox_signal_threshold.setObjectName(_fromUtf8("spinBox_signal_threshold"))
self.verticalLayout.addWidget(self.spinBox_signal_threshold)
self.gridLayout.addWidget(self.groupBox_signal_threshold, 3, 0, 1, 1)
self.groupBox_cbar = QtGui.QGroupBox(self.groupBox_experiment)
self.groupBox_cbar.setEnabled(True)
self.groupBox_cbar.setCheckable(True)
self.groupBox_cbar.setChecked(False)
self.groupBox_cbar.setObjectName(_fromUtf8("groupBox_cbar"))
self.formLayout_4 = QtGui.QFormLayout(self.groupBox_cbar)
self.formLayout_4.setFieldGrowthPolicy(QtGui.QFormLayout.ExpandingFieldsGrow)
self.formLayout_4.setObjectName(_fromUtf8("formLayout_4"))
self.label_cbar_start = QtGui.QLabel(self.groupBox_cbar)
self.label_cbar_start.setObjectName(_fromUtf8("label_cbar_start"))
self.formLayout_4.setWidget(0, QtGui.QFormLayout.LabelRole, self.label_cbar_start)
self.doubleSpinBox_cbar_start = QtGui.QDoubleSpinBox(self.groupBox_cbar)
self.doubleSpinBox_cbar_start.setDecimals(1)
self.doubleSpinBox_cbar_start.setObjectName(_fromUtf8("doubleSpinBox_cbar_start"))
self.formLayout_4.setWidget(0, QtGui.QFormLayout.FieldRole, self.doubleSpinBox_cbar_start)
self.label_cbar_end = QtGui.QLabel(self.groupBox_cbar)
self.label_cbar_end.setObjectName(_fromUtf8("label_cbar_end"))
self.formLayout_4.setWidget(2, QtGui.QFormLayout.LabelRole, self.label_cbar_end)
self.doubleSpinBox_cbar_end = QtGui.QDoubleSpinBox(self.groupBox_cbar)
self.doubleSpinBox_cbar_end.setDecimals(1)
self.doubleSpinBox_cbar_end.setObjectName(_fromUtf8("doubleSpinBox_cbar_end"))
self.formLayout_4.setWidget(2, QtGui.QFormLayout.FieldRole, self.doubleSpinBox_cbar_end)
self.gridLayout.addWidget(self.groupBox_cbar, 3, 1, 1, 1)
self.gridLayout_2.addWidget(self.groupBox_experiment, 0, 0, 1, 1)
self.buttonBox_process = QtGui.QDialogButtonBox(self.centralWidget)
self.buttonBox_process.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
self.buttonBox_process.setObjectName(_fromUtf8("buttonBox_process"))
self.gridLayout_2.addWidget(self.buttonBox_process, 1, 0, 1, 1)
MainWindow.setCentralWidget(self.centralWidget)
self.menuBar = QtGui.QMenuBar(MainWindow)
self.menuBar.setGeometry(QtCore.QRect(0, 0, 352, 24))
self.menuBar.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
self.menuBar.setObjectName(_fromUtf8("menuBar"))
self.menuFile = QtGui.QMenu(self.menuBar)
self.menuFile.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
self.menuFile.setObjectName(_fromUtf8("menuFile"))
self.menuHelp = QtGui.QMenu(self.menuBar)
self.menuHelp.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
self.menuHelp.setObjectName(_fromUtf8("menuHelp"))
MainWindow.setMenuBar(self.menuBar)
self.statusBar = QtGui.QStatusBar(MainWindow)
self.statusBar.setObjectName(_fromUtf8("statusBar"))
MainWindow.setStatusBar(self.statusBar)
self.actionQuit = QtGui.QAction(MainWindow)
self.actionQuit.setObjectName(_fromUtf8("actionQuit"))
self.actionAbout = QtGui.QAction(MainWindow)
self.actionAbout.setObjectName(_fromUtf8("actionAbout"))
self.actionAbout_Qt = QtGui.QAction(MainWindow)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/qtlogo.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionAbout_Qt.setIcon(icon)
self.actionAbout_Qt.setObjectName(_fromUtf8("actionAbout_Qt"))
self.menuFile.addAction(self.actionQuit)
self.menuHelp.addAction(self.actionAbout)
self.menuHelp.addAction(self.actionAbout_Qt)
self.menuBar.addAction(self.menuFile.menuAction())
self.menuBar.addAction(self.menuHelp.menuAction())
self.label_instrument.setBuddy(self.comboBox_instrument)
self.label_tmin.setBuddy(self.doubleSpinBox_tmin)
self.label_tmax.setBuddy(self.doubleSpinBox_tmax)
self.label_dt.setBuddy(self.doubleSpinBox_dt)
self.label_cutoff_high.setBuddy(self.doubleSpinBox_upper)
self.label_cutoff_low.setBuddy(self.doubleSpinBox_lower)
self.label_cbar_start.setBuddy(self.doubleSpinBox_cbar_start)
self.label_cbar_end.setBuddy(self.doubleSpinBox_cbar_end)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "PyDSF", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_experiment.setTitle(QtGui.QApplication.translate("MainWindow", "Experimental Setup", None, QtGui.QApplication.UnicodeUTF8))
self.label_instrument.setText(QtGui.QApplication.translate("MainWindow", "Instrument", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox_instrument.setItemText(0, QtGui.QApplication.translate("MainWindow", "Analytik Jena qTOWER 2.0/2.2", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_data.setToolTip(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>Add data files to the experiment. If multiple files are loaded, they are treated as replicates.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_data.setTitle(QtGui.QApplication.translate("MainWindow", "Data File", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_replicates.setTitle(QtGui.QApplication.translate("MainWindow", "Replicates", None, QtGui.QApplication.UnicodeUTF8))
self.radioButton_rep_files.setText(QtGui.QApplication.translate("MainWindow", "Files", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_temp.setToolTip(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>Temperature range of the data points. Only applies, if the data file does not contain any temperature information.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_temp.setTitle(QtGui.QApplication.translate("MainWindow", "Temperature settings", None, QtGui.QApplication.UnicodeUTF8))
self.label_tmin.setText(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>T<span style=\" vertical-align:sub;\">min</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.doubleSpinBox_tmin.setSuffix(QtGui.QApplication.translate("MainWindow", " °C", None, QtGui.QApplication.UnicodeUTF8))
self.label_tmax.setText(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>T<span style=\" vertical-align:sub;\">max</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.doubleSpinBox_tmax.setSuffix(QtGui.QApplication.translate("MainWindow", " °C", None, QtGui.QApplication.UnicodeUTF8))
self.label_dt.setText(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>&Delta;T</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.doubleSpinBox_dt.setSuffix(QtGui.QApplication.translate("MainWindow", " °C", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_cutoff.setToolTip(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>Only T<span style=\" vertical-align:sub;\">m</span> values within this limit are considered valid.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_cutoff.setTitle(QtGui.QApplication.translate("MainWindow", "Cutoff", None, QtGui.QApplication.UnicodeUTF8))
self.label_cutoff_high.setText(QtGui.QApplication.translate("MainWindow", "Upper", None, QtGui.QApplication.UnicodeUTF8))
self.doubleSpinBox_upper.setSuffix(QtGui.QApplication.translate("MainWindow", " °C", None, QtGui.QApplication.UnicodeUTF8))
self.label_cutoff_low.setText(QtGui.QApplication.translate("MainWindow", "Lower", None, QtGui.QApplication.UnicodeUTF8))
self.doubleSpinBox_lower.setSuffix(QtGui.QApplication.translate("MainWindow", " °C", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_signal_threshold.setToolTip(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>If the signal exceeds this threshold, the coresponding well is assumed to be denatured.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_signal_threshold.setTitle(QtGui.QApplication.translate("MainWindow", "Signal Threshold", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_cbar.setToolTip(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>Defines the range of the colorbar used for the T<span style=\" vertical-align:sub;\">m</span> heatmap.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_cbar.setTitle(QtGui.QApplication.translate("MainWindow", "Colorbar", None, QtGui.QApplication.UnicodeUTF8))
self.label_cbar_start.setText(QtGui.QApplication.translate("MainWindow", "Start", None, QtGui.QApplication.UnicodeUTF8))
self.doubleSpinBox_cbar_start.setSuffix(QtGui.QApplication.translate("MainWindow", " °C", None, QtGui.QApplication.UnicodeUTF8))
self.label_cbar_end.setText(QtGui.QApplication.translate("MainWindow", "End", None, QtGui.QApplication.UnicodeUTF8))
self.doubleSpinBox_cbar_end.setSuffix(QtGui.QApplication.translate("MainWindow", " °C", None, QtGui.QApplication.UnicodeUTF8))
self.menuFile.setTitle(QtGui.QApplication.translate("MainWindow", "File", None, QtGui.QApplication.UnicodeUTF8))
self.menuHelp.setTitle(QtGui.QApplication.translate("MainWindow", "Help", None, QtGui.QApplication.UnicodeUTF8))
self.actionQuit.setText(QtGui.QApplication.translate("MainWindow", "Quit", None, QtGui.QApplication.UnicodeUTF8))
self.actionAbout.setText(QtGui.QApplication.translate("MainWindow", "About", None, QtGui.QApplication.UnicodeUTF8))
self.actionAbout_Qt.setText(QtGui.QApplication.translate("MainWindow", "About Qt", None, QtGui.QApplication.UnicodeUTF8))
import icons_rc
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

0
ui/__init__.py Normal file
View file

5
ui/icons.qrc Normal file
View file

@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/">
<file>qtlogo.svg</file>
</qresource>
</RCC>

410
ui/icons_rc.py Normal file
View file

@ -0,0 +1,410 @@
# -*- coding: utf-8 -*-
# Resource object code
#
# Created: Di. Okt 30 14:57:23 2012
# by: The Resource Compiler for PyQt (Qt v4.8.3)
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore
qt_resource_data = "\
\x00\x00\x17\x6d\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\
\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\
\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\
\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\
\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\
\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\
\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\
\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\
\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\
\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\
\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\
\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\
\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\
\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\
\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x30\x22\x0a\x20\x20\
\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x37\x31\x2e\x35\x32\x33\x36\
\x38\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x30\
\x35\x2e\x30\x34\x39\x33\x32\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\
\x73\x76\x67\x32\x22\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\
\x74\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\
\x64\x61\x74\x61\x31\x30\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\
\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\
\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\
\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\
\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\
\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\
\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\
\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\
\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\
\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\
\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\
\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\
\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\
\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\
\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\
\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\
\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x64\x65\
\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\
\x34\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x72\x65\x63\x74\x0a\x20\x20\
\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x33\x36\x2e\x36\x39\
\x39\x35\x34\x22\x0a\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\
\x3d\x22\x31\x34\x37\x2e\x36\x39\x38\x33\x36\x22\x0a\x20\x20\x20\
\x20\x20\x78\x3d\x22\x32\x34\x2e\x33\x35\x34\x35\x31\x37\x22\x0a\
\x20\x20\x20\x20\x20\x79\x3d\x22\x32\x38\x2e\x32\x38\x32\x36\x36\
\x35\x22\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\x63\x74\
\x32\x39\x39\x38\x22\x0a\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\
\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x66\
\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\
\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\
\x3c\x67\x0a\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x34\x36\
\x2e\x34\x30\x34\x39\x2c\x33\x32\x2e\x35\x30\x38\x33\x29\x22\x0a\
\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\
\x3e\x0a\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\
\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\
\x6c\x61\x74\x65\x28\x34\x33\x32\x2c\x2d\x31\x33\x33\x29\x22\x0a\
\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x32\x33\x39\x36\
\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\
\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x2d\x33\x37\
\x38\x2e\x33\x33\x33\x32\x38\x2c\x32\x39\x39\x2e\x32\x35\x33\x35\
\x38\x20\x2d\x37\x2e\x32\x36\x31\x38\x34\x2c\x2d\x36\x2e\x36\x37\
\x37\x31\x31\x20\x30\x2e\x30\x31\x31\x38\x2c\x2d\x38\x34\x2e\x37\
\x31\x32\x34\x39\x20\x63\x20\x30\x2e\x30\x31\x31\x37\x2c\x2d\x38\
\x33\x2e\x36\x32\x36\x30\x39\x20\x30\x2e\x30\x33\x38\x38\x2c\x2d\
\x38\x34\x2e\x37\x38\x34\x35\x35\x20\x32\x2e\x31\x31\x34\x33\x35\
\x2c\x2d\x39\x30\x2e\x33\x33\x31\x39\x36\x20\x34\x2e\x34\x33\x37\
\x30\x37\x2c\x2d\x31\x31\x2e\x38\x35\x39\x31\x33\x20\x31\x31\x2e\
\x31\x30\x37\x31\x33\x2c\x2d\x31\x35\x2e\x38\x39\x33\x30\x36\x20\
\x32\x37\x2e\x38\x39\x37\x34\x39\x2c\x2d\x31\x36\x2e\x38\x37\x31\
\x38\x39\x20\x31\x30\x2e\x30\x36\x39\x38\x31\x2c\x2d\x30\x2e\x35\
\x38\x37\x30\x34\x20\x31\x33\x2e\x31\x38\x33\x35\x38\x2c\x2d\x30\
\x2e\x31\x36\x39\x35\x37\x20\x37\x36\x2c\x31\x30\x2e\x31\x38\x39\
\x34\x38\x20\x6c\x20\x36\x35\x2e\x35\x2c\x31\x30\x2e\x38\x30\x31\
\x36\x20\x30\x2c\x36\x39\x2e\x39\x36\x32\x36\x33\x20\x63\x20\x30\
\x2c\x35\x33\x2e\x39\x30\x32\x32\x38\x20\x2d\x30\x2e\x32\x39\x33\
\x31\x39\x2c\x37\x30\x2e\x39\x32\x38\x35\x39\x20\x2d\x31\x2e\x32\
\x37\x37\x32\x32\x2c\x37\x34\x2e\x31\x37\x30\x35\x38\x20\x2d\x31\
\x2e\x35\x36\x37\x38\x38\x2c\x35\x2e\x31\x36\x35\x35\x34\x20\x2d\
\x36\x2e\x37\x32\x39\x32\x35\x2c\x31\x32\x2e\x31\x30\x32\x37\x33\
\x20\x2d\x31\x30\x2e\x37\x33\x37\x34\x33\x2c\x31\x34\x2e\x34\x33\
\x31\x37\x34\x20\x2d\x31\x2e\x39\x38\x36\x39\x39\x2c\x31\x2e\x31\
\x35\x34\x35\x37\x20\x2d\x32\x36\x2e\x30\x36\x30\x32\x39\x2c\x35\
\x2e\x36\x30\x33\x39\x38\x20\x2d\x37\x31\x2e\x39\x38\x35\x33\x35\
\x2c\x31\x33\x2e\x33\x30\x34\x38\x39\x20\x2d\x33\x37\x2e\x39\x35\
\x2c\x36\x2e\x33\x36\x33\x36\x31\x20\x2d\x36\x39\x2e\x39\x2c\x31\
\x31\x2e\x37\x35\x39\x30\x38\x20\x2d\x37\x31\x2c\x31\x31\x2e\x39\
\x38\x39\x39\x32\x20\x2d\x31\x2e\x34\x30\x35\x31\x2c\x30\x2e\x32\
\x39\x34\x38\x37\x20\x2d\x34\x2e\x31\x36\x30\x30\x33\x2c\x2d\x31\
\x2e\x35\x36\x36\x33\x38\x20\x2d\x39\x2e\x32\x36\x31\x38\x34\x2c\
\x2d\x36\x2e\x32\x35\x37\x33\x39\x20\x7a\x20\x6d\x20\x39\x31\x2e\
\x33\x38\x36\x38\x34\x2c\x2d\x32\x33\x2e\x31\x37\x37\x31\x31\x20\
\x63\x20\x32\x2e\x32\x35\x36\x34\x31\x2c\x30\x20\x32\x2e\x33\x37\
\x35\x2c\x2d\x30\x2e\x33\x32\x34\x35\x36\x20\x32\x2e\x33\x37\x35\
\x2c\x2d\x36\x2e\x35\x20\x30\x2c\x2d\x35\x2e\x37\x38\x31\x31\x33\
\x20\x2d\x30\x2e\x32\x31\x35\x39\x39\x2c\x2d\x36\x2e\x35\x20\x2d\
\x31\x2e\x39\x35\x32\x39\x35\x2c\x2d\x36\x2e\x35\x20\x2d\x33\x2e\
\x37\x30\x33\x38\x38\x2c\x30\x20\x2d\x36\x2e\x38\x35\x32\x31\x34\
\x2c\x2d\x32\x2e\x32\x34\x31\x33\x36\x20\x2d\x38\x2e\x36\x30\x33\
\x34\x37\x2c\x2d\x36\x2e\x31\x32\x35\x31\x33\x20\x2d\x30\x2e\x39\
\x36\x36\x30\x39\x2c\x2d\x32\x2e\x31\x34\x32\x33\x39\x20\x2d\x31\
\x2e\x35\x37\x33\x36\x31\x2c\x2d\x34\x2e\x30\x33\x35\x35\x39\x20\
\x2d\x31\x2e\x33\x35\x30\x30\x35\x2c\x2d\x34\x2e\x32\x30\x37\x31\
\x20\x30\x2e\x32\x32\x33\x35\x36\x2c\x2d\x30\x2e\x31\x37\x31\x35\
\x31\x20\x32\x2e\x35\x33\x32\x38\x38\x2c\x2d\x31\x2e\x35\x32\x39\
\x33\x39\x20\x35\x2e\x31\x33\x31\x38\x32\x2c\x2d\x33\x2e\x30\x31\
\x37\x35\x31\x20\x31\x32\x2e\x39\x30\x33\x30\x36\x2c\x2d\x37\x2e\
\x33\x38\x38\x31\x32\x20\x31\x38\x2e\x36\x38\x37\x32\x38\x2c\x2d\
\x32\x33\x2e\x39\x36\x31\x36\x39\x20\x31\x38\x2e\x37\x32\x34\x30\
\x39\x2c\x2d\x35\x33\x2e\x36\x35\x30\x32\x36\x20\x30\x2e\x30\x34\
\x34\x33\x2c\x2d\x33\x35\x2e\x37\x30\x39\x37\x33\x20\x2d\x38\x2e\
\x39\x34\x37\x30\x34\x2c\x2d\x35\x32\x2e\x36\x33\x38\x33\x35\x20\
\x2d\x33\x30\x2e\x32\x36\x35\x39\x31\x2c\x2d\x35\x36\x2e\x39\x38\
\x33\x38\x31\x20\x2d\x36\x2e\x37\x30\x33\x35\x34\x2c\x2d\x31\x2e\
\x33\x36\x36\x34\x20\x2d\x31\x34\x2e\x33\x30\x37\x30\x38\x2c\x2d\
\x30\x2e\x36\x33\x33\x31\x32\x20\x2d\x32\x30\x2e\x32\x37\x32\x39\
\x32\x2c\x31\x2e\x39\x35\x35\x31\x31\x20\x2d\x38\x2e\x39\x31\x31\
\x34\x38\x2c\x33\x2e\x38\x36\x36\x31\x37\x20\x2d\x31\x35\x2e\x36\
\x39\x38\x37\x31\x2c\x31\x34\x2e\x32\x31\x34\x37\x34\x20\x2d\x31\
\x39\x2e\x30\x33\x38\x38\x33\x2c\x32\x39\x2e\x30\x32\x38\x37\x20\
\x2d\x32\x2e\x33\x37\x35\x34\x35\x2c\x31\x30\x2e\x35\x33\x35\x35\
\x20\x2d\x32\x2e\x33\x34\x36\x36\x32\x2c\x33\x39\x2e\x33\x37\x35\
\x30\x39\x20\x30\x2e\x30\x35\x30\x35\x2c\x35\x30\x2e\x35\x20\x33\
\x2e\x35\x31\x36\x34\x34\x2c\x31\x36\x2e\x33\x31\x39\x37\x36\x20\
\x31\x31\x2e\x38\x31\x35\x33\x36\x2c\x32\x38\x2e\x34\x31\x32\x35\
\x34\x20\x32\x31\x2e\x37\x37\x37\x36\x34\x2c\x33\x31\x2e\x37\x33\
\x33\x33\x20\x33\x2e\x36\x38\x39\x33\x33\x2c\x31\x2e\x32\x32\x39\
\x37\x37\x20\x34\x2e\x32\x30\x33\x36\x34\x2c\x31\x2e\x38\x33\x38\
\x33\x31\x20\x35\x2e\x37\x35\x34\x34\x2c\x36\x2e\x38\x30\x38\x35\
\x39\x20\x32\x2e\x34\x31\x31\x38\x35\x2c\x37\x2e\x37\x33\x30\x31\
\x36\x20\x34\x2e\x35\x36\x36\x37\x36\x2c\x31\x31\x2e\x34\x38\x30\
\x38\x38\x20\x38\x2e\x30\x30\x31\x31\x36\x2c\x31\x33\x2e\x39\x32\
\x36\x33\x39\x20\x33\x2e\x34\x33\x35\x31\x33\x2c\x32\x2e\x34\x34\
\x36\x30\x32\x20\x31\x30\x2e\x32\x33\x35\x37\x35\x2c\x34\x2e\x30\
\x37\x36\x35\x36\x20\x31\x34\x2e\x34\x31\x39\x35\x35\x2c\x33\x2e\
\x34\x35\x37\x32\x38\x20\x31\x2e\x35\x38\x31\x32\x35\x2c\x2d\x30\
\x2e\x32\x33\x34\x30\x36\x20\x33\x2e\x39\x34\x33\x37\x35\x2c\x2d\
\x30\x2e\x34\x32\x35\x35\x36\x20\x35\x2e\x32\x35\x2c\x2d\x30\x2e\
\x34\x32\x35\x35\x36\x20\x7a\x20\x6d\x20\x2d\x32\x32\x2e\x36\x30\
\x39\x30\x36\x2c\x2d\x33\x37\x2e\x33\x30\x34\x37\x33\x20\x63\x20\
\x2d\x33\x2e\x30\x34\x38\x39\x36\x2c\x2d\x31\x2e\x35\x32\x30\x30\
\x37\x20\x2d\x36\x2e\x37\x30\x39\x33\x37\x2c\x2d\x36\x2e\x38\x33\
\x36\x36\x35\x20\x2d\x37\x2e\x39\x38\x33\x39\x35\x2c\x2d\x31\x31\
\x2e\x35\x39\x36\x33\x31\x20\x2d\x34\x2e\x31\x36\x37\x35\x39\x2c\
\x2d\x31\x35\x2e\x35\x36\x33\x30\x37\x20\x2d\x33\x2e\x38\x31\x38\
\x35\x31\x2c\x2d\x35\x34\x2e\x30\x39\x34\x33\x20\x30\x2e\x35\x38\
\x39\x38\x39\x2c\x2d\x36\x35\x2e\x31\x31\x31\x39\x38\x20\x32\x2e\
\x30\x30\x31\x31\x33\x2c\x2d\x35\x2e\x30\x30\x31\x32\x39\x20\x36\
\x2e\x36\x32\x32\x33\x37\x2c\x2d\x38\x2e\x39\x38\x36\x39\x38\x20\
\x31\x30\x2e\x34\x32\x30\x30\x35\x2c\x2d\x38\x2e\x39\x38\x36\x39\
\x38\x20\x34\x2e\x32\x30\x32\x34\x34\x2c\x30\x20\x39\x2e\x34\x38\
\x37\x35\x31\x2c\x35\x2e\x30\x36\x37\x31\x39\x20\x31\x31\x2e\x34\
\x35\x31\x31\x31\x2c\x31\x30\x2e\x39\x37\x39\x30\x35\x20\x33\x2e\
\x34\x37\x32\x33\x38\x2c\x31\x30\x2e\x34\x35\x34\x33\x34\x20\x34\
\x2e\x30\x35\x37\x34\x36\x2c\x34\x35\x2e\x35\x34\x38\x37\x37\x20\
\x31\x2e\x30\x30\x35\x32\x39\x2c\x36\x30\x2e\x32\x39\x39\x33\x34\
\x20\x2d\x32\x2e\x34\x32\x36\x38\x36\x2c\x31\x31\x2e\x37\x32\x38\
\x35\x39\x20\x2d\x38\x2e\x38\x35\x39\x36\x35\x2c\x31\x37\x2e\x37\
\x31\x38\x36\x37\x20\x2d\x31\x35\x2e\x34\x38\x32\x33\x39\x2c\x31\
\x34\x2e\x34\x31\x36\x38\x38\x20\x7a\x20\x6d\x20\x36\x36\x2e\x39\
\x38\x34\x30\x36\x2c\x37\x2e\x32\x35\x36\x34\x31\x20\x63\x20\x39\
\x2e\x34\x36\x32\x34\x32\x2c\x2d\x32\x2e\x31\x30\x31\x35\x35\x20\
\x31\x30\x2c\x2d\x32\x2e\x35\x36\x36\x30\x35\x20\x31\x30\x2c\x2d\
\x38\x2e\x36\x34\x30\x33\x39\x20\x30\x2c\x2d\x34\x2e\x37\x31\x38\
\x31\x32\x20\x2d\x30\x2e\x32\x33\x33\x39\x31\x2c\x2d\x35\x2e\x33\
\x37\x36\x35\x37\x20\x2d\x31\x2e\x37\x35\x2c\x2d\x34\x2e\x39\x32\
\x36\x31\x37\x20\x2d\x35\x2e\x39\x39\x37\x37\x38\x2c\x31\x2e\x37\
\x38\x31\x38\x36\x20\x2d\x37\x2e\x33\x39\x34\x39\x38\x2c\x31\x2e\
\x37\x39\x33\x36\x35\x20\x2d\x39\x2e\x32\x39\x30\x32\x39\x2c\x30\
\x2e\x30\x37\x38\x34\x20\x2d\x31\x2e\x38\x34\x39\x39\x38\x2c\x2d\
\x31\x2e\x36\x37\x34\x32\x20\x2d\x31\x2e\x39\x35\x39\x37\x31\x2c\
\x2d\x33\x2e\x32\x32\x30\x36\x34\x20\x2d\x31\x2e\x39\x35\x39\x37\
\x31\x2c\x2d\x32\x37\x2e\x36\x31\x38\x35\x32\x20\x6c\x20\x30\x2c\
\x2d\x32\x35\x2e\x38\x34\x35\x30\x31\x20\x36\x2c\x30\x20\x36\x2c\
\x30\x20\x30\x2c\x2d\x35\x2e\x38\x37\x30\x38\x33\x20\x30\x2c\x2d\
\x35\x2e\x38\x37\x30\x38\x34\x20\x2d\x36\x2c\x2d\x30\x2e\x36\x37\
\x38\x38\x32\x20\x2d\x36\x2c\x2d\x30\x2e\x36\x37\x38\x38\x32\x20\
\x30\x2c\x2d\x39\x2e\x33\x39\x31\x33\x33\x20\x63\x20\x30\x2c\x2d\
\x35\x2e\x31\x36\x35\x32\x33\x20\x2d\x30\x2e\x33\x33\x37\x35\x2c\
\x2d\x39\x2e\x35\x39\x36\x38\x31\x20\x2d\x30\x2e\x37\x35\x2c\x2d\
\x39\x2e\x38\x34\x37\x39\x36\x20\x2d\x30\x2e\x34\x31\x32\x35\x2c\
\x2d\x30\x2e\x32\x35\x31\x31\x34\x20\x2d\x32\x2e\x39\x36\x35\x37\
\x2c\x2d\x30\x2e\x36\x31\x35\x32\x20\x2d\x35\x2e\x36\x37\x33\x37\
\x37\x2c\x2d\x30\x2e\x38\x30\x39\x30\x31\x20\x6c\x20\x2d\x34\x2e\
\x39\x32\x33\x37\x38\x2c\x2d\x30\x2e\x33\x35\x32\x33\x39\x20\x2d\
\x31\x2e\x37\x31\x35\x35\x38\x2c\x37\x20\x63\x20\x2d\x30\x2e\x39\
\x34\x33\x35\x37\x2c\x33\x2e\x38\x35\x20\x2d\x31\x2e\x39\x39\x38\
\x39\x35\x2c\x38\x2e\x32\x33\x37\x35\x20\x2d\x32\x2e\x33\x34\x35\
\x32\x38\x2c\x39\x2e\x37\x35\x20\x2d\x30\x2e\x35\x33\x38\x37\x33\
\x2c\x32\x2e\x33\x35\x32\x37\x32\x20\x2d\x31\x2e\x31\x33\x32\x35\
\x36\x2c\x32\x2e\x37\x35\x20\x2d\x34\x2e\x31\x31\x30\x36\x34\x2c\
\x32\x2e\x37\x35\x20\x6c\x20\x2d\x33\x2e\x34\x38\x30\x39\x35\x2c\
\x30\x20\x30\x2c\x36\x2e\x35\x20\x30\x2c\x36\x2e\x35\x20\x33\x2c\
\x30\x20\x33\x2c\x30\x20\x30\x2c\x32\x39\x2e\x30\x33\x39\x38\x34\
\x20\x63\x20\x30\x2c\x33\x35\x2e\x34\x38\x33\x31\x38\x20\x30\x2e\
\x33\x39\x38\x37\x2c\x33\x36\x2e\x38\x34\x35\x32\x39\x20\x31\x31\
\x2e\x35\x2c\x33\x39\x2e\x32\x38\x38\x30\x37\x20\x33\x2e\x31\x39\
\x32\x34\x35\x2c\x30\x2e\x37\x30\x32\x34\x38\x20\x33\x2e\x37\x35\
\x35\x31\x38\x2c\x30\x2e\x36\x37\x37\x35\x37\x20\x38\x2e\x35\x2c\
\x2d\x30\x2e\x33\x37\x36\x32\x33\x20\x7a\x22\x0a\x20\x20\x20\x20\
\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x32\x34\x30\
\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\
\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x37\x63\x63\x30\x34\x30\x22\
\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\
\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x2d\x33\
\x37\x38\x2e\x38\x35\x32\x37\x34\x2c\x32\x39\x38\x2e\x32\x39\x37\
\x34\x37\x20\x2d\x35\x2e\x37\x31\x38\x37\x2c\x2d\x35\x2e\x37\x37\
\x38\x39\x39\x20\x30\x2c\x2d\x38\x35\x2e\x33\x35\x34\x39\x39\x20\
\x63\x20\x30\x2c\x2d\x36\x31\x2e\x38\x38\x33\x38\x33\x20\x30\x2e\
\x33\x31\x39\x31\x33\x2c\x2d\x38\x36\x2e\x34\x32\x30\x31\x35\x20\
\x31\x2e\x31\x36\x30\x35\x36\x2c\x2d\x38\x39\x2e\x32\x32\x38\x35\
\x38\x20\x31\x2e\x34\x38\x30\x36\x39\x2c\x2d\x34\x2e\x39\x34\x32\
\x31\x32\x20\x36\x2e\x39\x37\x35\x31\x38\x2c\x2d\x31\x31\x2e\x33\
\x37\x36\x38\x38\x20\x31\x31\x2e\x38\x32\x38\x37\x33\x2c\x2d\x31\
\x33\x2e\x38\x35\x32\x39\x38\x20\x32\x2e\x30\x37\x35\x39\x32\x2c\
\x2d\x31\x2e\x30\x35\x39\x30\x35\x20\x36\x2e\x38\x36\x35\x30\x37\
\x2c\x2d\x32\x2e\x31\x37\x38\x38\x35\x20\x31\x30\x2e\x36\x34\x32\
\x35\x35\x2c\x2d\x32\x2e\x34\x38\x38\x34\x34\x20\x35\x2e\x30\x37\
\x39\x34\x32\x2c\x2d\x30\x2e\x34\x31\x36\x32\x39\x20\x36\x2e\x32\
\x36\x39\x38\x2c\x2d\x30\x2e\x33\x30\x30\x32\x39\x20\x34\x2e\x35\
\x37\x30\x36\x34\x2c\x30\x2e\x34\x34\x35\x34\x20\x2d\x34\x2e\x39\
\x34\x35\x36\x35\x2c\x32\x2e\x31\x37\x30\x34\x34\x20\x2d\x39\x2e\
\x32\x37\x34\x36\x33\x2c\x36\x2e\x34\x38\x34\x37\x37\x20\x2d\x31\
\x31\x2e\x39\x32\x37\x37\x38\x2c\x31\x31\x2e\x38\x38\x37\x34\x33\
\x20\x6c\x20\x2d\x32\x2e\x37\x37\x34\x37\x2c\x35\x2e\x36\x35\x30\
\x31\x35\x20\x2d\x30\x2e\x32\x37\x39\x38\x37\x2c\x39\x32\x2e\x32\
\x35\x20\x63\x20\x2d\x30\x2e\x31\x35\x33\x39\x33\x2c\x35\x30\x2e\
\x37\x33\x37\x35\x20\x2d\x30\x2e\x36\x31\x38\x30\x32\x2c\x39\x32\
\x2e\x32\x35\x20\x2d\x31\x2e\x30\x33\x31\x33\x31\x2c\x39\x32\x2e\
\x32\x35\x20\x2d\x30\x2e\x34\x31\x33\x32\x38\x2c\x30\x20\x2d\x33\
\x2e\x33\x32\x34\x38\x34\x2c\x2d\x32\x2e\x36\x30\x30\x35\x35\x20\
\x2d\x36\x2e\x34\x37\x30\x31\x32\x2c\x2d\x35\x2e\x37\x37\x39\x20\
\x7a\x20\x6d\x20\x37\x31\x2e\x30\x36\x35\x31\x35\x2c\x2d\x32\x32\
\x2e\x34\x31\x35\x36\x39\x20\x63\x20\x2d\x34\x2e\x37\x32\x39\x35\
\x32\x2c\x2d\x31\x2e\x32\x35\x37\x33\x39\x20\x2d\x39\x2e\x39\x36\
\x38\x32\x2c\x2d\x36\x2e\x39\x39\x33\x39\x39\x20\x2d\x31\x32\x2e\
\x32\x33\x38\x34\x39\x2c\x2d\x31\x33\x2e\x34\x30\x31\x37\x32\x20\
\x2d\x30\x2e\x39\x35\x35\x35\x36\x2c\x2d\x32\x2e\x36\x39\x36\x39\
\x37\x20\x2d\x32\x2e\x30\x39\x35\x34\x32\x2c\x2d\x35\x2e\x38\x33\
\x30\x32\x35\x20\x2d\x32\x2e\x35\x33\x33\x30\x32\x2c\x2d\x36\x2e\
\x39\x36\x32\x38\x34\x20\x2d\x30\x2e\x34\x37\x36\x31\x38\x2c\x2d\
\x31\x2e\x32\x33\x32\x34\x35\x20\x2d\x32\x2e\x34\x31\x35\x38\x37\
\x2c\x2d\x32\x2e\x35\x34\x34\x36\x38\x20\x2d\x34\x2e\x38\x33\x31\
\x30\x32\x2c\x2d\x33\x2e\x32\x36\x38\x32\x38\x20\x2d\x38\x2e\x39\
\x34\x31\x31\x36\x2c\x2d\x32\x2e\x36\x37\x38\x38\x34\x20\x2d\x31\
\x37\x2e\x32\x38\x34\x34\x34\x2c\x2d\x31\x34\x2e\x37\x30\x31\x31\
\x37\x20\x2d\x32\x30\x2e\x39\x30\x39\x31\x2c\x2d\x33\x30\x2e\x31\
\x32\x39\x32\x20\x2d\x32\x2e\x36\x30\x32\x38\x33\x2c\x2d\x31\x31\
\x2e\x30\x37\x38\x36\x37\x20\x2d\x32\x2e\x35\x33\x30\x33\x35\x2c\
\x2d\x34\x34\x2e\x36\x33\x34\x35\x35\x20\x30\x2e\x31\x31\x37\x38\
\x2c\x2d\x35\x34\x2e\x35\x34\x33\x32\x37\x20\x34\x2e\x30\x34\x39\
\x39\x33\x2c\x2d\x31\x35\x2e\x31\x35\x33\x37\x37\x20\x31\x31\x2e\
\x37\x34\x35\x37\x38\x2c\x2d\x32\x34\x2e\x39\x37\x38\x30\x31\x20\
\x32\x31\x2e\x39\x33\x37\x35\x33\x2c\x2d\x32\x38\x2e\x30\x30\x34\
\x36\x33\x20\x36\x2e\x35\x36\x38\x31\x34\x2c\x2d\x31\x2e\x39\x35\
\x30\x35\x33\x20\x31\x30\x2e\x35\x38\x30\x34\x2c\x2d\x31\x2e\x38\
\x33\x36\x33\x37\x20\x34\x2e\x39\x39\x36\x36\x38\x2c\x30\x2e\x31\
\x34\x32\x31\x37\x20\x2d\x39\x2e\x34\x30\x34\x37\x36\x2c\x33\x2e\
\x33\x33\x32\x34\x38\x20\x2d\x31\x36\x2e\x33\x32\x34\x34\x2c\x31\
\x32\x2e\x34\x30\x33\x34\x37\x20\x2d\x32\x30\x2e\x35\x31\x34\x35\
\x33\x2c\x32\x36\x2e\x38\x39\x32\x35\x38\x20\x2d\x32\x2e\x30\x39\
\x34\x33\x38\x2c\x37\x2e\x32\x34\x32\x31\x39\x20\x2d\x32\x2e\x32\
\x39\x38\x31\x33\x2c\x39\x2e\x38\x38\x37\x32\x38\x20\x2d\x32\x2e\
\x32\x33\x31\x35\x35\x2c\x32\x38\x2e\x39\x36\x39\x38\x38\x20\x30\
\x2e\x30\x36\x33\x32\x2c\x31\x38\x2e\x31\x32\x36\x38\x33\x20\x30\
\x2e\x33\x36\x31\x37\x39\x2c\x32\x32\x2e\x30\x34\x37\x32\x32\x20\
\x32\x2e\x31\x38\x32\x31\x32\x2c\x32\x38\x2e\x36\x35\x34\x31\x31\
\x20\x34\x2e\x31\x30\x30\x37\x31\x2c\x31\x34\x2e\x38\x38\x33\x35\
\x34\x20\x31\x30\x2e\x32\x36\x36\x36\x35\x2c\x32\x33\x2e\x34\x33\
\x35\x34\x32\x20\x32\x30\x2e\x31\x30\x31\x38\x36\x2c\x32\x37\x2e\
\x38\x38\x30\x33\x38\x20\x34\x2e\x35\x31\x35\x37\x2c\x32\x2e\x30\
\x34\x30\x38\x34\x20\x35\x2e\x32\x39\x35\x38\x34\x2c\x32\x2e\x38\
\x33\x38\x34\x35\x20\x36\x2e\x32\x35\x32\x39\x38\x2c\x36\x2e\x33\
\x39\x33\x30\x31\x20\x32\x2e\x32\x37\x37\x37\x39\x2c\x38\x2e\x34\
\x35\x39\x30\x33\x20\x36\x2e\x38\x30\x34\x35\x35\x2c\x31\x34\x2e\
\x36\x30\x31\x38\x31\x20\x31\x32\x2e\x36\x38\x33\x31\x36\x2c\x31\
\x37\x2e\x32\x31\x30\x39\x34\x20\x32\x2e\x31\x35\x35\x32\x35\x2c\
\x30\x2e\x39\x35\x36\x35\x38\x20\x32\x2e\x32\x39\x37\x31\x39\x2c\
\x31\x2e\x31\x39\x34\x36\x35\x20\x30\x2e\x37\x30\x31\x37\x33\x2c\
\x31\x2e\x31\x37\x36\x39\x39\x20\x2d\x31\x2e\x31\x2c\x2d\x30\x2e\
\x30\x31\x32\x32\x20\x2d\x33\x2e\x36\x37\x32\x32\x37\x2c\x2d\x30\
\x2e\x34\x36\x36\x37\x33\x20\x2d\x35\x2e\x37\x31\x36\x31\x35\x2c\
\x2d\x31\x2e\x30\x31\x30\x31\x32\x20\x7a\x20\x6d\x20\x34\x37\x2e\
\x33\x30\x39\x38\x31\x2c\x2d\x33\x30\x2e\x31\x31\x31\x37\x35\x20\
\x63\x20\x2d\x37\x2e\x38\x38\x31\x34\x38\x2c\x2d\x32\x2e\x37\x36\
\x31\x36\x32\x20\x2d\x39\x2e\x30\x39\x33\x36\x36\x2c\x2d\x38\x2e\
\x33\x39\x34\x34\x20\x2d\x39\x2e\x30\x39\x33\x36\x36\x2c\x2d\x34\
\x32\x2e\x32\x35\x36\x37\x33\x20\x30\x2c\x2d\x32\x32\x2e\x38\x33\
\x36\x32\x32\x20\x2d\x30\x2e\x31\x36\x32\x31\x36\x2c\x2d\x32\x35\
\x2e\x33\x32\x31\x35\x36\x20\x2d\x31\x2e\x36\x37\x31\x32\x34\x2c\
\x2d\x32\x35\x2e\x36\x31\x33\x35\x31\x20\x2d\x31\x2e\x31\x36\x33\
\x36\x32\x2c\x2d\x30\x2e\x32\x32\x35\x31\x31\x20\x2d\x32\x2e\x30\
\x33\x39\x36\x39\x2c\x2d\x32\x2e\x31\x34\x35\x37\x38\x20\x2d\x32\
\x2e\x38\x38\x34\x32\x37\x2c\x2d\x36\x2e\x33\x32\x33\x33\x32\x20\
\x2d\x30\x2e\x36\x36\x37\x31\x36\x2c\x2d\x33\x2e\x33\x20\x2d\x31\
\x2e\x30\x31\x33\x35\x34\x2c\x2d\x36\x2e\x33\x33\x37\x35\x20\x2d\
\x30\x2e\x37\x36\x39\x37\x34\x2c\x2d\x36\x2e\x37\x35\x20\x30\x2e\
\x32\x34\x33\x38\x31\x2c\x2d\x30\x2e\x34\x31\x32\x35\x20\x31\x2e\
\x35\x34\x31\x37\x33\x2c\x2d\x30\x2e\x37\x35\x20\x32\x2e\x38\x38\
\x34\x32\x37\x2c\x2d\x30\x2e\x37\x35\x20\x32\x2e\x33\x35\x35\x35\
\x2c\x30\x20\x32\x2e\x34\x34\x30\x39\x38\x2c\x30\x2e\x32\x34\x35\
\x31\x33\x20\x32\x2e\x34\x34\x30\x39\x38\x2c\x37\x20\x6c\x20\x30\
\x2c\x37\x20\x32\x2e\x39\x34\x34\x34\x35\x2c\x30\x20\x32\x2e\x39\
\x34\x34\x34\x36\x2c\x30\x20\x30\x2e\x33\x30\x35\x35\x34\x2c\x32\
\x39\x2e\x32\x35\x20\x63\x20\x30\x2e\x33\x33\x39\x31\x35\x2c\x33\
\x32\x2e\x34\x36\x36\x32\x38\x20\x30\x2e\x35\x39\x33\x38\x2c\x33\
\x33\x2e\x38\x32\x30\x39\x32\x20\x37\x2e\x31\x30\x34\x31\x2c\x33\
\x37\x2e\x37\x39\x30\x34\x38\x20\x32\x2e\x34\x39\x36\x38\x38\x2c\
\x31\x2e\x35\x32\x32\x34\x34\x20\x32\x2e\x37\x36\x31\x32\x39\x2c\
\x31\x2e\x39\x34\x30\x34\x34\x20\x31\x2e\x32\x30\x31\x34\x35\x2c\
\x31\x2e\x38\x39\x39\x33\x34\x20\x2d\x31\x2e\x31\x2c\x2d\x30\x2e\
\x30\x32\x39\x20\x2d\x33\x2e\x35\x33\x32\x38\x35\x2c\x2d\x30\x2e\
\x35\x38\x39\x38\x31\x20\x2d\x35\x2e\x34\x30\x36\x33\x34\x2c\x2d\
\x31\x2e\x32\x34\x36\x32\x36\x20\x7a\x20\x6d\x20\x2d\x34\x35\x2e\
\x38\x33\x33\x38\x2c\x2d\x39\x2e\x34\x34\x33\x35\x36\x20\x63\x20\
\x35\x2e\x36\x34\x31\x30\x35\x2c\x2d\x35\x2e\x38\x38\x39\x33\x38\
\x20\x37\x2e\x37\x34\x30\x31\x34\x2c\x2d\x31\x36\x2e\x39\x38\x31\
\x36\x36\x20\x37\x2e\x37\x34\x30\x31\x34\x2c\x2d\x34\x30\x2e\x39\
\x30\x31\x34\x31\x20\x30\x2c\x2d\x32\x32\x2e\x38\x39\x39\x32\x35\
\x20\x2d\x32\x2e\x37\x33\x30\x36\x31\x2c\x2d\x33\x35\x2e\x39\x34\
\x35\x32\x31\x20\x2d\x38\x2e\x33\x34\x36\x39\x35\x2c\x2d\x33\x39\
\x2e\x38\x37\x39\x30\x35\x20\x2d\x32\x2e\x30\x33\x39\x33\x37\x2c\
\x2d\x31\x2e\x34\x32\x38\x34\x33\x20\x2d\x32\x2e\x30\x31\x31\x36\
\x38\x2c\x2d\x31\x2e\x34\x36\x39\x35\x34\x20\x30\x2e\x39\x38\x39\
\x35\x38\x2c\x2d\x31\x2e\x34\x36\x39\x35\x34\x20\x31\x30\x2e\x32\
\x33\x36\x31\x32\x2c\x30\x20\x31\x34\x2e\x30\x35\x32\x33\x35\x2c\
\x31\x34\x2e\x31\x35\x32\x38\x35\x20\x31\x33\x2e\x30\x37\x37\x37\
\x34\x2c\x34\x38\x2e\x35\x20\x2d\x30\x2e\x35\x34\x31\x39\x32\x2c\
\x31\x39\x2e\x30\x39\x38\x31\x34\x20\x2d\x31\x2e\x37\x39\x34\x36\
\x31\x2c\x32\x36\x2e\x36\x33\x31\x32\x39\x20\x2d\x35\x2e\x33\x32\
\x34\x33\x36\x2c\x33\x32\x2e\x30\x31\x38\x33\x36\x20\x2d\x31\x2e\
\x36\x32\x33\x32\x2c\x32\x2e\x34\x37\x37\x33\x31\x20\x2d\x35\x2e\
\x34\x38\x32\x38\x36\x2c\x34\x2e\x34\x38\x31\x36\x34\x20\x2d\x38\
\x2e\x36\x33\x30\x31\x35\x2c\x34\x2e\x34\x38\x31\x36\x34\x20\x2d\
\x32\x2e\x30\x36\x36\x39\x36\x2c\x30\x20\x2d\x32\x2e\x30\x35\x30\
\x30\x39\x2c\x2d\x30\x2e\x30\x39\x33\x39\x20\x30\x2e\x34\x39\x34\
\x2c\x2d\x32\x2e\x37\x35\x20\x7a\x20\x6d\x20\x36\x35\x2e\x32\x34\
\x30\x31\x34\x2c\x2d\x34\x2e\x32\x35\x20\x63\x20\x31\x2e\x31\x2c\
\x2d\x30\x2e\x34\x37\x32\x36\x39\x20\x33\x2e\x33\x35\x2c\x2d\x30\
\x2e\x38\x35\x39\x34\x33\x20\x35\x2c\x2d\x30\x2e\x38\x35\x39\x34\
\x33\x20\x32\x2e\x35\x35\x37\x36\x32\x2c\x30\x20\x32\x2e\x37\x30\
\x35\x30\x38\x2c\x30\x2e\x31\x32\x36\x37\x33\x20\x31\x2c\x30\x2e\
\x38\x35\x39\x34\x33\x20\x2d\x31\x2e\x31\x2c\x30\x2e\x34\x37\x32\
\x36\x39\x20\x2d\x33\x2e\x33\x35\x2c\x30\x2e\x38\x35\x39\x34\x33\
\x20\x2d\x35\x2c\x30\x2e\x38\x35\x39\x34\x33\x20\x2d\x32\x2e\x35\
\x35\x37\x36\x32\x2c\x30\x20\x2d\x32\x2e\x37\x30\x35\x30\x38\x2c\
\x2d\x30\x2e\x31\x32\x36\x37\x33\x20\x2d\x31\x2c\x2d\x30\x2e\x38\
\x35\x39\x34\x33\x20\x7a\x20\x6d\x20\x2d\x32\x36\x2e\x32\x30\x32\
\x35\x34\x2c\x2d\x36\x39\x2e\x32\x35\x20\x63\x20\x34\x2e\x33\x37\
\x30\x37\x2c\x2d\x31\x39\x2e\x31\x32\x32\x32\x36\x20\x33\x2e\x38\
\x32\x39\x33\x37\x2c\x2d\x31\x37\x2e\x37\x35\x20\x37\x2e\x30\x30\
\x32\x30\x31\x2c\x2d\x31\x37\x2e\x37\x35\x20\x32\x2e\x35\x33\x36\
\x33\x38\x2c\x30\x20\x32\x2e\x38\x35\x35\x33\x33\x2c\x30\x2e\x33\
\x30\x30\x30\x34\x20\x32\x2e\x33\x35\x34\x35\x36\x2c\x32\x2e\x32\
\x31\x35\x20\x2d\x30\x2e\x33\x31\x38\x35\x38\x2c\x31\x2e\x32\x31\
\x38\x32\x34\x20\x2d\x31\x2e\x33\x33\x36\x31\x36\x2c\x35\x2e\x37\
\x31\x38\x32\x34\x20\x2d\x32\x2e\x32\x36\x31\x32\x39\x2c\x31\x30\
\x20\x2d\x31\x2e\x36\x33\x38\x35\x38\x2c\x37\x2e\x35\x38\x33\x38\
\x32\x20\x2d\x31\x2e\x37\x35\x38\x36\x34\x2c\x37\x2e\x37\x38\x35\
\x20\x2d\x34\x2e\x36\x34\x35\x38\x2c\x37\x2e\x37\x38\x35\x20\x2d\
\x32\x2e\x35\x35\x39\x32\x34\x2c\x30\x20\x2d\x32\x2e\x38\x39\x33\
\x35\x36\x2c\x2d\x30\x2e\x33\x30\x37\x31\x20\x2d\x32\x2e\x34\x34\
\x39\x34\x38\x2c\x2d\x32\x2e\x32\x35\x20\x7a\x22\x0a\x20\x20\x20\
\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x32\x33\
\x39\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\
\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x31\x36\x31\x32\x33\
\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\
\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
"
qt_resource_name = "\
\x00\x0a\
\x05\xf1\x4c\xa7\
\x00\x71\
\x00\x74\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
"
qt_resource_struct = "\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
"
def qInitResources():
QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
def qCleanupResources():
QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
qInitResources()

148
ui/mainwindow.py Normal file
View file

@ -0,0 +1,148 @@
# -*- coding: utf-8 -*-
"""
Module implementing MainWindow.
"""
VERSION = "1.0"
from PyQt4.QtCore import pyqtSignature
from PyQt4.QtGui import QMainWindow, QMessageBox, QFileDialog, QApplication, QProgressBar
from .Ui_mainwindow import Ui_MainWindow
from pydsf import *
class MainWindow(QMainWindow, Ui_MainWindow):
"""
Class documentation goes here.
"""
def __init__(self, parent=None):
"""
Constructor
@param parent reference to the parent widget (QWidget)
"""
QMainWindow.__init__(self, parent)
self.setupUi(self)
@pyqtSignature("QAbstractButton*")
def on_buttonBox_open_clicked(self, button):
"""
Slot documentation goes here.
"""
filenames = QFileDialog.getOpenFileNames(self, 'Open data file', '', "Text files (*.txt *.csv)")
self.listWidget_data.addItems(filenames)
if self.listWidget_data.count() > 1:
self.groupBox_replicates.setChecked(True)
self.radioButton_rep_files.setEnabled(True)
# self.radioButton_rep_rows.setEnabled(False)
# self.radioButton_rep_columns.setEnabled(False)
@pyqtSignature("QString")
def on_comboBox_instrument_currentIndexChanged(self, p0):
"""
Slot documentation goes here.
"""
if p0 == 'Analytik Jena qTOWER 2.0/2.2':
print(p0)
self.groupBox_temp.setEnabled(True)
else:
self.groupBox_temp.setEnabled(False)
# self.groupBox_data.setEnabled(True)
# self.groupBox_cutoff.setEnabled(True)
# self.groupBox_cbar.setEnabled(True)
# self.groupBox_signal_threshold.setEnabled(True)
@pyqtSignature("")
def on_buttonBox_process_accepted(self):
"""
Slot documentation goes here.
"""
if self.listWidget_data.count() < 1:
QMessageBox.critical(self, 'Error', "No data file loaded!", QMessageBox.Close, QMessageBox.Close)
return
if self.spinBox_signal_threshold.value() == 0 and self.groupBox_signal_threshold.isChecked():
QMessageBox.warning(self, 'Warning', "Signal threshold is currently set to zero.", QMessageBox.Ok, QMessageBox.Ok)
self.pb = QProgressBar()
c_lower = None
c_upper = None
cbar_range = None
signal_threshold = None
type = self.comboBox_instrument.currentText()
if self.groupBox_cutoff.isChecked():
c_lower = self.doubleSpinBox_lower.value()
c_upper = self.doubleSpinBox_upper.value()
if self.groupBox_cbar.isChecked():
cbar_range = (self.doubleSpinBox_cbar_start, self.doubleSpinBox_cbar_end)
if self.groupBox_signal_threshold.isChecked():
signal_threshold = self.spinBox_signal_threshold.value()
items = (self.listWidget_data.item(i) for i in xrange(self.listWidget_data.count()))
files = []
for item in items:
files.append(item.text())
exp = Experiment(type=type, files=files, t1=self.doubleSpinBox_tmin.value(), t2=self.doubleSpinBox_tmax.value(), dt=self.doubleSpinBox_dt.value(), cols=12, rows=8, cutoff_low=c_lower, cutoff_high=c_upper, signal_threshold=signal_threshold, color_range=cbar_range)
exp.analyze()
# plate = Plate(type=type, filename=self.lineEdit_data_file.text(), t1=self.doubleSpinBox_tmin.value(), t2=self.doubleSpinBox_tmax.value(), dt=self.doubleSpinBox_dt.value(), cols=12, rows=8, cutoff_low=c_lower, cutoff_high=c_upper, signal_threshold=signal_threshold, color_range=cbar_range)
# self.statusBar.addWidget(self.pb, 100)
#plate.analyze(gui=self)
save_data = QMessageBox.question(self, 'Save data', "Calculations are finished. Save results?",
QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes)
if save_data == QMessageBox.Yes:
dialog = QFileDialog()
dialog.setFileMode(QFileDialog.Directory)
folder = dialog.getExistingDirectory(self, 'Choose path for results')
for plate in exp.plates:
plate.write_tm_table('{}/plate_{}_04_tm.csv'.format(folder, str(plate.id)))
plate.write_derivative_table('{}/plate_{}_03_dI_dT.csv'.format(folder, str(plate.id)))
plate.write_filtered_table('{}/plate_{}_02_filtered_data.csv'.format(folder, str(plate.id)))
plate.write_raw_table('{}/plate_{}_01_raw_data.csv'.format(folder, str(plate.id)))
if exp.avg_plate:
exp.avg_plate.write_avg_tm_table('{}/plate_{}_05_tm_avg.csv'.format(folder, str(exp.avg_plate.id)))
#plot(plate, self)
plot(exp)
@pyqtSignature("")
def on_buttonBox_process_rejected(self):
"""
Slot documentation goes here.
"""
QApplication.quit()
@pyqtSignature("")
def on_actionQuit_triggered(self):
"""
Slot documentation goes here.
"""
QApplication.quit()
@pyqtSignature("bool")
def on_groupBox_cutoff_toggled(self, p0):
"""
Slot documentation goes here.
"""
self.doubleSpinBox_upper.setValue(self.doubleSpinBox_tmax.value())
self.doubleSpinBox_lower.setValue(self.doubleSpinBox_tmin.value())
@pyqtSignature("")
def on_actionAbout_triggered(self):
"""
Slot documentation goes here.
"""
# TODO: not implemented yet
raise NotImplementedError
@pyqtSignature("")
def on_actionAbout_Qt_triggered(self):
"""
Slot documentation goes here.
"""
QApplication.aboutQt()

477
ui/mainwindow.ui Normal file
View file

@ -0,0 +1,477 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>352</width>
<height>548</height>
</rect>
</property>
<property name="windowTitle">
<string>PyDSF</string>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<widget class="QWidget" name="centralWidget">
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox_experiment">
<property name="title">
<string>Experimental Setup</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="flat">
<bool>false</bool>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_instrument">
<property name="text">
<string>Instrument</string>
</property>
<property name="buddy">
<cstring>comboBox_instrument</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBox_instrument">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Analytik Jena qTOWER 2.0/2.2</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_data">
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Add data files to the experiment. If multiple files are loaded, they are treated as replicates.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="title">
<string>Data File</string>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="QListWidget" name="listWidget_data">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDialogButtonBox" name="buttonBox_open">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Open</set>
</property>
<property name="centerButtons">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_replicates">
<property name="title">
<string>Replicates</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QRadioButton" name="radioButton_rep_files">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Files</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QGroupBox" name="groupBox_temp">
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Temperature range of the data points. Only applies, if the data file does not contain any temperature information.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="title">
<string>Temperature settings</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="formAlignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_tmin">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;T&lt;span style=&quot; vertical-align:sub;&quot;&gt;min&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="buddy">
<cstring>doubleSpinBox_tmin</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="doubleSpinBox_tmin">
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="suffix">
<string> °C</string>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="value">
<double>25.000000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_tmax">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;T&lt;span style=&quot; vertical-align:sub;&quot;&gt;max&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="buddy">
<cstring>doubleSpinBox_tmax</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="doubleSpinBox_tmax">
<property name="suffix">
<string> °C</string>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="value">
<double>95.000000000000000</double>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_dt">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&amp;Delta;T&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="buddy">
<cstring>doubleSpinBox_dt</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="doubleSpinBox_dt">
<property name="suffix">
<string> °C</string>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="value">
<double>1.000000000000000</double>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="1">
<widget class="QGroupBox" name="groupBox_cutoff">
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Only T&lt;span style=&quot; vertical-align:sub;&quot;&gt;m&lt;/span&gt; values within this limit are considered valid.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="title">
<string>Cutoff</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QFormLayout" name="formLayout_2">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="formAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_cutoff_high">
<property name="text">
<string>Upper</string>
</property>
<property name="buddy">
<cstring>doubleSpinBox_upper</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="doubleSpinBox_upper">
<property name="prefix">
<string/>
</property>
<property name="suffix">
<string> °C</string>
</property>
<property name="decimals">
<number>1</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_cutoff_low">
<property name="text">
<string>Lower</string>
</property>
<property name="buddy">
<cstring>doubleSpinBox_lower</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="doubleSpinBox_lower">
<property name="suffix">
<string> °C</string>
</property>
<property name="decimals">
<number>1</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0">
<widget class="QGroupBox" name="groupBox_signal_threshold">
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;If the signal exceeds this threshold, the coresponding well is assumed to be denatured.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="title">
<string>Signal Threshold</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QSpinBox" name="spinBox_signal_threshold">
<property name="maximum">
<number>1000000</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="1">
<widget class="QGroupBox" name="groupBox_cbar">
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Defines the range of the colorbar used for the T&lt;span style=&quot; vertical-align:sub;&quot;&gt;m&lt;/span&gt; heatmap.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="title">
<string>Colorbar</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QFormLayout" name="formLayout_4">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_cbar_start">
<property name="text">
<string>Start</string>
</property>
<property name="buddy">
<cstring>doubleSpinBox_cbar_start</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="doubleSpinBox_cbar_start">
<property name="suffix">
<string> °C</string>
</property>
<property name="decimals">
<number>1</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_cbar_end">
<property name="text">
<string>End</string>
</property>
<property name="buddy">
<cstring>doubleSpinBox_cbar_end</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="doubleSpinBox_cbar_end">
<property name="suffix">
<string> °C</string>
</property>
<property name="decimals">
<number>1</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox_process">
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>352</width>
<height>24</height>
</rect>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<widget class="QMenu" name="menuFile">
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="title">
<string>File</string>
</property>
<addaction name="actionQuit"/>
</widget>
<widget class="QMenu" name="menuHelp">
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="title">
<string>Help</string>
</property>
<addaction name="actionAbout"/>
<addaction name="actionAbout_Qt"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuHelp"/>
</widget>
<widget class="QStatusBar" name="statusBar"/>
<action name="actionQuit">
<property name="text">
<string>Quit</string>
</property>
</action>
<action name="actionAbout">
<property name="text">
<string>About</string>
</property>
</action>
<action name="actionAbout_Qt">
<property name="icon">
<iconset resource="icons.qrc">
<normaloff>:/qtlogo.svg</normaloff>:/qtlogo.svg</iconset>
</property>
<property name="text">
<string>About Qt</string>
</property>
</action>
</widget>
<resources>
<include location="icons.qrc"/>
</resources>
<connections/>
</ui>

51
ui/qtlogo.svg Normal file
View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.0"
width="171.52368"
height="205.04932"
id="svg2">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs4" />
<rect
width="136.69954"
height="147.69836"
x="24.354517"
y="28.282665"
id="rect2998"
style="fill:#ffffff;fill-opacity:1;stroke:none" />
<g
transform="translate(-46.4049,32.5083)"
id="layer1">
<g
transform="translate(432,-133)"
id="g2396">
<path
d="m -378.33328,299.25358 -7.26184,-6.67711 0.0118,-84.71249 c 0.0117,-83.62609 0.0388,-84.78455 2.11435,-90.33196 4.43707,-11.85913 11.10713,-15.89306 27.89749,-16.87189 10.06981,-0.58704 13.18358,-0.16957 76,10.18948 l 65.5,10.8016 0,69.96263 c 0,53.90228 -0.29319,70.92859 -1.27722,74.17058 -1.56788,5.16554 -6.72925,12.10273 -10.73743,14.43174 -1.98699,1.15457 -26.06029,5.60398 -71.98535,13.30489 -37.95,6.36361 -69.9,11.75908 -71,11.98992 -1.4051,0.29487 -4.16003,-1.56638 -9.26184,-6.25739 z m 91.38684,-23.17711 c 2.25641,0 2.375,-0.32456 2.375,-6.5 0,-5.78113 -0.21599,-6.5 -1.95295,-6.5 -3.70388,0 -6.85214,-2.24136 -8.60347,-6.12513 -0.96609,-2.14239 -1.57361,-4.03559 -1.35005,-4.2071 0.22356,-0.17151 2.53288,-1.52939 5.13182,-3.01751 12.90306,-7.38812 18.68728,-23.96169 18.72409,-53.65026 0.0443,-35.70973 -8.94704,-52.63835 -30.26591,-56.98381 -6.70354,-1.3664 -14.30708,-0.63312 -20.27292,1.95511 -8.91148,3.86617 -15.69871,14.21474 -19.03883,29.0287 -2.37545,10.5355 -2.34662,39.37509 0.0505,50.5 3.51644,16.31976 11.81536,28.41254 21.77764,31.7333 3.68933,1.22977 4.20364,1.83831 5.7544,6.80859 2.41185,7.73016 4.56676,11.48088 8.00116,13.92639 3.43513,2.44602 10.23575,4.07656 14.41955,3.45728 1.58125,-0.23406 3.94375,-0.42556 5.25,-0.42556 z m -22.60906,-37.30473 c -3.04896,-1.52007 -6.70937,-6.83665 -7.98395,-11.59631 -4.16759,-15.56307 -3.81851,-54.0943 0.58989,-65.11198 2.00113,-5.00129 6.62237,-8.98698 10.42005,-8.98698 4.20244,0 9.48751,5.06719 11.45111,10.97905 3.47238,10.45434 4.05746,45.54877 1.00529,60.29934 -2.42686,11.72859 -8.85965,17.71867 -15.48239,14.41688 z m 66.98406,7.25641 c 9.46242,-2.10155 10,-2.56605 10,-8.64039 0,-4.71812 -0.23391,-5.37657 -1.75,-4.92617 -5.99778,1.78186 -7.39498,1.79365 -9.29029,0.0784 -1.84998,-1.6742 -1.95971,-3.22064 -1.95971,-27.61852 l 0,-25.84501 6,0 6,0 0,-5.87083 0,-5.87084 -6,-0.67882 -6,-0.67882 0,-9.39133 c 0,-5.16523 -0.3375,-9.59681 -0.75,-9.84796 -0.4125,-0.25114 -2.9657,-0.6152 -5.67377,-0.80901 l -4.92378,-0.35239 -1.71558,7 c -0.94357,3.85 -1.99895,8.2375 -2.34528,9.75 -0.53873,2.35272 -1.13256,2.75 -4.11064,2.75 l -3.48095,0 0,6.5 0,6.5 3,0 3,0 0,29.03984 c 0,35.48318 0.3987,36.84529 11.5,39.28807 3.19245,0.70248 3.75518,0.67757 8.5,-0.37623 z"
id="path2400"
style="fill:#7cc040" />
<path
d="m -378.85274,298.29747 -5.7187,-5.77899 0,-85.35499 c 0,-61.88383 0.31913,-86.42015 1.16056,-89.22858 1.48069,-4.94212 6.97518,-11.37688 11.82873,-13.85298 2.07592,-1.05905 6.86507,-2.17885 10.64255,-2.48844 5.07942,-0.41629 6.2698,-0.30029 4.57064,0.4454 -4.94565,2.17044 -9.27463,6.48477 -11.92778,11.88743 l -2.7747,5.65015 -0.27987,92.25 c -0.15393,50.7375 -0.61802,92.25 -1.03131,92.25 -0.41328,0 -3.32484,-2.60055 -6.47012,-5.779 z m 71.06515,-22.41569 c -4.72952,-1.25739 -9.9682,-6.99399 -12.23849,-13.40172 -0.95556,-2.69697 -2.09542,-5.83025 -2.53302,-6.96284 -0.47618,-1.23245 -2.41587,-2.54468 -4.83102,-3.26828 -8.94116,-2.67884 -17.28444,-14.70117 -20.9091,-30.1292 -2.60283,-11.07867 -2.53035,-44.63455 0.1178,-54.54327 4.04993,-15.15377 11.74578,-24.97801 21.93753,-28.00463 6.56814,-1.95053 10.5804,-1.83637 4.99668,0.14217 -9.40476,3.33248 -16.3244,12.40347 -20.51453,26.89258 -2.09438,7.24219 -2.29813,9.88728 -2.23155,28.96988 0.0632,18.12683 0.36179,22.04722 2.18212,28.65411 4.10071,14.88354 10.26665,23.43542 20.10186,27.88038 4.5157,2.04084 5.29584,2.83845 6.25298,6.39301 2.27779,8.45903 6.80455,14.60181 12.68316,17.21094 2.15525,0.95658 2.29719,1.19465 0.70173,1.17699 -1.1,-0.0122 -3.67227,-0.46673 -5.71615,-1.01012 z m 47.30981,-30.11175 c -7.88148,-2.76162 -9.09366,-8.3944 -9.09366,-42.25673 0,-22.83622 -0.16216,-25.32156 -1.67124,-25.61351 -1.16362,-0.22511 -2.03969,-2.14578 -2.88427,-6.32332 -0.66716,-3.3 -1.01354,-6.3375 -0.76974,-6.75 0.24381,-0.4125 1.54173,-0.75 2.88427,-0.75 2.3555,0 2.44098,0.24513 2.44098,7 l 0,7 2.94445,0 2.94446,0 0.30554,29.25 c 0.33915,32.46628 0.5938,33.82092 7.1041,37.79048 2.49688,1.52244 2.76129,1.94044 1.20145,1.89934 -1.1,-0.029 -3.53285,-0.58981 -5.40634,-1.24626 z m -45.8338,-9.44356 c 5.64105,-5.88938 7.74014,-16.98166 7.74014,-40.90141 0,-22.89925 -2.73061,-35.94521 -8.34695,-39.87905 -2.03937,-1.42843 -2.01168,-1.46954 0.98958,-1.46954 10.23612,0 14.05235,14.15285 13.07774,48.5 -0.54192,19.09814 -1.79461,26.63129 -5.32436,32.01836 -1.6232,2.47731 -5.48286,4.48164 -8.63015,4.48164 -2.06696,0 -2.05009,-0.0939 0.494,-2.75 z m 65.24014,-4.25 c 1.1,-0.47269 3.35,-0.85943 5,-0.85943 2.55762,0 2.70508,0.12673 1,0.85943 -1.1,0.47269 -3.35,0.85943 -5,0.85943 -2.55762,0 -2.70508,-0.12673 -1,-0.85943 z m -26.20254,-69.25 c 4.3707,-19.12226 3.82937,-17.75 7.00201,-17.75 2.53638,0 2.85533,0.30004 2.35456,2.215 -0.31858,1.21824 -1.33616,5.71824 -2.26129,10 -1.63858,7.58382 -1.75864,7.785 -4.6458,7.785 -2.55924,0 -2.89356,-0.3071 -2.44948,-2.25 z"
id="path2398"
style="fill:#016123" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB