aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick3d
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2025-09-24 14:13:56 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2025-09-26 07:32:33 +0200
commit04a1c461d82e966510ac3f9c355b3e6b99a92d4b (patch)
treec3094764ef7cdc76467b61fcf44e769322c389ce /examples/quick3d
parentb987278cfbbe6c8d6eab373ba0b1dfca12598d06 (diff)
Update the QtQuick3d customgeometry example
Change it to be a QML module completely loaded from the file system and adapt to qtquick3d/d7f4419f1d763dbbd8d2b58f99ff3fbadba95297 (adding a Torus). Pick-to: 6.10 Task-number: PYSIDE-2206 Change-Id: Ifac722cc676421a75bef6fe5067f81d3fa6ff60b Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'examples/quick3d')
-rw-r--r--examples/quick3d/customgeometry/CustomGeometryExample/Main.qml398
-rw-r--r--examples/quick3d/customgeometry/CustomGeometryExample/TorusMesh.qml60
-rw-r--r--examples/quick3d/customgeometry/CustomGeometryExample/qmldir3
-rw-r--r--examples/quick3d/customgeometry/CustomGeometryExample/qt_logo_rect.png (renamed from examples/quick3d/customgeometry/qt_logo_rect.png)bin6319 -> 6319 bytes
-rw-r--r--examples/quick3d/customgeometry/customgeometry.pyproject4
-rw-r--r--examples/quick3d/customgeometry/examplepoint.py2
-rw-r--r--examples/quick3d/customgeometry/exampletriangle.py2
-rw-r--r--examples/quick3d/customgeometry/main.py9
-rw-r--r--examples/quick3d/customgeometry/main.qml240
-rw-r--r--examples/quick3d/customgeometry/resources.qrc6
-rw-r--r--examples/quick3d/customgeometry/resources_rc.py585
11 files changed, 469 insertions, 840 deletions
diff --git a/examples/quick3d/customgeometry/CustomGeometryExample/Main.qml b/examples/quick3d/customgeometry/CustomGeometryExample/Main.qml
new file mode 100644
index 000000000..ced493e1f
--- /dev/null
+++ b/examples/quick3d/customgeometry/CustomGeometryExample/Main.qml
@@ -0,0 +1,398 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick3D
+import QtQuick3D.Helpers
+
+import CustomGeometryExample
+
+ApplicationWindow {
+ id: window
+ width: 1280
+ height: 720
+ visible: true
+ title: "Custom Geometry Example"
+
+ property bool isLandscape: width > height
+
+ View3D {
+ id: v3d
+ anchors.left: window.isLandscape ? controlsPane.right : parent.left
+ anchors.top: window.isLandscape ? parent.top : controlsPane.bottom
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+
+ camera: camera
+
+ environment: SceneEnvironment {
+ id: env
+ backgroundMode: SceneEnvironment.Color
+ clearColor: "#002b36"
+ }
+
+ Node {
+ id: originNode
+ PerspectiveCamera {
+ id: cameraNode
+ z: 600
+ }
+ }
+
+ DirectionalLight {
+ id: directionalLight
+ color: Qt.rgba(0.4, 0.2, 0.6, 1.0)
+ ambientColor: Qt.rgba(0.1, 0.1, 0.1, 1.0)
+ }
+
+ PointLight {
+ id: pointLight
+ position: Qt.vector3d(0, 0, 100)
+ color: Qt.rgba(0.1, 1.0, 0.1, 1.0)
+ ambientColor: Qt.rgba(0.2, 0.2, 0.2, 1.0)
+ }
+
+ Model {
+ id: gridModel
+ visible: false
+ scale: Qt.vector3d(100, 100, 100)
+ geometry: GridGeometry {
+ id: grid
+ horizontalLines: 20
+ verticalLines: 20
+ }
+ materials: [
+ PrincipledMaterial {
+ lineWidth: sliderLineWidth.value
+ }
+ ]
+ }
+
+ //! [model triangle]
+ Model {
+ id: triangleModel
+ visible: false
+ scale: Qt.vector3d(100, 100, 100)
+ geometry: ExampleTriangleGeometry {
+ normals: cbNorm.checked
+ normalXY: sliderNorm.value
+ uv: cbUV.checked
+ uvAdjust: sliderUV.value
+ }
+ materials: [
+ PrincipledMaterial {
+ Texture {
+ id: baseColorMap
+ source: "qt_logo_rect.png"
+ }
+ cullMode: PrincipledMaterial.NoCulling
+ baseColorMap: cbTexture.checked ? baseColorMap : null
+ specularAmount: 0.5
+ }
+ ]
+ }
+ //! [model triangle]
+
+ Model {
+ id: pointModel
+ visible: false
+ scale: Qt.vector3d(100, 100, 100)
+ geometry: ExamplePointGeometry { }
+ materials: [
+ PrincipledMaterial {
+ lighting: PrincipledMaterial.NoLighting
+ cullMode: PrincipledMaterial.NoCulling
+ baseColor: "yellow"
+ pointSize: sliderPointSize.value
+ }
+ ]
+ }
+
+ Model {
+ id: torusModel
+ visible: false
+ geometry: TorusMesh {
+ radius: radiusSlider.value
+ tubeRadius: tubeRadiusSlider.value
+ segments: segmentsSlider.value
+ rings: ringsSlider.value
+ }
+ materials: [
+ PrincipledMaterial {
+ id: torusMaterial
+ baseColor: "#dc322f"
+ metalness: 0.0
+ roughness: 0.1
+ }
+ ]
+ }
+
+ OrbitCameraController {
+ origin: originNode
+ camera: cameraNode
+ }
+ }
+
+ Pane {
+ id: controlsPane
+ width: window.isLandscape ? implicitWidth : window.width
+ height: window.isLandscape ? window.height : implicitHeight
+ ColumnLayout {
+ GroupBox {
+ title: "Mode"
+ ButtonGroup {
+ id: modeGroup
+ buttons: [ radioGridGeom, radioCustGeom, radioPointGeom, radioQMLGeom ]
+ }
+ ColumnLayout {
+ RadioButton {
+ id: radioGridGeom
+ text: "GridGeometry"
+ checked: true
+ }
+ RadioButton {
+ id: radioCustGeom
+ text: "Custom geometry from application (triangle)"
+ checked: false
+ }
+ RadioButton {
+ id: radioPointGeom
+ text: "Custom geometry from application (points)"
+ checked: false
+ }
+ RadioButton {
+ id: radioQMLGeom
+ text: "Custom geometry from QML"
+ checked: false
+ }
+ }
+ }
+
+ Pane {
+ id: gridSettings
+ visible: false
+ ColumnLayout {
+ Button {
+ text: "+ Y Cells"
+ onClicked: grid.horizontalLines += 1
+ Layout.alignment: Qt.AlignHCenter
+
+ }
+ RowLayout {
+ Layout.alignment: Qt.AlignHCenter
+ Button {
+ text: "- X Cells"
+ onClicked: grid.verticalLines -= 1
+ }
+ Button {
+ text: "+ X Cells"
+ onClicked: grid.verticalLines += 1
+ }
+ }
+ Button {
+ text: "- Y Cells"
+ onClicked: grid.horizontalLines -= 1
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ Label {
+ text: "Line width (if supported)"
+ }
+ Slider {
+ Layout.fillWidth: true
+ id: sliderLineWidth
+ from: 1.0
+ to: 10.0
+ stepSize: 0.5
+ value: 1.0
+ }
+ }
+ }
+ Pane {
+ id: triangleSettings
+ visible: false
+ ColumnLayout {
+ CheckBox {
+ id: cbNorm
+ text: "provide normals in geometry"
+ checked: false
+ }
+ RowLayout {
+ enabled: cbNorm.checked
+ Label {
+ Layout.fillWidth: true
+ text: "Normal adjust: "
+ }
+ Slider {
+ id: sliderNorm
+
+ from: 0.0
+ to: 1.0
+ stepSize: 0.01
+ value: 0.0
+ }
+ }
+ CheckBox {
+ id: cbTexture
+ text: "enable base color map"
+ checked: false
+ }
+ CheckBox {
+ id: cbUV
+ text: "provide UV in geometry"
+ checked: false
+ }
+ RowLayout {
+ enabled: cbUV.checked
+ Label {
+ Layout.fillWidth: true
+ text: "UV adjust:"
+ }
+ Slider {
+ id: sliderUV
+ from: 0.0
+ to: 1.0
+ stepSize: 0.01
+ value: 0.0
+ }
+ }
+ }
+
+ }
+ Pane {
+ id: pointSettings
+ visible: false
+ RowLayout {
+ ColumnLayout {
+ RowLayout {
+ Label {
+ text: "Point size (if supported)"
+ }
+ Slider {
+ id: sliderPointSize
+ from: 1.0
+ to: 16.0
+ stepSize: 1.0
+ value: 1.0
+ }
+ }
+ }
+ }
+ }
+ Pane {
+ id: torusSettings
+ visible: false
+ ColumnLayout {
+ Label {
+ text: "Radius: (" + radiusSlider.value + ")"
+ }
+ Slider {
+ id: radiusSlider
+ from: 1.0
+ to: 1000.0
+ stepSize: 1.0
+ value: 200
+ }
+ Label {
+ text: "Tube Radius: (" + tubeRadiusSlider.value + ")"
+ }
+ Slider {
+ id: tubeRadiusSlider
+ from: 1.0
+ to: 500.0
+ stepSize: 1.0
+ value: 50
+ }
+ Label {
+ text: "Rings: (" + ringsSlider.value + ")"
+ }
+ Slider {
+ id: ringsSlider
+ from: 3
+ to: 35
+ stepSize: 1.0
+ value: 20
+ }
+ Label {
+ text: "Segments: (" + segmentsSlider.value + ")"
+ }
+ Slider {
+ id: segmentsSlider
+ from: 3
+ to: 35
+ stepSize: 1.0
+ value: 20
+ }
+ CheckBox {
+ id: wireFrameCheckbox
+ text: "Wireframe Mode"
+ checked: false
+ onCheckedChanged: {
+ env.debugSettings.wireframeEnabled = checked
+ torusMaterial.cullMode = checked ? Material.NoCulling : Material.BackFaceCulling
+
+
+ }
+ }
+ }
+
+ }
+ }
+ states: [
+ State {
+ name: "gridMode"
+ when: radioGridGeom.checked
+ PropertyChanges {
+ gridModel.visible: true
+ gridSettings.visible: true
+ env.debugSettings.wireframeEnabled: false
+ originNode.position: Qt.vector3d(0, 0, 0)
+ originNode.rotation: Qt.quaternion(1, 0, 0, 0)
+ cameraNode.z: 600
+
+ }
+ },
+ State {
+ name: "triangleMode"
+ when: radioCustGeom.checked
+ PropertyChanges {
+ triangleModel.visible: true
+ triangleSettings.visible: true
+ env.debugSettings.wireframeEnabled: false
+ originNode.position: Qt.vector3d(0, 0, 0)
+ originNode.rotation: Qt.quaternion(1, 0, 0, 0)
+ cameraNode.z: 600
+ }
+ },
+ State {
+ name: "pointMode"
+ when: radioPointGeom.checked
+ PropertyChanges {
+ pointModel.visible: true
+ pointSettings.visible: true
+ env.debugSettings.wireframeEnabled: false
+ originNode.position: Qt.vector3d(0, 0, 0)
+ originNode.rotation: Qt.quaternion(1, 0, 0, 0)
+ cameraNode.z: 600
+ }
+ },
+ State {
+ name: "qmlMode"
+ when: radioQMLGeom.checked
+ PropertyChanges {
+ torusModel.visible: true
+ torusSettings.visible: true
+ directionalLight.eulerRotation: Qt.vector3d(-40, 0, 0)
+ directionalLight.color: "white"
+ pointLight.color: "white"
+ pointLight.position: Qt.vector3d(0, 0, 0)
+ originNode.position: Qt.vector3d(0, 0, 0)
+ originNode.eulerRotation: Qt.vector3d(-40, 0, 0)
+ cameraNode.z: 600
+ }
+ }
+ ]
+ }
+}
diff --git a/examples/quick3d/customgeometry/CustomGeometryExample/TorusMesh.qml b/examples/quick3d/customgeometry/CustomGeometryExample/TorusMesh.qml
new file mode 100644
index 000000000..7be605965
--- /dev/null
+++ b/examples/quick3d/customgeometry/CustomGeometryExample/TorusMesh.qml
@@ -0,0 +1,60 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick3D.Helpers
+
+ProceduralMesh {
+ property int rings: 50
+ property int segments: 50
+ property real radius: 100.0
+ property real tubeRadius: 10.0
+ property var meshArrays: generateTorus(rings, segments, radius, tubeRadius)
+ positions: meshArrays.verts
+ normals: meshArrays.normals
+ uv0s: meshArrays.uvs
+ indexes: meshArrays.indices
+
+ function generateTorus(rings: int, segments: int, radius: real, tubeRadius: real) : var {
+ let verts = []
+ let normals = []
+ let uvs = []
+ let indices = []
+
+ for (let i = 0; i <= rings; ++i) {
+ for (let j = 0; j <= segments; ++j) {
+ const u = i / rings * Math.PI * 2;
+ const v = j / segments * Math.PI * 2;
+
+ const centerX = radius * Math.cos(u);
+ const centerZ = radius * Math.sin(u);
+
+ const posX = centerX + tubeRadius * Math.cos(v) * Math.cos(u);
+ const posY = tubeRadius * Math.sin(v);
+ const posZ = centerZ + tubeRadius * Math.cos(v) * Math.sin(u);
+
+ verts.push(Qt.vector3d(posX, posY, posZ));
+
+ const normal = Qt.vector3d(posX - centerX, posY, posZ - centerZ).normalized();
+ normals.push(normal);
+
+ uvs.push(Qt.vector2d(i / rings, j / segments));
+ }
+ }
+
+ for (let i = 0; i < rings; ++i) {
+ for (let j = 0; j < segments; ++j) {
+ const a = (segments + 1) * i + j;
+ const b = (segments + 1) * (i + 1) + j;
+ const c = (segments + 1) * (i + 1) + j + 1;
+ const d = (segments + 1) * i + j + 1;
+
+ // Generate two triangles for each quad in the mesh
+ // Adjust order to be counter-clockwise
+ indices.push(a, d, b);
+ indices.push(b, d, c);
+ }
+ }
+ return { verts: verts, normals: normals, uvs: uvs, indices: indices }
+ }
+}
diff --git a/examples/quick3d/customgeometry/CustomGeometryExample/qmldir b/examples/quick3d/customgeometry/CustomGeometryExample/qmldir
new file mode 100644
index 000000000..9d54279fa
--- /dev/null
+++ b/examples/quick3d/customgeometry/CustomGeometryExample/qmldir
@@ -0,0 +1,3 @@
+module CustomGeometryExample
+Main 1.0 Main.qml
+TorusMesh 1.0 TorusMesh.qml
diff --git a/examples/quick3d/customgeometry/qt_logo_rect.png b/examples/quick3d/customgeometry/CustomGeometryExample/qt_logo_rect.png
index 129b873d5..129b873d5 100644
--- a/examples/quick3d/customgeometry/qt_logo_rect.png
+++ b/examples/quick3d/customgeometry/CustomGeometryExample/qt_logo_rect.png
Binary files differ
diff --git a/examples/quick3d/customgeometry/customgeometry.pyproject b/examples/quick3d/customgeometry/customgeometry.pyproject
index 3e31ac931..d3aeb7d0c 100644
--- a/examples/quick3d/customgeometry/customgeometry.pyproject
+++ b/examples/quick3d/customgeometry/customgeometry.pyproject
@@ -1,3 +1,5 @@
{
- "files": ["examplepoint.py", "exampletriangle.py", "main.py", "main.qml", "resources.qrc"]
+ "files": ["examplepoint.py", "exampletriangle.py", "main.py",
+ "CustomGeometryExample/Main.qml", "CustomGeometryExample/TorusMesh.qml",
+ "CustomGeometryExample/qmldir", "CustomGeometryExample/qt_logo_rect.png"]
}
diff --git a/examples/quick3d/customgeometry/examplepoint.py b/examples/quick3d/customgeometry/examplepoint.py
index 3b4984222..df5e8f90e 100644
--- a/examples/quick3d/customgeometry/examplepoint.py
+++ b/examples/quick3d/customgeometry/examplepoint.py
@@ -9,7 +9,7 @@ from PySide6.QtGui import QVector3D
from PySide6.QtQml import QmlElement
from PySide6.QtQuick3D import QQuick3DGeometry
-QML_IMPORT_NAME = "ExamplePointGeometry"
+QML_IMPORT_NAME = "CustomGeometryExample"
QML_IMPORT_MAJOR_VERSION = 1
diff --git a/examples/quick3d/customgeometry/exampletriangle.py b/examples/quick3d/customgeometry/exampletriangle.py
index 996a9f85c..8cc7a7278 100644
--- a/examples/quick3d/customgeometry/exampletriangle.py
+++ b/examples/quick3d/customgeometry/exampletriangle.py
@@ -8,7 +8,7 @@ from PySide6.QtGui import QVector3D
from PySide6.QtQml import QmlElement
from PySide6.QtQuick3D import QQuick3DGeometry
-QML_IMPORT_NAME = "ExampleTriangleGeometry"
+QML_IMPORT_NAME = "CustomGeometryExample"
QML_IMPORT_MAJOR_VERSION = 1
diff --git a/examples/quick3d/customgeometry/main.py b/examples/quick3d/customgeometry/main.py
index bff6b4a95..169cf17e8 100644
--- a/examples/quick3d/customgeometry/main.py
+++ b/examples/quick3d/customgeometry/main.py
@@ -3,27 +3,24 @@
from __future__ import annotations
-import os
import sys
+from pathlib import Path
-from PySide6.QtCore import QUrl
from PySide6.QtGui import QGuiApplication, QSurfaceFormat
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtQuick3D import QQuick3D
-# Imports to trigger the resources and registration of QML elements
-import resources_rc # noqa: F401
from examplepoint import ExamplePointGeometry # noqa: F401
from exampletriangle import ExampleTriangleGeometry # noqa: F401
if __name__ == "__main__":
- os.environ["QT_QUICK_CONTROLS_STYLE"] = "Basic"
app = QGuiApplication(sys.argv)
QSurfaceFormat.setDefaultFormat(QQuick3D.idealSurfaceFormat())
engine = QQmlApplicationEngine()
- engine.load(QUrl.fromLocalFile(":/main.qml"))
+ engine.addImportPath(Path(__file__).parent)
+ engine.loadFromModule("CustomGeometryExample", "Main")
if not engine.rootObjects():
sys.exit(-1)
diff --git a/examples/quick3d/customgeometry/main.qml b/examples/quick3d/customgeometry/main.qml
deleted file mode 100644
index 45bb4462e..000000000
--- a/examples/quick3d/customgeometry/main.qml
+++ /dev/null
@@ -1,240 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import QtQuick3D
-import QtQuick3D.Helpers
-import ExamplePointGeometry
-import ExampleTriangleGeometry
-
-
-Window {
- id: window
- width: 1280
- height: 720
- visible: true
- color: "#848895"
-
- View3D {
- id: v3d
- anchors.fill: parent
- camera: camera
-
- PerspectiveCamera {
- id: camera
- position: Qt.vector3d(0, 0, 600)
- }
-
- DirectionalLight {
- position: Qt.vector3d(-500, 500, -100)
- color: Qt.rgba(0.4, 0.2, 0.6, 1.0)
- ambientColor: Qt.rgba(0.1, 0.1, 0.1, 1.0)
- }
-
- PointLight {
- position: Qt.vector3d(0, 0, 100)
- color: Qt.rgba(0.1, 1.0, 0.1, 1.0)
- ambientColor: Qt.rgba(0.2, 0.2, 0.2, 1.0)
- }
-
- Model {
- visible: radioGridGeom.checked
- scale: Qt.vector3d(100, 100, 100)
- geometry: GridGeometry {
- id: grid
- horizontalLines: 20
- verticalLines: 20
- }
- materials: [
- DefaultMaterial {
- lineWidth: sliderLineWidth.value
- }
- ]
- }
-
- //! [model triangle]
- Model {
- visible: radioCustGeom.checked
- scale: Qt.vector3d(100, 100, 100)
- geometry: ExampleTriangleGeometry {
- normals: cbNorm.checked
- normalXY: sliderNorm.value
- uv: cbUV.checked
- uvAdjust: sliderUV.value
- }
- materials: [
- DefaultMaterial {
- Texture {
- id: baseColorMap
- source: "qt_logo_rect.png"
- }
- cullMode: DefaultMaterial.NoCulling
- diffuseMap: cbTexture.checked ? baseColorMap : null
- specularAmount: 0.5
- }
- ]
- }
- //! [model triangle]
-
- Model {
- visible: radioPointGeom.checked
- scale: Qt.vector3d(100, 100, 100)
- geometry: ExamplePointGeometry { }
- materials: [
- DefaultMaterial {
- lighting: DefaultMaterial.NoLighting
- cullMode: DefaultMaterial.NoCulling
- diffuseColor: "yellow"
- pointSize: sliderPointSize.value
- }
- ]
- }
- }
-
- WasdController {
- controlledObject: camera
- }
-
- ColumnLayout {
- Label {
- text: "Use WASD and mouse to navigate"
- font.bold: true
- }
- ButtonGroup {
- buttons: [ radioGridGeom, radioCustGeom, radioPointGeom ]
- }
- RadioButton {
- id: radioGridGeom
- text: "GridGeometry"
- checked: true
- focusPolicy: Qt.NoFocus
- }
- RadioButton {
- id: radioCustGeom
- text: "Custom geometry from application (triangle)"
- checked: false
- focusPolicy: Qt.NoFocus
- }
- RadioButton {
- id: radioPointGeom
- text: "Custom geometry from application (points)"
- checked: false
- focusPolicy: Qt.NoFocus
- }
- RowLayout {
- visible: radioGridGeom.checked
- ColumnLayout {
- Button {
- text: "More X cells"
- onClicked: grid.verticalLines += 1
- focusPolicy: Qt.NoFocus
- }
- Button {
- text: "Fewer X cells"
- onClicked: grid.verticalLines -= 1
- focusPolicy: Qt.NoFocus
- }
- }
- ColumnLayout {
- Button {
- text: "More Y cells"
- onClicked: grid.horizontalLines += 1
- focusPolicy: Qt.NoFocus
- }
- Button {
- text: "Fewer Y cells"
- onClicked: grid.horizontalLines -= 1
- focusPolicy: Qt.NoFocus
- }
- }
- }
- RowLayout {
- visible: radioGridGeom.checked
- Label {
- text: "Line width (if supported)"
- }
- Slider {
- id: sliderLineWidth
- from: 1.0
- to: 10.0
- stepSize: 0.5
- value: 1.0
- focusPolicy: Qt.NoFocus
- }
- }
- RowLayout {
- visible: radioCustGeom.checked
- CheckBox {
- id: cbNorm
- text: "provide normals in geometry"
- checked: false
- focusPolicy: Qt.NoFocus
- }
- RowLayout {
- Label {
- text: "manual adjust"
- }
- Slider {
- id: sliderNorm
- from: 0.0
- to: 1.0
- stepSize: 0.01
- value: 0.0
- focusPolicy: Qt.NoFocus
- }
- }
- }
- RowLayout {
- visible: radioCustGeom.checked
- CheckBox {
- id: cbTexture
- text: "enable base color map"
- checked: false
- focusPolicy: Qt.NoFocus
- }
- CheckBox {
- id: cbUV
- text: "provide UV in geometry"
- checked: false
- focusPolicy: Qt.NoFocus
- }
- RowLayout {
- Label {
- text: "UV adjust"
- }
- Slider {
- id: sliderUV
- from: 0.0
- to: 1.0
- stepSize: 0.01
- value: 0.0
- focusPolicy: Qt.NoFocus
- }
- }
- }
- RowLayout {
- visible: radioPointGeom.checked
- ColumnLayout {
- RowLayout {
- Label {
- text: "Point size (if supported)"
- }
- Slider {
- id: sliderPointSize
- from: 1.0
- to: 16.0
- stepSize: 1.0
- value: 1.0
- focusPolicy: Qt.NoFocus
- }
- }
- }
- }
- TextArea {
- id: infoText
- readOnly: true
- }
- }
-}
diff --git a/examples/quick3d/customgeometry/resources.qrc b/examples/quick3d/customgeometry/resources.qrc
deleted file mode 100644
index dc55e9ddd..000000000
--- a/examples/quick3d/customgeometry/resources.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>main.qml</file>
- <file>qt_logo_rect.png</file>
- </qresource>
-</RCC>
diff --git a/examples/quick3d/customgeometry/resources_rc.py b/examples/quick3d/customgeometry/resources_rc.py
deleted file mode 100644
index 1422353a3..000000000
--- a/examples/quick3d/customgeometry/resources_rc.py
+++ /dev/null
@@ -1,585 +0,0 @@
-# Resource object code (Python 3)
-# Created by: object code
-# Created by: The Resource Compiler for Qt version 6.2.2
-# WARNING! All changes made in this file will be lost!
-
-from PySide6 import QtCore
-
-qt_resource_data = b"\
-\x00\x00\x09C\
-\x00\
-\x00#\x9fx\x9c\xe5ZQs\xdaH\x12~\xe7W\xf4\
-\xf9\xf2`\xef\x11\x19;\x9b\x5c\x8e\xab\xab+\x01\xb2\xad\
-*,\x11I\xd8qmm\xa5\x844\xc0l\x84\x86\x95\
-F&l\xca\xff\xfd\xbaG\x12\x08\x108N\xec\xbd\xba\
-\xba)\x17\xa0\x99\x9e\xee\xaf\xbf\xee\xe9\x99Qr\xfa\xd3\
-3\xb6\x86\xfa\x83\xae\x98/\x13>\x99J8\xee\x9e\xc0\
-y\xeb\xfc\x0c\xbc)\x83\x0f\x12Gfs?^B_\
-\x86Z.\x19K?\x90m\x98J9O\xdb\xa7\xa7\x8b\
-\xc5B\xfb]j\x5c\x9cF<`q\xca\xe3\xc9i\xa1\
-\xd5\x9b\xf2\x14\xc6<b\x80\xdfs?\x91 \xc6 s\
-\xbdc\x91\xc0`)\xa7\x22\x06\xf6\xc5\x9f\xcd#\x96V\
-F=!\xa2\xcf\x5cj\x85\xa2W\x1f\xbcO\x1d\xe3\xd2\
-\xb4>\xf5\xcd\xaea\xb9F\xbb\xe3\xf6^\xe5pf3\
-\x96\x04\xdc\x8f\xa0\xaf\xcc3\x18\xa6\xfe\x84\xd1X\xd1\x81\
-\x8a\xa7\x22\x0a\x11\x17\xdc\xfb\x11\x0f!X\xcfAS9\
-j\x14\x9a\xf9K\xc8p\xbe\x5c\xa3\x8eI\x8d\x1f\x04\x22\
-\x09\xfd8`\xb0\xe0r\xaa VT\x14\xf3\xc1\x9f$\
-\x8c\xcdX,a\x9e\x88{\x1e\xb2p%NZ\x5c1\
-\x96\x0b?a \x92&\xf8\x91dI\xecK~\xcf\xa2\
-e\x13\xed\xd4\x1aA\x99Y\x8a\xa6\x90p\x1e\xa3\xba\x02\
-\x0e,\x12.%\x8b+\x16GL.\x18\xf6,E\x06\
-~\x1cn\xc5N\x83\x0b${\x15\x9d\x5c\xafR\x15\x13\
-\x19q\xc8%\x17q\x0aHUMT\x95\xf4\xeb\xb5X\
-\xaem\x9c%\x081!-<\xc6X\xce|\x1a,\xf8\
-c9\xe8@Ey\x06\xbe\xacQ[H\xbc\xce\xd22\
-\xc8\x18\xd2\xdd\x18\xea\x9bL\x91\x83\xbbq\xca\xe2\x90%\
-\x15\xca\x8a<\x22\x85Et\x94\xb7(-\xa2H,\xd2\
-va\xf1\xc8a!Oe\xc2G\x99BO|\x90f\
-\x8cG*\xb2\x04cA=#\x1e\xfb\xc9R\xb9\x926\
-\xf3\xe8 \x01\xf4-2Ijf\x22\xe4c\x1e(\x06\
-0\xb6\x18\xe39\xc2\xa0\x18\x85\xeb\x5c\x90S\xa4\x81P\
-\xe5\x18(\x0e\x15\xeaq\x92\xd2\xc4$a\x03\x80\x9f`\
-\x13\x9br\xaa\x00\x15\x88\x90\xc1,K%$\x8cRC\
-\xa9\xf5G\xe2\x9e\x86\x8au\x9ck\x01\x88\x85D\x06\x9a\
-9Y\x11*$=U\xc3q\xb8\x85\x0a\xad\x06\x91\xcf\
-1\xbd\xb5}P\xd0d\x85\x94\x12\x0a\xba\x1af\x01{\
-)4E\xfaS#\x91P\x04\x19\xe5\xbe_F\xee\x14\
-\x83\x22('1A0\x0dpi\xa6\xf5+\x91Z\xd5\
-\x9f\x95\x9b\x16\xe3j>\xa9\x8f\xfd\x19#p\xbbU\x10\
-\x9dX\x8b\xa8\xb0p\x99\x96z)\xab\x95^\x91\xe4\x05\
-e\xc4(\xa3\xd0+\x01,\x0e\xb1\x97\x0a\x00\xe1\x9a\x09\
-\xc9 \xa7L\xa6\x80\xf9\x8b\x19\x1e\x96j\xc68\x9e\x93\
-\x94\x96e\xa3\xc87H\xe7,\xa0l\xc3\xb9\x9c\xd2\xb0\
-\xa8\x05*\xe3\xd2\xb4p\xa7\xac\xbfW\xa6\x0b\xae}\xe1\
-\xdd\xea\x8e\x01\xf8{\xe0\xd87f\xcf\xe8A\xe7\x0e\x07\
-\x0d\xe8\xda\x83;\xc7\xbc\xbc\xf2\xe0\xca\xee\xf7\x0c\xc7\x05\
-\xdd\xeaa\xaf\xe59fg\xe8\xd9\x8e\xab\x96\x89\xee\xe2\
-\xe4#5\xa6[w`|\x1c8\x86\xeb\x82\xed\x80y\
-=\xe8\x9b\xa8\x0f\x0d8\xba\xe5\x99\x86\xdb\x04\xd3\xea\xf6\
-\x87=\xd3\xbal\x02\xea\x00\xcb\xf6T16\xafM\x0f\
-%=\xbb\xa9L\xef\xce\x04\xfb\x02\xae\x0d\xa7{\x85\x8f\
-z\xc7\xec\x9b\xde\x9d2yaz\x16\x99\xbb\xb0\x1dU\
-\x11`\xa0;\x9e\xd9\x1d\xf6u\x07\x06Cg`\xbb\x06\
-\x90\x7f=\xd3\xed\xf6u\xf3\xda\xe8i\x88\x01\xed\x82q\
-cX\x1e\xb8Wz\xbf\xbf\xe9.\xe9\xb1o-\xc3!\
-\x1f\xaa\xeeB\xc7@\xa4z\xa7o\x909\xe5m\xcft\
-\x8c\xaeGn\xad\x7fu\x91D\x04\xd9o\xaa\xca>0\
-\xba&\xfeF^\x0ctJw\xee\x9a\x85Z\xd7\xf80\
-D9\x1c\x84\x9e~\xad_\xa2\x8f\xc7\x8f\xb3\x83A\xea\
-\x0e\x1d\xe3\x9a\xb0#%\xee\xb0\xe3z\xa67\xf4\x0c\xb8\
-\xb4\xed\x9e\xa2\xdd5\x9c\x1b\xdc\x08\xdd\x7fB\xdfv\x15\
-qC\xd7P`z\xba\xa7+\xf3\xa8\x05\x89C\x09\xfc\
-\xdd\x19\xba\xa6\xa2\xd0\xb4<\xc3q\x86\x03\xcf\xb4\xad\x13\
-\x8c\xf9-2\x84Hu\x9c\xddS\x5c\xdb\x16\xf9\x9c\xe7\
-\x8ea;w\xa4\x9a\xf8P\xd1h\xc2\xed\x95\x81\xfd\x0e\
-\xd1\xabX\xd3\x89\x0e\x17\xd9\xebzU14\x89d*\
-\xc7\xd6\xfe\x82e\x5c\xf6\xcdK\xc3\xea\x1a$`\x93\xa2\
-[\xd35N0x\xa6K\x02\xa62\x8e\x19\x81f\x87\
-\xcaw\x0a\x1abS\xe1\xba\xd8L\xe7\xa6\x8a.\x98\x17\
-\xa0\xf7nL\xc2_\xc8c>\xb8f\x91>\x8a\xbe\xee\
-U\xc1\xbevT9N\x18V\xaf<L\xbc\xca\xbb\x9f\
-\xaf\x9d6\x1a|6\x17x\xde\xf9 ?d<\xf8\xbc\
-\xf5\xa8\xd1!*\x11Q\xba\xdd\xdf\xf7q\x83\x93\xdb\xdd\
-oz;\x1d\xda\x15\x8bp\xc9\xaf$\x8d\xfc\x085\x10\
-<\x96\x97L\xe0>\x92,\xb7\xc6<,\x89\xf1$b\
-\xab\xe1F\xe3\x96cIZ\xc0\xd7\x06\xd5\x1c\x1e\xb6\xb1\
-\xc8P\x87z\x5c\xf0PN\xdbpv\xfe\xbe\xa5\x9e\xa7\
-\x8c\x0ay\x1b\xfe~\x9e?\xdf\xf3\x94\x8f\x22\xd6\x06\x99\
-d\xac\x91\xd7\xbeH$m8\xfa\xeb\xfb\x9f\xdf\xbf\xff\
-\xc7\xdb\xa3\x86\xea\xbd\xe1l\xf1\xa6W\xd8(\xed\xdc\xbf\
-\x09W\xcfx\xe6\x99b]\xd4p'\x8f\xdatJ\xc4\
-\xa2\xbe\x1a\x0c\xb0\xc6&~\xbb\xf8n\xac\xfa\x07\xe8;\
-\x16B:\x16t\xd5P\xc5@i\xa4\x98S\xed\x9e\x8b\
-T\xed4mdR\xbb\xc7\xf9\x22y\x13\x1e\xb7\x9a\x80\
-\x7f\xefZ\xad\x93\x95\xf0\xc3\xdaT\x8f'dH\xc4~\
-\xd4W'\xe4\xaf\xdf\xa0\xf2\xf5\xdb\x16\xaaT\x1f\xaf\xcf\
-\xaa\x8a+D\xa1|2\x19\xf9\xc7-\xedg\x04\xa0\x9d\
-\xd3\xc7\xbb&\x9ci[\xe2\xfel\xc4\x91\x93\xee\xf6\xac\
-3\x9aP~l\xcc\xaa\xa0W\x19\xf1\xed\xb8s*\x1e\
-G\x9c[\xac\xb3}\x08\xf1\xf9\xca\xcf\xf3\xfd\x88\xaf\xf1\
-t\x13m\x81]%[\xe2\x87\x5c\x5c&<\xa4,\xd6\
-\x82)\x0b>\xb3pC4\x0d|\x12\xac:u\xd6\xca\
-}\xaaqlR,\x866\x94J\xe9i\xcb:5J\
-\xa8\x09\x8a\xec\x0c`\xee\xf2?\xe8,\x8b\xd9\x11\xb3\xb4\
-\x0d\xc5\xfa\xd8\x80\xcf\x12<\xf7\xec\x93x\xd8xZ\x1d\
-^\xda\xf0\xcb\x8e\xa2\x1e\x1b\xfbY$\xaf\x0b\x99\x1a\x9c\
-\xd4\x224s\x9b/\xdf\x14\xef;,\xe9\x97\x1d\x1a^\
-\x80\x8a\xd5\xba\x1f\xc1\xafuQ9=\xfd\x0b\xfc2S\
-\xa1\x91E!\xf9\xf5\x09!\xeb\xe2\x11\xf1\xd9C\xb6\xa7\
-\xb0\xd5\xb0\x12\xd3\x05\x85(\x0dF\x16\xfe\xacE\xb1\x96\
-\xfbxW\x12\xa7\x84\xeb9\xcb\xeeI\xdb\xf0f\xaf\xae\
-\xec^\x0f\x7fC\xb7K](\xba\xab\xe9\xd9c\xef\xb1\
-/2\xc3\xe3b\xfd(5\xca\xe4\x91\x9f2\xb5:\xaf\
-\xfd\xf9^\xc1\xfc\xb6\x81\x05\xfdw\xf9)\x12\x13\xf1\x89\
-\xea\xa06\x8f'G\xb5S\x1ej{\x83,\x8a(=\
-\xda\xdb\xf85\x0b\x93\x22\xc2T\x9d\xd4\xce\xc3\x1b\xd5\x18\
-\x0f\xce\x88\x8fh.\xbc*\xb9\x86\x7fox\x00m\x88\
-QU\xad\x1e\xda%\xb2\xc8O\xf4\x99\xc8b\x8cEK\
-{\xfb\x84\xf4/\x7f\xd5f\xff\x13\xd2\x7f\xb5/\xbfD\
-\xfeol\xfa\xf0\xf5%\xea\x09n\x1f\x18\xa8\xba\x18\xf6\
-\x8b\xb1\x97\x08~\xb1\x7f\x1c-\x19\xdd\x06\xeb\xb3nN\
-\xce\xbb\xfc\x0fV.\xb3A\xd9\xf1\xe4Z\x97\x7f\xaa\xaf\
-[?\x0d\x8b3Z\x84\x17\xc25-A\xd9\x19\xda\xa3\
-\xdf\x18\xbd\x06\xab\x9c2\x8a\xc9\x08;\x9b\xc5\xf9Q\xae\
-2\xb5\xef\x8fv\xb2Db^\xa3\x83C\xbc\x15\xde\xea\
-nO\xdd\x7f1Q\xe9\xe5\x86\xc0\xfb\xe5=\x9f a\
-\x9b\x8e\x8f\x11\x816\x12QX9ym\xfa\xd5\xc9\xa4\
-\x14\xf1e\x22\xb2\xf9\x96\xb9\x91\x1a\xa1L\xd8\xdcH\x9b\
-\x9bE\xba\xb9\x95\xb4\xb5K\xc2!\x91\xdcT\xcd\xd9k\
-C}\x9d\xcb\xd5\xedv\xd3\xc1b\x85l\xb9\x97\xbb\x1e\
-d\xe9@D<X\xaa\xd5b\x89\x0b\xea\xf9>p\xa5\
-\xb3u\xe0h\x0c\xdd.WZ~\x1d\xf7\xe7\xf3\xa8x\
-\xc9\x03\xc7e\x158\xd9\x83}\x8c\x0b\xee\x05\xc1\xafB\
-\xf3}\xe8\xd5\xa2I_\x04\xbbX\xec$>\xb5'\x1c\
-\xe0\xf6,\x9f\xb2\xd5\x12\xb3\xc5\xc0\xb5\xc0\x1d\xf0#\x04\
-X7\xd2\xfa\xb2!\xe2.z\xa3\xdc\xa5S\x9d\xb6q\
-B\x83\xbf\xfd\x0b\xcej\xa7=F\xc4.![\xb0\x0f\
-\xe3\xbe`\x0b\xac6?\x00\xfc\xf5\xf3\x02\x7fx\x91\xc0\
-\xdc=\xc5\xbf\xad\xe3\xf5\x7f94?\x04\xfd\xc5\x82\xf3\
-\xac\xcb\xafn\x9b\xaa\xf0@\xae\xe4\xef\x06\xe0\x98\x8f!\
-\xcd\xe6\xf4\x8e\x81\x85[\xc5d\x13\xaa\xabv\xe6=\xb7\
-\xaa\xad+\xca\x8e\x0c\x95\xaf6\xdd\x16w!\x09\xeco\
-\xd5\x0c\xa4\x92\xcd\xf33A\xddqO\x9d\x0b\xea5~\
-K$\xbe\x9f\xf7\x83\x97\xa0.\xf5u\xc4\x97=,\xe5\
-\x17\x97}Q)\xdes\x97\xf7\x1czA?\xa9\xdd\x5c\
-\xa9\x1d(\xf4O\xe7\xe0\x90\xf7\xd4\xf6\xa5S\x05\xfc\xcc\
-\x8f3<{\xfa\xea\xb6\xb4\x0bww\xc1\xeeM'j\
-\xeb\x94\xaa%Ly\xa82\xaa.q\x14*Q\x9f\x1b\
-\xd4\xaa\x89\xd5\xaa_\xccEv\xed\xd3\xfeg\xaf\xf5\x1f\
-\xcb\xb9\xe2\xde\xb5/\xedX\xec\xa3%u\x17\xcb_\x11\
-\xe1mc\xfe'$\xdc\xa3\xb8\x877\x8f\xad\x94\xe1\xcd\
-\xff\xd6\x22A\xbc\xcf\xbe@jXR\xbe\xfd\x1f-\x8f\
-\xc3\x17\xf3GN<\x87BJ\xedPX\xa9\x15\xa1U\
-\x18 E\xde\x0en\xa9\xf5\xae\x97\xed`\xc8\xa9\xad\xc3\
-\xbe\xba!\xef\x95\xdd\xbf\xe5\xae\xa0S\x16\xbc; \xb0\
-N\x85Cj\x0el\xc5+,\xdf\x98\x11\xd4v\xa9y\
-<O\xa8\xc4\xe9\x09\xab\xfb\x07\x04\xfa\x8f\x0d4\xbc1\
-\x80\xa2\xa1\x1dG\xcb\xda\xeb\xf7C\xe3\xa1\xf1\x1f\x04$\
-=\xda\
-\x00\x00\x18\xaf\
-\x89\
-PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x01_\x00\x00\x01)\x08\x02\x00\x00\x00\xbb\xac\xb6\x0a\
-\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\
-\x09pHYs\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7o\
-\xa8d\x00\x00\x18DIDATx^\xed\x9d\xffk\
-\x14\xd7\xfa\xc7\xef\x7fT\xb8\x5c\x8a\x88\xc8m)Wi\
-S\x09%\x10h\xa9\xd4\x22\xc1\x82\x12\xb0\xa2\x1fR\xa4\
-\x85\x16,---T\x0a\xf9A\xa1\x22\x96\xa2PA\
-\xc1R\x11\x94\x16\xb1\xb9\xc1\xa61,!JZcX\
-B\x1aC\x88\x12\x97\xdc\xe0\xe7=\xf3\xec\x9eLf\x9f\
-]\x93\xcd\x99|\xf3\xf5\xf0b\x98\xcc\x9eo\x1b\xe6y\
-\xed9\xb3\xbb\xb3\xff\xf8w\xff\x1b\x00\x00\xf5`\x07\x00\
-\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\x00\x80\x0fv\x00\
-\x00\x1f\xec\x00\x00>\xd8\x01\x00|\xb0\x03\x00\xf8`\x07\
-\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\x00\x80\x0fv\
-\x00\x00\x1f\xec\x00\x00>\xd8\x01\x00|\xb0\x03\x00\xf8`\
-\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\x00\x80\x0f\
-v\x00\x00\x1f\xec\x00\x00>\xd8\x01\x00|\xb0\x03\x00\xf8\
-`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\x00\x80\
-\x0fv\x00\x00\x1f\xec\x00\x00>\xd8\x01\x00|\xb0\x03\x00\
-\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\x00\
-\x80\x0fv\x00\x00\x1f\xec\x00\x00>\xd8\x01\x00|\xb0\x03\
-\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\
-\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00>\xd8\x01\x00|\xb0\
-\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07\
-;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00>\xd8\x01\x00|\
-\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\
-\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00>\xd8\x01\x00\
-|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\
-\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00>\xd8\x01\
-\x00|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\
-\x00\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00>\xd8\
-\x01\x00|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\
-\x1d\x00\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00>\
-\xd8\x01\x00|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\
-\x83\x1d\x00\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00\
->\xd8a}i\xaf;\x02\xab\x81\xffgL\xb0\xc3:\
-\xc2\xa9\x1c\x1d\xfe\xa51\xc1\x0e\xebE\xf5<\xde\xd9\xb7\
-g{_\x1b\xac\x92\x1d}m\xb5\x7f)\x82\x88\x06v\
-X/\xda_\xee\x7fcG\xdf\x9e\xd7n\xbf\xb5o\xa8\
-{\xef\xd0Ah\x19\xfd\x03;\x07\xbb^\xee\xef@\x0d\
-q\xc1\x0e\xeb\x82\xa9\xa1\xad}\xe0\x9d\xdfg\xef<%\
-V\x1dw\x1f\x8fv\xfc\xf1\xael\xab\x7fl\xdd\x7f\x1b\
-Z\x04;\xac=\x8b\xb3\x86[3\xfd:\xb3\xe7\x9f\xce\
-/<]\x80\xd6\xa8,\xcc\xeb\x7f88[zc\x00\
-;D\x06;\xac1\x89\x1av\xf6\xed\xd9u\xbb\xf3\xc6\
-\xf4\xcdD\x0d\x0b\xff\xd3Vg\xb9\xb6D\x0ba\xff\xc0\
-\xa1\xd9a\xec\x10\x1d\xec\xb0fhI\x9c\xaa\xa1\xbf\xfd\
-\x95\xfe\x8e\x9f\xa7\xae\xdb\x99\x1d^\x03\xd3S\x9dXq\
-`\x87\xe2\xc0\x0ekFU\x0d\xda^\x9e\xbcj\xa7\xb5\
-I\x015\xac&\xb0Cq`\x87\xb5!\x91\x82M\x1f\
-.N^\xb1s:\xa8\x01;\xac&\xb0Cq`\x87\
-5\xa0\xfa6\xdb\xce\xbe=\xdf\x97\x7f\xd4\xa9\x1c\x8c\x80\
-\x1aV\x1f\xd8\xa18\xb0C\xd1T\xd5\xb0\xbd\xaf\xedl\
-\xf9\x82\xcec\xbc\x107\xb0Cq`\x87BI\xd4\xa0\
-\xf3u[\xdf\xab\xa7\xc6\xcf\xe9$\x0eR@\x0d\xb1\x02\
-;\x14\x07v(\x8eE5\x9c\x1c;\xad3\x185\x14\
-\x11\xd8\xa18\xb0CA\x045\xec\xfe\xea~\xaf\x9d\xc7\
-A\x0d\xd8!b`\x87\xe2\xc0\x0eE\xf1r\x7f\xc7\x8b\
-}\xbb\xbf\xf8\xeb[;\x89QCA\x81\x1d\x8a\x03;\
-\x14A\xbb\xd4\xf0\xaf[\xff91\xfau\x90\x82mQ\
-C\xf4\xc0\x0e\xc5\x81\x1d\xe2\xa2\x05EU\x0d\x1f\x8f~\
-YY\xa8\xe8\xc4\xcd\x0a\x82\x88\x1e\xd8\xa18\xb0CD\
-\xecZC\xa2\x86\x0f\xee}\xfaxaNgm\xa1j\
-P\xb3\xa1\xfd\x1c\xf35r\xc7\x85\x95O\x1b\xd8\x0a\x81\
-\x1d\x8a\x03;\xc4\xa2z\x19\xf2\xc5\xbe\xdd\xc7F>\x99\
-\x9d\x7f\x94\x9c\xb8\x85\xa5bHr\xa1\xf4\xb0\x0cYN\
-$\xe5\x95P\x19M\xd8\xce\xe6\x0d\xecP\x1c\xd8!\x0a\
-\x89\x1a\xc4\xf6\xbe\xb6\xee\xe1\xe3\xd3\xf33\xe1\xacU\xc4\
-M\xbf\x90\xd5\x89\x14\xe4\x9fZh\x15\xf3wejl\
-n\xfc\xee\xe3\xd1\xe1\xc7#\xca\x96\xc1\xd9\x92\xb6\xda\xd7\
-\x11\x1d\xd7\xa3s\x0bO\xaa\xa5\xd3\xe1\x89\xd0\x9a\x1d\xdc\
-\x8c\x81\x1d\x8a\x03;DcG_[\xe7`\x97\x920\
-9ekY\x171\xf1Bk\xda\x06\xf5LT&\x7f\
-\x9d\xfe\xedl\xf9\xc2\xc7\xa3_\x1e(\x1d\xed\x18\xdc\xaf\
-\xa5\x8d$\xa5\xd5\xcd?o\xbd\xa2\xed\xf6\xbeW\x950\
-\xca\x9c\xae\xd2\x91\x0f\xef}\xfe]\xf9\x87\x1b\xd37%\
-\x0b\xab\x9e\x15\x84\xed,3\xb2\xb5\x9a\x10J\x16\x17\xd8\
-\xa18\xb0C4\x94\x93\x87\x86{\xc2\xf9\x1a7+B\
-kaGS\x83\xaf\xee\xf7*\xe7w\xf6\xedy\xe1\xd6\
-KZ\xd1h\x00\xda\xd7H$\x88Wjh_Gv\
-\xf6\xb7\xebQ\x95\x912\xb4\xb3o\xa8\xfb\xb3?\xbf\xb1\
-{\xcf(B\x1a\x1bv\xf0\x99\xb1\x9c\x92\xcbo\xad\xe5\
-\xc0\x0e\xc5\x81\x1d\xa2\xa1\xac;8\xfc\x7f:SW\x94\
-c\xcb\x09k-4;\xfe\xa4\xac\x99\xc2\xeb\x03ok\
-j\xb0-\x9d\x1a\xec\xba\xdd\x99\x8a \xb9\xf0\x91\x1b\x95\
-a\x0f\x995lr!M\xa8\xd6\xb1\x91O\xb4\xf4\xc8\
-6n\xfb\xb6\xd3$\xac\x8c\xb6\xe5\xca\x84f\x22\x1aR\
-\x16[\xc8\x842i\x8d\xa2\x02;\x14\x07v\x88F\xb0\
-\x83\x9d\xaf\xb1\x22\x97c?M]W\x1aH\x0a\xca\x84\
-05\x08\x17>\x96A\xf5\xea\xa9\xeaj\xa2\xa1v^\
-\xbb\xfd\x96}sT\x11zyfJ[\x01=SM\
-C\xd4\x82T\x15h\x1fxG\x8d\xcb_\xd9wm\x8a\
-\x0b\xecP\x1c\xd8!\x1aE\xd8\xc1R+$\xd8\xd9\xf2\
-\x05\xf5b9PK\x83\xe5{!\x8f5\xa2E\x87\x1c\
-\xa1E\x8a\x0d;\xd7c\xa3\xb0\x02\xaa\x12T\x15\xd0\x90\
-41\xd1\xac\x04;lv\xb0C4\x8a\xb3\x835(\
-5(\x0f\x95\xcc\xb5\x1e\xeb\xbdP=bi\x1f\xc8=\
-\x9aa\xb1\xbc\x16)\xd9\x0f}/\xdf\x0e\x9d\x83]v\
-\xb1#\xa0\x89\xc3\x8b}\xbb{\xee\x9e\xc0\x0e\x9b\x1d\xec\
-\x10\x8d\xe8v\xa8f`\xfa\xb6\xe5\xb5\x87\xbf(\x99k\
-j\xf0\xf3<uA\xf5\x1a\xe4\x8e\xdao\xc0\x84\xeb\x94\
-\xb5\xb4q\xeb&\xb7\xae\x92zrw\xa0\xd0\xb6Q\x04\
-;t\x0c\xeeO\xe7\x0b\x8b\x0db\x87-\x03v\x88F\
-\x5c;\x84\xf4\xd3vln\x5c/\xd1j?M\xfel\
-z'\x89m\xfb\xe1]\x09\x95\xe9\xf8\xe3\xdd\xfd\xa5\xc3\
-\xdd\xc3\xc7\xb5U\xf6Z\xbano6\xef\xb0?\xdbw\
-\xdd\xee\x0c\x17)\xc3\xd6\x0d\xec\xf0<\x80\x1d\xa2Q\xc4\
-\xdc\xc1R\xeb\xab\xfb\xbd\x9a\xf9+\xeb\x96f\xb5\xf6\x93\
-?\xcd\x0b\xaf\x0f\xbc}b\xf4\xeb_\xa7\x7f\x1b\x7fR\
-\x9e\xa8LN\xcf\xcf\xcc\xce?\xd2V\xfb:\xd2?3\
-\xa0\x85C\xfb\xc0^\x9bM\xa4)\x94\x17\x84\x0e\xaa\x1d\
-9%t\xdd$\xb1\xed!\xec\xb0\xb5\xc1\x0e\xd1\x88h\
-\x07\xcbL\xfbH\xd5\xe0l\xc9\xbcP\x97\xd2U5h\
-+}\xd8g\xb7\x9b\x87\xd2\xb5\xf7\xc1\x19M.jY\
-\x94\x13D\xd2\x9a\xfa\xd2*F\x85\x9b?\x0b\xec\xf0<\
-\x80\x1d\xa2\x11\xdd\x0e\xb6\xd3`\xe2\x90\xa0d\xd6\x94\xc1\
-~5\xc7\xc2*\xbaTK<}\xaayD\x9a\xd2\xf5\
-\xeb\x94\xe4\xf2\x84\x12\xfb\xd8\xc8'*\xa6g\x91\xab\x98\
-\x0d;\x8e\x1d\xb66\xd8!\x1aE\xd8\xa1\x5c\x99x\xed\
-\xf6[\xf5^HI.R\x86\xd7y\xabb\xb5lk\
-;\xe1\x88a\xd78%\x88]\xb7;\xebf\x10\xc9\xf4\
-D\x07e\x1c\x15P\xb1&O\xc4\x9a\xc5\x0e[\x1b\xec\
-\x10\x8d\x22\xecpe\xea\x9a2mi\x0e'\xfb:\xb2\
-\xadv\xbbJ\xeb.Ti\x14\xf6\xa8\xb6V\xfe\xbb\xf2\
-\x0f\xb6*\xc9\xa1\xdc\xd6T\xc5\xee\x91\x9b\xfd\x81O\xab\
-\x9b%)\xb0<;4\xc1\x0ah\xdbr`\x87\xe2\xc0\
-\x0e\xd1\x88k\x07\xdby\x7f\xe4\xa3\x5c\xee\x19J\xec\xf6\
-\x81w\xec\x1b_\xd9Lk\x1eV\xc6\xb6\x95\x85\xca\xde\
-\xa1\x83R\xccR\xf5\xc8;In\x87o\x9a\x86\x96\x1b\
-\xb5\xdf\xc4\x0ev\xf3\x9b\xe6\xd1\xa8\xd9\xe5\x07v(\x0e\
-\xec\x10\x8d\xe8v\x98\x9d\x7f\xa4\xf9\x7f\xdd+|r\xe1\
-P/\xef\xbd\x0f\xce\x84\xc2\xcb\xcf1+i\xeb\x0b\xb5\
-\x90~\x1abI\xfb&\x0b-g\x94oI\xc9\xf4\xb9\
-X-m\xe7\x16\x9ehF`h_#\xec\xf8\xe3\xdd\
-\xdc\xa7\xa1\xc2\xc5\x8b\x87\xf3\xd3\x12D(\x9fC\x0f\x85\
-f\xb5m9\xb0Cq`\x87hD\xb7\xc3\xaf\xd3\xbf\
-\xa5\xa9\x9b\x9f\xff+\x01\xa4\x8c\xc1\xd9\x92\x954\xd2z\
-\xcb\x8aP~ln\x5c\x16\xc8\xe5\xb6\x90}\xfey\xeb\
-\x15-jTF\xcf%\x94\x97\x0b\xbaJG:\x07\xbb\
-\xde\xbc\xf3^\xa0\xfe\xd2\xa6\xd0\xf0\xe4\xb5l\xb1,\x9a\
-\xb3(\x93\xbf\xf8\xeb[9\xc2\xc6\xa3m\xcb\x81\x1d\x8a\
-\x03;D#\x96\x1dB6\x9e\x1c;\x9dN\xdas\xaf\
-\xed\x1d\xdb\xfb^=4\xdc\xa3Wf+\x9cVZA\
-X\x15\xdb\x1e(\x1d\xdd\xd1\xd7\x96m_\xdd\xd9\xdc\xe4\
-\xab\xfb\xbd\xa1\xa4\xed\xc8\x0e\xb2\x89}\x9a[N1j\
-\xc3\xcb\x0e\xb2z$\x94\xc9\xa1G\xd5~\xac\xcb\x96\xd8\
-\xa18\xb0C4\x22\xce\x1d\xac\x05-\xfe\xd5\xe6\xd2^\
-\x92\xd4\xd5\x0b\xbb}'\xc2\xf2\xb6\x85\xec\x0a\xb5R\x01\
-\xe5\xbaH\xe6&\xeaW\xbd\xdbg(Ba\xfd\xf9\xfa\
-\xc0\xdb^\x06\xe6\xe7\x0e\xde\x91E\xf4\x14\xa4\x98\xdc\xad\
-7[\x0e\xecP\x1c\xd8!\x1aq\xe7\x0eB\x93\xf0:\
-;T\xa7\xfd\xe7'.\xa9\xa4\xbd\xa7`\xb5V\x14\xd6\
-\xbev\xae=\xfc\xa5\xd6\xc5b>+\xc14;P\xb2\
-\x95+\x13\xd9\xc25;\xe4\x87\xb4R\xec\xc2\x04v\xd8\
-\xf8`\x87hD\xb4\x83\xb6cs\xe3\xed\x03\xef\xe4R\
-1=\xf5\x93%\xbd\xdd\xd6\xa9\xe5\x8eB\xc2\x8f?)\
-\xa7\x8b\x97\xc5.\x0cK\xe0\xbb\x8fG\xb3\x85\xb1\xc3\xf3\
-\x06v\x88F,;\xd8\x07\xa8\xfbg\x06\xb4\xc8\xcf\xa5\
-\xaeN}%\xa7\xe6\x14\x96\xb7vC\xfa\xb4\xd2\x8a#\
-$\xbc\x1cT\xff\xb6\x88\x12\xf8_\xb7\xfec\x0e\xca\xda\
-\xc1\x0a\xeb\xd1\x80\x95_Z\xbdz$[,\x8b\xec\xb6\
-\xbd\xef\xd5\x0f\xef}\x8e\x1d68\xd8!\x1a\xd1\xec\x90\
-V\xbf<yU\x8b\x88\x5c\xde*\xb5\xb4b\xdf_:\
-<Q\x99T\x99\xd5\xe4\x95\xd5U~\xaa\xb5\xfa\xa4\xd2\
-\x9fzy\xbf8y\xc5J\x06;(\xb1e\x0d\x8d!\
-PSCv\x9c\xc9\xfe\xce\xf4\xc6S.\x12\xdc\x0b\xb7\
-^\x0a\xf7\xf5\xc7\x0e\x1b\x16\xec\x10\x8dxs\x87\xe4\xc3\
-\x08\xb5\xcf2\xe6\xed\xa0\xa4\xed\x1e>\xbe\xfaW]\xab\
-[Y\xa8(K5\xf2z;(\x8d\xb3\x1f\xa9\xd0V\
-\x9d\xbe?\xf2QW\xe9\xc8\x81\xd2\xd1\x80\x14\x96\x1b\xa4\
-\x90\x1a\xda\x07\xf6f\x8be\xd1\x7fi\xdfP\xb7\x1a\xb7\
-;\xe8c\x87\x0d\x0bv\x88F\x14;(U\xac\xfa\xc9\
-\xb1\xd3j0\xd7\x85RQ/\xdd\x9a\x93[\xc9\xd5\xe4\
-\x95\xd5\xd5\xf6\x8b\xbf\xbe\x95\x08\xe4\x9dlG\xca1M\
-\xfe\xf5P(f\xdb\xbf+S\x9a\xb6hkh_9\
-ioR\x064H)L\x83,W&r\xe5\x03:\
-8=?\x93m\xbc\xe5\xc0\x0e\xc5\x81\x1d\xa2\x11k\xee\
-PYH\xe6\x0e\x9f\xfd\xf9\xcd\xb6\xea7,\x02\xd5\xb7\
-3O\x8c~m\xc5V\x93W\xa1\xee\xa9\xf1sJf\
-\xcf\x0em\xca\xf0\x90\xc0\x8d\xfa\xea\x1c\xecRNf\xeb\
-\x9a\xc2l\x90\xcf\x8c\xd5<\x05\x0b\xecP\x1c\xd8!\x1a\
-\xb1\xe6\x0e\xf6\xf5\x84\x0f\xee}\xaa\x1c\xcb%\xad\xd9\xc1\
->\xec\xb0\x9co14\x89\x90\x96g\xcb\x17\xea;2\
-;h\x1da\xcf\xc5\x0ak\x9bC\x86r\xbfgav\
-\xb0\xcfJ\xab\x85l\x95\x1c\xa1\xf1\x96\x03;\x14\x07v\
-\x88F<;$s\x87c#\x9f\xd4\x92vqUo\
-v\xf8\xea~\xaf\x0a\x84\xef)\xb4\x16!9\xbf/\xff\
-\xa8\x8e\xd4r\xe8\xc5P\xa6\xe9\xe9d\xed\x90\x0d;\xa2\
-G\x9b\xd8\xa1Q\xdd\xb8\x81\x1d\x8a\x03;D#\x96\x1d\
-\xec\xaa\xa4^\xb7\xbd\x97\xf4$\xf1\xec\x8b\xdb\xb1\xecp\
-q\xf2J#;\x1c(\x1d\xb5\x19J}Gv\x04;\
-lm\xb0C4\xa2\xd9!\xad\xde\xc0\x0e\xc9\x1b\x8d\xf6\
-V\xc2\xeaW\x16\x96\xb7\x97'\xaf6\xb2\xc3\xfe\xd2a\
-\xec\xf0<\x83\x1d\xa2\x11\xd7\x0e\xdd\xc3\xc7];l\xeb\
-{\xd5n\xcdb\x0b\x90\x96C\x1dY\xde\xfe4u]\
-\xab\x15\xd7\x0e\xfb\x86\xba\xb1\xc3\xf3\x0cv\x88\xc6\xda\xcc\
-\x1d\xd6\xd2\x0e\xcc\x1d\x9es\xb0C4\xd6\xcc\x0e\xb5\x95\
-E\x1c;\x5c\x99\xba\xd6\xc8\x0e\xe9u\x87\xa4\x97\xfa\x0c\
-\xb7#\xd8ak\x83\x1d\xa2\x11\xd7\x0e\xee{\x16\xfa3\
-{\xdda5\x89\xa7\xbaV\xbd\xf1u\x87\xb6C\xc3=\
-\x8d2\xdc\x8e\xe8Q\xec\xb0\x85\xc1\x0e\xd1\x88e\x07\x9b\
-\xcc\xf7\xdc=Q?wP\xe2e\xdf\xd1Lk\xb4\x18\
-\xea\xc8\xf2\xf6\xfc\xc4\xa5Fv\xe8\x1e>no\xa0\xd4\
-g\xb8\x1d\xc1\x0e[\x1b\xec\x10\x8d(vPX\xda\x7f\
-<\xfae\xfa\x11\xc6%]\x98\x1d>\xfb\xf3\x1b+\xb6\
-\x9a\xc4\x0bu\xbf+\xff\xd0\xe8\xb3\x92\x9a\xbf4\xcap\
-\xec\xf0<\x80\x1d\xa2\x11we\xa1\x09B\xfa\xf5\x87l\
-\x17\xd5ORK\x1c*\xa0b\xabI\xbcP\xf7\xe4\xd8\
-\xe9FvP\x86[\xb1\xfa\x8e\xec\x88\xc6\x80\x1d\xb60\
-\xd8!\x1a\xb1\xe6\x0e\xe1\x86\xd1\xb9\xac\x13\xcaa%\x9e\
-^\xd2\x95r\x86Ui!Bz+\x8d\xeb4\xb4\xe4\
-\xf2g(\x9c\x8dP\x1d;la\xb0C4\xa2\xd9!\
-\xad~~\xe2R\xda\xac\xf3\x0d\xeeC\xc3=\xe1\xc7&\
-\xd2\x1a\xad\x84\xd5\xd5\xf2\xe4\xfd\x91\x8f4r\xcf\x0e\xbb\
-\xbf/\xff\x98-\x9c\x0d\xec\xf0<\x80\x1d\xa2\x11\xd7\x0e\
-7\xa6o&?f\xb14\xf1t\xea\xab\x97\xbdC\x07\
-\xc7\xe6\xc6\x93\x92\xabH<K\xda\xd9\xf9Gj\xcd\x9d\
-\xa4HCv\xd3z\x95\xc4\x0e\xcf'\xd8!\x1a\xb1\xec\
-`\xe9\xa4\xd3\xddn\x00\x9d\xedB\xa7\xfe\xce\xf4\x97u\
-\x7f\x9f\xbd\xa32\xea\xa8\xe5\xdc\xb3\x8a\x9a\x83\xa4W\x1c\
-r\xb7o\xa9\xde9.\xfb\x93\x19i\xa5\xc5\xb0#\xd8\
-ak\x83\x1d\xa2\x11\xd7\x0e\xca\xdb\x8e?\xdeU\x9bi\
-\xe3\xf9\x8f<\x84\x9f\xa2Ik\xac8B\xc2+\xa9\xea\
-\xbb0\x94\xe46Cq\xd3\xdb\x0eb\x87\xad\x0dv\x88\
-FD;\xd8\x92a\xdfP\xf7\xf6\xe4\xc6\x8d\xd9^\xaa\
-o[\xd8\xf5B\x954\xd2z+\x88P\xeb\xfc\xc4\xa5\
-\xfa{L+\xc1\x94f\xea\xfd\xef\xcc\xeft\xa6\xf5\x16\
-\xc3\x8e`\x87\xad\x0dv\x88F,;(,\xa3>\x1e\
-\xfd\xd2K\xdd\xe4\xc6\xb3\xdd\x99_\xc1Mk\xac8\xac\
-b\xcf\xdd\x13\x8d\xba\xc8\xde3\xba\xbe\x17;\xa2g\xda\
-\xe8\xdeP\x1a\xbc}p\xa3\xe5\x11.3\xb0Cq`\
-\x87hD\x9c;XF]\x9c\xbc\x92N\xf8\xf3s~\
-\xa1\x1cX\xfd\xefh\xa6w\xa0\xdf\x9b\xcb\xed0=\xb1\
-7,\x1a5n\x075\xc7\xa9\xbf\xa8\xa9\xeaZ\xfbH\
-.\xd8a\xb3\x83\x1d\xa2\x11}\xee\xa0e\xbf\x9a\xad\xff\
-\xb1\x09\xcb\xde\x93c\xa7\xad\x98\xb6\xcb\xcf@+i+\
-\x97\xcb\x93W\x95Ku\xedWW\x16\xfd3\x03I\xc9\
-\x06\xcf%tm7\xbc_Z=\xb1\xc3\xb1H7\xa4\
-\x7ff`\x87\xe2\xc0\x0e\xd1\x88n\x07\xb5\xa3W\xe6\xdc\
-\x9b\x9a5\x92\x1f\xd1\x0f\xd7\x05l\xdb<\x0fC\x81\xb0\
-sh\xb8\xa7\xfe\xe3\x98\xfaSOd\xdfP\xf7\xf8\x93\
-r\xb6p.BSz\xca\xf5vP\xb3\xd9\xdf\x01v\
-[\x88\x15\xd8\xa18\xb0C4\xa2\xdbAqj\xfc\x5c\
--\x81\xb3\xaf\xf0\xc9\xbe\xba\xb3\x8fT+B\xf9Fy\
-\x18RT[\x1b\x9e\x16\x0e\xa9w\xac\xd9\xd0xub\
-b_\xf4\xb2ZV1\x17\xa1\xb5\xf7G>\xca]\xb9\
-\xd0h\x95\xa5o\xdey/\xfb\x96\x87\xdbH\x94\xc0\x0e\
-\xc5\x81\x1d\xa2\x11\xd7\x0e\x96Nw\x1f\x8f\xaaY\xbd\x1a\
-\xe7\xfaJiW2|W\xfe\xc1\xaaT\x16\xe6\xc3\x0f\
-\xe7eS1\x1c\x11\x1a\x98\xfd\xf9\xeb\xf4o\x9az\xc8\
-\x0eK\xbd\x93L\x1c\xb4\xd0\xd0C\xcf\xfc\x9d\xce\xd0\xc5\
-\x17\x7f}\x9b\x8e\xd0Z\xa8\xa2\x01\xeb\xa0]\x19\xa9,\
-T\xd4\xce\x22O5\xce\xf9d\xb4\xb5\xc1\x84\xa6Z\x0b\
-\xb5\xa3-v(\x02\xec\x10\x8d\x88vPX\xce(\xb5\
-z\xee\x9eH\x7f\xd8\x22\xf7\x99\xa5d\xdf.\x19\xf4>\
-8c\xef_(\xd4u}6\xa6\xe2\xa8\xde*FG\
-.N^Q\x22\xd5RzI\x9b\xe9\xa2`\xb7\xa6\x03\
-\xea=`\x15s\x11\x8e\x9f-_\xd8\xee,O\x92K\
-\x0f'\xd2\x9b\xd6[\xb1F\xd1\xa8\xfd\xe5\x87\x9e\x91\xb6\
-\xd8\xa1\x08\xb0C4\x22\xda!\x9b\x997\xa6o*\xfd\
-4\xe1\xcfu\x17\x12[yx\xa0t\xf4\xf2\xe4\xd5\xd1\
-\xb9\xfbV\xdd\x8d\x89\xca\xa4\x9a\xfa\xf0\xde\xe7Z\xaa\xd4\
-\xcd\x1a\xaa\xfb:\xae\x8e4\xb3Py{\x16\x8d\xb27\
-;<\x0d\xc0\x13Mr\x87\x08u\xa7\x81i&\xd2?\
-3\xa0fU\xf8\xe7\xa9\xebW\xa6\xae\x9d\x9f\xb8\xa4#\
-vq\xb4Q\x17\xcb\x0c\xecP\x1c\xd8!\x1aq\xe7\x0e\
-\x0aK\x1b\xbd\xfc\xda}\xa2RAd3P$\x7f\xea\
-\xb8\x12^\xbdk\xa9\xff\xc1\xbdO5\x95\xf8\xbe\xfc\xa3\
-rR\xa9hyxj\xfc\x9c^\xc6\xf7\x97\x0e\xeb%\
-]\xedh[\x97\xccU\xd4\x88\xf2Y\x9d6W\x83\x22\
-\xd8AJr\x9b2A\xa8;\x8dMK\x15\xb1\xebv\
-g\xed)\xb4\xbfp\xeb%\xcd\x89\xf8\x1d\xcd\x0d\x0ev\
-\x88F\x5c;X\xceXS\xbf\xcf\xdeQv\xd5N\xfd\
-zA$3y=\xa4\x01X6\xda\x14@\xd9(\xf4\
-h8\xae\xf2i~:\x8d\xa8\xba^\xea\x95`\xe1\xad\
-\x8a\xb0m\x14\xf6\xe8\xec\xfc#=kuQ\x97\x96I\
-\x17\xeaNc\xd3\x0aHCJ\xd7A\xd5\x83*/;\
-\xf0\x1b\xdc\x1b\x1c\xec\x10\x8d\xb8vP(m\x84\xb5\xa6\
-\xe9@\xfa\xd6@\x92\xc6u\xb9]=\xa2\x87j\xf3\x82\
-\xe4\x92DH\xc8\xda\xf1\xe0\x85\x5c\xf5D.i^u\
-\xd8g\x1c,]\x9b'\xad\x8d\xcd\xca|W\xfeA\xf6\
-1\x13\xe5Z\xb6#\xe9\x00\x12\xec\xb8:\xd2Zi\xf5\
-\x1f\xf7\xb4\xc0\x0e\xc5\x81\x1d\xa2Q\x84\x1dlk;'\
-\xc7N\xdb\xeb\x7f\x9a\xe7\xb9<4\xdc\x83\x81\xfaG\x93\
-\xecU:\xd9+\xffOS\xd7Cw\xd6\xe33\xc3\x8a\
-\x8d\xcd\x8d\xb7\x0f\xbc\xa3\xcc\xac-\x1cr\xbd\xe4\xb1\x1e\
-\xbbJG&*\x93\xa1\x91\x96\x03;\x14\x07v\x88F\
-t;(,s\xd2tM\xa2\xf7\xc1\x19\xcd\x08\xd4Q\
-\x83\x05Bk\xb4w\x0ev\xdd\x98\xbeY\xeb\xa8\xdac\
-\xdaa\xb3\xb0\xc2V\xf2\xe2\xe4\x95m}\xbb\xd5ZM\
-\x10\xcd\x06\xa6\x04V\x1a\xef\x1d:X\xaeLX;i\
-{-\x06v(\x0e\xec\x10\x8d\x22\xec\xa0\xb0\xe4\x09y\
-\xf8\xf3\xd4\xf57\xef\xbc\xf7\xcf[\xaf\xa8\xc7\x06\x99P\
-\x9f\x99\xd9#K\x1e\xb5\x97\xf1\xb3\xe5\x0bj\xb9R\xbb\
-\x8d\xed\x8a\xd25TI\xdf\xdal\xd3\xecFm6O\
-Q\xcd}\xb4\xe4\xe9\x18\xdc\xdf\xe4\x1b\xe2\xcb\x0f\xecP\
-\x1c\xd8!\x1a\x05\xd9A\x112\xd0v\xf4\x92{j\xfc\
-\xdc\xeb\x03o+\x15\x95\x0f\xd9\x0b~\x96\x99\xf5d\xc6\
-\x99\xb7\x83\x1ay\x7f\xe4\xa3\xec\x05\xc2\xe5\xa7k\xae|\
-\xff\xcc\xc0\xb1\x91O\xb6'o\xa0$\xef\xa1\xecH\xd8\
-\x93\xa1M\x07\x0du*\xc7e\xaf\x80\xb6\x1c\xd8\xa18\
-\xb0C4\x0a\xb5C\xc8\xc3\xd0\xb8\x16\xed\x9a\xcfw\x0f\
-\x1f\xdfu\xbbS)a+\x0ee\x9d\xb0\xe4\xacaG\
-\x92D\xad\x0d5\x08\xa2*\x94\x17\xfbv\x9f\x9f\xb8\xa4\
-6\xd5\xf8Js5\x0c\xcc\xfe\xd4\x04dt\xee\xfe\xe5\
-\xc9\xab'F\xbf\xd6\xd8\xbaJGd\x01\xad\x5c\xf6\x0d\
-u\xcbA\x9f\xfd\xf9\x8d\xa6\x18\xd7\x1e\xfe\xa22\xd3\xf3\
-3\xf6\x5cV\xdac.\xb0Cq`\x87h(\x03\x0b\
-\xb2\x83E\xc8\xc3\x5c:\xfd]\x99\xba1}\xb3\xf7\xc1\
-\x99\x0f\xef}~\xa0tT\xebyKHC\xfb:\xd2\
-s\xf7\xc4\xa1\xe1\x9et\x9c\xa6\x86EA(\x9d\x94T\
-*\xd9\xf2\xd7\x22\x1a\x0d\xcc\xa2\xd1q\x8b&\x0f-3\
-\xb0Cq`\x87h\x14m\x07E\xc84\xdbi\x94Z\
-z\x01\xd7JA/\xce\xc2>q\xa4\xd0\xbe\x14\x90\x99\
-A\x04\xaa\xdf\xbc\xfa\xe2\xafo\xadd\x93\x96\x1b\x85\x95\
-\xb7\x8a\xcd\xabg\xcbX1\xdb\xb6\x1c\xf6\xdf\x1e\x9c-\
-a\x87\xe8`\x87h\xac\x81\x1d,BR\xe5P\xbf\xc2\
-\xf6\xad\xa4\x85\xfe\xb4\xef;h%\xa2A\xa6\x13\x870\
-w\xa8\x92&U{\xcbw\x94\xb1\xb0*\xa1zsB\
-\xf9\x96\xc3\xda\x09v\xe8\xf8\x03;D\x06;Dc\xcd\
-\xec\xe0F\xc87\x17{H\x03\xd3\x08\xd3OUi\xc0\
-YA$\xfb:n\xe3\x0f\xed\xd8\xfe\xc6\x8c0<\xfb\
-oke\xd1>\xb0w'v\x88\x0av\x88\xc6\xfa\xda\
-\xa1y\x84l\xff}\xf6N\x93\x17Xe\x97\xe6\x17*\
-fOa#\x0b\xc2\xc6\x16\xb6Z\x16mK\xdeL\xb5\
-\x8f\x81@\x1c\xb0C46\x85\x1d\xb4\xfd\xec\xcfo^\
-\xec\xdb\xed~\xaeQO\xa1s\xb0+\xfb\x01g\xdbn\
-\xb4\xc8\x8d\xad\xf7\xc1\x19\xa9\xa1\xf6,\xf2O\x0aZ\x06\
-;Dc\x83\xdbA[\xfb\xc6\xf4\xe8\xdc}\xfb\xe0\xb3\
-]k\xa8\x8d?\xd9\xd1\x11=\x8b\x93c\xa7\xd3\xc2\xf3\
-\xaa\xb5\x01\xed\x10\xd4`;\xa7\xc6\xcfIv\xd9g\x01\
-\xb1\xc0\x0e\xd1\xd8\xf8s\x07ac;[\xbe\xe0\xcd\xc3\
-\x93w7\xb5\xb8\xd0\x02>\xfc\xd6VZ{\x03\x85\x19\
-\xc1\x9e\x8bv\xec\x89\x84\xf1g\x9e\x0bD\x00;Dc\
-#\xdbA\x11\xf2J\xdb\xd9\xf9G]\xa5#\xe9][\
-\x96\xac/\x12;\xa47_\xd0\x5c]\xc5\xc2\xad\xe86\
-B\x04#\x84\x9d\xa5?\xd5\x83\x1a\xe2\x83\x1d\xa2\xb1\xc1\
-\xed\xa0\xb0\xa4\xb2\xe1\xfd4u\xdd\xbe\xef #\x98\x14\
-\xb4\xd6\xd0S\xd8_:\xfc\xf3\xd4\xf5\x87\xf3\xd3Qn\
-\xdc\x141rj\xb88yE\x03\xb6\xf9\x0ej(\x08\
-\xec\x10\x8d\x8do\x07\x85e\x97\x8d0\xfdND\x9b\xbc\
-\xa0\xad\x12L^\xb8\xf6\xf0\x97\xf0\xe9\xa9\x90\x87\x1b!\
-l$aH\x97'\xaf\xdaWKPC\xa1`\x87h\
-l\x16;\x84\xed\xdd\xc7\xa3\xf6\x1d\x8dC\xc3=\xf2\x82\
-\x1d\xb4GC\xb1pp\x1d#\x0c\xc3\xfe\xb1\x9a\xda\xc8\
-\x086\xebA\x0d\x85\x82\x1d\xa2\xb1)\xec\xa0\x08\x99\xaf\
-\xad\xdd\x812=\x9c\x1c\x09\xd8\x9fv|}#\x8c\xc7\
-\xfe\xab7\xa6o\xda\x82(\xfd\x9f\xa3\x86b\xc1\x0e\xd1\
-\xd8,vP\xe4\xf2?d\xa0\xed\xdb\xceF\x8800\
-\xbb\xe3\xfe\xad\x99~MvvV\xbf*\x82\x1a\x0a\x07\
-;Dcs\xd9\xa1\x9au\xb5\xaff\xd8\xc1\xf4\xc1\x8d\
-\x12aT\xf6\xff\xec\x9f\x19\xf0~\xa1\x07\x0a\x04;D\
-c\x13\xd9\xc1B\x89\xb71\xbd\xa0\xc8\xa9\xe1\xf7\xd9;\
-\xf6s\xe1\xb5\xb7`\xb1\xc3Z\x80\x1d\xa2\xb1\xe9\xec\xb0\
-\x91\xc3\xec`\xff\xc9\xda\xbd\x1b\xec\x17\x03Q\xc3\xda\x81\
-\x1d\xa2\x81\x1dbEV\x0d\xc3\x8fG:\x07\xbb\xf4\xbf\
-\xad-(P\xc3\xda\x81\x1d\xa2\x81\x1d\xa2DV\x0d\xa3\
-s\xf7\xf7\x0e\x1d\xcc\xa8a\xc9?\x1c\x8a\x06;D#\
-k\x07\x9d\xe2\xd02\xa6\x86\xf1'\xe5\xfd\xa5\xc3\xdb\xab\
-?\xe1\x8b\x1a\xd6\x01\xec\x10\x0d\xd9\xe1\xd0p\x8fNk\
-b\xf5Q\xaeL\x1c(\x1d\xcd|U\x0c;\xac\x03\xd8\
-!\x1a\xb2\x83N\xe8\xcaB\xe5\xef\xca\x94\xdd\xd3\x11V\
-\xca\xc3\xf9\xe9\xd9\xf9Gcs\xe3\xdd\xc3\xc7k_\x12\
-\xd3\xff\x165\xac\x0f\xd8!\x0av\xfaj\x0b\x11\xd8\x99\
-\xfe\xfe\xc5\xd2\xff-\xac\x03\xd8!\x22\x9c\xc7\xd1\xe1_\
-\xba\x9e`\x87\x88p*G\x84\x7f\xe6\xfa\x83\x1d\x00\xc0\
-\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00>\xd8\x01\x00\
-|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\
-\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00>\xd8\x01\
-\x00|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\
-\x00\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00>\xd8\
-\x01\x00|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\
-\x1d\x00\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00>\
-\xd8\x01\x00|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\xe0\
-\x83\x1d\x00\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\x00\
->\xd8\x01\x00|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\x00\
-\xe0\x83\x1d\x00\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\xec\x00\
-\x00>\xd8\x01\x00|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\x0e\
-\x00\xe0\x83\x1d\x00\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\xec\
-\x00\x00>\xd8\x01\x00|\xb0\x03\x00\xf8`\x07\x00\xf0\xc1\
-\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\x00\x80\x0fv\x00\x00\x1f\
-\xec\x00\x00>\xd8\x01\x00|\xb0\x03\x00\xf8`\x07\x00\xf0\
-\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\x00\x80\x0fv\x00\x00\
-\x1f\xec\x00\x00>\xd8\x01\x00|\xb0\x03\x00\xf8`\x07\x00\
-\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\x00\x80\x0fv\x00\
-\x00\x1f\xec\x00\x00>\xd8\x01\x00|\xb0\x03\x00\xf8`\x07\
-\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\x00\x80\x0fv\
-\x00\x00\x1f\xec\x00\x00>\xd8\x01\x00|\xb0\x03\x00\xf8`\
-\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\x07;\x00\x80\x0f\
-v\x00\x00\x1f\xec\x00\x00>\xd8\x01\x00|\xb0\x03\x00\xf8\
-`\x07\x00\xf0\xc1\x0e\x00\xe0\x83\x1d\x00\xc0\xe7\x1f\xff\xfe\
-\xef\x1b\x00\x00y\xfe\xfb\xc6\xff\x034\xc3}\xffR)\
-\xdb\xa4\x00\x00\x00\x00IEND\xaeB`\x82\
-"
-
-qt_resource_name = b"\
-\x00\x08\
-\x08\x01Z\x5c\
-\x00m\
-\x00a\x00i\x00n\x00.\x00q\x00m\x00l\
-\x00\x10\
-\x0d\x0d\xd3\xc7\
-\x00q\
-\x00t\x00_\x00l\x00o\x00g\x00o\x00_\x00r\x00e\x00c\x00t\x00.\x00p\x00n\x00g\
-"
-
-qt_resource_struct = b"\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01}k\x86\xb3\x9c\
-\x00\x00\x00\x16\x00\x00\x00\x00\x00\x01\x00\x00\x09G\
-\x00\x00\x01}k\x86\xb3\x9c\
-"
-
-def qInitResources():
- QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-def qCleanupResources():
- QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-qInitResources()