diff --git a/src/instrumentserver/apps.py b/src/instrumentserver/apps.py index 0d881d1..b3680e5 100644 --- a/src/instrumentserver/apps.py +++ b/src/instrumentserver/apps.py @@ -63,16 +63,23 @@ def serverScript() -> None: stationConfig, serverConfig, guiConfig, + shortcutConfig, tempFile, pollingRates, pollingThread, ipAddresses, - ) = None, None, None, None, None, None, None + ) = None, None, None, None, None, None, None, None if configPath != "": # Separates the corresponding settings into the 5 necessary parts - stationConfig, serverConfig, guiConfig, tempFile, pollingRates, ipAddresses = ( - loadConfig(configPath) - ) + ( + stationConfig, + serverConfig, + guiConfig, + shortcutConfig, + tempFile, + pollingRates, + ipAddresses, + ) = loadConfig(configPath) if pollingRates is not None and pollingRates != {}: pollingThread = QtCore.QThread() pollWorker = PollingWorker(pollingRates=pollingRates) @@ -89,8 +96,10 @@ def serverScript() -> None: serverConfig=serverConfig, stationConfig=stationConfig, guiConfig=guiConfig, + shortcutConfig=shortcutConfig, pollingThread=pollingThread, ipAddresses=ipAddresses, + configPath=configPath, ) else: serverWithGui( @@ -100,8 +109,10 @@ def serverScript() -> None: serverConfig=serverConfig, stationConfig=stationConfig, guiConfig=guiConfig, + shortcutConfig=shortcutConfig, pollingThread=pollingThread, ipAddresses=ipAddresses, + configPath=configPath, ) # Close and delete the temporary files diff --git a/src/instrumentserver/client/proxy.py b/src/instrumentserver/client/proxy.py index 3c43d74..391542c 100644 --- a/src/instrumentserver/client/proxy.py +++ b/src/instrumentserver/client/proxy.py @@ -18,7 +18,7 @@ import qcodes as qc import zmq from qcodes import Instrument, Parameter -from qcodes.instrument.base import InstrumentBase +from qcodes.instrument import InstrumentBase from instrumentserver import DEFAULT_PORT, QtCore from instrumentserver.helpers import flat_to_nested_dict, flatten_dict, is_flat_dict @@ -859,7 +859,7 @@ def __init__( # Use config.py to parse server config format from instrumentserver.config import loadConfig - _, serverConfig, fullConfig, tempFile, _, _ = loadConfig(config_path) + _, serverConfig, fullConfig, _, tempFile, _, _ = loadConfig(config_path) tempFile.close() # Clean up temp file self.full_config = fullConfig diff --git a/src/instrumentserver/config.py b/src/instrumentserver/config.py index d177c87..f30d874 100644 --- a/src/instrumentserver/config.py +++ b/src/instrumentserver/config.py @@ -18,7 +18,9 @@ GUIFIELD = {"type": "instrumentserver.gui.instruments.GenericInstrument", "kwargs": {}} -def loadConfig(configPath: str | Path) -> tuple[str, dict, dict, IO[bytes], dict, dict]: +def loadConfig( + configPath: str | Path, +) -> tuple[str, dict, dict, dict, IO[bytes], dict, dict]: """ Loads the config for the instrumentserver. From 1 config file it splits the respective fields into 3 different objects: a serverConfig (the configurations for the server), a stationConfig(the qcodes station config file clean @@ -36,6 +38,7 @@ def loadConfig(configPath: str | Path) -> tuple[str, dict, dict, IO[bytes], dict serverConfig: dict = {} # Config for the server guiConfig = {} # Individual gui config of each instrument fullConfig = {} # serverConfig + guiConfig + any unfilled fields. Used for creating instruments from the gui + shortcutConfig = {} # Preferences for keyboard shortcuts pollingRates = {} # Polling rates for each parameter ipAddresses = {} # Dictionary of IP Addresses to send broadcasts to: # externalBroadcast: where to externally send parameter change broadcasts to, formatted like "tcp://address:port" @@ -150,6 +153,11 @@ def loadConfig(configPath: str | Path) -> tuple[str, dict, dict, IO[bytes], dict # Update fullConfig with merged GUI config fullConfig[instrumentName]["gui"] = guiConfig[instrumentName] + # Gets all shortcuts different to REGISTRY defaults from the config file + if "shortcuts" in rawConfig: + shortcutConfig = rawConfig["shortcuts"] + rawConfig.pop("shortcuts") + # Gets all of the broadcasting and listening addresses from the config file if "networking" in rawConfig: addressDict = rawConfig["networking"] @@ -170,4 +178,12 @@ def loadConfig(configPath: str | Path) -> tuple[str, dict, dict, IO[bytes], dict tempFilePath = tempFile.name # You need to return the tempFile itself so that the garbage collector doesn't touch it - return tempFilePath, serverConfig, fullConfig, tempFile, pollingRates, ipAddresses + return ( + tempFilePath, + serverConfig, + fullConfig, + shortcutConfig, + tempFile, + pollingRates, + ipAddresses, + ) diff --git a/src/instrumentserver/gui/base_instrument.py b/src/instrumentserver/gui/base_instrument.py index 5e76af5..2e28793 100644 --- a/src/instrumentserver/gui/base_instrument.py +++ b/src/instrumentserver/gui/base_instrument.py @@ -107,6 +107,7 @@ from typing import Any, Dict, List, Optional, cast from instrumentserver import QtCore, QtGui, QtWidgets +from instrumentserver.gui.shortcuts import KeyboardShortcutManager class ItemBase(QtGui.QStandardItem): @@ -237,6 +238,7 @@ def _matches_any_pattern(name: str, patterns: List[str]) -> bool: :param patterns: List of glob patterns to match against (e.g., 'power_*', '*_frequency') :return: True if name matches any pattern, False otherwise """ + for pattern in patterns: if fnmatch.fnmatch(name, pattern): return True @@ -481,7 +483,7 @@ def filterAcceptsRow( item = parent.child(source_row, 0) # The order in which things get constructed seems to impact this. - # When the application is first starting, the proxy model does not have the trash attribute. + # When the application is first starting, the proxy model does not have the trash attribute. if hasattr(self, "trash"): if self.trash: # Assertion is there to satisfy mypy. item can be None, that is why we check before making the assertion @@ -769,6 +771,7 @@ class InstrumentDisplayBase(QtWidgets.QWidget): :param proxyModelType: The type of proxy model that should be used. :param viewType: The type of view that should be used. :param callSignals: If False, the constructor will not call the method connectSignals + :param shortcutManager: Manager shared across the application so actions can be registered to shortcuts """ def __init__( @@ -780,6 +783,7 @@ def __init__( proxyModelType: type = InstrumentSortFilterProxyModel, viewType: type = InstrumentTreeViewBase, callSignals: bool = True, + shortcutManager: Optional[KeyboardShortcutManager] = None, parent: Optional[QtWidgets.QWidget] = None, **modelKwargs: Any, ) -> None: @@ -795,6 +799,12 @@ def __init__( self.proxyModel = proxyModelType(self.model) self.view = viewType(self.proxyModel) + self.shortcutManager = ( + shortcutManager + if shortcutManager is not None + else KeyboardShortcutManager() + ) + self.layout_ = QtWidgets.QVBoxLayout() self.lineEdit = QtWidgets.QLineEdit(self) @@ -830,6 +840,17 @@ def connectSignals(self) -> None: self.proxyModel.onSortingIndicatorChanged ) + self.shortcutManager.register("jump_filter", self.lineEdit.setFocus, self) + self.shortcutManager.register("star_item", self._starCurrentItem, self) + self.shortcutManager.register("trash_item", self._trashCurrentItem, self) + self.shortcutManager.register("fit_column", self._fitCurrentColumn, self) + self.shortcutManager.register("sort_column", self._sortCurrentColumn, self) + self.shortcutManager.register("refresh_all", self.refreshAll, self) + self.shortcutManager.register("expand_all", self.view.expandAll, self) + self.shortcutManager.register("collapse_all", self.view.collapseAll, self) + self.shortcutManager.register("toggle_star", self._starAction.trigger, self) # type: ignore[union-attr] + self.shortcutManager.register("toggle_trash", self._trashAction.trigger, self) # type: ignore[union-attr] + def makeToolbar(self) -> QtWidgets.QToolBar: """ Creates the toolbar, override to add more buttons to the toolbar. @@ -842,6 +863,7 @@ def makeToolbar(self) -> QtWidgets.QToolBar: "refresh all items from the instrument", ) refreshAction.triggered.connect(lambda x: self.refreshAll()) # type: ignore[union-attr] + self.shortcutManager.register_tooltip("refresh_all", refreshAction) toolbar.addSeparator() @@ -850,26 +872,30 @@ def makeToolbar(self) -> QtWidgets.QToolBar: "expand tree", ) expandAction.triggered.connect(lambda x: self.view.expandAll()) # type: ignore[union-attr] + self.shortcutManager.register_tooltip("expand_all", expandAction) collapseAction = toolbar.addAction( QtGui.QIcon(":/icons/collapse.svg"), "collapse tree", ) collapseAction.triggered.connect(lambda x: self.view.collapseAll()) # type: ignore[union-attr] + self.shortcutManager.register_tooltip("collapse_all", collapseAction) toolbar.addSeparator() - starAction = toolbar.addAction( + self._starAction = toolbar.addAction( QtGui.QIcon(":/icons/star.svg"), "Move Starred items to the top" ) - starAction.setCheckable(True) # type: ignore[union-attr] - starAction.triggered.connect(lambda x: self.promoteStar()) # type: ignore[union-attr] + self._starAction.setCheckable(True) # type: ignore[union-attr] + self._starAction.triggered.connect(lambda x: self.proxyModel.onToggleStar()) # type: ignore[union-attr] + self.shortcutManager.register_tooltip("toggle_star", self._starAction) - trashAction = toolbar.addAction( + self._trashAction = toolbar.addAction( QtGui.QIcon(":/icons/trash-crossed.svg"), "Hide trashed items" ) - trashAction.setCheckable(True) # type: ignore[union-attr] - trashAction.triggered.connect(lambda x: self.hideTrash()) # type: ignore[union-attr] + self._trashAction.setCheckable(True) # type: ignore[union-attr] + self._trashAction.triggered.connect(lambda x: self.proxyModel.onToggleTrash()) # type: ignore[union-attr] + self.shortcutManager.register_tooltip("toggle_trash", self._trashAction) # Debugging tools keep commented for commits. # printAction = toolbar.addAction( @@ -883,16 +909,51 @@ def makeToolbar(self) -> QtWidgets.QToolBar: return toolbar @QtCore.Slot() - def hideTrash(self) -> None: - self.proxyModel.onToggleTrash() + def refreshAll(self) -> None: + self.model.refreshAll() + + def _getCurrentItem(self) -> Optional[ItemBase]: + proxy_index = self.view.currentIndex() + if not proxy_index.isValid(): + return None + source_index = self.proxyModel.mapToSource(proxy_index) + if source_index.column() != 0: + source_index = source_index.sibling(source_index.row(), 0) + item = self.model.itemFromIndex(source_index) + return item if isinstance(item, ItemBase) else None + + def _toggleCurrentItem(self, signal: QtCore.SignalInstance) -> None: + item = self._getCurrentItem() + if item is not None: + self.view.lastSelectedItem = item + signal.emit(item) @QtCore.Slot() - def promoteStar(self) -> None: - self.proxyModel.onToggleStar() + def _starCurrentItem(self) -> None: + self._toggleCurrentItem(self.view.itemStarToggle) @QtCore.Slot() - def refreshAll(self) -> None: - self.model.refreshAll() + def _trashCurrentItem(self) -> None: + self._toggleCurrentItem(self.view.itemTrashToggle) + + @QtCore.Slot() + def _fitCurrentColumn(self) -> None: + col = self.view.currentIndex().column() + self.view.resizeColumnToContents(col if col >= 0 else 0) + + @QtCore.Slot() + def _sortCurrentColumn(self) -> None: + header = self.view.header() + col = self.view.currentIndex().column() + if col < 0: + col = header.sortIndicatorSection() + current_order = header.sortIndicatorOrder() + new_order = ( + QtCore.Qt.SortOrder.AscendingOrder + if current_order == QtCore.Qt.SortOrder.DescendingOrder + else QtCore.Qt.SortOrder.DescendingOrder + ) + header.setSortIndicator(col, new_order) def debuggingMethod(self) -> None: """ diff --git a/src/instrumentserver/gui/instruments.py b/src/instrumentserver/gui/instruments.py index 1a41ae0..b96805a 100644 --- a/src/instrumentserver/gui/instruments.py +++ b/src/instrumentserver/gui/instruments.py @@ -19,7 +19,7 @@ InstrumentTreeViewBase, ItemBase, ) -from .parameters import AnyInputForMethod, ParameterWidget +from .parameters import AnyInput, AnyInputForMethod, ParameterWidget # TODO: all styles set through a global style sheet. # TODO: [maybe] add a column for information on valid input values? @@ -465,6 +465,8 @@ def __init__( if "sub_port" in kwargs: modelKwargs["sub_port"] = kwargs.pop("sub_port") + shortcutManager = kwargs.pop("shortcutManager", None) + super().__init__( instrument=instrument, parent=parent, @@ -473,12 +475,51 @@ def __init__( modelType=ModelParameters, viewType=viewType, callSignals=callSignals, + shortcutManager=shortcutManager, **modelKwargs, ) def connectSignals(self) -> None: super().connectSignals() self.model.itemNewValue.connect(self.view.onItemNewValue) + self.shortcutManager.register("refresh_item", self._refreshCurrentItem, self) + self.shortcutManager.register( + "toggle_python", self._togglePythonCurrentItem, self + ) + self.shortcutManager.register("edit_value", self._focusToParameterValue, self) + + def _withCurrentParameter( + self, callback: Callable[["ParameterWidget"], None] + ) -> None: + item = self._getCurrentItem() + if item is not None: + widget = self.view.delegate.parameters.get(item.name) + if widget is not None: + callback(widget) + + @QtCore.Slot() + def _refreshCurrentItem(self) -> None: + self._withCurrentParameter(lambda w: w.setWidgetFromParameter()) + + @QtCore.Slot() + def _togglePythonCurrentItem(self) -> None: + self._withCurrentParameter( + lambda w: ( + w.paramWidget.doEval.toggle() + if isinstance(w.paramWidget, AnyInput) + else None + ) + ) + + @QtCore.Slot() + def _focusToParameterValue(self) -> None: + self._withCurrentParameter( + lambda w: ( + w.paramWidget.input.setFocus() + if isinstance(w.paramWidget, AnyInput) + else w.paramWidget.setFocus() + ) + ) # ----------------- Parameters Display Classes - Ending -------------------------------- @@ -615,6 +656,17 @@ def connectSignals(self) -> None: self.parameterCreationError.connect(self.addParam.setError) self.parameterCreated.connect(self.addParam.clear) self.profileManager.indexChanged.connect(self.loadProfile) + self.shortcutManager.register("delete_item", self._deleteCurrentItem, self) + self.shortcutManager.register("clear_add", self.addParam.clear, self) + self.shortcutManager.register("add_item", self.addParam.nameEdit.setFocus, self) + self.shortcutManager.register("load_items", self.loadFromFile, self) + self.shortcutManager.register("save_items", self.saveToFile, self) + + @QtCore.Slot() + def _deleteCurrentItem(self) -> None: + item = self._getCurrentItem() + if item is not None: + self.removeParameter(item.name) def makeToolbar(self) -> QtWidgets.QToolBar: toolbar = super().makeToolbar() @@ -626,12 +678,14 @@ def makeToolbar(self) -> QtWidgets.QToolBar: "Load parameters from file", ) loadParamAction.triggered.connect(lambda x: self.loadFromFile()) # type: ignore[union-attr] + self.shortcutManager.register_tooltip("load_items", loadParamAction) saveParamAction = toolbar.addAction( QtGui.QIcon(":/icons/save.svg"), "Save parameters to file", ) saveParamAction.triggered.connect(lambda x: self.saveToFile()) # type: ignore[union-attr] + self.shortcutManager.register_tooltip("save_items", saveParamAction) return toolbar @@ -767,14 +821,44 @@ def __init__(self, instrument: Any, **kwargs: Any) -> None: if "methods-hide" in kwargs: modelKwargs["itemsHide"] = kwargs.pop("methods-hide") + shortcutManager = kwargs.pop("shortcutManager", None) + super().__init__( instrument=instrument, attr="functions", modelType=MethodsModel, viewType=MethodsTreeView, + shortcutManager=shortcutManager, **modelKwargs, ) + def connectSignals(self) -> None: + super().connectSignals() + self.shortcutManager.register( + "toggle_python", self._togglePythonCurrentItem, self + ) + self.shortcutManager.register("edit_value", self._focusToMethodValue, self) + self.shortcutManager.register("run_method", self._runCurrentMethod, self) + + def _withCurrentMethod(self, callback: Callable[["MethodDisplay"], None]) -> None: + item = self._getCurrentItem() + if item is not None: + widget = self.view.delegate.methods.get(item.name) + if widget is not None: + callback(widget) + + @QtCore.Slot() + def _togglePythonCurrentItem(self) -> None: + self._withCurrentMethod(lambda w: w.anyInput.doEval.toggle()) + + @QtCore.Slot() + def _focusToMethodValue(self) -> None: + self._withCurrentMethod(lambda w: w.anyInput.input.setFocus()) + + @QtCore.Slot() + def _runCurrentMethod(self) -> None: + self._withCurrentMethod(lambda w: w.runFun()) + # ----------------- Methods Display Classes - Ending ----------------------------------- diff --git a/src/instrumentserver/gui/shortcuts.py b/src/instrumentserver/gui/shortcuts.py new file mode 100644 index 0000000..27c639f --- /dev/null +++ b/src/instrumentserver/gui/shortcuts.py @@ -0,0 +1,330 @@ +import logging +from collections import defaultdict +from typing import Callable, Optional, Union + +import yaml + +from instrumentserver import QtCore, QtGui, QtWidgets + +logger = logging.getLogger(__name__) + + +class KeyboardShortcutManager: + """ + Manages keyboard shortcut mappings for the instrument GUI. + + Holds a registry of named actions with default key sequences and descriptions. + The active mapping starts from defaults and can be customized by the user and + persisted to a JSON file. + + Qt does not poll for key presses — instead, register() hands each mapping entry + to Qt's event system via QShortcut, which fires the associated callback when the + key is pressed. register_tooltip() tracks widgets whose tooltips should display + the current key hint and be updated live when the user rebinds. + """ + + REGISTRY: dict[str, tuple[str, str]] = { + # action_id: (default_key_sequence, description) + "jump_filter": ("Ctrl+F", "Jump cursor to the filter search bar"), + "collapse_all": ("Ctrl+Shift+E", "Collapse all tree nodes"), + "expand_all": ("Ctrl+E", "Expand all tree nodes"), + "toggle_star": ("Ctrl+Shift+A", "Toggle star filter"), + "star_item": ("Ctrl+A", "Star/un-star the selected parameter"), + "toggle_trash": ("Ctrl+Shift+T", "Toggle trash filter"), + "trash_item": ("Ctrl+T", "Trash/un-trash the selected parameter"), + "refresh_all": ("Ctrl+Shift+R", "Refresh all parameters from instrument"), + "refresh_item": ("Ctrl+R", "Refresh the selected parameter"), + "toggle_python": ("Ctrl+P", "Toggle Python eval for selected parameter"), + "delete_item": ("Ctrl+Backspace", "Delete the selected parameter"), + "run_method": ("Ctrl+Return", "Runs the selected method"), + "clear_add": ("Ctrl+Shift+N", "Clear regions of add parameter bar"), + "add_item": ("Ctrl+N", "Jump cursor to the add parameter bar"), + "load_items": ("Ctrl+Shift+O", "Load parameters from JSON file"), + "save_items": ("Ctrl+Shift+S", "Save parameters to JSON file"), + "fit_column": ("Ctrl+Shift+D", "Fits column width"), + "sort_column": ("Ctrl+D", "Toggle sorting of selected column"), + "edit_value": ("Right", "Jump cursor to value field for selected parameter"), + } + + def __init__(self) -> None: + self.mapping: dict[str, str] = {k: v[0] for k, v in self.REGISTRY.items()} + self._shortcut_map: dict[str, list[QtWidgets.QShortcut]] = defaultdict(list) + self._tooltip_widgets: dict[ + str, list[tuple[Union[QtWidgets.QAction, QtWidgets.QWidget], str]] + ] = defaultdict(list) + + def load_from_dict(self, config: dict[str, str]) -> None: + """Override the current mapping with entries read from serverConfig file.""" + self.mapping.update(config) + + def save(self, path: str) -> None: + """Write the current mapping to the serverConfig file.""" + with open(path, "r") as f: + data = yaml.safe_load(f) or {} + + diffs = {k: v for k, v in self.mapping.items() if v != self.REGISTRY[k][0]} + if diffs: + data["shortcuts"] = diffs + elif "shortcuts" in data: + del data["shortcuts"] + with open(path, "w") as f: + yaml.dump(data, f, indent=2) + + def register_tooltip( + self, + action_id: str, + widget: Optional[Union[QtWidgets.QAction, QtWidgets.QWidget]], + ) -> None: + """Append the current key hint to widget's tooltip and track it for live rebinding.""" + if widget is None: + return + key = self.mapping.get(action_id, "") + if not key: + return + base_tip = widget.toolTip() + widget.setToolTip(f"{base_tip} [{key}]" if base_tip else f"[{key}]") + self._tooltip_widgets[action_id].append((widget, base_tip)) + widget.destroyed.connect( + lambda _, aid=action_id, ref=widget: self._remove_tooltip_widget(aid, ref) + ) + + def _remove_tooltip_widget( + self, action_id: str, widget: Union[QtWidgets.QAction, QtWidgets.QWidget] + ) -> None: + self._tooltip_widgets[action_id] = [ + (w, t) for w, t in self._tooltip_widgets[action_id] if w is not widget + ] + + def register( + self, action_id: str, callback: Callable, widget: QtWidgets.QWidget + ) -> None: + """ + Create a QShortcut for action_id on widget and connect it to callback. + + The shortcut fires when widget or any of its children has focus. + The QShortcut object is retained internally so it is not garbage-collected + and can be updated live via rebind(). + """ + key = self.mapping.get(action_id) + if key: + sc = QtWidgets.QShortcut(QtGui.QKeySequence(key), widget) + sc.setContext(QtCore.Qt.ShortcutContext.WidgetWithChildrenShortcut) + sc.activated.connect(callback) + self._shortcut_map[action_id].append(sc) + sc.destroyed.connect( + lambda _, aid=action_id, ref=sc: ( + self._shortcut_map[aid].remove(ref) + if ref in self._shortcut_map[aid] + else None + ) + ) + + def rebind(self, action_id: str, new_key: str) -> None: + """Update a shortcut immediately. Updates the mapping and the live Qt objects.""" + self.mapping[action_id] = new_key + for sc in self._shortcut_map.get(action_id, []): + sc.setKey(QtGui.QKeySequence(new_key)) + for widget, base_tip in self._tooltip_widgets.get(action_id, []): + widget.setToolTip( + f"{base_tip} [{new_key}]" if base_tip else f"[{new_key}]" + ) + logger.debug(f"Rebound '{action_id}' to '{new_key}'") + + +class ShortcutEditorWidget(QtWidgets.QWidget): + """ + Permanent widget for viewing and editing keyboard shortcuts. + + Intended to be embedded as a tab in the server window. Changes made in the + table are applied live to the manager (and therefore all registered shortcuts) + when 'Save to File' is clicked. Also use 'Save to file' to persist across sessions. + + Each row has a small colored indicator dot in the rightmost column: + - transparent : saved and unique + - orange: unsaved change (widget value differs from manager.mapping) + - red : duplicate key sequence shared with another action (takes priority) + + QKeySequenceEdit emits a spurious keySequenceChanged after its finishing timeout + resets the internal recording state. _onEditingFinished blocks that widget's signals + for one event-loop tick (swallowing the revert signal at the source), then restores + the display if the widget actually changed its stored sequence during the block. + """ + + def __init__( + self, + manager: KeyboardShortcutManager, + configPath: str, + parent: Optional[QtWidgets.QWidget] = None, + ) -> None: + super().__init__(parent) + self.manager = manager + self._file_mapping: dict[str, str] = dict(manager.mapping) + + self._table = QtWidgets.QTableWidget(len(manager.REGISTRY), 4, self) + self._table.setHorizontalHeaderLabels(["Action", "Description", "Shortcut", ""]) + header = self._table.horizontalHeader() + assert header is not None + header.setSectionResizeMode( + 0, QtWidgets.QHeaderView.ResizeMode.ResizeToContents + ) + header.setSectionResizeMode( + 1, QtWidgets.QHeaderView.ResizeMode.ResizeToContents + ) + header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeMode.Stretch) + header.setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeMode.Fixed) + self._table.setColumnWidth(3, 32) + self._table.setSelectionBehavior( + QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows + ) + + self._indicators: list[QtWidgets.QLabel] = [] + self._populateTable() + + btnReset = QtWidgets.QPushButton("Reset to defaults") + btnReset.clicked.connect(self._resetDefaults) + btnSaveFile = QtWidgets.QPushButton("Save to file") + btnSaveFile.clicked.connect(self._saveToFile) + + btnRow = QtWidgets.QHBoxLayout() + btnRow.addStretch() + btnRow.addWidget(btnReset) + btnRow.addWidget(btnSaveFile) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(self._table) + layout.addLayout(btnRow) + self.setLayout(layout) + + self.configPath = configPath + + def _populateTable(self) -> None: + self._indicators.clear() + self._table.clearContents() + for row, (action_id, (_, description)) in enumerate( + self.manager.REGISTRY.items() + ): + current = self.manager.mapping.get(action_id, "") + + id_item = QtWidgets.QTableWidgetItem(action_id) + id_item.setFlags(id_item.flags() & ~QtCore.Qt.ItemFlag.ItemIsEditable) # type: ignore[arg-type] + + desc_item = QtWidgets.QTableWidgetItem(description) + desc_item.setFlags(desc_item.flags() & ~QtCore.Qt.ItemFlag.ItemIsEditable) # type: ignore[arg-type] + + self._table.setItem(row, 0, id_item) + self._table.setItem(row, 1, desc_item) + + key_edit = QtWidgets.QKeySequenceEdit( + QtGui.QKeySequence(current), self._table + ) + key_edit.keySequenceChanged.connect(self._onUnsavedChange) + key_edit.editingFinished.connect( + lambda w=key_edit: self._onEditingFinished(w) + ) + self._table.setCellWidget(row, 2, key_edit) + + dot = QtWidgets.QLabel() + dot.setFixedSize(20, 20) + dot.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + dot.setStyleSheet( + "QToolTip { color: black; background-color: white;" + " border: 1px solid #cccccc; }" + ) + container = QtWidgets.QWidget() + cl = QtWidgets.QHBoxLayout(container) + cl.addWidget(dot) + cl.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + cl.setContentsMargins(0, 0, 0, 0) + self._table.setCellWidget(row, 3, container) + self._indicators.append(dot) + + self._updateAllIndicators() + + def _collectDuplicates(self) -> dict[str, list[str]]: + """Return {key_sequence: [action_ids]} for every key bound to more than one action.""" + seen: dict[str, list[str]] = defaultdict(list) + for row, action_id in enumerate(self.manager.REGISTRY): + widget = self._table.cellWidget(row, 2) + if isinstance(widget, QtWidgets.QKeySequenceEdit): + key = widget.keySequence().toString() + if key: + seen[key].append(action_id) + return {k: v for k, v in seen.items() if len(v) > 1} + + def _updateAllIndicators(self) -> None: + duplicates = self._collectDuplicates() + for row, action_id in enumerate(self.manager.REGISTRY): + if row >= len(self._indicators): + break + dot = self._indicators[row] + widget = self._table.cellWidget(row, 2) + if not isinstance(widget, QtWidgets.QKeySequenceEdit): + continue + current = widget.keySequence().toString() + if current in duplicates: + others = [a for a in duplicates[current] if a != action_id] + self._applyIndicator( + dot, "duplicate", f"Duplicate: also bound to {', '.join(others)}" + ) + elif current != self._file_mapping.get(action_id, ""): + self._applyIndicator(dot, "unsaved", "Unsaved change") + else: + self._applyIndicator(dot, "ok", "") + + @staticmethod + def _applyIndicator(dot: QtWidgets.QLabel, state: str, tooltip: str) -> None: + dot.setToolTip(tooltip) + + if state == "ok": + icon = QtGui.QIcon(":/icons/no-alert.svg") + elif state == "unsaved": + icon = QtGui.QIcon(":/icons/orange-alert.svg") + else: # duplicate + icon = QtGui.QIcon(":/icons/red-alert.svg") + pix = icon.pixmap(20, 20) + dot.setPixmap(pix) + + @QtCore.Slot() + def _onUnsavedChange(self) -> None: + self._updateAllIndicators() + + def _onEditingFinished(self, widget: QtWidgets.QKeySequenceEdit) -> None: + intended = widget.keySequence().toString() + widget.blockSignals(True) + QtCore.QTimer.singleShot(0, lambda: self._restoreAfterRevert(intended, widget)) + + def _restoreAfterRevert( + self, intended: str, widget: QtWidgets.QKeySequenceEdit + ) -> None: + if widget.keySequence().toString() != intended: + widget.setKeySequence(QtGui.QKeySequence(intended)) + widget.blockSignals(False) + + def _save(self) -> None: + for row, action_id in enumerate(self.manager.REGISTRY): + widget = self._table.cellWidget(row, 2) + if isinstance(widget, QtWidgets.QKeySequenceEdit): + self.manager.rebind(action_id, widget.keySequence().toString()) + + @QtCore.Slot() + def _saveToFile(self) -> None: + self._save() + if self.configPath: + try: + self.manager.save(self.configPath) + self._file_mapping = dict(self.manager.mapping) + self._updateAllIndicators() + logger.info(f"Saved shortcuts to {self.configPath}") + except Exception as e: + logger.warning(f"Failed to save shortcuts to {self.configPath}: {e}") + + @QtCore.Slot() + def _resetDefaults(self) -> None: + for row, (action_id, (default_key, _)) in enumerate( + self.manager.REGISTRY.items() + ): + self.manager.rebind(action_id, default_key) + widget = self._table.cellWidget(row, 2) + if isinstance(widget, QtWidgets.QKeySequenceEdit): + widget.setKeySequence(QtGui.QKeySequence(default_key)) + self._updateAllIndicators() diff --git a/src/instrumentserver/resource.py b/src/instrumentserver/resource.py index d4fd9e9..061fd31 100644 --- a/src/instrumentserver/resource.py +++ b/src/instrumentserver/resource.py @@ -65,134 +65,175 @@ \x31\x3d\x22\x31\x32\x22\x20\x79\x31\x3d\x22\x31\x36\x22\x20\x78\ \x32\x3d\x22\x31\x32\x2e\x30\x31\x22\x20\x79\x32\x3d\x22\x31\x36\ \x22\x3e\x3c\x2f\x6c\x69\x6e\x65\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x07\xd9\ +\x00\x00\x07\xe1\ \x3c\ \x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\x22\x38\x30\x22\x20\x68\ \x65\x69\x67\x68\x74\x3d\x22\x38\x30\x22\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\x20\x66\x69\ -\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x3e\x0a\x20\x3c\x67\x3e\x0a\ -\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x4c\x61\x79\x65\x72\x20\x31\ -\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\ -\x20\x64\x3d\x22\x6d\x33\x38\x2e\x31\x34\x34\x31\x2c\x31\x35\x2e\ -\x31\x36\x31\x36\x31\x63\x30\x2e\x36\x37\x31\x38\x2c\x2d\x31\x2e\ -\x36\x37\x32\x39\x20\x33\x2e\x30\x34\x2c\x2d\x31\x2e\x36\x37\x32\ -\x39\x20\x33\x2e\x37\x31\x31\x38\x2c\x30\x6c\x35\x2e\x39\x35\x32\ -\x32\x2c\x31\x34\x2e\x38\x32\x32\x32\x63\x30\x2e\x32\x38\x36\x31\ -\x2c\x30\x2e\x37\x31\x32\x34\x20\x30\x2e\x39\x35\x34\x37\x2c\x31\ -\x2e\x31\x39\x38\x31\x20\x31\x2e\x37\x32\x30\x37\x2c\x31\x2e\x32\ -\x35\x30\x31\x6c\x31\x35\x2e\x39\x33\x36\x2c\x31\x2e\x30\x38\x30\ -\x35\x63\x31\x2e\x37\x39\x38\x37\x2c\x30\x2e\x31\x32\x32\x20\x32\ -\x2e\x35\x33\x30\x35\x2c\x32\x2e\x33\x37\x34\x34\x20\x31\x2e\x31\ -\x34\x37\x2c\x33\x2e\x35\x33\x30\x32\x6c\x2d\x31\x32\x2e\x32\x35\ -\x37\x34\x2c\x31\x30\x2e\x32\x34\x31\x32\x63\x2d\x30\x2e\x35\x38\ -\x39\x31\x2c\x30\x2e\x34\x39\x32\x32\x20\x2d\x30\x2e\x38\x34\x34\ -\x35\x2c\x31\x2e\x32\x37\x38\x32\x20\x2d\x30\x2e\x36\x35\x37\x32\ -\x2c\x32\x2e\x30\x32\x32\x37\x6c\x33\x2e\x38\x39\x36\x39\x2c\x31\ -\x35\x2e\x34\x39\x63\x30\x2e\x34\x33\x39\x38\x2c\x31\x2e\x37\x34\ -\x38\x33\x20\x2d\x31\x2e\x34\x37\x36\x32\x2c\x33\x2e\x31\x34\x30\ -\x34\x20\x2d\x33\x2e\x30\x30\x33\x2c\x32\x2e\x31\x38\x31\x38\x6c\ -\x2d\x31\x33\x2e\x35\x32\x37\x37\x2c\x2d\x38\x2e\x34\x39\x32\x38\ -\x63\x2d\x30\x2e\x36\x35\x30\x32\x2c\x2d\x30\x2e\x34\x30\x38\x32\ -\x20\x2d\x31\x2e\x34\x37\x36\x36\x2c\x2d\x30\x2e\x34\x30\x38\x32\ -\x20\x2d\x32\x2e\x31\x32\x36\x38\x2c\x30\x6c\x2d\x31\x33\x2e\x35\ -\x32\x37\x37\x2c\x38\x2e\x34\x39\x32\x38\x63\x2d\x31\x2e\x35\x32\ -\x36\x38\x2c\x30\x2e\x39\x35\x38\x36\x20\x2d\x33\x2e\x34\x34\x32\ -\x38\x2c\x2d\x30\x2e\x34\x33\x33\x35\x20\x2d\x33\x2e\x30\x30\x33\ -\x2c\x2d\x32\x2e\x31\x38\x31\x38\x6c\x33\x2e\x38\x39\x36\x39\x2c\ -\x2d\x31\x35\x2e\x34\x39\x63\x30\x2e\x31\x38\x37\x33\x2c\x2d\x30\ -\x2e\x37\x34\x34\x35\x20\x2d\x30\x2e\x30\x36\x38\x31\x2c\x2d\x31\ -\x2e\x35\x33\x30\x35\x20\x2d\x30\x2e\x36\x35\x37\x32\x2c\x2d\x32\ -\x2e\x30\x32\x32\x37\x6c\x2d\x31\x32\x2e\x32\x35\x37\x34\x2c\x2d\ -\x31\x30\x2e\x32\x34\x31\x32\x63\x2d\x31\x2e\x33\x38\x33\x35\x2c\ -\x2d\x31\x2e\x31\x35\x35\x38\x20\x2d\x30\x2e\x36\x35\x31\x37\x2c\ -\x2d\x33\x2e\x34\x30\x38\x32\x20\x31\x2e\x31\x34\x37\x2c\x2d\x33\ -\x2e\x35\x33\x30\x32\x6c\x31\x35\x2e\x39\x33\x36\x2c\x2d\x31\x2e\ -\x30\x38\x30\x35\x63\x30\x2e\x37\x36\x36\x2c\x2d\x30\x2e\x30\x35\ -\x32\x20\x31\x2e\x34\x33\x34\x36\x2c\x2d\x30\x2e\x35\x33\x37\x37\ -\x20\x31\x2e\x37\x32\x30\x37\x2c\x2d\x31\x2e\x32\x35\x30\x31\x6c\ -\x35\x2e\x39\x35\x32\x32\x2c\x2d\x31\x34\x2e\x38\x32\x32\x32\x7a\ -\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x39\x39\x34\x41\x22\ -\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x31\x22\x2f\x3e\x0a\x20\x20\ -\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x33\x39\x2e\x30\x35\x31\ -\x35\x2c\x32\x36\x2e\x33\x31\x30\x38\x63\x30\x2e\x33\x33\x35\x39\ -\x2c\x2d\x30\x2e\x38\x33\x36\x34\x20\x31\x2e\x35\x32\x30\x31\x2c\ -\x2d\x30\x2e\x38\x33\x36\x34\x20\x31\x2e\x38\x35\x36\x2c\x30\x6c\ -\x32\x2e\x39\x37\x36\x2c\x37\x2e\x34\x31\x31\x31\x63\x30\x2e\x31\ -\x34\x33\x31\x2c\x30\x2e\x33\x35\x36\x32\x20\x30\x2e\x34\x37\x37\ -\x34\x2c\x30\x2e\x35\x39\x39\x31\x20\x30\x2e\x38\x36\x30\x34\x2c\ -\x30\x2e\x36\x32\x35\x31\x6c\x37\x2e\x39\x36\x38\x2c\x30\x2e\x35\ -\x34\x30\x33\x63\x30\x2e\x38\x39\x39\x33\x2c\x30\x2e\x30\x36\x30\ -\x39\x20\x31\x2e\x32\x36\x35\x32\x2c\x31\x2e\x31\x38\x37\x31\x20\ -\x30\x2e\x35\x37\x33\x35\x2c\x31\x2e\x37\x36\x35\x31\x6c\x2d\x36\ -\x2e\x31\x32\x38\x37\x2c\x35\x2e\x31\x32\x30\x35\x63\x2d\x30\x2e\ -\x32\x39\x34\x36\x2c\x30\x2e\x32\x34\x36\x32\x20\x2d\x30\x2e\x34\ -\x32\x32\x33\x2c\x30\x2e\x36\x33\x39\x32\x20\x2d\x30\x2e\x33\x32\ -\x38\x36\x2c\x31\x2e\x30\x31\x31\x34\x6c\x31\x2e\x39\x34\x38\x34\ -\x2c\x37\x2e\x37\x34\x35\x63\x30\x2e\x32\x31\x39\x39\x2c\x30\x2e\ -\x38\x37\x34\x32\x20\x2d\x30\x2e\x37\x33\x38\x31\x2c\x31\x2e\x35\ -\x37\x30\x32\x20\x2d\x31\x2e\x35\x30\x31\x35\x2c\x31\x2e\x30\x39\ -\x30\x39\x6c\x2d\x36\x2e\x37\x36\x33\x38\x2c\x2d\x34\x2e\x32\x34\ -\x36\x34\x63\x2d\x30\x2e\x33\x32\x35\x31\x2c\x2d\x30\x2e\x32\x30\ -\x34\x31\x20\x2d\x30\x2e\x37\x33\x38\x33\x2c\x2d\x30\x2e\x32\x30\ -\x34\x31\x20\x2d\x31\x2e\x30\x36\x33\x34\x2c\x30\x6c\x2d\x36\x2e\ -\x37\x36\x33\x38\x2c\x34\x2e\x32\x34\x36\x34\x63\x2d\x30\x2e\x37\ -\x36\x33\x35\x2c\x30\x2e\x34\x37\x39\x33\x20\x2d\x31\x2e\x37\x32\ -\x31\x34\x2c\x2d\x30\x2e\x32\x31\x36\x37\x20\x2d\x31\x2e\x35\x30\ -\x31\x35\x2c\x2d\x31\x2e\x30\x39\x30\x39\x6c\x31\x2e\x39\x34\x38\ -\x34\x2c\x2d\x37\x2e\x37\x34\x35\x63\x30\x2e\x30\x39\x33\x36\x2c\ -\x2d\x30\x2e\x33\x37\x32\x32\x20\x2d\x30\x2e\x30\x33\x34\x31\x2c\ -\x2d\x30\x2e\x37\x36\x35\x32\x20\x2d\x30\x2e\x33\x32\x38\x36\x2c\ -\x2d\x31\x2e\x30\x31\x31\x34\x6c\x2d\x36\x2e\x31\x32\x38\x37\x2c\ -\x2d\x35\x2e\x31\x32\x30\x35\x63\x2d\x30\x2e\x36\x39\x31\x38\x2c\ -\x2d\x30\x2e\x35\x37\x38\x20\x2d\x30\x2e\x33\x32\x35\x38\x2c\x2d\ -\x31\x2e\x37\x30\x34\x32\x20\x30\x2e\x35\x37\x33\x35\x2c\x2d\x31\ -\x2e\x37\x36\x35\x31\x6c\x37\x2e\x39\x36\x38\x2c\x2d\x30\x2e\x35\ -\x34\x30\x33\x63\x30\x2e\x33\x38\x33\x2c\x2d\x30\x2e\x30\x32\x36\ -\x20\x30\x2e\x37\x31\x37\x33\x2c\x2d\x30\x2e\x32\x36\x38\x39\x20\ -\x30\x2e\x38\x36\x30\x33\x2c\x2d\x30\x2e\x36\x32\x35\x31\x6c\x32\ -\x2e\x39\x37\x36\x31\x2c\x2d\x37\x2e\x34\x31\x31\x31\x7a\x22\x20\ -\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x43\x39\x34\x43\x22\x20\x69\ -\x64\x3d\x22\x73\x76\x67\x5f\x32\x22\x2f\x3e\x0a\x20\x20\x3c\x70\ -\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x66\x30\x30\x30\ -\x30\x22\x20\x64\x3d\x22\x6d\x35\x2c\x33\x39\x2e\x39\x39\x39\x39\ -\x34\x6c\x30\x2c\x30\x63\x30\x2c\x2d\x31\x38\x2e\x31\x36\x32\x36\ -\x38\x20\x31\x35\x2e\x36\x37\x30\x30\x35\x2c\x2d\x33\x32\x2e\x38\ -\x38\x36\x35\x34\x20\x33\x34\x2e\x39\x39\x39\x39\x37\x2c\x2d\x33\ -\x32\x2e\x38\x38\x36\x35\x34\x6c\x30\x2c\x30\x63\x39\x2e\x32\x38\ -\x32\x37\x2c\x30\x20\x31\x38\x2e\x31\x38\x35\x31\x37\x2c\x33\x2e\ -\x34\x36\x34\x38\x33\x20\x32\x34\x2e\x37\x34\x38\x37\x34\x2c\x39\ -\x2e\x36\x33\x32\x32\x38\x63\x36\x2e\x35\x36\x33\x38\x33\x2c\x36\ -\x2e\x31\x36\x37\x34\x35\x20\x31\x30\x2e\x32\x35\x31\x32\x39\x2c\ -\x31\x34\x2e\x35\x33\x32\x33\x32\x20\x31\x30\x2e\x32\x35\x31\x32\ -\x39\x2c\x32\x33\x2e\x32\x35\x34\x32\x36\x6c\x30\x2c\x30\x63\x30\ -\x2c\x31\x38\x2e\x31\x36\x32\x39\x20\x2d\x31\x35\x2e\x36\x36\x39\ -\x39\x34\x2c\x33\x32\x2e\x38\x38\x36\x36\x36\x20\x2d\x33\x35\x2e\ -\x30\x30\x30\x30\x33\x2c\x33\x32\x2e\x38\x38\x36\x36\x36\x6c\x30\ -\x2c\x30\x63\x2d\x31\x39\x2e\x33\x32\x39\x39\x32\x2c\x30\x20\x2d\ -\x33\x34\x2e\x39\x39\x39\x39\x37\x2c\x2d\x31\x34\x2e\x37\x32\x33\ -\x37\x36\x20\x2d\x33\x34\x2e\x39\x39\x39\x39\x37\x2c\x2d\x33\x32\ -\x2e\x38\x38\x36\x36\x36\x6c\x30\x2c\x30\x7a\x6d\x35\x36\x2e\x35\ -\x31\x37\x30\x33\x2c\x31\x34\x2e\x37\x31\x31\x38\x6c\x30\x2c\x30\ -\x63\x37\x2e\x37\x30\x35\x38\x34\x2c\x2d\x39\x2e\x39\x35\x30\x37\ -\x31\x20\x36\x2e\x35\x36\x30\x33\x39\x2c\x2d\x32\x33\x2e\x36\x39\ -\x30\x33\x36\x20\x2d\x32\x2e\x37\x30\x30\x35\x37\x2c\x2d\x33\x32\ -\x2e\x33\x39\x32\x63\x2d\x39\x2e\x32\x36\x30\x39\x36\x2c\x2d\x38\ -\x2e\x37\x30\x31\x37\x31\x20\x2d\x32\x33\x2e\x38\x38\x33\x35\x35\ -\x2c\x2d\x39\x2e\x37\x37\x38\x20\x2d\x33\x34\x2e\x34\x37\x33\x34\ -\x35\x2c\x2d\x32\x2e\x35\x33\x37\x33\x38\x6c\x33\x37\x2e\x31\x37\ -\x34\x30\x32\x2c\x33\x34\x2e\x39\x32\x39\x33\x38\x7a\x6d\x2d\x34\ -\x33\x2e\x30\x33\x33\x39\x33\x2c\x2d\x32\x39\x2e\x34\x32\x33\x33\ -\x63\x2d\x37\x2e\x37\x30\x35\x39\x2c\x39\x2e\x39\x35\x30\x36\x36\ -\x20\x2d\x36\x2e\x35\x36\x30\x34\x37\x2c\x32\x33\x2e\x36\x39\x30\ -\x33\x20\x32\x2e\x37\x30\x30\x34\x34\x2c\x33\x32\x2e\x33\x39\x31\ -\x38\x32\x63\x39\x2e\x32\x36\x30\x38\x38\x2c\x38\x2e\x37\x30\x31\ -\x37\x36\x20\x32\x33\x2e\x38\x38\x33\x34\x37\x2c\x39\x2e\x37\x37\ -\x38\x30\x35\x20\x33\x34\x2e\x34\x37\x33\x33\x37\x2c\x32\x2e\x35\ -\x33\x37\x35\x6c\x2d\x33\x37\x2e\x31\x37\x33\x38\x31\x2c\x2d\x33\ -\x34\x2e\x39\x32\x39\x33\x32\x6c\x30\x2c\x30\x7a\x22\x20\x69\x64\ -\x3d\x22\x73\x76\x67\x5f\x34\x22\x2f\x3e\x0a\x20\x3c\x2f\x67\x3e\ -\x0a\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x3e\x0d\x0a\x20\x3c\x67\x3e\ +\x0d\x0a\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x4c\x61\x79\x65\x72\ +\x20\x31\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0d\x0a\x20\x20\x3c\x70\ +\x61\x74\x68\x20\x64\x3d\x22\x6d\x33\x38\x2e\x31\x34\x34\x31\x2c\ +\x31\x35\x2e\x31\x36\x31\x36\x31\x63\x30\x2e\x36\x37\x31\x38\x2c\ +\x2d\x31\x2e\x36\x37\x32\x39\x20\x33\x2e\x30\x34\x2c\x2d\x31\x2e\ +\x36\x37\x32\x39\x20\x33\x2e\x37\x31\x31\x38\x2c\x30\x6c\x35\x2e\ +\x39\x35\x32\x32\x2c\x31\x34\x2e\x38\x32\x32\x32\x63\x30\x2e\x32\ +\x38\x36\x31\x2c\x30\x2e\x37\x31\x32\x34\x20\x30\x2e\x39\x35\x34\ +\x37\x2c\x31\x2e\x31\x39\x38\x31\x20\x31\x2e\x37\x32\x30\x37\x2c\ +\x31\x2e\x32\x35\x30\x31\x6c\x31\x35\x2e\x39\x33\x36\x2c\x31\x2e\ +\x30\x38\x30\x35\x63\x31\x2e\x37\x39\x38\x37\x2c\x30\x2e\x31\x32\ +\x32\x20\x32\x2e\x35\x33\x30\x35\x2c\x32\x2e\x33\x37\x34\x34\x20\ +\x31\x2e\x31\x34\x37\x2c\x33\x2e\x35\x33\x30\x32\x6c\x2d\x31\x32\ +\x2e\x32\x35\x37\x34\x2c\x31\x30\x2e\x32\x34\x31\x32\x63\x2d\x30\ +\x2e\x35\x38\x39\x31\x2c\x30\x2e\x34\x39\x32\x32\x20\x2d\x30\x2e\ +\x38\x34\x34\x35\x2c\x31\x2e\x32\x37\x38\x32\x20\x2d\x30\x2e\x36\ +\x35\x37\x32\x2c\x32\x2e\x30\x32\x32\x37\x6c\x33\x2e\x38\x39\x36\ +\x39\x2c\x31\x35\x2e\x34\x39\x63\x30\x2e\x34\x33\x39\x38\x2c\x31\ +\x2e\x37\x34\x38\x33\x20\x2d\x31\x2e\x34\x37\x36\x32\x2c\x33\x2e\ +\x31\x34\x30\x34\x20\x2d\x33\x2e\x30\x30\x33\x2c\x32\x2e\x31\x38\ +\x31\x38\x6c\x2d\x31\x33\x2e\x35\x32\x37\x37\x2c\x2d\x38\x2e\x34\ +\x39\x32\x38\x63\x2d\x30\x2e\x36\x35\x30\x32\x2c\x2d\x30\x2e\x34\ +\x30\x38\x32\x20\x2d\x31\x2e\x34\x37\x36\x36\x2c\x2d\x30\x2e\x34\ +\x30\x38\x32\x20\x2d\x32\x2e\x31\x32\x36\x38\x2c\x30\x6c\x2d\x31\ +\x33\x2e\x35\x32\x37\x37\x2c\x38\x2e\x34\x39\x32\x38\x63\x2d\x31\ +\x2e\x35\x32\x36\x38\x2c\x30\x2e\x39\x35\x38\x36\x20\x2d\x33\x2e\ +\x34\x34\x32\x38\x2c\x2d\x30\x2e\x34\x33\x33\x35\x20\x2d\x33\x2e\ +\x30\x30\x33\x2c\x2d\x32\x2e\x31\x38\x31\x38\x6c\x33\x2e\x38\x39\ +\x36\x39\x2c\x2d\x31\x35\x2e\x34\x39\x63\x30\x2e\x31\x38\x37\x33\ +\x2c\x2d\x30\x2e\x37\x34\x34\x35\x20\x2d\x30\x2e\x30\x36\x38\x31\ +\x2c\x2d\x31\x2e\x35\x33\x30\x35\x20\x2d\x30\x2e\x36\x35\x37\x32\ +\x2c\x2d\x32\x2e\x30\x32\x32\x37\x6c\x2d\x31\x32\x2e\x32\x35\x37\ +\x34\x2c\x2d\x31\x30\x2e\x32\x34\x31\x32\x63\x2d\x31\x2e\x33\x38\ +\x33\x35\x2c\x2d\x31\x2e\x31\x35\x35\x38\x20\x2d\x30\x2e\x36\x35\ +\x31\x37\x2c\x2d\x33\x2e\x34\x30\x38\x32\x20\x31\x2e\x31\x34\x37\ +\x2c\x2d\x33\x2e\x35\x33\x30\x32\x6c\x31\x35\x2e\x39\x33\x36\x2c\ +\x2d\x31\x2e\x30\x38\x30\x35\x63\x30\x2e\x37\x36\x36\x2c\x2d\x30\ +\x2e\x30\x35\x32\x20\x31\x2e\x34\x33\x34\x36\x2c\x2d\x30\x2e\x35\ +\x33\x37\x37\x20\x31\x2e\x37\x32\x30\x37\x2c\x2d\x31\x2e\x32\x35\ +\x30\x31\x6c\x35\x2e\x39\x35\x32\x32\x2c\x2d\x31\x34\x2e\x38\x32\ +\x32\x32\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x39\x39\ +\x34\x41\x22\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x31\x22\x2f\x3e\ +\x0d\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x6d\x33\x39\ +\x2e\x30\x35\x31\x35\x2c\x32\x36\x2e\x33\x31\x30\x38\x63\x30\x2e\ +\x33\x33\x35\x39\x2c\x2d\x30\x2e\x38\x33\x36\x34\x20\x31\x2e\x35\ +\x32\x30\x31\x2c\x2d\x30\x2e\x38\x33\x36\x34\x20\x31\x2e\x38\x35\ +\x36\x2c\x30\x6c\x32\x2e\x39\x37\x36\x2c\x37\x2e\x34\x31\x31\x31\ +\x63\x30\x2e\x31\x34\x33\x31\x2c\x30\x2e\x33\x35\x36\x32\x20\x30\ +\x2e\x34\x37\x37\x34\x2c\x30\x2e\x35\x39\x39\x31\x20\x30\x2e\x38\ +\x36\x30\x34\x2c\x30\x2e\x36\x32\x35\x31\x6c\x37\x2e\x39\x36\x38\ +\x2c\x30\x2e\x35\x34\x30\x33\x63\x30\x2e\x38\x39\x39\x33\x2c\x30\ +\x2e\x30\x36\x30\x39\x20\x31\x2e\x32\x36\x35\x32\x2c\x31\x2e\x31\ +\x38\x37\x31\x20\x30\x2e\x35\x37\x33\x35\x2c\x31\x2e\x37\x36\x35\ +\x31\x6c\x2d\x36\x2e\x31\x32\x38\x37\x2c\x35\x2e\x31\x32\x30\x35\ +\x63\x2d\x30\x2e\x32\x39\x34\x36\x2c\x30\x2e\x32\x34\x36\x32\x20\ +\x2d\x30\x2e\x34\x32\x32\x33\x2c\x30\x2e\x36\x33\x39\x32\x20\x2d\ +\x30\x2e\x33\x32\x38\x36\x2c\x31\x2e\x30\x31\x31\x34\x6c\x31\x2e\ +\x39\x34\x38\x34\x2c\x37\x2e\x37\x34\x35\x63\x30\x2e\x32\x31\x39\ +\x39\x2c\x30\x2e\x38\x37\x34\x32\x20\x2d\x30\x2e\x37\x33\x38\x31\ +\x2c\x31\x2e\x35\x37\x30\x32\x20\x2d\x31\x2e\x35\x30\x31\x35\x2c\ +\x31\x2e\x30\x39\x30\x39\x6c\x2d\x36\x2e\x37\x36\x33\x38\x2c\x2d\ +\x34\x2e\x32\x34\x36\x34\x63\x2d\x30\x2e\x33\x32\x35\x31\x2c\x2d\ +\x30\x2e\x32\x30\x34\x31\x20\x2d\x30\x2e\x37\x33\x38\x33\x2c\x2d\ +\x30\x2e\x32\x30\x34\x31\x20\x2d\x31\x2e\x30\x36\x33\x34\x2c\x30\ +\x6c\x2d\x36\x2e\x37\x36\x33\x38\x2c\x34\x2e\x32\x34\x36\x34\x63\ +\x2d\x30\x2e\x37\x36\x33\x35\x2c\x30\x2e\x34\x37\x39\x33\x20\x2d\ +\x31\x2e\x37\x32\x31\x34\x2c\x2d\x30\x2e\x32\x31\x36\x37\x20\x2d\ +\x31\x2e\x35\x30\x31\x35\x2c\x2d\x31\x2e\x30\x39\x30\x39\x6c\x31\ +\x2e\x39\x34\x38\x34\x2c\x2d\x37\x2e\x37\x34\x35\x63\x30\x2e\x30\ +\x39\x33\x36\x2c\x2d\x30\x2e\x33\x37\x32\x32\x20\x2d\x30\x2e\x30\ +\x33\x34\x31\x2c\x2d\x30\x2e\x37\x36\x35\x32\x20\x2d\x30\x2e\x33\ +\x32\x38\x36\x2c\x2d\x31\x2e\x30\x31\x31\x34\x6c\x2d\x36\x2e\x31\ +\x32\x38\x37\x2c\x2d\x35\x2e\x31\x32\x30\x35\x63\x2d\x30\x2e\x36\ +\x39\x31\x38\x2c\x2d\x30\x2e\x35\x37\x38\x20\x2d\x30\x2e\x33\x32\ +\x35\x38\x2c\x2d\x31\x2e\x37\x30\x34\x32\x20\x30\x2e\x35\x37\x33\ +\x35\x2c\x2d\x31\x2e\x37\x36\x35\x31\x6c\x37\x2e\x39\x36\x38\x2c\ +\x2d\x30\x2e\x35\x34\x30\x33\x63\x30\x2e\x33\x38\x33\x2c\x2d\x30\ +\x2e\x30\x32\x36\x20\x30\x2e\x37\x31\x37\x33\x2c\x2d\x30\x2e\x32\ +\x36\x38\x39\x20\x30\x2e\x38\x36\x30\x33\x2c\x2d\x30\x2e\x36\x32\ +\x35\x31\x6c\x32\x2e\x39\x37\x36\x31\x2c\x2d\x37\x2e\x34\x31\x31\ +\x31\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x43\x39\x34\ +\x43\x22\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x32\x22\x2f\x3e\x0d\ +\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\ +\x66\x66\x30\x30\x30\x30\x22\x20\x64\x3d\x22\x6d\x35\x2c\x33\x39\ +\x2e\x39\x39\x39\x39\x34\x6c\x30\x2c\x30\x63\x30\x2c\x2d\x31\x38\ +\x2e\x31\x36\x32\x36\x38\x20\x31\x35\x2e\x36\x37\x30\x30\x35\x2c\ +\x2d\x33\x32\x2e\x38\x38\x36\x35\x34\x20\x33\x34\x2e\x39\x39\x39\ +\x39\x37\x2c\x2d\x33\x32\x2e\x38\x38\x36\x35\x34\x6c\x30\x2c\x30\ +\x63\x39\x2e\x32\x38\x32\x37\x2c\x30\x20\x31\x38\x2e\x31\x38\x35\ +\x31\x37\x2c\x33\x2e\x34\x36\x34\x38\x33\x20\x32\x34\x2e\x37\x34\ +\x38\x37\x34\x2c\x39\x2e\x36\x33\x32\x32\x38\x63\x36\x2e\x35\x36\ +\x33\x38\x33\x2c\x36\x2e\x31\x36\x37\x34\x35\x20\x31\x30\x2e\x32\ +\x35\x31\x32\x39\x2c\x31\x34\x2e\x35\x33\x32\x33\x32\x20\x31\x30\ +\x2e\x32\x35\x31\x32\x39\x2c\x32\x33\x2e\x32\x35\x34\x32\x36\x6c\ +\x30\x2c\x30\x63\x30\x2c\x31\x38\x2e\x31\x36\x32\x39\x20\x2d\x31\ +\x35\x2e\x36\x36\x39\x39\x34\x2c\x33\x32\x2e\x38\x38\x36\x36\x36\ +\x20\x2d\x33\x35\x2e\x30\x30\x30\x30\x33\x2c\x33\x32\x2e\x38\x38\ +\x36\x36\x36\x6c\x30\x2c\x30\x63\x2d\x31\x39\x2e\x33\x32\x39\x39\ +\x32\x2c\x30\x20\x2d\x33\x34\x2e\x39\x39\x39\x39\x37\x2c\x2d\x31\ +\x34\x2e\x37\x32\x33\x37\x36\x20\x2d\x33\x34\x2e\x39\x39\x39\x39\ +\x37\x2c\x2d\x33\x32\x2e\x38\x38\x36\x36\x36\x6c\x30\x2c\x30\x7a\ +\x6d\x35\x36\x2e\x35\x31\x37\x30\x33\x2c\x31\x34\x2e\x37\x31\x31\ +\x38\x6c\x30\x2c\x30\x63\x37\x2e\x37\x30\x35\x38\x34\x2c\x2d\x39\ +\x2e\x39\x35\x30\x37\x31\x20\x36\x2e\x35\x36\x30\x33\x39\x2c\x2d\ +\x32\x33\x2e\x36\x39\x30\x33\x36\x20\x2d\x32\x2e\x37\x30\x30\x35\ +\x37\x2c\x2d\x33\x32\x2e\x33\x39\x32\x63\x2d\x39\x2e\x32\x36\x30\ +\x39\x36\x2c\x2d\x38\x2e\x37\x30\x31\x37\x31\x20\x2d\x32\x33\x2e\ +\x38\x38\x33\x35\x35\x2c\x2d\x39\x2e\x37\x37\x38\x20\x2d\x33\x34\ +\x2e\x34\x37\x33\x34\x35\x2c\x2d\x32\x2e\x35\x33\x37\x33\x38\x6c\ +\x33\x37\x2e\x31\x37\x34\x30\x32\x2c\x33\x34\x2e\x39\x32\x39\x33\ +\x38\x7a\x6d\x2d\x34\x33\x2e\x30\x33\x33\x39\x33\x2c\x2d\x32\x39\ +\x2e\x34\x32\x33\x33\x63\x2d\x37\x2e\x37\x30\x35\x39\x2c\x39\x2e\ +\x39\x35\x30\x36\x36\x20\x2d\x36\x2e\x35\x36\x30\x34\x37\x2c\x32\ +\x33\x2e\x36\x39\x30\x33\x20\x32\x2e\x37\x30\x30\x34\x34\x2c\x33\ +\x32\x2e\x33\x39\x31\x38\x32\x63\x39\x2e\x32\x36\x30\x38\x38\x2c\ +\x38\x2e\x37\x30\x31\x37\x36\x20\x32\x33\x2e\x38\x38\x33\x34\x37\ +\x2c\x39\x2e\x37\x37\x38\x30\x35\x20\x33\x34\x2e\x34\x37\x33\x33\ +\x37\x2c\x32\x2e\x35\x33\x37\x35\x6c\x2d\x33\x37\x2e\x31\x37\x33\ +\x38\x31\x2c\x2d\x33\x34\x2e\x39\x32\x39\x33\x32\x6c\x30\x2c\x30\ +\x7a\x22\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x34\x22\x2f\x3e\x0d\ +\x0a\x20\x3c\x2f\x67\x3e\x0d\x0a\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\ +\ +\x00\x00\x02\x54\ +\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\x73\x76\x67\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\x69\x64\x3d\x22\x73\x76\x67\x38\x22\x0a\x20\x20\ +\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x20\ +\x20\x20\x63\x6c\x61\x73\x73\x3d\x22\x66\x65\x61\x74\x68\x65\x72\ +\x20\x66\x65\x61\x74\x68\x65\x72\x2d\x61\x6c\x65\x72\x74\x2d\x6f\ +\x63\x74\x61\x67\x6f\x6e\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\ +\x64\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\ +\x65\x63\x61\x70\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\ +\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\ +\x65\x6e\x74\x43\x6f\x6c\x6f\x72\x22\x0a\x20\x20\x20\x66\x69\x6c\ +\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x76\x69\x65\x77\ +\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0a\ +\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x0a\x20\ +\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x3e\x0a\x20\x20\ +\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x0a\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x38\x37\x37\x32\ +\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x6f\x6c\x79\ +\x67\x6f\x6e\x32\x22\x0a\x20\x20\x20\x20\x20\x70\x6f\x69\x6e\x74\ +\x73\x3d\x22\x37\x2e\x38\x36\x20\x32\x20\x31\x36\x2e\x31\x34\x20\ +\x32\x20\x32\x32\x20\x37\x2e\x38\x36\x20\x32\x32\x20\x31\x36\x2e\ +\x31\x34\x20\x31\x36\x2e\x31\x34\x20\x32\x32\x20\x37\x2e\x38\x36\ +\x20\x32\x32\x20\x32\x20\x31\x36\x2e\x31\x34\x20\x32\x20\x37\x2e\ +\x38\x36\x20\x37\x2e\x38\x36\x20\x32\x22\x20\x2f\x3e\x0a\x20\x20\ +\x3c\x6c\x69\x6e\x65\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x34\x22\ +\x20\x79\x32\x3d\x22\x31\x32\x22\x20\x78\x32\x3d\x22\x31\x32\x22\ +\x20\x79\x31\x3d\x22\x38\x22\x20\x78\x31\x3d\x22\x31\x32\x22\x20\ +\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x20\x69\x64\x3d\x22\x6c\ +\x69\x6e\x65\x36\x22\x20\x79\x32\x3d\x22\x31\x36\x22\x20\x78\x32\ +\x3d\x22\x31\x32\x2e\x30\x31\x22\x20\x79\x31\x3d\x22\x31\x36\x22\ +\x20\x78\x31\x3d\x22\x31\x32\x22\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\ +\x67\x3e\x0a\ \x00\x00\x01\x6c\ \x3c\ \x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\ @@ -240,127 +281,127 @@ \x3d\x22\x38\x20\x36\x20\x32\x20\x31\x32\x20\x38\x20\x31\x38\x22\ \x3e\x3c\x2f\x70\x6f\x6c\x79\x6c\x69\x6e\x65\x3e\x3c\x2f\x73\x76\ \x67\x3e\ -\x00\x00\x03\xa8\ +\x00\x00\x03\xae\ \x00\ -\x00\x0c\x99\x78\x9c\xdd\x56\x4b\x6f\xe3\x36\x10\xbe\xe7\x57\x08\ -\xca\xa5\x45\x23\x8a\xd4\xcb\xa2\x62\x79\x81\x36\x58\xb4\x87\x5e\ -\xba\xbb\xe8\x99\x21\x69\x5b\x1b\x89\x34\x28\x3a\xb6\xf7\xd7\xef\ -\x50\x0f\x5b\x76\x9c\xf4\x71\x28\xd0\x08\x36\xec\x79\x71\x66\xbe\ -\xf9\x38\xf6\xfc\xc3\xbe\xa9\xbd\x67\x69\xda\x4a\xab\xd2\x27\x08\ -\xfb\x9e\x54\x5c\x8b\x4a\xad\x4a\xff\xcb\xe7\x8f\x41\xee\x7b\xad\ -\x65\x4a\xb0\x5a\x2b\x59\xfa\x4a\xfb\x1f\x16\x37\xf3\xf6\x79\x75\ -\xe3\x79\x1e\x04\xab\xb6\x10\xbc\xf4\xd7\xd6\x6e\x8a\x30\xdc\x6c\ -\x4d\x8d\xb4\x59\x85\x82\x87\xb2\x96\x8d\x54\xb6\x0d\x09\x22\xa1\ -\x7f\x72\xe7\x27\x77\x6e\x24\xb3\xd5\xb3\xe4\xba\x69\xb4\x6a\xbb\ -\x48\xd5\xde\x4e\x9c\x8d\x58\x1e\xbd\x77\xbb\x1d\xda\xc5\x9d\x13\ -\xa1\x94\x86\x38\x0a\xa3\x28\x00\x8f\xa0\x3d\x28\xcb\xf6\xc1\x79\ -\x28\xd4\x78\x2d\x34\xc2\x18\x87\x60\x3b\x79\xfe\x3d\xaf\xa2\x05\ -\x54\x36\xf0\x3e\xba\x8f\x0a\xd4\xea\xad\xe1\x72\x09\x71\x12\x29\ -\x69\xc3\x87\xcf\x0f\x47\x63\x80\x91\xb0\x62\x72\x4c\xa5\x9e\x5a\ -\xce\x36\xf2\x2c\xeb\xa8\xec\x11\x60\x8d\x6c\x37\x8c\xcb\x36\x1c\ -\xf5\x5d\xfc\x28\x14\xd3\x79\x19\x4e\xbc\x1f\x30\xa5\x19\x16\xd9\ -\x12\xa7\x77\x5e\x84\x23\x1c\xe0\x24\xc0\xf4\xc7\x2e\x6a\x2c\xa4\ -\x10\x9a\xbb\x93\x4b\x5f\xee\x37\x30\x50\x34\x76\x57\x89\xd2\x87\ -\xef\x59\x27\x4c\x8e\x26\x9d\x82\xd7\xac\x05\x84\x96\x30\xa8\xb5\ -\x34\xde\xf0\x19\x00\x45\xfa\xa2\x5a\x6b\xf4\x93\x0c\xea\x4a\xc9\ -\xaf\xba\x82\x40\xa3\xb7\x4a\x5c\x9a\xa0\xec\x2b\x96\x5d\x25\xec\ -\xba\xf4\xa3\x89\xae\xf4\xf9\xd6\x18\xa0\xcd\x2f\xba\xd6\xa6\x33\ -\x2c\xab\xba\x76\xc4\x53\x7d\xc2\xe7\x4a\xee\x7e\xd6\xfb\xd2\xc7\ -\x1e\xf6\xa2\x04\x5e\x9d\x7a\x2d\xab\xd5\xda\xc2\x61\xbd\x38\x1e\ -\x9d\xf8\x0b\x10\xe7\x8d\xb4\x4c\x30\xcb\x9c\xa9\xef\x78\xd4\x90\ -\xa8\xf3\x00\x1f\x20\x52\xf1\xc7\xc3\xc7\x5e\x02\x99\xf3\xe2\x4f\ -\x6d\x9e\x06\x11\x1e\xe7\xc0\x1e\xf5\x16\xb2\xf8\x8b\xa3\x7a\x2e\ -\x78\x01\xa3\x6f\x98\x5d\x54\x0d\x5b\x49\xc7\x9a\x9f\x60\xd4\xf3\ -\xf0\x64\x38\x73\xb6\x87\x8d\x3c\x1d\xda\x1f\x6b\x64\xcf\xa1\xab\ -\x17\x49\xf0\xa6\x72\x41\xe1\x27\x0b\x50\xfc\xe6\x92\xf8\x5e\x78\ -\x71\x68\x65\x6b\xb9\xe8\x72\xf6\x5f\xc7\x2e\xc2\xa1\x8d\xa1\xc9\ -\x70\xd2\xe5\x3c\x1c\x41\xe8\x24\x21\x97\xed\x09\x1f\x27\x11\x3c\ -\xe4\x99\x1f\x49\xe4\x18\x24\xdc\x08\x06\xcf\x91\x92\xc3\xd4\x82\ -\x9a\x1d\xa4\x99\xf0\x69\xe2\xb2\xab\x94\xd0\xbb\xa0\x61\xfb\xaa\ -\xa9\xbe\x49\xc8\x81\x5f\x71\x39\x00\xfd\xf2\xf4\x15\x23\x4c\x9e\ -\xc4\xf9\xec\xd2\xca\x5d\x50\x84\x32\x1c\xc7\xf1\x8b\xd4\x7c\xdf\ -\x19\x93\x59\x7c\x25\xf2\x9b\xd6\x0d\x30\x85\xa2\x8c\xe6\xc9\x31\ -\x6d\xbb\xd6\xbb\x95\x71\x48\x2c\x59\xdd\x4a\xff\x84\xcc\x11\x82\ -\xfc\x95\x0a\x47\x2a\x12\x12\xbd\xe6\x32\xd0\x93\xd0\x59\x72\xe9\ -\xb1\x81\xf1\xb6\x6b\x06\x5e\xe3\xcd\xb8\x30\x6a\x58\x0d\xc0\x87\ -\x13\x7c\xab\x6d\x25\xa4\xd5\xb5\x34\x4c\x39\x0a\x91\xa3\x01\xea\ -\xbf\xa6\xd7\x8f\x5f\x25\xb7\xd7\x2c\x8f\xda\x08\x69\x8e\x19\xc8\ -\x99\x9a\xbb\x2b\x59\xfa\xb7\x59\xf7\x0c\x26\x57\xd1\x68\x58\x76\ -\xcf\xc8\x99\x0d\x6c\x8a\x01\x4b\x7b\xa8\x21\x8b\xbb\xc8\x85\xbb\ -\xc7\xf7\xfd\x5d\x2f\x6e\x71\xf7\xdc\x4f\xd7\x41\x11\xdd\x9f\xef\ -\x8d\xa2\x5b\x1b\xf7\x17\x7b\xa6\x80\x2b\x21\xcd\xa8\xed\x84\x1a\ -\x68\x65\x8b\x64\xd4\x09\x06\x28\x1a\xc3\x0e\xd3\x94\xc1\xd0\x5a\ -\x31\x76\x06\xf3\xfc\xdd\x4b\x50\x84\x73\x9a\xe5\xf4\x2e\x42\x69\ -\x4a\x71\x1a\x13\xef\x57\x2f\x22\x28\x4d\x28\x8d\xc8\x64\xf6\xae\ -\xa7\x3c\x7d\x49\x3e\xad\xa0\x56\xab\x61\x2f\x6e\xcd\x33\xb3\x5b\ -\x23\xdd\x78\xfe\xcf\x40\x10\x44\x31\xc5\x79\xf6\x26\x10\xf4\xfd\ -\x03\x41\x30\x8a\x28\xc5\xd9\xec\x2d\x20\x72\xf2\x5e\x81\x98\xa1\ -\x2c\x89\x93\x7c\x96\xdd\x65\x28\x89\x00\x87\x37\x61\x78\xb1\xb3\ -\xdf\x1f\x0c\x24\x41\x24\xa3\x78\x16\xbf\x09\xc4\xbf\xde\x10\x7f\ -\x15\x70\x79\x03\xd3\x53\x95\x8d\x07\x3f\x71\x18\xb8\x98\x02\x6b\ -\x73\x84\x63\xa8\x92\x7a\x6b\x8f\xa2\x24\x23\xb3\x6c\xfc\x2d\xf9\ -\x47\x50\xc3\x16\x48\xd3\x28\xff\x8f\x00\x77\x68\xcc\xdd\xff\xa7\ -\xc5\xcd\x77\xd2\xf3\xe7\xb2\ -\x00\x00\x03\x9b\ +\x00\x0c\xf0\x78\x9c\xe5\x56\x4d\x8f\xdb\x36\x10\xbd\x07\xc8\x7f\ +\x10\xb4\x97\x16\x5d\x51\xa4\xbe\x2c\x6a\x2d\x07\x68\x17\x41\x7b\ +\xe8\xa5\x4d\xd1\x33\x97\xa4\x6d\x65\x25\xd1\xa0\xe8\xaf\xfc\xfa\ +\x0e\x25\x53\xd6\xae\xbd\xdb\x16\x01\x02\x24\x11\x6c\xd8\x33\xf3\ +\x86\xc3\x79\x7c\x1c\x7b\xfe\xee\xd0\xd4\xde\x4e\xea\xae\x52\x6d\ +\xe9\x13\x84\x7d\x4f\xb6\x5c\x89\xaa\x5d\x95\xfe\x5f\x1f\xde\x07\ +\xb9\xef\x75\x86\xb5\x82\xd5\xaa\x95\xa5\xdf\x2a\xff\xdd\xe2\xed\ +\x9b\x79\xb7\x5b\xbd\x7d\xe3\x79\x1e\xa4\xb7\x5d\x21\x78\xe9\xaf\ +\x8d\xd9\x14\x61\xb8\xd9\xea\x1a\x29\xbd\x0a\x05\x0f\x65\x2d\x1b\ +\xd9\x9a\x2e\x24\x88\x84\xfe\x04\xcf\xcf\x78\xae\x25\x33\xd5\x4e\ +\x72\xd5\x34\xaa\xed\xfa\xd4\xb6\xbb\x99\xa2\xb5\x58\x8e\xf0\xfd\ +\x7e\x8f\xf6\x71\x8f\x22\x94\xd2\x10\x47\x61\x14\x05\x80\x08\xba\ +\x63\x6b\xd8\x21\x78\x96\x0b\xfb\xbc\x96\x1b\x61\x8c\x43\x88\x4d\ +\xa0\xff\x11\x56\x74\x40\xce\x06\xde\x23\xde\x39\x50\xa7\xb6\x9a\ +\xcb\x25\x24\x4a\xd4\x4a\x13\xde\x7f\xb8\x1f\x83\x01\x46\xc2\x88\ +\xe9\x3a\x55\xfb\xd8\x71\xb6\x91\x4f\xea\x3a\xe7\x40\x03\x6b\x64\ +\xb7\x61\x5c\x76\xa1\xf3\x0f\x0b\x38\xab\x98\x1e\x9c\xe6\xc4\xfb\ +\x01\x53\x9a\x61\x91\x2d\x71\x7a\xeb\x45\x38\xc2\x01\x4e\x02\x4c\ +\x7f\x1c\xd2\xdc\x5e\x0a\xa1\xb8\x5d\xbb\xf4\xe5\x61\x03\x47\x8b\ +\xc6\x0e\x2b\x51\xfa\x60\x64\x83\x35\x59\x9d\x0c\x1e\x5e\xb3\x0e\ +\x88\x5a\xc2\x91\xad\xa5\xf6\x4e\x9f\x01\xe8\xe5\xb4\xb3\xce\x68\ +\xf5\x28\x83\xba\x6a\xe5\x47\x55\x41\xaa\x56\xdb\x56\x5c\xc4\x60\ +\xf3\xd7\x42\xfb\x4a\x98\x75\xe9\x47\x53\x67\xe9\xf3\xad\xd6\xa0\ +\xa2\x5f\x54\xad\xf4\x10\x59\x56\x75\x6d\xa5\xd8\x9e\xaa\xee\x2a\ +\xb9\xff\x59\x1d\x4a\x1f\x7b\xd8\x8b\x12\x78\x0d\xfe\xb5\xac\x56\ +\x6b\x03\x0b\x9e\x6c\xb7\x7e\xe2\x2f\xac\x3d\x6f\xa4\x61\x82\x19\ +\xd6\x07\x87\xee\x9d\x8b\x44\x03\x06\x50\x20\xae\xe2\x8f\xfb\xf7\ +\x27\x13\x1c\x9c\x17\x7f\x2b\xfd\xe8\x6c\x78\x2c\x84\x3d\xa8\x2d\ +\xd4\xf2\x17\x67\xff\x5c\xf0\x02\xe4\xd0\x30\xb3\xa8\x1a\xb6\x92\ +\x56\x4a\x3f\xc1\xe9\xcf\xc3\x73\xe0\x29\xda\x1c\x37\x72\xb2\xee\ +\xb0\xb2\x96\x83\xb2\xae\xde\x31\xc1\x9b\xca\x66\x85\x7f\x1a\x60\ +\xe5\x37\x5b\xc6\xf7\xc2\xe7\xcb\x56\xa6\x96\x8b\xbe\xec\xf0\x75\ +\xec\x25\x3c\x35\xe3\x9a\x0d\xa7\xdd\xce\x43\x47\xc7\x60\x0a\xb9\ +\xec\x26\x5c\x59\x93\x60\x57\x6d\x3e\xca\xcb\x6a\x4b\xd8\x33\x71\ +\x58\x27\xd7\xd3\x49\x06\x35\x3b\x4a\x3d\x55\xda\x04\xb3\xaf\x5a\ +\xa1\xf6\x41\xc3\x0e\x55\x53\x7d\x92\x50\x06\xbf\x84\x39\x82\x32\ +\xf3\xf4\xa5\x28\xc8\x81\xc4\xf9\xec\x22\xcc\x6d\x5a\x84\x32\x1c\ +\xc7\xf1\x65\x79\x7e\xe8\xa3\xc9\x2c\xbe\x96\xfb\x49\xa9\x06\xf4\ +\x43\x51\x46\xf3\xe4\x5c\xba\x5b\xab\xfd\x4a\x5b\x4a\x96\xac\xee\ +\xa4\x3f\xe1\x68\xe4\x22\x7f\x69\x9f\x4e\xa4\x84\x44\x2f\x62\x4e\ +\xc2\x25\x74\x96\x5c\x40\x36\x70\xe2\xdd\x9a\x01\x6c\xbc\x39\xcf\ +\xa2\x0a\x66\x08\x68\x64\xc2\xe4\x6a\x5b\x09\x69\x54\x2d\x35\x6b\ +\xad\xae\xc8\x39\x02\x6d\x5c\x0d\xa8\x87\x8f\x92\x9b\xab\xa1\x07\ +\xa5\x85\xd4\x63\x15\xf2\xd4\xcf\xed\xbd\x2d\xfd\x9b\xac\x7f\x5c\ +\xcc\xee\xcb\x45\x96\xfd\x33\xea\x68\x03\x43\xc5\x11\x6b\x8e\x35\ +\x94\xb2\xf7\xbd\xb0\xd7\xfd\x6e\x98\x09\xc5\x0d\xee\x9f\xbb\xe9\ +\xdc\x28\xa2\xbb\xa7\x13\xa6\xe8\x07\xcc\xdd\xb3\x91\x54\xc0\x75\ +\x91\xda\x79\x7b\xa3\x06\xa5\x99\x22\x71\x3e\xc1\x80\x4e\xad\xd9\ +\x71\x5a\x32\x38\xb5\x57\x8c\xdd\xc1\xe1\xfe\xee\x25\x28\xc2\x39\ +\xcd\x72\x7a\x1b\xa1\x34\xa5\x38\x8d\x89\xf7\xab\x17\x11\x94\x26\ +\x94\x46\x64\xaa\x04\xdb\x56\x9e\x5e\xd1\xa3\x6a\x61\xbb\x46\xc1\ +\x18\xdd\xea\x1d\x33\x5b\x2d\xed\x49\x7d\xe5\x6c\x10\x44\x31\xc5\ +\x79\xf6\x3a\x1b\xf4\xfb\x60\x83\x60\x14\x51\x8a\xb3\xd9\xab\x6c\ +\xe4\xe4\x5b\x66\x63\x86\xb2\x24\x4e\xf2\x59\x76\x9b\xa1\x24\x02\ +\x32\x5e\xe7\xe2\x72\xac\x7f\x93\x5c\x90\x04\x91\x8c\xe2\x59\xfc\ +\x3a\x1b\x9f\x33\x35\xfe\x2d\xe5\xe2\x52\xa6\x93\xbd\x36\x1e\xfc\ +\x18\x62\x90\x66\x0a\x2a\xce\x11\x8e\x61\xaf\xd4\x5b\x7b\x14\x25\ +\x19\x99\x65\xe3\xef\xcd\xff\xa2\x1c\x66\x43\x9a\x46\xf9\x17\x22\ +\xbe\xa7\x64\x6e\xff\x7a\xc1\xe7\x3f\xa8\xb2\xec\x1d\ +\x00\x00\x03\x9d\ \x3c\ \x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\x22\x38\x30\x22\x20\x68\ \x65\x69\x67\x68\x74\x3d\x22\x38\x30\x22\x20\x76\x69\x65\x77\x42\ \x6f\x78\x3d\x22\x30\x20\x30\x20\x38\x30\x20\x38\x30\x22\x20\x66\ \x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\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\x3e\x0a\x20\ -\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\ -\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x63\x6c\x69\x70\x2d\ -\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x64\ -\x3d\x22\x4d\x33\x33\x2e\x39\x32\x35\x36\x20\x39\x2e\x38\x38\x36\ -\x34\x37\x43\x33\x33\x2e\x31\x36\x34\x38\x20\x39\x2e\x38\x38\x36\ -\x34\x37\x20\x33\x32\x2e\x34\x34\x35\x34\x20\x31\x30\x2e\x32\x33\ -\x32\x39\x20\x33\x31\x2e\x39\x37\x31\x31\x20\x31\x30\x2e\x38\x32\ -\x37\x37\x4c\x32\x36\x2e\x36\x35\x30\x31\x20\x31\x37\x2e\x35\x48\ -\x31\x35\x43\x31\x33\x2e\x36\x31\x39\x33\x20\x31\x37\x2e\x35\x20\ -\x31\x32\x2e\x35\x20\x31\x38\x2e\x36\x31\x39\x33\x20\x31\x32\x2e\ -\x35\x20\x32\x30\x43\x31\x32\x2e\x35\x20\x32\x31\x2e\x33\x38\x30\ -\x37\x20\x31\x33\x2e\x36\x31\x39\x33\x20\x32\x32\x2e\x35\x20\x31\ -\x35\x20\x32\x32\x2e\x35\x48\x31\x36\x2e\x35\x56\x36\x34\x43\x31\ -\x36\x2e\x35\x20\x36\x37\x2e\x35\x38\x39\x39\x20\x31\x39\x2e\x34\ -\x31\x30\x31\x20\x37\x30\x2e\x35\x20\x32\x33\x20\x37\x30\x2e\x35\ -\x48\x35\x37\x43\x36\x30\x2e\x35\x38\x39\x38\x20\x37\x30\x2e\x35\ -\x20\x36\x33\x2e\x35\x20\x36\x37\x2e\x35\x38\x39\x39\x20\x36\x33\ -\x2e\x35\x20\x36\x34\x56\x32\x32\x2e\x35\x48\x36\x35\x43\x36\x36\ -\x2e\x33\x38\x30\x37\x20\x32\x32\x2e\x35\x20\x36\x37\x2e\x35\x20\ -\x32\x31\x2e\x33\x38\x30\x37\x20\x36\x37\x2e\x35\x20\x32\x30\x43\ -\x36\x37\x2e\x35\x20\x31\x38\x2e\x36\x31\x39\x33\x20\x36\x36\x2e\ -\x33\x38\x30\x37\x20\x31\x37\x2e\x35\x20\x36\x35\x20\x31\x37\x2e\ -\x35\x48\x35\x33\x2e\x33\x34\x39\x39\x4c\x34\x38\x2e\x30\x32\x39\ -\x20\x31\x30\x2e\x38\x32\x37\x38\x43\x34\x37\x2e\x35\x35\x34\x36\ -\x20\x31\x30\x2e\x32\x33\x32\x39\x20\x34\x36\x2e\x38\x33\x35\x32\ -\x20\x39\x2e\x38\x38\x36\x34\x37\x20\x34\x36\x2e\x30\x37\x34\x34\ -\x20\x39\x2e\x38\x38\x36\x34\x37\x48\x33\x33\x2e\x39\x32\x35\x36\ -\x5a\x4d\x33\x33\x20\x32\x37\x2e\x35\x43\x33\x34\x2e\x33\x38\x30\ -\x37\x20\x32\x37\x2e\x35\x20\x33\x35\x2e\x35\x20\x32\x38\x2e\x36\ -\x31\x39\x33\x20\x33\x35\x2e\x35\x20\x33\x30\x56\x35\x38\x43\x33\ -\x35\x2e\x35\x20\x35\x39\x2e\x33\x38\x30\x37\x20\x33\x34\x2e\x33\ -\x38\x30\x37\x20\x36\x30\x2e\x35\x20\x33\x33\x20\x36\x30\x2e\x35\ -\x43\x33\x31\x2e\x36\x31\x39\x33\x20\x36\x30\x2e\x35\x20\x33\x30\ -\x2e\x35\x20\x35\x39\x2e\x33\x38\x30\x37\x20\x33\x30\x2e\x35\x20\ -\x35\x38\x56\x33\x30\x43\x33\x30\x2e\x35\x20\x32\x38\x2e\x36\x31\ -\x39\x33\x20\x33\x31\x2e\x36\x31\x39\x33\x20\x32\x37\x2e\x35\x20\ -\x33\x33\x20\x32\x37\x2e\x35\x5a\x4d\x34\x39\x2e\x35\x20\x33\x30\ -\x43\x34\x39\x2e\x35\x20\x32\x38\x2e\x36\x31\x39\x33\x20\x34\x38\ -\x2e\x33\x38\x30\x37\x20\x32\x37\x2e\x35\x20\x34\x37\x20\x32\x37\ -\x2e\x35\x43\x34\x35\x2e\x36\x31\x39\x33\x20\x32\x37\x2e\x35\x20\ -\x34\x34\x2e\x35\x20\x32\x38\x2e\x36\x31\x39\x33\x20\x34\x34\x2e\ -\x35\x20\x33\x30\x56\x35\x38\x43\x34\x34\x2e\x35\x20\x35\x39\x2e\ -\x33\x38\x30\x37\x20\x34\x35\x2e\x36\x31\x39\x33\x20\x36\x30\x2e\ -\x35\x20\x34\x37\x20\x36\x30\x2e\x35\x43\x34\x38\x2e\x33\x38\x30\ -\x37\x20\x36\x30\x2e\x35\x20\x34\x39\x2e\x35\x20\x35\x39\x2e\x33\ -\x38\x30\x37\x20\x34\x39\x2e\x35\x20\x35\x38\x56\x33\x30\x5a\x4d\ -\x34\x36\x2e\x39\x35\x33\x36\x20\x31\x37\x2e\x34\x39\x38\x36\x4c\ -\x34\x34\x2e\x38\x37\x30\x34\x20\x31\x34\x2e\x38\x38\x36\x35\x48\ -\x33\x35\x2e\x31\x32\x39\x36\x4c\x33\x33\x2e\x30\x34\x36\x34\x20\ -\x31\x37\x2e\x34\x39\x38\x36\x48\x34\x36\x2e\x39\x35\x33\x36\x5a\ -\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x43\x32\x43\x43\x44\x45\x22\ -\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x0d\x0a\ +\x20\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\ +\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x63\x6c\x69\x70\ +\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\ +\x64\x3d\x22\x4d\x33\x33\x2e\x39\x32\x35\x36\x20\x39\x2e\x38\x38\ +\x36\x34\x37\x43\x33\x33\x2e\x31\x36\x34\x38\x20\x39\x2e\x38\x38\ +\x36\x34\x37\x20\x33\x32\x2e\x34\x34\x35\x34\x20\x31\x30\x2e\x32\ +\x33\x32\x39\x20\x33\x31\x2e\x39\x37\x31\x31\x20\x31\x30\x2e\x38\ +\x32\x37\x37\x4c\x32\x36\x2e\x36\x35\x30\x31\x20\x31\x37\x2e\x35\ +\x48\x31\x35\x43\x31\x33\x2e\x36\x31\x39\x33\x20\x31\x37\x2e\x35\ +\x20\x31\x32\x2e\x35\x20\x31\x38\x2e\x36\x31\x39\x33\x20\x31\x32\ +\x2e\x35\x20\x32\x30\x43\x31\x32\x2e\x35\x20\x32\x31\x2e\x33\x38\ +\x30\x37\x20\x31\x33\x2e\x36\x31\x39\x33\x20\x32\x32\x2e\x35\x20\ +\x31\x35\x20\x32\x32\x2e\x35\x48\x31\x36\x2e\x35\x56\x36\x34\x43\ +\x31\x36\x2e\x35\x20\x36\x37\x2e\x35\x38\x39\x39\x20\x31\x39\x2e\ +\x34\x31\x30\x31\x20\x37\x30\x2e\x35\x20\x32\x33\x20\x37\x30\x2e\ +\x35\x48\x35\x37\x43\x36\x30\x2e\x35\x38\x39\x38\x20\x37\x30\x2e\ +\x35\x20\x36\x33\x2e\x35\x20\x36\x37\x2e\x35\x38\x39\x39\x20\x36\ +\x33\x2e\x35\x20\x36\x34\x56\x32\x32\x2e\x35\x48\x36\x35\x43\x36\ +\x36\x2e\x33\x38\x30\x37\x20\x32\x32\x2e\x35\x20\x36\x37\x2e\x35\ +\x20\x32\x31\x2e\x33\x38\x30\x37\x20\x36\x37\x2e\x35\x20\x32\x30\ +\x43\x36\x37\x2e\x35\x20\x31\x38\x2e\x36\x31\x39\x33\x20\x36\x36\ +\x2e\x33\x38\x30\x37\x20\x31\x37\x2e\x35\x20\x36\x35\x20\x31\x37\ +\x2e\x35\x48\x35\x33\x2e\x33\x34\x39\x39\x4c\x34\x38\x2e\x30\x32\ +\x39\x20\x31\x30\x2e\x38\x32\x37\x38\x43\x34\x37\x2e\x35\x35\x34\ +\x36\x20\x31\x30\x2e\x32\x33\x32\x39\x20\x34\x36\x2e\x38\x33\x35\ +\x32\x20\x39\x2e\x38\x38\x36\x34\x37\x20\x34\x36\x2e\x30\x37\x34\ +\x34\x20\x39\x2e\x38\x38\x36\x34\x37\x48\x33\x33\x2e\x39\x32\x35\ +\x36\x5a\x4d\x33\x33\x20\x32\x37\x2e\x35\x43\x33\x34\x2e\x33\x38\ +\x30\x37\x20\x32\x37\x2e\x35\x20\x33\x35\x2e\x35\x20\x32\x38\x2e\ +\x36\x31\x39\x33\x20\x33\x35\x2e\x35\x20\x33\x30\x56\x35\x38\x43\ +\x33\x35\x2e\x35\x20\x35\x39\x2e\x33\x38\x30\x37\x20\x33\x34\x2e\ +\x33\x38\x30\x37\x20\x36\x30\x2e\x35\x20\x33\x33\x20\x36\x30\x2e\ +\x35\x43\x33\x31\x2e\x36\x31\x39\x33\x20\x36\x30\x2e\x35\x20\x33\ +\x30\x2e\x35\x20\x35\x39\x2e\x33\x38\x30\x37\x20\x33\x30\x2e\x35\ +\x20\x35\x38\x56\x33\x30\x43\x33\x30\x2e\x35\x20\x32\x38\x2e\x36\ +\x31\x39\x33\x20\x33\x31\x2e\x36\x31\x39\x33\x20\x32\x37\x2e\x35\ +\x20\x33\x33\x20\x32\x37\x2e\x35\x5a\x4d\x34\x39\x2e\x35\x20\x33\ +\x30\x43\x34\x39\x2e\x35\x20\x32\x38\x2e\x36\x31\x39\x33\x20\x34\ +\x38\x2e\x33\x38\x30\x37\x20\x32\x37\x2e\x35\x20\x34\x37\x20\x32\ +\x37\x2e\x35\x43\x34\x35\x2e\x36\x31\x39\x33\x20\x32\x37\x2e\x35\ +\x20\x34\x34\x2e\x35\x20\x32\x38\x2e\x36\x31\x39\x33\x20\x34\x34\ +\x2e\x35\x20\x33\x30\x56\x35\x38\x43\x34\x34\x2e\x35\x20\x35\x39\ +\x2e\x33\x38\x30\x37\x20\x34\x35\x2e\x36\x31\x39\x33\x20\x36\x30\ +\x2e\x35\x20\x34\x37\x20\x36\x30\x2e\x35\x43\x34\x38\x2e\x33\x38\ +\x30\x37\x20\x36\x30\x2e\x35\x20\x34\x39\x2e\x35\x20\x35\x39\x2e\ +\x33\x38\x30\x37\x20\x34\x39\x2e\x35\x20\x35\x38\x56\x33\x30\x5a\ +\x4d\x34\x36\x2e\x39\x35\x33\x36\x20\x31\x37\x2e\x34\x39\x38\x36\ +\x4c\x34\x34\x2e\x38\x37\x30\x34\x20\x31\x34\x2e\x38\x38\x36\x35\ +\x48\x33\x35\x2e\x31\x32\x39\x36\x4c\x33\x33\x2e\x30\x34\x36\x34\ +\x20\x31\x37\x2e\x34\x39\x38\x36\x48\x34\x36\x2e\x39\x35\x33\x36\ +\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x43\x32\x43\x43\x44\x45\ +\x22\x20\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\ \x00\x00\x01\x88\ \x3c\ \x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\ @@ -413,101 +454,101 @@ \x6e\x65\x20\x78\x31\x3d\x22\x31\x35\x22\x20\x79\x31\x3d\x22\x31\ \x32\x22\x20\x78\x32\x3d\x22\x33\x22\x20\x79\x32\x3d\x22\x31\x32\ \x22\x3e\x3c\x2f\x6c\x69\x6e\x65\x3e\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x05\xba\ +\x00\x00\x05\xbd\ \x3c\ \x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\x22\x38\x30\x22\x20\x68\ \x65\x69\x67\x68\x74\x3d\x22\x38\x30\x22\x20\x76\x69\x65\x77\x42\ \x6f\x78\x3d\x22\x30\x20\x30\x20\x38\x30\x20\x38\x30\x22\x20\x66\ \x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\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\x3e\x0a\x20\ -\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x38\x2e\x31\x34\ -\x34\x31\x20\x31\x32\x2e\x36\x32\x31\x37\x43\x33\x38\x2e\x38\x31\ -\x35\x39\x20\x31\x30\x2e\x39\x34\x38\x38\x20\x34\x31\x2e\x31\x38\ -\x34\x31\x20\x31\x30\x2e\x39\x34\x38\x38\x20\x34\x31\x2e\x38\x35\ -\x35\x39\x20\x31\x32\x2e\x36\x32\x31\x37\x4c\x34\x37\x2e\x38\x30\ -\x38\x31\x20\x32\x37\x2e\x34\x34\x33\x39\x43\x34\x38\x2e\x30\x39\ -\x34\x32\x20\x32\x38\x2e\x31\x35\x36\x33\x20\x34\x38\x2e\x37\x36\ -\x32\x38\x20\x32\x38\x2e\x36\x34\x32\x20\x34\x39\x2e\x35\x32\x38\ -\x38\x20\x32\x38\x2e\x36\x39\x34\x4c\x36\x35\x2e\x34\x36\x34\x38\ -\x20\x32\x39\x2e\x37\x37\x34\x35\x43\x36\x37\x2e\x32\x36\x33\x35\ -\x20\x32\x39\x2e\x38\x39\x36\x35\x20\x36\x37\x2e\x39\x39\x35\x33\ -\x20\x33\x32\x2e\x31\x34\x38\x39\x20\x36\x36\x2e\x36\x31\x31\x38\ -\x20\x33\x33\x2e\x33\x30\x34\x37\x4c\x35\x34\x2e\x33\x35\x34\x34\ -\x20\x34\x33\x2e\x35\x34\x35\x39\x43\x35\x33\x2e\x37\x36\x35\x33\ -\x20\x34\x34\x2e\x30\x33\x38\x31\x20\x35\x33\x2e\x35\x30\x39\x39\ -\x20\x34\x34\x2e\x38\x32\x34\x31\x20\x35\x33\x2e\x36\x39\x37\x32\ -\x20\x34\x35\x2e\x35\x36\x38\x36\x4c\x35\x37\x2e\x35\x39\x34\x31\ -\x20\x36\x31\x2e\x30\x35\x38\x36\x43\x35\x38\x2e\x30\x33\x33\x39\ -\x20\x36\x32\x2e\x38\x30\x36\x39\x20\x35\x36\x2e\x31\x31\x37\x39\ -\x20\x36\x34\x2e\x31\x39\x39\x20\x35\x34\x2e\x35\x39\x31\x31\x20\ -\x36\x33\x2e\x32\x34\x30\x34\x4c\x34\x31\x2e\x30\x36\x33\x34\x20\ -\x35\x34\x2e\x37\x34\x37\x36\x43\x34\x30\x2e\x34\x31\x33\x32\x20\ -\x35\x34\x2e\x33\x33\x39\x34\x20\x33\x39\x2e\x35\x38\x36\x38\x20\ -\x35\x34\x2e\x33\x33\x39\x34\x20\x33\x38\x2e\x39\x33\x36\x36\x20\ -\x35\x34\x2e\x37\x34\x37\x36\x4c\x32\x35\x2e\x34\x30\x38\x39\x20\ -\x36\x33\x2e\x32\x34\x30\x34\x43\x32\x33\x2e\x38\x38\x32\x31\x20\ -\x36\x34\x2e\x31\x39\x39\x20\x32\x31\x2e\x39\x36\x36\x31\x20\x36\ -\x32\x2e\x38\x30\x36\x39\x20\x32\x32\x2e\x34\x30\x35\x39\x20\x36\ -\x31\x2e\x30\x35\x38\x36\x4c\x32\x36\x2e\x33\x30\x32\x38\x20\x34\ -\x35\x2e\x35\x36\x38\x36\x43\x32\x36\x2e\x34\x39\x30\x31\x20\x34\ -\x34\x2e\x38\x32\x34\x31\x20\x32\x36\x2e\x32\x33\x34\x37\x20\x34\ -\x34\x2e\x30\x33\x38\x31\x20\x32\x35\x2e\x36\x34\x35\x36\x20\x34\ -\x33\x2e\x35\x34\x35\x39\x4c\x31\x33\x2e\x33\x38\x38\x32\x20\x33\ -\x33\x2e\x33\x30\x34\x37\x43\x31\x32\x2e\x30\x30\x34\x37\x20\x33\ -\x32\x2e\x31\x34\x38\x39\x20\x31\x32\x2e\x37\x33\x36\x35\x20\x32\ -\x39\x2e\x38\x39\x36\x35\x20\x31\x34\x2e\x35\x33\x35\x32\x20\x32\ -\x39\x2e\x37\x37\x34\x35\x4c\x33\x30\x2e\x34\x37\x31\x32\x20\x32\ -\x38\x2e\x36\x39\x34\x43\x33\x31\x2e\x32\x33\x37\x32\x20\x32\x38\ -\x2e\x36\x34\x32\x20\x33\x31\x2e\x39\x30\x35\x38\x20\x32\x38\x2e\ -\x31\x35\x36\x33\x20\x33\x32\x2e\x31\x39\x31\x39\x20\x32\x37\x2e\ -\x34\x34\x33\x39\x4c\x33\x38\x2e\x31\x34\x34\x31\x20\x31\x32\x2e\ -\x36\x32\x31\x37\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\ -\x39\x39\x34\x41\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\ -\x20\x64\x3d\x22\x4d\x33\x39\x2e\x30\x35\x31\x35\x20\x32\x36\x2e\ -\x33\x31\x30\x38\x43\x33\x39\x2e\x33\x38\x37\x34\x20\x32\x35\x2e\ -\x34\x37\x34\x34\x20\x34\x30\x2e\x35\x37\x31\x36\x20\x32\x35\x2e\ -\x34\x37\x34\x34\x20\x34\x30\x2e\x39\x30\x37\x35\x20\x32\x36\x2e\ -\x33\x31\x30\x38\x4c\x34\x33\x2e\x38\x38\x33\x35\x20\x33\x33\x2e\ -\x37\x32\x31\x39\x43\x34\x34\x2e\x30\x32\x36\x36\x20\x33\x34\x2e\ -\x30\x37\x38\x31\x20\x34\x34\x2e\x33\x36\x30\x39\x20\x33\x34\x2e\ -\x33\x32\x31\x20\x34\x34\x2e\x37\x34\x33\x39\x20\x33\x34\x2e\x33\ -\x34\x37\x4c\x35\x32\x2e\x37\x31\x31\x39\x20\x33\x34\x2e\x38\x38\ -\x37\x33\x43\x35\x33\x2e\x36\x31\x31\x32\x20\x33\x34\x2e\x39\x34\ -\x38\x32\x20\x35\x33\x2e\x39\x37\x37\x31\x20\x33\x36\x2e\x30\x37\ -\x34\x34\x20\x35\x33\x2e\x32\x38\x35\x34\x20\x33\x36\x2e\x36\x35\ -\x32\x34\x4c\x34\x37\x2e\x31\x35\x36\x37\x20\x34\x31\x2e\x37\x37\ -\x32\x39\x43\x34\x36\x2e\x38\x36\x32\x31\x20\x34\x32\x2e\x30\x31\ -\x39\x31\x20\x34\x36\x2e\x37\x33\x34\x34\x20\x34\x32\x2e\x34\x31\ -\x32\x31\x20\x34\x36\x2e\x38\x32\x38\x31\x20\x34\x32\x2e\x37\x38\ -\x34\x33\x4c\x34\x38\x2e\x37\x37\x36\x35\x20\x35\x30\x2e\x35\x32\ -\x39\x33\x43\x34\x38\x2e\x39\x39\x36\x34\x20\x35\x31\x2e\x34\x30\ -\x33\x35\x20\x34\x38\x2e\x30\x33\x38\x34\x20\x35\x32\x2e\x30\x39\ -\x39\x35\x20\x34\x37\x2e\x32\x37\x35\x20\x35\x31\x2e\x36\x32\x30\ -\x32\x4c\x34\x30\x2e\x35\x31\x31\x32\x20\x34\x37\x2e\x33\x37\x33\ -\x38\x43\x34\x30\x2e\x31\x38\x36\x31\x20\x34\x37\x2e\x31\x36\x39\ -\x37\x20\x33\x39\x2e\x37\x37\x32\x39\x20\x34\x37\x2e\x31\x36\x39\ -\x37\x20\x33\x39\x2e\x34\x34\x37\x38\x20\x34\x37\x2e\x33\x37\x33\ -\x38\x4c\x33\x32\x2e\x36\x38\x34\x20\x35\x31\x2e\x36\x32\x30\x32\ -\x43\x33\x31\x2e\x39\x32\x30\x35\x20\x35\x32\x2e\x30\x39\x39\x35\ -\x20\x33\x30\x2e\x39\x36\x32\x36\x20\x35\x31\x2e\x34\x30\x33\x35\ -\x20\x33\x31\x2e\x31\x38\x32\x35\x20\x35\x30\x2e\x35\x32\x39\x33\ -\x4c\x33\x33\x2e\x31\x33\x30\x39\x20\x34\x32\x2e\x37\x38\x34\x33\ -\x43\x33\x33\x2e\x32\x32\x34\x35\x20\x34\x32\x2e\x34\x31\x32\x31\ -\x20\x33\x33\x2e\x30\x39\x36\x38\x20\x34\x32\x2e\x30\x31\x39\x31\ -\x20\x33\x32\x2e\x38\x30\x32\x33\x20\x34\x31\x2e\x37\x37\x32\x39\ -\x4c\x32\x36\x2e\x36\x37\x33\x36\x20\x33\x36\x2e\x36\x35\x32\x34\ -\x43\x32\x35\x2e\x39\x38\x31\x38\x20\x33\x36\x2e\x30\x37\x34\x34\ -\x20\x32\x36\x2e\x33\x34\x37\x38\x20\x33\x34\x2e\x39\x34\x38\x32\ -\x20\x32\x37\x2e\x32\x34\x37\x31\x20\x33\x34\x2e\x38\x38\x37\x33\ -\x4c\x33\x35\x2e\x32\x31\x35\x31\x20\x33\x34\x2e\x33\x34\x37\x43\ -\x33\x35\x2e\x35\x39\x38\x31\x20\x33\x34\x2e\x33\x32\x31\x20\x33\ -\x35\x2e\x39\x33\x32\x34\x20\x33\x34\x2e\x30\x37\x38\x31\x20\x33\ -\x36\x2e\x30\x37\x35\x34\x20\x33\x33\x2e\x37\x32\x31\x39\x4c\x33\ -\x39\x2e\x30\x35\x31\x35\x20\x32\x36\x2e\x33\x31\x30\x38\x5a\x22\ -\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x43\x39\x34\x43\x22\x20\ -\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\ -\x00\x00\x04\xc2\ +\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x3e\x0d\x0a\ +\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x38\x2e\x31\ +\x34\x34\x31\x20\x31\x32\x2e\x36\x32\x31\x37\x43\x33\x38\x2e\x38\ +\x31\x35\x39\x20\x31\x30\x2e\x39\x34\x38\x38\x20\x34\x31\x2e\x31\ +\x38\x34\x31\x20\x31\x30\x2e\x39\x34\x38\x38\x20\x34\x31\x2e\x38\ +\x35\x35\x39\x20\x31\x32\x2e\x36\x32\x31\x37\x4c\x34\x37\x2e\x38\ +\x30\x38\x31\x20\x32\x37\x2e\x34\x34\x33\x39\x43\x34\x38\x2e\x30\ +\x39\x34\x32\x20\x32\x38\x2e\x31\x35\x36\x33\x20\x34\x38\x2e\x37\ +\x36\x32\x38\x20\x32\x38\x2e\x36\x34\x32\x20\x34\x39\x2e\x35\x32\ +\x38\x38\x20\x32\x38\x2e\x36\x39\x34\x4c\x36\x35\x2e\x34\x36\x34\ +\x38\x20\x32\x39\x2e\x37\x37\x34\x35\x43\x36\x37\x2e\x32\x36\x33\ +\x35\x20\x32\x39\x2e\x38\x39\x36\x35\x20\x36\x37\x2e\x39\x39\x35\ +\x33\x20\x33\x32\x2e\x31\x34\x38\x39\x20\x36\x36\x2e\x36\x31\x31\ +\x38\x20\x33\x33\x2e\x33\x30\x34\x37\x4c\x35\x34\x2e\x33\x35\x34\ +\x34\x20\x34\x33\x2e\x35\x34\x35\x39\x43\x35\x33\x2e\x37\x36\x35\ +\x33\x20\x34\x34\x2e\x30\x33\x38\x31\x20\x35\x33\x2e\x35\x30\x39\ +\x39\x20\x34\x34\x2e\x38\x32\x34\x31\x20\x35\x33\x2e\x36\x39\x37\ +\x32\x20\x34\x35\x2e\x35\x36\x38\x36\x4c\x35\x37\x2e\x35\x39\x34\ +\x31\x20\x36\x31\x2e\x30\x35\x38\x36\x43\x35\x38\x2e\x30\x33\x33\ +\x39\x20\x36\x32\x2e\x38\x30\x36\x39\x20\x35\x36\x2e\x31\x31\x37\ +\x39\x20\x36\x34\x2e\x31\x39\x39\x20\x35\x34\x2e\x35\x39\x31\x31\ +\x20\x36\x33\x2e\x32\x34\x30\x34\x4c\x34\x31\x2e\x30\x36\x33\x34\ +\x20\x35\x34\x2e\x37\x34\x37\x36\x43\x34\x30\x2e\x34\x31\x33\x32\ +\x20\x35\x34\x2e\x33\x33\x39\x34\x20\x33\x39\x2e\x35\x38\x36\x38\ +\x20\x35\x34\x2e\x33\x33\x39\x34\x20\x33\x38\x2e\x39\x33\x36\x36\ +\x20\x35\x34\x2e\x37\x34\x37\x36\x4c\x32\x35\x2e\x34\x30\x38\x39\ +\x20\x36\x33\x2e\x32\x34\x30\x34\x43\x32\x33\x2e\x38\x38\x32\x31\ +\x20\x36\x34\x2e\x31\x39\x39\x20\x32\x31\x2e\x39\x36\x36\x31\x20\ +\x36\x32\x2e\x38\x30\x36\x39\x20\x32\x32\x2e\x34\x30\x35\x39\x20\ +\x36\x31\x2e\x30\x35\x38\x36\x4c\x32\x36\x2e\x33\x30\x32\x38\x20\ +\x34\x35\x2e\x35\x36\x38\x36\x43\x32\x36\x2e\x34\x39\x30\x31\x20\ +\x34\x34\x2e\x38\x32\x34\x31\x20\x32\x36\x2e\x32\x33\x34\x37\x20\ +\x34\x34\x2e\x30\x33\x38\x31\x20\x32\x35\x2e\x36\x34\x35\x36\x20\ +\x34\x33\x2e\x35\x34\x35\x39\x4c\x31\x33\x2e\x33\x38\x38\x32\x20\ +\x33\x33\x2e\x33\x30\x34\x37\x43\x31\x32\x2e\x30\x30\x34\x37\x20\ +\x33\x32\x2e\x31\x34\x38\x39\x20\x31\x32\x2e\x37\x33\x36\x35\x20\ +\x32\x39\x2e\x38\x39\x36\x35\x20\x31\x34\x2e\x35\x33\x35\x32\x20\ +\x32\x39\x2e\x37\x37\x34\x35\x4c\x33\x30\x2e\x34\x37\x31\x32\x20\ +\x32\x38\x2e\x36\x39\x34\x43\x33\x31\x2e\x32\x33\x37\x32\x20\x32\ +\x38\x2e\x36\x34\x32\x20\x33\x31\x2e\x39\x30\x35\x38\x20\x32\x38\ +\x2e\x31\x35\x36\x33\x20\x33\x32\x2e\x31\x39\x31\x39\x20\x32\x37\ +\x2e\x34\x34\x33\x39\x4c\x33\x38\x2e\x31\x34\x34\x31\x20\x31\x32\ +\x2e\x36\x32\x31\x37\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\ +\x32\x39\x39\x34\x41\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x70\x61\ +\x74\x68\x20\x64\x3d\x22\x4d\x33\x39\x2e\x30\x35\x31\x35\x20\x32\ +\x36\x2e\x33\x31\x30\x38\x43\x33\x39\x2e\x33\x38\x37\x34\x20\x32\ +\x35\x2e\x34\x37\x34\x34\x20\x34\x30\x2e\x35\x37\x31\x36\x20\x32\ +\x35\x2e\x34\x37\x34\x34\x20\x34\x30\x2e\x39\x30\x37\x35\x20\x32\ +\x36\x2e\x33\x31\x30\x38\x4c\x34\x33\x2e\x38\x38\x33\x35\x20\x33\ +\x33\x2e\x37\x32\x31\x39\x43\x34\x34\x2e\x30\x32\x36\x36\x20\x33\ +\x34\x2e\x30\x37\x38\x31\x20\x34\x34\x2e\x33\x36\x30\x39\x20\x33\ +\x34\x2e\x33\x32\x31\x20\x34\x34\x2e\x37\x34\x33\x39\x20\x33\x34\ +\x2e\x33\x34\x37\x4c\x35\x32\x2e\x37\x31\x31\x39\x20\x33\x34\x2e\ +\x38\x38\x37\x33\x43\x35\x33\x2e\x36\x31\x31\x32\x20\x33\x34\x2e\ +\x39\x34\x38\x32\x20\x35\x33\x2e\x39\x37\x37\x31\x20\x33\x36\x2e\ +\x30\x37\x34\x34\x20\x35\x33\x2e\x32\x38\x35\x34\x20\x33\x36\x2e\ +\x36\x35\x32\x34\x4c\x34\x37\x2e\x31\x35\x36\x37\x20\x34\x31\x2e\ +\x37\x37\x32\x39\x43\x34\x36\x2e\x38\x36\x32\x31\x20\x34\x32\x2e\ +\x30\x31\x39\x31\x20\x34\x36\x2e\x37\x33\x34\x34\x20\x34\x32\x2e\ +\x34\x31\x32\x31\x20\x34\x36\x2e\x38\x32\x38\x31\x20\x34\x32\x2e\ +\x37\x38\x34\x33\x4c\x34\x38\x2e\x37\x37\x36\x35\x20\x35\x30\x2e\ +\x35\x32\x39\x33\x43\x34\x38\x2e\x39\x39\x36\x34\x20\x35\x31\x2e\ +\x34\x30\x33\x35\x20\x34\x38\x2e\x30\x33\x38\x34\x20\x35\x32\x2e\ +\x30\x39\x39\x35\x20\x34\x37\x2e\x32\x37\x35\x20\x35\x31\x2e\x36\ +\x32\x30\x32\x4c\x34\x30\x2e\x35\x31\x31\x32\x20\x34\x37\x2e\x33\ +\x37\x33\x38\x43\x34\x30\x2e\x31\x38\x36\x31\x20\x34\x37\x2e\x31\ +\x36\x39\x37\x20\x33\x39\x2e\x37\x37\x32\x39\x20\x34\x37\x2e\x31\ +\x36\x39\x37\x20\x33\x39\x2e\x34\x34\x37\x38\x20\x34\x37\x2e\x33\ +\x37\x33\x38\x4c\x33\x32\x2e\x36\x38\x34\x20\x35\x31\x2e\x36\x32\ +\x30\x32\x43\x33\x31\x2e\x39\x32\x30\x35\x20\x35\x32\x2e\x30\x39\ +\x39\x35\x20\x33\x30\x2e\x39\x36\x32\x36\x20\x35\x31\x2e\x34\x30\ +\x33\x35\x20\x33\x31\x2e\x31\x38\x32\x35\x20\x35\x30\x2e\x35\x32\ +\x39\x33\x4c\x33\x33\x2e\x31\x33\x30\x39\x20\x34\x32\x2e\x37\x38\ +\x34\x33\x43\x33\x33\x2e\x32\x32\x34\x35\x20\x34\x32\x2e\x34\x31\ +\x32\x31\x20\x33\x33\x2e\x30\x39\x36\x38\x20\x34\x32\x2e\x30\x31\ +\x39\x31\x20\x33\x32\x2e\x38\x30\x32\x33\x20\x34\x31\x2e\x37\x37\ +\x32\x39\x4c\x32\x36\x2e\x36\x37\x33\x36\x20\x33\x36\x2e\x36\x35\ +\x32\x34\x43\x32\x35\x2e\x39\x38\x31\x38\x20\x33\x36\x2e\x30\x37\ +\x34\x34\x20\x32\x36\x2e\x33\x34\x37\x38\x20\x33\x34\x2e\x39\x34\ +\x38\x32\x20\x32\x37\x2e\x32\x34\x37\x31\x20\x33\x34\x2e\x38\x38\ +\x37\x33\x4c\x33\x35\x2e\x32\x31\x35\x31\x20\x33\x34\x2e\x33\x34\ +\x37\x43\x33\x35\x2e\x35\x39\x38\x31\x20\x33\x34\x2e\x33\x32\x31\ +\x20\x33\x35\x2e\x39\x33\x32\x34\x20\x33\x34\x2e\x30\x37\x38\x31\ +\x20\x33\x36\x2e\x30\x37\x35\x34\x20\x33\x33\x2e\x37\x32\x31\x39\ +\x4c\x33\x39\x2e\x30\x35\x31\x35\x20\x32\x36\x2e\x33\x31\x30\x38\ +\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x32\x43\x39\x34\x43\ +\x22\x20\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x00\x00\x04\xc5\ \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\x75\x74\x66\ @@ -516,355 +557,365 @@ \x20\x77\x77\x77\x2e\x73\x76\x67\x72\x65\x70\x6f\x2e\x63\x6f\x6d\ \x2c\x20\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x53\x56\x47\ \x20\x52\x65\x70\x6f\x20\x4d\x69\x78\x65\x72\x20\x54\x6f\x6f\x6c\ -\x73\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x77\x69\x64\x74\x68\ -\x3d\x22\x38\x30\x30\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\ -\x22\x38\x30\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\ -\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x20\x66\x69\x6c\x6c\ -\x3d\x22\x6e\x6f\x6e\x65\x22\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\x3e\x0a\x3c\x70\x61\x74\ -\x68\x20\x64\x3d\x22\x4d\x32\x30\x20\x39\x2e\x35\x30\x31\x39\x35\ -\x56\x38\x2e\x37\x34\x39\x38\x35\x43\x32\x30\x20\x37\x2e\x35\x30\ -\x37\x32\x31\x20\x31\x38\x2e\x39\x39\x32\x36\x20\x36\x2e\x34\x39\ -\x39\x38\x35\x20\x31\x37\x2e\x37\x35\x20\x36\x2e\x34\x39\x39\x38\ -\x35\x48\x31\x32\x2e\x30\x32\x34\x37\x4c\x39\x2e\x36\x34\x33\x36\ -\x38\x20\x34\x2e\x35\x31\x39\x39\x35\x43\x39\x2e\x32\x33\x39\x35\ -\x39\x20\x34\x2e\x31\x38\x33\x39\x33\x20\x38\x2e\x37\x33\x30\x36\ -\x33\x20\x33\x2e\x39\x39\x39\x39\x37\x20\x38\x2e\x32\x30\x35\x30\ -\x39\x20\x33\x2e\x39\x39\x39\x39\x37\x48\x34\x2e\x32\x34\x39\x35\ -\x37\x43\x33\x2e\x30\x30\x37\x32\x34\x20\x33\x2e\x39\x39\x39\x39\ -\x37\x20\x32\x20\x35\x2e\x30\x30\x36\x38\x36\x20\x31\x2e\x39\x39\ -\x39\x35\x37\x20\x36\x2e\x32\x34\x39\x31\x39\x4c\x31\x2e\x39\x39\ -\x35\x36\x31\x20\x31\x37\x2e\x37\x34\x39\x32\x43\x31\x2e\x39\x39\ -\x35\x31\x38\x20\x31\x38\x2e\x39\x39\x32\x31\x20\x33\x2e\x30\x30\ -\x32\x36\x36\x20\x32\x30\x20\x34\x2e\x32\x34\x35\x36\x31\x20\x32\ -\x30\x48\x34\x2e\x32\x37\x31\x39\x36\x43\x34\x2e\x32\x37\x36\x30\ -\x37\x20\x32\x30\x20\x34\x2e\x32\x38\x30\x31\x39\x20\x32\x30\x20\ -\x34\x2e\x32\x38\x34\x33\x31\x20\x32\x30\x48\x31\x38\x2e\x34\x36\ -\x39\x33\x43\x31\x39\x2e\x32\x37\x32\x33\x20\x32\x30\x20\x31\x39\ -\x2e\x39\x37\x32\x33\x20\x31\x39\x2e\x34\x35\x33\x35\x20\x32\x30\ -\x2e\x31\x36\x37\x20\x31\x38\x2e\x36\x37\x34\x35\x4c\x32\x31\x2e\ -\x39\x31\x36\x39\x20\x31\x31\x2e\x36\x37\x36\x35\x43\x32\x32\x2e\ -\x31\x39\x33\x31\x20\x31\x30\x2e\x35\x37\x31\x39\x20\x32\x31\x2e\ -\x33\x35\x37\x37\x20\x39\x2e\x35\x30\x31\x39\x35\x20\x32\x30\x2e\ -\x32\x31\x39\x32\x20\x39\x2e\x35\x30\x31\x39\x35\x48\x32\x30\x5a\ -\x4d\x34\x2e\x32\x34\x39\x35\x37\x20\x35\x2e\x34\x39\x39\x39\x37\ -\x48\x38\x2e\x32\x30\x35\x30\x39\x43\x38\x2e\x33\x38\x30\x32\x37\ -\x20\x35\x2e\x34\x39\x39\x39\x37\x20\x38\x2e\x35\x34\x39\x39\x33\ -\x20\x35\x2e\x35\x36\x31\x32\x39\x20\x38\x2e\x36\x38\x34\x36\x32\ -\x20\x35\x2e\x36\x37\x33\x33\x4c\x31\x31\x2e\x32\x37\x34\x31\x20\ -\x37\x2e\x38\x32\x36\x35\x32\x43\x31\x31\x2e\x34\x30\x38\x38\x20\ -\x37\x2e\x39\x33\x38\x35\x32\x20\x31\x31\x2e\x35\x37\x38\x34\x20\ -\x37\x2e\x39\x39\x39\x38\x35\x20\x31\x31\x2e\x37\x35\x33\x36\x20\ -\x37\x2e\x39\x39\x39\x38\x35\x48\x31\x37\x2e\x37\x35\x43\x31\x38\ -\x2e\x31\x36\x34\x32\x20\x37\x2e\x39\x39\x39\x38\x35\x20\x31\x38\ -\x2e\x35\x20\x38\x2e\x33\x33\x35\x36\x33\x20\x31\x38\x2e\x35\x20\ -\x38\x2e\x37\x34\x39\x38\x35\x56\x39\x2e\x35\x30\x31\x39\x35\x48\ -\x36\x2e\x34\x32\x33\x38\x35\x43\x35\x2e\x33\x39\x31\x33\x36\x20\ -\x39\x2e\x35\x30\x31\x39\x35\x20\x34\x2e\x34\x39\x31\x33\x37\x20\ -\x31\x30\x2e\x32\x30\x34\x37\x20\x34\x2e\x32\x34\x31\x20\x31\x31\ -\x2e\x32\x30\x36\x34\x4c\x33\x2e\x34\x39\x36\x38\x34\x20\x31\x34\ -\x2e\x31\x38\x33\x37\x4c\x33\x2e\x34\x39\x39\x35\x37\x20\x36\x2e\ -\x32\x34\x39\x37\x31\x43\x33\x2e\x34\x39\x39\x37\x31\x20\x35\x2e\ -\x38\x33\x35\x36\x20\x33\x2e\x38\x33\x35\x34\x36\x20\x35\x2e\x34\ -\x39\x39\x39\x37\x20\x34\x2e\x32\x34\x39\x35\x37\x20\x35\x2e\x34\ -\x39\x39\x39\x37\x5a\x4d\x35\x2e\x36\x39\x36\x32\x33\x20\x31\x31\ -\x2e\x35\x37\x30\x31\x43\x35\x2e\x37\x37\x39\x36\x39\x20\x31\x31\ -\x2e\x32\x33\x36\x32\x20\x36\x2e\x30\x37\x39\x36\x39\x20\x31\x31\ -\x2e\x30\x30\x32\x20\x36\x2e\x34\x32\x33\x38\x35\x20\x31\x31\x2e\ -\x30\x30\x32\x48\x32\x30\x2e\x32\x31\x39\x32\x43\x32\x30\x2e\x33\ -\x38\x31\x39\x20\x31\x31\x2e\x30\x30\x32\x20\x32\x30\x2e\x35\x30\ -\x31\x32\x20\x31\x31\x2e\x31\x35\x34\x38\x20\x32\x30\x2e\x34\x36\ -\x31\x37\x20\x31\x31\x2e\x33\x31\x32\x36\x4c\x31\x38\x2e\x37\x31\ -\x31\x39\x20\x31\x38\x2e\x33\x31\x30\x37\x43\x31\x38\x2e\x36\x38\ -\x34\x20\x31\x38\x2e\x34\x32\x31\x39\x20\x31\x38\x2e\x35\x38\x34\ -\x20\x31\x38\x2e\x35\x20\x31\x38\x2e\x34\x36\x39\x33\x20\x31\x38\ -\x2e\x35\x48\x34\x2e\x32\x38\x34\x33\x31\x43\x34\x2e\x31\x32\x31\ -\x36\x37\x20\x31\x38\x2e\x35\x20\x34\x2e\x30\x30\x32\x33\x33\x20\ -\x31\x38\x2e\x33\x34\x37\x32\x20\x34\x2e\x30\x34\x31\x37\x37\x20\ -\x31\x38\x2e\x31\x38\x39\x34\x4c\x35\x2e\x36\x39\x36\x32\x33\x20\ -\x31\x31\x2e\x35\x37\x30\x31\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\ -\x23\x32\x31\x32\x31\x32\x31\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\ -\x3e\ -\x00\x00\x09\x8f\ +\x73\x20\x2d\x2d\x3e\x0d\x0a\x3c\x73\x76\x67\x20\x77\x69\x64\x74\ +\x68\x3d\x22\x38\x30\x30\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\ +\x3d\x22\x38\x30\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\ +\x3d\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x20\x66\x69\x6c\ +\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\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\x3e\x0d\x0a\x3c\x70\ +\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x30\x20\x39\x2e\x35\x30\x31\ +\x39\x35\x56\x38\x2e\x37\x34\x39\x38\x35\x43\x32\x30\x20\x37\x2e\ +\x35\x30\x37\x32\x31\x20\x31\x38\x2e\x39\x39\x32\x36\x20\x36\x2e\ +\x34\x39\x39\x38\x35\x20\x31\x37\x2e\x37\x35\x20\x36\x2e\x34\x39\ +\x39\x38\x35\x48\x31\x32\x2e\x30\x32\x34\x37\x4c\x39\x2e\x36\x34\ +\x33\x36\x38\x20\x34\x2e\x35\x31\x39\x39\x35\x43\x39\x2e\x32\x33\ +\x39\x35\x39\x20\x34\x2e\x31\x38\x33\x39\x33\x20\x38\x2e\x37\x33\ +\x30\x36\x33\x20\x33\x2e\x39\x39\x39\x39\x37\x20\x38\x2e\x32\x30\ +\x35\x30\x39\x20\x33\x2e\x39\x39\x39\x39\x37\x48\x34\x2e\x32\x34\ +\x39\x35\x37\x43\x33\x2e\x30\x30\x37\x32\x34\x20\x33\x2e\x39\x39\ +\x39\x39\x37\x20\x32\x20\x35\x2e\x30\x30\x36\x38\x36\x20\x31\x2e\ +\x39\x39\x39\x35\x37\x20\x36\x2e\x32\x34\x39\x31\x39\x4c\x31\x2e\ +\x39\x39\x35\x36\x31\x20\x31\x37\x2e\x37\x34\x39\x32\x43\x31\x2e\ +\x39\x39\x35\x31\x38\x20\x31\x38\x2e\x39\x39\x32\x31\x20\x33\x2e\ +\x30\x30\x32\x36\x36\x20\x32\x30\x20\x34\x2e\x32\x34\x35\x36\x31\ +\x20\x32\x30\x48\x34\x2e\x32\x37\x31\x39\x36\x43\x34\x2e\x32\x37\ +\x36\x30\x37\x20\x32\x30\x20\x34\x2e\x32\x38\x30\x31\x39\x20\x32\ +\x30\x20\x34\x2e\x32\x38\x34\x33\x31\x20\x32\x30\x48\x31\x38\x2e\ +\x34\x36\x39\x33\x43\x31\x39\x2e\x32\x37\x32\x33\x20\x32\x30\x20\ +\x31\x39\x2e\x39\x37\x32\x33\x20\x31\x39\x2e\x34\x35\x33\x35\x20\ +\x32\x30\x2e\x31\x36\x37\x20\x31\x38\x2e\x36\x37\x34\x35\x4c\x32\ +\x31\x2e\x39\x31\x36\x39\x20\x31\x31\x2e\x36\x37\x36\x35\x43\x32\ +\x32\x2e\x31\x39\x33\x31\x20\x31\x30\x2e\x35\x37\x31\x39\x20\x32\ +\x31\x2e\x33\x35\x37\x37\x20\x39\x2e\x35\x30\x31\x39\x35\x20\x32\ +\x30\x2e\x32\x31\x39\x32\x20\x39\x2e\x35\x30\x31\x39\x35\x48\x32\ +\x30\x5a\x4d\x34\x2e\x32\x34\x39\x35\x37\x20\x35\x2e\x34\x39\x39\ +\x39\x37\x48\x38\x2e\x32\x30\x35\x30\x39\x43\x38\x2e\x33\x38\x30\ +\x32\x37\x20\x35\x2e\x34\x39\x39\x39\x37\x20\x38\x2e\x35\x34\x39\ +\x39\x33\x20\x35\x2e\x35\x36\x31\x32\x39\x20\x38\x2e\x36\x38\x34\ +\x36\x32\x20\x35\x2e\x36\x37\x33\x33\x4c\x31\x31\x2e\x32\x37\x34\ +\x31\x20\x37\x2e\x38\x32\x36\x35\x32\x43\x31\x31\x2e\x34\x30\x38\ +\x38\x20\x37\x2e\x39\x33\x38\x35\x32\x20\x31\x31\x2e\x35\x37\x38\ +\x34\x20\x37\x2e\x39\x39\x39\x38\x35\x20\x31\x31\x2e\x37\x35\x33\ +\x36\x20\x37\x2e\x39\x39\x39\x38\x35\x48\x31\x37\x2e\x37\x35\x43\ +\x31\x38\x2e\x31\x36\x34\x32\x20\x37\x2e\x39\x39\x39\x38\x35\x20\ +\x31\x38\x2e\x35\x20\x38\x2e\x33\x33\x35\x36\x33\x20\x31\x38\x2e\ +\x35\x20\x38\x2e\x37\x34\x39\x38\x35\x56\x39\x2e\x35\x30\x31\x39\ +\x35\x48\x36\x2e\x34\x32\x33\x38\x35\x43\x35\x2e\x33\x39\x31\x33\ +\x36\x20\x39\x2e\x35\x30\x31\x39\x35\x20\x34\x2e\x34\x39\x31\x33\ +\x37\x20\x31\x30\x2e\x32\x30\x34\x37\x20\x34\x2e\x32\x34\x31\x20\ +\x31\x31\x2e\x32\x30\x36\x34\x4c\x33\x2e\x34\x39\x36\x38\x34\x20\ +\x31\x34\x2e\x31\x38\x33\x37\x4c\x33\x2e\x34\x39\x39\x35\x37\x20\ +\x36\x2e\x32\x34\x39\x37\x31\x43\x33\x2e\x34\x39\x39\x37\x31\x20\ +\x35\x2e\x38\x33\x35\x36\x20\x33\x2e\x38\x33\x35\x34\x36\x20\x35\ +\x2e\x34\x39\x39\x39\x37\x20\x34\x2e\x32\x34\x39\x35\x37\x20\x35\ +\x2e\x34\x39\x39\x39\x37\x5a\x4d\x35\x2e\x36\x39\x36\x32\x33\x20\ +\x31\x31\x2e\x35\x37\x30\x31\x43\x35\x2e\x37\x37\x39\x36\x39\x20\ +\x31\x31\x2e\x32\x33\x36\x32\x20\x36\x2e\x30\x37\x39\x36\x39\x20\ +\x31\x31\x2e\x30\x30\x32\x20\x36\x2e\x34\x32\x33\x38\x35\x20\x31\ +\x31\x2e\x30\x30\x32\x48\x32\x30\x2e\x32\x31\x39\x32\x43\x32\x30\ +\x2e\x33\x38\x31\x39\x20\x31\x31\x2e\x30\x30\x32\x20\x32\x30\x2e\ +\x35\x30\x31\x32\x20\x31\x31\x2e\x31\x35\x34\x38\x20\x32\x30\x2e\ +\x34\x36\x31\x37\x20\x31\x31\x2e\x33\x31\x32\x36\x4c\x31\x38\x2e\ +\x37\x31\x31\x39\x20\x31\x38\x2e\x33\x31\x30\x37\x43\x31\x38\x2e\ +\x36\x38\x34\x20\x31\x38\x2e\x34\x32\x31\x39\x20\x31\x38\x2e\x35\ +\x38\x34\x20\x31\x38\x2e\x35\x20\x31\x38\x2e\x34\x36\x39\x33\x20\ +\x31\x38\x2e\x35\x48\x34\x2e\x32\x38\x34\x33\x31\x43\x34\x2e\x31\ +\x32\x31\x36\x37\x20\x31\x38\x2e\x35\x20\x34\x2e\x30\x30\x32\x33\ +\x33\x20\x31\x38\x2e\x33\x34\x37\x32\x20\x34\x2e\x30\x34\x31\x37\ +\x37\x20\x31\x38\x2e\x31\x38\x39\x34\x4c\x35\x2e\x36\x39\x36\x32\ +\x33\x20\x31\x31\x2e\x35\x37\x30\x31\x5a\x22\x20\x66\x69\x6c\x6c\ +\x3d\x22\x23\x32\x31\x32\x31\x32\x31\x22\x2f\x3e\x0d\x0a\x3c\x2f\ +\x73\x76\x67\x3e\ +\x00\x00\x09\xd7\ \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\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\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ -\x30\x72\x63\x31\x20\x28\x30\x39\x39\x36\x30\x64\x36\x66\x30\x35\ -\x2c\x20\x32\x30\x32\x30\x2d\x30\x34\x2d\x30\x39\x29\x22\x0a\x20\ -\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\ -\x6d\x65\x3d\x22\x63\x6f\x6c\x6c\x61\x70\x73\x65\x2e\x73\x76\x67\ -\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x36\x22\x0a\x20\ -\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\ -\x20\x20\x20\x63\x6c\x61\x73\x73\x3d\x22\x66\x65\x61\x74\x68\x65\ -\x72\x20\x66\x65\x61\x74\x68\x65\x72\x2d\x63\x6f\x64\x65\x22\x0a\ -\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\ -\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\x73\x74\ -\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\x6f\ -\x75\x6e\x64\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\ -\x69\x64\x74\x68\x3d\x22\x32\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\ -\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\x6c\x6f\x72\ -\x22\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\ -\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\ -\x20\x32\x34\x20\x32\x34\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\ -\x74\x3d\x22\x32\x34\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\ -\x22\x32\x34\x22\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\ -\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\ -\x61\x74\x61\x31\x32\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\ -\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\ -\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\ -\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\ -\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\ -\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\ -\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ -\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\ -\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\ -\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\ -\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\ -\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\ -\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\ -\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\ -\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\ -\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\ -\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x64\x65\x66\ -\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\x31\ -\x30\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\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\ -\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x73\x76\x67\x36\x22\x0a\x20\ +\x6e\x6f\x22\x3f\x3e\x0d\x0a\x3c\x73\x76\x67\x0d\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\x0d\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\x0d\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\x0d\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\ +\x0d\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\x0d\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\x0d\ +\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\ +\x0d\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\ +\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x30\x72\x63\x31\x20\x28\x30\ +\x39\x39\x36\x30\x64\x36\x66\x30\x35\x2c\x20\x32\x30\x32\x30\x2d\ +\x30\x34\x2d\x30\x39\x29\x22\x0d\x0a\x20\x20\x20\x73\x6f\x64\x69\ +\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x63\x6f\ +\x6c\x6c\x61\x70\x73\x65\x2e\x73\x76\x67\x22\x0d\x0a\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x76\x67\x36\x22\x0d\x0a\x20\x20\x20\x76\x65\ +\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0d\x0a\x20\x20\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x66\x65\x61\x74\x68\x65\x72\x20\x66\ +\x65\x61\x74\x68\x65\x72\x2d\x63\x6f\x64\x65\x22\x0d\x0a\x20\x20\ +\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\ +\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\x6f\x75\ +\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\ +\x69\x64\x74\x68\x3d\x22\x32\x22\x0d\x0a\x20\x20\x20\x73\x74\x72\ +\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\x6c\x6f\ +\x72\x22\x0d\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\ +\x65\x22\x0d\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\ +\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0d\x0a\x20\x20\x20\x68\ +\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x0d\x0a\x20\x20\x20\x77\ +\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x3e\x0d\x0a\x20\x20\x3c\x6d\ +\x65\x74\x61\x64\x61\x74\x61\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x31\x32\x22\x3e\x0d\x0a\ +\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0d\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\ +\x74\x3d\x22\x22\x3e\x0d\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\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\ +\x3a\x74\x79\x70\x65\x0d\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\x0d\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\x0d\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0d\x0a\x20\x20\x20\ +\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\x0a\x20\x20\x3c\ +\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0d\x0a\x20\x20\x3c\x64\ +\x65\x66\x73\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\ +\x66\x73\x31\x30\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x73\x6f\x64\ +\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0d\ +\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\x73\x76\ +\x67\x36\x22\x0d\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\x30\x22\x0d\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\x38\x35\x22\x0d\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\x31\ +\x33\x38\x37\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x79\x3d\x22\x31\x32\x2e\x31\x38\x37\x33\x38\ +\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x78\x3d\x22\x31\x32\x2e\x34\x37\x33\x33\x38\x37\x22\ +\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x7a\x6f\x6f\x6d\x3d\x22\x32\x39\x2e\x36\x39\x38\x34\x38\x35\x22\ +\x0d\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\ +\x22\x66\x61\x6c\x73\x65\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x38\x22\x0d\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\x30\ -\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\x38\x35\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\x31\x33\x38\x37\x22\x0a\x20\x20\x20\ -\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x31\ -\x32\x2e\x31\x38\x37\x33\x38\x32\x22\x0a\x20\x20\x20\x20\x20\x69\ -\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x32\x2e\x34\ -\x37\x33\x33\x38\x37\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x32\x39\x2e\x36\x39\ -\x38\x34\x38\x35\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\x69\x64\x3d\x22\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\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\x31\ -\x32\x38\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\x39\x37\x34\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x31\x32\x38\ +\x22\x0d\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\ +\x39\x37\x34\x22\x0d\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\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x22\ -\x0a\x20\x20\x20\x20\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\x65\x72\ -\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x67\ -\x72\x69\x64\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\ -\x22\x0a\x20\x20\x20\x20\x20\x6f\x62\x6a\x65\x63\x74\x74\x6f\x6c\ -\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\ -\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\ -\x31\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\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\ -\x66\x66\x66\x66\x66\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\ -\x68\x0a\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ -\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\ -\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ -\x64\x74\x68\x3a\x31\x2e\x38\x39\x34\x34\x33\x3b\x73\x74\x72\x6f\ -\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\ -\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\ -\x3a\x6d\x69\x74\x65\x72\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\x64\x3d\x22\x4d\x20\x32\x2e\x38\ -\x39\x35\x37\x37\x30\x36\x2c\x33\x2e\x37\x33\x37\x35\x36\x34\x34\ -\x20\x48\x20\x32\x30\x2e\x32\x33\x36\x37\x32\x33\x22\x0a\x20\x20\ -\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x38\x35\x37\x22\x0a\ -\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ -\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ -\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\ -\x0a\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ -\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\ -\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ -\x74\x68\x3a\x31\x2e\x38\x39\x34\x34\x33\x3b\x73\x74\x72\x6f\x6b\ -\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\ -\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\ -\x6d\x69\x74\x65\x72\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\x64\x3d\x22\x4d\x20\x32\x2e\x38\x39\ -\x35\x37\x37\x30\x36\x2c\x31\x31\x2e\x34\x33\x37\x31\x37\x32\x20\ -\x48\x20\x32\x30\x2e\x32\x33\x36\x37\x32\x33\x22\x0a\x20\x20\x20\ -\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x38\x35\x39\x22\x0a\x20\ -\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\ -\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\ -\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x0a\ +\x32\x22\x0d\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\ +\x22\x0d\x0a\x20\x20\x20\x20\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\ +\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\ +\x20\x20\x67\x72\x69\x64\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\ +\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x6f\x62\x6a\x65\x63\ +\x74\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\ +\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\ +\x69\x74\x79\x3d\x22\x31\x22\x0d\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\x0d\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\x20\x2f\x3e\ +\x0d\x0a\x20\x20\x3c\x70\x61\x74\x68\x0d\x0a\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\ +\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x38\ +\x39\x34\x34\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\ +\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\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\x0d\x0a\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x4d\x20\x32\x2e\x38\x39\x35\x37\x37\x30\x36\ +\x2c\x33\x2e\x37\x33\x37\x35\x36\x34\x34\x20\x48\x20\x32\x30\x2e\ +\x32\x33\x36\x37\x32\x33\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x61\x74\x68\x38\x35\x37\x22\x0d\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\ +\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\ +\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x70\x61\x74\x68\x0d\x0a\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\ +\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\ +\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x31\x2e\x38\x39\x34\x34\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\ +\x74\x65\x72\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\x0d\ +\x0a\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x32\x2e\x38\x39\x35\ +\x37\x37\x30\x36\x2c\x31\x31\x2e\x34\x33\x37\x31\x37\x32\x20\x48\ +\x20\x32\x30\x2e\x32\x33\x36\x37\x32\x33\x22\x0d\x0a\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x38\x35\x39\x22\x0d\x0a\ \x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ \x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ -\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\ -\x61\x74\x68\x38\x35\x35\x22\x0a\x20\x20\x20\x20\x20\x64\x3d\x22\ -\x4d\x20\x32\x2e\x38\x39\x35\x37\x37\x30\x36\x2c\x37\x2e\x35\x38\ -\x37\x33\x36\x38\x31\x20\x48\x20\x32\x30\x2e\x32\x33\x36\x37\x32\ -\x33\x22\x0a\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ -\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\ -\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\ -\x69\x64\x74\x68\x3a\x31\x2e\x38\x39\x34\x34\x33\x3b\x73\x74\x72\ -\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\ -\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\ -\x6e\x3a\x6d\x69\x74\x65\x72\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\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ -\x00\x00\x07\x9d\ +\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x70\x61\x74\ +\x68\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\ +\x74\x75\x72\x65\x3d\x22\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x38\x35\x35\x22\x0d\x0a\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x4d\x20\x32\x2e\x38\x39\x35\x37\x37\x30\x36\ +\x2c\x37\x2e\x35\x38\x37\x33\x36\x38\x31\x20\x48\x20\x32\x30\x2e\ +\x32\x33\x36\x37\x32\x33\x22\x0d\x0a\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\ +\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x38\x39\x34\ +\x34\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\ +\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\ +\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\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\x20\x2f\x3e\x0d\x0a\x3c\x2f\ +\x73\x76\x67\x3e\x0d\x0a\ +\x00\x00\x07\xe6\ \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\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\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ -\x30\x72\x63\x31\x20\x28\x30\x39\x39\x36\x30\x64\x36\x66\x30\x35\ -\x2c\x20\x32\x30\x32\x30\x2d\x30\x34\x2d\x30\x39\x29\x22\x0a\x20\ -\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\ -\x6d\x65\x3d\x22\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\ -\x6e\x2d\x72\x65\x64\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x64\ -\x3d\x22\x73\x76\x67\x38\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\ -\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x20\x20\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x66\x65\x61\x74\x68\x65\x72\x20\x66\x65\x61\x74\x68\ -\x65\x72\x2d\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\ -\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\ -\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\ -\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\ -\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\ -\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x0a\x20\x20\x20\x73\x74\ -\x72\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\x6c\ -\x6f\x72\x22\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\ -\x65\x22\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\ -\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0a\x20\x20\x20\x68\x65\x69\ -\x67\x68\x74\x3d\x22\x32\x34\x22\x0a\x20\x20\x20\x77\x69\x64\x74\ -\x68\x3d\x22\x32\x34\x22\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\ -\x61\x74\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\ -\x61\x64\x61\x74\x61\x31\x34\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\ -\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\ -\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ -\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\ -\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\ -\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\ -\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\ -\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\ -\x72\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\ -\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\ -\x2f\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\ -\x65\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\ -\x20\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\ -\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\ -\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x64\ -\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\ -\x73\x31\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\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\x72\ -\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x73\x76\x67\x38\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\x30\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\x32\x38\x31\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\x31\x34\x33\x33\x22\x0a\x20\ -\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\ -\x22\x31\x32\x2e\x34\x30\x39\x37\x39\x37\x22\x0a\x20\x20\x20\x20\ -\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x32\ -\x2e\x38\x32\x38\x32\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ -\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x32\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\x69\x64\x3d\x22\ -\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x31\x30\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\x39\x35\x39\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\x35\x34\x32\x22\ +\x6e\x6f\x22\x3f\x3e\x0d\x0a\x3c\x73\x76\x67\x0d\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\x0d\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\x0d\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\x0d\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\ +\x0d\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\x0d\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\x0d\ +\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\ +\x0d\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\ +\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x30\x72\x63\x31\x20\x28\x30\ +\x39\x39\x36\x30\x64\x36\x66\x30\x35\x2c\x20\x32\x30\x32\x30\x2d\ +\x30\x34\x2d\x30\x39\x29\x22\x0d\x0a\x20\x20\x20\x73\x6f\x64\x69\ +\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x61\x6c\ +\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\x2d\x72\x65\x64\x2e\ +\x73\x76\x67\x22\x0d\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\ +\x38\x22\x0d\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\ +\x31\x2e\x31\x22\x0d\x0a\x20\x20\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x66\x65\x61\x74\x68\x65\x72\x20\x66\x65\x61\x74\x68\x65\x72\x2d\ +\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\x22\x0d\x0a\ +\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\ +\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\ +\x6f\x75\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x0d\x0a\x20\x20\x20\x73\ +\x74\x72\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\ +\x6c\x6f\x72\x22\x0d\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\ +\x6f\x6e\x65\x22\x0d\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\ +\x3d\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0d\x0a\x20\x20\ +\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x0d\x0a\x20\x20\ +\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x3e\x0d\x0a\x20\x20\ +\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0d\x0a\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x31\x34\x22\x3e\ +\x0d\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0d\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\ +\x6f\x75\x74\x3d\x22\x22\x3e\x0d\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\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x64\x63\x3a\x74\x79\x70\x65\x0d\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\x0d\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\x0d\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0d\x0a\x20\ +\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\x0a\x20\ +\x20\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0d\x0a\x20\x20\ +\x3c\x64\x65\x66\x73\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x64\x65\x66\x73\x31\x32\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x73\ +\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\ +\x77\x0d\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\ +\x73\x76\x67\x38\x22\x0d\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\x30\x22\x0d\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\x32\x38\x31\x22\x0d\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\x31\x34\x33\x33\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x31\x32\x2e\x34\x30\x39\ +\x37\x39\x37\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x32\x2e\x38\x32\x38\x32\x31\ +\x36\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x32\x31\x22\x0d\x0a\x20\x20\x20\ +\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x66\x61\x6c\x73\ +\x65\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6e\x61\x6d\ +\x65\x64\x76\x69\x65\x77\x31\x30\x22\x0d\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\x39\x35\x39\x22\x0d\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\x35\x34\x32\x22\x0d\ \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\x70\x61\x67\x65\ -\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ -\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\ -\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x67\x72\x69\x64\x74\x6f\ -\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\ -\x20\x20\x6f\x62\x6a\x65\x63\x74\x74\x6f\x6c\x65\x72\x61\x6e\x63\ -\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\ -\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\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\x70\x61\ -\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\ -\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x0a\ -\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\ -\x3a\x23\x30\x30\x66\x66\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x69\ -\x64\x3d\x22\x70\x6f\x6c\x79\x67\x6f\x6e\x32\x22\x0a\x20\x20\x20\ -\x20\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x37\x2e\x38\x36\x20\x32\ -\x20\x31\x36\x2e\x31\x34\x20\x32\x20\x32\x32\x20\x37\x2e\x38\x36\ -\x20\x32\x32\x20\x31\x36\x2e\x31\x34\x20\x31\x36\x2e\x31\x34\x20\ -\x32\x32\x20\x37\x2e\x38\x36\x20\x32\x32\x20\x32\x20\x31\x36\x2e\ -\x31\x34\x20\x32\x20\x37\x2e\x38\x36\x20\x37\x2e\x38\x36\x20\x32\ -\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0a\x20\x20\x20\ -\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x34\x22\x0a\x20\x20\x20\ -\x20\x20\x79\x32\x3d\x22\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x78\ -\x32\x3d\x22\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\x22\ -\x38\x22\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\x22\x20\ -\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0a\x20\x20\x20\x20\x20\ -\x69\x64\x3d\x22\x6c\x69\x6e\x65\x36\x22\x0a\x20\x20\x20\x20\x20\ -\x79\x32\x3d\x22\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x78\x32\x3d\ -\x22\x31\x32\x2e\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\ -\x22\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\ -\x22\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0d\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\x22\x0d\x0a\x20\x20\ +\x20\x20\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\x65\x72\x61\x6e\x63\ +\x65\x3d\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x67\x72\x69\ +\x64\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\ +\x0a\x20\x20\x20\x20\x20\x6f\x62\x6a\x65\x63\x74\x74\x6f\x6c\x65\ +\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\ +\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\ +\x31\x22\x0d\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\x0d\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\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\ +\x70\x6f\x6c\x79\x67\x6f\x6e\x0d\x0a\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x66\x66\x30\ +\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x6f\x6c\ +\x79\x67\x6f\x6e\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x70\x6f\x69\ +\x6e\x74\x73\x3d\x22\x37\x2e\x38\x36\x20\x32\x20\x31\x36\x2e\x31\ +\x34\x20\x32\x20\x32\x32\x20\x37\x2e\x38\x36\x20\x32\x32\x20\x31\ +\x36\x2e\x31\x34\x20\x31\x36\x2e\x31\x34\x20\x32\x32\x20\x37\x2e\ +\x38\x36\x20\x32\x32\x20\x32\x20\x31\x36\x2e\x31\x34\x20\x32\x20\ +\x37\x2e\x38\x36\x20\x37\x2e\x38\x36\x20\x32\x22\x20\x2f\x3e\x0d\ +\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0d\x0a\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x6c\x69\x6e\x65\x34\x22\x0d\x0a\x20\x20\x20\x20\x20\ +\x79\x32\x3d\x22\x31\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x78\x32\ +\x3d\x22\x31\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\x22\ +\x38\x22\x0d\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\x22\ +\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0d\x0a\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x36\x22\x0d\x0a\x20\ +\x20\x20\x20\x20\x79\x32\x3d\x22\x31\x36\x22\x0d\x0a\x20\x20\x20\ +\x20\x20\x78\x32\x3d\x22\x31\x32\x2e\x30\x31\x22\x0d\x0a\x20\x20\ +\x20\x20\x20\x79\x31\x3d\x22\x31\x36\x22\x0d\x0a\x20\x20\x20\x20\ +\x20\x78\x31\x3d\x22\x31\x32\x22\x20\x2f\x3e\x0d\x0a\x3c\x2f\x73\ +\x76\x67\x3e\x0d\x0a\ \x00\x00\x01\x90\ \x3c\ \x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\ @@ -918,233 +969,239 @@ \x20\x79\x31\x3d\x22\x39\x22\x20\x78\x32\x3d\x22\x31\x38\x22\x20\ \x79\x32\x3d\x22\x31\x35\x22\x3e\x3c\x2f\x6c\x69\x6e\x65\x3e\x3c\ \x2f\x73\x76\x67\x3e\ -\x00\x00\x07\x9d\ +\x00\x00\x07\xe6\ \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\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\x69\x6e\x6b\x73\ -\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ -\x30\x72\x63\x31\x20\x28\x30\x39\x39\x36\x30\x64\x36\x66\x30\x35\ -\x2c\x20\x32\x30\x32\x30\x2d\x30\x34\x2d\x30\x39\x29\x22\x0a\x20\ -\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\ -\x6d\x65\x3d\x22\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\ -\x6e\x2d\x72\x65\x64\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x64\ -\x3d\x22\x73\x76\x67\x38\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\ -\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x20\x20\x20\x63\x6c\x61\x73\ -\x73\x3d\x22\x66\x65\x61\x74\x68\x65\x72\x20\x66\x65\x61\x74\x68\ -\x65\x72\x2d\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\ -\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\ -\x6a\x6f\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\ -\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\ -\x72\x6f\x75\x6e\x64\x22\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\ -\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x0a\x20\x20\x20\x73\x74\ -\x72\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\x6c\ -\x6f\x72\x22\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\x6f\x6e\ -\x65\x22\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\ -\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0a\x20\x20\x20\x68\x65\x69\ -\x67\x68\x74\x3d\x22\x32\x34\x22\x0a\x20\x20\x20\x77\x69\x64\x74\ -\x68\x3d\x22\x32\x34\x22\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\ -\x61\x74\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\ -\x61\x64\x61\x74\x61\x31\x34\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\ -\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\ -\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ -\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\ -\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\ -\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\ -\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\ -\x20\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\ -\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\ -\x72\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\ -\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\ -\x2f\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\ -\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\ -\x65\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\ -\x20\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\ -\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\ -\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x64\ -\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\ -\x73\x31\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\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\x72\ -\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x73\x76\x67\x38\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\x30\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\x32\x38\x31\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\x31\x34\x33\x33\x22\x0a\x20\ -\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\ -\x22\x31\x32\x2e\x34\x30\x39\x37\x39\x37\x22\x0a\x20\x20\x20\x20\ -\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x32\ -\x2e\x38\x32\x38\x32\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ -\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x32\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\x69\x64\x3d\x22\ -\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x31\x30\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\x39\x35\x39\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\x35\x34\x32\x22\ +\x6e\x6f\x22\x3f\x3e\x0d\x0a\x3c\x73\x76\x67\x0d\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\x0d\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\x0d\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\x0d\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\ +\x0d\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\x0d\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\x0d\ +\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\ +\x0d\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\ +\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x30\x72\x63\x31\x20\x28\x30\ +\x39\x39\x36\x30\x64\x36\x66\x30\x35\x2c\x20\x32\x30\x32\x30\x2d\ +\x30\x34\x2d\x30\x39\x29\x22\x0d\x0a\x20\x20\x20\x73\x6f\x64\x69\ +\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x61\x6c\ +\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\x2d\x72\x65\x64\x2e\ +\x73\x76\x67\x22\x0d\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\ +\x38\x22\x0d\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\ +\x31\x2e\x31\x22\x0d\x0a\x20\x20\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x66\x65\x61\x74\x68\x65\x72\x20\x66\x65\x61\x74\x68\x65\x72\x2d\ +\x61\x6c\x65\x72\x74\x2d\x6f\x63\x74\x61\x67\x6f\x6e\x22\x0d\x0a\ +\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\ +\x69\x6e\x3d\x22\x72\x6f\x75\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x22\x72\ +\x6f\x75\x6e\x64\x22\x0d\x0a\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x0d\x0a\x20\x20\x20\x73\ +\x74\x72\x6f\x6b\x65\x3d\x22\x63\x75\x72\x72\x65\x6e\x74\x43\x6f\ +\x6c\x6f\x72\x22\x0d\x0a\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x6e\ +\x6f\x6e\x65\x22\x0d\x0a\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\ +\x3d\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x0d\x0a\x20\x20\ +\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x34\x22\x0d\x0a\x20\x20\ +\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x22\x3e\x0d\x0a\x20\x20\ +\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0d\x0a\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x31\x34\x22\x3e\ +\x0d\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0d\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\ +\x6f\x75\x74\x3d\x22\x22\x3e\x0d\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\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x64\x63\x3a\x74\x79\x70\x65\x0d\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\x0d\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\x0d\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0d\x0a\x20\ +\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0d\x0a\x20\ +\x20\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0d\x0a\x20\x20\ +\x3c\x64\x65\x66\x73\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x64\x65\x66\x73\x31\x32\x22\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x73\ +\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\ +\x77\x0d\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\ +\x73\x76\x67\x38\x22\x0d\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\x30\x22\x0d\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\x32\x38\x31\x22\x0d\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\x31\x34\x33\x33\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x31\x32\x2e\x34\x30\x39\ +\x37\x39\x37\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x32\x2e\x38\x32\x38\x32\x31\ +\x36\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x32\x31\x22\x0d\x0a\x20\x20\x20\ +\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x66\x61\x6c\x73\ +\x65\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6e\x61\x6d\ +\x65\x64\x76\x69\x65\x77\x31\x30\x22\x0d\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\x39\x35\x39\x22\x0d\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\x35\x34\x32\x22\x0d\ \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\x70\x61\x67\x65\ -\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ -\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\ -\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x67\x72\x69\x64\x74\x6f\ -\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\ -\x20\x20\x6f\x62\x6a\x65\x63\x74\x74\x6f\x6c\x65\x72\x61\x6e\x63\ -\x65\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\ -\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\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\x70\x61\ -\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\ -\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x0a\ -\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\ -\x3a\x23\x66\x66\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x69\ -\x64\x3d\x22\x70\x6f\x6c\x79\x67\x6f\x6e\x32\x22\x0a\x20\x20\x20\ -\x20\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x37\x2e\x38\x36\x20\x32\ -\x20\x31\x36\x2e\x31\x34\x20\x32\x20\x32\x32\x20\x37\x2e\x38\x36\ -\x20\x32\x32\x20\x31\x36\x2e\x31\x34\x20\x31\x36\x2e\x31\x34\x20\ -\x32\x32\x20\x37\x2e\x38\x36\x20\x32\x32\x20\x32\x20\x31\x36\x2e\ -\x31\x34\x20\x32\x20\x37\x2e\x38\x36\x20\x37\x2e\x38\x36\x20\x32\ -\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0a\x20\x20\x20\ -\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x34\x22\x0a\x20\x20\x20\ -\x20\x20\x79\x32\x3d\x22\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x78\ -\x32\x3d\x22\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\x22\ -\x38\x22\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\x22\x20\ -\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0a\x20\x20\x20\x20\x20\ -\x69\x64\x3d\x22\x6c\x69\x6e\x65\x36\x22\x0a\x20\x20\x20\x20\x20\ -\x79\x32\x3d\x22\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x78\x32\x3d\ -\x22\x31\x32\x2e\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\ -\x22\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\ -\x22\x20\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ -\x00\x00\x06\x4c\ +\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0d\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\x22\x0d\x0a\x20\x20\ +\x20\x20\x20\x67\x75\x69\x64\x65\x74\x6f\x6c\x65\x72\x61\x6e\x63\ +\x65\x3d\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x67\x72\x69\ +\x64\x74\x6f\x6c\x65\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\ +\x0a\x20\x20\x20\x20\x20\x6f\x62\x6a\x65\x63\x74\x74\x6f\x6c\x65\ +\x72\x61\x6e\x63\x65\x3d\x22\x31\x30\x22\x0d\x0a\x20\x20\x20\x20\ +\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\ +\x31\x22\x0d\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\x0d\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\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\ +\x70\x6f\x6c\x79\x67\x6f\x6e\x0d\x0a\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x30\x30\x30\ +\x30\x22\x0d\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x6f\x6c\ +\x79\x67\x6f\x6e\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x70\x6f\x69\ +\x6e\x74\x73\x3d\x22\x37\x2e\x38\x36\x20\x32\x20\x31\x36\x2e\x31\ +\x34\x20\x32\x20\x32\x32\x20\x37\x2e\x38\x36\x20\x32\x32\x20\x31\ +\x36\x2e\x31\x34\x20\x31\x36\x2e\x31\x34\x20\x32\x32\x20\x37\x2e\ +\x38\x36\x20\x32\x32\x20\x32\x20\x31\x36\x2e\x31\x34\x20\x32\x20\ +\x37\x2e\x38\x36\x20\x37\x2e\x38\x36\x20\x32\x22\x20\x2f\x3e\x0d\ +\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0d\x0a\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x6c\x69\x6e\x65\x34\x22\x0d\x0a\x20\x20\x20\x20\x20\ +\x79\x32\x3d\x22\x31\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x78\x32\ +\x3d\x22\x31\x32\x22\x0d\x0a\x20\x20\x20\x20\x20\x79\x31\x3d\x22\ +\x38\x22\x0d\x0a\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\x22\ +\x20\x2f\x3e\x0d\x0a\x20\x20\x3c\x6c\x69\x6e\x65\x0d\x0a\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x36\x22\x0d\x0a\x20\ +\x20\x20\x20\x20\x79\x32\x3d\x22\x31\x36\x22\x0d\x0a\x20\x20\x20\ +\x20\x20\x78\x32\x3d\x22\x31\x32\x2e\x30\x31\x22\x0d\x0a\x20\x20\ +\x20\x20\x20\x79\x31\x3d\x22\x31\x36\x22\x0d\x0a\x20\x20\x20\x20\ +\x20\x78\x31\x3d\x22\x31\x32\x22\x20\x2f\x3e\x0d\x0a\x3c\x2f\x73\ +\x76\x67\x3e\x0d\x0a\ +\x00\x00\x06\x53\ \x3c\ \x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\x22\x38\x30\x22\x20\x68\ \x65\x69\x67\x68\x74\x3d\x22\x38\x30\x22\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\x20\x66\x69\ -\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x3e\x0a\x20\x3c\x67\x3e\x0a\ -\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x4c\x61\x79\x65\x72\x20\x31\ -\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\ -\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\ -\x6f\x64\x64\x22\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\ -\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x64\x3d\x22\x6d\x33\x33\x2e\ -\x39\x32\x35\x36\x2c\x39\x2e\x36\x39\x33\x32\x34\x63\x2d\x30\x2e\ -\x37\x36\x30\x38\x2c\x30\x20\x2d\x31\x2e\x34\x38\x30\x32\x2c\x30\ -\x2e\x33\x34\x36\x34\x33\x20\x2d\x31\x2e\x39\x35\x34\x35\x2c\x30\ -\x2e\x39\x34\x31\x32\x33\x6c\x2d\x35\x2e\x33\x32\x31\x2c\x36\x2e\ -\x36\x37\x32\x33\x6c\x2d\x31\x31\x2e\x36\x35\x30\x31\x2c\x30\x63\ -\x2d\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\x35\x2c\x31\ -\x2e\x31\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x32\x2e\x35\x63\x30\ -\x2c\x31\x2e\x33\x38\x30\x37\x20\x31\x2e\x31\x31\x39\x33\x2c\x32\ -\x2e\x35\x20\x32\x2e\x35\x2c\x32\x2e\x35\x6c\x31\x2e\x35\x2c\x30\ -\x6c\x30\x2c\x34\x31\x2e\x35\x63\x30\x2c\x33\x2e\x35\x38\x39\x39\ -\x20\x32\x2e\x39\x31\x30\x31\x2c\x36\x2e\x35\x20\x36\x2e\x35\x2c\ -\x36\x2e\x35\x6c\x33\x34\x2c\x30\x63\x33\x2e\x35\x38\x39\x38\x2c\ -\x30\x20\x36\x2e\x35\x2c\x2d\x32\x2e\x39\x31\x30\x31\x20\x36\x2e\ -\x35\x2c\x2d\x36\x2e\x35\x6c\x30\x2c\x2d\x34\x31\x2e\x35\x6c\x31\ -\x2e\x35\x2c\x30\x63\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x32\x2e\ -\x35\x2c\x2d\x31\x2e\x31\x31\x39\x33\x20\x32\x2e\x35\x2c\x2d\x32\ -\x2e\x35\x63\x30\x2c\x2d\x31\x2e\x33\x38\x30\x37\x20\x2d\x31\x2e\ -\x31\x31\x39\x33\x2c\x2d\x32\x2e\x35\x20\x2d\x32\x2e\x35\x2c\x2d\ -\x32\x2e\x35\x6c\x2d\x31\x31\x2e\x36\x35\x30\x31\x2c\x30\x6c\x2d\ -\x35\x2e\x33\x32\x30\x39\x2c\x2d\x36\x2e\x36\x37\x32\x32\x63\x2d\ -\x30\x2e\x34\x37\x34\x34\x2c\x2d\x30\x2e\x35\x39\x34\x39\x20\x2d\ -\x31\x2e\x31\x39\x33\x38\x2c\x2d\x30\x2e\x39\x34\x31\x33\x33\x20\ -\x2d\x31\x2e\x39\x35\x34\x36\x2c\x2d\x30\x2e\x39\x34\x31\x33\x33\ -\x6c\x2d\x31\x32\x2e\x31\x34\x38\x38\x2c\x30\x7a\x6d\x2d\x30\x2e\ -\x39\x32\x35\x36\x2c\x31\x37\x2e\x36\x31\x33\x35\x33\x63\x31\x2e\ -\x33\x38\x30\x37\x2c\x30\x20\x32\x2e\x35\x2c\x31\x2e\x31\x31\x39\ -\x33\x20\x32\x2e\x35\x2c\x32\x2e\x35\x6c\x30\x2c\x32\x38\x63\x30\ -\x2c\x31\x2e\x33\x38\x30\x37\x20\x2d\x31\x2e\x31\x31\x39\x33\x2c\ -\x32\x2e\x35\x20\x2d\x32\x2e\x35\x2c\x32\x2e\x35\x63\x2d\x31\x2e\ -\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\x35\x2c\x2d\x31\x2e\x31\ -\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x2d\x32\x2e\x35\x6c\x30\x2c\ -\x2d\x32\x38\x63\x30\x2c\x2d\x31\x2e\x33\x38\x30\x37\x20\x31\x2e\ -\x31\x31\x39\x33\x2c\x2d\x32\x2e\x35\x20\x32\x2e\x35\x2c\x2d\x32\ -\x2e\x35\x7a\x6d\x31\x36\x2e\x35\x2c\x32\x2e\x35\x63\x30\x2c\x2d\ -\x31\x2e\x33\x38\x30\x37\x20\x2d\x31\x2e\x31\x31\x39\x33\x2c\x2d\ -\x32\x2e\x35\x20\x2d\x32\x2e\x35\x2c\x2d\x32\x2e\x35\x63\x2d\x31\ -\x2e\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\x35\x2c\x31\x2e\x31\ -\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x32\x2e\x35\x6c\x30\x2c\x32\ -\x38\x63\x30\x2c\x31\x2e\x33\x38\x30\x37\x20\x31\x2e\x31\x31\x39\ -\x33\x2c\x32\x2e\x35\x20\x32\x2e\x35\x2c\x32\x2e\x35\x63\x31\x2e\ -\x33\x38\x30\x37\x2c\x30\x20\x32\x2e\x35\x2c\x2d\x31\x2e\x31\x31\ -\x39\x33\x20\x32\x2e\x35\x2c\x2d\x32\x2e\x35\x6c\x30\x2c\x2d\x32\ -\x38\x7a\x6d\x2d\x32\x2e\x35\x34\x36\x34\x2c\x2d\x31\x32\x2e\x35\ -\x30\x31\x34\x6c\x2d\x32\x2e\x30\x38\x33\x32\x2c\x2d\x32\x2e\x36\ -\x31\x32\x31\x6c\x2d\x39\x2e\x37\x34\x30\x38\x2c\x30\x6c\x2d\x32\ -\x2e\x30\x38\x33\x32\x2c\x32\x2e\x36\x31\x32\x31\x6c\x31\x33\x2e\ -\x39\x30\x37\x32\x2c\x30\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\ -\x43\x32\x43\x43\x44\x45\x22\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\ -\x31\x22\x2f\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\ -\x6c\x3d\x22\x23\x66\x66\x30\x30\x30\x30\x22\x20\x64\x3d\x22\x6d\ -\x37\x2e\x33\x33\x38\x33\x2c\x33\x39\x2e\x39\x39\x39\x39\x34\x6c\ -\x30\x2c\x30\x63\x30\x2c\x2d\x31\x38\x2e\x30\x38\x35\x33\x35\x20\ -\x31\x34\x2e\x36\x32\x33\x31\x36\x2c\x2d\x33\x32\x2e\x37\x34\x36\ -\x35\x31\x20\x33\x32\x2e\x36\x36\x31\x36\x37\x2c\x2d\x33\x32\x2e\ -\x37\x34\x36\x35\x31\x6c\x30\x2c\x30\x63\x38\x2e\x36\x36\x32\x35\ -\x33\x2c\x30\x20\x31\x36\x2e\x39\x37\x30\x32\x35\x2c\x33\x2e\x34\ -\x35\x30\x30\x38\x20\x32\x33\x2e\x30\x39\x35\x33\x32\x2c\x39\x2e\ -\x35\x39\x31\x32\x36\x63\x36\x2e\x31\x32\x35\x33\x31\x2c\x36\x2e\ -\x31\x34\x31\x31\x39\x20\x39\x2e\x35\x36\x36\x34\x32\x2c\x31\x34\ -\x2e\x34\x37\x30\x34\x34\x20\x39\x2e\x35\x36\x36\x34\x32\x2c\x32\ -\x33\x2e\x31\x35\x35\x32\x34\x6c\x30\x2c\x30\x63\x30\x2c\x31\x38\ -\x2e\x30\x38\x35\x35\x36\x20\x2d\x31\x34\x2e\x36\x32\x33\x30\x35\ -\x2c\x33\x32\x2e\x37\x34\x36\x36\x33\x20\x2d\x33\x32\x2e\x36\x36\ -\x31\x37\x33\x2c\x33\x32\x2e\x37\x34\x36\x36\x33\x6c\x30\x2c\x30\ -\x63\x2d\x31\x38\x2e\x30\x33\x38\x35\x31\x2c\x30\x20\x2d\x33\x32\ -\x2e\x36\x36\x31\x36\x37\x2c\x2d\x31\x34\x2e\x36\x36\x31\x30\x36\ -\x20\x2d\x33\x32\x2e\x36\x36\x31\x36\x37\x2c\x2d\x33\x32\x2e\x37\ -\x34\x36\x36\x33\x63\x30\x2c\x30\x20\x30\x2c\x30\x20\x30\x2c\x30\ -\x6c\x2d\x30\x2e\x30\x30\x30\x30\x31\x2c\x30\x7a\x6d\x35\x32\x2e\ -\x37\x34\x31\x32\x31\x2c\x31\x34\x2e\x36\x34\x39\x31\x36\x6c\x30\ -\x2c\x30\x63\x37\x2e\x31\x39\x31\x30\x32\x2c\x2d\x39\x2e\x39\x30\ -\x38\x33\x34\x20\x36\x2e\x31\x32\x32\x30\x39\x2c\x2d\x32\x33\x2e\ -\x35\x38\x39\x34\x38\x20\x2d\x32\x2e\x35\x32\x30\x31\x35\x2c\x2d\ -\x33\x32\x2e\x32\x35\x34\x30\x37\x63\x2d\x38\x2e\x36\x34\x32\x32\ -\x35\x2c\x2d\x38\x2e\x36\x36\x34\x36\x36\x20\x2d\x32\x32\x2e\x32\ -\x38\x37\x39\x33\x2c\x2d\x39\x2e\x37\x33\x36\x33\x37\x20\x2d\x33\ -\x32\x2e\x31\x37\x30\x33\x33\x2c\x2d\x32\x2e\x35\x32\x36\x35\x38\ -\x6c\x33\x34\x2e\x36\x39\x30\x34\x37\x2c\x33\x34\x2e\x37\x38\x30\ -\x36\x35\x6c\x30\x2e\x30\x30\x30\x30\x31\x2c\x30\x7a\x6d\x2d\x34\ -\x30\x2e\x31\x35\x38\x38\x39\x2c\x2d\x32\x39\x2e\x32\x39\x38\x30\ -\x31\x63\x2d\x37\x2e\x31\x39\x31\x30\x37\x2c\x39\x2e\x39\x30\x38\ -\x32\x38\x20\x2d\x36\x2e\x31\x32\x32\x31\x37\x2c\x32\x33\x2e\x35\ -\x38\x39\x34\x33\x20\x32\x2e\x35\x32\x30\x30\x32\x2c\x33\x32\x2e\ -\x32\x35\x33\x39\x63\x38\x2e\x36\x34\x32\x31\x37\x2c\x38\x2e\x36\ -\x36\x34\x37\x31\x20\x32\x32\x2e\x32\x38\x37\x38\x35\x2c\x39\x2e\ -\x37\x33\x36\x34\x31\x20\x33\x32\x2e\x31\x37\x30\x32\x35\x2c\x32\ -\x2e\x35\x32\x36\x37\x6c\x2d\x33\x34\x2e\x36\x39\x30\x32\x38\x2c\ -\x2d\x33\x34\x2e\x37\x38\x30\x35\x39\x6c\x30\x2c\x30\x6c\x30\x2e\ -\x30\x30\x30\x30\x31\x2c\x2d\x30\x2e\x30\x30\x30\x30\x31\x7a\x22\ -\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x33\x22\x2f\x3e\x0a\x20\x3c\ -\x2f\x67\x3e\x0a\x0a\x3c\x2f\x73\x76\x67\x3e\ +\x6c\x6c\x3d\x22\x6e\x6f\x6e\x65\x22\x3e\x0d\x0a\x20\x3c\x67\x3e\ +\x0d\x0a\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x4c\x61\x79\x65\x72\ +\x20\x31\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0d\x0a\x20\x20\x3c\x70\ +\x61\x74\x68\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3d\x22\x65\ +\x76\x65\x6e\x6f\x64\x64\x22\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\ +\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x20\x64\x3d\x22\x6d\ +\x33\x33\x2e\x39\x32\x35\x36\x2c\x39\x2e\x36\x39\x33\x32\x34\x63\ +\x2d\x30\x2e\x37\x36\x30\x38\x2c\x30\x20\x2d\x31\x2e\x34\x38\x30\ +\x32\x2c\x30\x2e\x33\x34\x36\x34\x33\x20\x2d\x31\x2e\x39\x35\x34\ +\x35\x2c\x30\x2e\x39\x34\x31\x32\x33\x6c\x2d\x35\x2e\x33\x32\x31\ +\x2c\x36\x2e\x36\x37\x32\x33\x6c\x2d\x31\x31\x2e\x36\x35\x30\x31\ +\x2c\x30\x63\x2d\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\ +\x35\x2c\x31\x2e\x31\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x32\x2e\ +\x35\x63\x30\x2c\x31\x2e\x33\x38\x30\x37\x20\x31\x2e\x31\x31\x39\ +\x33\x2c\x32\x2e\x35\x20\x32\x2e\x35\x2c\x32\x2e\x35\x6c\x31\x2e\ +\x35\x2c\x30\x6c\x30\x2c\x34\x31\x2e\x35\x63\x30\x2c\x33\x2e\x35\ +\x38\x39\x39\x20\x32\x2e\x39\x31\x30\x31\x2c\x36\x2e\x35\x20\x36\ +\x2e\x35\x2c\x36\x2e\x35\x6c\x33\x34\x2c\x30\x63\x33\x2e\x35\x38\ +\x39\x38\x2c\x30\x20\x36\x2e\x35\x2c\x2d\x32\x2e\x39\x31\x30\x31\ +\x20\x36\x2e\x35\x2c\x2d\x36\x2e\x35\x6c\x30\x2c\x2d\x34\x31\x2e\ +\x35\x6c\x31\x2e\x35\x2c\x30\x63\x31\x2e\x33\x38\x30\x37\x2c\x30\ +\x20\x32\x2e\x35\x2c\x2d\x31\x2e\x31\x31\x39\x33\x20\x32\x2e\x35\ +\x2c\x2d\x32\x2e\x35\x63\x30\x2c\x2d\x31\x2e\x33\x38\x30\x37\x20\ +\x2d\x31\x2e\x31\x31\x39\x33\x2c\x2d\x32\x2e\x35\x20\x2d\x32\x2e\ +\x35\x2c\x2d\x32\x2e\x35\x6c\x2d\x31\x31\x2e\x36\x35\x30\x31\x2c\ +\x30\x6c\x2d\x35\x2e\x33\x32\x30\x39\x2c\x2d\x36\x2e\x36\x37\x32\ +\x32\x63\x2d\x30\x2e\x34\x37\x34\x34\x2c\x2d\x30\x2e\x35\x39\x34\ +\x39\x20\x2d\x31\x2e\x31\x39\x33\x38\x2c\x2d\x30\x2e\x39\x34\x31\ +\x33\x33\x20\x2d\x31\x2e\x39\x35\x34\x36\x2c\x2d\x30\x2e\x39\x34\ +\x31\x33\x33\x6c\x2d\x31\x32\x2e\x31\x34\x38\x38\x2c\x30\x7a\x6d\ +\x2d\x30\x2e\x39\x32\x35\x36\x2c\x31\x37\x2e\x36\x31\x33\x35\x33\ +\x63\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x32\x2e\x35\x2c\x31\x2e\ +\x31\x31\x39\x33\x20\x32\x2e\x35\x2c\x32\x2e\x35\x6c\x30\x2c\x32\ +\x38\x63\x30\x2c\x31\x2e\x33\x38\x30\x37\x20\x2d\x31\x2e\x31\x31\ +\x39\x33\x2c\x32\x2e\x35\x20\x2d\x32\x2e\x35\x2c\x32\x2e\x35\x63\ +\x2d\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\x35\x2c\x2d\ +\x31\x2e\x31\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x2d\x32\x2e\x35\ +\x6c\x30\x2c\x2d\x32\x38\x63\x30\x2c\x2d\x31\x2e\x33\x38\x30\x37\ +\x20\x31\x2e\x31\x31\x39\x33\x2c\x2d\x32\x2e\x35\x20\x32\x2e\x35\ +\x2c\x2d\x32\x2e\x35\x7a\x6d\x31\x36\x2e\x35\x2c\x32\x2e\x35\x63\ +\x30\x2c\x2d\x31\x2e\x33\x38\x30\x37\x20\x2d\x31\x2e\x31\x31\x39\ +\x33\x2c\x2d\x32\x2e\x35\x20\x2d\x32\x2e\x35\x2c\x2d\x32\x2e\x35\ +\x63\x2d\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x2d\x32\x2e\x35\x2c\ +\x31\x2e\x31\x31\x39\x33\x20\x2d\x32\x2e\x35\x2c\x32\x2e\x35\x6c\ +\x30\x2c\x32\x38\x63\x30\x2c\x31\x2e\x33\x38\x30\x37\x20\x31\x2e\ +\x31\x31\x39\x33\x2c\x32\x2e\x35\x20\x32\x2e\x35\x2c\x32\x2e\x35\ +\x63\x31\x2e\x33\x38\x30\x37\x2c\x30\x20\x32\x2e\x35\x2c\x2d\x31\ +\x2e\x31\x31\x39\x33\x20\x32\x2e\x35\x2c\x2d\x32\x2e\x35\x6c\x30\ +\x2c\x2d\x32\x38\x7a\x6d\x2d\x32\x2e\x35\x34\x36\x34\x2c\x2d\x31\ +\x32\x2e\x35\x30\x31\x34\x6c\x2d\x32\x2e\x30\x38\x33\x32\x2c\x2d\ +\x32\x2e\x36\x31\x32\x31\x6c\x2d\x39\x2e\x37\x34\x30\x38\x2c\x30\ +\x6c\x2d\x32\x2e\x30\x38\x33\x32\x2c\x32\x2e\x36\x31\x32\x31\x6c\ +\x31\x33\x2e\x39\x30\x37\x32\x2c\x30\x7a\x22\x20\x66\x69\x6c\x6c\ +\x3d\x22\x23\x43\x32\x43\x43\x44\x45\x22\x20\x69\x64\x3d\x22\x73\ +\x76\x67\x5f\x31\x22\x2f\x3e\x0d\x0a\x20\x20\x3c\x70\x61\x74\x68\ +\x20\x66\x69\x6c\x6c\x3d\x22\x23\x66\x66\x30\x30\x30\x30\x22\x20\ +\x64\x3d\x22\x6d\x37\x2e\x33\x33\x38\x33\x2c\x33\x39\x2e\x39\x39\ +\x39\x39\x34\x6c\x30\x2c\x30\x63\x30\x2c\x2d\x31\x38\x2e\x30\x38\ +\x35\x33\x35\x20\x31\x34\x2e\x36\x32\x33\x31\x36\x2c\x2d\x33\x32\ +\x2e\x37\x34\x36\x35\x31\x20\x33\x32\x2e\x36\x36\x31\x36\x37\x2c\ +\x2d\x33\x32\x2e\x37\x34\x36\x35\x31\x6c\x30\x2c\x30\x63\x38\x2e\ +\x36\x36\x32\x35\x33\x2c\x30\x20\x31\x36\x2e\x39\x37\x30\x32\x35\ +\x2c\x33\x2e\x34\x35\x30\x30\x38\x20\x32\x33\x2e\x30\x39\x35\x33\ +\x32\x2c\x39\x2e\x35\x39\x31\x32\x36\x63\x36\x2e\x31\x32\x35\x33\ +\x31\x2c\x36\x2e\x31\x34\x31\x31\x39\x20\x39\x2e\x35\x36\x36\x34\ +\x32\x2c\x31\x34\x2e\x34\x37\x30\x34\x34\x20\x39\x2e\x35\x36\x36\ +\x34\x32\x2c\x32\x33\x2e\x31\x35\x35\x32\x34\x6c\x30\x2c\x30\x63\ +\x30\x2c\x31\x38\x2e\x30\x38\x35\x35\x36\x20\x2d\x31\x34\x2e\x36\ +\x32\x33\x30\x35\x2c\x33\x32\x2e\x37\x34\x36\x36\x33\x20\x2d\x33\ +\x32\x2e\x36\x36\x31\x37\x33\x2c\x33\x32\x2e\x37\x34\x36\x36\x33\ +\x6c\x30\x2c\x30\x63\x2d\x31\x38\x2e\x30\x33\x38\x35\x31\x2c\x30\ +\x20\x2d\x33\x32\x2e\x36\x36\x31\x36\x37\x2c\x2d\x31\x34\x2e\x36\ +\x36\x31\x30\x36\x20\x2d\x33\x32\x2e\x36\x36\x31\x36\x37\x2c\x2d\ +\x33\x32\x2e\x37\x34\x36\x36\x33\x63\x30\x2c\x30\x20\x30\x2c\x30\ +\x20\x30\x2c\x30\x6c\x2d\x30\x2e\x30\x30\x30\x30\x31\x2c\x30\x7a\ +\x6d\x35\x32\x2e\x37\x34\x31\x32\x31\x2c\x31\x34\x2e\x36\x34\x39\ +\x31\x36\x6c\x30\x2c\x30\x63\x37\x2e\x31\x39\x31\x30\x32\x2c\x2d\ +\x39\x2e\x39\x30\x38\x33\x34\x20\x36\x2e\x31\x32\x32\x30\x39\x2c\ +\x2d\x32\x33\x2e\x35\x38\x39\x34\x38\x20\x2d\x32\x2e\x35\x32\x30\ +\x31\x35\x2c\x2d\x33\x32\x2e\x32\x35\x34\x30\x37\x63\x2d\x38\x2e\ +\x36\x34\x32\x32\x35\x2c\x2d\x38\x2e\x36\x36\x34\x36\x36\x20\x2d\ +\x32\x32\x2e\x32\x38\x37\x39\x33\x2c\x2d\x39\x2e\x37\x33\x36\x33\ +\x37\x20\x2d\x33\x32\x2e\x31\x37\x30\x33\x33\x2c\x2d\x32\x2e\x35\ +\x32\x36\x35\x38\x6c\x33\x34\x2e\x36\x39\x30\x34\x37\x2c\x33\x34\ +\x2e\x37\x38\x30\x36\x35\x6c\x30\x2e\x30\x30\x30\x30\x31\x2c\x30\ +\x7a\x6d\x2d\x34\x30\x2e\x31\x35\x38\x38\x39\x2c\x2d\x32\x39\x2e\ +\x32\x39\x38\x30\x31\x63\x2d\x37\x2e\x31\x39\x31\x30\x37\x2c\x39\ +\x2e\x39\x30\x38\x32\x38\x20\x2d\x36\x2e\x31\x32\x32\x31\x37\x2c\ +\x32\x33\x2e\x35\x38\x39\x34\x33\x20\x32\x2e\x35\x32\x30\x30\x32\ +\x2c\x33\x32\x2e\x32\x35\x33\x39\x63\x38\x2e\x36\x34\x32\x31\x37\ +\x2c\x38\x2e\x36\x36\x34\x37\x31\x20\x32\x32\x2e\x32\x38\x37\x38\ +\x35\x2c\x39\x2e\x37\x33\x36\x34\x31\x20\x33\x32\x2e\x31\x37\x30\ +\x32\x35\x2c\x32\x2e\x35\x32\x36\x37\x6c\x2d\x33\x34\x2e\x36\x39\ +\x30\x32\x38\x2c\x2d\x33\x34\x2e\x37\x38\x30\x35\x39\x6c\x30\x2c\ +\x30\x6c\x30\x2e\x30\x30\x30\x30\x31\x2c\x2d\x30\x2e\x30\x30\x30\ +\x30\x31\x7a\x22\x20\x69\x64\x3d\x22\x73\x76\x67\x5f\x33\x22\x2f\ +\x3e\x0d\x0a\x20\x3c\x2f\x67\x3e\x0d\x0a\x0d\x0a\x3c\x2f\x73\x76\ +\x67\x3e\ \x00\x00\x09\x97\ \x3c\ \x73\x76\x67\x20\x66\x69\x6c\x6c\x3d\x22\x23\x30\x30\x30\x30\x30\ @@ -1324,6 +1381,10 @@ \x03\xdc\xdd\x87\ \x00\x73\ \x00\x74\x00\x61\x00\x72\x00\x2d\x00\x63\x00\x72\x00\x6f\x00\x73\x00\x73\x00\x65\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x10\ +\x05\x22\x88\x87\ +\x00\x6f\ +\x00\x72\x00\x61\x00\x6e\x00\x67\x00\x65\x00\x2d\x00\x61\x00\x6c\x00\x65\x00\x72\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x08\ \x05\x77\x54\xa7\ \x00\x6c\ @@ -1390,70 +1451,73 @@ qt_resource_struct_v1 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x00\x18\x00\x02\x00\x00\x00\x12\x00\x00\x00\x03\ +\x00\x00\x00\x18\x00\x02\x00\x00\x00\x13\x00\x00\x00\x03\ \x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\ \x00\x00\x00\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x01\x7d\ \x00\x00\x00\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x03\x21\ -\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xfe\ -\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x6e\ -\x00\x00\x00\xbc\x00\x01\x00\x00\x00\x01\x00\x00\x0d\xa5\ -\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x11\x51\ -\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x14\xf0\ -\x00\x00\x01\x04\x00\x00\x00\x00\x00\x01\x00\x00\x16\x7c\ -\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x17\xf0\ -\x00\x00\x01\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x1d\xae\ -\x00\x00\x01\x48\x00\x00\x00\x00\x00\x01\x00\x00\x22\x74\ -\x00\x00\x01\x66\x00\x00\x00\x00\x00\x01\x00\x00\x2c\x07\ -\x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x33\xa8\ -\x00\x00\x01\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x35\x3c\ -\x00\x00\x01\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xb6\ -\x00\x00\x01\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x57\ -\x00\x00\x02\x08\x00\x00\x00\x00\x00\x01\x00\x00\x44\xa7\ +\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x06\ +\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5e\ +\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xce\ +\x00\x00\x00\xe2\x00\x01\x00\x00\x00\x01\x00\x00\x10\x05\ +\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x13\xb7\ +\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x17\x58\ +\x00\x00\x01\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x18\xe4\ +\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x58\ +\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x20\x19\ +\x00\x00\x01\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x24\xe2\ +\x00\x00\x01\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xbd\ +\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xa7\ +\x00\x00\x01\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x38\x3b\ +\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x39\xb5\ +\x00\x00\x02\x06\x00\x00\x00\x00\x00\x01\x00\x00\x41\x9f\ +\x00\x00\x02\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x47\xf6\ " qt_resource_struct_v2 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd5\ -\x00\x00\x00\x18\x00\x02\x00\x00\x00\x12\x00\x00\x00\x03\ +\x00\x00\x01\x9d\xe1\x83\x22\xfc\ +\x00\x00\x00\x18\x00\x02\x00\x00\x00\x13\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd4\ +\x00\x00\x01\x9d\xe1\x83\x22\xf9\ \x00\x00\x00\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x01\x7d\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd3\ +\x00\x00\x01\x9d\xe1\x83\x22\xf5\ \x00\x00\x00\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x03\x21\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd4\ -\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xfe\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd4\ -\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x6e\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd3\ -\x00\x00\x00\xbc\x00\x01\x00\x00\x00\x01\x00\x00\x0d\xa5\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd3\ -\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x11\x51\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd5\ -\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x14\xf0\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd4\ -\x00\x00\x01\x04\x00\x00\x00\x00\x00\x01\x00\x00\x16\x7c\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd4\ -\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x17\xf0\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd5\ -\x00\x00\x01\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x1d\xae\ -\x00\x00\x01\x9a\x4b\xc3\x1d\x94\ -\x00\x00\x01\x48\x00\x00\x00\x00\x00\x01\x00\x00\x22\x74\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd3\ -\x00\x00\x01\x66\x00\x00\x00\x00\x00\x01\x00\x00\x2c\x07\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd2\ -\x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x33\xa8\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd4\ -\x00\x00\x01\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x35\x3c\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd3\ -\x00\x00\x01\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xb6\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd3\ -\x00\x00\x01\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x57\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd5\ -\x00\x00\x02\x08\x00\x00\x00\x00\x00\x01\x00\x00\x44\xa7\ -\x00\x00\x01\x95\xe8\xaa\xa9\xd4\ +\x00\x00\x01\x9d\xe1\x83\x22\xfb\ +\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x06\ +\x00\x00\x01\x9d\xfb\x58\x6d\xfe\ +\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x5e\ +\x00\x00\x01\x9d\xe1\x83\x22\xf8\ +\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xce\ +\x00\x00\x01\x9d\xe1\x83\x22\xf6\ +\x00\x00\x00\xe2\x00\x01\x00\x00\x00\x01\x00\x00\x10\x05\ +\x00\x00\x01\x9d\xe1\x83\x22\xf7\ +\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x13\xb7\ +\x00\x00\x01\x9d\xe1\x83\x22\xfc\ +\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x17\x58\ +\x00\x00\x01\x9d\xe1\x83\x22\xfa\ +\x00\x00\x01\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x18\xe4\ +\x00\x00\x01\x9d\xe1\x83\x22\xfb\ +\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x58\ +\x00\x00\x01\x9d\xe1\x83\x22\xfb\ +\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x20\x19\ +\x00\x00\x01\x9d\xe1\x83\x22\xf8\ +\x00\x00\x01\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x24\xe2\ +\x00\x00\x01\x9d\xe1\x83\x22\xf7\ +\x00\x00\x01\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xbd\ +\x00\x00\x01\x9d\xe1\x83\x22\xf4\ +\x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xa7\ +\x00\x00\x01\x9d\xe1\x83\x22\xf9\ +\x00\x00\x01\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x38\x3b\ +\x00\x00\x01\x9d\xe1\x83\x22\xf7\ +\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x39\xb5\ +\x00\x00\x01\x9d\xe1\x83\x22\xf5\ +\x00\x00\x02\x06\x00\x00\x00\x00\x00\x01\x00\x00\x41\x9f\ +\x00\x00\x01\x9d\xe1\x83\x22\xfc\ +\x00\x00\x02\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x47\xf6\ +\x00\x00\x01\x9d\xe1\x83\x22\xf9\ " qt_version = [int(v) for v in QtCore.qVersion().split(".")] diff --git a/src/instrumentserver/resource.qrc b/src/instrumentserver/resource.qrc index 995f218..18a29c6 100644 --- a/src/instrumentserver/resource.qrc +++ b/src/instrumentserver/resource.qrc @@ -7,6 +7,7 @@ resource/icons/set.svg resource/icons/alert-octagon.svg resource/icons/alert-octagon-red.svg + resource/icons/alert-octagon-orange.svg resource/icons/python.svg resource/icons/code.svg resource/icons/delete.svg diff --git a/src/instrumentserver/resource/icons/alert-octagon-orange.svg b/src/instrumentserver/resource/icons/alert-octagon-orange.svg new file mode 100644 index 0000000..061888c --- /dev/null +++ b/src/instrumentserver/resource/icons/alert-octagon-orange.svg @@ -0,0 +1,21 @@ + + + + + + diff --git a/src/instrumentserver/server/application.py b/src/instrumentserver/server/application.py index 83fcc0a..608082b 100644 --- a/src/instrumentserver/server/application.py +++ b/src/instrumentserver/server/application.py @@ -14,6 +14,7 @@ from ..gui.instruments import GenericInstrument from ..gui.misc import BaseDialog, DetachableTabWidget from ..gui.parameters import AnyInputForMethod +from ..gui.shortcuts import KeyboardShortcutManager, ShortcutEditorWidget from .core import InstrumentModuleBluePrint, ParameterBluePrint, StationServer logger = logging.getLogger(__name__) @@ -608,8 +609,11 @@ def __init__( else: self._guiConfig = guiConfig - self.stationServer = None - self.stationServerThread = None + shortcutConfig = serverKwargs.pop("shortcutConfig", {}) + configPath = serverKwargs.pop("configPath", None) + + self.stationServer: Optional[StationServer] = None + self.stationServerThread: Optional[QtCore.QThread] = None self.instrumentTabsOpen: dict[str, GenericInstrument] = {} @@ -659,6 +663,13 @@ def __init__( self.serverStatus = ServerStatus() self.tabs.addUnclosableTab(self.serverStatus, "Server") + self.shortcutManager = KeyboardShortcutManager() + if shortcutConfig: + self.shortcutManager.load_from_dict(shortcutConfig) + + self.shortcutEditor = ShortcutEditorWidget(self.shortcutManager, configPath) + self.tabs.addUnclosableTab(self.shortcutEditor, "Shortcuts") + # Toolbar. self.toolBar = self.addToolBar("Tools") self.toolBar.setIconSize(QtCore.QSize(16, 16)) # type: ignore[union-attr] @@ -715,6 +726,7 @@ def closeEvent(self, event: Optional[QtGui.QCloseEvent]) -> None: if ( hasattr(self, "stationServerThread") and self.stationServerThread is not None + and self.stationServer is not None ): if self.stationServerThread.isRunning(): try: @@ -730,29 +742,33 @@ def closeEvent(self, event: Optional[QtGui.QCloseEvent]) -> None: def startServer(self) -> None: """Start the instrument server in a separate thread.""" - self.stationServer = StationServer(**self._serverKwargs) # type: ignore[assignment] - self.stationServerThread = QtCore.QThread() # type: ignore[assignment] - self.stationServer.moveToThread(self.stationServerThread) # type: ignore[attr-defined] - self.stationServerThread.started.connect(self.stationServer.startServer) # type: ignore[arg-type,attr-defined] - self.stationServer.finished.connect(lambda: self.log("ZMQ server closed.")) # type: ignore[attr-defined] - self.stationServer.finished.connect(self.stationServerThread.quit) # type: ignore[attr-defined] - self.stationServer.finished.connect(self.stationServer.deleteLater) # type: ignore[attr-defined] + self.stationServer = StationServer(**self._serverKwargs) + self.stationServerThread = QtCore.QThread() + self.stationServer.moveToThread(self.stationServerThread) + self.stationServerThread.started.connect(self.stationServer.startServer) # type: ignore[arg-type] + self.stationServer.finished.connect(lambda: self.log("ZMQ server closed.")) + self.stationServer.finished.connect(self.stationServerThread.quit) + self.stationServer.finished.connect(self.stationServer.deleteLater) # Connecting some additional things for messages. - self.stationServer.serverStarted.connect(self.serverStatus.setListeningAddress) # type: ignore[attr-defined] - self.stationServer.serverStarted.connect(self.client.start) # type: ignore[attr-defined] - self.stationServer.serverStarted.connect(self.refreshStationComponents) # type: ignore[attr-defined] - self.stationServer.finished.connect( # type: ignore[attr-defined] + self.stationServer.serverStarted.connect(self.serverStatus.setListeningAddress) + self.stationServer.serverStarted.connect(self.client.start) + self.stationServer.serverStarted.connect(self.refreshStationComponents) + self.stationServer.finished.connect( lambda: self.log("Server thread finished.", LogLevels.info) ) - self.stationServer.messageReceived.connect(self._messageReceived) # type: ignore[attr-defined] - self.stationServer.instrumentCreated.connect(self.addInstrumentToGui) # type: ignore[attr-defined] - self.stationServer.funcCalled.connect(self.onFuncCalled) # type: ignore[attr-defined] + self.stationServer.messageReceived.connect(self._messageReceived) + self.stationServer.instrumentCreated.connect(self.addInstrumentToGui) + self.stationServer.funcCalled.connect(self.onFuncCalled) - self.stationServerThread.start() # type: ignore[attr-defined] + self.stationServerThread.start() def getServerIfRunning(self) -> Optional["StationServer"]: - if self.stationServer is not None and self.stationServerThread.isRunning(): # type: ignore[union-attr] + if ( + self.stationServer is not None + and self.stationServerThread is not None + and self.stationServerThread.isRunning() + ): return self.stationServer else: return None @@ -889,6 +905,8 @@ def addInstrumentTab(self, item: QtWidgets.QTreeWidgetItem, index: int) -> None: kwargs = self._guiConfig[name]["gui"]["kwargs"] kwargs["sub_port"] = kwargs.get("sub_port", self.stationServer.port + 1) # type: ignore[union-attr] + kwargs["shortcutManager"] = self.shortcutManager + insWidget = widgetClass(ins, parent=self, **kwargs) index = self.tabs.addTab(insWidget, ins.name) self.instrumentTabsOpen[ins.name] = insWidget diff --git a/test/pytest/test_config.py b/test/pytest/test_config.py index fdbe570..1a4e6e1 100644 --- a/test/pytest/test_config.py +++ b/test/pytest/test_config.py @@ -27,13 +27,20 @@ def test_minimal_config(tmp_path): type: instrumentserver.testing.dummy_instruments.generic.DummyInstrumentWithSubmodule """, ) - path, serverConfig, fullConfig, tempFile, pollingRates, ipAddresses = loadConfig( - cfg - ) + ( + path, + serverConfig, + fullConfig, + shortcutConfig, + tempFile, + pollingRates, + ipAddresses, + ) = loadConfig(cfg) tempFile.close() assert "my_ins" in serverConfig assert "my_ins" in fullConfig + assert shortcutConfig == {} assert pollingRates == {} assert ipAddresses == {} # returned path is a string @@ -49,7 +56,7 @@ def test_temp_file_is_readable(tmp_path): type: some.Type """, ) - tempFilePath, _, _, tempFile, _, _ = loadConfig(cfg) + tempFilePath, _, _, _, tempFile, _, _ = loadConfig(cfg) tempFile.seek(0) content = tempFile.read() assert len(content) > 0 @@ -70,7 +77,7 @@ def test_initialize_defaults_to_true(tmp_path): type: some.Type """, ) - _, serverConfig, _, tempFile, _, _ = loadConfig(cfg) + _, serverConfig, _, _, tempFile, _, _ = loadConfig(cfg) tempFile.close() assert serverConfig["my_ins"]["initialize"] is True @@ -85,7 +92,7 @@ def test_initialize_explicit_false(tmp_path): initialize: false """, ) - _, serverConfig, _, tempFile, _, _ = loadConfig(cfg) + _, serverConfig, _, _, tempFile, _, _ = loadConfig(cfg) tempFile.close() assert serverConfig["my_ins"]["initialize"] is False @@ -118,7 +125,7 @@ def test_gui_defaults_to_generic_instrument(tmp_path): type: some.Type """, ) - _, _, fullConfig, tempFile, _, _ = loadConfig(cfg) + _, _, fullConfig, _, tempFile, _, _ = loadConfig(cfg) tempFile.close() assert fullConfig["my_ins"]["gui"]["type"] == GUIFIELD["type"] @@ -134,7 +141,7 @@ def test_gui_generic_alias_maps_to_full_path(tmp_path): type: generic """, ) - _, _, fullConfig, tempFile, _, _ = loadConfig(cfg) + _, _, fullConfig, _, tempFile, _, _ = loadConfig(cfg) tempFile.close() assert fullConfig["my_ins"]["gui"]["type"] == GUIFIELD["type"] @@ -187,7 +194,7 @@ def test_polling_rate_parsed(tmp_path): param2: 200 """, ) - _, _, _, tempFile, pollingRates, _ = loadConfig(cfg) + _, _, _, _, tempFile, pollingRates, _ = loadConfig(cfg) tempFile.close() assert pollingRates == {"my_ins.param1": 100, "my_ins.param2": 200} @@ -202,7 +209,7 @@ def test_polling_rate_empty_is_ignored(tmp_path): pollingRate: """, ) - _, _, _, tempFile, pollingRates, _ = loadConfig(cfg) + _, _, _, _, tempFile, pollingRates, _ = loadConfig(cfg) tempFile.close() assert pollingRates == {} @@ -224,7 +231,7 @@ def test_networking_parsed(tmp_path): listeningAddress: 192.168.1.1 """, ) - _, _, _, tempFile, _, ipAddresses = loadConfig(cfg) + _, _, _, _, tempFile, _, ipAddresses = loadConfig(cfg) tempFile.close() assert ipAddresses["externalBroadcast"] == "tcp://192.168.1.1:5556" assert ipAddresses["listeningAddress"] == "192.168.1.1" @@ -239,7 +246,7 @@ def test_no_networking_section_gives_empty_dict(tmp_path): type: some.Type """, ) - _, _, _, tempFile, _, ipAddresses = loadConfig(cfg) + _, _, _, _, tempFile, _, ipAddresses = loadConfig(cfg) tempFile.close() assert ipAddresses == {} @@ -262,7 +269,7 @@ def test_gui_defaults_default_section(tmp_path): - IDN """, ) - _, _, fullConfig, tempFile, _, _ = loadConfig(cfg) + _, _, fullConfig, _, tempFile, _, _ = loadConfig(cfg) tempFile.close() kwargs = fullConfig["my_ins"]["gui"].get("kwargs", {}) assert "parameters-hide" in kwargs @@ -282,7 +289,7 @@ def test_gui_defaults_class_section(tmp_path): - power_level """, ) - _, _, fullConfig, tempFile, _, _ = loadConfig(cfg) + _, _, fullConfig, _, tempFile, _, _ = loadConfig(cfg) tempFile.close() kwargs = fullConfig["my_ins"]["gui"].get("kwargs", {}) assert "parameters-hide" in kwargs @@ -310,9 +317,39 @@ def test_gui_defaults_merging_order(tmp_path): - class_param """, ) - _, _, fullConfig, tempFile, _, _ = loadConfig(cfg) + _, _, fullConfig, _, tempFile, _, _ = loadConfig(cfg) tempFile.close() hide = fullConfig["my_ins"]["gui"]["kwargs"]["parameters-hide"] assert "default_param" in hide assert "class_param" in hide assert "instance_param" in hide + + +def test_shortcuts_parsed(tmp_path): + cfg = _write_config( + tmp_path, + """\ +instruments: + my_ins: + type: some.Type +shortcuts: + jump_filter: "Ctrl+G" +""", + ) + _, _, _, shortcutConfig, tempFile, _, _ = loadConfig(cfg) + tempFile.close() + assert shortcutConfig == {"jump_filter": "Ctrl+G"} + + +def test_no_shortcuts_gives_empty_dict(tmp_path): + cfg = _write_config( + tmp_path, + """\ +instruments: + my_ins: + type: some.Type +""", + ) + _, _, _, shortcutConfig, tempFile, _, _ = loadConfig(cfg) + tempFile.close() + assert shortcutConfig == {}