diff --git a/sw/supervision/python/Makefile b/sw/supervision/python/Makefile index 58737b56b7..fb9c616035 100644 --- a/sw/supervision/python/Makefile +++ b/sw/supervision/python/Makefile @@ -9,11 +9,14 @@ OBJECTS = $(patsubst $(SOURCEDIR)/%.ui,$(BUILDDIR)/%.py,$(SOURCES)) CC = pyuic5 -all: $(BUILDDIR) $(OBJECTS) +all: $(BUILDDIR) $(OBJECTS) resources $(OBJECTS): $(BUILDDIR)/%.py : $(SOURCEDIR)/%.ui - $(CC) -o $@ $<; + $(CC) --import-from=generated -o $@ $<; + +resources: + pyrcc5 $(SOURCEDIR)/resources.qrc -o $(BUILDDIR)/resources_rc.py $(BUILDDIR): mkdir -p $@ diff --git a/sw/supervision/python/build_widget.py b/sw/supervision/python/build_widget.py index 160411f47c..723cfe361c 100644 --- a/sw/supervision/python/build_widget.py +++ b/sw/supervision/python/build_widget.py @@ -28,6 +28,7 @@ class FlashMode: class BuildWidget(Ui_Build, QWidget): spawn_program = QtCore.pyqtSignal(str, list, str, object) + refresh_ac = QtCore.pyqtSignal(object) def __init__(self, parent=None): QWidget.__init__(self, parent=parent) @@ -73,6 +74,9 @@ class BuildWidget(Ui_Build, QWidget): for target in ac.boards.keys(): self.target_combo.addItem(target) + last_target = utils.get_settings().value("ui/last_target", None, str) + if last_target is not None and last_target in ac.boards.keys(): + self.target_combo.setCurrentText(last_target) def update_flash_mode(self, target): self.device_combo.clear() @@ -92,8 +96,11 @@ class BuildWidget(Ui_Build, QWidget): if self.print_config_checkbox.isChecked(): cmd.append("PRINT_CONFIG=1") shortname = "Build {}".format(self.ac.name) + self.refresh_ac.emit(self.ac) self.conf.save(False) + self.target_combo.setCurrentText(target) self.enable_buttons(False) + utils.get_settings().setValue("ui/last_target", target) self.spawn_program.emit(shortname, cmd, None, lambda: self.enable_buttons(True)) def clean(self): diff --git a/sw/supervision/python/generated/resources_rc.py b/sw/supervision/python/generated/resources_rc.py new file mode 100644 index 0000000000..f4ca558e83 --- /dev/null +++ b/sw/supervision/python/generated/resources_rc.py @@ -0,0 +1,1038 @@ +# -*- coding: utf-8 -*- + +# Resource object code +# +# Created by: The Resource Compiler for PyQt5 (Qt v5.15.3) +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore + +qt_resource_data = b"\ +\x00\x00\x05\xfb\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x28\x00\x00\x00\x28\x08\x06\x00\x00\x00\x8c\xfe\xb8\x6d\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x05\xad\x49\x44\x41\x54\x78\x9c\xdd\ +\x98\x5f\x6c\x14\x45\x1c\xc7\x2f\xf1\xdf\x83\xe8\x8b\x41\x7d\xf7\ +\x0f\xa2\x51\xdf\x7c\x21\x06\x34\x21\x69\x2c\xb7\x3b\x7b\xb5\x86\ +\x7f\x46\x9a\x48\x23\x25\xd2\x2a\x2d\xed\xee\xce\xec\xb6\xa4\xd7\ +\x4a\x4b\x13\x31\x52\x83\xa0\x09\x84\x18\x29\x42\x84\xbb\x9d\x99\ +\xbd\x68\x2a\x35\xa6\x2a\x34\x2d\x5a\x41\x2b\x20\x02\x82\x52\xf4\ +\x4a\x6f\xef\xb0\xe5\xe8\x9a\x5f\x75\xf7\xf6\x4a\xdb\x3b\xb8\x73\ +\x1f\x98\xe4\x1e\x6e\xf3\xbb\x9d\xcf\xcd\xfc\x7e\xbf\xef\x77\x26\ +\x10\xb8\x55\x47\x69\x7d\xe4\x69\x11\x1b\xeb\x43\xc4\x64\x12\xe1\ +\xa7\x91\xca\x92\x41\xd5\x48\x8b\x8a\x31\x2e\x11\x3e\x8c\x08\x1b\ +\xf0\x1d\x4a\xa8\xfb\xf4\x1e\x51\x65\x1b\x10\xe6\x67\xcb\x1a\x63\ +\x89\xca\x2d\x47\xae\xd4\xed\xfa\xd9\xd6\xf7\xfe\x66\xb7\x1e\x1c\ +\xb6\xdb\x8c\xb8\xbd\xc9\xf8\xcb\x0e\x1f\xb8\x68\x0b\x8a\x61\xfb\ +\x06\xb6\x50\xef\xbe\x5d\x52\x69\x2d\x52\x69\xa2\x62\x73\x6f\x92\ +\xec\x39\x63\xb7\xb3\x91\x59\x3f\xbe\x01\x2e\x91\x0f\x3e\x86\x08\ +\x1f\x7a\x79\xd3\x97\x89\x8d\xfb\x2f\xe4\x04\x6b\x9f\x05\x10\x9e\ +\xe5\xfe\x44\xf5\xbc\xe1\x90\x12\x15\x11\xa6\xd6\x9b\x1f\xfe\x78\ +\x6d\x2a\x40\x1b\x8d\xdb\xe4\xe3\x33\xf6\x6b\xef\xf6\x8d\x2d\x0d\ +\x77\x5f\x96\x30\xbb\x22\x28\xc6\x35\x51\xa5\x57\x25\x8d\xa7\x66\ +\x02\x9c\xee\xcf\xb4\x1c\x1c\xb6\x5f\xda\xf8\xb9\x15\xd2\x78\x38\ +\x6f\xb8\x60\x03\x7d\x45\x22\x3c\xa9\xef\x3d\x97\xf5\x32\xc8\xb1\ +\x75\xdb\x06\xd3\x88\xf0\x94\xa4\x99\x43\x22\x66\x4d\xa2\x1a\x59\ +\x24\x60\x36\x6f\xf1\x7a\xf3\xee\x92\xd7\xe9\x5d\x41\xf9\xc0\x03\ +\x4b\x64\xba\x30\x1f\xc0\x9b\x82\x83\x95\x03\xb8\xa6\x7d\xe7\xb3\ +\x5e\x56\xbf\xeb\xc4\x44\x99\x16\x4b\x4a\x84\x1b\xa8\xc1\x78\x34\ +\xef\x17\xce\x02\x08\x73\x20\xcc\x52\x41\xd9\x58\x9c\x7f\xce\x61\ +\x6a\x65\xaf\x5c\xdc\xae\xea\x1c\x18\x43\x84\x9e\x47\x4a\xe4\x99\ +\x1b\x05\xcb\xb5\xc5\x78\xcf\x59\x80\x1c\x45\x2a\x7d\x28\x90\xab\ +\x5a\xa1\x20\xb2\x73\x2e\x6e\xaf\xea\xf8\x3a\x29\x11\xf3\x1b\xd4\ +\xb0\xff\xbe\x40\x01\x43\xf8\x0f\x10\xb6\x75\x4d\x67\xff\x04\xe4\ +\xb1\x33\x4f\xcd\xf6\x63\x69\x89\x98\x47\xcb\xcb\xbb\x6e\x9b\xf1\ +\x05\xd0\x78\x57\xbe\xd5\x33\xea\xfd\x77\x93\x2b\x87\xf9\xb7\x95\ +\x95\x47\xee\x28\x04\xce\x01\x74\x72\x4e\x54\xd9\x85\xaa\xf7\x06\ +\xc6\x32\x45\x37\x62\xaf\x68\xed\x49\x08\x32\x5b\x1b\x98\xa9\x09\ +\x43\x9f\xf3\xb6\x12\xc8\xb9\xc9\x6d\x2d\x70\xe5\xbc\x80\x00\x87\ +\x30\x0f\x97\xc8\x74\xae\x44\xd8\x25\xe5\xa3\xd3\xee\x7c\xd0\xf0\ +\x11\x66\x97\xa1\xd8\x02\x53\x07\x28\x04\x34\x61\x6f\xb5\x96\xe9\ +\x31\xab\x90\x9c\x9b\x0e\x10\xe0\x9c\xef\xa2\x1c\x79\x36\xa4\x99\ +\x49\x98\xcb\x99\x77\x55\xdb\x57\x96\x20\x1b\xd5\xd7\xfd\x18\xe4\ +\xcb\xab\x10\xeb\xb6\x7d\x9f\x46\x1a\x8f\x06\x8a\x38\x82\xb2\xd1\ +\x38\xf5\x99\xa4\x99\xbc\x66\xc7\x0f\x6e\xce\x43\x6f\x05\x6d\xbf\ +\x4e\xf8\x41\x5b\x21\x0f\x9c\x26\x2c\x11\x9e\xba\x99\x56\x72\xa3\ +\x43\xc4\xc6\x93\x21\x62\x26\x9d\x82\x01\x86\x90\x1e\xb3\x04\x99\ +\x3e\x9e\x09\x52\x69\x2d\x08\x7f\xa6\xec\xcf\xd8\x92\xc6\x87\x02\ +\x3e\x0d\x49\xe3\x43\xb0\x72\xce\xfc\xab\xb7\x1c\xbe\x22\x28\xd1\ +\x75\x6e\x40\x48\x8b\x31\x70\x25\x4e\x00\xc8\x17\x28\x84\x5f\x80\ +\x02\xe6\xe1\xb5\x9d\x47\xc7\x9d\xf9\xeb\x76\x0e\xd9\x21\xcd\xcc\ +\xa4\x57\x88\x98\xbf\x40\x05\x39\x01\x4b\x9b\xbb\x2f\x83\x7c\xf9\ +\x06\x28\x47\x9f\x5b\x16\x3e\x14\xcf\x54\xf3\x39\xd8\xc1\x53\x6e\ +\x80\x88\x99\x05\x7e\xce\x09\x90\x08\xff\xdb\x8f\xfc\x73\x46\x29\ +\x8e\x3c\xf2\x62\x63\xcc\xed\xbf\x2d\x91\x61\x1b\xa9\x2c\xe1\x06\ +\x08\x0a\x4d\xb7\xd1\x4c\xa9\xc3\xf7\x72\xbd\x7b\x4e\xc0\xa7\x51\ +\xae\x77\xcf\x11\x55\xea\x6e\x31\xb0\x00\x83\x1b\x00\x56\x1d\xdc\ +\xb0\x13\x20\xaa\xc6\xb8\x9f\x80\x25\x3a\xbd\x57\x50\x8d\xb4\xb7\ +\x07\x8b\x8a\x71\xd5\x0d\x10\x55\x9a\x6c\x8d\x5c\x72\x01\xcb\x74\ +\x73\x34\xd8\xc0\x1f\xf6\x0b\x50\xc0\x6c\x1e\xd8\x37\xaf\x05\xcb\ +\xda\xe2\xa9\x45\xb2\xac\xe5\x50\xdc\xcf\x22\x09\xaa\xc6\xf3\xcb\ +\xc2\x5f\x64\x8a\xa4\xeb\x9c\x2d\x11\xf3\x64\x06\x50\x8b\xb1\x0d\ +\x3b\x33\x6d\xa6\x6a\xeb\xc0\xb8\xa8\xb2\x66\xbf\x00\x45\x95\x35\ +\xaf\xd9\xda\x3f\xe6\x6d\x33\xe0\x39\x33\x01\xd8\x58\x5f\xf9\x4e\ +\x76\xa3\x0e\x11\xfe\x93\x5f\x80\x21\x8d\x9f\xf2\xca\xec\xea\x2d\ +\x47\x52\x08\x7b\xf4\x38\x28\xd3\xa7\x40\x5e\x5c\xa9\x33\xe2\x36\ +\xc8\x0f\x3c\xff\xbf\xe1\x10\x8e\xce\x87\x33\x0c\xf8\x4e\x47\xea\ +\xca\xb4\x98\x15\xc4\xec\x89\x59\xcd\x02\x08\xb8\x44\xb8\x99\x8f\ +\xe0\x17\x32\xc0\x2c\x54\x6f\x1f\x4c\x67\xc9\x2c\xe1\xbf\x5e\x17\ +\x08\xdb\x5c\xd1\xd1\x6b\x65\xd9\x2d\x62\x26\xc1\x12\x39\x31\x60\ +\x95\x8a\x79\xde\x0d\xca\xc6\x02\xb0\x74\x59\x76\x6b\x73\xaf\x05\ +\x2c\x33\x18\x56\x36\xda\xb4\x2f\x63\x58\xc1\x4c\x22\x4c\xff\x94\ +\x74\xf3\x7e\x80\x03\xb3\x59\x2c\xc0\x12\x99\xce\x45\x98\xfd\x51\ +\xbf\xfb\xe4\x84\x33\x5f\xe3\x27\xe7\x6d\xa4\xd2\xd1\x69\x0d\xeb\ +\x24\x24\x36\xaa\x57\xb4\xf6\xb8\xb9\x08\x1f\x10\x71\x51\xa5\xbf\ +\x03\x1c\xf4\xa7\x62\x00\x96\xeb\x5d\x77\x22\x62\xf6\xad\xed\xfc\ +\xce\xa3\x1e\x23\xf6\xf2\x96\x1e\x4b\x54\x68\x4d\x8e\x43\x93\x39\ +\xf8\xc6\x07\xc7\x5d\x03\x09\x3e\xad\xaa\xb3\x7f\x02\xe0\x8a\x71\ +\xa5\x51\x02\x2b\x47\xcc\xbe\x8a\x8e\xde\xa4\x77\x21\x6a\x76\x1c\ +\x4b\x23\xc2\x8e\xcf\x7a\x68\x72\x84\x5b\x54\x69\x62\xa6\xfb\x97\ +\x42\x00\x83\xb2\xb1\x00\xb6\x15\x56\xce\x0b\x07\x73\x21\x95\x5a\ +\x30\x77\x7e\x2f\x6a\x88\x96\x80\xa3\x9e\xee\x2e\xe6\x66\x00\x11\ +\x8e\xce\x47\x84\xb1\x90\x6e\x8e\xd6\xef\x3e\x31\x91\x7d\x70\xbf\ +\x60\x83\xcc\x09\x4a\xb4\x34\xef\x17\x0a\x0a\x0d\x97\x37\x7d\x96\ +\x84\x6b\xb4\x7c\x00\x97\xc8\x74\xe1\x0b\xb5\xd1\x07\xe1\xda\x03\ +\x4c\x06\x1c\xfe\x41\xbe\x40\x21\x24\xc2\x4f\x42\x9f\xab\x7e\x7f\ +\x30\xed\xad\x56\x67\xe5\x24\x62\x26\x11\xa6\x2b\x8b\x02\x37\x13\ +\xa0\xa0\x18\x60\x30\x53\x70\x71\x24\xa8\x74\xf2\xde\x06\xb4\x75\ +\x4d\x67\xff\xd8\xbf\xa9\x92\x71\x4a\x4e\x41\x4c\xe6\x9c\x4a\xad\ +\x1b\x5a\x39\x68\xc2\xf9\x5c\x91\x4d\x07\xd8\x9e\xe7\xb5\x1c\xb4\ +\x92\xe5\x2d\x3d\x09\x28\x88\xbc\x73\xae\xd0\x21\xe4\x00\x84\x15\ +\x83\x43\x11\x34\x61\xe8\x73\xd0\xce\x72\x56\x6b\xb1\x01\xc3\x07\ +\x2e\x4e\xaa\x0f\xb8\x61\xb0\xec\x60\x99\xc0\x95\xbc\xfa\xf6\xe1\ +\x54\x48\xe7\x16\x9c\x75\x41\x21\xfc\x34\xc2\xee\x80\x0b\x73\xb8\ +\x38\x87\x0b\x74\xb0\xea\x22\xa6\x16\x1c\x7a\xc0\x32\x41\xe3\xcd\ +\x3a\xe3\xde\x6a\xe3\x1f\xcb\x89\x59\x4a\x14\x59\x5a\x8e\x00\x00\ +\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x01\x79\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x28\x00\x00\x00\x28\x08\x06\x00\x00\x00\x8c\xfe\xb8\x6d\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x01\x2b\x49\x44\x41\x54\x78\x9c\xed\ +\x98\xcd\x4a\xc3\x40\x14\x46\xe7\x11\xbb\x8b\x9d\xee\xeb\x7d\x83\ +\x32\x89\x28\x48\xf3\x03\x01\x95\xf6\x11\x34\xa9\x4f\xa0\xbb\x9a\ +\xb4\x5b\xc9\x1b\xd8\x49\xc1\x9d\x1b\x6b\xdc\x2b\x17\x4c\x09\x81\ +\xb6\x09\x33\x6d\xa7\x78\x0f\x7c\x9b\xcb\x30\x1c\x3e\x66\x60\x18\ +\xc6\xfe\x03\xd6\xf5\xf4\xbd\x3f\x7a\x95\xd5\xe0\x8c\x99\x02\x8c\ +\x33\x19\x3e\x7f\xfe\x54\x83\x33\x66\x0a\x40\x82\x8a\x00\x35\xa8\ +\x08\x50\x83\x8a\x00\x35\xa8\x08\x50\x83\x8a\x00\x35\xa8\x08\x50\ +\x83\x8a\x00\x35\x78\xea\x0d\x76\x2e\x9f\xae\xac\xe1\xf4\xa3\xfe\ +\xac\xef\xff\x45\x44\x8b\xa2\x2e\x88\xb3\x4d\xeb\x71\x2f\xdc\x53\ +\xab\x24\x77\x5f\x82\xc1\xc3\xdb\xaa\x2e\x12\xb6\x8c\x88\x64\xd1\ +\x75\x93\x5b\xad\x72\xba\x24\x45\x24\x8b\xb3\x61\x7a\xb7\x17\xb9\ +\xaa\xa4\xb8\x5f\x7c\x19\x29\x57\xc2\xbd\xc4\xb7\x63\xd9\xb8\x49\ +\x7b\x92\x17\x3d\x2f\xb9\x61\x87\x04\x25\x45\x9c\xaf\x9a\xc8\xf1\ +\x7d\x9d\xb9\x9d\x92\x7e\x1a\x6c\x93\x74\x8e\x29\xb7\x4b\xd2\x41\ +\x39\x7f\x76\x5c\xb9\x92\x9e\x3f\x0f\xec\x58\xae\x2f\xce\xc5\x24\ +\xff\xe6\xc1\x81\x2e\x44\x5b\x49\xe7\x71\x69\x9e\x5c\x09\xf7\x92\ +\x11\x66\x3d\x20\x88\x86\xe0\x67\xe3\xf9\x38\xcb\x4d\x8a\x55\xfd\ +\x00\xc5\x81\xea\x2b\x25\xd4\x1c\x74\x22\xc1\x50\x57\x83\xc6\x9f\ +\x41\x66\x30\xbf\x09\x95\x08\x87\x6b\x3d\x8c\xee\x00\x00\x00\x00\ +\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x07\x71\ +\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\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\ +\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\ +\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\ +\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\ +\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\ +\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x32\ +\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x32\x22\ +\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\ +\x20\x38\x2e\x34\x36\x36\x36\x36\x36\x35\x20\x38\x2e\x34\x36\x36\ +\x36\x36\x36\x39\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\ +\x3d\x22\x31\x2e\x31\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\ +\x67\x38\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x39\x32\x2e\x35\x20\ +\x28\x32\x30\x36\x30\x65\x63\x31\x66\x39\x66\x2c\x20\x32\x30\x32\ +\x30\x2d\x30\x34\x2d\x30\x38\x29\x22\x0a\x20\x20\x20\x73\x6f\x64\ +\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x72\ +\x75\x6e\x6e\x69\x6e\x67\x2e\x73\x76\x67\x22\x3e\x0a\x20\x20\x3c\ +\x64\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\ +\x66\x73\x32\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\ +\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x62\x61\x73\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\ +\x66\x66\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\ +\x72\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\ +\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\ +\x69\x74\x79\x3d\x22\x31\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\ +\x69\x74\x79\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\x64\ +\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x37\x2e\x39\x31\x39\ +\x35\x39\x35\x39\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x38\x2e\x33\x39\x30\x38\x38\ +\x39\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x79\x3d\x22\x32\x34\x2e\x33\x39\x31\x35\x39\x35\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\ +\x63\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x6d\x6d\ +\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x6c\ +\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\ +\x67\x72\x69\x64\x3d\x22\x66\x61\x6c\x73\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\ +\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x38\x34\x38\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\ +\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x30\x31\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x37\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\ +\x6f\x77\x2d\x79\x3d\x22\x31\x31\x30\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\ +\x2d\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\ +\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\x35\ +\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\x67\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\x3d\x22\x43\ +\x61\x6c\x71\x75\x65\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\x64\x65\ +\x3d\x22\x6c\x61\x79\x65\x72\x22\x0a\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\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\x30\x2c\x2d\x32\x38\x38\x2e\x35\x33\x33\x33\x31\ +\x29\x22\x3e\x0a\x20\x20\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ +\x6c\x6c\x3a\x23\x32\x37\x37\x65\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\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x30\x2e\x32\x35\x36\x30\x34\x38\x33\x35\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\ +\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\ +\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x38\x31\x35\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x34\x2e\x32\x33\x33\x33\x33\ +\x33\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x32\ +\x39\x32\x2e\x37\x36\x36\x36\x33\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x72\x3d\x22\x33\x2e\x38\x34\x30\x37\x32\x35\x39\x22\x20\x2f\ +\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\ +\x00\x00\x00\xc1\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x00\x73\x49\x44\x41\x54\x78\x9c\xed\ +\xd1\xa1\x0d\x03\x41\x00\xc4\xc0\xab\xf1\xfa\xaf\xc4\x24\x4f\x1e\ +\x2d\x0a\x89\x1c\x60\x4b\x5b\xc0\x6a\xce\xa9\xaa\xaa\xfa\x61\xdc\ +\xfb\xf9\x87\x9d\x8e\xbc\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\ +\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\ +\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\ +\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\x24\x32\xd9\x12\ +\x24\x32\xd9\x12\x24\x52\x55\x55\x75\xbe\xee\x01\x9a\x19\xcd\x9a\ +\x94\x42\x00\x68\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\ +\x00\x00\x06\x73\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x01\xd8\x00\x00\x01\xd8\ +\x01\xfa\x5c\xa6\x72\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\ +\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x05\xf0\x49\x44\ +\x41\x54\x78\x9c\xed\x9b\x5b\x6c\x54\x45\x18\xc7\x7f\xbb\xab\x04\ +\xdb\x0a\xd1\x28\x01\x42\xa4\xb5\x16\x12\x4d\x4c\x8b\x55\x92\x46\ +\x29\x4d\x68\x02\x0f\xc6\x68\x89\x18\x13\xdf\xf1\x89\x70\x89\xfa\ +\x42\x62\x02\xb1\x86\xf0\xa6\xb4\x0f\x3c\xe1\x05\xa3\x81\x40\x40\ +\x23\x52\x29\x78\x29\x10\x45\xb1\x48\x48\x4c\xb4\xc4\xe2\x25\x25\ +\x04\xf1\x82\x14\x5c\x76\x7d\x98\x39\xb0\x3d\xfb\xcd\x99\x99\x73\ +\xa9\x35\xed\x3f\x99\x97\x39\xdf\x75\xf6\x9c\x6f\xbe\xf9\xe6\x5b\ +\xc8\x0e\xf5\xc0\xc7\xc0\x55\xa0\x1c\x73\x5c\x05\xfa\x80\xf9\x19\ +\xda\x99\x19\x0e\x11\xdf\xf1\xf0\xe8\xcb\xca\xc8\x5c\x86\x72\x47\ +\x81\x69\x29\xc9\xbb\x06\x4c\x47\x2d\x46\xaa\xc8\x72\x01\x4a\x29\ +\xcb\xcc\x93\xc1\x02\xe4\xd3\x16\xf8\x7f\xc3\x2d\xe3\xa8\xab\x8c\ +\xfb\x82\x97\xc8\xee\xed\x1c\x83\x49\xff\x06\x4c\x2d\x80\x03\x4d\ +\x03\xd0\x0b\xec\x01\x9e\x75\xe4\xf9\xaf\x90\x47\xd9\xb8\x07\x65\ +\x73\x43\x52\x81\x33\x81\xb3\x8c\xdd\x93\xbf\x00\xda\x2c\x7c\x33\ +\xa8\xde\xcb\x7d\x76\x85\x92\xc0\x3f\xc3\xc2\xd3\xa6\x6d\xab\xe4\ +\x39\xab\x7d\x88\x8d\xad\x82\x21\x81\x33\x6f\x03\xf3\x42\xf4\xb5\ +\xc0\x4b\xc0\x05\x03\x8f\x2b\xa4\x05\xb8\xa0\x65\xd7\x86\x68\xe7\ +\x69\x5b\x24\x9e\xb2\xf6\x21\x16\x16\x60\x4f\x63\xff\x02\x36\x02\ +\xb7\x01\x9d\x54\xbf\x2d\x95\x63\xd4\x43\xf7\x68\x84\x9c\x21\x60\ +\x99\xd6\xb9\x51\xdb\x60\x4b\xa7\x17\x78\x7b\x0f\xec\xb7\x08\xae\ +\x1c\xe7\x31\xff\x02\xc1\xf8\xd0\x43\xf7\x01\x8b\xac\x92\xd6\xe9\ +\x6a\xdf\x7e\x5f\xe7\x97\x7b\x08\x77\x19\xef\x03\xb3\x3d\xf4\xcf\ +\xd6\x3c\x69\xda\xb0\xdc\x55\xf9\xad\xc0\x19\x41\xc0\x8f\xc0\xf3\ +\xc0\x88\xa3\xc2\x22\xf0\x0e\xd0\xe2\xe1\x78\x18\x2d\x5a\x46\xd1\ +\x51\xe7\x08\xb0\x5a\xdb\x1a\x7e\x76\x46\xfb\x66\xc5\x1a\x83\xf0\ +\x55\xfa\xf9\x4c\x54\x60\x89\x8a\x0f\x9f\x03\x4d\x31\x9d\x96\xd0\ +\xa4\x65\x46\x7d\xe7\x5b\xb9\x19\xf1\x57\x19\xe8\xd6\xd8\x14\xdd\ +\x89\x1c\xc1\x07\xa8\x4e\x4d\x9b\x80\xf7\x42\x74\xff\x00\x2f\x03\ +\x85\x18\x4e\xda\x90\x47\x39\x10\x5e\xf8\x3e\xe0\x7e\x81\xfe\x08\ +\xd5\x7e\xfc\x06\xdc\x15\xa5\xa4\x57\x60\xba\x0e\x2c\x8a\xe0\xe9\ +\x04\xde\x02\x76\x00\xcd\x0e\x8e\xe4\x50\x05\x8e\x36\xe0\x29\x3d\ +\xda\xf4\x9c\x4b\xfe\xdf\x0c\xbc\xa1\x75\x76\x46\xd0\xb5\xa0\x6c\ +\x0f\xfb\xd3\x6b\x62\x78\x10\xf9\x5b\xdb\xee\x60\x94\x0b\x3a\x80\ +\x1e\xe0\x27\x41\x47\x30\xce\x01\xdb\x80\xa5\x29\xe9\xdc\x2e\xe8\ +\x28\xa2\x7c\xad\xc2\x41\x81\xf8\x0f\xfc\xa2\xb7\x84\x87\x81\x7e\ +\x41\xb6\x6d\x1c\x05\x1e\x4d\xa8\x7b\x16\x70\x49\x90\xdd\x1f\x26\ +\xec\x32\x18\xb1\x21\x81\xf2\x3c\xb0\x05\x7b\x7e\x10\x35\x4a\x40\ +\x37\xc9\xce\x1f\xeb\x0d\xb2\xbb\x02\x82\xe9\xa8\xec\x2a\x4c\xf0\ +\x1d\xf1\x4b\x5a\x75\xa4\xbb\x8f\xef\xd3\x32\xe3\x60\x1a\xca\x97\ +\xb0\xcc\x21\x94\xef\xac\x33\x28\x5d\x19\x53\x61\x1e\x7b\x16\xf9\ +\x37\x6a\x67\xd9\xad\xc7\x51\x3d\x67\x5b\x84\xb8\x6f\xc2\x4a\x83\ +\xcc\x75\x20\x6f\x17\x65\x54\xb0\x7a\x0e\xff\xca\xcc\x96\x08\x27\ +\x4e\x6a\x63\x6a\x04\xbe\x1a\xfd\x6c\x30\x82\xbf\xdb\xd3\x96\x9c\ +\xf6\xc1\x14\x78\x0f\x83\x3a\x49\x45\xad\xfc\x71\x60\xb1\xa3\xc2\ +\xc5\xc8\xdf\x7c\x11\x58\x8b\xdb\x2f\x98\x47\xc5\x1e\x69\x47\x2a\ +\xa1\x82\xaa\xab\x2d\xc7\x05\x19\x95\xe3\x4d\x80\x46\xe4\x18\x10\ +\x56\xbc\x03\x98\x6b\x51\xfa\x89\xc0\x5b\x04\x1e\x77\x34\xba\x12\ +\x4f\x20\x2f\x42\x55\x04\x0f\x61\xae\xb6\xd5\x16\x7c\x87\x80\x7b\ +\x03\xa6\x3a\xe0\x15\xe0\x8a\x85\xe9\x12\xf0\x98\x41\x71\x87\x81\ +\x67\xad\xab\xc7\x02\x36\x18\x64\xb6\x1b\xe8\xdb\x81\xdf\x2d\x3e\ +\x5c\x41\xf9\x2a\x06\xd5\x06\x54\x50\x8a\x12\x70\xc2\xa0\xbc\x47\ +\xa0\x3d\x49\xb2\x2d\xac\x00\x9c\x12\xe4\xbe\x6e\xa0\xff\xda\x62\ +\xfb\x6e\x1c\xcb\x64\x1d\x98\x83\xd1\x2f\x02\x7d\x0e\x39\xd0\x74\ +\x09\xb4\xbe\x78\x5a\x90\x3b\x8c\x1c\x9c\x7f\x35\xd8\x3c\xa8\x7d\ +\xf2\x42\x01\xd8\x24\x08\x3b\x2d\xd0\xd6\x0b\x74\x97\x91\xa3\xbd\ +\x2f\x6a\x91\xb7\xc8\x46\x81\xf6\xb4\x40\xb7\x89\x88\xc3\x59\xd4\ +\xeb\x79\x1d\xf9\x75\x3f\x2f\xcc\x49\xc1\x71\x50\x1b\x9e\x14\x97\ +\xb5\xac\x30\xa4\xe3\xb6\x64\xdb\x09\x94\x2f\x22\x6c\xdf\xe7\xed\ +\xc2\xdc\x88\x30\x27\x2d\xc0\xcf\x16\xd9\x3e\x90\x64\xdd\x21\xcc\ +\x49\x0b\x20\xf9\x70\x03\x71\x02\x94\xf4\xed\x95\x1d\xe9\xe2\xc2\ +\xd5\x4e\x6f\x9d\x36\xc1\x7f\x0a\x73\xb3\x84\x39\x29\x30\xda\x72\ +\x06\x1f\xcc\x11\xe6\x2e\x0a\x73\x77\x0b\x73\x92\x0f\x37\x10\xb5\ +\x00\x05\xa0\x55\x98\x77\x5d\x80\x66\xaa\x6b\xf8\x71\x50\x87\x5c\ +\x68\xf9\x5e\x98\x93\x6c\x6b\x25\x46\x85\x2a\xce\x36\x78\x4e\xa0\ +\x8d\x7b\xa0\xaa\xc4\xb8\x6e\x83\x2e\x89\xd0\x97\x06\xde\x6d\x02\ +\xed\x37\x24\x4f\x84\xbe\x15\xe4\xbe\x66\xa0\xff\xca\x62\xbb\x31\ +\x11\xf2\x49\x85\x4d\x55\x9a\xa5\x06\x9e\xf5\x4e\xae\xca\x78\xd1\ +\x20\x73\x89\x81\x7e\x09\x72\x05\x28\x32\x15\xbe\x8f\xf4\x0e\x43\ +\x87\x05\xde\x22\xea\x60\xe3\x8b\x27\x91\x0f\x43\x87\x2c\x7c\x3e\ +\x87\xa1\x46\x48\xf7\x38\xfc\x88\x41\x71\x11\x75\xb0\x71\xf9\x1c\ +\x0a\xa8\x5f\xde\x74\x1c\x7e\xc8\xd1\x16\xe7\xe3\xf0\x11\xc3\xc3\ +\xb8\x05\x91\xee\x08\x85\xa7\x50\x41\x4d\xda\x1d\x6a\xf5\x33\xe9\ +\x9b\x0f\xc6\x66\x4f\x5b\x6c\x05\x91\x7e\xc8\xa6\x24\xb6\x2f\xc2\ +\x89\x32\x2a\x45\x3e\xc6\xcd\x92\xd8\x31\xec\xf1\x67\x2f\x19\x95\ +\xc4\xb2\x2a\x8a\xda\x16\xc1\x67\xec\x25\x7e\x4e\x61\x2d\x8a\x82\ +\xb9\x2c\x9e\x24\x82\xe7\x51\x9f\x43\xd2\xb2\xf8\x66\x32\x2e\x8b\ +\x07\x30\x5d\x8c\x48\x69\xa8\x0f\x5a\x89\xd7\x36\x3b\x80\xbd\x15\ +\xc7\x06\xe7\x8b\x11\xc8\xfe\x6a\xac\x1d\x55\xc9\x19\x16\x74\x04\ +\x63\x18\x95\xe4\x98\xf6\x79\x5f\x78\x5d\x8d\x81\xf9\x72\x34\xea\ +\x8e\xbf\x13\xd8\x89\xda\x52\x5c\x7a\x01\x72\xa8\xfd\x77\x05\xf0\ +\x8c\x1e\x2b\xf4\x9c\xcb\x8e\xd3\xa2\x75\xed\x24\xe5\xcb\x51\x48\ +\xe7\x7a\xfc\x55\x1c\x1b\x11\x3c\x11\xe4\x07\xd2\xf5\xf8\x03\x02\ +\xbd\x54\xa1\xbe\x88\xe5\x7a\x1c\xd2\x69\x90\x18\x00\x16\x7a\xbb\ +\x68\xc6\x42\xd4\xed\x91\x49\x5f\x6a\x0d\x12\x10\xdd\x22\xb3\x1a\ +\xbf\x16\x99\x77\x89\xee\x2d\xb0\x61\x91\x96\x31\xae\x2d\x32\x90\ +\x7e\x93\xd4\x07\xf8\x5d\xb3\xcf\xd1\x3c\x69\xda\xe0\xdc\x24\x15\ +\x20\xed\x36\xb9\x03\x1e\xba\x3f\xb2\xc8\xca\xbc\x4d\x0e\xfc\x1b\ +\x25\x97\x11\x7d\xaa\x4c\xab\x51\xf2\x07\xc6\xa9\x51\x12\xfc\x5b\ +\x65\x6b\x50\x91\x3a\xab\x56\xd9\x17\xa8\xbe\x6b\xc8\xac\x55\x16\ +\xa6\x9a\xa5\x01\x75\xeb\xd3\x03\xec\xc2\xbd\x5d\x3e\x47\xfa\x0b\ +\xe0\x92\x24\x05\xed\xf2\xbb\xb4\xcd\xf5\x2e\x86\x66\x01\xe9\x4f\ +\x53\x65\x92\xfd\x65\x66\xea\x4f\x53\x59\x60\xd2\x2f\xc0\x78\xfe\ +\x6b\x2c\x88\x0b\x13\x0a\x93\xfe\x0d\xc8\x72\x01\xae\x4d\x50\x59\ +\x63\x90\xd5\x02\x94\x81\xcf\x52\x94\xf7\x29\x13\xf0\xf3\xb1\x61\ +\x3e\xaa\xcc\x96\xf4\xef\xf3\x07\x81\x7b\xb2\x32\xf2\x5f\xa6\x84\ +\x06\x53\x72\x77\x7f\x4f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x01\xea\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x3c\x00\x00\x00\x3c\x08\x06\x00\x00\x00\x3a\xfc\xd9\x72\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x01\x9c\x49\x44\x41\x54\x78\x9c\xed\ +\x97\xcf\x4e\x83\x40\x10\x87\x49\xf4\x31\xea\xd9\xc7\xe8\xd5\x7a\ +\xb0\xfc\x26\xe1\x09\xf5\x50\xf1\xc0\xcd\xc7\x69\x13\x63\x0f\x26\ +\xa6\xb1\x26\x34\xdd\xe1\x80\x59\x5a\x2e\x94\xf2\x47\xd8\xb2\x5b\ +\xe6\x4b\xe6\xc4\x6c\xc2\xc7\x0f\x96\x59\xcf\x13\x04\x41\x10\x46\ +\xcc\x1e\x78\x62\xa2\x35\x13\xa5\x35\xb5\xd6\xbd\x9e\xeb\x28\xa2\ +\xaf\x06\xb2\x59\xe9\x5e\xcf\x16\x12\xa2\x47\x26\x5a\x35\xbd\xf9\ +\x0b\xd6\x2a\xf1\xfd\x59\xef\xc2\x4c\xf4\x61\x81\x5c\x79\x01\x9f\ +\x22\xdc\x95\xc4\xf7\x67\x0c\x2c\x2d\x4c\x77\x99\x00\x0f\x9d\x05\ +\x05\x41\xb8\x4e\x78\xe8\x4d\xaa\x50\x22\xdc\x37\x6c\x41\xaa\x92\ +\xb0\x49\xd8\x82\x54\x25\x61\x93\xb0\x05\xa9\x4a\xc2\x26\x61\x0b\ +\x52\x95\x84\x4d\xc2\x0d\x9f\xbc\x22\x7a\x8f\x81\x89\x2e\x06\xa2\ +\xda\x35\x40\x94\xf7\xeb\xb5\xce\x25\x1c\x03\x93\x7c\x4d\x3a\x9d\ +\xde\x32\xb0\xa8\x90\x5d\xe8\x9e\xbc\x3f\x7b\x48\x2e\x0b\x57\x4a\ +\x17\x64\x35\xbb\xf9\xfc\xce\x39\x61\x06\xa2\xa2\xc8\x89\x74\x89\ +\xec\xb1\x27\x72\x4f\x98\xb2\x7a\x3b\x11\x0a\x82\x1b\x06\x9e\x99\ +\x28\x2c\xbd\x46\xf4\xe2\xf6\x2e\x8d\xf2\x14\x6b\xd3\x77\x56\x98\ +\xca\x93\xee\x9a\xac\xed\xc2\xe9\x39\xe9\x2e\xb2\xb6\x0b\x87\x67\ +\x85\x0f\xdf\xf4\x55\x09\x87\xb5\xaf\xf4\x3f\xa5\xed\x13\xc6\xb8\ +\x36\xad\xb0\xe2\xd7\x53\xf5\xcb\x72\x50\x18\x23\x1b\x3c\xe2\x0e\ +\xa3\xa5\xf3\xb3\x74\xda\xf2\xf0\xe0\xe4\x2c\xad\x8e\xc7\xc3\xec\ +\xe6\x5b\x1c\x0f\x75\xbf\x93\xc7\x43\xbe\x50\x89\x70\xdf\xb0\x05\ +\xa9\x4a\xc2\x26\x61\x0b\x52\x95\x84\x4d\xa2\x88\x7e\x87\x4e\x35\ +\x2f\x05\xfc\x78\xa6\xe1\x16\x63\x9f\xf1\x02\x5e\x8d\x0b\xef\x83\ +\xe0\x5e\x11\x6d\x86\x96\x55\x44\xdf\xc5\xf1\xd5\x18\xbb\xc3\xe8\ +\x17\x2a\x60\x3b\xc0\x6b\xbc\xd5\xc9\x5e\x4c\x56\x10\x04\x41\x10\ +\x04\xaf\x2f\xfe\x00\x8f\xc5\xfd\x1f\xd6\x54\x0c\x66\x00\x00\x00\ +\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x01\x7f\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x01\x31\x49\x44\x41\x54\x78\x9c\xed\ +\x98\x41\x6a\x02\x41\x10\x00\xeb\x92\xab\x7e\x20\xe0\x49\xf4\x60\ +\x4e\xfe\x24\x7f\x31\x3f\x89\x87\x3c\x21\x88\x0f\xf0\x17\x01\xdf\ +\xa0\x59\x41\x88\x21\xd7\xd0\xb9\x4c\x40\x44\x77\x67\xdd\xde\xa5\ +\x6d\xbb\xa0\x61\x0f\xb3\x43\x17\x33\xd3\x3b\xdb\x10\x04\x41\x10\ +\x04\xc1\xfd\xd2\x07\xd6\x80\x18\x88\x6f\x60\x09\x8c\xea\x4a\x3c\ +\x00\x2b\x03\x02\x72\x12\x7b\xe0\xb1\x8e\xc8\x9b\x81\xa4\xe5\x42\ +\xbc\xe7\x4a\xcc\x0c\x24\x2b\x25\x71\xc8\x91\x78\x06\x7e\x0d\x24\ +\x2b\x15\x51\xca\x14\xf8\x31\x90\xa4\x34\x11\x19\x00\x9f\x06\x12\ +\x94\x26\x22\x3d\xe0\xc3\x40\x72\xd2\x44\x44\xab\xcc\xce\x81\x22\ +\x63\x5c\x91\xc6\xaa\x8b\x68\x94\xd9\xd7\x34\xd7\xa4\x42\xa6\x48\ +\x63\x48\xef\x88\x96\xc8\x8b\xd2\x32\xef\x80\xa7\x34\xe7\x18\xd8\ +\x64\x8c\xd9\x6a\x89\x68\x97\xd9\x32\x19\x6d\x09\x69\xbb\xcc\x9e\ +\x93\x69\x43\x42\xfe\xcb\xac\xd6\x64\x55\xe7\x60\x72\xf2\x9c\x53\ +\x0c\x24\x57\xa4\x8b\xdb\xec\xb1\x4c\x1b\x12\xe2\x4a\x64\xe0\x65\ +\x6b\x75\x79\xd8\xb7\x99\xa5\x59\xae\x15\xe9\xa2\xfc\x1e\xaf\x7a\ +\x1b\x32\x9d\x7c\x10\xcf\x6d\x5d\x6d\x19\x9f\x57\x14\x57\x97\x46\ +\x37\xd7\x78\x57\x3f\x56\xae\x7e\x75\x5d\x35\x1f\x6e\xa5\x1d\xf4\ +\x85\x93\x06\xdd\xc2\x4b\xcb\x74\xc8\x0d\x37\xb1\x0f\x69\x25\x6a\ +\x4b\x04\x41\x10\x04\x41\x80\x71\xfe\x00\x36\x62\xd8\xa4\x4a\x95\ +\x24\xf6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x01\x43\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x00\xf5\x49\x44\x41\x54\x78\x9c\xed\ +\xd6\x31\x0e\xc2\x30\x0c\x05\xd0\x5c\xa2\x43\x8f\x83\x0f\x01\x27\ +\xe0\x0a\x9c\xa1\xa3\x67\x98\x3b\xc3\x11\x98\xbb\x80\x98\x58\x3d\ +\xb3\xb0\x04\xa9\x48\x6d\xd8\x51\x87\x96\x3a\x71\x4d\xfc\x25\xef\ +\x79\xca\xb7\x12\xe7\x2c\x96\x38\x81\xda\x87\xb9\xb3\xaa\x7d\xa5\ +\x16\xb0\x3e\xbe\x64\x11\x30\x13\x70\x79\x74\x61\x73\x12\x44\xc0\ +\x4c\x00\xf9\x5e\x16\x01\x0c\x00\x51\x04\x30\x01\xc4\x10\xc0\x08\ +\x10\x41\x00\x33\x20\x39\x02\x26\x1c\x16\x9b\x96\x63\x2a\xb5\x80\ +\xfd\xf5\xcd\x8f\x48\x09\xb8\x3f\xbb\x70\xe0\x46\xa4\x04\x90\xef\ +\xf9\x11\xa9\x01\xc4\x8d\x18\x3a\x68\xb1\x3d\x0f\x0e\x17\x80\x38\ +\x11\x52\x00\xe2\x42\x48\x54\x88\x38\x11\xd2\x00\xfa\x42\x2c\xba\ +\x42\x38\x62\x0c\x00\xf1\xbf\x12\x21\xfa\x0d\xa8\x07\x14\x13\x76\ +\xa0\xdc\xdd\x7e\x1e\x34\x80\xfb\xd3\x0a\x81\x76\x40\x11\x69\x07\ +\xd0\x00\xb9\x54\x08\x72\x02\x94\x4b\x7c\x07\x20\x27\x00\x6a\xaf\ +\x10\x4a\x03\xa6\x64\x91\xef\x80\xcb\x1d\x80\xda\x2b\x84\x06\x68\ +\xed\x06\x46\xc7\x2a\xd4\x08\x2f\xb1\xc5\xe2\xf4\xe6\x03\x50\xb8\ +\xee\x2b\x4a\xb8\xc4\x16\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x01\x3a\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x00\xec\x49\x44\x41\x54\x78\x9c\xed\ +\x96\xb1\x0a\xc2\x30\x14\x45\xf3\x35\x42\xdd\x94\x37\xf4\x2f\x1c\ +\xfd\x1d\xc1\xc5\xb5\x93\x6f\xb5\xfe\x80\x9b\x14\xd4\x45\x84\x6e\ +\xb1\x83\x20\xd4\x5d\xff\xa0\x63\x44\x44\xa8\x10\x90\xda\x24\x26\ +\xf5\x1e\xb8\x73\x39\xdc\xfb\x68\x84\x00\x00\x00\x2f\x21\x2e\xd5\ +\x2b\xd1\x24\xd3\x66\xb5\x3b\x18\x0b\xd5\xbe\x47\xf3\x72\x16\xb6\ +\x00\x1b\x90\x30\x2d\xd0\x1b\xc6\x6f\xf9\x28\xc0\x2d\x25\xbc\x10\ +\xe0\x16\x12\xde\x08\xf0\x97\x12\x5e\x09\x70\xa9\x20\x10\xa1\x81\ +\x18\x13\x6a\x44\xfd\x80\xfa\xd3\xad\x76\x42\x8b\xf5\xde\xc8\x4f\ +\x2c\xcd\x72\xbb\x47\x3c\x48\x0a\xad\xc4\x28\xd9\xb4\x96\x48\xb3\ +\x5c\x8d\x97\x27\xbb\x02\x3e\x44\x40\x80\xd1\x80\xc2\x84\x9a\xd0\ +\xa9\x23\x2e\x6e\x95\x72\xcd\xf1\x5a\x99\x13\xf8\x15\x04\x01\xd6\ +\x37\x20\xcf\x17\x2b\x71\xd6\x40\xf0\x02\xae\x20\x08\x70\x47\x27\ +\x24\x43\x17\x70\x05\x41\x80\x3b\x3a\x21\x19\xba\x80\x2b\x08\x02\ +\xfc\x6c\xe0\xf1\xb4\x75\x8d\x34\xf9\x9c\xf6\x21\xe2\xef\x04\x00\ +\x00\x40\xb8\xe0\x0e\x01\x24\xc1\x69\xe0\xc1\x96\xdb\x00\x00\x00\ +\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x00\xaf\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x00\x61\x49\x44\x41\x54\x78\x9c\xed\ +\xd2\xc1\x09\x84\x50\x0c\x40\xc1\x94\xf6\xbb\xd8\x76\xed\x4c\xaf\ +\x8b\x47\x41\x79\xca\x0c\xe4\x9e\xf0\x32\x03\x00\xdc\x6b\x6d\xbf\ +\xfd\x7f\xe6\xad\x96\x43\x62\x14\xa9\x51\xa4\x46\x91\x1a\x45\x6a\ +\x14\xa9\xc9\x15\x59\xa7\x85\x9e\x9e\x71\xc8\x89\x22\x5b\xec\xb5\ +\xae\xca\x2d\x74\x95\x43\x6a\x14\xa9\x51\xa4\x46\x91\x1a\x45\x6a\ +\x14\xa9\xf9\x4c\x11\x00\x98\x97\x38\x00\x45\x64\x30\xbf\x65\x80\ +\x26\xf4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x00\x9d\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x00\x4f\x49\x44\x41\x54\x78\x9c\xed\ +\xd6\xc1\x09\x00\x20\x0c\x03\xc0\x8c\xde\xcd\xeb\x16\x2a\xe1\x0e\ +\xf2\x37\xf8\x68\x12\x00\x1e\x99\x92\x64\x4b\x92\xd7\x0f\x50\x24\ +\xad\x3f\x32\x25\x01\x00\xf2\xc1\x45\x36\xe3\xd3\x3a\x1a\xb7\x24\ +\xa9\x29\x32\x25\x01\x00\xf2\xc1\x45\x36\xe3\xd3\x3a\x1a\xb7\x24\ +\xa9\x29\x32\x25\x01\x20\xd7\x1d\xce\x3c\xeb\xc7\x10\x2a\x5b\x4c\ +\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x01\xae\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x01\x60\x49\x44\x41\x54\x78\x9c\xed\ +\x99\x2d\x4f\x04\x41\x0c\x86\x4b\x08\x60\x38\x87\xc5\xf0\x03\x30\ +\x38\x08\x69\x0f\xcc\x05\x81\xdb\x0e\x20\x90\x58\x04\xfc\x80\xfb\ +\x0b\x48\x2c\xf2\x2c\x09\x92\x96\x0f\x09\x28\x14\x1a\x8b\xc3\x90\ +\x0d\x2c\xe1\x63\xb3\x68\xe8\xec\x5c\x97\x79\x92\xda\x4d\x9e\x64\ +\x3a\x7d\xa7\x0b\x90\xc9\x64\x32\x3f\x41\x09\x87\xc5\x7d\x31\x0d\ +\xde\x21\x0d\x15\x09\x3f\xf4\x95\x37\xc0\xbd\x88\xd6\xc5\xa7\xeb\ +\x57\x3b\x0b\xe0\x5f\x24\x54\x28\xe1\x05\x85\x8f\x96\xaf\x37\x7b\ +\xe0\x59\x84\x6a\x21\x0d\x8f\x7d\xe5\x5d\xa8\x60\x02\x3c\x8b\x50\ +\x23\xa4\x6b\x97\x5b\x8b\xe0\x5d\x84\x3e\x8f\x1b\xbf\x92\xf2\x09\ +\xca\xf6\x1c\x78\x16\xa1\xa6\x7f\x9e\x48\xc3\x7e\x31\x2a\x26\xc1\ +\xb3\x08\xd5\x25\x7c\x47\xe7\xbc\x02\xee\x45\xf4\x43\x26\xbc\x91\ +\x86\xd1\xea\x45\x98\x07\xd7\x22\x5a\x5f\x06\xfc\x8c\x12\x86\x83\ +\xb3\xc1\x8c\x6b\x11\x6a\x8e\x5b\xda\x74\x40\x56\x22\xa9\xd3\x01\ +\x99\x8b\x24\x4a\x07\x14\x41\x24\x49\x3a\xa0\x88\x22\xad\xa6\x03\ +\x6a\x41\x84\xbe\xaa\x44\xe1\xe3\x68\xe9\xa0\x45\x91\x2a\x6a\x3a\ +\x68\x5b\x84\x62\xa5\x83\x64\x22\x6a\x9c\x0e\xb2\x88\xfe\xb9\x57\ +\x6e\x5d\x1f\x2d\xec\x40\xb3\x97\xee\xaf\x5f\xf4\x3e\x10\xdd\x47\ +\x14\xfc\x0e\x8d\x28\xc5\x6c\x74\x81\x78\x22\xde\x63\xbc\x38\x7f\ +\x58\xa1\xfb\xa7\xae\x74\x60\xf9\x80\xd6\x53\xd9\x82\xff\xb6\xa0\ +\x2b\xa3\x4e\x65\x0b\x3a\xbf\xc4\x46\xef\xbf\x15\x30\xc5\x54\xb6\ +\x60\x2c\xa6\xb2\x05\x63\x31\x95\x2d\x20\xe5\x83\xa5\x9b\xbd\x29\ +\x93\x8f\x65\x32\x99\x0c\xfc\x92\x77\xa1\x6c\x53\xe9\x31\x90\x32\ +\x83\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x07\x6f\ +\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\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\ +\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\ +\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\ +\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\ +\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\ +\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x32\ +\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x32\x22\ +\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\ +\x20\x38\x2e\x34\x36\x36\x36\x36\x36\x35\x20\x38\x2e\x34\x36\x36\ +\x36\x36\x36\x39\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\ +\x3d\x22\x31\x2e\x31\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\ +\x67\x38\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x39\x32\x2e\x35\x20\ +\x28\x32\x30\x36\x30\x65\x63\x31\x66\x39\x66\x2c\x20\x32\x30\x32\ +\x30\x2d\x30\x34\x2d\x30\x38\x29\x22\x0a\x20\x20\x20\x73\x6f\x64\ +\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x65\ +\x72\x72\x6f\x72\x2e\x73\x76\x67\x22\x3e\x0a\x20\x20\x3c\x64\x65\ +\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\ +\x32\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\ +\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x62\x61\x73\x65\x22\x0a\x20\x20\x20\x20\x20\ +\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\ +\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\ +\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\ +\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\ +\x79\x3d\x22\x31\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\ +\x79\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\x64\x6f\x77\ +\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x37\x2e\x39\x31\x39\x35\x39\ +\x35\x39\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x78\x3d\x22\x31\x38\x2e\x33\x39\x30\x38\x38\x39\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x79\x3d\x22\x32\x34\x2e\x33\x39\x31\x35\x39\x35\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\x63\x75\ +\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x6d\x6d\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\ +\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x6c\x61\x79\ +\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\ +\x69\x64\x3d\x22\x66\x61\x6c\x73\x65\x22\x0a\x20\x20\x20\x20\x20\ +\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\ +\x77\x69\x64\x74\x68\x3d\x22\x31\x38\x34\x38\x22\x0a\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\ +\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x30\x31\x36\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\ +\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x37\x32\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\ +\x2d\x79\x3d\x22\x31\x31\x30\x37\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\ +\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\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\x35\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\x67\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\x3d\x22\x43\x61\x6c\ +\x71\x75\x65\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\x64\x65\x3d\x22\ +\x6c\x61\x79\x65\x72\x22\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x6c\x61\x79\x65\x72\x31\x22\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\x30\x2c\x2d\x32\x38\x38\x2e\x35\x33\x33\x33\x31\x29\x22\ +\x3e\x0a\x20\x20\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\ +\x3a\x23\x66\x66\x34\x34\x34\x34\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\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x30\x2e\x32\x35\x36\x30\x34\x38\x33\x35\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\ +\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x38\x31\x35\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x78\x3d\x22\x34\x2e\x32\x33\x33\x33\x33\x33\x31\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x32\x39\x32\ +\x2e\x37\x36\x36\x36\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\ +\x3d\x22\x33\x2e\x38\x34\x30\x37\x32\x35\x39\x22\x20\x2f\x3e\x0a\ +\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x00\x00\x06\x77\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x06\x29\x49\x44\x41\x54\x78\x9c\xed\ +\x5b\xe9\x8f\x14\x45\x14\x2f\xbc\xe2\x11\x45\x63\x0c\xa2\xb0\x33\ +\x55\x3d\x2b\x8a\x82\x08\x44\x83\xa2\x7e\x50\x44\x8d\x41\xe3\x07\ +\xaf\x2f\x1a\x8d\xe7\x17\x35\x7e\xf2\x5c\x8d\x02\xd3\xaf\x7a\x40\ +\x84\x98\xf8\x17\xa8\xf8\x41\x05\x25\xea\xe2\x85\xe2\x11\xfd\x68\ +\x0c\x51\xe3\xc2\x6e\xbf\x37\xb3\x1c\x0b\x11\xa3\xc8\x35\xa6\xe6\ +\x30\x3d\x55\xd5\xdb\xd3\xd3\xbd\x33\x3b\x32\xbf\xa4\xbe\x4c\xd7\ +\xab\x57\xaf\xea\x1d\x55\xef\xd5\x30\xd6\x43\x0f\x3d\xf4\xd0\x43\ +\x0f\x13\x0a\xc7\xf3\x67\x0a\xc0\x7b\x84\xc4\x75\x42\xd2\x16\x01\ +\xf8\xbb\x90\x34\x26\x24\x1e\xa9\x36\x1a\xab\xfc\x06\xf8\xa5\x00\ +\x5a\x2b\x3c\xbc\x5b\xd1\xb0\x6e\x86\x53\x18\xce\x71\xa0\xbc\x00\ +\xdc\x2e\x24\x95\x5b\x6a\x55\xda\x95\x39\x18\x75\x58\xb7\x20\xeb\ +\xf9\xcb\x38\xe0\xa7\x02\xf0\x68\xcb\x82\x9b\x0b\x71\x94\x03\x6d\ +\xe6\x6e\xf1\x16\x36\x59\x91\x75\xfd\x59\x1c\x70\x53\x6a\x42\x87\ +\xb4\xca\xe2\x16\x4a\x73\xd8\x64\xc1\xec\x81\x9f\x4e\x12\x80\x1e\ +\x97\x78\x28\xc6\x8e\x96\x04\xd0\xc3\xfc\xd5\xd2\x34\xd5\x84\xa4\ +\x47\x38\xe0\x68\x8c\x45\x38\xa8\x78\x2a\xde\x1d\x15\x7e\xa6\xbb\ +\xe3\x3c\x0e\xb4\x35\x4c\x6d\x85\xc4\x21\xf3\x1b\xfe\x2c\xf2\xd8\ +\xa7\x8f\x95\x59\x59\xcc\x0a\x49\xdb\x42\xfc\x80\x7d\x21\x24\x7d\ +\xdd\xb7\x6a\xe7\xf4\x8e\x08\x2f\x00\xaf\x12\x12\x8b\xf6\x1d\xa2\ +\x77\x39\x8c\xcc\x55\x76\xdb\x28\x0c\xed\xe9\x93\x45\x1e\x36\xa6\ +\x72\x76\xd5\xe8\xd0\x30\xde\x60\xb6\x30\x72\xa9\x00\x7a\x3f\x64\ +\xa1\xc9\xf1\xfc\x2b\xdb\x2f\x3c\xe0\x9f\x96\xdd\x1d\xe2\xe0\x5f\ +\x5f\xe9\x23\xe9\x26\xfd\x7b\x56\x16\xef\x88\x1c\x5b\xfa\x77\x19\ +\x74\x1e\x2e\x55\xdf\xb8\x87\x4b\x6c\x1a\xc1\x01\xf7\x3b\xe0\x2f\ +\x6a\x87\xec\xcc\x71\x71\xbe\x90\xb8\xcf\xb2\xeb\x6f\xe6\xd6\xec\ +\x3e\xa3\xde\x8f\x4b\xfc\x4c\xfb\xbe\xb9\x59\x1e\x1c\xf0\xf3\x30\ +\x5a\x91\x1f\x9b\xca\x25\xbd\x65\x6a\x02\xed\xcd\x80\x3f\x8f\x4d\ +\x24\x72\x30\xea\x70\x89\x3b\x0d\x5b\x07\x7a\x9e\x95\xcb\x53\xea\ +\xfd\x9c\x7c\xf1\x62\x7d\x82\x71\x76\x48\x78\xb8\x58\xe7\x91\x93\ +\x34\xfb\xbf\x0e\xe5\xf2\x14\x21\xe9\x05\x8b\x26\x8c\x8e\x67\x62\ +\x89\x70\xed\x40\xf9\x04\x01\xf8\xad\x21\xbc\x87\x8f\xeb\x7d\xb9\ +\xa4\xd5\xda\x0e\x6e\x8d\xcb\x4f\x00\x7e\xa7\x99\x57\xc1\xd2\xe7\ +\x09\x8b\x26\x6e\x55\x73\x65\x69\x83\x4b\x7c\xd1\xe2\x84\x9e\x33\ +\x3a\x56\x77\x67\x87\xd6\xef\xde\xd8\xfc\x5c\xff\x7e\xdd\xbf\x04\ +\xb5\xac\x0e\x9b\x26\xa8\xdf\x12\x88\x6a\x82\xe7\x8b\x97\xeb\x71\ +\x5e\xd9\xbc\x75\x42\x2e\x2d\xd4\x26\xf3\xb7\xb2\x5b\x16\x13\x99\ +\xd5\x43\x67\x72\xa0\x03\x0d\x66\xe4\xe2\x7c\xa3\x63\xb9\x3c\x45\ +\xf7\x09\x6a\xae\x8e\x47\x0b\x58\x5a\xe0\x7a\x38\x93\x38\x14\x74\ +\x78\x41\x28\xad\xd0\x9c\xd3\x86\x56\xf9\x0a\xc0\x0f\x1a\x04\x73\ +\xf1\x19\x6b\xbf\xfc\xd8\x54\x23\x3a\x00\x7d\xc2\xd2\x40\x56\xd2\ +\x35\x86\x8a\x79\xfe\x75\x61\xfd\x8d\xe3\xb0\xc5\x47\x34\x0b\xdd\ +\xc6\xb9\xc4\x0f\x43\xe7\x09\x78\x83\xe1\x0f\x5c\xbc\x9a\x25\x05\ +\xd7\x43\x92\xa4\xf7\x42\x3b\x0f\x94\x8f\x33\x43\x64\xf1\x92\xd6\ +\x79\x8f\xcc\xd5\x34\x6f\x1f\x5b\x5f\x3e\x3e\xac\xbf\x7e\x58\x52\ +\xa1\x98\x25\x81\x63\x09\x67\x5d\xd7\x92\x5c\x9c\x84\x44\xd9\x71\ +\x01\x12\x36\x2e\xc9\x6d\x79\x01\x38\xd0\x70\xa7\x05\x48\xdc\x00\ +\xb7\xb7\x26\xbc\xe7\x5f\xd0\xf1\xc9\xa7\xd4\x5a\xca\x28\x39\x1e\ +\x3d\xa4\x0d\x34\x18\xad\x31\x46\x42\xe4\x76\x96\x10\x6a\x8c\x06\ +\x95\x06\xdc\xd4\x04\xcd\x60\x90\x26\x0b\xf8\x60\x0b\x8c\xf1\x75\ +\x8d\xf1\xcb\x51\x34\x1c\xe8\xc7\x20\x4d\x1a\x37\xb4\xea\xb5\x3b\ +\x68\xd3\xf8\x43\x34\x0d\x2d\x6f\xdc\x08\x5c\x97\xf8\xf0\x93\xf5\ +\xfc\x65\x91\x8c\xb5\x23\x70\xff\xaa\x92\x60\x09\x51\xcb\x11\x04\ +\x85\x19\x8a\xa2\x71\x00\x6f\x8d\xab\xbd\x06\x6a\xa9\xeb\x58\xe1\ +\x44\x4f\x66\x5c\xb8\xc2\x3f\x9b\x25\x44\x6e\x39\x9d\xd3\xa8\x01\ +\xb4\x3b\x72\x1e\x85\xd2\x1c\x4d\x6b\x7e\x8b\xcd\x58\x00\xed\x09\ +\x0e\xa2\xd2\x5f\x4d\xd0\xfc\x15\xa4\x99\x26\x8b\xa7\xb1\x84\x98\ +\xe5\xee\x3a\x5d\x33\xc5\xfd\x51\x34\xfd\x85\xe1\xf3\x1b\x69\x68\ +\x57\x6c\xc6\x5c\xd2\x3f\xc1\x41\x32\x03\x43\x27\x47\xd1\x08\xc0\ +\xc3\x41\x9a\xf1\x4e\x6d\xb1\xae\xe1\x8d\xbb\x79\x28\x8a\x46\xcd\ +\x55\x5b\x80\x03\x89\x17\x60\x46\x61\xf8\x94\x6e\x59\x80\xe9\x03\ +\x78\x6a\xe2\x05\x10\x9a\x09\x28\xb5\xea\x16\x13\xc8\xe5\x47\x66\ +\x24\x36\x01\xd1\xc5\x4e\x50\xbf\x44\xb5\xe4\x04\xb9\x16\x06\x55\ +\x68\xe9\x44\x18\x54\x35\xc6\xd8\x61\xd0\xc3\xdb\x12\xe7\x06\x84\ +\x76\x10\x52\x87\x8b\x28\x1a\x75\x48\x69\x58\xb4\x14\xf2\xf5\x46\ +\x82\x54\xe2\xf7\x91\x34\x40\x2b\xb4\xb9\xaf\x8d\xcd\xd8\x39\xe6\ +\x8f\xc2\xee\x48\xbf\x76\x9a\xea\xda\xd6\x72\x79\x5d\x98\xd9\xdd\ +\x63\xe7\x3a\xfc\xbf\x49\x88\x00\xe5\x59\xab\x70\x8e\xf5\x94\x98\ +\x2d\x29\xaa\x12\x8f\x6c\xbc\xa4\x28\xd0\xde\xb4\x26\x10\x3b\x29\ +\x2a\x71\x63\xaa\x49\x51\x05\x95\x5a\x36\xd4\xca\xc3\x25\xac\x0d\ +\x69\x71\x2e\xe9\xc9\xa6\xd3\xe2\x1e\x2e\x35\x76\xdf\xc3\xc5\x2c\ +\x0d\x08\x2d\xc3\x52\x29\x42\x84\x54\x7b\x38\xd0\xb3\x69\x15\x46\ +\x94\xc0\xda\x02\x3c\x1d\x56\x45\xb2\x38\xec\x8f\x59\x5a\x10\x2e\ +\x2d\x34\x9e\xc0\x00\xbe\x3d\x91\xa5\xb1\xbe\x95\x3b\xce\xd2\x2f\ +\x64\x61\xa5\x31\x21\x71\x7d\xa3\xe3\xc3\x83\xd6\xbe\x49\x20\x6c\ +\x45\x48\xa0\x01\xfb\x84\xb4\xdd\x80\xe2\x7d\x71\xf9\x71\x89\x0f\ +\x34\x73\x04\xe6\x80\x2f\x35\x55\xb4\x4d\xe3\x5a\xca\x2d\xef\x81\ +\x94\x9d\x46\x96\xc7\x25\x7d\x13\x97\x9f\x3a\xf2\x46\x95\xc7\xb9\ +\xa4\xa7\x2c\x9b\xf2\x55\x1a\xd7\x70\x2b\xd4\xe3\x03\xdb\x6b\x2e\ +\x55\x3a\x37\x1e\x48\x68\xef\x04\xe3\xdc\x0b\x0c\xc7\x0b\x78\x34\ +\x93\xa7\x8b\x1a\x2a\xc2\xb6\x9d\x07\x2c\xa9\xc7\x56\x6c\x22\x91\ +\x01\x7f\x9e\xe5\x21\x53\xc5\x27\x04\x6d\xdd\x78\x22\xd3\x6c\x48\ +\xaa\xda\xf4\x17\x61\x4f\x64\x2a\x0e\x0f\xf0\x1d\xcb\xce\xef\x51\ +\x61\x93\xb5\x03\x0e\xf8\x8b\x54\x62\xc2\xb2\x08\xdb\x55\x95\xb6\ +\xda\x87\x6e\xd4\xbf\x3b\xae\x7f\x67\xd4\xd8\xea\x9d\xb0\x4e\x57\ +\x1f\xb3\x16\xea\x8c\xe3\x39\x97\xf8\x47\x56\x16\xaf\x60\xed\x84\ +\x03\xfe\x22\x21\x09\xad\xa7\x2f\xa0\x0d\x35\x4d\x69\x0c\x9f\x92\ +\xc6\xc6\xcb\x11\x54\xee\xfe\xfa\x41\x4a\xd2\x60\xce\xf3\x2f\xd3\ +\xdf\x0a\x04\xb4\xc3\x6f\xbb\xf0\x75\xa8\x47\x8a\xca\xe9\x58\x17\ +\xa1\x7e\x5e\x30\x7f\xdf\x66\xb3\xd3\x8a\x7f\x91\xf4\x4b\x93\x63\ +\xd4\xdb\x96\x0c\x8c\x9e\xcb\x3a\x89\x05\x6f\x94\x4f\xe4\x80\x50\ +\x79\xbe\x1a\x3e\x51\x6d\xd7\x70\x54\x00\x3d\xaa\x26\xaf\x1a\x97\ +\xf4\x98\xf1\xfa\x6c\x7c\xfa\x83\xaa\xea\xab\x78\xb3\xc9\x02\xae\ +\x8a\xa9\x21\x6a\x9a\x72\x1b\x54\x51\x86\x4d\x56\x08\x97\x6e\x56\ +\x39\xb8\xda\x1f\x21\x52\x12\x1a\x8f\x08\xa0\x8f\x94\x63\x65\xdd\ +\x82\xfe\x55\x25\x51\x29\x52\xea\xd9\xe5\x38\xad\x42\x8b\xaf\x4c\ +\xd8\xe3\xc7\x76\x41\xd5\x14\x54\x08\xe4\x92\x5e\x53\x31\x5e\xa5\ +\xa9\x6b\x7f\x93\x39\x5c\x2b\xa6\x8c\x71\xa0\x5f\xd5\xd5\x9b\x03\ +\xad\x51\x7d\x9b\xa9\x43\xf4\xd0\x43\x0f\x3d\xf4\xd0\x03\x4b\x84\ +\x7f\x01\x48\xbf\xac\xda\x5a\x15\x50\x6a\x00\x00\x00\x00\x49\x45\ +\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x04\x58\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x01\x62\x00\x00\x01\x62\ +\x01\x5f\x27\xd0\x53\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\ +\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x03\xd5\x49\x44\ +\x41\x54\x78\x9c\xed\x9b\xb9\x6b\x54\x41\x1c\xc7\x3f\x6b\x4e\x50\ +\xf1\x8c\x8a\xa0\x85\x47\xe1\x5d\x04\xbc\x41\xbc\x0a\xc1\x22\x9e\ +\x08\x16\xb6\xda\x89\x16\x4a\x54\xec\x04\x2b\x8b\xf8\x07\xa8\x8d\ +\x22\x58\x59\x6b\x3c\xf1\xac\x34\xc1\x08\x82\xa2\x28\x01\x35\xa8\ +\xf1\x48\x42\x34\x16\xbf\x59\x77\x78\xc9\xce\x7b\x33\xfb\x66\xf6\ +\x2d\xbe\x2f\x0c\x33\xbb\xfb\xbb\x66\xf6\x77\xbc\x79\xef\x0d\x84\ +\xc1\x02\xe0\x22\xd0\x0b\x8c\xc4\xb4\x5e\xe0\x02\x30\x2f\x90\x6d\ +\xde\xb1\x1a\xf8\x42\xfc\xc4\xa3\xed\x0b\xb0\xca\xb7\x71\x05\xcf\ +\xf2\x9b\x81\x97\xc0\x5c\x64\x52\xd7\x81\x17\x31\x3c\x8b\x81\xed\ +\x88\x6d\x6f\x80\x45\xc0\x80\x3f\x13\xfd\x62\x37\xa5\x7f\xf4\x88\ +\x05\xdf\x51\x8d\x6f\xa7\x07\xbb\x82\xe1\x34\x32\x89\xdf\xc0\x78\ +\x0b\xbe\x09\x8a\x67\x44\xc9\xf0\x86\x71\x3e\x85\x23\x21\x00\x30\ +\x04\xfc\xb0\xe0\xfb\xae\x78\x74\x19\x5e\x50\x9f\x82\x8c\xe9\xc0\ +\x01\x24\x76\x27\x46\x7e\x5b\xa6\xfa\x06\xe0\xaa\xa5\xdc\x06\xd5\ +\xb7\x01\xf3\x23\xbf\xf5\x03\xdd\xc0\x25\xe0\x93\xa5\xdc\x54\xb1\ +\x57\x19\x63\x9b\xe1\xd3\x6a\xfd\x48\x9e\x71\x46\x25\x55\x60\x03\ +\x70\x03\xa8\x53\x9f\xdf\x02\x1f\x2b\x31\xc6\x02\x2d\x48\x65\x01\ +\xc9\x15\x1b\x81\xbb\x81\x74\xff\xc3\x13\xe4\x5f\xf8\x0a\x6c\x0e\ +\xad\x1c\xd8\x02\x7c\x53\x36\x3c\x0e\xad\xbc\x95\x92\x1b\x9e\x0a\ +\xad\x5c\xc3\x49\xcd\x8e\xd6\x90\x8a\xcf\x53\x2a\x6f\x73\x42\x2a\ +\x8e\x60\x36\x30\xac\x6c\xe9\x70\x11\xe0\x92\x03\xc6\x23\xf1\x3e\ +\x15\xe8\x04\x76\xb9\x28\x4e\x11\xd7\x90\x1c\xd0\x87\xe4\x05\x9b\ +\x72\x6b\x85\xb5\xc0\x03\xa4\x3e\x57\x2b\xeb\xc7\xb5\x21\x65\xe3\ +\x9a\xb4\x27\xbf\x02\x18\xcc\xc0\x04\x93\xb6\x41\x60\x79\x92\x89\ +\x25\xbd\x10\x6a\x07\x1a\x91\x4d\xc9\x39\x24\xf3\x67\x11\x93\x81\ +\xc3\xc8\xd5\x63\x3b\xb0\x2f\x2d\xc1\x3d\xc8\xca\x5e\x4e\x4b\xa0\ +\x47\x5c\x41\x6c\x8d\xdb\x75\x02\xc9\xf7\x02\x4d\xaa\xaf\x85\x6d\ +\xe9\x2f\xd5\x27\xda\x43\xf8\xde\x0c\x65\x1e\xff\xfd\x02\x24\xc5\ +\x6b\xaa\x9f\xd9\x6d\xdb\xeb\x24\x13\x4b\xea\x01\x7d\x09\xe9\xb2\ +\x84\xcf\x49\x88\x92\x5e\x09\x2e\x42\x4a\xca\x26\x60\xbd\xfa\xee\ +\xac\x83\x51\x3e\x71\x4c\xf5\xf7\x80\x9b\x48\xc5\xea\x49\x5b\xc9\ +\x09\x4a\x2e\xd6\x10\x43\x1b\x12\x8d\x94\xec\x6a\xb7\x61\xb4\x4d\ +\x82\x7a\x19\xf4\x7a\xab\xca\x12\xba\x2d\x56\xa5\x3a\x5f\x00\x4b\ +\x45\x83\xda\xb8\xa9\x2c\x55\x78\xe8\xb6\x0c\x96\xa5\x1a\x03\xb9\ +\x07\x58\x2a\xca\x17\x40\x1b\x97\x0b\x81\x02\xf2\x34\x67\x75\x8c\ +\xac\x02\xb0\x03\x58\x12\x43\x57\x0f\xec\x07\x96\x1a\x68\x74\x5b\ +\xbc\xee\x57\xb6\x52\x2a\x37\xeb\xca\xd0\x6c\x53\xbf\x0f\x00\x93\ +\x0c\xb2\xda\x14\x5d\x1f\xe6\xeb\x91\x43\x8a\xae\xd7\x40\xb3\x5e\ +\xb3\x6b\x8b\x81\x6e\x14\x7c\x84\xc0\x4c\xd5\x37\x01\x53\x0c\xb2\ +\x5e\x21\x4f\x80\xbb\x63\x74\xce\x8c\xf4\x63\xc1\x39\x04\x6c\x9f\ +\x0c\xa5\x99\x03\xba\x90\xfb\xfb\xc3\x15\xca\x89\xda\x52\x53\x65\ +\x30\x8d\xc9\x43\x5e\x06\x6b\xb3\x0c\xce\x40\x1e\x98\x1e\xaf\x50\ +\x4e\xd4\x96\x9a\x59\x80\xdd\xc0\x1e\xe0\x0c\x76\xef\x0e\x8c\x85\ +\x9a\xcc\x01\x8d\xaa\x2f\x50\xf9\xce\x32\xcf\x01\xda\xd8\xbb\x07\ +\x8c\xa8\x71\x16\x37\x43\xc5\xa7\x43\x89\xe1\x72\x53\xb4\xe8\x62\ +\x59\xf4\x00\xeb\xcb\x60\x97\x05\x28\x2a\xc9\xa2\x07\x04\x5d\x80\ +\xff\xd6\x03\xb2\x1c\x02\x56\x15\x00\x72\x0f\xc8\x73\x40\x1e\x02\ +\x0e\xca\xf2\x10\x88\x28\xcd\x02\xf2\x1c\xa0\xfa\x3c\x07\xd8\x32\ +\xe6\x21\xe0\xa0\x2c\x0f\x01\xd5\x97\xf3\x80\x91\x32\xe3\x4a\xe9\ +\x4c\x34\xce\x21\xe0\x72\x5e\x20\x2e\x04\x1e\x21\x2f\x31\xbf\x05\ +\x3e\x18\xe4\xdc\x07\x7e\x02\xcf\x31\xbf\x76\x77\x07\x99\xd8\x2d\ +\x03\x8d\x73\x08\xf8\x58\x80\x1e\x4a\xb7\xbb\xff\x18\xe4\x3c\x05\ +\xa6\x11\xff\xaf\x75\x22\xcf\x17\x7e\x19\x68\xaa\x12\x02\x75\x94\ +\x5f\xc0\x21\xcc\x93\x2f\x62\x00\xb3\x6b\x17\x61\x9a\x7c\x03\xa5\ +\x33\x0b\x41\xab\x00\x64\xa3\x12\x38\xdf\x0e\x83\xca\x3c\x20\xaa\ +\xbc\x5a\xd0\x6d\x08\xe2\x01\xdf\xb4\x71\x8b\x03\x7f\xda\xd0\x6d\ +\xe8\xb7\x65\x76\x59\x80\x2e\x6d\x7c\xd0\x81\x3f\x6d\x1c\xd2\xc6\ +\xcf\x6c\x99\x5d\x0e\x4c\x14\x80\x87\xc0\x4a\xf5\xb9\x13\xb8\x4d\ +\xf8\xf7\x88\x9b\x91\x83\x5b\x1b\xd5\xe7\x07\xc8\x99\x86\x20\x58\ +\x88\xd4\xf8\x6a\xbf\x0d\x5a\x6c\xef\x19\x7d\xb6\xd0\x3b\x66\x21\ +\x67\x87\xde\x21\x25\x2f\xf4\xa4\x7f\x23\x17\x5b\x1d\x98\xdf\x1d\ +\x30\xe2\x2f\xb9\x7a\xce\xc1\x31\xd7\x54\xed\x00\x00\x00\x00\x49\ +\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x00\x84\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x32\x00\x00\x00\x32\x08\x06\x00\x00\x00\x1e\x3f\x88\xb1\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x00\x36\x49\x44\x41\x54\x78\x9c\xed\ +\xd2\xc1\x09\x00\x20\x0c\x03\xc0\xcc\xd8\xfd\x27\xf1\x53\xdf\xfe\ +\x2d\x82\xdc\x41\x06\x08\x49\x02\x00\x00\x00\x00\xa7\x55\xd5\x2f\ +\x93\x5b\x14\x29\x8b\xf4\xc8\xb5\x00\x00\x00\x00\xc8\x27\x36\x82\ +\xcb\x4e\x90\x0a\x06\xf3\x5f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x01\xf2\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\ +\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ +\x01\x00\x9a\x9c\x18\x00\x00\x01\xa4\x49\x44\x41\x54\x78\x9c\xed\ +\x97\xc1\x4a\x02\x51\x14\x86\xaf\x9b\x29\x7c\x03\x37\x2d\x6a\x25\ +\x58\x9b\x59\xa8\xb8\x69\x17\x04\xd1\x13\xe4\xb6\x55\xa0\xf7\x0e\ +\xed\xa2\x85\x4f\x10\x44\x58\x22\xb9\x8d\x48\xcd\x8d\x84\xa9\x23\ +\x8e\xdb\xa2\x16\x41\x84\x92\x3a\x13\x6d\xb4\xe6\x05\x3a\x71\x4d\ +\x6d\x30\xb3\x4d\x70\xef\xc0\xf9\xe0\xec\xbf\xff\x3f\x73\x86\x19\ +\x42\x10\x04\x41\xfe\x93\x6e\x3c\x1e\xb2\x18\xeb\x58\x8c\xdd\xbf\ +\xc6\x62\x8b\xc4\x4d\xbc\x30\xa6\x5a\x94\xf6\x2d\xc6\x60\x38\x9d\ +\xb6\xa6\x2d\x11\x37\x90\x2d\x19\xe1\xca\x59\xee\xca\xd2\xb4\x91\ +\xfc\x60\x4c\x4a\xdb\xd2\x6f\x22\x5b\x32\xc2\xb9\x8a\x61\xe7\x2b\ +\x0d\x28\x9f\xe7\x74\x53\xd3\x3e\x9c\x21\xa4\xde\x44\xd6\x21\x3f\ +\x1a\x1e\x62\x72\x13\x16\xa5\x77\x44\x36\xe0\x88\xa8\xbd\x4c\xe0\ +\x36\x5f\xae\xf7\x9c\x01\xf8\x5c\x5f\x14\x1a\xce\x10\x26\xa5\xcf\ +\x44\x36\x79\x48\x92\x3e\x24\x09\xf4\x33\xfe\xe6\xac\x10\x26\x63\ +\x36\x7f\x3b\x11\x19\xe5\x61\x38\xbd\x53\x7f\x6b\x5a\x08\x7e\xd8\ +\xd2\xcb\xc3\x70\x7e\x6e\xc2\x78\xbf\xac\xd6\xdd\x21\x0f\x13\x21\ +\xf8\x61\xcb\x26\x1f\x82\x24\xb1\x67\xc9\xc3\xf8\x71\x0a\xdc\x14\ +\x74\x3d\x4c\xdc\xd4\x3c\x7c\x8f\xcd\xc3\x12\x59\x40\x79\x51\x60\ +\xf3\xa2\xc0\xe6\x45\x81\xcd\x8b\x02\x9b\x17\x05\x36\x2f\x0a\xc0\ +\x0f\x33\x41\x00\x36\x2f\x08\xc0\xe6\x05\x01\x45\xaf\x0f\xd2\x9e\ +\x47\x57\xfe\x06\x72\xa0\x3a\xbf\x05\xba\x62\x42\xda\xd3\x75\x9d\ +\x3c\x07\x6a\x4a\x1a\x6a\x73\xf0\x47\x08\x39\xe5\x39\xa0\x2b\xad\ +\x41\x80\xdf\x43\xc8\x2b\x7f\xb8\xb7\x12\xd4\x4f\x16\xbe\xe4\xa7\ +\x87\x90\x57\x9e\x93\xd0\xd4\x54\x64\x7d\x03\xaa\xa9\xa9\x21\x1e\ +\xa4\x96\xe7\xec\x6c\x47\x9e\x82\x6b\x9b\x30\x0e\xa1\x2b\xcd\xc1\ +\x4d\xf0\xc3\x2e\x7a\x7d\x44\x76\xa2\xd1\xd5\x37\x1e\x22\xb1\xab\ +\x1e\x1f\xec\x2f\xcb\xdd\x36\x82\x20\xc4\xd5\x7c\x02\xf5\xa6\x4d\ +\x16\x1b\xce\x95\xf7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ +\x82\ +" + +qt_resource_name = b"\ +\x00\x05\ +\x00\x6f\xa6\x53\ +\x00\x69\ +\x00\x63\x00\x6f\x00\x6e\x00\x73\ +\x00\x0b\ +\x0c\x6a\x2c\x47\ +\x00\x72\ +\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x08\x9b\x8d\x07\ +\x00\x66\ +\x00\x6c\x00\x61\x00\x73\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0b\ +\x00\xbd\xd0\x67\ +\x00\x72\ +\x00\x75\x00\x6e\x00\x6e\x00\x69\x00\x6e\x00\x67\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x08\ +\x0b\x63\x58\x07\ +\x00\x73\ +\x00\x74\x00\x6f\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x00\x27\x84\xc7\ +\x00\x62\ +\x00\x75\x00\x69\x00\x6c\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0a\ +\x0c\xad\x0f\x07\ +\x00\x64\ +\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0b\x85\x83\x07\ +\x00\x63\ +\x00\x6c\x00\x65\x00\x61\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x06\x7c\x5a\x07\ +\x00\x63\ +\x00\x6f\x00\x70\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x08\xc8\x58\x67\ +\x00\x73\ +\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x07\ +\x07\xa7\x57\x87\ +\x00\x61\ +\x00\x64\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x0c\x58\x59\x27\ +\x00\x6d\ +\x00\x65\x00\x6e\x00\x75\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x02\x8c\x59\xa7\ +\x00\x70\ +\x00\x6c\x00\x61\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x09\x65\x83\xe7\ +\x00\x65\ +\x00\x72\x00\x72\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x0b\ +\x09\x16\x7a\x87\ +\x00\x62\ +\x00\x72\x00\x6f\x00\x77\x00\x73\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x09\ +\x0b\x81\x83\x07\ +\x00\x63\ +\x00\x6c\x00\x65\x00\x61\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0a\ +\x06\xcb\x4f\xc7\ +\x00\x72\ +\x00\x65\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x0b\x07\x5a\x27\ +\x00\x65\ +\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct_v1 = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x03\ +\x00\x00\x00\x76\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xb6\ +\x00\x00\x00\x44\x00\x00\x00\x00\x00\x01\x00\x00\x07\x7c\ +\x00\x00\x01\x16\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x77\ +\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x19\x9e\ +\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x31\x73\ +\x00\x00\x00\xec\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x23\ +\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x05\xff\ +\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x1a\xe5\ +\x00\x00\x01\x44\x00\x00\x00\x00\x00\x01\x00\x00\x26\x9c\ +\x00\x00\x01\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x1f\x29\ +\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x00\x31\xfb\ +\x00\x00\x00\x60\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xf1\ +\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x00\x2d\x17\ +\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x18\x1b\ +\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xd6\ +\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x16\x2d\ +" + +qt_resource_struct_v2 = 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\x11\x00\x00\x00\x03\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x76\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xb6\ +\x00\x00\x01\x89\xb2\xaf\x64\x54\ +\x00\x00\x00\x44\x00\x00\x00\x00\x00\x01\x00\x00\x07\x7c\ +\x00\x00\x01\x89\x07\x1b\x83\xd3\ +\x00\x00\x01\x16\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x77\ +\x00\x00\x01\x89\xb2\xba\x6c\xf8\ +\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x19\x9e\ +\x00\x00\x01\x89\xb5\x86\xae\xc6\ +\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x31\x73\ +\x00\x00\x01\x89\xb2\xbc\xc7\x7c\ +\x00\x00\x00\xec\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x23\ +\x00\x00\x01\x89\xb2\xbd\xaf\x78\ +\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x05\xff\ +\x00\x00\x01\x89\xb5\x97\x88\x3e\ +\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x1a\xe5\ +\x00\x00\x01\x89\xb5\x78\xce\x2a\ +\x00\x00\x01\x44\x00\x00\x00\x00\x00\x01\x00\x00\x26\x9c\ +\x00\x00\x01\x89\xb5\x83\x29\x62\ +\x00\x00\x01\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x1f\x29\ +\x00\x00\x01\x89\x07\x1b\x83\xd3\ +\x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x00\x31\xfb\ +\x00\x00\x01\x89\xb5\x93\x68\x76\ +\x00\x00\x00\x60\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xf1\ +\x00\x00\x01\x89\xb2\xba\xff\x50\ +\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x00\x2d\x17\ +\x00\x00\x01\x89\xb2\xae\x05\xec\ +\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x18\x1b\ +\x00\x00\x01\x89\xb5\x7e\x05\x96\ +\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xd6\ +\x00\x00\x01\x89\xb5\x79\xb5\x92\ +\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x89\xb5\x79\x6d\x76\ +\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x16\x2d\ +\x00\x00\x01\x89\xb5\x88\x1a\xae\ +" + +qt_version = [int(v) for v in QtCore.qVersion().split('.')] +if qt_version < [5, 8, 0]: + rcc_version = 1 + qt_resource_struct = qt_resource_struct_v1 +else: + rcc_version = 2 + qt_resource_struct = qt_resource_struct_v2 + +def qInitResources(): + QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/sw/supervision/python/generated/ui_app_settings.py b/sw/supervision/python/generated/ui_app_settings.py index 4e093aa902..1504ed18c4 100644 --- a/sw/supervision/python/generated/ui_app_settings.py +++ b/sw/supervision/python/generated/ui_app_settings.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_app_settings.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.9 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -50,8 +51,8 @@ class Ui_AppSettingsDialog(object): self.gridLayout.addWidget(self.keep_build_programs_checkbox, 3, 1, 1, 1) self.retranslateUi(AppSettingsDialog) - self.buttonBox.accepted.connect(AppSettingsDialog.accept) - self.buttonBox.rejected.connect(AppSettingsDialog.reject) + self.buttonBox.accepted.connect(AppSettingsDialog.accept) # type: ignore + self.buttonBox.rejected.connect(AppSettingsDialog.reject) # type: ignore QtCore.QMetaObject.connectSlotsByName(AppSettingsDialog) def retranslateUi(self, AppSettingsDialog): diff --git a/sw/supervision/python/generated/ui_build.py b/sw/supervision/python/generated/ui_build.py index 50a0ab715f..6db845e2ff 100644 --- a/sw/supervision/python/generated/ui_build.py +++ b/sw/supervision/python/generated/ui_build.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_build.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.6 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -13,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Build(object): def setupUi(self, Build): Build.setObjectName("Build") - Build.resize(437, 87) + Build.resize(464, 87) self.horizontalLayout = QtWidgets.QHBoxLayout(Build) self.horizontalLayout.setObjectName("horizontalLayout") self.groupBox = QtWidgets.QGroupBox(Build) @@ -34,13 +35,15 @@ class Ui_Build(object): self.target_combo.setObjectName("target_combo") self.horizontalLayout_2.addWidget(self.target_combo) self.clean_button = QtWidgets.QToolButton(self.groupBox) - icon = QtGui.QIcon.fromTheme("edit-clear") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/icons/icons/clean.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.clean_button.setIcon(icon) self.clean_button.setObjectName("clean_button") self.horizontalLayout_2.addWidget(self.clean_button) self.build_button = QtWidgets.QToolButton(self.groupBox) - icon = QtGui.QIcon.fromTheme("system-run") - self.build_button.setIcon(icon) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(":/icons/icons/build.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.build_button.setIcon(icon1) self.build_button.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) self.build_button.setObjectName("build_button") self.horizontalLayout_2.addWidget(self.build_button) @@ -70,8 +73,9 @@ class Ui_Build(object): self.device_combo.setObjectName("device_combo") self.horizontalLayout_3.addWidget(self.device_combo) self.flash_button = QtWidgets.QToolButton(self.groupBox_2) - icon = QtGui.QIcon.fromTheme("emblem-downloads") - self.flash_button.setIcon(icon) + icon2 = QtGui.QIcon() + icon2.addPixmap(QtGui.QPixmap(":/icons/icons/flash.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.flash_button.setIcon(icon2) self.flash_button.setObjectName("flash_button") self.horizontalLayout_3.addWidget(self.flash_button) self.horizontalLayout.addWidget(self.groupBox_2) @@ -86,7 +90,7 @@ class Ui_Build(object): self.label_14.setText(_translate("Build", "Target")) self.clean_button.setToolTip(_translate("Build", "Clean")) self.clean_button.setText(_translate("Build", "...")) - self.clean_button.setShortcut(_translate("Build", "Ctrl+C")) + self.clean_button.setShortcut(_translate("Build", "Ctrl+Shift+B")) self.build_button.setToolTip(_translate("Build", "Build")) self.build_button.setText(_translate("Build", "...")) self.build_button.setShortcut(_translate("Build", "Ctrl+B")) @@ -96,3 +100,4 @@ class Ui_Build(object): self.flash_button.setToolTip(_translate("Build", "Upload")) self.flash_button.setText(_translate("Build", "Flash")) self.flash_button.setShortcut(_translate("Build", "Ctrl+U")) +from generated import resources_rc diff --git a/sw/supervision/python/generated/ui_conf_header.py b/sw/supervision/python/generated/ui_conf_header.py index 3c3a25139d..f4ce236aa8 100644 --- a/sw/supervision/python/generated/ui_conf_header.py +++ b/sw/supervision/python/generated/ui_conf_header.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_conf_header.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.6 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -37,18 +38,21 @@ class Ui_ConfHeader(object): self.menu_button = QtWidgets.QToolButton(ConfHeader) self.menu_button.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.menu_button.setText("") - icon = QtGui.QIcon.fromTheme("format-justify-fill") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/icons/icons/menu.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.menu_button.setIcon(icon) self.menu_button.setObjectName("menu_button") self.horizontalLayout.addWidget(self.menu_button) self.refresh_button = QtWidgets.QToolButton(ConfHeader) - icon = QtGui.QIcon.fromTheme("view-refresh") - self.refresh_button.setIcon(icon) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(":/icons/icons/refresh.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.refresh_button.setIcon(icon1) self.refresh_button.setObjectName("refresh_button") self.horizontalLayout.addWidget(self.refresh_button) self.save_button = QtWidgets.QToolButton(ConfHeader) - icon = QtGui.QIcon.fromTheme("document-save") - self.save_button.setIcon(icon) + icon2 = QtGui.QIcon() + icon2.addPixmap(QtGui.QPixmap(":/icons/icons/save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.save_button.setIcon(icon2) self.save_button.setObjectName("save_button") self.horizontalLayout.addWidget(self.save_button) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) @@ -64,20 +68,23 @@ class Ui_ConfHeader(object): self.new_ac_action.setIcon(icon) self.new_ac_action.setObjectName("new_ac_action") self.remove_ac_action = QtWidgets.QAction(ConfHeader) - icon = QtGui.QIcon.fromTheme("edit-delete") - self.remove_ac_action.setIcon(icon) + icon3 = QtGui.QIcon() + icon3.addPixmap(QtGui.QPixmap(":/icons/icons/delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.remove_ac_action.setIcon(icon3) self.remove_ac_action.setObjectName("remove_ac_action") self.duplicate_action = QtWidgets.QAction(ConfHeader) - icon = QtGui.QIcon.fromTheme("edit-copy") - self.duplicate_action.setIcon(icon) + icon4 = QtGui.QIcon() + icon4.addPixmap(QtGui.QPixmap(":/icons/icons/copy.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.duplicate_action.setIcon(icon4) self.duplicate_action.setObjectName("duplicate_action") self.rename_action = QtWidgets.QAction(ConfHeader) - icon = QtGui.QIcon.fromTheme("format-text-italic") - self.rename_action.setIcon(icon) + icon5 = QtGui.QIcon() + icon5.addPixmap(QtGui.QPixmap(":/icons/icons/edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.rename_action.setIcon(icon5) self.rename_action.setObjectName("rename_action") self.retranslateUi(ConfHeader) - self.menu_button.clicked.connect(self.menu_button.showMenu) + self.menu_button.clicked.connect(self.menu_button.showMenu) # type: ignore QtCore.QMetaObject.connectSlotsByName(ConfHeader) def retranslateUi(self, ConfHeader): @@ -94,3 +101,4 @@ class Ui_ConfHeader(object): self.remove_ac_action.setText(_translate("ConfHeader", "Remove")) self.duplicate_action.setText(_translate("ConfHeader", "Duplicate")) self.rename_action.setText(_translate("ConfHeader", "Rename")) +from generated import resources_rc diff --git a/sw/supervision/python/generated/ui_conf_item.py b/sw/supervision/python/generated/ui_conf_item.py index 17781175d6..6ca505e19a 100644 --- a/sw/supervision/python/generated/ui_conf_item.py +++ b/sw/supervision/python/generated/ui_conf_item.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_conf_item.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.9 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets diff --git a/sw/supervision/python/generated/ui_conf_settings.py b/sw/supervision/python/generated/ui_conf_settings.py index 228450bab4..1a475a2a38 100644 --- a/sw/supervision/python/generated/ui_conf_settings.py +++ b/sw/supervision/python/generated/ui_conf_settings.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_conf_settings.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.6 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -23,13 +24,15 @@ class Ui_SettingsConf(object): self.label.setObjectName("label") self.horizontalLayout.addWidget(self.label) self.add_setting_button = QtWidgets.QToolButton(SettingsConf) - icon = QtGui.QIcon.fromTheme("list-add") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/icons/icons/add.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.add_setting_button.setIcon(icon) self.add_setting_button.setObjectName("add_setting_button") self.horizontalLayout.addWidget(self.add_setting_button) self.remove_setting_button = QtWidgets.QToolButton(SettingsConf) - icon = QtGui.QIcon.fromTheme("list-remove") - self.remove_setting_button.setIcon(icon) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(":/icons/icons/remove.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.remove_setting_button.setIcon(icon1) self.remove_setting_button.setObjectName("remove_setting_button") self.horizontalLayout.addWidget(self.remove_setting_button) self.verticalLayout.addLayout(self.horizontalLayout) @@ -46,3 +49,4 @@ class Ui_SettingsConf(object): self.label.setText(_translate("SettingsConf", "Settings")) self.add_setting_button.setText(_translate("SettingsConf", "...")) self.remove_setting_button.setText(_translate("SettingsConf", "...")) +from generated import resources_rc diff --git a/sw/supervision/python/generated/ui_configuration_panel.py b/sw/supervision/python/generated/ui_configuration_panel.py index 93e4b1f47b..db83412cce 100644 --- a/sw/supervision/python/generated/ui_configuration_panel.py +++ b/sw/supervision/python/generated/ui_configuration_panel.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_configuration_panel.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.9 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets diff --git a/sw/supervision/python/generated/ui_console.py b/sw/supervision/python/generated/ui_console.py index 8dcd04f903..70fdf64c14 100644 --- a/sw/supervision/python/generated/ui_console.py +++ b/sw/supervision/python/generated/ui_console.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_console.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.6 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -43,7 +44,7 @@ class Ui_Console(object): self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.programs_widget = QtWidgets.QWidget() - self.programs_widget.setGeometry(QtCore.QRect(0, 0, 382, 524)) + self.programs_widget.setGeometry(QtCore.QRect(0, 0, 180, 525)) self.programs_widget.setObjectName("programs_widget") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.programs_widget) self.verticalLayout_4.setObjectName("verticalLayout_4") @@ -78,7 +79,8 @@ class Ui_Console(object): spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem1) self.clear_button = QtWidgets.QPushButton(Console) - icon = QtGui.QIcon.fromTheme("edit-clear") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/icons/icons/clear.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.clear_button.setIcon(icon) self.clear_button.setObjectName("clear_button") self.horizontalLayout_2.addWidget(self.clear_button) @@ -98,3 +100,4 @@ class Ui_Console(object): self.label_3.setText(_translate("Console", "Log level:")) self.log_level_label.setText(_translate("Console", "All")) self.clear_button.setText(_translate("Console", "Clear console")) +from generated import resources_rc diff --git a/sw/supervision/python/generated/ui_doc_viewer.py b/sw/supervision/python/generated/ui_doc_viewer.py index 28301de964..ca65d062fc 100644 --- a/sw/supervision/python/generated/ui_doc_viewer.py +++ b/sw/supervision/python/generated/ui_doc_viewer.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_doc_viewer.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.6 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -106,7 +107,8 @@ class Ui_DocPanel(object): self.urlLineEdit.setObjectName("urlLineEdit") self.horizontalLayout.addWidget(self.urlLineEdit) self.open_browser_button = QtWidgets.QToolButton(self.layoutWidget3) - icon = QtGui.QIcon.fromTheme("applications-internet") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/icons/icons/browser.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.open_browser_button.setIcon(icon) self.open_browser_button.setObjectName("open_browser_button") self.horizontalLayout.addWidget(self.open_browser_button) @@ -140,3 +142,4 @@ class Ui_DocPanel(object): self.doc_source_combo.setItemText(0, _translate("DocPanel", "Internet")) self.doc_source_combo.setItemText(1, _translate("DocPanel", "Local")) from PyQt5 import QtWebKitWidgets +from generated import resources_rc diff --git a/sw/supervision/python/generated/ui_new_ac_dialog.py b/sw/supervision/python/generated/ui_new_ac_dialog.py index 190f0d1e1a..255a36be36 100644 --- a/sw/supervision/python/generated/ui_new_ac_dialog.py +++ b/sw/supervision/python/generated/ui_new_ac_dialog.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_new_ac_dialog.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.9 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets diff --git a/sw/supervision/python/generated/ui_operation_panel.py b/sw/supervision/python/generated/ui_operation_panel.py index 461963e47b..f6fcbbaf3b 100644 --- a/sw/supervision/python/generated/ui_operation_panel.py +++ b/sw/supervision/python/generated/ui_operation_panel.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_operation_panel.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.9 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets diff --git a/sw/supervision/python/generated/ui_program.py b/sw/supervision/python/generated/ui_program.py index dfb3f4c1eb..3962096c9c 100644 --- a/sw/supervision/python/generated/ui_program.py +++ b/sw/supervision/python/generated/ui_program.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_program.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.9 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -13,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Program(object): def setupUi(self, Program): Program.setObjectName("Program") - Program.resize(374, 25) + Program.resize(374, 32) self.horizontalLayout = QtWidgets.QHBoxLayout(Program) self.horizontalLayout.setContentsMargins(-1, 0, -1, 0) self.horizontalLayout.setObjectName("horizontalLayout") @@ -29,13 +30,15 @@ class Ui_Program(object): self.line.setObjectName("line") self.horizontalLayout.addWidget(self.line) self.run_button = QtWidgets.QToolButton(Program) - icon = QtGui.QIcon.fromTheme("media-playback-stop") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/icons/icons/stop.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.run_button.setIcon(icon) self.run_button.setObjectName("run_button") self.horizontalLayout.addWidget(self.run_button) self.remove_button = QtWidgets.QToolButton(Program) - icon = QtGui.QIcon.fromTheme("list-remove") - self.remove_button.setIcon(icon) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(":/icons/icons/remove.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.remove_button.setIcon(icon1) self.remove_button.setObjectName("remove_button") self.horizontalLayout.addWidget(self.remove_button) @@ -48,3 +51,4 @@ class Ui_Program(object): self.icon_label.setText(_translate("Program", "...")) self.run_button.setText(_translate("Program", "...")) self.remove_button.setText(_translate("Program", "...")) +from generated import resources_rc diff --git a/sw/supervision/python/generated/ui_session.py b/sw/supervision/python/generated/ui_session.py index f238ef1d43..04cef86dc7 100644 --- a/sw/supervision/python/generated/ui_session.py +++ b/sw/supervision/python/generated/ui_session.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_session.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.6 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets @@ -16,25 +17,38 @@ class Ui_Session(object): Session.resize(400, 300) self.verticalLayout = QtWidgets.QVBoxLayout(Session) self.verticalLayout.setObjectName("verticalLayout") - self.label_2 = QtWidgets.QLabel(Session) - self.label_2.setObjectName("label_2") - self.verticalLayout.addWidget(self.label_2) - self.horizontalLayout_2 = QtWidgets.QHBoxLayout() - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.sessions_combo = QtWidgets.QComboBox(Session) - self.sessions_combo.setObjectName("sessions_combo") - self.horizontalLayout_2.addWidget(self.sessions_combo) + self.gridLayout = QtWidgets.QGridLayout() + self.gridLayout.setObjectName("gridLayout") self.start_session_button = QtWidgets.QToolButton(Session) - icon = QtGui.QIcon.fromTheme("media-playback-start") + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(":/icons/icons/play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.start_session_button.setIcon(icon) self.start_session_button.setObjectName("start_session_button") - self.horizontalLayout_2.addWidget(self.start_session_button) + self.gridLayout.addWidget(self.start_session_button, 1, 2, 1, 1) self.menu_button = QtWidgets.QToolButton(Session) self.menu_button.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) - icon = QtGui.QIcon.fromTheme("format-justify-fill") - self.menu_button.setIcon(icon) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(":/icons/icons/menu.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.menu_button.setIcon(icon1) self.menu_button.setObjectName("menu_button") - self.horizontalLayout_2.addWidget(self.menu_button) + self.gridLayout.addWidget(self.menu_button, 1, 3, 1, 1) + self.control_panel_combo = QtWidgets.QComboBox(Session) + self.control_panel_combo.setObjectName("control_panel_combo") + self.gridLayout.addWidget(self.control_panel_combo, 1, 0, 1, 1) + self.label_3 = QtWidgets.QLabel(Session) + self.label_3.setObjectName("label_3") + self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1) + self.label_4 = QtWidgets.QLabel(Session) + self.label_4.setObjectName("label_4") + self.gridLayout.addWidget(self.label_4, 0, 1, 1, 1) + self.sessions_combo = QtWidgets.QComboBox(Session) + self.sessions_combo.setObjectName("sessions_combo") + self.gridLayout.addWidget(self.sessions_combo, 1, 1, 1, 1) + self.gridLayout.setColumnStretch(0, 2) + self.gridLayout.setColumnStretch(1, 3) + self.verticalLayout.addLayout(self.gridLayout) + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.verticalLayout.addLayout(self.horizontalLayout_2) self.favorite_tools = QtWidgets.QWidget(Session) self.favorite_tools.setObjectName("favorite_tools") @@ -47,8 +61,9 @@ class Ui_Session(object): spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.add_tool_button = QtWidgets.QToolButton(Session) - icon = QtGui.QIcon.fromTheme("list-add") - self.add_tool_button.setIcon(icon) + icon2 = QtGui.QIcon() + icon2.addPixmap(QtGui.QPixmap(":/icons/icons/add.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.add_tool_button.setIcon(icon2) self.add_tool_button.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self.add_tool_button.setAutoRaise(False) self.add_tool_button.setArrowType(QtCore.Qt.NoArrow) @@ -62,18 +77,19 @@ class Ui_Session(object): self.line.setObjectName("line") self.horizontalLayout.addWidget(self.line) self.startall_button = QtWidgets.QToolButton(Session) - icon = QtGui.QIcon.fromTheme("media-playback-start") self.startall_button.setIcon(icon) self.startall_button.setObjectName("startall_button") self.horizontalLayout.addWidget(self.startall_button) self.stopall_button = QtWidgets.QToolButton(Session) - icon = QtGui.QIcon.fromTheme("media-playback-stop") - self.stopall_button.setIcon(icon) + icon3 = QtGui.QIcon() + icon3.addPixmap(QtGui.QPixmap(":/icons/icons/stop.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.stopall_button.setIcon(icon3) self.stopall_button.setObjectName("stopall_button") self.horizontalLayout.addWidget(self.stopall_button) self.removeall_button = QtWidgets.QToolButton(Session) - icon = QtGui.QIcon.fromTheme("list-remove") - self.removeall_button.setIcon(icon) + icon4 = QtGui.QIcon() + icon4.addPixmap(QtGui.QPixmap(":/icons/icons/remove.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.removeall_button.setIcon(icon4) self.removeall_button.setObjectName("removeall_button") self.horizontalLayout.addWidget(self.removeall_button) self.verticalLayout.addLayout(self.horizontalLayout) @@ -81,7 +97,7 @@ class Ui_Session(object): self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.programs_widget = QtWidgets.QWidget() - self.programs_widget.setGeometry(QtCore.QRect(0, 0, 380, 176)) + self.programs_widget.setGeometry(QtCore.QRect(0, 0, 384, 154)) self.programs_widget.setObjectName("programs_widget") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.programs_widget) self.verticalLayout_2.setObjectName("verticalLayout_2") @@ -90,33 +106,37 @@ class Ui_Session(object): self.scrollArea.setWidget(self.programs_widget) self.verticalLayout.addWidget(self.scrollArea) self.save_session_action = QtWidgets.QAction(Session) - icon = QtGui.QIcon.fromTheme("document-save") - self.save_session_action.setIcon(icon) + icon5 = QtGui.QIcon() + icon5.addPixmap(QtGui.QPixmap(":/icons/icons/save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.save_session_action.setIcon(icon5) self.save_session_action.setObjectName("save_session_action") self.save_as_action = QtWidgets.QAction(Session) icon = QtGui.QIcon.fromTheme("edit-copy") self.save_as_action.setIcon(icon) self.save_as_action.setObjectName("save_as_action") self.rename_session_action = QtWidgets.QAction(Session) - icon = QtGui.QIcon.fromTheme("format-text-italic") - self.rename_session_action.setIcon(icon) + icon6 = QtGui.QIcon() + icon6.addPixmap(QtGui.QPixmap(":/icons/icons/copy.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.rename_session_action.setIcon(icon6) self.rename_session_action.setObjectName("rename_session_action") self.remove_session_action = QtWidgets.QAction(Session) - icon = QtGui.QIcon.fromTheme("edit-delete") - self.remove_session_action.setIcon(icon) + icon7 = QtGui.QIcon() + icon7.addPixmap(QtGui.QPixmap(":/icons/icons/delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.remove_session_action.setIcon(icon7) self.remove_session_action.setObjectName("remove_session_action") self.retranslateUi(Session) - self.menu_button.clicked.connect(self.menu_button.showMenu) + self.menu_button.clicked.connect(self.menu_button.showMenu) # type: ignore QtCore.QMetaObject.connectSlotsByName(Session) def retranslateUi(self, Session): _translate = QtCore.QCoreApplication.translate Session.setWindowTitle(_translate("Session", "Form")) - self.label_2.setText(_translate("Session", "Session")) self.start_session_button.setToolTip(_translate("Session", "Start Session")) self.start_session_button.setText(_translate("Session", "...")) self.menu_button.setText(_translate("Session", "...")) + self.label_3.setText(_translate("Session", "control panel")) + self.label_4.setText(_translate("Session", "Session")) self.label.setText(_translate("Session", "Programs")) self.add_tool_button.setToolTip(_translate("Session", "Add Tool")) self.add_tool_button.setText(_translate("Session", "Add tool")) @@ -131,3 +151,4 @@ class Ui_Session(object): self.save_as_action.setToolTip(_translate("Session", "Save session as...")) self.rename_session_action.setText(_translate("Session", "Rename session")) self.remove_session_action.setText(_translate("Session", "Remove session")) +from generated import resources_rc diff --git a/sw/supervision/python/generated/ui_supervision_window.py b/sw/supervision/python/generated/ui_supervision_window.py index 1bc764e962..c2809b0328 100644 --- a/sw/supervision/python/generated/ui_supervision_window.py +++ b/sw/supervision/python/generated/ui_supervision_window.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_supervision_window.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.9 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets diff --git a/sw/supervision/python/generated/ui_tools_list.py b/sw/supervision/python/generated/ui_tools_list.py index 2ffe6c92f0..c3f977a03f 100644 --- a/sw/supervision/python/generated/ui_tools_list.py +++ b/sw/supervision/python/generated/ui_tools_list.py @@ -2,9 +2,10 @@ # Form implementation generated from reading ui file 'ui/ui_tools_list.ui' # -# Created by: PyQt5 UI code generator 5.14.1 +# Created by: PyQt5 UI code generator 5.15.9 # -# WARNING! All changes made in this file will be lost! +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets diff --git a/sw/supervision/python/header_widget.py b/sw/supervision/python/header_widget.py index ffb43c9685..640c72f70a 100644 --- a/sw/supervision/python/header_widget.py +++ b/sw/supervision/python/header_widget.py @@ -7,8 +7,6 @@ from conf import Aircraft, Conf import utils import os import sys -lib_path = os.path.normpath(os.path.join(utils.PAPARAZZI_SRC, 'sw', 'lib', 'python')) -sys.path.append(lib_path) import paparazzi from typing import List diff --git a/sw/supervision/python/paparazzicenter.py b/sw/supervision/python/paparazzicenter.py index 025c5cd737..22efd8d0e3 100755 --- a/sw/supervision/python/paparazzicenter.py +++ b/sw/supervision/python/paparazzicenter.py @@ -3,11 +3,16 @@ # released under GNU GPLv2 or later. See COPYING file. import os import sys +import utils + +lib_path = os.path.normpath(os.path.join(utils.PAPARAZZI_SRC, 'sw', 'lib', 'python')) +sys.path.append(lib_path) + + import signal import copy from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui -import utils from lxml import etree as ET from conf import Conf, Aircraft, ConfError from app_settings import AppSettings @@ -15,12 +20,13 @@ from generated.ui_supervision_window import Ui_SupervisionWindow from generated.ui_new_ac_dialog import Ui_NewACDialog from program_widget import TabProgramsState + dirname = os.path.dirname(os.path.abspath(__file__)) TAB_ICONS = {TabProgramsState.IDLE: QtGui.QIcon(), - TabProgramsState.RUNNING: QtGui.QIcon(os.path.join(dirname, "running.svg")), - TabProgramsState.ERROR: QtGui.QIcon(os.path.join(dirname, "error.svg"))} + TabProgramsState.RUNNING: QtGui.QIcon(":/icons/icons/running.svg"), + TabProgramsState.ERROR: QtGui.QIcon(":/icons/icons/error.svg")} class PprzCenter(QMainWindow, Ui_SupervisionWindow): @@ -48,6 +54,7 @@ class PprzCenter(QMainWindow, Ui_SupervisionWindow): self.header.ac_save.connect(lambda _: self.conf.save()) self.header.ac_new.connect(self.handle_new_ac) + self.configuration_panel.build_widget.refresh_ac.connect(self.handle_ac_edited) self.configuration_panel.program_state_changed.connect(lambda state: self.programs_state_changed(state, 0)) self.operation_panel.session.program_state_changed.connect(lambda state: self.programs_state_changed(state, 1)) @@ -259,6 +266,7 @@ class PprzCenter(QMainWindow, Ui_SupervisionWindow): settings.setValue("ui/window_size", self.size()) settings.setValue("ui/last_AC", self.currentAc.name) settings.setValue("ui/last_session", self.operation_panel.session.get_current_session()) + settings.setValue("ui/last_control_panel", self.operation_panel.session.get_current_control_panel()) def update_left_pane_width(self, pos, index): utils.get_settings().setValue("ui/left_pane_width", pos) diff --git a/sw/supervision/python/program_widget.py b/sw/supervision/python/program_widget.py index 536028f461..c8af27d6e2 100644 --- a/sw/supervision/python/program_widget.py +++ b/sw/supervision/python/program_widget.py @@ -73,15 +73,13 @@ class ProgramWidget(QWidget, Ui_Program): self.process.terminate() def handle_started(self): - icon = QIcon.fromTheme("media-playback-stop") - self.run_button.setIcon(icon) + self.run_button.setIcon(QIcon(":/icons/icons/stop.png")) self.program_lineedit.setReadOnly(True) def handle_finished(self, exit_code: int, exit_status: QProcess.ExitStatus): if exit_code not in (0, 15): self.program_lineedit.setStyleSheet("background: #f56464") - icon = QIcon.fromTheme("media-playback-start") - self.run_button.setIcon(icon) + self.run_button.setIcon(QIcon(":/icons/icons/play.png")) self.program_lineedit.setReadOnly(False) self.finished.emit(exit_code, exit_status) diff --git a/sw/supervision/python/programs_conf.py b/sw/supervision/python/programs_conf.py index 390441d9b8..bdb98f9b75 100644 --- a/sw/supervision/python/programs_conf.py +++ b/sw/supervision/python/programs_conf.py @@ -100,7 +100,7 @@ class Tool: return name, Tool(name, command, icon, args, favorite) -def parse_tools() -> Dict[str, Tool]: +def parse_tools(cp) -> Dict[str, Tool]: tools = {} tools_dir = os.path.join(utils.CONF_DIR, "tools") for file in os.listdir(tools_dir): @@ -115,7 +115,7 @@ def parse_tools() -> Dict[str, Tool]: # programs from control_panel.xml # override programs from conf/tools/*.xml - control_panel = ET.parse(os.path.join(utils.CONF_DIR, "control_panel.xml")) + control_panel = ET.parse(os.path.join(utils.CONF_DIR, cp)) for xml_section in control_panel.getroot().findall("section"): if xml_section.get("name") == "programs": for xml_program in xml_section.findall("program"): @@ -125,8 +125,8 @@ def parse_tools() -> Dict[str, Tool]: return tools -def parse_sessions() -> List[Session]: - control_panel = ET.parse(os.path.join(utils.CONF_DIR, "control_panel.xml")) +def parse_sessions(cp) -> List[Session]: + control_panel = ET.parse(os.path.join(utils.CONF_DIR, cp)) for xml_section in control_panel.getroot().findall("section"): if xml_section.get("name") == "sessions": return [Session.parse(xml_session) for xml_session in xml_section.findall("session")] diff --git a/sw/supervision/python/session_widget.py b/sw/supervision/python/session_widget.py index 1e311763ff..71f97d8cd3 100644 --- a/sw/supervision/python/session_widget.py +++ b/sw/supervision/python/session_widget.py @@ -8,7 +8,7 @@ from PyQt5.QtWidgets import * from PyQt5 import QtCore import utils import lxml.etree as ET - +import paparazzi from typing import List, Optional, Tuple, Dict from program_widget import ProgramWidget, TabProgramsState from tools_menu import ToolMenu @@ -30,11 +30,10 @@ class SessionWidget(QWidget, Ui_Session): self.console: ConsoleWidget = None self.ac: Aircraft = None self.sessions = [] - self.tools = [] + self.tools: Dict[str, Tool] = {} self.tools_menu = ToolMenu() - self.sessions_combo.addItems(["Simulation", "Replay"]) - self.sessions_combo.insertSeparator(2) self.programs_state: TabProgramsState = TabProgramsState.IDLE + self.control_panel_combo.currentTextChanged.connect(self.on_control_panel_changed) self.menu_button.addAction(self.save_session_action) self.menu_button.addAction(self.save_as_action) self.menu_button.addAction(self.rename_session_action) @@ -57,14 +56,31 @@ class SessionWidget(QWidget, Ui_Session): self.ac = ac def init(self): - self.sessions = parse_sessions() - self.tools = parse_tools() + self.update_control_panels() + self.on_control_panel_changed() + + def on_control_panel_changed(self): + current_cp = self.control_panel_combo.currentText() + self.sessions = parse_sessions(current_cp) + self.tools = parse_tools(current_cp) self.init_tools_menu() sessions_names = [session.name for session in self.sessions] + self.sessions_combo.clear() + self.sessions_combo.addItems(["Simulation", "Replay"]) + self.sessions_combo.insertSeparator(2) self.sessions_combo.addItems(sessions_names) last_session = utils.get_settings().value("ui/last_session", None, str) - if last_session is not None: + if last_session is not None and last_session in sessions_names: self.sessions_combo.setCurrentText(last_session) + else: + self.sessions_combo.setCurrentIndex(0) + + def update_control_panels(self): + cpfs = paparazzi.get_list_of_controlpanel_files() + self.control_panel_combo.addItems(cpfs) + last_cp = utils.get_settings().value("ui/last_control_panel", None, str) + if last_cp is not None and last_cp in cpfs: + self.control_panel_combo.setCurrentText(last_cp) def get_current_session(self) -> str: """ @@ -72,6 +88,9 @@ class SessionWidget(QWidget, Ui_Session): """ return self.sessions_combo.currentText() + def get_current_control_panel(self) -> str: + return self.control_panel_combo.currentText() + def start_session(self): self.reset_programs_status() combo_text = self.sessions_combo.currentText() @@ -203,6 +222,7 @@ class SessionWidget(QWidget, Ui_Session): self.reset_programs_status() def init_tools_menu(self): + self.tools_menu.clear() for t in self.tools.values(): self.tools_menu.add_tool(t) diff --git a/sw/supervision/python/tools_menu.py b/sw/supervision/python/tools_menu.py index 5afb50a963..532ad3a176 100644 --- a/sw/supervision/python/tools_menu.py +++ b/sw/supervision/python/tools_menu.py @@ -39,6 +39,11 @@ class ToolMenu(QWidget, Ui_ToolsList): self.tools_buttons[t.name] = button self.content_widget.layout().addWidget(button) + def clear(self): + for _name, widget in self.tools_buttons.items(): + self.content_widget.layout().removeWidget(widget) + self.tools_buttons.clear() + def filter(self, txt: str): for name, button in self.tools_buttons.items(): show = txt.lower() in name.lower() diff --git a/sw/supervision/python/ui/icons/add.png b/sw/supervision/python/ui/icons/add.png new file mode 100644 index 0000000000..11c7114daf Binary files /dev/null and b/sw/supervision/python/ui/icons/add.png differ diff --git a/sw/supervision/python/ui/icons/browser.png b/sw/supervision/python/ui/icons/browser.png new file mode 100644 index 0000000000..a55780567f Binary files /dev/null and b/sw/supervision/python/ui/icons/browser.png differ diff --git a/sw/supervision/python/ui/icons/build.png b/sw/supervision/python/ui/icons/build.png new file mode 100644 index 0000000000..15a20c8193 Binary files /dev/null and b/sw/supervision/python/ui/icons/build.png differ diff --git a/sw/supervision/python/ui/icons/clean.png b/sw/supervision/python/ui/icons/clean.png new file mode 100644 index 0000000000..4a8e1c8a1f Binary files /dev/null and b/sw/supervision/python/ui/icons/clean.png differ diff --git a/sw/supervision/python/ui/icons/clear.png b/sw/supervision/python/ui/icons/clear.png new file mode 100644 index 0000000000..d037392685 Binary files /dev/null and b/sw/supervision/python/ui/icons/clear.png differ diff --git a/sw/supervision/python/ui/icons/copy.png b/sw/supervision/python/ui/icons/copy.png new file mode 100644 index 0000000000..58825e6b40 Binary files /dev/null and b/sw/supervision/python/ui/icons/copy.png differ diff --git a/sw/supervision/python/ui/icons/delete.png b/sw/supervision/python/ui/icons/delete.png new file mode 100644 index 0000000000..fa0207b751 Binary files /dev/null and b/sw/supervision/python/ui/icons/delete.png differ diff --git a/sw/supervision/python/ui/icons/edit.png b/sw/supervision/python/ui/icons/edit.png new file mode 100644 index 0000000000..1015eabe61 Binary files /dev/null and b/sw/supervision/python/ui/icons/edit.png differ diff --git a/sw/supervision/python/error.svg b/sw/supervision/python/ui/icons/error.svg similarity index 100% rename from sw/supervision/python/error.svg rename to sw/supervision/python/ui/icons/error.svg diff --git a/sw/supervision/python/ui/icons/flash.png b/sw/supervision/python/ui/icons/flash.png new file mode 100644 index 0000000000..adfbffc207 Binary files /dev/null and b/sw/supervision/python/ui/icons/flash.png differ diff --git a/sw/supervision/python/ui/icons/menu.png b/sw/supervision/python/ui/icons/menu.png new file mode 100644 index 0000000000..ae900f0d32 Binary files /dev/null and b/sw/supervision/python/ui/icons/menu.png differ diff --git a/sw/supervision/python/ui/icons/play.png b/sw/supervision/python/ui/icons/play.png new file mode 100644 index 0000000000..f6a0ed55c6 Binary files /dev/null and b/sw/supervision/python/ui/icons/play.png differ diff --git a/sw/supervision/python/ui/icons/refresh.png b/sw/supervision/python/ui/icons/refresh.png new file mode 100644 index 0000000000..689d8d1843 Binary files /dev/null and b/sw/supervision/python/ui/icons/refresh.png differ diff --git a/sw/supervision/python/ui/icons/remove.png b/sw/supervision/python/ui/icons/remove.png new file mode 100644 index 0000000000..3889e8ac34 Binary files /dev/null and b/sw/supervision/python/ui/icons/remove.png differ diff --git a/sw/supervision/python/running.svg b/sw/supervision/python/ui/icons/running.svg similarity index 100% rename from sw/supervision/python/running.svg rename to sw/supervision/python/ui/icons/running.svg diff --git a/sw/supervision/python/ui/icons/save.png b/sw/supervision/python/ui/icons/save.png new file mode 100644 index 0000000000..07d83e06bb Binary files /dev/null and b/sw/supervision/python/ui/icons/save.png differ diff --git a/sw/supervision/python/ui/icons/stop.png b/sw/supervision/python/ui/icons/stop.png new file mode 100644 index 0000000000..4f73fe8b3b Binary files /dev/null and b/sw/supervision/python/ui/icons/stop.png differ diff --git a/sw/supervision/python/ui/resources.qrc b/sw/supervision/python/ui/resources.qrc new file mode 100644 index 0000000000..63322dc627 --- /dev/null +++ b/sw/supervision/python/ui/resources.qrc @@ -0,0 +1,21 @@ + + + icons/error.svg + icons/running.svg + icons/edit.png + icons/delete.png + icons/copy.png + icons/browser.png + icons/clear.png + icons/menu.png + icons/refresh.png + icons/save.png + icons/add.png + icons/remove.png + icons/stop.png + icons/play.png + icons/flash.png + icons/build.png + icons/clean.png + + diff --git a/sw/supervision/python/ui/ui_build.ui b/sw/supervision/python/ui/ui_build.ui index 8b88d079c0..897afbdd5b 100644 --- a/sw/supervision/python/ui/ui_build.ui +++ b/sw/supervision/python/ui/ui_build.ui @@ -6,7 +6,7 @@ 0 0 - 437 + 464 87 @@ -52,11 +52,11 @@ ... - - .. + + :/icons/icons/clean.png:/icons/icons/clean.png - Ctrl+C + Ctrl+Shift+B @@ -69,8 +69,8 @@ ... - - .. + + :/icons/icons/build.png:/icons/icons/build.png Ctrl+B @@ -130,8 +130,8 @@ Flash - - .. + + :/icons/icons/flash.png:/icons/icons/flash.png Ctrl+U @@ -143,6 +143,8 @@ - + + + diff --git a/sw/supervision/python/ui/ui_conf_header.ui b/sw/supervision/python/ui/ui_conf_header.ui index aec156bfea..41b5ce2eb4 100644 --- a/sw/supervision/python/ui/ui_conf_header.ui +++ b/sw/supervision/python/ui/ui_conf_header.ui @@ -53,8 +53,8 @@ - - .. + + :/icons/icons/menu.png:/icons/icons/menu.png @@ -67,8 +67,8 @@ ... - - .. + + :/icons/icons/refresh.png:/icons/icons/refresh.png Ctrl+R @@ -84,8 +84,8 @@ ... - - .. + + :/icons/icons/save.png:/icons/icons/save.png Ctrl+S @@ -127,8 +127,8 @@ - - .. + + :/icons/icons/delete.png:/icons/icons/delete.png Remove @@ -136,8 +136,8 @@ - - .. + + :/icons/icons/copy.png:/icons/icons/copy.png Duplicate @@ -145,15 +145,17 @@ - - .. + + :/icons/icons/edit.png:/icons/icons/edit.png Rename - + + + menu_button diff --git a/sw/supervision/python/ui/ui_conf_settings.ui b/sw/supervision/python/ui/ui_conf_settings.ui index 9dc8045917..3d52d1af50 100644 --- a/sw/supervision/python/ui/ui_conf_settings.ui +++ b/sw/supervision/python/ui/ui_conf_settings.ui @@ -32,7 +32,8 @@ ... - + + :/icons/icons/add.png:/icons/icons/add.png @@ -42,7 +43,8 @@ ... - + + :/icons/icons/remove.png:/icons/icons/remove.png @@ -53,6 +55,8 @@ - + + + diff --git a/sw/supervision/python/ui/ui_console.ui b/sw/supervision/python/ui/ui_console.ui index f2a0fdda38..203d8e29de 100644 --- a/sw/supervision/python/ui/ui_console.ui +++ b/sw/supervision/python/ui/ui_console.ui @@ -59,8 +59,8 @@ 0 0 - 382 - 524 + 180 + 525 @@ -154,8 +154,8 @@ Clear console - - .. + + :/icons/icons/clear.png:/icons/icons/clear.png @@ -163,6 +163,8 @@ - + + + diff --git a/sw/supervision/python/ui/ui_doc_viewer.ui b/sw/supervision/python/ui/ui_doc_viewer.ui index c69756a77c..de74637f43 100644 --- a/sw/supervision/python/ui/ui_doc_viewer.ui +++ b/sw/supervision/python/ui/ui_doc_viewer.ui @@ -145,8 +145,8 @@ ... - - .. + + :/icons/icons/browser.png:/icons/icons/browser.png @@ -191,6 +191,8 @@
QtWebKitWidgets/QWebView
- + + + diff --git a/sw/supervision/python/ui/ui_program.ui b/sw/supervision/python/ui/ui_program.ui index c3d56ac92a..68b190a53f 100644 --- a/sw/supervision/python/ui/ui_program.ui +++ b/sw/supervision/python/ui/ui_program.ui @@ -7,7 +7,7 @@ 0 0 374 - 25 + 32 @@ -43,8 +43,8 @@ ... - - .. + + :/icons/icons/stop.png:/icons/icons/stop.png @@ -54,13 +54,15 @@ ... - - .. + + :/icons/icons/remove.png:/icons/icons/remove.png - + + + diff --git a/sw/supervision/python/ui/ui_session.ui b/sw/supervision/python/ui/ui_session.ui index 1622ff14b9..52a19d6b7e 100644 --- a/sw/supervision/python/ui/ui_session.ui +++ b/sw/supervision/python/ui/ui_session.ui @@ -15,18 +15,8 @@ - - - Session - - - - - - - - - + + Start Session @@ -35,12 +25,12 @@ ... - - .. + + :/icons/icons/play.png:/icons/icons/play.png - + Qt::ActionsContextMenu @@ -49,13 +39,36 @@ ... - - .. + + :/icons/icons/menu.png:/icons/icons/menu.png + + + + + + + control panel + + + + + + + Session + + + + + + + + + @@ -90,8 +103,8 @@ Add tool - - .. + + :/icons/icons/add.png:/icons/icons/add.png Qt::ToolButtonTextBesideIcon @@ -133,8 +146,8 @@ ... - - .. + + :/icons/icons/play.png:/icons/icons/play.png @@ -147,8 +160,8 @@ ... - - .. + + :/icons/icons/stop.png:/icons/icons/stop.png @@ -161,8 +174,8 @@ ... - - .. + + :/icons/icons/remove.png:/icons/icons/remove.png @@ -178,8 +191,8 @@ 0 0 - 380 - 176 + 384 + 154 @@ -203,8 +216,8 @@ - - .. + + :/icons/icons/save.png:/icons/icons/save.png Save session @@ -224,8 +237,8 @@ - - .. + + :/icons/icons/copy.png:/icons/icons/copy.png Rename session @@ -233,15 +246,17 @@ - - .. + + :/icons/icons/delete.png:/icons/icons/delete.png Remove session - + + + menu_button