tirilane
/
egon
Archived
1
0
Fork 0

Compare commits

..

No commits in common. "83e370f0332309c6e46ae0ecfbab47b8e5fe77f2" and "3205c764ba7b298b14fcdf7c0d76cb4bf00ee715" have entirely different histories.

54 changed files with 2780 additions and 831 deletions

33
AssignmentTab.pyw Normal file
View File

@ -0,0 +1,33 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class AssignmentTab(QWidget):
def __init__(self, parent=None):
super(AssignmentTab, self).__init__(parent)
assignmentsTable = QTableWidget()
addAssignmentButton = QPushButton("Add assignment")
editAssignmentButton = QPushButton("Edit assignment")
assignmentDoneButton = QPushButton("Done")
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(addAssignmentButton)
hlayout.addWidget(editAssignmentButton)
hlayout.addWidget(assignmentDoneButton)
vlayout.addWidget(assignmentsTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)

21
CalendarTab.pyw Normal file
View File

@ -0,0 +1,21 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class CalendarTab(QWidget):
def __init__(self, parent=None):
super(CalendarTab, self).__init__(parent)
calendar = QCalendarWidget()
layout = QVBoxLayout()
layout.addWidget(calendar)
self.setLayout(layout)

View File

@ -1,31 +0,0 @@
# Egon
Egon is a planner for assignments, reading homework and lessons, which could come in handy for students.
---
## Technology
It is written in Python, using Qt4, PyQt, and SQLite.
---
## Progress
### 06.09.08
Egon is now properly translated into Norwegian using Qt Linguist. So now there is only one program, as there should be. egon_no.py is still available, in case of locale trouble.
### 10.08.08
Norsk versjon også tilgjengelig: egonbm.py.
### 18.08.06
It is now as good as finished, and is working properly. Version 1.0.0 is thus released! It is (almost) even save to use (especially if you know how to fix databases manually). There is even an tar.gz, in dist/.
Some icons are on their way, but they are not really necessary. Or, as I meant to say, some icons are on their way as soon as I learn how to draw. Meaning never.
More features are planned, like better exception handling (it works properly unless you write wrong on purpose. The logic behind studies are used as boundaries, and it should thus work fine. But if there suddenly are multiple 'Assignment 2' given in one course, there is trouble coming.) A printing function is also planned. After all, I do have a proper icon for it. I also mean to translate it, I just need to figure out Qt Linguist first.
The license will also be added. It's GPL.

34
ReadingTab.pyw Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ReadingTab(QWidget):
def __init__(self, parent=None):
super(ReadingTab, self).__init__(parent)
readingTable = QTableWidget()
addReadingButton = QPushButton("Add pages to read")
editReadingButton = QPushButton("Edit pages")
readingDoneButton = QPushButton("Done")
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(addReadingButton)
hlayout.addWidget(editReadingButton)
hlayout.addWidget(readingDoneButton)
vlayout.addWidget(readingTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)

30
ScheduleTab.pyw Normal file
View File

@ -0,0 +1,30 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ScheduleTab(QWidget):
def __init__(self, parent=None):
super(ScheduleTab, self).__init__(parent)
scheduleTable = QTableWidget()
addScheduleButton = QPushButton("Add lesson")
editScheduleButton = QPushButton("Edit lesson")
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(addScheduleButton)
hlayout.addWidget(editScheduleButton)
vlayout.addWidget(scheduleTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)

16
actions.py Normal file
View File

@ -0,0 +1,16 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from assignmentDlg import *
from readingDlg import *
from scheduleDlg import *

BIN
actions.pyc Normal file

Binary file not shown.

25
addAssignmentDlg.py Normal file
View File

@ -0,0 +1,25 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from assignmentDlg import *
class AddAssignmentDlg(AssignmentDlg):
def __init__(self, parent=None):
super(AddAssignmentDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 7, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new assignment"))

BIN
addAssignmentDlg.pyc Normal file

Binary file not shown.

24
addBookDlg.py Normal file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from bookDlg import *
class AddBookDlg(BookDlg):
def __init__(self, parent=None):
super(AddBookDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 5, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new book"))

BIN
addBookDlg.pyc Normal file

Binary file not shown.

20
addCourseDlg.py Normal file
View File

@ -0,0 +1,20 @@
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from courseDlg import *
class AddCourseDlg(CourseDlg):
def __init__(self, parent=None):
super(AddCourseDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 3, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new course"))

BIN
addCourseDlg.pyc Normal file

Binary file not shown.

27
addReadingDlg.py Normal file
View File

@ -0,0 +1,27 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from readingDlg import *
class AddReadingDlg(ReadingDlg):
def __init__(self, parent=None):
super(AddReadingDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new reading"))

BIN
addReadingDlg.pyc Normal file

Binary file not shown.

28
addScheduleDlg.py Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from scheduleDlg import *
class AddScheduleDlg(ScheduleDlg):
def __init__(self, parent=None):
super(AddScheduleDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new lesson"))

BIN
addScheduleDlg.pyc Normal file

Binary file not shown.

185
assignment.py Normal file
View File

@ -0,0 +1,185 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from main import *
class AssignmentTab(QWidget):
def __init__(self, parent=None):
super(AssignmentTab, self).__init__(parent)
self.assignmentsTable = QTableWidget()
self.addAssignmentButton = QPushButton("Add assignment")
self.editAssignmentButton = QPushButton("Edit assignment")
self.assignmentDoneButton = QPushButton("Done")
## self.assignments = assignmentdata.AssignmentContainer()
## self.assignmentTable = QTableWidget()
## self.setCentralWidget(self.assignmentTable)
##
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(self.addAssignmentButton)
hlayout.addWidget(self.editAssignmentButton)
hlayout.addWidget(self.assignmentDoneButton)
vlayout.addWidget(self.assignmentsTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)
## def updateTable(self, current=None):
##
## self.assignmentTable.clear()
## self.assignmentTable.setRowCount(len(self.assignments))
## self.assignmentTable.setColumnCount(7)
## self.assignmentTable.setHorizontalHeaderLabels(["Date", "Course", "Description", "Available" , "Begun", "Finished", "Delivered"])
## self.assignmentTable.setAlternatingRowColors(True)
## self.assignmentTable.setEditTriggers(QTableWidget.NoEditTriggers)
## self.assignmentTable.setSelectionBehavior(QTableWidget.SelectRows)
## self.assignmentTable.setSelectionMode(QTableWidget.SingleSelection)
## selected = None
class AssignmentDlg(QDialog):
def __init__(self, parent=None):
super(AssignmentDlg, self).__init__(parent)
dateLabel = QLabel(self.trUtf8("&Date"))
courseLabel = QLabel(self.trUtf8("&Course"))
descriptionLabel = QLabel(self.trUtf8("De&scription"))
availableLabel = QLabel(self.trUtf8("&Available"))
begunLabel = QLabel(self.trUtf8("&Begun"))
finishedLabel = QLabel(self.trUtf8("&Finished"))
deliveredLabel = QLabel(self.trUtf8("De&livered"))
dateEdit = QLineEdit()
courseEdit = QComboBox()
courseEdit.addItems(MainWindow.getCoursesString())
descriptionEdit = QLineEdit()
availableEdit = QCheckBox()
begunEdit = QCheckBox()
finishedEdit = QCheckBox()
deliveredEdit = QCheckBox()
dateLabel.setBuddy(dateEdit)
courseLabel.setBuddy(courseEdit)
descriptionLabel.setBuddy(descriptionEdit)
availableLabel.setBuddy(availableEdit)
begunLabel.setBuddy(begunEdit)
finishedLabel.setBuddy(finishedEdit)
deliveredLabel.setBuddy(deliveredEdit)
self.layout = QGridLayout()
self.layout.addWidget(dateLabel, 0, 0)
self.layout.addWidget(courseLabel, 1, 0)
self.layout.addWidget(descriptionLabel, 2, 0)
self.layout.addWidget(availableLabel, 3, 0)
self.layout.addWidget(begunLabel, 4, 0)
self.layout.addWidget(finishedLabel, 5, 0)
self.layout.addWidget(deliveredLabel, 6, 0)
self.layout.addWidget(dateEdit, 0, 1)
self.layout.addWidget(courseEdit, 1, 1)
self.layout.addWidget(descriptionEdit, 2, 1)
self.layout.addWidget(availableEdit, 3, 1)
self.layout.addWidget(begunEdit, 4, 1)
self.layout.addWidget(finishedEdit, 5, 1)
self.layout.addWidget(deliveredEdit, 6, 1)
self.setLayout(self.layout)
class AddAssignmentDlg(AssignmentDlg):
def __init__(self, parent=None):
super(AddAssignmentDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 7, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new assignment"))
class EditAssignmentDlg(AssignmentDlg):
def __init__(self, parent=None):
super(EditAssignmentDlg, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 7, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit assignment"))
def apply(self):
pass
class AssignmentModel():
date = ""
course = ""
description = ""
available = False
begun = False
finished = False
delivered = False
def setDate(self, date):
self.date = date
def getDate(self):
return self.date
def setCourse(self, course):
self.course = course
def getCourse(self):
return self.course
def setDescription(self, description):
self.description = description
def getDescription(self):
return self.description
def setAvailable(self, available):
self.available = available
def getAvailable(self):
return self.available
def setBegun(self, begun):
self.begun = begun
def getBegun(self):
return self.begun
def setFinished(self, finished):
self.finished = finished
def getFinished(self):
return self.finished
def setDelivered(self, delivered):
self.delivered = delivered
def getDelivered(self):
return self.delivered

BIN
assignment.pyc Normal file

Binary file not shown.

61
assignmentDlg.py Normal file
View File

@ -0,0 +1,61 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from readingDlg import *
from actions import *
class AssignmentDlg(QDialog):
def __init__(self, parent=None):
super(AssignmentDlg, self).__init__(parent)
dateLabel = QLabel(self.trUtf8("&Date"))
courseLabel = QLabel(self.trUtf8("&Course"))
descriptionLabel = QLabel(self.trUtf8("De&scription"))
availableLabel = QLabel(self.trUtf8("&Available"))
begunLabel = QLabel(self.trUtf8("&Begun"))
finishedLabel = QLabel(self.trUtf8("&Finished"))
deliveredLabel = QLabel(self.trUtf8("De&livered"))
dateEdit = QLineEdit()
courseEdit = QLineEdit()
descriptionEdit = QLineEdit()
availableEdit = QCheckBox()
begunEdit = QCheckBox()
finishedEdit = QCheckBox()
deliveredEdit = QCheckBox()
dateLabel.setBuddy(dateEdit)
courseLabel.setBuddy(courseEdit)
descriptionLabel.setBuddy(descriptionEdit)
availableLabel.setBuddy(availableEdit)
begunLabel.setBuddy(begunEdit)
finishedLabel.setBuddy(finishedEdit)
deliveredLabel.setBuddy(deliveredEdit)
self.layout = QGridLayout()
self.layout.addWidget(dateLabel, 0, 0)
self.layout.addWidget(courseLabel, 1, 0)
self.layout.addWidget(descriptionLabel, 2, 0)
self.layout.addWidget(availableLabel, 3, 0)
self.layout.addWidget(begunLabel, 4, 0)
self.layout.addWidget(finishedLabel, 5, 0)
self.layout.addWidget(deliveredLabel, 6, 0)
self.layout.addWidget(dateEdit, 0, 1)
self.layout.addWidget(courseEdit, 1, 1)
self.layout.addWidget(descriptionEdit, 2, 1)
self.layout.addWidget(availableEdit, 3, 1)
self.layout.addWidget(begunEdit, 4, 1)
self.layout.addWidget(finishedEdit, 5, 1)
self.layout.addWidget(deliveredEdit, 6, 1)
self.setLayout(self.layout)

BIN
assignmentDlg.pyc Normal file

Binary file not shown.

66
assignmentModel.py Normal file
View File

@ -0,0 +1,66 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from scheduleDlg import *
class AssignmentModel():
date = ""
course = ""
description = ""
available = False
begun = False
finished = False
delivered = False
def setDate(self, date):
self.date = date
def getDate(self):
return self.date
def setCourse(self, course):
self.course = course
def getCourse(self):
return self.course
def setDescription(self, description):
self.description = description
def getDescription(self):
return self.description
def setAvailable(self, available):
self.available = available
def getAvailable(self):
return self.available
def setBegun(self, begun):
self.begun = begun
def getBegun(self):
return self.begun
def setFinished(self, finished):
self.finished = finished
def getFinished(self):
return self.finished
def setDelivered(self, delivered):
self.delivered = delivered
def getDelivered(self):
return self.delivered

BIN
assignmentModel.pyc Normal file

Binary file not shown.

67
book.py Normal file
View File

@ -0,0 +1,67 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from db import *
class BookDlg(QDialog):
def __init__(self, parent=None):
super(BookDlg, self).__init__(parent)
titleLabel = QLabel(self.trUtf8("&Title"))
authorLabel = QLabel(self.trUtf8("&Author"))
editionLabel = QLabel(self.trUtf8("&Edition"))
isbnLabel = QLabel(self.trUtf8("&ISBN"))
courseLabel = QLabel(self.trUtf8("&Course"))
titleEdit = QLineEdit()
authorEdit = QLineEdit()
editionEdit = QSpinBox()
editionEdit.setRange(1, 50)
isbnEdit = QLineEdit()
courseEdit = QComboBox()
titleLabel.setBuddy(titleEdit)
authorLabel.setBuddy(authorEdit)
editionLabel.setBuddy(editionEdit)
isbnLabel.setBuddy(isbnEdit)
courseLabel.setBuddy(courseEdit)
self.layout = QGridLayout()
self.layout.addWidget(titleLabel, 0, 0)
self.layout.addWidget(authorLabel, 1, 0)
self.layout.addWidget(editionLabel, 2, 0)
self.layout.addWidget(isbnLabel, 3, 0)
self.layout.addWidget(courseLabel, 4, 0)
self.layout.addWidget(titleEdit, 0, 1)
self.layout.addWidget(authorEdit, 1, 1)
self.layout.addWidget(editionEdit, 2, 1)
self.layout.addWidget(isbnEdit, 3, 1)
self.layout.addWidget(courseEdit, 4, 1)
self.setLayout(self.layout)
class AddBookDlg(BookDlg):
def __init__(self, parent=None):
super(AddBookDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 5, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new book"))

BIN
book.pyc Normal file

Binary file not shown.

50
bookDlg.py Normal file
View File

@ -0,0 +1,50 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
##from db import *
class BookDlg(QDialog):
def __init__(self, parent=None):
super(BookDlg, self).__init__(parent)
titleLabel = QLabel(self.trUtf8("&Title"))
authorLabel = QLabel(self.trUtf8("&Author"))
editionLabel = QLabel(self.trUtf8("&Edition"))
isbnLabel = QLabel(self.trUtf8("&ISBN"))
courseLabel = QLabel(self.trUtf8("&Course"))
titleEdit = QLineEdit()
authorEdit = QLineEdit()
editionEdit = QSpinBox()
editionEdit.setRange(1, 50)
isbnEdit = QLineEdit()
courseEdit = QComboBox()
titleLabel.setBuddy(titleEdit)
authorLabel.setBuddy(authorEdit)
editionLabel.setBuddy(editionEdit)
isbnLabel.setBuddy(isbnEdit)
courseLabel.setBuddy(courseEdit)
self.layout = QGridLayout()
self.layout.addWidget(titleLabel, 0, 0)
self.layout.addWidget(authorLabel, 1, 0)
self.layout.addWidget(editionLabel, 2, 0)
self.layout.addWidget(isbnLabel, 3, 0)
self.layout.addWidget(courseLabel, 4, 0)
self.layout.addWidget(titleEdit, 0, 1)
self.layout.addWidget(authorEdit, 1, 1)
self.layout.addWidget(editionEdit, 2, 1)
self.layout.addWidget(isbnEdit, 3, 1)
self.layout.addWidget(courseEdit, 4, 1)
self.setLayout(self.layout)

BIN
bookDlg.pyc Normal file

Binary file not shown.

20
calendar.py Normal file
View File

@ -0,0 +1,20 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class CalendarTab(QWidget):
def __init__(self, parent=None):
super(CalendarTab, self).__init__(parent)
calendar = QCalendarWidget()
layout = QVBoxLayout()
layout.addWidget(calendar)
self.setLayout(layout)

BIN
calendar.pyc Normal file

Binary file not shown.

104
course.py Normal file
View File

@ -0,0 +1,104 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
#from db import *
import db
class CourseDlg(QDialog):
def __init__(self, parent=None):
super(CourseDlg, self).__init__(parent)
self.codeLabel = QLabel(self.trUtf8("&Code"))
self.titleLabel = QLabel(self.trUtf8("&Title"))
self.shortLabel = QLabel(self.trUtf8("&Short form"))
self.codeEdit = QLineEdit()
self.titleEdit = QLineEdit()
self.shortEdit = QLineEdit()
self.codeLabel.setBuddy(self.codeEdit)
self.titleLabel.setBuddy(self.titleEdit)
self.shortLabel.setBuddy(self.shortEdit)
self.layout = QGridLayout()
self.layout.addWidget(self.codeLabel, 0, 0)
self.layout.addWidget(self.titleLabel, 1, 0)
self.layout.addWidget(self.shortLabel, 2, 0)
self.layout.addWidget(self.codeEdit, 0, 1)
self.layout.addWidget(self.titleEdit, 1, 1)
self.layout.addWidget(self.shortEdit, 2, 1)
self.setLayout(self.layout)
class AddCourseDlg(CourseDlg):
def __init__(self, parent=None):
super(AddCourseDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 3, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new course"))
def accept(self):
courseCode = unicode(self.codeEdit.text())
courseTitle = unicode(self.titleEdit.text())
courseShort = unicode(self.shortEdit.text())
print 'code', courseCode
print 'title', courseTitle
print 'short', courseShort
course = CourseModel(courseCode, courseTitle, courseShort)
self.close()
db.addNewCourse(courseCode, courseTitle, courseShort)
class CourseModel():
code = ""
title = ""
short = ""
full = ""
def __init__(self, code, title, short):
self.code = code
self.title = title
self.short = short
self.setFull(code, title)
def setCode(self, code):
self.code = code
def getCode(self):
return self.code
def setTitle(self, title):
self.title = title
def getTitle(self):
return self.title
def setShort(self, short):
self.short = short
def getShort(self):
return self.short
def setFull(self, code, title):
self.full = code + ' ' + title
def getFull(self):
return self.full

BIN
course.pyc Normal file

Binary file not shown.

39
courseDlg.py Normal file
View File

@ -0,0 +1,39 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
##from db import *
class CourseDlg(QDialog):
def __init__(self, parent=None):
super(CourseDlg, self).__init__(parent)
codeLabel = QLabel(self.trUtf8("&Code"))
titleLabel = QLabel(self.trUtf8("&Title"))
shortLabel = QLabel(self.trUtf8("&Short form"))
codeEdit = QLineEdit()
titleEdit = QLineEdit()
shortEdit = QLineEdit()
codeLabel.setBuddy(codeEdit)
titleLabel.setBuddy(titleEdit)
shortLabel.setBuddy(shortEdit)
self.layout = QGridLayout()
self.layout.addWidget(codeLabel, 0, 0)
self.layout.addWidget(titleLabel, 1, 0)
self.layout.addWidget(shortLabel, 2, 0)
self.layout.addWidget(codeEdit, 0, 1)
self.layout.addWidget(titleEdit, 1, 1)
self.layout.addWidget(shortEdit, 2, 1)
self.setLayout(self.layout)

BIN
courseDlg.pyc Normal file

Binary file not shown.

170
db.py Normal file
View File

@ -0,0 +1,170 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from pysqlite2 import dbapi2 as sqlite
from PyQt4.QtCore import *
from PyQt4.QtGui import *
#from PyQt4.QtSql import *
#from main import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from book import *
from course import *
def initDB():
conn = sqlite.connect('egon.db')
curs = conn.cursor()
return curs, conn
def initNewDB():
cursor, conn = initDB()
initAssignmentDB(cursor)
initReadingDB(cursor)
initScheduleDB(cursor)
initBookDB(cursor)
initCourseDB(cursor)
initAssignmentInCourse(cursor)
initReadingInCourse(cursor)
initLessonInCourse(cursor)
initCourseUsesBook(cursor)
exitDB(conn)
def initAssignmentDB(cursor):
cursor.execute('''
CREATE TABLE Assignment (
aid INTEGER PRIMARY KEY,
date TEXT,
description TEXT,
available BOOLEAN,
begun BOOLEAN,
finished BOOLEAN,
delivered BOOLEAN
)
''')
def initReadingDB(cursor):
cursor.execute('''
CREATE TABLE Reading (
rid INTEGER PRIMARY KEY,
week TEXT,
chapter TEXT,
pages TEXT
)
''')
def initScheduleDB(cursor):
cursor.execute('''
CREATE TABLE Lesson (
lid INTEGER PRIMARY KEY,
day TEXT,
fromtime TEXT,
totime TEXT,
type TEXT,
room TEXT
)
''')
def initBookDB(cursor):
cursor.execute('''
CREATE TABLE Book (
isbn TEXT PRIMARY KEY,
title TEXT,
author TEXT,
edition INTEGER
)
''')
def initCourseDB(cursor):
cursor.execute('''
CREATE TABLE Course (
code TEXT PRIMARY KEY,
title TEXT,
short TEXT
)
''')
def initAssignmentInCourse(cursor):
cursor.execute('''
CREATE TABLE assignmentInCourse (
assignment INTEGER,
course INTEGER
)
''')
def initReadingInCourse(cursor):
cursor.execute('''
CREATE TABLE readingInCourse (
reading INTEGER,
course INTEGER
)
''')
def initLessonInCourse(cursor):
cursor.execute('''
CREATE TABLE lessonInCourse (
lesson INTEGER,
course INTEGER
)
''')
def initCourseUsesBook(cursor):
cursor.execute('''
CREATE TABLE courseUsesBook (
course INTEGER,
book TEXT
)
''')
def addNewBook(isbn, title, author, edition, course):
cursor, conn = initDB()
bookQuery = '''
INSERT INTO Book
VALUES (%s, %s, %s, %i)
''' % (isbn, title, author, edition)
courseUsesBookQuery = '''
INSERT INTO courseUsesBook
VALUES (%i, %s)
''' % (course, isbn)
cursor.execute(bookQuery)
cursor.execute(courseUsesBookQuery)
exitDB(conn)
def addNewCourse(code, title, short):
cursor, conn = initDB()
courseQuery = '''
INSERT INTO Course
VALUES (%s, %s, %s)
''' % (code, title, short)
cursor.execute(courseQuery)
exitDB(conn)
def getCourses():
cursor, conn = initDB()
courseQuery = '''
SELECT *
FROM Course
'''
cursor.execute(courseQuery)
courses = []
for row in cursor.fetchall():
courses.append(CourseModel(row[0], row[1], row[2]))
def exitDB(conn):
conn.commit()
conn.close()
#initNewDB()

BIN
db.pyc Normal file

Binary file not shown.

28
editAssignmentDlg.py Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from assignmentDlg import *
class EditAssignmentDlg(AssignmentDlg):
def __init__(self, parent=None):
super(EditAssignmentDlg, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 7, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit assignment"))
def apply(self):
pass

BIN
editAssignmentDlg.pyc Normal file

Binary file not shown.

32
editReadingDlg.py Normal file
View File

@ -0,0 +1,32 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from readingDlg import *
class EditReadingDlg(ReadingDlg):
def __init__(self, parent=None):
super(EditReadingDlg, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit reading"))
def apply(self):
pass

BIN
editReadingDlg.pyc Normal file

Binary file not shown.

31
editScheduleDlg.py Normal file
View File

@ -0,0 +1,31 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from scheduleDlg import *
class EditScheduleDlg(ScheduleDlg):
def __init__(self, parent=None):
super(EditScheduleDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit lesson"))
def apply(self):
pass

BIN
editScheduleDlg.pyc Normal file

Binary file not shown.

View File

@ -1,2 +0,0 @@
SOURCES += egon.py
TRANSLATIONS += egon_nb.ts

218
egon.py
View File

@ -1,7 +1,7 @@
#!/usr/bin/env python
#coding: utf-8
# Copyright 2008, Tiril Anette Langfeldt Rødland
# Copyright 2008, Tiril Anette Langfeldt Rødland
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
@ -18,7 +18,7 @@ from pysqlite2 import dbapi2 as sqlite
from qrc_resources import *
__version__ = "1.1.0"
__version__ = "1.0.2"
main = None
@ -39,7 +39,7 @@ class MainWindow(QMainWindow):
super(MainWindow, self).__init__(parent)
# The program name
self.title = self.trUtf8("Egon")
self.title = "Egon"
# The days
self.days = [self.trUtf8("Monday"), self.trUtf8("Tuesday"), self.trUtf8("Wednesday"), self.trUtf8("Thursday"), self.trUtf8("Friday")]
@ -51,9 +51,9 @@ class MainWindow(QMainWindow):
# Set the tabs in the middle
self.tabs = QTabWidget()
self.tabs.addTab(self.assignment, self.trUtf8("&Assignment"))
self.tabs.addTab(self.reading, self.trUtf8("&Reading List"))
self.tabs.addTab(self.schedule, self.trUtf8("&Schedule"))
self.tabs.addTab(self.assignment, "&Assignments")
self.tabs.addTab(self.reading, "&Reading List")
self.tabs.addTab(self.schedule, "&Schedule")
self.tabs.setTabShape(QTabWidget.Rounded)
self.tabs.setTabPosition(QTabWidget.North)
self.setCentralWidget(self.tabs)
@ -61,7 +61,7 @@ class MainWindow(QMainWindow):
# The calendar
self.calendarFrame = QFrame()
self.calendarFrame.setFrameStyle(QFrame.StyledPanel|QFrame.Sunken)
self.calendarDockWidget = QDockWidget(self.trUtf8("Calendar"), self)
self.calendarDockWidget = QDockWidget("Calendar", self)
self.calendarDockWidget.setVisible(False)
self.calendarDockWidget.setObjectName("CalendarDockWidget")
self.calendarDockWidget.setAllowedAreas(Qt.LeftDockWidgetArea|Qt.RightDockWidgetArea|Qt.BottomDockWidgetArea)
@ -84,21 +84,21 @@ class MainWindow(QMainWindow):
self.load(semester)
# Actions
fileNewAction = self.createAction(self.trUtf8("&New"), self.fileNew, QKeySequence.New, "filenew", self.trUtf8("Create a new semester plan"))
fileOpenAction = self.createAction(self.trUtf8("&Open"), self.fileOpen, QKeySequence.Open, "fileopen", self.trUtf8("Open an existing semester plan"))
fileQuitAction = self.createAction(self.trUtf8("&Quit"), self.close, "Ctrl+Q", "filequit", self.trUtf8("Quit program"))
editAddCourse = self.createAction(self.trUtf8("Add &course"), self.addCourse, "Ctrl+C", None, self.trUtf8("Add a new course"))
editAddBook = self.createAction(self.trUtf8("Add &book"), self.addBook, "Ctrl+B", None, self.trUtf8("Add a new book"))
editAddAssignment = self.createAction(self.trUtf8("Add &assignment"), self.addAssignment, "Ctrl+A", None, self.trUtf8("Add a new assignment"))
editAddReading = self.createAction(self.trUtf8("Add &reading"), self.addReading, "Ctrl+R", None, self.trUtf8("Add a new reading"))
editAddLesson = self.createAction(self.trUtf8("Add &lesson"), self.addLesson, "Ctrl+L", None, self.trUtf8("Add a new lesson"))
editShowCalendar = self.createAction(self.trUtf8("Cal&endar"), self.showCalendar, "Ctrl+E", None, self.trUtf8("Show the calendar"))
helpAboutScheduler = self.createAction(self.trUtf8("&About Egon"))
fileNewAction = self.createAction("&New", self.fileNew, QKeySequence.New, "filenew", "Create a new semester plan")
fileOpenAction = self.createAction("&Open", self.fileOpen, QKeySequence.Open, "fileopen", "Open an existing semester plan")
fileQuitAction = self.createAction("&Quit", self.close, "Ctrl+Q", "filequit", "Quit program")
editAddCourse = self.createAction("Add &course", self.addCourse, "Ctrl+C", None, "Add a new course")
editAddBook = self.createAction("Add &book", self.addBook, "Ctrl+B", None, "Add a new book")
editAddAssignment = self.createAction("Add &assignment", self.addAssignment, "Ctrl+A", None, "Add a new assignment")
editAddReading = self.createAction("Add &reading", self.addReading, "Ctrl+R", None, "Add a new reading")
editAddLesson = self.createAction("Add &lesson", self.addLesson, "Ctrl+L", None, "Add a new lesson")
editShowCalendar = self.createAction("Cal&endar", self.showCalendar, "Ctrl+E", None, "Show the calendar")
helpAboutScheduler = self.createAction("&About %s" % self.title)
# Menus
self.fileMenu = self.menuBar().addMenu(self.trUtf8("&File"))
self.editMenu = self.menuBar().addMenu(self.trUtf8("&Edit"))
self.helpMenu = self.menuBar().addMenu(self.trUtf8("&Help"))
self.fileMenu = self.menuBar().addMenu("&File")
self.editMenu = self.menuBar().addMenu("&Edit")
self.helpMenu = self.menuBar().addMenu("&Help")
# Add actions to the menus
self.addActions(self.fileMenu, (fileNewAction, fileOpenAction, None, fileQuitAction))
@ -115,7 +115,7 @@ class MainWindow(QMainWindow):
self.connect(helpAboutScheduler, SIGNAL("triggered()"), self.helpAbout)
self.connect(self.assignment.addAssignmentButton, SIGNAL("pressed()"), self.addAssignment)
self.connect(self.assignment.deleteAssignmentButton, SIGNAL("pressed()"), self.deleteAssignment)
self.connect(self.assignment.statusAssignmentBox, SIGNAL("currentIndexChanged(QString)"), self.statusAssignment)
self.connect(self.assignment.completeAssignmentBox, SIGNAL("currentIndexChanged(QString)"), self.completeAssignment)
self.connect(self.reading.addReadingButton, SIGNAL("pressed()"), self.addReading)
self.connect(self.reading.deleteReadingButton, SIGNAL("pressed()"), self.deleteReading)
self.connect(self.reading.readingDoneButton, SIGNAL("pressed()"), self.doneReading)
@ -123,10 +123,10 @@ class MainWindow(QMainWindow):
self.connect(self.schedule.deleteScheduleButton, SIGNAL("pressed()"), self.deleteLesson)
# The toolbars
fileToolbar = self.addToolBar(self.trUtf8("File"))
fileToolbar = self.addToolBar("File")
fileToolbar.setObjectName("FileToolBar")
self.addActions(fileToolbar, (fileNewAction, fileOpenAction, None, fileQuitAction))
editToolbar = self.addToolBar(self.trUtf8("Edit"))
editToolbar = self.addToolBar("Edit")
editToolbar.setObjectName("EditToolBar")
self.addActions(editToolbar, (editAddCourse, editAddBook, None, editShowCalendar))
@ -189,7 +189,7 @@ class MainWindow(QMainWindow):
table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)
## Update the assignment's completion level to the specified level
def statusAssignment(self, completionLevel):
def completeAssignment(self, completionLevel):
course, number = self.getCourseAndNumber()
table, row = self.getAssignmentTableAndRow()
updateAssignmentCompletion(course, number, completionLevel)
@ -223,10 +223,10 @@ class MainWindow(QMainWindow):
## Delete the reading from the database and the table
def deleteReading(self):
week, course, book, chapter = self.getWeekCourseBookAndChapter()
week, course, book = self.getWeekCourseAndBook()
table, row = self.getReadingTableAndRow()
global semester
removeReadingFromDB(week, course, book, chapter)
removeReadingFromDB(week, course, book)
table.removeRow(row)
table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)
@ -238,7 +238,7 @@ class MainWindow(QMainWindow):
item = QTableWidgetItem(self.trUtf8("Done"))
item.setBackground(QBrush(Qt.green, Qt.SolidPattern))
else:
done = True
done = False
item = QTableWidgetItem(self.trUtf8("Not done"))
item.setBackground(QBrush(Qt.red, Qt.SolidPattern))
table.setItem(row, 6, item)
@ -249,9 +249,7 @@ class MainWindow(QMainWindow):
bookTitle = table.item(row, 2).text()
book = getBookWithTitleFromDB(bookTitle)
bookIsbn = book.getIsbn()
chapter = table.item(row, 3).text()
updateReadingDone(week, courseCode, bookIsbn, chapter, done)
print week, courseCode, bookIsbn, chapter, done
updateReadingDone(week, courseCode, bookIsbn, True)
## Return the reading table and its current row
def getReadingTableAndRow(self):
@ -260,24 +258,22 @@ class MainWindow(QMainWindow):
return table, row
## Return the week, course and book of the current reading
def getWeekCourseBookAndChapter(self):
def getWeekCourseAndBook(self):
table, row = self.getReadingTableAndRow()
weekItem = table.item(row, 0)
courseItem = table.item(row, 1)
bookItem = table.item(row, 2)
chapterItem = table.item(row, 3)
week = (weekItem.text().toInt())[0]
courseFull = courseItem.text()
courseCode = getCourseCode(courseFull)
book = getBookWithTitleFromDB(bookItem.text())
chapter = chapterItem.text()
return week, courseCode, book.getIsbn(), chapter
return week, courseCode, book.getIsbn()
# Schedule
## Open the Add Lesson dialog
def addLesson(self):
self.sdlg = ScheduleDlg()
def addLesson(self):
self.sdlg = ScheduleDlg()
self.sdlg.show()
## Delete the lesson from the database and the table
@ -337,15 +333,15 @@ class MainWindow(QMainWindow):
# General
## Make and open the About dialo
## Make and open the About dialog
def helpAbout(self):
QMessageBox.about(self, "About %s" % self.title, """
QMessageBox.about(self, "About %s" % self.title, u"""
<b>%s</b> v %s
<p>Copyright &copy; 2008 Tiril Anette Langfeldt Roedland. No rights reserved.
<p>Copyright &copy; 2008 Tiril Anette Langfeldt Rødland. No rights reserved.
<p>You may modify and redistribute the program under the terms of the GPL. The license can be found here: http://www.gnu.org/licenses/gpl.html
<p>This application is mainly for use by students, and can be used to keep track of assignments, planned readings and the schedule.
<p>Python %s - Qt %s - PyQt %s on %s
<p>Developer: Tiril Anette Langfeldt Roedland, tirilane@pvv.ntnu.no
<p>Developer: Tiril Anette Langfeldt Rødland, tirilane@pvv.ntnu.no
""" % (self.title, __version__, platform.python_version(), QT_VERSION_STR, PYQT_VERSION_STR, platform.system()))
## Updates the File menu
@ -402,7 +398,7 @@ class NewSemesterDlg(QDialog):
super(NewSemesterDlg, self).__init__(parent)
# Labels
self.termLabel = QLabel(self.trUtf8("Semester"))
self.termLabel = QLabel(self.trUtf8("Term"))
self.yearLabel = QLabel(self.trUtf8("Year"))
# Widgets
@ -552,13 +548,13 @@ class AssignmentTab(QWidget):
## Initialize the Assignment tab
def __init__(self, parent=None):
super(AssignmentTab, self).__init__(parent)
# Widgets
self.addAssignmentButton = QPushButton("Add assignment")
self.statusAssignmentBox = QComboBox()
self.completeAssignmentBox = QComboBox()
self.deleteAssignmentButton = QPushButton("Delete assignment")
statusTypes = [self.trUtf8("Not available"), self.trUtf8("Available"), self.trUtf8("Begun"), self.trUtf8("Finished"), self.trUtf8("Delivered"), self.trUtf8("Approved"), self.trUtf8("Not approved")]
self.statusAssignmentBox.addItems(statusTypes)
completeTypes = [self.trUtf8("Not available"), self.trUtf8("Available"), self.trUtf8("Begun"), self.trUtf8("Finished"), self.trUtf8("Delivered"), self.trUtf8("Approved"), self.trUtf8("Not approved")]
self.completeAssignmentBox.addItems(completeTypes)
# Make the table
self.makeTable()
@ -568,7 +564,7 @@ class AssignmentTab(QWidget):
self.hlayout = QHBoxLayout()
self.hlayout.addWidget(self.addAssignmentButton)
self.hlayout.addWidget(self.deleteAssignmentButton)
self.hlayout.addWidget(self.statusAssignmentBox)
self.hlayout.addWidget(self.completeAssignmentBox)
self.hlayout.addStretch()
self.vlayout.addWidget(self.assignmentTable)
self.vlayout.addLayout(self.hlayout)
@ -578,14 +574,14 @@ class AssignmentTab(QWidget):
def makeTable(self, current=None):
self.assignmentTable = QTableWidget(0, 5, self)
self.assignmentTable.clear()
self.assignmentHeaderList = QStringList()
self.assignmentHeaderList = QStringList()
self.assignmentHeaderList.append(self.trUtf8("Date"))
self.assignmentHeaderList.append(self.trUtf8("Course"))
self.assignmentHeaderList.append(self.trUtf8("Number"))
self.assignmentHeaderList.append(self.trUtf8("Description"))
self.assignmentHeaderList.append(self.trUtf8("Status"))
self.assignmentHeaderList.append(self.trUtf8("Complete"))
self.assignmentTable.setHorizontalHeaderLabels(self.assignmentHeaderList)
self.assignmentTable.setAlternatingRowColors(True)
self.assignmentTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
@ -611,43 +607,43 @@ class AssignmentTab(QWidget):
if assignment == None:
assignment = self.assignments[row]
status = QString(assignment.getStatus())
brush = self.makeBrush(status)
complete = QString(assignment.getComplete())
brush = self.makeBrush(complete)
self.assignmentTable.setItem(row, 0, QTableWidgetItem(QString(assignment.getDate().toString("yyyy-MM-dd hh:mm, ddd"))))
self.assignmentTable.setItem(row, 1, QTableWidgetItem(QString(assignment.getCourse().getFull())))
self.assignmentTable.setItem(row, 2, QTableWidgetItem(QString("%i" % assignment.getNumber())))
self.assignmentTable.setItem(row, 3, QTableWidgetItem(QString("%s" % assignment.getDescription())))
statusItem = QTableWidgetItem(status)
statusItem.setBackground(brush)
self.assignmentTable.setItem(row, 4, statusItem)
completeItem = QTableWidgetItem(complete)
completeItem.setBackground(brush)
self.assignmentTable.setItem(row, 4, completeItem)
## Set the right brush and color for the assignment, depending on level of completion
def makeBrush(self, status):
def makeBrush(self, complete):
brush = QBrush(Qt.NoBrush)
if status.compare(QString(self.trUtf8("Available"))) == 0:
if complete.compare(QString(self.trUtf8("Available"))) == 0:
brush.setStyle(Qt.Dense7Pattern)
brush.setColor(QColor(Qt.cyan))
elif status.compare(QString(self.trUtf8("Begun"))) == 0:
elif complete.compare(QString(self.trUtf8("Begun"))) == 0:
brush.setStyle(Qt.Dense5Pattern)
brush.setColor(QColor(Qt.cyan))
elif status.compare(QString(self.trUtf8("Finished"))) == 0:
elif complete.compare(QString(self.trUtf8("Finished"))) == 0:
brush.setStyle(Qt.Dense3Pattern)
brush.setColor(QColor(Qt.cyan))
elif status.compare(QString(self.trUtf8("Delivered"))) == 0:
elif complete.compare(QString(self.trUtf8("Delivered"))) == 0:
brush.setStyle(Qt.Dense1Pattern)
brush.setColor(QColor(Qt.cyan))
elif status.compare(QString(self.trUtf8("Approved"))) == 0:
elif complete.compare(QString(self.trUtf8("Approved"))) == 0:
brush.setStyle(Qt.SolidPattern)
brush.setColor(QColor(Qt.green))
elif status.compare(QString(self.trUtf8("Not approved"))) == 0:
elif complete.compare(QString(self.trUtf8("Not approved"))) == 0:
brush.setStyle(Qt.SolidPattern)
brush.setColor(QColor(Qt.red))
else:
brush.setStyle(Qt.NoBrush)
return brush
### The Add Assignment dialog
class AssignmentDlg(QDialog):
@ -655,13 +651,13 @@ class AssignmentDlg(QDialog):
## Initialize the Add Assignment dialog
def __init__(self, parent=None):
super(AssignmentDlg, self).__init__(parent)
# Labels
self.dateLabel = QLabel(self.trUtf8("&Date"))
self.courseLabel = QLabel(self.trUtf8("&Course"))
self.numberLabel = QLabel(self.trUtf8("&Number"))
self.descriptionLabel = QLabel(self.trUtf8("De&scription"))
self.statusLabel = QLabel(self.trUtf8("&Status"))
self.completeLabel = QLabel(self.trUtf8("&Complete"))
# Widgets
self.dateEdit = QLineEdit("DD.MM.YYYY HH:MM")
@ -671,9 +667,9 @@ class AssignmentDlg(QDialog):
self.numberEdit = QSpinBox()
self.numberEdit.setRange(1, 20)
self.descriptionEdit = QLineEdit()
self.statusEdit = QComboBox()
statusTypes = [self.trUtf8("Not available"), self.trUtf8("Available"), self.trUtf8("Begun"), self.trUtf8("Finished"), self.trUtf8("Delivered"), self.trUtf8("Approved"), self.trUtf8("Not approved")]
self.statusEdit.addItems(statusTypes)
self.completeEdit = QComboBox()
completeTypes = [self.trUtf8("Not available"), self.trUtf8("Available"), self.trUtf8("Begun"), self.trUtf8("Finished"), self.trUtf8("Delivered"), self.trUtf8("Approved"), self.trUtf8("Not approved")]
self.completeEdit.addItems(completeTypes)
self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
# Buddies
@ -681,7 +677,7 @@ class AssignmentDlg(QDialog):
self.courseLabel.setBuddy(self.courseEdit)
self.numberLabel.setBuddy(self.numberEdit)
self.descriptionLabel.setBuddy(self.descriptionEdit)
self.statusLabel.setBuddy(self.statusEdit)
self.completeLabel.setBuddy(self.completeEdit)
# Layout
self.layout = QGridLayout()
@ -689,12 +685,12 @@ class AssignmentDlg(QDialog):
self.layout.addWidget(self.courseLabel, 1, 0)
self.layout.addWidget(self.numberLabel, 2, 0)
self.layout.addWidget(self.descriptionLabel, 3, 0)
self.layout.addWidget(self.statusLabel, 4, 0)
self.layout.addWidget(self.completeLabel, 4, 0)
self.layout.addWidget(self.dateEdit, 0, 1)
self.layout.addWidget(self.courseEdit, 1, 1)
self.layout.addWidget(self.numberEdit, 2, 1)
self.layout.addWidget(self.descriptionEdit, 3, 1)
self.layout.addWidget(self.statusEdit, 4, 1)
self.layout.addWidget(self.completeEdit, 4, 1)
self.layout.addWidget(self.buttonBox, 5, 0, 1, 2)
self.setLayout(self.layout)
@ -712,7 +708,7 @@ class AssignmentDlg(QDialog):
assignment.append(unicode(self.courseEdit.currentText()))
assignment.append(self.numberEdit.value())
assignment.append(unicode(self.descriptionEdit.text()))
assignment.append(unicode(self.statusEdit.currentText()))
assignment.append(unicode(self.completeEdit.currentText()))
return assignment
## Accept the dialog and add the specified assignment
@ -722,7 +718,7 @@ class AssignmentDlg(QDialog):
courseFull = assignmentList[1]
number = assignmentList[2]
description = assignmentList[3]
status = assignmentList[4]
complete = assignmentList[4]
regex = QRegExp(r"[01-31].[01-12].[2000-2050] [00-23]:[00-60]")
validator = QRegExpValidator(regex, self)
@ -757,14 +753,14 @@ class AssignmentDlg(QDialog):
datetime = QDateTime(date, time)
except ValueError, e:
valueMessage = QErrorMessage()
valueMessage.showMessage(QString(self.trUtf8("The date is not valid. Please enter a date on the DD.MM.YYYY HH:MM form.")))
valueMessage.showMessage(QString(self.trUtf8("The date is not valid. Please enter a date on the DD.MM.YYYY HH:MM form.")))
course = getCourseFromDB(getCourseCode(courseFull))
try:
global semester
addNewAssignmentToDB(semester, datetime, course, number, description, status)
assignment = AssignmentModel(datetime, course, number, description, status)
addNewAssignmentToDB(semester, datetime, course, number, description, complete)
assignment = AssignmentModel(datetime, course, number, description, complete)
except UnboundLocalError, e:
pass
@ -784,15 +780,15 @@ class AssignmentModel():
course = None
number = 0
description = ""
status = ""
complete = ""
## Initialize the assignment model
def __init__(self, date, course, number, description, status):
def __init__(self, date, course, number, description, complete):
self.date = date
self.course = course
self.number = number
self.description = description
self.status = status
self.complete = complete
## Return the date the assignment is due
def getDate(self):
@ -811,8 +807,8 @@ class AssignmentModel():
return self.description
## Return the level of completion for the assignment
def getStatus(self):
return self.status
def getComplete(self):
return self.complete
### The contents of the Reading tab
@ -903,14 +899,14 @@ class ReadingDlg(QDialog):
## Initialize the Add Reading dialog
def __init__(self, parent=None):
super(ReadingDlg, self).__init__(parent)
# Labels
self.weekLabel = QLabel(self.trUtf8("&Week"))
self.courseLabel = QLabel(self.trUtf8("&Course"))
self.bookLabel = QLabel(self.trUtf8("&Book"))
self.chapterLabel = QLabel(self.trUtf8("Cha&pter"))
self.pagesLabel = QLabel(self.trUtf8("&Pages"))
# Widgets
self.weekEdit = QSpinBox()
self.weekEdit.setRange(1, 52)
@ -1034,7 +1030,7 @@ class ReadingModel():
p.strip()
nextArray.append(p.split("-"))
for n in nextArray:
sum += int(n[1]) - int(n[0]) + 1
sum += int(n[1]) - int(n[0])
return sum
## Return whether the reading has been done or not
@ -1079,8 +1075,8 @@ class ScheduleTab(QWidget):
selected = None
def updateHeaders(self):
self.scheduleHorizontalHeaderList = QStringList()
self.scheduleHorizontalHeaderList.append(self.trUtf8("Monday"))
self.scheduleHorizontalHeaderList = QStringList()
self.scheduleHorizontalHeaderList.append(self.trUtf8("Monday"))
self.scheduleHorizontalHeaderList.append(self.trUtf8("Tuesday"))
self.scheduleHorizontalHeaderList.append(self.trUtf8("Wednesday"))
self.scheduleHorizontalHeaderList.append(self.trUtf8("Thursday"))
@ -1123,7 +1119,7 @@ class ScheduleTab(QWidget):
item = QTableWidgetItem(text)
item.setBackground(self.getBackground(QString("%s" % type), lesson.getCourse(), collision))
self.scheduleTable.setItem(row, column, item)
## Return the column specified by the day
def getColumn(self, dayString):
day = QString("%s" % dayString)
@ -1138,7 +1134,7 @@ class ScheduleTab(QWidget):
elif day.compare(QString(self.trUtf8("Friday"))) == 0:
return 4
else:
return -1
return -1
## Set the right brush and color for the lesson, depending on type of lesson
def getBackground(self, type, course, collision):
@ -1169,7 +1165,7 @@ class ScheduleDlg(QDialog):
## Initialize the Add Lesson dialog
def __init__(self, parent=None):
super(ScheduleDlg, self).__init__(parent)
# Labels
self.dayLabel = QLabel(self.trUtf8("&Day"))
self.fromLabel = QLabel(self.trUtf8("&From"))
@ -1349,7 +1345,7 @@ class CourseDlg(QDialog):
booksDB = getBooksFromDB()
booksStringList = QStringList()
for book in booksDB:
booksStringList.append(book.getAuthor() + u" : " + book.getTitle() + u", " + str(book.getEdition()) + self.trUtf8(". edition"))
booksStringList.append(book.getTitle())
self.booksEdit.addItems(booksStringList)
self.booksEdit.sortItems()
@ -1434,7 +1430,7 @@ class BookDlg(QDialog):
## Initialize the Add Book dialog
def __init__(self, parent=None):
super(BookDlg, self).__init__(parent)
# Labels
self.titleLabel = QLabel(self.trUtf8("&Title"))
self.authorLabel = QLabel(self.trUtf8("&Author"))
@ -1571,7 +1567,7 @@ def initAssignmentDB(cursor):
course TEXT,
number INT,
description TEXT,
status TEXT,
complete TEXT,
term TEXT,
year INT,
PRIMARY KEY (course, number)
@ -1590,7 +1586,7 @@ def initReadingDB(cursor):
done BOOLEAN,
term TEXT,
year INT,
PRIMARY KEY (week, course, book, chapter)
PRIMARY KEY (week, course, book)
)
''')
@ -1657,7 +1653,7 @@ def addNewSemesterToDB(term, year):
exitDB(conn)
## Add new assignment to the database
def addNewAssignmentToDB(semester, datetime, course, number, description, status):
def addNewAssignmentToDB(semester, datetime, course, number, description, complete):
cursor, conn = initDB()
day = datetime.date().day()
@ -1670,9 +1666,9 @@ def addNewAssignmentToDB(semester, datetime, course, number, description, status
year = semester.getYear()
cursor.execute('''
INSERT INTO Assignment (date, course, number, description, status, term, year)
INSERT INTO Assignment (date, course, number, description, complete, term, year)
VALUES (datetime(?), ?, ?, ?, ?, ?, ?)
''', (timestring, course.getCode(), number, description, status, term, year))
''', (timestring, course.getCode(), number, description, complete, term, year))
exitDB(conn)
@ -1721,7 +1717,7 @@ def addNewCourseToDB(code, title, short, color, books):
cursor.execute('''
INSERT INTO CourseUsesBook (courseCode, bookIsbn)
VALUES (?, ?)
''', (code, book))
''', (code, book.getIsbn()))
exitDB(conn)
@ -1945,7 +1941,7 @@ def getBookWithTitleFromDB(booktitle):
def updateAssignmentCompletion(coursecode, num, completion):
cursor, conn = initDB()
status = "%s" % completion
complete = "%s" % completion
course = "%s" % coursecode
number = (num.toInt())[0]
@ -1954,17 +1950,16 @@ def updateAssignmentCompletion(coursecode, num, completion):
SET complete = ?
WHERE course = ?
AND number = ?
''', (status, course, number))
''', (complete, course, number))
exitDB(conn)
## Update whether the specified reading is done or not
def updateReadingDone(week, coursecode, bookisbn, chapter, done):
def updateReadingDone(week, coursecode, bookisbn, done):
cursor, conn = initDB()
course = "%s" % coursecode
book = "%s" % bookisbn
ch = "%s" % chapter
cursor.execute('''
UPDATE Reading
@ -1972,8 +1967,7 @@ def updateReadingDone(week, coursecode, bookisbn, chapter, done):
WHERE week = ?
AND course = ?
AND book = ?
AND chapter = ?
''', (done, week, course, book, ch))
''', (done, week, course, book))
exitDB(conn)
@ -1996,12 +1990,11 @@ def removeAssignmentFromDB(coursecode, num):
exitDB(conn)
## Remove the specified reading from the database
def removeReadingFromDB(week, coursecode, bookisbn, chapter):
def removeReadingFromDB(week, coursecode, bookisbn):
cursor, conn = initDB()
course = "%s" % coursecode
book = "%s" % bookisbn
ch = "%s" % chapter
cursor.execute('''
DELETE
@ -2009,8 +2002,7 @@ def removeReadingFromDB(week, coursecode, bookisbn, chapter):
WHERE week = ?
AND course = ?
AND book = ?
AND chapter = ?
''', (week, course, book, ch))
''', (week, course, book))
exitDB(conn)
@ -2049,7 +2041,7 @@ def getCourseCode(courseFull):
## Add a new course to the list of courses
def addNewCourse(course):
courses.append(course)
addNewCourseToDB(course.getCode(), course.getTitle(), course.getShort(), course.getColor(), course.getBooks())
addNewCourseToDB(course.getCode(), course.getTitle(), course.getShort(), course.getColor())
addNewCourseString(course)
## Return the list of courses
@ -2163,14 +2155,6 @@ def getMain():
## Run the program
def main():
app = QApplication(sys.argv)
locale = QLocale.system().name()
qtTranslator = QTranslator()
if qtTranslator.load("qt_" + locale, ":/"):
app.installTranslator(qtTranslator)
appTranslator = QTranslator()
if appTranslator.load("imagechanger_" + locale, ":/"):
app.installTranslator(appTranslator)
form = MainWindow()
app.setOrganizationName("PVV")
app.setOrganizationDomain("pvv.ntnu.no")

Binary file not shown.

View File

@ -1,657 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1" language="nb">
<defaultcodec></defaultcodec>
<context>
<name>AssignmentDlg</name>
<message>
<location filename="egon.py" line="660"/>
<source>&amp;Date</source>
<translation>&amp;Dato</translation>
</message>
<message>
<location filename="egon.py" line="661"/>
<source>&amp;Course</source>
<translation>&amp;Fag</translation>
</message>
<message>
<location filename="egon.py" line="662"/>
<source>&amp;Number</source>
<translation>&amp;Nummer</translation>
</message>
<message>
<location filename="egon.py" line="663"/>
<source>De&amp;scription</source>
<translation>&amp;Beskrivelse</translation>
</message>
<message>
<location filename="egon.py" line="664"/>
<source>&amp;Status</source>
<translation>&amp;Status</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Not available</source>
<translation>Ikke tilgjengelig</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Available</source>
<translation>Tilgjengelig</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Begun</source>
<translation>Påbegynt</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Finished</source>
<translation>Ferdig</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Delivered</source>
<translation>Levert</translation>
</message>
<message>
<location filename="egon.py" line="675"/>
<source>Approved</source>
<translation>Godkjent</translation>
</message>
<message>
<location filename="egon.py" line="676"/>
<source>Not approved</source>
<translation>Underkjent</translation>
</message>
<message>
<location filename="egon.py" line="706"/>
<source>Add new assignment</source>
<translation>Ny øving</translation>
</message>
<message>
<location filename="egon.py" line="732"/>
<source>The date is not in a correct format.</source>
<translation>Datoen er ikke i et godkjent format.</translation>
</message>
<message>
<location filename="egon.py" line="746"/>
<source>The day is not valid. Please enter a valid date.</source>
<translation>Dagen er ikke gyldig. Vennligst oppgi et gyldig dato.</translation>
</message>
<message>
<location filename="egon.py" line="749"/>
<source>The hour is not valid. Please enter a valid time.</source>
<translation>Timen er ikke gyldig. Vennligst oppgi et gyldig tidspunkt.</translation>
</message>
<message>
<location filename="egon.py" line="752"/>
<source>The minutes are not valid. Please enter a valid time.</source>
<translation>Minuttene er ikke gyldig. Vennligst oppgi et gyldig tidspunkt.</translation>
</message>
<message>
<location filename="egon.py" line="760"/>
<source>The date is not valid. Please enter a date on the DD.MM.YYYY HH:MM form.</source>
<translation>Datoen er ikke gyldig. Vennligst oppgi en dato formatet DD.MM.YYYY HH:MM.</translation>
</message>
</context>
<context>
<name>AssignmentTab</name>
<message>
<location filename="egon.py" line="560"/>
<source>Not available</source>
<translation>Ikke tilgjengelig</translation>
</message>
<message>
<location filename="egon.py" line="629"/>
<source>Available</source>
<translation>Tilgjengelig</translation>
</message>
<message>
<location filename="egon.py" line="632"/>
<source>Begun</source>
<translation>Påbegynt</translation>
</message>
<message>
<location filename="egon.py" line="635"/>
<source>Finished</source>
<translation>Ferdig</translation>
</message>
<message>
<location filename="egon.py" line="638"/>
<source>Delivered</source>
<translation>Levert</translation>
</message>
<message>
<location filename="egon.py" line="641"/>
<source>Approved</source>
<translation>Godkjent</translation>
</message>
<message>
<location filename="egon.py" line="644"/>
<source>Not approved</source>
<translation>Underkjent</translation>
</message>
<message>
<location filename="egon.py" line="583"/>
<source>Date</source>
<translation>Dato</translation>
</message>
<message>
<location filename="egon.py" line="584"/>
<source>Course</source>
<translation>Fag</translation>
</message>
<message>
<location filename="egon.py" line="585"/>
<source>Number</source>
<translation>Nummer</translation>
</message>
<message>
<location filename="egon.py" line="586"/>
<source>Description</source>
<translation>Beskrivelse</translation>
</message>
<message>
<location filename="egon.py" line="587"/>
<source>Status</source>
<translation>Status</translation>
</message>
</context>
<context>
<name>BookDlg</name>
<message>
<location filename="egon.py" line="1439"/>
<source>&amp;Title</source>
<translation>&amp;Tittel</translation>
</message>
<message>
<location filename="egon.py" line="1440"/>
<source>&amp;Author</source>
<translation>&amp;Forfatter</translation>
</message>
<message>
<location filename="egon.py" line="1441"/>
<source>&amp;Edition</source>
<translation>&amp;Utgave</translation>
</message>
<message>
<location filename="egon.py" line="1442"/>
<source>&amp;ISBN</source>
<translation>&amp;ISBN</translation>
</message>
<message>
<location filename="egon.py" line="1476"/>
<source>Add new book</source>
<translation>Ny bok</translation>
</message>
</context>
<context>
<name>CourseDlg</name>
<message>
<location filename="egon.py" line="1302"/>
<source>&amp;Code</source>
<translation>Fag&amp;kode</translation>
</message>
<message>
<location filename="egon.py" line="1303"/>
<source>&amp;Title</source>
<translation>Fag&amp;navn</translation>
</message>
<message>
<location filename="egon.py" line="1304"/>
<source>&amp;Short form</source>
<translation>&amp;Kortform</translation>
</message>
<message>
<location filename="egon.py" line="1305"/>
<source>&amp;Books</source>
<translation>&amp;Bøker</translation>
</message>
<message>
<location filename="egon.py" line="1344"/>
<source>Add new course</source>
<translation>Nytt fag</translation>
</message>
<message>
<location filename="egon.py" line="1352"/>
<source>. edition</source>
<translation>. utgave</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<location filename="egon.py" line="45"/>
<source>Egon</source>
<translation>Egon</translation>
</message>
<message>
<location filename="egon.py" line="45"/>
<source>Monday</source>
<translation>Mandag</translation>
</message>
<message>
<location filename="egon.py" line="45"/>
<source>Tuesday</source>
<translation>Tirsdag</translation>
</message>
<message>
<location filename="egon.py" line="45"/>
<source>Wednesday</source>
<translation>Onsdag</translation>
</message>
<message>
<location filename="egon.py" line="45"/>
<source>Thursday</source>
<translation>Torsdag</translation>
</message>
<message>
<location filename="egon.py" line="48"/>
<source>Friday</source>
<translation>Fredag</translation>
</message>
<message>
<location filename="egon.py" line="54"/>
<source>&amp;Assignment</source>
<translation>&amp;Øving</translation>
</message>
<message>
<location filename="egon.py" line="55"/>
<source>&amp;Reading List</source>
<translation>&amp;Leselekse</translation>
</message>
<message>
<location filename="egon.py" line="56"/>
<source>&amp;Schedule</source>
<translation>&amp;Timeplan</translation>
</message>
<message>
<location filename="egon.py" line="64"/>
<source>Calendar</source>
<translation>Kalender</translation>
</message>
<message>
<location filename="egon.py" line="79"/>
<source>Spring</source>
<translation>Vår</translation>
</message>
<message>
<location filename="egon.py" line="167"/>
<source>Autumn</source>
<translation>Høst</translation>
</message>
<message>
<location filename="egon.py" line="87"/>
<source>&amp;New</source>
<translation>&amp;Ny</translation>
</message>
<message>
<location filename="egon.py" line="87"/>
<source>Create a new semester plan</source>
<translation>Lag ny semesterplan</translation>
</message>
<message>
<location filename="egon.py" line="88"/>
<source>&amp;Open</source>
<translation>&amp;Åpne</translation>
</message>
<message>
<location filename="egon.py" line="88"/>
<source>Open an existing semester plan</source>
<translation>Åpne en eksisterende semesterplan</translation>
</message>
<message>
<location filename="egon.py" line="89"/>
<source>&amp;Quit</source>
<translation>&amp;Avslutt</translation>
</message>
<message>
<location filename="egon.py" line="89"/>
<source>Quit program</source>
<translation>Avslutt program</translation>
</message>
<message>
<location filename="egon.py" line="90"/>
<source>Add &amp;course</source>
<translation>Nytt &amp;fag</translation>
</message>
<message>
<location filename="egon.py" line="90"/>
<source>Add a new course</source>
<translation>Legg til et nytt fag</translation>
</message>
<message>
<location filename="egon.py" line="91"/>
<source>Add &amp;book</source>
<translation>Ny &amp;bok</translation>
</message>
<message>
<location filename="egon.py" line="91"/>
<source>Add a new book</source>
<translation>Legg til en ny bok</translation>
</message>
<message>
<location filename="egon.py" line="92"/>
<source>Add &amp;assignment</source>
<translation>Ny &amp;øving</translation>
</message>
<message>
<location filename="egon.py" line="92"/>
<source>Add a new assignment</source>
<translation>Legg til en ny øving</translation>
</message>
<message>
<location filename="egon.py" line="93"/>
<source>Add &amp;reading</source>
<translation>Ny &amp;leselekse</translation>
</message>
<message>
<location filename="egon.py" line="93"/>
<source>Add a new reading</source>
<translation>Legg til en ny leselekse</translation>
</message>
<message>
<location filename="egon.py" line="94"/>
<source>Add &amp;lesson</source>
<translation>Ny &amp;time</translation>
</message>
<message>
<location filename="egon.py" line="94"/>
<source>Add a new lesson</source>
<translation>Legg til en ny time</translation>
</message>
<message>
<location filename="egon.py" line="95"/>
<source>Cal&amp;endar</source>
<translation>Kal&amp;ender</translation>
</message>
<message>
<location filename="egon.py" line="95"/>
<source>Show the calendar</source>
<translation>Vis kalenderen</translation>
</message>
<message>
<location filename="egon.py" line="96"/>
<source>&amp;About Egon</source>
<translation>Om &amp;Egon</translation>
</message>
<message>
<location filename="egon.py" line="99"/>
<source>&amp;File</source>
<translation>&amp;Fil</translation>
</message>
<message>
<location filename="egon.py" line="100"/>
<source>&amp;Edit</source>
<translation>&amp;Rediger</translation>
</message>
<message>
<location filename="egon.py" line="101"/>
<source>&amp;Help</source>
<translation>&amp;Hjelp</translation>
</message>
<message>
<location filename="egon.py" line="126"/>
<source>File</source>
<translation>Fil</translation>
</message>
<message>
<location filename="egon.py" line="129"/>
<source>Edit</source>
<translation>Rediger</translation>
</message>
<message>
<location filename="egon.py" line="242"/>
<source>Not done</source>
<translation>Ikke ferdig</translation>
</message>
<message>
<location filename="egon.py" line="238"/>
<source>Done</source>
<translation>Ferdig</translation>
</message>
</context>
<context>
<name>NewSemesterDlg</name>
<message>
<location filename="egon.py" line="405"/>
<source>Semester</source>
<translation>Semester</translation>
</message>
<message>
<location filename="egon.py" line="406"/>
<source>Year</source>
<translation>År</translation>
</message>
<message>
<location filename="egon.py" line="430"/>
<source>New semester</source>
<translation>Nytt semester</translation>
</message>
</context>
<context>
<name>OpenSemesterDlg</name>
<message>
<location filename="egon.py" line="472"/>
<source>Open semester</source>
<translation>Åpne en semesterplan</translation>
</message>
</context>
<context>
<name>ReadingDlg</name>
<message>
<location filename="egon.py" line="908"/>
<source>&amp;Week</source>
<translation>&amp;Uke</translation>
</message>
<message>
<location filename="egon.py" line="909"/>
<source>&amp;Course</source>
<translation>&amp;Fag</translation>
</message>
<message>
<location filename="egon.py" line="910"/>
<source>&amp;Book</source>
<translation>&amp;Bok</translation>
</message>
<message>
<location filename="egon.py" line="911"/>
<source>Cha&amp;pter</source>
<translation>&amp;Kapittel</translation>
</message>
<message>
<location filename="egon.py" line="912"/>
<source>&amp;Pages</source>
<translation>&amp;Sider</translation>
</message>
<message>
<location filename="egon.py" line="960"/>
<source>Add new reading</source>
<translation>Ny leselekse</translation>
</message>
</context>
<context>
<name>ReadingTab</name>
<message>
<location filename="egon.py" line="826"/>
<source>Add pages to read</source>
<translation>Legg til leselekse</translation>
</message>
<message>
<location filename="egon.py" line="827"/>
<source>Delete pages</source>
<translation>Slett leselekse</translation>
</message>
<message>
<location filename="egon.py" line="883"/>
<source>Done</source>
<translation>Ferdig</translation>
</message>
<message>
<location filename="egon.py" line="849"/>
<source>Week</source>
<translation>Uke</translation>
</message>
<message>
<location filename="egon.py" line="850"/>
<source>Course</source>
<translation>Fag</translation>
</message>
<message>
<location filename="egon.py" line="851"/>
<source>Book</source>
<translation>Bok</translation>
</message>
<message>
<location filename="egon.py" line="852"/>
<source>Chapter</source>
<translation>Kapittel</translation>
</message>
<message>
<location filename="egon.py" line="853"/>
<source>Pages</source>
<translation>Sider</translation>
</message>
<message>
<location filename="egon.py" line="854"/>
<source>Number of pages</source>
<translation>Antall sider</translation>
</message>
<message>
<location filename="egon.py" line="886"/>
<source>Not done</source>
<translation>Ikke ferdig</translation>
</message>
</context>
<context>
<name>ScheduleDlg</name>
<message>
<location filename="egon.py" line="1174"/>
<source>&amp;Day</source>
<translation>&amp;Dag</translation>
</message>
<message>
<location filename="egon.py" line="1175"/>
<source>&amp;From</source>
<translation>Fr&amp;a</translation>
</message>
<message>
<location filename="egon.py" line="1176"/>
<source>&amp;To</source>
<translation>&amp;Til</translation>
</message>
<message>
<location filename="egon.py" line="1177"/>
<source>&amp;Course</source>
<translation>&amp;Fag</translation>
</message>
<message>
<location filename="egon.py" line="1178"/>
<source>Ty&amp;pe</source>
<translation>T&amp;ype</translation>
</message>
<message>
<location filename="egon.py" line="1179"/>
<source>&amp;Room</source>
<translation>&amp;Rom</translation>
</message>
<message>
<location filename="egon.py" line="1197"/>
<source>Lecture</source>
<translation>Forelesning</translation>
</message>
<message>
<location filename="egon.py" line="1197"/>
<source>Assignment lecture</source>
<translation>Øvingsforelesning</translation>
</message>
<message>
<location filename="egon.py" line="1197"/>
<source>Assignment help</source>
<translation>Øvingshjelp</translation>
</message>
<message>
<location filename="egon.py" line="1197"/>
<source>Lab</source>
<translation>Lab</translation>
</message>
<message>
<location filename="egon.py" line="1197"/>
<source>Seminar</source>
<translation>Seminar</translation>
</message>
<message>
<location filename="egon.py" line="1198"/>
<source>Other</source>
<translation>Annet</translation>
</message>
<message>
<location filename="egon.py" line="1232"/>
<source>Add new lesson</source>
<translation>Legg til ny time</translation>
</message>
</context>
<context>
<name>ScheduleTab</name>
<message>
<location filename="egon.py" line="1130"/>
<source>Monday</source>
<translation>Mandag</translation>
</message>
<message>
<location filename="egon.py" line="1132"/>
<source>Tuesday</source>
<translation>Tirsdag</translation>
</message>
<message>
<location filename="egon.py" line="1134"/>
<source>Wednesday</source>
<translation>Onsdag</translation>
</message>
<message>
<location filename="egon.py" line="1136"/>
<source>Thursday</source>
<translation>Torsdag</translation>
</message>
<message>
<location filename="egon.py" line="1138"/>
<source>Friday</source>
<translation>Fredag</translation>
</message>
<message>
<location filename="egon.py" line="1090"/>
<source>%i</source>
<translation>%i</translation>
</message>
<message>
<location filename="egon.py" line="1145"/>
<source>Lecture</source>
<translation>Forelesning</translation>
</message>
<message>
<location filename="egon.py" line="1147"/>
<source>Assignment lecture</source>
<translation>Øvingsforelesning</translation>
</message>
<message>
<location filename="egon.py" line="1149"/>
<source>Assignment help</source>
<translation>Øvingshjelp</translation>
</message>
<message>
<location filename="egon.py" line="1151"/>
<source>Lab</source>
<translation>Lab</translation>
</message>
<message>
<location filename="egon.py" line="1153"/>
<source>Seminar</source>
<translation>Seminar</translation>
</message>
<message>
<location filename="egon.py" line="1155"/>
<source>Other</source>
<translation>Annet</translation>
</message>
</context>
</TS>

View File

@ -223,10 +223,10 @@ class MainWindow(QMainWindow):
## Delete the reading from the database and the table
def deleteReading(self):
week, course, book, chapter = self.getWeekCourseBookAndChapter()
week, course, book = self.getWeekCourseAndBook()
table, row = self.getReadingTableAndRow()
global semester
removeReadingFromDB(week, course, book, chapter)
removeReadingFromDB(week, course, book)
table.removeRow(row)
table.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)
@ -238,7 +238,7 @@ class MainWindow(QMainWindow):
item = QTableWidgetItem(self.trUtf8("Ferdig"))
item.setBackground(QBrush(Qt.green, Qt.SolidPattern))
else:
done = True
done = False
item = QTableWidgetItem(self.trUtf8("Ikke ferdig"))
item.setBackground(QBrush(Qt.red, Qt.SolidPattern))
table.setItem(row, 6, item)
@ -249,9 +249,7 @@ class MainWindow(QMainWindow):
bookTitle = table.item(row, 2).text()
book = getBookWithTitleFromDB(bookTitle)
bookIsbn = book.getIsbn()
chapter = table.item(row, 3).text()
updateReadingDone(week, courseCode, bookIsbn, chapter, done)
print week, courseCode, bookIsbn, chapter, done
updateReadingDone(week, courseCode, bookIsbn, True)
## Return the reading table and its current row
def getReadingTableAndRow(self):
@ -260,18 +258,16 @@ class MainWindow(QMainWindow):
return table, row
## Return the week, course and book of the current reading
def getWeekCourseBookAndChapter(self):
def getWeekCourseAndBook(self):
table, row = self.getReadingTableAndRow()
weekItem = table.item(row, 0)
courseItem = table.item(row, 1)
bookItem = table.item(row, 2)
chapterItem = table.item(row, 3)
week = (weekItem.text().toInt())[0]
courseFull = courseItem.text()
courseCode = getCourseCode(courseFull)
book = getBookWithTitleFromDB(bookItem.text())
chapter = chapterItem.text()
return week, courseCode, book.getIsbn(), chapter
return week, courseCode, book.getIsbn()
# Schedule
@ -1034,7 +1030,7 @@ class ReadingModel():
p.strip()
nextArray.append(p.split("-"))
for n in nextArray:
sum += int(n[1]) - int(n[0]) + 1
sum += int(n[1]) - int(n[0])
return sum
## Return whether the reading has been done or not
@ -1349,7 +1345,7 @@ class CourseDlg(QDialog):
booksDB = getBooksFromDB()
booksStringList = QStringList()
for book in booksDB:
booksStringList.append(book.getAuthor() + u" : " + book.getTitle() + u", " + str(book.getEdition()) + u". utgave")
booksStringList.append(book.getTitle())
self.booksEdit.addItems(booksStringList)
self.booksEdit.sortItems()
@ -1528,7 +1524,7 @@ def initDB():
home = os.environ['HOME']
else:
home = ""
path = home+"/.egon/egon_no.db"
path = home+"/.egon/egon_bm.db"
conn = sqlite.connect(path)
cursor = conn.cursor()
@ -1590,7 +1586,7 @@ def initReadingDB(cursor):
done BOOLEAN,
term TEXT,
year INT,
PRIMARY KEY (week, course, book, chapter)
PRIMARY KEY (week, course, book)
)
''')
@ -1721,7 +1717,7 @@ def addNewCourseToDB(code, title, short, color, books):
cursor.execute('''
INSERT INTO CourseUsesBook (courseCode, bookIsbn)
VALUES (?, ?)
''', (code, book))
''', (code, book.getIsbn()))
exitDB(conn)
@ -1959,12 +1955,11 @@ def updateAssignmentCompletion(coursecode, num, completion):
exitDB(conn)
## Update whether the specified reading is done or not
def updateReadingDone(week, coursecode, bookisbn, chapter, done):
def updateReadingDone(week, coursecode, bookisbn, done):
cursor, conn = initDB()
course = "%s" % coursecode
book = "%s" % bookisbn
ch = "%s" % chapter
cursor.execute('''
UPDATE Reading
@ -1972,8 +1967,7 @@ def updateReadingDone(week, coursecode, bookisbn, chapter, done):
WHERE week = ?
AND course = ?
AND book = ?
AND chapter = ?
''', (done, week, course, book, ch))
''', (done, week, course, book))
exitDB(conn)
@ -1996,12 +1990,11 @@ def removeAssignmentFromDB(coursecode, num):
exitDB(conn)
## Remove the specified reading from the database
def removeReadingFromDB(week, coursecode, bookisbn, chapter):
def removeReadingFromDB(week, coursecode, bookisbn):
cursor, conn = initDB()
course = "%s" % coursecode
book = "%s" % bookisbn
ch = "%s" % chapter
cursor.execute('''
DELETE
@ -2009,8 +2002,7 @@ def removeReadingFromDB(week, coursecode, bookisbn, chapter):
WHERE week = ?
AND course = ?
AND book = ?
AND chapter = ?
''', (week, course, book, ch))
''', (week, course, book))
exitDB(conn)
@ -2049,7 +2041,7 @@ def getCourseCode(courseFull):
## Add a new course to the list of courses
def addNewCourse(course):
courses.append(course)
addNewCourseToDB(course.getCode(), course.getTitle(), course.getShort(), course.getColor(), course.getBooks())
addNewCourseToDB(course.getCode(), course.getTitle(), course.getShort(), course.getColor())
addNewCourseString(course)
## Return the list of courses

255
main.py Executable file
View File

@ -0,0 +1,255 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from pysqlite2 import dbapi2 as sqlite
#import qrc_resources
from qrc_resources import *
from assignment import *
from reading import *
from schedule import *
from calendar import *
from book import *
from course import *
#from db import *
import db
__version__ = "0.0.1"
class MainWindow(QMainWindow):
courses = []
coursesString = []
books = []
booksString = []
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
# The program name
self.title = "Egon"
# The tabs
assignment = AssignmentTab()
reading = ReadingTab()
schedule = ScheduleTab()
# Set the tabs in the middle
self.tabs = QTabWidget()
self.tabs.addTab(assignment, "&Assignments")
self.tabs.addTab(reading, "&Reading List")
self.tabs.addTab(schedule, "&Schedule")
self.tabs.setTabShape(QTabWidget.Triangular)
self.tabs.setTabPosition(QTabWidget.North)
self.setCentralWidget(self.tabs)
# Set the title
self.setWindowTitle(self.title)
# The calendar
self.calendarFrame = QFrame()
self.calendarFrame.setFrameStyle(QFrame.StyledPanel|QFrame.Sunken)
self.calendarDockWidget = QDockWidget("Calendar", self)
self.calendarDockWidget.setVisible(False)
self.calendarDockWidget.setObjectName("CalendarDockWidget")
self.calendarDockWidget.setAllowedAreas(Qt.LeftDockWidgetArea|Qt.RightDockWidgetArea|Qt.BottomDockWidgetArea)
self.calendar = QCalendarWidget()
self.calendarLayout = QVBoxLayout()
self.calendarLayout.addWidget(self.calendar)
self.calendarFrame.setLayout(self.calendarLayout)
self.calendarFrame.hide()
self.calendarDockWidget.setWidget(self.calendarFrame)
# Actions
fileNewAction = self.createAction("&New", self.fileNew, QKeySequence.New, ":filenew", "Create a new plan")
fileOpenAction = self.createAction("&Open", self.fileOpen, QKeySequence.Open, ":fileopen", "Open an existing plan")
fileSaveAction = self.createAction("&Save", self.fileSave, QKeySequence.Save, ":filesave", "Save semester plan")
fileSaveAsAction = self.createAction("Save as...", self.fileSaveAs, None, ":filesaveas", "Save plan as...")
filePrintAction = self.createAction("&Print", self.filePrint, QKeySequence.Print, ":fileprint", "Print plan")
fileQuitAction = self.createAction("&Quit", self.close, "Ctrl+Q", ":filequit", "Quit program")
editAddCourse = self.createAction("A&dd course", self.addCourse, "Ctrl+D", None, "Add a new course")
editAddBook = self.createAction("Add &book", self.addBook, "Ctrl+B", None, "Add a new book")
editAddAssignment = self.createAction("Add &assignment", self.addAssignment, "Ctrl+A", None, "Add a new assignment")
editAddReading = self.createAction("Add &reading", self.addReading, "Ctrl+R", None, "Add a new reading")
editAddLesson = self.createAction("Add &lesson", self.addLesson, "Ctrl+L", None, "Add a new lesson")
editShowCalendar = self.createAction("&Calendar", self.showCalendar, "Ctrl+C", None, "Show the calendar")
helpAboutScheduler = self.createAction("&About %s" % self.title)
# Menus
self.fileMenu = self.menuBar().addMenu("&File")
self.editMenu = self.menuBar().addMenu("&Edit")
self.helpMenu = self.menuBar().addMenu("&Help")
# Add actions to the menus
self.addActions(self.fileMenu, (fileNewAction, fileOpenAction, None, fileSaveAction, fileSaveAsAction, None, filePrintAction, None, fileQuitAction))
self.addActions(self.editMenu, (editAddCourse, editAddBook, None, editAddAssignment, None, editAddReading, None, editAddLesson, None, editShowCalendar))
self.addActions(self.helpMenu, (helpAboutScheduler, None))
# Connect statements
self.connect(editAddCourse, SIGNAL("triggered()"), self.addCourse)
self.connect(editAddBook, SIGNAL("triggered()"), self.addBook)
self.connect(editAddAssignment, SIGNAL("triggered()"), self.addAssignment)
self.connect(editAddReading, SIGNAL("triggered()"), self.addReading)
self.connect(editAddLesson, SIGNAL("triggered()"), self.addLesson)
self.connect(editShowCalendar, SIGNAL("pressed()"), self.showCalendar)
self.connect(helpAboutScheduler, SIGNAL("triggered()"), self.helpAbout)
self.connect(assignment.addAssignmentButton, SIGNAL("pressed()"), self.addAssignment)
self.connect(assignment.editAssignmentButton, SIGNAL("pressed()"), self.editAssignment)
self.connect(assignment.assignmentDoneButton, SIGNAL("pressed()"), self.doneAssignment)
self.connect(reading.addReadingButton, SIGNAL("pressed()"), self.addReading)
self.connect(reading.editReadingButton, SIGNAL("pressed()"), self.editReading)
self.connect(schedule.addScheduleButton, SIGNAL("pressed()"), self.addLesson)
self.connect(schedule.editScheduleButton, SIGNAL("pressed()"), self.editLesson)
# The toolbars
fileToolbar = self.addToolBar("File")
fileToolbar.setObjectName("FileToolBar")
self.addActions(fileToolbar, (fileNewAction, fileOpenAction, None, fileSaveAction, fileSaveAsAction, None, filePrintAction, None, fileQuitAction))
editToolbar = self.addToolBar("Edit")
editToolbar.setObjectName("EditToolBar")
self.addActions(editToolbar, (editAddCourse, editAddBook, None, editShowCalendar))
self.courses = db.getCourses()
self.makeCoursesString(self.courses)
def addCourse(self):##, code, title, short):
self.acdlg = AddCourseDlg()
self.acdlg.show()
def addBook(self):##, isbn, title, author, edition, course):
self.abdlg = AddBookDlg()
self.abdlg.show()
def addAssignment(self):
self.aadlg = AddAssignmentDlg()
self.aadlg.show()
def editAssignment(self):
self.eadlg = EditAssignmentDlg()
self.connect(self.eadlg, SIGNAL("changed()"), self.refreshTable)
self.eadlg.show()
def doneAssignment(self):
pass
def addReading(self):
self.ardlg = AddReadingDlg()
self.ardlg.show()
def editReading(self):
self.erdlg = EditReadingDlg()
self.connect(self.erdlg, SIGNAL("changed()"), self.refreshTable)
self.erdlg.show()
def doneReading(self):
pass
def addLesson(self):
self.asdlg = AddScheduleDlg()
self.asdlg.show()
def editLesson(self):
self.esdlg = EditScheduleDlg()
self.connect(self.esdlg, SIGNAL("changed()"), self.refreshTable)
self.esdlg.show()
def helpAbout(self):
QMessageBox.about(self, "About %s" % self.title, u"""<b>%s</b> v %s
<p>Copyright &copy; 2008 Tiril Anette Langfeldt Rødland. All rights reserved.
<p>This application is mainly for use by students, and can be used to keep track of assignments, planned readings and the schedule.
<p>Python %s - Qt %s - PyQt %s on %s""" % (self.title, __version__, platform.python_version(), QT_VERSION_STR, PYQT_VERSION_STR, platform.system()))
def addActions(self, target, actions):
for action in actions:
if action is None:
target.addSeparator()
else:
target.addAction(action)
def fileNew(self):
model = Model()
def fileOpen(self):
pass
def fileSave(self):
pass
def fileSaveAs(self):
pass
def filePrint(self):
pass
def updateFileMenu(self):
self.fileMenu.clear()
self.addActions(self.fileMenu, self.fileMenuActions[:-1])
current = QString(self.filename) if self.filename is not None else None
def createAction(self, text, slot=None, shortcut=None, icon=None, tip=None, checkable=False, signal="triggered()"):
action = QAction(text, self)
if icon is not None:
iconfile = "/home/tiril/koding/schedule/images/%s.png" % icon
action.setIcon(QIcon(iconfile))
if shortcut is not None:
action.setShortcut(shortcut)
if tip is not None:
action.setToolTip(tip)
action.setStatusTip(tip)
if slot is not None:
self.connect(action, SIGNAL(signal), slot)
if checkable:
action.setCheckable(True)
return action
def showCalendar(self):
if self.calendarDockWidget.isVisible():
self.removeDockWidget(self.calendarDockWidget)
else:
self.addDockWidget(Qt.BottomDockWidgetArea, self.calendarDockWidget)
self.calendarDockWidget.setVisible(True)
def refreshTable(self):
pass
def addNewCourse(self, course):
self.courses.append(course)
db.addNewCourse(course.getCode(), course.getTitle(), course.getShort())
self.addNewCourseString(course)
def getCourses(self):
return self.courses
def addNewCourseString(self, course):
self.coursesString.append(course.getFull())
def makeCoursesString(self, courses):
if courses:
for c in courses:
addNewCourseString(course)
def getCoursesString(self):
return self.coursesString
class Model:
def __init__(self, parent=None):
self.assignmentModel = AssignmentModel()
self.readingModel = ReadingModel()
self.scheduleModel = ScheduleModel()
def main():
app = QApplication(sys.argv)
form = MainWindow()
app.setOrganizationName("PVV")
app.setOrganizationDomain("pvv.ntnu.no")
app.setApplicationName(form.title)
form.show()
app.exec_()
main()

BIN
main.pyc Normal file

Binary file not shown.

979
qrc_resources.py Normal file
View File

@ -0,0 +1,979 @@
# -*- coding: utf-8 -*-
# Resource object code
#
# Created: Mon Jun 9 16:06:16 2008
# by: The Resource Compiler for PyQt (Qt v4.3.4)
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore
qt_resource_data = "\
\x00\x00\x08\x15\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\
\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
\x79\x71\xc9\x65\x3c\x00\x00\x07\xa7\x49\x44\x41\x54\x78\xda\x62\
\xfc\xff\xff\x3f\x03\x35\xc0\x9b\x99\x8c\xf7\xff\x8b\xe5\x29\xbc\
\xbd\xf5\x94\xe1\xd5\x99\x83\x1b\x7e\x7d\x78\x33\xd1\x65\xf7\xff\
\x03\x84\xf4\x01\x04\x10\x03\xc8\x01\x94\xe2\x37\x13\x19\x1c\x7e\
\x5e\xe6\xfb\xff\xff\xfd\xe6\xff\xff\x3f\xdc\xf9\xff\xfb\xe9\xb9\
\xff\x77\x67\xe5\xfd\xdf\xed\xc2\xd0\x4f\x48\x2f\x40\x00\x51\xc5\
\x01\xef\xe6\x32\xec\xff\xff\x9a\xf1\xff\xff\xbb\xfc\x40\xdc\x05\
\x76\x04\x08\x43\x1d\x11\x80\x4f\x2f\x40\x00\xb1\x80\x42\x61\xdd\
\xfa\x23\xff\x7f\xff\xfe\xc3\xf0\xfb\xd7\x5f\x06\x46\x46\x06\x86\
\x3f\x7f\xfe\x02\x31\x90\xff\x1b\x41\xa3\xb2\xff\x80\xd5\x80\x68\
\x59\xb6\x1b\x0c\x19\xfe\x8c\xd0\x78\xf8\xc4\xc0\xf0\xa5\x9c\x81\
\xe1\x56\x3f\x03\xc3\x4f\x7b\x06\xce\xa7\xe7\x41\xa2\x17\xf0\xc5\
\x00\x40\x00\xb1\xac\x5f\x7f\xf4\xbf\xad\xbd\x3e\xd0\xc0\x7f\x0c\
\x7f\xff\xfd\x63\x90\x91\x10\x04\x4b\x5c\xbe\xf9\x04\x45\xa1\xae\
\xba\x0c\x56\x03\xbe\x1f\x4f\x64\xe0\x50\x01\x32\xbe\x02\x1d\xf1\
\x05\x9a\x9e\xde\x70\x00\x25\xae\x30\xdc\x7e\x2b\xc4\xd0\xf6\xaf\
\xf8\xbe\x0b\x03\x03\x23\x2e\x07\x00\x04\x10\xcb\x6f\xa0\xaf\x7e\
\xfc\xfc\xcd\xf0\xf5\xdb\x4f\x86\x3f\x7f\x11\x0e\x30\xf5\x6f\x64\
\x90\x14\x15\x60\xe0\xe0\x60\x65\xe0\x60\x67\x65\x38\xbf\xa5\x11\
\x43\xf3\xbf\xcf\x0f\x18\xfe\x7f\x5f\x08\xe1\xbc\x66\x65\x60\x60\
\x02\x3a\xe0\x17\x13\xd0\x72\x6e\x86\xe7\x0f\x3e\x30\xdc\x94\x8e\
\x67\x70\x92\x96\x61\x90\x94\x0c\xfd\xff\xfc\xf9\x6a\xac\x8e\x00\
\x08\x20\x16\x50\x90\xfe\x05\x5a\xfc\xfb\x0f\x84\x86\x01\x6e\x2e\
\x76\x06\x23\x1d\x79\x06\x41\x3e\x2e\x06\x01\x7e\x2e\xac\xae\xff\
\x79\xa1\x89\x81\x53\x03\x68\xee\x6f\x90\xa5\x40\x35\x4c\x7f\x18\
\x18\xde\x0b\x81\xe5\x6e\x7f\x93\x63\xf8\xa8\xa0\xc3\xf0\xeb\xf9\
\x2b\x06\x16\x16\x26\x9c\x51\x00\x10\x40\x2c\xe0\xf8\x06\x5a\x0c\
\xc6\x40\x36\x0c\xb0\xb1\xb2\x30\x48\x8a\x09\x30\x08\x80\x1c\xc0\
\x87\xe9\x80\xff\xbf\x3e\x30\x30\xb1\x6c\x63\x60\x64\xe7\x64\x60\
\x78\x0e\xc4\x4c\xc0\xe4\xf4\x8b\x1d\x18\x0d\xfc\x0c\xef\x5f\x7f\
\x66\xb8\xcd\xe9\x0a\xf6\xd4\x87\x0f\x9f\x18\xfe\xfd\xfb\x87\xd3\
\x01\x00\x01\xc4\x02\x4a\x48\xa0\xb8\x07\x87\x04\x92\x42\x09\x51\
\x7e\xa0\x03\xf8\xa1\x0e\xe0\xc6\xf4\xfd\xc5\x09\x0c\xac\xd2\x40\
\xc6\x1f\x5e\xa0\xa5\xdc\x10\xdf\x7f\x06\xb2\x99\xd9\x18\x9e\xbd\
\xe5\x66\x78\xa9\xec\xc4\xf0\x09\x68\xf9\xf7\x6f\x3f\x80\x0e\xc0\
\x5d\xd6\x00\x04\x10\x38\x04\xfe\xfe\x01\x85\x00\x6a\x14\x04\xba\
\x19\x33\xe8\x6b\xca\x31\xf0\x00\xa3\x82\x87\x9b\x03\xc3\xf7\xff\
\x3f\x2f\x60\x60\x56\x01\x5a\xf8\x9a\x19\x68\x39\x10\xff\x65\x63\
\x60\xf8\x26\x08\x4c\x4f\xdf\x19\x04\xdd\x8b\x19\x3e\x9c\xf9\xc4\
\xf0\xed\xf3\x57\x86\x9f\xbf\x7e\x33\xe0\x2b\xec\x00\x02\x08\x9c\
\x08\x41\x96\xc3\xa2\x02\x06\xea\xf2\xfc\x70\x6a\xfa\x73\x7f\x03\
\x03\xbb\x1a\xd0\xf2\xff\x40\x8b\xbf\x82\x12\x1f\x50\xdf\x27\x50\
\x1a\xe0\x60\x78\x78\xf7\x0d\x03\xbf\xbf\x1f\xc3\x97\x7d\x6b\x18\
\x40\x66\xff\x06\x3a\x00\x5f\x14\x00\x04\x10\xcb\x1f\x70\x22\xfc\
\x0f\x54\xfc\x0f\x1c\x02\xb7\x1f\xbc\x04\x07\xd9\x3f\x50\x41\x01\
\xa5\x41\x06\x80\x3c\x01\x11\xff\xc7\xa0\xfa\x7c\x22\x03\x9f\x19\
\x30\xb7\xbc\x87\xfa\x8c\x09\x98\x76\xbe\x09\x31\xfc\xf8\xfe\x95\
\xe1\x16\xab\x25\xc3\x9b\x7d\xe7\x19\x7e\xfd\xfa\x03\x2e\x37\x7e\
\x11\x08\x01\x80\x00\x62\x81\xc5\x3d\x38\x2a\x80\xf4\xf5\x3b\xcf\
\x51\xf8\x7f\xa1\x09\x14\x46\x2b\xfc\xda\xc6\xa0\x6f\x09\x4c\x74\
\x8c\x40\x1f\x7f\x81\x59\xce\x06\xf6\xfd\xdd\xeb\x0f\x18\x76\xfd\
\xf6\x66\xf8\x76\xfa\x06\xc3\x1f\x50\xc1\x06\x72\xc0\xef\xdf\x78\
\xd3\x00\x40\x00\x41\xa2\x00\x1c\xfc\x7f\xe1\x85\x11\xcc\x42\x88\
\xa5\x90\x10\x82\xa5\x11\x15\x81\xf3\x0c\x2c\x12\xc0\x42\xe9\xcb\
\x1f\x50\x49\x00\x49\x7c\xdf\x84\x81\xf2\xbf\x18\x8e\xbd\x94\x64\
\xf8\xca\xc7\x0a\xb4\xf8\x37\xd8\xf7\x90\x92\x13\x7f\x08\x00\x04\
\x10\x24\x0a\x40\xb9\x00\x1c\x05\x7f\x31\x7c\x8c\x4c\x8b\xfd\x3d\
\xc7\x20\xab\x0a\x32\x0c\xe4\xfb\xdf\x10\xcb\xbf\xf3\x82\x43\xe3\
\xd1\x85\x2b\x0c\x17\x39\xfc\xc0\x3e\x06\x5b\x0c\xf5\xd8\x6f\x60\
\x54\xa0\x3b\x80\x91\xd1\x90\x13\x14\x76\xff\xff\x9f\xff\x0a\x10\
\x40\x2c\xbf\x61\xe5\x00\xb4\x20\x12\x16\xe4\x01\xc7\xf9\xdf\x7f\
\xff\xe1\xf4\x2f\x60\x49\xf9\xe3\xc7\x2f\x06\xd3\x3f\x9b\x18\x58\
\xe5\x0c\x81\x96\xfe\x02\x26\x40\x60\xe1\xc2\x0c\xcc\xfb\x7f\xf8\
\x18\x18\x58\x98\x19\x4e\x3d\x11\x62\xe0\x96\x91\x67\x60\x07\x59\
\x0a\xb4\xfc\xc1\x93\x57\xe0\x68\xf8\x05\x0d\x01\xa0\xa5\xcc\x10\
\x97\x83\x31\x13\xd4\x21\xac\x00\x01\x04\x29\x07\xa0\x41\x0d\x8a\
\x02\x17\x6b\x2d\xb8\x4b\x41\xe2\xdf\x80\x45\xf4\xcf\x9f\xbf\x80\
\xc5\xee\x7d\x06\xa1\xaf\x82\x10\xfd\xdf\xff\x43\x8c\xf8\x0d\x34\
\xf3\x3f\x2f\xc3\xf3\x2b\x17\x18\xe4\x83\xcb\x19\x64\x79\x25\xc0\
\x66\x80\x3c\xd3\x33\x6b\x3d\x98\xfe\xf5\xeb\x17\xd0\x1c\x50\x74\
\x31\x88\x61\x89\x01\x4e\x80\x00\x62\x81\xf9\x1c\xbd\x20\xfa\x09\
\xf4\xf5\x37\x60\x21\x02\xa9\x19\xff\x31\x70\x3d\x9d\xcd\xc0\x62\
\x6c\x01\x2c\xed\x7e\x02\x7d\xfd\x1b\x92\xf7\xff\xf0\x00\x7d\xcf\
\xc2\xf0\xe0\x01\xd0\x13\x7a\x40\xcb\x7f\x43\xb3\x33\x10\xff\xfc\
\xf1\x13\x6c\xc6\x8f\xef\x3f\xf0\xa6\x01\x80\x00\x02\xe7\x82\x3f\
\x48\xf1\x0c\x52\xfc\xf5\xeb\x0f\x70\xf6\x81\xf9\x06\x84\x39\x19\
\xaf\x03\x95\xab\x01\x7d\xff\x07\x9c\xe2\x19\x40\x29\xfb\x3f\x1f\
\xc3\xf3\x0b\xa7\x18\x7e\xe9\x46\x30\xfc\xfb\x0d\xc9\x72\x5f\xbf\
\x7e\x07\xe3\xef\x40\x8b\x61\xe5\x0b\x3e\x07\x00\x04\x10\x22\x0a\
\xa0\x16\x7d\xf9\xf2\x9d\xe1\xf4\xe9\xc7\x90\x1c\x01\x4e\x94\x90\
\x10\x72\x15\x50\x65\x60\xfb\x07\x2c\x72\xff\x7c\x05\x3a\x00\x58\
\xe6\xff\x06\x46\x05\x0b\x2b\xc3\xbd\xc7\xff\x18\x2e\x8b\x4a\x32\
\x7c\x7f\x71\x1f\xe8\xe3\x9f\x60\xf5\x32\x32\x82\xe0\x74\xf0\x0f\
\xda\xae\xc0\xe7\x00\x80\x00\x62\x81\xd5\x82\x20\xfa\x1b\xd0\xe7\
\x3f\x7e\xfc\x66\x90\x93\xe3\x87\x26\xca\xbf\xf0\x28\xf8\x0d\xaa\
\xe3\x7f\xdb\x30\x30\xb0\xdf\x05\x46\xc3\x5d\x70\x5a\x78\x7f\xff\
\x3a\xc3\x73\x06\x25\x06\x2e\xa0\x5b\xd8\xd9\xd9\x81\xea\x59\xe0\
\x8d\x99\xbf\xe0\x28\x05\x95\xb2\x38\x1d\x00\xaa\xf9\xbe\x03\x04\
\x10\x0b\x28\xa5\x82\x82\xff\xfb\xf7\x9f\x0c\xdf\x40\xc1\x06\xd4\
\xfc\xe1\xc3\x37\x78\xa8\x80\x1c\xc1\xfa\xe6\x24\x03\xa3\x28\x30\
\xef\x33\x02\x8b\x5d\x36\x0d\x30\xfe\xfc\xe6\x3a\xc3\xb1\xad\xab\
\x19\x5e\xe9\x64\x33\xfc\xf9\xf2\x13\x1e\x52\x20\x9a\x87\x87\x0d\
\x6c\xf1\x5f\x70\x3d\x83\x11\x05\xc0\x2c\xc4\xf0\x0d\x98\x05\xbf\
\x83\x38\x00\x01\x04\x0e\x01\x50\x70\x7d\xf9\xf2\x0d\xdc\xc4\x02\
\xa5\x89\x0f\x1f\xbe\xa3\x18\xc8\xf6\x11\xd8\x58\x91\x16\x87\x9b\
\xf0\xf9\xc1\x75\x86\xbd\xb3\xe6\x30\xdc\x51\x4a\x63\xf8\xfb\xf9\
\x27\x52\x54\xfd\x07\xd3\xec\xec\xcc\xe0\x2c\xf8\xf7\xff\x5f\xe4\
\x10\x00\x59\xf8\x15\x68\xf1\x6f\x64\xd7\x00\x04\x10\x38\x11\x82\
\xaa\xcc\x9f\xc0\xec\x02\x4a\xc5\xa0\x32\x5c\x56\x96\x0f\x9e\x26\
\x40\xf8\xdf\x1f\x2e\x86\x7d\x07\xae\x32\xe8\xb1\x28\x32\x70\xbd\
\xb8\xc8\x70\xf9\xd8\x59\x86\x2f\x96\x59\x0c\xa2\xd0\xac\x0b\x0b\
\x29\x78\xe9\x09\xd2\x07\x0c\xfe\xff\xa0\x3a\x04\x9c\xb3\x18\x81\
\x8e\x38\xff\x01\x5b\x3c\x00\x04\x10\x0b\xa8\xb6\xfa\x01\xcc\x32\
\xbf\x7e\xfe\x81\x36\x36\xff\x30\x5c\xbc\xf8\x1c\x6c\xe0\x3f\x68\
\x9d\xc0\xfe\xfa\x2d\xc3\xdf\xef\xbf\x19\xce\xae\x98\xc3\xf0\xf9\
\x07\x0f\xc3\x4b\x31\x37\x86\x3f\xb7\x5f\x43\x0a\x2a\xa8\x3a\xe4\
\x10\x90\x91\x11\x00\xe6\x10\xa0\xa5\xa0\xc2\xfa\x1f\x28\xaa\x71\
\x27\x42\x80\x00\x62\x01\xd5\xd7\xbf\xc1\x3e\xff\x0d\xa9\x40\x80\
\x58\x5a\x9a\x17\x25\x01\xfe\xfb\xc9\xc9\xf0\xe3\xfa\x09\x86\x5f\
\x52\x96\x0c\xff\x55\x1c\x19\x44\xfe\x21\x4a\xce\xbf\x28\x59\x8d\
\x11\x58\x2c\xb0\x30\xb0\xb2\x32\x81\x13\x20\xac\x80\xc3\x97\x0b\
\x00\x02\x08\x9c\x0d\xff\x40\xf3\x30\xac\xd9\xcd\xc6\xc6\x04\x64\
\x83\x8a\x4f\x08\xfe\x23\x24\x0d\x2c\x84\xa2\x18\x7e\x89\x68\x33\
\xf0\x20\x65\x4f\x70\x81\x03\x2c\x25\x41\x0d\x57\x26\x60\xc1\x04\
\x0b\x7e\x48\xd9\xf2\x17\x9c\x0d\xff\x82\xb3\x21\x33\x4e\x07\x00\
\x04\x10\xcb\x2f\x60\xb9\xfe\xe5\xed\x7b\x86\x4f\xc0\xc6\x23\x28\
\x31\xde\xbd\x7b\x07\x29\x07\xc0\x7c\x08\xa4\x99\x44\x19\xfe\xbe\
\x7e\x8e\x24\x8e\x54\x79\xa1\xab\x05\xd2\x5f\x5f\xbd\x00\x57\xc3\
\x7f\x80\x65\xc3\xff\xff\x5c\x38\x1d\x00\x10\x40\x8c\xa0\xe0\x31\
\x30\x48\xfd\xff\xf1\xe3\x17\x70\x02\x14\x10\xe0\x82\x37\xcd\x10\
\x3d\x18\x06\x78\x30\xa2\xf2\x11\x6c\x74\xb1\x97\x2f\xdf\x40\xd5\
\x83\x3a\x3a\x07\x70\xf6\x0b\x00\x02\x88\x91\x5a\x9d\x53\x72\x01\
\x40\x00\x31\x31\x0c\x30\x00\x08\xa0\x01\x77\x00\x40\x80\x01\x00\
\x7b\xd6\x28\xba\xe5\x29\x08\xf0\x00\x00\x00\x00\x49\x45\x4e\x44\
\xae\x42\x60\x82\
\x00\x00\x05\x44\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\
\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
\x79\x71\xc9\x65\x3c\x00\x00\x04\xd6\x49\x44\x41\x54\x78\xda\x62\
\xfc\xff\xff\x3f\xc3\x40\x02\x80\x00\x62\x62\x18\x60\x00\x10\x40\
\x03\xee\x00\x80\x00\x62\x41\x17\x58\xb7\xfe\xc8\xff\xdf\xbf\xff\
\x30\xfc\xfe\xf5\x97\x81\x91\x91\x81\xe1\xcf\x9f\xbf\x40\x0c\xe4\
\xff\x46\xd0\xa8\xec\x3f\x60\x35\x08\x1a\x55\x0c\xc4\x7f\xf5\xe6\
\x23\xc3\xfb\x77\x9f\x19\x2e\x9c\x9f\xc9\x88\x6e\x1f\x40\x00\xa1\
\x38\x60\xfd\xfa\xa3\xff\x6d\xed\xf5\x81\x9a\xff\x31\xfc\xfd\xf7\
\x8f\x41\x46\x42\x10\x2c\x7e\xf9\xe6\x13\x14\x4d\xba\xea\x32\x24\
\xf9\x72\xfb\xc1\xcb\x0c\x7f\x7e\xfd\x66\x70\x72\x2e\xf9\xbf\x6f\
\x6f\x0f\x8a\x23\x00\x02\x08\xc5\x01\xbf\x81\xbe\xfa\xf1\xf3\x37\
\xc3\xd7\x6f\x3f\x19\xfe\xfc\x45\x38\xc0\xd4\xbf\x91\x41\x52\x54\
\x80\x81\x83\x83\x95\x81\x83\x9d\x95\xe1\xfc\x96\x46\x92\x1c\x70\
\xe7\xe1\x2b\x86\xbf\x7f\xff\x32\x38\xb9\x9a\x30\x48\x4a\x86\xfe\
\x7f\xfe\x7c\x35\xdc\x11\x00\x01\x84\xea\x00\x60\x70\xfd\x05\x5a\
\xfc\xfb\x0f\x84\x86\x01\x6e\x2e\x76\x06\x23\x1d\x79\x06\x41\x3e\
\x2e\x06\x01\x7e\x2e\x92\xe3\xf9\x0f\xd4\xbc\x5f\xbf\x7e\x31\xb0\
\xb0\xa0\x26\x3b\x80\x00\x62\x41\x57\x08\xf2\x39\x18\x03\xd9\x30\
\xc0\xc6\xca\xc2\x20\x29\x26\xc0\x20\x00\x72\x00\x1f\x79\x0e\x00\
\x99\xf9\xe1\xc3\x27\x86\x7f\xff\xfe\xa1\xc8\x01\x04\x10\x5a\x08\
\xfc\x01\xc7\x3d\x38\x24\x90\x14\x4a\x88\xf2\x03\x1d\xc0\x0f\x75\
\x00\x37\xc9\x0e\x00\x85\xe8\xa7\x8f\x9f\x19\xbe\x7f\xfb\x01\x74\
\x00\x6a\xb9\x03\x10\x40\x18\x21\xf0\xf7\x0f\x28\x04\x50\xa3\x20\
\xd0\xcd\x98\x41\x5f\x53\x8e\x81\x07\x18\x15\x3c\xdc\x1c\x24\x3b\
\x00\xe4\xf3\x6f\x9f\xbf\x32\xfc\x04\x26\x44\xf4\x82\x0f\x20\x80\
\x30\x12\x21\xc8\x72\x58\x90\xc1\x40\x5d\x9e\x1f\x59\x79\x1c\x14\
\xdc\xaf\x5e\x7d\x60\xf8\xf2\xe9\x0b\xd8\xec\xdf\x40\x07\xa0\x47\
\x01\x40\x00\xa1\x86\x00\x38\x11\xfe\x07\x2a\xfe\x07\x0e\x81\xdb\
\x0f\x5e\x82\x83\xec\x1f\xd0\xd5\xff\xa1\x34\xc8\x00\x90\x27\x20\
\xe2\xff\xc0\x3e\xfa\x07\x97\xfb\x0f\xe7\xff\xfe\xfd\x9b\xe1\xcd\
\xeb\x0f\x0c\x5f\xbf\xfe\x00\x26\xbe\x3f\xe0\x72\xe3\x17\x96\x10\
\x00\x08\x20\xcc\x5c\xf0\x0f\x92\x00\x41\xf4\xf5\x3b\xcf\x51\xf8\
\x7f\xa1\x09\x14\x99\x86\xb0\x21\x0e\x07\xd1\xa0\x74\xf4\xf9\xd3\
\x57\x86\xaf\x5f\xbe\x22\x0a\x30\x50\x81\x04\x72\xc0\xef\xdf\x18\
\x69\x00\x20\x80\x30\xa3\x00\x1c\xfc\x7f\xe1\x85\x11\x2e\x8b\xfe\
\xa2\x39\x04\x14\xbf\x5f\xbf\x7c\x63\xf8\xf6\xf5\x1b\xb4\x24\x84\
\x94\xa6\x10\x33\xa1\xfc\xdf\x98\x21\x00\x10\x40\x98\x51\x00\xca\
\x05\xe0\x28\xf8\x8b\xd5\xc7\x7f\x90\x1c\xf3\xf3\xe7\x2f\x30\x06\
\xa5\xee\x9f\xc0\x02\x0c\x6e\x31\x88\xfe\x8d\xb0\x1c\xe6\xb1\xdf\
\xc0\xa8\x40\x77\x00\x40\x00\xb1\xa0\x67\x17\x58\x19\x00\xb2\x44\
\x58\x90\x07\x1c\xe7\x7f\xff\xfd\x87\xd3\xbf\x80\x16\xfd\xf8\x01\
\xb4\xf4\xfb\x0f\x06\x56\x46\x56\x06\x76\x66\x46\x06\x2e\x56\x66\
\x88\x25\xbf\xff\x22\xd5\x0b\x50\x4b\x81\xf4\x83\x27\xaf\xc0\xd1\
\xf0\x0b\x4b\x08\x00\x04\x10\x66\x39\x00\xf5\x1d\x28\x0a\x5c\xac\
\xb5\xe0\x72\x20\xf1\x6f\xc0\x22\x1a\xe4\x63\x48\x05\x05\x51\x03\
\x71\xec\x5f\x24\xb1\xbf\x18\xf2\x3d\xb3\xd6\x43\x1d\x86\x99\x0b\
\x00\x02\x88\x05\x5b\x91\x89\x5e\x10\x81\x82\xf7\x1b\x30\x98\x91\
\x0d\x85\xe1\xbf\x7f\xff\x42\x8b\xf0\xbf\x58\xe5\x91\x6b\x4a\x50\
\x28\xa0\x87\x00\x40\x00\x61\xe4\x82\x3f\x48\xf1\x0c\x52\x0c\xc9\
\x46\xbf\xb1\x1a\x8c\xea\x10\xdc\xf2\x60\x07\xfc\x85\x44\x0b\xba\
\x03\x00\x02\x08\x7b\x14\x40\x35\x7e\xf9\xf2\x9d\xe1\xf4\xe9\xc7\
\x90\x1c\xf1\xf7\x2f\x3c\x61\xa2\xd2\x08\xcb\xb1\xc9\xc9\xcb\x0b\
\x01\xd3\xc1\x6f\x60\x09\x0b\x49\x0f\xe8\x0e\x00\x08\x20\x8c\x44\
\x08\xab\x0d\xbf\x01\x7d\xfe\xe3\xc7\x6f\x06\x39\x39\x7e\xb4\x78\
\xfe\x87\x16\xe7\xff\x30\xd2\x00\xb2\x27\x60\x39\xe2\x2f\x8e\x10\
\x00\x08\x20\xb4\x6c\xf8\x07\x1c\xfc\xdf\xbf\xff\x64\xf8\xf6\xfd\
\x07\x58\xc3\x87\x0f\xdf\x90\x7c\x88\x6a\x21\x2e\x3e\x8c\x0d\xc2\
\xbc\xbc\xec\x40\xfe\x6f\x78\xcb\x0a\xdd\x01\x00\x01\x84\x11\x02\
\xa0\x60\xfa\xf2\xe5\x1b\xbc\x39\xf5\xe1\xc3\x77\x94\x60\x45\x0e\
\x6a\xe4\xa8\x41\x15\x47\xb0\x39\x38\x98\xa1\xb5\x2c\x76\x07\x00\
\x04\x10\x46\x22\x04\x17\x2a\xc0\x86\x03\x28\xd8\x40\x65\xb8\xac\
\x2c\x1f\xd6\xac\x85\x9e\x13\x70\x25\x4a\x48\xc2\xfe\xc3\xf0\x0f\
\xe4\x50\x2c\x0e\x00\x08\x20\x54\x07\xfc\x02\x15\x32\x3f\x81\x85\
\xcd\x1f\x78\x61\x72\xf1\xe2\x73\xb0\x05\xff\xfe\x21\x07\xed\x3f\
\xb4\x50\x41\x84\x04\xb8\xc0\x42\x12\x93\x96\xe6\x07\x27\x40\x50\
\x1a\x00\x61\x06\x06\x54\x07\x00\x04\x10\x8a\x03\x40\xe5\xf9\x6f\
\xb0\xcf\x7f\x43\x2a\x10\x20\x96\x96\xe6\xc5\xc8\xe3\xc8\x3e\x46\
\x4e\x70\xc8\xc1\x8f\x28\x23\xfe\x80\xd3\x00\xac\x80\x43\x0f\x01\
\x80\x00\xc2\xc8\x86\xe0\x22\x13\x9c\xef\x21\x69\x80\x8d\x8d\x09\
\xc8\xfe\x0f\x6c\xa2\xc3\x30\x23\x10\x33\x41\x7d\x02\x11\x63\x60\
\x60\x04\x63\x90\x1c\x8c\xfd\xff\x3f\x04\x43\xa2\x00\x18\x32\x7f\
\x60\x51\xc0\x8c\xe2\x00\x80\x00\x42\x71\xc0\xaf\xef\xbf\x18\xbe\
\xbc\x7d\xcf\xf0\xe9\xf9\x2b\x70\x62\xbc\x7b\xf7\x0e\x46\x1e\xff\
\xf3\xe7\x1f\x96\xc4\xf6\x0f\x6b\x79\x00\x8b\x86\xaf\xaf\x5e\x80\
\xab\xe1\x3f\x3f\x7f\x02\x1d\x80\xda\xa6\x04\x08\x20\x46\xf4\x20\
\x31\x30\x48\xfd\xff\xf1\xe3\x17\x70\x02\x14\x10\xe0\x82\x37\xcd\
\x40\xea\x20\x98\x01\x1e\x8c\xa8\x7c\x04\x1b\x5d\xec\xe5\xcb\x37\
\x50\xf5\xa0\xe2\xfe\x00\x4a\xbf\x00\x20\x80\x18\x07\xba\x73\x0a\
\x10\x40\x03\xde\x37\x04\x08\xa0\x01\x77\x00\x40\x80\x01\x00\x80\
\x70\xef\x0c\xb7\x02\x84\x52\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
\x42\x60\x82\
\x00\x00\x07\x7b\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
\x67\x9b\xee\x3c\x1a\x00\x00\x07\x0d\x49\x44\x41\x54\x58\x85\xc5\
\x97\x49\x6c\x1c\x65\x16\xc7\x7f\xef\xab\xea\xcd\x6e\xdb\xe9\xb6\
\xe3\x71\x1c\xdb\x31\x31\x6d\x07\x05\xc5\x09\x4b\x34\xc9\x44\x80\
\x66\xc4\xa2\x44\x42\x39\x70\xe4\x80\x10\x20\x84\x10\x52\x0e\x13\
\x0e\x20\x61\x09\x44\x16\x89\x1c\xb8\xc0\x81\x2b\x42\x82\x03\x17\
\x92\x81\x64\x32\x08\x65\x63\x11\x0e\x26\x13\x5b\x4a\x3c\xce\x82\
\xdb\x59\xec\x76\xa7\xbb\xdd\x5d\xd5\xdd\xb5\xcc\xa1\xaa\xab\x17\
\x5b\x73\x8b\xe6\x93\x4a\x5f\x2d\xaf\xde\xff\x5f\xff\xf7\xbe\xf7\
\xbd\x12\xd7\x75\x39\x28\xb2\x17\x98\x00\xc6\x81\x30\xf7\x77\x54\
\x80\x29\x60\xe2\xa8\xeb\x9e\x90\xbf\xc3\xde\xae\x58\xec\xf8\xdf\
\x1e\x7a\x88\x1d\x43\x43\x44\x74\xfd\xbe\xa2\x97\x2d\x8b\x8b\x37\
\x6f\x72\x7a\x66\x86\x9c\x61\xec\xd3\x81\x89\xbf\x6e\xd9\xc2\xf8\
\xc6\x8d\x5c\x99\x9f\x67\x3e\x93\xa1\x6a\x59\x6b\xbe\x2c\x22\x68\
\x22\x28\xa5\xd0\xfc\x43\x29\x85\x26\x12\x9c\x2b\xa5\x50\xbe\x4d\
\xeb\xac\x2b\x45\x22\x1e\xe7\xd1\xa1\x21\x5c\xd7\xe5\xeb\x8b\x17\
\x27\x74\x60\x7c\x7c\x70\x90\xab\xe9\x34\xf9\xe1\x61\x52\xaf\xbe\
\x8a\x16\x89\xac\x85\x8e\x00\x4a\x04\x44\x50\xfe\x3d\x25\x82\xf8\
\xcf\xa4\xe5\x9c\xc6\xfb\x00\xd5\x2a\xa5\x33\x67\xc8\xcd\xce\x32\
\x3e\x38\xc8\xd7\x17\x2f\x8e\xeb\x40\x38\xac\x69\xa4\x33\x19\x52\
\xaf\xbd\x86\x1e\x8f\xaf\xc6\x6e\x70\x12\xea\xea\x22\xdc\xdd\x4d\
\x28\x91\x40\xeb\xea\xc2\xb2\x6d\xcc\x4c\x06\x29\x14\xd0\x56\x56\
\x70\x56\x56\x02\xb5\xa4\x75\x0e\x85\x88\x3f\xf1\x04\xf9\xcb\x97\
\x59\xe7\xe1\x84\x75\x00\xd7\x75\xa9\xda\x36\xae\x6d\x63\xf9\x0e\
\x5a\xc1\xe3\x23\x23\x24\x77\xed\x42\x8f\xc5\x56\x11\xec\xec\xef\
\xaf\xc7\xb8\x58\xe4\xc6\xe9\xd3\x24\x0b\x05\x10\x09\xd4\x0b\x66\
\xc7\x01\x11\x5c\xd7\x05\x20\x20\x00\x60\x15\x8b\x88\xa6\x35\xc7\
\x3c\x16\xa3\xf7\xa9\xa7\xe8\x18\x1d\x5d\x33\x2f\x5a\x47\xa4\xbd\
\x9d\xd1\xe7\x9f\xe7\xc6\xe4\x24\x32\x39\x49\xbb\x52\x75\x70\x11\
\xc4\x71\x50\xad\x04\x1c\xff\xc2\x2e\x16\xc1\x27\x20\x40\x7c\x78\
\x98\xfe\xfd\xfb\x09\x35\x84\xc5\xb1\x6d\x96\xe6\xe7\xb9\x33\x37\
\xc7\xdd\xb9\x39\xda\x22\x11\x12\x43\x43\x74\x0f\x0f\xd3\x3d\x30\
\x80\xf2\x01\x37\x3d\xf2\x08\xc5\xcd\x9b\xb9\xf6\xd5\x57\xf4\x57\
\x2a\x01\x01\xd7\x71\x50\x4a\x05\x98\x1e\x01\xc7\x01\xa0\x9a\xcf\
\x23\xa1\x10\x4a\x04\x3d\x1e\x5f\x05\x7e\xed\xb7\xdf\xf8\xd7\xa7\
\x9f\xb2\x29\x14\x62\x7d\x3c\xce\x48\x2c\x86\x52\x0a\xb9\x71\x83\
\xdc\xf7\xdf\x73\x2b\x12\xa1\x6f\xff\x7e\x7a\xb7\x6c\x01\xa0\x7d\
\xdd\x3a\x1e\x78\xe1\x05\xa6\x3e\xfa\x88\x2d\x89\x84\xa7\x80\xeb\
\xa2\x44\x02\x4c\x05\x60\xfb\x17\xb7\x4e\x9e\xa4\xba\xbc\x8c\x5d\
\x2a\xd1\xbf\x6f\x5f\x00\x5e\x35\x4d\xfe\xf1\xf1\xc7\x9c\x3b\x72\
\x84\x3f\xb7\xb7\xf3\x40\x7b\x3b\x1d\x80\x6b\x9a\xb8\x86\x81\x6b\
\x18\x44\x2c\x8b\x64\xa9\x84\xf5\xc5\x17\x5c\xff\xf2\x4b\xaa\xe5\
\xb2\x47\x22\x91\x60\xfd\x73\xcf\x91\xcb\x66\xc1\x34\x11\xd3\x44\
\x44\x02\x4c\xd5\x14\x82\x5c\x8e\xa5\x1f\x7e\xa0\x63\x64\x84\x75\
\xdb\xb7\x07\x5f\x7e\xea\x93\x4f\xa8\x5e\xb8\xc0\x63\x3d\x3d\x84\
\x2c\xcb\x03\x35\x4d\x22\x03\x03\x44\x06\x07\x71\x0d\xc3\x73\xee\
\xcf\x91\xc9\x49\xf2\xdf\x7c\x13\xbc\x9f\xda\xb3\x87\x74\x77\x37\
\xf8\x64\x95\x48\x80\x19\x28\xa0\xc0\x93\xb3\x5a\x65\xe8\xc5\x17\
\xeb\xb2\xff\xfa\x2b\x37\x4f\x9c\x60\x24\x16\xf3\x80\x4b\x25\x1c\
\xc3\x20\xf9\xec\xb3\xf4\xbf\xf1\x06\x7d\xaf\xbf\x4e\x61\xd7\x2e\
\x8c\x5c\x0e\xd7\x34\xa1\x54\x02\xc3\xc0\x3a\x73\x86\xc2\xcc\x4c\
\xe0\xe7\xd1\x97\x5f\xe6\xf2\xfc\xbc\xa7\x40\x83\xea\xaa\x96\x03\
\xb5\x8a\xd6\x91\x4a\x11\x4e\x26\x83\x84\x3b\xfe\xc1\x07\xec\xe8\
\xec\xf4\xd8\x97\x4a\x01\x89\xf8\xce\x9d\x81\xf3\x4d\x4f\x3e\xc9\
\xd5\x3b\x77\xa0\x54\xf2\x48\x18\x06\x18\x06\xe5\xcf\x3f\xc7\xb5\
\x6d\x00\x62\x5d\x5d\x64\xc3\x61\x9c\x4c\x06\x59\x95\x03\xae\x1b\
\x94\xd3\x75\xdb\xb6\x05\x8e\xef\x5e\xb9\x42\x78\x66\x86\x68\x0b\
\x38\xa6\x89\x34\x54\xcb\x70\x2c\x46\xae\x50\x80\x1a\xb8\x69\x82\
\x69\xe2\xcc\xcf\x53\x4d\xa7\x03\xbb\xe8\x86\x0d\x54\xd3\x69\x94\
\x08\x76\x63\x08\x1c\xc7\x09\x6a\x79\x57\x03\x81\xf4\xd4\x14\x5d\
\x8e\x43\x35\x9d\xc6\x5a\x5a\xf2\xe4\xad\x81\x34\x0e\xd7\x85\x4a\
\x05\xca\x65\xa4\x5c\x0e\x08\x88\x69\xe2\xcc\xcd\x05\x66\xbd\xa9\
\x14\xf7\x2c\x6b\x0d\x05\x6a\x21\x50\x8a\x8e\x87\x1f\x0e\x5e\x58\
\xf8\xfd\x77\x92\xa1\x90\xb7\xb6\x0d\x03\x7b\x79\x19\xf7\xde\x3d\
\xdc\x62\xd1\x03\x6d\x1c\x95\x4a\xf0\xf5\x52\x2a\x41\x3e\x8f\x9b\
\xcd\x62\x5d\xba\x14\x98\xfc\x69\xeb\x56\x32\xd5\x2a\x4a\xa9\x20\
\x07\x74\x00\xdb\xb6\xd1\x94\x42\x6a\x55\xcb\x1f\x22\x42\x5c\xd7\
\x83\xdd\x4c\x03\xc4\xb6\xbd\xaf\x6c\x19\x52\x2e\x23\x86\x51\xdf\
\x90\xfc\x8d\xaa\xc5\x21\x2b\xb6\xed\x2d\x43\x3f\x37\x14\x80\xe5\
\x87\x40\x53\x0a\x63\x7a\x3a\xb0\xdf\x38\x3e\x4e\xb1\x41\x9d\xc6\
\xed\xb6\x75\x28\x1f\x50\x35\x80\x8b\x08\xa1\xb1\xb1\xc0\x66\xf1\
\xf2\x65\x12\xe1\x30\x4a\x04\xab\x29\x04\xb6\x8d\xf8\xab\xa0\xd8\
\x40\xa0\x7f\xdb\x36\x0a\xb5\xfc\x68\xd9\xdb\x57\x29\xb0\x06\xb8\
\x12\x41\x4f\xa5\xea\x04\xa6\xa7\x59\x1f\x89\xac\x56\xc0\x76\x9c\
\xa0\xd1\x30\x1a\xd6\xee\xfa\x54\x0a\xab\xaf\x6f\xcd\x06\xa3\x55\
\x83\x46\xd0\xda\xa1\xf5\xf5\xa1\x86\x86\x02\x9b\xcc\xcc\x4c\x9d\
\x40\x6b\x12\x8a\x2f\x6f\xe5\xfa\x75\x2a\xd9\xac\xf7\x50\xd3\x78\
\xfc\xfd\xf7\x29\xf8\x3b\x58\x23\x89\x46\xa2\x77\x2e\x5d\x22\xa2\
\x69\xcd\x21\x50\x8a\xb6\x03\x07\x82\xdd\xd5\xc8\x66\x51\xe9\x34\
\xba\x52\xab\x0b\x91\x65\xdb\x75\xe7\x22\xa4\x8f\x1e\x0d\x9c\x0f\
\xef\xde\x8d\xb1\x6f\x5f\xd0\xfd\xd4\xec\x4a\x9f\x7d\xc6\xad\x1f\
\x7f\xe4\xe6\xf9\xf3\x9c\x3f\x76\x8c\x91\xb6\xb6\x26\xf0\xf0\xde\
\xbd\xe8\xe3\xe3\x81\x9f\x73\x87\x0e\x31\x16\x8f\x7b\xca\x89\x60\
\xf9\x21\xd0\x6b\x0a\xa8\x5a\x5f\x27\x42\xe9\xf4\x69\x16\x4f\x9d\
\x62\xfd\xd3\x4f\x03\xb0\xfb\xed\xb7\xf9\xb7\xae\x93\x38\x79\x32\
\x20\x61\xcf\xce\x22\xef\xbc\x43\xbe\x5a\x65\x4f\x28\x44\x5b\x34\
\xda\x04\x1e\x79\xe5\x95\x00\x7c\xf6\xdb\x6f\x29\x9f\x3d\xcb\x58\
\x6f\x6f\xd0\xa6\xad\x0a\x41\x6b\xa2\xe5\x8e\x1d\xc3\xcc\x64\x00\
\x08\xc5\x62\xec\x78\xf7\x5d\xc2\x87\x0f\x53\xee\xe9\xa9\xc7\x59\
\x29\xfa\xa2\x51\xda\x74\xdd\x6b\x5e\x36\x6c\xa0\xfd\xc3\x0f\x89\
\xbd\xf9\x26\x2a\x1a\x05\xa0\xb4\xb8\xc8\xcf\x47\x8e\xf0\x97\x64\
\xd2\x03\x6f\x21\xa0\xd7\x42\x10\x0d\x87\x9b\x62\xec\xe6\x72\xdc\
\x7d\xef\x3d\x7a\x26\x26\x68\xeb\xe9\x01\xa0\x7f\xf7\x6e\x9c\x9d\
\x3b\x29\x5e\xbb\x46\xe5\xca\x15\xe4\xea\x55\x22\x9a\x86\x36\x3a\
\x8a\x4a\xa5\x08\x6d\xda\xd4\xd4\x51\x95\x16\x17\xf9\xe7\xc1\x83\
\x6c\xd7\x34\xda\x43\xa1\x00\xdc\x6d\x0d\x41\x53\x0e\x34\xcc\xf6\
\xd4\x14\x0b\x2f\xbd\x44\xe4\xad\xb7\x18\x7c\xe6\x19\x4f\x32\x5d\
\xa7\x23\x95\x82\x86\xe5\xb5\xd6\xf8\xcf\x77\xdf\x31\x79\xf4\x28\
\x8f\xe9\x3a\x03\x1d\x1d\xf5\xce\xd8\x6f\x4a\x56\x13\x80\xb5\x7b\
\xf9\x95\x15\xd4\xe1\xc3\xcc\x9e\x3d\xcb\xc6\x03\x07\x88\x25\x12\
\xff\x13\xd8\xc8\x66\x39\x77\xe8\x10\xea\xc2\x05\xf6\x26\x12\x84\
\x35\xad\x19\xdc\xb7\x6b\x26\xe0\x38\xb8\xb0\xe6\x7a\xd7\x94\x42\
\x44\xe8\x38\x7f\x9e\xc5\x73\xe7\xb8\xdd\xdb\x8b\x1a\x1d\x25\x36\
\x36\x46\xf7\xd6\xad\x80\x57\xe1\x32\xd3\xd3\x54\x66\x67\x89\x2e\
\x2c\x30\x12\x8b\x31\xd0\xdd\xdd\x14\xf3\xc6\x7f\x84\xaa\x6d\x07\
\x95\x50\x07\x2a\xa6\x65\x85\x8b\xa6\x49\xb4\xb3\x73\x4d\xf0\x5a\
\xd2\xb5\x29\xc5\x83\xcb\xcb\xc8\x4f\x3f\xa1\x7e\xf9\x05\xd3\x71\
\xc8\x59\x16\x09\x4d\x63\x73\x38\xec\xad\xf1\x64\xb2\x0e\xb8\x06\
\xb8\x88\x90\x5e\x5a\xc2\xf4\xfe\xbe\x2a\x3a\x30\x75\xbb\x50\x78\
\x5c\xc3\xeb\x84\x93\x9d\x9d\x28\xd7\x45\xfc\xd6\xb9\x26\x59\x6d\
\xef\x73\xfc\xbf\x22\xc7\x75\x89\x2a\x45\x9b\x5f\xd9\xc4\xbf\x27\
\xae\x5b\x07\xac\x9d\xfb\xfe\x6c\xdb\x66\x7e\x71\x91\xab\x0b\x0b\
\xdc\x2e\x14\x00\xa6\x74\x60\xe2\x66\x3e\x7f\xdc\x05\xca\xb6\xcd\
\x82\x5f\x05\xef\xd7\xb0\x5d\x97\xc5\x52\x89\x3f\xf2\x79\x80\x09\
\xf9\x7f\xff\x9e\xff\x17\xc5\xd6\x3d\x9a\xb0\xf3\x6b\xe8\x00\x00\
\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x09\xa3\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\
\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
\x79\x71\xc9\x65\x3c\x00\x00\x09\x35\x49\x44\x41\x54\x78\xda\x62\
\xfc\xff\xff\x3f\xc3\x40\x02\x80\x00\x62\xa4\x44\x73\xe7\xb4\xa3\
\x86\xcc\xcc\x2c\xe7\x4e\x1d\xdd\x2c\xbd\x6a\x51\xcb\x6b\xa0\xd0\
\x6f\x52\xcd\x00\x08\x20\x26\x4a\x1c\xc0\xc4\xc4\xdc\xaf\xa2\x20\
\xc8\xa0\xa0\xac\x9b\x0d\xe4\xf2\x03\x31\x33\xa9\x66\x00\x04\x10\
\x93\xe5\x94\x27\x0f\x8c\x9a\x4e\x98\x03\xd9\x6c\xa4\x84\x48\xf7\
\x8c\xe3\x85\x3a\xea\xa2\xf6\x1e\x0e\x4a\x0c\x82\xc2\x92\x49\x40\
\x21\x41\x20\x66\x25\xd5\x01\x00\x01\x04\x0c\x81\xff\x8c\x6c\x82\
\x92\x6b\xc4\x6d\xe3\x14\xcb\x1a\x57\xaa\xb6\x4f\x3e\x68\x04\x0d\
\x19\x9c\x8e\xe9\x98\x72\x58\x91\x83\x9d\xb5\xde\xd1\x4a\x9e\x81\
\x9d\x8d\x99\xc1\x40\x5b\x5a\x22\x22\xa1\xce\x11\x28\xc5\x45\x6a\
\xb4\x02\x04\x10\xd3\x9f\xef\x9f\xa7\x0b\xf3\xb2\xcb\xc4\xa5\xd6\
\xdc\x10\x15\x97\x3b\xcd\xc2\xca\xbe\xaf\xb8\x76\xa9\x0f\x50\x8e\
\x1d\x97\x61\xcc\x2c\xac\xfd\x40\x9f\xf3\x83\x2c\xff\xf7\xef\x3f\
\x03\x28\x1a\x94\xd4\x8c\x02\x80\x52\xdc\x40\xcc\x02\x52\x23\x97\
\x7a\x24\x50\x36\xf9\xf0\x46\xe9\xf8\x3d\x53\x80\x5c\x0e\x5c\xd1\
\x0d\x10\x40\xcc\x7c\x4a\x26\xb7\x19\x84\x94\x4a\x7c\x8d\x04\x19\
\xbe\x3e\x7f\xc7\xce\xc8\xc8\xc8\xc1\xc9\xc5\x63\xff\xf1\xc3\xeb\
\x2d\xcf\x1e\xdf\xfa\x04\x54\xf3\x17\x59\x43\xd7\xf4\xe3\x81\xf2\
\x32\x02\xf5\xb6\x66\xb2\x0c\xa0\x0c\x04\x72\x80\x90\x00\x27\xc3\
\xfd\xa7\x3f\x55\xd9\xd9\x79\x8e\xc5\xa5\xb5\xc4\x78\x04\xe7\xac\
\x79\xfb\x8b\x39\x5e\x5a\x5a\x40\xfd\xc5\x9b\x9f\x66\x0c\x4c\x6c\
\x3b\x7f\x3d\x3f\xfb\x06\xa8\xfd\x0f\xba\x03\x00\x02\x88\xf9\xcd\
\xd9\x8d\x3f\xa4\x9c\xd3\xd4\x45\x45\xf8\x74\x04\xff\x7c\x63\xe0\
\x60\x65\x62\xe0\xe4\x64\xe7\x95\x94\xd1\xd2\x3e\xb0\x6b\xc9\x66\
\xa0\x9a\x9f\x40\xfc\x0f\xa4\xb8\x67\xe6\x49\x01\x0e\x76\x96\x03\
\xc1\x9e\xea\x1c\xec\xec\x2c\x0c\xa0\x2c\x0c\x72\xc0\xdf\xbf\xff\
\x80\xf8\x3f\x83\xbc\xb2\x76\x98\xbb\x83\x9a\x8d\xb4\x18\x0f\x07\
\xeb\xd7\xcf\x0c\xd6\x56\x8a\x0c\x57\xef\x7f\x62\xf8\xfc\x83\xe5\
\xff\xb7\xdb\x9b\x8e\x02\x8d\xf8\x01\x33\x0b\x06\x00\x02\x08\x14\
\x2c\x7f\xff\xfe\xfc\xb6\xf1\xe4\xfd\x6f\x0c\x52\x2a\x12\x0c\x3f\
\x7f\xfe\x61\xe0\xe7\x65\x67\xb0\xb3\xd2\x74\x28\xaa\x5d\x52\x0c\
\x94\xe7\x81\x05\xdf\xff\xff\xff\x1a\xac\x8c\xa5\xf9\xf9\x80\xf2\
\x30\xcb\x61\x0e\xd0\x50\x11\x66\xf8\xf2\xe5\x37\x83\x10\x3f\x07\
\x83\x92\x2c\x3f\x03\xd0\x1f\x0c\x2f\xaf\xde\x63\x70\x34\x97\x66\
\x60\xe4\x96\xf4\x06\x6a\xe7\xc3\x96\x48\x01\x02\x08\x9c\x6d\x9e\
\xef\x9d\x79\x4b\xc8\x21\x3b\x51\x59\x86\x8f\x8f\xf3\xfb\x17\x06\
\x36\x16\x26\x06\x61\x01\x0e\x06\x11\x51\x31\xeb\x7f\x4c\xfc\xc7\
\xaf\x5e\x3c\xf4\xb8\x6b\xfa\x31\x1b\x79\x19\xc1\xe9\x2e\xb6\x0a\
\x60\x8d\x30\xcb\x61\x18\x94\x1e\x9e\xbe\xfc\xc2\xc0\xc7\xcd\xc6\
\xc0\xc1\xce\xcc\xf0\xf3\xf7\x3f\x86\xe7\xcf\x3f\x31\xc8\xaa\x49\
\x32\x1c\xbd\xf0\x96\xe7\x3f\xb7\xe2\xa3\x9f\x8f\x0f\x5c\x81\x86\
\x28\xbc\xf4\x03\x08\x20\x58\xbe\xfd\x2f\x6e\x97\x22\xfe\x8f\x99\
\xdd\x5a\x89\xf7\x3f\xc3\xd7\x8f\xdf\x18\x7e\xfe\xfa\xcb\xe0\xe3\
\xac\xc2\xf0\xe1\x07\x9f\x03\x0b\x2b\xcf\x41\x79\x25\x9d\x25\xfe\
\xee\x6a\xfc\xdc\x5c\xac\x50\xdf\x33\x40\x7d\x0f\x71\xc0\x6f\xa0\
\x85\x3c\x40\xcb\xaf\xde\x7a\xc3\x20\x27\xc5\xc7\x20\x08\x0c\x89\
\xcb\x37\xdf\x30\x30\x03\x43\xe2\xe3\x7f\x36\x86\xc7\x2f\xff\x70\
\xfd\xb8\xb3\x76\x2b\xd0\xae\x6f\xc8\xe9\x0a\x20\x80\x60\x29\xf3\
\xdf\x8f\x37\x0f\xe6\x5f\x7c\xf0\x95\x81\x49\x48\x00\x1e\x3c\x8f\
\x9f\x7d\x62\x08\xf2\xd4\x96\xb4\x76\x0c\xdb\x69\x6d\x22\x2b\x27\
\x26\xcc\x85\xe4\xfb\x7f\x60\x1a\xe4\x18\x88\x83\xfe\x31\xc8\x48\
\xf0\x30\x3c\x7f\xfd\x15\xe8\xf8\x3f\x0c\x1c\xc0\x10\x11\x11\xe2\
\x64\xf8\xf6\xfa\x3d\x83\x83\x99\x14\x03\x30\xaf\xdb\xb0\x88\x1a\
\x49\x43\x73\x17\x1c\x00\x04\x10\x3c\x6b\x5c\xeb\xf3\xbd\xf3\xf7\
\xfb\x97\x1d\xd7\xdf\x81\xc2\x05\x12\x30\x77\x1e\xbc\x67\x00\x59\
\x6a\x63\x2a\xcb\xfb\xe3\xd7\x5f\xac\x41\x8f\x8c\xbf\x7f\xff\xcd\
\xa0\xaa\x28\xc4\xf0\xf0\xe9\x27\xb0\x83\x74\xd4\x44\x18\xfe\xfd\
\xf9\xcb\x20\xcc\xfa\x17\x1c\x22\xec\xaa\x51\x61\xd0\xb2\x02\x5e\
\x62\x02\x04\x10\x72\xde\xfc\xfb\xfb\xeb\x87\xc5\xc7\x6f\x7e\x62\
\x10\x94\x15\x61\x78\xf5\xe6\x2b\xc3\xa7\x2f\xbf\xc0\x51\xa1\x0d\
\x34\xe8\xea\xcd\xd7\xe0\x6c\x07\xf3\x31\x72\x22\x84\xe1\x1f\x3f\
\x7e\x33\xe8\x6b\x8a\x32\xdc\x7e\xf0\x01\x1c\x45\x52\xa2\xdc\xe0\
\xb4\xf1\xe9\xf1\x0b\x06\x67\x5b\x79\x60\x62\x54\x08\x47\x4f\x8c\
\x00\x01\x84\xec\x80\xff\x57\x3b\x6d\xd7\xbc\x7e\xff\xed\xc9\xd3\
\xbf\x40\xd7\x02\xb3\x19\x28\x47\x80\x2c\x06\xa5\x7a\x59\x60\xbc\
\xde\x79\xf0\x0e\xc5\x42\x64\xc7\xc0\x30\x13\x30\x7d\xb1\xb2\x32\
\x33\x7c\xf9\xfa\x0b\x58\x57\x30\x30\x28\x02\x73\xc4\xef\x2f\xdf\
\x18\x4c\x75\x45\x41\x32\x12\x6c\x5a\x79\x28\x25\x26\x40\x00\xa1\
\x97\x4e\x7f\xfe\x7c\xff\xb2\xec\xd4\xed\xcf\x0c\x4c\xdc\x90\xf8\
\xbe\xf3\xf0\x03\x98\x06\x87\x02\x30\x81\xe1\x8b\x02\x10\xfe\x0a\
\xb4\x18\xa4\xf6\xda\x9d\x77\xe0\x10\x53\x57\x14\x84\x04\xef\xdb\
\x77\x0c\x96\x66\x32\x0c\x4c\xfc\x5a\x28\x25\x26\x40\x00\xa1\x3b\
\xe0\xdf\xcf\xb7\x0f\xe7\x5f\xb8\xf3\x91\x81\x41\x80\x9f\x01\x16\
\xef\xaf\xde\x7e\x03\x17\xb7\x4f\x9e\x7f\x66\xf8\xf4\xf9\x27\x5e\
\x07\xfc\xfe\xfd\x97\x41\x51\x86\x0f\x9c\x25\x41\x7c\x2e\x0e\x16\
\x70\x08\x7e\x7f\xf1\x9a\xc1\xca\x5c\x8e\xe1\x3f\xab\x88\x27\x93\
\xa0\x21\x3c\x31\x02\x04\x10\x46\xf9\x7c\x6f\x4e\xd8\x9d\x3f\x3f\
\xbf\xed\xb8\xfe\x16\x18\xa7\xd0\xcc\x72\xee\xf2\x0b\x30\x0d\xac\
\xfd\x18\x6e\xdc\x7d\x8b\x35\xe8\x61\x51\x02\x09\xc6\x7f\x0c\x9c\
\x40\x8b\x5f\xbe\xf9\x06\x4e\x8c\xa0\x50\x00\x25\x46\x59\x60\xec\
\x0b\x09\x72\x32\x30\xca\x04\x45\x40\x43\x81\x19\x20\x80\xb0\x55\
\x10\x7f\xff\x02\x13\xe3\xb1\x2b\x6f\x19\x84\x64\x44\x18\x3e\x02\
\x7d\x0c\x4a\x88\x20\x6c\xa4\x23\x0e\xce\x19\xd8\x7c\x0e\x71\x08\
\x30\x5c\x81\x85\xd8\x8b\x37\xdf\xc0\x06\x89\x02\xb3\x21\x48\x0c\
\x14\x22\x20\xf0\xe3\xcd\x7b\x06\x17\x27\x15\x60\xd5\x24\x07\x4f\
\x8c\x00\x01\x84\xcd\x01\xff\xef\xce\x70\x5f\xf3\xea\xed\xd7\x27\
\xaf\xff\xb3\x83\x13\x22\x28\xd8\x41\x16\x83\x82\x92\x9f\x8f\x1d\
\x5c\x3e\x60\x73\x04\x08\xf0\xf2\x71\x32\x1c\x3f\xf7\x94\xc1\x5c\
\x5f\x1c\x51\x57\x00\x7d\xaf\xae\x24\xc4\xf0\xf3\xed\x7b\x06\x0b\
\x63\x29\x60\x65\xc0\x2a\xc1\x20\x9f\x0e\x4e\x8c\x00\x01\x84\xab\
\x45\xf4\xe7\xdf\x8f\x2f\xcb\xce\x00\x13\x23\x8f\x30\x1f\x38\x47\
\x80\x12\x20\x08\x68\xa9\x8a\x30\x3c\x7b\xf5\x05\x23\xf8\x41\x80\
\x87\x87\x9d\xe1\xdc\xd5\x57\x0c\x12\x22\x5c\xc0\xb8\x67\x85\xcb\
\x83\x00\x48\x0c\xdc\x06\xfc\xfc\x11\x58\x49\x01\x8b\x73\x5e\x0d\
\x70\x62\x04\x08\x20\x5c\x0e\xf8\xf7\xf3\xfd\x93\xf9\x47\x2f\x02\
\xf3\x3e\x1f\x2f\xb8\x4c\x00\x67\x49\xa0\x23\x14\xe5\x04\x19\x9e\
\xbd\xfc\xcc\xf0\xeb\xf7\x3f\x94\xe0\x67\x62\x62\x64\xf8\xf6\xf3\
\x1f\xc3\xc3\xc7\x1f\x18\x74\x54\x85\xe1\x51\x02\x03\x12\x22\x9c\
\xe0\x10\xfc\xf9\xea\x0d\x83\xb5\xad\x12\xb0\xfd\x25\xea\xc9\xc0\
\xa7\x2f\x0d\x10\x40\x38\xdb\x84\xcf\x56\xc5\xdd\xf9\xf7\xeb\xc7\
\xb1\xb3\x4f\x7e\x33\xb0\x09\xf2\x01\x0b\xa5\x9f\x0c\x27\xcf\x3f\
\x05\x17\xb3\x8a\xb2\x02\x0c\x4f\x5e\x7c\x42\x09\x7a\x11\x11\x1e\
\x86\xe3\x67\x1f\x33\x98\xe9\x89\xa3\x84\x0e\x2c\x64\x5e\x7f\xf8\
\x09\xf6\x04\x37\xb0\x08\x52\x14\x63\x03\xaa\x07\xa6\x41\xc9\x80\
\x08\x80\x00\xc2\xd7\x88\xfc\xcf\xa9\xe0\x70\xe3\xf6\x33\xc6\x50\
\x23\x53\x39\x76\xae\x3f\xdf\x19\xfe\x02\x2d\x7f\x0d\xcc\x92\xa6\
\xfa\xd2\x0c\xe7\xae\x3c\x63\x90\x11\xe7\x03\x5b\xc2\xc5\xc5\xc6\
\x70\xf7\xd1\x07\x86\xff\x40\xc7\xc8\x4a\xf2\x81\x7d\x0e\x6c\xd8\
\x30\x70\x70\xb2\x32\xdc\x7f\xf2\x99\xe1\xc8\xd9\x67\xc0\xdc\xf3\
\x8e\x81\x05\x58\x33\x7d\x03\x16\xd7\xa0\x12\x8a\x55\x58\x90\xe1\
\xca\xd5\x0f\x22\x00\x01\x84\xb7\x15\xfb\xe5\xfa\x86\x17\xec\x72\
\xb6\xcf\x2f\x3f\xf8\xef\x6f\x65\x21\xcf\xc0\xf4\xe5\x33\xd4\x67\
\xff\x18\x7e\xff\xf9\xc3\xc0\x09\x4c\x1b\xa0\xec\xc6\xc2\xc6\xc2\
\x70\xfa\xc2\x53\x06\x43\x2d\x71\x70\x2e\x60\x02\xd6\x25\x17\x81\
\x35\xe1\xd1\x33\x4f\x81\x59\xf1\x2b\xc4\x52\x70\xf6\x02\x56\xdb\
\x62\x22\x0c\x7f\xf9\x85\x18\x2e\x5e\x7e\xc9\x70\xef\xfe\x47\x21\
\x80\x00\x62\x24\xa2\xdf\xc0\x21\x1a\xbc\x6e\x8a\x9c\xbc\x4c\x52\
\xa1\x1f\xb0\x71\xf1\xee\x2d\xb8\xae\x12\x03\x06\x21\x28\x6f\x9b\
\x1a\xc8\x02\x53\xfd\x63\x06\x25\x60\xda\x60\x02\xfa\xec\xfa\x9d\
\xb7\x0c\xb7\xee\xbf\x67\x60\x03\x16\xc7\x3f\xa1\x05\x19\x23\x0b\
\x33\x03\xa7\x94\x04\xc3\x8b\xef\xcc\x0c\x7b\x0f\xde\x67\x38\x7a\
\xf8\x1e\x03\xc3\xaf\x37\x27\x18\x3e\x9c\x5e\x0b\x10\x40\x8c\x44\
\xf6\x1d\xb8\x45\x82\x36\xed\xb1\x36\x53\x32\x0b\x37\xe4\x60\xf8\
\xfb\xe5\x0b\xd0\x37\x7f\x19\x58\x59\x18\x19\x74\x35\x24\x81\x59\
\xf4\x2d\xd8\xf2\x97\xaf\xbf\x01\x7d\xcf\xc4\xf0\xf5\xdb\x1f\x86\
\xbf\xc0\xe8\x60\x62\x67\x67\xe0\x92\x93\x66\x38\x75\xf5\x3d\xc3\
\xee\xbd\xb7\x19\x1e\x3d\x00\x06\xc7\x8f\x27\x7b\x18\x5e\x6e\x5d\
\xcd\xf0\xee\xd8\x03\xa0\xb9\x9f\x00\x02\x88\xd8\x26\x34\x13\xa7\
\x66\x94\x3c\xa7\x7a\xcc\xc5\xc4\x50\x6d\x5e\x63\x9e\x4f\x0c\x4c\
\xc0\x68\x00\x45\x05\x30\xaa\xc1\x09\x91\x91\x09\x14\xbf\x7f\x19\
\xfe\x00\x83\xf9\x3f\x17\x0f\xc3\x07\x26\x6e\x86\xfd\xa7\x5e\x32\
\x1c\x3e\x74\x8f\xe1\xdb\xe7\x0f\xf7\x18\x3e\x5f\xdb\xc0\x70\x6f\
\xc2\x16\xa0\x59\x5f\x41\x16\x03\xf1\x47\x10\x1b\x20\x80\x48\x69\
\xc3\xb3\x70\x5b\x36\xdb\xf3\xc9\x98\xef\x29\x4e\xd0\x62\x90\xf8\
\xf1\x0a\x1c\xff\xff\xfe\xfd\x05\x57\xbd\x20\x8b\xff\xf1\x09\x31\
\xdc\x78\xcb\xcc\xb0\x73\xdf\x3d\x86\x33\xa7\x1f\x03\x1b\x5f\x2f\
\xf6\x30\xbc\x39\xb0\x96\xe1\xe5\x96\xab\xa0\x24\x05\xb5\xf4\x13\
\xb4\x55\xf4\x0b\x94\x2c\x00\x02\x88\xd4\xbe\x21\x3b\x8f\xc3\xdc\
\x4a\x11\x29\xf9\xfa\x86\x02\x53\x06\x2e\x36\x26\x70\xe3\xee\xdb\
\xa7\xaf\x0c\x07\xcf\xbf\x63\xd8\xbe\xeb\x2e\xc3\xeb\x17\x6f\x5e\
\xfd\xff\xfa\x68\xf7\xff\x47\x0b\x56\x33\x7c\xbb\xff\x0a\xc9\xb7\
\x20\x07\x7c\x87\xf6\x1f\xe1\x2d\x63\x80\x00\x22\xd5\x01\x20\xf5\
\x5c\x5c\xf6\x8b\x16\xfd\x67\xe6\x0d\xfa\x0f\x6a\x96\x01\x5b\xc4\
\xa0\xec\xf7\xff\xc7\xfb\xcb\x7f\xdf\x9d\x5b\xff\xff\xfe\xcc\x7d\
\xe8\xc1\x0c\x6d\x88\xfe\x41\x6e\x8c\xc2\x00\x40\x00\x91\xd3\x3b\
\x06\x25\x4a\x5e\x20\x16\x07\x62\x01\x58\xbd\x0e\x6d\x68\x7e\x87\
\x5a\xfc\x09\xca\xfe\x85\xde\xb1\x41\x07\x00\x01\x06\x00\x4d\x55\
\x78\x5f\x2c\x92\xe0\x60\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
\x60\x82\
\x00\x00\x0b\xaa\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x58\x00\x00\x00\x1f\x08\x06\x00\x00\x00\x63\xc8\x0a\xe0\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
\x00\x00\x09\x70\x48\x59\x73\x00\x00\x01\x8b\x00\x00\x01\x8b\x01\
\xe1\xd0\xd2\xbc\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd8\x02\x13\
\x14\x20\x36\x4b\xc4\x25\x64\x00\x00\x0b\x2a\x49\x44\x41\x54\x68\
\xde\xed\xda\x7b\xb0\xd5\xd5\x75\x07\xf0\xcf\xfe\x9d\x03\xa2\x08\
\x17\xb5\x10\x1e\x5a\x45\xd1\x80\xa6\xc5\x37\x1a\xeb\x63\xe4\xc0\
\x45\xf0\x31\x26\x8d\x98\xe9\x10\x9b\xa6\xe3\x74\x92\x34\x8e\xe6\
\xa1\x4d\x43\x4d\x27\x35\x49\x9b\x4c\x71\x6c\xc6\x4e\x1e\xad\x4d\
\x9a\x6a\x48\x8d\xaf\x40\x78\x9d\xab\x8d\x86\x01\x9f\xa9\x19\xe5\
\xa9\xa2\x88\x6f\x44\x11\x23\xdc\xc7\x39\xbb\x7f\xec\x7d\xe5\x70\
\xb8\xe7\x72\x41\x9d\xd1\x99\xae\x99\x33\x70\xcf\xf9\xfd\xf6\x6f\
\xef\xef\xfe\xae\xb5\xbe\x6b\xed\x5f\xf0\xff\xb6\x4f\xb6\x90\xe1\
\x83\x39\x27\x70\x26\x3e\x12\x38\x26\x32\x2a\x20\xf2\x4a\xe4\x9f\
\xf1\xb3\x72\x7f\x83\x54\x39\x1d\x9f\x09\x9c\x84\xce\xf7\xd1\xfa\
\x02\x5e\xc1\x50\x1c\x90\xd6\xf4\x9e\x5b\x8c\x84\xc0\x81\x18\x8d\
\xb6\xc8\xf3\x81\x15\x91\x5b\x6a\x74\x4c\xe7\x39\xe8\x60\x52\xe0\
\x26\x1c\x19\xfa\x1b\x71\x19\x57\x04\xbe\x1c\x18\xf7\x3e\x24\xd1\
\x7f\x63\x32\x8e\x79\x8f\x9f\xf3\x5a\xe4\xf5\xc0\xf0\xc8\x01\x81\
\x55\xb8\xaf\x8b\xef\x9d\xc7\x93\xad\x6e\x5a\xca\xe8\x82\x6f\x97\
\xf7\x40\x93\x63\xbd\x3f\xc1\x85\xbb\x71\xd0\x7b\x01\x70\x64\x2b\
\x1e\x46\x0f\x26\x61\x74\xe4\xd7\x75\xae\x9d\xce\x03\x03\x19\x63\
\x3a\x2f\x76\xd0\xd3\x12\xe0\x05\x1c\x14\x38\x6c\xd7\xe7\xaa\x45\
\x6a\xfd\x8c\x5b\x04\x06\x35\xdc\x50\x97\xae\xaf\x0f\xc0\xe5\xcb\
\x81\x22\xff\x5d\x8f\x69\x71\xf5\xfc\x7d\xf3\x3c\xd7\x62\x1d\xde\
\x7a\x97\x81\xdd\x12\xb8\x33\x30\x0c\x15\x8c\x88\x3c\x5e\x67\xee\
\x74\x7e\xbc\x37\x63\x75\xa4\xb0\xba\xbd\x25\xc0\xfb\x71\x22\xc6\
\xe6\x07\xff\x14\x73\x17\xb0\xf1\xfa\x7e\xc0\x5a\x40\x51\xe2\xe8\
\x41\xfc\x38\x30\x05\xf3\xeb\x5c\x37\x9d\xc7\xf7\x34\xa1\x05\x8c\
\xd8\x8f\x0b\x0a\x7e\x82\x85\x81\xcf\x4f\x65\x63\x07\x5f\xc5\x75\
\x4d\x97\xdf\xdb\xc3\x73\xe5\x3d\x6f\xdc\x40\x81\x7d\x12\xbf\x42\
\x09\x73\x24\x80\xbb\x23\xff\x54\xe3\x7b\xed\x3c\xbb\x0f\xc3\x7e\
\x3e\xb2\xa6\xdc\x0f\xa5\x4e\xc2\x78\x2c\x08\x7c\xa3\x93\x4d\xb3\
\x68\x3f\x9f\x2b\x32\xe3\x7a\x13\x4b\x91\x5d\x69\x79\x25\x01\xb1\
\xb6\x9a\xdc\x68\x4a\x60\x5d\x0f\x4f\x74\x70\x30\x2e\x89\x7c\x02\
\xdd\x0d\x8f\x19\x24\x2d\x6e\x7e\x85\x8e\x05\x2c\xd9\x9f\x6d\x58\
\x19\xd8\x7a\x3b\x43\x23\x47\x34\x27\x8a\x3a\xf7\x3e\xc3\xd3\x47\
\xed\x3a\xd6\xbe\xd8\x86\xc8\x6d\xe8\x09\x5c\x96\x93\x97\xec\xa5\
\x7f\x86\x3b\xdb\xe9\x82\x5b\x19\xda\x96\x30\x99\x10\xd8\x8e\xc5\
\x15\x5e\x6b\x21\x0e\xe6\xe0\xa8\xc8\xfc\x3d\x01\x3c\x3c\xb2\xbe\
\xc2\xba\x65\x49\x82\x9c\x1f\x68\xef\xe3\xf2\x97\x23\x0f\x35\xfc\
\x7d\x72\x46\x7f\xcd\x4c\x3a\xab\x29\x96\x7f\x3c\x70\x6e\x8b\xec\
\xfc\x56\xf6\x9a\x89\x18\x56\xe3\x81\xe9\x6c\xad\x72\x6a\xe0\x70\
\xbb\x03\xfc\xe8\xe5\x69\xdc\x67\x43\x02\xa3\xb4\x97\x8c\x85\xeb\
\xb1\x01\x1f\x0b\x9c\xdd\xf0\x5b\x0d\x97\x45\x16\x6c\xa6\xab\x83\
\x99\xf8\x2b\xe9\x9a\xe1\xbd\xf7\xf7\x70\x1a\xee\x6f\x02\xb6\x8c\
\xd3\x03\xd7\xd6\xf9\xdc\x34\x96\x14\x2d\x32\xe0\x60\x69\xb1\x02\
\x4f\xe5\x7f\xdb\x02\xa7\xb6\x98\xf3\xcb\x78\x04\xee\xe2\x0f\x02\
\x13\x03\xcf\x04\x5e\xcc\xf7\x8e\x0a\x9c\xd0\x62\xb1\x4f\x6f\xe7\
\xf1\xa5\xc9\x2d\x4f\x91\x18\xfc\x58\xfe\xf9\x23\xd9\x8b\x9a\x37\
\xbf\x37\xf6\xae\xc3\xc6\xbd\xc0\xb6\x1e\x59\x5f\x63\x2a\x62\xe0\
\xab\x8d\xe0\xe2\xcd\xc8\x95\x5b\xb9\x03\x17\x8d\xe4\xc1\x24\x79\
\x5d\xd0\x0b\x6e\xb6\x45\x65\x5e\x6a\x02\x77\x7f\x5c\x94\xc3\xe2\
\x17\xea\xfc\x0f\xbb\x27\x8f\x5e\x9f\x9f\x22\xb9\xf5\x9a\xc8\xd3\
\x99\x35\xc3\x4b\x9c\xdc\x62\xe2\xaf\x46\x56\xdd\xc2\x01\x43\x93\
\xf0\xde\x1f\xf7\xc8\x00\xe3\x50\x1c\xd2\xe2\xde\x67\x2e\xe0\x8d\
\x0e\xfe\x30\xa6\xb8\xff\x40\x89\x1d\xf9\xb7\x49\x38\xa2\x0f\x80\
\x3b\x9b\x00\x1e\x3f\x00\x70\xb7\x45\x6e\xaf\x71\x43\x89\x1b\x42\
\xda\xcc\x41\x8d\x6b\xa8\xf3\x5f\xd8\xd1\xc6\x23\x81\x09\x76\x26\
\xdd\x46\x6f\x7b\x21\xf2\x95\xcd\x3c\xd3\xfb\xe5\x12\xc6\x44\x2e\
\x2f\x98\xd3\xc3\xc5\x91\x87\x66\x64\x31\x50\x6e\x11\x1e\x4e\xcf\
\x12\x68\xa5\x9d\x0c\xfe\x70\x3f\x93\x3f\xbb\x60\xed\xa8\x5d\x99\
\xf9\x60\x8d\x17\xaa\x69\xa3\x3e\xdc\x82\xbd\xcf\xcb\x1b\x18\x13\
\x43\x8e\x97\x62\x62\x57\x7e\xe6\x51\x4d\x20\x40\x2c\x32\xc0\x5d\
\xac\x1d\xcc\xc6\x30\x80\x58\x8b\x7f\xc3\xea\x32\x55\x8c\xe8\xe3\
\x9a\xa1\x81\x99\x81\x2f\xf4\xc3\xfe\xff\x95\xf2\xc8\xd3\x9f\xcc\
\x91\xa6\x9a\x88\x73\x45\xfe\x7c\x07\x8f\xcd\x68\x50\x5a\x45\x8b\
\xc1\x4e\xcb\x55\xd2\x63\x52\x92\x1a\x5d\xb4\x70\xf1\x7e\xec\xb7\
\xed\x6c\x8d\x29\xd8\x4f\x6a\xb1\x91\x6b\x42\x06\xb8\xc6\x28\x4c\
\xa8\xb1\x62\x07\xdb\x97\xf2\x47\xd2\x77\xcd\xf6\x76\x45\x39\x33\
\x6d\xd0\x9e\x32\xfc\xfd\x91\xbf\xcf\x9b\xf9\x8b\x16\xe0\xc2\x90\
\xcc\xda\xbe\xac\x2b\x72\x47\x8d\x73\x2b\x3c\x35\xad\x41\xbd\x54\
\x78\xb5\x87\x6b\x23\xb3\x70\x6c\x99\x7f\xe9\x48\xe1\xae\x6f\x80\
\xbf\x9f\x18\x73\x72\x5e\xf4\xda\x4a\x1a\x7c\x4c\x4c\xec\x1a\x68\
\x12\xd9\x2c\x97\x8d\x05\xe3\x43\x0b\x80\x23\xab\x7b\x78\xb2\x83\
\x21\x65\x26\x07\xba\xea\xac\x9c\x95\xe2\xe3\x49\x7d\x01\x1c\xe9\
\x8c\xbb\x96\xc6\x1b\x73\xdc\xee\xcb\x6e\xaf\xf3\xb7\x91\x11\x81\
\x7f\x0f\xf6\xc9\xb6\x46\xe6\xf5\xf0\x89\xf6\x54\x80\xec\x66\x33\
\xe8\x5c\x9d\x0a\x9f\xbf\xc3\x59\x29\x5f\x27\x2b\x37\x89\xe3\x92\
\xc4\xd4\x36\x3c\x53\x6a\x48\x52\x76\x65\xf0\x8d\x35\xfe\xb3\xce\
\xe6\x5c\x04\xd4\x03\x83\x0b\x4e\xc9\x0b\x79\x30\xee\x5c\xf4\xa6\
\xc8\xcf\x23\xa5\xb0\x2b\x30\x43\x6a\xdc\xd6\xce\xf3\xd5\xb4\x01\
\x27\x05\x56\xcd\x60\x4b\xde\x98\x13\x5b\x30\x78\x47\x53\xef\x61\
\xbd\xe4\xba\x67\x36\x6d\xc4\x0d\x91\xef\x07\x2e\x0d\xcc\xdd\x47\
\x19\xb7\x36\xf2\x8d\x4a\x8a\xcd\xfd\xda\x44\x06\xc7\x24\xf3\xb6\
\x35\x16\x56\xe5\x26\xf9\x33\x18\x67\x14\xec\x1f\xa9\xc6\x9c\x29\
\x23\xe3\xc2\xae\x49\x6a\x42\xc1\x9c\x82\x52\x64\xd1\x34\xee\xec\
\x48\xae\x37\x2b\x8f\xf3\x40\x2f\xab\x3a\xd9\x50\x4a\x85\x4a\xbd\
\x8f\x84\x31\x64\x29\x7f\x9a\xc5\xfd\x34\xdc\xd8\xf0\xfb\xe4\xbc\
\xd1\xbb\xdc\x13\x9a\xb4\x6f\x64\x75\x48\xd9\xbe\x11\xe0\x1f\x45\
\xbe\x5e\xf0\x45\x5c\xb5\x0f\xc0\x76\x47\xbe\x1b\xb9\x71\x1a\x9b\
\x96\x31\x2c\x72\x34\xda\x0a\x5e\x0a\xac\x9d\xda\x54\xd1\x96\x18\
\x99\xc8\xec\x8e\xc6\x30\x56\x6e\x8a\x89\x83\xf0\xd1\x9c\x58\x1e\
\xae\x27\x76\x1d\x1c\xb2\x64\x6b\x2c\xb5\x03\xd3\xf3\xff\x9f\x68\
\x48\x52\x53\xb2\x1b\xae\x9c\xc6\x96\x25\x4c\x2e\x71\x5d\xc8\xc0\
\xef\xc1\x9e\xad\x67\x5d\xb9\x28\x29\x87\x91\x2d\x4a\xea\x11\xf9\
\x5f\xd2\xae\xbc\xb0\x94\x87\x8b\xf4\x65\x0d\xcb\x5f\xe3\xaa\x36\
\x3e\x8e\x4b\xb3\xa2\x19\xb0\x8c\xc3\xaa\x1a\x97\x05\xde\x0a\xcc\
\xaa\x26\xe9\x75\x7a\x91\x63\x77\xa4\xde\x99\x62\xf5\x86\xa6\x8d\
\x9e\x1c\xb8\xa4\x8b\x73\xba\x1a\x4a\xf8\x66\x15\x31\x08\x67\xe4\
\x95\x3c\xd2\xce\xd6\x65\x49\xce\x4c\x0a\x7d\xc7\xd0\xf5\xbd\x32\
\x2e\xd7\xef\xa7\x61\x7b\x37\xbf\xcb\x83\x1f\xd7\x97\xcc\x6a\x25\
\xa3\x6a\x19\xe0\x41\x49\x26\x0e\x6b\x71\xdd\x81\xdd\xa9\x45\xd9\
\x28\x2b\x37\xe0\x81\xc8\xf0\x4e\x66\x1f\xc8\x61\x81\x2f\x49\x2a\
\x64\xa0\xd6\x15\x59\x83\x15\x25\x6e\xc6\x91\x7d\x28\x98\x6d\xf8\
\xf2\x60\x5e\x68\x0a\xad\x67\xe1\xf2\xc8\x37\xcf\xcb\x78\xec\x06\
\xf0\x8f\x08\x75\xc6\x97\x52\x42\xdb\x82\x4d\x19\xb8\xf1\x52\x25\
\xd6\x97\x3d\xde\x2b\xe3\xea\x8c\x29\xd2\xbd\xbf\x19\x9c\x77\x30\
\x72\x6c\x18\x20\xc0\x91\x97\x67\xec\x2c\x1a\xa6\x48\x7d\xd7\x3e\
\x6d\x10\x13\xab\xbc\x50\xc9\xe1\xa2\xce\xb8\x22\xb1\xf7\xd2\x59\
\xbc\x58\xe5\xfa\x90\x00\xda\x1b\x1b\x1c\xf8\x63\xe9\xd3\x97\x6d\
\xc4\x17\x2b\xdc\xda\x54\x60\x9c\x28\x95\xd9\xdb\x2a\xfc\xa0\x8f\
\x9a\x22\xd9\xe1\x0c\x2f\x52\x78\x10\xb8\x3f\xe4\x18\x9a\x7b\x01\
\xad\x26\xbb\xba\x3b\xa9\x80\x61\x39\x29\xc1\x8a\x90\x75\xac\x14\
\xb7\x86\x0e\x60\x71\xaf\x07\x7e\xdb\x10\x07\x4e\xed\x87\xc1\x70\
\x7c\x6e\x7c\x5b\xc6\x89\x81\x93\x22\x0b\x2b\x3c\xba\x34\x35\xa8\
\xce\xdd\xcb\xd0\xb0\xa7\xcd\xbf\x17\x9f\x9a\xda\x04\xee\x92\x94\
\xf8\xaf\x89\x84\x5b\x13\xc8\x5a\x02\xdc\xe0\xe2\xea\xdc\x5f\x67\
\xeb\xfc\xb4\xab\xfd\x31\x70\xcd\xcc\x24\x63\xc6\x4a\xb2\x6a\x47\
\x64\x65\x8d\xce\xc5\x1c\x1d\x72\xf3\x64\x00\xf6\x72\x16\xf1\x16\
\xec\xec\xf1\xf6\xd7\x5f\x38\x3e\x9f\x64\x28\xb8\xb0\xe0\xc8\x67\
\xf9\xc7\x2a\xfb\x05\x66\x87\xa6\x10\xf2\x0e\xec\xa1\xc8\x27\x51\
\x99\xca\xaf\x9b\x99\x5b\x66\x5e\x60\x53\x8d\xcf\xfe\x6b\x8b\xce\
\xde\x2e\x00\xe7\x0a\x4e\xa0\x28\x28\xcd\xa6\xeb\x25\xbe\xb4\x8d\
\x83\xdf\xe0\xa0\xc6\xcf\x0e\x46\xd4\x53\xac\x12\x53\xcf\xa0\x1d\
\xdb\x6b\xac\x98\x4e\xad\x9c\x18\x3d\x72\xa0\x00\xf7\x32\xf8\x21\
\xb6\xbe\xc1\xd1\x8d\xcf\xda\xc2\xf0\x1d\x1c\x16\xb9\x32\x5f\x7f\
\x02\xca\xcb\x98\x16\x93\xd2\xb8\xe3\x2f\x52\x47\xaf\x14\x9a\x92\
\xe0\x3e\xda\xfa\x3a\x73\xba\x99\x5a\xe1\x67\x95\x26\xe5\xd2\xc1\
\x25\xf8\x49\xe4\xae\x4e\xe6\xb6\xef\x2c\xed\x77\xb3\xb7\x63\x70\
\x8d\x51\xa5\xcc\xd6\x90\xc4\xf9\x85\xd5\x54\xeb\xff\xbe\x45\xc5\
\x57\x47\x5b\x35\x25\xc0\x09\x39\x21\xbc\x59\xe6\x5b\x55\x6a\x21\
\xc9\xac\xc3\x07\xb8\xa0\x23\x22\x57\x57\xd3\x42\x5a\xe4\x53\xe5\
\xc0\x98\x5e\xd9\x59\x4f\x6c\x6d\xc7\x96\xa9\xdc\x92\xe7\x5d\xcf\
\x67\x75\xfb\xd2\x27\xae\xe7\xf6\xe5\xbc\x6e\xfe\xe3\xbc\xb4\x6e\
\x4d\x21\x61\x78\x89\xaf\xe5\xaa\xed\x8a\x21\x74\x54\xf6\x70\x1e\
\x58\xce\x74\x1f\x11\x76\xc6\xd0\x47\x23\xcb\xf1\x26\xfe\x44\x8a\
\x71\x43\x06\x30\xc1\x1e\x6c\x0a\x69\x81\xa7\xe4\x46\x4d\xa3\xab\
\xbe\x96\x36\xdf\xd8\xc8\xc8\xdc\x86\x1c\xdc\xdb\x0c\x0a\xa9\xff\
\xba\x37\x76\x8e\xd4\xb9\x7b\xaa\x01\xa1\xae\xc0\xd2\x90\xb4\xef\
\x81\x03\x1c\xe7\xa9\xc8\x2f\x23\xbf\xb8\x9f\xe5\x5f\x6b\xb1\x39\
\xcb\x92\x54\xfb\x2e\x9e\xdb\xce\xb4\xf3\x53\xe9\xbd\x47\x2b\x37\
\x54\x6a\x27\x4b\x65\xe8\x0f\xa5\x50\x71\x5c\x60\x63\x64\x75\x4c\
\xcc\x6e\x0b\xa9\x37\x31\x3b\xf2\x2a\x3a\x32\x4b\x27\x67\xd6\xad\
\xcf\x2e\x7c\x4d\x48\xee\x73\x98\xd4\x71\xda\x9a\x93\xe4\x83\x35\
\xbe\x19\x52\x9c\x1f\x9d\x8f\x64\x8a\x90\xe2\xf7\xb0\xc8\xba\x9c\
\x1c\xd7\x44\xfe\x32\xb0\x3c\x1f\xe1\x1c\x91\x9b\xf4\xaf\x47\x2e\
\x0e\x99\xe1\x05\x7f\x1d\x79\xb4\x9e\x0e\x21\x7b\x35\x71\x1d\xeb\
\x16\x73\x4e\x99\xab\x73\xaf\x77\x74\x43\xcf\xf9\x95\x86\xcf\xc3\
\xb8\x2b\xf0\xbb\xca\xce\xa4\xbc\x9b\x2d\x4e\xfd\x85\x2b\x03\x67\
\x46\xbe\x53\x49\x4d\xa3\x01\x5b\x39\xfb\xdf\x87\xa4\x32\xb7\x4b\
\xd2\xb0\xcf\xe3\xac\x1a\xf7\x85\xc4\xe0\x58\x67\x5e\x91\xc0\xec\
\xa9\x71\x53\x48\x2c\x5c\x55\xa4\x7b\x4e\xc5\xc8\x98\x7a\xab\x73\
\x73\xc3\x7a\x7e\x48\xae\xbf\x06\x8b\x02\x67\x15\xfc\x79\xee\x1b\
\xcf\x42\xb5\x87\x9b\x0b\x46\x16\x7c\x0a\xe3\x6a\xfc\x34\xf2\x6a\
\x89\xe3\xea\xa9\xe4\x3e\x2f\x72\x77\x9d\x9f\x87\x34\xbf\xe1\x79\
\x63\x48\xef\x22\xdc\xa3\x8f\x93\xdd\x2c\xf7\x3e\xb7\x8c\xab\xb6\
\x33\xa4\x87\x9e\x8b\xfb\x70\xf9\xfe\xac\xca\xd8\xc0\xdf\xc4\x54\
\x21\x2e\xdc\xc1\x47\x67\xe5\x32\x7e\xaf\x01\xc6\xe8\x90\x24\xd5\
\x8b\x91\x51\x05\x37\x45\x36\x17\xa9\x69\x71\x08\x7a\x8a\xf4\x62\
\xc5\xb0\xc0\x21\x25\x46\xc5\xa4\x30\x4e\xcc\xa1\xe0\xa5\x98\xd8\
\xf0\xfb\x90\x04\xf7\x93\xb9\x3f\x30\x3a\xa4\x6b\x9f\xc8\xac\xb9\
\x50\x92\x3c\xc7\xd5\xb8\xa6\xc4\x98\x1c\xbf\x9f\x8c\xc9\x0d\x86\
\xd4\xd3\xbb\x06\x6f\xa6\x83\x59\x63\xb0\xa3\x48\xed\xce\x0f\xd9\
\x19\xc6\xde\x9e\x7f\xe8\x47\x6d\x4c\x4b\x25\xeb\x80\xdf\xe7\x98\
\x9b\xdc\x78\xd8\xd0\xc4\xd8\x39\x91\xbb\x22\x17\x4f\x6b\xaa\xda\
\xf6\x0a\xe0\x5f\x25\xf7\x3d\x2a\x33\xb9\xc8\x15\xd0\x01\x39\x69\
\x4d\xcd\x8b\x7c\x2d\x2f\x66\x42\xe0\x84\x98\x7a\xa7\x3d\x21\x85\
\x95\x61\xf9\x73\x11\x16\xc4\x74\xdf\xd5\x21\x31\xe6\x1e\x4c\x2c\
\x12\xb0\xcf\xe2\xd8\xc8\x67\x50\x2e\xf1\xad\xfc\x8c\xb1\xb9\x17\
\xbb\x39\x52\x94\xd3\xb5\xc7\xe4\x92\x78\x4c\x48\x21\x6a\x4c\x48\
\xed\xcb\x83\x9b\xe6\x3f\x26\x26\x02\x3c\xfd\x4e\xf5\x58\x47\xf2\
\x8e\xd9\xd2\x21\xeb\x92\xc8\x79\x95\xdc\x06\x78\x27\x16\x96\xf1\
\xe9\xc0\x99\x81\x4f\xfb\x00\x5a\x64\x6e\x85\x7f\xd8\xd7\xfb\x17\
\x71\xf8\xa0\xd4\x71\xfb\x18\x36\x77\xf3\x95\x1a\x6b\x66\xf5\xff\
\x7a\xc2\xc0\x19\x9c\xc1\x3d\xda\x07\xd4\x02\x5f\xaf\x72\xe8\x3c\
\x3e\xbb\x70\x80\xf2\x6c\x71\x92\xa4\xd3\x43\xf2\xa6\x71\xb8\x3b\
\x72\x45\x25\x9d\xe0\xbc\xbb\xf3\xeb\x48\xf1\x72\xd8\x5e\x14\x05\
\xef\x57\x7b\x31\x15\x82\x6e\x43\x75\x6a\x2e\x0e\x7e\xc9\xd0\x03\
\x38\x3c\x32\x39\x72\x76\x48\x8d\x99\x21\x81\x15\x75\x6e\xee\xe6\
\xbe\x99\xbc\xf1\x9e\x11\xa0\x4a\x5b\x77\xea\x62\x87\x0f\x22\xaa\
\x5d\x74\xb7\x71\x68\x39\x25\xc5\x33\x72\x5e\x18\x19\x77\xb6\x37\
\xb7\x49\xc7\xfb\xab\x22\xbf\xe9\x4a\xaf\x40\x6d\x38\xff\x5d\x7a\
\x69\x65\x4f\xf6\x7f\xd5\x1a\x93\x9b\x75\x2f\x21\x7f\x00\x00\x00\
\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x06\x61\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
\x00\x00\x06\x28\x49\x44\x41\x54\x58\x85\xb5\x97\xdf\x6f\x54\xc7\
\x15\xc7\x3f\x33\x3b\x7b\xf7\xfa\x7a\x0d\x66\x6d\x63\xaf\x1d\x9c\
\x18\xc5\x98\x46\x2a\x24\xa1\x84\x52\x70\xdd\x14\x12\x64\x90\x50\
\x79\x68\x24\x4b\x95\x12\x50\xd5\x2a\x52\xa3\x52\x45\x95\xda\x3f\
\xa2\x95\x2a\xa5\x12\xa2\xea\x0b\x8d\x44\x95\x97\x24\x0a\x20\xd2\
\x2a\x0a\x7d\x68\x70\x78\x70\x6d\x6a\xb5\xc1\x05\x6c\x60\x0d\x36\
\xd8\xde\x65\xd7\xbb\x7b\xf7\xde\x3b\x33\x7d\x70\xfc\x0b\x0c\xfe\
\x51\xf7\x48\x57\xba\xbb\x67\x66\x3e\xdf\x39\x67\x7e\x9c\x2b\x58\
\xc6\x4e\x9f\xfe\xb8\x29\x9d\x4e\xf5\x7b\x9e\xeb\x2e\xd7\x76\xa1\
\xdd\xbe\x3d\x3a\x70\xfc\xf8\x0f\xbe\x07\xd8\xa7\xb5\x53\xcb\x0d\
\x14\x45\xe1\xd6\x9d\x3b\xdb\x1b\xb7\x6c\x69\x7c\x6a\x3b\x6b\xc1\
\x62\xb1\x16\xa4\x10\x7c\xfe\xb9\xdd\x05\xd4\x02\xd9\xff\x49\xc0\
\x4a\x4c\x1b\x8b\x31\x16\x6d\x2d\xda\x58\x1c\x15\x5b\x71\x5f\xb9\
\x5c\x83\x28\x0a\xb1\xf6\xc9\x51\x7c\x14\x6e\x0c\x58\x6b\xd1\x5a\
\xaf\x8f\x80\x20\x08\x30\xc6\xac\x10\x6e\xd1\xc6\x60\xe1\xff\x2f\
\x60\x69\xf8\xcc\x6f\xac\x45\xeb\x68\xbd\x04\x54\x1e\x13\xf0\x34\
\xf8\xec\x7b\x14\xad\x93\x80\x30\x0c\xb0\x76\x5e\xc0\x72\xf0\x20\
\xd4\xab\x8a\xc0\xb2\xbb\x60\x36\x02\xf6\x11\xf8\x2c\xd8\x3c\x02\
\x37\x5a\x63\xed\x3a\x45\xa0\xbb\xbb\x3b\x9e\xc9\x0c\x75\x1b\x63\
\x31\x76\x65\x70\xad\xcd\xac\x00\xb5\x77\xef\xde\xef\xac\x29\x02\
\x87\x0f\x1f\x7e\x0e\xd8\xa9\xb5\x7e\xf3\xe5\x97\x77\x1c\x33\xc6\
\x60\x0d\x2b\x82\x9b\x68\x26\x02\x52\x8a\x44\x67\x67\xe7\x27\x89\
\x44\xe2\xb7\x9e\xe7\x9d\x07\x7a\x2f\x5c\xb8\x50\x7e\xa2\x80\x23\
\x47\x8e\x74\x68\xad\x7f\xb7\x7b\xf7\xde\xd7\x76\xef\xfe\xb6\x6c\
\x6e\x7e\x06\xcf\xf3\xb8\x74\xe9\xaf\x58\x6b\x30\xac\x0c\x3e\x93\
\x02\xf0\x7d\x9f\x37\xde\xe8\x11\x6f\xbd\xf5\xf6\xbb\xb9\x5c\xee\
\xdd\xe1\xe1\xeb\xb4\xb7\x77\xdc\xbb\x7a\xb5\xff\x23\xcf\xf3\x7e\
\x7d\xfe\xfc\xf9\x87\x73\x02\xba\xbb\xbb\x7f\xdc\xd3\xf3\xe6\x1f\
\xf6\xed\xeb\x44\xca\xf9\xac\x48\x29\xc8\xe5\x72\x18\x63\xf0\x03\
\x43\xa1\x1c\x51\xaa\x68\x4a\x81\xa6\x5c\xd1\xe4\x4b\x11\x12\x43\
\x5c\x42\x5c\x58\xe2\xd2\xa2\xa4\x25\x15\x69\xb4\xd6\xe4\xf3\x39\
\x1a\x1a\x9a\xa9\xae\xf6\x68\x69\x69\x66\xff\xfe\xef\xa6\xcb\x65\
\xff\xed\xf7\xdf\xff\xe3\x89\x4c\x26\xb3\x63\x60\x60\x60\x48\x1d\
\x3d\x7a\xb4\xa6\xad\xed\xf9\xdf\x77\x75\xbd\xfa\x58\x2a\x1c\x47\
\x91\x15\x9b\xb9\x1b\xd5\x31\x79\x3d\x47\x22\x2e\x49\x28\x49\x22\
\x2e\x48\x55\x2b\x9a\x6b\x1d\x22\x63\x09\x42\x43\x10\x59\x2a\x91\
\xa1\x14\x59\xfa\x6f\x97\xd9\xb8\xbd\x8b\x89\x7b\x97\xd9\xb4\xa9\
\x80\x94\x02\x29\x25\x42\x08\xa4\x14\xf4\xf4\x1c\x4f\xf4\xf6\x7e\
\x71\x0a\x38\xa0\x8c\x31\xaf\x9f\x38\xf1\x13\x27\x16\x13\x4b\xac\
\x06\x43\xaa\xb5\x83\xf6\xb6\xd4\x92\x0b\x28\x64\xe6\xaa\x33\x0a\
\xa4\x85\x84\xb5\xc4\x2d\x54\x59\xa8\x69\x80\x4b\x83\x21\xed\xcf\
\x5b\xa2\xc8\x70\x2f\x77\x9f\x1b\xe1\x5d\xf6\x37\x7c\x13\x80\xae\
\xae\x83\x9d\x03\x03\x03\x4d\xca\x5a\xfb\x5a\x7d\x7d\x1d\xb1\xd8\
\xe3\x1b\x22\x9f\xcf\x62\x36\xb5\x30\x94\x5f\xec\x8b\x8c\x25\x1f\
\x42\x21\x80\x7c\x60\xd1\x73\x57\xc5\xe2\x49\xdc\x2a\x6d\xe0\x58\
\xb2\x0a\xdf\x0f\x88\xb9\x92\xec\xbd\x02\x4e\xcb\xcc\xb2\xdb\xb7\
\xaf\x4b\x7d\xf8\xe1\x07\x07\x94\x94\xf2\x99\x78\x3c\x8e\x58\xd0\
\xd7\x18\x8b\xef\x57\x98\x9a\x9a\xa4\xec\xbd\xc0\x8d\xc2\x8c\xd3\
\x8f\xe0\x46\xde\x92\x99\x16\x0b\x2e\xf9\xa5\x22\x37\x63\x65\xbd\
\x19\xd7\x8d\xa3\xb5\xa1\xad\x2e\x4d\x5b\x5d\x7a\xce\x97\x4a\x6d\
\xc2\x71\x9c\x56\x95\x4a\xa5\x1a\x95\x9a\x9f\x61\x18\x46\x94\x4a\
\x15\xac\xb5\xdc\x1c\x2f\x52\x48\x79\xe4\x1e\xc2\x3f\xa7\xe0\xab\
\x2c\x68\xfb\x64\xe0\xa3\x16\xb7\x4d\x04\x41\x19\xc7\x71\x1e\xf3\
\xc5\x62\x1e\xf1\x78\xbc\x5e\x81\xac\x0b\x82\x10\xd7\x4d\x10\x86\
\x11\x41\x10\x32\x2b\xe8\xef\x63\x2e\xd3\x09\xc1\x85\x61\xb8\x5f\
\x5a\x31\x77\xce\x44\x94\x62\x7a\x7a\x98\x54\xaa\x61\xb1\xb0\x78\
\x8c\x9b\x37\xc7\x50\x4a\xa5\x54\x10\x04\xf2\xcb\x2f\xbf\xc2\x75\
\x1d\x3a\x3a\x5a\xa8\xa9\xf1\x30\xc6\x22\x84\xe0\x76\x61\x23\xbd\
\x7d\x70\xbf\xb8\x7a\x38\x80\xc5\x63\xe0\x76\x91\x43\x4d\x69\x62\
\x31\x49\x10\x44\x8c\x8f\xe7\x18\x1d\x9d\x20\x93\x19\x41\x08\x11\
\x57\x4a\xc5\x1f\x02\xf8\x7e\xc0\xc0\xc0\x30\x00\xc9\x64\x15\x0d\
\x0d\xb5\xfc\xe8\x5b\x49\x9e\x1b\xce\x30\x9a\xd5\x8c\xe5\x2d\x53\
\xe5\x18\x85\xd0\xa1\xa4\x1d\xca\xc6\xa1\x62\x5d\x62\x68\x12\xa2\
\x42\x55\x2c\xa0\x5a\x05\x6c\x70\x02\xea\x3d\x4b\x7a\xa3\xa4\xa5\
\x56\xf2\x42\x5b\x33\x23\x23\xe3\x4c\x4c\xe4\x89\xa2\xf9\x1a\x41\
\x29\x85\xd6\x7a\x4a\x95\xcb\xc5\xb1\x58\x4c\xee\x10\x0b\x56\xa1\
\xef\x07\xdc\xb9\x73\x9f\x6a\xe0\x50\x03\x88\xcd\xe0\x79\x2e\x9e\
\x97\x20\x16\x2b\x13\x8b\x49\x5c\xd7\x41\x29\x01\x48\x2a\x95\x90\
\x20\x88\xd0\x5f\x9f\x88\xd3\xd3\x3e\xbe\x1f\x00\x30\x7e\x8b\x05\
\xd0\xf9\x52\x2d\x0c\x7d\xa2\x28\x9a\x50\xc6\xe8\x71\x63\x42\xaa\
\xab\x93\x73\xce\x42\xe1\x21\x7d\x7d\xbd\x6b\x8b\xfb\x12\x56\x55\
\xe5\xf1\xca\x2b\x9d\x8b\xfe\xab\x54\xca\x84\x61\xf8\x40\x01\xe3\
\x61\x58\xc6\x75\xe7\x0f\x9b\x07\x0f\xf2\x7c\xf6\xd9\xb9\x75\x13\
\xd0\xd0\xd0\xc8\xfe\xfd\xaf\x2e\x3a\xe6\x2b\x95\x22\x95\x4a\x65\
\x4c\x09\x21\x86\x2a\x95\x12\xae\x3b\xbf\x55\x84\x80\xda\xda\x5a\
\x5c\xd7\xe5\xe4\xc9\x93\x2c\x4c\xcf\x6a\x6c\x74\x74\x94\x33\x67\
\xce\xb0\x61\xc3\x06\x84\xd0\xb8\x0b\x3e\x2d\x8a\xc5\x82\xce\x64\
\x32\x43\xca\x71\x9c\xbf\x8c\x8e\x8e\xf0\xd2\x4b\xbb\xe6\x9c\xf5\
\xf5\x29\x0e\x1e\x7c\x9d\x74\xba\x85\x74\x3a\xbd\xd4\xd8\xcb\x9a\
\xb5\xb0\x65\xcb\x16\xae\x5d\x1b\xa6\xb1\xb1\x9e\x64\xd2\x25\x91\
\x98\x11\xa0\x75\xc4\xc8\xc8\xf5\x5b\x93\x93\x93\x77\xd4\xd9\xb3\
\x67\x6f\xb9\x6e\xd5\x7f\x8e\x1d\xfb\x61\xfb\xec\x81\xb1\x6d\xdb\
\x76\x6a\x6b\x1b\x49\xa7\x53\xa4\xd3\x75\x6b\x82\x6b\x6d\x90\x52\
\x70\xe0\x40\x37\xcd\xcd\x8d\x28\x25\x99\xad\xee\x07\x07\xaf\x72\
\xf7\xee\xdd\xbf\x01\xd3\x12\x20\x9b\x9d\xfa\xc5\xc5\x8b\x9f\x44\
\x53\x53\x93\x73\x83\x64\xb3\xf9\x35\xc2\xed\xd7\xbb\x41\x13\x86\
\x11\xdb\xb6\xb5\x32\x32\x72\x07\x10\xe4\x72\x59\x06\x07\xaf\xf2\
\xe9\xa7\xe7\xff\x75\xe5\xca\x95\xdf\x00\x7a\x2e\xb9\xc9\x64\xd2\
\xdd\xb3\x67\xcf\x4f\x95\x52\x5b\x9b\x9a\x5a\x3a\xde\x79\xe7\x97\
\x87\x76\xed\xda\xbe\x06\xb8\x59\xf0\x68\xaa\xab\xab\x38\x75\xea\
\x4f\xa5\x73\xe7\xfe\xfc\x91\xef\xfb\x23\xfd\xfd\xfd\x17\xb3\xd9\
\xec\xbf\x81\x49\x9e\xf4\xdd\xf8\xde\x7b\x1f\xfc\x2a\x9f\x2f\xda\
\xd5\x98\x31\xc6\x86\x61\x64\x7d\x3f\xb0\xc5\xa2\x6f\xf3\xf9\xa2\
\xcd\x66\x0b\xb6\x58\xf4\xed\xe5\xcb\xff\xb0\x5d\x5d\xdd\xdf\x5f\
\x8a\xb5\x64\x51\xfa\xec\xb3\x4d\x3f\xab\xa9\xf1\x56\x39\x7b\xe6\
\x0a\x0e\xa5\x24\x8e\xa3\x48\x24\x1c\xa4\x14\xbc\xf8\xe2\x37\x68\
\x6d\xdd\xfa\xf3\xa5\xfa\x3d\x56\x94\x9e\x3e\xfd\x71\x52\x08\xd9\
\xd8\xd7\x77\x6d\xd5\x02\xb4\x8e\x88\xa2\x88\x28\x0a\x17\xbc\xcf\
\x3c\x35\x35\xd5\xdb\x81\x2a\x60\x51\x61\xfa\x5f\x15\x59\xfb\x56\
\x1b\x1f\x81\x0d\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\
\x00\x00\x07\xa0\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\
\x0b\x12\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
\xd3\x08\x1c\x13\x19\x0c\xfe\x17\x9f\xdd\x00\x00\x07\x2d\x49\x44\
\x41\x54\x78\xda\xc5\x97\x7f\x6c\x55\x67\x19\xc7\x3f\xe7\xdc\xdb\
\xdb\xde\xb6\xb7\x40\xa1\x80\x48\x87\x65\x8b\xc2\x0a\xad\x74\x73\
\xb0\x61\x1d\xc3\x65\x03\x2d\x6e\x66\x31\x04\xd0\x88\x26\x1a\xb3\
\xd6\x68\x62\x98\x46\x67\x4c\xa7\x38\x05\x9c\x5b\x06\x99\x3f\xc3\
\x1f\xca\xfc\xc3\x2c\x66\x9b\x19\xe2\xc6\xac\x94\xe2\xa0\x63\xd8\
\x0a\xf2\x63\xfc\x6c\x7b\x29\xed\x2d\xed\xfd\x7d\x7e\xbc\xbf\xfc\
\xe3\xdc\x5b\xa8\xa3\x22\x3a\xe5\x4d\xde\x9c\xf7\x9c\x93\xf3\x3e\
\xdf\xe7\xfb\x7c\x9f\xe7\x3c\xaf\x65\x8c\xe1\x66\x0e\x9b\x9b\x3c\
\xc2\x00\x96\x65\xbd\x2b\x9b\x3d\xbe\xf9\xe5\xba\x10\x25\x3b\x1d\
\xdf\xeb\xda\xd2\xfe\xd0\x77\x01\x1f\xd0\xff\x17\x06\xda\x7f\xb8\
\xa7\xbd\xa2\xbc\xe2\x6c\xcb\xc7\x1a\xee\xad\xac\xac\xf8\xe6\x9a\
\x47\x1e\x5b\x09\x44\x01\xeb\xba\x0c\xfc\x57\x86\xb7\xfc\x61\x09\
\x58\x3b\xeb\xe6\xcd\x68\xfc\xc4\xaa\xc5\x94\x46\xc2\x94\x46\x42\
\x24\x46\x92\x4f\x03\x2b\x0b\x2c\x88\x49\x37\xf8\x4f\x45\xf8\xe4\
\x8f\xf7\x4e\xdd\xfc\xa3\x57\xdb\xb7\x6d\xef\x30\x67\xce\x8d\x19\
\x21\x8c\xb9\x7c\xd9\x33\xc3\xc3\x79\x63\x8c\x31\xcf\xed\x3c\x68\
\xd6\x7d\xee\xe9\xad\x40\xf5\xbf\x62\xda\x32\xc6\x50\xb1\xb6\xb3\
\xc3\x28\x65\x1b\x6d\x2c\x8c\x09\x40\x99\x2b\xe0\x8c\x36\x68\x6f\
\xe4\xfb\xea\xb5\xf5\x7b\x01\xf1\xe4\x53\x7f\x5c\x61\xb0\x77\x2e\
\x78\xff\xec\x79\x6b\x56\xd5\xe3\x7b\x1a\x21\x14\x4a\x19\x94\x52\
\xd8\xb6\x45\x69\x59\x09\x4f\x6c\xd9\x93\xdd\xf7\xfa\xf3\x2d\x07\
\xf7\xef\xea\x06\x1c\xc0\x5c\x33\x04\xf7\x2e\xaa\xbe\xf7\xa5\x6f\
\xd7\x93\x04\xa4\x02\x57\x81\x27\xc1\x2f\xac\xf7\x1c\x4c\xb3\xed\
\x17\x7f\x7d\x25\xbc\xfa\xd7\xed\x5f\x5b\x39\xbd\x66\xda\xb4\xd8\
\xa3\x0f\xae\x5c\xc8\x2d\x73\xa7\xe0\xba\x1a\xad\x27\xee\x2b\xa5\
\xa6\xdc\xb6\xb9\x7f\xc5\x82\xca\xc4\xc8\xea\xa7\x0e\xee\xdf\xd5\
\x52\x08\x83\xb8\x26\x00\x63\x20\x0d\x0c\xe4\x41\xea\x60\x0a\x19\
\x5c\x7d\x05\x4b\x1a\xaa\xd8\xb4\xbe\x8e\xfc\x69\xf5\x9d\xe5\xcb\
\xdf\xc7\x87\x97\xd6\x61\x0c\x48\x39\x79\x88\xc6\xc6\x72\x3c\x70\
\xdf\x7c\x0e\xbd\xd5\xdf\xb4\xa8\xe5\x27\x5b\x8f\x9e\x3c\xb3\x8d\
\xb7\xb7\x1e\x05\xd4\xd5\x4c\x84\x29\x22\x98\x64\x68\x01\x17\xdf\
\x3c\xce\xec\x6c\x9a\x96\x8d\x4b\x99\x55\x53\x8e\x31\xa0\xf5\xf5\
\x75\x32\x32\xe2\xf2\xe9\x4f\x35\x71\xf2\xdc\xe8\x86\x93\x43\x3a\
\x25\xe0\x71\x20\x03\xc8\x09\x00\xb4\x01\x75\x0d\x0c\xe9\xc1\x0c\
\x7d\x87\x7a\xb9\xbb\x69\x1e\x77\x2e\x59\x78\xc3\x42\xf5\x7d\xc9\
\x9c\xd9\x31\x1e\x7a\xf0\x03\xa4\x92\xc3\x75\x2f\x77\x33\xad\xa0\
\x85\x89\x00\x8c\x36\x13\x00\x48\x1f\xce\xec\x3f\x4a\x54\xfb\x6c\
\x5c\xbb\x94\x58\xe5\x8d\x65\xeb\xb1\x0b\x59\x7e\xdf\x3d\x02\xda\
\x60\x85\x2c\x22\xe1\x10\x7d\x62\xf6\xea\x92\x65\x3f\x7f\x42\xe8\
\xe8\x45\x08\x8b\xc0\x6b\xd1\x13\x30\x50\x88\xfb\x38\xf2\x9c\xc4\
\x4f\xa5\xd8\xf8\xd9\xe5\x37\xec\xf5\xd1\x0b\x39\x1e\xfe\x5e\x0f\
\x1f\x5c\x30\x83\xdb\xde\x3b\x25\xd0\x89\x67\x68\x5c\xb6\x88\x5b\
\x17\x79\x1b\x94\x21\x69\x8c\x31\x7b\xff\xd2\x17\xcb\x5d\x1a\xfc\
\x55\x18\x40\x99\x89\x0c\x94\x4f\x0b\x13\xa9\xae\xa6\xfb\xc8\x00\
\x1f\x5a\x32\xf7\xdf\x36\x9e\xca\x09\xbe\xfc\xdc\x09\x9a\x9b\xe6\
\xf0\xe8\xba\x7a\x4e\x0e\x05\x22\x06\x88\x94\xc0\xd0\xb0\xcf\xd0\
\x58\xde\x73\x32\xee\xa5\x5c\xfe\xcc\x62\xb2\x27\x4e\x4c\xaa\x81\
\x3d\xe7\x4b\xd9\xf2\xd2\x59\xe6\xd5\x26\x31\x06\x8c\x0a\xea\x83\
\xd1\xba\x10\x32\x83\xd1\x66\xfc\xb9\xd6\x86\xbe\xa1\x3c\x8d\x0b\
\x6a\x68\xdd\x50\xcf\x0b\x47\x60\x34\x17\xec\x0d\x60\xdb\x10\x0e\
\x45\x38\x70\xe8\xe2\xac\x81\x3f\xf7\x6a\x2a\x84\xcd\x99\xad\x5d\
\x85\x10\x68\xa4\xba\x62\x7c\x70\x04\x5e\xdc\x17\x67\xd7\xa6\x46\
\x2a\x4b\x0c\xb1\x58\x29\x52\x81\xc4\x20\x34\x48\x65\x90\x12\x84\
\x32\x28\x0d\x42\x81\x94\x86\x68\x69\x09\x53\xa7\x97\xf1\x62\x0f\
\x64\xdc\x2b\xc6\x2d\x2b\x60\xe0\xd4\x1b\x17\x18\x3c\x70\x42\x13\
\xd6\x53\xf1\x47\x0e\x00\xfe\xb8\x06\xae\x66\xa0\xeb\xc8\x30\x8b\
\xeb\x62\xb4\xdc\x35\x85\xb3\xe7\xd3\x4c\xad\x2e\xa1\xa2\x2a\x4c\
\x06\x48\x0b\xc8\xe4\x21\xed\x04\x33\x97\x87\x8c\x03\x29\x01\x99\
\x31\xc8\xc4\x03\xe3\xa2\xe0\x90\x72\x05\xc9\xf8\x18\xc7\xf6\x9f\
\x62\x74\x38\xed\x90\xf5\x87\x98\x2a\xdf\x43\xf6\x5c\x17\xe0\x14\
\x00\x04\x9e\x14\x2b\xf6\x0b\xaf\xf6\xd1\xbe\x7e\x3e\x2e\x10\xad\
\xa9\xe2\xec\x85\x04\xb7\xdd\x5e\x83\x67\xc0\x17\xe0\x0a\x48\xa6\
\x21\x9e\x30\x8c\x65\x34\xfd\x83\x1e\xc9\xb4\x26\x95\x51\x64\xb2\
\x12\x37\xef\x23\x5c\x0f\x99\xc9\x31\x1a\x1f\x65\x74\x2c\x8f\x72\
\x44\x0a\x57\x24\x08\x99\x30\xb6\x29\x25\x75\xb0\x1b\xc8\x17\x44\
\x08\xb2\xc0\xc0\xdb\x7d\x92\xc1\x44\x9e\x96\x65\xd5\x78\x1a\x74\
\x04\xa8\x9a\xc2\xb1\xb3\x19\xaa\x67\xc5\x38\x1d\x87\xfe\x21\x4d\
\x32\xad\x48\xa6\x15\xa9\x8c\x22\x99\x51\xa4\x52\x92\xd1\xb4\x22\
\x97\xf5\x90\x8e\x8f\xcc\xe5\x19\x19\xbc\x8c\x92\x1a\x65\x97\x81\
\xf0\x83\x0a\x58\x4a\x05\x32\x7f\x9a\xd1\x8e\x3e\x20\x6f\x8f\x33\
\x50\x00\xb0\xbb\x33\x4e\xcb\xd2\x1a\xca\x23\x20\x0c\x78\x80\x28\
\x8f\x70\x6a\x18\xba\x4f\x18\x86\xc7\xc0\x13\x06\x5f\x04\x5a\x10\
\xca\x20\x04\xf8\x32\x58\x1b\x03\xe9\xb4\xc3\xa5\x44\x16\x1d\x89\
\x62\x55\x54\xe2\x7c\xf1\x33\xe3\xe1\x9d\x53\xa3\x2b\xf1\x2f\xf7\
\x10\x6c\xed\xda\xc5\x2c\x28\xd6\x81\x7d\x87\x87\x58\xb3\x74\x26\
\x1e\x90\xf1\xa1\x6f\x14\xe2\x49\xd0\x91\x18\x43\x89\x1c\xbe\x08\
\x0c\x4a\x05\xbe\x04\x21\x02\x31\x4a\x6d\x91\x77\x14\xf1\x78\x9a\
\xac\x67\x08\x57\xc6\xb0\xc2\x61\x92\x6b\x1f\xa1\xac\xb5\x06\xe7\
\xb1\xd6\x6a\x80\x8b\x69\x15\x25\xd9\xf5\x0a\x90\xbf\x4a\x84\x06\
\xa9\xa1\xef\x82\x24\x9f\xf3\xf9\xf8\xdd\xd3\x19\xc8\xc2\x40\x16\
\x72\x7e\xf0\xd3\x31\x36\x48\x2b\xc4\x68\xca\xc5\xb2\x23\xf8\xd2\
\x20\xa5\x09\x32\x40\xc1\x60\x22\xc7\x50\xc2\xc3\x8a\x96\x93\xbc\
\xff\x23\x00\x4c\xfb\xed\xef\x0a\x7e\xdf\x09\xec\x86\x52\x53\xe1\
\x7c\x69\x13\xc0\x2f\xa3\x6d\xcc\x1d\x07\xa0\x0a\x75\xe0\x37\xbb\
\xcf\xf3\xf0\xb2\x99\x24\x3c\xc8\x7a\x10\xb5\x82\x14\xb2\x6d\x08\
\x85\xc0\x54\x95\x12\x1f\xc8\x10\x2d\x0f\x11\x41\x12\xb1\x14\x11\
\x23\xc8\x8d\x66\x88\x86\x60\xf6\x8c\x32\x8e\xdf\x71\x0f\x65\xad\
\x0a\xb7\x37\xc4\x18\x9f\x84\x66\x80\x26\x68\xde\x8d\xc3\x57\xe7\
\xd0\x0c\x65\x0d\x0a\x87\xda\x81\x68\x5b\xbf\x1d\x30\x50\xc8\xe7\
\x8e\xee\x41\x9e\xdf\xd4\xc8\xc2\x18\x10\xbb\x92\x96\x4a\x81\x10\
\x0a\x29\x15\x72\x61\x09\x42\x78\xc1\x5a\x4a\xa4\xd4\x08\x11\x29\
\xac\x25\xc7\xc4\x9f\xa8\xdf\x71\x1f\x65\xad\x2b\xa0\xa1\x11\xb8\
\x1d\x98\x49\x59\xc3\x4f\xa1\xe1\xef\x40\x0f\xee\x8e\x0e\xa2\x6d\
\xfd\x31\x02\x62\x03\x0d\xbc\x76\x28\x4d\x08\xc3\xaa\xa6\xaa\x77\
\x76\xae\x36\x84\x42\x16\xb6\x5d\x9c\x36\xb6\x6d\x63\x59\x36\xb6\
\x6d\xfd\xd3\x3b\x8b\xbf\xdd\xf5\x3a\xee\x8e\x0e\xdc\xde\x67\x80\
\x99\xc0\x1d\xc0\x4c\xdc\xde\x67\x8a\xc6\xe7\x17\x9b\x93\x02\x00\
\x43\xe7\x9b\x83\x7c\xfe\x81\x6b\xd7\xfd\x20\x0c\x45\xc3\xa1\x71\
\x83\xa1\x90\x8d\x65\x15\x0d\x87\xb0\x6d\x9b\x50\x28\x00\x75\x9d\
\x91\x2f\x02\x18\xaf\x84\x47\x7a\x2f\xf1\xb3\x2f\xdc\x33\xe9\x17\
\x96\x15\x78\xaa\xf5\x3b\x99\xd0\xda\x10\x0a\x99\xf1\x77\xf5\x6f\
\x14\x42\x40\x23\x30\x0c\x1c\x06\x86\x29\x6b\xf8\x0a\x34\xf4\xe0\
\xd0\x71\x29\xda\xd6\x6f\x8d\x03\x38\x7d\xf6\x32\xb7\xde\x12\x63\
\xc1\x9c\x92\xc9\x0f\x10\x76\xa1\x64\x6b\x81\xe7\xfb\xb8\xae\x87\
\xe7\xb9\xb8\xae\x87\xeb\xfa\x38\xae\x8b\xeb\x79\x34\x1f\x5f\x57\
\x10\x61\x07\x74\x76\x10\x88\xee\x5b\xb8\xbd\x9b\xa1\x93\xe0\xbe\
\x55\xe1\x50\x6b\xa2\x6d\xfd\x56\xb8\xc8\xf1\x58\x5a\xf0\xd1\xaf\
\x1f\x06\x13\xa4\x65\xd0\x1d\x07\xed\x9a\x2e\xfc\xf9\xb4\x56\x68\
\xa9\x91\x4a\xa1\x95\x46\x2b\x85\x2c\x5c\xfb\x13\x1e\x99\x84\x00\
\xbd\x15\x87\x4d\x00\x44\x9f\xfd\x01\x0e\xdf\x80\x86\xb7\xa0\x13\
\xa2\x6d\xfd\xcd\xce\xf6\xda\x4e\xb7\x33\x44\x91\x01\xcb\x18\x83\
\x65\x59\x55\x40\x2d\x30\xe5\xdd\x3e\xfb\x39\xdb\x6b\xbb\xca\x5a\
\x6b\x70\x77\x24\x88\xb6\xf5\xd7\x03\x71\x82\x1e\xd8\x5c\x0d\xa0\
\xa4\x70\x8c\x2a\xf9\x5f\x1c\x40\x9d\xed\xb5\x23\xd1\xb6\xfe\xe9\
\x05\xe1\x4d\xe8\x09\xad\x9b\x7d\x3c\xff\x07\x19\xbf\x1f\xed\x82\
\xbb\x44\xa7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
"
qt_resource_name = "\
\x00\x0e\
\x0b\xdf\x7d\x87\
\x00\x66\
\x00\x69\x00\x6c\x00\x65\x00\x73\x00\x61\x00\x76\x00\x65\x00\x61\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0c\
\x05\x68\x0e\x67\
\x00\x66\
\x00\x69\x00\x6c\x00\x65\x00\x73\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0c\
\x09\xa7\x0e\x47\
\x00\x66\
\x00\x69\x00\x6c\x00\x65\x00\x71\x00\x75\x00\x69\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0c\
\x0b\x21\x0f\x87\
\x00\x66\
\x00\x69\x00\x6c\x00\x65\x00\x6f\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x07\
\x0e\x6f\x57\x87\
\x00\x67\
\x00\x70\x00\x6c\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0d\
\x06\x52\xd9\xe7\
\x00\x66\
\x00\x69\x00\x6c\x00\x65\x00\x70\x00\x72\x00\x69\x00\x6e\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0b\
\x04\x14\x52\xc7\
\x00\x66\
\x00\x69\x00\x6c\x00\x65\x00\x6e\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
"
qt_resource_struct = "\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x01\
\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x30\x9a\
\x00\x00\x00\x22\x00\x00\x00\x00\x00\x01\x00\x00\x08\x19\
\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x2a\x35\
\x00\x00\x00\x40\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x61\
\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x14\xe0\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x87\
"
def qInitResources():
QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
def qCleanupResources():
QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
qInitResources()

BIN
qrc_resources.pyc Normal file

Binary file not shown.

160
reading.py Normal file
View File

@ -0,0 +1,160 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ReadingTab(QWidget):
def __init__(self, parent=None):
super(ReadingTab, self).__init__(parent)
self.readingTable = QTableWidget()
self.addReadingButton = QPushButton("Add pages to read")
self.editReadingButton = QPushButton("Edit pages")
self.readingDoneButton = QPushButton("Done")
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(self.addReadingButton)
hlayout.addWidget(self.editReadingButton)
hlayout.addWidget(self.readingDoneButton)
vlayout.addWidget(self.readingTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)
class ReadingDlg(QDialog):
def __init__(self, parent=None):
super(ReadingDlg, self).__init__(parent)
weekLabel = QLabel(self.trUtf8("&Week"))
courseLabel = QLabel(self.trUtf8("&Course"))
bookLabel = QLabel(self.trUtf8("&Book"))
chapterLabel = QLabel(self.trUtf8("Cha&pter"))
pagesLabel = QLabel(self.trUtf8("&Pages"))
numberOfPagesLabel = QLabel(self.trUtf8("&Number of pages"))
weekEdit = QSpinBox()
weekEdit.setRange(1, 52)
courseEdit = QComboBox()
bookEdit = QComboBox()
chapterEdit = QLineEdit()
pagesEdit = QLineEdit()
numberOfPagesEdit = QLabel()
weekLabel.setBuddy(weekEdit)
courseLabel.setBuddy(courseEdit)
bookLabel.setBuddy(bookEdit)
chapterLabel.setBuddy(chapterEdit)
pagesLabel.setBuddy(pagesEdit)
numberOfPagesLabel.setBuddy(numberOfPagesEdit)
self.layout = QGridLayout()
self.layout.addWidget(weekLabel, 0, 0)
self.layout.addWidget(courseLabel, 1, 0)
self.layout.addWidget(bookLabel, 2, 0)
self.layout.addWidget(chapterLabel, 3, 0)
self.layout.addWidget(pagesLabel, 4, 0)
self.layout.addWidget(numberOfPagesLabel, 5, 0)
self.layout.addWidget(weekEdit, 0, 1)
self.layout.addWidget(courseEdit, 1, 1)
self.layout.addWidget(bookEdit, 2, 1)
self.layout.addWidget(chapterEdit, 3, 1)
self.layout.addWidget(pagesEdit, 4, 1)
self.layout.addWidget(numberOfPagesEdit, 5, 1)
self.setLayout(self.layout)
class AddReadingDlg(ReadingDlg):
def __init__(self, parent=None):
super(AddReadingDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new reading"))
class EditReadingDlg(ReadingDlg):
def __init__(self, parent=None):
super(EditReadingDlg, self).__init__(parent)
self.setAttribute(Qt.WA_DeleteOnClose)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit reading"))
def apply(self):
pass
class ReadingModel():
week = ""
course = ""
book = ""
chapter = ""
pages = ""
def setWeek(self, week):
self.week = week
def getWeek(self):
return self.week
def setCourse(self, course):
self.course = course
def getCourse(self):
return self.course
def setBook(self, book):
self.book = book
def getBook(self):
return self.book
def setChapter(self, chapter):
self.chapter = chapter
def getChapter(self):
return self.chapter
def setPages(self, pages):
self.pages = pages
def getPages(self):
return self.pages
def getNumberOfPages(self):
pages = self.getPages()
pagesArray = pages.split(", ")
nextArray = []
sum = 0
for p in pagesArray:
nextArray.append(p.split("-"))
for n in nextArray:
sum += int(n[1]) - int(n[0])
return sum

BIN
reading.pyc Normal file

Binary file not shown.

158
schedule.py Normal file
View File

@ -0,0 +1,158 @@
#!/usr/bin/env python
#coding: utf-8
import os
import platform
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ScheduleTab(QWidget):
def __init__(self, parent=None):
super(ScheduleTab, self).__init__(parent)
self.scheduleTable = QTableWidget()
self.addScheduleButton = QPushButton("Add lesson")
self.editScheduleButton = QPushButton("Edit lesson")
vlayout = QVBoxLayout()
hlayout = QHBoxLayout()
hlayout.addWidget(self.addScheduleButton)
hlayout.addWidget(self.editScheduleButton)
vlayout.addWidget(self.scheduleTable)
vlayout.addLayout(hlayout)
self.setLayout(vlayout)
class ScheduleDlg(QDialog):
def __init__(self, parent=None):
super(ScheduleDlg, self).__init__(parent)
dayLabel = QLabel(self.trUtf8("&Day"))
fromLabel = QLabel(self.trUtf8("&From"))
toLabel = QLabel(self.trUtf8("&To"))
courseLabel = QLabel(self.trUtf8("&Course"))
typeLabel = QLabel(self.trUtf8("Ty&pe"))
roomLabel = QLabel(self.trUtf8("&Room"))
dayEdit = QComboBox()
days = [self.trUtf8("Monday"), self.trUtf8("Tuesday"), self.trUtf8("Wednesday"), self.trUtf8("Thursday"), self.trUtf8("Friday")]
dayEdit.addItems(days)
fromEdit = QSpinBox()
fromEdit.setRange(08.15, 18.15)
fromEdit.setSingleStep(01.00)
toEdit = QSpinBox()
toEdit.setRange(09.00, 19.00)
toEdit.setSingleStep(01.00)
courseEdit = QComboBox()
typeEdit = QComboBox()
types = [self.trUtf8("Lecture"), self.trUtf8("Assignment lecture"), self.trUtf8("Assignment help"), self.trUtf8("Assignment"), self.trUtf8("Lab"), self.trUtf8("Seminar"), self.trUtf8("Other")]
typeEdit.addItems(types)
roomEdit = QLineEdit()
dayLabel.setBuddy(dayEdit)
fromLabel.setBuddy(fromEdit)
toLabel.setBuddy(toEdit)
courseLabel.setBuddy(courseEdit)
typeLabel.setBuddy(typeEdit)
roomLabel.setBuddy(roomEdit)
self.layout = QGridLayout()
self.layout.addWidget(dayLabel, 0, 0)
self.layout.addWidget(fromLabel, 1, 0)
self.layout.addWidget(toLabel, 2, 0)
self.layout.addWidget(courseLabel, 3, 0)
self.layout.addWidget(typeLabel, 4, 0)
self.layout.addWidget(roomLabel, 5, 0)
self.layout.addWidget(dayEdit, 0, 1)
self.layout.addWidget(fromEdit, 1, 1)
self.layout.addWidget(toEdit, 2, 1)
self.layout.addWidget(courseEdit, 3, 1)
self.layout.addWidget(typeEdit, 4, 1)
self.layout.addWidget(roomEdit, 5, 1)
self.setLayout(self.layout)
class AddScheduleDlg(ScheduleDlg):
def __init__(self, parent=None):
super(AddScheduleDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Add new lesson"))
class EditScheduleDlg(ScheduleDlg):
def __init__(self, parent=None):
super(EditScheduleDlg, self).__init__(parent)
buttonBox = QDialogButtonBox(QDialogButtonBox.Apply|QDialogButtonBox.Close)
self.layout.addWidget(buttonBox, 6, 0, 1, 2)
self.connect(buttonBox.button(QDialogButtonBox.Apply), SIGNAL("clicked()"), self.apply)
self.connect(buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
self.setWindowTitle(self.trUtf8("Edit lesson"))
def apply(self):
pass
class ScheduleModel():
day = ""
fromTime = ""
toTime = ""
course = ""
type = ""
room = ""
def setDay(self, day):
self.day = day
def getDay(self):
return self.day
def setFromTime(self, fromTime):
self.fromTime = fromTime
def getFromTime(self):
return self.fromTime
def setToTime(self, toTime):
self.toTime = toTime
def getToTime(self):
return self.toTime
def setCourse(self, course):
self.course = course
def getCourse(self):
return self.course
def setType(self, type):
self.type = type
def getType(self):
return self.type
def setRoom(self, room):
self.room = room
def getRoom(self):
return self.room

BIN
schedule.pyc Normal file

Binary file not shown.