Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
EMUAFactory
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mayinghao
EMUAFactory
Commits
2f04d179
Commit
2f04d179
authored
Jun 23, 2025
by
mayinghao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1工厂上传,2 支持多线程多个文件同时上传
parent
37ad29d0
Pipeline
#24
canceled with stages
Changes
7
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
3441 additions
and
0 deletions
+3441
-0
login.py
login.py
+292
-0
login.ui
login.ui
+579
-0
main.py
main.py
+740
-0
thread_resume.py
multipleThread/thread_resume.py
+172
-0
thread_upload.py
multipleThread/thread_upload.py
+191
-0
res.qrc
res.qrc
+12
-0
res_rc.py
res_rc.py
+1455
-0
No files found.
login.py
0 → 100644
View file @
2f04d179
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'login.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from
PyQt5
import
QtCore
,
QtGui
,
QtWidgets
class
Ui_LoginWindow
(
object
):
def
setupUi
(
self
,
LoginWindow
):
LoginWindow
.
setObjectName
(
"LoginWindow"
)
LoginWindow
.
resize
(
889
,
671
)
self
.
centralwidget
=
QtWidgets
.
QWidget
(
LoginWindow
)
self
.
centralwidget
.
setObjectName
(
"centralwidget"
)
self
.
frame
=
QtWidgets
.
QFrame
(
self
.
centralwidget
)
self
.
frame
.
setGeometry
(
QtCore
.
QRect
(
50
,
50
,
271
,
371
))
self
.
frame
.
setStyleSheet
(
"#frame {background-color: qlineargradient(spread:pad, x1:0.272955, y1:0.244, x2:1, y2:1, stop:0 rgba(132, 95, 103, 255), stop:1 rgba(255, 255, 255, 255));
\n
"
"border-radius:20px;}"
)
self
.
frame
.
setFrameShape
(
QtWidgets
.
QFrame
.
StyledPanel
)
self
.
frame
.
setFrameShadow
(
QtWidgets
.
QFrame
.
Raised
)
self
.
frame
.
setObjectName
(
"frame"
)
self
.
label
=
QtWidgets
.
QLabel
(
self
.
frame
)
self
.
label
.
setGeometry
(
QtCore
.
QRect
(
10
,
70
,
161
,
51
))
self
.
label
.
setStyleSheet
(
"color: rgb(255, 255, 255);
\n
"
"font: 14pt
\"
Algerian
\"
;"
)
self
.
label
.
setObjectName
(
"label"
)
self
.
label_2
=
QtWidgets
.
QLabel
(
self
.
frame
)
self
.
label_2
.
setGeometry
(
QtCore
.
QRect
(
20
,
180
,
221
,
51
))
self
.
label_2
.
setStyleSheet
(
"color: rgb(255, 255, 255);
\n
"
"font: 11pt
\"
幼圆
\"
;"
)
self
.
label_2
.
setObjectName
(
"label_2"
)
self
.
frame_2
=
QtWidgets
.
QFrame
(
self
.
centralwidget
)
self
.
frame_2
.
setGeometry
(
QtCore
.
QRect
(
320
,
80
,
271
,
331
))
self
.
frame_2
.
setStyleSheet
(
"#frame_2{
\n
"
"background-color: rgb(255, 255, 255);
\n
"
"border-top-right-radius:20px;
\n
"
"border-bottom-right-radius:20px;
\n
"
"}"
)
self
.
frame_2
.
setFrameShape
(
QtWidgets
.
QFrame
.
StyledPanel
)
self
.
frame_2
.
setFrameShadow
(
QtWidgets
.
QFrame
.
Raised
)
self
.
frame_2
.
setObjectName
(
"frame_2"
)
self
.
pushButton
=
QtWidgets
.
QPushButton
(
self
.
frame_2
)
self
.
pushButton
.
setGeometry
(
QtCore
.
QRect
(
210
,
0
,
75
,
23
))
self
.
pushButton
.
setStyleSheet
(
"QPushButton{
\n
"
"border:none;
\n
"
"}
\n
"
"QPushButton:hover{
\n
"
"padding-bottom:5px;
\n
"
"}"
)
self
.
pushButton
.
setText
(
""
)
icon
=
QtGui
.
QIcon
()
icon
.
addPixmap
(
QtGui
.
QPixmap
(
":/icons/icons/close.svg"
),
QtGui
.
QIcon
.
Normal
,
QtGui
.
QIcon
.
Off
)
self
.
pushButton
.
setIcon
(
icon
)
self
.
pushButton
.
setObjectName
(
"pushButton"
)
self
.
frame_3
=
QtWidgets
.
QFrame
(
self
.
frame_2
)
self
.
frame_3
.
setGeometry
(
QtCore
.
QRect
(
0
,
40
,
271
,
281
))
self
.
frame_3
.
setMinimumSize
(
QtCore
.
QSize
(
271
,
281
))
self
.
frame_3
.
setFrameShape
(
QtWidgets
.
QFrame
.
StyledPanel
)
self
.
frame_3
.
setFrameShadow
(
QtWidgets
.
QFrame
.
Raised
)
self
.
frame_3
.
setObjectName
(
"frame_3"
)
self
.
verticalLayout
=
QtWidgets
.
QVBoxLayout
(
self
.
frame_3
)
self
.
verticalLayout
.
setContentsMargins
(
0
,
0
,
0
,
0
)
self
.
verticalLayout
.
setSpacing
(
0
)
self
.
verticalLayout
.
setObjectName
(
"verticalLayout"
)
self
.
frame_4
=
QtWidgets
.
QFrame
(
self
.
frame_3
)
sizePolicy
=
QtWidgets
.
QSizePolicy
(
QtWidgets
.
QSizePolicy
.
Preferred
,
QtWidgets
.
QSizePolicy
.
Expanding
)
sizePolicy
.
setHorizontalStretch
(
0
)
sizePolicy
.
setVerticalStretch
(
6
)
sizePolicy
.
setHeightForWidth
(
self
.
frame_4
.
sizePolicy
()
.
hasHeightForWidth
())
self
.
frame_4
.
setSizePolicy
(
sizePolicy
)
self
.
frame_4
.
setFrameShape
(
QtWidgets
.
QFrame
.
StyledPanel
)
self
.
frame_4
.
setFrameShadow
(
QtWidgets
.
QFrame
.
Raised
)
self
.
frame_4
.
setObjectName
(
"frame_4"
)
self
.
verticalLayout_3
=
QtWidgets
.
QVBoxLayout
(
self
.
frame_4
)
self
.
verticalLayout_3
.
setContentsMargins
(
0
,
0
,
0
,
0
)
self
.
verticalLayout_3
.
setSpacing
(
0
)
self
.
verticalLayout_3
.
setObjectName
(
"verticalLayout_3"
)
self
.
frame_6
=
QtWidgets
.
QFrame
(
self
.
frame_4
)
sizePolicy
=
QtWidgets
.
QSizePolicy
(
QtWidgets
.
QSizePolicy
.
Preferred
,
QtWidgets
.
QSizePolicy
.
Expanding
)
sizePolicy
.
setHorizontalStretch
(
0
)
sizePolicy
.
setVerticalStretch
(
5
)
sizePolicy
.
setHeightForWidth
(
self
.
frame_6
.
sizePolicy
()
.
hasHeightForWidth
())
self
.
frame_6
.
setSizePolicy
(
sizePolicy
)
self
.
frame_6
.
setFrameShape
(
QtWidgets
.
QFrame
.
StyledPanel
)
self
.
frame_6
.
setFrameShadow
(
QtWidgets
.
QFrame
.
Raised
)
self
.
frame_6
.
setObjectName
(
"frame_6"
)
self
.
horizontalLayout_2
=
QtWidgets
.
QHBoxLayout
(
self
.
frame_6
)
self
.
horizontalLayout_2
.
setContentsMargins
(
0
,
0
,
0
,
0
)
self
.
horizontalLayout_2
.
setSpacing
(
0
)
self
.
horizontalLayout_2
.
setObjectName
(
"horizontalLayout_2"
)
self
.
stackedWidget_2
=
QtWidgets
.
QStackedWidget
(
self
.
frame_6
)
self
.
stackedWidget_2
.
setStyleSheet
(
"QLineEdit{
\n
"
" background-color: rgba(255, 255, 255,0);
\n
"
"border:none;
\n
"
"border-bottom:1px solid;
\n
"
"}
\n
"
"QPushButton{
\n
"
" background-color: rgb(0, 0, 0);
\n
"
"
\n
"
" color: rgb(255, 255, 255);
\n
"
" border-radius:7px;
\n
"
"}
\n
"
"QPushButton:pressed{
\n
"
"padding-top:5px;
\n
"
"paddding-left:5px;
\n
"
"}"
)
self
.
stackedWidget_2
.
setObjectName
(
"stackedWidget_2"
)
self
.
page_login
=
QtWidgets
.
QWidget
()
self
.
page_login
.
setObjectName
(
"page_login"
)
self
.
verticalLayout_4
=
QtWidgets
.
QVBoxLayout
(
self
.
page_login
)
self
.
verticalLayout_4
.
setContentsMargins
(
9
,
9
,
9
,
9
)
self
.
verticalLayout_4
.
setSpacing
(
0
)
self
.
verticalLayout_4
.
setObjectName
(
"verticalLayout_4"
)
self
.
lineEdit_l_username
=
QtWidgets
.
QLineEdit
(
self
.
page_login
)
self
.
lineEdit_l_username
.
setMinimumSize
(
QtCore
.
QSize
(
0
,
35
))
self
.
lineEdit_l_username
.
setText
(
""
)
self
.
lineEdit_l_username
.
setObjectName
(
"lineEdit_l_username"
)
self
.
verticalLayout_4
.
addWidget
(
self
.
lineEdit_l_username
)
self
.
lineEdit_l_password
=
QtWidgets
.
QLineEdit
(
self
.
page_login
)
self
.
lineEdit_l_password
.
setMinimumSize
(
QtCore
.
QSize
(
0
,
35
))
self
.
lineEdit_l_password
.
setText
(
""
)
self
.
lineEdit_l_password
.
setEchoMode
(
QtWidgets
.
QLineEdit
.
Password
)
self
.
lineEdit_l_password
.
setObjectName
(
"lineEdit_l_password"
)
self
.
verticalLayout_4
.
addWidget
(
self
.
lineEdit_l_password
)
self
.
pushButton_4
=
QtWidgets
.
QPushButton
(
self
.
page_login
)
self
.
pushButton_4
.
setMinimumSize
(
QtCore
.
QSize
(
0
,
35
))
self
.
pushButton_4
.
setObjectName
(
"pushButton_4"
)
self
.
verticalLayout_4
.
addWidget
(
self
.
pushButton_4
)
self
.
stackedWidget_2
.
addWidget
(
self
.
page_login
)
self
.
page_register
=
QtWidgets
.
QWidget
()
self
.
page_register
.
setObjectName
(
"page_register"
)
self
.
verticalLayout_5
=
QtWidgets
.
QVBoxLayout
(
self
.
page_register
)
self
.
verticalLayout_5
.
setContentsMargins
(
9
,
9
,
9
,
9
)
self
.
verticalLayout_5
.
setSpacing
(
9
)
self
.
verticalLayout_5
.
setObjectName
(
"verticalLayout_5"
)
self
.
lineEdit_re_account
=
QtWidgets
.
QLineEdit
(
self
.
page_register
)
self
.
lineEdit_re_account
.
setMinimumSize
(
QtCore
.
QSize
(
0
,
35
))
self
.
lineEdit_re_account
.
setObjectName
(
"lineEdit_re_account"
)
self
.
verticalLayout_5
.
addWidget
(
self
.
lineEdit_re_account
)
self
.
lineEdit__password
=
QtWidgets
.
QLineEdit
(
self
.
page_register
)
self
.
lineEdit__password
.
setMinimumSize
(
QtCore
.
QSize
(
0
,
35
))
self
.
lineEdit__password
.
setEchoMode
(
QtWidgets
.
QLineEdit
.
Password
)
self
.
lineEdit__password
.
setObjectName
(
"lineEdit__password"
)
self
.
verticalLayout_5
.
addWidget
(
self
.
lineEdit__password
)
self
.
lineEdit_confirm_password
=
QtWidgets
.
QLineEdit
(
self
.
page_register
)
self
.
lineEdit_confirm_password
.
setMinimumSize
(
QtCore
.
QSize
(
0
,
35
))
self
.
lineEdit_confirm_password
.
setEchoMode
(
QtWidgets
.
QLineEdit
.
Password
)
self
.
lineEdit_confirm_password
.
setObjectName
(
"lineEdit_confirm_password"
)
self
.
verticalLayout_5
.
addWidget
(
self
.
lineEdit_confirm_password
)
self
.
pushButton_reg
=
QtWidgets
.
QPushButton
(
self
.
page_register
)
self
.
pushButton_reg
.
setMinimumSize
(
QtCore
.
QSize
(
0
,
35
))
self
.
pushButton_reg
.
setObjectName
(
"pushButton_reg"
)
self
.
verticalLayout_5
.
addWidget
(
self
.
pushButton_reg
)
self
.
stackedWidget_2
.
addWidget
(
self
.
page_register
)
self
.
horizontalLayout_2
.
addWidget
(
self
.
stackedWidget_2
)
self
.
verticalLayout_3
.
addWidget
(
self
.
frame_6
)
self
.
frame_7
=
QtWidgets
.
QFrame
(
self
.
frame_4
)
sizePolicy
=
QtWidgets
.
QSizePolicy
(
QtWidgets
.
QSizePolicy
.
Preferred
,
QtWidgets
.
QSizePolicy
.
Expanding
)
sizePolicy
.
setHorizontalStretch
(
0
)
sizePolicy
.
setVerticalStretch
(
1
)
sizePolicy
.
setHeightForWidth
(
self
.
frame_7
.
sizePolicy
()
.
hasHeightForWidth
())
self
.
frame_7
.
setSizePolicy
(
sizePolicy
)
self
.
frame_7
.
setStyleSheet
(
"QPushButton {
\n
"
"border:none
\n
"
"
\n
"
"}
\n
"
"
\n
"
"QPushButton:pressed{
\n
"
"padding-top:5px;padding-left:5px}"
)
self
.
frame_7
.
setFrameShape
(
QtWidgets
.
QFrame
.
StyledPanel
)
self
.
frame_7
.
setFrameShadow
(
QtWidgets
.
QFrame
.
Raised
)
self
.
frame_7
.
setObjectName
(
"frame_7"
)
self
.
horizontalLayout
=
QtWidgets
.
QHBoxLayout
(
self
.
frame_7
)
self
.
horizontalLayout
.
setObjectName
(
"horizontalLayout"
)
self
.
login
=
QtWidgets
.
QPushButton
(
self
.
frame_7
)
self
.
login
.
setText
(
""
)
icon1
=
QtGui
.
QIcon
()
icon1
.
addPixmap
(
QtGui
.
QPixmap
(
":/icons/icons/login.svg"
),
QtGui
.
QIcon
.
Normal
,
QtGui
.
QIcon
.
Off
)
self
.
login
.
setIcon
(
icon1
)
self
.
login
.
setObjectName
(
"login"
)
self
.
horizontalLayout
.
addWidget
(
self
.
login
)
self
.
register_2
=
QtWidgets
.
QPushButton
(
self
.
frame_7
)
self
.
register_2
.
setText
(
""
)
icon2
=
QtGui
.
QIcon
()
icon2
.
addPixmap
(
QtGui
.
QPixmap
(
":/icons/icons/register.svg"
),
QtGui
.
QIcon
.
Normal
,
QtGui
.
QIcon
.
Off
)
self
.
register_2
.
setIcon
(
icon2
)
self
.
register_2
.
setObjectName
(
"register_2"
)
self
.
horizontalLayout
.
addWidget
(
self
.
register_2
)
self
.
verticalLayout_3
.
addWidget
(
self
.
frame_7
)
self
.
verticalLayout
.
addWidget
(
self
.
frame_4
)
self
.
frame_5
=
QtWidgets
.
QFrame
(
self
.
frame_3
)
sizePolicy
=
QtWidgets
.
QSizePolicy
(
QtWidgets
.
QSizePolicy
.
Preferred
,
QtWidgets
.
QSizePolicy
.
Expanding
)
sizePolicy
.
setHorizontalStretch
(
0
)
sizePolicy
.
setVerticalStretch
(
1
)
sizePolicy
.
setHeightForWidth
(
self
.
frame_5
.
sizePolicy
()
.
hasHeightForWidth
())
self
.
frame_5
.
setSizePolicy
(
sizePolicy
)
self
.
frame_5
.
setFrameShape
(
QtWidgets
.
QFrame
.
StyledPanel
)
self
.
frame_5
.
setFrameShadow
(
QtWidgets
.
QFrame
.
Raised
)
self
.
frame_5
.
setObjectName
(
"frame_5"
)
self
.
verticalLayout_2
=
QtWidgets
.
QVBoxLayout
(
self
.
frame_5
)
self
.
verticalLayout_2
.
setContentsMargins
(
0
,
0
,
0
,
0
)
self
.
verticalLayout_2
.
setSpacing
(
0
)
self
.
verticalLayout_2
.
setObjectName
(
"verticalLayout_2"
)
self
.
stackedWidget
=
QtWidgets
.
QStackedWidget
(
self
.
frame_5
)
self
.
stackedWidget
.
setObjectName
(
"stackedWidget"
)
self
.
page_wrong
=
QtWidgets
.
QWidget
()
self
.
page_wrong
.
setObjectName
(
"page_wrong"
)
self
.
verticalLayout_6
=
QtWidgets
.
QVBoxLayout
(
self
.
page_wrong
)
self
.
verticalLayout_6
.
setObjectName
(
"verticalLayout_6"
)
self
.
label_3
=
QtWidgets
.
QLabel
(
self
.
page_wrong
)
self
.
label_3
.
setStyleSheet
(
"color: rgb(204, 0, 0);"
)
self
.
label_3
.
setObjectName
(
"label_3"
)
self
.
verticalLayout_6
.
addWidget
(
self
.
label_3
,
0
,
QtCore
.
Qt
.
AlignHCenter
)
self
.
stackedWidget
.
addWidget
(
self
.
page_wrong
)
self
.
page
=
QtWidgets
.
QWidget
()
self
.
page
.
setObjectName
(
"page"
)
self
.
verticalLayout_8
=
QtWidgets
.
QVBoxLayout
(
self
.
page
)
self
.
verticalLayout_8
.
setObjectName
(
"verticalLayout_8"
)
self
.
label_5
=
QtWidgets
.
QLabel
(
self
.
page
)
self
.
label_5
.
setStyleSheet
(
"color: rgb(170, 0, 0);"
)
self
.
label_5
.
setObjectName
(
"label_5"
)
self
.
verticalLayout_8
.
addWidget
(
self
.
label_5
,
0
,
QtCore
.
Qt
.
AlignHCenter
)
self
.
stackedWidget
.
addWidget
(
self
.
page
)
self
.
page_2
=
QtWidgets
.
QWidget
()
self
.
page_2
.
setObjectName
(
"page_2"
)
self
.
verticalLayout_9
=
QtWidgets
.
QVBoxLayout
(
self
.
page_2
)
self
.
verticalLayout_9
.
setObjectName
(
"verticalLayout_9"
)
self
.
label_6
=
QtWidgets
.
QLabel
(
self
.
page_2
)
self
.
label_6
.
setStyleSheet
(
"color: rgb(170, 0, 0);"
)
self
.
label_6
.
setObjectName
(
"label_6"
)
self
.
verticalLayout_9
.
addWidget
(
self
.
label_6
,
0
,
QtCore
.
Qt
.
AlignHCenter
)
self
.
stackedWidget
.
addWidget
(
self
.
page_2
)
self
.
page_3
=
QtWidgets
.
QWidget
()
self
.
page_3
.
setObjectName
(
"page_3"
)
self
.
stackedWidget
.
addWidget
(
self
.
page_3
)
self
.
page_4
=
QtWidgets
.
QWidget
()
self
.
page_4
.
setObjectName
(
"page_4"
)
self
.
verticalLayout_10
=
QtWidgets
.
QVBoxLayout
(
self
.
page_4
)
self
.
verticalLayout_10
.
setObjectName
(
"verticalLayout_10"
)
self
.
label_7
=
QtWidgets
.
QLabel
(
self
.
page_4
)
self
.
label_7
.
setStyleSheet
(
"color: rgb(170, 0, 0);"
)
self
.
label_7
.
setObjectName
(
"label_7"
)
self
.
verticalLayout_10
.
addWidget
(
self
.
label_7
,
0
,
QtCore
.
Qt
.
AlignHCenter
)
self
.
stackedWidget
.
addWidget
(
self
.
page_4
)
self
.
page_empty
=
QtWidgets
.
QWidget
()
self
.
page_empty
.
setObjectName
(
"page_empty"
)
self
.
verticalLayout_7
=
QtWidgets
.
QVBoxLayout
(
self
.
page_empty
)
self
.
verticalLayout_7
.
setObjectName
(
"verticalLayout_7"
)
self
.
label_4
=
QtWidgets
.
QLabel
(
self
.
page_empty
)
self
.
label_4
.
setStyleSheet
(
"color: rgb(203, 0, 0);"
)
self
.
label_4
.
setObjectName
(
"label_4"
)
self
.
verticalLayout_7
.
addWidget
(
self
.
label_4
,
0
,
QtCore
.
Qt
.
AlignHCenter
)
self
.
stackedWidget
.
addWidget
(
self
.
page_empty
)
self
.
page_index
=
QtWidgets
.
QWidget
()
self
.
page_index
.
setObjectName
(
"page_index"
)
self
.
stackedWidget
.
addWidget
(
self
.
page_index
)
self
.
verticalLayout_2
.
addWidget
(
self
.
stackedWidget
)
self
.
verticalLayout
.
addWidget
(
self
.
frame_5
)
self
.
frame_2
.
raise_
()
self
.
frame
.
raise_
()
LoginWindow
.
setCentralWidget
(
self
.
centralwidget
)
self
.
retranslateUi
(
LoginWindow
)
self
.
stackedWidget_2
.
setCurrentIndex
(
0
)
self
.
stackedWidget
.
setCurrentIndex
(
3
)
self
.
pushButton
.
clicked
.
connect
(
LoginWindow
.
close
)
# type: ignore
QtCore
.
QMetaObject
.
connectSlotsByName
(
LoginWindow
)
def
retranslateUi
(
self
,
LoginWindow
):
_translate
=
QtCore
.
QCoreApplication
.
translate
LoginWindow
.
setWindowTitle
(
_translate
(
"LoginWindow"
,
"MainWindow"
))
self
.
label
.
setText
(
_translate
(
"LoginWindow"
,
"Welcome Back"
))
self
.
label_2
.
setText
(
_translate
(
"LoginWindow"
,
"感谢用户的支持
\n
"
"您的支持是对我们最大的鼓励"
))
self
.
lineEdit_l_username
.
setPlaceholderText
(
_translate
(
"LoginWindow"
,
"账号:"
))
self
.
lineEdit_l_password
.
setPlaceholderText
(
_translate
(
"LoginWindow"
,
"密码:"
))
self
.
pushButton_4
.
setText
(
_translate
(
"LoginWindow"
,
"登录"
))
self
.
lineEdit_re_account
.
setPlaceholderText
(
_translate
(
"LoginWindow"
,
"账号"
))
self
.
lineEdit__password
.
setPlaceholderText
(
_translate
(
"LoginWindow"
,
"密码"
))
self
.
lineEdit_confirm_password
.
setPlaceholderText
(
_translate
(
"LoginWindow"
,
"确认密码:"
))
self
.
pushButton_reg
.
setText
(
_translate
(
"LoginWindow"
,
"注册"
))
self
.
label_3
.
setText
(
_translate
(
"LoginWindow"
,
"密码错误或者账户不存在"
))
self
.
label_5
.
setText
(
_translate
(
"LoginWindow"
,
"用户名或者密码不能为空"
))
self
.
label_6
.
setText
(
_translate
(
"LoginWindow"
,
"密码不一致"
))
self
.
label_7
.
setText
(
_translate
(
"LoginWindow"
,
"用户名已经存在"
))
self
.
label_4
.
setText
(
_translate
(
"LoginWindow"
,
"密码和用户名不能为空"
))
import
res_rc
login.ui
0 → 100644
View file @
2f04d179
<?xml version="1.0" encoding="UTF-8"?>
<ui
version=
"4.0"
>
<class>
LoginWindow
</class>
<widget
class=
"QMainWindow"
name=
"LoginWindow"
>
<property
name=
"geometry"
>
<rect>
<x>
0
</x>
<y>
0
</y>
<width>
889
</width>
<height>
671
</height>
</rect>
</property>
<property
name=
"windowTitle"
>
<string>
MainWindow
</string>
</property>
<widget
class=
"QWidget"
name=
"centralwidget"
>
<widget
class=
"QFrame"
name=
"frame"
>
<property
name=
"geometry"
>
<rect>
<x>
50
</x>
<y>
50
</y>
<width>
271
</width>
<height>
371
</height>
</rect>
</property>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
#frame {background-color: qlineargradient(spread:pad, x1:0.272955, y1:0.244, x2:1, y2:1, stop:0 rgba(132, 95, 103, 255), stop:1 rgba(255, 255, 255, 255));
border-radius:20px;}
</string>
</property>
<property
name=
"frameShape"
>
<enum>
QFrame::StyledPanel
</enum>
</property>
<property
name=
"frameShadow"
>
<enum>
QFrame::Raised
</enum>
</property>
<widget
class=
"QLabel"
name=
"label"
>
<property
name=
"geometry"
>
<rect>
<x>
10
</x>
<y>
70
</y>
<width>
161
</width>
<height>
51
</height>
</rect>
</property>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
color: rgb(255, 255, 255);
font: 14pt
"
Algerian
"
;
</string>
</property>
<property
name=
"text"
>
<string>
Welcome Back
</string>
</property>
</widget>
<widget
class=
"QLabel"
name=
"label_2"
>
<property
name=
"geometry"
>
<rect>
<x>
20
</x>
<y>
180
</y>
<width>
221
</width>
<height>
51
</height>
</rect>
</property>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
color: rgb(255, 255, 255);
font: 11pt
"
幼圆
"
;
</string>
</property>
<property
name=
"text"
>
<string>
感谢用户的支持
您的支持是对我们最大的鼓励
</string>
</property>
</widget>
</widget>
<widget
class=
"QFrame"
name=
"frame_2"
>
<property
name=
"geometry"
>
<rect>
<x>
320
</x>
<y>
80
</y>
<width>
271
</width>
<height>
331
</height>
</rect>
</property>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
#frame_2{
background-color: rgb(255, 255, 255);
border-top-right-radius:20px;
border-bottom-right-radius:20px;
}
</string>
</property>
<property
name=
"frameShape"
>
<enum>
QFrame::StyledPanel
</enum>
</property>
<property
name=
"frameShadow"
>
<enum>
QFrame::Raised
</enum>
</property>
<widget
class=
"QPushButton"
name=
"pushButton"
>
<property
name=
"geometry"
>
<rect>
<x>
210
</x>
<y>
0
</y>
<width>
75
</width>
<height>
23
</height>
</rect>
</property>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
QPushButton{
border:none;
}
QPushButton:hover{
padding-bottom:5px;
}
</string>
</property>
<property
name=
"text"
>
<string/>
</property>
<property
name=
"icon"
>
<iconset
resource=
"res.qrc"
>
<normaloff>
:/icons/icons/close.svg
</normaloff>
:/icons/icons/close.svg
</iconset>
</property>
</widget>
<widget
class=
"QFrame"
name=
"frame_3"
>
<property
name=
"geometry"
>
<rect>
<x>
0
</x>
<y>
40
</y>
<width>
271
</width>
<height>
281
</height>
</rect>
</property>
<property
name=
"minimumSize"
>
<size>
<width>
271
</width>
<height>
281
</height>
</size>
</property>
<property
name=
"frameShape"
>
<enum>
QFrame::StyledPanel
</enum>
</property>
<property
name=
"frameShadow"
>
<enum>
QFrame::Raised
</enum>
</property>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout"
>
<property
name=
"spacing"
>
<number>
0
</number>
</property>
<property
name=
"leftMargin"
>
<number>
0
</number>
</property>
<property
name=
"topMargin"
>
<number>
0
</number>
</property>
<property
name=
"rightMargin"
>
<number>
0
</number>
</property>
<property
name=
"bottomMargin"
>
<number>
0
</number>
</property>
<item>
<widget
class=
"QFrame"
name=
"frame_4"
>
<property
name=
"sizePolicy"
>
<sizepolicy
hsizetype=
"Preferred"
vsizetype=
"Expanding"
>
<horstretch>
0
</horstretch>
<verstretch>
6
</verstretch>
</sizepolicy>
</property>
<property
name=
"frameShape"
>
<enum>
QFrame::StyledPanel
</enum>
</property>
<property
name=
"frameShadow"
>
<enum>
QFrame::Raised
</enum>
</property>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout_3"
>
<property
name=
"spacing"
>
<number>
0
</number>
</property>
<property
name=
"leftMargin"
>
<number>
0
</number>
</property>
<property
name=
"topMargin"
>
<number>
0
</number>
</property>
<property
name=
"rightMargin"
>
<number>
0
</number>
</property>
<property
name=
"bottomMargin"
>
<number>
0
</number>
</property>
<item>
<widget
class=
"QFrame"
name=
"frame_6"
>
<property
name=
"sizePolicy"
>
<sizepolicy
hsizetype=
"Preferred"
vsizetype=
"Expanding"
>
<horstretch>
0
</horstretch>
<verstretch>
5
</verstretch>
</sizepolicy>
</property>
<property
name=
"frameShape"
>
<enum>
QFrame::StyledPanel
</enum>
</property>
<property
name=
"frameShadow"
>
<enum>
QFrame::Raised
</enum>
</property>
<layout
class=
"QHBoxLayout"
name=
"horizontalLayout_2"
>
<property
name=
"spacing"
>
<number>
0
</number>
</property>
<property
name=
"leftMargin"
>
<number>
0
</number>
</property>
<property
name=
"topMargin"
>
<number>
0
</number>
</property>
<property
name=
"rightMargin"
>
<number>
0
</number>
</property>
<property
name=
"bottomMargin"
>
<number>
0
</number>
</property>
<item>
<widget
class=
"QStackedWidget"
name=
"stackedWidget_2"
>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
QLineEdit{
background-color: rgba(255, 255, 255,0);
border:none;
border-bottom:1px solid;
}
QPushButton{
background-color: rgb(0, 0, 0);
color: rgb(255, 255, 255);
border-radius:7px;
}
QPushButton:pressed{
padding-top:5px;
paddding-left:5px;
}
</string>
</property>
<property
name=
"currentIndex"
>
<number>
0
</number>
</property>
<widget
class=
"QWidget"
name=
"page_login"
>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout_4"
>
<property
name=
"spacing"
>
<number>
0
</number>
</property>
<property
name=
"leftMargin"
>
<number>
9
</number>
</property>
<property
name=
"topMargin"
>
<number>
9
</number>
</property>
<property
name=
"rightMargin"
>
<number>
9
</number>
</property>
<property
name=
"bottomMargin"
>
<number>
9
</number>
</property>
<item>
<widget
class=
"QLineEdit"
name=
"lineEdit_l_username"
>
<property
name=
"minimumSize"
>
<size>
<width>
0
</width>
<height>
35
</height>
</size>
</property>
<property
name=
"text"
>
<string/>
</property>
<property
name=
"placeholderText"
>
<string>
账号:
</string>
</property>
</widget>
</item>
<item>
<widget
class=
"QLineEdit"
name=
"lineEdit_l_password"
>
<property
name=
"minimumSize"
>
<size>
<width>
0
</width>
<height>
35
</height>
</size>
</property>
<property
name=
"text"
>
<string/>
</property>
<property
name=
"echoMode"
>
<enum>
QLineEdit::Password
</enum>
</property>
<property
name=
"placeholderText"
>
<string>
密码:
</string>
</property>
</widget>
</item>
<item>
<widget
class=
"QPushButton"
name=
"pushButton_4"
>
<property
name=
"minimumSize"
>
<size>
<width>
0
</width>
<height>
35
</height>
</size>
</property>
<property
name=
"text"
>
<string>
登录
</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget
class=
"QWidget"
name=
"page_register"
>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout_5"
>
<property
name=
"spacing"
>
<number>
9
</number>
</property>
<property
name=
"leftMargin"
>
<number>
9
</number>
</property>
<property
name=
"topMargin"
>
<number>
9
</number>
</property>
<property
name=
"rightMargin"
>
<number>
9
</number>
</property>
<property
name=
"bottomMargin"
>
<number>
9
</number>
</property>
<item>
<widget
class=
"QLineEdit"
name=
"lineEdit_re_account"
>
<property
name=
"minimumSize"
>
<size>
<width>
0
</width>
<height>
35
</height>
</size>
</property>
<property
name=
"placeholderText"
>
<string>
账号
</string>
</property>
</widget>
</item>
<item>
<widget
class=
"QLineEdit"
name=
"lineEdit__password"
>
<property
name=
"minimumSize"
>
<size>
<width>
0
</width>
<height>
35
</height>
</size>
</property>
<property
name=
"echoMode"
>
<enum>
QLineEdit::Password
</enum>
</property>
<property
name=
"placeholderText"
>
<string>
密码
</string>
</property>
</widget>
</item>
<item>
<widget
class=
"QLineEdit"
name=
"lineEdit_confirm_password"
>
<property
name=
"minimumSize"
>
<size>
<width>
0
</width>
<height>
35
</height>
</size>
</property>
<property
name=
"echoMode"
>
<enum>
QLineEdit::Password
</enum>
</property>
<property
name=
"placeholderText"
>
<string>
确认密码:
</string>
</property>
</widget>
</item>
<item>
<widget
class=
"QPushButton"
name=
"pushButton_reg"
>
<property
name=
"minimumSize"
>
<size>
<width>
0
</width>
<height>
35
</height>
</size>
</property>
<property
name=
"text"
>
<string>
注册
</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget
class=
"QFrame"
name=
"frame_7"
>
<property
name=
"sizePolicy"
>
<sizepolicy
hsizetype=
"Preferred"
vsizetype=
"Expanding"
>
<horstretch>
0
</horstretch>
<verstretch>
1
</verstretch>
</sizepolicy>
</property>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
QPushButton {
border:none
}
QPushButton:pressed{
padding-top:5px;padding-left:5px}
</string>
</property>
<property
name=
"frameShape"
>
<enum>
QFrame::StyledPanel
</enum>
</property>
<property
name=
"frameShadow"
>
<enum>
QFrame::Raised
</enum>
</property>
<layout
class=
"QHBoxLayout"
name=
"horizontalLayout"
>
<item>
<widget
class=
"QPushButton"
name=
"login"
>
<property
name=
"text"
>
<string/>
</property>
<property
name=
"icon"
>
<iconset
resource=
"res.qrc"
>
<normaloff>
:/icons/icons/login.svg
</normaloff>
:/icons/icons/login.svg
</iconset>
</property>
</widget>
</item>
<item>
<widget
class=
"QPushButton"
name=
"register_2"
>
<property
name=
"text"
>
<string/>
</property>
<property
name=
"icon"
>
<iconset
resource=
"res.qrc"
>
<normaloff>
:/icons/icons/register.svg
</normaloff>
:/icons/icons/register.svg
</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget
class=
"QFrame"
name=
"frame_5"
>
<property
name=
"sizePolicy"
>
<sizepolicy
hsizetype=
"Preferred"
vsizetype=
"Expanding"
>
<horstretch>
0
</horstretch>
<verstretch>
1
</verstretch>
</sizepolicy>
</property>
<property
name=
"frameShape"
>
<enum>
QFrame::StyledPanel
</enum>
</property>
<property
name=
"frameShadow"
>
<enum>
QFrame::Raised
</enum>
</property>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout_2"
>
<property
name=
"spacing"
>
<number>
0
</number>
</property>
<property
name=
"leftMargin"
>
<number>
0
</number>
</property>
<property
name=
"topMargin"
>
<number>
0
</number>
</property>
<property
name=
"rightMargin"
>
<number>
0
</number>
</property>
<property
name=
"bottomMargin"
>
<number>
0
</number>
</property>
<item>
<widget
class=
"QStackedWidget"
name=
"stackedWidget"
>
<property
name=
"currentIndex"
>
<number>
3
</number>
</property>
<widget
class=
"QWidget"
name=
"page_wrong"
>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout_6"
>
<item
alignment=
"Qt::AlignHCenter"
>
<widget
class=
"QLabel"
name=
"label_3"
>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
color: rgb(204, 0, 0);
</string>
</property>
<property
name=
"text"
>
<string>
密码错误或者账户不存在
</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget
class=
"QWidget"
name=
"page"
>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout_8"
>
<item
alignment=
"Qt::AlignHCenter"
>
<widget
class=
"QLabel"
name=
"label_5"
>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
color: rgb(170, 0, 0);
</string>
</property>
<property
name=
"text"
>
<string>
用户名或者密码不能为空
</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget
class=
"QWidget"
name=
"page_2"
>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout_9"
>
<item
alignment=
"Qt::AlignHCenter"
>
<widget
class=
"QLabel"
name=
"label_6"
>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
color: rgb(170, 0, 0);
</string>
</property>
<property
name=
"text"
>
<string>
密码不一致
</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget
class=
"QWidget"
name=
"page_3"
/>
<widget
class=
"QWidget"
name=
"page_4"
>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout_10"
>
<item
alignment=
"Qt::AlignHCenter"
>
<widget
class=
"QLabel"
name=
"label_7"
>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
color: rgb(170, 0, 0);
</string>
</property>
<property
name=
"text"
>
<string>
用户名已经存在
</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget
class=
"QWidget"
name=
"page_empty"
>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout_7"
>
<item
alignment=
"Qt::AlignHCenter"
>
<widget
class=
"QLabel"
name=
"label_4"
>
<property
name=
"styleSheet"
>
<string
notr=
"true"
>
color: rgb(203, 0, 0);
</string>
</property>
<property
name=
"text"
>
<string>
密码和用户名不能为空
</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget
class=
"QWidget"
name=
"page_index"
/>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
<zorder>
frame_2
</zorder>
<zorder>
frame
</zorder>
</widget>
</widget>
<resources>
<include
location=
"res.qrc"
/>
</resources>
<connections>
<connection>
<sender>
pushButton
</sender>
<signal>
clicked()
</signal>
<receiver>
LoginWindow
</receiver>
<slot>
close()
</slot>
<hints>
<hint
type=
"sourcelabel"
>
<x>
563
</x>
<y>
111
</y>
</hint>
<hint
type=
"destinationlabel"
>
<x>
700
</x>
<y>
73
</y>
</hint>
</hints>
</connection>
</connections>
</ui>
main.py
0 → 100644
View file @
2f04d179
import
os.path
import
hashlib
import
base64
from
login
import
*
import
uuid
import
re
from
PyQt5.QtWidgets
import
QMessageBox
,
QProgressBar
,
QTableWidget
,
QTableWidgetItem
import
requests
import
json
import
datetime
import
oss2
import
json
from
oss2
import
SizedFileAdapter
,
determine_part_size
from
oss2.models
import
PartInfo
from
PyQt5.QtWidgets
import
QComboBox
import
sys
from
PyQt5.QtWidgets
import
(
QApplication
,
QMainWindow
,
QTableView
,
QVBoxLayout
,
QWidget
,
QPushButton
,
QHeaderView
,
QHBoxLayout
,
QDialog
,
QLabel
,
QLineEdit
,
QFormLayout
,
QFileDialog
)
from
PyQt5.QtCore
import
Qt
,
QAbstractTableModel
,
QModelIndex
,
QThread
from
PyQt5.QtGui
import
QColor
from
PyQt5.QtWidgets
import
QRadioButton
from
PyQt5.QtGui
import
QValidator
,
QRegExpValidator
from
PyQt5.QtCore
import
QRegExp
from
multipleThread.thread_upload
import
Upload_Thread
from
multipleThread.thread_resume
import
Resume_Thread
# 命令行查看文件md5
# certutil -hashfile music.mp4 MD5
# 上传文件固定参数
name_prefix
=
"https://qgongye.oss-cn-shanghai.aliyuncs.com
\\
upload/order"
# 当前用户
user_now
=
''
token
=
''
# 工厂上传登录地址
login_url
=
'https://uat.emku.laidecloud.com/console/pc/userLoginByToken.ajax'
# order信息地址
order_info_url
=
"https://uat.emku.laidecloud.com/console/productOrder/experimentOrderList.ajax"
# order detail
order_detail_url
=
"https://uat.emku.laidecloud.com/console/productOrder/uploadorderdetail.ajax"
# 上传文件回调地址
callback_url
=
"https://uat.emku.laidecloud.com/console/productOrder/filePthSave.ajax"
# 切片上传大小
part_size
=
5
*
1024
*
1024
# 未完成任务列表
job_list
=
{}
auth
=
oss2
.
Auth
(
"LTAI3qeEHR5SP2ph"
,
"zsV3FnjVgBDhaAm23J2vdAmMuX0YFY"
)
# 填写Bucket所在地域对应的Endpoint。以华东1(上海)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint
=
"https://oss-cn-shanghai.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region
=
"cn-shanghai"
bucket_name
=
"qgongye"
# yourBucketName填写存储空间名称。
bucket
=
oss2
.
Bucket
(
auth
,
endpoint
,
bucket_name
,
region
=
region
)
# 未完成上传的json文件存储路径,json命名格式为:tmp_{key}.json,比如key="music.mp3"
uncomplete_json_folder
=
"./upload_tag"
# 验证版本输入必须为数字
class
NumberValidator
(
QRegExpValidator
):
def
__init__
(
self
,
parent
=
None
):
# 匹配整数、浮点数(包括科学计数法)
reg_exp
=
QRegExp
(
r'^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$'
)
super
()
.
__init__
(
reg_exp
,
parent
)
def
validate
(
self
,
text
,
pos
):
# 允许空输入
if
not
text
:
return
(
QValidator
.
Intermediate
,
text
,
pos
)
# 检查是否为纯数字
if
text
in
[
'+'
,
'-'
,
'.'
,
'+.'
,
'-.'
]:
return
(
QValidator
.
Intermediate
,
text
,
pos
)
return
super
()
.
validate
(
text
,
pos
)
# 全局线程书
thread_index
=
0
class
OrderDetail
(
QMainWindow
):
_instance
=
None
def
__init__
(
self
,
sample_data
):
super
()
.
__init__
()
self
.
setWindowTitle
(
"订单详情"
)
self
.
setGeometry
(
100
,
100
,
1200
,
600
)
self
.
data
=
sample_data
self
.
oss_prefix
=
"upload/order/"
# 用于同步进度条
self
.
send_data
=
0
self
.
uuid_str
=
''
# 为每个进程创建进度条
self
.
progress_bars
=
[]
# 暂停按钮
self
.
buttons
=
[]
# 线程数组
self
.
threads
=
[]
# 未完成线程数组
self
.
resume_loads
=
[]
# 正在上传线程数组
self
.
uploads
=
[]
self
.
counter
=
0
# 主窗口部件和布局
central_widget
=
QWidget
()
self
.
setCentralWidget
(
central_widget
)
self
.
main_layout
=
QVBoxLayout
(
central_widget
)
# 创建表格
self
.
create_tracking_table
(
self
.
main_layout
)
# 加载示例数据
self
.
load_sample_data
()
self
.
program_bar
=
QProgressBar
()
self
.
program_bar
.
setVisible
(
False
)
self
.
main_layout
.
addWidget
(
self
.
program_bar
)
self
.
file_label
=
QLabel
()
self
.
main_layout
.
addWidget
(
self
.
file_label
)
def
create_tracking_table
(
self
,
layout
):
"""创建任务跟踪表格"""
self
.
table
=
QTableWidget
()
self
.
table
.
setColumnCount
(
8
)
self
.
table
.
setHorizontalHeaderLabels
([
"id"
,
"工站"
,
"人员"
,
"状态"
,
"预计完成时间"
,
"实际完成日期"
,
"图纸文件"
,
"BoM文件"
])
# 设置表格属性
self
.
table
.
horizontalHeader
()
.
setSectionResizeMode
(
QHeaderView
.
Stretch
)
self
.
table
.
verticalHeader
()
.
setVisible
(
False
)
self
.
table
.
setEditTriggers
(
QTableWidget
.
NoEditTriggers
)
self
.
table
.
setSelectionBehavior
(
QTableWidget
.
SelectRows
)
#self.table.setColumnHidden(0, True)
self
.
table
.
setSortingEnabled
(
False
)
self
.
table
.
sortItems
(
1
,
Qt
.
AscendingOrder
)
layout
.
addWidget
(
self
.
table
)
self
.
check_if_has_unfinished
()
def
load_sample_data
(
self
):
"""加载示例数据"""
sample_data
=
self
.
data
self
.
table
.
setRowCount
(
len
(
sample_data
))
for
row
,
data
in
enumerate
(
sample_data
):
for
col
,
value
in
enumerate
(
data
):
item
=
QTableWidgetItem
(
str
(
value
))
item
.
setTextAlignment
(
Qt
.
AlignCenter
)
self
.
table
.
setItem
(
row
,
col
,
item
)
# 添加图纸文件按钮
drawing_btn
=
QPushButton
(
"上传文件"
)
drawing_btn
.
clicked
.
connect
(
lambda
_
,
r
=
row
:
self
.
upload_drawing
(
r
))
self
.
table
.
setCellWidget
(
row
,
6
,
drawing_btn
)
# 添加BoM文件按钮
bom_btn
=
QPushButton
(
"上传文件"
)
bom_btn
.
clicked
.
connect
(
lambda
_
,
r
=
row
:
self
.
handle_bom
(
r
))
self
.
table
.
setCellWidget
(
row
,
7
,
bom_btn
)
def
upload_drawing
(
self
,
row
):
type_info
=
3
print
(
self
.
data
[
row
][
0
])
"""上传图纸文件"""
file_path
,
_
=
QFileDialog
.
getOpenFileName
(
self
,
"选择图纸文件"
,
""
,
"图纸文件 (*.dwg *.dxf *.pdf);;所有文件 (*)"
)
if
file_path
:
if
os
.
path
.
getsize
(
file_path
)
<
part_size
:
self
.
upload_file
(
file_path
,
self
.
data
[
row
][
0
],
type_info
)
else
:
self
.
add_progress_bar_and_button
(
file_path
,
self
.
data
[
row
][
0
],
type_info
)
def
handle_bom
(
self
,
row
):
type_info
=
4
print
(
self
.
data
[
row
][
0
])
# 上传文件逻辑
file_path
,
_
=
QFileDialog
.
getOpenFileName
(
self
,
"选择BoM文件"
,
""
,
"BoM文件 (*.xls *.xlsx *.csv);;所有文件 (*)"
)
if
file_path
:
# 如果小于5M直接上传,大于5M开启线程上传
if
os
.
path
.
getsize
(
file_path
)
<
part_size
:
self
.
upload_file
(
file_path
,
self
.
data
[
row
][
0
],
type_info
)
else
:
self
.
add_progress_bar_and_button
(
file_path
,
self
.
data
[
row
][
0
],
type_info
)
def
upload_callback
(
self
,
bytes_uploaded
,
total_bytes
):
if
bytes_uploaded
>=
total_bytes
and
(
total_bytes
!=
self
.
leftBytes
):
self
.
send_data
+=
1
rate
=
int
(
100
*
(
float
(
bytes_uploaded
+
self
.
send_data
*
part_size
)
/
float
(
self
.
total_size
)))
self
.
program_bar
.
setValue
(
rate
)
def
__new__
(
cls
,
*
args
,
**
kwargs
):
if
not
cls
.
_instance
:
cls
.
_instance
=
super
(
OrderDetail
,
cls
)
.
__new__
(
cls
)
return
cls
.
_instance
# 新上传就开启一个upload_thread线程并添加进度条和暂停按钮
def
add_progress_bar_and_button
(
self
,
file_path
,
order_id
,
type_info
):
# 创建水平布局
h_layout
=
QHBoxLayout
()
# 创建进度条
progress_bar
=
QProgressBar
()
progress_bar
.
setRange
(
0
,
100
)
progress_bar
.
setValue
(
0
)
# 创建按钮
button
=
QPushButton
(
f
"上传"
)
# 将部件添加到水平布局
h_layout
.
addWidget
(
progress_bar
)
h_layout
.
addWidget
(
button
)
# 将水平布局添加到主布局
self
.
main_layout
.
addLayout
(
h_layout
)
# 存储部件引用
self
.
progress_bars
.
append
(
progress_bar
)
self
.
buttons
.
append
(
button
)
thread
=
QThread
()
upload
=
Upload_Thread
(
self
.
counter
,
order_id
,
type_info
)
upload
.
filename
=
file_path
upload
.
moveToThread
(
thread
)
upload
.
updateSignal
.
connect
(
self
.
changeProcessbar
)
self
.
uploads
.
append
(
upload
)
self
.
threads
.
append
(
thread
)
thread
.
started
.
connect
(
self
.
uploads
[
-
1
]
.
run
)
thread
.
start
()
button
.
clicked
.
connect
(
lambda
checked
,
idx
=
self
.
counter
:
upload
.
resume_thread
())
print
(
self
.
counter
)
# 增加计数器
self
.
counter
+=
1
# 更新进度条
def
changeProcessbar
(
self
,
value
):
self
.
progress_bars
[
value
[
0
]]
.
setValue
(
value
[
1
])
# 从本地 upload_tag文件夹检查是否有未完成的任务,有就加载
def
check_if_has_unfinished
(
self
):
global
thread_index
un_finished_job
=
os
.
listdir
(
"./upload_tag"
)
if
len
(
un_finished_job
)
>=
1
:
for
j
in
un_finished_job
:
print
(
j
)
with
open
(
"./upload_tag"
+
"/"
+
j
,
"r+"
)
as
f
:
upload_data
=
json
.
loads
(
f
.
read
())
upload_id
=
list
(
upload_data
.
keys
())[
0
]
info
=
list
(
upload_data
.
values
())[
0
]
local_file_path
=
info
[
0
]
order_id
=
info
[
1
]
type_info
=
info
[
2
]
uuid_str
=
info
[
3
]
total_size
=
info
[
4
]
print
(
f
"{upload_id} {local_file_path}"
)
# 添加UI内容
h_layout
=
QHBoxLayout
()
# 创建进度条
progress_bar
=
QProgressBar
()
progress_bar
.
setRange
(
0
,
100
)
progress_bar
.
setValue
(
0
)
# 创建按钮
button
=
QPushButton
(
f
"继续上传"
)
# 将部件添加到水平布局
h_layout
.
addWidget
(
progress_bar
)
h_layout
.
addWidget
(
button
)
# 将水平布局添加到主布局
self
.
main_layout
.
addLayout
(
h_layout
)
self
.
progress_bars
.
append
(
progress_bar
)
self
.
buttons
.
append
(
button
)
thread
=
QThread
()
resume_thread
=
Resume_Thread
(
self
.
counter
,
(
local_file_path
,
upload_id
,
order_id
,
type_info
,
uuid_str
,
total_size
))
resume_thread
.
moveToThread
(
thread
)
resume_thread
.
updateSignal
.
connect
(
self
.
changeProcessbar
)
self
.
resume_loads
.
append
(
resume_thread
)
self
.
threads
.
append
(
thread
)
thread
.
started
.
connect
(
self
.
resume_loads
[
self
.
counter
]
.
run
)
print
(
f
"self counter {self.counter}"
)
thread
.
start
()
print
(
thread
.
isRunning
())
button
.
clicked
.
connect
(
lambda
checked
,
idx
=
self
.
counter
,
rt
=
resume_thread
:
rt
.
resume_thread
())
# wrong 因为lambda作用域
# button.clicked.connect(lambda checked, idx=self.counter: resume_thread.resume_thread())
# 增加计数器
# 增加计数器
self
.
counter
+=
1
def
closeEvent
(
self
,
event
):
self
.
destroyed
.
emit
()
OrderDetail
.
_instance
=
None
event
.
accept
()
def
upload_file
(
self
,
filename
,
order_id
,
type
):
# 显示上传进度条
self
.
program_bar
.
setVisible
(
True
)
self
.
send_data
=
0
key
=
filename
.
split
(
'/'
)[
-
1
]
self
.
uuid_str
=
str
(
uuid
.
uuid4
())
extension
=
key
.
split
(
"."
)[
-
1
]
oss_key
=
self
.
oss_prefix
+
self
.
uuid_str
+
"."
+
extension
print
(
oss_key
)
parts
=
[]
upload_id
=
bucket
.
init_multipart_upload
(
oss_key
)
.
upload_id
if
os
.
path
.
exists
(
filename
):
total_size
=
os
.
path
.
getsize
(
filename
)
self
.
total_size
=
total_size
self
.
leftBytes
=
total_size
%
part_size
print
(
total_size
)
# 小于5M直接上传
if
total_size
<=
part_size
:
with
open
(
filename
,
"rb"
)
as
fileobj
:
data
=
fileobj
.
read
()
bucket
.
put_object
(
oss_key
,
data
)
else
:
circle
=
total_size
//
part_size
# 最后一包数据
left_bytes
=
total_size
%
part_size
if
left_bytes
!=
0
:
circle
+=
1
# 逐个上传分片。
with
open
(
filename
,
'rb'
)
as
fileobj
:
part_number
=
1
offset
=
0
while
offset
<
total_size
:
num_to_upload
=
min
(
part_size
,
total_size
-
offset
)
# 全局part_number冲突导致 setText不能正常显示,去掉恢复正常
print
(
f
'正在上传第{part_number}/{circle}个分片包'
)
self
.
file_label
.
setText
(
f
'正在上传第{part_number}/{circle}个分片包'
)
self
.
file_label
.
repaint
()
# 调用SizedFileAdapter(fileobj, size)方法会生成一个新的文件对象,重新计算起始追加位置。
result
=
bucket
.
upload_part
(
oss_key
,
upload_id
,
part_number
,
SizedFileAdapter
(
fileobj
,
num_to_upload
),
progress_callback
=
self
.
upload_callback
)
parts
.
append
(
PartInfo
(
part_number
,
result
.
etag
))
offset
+=
num_to_upload
part_number
+=
1
# 完成分片上传。
# 如需在完成分片上传时设置相关Headers,请参考如下示例代码。
headers
=
dict
()
# 设置文件访问权限ACL。此处设置为OBJECT_ACL_PRIVATE,表示私有权限。
# headers["x-oss-object-acl"] = oss2.OBJECT_ACL_PRIVATE
bucket
.
complete_multipart_upload
(
oss_key
,
upload_id
,
parts
,
headers
=
headers
)
self
.
program_bar
.
setValue
(
0
)
self
.
program_bar
.
setVisible
(
False
)
self
.
file_label
.
setText
(
f
"{filename}上传完成"
)
datas
=
{
"id"
:
str
(
order_id
),
"name"
:
self
.
uuid_str
+
"."
+
extension
,
"path"
:
name_prefix
,
"info"
:
key
,
"type"
:
type
}
response
=
requests
.
post
(
callback_url
,
data
=
datas
)
res
=
response
.
json
()
if
res
[
"obj"
]
==
"保存成功"
:
self
.
file_label
.
setText
(
"回调成功"
)
class
DeviceTableModel
(
QAbstractTableModel
):
def
__init__
(
self
,
data
,
headers
,
parent
=
None
):
super
()
.
__init__
(
parent
)
self
.
_data
=
data
self
.
_headers
=
headers
self
.
_filtered_data
=
data
.
copy
()
# 添加过滤后的数据副本
def
rowCount
(
self
,
parent
=
QModelIndex
()):
return
len
(
self
.
_filtered_data
)
def
columnCount
(
self
,
parent
=
QModelIndex
()):
return
len
(
self
.
_headers
)
def
data
(
self
,
index
,
role
=
Qt
.
DisplayRole
):
if
not
index
.
isValid
():
return
None
row
=
index
.
row
()
col
=
index
.
column
()
# 表格有多少列就填写数字几
if
role
==
Qt
.
DisplayRole
:
if
col
==
10
:
# 操作列不显示文本
return
None
return
self
.
_filtered_data
[
row
][
col
]
elif
role
==
Qt
.
TextAlignmentRole
:
return
Qt
.
AlignCenter
elif
role
==
Qt
.
BackgroundRole
and
col
==
3
:
return
QColor
(
240
,
240
,
240
)
return
None
def
headerData
(
self
,
section
,
orientation
,
role
=
Qt
.
DisplayRole
):
if
orientation
==
Qt
.
Horizontal
and
role
==
Qt
.
DisplayRole
:
return
self
.
_headers
[
section
]
return
None
def
flags
(
self
,
index
):
flags
=
super
()
.
flags
(
index
)
# 表格有多少列就填写数字几
if
index
.
column
()
==
10
:
# 操作列
flags
|=
Qt
.
ItemIsEditable
return
flags
def
filter_data
(
self
,
manufacturer
):
print
(
"filter_data"
)
print
(
self
.
_data
)
"""根据厂商过滤数据"""
self
.
beginResetModel
()
print
(
manufacturer
)
if
manufacturer
==
"所有客户企业"
:
self
.
_filtered_data
=
self
.
_data
.
copy
()
else
:
self
.
_filtered_data
=
[
device
for
device
in
self
.
_data
if
device
[
2
]
==
manufacturer
]
print
(
self
.
_filtered_data
)
self
.
endResetModel
()
class
EqipInfoWindow
(
QMainWindow
):
def
__init__
(
self
):
super
()
.
__init__
()
self
.
setWindowTitle
(
"订单信息管理"
)
self
.
setGeometry
(
100
,
100
,
1500
,
655
)
# 每页订单数量
self
.
per_page_size
=
10
# 必须文件夹
if
not
os
.
path
.
exists
(
"./upload_tag"
):
os
.
mkdir
(
"./upload_tag"
)
# 详情页
self
.
detail_page
=
None
# 订单状态表
self
.
order_status
=
{
0
:
"已取消"
,
1
:
"已下单"
,
2
:
"设计中"
,
3
:
"设计完成"
,
4
:
"生成中"
,
5
:
"生产完成"
,
6
:
"售后中"
,
7
:
"售后完成"
,
8
:
"采购中"
,
9
:
"采购完成"
,
10
:
"品保中"
,
11
:
"品保完成"
,
50
:
"订单完成"
}
# 初始化第一页
datas
=
{
"start"
:
"0"
,
"draw"
:
"1"
,
"length"
:
str
(
self
.
per_page_size
)}
headers
=
{
'token'
:
token
,
'User-Agent'
:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
response
=
requests
.
post
(
order_info_url
,
headers
=
headers
,
data
=
datas
)
data1
=
response
.
json
()
# 总订单数量
list_num
=
data1
[
"recordsTotal"
]
order_property
=
[
"id"
,
"order_id"
,
"customerName"
,
"supplierName"
,
"goodModel"
,
"goodName"
,
"goodSerialNumber"
,
"demand_finish_time"
,
"expect_finish_time"
,
"order_status"
]
# 处理数据
result
=
[]
single_order
=
[]
for
j
in
data1
[
"data"
]:
for
p
in
order_property
:
if
p
==
"demand_finish_time"
or
p
==
"expect_finish_time"
:
if
j
[
p
]
is
not
None
:
timestamp
=
j
[
p
]
/
1000
str_date
=
datetime
.
datetime
.
utcfromtimestamp
(
timestamp
)
.
strftime
(
"
%
Y-
%
m-
%
d"
)
single_order
.
append
(
str_date
)
else
:
single_order
.
append
(
""
)
elif
p
==
"order_status"
:
single_order
.
append
(
self
.
order_status
[
j
[
p
]])
else
:
single_order
.
append
(
j
[
p
])
result
.
append
(
single_order
)
single_order
=
[]
print
(
result
)
self
.
devices
=
result
central_widget
=
QWidget
()
main_layout
=
QVBoxLayout
(
central_widget
)
self
.
filter_layout
=
QHBoxLayout
()
self
.
filter_label
=
QLabel
(
"筛选客户企业:"
)
self
.
brand_combo
=
QComboBox
()
# 页码选择
self
.
page_num_label
=
QLabel
(
"选择页码"
)
self
.
page_list_combo
=
QComboBox
()
self
.
filter_layout
.
addWidget
(
self
.
filter_label
)
self
.
filter_layout
.
addWidget
(
self
.
brand_combo
)
self
.
filter_layout
.
addWidget
(
self
.
page_num_label
)
self
.
filter_layout
.
addWidget
(
self
.
page_list_combo
)
self
.
filter_layout
.
addStretch
()
main_layout
.
addLayout
(
self
.
filter_layout
)
# 获取所有品牌并去重,添加"所有品牌"选项
brands
=
list
(
set
(
device
[
2
]
for
device
in
self
.
devices
))
brands
.
insert
(
0
,
"所有客户企业"
)
self
.
brand_combo
.
addItems
(
brands
)
self
.
brand_combo
.
currentTextChanged
.
connect
(
self
.
filter_devices
)
page_list
=
[
str
(
x
)
for
x
in
range
(
1
,
self
.
get_total_page
(
list_num
)
+
1
)]
self
.
page_list_combo
.
addItems
(
page_list
)
self
.
page_list_combo
.
currentTextChanged
.
connect
(
self
.
update_page_info
)
self
.
headers
=
[
"id"
,
"订单编号"
,
"客户企业名称"
,
"所属公司名称"
,
"产品型号"
,
"产品名称"
,
"产品序列号"
,
"订单需求时间"
,
"订单完成时间"
,
"订单状态"
,
"操作"
]
self
.
station_code
=
{
1
:
"设计"
,
2
:
"生产"
,
3
:
"售后"
,
4
:
"采购"
,
5
:
"品保"
}
self
.
order_status_code
=
{
1
:
"进行中"
,
2
:
"已完成"
,
0
:
"未开始"
}
# 创建模型和视图
self
.
model
=
DeviceTableModel
(
self
.
devices
,
self
.
headers
)
self
.
table_view
=
QTableView
()
self
.
table_view
.
setModel
(
self
.
model
)
# 设置表格属性
self
.
table_view
.
horizontalHeader
()
.
setSectionResizeMode
(
QHeaderView
.
Stretch
)
self
.
table_view
.
verticalHeader
()
.
setVisible
(
False
)
self
.
table_view
.
setSelectionBehavior
(
QTableView
.
SelectRows
)
self
.
table_view
.
setEditTriggers
(
QTableView
.
NoEditTriggers
)
self
.
table_view
.
setColumnHidden
(
0
,
True
)
# 为操作列添加按钮
for
row
in
range
(
len
(
self
.
devices
)):
self
.
add_operation_buttons
(
row
)
# 布局
main_layout
.
addWidget
(
self
.
table_view
)
self
.
setCentralWidget
(
central_widget
)
self
.
show
()
# 更新列表信息
def
update_page_info
(
self
,
page_num
):
page_select_num
=
int
(
page_num
)
start
=
(
page_select_num
-
1
)
*
self
.
per_page_size
datas
=
{
"start"
:
str
(
start
),
"draw"
:
str
(
page_select_num
),
"length"
:
str
(
self
.
per_page_size
)}
headers
=
{
'token'
:
token
,
'User-Agent'
:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
response
=
requests
.
post
(
order_info_url
,
headers
=
headers
,
data
=
datas
)
data1
=
response
.
json
()
order_property
=
[
"id"
,
"order_id"
,
"customerName"
,
"supplierName"
,
"goodModel"
,
"goodName"
,
"goodSerialNumber"
,
"demand_finish_time"
,
"expect_finish_time"
,
"order_status"
]
result
=
[]
single_order
=
[]
for
j
in
data1
[
"data"
]:
for
p
in
order_property
:
if
p
==
"demand_finish_time"
or
p
==
"expect_finish_time"
:
if
j
[
p
]
is
not
None
:
timestamp
=
j
[
p
]
/
1000
str_date
=
datetime
.
datetime
.
utcfromtimestamp
(
timestamp
)
.
strftime
(
"
%
Y-
%
m-
%
d"
)
single_order
.
append
(
str_date
)
else
:
single_order
.
append
(
""
)
elif
p
==
"order_status"
:
single_order
.
append
(
self
.
order_status
[
j
[
p
]])
else
:
single_order
.
append
(
j
[
p
])
print
(
len
(
single_order
))
result
.
append
(
single_order
)
single_order
=
[]
# print(result)
self
.
devices
=
result
self
.
model
=
DeviceTableModel
(
self
.
devices
,
self
.
headers
)
self
.
table_view
.
setModel
(
self
.
model
)
# 更新品牌列表
brands
=
list
(
set
(
device
[
2
]
for
device
in
self
.
devices
))
brands
.
insert
(
0
,
"所有客户企业"
)
self
.
brand_combo
.
clear
()
self
.
brand_combo
.
addItems
(
brands
)
self
.
brand_combo
.
currentTextChanged
.
connect
(
self
.
filter_devices
)
for
row
in
range
(
len
(
self
.
devices
)):
self
.
add_operation_buttons
(
row
)
def
get_total_page
(
self
,
total
):
if
total
%
self
.
per_page_size
==
0
:
return
int
(
total
/
self
.
per_page_size
)
else
:
return
int
(
total
/
self
.
per_page_size
)
+
1
# 厂商选择
def
filter_devices
(
self
,
manufacturer
):
"""根据选择的品牌过滤设备"""
print
(
"change"
)
self
.
model
.
filter_data
(
manufacturer
)
self
.
update_operation_buttons
()
def
update_operation_buttons
(
self
):
"""更新所有行的操作按钮"""
for
row
in
range
(
self
.
model
.
rowCount
()):
self
.
add_operation_buttons
(
row
)
def
add_operation_buttons
(
self
,
row
):
# 创建操作按钮
btn_edit
=
QPushButton
(
"编辑"
)
# 设置按钮样式
btn_edit
.
setStyleSheet
(
"background-color: #4CAF50; color: white;"
)
# 设置按钮大小
btn_edit
.
setFixedSize
(
60
,
25
)
# 创建按钮布局
btn_widget
=
QWidget
()
btn_layout
=
QHBoxLayout
(
btn_widget
)
btn_layout
.
addWidget
(
btn_edit
)
btn_layout
.
setContentsMargins
(
5
,
2
,
5
,
2
)
btn_layout
.
setSpacing
(
5
)
# 将按钮布局添加到表格第5列
self
.
table_view
.
setIndexWidget
(
self
.
model
.
index
(
row
,
10
),
btn_widget
)
# 连接信号
btn_edit
.
clicked
.
connect
(
lambda
_
,
r
=
row
:
self
.
edit_device
(
r
))
def
nanoseconds_to_date
(
self
,
nano_seconds
):
timestamp
=
nano_seconds
/
1000
str_date
=
datetime
.
datetime
.
utcfromtimestamp
(
timestamp
)
.
strftime
(
"
%
Y-
%
m-
%
d
%
H-
%
M-
%
S"
)
return
str_date
def
handle_close
(
self
):
self
.
detail_page
=
None
print
(
"detail page close"
)
def
edit_device
(
self
,
row
):
print
(
self
.
detail_page
)
filtered_device
=
self
.
model
.
_filtered_data
[
row
]
# 查找第一个匹配项
original_index
=
next
(
i
for
i
,
device
in
enumerate
(
self
.
devices
)
if
device
[
0
]
==
filtered_device
[
0
])
if
self
.
detail_page
is
None
:
datas
=
{
"id"
:
str
(
self
.
devices
[
original_index
][
0
])}
headers
=
{
'token'
:
token
,
'User-Agent'
:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
response
=
requests
.
post
(
order_detail_url
,
headers
=
headers
,
data
=
datas
)
data1
=
response
.
json
()
all_orders
=
[]
for
j
in
data1
[
"obj"
][
"allChilds"
]:
if
j
[
"expect_finishtime"
]
is
not
None
:
expect_date
=
self
.
nanoseconds_to_date
(
j
[
"expect_finishtime"
])
else
:
expect_date
=
""
if
j
[
"actual_finishtime"
]
is
not
None
:
actual_time
=
self
.
nanoseconds_to_date
(
j
[
"actual_finishtime"
])
else
:
actual_time
=
""
order_id
=
j
[
"id"
]
station_true_name
=
j
[
"station_ture_name"
]
if
j
[
"userName"
]
is
None
:
j
[
"userName"
]
=
""
if
j
[
"trueName"
]
is
None
:
j
[
"trueName"
]
=
""
full_name
=
j
[
"userName"
]
+
j
[
"trueName"
]
order_status
=
self
.
order_status_code
[
j
[
"order_status"
]]
all_orders
.
append
([
order_id
,
station_true_name
,
full_name
,
order_status
,
expect_date
,
actual_time
])
self
.
detail_page
=
OrderDetail
(
all_orders
)
self
.
detail_page
.
destroyed
.
connect
(
self
.
handle_close
)
self
.
detail_page
.
show
()
else
:
self
.
detail_page
.
raise_
()
self
.
detail_page
.
activateWindow
()
display_property
=
[]
# def edit_device(self, row):
# filtered_device = self.model._filtered_data[row]
#
# # 查找第一个匹配项
# original_index = next(i for i, device in enumerate(self.devices) if device[0] == filtered_device[0])
# dialog = DeviceEditDialog(self.devices[original_index], self)
# if dialog.exec_() == QDialog.Accepted:
# # 更新设备数据
# self.devices[original_index] = dialog.get_updated_data()
# 登录页
class
LoginWindow
(
QMainWindow
):
def
__init__
(
self
):
super
()
.
__init__
()
self
.
ui
=
Ui_LoginWindow
()
self
.
ui
.
setupUi
(
self
)
self
.
setWindowFlag
(
QtCore
.
Qt
.
FramelessWindowHint
)
self
.
setAttribute
(
QtCore
.
Qt
.
WA_TranslucentBackground
)
self
.
shadow
=
QtWidgets
.
QGraphicsDropShadowEffect
(
self
)
self
.
shadow
.
setOffset
(
5
,
5
)
self
.
shadow
.
setBlurRadius
(
15
)
self
.
shadow
.
setColor
(
QtCore
.
Qt
.
black
)
self
.
ui
.
frame
.
setGraphicsEffect
(
self
.
shadow
)
self
.
ui
.
login
.
clicked
.
connect
(
lambda
:
self
.
ui
.
stackedWidget_2
.
setCurrentIndex
(
0
))
self
.
ui
.
register_2
.
clicked
.
connect
(
lambda
:
self
.
ui
.
stackedWidget_2
.
setCurrentIndex
(
1
))
self
.
ui
.
pushButton_4
.
clicked
.
connect
(
self
.
login_in
)
self
.
order_info_page
=
None
self
.
show
()
def
login_in
(
self
):
account
=
self
.
ui
.
lineEdit_l_username
.
text
()
password
=
self
.
ui
.
lineEdit_l_password
.
text
()
if
len
(
account
)
==
0
or
len
(
password
)
==
0
:
self
.
ui
.
stackedWidget
.
setCurrentIndex
(
1
)
else
:
myobj
=
{
'username'
:
account
,
'password'
:
password
}
response
=
requests
.
post
(
login_url
,
data
=
myobj
)
data
=
response
.
json
()
if
data
[
'resMsg'
]
==
"登录成功"
:
print
(
"access success"
)
global
user_now
,
token
user_now
=
account
token
=
data
[
'obj'
][
'token'
]
self
.
order_info_page
=
EqipInfoWindow
()
self
.
order_info_page
.
show
()
self
.
close
()
else
:
self
.
ui
.
stackedWidget
.
setCurrentIndex
(
0
)
if
__name__
==
'__main__'
:
app
=
QApplication
(
sys
.
argv
)
win
=
LoginWindow
()
sys
.
exit
(
app
.
exec_
())
\ No newline at end of file
multipleThread/thread_resume.py
0 → 100644
View file @
2f04d179
# -*- coding: utf-8 -*-
import
time
import
requests
from
PyQt5.QtCore
import
QThread
,
pyqtSignal
,
QWaitCondition
,
QMutex
,
QObject
,
pyqtSlot
import
os.path
from
PyQt5.QtWidgets
import
QApplication
,
QMainWindow
import
sys
import
oss2
import
json
from
oss2
import
SizedFileAdapter
,
determine_part_size
import
time
import
alibabacloud_oss_v2
as
oss
import
uuid
from
oss2.models
import
PartInfo
# 切片上传大小
part_size
=
5
*
1024
*
1024
name_prefix
=
"https://qgongye.oss-cn-shanghai.aliyuncs.com
\\
upload/order"
callback_url
=
"https://uat.emku.laidecloud.com/console/productOrder/filePthSave.ajax"
# 未完成任务列表
auth
=
oss2
.
Auth
(
"LTAI3qeEHR5SP2ph"
,
"zsV3FnjVgBDhaAm23J2vdAmMuX0YFY"
)
# 填写Bucket所在地域对应的Endpoint。以华东1(上海)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint
=
"https://oss-cn-shanghai.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region
=
"cn-shanghai"
# yourBucketName填写存储空间名称。
bucket
=
oss2
.
Bucket
(
auth
,
endpoint
,
"qgongye"
,
region
=
region
)
# 未完成任务类
class
Resume_Thread
(
QObject
):
# 使用自定义信号和UI主线程通讯,参数是发送信号时附带参数的数据类型,可以是str、int、list等
finishSignal
=
pyqtSignal
(
str
)
updateSignal
=
pyqtSignal
(
tuple
)
def
__init__
(
self
,
thread_num
=
0
,
job_list
=
()):
QObject
.
__init__
(
self
)
# 要发送的文件地址
self
.
_filename
=
''
self
.
cond
=
QWaitCondition
()
self
.
mutex
=
QMutex
()
self
.
_isPause
=
True
self
.
thread_num
=
thread_num
self
.
job_list
=
job_list
self
.
send_data
=
0
self
.
leftBytes
=
0
self
.
total_size
=
0
self
.
oss_prefix
=
"upload/order/"
self
.
type_info
=
job_list
[
3
]
self
.
order_id
=
job_list
[
2
]
self
.
uuid_str
=
job_list
[
4
]
self
.
total_size
=
job_list
[
5
]
def
pause
(
self
):
self
.
_isPause
=
True
def
resume
(
self
):
self
.
_isPause
=
False
self
.
cond
.
wakeAll
()
@
property
def
filename
(
self
):
return
self
.
_filename
@
filename
.
setter
def
filename
(
self
,
value
):
self
.
_filename
=
value
# 进度条回调函数
def
upload_callback
(
self
,
bytes_uploaded
,
total_bytes
):
if
bytes_uploaded
>=
total_bytes
and
(
total_bytes
!=
self
.
leftBytes
):
self
.
send_data
+=
1
if
bytes_uploaded
==
part_size
:
rate
=
int
(
100
*
(
float
(
self
.
send_data
*
part_size
)
/
float
(
self
.
total_size
)))
else
:
rate
=
int
(
100
*
(
float
(
bytes_uploaded
+
self
.
send_data
*
part_size
)
/
float
(
self
.
total_size
)))
#print(f"{rate}% {bytes_uploaded + self.send_data * part_size} {self.send_data} {bytes_uploaded}")
self
.
updateSignal
.
emit
((
self
.
thread_num
,
rate
))
def
resume_thread
(
self
):
print
(
self
.
thread_num
)
self
.
_isPause
=
not
self
.
_isPause
if
not
self
.
_isPause
:
print
(
"thread resume"
)
self
.
cond
.
wakeAll
()
else
:
print
(
"thread stop"
)
@
pyqtSlot
()
def
run
(
self
):
# 下拉列表当前选项
part_finish_list
=
{}
local_path
=
self
.
job_list
[
0
]
print
(
local_path
)
currentItem
=
self
.
job_list
[
1
]
oss_key
=
""
# 如果有未完成的下载
if
currentItem
!=
""
:
parts
=
[]
print
(
currentItem
)
key
=
local_path
.
split
(
"/"
)[
-
1
]
extension
=
key
.
split
(
"."
)[
-
1
]
oss_key
=
self
.
oss_prefix
+
self
.
uuid_str
+
"."
+
extension
# 收集阿里云已经上传完毕的数据包
for
part_info
in
oss2
.
PartIterator
(
bucket
,
oss_key
,
currentItem
):
part_finish_list
[
part_info
.
part_number
]
=
part_info
.
etag
print
(
'part_number:'
,
part_info
.
part_number
)
parts
.
append
(
PartInfo
(
part_info
.
part_number
,
part_info
.
etag
))
self
.
send_data
=
len
(
part_finish_list
)
-
1
if
self
.
send_data
<
0
:
self
.
send_data
=
0
rate
=
int
(
100
*
(
float
(
self
.
send_data
*
part_size
)
/
float
(
self
.
total_size
)))
self
.
updateSignal
.
emit
((
self
.
thread_num
,
rate
))
# 计算总循环次数和 最后一个包的数据
total_size
=
os
.
path
.
getsize
(
local_path
)
print
(
total_size
)
circle
=
total_size
//
part_size
# 最后一包数据
left_bytes
=
total_size
%
part_size
if
left_bytes
!=
0
:
circle
+=
1
with
open
(
local_path
,
"rb"
)
as
f
:
for
j
in
range
(
1
,
circle
+
1
):
if
j
not
in
list
(
part_finish_list
.
keys
()):
self
.
mutex
.
lock
()
if
self
.
_isPause
:
self
.
cond
.
wait
(
self
.
mutex
)
# 定位到到指定文件位置
f
.
seek
((
j
-
1
)
*
part_size
)
read_size
=
min
(
part_size
,
total_size
-
part_size
*
(
j
-
1
))
content
=
f
.
read
(
read_size
)
result
=
bucket
.
upload_part
(
oss_key
,
currentItem
,
j
,
content
,
progress_callback
=
self
.
upload_callback
)
parts
.
append
(
PartInfo
(
j
,
result
.
etag
))
self
.
mutex
.
unlock
()
print
(
j
,
end
=
","
)
headers
=
dict
()
# 设置文件访问权限ACL。此处设置为OBJECT_ACL_PRIVATE,表示私有权限。
headers
[
"x-oss-object-acl"
]
=
oss2
.
OBJECT_ACL_PRIVATE
bucket
.
complete_multipart_upload
(
oss_key
,
currentItem
,
parts
,
headers
=
headers
)
key
=
local_path
.
split
(
'/'
)[
-
1
]
tmp_key_json
=
"./upload_tag/tmp_"
+
key
+
".json"
print
(
f
"文件存在:{os.path.exists(tmp_key_json)} {tmp_key_json}"
)
if
os
.
path
.
exists
(
tmp_key_json
):
os
.
remove
(
tmp_key_json
)
datas
=
{
"id"
:
str
(
self
.
order_id
),
"name"
:
self
.
uuid_str
+
"."
+
extension
,
"path"
:
name_prefix
,
"info"
:
key
,
"type"
:
self
.
type_info
}
response
=
requests
.
post
(
callback_url
,
data
=
datas
)
res
=
response
.
json
()
print
(
res
[
"obj"
])
multipleThread/thread_upload.py
0 → 100644
View file @
2f04d179
# -*- coding: utf-8 -*-
import
time
import
requests
from
PyQt5.QtCore
import
QThread
,
pyqtSignal
,
QWaitCondition
,
QMutex
,
QObject
,
pyqtSlot
import
os.path
from
PyQt5.QtWidgets
import
QApplication
,
QMainWindow
import
sys
import
oss2
import
json
from
oss2
import
SizedFileAdapter
,
determine_part_size
import
uuid
import
alibabacloud_oss_v2
as
oss
from
oss2.credentials
import
EnvironmentVariableCredentialsProvider
from
oss2.models
import
PartInfo
# 切片上传大小
part_size
=
5
*
1024
*
1024
name_prefix
=
"https://qgongye.oss-cn-shanghai.aliyuncs.com
\\
upload/order"
callback_url
=
"https://uat.emku.laidecloud.com/console/productOrder/filePthSave.ajax"
# 未完成任务列表
job_list
=
{}
auth
=
oss2
.
Auth
(
"LTAI3qeEHR5SP2ph"
,
"zsV3FnjVgBDhaAm23J2vdAmMuX0YFY"
)
# 填写Bucket所在地域对应的Endpoint。以华东1(上海)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint
=
"https://oss-cn-shanghai.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region
=
"cn-shanghai"
# yourBucketName填写存储空间名称。
bucket
=
oss2
.
Bucket
(
auth
,
endpoint
,
"qgongye"
,
region
=
region
)
# self.thread = QThread()
# self.upload = Upload_Thread()
# self.upload.filename = filename
# self.upload.moveToThread(self.thread)
# self.upload.updateSignal.connect(self.changeProcessbar)
# self.thread.started.connect(self.upload.run)
# self.thread.start()
# 定义一个线程类
class
Upload_Thread
(
QObject
):
#自定义信号声明
# 使用自定义信号和UI主线程通讯,参数是发送信号时附带参数的数据类型,可以是str、int、list等
finishSignal
=
pyqtSignal
(
str
)
updateSignal
=
pyqtSignal
(
tuple
)
def
__init__
(
self
,
thread_num
=
0
,
order_id
=
None
,
type_info
=
None
):
QObject
.
__init__
(
self
)
# 要发送的文件地址
self
.
_filename
=
''
self
.
cond
=
QWaitCondition
()
self
.
mutex
=
QMutex
()
self
.
_isPause
=
False
self
.
thread_num
=
thread_num
self
.
send_data
=
0
self
.
leftBytes
=
0
self
.
total_size
=
0
self
.
oss_prefix
=
"upload/order/"
self
.
uuid_str
=
str
(
uuid
.
uuid4
())
self
.
type_info
=
type_info
self
.
order_id
=
order_id
def
pause
(
self
):
self
.
_isPause
=
True
def
resume
(
self
):
self
.
_isPause
=
False
self
.
cond
.
wakeAll
()
@
property
def
filename
(
self
):
return
self
.
_filename
@
filename
.
setter
def
filename
(
self
,
value
):
self
.
_filename
=
value
def
resume_thread
(
self
):
print
(
self
.
thread_num
)
self
.
_isPause
=
not
self
.
_isPause
if
not
self
.
_isPause
:
print
(
"thread resume"
)
self
.
cond
.
wakeAll
()
else
:
print
(
"thread stop"
)
def
upload_callback
(
self
,
bytes_uploaded
,
total_bytes
):
if
bytes_uploaded
>=
total_bytes
and
(
total_bytes
!=
self
.
leftBytes
):
self
.
send_data
+=
1
if
bytes_uploaded
==
part_size
:
rate
=
int
(
100
*
(
float
(
self
.
send_data
*
part_size
)
/
float
(
self
.
total_size
)))
else
:
rate
=
int
(
100
*
(
float
(
bytes_uploaded
+
self
.
send_data
*
part_size
)
/
float
(
self
.
total_size
)))
#print(f"{rate}% {bytes_uploaded + self.send_data * part_size} {self.send_data} {bytes_uploaded}")
self
.
updateSignal
.
emit
((
self
.
thread_num
,
rate
))
@
pyqtSlot
()
def
run
(
self
):
print
(
"start upload thread"
)
key
=
self
.
filename
.
split
(
'/'
)[
-
1
]
extension
=
key
.
split
(
"."
)[
-
1
]
oss_key
=
self
.
oss_prefix
+
self
.
uuid_str
+
"."
+
extension
# exist = False
# 返回值为true表示文件存在,false表示文件不存在。
if
not
True
:
print
(
"server has this file"
)
#self.ui.upload_status.setText(f"{self.filename} 已经存在于阿里云OSS")
else
:
# 判断是否有碎片
print
(
'object not exist'
)
#
# if filename[-4] == '.':
# json_name = filename[:-4]
# 如果没有上传完毕就把{filename:upload_id}的json文件放在upload_tag里
# if os.path.exists("./upload_tag/"+json_name+".json"):
# #找碎片
# pass
# else:
# pass
parts
=
[]
total_size
=
os
.
path
.
getsize
(
self
.
filename
)
self
.
total_size
=
total_size
self
.
leftBytes
=
total_size
%
part_size
self
.
send_data
=
0
upload_id
=
bucket
.
init_multipart_upload
(
oss_key
)
.
upload_id
print
(
upload_id
)
with
open
(
"./upload_tag/tmp_"
+
key
+
".json"
,
"w+"
)
as
f
:
json
.
dump
({
upload_id
:
[
self
.
filename
,
self
.
order_id
,
self
.
type_info
,
self
.
uuid_str
,
self
.
total_size
]},
f
)
if
os
.
path
.
exists
(
self
.
filename
):
total_size
=
os
.
path
.
getsize
(
self
.
filename
)
print
(
total_size
)
circle
=
total_size
//
part_size
# 最后一包数据
left_bytes
=
total_size
%
part_size
if
left_bytes
!=
0
:
circle
+=
1
# 逐个上传分片。
with
open
(
self
.
filename
,
'rb'
)
as
fileobj
:
part_number
=
1
offset
=
0
# self.ui.progressBar1.setVisible(True)
while
offset
<
total_size
:
self
.
mutex
.
lock
()
if
self
.
_isPause
:
self
.
cond
.
wait
(
self
.
mutex
)
num_to_upload
=
min
(
part_size
,
total_size
-
offset
)
# self.ui.upload_status.setText(f'正在上传第{part_number}/{circle}个分片包')
# 调用SizedFileAdapter(fileobj, size)方法会生成一个新的文件对象,重新计算起始追加位置。
result
=
bucket
.
upload_part
(
oss_key
,
upload_id
,
part_number
,
SizedFileAdapter
(
fileobj
,
num_to_upload
),
progress_callback
=
self
.
upload_callback
)
parts
.
append
(
PartInfo
(
part_number
,
result
.
etag
))
offset
+=
num_to_upload
part_number
+=
1
# if part_number == 2:
# self._isPause = True
self
.
mutex
.
unlock
()
# 完成分片上传。
# 如需在完成分片上传时设置相关Headers,请参考如下示例代码。
headers
=
dict
()
# 设置文件访问权限ACL。此处设置为OBJECT_ACL_PRIVATE,表示私有权限。
# headers["x-oss-object-acl"] = oss2.OBJECT_ACL_PRIVATE
bucket
.
complete_multipart_upload
(
oss_key
,
upload_id
,
parts
,
headers
=
headers
)
if
os
.
path
.
exists
(
"./upload_tag/tmp_"
+
key
+
".json"
):
os
.
remove
(
"./upload_tag/tmp_"
+
key
+
".json"
)
datas
=
{
"id"
:
str
(
self
.
order_id
),
"name"
:
self
.
uuid_str
+
"."
+
extension
,
"path"
:
name_prefix
,
"info"
:
key
,
"type"
:
self
.
type_info
}
response
=
requests
.
post
(
callback_url
,
data
=
datas
)
res
=
response
.
json
()
print
(
res
[
"obj"
])
res.qrc
0 → 100644
View file @
2f04d179
<RCC>
<qresource prefix="icons">
<file>icons/mini.svg</file>
<file>icons/quit.svg</file>
<file>icons/dog.svg</file>
<file>icons/baidu.svg</file>
<file>icons/bili.svg</file>
<file>icons/close.svg</file>
<file>icons/login.svg</file>
<file>icons/register.svg</file>
</qresource>
</RCC>
res_rc.py
0 → 100644
View file @
2f04d179
# -*- 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\x02\x76\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x37\
\x34\x37\x31\x31\x35\x32\x31\x30\x35\x37\x38\x22\x20\x63\x6c\x61\
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x33\x36\x31\x33\x22\x20\x78\
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\x3d\
\x22\x32\x30\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x30\
\x30\x22\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\x33\
\x2e\x33\x33\x33\x33\x33\x33\x20\x31\x32\x38\x68\x2d\x32\x35\x36\
\x56\x34\x32\x2e\x36\x36\x36\x36\x36\x37\x68\x33\x34\x31\x2e\x33\
\x33\x33\x33\x33\x34\x76\x39\x33\x38\x2e\x36\x36\x36\x36\x36\x36\
\x68\x2d\x33\x34\x31\x2e\x33\x33\x33\x33\x33\x34\x76\x2d\x38\x35\
\x2e\x33\x33\x33\x33\x33\x33\x68\x32\x35\x36\x7a\x22\x20\x66\x69\
\x6c\x6c\x3d\x22\x23\x32\x45\x32\x46\x33\x30\x22\x20\x70\x2d\x69\
\x64\x3d\x22\x33\x36\x31\x34\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\
\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x36\x35\x32\x2e\x31\x36\
\x20\x34\x36\x39\x2e\x33\x33\x33\x33\x33\x33\x4c\x35\x31\x32\x20\
\x33\x31\x39\x2e\x34\x34\x35\x33\x33\x33\x20\x35\x37\x31\x2e\x33\
\x30\x36\x36\x36\x37\x20\x32\x35\x36\x20\x38\x31\x30\x2e\x36\x36\
\x36\x36\x36\x37\x20\x35\x31\x32\x6c\x2d\x32\x33\x39\x2e\x33\x36\
\x20\x32\x35\x36\x4c\x35\x31\x32\x20\x37\x30\x34\x2e\x35\x35\x34\
\x36\x36\x37\x20\x36\x35\x32\x2e\x31\x36\x20\x35\x35\x34\x2e\x36\
\x36\x36\x36\x36\x37\x48\x38\x35\x2e\x33\x33\x33\x33\x33\x33\x76\
\x2d\x38\x35\x2e\x33\x33\x33\x33\x33\x34\x7a\x22\x20\x66\x69\x6c\
\x6c\x3d\x22\x23\x32\x45\x32\x46\x33\x30\x22\x20\x70\x2d\x69\x64\
\x3d\x22\x33\x36\x31\x35\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\
\x2f\x73\x76\x67\x3e\
\x00\x00\x04\xd0\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x37\
\x34\x37\x31\x32\x33\x36\x34\x39\x34\x39\x33\x22\x20\x63\x6c\x61\
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x34\x36\x35\x22\x20\x78\
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\x3d\
\x22\x32\x30\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x30\
\x30\x22\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\x33\x33\
\x2e\x33\x33\x33\x33\x33\x33\x20\x36\x34\x61\x32\x31\x2e\x33\x33\
\x33\x33\x33\x33\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x30\
\x20\x30\x20\x31\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x34\x20\x32\
\x31\x2e\x33\x33\x33\x33\x33\x33\x76\x34\x32\x2e\x36\x36\x36\x36\
\x36\x37\x61\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x32\x31\x2e\
\x33\x33\x33\x33\x33\x33\x20\x30\x20\x30\x20\x31\x2d\x32\x31\x2e\
\x33\x33\x33\x33\x33\x34\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\
\x48\x31\x37\x30\x2e\x36\x36\x36\x36\x36\x37\x76\x37\x32\x35\x2e\
\x33\x33\x33\x33\x33\x34\x68\x33\x36\x32\x2e\x36\x36\x36\x36\x36\
\x36\x61\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x32\x31\x2e\x33\
\x33\x33\x33\x33\x33\x20\x30\x20\x30\x20\x31\x20\x32\x31\x2e\x33\
\x33\x33\x33\x33\x34\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x76\
\x34\x32\x2e\x36\x36\x36\x36\x36\x37\x61\x32\x31\x2e\x33\x33\x33\
\x33\x33\x33\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x30\x20\
\x30\x20\x31\x2d\x32\x31\x2e\x33\x33\x33\x33\x33\x34\x20\x32\x31\
\x2e\x33\x33\x33\x33\x33\x33\x48\x31\x37\x30\x2e\x36\x36\x36\x36\
\x36\x37\x61\x38\x35\x2e\x33\x33\x33\x33\x33\x33\x20\x38\x35\x2e\
\x33\x33\x33\x33\x33\x33\x20\x30\x20\x30\x20\x31\x2d\x38\x35\x2e\
\x32\x32\x36\x36\x36\x37\x2d\x38\x31\x2e\x30\x36\x36\x36\x36\x37\
\x4c\x38\x35\x2e\x33\x33\x33\x33\x33\x33\x20\x38\x37\x34\x2e\x36\
\x36\x36\x36\x36\x37\x56\x31\x34\x39\x2e\x33\x33\x33\x33\x33\x33\
\x61\x38\x35\x2e\x33\x33\x33\x33\x33\x33\x20\x38\x35\x2e\x33\x33\
\x33\x33\x33\x33\x20\x30\x20\x30\x20\x31\x20\x38\x31\x2e\x30\x36\
\x36\x36\x36\x37\x2d\x38\x35\x2e\x32\x32\x36\x36\x36\x36\x4c\x31\
\x37\x30\x2e\x36\x36\x36\x36\x36\x37\x20\x36\x34\x68\x33\x36\x32\
\x2e\x36\x36\x36\x36\x36\x36\x7a\x20\x6d\x31\x39\x34\x2e\x35\x38\
\x31\x33\x33\x34\x20\x32\x31\x39\x2e\x35\x38\x34\x6c\x31\x38\x33\
\x2e\x31\x36\x38\x20\x31\x38\x33\x2e\x31\x36\x38\x61\x36\x34\x20\
\x36\x34\x20\x30\x20\x30\x20\x31\x20\x32\x2e\x38\x38\x20\x38\x37\
\x2e\x34\x32\x34\x6c\x2d\x32\x2e\x38\x38\x20\x33\x2e\x30\x37\x32\
\x2d\x31\x38\x33\x2e\x31\x36\x38\x20\x31\x38\x33\x2e\x31\x36\x38\
\x61\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x32\x31\x2e\x33\x33\
\x33\x33\x33\x33\x20\x30\x20\x30\x20\x31\x2d\x33\x30\x2e\x31\x36\
\x35\x33\x33\x34\x20\x30\x6c\x2d\x33\x30\x2e\x31\x36\x35\x33\x33\
\x33\x2d\x33\x30\x2e\x31\x36\x35\x33\x33\x33\x61\x32\x31\x2e\x33\
\x33\x33\x33\x33\x33\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x20\
\x30\x20\x30\x20\x31\x20\x30\x2d\x33\x30\x2e\x31\x36\x35\x33\x33\
\x34\x4c\x37\x39\x32\x2e\x39\x36\x20\x35\x35\x34\x2e\x36\x36\x36\
\x36\x36\x37\x48\x33\x36\x32\x2e\x36\x36\x36\x36\x36\x37\x61\x32\
\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x32\x31\x2e\x33\x33\x33\x33\
\x33\x33\x20\x30\x20\x30\x20\x31\x2d\x32\x31\x2e\x33\x33\x33\x33\
\x33\x34\x2d\x32\x31\x2e\x33\x33\x33\x33\x33\x34\x76\x2d\x34\x32\
\x2e\x36\x36\x36\x36\x36\x36\x61\x32\x31\x2e\x33\x33\x33\x33\x33\
\x33\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x30\x20\x30\x20\
\x31\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x34\x2d\x32\x31\x2e\x33\
\x33\x33\x33\x33\x34\x68\x34\x33\x30\x2e\x32\x39\x33\x33\x33\x33\
\x6c\x2d\x31\x32\x35\x2e\x33\x37\x36\x2d\x31\x32\x35\x2e\x34\x31\
\x38\x36\x36\x36\x61\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x32\
\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x30\x20\x30\x20\x31\x20\x30\
\x2d\x33\x30\x2e\x31\x36\x35\x33\x33\x34\x6c\x33\x30\x2e\x31\x36\
\x35\x33\x33\x33\x2d\x33\x30\x2e\x31\x36\x35\x33\x33\x33\x61\x32\
\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x32\x31\x2e\x33\x33\x33\x33\
\x33\x33\x20\x30\x20\x30\x20\x31\x20\x33\x30\x2e\x31\x36\x35\x33\
\x33\x34\x20\x30\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x32\x32\
\x32\x34\x32\x39\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x34\x36\x36\
\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x2f\x73\x76\x67\x3e\
\x00\x00\x0d\xd6\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x37\
\x34\x37\x31\x31\x35\x32\x34\x36\x35\x31\x36\x22\x20\x63\x6c\x61\
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x36\x35\x38\x36\x22\x20\x78\
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\x3d\
\x22\x32\x30\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x30\
\x30\x22\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x37\x32\x39\
\x2e\x33\x32\x38\x36\x34\x20\x33\x37\x33\x2e\x39\x34\x39\x34\x34\
\x63\x2d\x39\x2e\x37\x39\x34\x35\x36\x2d\x35\x2e\x39\x34\x34\x33\
\x32\x2d\x31\x39\x2e\x30\x36\x31\x37\x36\x2d\x36\x2e\x37\x38\x34\
\x2d\x31\x39\x2e\x31\x34\x33\x36\x38\x2d\x36\x2e\x37\x38\x34\x6c\
\x2d\x31\x2e\x30\x36\x34\x39\x36\x2d\x30\x2e\x30\x35\x31\x32\x63\
\x2d\x35\x37\x2e\x32\x30\x30\x36\x34\x2d\x33\x2e\x38\x36\x35\x36\
\x2d\x31\x32\x31\x2e\x31\x36\x34\x38\x2d\x35\x2e\x38\x33\x31\x36\
\x38\x2d\x31\x39\x30\x2e\x31\x32\x36\x30\x38\x2d\x35\x2e\x38\x33\
\x31\x36\x38\x6c\x2d\x31\x33\x2e\x39\x38\x37\x38\x34\x20\x30\x2e\
\x30\x30\x35\x31\x32\x63\x2d\x36\x38\x2e\x39\x35\x36\x31\x36\x20\
\x30\x2d\x31\x33\x32\x2e\x39\x32\x35\x34\x34\x20\x31\x2e\x39\x36\
\x30\x39\x36\x2d\x31\x39\x30\x2e\x31\x32\x30\x39\x36\x20\x35\x2e\
\x38\x33\x31\x36\x38\x6c\x2d\x31\x2e\x30\x36\x34\x39\x36\x20\x30\
\x2e\x30\x35\x31\x32\x63\x2d\x30\x2e\x30\x38\x31\x39\x32\x20\x30\
\x2d\x39\x2e\x33\x34\x39\x31\x32\x20\x30\x2e\x38\x33\x39\x36\x38\
\x2d\x31\x39\x2e\x31\x34\x33\x36\x38\x20\x36\x2e\x37\x38\x34\x2d\
\x31\x35\x2e\x30\x34\x37\x36\x38\x20\x39\x2e\x31\x32\x38\x39\x36\
\x2d\x32\x34\x2e\x32\x37\x33\x39\x32\x20\x32\x35\x2e\x39\x34\x38\
\x31\x36\x2d\x32\x37\x2e\x34\x31\x37\x36\x20\x34\x39\x2e\x39\x37\
\x31\x32\x2d\x31\x30\x2e\x30\x37\x31\x30\x34\x20\x37\x36\x2e\x39\
\x31\x32\x36\x34\x2d\x34\x2e\x33\x38\x32\x37\x32\x20\x31\x37\x33\
\x2e\x36\x34\x39\x39\x32\x20\x30\x2e\x31\x38\x39\x34\x34\x20\x32\
\x35\x31\x2e\x33\x39\x32\x20\x32\x2e\x39\x33\x38\x38\x38\x20\x34\
\x39\x2e\x39\x36\x36\x30\x38\x20\x33\x33\x2e\x34\x30\x38\x20\x36\
\x32\x2e\x34\x35\x38\x38\x38\x20\x38\x35\x2e\x30\x34\x38\x33\x32\
\x20\x36\x37\x2e\x31\x34\x38\x38\x20\x31\x30\x2e\x37\x38\x32\x37\
\x32\x20\x30\x2e\x39\x38\x38\x31\x36\x20\x36\x39\x2e\x30\x38\x39\
\x32\x38\x20\x35\x2e\x38\x36\x37\x35\x32\x20\x31\x35\x39\x2e\x35\
\x30\x38\x34\x38\x20\x35\x2e\x38\x39\x33\x31\x32\x76\x2d\x30\x2e\
\x30\x30\x35\x31\x32\x63\x39\x30\x2e\x34\x31\x39\x32\x2d\x30\x2e\
\x30\x32\x30\x34\x38\x20\x31\x34\x38\x2e\x37\x32\x35\x37\x36\x2d\
\x34\x2e\x39\x30\x34\x39\x36\x20\x31\x35\x39\x2e\x35\x31\x33\x36\
\x2d\x35\x2e\x38\x38\x38\x20\x35\x31\x2e\x36\x34\x30\x33\x32\x2d\
\x34\x2e\x36\x38\x39\x39\x32\x20\x38\x32\x2e\x31\x30\x39\x34\x34\
\x2d\x31\x37\x2e\x31\x38\x32\x37\x32\x20\x38\x35\x2e\x30\x34\x33\
\x32\x2d\x36\x37\x2e\x31\x34\x38\x38\x20\x34\x2e\x35\x37\x37\x32\
\x38\x2d\x37\x37\x2e\x37\x34\x32\x30\x38\x20\x31\x30\x2e\x32\x36\
\x30\x34\x38\x2d\x31\x37\x34\x2e\x34\x37\x39\x33\x36\x20\x30\x2e\
\x31\x38\x39\x34\x34\x2d\x32\x35\x31\x2e\x33\x39\x32\x2d\x33\x2e\
\x31\x34\x38\x38\x2d\x32\x34\x2e\x30\x32\x38\x31\x36\x2d\x31\x32\
\x2e\x33\x37\x35\x30\x34\x2d\x34\x30\x2e\x38\x34\x37\x33\x36\x2d\
\x32\x37\x2e\x34\x32\x32\x37\x32\x2d\x34\x39\x2e\x39\x37\x36\x33\
\x32\x7a\x20\x6d\x2d\x33\x39\x30\x2e\x39\x38\x38\x38\x20\x31\x37\
\x32\x2e\x37\x31\x38\x30\x38\x61\x32\x33\x2e\x36\x34\x39\x32\x38\
\x20\x32\x33\x2e\x36\x34\x39\x32\x38\x20\x30\x20\x30\x20\x31\x2d\
\x33\x31\x2e\x36\x38\x37\x36\x38\x2d\x31\x30\x2e\x38\x34\x34\x31\
\x36\x20\x32\x33\x2e\x36\x38\x20\x32\x33\x2e\x36\x38\x20\x30\x20\
\x30\x20\x31\x20\x31\x30\x2e\x38\x34\x34\x31\x36\x2d\x33\x31\x2e\
\x36\x38\x37\x36\x38\x63\x32\x2e\x30\x33\x37\x37\x36\x2d\x31\x2e\
\x30\x30\x33\x35\x32\x20\x35\x30\x2e\x36\x39\x33\x31\x32\x2d\x32\
\x34\x2e\x37\x32\x34\x34\x38\x20\x31\x31\x30\x2e\x35\x34\x30\x38\
\x2d\x34\x33\x2e\x30\x36\x34\x33\x32\x61\x32\x33\x2e\x36\x38\x20\
\x32\x33\x2e\x36\x38\x20\x30\x20\x31\x20\x31\x20\x31\x33\x2e\x38\
\x38\x30\x33\x32\x20\x34\x35\x2e\x32\x39\x31\x35\x32\x63\x2d\x35\
\x36\x2e\x32\x39\x34\x34\x20\x31\x37\x2e\x32\x34\x39\x32\x38\x2d\
\x31\x30\x33\x2e\x31\x31\x31\x36\x38\x20\x34\x30\x2e\x30\x37\x34\
\x32\x34\x2d\x31\x30\x33\x2e\x35\x37\x37\x36\x20\x34\x30\x2e\x33\
\x30\x34\x36\x34\x7a\x20\x6d\x32\x36\x38\x2e\x38\x39\x37\x32\x38\
\x20\x33\x35\x2e\x38\x38\x36\x30\x38\x63\x2d\x30\x2e\x34\x34\x30\
\x33\x32\x20\x32\x2e\x32\x33\x32\x33\x32\x2d\x31\x31\x2e\x32\x36\
\x39\x31\x32\x20\x35\x34\x2e\x36\x34\x30\x36\x34\x2d\x35\x30\x2e\
\x39\x33\x38\x38\x38\x20\x35\x34\x2e\x36\x34\x30\x36\x34\x2d\x32\
\x31\x2e\x34\x34\x32\x35\x36\x20\x30\x2d\x33\x36\x2e\x31\x30\x31\
\x31\x32\x2d\x31\x34\x2e\x30\x34\x39\x32\x38\x2d\x34\x34\x2e\x39\
\x38\x34\x33\x32\x2d\x32\x36\x2e\x37\x37\x32\x34\x38\x2d\x38\x2e\
\x36\x39\x33\x37\x36\x20\x31\x32\x2e\x37\x30\x37\x38\x34\x2d\x32\
\x32\x2e\x38\x30\x34\x34\x38\x20\x32\x36\x2e\x37\x37\x32\x34\x38\
\x2d\x34\x32\x2e\x36\x35\x34\x37\x32\x20\x32\x36\x2e\x37\x37\x32\
\x34\x38\x2d\x33\x35\x2e\x35\x33\x32\x38\x20\x30\x2d\x35\x30\x2e\
\x31\x33\x35\x30\x34\x2d\x34\x38\x2e\x32\x36\x36\x32\x34\x2d\x35\
\x31\x2e\x36\x38\x31\x32\x38\x2d\x35\x33\x2e\x37\x37\x30\x32\x34\
\x61\x31\x31\x2e\x33\x36\x36\x34\x20\x31\x31\x2e\x33\x36\x36\x34\
\x20\x30\x20\x30\x20\x31\x20\x32\x31\x2e\x38\x37\x37\x37\x36\x2d\
\x36\x2e\x31\x36\x39\x36\x63\x32\x2e\x37\x34\x39\x34\x34\x20\x39\
\x2e\x36\x35\x31\x32\x20\x31\x34\x2e\x31\x33\x31\x32\x20\x33\x37\
\x2e\x32\x30\x31\x39\x32\x20\x32\x39\x2e\x37\x39\x38\x34\x20\x33\
\x37\x2e\x32\x30\x31\x39\x32\x20\x31\x36\x2e\x33\x37\x33\x37\x36\
\x20\x30\x20\x32\x38\x2e\x38\x39\x32\x31\x36\x2d\x32\x33\x2e\x36\
\x34\x34\x31\x36\x20\x33\x31\x2e\x39\x38\x34\x36\x34\x2d\x33\x31\
\x2e\x39\x32\x38\x33\x32\x61\x31\x31\x2e\x33\x37\x31\x35\x32\x20\
\x31\x31\x2e\x33\x37\x31\x35\x32\x20\x30\x20\x30\x20\x31\x20\x31\
\x30\x2e\x36\x34\x39\x36\x2d\x37\x2e\x33\x38\x38\x31\x36\x68\x30\
\x2e\x30\x36\x31\x34\x34\x63\x34\x2e\x37\x36\x36\x37\x32\x20\x30\
\x2e\x30\x33\x30\x37\x32\x20\x39\x2e\x30\x31\x31\x32\x20\x33\x2e\
\x30\x32\x35\x39\x32\x20\x31\x30\x2e\x36\x32\x39\x31\x32\x20\x37\
\x2e\x35\x30\x35\x39\x32\x20\x30\x2e\x31\x30\x37\x35\x32\x20\x30\
\x2e\x32\x38\x36\x37\x32\x20\x31\x31\x2e\x39\x36\x35\x34\x34\x20\
\x33\x31\x2e\x38\x31\x35\x36\x38\x20\x33\x34\x2e\x33\x31\x34\x32\
\x34\x20\x33\x31\x2e\x38\x31\x35\x36\x38\x20\x32\x30\x2e\x38\x36\
\x34\x20\x30\x20\x32\x38\x2e\x35\x36\x34\x34\x38\x2d\x33\x35\x2e\
\x39\x35\x32\x36\x34\x20\x32\x38\x2e\x36\x34\x31\x32\x38\x2d\x33\
\x36\x2e\x33\x32\x31\x32\x38\x61\x31\x31\x2e\x33\x34\x35\x39\x32\
\x20\x31\x31\x2e\x33\x34\x35\x39\x32\x20\x30\x20\x30\x20\x31\x20\
\x31\x33\x2e\x33\x35\x38\x30\x38\x2d\x38\x2e\x39\x33\x39\x35\x32\
\x20\x31\x31\x2e\x33\x36\x31\x32\x38\x20\x31\x31\x2e\x33\x36\x31\
\x32\x38\x20\x30\x20\x30\x20\x31\x20\x38\x2e\x39\x34\x34\x36\x34\
\x20\x31\x33\x2e\x33\x35\x32\x39\x36\x7a\x20\x6d\x31\x31\x30\x2e\
\x31\x31\x35\x38\x34\x2d\x34\x36\x2e\x37\x33\x35\x33\x36\x61\x32\
\x33\x2e\x36\x38\x20\x32\x33\x2e\x36\x38\x20\x30\x20\x30\x20\x31\
\x2d\x33\x31\x2e\x36\x38\x32\x35\x36\x20\x31\x30\x2e\x38\x34\x34\
\x31\x36\x63\x2d\x30\x2e\x34\x37\x31\x30\x34\x2d\x30\x2e\x32\x33\
\x30\x34\x2d\x34\x37\x2e\x34\x37\x32\x36\x34\x2d\x32\x33\x2e\x31\
\x31\x36\x38\x2d\x31\x30\x33\x2e\x35\x37\x32\x34\x38\x2d\x34\x30\
\x2e\x33\x30\x39\x37\x36\x61\x32\x33\x2e\x36\x39\x30\x32\x34\x20\
\x32\x33\x2e\x36\x39\x30\x32\x34\x20\x30\x20\x30\x20\x31\x2d\x31\
\x35\x2e\x37\x30\x38\x31\x36\x2d\x32\x39\x2e\x35\x38\x33\x33\x36\
\x20\x32\x33\x2e\x36\x36\x39\x37\x36\x20\x32\x33\x2e\x36\x36\x39\
\x37\x36\x20\x30\x20\x30\x20\x31\x20\x32\x39\x2e\x35\x37\x38\x32\
\x34\x2d\x31\x35\x2e\x37\x30\x33\x30\x34\x63\x35\x39\x2e\x38\x34\
\x37\x36\x38\x20\x31\x38\x2e\x33\x33\x39\x38\x34\x20\x31\x30\x38\
\x2e\x34\x39\x37\x39\x32\x20\x34\x32\x2e\x30\x36\x30\x38\x20\x31\
\x31\x30\x2e\x35\x35\x31\x30\x34\x20\x34\x33\x2e\x30\x36\x34\x33\
\x32\x61\x32\x33\x2e\x36\x38\x20\x32\x33\x2e\x36\x38\x20\x30\x20\
\x30\x20\x31\x20\x31\x30\x2e\x38\x33\x33\x39\x32\x20\x33\x31\x2e\
\x36\x38\x37\x36\x38\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\
\x31\x36\x43\x38\x44\x22\x20\x70\x2d\x69\x64\x3d\x22\x36\x35\x38\
\x37\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\
\x64\x3d\x22\x4d\x38\x34\x39\x2e\x39\x32\x20\x35\x31\x2e\x32\x48\
\x31\x37\x34\x2e\x30\x38\x63\x2d\x36\x37\x2e\x38\x36\x35\x36\x20\
\x30\x2d\x31\x32\x32\x2e\x38\x38\x20\x35\x35\x2e\x30\x31\x34\x34\
\x2d\x31\x32\x32\x2e\x38\x38\x20\x31\x32\x32\x2e\x38\x38\x76\x36\
\x37\x35\x2e\x38\x34\x63\x30\x20\x36\x37\x2e\x38\x37\x30\x37\x32\
\x20\x35\x35\x2e\x30\x31\x34\x34\x20\x31\x32\x32\x2e\x38\x38\x20\
\x31\x32\x32\x2e\x38\x38\x20\x31\x32\x32\x2e\x38\x38\x68\x36\x37\
\x35\x2e\x38\x34\x63\x36\x37\x2e\x38\x37\x30\x37\x32\x20\x30\x20\
\x31\x32\x32\x2e\x38\x38\x2d\x35\x35\x2e\x30\x30\x39\x32\x38\x20\
\x31\x32\x32\x2e\x38\x38\x2d\x31\x32\x32\x2e\x38\x38\x56\x31\x37\
\x34\x2e\x30\x38\x63\x30\x2d\x36\x37\x2e\x38\x36\x30\x34\x38\x2d\
\x35\x35\x2e\x30\x30\x39\x32\x38\x2d\x31\x32\x32\x2e\x38\x38\x2d\
\x31\x32\x32\x2e\x38\x38\x2d\x31\x32\x32\x2e\x38\x38\x7a\x20\x6d\
\x2d\x33\x36\x2e\x36\x30\x32\x38\x38\x20\x36\x32\x37\x2e\x34\x35\
\x30\x38\x38\x63\x2d\x32\x2e\x36\x32\x36\x35\x36\x20\x34\x34\x2e\
\x35\x37\x39\x38\x34\x2d\x32\x31\x2e\x38\x32\x31\x34\x34\x20\x37\
\x38\x2e\x36\x33\x32\x39\x36\x2d\x35\x35\x2e\x35\x31\x36\x31\x36\
\x20\x39\x38\x2e\x34\x38\x38\x33\x32\x2d\x32\x35\x2e\x36\x38\x31\
\x39\x32\x20\x31\x35\x2e\x31\x33\x34\x37\x32\x2d\x35\x34\x2e\x31\
\x37\x34\x37\x32\x20\x31\x39\x2e\x34\x38\x36\x37\x32\x2d\x38\x31\
\x2e\x31\x33\x36\x36\x34\x20\x32\x31\x2e\x39\x33\x39\x32\x2d\x33\
\x32\x2e\x34\x35\x35\x36\x38\x20\x32\x2e\x39\x34\x39\x31\x32\x2d\
\x39\x32\x2e\x37\x31\x38\x30\x38\x20\x36\x2e\x30\x39\x37\x39\x32\
\x2d\x31\x36\x34\x2e\x36\x36\x34\x33\x32\x20\x36\x2e\x31\x31\x38\
\x34\x2d\x37\x31\x2e\x39\x34\x31\x31\x32\x2d\x30\x2e\x30\x32\x30\
\x34\x38\x2d\x31\x33\x32\x2e\x32\x30\x38\x36\x34\x2d\x33\x2e\x31\
\x36\x34\x31\x36\x2d\x31\x36\x34\x2e\x36\x36\x34\x33\x32\x2d\x36\
\x2e\x31\x31\x38\x34\x2d\x32\x36\x2e\x39\x36\x31\x39\x32\x2d\x32\
\x2e\x34\x35\x32\x34\x38\x2d\x35\x35\x2e\x34\x35\x34\x37\x32\x2d\
\x36\x2e\x38\x30\x34\x34\x38\x2d\x38\x31\x2e\x31\x33\x31\x35\x32\
\x2d\x32\x31\x2e\x39\x33\x39\x32\x2d\x33\x33\x2e\x36\x39\x34\x37\
\x32\x2d\x31\x39\x2e\x38\x35\x35\x33\x36\x2d\x35\x32\x2e\x38\x38\
\x39\x36\x2d\x35\x33\x2e\x39\x30\x33\x33\x36\x2d\x35\x35\x2e\x35\
\x31\x31\x30\x34\x2d\x39\x38\x2e\x34\x38\x33\x32\x2d\x34\x2e\x37\
\x30\x35\x32\x38\x2d\x38\x30\x2e\x31\x33\x33\x31\x32\x2d\x31\x30\
\x2e\x35\x37\x32\x38\x2d\x31\x37\x39\x2e\x38\x35\x35\x33\x36\x20\
\x30\x2e\x31\x39\x34\x35\x36\x2d\x32\x36\x32\x2e\x31\x30\x38\x31\
\x36\x43\x32\x32\x31\x2e\x35\x34\x32\x34\x20\x33\x33\x35\x2e\x31\
\x36\x35\x34\x34\x20\x32\x38\x30\x2e\x39\x39\x30\x37\x32\x20\x33\
\x31\x31\x2e\x35\x37\x32\x34\x38\x20\x33\x31\x31\x2e\x35\x30\x30\
\x38\x20\x33\x31\x30\x2e\x33\x37\x39\x35\x32\x61\x32\x34\x38\x32\
\x2e\x36\x34\x31\x39\x32\x20\x32\x34\x38\x32\x2e\x36\x34\x31\x39\
\x32\x20\x30\x20\x30\x20\x31\x20\x38\x31\x2e\x34\x32\x33\x33\x36\
\x2d\x34\x2e\x30\x38\x35\x37\x36\x63\x2d\x37\x2e\x35\x33\x36\x36\
\x34\x2d\x38\x2e\x35\x33\x35\x30\x34\x2d\x31\x39\x2e\x38\x38\x30\
\x39\x36\x2d\x32\x33\x2e\x33\x32\x31\x36\x2d\x32\x38\x2e\x38\x31\
\x35\x33\x36\x2d\x33\x38\x2e\x31\x31\x33\x32\x38\x2d\x31\x33\x2e\
\x37\x33\x36\x39\x36\x2d\x32\x32\x2e\x37\x33\x37\x39\x32\x20\x38\
\x2e\x35\x32\x39\x39\x32\x2d\x34\x31\x2e\x36\x38\x37\x30\x34\x20\
\x38\x2e\x35\x32\x39\x39\x32\x2d\x34\x31\x2e\x36\x38\x37\x30\x34\
\x73\x32\x33\x2e\x36\x38\x2d\x32\x30\x2e\x33\x36\x37\x33\x36\x20\
\x34\x34\x2e\x35\x32\x38\x36\x34\x20\x35\x2e\x32\x31\x32\x31\x36\
\x63\x31\x35\x2e\x36\x39\x37\x39\x32\x20\x31\x39\x2e\x32\x36\x36\
\x35\x36\x20\x33\x38\x2e\x33\x37\x39\x35\x32\x20\x35\x35\x2e\x39\
\x39\x37\x34\x34\x20\x34\x38\x2e\x36\x31\x39\x35\x32\x20\x37\x32\
\x2e\x39\x35\x34\x38\x38\x6c\x35\x33\x2e\x32\x30\x37\x30\x34\x2d\
\x30\x2e\x32\x31\x35\x30\x34\x63\x31\x33\x2e\x32\x36\x30\x38\x20\
\x30\x20\x32\x36\x2e\x33\x33\x32\x31\x36\x20\x30\x2e\x30\x37\x31\
\x36\x38\x20\x33\x39\x2e\x32\x31\x39\x32\x20\x30\x2e\x32\x31\x35\
\x30\x34\x20\x31\x30\x2e\x32\x34\x2d\x31\x36\x2e\x39\x35\x37\x34\
\x34\x20\x33\x32\x2e\x39\x32\x31\x36\x2d\x35\x33\x2e\x36\x38\x33\
\x32\x20\x34\x38\x2e\x36\x31\x39\x35\x32\x2d\x37\x32\x2e\x39\x35\
\x34\x38\x38\x20\x32\x30\x2e\x38\x34\x33\x35\x32\x2d\x32\x35\x2e\
\x35\x37\x39\x35\x32\x20\x34\x34\x2e\x35\x32\x38\x36\x34\x2d\x35\
\x2e\x32\x31\x32\x31\x36\x20\x34\x34\x2e\x35\x32\x38\x36\x34\x2d\
\x35\x2e\x32\x31\x32\x31\x36\x73\x32\x32\x2e\x32\x36\x31\x37\x36\
\x20\x31\x38\x2e\x39\x34\x39\x31\x32\x20\x38\x2e\x35\x32\x34\x38\
\x20\x34\x31\x2e\x36\x38\x37\x30\x34\x63\x2d\x38\x2e\x39\x33\x34\
\x34\x20\x31\x34\x2e\x37\x39\x31\x36\x38\x2d\x32\x31\x2e\x32\x37\
\x38\x37\x32\x20\x32\x39\x2e\x35\x37\x38\x32\x34\x2d\x32\x38\x2e\
\x38\x31\x35\x33\x36\x20\x33\x38\x2e\x31\x31\x33\x32\x38\x20\x32\
\x38\x2e\x33\x35\x39\x36\x38\x20\x30\x2e\x39\x37\x37\x39\x32\x20\
\x35\x35\x2e\x35\x36\x32\x32\x34\x20\x32\x2e\x33\x33\x39\x38\x34\
\x20\x38\x31\x2e\x34\x32\x33\x33\x36\x20\x34\x2e\x30\x38\x30\x36\
\x34\x20\x33\x30\x2e\x35\x31\x35\x32\x20\x31\x2e\x31\x39\x38\x30\
\x38\x20\x38\x39\x2e\x39\x35\x38\x34\x20\x32\x34\x2e\x37\x39\x31\
\x30\x34\x20\x31\x30\x30\x2e\x36\x31\x33\x31\x32\x20\x31\x30\x36\
\x2e\x31\x37\x33\x34\x34\x20\x31\x30\x2e\x37\x37\x37\x36\x20\x38\
\x32\x2e\x32\x34\x37\x36\x38\x20\x34\x2e\x39\x31\x35\x32\x20\x31\
\x38\x31\x2e\x39\x36\x39\x39\x32\x20\x30\x2e\x32\x30\x39\x39\x32\
\x20\x32\x36\x32\x2e\x31\x30\x33\x30\x34\x7a\x22\x20\x66\x69\x6c\
\x6c\x3d\x22\x23\x46\x31\x36\x43\x38\x44\x22\x20\x70\x2d\x69\x64\
\x3d\x22\x36\x35\x38\x38\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\
\x2f\x73\x76\x67\x3e\
\x00\x00\x05\x8f\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x37\
\x34\x37\x31\x31\x35\x32\x32\x37\x35\x39\x31\x22\x20\x63\x6c\x61\
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x34\x36\x34\x33\x22\x20\x78\
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\x3d\
\x22\x32\x30\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x30\
\x30\x22\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x37\x32\x32\
\x2e\x36\x20\x36\x34\x35\x2e\x32\x39\x35\x63\x31\x37\x2e\x34\x39\
\x37\x2d\x32\x36\x2e\x39\x39\x39\x20\x39\x2e\x37\x39\x33\x2d\x36\
\x33\x2e\x30\x37\x32\x2d\x31\x37\x2e\x32\x30\x36\x2d\x38\x30\x2e\
\x35\x36\x37\x2d\x32\x31\x2e\x39\x39\x37\x2d\x31\x34\x2e\x32\x35\
\x35\x2d\x34\x35\x2e\x31\x30\x34\x2d\x32\x36\x2e\x34\x30\x36\x2d\
\x36\x39\x2e\x30\x34\x35\x2d\x33\x36\x2e\x33\x37\x37\x20\x36\x39\
\x2e\x36\x36\x2d\x35\x31\x2e\x33\x38\x37\x20\x31\x31\x34\x2e\x39\
\x33\x37\x2d\x31\x33\x34\x2e\x30\x30\x36\x20\x31\x31\x34\x2e\x39\
\x33\x37\x2d\x32\x32\x37\x2e\x30\x31\x33\x20\x30\x2d\x31\x35\x35\
\x2e\x34\x36\x37\x2d\x31\x32\x36\x2e\x34\x38\x33\x2d\x32\x38\x31\
\x2e\x39\x35\x31\x2d\x32\x38\x31\x2e\x39\x35\x31\x2d\x32\x38\x31\
\x2e\x39\x35\x31\x73\x2d\x32\x38\x31\x2e\x39\x35\x31\x20\x31\x32\
\x36\x2e\x34\x38\x33\x2d\x32\x38\x31\x2e\x39\x35\x31\x20\x32\x38\
\x31\x2e\x39\x35\x31\x63\x30\x20\x39\x32\x2e\x39\x35\x20\x34\x35\
\x2e\x32\x32\x33\x20\x31\x37\x35\x2e\x35\x32\x37\x20\x31\x31\x34\
\x2e\x38\x31\x31\x20\x32\x32\x36\x2e\x39\x31\x39\x2d\x35\x31\x2e\
\x37\x36\x33\x20\x32\x31\x2e\x35\x35\x37\x2d\x39\x39\x2e\x33\x30\
\x39\x20\x35\x33\x2e\x32\x36\x31\x2d\x31\x34\x30\x2e\x31\x35\x33\
\x20\x39\x34\x2e\x31\x30\x33\x2d\x38\x32\x2e\x30\x38\x30\x20\x38\
\x32\x2e\x30\x38\x30\x2d\x31\x32\x37\x2e\x32\x38\x34\x20\x31\x39\
\x31\x2e\x32\x31\x33\x2d\x31\x32\x37\x2e\x32\x38\x34\x20\x33\x30\
\x37\x2e\x32\x39\x32\x20\x30\x20\x33\x32\x2e\x31\x37\x34\x20\x32\
\x36\x2e\x30\x38\x32\x20\x35\x38\x2e\x32\x35\x34\x20\x35\x38\x2e\
\x32\x35\x34\x20\x35\x38\x2e\x32\x35\x34\x73\x35\x38\x2e\x32\x35\
\x34\x2d\x32\x36\x2e\x30\x38\x30\x20\x35\x38\x2e\x32\x35\x34\x2d\
\x35\x38\x2e\x32\x35\x34\x63\x30\x2d\x31\x37\x35\x2e\x33\x38\x35\
\x20\x31\x34\x32\x2e\x36\x38\x35\x2d\x33\x31\x38\x2e\x30\x36\x38\
\x20\x33\x31\x38\x2e\x30\x36\x38\x2d\x33\x31\x38\x2e\x30\x36\x38\
\x20\x36\x31\x2e\x35\x37\x39\x20\x30\x20\x31\x32\x31\x2e\x32\x39\
\x38\x20\x31\x37\x2e\x36\x30\x36\x20\x31\x37\x32\x2e\x36\x39\x39\
\x20\x35\x30\x2e\x39\x31\x35\x20\x32\x37\x2e\x30\x30\x32\x20\x31\
\x37\x2e\x34\x39\x38\x20\x36\x33\x2e\x30\x37\x34\x20\x39\x2e\x37\
\x39\x33\x20\x38\x30\x2e\x35\x36\x37\x2d\x31\x37\x2e\x32\x30\x36\
\x7a\x4d\x34\x36\x39\x2e\x33\x33\x34\x20\x31\x33\x35\x2e\x38\x39\
\x37\x63\x39\x31\x2e\x32\x32\x35\x20\x30\x20\x31\x36\x35\x2e\x34\
\x34\x32\x20\x37\x34\x2e\x32\x31\x38\x20\x31\x36\x35\x2e\x34\x34\
\x32\x20\x31\x36\x35\x2e\x34\x34\x32\x73\x2d\x37\x34\x2e\x32\x31\
\x38\x20\x31\x36\x35\x2e\x34\x34\x32\x2d\x31\x36\x35\x2e\x34\x34\
\x32\x20\x31\x36\x35\x2e\x34\x34\x32\x63\x2d\x39\x31\x2e\x32\x32\
\x35\x20\x30\x2d\x31\x36\x35\x2e\x34\x34\x32\x2d\x37\x34\x2e\x32\
\x31\x37\x2d\x31\x36\x35\x2e\x34\x34\x32\x2d\x31\x36\x35\x2e\x34\
\x34\x32\x73\x37\x34\x2e\x32\x31\x38\x2d\x31\x36\x35\x2e\x34\x34\
\x32\x20\x31\x36\x35\x2e\x34\x34\x32\x2d\x31\x36\x35\x2e\x34\x34\
\x32\x7a\x22\x20\x70\x2d\x69\x64\x3d\x22\x34\x36\x34\x34\x22\x3e\
\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
\x4d\x39\x32\x36\x2e\x36\x33\x20\x37\x34\x33\x2e\x31\x39\x37\x68\
\x2d\x36\x36\x2e\x39\x39\x32\x76\x2d\x36\x36\x2e\x39\x39\x32\x63\
\x30\x2d\x33\x32\x2e\x31\x37\x34\x2d\x32\x36\x2e\x30\x38\x30\x2d\
\x35\x38\x2e\x32\x35\x34\x2d\x35\x38\x2e\x32\x35\x34\x2d\x35\x38\
\x2e\x32\x35\x34\x73\x2d\x35\x38\x2e\x32\x35\x34\x20\x32\x36\x2e\
\x30\x38\x30\x2d\x35\x38\x2e\x32\x35\x34\x20\x35\x38\x2e\x32\x35\
\x34\x76\x36\x36\x2e\x39\x39\x32\x68\x2d\x36\x36\x2e\x39\x39\x32\
\x63\x2d\x33\x32\x2e\x31\x37\x34\x20\x30\x2d\x35\x38\x2e\x32\x35\
\x34\x20\x32\x36\x2e\x30\x38\x30\x2d\x35\x38\x2e\x32\x35\x34\x20\
\x35\x38\x2e\x32\x35\x34\x73\x32\x36\x2e\x30\x38\x30\x20\x35\x38\
\x2e\x32\x35\x34\x20\x35\x38\x2e\x32\x35\x34\x20\x35\x38\x2e\x32\
\x35\x34\x68\x36\x36\x2e\x39\x39\x32\x76\x36\x36\x2e\x39\x39\x32\
\x63\x30\x20\x33\x32\x2e\x31\x37\x34\x20\x32\x36\x2e\x30\x38\x30\
\x20\x35\x38\x2e\x32\x35\x34\x20\x35\x38\x2e\x32\x35\x34\x20\x35\
\x38\x2e\x32\x35\x34\x73\x35\x38\x2e\x32\x35\x34\x2d\x32\x36\x2e\
\x30\x38\x30\x20\x35\x38\x2e\x32\x35\x34\x2d\x35\x38\x2e\x32\x35\
\x34\x76\x2d\x36\x36\x2e\x39\x39\x32\x68\x36\x36\x2e\x39\x39\x32\
\x63\x33\x32\x2e\x31\x37\x34\x20\x30\x20\x35\x38\x2e\x32\x35\x34\
\x2d\x32\x36\x2e\x30\x38\x30\x20\x35\x38\x2e\x32\x35\x34\x2d\x35\
\x38\x2e\x32\x35\x34\x73\x2d\x32\x36\x2e\x30\x38\x30\x2d\x35\x38\
\x2e\x32\x35\x34\x2d\x35\x38\x2e\x32\x35\x34\x2d\x35\x38\x2e\x32\
\x35\x34\x7a\x22\x20\x70\x2d\x69\x64\x3d\x22\x34\x36\x34\x35\x22\
\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x2f\x73\x76\x67\x3e\
\x00\x00\x01\xf7\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x37\
\x34\x37\x31\x31\x35\x31\x32\x32\x39\x39\x34\x22\x20\x63\x6c\x61\
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x32\x36\x31\x33\x22\x20\x78\
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\x3d\
\x22\x32\x30\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x30\
\x30\x22\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x33\x32\
\x20\x31\x30\x31\x31\x2e\x32\x4c\x35\x32\x34\x2e\x38\x20\x36\x39\
\x31\x2e\x32\x20\x32\x33\x30\x2e\x34\x20\x31\x30\x31\x31\x2e\x32\
\x20\x38\x39\x2e\x36\x20\x38\x37\x30\x2e\x34\x6c\x33\x30\x37\x2e\
\x32\x2d\x33\x32\x30\x4c\x38\x39\x2e\x36\x20\x32\x31\x37\x2e\x36\
\x6c\x31\x34\x30\x2e\x38\x2d\x31\x32\x38\x20\x32\x39\x34\x2e\x34\
\x20\x33\x32\x30\x4c\x38\x33\x32\x20\x38\x39\x2e\x36\x6c\x31\x32\
\x38\x20\x31\x32\x38\x2d\x33\x30\x37\x2e\x32\x20\x33\x33\x32\x2e\
\x38\x20\x33\x30\x37\x2e\x32\x20\x33\x32\x30\x7a\x22\x20\x66\x69\
\x6c\x6c\x3d\x22\x23\x43\x43\x43\x43\x43\x43\x22\x20\x70\x2d\x69\
\x64\x3d\x22\x32\x36\x31\x34\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\
\x3c\x2f\x73\x76\x67\x3e\
\x00\x00\x08\x6f\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x37\
\x34\x37\x31\x32\x33\x38\x34\x32\x38\x37\x38\x22\x20\x63\x6c\x61\
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x32\x34\x33\x31\x22\x20\x78\
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\x3d\
\x22\x32\x30\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x30\
\x30\x22\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\x33\
\x2e\x32\x31\x32\x33\x39\x34\x20\x36\x32\x36\x2e\x33\x37\x34\x38\
\x31\x33\x48\x36\x30\x2e\x38\x39\x37\x35\x35\x31\x63\x2d\x31\x34\
\x2e\x33\x32\x38\x38\x33\x36\x20\x30\x2d\x32\x35\x2e\x35\x38\x37\
\x32\x30\x36\x2d\x31\x31\x2e\x32\x35\x38\x33\x37\x31\x2d\x32\x35\
\x2e\x35\x38\x37\x32\x30\x36\x2d\x32\x35\x2e\x35\x38\x37\x32\x30\
\x37\x73\x31\x31\x2e\x32\x35\x38\x33\x37\x31\x2d\x32\x35\x2e\x35\
\x38\x37\x32\x30\x36\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x2d\
\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x68\x33\x36\x31\x2e\x38\x30\
\x33\x30\x39\x39\x63\x31\x34\x2e\x33\x32\x38\x38\x33\x36\x20\x30\
\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x20\x31\x31\x2e\x32\x35\
\x38\x33\x37\x31\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x20\x32\
\x35\x2e\x35\x38\x37\x32\x30\x36\x73\x2d\x31\x31\x2e\x32\x35\x38\
\x33\x37\x31\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x2d\x32\x35\
\x2e\x30\x37\x35\x34\x36\x32\x20\x32\x35\x2e\x35\x38\x37\x32\x30\
\x37\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x30\x30\x31\x41\x37\
\x30\x22\x20\x70\x2d\x69\x64\x3d\x22\x32\x34\x33\x32\x22\x3e\x3c\
\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\
\x34\x32\x33\x2e\x32\x31\x32\x33\x39\x34\x20\x39\x38\x38\x2e\x36\
\x38\x39\x36\x35\x35\x63\x2d\x31\x34\x2e\x33\x32\x38\x38\x33\x36\
\x20\x30\x2d\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x2d\x31\x31\x2e\
\x32\x35\x38\x33\x37\x31\x2d\x32\x35\x2e\x35\x38\x37\x32\x30\x37\
\x2d\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x76\x2d\x33\x36\x31\x2e\
\x38\x30\x33\x30\x39\x39\x63\x30\x2d\x31\x34\x2e\x33\x32\x38\x38\
\x33\x36\x20\x31\x31\x2e\x32\x35\x38\x33\x37\x31\x2d\x32\x35\x2e\
\x35\x38\x37\x32\x30\x36\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x37\
\x2d\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x73\x32\x35\x2e\x35\x38\
\x37\x32\x30\x36\x20\x31\x31\x2e\x32\x35\x38\x33\x37\x31\x20\x32\
\x35\x2e\x35\x38\x37\x32\x30\x36\x20\x32\x35\x2e\x35\x38\x37\x32\
\x30\x36\x76\x33\x36\x31\x2e\x38\x30\x33\x30\x39\x39\x63\x30\x20\
\x31\x33\x2e\x38\x31\x37\x30\x39\x31\x2d\x31\x31\x2e\x37\x37\x30\
\x31\x31\x35\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x2d\x32\x35\
\x2e\x35\x38\x37\x32\x30\x36\x20\x32\x35\x2e\x35\x38\x37\x32\x30\
\x36\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x30\x30\x31\x41\x37\
\x30\x22\x20\x70\x2d\x69\x64\x3d\x22\x32\x34\x33\x33\x22\x3e\x3c\
\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\
\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x20\x31\x30\x32\x34\x63\x2d\
\x36\x2e\x36\x35\x32\x36\x37\x34\x20\x30\x2d\x31\x33\x2e\x33\x30\
\x35\x33\x34\x37\x2d\x32\x2e\x35\x35\x38\x37\x32\x31\x2d\x31\x37\
\x2e\x39\x31\x31\x30\x34\x34\x2d\x37\x2e\x36\x37\x36\x31\x36\x32\
\x2d\x31\x30\x2e\x32\x33\x34\x38\x38\x33\x2d\x31\x30\x2e\x32\x33\
\x34\x38\x38\x33\x2d\x31\x30\x2e\x32\x33\x34\x38\x38\x33\x2d\x32\
\x36\x2e\x30\x39\x38\x39\x35\x31\x20\x30\x2d\x33\x36\x2e\x33\x33\
\x33\x38\x33\x33\x6c\x33\x39\x38\x2e\x31\x33\x36\x39\x33\x31\x2d\
\x33\x39\x38\x2e\x31\x33\x36\x39\x33\x32\x63\x31\x30\x2e\x32\x33\
\x34\x38\x38\x33\x2d\x31\x30\x2e\x32\x33\x34\x38\x38\x33\x20\x32\
\x36\x2e\x30\x39\x38\x39\x35\x31\x2d\x31\x30\x2e\x32\x33\x34\x38\
\x38\x33\x20\x33\x36\x2e\x33\x33\x33\x38\x33\x34\x20\x30\x73\x31\
\x30\x2e\x32\x33\x34\x38\x38\x33\x20\x32\x36\x2e\x30\x39\x38\x39\
\x35\x31\x20\x30\x20\x33\x36\x2e\x33\x33\x33\x38\x33\x34\x4c\x34\
\x33\x2e\x34\x39\x38\x32\x35\x31\x20\x31\x30\x31\x36\x2e\x33\x32\
\x33\x38\x33\x38\x63\x2d\x34\x2e\x36\x30\x35\x36\x39\x37\x20\x35\
\x2e\x31\x31\x37\x34\x34\x31\x2d\x31\x31\x2e\x32\x35\x38\x33\x37\
\x31\x20\x37\x2e\x36\x37\x36\x31\x36\x32\x2d\x31\x37\x2e\x39\x31\
\x31\x30\x34\x35\x20\x37\x2e\x36\x37\x36\x31\x36\x32\x7a\x22\x20\
\x66\x69\x6c\x6c\x3d\x22\x23\x30\x30\x31\x41\x37\x30\x22\x20\x70\
\x2d\x69\x64\x3d\x22\x32\x34\x33\x34\x22\x3e\x3c\x2f\x70\x61\x74\
\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x39\x36\x32\x2e\
\x35\x39\x30\x37\x30\x35\x20\x34\x34\x39\x2e\x33\x31\x31\x33\x34\
\x34\x68\x2d\x33\x36\x31\x2e\x38\x30\x33\x30\x39\x39\x63\x2d\x31\
\x34\x2e\x33\x32\x38\x38\x33\x36\x20\x30\x2d\x32\x35\x2e\x35\x38\
\x37\x32\x30\x36\x2d\x31\x31\x2e\x32\x35\x38\x33\x37\x31\x2d\x32\
\x35\x2e\x35\x38\x37\x32\x30\x36\x2d\x32\x35\x2e\x35\x38\x37\x32\
\x30\x36\x73\x31\x31\x2e\x32\x35\x38\x33\x37\x31\x2d\x32\x35\x2e\
\x35\x38\x37\x32\x30\x36\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x36\
\x2d\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x68\x33\x36\x31\x2e\x38\
\x30\x33\x30\x39\x39\x63\x31\x34\x2e\x33\x32\x38\x38\x33\x36\x20\
\x30\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x20\x31\x31\x2e\x32\
\x35\x38\x33\x37\x31\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x20\
\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x73\x2d\x31\x31\x2e\x37\x37\
\x30\x31\x31\x35\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x2d\x32\
\x35\x2e\x35\x38\x37\x32\x30\x36\x20\x32\x35\x2e\x35\x38\x37\x32\
\x30\x36\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x30\x30\x31\x41\
\x37\x30\x22\x20\x70\x2d\x69\x64\x3d\x22\x32\x34\x33\x35\x22\x3e\
\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
\x4d\x36\x30\x30\x2e\x32\x37\x35\x38\x36\x32\x20\x34\x34\x39\x2e\
\x33\x31\x31\x33\x34\x34\x63\x2d\x31\x34\x2e\x33\x32\x38\x38\x33\
\x36\x20\x30\x2d\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x2d\x31\x31\
\x2e\x32\x35\x38\x33\x37\x31\x2d\x32\x35\x2e\x35\x38\x37\x32\x30\
\x36\x2d\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x56\x36\x31\x2e\x34\
\x30\x39\x32\x39\x35\x63\x30\x2d\x31\x34\x2e\x33\x32\x38\x38\x33\
\x36\x20\x31\x31\x2e\x32\x35\x38\x33\x37\x31\x2d\x32\x35\x2e\x35\
\x38\x37\x32\x30\x36\x20\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x2d\
\x32\x35\x2e\x35\x38\x37\x32\x30\x36\x73\x32\x35\x2e\x35\x38\x37\
\x32\x30\x36\x20\x31\x31\x2e\x32\x35\x38\x33\x37\x31\x20\x32\x35\
\x2e\x35\x38\x37\x32\x30\x36\x20\x32\x35\x2e\x35\x38\x37\x32\x30\
\x36\x76\x33\x36\x31\x2e\x38\x30\x33\x30\x39\x39\x63\x30\x20\x31\
\x34\x2e\x33\x32\x38\x38\x33\x36\x2d\x31\x31\x2e\x32\x35\x38\x33\
\x37\x31\x20\x32\x36\x2e\x30\x39\x38\x39\x35\x31\x2d\x32\x35\x2e\
\x35\x38\x37\x32\x30\x36\x20\x32\x36\x2e\x30\x39\x38\x39\x35\x7a\
\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x30\x30\x31\x41\x37\x30\x22\
\x20\x70\x2d\x69\x64\x3d\x22\x32\x34\x33\x36\x22\x3e\x3c\x2f\x70\
\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\x39\
\x39\x2e\x37\x36\x34\x31\x31\x38\x20\x34\x34\x39\x2e\x38\x32\x33\
\x30\x38\x38\x63\x2d\x36\x2e\x36\x35\x32\x36\x37\x34\x20\x30\x2d\
\x31\x33\x2e\x33\x30\x35\x33\x34\x37\x2d\x32\x2e\x35\x35\x38\x37\
\x32\x31\x2d\x31\x37\x2e\x39\x31\x31\x30\x34\x35\x2d\x37\x2e\x36\
\x37\x36\x31\x36\x31\x2d\x31\x30\x2e\x32\x33\x34\x38\x38\x33\x2d\
\x31\x30\x2e\x32\x33\x34\x38\x38\x33\x2d\x31\x30\x2e\x32\x33\x34\
\x38\x38\x33\x2d\x32\x36\x2e\x30\x39\x38\x39\x35\x31\x20\x30\x2d\
\x33\x36\x2e\x33\x33\x33\x38\x33\x34\x6c\x33\x39\x38\x2e\x31\x33\
\x36\x39\x33\x32\x2d\x33\x39\x38\x2e\x31\x33\x36\x39\x33\x31\x63\
\x31\x30\x2e\x32\x33\x34\x38\x38\x33\x2d\x31\x30\x2e\x32\x33\x34\
\x38\x38\x33\x20\x32\x36\x2e\x30\x39\x38\x39\x35\x31\x2d\x31\x30\
\x2e\x32\x33\x34\x38\x38\x33\x20\x33\x36\x2e\x33\x33\x33\x38\x33\
\x33\x20\x30\x73\x31\x30\x2e\x32\x33\x34\x38\x38\x33\x20\x32\x36\
\x2e\x30\x39\x38\x39\x35\x31\x20\x30\x20\x33\x36\x2e\x33\x33\x33\
\x38\x33\x33\x6c\x2d\x33\x39\x38\x2e\x31\x33\x36\x39\x33\x31\x20\
\x33\x39\x38\x2e\x31\x33\x36\x39\x33\x32\x63\x2d\x35\x2e\x31\x31\
\x37\x34\x34\x31\x20\x35\x2e\x31\x31\x37\x34\x34\x31\x2d\x31\x31\
\x2e\x37\x37\x30\x31\x31\x35\x20\x37\x2e\x36\x37\x36\x31\x36\x32\
\x2d\x31\x38\x2e\x34\x32\x32\x37\x38\x39\x20\x37\x2e\x36\x37\x36\
\x31\x36\x31\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x30\x30\x31\
\x41\x37\x30\x22\x20\x70\x2d\x69\x64\x3d\x22\x32\x34\x33\x37\x22\
\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x2f\x73\x76\x67\x3e\
\x00\x00\x1e\x4d\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x37\
\x34\x37\x31\x32\x32\x37\x38\x39\x31\x31\x38\x22\x20\x63\x6c\x61\
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x30\x36\x34\x37\x22\x20\
\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\
\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\
\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\
\x3d\x22\x32\x30\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\
\x30\x30\x22\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x36\x37\
\x33\x2e\x38\x20\x32\x35\x37\x2e\x32\x53\x37\x39\x35\x2e\x32\x20\
\x31\x34\x33\x20\x38\x37\x35\x2e\x32\x20\x31\x35\x30\x20\x38\x32\
\x37\x20\x34\x37\x36\x2e\x39\x20\x38\x31\x35\x2e\x36\x20\x34\x37\
\x36\x63\x2d\x31\x31\x2e\x34\x2d\x31\x2d\x31\x34\x31\x2e\x38\x2d\
\x32\x31\x38\x2e\x38\x2d\x31\x34\x31\x2e\x38\x2d\x32\x31\x38\x2e\
\x38\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\x43\x43\x39\
\x41\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x30\x36\x34\x38\x22\x3e\
\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
\x4d\x38\x31\x35\x2e\x37\x20\x34\x39\x32\x63\x2d\x30\x2e\x35\x20\
\x30\x2d\x31\x20\x30\x2d\x31\x2e\x35\x2d\x30\x2e\x31\x2d\x38\x2e\
\x34\x2d\x30\x2e\x37\x2d\x31\x33\x2e\x39\x2d\x37\x2d\x32\x30\x2e\
\x37\x2d\x31\x35\x2e\x39\x2d\x34\x2e\x36\x2d\x36\x2d\x31\x30\x2e\
\x37\x2d\x31\x34\x2e\x37\x2d\x31\x38\x2e\x32\x2d\x32\x35\x2e\x37\
\x2d\x31\x32\x2e\x33\x2d\x31\x38\x2e\x33\x2d\x32\x38\x2e\x36\x2d\
\x34\x33\x2e\x38\x2d\x34\x38\x2e\x35\x2d\x37\x35\x2e\x36\x2d\x33\
\x33\x2e\x37\x2d\x35\x34\x2e\x31\x2d\x36\x36\x2e\x34\x2d\x31\x30\
\x38\x2e\x37\x2d\x36\x36\x2e\x38\x2d\x31\x30\x39\x2e\x33\x6c\x2d\
\x36\x2e\x36\x2d\x31\x31\x20\x39\x2e\x34\x2d\x38\x2e\x38\x63\x31\
\x2e\x33\x2d\x31\x2e\x32\x20\x33\x31\x2e\x37\x2d\x32\x39\x2e\x37\
\x20\x37\x32\x2e\x36\x2d\x35\x37\x2e\x38\x20\x35\x36\x2e\x37\x2d\
\x33\x38\x2e\x39\x20\x31\x30\x34\x2e\x31\x2d\x35\x37\x20\x31\x34\
\x31\x2e\x31\x2d\x35\x33\x2e\x37\x20\x31\x37\x2e\x31\x20\x31\x2e\
\x35\x20\x32\x39\x2e\x39\x20\x31\x32\x2e\x34\x20\x33\x36\x2e\x31\
\x20\x33\x30\x2e\x36\x20\x34\x2e\x35\x20\x31\x33\x2e\x32\x20\x35\
\x2e\x37\x20\x33\x30\x2e\x35\x20\x33\x2e\x38\x20\x35\x32\x2e\x38\
\x2d\x34\x2e\x39\x20\x35\x37\x2e\x31\x2d\x32\x39\x2e\x33\x20\x31\
\x33\x31\x2e\x31\x2d\x34\x33\x2e\x34\x20\x31\x37\x30\x2e\x31\x2d\
\x39\x2e\x32\x20\x32\x35\x2e\x34\x2d\x31\x38\x2e\x39\x20\x34\x39\
\x2e\x36\x2d\x32\x37\x2e\x34\x20\x36\x38\x2e\x32\x2d\x34\x2e\x31\
\x20\x38\x2e\x39\x2d\x37\x2e\x36\x20\x31\x36\x2e\x31\x2d\x31\x30\
\x2e\x36\x20\x32\x31\x2e\x32\x2d\x33\x20\x35\x2e\x32\x2d\x38\x2e\
\x36\x20\x31\x35\x2d\x31\x39\x2e\x33\x20\x31\x35\x7a\x4d\x36\x39\
\x34\x2e\x33\x20\x32\x36\x30\x2e\x32\x63\x34\x36\x2e\x32\x20\x37\
\x36\x2e\x39\x20\x39\x36\x2e\x34\x20\x31\x35\x37\x2e\x32\x20\x31\
\x31\x39\x2e\x31\x20\x31\x38\x39\x20\x31\x30\x2e\x39\x2d\x32\x32\
\x2e\x39\x20\x32\x39\x2e\x31\x2d\x36\x37\x2e\x38\x20\x34\x34\x2e\
\x39\x2d\x31\x31\x38\x20\x32\x34\x2e\x31\x2d\x37\x36\x2e\x38\x20\
\x33\x32\x2e\x38\x2d\x31\x33\x36\x20\x32\x33\x2e\x32\x2d\x31\x35\
\x38\x2e\x35\x2d\x32\x2e\x35\x2d\x35\x2e\x39\x2d\x35\x2e\x31\x2d\
\x36\x2e\x36\x2d\x37\x2e\x37\x2d\x36\x2e\x38\x2d\x35\x34\x2e\x36\
\x2d\x34\x2e\x37\x2d\x31\x34\x30\x2e\x36\x20\x36\x30\x2d\x31\x37\
\x39\x2e\x35\x20\x39\x34\x2e\x33\x7a\x22\x20\x66\x69\x6c\x6c\x3d\
\x22\x23\x32\x44\x32\x44\x32\x44\x22\x20\x70\x2d\x69\x64\x3d\x22\
\x31\x30\x36\x34\x39\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\
\x61\x74\x68\x20\x64\x3d\x22\x4d\x37\x35\x35\x2e\x33\x20\x32\x35\
\x30\x2e\x32\x73\x35\x33\x2e\x38\x2d\x35\x30\x2e\x36\x20\x38\x39\
\x2e\x32\x2d\x34\x37\x2e\x35\x63\x33\x35\x2e\x35\x20\x33\x2e\x31\
\x2d\x32\x31\x2e\x34\x20\x31\x34\x34\x2e\x39\x2d\x32\x36\x2e\x34\
\x20\x31\x34\x34\x2e\x35\x73\x2d\x36\x32\x2e\x38\x2d\x39\x37\x2d\
\x36\x32\x2e\x38\x2d\x39\x37\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\
\x23\x46\x46\x41\x44\x36\x39\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\
\x30\x36\x35\x30\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\
\x74\x68\x20\x64\x3d\x22\x4d\x33\x35\x30\x2e\x32\x20\x32\x35\x37\
\x2e\x32\x53\x32\x32\x38\x2e\x38\x20\x31\x34\x33\x20\x31\x34\x38\
\x2e\x38\x20\x31\x35\x30\x73\x34\x38\x2e\x32\x20\x33\x32\x36\x2e\
\x39\x20\x35\x39\x2e\x36\x20\x33\x32\x36\x63\x31\x31\x2e\x34\x2d\
\x31\x20\x31\x34\x31\x2e\x38\x2d\x32\x31\x38\x2e\x38\x20\x31\x34\
\x31\x2e\x38\x2d\x32\x31\x38\x2e\x38\x7a\x22\x20\x66\x69\x6c\x6c\
\x3d\x22\x23\x46\x46\x43\x43\x39\x41\x22\x20\x70\x2d\x69\x64\x3d\
\x22\x31\x30\x36\x35\x31\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\
\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x30\x38\x2e\x33\x20\x34\
\x39\x32\x63\x2d\x31\x30\x2e\x37\x20\x30\x2d\x31\x36\x2e\x33\x2d\
\x39\x2e\x37\x2d\x31\x39\x2e\x33\x2d\x31\x35\x2e\x31\x2d\x33\x2d\
\x35\x2e\x31\x2d\x36\x2e\x35\x2d\x31\x32\x2e\x32\x2d\x31\x30\x2e\
\x36\x2d\x32\x31\x2e\x32\x2d\x38\x2e\x35\x2d\x31\x38\x2e\x36\x2d\
\x31\x38\x2e\x32\x2d\x34\x32\x2e\x38\x2d\x32\x37\x2e\x34\x2d\x36\
\x38\x2e\x32\x2d\x31\x34\x2e\x31\x2d\x33\x39\x2d\x33\x38\x2e\x35\
\x2d\x31\x31\x33\x2d\x34\x33\x2e\x34\x2d\x31\x37\x30\x2e\x31\x2d\
\x31\x2e\x39\x2d\x32\x32\x2e\x33\x2d\x30\x2e\x37\x2d\x33\x39\x2e\
\x36\x20\x33\x2e\x38\x2d\x35\x32\x2e\x38\x20\x36\x2e\x32\x2d\x31\
\x38\x2e\x32\x20\x31\x39\x2d\x32\x39\x2e\x31\x20\x33\x36\x2e\x31\
\x2d\x33\x30\x2e\x36\x20\x33\x37\x2d\x33\x2e\x32\x20\x38\x34\x2e\
\x35\x20\x31\x34\x2e\x38\x20\x31\x34\x31\x2e\x31\x20\x35\x33\x2e\
\x37\x20\x34\x30\x2e\x39\x20\x32\x38\x20\x37\x31\x2e\x33\x20\x35\
\x36\x2e\x36\x20\x37\x32\x2e\x36\x20\x35\x37\x2e\x38\x6c\x39\x2e\
\x34\x20\x38\x2e\x38\x2d\x36\x2e\x36\x20\x31\x31\x63\x2d\x30\x2e\
\x33\x20\x30\x2e\x35\x2d\x33\x33\x2e\x31\x20\x35\x35\x2e\x32\x2d\
\x36\x36\x2e\x37\x20\x31\x30\x39\x2e\x33\x2d\x31\x39\x2e\x38\x20\
\x33\x31\x2e\x38\x2d\x33\x36\x2e\x32\x20\x35\x37\x2e\x33\x2d\x34\
\x38\x2e\x35\x20\x37\x35\x2e\x36\x2d\x37\x2e\x34\x20\x31\x31\x2e\
\x31\x2d\x31\x33\x2e\x36\x20\x31\x39\x2e\x37\x2d\x31\x38\x2e\x32\
\x20\x32\x35\x2e\x37\x2d\x36\x2e\x38\x20\x38\x2e\x38\x2d\x31\x32\
\x2e\x33\x20\x31\x35\x2e\x31\x2d\x32\x30\x2e\x37\x20\x31\x35\x2e\
\x39\x2d\x30\x2e\x36\x20\x30\x2e\x32\x2d\x31\x2e\x31\x20\x30\x2e\
\x32\x2d\x31\x2e\x36\x20\x30\x2e\x32\x7a\x20\x6d\x2d\x35\x32\x2e\
\x32\x2d\x33\x32\x36\x2e\x33\x63\x2d\x32\x20\x30\x2d\x34\x20\x30\
\x2e\x31\x2d\x35\x2e\x39\x20\x30\x2e\x33\x2d\x32\x2e\x36\x20\x30\
\x2e\x32\x2d\x35\x2e\x32\x20\x30\x2e\x39\x2d\x37\x2e\x37\x20\x36\
\x2e\x38\x2d\x39\x2e\x35\x20\x32\x32\x2e\x35\x2d\x30\x2e\x39\x20\
\x38\x31\x2e\x37\x20\x32\x33\x2e\x32\x20\x31\x35\x38\x2e\x35\x20\
\x31\x35\x2e\x37\x20\x35\x30\x2e\x32\x20\x33\x34\x20\x39\x35\x2e\
\x32\x20\x34\x34\x2e\x39\x20\x31\x31\x38\x20\x32\x32\x2e\x37\x2d\
\x33\x31\x2e\x39\x20\x37\x32\x2e\x39\x2d\x31\x31\x32\x2e\x31\x20\
\x31\x31\x39\x2e\x31\x2d\x31\x38\x39\x2d\x33\x37\x2e\x36\x2d\x33\
\x33\x2e\x32\x2d\x31\x31\x38\x2e\x38\x2d\x39\x34\x2e\x36\x2d\x31\
\x37\x33\x2e\x36\x2d\x39\x34\x2e\x36\x7a\x22\x20\x66\x69\x6c\x6c\
\x3d\x22\x23\x32\x44\x32\x44\x32\x44\x22\x20\x70\x2d\x69\x64\x3d\
\x22\x31\x30\x36\x35\x32\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\
\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x36\x38\x2e\x37\x20\x32\
\x35\x30\x2e\x32\x73\x2d\x35\x33\x2e\x38\x2d\x35\x30\x2e\x36\x2d\
\x38\x39\x2e\x32\x2d\x34\x37\x2e\x35\x63\x2d\x33\x35\x2e\x35\x20\
\x33\x2e\x31\x20\x32\x31\x2e\x34\x20\x31\x34\x34\x2e\x39\x20\x32\
\x36\x2e\x34\x20\x31\x34\x34\x2e\x35\x20\x35\x2d\x30\x2e\x35\x20\
\x36\x32\x2e\x38\x2d\x39\x37\x20\x36\x32\x2e\x38\x2d\x39\x37\x7a\
\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\x41\x44\x36\x39\x22\
\x20\x70\x2d\x69\x64\x3d\x22\x31\x30\x36\x35\x33\x22\x3e\x3c\x2f\
\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\
\x36\x38\x20\x38\x30\x33\x2e\x35\x48\x34\x35\x36\x63\x2d\x31\x33\
\x32\x2e\x38\x20\x30\x2d\x32\x34\x31\x2e\x35\x2d\x31\x30\x38\x2e\
\x37\x2d\x32\x34\x31\x2e\x35\x2d\x32\x34\x31\x2e\x35\x76\x2d\x35\
\x39\x2e\x35\x63\x30\x2d\x31\x35\x35\x2e\x31\x20\x31\x32\x36\x2e\
\x39\x2d\x32\x38\x32\x20\x32\x38\x32\x2d\x32\x38\x32\x68\x33\x31\
\x2e\x36\x63\x31\x35\x34\x2e\x38\x20\x30\x20\x32\x38\x31\x2e\x34\
\x20\x31\x32\x36\x2e\x37\x20\x32\x38\x31\x2e\x34\x20\x32\x38\x31\
\x2e\x34\x76\x36\x30\x63\x30\x20\x31\x33\x32\x2e\x39\x2d\x31\x30\
\x38\x2e\x37\x20\x32\x34\x31\x2e\x36\x2d\x32\x34\x31\x2e\x35\x20\
\x32\x34\x31\x2e\x36\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\
\x46\x43\x43\x39\x41\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x30\x36\
\x35\x34\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\
\x20\x64\x3d\x22\x4d\x35\x36\x38\x20\x38\x31\x39\x2e\x35\x48\x34\
\x35\x36\x63\x2d\x36\x38\x2e\x35\x20\x30\x2d\x31\x33\x33\x2e\x31\
\x2d\x32\x36\x2e\x39\x2d\x31\x38\x31\x2e\x39\x2d\x37\x35\x2e\x36\
\x53\x31\x39\x38\x2e\x35\x20\x36\x33\x30\x2e\x35\x20\x31\x39\x38\
\x2e\x35\x20\x35\x36\x32\x76\x2d\x35\x39\x2e\x35\x63\x30\x2d\x34\
\x30\x2e\x31\x20\x37\x2e\x39\x2d\x37\x39\x20\x32\x33\x2e\x35\x2d\
\x31\x31\x35\x2e\x37\x20\x31\x35\x2e\x31\x2d\x33\x35\x2e\x34\x20\
\x33\x36\x2e\x36\x2d\x36\x37\x2e\x33\x20\x36\x34\x2d\x39\x34\x2e\
\x37\x73\x35\x39\x2e\x33\x2d\x34\x38\x2e\x39\x20\x39\x34\x2e\x37\
\x2d\x36\x34\x63\x33\x36\x2e\x37\x2d\x31\x35\x2e\x36\x20\x37\x35\
\x2e\x37\x2d\x32\x33\x2e\x35\x20\x31\x31\x35\x2e\x37\x2d\x32\x33\
\x2e\x35\x48\x35\x32\x38\x63\x34\x30\x20\x30\x20\x37\x38\x2e\x39\
\x20\x37\x2e\x39\x20\x31\x31\x35\x2e\x35\x20\x32\x33\x2e\x35\x20\
\x33\x35\x2e\x34\x20\x31\x35\x20\x36\x37\x2e\x32\x20\x33\x36\x2e\
\x35\x20\x39\x34\x2e\x35\x20\x36\x33\x2e\x39\x20\x32\x37\x2e\x34\
\x20\x32\x37\x2e\x34\x20\x34\x38\x2e\x38\x20\x35\x39\x2e\x32\x20\
\x36\x33\x2e\x39\x20\x39\x34\x2e\x35\x20\x31\x35\x2e\x36\x20\x33\
\x36\x2e\x37\x20\x32\x33\x2e\x35\x20\x37\x35\x2e\x35\x20\x32\x33\
\x2e\x35\x20\x31\x31\x35\x2e\x35\x76\x36\x30\x63\x30\x20\x36\x38\
\x2e\x35\x2d\x32\x36\x2e\x39\x20\x31\x33\x33\x2e\x31\x2d\x37\x35\
\x2e\x36\x20\x31\x38\x31\x2e\x39\x53\x36\x33\x36\x2e\x35\x20\x38\
\x31\x39\x2e\x35\x20\x35\x36\x38\x20\x38\x31\x39\x2e\x35\x7a\x20\
\x6d\x2d\x37\x31\x2e\x35\x2d\x35\x38\x33\x63\x2d\x31\x34\x36\x2e\
\x37\x20\x30\x2d\x32\x36\x36\x20\x31\x31\x39\x2e\x33\x2d\x32\x36\
\x36\x20\x32\x36\x36\x56\x35\x36\x32\x63\x30\x20\x31\x32\x34\x2e\
\x34\x20\x31\x30\x31\x2e\x32\x20\x32\x32\x35\x2e\x35\x20\x32\x32\
\x35\x2e\x35\x20\x32\x32\x35\x2e\x35\x68\x31\x31\x32\x63\x31\x32\
\x34\x2e\x34\x20\x30\x20\x32\x32\x35\x2e\x35\x2d\x31\x30\x31\x2e\
\x32\x20\x32\x32\x35\x2e\x35\x2d\x32\x32\x35\x2e\x35\x76\x2d\x36\
\x30\x63\x30\x2d\x31\x34\x36\x2e\x34\x2d\x31\x31\x39\x2e\x31\x2d\
\x32\x36\x35\x2e\x34\x2d\x32\x36\x35\x2e\x34\x2d\x32\x36\x35\x2e\
\x34\x68\x2d\x33\x31\x2e\x36\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\
\x23\x32\x44\x32\x44\x32\x44\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\
\x30\x36\x35\x35\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\
\x74\x68\x20\x64\x3d\x22\x4d\x33\x30\x38\x2e\x31\x20\x33\x38\x33\
\x2e\x34\x63\x2d\x33\x2e\x32\x20\x30\x2d\x36\x2e\x35\x2d\x31\x2d\
\x39\x2e\x33\x2d\x33\x2d\x37\x2e\x32\x2d\x35\x2e\x32\x2d\x38\x2e\
\x38\x2d\x31\x35\x2e\x32\x2d\x33\x2e\x36\x2d\x32\x32\x2e\x33\x20\
\x32\x38\x2e\x34\x2d\x33\x39\x2e\x34\x20\x36\x37\x2e\x31\x2d\x36\
\x39\x2e\x37\x20\x31\x31\x32\x2d\x38\x37\x2e\x35\x20\x38\x2e\x32\
\x2d\x33\x2e\x33\x20\x31\x37\x2e\x35\x20\x30\x2e\x38\x20\x32\x30\
\x2e\x38\x20\x39\x20\x33\x2e\x33\x20\x38\x2e\x32\x2d\x30\x2e\x38\
\x20\x31\x37\x2e\x35\x2d\x39\x20\x32\x30\x2e\x38\x2d\x33\x39\x2e\
\x32\x20\x31\x35\x2e\x35\x2d\x37\x33\x20\x34\x32\x2d\x39\x37\x2e\
\x38\x20\x37\x36\x2e\x34\x2d\x33\x2e\x32\x20\x34\x2e\x32\x2d\x38\
\x2e\x31\x20\x36\x2e\x36\x2d\x31\x33\x2e\x31\x20\x36\x2e\x36\x7a\
\x4d\x35\x31\x32\x2e\x38\x20\x38\x30\x33\x2e\x35\x63\x37\x39\x2e\
\x39\x20\x31\x2e\x31\x20\x31\x34\x32\x2e\x35\x2d\x34\x36\x2e\x35\
\x20\x31\x35\x31\x2e\x37\x2d\x31\x32\x31\x2e\x35\x20\x38\x2e\x38\
\x2d\x37\x31\x2e\x32\x2d\x39\x2e\x32\x2d\x39\x39\x2e\x37\x2d\x38\
\x38\x2e\x35\x2d\x31\x36\x31\x2d\x34\x37\x2e\x38\x2d\x33\x37\x2d\
\x33\x39\x2e\x32\x2d\x32\x39\x36\x2e\x38\x2d\x34\x30\x2e\x32\x2d\
\x32\x39\x37\x2e\x31\x68\x2d\x34\x37\x2e\x37\x63\x2d\x31\x2e\x31\
\x20\x30\x2e\x34\x20\x37\x2e\x36\x20\x32\x36\x30\x2e\x31\x2d\x34\
\x30\x2e\x32\x20\x32\x39\x37\x2e\x31\x2d\x37\x39\x2e\x33\x20\x36\
\x31\x2e\x33\x2d\x39\x37\x2e\x32\x20\x38\x39\x2e\x38\x2d\x38\x38\
\x2e\x35\x20\x31\x36\x31\x20\x39\x2e\x32\x20\x37\x35\x20\x37\x31\
\x2e\x38\x20\x31\x32\x32\x2e\x36\x20\x31\x35\x31\x2e\x37\x20\x31\
\x32\x31\x2e\x35\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\x46\
\x46\x46\x46\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x30\x36\x35\x36\
\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\
\x3d\x22\x4d\x34\x37\x36\x2e\x33\x20\x36\x31\x30\x2e\x33\x6c\x37\
\x2e\x31\x20\x37\x31\x2e\x35\x63\x34\x2e\x38\x20\x31\x38\x2e\x31\
\x20\x31\x32\x2e\x36\x20\x32\x38\x20\x32\x38\x20\x32\x38\x73\x32\
\x34\x2e\x35\x2d\x31\x31\x2e\x37\x20\x32\x38\x2d\x32\x38\x6c\x38\
\x2e\x33\x2d\x37\x32\x2e\x34\x2d\x33\x38\x2e\x33\x2d\x31\x32\x2e\
\x34\x2d\x33\x33\x2e\x31\x20\x31\x33\x2e\x33\x7a\x22\x20\x66\x69\
\x6c\x6c\x3d\x22\x23\x46\x46\x36\x36\x36\x36\x22\x20\x70\x2d\x69\
\x64\x3d\x22\x31\x30\x36\x35\x37\x22\x3e\x3c\x2f\x70\x61\x74\x68\
\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\x36\x38\x20\x38\
\x31\x39\x2e\x35\x48\x34\x35\x36\x63\x2d\x36\x38\x2e\x35\x20\x30\
\x2d\x31\x33\x33\x2e\x31\x2d\x32\x36\x2e\x39\x2d\x31\x38\x31\x2e\
\x39\x2d\x37\x35\x2e\x36\x53\x31\x39\x38\x2e\x35\x20\x36\x33\x30\
\x2e\x35\x20\x31\x39\x38\x2e\x35\x20\x35\x36\x32\x76\x2d\x35\x39\
\x2e\x35\x63\x30\x2d\x34\x30\x2e\x31\x20\x37\x2e\x39\x2d\x37\x39\
\x20\x32\x33\x2e\x35\x2d\x31\x31\x35\x2e\x37\x20\x31\x35\x2e\x31\
\x2d\x33\x35\x2e\x34\x20\x33\x36\x2e\x36\x2d\x36\x37\x2e\x33\x20\
\x36\x34\x2d\x39\x34\x2e\x37\x73\x35\x39\x2e\x33\x2d\x34\x38\x2e\
\x39\x20\x39\x34\x2e\x37\x2d\x36\x34\x63\x33\x36\x2e\x37\x2d\x31\
\x35\x2e\x36\x20\x37\x35\x2e\x37\x2d\x32\x33\x2e\x35\x20\x31\x31\
\x35\x2e\x37\x2d\x32\x33\x2e\x35\x48\x35\x32\x38\x63\x34\x30\x20\
\x30\x20\x37\x38\x2e\x39\x20\x37\x2e\x39\x20\x31\x31\x35\x2e\x35\
\x20\x32\x33\x2e\x35\x20\x33\x35\x2e\x34\x20\x31\x35\x20\x36\x37\
\x2e\x32\x20\x33\x36\x2e\x35\x20\x39\x34\x2e\x35\x20\x36\x33\x2e\
\x39\x20\x32\x37\x2e\x34\x20\x32\x37\x2e\x34\x20\x34\x38\x2e\x38\
\x20\x35\x39\x2e\x32\x20\x36\x33\x2e\x39\x20\x39\x34\x2e\x35\x20\
\x31\x35\x2e\x36\x20\x33\x36\x2e\x37\x20\x32\x33\x2e\x35\x20\x37\
\x35\x2e\x35\x20\x32\x33\x2e\x35\x20\x31\x31\x35\x2e\x35\x76\x36\
\x30\x63\x30\x20\x36\x38\x2e\x35\x2d\x32\x36\x2e\x39\x20\x31\x33\
\x33\x2e\x31\x2d\x37\x35\x2e\x36\x20\x31\x38\x31\x2e\x39\x53\x36\
\x33\x36\x2e\x35\x20\x38\x31\x39\x2e\x35\x20\x35\x36\x38\x20\x38\
\x31\x39\x2e\x35\x7a\x20\x6d\x2d\x37\x31\x2e\x35\x2d\x35\x38\x33\
\x63\x2d\x31\x34\x36\x2e\x37\x20\x30\x2d\x32\x36\x36\x20\x31\x31\
\x39\x2e\x33\x2d\x32\x36\x36\x20\x32\x36\x36\x56\x35\x36\x32\x63\
\x30\x20\x31\x32\x34\x2e\x34\x20\x31\x30\x31\x2e\x32\x20\x32\x32\
\x35\x2e\x35\x20\x32\x32\x35\x2e\x35\x20\x32\x32\x35\x2e\x35\x68\
\x31\x31\x32\x63\x31\x32\x34\x2e\x34\x20\x30\x20\x32\x32\x35\x2e\
\x35\x2d\x31\x30\x31\x2e\x32\x20\x32\x32\x35\x2e\x35\x2d\x32\x32\
\x35\x2e\x35\x76\x2d\x36\x30\x63\x30\x2d\x31\x34\x36\x2e\x34\x2d\
\x31\x31\x39\x2e\x31\x2d\x32\x36\x35\x2e\x34\x2d\x32\x36\x35\x2e\
\x34\x2d\x32\x36\x35\x2e\x34\x68\x2d\x33\x31\x2e\x36\x7a\x22\x20\
\x66\x69\x6c\x6c\x3d\x22\x23\x32\x44\x32\x44\x32\x44\x22\x20\x70\
\x2d\x69\x64\x3d\x22\x31\x30\x36\x35\x38\x22\x3e\x3c\x2f\x70\x61\
\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x38\x35\
\x2e\x34\x20\x34\x37\x30\x2e\x39\x68\x2d\x33\x33\x2e\x38\x63\x2d\
\x31\x30\x2e\x31\x20\x30\x2d\x31\x38\x2e\x33\x2d\x38\x2e\x32\x2d\
\x31\x38\x2e\x33\x2d\x31\x38\x2e\x33\x20\x30\x2d\x31\x30\x2e\x31\
\x20\x38\x2e\x32\x2d\x31\x38\x2e\x33\x20\x31\x38\x2e\x33\x2d\x31\
\x38\x2e\x33\x68\x33\x33\x2e\x38\x63\x31\x30\x2e\x31\x20\x30\x20\
\x31\x38\x2e\x33\x20\x38\x2e\x32\x20\x31\x38\x2e\x33\x20\x31\x38\
\x2e\x33\x20\x30\x20\x31\x30\x2e\x31\x2d\x38\x2e\x32\x20\x31\x38\
\x2e\x33\x2d\x31\x38\x2e\x33\x20\x31\x38\x2e\x33\x7a\x4d\x36\x37\
\x32\x2e\x34\x20\x34\x37\x30\x2e\x39\x68\x2d\x33\x33\x2e\x38\x63\
\x2d\x31\x30\x2e\x31\x20\x30\x2d\x31\x38\x2e\x33\x2d\x38\x2e\x32\
\x2d\x31\x38\x2e\x33\x2d\x31\x38\x2e\x33\x20\x30\x2d\x31\x30\x2e\
\x31\x20\x38\x2e\x32\x2d\x31\x38\x2e\x33\x20\x31\x38\x2e\x33\x2d\
\x31\x38\x2e\x33\x68\x33\x33\x2e\x38\x63\x31\x30\x2e\x31\x20\x30\
\x20\x31\x38\x2e\x33\x20\x38\x2e\x32\x20\x31\x38\x2e\x33\x20\x31\
\x38\x2e\x33\x20\x30\x20\x31\x30\x2e\x31\x2d\x38\x2e\x32\x20\x31\
\x38\x2e\x33\x2d\x31\x38\x2e\x33\x20\x31\x38\x2e\x33\x7a\x22\x20\
\x66\x69\x6c\x6c\x3d\x22\x23\x32\x44\x32\x44\x32\x44\x22\x20\x70\
\x2d\x69\x64\x3d\x22\x31\x30\x36\x35\x39\x22\x3e\x3c\x2f\x70\x61\
\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x36\x39\
\x2e\x33\x20\x35\x35\x36\x2e\x39\x61\x34\x32\x2e\x37\x20\x32\x37\
\x2e\x33\x20\x30\x20\x31\x20\x30\x20\x38\x35\x2e\x34\x20\x30\x20\
\x34\x32\x2e\x37\x20\x32\x37\x2e\x33\x20\x30\x20\x31\x20\x30\x2d\
\x38\x35\x2e\x34\x20\x30\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\
\x32\x44\x32\x44\x32\x44\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x30\
\x36\x36\x30\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\
\x68\x20\x64\x3d\x22\x4d\x34\x38\x31\x2e\x32\x20\x36\x31\x38\x2e\
\x33\x63\x2d\x35\x2e\x39\x20\x30\x2d\x31\x31\x2e\x38\x2d\x31\x2e\
\x34\x2d\x31\x37\x2e\x32\x2d\x34\x2e\x31\x2d\x39\x2e\x33\x2d\x34\
\x2e\x36\x2d\x31\x36\x2e\x32\x2d\x31\x32\x2e\x36\x2d\x31\x39\x2e\
\x35\x2d\x32\x32\x2e\x34\x2d\x31\x2e\x34\x2d\x34\x2e\x32\x20\x30\
\x2e\x39\x2d\x38\x2e\x37\x20\x35\x2d\x31\x30\x2e\x31\x20\x34\x2e\
\x32\x2d\x31\x2e\x34\x20\x38\x2e\x37\x20\x30\x2e\x39\x20\x31\x30\
\x2e\x31\x20\x35\x20\x31\x2e\x39\x20\x35\x2e\x38\x20\x36\x20\x31\
\x30\x2e\x34\x20\x31\x31\x2e\x35\x20\x31\x33\x2e\x32\x73\x31\x31\
\x2e\x36\x20\x33\x2e\x31\x20\x31\x37\x2e\x34\x20\x31\x2e\x32\x63\
\x31\x31\x2e\x39\x2d\x34\x20\x31\x38\x2e\x34\x2d\x31\x36\x2e\x39\
\x20\x31\x34\x2e\x34\x2d\x32\x38\x2e\x39\x2d\x31\x2e\x34\x2d\x34\
\x2e\x32\x20\x30\x2e\x39\x2d\x38\x2e\x37\x20\x35\x2d\x31\x30\x2e\
\x31\x20\x34\x2e\x32\x2d\x31\x2e\x34\x20\x38\x2e\x37\x20\x30\x2e\
\x39\x20\x31\x30\x2e\x31\x20\x35\x20\x36\x2e\x38\x20\x32\x30\x2e\
\x33\x2d\x34\x2e\x32\x20\x34\x32\x2e\x33\x2d\x32\x34\x2e\x34\x20\
\x34\x39\x2e\x31\x2d\x34\x2e\x31\x20\x31\x2e\x34\x2d\x38\x2e\x33\
\x20\x32\x2e\x31\x2d\x31\x32\x2e\x34\x20\x32\x2e\x31\x7a\x22\x20\
\x66\x69\x6c\x6c\x3d\x22\x23\x32\x44\x32\x44\x32\x44\x22\x20\x70\
\x2d\x69\x64\x3d\x22\x31\x30\x36\x36\x31\x22\x3e\x3c\x2f\x70\x61\
\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\x34\x32\
\x2e\x38\x20\x36\x31\x38\x2e\x33\x63\x2d\x34\x2e\x32\x20\x30\x2d\
\x38\x2e\x33\x2d\x30\x2e\x37\x2d\x31\x32\x2e\x34\x2d\x32\x2d\x32\
\x30\x2e\x33\x2d\x36\x2e\x38\x2d\x33\x31\x2e\x32\x2d\x32\x38\x2e\
\x38\x2d\x32\x34\x2e\x34\x2d\x34\x39\x2e\x31\x20\x31\x2e\x34\x2d\
\x34\x2e\x32\x20\x35\x2e\x39\x2d\x36\x2e\x34\x20\x31\x30\x2e\x31\
\x2d\x35\x20\x34\x2e\x32\x20\x31\x2e\x34\x20\x36\x2e\x34\x20\x35\
\x2e\x39\x20\x35\x20\x31\x30\x2e\x31\x2d\x34\x20\x31\x31\x2e\x39\
\x20\x32\x2e\x34\x20\x32\x34\x2e\x39\x20\x31\x34\x2e\x34\x20\x32\
\x38\x2e\x39\x20\x35\x2e\x38\x20\x31\x2e\x39\x20\x31\x32\x20\x31\
\x2e\x35\x20\x31\x37\x2e\x34\x2d\x31\x2e\x32\x20\x35\x2e\x35\x2d\
\x32\x2e\x37\x20\x39\x2e\x35\x2d\x37\x2e\x34\x20\x31\x31\x2e\x35\
\x2d\x31\x33\x2e\x32\x20\x31\x2e\x34\x2d\x34\x2e\x32\x20\x35\x2e\
\x39\x2d\x36\x2e\x34\x20\x31\x30\x2e\x31\x2d\x35\x20\x34\x2e\x32\
\x20\x31\x2e\x34\x20\x36\x2e\x34\x20\x35\x2e\x39\x20\x35\x20\x31\
\x30\x2e\x31\x2d\x33\x2e\x33\x20\x39\x2e\x38\x2d\x31\x30\x2e\x32\
\x20\x31\x37\x2e\x38\x2d\x31\x39\x2e\x35\x20\x32\x32\x2e\x34\x2d\
\x35\x2e\x34\x20\x32\x2e\x36\x2d\x31\x31\x2e\x32\x20\x34\x2d\x31\
\x37\x2e\x32\x20\x34\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x32\
\x44\x32\x44\x32\x44\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x30\x36\
\x36\x32\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\
\x20\x64\x3d\x22\x4d\x36\x39\x31\x2e\x38\x20\x35\x33\x32\x2e\x33\
\x61\x33\x37\x2e\x37\x20\x32\x34\x2e\x31\x20\x30\x20\x31\x20\x30\
\x20\x37\x35\x2e\x34\x20\x30\x20\x33\x37\x2e\x37\x20\x32\x34\x2e\
\x31\x20\x30\x20\x31\x20\x30\x2d\x37\x35\x2e\x34\x20\x30\x5a\x22\
\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\x39\x32\x39\x32\x22\x20\
\x70\x2d\x69\x64\x3d\x22\x31\x30\x36\x36\x33\x22\x3e\x3c\x2f\x70\
\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\
\x36\x2e\x38\x20\x35\x33\x32\x2e\x33\x61\x33\x37\x2e\x37\x20\x32\
\x34\x2e\x31\x20\x30\x20\x31\x20\x30\x20\x37\x35\x2e\x34\x20\x30\
\x20\x33\x37\x2e\x37\x20\x32\x34\x2e\x31\x20\x30\x20\x31\x20\x30\
\x2d\x37\x35\x2e\x34\x20\x30\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\
\x23\x46\x46\x39\x32\x39\x32\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\
\x30\x36\x36\x34\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\
\x74\x68\x20\x64\x3d\x22\x4d\x36\x35\x30\x2e\x31\x20\x37\x37\x31\
\x63\x33\x33\x20\x32\x30\x2e\x39\x20\x35\x30\x2e\x32\x20\x31\x32\
\x37\x2e\x39\x2d\x36\x20\x31\x33\x30\x2e\x35\x2d\x33\x31\x2e\x35\
\x20\x31\x2e\x34\x2d\x31\x31\x36\x2e\x31\x2d\x33\x33\x2e\x33\x2d\
\x31\x31\x39\x2e\x32\x2d\x33\x37\x6c\x31\x35\x2e\x39\x2d\x35\x35\
\x2e\x35\x73\x38\x32\x2e\x38\x2d\x35\x34\x2e\x38\x20\x31\x30\x39\
\x2e\x33\x2d\x33\x38\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\
\x46\x37\x31\x37\x31\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x30\x36\
\x36\x35\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\
\x20\x64\x3d\x22\x4d\x36\x34\x32\x2e\x32\x20\x39\x31\x37\x2e\x35\
\x63\x2d\x31\x35\x2e\x38\x20\x30\x2d\x34\x30\x2e\x36\x2d\x35\x2e\
\x39\x2d\x37\x33\x2e\x37\x2d\x31\x37\x2e\x35\x2d\x31\x31\x2e\x39\
\x2d\x34\x2e\x32\x2d\x32\x34\x2e\x31\x2d\x38\x2e\x39\x2d\x33\x34\
\x2e\x34\x2d\x31\x33\x2e\x32\x2d\x31\x36\x2e\x39\x2d\x37\x2e\x31\
\x2d\x31\x39\x2e\x31\x2d\x39\x2e\x32\x2d\x32\x31\x2e\x35\x2d\x31\
\x31\x2e\x39\x6c\x2d\x35\x2e\x35\x2d\x36\x2e\x35\x4c\x35\x32\x37\
\x20\x37\x39\x39\x6c\x34\x2e\x39\x2d\x33\x2e\x33\x63\x30\x2e\x39\
\x2d\x30\x2e\x36\x20\x32\x31\x2e\x39\x2d\x31\x34\x2e\x34\x20\x34\
\x36\x2e\x36\x2d\x32\x36\x2e\x34\x20\x33\x38\x2e\x32\x2d\x31\x38\
\x2e\x35\x20\x36\x33\x2e\x37\x2d\x32\x32\x2e\x32\x20\x38\x30\x2e\
\x31\x2d\x31\x31\x2e\x38\x20\x31\x33\x2e\x38\x20\x38\x2e\x37\x20\
\x32\x35\x2e\x36\x20\x32\x37\x2e\x36\x20\x33\x32\x2e\x34\x20\x35\
\x31\x2e\x36\x20\x36\x2e\x35\x20\x32\x33\x2e\x31\x20\x37\x2e\x34\
\x20\x34\x37\x2e\x32\x20\x32\x2e\x34\x20\x36\x36\x2d\x36\x2e\x39\
\x20\x32\x35\x2e\x38\x2d\x32\x34\x2e\x36\x20\x34\x31\x2e\x32\x2d\
\x34\x38\x2e\x37\x20\x34\x32\x2e\x33\x2d\x30\x2e\x37\x20\x30\x2e\
\x31\x2d\x31\x2e\x36\x20\x30\x2e\x31\x2d\x32\x2e\x35\x20\x30\x2e\
\x31\x7a\x20\x6d\x2d\x39\x38\x2e\x33\x2d\x36\x31\x2e\x33\x63\x32\
\x33\x2e\x36\x20\x31\x30\x2e\x32\x20\x37\x38\x2e\x37\x20\x33\x30\
\x2e\x32\x20\x39\x39\x2e\x35\x20\x32\x39\x2e\x33\x20\x36\x2e\x37\
\x2d\x30\x2e\x33\x20\x31\x34\x2e\x39\x2d\x32\x2e\x37\x20\x31\x39\
\x2e\x32\x2d\x31\x38\x2e\x36\x20\x33\x2e\x35\x2d\x31\x33\x2e\x32\
\x20\x32\x2e\x37\x2d\x33\x31\x2e\x36\x2d\x32\x2e\x33\x2d\x34\x39\
\x2e\x31\x2d\x35\x2e\x34\x2d\x31\x39\x2e\x33\x2d\x31\x33\x2e\x35\
\x2d\x33\x30\x2d\x31\x38\x2e\x37\x2d\x33\x33\x2e\x33\x2d\x30\x2e\
\x31\x2d\x30\x2e\x31\x2d\x31\x30\x2e\x32\x2d\x35\x2e\x32\x2d\x34\
\x39\x2e\x31\x20\x31\x33\x2e\x36\x2d\x31\x36\x2e\x31\x20\x37\x2e\
\x38\x2d\x33\x30\x2e\x37\x20\x31\x36\x2e\x36\x2d\x33\x38\x20\x32\
\x31\x2e\x31\x6c\x2d\x31\x30\x2e\x36\x20\x33\x37\x7a\x22\x20\x66\
\x69\x6c\x6c\x3d\x22\x23\x32\x44\x32\x44\x32\x44\x22\x20\x70\x2d\
\x69\x64\x3d\x22\x31\x30\x36\x36\x36\x22\x3e\x3c\x2f\x70\x61\x74\
\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x37\x38\x2e\
\x37\x20\x37\x37\x31\x63\x2d\x33\x33\x20\x32\x30\x2e\x39\x2d\x35\
\x30\x2e\x32\x20\x31\x32\x37\x2e\x39\x20\x36\x20\x31\x33\x30\x2e\
\x35\x20\x33\x31\x2e\x35\x20\x31\x2e\x34\x20\x31\x31\x36\x2e\x31\
\x2d\x33\x33\x2e\x33\x20\x31\x31\x39\x2e\x32\x2d\x33\x37\x4c\x34\
\x38\x38\x2e\x31\x20\x38\x30\x39\x73\x2d\x38\x32\x2e\x38\x2d\x35\
\x34\x2e\x38\x2d\x31\x30\x39\x2e\x34\x2d\x33\x38\x7a\x22\x20\x66\
\x69\x6c\x6c\x3d\x22\x23\x46\x46\x37\x31\x37\x31\x22\x20\x70\x2d\
\x69\x64\x3d\x22\x31\x30\x36\x36\x37\x22\x3e\x3c\x2f\x70\x61\x74\
\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x38\x36\x2e\
\x36\x20\x39\x31\x37\x2e\x35\x63\x2d\x30\x2e\x39\x20\x30\x2d\x31\
\x2e\x38\x20\x30\x2d\x32\x2e\x36\x2d\x30\x2e\x31\x2d\x32\x34\x2e\
\x31\x2d\x31\x2e\x31\x2d\x34\x31\x2e\x38\x2d\x31\x36\x2e\x35\x2d\
\x34\x38\x2e\x37\x2d\x34\x32\x2e\x33\x2d\x35\x2d\x31\x38\x2e\x38\
\x2d\x34\x2e\x31\x2d\x34\x32\x2e\x39\x20\x32\x2e\x34\x2d\x36\x36\
\x20\x36\x2e\x38\x2d\x32\x34\x2e\x31\x20\x31\x38\x2e\x36\x2d\x34\
\x32\x2e\x39\x20\x33\x32\x2e\x34\x2d\x35\x31\x2e\x36\x20\x31\x36\
\x2e\x34\x2d\x31\x30\x2e\x34\x20\x34\x31\x2e\x39\x2d\x36\x2e\x36\
\x20\x38\x30\x2e\x31\x20\x31\x31\x2e\x38\x20\x32\x34\x2e\x37\x20\
\x31\x31\x2e\x39\x20\x34\x35\x2e\x37\x20\x32\x35\x2e\x38\x20\x34\
\x36\x2e\x36\x20\x32\x36\x2e\x34\x6c\x34\x2e\x39\x20\x33\x2e\x33\
\x20\x31\x39\x2e\x39\x20\x36\x39\x2e\x34\x2d\x35\x2e\x35\x20\x36\
\x2e\x35\x63\x2d\x32\x2e\x33\x20\x32\x2e\x37\x2d\x34\x2e\x36\x20\
\x34\x2e\x37\x2d\x32\x31\x2e\x35\x20\x31\x31\x2e\x39\x2d\x31\x30\
\x2e\x33\x20\x34\x2e\x33\x2d\x32\x32\x2e\x35\x20\x39\x2d\x33\x34\
\x2e\x34\x20\x31\x33\x2e\x32\x2d\x33\x32\x2e\x39\x20\x31\x31\x2e\
\x36\x2d\x35\x37\x2e\x37\x20\x31\x37\x2e\x35\x2d\x37\x33\x2e\x36\
\x20\x31\x37\x2e\x35\x7a\x20\x6d\x35\x2e\x35\x2d\x31\x33\x33\x2e\
\x37\x63\x2d\x33\x2e\x34\x20\x30\x2d\x34\x2e\x37\x20\x30\x2e\x37\
\x2d\x34\x2e\x38\x20\x30\x2e\x37\x2d\x35\x2e\x32\x20\x33\x2e\x33\
\x2d\x31\x33\x2e\x33\x20\x31\x34\x2d\x31\x38\x2e\x37\x20\x33\x33\
\x2e\x33\x2d\x34\x2e\x39\x20\x31\x37\x2e\x35\x2d\x35\x2e\x38\x20\
\x33\x35\x2e\x39\x2d\x32\x2e\x33\x20\x34\x39\x2e\x31\x20\x34\x2e\
\x32\x20\x31\x35\x2e\x39\x20\x31\x32\x2e\x35\x20\x31\x38\x2e\x33\
\x20\x31\x39\x2e\x32\x20\x31\x38\x2e\x36\x68\x31\x2e\x35\x63\x32\
\x31\x2e\x38\x20\x30\x20\x37\x35\x2d\x31\x39\x2e\x33\x20\x39\x38\
\x2d\x32\x39\x2e\x33\x6c\x2d\x31\x30\x2e\x36\x2d\x33\x37\x63\x2d\
\x37\x2e\x33\x2d\x34\x2e\x36\x2d\x32\x32\x2e\x31\x2d\x31\x33\x2e\
\x35\x2d\x33\x38\x2e\x32\x2d\x32\x31\x2e\x33\x2d\x32\x34\x2e\x39\
\x2d\x31\x31\x2e\x39\x2d\x33\x38\x2d\x31\x34\x2e\x31\x2d\x34\x34\
\x2e\x31\x2d\x31\x34\x2e\x31\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\
\x23\x32\x44\x32\x44\x32\x44\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\
\x30\x36\x36\x38\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\
\x74\x68\x20\x64\x3d\x22\x4d\x32\x38\x34\x20\x34\x30\x38\x2e\x36\
\x6d\x2d\x31\x36\x20\x30\x61\x31\x36\x20\x31\x36\x20\x30\x20\x31\
\x20\x30\x20\x33\x32\x20\x30\x20\x31\x36\x20\x31\x36\x20\x30\x20\
\x31\x20\x30\x2d\x33\x32\x20\x30\x5a\x22\x20\x66\x69\x6c\x6c\x3d\
\x22\x23\x46\x46\x46\x46\x46\x46\x22\x20\x70\x2d\x69\x64\x3d\x22\
\x31\x30\x36\x36\x39\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\
\x61\x74\x68\x20\x64\x3d\x22\x4d\x36\x32\x30\x2e\x33\x20\x38\x35\
\x30\x2e\x37\x63\x2d\x31\x2e\x32\x20\x30\x2d\x32\x2e\x33\x2d\x30\
\x2e\x31\x2d\x33\x2e\x35\x2d\x30\x2e\x34\x2d\x31\x33\x2e\x31\x2d\
\x33\x2d\x33\x33\x2e\x34\x2d\x34\x2e\x35\x2d\x33\x39\x2e\x39\x2d\
\x33\x2d\x35\x2e\x37\x20\x34\x2e\x35\x2d\x31\x34\x20\x34\x2e\x37\
\x2d\x31\x39\x2e\x39\x2d\x30\x2e\x31\x2d\x36\x2e\x39\x2d\x35\x2e\
\x35\x2d\x38\x2d\x31\x35\x2e\x36\x2d\x32\x2e\x35\x2d\x32\x32\x2e\
\x35\x20\x36\x2e\x32\x2d\x37\x2e\x38\x20\x31\x37\x2e\x32\x2d\x31\
\x30\x2e\x37\x20\x33\x36\x2e\x38\x2d\x39\x2e\x38\x20\x31\x32\x20\
\x30\x2e\x35\x20\x32\x35\x20\x32\x2e\x35\x20\x33\x32\x2e\x35\x20\
\x34\x2e\x32\x20\x38\x2e\x36\x20\x31\x2e\x39\x20\x31\x34\x20\x31\
\x30\x2e\x35\x20\x31\x32\x2e\x31\x20\x31\x39\x2e\x31\x2d\x31\x2e\
\x37\x20\x37\x2e\x34\x2d\x38\x2e\x33\x20\x31\x32\x2e\x35\x2d\x31\
\x35\x2e\x36\x20\x31\x32\x2e\x35\x7a\x22\x20\x66\x69\x6c\x6c\x3d\
\x22\x23\x46\x46\x38\x44\x38\x44\x22\x20\x70\x2d\x69\x64\x3d\x22\
\x31\x30\x36\x37\x30\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\
\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x31\x30\x20\x38\x35\x32\x2e\
\x36\x63\x2d\x37\x2e\x33\x20\x30\x2d\x31\x33\x2e\x39\x2d\x35\x2d\
\x31\x35\x2e\x36\x2d\x31\x32\x2e\x35\x2d\x31\x2e\x39\x2d\x38\x2e\
\x36\x20\x33\x2e\x35\x2d\x31\x37\x2e\x32\x20\x31\x32\x2e\x31\x2d\
\x31\x39\x2e\x31\x20\x37\x2e\x35\x2d\x31\x2e\x37\x20\x32\x30\x2e\
\x35\x2d\x33\x2e\x36\x20\x33\x32\x2e\x35\x2d\x34\x2e\x32\x20\x31\
\x39\x2e\x36\x2d\x30\x2e\x39\x20\x33\x30\x2e\x36\x20\x32\x20\x33\
\x36\x2e\x38\x20\x39\x2e\x38\x20\x35\x2e\x35\x20\x36\x2e\x39\x20\
\x34\x2e\x34\x20\x31\x37\x2d\x32\x2e\x35\x20\x32\x32\x2e\x35\x2d\
\x35\x2e\x39\x20\x34\x2e\x37\x2d\x31\x34\x2e\x32\x20\x34\x2e\x36\
\x2d\x31\x39\x2e\x39\x20\x30\x2e\x31\x2d\x36\x2e\x35\x2d\x31\x2e\
\x34\x2d\x32\x36\x2e\x37\x20\x30\x2e\x31\x2d\x33\x39\x2e\x39\x20\
\x33\x2d\x31\x2e\x32\x20\x30\x2e\x33\x2d\x32\x2e\x34\x20\x30\x2e\
\x34\x2d\x33\x2e\x35\x20\x30\x2e\x34\x7a\x22\x20\x66\x69\x6c\x6c\
\x3d\x22\x23\x46\x46\x38\x44\x38\x44\x22\x20\x70\x2d\x69\x64\x3d\
\x22\x31\x30\x36\x37\x31\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\
\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\x36\x32\x2e\x32\x20\x38\
\x32\x36\x2e\x39\x63\x30\x20\x31\x2e\x36\x2d\x30\x2e\x31\x20\x33\
\x2e\x32\x2d\x30\x2e\x32\x20\x34\x2e\x38\x2d\x32\x2e\x34\x20\x32\
\x35\x2e\x35\x2d\x32\x33\x2e\x39\x20\x34\x35\x2e\x35\x2d\x35\x30\
\x2e\x31\x20\x34\x35\x2e\x35\x2d\x32\x37\x2e\x38\x20\x30\x2d\x35\
\x30\x2e\x33\x2d\x32\x32\x2e\x35\x2d\x35\x30\x2e\x33\x2d\x35\x30\
\x2e\x33\x73\x32\x32\x2e\x35\x2d\x35\x30\x2e\x33\x20\x35\x30\x2e\
\x33\x2d\x35\x30\x2e\x33\x20\x35\x30\x2e\x33\x20\x32\x32\x2e\x35\
\x20\x35\x30\x2e\x33\x20\x35\x30\x2e\x33\x7a\x22\x20\x66\x69\x6c\
\x6c\x3d\x22\x23\x46\x46\x37\x31\x37\x31\x22\x20\x70\x2d\x69\x64\
\x3d\x22\x31\x30\x36\x37\x32\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\
\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\x31\x31\x2e\x39\x20\
\x38\x39\x33\x2e\x32\x63\x2d\x33\x36\x2e\x36\x20\x30\x2d\x36\x36\
\x2e\x33\x2d\x32\x39\x2e\x38\x2d\x36\x36\x2e\x33\x2d\x36\x36\x2e\
\x33\x73\x32\x39\x2e\x38\x2d\x36\x36\x2e\x33\x20\x36\x36\x2e\x33\
\x2d\x36\x36\x2e\x33\x63\x33\x36\x2e\x36\x20\x30\x20\x36\x36\x2e\
\x33\x20\x32\x39\x2e\x38\x20\x36\x36\x2e\x33\x20\x36\x36\x2e\x33\
\x20\x30\x20\x32\x2e\x31\x2d\x30\x2e\x31\x20\x34\x2e\x33\x2d\x30\
\x2e\x33\x20\x36\x2e\x33\x2d\x31\x2e\x36\x20\x31\x36\x2e\x34\x2d\
\x39\x2e\x31\x20\x33\x31\x2e\x35\x2d\x32\x31\x2e\x33\x20\x34\x32\
\x2e\x36\x61\x36\x35\x2e\x39\x39\x32\x20\x36\x35\x2e\x39\x39\x32\
\x20\x30\x20\x30\x20\x31\x2d\x34\x34\x2e\x37\x20\x31\x37\x2e\x34\
\x7a\x20\x6d\x30\x2d\x31\x30\x30\x2e\x36\x63\x2d\x31\x38\x2e\x39\
\x20\x30\x2d\x33\x34\x2e\x33\x20\x31\x35\x2e\x34\x2d\x33\x34\x2e\
\x33\x20\x33\x34\x2e\x33\x73\x31\x35\x2e\x34\x20\x33\x34\x2e\x33\
\x20\x33\x34\x2e\x33\x20\x33\x34\x2e\x33\x63\x31\x37\x2e\x38\x20\
\x30\x20\x33\x32\x2e\x35\x2d\x31\x33\x2e\x33\x20\x33\x34\x2e\x32\
\x2d\x33\x31\x20\x30\x2e\x31\x2d\x31\x2e\x31\x20\x30\x2e\x32\x2d\
\x32\x2e\x32\x20\x30\x2e\x32\x2d\x33\x2e\x33\x2d\x30\x2e\x31\x2d\
\x31\x39\x2d\x31\x35\x2e\x35\x2d\x33\x34\x2e\x33\x2d\x33\x34\x2e\
\x34\x2d\x33\x34\x2e\x33\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\
\x32\x44\x32\x44\x32\x44\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x30\
\x36\x37\x33\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\
\x68\x20\x64\x3d\x22\x4d\x35\x30\x30\x20\x38\x31\x32\x2e\x31\x6d\
\x2d\x38\x2e\x32\x20\x30\x61\x38\x2e\x32\x20\x38\x2e\x32\x20\x30\
\x20\x31\x20\x30\x20\x31\x36\x2e\x34\x20\x30\x20\x38\x2e\x32\x20\
\x38\x2e\x32\x20\x30\x20\x31\x20\x30\x2d\x31\x36\x2e\x34\x20\x30\
\x5a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\x46\x46\x46\x46\
\x22\x20\x70\x2d\x69\x64\x3d\x22\x31\x30\x36\x37\x34\x22\x3e\x3c\
\x2f\x70\x61\x74\x68\x3e\x3c\x2f\x73\x76\x67\x3e\
\x00\x00\x0f\xcf\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x37\
\x34\x37\x31\x31\x35\x32\x36\x32\x37\x34\x30\x22\x20\x63\x6c\x61\
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x37\x36\x34\x35\x22\x20\x78\
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\x3d\
\x22\x32\x30\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x32\x30\
\x30\x22\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x34\x35\
\x2e\x37\x30\x36\x20\x32\x39\x37\x2e\x34\x32\x33\x63\x31\x35\x2e\
\x33\x35\x20\x31\x32\x2e\x37\x39\x32\x20\x33\x35\x2e\x38\x31\x37\
\x20\x32\x30\x2e\x34\x36\x37\x20\x35\x33\x2e\x37\x32\x36\x20\x31\
\x37\x2e\x39\x30\x38\x20\x32\x30\x2e\x34\x36\x37\x20\x30\x20\x33\
\x38\x2e\x33\x37\x35\x2d\x31\x30\x2e\x32\x33\x33\x20\x35\x33\x2e\
\x37\x32\x35\x2d\x32\x33\x2e\x30\x32\x35\x20\x31\x37\x2e\x39\x31\
\x2d\x31\x35\x2e\x33\x35\x20\x33\x30\x2e\x37\x2d\x33\x35\x2e\x38\
\x31\x37\x20\x34\x30\x2e\x39\x33\x34\x2d\x35\x38\x2e\x38\x34\x32\
\x43\x35\x31\x32\x20\x31\x38\x39\x2e\x39\x37\x20\x35\x31\x32\x20\
\x31\x33\x36\x2e\x32\x34\x35\x20\x34\x39\x36\x2e\x36\x35\x20\x39\
\x30\x2e\x31\x39\x34\x63\x2d\x31\x30\x2e\x32\x33\x34\x2d\x33\x30\
\x2e\x37\x2d\x32\x38\x2e\x31\x34\x32\x2d\x35\x38\x2e\x38\x34\x32\
\x2d\x35\x33\x2e\x37\x32\x36\x2d\x37\x36\x2e\x37\x35\x43\x34\x32\
\x37\x2e\x35\x37\x34\x20\x33\x2e\x32\x31\x20\x34\x30\x34\x2e\x35\
\x34\x38\x2d\x31\x2e\x39\x30\x36\x20\x33\x38\x34\x2e\x30\x38\x31\
\x20\x30\x2e\x36\x35\x32\x63\x2d\x31\x32\x2e\x37\x39\x31\x20\x32\
\x2e\x35\x35\x38\x2d\x32\x35\x2e\x35\x38\x33\x20\x37\x2e\x36\x37\
\x35\x2d\x33\x38\x2e\x33\x37\x35\x20\x31\x35\x2e\x33\x35\x2d\x32\
\x33\x2e\x30\x32\x35\x20\x31\x35\x2e\x33\x35\x2d\x33\x38\x2e\x33\
\x37\x36\x20\x34\x30\x2e\x39\x33\x34\x2d\x34\x38\x2e\x36\x31\x20\
\x36\x36\x2e\x35\x31\x38\x2d\x31\x32\x2e\x37\x39\x31\x20\x34\x36\
\x2e\x30\x35\x2d\x31\x35\x2e\x33\x35\x20\x39\x32\x2e\x31\x30\x31\
\x2d\x32\x2e\x35\x35\x37\x20\x31\x33\x38\x2e\x31\x35\x32\x20\x31\
\x30\x2e\x32\x33\x33\x20\x32\x38\x2e\x31\x34\x32\x20\x32\x35\x2e\
\x35\x38\x33\x20\x35\x36\x2e\x32\x38\x34\x20\x35\x31\x2e\x31\x36\
\x37\x20\x37\x36\x2e\x37\x35\x7a\x20\x6d\x32\x35\x35\x2e\x38\x33\
\x37\x20\x32\x2e\x35\x35\x38\x63\x31\x37\x2e\x39\x30\x39\x20\x31\
\x35\x2e\x33\x35\x20\x34\x30\x2e\x39\x33\x34\x20\x32\x35\x2e\x35\
\x38\x34\x20\x36\x33\x2e\x39\x36\x20\x32\x35\x2e\x35\x38\x34\x20\
\x32\x30\x2e\x34\x36\x36\x20\x32\x2e\x35\x35\x38\x20\x33\x38\x2e\
\x33\x37\x35\x2d\x32\x2e\x35\x35\x38\x20\x35\x36\x2e\x32\x38\x33\
\x2d\x31\x32\x2e\x37\x39\x32\x20\x31\x37\x2e\x39\x30\x39\x2d\x31\
\x30\x2e\x32\x33\x33\x20\x33\x33\x2e\x32\x36\x2d\x32\x35\x2e\x35\
\x38\x34\x20\x34\x33\x2e\x34\x39\x33\x2d\x34\x33\x2e\x34\x39\x32\
\x20\x31\x32\x2e\x37\x39\x32\x2d\x32\x30\x2e\x34\x36\x37\x20\x32\
\x33\x2e\x30\x32\x35\x2d\x34\x30\x2e\x39\x33\x34\x20\x33\x30\x2e\
\x37\x2d\x36\x33\x2e\x39\x36\x20\x35\x2e\x31\x31\x37\x2d\x31\x37\
\x2e\x39\x30\x38\x20\x37\x2e\x36\x37\x35\x2d\x33\x38\x2e\x33\x37\
\x35\x20\x35\x2e\x31\x31\x37\x2d\x35\x38\x2e\x38\x34\x32\x2d\x32\
\x2e\x35\x35\x39\x2d\x32\x38\x2e\x31\x34\x32\x2d\x31\x35\x2e\x33\
\x35\x2d\x35\x33\x2e\x37\x32\x36\x2d\x33\x33\x2e\x32\x35\x39\x2d\
\x37\x36\x2e\x37\x35\x31\x2d\x31\x32\x2e\x37\x39\x32\x2d\x31\x35\
\x2e\x33\x35\x2d\x32\x38\x2e\x31\x34\x32\x2d\x33\x30\x2e\x37\x2d\
\x34\x36\x2e\x30\x35\x2d\x33\x38\x2e\x33\x37\x36\x2d\x31\x32\x2e\
\x37\x39\x32\x2d\x35\x2e\x31\x31\x36\x2d\x32\x38\x2e\x31\x34\x33\
\x2d\x31\x30\x2e\x32\x33\x33\x2d\x34\x30\x2e\x39\x33\x35\x2d\x37\
\x2e\x36\x37\x35\x2d\x31\x37\x2e\x39\x30\x38\x20\x32\x2e\x35\x35\
\x39\x2d\x33\x33\x2e\x32\x35\x38\x20\x31\x32\x2e\x37\x39\x32\x2d\
\x34\x36\x2e\x30\x35\x20\x32\x33\x2e\x30\x32\x36\x2d\x31\x37\x2e\
\x39\x30\x39\x20\x31\x35\x2e\x33\x35\x2d\x33\x33\x2e\x32\x35\x39\
\x20\x33\x33\x2e\x32\x35\x38\x2d\x34\x33\x2e\x34\x39\x33\x20\x35\
\x33\x2e\x37\x32\x35\x2d\x31\x30\x2e\x32\x33\x33\x20\x31\x37\x2e\
\x39\x30\x39\x2d\x32\x30\x2e\x34\x36\x36\x20\x33\x38\x2e\x33\x37\
\x36\x2d\x32\x33\x2e\x30\x32\x35\x20\x36\x31\x2e\x34\x30\x31\x2d\
\x32\x2e\x35\x35\x38\x20\x32\x35\x2e\x35\x38\x34\x2d\x32\x2e\x35\
\x35\x38\x20\x35\x31\x2e\x31\x36\x38\x20\x32\x2e\x35\x35\x39\x20\
\x37\x34\x2e\x31\x39\x33\x20\x35\x2e\x31\x31\x36\x20\x32\x33\x2e\
\x30\x32\x35\x20\x31\x32\x2e\x37\x39\x31\x20\x34\x36\x2e\x30\x35\
\x20\x33\x30\x2e\x37\x20\x36\x33\x2e\x39\x36\x7a\x4d\x32\x34\x35\
\x2e\x39\x32\x39\x20\x35\x30\x39\x2e\x37\x36\x38\x63\x31\x37\x2e\
\x39\x31\x2d\x31\x35\x2e\x33\x35\x20\x32\x38\x2e\x31\x34\x33\x2d\
\x33\x35\x2e\x38\x31\x38\x20\x33\x35\x2e\x38\x31\x38\x2d\x35\x36\
\x2e\x32\x38\x35\x20\x31\x30\x2e\x32\x33\x33\x2d\x33\x33\x2e\x32\
\x35\x38\x20\x31\x30\x2e\x32\x33\x33\x2d\x36\x36\x2e\x35\x31\x37\
\x20\x37\x2e\x36\x37\x35\x2d\x39\x39\x2e\x37\x37\x36\x20\x30\x2d\
\x31\x32\x2e\x37\x39\x32\x2d\x35\x2e\x31\x31\x37\x2d\x32\x35\x2e\
\x35\x38\x34\x2d\x31\x30\x2e\x32\x33\x34\x2d\x33\x38\x2e\x33\x37\
\x36\x2d\x31\x32\x2e\x37\x39\x32\x2d\x32\x38\x2e\x31\x34\x32\x2d\
\x33\x35\x2e\x38\x31\x37\x2d\x35\x33\x2e\x37\x32\x35\x2d\x36\x33\
\x2e\x39\x35\x39\x2d\x36\x39\x2e\x30\x37\x36\x2d\x32\x33\x2e\x30\
\x32\x35\x2d\x31\x30\x2e\x32\x33\x33\x2d\x34\x36\x2e\x30\x35\x2d\
\x31\x35\x2e\x33\x35\x2d\x36\x36\x2e\x35\x31\x38\x2d\x31\x30\x2e\
\x32\x33\x33\x2d\x32\x35\x2e\x35\x38\x33\x20\x32\x2e\x35\x35\x38\
\x2d\x34\x36\x2e\x30\x35\x20\x32\x30\x2e\x34\x36\x37\x2d\x36\x31\
\x2e\x34\x20\x34\x30\x2e\x39\x33\x34\x2d\x32\x30\x2e\x34\x36\x37\
\x20\x32\x38\x2e\x31\x34\x32\x2d\x33\x30\x2e\x37\x20\x36\x33\x2e\
\x39\x36\x2d\x33\x35\x2e\x38\x31\x38\x20\x39\x37\x2e\x32\x31\x38\
\x2d\x32\x2e\x35\x35\x38\x20\x32\x30\x2e\x34\x36\x37\x20\x30\x20\
\x34\x30\x2e\x39\x33\x34\x20\x35\x2e\x31\x31\x37\x20\x36\x31\x2e\
\x34\x20\x37\x2e\x36\x37\x35\x20\x33\x30\x2e\x37\x30\x31\x20\x32\
\x33\x2e\x30\x32\x35\x20\x35\x38\x2e\x38\x34\x33\x20\x34\x36\x2e\
\x30\x35\x20\x37\x39\x2e\x33\x31\x20\x31\x37\x2e\x39\x31\x20\x31\
\x35\x2e\x33\x35\x20\x34\x30\x2e\x39\x33\x35\x20\x32\x33\x2e\x30\
\x32\x36\x20\x36\x33\x2e\x39\x36\x20\x32\x33\x2e\x30\x32\x36\x20\
\x32\x38\x2e\x31\x34\x32\x20\x30\x20\x35\x36\x2e\x32\x38\x34\x2d\
\x37\x2e\x36\x37\x35\x20\x37\x39\x2e\x33\x31\x2d\x32\x38\x2e\x31\
\x34\x32\x7a\x20\x6d\x37\x33\x36\x2e\x38\x31\x31\x2d\x37\x36\x2e\
\x37\x35\x32\x63\x2d\x32\x2e\x35\x35\x38\x2d\x32\x30\x2e\x34\x36\
\x37\x2d\x37\x2e\x36\x37\x35\x2d\x33\x38\x2e\x33\x37\x35\x2d\x31\
\x37\x2e\x39\x30\x38\x2d\x35\x36\x2e\x32\x38\x34\x2d\x31\x30\x2e\
\x32\x33\x34\x2d\x32\x30\x2e\x34\x36\x37\x2d\x32\x38\x2e\x31\x34\
\x33\x2d\x34\x30\x2e\x39\x33\x34\x2d\x34\x38\x2e\x36\x31\x2d\x35\
\x31\x2e\x31\x36\x37\x2d\x32\x33\x2e\x30\x32\x35\x2d\x31\x32\x2e\
\x37\x39\x32\x2d\x35\x31\x2e\x31\x36\x37\x2d\x31\x35\x2e\x33\x35\
\x2d\x37\x36\x2e\x37\x35\x2d\x31\x32\x2e\x37\x39\x32\x2d\x31\x32\
\x2e\x37\x39\x32\x20\x32\x2e\x35\x35\x38\x2d\x32\x38\x2e\x31\x34\
\x33\x20\x35\x2e\x31\x31\x37\x2d\x34\x30\x2e\x39\x33\x35\x20\x31\
\x32\x2e\x37\x39\x32\x2d\x31\x37\x2e\x39\x30\x38\x20\x31\x30\x2e\
\x32\x33\x33\x2d\x33\x30\x2e\x37\x20\x32\x38\x2e\x31\x34\x32\x2d\
\x34\x30\x2e\x39\x33\x33\x20\x34\x38\x2e\x36\x30\x39\x2d\x31\x30\
\x2e\x32\x33\x34\x20\x32\x35\x2e\x35\x38\x34\x2d\x31\x35\x2e\x33\
\x35\x20\x35\x33\x2e\x37\x32\x36\x2d\x31\x35\x2e\x33\x35\x20\x38\
\x31\x2e\x38\x36\x38\x20\x30\x20\x32\x35\x2e\x35\x38\x33\x20\x30\
\x20\x35\x33\x2e\x37\x32\x36\x20\x37\x2e\x36\x37\x34\x20\x37\x39\
\x2e\x33\x31\x20\x35\x2e\x31\x31\x37\x20\x31\x37\x2e\x39\x30\x38\
\x20\x31\x35\x2e\x33\x35\x20\x33\x38\x2e\x33\x37\x35\x20\x33\x33\
\x2e\x32\x36\x20\x34\x38\x2e\x36\x30\x38\x20\x31\x37\x2e\x39\x30\
\x38\x20\x31\x35\x2e\x33\x35\x20\x34\x30\x2e\x39\x33\x33\x20\x32\
\x30\x2e\x34\x36\x37\x20\x36\x33\x2e\x39\x35\x39\x20\x32\x33\x2e\
\x30\x32\x36\x20\x31\x37\x2e\x39\x30\x38\x20\x32\x2e\x35\x35\x38\
\x20\x33\x38\x2e\x33\x37\x35\x20\x32\x2e\x35\x35\x38\x20\x35\x36\
\x2e\x32\x38\x34\x2d\x32\x2e\x35\x35\x39\x20\x31\x37\x2e\x39\x30\
\x38\x2d\x35\x2e\x31\x31\x36\x20\x33\x35\x2e\x38\x31\x37\x2d\x31\
\x35\x2e\x33\x35\x20\x34\x36\x2e\x30\x35\x2d\x33\x30\x2e\x37\x20\
\x31\x32\x2e\x37\x39\x32\x2d\x31\x35\x2e\x33\x35\x20\x32\x30\x2e\
\x34\x36\x37\x2d\x33\x35\x2e\x38\x31\x37\x20\x32\x33\x2e\x30\x32\
\x36\x2d\x35\x33\x2e\x37\x32\x36\x20\x31\x32\x2e\x37\x39\x32\x2d\
\x33\x30\x2e\x37\x20\x31\x30\x2e\x32\x33\x33\x2d\x35\x38\x2e\x38\
\x34\x32\x20\x31\x30\x2e\x32\x33\x33\x2d\x38\x36\x2e\x39\x38\x35\
\x7a\x4d\x39\x31\x31\x2e\x31\x30\x36\x20\x38\x31\x39\x2e\x33\x33\
\x63\x2d\x32\x2e\x35\x35\x39\x2d\x33\x35\x2e\x38\x31\x37\x2d\x32\
\x30\x2e\x34\x36\x37\x2d\x37\x31\x2e\x36\x33\x34\x2d\x34\x36\x2e\
\x30\x35\x2d\x39\x39\x2e\x37\x37\x36\x2d\x35\x2e\x31\x31\x38\x2d\
\x35\x2e\x31\x31\x37\x2d\x31\x30\x2e\x32\x33\x34\x2d\x31\x30\x2e\
\x32\x33\x34\x2d\x31\x37\x2e\x39\x31\x2d\x31\x35\x2e\x33\x35\x2d\
\x33\x33\x2e\x32\x35\x38\x2d\x32\x38\x2e\x31\x34\x32\x2d\x36\x36\
\x2e\x35\x31\x37\x2d\x35\x38\x2e\x38\x34\x33\x2d\x39\x39\x2e\x37\
\x37\x36\x2d\x38\x39\x2e\x35\x34\x33\x2d\x33\x33\x2e\x32\x35\x39\
\x2d\x33\x33\x2e\x32\x36\x2d\x36\x33\x2e\x39\x36\x2d\x36\x39\x2e\
\x30\x37\x36\x2d\x39\x32\x2e\x31\x30\x31\x2d\x31\x30\x37\x2e\x34\
\x35\x32\x2d\x32\x30\x2e\x34\x36\x37\x2d\x33\x33\x2e\x32\x35\x39\
\x2d\x34\x38\x2e\x36\x31\x2d\x36\x33\x2e\x39\x36\x2d\x38\x36\x2e\
\x39\x38\x35\x2d\x38\x31\x2e\x38\x36\x38\x2d\x32\x33\x2e\x30\x32\
\x35\x2d\x31\x30\x2e\x32\x33\x33\x2d\x35\x31\x2e\x31\x36\x37\x2d\
\x31\x35\x2e\x33\x35\x2d\x37\x36\x2e\x37\x35\x31\x2d\x31\x32\x2e\
\x37\x39\x32\x2d\x34\x36\x2e\x30\x35\x20\x35\x2e\x31\x31\x37\x2d\
\x38\x36\x2e\x39\x38\x35\x20\x33\x30\x2e\x37\x2d\x31\x31\x35\x2e\
\x31\x32\x37\x20\x36\x36\x2e\x35\x31\x38\x2d\x37\x2e\x36\x37\x35\
\x20\x37\x2e\x36\x37\x35\x2d\x31\x32\x2e\x37\x39\x31\x20\x31\x37\
\x2e\x39\x30\x39\x2d\x31\x37\x2e\x39\x30\x38\x20\x32\x38\x2e\x31\
\x34\x32\x2d\x32\x30\x2e\x34\x36\x37\x20\x33\x30\x2e\x37\x2d\x34\
\x36\x2e\x30\x35\x20\x36\x31\x2e\x34\x30\x31\x2d\x37\x34\x2e\x31\
\x39\x33\x20\x38\x36\x2e\x39\x38\x35\x2d\x31\x35\x2e\x33\x35\x20\
\x31\x35\x2e\x33\x35\x2d\x33\x30\x2e\x37\x20\x32\x38\x2e\x31\x34\
\x32\x2d\x34\x36\x2e\x30\x35\x20\x34\x30\x2e\x39\x33\x34\x2d\x37\
\x2e\x36\x37\x36\x20\x37\x2e\x36\x37\x35\x2d\x31\x37\x2e\x39\x31\
\x20\x31\x35\x2e\x33\x35\x2d\x32\x35\x2e\x35\x38\x34\x20\x32\x33\
\x2e\x30\x32\x35\x2d\x33\x30\x2e\x37\x20\x32\x33\x2e\x30\x32\x35\
\x2d\x36\x31\x2e\x34\x30\x31\x20\x35\x33\x2e\x37\x32\x36\x2d\x37\
\x39\x2e\x33\x31\x20\x38\x36\x2e\x39\x38\x35\x2d\x31\x32\x2e\x37\
\x39\x32\x20\x32\x33\x2e\x30\x32\x35\x2d\x32\x30\x2e\x34\x36\x37\
\x20\x34\x38\x2e\x36\x30\x39\x2d\x32\x33\x2e\x30\x32\x35\x20\x37\
\x36\x2e\x37\x35\x20\x30\x20\x32\x33\x2e\x30\x32\x36\x20\x32\x2e\
\x35\x35\x38\x20\x34\x36\x2e\x30\x35\x31\x20\x31\x30\x2e\x32\x33\
\x33\x20\x36\x36\x2e\x35\x31\x38\x20\x37\x2e\x36\x37\x35\x20\x32\
\x33\x2e\x30\x32\x36\x20\x31\x37\x2e\x39\x30\x39\x20\x34\x36\x2e\
\x30\x35\x31\x20\x33\x33\x2e\x32\x36\x20\x36\x33\x2e\x39\x36\x20\
\x32\x35\x2e\x35\x38\x33\x20\x33\x30\x2e\x37\x20\x36\x33\x2e\x39\
\x35\x38\x20\x35\x31\x2e\x31\x36\x37\x20\x31\x30\x32\x2e\x33\x33\
\x34\x20\x35\x33\x2e\x37\x32\x35\x20\x34\x38\x2e\x36\x30\x39\x20\
\x32\x2e\x35\x35\x39\x20\x39\x37\x2e\x32\x31\x38\x20\x30\x20\x31\
\x34\x33\x2e\x32\x36\x39\x2d\x37\x2e\x36\x37\x35\x20\x32\x30\x2e\
\x34\x36\x37\x2d\x32\x2e\x35\x35\x38\x20\x34\x30\x2e\x39\x33\x34\
\x2d\x31\x30\x2e\x32\x33\x33\x20\x36\x33\x2e\x39\x35\x39\x2d\x31\
\x32\x2e\x37\x39\x32\x20\x34\x36\x2e\x30\x35\x2d\x35\x2e\x31\x31\
\x36\x20\x39\x32\x2e\x31\x30\x31\x2d\x32\x2e\x35\x35\x38\x20\x31\
\x33\x35\x2e\x35\x39\x34\x20\x31\x30\x2e\x32\x33\x34\x20\x33\x35\
\x2e\x38\x31\x37\x20\x31\x32\x2e\x37\x39\x32\x20\x37\x34\x2e\x31\
\x39\x32\x20\x31\x37\x2e\x39\x30\x39\x20\x31\x31\x32\x2e\x35\x36\
\x38\x20\x32\x30\x2e\x34\x36\x37\x20\x33\x38\x2e\x33\x37\x35\x20\
\x32\x2e\x35\x35\x38\x20\x37\x39\x2e\x33\x31\x2d\x32\x2e\x35\x35\
\x38\x20\x31\x31\x35\x2e\x31\x32\x37\x2d\x32\x33\x2e\x30\x32\x35\
\x20\x32\x35\x2e\x35\x38\x33\x2d\x31\x32\x2e\x37\x39\x32\x20\x34\
\x36\x2e\x30\x35\x2d\x33\x35\x2e\x38\x31\x38\x20\x35\x38\x2e\x38\
\x34\x32\x2d\x36\x31\x2e\x34\x30\x31\x20\x32\x30\x2e\x34\x36\x37\
\x2d\x33\x33\x2e\x32\x36\x20\x33\x30\x2e\x37\x2d\x37\x31\x2e\x36\
\x33\x35\x20\x32\x35\x2e\x35\x38\x34\x2d\x31\x31\x32\x2e\x35\x36\
\x39\x7a\x4d\x34\x38\x31\x2e\x33\x20\x39\x32\x34\x2e\x32\x32\x34\
\x48\x33\x36\x33\x2e\x36\x31\x35\x63\x2d\x31\x32\x2e\x37\x39\x32\
\x20\x30\x2d\x32\x35\x2e\x35\x38\x34\x20\x30\x2d\x33\x38\x2e\x33\
\x37\x36\x2d\x32\x2e\x35\x35\x39\x2d\x32\x35\x2e\x35\x38\x34\x2d\
\x35\x2e\x31\x31\x37\x2d\x34\x38\x2e\x36\x31\x2d\x32\x30\x2e\x34\
\x36\x37\x2d\x36\x33\x2e\x39\x36\x2d\x34\x33\x2e\x34\x39\x32\x2d\
\x31\x32\x2e\x37\x39\x31\x2d\x31\x35\x2e\x33\x35\x2d\x32\x30\x2e\
\x34\x36\x36\x2d\x33\x33\x2e\x32\x35\x39\x2d\x32\x33\x2e\x30\x32\
\x35\x2d\x35\x33\x2e\x37\x32\x36\x61\x32\x34\x36\x2e\x35\x36\x33\
\x20\x32\x34\x36\x2e\x35\x36\x33\x20\x30\x20\x30\x20\x31\x20\x30\
\x2d\x36\x31\x2e\x34\x63\x35\x2e\x31\x31\x37\x2d\x32\x33\x2e\x30\
\x32\x36\x20\x31\x37\x2e\x39\x30\x39\x2d\x34\x33\x2e\x34\x39\x33\
\x20\x33\x33\x2e\x32\x36\x2d\x35\x38\x2e\x38\x34\x33\x20\x31\x32\
\x2e\x37\x39\x31\x2d\x31\x32\x2e\x37\x39\x32\x20\x33\x30\x2e\x37\
\x2d\x32\x33\x2e\x30\x32\x36\x20\x34\x38\x2e\x36\x30\x38\x2d\x33\
\x30\x2e\x37\x20\x37\x2e\x36\x37\x35\x2d\x32\x2e\x35\x36\x20\x31\
\x35\x2e\x33\x35\x2d\x35\x2e\x31\x31\x37\x20\x32\x33\x2e\x30\x32\
\x36\x2d\x35\x2e\x31\x31\x37\x68\x36\x39\x2e\x30\x37\x36\x76\x2d\
\x39\x37\x2e\x32\x31\x39\x68\x36\x36\x2e\x35\x31\x37\x63\x32\x2e\
\x35\x35\x39\x20\x31\x32\x30\x2e\x32\x34\x34\x20\x32\x2e\x35\x35\
\x39\x20\x32\x33\x37\x2e\x39\x32\x39\x20\x32\x2e\x35\x35\x39\x20\
\x33\x35\x33\x2e\x30\x35\x36\x7a\x20\x6d\x32\x36\x33\x2e\x35\x31\
\x32\x20\x30\x48\x35\x38\x33\x2e\x36\x33\x34\x63\x2d\x31\x37\x2e\
\x39\x30\x38\x2d\x32\x2e\x35\x35\x39\x2d\x33\x33\x2e\x32\x35\x38\
\x2d\x37\x2e\x36\x37\x36\x2d\x34\x36\x2e\x30\x35\x2d\x31\x37\x2e\
\x39\x30\x39\x2d\x31\x35\x2e\x33\x35\x2d\x31\x32\x2e\x37\x39\x32\
\x2d\x32\x33\x2e\x30\x32\x36\x2d\x33\x33\x2e\x32\x35\x39\x2d\x32\
\x33\x2e\x30\x32\x36\x2d\x35\x31\x2e\x31\x36\x37\x76\x2d\x31\x37\
\x33\x2e\x39\x37\x68\x36\x36\x2e\x35\x31\x38\x76\x31\x36\x31\x2e\
\x31\x37\x38\x63\x30\x20\x37\x2e\x36\x37\x35\x20\x32\x2e\x35\x35\
\x38\x20\x31\x32\x2e\x37\x39\x32\x20\x37\x2e\x36\x37\x35\x20\x31\
\x37\x2e\x39\x30\x38\x20\x35\x2e\x31\x31\x37\x20\x35\x2e\x31\x31\
\x37\x20\x31\x32\x2e\x37\x39\x32\x20\x37\x2e\x36\x37\x35\x20\x32\
\x30\x2e\x34\x36\x37\x20\x37\x2e\x36\x37\x35\x68\x36\x39\x2e\x30\
\x37\x36\x56\x36\x37\x38\x2e\x36\x32\x68\x36\x36\x2e\x35\x31\x38\
\x76\x32\x34\x35\x2e\x36\x30\x34\x7a\x22\x20\x66\x69\x6c\x6c\x3d\
\x22\x23\x33\x30\x36\x43\x46\x46\x22\x20\x70\x2d\x69\x64\x3d\x22\
\x37\x36\x34\x36\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\
\x74\x68\x20\x64\x3d\x22\x4d\x33\x34\x30\x2e\x35\x39\x20\x37\x33\
\x34\x2e\x39\x30\x34\x63\x2d\x31\x32\x2e\x37\x39\x33\x20\x35\x2e\
\x31\x31\x37\x2d\x32\x35\x2e\x35\x38\x35\x20\x31\x35\x2e\x33\x35\
\x2d\x33\x33\x2e\x32\x36\x20\x33\x30\x2e\x37\x2d\x35\x2e\x31\x31\
\x36\x20\x31\x32\x2e\x37\x39\x32\x2d\x37\x2e\x36\x37\x35\x20\x32\
\x35\x2e\x35\x38\x34\x2d\x37\x2e\x36\x37\x35\x20\x33\x38\x2e\x33\
\x37\x36\x20\x30\x20\x31\x35\x2e\x33\x35\x20\x35\x2e\x31\x31\x37\
\x20\x33\x30\x2e\x37\x20\x31\x32\x2e\x37\x39\x32\x20\x34\x33\x2e\
\x34\x39\x32\x20\x31\x30\x2e\x32\x33\x34\x20\x31\x35\x2e\x33\x35\
\x20\x32\x38\x2e\x31\x34\x32\x20\x32\x35\x2e\x35\x38\x34\x20\x34\
\x36\x2e\x30\x35\x20\x32\x33\x2e\x30\x32\x36\x68\x35\x33\x2e\x37\
\x32\x37\x56\x37\x33\x32\x2e\x33\x34\x36\x48\x33\x35\x33\x2e\x33\
\x38\x63\x2d\x32\x2e\x35\x35\x38\x2d\x32\x2e\x35\x35\x39\x2d\x37\
\x2e\x36\x37\x35\x20\x30\x2d\x31\x32\x2e\x37\x39\x32\x20\x32\x2e\
\x35\x35\x38\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x33\x30\x36\
\x43\x46\x46\x22\x20\x70\x2d\x69\x64\x3d\x22\x37\x36\x34\x37\x22\
\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x2f\x73\x76\x67\x3e\
"
qt_resource_name
=
b
"
\
\x00\x05\
\x00\x6f\xa6\x53\
\x00\x69\
\x00\x63\x00\x6f\x00\x6e\x00\x73\
\x00\x09\
\x0e\x01\xbc\x67\
\x00\x6c\
\x00\x6f\x00\x67\x00\x69\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x08\
\x0c\x07\x55\xc7\
\x00\x71\
\x00\x75\x00\x69\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x08\
\x00\x2c\x57\xe7\
\x00\x62\
\x00\x69\x00\x6c\x00\x69\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x0c\
\x05\xd2\x9b\x87\
\x00\x72\
\x00\x65\x00\x67\x00\x69\x00\x73\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x09\
\x06\x98\x8e\xa7\
\x00\x63\
\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x08\
\x00\x4c\x54\x47\
\x00\x6d\
\x00\x69\x00\x6e\x00\x69\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x07\
\x0b\x5a\x5a\x07\
\x00\x64\
\x00\x6f\x00\x67\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x09\
\x0f\xb8\x8a\x27\
\x00\x62\
\x00\x61\x00\x69\x00\x64\x00\x75\x00\x2e\x00\x73\x00\x76\x00\x67\
"
qt_resource_struct_v1
=
b
"
\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x08\x00\x00\x00\x03\
\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x07\x4e\
\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xb6\
\x00\x00\x00\x54\x00\x00\x00\x00\x00\x01\x00\x00\x15\x28\
\x00\x00\x00\x72\x00\x00\x00\x00\x00\x01\x00\x00\x1a\xbb\
\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x25\x29\
\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x02\x7a\
\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x43\x7a\
"
qt_resource_struct_v2
=
b
"
\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x08\x00\x00\x00\x03\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x07\x4e\
\x00\x00\x01\x96\xc8\x2f\x25\xb8\
\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xb6\
\x00\x00\x01\x96\xc8\xb2\x50\xc1\
\x00\x00\x00\x54\x00\x00\x00\x00\x00\x01\x00\x00\x15\x28\
\x00\x00\x01\x96\xc8\x2e\xdc\x0c\
\x00\x00\x00\x72\x00\x00\x00\x00\x00\x01\x00\x00\x1a\xbb\
\x00\x00\x01\x96\xc8\x2d\x54\x53\
\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x25\x29\
\x00\x00\x01\x96\xc8\xa2\x3d\x16\
\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x02\x7a\
\x00\x00\x01\x96\xc8\xaf\x5f\x3a\
\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x96\xc8\x2e\x99\x27\
\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x43\x7a\
\x00\x00\x01\x96\xc8\x2f\x65\x18\
"
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
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment