Converti le script en plugin #1
This commit is contained in:
parent
3093f80066
commit
691817794f
@ -1,119 +0,0 @@
|
||||
# 🄯 Association Linux-Alpes
|
||||
# Contributeurs : Jean-Christophe Becquet (APITUX), Jacky Volpes, Arnaud Champollion
|
||||
# mercredi 13 janvier 2021
|
||||
# licence GPL version 3 ou supérieure
|
||||
# ce script fait partie du projet CaliÉc
|
||||
# voir http://www.linux-alpes.org/caliec/
|
||||
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from processing.tools import dataobjects
|
||||
|
||||
def main():
|
||||
# Paramètres du projet
|
||||
tempdir = tempfile.TemporaryDirectory()
|
||||
styles_url = 'https://forge.chapril.org/linux_alpes/caliec/raw/branch/master/styles/'
|
||||
lambert93 = QgsCoordinateReferenceSystem("EPSG:2154")
|
||||
wgs = QgsCoordinateReferenceSystem("EPSG:4326")
|
||||
wgspm = QgsCoordinateReferenceSystem("EPSG:3857")
|
||||
scr = wgspm
|
||||
project = QgsProject.instance()
|
||||
project.setCrs(scr)
|
||||
options = QgsVectorFileWriter.SaveVectorOptions()
|
||||
options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteFile
|
||||
options.driverName = "GPKG"
|
||||
context = dataobjects.createContext()
|
||||
context.setInvalidGeometryCheck(QgsFeatureRequest.GeometryNoCheck)
|
||||
|
||||
# Correspondances des noms des couches et des styles:
|
||||
# "NOM_DE_LA_COUCHE_OSM": ("nom_du_style", "nom_du_layer")
|
||||
# Commenter les couches non désirées
|
||||
# L'ordre impacte directement l'ordre final des couches
|
||||
names = {
|
||||
#"OUTPUT_OTHER_RELATIONS": (None, "Autres"),
|
||||
"OUTPUT_MULTIPOLYGONS": ("multipolygon", "Surfaces"),
|
||||
#"OUTPUT_MULTILINESTRINGS": (None, "Multilignes"),
|
||||
"OUTPUT_LINES": ("linestring", "Lignes"),
|
||||
"OUTPUT_POINTS": ("point", "Points"),
|
||||
}
|
||||
|
||||
# Vérif de l'échelle
|
||||
if iface.mapCanvas().scale() > 10000:
|
||||
if QMessageBox.warning(iface.mainWindow(), "Zone étendue",
|
||||
"La zone est étendue et le téléchargement risque de prendre longtemps",
|
||||
QMessageBox.Ok | QMessageBox.Cancel) == QMessageBox.Cancel:
|
||||
return
|
||||
|
||||
# Paramétrage du dossier de travail
|
||||
settings = QSettings()
|
||||
dir = QFileDialog.getExistingDirectory(iface.mainWindow(),
|
||||
"Sélectionnez un dossier de travail",
|
||||
settings.value("caliec/workingDir"))
|
||||
if dir == "":
|
||||
return
|
||||
settings.setValue("caliec/workingDir", dir)
|
||||
workDir = Path(dir)
|
||||
|
||||
# Construction de la requête overpass
|
||||
try:
|
||||
url = processing.run("quickosm:buildqueryextent", {"EXTENT": iface.mapCanvas().extent()})["OUTPUT_URL"]
|
||||
except QgsProcessingException:
|
||||
QMessageBox.warning(iface.mainWindow(), "Attention", "Vous n'avez pas installé l'extension QuickOSM")
|
||||
return
|
||||
|
||||
# Barre de chargement animée
|
||||
qApp.setOverrideCursor(Qt.WaitCursor)
|
||||
message_bar = iface.messageBar()
|
||||
progress_bar = QProgressBar()
|
||||
progress_bar.setMaximum(0)
|
||||
widget = message_bar.createMessage("Chargement", "Récupération des data en ligne")
|
||||
widget.layout().addWidget(progress_bar)
|
||||
message_bar.pushWidget(widget)
|
||||
|
||||
# Téléchargement du fichier osm et création des couches
|
||||
osmfile = str(Path(tempdir.name) / "osm.xml")
|
||||
processing.run("native:filedownloader", {"URL": url, "OUTPUT": osmfile})
|
||||
layers = processing.run("quickosm:openosmfile", {"FILE": osmfile})
|
||||
|
||||
for osm_name, style_layer_names in names.items():
|
||||
style_name, layer_name = style_layer_names
|
||||
|
||||
# On explose les champs
|
||||
layer = processing.run("native:explodehstorefield", parameters={"INPUT": layers[osm_name], "FIELD": "other_tags", "OUTPUT": "memory:"}, context=context)["OUTPUT"]
|
||||
|
||||
# On enregistre le layer dans le gpkg
|
||||
options.layerName = layer_name
|
||||
code, error = QgsVectorFileWriter.writeAsVectorFormat(layer, str(workDir / "data.gpkg"), options)
|
||||
if code != 0:
|
||||
QMessageBox.warning(None, 'Erreur', f"Erreur à l'export de la couche {layer_name} : \n\n{error}")
|
||||
return
|
||||
new_layer = QgsVectorLayer(str(workDir / f"data.gpkg|layername={layer_name}"), layer_name)
|
||||
|
||||
# Les layers suivants seront enregistrés dans le gpkg déjà existant
|
||||
options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteLayer
|
||||
|
||||
# On charge le style
|
||||
if style_name is not None:
|
||||
stylefile = str((Path(tempdir.name) / style_name).with_suffix('.qml'))
|
||||
processing.run("native:filedownloader", {"URL": styles_url + f"{style_name}.qml", "OUTPUT": stylefile})
|
||||
new_layer.loadNamedStyle(stylefile)
|
||||
|
||||
# On charge le nouveau layer
|
||||
project.addMapLayer(new_layer)
|
||||
|
||||
try:
|
||||
project.removeMapLayer(project.mapLayersByName("OpenStreetMap")[0])
|
||||
except IndexError:
|
||||
pass
|
||||
iface.mapCanvas().refreshAllLayers()
|
||||
project.write(str(workDir / 'orient.qgs'))
|
||||
|
||||
|
||||
try:
|
||||
main()
|
||||
finally:
|
||||
iface.messageBar().popWidget()
|
||||
qApp.restoreOverrideCursor()
|
36
orientation/__init__.py
Normal file
36
orientation/__init__.py
Normal file
@ -0,0 +1,36 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
/***************************************************************************
|
||||
Orientation
|
||||
A QGIS plugin
|
||||
Réaliser des cartes d’orientation
|
||||
Generated by Plugin Builder: http://g-sherman.github.io/Qgis-Plugin-Builder/
|
||||
-------------------
|
||||
begin : 2021-03-01
|
||||
copyright : (C) 2021 by Association Linux-Alpes
|
||||
email : caliec@linux-alpes.org
|
||||
git sha : $Format:%H$
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
This script initializes the plugin, making it known to QGIS.
|
||||
"""
|
||||
|
||||
|
||||
# noinspection PyPep8Naming
|
||||
def classFactory(iface): # pylint: disable=invalid-name
|
||||
"""Load Orientation class from file Orientation.
|
||||
|
||||
:param iface: A QGIS interface instance.
|
||||
:type iface: QgsInterface
|
||||
"""
|
||||
#
|
||||
from .orientation import Orientation
|
||||
return Orientation(iface)
|
11
orientation/i18n/fr.ts
Normal file
11
orientation/i18n/fr.ts
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS><TS version="2.0" language="fr" sourcelanguage="en">
|
||||
<context>
|
||||
<name>@default</name>
|
||||
<message>
|
||||
<location filename="test_translations.py" line="48"/>
|
||||
<source>Good morning</source>
|
||||
<translation>Bonjour</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
BIN
orientation/icon.png
Normal file
BIN
orientation/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
46
orientation/metadata.txt
Normal file
46
orientation/metadata.txt
Normal file
@ -0,0 +1,46 @@
|
||||
# This file contains metadata for your plugin.
|
||||
|
||||
# This file should be included when you package your plugin.# Mandatory items:
|
||||
|
||||
[general]
|
||||
name=CaLiÉc
|
||||
qgisMinimumVersion=3.0
|
||||
description=Réaliser des cartes d’orientation
|
||||
version=1.0
|
||||
author=Association Linux-Alpes
|
||||
email=caliec@linux-alpes.org
|
||||
|
||||
about=Permettre la production de supports pour l’enseignement en géographie et EPS (course d’orientation) à l’école primaire. En effet la représentation de l’espace y est travaillée sur des zones peu étendues, et la symbologie doit être adaptée à l’âge des élèves.
|
||||
|
||||
tracker=https://forge.chapril.org/linux_alpes/caliec/issues
|
||||
repository=https://forge.chapril.org/linux_alpes/caliec/
|
||||
# End of mandatory metadata
|
||||
|
||||
# Recommended items:
|
||||
|
||||
hasProcessingProvider=no
|
||||
# Uncomment the following line and add your changelog:
|
||||
# changelog=
|
||||
|
||||
# Tags are comma separated with spaces allowed
|
||||
tags=python, osm
|
||||
|
||||
homepage=http://www.linux-alpes.org/caliec/
|
||||
category=Plugins
|
||||
icon=icon.png
|
||||
# experimental flag
|
||||
experimental=False
|
||||
|
||||
# deprecated flag (applies to the whole plugin, not just a single version)
|
||||
deprecated=False
|
||||
|
||||
# Since QGIS 3.8, a comma separated list of plugins to be installed
|
||||
# (or upgraded) can be specified.
|
||||
plugin_dependencies=QuickOSM
|
||||
|
||||
Category of the plugin: Raster, Vector, Database or Web
|
||||
# category=
|
||||
|
||||
# If the plugin can run on QGIS Server.
|
||||
server=False
|
||||
|
302
orientation/orientation.py
Normal file
302
orientation/orientation.py
Normal file
@ -0,0 +1,302 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
/***************************************************************************
|
||||
Orientation
|
||||
A QGIS plugin
|
||||
Réaliser des cartes d’orientation
|
||||
Generated by Plugin Builder: http://g-sherman.github.io/Qgis-Plugin-Builder/
|
||||
-------------------
|
||||
begin : 2021-03-01
|
||||
git sha : $Format:%H$
|
||||
copyright : (C) 2021 by Association Linux-Alpes
|
||||
email : caliec@linux-alpes.org
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
"""
|
||||
from qgis.PyQt.QtCore import Qt, QSettings, QTranslator, QCoreApplication
|
||||
from qgis.PyQt.QtGui import QIcon
|
||||
from qgis.PyQt.QtWidgets import QAction, qApp, QFileDialog, QProgressBar, QMessageBox
|
||||
|
||||
from qgis.core import QgsCoordinateReferenceSystem, QgsProject, QgsVectorFileWriter, QgsVectorLayer, QgsFeatureRequest
|
||||
from processing import QgsProcessingException
|
||||
|
||||
|
||||
# Initialize Qt resources from file resources.py
|
||||
from .resources import *
|
||||
|
||||
import processing
|
||||
import os.path
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from processing.tools import dataobjects
|
||||
|
||||
class Orientation:
|
||||
"""QGIS Plugin Implementation."""
|
||||
|
||||
def __init__(self, iface):
|
||||
"""Constructor.
|
||||
|
||||
:param iface: An interface instance that will be passed to this class
|
||||
which provides the hook by which you can manipulate the QGIS
|
||||
application at run time.
|
||||
:type iface: QgsInterface
|
||||
"""
|
||||
# Save reference to the QGIS interface
|
||||
self.iface = iface
|
||||
# initialize plugin directory
|
||||
self.plugin_dir = os.path.dirname(__file__)
|
||||
# initialize locale
|
||||
locale = QSettings().value('locale/userLocale')[0:2]
|
||||
locale_path = os.path.join(
|
||||
self.plugin_dir,
|
||||
'i18n',
|
||||
'Orientation_{}.qm'.format(locale))
|
||||
|
||||
if os.path.exists(locale_path):
|
||||
self.translator = QTranslator()
|
||||
self.translator.load(locale_path)
|
||||
QCoreApplication.installTranslator(self.translator)
|
||||
|
||||
# Declare instance attributes
|
||||
self.actions = []
|
||||
self.menu = self.tr(u'&CaLiÉc')
|
||||
|
||||
# Check if plugin was started the first time in current QGIS session
|
||||
# Must be set in initGui() to survive plugin reloads
|
||||
self.first_start = None
|
||||
|
||||
# noinspection PyMethodMayBeStatic
|
||||
def tr(self, message):
|
||||
"""Get the translation for a string using Qt translation API.
|
||||
|
||||
We implement this ourselves since we do not inherit QObject.
|
||||
|
||||
:param message: String for translation.
|
||||
:type message: str, QString
|
||||
|
||||
:returns: Translated version of message.
|
||||
:rtype: QString
|
||||
"""
|
||||
# noinspection PyTypeChecker,PyArgumentList,PyCallByClass
|
||||
return QCoreApplication.translate('Orientation', message)
|
||||
|
||||
|
||||
def add_action(
|
||||
self,
|
||||
icon_path,
|
||||
text,
|
||||
callback,
|
||||
enabled_flag=True,
|
||||
add_to_menu=True,
|
||||
add_to_toolbar=True,
|
||||
status_tip=None,
|
||||
whats_this=None,
|
||||
parent=None):
|
||||
"""Add a toolbar icon to the toolbar.
|
||||
|
||||
:param icon_path: Path to the icon for this action. Can be a resource
|
||||
path (e.g. ':/plugins/foo/bar.png') or a normal file system path.
|
||||
:type icon_path: str
|
||||
|
||||
:param text: Text that should be shown in menu items for this action.
|
||||
:type text: str
|
||||
|
||||
:param callback: Function to be called when the action is triggered.
|
||||
:type callback: function
|
||||
|
||||
:param enabled_flag: A flag indicating if the action should be enabled
|
||||
by default. Defaults to True.
|
||||
:type enabled_flag: bool
|
||||
|
||||
:param add_to_menu: Flag indicating whether the action should also
|
||||
be added to the menu. Defaults to True.
|
||||
:type add_to_menu: bool
|
||||
|
||||
:param add_to_toolbar: Flag indicating whether the action should also
|
||||
be added to the toolbar. Defaults to True.
|
||||
:type add_to_toolbar: bool
|
||||
|
||||
:param status_tip: Optional text to show in a popup when mouse pointer
|
||||
hovers over the action.
|
||||
:type status_tip: str
|
||||
|
||||
:param parent: Parent widget for the new action. Defaults None.
|
||||
:type parent: QWidget
|
||||
|
||||
:param whats_this: Optional text to show in the status bar when the
|
||||
mouse pointer hovers over the action.
|
||||
|
||||
:returns: The action that was created. Note that the action is also
|
||||
added to self.actions list.
|
||||
:rtype: QAction
|
||||
"""
|
||||
|
||||
icon = QIcon(icon_path)
|
||||
action = QAction(icon, text, parent)
|
||||
action.triggered.connect(callback)
|
||||
action.setEnabled(enabled_flag)
|
||||
|
||||
if status_tip is not None:
|
||||
action.setStatusTip(status_tip)
|
||||
|
||||
if whats_this is not None:
|
||||
action.setWhatsThis(whats_this)
|
||||
|
||||
if add_to_toolbar:
|
||||
# Adds plugin icon to Plugins toolbar
|
||||
self.iface.addToolBarIcon(action)
|
||||
|
||||
if add_to_menu:
|
||||
self.iface.addPluginToMenu(
|
||||
self.menu,
|
||||
action)
|
||||
|
||||
self.actions.append(action)
|
||||
|
||||
return action
|
||||
|
||||
def initGui(self):
|
||||
"""Create the menu entries and toolbar icons inside the QGIS GUI."""
|
||||
|
||||
icon_path = ':/plugins/caliec/icon.png'
|
||||
self.add_action(
|
||||
icon_path,
|
||||
text=self.tr(u'Créer le projet'),
|
||||
callback=self.run,
|
||||
parent=self.iface.mainWindow())
|
||||
|
||||
# will be set False in run()
|
||||
self.first_start = True
|
||||
|
||||
|
||||
def unload(self):
|
||||
"""Removes the plugin menu item and icon from QGIS GUI."""
|
||||
for action in self.actions:
|
||||
self.iface.removePluginMenu(
|
||||
self.tr(u'&CaLiÉc'),
|
||||
action)
|
||||
self.iface.removeToolBarIcon(action)
|
||||
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
self.main()
|
||||
finally:
|
||||
self.iface.messageBar().popWidget()
|
||||
qApp.restoreOverrideCursor()
|
||||
|
||||
def main(self):
|
||||
# Paramètres du projet
|
||||
tempdir = tempfile.TemporaryDirectory()
|
||||
styles_url = 'https://forge.chapril.org/linux_alpes/caliec/raw/branch/master/styles/'
|
||||
lambert93 = QgsCoordinateReferenceSystem("EPSG:2154")
|
||||
wgs = QgsCoordinateReferenceSystem("EPSG:4326")
|
||||
wgspm = QgsCoordinateReferenceSystem("EPSG:3857")
|
||||
scr = wgspm
|
||||
project = QgsProject.instance()
|
||||
project.setCrs(scr)
|
||||
options = QgsVectorFileWriter.SaveVectorOptions()
|
||||
options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteFile
|
||||
options.driverName = "GPKG"
|
||||
context = dataobjects.createContext()
|
||||
context.setInvalidGeometryCheck(QgsFeatureRequest.GeometryNoCheck)
|
||||
|
||||
# Correspondances des noms des couches et des styles:
|
||||
# "NOM_DE_LA_COUCHE_OSM": ("nom_du_style", "nom_du_layer")
|
||||
# Commenter les couches non désirées
|
||||
# L'ordre impacte directement l'ordre final des couches
|
||||
names = {
|
||||
#"OUTPUT_OTHER_RELATIONS": (None, "Autres"),
|
||||
"OUTPUT_MULTIPOLYGONS": ("multipolygon", "Surfaces"),
|
||||
#"OUTPUT_MULTILINESTRINGS": (None, "Multilignes"),
|
||||
"OUTPUT_LINES": ("linestring", "Lignes"),
|
||||
"OUTPUT_POINTS": ("point", "Points"),
|
||||
}
|
||||
|
||||
# Vérif de l'échelle
|
||||
if self.iface.mapCanvas().scale() > 10000:
|
||||
if QMessageBox.warning(self.iface.mainWindow(), "Zone étendue",
|
||||
"La zone est étendue et le téléchargement risque de prendre longtemps",
|
||||
QMessageBox.Ok | QMessageBox.Cancel) == QMessageBox.Cancel:
|
||||
return
|
||||
|
||||
# Paramétrage du dossier de travail
|
||||
settings = QSettings()
|
||||
dir = QFileDialog.getExistingDirectory(self.iface.mainWindow(),
|
||||
"Sélectionnez un dossier de travail",
|
||||
settings.value("caliec/workingDir"))
|
||||
if dir == "":
|
||||
return
|
||||
settings.setValue("caliec/workingDir", dir)
|
||||
workDir = Path(dir)
|
||||
|
||||
# Construction de la requête overpass
|
||||
try:
|
||||
url = processing.run("quickosm:buildqueryextent",
|
||||
parameters={"EXTENT": self.iface.mapCanvas().extent()})["OUTPUT_URL"]
|
||||
except QgsProcessingException:
|
||||
QMessageBox.warning(self.iface.mainWindow(), "Attention", "Vous n'avez pas installé l'extension QuickOSM")
|
||||
return
|
||||
|
||||
# Barre de chargement animée
|
||||
qApp.setOverrideCursor(Qt.WaitCursor)
|
||||
message_bar = self.iface.messageBar()
|
||||
progress_bar = QProgressBar()
|
||||
progress_bar.setMaximum(0)
|
||||
widget = message_bar.createMessage("Chargement", "Récupération des data en ligne")
|
||||
widget.layout().addWidget(progress_bar)
|
||||
message_bar.pushWidget(widget)
|
||||
|
||||
# Téléchargement du fichier osm et création des couches
|
||||
osmfile = str(Path(tempdir.name) / "osm.xml")
|
||||
processing.run("native:filedownloader", {"URL": url, "OUTPUT": osmfile})
|
||||
layers = processing.run("quickosm:openosmfile", {"FILE": osmfile})
|
||||
|
||||
for osm_name, style_layer_names in names.items():
|
||||
style_name, layer_name = style_layer_names
|
||||
|
||||
# On explose les champs
|
||||
layer = processing.run("native:explodehstorefield",
|
||||
parameters={"INPUT": layers[osm_name],
|
||||
"FIELD": "other_tags", "OUTPUT": "memory:"},
|
||||
context=context)["OUTPUT"]
|
||||
|
||||
# On enregistre le layer dans le gpkg
|
||||
options.layerName = layer_name
|
||||
code, error = QgsVectorFileWriter.writeAsVectorFormat(layer, str(workDir / "data.gpkg"), options)
|
||||
if code != 0:
|
||||
QMessageBox.warning(None, 'Erreur', f"Erreur à l'export de la couche {layer_name} : \n\n{error}")
|
||||
return
|
||||
new_layer = QgsVectorLayer(str(workDir / f"data.gpkg|layername={layer_name}"), layer_name)
|
||||
|
||||
# Les layers suivants seront enregistrés dans le gpkg déjà existant
|
||||
options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteLayer
|
||||
|
||||
# On charge le style
|
||||
if style_name is not None:
|
||||
stylefile = str((Path(tempdir.name) / style_name).with_suffix('.qml'))
|
||||
processing.run("native:filedownloader",
|
||||
parameters={"URL": styles_url + f"{style_name}.qml", "OUTPUT": stylefile})
|
||||
new_layer.loadNamedStyle(stylefile)
|
||||
|
||||
# On charge le nouveau layer
|
||||
project.addMapLayer(new_layer)
|
||||
|
||||
try:
|
||||
project.removeMapLayer(project.mapLayersByName("OpenStreetMap")[0])
|
||||
except IndexError:
|
||||
pass
|
||||
self.iface.mapCanvas().refreshAllLayers()
|
||||
project.write(str(workDir / 'orient.qgs'))
|
||||
|
774
orientation/resources.py
Normal file
774
orientation/resources.py
Normal file
@ -0,0 +1,774 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Resource object code
|
||||
#
|
||||
# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2)
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore
|
||||
|
||||
qt_resource_data = b"\
|
||||
\x00\x00\x2c\x6f\
|
||||
\x89\
|
||||
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
|
||||
\x00\x00\x68\x00\x00\x00\x75\x08\x06\x00\x00\x00\xa2\x54\xa4\xe4\
|
||||
\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
|
||||
\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\
|
||||
\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
|
||||
\xe5\x03\x01\x0c\x25\x29\xd6\x1a\x8c\xcb\x00\x00\x20\x00\x49\x44\
|
||||
\x41\x54\x78\xda\xed\x5d\x77\x78\x14\xc5\xdf\xff\xcc\x5e\xca\xa5\
|
||||
\x57\x08\x09\xa1\x06\x88\x04\x41\x08\x45\x3a\x0a\x88\x20\xd5\x50\
|
||||
\x14\x44\x40\xf9\x59\x29\x22\x22\x22\x8a\xa2\x40\x00\x51\x10\x50\
|
||||
\xa9\x2a\x88\x8a\x09\x22\x55\x40\x42\x8d\x84\x00\x09\xcd\x84\x12\
|
||||
\x20\x60\x20\x80\x94\x40\x48\xcf\x25\x77\xf3\xfe\x71\x5b\x66\xf7\
|
||||
\x76\xf7\xf6\x02\xfe\x5e\xdf\xf7\x71\xf3\xdc\x93\xdd\xd9\x99\xd9\
|
||||
\xa9\xdf\xfa\x99\x19\x42\x29\xc5\xbf\xd7\x3f\xf7\xe2\xfe\x6d\x82\
|
||||
\x7f\x78\x07\x09\x33\x48\xef\xbf\x91\x38\xc2\x65\x34\x6e\x55\xd3\
|
||||
\xb8\x92\xaf\xab\xf9\xff\x9d\xe5\x56\x4b\xa3\x57\x1f\xe1\x9e\xfc\
|
||||
\xb7\x49\x1c\xa5\x14\x84\x90\xff\x77\xdf\xfa\xbb\x2e\xf2\x2f\x0f\
|
||||
\xfa\x67\x5f\x6e\xca\x51\x26\x3c\xeb\x75\x9c\x32\xbe\xda\x7b\x65\
|
||||
\x38\x1b\x66\x34\x7f\xa3\xf1\x8d\xc6\xd1\xca\x5f\x99\x87\x32\x2f\
|
||||
\x67\xcf\xae\x96\x45\xeb\x3b\xaa\x71\x6d\x36\x9b\x4b\x95\x73\xb5\
|
||||
\x11\x5d\x69\x5c\xbd\xb8\xae\x54\xca\x48\xd9\x1f\x64\x87\xff\x9d\
|
||||
\xdf\xf9\x97\xc4\xfd\x5f\x12\xb3\xf5\x24\x14\x23\xef\xb5\xf2\xd2\
|
||||
\x4b\xaf\xc7\xe0\x5d\x7d\xef\xca\x60\x63\x25\x28\x23\xf9\xdf\xef\
|
||||
\xf7\xaa\x5a\x16\x37\x23\xb4\xd9\x15\x69\x49\xed\x5e\xf8\xaf\x75\
|
||||
\xaf\x97\x2e\x25\x25\x85\x26\x27\x27\x6b\x7e\x3b\x3a\x3a\x1a\x71\
|
||||
\x71\x71\x44\x29\xad\x09\x79\x7c\xfb\xed\xb7\xf4\xfa\xf5\xeb\xaa\
|
||||
\x69\x9b\x36\x6d\x8a\xbe\x7d\xfb\x12\x35\x69\x4f\x59\x3e\xb5\xbc\
|
||||
\x95\x64\x57\x8f\x97\xeb\xd5\x57\xd9\xf6\xb2\x7e\x60\xe5\xf1\x7f\
|
||||
\xe2\x6f\xfa\xf4\xe9\x14\x00\xf5\xf3\xf3\xa3\x01\x01\x01\xb2\x9f\
|
||||
\x9f\x9f\x1f\xf5\xf6\xf6\xa6\x19\x19\x19\x54\x2b\x7d\x6c\x6c\x2c\
|
||||
\xe5\x38\x4e\x96\xce\xdf\xdf\x9f\x12\x42\xe8\xf0\xe1\xc3\xe9\x3f\
|
||||
\xbd\xfe\x6e\x7a\xd2\xcc\x83\x60\x86\x6a\x12\x50\x55\x66\x69\xf2\
|
||||
\xfe\x64\xd4\xa9\x53\x47\x16\x66\xb1\x58\xd0\xa7\x6f\x1f\xf4\xec\
|
||||
\xd9\x13\x07\x0e\x1c\xa0\x75\xea\xd4\x21\x6a\x65\x89\x89\x89\xc1\
|
||||
\xde\x3d\x7b\x61\x32\x99\x00\x00\xf9\xf9\xf9\x68\xd5\xba\x95\x4b\
|
||||
\x52\xa8\xd1\x70\xe5\xbd\x2b\x75\x55\xcb\x9f\xd3\xa3\xad\xf7\xab\
|
||||
\xe4\xa9\x7d\x50\x18\x19\xce\xf2\x56\xbe\xf7\xf7\xf7\x47\x60\x60\
|
||||
\x20\x02\x83\xec\xbf\xa0\xa0\x20\x54\x0f\xab\x8e\x29\xef\x4c\xc1\
|
||||
\xd5\xab\x57\xb1\x78\xf1\x62\xcd\xb2\x9b\x4c\x26\x04\x05\x05\x89\
|
||||
\x69\x03\x02\x02\xc0\x11\xce\xb0\x82\xeb\xac\xa1\xd5\x78\xab\xb3\
|
||||
\x34\x02\x89\xd4\xca\x47\x78\xcf\x09\x91\xd8\x04\x6a\x3c\x42\xed\
|
||||
\xbd\x1a\x5f\x71\x96\x5e\x2f\x1f\x36\x5c\xad\x93\x08\x21\x10\xfe\
|
||||
\x28\xa5\x20\x20\x18\x30\x60\x00\x06\x0d\x1a\x84\xa5\x4b\x97\x22\
|
||||
\x33\x33\x93\xea\xa6\xe7\xff\xd4\x06\x82\xd6\xf7\xf5\xea\xe7\x2c\
|
||||
\x4c\xaf\xfd\xb4\xbe\xaf\x4c\xcf\x29\x6d\x43\x42\x81\x9c\xd9\xc1\
|
||||
\xd8\x9f\x5a\x1a\xf6\x9e\x7d\xef\xec\xa7\x66\xa7\x12\x47\x18\xf3\
|
||||
\xb7\x6a\xf5\x2a\xdc\xb9\x73\x07\x9c\x89\xc3\x9a\xef\xd6\xa0\x49\
|
||||
\x93\x26\x18\x3b\x76\x2c\x2a\x2a\x2a\x74\xd3\xeb\xd9\xe9\xb4\xca\
|
||||
\xaa\x55\x3f\xbd\x30\x23\xed\xa7\x65\x9b\x63\xdf\x73\x0f\x42\x74\
|
||||
\xbc\x5f\x91\xd9\xf8\x87\xa4\xff\x3b\x76\xec\xc0\xaa\xd5\xab\x00\
|
||||
\x0a\x78\x9a\x3d\x31\x7e\xdc\x78\x1c\x3e\x7c\x18\x9f\x7d\xf6\x19\
|
||||
\xd5\xcf\xe2\xef\x15\xdf\x1f\x64\xbb\x89\x1d\x64\x84\xf4\x18\x25\
|
||||
\x51\xce\xe2\xe9\x3d\xeb\x91\x02\x19\x89\x23\x04\x15\x96\x0a\xcc\
|
||||
\x98\x31\x03\xe7\xce\x9f\x03\x00\x0c\x1b\x36\x0c\x4f\x74\x7f\x02\
|
||||
\x33\x66\xcc\x40\x7a\x7a\x3a\x55\xa3\xf1\x7a\xbc\xc0\x08\x29\xbf\
|
||||
\xdf\x5f\x55\xf2\xe7\x9c\x49\x6c\x46\x94\x4b\x3d\xa5\x4e\xad\x91\
|
||||
\xb5\x98\xa9\xf2\x9d\x33\x12\x95\x9f\x9f\x8f\x99\x33\x67\x02\x14\
|
||||
\x20\x1c\x41\x7c\x7c\x3c\x00\x60\xda\xb4\x69\xea\xd2\x16\x88\xcb\
|
||||
\xba\x9c\x11\x65\x5d\x4d\xd9\xd4\x12\x1c\xf4\x4c\x63\x6a\x69\x38\
|
||||
\x67\x3c\xc6\x19\xfd\x74\x96\xc6\x15\x5e\xe3\x74\xca\x53\x9e\x0f\
|
||||
\x31\xf1\x12\x12\x12\x70\xf0\xe0\x41\x80\x02\x4d\x9a\x34\xc1\xf2\
|
||||
\xe5\xcb\xb1\x77\xef\x5e\xec\xdc\xb9\x93\xaa\x76\x30\xd5\xd6\xe2\
|
||||
\x9d\xf9\x9b\x9c\xdd\xbb\xda\x56\x46\xda\x9a\xd3\x1b\xe5\x5a\xa2\
|
||||
\xaf\x2b\xf1\xb5\x24\x16\xad\xb8\xae\x88\xf8\xd5\xaa\x55\x43\xcb\
|
||||
\x96\x2d\xd1\xbb\x4f\x6f\x9c\x3e\x7d\x1a\x84\x23\x18\x36\x74\x18\
|
||||
\xfa\xf6\xed\x8b\xe7\x9f\x7f\x1e\x07\x0f\x1e\xa4\x46\x49\x9c\x1a\
|
||||
\xb9\x73\x26\xfa\xab\x91\x2d\x3d\x31\x5a\xab\x1d\xb4\xda\x09\x80\
|
||||
\xa3\x98\x6d\x44\x04\x66\xc5\x4e\xbd\xf4\x5a\x8d\xa0\x25\x56\x1a\
|
||||
\xe2\x41\x54\x7a\xef\xee\xee\x8e\x89\x13\x27\xe2\xde\xbd\x7b\xf8\
|
||||
\xea\xab\xaf\x00\x0a\x70\x1c\x87\x49\x6f\x4d\x42\x5e\x5e\x1e\x3e\
|
||||
\xff\xfc\x73\x47\x31\xbb\x8a\x8d\xef\x6a\x3d\xd5\x78\x9c\x96\xfa\
|
||||
\xa1\x36\x48\x45\x1e\x54\x55\x05\xf4\x7e\xde\xdf\x97\x14\x47\x20\
|
||||
\x23\x53\x3d\x7b\xf6\xc4\xf8\xf1\xe3\xb1\xf2\xeb\x95\x22\xa9\x7b\
|
||||
\xf4\xd1\x47\x31\x76\xec\x58\x6c\xdc\xb8\x11\x67\xcf\x9e\x75\x94\
|
||||
\x02\xff\x6e\x2f\xe8\x7d\xb6\x8f\x6c\x06\x69\xe9\x1d\x6a\x74\xd5\
|
||||
\x08\xbf\x71\x46\x8b\xf5\x78\x8f\x11\x3d\x48\xe0\x43\x6c\x65\x3e\
|
||||
\xfd\xf4\x53\xb4\x6d\xdb\x16\x13\xde\x9c\x00\x4b\x85\x05\x00\xf0\
|
||||
\xc9\xdc\x4f\xf0\xd4\x53\x4f\xa1\xa4\xa4\xc4\x10\x0f\x32\xc2\x3f\
|
||||
\xb5\xd2\x68\x59\xfe\x8d\xf0\x1d\x67\xdf\xe0\xd4\xa4\x29\x35\x89\
|
||||
\x4a\x4d\x0a\xd1\xb2\x00\x3b\x93\xde\xb4\x68\xbd\xde\xf4\x17\xa5\
|
||||
\x30\xe2\x18\xee\xee\xee\x8e\xc9\x93\x27\x23\x23\x23\x03\x53\xde\
|
||||
\x9d\x02\x4a\x29\x3c\x3d\x3c\x31\xe5\x9d\x29\x70\x73\x73\x73\x48\
|
||||
\xaf\xc7\x83\x5c\xe5\x2f\x6a\xe4\x5f\x49\xda\xd4\x2c\x11\xce\xc8\
|
||||
\xb9\x10\xe6\x66\x84\x79\xeb\x3d\x6b\xd9\xad\xb4\xf2\x35\x9a\x5e\
|
||||
\x93\x0c\x30\x33\xa0\xa0\xa0\x00\xef\xbd\xf7\x1e\x2c\x16\x0b\x8a\
|
||||
\x8b\x8b\xe1\xe1\xe1\x81\x2f\xbe\xf8\x02\x7d\xfb\xf4\xc5\xe3\x8f\
|
||||
\x3d\x8e\x76\x6d\xdb\x61\xec\x98\xb1\xd8\xbb\x6f\xaf\x26\x99\x53\
|
||||
\x36\x9e\xd1\x72\x6b\xb9\x24\x8c\xb4\xa1\x2b\xed\xe4\xa6\xa7\xd3\
|
||||
\x38\xb3\x52\x1b\xd1\x88\x8d\xc4\xd3\xd2\x9b\x1c\xa6\xbd\xa2\x75\
|
||||
\x8b\x8a\x8a\xb0\x68\xd1\x22\x69\x7e\x10\x80\x52\x60\xfe\x82\xf9\
|
||||
\x78\xec\xb1\xc7\x00\x00\xaf\xbf\xfe\x3a\x8e\x1d\x3b\xa6\x6b\x45\
|
||||
\xb8\xdf\x3a\xaa\x51\x8d\x07\x81\xed\x00\x00\x37\xb5\x4c\x5d\x75\
|
||||
\x5c\x19\x0d\xd7\x9a\x41\xca\xf0\xdb\xb7\x6f\xcf\xd9\xb6\x6d\xdb\
|
||||
\x3b\xbb\x76\xed\xc2\xb6\x6d\xdb\xe4\x69\x99\x7a\xf8\x06\x04\x63\
|
||||
\xdc\x47\x2b\xe0\x1f\x18\x02\x4f\x2f\x6f\x98\xbd\x7d\x71\x29\xeb\
|
||||
\x24\x3e\x7f\x77\x24\x12\x12\x12\x30\x64\xc8\x10\x34\x68\xd8\x00\
|
||||
\xab\x56\xad\x92\x66\x09\x93\x7e\xe3\xc6\x8d\x18\x34\x68\x10\xed\
|
||||
\xd6\xad\x1b\xfa\xf7\xef\x8f\x88\x88\x08\xa2\x55\x1f\x23\xb3\x5f\
|
||||
\x2d\xdc\x88\xc0\xa4\x96\x8f\x18\x26\x8c\x52\x9b\xcd\x06\x9b\xcd\
|
||||
\x26\x7b\x56\xbb\xaf\xca\x7b\xad\x34\xc2\xb3\xf0\xff\xf8\xf1\xe3\
|
||||
\x74\xe0\xc0\x81\x34\x24\x24\x84\xf2\xc4\x88\x9a\x4c\x6e\x14\x00\
|
||||
\xcd\xbe\x90\x4d\xa9\x8d\x52\x6a\xa5\x94\xda\x28\x7d\x7a\xc0\xd3\
|
||||
\x34\xb8\x7a\x04\x4d\x4c\x2b\xa4\x9b\x4f\xd9\xe8\xe6\x4c\x1b\xdd\
|
||||
\x72\x8a\xd2\xcd\x99\x36\xda\xb1\xe7\x10\xea\xef\xef\x4f\x53\x52\
|
||||
\x52\x28\xb5\x52\x6a\xb3\xda\xc4\x74\xd4\x4a\x69\xde\xed\x3c\x1a\
|
||||
\x1a\x12\x2a\xe6\x2d\x38\x04\x7b\xf6\xec\x49\x93\x92\x92\xa8\xd1\
|
||||
\x3a\x2a\xeb\xa6\x8c\xa3\x97\x5e\xed\x59\x2d\x3e\xe7\x4c\xa9\x74\
|
||||
\x85\x86\xba\x4a\x77\x09\x21\xb0\x5a\xad\x38\x76\xec\x18\x9d\x34\
|
||||
\x69\x12\xed\xdc\xb9\x33\xd6\xaf\x5f\x0f\xb8\x79\xa1\xef\xf0\xf1\
|
||||
\x98\xf6\xe5\x66\xc4\xbd\xf8\xb6\xd2\x5e\xa3\x62\xc2\xb1\xe7\x57\
|
||||
\x78\xef\x0e\x8a\xee\xdd\xc5\x90\x97\xa6\xa2\xb4\xcc\x82\x59\xb3\
|
||||
\x66\xc1\x6a\xb3\xda\xbf\xab\x92\xae\xc3\x93\x83\x31\xeb\x9b\x3d\
|
||||
\x18\xfc\xf2\x54\xf8\x06\x85\xe1\xb7\xdf\x76\xa2\x4f\x9f\x3e\x18\
|
||||
\x35\x6a\x14\x3d\x70\xe0\x00\xad\xac\xac\x74\x49\x34\xd6\xe3\xd7\
|
||||
\xce\x78\xb9\x56\xfb\xbb\x29\x7d\xea\x6a\xff\x9d\x39\xe4\xb4\x70\
|
||||
\x63\x7a\x95\xb2\xd9\x6c\x38\x74\xe8\x10\x9d\x3d\x7b\x36\xb6\x6f\
|
||||
\xdf\x0e\x80\xa0\x6d\xf7\xa7\xd1\x63\xe0\x68\xc4\xb4\xe8\x08\x4f\
|
||||
\x6f\x1f\x00\x14\xd9\xa7\xed\xfc\xe3\xfd\x69\xef\xc3\xcf\xcf\x4f\
|
||||
\x4c\x7f\xfc\xc4\x71\x59\x17\x65\xa4\xed\xc7\xac\x71\x03\x40\xa9\
|
||||
\x0d\x53\x17\x6d\xc0\x90\x57\xa6\x22\x61\xe9\x4c\x3c\x37\xfc\x39\
|
||||
\x04\x04\x04\xc8\xbe\x5d\x5e\x5e\x8e\xa2\xe2\x22\x98\x4c\x26\x34\
|
||||
\x7d\xf4\x71\x34\x7b\xf4\x71\x0c\x7d\xed\x03\x9c\xcf\x4c\xc7\xee\
|
||||
\x4d\xab\xf0\x53\xe2\x8f\xf8\xee\xbb\xef\xd0\xbe\x7d\x7b\x1a\x1f\
|
||||
\x1f\x8f\x76\xed\xda\x11\x77\x77\x77\x55\xfe\xe2\xac\xad\x8c\xb4\
|
||||
\xad\x96\x0d\x50\xc6\x83\x9c\xfd\x77\xc6\xe8\x8c\x9a\x7f\x00\xa0\
|
||||
\xa2\xa2\x02\xb3\x66\xcd\xa2\x33\x67\xce\x84\xcd\x66\x43\xdd\xe8\
|
||||
\x47\x30\x7c\xdc\x0c\xb4\xee\xfc\x14\x08\xc7\x31\xfa\x28\x81\xc9\
|
||||
\xcd\x1d\x9e\x66\x6f\xfc\xb2\x61\x93\x43\x3e\xc1\xd5\xc2\xed\xf1\
|
||||
\x28\xc5\xf6\x84\x25\x28\x2e\xcc\x07\x00\x6c\xf9\x7e\x11\xa6\x7e\
|
||||
\xbe\x1e\xd9\xa7\x8f\x61\xe3\xa6\x2d\x9a\x86\x7c\x37\x0f\x4f\x3e\
|
||||
\x3d\xe0\xee\xe1\x89\x98\xd8\x0e\x68\xdc\xa2\x3d\x7a\x0e\x7e\x05\
|
||||
\x2b\xe6\xbc\x81\xd4\xd4\x43\xe8\xd6\xad\x1b\x46\x8c\x18\x41\x17\
|
||||
\x2e\x5c\x48\x7c\x7d\x7d\xab\xd4\x56\x46\xe3\xab\x52\x9d\xbf\x1b\
|
||||
\x17\xa7\xd4\xa9\x36\x6f\xde\x4c\xe7\xcd\x9b\x87\x94\x94\x83\xa8\
|
||||
\x59\xb7\x21\x86\xbc\xf2\x3e\x1e\xeb\x3d\x0c\x1c\x67\x92\xc8\x10\
|
||||
\x65\x71\x07\xa5\x28\x2f\x2b\x55\x6f\x62\x8e\x83\xb7\x6f\x00\xce\
|
||||
\x9f\x4a\xc7\xd4\x51\x8f\xa3\xbc\xb4\xd8\x3e\xea\xdc\x3d\xb0\xe8\
|
||||
\x97\x13\x08\xab\x59\x0f\xe5\x65\x25\x9a\x65\x73\xf7\xf0\x84\xd9\
|
||||
\xec\x0d\x08\x0d\x43\x25\x12\x4a\xa9\x0d\xc7\x52\x76\xe2\x9b\x79\
|
||||
\x93\x70\x25\xfb\x0c\xa2\xa3\x1b\xe1\x93\x4f\x3e\x41\xaf\x5e\xbd\
|
||||
\x08\xab\x5b\xb9\x22\x20\x55\xc9\x2a\xa1\xf4\x1a\x1a\x01\x43\xb8\
|
||||
\x02\x1a\x61\xc9\xca\xd4\xa9\x53\xe9\xa2\x45\x8b\x60\xf6\xf6\xc3\
|
||||
\xa8\xb7\xe6\xe2\xf1\xbe\xcf\xc3\xd3\x6c\x16\x5b\x85\x82\xf2\x2e\
|
||||
\x01\xd6\xa6\x43\x44\x01\xd9\xf1\x1d\x50\x59\x51\x81\xd7\xfb\x35\
|
||||
\xc1\xf5\xcb\x17\x64\xdf\x6b\xdb\x6d\x00\xde\x9c\xbd\x1a\xde\x3e\
|
||||
\x7e\x50\xf6\xbc\x3c\x2f\x75\x6b\x92\x70\x95\x95\x96\xe0\x58\xca\
|
||||
\x6f\x58\x31\x67\x02\xf2\xfe\xca\xc5\xe0\xc1\x83\xb1\x6c\xd9\x32\
|
||||
\x12\x10\x10\xa0\x2b\xd5\x19\x51\xf6\x9d\xb5\xa1\x68\x8b\x33\xe2\
|
||||
\x6b\xd7\x73\x30\x39\x73\x3e\x5d\xbb\x76\x8d\x4e\x9e\x3c\x99\x2e\
|
||||
\x5e\xbc\x18\x61\x91\x51\x78\x79\xea\x22\x3c\x39\xe8\x25\x78\x9a\
|
||||
\xbd\x00\xca\x88\xbe\xe2\x3d\x91\xd8\x3f\x05\x28\xb5\x1b\x49\xed\
|
||||
\xf2\x16\x91\xe2\x82\xe0\xf4\xf1\x14\x87\xce\x01\x80\xb4\xfd\x5b\
|
||||
\x71\xea\xe8\xef\x4c\x7c\x7b\x3e\x94\x32\xb8\x04\x4a\x00\x3e\x4c\
|
||||
\xb8\x27\xc2\x3d\xec\xe1\x9e\x66\x1f\xb4\xef\x1e\x87\x09\x33\xbf\
|
||||
\x45\x58\x64\x3d\x24\x26\x26\x62\xe2\xc4\x89\x34\x27\x27\x87\x1a\
|
||||
\x15\x9c\x5c\x31\x44\x3b\x84\x39\xac\x47\xd1\x00\xd8\x39\x93\xf9\
|
||||
\xb5\xde\x9f\x39\x73\x86\xf6\xeb\xd7\x0f\x17\x2e\x5c\xc0\xe3\x7d\
|
||||
\x87\xe3\xe5\xa9\x8b\xe1\xeb\x17\x68\x1f\xa9\x02\x03\x60\x47\x38\
|
||||
\x91\x00\x21\x8e\x36\x52\xf9\x0c\xb3\xd9\xac\xf8\xf0\x95\x9e\x38\
|
||||
\x91\xba\x4b\x75\xd6\x3e\xd4\xbc\x1d\xe6\xae\x39\x00\x42\x38\xd9\
|
||||
\x1c\x22\x2a\x79\x4a\xff\xf9\x70\x02\x10\x2a\xa5\xa0\xa0\x28\x2b\
|
||||
\x29\x42\xe2\xf2\x78\xfc\xf2\xcd\x3c\x84\x86\x86\x20\x31\x31\x11\
|
||||
\x5d\xba\x74\x21\x46\x49\x9b\xb3\x38\x6a\x6d\x49\x6c\x36\x9b\x4b\
|
||||
\xb0\x29\x57\xae\xf3\xe7\xcf\xd3\xae\x5d\xbb\xe2\xaf\x1b\x37\x11\
|
||||
\xf7\xe2\xdb\x18\x3e\xf6\x63\x70\x26\x4e\x9b\x9e\xa8\x0a\xd0\x14\
|
||||
\x94\x4a\x6c\x82\x4d\x77\x3e\xf3\x28\x26\x0d\x6d\x0b\x9b\xcd\xaa\
|
||||
\x99\xc3\xdc\x35\x07\x10\x13\xdb\x5e\xce\xdb\x78\x8b\x03\xa0\xc8\
|
||||
\x57\xef\xfb\x4c\xba\x2d\x3f\x2c\xc6\xd7\x73\x27\xc2\xdb\xdb\x0b\
|
||||
\xfb\xf7\xef\x47\x8b\x16\x2d\xc8\xdf\xd1\x7e\xa2\xcb\xdb\xa8\xdf\
|
||||
\xc7\x15\xb2\x76\xe0\xc0\x01\xda\xa1\x43\x07\xdc\xb8\x79\x0b\x2f\
|
||||
\xbf\xbb\x10\xcf\x8f\x9b\x01\xc2\x99\xec\xe4\x84\x27\x1f\x94\x27\
|
||||
\x33\x2c\x89\xa1\x90\x9e\xed\xfc\x91\x6f\x26\x26\x1e\x05\x81\xb5\
|
||||
\xb2\x12\x3b\xd7\xaf\x94\x3a\x87\x98\xa4\x8a\xb9\x79\x8a\xf7\xdb\
|
||||
\x13\x97\xc2\x8e\xa0\x15\x35\x26\x86\xcc\x49\x24\x4e\x8c\x23\x3e\
|
||||
\x0b\xdf\xe7\xe3\x11\x22\x76\x6a\xef\x67\x5f\xc3\xdb\x9f\xae\x85\
|
||||
\x0d\x1c\x7a\xf7\xee\x8d\x9f\x7e\xfa\x89\xea\x19\x41\x9d\xf9\xbe\
|
||||
\xb4\xde\x8b\xd6\x6c\x35\x32\x67\xc4\x56\xa5\x05\x4a\x3c\x71\xe2\
|
||||
\x04\x1d\x34\x68\x10\x0a\x8b\x4b\xf1\x66\xfc\x6a\xf4\x7a\xe6\x55\
|
||||
\x80\xb3\xdb\xca\x08\x11\x95\x77\xfb\xe8\x25\xfc\x28\x26\x14\x20\
|
||||
\x14\x84\x0f\xa7\x44\x78\x6f\x8f\x40\x08\xb5\xa7\xe5\x7f\x7b\x36\
|
||||
\xaf\xc1\x9e\x4d\xdf\xf1\xe2\x9c\x19\x08\xef\x21\x96\x23\xac\xd5\
|
||||
\x50\xb1\x93\x0e\xee\x5c\x8f\xac\x3f\x0e\x09\x22\x91\x9d\x74\x31\
|
||||
\xdf\xa5\xfc\xb7\x89\x60\x25\x27\x10\xcb\x69\x6f\x30\xa1\xcc\x10\
|
||||
\xe3\x98\xdc\xdc\xd1\xf1\xc9\xc1\xf8\xe0\xab\xad\x28\x2a\xb5\xe0\
|
||||
\x85\x17\x5e\x80\x60\x81\x50\x7a\x05\xd4\xdc\x0d\xca\x38\x5a\xef\
|
||||
\x65\x33\xc8\x99\x95\x55\x4d\xc2\x50\x93\xe3\x2f\x5d\xba\x44\xc7\
|
||||
\x8c\x19\x83\xbc\xbc\x3b\x18\xf7\xf1\x0a\x74\xea\xf5\x2c\x6f\x53\
|
||||
\xe2\x47\x29\xc3\xe0\xed\xa3\x59\x12\x10\xa4\x11\x0c\x10\x7e\xa6\
|
||||
\x40\xe8\x4f\x30\x23\xdb\x46\xb1\x73\xfd\xd7\xb0\x94\xf3\xe2\x77\
|
||||
\x64\x5f\x20\xa0\x89\x58\x0e\x73\x68\x3d\x04\x3d\xd4\xcd\x2e\xa6\
|
||||
\x97\x97\x62\xc5\xec\x09\xb0\x59\x2b\x79\x61\x03\xe2\x6c\x11\x66\
|
||||
\x27\x71\x98\x45\x6c\x79\x20\x96\x93\x32\x61\x94\x02\x31\xb1\x9d\
|
||||
\x30\xfa\xed\x4f\x61\x72\x37\xe3\xd5\x57\x5f\xc5\xb5\x6b\xd7\xa8\
|
||||
\x96\x4b\x45\xcd\xa5\xaf\x25\x8c\xb1\x6d\xcf\x19\x75\x50\x39\x73\
|
||||
\xec\x51\x4a\x71\xeb\xd6\xad\xc4\x7e\xfd\xfa\x21\x35\x35\x15\x23\
|
||||
\x27\xce\x41\xe7\x5e\xcf\x0a\x91\x20\xb5\x34\xe1\x85\x66\xca\x77\
|
||||
\x0e\x9f\xa7\x20\x20\x08\xef\xf8\x74\x44\x80\x2a\x32\x79\x9c\x4a\
|
||||
\x4f\xc6\xb9\x8c\xc3\xbc\x32\xe3\x0f\x3c\x12\x2f\x67\x66\x84\xa0\
|
||||
\x7e\xff\x78\x78\x04\xd6\x04\x00\x9c\xcb\x38\x82\xe3\x07\x93\x18\
|
||||
\x71\x5d\xe0\x3d\x54\x51\x36\xca\x0b\x08\x94\x17\x1a\xa8\x58\x3e\
|
||||
\x71\xc6\x8b\x82\x85\xfd\xae\xfb\x80\x51\x98\x10\xbf\x0a\x39\x97\
|
||||
\x2f\xa3\x6d\xdb\xb6\x38\x77\xee\x1c\x55\x03\x3f\x2a\x85\x00\xa3\
|
||||
\x3f\xce\x99\x98\xe8\x0c\xa7\xcc\x7e\x70\xdc\xb8\x71\x83\x4f\x9d\
|
||||
\x3a\x85\x3e\xcf\x8d\xc3\x80\x11\x6f\xca\xb5\x1b\x81\xb4\x30\x0c\
|
||||
\x9f\x30\xe4\x46\xe0\xc0\x22\xa9\x11\x1b\x4b\x22\x3b\xe0\x21\xbf\
|
||||
\x3f\x7f\x3d\x17\x36\x2b\xcf\x7b\xa2\x46\x03\x1e\x41\x4a\xda\x0b\
|
||||
\xdf\xc8\x66\x88\x7c\x6c\xac\x84\xfe\x59\x3a\x93\xff\x26\x15\xfb\
|
||||
\x92\x10\xa9\x5b\x84\xb2\x50\xc6\x75\x21\x06\x12\x69\x9c\x11\x9e\
|
||||
\x1c\x52\x46\x8e\x68\xd7\x6d\x00\xfe\xf3\xce\x02\xe4\xe6\xe6\x62\
|
||||
\xc4\x88\x11\xb0\x58\x2c\x9a\xa0\x11\x67\xfe\x33\xe5\x8c\xe2\xf4\
|
||||
\x3c\x84\xce\x18\x1f\x1b\x27\x29\x29\x89\x6e\xda\xb4\x09\xad\x3a\
|
||||
\xf7\xc6\xc0\x17\x27\x83\x70\x1c\xe4\x68\x68\x5e\xcf\xe0\xc9\x19\
|
||||
\xab\x8b\x10\x2a\xb0\x6c\x22\xea\x42\x84\xef\x39\xc2\x93\x3b\x41\
|
||||
\xb5\xbc\x71\xf5\x92\x5d\xbf\x01\x00\xce\x03\x88\xec\xaf\x21\x8a\
|
||||
\x11\x54\x6b\x39\x44\xe4\x45\xd9\x67\x8e\x21\xe7\x42\xa6\xa8\x5b\
|
||||
\x89\xdf\x26\x52\x99\xec\xcf\x50\xe8\x5b\x52\x2d\x64\xf1\x14\xe5\
|
||||
\xed\xda\x6f\x04\x5a\xb4\xef\x81\xf4\xf4\x74\x24\x24\x24\x50\x35\
|
||||
\x67\xa0\x91\x7b\x55\x4c\xc2\xfd\x5e\xbb\x77\xef\xa6\xfd\xfb\xf7\
|
||||
\x47\x40\x68\x38\xc6\xcf\x58\x89\xe0\xb0\x9a\x62\x1d\x29\x91\xeb\
|
||||
\x9f\x6c\x18\xd4\xc2\x98\xf8\xb2\x30\x00\x16\x4b\x19\x16\x4d\x1b\
|
||||
\x2d\x9a\x74\x50\xb3\x0f\x10\xf0\xb0\x26\x18\xc4\x2b\xb4\x3e\xc2\
|
||||
\xdb\x8d\xb2\xdb\xff\x2c\xe5\xf8\x79\xc5\x1c\x54\x56\x56\x40\xa6\
|
||||
\xa7\xea\x95\x53\x11\x07\x44\xc6\x3e\x65\x61\xde\x7e\x01\x78\x6f\
|
||||
\xf1\x06\x34\x68\xd2\x0a\xe3\xc7\x8f\xc7\x9a\x35\x6b\xe8\x83\x30\
|
||||
\xf9\x70\x46\xa4\x35\xbd\xab\xb2\xb2\x12\x1f\x7e\xf8\x21\xca\xcb\
|
||||
\x2d\x18\xf9\xe6\x6c\x04\x85\xd6\x80\x20\x0d\x08\x02\x1b\x61\xc1\
|
||||
\x1a\x22\xb9\xa7\x8c\x80\xa0\x1d\x87\x0d\x3b\x76\x60\x07\x32\xd3\
|
||||
\xf6\x4b\xbc\x27\xea\x45\xa7\x0a\x55\x44\xe7\xd7\x01\x7e\xa9\x49\
|
||||
\xea\xae\x0d\x48\xf9\x6d\x9d\x44\xae\xc4\x6f\x4b\xdf\x92\x87\xc9\
|
||||
\xff\xb3\xec\x8a\x32\x61\xc2\x97\x3d\x3d\xbd\xf1\xca\x7b\x5f\xa0\
|
||||
\xa0\xb0\x10\x53\xa6\x4c\x41\x59\x59\x99\x4b\x1e\x5c\xa7\x1d\xe4\
|
||||
\x6a\x8f\x53\x4a\xb1\x6d\xdb\x36\x9a\x9a\x9a\x8a\x87\x5b\x77\x46\
|
||||
\xbb\x6e\x4f\x8b\xc4\x5d\x26\x42\x0b\x34\x1d\xac\x88\x4b\x64\x16\
|
||||
\x1d\x30\x80\x0e\x91\xf4\x13\x29\x1d\xb5\x59\xb1\x2d\x61\x89\xf4\
|
||||
\xf1\xa8\x97\x80\x90\x36\xda\xda\x26\xdf\x90\x3e\x11\x31\xa8\xf1\
|
||||
\xe8\x08\x51\xa2\xdb\xb4\x66\x21\xec\x2b\xdb\x15\x49\xf9\x6f\x29\
|
||||
\x2d\x4d\xca\xff\x02\x0f\x23\x0a\x3e\x26\x58\x1f\xa2\x62\x62\xd1\
|
||||
\xb9\xd7\xb3\xb8\x76\xed\x1a\x96\x2c\x59\x42\xb5\xec\x6e\x46\x3b\
|
||||
\x8c\x33\xda\xc3\x6a\x61\x37\x6f\xde\xbc\x33\x71\xe2\x44\x84\xd7\
|
||||
\x6e\x88\xf7\x16\x6d\x80\xc9\xdd\x5d\x66\x4a\x51\x4e\x08\x09\x17\
|
||||
\x40\x55\xa1\x6e\x4a\x63\x36\x1b\xf3\xd4\xb1\xdf\x71\x32\x75\xb7\
|
||||
\xfd\xc1\x23\x18\x68\xf0\x12\xaf\x9c\x12\x95\x09\xc4\x18\x27\x39\
|
||||
\x37\x34\x18\xb2\x10\x9e\x81\x91\x76\xeb\x46\x46\x1a\xd2\xf6\x6f\
|
||||
\x55\xc5\x90\xa8\xcd\x43\x47\x28\x1e\x71\xa8\x9b\xac\xf1\x39\x0e\
|
||||
\x23\x26\xc4\xe3\xa1\xe6\xed\x31\x6b\xd6\x2c\xa8\xd9\xec\x5c\xe9\
|
||||
\x30\x4e\x4d\xd1\x54\x53\xa4\x94\xe2\x21\x00\xcc\x9a\x35\x2b\x28\
|
||||
\x3b\x3b\x1b\x3d\x06\xfd\x07\x3e\x7e\x41\x3c\xd3\xa4\xbc\x78\x0c\
|
||||
\x10\xe1\x9e\x52\x89\xdc\xf1\xba\x08\xc4\x30\x86\x66\x88\xe1\xf2\
|
||||
\x74\x94\x52\xec\xff\xf5\x47\xc9\x6a\x10\xd6\x15\xf0\x0c\x85\x48\
|
||||
\x47\x89\x16\xfc\xc7\x9e\xa7\x9b\xd9\x1f\xa1\xcd\xfb\x8b\xe1\x7b\
|
||||
\xb7\x7c\x2f\xd5\x83\x4a\x92\x1f\xd8\x30\x56\x59\x02\x43\x72\x99\
|
||||
\xb2\x52\x5e\x0d\x00\x43\xca\x09\x28\x42\x6b\xd4\xc2\xc0\xd1\x6f\
|
||||
\x23\x2f\x2f\x0f\x4b\x97\x2e\x75\x09\x53\xe8\xb0\x04\x52\x4f\xcb\
|
||||
\x55\x7b\x16\xae\x8b\x17\x2f\xd2\x6f\xbf\xfd\x16\x61\x91\xf5\xd1\
|
||||
\xeb\x99\x57\x45\xc7\x99\x38\xaa\xa8\x24\xc2\x52\x71\xee\x50\x85\
|
||||
\xf1\x9a\x8a\x4a\x20\x11\x63\xf0\x0a\x2a\x23\xa4\x9f\x3d\x71\x10\
|
||||
\xbb\x37\xae\x96\x24\xb7\xe8\x71\x72\x4e\x4d\x35\x87\xa6\xd8\x29\
|
||||
\x91\xdd\xde\x02\xe7\xe1\x03\x00\x38\xb2\x77\x33\x2e\x9e\x3d\x21\
|
||||
\xcd\x69\xd6\x1d\x00\x07\xb3\x1d\xa3\x83\xa9\xcc\x52\x2a\x95\x9c\
|
||||
\x32\xd2\x44\x9b\xc7\xfa\x22\xa6\x65\x27\xcc\x9d\x3b\x17\xa9\xa9\
|
||||
\xa9\xd4\x48\x9b\xaa\x02\x17\xd5\xb4\x5a\x2d\xd1\x8f\xfd\x7d\xf3\
|
||||
\xcd\x37\x28\x2a\x2a\x42\x8f\x81\xa3\xe1\xe5\xe5\xcb\x00\x0a\x89\
|
||||
\x64\x32\x11\xf5\x0b\x29\x5c\x14\x4f\x09\x23\x80\x13\xe9\x99\x10\
|
||||
\x39\x5f\xb0\x5a\x2b\xf1\xd5\xc7\xaf\xa1\x92\x47\x8c\xa2\xc6\x13\
|
||||
\x76\xab\x81\xc8\xb5\xd5\xe8\x12\xab\x6c\xd9\xf3\x31\x87\xd4\x45\
|
||||
\xf5\xd8\xc1\xa2\x44\xb7\x64\xc6\xeb\xb0\x5a\x2b\xe5\x65\x13\xef\
|
||||
\xa5\xb5\x48\x90\x85\x13\x49\x75\x50\xb3\xb7\x89\xf5\x01\x08\x31\
|
||||
\xa1\xef\x73\xe3\x00\x00\x0b\x17\x2e\xac\xd2\xda\x2a\x42\x88\x64\
|
||||
\x8b\x73\xe5\x57\x56\x56\x86\xb5\x6b\xd7\xc2\xcb\xc7\x0f\x5d\x7a\
|
||||
\x0f\xe5\x21\xb5\x8c\xb6\x4f\x25\xeb\x00\xd5\xb8\x67\xe3\x53\x9d\
|
||||
\xfb\x33\xc7\x53\x70\x39\xfb\x0c\x2f\xb9\x05\x02\xcd\x3e\x82\x23\
|
||||
\x87\x97\xf7\x12\x85\x82\x44\xf1\x24\xb7\x46\xbb\x91\x70\xf3\x0a\
|
||||
\x04\x00\x64\x9d\x3c\x84\xa3\xc9\xdb\xa4\x39\xae\x52\x06\xaa\x28\
|
||||
\x8f\x20\x79\x8a\x96\x0d\x26\x8e\x78\x0f\x2a\x5a\x40\x9a\xb7\xeb\
|
||||
\x8e\x90\xb0\x9a\x48\x4a\x4a\xc2\xd5\xab\x57\xa9\xd1\xa5\x39\x4e\
|
||||
\x97\x9f\x38\xbb\x92\x92\x92\xe8\xc5\x8b\x17\xf1\xf2\xd4\x45\xa8\
|
||||
\x1e\x51\x57\x26\xb1\x29\xef\xd5\x9e\xf5\xc2\xc0\xdc\x53\x6a\xc3\
|
||||
\xba\x15\x73\x60\xb3\xf2\xe8\x9a\xa8\x17\x01\x9f\xba\x72\x0e\xad\
|
||||
\xee\x18\x15\xf3\x62\x7f\x01\x0d\x3a\xa3\x4e\xef\x0f\xc4\x28\x89\
|
||||
\xcb\xe3\x51\x59\x51\x29\xfb\x2e\x55\x29\x97\x20\x4d\x52\x22\x59\
|
||||
\x12\xf4\xea\x2c\x50\x5e\x5f\xff\x40\x3c\xfb\xda\x07\xb8\x7b\xf7\
|
||||
\x2e\x12\x12\x12\xaa\x04\xf2\xe4\x5c\x9d\x72\x56\xab\x15\x5b\xb6\
|
||||
\x6c\x81\x97\x8f\x1f\x5a\x76\xe8\xc9\xaf\xb8\x96\x7b\x26\xd9\xff\
|
||||
\x5a\xf7\x4a\x37\x83\xf0\x4c\x98\xe7\xbf\xae\x5c\xc4\x89\x83\x3b\
|
||||
\x79\xde\xe3\x09\xd4\x1d\x2a\x58\x37\x21\x57\xb4\x8c\xf5\x10\x21\
|
||||
\x1c\x6a\xb4\x1b\x05\xce\xdd\xcb\x2e\xd1\x9d\x4a\xc7\xf9\x53\x69\
|
||||
\x9a\x65\xa1\x32\x23\xaa\xbc\x6c\x6a\xf1\xa1\xe2\x99\xed\x31\xf0\
|
||||
\x3f\x08\xae\x5e\xd3\x01\x80\x69\xd4\x85\xc3\x19\x5d\x95\x2c\x5c\
|
||||
\x47\x8e\x1c\xa1\x09\x09\x09\x88\x89\xed\x88\xc0\xd0\x30\xd9\x88\
|
||||
\x97\x46\x22\x15\xd5\x1a\xc9\x9c\xc5\xba\x0b\xd8\x78\xd4\x2e\x2c\
|
||||
\xc8\xee\xed\x3a\xcb\x86\x55\x9f\x4a\xdf\x8e\xe8\x05\xf8\xd4\x73\
|
||||
\x64\x38\x54\x03\x2c\x47\xa9\xa3\xc2\x4b\x00\x37\xaf\x40\x84\xb7\
|
||||
\x7f\x91\xd7\xad\x6c\xd8\xbc\x66\x21\x2c\x96\x32\xd1\xe5\x41\x40\
|
||||
\x15\xb3\x9b\x2a\x5c\x1d\xd2\x2c\xa3\x4c\x79\xa5\x77\x54\x74\x61\
|
||||
\x50\x42\xc1\x71\x1c\xda\x3f\x11\x87\x94\x94\x14\x64\x65\x65\x51\
|
||||
\x2d\x12\xa7\x29\x66\x6b\x39\x8a\xd4\xa6\x1e\xa5\x14\xeb\xd6\xad\
|
||||
\x43\x41\x41\x01\xba\xf4\x1e\xa6\xb2\xfa\x40\xa1\xc5\xb0\x23\x9b\
|
||||
\x10\xb0\x0e\x64\x56\xeb\x90\x44\x07\x22\xe6\xf1\xfb\x6f\x89\x48\
|
||||
\x5a\xff\x8d\xe4\x8c\x6b\x3c\x51\x52\xeb\x1d\x9d\x9e\x8e\x12\x96\
|
||||
\x6c\xd0\x88\xfe\x6b\x10\x02\x44\x76\x7b\x13\x26\x4f\x5f\xd1\xba\
|
||||
\xb0\xed\xa7\xaf\x14\x95\xa0\x0a\x39\x8e\xfd\x51\x99\x26\x44\x14\
|
||||
\x75\x27\x62\xfd\x24\x60\x4a\x97\xde\x43\x51\x5e\x5e\x8e\x29\x53\
|
||||
\xa6\x68\xba\x6c\xb4\x3a\x8b\x53\x43\x9d\x68\x2d\x0f\xa1\x94\xe2\
|
||||
\xe8\xd1\xa3\xe0\x4c\x26\x44\x3f\xd2\x56\x43\x1b\x25\x8e\x46\x34\
|
||||
\x71\x34\x13\x47\xc3\x17\x25\x72\x8f\x04\x08\xac\x56\x1b\x92\x7f\
|
||||
\x5d\x0b\xab\xc0\x7b\x6a\x0d\x04\xfc\x63\xf4\xb0\x49\x2a\x2a\x10\
|
||||
\x61\xbd\x08\x32\xb0\x89\x39\xa4\x1e\x02\x1b\xd9\xc1\xf5\xd6\xca\
|
||||
\x0a\xec\xdb\xfa\x03\xac\x95\x95\x2a\xa4\x4a\x4d\xd3\x56\x01\x98\
|
||||
\x50\xaa\x6b\x50\x8c\xac\xd7\x18\x7e\x81\xa1\x48\x4f\x4f\x47\x65\
|
||||
\x65\xa5\x21\xcf\xaa\xd8\x41\xae\x2c\x3e\xca\xcf\xcf\xef\x7e\xe2\
|
||||
\xc4\x09\x54\x8f\xa8\x83\xf0\x5a\x51\x8c\x92\xc8\x90\x29\xc1\x73\
|
||||
\x29\x69\x6f\x7c\x3f\x51\xd1\x73\x49\x21\x91\x34\x41\xb7\x25\x4c\
|
||||
\xfa\xb3\x27\x53\x25\x20\x88\x47\x10\xd0\xf4\x43\x55\xcc\x9c\x13\
|
||||
\x40\x99\xe3\x8f\x57\xb8\x08\xc7\x21\x7a\xf8\x4a\xd1\xba\x70\xf1\
|
||||
\xcc\x71\x1c\xd9\xb7\x45\x2c\x9f\x40\xaa\x64\xf5\x21\x6c\x7d\x28\
|
||||
\x53\x07\x61\x5c\x31\x64\x9a\xca\xeb\xe7\xe3\x17\x80\xa8\x98\x58\
|
||||
\xdc\xb8\x71\x03\x67\xce\x9c\xa1\x46\x36\xb4\x10\xa5\x38\x67\xbe\
|
||||
\x72\xf6\x39\x2b\x2b\x2b\xa9\xb0\xb0\x10\x0d\x1f\x6e\x2d\x99\xda\
|
||||
\x19\x97\x01\x3b\x6a\x08\xe3\x31\x15\x31\x00\x82\xb7\x94\xc8\xb1\
|
||||
\x00\x84\xc5\x26\x00\xd8\xf9\xf3\x0a\xc9\x6a\x10\xd1\x0b\x30\x87\
|
||||
\x49\xc4\x44\xb3\xa3\x88\x73\x31\x8e\x89\xe3\xe1\x1f\x86\xb0\x47\
|
||||
\x9f\x17\x1b\xe2\xb7\x75\xcb\x41\x6d\x54\x3e\xe3\xa8\x04\xfb\x82\
|
||||
\x5a\xfd\x04\xd7\x88\xc2\x24\xcf\x0a\x4e\x02\x55\x68\xf4\x70\x6b\
|
||||
\x54\x56\x56\xe2\xc4\x89\x13\x86\xb6\x9f\x11\x5d\xde\xae\xe8\x3f\
|
||||
\xa9\xa9\xa9\xe0\x38\x0e\x31\xb1\x1d\x15\xa3\x92\x91\xa8\xa0\xf4\
|
||||
\x50\x0a\x8c\x57\xc2\x1c\x08\xfc\x49\xed\xdd\x5f\xb9\x97\x90\xb2\
|
||||
\xf3\x67\x01\xfd\x61\x37\x8a\xca\x34\x77\x01\x13\x05\xb9\xd7\x4c\
|
||||
\x4d\xcb\x07\xd5\xf8\xd9\xdf\x85\x77\x7c\x09\x26\xb3\x1d\xef\x7d\
|
||||
\xf2\xf0\x1e\x64\x9f\x39\x2e\xd6\x83\x30\x75\x12\x85\x04\x28\xea\
|
||||
\xa9\xbc\x67\xe2\x10\xc5\x7d\xe3\x16\x76\x64\x51\x6a\x6a\xaa\x6b\
|
||||
\x1e\x55\x57\x76\xca\xc8\xc8\xc8\x40\x60\x68\x0d\x34\x89\xed\xe4\
|
||||
\xa8\xb4\x38\x53\x76\xf4\xe2\xf3\xcf\x96\xf2\x32\x7c\xf6\xce\x70\
|
||||
\x94\x97\xf2\x70\xdd\x88\x9e\x40\x60\x53\x15\x1b\xa8\xd2\x35\x41\
|
||||
\x35\x4c\x71\xfa\xce\x26\x73\x48\x5d\xd1\xd2\x5d\x59\x61\xc1\xfc\
|
||||
\x77\x47\xa0\xb4\xb8\x48\xbf\xbc\x30\x52\x3f\x38\xa4\xad\xdd\xa0\
|
||||
\x09\xdc\xdc\x3d\x90\x91\x91\xe1\xba\x25\x41\x49\x03\xb5\xfe\xe7\
|
||||
\xe6\xe6\x22\x20\xa8\x1a\x6a\xd4\xaa\x2f\xf1\x2c\xd6\xa9\x23\xf3\
|
||||
\xe1\x48\xfe\x7e\x56\x13\x67\x9f\xa9\xcc\x20\x49\x71\xfe\x54\x3a\
|
||||
\x83\x35\x08\x04\xea\x3e\x27\xa7\x4c\x5a\x54\x4b\x55\xd1\x56\x9b\
|
||||
\x45\x4c\x38\xb1\x4b\x5c\xd5\x5b\x0f\x85\xbb\x5f\x75\x00\xc0\x95\
|
||||
\xec\xd3\x38\x76\x70\xa7\xc2\x28\x4a\xe5\xcf\xb2\x01\x22\x0d\x14\
|
||||
\xaa\xf1\x2c\x24\x09\x08\xae\x0e\x4f\xb3\x37\x6e\xde\xbc\x09\x8b\
|
||||
\xc5\xa2\x89\xea\x51\x9d\x41\xce\xd6\xad\x08\x57\x56\x56\x16\x6a\
|
||||
\xd4\x8e\x82\xd9\xc7\x4f\x66\x2f\x53\x2c\xd4\x61\x3c\x96\x92\x0d\
|
||||
\x8b\xf2\xcf\x14\x4a\x9b\x9d\x84\x39\x5b\xb7\x62\xb6\x84\x35\xa8\
|
||||
\x3f\xd2\x6e\x77\xd3\xed\x1d\xe8\x20\x1f\x05\xd1\x9a\xa8\x3c\x4b\
|
||||
\xe1\xfe\xf5\xdb\xa1\x4e\xaf\xf7\xc4\x54\xeb\x57\xce\x41\x45\x65\
|
||||
\x05\xe4\x8a\x9c\xdc\x5f\xe5\x28\x5f\x53\xd9\xc4\x61\x50\xcb\xa2\
|
||||
\x50\xe4\xe1\x69\x46\x4c\xcb\x8e\xb8\x76\xed\x1a\x8a\x8a\x8a\x5e\
|
||||
\xd6\x82\x14\x28\xf9\x3f\x67\xa4\x63\x00\xe0\xd6\xad\x5b\xe9\xb7\
|
||||
\x6f\xdf\x46\x78\xad\x28\x9e\xd4\x12\x99\x77\x91\xf5\xe1\x8b\x8c\
|
||||
\x94\x3a\x3e\x13\x07\xf1\xd7\x9e\xfe\x4a\xf6\x69\x1c\xfd\x7d\xbb\
|
||||
\x3d\x0f\x93\x17\x50\x7f\x94\xe3\xcc\x74\xb0\xb1\xb1\x33\x95\x28\
|
||||
\x8c\xa5\x6c\xa3\x2a\x5a\x8f\x69\x4d\x02\x0e\x35\xda\x8e\x82\x9b\
|
||||
\x4f\x88\xdd\xba\x90\x99\x6e\xf7\xda\x2a\xfc\xdd\x54\xf1\x5f\xf6\
|
||||
\x1e\x8e\xfe\x71\xb6\xae\xc2\xff\x16\xed\x7b\xa0\xb8\xb8\x18\x57\
|
||||
\xae\x5c\x59\x66\x74\x69\x0f\x67\xd4\x39\x77\xeb\xd6\xad\x96\x56\
|
||||
\xab\x15\xfe\x41\xa1\x72\x85\x4e\xd9\x06\x50\x1b\xe4\xea\x23\x0c\
|
||||
\x4c\x1b\x6e\x4f\x5c\x26\xa5\xaf\xd1\x1d\xf0\xae\xc5\x98\xf3\x21\
|
||||
\xb7\x5e\xeb\x4a\x73\x0a\x3e\x45\x15\xd6\x05\xa5\x2f\x81\x50\x98\
|
||||
\xcc\x7e\x08\x6b\xf3\x9c\x18\x6d\xc7\xba\x65\xa0\xb0\x39\x96\x57\
|
||||
\xc5\x6a\xe2\x30\xc1\xa1\xfd\x3e\x34\x2c\x52\x70\x74\x1a\x77\x79\
|
||||
\x1b\x5d\xbe\x78\xf7\xee\x5d\xd8\x6c\x36\x78\xf9\xf8\x49\x75\x15\
|
||||
\x49\x97\x9c\x2f\xcb\x58\x13\x91\x80\x7f\x20\x0a\xbe\xce\xeb\x40\
|
||||
\x47\x92\xb7\x4a\xfe\x1e\x62\x02\x1a\xbf\xa5\xde\x11\x1a\xd6\x6b\
|
||||
\x85\x04\x2d\x75\xac\x43\xa3\x29\xc8\x14\x95\x90\x3d\xb5\xba\xbd\
|
||||
\x09\x93\xd9\x1f\x00\x70\x68\xd7\x46\x1c\xd8\xb1\x4e\x06\x00\x22\
|
||||
\x6a\xb2\x89\x92\xb3\x31\x14\x54\xe6\x07\xe4\xbf\x29\xb4\xdd\x9d\
|
||||
\x3b\x77\x5c\xc3\x24\x18\xd9\x2f\xbb\xa0\xa0\x00\x94\x52\x98\xcd\
|
||||
\x3e\x12\xbe\x4c\x1c\x84\x54\x74\x06\x2b\x59\x13\x15\xbc\xa4\x44\
|
||||
\xee\xaa\x11\xd2\x53\x6a\xc5\xa6\xd5\x0b\x50\x5a\x5c\x60\x8f\x10\
|
||||
\xda\x0e\x08\x88\x61\x1a\x97\xca\x05\x01\x55\xf6\x43\xf4\xad\x0b\
|
||||
\x44\x21\x38\xa8\xb0\x2f\x73\x48\x5d\x84\x34\xed\x0d\x00\xb0\xd9\
|
||||
\xac\x58\xfb\xd5\x47\xa8\xa8\xb0\xc8\xa8\x03\x25\x94\x31\xe9\x30\
|
||||
\x20\x13\x38\x4a\xfd\x84\x01\xfd\x8b\xa0\x12\x2f\x6f\x00\x10\xdb\
|
||||
\xd2\x08\xe5\xe2\xf4\xe0\xbe\x6c\x58\x7e\x7e\x3e\x6c\x36\x1b\xcc\
|
||||
\xde\x3e\xfc\xc8\x22\x8c\x05\x47\xb2\x3e\x39\x68\x1c\x44\x7a\x2f\
|
||||
\x23\xd7\x7c\xdc\x73\x7f\x1c\x41\x46\xda\x3e\x49\x72\x6b\xb5\xd8\
|
||||
\x3e\x8b\x1c\x86\x28\xd5\x46\xfc\xa8\x7a\x3b\x89\x86\x85\x5b\x3b\
|
||||
\xa8\xd1\xb3\x5f\xc2\x33\xa8\x36\x00\x20\xf7\xd2\x59\x1c\xde\xb3\
|
||||
\x49\x51\x0c\xc2\xe0\x4f\x89\x28\x00\x50\x85\xcd\x56\x8c\xc3\xbc\
|
||||
\x07\x00\x2f\x6f\x5f\x91\x1a\x19\xa5\x5c\x9c\xde\xac\x51\x35\x41\
|
||||
\x48\x70\x4c\x69\xc6\x50\x01\x7f\x00\x05\xfe\x80\x4a\xf1\xa8\x04\
|
||||
\xe5\x25\x42\x3c\xd8\x25\x37\x2a\x2c\x81\xa9\x3b\x4c\xe2\x3d\x44\
|
||||
\x21\x0e\x81\x38\x2a\xa6\x84\x81\xd5\xa8\x5a\xb9\x59\xda\xa3\x30\
|
||||
\xaa\x51\x85\x5a\x40\xed\x96\xee\x5a\xdd\xdf\x12\xeb\xbb\xfe\x9b\
|
||||
\x4f\x60\xad\xac\xe0\x27\x24\x5b\x57\x86\x32\xf0\xb6\x38\xc2\x08\
|
||||
\x2d\x6c\xfd\xec\x02\x03\x65\x56\x57\x40\x77\x7f\x1f\xe5\x8c\xe2\
|
||||
\xf4\x66\x0d\xfb\xdf\xcf\xcf\x0f\x1c\xc7\xc1\x52\x56\xca\x80\xf7\
|
||||
\x58\x22\x4d\x24\xd1\x5a\x34\xc7\x0b\xbb\x7f\x10\xde\x44\x2f\x2c\
|
||||
\x1f\xb1\xc7\xbf\x71\xf5\x92\x34\x7b\x40\x80\xda\x83\xe5\x8d\xa7\
|
||||
\x89\xf1\xa1\xba\x4a\xaa\x43\x90\x03\x42\x51\x83\xce\x81\x20\xf4\
|
||||
\x91\xfe\x30\x99\xed\xab\xc2\x2f\x9d\x39\x81\x3f\xb3\xfe\x10\x21\
|
||||
\xc8\xac\x70\x28\x50\x06\xc8\x56\x60\x40\x34\x57\x51\x66\xb9\x8a\
|
||||
\x40\xe7\x84\xf5\xb2\xfe\xfe\xfe\x86\xb6\x9b\xd1\xf4\x07\xa9\xcd\
|
||||
\x9e\xa0\xa0\x20\x70\x1c\x87\x92\xe2\x02\x66\x96\xf0\x30\x0f\x7e\
|
||||
\x43\x0c\xbb\xaa\x21\xc9\xce\xc4\x01\xe1\x23\xd1\xe7\xf2\xb2\x52\
|
||||
\x7c\xf2\xd6\xb3\x28\x2d\x2e\xe4\x51\xa2\xbd\xed\x56\x03\x96\xd7\
|
||||
\xa8\x69\xed\x72\x70\x9d\x36\x2e\x8e\x35\x43\xc9\x10\x88\x4a\x67\
|
||||
\x1f\x64\x46\x50\xcf\xe0\xda\x08\xef\x30\xda\x6e\xe9\xb6\x56\xe2\
|
||||
\xc7\x2f\xa7\xa3\xf0\xde\x1d\x86\x8f\xb2\x94\x82\xca\x28\x85\x40\
|
||||
\x21\xc4\x59\x24\xe8\x47\x7c\x1b\x08\x75\x0d\x0e\x0e\x76\xba\x3b\
|
||||
\xb0\xaa\xa9\x47\xcf\x80\x17\x10\x10\x00\x8e\xe3\x50\x5e\x52\x22\
|
||||
\x71\x3e\x95\xb8\x54\xd5\x9f\xad\x90\xa0\x08\x41\x66\xfa\x7e\x9c\
|
||||
\xcb\x38\x22\x8d\xe2\xa8\xd1\x8e\x0d\x4e\xb4\xd8\x87\xdc\x3a\xad\
|
||||
\x6e\x45\x70\xd6\xb1\x6a\x1d\x6c\xaf\x4f\x44\xa7\x57\x40\x38\xfb\
|
||||
\x4a\xee\xb4\xfd\x5b\x71\xe0\xb7\x75\x72\x1d\x4a\x09\xac\x77\x08\
|
||||
\x23\x0a\xc1\xc6\xfe\x5f\x80\x2c\x0b\x0b\x90\x8d\x6c\x74\xc8\x19\
|
||||
\xdd\x2f\x2d\x34\x34\x14\x26\x93\x09\x85\x05\x79\xe2\xca\x37\x01\
|
||||
\x1b\x06\x76\x8f\x69\x51\x8f\x64\x71\x66\x8e\xf9\x6f\xfd\x61\x31\
|
||||
\x83\x12\x7d\x11\x08\x79\x54\x85\x92\x29\x78\x86\xaa\x17\x55\x0b\
|
||||
\x76\x45\x1d\x95\x5b\xc0\xd1\x8c\xa3\x02\x30\xf1\xaa\xde\x10\x75\
|
||||
\xfb\x4c\x97\xf4\xa2\xc4\x65\xa8\xb0\x94\x31\x58\x3a\xca\xc0\x97\
|
||||
\xa9\x43\x5d\x55\xeb\x4d\x81\xbb\xb7\xff\x02\x60\xdf\xca\xd3\xe8\
|
||||
\x7e\x72\x9c\x11\x93\x37\x21\x04\xe1\xe1\xe1\x24\x24\x24\x04\x57\
|
||||
\xff\x3c\x2f\x5b\xe0\x4b\x20\x87\x2a\x49\x03\x46\x6e\xce\x11\xfd\
|
||||
\xa5\x14\xc8\xfa\xe3\x30\x8e\x1e\xd8\x21\x61\xac\x1f\x9a\x68\xc7\
|
||||
\x1c\xb0\x30\x2a\xd6\x41\x06\x69\x79\x8a\xc3\x6c\xa2\x5a\x52\x9b\
|
||||
\x7c\xc6\xaa\xce\x22\xe2\x80\x35\x16\xa9\x42\x64\xd7\x37\xe0\x55\
|
||||
\xad\x81\xe8\x2f\x3a\xbc\x67\x13\x03\x45\x66\x2d\x11\xd2\xea\x0d\
|
||||
\xc2\x68\xb1\x72\x2f\xb1\xbd\x2c\xe9\xbf\x6f\x87\x8f\x8f\x0f\xea\
|
||||
\xd6\xad\x3b\xd7\xe8\x7e\x72\x9c\xd1\x1d\xd5\x01\x20\x32\x32\x12\
|
||||
\x79\x37\x72\x61\xb5\x55\x3a\x0a\xd4\x0a\xe4\x25\x81\x72\xa4\x52\
|
||||
\x11\xe0\xb7\x7f\xeb\x0f\x92\xe4\x56\xbd\x0b\x60\xae\x21\x5f\x38\
|
||||
\x44\x95\xca\x14\xdb\x09\xce\x18\xbd\x51\x97\x83\xfe\xcf\xe4\xe9\
|
||||
\x83\xd0\xe6\x4f\x8b\xb9\xed\xdd\xb2\x86\x41\xa2\xb2\xc2\xb5\x04\
|
||||
\xcb\x54\x2e\x06\x63\x7f\x36\x9b\x15\x17\x32\xd3\x11\x1c\x1c\x0c\
|
||||
\x6f\x6f\xef\x29\xce\xa8\x96\x83\xc3\xce\x19\xe2\x84\x10\x82\xe8\
|
||||
\xe8\x68\xdc\xfe\xeb\x0a\xae\x64\x9f\xe1\xad\x08\x44\xd2\x89\x58\
|
||||
\x6f\xbc\x8c\xb1\x83\x89\x4b\x70\x64\xef\x16\xec\xd9\xfc\x9d\xe4\
|
||||
\xef\x79\x68\x02\x83\x42\xa7\x72\x05\x95\xb2\x18\x01\xa2\x62\x56\
|
||||
\x61\xe3\x4b\xab\xd5\xa9\xad\xd2\xa0\x91\x95\x68\xd9\xa6\x00\x10\
|
||||
\x44\x3e\xfe\x06\xdc\xbc\xec\x12\x5d\x7a\xf2\x36\x9c\x39\x9e\x22\
|
||||
\xce\x3e\xa2\x10\x62\x88\xda\x4c\x25\x52\xbb\xdc\xb9\x79\x1d\x05\
|
||||
\xf9\xb7\x51\xab\x56\x2d\x78\x79\x79\xc1\xe8\x66\xbe\x1c\x8b\xc7\
|
||||
\x66\xd7\x50\xaa\xc9\xe7\xd1\xd1\xd1\xb8\x7b\xeb\x2f\x7e\x51\x2e\
|
||||
\x15\x77\x15\x90\x3b\xb4\xd8\x31\x2c\x2c\x16\x14\x46\x91\x0d\x6b\
|
||||
\x97\x7c\x84\x92\x22\xde\x6a\x10\x39\x00\x08\x6c\x06\xa8\x5a\xc6\
|
||||
\x09\xe3\x72\x26\x2a\xa0\x0e\x3e\xdc\x66\x01\x32\x3e\x06\x2e\xac\
|
||||
\x14\xa3\x5c\xff\x7d\x39\x2e\x6d\xfd\x10\x95\x25\xf9\x8e\xfc\x46\
|
||||
\x6b\xa2\x39\x2a\x4f\xf0\x0c\xaa\x89\xea\xad\x87\x8a\x6d\x30\xff\
|
||||
\xdd\x11\x28\x29\x2e\x10\x17\x52\x52\xc2\xa8\xa1\x02\x76\x5d\x14\
|
||||
\x94\xa8\xcc\xf5\x7e\x35\xe7\x1c\x2a\x2c\xe5\x88\x8e\x8e\xd6\xdd\
|
||||
\x80\x49\x39\xa3\x38\x67\x1b\xf8\xb1\xf7\xb1\xb1\xb1\xb0\xd9\xac\
|
||||
\x38\x97\x91\xc6\xec\xc6\x41\x65\xee\x6a\x02\x22\xe3\xed\xe2\xaa\
|
||||
\x34\x10\x9c\xcf\x4c\xb3\x7b\x2d\x01\xc0\x3d\x00\x68\x3a\x4d\x5c\
|
||||
\xbb\xe3\x60\xc8\x54\xb3\xb7\x81\x31\xe2\x59\xf2\x81\xdc\x4d\xc0\
|
||||
\xee\x27\x80\xac\x85\x40\xf9\x2d\x69\xcd\x52\x69\x3e\x72\x7e\x9d\
|
||||
\x81\xf4\xd9\xad\x70\x3d\xe5\x6b\x54\x96\xde\x53\xe8\xab\xda\xcb\
|
||||
\x55\xe4\x33\x89\x22\xa2\xf3\x6b\xf0\xaa\x16\x05\x00\xb8\x91\x7b\
|
||||
\x09\x69\xc9\xbf\x32\x40\x11\x88\x7c\x55\xdc\x7c\x83\x51\xd4\x29\
|
||||
\x95\xda\xe3\xc2\xa9\x74\xb1\x0d\x9d\xed\x03\x2b\xdb\x96\xd9\x95\
|
||||
\xdd\xe6\x5b\xb5\x6a\xf5\x8a\xaf\xaf\x2f\x32\x8e\xec\x15\x69\x30\
|
||||
\x81\x1c\x4f\x46\x19\x37\xb6\x48\xa9\x08\x05\x60\x43\xe2\xb2\x59\
|
||||
\x52\x47\xd4\x1b\x0e\x78\xd5\x74\x5c\x41\xa0\xe4\x5d\x0a\x6d\x1f\
|
||||
\x96\xbb\xc0\xd9\xcf\x81\x9d\x1d\x80\x43\x2f\x02\xf7\x32\xc5\xca\
|
||||
\x36\x6e\xd1\x01\x8f\xb4\xed\x66\xdf\x98\x09\x14\x65\xb7\x2f\x22\
|
||||
\xeb\xfb\x97\x70\x78\x7a\x34\x2e\x6e\x78\x07\xe5\xf7\xae\xca\x75\
|
||||
\x1f\x19\x44\x0c\x8e\xab\xb4\x00\xf8\xd6\x6c\x8a\x5a\x4f\x4c\x16\
|
||||
\xbf\xb1\x6e\xc5\x6c\x58\x2b\x2d\x00\x03\x11\x93\xb7\x83\x84\x91\
|
||||
\x23\x8c\x24\x99\x71\x64\x1f\xdc\xdc\xdc\xd0\xa9\x53\x27\x55\x00\
|
||||
\xbd\x56\xfb\xbb\xe4\xf2\x0e\x0c\x0c\x5c\xde\xa8\x51\x23\xdc\xbc\
|
||||
\x96\x83\xfc\xbc\x9b\x92\x79\x94\x4a\xb4\x96\x30\x1b\x55\x88\x3c\
|
||||
\x89\x12\x5c\xbf\x9c\x8d\x13\xa9\x49\x92\x85\xa9\xde\x08\xb9\x54\
|
||||
\x25\x73\xa4\x29\xf5\x21\x02\x50\x0b\x90\xb3\x16\xd8\xd1\x0a\xc8\
|
||||
\x9c\x01\x94\xfd\x25\x36\x9a\x6f\x40\x30\x5e\x98\x34\x0f\xb3\x57\
|
||||
\xed\xc5\xc7\x2b\x7e\xc3\x84\xf8\x55\xbc\x5b\xc4\x9e\xbe\xa2\xf0\
|
||||
\x26\xae\x24\xcd\x43\xfa\xac\x16\xc8\xd9\x31\x17\x56\x4b\x89\x8a\
|
||||
\xff\x00\x9a\xfe\x84\x6a\xb1\x03\xe1\xee\x6b\x77\xb3\xe4\x9c\xcb\
|
||||
\xc0\xe9\xe3\x29\x92\x6d\x4e\xac\x27\xd3\x0e\x54\x1e\x5e\x5e\x56\
|
||||
\x82\x9c\xf3\x99\xf0\xf7\xf7\x47\xa3\x46\x8d\x88\x51\x9e\xaf\x09\
|
||||
\x1a\xd1\xd2\x85\x38\x8e\x43\xc7\x8e\x1d\x61\xad\xac\xc0\x1f\x87\
|
||||
\xf7\x48\xe0\x08\x96\x07\x89\xc8\x4c\x29\xbc\xb2\xa2\x1c\x6b\x97\
|
||||
\x7c\x0c\x4b\x79\x99\x84\x35\xf0\x8d\x52\xe1\x2d\x2a\x9a\xa9\xe5\
|
||||
\x2e\x70\xe1\x6b\x60\xcf\x93\x40\xfa\x58\xa0\xe2\x9e\xe4\x36\x8a\
|
||||
\xac\x8f\x57\xa6\x2e\xc6\x37\xbb\x72\x10\xf7\xc2\x5b\x30\xb9\xb9\
|
||||
\x81\x10\x0e\x8f\xf7\x1d\x8e\xe5\xdb\xcf\x63\xd2\x27\xdf\xa3\x6e\
|
||||
\xa3\x66\x62\xfc\x8a\xa2\x5b\xb8\xb4\xe9\x5d\xa4\xcd\x68\x86\x2b\
|
||||
\xbb\xe6\xa3\xec\xee\x15\xa8\x7a\x0f\x15\xd2\x98\xbb\x4f\x30\x6a\
|
||||
\xb4\x7b\x41\xcc\x67\xe3\xea\xf9\xa0\xd4\xea\x58\x7f\xfe\x3f\x85\
|
||||
\xfc\x39\xe7\xfc\x29\xe4\xdd\xb8\x8a\x0e\x1d\x3a\xc0\x6c\x36\xbb\
|
||||
\x04\x1a\x91\x1d\x74\xab\x75\x6a\x21\x1b\x76\xe0\xc0\x01\xda\xab\
|
||||
\x57\x2f\x34\x6e\xd9\x05\xd3\xbe\xdc\x22\x4a\x5f\x44\xdc\xe3\x40\
|
||||
\xf2\x2b\x08\x61\xbf\x6f\x4f\xc4\xbc\x49\xcf\x4a\x7a\x4f\xc7\x75\
|
||||
\x40\x48\x2b\x4d\x03\x00\x00\xa0\x38\x07\xb8\xf2\x8b\x9d\xf9\x33\
|
||||
\xb3\x05\xb0\x6f\x92\xf4\xcc\xab\xd3\x10\x13\xdb\x91\xf7\xb1\x50\
|
||||
\xc9\xff\xa3\x70\xca\x54\x58\xca\x70\xea\xe8\xef\xd8\xf2\xfd\x62\
|
||||
\xa4\xed\xff\x55\xc6\xe4\xdc\xbc\x02\x51\xa3\xfd\x0b\x08\x6b\x33\
|
||||
\x1c\x7e\xb5\x63\xe5\xcb\x56\xc4\x7b\x7b\x7e\x96\x82\xbf\x70\x68\
|
||||
\x5a\x03\xd8\x2c\xc5\x30\xb9\xb9\x63\xd4\xc4\xb9\xe8\x3f\x72\x82\
|
||||
\xc4\x77\x1d\x90\xfc\xd2\xca\xbf\x95\x73\xde\xc4\x6f\x89\x4b\x70\
|
||||
\xec\xd8\x31\x34\x6e\xdc\x98\x18\x39\x1d\x52\xf8\xcf\x19\xd9\x6c\
|
||||
\x9b\x0d\x6b\xd6\xac\x19\xe9\xda\xb5\x2b\xce\x67\xa6\xa3\xb8\xf0\
|
||||
\x9e\xc8\xb4\x1d\xdc\xde\x8c\xb0\xb0\x6f\xcb\xf7\x52\xeb\xd6\x79\
|
||||
\x56\x42\xea\xc8\xf8\x0c\x5f\x3f\x6b\x39\x90\xbb\x05\x48\x1d\x05\
|
||||
\x64\xce\x94\x75\x4e\x58\xcd\x7a\x18\xf2\xf2\x7b\x78\x67\x7e\x22\
|
||||
\x5a\x75\xea\x05\x2f\x6f\x3f\x99\x47\x8c\xa8\x20\x49\x3d\x3c\xbd\
|
||||
\xd0\xbc\x5d\x0f\x4c\x9c\xf3\x1d\x9e\x1b\x3b\x1d\x75\x1a\x3e\x2c\
|
||||
\x13\x26\x72\x77\x2f\x40\xe6\xb2\x38\x5c\x4d\x5e\x82\xca\xb2\x02\
|
||||
\xc6\x50\x2b\x5f\x0a\xee\xee\x17\x26\x7a\x5d\xad\x95\x15\xd8\xb5\
|
||||
\xe1\x5b\x54\x94\x97\x29\x70\x74\x8c\x13\x50\x14\xf9\x6d\x38\x79\
|
||||
\x78\x37\x1e\x7e\xf8\x61\x19\x79\x33\xb2\xa1\xba\x0c\x59\xea\xcc\
|
||||
\xf4\x2d\x84\xf9\xfb\xfb\xe3\x85\x17\x5e\x40\x7e\xde\x0d\x69\xad\
|
||||
\x27\xb3\x24\x83\x5d\x1f\x47\x88\x7d\x97\x8f\x63\x29\xbc\xd5\xc0\
|
||||
\xe4\x03\x44\xbf\x01\x98\x3c\x14\xfc\x07\x40\x65\x21\x70\x76\x21\
|
||||
\x90\xd4\x09\x38\x34\x0a\xc8\xff\x43\xfc\x6e\xbd\xe8\x47\xf0\xca\
|
||||
\x7b\x5f\x60\xd1\x2f\xc7\xf1\xfc\xf8\x99\x08\xad\x5e\x53\x6e\x16\
|
||||
\x63\x8d\x07\x84\x88\xd8\x68\x76\x73\x0c\x5f\xff\x20\x3c\xf3\xea\
|
||||
\x34\xcc\x4f\x48\xc3\xa4\x4f\x7e\x44\xc3\xa6\x6d\x40\x78\x09\xb2\
|
||||
\xfc\x4e\x0e\xce\xaf\x7d\x1d\x47\xa6\x37\xc6\x85\xf5\x6f\xa1\x2c\
|
||||
\xff\x8a\x83\x1e\x46\x40\x10\x35\xf0\x53\x78\x55\x6f\x64\xe7\x45\
|
||||
\xe7\x33\x90\xba\x6b\x23\x83\xd7\x96\x9b\xea\x84\x76\xd9\xbd\x71\
|
||||
\x15\x72\xce\x65\xe2\x99\x67\x9e\x81\x72\xa7\x46\x23\x6d\x5f\xa5\
|
||||
\x2d\x31\x4b\x4a\x4a\x50\xb7\x6e\x5d\x5a\x5c\x52\x8e\x95\x49\x97\
|
||||
\xe0\xe7\x1f\xac\xea\xa2\xa6\xa0\xf8\xec\x9d\xe1\xd8\xff\xeb\x8f\
|
||||
\x7c\x4b\x3f\x0f\xc4\x7e\x2e\x77\x63\xdb\x2c\xc0\xf9\x2f\x81\x0b\
|
||||
\x2b\x80\xb2\x1b\xb2\xef\xf8\xf8\x05\x62\xfc\x8c\x95\x78\xb4\x6b\
|
||||
\x7f\x98\x4c\x6e\xea\xbe\x39\x25\x78\x9e\x18\x8b\x63\xb3\x5a\x91\
|
||||
\x95\x71\x04\x9f\x4d\x7e\x0e\x37\xae\x5e\x92\x3b\xc9\x3c\x7c\x10\
|
||||
\xd6\xfa\x3c\x22\x3b\xa4\x00\x00\x0b\xf0\x49\x44\x41\x54\x59\x44\
|
||||
\xc5\x7d\x0a\x37\xef\x40\xd9\xbb\x2b\xbb\x17\x20\xfb\xe7\x89\x00\
|
||||
\x80\x06\x4d\x5a\x62\x7e\x42\x9a\xfc\xe0\x28\xc6\xe5\x5d\x61\x29\
|
||||
\xc3\x98\x7e\x4d\x70\x2f\xef\x3a\x32\x32\x32\x10\x15\x15\xe5\xf2\
|
||||
\xc6\x09\x9a\x1b\x59\xe8\x1d\xba\xe4\xe5\xe5\x85\x61\xc3\x86\xa1\
|
||||
\xa4\xb8\x00\xfb\xb6\xfe\x20\x07\xb8\x30\x05\xbd\xfa\x67\x16\xd2\
|
||||
\x93\xb7\x49\x56\x83\xba\xc3\xa5\xf7\x96\x7b\x40\xce\x0f\xc0\xbe\
|
||||
\xde\x3c\x29\x93\x3a\xa7\x7a\x44\x1d\xbc\x3c\x75\x21\x16\x6f\x38\
|
||||
\x89\x76\x4f\xc4\x81\x33\xb9\x31\xae\x1d\x06\x1f\xad\xb0\x97\x52\
|
||||
\x15\xc3\x00\x85\xe4\x0a\x91\xad\x59\xe0\x4c\x78\xe8\x91\xb6\x98\
|
||||
\x9f\x78\x04\x93\xe6\xfd\x88\xfa\x0f\x35\x17\xbf\x61\xb3\x14\xe3\
|
||||
\x7a\xca\xd7\x48\x8f\x8f\x45\xee\xde\x45\x28\xcb\xcb\x91\xc8\x6c\
|
||||
\xab\xa1\x30\xf1\xd6\x85\x8b\x67\x4f\x20\xeb\xe4\x21\x07\xe7\xaf\
|
||||
\xd0\x5f\x27\x0f\xef\xc6\x8d\xab\x7f\xa2\x6b\xd7\xae\xa8\x57\xaf\
|
||||
\x1e\x31\x7c\x90\x95\xcc\x6b\x52\xc5\x0d\xe7\x2e\x5c\xb8\x40\x9b\
|
||||
\x37\x6f\x0e\xff\x90\x70\x2c\xfa\xe5\x04\xcc\x66\x1f\x09\x07\x46\
|
||||
\xed\x58\x83\x09\x83\x5b\xe1\x92\xb0\x58\x37\xbc\x27\xd0\x7e\x0d\
|
||||
\x50\x9e\x07\x5c\x5e\x07\x9c\xfb\xd2\x81\xf9\x37\x7c\xb8\x35\xfa\
|
||||
\x3c\x37\x0e\x6d\xbb\x0d\x80\xb7\x8f\x9f\x7c\x23\x3f\xaa\xc0\x8e\
|
||||
\x50\xc7\x45\x76\xac\xb5\x48\xeb\x59\xc9\xcb\x85\xf0\x0a\x4b\x39\
|
||||
\x4e\x1e\xde\x83\x6d\x6b\xbf\xe2\x95\x51\xa9\x5d\x4c\x66\x3f\xd4\
|
||||
\x68\x3b\x12\xb5\x7b\xbc\x03\xcf\xa0\x48\x64\xff\x32\x19\x57\x92\
|
||||
\xe6\xd9\xad\x2b\xcd\xda\x62\xda\x97\x9b\x11\x10\x5c\x4d\x26\x57\
|
||||
\xd8\xa8\x0d\xef\x8f\xee\x8e\x8c\x23\x7b\x91\x9c\x9c\x8c\x4e\x9d\
|
||||
\x3a\x55\x69\xdb\x11\xd5\x1d\x17\x8d\x9c\x29\x60\xb3\xd9\xd0\xab\
|
||||
\x57\x2f\xba\x7b\xf7\x1e\xbc\xff\xc5\x46\xb4\xea\xd2\x5b\x36\xd5\
|
||||
\xcf\x65\xa6\x61\xd2\xd0\xb6\x76\xa3\xa8\x9b\x9f\xbd\x73\x04\x3e\
|
||||
\x73\xf7\x04\x40\xa5\x4d\xc3\x83\xab\x45\xa0\x5d\xf7\xa7\x11\xf7\
|
||||
\xe2\x64\x54\x0b\xaf\xa5\xda\x90\xf2\x0d\x8d\x88\x8c\x8c\xea\xc5\
|
||||
\xb7\x0b\x78\x92\x10\x41\x59\x90\x21\xdb\xf1\xbc\x98\x5f\x74\xef\
|
||||
\x0e\x76\x24\x2e\xc3\xee\x8d\xab\x70\xf5\xcf\x73\x72\x92\x1b\xd1\
|
||||
\x14\xe1\x1d\xff\x03\x9f\x9a\xcd\x90\xb9\xa4\x1f\xac\x65\x76\x07\
|
||||
\xdc\xc4\x39\x6b\xf0\x78\xdf\xe7\x64\x92\x5b\xce\x85\x53\x78\x73\
|
||||
\x70\x4b\x74\xea\xd8\x01\xdb\xb7\x6f\x97\xed\xbb\xed\x4a\x7b\xdf\
|
||||
\xd7\xb6\xcc\xd7\xaf\x5f\xa7\xed\xdb\xb7\x87\xd5\xe4\x8d\x4f\xd7\
|
||||
\xa6\xc2\xcb\xc7\x5f\x5c\xb6\x1e\xff\x46\x1c\x0e\xed\xde\xc8\xd3\
|
||||
\xc4\x08\xc0\x23\x10\xb8\x77\x46\xc6\x0c\xc2\x6b\x37\x40\x9f\x61\
|
||||
\x63\xd1\x6d\xc0\x28\x78\xfb\xfa\x8b\x08\x54\x56\x5a\x56\x6e\x87\
|
||||
\x49\xe1\x08\x10\x55\xdb\x0c\x83\x95\x94\xd9\x91\x2d\xe2\xee\xe5\
|
||||
\x52\xb4\x43\x1e\x96\xf2\x32\xa4\xed\xdb\x8a\x84\x65\x33\xf1\xe7\
|
||||
\xb9\x0c\x50\x2a\x0d\x64\xcf\xe0\xda\xe0\x4c\x1e\x28\xbd\x65\xdf\
|
||||
\xcc\x36\xb2\xde\x43\xf8\x62\x53\x06\x38\x93\x1b\x08\x80\xbc\x1b\
|
||||
\x57\x31\x6f\xf2\x30\x5c\xbd\xf0\x07\x8e\x1e\x3d\x8a\x7a\xf5\xea\
|
||||
\x91\xaa\xee\xdb\xc3\xb9\xc2\x7b\x94\xef\xc2\xc3\xc3\xc9\x07\x1f\
|
||||
\x7c\x80\x2b\xd9\xa7\xb1\xe0\xdd\x91\xa2\x82\x97\x7b\xe9\x2c\xd2\
|
||||
\xf7\xff\x2a\x25\x2c\xbd\x06\xdc\x3b\x2d\x76\x8e\x97\x8f\x1f\x26\
|
||||
\x7d\xf2\x23\x96\xfd\x9a\x85\x7e\xcf\xbf\x01\x1f\x3f\x7f\xd1\x66\
|
||||
\x25\x43\x52\x51\x2a\xc2\xb3\xc4\xbd\x43\x55\x7a\x43\x82\x40\x51\
|
||||
\x99\x4f\x8e\xb0\xb0\x5c\xca\x98\x5f\x64\x9e\x59\x30\x52\x98\x24\
|
||||
\x8d\x79\x78\x9a\xd1\xbe\xc7\x20\x2c\x5c\x7f\x1c\xf3\xd6\x1e\x44\
|
||||
\x8d\xc8\xfa\x62\xaa\xf2\x3b\x97\xc5\xce\x11\x10\x40\xe9\xc9\xdb\
|
||||
\x78\xa8\x15\xc5\x2f\xdf\xce\xc3\xa9\xf4\x64\xbc\xf6\xda\x6b\xa8\
|
||||
\x5f\xbf\x3e\x51\x9b\x21\x46\x4e\x53\x71\xd8\x2f\x4e\x0b\x40\xa2\
|
||||
\xf7\x6e\xe0\xc0\x81\xa4\x71\xe3\xc6\x48\x4f\xde\x86\xcc\xf4\xfd\
|
||||
\xb0\xd9\x28\x92\x7e\xf9\xc6\xbe\xab\x94\xe2\x0a\x09\x8b\xc4\x8b\
|
||||
\x6f\xcf\xc3\xc2\xf5\xc7\xd1\xf9\xa9\x67\xf9\x2d\xcb\x18\x90\xa1\
|
||||
\x12\x08\xea\x60\x86\x11\x48\x11\x95\x91\x3c\x29\x3d\x91\x66\x06\
|
||||
\xd3\xd3\x54\xe1\xd6\x96\x6d\x5b\xa1\xe1\x9d\xa5\x90\x56\x78\x47\
|
||||
\x37\x7d\x14\xf3\x13\xd3\xf0\xda\xb4\xaf\x10\x15\x13\xab\xda\xa8\
|
||||
\x3b\x12\x97\xc1\x66\xa3\xb8\x76\xf9\x3c\xf6\x6c\xfa\x0e\xc1\xc1\
|
||||
\xc1\x18\x33\x66\x0c\x5c\x69\x5f\x55\xbc\xb6\x72\x5d\xa4\xde\x39\
|
||||
\x0c\x5a\x5b\x30\x27\x25\x25\xd1\x7e\xfd\xfa\x21\x30\x34\x02\xaf\
|
||||
\xbc\xff\x05\x16\x4f\xfb\x0f\xee\xdc\xba\xc6\xa7\xe7\xd0\xa8\x59\
|
||||
\x1b\x74\x1f\x30\x0a\x5d\x7a\x0f\x13\xb1\x61\x50\x57\xd8\x19\x92\
|
||||
\xa6\xdc\xf1\x97\x35\x2e\xda\x5d\x1c\x54\xd8\xdf\x4d\x3c\x3a\x4d\
|
||||
\xda\x0c\x50\xce\xaf\xd4\x9f\x59\xc9\xc1\x9e\x17\x65\xbe\x23\xb7\
|
||||
\x3e\x09\x75\xb6\x56\x56\xe0\xf0\xde\x2d\xd8\xb5\xf1\x5b\x1c\x4f\
|
||||
\xd9\x29\x6e\xb0\xe1\xe1\x69\xc6\xe7\x3f\x1f\xc3\xa2\xf7\x47\xe3\
|
||||
\xaf\x9c\x33\x58\xb0\x60\x01\x46\x8e\x1c\x49\xaa\x72\xae\x05\x3b\
|
||||
\x8b\x4c\xd3\xa7\x4f\xd7\x75\x1a\x19\x39\x18\x22\x2a\x2a\xea\x23\
|
||||
\xab\xd5\x3a\x7d\xeb\xe6\x0d\xa8\x28\x2f\x43\xe1\xbd\x3c\x14\xdd\
|
||||
\xbb\x0b\xbf\x80\x60\x3c\x39\xf8\x25\x4c\x9c\xb3\x06\xd1\x8f\xb4\
|
||||
\x85\xbb\x87\xa7\xdd\x6f\xc2\xba\x86\x15\x40\x0e\x22\x3a\xb9\xa8\
|
||||
\x08\xcb\xa5\x0c\xf7\x27\xbc\x9f\x88\x30\x07\x3a\xc9\x5c\xd6\x7c\
|
||||
\x27\x50\x30\x5b\x28\xb2\xab\x29\xa8\xdc\x81\x08\xb6\xc3\xc1\x3a\
|
||||
\x0d\xf9\xef\xf0\x1b\x68\x8b\xbb\x40\x12\x13\x6a\x45\x35\x46\x97\
|
||||
\xa7\x86\x22\x20\xa4\x3a\x2e\x9e\x3d\x8e\xd2\xe2\x42\x04\x84\x54\
|
||||
\x47\x85\xa5\x1c\x29\x3b\xd7\x61\xec\xd8\xb1\x98\x3c\x79\x32\xd1\
|
||||
\x73\xca\x39\x9b\x14\xe2\x4f\xed\x68\x00\x67\xb6\x39\x65\x4f\x13\
|
||||
\x42\x50\x51\x51\x81\x21\x43\x86\xd0\x2d\x5b\xb7\xa2\xf3\x53\x43\
|
||||
\xd1\xbe\x7b\x1c\x1e\x6e\xd5\x19\x3e\xfe\x41\x8c\x74\xe7\x6c\x3f\
|
||||
\x29\xc7\xed\xc7\xa5\xed\xc6\x01\xa8\x1c\x0d\xc0\x36\xb2\x73\x0d\
|
||||
\x55\x1e\xae\x8a\x3f\x25\xda\x80\x7c\x76\x5d\xba\x90\xbe\xac\xb4\
|
||||
\x18\xb9\x17\xcf\xe0\xd0\x9e\x4d\x58\xb7\x62\x36\x5a\x34\x6f\x8e\
|
||||
\x7d\xfb\xf6\x89\x07\x71\x68\x91\x30\xa3\xc2\x19\xe7\x8a\x1d\x4e\
|
||||
\x8f\x2f\xb9\xbb\xbb\x63\xc9\x92\x25\x88\x08\x0f\xc7\xfe\xad\x3f\
|
||||
\xa2\xf0\xde\x1d\xf8\x04\x04\x3b\x80\x37\xa8\x83\x22\xc9\xb8\xcd\
|
||||
\x45\x96\xa0\x58\x32\x41\x18\xd4\x37\x51\xb8\xd1\x85\x19\xa1\x70\
|
||||
\x41\x4b\x70\x63\xf6\x99\x48\x9b\x3b\x29\xc0\x23\x72\xb7\xbd\x34\
|
||||
\xc3\xa8\xca\x2a\x3b\x4a\x24\xf8\xaf\x97\xb7\x2f\xca\x4a\x8a\xf1\
|
||||
\xcb\x37\xf3\xe0\xed\xe5\x85\xef\xbe\xfb\x0e\x7e\x7e\x7e\x0f\xe4\
|
||||
\x1c\xf4\x2a\xef\xd5\xa3\xe5\x92\x08\x0b\x0b\x23\xf3\xe7\xcf\x47\
|
||||
\x78\x78\x0d\x7c\xbf\x68\x1a\xae\x64\x9f\x96\x76\xce\x95\x81\x49\
|
||||
\x04\xa9\x8c\x97\xd2\x44\x48\x30\x65\x9c\x5c\x8c\xd9\x9e\x2a\xdc\
|
||||
\x19\x80\x43\x18\xa1\x2c\x26\x97\x07\x16\x12\x16\x48\x28\xad\x35\
|
||||
\x25\x32\x74\xb8\x54\x0e\x36\x9c\xf0\xab\xb5\xd9\xf2\x08\x52\x1a\
|
||||
\xdb\x8d\xd9\x67\x8e\x63\xc5\x9c\x09\xf0\xf6\x32\x63\xd5\xaa\x55\
|
||||
\x88\x89\x89\x21\x5a\xee\x9a\xaa\xfc\x44\x77\x83\x9e\x62\xaa\x77\
|
||||
\xce\x9d\xda\x29\x1f\xc7\x8f\x1f\xa7\x4f\x3e\xf9\x24\x0a\x8b\x4a\
|
||||
\x30\x21\x7e\x15\x3a\xf4\x18\xc4\xc0\x84\xa9\xe2\x9e\x71\x35\xb3\
|
||||
\x67\x39\x10\xa8\xc4\x17\xb5\x4d\x05\x39\xaa\x42\x7c\x99\xa8\xad\
|
||||
\x2c\x8f\xca\xe2\x23\x36\x0e\x9f\xfe\xec\x89\x14\xcc\x18\xd3\x0f\
|
||||
\x96\xb2\x62\x6c\xd8\xb0\x01\x3d\x7b\xf6\x24\xca\x36\x73\x26\x60\
|
||||
\x39\x6b\x6f\xcd\x83\x6e\x95\x7c\xc6\xe8\x01\xe1\x00\xd0\xa2\x45\
|
||||
\x0b\xb2\x60\xc1\x02\x58\xca\x4b\x31\x7f\xca\xf3\xc8\x3a\xc9\x83\
|
||||
\x4c\x88\x62\x17\x12\x66\x55\x22\x51\xec\x43\x20\xdf\xac\x8f\x71\
|
||||
\x80\x41\xc5\xe9\x2a\x5b\x51\x2d\xdf\x76\x46\x2b\xbe\xe4\x50\x03\
|
||||
\xb3\xd2\x9c\xd1\x84\x89\x7c\x71\x1a\x91\x2d\x73\xa4\xb8\x71\xf5\
|
||||
\x22\x66\x8e\x7b\x1a\x85\xf7\xee\x60\xca\x94\x29\xb2\xce\xd1\x83\
|
||||
\x50\xbb\xda\xde\x44\xb9\xe9\xb6\x9e\xd8\xe7\xec\x3d\xdb\xfb\x36\
|
||||
\x9b\x0d\xeb\xd6\xad\xa3\x6f\xbc\xf1\x06\xca\x2a\x28\x46\xbe\x39\
|
||||
\x1b\xdd\xfa\x8f\x04\x67\x32\x39\x0c\x4e\x46\xb8\x85\xfe\x69\x1b\
|
||||
\x2a\xef\x65\x72\x03\x33\x03\x54\x8f\x3b\xa1\xec\xc2\x51\x1d\x88\
|
||||
\x0f\xd1\xfc\x3e\x05\x70\xe0\xb7\x75\x58\x31\x7b\x02\x2c\xa5\x05\
|
||||
\x58\xb9\x72\x25\xe2\xe2\xe2\x88\x87\x87\x87\xa1\x83\xe2\x5d\x6d\
|
||||
\x67\xdd\xd3\x4f\x1e\xc4\x95\x91\x91\x41\xfb\xf7\xef\x8f\x9c\x9c\
|
||||
\xcb\xe8\x36\x60\x24\x5e\x9a\xf2\xb9\xb8\xd2\x4c\xb9\x8c\x91\x10\
|
||||
\xe5\x4e\x87\x0a\xca\xe7\x2c\x8e\x0a\xc5\x72\x10\xf8\xd4\xa8\xa0\
|
||||
\x32\x7f\x8d\x6f\x95\x97\x95\x62\xdd\x8a\x39\xf8\x79\xe5\x1c\x04\
|
||||
\xf8\xfb\xe1\xa7\x9f\x7e\x42\xf7\xee\xdd\xc9\xdf\xd9\x7e\x9c\x2b\
|
||||
\x27\x3f\x6a\xd1\x49\xbd\x74\x4d\x9b\x36\x25\x4b\x96\x2c\x41\xc3\
|
||||
\x86\x0d\xb0\x6b\xc3\xb7\x58\x3e\xfb\x0d\xd1\xff\x42\x18\x93\x8c\
|
||||
\x68\xea\xa1\x44\x75\x0f\x20\x89\xa6\x2b\xd6\xe8\xf0\x9b\x9f\xcb\
|
||||
\xac\x00\xac\xc9\x48\xdc\x84\x1c\x8a\xfd\x9d\xe4\x0b\x7c\x09\x18\
|
||||
\x4b\x84\x28\x0a\x43\x84\x56\x15\xe6\xdf\xc1\xd2\x99\x63\xb1\x6e\
|
||||
\x79\x3c\xea\xd4\xae\x85\x2f\xbf\xfc\x52\xec\x1c\x23\x67\xc6\x56\
|
||||
\xe5\x24\x4d\xd9\x0c\xd2\x3b\x45\x57\x6b\x8f\x4d\x3d\xf9\x5e\x79\
|
||||
\x5f\x5c\x5c\x8c\xc9\x93\x27\xd3\xa5\x4b\x97\xda\x51\x38\x6f\x7d\
|
||||
\x82\x2e\xbd\x87\xd9\x95\x57\xca\x9f\x4a\xe2\xe0\xd3\xa7\x8c\x25\
|
||||
\x88\x48\x67\x26\x50\xc6\x3a\xa0\xa4\x66\x4a\xd8\xb0\x08\xcd\x25\
|
||||
\xe2\x52\x4d\x87\x77\xec\xf9\x40\x90\x77\x6e\x79\x79\x09\x4e\xa4\
|
||||
\xee\xc2\xca\xb9\x6f\xe2\x46\xee\x25\xf4\xef\xdf\x1f\xcb\x97\x2f\
|
||||
\x5f\x57\xad\x5a\xb5\x21\x5a\x75\x75\x76\xef\xec\x9d\x83\x35\x5b\
|
||||
\xef\xe4\x2d\x2d\xfa\xa8\x25\xcd\xe9\x9d\xe3\x46\x29\xc5\x0f\x3f\
|
||||
\xfc\x40\x27\x4d\x9a\x84\x9b\xb7\x6e\xa1\x76\xfd\xc6\x98\x10\xbf\
|
||||
\x1a\x0d\x9a\xb4\x94\xcd\x10\x61\xbd\x91\xba\x24\x04\x11\x30\x29\
|
||||
\x8c\x72\x42\x94\x65\x70\x3c\x37\x50\x3a\xd9\x97\xf5\x15\xa9\x7d\
|
||||
\x03\xa2\xc9\xe7\xc6\xd5\x3f\x31\xfb\x8d\x81\xb8\x94\x75\x12\x6e\
|
||||
\x6e\x26\xac\x5e\xbd\x5a\xc6\x6f\xf4\x4e\x29\xd3\x6b\x3f\x67\x6d\
|
||||
\x2b\x0b\xfb\xbb\x4f\x81\x54\x63\x82\xd9\xd9\xd9\x74\xc2\x84\x09\
|
||||
\xd8\xbe\x7d\x3b\xbc\x7c\xfc\xd1\x77\xf8\x78\x74\x7c\x72\x30\x6a\
|
||||
\x37\x68\x52\xa5\x13\x14\xa9\x2e\x5b\x77\x72\xc8\x97\xc3\x16\x0b\
|
||||
\x14\xb7\xae\x5f\xc6\x81\x1d\x89\xd8\xfc\xfd\x42\xdc\xcb\xbb\x81\
|
||||
\x36\x6d\xda\x60\xc1\x82\x05\x68\xdd\xba\x35\x79\x90\x27\x3c\x1a\
|
||||
\x76\xd8\x55\xa9\x51\x0c\x8e\x02\xad\xb4\x56\xab\x15\x07\x0f\x1e\
|
||||
\xa4\xf1\xf1\xf1\xd8\xb9\x73\x27\xdc\xdc\x3d\xd0\xee\x89\x38\xf4\
|
||||
\x88\x1b\x8d\x98\xd8\x8e\x76\xd2\xe7\xd0\x88\x54\x8d\x0e\x89\x16\
|
||||
\x6a\xe2\xe0\x30\x52\xef\x0c\xb5\xb7\x56\x6b\x25\x2e\x9c\x4a\xc7\
|
||||
\xee\x8d\xab\xb1\xff\xd7\x1f\x51\x52\x54\x80\x36\x6d\xda\x20\x3e\
|
||||
\x3e\x1e\x1d\x3b\x76\x24\x9e\x9e\x9e\x2e\xd5\x5d\x4b\xdf\x71\xb5\
|
||||
\xcd\xfe\xeb\x33\x48\x59\x28\xab\xd5\x8a\xb5\x6b\xd7\xd2\x39\x73\
|
||||
\xe6\xe0\xd4\xa9\x53\x00\x21\xa8\xdb\xa8\x29\x46\x4f\xfe\x0c\x0d\
|
||||
\x9b\xb4\x86\xb7\xaf\xbf\x8e\xfd\xae\xca\x25\x10\xc5\xbb\xf2\xd2\
|
||||
\x62\x5c\xce\x3e\x8d\x55\xf3\xdf\x41\x66\x7a\x32\xa8\xcd\x86\x5a\
|
||||
\xb5\x6a\x61\xe2\xc4\x89\x18\x33\x66\x8c\xae\x27\xf4\xbf\x3e\x83\
|
||||
\x8c\x30\x37\x35\x29\xc4\x08\x23\x54\xcb\x97\x4d\x6b\xb1\x58\xb0\
|
||||
\x7e\xfd\x7a\x9a\x90\x90\x80\xe4\xe4\x64\xe4\xe7\xe7\xc3\x2f\x20\
|
||||
\x18\x2d\x3a\xf4\x40\x4c\x6c\x27\x34\x68\xd2\x12\x75\x1a\x3e\x0c\
|
||||
\xb3\x97\x8f\x6c\xce\xc8\x4f\x71\x54\x18\x43\x45\xcb\xb6\xe4\x8c\
|
||||
\xab\xb0\x58\x70\xe5\xe2\x19\x64\x9d\x3c\x84\x73\x99\x69\x38\x7e\
|
||||
\xe0\x37\xe4\xdd\xbc\x0a\x6f\x6f\x6f\xb4\x6f\xdf\x1e\x71\x71\x71\
|
||||
\x18\x3e\x7c\x38\xf1\xf5\xf5\x75\xda\x2e\x6a\xef\x5c\x39\x0a\xda\
|
||||
\x90\x00\xf1\xbf\x31\x83\x9c\xcd\xae\x5b\xb7\x6e\xa5\x6f\xd9\xb2\
|
||||
\xa5\x65\x52\x52\x12\xb6\x6f\xdf\x8e\x82\x82\x02\x10\x8e\x43\x40\
|
||||
\x50\x35\x84\x45\xd6\x43\x78\xed\x06\x88\xac\x17\x8d\x6a\x35\x6a\
|
||||
\x23\xb8\x7a\x04\xbc\x7c\xfc\x60\xf6\xf6\x15\xdd\xe6\xa5\xc5\x85\
|
||||
\x28\x29\x2a\x40\x79\x69\x09\xee\xde\xfe\x0b\x37\x72\x2f\xe2\x7a\
|
||||
\xee\x45\xe4\x5e\x3c\x83\x5b\xd7\x2e\xe3\x6e\xde\x0d\xd8\xac\x95\
|
||||
\xf0\xf2\xf2\x42\xb7\x6e\xdd\xd0\xbd\x7b\x77\xc4\xc5\xc5\xa1\x66\
|
||||
\xcd\x9a\x84\xe3\x38\x97\x49\xf6\x83\xa6\x2a\x9a\x52\x9c\x1a\xad\
|
||||
\xd4\x92\x50\xb4\xc4\x6f\x67\x52\x8c\xd6\x48\x54\x8b\x53\x56\x56\
|
||||
\x86\xb4\xb4\x34\x7a\xf0\xe0\x41\x1c\x39\x72\x04\x69\x69\x69\xb8\
|
||||
\x7d\xfb\x36\x4a\x4b\xa5\xa3\xa3\xcd\x5e\x3e\xf0\xf4\xf2\x81\xa7\
|
||||
\xd9\x1b\x66\x6f\x1f\x7b\xba\xd2\x62\x94\x95\x14\xc3\x52\x5e\x8a\
|
||||
\xb2\x92\x22\x31\x4f\xb3\xd9\x8c\xa0\xa0\x20\xb4\x68\xd1\x02\x1d\
|
||||
\x3b\x76\x44\xab\x56\xad\xd0\xb6\x6d\x5b\xd9\x19\xdd\x7a\x87\xc7\
|
||||
\x3b\xe3\x21\x55\x89\xa3\xd7\x76\x55\x96\xe2\x1e\xc4\xa1\xae\x55\
|
||||
\x49\x53\x52\x52\x82\x3b\x77\xee\xd0\x6b\xd7\xae\x21\x2b\x2b\x0b\
|
||||
\x97\x2f\x5f\x46\x6e\x6e\x2e\x0a\x0a\x0a\x50\x58\x58\x28\xee\x86\
|
||||
\x12\x10\x10\x80\xc0\xc0\x40\xf8\xf8\xf8\x20\x22\x22\x02\xf5\xeb\
|
||||
\xd7\x47\xfd\xfa\xf5\x51\xa7\x4e\x1d\x04\x06\x06\x12\x3f\x3f\x3f\
|
||||
\xfc\x5f\xb8\x34\x3b\xc8\x88\x44\x52\x55\x79\xff\x41\xd9\xfd\x5c\
|
||||
\x71\x7a\x19\x91\xa6\x8c\x94\xdb\x48\xf9\x1e\x74\xfe\xff\x38\x1e\
|
||||
\xf4\xef\xa5\xb0\xc5\x69\x1d\x56\xab\xd7\xbb\xce\x40\xf6\x46\xc0\
|
||||
\x10\x7a\xe9\x8d\x40\x92\x8c\xa6\x77\x56\x3f\x67\xe5\x77\xb5\x7d\
|
||||
\x8c\xd4\xdf\x95\xef\xff\x3b\x83\xfe\xe1\x97\xdb\xbf\x1d\xf4\xcf\
|
||||
\xbe\xfe\x96\x19\xf4\xdf\xd4\x1f\xfe\xbf\x7f\x9f\x38\xa3\xa9\x46\
|
||||
\x80\x8c\x55\xb5\x26\xe8\x69\xe7\x46\x74\x12\x57\xca\xab\xa7\x7b\
|
||||
\x3c\xc8\xfc\xd5\x0e\x26\x71\x35\x7f\xb6\x8c\xaa\x3b\x2e\xea\x89\
|
||||
\xd8\x46\x3e\xe2\x8a\xd8\xeb\x4c\x91\x75\x96\xde\xe8\xce\x85\xce\
|
||||
\x44\x60\x36\xdc\xc8\xa9\xcc\x7a\xdf\xd6\x7a\x6f\x34\x7f\x59\x5e\
|
||||
\x7f\xb7\xcb\xfb\xdf\xeb\xfe\xae\xff\x01\x23\xea\xed\xde\xc5\xed\
|
||||
\x5c\x00\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
|
||||
"
|
||||
|
||||
qt_resource_name = b"\
|
||||
\x00\x07\
|
||||
\x07\x3b\xe0\xb3\
|
||||
\x00\x70\
|
||||
\x00\x6c\x00\x75\x00\x67\x00\x69\x00\x6e\x00\x73\
|
||||
\x00\x06\
|
||||
\x06\x98\x2f\xb3\
|
||||
\x00\x63\
|
||||
\x00\x61\x00\x6c\x00\x69\x00\x65\x00\x63\
|
||||
\x00\x08\
|
||||
\x0a\x61\x5a\xa7\
|
||||
\x00\x69\
|
||||
\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
|
||||
"
|
||||
|
||||
qt_resource_struct_v1 = b"\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
|
||||
\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
"
|
||||
|
||||
qt_resource_struct_v2 = b"\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
\x00\x00\x01\x77\xed\xcb\x53\xaa\
|
||||
"
|
||||
|
||||
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
|
||||
if qt_version < [5, 8, 0]:
|
||||
rcc_version = 1
|
||||
qt_resource_struct = qt_resource_struct_v1
|
||||
else:
|
||||
rcc_version = 2
|
||||
qt_resource_struct = qt_resource_struct_v2
|
||||
|
||||
def qInitResources():
|
||||
QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
def qCleanupResources():
|
||||
QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
qInitResources()
|
5
orientation/resources.qrc
Normal file
5
orientation/resources.qrc
Normal file
@ -0,0 +1,5 @@
|
||||
<RCC>
|
||||
<qresource prefix="/plugins/caliec" >
|
||||
<file>icon.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
80
pb_tool.cfg
Normal file
80
pb_tool.cfg
Normal file
@ -0,0 +1,80 @@
|
||||
#/***************************************************************************
|
||||
# Orientation
|
||||
#
|
||||
# Configuration file for plugin builder tool (pb_tool)
|
||||
# Generated by Plugin Builder: http://g-sherman.github.io/Qgis-Plugin-Builder/
|
||||
# -------------------
|
||||
# begin : 2021-03-01
|
||||
# copyright : (C) 2021 by Association Linux-Alpes
|
||||
# email : caliec@linux-alpes.org
|
||||
# ***************************************************************************/
|
||||
#
|
||||
#/***************************************************************************
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU General Public License as published by *
|
||||
# * the Free Software Foundation; either version 2 of the License, or *
|
||||
# * (at your option) any later version. *
|
||||
# * *
|
||||
# ***************************************************************************/
|
||||
#
|
||||
#
|
||||
# You can install pb_tool using:
|
||||
# pip install http://geoapt.net/files/pb_tool.zip
|
||||
#
|
||||
# Consider doing your development (and install of pb_tool) in a virtualenv.
|
||||
#
|
||||
# For details on setting up and using pb_tool, see:
|
||||
# http://g-sherman.github.io/plugin_build_tool/
|
||||
#
|
||||
# Issues and pull requests here:
|
||||
# https://github.com/g-sherman/plugin_build_tool:
|
||||
#
|
||||
# Sane defaults for your plugin generated by the Plugin Builder are
|
||||
# already set below.
|
||||
#
|
||||
# As you add Python source files and UI files to your plugin, add
|
||||
# them to the appropriate [files] section below.
|
||||
|
||||
[plugin]
|
||||
# Name of the plugin. This is the name of the directory that will
|
||||
# be created
|
||||
name: caliec
|
||||
|
||||
# Full path to where you want your plugin directory copied. If empty,
|
||||
# the QGIS default path will be used. Don't include the plugin name in
|
||||
# the path.
|
||||
plugin_path:
|
||||
|
||||
[files]
|
||||
# Python files that should be deployed with the plugin
|
||||
python_files: __init__.py caliec.py
|
||||
|
||||
# The main dialog file that is loaded (not compiled)
|
||||
main_dialog:
|
||||
|
||||
# Other ui files for dialogs you create (these will be compiled)
|
||||
compiled_ui_files:
|
||||
|
||||
# Resource file(s) that will be compiled
|
||||
resource_files: resources.qrc
|
||||
|
||||
# Other files required for the plugin
|
||||
extras: metadata.txt icon.png
|
||||
|
||||
# Other directories to be deployed with the plugin.
|
||||
# These must be subdirectories under the plugin directory
|
||||
extra_dirs:
|
||||
|
||||
# ISO code(s) for any locales (translations), separated by spaces.
|
||||
# Corresponding .ts files must exist in the i18n directory
|
||||
locales:
|
||||
|
||||
[help]
|
||||
# the built help directory that should be deployed with the plugin
|
||||
dir: help/build/html
|
||||
# the name of the directory to target in the deployed plugin
|
||||
target: help
|
||||
|
||||
|
||||
|
111
plugin_upload.py
Executable file
111
plugin_upload.py
Executable file
@ -0,0 +1,111 @@
|
||||
#!/usr/bin/env python
|
||||
# coding=utf-8
|
||||
"""This script uploads a plugin package to the plugin repository.
|
||||
Authors: A. Pasotti, V. Picavet
|
||||
git sha : $TemplateVCSFormat
|
||||
"""
|
||||
|
||||
import sys
|
||||
import getpass
|
||||
import xmlrpc.client
|
||||
from optparse import OptionParser
|
||||
|
||||
standard_library.install_aliases()
|
||||
|
||||
# Configuration
|
||||
PROTOCOL = 'https'
|
||||
SERVER = 'plugins.qgis.org'
|
||||
PORT = '443'
|
||||
ENDPOINT = '/plugins/RPC2/'
|
||||
VERBOSE = False
|
||||
|
||||
|
||||
def main(parameters, arguments):
|
||||
"""Main entry point.
|
||||
|
||||
:param parameters: Command line parameters.
|
||||
:param arguments: Command line arguments.
|
||||
"""
|
||||
address = "{protocol}://{username}:{password}@{server}:{port}{endpoint}".format(
|
||||
protocol=PROTOCOL,
|
||||
username=parameters.username,
|
||||
password=parameters.password,
|
||||
server=parameters.server,
|
||||
port=parameters.port,
|
||||
endpoint=ENDPOINT)
|
||||
print("Connecting to: %s" % hide_password(address))
|
||||
|
||||
server = xmlrpc.client.ServerProxy(address, verbose=VERBOSE)
|
||||
|
||||
try:
|
||||
with open(arguments[0], 'rb') as handle:
|
||||
plugin_id, version_id = server.plugin.upload(
|
||||
xmlrpc.client.Binary(handle.read()))
|
||||
print("Plugin ID: %s" % plugin_id)
|
||||
print("Version ID: %s" % version_id)
|
||||
except xmlrpc.client.ProtocolError as err:
|
||||
print("A protocol error occurred")
|
||||
print("URL: %s" % hide_password(err.url, 0))
|
||||
print("HTTP/HTTPS headers: %s" % err.headers)
|
||||
print("Error code: %d" % err.errcode)
|
||||
print("Error message: %s" % err.errmsg)
|
||||
except xmlrpc.client.Fault as err:
|
||||
print("A fault occurred")
|
||||
print("Fault code: %d" % err.faultCode)
|
||||
print("Fault string: %s" % err.faultString)
|
||||
|
||||
|
||||
def hide_password(url, start=6):
|
||||
"""Returns the http url with password part replaced with '*'.
|
||||
|
||||
:param url: URL to upload the plugin to.
|
||||
:type url: str
|
||||
|
||||
:param start: Position of start of password.
|
||||
:type start: int
|
||||
"""
|
||||
start_position = url.find(':', start) + 1
|
||||
end_position = url.find('@')
|
||||
return "%s%s%s" % (
|
||||
url[:start_position],
|
||||
'*' * (end_position - start_position),
|
||||
url[end_position:])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = OptionParser(usage="%prog [options] plugin.zip")
|
||||
parser.add_option(
|
||||
"-w", "--password", dest="password",
|
||||
help="Password for plugin site", metavar="******")
|
||||
parser.add_option(
|
||||
"-u", "--username", dest="username",
|
||||
help="Username of plugin site", metavar="user")
|
||||
parser.add_option(
|
||||
"-p", "--port", dest="port",
|
||||
help="Server port to connect to", metavar="80")
|
||||
parser.add_option(
|
||||
"-s", "--server", dest="server",
|
||||
help="Specify server name", metavar="plugins.qgis.org")
|
||||
options, args = parser.parse_args()
|
||||
if len(args) != 1:
|
||||
print("Please specify zip file.\n")
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
if not options.server:
|
||||
options.server = SERVER
|
||||
if not options.port:
|
||||
options.port = PORT
|
||||
if not options.username:
|
||||
# interactive mode
|
||||
username = getpass.getuser()
|
||||
print("Please enter user name [%s] :" % username, end=' ')
|
||||
|
||||
res = input()
|
||||
if res != "":
|
||||
options.username = res
|
||||
else:
|
||||
options.username = username
|
||||
if not options.password:
|
||||
# interactive mode
|
||||
options.password = getpass.getpass()
|
||||
main(options, args)
|
281
pylintrc
Normal file
281
pylintrc
Normal file
@ -0,0 +1,281 @@
|
||||
[MASTER]
|
||||
|
||||
# Specify a configuration file.
|
||||
#rcfile=
|
||||
|
||||
# Python code to execute, usually for sys.path manipulation such as
|
||||
# pygtk.require().
|
||||
#init-hook=
|
||||
|
||||
# Profiled execution.
|
||||
profile=no
|
||||
|
||||
# Add files or directories to the blacklist. They should be base names, not
|
||||
# paths.
|
||||
ignore=CVS
|
||||
|
||||
# Pickle collected data for later comparisons.
|
||||
persistent=yes
|
||||
|
||||
# List of plugins (as comma separated values of python modules names) to load,
|
||||
# usually to register additional checkers.
|
||||
load-plugins=
|
||||
|
||||
|
||||
[MESSAGES CONTROL]
|
||||
|
||||
# Enable the message, report, category or checker with the given id(s). You can
|
||||
# either give multiple identifier separated by comma (,) or put this option
|
||||
# multiple time. See also the "--disable" option for examples.
|
||||
#enable=
|
||||
|
||||
# Disable the message, report, category or checker with the given id(s). You
|
||||
# can either give multiple identifiers separated by comma (,) or put this
|
||||
# option multiple times (only on the command line, not in the configuration
|
||||
# file where it should appear only once).You can also use "--disable=all" to
|
||||
# disable everything first and then reenable specific checks. For example, if
|
||||
# you want to run only the similarities checker, you can use "--disable=all
|
||||
# --enable=similarities". If you want to run only the classes checker, but have
|
||||
# no Warning level messages displayed, use"--disable=all --enable=classes
|
||||
# --disable=W"
|
||||
# see http://stackoverflow.com/questions/21487025/pylint-locally-defined-disables-still-give-warnings-how-to-suppress-them
|
||||
disable=locally-disabled,C0103
|
||||
|
||||
|
||||
[REPORTS]
|
||||
|
||||
# Set the output format. Available formats are text, parseable, colorized, msvs
|
||||
# (visual studio) and html. You can also give a reporter class, eg
|
||||
# mypackage.mymodule.MyReporterClass.
|
||||
output-format=text
|
||||
|
||||
# Put messages in a separate file for each module / package specified on the
|
||||
# command line instead of printing them on stdout. Reports (if any) will be
|
||||
# written in a file name "pylint_global.[txt|html]".
|
||||
files-output=no
|
||||
|
||||
# Tells whether to display a full report or only the messages
|
||||
reports=yes
|
||||
|
||||
# Python expression which should return a note less than 10 (10 is the highest
|
||||
# note). You have access to the variables errors warning, statement which
|
||||
# respectively contain the number of errors / warnings messages and the total
|
||||
# number of statements analyzed. This is used by the global evaluation report
|
||||
# (RP0004).
|
||||
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
|
||||
|
||||
# Add a comment according to your evaluation note. This is used by the global
|
||||
# evaluation report (RP0004).
|
||||
comment=no
|
||||
|
||||
# Template used to display messages. This is a python new-style format string
|
||||
# used to format the message information. See doc for all details
|
||||
#msg-template=
|
||||
|
||||
|
||||
[BASIC]
|
||||
|
||||
# Required attributes for module, separated by a comma
|
||||
required-attributes=
|
||||
|
||||
# List of builtins function names that should not be used, separated by a comma
|
||||
bad-functions=map,filter,apply,input
|
||||
|
||||
# Regular expression which should only match correct module names
|
||||
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
|
||||
|
||||
# Regular expression which should only match correct module level names
|
||||
const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
|
||||
|
||||
# Regular expression which should only match correct class names
|
||||
class-rgx=[A-Z_][a-zA-Z0-9]+$
|
||||
|
||||
# Regular expression which should only match correct function names
|
||||
function-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match correct method names
|
||||
method-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match correct instance attribute names
|
||||
attr-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match correct argument names
|
||||
argument-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match correct variable names
|
||||
variable-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match correct attribute names in class
|
||||
# bodies
|
||||
class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
|
||||
|
||||
# Regular expression which should only match correct list comprehension /
|
||||
# generator expression variable names
|
||||
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
|
||||
|
||||
# Good variable names which should always be accepted, separated by a comma
|
||||
good-names=i,j,k,ex,Run,_
|
||||
|
||||
# Bad variable names which should always be refused, separated by a comma
|
||||
bad-names=foo,bar,baz,toto,tutu,tata
|
||||
|
||||
# Regular expression which should only match function or class names that do
|
||||
# not require a docstring.
|
||||
no-docstring-rgx=__.*__
|
||||
|
||||
# Minimum line length for functions/classes that require docstrings, shorter
|
||||
# ones are exempt.
|
||||
docstring-min-length=-1
|
||||
|
||||
|
||||
[MISCELLANEOUS]
|
||||
|
||||
# List of note tags to take in consideration, separated by a comma.
|
||||
notes=FIXME,XXX,TODO
|
||||
|
||||
|
||||
[TYPECHECK]
|
||||
|
||||
# Tells whether missing members accessed in mixin class should be ignored. A
|
||||
# mixin class is detected if its name ends with "mixin" (case insensitive).
|
||||
ignore-mixin-members=yes
|
||||
|
||||
# List of classes names for which member attributes should not be checked
|
||||
# (useful for classes with attributes dynamically set).
|
||||
ignored-classes=SQLObject
|
||||
|
||||
# When zope mode is activated, add a predefined set of Zope acquired attributes
|
||||
# to generated-members.
|
||||
zope=no
|
||||
|
||||
# List of members which are set dynamically and missed by pylint inference
|
||||
# system, and so shouldn't trigger E0201 when accessed. Python regular
|
||||
# expressions are accepted.
|
||||
generated-members=REQUEST,acl_users,aq_parent
|
||||
|
||||
|
||||
[VARIABLES]
|
||||
|
||||
# Tells whether we should check for unused import in __init__ files.
|
||||
init-import=no
|
||||
|
||||
# A regular expression matching the beginning of the name of dummy variables
|
||||
# (i.e. not used).
|
||||
dummy-variables-rgx=_$|dummy
|
||||
|
||||
# List of additional names supposed to be defined in builtins. Remember that
|
||||
# you should avoid to define new builtins when possible.
|
||||
additional-builtins=
|
||||
|
||||
|
||||
[FORMAT]
|
||||
|
||||
# Maximum number of characters on a single line.
|
||||
max-line-length=80
|
||||
|
||||
# Regexp for a line that is allowed to be longer than the limit.
|
||||
ignore-long-lines=^\s*(# )?<?https?://\S+>?$
|
||||
|
||||
# Allow the body of an if to be on the same line as the test if there is no
|
||||
# else.
|
||||
single-line-if-stmt=no
|
||||
|
||||
# List of optional constructs for which whitespace checking is disabled
|
||||
no-space-check=trailing-comma,dict-separator
|
||||
|
||||
# Maximum number of lines in a module
|
||||
max-module-lines=1000
|
||||
|
||||
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
|
||||
# tab).
|
||||
indent-string=' '
|
||||
|
||||
|
||||
[SIMILARITIES]
|
||||
|
||||
# Minimum lines number of a similarity.
|
||||
min-similarity-lines=4
|
||||
|
||||
# Ignore comments when computing similarities.
|
||||
ignore-comments=yes
|
||||
|
||||
# Ignore docstrings when computing similarities.
|
||||
ignore-docstrings=yes
|
||||
|
||||
# Ignore imports when computing similarities.
|
||||
ignore-imports=no
|
||||
|
||||
|
||||
[IMPORTS]
|
||||
|
||||
# Deprecated modules which should not be used, separated by a comma
|
||||
deprecated-modules=regsub,TERMIOS,Bastion,rexec
|
||||
|
||||
# Create a graph of every (i.e. internal and external) dependencies in the
|
||||
# given file (report RP0402 must not be disabled)
|
||||
import-graph=
|
||||
|
||||
# Create a graph of external dependencies in the given file (report RP0402 must
|
||||
# not be disabled)
|
||||
ext-import-graph=
|
||||
|
||||
# Create a graph of internal dependencies in the given file (report RP0402 must
|
||||
# not be disabled)
|
||||
int-import-graph=
|
||||
|
||||
|
||||
[DESIGN]
|
||||
|
||||
# Maximum number of arguments for function / method
|
||||
max-args=5
|
||||
|
||||
# Argument names that match this expression will be ignored. Default to name
|
||||
# with leading underscore
|
||||
ignored-argument-names=_.*
|
||||
|
||||
# Maximum number of locals for function / method body
|
||||
max-locals=15
|
||||
|
||||
# Maximum number of return / yield for function / method body
|
||||
max-returns=6
|
||||
|
||||
# Maximum number of branch for function / method body
|
||||
max-branches=12
|
||||
|
||||
# Maximum number of statements in function / method body
|
||||
max-statements=50
|
||||
|
||||
# Maximum number of parents for a class (see R0901).
|
||||
max-parents=7
|
||||
|
||||
# Maximum number of attributes for a class (see R0902).
|
||||
max-attributes=7
|
||||
|
||||
# Minimum number of public methods for a class (see R0903).
|
||||
min-public-methods=2
|
||||
|
||||
# Maximum number of public methods for a class (see R0904).
|
||||
max-public-methods=20
|
||||
|
||||
|
||||
[CLASSES]
|
||||
|
||||
# List of interface methods to ignore, separated by a comma. This is used for
|
||||
# instance to not check methods defines in Zope's Interface base class.
|
||||
ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
|
||||
|
||||
# List of method names used to declare (i.e. assign) instance attributes.
|
||||
defining-attr-methods=__init__,__new__,setUp
|
||||
|
||||
# List of valid names for the first argument in a class method.
|
||||
valid-classmethod-first-arg=cls
|
||||
|
||||
# List of valid names for the first argument in a metaclass class method.
|
||||
valid-metaclass-classmethod-first-arg=mcs
|
||||
|
||||
|
||||
[EXCEPTIONS]
|
||||
|
||||
# Exceptions that will emit a warning when being caught. Defaults to
|
||||
# "Exception"
|
||||
overgeneral-exceptions=Exception
|
2
test/__init__.py
Normal file
2
test/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
# import qgis libs so that ve set the correct sip api version
|
||||
import qgis # pylint: disable=W0611 # NOQA
|
BIN
test/__init__.pyc
Normal file
BIN
test/__init__.pyc
Normal file
Binary file not shown.
BIN
test/__pycache__/__init__.cpython-36.pyc
Normal file
BIN
test/__pycache__/__init__.cpython-36.pyc
Normal file
Binary file not shown.
BIN
test/__pycache__/qgis_interface.cpython-36.pyc
Normal file
BIN
test/__pycache__/qgis_interface.cpython-36.pyc
Normal file
Binary file not shown.
BIN
test/__pycache__/test_init.cpython-36.pyc
Normal file
BIN
test/__pycache__/test_init.cpython-36.pyc
Normal file
Binary file not shown.
BIN
test/__pycache__/test_qgis_environment.cpython-36.pyc
Normal file
BIN
test/__pycache__/test_qgis_environment.cpython-36.pyc
Normal file
Binary file not shown.
BIN
test/__pycache__/test_resources.cpython-36.pyc
Normal file
BIN
test/__pycache__/test_resources.cpython-36.pyc
Normal file
Binary file not shown.
BIN
test/__pycache__/test_translations.cpython-36.pyc
Normal file
BIN
test/__pycache__/test_translations.cpython-36.pyc
Normal file
Binary file not shown.
BIN
test/__pycache__/utilities.cpython-36.pyc
Normal file
BIN
test/__pycache__/utilities.cpython-36.pyc
Normal file
Binary file not shown.
205
test/qgis_interface.py
Normal file
205
test/qgis_interface.py
Normal file
@ -0,0 +1,205 @@
|
||||
# coding=utf-8
|
||||
"""QGIS plugin implementation.
|
||||
|
||||
.. note:: This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
.. note:: This source code was copied from the 'postgis viewer' application
|
||||
with original authors:
|
||||
Copyright (c) 2010 by Ivan Mincik, ivan.mincik@gista.sk
|
||||
Copyright (c) 2011 German Carrillo, geotux_tuxman@linuxmail.org
|
||||
Copyright (c) 2014 Tim Sutton, tim@linfiniti.com
|
||||
|
||||
"""
|
||||
|
||||
__author__ = 'tim@linfiniti.com'
|
||||
__revision__ = '$Format:%H$'
|
||||
__date__ = '10/01/2011'
|
||||
__copyright__ = (
|
||||
'Copyright (c) 2010 by Ivan Mincik, ivan.mincik@gista.sk and '
|
||||
'Copyright (c) 2011 German Carrillo, geotux_tuxman@linuxmail.org'
|
||||
'Copyright (c) 2014 Tim Sutton, tim@linfiniti.com'
|
||||
)
|
||||
|
||||
import logging
|
||||
from qgis.PyQt.QtCore import QObject, pyqtSlot, pyqtSignal
|
||||
from qgis.core import QgsMapLayerRegistry
|
||||
from qgis.gui import QgsMapCanvasLayer
|
||||
LOGGER = logging.getLogger('QGIS')
|
||||
|
||||
|
||||
#noinspection PyMethodMayBeStatic,PyPep8Naming
|
||||
class QgisInterface(QObject):
|
||||
"""Class to expose QGIS objects and functions to plugins.
|
||||
|
||||
This class is here for enabling us to run unit tests only,
|
||||
so most methods are simply stubs.
|
||||
"""
|
||||
currentLayerChanged = pyqtSignal(QgsMapCanvasLayer)
|
||||
|
||||
def __init__(self, canvas):
|
||||
"""Constructor
|
||||
:param canvas:
|
||||
"""
|
||||
QObject.__init__(self)
|
||||
self.canvas = canvas
|
||||
# Set up slots so we can mimic the behaviour of QGIS when layers
|
||||
# are added.
|
||||
LOGGER.debug('Initialising canvas...')
|
||||
# noinspection PyArgumentList
|
||||
QgsMapLayerRegistry.instance().layersAdded.connect(self.addLayers)
|
||||
# noinspection PyArgumentList
|
||||
QgsMapLayerRegistry.instance().layerWasAdded.connect(self.addLayer)
|
||||
# noinspection PyArgumentList
|
||||
QgsMapLayerRegistry.instance().removeAll.connect(self.removeAllLayers)
|
||||
|
||||
# For processing module
|
||||
self.destCrs = None
|
||||
|
||||
@pyqtSlot('QStringList')
|
||||
def addLayers(self, layers):
|
||||
"""Handle layers being added to the registry so they show up in canvas.
|
||||
|
||||
:param layers: list<QgsMapLayer> list of map layers that were added
|
||||
|
||||
.. note:: The QgsInterface api does not include this method,
|
||||
it is added here as a helper to facilitate testing.
|
||||
"""
|
||||
#LOGGER.debug('addLayers called on qgis_interface')
|
||||
#LOGGER.debug('Number of layers being added: %s' % len(layers))
|
||||
#LOGGER.debug('Layer Count Before: %s' % len(self.canvas.layers()))
|
||||
current_layers = self.canvas.layers()
|
||||
final_layers = []
|
||||
for layer in current_layers:
|
||||
final_layers.append(QgsMapCanvasLayer(layer))
|
||||
for layer in layers:
|
||||
final_layers.append(QgsMapCanvasLayer(layer))
|
||||
|
||||
self.canvas.setLayerSet(final_layers)
|
||||
#LOGGER.debug('Layer Count After: %s' % len(self.canvas.layers()))
|
||||
|
||||
@pyqtSlot('QgsMapLayer')
|
||||
def addLayer(self, layer):
|
||||
"""Handle a layer being added to the registry so it shows up in canvas.
|
||||
|
||||
:param layer: list<QgsMapLayer> list of map layers that were added
|
||||
|
||||
.. note: The QgsInterface api does not include this method, it is added
|
||||
here as a helper to facilitate testing.
|
||||
|
||||
.. note: The addLayer method was deprecated in QGIS 1.8 so you should
|
||||
not need this method much.
|
||||
"""
|
||||
pass
|
||||
|
||||
@pyqtSlot()
|
||||
def removeAllLayers(self):
|
||||
"""Remove layers from the canvas before they get deleted."""
|
||||
self.canvas.setLayerSet([])
|
||||
|
||||
def newProject(self):
|
||||
"""Create new project."""
|
||||
# noinspection PyArgumentList
|
||||
QgsMapLayerRegistry.instance().removeAllMapLayers()
|
||||
|
||||
# ---------------- API Mock for QgsInterface follows -------------------
|
||||
|
||||
def zoomFull(self):
|
||||
"""Zoom to the map full extent."""
|
||||
pass
|
||||
|
||||
def zoomToPrevious(self):
|
||||
"""Zoom to previous view extent."""
|
||||
pass
|
||||
|
||||
def zoomToNext(self):
|
||||
"""Zoom to next view extent."""
|
||||
pass
|
||||
|
||||
def zoomToActiveLayer(self):
|
||||
"""Zoom to extent of active layer."""
|
||||
pass
|
||||
|
||||
def addVectorLayer(self, path, base_name, provider_key):
|
||||
"""Add a vector layer.
|
||||
|
||||
:param path: Path to layer.
|
||||
:type path: str
|
||||
|
||||
:param base_name: Base name for layer.
|
||||
:type base_name: str
|
||||
|
||||
:param provider_key: Provider key e.g. 'ogr'
|
||||
:type provider_key: str
|
||||
"""
|
||||
pass
|
||||
|
||||
def addRasterLayer(self, path, base_name):
|
||||
"""Add a raster layer given a raster layer file name
|
||||
|
||||
:param path: Path to layer.
|
||||
:type path: str
|
||||
|
||||
:param base_name: Base name for layer.
|
||||
:type base_name: str
|
||||
"""
|
||||
pass
|
||||
|
||||
def activeLayer(self):
|
||||
"""Get pointer to the active layer (layer selected in the legend)."""
|
||||
# noinspection PyArgumentList
|
||||
layers = QgsMapLayerRegistry.instance().mapLayers()
|
||||
for item in layers:
|
||||
return layers[item]
|
||||
|
||||
def addToolBarIcon(self, action):
|
||||
"""Add an icon to the plugins toolbar.
|
||||
|
||||
:param action: Action to add to the toolbar.
|
||||
:type action: QAction
|
||||
"""
|
||||
pass
|
||||
|
||||
def removeToolBarIcon(self, action):
|
||||
"""Remove an action (icon) from the plugin toolbar.
|
||||
|
||||
:param action: Action to add to the toolbar.
|
||||
:type action: QAction
|
||||
"""
|
||||
pass
|
||||
|
||||
def addToolBar(self, name):
|
||||
"""Add toolbar with specified name.
|
||||
|
||||
:param name: Name for the toolbar.
|
||||
:type name: str
|
||||
"""
|
||||
pass
|
||||
|
||||
def mapCanvas(self):
|
||||
"""Return a pointer to the map canvas."""
|
||||
return self.canvas
|
||||
|
||||
def mainWindow(self):
|
||||
"""Return a pointer to the main window.
|
||||
|
||||
In case of QGIS it returns an instance of QgisApp.
|
||||
"""
|
||||
pass
|
||||
|
||||
def addDockWidget(self, area, dock_widget):
|
||||
"""Add a dock widget to the main window.
|
||||
|
||||
:param area: Where in the ui the dock should be placed.
|
||||
:type area:
|
||||
|
||||
:param dock_widget: A dock widget to add to the UI.
|
||||
:type dock_widget: QDockWidget
|
||||
"""
|
||||
pass
|
||||
|
||||
def legendInterface(self):
|
||||
"""Get the legend."""
|
||||
return self.canvas
|
64
test/test_init.py
Normal file
64
test/test_init.py
Normal file
@ -0,0 +1,64 @@
|
||||
# coding=utf-8
|
||||
"""Tests QGIS plugin init."""
|
||||
|
||||
__author__ = 'Tim Sutton <tim@linfiniti.com>'
|
||||
__revision__ = '$Format:%H$'
|
||||
__date__ = '17/10/2010'
|
||||
__license__ = "GPL"
|
||||
__copyright__ = 'Copyright 2012, Australia Indonesia Facility for '
|
||||
__copyright__ += 'Disaster Reduction'
|
||||
|
||||
import os
|
||||
import unittest
|
||||
import logging
|
||||
import configparser
|
||||
|
||||
LOGGER = logging.getLogger('QGIS')
|
||||
|
||||
|
||||
class TestInit(unittest.TestCase):
|
||||
"""Test that the plugin init is usable for QGIS.
|
||||
|
||||
Based heavily on the validator class by Alessandro
|
||||
Passoti available here:
|
||||
|
||||
http://github.com/qgis/qgis-django/blob/master/qgis-app/
|
||||
plugins/validator.py
|
||||
|
||||
"""
|
||||
|
||||
def test_read_init(self):
|
||||
"""Test that the plugin __init__ will validate on plugins.qgis.org."""
|
||||
|
||||
# You should update this list according to the latest in
|
||||
# https://github.com/qgis/qgis-django/blob/master/qgis-app/
|
||||
# plugins/validator.py
|
||||
|
||||
required_metadata = [
|
||||
'name',
|
||||
'description',
|
||||
'version',
|
||||
'qgisMinimumVersion',
|
||||
'email',
|
||||
'author']
|
||||
|
||||
file_path = os.path.abspath(os.path.join(
|
||||
os.path.dirname(__file__), os.pardir,
|
||||
'metadata.txt'))
|
||||
LOGGER.info(file_path)
|
||||
metadata = []
|
||||
parser = configparser.ConfigParser()
|
||||
parser.optionxform = str
|
||||
parser.read(file_path)
|
||||
message = 'Cannot find a section named "general" in %s' % file_path
|
||||
assert parser.has_section('general'), message
|
||||
metadata.extend(parser.items('general'))
|
||||
|
||||
for expectation in required_metadata:
|
||||
message = ('Cannot find metadata "%s" in metadata source (%s).' % (
|
||||
expectation, file_path))
|
||||
|
||||
self.assertIn(expectation, dict(metadata), message)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
60
test/test_qgis_environment.py
Normal file
60
test/test_qgis_environment.py
Normal file
@ -0,0 +1,60 @@
|
||||
# coding=utf-8
|
||||
"""Tests for QGIS functionality.
|
||||
|
||||
|
||||
.. note:: This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
"""
|
||||
__author__ = 'tim@linfiniti.com'
|
||||
__date__ = '20/01/2011'
|
||||
__copyright__ = ('Copyright 2012, Australia Indonesia Facility for '
|
||||
'Disaster Reduction')
|
||||
|
||||
import os
|
||||
import unittest
|
||||
from qgis.core import (
|
||||
QgsProviderRegistry,
|
||||
QgsCoordinateReferenceSystem,
|
||||
QgsRasterLayer)
|
||||
|
||||
from .utilities import get_qgis_app
|
||||
QGIS_APP = get_qgis_app()
|
||||
|
||||
|
||||
class QGISTest(unittest.TestCase):
|
||||
"""Test the QGIS Environment"""
|
||||
|
||||
def test_qgis_environment(self):
|
||||
"""QGIS environment has the expected providers"""
|
||||
|
||||
r = QgsProviderRegistry.instance()
|
||||
self.assertIn('gdal', r.providerList())
|
||||
self.assertIn('ogr', r.providerList())
|
||||
self.assertIn('postgres', r.providerList())
|
||||
|
||||
def test_projection(self):
|
||||
"""Test that QGIS properly parses a wkt string.
|
||||
"""
|
||||
crs = QgsCoordinateReferenceSystem()
|
||||
wkt = (
|
||||
'GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",'
|
||||
'SPHEROID["WGS_1984",6378137.0,298.257223563]],'
|
||||
'PRIMEM["Greenwich",0.0],UNIT["Degree",'
|
||||
'0.0174532925199433]]')
|
||||
crs.createFromWkt(wkt)
|
||||
auth_id = crs.authid()
|
||||
expected_auth_id = 'EPSG:4326'
|
||||
self.assertEqual(auth_id, expected_auth_id)
|
||||
|
||||
# now test for a loaded layer
|
||||
path = os.path.join(os.path.dirname(__file__), 'tenbytenraster.asc')
|
||||
title = 'TestRaster'
|
||||
layer = QgsRasterLayer(path, title)
|
||||
auth_id = layer.crs().authid()
|
||||
self.assertEqual(auth_id, expected_auth_id)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
44
test/test_resources.py
Normal file
44
test/test_resources.py
Normal file
@ -0,0 +1,44 @@
|
||||
# coding=utf-8
|
||||
"""Resources test.
|
||||
|
||||
.. note:: This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
"""
|
||||
|
||||
__author__ = 'caliec@linux-alpes.org'
|
||||
__date__ = '2021-03-01'
|
||||
__copyright__ = 'Copyright 2021, Association Linux-Alpes'
|
||||
|
||||
import unittest
|
||||
|
||||
from qgis.PyQt.QtGui import QIcon
|
||||
|
||||
|
||||
|
||||
class OrientationDialogTest(unittest.TestCase):
|
||||
"""Test rerources work."""
|
||||
|
||||
def setUp(self):
|
||||
"""Runs before each test."""
|
||||
pass
|
||||
|
||||
def tearDown(self):
|
||||
"""Runs after each test."""
|
||||
pass
|
||||
|
||||
def test_icon_png(self):
|
||||
"""Test we can click OK."""
|
||||
path = ':/plugins/Orientation/icon.png'
|
||||
icon = QIcon(path)
|
||||
self.assertFalse(icon.isNull())
|
||||
|
||||
if __name__ == "__main__":
|
||||
suite = unittest.makeSuite(OrientationResourcesTest)
|
||||
runner = unittest.TextTestRunner(verbosity=2)
|
||||
runner.run(suite)
|
||||
|
||||
|
||||
|
55
test/test_translations.py
Normal file
55
test/test_translations.py
Normal file
@ -0,0 +1,55 @@
|
||||
# coding=utf-8
|
||||
"""Safe Translations Test.
|
||||
|
||||
.. note:: This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
"""
|
||||
from .utilities import get_qgis_app
|
||||
|
||||
__author__ = 'ismailsunni@yahoo.co.id'
|
||||
__date__ = '12/10/2011'
|
||||
__copyright__ = ('Copyright 2012, Australia Indonesia Facility for '
|
||||
'Disaster Reduction')
|
||||
import unittest
|
||||
import os
|
||||
|
||||
from qgis.PyQt.QtCore import QCoreApplication, QTranslator
|
||||
|
||||
QGIS_APP = get_qgis_app()
|
||||
|
||||
|
||||
class SafeTranslationsTest(unittest.TestCase):
|
||||
"""Test translations work."""
|
||||
|
||||
def setUp(self):
|
||||
"""Runs before each test."""
|
||||
if 'LANG' in iter(os.environ.keys()):
|
||||
os.environ.__delitem__('LANG')
|
||||
|
||||
def tearDown(self):
|
||||
"""Runs after each test."""
|
||||
if 'LANG' in iter(os.environ.keys()):
|
||||
os.environ.__delitem__('LANG')
|
||||
|
||||
def test_qgis_translations(self):
|
||||
"""Test that translations work."""
|
||||
parent_path = os.path.join(__file__, os.path.pardir, os.path.pardir)
|
||||
dir_path = os.path.abspath(parent_path)
|
||||
file_path = os.path.join(
|
||||
dir_path, 'i18n', 'fr.qm')
|
||||
translator = QTranslator()
|
||||
translator.load(file_path)
|
||||
QCoreApplication.installTranslator(translator)
|
||||
|
||||
expected_message = 'Bonjour'
|
||||
real_message = QCoreApplication.translate("@default", 'Good morning')
|
||||
self.assertEqual(real_message, expected_message)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
suite = unittest.makeSuite(SafeTranslationsTest)
|
||||
runner = unittest.TextTestRunner(verbosity=2)
|
||||
runner.run(suite)
|
61
test/utilities.py
Normal file
61
test/utilities.py
Normal file
@ -0,0 +1,61 @@
|
||||
# coding=utf-8
|
||||
"""Common functionality used by regression tests."""
|
||||
|
||||
import sys
|
||||
import logging
|
||||
|
||||
|
||||
LOGGER = logging.getLogger('QGIS')
|
||||
QGIS_APP = None # Static variable used to hold hand to running QGIS app
|
||||
CANVAS = None
|
||||
PARENT = None
|
||||
IFACE = None
|
||||
|
||||
|
||||
def get_qgis_app():
|
||||
""" Start one QGIS application to test against.
|
||||
|
||||
:returns: Handle to QGIS app, canvas, iface and parent. If there are any
|
||||
errors the tuple members will be returned as None.
|
||||
:rtype: (QgsApplication, CANVAS, IFACE, PARENT)
|
||||
|
||||
If QGIS is already running the handle to that app will be returned.
|
||||
"""
|
||||
|
||||
try:
|
||||
from qgis.PyQt import QtGui, QtCore
|
||||
from qgis.core import QgsApplication
|
||||
from qgis.gui import QgsMapCanvas
|
||||
from .qgis_interface import QgisInterface
|
||||
except ImportError:
|
||||
return None, None, None, None
|
||||
|
||||
global QGIS_APP # pylint: disable=W0603
|
||||
|
||||
if QGIS_APP is None:
|
||||
gui_flag = True # All test will run qgis in gui mode
|
||||
#noinspection PyPep8Naming
|
||||
QGIS_APP = QgsApplication(sys.argv, gui_flag)
|
||||
# Make sure QGIS_PREFIX_PATH is set in your env if needed!
|
||||
QGIS_APP.initQgis()
|
||||
s = QGIS_APP.showSettings()
|
||||
LOGGER.debug(s)
|
||||
|
||||
global PARENT # pylint: disable=W0603
|
||||
if PARENT is None:
|
||||
#noinspection PyPep8Naming
|
||||
PARENT = QtGui.QWidget()
|
||||
|
||||
global CANVAS # pylint: disable=W0603
|
||||
if CANVAS is None:
|
||||
#noinspection PyPep8Naming
|
||||
CANVAS = QgsMapCanvas(PARENT)
|
||||
CANVAS.resize(QtCore.QSize(400, 400))
|
||||
|
||||
global IFACE # pylint: disable=W0603
|
||||
if IFACE is None:
|
||||
# QgisInterface is a stub implementation of the QGIS plugin interface
|
||||
#noinspection PyPep8Naming
|
||||
IFACE = QgisInterface(CANVAS)
|
||||
|
||||
return QGIS_APP, CANVAS, IFACE, PARENT
|
12
utilitaires/compile-strings.sh
Normal file
12
utilitaires/compile-strings.sh
Normal file
@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
LRELEASE=$1
|
||||
LOCALES=$2
|
||||
|
||||
|
||||
for LOCALE in ${LOCALES}
|
||||
do
|
||||
echo "Processing: ${LOCALE}.ts"
|
||||
# Note we don't use pylupdate with qt .pro file approach as it is flakey
|
||||
# about what is made available.
|
||||
$LRELEASE i18n/${LOCALE}.ts
|
||||
done
|
56
utilitaires/update-strings.sh
Normal file
56
utilitaires/update-strings.sh
Normal file
@ -0,0 +1,56 @@
|
||||
#!/bin/bash
|
||||
LOCALES=$*
|
||||
|
||||
# Get newest .py files so we don't update strings unnecessarily
|
||||
|
||||
CHANGED_FILES=0
|
||||
PYTHON_FILES=`find . -regex ".*\(ui\|py\)$" -type f`
|
||||
for PYTHON_FILE in $PYTHON_FILES
|
||||
do
|
||||
CHANGED=$(stat -c %Y $PYTHON_FILE)
|
||||
if [ ${CHANGED} -gt ${CHANGED_FILES} ]
|
||||
then
|
||||
CHANGED_FILES=${CHANGED}
|
||||
fi
|
||||
done
|
||||
|
||||
# Qt translation stuff
|
||||
# for .ts file
|
||||
UPDATE=false
|
||||
for LOCALE in ${LOCALES}
|
||||
do
|
||||
TRANSLATION_FILE="i18n/$LOCALE.ts"
|
||||
if [ ! -f ${TRANSLATION_FILE} ]
|
||||
then
|
||||
# Force translation string collection as we have a new language file
|
||||
touch ${TRANSLATION_FILE}
|
||||
UPDATE=true
|
||||
break
|
||||
fi
|
||||
|
||||
MODIFICATION_TIME=$(stat -c %Y ${TRANSLATION_FILE})
|
||||
if [ ${CHANGED_FILES} -gt ${MODIFICATION_TIME} ]
|
||||
then
|
||||
# Force translation string collection as a .py file has been updated
|
||||
UPDATE=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${UPDATE} == true ]
|
||||
# retrieve all python files
|
||||
then
|
||||
echo ${PYTHON_FILES}
|
||||
# update .ts
|
||||
echo "Please provide translations by editing the translation files below:"
|
||||
for LOCALE in ${LOCALES}
|
||||
do
|
||||
echo "i18n/"${LOCALE}".ts"
|
||||
# Note we don't use pylupdate with qt .pro file approach as it is flakey
|
||||
# about what is made available.
|
||||
pylupdate4 -noobsolete ${PYTHON_FILES} -ts i18n/${LOCALE}.ts
|
||||
done
|
||||
else
|
||||
echo "No need to edit any translation files (.ts) because no python files"
|
||||
echo "has been updated since the last update translation. "
|
||||
fi
|
Loading…
Reference in New Issue
Block a user