Merge lp:~hid-iwata/qbzr/qshelve into lp:qbzr

Proposed by Alexander Belchenko
Status: Merged
Merged at revision: 1404
Proposed branch: lp:~hid-iwata/qbzr/qshelve
Merge into: lp:qbzr
Diff against target: 4628 lines (+3610/-723)
12 files modified
__init__.py (+2/-0)
data/qbzr.qrc (+20/-0)
lib/annotate.py (+1/-1)
lib/commands.py (+49/-0)
lib/diffwindow.py (+1/-1)
lib/resources.py (+1375/-589)
lib/shelvewindow.py (+137/-0)
lib/util.py (+61/-132)
lib/widgets/shelve.py (+1106/-0)
lib/widgets/shelvelist.py (+541/-0)
lib/widgets/splitters.py (+47/-0)
lib/widgets/toolbars.py (+270/-0)
To merge this branch: bzr merge lp:~hid-iwata/qbzr/qshelve
Reviewer Review Type Date Requested Status
Alexander Belchenko Approve
Review via email: mp+60024@code.launchpad.net

Description of the change

qshelve!

To post a comment you must log in.
Revision history for this message
Alexander Belchenko (bialix) wrote :

I really want to see it merged very soon. I have some feedback regarding UI. Some background: one of the good features of QBzr is consistency between different q-windows. That's not ideal though, but we should try to improve this consistency. That means we should follow create major control elements in similar way in the different windows.

1) So, let's look at you toolbar: http://dl.dropbox.com/u/16802579/shelve.png

It's slightly different from qdiff toolbar in the way it displays options (Encoding and Complete). Your toolbar put both options directly on toolbar, while qdiff puts them into View Options submenu: http://bazaarvcs.files.wordpress.com/2011/04/qdiff-options.png

I'd like you put your options into similar submenu as well, or even better reuse that menu if possible (hiding unneeded options), so we can extend options in one place.

Your icons for that options are very nice, so we can use them in qdiff too.

2) I suggest using more descriptive names for button Next and Previous, as Next hunk / Previous Hunk, or Next Change / Previous Change. That's because when Find panel is open user will see 2 pairs of next/previous and that's confusing: http://dl.dropbox.com/u/16802579/shelve-find.png

3) You have added only one new command: qshelve. I think we need qunshelve as well to match bzr CLI. That should be similar to http://dl.dropbox.com/u/16802579/shelvelist.png but I think we don't really need `qshelve --list` then. Or you can retain `qshelve --list` but makes it alias to qunshelve window.

Revision history for this message
Alexander Belchenko (bialix) wrote :

Small nit: please don't copy paste Copyright strings blindly. Instead of:

# Copyright (C) 2006 Lukáš Lalinský <email address hidden>
2419 +# Copyright (C) 2005 Dan Loda <email address hidden>
2420 +# Copyright (C) 2009 Gary van der Merwe <email address hidden>
2421 +#
2422

Please use

# Copyright (C) 2011 QBzr Developers

Revision history for this message
Alexander Belchenko (bialix) wrote :

I've just tested how `qshelve --list` works. When I select the shelf
then I don't see any changes until I click on some file from file list.
That's confusing. Why don't you show all changes when shelf selected?
Similar to qdiff all-files-in-one window behavior? Do you really need
file selector for previewing shelved changes?

Also I should note that using file selector at left of side-by-side diff
is not very good (or maybe my habits work against me):

This layout is good for wide-screen monitors, but on my 4:3 display I'd
like to see side-by-side diff open on full width of the screen, so I'd
prefer to see filelist above/below it (or don't see it at all).

Maybe we can have the layout configurable? Or even make it a submenu in
toolbar? Or use pop-up dialog for that?

Revision history for this message
Gordon Tyler (doxxx) wrote :

> I've just tested how `qshelve --list` works. When I select the shelf
> then I don't see any changes until I click on some file from file list.
> That's confusing. Why don't you show all changes when shelf selected?
> Similar to qdiff all-files-in-one window behavior? Do you really need
> file selector for previewing shelved changes?

I think it should be possible to see either all changes in the shelf, or the changes for a particular file in that shelf. I can see both being useful.

> This layout is good for wide-screen monitors, but on my 4:3 display I'd
> like to see side-by-side diff open on full width of the screen, so I'd
> prefer to see filelist above/below it (or don't see it at all).
>
> Maybe we can have the layout configurable? Or even make it a submenu in
> toolbar? Or use pop-up dialog for that?

Or make the file selector collapsible to the left?

Revision history for this message
Neil Martinsen-Burrell (nmb) wrote :

I would really like to see at least a merge of the refactoring in lib/diffwindow.py. This makes the diff handling reusable in windows other than DiffWindow. I'd like to make use of this refactoring in a bzr-colo merge window. Perhaps there should even be a reusable DiffPreview component with an API that just takes two trees.

Revision history for this message
IWATA Hidetaka (hid-iwata) wrote :

> I've just tested how `qshelve --list` works. When I select the shelf
> then I don't see any changes until I click on some file from file list.
> That's confusing. Why don't you show all changes when shelf selected?
> Similar to qdiff all-files-in-one window behavior? Do you really need
> file selector for previewing shelved changes?

Viewing per file diff is very useful for me, as Gordon said. (BTW, I want qdiff to have this feature.)

If it is confusing, I'll change it like: After selecting shelf, First file is selected automatically.
How about this?

> > This layout is good for wide-screen monitors, but on my 4:3 display I'd
> > like to see side-by-side diff open on full width of the screen, so I'd
> > prefer to see filelist above/below it (or don't see it at all).
> >
> > Maybe we can have the layout configurable? Or even make it a submenu in
> > toolbar? Or use pop-up dialog for that?
>
> Or make the file selector collapsible to the left?

pop-up dialog is a bit annoying for me, and submenu of toolbar makes multi-selection of many files painful.

I want to choose layout configuration, and collapsible file selector.
And +1, make it possible to launch qdiff from shelf list.

Revision history for this message
Alexander Belchenko (bialix) wrote :

iwata пишет:
>> I've just tested how `qshelve --list` works. When I select the shelf
>> then I don't see any changes until I click on some file from file list.
>> That's confusing. Why don't you show all changes when shelf selected?
>> Similar to qdiff all-files-in-one window behavior? Do you really need
>> file selector for previewing shelved changes?
>
> Viewing per file diff is very useful for me, as Gordon said. (BTW, I want qdiff to have this feature.)
>
> If it is confusing, I'll change it like: After selecting shelf, First file is selected automatically.
> How about this?

Please, select all by default. That's more intuitive.

I agree we need file selector for qdiff and qshelve, but I think we
should keep the old behavior as default, i.e. show all files by
default, so user who used to this behavior won't be confused. How's
about this?

>>> This layout is good for wide-screen monitors, but on my 4:3 display I'd
>>> like to see side-by-side diff open on full width of the screen, so I'd
>>> prefer to see filelist above/below it (or don't see it at all).
>>>
>>> Maybe we can have the layout configurable? Or even make it a submenu in
>>> toolbar? Or use pop-up dialog for that?
>> Or make the file selector collapsible to the left?
>
> pop-up dialog is a bit annoying for me, and submenu of toolbar makes multi-selection of many files painful.
>
> I want to choose layout configuration, and collapsible file selector.

What do you mean by collapsible?

> And +1, make it possible to launch qdiff from shelf list.

I'm not quite understand this. But if you +1 then it's great.

--
All the dude wanted was his rug back

Revision history for this message
Alexander Belchenko (bialix) wrote :

Neil Martinsen-Burrell пишет:
> I would really like to see at least a merge of the refactoring in lib/diffwindow.py. This makes the diff handling reusable in windows other than DiffWindow. I'd like to make use of this refactoring in a bzr-colo merge window. Perhaps there should even be a reusable DiffPreview component with an API that just takes two trees.

Completely agree. It will be good to split the big patch into smaller
parts. I want to extract this refactoring and land it first.

--
All the dude wanted was his rug back

Revision history for this message
Alexander Belchenko (bialix) wrote :

Iwata, please explain this change:

- self.connect(self.find_text,
3697 - QtCore.SIGNAL("returnPressed()"),
3698 - self.find_next)
3699
3700 + # NOTE: returnPressed signal loses default button of QDialog.
3701 + # So, use keyPressEvent instead.
3702 + def keyPressEvent(obj, event):
3703 + if event.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter):
3704 + self.find_next()
3705 + else:
3706 + QtGui.QLineEdit.keyPressEvent(obj, event)
3707 +
3708 + self.find_text.keyPressEvent = \
3709 + MethodType(keyPressEvent, self.find_text, QtGui.QLineEdit)
3710 + self.find_text.installEventFilter(self)
3711 +

Revision history for this message
Alexander Belchenko (bialix) wrote :

Iwata, in order to get the review of your code simpler, I'd like to extract some things out of it and merge them before the maiun shelve functionality will land.

I'm going to merge you change to get_icon() with optional size parameter.

Also I think it will be nice to extract new icons into separate branch. I'd like to be sure all these icons has proper license and we can use them without any negative consequences.

Also, as I noted before qdiff refactoring can be landed separately.

Then new Toolbar class -- I don't like the idea to increase the size of util.py even more than now. So I'd be happy if you extract it into separate module and put it under lib/widgets/toolbar.py. Do we need to change all our existing toolbars to use your class as base class then?

Revision history for this message
IWATA Hidetaka (hid-iwata) wrote :

> > If it is confusing, I'll change it like: After selecting shelf,
> > First file is selected automatically. > How about this?
> Please, select all by default. That's more intuitive.

Selecting all files sometimes needs many time.
So, at least, I want to make it configurable.
How about this?
 * Add 'Show filelist' checkable button to toolbar.
   Default state is Unchecked, and state is stored to qbzr.conf.
 * When filelist is shown, first file is automatically selected after selecting shelf.
   Otherwise, all files are selected.

> Iwata, please explain this change:
>
> - self.connect(self.find_text,
> 3697 - QtCore.SIGNAL("returnPressed()"),
> 3698 - self.find_next)
> 3699
> 3700 + # NOTE: returnPressed signal loses default button of QDialog.
> 3701 + # So, use keyPressEvent instead.
> 3702 + def keyPressEvent(obj, event):
> 3703 + if event.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter):
> 3704 + self.find_next()
> 3705 + else:
> 3706 + QtGui.QLineEdit.keyPressEvent(obj, event)
> 3707 +
> 3708 + self.find_text.keyPressEvent = \
> 3709 + MethodType(keyPressEvent, self.find_text, QtGui.QLineEdit)
> 3710 + self.find_text.installEventFilter(self)
> 3711 +

By old code, return key on search edit box fires do_accept, not find_next.
But this change will be no longer needed after changing UI to use toolbar instead of
buttons.

> Also I think it will be nice to extract new icons into separate branch.
> I'd like to be sure all these icons has proper license and we can use them
> without any negative consequences.

All new icons are from tango or made by me for this branch.
No problem about license.

> Then new Toolbar class -- I don't like the idea to increase the size of util.py even
> more than now. So I'd be happy if you extract it into separate module and put it
> under lib/widgets/toolbar.py. Do we need to change all our existing toolbars to use
> your class as base class then?

OK.

BTW, I'm not familiar to the rule of marge proposal.
Should I resubmit proposal after pushing new revision?

Revision history for this message
Alexander Belchenko (bialix) wrote :

iwata пишет:
> BTW, I'm not familiar to the rule of marge proposal.
> Should I resubmit proposal after pushing new revision?

No, you don't need to resubmit. Simply push new revisions to your
branch and this proposal will be automatically updated. But you need
to add short comment about availability of new revisions otherwise
reviewers won't be notified.

lp:~hid-iwata/qbzr/qshelve updated
1380. By IWATA Hidetaka

ShelveWindow : Lock trees only when starting up and executing shelve.

1381. By IWATA Hidetaka

fix copyright

1382. By IWATA Hidetaka

Merge from trunk and widgets.

1383. By IWATA Hidetaka

Move ToolbarPanel from util.py to widgets.toolbars.py

1384. By IWATA Hidetaka

ShelveWindow : Move "Complete" and "Encode" menu to submenu of "View Options".
Change menu text(Next -> Next hunk / Previous -> Previons Hunk)

1385. By IWATA Hidetaka

Move shelve.py and shelivelist.py to widgets

1386. By IWATA Hidetaka

Add icons

1387. By IWATA Hidetaka

ShelveWindow : Change to tab gui. (Now, only shelve is supported, shelveList is not supported yet)

1388. By IWATA Hidetaka

Add ShelveList tab to ShelveWindow / Add qunshelve command / Trivial fixes about texts and shortcuts.

1389. By IWATA Hidetaka

ShelveWidget : Use tab width configuration

1390. By IWATA Hidetaka

Merge from widgets. (Fix splitters)

1391. By IWATA Hidetaka

Add icon.

1392. By IWATA Hidetaka

ShelveListWidget : Add layout menus.

1393. By IWATA Hidetaka

ShelveWidget : Avoid error caused by multiple calls of show_selected_diff.

Revision history for this message
IWATA Hidetaka (hid-iwata) wrote :

I've pushed new revisions, but still in progress.

FIXES and IMPROVEMENTS:
 Unify 2 dialogs by using TabWidget
 Lock only starting up and shelving
 Keep splitter positions
 Add Layout menus to ShelveList
 Fix error caused by multiple append_diff call
 Fix copyright

TODO:
 Add Show-FileList menu to ShelveList
 Check existance of pending-merges
 Add Layout menus to ShelveWidget
 Add tab width selector
 Editor support

NEEDED, BUT NOT PLANNED:
 External diff support in shelve list
 Use read lock instead of write lock on starting up

lp:~hid-iwata/qbzr/qshelve updated
1394. By IWATA Hidetaka

Fix : failed when file list specified.

1395. By IWATA Hidetaka

Fix ToolbarPanel : argument 'enabled' of add_toolbar_button does not work / Shortcut of menu is not displayed.

1396. By IWATA Hidetaka

ShelveListWidget : Add 'Show filelist' menu / Move code of Layout menus to widgets.toolbars / Change shelf icon.

1397. By IWATA Hidetaka

ShelveWidget : Add Layout menu

1398. By IWATA Hidetaka

ShelveWidget/ShelveListWidget : Add tab width selector.

1399. By IWATA Hidetaka

ShelveWidget / ShelveListWidget : Fix splitter setting code. (does not work correctly when unconfigured)

1400. By IWATA Hidetaka

Add icon

1401. By IWATA Hidetaka

Add editor support.

1402. By IWATA Hidetaka

Hide use editor button when change_editor is not configured.

1403. By IWATA Hidetaka

Run unshelve separatedly.

1404. By IWATA Hidetaka

ShelveWindow : Check pending merges

1405. By IWATA Hidetaka

Fix trivial about texts.

1406. By IWATA Hidetaka

ShelveWidget : Show edited lines to hunk view.

1407. By IWATA Hidetaka

ShelveWidget : autocomplete of message editbox.

1408. By IWATA Hidetaka

ShelveListWidget : Add feature of --dry-run and --keep

1409. By IWATA Hidetaka

ShelveWidget : Add feature of --destory

1410. By IWATA Hidetaka

Trivial fix about translation.

1411. By IWATA Hidetaka

ShelveListWidget : Fix KeyError

1412. By IWATA Hidetaka

ShelveListWidget : Reset ShelveWidget after unshelve

Revision history for this message
IWATA Hidetaka (hid-iwata) wrote :

Now, I've implement all planned features and fixes.
Please check it out.

DIFFERENCES FROM FIRST REVIEWED VERSION
----------------------------------------
* Unify ShelveWindow and ShelveListWindow by using TabWidget
* Add qunshelve command (Same as qshelve --list)
* Support shelve --destroy, unshelve --dry-run, unshelve --keep
* Support hunk splitting by change editor
* Reduce locking period (Only when starting up and shelving)
* Make layout of each panes configurable
* Add 'Show filelist' menu to ShelveList, and select all files
  automatically after selecting shelf when filelist is hidden.
* Fix error caused by multiple append_diff call
* Add tab width selector
* Run unshelve in separated process
* Prevent from shelving when working tree has pending-merges
* Keep splitter positions
* Fix copyright
* Auto complete of shelve message
* Many trivial fixes about text, message, shortcut, etc.

Revision history for this message
methane (songofacandy) wrote :

Congrats!

On Wed, May 18, 2011 at 4:35 PM, iwata <email address hidden> wrote:
> Now, I've implement all planned features and fixes.
> Please check it out.
>
> DIFFERENCES FROM FIRST REVIEWED VERSION
> ----------------------------------------
> * Unify ShelveWindow and ShelveListWindow by using TabWidget
> * Add qunshelve command (Same as qshelve --list)
> * Support shelve --destroy, unshelve --dry-run, unshelve --keep
> * Support hunk splitting by change editor
> * Reduce locking period (Only when starting up and shelving)
> * Make layout of each panes configurable
> * Add 'Show filelist' menu to ShelveList, and select all files
>  automatically after selecting shelf when filelist is hidden.
> * Fix error caused by multiple append_diff call
> * Add tab width selector
> * Run unshelve in separated process
> * Prevent from shelving when working tree has pending-merges
> * Keep splitter positions
> * Fix copyright
> * Auto complete of shelve message
> * Many trivial fixes about text, message, shortcut, etc.
>
>
> --
> https://code.launchpad.net/~hid-iwata/qbzr/qshelve/+merge/60024
> Your team QBzr Developers is requested to review the proposed merge of lp:~hid-iwata/qbzr/qshelve into lp:qbzr.
>

--
INADA Naoki  <email address hidden>

Revision history for this message
Alexander Belchenko (bialix) wrote :

iwata пишет:
> Now, I've implement all planned features and fixes.
> Please check it out.

Cool! I will review it over the weekend and will be happy to merge it.
Thanks!

--
All the dude wanted was his rug back

Revision history for this message
Alexander Belchenko (bialix) wrote :

I've landed DiffItem refactoring. Please, merge from trunk to simplify
the review diff.

lp:~hid-iwata/qbzr/qshelve updated
1413. By IWATA Hidetaka

merge from trunk

Revision history for this message
IWATA Hidetaka (hid-iwata) wrote :

Done.

> I've landed DiffItem refactoring. Please, merge from trunk to simplify
> the review diff.

BTW, I made 22x22/unidiff.png. Do you need it?
http://dl.dropbox.com/u/16802579/unidiff-22x22.png

lp:~hid-iwata/qbzr/qshelve updated
1414. By IWATA Hidetaka

Rewrite icons / Remove unused icons

Revision history for this message
IWATA Hidetaka (hid-iwata) wrote :

I've pushed new revision.

This revision includes only icon changes, no program codes were changed.

lp:~hid-iwata/qbzr/qshelve updated
1415. By IWATA Hidetaka

qshelve/qunshelve : (fix) --ui-mode option does not work

1416. By IWATA Hidetaka

qshelve : Show paths in title bar when subdirs or files are specified by arguments.

1417. By IWATA Hidetaka

qshelve : use ngettext, instead of '... file(s) ...'

Revision history for this message
IWATA Hidetaka (hid-iwata) wrote :

I've pushed new revisions include some trivial fixes.
* --ui-mode does not work
* show paths in title bar when FILE arguments are provided.
* use ngettext instead of "... file(s) ..."

lp:~hid-iwata/qbzr/qshelve updated
1418. By IWATA Hidetaka

Revert unintended rename.

Revision history for this message
IWATA Hidetaka (hid-iwata) wrote :

I pushed one more revision.
I renamed NEW.txt in past revision by mistake :-(, this fixes it.

Revision history for this message
Alexander Belchenko (bialix) wrote :

iwata пишет:
> I pushed one more revision.
> I renamed NEW.txt in past revision by mistake :-(, this fixes it.

Many thanks for that, Hidetaka.
I hope I can review it and land it very soon.

Revision history for this message
Alexander Belchenko (bialix) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '__init__.py'
2--- __init__.py 2011-05-30 09:51:43 +0000
3+++ __init__.py 2011-06-07 22:54:29 +0000
4@@ -131,6 +131,8 @@
5 ('bzrlib.plugins.qbzr.lib.commands', 'cmd_qpush', []),
6 ('bzrlib.plugins.qbzr.lib.commands', 'cmd_qrevert', []),
7 ('bzrlib.plugins.qbzr.lib.commands', 'cmd_qrun', ['qcmd']),
8+ ('bzrlib.plugins.qbzr.lib.commands', 'cmd_qshelve', []),
9+ ('bzrlib.plugins.qbzr.lib.commands', 'cmd_qunshelve', []),
10 ('bzrlib.plugins.qbzr.lib.commands', 'cmd_qtag', []),
11 ('bzrlib.plugins.qbzr.lib.commands', 'cmd_quncommit', []),
12 ('bzrlib.plugins.qbzr.lib.commands', 'cmd_qupdate', ['qup']),
13
14=== added file 'data/16x16/accessories-text-editor.png'
15Binary files data/16x16/accessories-text-editor.png 1970-01-01 00:00:00 +0000 and data/16x16/accessories-text-editor.png 2011-06-07 22:54:29 +0000 differ
16=== added file 'data/16x16/complete.png'
17Binary files data/16x16/complete.png 1970-01-01 00:00:00 +0000 and data/16x16/complete.png 2011-06-07 22:54:29 +0000 differ
18=== added file 'data/16x16/delete.png'
19Binary files data/16x16/delete.png 1970-01-01 00:00:00 +0000 and data/16x16/delete.png 2011-06-07 22:54:29 +0000 differ
20=== added file 'data/16x16/document-properties.png'
21Binary files data/16x16/document-properties.png 1970-01-01 00:00:00 +0000 and data/16x16/document-properties.png 2011-06-07 22:54:29 +0000 differ
22=== added file 'data/16x16/edit-find.png'
23Binary files data/16x16/edit-find.png 1970-01-01 00:00:00 +0000 and data/16x16/edit-find.png 2011-06-07 22:54:29 +0000 differ
24=== added file 'data/16x16/format-text-bold.png'
25Binary files data/16x16/format-text-bold.png 1970-01-01 00:00:00 +0000 and data/16x16/format-text-bold.png 2011-06-07 22:54:29 +0000 differ
26=== added file 'data/16x16/go-down.png'
27Binary files data/16x16/go-down.png 1970-01-01 00:00:00 +0000 and data/16x16/go-down.png 2011-06-07 22:54:29 +0000 differ
28=== added file 'data/16x16/go-up.png'
29Binary files data/16x16/go-up.png 1970-01-01 00:00:00 +0000 and data/16x16/go-up.png 2011-06-07 22:54:29 +0000 differ
30=== added file 'data/16x16/unidiff.png'
31Binary files data/16x16/unidiff.png 1970-01-01 00:00:00 +0000 and data/16x16/unidiff.png 2011-06-07 22:54:29 +0000 differ
32=== added file 'data/16x16/whitespace.png'
33Binary files data/16x16/whitespace.png 1970-01-01 00:00:00 +0000 and data/16x16/whitespace.png 2011-06-07 22:54:29 +0000 differ
34=== added file 'data/22x22/delete.png'
35Binary files data/22x22/delete.png 1970-01-01 00:00:00 +0000 and data/22x22/delete.png 2011-06-07 22:54:29 +0000 differ
36=== added file 'data/22x22/internet-news-reader.png'
37Binary files data/22x22/internet-news-reader.png 1970-01-01 00:00:00 +0000 and data/22x22/internet-news-reader.png 2011-06-07 22:54:29 +0000 differ
38=== added file 'data/22x22/select-all.png'
39Binary files data/22x22/select-all.png 1970-01-01 00:00:00 +0000 and data/22x22/select-all.png 2011-06-07 22:54:29 +0000 differ
40=== added file 'data/22x22/shelve.png'
41Binary files data/22x22/shelve.png 1970-01-01 00:00:00 +0000 and data/22x22/shelve.png 2011-06-07 22:54:29 +0000 differ
42=== added file 'data/22x22/unidiff.png'
43Binary files data/22x22/unidiff.png 1970-01-01 00:00:00 +0000 and data/22x22/unidiff.png 2011-06-07 22:54:29 +0000 differ
44=== added file 'data/22x22/unselect-all.png'
45Binary files data/22x22/unselect-all.png 1970-01-01 00:00:00 +0000 and data/22x22/unselect-all.png 2011-06-07 22:54:29 +0000 differ
46=== added file 'data/22x22/unshelve.png'
47Binary files data/22x22/unshelve.png 1970-01-01 00:00:00 +0000 and data/22x22/unshelve.png 2011-06-07 22:54:29 +0000 differ
48=== modified file 'data/qbzr.qrc'
49--- data/qbzr.qrc 2010-08-30 23:32:31 +0000
50+++ data/qbzr.qrc 2011-06-07 22:54:29 +0000
51@@ -27,6 +27,15 @@
52 <file>16x16/folder-conflict.png</file>
53 <file>16x16/process-working.gif</file>
54
55+ <file>16x16/delete.png</file>
56+ <file>16x16/complete.png</file>
57+ <file>16x16/unidiff.png</file>
58+ <file>16x16/format-text-bold.png</file>
59+ <file>16x16/go-down.png</file>
60+ <file>16x16/go-up.png</file>
61+ <file>16x16/whitespace.png</file>
62+ <file>16x16/document-properties.png</file>
63+
64 <file>22x22/document-properties.png</file>
65 <file>22x22/edit-find.png</file>
66 <file>22x22/go-jump.png</file>
67@@ -35,5 +44,16 @@
68 <file>22x22/view-split-left-right.png</file>
69 <file>22x22/system-run.png</file>
70
71+ <file>16x16/edit-find.png</file>
72+ <file>16x16/accessories-text-editor.png</file>
73+
74+ <file>22x22/shelve.png</file>
75+ <file>22x22/unshelve.png</file>
76+ <file>22x22/delete.png</file>
77+
78+ <file>22x22/select-all.png</file>
79+ <file>22x22/unselect-all.png</file>
80+ <file>22x22/internet-news-reader.png</file>
81+
82 </qresource>
83 </RCC>
84
85=== modified file 'lib/annotate.py'
86--- lib/annotate.py 2011-05-11 11:49:14 +0000
87+++ lib/annotate.py 2011-06-07 22:54:29 +0000
88@@ -30,7 +30,6 @@
89 from bzrlib.plugins.qbzr.lib.i18n import gettext
90 from bzrlib.plugins.qbzr.lib.util import (
91 BTN_CLOSE,
92- FindToolbar,
93 QBzrWindow,
94 ToolBarThrobberWidget,
95 get_apparent_author_name,
96@@ -41,6 +40,7 @@
97 get_tab_width_pixels,
98 runs_in_loading_queue,
99 )
100+from bzrlib.plugins.qbzr.lib.widgets.toolbars import FindToolbar
101 from bzrlib.plugins.qbzr.lib.uifactory import ui_current_widget
102 from bzrlib.plugins.qbzr.lib.trace import reports_exception
103 from bzrlib.plugins.qbzr.lib.logwidget import LogList
104
105=== modified file 'lib/commands.py'
106--- lib/commands.py 2011-04-27 11:56:41 +0000
107+++ lib/commands.py 2011-06-07 22:54:29 +0000
108@@ -76,6 +76,8 @@
109 )
110 from bzrlib.plugins.qbzr.lib.uifactory import QUIFactory
111 from bzrlib.plugins.qbzr.lib.send import SendWindow
112+from bzrlib.plugins.qbzr.lib.shelvewindow import ShelveWindow
113+from bzrlib.plugins.qbzr.lib.widgets.shelvelist import ShelveListWindow
114 ''')
115
116 from bzrlib.plugins.qbzr.lib.diff_arg import DiffArgProvider
117@@ -1066,3 +1068,50 @@
118 execute=execute)
119 window.show()
120 self._application.exec_()
121+
122+class cmd_qshelve(QBzrCommand):
123+ """Shelve selected changes away."""
124+ takes_args = ['file*']
125+ takes_options = [
126+ ui_mode_option,
127+ bzr_option('shelve', 'list'),
128+ bzr_option('shelve', 'directory'),
129+ Option('complete', help='Show complete files.'),
130+ Option('ignore-whitespace', short_name='w',
131+ help="Ignore whitespace when finding differences.(Only work when --list specified)"),
132+ Option('encoding', type=check_encoding,
133+ help='Encoding of files content (default: utf-8).'),
134+ ]
135+
136+ def _qbzr_run(self, file_list=None, list=False, directory=None, ui_mode=False,
137+ complete=False, ignore_whitespace=False, encoding=None):
138+ if list:
139+ initial_tab = 1
140+ else:
141+ initial_tab = 0
142+ self.main_window = ShelveWindow(file_list=file_list, directory=directory, ui_mode=ui_mode,
143+ initial_tab=initial_tab, complete=complete,
144+ ignore_whitespace=ignore_whitespace, encoding=encoding)
145+ self.main_window.show()
146+ self._application.exec_()
147+
148+class cmd_qunshelve(QBzrCommand):
149+ """Restore shalved changes."""
150+ takes_options = [
151+ ui_mode_option,
152+ bzr_option('unshelve', 'directory'),
153+ Option('complete', help='Show complete files.'),
154+ Option('ignore-whitespace', short_name='w',
155+ help="Ignore whitespace when finding differences.(Only work when --list specified)"),
156+ Option('encoding', type=check_encoding,
157+ help='Encoding of files content (default: utf-8).'),
158+ ]
159+
160+ def _qbzr_run(self, directory=None, ui_mode=False,
161+ complete=False, ignore_whitespace=False, encoding=None):
162+ self.main_window = ShelveWindow(directory=directory, ui_mode=ui_mode,
163+ initial_tab=1, complete=complete,
164+ ignore_whitespace=ignore_whitespace, encoding=encoding)
165+ self.main_window.show()
166+ self._application.exec_()
167+
168
169=== modified file 'lib/diffwindow.py'
170--- lib/diffwindow.py 2011-05-20 08:51:43 +0000
171+++ lib/diffwindow.py 2011-06-07 22:54:29 +0000
172@@ -49,7 +49,6 @@
173 from bzrlib.plugins.qbzr.lib.i18n import gettext, ngettext, N_
174 from bzrlib.plugins.qbzr.lib.util import (
175 FilterOptions,
176- FindToolbar,
177 QBzrWindow,
178 ToolBarThrobberWidget,
179 get_icon,
180@@ -61,6 +60,7 @@
181 runs_in_loading_queue,
182 show_shortcut_hint,
183 )
184+from bzrlib.plugins.qbzr.lib.widgets.toolbars import FindToolbar
185 from bzrlib.plugins.qbzr.lib.uifactory import ui_current_widget
186 from bzrlib.plugins.qbzr.lib.trace import reports_exception
187 from bzrlib.plugins.qbzr.lib.encoding_selector import EncodingMenuSelector
188
189=== modified file 'lib/resources.py'
190--- lib/resources.py 2010-08-30 23:32:31 +0000
191+++ lib/resources.py 2011-06-07 22:54:29 +0000
192@@ -2,8 +2,8 @@
193
194 # Resource object code
195 #
196-# Created: Ma aug. 31 02:22:47 2010
197-# by: The Resource Compiler for PyQt (Qt v4.7.0)
198+# Created: ? 5 25 07:13:26 2011
199+# by: The Resource Compiler for PyQt (Qt v4.5.2)
200 #
201 # WARNING! All changes made in this file will be lost!
202
203@@ -406,6 +406,43 @@
204 \x16\x17\x40\x85\x0b\x40\x43\x9c\xa7\x8c\xdf\xa5\x60\x26\x10\x48\
205 \xc7\x35\x22\x8f\x0b\xf0\x27\x9b\x2f\xb2\xa4\xb3\x87\x63\xc7\x00\
206 \x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
207+\x00\x00\x02\x21\
208+\x89\
209+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
210+\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\
211+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
212+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
213+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
214+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
215+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\x9e\x49\x44\
216+\x41\x54\x38\x8d\xd5\xd5\x5d\x4f\xa3\x40\x14\x80\xe1\xf7\x0c\x38\
217+\x6d\x19\x1a\x5d\x13\xdb\x78\xe1\x57\xff\x28\xe1\x77\x9a\x88\xbd\
218+\x30\xc6\x26\xab\x75\x57\x40\xed\x30\xb3\x17\xa4\xd4\x0a\xdd\xb0\
219+\x6b\x7a\xe1\x5c\x0d\x73\x98\x27\x87\x33\x70\x10\xef\x3d\xfb\x18\
220+\x6a\x2f\xea\x3e\xe1\x70\x3d\x49\xd3\xf4\x01\x98\x7c\xc1\x5a\x24\
221+\x49\x32\x5d\x5f\x7c\xcc\xf8\x2b\x68\x6b\x7f\xf8\x39\x9a\x24\x49\
222+\x2f\xa5\x3e\x73\x8f\x88\x90\xa6\x69\x2b\xde\x82\x01\x16\x8b\xc5\
223+\x4e\x50\x44\x88\xe3\x98\xb7\x37\x47\x10\x08\x71\x1c\x75\xde\xf7\
224+\x4f\x87\x27\x22\x18\x53\xa3\xb7\xb7\x4b\xb2\x6c\x89\xb5\xae\x3f\
225+\xac\xb5\xc6\x98\x18\xa5\x36\xe1\x75\xa6\xd6\x7a\xe6\xf3\x67\x9c\
226+\xf3\x58\xeb\xb8\xbb\xfb\xd5\x0f\xf6\x1e\xa2\x28\xa2\xaa\x20\x8a\
227+\x4c\x83\x46\x91\xc1\x5a\x4f\x96\x2d\xa9\xaa\x3a\xcb\xc1\x20\xe0\
228+\xec\xec\xb0\x1f\xec\x9c\xe7\xe6\xe6\x89\x2c\x5b\xe2\x3d\x8c\x46\
229+\x23\x8c\x31\x78\x2f\x5b\xa8\xd6\x01\x57\x57\xc7\xa8\x1d\xc5\x6c\
230+\x2d\xdf\xdf\xff\xa6\x28\x56\x54\x95\x63\x3e\x7f\x46\xeb\x01\xa0\
231+\xc8\xb2\xa7\xa6\x9e\x07\x07\x8a\xd9\xec\x07\xce\xad\x10\x91\x4e\
232+\xb8\xf5\x56\x9c\x9e\x8e\x79\x7c\x7c\xc1\x5a\xc7\xeb\xab\xe5\xfa\
233+\xfa\x67\x53\x4f\x80\x30\x54\xcc\x66\xc7\x78\xef\x28\x8a\x82\x38\
234+\x8e\xfb\x65\xac\x14\x9c\x9f\x6f\xea\xf6\xfe\x5e\x35\x68\x10\xd4\
235+\x99\x8a\x38\xf2\xfc\xa5\xbb\x06\xbb\x60\x11\x61\x38\x0c\x98\x4e\
236+\xcd\xd6\x7a\x8d\x1e\xa1\x94\x27\xcf\xf3\xbf\xa2\x9d\x30\x40\x51\
237+\x14\x9c\x9c\x18\xc6\xe3\x41\x83\x5e\x5e\x1e\x11\x04\x42\x9e\xe7\
238+\xf4\x69\xb5\x9d\x5f\x9e\xb5\x96\xb2\x2c\xb9\xb8\x38\xa4\x2c\x57\
239+\x0c\x87\x21\x55\x55\x3f\x7e\xdf\xfe\xdd\x09\x4f\x26\x9b\x7e\xa2\
240+\xb5\x6e\xe6\x51\x34\xea\x85\x76\xc2\x5d\x0d\xe5\x7f\xc6\xc7\x1a\
241+\xef\xee\x3c\xfd\xc6\xd6\x7e\xf9\x76\xff\xbc\x3f\xef\x17\xab\xe2\
242+\x01\x51\x83\x55\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
243+\
244 \x00\x00\x01\x3c\
245 \x89\
246 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
247@@ -428,6 +465,158 @@
248 \x36\x3e\x1c\x9f\xc5\xb3\xf8\x0f\xc5\xfc\xc6\x8f\xed\x04\x62\x3b\
249 \xd9\x69\x52\x53\x1d\xd3\x27\xd3\xf0\x95\x3a\x8b\x52\x56\x44\x00\
250 \x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
251+\x00\x00\x04\x7e\
252+\x89\
253+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
254+\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\
255+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
256+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\
257+\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
258+\xd5\x0b\x0a\x0d\x34\x15\x48\x65\x72\x06\x00\x00\x04\x0b\x49\x44\
259+\x41\x54\x38\xcb\xad\x95\x5d\x6c\x14\x55\x14\xc7\x7f\x33\xfb\x39\
260+\x9d\x6d\xbb\xd3\x65\x97\xdd\xd6\x65\x59\x3e\x96\x22\x05\xda\x92\
261+\x56\x8b\x1f\x58\x13\x1f\x30\x42\x34\x46\x7c\xd0\x17\xd3\xf8\x00\
262+\x35\x48\x55\x52\x03\xfa\x20\x46\x02\x18\x8b\x69\x6c\x1f\x44\x1f\
263+\x34\x8a\x92\xc8\x8b\x0f\x68\x0c\x31\x36\xc6\x88\x34\x41\x54\xac\
264+\x25\xb4\xb5\x36\xc5\xd6\xdd\xb6\xd3\x76\xbf\x67\x67\x77\x7c\x68\
265+\x77\x6c\xa9\x50\x4c\xfc\x27\x37\xe7\xe6\x9e\x73\xfe\xf7\x7f\xcf\
266+\x3d\x33\x57\x60\x01\x9e\x7b\xa3\xfd\xfd\x3f\x12\x95\x8f\xc6\xa6\
267+\xb4\x8a\x85\xeb\x92\xcd\x48\xfa\x5c\xf1\xbe\x95\xf2\x6f\x6d\x9d\
268+\xaf\x7e\xf6\x1d\xb7\x01\xa1\x38\xe9\xfa\xa0\xad\xf6\xec\x8f\xe1\
269+\x8b\xab\x23\x1b\xb3\xa1\x95\x3e\x31\x9e\x13\x9d\x55\x65\x4e\xf1\
270+\xcf\xb8\xc6\x54\x3a\xcb\xf4\xd5\xf3\x43\xa9\x64\xc6\x11\x56\xfa\
271+\xdb\xbb\x5f\x3b\xfd\xf1\x72\xc4\x96\x22\xe9\xf9\xfe\xc0\xd9\x55\
272+\x5b\x1e\x70\x0f\x0f\xf4\xdb\x07\x87\x87\x6d\x23\xbf\x0f\x8a\x23\
273+\x13\x93\xd8\x4a\x2b\x50\x9c\x76\x9c\xde\x75\xca\x74\xba\x50\x76\
274+\x3d\xe6\xdc\xb9\xeb\x11\xcf\xa5\x8b\xdf\xfc\x3a\x70\x2b\x62\x11\
275+\xe0\x87\x6b\xce\xe3\x77\xac\xb0\x0e\x27\x06\xbe\xba\xda\xe8\xbd\
276+\xf0\x74\x4f\xc7\x3e\xf1\xbe\x50\xef\xce\xdc\xcc\xf5\xd9\xd1\xc1\
277+\x2b\x46\x74\x36\x4e\x3c\x99\x40\xf1\x05\x90\x7d\x41\xc7\x2f\xb1\
278+\xad\x9f\xbe\xf4\xfa\x2e\x79\x59\x62\x35\x25\xad\xb3\xe4\x13\x33\
279+\xf7\xaf\x1f\x7d\xe8\xe8\x8b\xef\x7d\x02\x70\xec\xe0\x47\x5f\x36\
280+\x04\x47\x8f\x24\x54\x55\x48\xce\x4e\xa1\x65\x52\x00\xf8\x82\xeb\
281+\x45\xaf\xac\x8d\x4c\x68\xe1\xee\x65\x6b\xfc\xd4\xa1\x17\x3e\x0f\
282+\x3b\x72\x3f\xcf\xaa\x85\xc3\x0b\x9d\x0e\x49\xe0\xdb\xa9\x10\xab\
283+\x37\xd5\x2f\x4a\x72\xa7\xfb\x98\xf8\x6b\x9c\xca\xc2\xf4\x8d\x7c\
284+\xed\x9d\x6f\x77\x9d\x00\xb0\x02\x04\xcb\xe2\x5f\xa4\x26\xed\xdd\
285+\xc7\x8e\xbe\xb9\x64\xe7\x07\xdb\xba\x96\xac\x65\x3c\x77\x31\x3a\
286+\xd4\xc3\x87\x27\x17\xe9\xe0\xe5\x43\x07\x8f\x03\x27\xcc\x52\xa4\
287+\xc6\xed\xd7\x14\xb7\x97\x54\x6a\xee\xb8\xc9\x64\xd2\x1c\x26\x59\
288+\xfa\x9f\xb9\xc5\x66\x5f\x14\x37\x32\x3a\x42\x32\x99\xc4\xeb\xf5\
289+\xb2\xff\x40\x6b\xad\xa9\x18\x58\xeb\xf7\x07\x00\x48\x24\x13\xb8\
290+\x64\xd7\xbf\x2a\x2d\xc2\x28\x14\x00\x78\xec\xc8\x69\x74\x4d\xe3\
291+\xcc\xe1\x3d\x00\x28\x8a\x42\x2c\x16\x8b\x00\x97\xc5\xf9\xd8\xdd\
292+\x75\x5b\xeb\x49\xa7\xd3\x08\x08\xa6\xd2\xea\x86\x1d\x54\x37\xec\
293+\xa0\x5c\xf1\x02\x90\xcd\x66\xe6\x6c\x3a\xce\xba\xda\xbb\x59\x53\
294+\xd3\x00\x40\x89\x54\x02\xc0\x3d\x4d\xf7\x02\x6c\x36\x4b\x01\x3c\
295+\x5c\x59\x59\xb5\x48\xd5\xbb\xcf\x37\x33\xf0\xd3\xf7\x00\x8c\x8d\
296+\x0e\x81\x61\x90\xd7\x73\x64\xd2\x49\xe2\x33\x2a\x00\x43\x57\x7a\
297+\x79\x67\xdf\x76\x33\x27\x18\x0c\x01\xbc\x02\x20\xee\x3f\xd0\x5a\
298+\x2b\x49\x25\xd8\xed\x76\x3c\x1e\x8f\x19\x14\xf0\x86\xe8\x68\xd9\
299+\x46\x7f\x6f\x0f\x15\xde\x4a\x0a\x86\x31\x5f\x07\x83\x32\xb7\x87\
300+\x81\xcb\x17\xe8\x68\xd9\x46\xa8\x32\x02\x80\x2c\xcb\xf3\xe5\xf0\
301+\xb0\xff\x40\x6b\xad\x08\x44\x56\xfa\xfc\x00\xa8\xaa\x8a\x2c\xcb\
302+\xc8\xb2\x8c\x28\x8a\x84\xab\x36\xd0\xb9\xb7\xc9\x24\x17\x05\x01\
303+\x57\x79\x05\x03\x97\x2f\xd0\xb9\xb7\x89\x70\xd5\x06\x33\x5e\x55\
304+\xe7\x4e\x51\x5e\x56\x0e\x10\x11\x81\xcd\x77\x6e\xdc\x44\x2e\x97\
305+\x33\xac\x56\x0b\x33\x33\x33\xa8\xaa\x8a\x24\x49\xc8\xb2\x4c\x4d\
306+\xa4\x9e\x53\x6d\xcd\xf4\xf7\xf6\xe0\x5e\x11\x60\xb8\xef\x12\xa7\
307+\xda\x9a\xa9\x89\xd4\x9b\x84\xaa\xaa\x92\xcf\xeb\x24\x12\x09\x63\
308+\xed\x9a\xb5\x00\x4d\x62\x36\x9b\xdd\xe2\xf7\xfb\x71\xb9\x5c\x82\
309+\xae\xe7\x29\xcc\xdf\x78\x31\x41\x55\x55\x2a\x4a\x03\x74\x3c\xdb\
310+\x40\x7f\x6f\x0f\x6f\x3d\x53\x4f\x45\x69\xc0\xf4\x01\xe4\xf3\x3a\
311+\x08\xa0\x28\x8a\x10\x0c\xae\x22\x93\xc9\x96\x5a\x1d\x0e\xc7\xee\
312+\x48\x24\x62\xb6\xcb\xcd\xa0\x28\x8d\x7c\x7d\xb2\x71\xd9\xdf\x65\
313+\x75\x75\x35\x4e\xa7\xa3\xc5\x0a\x10\x8b\xc5\x98\x9c\x9c\xbc\x79\
314+\xdf\x16\x2f\xee\x36\x7c\x5e\xef\x5c\x6b\x16\x3f\x10\x34\x4d\xc3\
315+\xe3\xf1\x70\xee\xdc\x39\x1c\x0e\x07\xb2\xab\x84\x52\x57\x19\xa2\
316+\x28\x22\x49\x12\x82\x20\x20\x49\x12\x2e\x97\x0b\x55\x55\xf1\xf9\
317+\x7c\x44\xa3\xd1\x25\xb6\x48\x2c\x2e\xdc\x4d\xd7\x75\x2c\x16\x0b\
318+\x86\x61\x20\x0a\x16\xb2\xd9\x2c\x9a\xa6\x61\x18\x06\x36\x9b\xed\
319+\x96\xca\x6f\x84\xa9\x58\x10\x04\xd2\xe9\x34\x75\x75\xb5\xe8\x7a\
320+\x1e\x8b\xc5\x82\xae\xeb\x66\xa0\xdd\x6e\xe7\xbf\xc0\x0a\x10\x8d\
321+\x46\x0d\xbf\xdf\x3f\xff\x4c\x79\x96\x4d\x72\xbb\xdd\x00\x84\xc3\
322+\xe1\x25\x76\x6c\x6c\xcc\x00\x04\xe1\x89\x27\x1f\xdf\x13\x08\xf8\
323+\xcf\xf0\x3f\x62\x6c\x6c\x7c\xfb\xdf\xe7\x60\x9f\x53\x70\x22\xd1\
324+\x6a\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
325+\x00\x00\x04\xbb\
326+\x89\
327+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
328+\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\
329+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
330+\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\
331+\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
332+\xd6\x06\x13\x0e\x09\x04\x19\x6e\x0a\x19\x00\x00\x00\x0f\x74\x45\
333+\x58\x74\x43\x6f\x6d\x6d\x65\x6e\x74\x00\x69\x64\x20\x6c\x6f\x67\
334+\x6f\x86\xc6\x77\xb9\x00\x00\x04\x2d\x49\x44\x41\x54\x38\xcb\xad\
335+\x94\x6d\x68\x5b\x55\x18\xc7\xff\xe7\xdc\x7b\x93\xa6\x6d\x5e\x7a\
336+\x6f\xfa\x92\x6c\xb6\xb7\xa9\x6d\xad\xdb\x2c\x1b\x56\x3b\x69\xe9\
337+\x60\x2f\xe0\x14\x75\x8a\x53\x14\xfd\xa0\x68\x15\xf4\x83\x30\xdf\
338+\xf0\xad\x20\xa3\xc3\x2f\x22\x83\xe1\x9c\x08\x7e\x11\x67\x4b\x37\
339+\x05\xab\x22\xd2\x95\x34\x1d\x6a\x05\x3b\x66\x2d\xeb\xda\x94\x36\
340+\x36\x4d\xba\x34\xe9\x4d\x9b\x9b\xb7\x7b\x8e\x1f\x9a\xa6\x8d\x19\
341+\x0a\x6e\x7f\x38\xdc\xe7\xf9\x5f\xce\x8f\x87\xe7\x3c\x3c\x04\x5b\
342+\xf4\xd1\xc9\x0f\x87\x74\x3d\xb1\x0f\xff\x43\x02\xa5\x9f\xbc\x7a\
343+\xec\xcd\xee\x8d\x5c\xdc\xfa\x53\xd7\x13\xfb\x5e\xec\x7e\x09\xe9\
344+\x74\x3a\xef\x71\xce\x8b\x20\x1b\x1e\x21\x04\x00\x20\x49\x12\x4e\
345+\x9f\x39\xf5\x3c\x80\x4d\xb0\x7a\xb8\xf7\x3d\x00\x3d\xeb\x29\x43\
346+\x22\x91\x40\x2c\x16\x2b\x02\x6e\xe4\x92\x24\x81\x52\x5a\xe0\x39\
347+\x1c\x0e\x00\x80\x7a\xb8\x77\xe3\x52\x8f\x08\xa0\xe7\xed\x57\x8e\
348+\x62\x22\xa0\x41\x9b\xfe\x12\x9a\xa6\x61\x61\x61\xe1\xba\x50\x00\
349+\x10\x04\x01\x84\x10\x58\x2c\x96\xbc\xc7\x18\x83\xa6\x69\x78\xf8\
350+\xd1\xc7\x01\x00\x03\x7d\xdf\xf7\xe4\x5b\x31\x17\xd4\x91\xf6\xc7\
351+\x11\x8b\xc5\xe0\xf7\xfb\xff\xb5\x15\x00\xf2\x55\x03\x80\xc7\xe3\
352+\xc1\xdc\x62\x1c\x86\x2d\x03\x57\xa5\x54\xd8\x63\x49\x14\xf1\x67\
353+\x62\x3b\x9e\x39\xf1\x53\x01\x20\xd7\xc6\xff\x50\x08\xc0\x76\xec\
354+\xdc\x52\x43\x1e\xcc\x01\xec\xda\x7b\x00\x37\xa2\x43\x9f\xbd\x8c\
355+\xcb\xaf\x7f\x5c\x08\x3e\xb0\x5b\xc1\x8d\x8a\x9d\xfc\x02\x08\x68\
356+\x85\xe0\x89\x9c\x71\xb3\x44\xd4\x7b\x7b\x2f\x80\xa0\xeb\x66\x42\
357+\x39\xb8\x8f\x00\xc0\x89\x0f\x8e\xf3\xc7\x8e\x3e\x71\x6d\x39\x12\
358+\xb1\x9f\xf9\xf4\x74\x7a\xff\xfe\x83\xd2\xd8\xd8\xaf\x68\x6f\xdf\
359+\x4b\xbd\x5e\x6f\xaa\xab\xab\xcb\x34\x7e\xe9\xf7\xcc\xee\xd6\x3d\
360+\x26\xdf\x45\x5f\xaa\xed\xce\x36\x69\x7c\x7c\x3c\xdd\xda\xda\x6a\
361+\x0a\x87\x97\xd8\xe5\x3f\x2e\x65\x9f\x7a\xf2\x69\x8b\x2c\xcb\xd1\
362+\x81\xf3\xfd\xce\x37\x5e\x7b\x8b\xd0\xcd\xf1\x21\xd9\x4c\x36\xb3\
363+\xa2\x54\x3a\x57\xe3\xf1\xd5\x58\x4d\xb5\xcb\x60\x8c\x6b\x6e\xf7\
364+\x36\xc3\x30\x58\xa4\xa2\x42\x36\x44\x49\x8a\xb9\xaa\xdd\x2b\x7a\
365+\x42\x0f\xc9\xb2\x0c\x23\xcb\x96\x5c\x2e\x17\xb7\xd9\xac\x11\x9b\
366+\xc3\xbe\x62\x36\x97\x90\xa2\xa9\x10\x05\xc9\x18\xfd\x79\xe4\x47\
367+\x45\x56\x0e\x35\x35\x36\x61\x76\xce\x9f\xae\xad\xbd\x85\x45\xa3\
368+\xcb\xba\x5c\x21\x27\xe3\x71\xcd\x52\x53\x53\xcd\xd6\xd6\xd6\x58\
369+\x4d\x4d\x35\x21\x14\x44\xad\x57\x85\xaa\xaa\x2a\x3a\x1f\x98\x65\
370+\xb2\x2c\x33\x8b\xd9\x22\xe5\x0b\xcd\x07\x02\xcd\x80\xa1\xad\xe3\
371+\x9e\xce\x88\xb3\xd2\x99\x51\xeb\xea\x75\x45\x71\x52\x4a\xc9\x8c\
372+\xd5\x56\x9e\x95\x2b\x64\xdd\x66\xb5\x1b\x6e\xb7\x6b\x59\x51\x9c\
373+\x84\x71\xc6\xec\x36\xbb\x51\x56\x56\xc6\x14\xc5\x89\xc9\xc9\x09\
374+\x81\x0a\x34\x5b\x04\x26\x20\x19\x41\x14\xd0\xd4\xdc\xac\x5e\x9d\
375+\xba\x32\xa9\xd6\xa9\x19\x87\xdd\x2e\x86\x23\xa1\x71\x45\x71\x96\
376+\xaa\xaa\xba\x6a\xb3\x59\x05\xbf\x7f\xe6\x8e\xb1\xb1\x5f\xb6\x99\
377+\x4c\x12\xac\xd6\x72\x63\xea\xea\x94\xe5\xc8\x43\x8f\xd4\x07\x17\
378+\x82\x15\xa1\xd0\x62\xaa\x08\x9c\xd0\x13\x61\x49\x94\x78\x5f\xff\
379+\xd9\x68\x3a\x9b\x9a\xd1\xb4\x58\xb4\x7f\xe0\x2b\xad\xbc\xb4\xbc\
380+\x6d\x39\xb2\x34\x4b\x08\x49\x7c\xf7\xc3\xb7\xf4\xf6\x1d\x2d\xd8\
381+\xb9\x6b\x07\x92\xc9\x54\x2a\xbc\x14\x0e\xce\xfa\xa7\x31\x3a\xea\
382+\xc3\x83\x0f\x1c\x59\x89\xc5\x62\xee\xe2\xb5\xc9\x91\x6e\x6a\x69\
383+\xba\x98\xd4\xf5\xc0\xf4\xd4\xcc\xfd\xfe\x19\xbf\x51\xe7\xa9\xfd\
384+\x5c\x14\x45\x3e\x3c\x32\x7c\x1f\xe7\x9c\xdd\xd6\xd2\x7c\x8a\x73\
385+\xfe\x2e\x21\x04\x65\xd6\xd2\xf3\x5e\xdf\xf0\x1e\x02\xf2\x9b\xa9\
386+\xc4\x94\xfd\xfa\x9b\x73\x77\x77\x76\x76\x8d\x00\xe8\x28\x00\x33\
387+\x66\x64\x58\x8a\x59\x38\xe7\xb4\xa1\xd1\x33\xb8\x75\x2e\x6f\x6d\
388+\x6c\x18\x04\x00\xc3\x30\x84\xbf\x82\x81\xe3\x00\x60\x36\x9b\x50\
389+\xef\x51\x07\x29\xa5\xdc\x6a\x75\x54\x36\x37\x36\x97\xa6\x92\xa9\
390+\xd4\xd6\x8a\x45\x00\xf0\xfa\xbc\xa5\x8d\x8d\x4d\x1d\x62\xca\x8c\
391+\x64\x2a\xb9\xbe\x3c\xd6\x97\x39\xa1\x94\x80\x10\x80\x73\x60\x3d\
392+\x26\xe0\x9c\x83\x52\x0a\x41\x10\x51\x66\x2e\x85\xbe\xa6\xd3\xa1\
393+\x0b\x43\xc9\x1c\xd7\x2c\x02\x28\x0b\x06\x17\xdf\x07\xf0\x4e\xfb\
394+\x5d\xed\x11\x42\x60\x89\xc7\xe3\xc8\x64\x32\xe0\x9c\x43\x10\x04\
395+\x6e\x18\x1c\x06\x33\xd6\x1f\x85\x50\x08\xc2\x26\x58\x14\x45\x98\
396+\x4c\x25\x08\x04\xe6\xa3\x8b\xa1\x85\xb6\x68\x34\x7a\x0e\x80\x8b\
397+\x00\xb0\x00\x70\x3f\xd7\xfd\xec\xb1\x86\x06\xcf\x0b\xd7\x5b\xf0\
398+\xff\xfc\x16\xae\x55\x92\x3f\xe1\xf0\xd2\x60\xdf\xd9\xfe\xde\xf9\
399+\xf9\xc0\x15\x02\x80\x00\x30\x01\x50\x00\xd8\x73\x31\xcd\xf9\x04\
400+\x00\x43\xbe\x31\x20\xb9\x98\x03\x30\x72\xb9\x90\x8b\x0d\x00\x49\
401+\x00\xd7\x00\xe8\x7f\x03\x8a\xcb\xca\xec\x2d\xad\x62\x4b\x00\x00\
402+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
403 \x00\x00\x02\x90\
404 \x89\
405 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
406@@ -471,6 +660,75 @@
407 \xc0\xd0\x5a\x87\xb4\xd6\x3c\x18\xa2\x94\x22\x66\xd6\x00\x7c\xad\
408 \xb5\x02\xa0\x00\x78\x13\xc3\x1d\xe8\xf0\x1b\x97\x09\xed\xc1\x8d\
409 \x52\xf2\x20\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
410+\x00\x00\x04\x26\
411+\x89\
412+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
413+\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\
414+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
415+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
416+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01\
417+\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdb\x05\x16\
418+\x06\x08\x13\x41\x55\x76\x1b\x00\x00\x03\xa6\x49\x44\x41\x54\x38\
419+\xcb\xad\x94\x4d\x4c\x1c\x65\x18\xc7\x7f\x33\x3b\xb3\xbb\xb3\xb3\
420+\xc0\x4e\xdb\xa5\xbb\x18\xa4\x14\x58\xbe\x02\x5d\xe1\xb0\x56\x9a\
421+\x78\xd0\x84\xa4\xa4\xbd\x6c\x8b\x37\x93\xc6\x83\x1a\x22\x12\x13\
422+\xfb\x61\xec\x45\x9b\x9a\x70\x30\x0d\x09\xf1\x80\x8d\xf5\x56\x4d\
423+\x38\x61\x8c\x26\x0d\xc6\xf8\x11\x89\x89\x69\x6a\x21\x0a\x48\x29\
424+\x01\x96\xec\x14\xc6\x05\x16\xd8\xd9\x9d\x19\x0f\xca\xca\xba\x20\
425+\x96\xf8\xbf\xbc\xc9\xfb\xbc\xcf\x2f\xcf\xfb\x3c\xef\xfb\x87\x7d\
426+\xf4\xed\x2d\x1c\x0e\x20\x69\xaf\xc0\x57\x37\x39\x22\xbb\xd0\x39\
427+\xa0\xc4\xdd\x36\xaf\x5e\x91\x35\xd9\x85\x1e\x8b\x0f\x1f\x94\x5b\
428+\x5c\xf1\xd5\x2b\xb2\xd6\x59\x9f\x5d\x89\xc5\x87\x21\x75\x39\xdf\
429+\x0e\x53\x38\xbc\x64\xd9\xe2\x12\xa2\x7b\xfc\xeb\x5f\xf5\x97\xaf\
430+\x5d\x37\xd3\xff\x06\x16\xf6\x82\x66\x57\xae\x21\x89\x06\x28\x71\
431+\x70\x72\x58\x96\x03\xd8\x99\xef\xbe\xbc\x3d\x2d\x8b\x08\x77\x26\
432+\x52\x9d\xef\xbe\x97\x9d\xdf\x17\xfc\x7a\xdf\x85\xd7\xce\x47\x3f\
433+\x1a\x88\xc5\x87\xc9\x2e\xbf\x83\x20\xba\x30\x33\x9b\x48\xb2\x9b\
434+\x5c\xd6\x64\x75\x75\x19\xc5\x7f\x0c\x5f\x69\x3b\x8f\x16\x7f\x61\
435+\xe2\xee\x14\x5f\xdc\xef\xc0\x76\x8e\xec\xe4\x5d\x1a\xb8\x31\xd8\
436+\x9f\x07\xf7\xf6\xf5\x84\xbb\xa3\x83\x8b\xdb\x50\x51\x74\xe5\x9f\
437+\x82\x6d\x5b\xe4\xb2\x26\x9b\x9b\xeb\x7f\xf7\xcf\x13\x26\xbd\xee\
438+\x23\xb1\x20\xd1\xf8\xec\x6d\x64\xd9\x07\xc0\xe5\xb7\xde\x64\xe0\
439+\xc6\xa0\xb0\x73\x78\xcd\xa3\xf3\x97\x18\x1b\x8e\x23\x97\x9c\x06\
440+\xc0\xb2\x4c\x1e\xcc\xdc\xe3\xe1\xec\x38\x0b\x0b\x53\x05\xd7\x5c\
441+\x33\xc6\x39\x14\x6a\xc2\x36\xa7\xb9\x3f\x7a\x8e\xb9\xf9\x39\xd2\
442+\xe9\x34\xc1\x60\x90\xde\xbe\x9e\xe8\xce\xe1\xd5\x84\xc3\xc7\x39\
443+\xf6\xfc\x34\x63\x23\xb5\xc4\xce\x5c\x64\x6e\xe2\x7d\xea\x5a\xde\
444+\xc0\xb6\xd6\x0a\xa0\xf6\xda\x87\x6c\x6e\xc8\x2c\xfc\x76\x93\xba\
445+\xe8\x2b\x8c\x8f\x7d\x86\xe2\x55\x00\xd0\x34\x0d\x5d\xd7\x23\xc0\
446+\xdd\x6d\xf0\xd9\xa7\x4e\xb4\xe1\x38\x1e\xaa\x9e\x9b\x62\x6c\xa4\
447+\x8e\xd8\x99\x8b\x00\xfc\xf8\xf9\x07\x85\x53\x51\x04\x9a\x9e\x7e\
448+\x95\xd4\xd2\xc7\x78\xbc\x26\x02\x39\x7c\xca\x9f\xad\xe8\x38\x79\
449+\x8a\xc9\xc9\xc9\x16\xe0\xd3\xed\x56\x9c\xae\xa8\x78\x02\x00\xaf\
450+\x37\xf0\x17\xbc\x3f\xcf\xaa\xef\xd2\xa9\xef\xd2\xa9\x3a\x35\xca\
451+\xd1\x86\x5b\xcc\xfc\xf4\x0d\xe5\x95\x2f\x62\xd9\x25\x60\x9b\xf9\
452+\x73\x95\x95\x55\x00\x6f\x03\x48\xbd\x7d\x3d\x51\x45\xf1\xe1\x76\
453+\xbb\xf1\xf9\x7c\xa4\xd3\x69\xbc\xde\x00\xf5\x5d\x3a\x63\x23\xc1\
454+\x82\x62\xbd\x65\x2d\x78\xcb\x5a\x50\x0f\xb5\xf1\xf3\xf7\x27\x68\
455+\xec\xb8\x8e\xe0\x6c\x01\xa0\xaa\x2a\x1b\x1b\x1b\x68\xda\x61\x7a\
456+\xfb\x7a\xa2\x22\x10\x39\x5a\x1e\x02\xc0\x30\x0c\x54\x55\x45\x55\
457+\x55\x44\x51\xa4\xbe\x6b\xf7\x1f\x2d\x7b\x43\xb8\x6c\x3f\x5b\x6b\
458+\xe3\x08\x4a\x15\xaa\xaa\x62\x18\x06\x00\x65\xa5\x65\x00\x11\x09\
459+\x68\x69\x6a\x6c\x26\x9b\xcd\x3a\x92\xe4\x12\x52\xa9\x14\xb6\x6d\
460+\xa3\x69\x1a\x00\x6d\xdd\x1b\x45\xe0\xcc\xfa\x03\x02\x15\x31\x0c\
461+\x7d\x91\xb2\x8a\x73\x18\x86\x81\x65\xe5\x58\x5f\xcf\x3a\x35\xc7\
462+\x6b\x84\xd9\x87\x33\x27\xa5\x4c\x26\xd3\x1a\x0a\x85\xf0\xfb\xfd\
463+\xc2\xea\xea\x6a\x3e\x79\xbb\x82\xdd\xb4\xb6\x78\x87\x40\x45\x27\
464+\x0b\xd3\x3f\x10\x6a\xbe\x80\x65\xe5\x40\x00\x4d\xd3\x84\xca\xca\
465+\x27\xd9\xda\xca\x94\x48\x1e\x8f\xe7\x6c\x24\x12\xc9\x3f\x97\xff\
466+\xa2\xdc\xef\x0a\x99\x4d\x1f\xb5\xed\xfd\xc8\x4a\x61\x4e\x43\x43\
467+\x03\x5e\xaf\xe7\x25\x09\x40\xd7\x75\x96\x97\x97\xf7\x04\x39\xce\
468+\x3f\x2d\xb9\x1d\x80\x47\xb3\x06\x8e\xb3\x52\x10\x09\x06\x83\x85\
469+\xee\x66\x9a\x26\xad\xad\xad\x0c\x0d\x0d\xe1\xf1\x78\x50\xfd\x3e\
470+\x4a\xfc\xa5\x88\xa2\x88\xa2\x28\x08\x82\x80\xa2\x28\xf8\xfd\x7e\
471+\x0c\xc3\xa0\xbc\xbc\x9c\x64\x32\x59\xb4\x6e\x83\x8b\xfc\xd8\xe5\
472+\x72\xe1\x38\x0e\xa2\xe0\x22\x93\xc9\x60\x9a\x26\x8e\xe3\x20\xcb\
473+\xf2\x2e\x95\x3f\x86\x1f\x37\x36\x36\xe0\x38\x20\x49\x85\x21\xb7\
474+\xdb\xfd\xf8\x46\x9f\x4c\x26\x9d\x70\x38\x2c\xe8\xba\x4e\x6d\x6d\
475+\xdd\xbe\x49\x81\x40\x00\x80\xea\xea\xea\xa2\x35\x91\x48\x38\x80\
476+\x20\x9c\x7f\x21\xde\x1d\x0e\x87\x3e\xe1\x7f\x54\x22\xb1\xf4\xcc\
477+\x1f\xdd\xc1\x60\x94\x84\x01\xca\x23\x00\x00\x00\x00\x49\x45\x4e\
478+\x44\xae\x42\x60\x82\
479 \x00\x00\x04\x42\
480 \x89\
481 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
482@@ -587,6 +845,48 @@
483 \xa5\x00\x7d\xa4\x29\xe0\xd1\x68\xe6\x35\x40\x01\x3f\x81\x1f\xc0\
484 \x57\xe0\x1b\xf0\x7d\xe4\x07\xa3\x7d\x7e\x01\x0e\xb4\xf5\xda\x0b\
485 \x7d\x14\xc6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
486+\x00\x00\x02\x76\
487+\x89\
488+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
489+\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\
490+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
491+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
492+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
493+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
494+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xf3\x49\x44\
495+\x41\x54\x38\x8d\xd5\xd5\xcf\x4b\xdb\x60\x18\xc0\xf1\x6f\x7e\xf4\
496+\x57\xd2\xd6\x0e\x67\x73\xb0\x0c\x9d\xd0\xad\xb8\x0e\x44\xaf\x05\
497+\x29\x78\x51\xff\x0f\x4f\xde\xbd\x85\xfc\x0b\xfe\x13\x1e\xbc\x79\
498+\xf6\x20\xd6\x4b\x11\x94\x11\x9d\x28\x6c\xa0\x07\xa1\xc1\x1f\xb4\
499+\xdd\x62\x6b\xda\x64\x87\x2a\x53\xfb\x76\x0b\x93\x1e\xf6\x9c\x92\
500+\x3c\x79\x3f\x3c\xbc\xef\x93\x27\x52\x10\x04\x0c\x23\xe4\xa1\xa8\
501+\xc3\x84\xd5\xc7\x0b\xcb\xb2\x6a\x40\xf6\x15\x96\x63\x9a\xa6\xf1\
502+\x78\xf3\xb4\xe2\xd7\xa0\x7d\xeb\xd5\x97\x59\xd3\x34\x43\x29\x7e\
503+\xbb\x8d\x24\x49\x48\xd1\x28\x96\x65\xf5\xe5\xfb\x60\x00\xc7\x71\
504+\x06\x82\xb2\x2c\x33\xa2\x69\xb8\xfb\xfb\x44\x0c\x83\xc4\xd4\x94\
505+\xf0\x3d\x21\x3c\x28\x24\x49\x62\x44\xd3\x68\xd9\x36\x5f\x17\x17\
506+\x51\x92\x49\x3e\x57\xab\xe2\x02\x44\x0f\xe3\xf1\x38\x19\x4d\x43\
507+\x51\x94\xe7\xa8\xae\xd3\x3e\x3b\xe3\x78\x61\x01\xdf\x75\xf1\x1c\
508+\x87\x6f\x2b\x2b\x21\x61\xdf\x27\x95\x48\x70\x7f\x7a\x4a\x2a\x1e\
509+\xef\xed\xe3\x43\xa5\x9d\xf3\x73\x8e\xcb\x65\xba\xcd\x26\x00\x89\
510+\x7c\x9e\x0f\x1b\x1b\xe1\xe0\x4e\xbd\x8e\x5d\x2a\x71\x54\x2e\xe3\
511+\x5f\x5f\x93\xd4\x34\xd2\xba\x8e\x5f\xab\x71\x34\x3f\x4f\xe7\xf6\
512+\x16\x80\xd8\xc4\x04\xc5\x4a\x05\x25\x9d\x0e\x07\x7f\x5f\x5d\xa5\
513+\x59\xad\xd2\x6d\x34\x38\x59\x5e\x26\xa6\xaa\x70\x73\x83\x5d\x2a\
514+\xe1\x3d\x1c\x6a\x34\x97\xa3\xb8\xb7\x47\x57\xd3\x90\x54\xf1\x31\
515+\xf5\xc1\xef\xd7\xd7\x89\x18\xbd\x3e\x77\x6d\x9b\x83\x7c\x9e\x2f\
516+\x33\x33\xdc\x5f\x5e\x02\x10\x31\x0c\x8a\x95\x0a\x41\x26\x43\xc3\
517+\x75\x85\xa8\x10\x96\x75\x9d\x8f\x9b\x9b\x20\xf7\x52\xed\x8b\x0b\
518+\xbc\xab\x2b\x00\xd4\xd1\x51\x8a\xbb\xbb\x48\x63\x63\x34\xff\x80\
519+\x8a\xe1\x58\x0c\x7d\x6e\x8e\x77\x2f\x9a\x5e\xcd\x64\xf8\xb4\xb3\
520+\x83\x32\x3e\x4e\xc3\x75\xf9\xdb\x54\x14\xb6\x5b\xa3\xd5\x22\xb7\
521+\xb6\xc6\x9b\xa5\x25\x00\x94\x54\x8a\xe9\xed\x6d\x22\x93\x93\xd4\
522+\x43\xa0\x30\xe0\x03\xf1\x3c\x8f\x1f\xae\x4b\x61\x6b\x8b\x9f\x87\
523+\x87\x24\x0a\x05\xfc\x20\xa0\x7e\x77\x17\x0a\x1d\x08\x67\xb3\xbf\
524+\xe7\x49\x72\x76\xb6\x57\x35\xf0\x56\xd7\x43\xa1\x42\x58\x34\x50\
525+\xfe\x25\x9e\xee\xf1\xe0\xc9\x13\x2e\x9e\xad\x97\xfe\xbb\x7f\xde\
526+\x2f\xf2\xee\xa2\xd5\xb2\x5f\x77\x9c\x00\x00\x00\x00\x49\x45\x4e\
527+\x44\xae\x42\x60\x82\
528 \x00\x00\x03\xbb\
529 \x89\
530 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
531@@ -710,6 +1010,48 @@
532 \x9f\xb4\x9f\x53\xc5\x4d\xfe\xb0\x52\xbd\x02\xe4\x1f\x2d\x27\x87\
533 \xbf\xf3\xe1\xd6\x34\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
534 \x82\
535+\x00\x00\x02\x74\
536+\x89\
537+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
538+\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\
539+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
540+\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\
541+\x0b\x12\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
542+\xd5\x03\x0b\x0b\x08\x04\xdd\x67\x7b\x1d\x00\x00\x00\x3e\x74\x45\
543+\x58\x74\x43\x6f\x6d\x6d\x65\x6e\x74\x00\x43\x72\x65\x61\x74\x65\
544+\x64\x20\x77\x69\x74\x68\x20\x54\x68\x65\x20\x47\x49\x4d\x50\x0a\
545+\x0a\x28\x63\x29\x20\x32\x30\x30\x33\x20\x4a\x61\x6b\x75\x62\x20\
546+\x27\x6a\x69\x6d\x6d\x61\x63\x27\x20\x53\x74\x65\x69\x6e\x65\x72\
547+\x27\x33\xef\x58\x00\x00\x01\xb7\x49\x44\x41\x54\x38\xcb\xb5\x94\
548+\x41\x6b\x1a\x41\x18\x86\x9f\x71\x45\x4a\x54\xf4\xd2\x45\x50\x4f\
549+\x1e\x2a\x88\x36\x67\x2f\x7b\xf4\x0f\xf4\x2f\xf8\x07\x4a\x49\x2b\
550+\x3d\x07\xd3\x50\xfa\x7f\x3c\x7a\xf1\x2c\x6a\xc1\x06\x44\x10\xbc\
551+\xa8\xe9\x6e\x8a\x61\x45\x9d\x9d\x1e\xd4\xe0\xc4\x35\xdd\xa2\xf9\
552+\xd8\xc3\xec\x37\xef\xfb\xce\x33\x03\x33\xf0\x4a\x25\x6e\x6e\xaf\
553+\xd5\xb9\x43\xbf\x5c\x7d\xbd\x08\x03\x7c\xfa\xf8\xf9\x6c\xa1\xdf\
554+\x7f\x7c\x03\xc8\x85\x77\x8d\xf9\x7c\x7e\x72\x68\x2c\x16\xdb\x0d\
555+\xdf\x84\xf7\x27\xea\xf5\x3a\x96\x65\xd1\x6c\x36\x35\x43\xa9\x54\
556+\xa2\xd3\xe9\x00\x50\xab\xd5\x00\x68\xb5\x5a\x98\xa6\x89\xe3\x38\
557+\xa4\x52\x29\x32\x99\x8c\xe6\x09\x3d\x5f\x75\x3f\xb4\x58\x2c\x6e\
558+\x44\xa1\x8d\x2c\x9d\x4e\x6b\xda\xc9\x64\xc2\x72\xb9\x64\x34\x1a\
559+\x1d\xd0\x87\x5e\xda\x5a\xb7\xdb\xc5\xb2\x2c\xda\xed\x36\x00\xe3\
560+\xf1\xf8\x40\x13\x89\x44\x88\xc7\xe3\x07\x7d\xed\x28\x76\xdb\x7c\
561+\x5e\xe5\x72\x39\x50\x2f\x30\xf1\x29\xa5\x11\x37\x1a\x0d\x5f\x51\
562+\xa5\x52\x39\x3a\xb7\xaf\x39\x1a\x0c\x90\xcb\xe5\xb4\xff\xc1\x60\
563+\xe0\x6b\xfc\x2f\x62\x80\xe9\x74\xea\x2b\x0c\x42\xac\x94\xf2\x0f\
564+\x76\x5d\xf7\xc0\xb0\x5a\xad\x02\x13\x7b\x9e\xe7\x1f\xbc\x58\x2c\
565+\xb4\x55\x01\xa4\x94\x81\x89\x8f\x1e\x85\xeb\xba\x4f\x41\xff\x32\
566+\x02\x08\x21\x00\x9e\x60\xd6\xeb\xb5\x1e\x2c\xa5\x64\x36\x9b\x61\
567+\x9a\x26\xc9\x64\x52\x33\xdb\xb6\xcd\xfd\xfd\x6f\xee\xee\x7e\xbd\
568+\x48\x5c\x28\x14\x48\x24\x12\x7a\xb0\xe3\x38\xd8\xb6\xcd\x70\x38\
569+\x44\x4a\x89\xe7\x79\x28\xa5\x30\x0c\x03\x21\x04\x97\xef\x2f\xc9\
570+\x66\xb3\x5b\x3a\x10\x42\xa1\x94\x80\xcd\x87\x52\xf0\xf0\xf0\x87\
571+\x68\x34\xaa\x07\xf7\xfb\x7d\xf2\xf9\x3c\xd5\x6a\xf5\xa4\x4b\xd1\
572+\xeb\xf5\x76\x43\x25\x80\x77\x37\xb7\xd7\xfd\x33\x3e\xf2\x1f\x80\
573+\x9f\x02\x30\x80\x24\xf0\x16\xb8\x38\xf1\x9a\x2b\xe0\x11\x98\x8a\
574+\x6d\xc3\xd8\x1e\x8b\x71\x06\x68\x09\xac\x5f\xeb\x0d\xe2\x2f\x4b\
575+\x5a\xa1\xe6\x54\xae\x32\x6e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
576+\x42\x60\x82\
577 \x00\x00\x06\x54\
578 \x89\
579 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
580@@ -1075,106 +1417,496 @@
581 \xab\xf9\xa0\x9c\xa7\xf9\x6a\x87\x8a\xed\x56\x85\x1d\x66\x57\xcb\
582 \x72\xb0\xff\x80\xf3\x30\x7b\xfc\x0b\xa7\x72\xca\x4d\xa2\xbf\x42\
583 \x74\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
584-\x00\x00\x06\x11\
585-\x47\
586-\x49\x46\x38\x39\x61\x10\x00\x10\x00\xc4\x00\x00\xff\xff\xff\xee\
587-\xee\xee\xdd\xdd\xdd\xbb\xbb\xbb\xaa\xaa\xaa\x99\x99\x99\x88\x88\
588-\x88\x77\x77\x77\x66\x66\x66\x55\x55\x55\x44\x44\x44\x33\x33\x33\
589-\x22\x22\x22\x11\x11\x11\x00\x11\x00\x00\x00\x00\xff\xff\xff\x00\
590-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
591-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
592-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\xff\x0b\x4e\
593-\x45\x54\x53\x43\x41\x50\x45\x32\x2e\x30\x03\x01\x00\x00\x00\x21\
594-\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x00\x00\x10\x00\x10\x00\
595-\x00\x05\x77\x20\x24\x42\x01\x89\x24\xe5\xa8\x42\x02\x23\x04\xcf\
596-\x23\x90\xab\x28\x3c\x4c\xe0\xc8\xc1\xac\x0a\x33\xc3\xc3\xb0\x03\
597-\xa6\x44\x01\xc5\x10\xe6\x48\x24\x5e\xb6\x94\x40\xe9\x18\xf8\x90\
598-\x50\x64\x80\xb0\xb8\x22\x55\x06\x85\xb3\x50\x23\x05\xce\x61\x85\
599-\x82\x5c\x3b\x9f\xcd\x83\xc3\x31\xaa\x0a\x18\x1a\x0a\x6f\xcf\x3a\
600-\x3a\x30\x0a\x76\x06\x40\x02\x04\x24\x7c\x2c\x33\x02\x0b\x03\x04\
601-\x05\x02\x82\x5f\x23\x01\x09\x07\x10\x05\x64\x02\x80\x35\x02\x07\
602-\x33\x97\x22\x03\x73\x35\x03\x03\x65\x21\x00\x21\xf9\x04\x05\x07\
603-\x00\x10\x00\x2c\x00\x00\x00\x00\x0f\x00\x10\x00\x00\x05\x63\x20\
604-\x24\x8e\xd0\x81\x88\x01\x39\x2a\x22\x23\x0a\x0d\xa1\x8a\x0b\xc4\
605-\x38\xf6\x33\xcc\x62\xc1\x34\x85\x07\x6b\x94\x00\x42\x1a\x0b\xd3\
606-\xe3\x91\x4a\x89\x12\x90\x85\x60\x34\x98\xf2\x86\x3c\x08\x01\x71\
607-\x38\xec\xb2\x90\x42\x02\x81\xf8\x82\x5f\x85\x99\x73\x44\x50\x40\
608-\x55\x01\x81\xd3\xa0\x90\x15\x64\xaf\xd7\x5a\x84\x10\x0c\x08\x01\
609-\x66\x2a\x07\x69\x7f\x22\x82\x28\x05\x29\x86\x10\x56\x59\x02\x8e\
610-\x23\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x00\x00\
611-\x10\x00\x0f\x00\x00\x05\x60\x20\x24\x8e\x50\x61\x90\xa8\x88\x88\
612-\x0a\x13\x04\x4b\x2a\x3a\x09\xd4\x06\x75\x1a\x94\x10\xd1\x12\x23\
613-\xc1\x40\x74\x58\x00\x17\x0a\x83\x21\x26\x30\x3c\x1e\x02\x55\x23\
614-\x27\x12\x14\x9e\x8f\xe1\x68\x80\xd8\x6d\x1f\x27\xd1\x40\x59\x88\
615-\xa2\x5e\x68\xc2\x61\x2d\x6b\xf7\xdc\x28\x84\xc1\xeb\x2e\x1c\x86\
616-\x83\x01\x9a\x4e\xf2\x1a\x04\x80\x10\x02\x7c\x24\x05\x43\x81\x01\
617-\x66\x29\x40\x82\x66\x7c\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\
618-\x2c\x00\x00\x00\x00\x10\x00\x10\x00\x00\x05\x62\x20\x24\x8e\x62\
619-\x41\x9e\xe2\x11\x40\x89\x22\x26\x03\x0a\x2d\x07\xeb\x22\xe8\x2a\
620-\x36\x43\x1b\xe3\x01\x81\xc8\x80\x10\x2a\x0e\x85\x82\x2b\x60\x6a\
621-\xe8\x0e\x34\x88\x0e\x32\x60\xc8\x20\x35\x92\xb0\x18\x58\x15\x08\
622-\x04\x19\xa2\xd1\x70\xc0\x92\x05\xe1\x09\xf1\x68\x2f\x48\xb1\x93\
623-\x60\x2e\xd0\x09\x0c\xa6\xeb\x68\x90\x86\xcc\xf5\x52\x22\x01\x03\
624-\x5d\x53\x57\x03\x42\x5d\x80\x7e\x82\x86\x80\x8a\x28\x21\x00\x21\
625-\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x00\x00\x10\x00\x0e\x00\
626-\x00\x05\x49\x20\x24\x8e\xd0\x71\x90\xa8\x98\x88\xcf\xc3\xa6\xec\
627-\xda\x42\x0d\x2c\x1e\x6e\x5b\xd0\x68\xd2\x0c\x90\xc7\xc2\xe4\x2a\
628-\x05\x47\x89\xc7\x0a\x55\xdc\x91\x96\xa8\xc5\x48\x00\x29\x38\xa3\
629-\xad\x47\xcd\x74\x4a\xd5\x5e\x53\xd4\x40\x98\xba\x8e\xc6\x2d\x2a\
630-\x44\x6d\xcb\xa6\xd8\xa4\x01\x54\x04\x87\x85\x00\x00\x21\xf9\x04\
631-\x05\x07\x00\x10\x00\x2c\x00\x00\x00\x00\x10\x00\x10\x00\x00\x05\
632-\x71\x20\x24\x8e\xd0\x30\x90\x28\x14\x10\xa2\x71\x88\x87\x90\x06\
633-\x07\x6b\x18\x90\xc1\xc8\xa9\x80\x08\x37\x41\x03\x47\x1a\x10\x64\
634-\x86\x82\xe9\xb0\x28\x31\x14\xa2\xc0\xc0\x30\x08\x8c\x02\x82\x04\
635-\x64\xc1\x13\x09\x58\xa4\x80\xa2\x60\x55\x09\xce\x65\x52\x21\x91\
636-\x50\x18\xce\xe8\x54\x81\xc1\x68\x20\xc2\x28\xc1\xa2\x80\xc2\x76\
637-\x21\x5f\x22\x50\x51\x02\x56\x01\x65\x0d\x0f\x59\x10\x0d\x69\x29\
638-\x04\x0f\x5a\x10\x60\x78\x23\x0c\x0f\x27\x33\x79\x0f\x7c\x29\x9e\
639-\x8e\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x00\x00\
640-\x10\x00\x10\x00\x00\x05\x60\x20\x24\x8e\x90\x20\x90\xa8\x38\x88\
641-\x45\xc1\xa6\xec\x49\xb8\x85\x02\x8b\x46\x30\x43\x0a\x81\x9a\x01\
642-\xdd\xc0\x54\x40\x88\x14\x46\x91\x60\x98\x42\x34\x12\xa8\xc0\x09\
643-\x85\xf0\x89\x82\x41\x18\x01\x81\x80\x62\x03\x5a\xc5\x62\x71\xb8\
644-\x8d\x12\x04\xac\x19\xb2\x82\x20\xc0\xb0\x03\x82\x01\x09\x18\x17\
645-\xb7\xc6\xc3\x00\x29\x2f\x61\x01\x7a\x53\x53\x80\x0e\x0f\x26\x0e\
646-\x56\x80\x09\x0b\x70\x24\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\
647-\x2c\x00\x00\x01\x00\x10\x00\x0f\x00\x00\x05\x5e\x20\x24\x42\x82\
648-\x38\x0c\x22\x31\xae\x10\xda\xa2\x03\xc2\xae\x30\x8a\xb8\x81\x98\
649-\x8b\x42\x09\x11\x07\x52\xc2\x30\x0a\x08\x76\xab\xc3\x22\xc8\x42\
650-\x8e\x0c\xae\xd9\x6c\x70\xa8\xaa\xa4\xa3\x58\x62\x88\xd5\xdd\xa4\
651-\x46\x9f\x91\x01\x61\xb2\x1e\x0f\x83\x41\x41\x26\x2a\x58\x86\xc7\
652-\x81\xc1\x28\x40\x88\x33\x01\xba\xd4\x08\x2c\xb0\x04\x0f\x28\x0d\
653-\x7d\x10\x0c\x51\x2b\x3e\x10\x09\x52\x21\x00\x21\xf9\x04\x05\x07\
654-\x00\x10\x00\x2c\x00\x00\x00\x00\x10\x00\x10\x00\x00\x05\x63\x20\
655-\x24\x8e\x50\x10\x90\xa8\x78\x42\x82\x20\x0e\x2b\x2a\x9c\x2d\x5b\
656-\xc4\x64\xe0\xb6\x81\xe1\xa2\x2b\x93\x69\x40\x10\x19\x0a\x29\x60\
657-\x01\x81\x4c\xa2\x0a\x3f\x27\x49\x60\xa8\x4a\x47\x82\x83\xb6\xf8\
658-\x62\x0c\x50\xbe\xa9\xe2\xf1\x68\x8e\x14\x0d\x83\xca\xf1\x58\xb8\
659-\x18\x05\x02\x42\x01\x29\x30\x10\xa2\xc2\xd7\xb8\x58\x14\x9b\x51\
660-\x23\x0c\x01\x7d\x10\x09\x0e\x4e\x0e\x6f\x0b\x22\x74\x49\x2b\x5a\
661-\x49\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x01\x00\
662-\x10\x00\x0f\x00\x00\x05\x5c\x20\x24\x8e\x50\x60\x06\x02\xa9\x8a\
663-\xa6\x38\xac\xea\xf9\xae\xa9\x2a\xd4\xc5\x0c\x8f\x84\x31\x04\xb6\
664-\x95\x0e\x82\x68\x18\x11\x30\x82\x72\xb0\x78\x38\x15\xb0\x42\xc1\
665-\x87\x12\x14\x1a\xb5\x51\x61\x07\xf9\x8d\x02\x88\xc5\x56\xc4\x20\
666-\x06\x18\x0a\xa5\x21\xd1\x4d\x1c\x44\x84\x6c\x21\xa1\x18\x34\x08\
667-\x25\xd8\x02\x42\x87\x1c\xf6\x42\x65\x10\x0a\x50\x44\x59\x30\x06\
668-\x06\x30\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x01\
669-\x00\x10\x00\x0f\x00\x00\x05\x5d\x20\x24\x8e\x24\x14\x94\xe8\x18\
670-\x08\xa5\xc0\xa2\xc2\x49\x3e\x8f\x51\xca\xc1\xf0\x0e\xf4\xf3\x8e\
671-\x02\x5d\xe9\xf0\x20\xb4\x64\x22\x86\x32\x05\x19\x38\x05\x09\x47\
672-\xa3\x71\x48\x39\x09\xaf\x00\x41\x81\x32\x96\x12\xa2\x9f\xc8\x80\
673-\xf0\x42\x16\x90\xaa\x22\xe1\x2c\x20\x44\x87\x82\x48\x28\x27\x1c\
674-\x10\x02\x34\xb3\xc1\xbd\x43\x0a\x5c\x30\x81\x08\x60\x01\x55\x4c\
675-\x22\x05\x72\x28\x21\x00\x21\xf9\x04\x09\x07\x00\x10\x00\x2c\x00\
676-\x00\x00\x00\x10\x00\x10\x00\x00\x05\x64\x20\x24\x8e\x64\x49\x0e\
677-\x8d\x60\xae\xc3\xc3\xac\x6b\xf2\x10\xb0\xf8\x42\xc2\xf3\x98\x42\
678-\x20\x0a\xb7\x02\x6d\x14\xe8\x95\x0a\x8e\x41\xc9\x37\x32\x2c\x14\
679-\x0a\x83\xa9\x28\x50\x1d\x18\x58\xe9\xb2\xaa\x82\xf8\x06\x09\x93\
680-\x92\x14\x38\x40\x52\x25\x82\x61\x0c\x09\x4b\x11\x87\x2a\xa1\x80\
681-\x13\xfe\x44\xa8\x81\xc1\x8c\xe8\x32\x45\x01\x0b\x08\x10\x7b\x10\
682-\x04\x07\x7f\x24\x83\x84\x66\x10\x74\x35\x86\x43\x25\x21\x00\x3b\
683+\x00\x00\x02\xd0\
684+\x89\
685+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
686+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
687+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
688+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
689+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
690+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
691+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x02\x4d\x49\x44\
692+\x41\x54\x38\x8d\x8d\x92\x4b\x48\x94\x61\x14\x86\x9f\x6f\xfc\xe7\
693+\xf2\x8f\x3a\x9a\x58\x86\x89\x83\xe5\x05\x5a\x68\x57\x49\x14\xac\
694+\x55\x60\x41\x0c\x26\x15\x51\x66\x41\x04\x95\x15\xe1\xa6\x84\x5c\
695+\xe5\x22\x82\x88\x16\x09\x85\xb4\xa8\x28\x89\x68\x19\x59\x79\x6d\
696+\x53\xd6\x30\x86\x56\x0c\x53\x44\x03\xe9\xd4\x28\x73\xfb\x67\xfe\
697+\xb9\x7c\x2d\x06\x27\x94\x19\xf0\xdd\x1d\xce\x77\x9e\xf3\x7e\xe7\
698+\x1c\xf1\x74\xe8\xc9\xb5\xf1\x89\xb1\x3e\x56\x48\xd7\x75\x00\x0e\
699+\x1f\x3a\x72\x66\x77\xeb\x9e\x81\x95\xf9\x25\x29\xe3\x13\x63\x7d\
700+\x5d\x9d\xa7\xb2\x26\xa3\x51\x8d\xfb\x83\xf7\xee\x1a\x15\x63\xa0\
701+\xb9\xb9\xe5\x71\xb6\x37\xe2\xfc\x85\xb3\xb2\xdd\x71\x90\x99\xd9\
702+\x99\x5c\x4d\x78\x3b\xf2\x66\x59\xbc\xaf\x6d\xff\xad\xce\xe3\x27\
703+\x2e\x01\x28\x00\xaa\x6a\xa5\xb8\x68\x4d\x4e\x80\xe3\x40\x7b\xba\
704+\x9b\x10\x08\x21\x78\xf6\x7c\xe8\x62\x06\xa0\xeb\x3a\x9a\x16\xe1\
705+\xd5\xe7\x10\xd3\x3e\x6b\x4e\xc8\x32\xd9\x1c\xec\x3c\xfd\x50\xd6\
706+\x57\x9a\xbf\x66\x1c\x4c\xfb\xac\xdc\xbe\xbc\x97\xa8\x9e\x5c\x15\
707+\xc3\x62\xca\xa3\xfb\xe6\xcb\x3a\x05\x40\xd3\x22\x00\xfc\x5e\x88\
708+\xe2\x99\x0f\xaf\x0a\xb0\x71\x5d\x3e\x00\x4a\x34\x1a\x45\x55\x73\
709+\x5b\x4f\xa5\x24\xa3\x93\x6e\xa6\x9c\x5e\x02\x81\x10\x36\x5b\x01\
710+\xdb\xb7\x6c\xc0\xee\x68\x48\x03\x22\x91\x48\xc6\x41\xb6\xe2\x81\
711+\xc1\x49\x8c\x96\x42\x1a\x76\x35\x21\x14\x33\xbe\xbf\x41\x3e\xce\
712+\x7c\xc1\xe3\x79\x8d\xb5\xc4\x88\x61\x69\x06\xd9\x34\x3a\xe9\x4e\
713+\x17\x37\x36\x52\x6b\x2f\xe1\xc5\xd5\x5a\x6a\xab\x4a\xb1\xda\xb7\
714+\x31\x1f\x14\xf8\xe6\x42\x69\x40\x2e\x07\x53\x4e\x2f\x95\x35\x75\
715+\xac\xb5\x29\xd4\x94\x9b\x31\x29\x82\xcd\x15\x2a\x95\xa5\x46\xc2\
716+\x6a\x15\x0b\xfe\xd8\xff\x3b\x30\x1a\x52\x48\x40\x4a\x89\x10\x02\
717+\x29\x25\x81\x40\x08\x14\x0b\xfd\xc7\xca\x29\xb0\x18\x00\xe8\xed\
718+\x28\xe3\x5c\x5b\x29\x25\x47\x17\x10\x31\x9d\xcc\x16\xec\x45\x31\
719+\xfc\x21\x1d\xaf\x5f\x03\x29\x48\x21\xb1\x16\x58\xf1\xfd\x09\x72\
720+\xf2\xce\x4f\xea\xed\x16\x7a\x3b\xd6\xd3\xf3\xc0\xcb\xb0\x2b\x88\
721+\x88\x47\x50\xcc\xa6\xf4\x17\xe6\x7c\xf3\x6c\x6d\x6a\xc1\xf9\x63\
722+\x91\x78\x42\xa2\x27\x53\xc4\x13\x92\xea\xea\x32\xbc\x9e\x59\xde\
723+\xbb\xc3\x0c\xbb\x82\x2c\x86\x93\x0c\xbb\x82\x38\xbf\x6b\x98\x83\
724+\x6e\xea\xab\xcc\x9f\x44\x77\xff\xa3\x91\x77\x9e\x54\x6b\xb6\x19\
725+\x48\x09\x9e\x6f\x7e\x12\x86\x7c\x62\x85\x9b\x88\x1b\x54\x44\x3c\
726+\x82\x29\xe0\xa6\xd8\x18\x0e\x2f\x06\xf4\x62\x21\xa5\xcc\x79\x03\
727+\x00\xea\x8e\x1b\x0a\x22\xef\x0a\x42\x74\x91\x4a\x56\x60\xc8\xfb\
728+\x85\x94\x83\xc8\xe4\x75\xed\x43\x4f\xe2\x1f\x46\x03\xef\x1d\x6f\
729+\x58\xa2\x9f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
730+\x00\x00\x01\xbb\
731+\x89\
732+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
733+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
734+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
735+\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\
736+\x0b\x12\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
737+\xd5\x0b\x04\x15\x33\x13\x1c\xad\xc4\x0f\x00\x00\x01\x48\x49\x44\
738+\x41\x54\x38\xcb\xa5\x93\x41\x4b\x02\x51\x10\xc7\x7f\x6f\x77\xf5\
739+\x4b\x78\x94\x95\xee\x11\xf4\x01\x22\xea\x2c\x11\x14\xde\xed\x14\
740+\x41\x41\x87\x50\x12\x6f\x7d\x80\x24\xba\x45\xa2\x29\x5d\x83\xbe\
741+\x41\xd4\x35\xe8\xb2\xc4\x26\xa2\x6c\x0a\xa5\x54\x76\xd8\x9d\x0e\
742+\xae\xaf\xc4\x24\xb5\xb9\xbc\x99\xc7\xfb\xff\xe6\xcd\x7b\x33\xf0\
743+\x4f\x53\x00\xb9\x7c\xb6\x0a\x24\xa7\xd4\x16\x32\x07\x87\x5b\x56\
744+\x18\x24\x97\x97\x56\xb0\xed\xc4\x44\xca\x76\xbb\x45\xe9\xa2\x98\
745+\x06\x34\x00\xdb\x4e\xb0\xba\x79\x34\x11\xe0\xba\xb4\xaf\x7d\x0d\
746+\x88\x46\xa3\x00\x2c\x2e\xcc\x21\x63\x6a\x15\xe0\xe6\xf6\x61\x68\
747+\x5f\x03\x7c\xdf\x07\xc0\xb0\x4c\x90\xfe\x61\xa5\xc2\x15\x41\x50\
748+\x78\xde\xcb\x08\x58\x03\x82\x20\xe8\x03\x0c\x13\x94\xfc\xc8\xa9\
749+\x00\x78\x7c\xf2\x78\xed\xf6\x00\x10\x91\x51\xc0\xc0\x4c\xcb\x0c\
750+\x3d\xa1\xf9\xdc\xe1\xfd\xe3\x93\xee\x5b\x0f\x50\x58\x11\xeb\x6f\
751+\x80\x61\x1a\x78\xed\x0e\xcd\x56\x07\x44\x85\xd0\x08\x20\x28\xc5\
752+\xf8\x12\x06\xd4\x7b\xa7\x39\x24\xfa\x7e\x40\xa5\xe3\x5f\x6f\x30\
753+\xf8\x05\xcf\xad\x4f\xd5\x4d\x1a\x50\xab\xd5\xb8\x3a\xdf\x9b\x48\
754+\xd4\x68\x34\x46\x00\x85\xea\x65\x39\x3d\x65\x2b\x67\x00\x54\x2e\
755+\x9f\x9d\x07\xee\x76\xb6\x77\xf1\x7d\x1f\xd7\x75\x89\xc5\x62\x43\
756+\x75\x02\x38\x8e\xa3\x7b\x25\x1e\x8f\x73\x72\x7a\x0c\x90\x52\xb9\
757+\x7c\x56\xd6\xd7\x36\x66\x9a\xc4\x72\xa5\x88\x05\xa4\xca\x95\xe2\
758+\xd9\x8c\xd3\x9c\xfa\x02\xfc\xc1\x78\x3b\xf4\x23\x18\xf8\x00\x00\
759+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
760+\x00\x00\x01\xf2\
761+\x89\
762+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
763+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
764+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
765+\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\
766+\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
767+\xd5\x0b\x0a\x12\x39\x0d\xf9\xdd\x70\x50\x00\x00\x01\x7f\x49\x44\
768+\x41\x54\x38\xcb\xa5\x91\x4d\x88\x52\x51\x18\x86\x9f\x63\x2a\xfe\
769+\x40\xa6\x8b\x10\x5a\x04\x41\xb4\x0e\x82\x99\x20\x9a\xe5\x2c\xe3\
770+\x62\x11\xb4\xa9\x88\x20\x88\xfe\x98\xdd\x6c\x66\xb6\xb3\x08\xa2\
771+\x5d\x50\x33\xce\x2a\x44\xa4\x65\x49\x50\xb6\x6c\x17\x18\x46\x9b\
772+\x88\x22\x28\x05\x0b\xb1\x7b\x8f\x47\xcf\xfd\x66\x71\xed\x0a\xe2\
773+\x05\xcd\x97\x0f\x0e\x9c\xc3\xf7\xbc\x2f\xef\x51\x97\x2e\x97\xb6\
774+\x8a\xc5\xe2\x36\x53\x32\xc6\x04\xe7\xc0\xdc\xda\xdb\xdd\x7f\x42\
775+\x84\xd4\x9d\x7b\xb7\xe5\xfa\xd5\x1b\x33\x1f\xb5\xf6\x78\xb6\xf7\
776+\x94\x5e\xaf\x77\xa5\x5a\xa9\x3d\x8f\x04\x94\x9c\x8b\xb4\x3e\xb5\
777+\xa2\x4c\x78\xdb\x78\x33\x7d\xf5\xa8\x5a\xa9\x3d\x00\x88\x03\xa4\
778+\xd3\x19\x8e\xe4\xf2\x91\x00\xe7\x42\x29\x70\x53\x0a\xa5\x14\xb5\
779+\x17\xd5\xfb\x40\x00\x30\xc6\xe0\x79\x2e\xaf\x3f\xf6\x69\x76\x32\
780+\xcc\xa5\xc3\x0e\x67\x6e\x3a\x52\x48\xe9\xcf\x61\x82\x66\x27\xc3\
781+\xe3\x8d\x75\xb4\xb1\x73\x31\x52\xc9\x43\xdc\x7d\x58\x3f\x15\x07\
782+\xf0\x3c\x17\x80\x9f\xbf\x35\x5f\xda\x7f\xe7\x02\x9c\x38\x9a\x05\
783+\x20\xa6\xb5\x26\x9d\x9e\x33\xfa\x0c\xc5\x5c\xd7\x0d\x13\xfc\x17\
784+\xe0\x5f\x07\x4b\x01\x16\x4d\x60\xad\x8f\x1e\x06\x65\x87\xbf\x90\
785+\x88\xf9\x08\x20\x22\x28\xa5\x10\x11\x44\xc0\x17\xc1\x5a\x61\x68\
786+\x7d\xcc\x48\x18\x8c\x2c\x43\x2b\xe4\xb2\xc9\x09\xc0\xf3\x5c\x8e\
787+\xe7\x06\x74\xfb\x86\x1f\x5d\x0f\x44\xe1\x23\x8c\x07\x11\x10\x04\
788+\x91\x31\x18\x18\x59\x99\x00\x7e\x75\xda\x9c\x3e\x7b\x8e\x0f\x5f\
789+\xff\x8c\x97\x02\x77\x11\xf0\x11\x04\x05\x22\x61\xaa\x95\x93\x05\
790+\xea\x2f\x5f\x91\xd7\xdf\xcb\xea\xfc\xb5\x9d\x86\x9b\x38\xb6\xb6\
791+\x68\x79\xd9\xe1\xb7\xf7\xef\xca\x9b\xab\x2c\xab\x03\xc2\x87\xb4\
792+\xca\xa7\xb0\xe2\xf8\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
793+\x82\
794+\x00\x00\x01\x56\
795+\x89\
796+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
797+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
798+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
799+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
800+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
801+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
802+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x00\xd3\x49\x44\
803+\x41\x54\x38\x8d\x9d\x53\x39\x0e\x84\x30\x0c\x9c\x58\xe4\x0b\xb0\
804+\x25\xdf\x40\xbc\x1f\x21\x3a\x1a\xfe\xb0\xbc\x00\x82\x1c\x7b\x2b\
805+\x10\x21\xe1\xda\x69\xa2\x8c\x33\xe3\x23\xb2\x51\x55\xb4\x6d\xfb\
806+\x15\x91\x02\x2f\x40\x44\x63\x55\x55\x9f\x0c\x00\x44\xa4\xa8\xeb\
807+\xfa\x8d\x1e\x4d\xd3\x14\x00\x90\xed\x49\x55\xbd\x14\xad\x71\x22\
808+\xda\xb8\x2c\xf5\xd0\x18\x93\x14\x1a\x63\xa2\x24\x84\x1b\x1c\x05\
809+\xc7\x7b\xd4\x42\x2a\xcb\x99\xf8\x51\x05\x47\x30\xf3\xff\x06\xcc\
810+\x8c\x65\x59\x02\x2e\xf9\x0b\xfb\x21\xae\x9c\xaa\xc2\x7b\x1f\x19\
811+\x04\x15\x30\x33\xfa\xbe\x87\xaa\x42\x55\x21\x22\xdb\x29\x22\x18\
812+\x86\x01\xde\xfb\xf3\x0a\xe6\x79\xc6\x34\x4d\x10\x91\x28\x3b\x00\
813+\x38\xe7\xa2\xb6\x02\x03\xe7\x1c\xac\xb5\xe8\xba\x2e\x35\x02\x58\
814+\x6b\xaf\x0d\x00\xa0\x2c\xcb\xa4\xf8\x0c\x81\x41\x9e\xe7\xaf\xc4\
815+\x9b\x01\x11\x8d\xeb\x72\x3c\x05\x11\x8d\x00\x60\xee\x16\xe8\x0e\
816+\x3f\x66\x9a\x7f\xb3\x7a\xd3\x63\xe4\x00\x00\x00\x00\x49\x45\x4e\
817+\x44\xae\x42\x60\x82\
818+\x00\x00\x02\xab\
819+\x89\
820+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
821+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
822+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
823+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
824+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
825+\x67\x9b\xee\x3c\x1a\x00\x00\x02\x3d\x49\x44\x41\x54\x38\x8d\x85\
826+\x93\x4d\x68\x13\x41\x18\x86\xdf\x99\xec\xe6\x0f\x6b\xc0\x60\xd2\
827+\x43\xfc\xc1\xaa\xf5\x22\x1a\x8f\x49\xb4\xe0\xc1\x8b\xf1\x22\x14\
828+\x2f\x1e\x2a\xe2\x41\x14\xea\xa1\x55\xf1\x2a\x08\xd2\x15\x3c\xa9\
829+\x50\x84\x9c\x14\x21\xa2\x52\x53\x5b\x72\xb1\xd6\x55\x08\xb5\x2d\
830+\x14\x7b\xa8\x55\xb4\x54\xcd\x9a\xae\xfd\x0b\xe9\x26\xb3\xb3\x9f\
831+\x87\xd6\x1a\x9b\x18\xdf\xe3\x37\xdf\x3c\xf3\xbe\xf3\xcd\x30\x22\
832+\x42\xb5\xe2\xdd\x6a\x1e\x84\x30\xea\x89\xc1\xd0\x7b\x44\x73\x75\
833+\x49\xa9\x69\x22\x84\x6f\x5d\x48\xc3\x76\x04\x6c\x47\x60\xc9\x2a\
834+\x60\xc9\x32\x01\x00\x77\x1f\xdd\xa8\x01\xd7\x02\x00\x30\xc6\x90\
835+\x9b\x79\x8e\xb2\x5d\x42\xa1\x38\x83\x8f\x73\x63\x68\x3f\x78\xb5\
836+\xae\x29\x5e\xaf\x58\x1d\xca\xa3\xf8\xeb\x6e\x6c\x08\x00\x11\x88\
837+\x1c\x10\x11\x14\xee\x6e\x08\x50\x12\x97\x55\x9d\x1c\xc4\xd6\xed\
838+\xbb\x60\x39\x24\xbd\x92\x6c\x48\xb2\xb1\x5c\x36\x51\xbd\x16\xef\
839+\x52\xd7\x0d\x32\x8e\x37\x0a\x39\x48\x45\x42\x2d\xd1\x8b\x27\xaf\
840+\xfb\x14\x97\x0a\x22\xc7\x2b\x49\x82\x98\x04\xb8\x44\x51\x16\xa0\
841+\x7a\x39\xb8\xc2\x70\xfe\xd4\x35\x2f\x08\x10\xa2\x82\x74\x36\x55\
842+\x9a\x5f\x9c\x4b\x31\x22\x42\xa2\x5b\x4d\xb7\x45\x8f\x27\x8f\x44\
843+\x93\x9e\xf7\xf9\x57\x90\x5c\x40\xa2\x8c\x15\x7b\x11\xd3\xf3\x39\
844+\x10\x68\x2d\x16\x47\xdb\xf6\xd3\x18\x9d\x18\x29\x4f\x4e\x8d\xf7\
845+\xbd\xee\x11\xed\x7c\x2d\x72\xc7\xcb\xb1\x8c\xf1\xc5\x98\xa2\x48\
846+\x70\x2f\x88\x57\x00\x97\x8d\x42\x65\x1a\xaa\x8f\xc1\xed\xe3\x50\
847+\x7d\x2e\x44\x23\x47\x61\x2e\x98\x34\xf9\x61\xdc\x20\xc2\x99\xf5\
848+\x4b\xd4\x35\x51\x04\x21\xf9\x70\xf0\x9e\xe5\xe5\x4d\x08\xf8\x83\
849+\x28\xd1\x4f\x94\x5d\x8b\x70\x7b\x39\xdc\x3e\x17\xb6\x6d\xd9\x83\
850+\x90\xaf\x05\xd9\xa1\x8c\x45\x0e\x92\xba\x26\x8a\x7f\x4d\x41\xd7\
851+\xc4\x44\x45\xac\x74\x3e\x18\xbc\x53\xda\x11\x38\x00\x9b\x95\xa0\
852+\x7a\x56\x4f\xde\xbc\x29\x80\xfd\xa1\x63\xe8\xcb\x3e\x2e\x09\x51\
853+\xe9\xd4\x35\x31\x51\x77\x8c\xba\x26\x7a\x67\x8d\x4f\x2f\x86\xc7\
854+\x06\x44\x6b\x30\x01\xae\x30\x28\x6e\x8e\x43\xe1\x13\xc8\xbd\x7b\
855+\x5b\xf9\x61\x7e\xeb\xd7\x35\xd1\xdb\xf0\x1d\x90\x83\x8e\xa1\x91\
856+\x81\xef\xa6\xb1\x40\xbb\x9b\x62\xd8\xe5\x8f\xc1\xfc\xba\x4c\xb9\
857+\x51\x3d\xef\xc8\xd5\xdc\x0d\x01\xba\x26\x8a\x24\x91\xcc\x64\x9f\
858+\x59\x5b\xb1\x0f\x41\xa7\x15\x4f\xfb\x9f\x58\x8e\xfc\x93\xbb\x5a\
859+\x6c\xe3\x6f\xfc\xad\x78\x97\x7a\x2e\xd2\xbc\xf3\x36\x00\xcc\xe6\
860+\x3f\x5f\xda\x68\xfd\xbf\x00\x00\x38\x7c\x45\xbd\x0f\x00\xc3\x37\
861+\xc5\xd9\x7f\xf5\xfc\x02\x73\x4a\x12\x2a\x86\x68\x1c\xcb\x00\x00\
862+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
863+\x00\x00\x02\x7d\
864+\x89\
865+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
866+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
867+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
868+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
869+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
870+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
871+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xfa\x49\x44\
872+\x41\x54\x38\x8d\x95\x91\xbd\x6b\x53\x51\x18\xc6\x7f\xe7\xde\x24\
873+\x8d\x49\x4c\x6e\x22\x42\x41\x02\xd6\x4a\xbe\x44\x44\x5c\xaa\x83\
874+\x20\xc5\x41\x1c\x4d\x51\x27\x97\x4e\x0e\x0e\x82\x53\x07\x09\x45\
875+\xa1\x83\xf8\x07\x28\xb4\x0a\x2e\x1a\x50\x68\x16\x03\x5a\x10\x35\
876+\xa2\x64\xe9\xa2\x49\x90\x88\xc5\x8f\xb4\xc4\x04\x73\xc1\xe4\x26\
877+\xf7\x1c\x17\x13\x72\x9b\x50\xec\x03\x07\xce\xcb\x39\xcf\xf3\xfe\
878+\x5e\x5e\x91\xcf\xe7\xb3\x85\x42\xe1\x02\xbb\x50\x3a\x9d\xbe\x98\
879+\x4a\xa5\x1e\x03\x90\xc9\x64\xd4\x6e\xf5\xcf\x83\x52\x0a\x57\x3f\
880+\xb5\x5e\xaf\x23\xa5\x04\x40\x08\x31\xe8\xd6\xbf\x0b\x21\xd0\x75\
881+\x9d\x50\x28\xe4\xa0\x19\x04\x48\x29\x29\x97\xcb\x0e\xc3\xb0\x84\
882+\x10\x24\x93\xc9\x91\x71\x5c\xc3\x45\x3c\x1e\xdf\x91\x60\x9c\x5c\
883+\xc3\x1f\x87\x09\xb6\xeb\xbf\x08\x62\xb1\xd8\x98\x8e\x6d\x94\x9a\
884+\x40\xd3\x34\xa4\x92\x3b\x07\x54\x2a\x15\xc7\x63\x22\x91\xc0\xea\
885+\xe9\x2c\xad\x2e\xf2\xe4\xdd\x53\x6a\x8d\x4d\x26\xf7\x4d\x72\x48\
886+\x9f\x62\x31\x7d\xdb\xd3\xcd\xb6\x2d\xc7\x08\xdb\x09\xac\x5e\x97\
887+\xd9\x5b\x67\xd1\x82\x70\xfc\xcc\x11\x84\x27\xc5\x66\x63\x8b\xd2\
888+\xfa\x47\xd0\x29\xba\xd3\xde\x13\x0e\x82\x72\xb9\xec\x98\xf9\xde\
889+\x9b\xfb\x28\x9f\xcd\xb1\x99\xa3\x98\x56\x8b\x96\x65\x22\xbd\x3d\
890+\xa6\x67\xa2\x98\xaf\xcc\x83\xed\x5f\xdd\x85\x91\x2d\x0c\x13\xbc\
891+\x7c\xb8\x46\xea\xd4\x61\x5a\x9d\xdf\xb4\xba\x2d\x4c\xab\x85\xdf\
892+\x1d\x60\x2e\x7e\x89\xf5\xea\x8d\x00\x4d\x2e\x6b\xc3\x1d\x4b\xa5\
893+\x92\xe3\xfc\xa8\xff\xc4\xef\xf3\xb3\x70\xf2\x26\x28\xd8\xeb\x09\
894+\xb2\x72\xee\x11\x6f\xbf\xbd\xa6\xeb\xee\x80\x24\x3a\x96\xa0\x4f\
895+\x11\xdd\x7f\x80\x6a\xad\x8a\x31\x11\xe6\xf9\xdc\x1a\x2e\xcd\x45\
896+\xb3\xd3\x60\xf5\xf3\x33\xd4\x1f\x01\x1a\xd5\x01\x41\x24\x12\x21\
897+\x12\x89\x10\x0e\x87\x31\x0c\x03\xc3\x30\x98\x9f\x9d\xe7\xfb\xa7\
898+\x2d\xee\x7c\x58\x42\x08\x81\xad\x6c\xae\xbd\xb8\x4a\xc7\xee\x20\
899+\xbf\xe8\x26\x36\x2b\x22\x97\xcb\xe5\x8a\xc5\xe2\xf9\x91\x05\x03\
900+\x4a\x29\x96\xab\x0f\x68\x7a\x1a\xf8\xa6\xdd\x04\x82\x3e\xbe\xd6\
901+\x36\xd0\x37\xf6\xf4\x2c\xb3\xf7\x1e\x9b\xd3\x42\x29\x35\xce\x3b\
902+\x90\x3b\xed\xd5\xd1\xb8\x8e\xa6\xae\x20\xc5\x14\x9a\xaa\x62\x8b\
903+\x65\x14\x77\xbb\xd9\xb6\xfc\x0b\xe9\xb0\xf7\x9f\x1d\xb8\x7d\xd3\
904+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
905+\x00\x00\x02\x1c\
906+\x89\
907+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
908+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
909+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
910+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\
911+\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
912+\xd6\x01\x0b\x0e\x00\x2d\xad\x93\x8a\x5c\x00\x00\x01\xa9\x49\x44\
913+\x41\x54\x38\xcb\xad\x91\x4f\x28\xa4\x61\x1c\xc7\x3f\xcf\xfb\x0e\
914+\x92\x03\x87\x41\x89\x52\x52\x43\x6a\x46\xe1\xc8\x65\x94\xa6\xec\
915+\x61\xf7\x60\x0f\x6e\x73\xb0\x38\x70\x92\xd9\xe2\x66\xc9\x41\x4e\
916+\x84\x26\x24\x17\x93\xdb\xee\x64\x1b\x6d\x39\xec\x61\x85\x31\x4b\
917+\x11\x8a\x22\x8b\x79\x22\x6a\xa6\xa5\xf1\xbe\x0e\xe6\x9d\x5e\x7f\
918+\x66\xc6\xc1\xf7\xf2\x3c\xdf\x7e\xbf\xef\xa7\xef\xd3\x23\x30\xa9\
919+\xd4\x35\xe8\x04\x02\x71\x5b\x7d\xe4\xf7\x6c\x92\x46\xca\xf3\xf0\
920+\xd7\xf6\xa6\xc8\x48\xef\x27\x80\x60\xa9\x6b\xd0\xf1\x26\x80\x11\
921+\xf6\xb4\xb9\xe4\x8f\xd5\xd3\x9c\xc0\xfa\x31\x63\xfd\x2d\x6f\x82\
922+\x08\x23\xdc\xd9\xea\x3c\xff\xf5\xf7\xac\xd0\x3c\xfc\xd2\x5c\x49\
923+\xd7\xc0\x42\xca\xe7\x28\x40\xa0\xc7\xed\x0c\xdf\xdc\x69\x85\x35\
924+\xb6\x82\xc4\xa0\xc6\x56\xc0\xda\xbe\x64\xf6\x5b\x2b\x40\x30\x55\
925+\x03\x1d\x20\xc3\xa2\xf2\xf9\x63\x03\x6b\xbb\x17\x68\xc4\xa8\xb3\
926+\x15\xb1\x14\xf8\x43\xf8\x2a\x02\x40\xf4\xec\x30\x11\xba\xd8\x98\
927+\x14\xc6\xdd\x72\xe4\xf7\x08\x80\xb2\x0f\xc3\x3a\x00\xba\x86\x2e\
928+\x04\xaa\xa2\x71\x79\x1d\xa5\xd6\x5e\xf1\xb8\x19\x3f\x57\x7e\xfa\
929+\x5f\xff\x85\x64\xca\xcc\x56\xd9\xdd\x3f\x61\x6f\xef\x14\x35\x2b\
930+\xe3\xc5\xdc\x62\x36\xb1\xbb\x18\x8e\x32\x2b\x00\xb7\xff\x35\x50\
931+\xd2\xf2\x9f\x02\x16\xbe\xff\x7e\xb1\x70\xaf\x29\x80\x0e\xe2\x11\
932+\x26\x00\xab\xdd\xad\x03\xc8\x90\x57\x88\xd7\xa8\x56\xbb\x5b\x1f\
933+\x1f\xed\x61\x71\xe5\x00\x80\x9d\xed\x63\x00\x2a\xaa\x4a\x00\x28\
934+\xce\x53\xc3\x33\xd3\xbe\x7c\x19\xf2\x8a\x64\x1d\xab\xdb\xbb\x87\
935+\xa9\x77\x14\x27\xc2\x06\x28\x37\x4b\x3d\x9f\x99\xf6\xe5\x03\x8d\
936+\x46\x23\x92\xb4\x70\x00\xc1\xa1\x81\x2e\x7c\x4b\x5b\x48\x19\xc5\
937+\x59\x5f\x2e\xbd\x13\x73\x56\xa0\x51\x86\xbc\xcb\x29\x01\x66\x48\
938+\x7f\x5f\x07\xff\xe4\x75\x64\x6a\x7c\x3e\xc7\x1c\x4e\x0b\x30\x43\
939+\xe2\xf6\x49\xf8\x5d\xf4\x00\xa8\x9e\x9d\x76\x42\x9c\x4d\xd8\x00\
940+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
941+\x00\x00\x02\xc1\
942+\x89\
943+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
944+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
945+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
946+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\
947+\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
948+\xd6\x01\x04\x0f\x21\x1e\xc7\x7d\x84\xc8\x00\x00\x02\x4e\x49\x44\
949+\x41\x54\x38\xcb\xc5\x92\x3f\x4c\x53\x51\x14\xc6\xbf\x7b\x6f\xdb\
950+\x57\xaa\xb4\xa5\xd0\x82\xf2\x27\x29\xe8\x50\x63\x8d\xd1\x49\xa3\
951+\x83\x26\x26\x9a\x40\x18\x48\x70\x20\x1a\x13\x6d\x5c\x75\xc2\x98\
952+\x38\x29\x83\x95\x41\x93\xc6\x81\x68\x62\x34\x61\x70\x72\x80\x38\
953+\x3a\x32\xd5\x28\x41\x43\x0c\x08\x15\x10\xa1\x2d\xed\xe3\xf5\xcf\
954+\x7b\x7d\xef\x9e\xeb\x40\x02\x45\x70\x72\xf0\x6c\xe7\x4b\xce\x2f\
955+\xdf\x39\xdf\x01\xfe\xb1\xd8\x9f\xc2\xe9\x5b\x6f\x82\x9c\xb3\x2c\
956+\x91\x72\xd5\xeb\x9c\x33\x87\x48\x85\xd3\x2f\xae\x15\xeb\x75\xd7\
957+\x1e\x22\x43\xa2\xef\xdc\x51\x9e\xe8\x8d\x83\xb1\x2d\xbe\x52\x0a\
958+\xcf\xdf\x7d\xe2\xef\xa7\xe6\x13\x00\x9e\xfc\xd5\xc1\xa9\x9b\xaf\
959+\xb9\x4b\xf0\xea\xd8\xf0\x15\xcf\xec\xcf\x12\x3e\xa4\x17\x08\x00\
960+\xce\x9e\xe8\xe0\x21\x2f\xc3\xc3\x57\x53\x35\x47\x52\xc3\xc7\x97\
961+\xd7\x69\xdb\x59\x3d\x80\xa4\xbc\x70\x3c\xda\x22\x7c\x5e\x17\x96\
962+\xf3\x65\xa4\x67\x32\x48\xcf\x64\xb0\x5a\xb0\x60\xd9\x84\x70\xc0\
963+\x2b\x48\xca\x8b\xbb\x56\xab\x6f\xdc\x02\xcf\x2e\x9f\x89\x8a\xe9\
964+\xc5\x0d\xfc\x58\xc9\x03\x44\xcb\x20\x5a\x9a\x5b\xcc\x62\x7e\xdd\
965+\xc4\x91\xae\x16\x21\x18\x9e\xee\x0b\x88\x0f\x8d\x75\xba\x05\x8b\
966+\x85\x03\x1a\x32\x39\x0b\x9f\xbf\x2e\x49\xcb\xb2\xef\x58\x96\x7d\
967+\x77\x76\x6e\x45\xfe\xd2\x1d\x78\xbc\x07\xe0\x38\x4e\x2c\x3e\x34\
968+\xd6\xb9\x07\xc0\x99\xba\x77\xfe\x64\x17\xfb\xbe\x56\xc5\xca\x9a\
969+\x81\x8d\xa2\x01\x22\x39\x49\x24\x27\xf5\x4d\x03\xd9\x42\x05\xd9\
970+\x32\xd0\x14\x0a\x31\xa5\xd4\xfd\x5d\x80\xd8\x60\x4a\x93\x8e\xbc\
971+\xdd\x79\xa8\x89\x65\x72\x35\xe4\x0a\x25\x38\xb6\x2d\x48\x4a\x8b\
972+\xa4\xb4\x1c\xdb\x11\x45\xbd\x8c\x8a\x49\xf0\xf9\x9b\x19\x49\x27\
973+\x11\x1b\x4c\x69\xdb\x31\x12\xc9\x81\x68\x7b\x08\xba\xc9\x50\xac\
974+\x28\xb4\x46\x9a\x71\xe3\xea\x25\x84\x0e\xba\x11\xf6\x6b\x08\x07\
975+\x34\x30\x00\x23\x6f\xbf\x41\x71\x0f\xdc\x5a\x03\xcc\x8a\x31\x00\
976+\x60\xdc\xb5\x65\x9f\xa5\xda\x0f\x47\xc4\x6a\x51\xa2\x6a\x03\xc5\
977+\x92\x8d\xe5\x9c\x09\xdb\x51\xb0\x1d\x82\x2d\x15\x94\xda\x39\x5c\
978+\xa0\xb9\x55\x98\xe5\x52\x0a\xc0\xb8\xab\xa7\x7f\x34\xce\x99\xf2\
979+\x33\xcd\x0f\xbd\x4a\xf8\x32\x3d\x2d\xf5\x42\x41\xec\xf7\xb6\xbe\
980+\xc6\xa0\xec\xe8\x39\x26\x7c\x8d\x41\x28\x28\x7f\x4f\xff\x68\xdc\
981+\xc5\x80\x64\xa4\xad\x5d\x6c\x9a\x80\x61\x18\x28\xe6\x37\xa0\x14\
982+\x69\x0b\x13\xc3\xb5\xfa\xe1\x68\xef\x63\x4f\x59\x2f\x54\x6a\x66\
983+\x15\x1e\x6f\x03\x82\x2d\x6d\x22\xbf\xba\x94\x64\xdd\x7d\xc9\x35\
984+\x92\x32\xb2\xfd\x9a\x9c\x3f\x5a\x98\x18\x7e\xb0\x9f\x83\xee\xde\
985+\xe4\x08\x91\xdc\x49\x80\x8b\x75\xfc\xf7\xfa\x0d\x49\x31\x0d\x6b\
986+\x63\x0d\xcf\x0b\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
987 \
988+\x00\x00\x02\xa8\
989+\x89\
990+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
991+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
992+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x8d\x00\x8e\x00\x8b\x21\xf4\
993+\xa3\x7e\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\
994+\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
995+\xd6\x06\x13\x0f\x1d\x09\x48\xb3\xcb\xc6\x00\x00\x00\x0f\x74\x45\
996+\x58\x74\x43\x6f\x6d\x6d\x65\x6e\x74\x00\x69\x64\x20\x6c\x6f\x67\
997+\x6f\x86\xc6\x77\xb9\x00\x00\x02\x1a\x49\x44\x41\x54\x38\xcb\xa5\
998+\x90\xbf\x4f\x13\x71\x18\xc6\x9f\xfb\xa5\x77\x2d\xb4\xa5\xd7\xd6\
999+\x5a\x2a\x14\xa2\x0c\xb4\x0e\x6e\x6e\x50\x28\x83\xec\x9a\x38\x69\
1000+\x6a\x7f\x80\x11\x4d\x4d\xdc\x1a\xe9\x60\x52\x07\x93\x42\xd4\x34\
1001+\xc5\x46\x05\x37\x27\x75\x31\x31\xb6\x16\xf9\x03\x64\x30\xba\xb5\
1002+\x8b\xa9\x18\x13\x38\xae\x72\x57\xee\x7a\x77\x0e\x72\x17\x43\x89\
1003+\x51\x7c\xa7\xf7\xfb\xe6\x79\x3e\xef\xfb\x7c\x09\xec\xd5\xe2\xfd\
1004+\xc2\x3b\x59\x96\xc6\xf1\x17\xc5\x71\xb6\xda\x8d\xb9\x4c\x14\x00\
1005+\x68\x73\x28\xcb\xd2\xf8\x6c\xfa\x1a\x14\x45\xb1\x84\x86\x61\x74\
1006+\x99\x0d\xc3\xc0\x93\xe5\xb2\xb5\x88\x0e\x4d\xe7\xe7\x01\xe4\x00\
1007+\x1d\x92\x24\x41\x10\x84\x2e\xa3\xf9\x66\x18\x06\x24\x49\x02\x00\
1008+\x42\xd3\x79\x03\x40\x8e\x06\x90\xcb\x66\x2e\xa0\xbe\xba\x04\x51\
1009+\x14\xd1\x6c\x36\x0f\x34\x03\x00\x45\x51\x20\x08\x02\xa2\x28\x22\
1010+\x9b\x49\xe1\x4e\xe1\x79\xce\x8a\xf0\xb1\xd1\x82\x20\x08\x68\x34\
1011+\x1a\x7f\x8c\x60\x6a\x87\xc7\xf6\x22\x98\xc3\xba\x1c\x44\xfc\x6e\
1012+\xa5\x4b\x4c\x10\x07\x21\x82\x56\x67\x01\x22\x67\x63\x38\x4c\x59\
1013+\x80\xd8\x19\xfe\xff\x00\x9f\xbe\x88\xff\x64\x1c\x0d\x3a\x7e\x45\
1014+\x0c\x9d\xcb\xd7\x40\x60\xec\x50\xeb\x0d\xac\x5a\x5f\x34\x77\xfd\
1015+\xaa\x71\xf9\x52\x5c\x7d\x54\x2e\x29\x93\x93\x53\xcc\xda\xda\x7b\
1016+\x26\x1a\x9d\xd0\xaa\xd5\x0a\x19\x8b\x4d\x69\xb5\x5a\x95\x9a\x88\
1017+\xc6\xf4\xb7\x95\x37\xe4\xe2\xc2\x03\xaa\x2b\x02\xcb\xb2\xaa\xda\
1018+\x51\xb7\x79\xaf\x47\x6b\xb5\x7e\x10\x43\xa1\xe1\x5e\x5d\x37\xe4\
1019+\xc1\xc1\x21\x5a\xd3\x74\xc9\xe1\x70\xf8\x69\x86\xd9\xe4\x38\x9b\
1020+\xed\xf7\x23\x48\xb3\xe1\x79\x7e\x87\x24\xc9\xd7\x36\x9b\x0d\x23\
1021+\xa7\x46\x20\xed\xee\x28\x03\x03\x27\x74\x97\xcb\x29\xbb\xfb\xdc\
1022+\x6d\x00\x88\x84\xc3\x47\xbd\x5e\xaf\xda\x05\x28\x2c\xdc\x2b\x01\
1023+\xd0\x22\xe1\xd3\x17\x7d\x1e\xdf\xb1\x8d\x6f\x5f\x7d\x00\x64\x9e\
1024+\xf7\x90\x24\x49\xd4\x7b\x1d\x3d\x9d\xfe\xfe\x20\x58\x96\xd3\xed\
1025+\x76\xbb\x54\x2c\x3e\x4c\xef\xbf\x20\x71\x33\x73\x8b\x5f\x5e\x79\
1026+\xac\x03\xf8\xbc\xb5\xb5\x29\xf0\x6e\xde\xef\x72\x3a\xe9\x5d\xa5\
1027+\xcd\xac\xaf\x7f\x38\x09\x00\x2b\xcf\x9e\x3a\xd3\xa9\xd9\xb6\xda\
1028+\x51\xce\xef\x07\x94\x4b\x4b\x45\xf8\xfd\xc7\x8f\x24\x13\xe9\xd1\
1029+\x64\x22\xdd\xa7\x28\x0a\x5e\xbe\x7a\xd1\x43\x51\x74\xe0\x4a\x3c\
1030+\x49\xa4\x92\x33\x44\x20\x10\x98\xb9\x3d\x9f\xfd\xce\xb2\xdc\x86\
1031+\x09\xf8\x09\xe4\xcc\xc3\x08\xa5\xf7\x2c\x65\x00\x00\x00\x00\x49\
1032+\x45\x4e\x44\xae\x42\x60\x82\
1033+\x00\x00\x02\x8c\
1034+\x89\
1035+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1036+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1037+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1038+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
1039+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
1040+\x67\x9b\xee\x3c\x1a\x00\x00\x02\x1e\x49\x44\x41\x54\x38\x8d\x95\
1041+\x93\x4f\x68\x13\x41\x14\xc6\xbf\x37\xbb\x33\xd9\x8d\x85\x7a\x68\
1042+\x4c\xff\xd1\x82\x04\xed\xc1\x40\x2a\xa8\xd0\xd5\x8a\x68\x44\x62\
1043+\x45\x2d\x14\x72\x6b\x4a\xc9\x49\x90\x62\x16\xc1\xab\xc7\x52\x91\
1044+\xa0\x17\x0f\x45\x4f\x1e\xa5\x42\xf1\xe2\x4d\x2a\x5e\x44\x50\xd0\
1045+\x43\x29\xb4\x2a\x95\x94\x34\x89\xa6\x9a\x26\xd9\xd9\x19\x0f\x51\
1046+\xac\x21\xa9\xf6\x1d\xdf\xfb\xe6\xc7\x7c\xdf\x9b\x21\xad\x35\xda\
1047+\xd5\xc9\x9b\x7c\x1e\x00\x96\x66\xbd\xe9\x76\x1a\xd6\x6e\xe0\xb8\
1048+\x3c\xdd\xdf\x15\x49\xf6\x75\x1d\x4c\x3a\x2e\x4f\xef\x09\xe0\xb8\
1049+\x3c\x1a\x10\xfb\xb2\x57\xce\x4c\x06\xc7\x46\x93\xc1\x80\x08\x66\
1050+\x1d\x97\x47\xff\x0b\xe0\xb8\xbc\x03\x84\xc5\x89\x73\xd3\xd6\x96\
1051+\x97\xc7\x96\xb7\x89\xf8\xc8\x25\x0b\x84\x45\xc7\xe5\x1d\xff\x04\
1052+\x10\xe1\xd1\xe8\x70\xa2\xa7\x37\x34\x48\x9f\x4b\x1f\xf0\xb1\xf4\
1053+\x1e\x9d\x9d\x9d\x14\x1b\x3a\xd1\x0d\xc2\xc3\x5d\x01\x8e\xcb\xd3\
1054+\xfd\x07\x22\x89\xb3\x47\xc7\xf9\x4a\xfe\x0d\x0c\xc6\x61\x32\x8e\
1055+\x57\x6b\x0b\x88\x0d\x1d\x17\xa1\xfd\x3d\x89\xe6\x3c\xd8\x8e\xc3\
1056+\x51\xc1\xed\x6c\x2a\xe1\xda\xeb\xe5\x65\x68\xf2\x20\x84\x89\x3a\
1057+\x7d\xc7\x36\x15\xf1\x2e\xff\x1c\x17\x4e\x5f\x0d\x9a\xa6\xf8\x2b\
1058+\x0f\xb6\xd3\xf7\xd4\x58\xc6\x52\xe4\xa1\x22\x4b\x10\x01\x01\x1e\
1059+\xe0\x28\xcb\x75\x08\xdb\x40\x41\xae\xa2\xa8\x56\x71\xfe\xd4\x45\
1060+\x8b\xd8\x9f\x3c\xd8\x6f\xdf\xf1\x63\xe3\xdd\x87\xfa\x62\x94\xaf\
1061+\xac\xc1\xe4\x06\x38\x37\x50\x51\x05\x54\x8d\xaf\x10\x36\x83\xb0\
1062+\x19\x96\xbf\xbd\x40\xb8\x37\x44\x47\x0e\x0f\x87\x89\x35\xf2\xa0\
1063+\x91\x8c\x99\x1e\xe8\x8e\x64\x6f\x4c\xdc\xb1\x05\x0f\x40\x41\xc2\
1064+\x87\x87\xd7\xb9\x05\xbc\x2d\x3c\x83\x64\x15\x10\x23\x24\x06\x32\
1065+\xd0\x5a\x43\x29\xa0\x5e\xaf\xe1\xf1\xd3\xf9\x4a\xb1\xb4\x39\x63\
1066+\x12\x43\xea\x53\x6e\xc5\x9e\xb9\x77\xb9\xe1\x89\xa3\x7a\xf7\xfa\
1067+\x13\xab\x2c\x73\xf0\x8d\x6d\x70\xc1\xc0\x4c\x82\xc1\x09\x73\x0f\
1068+\x6e\x57\x65\x4d\x5b\xbf\xec\x07\x89\x21\x65\x2e\xcd\x7a\x4e\xd3\
1069+\x26\xb4\xd6\x0a\xa5\xfa\x17\x30\x83\x60\x70\x06\x1e\x68\x40\x64\
1070+\x4d\x5b\x2f\xe7\x3c\xda\xf5\x1d\x00\x80\xd2\x3e\x7e\xd4\x8b\x8d\
1071+\x2b\xfb\x1a\xb2\xae\xa0\x55\xeb\x3f\x63\xb6\x6a\xfa\x4a\xa2\x5a\
1072+\xdb\x86\x32\x35\xa0\x15\x7c\x49\xf0\xbd\x3d\x00\xa4\x2f\x11\x1f\
1073+\xbc\x06\x62\x00\x31\x02\x11\xf6\x00\x20\x6c\xdc\xba\x3f\x19\x6e\
1074+\x25\x26\xc2\x46\x73\xef\x27\x30\xf7\xc5\xdb\xb6\xd0\x9a\x22\x00\
1075+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1076+\x00\x00\x03\x90\
1077+\x89\
1078+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1079+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1080+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1081+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
1082+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
1083+\x67\x9b\xee\x3c\x1a\x00\x00\x03\x22\x49\x44\x41\x54\x38\x8d\x6d\
1084+\x52\x4d\x6c\x54\x65\x14\x3d\xf7\x7b\xef\x95\xf9\xad\x33\x6d\x07\
1085+\x5b\xa8\xb6\x0a\x86\x12\xa6\xa1\xa2\x33\x8d\x7f\xd1\x98\x46\x37\
1086+\xc4\x60\x58\xa8\xbc\x44\x8c\x90\x81\xf0\xb3\x61\x07\x1b\x0c\x4d\
1087+\x0c\x11\x74\x61\xa2\xe0\x03\xa3\x31\x4c\x25\x98\x34\x01\x37\xfc\
1088+\x04\x21\x92\xd4\xc2\xab\x71\xd1\xd0\x92\xd4\xd2\xc6\x01\x46\x3b\
1089+\xb4\x1d\xe8\xcc\xb4\xf3\xde\xfb\xbe\xeb\xa2\xf3\x92\x59\x70\x92\
1090+\x9b\xdc\xc5\x3d\x27\x27\xe7\x5c\x62\x66\xf8\x48\x65\xb2\xcf\x34\
1091+\xe8\xda\x11\x10\xde\xf4\xa4\x6a\xd5\x84\x98\x27\xc2\xb8\xe3\xca\
1092+\x13\x00\x2e\xd8\x96\xe9\xd6\xdd\x1e\x04\x70\x82\x7c\x81\x74\x26\
1093+\xbb\x45\xd3\xc4\x40\x4f\xd7\x2a\x7d\x5d\x67\xb3\xd1\xd6\x14\x01\
1094+\x98\x51\x28\x56\x30\x32\x76\xbf\x7c\x67\xfa\xa1\x27\x15\xef\xb6\
1095+\x2d\xf3\x6c\x7a\x57\x36\xc3\x8c\xef\x00\xc4\x88\x99\x91\xca\x64\
1096+\xd7\x1b\xba\x18\xd9\xda\xd7\x1d\x8a\xc7\x82\xd0\x89\xd0\x1c\x0d\
1097+\x20\x1c\xd0\x11\x0d\x19\x08\x1a\x02\x33\xc5\x45\x1c\xcf\x0e\x57\
1098+\x0a\xc5\x8a\x1d\x0d\x35\xf4\x3e\x2e\x57\x0d\x66\x34\x11\x33\xe3\
1099+\xd5\x3d\x67\x4f\xf5\xac\x6b\xfb\x34\x18\x30\xc4\xad\xd1\x1c\xaa\
1100+\xae\x07\x43\xd7\xe4\x9a\xd5\xb1\xc5\xbe\xf4\xf3\xe1\xde\xf5\xad\
1101+\xa4\x09\x82\x10\x84\x5f\xae\x4d\xa8\xb7\x5e\x6c\x17\x07\xbe\xbe\
1102+\xea\x38\xae\x6c\xd1\x01\x80\x99\x3f\xbc\x33\x5d\x10\xae\xa7\x58\
1103+\x31\x2f\x32\xe3\x33\xc7\x95\x67\xc6\xa7\x67\x93\x13\xf7\xe6\x8f\
1104+\x5e\xef\x68\xee\xda\xb7\x75\x53\x28\x11\x0b\xe1\xe3\x77\xbb\x44\
1105+\x2d\x06\x02\xa0\x04\x00\x48\xa9\xc2\x55\xc7\xf3\x92\x2f\x3c\xfb\
1106+\x83\x94\xea\x11\x80\x41\xdb\x32\xf3\xb6\x65\x5e\xf9\xe3\xdb\x8f\
1107+\x5e\x1a\x9d\x2c\xec\xdd\x7d\xec\x12\xee\x3f\x2c\x61\x7a\xa6\x0c\
1108+\xa9\x18\x00\x03\x00\x0b\x2c\xaf\xaa\xe9\xa9\x48\x7f\x63\x24\xf0\
1109+\x55\x67\xfb\xca\x6e\x00\x53\x75\x69\xeb\xba\x26\x76\x6e\x7b\x27\
1110+\xe9\x76\x3e\x1d\x45\xa2\x71\x05\x34\x41\xbe\x03\xd6\x6b\x77\xf1\
1111+\x5f\x3f\xdf\xbc\x80\x27\xe3\xb4\x27\xd5\x6b\x17\x87\x27\xab\x57\
1112+\xed\xa9\x25\xdf\xbc\xe3\xaa\x00\x00\xf6\x5b\xa8\x02\x30\x6a\x04\
1113+\xae\x9b\xdf\x00\xec\x04\xe0\x3e\x41\x58\xb7\x2d\xf3\x9e\x2f\xe0\
1114+\x9d\x3f\xfa\xbe\x06\x10\x98\x19\x17\xed\x7f\xd4\xa9\xf3\x7f\xe5\
1115+\xa4\x54\x3d\xb6\x65\x16\xeb\x59\x87\xb3\x63\xab\x4a\xe5\xa5\x8e\
1116+\xdf\x47\xc6\x6f\x00\x88\xe9\x00\x40\x04\x10\x11\xee\xfe\x57\x86\
1117+\x21\x18\x27\x07\xff\x24\x00\x5f\xd4\x93\x53\x99\x6c\x98\x88\xee\
1118+\xf6\x6e\x5c\x7b\x26\x3f\x33\x97\x02\xa0\x01\xa8\x0a\x00\x10\x44\
1119+\x04\x00\x1d\x89\x10\x56\xb7\x84\xf1\xe5\xfe\xb7\xa9\xad\x25\x72\
1120+\xec\x95\x3d\x3f\xdf\x4a\x65\xb2\xe9\x9a\xc6\xf6\x15\x86\xae\xe7\
1121+\xf2\xb3\x07\xf2\x85\xe2\xeb\x9a\x46\xae\x6d\x99\xae\x58\x76\x40\
1122+\x78\x5c\x71\x71\x61\x68\x8a\x3d\x8f\xd1\xbe\x32\x8a\xc3\x3b\xde\
1123+\x08\x7d\xd0\x97\x7c\xb9\xb5\x39\x72\x2d\xbd\x6b\xc0\x35\x74\xf1\
1124+\x8d\x54\x32\x3e\xf7\x68\x01\x4d\x8d\x41\xd2\x84\x18\x04\x00\xff\
1125+\x91\xa8\xff\xc7\xa1\xa5\x89\xdc\xdc\xe4\xa5\xe1\xc9\xce\xcc\x96\
1126+\x4d\xe1\x44\x2c\x88\xee\xb5\x09\x7a\xae\x3d\x1e\x2a\x96\x5d\xfc\
1127+\x3b\x5b\x82\xe3\x78\x14\x09\x1a\x38\x77\x79\xb4\xe2\x49\x75\x04\
1128+\x00\x96\x1f\x49\x31\x4d\xe4\xe6\x4e\xdf\x3c\xb9\x2d\xf9\xa0\xb0\
1129+\xf0\x49\xff\xf7\x37\xe6\x8f\x0f\xdc\x2c\x0d\xdf\xce\x23\x3f\x5b\
1130+\x46\xd5\x95\x10\x44\x28\xcc\x97\xe4\xb9\xcb\xa3\x8b\x52\xa9\x8c\
1131+\x6d\x99\x63\x00\xe0\xb7\xf0\x13\x80\xed\xb6\x65\x72\x2d\x30\x03\
1132+\xc0\x7b\x0d\x86\xb6\x57\x31\x6f\x90\x52\xc5\x0d\x5d\x9b\x21\xc2\
1133+\x50\xd5\x91\x87\x6c\xcb\xfc\xdb\x0f\xf7\x7f\x2e\x55\x76\x6a\x13\
1134+\x65\xcc\xc6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1135+\x00\x00\x02\x3e\
1136+\x89\
1137+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1138+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1139+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
1140+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\
1141+\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
1142+\xd5\x09\x16\x12\x37\x29\x3b\x52\x02\x48\x00\x00\x01\xcb\x49\x44\
1143+\x41\x54\x38\xcb\xa5\x93\x4d\x68\x13\x41\x14\xc7\x7f\x33\xdd\xa3\
1144+\x48\x16\x22\x2d\xe2\xb1\xe0\x29\xa0\x58\x2b\x01\x0f\x82\x15\x84\
1145+\x78\xec\x45\xd0\xb6\x27\xaf\xa5\x17\x15\x3c\x8a\x20\xc5\x20\xf5\
1146+\x22\x7e\x80\x9a\x16\x8a\x31\xbd\x5b\x1a\x11\x4d\x5c\x10\xed\xc1\
1147+\x62\xd3\x8d\x1b\x4c\xfd\xc0\xd5\x6c\xeb\x10\x15\x5a\x91\xcd\x78\
1148+\x30\x43\xb3\x6d\x6a\x2b\xbe\xcb\xff\x0d\xcc\xfb\xcf\x6f\x66\xde\
1149+\x83\xff\x0c\x61\x92\xe2\x5d\xfa\x80\x19\xe0\xd8\x56\x7a\x78\x88\
1150+\xbc\xa9\x93\x00\x97\x47\x2f\x9d\x01\x66\x0e\x1e\x77\xd8\x8e\xb6\
1151+\x12\x58\x4d\xbd\x01\xf0\xed\xf9\x39\xb6\xa3\x57\x4f\x4a\xdd\xac\
1152+\x3b\x2d\x8d\xd3\xde\x54\x40\x59\x15\x58\xdd\x93\xa7\xac\x0a\xfc\
1153+\xe8\x7a\xd8\x56\x5f\x4c\x4b\x06\xc7\x8a\x1c\xe9\x1f\x06\x18\x37\
1154+\x04\xc4\xe3\x71\xc4\x89\xa5\x3f\x8b\x7d\x4d\x65\x4d\x7d\xdf\x27\
1155+\x7f\x4f\x32\x74\xed\x19\x1f\x9e\x8c\x33\xb7\x10\x84\x40\x87\xd5\
1156+\x7a\x1f\xa5\x14\xf5\x7a\x7d\xc3\x4b\x07\x41\x80\x9b\x49\xad\x15\
1157+\x7b\xcb\x7c\x2d\x4d\x75\x00\x3d\x11\x03\xdb\xb6\xb1\x6d\x3b\x52\
1158+\xec\xfb\x3e\x6e\x26\xc5\xe0\x58\x91\xc5\xc7\x19\x5e\x95\x97\x51\
1159+\xa5\x1c\x40\xcf\xc8\x64\x63\xf6\xaf\x04\xe6\xe4\x81\x74\x81\xc5\
1160+\x7c\x86\xb9\xb7\x0a\x55\xca\xf1\x73\xff\x45\xce\x9f\xbd\x30\x0b\
1161+\x88\x4d\x09\xb4\xd6\x14\xd2\xbd\x0c\x5c\x79\x8a\x37\x7d\x87\xca\
1162+\xe7\xef\xa8\xf9\x07\xbc\xef\x1a\xa6\xb3\xcd\x37\x46\x08\xb4\xd6\
1163+\x64\xb3\x59\x7e\xc9\x43\xcc\x3b\x0e\xef\x3e\xd5\x59\x7a\x3d\x05\
1164+\xbd\x69\x76\xad\xac\x00\xda\x34\xa1\x6e\x4b\x10\x86\x21\xbb\x3f\
1165+\xa6\x79\xf4\xa5\x9b\xfb\xb9\x1c\xdd\xf2\x25\x3b\xfb\x6e\x91\x4c\
1166+\x26\x71\x5d\x97\x37\x95\x05\x8c\x8b\x5c\x4f\x50\xad\x56\xf1\x3c\
1167+\x8f\x91\xc9\x06\x47\x3b\x2b\xac\xee\x48\x10\x1e\x18\x25\x91\x48\
1168+\x60\x59\x16\x96\x65\x45\xba\x78\x03\x41\x2c\x16\x43\x6b\x4d\xad\
1169+\x56\x43\x6b\x8d\x94\x12\xad\x35\x42\x08\x84\x10\xad\xdb\x1b\x11\
1170+\x03\xa5\x14\x8e\xe3\x6c\x3a\x75\xc6\x64\x7d\x18\x83\x89\x9b\xb7\
1171+\xaf\x9f\xfa\x87\x29\x9e\x30\xc9\x6f\x5a\x9d\xe8\x98\x79\x09\xfc\
1172+\x12\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1173 \x00\x00\x02\x78\
1174 \x89\
1175 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1176@@ -1242,6 +1974,159 @@
1177 \xb2\x2c\xbf\xda\xb6\x7d\x39\xd3\x54\x55\xd5\xfb\x42\xe6\xbd\xff\
1178 \x57\xf2\xac\x1b\xb7\x37\x69\x77\x68\x01\xa1\x8d\x00\x00\x00\x00\
1179 \x49\x45\x4e\x44\xae\x42\x60\x82\
1180+\x00\x00\x02\x0b\
1181+\x89\
1182+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1183+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1184+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
1185+\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\
1186+\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
1187+\xd5\x0b\x0a\x13\x00\x30\xae\xf3\xdb\xcc\x00\x00\x01\x98\x49\x44\
1188+\x41\x54\x38\xcb\xa5\x91\x4d\x4b\x5b\x41\x18\x85\x9f\x91\xd4\x92\
1189+\x08\xa6\x29\x28\xb1\x4a\xc1\xd2\x2e\x5d\x08\x42\x2d\x94\xe6\x27\
1190+\x94\x60\x55\x70\xe3\x47\x29\x48\xab\xa8\x5b\xbb\x68\xb7\xdd\xb9\
1191+\x12\x84\x1a\x75\x55\x24\x04\x97\xea\xc2\x6a\x57\xe2\x42\x97\xba\
1192+\x13\xf1\xa3\xa0\x12\x35\x29\xe6\xde\x3b\xb9\x73\x5f\x17\x37\x5a\
1193+\x12\x12\xd4\xf6\x30\x30\x30\xc3\xfb\x9c\x33\x67\x54\x67\x77\xc7\
1194+\x97\x68\x34\xfa\x95\x12\x69\xad\xfd\xdd\xd1\x83\x33\x89\xb9\x29\
1195+\x2a\x48\x0d\x8f\x7c\x92\xfe\xde\xf7\x65\x2f\x6d\xdb\x62\x7a\xe6\
1196+\x3b\xd9\x6c\xb6\x27\x39\x9f\xfa\x51\x16\xf0\x71\x68\x50\xba\xde\
1197+\x75\xb3\xbd\xb3\x5d\xc9\x84\xd5\xb5\x9f\xa5\x47\x13\xc9\xf9\xd4\
1198+\x18\x40\xc0\x18\x43\x30\x18\xe2\x51\x38\x52\x11\x10\x7f\xdb\xe1\
1199+\xbb\x29\x85\x52\x8a\xd4\x42\x72\x14\xf0\x01\x5a\x6b\x2c\x2b\xc7\
1200+\x45\xe6\x9c\x7f\x51\xc0\x75\xdd\x5b\x13\xdc\xbc\xb7\x90\xa0\x08\
1201+\x00\xdc\x24\x48\x6c\x85\xef\x66\x5b\x1b\xa7\xed\x43\x5c\xc2\xd5\
1202+\x4e\x69\x02\x8f\xf1\x81\x18\x25\x26\x65\x15\x7a\x18\xe0\xf3\xe4\
1203+\x8a\x0f\xb8\x4e\xf0\xa4\xae\x09\xc7\x35\x1c\x9d\xd9\xb7\x02\x9e\
1204+\xd5\xd7\x00\x50\x05\x10\x0c\x86\xf8\x6d\x85\xa9\x0d\x55\xdf\xbb\
1205+\xc4\xaa\xeb\x0e\x32\x16\x34\x37\xdc\xad\x03\x63\x3c\xec\xbc\x29\
1206+\x4e\xb0\xbe\x07\x6d\x2d\x4f\x39\x4c\x5b\x00\x88\x08\x9e\x27\xb8\
1207+\xc6\xc3\xc9\x1b\x2e\x6d\x97\x8b\x4b\xcd\x49\xc6\xe6\x38\xe3\x90\
1208+\x73\x4c\xf1\x2f\x3c\x8f\x58\xa4\xff\x68\x8e\xce\x2c\x10\x85\x87\
1209+\x50\x58\x88\x80\x20\x88\x28\x44\x04\x01\xec\xbc\xf7\x17\x70\x7c\
1210+\x7a\x42\xeb\xab\xd7\x6c\xee\x9e\x17\x86\xc4\x1f\x12\xf0\x10\x04\
1211+\x05\x22\xfe\xb0\xc0\xcb\x17\x8f\x59\x5e\x5c\x22\x62\x1f\xcc\xaa\
1212+\x37\x7d\xdf\xd6\x72\x0f\x1a\x63\xf7\x2d\xaf\x26\xbf\xbf\xf1\x6b\
1213+\x76\xbc\x9d\xff\xd5\x15\x26\x94\xc3\xfa\x0c\x4b\xb2\xef\x00\x00\
1214+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1215+\x00\x00\x01\xd0\
1216+\x89\
1217+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1218+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1219+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
1220+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\
1221+\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
1222+\xd5\x0b\x04\x0a\x15\x1b\xc6\xd2\x2b\x54\x00\x00\x01\x5d\x49\x44\
1223+\x41\x54\x38\xcb\xad\x93\xbd\x6a\xc2\x50\x18\x86\x9f\xaf\xba\x19\
1224+\x0d\x91\x6c\x0e\x0e\x82\x22\xde\x82\x66\x75\xe8\xd8\xa1\xd7\xe0\
1225+\x2d\x38\x28\x71\xc8\x25\x88\x2e\x5d\x74\x69\xe9\xda\xc1\x51\x70\
1226+\xf5\x02\x4e\x44\xe8\xa2\x64\xd0\x9c\xd5\x29\x76\x10\x83\x31\xa2\
1227+\x08\x7d\xa7\xc3\xfb\x71\x9e\xef\xef\x1c\x01\x18\x8f\xc7\xdf\x41\
1228+\x10\xbc\xf1\x9c\xde\xfb\xfd\xfe\x17\x00\xae\xeb\x1e\x9f\x95\xeb\
1229+\xba\x47\x80\xec\x25\x72\xbf\xdf\x13\x45\x11\x00\x22\x12\xfb\xe7\
1230+\xb3\x88\x90\xc9\x64\x30\x4d\x33\x8e\x25\x00\x51\x14\xe1\xfb\x7e\
1231+\xe2\xc2\xa5\x44\x84\x7a\xbd\x9e\xf0\xb2\xd7\x8d\xd5\x6a\x35\x00\
1232+\x7a\xbd\x5e\xec\x75\x3a\x1d\x4a\xa5\x52\x0a\x08\xf0\x72\x9d\xc1\
1233+\xf7\x7d\x56\xab\x15\xed\x76\x1b\xad\x35\x5a\x6b\x3c\xcf\x43\x29\
1234+\x85\x52\xea\x3e\x00\x60\x3a\x9d\x62\x18\x06\xcd\x66\x93\x6e\xb7\
1235+\x8b\x65\x59\x58\x56\x81\x6a\xb5\x1a\x57\x77\x17\x70\xce\xb8\x58\
1236+\x2c\xf0\x3c\x0f\x11\x41\x24\xcb\x76\xfb\x7b\x73\x97\xa9\x16\x4e\
1237+\x19\x2d\x66\xb3\x19\xc5\x62\x31\x8e\x8d\x46\x1f\x04\x41\xf0\xb8\
1238+\x82\xcb\xde\xc3\x30\x24\x0c\x43\xb4\xd6\x1c\x0e\x07\x86\xc3\x21\
1239+\xbb\xdd\xee\xfe\x16\x5a\xad\x16\x8e\xe3\xc4\x15\x6d\x36\x1b\x26\
1240+\x93\x09\x85\x42\x81\x5c\x2e\xc7\x7c\x3e\xa7\x52\xa9\xdc\x06\x88\
1241+\x08\x4a\xa9\xd4\x3b\x70\x1c\x87\xf5\x7a\x8d\x61\x18\xe4\xf3\xf9\
1242+\xc7\xef\xe0\x34\xb8\x24\xa4\xd1\x68\xb0\x5c\x2e\xef\x03\x2e\x87\
1243+\x76\x2d\xd3\x34\x29\x97\xcb\x29\x3f\x0b\x60\xdb\xf6\xcf\x60\x30\
1244+\x78\x7d\xe6\x2b\xda\xb6\xfd\xc9\x7f\xe8\x0f\xe0\x8e\xa3\xe6\x6d\
1245+\x31\x9b\x24\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1246+\x00\x00\x02\xcd\
1247+\x89\
1248+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1249+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1250+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1251+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1252+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1253+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1254+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x02\x4a\x49\x44\
1255+\x41\x54\x38\x8d\x8d\x91\x5d\x48\x14\x51\x18\x86\x9f\x19\x67\xdc\
1256+\xdd\x71\xdb\x35\xaa\x4d\x42\x12\x8c\x32\x22\x8b\x20\xa5\x50\x32\
1257+\xbb\x29\x32\x28\x51\xa8\xa0\x32\x09\x22\x08\x35\xe9\x22\xa8\x20\
1258+\x6f\xaa\x9b\x02\xe9\x22\x0a\x2c\x21\xe8\x57\x43\x2f\x0a\x0a\xa1\
1259+\x15\x95\x20\x12\x0c\x5c\x8c\x12\xd6\x8c\x7e\xdc\x5d\x58\x7f\x66\
1260+\xdd\x99\x9d\xd9\x9d\xe9\x62\xd3\x50\x76\xa1\xf7\xe6\x70\xf8\xce\
1261+\x79\xbe\xe7\x7c\x47\x78\xd1\xf5\xfc\xda\xe0\xd0\x40\x1b\xcb\x62\
1262+\x18\x06\x00\xc7\x8e\x1e\x3f\xb7\xb7\xaa\xfa\xfe\xf2\xfa\x42\xa4\
1263+\xc1\xa1\x81\xb6\xc6\x86\x33\x19\x8b\xba\xae\xf1\xa0\xb3\xe3\x9e\
1264+\x2c\xc9\x73\x15\x15\x95\x4f\x33\x9d\x11\x9a\x5a\xce\xdb\x75\xb5\
1265+\xf5\x8c\x7d\x1e\xcb\xd6\x04\x7f\xff\xbb\x25\xfb\x9a\x83\x87\xda\
1266+\x1b\x4e\x9d\x6e\x05\x90\x00\x5c\x2e\x85\x7c\xef\xca\xac\x80\xda\
1267+\xc3\x75\xe9\x6e\x82\x80\x20\x08\xbc\xec\xe9\xba\xb0\x08\x30\x0c\
1268+\x03\x4d\x8b\xd3\x17\x88\x31\x1a\x51\xb2\x42\x96\xc4\x53\x4b\xd9\
1269+\xd9\xc7\xf6\xb6\xf5\x8e\x2f\x8b\x06\xa3\x11\x85\x3b\x17\xf7\xa3\
1270+\x1b\xa9\xff\x62\x38\x73\x73\x68\xbe\xfd\xb6\x44\x02\xd0\xb4\x38\
1271+\x00\x53\xd3\x3a\xc1\xf0\xfc\x7f\x01\x8a\x7d\x79\x00\x48\xba\xae\
1272+\xe3\x72\x65\x57\xb7\xec\x14\xfe\x40\x07\xc3\xc1\x5e\x66\xd5\x30\
1273+\xde\x15\x3e\x76\x16\x1f\xa1\xa8\xba\x25\x0d\x88\xc7\xe3\x8b\x06\
1274+\x99\x2e\xdf\x7d\x73\x02\x87\x37\x41\xf9\xbe\x4d\x88\x8e\x12\xc2\
1275+\xd1\x08\x23\x81\x2e\xae\x3e\x1b\xc0\x4d\x0b\xe2\xc2\x0c\x32\xc5\
1276+\x1f\xe8\xc0\xe1\x4d\x50\xb6\xa7\x14\x39\x2f\x87\xb8\x35\x8f\xad\
1277+\xa4\x28\xde\xb5\x96\x48\xea\x3b\x21\xfd\x55\x1a\x90\xcd\x60\x38\
1278+\xd8\xcb\x86\xad\x85\xc4\x0c\x15\xd5\x50\x51\x8d\x39\x64\x51\xe6\
1279+\xe4\x96\x46\xcc\x75\x2a\x51\x73\xe8\x9f\x81\x2c\x5a\xd8\x80\x6d\
1280+\xdb\xf0\x77\x9d\x55\x43\xb8\xdd\x6e\x2e\x95\x5f\xc1\xb6\x2d\x64\
1281+\x31\x97\x87\x07\x1e\xf1\x71\xea\x03\x66\x6e\x02\x33\x39\xc3\xe2\
1282+\x2f\x14\x79\x13\x44\x63\x06\x3f\xa3\x1a\xd8\x02\x16\x36\x6e\xc5\
1283+\xc7\x44\x68\x82\x35\x8a\x8f\xd7\x75\x7d\x38\x24\x27\x31\x43\xa5\
1284+\x67\xbc\x1b\x5b\x13\x90\xa5\xfc\xb4\x41\x28\x12\x66\xc7\xee\x4a\
1285+\x3e\x7d\x9b\xc1\x4c\xda\x18\x29\x0b\x33\x69\xb3\xb1\xa0\x86\xc9\
1286+\x40\x88\xf6\xe1\x5b\x38\x24\x27\x00\xad\xfe\x26\xb4\xa4\x86\x38\
1287+\xa9\xb0\xbd\xa0\x74\x44\x68\xbe\xf9\xa4\xff\x7d\xd0\xaa\xca\x34\
1288+\x03\x1b\x8b\xf1\xd8\x75\x2c\x77\x98\x55\x9b\x15\x3c\x1e\x37\x5f\
1289+\x7f\x8d\xc3\xa4\x82\xc7\x5c\x3d\x3f\x1d\xff\x9d\x2f\x2c\xbc\x39\
1290+\x5b\xe4\x7a\xa7\x84\xc8\x65\x44\x1a\x49\x51\x48\x0e\x3f\xb0\xe8\
1291+\xc4\xe2\x86\xd9\xad\x27\xff\x00\xd1\x6f\xf8\x15\x16\x3e\x02\x36\
1292+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1293+\x00\x00\x02\x5a\
1294+\x89\
1295+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1296+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1297+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1298+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1299+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1300+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1301+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xd7\x49\x44\
1302+\x41\x54\x38\x8d\x95\x90\x41\x48\x54\x51\x14\x86\xbf\x3b\x6f\x94\
1303+\x16\xe6\xbc\x9e\x11\x82\x08\xe1\xd0\xdc\x37\x63\x22\x16\xb5\x32\
1304+\x82\x62\x20\x68\x51\xd4\x40\xd0\xb2\x56\x6d\xda\xe4\x32\x82\x59\
1305+\x99\x0b\x83\x5a\x69\x69\xd4\x26\x2a\x5a\xb8\x18\x2a\x66\x40\x22\
1306+\xa5\xb1\x68\xa0\x85\x34\xbd\x37\x46\x8a\x58\x4a\x8c\x91\xd1\x30\
1307+\x59\xdd\xdb\x46\x5f\xef\xd5\xcc\x80\xff\xea\x5c\xce\x3d\xff\xf9\
1308+\xce\x2f\xb2\xd9\xec\xa3\x7c\x3e\x7f\x9a\x2d\x28\x95\x4a\x9d\x49\
1309+\x24\x12\x0f\x01\x48\xa7\xd3\x7a\xab\xda\x98\x41\x6b\x4d\x78\xd3\
1310+\xb5\x5c\x2e\xa3\x94\x02\x40\x08\xe1\x6d\xdb\xac\x85\x10\x18\x86\
1311+\x41\x24\x12\x09\xd0\x78\x06\x4a\x29\x5c\xd7\x0d\x0c\xf8\x25\x84\
1312+\x20\x1e\x8f\xff\x77\x4e\xd8\xff\x90\x52\x36\x24\xa8\xa5\xb0\xff\
1313+\xa3\x9f\x20\x28\x8d\xae\x3a\x74\xef\x3b\xd5\x98\x20\x16\x8b\xd5\
1314+\xd8\x58\xe5\xcb\xe2\x63\x56\x16\xaf\xa1\xf5\x89\xc6\x06\xa5\x52\
1315+\x29\xd0\xb4\x6d\x1b\xad\xc2\x2c\x17\xaf\xb2\x5e\xf9\xc8\xea\xc2\
1316+\x03\x4c\xf3\x42\xfd\x13\x6a\x11\xac\x2e\xdc\x23\x14\x12\xd8\xfd\
1317+\x69\xde\xbf\x1e\x62\xf7\xde\x73\xf5\x09\x5c\xd7\xf5\x6a\x21\x04\
1318+\xa8\x2a\x3f\xe6\x86\x58\xfa\x79\x92\xf9\x42\x33\xdb\xbe\x36\xb3\
1319+\x54\x1c\xad\x6f\x20\xa5\x0c\x10\x2c\xbf\xbb\xce\x5a\xcb\x2e\xee\
1320+\x8c\xcc\x92\xcb\x8d\x30\x71\x7f\x80\xf9\x37\x83\x18\xe2\x7c\xed\
1321+\x13\x1c\xc7\xf9\x1b\x9e\xfa\x4e\xd5\xbd\x41\xcf\xd1\x61\xba\xa7\
1322+\xa6\xc8\xe5\xa6\x39\x94\x3c\xcb\x87\xe9\xe7\x74\xb4\xcc\x78\x06\
1323+\xa1\x7f\x09\xa4\x94\xd8\xb6\x4d\xab\x7a\xc2\xf6\xb6\x18\x6d\x9d\
1324+\x87\xe9\xeb\x4b\x60\xdb\x51\x2c\xcb\x24\x7a\xf0\x12\x9d\xad\x2f\
1325+\x99\x1c\x6b\xda\x19\x20\xb0\x2c\xcb\x33\x5a\xaf\x7c\xe2\xf3\xdc\
1326+\x4d\x7a\x8f\x8d\x03\x90\x4c\xf6\x63\x18\x06\x00\x66\xfb\x01\xcc\
1327+\xf6\xfd\xac\xad\xbc\xba\x02\x5c\x14\x99\x4c\x26\x53\x28\x14\x8e\
1328+\xfb\x49\xf6\xec\x78\x4a\x57\x47\x85\x9e\x23\xc3\x00\xbc\x98\x99\
1329+\x65\xf4\xd6\x04\x77\xc7\x2f\x03\xf0\xad\x5c\xe4\xed\xb3\x81\x5f\
1330+\x5a\xff\x8e\x0a\xad\x75\x20\xd5\xc9\xb1\xa6\x2e\x10\x0e\xe8\x40\
1331+\xc0\x75\x74\xfb\x0f\xbf\x09\xcf\xe7\xda\xb9\x46\xf0\x00\x00\x00\
1332+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1333 \x00\x00\x02\xb7\
1334 \x89\
1335 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1336@@ -1332,252 +2217,6 @@
1337 \x6b\xfb\xc5\xe2\x9d\xd7\x8a\xbf\xed\x44\x83\xc5\x22\xeb\xb2\xec\
1338 \xd4\x9c\x3c\xfd\xe2\xf3\x62\xff\x2f\x23\xd3\xd8\xa3\xe1\xf7\x88\
1339 \x77\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1340-\x00\x00\x02\x7b\
1341-\x89\
1342-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1343-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1344-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1345-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1346-\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1347-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1348-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xf8\x49\x44\
1349-\x41\x54\x38\x8d\x95\x92\x3d\x68\x13\x71\x18\xc6\x9f\xf7\x2e\xc9\
1350-\x35\xa9\x9a\x90\xf8\xd1\x5a\x95\x7e\x91\x2f\x2c\x7e\x05\x5d\xc4\
1351-\xb1\x8b\x53\x31\x60\xb5\x83\x43\xc1\xc1\x45\x10\x8a\x43\xa7\x88\
1352-\xe8\x10\xb0\xe2\x5c\x50\x3a\x4a\x26\xb9\x29\x3a\x74\x91\x40\x6d\
1353-\x16\xab\x68\x2e\x88\x41\x8a\x16\xdb\x6b\x43\x72\xa1\x21\x77\xf7\
1354-\x7f\x1d\x34\xe1\xae\x09\xc5\x3e\xd3\xff\xeb\x7d\xde\xdf\xc3\xfb\
1355-\xa7\x7c\x3e\x9f\x2b\x14\x0a\x37\x70\x00\xa5\xd3\xe9\x9b\xc9\x64\
1356-\xf2\x35\x00\x20\x93\xc9\xf0\x41\xf5\xaf\x06\xcc\x0c\x4f\xdb\x55\
1357-\xd7\x75\x08\x21\x00\x00\x44\xd4\xe9\xd6\x5e\x13\x11\x64\x59\x46\
1358-\x30\x18\x74\xd1\x74\x0c\x84\x10\xd0\x34\xcd\x55\xe0\x14\x11\x21\
1359-\x91\x48\x74\xc5\xf1\x38\x37\xb1\x58\x6c\x5f\x82\x5e\xf2\x38\x1f\
1360-\x3a\x09\xf6\xea\xbf\x08\xa2\xd1\x68\x8f\x8e\x4d\x30\x2b\x90\x24\
1361-\x09\x82\x79\x7f\x83\x72\xb9\xec\xba\x8c\xc7\xe3\x68\x99\x3e\x64\
1362-\x97\x3e\x20\xf7\xae\x82\xdf\xba\x81\x13\xc7\x8e\x60\x24\xe4\xc3\
1363-\xd3\x54\xd6\xb7\xbb\x3a\xd7\x72\x45\xd8\x4b\x60\x5a\x02\x93\xf7\
1364-\xde\x80\xfb\x42\x48\x5e\xb9\x8a\x84\xac\x60\x4b\xaf\xe3\x6b\xf9\
1365-\x13\x40\x5b\x45\x7f\x2a\x7b\xc9\x45\xa0\x69\x9a\x2b\xf3\xa2\xfa\
1366-\x03\xb6\xf7\x30\xce\x5e\xb8\x88\x81\x90\x07\xcf\x67\x4f\xe1\xf6\
1367-\x42\x05\xdb\xad\x14\x8c\xe6\xca\xb0\x59\xd7\xe7\xbb\xa6\xe0\x24\
1368-\x58\x7e\xbc\x86\xb1\xf3\x97\x31\x14\xf1\x62\x7c\x50\x01\x00\x9c\
1369-\x1b\x0e\x60\xdb\xb0\xf1\xf3\xd7\xe8\x21\x36\x76\xa6\x5d\x11\x4a\
1370-\xa5\x92\xcb\x60\x63\xb3\x86\x51\x59\xc1\x93\x99\x93\x50\xbc\x7f\
1371-\xcf\x1f\x4e\x1d\xc7\xdd\xc9\x08\x22\x33\x3a\x14\x16\xa7\x7b\x12\
1372-\xb4\x4d\x86\x06\xd6\xb0\xa9\xd7\x30\xfd\xac\x82\x89\x33\x7d\x78\
1373-\x74\x6b\x10\xf7\x17\xd7\xf1\xf6\x63\x1d\x64\x36\xc0\x24\x57\x3a\
1374-\x06\xe1\x70\xb8\x6b\x44\xb3\x53\x13\x78\x91\x2b\xa1\x6a\xf5\x43\
1375-\xaf\x99\xd8\xa8\x1e\xc5\xf2\x67\x03\x5f\xd6\x9b\xf0\x55\xcb\x06\
1376-\xb1\xfd\x8a\x54\x55\x55\x8b\xc5\xe2\xf5\xae\x6a\x00\xcc\xc0\xd2\
1377-\xfb\x00\x76\xac\x10\x1a\xfd\x63\x30\x25\x3f\xc8\x6c\x20\x60\x7c\
1378-\xb3\xac\xa6\xb1\x02\x61\x5f\x23\xee\xf1\x39\x9c\xf2\xa7\xb2\x32\
1379-\x48\x7a\xc0\x24\xdf\x21\xb6\x47\x98\xe4\xef\xc4\xf6\x4b\xb0\x58\
1380-\xd8\x5d\x9d\x13\x7f\x00\x70\x45\xf0\x0c\xcd\xc0\xad\x0d\x00\x00\
1381-\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1382-\x00\x00\x02\x5a\
1383-\x89\
1384-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1385-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1386-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1387-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1388-\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1389-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1390-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xd7\x49\x44\
1391-\x41\x54\x38\x8d\x95\x90\x41\x48\x54\x51\x14\x86\xbf\x3b\x6f\x94\
1392-\x16\xe6\xbc\x9e\x11\x82\x08\xe1\xd0\xdc\x37\x63\x22\x16\xb5\x32\
1393-\x82\x62\x20\x68\x51\xd4\x40\xd0\xb2\x56\x6d\xda\xe4\x32\x82\x59\
1394-\x99\x0b\x83\x5a\x69\x69\xd4\x26\x2a\x5a\xb8\x18\x2a\x66\x40\x22\
1395-\xa5\xb1\x68\xa0\x85\x34\xbd\x37\x46\x8a\x58\x4a\x8c\x91\xd1\x30\
1396-\x59\xdd\xdb\x46\x5f\xef\xd5\xcc\x80\xff\xea\x5c\xce\x3d\xff\xf9\
1397-\xce\x2f\xb2\xd9\xec\xa3\x7c\x3e\x7f\x9a\x2d\x28\x95\x4a\x9d\x49\
1398-\x24\x12\x0f\x01\x48\xa7\xd3\x7a\xab\xda\x98\x41\x6b\x4d\x78\xd3\
1399-\xb5\x5c\x2e\xa3\x94\x02\x40\x08\xe1\x6d\xdb\xac\x85\x10\x18\x86\
1400-\x41\x24\x12\x09\xd0\x78\x06\x4a\x29\x5c\xd7\x0d\x0c\xf8\x25\x84\
1401-\x20\x1e\x8f\xff\x77\x4e\xd8\xff\x90\x52\x36\x24\xa8\xa5\xb0\xff\
1402-\xa3\x9f\x20\x28\x8d\xae\x3a\x74\xef\x3b\xd5\x98\x20\x16\x8b\xd5\
1403-\xd8\x58\xe5\xcb\xe2\x63\x56\x16\xaf\xa1\xf5\x89\xc6\x06\xa5\x52\
1404-\x29\xd0\xb4\x6d\x1b\xad\xc2\x2c\x17\xaf\xb2\x5e\xf9\xc8\xea\xc2\
1405-\x03\x4c\xf3\x42\xfd\x13\x6a\x11\xac\x2e\xdc\x23\x14\x12\xd8\xfd\
1406-\x69\xde\xbf\x1e\x62\xf7\xde\x73\xf5\x09\x5c\xd7\xf5\x6a\x21\x04\
1407-\xa8\x2a\x3f\xe6\x86\x58\xfa\x79\x92\xf9\x42\x33\xdb\xbe\x36\xb3\
1408-\x54\x1c\xad\x6f\x20\xa5\x0c\x10\x2c\xbf\xbb\xce\x5a\xcb\x2e\xee\
1409-\x8c\xcc\x92\xcb\x8d\x30\x71\x7f\x80\xf9\x37\x83\x18\xe2\x7c\xed\
1410-\x13\x1c\xc7\xf9\x1b\x9e\xfa\x4e\xd5\xbd\x41\xcf\xd1\x61\xba\xa7\
1411-\xa6\xc8\xe5\xa6\x39\x94\x3c\xcb\x87\xe9\xe7\x74\xb4\xcc\x78\x06\
1412-\xa1\x7f\x09\xa4\x94\xd8\xb6\x4d\xab\x7a\xc2\xf6\xb6\x18\x6d\x9d\
1413-\x87\xe9\xeb\x4b\x60\xdb\x51\x2c\xcb\x24\x7a\xf0\x12\x9d\xad\x2f\
1414-\x99\x1c\x6b\xda\x19\x20\xb0\x2c\xcb\x33\x5a\xaf\x7c\xe2\xf3\xdc\
1415-\x4d\x7a\x8f\x8d\x03\x90\x4c\xf6\x63\x18\x06\x00\x66\xfb\x01\xcc\
1416-\xf6\xfd\xac\xad\xbc\xba\x02\x5c\x14\x99\x4c\x26\x53\x28\x14\x8e\
1417-\xfb\x49\xf6\xec\x78\x4a\x57\x47\x85\x9e\x23\xc3\x00\xbc\x98\x99\
1418-\x65\xf4\xd6\x04\x77\xc7\x2f\x03\xf0\xad\x5c\xe4\xed\xb3\x81\x5f\
1419-\x5a\xff\x8e\x0a\xad\x75\x20\xd5\xc9\xb1\xa6\x2e\x10\x0e\xe8\x40\
1420-\xc0\x75\x74\xfb\x0f\xbf\x09\xcf\xe7\xda\xb9\x46\xf0\x00\x00\x00\
1421-\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1422-\x00\x00\x02\x7d\
1423-\x89\
1424-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1425-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1426-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1427-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1428-\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1429-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1430-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xfa\x49\x44\
1431-\x41\x54\x38\x8d\x95\x91\xbd\x6b\x53\x51\x18\xc6\x7f\xe7\xde\x24\
1432-\x8d\x49\x4c\x6e\x22\x42\x41\x02\xd6\x4a\xbe\x44\x44\x5c\xaa\x83\
1433-\x20\xc5\x41\x1c\x4d\x51\x27\x97\x4e\x0e\x0e\x82\x53\x07\x09\x45\
1434-\xa1\x83\xf8\x07\x28\xb4\x0a\x2e\x1a\x50\x68\x16\x03\x5a\x10\x35\
1435-\xa2\x64\xe9\xa2\x49\x90\x88\xc5\x8f\xb4\xc4\x04\x73\xc1\xe4\x26\
1436-\xf7\x1c\x17\x13\x72\x9b\x50\xec\x03\x07\xce\xcb\x39\xcf\xf3\xfe\
1437-\x5e\x5e\x91\xcf\xe7\xb3\x85\x42\xe1\x02\xbb\x50\x3a\x9d\xbe\x98\
1438-\x4a\xa5\x1e\x03\x90\xc9\x64\xd4\x6e\xf5\xcf\x83\x52\x0a\x57\x3f\
1439-\xb5\x5e\xaf\x23\xa5\x04\x40\x08\x31\xe8\xd6\xbf\x0b\x21\xd0\x75\
1440-\x9d\x50\x28\xe4\xa0\x19\x04\x48\x29\x29\x97\xcb\x0e\xc3\xb0\x84\
1441-\x10\x24\x93\xc9\x91\x71\x5c\xc3\x45\x3c\x1e\xdf\x91\x60\x9c\x5c\
1442-\xc3\x1f\x87\x09\xb6\xeb\xbf\x08\x62\xb1\xd8\x98\x8e\x6d\x94\x9a\
1443-\x40\xd3\x34\xa4\x92\x3b\x07\x54\x2a\x15\xc7\x63\x22\x91\xc0\xea\
1444-\xe9\x2c\xad\x2e\xf2\xe4\xdd\x53\x6a\x8d\x4d\x26\xf7\x4d\x72\x48\
1445-\x9f\x62\x31\x7d\xdb\xd3\xcd\xb6\x2d\xc7\x08\xdb\x09\xac\x5e\x97\
1446-\xd9\x5b\x67\xd1\x82\x70\xfc\xcc\x11\x84\x27\xc5\x66\x63\x8b\xd2\
1447-\xfa\x47\xd0\x29\xba\xd3\xde\x13\x0e\x82\x72\xb9\xec\x98\xf9\xde\
1448-\x9b\xfb\x28\x9f\xcd\xb1\x99\xa3\x98\x56\x8b\x96\x65\x22\xbd\x3d\
1449-\xa6\x67\xa2\x98\xaf\xcc\x83\xed\x5f\xdd\x85\x91\x2d\x0c\x13\xbc\
1450-\x7c\xb8\x46\xea\xd4\x61\x5a\x9d\xdf\xb4\xba\x2d\x4c\xab\x85\xdf\
1451-\x1d\x60\x2e\x7e\x89\xf5\xea\x8d\x00\x4d\x2e\x6b\xc3\x1d\x4b\xa5\
1452-\x92\xe3\xfc\xa8\xff\xc4\xef\xf3\xb3\x70\xf2\x26\x28\xd8\xeb\x09\
1453-\xb2\x72\xee\x11\x6f\xbf\xbd\xa6\xeb\xee\x80\x24\x3a\x96\xa0\x4f\
1454-\x11\xdd\x7f\x80\x6a\xad\x8a\x31\x11\xe6\xf9\xdc\x1a\x2e\xcd\x45\
1455-\xb3\xd3\x60\xf5\xf3\x33\xd4\x1f\x01\x1a\xd5\x01\x41\x24\x12\x21\
1456-\x12\x89\x10\x0e\x87\x31\x0c\x03\xc3\x30\x98\x9f\x9d\xe7\xfb\xa7\
1457-\x2d\xee\x7c\x58\x42\x08\x81\xad\x6c\xae\xbd\xb8\x4a\xc7\xee\x20\
1458-\xbf\xe8\x26\x36\x2b\x22\x97\xcb\xe5\x8a\xc5\xe2\xf9\x91\x05\x03\
1459-\x4a\x29\x96\xab\x0f\x68\x7a\x1a\xf8\xa6\xdd\x04\x82\x3e\xbe\xd6\
1460-\x36\xd0\x37\xf6\xf4\x2c\xb3\xf7\x1e\x9b\xd3\x42\x29\x35\xce\x3b\
1461-\x90\x3b\xed\xd5\xd1\xb8\x8e\xa6\xae\x20\xc5\x14\x9a\xaa\x62\x8b\
1462-\x65\x14\x77\xbb\xd9\xb6\xfc\x0b\xe9\xb0\xf7\x9f\x1d\xb8\x7d\xd3\
1463-\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1464-\x00\x00\x01\xf2\
1465-\x89\
1466-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1467-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1468-\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
1469-\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\
1470-\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
1471-\xd5\x0b\x0a\x12\x39\x0d\xf9\xdd\x70\x50\x00\x00\x01\x7f\x49\x44\
1472-\x41\x54\x38\xcb\xa5\x91\x4d\x88\x52\x51\x18\x86\x9f\x63\x2a\xfe\
1473-\x40\xa6\x8b\x10\x5a\x04\x41\xb4\x0e\x82\x99\x20\x9a\xe5\x2c\xe3\
1474-\x62\x11\xb4\xa9\x88\x20\x88\xfe\x98\xdd\x6c\x66\xb6\xb3\x08\xa2\
1475-\x5d\x50\x33\xce\x2a\x44\xa4\x65\x49\x50\xb6\x6c\x17\x18\x46\x9b\
1476-\x88\x22\x28\x05\x0b\xb1\x7b\x8f\x47\xcf\xfd\x66\x71\xed\x0a\xe2\
1477-\x05\xcd\x97\x0f\x0e\x9c\xc3\xf7\xbc\x2f\xef\x51\x97\x2e\x97\xb6\
1478-\x8a\xc5\xe2\x36\x53\x32\xc6\x04\xe7\xc0\xdc\xda\xdb\xdd\x7f\x42\
1479-\x84\xd4\x9d\x7b\xb7\xe5\xfa\xd5\x1b\x33\x1f\xb5\xf6\x78\xb6\xf7\
1480-\x94\x5e\xaf\x77\xa5\x5a\xa9\x3d\x8f\x04\x94\x9c\x8b\xb4\x3e\xb5\
1481-\xa2\x4c\x78\xdb\x78\x33\x7d\xf5\xa8\x5a\xa9\x3d\x00\x88\x03\xa4\
1482-\xd3\x19\x8e\xe4\xf2\x91\x00\xe7\x42\x29\x70\x53\x0a\xa5\x14\xb5\
1483-\x17\xd5\xfb\x40\x00\x30\xc6\xe0\x79\x2e\xaf\x3f\xf6\x69\x76\x32\
1484-\xcc\xa5\xc3\x0e\x67\x6e\x3a\x52\x48\xe9\xcf\x61\x82\x66\x27\xc3\
1485-\xe3\x8d\x75\xb4\xb1\x73\x31\x52\xc9\x43\xdc\x7d\x58\x3f\x15\x07\
1486-\xf0\x3c\x17\x80\x9f\xbf\x35\x5f\xda\x7f\xe7\x02\x9c\x38\x9a\x05\
1487-\x20\xa6\xb5\x26\x9d\x9e\x33\xfa\x0c\xc5\x5c\xd7\x0d\x13\xfc\x17\
1488-\xe0\x5f\x07\x4b\x01\x16\x4d\x60\xad\x8f\x1e\x06\x65\x87\xbf\x90\
1489-\x88\xf9\x08\x20\x22\x28\xa5\x10\x11\x44\xc0\x17\xc1\x5a\x61\x68\
1490-\x7d\xcc\x48\x18\x8c\x2c\x43\x2b\xe4\xb2\xc9\x09\xc0\xf3\x5c\x8e\
1491-\xe7\x06\x74\xfb\x86\x1f\x5d\x0f\x44\xe1\x23\x8c\x07\x11\x10\x04\
1492-\x91\x31\x18\x18\x59\x99\x00\x7e\x75\xda\x9c\x3e\x7b\x8e\x0f\x5f\
1493-\xff\x8c\x97\x02\x77\x11\xf0\x11\x04\x05\x22\x61\xaa\x95\x93\x05\
1494-\xea\x2f\x5f\x91\xd7\xdf\xcb\xea\xfc\xb5\x9d\x86\x9b\x38\xb6\xb6\
1495-\x68\x79\xd9\xe1\xb7\xf7\xef\xca\x9b\xab\x2c\xab\x03\xc2\x87\xb4\
1496-\xca\xa7\xb0\xe2\xf8\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
1497-\x82\
1498-\x00\x00\x02\xd0\
1499-\x89\
1500-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1501-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1502-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1503-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1504-\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1505-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1506-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x02\x4d\x49\x44\
1507-\x41\x54\x38\x8d\x8d\x92\x4b\x48\x94\x61\x14\x86\x9f\x6f\xfc\xe7\
1508-\xf2\x8f\x3a\x9a\x58\x86\x89\x83\xe5\x05\x5a\x68\x57\x49\x14\xac\
1509-\x55\x60\x41\x0c\x26\x15\x51\x66\x41\x04\x95\x15\xe1\xa6\x84\x5c\
1510-\xe5\x22\x82\x88\x16\x09\x85\xb4\xa8\x28\x89\x68\x19\x59\x79\x6d\
1511-\x53\xd6\x30\x86\x56\x0c\x53\x44\x03\xe9\xd4\x28\x73\xfb\x67\xfe\
1512-\xb9\x7c\x2d\x06\x27\x94\x19\xf0\xdd\x1d\xce\x77\x9e\xf3\x7e\xe7\
1513-\x1c\xf1\x74\xe8\xc9\xb5\xf1\x89\xb1\x3e\x56\x48\xd7\x75\x00\x0e\
1514-\x1f\x3a\x72\x66\x77\xeb\x9e\x81\x95\xf9\x25\x29\xe3\x13\x63\x7d\
1515-\x5d\x9d\xa7\xb2\x26\xa3\x51\x8d\xfb\x83\xf7\xee\x1a\x15\x63\xa0\
1516-\xb9\xb9\xe5\x71\xb6\x37\xe2\xfc\x85\xb3\xb2\xdd\x71\x90\x99\xd9\
1517-\x99\x5c\x4d\x78\x3b\xf2\x66\x59\xbc\xaf\x6d\xff\xad\xce\xe3\x27\
1518-\x2e\x01\x28\x00\xaa\x6a\xa5\xb8\x68\x4d\x4e\x80\xe3\x40\x7b\xba\
1519-\x9b\x10\x08\x21\x78\xf6\x7c\xe8\x62\x06\xa0\xeb\x3a\x9a\x16\xe1\
1520-\xd5\xe7\x10\xd3\x3e\x6b\x4e\xc8\x32\xd9\x1c\xec\x3c\xfd\x50\xd6\
1521-\x57\x9a\xbf\x66\x1c\x4c\xfb\xac\xdc\xbe\xbc\x97\xa8\x9e\x5c\x15\
1522-\xc3\x62\xca\xa3\xfb\xe6\xcb\x3a\x05\x40\xd3\x22\x00\xfc\x5e\x88\
1523-\xe2\x99\x0f\xaf\x0a\xb0\x71\x5d\x3e\x00\x4a\x34\x1a\x45\x55\x73\
1524-\x5b\x4f\xa5\x24\xa3\x93\x6e\xa6\x9c\x5e\x02\x81\x10\x36\x5b\x01\
1525-\xdb\xb7\x6c\xc0\xee\x68\x48\x03\x22\x91\x48\xc6\x41\xb6\xe2\x81\
1526-\xc1\x49\x8c\x96\x42\x1a\x76\x35\x21\x14\x33\xbe\xbf\x41\x3e\xce\
1527-\x7c\xc1\xe3\x79\x8d\xb5\xc4\x88\x61\x69\x06\xd9\x34\x3a\xe9\x4e\
1528-\x17\x37\x36\x52\x6b\x2f\xe1\xc5\xd5\x5a\x6a\xab\x4a\xb1\xda\xb7\
1529-\x31\x1f\x14\xf8\xe6\x42\x69\x40\x2e\x07\x53\x4e\x2f\x95\x35\x75\
1530-\xac\xb5\x29\xd4\x94\x9b\x31\x29\x82\xcd\x15\x2a\x95\xa5\x46\xc2\
1531-\x6a\x15\x0b\xfe\xd8\xff\x3b\x30\x1a\x52\x48\x40\x4a\x89\x10\x02\
1532-\x29\x25\x81\x40\x08\x14\x0b\xfd\xc7\xca\x29\xb0\x18\x00\xe8\xed\
1533-\x28\xe3\x5c\x5b\x29\x25\x47\x17\x10\x31\x9d\xcc\x16\xec\x45\x31\
1534-\xfc\x21\x1d\xaf\x5f\x03\x29\x48\x21\xb1\x16\x58\xf1\xfd\x09\x72\
1535-\xf2\xce\x4f\xea\xed\x16\x7a\x3b\xd6\xd3\xf3\xc0\xcb\xb0\x2b\x88\
1536-\x88\x47\x50\xcc\xa6\xf4\x17\xe6\x7c\xf3\x6c\x6d\x6a\xc1\xf9\x63\
1537-\x91\x78\x42\xa2\x27\x53\xc4\x13\x92\xea\xea\x32\xbc\x9e\x59\xde\
1538-\xbb\xc3\x0c\xbb\x82\x2c\x86\x93\x0c\xbb\x82\x38\xbf\x6b\x98\x83\
1539-\x6e\xea\xab\xcc\x9f\x44\x77\xff\xa3\x91\x77\x9e\x54\x6b\xb6\x19\
1540-\x48\x09\x9e\x6f\x7e\x12\x86\x7c\x62\x85\x9b\x88\x1b\x54\x44\x3c\
1541-\x82\x29\xe0\xa6\xd8\x18\x0e\x2f\x06\xf4\x62\x21\xa5\xcc\x79\x03\
1542-\x00\xea\x8e\x1b\x0a\x22\xef\x0a\x42\x74\x91\x4a\x56\x60\xc8\xfb\
1543-\x85\x94\x83\xc8\xe4\x75\xed\x43\x4f\xe2\x1f\x46\x03\xef\x1d\x6f\
1544-\x58\xa2\x9f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1545-\x00\x00\x02\x68\
1546-\x89\
1547-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1548-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1549-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1550-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1551-\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1552-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1553-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xe5\x49\x44\
1554-\x41\x54\x38\x8d\x95\x93\xbd\x6b\x53\x51\x18\x87\x9f\xf3\x75\x6f\
1555-\xd2\x18\x4a\x15\xb1\xd4\x26\x20\x22\x34\x5a\x07\x1d\x54\x70\x69\
1556-\x11\xba\xb8\x94\x86\xaa\x08\xe2\xa4\x82\x68\x3b\xe8\xe2\xe0\x24\
1557-\x82\xff\x40\x04\xc1\xc1\x8f\xb1\x88\xc5\xa1\x53\x47\x87\xda\x52\
1558-\x89\xd4\x14\x1c\x4a\xa5\x2d\x58\x2c\x46\x03\x6d\x62\x6f\x92\x73\
1559-\x1c\x92\x86\xda\x7b\x03\xfa\xc2\xbb\xbc\x1f\xcf\xf9\xbd\x3f\x38\
1560-\xe2\xea\xd9\x9b\x83\xd2\x78\x39\xb6\x83\x0c\xff\x19\xaf\x67\x9f\
1561-\x09\x0d\xfa\xe5\x66\x5f\x7f\xea\xe1\xd8\x00\x47\xd3\xdd\x74\x76\
1562-\x76\x36\xba\xce\x61\x6b\x35\x5c\xbd\xde\x48\x6b\x31\xc9\x64\x6b\
1563-\xf9\xda\x99\x5b\x08\x21\x84\x76\xae\x9e\x5a\xab\x3a\x36\x7e\x6d\
1564-\xd1\x73\xa8\xc6\x8f\xc9\x77\xe4\xc7\xef\x52\x59\x59\x01\x40\x19\
1565-\x83\x54\x0a\x67\x2d\x89\x74\x9a\xbe\x47\x8f\xe9\x1d\x19\x01\x60\
1566-\xf4\xc4\xa8\xd1\xca\xc1\xf1\xf4\x7e\x9e\xbc\x9a\xa7\x6a\xe7\xf8\
1567-\x1d\x54\x89\x0f\x3d\xe0\xe4\xda\x27\x06\xe6\xde\x70\xf1\xca\xa5\
1568-\xd6\xab\xdf\x96\x97\x99\xb9\x7d\x87\xfc\x46\x57\xab\xa6\xc1\x71\
1569-\xb0\xb7\x87\xec\xd0\x69\xba\x12\x1a\xa3\x25\x9b\xe5\x80\xf5\xf5\
1570-\x53\x54\xa7\x9f\x13\xc4\x62\xad\xe1\x03\x99\x0c\x62\x6a\x0a\xa5\
1571-\xc4\x6e\x00\x14\xcb\x16\xfc\x0e\x26\xdf\x7f\x26\xff\x65\x15\xa3\
1572-\x15\x71\x1c\x59\xeb\x28\x16\x0a\x21\xf3\xa4\x94\x7f\x03\x00\x04\
1573-\x2e\x6c\xb3\x73\xfc\x5c\x5c\x0c\x95\x95\xdc\xa3\x00\x40\x0a\x11\
1574-\x1a\x04\xa8\x96\x4a\xff\x06\xa0\x0d\xc0\x28\x15\xaa\x45\x9f\x10\
1575-\xbd\x1f\x09\x88\x56\x10\x61\xc1\x0e\xc0\xba\x46\x73\xe7\xcc\x48\
1576-\x80\x6b\x43\x28\x6d\x07\x7c\x2d\x57\x00\x38\x92\x88\x37\x01\x11\
1577-\x27\x38\x1b\x5e\x16\xce\xb2\xe0\x25\x59\xc8\xde\xc7\x48\x41\xe5\
1578-\x6d\x0e\x9f\x22\x32\x4a\x81\xdd\xa3\xc0\x49\xc9\x87\xe1\x31\xbe\
1579-\xf7\x9f\xc7\x68\x85\x67\x14\xb3\xf7\x9e\x72\x78\x7e\x9a\x7d\xbb\
1580-\x01\x56\xea\x55\xbb\xb4\x94\x4a\x0c\x1e\xc3\x68\x49\x22\xe6\x11\
1581-\xf3\x35\x1d\xbe\x47\x70\xee\x02\xdd\xbe\xc6\xf7\x34\x31\x4f\xe3\
1582-\x1b\x83\x37\x7c\xb9\xa5\x60\xa2\x30\x51\xd5\x50\xbb\x5e\xcf\x7f\
1583-\xcc\xbd\xb8\x31\x93\x01\x68\xfe\x45\xea\xc0\x56\x33\xdb\x85\x73\
1584-\xce\xfd\x01\x4a\xb1\x9e\xb9\x8a\x95\x2d\xe0\x00\x00\x00\x00\x49\
1585-\x45\x4e\x44\xae\x42\x60\x82\
1586 \x00\x00\x02\xd0\
1587 \x89\
1588 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1589@@ -1625,176 +2264,252 @@
1590 \x85\xd4\xed\x2a\xb6\x28\x70\x55\x91\xd2\x6b\x0a\x51\xa3\x48\xf9\
1591 \x2d\x23\xc4\x90\x84\x5b\xfd\x2b\xba\xf9\x07\x8a\x58\x02\xe7\x84\
1592 \xb0\x89\x4e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1593-\x00\x00\x01\xbb\
1594-\x89\
1595-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1596-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1597-\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
1598-\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\
1599-\x0b\x12\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
1600-\xd5\x0b\x04\x15\x33\x13\x1c\xad\xc4\x0f\x00\x00\x01\x48\x49\x44\
1601-\x41\x54\x38\xcb\xa5\x93\x41\x4b\x02\x51\x10\xc7\x7f\x6f\x77\xf5\
1602-\x4b\x78\x94\x95\xee\x11\xf4\x01\x22\xea\x2c\x11\x14\xde\xed\x14\
1603-\x41\x41\x87\x50\x12\x6f\x7d\x80\x24\xba\x45\xa2\x29\x5d\x83\xbe\
1604-\x41\xd4\x35\xe8\xb2\xc4\x26\xa2\x6c\x0a\xa5\x54\x76\xd8\x9d\x0e\
1605-\xae\xaf\xc4\x24\xb5\xb9\xbc\x99\xc7\xfb\xff\xe6\xcd\x7b\x33\xf0\
1606-\x4f\x53\x00\xb9\x7c\xb6\x0a\x24\xa7\xd4\x16\x32\x07\x87\x5b\x56\
1607-\x18\x24\x97\x97\x56\xb0\xed\xc4\x44\xca\x76\xbb\x45\xe9\xa2\x98\
1608-\x06\x34\x00\xdb\x4e\xb0\xba\x79\x34\x11\xe0\xba\xb4\xaf\x7d\x0d\
1609-\x88\x46\xa3\x00\x2c\x2e\xcc\x21\x63\x6a\x15\xe0\xe6\xf6\x61\x68\
1610-\x5f\x03\x7c\xdf\x07\xc0\xb0\x4c\x90\xfe\x61\xa5\xc2\x15\x41\x50\
1611-\x78\xde\xcb\x08\x58\x03\x82\x20\xe8\x03\x0c\x13\x94\xfc\xc8\xa9\
1612-\x00\x78\x7c\xf2\x78\xed\xf6\x00\x10\x91\x51\xc0\xc0\x4c\xcb\x0c\
1613-\x3d\xa1\xf9\xdc\xe1\xfd\xe3\x93\xee\x5b\x0f\x50\x58\x11\xeb\x6f\
1614-\x80\x61\x1a\x78\xed\x0e\xcd\x56\x07\x44\x85\xd0\x08\x20\x28\xc5\
1615-\xf8\x12\x06\xd4\x7b\xa7\x39\x24\xfa\x7e\x40\xa5\xe3\x5f\x6f\x30\
1616-\xf8\x05\xcf\xad\x4f\xd5\x4d\x1a\x50\xab\xd5\xb8\x3a\xdf\x9b\x48\
1617-\xd4\x68\x34\x46\x00\x85\xea\x65\x39\x3d\x65\x2b\x67\x00\x54\x2e\
1618-\x9f\x9d\x07\xee\x76\xb6\x77\xf1\x7d\x1f\xd7\x75\x89\xc5\x62\x43\
1619-\x75\x02\x38\x8e\xa3\x7b\x25\x1e\x8f\x73\x72\x7a\x0c\x90\x52\xb9\
1620-\x7c\x56\xd6\xd7\x36\x66\x9a\xc4\x72\xa5\x88\x05\xa4\xca\x95\xe2\
1621-\xd9\x8c\xd3\x9c\xfa\x02\xfc\xc1\x78\x3b\xf4\x23\x18\xf8\x00\x00\
1622-\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1623-\x00\x00\x03\x90\
1624-\x89\
1625-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1626-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1627-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1628-\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
1629-\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
1630-\x67\x9b\xee\x3c\x1a\x00\x00\x03\x22\x49\x44\x41\x54\x38\x8d\x6d\
1631-\x52\x4d\x6c\x54\x65\x14\x3d\xf7\x7b\xef\x95\xf9\xad\x33\x6d\x07\
1632-\x5b\xa8\xb6\x0a\x86\x12\xa6\xa1\xa2\x33\x8d\x7f\xd1\x98\x46\x37\
1633-\xc4\x60\x58\xa8\xbc\x44\x8c\x90\x81\xf0\xb3\x61\x07\x1b\x0c\x4d\
1634-\x0c\x11\x74\x61\xa2\xe0\x03\xa3\x31\x4c\x25\x98\x34\x01\x37\xfc\
1635-\x04\x21\x92\xd4\xc2\xab\x71\xd1\xd0\x92\xd4\xd2\xc6\x01\x46\x3b\
1636-\xb4\x1d\xe8\xcc\xb4\xf3\xde\xfb\xbe\xeb\xa2\xf3\x92\x59\x70\x92\
1637-\x9b\xdc\xc5\x3d\x27\x27\xe7\x5c\x62\x66\xf8\x48\x65\xb2\xcf\x34\
1638-\xe8\xda\x11\x10\xde\xf4\xa4\x6a\xd5\x84\x98\x27\xc2\xb8\xe3\xca\
1639-\x13\x00\x2e\xd8\x96\xe9\xd6\xdd\x1e\x04\x70\x82\x7c\x81\x74\x26\
1640-\xbb\x45\xd3\xc4\x40\x4f\xd7\x2a\x7d\x5d\x67\xb3\xd1\xd6\x14\x01\
1641-\x98\x51\x28\x56\x30\x32\x76\xbf\x7c\x67\xfa\xa1\x27\x15\xef\xb6\
1642-\x2d\xf3\x6c\x7a\x57\x36\xc3\x8c\xef\x00\xc4\x88\x99\x91\xca\x64\
1643-\xd7\x1b\xba\x18\xd9\xda\xd7\x1d\x8a\xc7\x82\xd0\x89\xd0\x1c\x0d\
1644-\x20\x1c\xd0\x11\x0d\x19\x08\x1a\x02\x33\xc5\x45\x1c\xcf\x0e\x57\
1645-\x0a\xc5\x8a\x1d\x0d\x35\xf4\x3e\x2e\x57\x0d\x66\x34\x11\x33\xe3\
1646-\xd5\x3d\x67\x4f\xf5\xac\x6b\xfb\x34\x18\x30\xc4\xad\xd1\x1c\xaa\
1647-\xae\x07\x43\xd7\xe4\x9a\xd5\xb1\xc5\xbe\xf4\xf3\xe1\xde\xf5\xad\
1648-\xa4\x09\x82\x10\x84\x5f\xae\x4d\xa8\xb7\x5e\x6c\x17\x07\xbe\xbe\
1649-\xea\x38\xae\x6c\xd1\x01\x80\x99\x3f\xbc\x33\x5d\x10\xae\xa7\x58\
1650-\x31\x2f\x32\xe3\x33\xc7\x95\x67\xc6\xa7\x67\x93\x13\xf7\xe6\x8f\
1651-\x5e\xef\x68\xee\xda\xb7\x75\x53\x28\x11\x0b\xe1\xe3\x77\xbb\x44\
1652-\x2d\x06\x02\xa0\x04\x00\x48\xa9\xc2\x55\xc7\xf3\x92\x2f\x3c\xfb\
1653-\x83\x94\xea\x11\x80\x41\xdb\x32\xf3\xb6\x65\x5e\xf9\xe3\xdb\x8f\
1654-\x5e\x1a\x9d\x2c\xec\xdd\x7d\xec\x12\xee\x3f\x2c\x61\x7a\xa6\x0c\
1655-\xa9\x18\x00\x03\x00\x0b\x2c\xaf\xaa\xe9\xa9\x48\x7f\x63\x24\xf0\
1656-\x55\x67\xfb\xca\x6e\x00\x53\x75\x69\xeb\xba\x26\x76\x6e\x7b\x27\
1657-\xe9\x76\x3e\x1d\x45\xa2\x71\x05\x34\x41\xbe\x03\xd6\x6b\x77\xf1\
1658-\x5f\x3f\xdf\xbc\x80\x27\xe3\xb4\x27\xd5\x6b\x17\x87\x27\xab\x57\
1659-\xed\xa9\x25\xdf\xbc\xe3\xaa\x00\x00\xf6\x5b\xa8\x02\x30\x6a\x04\
1660-\xae\x9b\xdf\x00\xec\x04\xe0\x3e\x41\x58\xb7\x2d\xf3\x9e\x2f\xe0\
1661-\x9d\x3f\xfa\xbe\x06\x10\x98\x19\x17\xed\x7f\xd4\xa9\xf3\x7f\xe5\
1662-\xa4\x54\x3d\xb6\x65\x16\xeb\x59\x87\xb3\x63\xab\x4a\xe5\xa5\x8e\
1663-\xdf\x47\xc6\x6f\x00\x88\xe9\x00\x40\x04\x10\x11\xee\xfe\x57\x86\
1664-\x21\x18\x27\x07\xff\x24\x00\x5f\xd4\x93\x53\x99\x6c\x98\x88\xee\
1665-\xf6\x6e\x5c\x7b\x26\x3f\x33\x97\x02\xa0\x01\xa8\x0a\x00\x10\x44\
1666-\x04\x00\x1d\x89\x10\x56\xb7\x84\xf1\xe5\xfe\xb7\xa9\xad\x25\x72\
1667-\xec\x95\x3d\x3f\xdf\x4a\x65\xb2\xe9\x9a\xc6\xf6\x15\x86\xae\xe7\
1668-\xf2\xb3\x07\xf2\x85\xe2\xeb\x9a\x46\xae\x6d\x99\xae\x58\x76\x40\
1669-\x78\x5c\x71\x71\x61\x68\x8a\x3d\x8f\xd1\xbe\x32\x8a\xc3\x3b\xde\
1670-\x08\x7d\xd0\x97\x7c\xb9\xb5\x39\x72\x2d\xbd\x6b\xc0\x35\x74\xf1\
1671-\x8d\x54\x32\x3e\xf7\x68\x01\x4d\x8d\x41\xd2\x84\x18\x04\x00\xff\
1672-\x91\xa8\xff\xc7\xa1\xa5\x89\xdc\xdc\xe4\xa5\xe1\xc9\xce\xcc\x96\
1673-\x4d\xe1\x44\x2c\x88\xee\xb5\x09\x7a\xae\x3d\x1e\x2a\x96\x5d\xfc\
1674-\x3b\x5b\x82\xe3\x78\x14\x09\x1a\x38\x77\x79\xb4\xe2\x49\x75\x04\
1675-\x00\x96\x1f\x49\x31\x4d\xe4\xe6\x4e\xdf\x3c\xb9\x2d\xf9\xa0\xb0\
1676-\xf0\x49\xff\xf7\x37\xe6\x8f\x0f\xdc\x2c\x0d\xdf\xce\x23\x3f\x5b\
1677-\x46\xd5\x95\x10\x44\x28\xcc\x97\xe4\xb9\xcb\xa3\x8b\x52\xa9\x8c\
1678-\x6d\x99\x63\x00\xe0\xb7\xf0\x13\x80\xed\xb6\x65\x72\x2d\x30\x03\
1679-\xc0\x7b\x0d\x86\xb6\x57\x31\x6f\x90\x52\xc5\x0d\x5d\x9b\x21\xc2\
1680-\x50\xd5\x91\x87\x6c\xcb\xfc\xdb\x0f\xf7\x7f\x2e\x55\x76\x6a\x13\
1681-\x65\xcc\xc6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1682-\x00\x00\x02\xcd\
1683-\x89\
1684-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1685-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1686-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1687-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1688-\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1689-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1690-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x02\x4a\x49\x44\
1691-\x41\x54\x38\x8d\x8d\x91\x5d\x48\x14\x51\x18\x86\x9f\x19\x67\xdc\
1692-\xdd\x71\xdb\x35\xaa\x4d\x42\x12\x8c\x32\x22\x8b\x20\xa5\x50\x32\
1693-\xbb\x29\x32\x28\x51\xa8\xa0\x32\x09\x22\x08\x35\xe9\x22\xa8\x20\
1694-\x6f\xaa\x9b\x02\xe9\x22\x0a\x2c\x21\xe8\x57\x43\x2f\x0a\x0a\xa1\
1695-\x15\x95\x20\x12\x0c\x5c\x8c\x12\xd6\x8c\x7e\xdc\x5d\x58\x7f\x66\
1696-\xdd\x99\x9d\xd9\x9d\xe9\x62\xd3\x50\x76\xa1\xf7\xe6\x70\xf8\xce\
1697-\x79\xbe\xe7\x7c\x47\x78\xd1\xf5\xfc\xda\xe0\xd0\x40\x1b\xcb\x62\
1698-\x18\x06\x00\xc7\x8e\x1e\x3f\xb7\xb7\xaa\xfa\xfe\xf2\xfa\x42\xa4\
1699-\xc1\xa1\x81\xb6\xc6\x86\x33\x19\x8b\xba\xae\xf1\xa0\xb3\xe3\x9e\
1700-\x2c\xc9\x73\x15\x15\x95\x4f\x33\x9d\x11\x9a\x5a\xce\xdb\x75\xb5\
1701-\xf5\x8c\x7d\x1e\xcb\xd6\x04\x7f\xff\xbb\x25\xfb\x9a\x83\x87\xda\
1702-\x1b\x4e\x9d\x6e\x05\x90\x00\x5c\x2e\x85\x7c\xef\xca\xac\x80\xda\
1703-\xc3\x75\xe9\x6e\x82\x80\x20\x08\xbc\xec\xe9\xba\xb0\x08\x30\x0c\
1704-\x03\x4d\x8b\xd3\x17\x88\x31\x1a\x51\xb2\x42\x96\xc4\x53\x4b\xd9\
1705-\xd9\xc7\xf6\xb6\xf5\x8e\x2f\x8b\x06\xa3\x11\x85\x3b\x17\xf7\xa3\
1706-\x1b\xa9\xff\x62\x38\x73\x73\x68\xbe\xfd\xb6\x44\x02\xd0\xb4\x38\
1707-\x00\x53\xd3\x3a\xc1\xf0\xfc\x7f\x01\x8a\x7d\x79\x00\x48\xba\xae\
1708-\xe3\x72\x65\x57\xb7\xec\x14\xfe\x40\x07\xc3\xc1\x5e\x66\xd5\x30\
1709-\xde\x15\x3e\x76\x16\x1f\xa1\xa8\xba\x25\x0d\x88\xc7\xe3\x8b\x06\
1710-\x99\x2e\xdf\x7d\x73\x02\x87\x37\x41\xf9\xbe\x4d\x88\x8e\x12\xc2\
1711-\xd1\x08\x23\x81\x2e\xae\x3e\x1b\xc0\x4d\x0b\xe2\xc2\x0c\x32\xc5\
1712-\x1f\xe8\xc0\xe1\x4d\x50\xb6\xa7\x14\x39\x2f\x87\xb8\x35\x8f\xad\
1713-\xa4\x28\xde\xb5\x96\x48\xea\x3b\x21\xfd\x55\x1a\x90\xcd\x60\x38\
1714-\xd8\xcb\x86\xad\x85\xc4\x0c\x15\xd5\x50\x51\x8d\x39\x64\x51\xe6\
1715-\xe4\x96\x46\xcc\x75\x2a\x51\x73\xe8\x9f\x81\x2c\x5a\xd8\x80\x6d\
1716-\xdb\xf0\x77\x9d\x55\x43\xb8\xdd\x6e\x2e\x95\x5f\xc1\xb6\x2d\x64\
1717-\x31\x97\x87\x07\x1e\xf1\x71\xea\x03\x66\x6e\x02\x33\x39\xc3\xe2\
1718-\x2f\x14\x79\x13\x44\x63\x06\x3f\xa3\x1a\xd8\x02\x16\x36\x6e\xc5\
1719-\xc7\x44\x68\x82\x35\x8a\x8f\xd7\x75\x7d\x38\x24\x27\x31\x43\xa5\
1720-\x67\xbc\x1b\x5b\x13\x90\xa5\xfc\xb4\x41\x28\x12\x66\xc7\xee\x4a\
1721-\x3e\x7d\x9b\xc1\x4c\xda\x18\x29\x0b\x33\x69\xb3\xb1\xa0\x86\xc9\
1722-\x40\x88\xf6\xe1\x5b\x38\x24\x27\x00\xad\xfe\x26\xb4\xa4\x86\x38\
1723-\xa9\xb0\xbd\xa0\x74\x44\x68\xbe\xf9\xa4\xff\x7d\xd0\xaa\xca\x34\
1724-\x03\x1b\x8b\xf1\xd8\x75\x2c\x77\x98\x55\x9b\x15\x3c\x1e\x37\x5f\
1725-\x7f\x8d\xc3\xa4\x82\xc7\x5c\x3d\x3f\x1d\xff\x9d\x2f\x2c\xbc\x39\
1726-\x5b\xe4\x7a\xa7\x84\xc8\x65\x44\x1a\x49\x51\x48\x0e\x3f\xb0\xe8\
1727-\xc4\xe2\x86\xd9\xad\x27\xff\x00\xd1\x6f\xf8\x15\x16\x3e\x02\x36\
1728-\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1729-\x00\x00\x02\x0b\
1730-\x89\
1731-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1732-\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1733-\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
1734-\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\
1735-\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
1736-\xd5\x0b\x0a\x13\x00\x30\xae\xf3\xdb\xcc\x00\x00\x01\x98\x49\x44\
1737-\x41\x54\x38\xcb\xa5\x91\x4d\x4b\x5b\x41\x18\x85\x9f\x91\xd4\x92\
1738-\x08\xa6\x29\x28\xb1\x4a\xc1\xd2\x2e\x5d\x08\x42\x2d\x94\xe6\x27\
1739-\x94\x60\x55\x70\xe3\x47\x29\x48\xab\xa8\x5b\xbb\x68\xb7\xdd\xb9\
1740-\x12\x84\x1a\x75\x55\x24\x04\x97\xea\xc2\x6a\x57\xe2\x42\x97\xba\
1741-\x13\xf1\xa3\xa0\x12\x35\x29\xe6\xde\x3b\xb9\x73\x5f\x17\x37\x5a\
1742-\x12\x12\xd4\xf6\x30\x30\x30\xc3\xfb\x9c\x33\x67\x54\x67\x77\xc7\
1743-\x97\x68\x34\xfa\x95\x12\x69\xad\xfd\xdd\xd1\x83\x33\x89\xb9\x29\
1744-\x2a\x48\x0d\x8f\x7c\x92\xfe\xde\xf7\x65\x2f\x6d\xdb\x62\x7a\xe6\
1745-\x3b\xd9\x6c\xb6\x27\x39\x9f\xfa\x51\x16\xf0\x71\x68\x50\xba\xde\
1746-\x75\xb3\xbd\xb3\x5d\xc9\x84\xd5\xb5\x9f\xa5\x47\x13\xc9\xf9\xd4\
1747-\x18\x40\xc0\x18\x43\x30\x18\xe2\x51\x38\x52\x11\x10\x7f\xdb\xe1\
1748-\xbb\x29\x85\x52\x8a\xd4\x42\x72\x14\xf0\x01\x5a\x6b\x2c\x2b\xc7\
1749-\x45\xe6\x9c\x7f\x51\xc0\x75\xdd\x5b\x13\xdc\xbc\xb7\x90\xa0\x08\
1750-\x00\xdc\x24\x48\x6c\x85\xef\x66\x5b\x1b\xa7\xed\x43\x5c\xc2\xd5\
1751-\x4e\x69\x02\x8f\xf1\x81\x18\x25\x26\x65\x15\x7a\x18\xe0\xf3\xe4\
1752-\x8a\x0f\xb8\x4e\xf0\xa4\xae\x09\xc7\x35\x1c\x9d\xd9\xb7\x02\x9e\
1753-\xd5\xd7\x00\x50\x05\x10\x0c\x86\xf8\x6d\x85\xa9\x0d\x55\xdf\xbb\
1754-\xc4\xaa\xeb\x0e\x32\x16\x34\x37\xdc\xad\x03\x63\x3c\xec\xbc\x29\
1755-\x4e\xb0\xbe\x07\x6d\x2d\x4f\x39\x4c\x5b\x00\x88\x08\x9e\x27\xb8\
1756-\xc6\xc3\xc9\x1b\x2e\x6d\x97\x8b\x4b\xcd\x49\xc6\xe6\x38\xe3\x90\
1757-\x73\x4c\xf1\x2f\x3c\x8f\x58\xa4\xff\x68\x8e\xce\x2c\x10\x85\x87\
1758-\x50\x58\x88\x80\x20\x88\x28\x44\x04\x01\xec\xbc\xf7\x17\x70\x7c\
1759-\x7a\x42\xeb\xab\xd7\x6c\xee\x9e\x17\x86\xc4\x1f\x12\xf0\x10\x04\
1760-\x05\x22\xfe\xb0\xc0\xcb\x17\x8f\x59\x5e\x5c\x22\x62\x1f\xcc\xaa\
1761-\x37\x7d\xdf\xd6\x72\x0f\x1a\x63\xf7\x2d\xaf\x26\xbf\xbf\xf1\x6b\
1762-\x76\xbc\x9d\xff\xd5\x15\x26\x94\xc3\xfa\x0c\x4b\xb2\xef\x00\x00\
1763+\x00\x00\x02\x68\
1764+\x89\
1765+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1766+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1767+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1768+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1769+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1770+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1771+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xe5\x49\x44\
1772+\x41\x54\x38\x8d\x95\x93\xbd\x6b\x53\x51\x18\x87\x9f\xf3\x75\x6f\
1773+\xd2\x18\x4a\x15\xb1\xd4\x26\x20\x22\x34\x5a\x07\x1d\x54\x70\x69\
1774+\x11\xba\xb8\x94\x86\xaa\x08\xe2\xa4\x82\x68\x3b\xe8\xe2\xe0\x24\
1775+\x82\xff\x40\x04\xc1\xc1\x8f\xb1\x88\xc5\xa1\x53\x47\x87\xda\x52\
1776+\x89\xd4\x14\x1c\x4a\xa5\x2d\x58\x2c\x46\x03\x6d\x62\x6f\x92\x73\
1777+\x1c\x92\x86\xda\x7b\x03\xfa\xc2\xbb\xbc\x1f\xcf\xf9\xbd\x3f\x38\
1778+\xe2\xea\xd9\x9b\x83\xd2\x78\x39\xb6\x83\x0c\xff\x19\xaf\x67\x9f\
1779+\x09\x0d\xfa\xe5\x66\x5f\x7f\xea\xe1\xd8\x00\x47\xd3\xdd\x74\x76\
1780+\x76\x36\xba\xce\x61\x6b\x35\x5c\xbd\xde\x48\x6b\x31\xc9\x64\x6b\
1781+\xf9\xda\x99\x5b\x08\x21\x84\x76\xae\x9e\x5a\xab\x3a\x36\x7e\x6d\
1782+\xd1\x73\xa8\xc6\x8f\xc9\x77\xe4\xc7\xef\x52\x59\x59\x01\x40\x19\
1783+\x83\x54\x0a\x67\x2d\x89\x74\x9a\xbe\x47\x8f\xe9\x1d\x19\x01\x60\
1784+\xf4\xc4\xa8\xd1\xca\xc1\xf1\xf4\x7e\x9e\xbc\x9a\xa7\x6a\xe7\xf8\
1785+\x1d\x54\x89\x0f\x3d\xe0\xe4\xda\x27\x06\xe6\xde\x70\xf1\xca\xa5\
1786+\xd6\xab\xdf\x96\x97\x99\xb9\x7d\x87\xfc\x46\x57\xab\xa6\xc1\x71\
1787+\xb0\xb7\x87\xec\xd0\x69\xba\x12\x1a\xa3\x25\x9b\xe5\x80\xf5\xf5\
1788+\x53\x54\xa7\x9f\x13\xc4\x62\xad\xe1\x03\x99\x0c\x62\x6a\x0a\xa5\
1789+\xc4\x6e\x00\x14\xcb\x16\xfc\x0e\x26\xdf\x7f\x26\xff\x65\x15\xa3\
1790+\x15\x71\x1c\x59\xeb\x28\x16\x0a\x21\xf3\xa4\x94\x7f\x03\x00\x04\
1791+\x2e\x6c\xb3\x73\xfc\x5c\x5c\x0c\x95\x95\xdc\xa3\x00\x40\x0a\x11\
1792+\x1a\x04\xa8\x96\x4a\xff\x06\xa0\x0d\xc0\x28\x15\xaa\x45\x9f\x10\
1793+\xbd\x1f\x09\x88\x56\x10\x61\xc1\x0e\xc0\xba\x46\x73\xe7\xcc\x48\
1794+\x80\x6b\x43\x28\x6d\x07\x7c\x2d\x57\x00\x38\x92\x88\x37\x01\x11\
1795+\x27\x38\x1b\x5e\x16\xce\xb2\xe0\x25\x59\xc8\xde\xc7\x48\x41\xe5\
1796+\x6d\x0e\x9f\x22\x32\x4a\x81\xdd\xa3\xc0\x49\xc9\x87\xe1\x31\xbe\
1797+\xf7\x9f\xc7\x68\x85\x67\x14\xb3\xf7\x9e\x72\x78\x7e\x9a\x7d\xbb\
1798+\x01\x56\xea\x55\xbb\xb4\x94\x4a\x0c\x1e\xc3\x68\x49\x22\xe6\x11\
1799+\xf3\x35\x1d\xbe\x47\x70\xee\x02\xdd\xbe\xc6\xf7\x34\x31\x4f\xe3\
1800+\x1b\x83\x37\x7c\xb9\xa5\x60\xa2\x30\x51\xd5\x50\xbb\x5e\xcf\x7f\
1801+\xcc\xbd\xb8\x31\x93\x01\x68\xfe\x45\xea\xc0\x56\x33\xdb\x85\x73\
1802+\xce\xfd\x01\x4a\xb1\x9e\xb9\x8a\x95\x2d\xe0\x00\x00\x00\x00\x49\
1803+\x45\x4e\x44\xae\x42\x60\x82\
1804+\x00\x00\x02\x69\
1805+\x89\
1806+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1807+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1808+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xf0\x00\xf0\x00\xef\x34\x06\
1809+\x67\x1b\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\
1810+\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
1811+\xd5\x0b\x05\x10\x0f\x05\x25\xfd\xad\x2f\x00\x00\x01\xf6\x49\x44\
1812+\x41\x54\x38\xcb\x9d\x92\x4d\x6b\x13\x51\x18\x85\x9f\x3b\xc9\x24\
1813+\x4d\x9a\x66\x86\x4a\x52\x0a\x0a\xb5\x5d\x68\x1a\x45\x14\xc1\x85\
1814+\xb8\x14\x0a\x55\x77\xe2\x26\xbf\xc0\x6f\xa9\xf4\x1f\x88\xb6\x24\
1815+\x41\x44\x14\x74\x59\x77\x55\x10\xc5\x4d\xa8\x3b\x41\xec\xa2\x54\
1816+\x28\xa4\x89\x56\xab\x96\x50\x35\x8d\xcd\x47\x27\x4d\x32\x33\xd7\
1817+\x45\x48\x49\x42\x52\xaa\x67\x77\x0f\xef\x3d\xef\xe1\xbc\x47\x3c\
1818+\x79\xfa\x78\x31\xf7\x27\x77\x8c\x3d\x40\x55\xd5\xe7\x13\xb7\x26\
1819+\x2f\xb6\x90\xd3\xd1\xbb\x96\xdc\x23\xee\x4d\xdf\x91\xed\xa2\x4e\
1820+\x29\xeb\x5c\x3e\xbf\xb9\xeb\x76\x4d\xd3\x3b\xf2\x4e\x21\xc4\xce\
1821+\x23\x99\x4c\x76\x1c\x0a\x85\x42\x5d\x85\x77\x1c\xb4\x0f\x66\x32\
1822+\x19\x66\x5f\xcc\x02\x90\x98\x4b\x00\xd0\xb4\x6b\x77\x07\xdf\xbe\
1823+\xaf\x92\x4a\xa7\x39\x7a\x6a\x8c\x6d\xc5\x8b\x69\x2b\xb8\x64\x85\
1824+\xd4\xfc\x6b\x26\x6e\xdf\x8c\xc4\xa2\xf7\x9f\x35\xfe\x28\xed\x0e\
1825+\x34\x5d\x23\x95\x4e\x73\xe8\xe4\x18\x9f\x0b\x5e\x06\x07\x02\x8c\
1826+\x1c\x08\x52\x12\x3e\xb4\xd1\x71\xfc\x9a\x3e\x73\xed\xc6\x95\xe3\
1827+\x5d\x1d\x24\xe6\x12\x0c\x87\x4f\xb3\x52\x70\x73\xe9\xcc\x10\xbe\
1828+\x1e\x15\xd3\xb6\x51\x1d\x0a\xef\x96\x25\xc1\x23\xe3\x36\x4b\x6f\
1829+\x16\x00\x01\xa0\x74\x0a\x4b\x7a\x03\x0c\x0d\xe8\x58\xb6\x64\xdb\
1830+\x34\xa9\xd4\x2c\xca\x55\x8b\x7e\x9f\x9b\x5f\x65\xb5\x25\x09\x45\
1831+\x4a\x89\x94\x76\x4b\x30\x6e\xb7\x0b\x84\xa0\x5c\xb5\xa8\xd6\x24\
1832+\x9b\x5b\x35\xdc\xaa\x83\xfd\xfd\x1e\xa4\x10\x2d\x5d\x70\x02\xb6\
1833+\x69\x9a\x2d\x4e\x6c\x63\x83\x35\xa3\x8a\xdf\xa3\xa2\xf7\xb9\xb0\
1834+\x2d\x89\xdf\xe3\xe4\xd3\x46\x81\x7d\x3d\x96\x9d\x6b\x72\xae\xd4\
1835+\x2b\xea\x42\xd3\x74\x34\x4d\xe7\xc2\xb9\xf3\xa4\x17\xde\x12\xec\
1836+\x13\x7c\xf9\x99\x27\x9b\x2b\x91\x37\x2a\x7c\x5c\x59\xa7\x54\xae\
1837+\x90\x5b\x7a\xe5\x2c\x15\x8b\x3f\x1a\x02\x22\x1a\x9f\x9a\xb1\x2c\
1838+\x2b\xd2\x7c\x0d\xc3\x30\x70\x38\x54\x4e\x9c\x8d\xb0\xbc\x56\x64\
1839+\xcb\x54\x18\xec\x95\xac\x2f\xbe\x64\xf8\xe0\x08\x00\x1f\xe6\xdf\
1840+\xa7\x1e\x3e\x78\x74\x58\x74\x6b\xd8\xd5\xeb\x97\xa7\x02\x81\xe0\
1841+\x64\x33\xe7\xeb\xf5\x11\x1e\x0d\xf3\x3b\x9b\xad\xf7\x65\xf5\x2b\
1842+\x82\x7f\x44\x2c\x1e\x95\x0d\x91\xff\x12\x00\x94\x58\x3c\x6a\x01\
1843+\x94\x0d\x83\xbf\x06\x8c\xf6\xd3\x7f\x33\xe7\x2e\x00\x00\x00\x00\
1844+\x49\x45\x4e\x44\xae\x42\x60\x82\
1845+\x00\x00\x06\x11\
1846+\x47\
1847+\x49\x46\x38\x39\x61\x10\x00\x10\x00\xc4\x00\x00\xff\xff\xff\xee\
1848+\xee\xee\xdd\xdd\xdd\xbb\xbb\xbb\xaa\xaa\xaa\x99\x99\x99\x88\x88\
1849+\x88\x77\x77\x77\x66\x66\x66\x55\x55\x55\x44\x44\x44\x33\x33\x33\
1850+\x22\x22\x22\x11\x11\x11\x00\x11\x00\x00\x00\x00\xff\xff\xff\x00\
1851+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
1852+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
1853+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\xff\x0b\x4e\
1854+\x45\x54\x53\x43\x41\x50\x45\x32\x2e\x30\x03\x01\x00\x00\x00\x21\
1855+\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x00\x00\x10\x00\x10\x00\
1856+\x00\x05\x77\x20\x24\x42\x01\x89\x24\xe5\xa8\x42\x02\x23\x04\xcf\
1857+\x23\x90\xab\x28\x3c\x4c\xe0\xc8\xc1\xac\x0a\x33\xc3\xc3\xb0\x03\
1858+\xa6\x44\x01\xc5\x10\xe6\x48\x24\x5e\xb6\x94\x40\xe9\x18\xf8\x90\
1859+\x50\x64\x80\xb0\xb8\x22\x55\x06\x85\xb3\x50\x23\x05\xce\x61\x85\
1860+\x82\x5c\x3b\x9f\xcd\x83\xc3\x31\xaa\x0a\x18\x1a\x0a\x6f\xcf\x3a\
1861+\x3a\x30\x0a\x76\x06\x40\x02\x04\x24\x7c\x2c\x33\x02\x0b\x03\x04\
1862+\x05\x02\x82\x5f\x23\x01\x09\x07\x10\x05\x64\x02\x80\x35\x02\x07\
1863+\x33\x97\x22\x03\x73\x35\x03\x03\x65\x21\x00\x21\xf9\x04\x05\x07\
1864+\x00\x10\x00\x2c\x00\x00\x00\x00\x0f\x00\x10\x00\x00\x05\x63\x20\
1865+\x24\x8e\xd0\x81\x88\x01\x39\x2a\x22\x23\x0a\x0d\xa1\x8a\x0b\xc4\
1866+\x38\xf6\x33\xcc\x62\xc1\x34\x85\x07\x6b\x94\x00\x42\x1a\x0b\xd3\
1867+\xe3\x91\x4a\x89\x12\x90\x85\x60\x34\x98\xf2\x86\x3c\x08\x01\x71\
1868+\x38\xec\xb2\x90\x42\x02\x81\xf8\x82\x5f\x85\x99\x73\x44\x50\x40\
1869+\x55\x01\x81\xd3\xa0\x90\x15\x64\xaf\xd7\x5a\x84\x10\x0c\x08\x01\
1870+\x66\x2a\x07\x69\x7f\x22\x82\x28\x05\x29\x86\x10\x56\x59\x02\x8e\
1871+\x23\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x00\x00\
1872+\x10\x00\x0f\x00\x00\x05\x60\x20\x24\x8e\x50\x61\x90\xa8\x88\x88\
1873+\x0a\x13\x04\x4b\x2a\x3a\x09\xd4\x06\x75\x1a\x94\x10\xd1\x12\x23\
1874+\xc1\x40\x74\x58\x00\x17\x0a\x83\x21\x26\x30\x3c\x1e\x02\x55\x23\
1875+\x27\x12\x14\x9e\x8f\xe1\x68\x80\xd8\x6d\x1f\x27\xd1\x40\x59\x88\
1876+\xa2\x5e\x68\xc2\x61\x2d\x6b\xf7\xdc\x28\x84\xc1\xeb\x2e\x1c\x86\
1877+\x83\x01\x9a\x4e\xf2\x1a\x04\x80\x10\x02\x7c\x24\x05\x43\x81\x01\
1878+\x66\x29\x40\x82\x66\x7c\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\
1879+\x2c\x00\x00\x00\x00\x10\x00\x10\x00\x00\x05\x62\x20\x24\x8e\x62\
1880+\x41\x9e\xe2\x11\x40\x89\x22\x26\x03\x0a\x2d\x07\xeb\x22\xe8\x2a\
1881+\x36\x43\x1b\xe3\x01\x81\xc8\x80\x10\x2a\x0e\x85\x82\x2b\x60\x6a\
1882+\xe8\x0e\x34\x88\x0e\x32\x60\xc8\x20\x35\x92\xb0\x18\x58\x15\x08\
1883+\x04\x19\xa2\xd1\x70\xc0\x92\x05\xe1\x09\xf1\x68\x2f\x48\xb1\x93\
1884+\x60\x2e\xd0\x09\x0c\xa6\xeb\x68\x90\x86\xcc\xf5\x52\x22\x01\x03\
1885+\x5d\x53\x57\x03\x42\x5d\x80\x7e\x82\x86\x80\x8a\x28\x21\x00\x21\
1886+\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x00\x00\x10\x00\x0e\x00\
1887+\x00\x05\x49\x20\x24\x8e\xd0\x71\x90\xa8\x98\x88\xcf\xc3\xa6\xec\
1888+\xda\x42\x0d\x2c\x1e\x6e\x5b\xd0\x68\xd2\x0c\x90\xc7\xc2\xe4\x2a\
1889+\x05\x47\x89\xc7\x0a\x55\xdc\x91\x96\xa8\xc5\x48\x00\x29\x38\xa3\
1890+\xad\x47\xcd\x74\x4a\xd5\x5e\x53\xd4\x40\x98\xba\x8e\xc6\x2d\x2a\
1891+\x44\x6d\xcb\xa6\xd8\xa4\x01\x54\x04\x87\x85\x00\x00\x21\xf9\x04\
1892+\x05\x07\x00\x10\x00\x2c\x00\x00\x00\x00\x10\x00\x10\x00\x00\x05\
1893+\x71\x20\x24\x8e\xd0\x30\x90\x28\x14\x10\xa2\x71\x88\x87\x90\x06\
1894+\x07\x6b\x18\x90\xc1\xc8\xa9\x80\x08\x37\x41\x03\x47\x1a\x10\x64\
1895+\x86\x82\xe9\xb0\x28\x31\x14\xa2\xc0\xc0\x30\x08\x8c\x02\x82\x04\
1896+\x64\xc1\x13\x09\x58\xa4\x80\xa2\x60\x55\x09\xce\x65\x52\x21\x91\
1897+\x50\x18\xce\xe8\x54\x81\xc1\x68\x20\xc2\x28\xc1\xa2\x80\xc2\x76\
1898+\x21\x5f\x22\x50\x51\x02\x56\x01\x65\x0d\x0f\x59\x10\x0d\x69\x29\
1899+\x04\x0f\x5a\x10\x60\x78\x23\x0c\x0f\x27\x33\x79\x0f\x7c\x29\x9e\
1900+\x8e\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x00\x00\
1901+\x10\x00\x10\x00\x00\x05\x60\x20\x24\x8e\x90\x20\x90\xa8\x38\x88\
1902+\x45\xc1\xa6\xec\x49\xb8\x85\x02\x8b\x46\x30\x43\x0a\x81\x9a\x01\
1903+\xdd\xc0\x54\x40\x88\x14\x46\x91\x60\x98\x42\x34\x12\xa8\xc0\x09\
1904+\x85\xf0\x89\x82\x41\x18\x01\x81\x80\x62\x03\x5a\xc5\x62\x71\xb8\
1905+\x8d\x12\x04\xac\x19\xb2\x82\x20\xc0\xb0\x03\x82\x01\x09\x18\x17\
1906+\xb7\xc6\xc3\x00\x29\x2f\x61\x01\x7a\x53\x53\x80\x0e\x0f\x26\x0e\
1907+\x56\x80\x09\x0b\x70\x24\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\
1908+\x2c\x00\x00\x01\x00\x10\x00\x0f\x00\x00\x05\x5e\x20\x24\x42\x82\
1909+\x38\x0c\x22\x31\xae\x10\xda\xa2\x03\xc2\xae\x30\x8a\xb8\x81\x98\
1910+\x8b\x42\x09\x11\x07\x52\xc2\x30\x0a\x08\x76\xab\xc3\x22\xc8\x42\
1911+\x8e\x0c\xae\xd9\x6c\x70\xa8\xaa\xa4\xa3\x58\x62\x88\xd5\xdd\xa4\
1912+\x46\x9f\x91\x01\x61\xb2\x1e\x0f\x83\x41\x41\x26\x2a\x58\x86\xc7\
1913+\x81\xc1\x28\x40\x88\x33\x01\xba\xd4\x08\x2c\xb0\x04\x0f\x28\x0d\
1914+\x7d\x10\x0c\x51\x2b\x3e\x10\x09\x52\x21\x00\x21\xf9\x04\x05\x07\
1915+\x00\x10\x00\x2c\x00\x00\x00\x00\x10\x00\x10\x00\x00\x05\x63\x20\
1916+\x24\x8e\x50\x10\x90\xa8\x78\x42\x82\x20\x0e\x2b\x2a\x9c\x2d\x5b\
1917+\xc4\x64\xe0\xb6\x81\xe1\xa2\x2b\x93\x69\x40\x10\x19\x0a\x29\x60\
1918+\x01\x81\x4c\xa2\x0a\x3f\x27\x49\x60\xa8\x4a\x47\x82\x83\xb6\xf8\
1919+\x62\x0c\x50\xbe\xa9\xe2\xf1\x68\x8e\x14\x0d\x83\xca\xf1\x58\xb8\
1920+\x18\x05\x02\x42\x01\x29\x30\x10\xa2\xc2\xd7\xb8\x58\x14\x9b\x51\
1921+\x23\x0c\x01\x7d\x10\x09\x0e\x4e\x0e\x6f\x0b\x22\x74\x49\x2b\x5a\
1922+\x49\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x01\x00\
1923+\x10\x00\x0f\x00\x00\x05\x5c\x20\x24\x8e\x50\x60\x06\x02\xa9\x8a\
1924+\xa6\x38\xac\xea\xf9\xae\xa9\x2a\xd4\xc5\x0c\x8f\x84\x31\x04\xb6\
1925+\x95\x0e\x82\x68\x18\x11\x30\x82\x72\xb0\x78\x38\x15\xb0\x42\xc1\
1926+\x87\x12\x14\x1a\xb5\x51\x61\x07\xf9\x8d\x02\x88\xc5\x56\xc4\x20\
1927+\x06\x18\x0a\xa5\x21\xd1\x4d\x1c\x44\x84\x6c\x21\xa1\x18\x34\x08\
1928+\x25\xd8\x02\x42\x87\x1c\xf6\x42\x65\x10\x0a\x50\x44\x59\x30\x06\
1929+\x06\x30\x21\x00\x21\xf9\x04\x05\x07\x00\x10\x00\x2c\x00\x00\x01\
1930+\x00\x10\x00\x0f\x00\x00\x05\x5d\x20\x24\x8e\x24\x14\x94\xe8\x18\
1931+\x08\xa5\xc0\xa2\xc2\x49\x3e\x8f\x51\xca\xc1\xf0\x0e\xf4\xf3\x8e\
1932+\x02\x5d\xe9\xf0\x20\xb4\x64\x22\x86\x32\x05\x19\x38\x05\x09\x47\
1933+\xa3\x71\x48\x39\x09\xaf\x00\x41\x81\x32\x96\x12\xa2\x9f\xc8\x80\
1934+\xf0\x42\x16\x90\xaa\x22\xe1\x2c\x20\x44\x87\x82\x48\x28\x27\x1c\
1935+\x10\x02\x34\xb3\xc1\xbd\x43\x0a\x5c\x30\x81\x08\x60\x01\x55\x4c\
1936+\x22\x05\x72\x28\x21\x00\x21\xf9\x04\x09\x07\x00\x10\x00\x2c\x00\
1937+\x00\x00\x00\x10\x00\x10\x00\x00\x05\x64\x20\x24\x8e\x64\x49\x0e\
1938+\x8d\x60\xae\xc3\xc3\xac\x6b\xf2\x10\xb0\xf8\x42\xc2\xf3\x98\x42\
1939+\x20\x0a\xb7\x02\x6d\x14\xe8\x95\x0a\x8e\x41\xc9\x37\x32\x2c\x14\
1940+\x0a\x83\xa9\x28\x50\x1d\x18\x58\xe9\xb2\xaa\x82\xf8\x06\x09\x93\
1941+\x92\x14\x38\x40\x52\x25\x82\x61\x0c\x09\x4b\x11\x87\x2a\xa1\x80\
1942+\x13\xfe\x44\xa8\x81\xc1\x8c\xe8\x32\x45\x01\x0b\x08\x10\x7b\x10\
1943+\x04\x07\x7f\x24\x83\x84\x66\x10\x74\x35\x86\x43\x25\x21\x00\x3b\
1944+\
1945+\x00\x00\x01\x50\
1946+\x89\
1947+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1948+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1949+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1950+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1951+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1952+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1953+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x00\xcd\x49\x44\
1954+\x41\x54\x38\x8d\xa5\x93\x31\x0e\x83\x30\x0c\x45\x7f\x90\x25\xc6\
1955+\x6e\xd0\x39\x5c\x80\xfb\x31\x20\x06\x0e\xc7\x01\xd8\x60\x2f\x3d\
1956+\x01\x01\x27\xee\x84\x4a\x45\x92\x42\xfb\xa7\x24\xd6\x7f\xfe\xb1\
1957+\x12\x25\x22\x68\xdb\xf6\xc1\xcc\x39\x2e\x88\x88\xa6\xaa\xaa\xee\
1958+\x04\x00\xcc\x9c\xd7\x75\x7d\xc5\x8f\xa6\x69\x72\x00\xa0\xfd\xa1\
1959+\x88\x04\x0d\xfb\x5a\x92\x24\xef\x75\xac\x8b\xd6\x0a\x5a\xab\x28\
1960+\x38\x0a\xf8\x96\x04\x08\x5c\xa1\x28\x3e\xb9\xdb\x7e\x18\xec\xff\
1961+\x09\x98\x39\x9c\x60\xd3\x38\xba\x43\x67\xe7\x1c\x96\x85\xc1\xcc\
1962+\x48\xd3\xd4\x0f\x08\x0d\x6b\x5d\x57\x30\x33\xac\xb5\xf1\x04\x5b\
1963+\x51\x44\x20\x22\xe8\x7b\x81\xb5\x16\xc6\x38\xaf\xf9\x00\x98\xe7\
1964+\x19\x00\x70\x2b\x4b\x6f\x92\x67\xd7\xc5\x01\xc6\x18\xaf\x31\x26\
1965+\xef\x10\x7d\x9d\x4e\x01\xb2\x2c\xfb\x2d\x01\x11\x4d\xdb\xe7\x38\
1966+\x6d\x24\x9a\x00\x40\xc5\xde\xf9\x19\xbd\x00\x7a\xc4\x6d\xe9\x1c\
1967+\xa0\x2c\xd8\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
1968+\x00\x00\x02\x7b\
1969+\x89\
1970+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
1971+\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\
1972+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
1973+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\
1974+\x01\x42\x28\x9b\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
1975+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
1976+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x01\xf8\x49\x44\
1977+\x41\x54\x38\x8d\x95\x92\x3d\x68\x13\x71\x18\xc6\x9f\xf7\x2e\xc9\
1978+\x35\xa9\x9a\x90\xf8\xd1\x5a\x95\x7e\x91\x2f\x2c\x7e\x05\x5d\xc4\
1979+\xb1\x8b\x53\x31\x60\xb5\x83\x43\xc1\xc1\x45\x10\x8a\x43\xa7\x88\
1980+\xe8\x10\xb0\xe2\x5c\x50\x3a\x4a\x26\xb9\x29\x3a\x74\x91\x40\x6d\
1981+\x16\xab\x68\x2e\x88\x41\x8a\x16\xdb\x6b\x43\x72\xa1\x21\x77\xf7\
1982+\x7f\x1d\x34\xe1\xae\x09\xc5\x3e\xd3\xff\xeb\x7d\xde\xdf\xc3\xfb\
1983+\xa7\x7c\x3e\x9f\x2b\x14\x0a\x37\x70\x00\xa5\xd3\xe9\x9b\xc9\x64\
1984+\xf2\x35\x00\x20\x93\xc9\xf0\x41\xf5\xaf\x06\xcc\x0c\x4f\xdb\x55\
1985+\xd7\x75\x08\x21\x00\x00\x44\xd4\xe9\xd6\x5e\x13\x11\x64\x59\x46\
1986+\x30\x18\x74\xd1\x74\x0c\x84\x10\xd0\x34\xcd\x55\xe0\x14\x11\x21\
1987+\x91\x48\x74\xc5\xf1\x38\x37\xb1\x58\x6c\x5f\x82\x5e\xf2\x38\x1f\
1988+\x3a\x09\xf6\xea\xbf\x08\xa2\xd1\x68\x8f\x8e\x4d\x30\x2b\x90\x24\
1989+\x09\x82\x79\x7f\x83\x72\xb9\xec\xba\x8c\xc7\xe3\x68\x99\x3e\x64\
1990+\x97\x3e\x20\xf7\xae\x82\xdf\xba\x81\x13\xc7\x8e\x60\x24\xe4\xc3\
1991+\xd3\x54\xd6\xb7\xbb\x3a\xd7\x72\x45\xd8\x4b\x60\x5a\x02\x93\xf7\
1992+\xde\x80\xfb\x42\x48\x5e\xb9\x8a\x84\xac\x60\x4b\xaf\xe3\x6b\xf9\
1993+\x13\x40\x5b\x45\x7f\x2a\x7b\xc9\x45\xa0\x69\x9a\x2b\xf3\xa2\xfa\
1994+\x03\xb6\xf7\x30\xce\x5e\xb8\x88\x81\x90\x07\xcf\x67\x4f\xe1\xf6\
1995+\x42\x05\xdb\xad\x14\x8c\xe6\xca\xb0\x59\xd7\xe7\xbb\xa6\xe0\x24\
1996+\x58\x7e\xbc\x86\xb1\xf3\x97\x31\x14\xf1\x62\x7c\x50\x01\x00\x9c\
1997+\x1b\x0e\x60\xdb\xb0\xf1\xf3\xd7\xe8\x21\x36\x76\xa6\x5d\x11\x4a\
1998+\xa5\x92\xcb\x60\x63\xb3\x86\x51\x59\xc1\x93\x99\x93\x50\xbc\x7f\
1999+\xcf\x1f\x4e\x1d\xc7\xdd\xc9\x08\x22\x33\x3a\x14\x16\xa7\x7b\x12\
2000+\xb4\x4d\x86\x06\xd6\xb0\xa9\xd7\x30\xfd\xac\x82\x89\x33\x7d\x78\
2001+\x74\x6b\x10\xf7\x17\xd7\xf1\xf6\x63\x1d\x64\x36\xc0\x24\x57\x3a\
2002+\x06\xe1\x70\xb8\x6b\x44\xb3\x53\x13\x78\x91\x2b\xa1\x6a\xf5\x43\
2003+\xaf\x99\xd8\xa8\x1e\xc5\xf2\x67\x03\x5f\xd6\x9b\xf0\x55\xcb\x06\
2004+\xb1\xfd\x8a\x54\x55\x55\x8b\xc5\xe2\xf5\xae\x6a\x00\xcc\xc0\xd2\
2005+\xfb\x00\x76\xac\x10\x1a\xfd\x63\x30\x25\x3f\xc8\x6c\x20\x60\x7c\
2006+\xb3\xac\xa6\xb1\x02\x61\x5f\x23\xee\xf1\x39\x9c\xf2\xa7\xb2\x32\
2007+\x48\x7a\xc0\x24\xdf\x21\xb6\x47\x98\xe4\xef\xc4\xf6\x4b\xb0\x58\
2008+\xd8\x5d\x9d\x13\x7f\x00\x70\x45\xf0\x0c\xcd\xc0\xad\x0d\x00\x00\
2009 \x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
2010 "
2011
2012@@ -1823,16 +2538,32 @@
2013 \x09\x14\x31\x07\
2014 \x00\x73\
2015 \x00\x79\x00\x73\x00\x74\x00\x65\x00\x6d\x00\x2d\x00\x72\x00\x75\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
2016+\x00\x10\
2017+\x00\x67\x0f\x67\
2018+\x00\x75\
2019+\x00\x6e\x00\x73\x00\x65\x00\x6c\x00\x65\x00\x63\x00\x74\x00\x2d\x00\x61\x00\x6c\x00\x6c\x00\x2e\x00\x70\x00\x6e\x00\x67\
2020 \x00\x19\
2021 \x01\x7d\x34\xe7\
2022 \x00\x76\
2023 \x00\x69\x00\x65\x00\x77\x00\x2d\x00\x73\x00\x70\x00\x6c\x00\x69\x00\x74\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2d\x00\x72\
2024 \x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
2025+\x00\x0a\
2026+\x03\xcb\x6a\xc7\
2027+\x00\x73\
2028+\x00\x68\x00\x65\x00\x6c\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
2029+\x00\x0a\
2030+\x0c\xad\x0f\x07\
2031+\x00\x64\
2032+\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
2033 \x00\x11\
2034 \x01\x82\x9d\x27\
2035 \x00\x69\
2036 \x00\x6d\x00\x61\x00\x67\x00\x65\x00\x2d\x00\x6d\x00\x69\x00\x73\x00\x73\x00\x69\x00\x6e\x00\x67\x00\x2e\x00\x70\x00\x6e\x00\x67\
2037 \
2038+\x00\x0c\
2039+\x0c\x4f\x6a\xc7\
2040+\x00\x75\
2041+\x00\x6e\x00\x73\x00\x68\x00\x65\x00\x6c\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
2042 \x00\x0d\
2043 \x0b\x27\xb1\x67\
2044 \x00\x65\
2045@@ -1842,6 +2573,10 @@
2046 \x00\x64\
2047 \x00\x6f\x00\x63\x00\x75\x00\x6d\x00\x65\x00\x6e\x00\x74\x00\x2d\x00\x70\x00\x72\x00\x6f\x00\x70\x00\x65\x00\x72\x00\x74\x00\x69\
2048 \x00\x65\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
2049+\x00\x0e\
2050+\x00\x78\x07\x67\
2051+\x00\x73\
2052+\x00\x65\x00\x6c\x00\x65\x00\x63\x00\x74\x00\x2d\x00\x61\x00\x6c\x00\x6c\x00\x2e\x00\x70\x00\x6e\x00\x67\
2053 \x00\x0f\
2054 \x0e\x36\x76\xc7\
2055 \x00\x67\
2056@@ -1850,6 +2585,11 @@
2057 \x0c\x2b\x1f\xc7\
2058 \x00\x67\
2059 \x00\x6f\x00\x2d\x00\x6e\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
2060+\x00\x18\
2061+\x0d\x3e\x36\x47\
2062+\x00\x69\
2063+\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6e\x00\x65\x00\x74\x00\x2d\x00\x6e\x00\x65\x00\x77\x00\x73\x00\x2d\x00\x72\x00\x65\x00\x61\
2064+\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
2065 \x00\x0d\
2066 \x07\x6d\xfe\x67\
2067 \x00\x71\
2068@@ -1866,11 +2606,49 @@
2069 \x0c\x9f\x1f\x67\
2070 \x00\x67\
2071 \x00\x6f\x00\x2d\x00\x6a\x00\x75\x00\x6d\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
2072-\x00\x13\
2073-\x06\x9c\xee\xf6\
2074-\x00\x70\
2075-\x00\x72\x00\x6f\x00\x63\x00\x65\x00\x73\x00\x73\x00\x2d\x00\x77\x00\x6f\x00\x72\x00\x6b\x00\x69\x00\x6e\x00\x67\x00\x2e\x00\x67\
2076-\x00\x69\x00\x66\
2077+\x00\x10\
2078+\x0f\x26\x60\xa7\
2079+\x00\x66\
2080+\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x61\x00\x64\x00\x64\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
2081+\x00\x0c\
2082+\x07\x89\xd8\xc7\
2083+\x00\x63\
2084+\x00\x6f\x00\x6d\x00\x70\x00\x75\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
2085+\x00\x0a\
2086+\x0a\xc8\xfb\x07\
2087+\x00\x66\
2088+\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
2089+\x00\x0e\
2090+\x09\x85\xdc\xe7\
2091+\x00\x77\
2092+\x00\x68\x00\x69\x00\x74\x00\x65\x00\x73\x00\x70\x00\x61\x00\x63\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
2093+\x00\x0b\
2094+\x06\x3d\x10\x27\
2095+\x00\x67\
2096+\x00\x6f\x00\x2d\x00\x64\x00\x6f\x00\x77\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
2097+\x00\x12\
2098+\x0e\x64\x26\xe7\
2099+\x00\x66\
2100+\x00\x69\x00\x6c\x00\x65\x00\x2d\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x61\x00\x6e\x00\x67\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\
2101+\x00\x67\
2102+\x00\x0c\
2103+\x01\xec\xd9\x07\
2104+\x00\x63\
2105+\x00\x6f\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
2106+\x00\x14\
2107+\x0d\xf7\x9b\xe7\
2108+\x00\x66\
2109+\x00\x6f\x00\x72\x00\x6d\x00\x61\x00\x74\x00\x2d\x00\x74\x00\x65\x00\x78\x00\x74\x00\x2d\x00\x62\x00\x6f\x00\x6c\x00\x64\x00\x2e\
2110+\x00\x70\x00\x6e\x00\x67\
2111+\x00\x09\
2112+\x04\xc3\x8b\x07\
2113+\x00\x67\
2114+\x00\x6f\x00\x2d\x00\x75\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
2115+\x00\x1b\
2116+\x04\xc8\x47\x87\
2117+\x00\x61\
2118+\x00\x63\x00\x63\x00\x65\x00\x73\x00\x73\x00\x6f\x00\x72\x00\x69\x00\x65\x00\x73\x00\x2d\x00\x74\x00\x65\x00\x78\x00\x74\x00\x2d\
2119+\x00\x65\x00\x64\x00\x69\x00\x74\x00\x6f\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
2120 \x00\x11\
2121 \x05\x88\x02\xc7\
2122 \x00\x66\
2123@@ -1880,6 +2658,20 @@
2124 \x00\x28\x5a\xe7\
2125 \x00\x66\
2126 \x00\x69\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
2127+\x00\x0f\
2128+\x04\x18\x42\x07\
2129+\x00\x66\
2130+\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
2131+\x00\x14\
2132+\x0d\x8f\xa4\x67\
2133+\x00\x66\
2134+\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x61\x00\x6e\x00\x67\x00\x65\x00\x64\x00\x2e\
2135+\x00\x70\x00\x6e\x00\x67\
2136+\x00\x11\
2137+\x08\xa7\xc7\x07\
2138+\x00\x66\
2139+\x00\x69\x00\x6c\x00\x65\x00\x2d\x00\x63\x00\x6f\x00\x6e\x00\x66\x00\x6c\x00\x69\x00\x63\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
2140+\
2141 \x00\x13\
2142 \x0d\x61\x7f\x27\
2143 \x00\x66\
2144@@ -1890,86 +2682,80 @@
2145 \x00\x66\
2146 \x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x62\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\
2147 \
2148+\x00\x13\
2149+\x09\xb6\xba\xe7\
2150+\x00\x66\
2151+\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6d\x00\x6f\x00\x64\x00\x69\x00\x66\x00\x69\x00\x65\x00\x64\x00\x2e\x00\x70\
2152+\x00\x6e\x00\x67\
2153+\x00\x0c\
2154+\x05\xa2\x93\x27\
2155+\x00\x62\
2156+\x00\x6f\x00\x6f\x00\x6b\x00\x6d\x00\x61\x00\x72\x00\x6b\x00\x2e\x00\x70\x00\x6e\x00\x67\
2157+\x00\x13\
2158+\x06\x9c\xee\xf6\
2159+\x00\x70\
2160+\x00\x72\x00\x6f\x00\x63\x00\x65\x00\x73\x00\x73\x00\x2d\x00\x77\x00\x6f\x00\x72\x00\x6b\x00\x69\x00\x6e\x00\x67\x00\x2e\x00\x67\
2161+\x00\x69\x00\x66\
2162+\x00\x0b\
2163+\x0f\x31\xc8\x07\
2164+\x00\x75\
2165+\x00\x6e\x00\x69\x00\x64\x00\x69\x00\x66\x00\x66\x00\x2e\x00\x70\x00\x6e\x00\x67\
2166 \x00\x0e\
2167 \x0a\xe7\x23\x47\
2168 \x00\x66\
2169 \x00\x69\x00\x6c\x00\x65\x00\x2d\x00\x61\x00\x64\x00\x64\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
2170-\x00\x11\
2171-\x08\xa7\xc7\x07\
2172-\x00\x66\
2173-\x00\x69\x00\x6c\x00\x65\x00\x2d\x00\x63\x00\x6f\x00\x6e\x00\x66\x00\x6c\x00\x69\x00\x63\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
2174-\
2175-\x00\x12\
2176-\x0e\x64\x26\xe7\
2177-\x00\x66\
2178-\x00\x69\x00\x6c\x00\x65\x00\x2d\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x61\x00\x6e\x00\x67\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\
2179-\x00\x67\
2180-\x00\x0a\
2181-\x0a\xc8\xfb\x07\
2182-\x00\x66\
2183-\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
2184-\x00\x10\
2185-\x0f\x26\x60\xa7\
2186-\x00\x66\
2187-\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x61\x00\x64\x00\x64\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
2188-\x00\x0c\
2189-\x05\xa2\x93\x27\
2190-\x00\x62\
2191-\x00\x6f\x00\x6f\x00\x6b\x00\x6d\x00\x61\x00\x72\x00\x6b\x00\x2e\x00\x70\x00\x6e\x00\x67\
2192-\x00\x13\
2193-\x09\xb6\xba\xe7\
2194-\x00\x66\
2195-\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6d\x00\x6f\x00\x64\x00\x69\x00\x66\x00\x69\x00\x65\x00\x64\x00\x2e\x00\x70\
2196-\x00\x6e\x00\x67\
2197-\x00\x0c\
2198-\x07\x89\xd8\xc7\
2199-\x00\x63\
2200-\x00\x6f\x00\x6d\x00\x70\x00\x75\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
2201-\x00\x14\
2202-\x0d\x8f\xa4\x67\
2203-\x00\x66\
2204-\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x61\x00\x6e\x00\x67\x00\x65\x00\x64\x00\x2e\
2205-\x00\x70\x00\x6e\x00\x67\
2206-\x00\x0f\
2207-\x04\x18\x42\x07\
2208-\x00\x66\
2209-\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
2210 "
2211
2212 qt_resource_struct = "\
2213 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x01\
2214-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x10\x00\x00\x00\x11\
2215-\x00\x00\x00\x10\x00\x02\x00\x00\x00\x0b\x00\x00\x00\x06\
2216+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x17\
2217+\x00\x00\x00\x10\x00\x02\x00\x00\x00\x11\x00\x00\x00\x06\
2218 \x00\x00\x00\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x09\xe9\
2219 \x00\x00\x00\x54\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x79\
2220 \x00\x00\x00\x20\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
2221 \x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x18\x35\
2222-\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x19\x75\
2223-\x00\x00\x01\x10\x00\x00\x00\x00\x00\x01\x00\x00\x20\x4f\
2224-\x00\x00\x01\xca\x00\x00\x00\x00\x00\x01\x00\x00\x36\x18\
2225-\x00\x00\x01\x84\x00\x00\x00\x00\x00\x01\x00\x00\x2a\x68\
2226-\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x30\xc0\
2227+\x00\x00\x01\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x32\x93\
2228+\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x5a\
2229+\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x00\x24\xdb\
2230+\x00\x00\x01\x88\x00\x00\x00\x00\x00\x01\x00\x00\x2f\xdf\
2231+\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x9a\
2232+\x00\x00\x02\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x4a\x9a\
2233+\x00\x00\x02\x54\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xea\
2234+\x00\x00\x02\x74\x00\x00\x00\x00\x00\x01\x00\x00\x45\x42\
2235 \x00\x00\x00\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x13\x25\
2236-\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x09\
2237-\x00\x00\x01\x68\x00\x00\x00\x00\x00\x01\x00\x00\x26\xc2\
2238-\x00\x00\x01\xea\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x7f\
2239-\x00\x00\x01\x44\x00\x00\x00\x00\x00\x01\x00\x00\x23\x03\
2240-\x00\x00\x02\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x49\x32\
2241-\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x69\x88\
2242-\x00\x00\x02\x32\x00\x00\x00\x00\x00\x01\x00\x00\x46\xb6\
2243-\x00\x00\x03\x78\x00\x00\x00\x00\x00\x01\x00\x00\x5c\x24\
2244-\x00\x00\x02\x06\x00\x00\x00\x00\x00\x01\x00\x00\x40\xa1\
2245-\x00\x00\x03\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x61\x64\
2246-\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x63\x23\
2247-\x00\x00\x02\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x52\x7b\
2248-\x00\x00\x03\x96\x00\x00\x00\x00\x00\x01\x00\x00\x5e\x90\
2249-\x00\x00\x03\x38\x00\x00\x00\x00\x00\x01\x00\x00\x57\x5a\
2250-\x00\x00\x02\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x4f\xfc\
2251-\x00\x00\x02\x70\x00\x00\x00\x00\x00\x01\x00\x00\x4a\x9f\
2252-\x00\x00\x02\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x4d\x5a\
2253-\x00\x00\x03\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x66\xb7\
2254-\x00\x00\x03\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x54\xd9\
2255-\x00\x00\x03\x52\x00\x00\x00\x00\x00\x01\x00\x00\x59\x50\
2256+\x00\x00\x01\x68\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x99\
2257+\x00\x00\x02\x02\x00\x00\x00\x00\x00\x01\x00\x00\x38\xcc\
2258+\x00\x00\x01\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x27\x6f\
2259+\x00\x00\x02\xba\x00\x00\x00\x00\x00\x01\x00\x00\x51\x01\
2260+\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x00\x20\x1c\
2261+\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x72\
2262+\x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\x35\x0d\
2263+\x00\x00\x04\x64\x00\x00\x00\x00\x00\x01\x00\x00\x74\xa9\
2264+\x00\x00\x03\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x62\x36\
2265+\x00\x00\x01\x88\x00\x00\x00\x00\x00\x01\x00\x00\x78\x25\
2266+\x00\x00\x04\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x76\x16\
2267+\x00\x00\x03\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x69\xc7\
2268+\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\x00\x00\x6f\xeb\
2269+\x00\x00\x04\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x72\x2d\
2270+\x00\x00\x05\x74\x00\x00\x00\x00\x00\x01\x00\x00\x87\x59\
2271+\x00\x00\x03\x56\x00\x00\x00\x00\x00\x01\x00\x00\x5d\x06\
2272+\x00\x00\x05\x92\x00\x00\x00\x00\x00\x01\x00\x00\x8c\x32\
2273+\x00\x00\x02\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x57\xf7\
2274+\x00\x00\x02\x74\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x57\
2275+\x00\x00\x04\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x7c\xca\
2276+\x00\x00\x03\x34\x00\x00\x00\x00\x00\x01\x00\x00\x5b\xac\
2277+\x00\x00\x05\x48\x00\x00\x00\x00\x00\x01\x00\x00\x84\x85\
2278+\x00\x00\x03\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x59\xb6\
2279+\x00\x00\x05\xda\x00\x00\x00\x00\x00\x01\x00\x00\x93\x9b\
2280+\x00\x00\x01\x68\x00\x00\x00\x00\x00\x01\x00\x00\x89\xc5\
2281+\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x00\x67\x1b\
2282+\x00\x00\x04\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x28\
2283+\x00\x00\x05\x20\x00\x00\x00\x00\x00\x01\x00\x00\x81\xe3\
2284+\x00\x00\x04\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x79\xf9\
2285+\x00\x00\x03\xba\x00\x00\x00\x00\x00\x01\x00\x00\x64\x56\
2286+\x00\x00\x03\x72\x00\x00\x00\x00\x00\x01\x00\x00\x5f\xb5\
2287+\x00\x00\x02\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x55\x23\
2288+\x00\x00\x05\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x92\x47\
2289 "
2290
2291 def qInitResources():
2292
2293=== added file 'lib/shelvewindow.py'
2294--- lib/shelvewindow.py 1970-01-01 00:00:00 +0000
2295+++ lib/shelvewindow.py 2011-06-07 22:54:29 +0000
2296@@ -0,0 +1,137 @@
2297+# -*- coding: utf-8 -*-
2298+#
2299+# QBzr - Qt frontend to Bazaar commands
2300+# Copyright (C) 2011 QBzr Developers
2301+#
2302+# This program is free software; you can redistribute it and/or
2303+# modify it under the terms of the GNU General Public License
2304+# as published by the Free Software Foundation; either version 2
2305+# of the License, or (at your option) any later version.
2306+#
2307+# This program is distributed in the hope that it will be useful,
2308+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2309+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2310+# GNU General Public License for more details.
2311+#
2312+# You should have received a copy of the GNU General Public License
2313+# along with this program; if not, write to the Free Software
2314+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
2315+
2316+import sys, time
2317+from PyQt4 import QtCore, QtGui
2318+from PyQt4.QtGui import QKeySequence
2319+
2320+from bzrlib.revision import CURRENT_REVISION
2321+from bzrlib.errors import (
2322+ NoSuchRevision,
2323+ NoSuchRevisionInTree,
2324+ PathsNotVersionedError)
2325+from bzrlib.plugins.qbzr.lib.i18n import gettext, N_
2326+from bzrlib.plugins.qbzr.lib.util import (
2327+ QBzrWindow,
2328+ ToolBarThrobberWidget,
2329+ get_apparent_author_name,
2330+ get_set_encoding,
2331+ runs_in_loading_queue,
2332+ get_icon,
2333+ get_monospace_font,
2334+ StandardButton,
2335+ get_tab_width_pixels,
2336+ )
2337+
2338+from bzrlib.plugins.qbzr.lib.uifactory import ui_current_widget
2339+from bzrlib.plugins.qbzr.lib.trace import reports_exception
2340+from bzrlib.plugins.qbzr.lib.logwidget import LogList
2341+from bzrlib.lazy_import import lazy_import
2342+lazy_import(globals(), '''
2343+from bzrlib import transform
2344+from bzrlib.workingtree import WorkingTree
2345+from bzrlib.revisiontree import RevisionTree
2346+from bzrlib.plugins.qbzr.lib.encoding_selector import EncodingMenuSelector
2347+from bzrlib.plugins.qbzr.lib.diffwindow import DiffItem
2348+from bzrlib.plugins.qbzr.lib.widgets.shelve import ShelveWidget
2349+from bzrlib.plugins.qbzr.lib.widgets.shelvelist import ShelveListWidget
2350+from bzrlib.plugins.qbzr.lib.widgets.splitters import Splitters
2351+from bzrlib.patiencediff import PatienceSequenceMatcher as SequenceMatcher
2352+from bzrlib.shelf import Unshelver
2353+from bzrlib.shelf_ui import Unshelver as Unshelver_ui
2354+''')
2355+
2356+class ShelveWindow(QBzrWindow):
2357+
2358+ def __init__(self, initial_tab=0, directory=None, file_list=None, complete=False, ignore_whitespace=False, encoding=None, parent=None, ui_mode=True):
2359+ QBzrWindow.__init__(self,
2360+ [gettext("Shelve Manager")],
2361+ parent, ui_mode=ui_mode)
2362+ self.restoreSize("shelve", (780, 680))
2363+
2364+ vbox = QtGui.QVBoxLayout(self.centralwidget)
2365+ vbox.setMargin(2)
2366+ self.throbber = ToolBarThrobberWidget(self)
2367+ vbox.addWidget(self.throbber)
2368+ self.tab = QtGui.QTabWidget(self)
2369+ vbox.addWidget(self.tab)
2370+
2371+ self.splitters = Splitters("shelve")
2372+
2373+ self.directory = directory or '.'
2374+
2375+ shelve_view = ShelveWidget(file_list=file_list, directory=self.directory,
2376+ complete=complete, encoding=encoding,
2377+ splitters=self.splitters, parent=self)
2378+ shelvelist_view = ShelveListWidget(directory=self.directory,
2379+ complete=complete, ignore_whitespace=ignore_whitespace,
2380+ encoding=encoding, splitters=self.splitters, parent=self)
2381+
2382+ self.tab.addTab(shelve_view, gettext('Shelve'))
2383+ self.tab.addTab(shelvelist_view, gettext('View shelved changes'))
2384+ self.tab.setCurrentIndex(initial_tab)
2385+ self.connect(self.tab, QtCore.SIGNAL("currentChanged(int)"),
2386+ self.current_tab_changed)
2387+ self.connect(shelve_view, QtCore.SIGNAL("shelfCreated(int)"),
2388+ self.shelf_created)
2389+ self.connect(shelvelist_view, QtCore.SIGNAL("unshelved(int, QString*)"),
2390+ self.unshelved)
2391+
2392+ self.splitters.restore_state()
2393+
2394+ def show(self):
2395+ QBzrWindow.show(self)
2396+ QtCore.QTimer.singleShot(0, self.initial_load)
2397+
2398+ @runs_in_loading_queue
2399+ @ui_current_widget
2400+ @reports_exception()
2401+ def initial_load(self):
2402+ try:
2403+ self.throbber.show()
2404+ self.processEvents()
2405+ view = self.tab.currentWidget()
2406+ view.refresh()
2407+ if hasattr(view, "files_str") and view.files_str:
2408+ self.setWindowTitle(gettext("Shelve Manager") + " - %s" % view.files_str)
2409+ finally:
2410+ self.throbber.hide()
2411+
2412+ def current_tab_changed(self, index):
2413+ view = self.tab.currentWidget()
2414+ if not view.loaded:
2415+ view.refresh()
2416+ if hasattr(view, "files_str") and view.files_str:
2417+ self.setWindowTitle(gettext("Shelve Manager") + " - %s" % view.files_str)
2418+ else:
2419+ self.setWindowTitle(gettext("Shelve Manager"))
2420+
2421+ def shelf_created(self, id):
2422+ # Refresh shelf list after new shelf created.
2423+ self.tab.widget(1).refresh()
2424+ self.tab.setCurrentIndex(1)
2425+
2426+ def unshelved(self, id, action):
2427+ if action in ('apply', 'keep'):
2428+ self.tab.widget(0).loaded = False
2429+
2430+ def hideEvent(self, event):
2431+ self.splitters.save_state()
2432+ QBzrWindow.hideEvent(self, event)
2433+
2434
2435=== modified file 'lib/util.py'
2436--- lib/util.py 2011-05-30 09:51:43 +0000
2437+++ lib/util.py 2011-06-07 22:54:29 +0000
2438@@ -1060,138 +1060,6 @@
2439 return QtGui.QIcon(":/%dx%d/%s.png" % (size, size, name))
2440
2441
2442-class FindToolbar(QtGui.QToolBar):
2443-
2444- def __init__(self, window, text_edit, show_action):
2445- QtGui.QToolBar.__init__(self, gettext("Find"), window)
2446- self.text_edit = text_edit
2447- if 0: self.text_edit = QtGui.QTextEdit()
2448- self.show_action = show_action
2449-
2450- self.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
2451- self.setMovable (False)
2452-
2453- find_label = QtGui.QLabel(gettext("Find: "), self)
2454- self.addWidget(find_label)
2455-
2456- self.find_text = QtGui.QLineEdit(self)
2457- self.addWidget(self.find_text)
2458- find_label.setBuddy(self.find_text)
2459-
2460- self.found_palette = QtGui.QPalette()
2461- self.not_found_palette = QtGui.QPalette()
2462- self.not_found_palette.setColor(QtGui.QPalette.Active,
2463- QtGui.QPalette.Base,
2464- QtCore.Qt.red)
2465- self.not_found_palette.setColor(QtGui.QPalette.Active,
2466- QtGui.QPalette.Text,
2467- QtCore.Qt.white)
2468-
2469- prev = self.addAction(get_icon("go-previous"), gettext("Previous"))
2470- prev.setShortcut(QtGui.QKeySequence.FindPrevious)
2471- show_shortcut_hint(prev)
2472-
2473- next = self.addAction(get_icon("go-next"), gettext("Next"))
2474- next.setShortcut(QtGui.QKeySequence.FindNext)
2475- show_shortcut_hint(next)
2476-
2477- self.case_sensitive = QtGui.QCheckBox(gettext("Case sensitive"), self)
2478- self.addWidget(self.case_sensitive)
2479- self.whole_words = QtGui.QCheckBox(gettext("Whole words"), self)
2480- self.addWidget(self.whole_words)
2481-
2482- close_find = QtGui.QAction(self)
2483- close_find.setIcon(self.style().standardIcon(
2484- QtGui.QStyle.SP_DialogCloseButton))
2485- self.addAction(close_find)
2486- close_find.setShortcut((QtCore.Qt.Key_Escape))
2487- close_find.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut)
2488- close_find.setStatusTip(gettext("Close find"))
2489- self.connect(self.show_action,
2490- QtCore.SIGNAL("toggled (bool)"),
2491- self.show_action_toggle)
2492- self.connect(close_find,
2493- QtCore.SIGNAL("triggered(bool)"),
2494- self.close_triggered)
2495- self.connect(self.find_text,
2496- QtCore.SIGNAL("textChanged(QString)"),
2497- self.find_text_changed)
2498- self.connect(next,
2499- QtCore.SIGNAL("triggered(bool)"),
2500- self.find_next)
2501- self.connect(prev,
2502- QtCore.SIGNAL("triggered(bool)"),
2503- self.find_prev)
2504- self.connect(self.case_sensitive,
2505- QtCore.SIGNAL("stateChanged(int)"),
2506- self.find_text_changed)
2507- self.connect(self.whole_words,
2508- QtCore.SIGNAL("stateChanged(int)"),
2509- self.find_text_changed)
2510- self.connect(self.find_text,
2511- QtCore.SIGNAL("returnPressed()"),
2512- self.find_next)
2513-
2514- def show_action_toggle(self, state):
2515- self.setVisible(state)
2516- if state:
2517- self.find_text.setFocus()
2518- else:
2519- self.find_text.setText('')
2520-
2521- def close_triggered(self, state):
2522- self.show_action.setChecked(False)
2523-
2524- def find_text_changed(self, text):
2525- self.find_avoid_moving()
2526-
2527- def find_get_flags(self):
2528- flags = QtGui.QTextDocument.FindFlags()
2529- if self.case_sensitive.isChecked():
2530- flags = flags | QtGui.QTextDocument.FindCaseSensitively
2531- if self.whole_words.isChecked():
2532- flags = flags | QtGui.QTextDocument.FindWholeWords
2533- return flags
2534-
2535- def find_avoid_moving(self):
2536- self.find(self.text_edit.textCursor().selectionStart(), 0,
2537- self.find_get_flags())
2538-
2539- def find_next(self):
2540- self.find(self.text_edit.textCursor().selectionEnd(), 0,
2541- self.find_get_flags())
2542-
2543- def find_prev(self, state):
2544- self.find(self.text_edit.textCursor().selectionStart(),
2545- self.text_edit.document().characterCount(),
2546- self.find_get_flags() | QtGui.QTextDocument.FindBackward)
2547-
2548- def find(self, from_pos, restart_pos, flags):
2549- doc = self.text_edit.document()
2550- text = self.find_text.text()
2551- cursor = doc.find(text, from_pos, flags)
2552- if cursor.isNull():
2553- # try again from the restart pos
2554- cursor = doc.find(text, restart_pos, flags)
2555- if cursor.isNull():
2556- cursor = self.text_edit.textCursor()
2557- cursor.setPosition(cursor.selectionStart())
2558- self.text_edit.setTextCursor(cursor)
2559- # Make find_text background red like Firefox
2560- if len(text) > 0:
2561- self.find_text.setPalette(self.not_found_palette)
2562- else:
2563- self.find_text.setPalette(self.found_palette)
2564- else:
2565- self.text_edit.setTextCursor(cursor)
2566- self.find_text.setPalette(self.found_palette)
2567-
2568- def set_text_edit(self, new_text_edit):
2569- if self.text_edit:
2570- self.text_edit.setTextCursor(QtGui.QTextCursor())
2571- self.text_edit = new_text_edit
2572-
2573-
2574 class InfoWidget(QtGui.QFrame):
2575 def __init__(self, parent=None):
2576 QtGui.QFrame.__init__(self, parent)
2577@@ -1201,6 +1069,67 @@
2578 self.setBackgroundRole(QtGui.QPalette.ToolTipBase)
2579 self.setForegroundRole(QtGui.QPalette.ToolTipText)
2580
2581+class ToolbarPanel(QtGui.QWidget):
2582+ def __init__(self, parent = None):
2583+ QtGui.QWidget.__init__(self, parent)
2584+ vbox = QtGui.QVBoxLayout(self)
2585+ vbox.setSpacing(0)
2586+ vbox.setMargin(0)
2587+
2588+ toolbar = QtGui.QToolBar(self)
2589+ toolbar.setMovable(False)
2590+ toolbar.setIconSize(QtCore.QSize(16,16))
2591+ self.setStyleSheet('QToolBar { margin:1px; padding:0px; border:none; }')
2592+ toolbar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
2593+
2594+ vbox.addWidget(toolbar)
2595+ self.vbox = vbox
2596+ self.toolbar = toolbar
2597+
2598+ def add_toolbar_button(self, text, icon_name=None, enabled=True,
2599+ checkable=False, checked=False, shortcut=None, onclick=None):
2600+ button = self.create_button(text, icon_name=icon_name, enabled=enabled,
2601+ checkable=checkable, checked=checked,
2602+ shortcut=shortcut, onclick=onclick)
2603+ self.toolbar.addAction(button)
2604+ return button
2605+
2606+ def add_toolbar_menu(self, text, menu, icon_name=None, enabled=True, shortcut=None):
2607+ button = self.create_button(text, icon_name=icon_name, enabled=enabled)
2608+ button.setMenu(menu)
2609+ self.toolbar.addAction(button)
2610+ widget = self.toolbar.widgetForAction(button)
2611+ widget.setPopupMode(QtGui.QToolButton.InstantPopup)
2612+ if shortcut:
2613+ widget.setShortcut(shortcut)
2614+ return button
2615+
2616+ def create_button(self, text, icon_name=None, enabled=True,
2617+ checkable=False, checked=False, shortcut=None, onclick=None):
2618+ if icon_name:
2619+ button = QtGui.QAction(get_icon(icon_name, size=16), gettext(text), self)
2620+ else:
2621+ button = QtGui.QAction(gettext(text), self)
2622+ if checkable:
2623+ button.setCheckable(True)
2624+ button.setChecked(checked)
2625+ signal = "toggled(bool)"
2626+ else:
2627+ signal = "triggered()"
2628+ if not enabled:
2629+ button.setEnabled(False)
2630+ if shortcut:
2631+ button.setShortcuts(shortcut)
2632+ if onclick:
2633+ self.connect(button, QtCore.SIGNAL(signal), onclick)
2634+ return button
2635+
2636+ def add_separator(self):
2637+ self.toolbar.addSeparator()
2638+
2639+ def add_widget(self, widget):
2640+ self.vbox.addWidget(widget)
2641+
2642
2643 # Hackish test for monospace. Run bzr qcat lib/util.py to check.
2644 #888888888888888888888888888888888888888888888888888888888888888888888888888888
2645
2646=== added file 'lib/widgets/shelve.py'
2647--- lib/widgets/shelve.py 1970-01-01 00:00:00 +0000
2648+++ lib/widgets/shelve.py 2011-06-07 22:54:29 +0000
2649@@ -0,0 +1,1106 @@
2650+# -*- coding: utf-8 -*-
2651+#
2652+# QBzr - Qt frontend to Bazaar commands
2653+# Copyright (C) 2011 QBzr Developers
2654+#
2655+# This program is free software; you can redistribute it and/or
2656+# modify it under the terms of the GNU General Public License
2657+# as published by the Free Software Foundation; either version 2
2658+# of the License, or (at your option) any later version.
2659+#
2660+# This program is distributed in the hope that it will be useful,
2661+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2662+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2663+# GNU General Public License for more details.
2664+#
2665+# You should have received a copy of the GNU General Public License
2666+# along with this program; if not, write to the Free Software
2667+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
2668+
2669+import sys, time
2670+from PyQt4 import QtCore, QtGui
2671+
2672+from bzrlib.plugins.qbzr.lib.i18n import gettext, ngettext, N_
2673+from bzrlib.plugins.qbzr.lib.util import (
2674+ get_global_config,
2675+ get_set_encoding,
2676+ runs_in_loading_queue,
2677+ get_icon,
2678+ ToolBarThrobberWidget,
2679+ get_monospace_font,
2680+ get_tab_width_pixels,
2681+ get_set_tab_width_chars,
2682+ get_qbzr_config,
2683+ file_extension,
2684+ )
2685+from bzrlib.plugins.qbzr.lib.widgets.toolbars import (
2686+ FindToolbar, ToolbarPanel, LayoutSelector
2687+ )
2688+from bzrlib.plugins.qbzr.lib.widgets.tab_width_selector import TabWidthMenuSelector
2689+from bzrlib import errors
2690+from bzrlib.plugins.qbzr.lib.uifactory import ui_current_widget
2691+from bzrlib.plugins.qbzr.lib.trace import reports_exception
2692+from bzrlib.patches import HunkLine, ContextLine, InsertLine, RemoveLine
2693+from bzrlib.lazy_import import lazy_import
2694+lazy_import(globals(), '''
2695+from bzrlib import transform, textfile, patches
2696+from bzrlib.workingtree import WorkingTree
2697+from bzrlib.plugins.qbzr.lib.encoding_selector import EncodingMenuSelector
2698+from bzrlib.plugins.qbzr.lib.commit import TextEdit
2699+from bzrlib.plugins.qbzr.lib.spellcheck import SpellCheckHighlighter, SpellChecker
2700+from bzrlib.plugins.qbzr.lib.autocomplete import get_wordlist_builder
2701+from bzrlib.shelf import ShelfCreator
2702+from bzrlib.shelf_ui import Shelver
2703+from bzrlib.osutils import split_lines
2704+from cStringIO import StringIO
2705+import os
2706+''')
2707+
2708+"""
2709+TODO::
2710+ Auto complete of shelve message.
2711+ Wordwrap mode
2712+ Side by side view
2713+ External diff (ShelveListWindow)
2714+ Lock management
2715+ Select hunk by Find.
2716+"""
2717+
2718+# For i18n
2719+change_status = (
2720+ N_("delete file"), N_("rename"), N_("add file"),
2721+ N_("modify text"), N_("modify target"), N_("modify binary")
2722+ )
2723+
2724+MAX_AUTOCOMPLETE_FILES = 20
2725+class WorkingTreeHasChanged(errors.BzrError):
2726+ pass
2727+
2728+class WorkingTreeHasPendingMarge(errors.BzrError):
2729+ pass
2730+
2731+class DummyDiffWriter(object):
2732+ def __init__(self):
2733+ pass
2734+ def write(self, *args, **kwargs):
2735+ pass
2736+
2737+class Change(object):
2738+ def __init__(self, change, shelver, trees):
2739+ status = change[0]
2740+ file_id = change[1]
2741+ if status == 'delete file':
2742+ self.path = trees[0].id2path(file_id)
2743+ self.disp_text = self.path
2744+ elif status == 'rename':
2745+ self.path = [tree.id2path(file_id) for tree in trees]
2746+ self.disp_text = u'%s => %s' % (self.path[0], self.path[1])
2747+ else:
2748+ self.path = trees[1].id2path(file_id)
2749+ self.disp_text = self.path
2750+ if status == 'modify text':
2751+ try:
2752+ self.sha1 = trees[1].get_file_sha1(file_id)
2753+ target_lines = trees[0].get_file_lines(file_id)
2754+ textfile.check_text_lines(target_lines)
2755+ work_lines = trees[1].get_file_lines(file_id)
2756+ textfile.check_text_lines(work_lines)
2757+
2758+ self._target_lines = [None, target_lines, None]
2759+ self._work_lines = [None, work_lines, None]
2760+ self._edited_lines = [None, None, None]
2761+
2762+ parsed = shelver.get_parsed_patch(file_id, False)
2763+ for hunk in parsed.hunks:
2764+ hunk.selected = False
2765+ self.parsed_patch = parsed
2766+ self.hunk_texts = [None, None, None]
2767+ except errors.BinaryFile:
2768+ status = 'modify binary'
2769+
2770+ self.data = change
2771+ self.file_id = file_id
2772+ self.status = status
2773+ self._words = None
2774+
2775+ def is_same_change(self, other):
2776+ # NOTE: I does not use __cmp__ because this method does not compare entire data.
2777+ if self.data != other.data:
2778+ return False
2779+ if self.status in ('modify text', 'modify binary'):
2780+ if self.sha1 != other.sha1:
2781+ return False
2782+ return True
2783+
2784+ @property
2785+ def target_lines(self):
2786+ """Original file lines"""
2787+ return self._target_lines[1]
2788+
2789+ @property
2790+ def work_lines(self):
2791+ """Working file lines"""
2792+ return self._work_lines[1]
2793+
2794+ def get_edited_lines(self):
2795+ return self._edited_lines[1]
2796+
2797+ def set_edited_lines(self, lines):
2798+ self._edited_lines = [None, lines, None]
2799+
2800+ edited_lines = property(get_edited_lines, set_edited_lines)
2801+
2802+ def encode_hunk_texts(self, encoding):
2803+ """
2804+ Return encoded hunk texts.
2805+ hunk texts is nested list. Outer is per hunks, inner is per lines.
2806+ """
2807+ if self.hunk_texts[0] == encoding:
2808+ return self.hunk_texts[2]
2809+ patch = self.parsed_patch
2810+ try:
2811+ texts = [[str(l).decode(encoding) for l in hunk.lines]
2812+ for hunk in patch.hunks]
2813+ except UnicodeError:
2814+ if self.hunk_texts[1] is None:
2815+ texts = [[str(l) for l in hunk.lines] for hunk in patch.hunks]
2816+ self.hunk_texts[1] = texts
2817+ else:
2818+ texts = self.hunk_texts[1]
2819+ self.hunk_texts[0] = encoding
2820+ self.hunk_texts[2] = texts
2821+
2822+ return texts
2823+
2824+ def encode(self, lines, encoding):
2825+ if lines[0] == encoding:
2826+ return lines[2]
2827+ try:
2828+ encoded_lines = [l.decode(encoding) for l in lines[1]]
2829+ except UnicodeError:
2830+ encoded_lines = lines[1]
2831+ lines[2] = encoded_lines
2832+ return encoded_lines
2833+
2834+ def encode_work_lines(self, encoding):
2835+ """Return encoded working file lines. """
2836+ return self.encode(self._work_lines, encoding)
2837+
2838+ def encode_target_lines(self, encoding):
2839+ """Return encoded original file lines."""
2840+ return self.encode(self._target_lines, encoding)
2841+
2842+ def encode_edited_lines(self, encoding):
2843+ """Return encoded edited lines by editor."""
2844+ if self._edited_lines[1] is None:
2845+ return None
2846+ return self.encode(self._edited_lines, encoding)
2847+
2848+ def get_words(self):
2849+ if self._words is not None:
2850+ return self._words, False
2851+
2852+ # Add path
2853+ self._words = set()
2854+ if self.status == 'rename':
2855+ for path in self.path:
2856+ self._words.add(path)
2857+ self._words.add(os.path.split(path)[-1])
2858+ else:
2859+ self._words.add(self.path)
2860+ self._words.add(os.path.split(self.path)[-1])
2861+
2862+ if self.status == 'modify text':
2863+ ext = file_extension(self.path)
2864+ builder = get_wordlist_builder(ext)
2865+ if builder is not None:
2866+ try:
2867+ self._words.update(builder.iter_words(StringIO("".join(self.work_lines))))
2868+ return self._words, True
2869+ except EnvironmentError:
2870+ pass
2871+
2872+ return self._words, False
2873+
2874+class ShelveWidget(ToolbarPanel):
2875+
2876+ def __init__(self, file_list=None, directory=None, complete=False, encoding=None,
2877+ splitters=None, parent=None):
2878+ ToolbarPanel.__init__(self, slender=False, icon_size=22, parent=parent)
2879+
2880+ self.revision = None
2881+ self.file_list = file_list
2882+ self.directory = directory
2883+ self.message = None
2884+
2885+ self.encoding = encoding
2886+
2887+ self.current_layout = -1
2888+ self.load_settings()
2889+
2890+ self.splitter = QtGui.QSplitter(QtCore.Qt.Vertical, self)
2891+ pal = QtGui.QPalette()
2892+ pal.setColor(QtGui.QPalette.Window, QtGui.QColor(0,0,0,0))
2893+ self.splitter.setPalette(pal)
2894+
2895+ self.splitter1 = QtGui.QSplitter(QtCore.Qt.Horizontal, self)
2896+ self.splitter2 = QtGui.QSplitter(QtCore.Qt.Horizontal, self)
2897+ self.splitter.addWidget(self.splitter1)
2898+ self.splitter.addWidget(self.splitter2)
2899+
2900+ message_groupbox = QtGui.QGroupBox(gettext("Message"), self)
2901+ message_layout = QtGui.QVBoxLayout(message_groupbox)
2902+ self.splitter1.addWidget(message_groupbox)
2903+
2904+ language = get_global_config().get_user_option('spellcheck_language') or 'en'
2905+ spell_checker = SpellChecker(language)
2906+
2907+ self.message = TextEdit(spell_checker, message_groupbox, main_window=self)
2908+ self.message.setToolTip(gettext("Enter the shelve message"))
2909+ self.completer = QtGui.QCompleter()
2910+ self.completer_model = QtGui.QStringListModel(self.completer)
2911+ self.completer.setModel(self.completer_model)
2912+ self.message.setCompleter(self.completer)
2913+ self.message.setAcceptRichText(False)
2914+ SpellCheckHighlighter(self.message.document(), spell_checker)
2915+
2916+ message_layout.addWidget(self.message)
2917+
2918+ self.file_view = QtGui.QTreeWidget(self)
2919+ self.file_view.setHeaderLabels(
2920+ [gettext("File Name"), gettext("Status"), gettext("Hunks")])
2921+ header = self.file_view.header()
2922+ header.setStretchLastSection(False)
2923+ header.setResizeMode(0, QtGui.QHeaderView.Stretch)
2924+ header.setResizeMode(1, QtGui.QHeaderView.ResizeToContents)
2925+ header.setResizeMode(2, QtGui.QHeaderView.ResizeToContents)
2926+
2927+ self.splitter1.addWidget(self.file_view)
2928+
2929+ hunk_panel = ToolbarPanel(parent=self)
2930+ self.hunk_view = HunkView(complete=complete)
2931+
2932+ self.splitter2.addWidget(hunk_panel)
2933+
2934+ # Build hunk panel toolbar
2935+ show_find = hunk_panel.add_toolbar_button(
2936+ N_("Find"), icon_name="edit-find", checkable=True,
2937+ shortcut=QtGui.QKeySequence.Find)
2938+ hunk_panel.add_separator()
2939+
2940+ view_menu = QtGui.QMenu(gettext('View Options'), self)
2941+ view_menu.addAction(
2942+ hunk_panel.create_button(N_("Complete"), icon_name="complete",
2943+ onclick=self.hunk_view.set_complete,
2944+ checkable=True, checked=complete)
2945+ )
2946+ self.tabwidth_selector = \
2947+ TabWidthMenuSelector(label_text=gettext("Tab width"),
2948+ onChanged=self.on_tabwidth_changed)
2949+ view_menu.addMenu(self.tabwidth_selector)
2950+
2951+ self.encoding_selector = EncodingMenuSelector(self.encoding,
2952+ gettext("Encoding"), self.encoding_changed)
2953+ self.encoding_selector.setIcon(get_icon("format-text-bold", 16))
2954+ view_menu.addMenu(self.encoding_selector)
2955+ hunk_panel.add_toolbar_menu(
2956+ N_("&View Options"), view_menu, icon_name="document-properties",
2957+ shortcut="Alt+V")
2958+
2959+ hunk_panel.add_separator()
2960+ hunk_panel.add_toolbar_button(N_("Previous hunk"), icon_name="go-up",
2961+ onclick=self.hunk_view.move_previous, shortcut="Alt+Up")
2962+ hunk_panel.add_toolbar_button(N_("Next hunk"), icon_name="go-down",
2963+ onclick=self.hunk_view.move_next, shortcut="Alt+Down")
2964+
2965+ self.editor_button = hunk_panel.add_toolbar_button(N_("Use editor"),
2966+ icon_name="accessories-text-editor", enabled=False,
2967+ onclick=self.use_editor, shortcut="Ctrl+E")
2968+ find_toolbar = FindToolbar(self, self.hunk_view.browser, show_find)
2969+ hunk_panel.add_widget(find_toolbar)
2970+ hunk_panel.add_widget(self.hunk_view)
2971+ find_toolbar.hide()
2972+
2973+ layout = QtGui.QVBoxLayout()
2974+ layout.setMargin(10)
2975+ layout.addWidget(self.splitter)
2976+ self.add_layout(layout)
2977+
2978+ shelve_menu = QtGui.QMenu(gettext("Shelve"), self)
2979+ shelve_menu.addAction(self.create_button(N_("Destroy"),
2980+ onclick=lambda:self.do_shelve(destroy=True)))
2981+
2982+ self.add_toolbar_button(N_('Shelve'), icon_name='shelve',
2983+ shortcut=QtGui.QKeySequence.Save, onclick=self.do_shelve,
2984+ menu = shelve_menu)
2985+
2986+ self.add_separator()
2987+
2988+ self.add_toolbar_button(N_('Select all'), icon_name='select-all',
2989+ onclick=lambda:self.check_all(True))
2990+
2991+ self.add_toolbar_button(N_('Unselect all'), icon_name='unselect-all',
2992+ onclick=lambda:self.check_all(False))
2993+
2994+ layout_selector = \
2995+ LayoutSelector(num=3, onchanged=self.set_layout, parent=self,
2996+ initial_no=self.current_layout)
2997+
2998+ self.add_toolbar_menu(N_("&Layout"), layout_selector,
2999+ icon_name="internet-news-reader", shortcut="Alt+L")
3000+
3001+ self.add_toolbar_button(N_('&Refresh'), icon_name='view-refresh',
3002+ shortcut="Ctrl+R", onclick=self.refresh)
3003+
3004+ self.connect(self.file_view, QtCore.SIGNAL("itemSelectionChanged()"),
3005+ self.selected_file_changed)
3006+
3007+ self.connect(self.file_view, QtCore.SIGNAL("itemChanged(QTreeWidgetItem *, int)"),
3008+ self.file_checked)
3009+
3010+ self.connect(self.hunk_view, QtCore.SIGNAL("selectionChanged()"),
3011+ self.selected_hunk_changed)
3012+
3013+ self.set_layout()
3014+
3015+ if splitters:
3016+ splitters.add("shelve_splitter", self.splitter)
3017+ splitters.add("shelve_splitter1", self.splitter1)
3018+ splitters.add("shelve_splitter2", self.splitter2)
3019+ for sp in (self.splitter, self.splitter1, self.splitter2):
3020+ sp.setChildrenCollapsible(False)
3021+ sp.setStretchFactor(0, 3)
3022+ sp.setStretchFactor(1, 7)
3023+
3024+
3025+ self.loaded = False
3026+
3027+ def set_layout(self, type=None):
3028+ if type:
3029+ self.current_layout = type
3030+
3031+ self.file_view.setParent(None)
3032+ if self.current_layout == 1:
3033+ self.splitter.setOrientation(QtCore.Qt.Vertical)
3034+ self.splitter1.setOrientation(QtCore.Qt.Horizontal)
3035+ self.splitter1.insertWidget(1, self.file_view)
3036+ elif self.current_layout == 2:
3037+ self.splitter.setOrientation(QtCore.Qt.Horizontal)
3038+ self.splitter1.setOrientation(QtCore.Qt.Vertical)
3039+ self.splitter1.insertWidget(1, self.file_view)
3040+ else:
3041+ self.splitter.setOrientation(QtCore.Qt.Vertical)
3042+ self.splitter2.setOrientation(QtCore.Qt.Horizontal)
3043+ self.splitter2.insertWidget(0, self.file_view)
3044+
3045+ for sp in (self.splitter, self.splitter1, self.splitter2):
3046+ if sp.count() != 2:
3047+ continue
3048+ size = sum(sp.sizes())
3049+ if size > 0:
3050+ size1 = int(size * 0.3)
3051+ sp.setSizes((size1, size - size1))
3052+
3053+ def _create_shelver_and_creator(self, destroy=False):
3054+ shelver = Shelver.from_args(DummyDiffWriter(), None,
3055+ False, self.file_list, None, directory=self.directory,
3056+ destroy=destroy)
3057+ try:
3058+ creator = ShelfCreator(
3059+ shelver.work_tree, shelver.target_tree, shelver.file_list)
3060+ except:
3061+ shelver.finalize()
3062+ raise
3063+
3064+ return shelver, creator
3065+
3066+ def on_tabwidth_changed(self, width):
3067+ get_set_tab_width_chars(self.trees[1].branch, tab_width_chars=width)
3068+ self._on_tabwidth_changed(width)
3069+
3070+ def _on_tabwidth_changed(self, width):
3071+ pixels = get_tab_width_pixels(tab_width_chars=width)
3072+ self.hunk_view.set_tab_width(pixels)
3073+
3074+ def refresh(self):
3075+ cleanup = []
3076+ try:
3077+ old_rev = self.revision
3078+ old_changes = self._get_change_dictionary()
3079+ self.clear(clear_message = False)
3080+
3081+ shelver, creator = self._create_shelver_and_creator()
3082+ cleanup.append(shelver.finalize)
3083+ cleanup.append(creator.finalize)
3084+
3085+ file_list = shelver.file_list
3086+ if file_list:
3087+ nfiles = len(file_list)
3088+ if nfiles > 2:
3089+ self.files_str = ngettext("%d file", "%d files", nfiles) % nfiles
3090+ else:
3091+ self.files_str = ", ".join(file_list)
3092+
3093+ self.trees = (shelver.target_tree, shelver.work_tree)
3094+ self.editor_available = (shelver.change_editor is not None)
3095+ self.editor_button.setVisible(self.editor_available)
3096+ tabwidth = get_set_tab_width_chars(self.trees[1].branch)
3097+ self.tabwidth_selector.setTabWidth(tabwidth)
3098+ self._on_tabwidth_changed(tabwidth)
3099+ self.revision = self.trees[0].get_revision_id()
3100+ if self.revision != old_rev:
3101+ old_changes = None
3102+ for change in creator.iter_shelvable():
3103+ item = self._create_item(change, shelver, self.trees, old_changes)
3104+ self.file_view.addTopLevelItem(item)
3105+
3106+ finally:
3107+ for func in cleanup:
3108+ func()
3109+
3110+ self.loaded = True
3111+
3112+ def _create_item(self, change, shelver, trees, old_changes):
3113+ """Create QTreeWidgetItem for file list from Change instance."""
3114+ ch = Change(change, shelver, trees)
3115+ item = QtGui.QTreeWidgetItem()
3116+
3117+ item.setIcon(0, get_icon("file", 16))
3118+ item.change = ch
3119+ item.setText(0, ch.disp_text)
3120+ item.setText(1, gettext(ch.status))
3121+ if ch.status == 'modify text':
3122+ item.setText(2, u'0/%d' % len(ch.parsed_patch.hunks))
3123+ item.setCheckState(0, QtCore.Qt.Unchecked)
3124+
3125+ if old_changes:
3126+ old_change = old_changes.get((ch.file_id, ch.status))
3127+ if old_change and old_change.is_same_change(ch):
3128+ # Keep selection when reloading
3129+ if ch.status == 'modify text':
3130+ item.change = old_change
3131+ self.update_item(item)
3132+ else:
3133+ item.setCheckState(0, QtCore.Qt.Checked)
3134+ return item
3135+
3136+ def selected_file_changed(self):
3137+ items = self.file_view.selectedItems()
3138+ if len(items) != 1 or items[0].change.status != 'modify text':
3139+ self.hunk_view.clear()
3140+ self.editor_button.setEnabled(False)
3141+ else:
3142+ item = items[0]
3143+ encoding = self.encoding_selector.encoding
3144+ self.hunk_view.set_parsed_patch(item.change, encoding)
3145+ self.editor_button.setEnabled(self.editor_available)
3146+
3147+ def selected_hunk_changed(self):
3148+ for item in self.file_view.selectedItems():
3149+ self.update_item(item)
3150+
3151+ def update_item(self, item):
3152+ change = item.change
3153+ if change.status != 'modify text':
3154+ return
3155+
3156+ if change.edited_lines:
3157+ state = QtCore.Qt.PartiallyChecked
3158+ item.setText(2, "???")
3159+ else:
3160+ hunks = change.parsed_patch.hunks
3161+ hunk_num = len(hunks)
3162+ selected_hunk_num = 0
3163+ for hunk in hunks:
3164+ if hunk.selected:
3165+ selected_hunk_num += 1
3166+ item.setText(2, "%d/%d" % (selected_hunk_num, hunk_num))
3167+ if selected_hunk_num == 0:
3168+ state = QtCore.Qt.Unchecked
3169+ elif selected_hunk_num == hunk_num:
3170+ state = QtCore.Qt.Checked
3171+ else:
3172+ state = QtCore.Qt.PartiallyChecked
3173+
3174+ if item.checkState(0) != state:
3175+ item.setCheckState(0, state)
3176+ self.update_compleater_words()
3177+
3178+ def file_checked(self, item, column):
3179+ if column != 0:
3180+ return
3181+
3182+ checked = item.checkState(0)
3183+ if checked == QtCore.Qt.Checked:
3184+ selected = True
3185+ elif checked == QtCore.Qt.Unchecked:
3186+ selected = False
3187+ else:
3188+ return
3189+
3190+ if item.change.status == 'modify text':
3191+ hunk_num = len(item.change.parsed_patch.hunks)
3192+ for hunk in item.change.parsed_patch.hunks:
3193+ hunk.selected = selected
3194+ if item.change.edited_lines:
3195+ item.change.edited_lines = None
3196+ self.selected_file_changed()
3197+ else:
3198+ self.hunk_view.update()
3199+ item.setText(2, u'%d/%d' % (hunk_num if selected else 0, hunk_num))
3200+
3201+ self.update_compleater_words()
3202+
3203+ def encoding_changed(self, encoding):
3204+ self.selected_file_changed()
3205+
3206+ def complete_toggled(self, checked):
3207+ self.hunk_view.set_complete(checked)
3208+
3209+ def check_all(self, checked):
3210+ if checked:
3211+ state = QtCore.Qt.Checked
3212+ else:
3213+ state = QtCore.Qt.Unchecked
3214+
3215+ view = self.file_view
3216+ for i in range(view.topLevelItemCount()):
3217+ item = view.topLevelItem(i)
3218+ if item.checkState(0) != state:
3219+ item.setCheckState(0, state)
3220+
3221+ def clear(self, clear_message = True):
3222+ if clear_message:
3223+ self.message.clear()
3224+ self.file_view.clear()
3225+ self.file_view.viewport().update()
3226+ self.hunk_view.clear()
3227+ self.revision = None
3228+ self.loaded = False
3229+
3230+ def use_editor(self):
3231+ cleanup = []
3232+ items = self.file_view.selectedItems()
3233+ if len(items) != 1 or items[0].change.status != 'modify text':
3234+ return
3235+ else:
3236+ change = items[0].change
3237+ try:
3238+ target_tree, work_tree = self.trees
3239+ cleanup.append(work_tree.lock_read().unlock)
3240+ cleanup.append(target_tree.lock_read().unlock)
3241+ config = work_tree.branch.get_config()
3242+ change_editor = config.get_change_editor(target_tree, work_tree)
3243+ if change_editor is None:
3244+ QtGui.QMessageBox.information(self, gettext('Shelve'),
3245+ gettext('Change editor is not defined.'), gettext('&OK'))
3246+ self.editor_available = False
3247+ self.editor_button.setEnabled(False)
3248+ return
3249+
3250+ cleanup.append(change_editor.finish)
3251+ lines = split_lines(change_editor.edit_file(change.file_id))
3252+ change_count = Shelver._count_changed_regions(change.work_lines, lines)
3253+ if change_count > 0:
3254+ change.edited_lines = lines
3255+ self.update_item(items[0])
3256+ self.selected_file_changed()
3257+ finally:
3258+ while cleanup:
3259+ cleanup.pop()()
3260+
3261+ def _get_change_dictionary(self):
3262+ change_dict = {}
3263+ for i in range(0, self.file_view.topLevelItemCount()):
3264+ item = self.file_view.topLevelItem(i)
3265+ change = item.change
3266+ if item.checkState(0) == QtCore.Qt.Unchecked:
3267+ continue
3268+ change_dict[(change.file_id, change.status)] = change
3269+ return change_dict
3270+
3271+ def do_shelve(self, destroy=False):
3272+ change_dict = self._get_change_dictionary()
3273+ if change_dict:
3274+ nfiles = len(change_dict)
3275+ if destroy:
3276+ prompt = ngettext('Delete changes of %d file without shelving',
3277+ 'Delete changes of %d files without shelving', nfiles) % nfiles
3278+ func = QtGui.QMessageBox.warning
3279+ else:
3280+ prompt = ngettext('Shelve changes of %d file',
3281+ 'Shelve changes of %d files', nfiles) % nfiles
3282+ func = QtGui.QMessageBox.question
3283+ ret = func(self, gettext('Shelve'), prompt,
3284+ QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)
3285+ if ret != QtGui.QMessageBox.Ok:
3286+ return
3287+ else:
3288+ QtGui.QMessageBox.information(self, gettext('Shelve'),
3289+ gettext('No changes selected.'), gettext('&OK'))
3290+ return
3291+
3292+ cleanup = []
3293+ try:
3294+ shelver, creator = self._create_shelver_and_creator(destroy=destroy)
3295+ cleanup.append(shelver.finalize)
3296+ cleanup.append(creator.finalize)
3297+ trees = (shelver.target_tree, shelver.work_tree)
3298+ if len(trees[1].get_parent_ids()) > 1:
3299+ raise WorkingTreeHasPendingMarge
3300+ if self.revision != trees[0].get_revision_id():
3301+ raise WorkingTreeHasChanged
3302+
3303+ changes = []
3304+ for ch in creator.iter_shelvable():
3305+ change = Change(ch, shelver, trees)
3306+ key = (change.file_id, change.status)
3307+ org_change = change_dict.get(key)
3308+ if org_change is None:
3309+ continue
3310+ if not change.is_same_change(org_change):
3311+ raise WorkingTreeHasChanged
3312+ del(change_dict[key])
3313+ changes.append(org_change)
3314+
3315+ if change_dict:
3316+ raise WorkingTreeHasChanged
3317+
3318+ for change in changes:
3319+ if change.status == 'modify text':
3320+ self.handle_modify_text(creator, change)
3321+ elif change.status == 'modify binary':
3322+ creator.shelve_content_change(change.data[1])
3323+ else:
3324+ creator.shelve_change(change.data)
3325+ manager = shelver.work_tree.get_shelf_manager()
3326+ message = unicode(self.message.toPlainText()).strip() or gettext(u'<no message>')
3327+ if destroy:
3328+ creator.transform()
3329+ shelf_id = -1
3330+ else:
3331+ shelf_id = manager.shelve_changes(creator, message)
3332+
3333+ except WorkingTreeHasPendingMarge:
3334+ QtGui.QMessageBox.warning(self, gettext('Shelve'),
3335+ gettext('Operation aborted because working tree has pending marges.'), gettext('&OK'))
3336+ return
3337+ except WorkingTreeHasChanged:
3338+ QtGui.QMessageBox.warning(self, gettext('Shelve'),
3339+ gettext('Operation aborted because target files has been changed.'), gettext('&OK'))
3340+ return
3341+
3342+ finally:
3343+ while cleanup:
3344+ cleanup.pop()()
3345+ self.emit(QtCore.SIGNAL("shelfCreated(int)"), shelf_id)
3346+ self.clear()
3347+
3348+ def handle_modify_text(self, creator, change):
3349+ final_hunks = []
3350+ offset = 0
3351+ change_count = 0
3352+ if change.edited_lines:
3353+ creator.shelve_lines(change.file_id, change.edited_lines)
3354+ else:
3355+ for hunk in change.parsed_patch.hunks:
3356+ if hunk.selected:
3357+ offset -= (hunk.mod_range - hunk.orig_range)
3358+ change_count += 1
3359+ else:
3360+ hunk.mod_pos += offset
3361+ final_hunks.append(hunk)
3362+
3363+ if change_count == 0:
3364+ return
3365+ patched = patches.iter_patched_from_hunks(change.target_lines, final_hunks)
3366+ creator.shelve_lines(change.file_id, list(patched))
3367+
3368+ def load_settings(self):
3369+ config = get_qbzr_config()
3370+ layout = config.get_option("shelve_layout")
3371+ if layout not in ("1", "3"):
3372+ layout = "2"
3373+ self.current_layout = int(layout)
3374+
3375+ def save_settings(self):
3376+ config = get_qbzr_config()
3377+ config.set_option("shelve_layout", str(self.current_layout))
3378+ config.save()
3379+
3380+ def hideEvent(self, event):
3381+ self.save_settings()
3382+
3383+ def update_compleater_words(self):
3384+ words = set()
3385+ num_files_loaded = 0
3386+ for i in range(0, self.file_view.topLevelItemCount()):
3387+ item = self.file_view.topLevelItem(i)
3388+ if item.checkState(0) == QtCore.Qt.Unchecked:
3389+ continue
3390+ ch = item.change
3391+
3392+ if num_files_loaded < MAX_AUTOCOMPLETE_FILES:
3393+ file_words, load_texts_first = ch.get_words()
3394+ words.update(file_words)
3395+ if load_texts_first:
3396+ num_files_loaded += 1
3397+ self.window().processEvents()
3398+
3399+ words = list(words)
3400+ words.sort(key=lambda x: x.lower())
3401+ self.completer_model.setStringList(words)
3402+
3403+class HunkView(QtGui.QWidget):
3404+ def __init__(self, complete=False, parent=None):
3405+ QtGui.QWidget.__init__(self, parent)
3406+ layout = QtGui.QHBoxLayout(self)
3407+ layout.setSpacing(0)
3408+ layout.setMargin(0)
3409+ self.browser = HunkTextBrowser(complete, self)
3410+ self.selector = HunkSelector(self.browser, self)
3411+ layout.addWidget(self.selector)
3412+ layout.addWidget(self.browser)
3413+ self.connect(self.browser, QtCore.SIGNAL("focusedHunkChanged()"),
3414+ self.update)
3415+
3416+ def selected_hunk_changed():
3417+ self.update()
3418+ self.emit(QtCore.SIGNAL("selectionChanged()"))
3419+ self.connect(self.browser, QtCore.SIGNAL("selectedHunkChanged()"),
3420+ selected_hunk_changed)
3421+
3422+ self.change = None
3423+ self.encoding = None
3424+
3425+ def set_tab_width(self, pixels):
3426+ self.browser.setTabStopWidth(pixels)
3427+
3428+ def set_complete(self, value):
3429+ self.browser.complete = value
3430+ if self.change is not None:
3431+ self.set_parsed_patch(self.change, self.encoding)
3432+
3433+ def move_previous(self):
3434+ self.browser.move_previous()
3435+
3436+ def move_next(self):
3437+ self.browser.move_next()
3438+
3439+ def rewind(self):
3440+ self.browser.rewind()
3441+
3442+ def set_parsed_patch(self, change, encoding):
3443+ self.change = change
3444+ self.encoding = encoding
3445+ self.browser.set_parsed_patch(change, encoding)
3446+ self.update()
3447+
3448+ def update(self):
3449+ self.selector.update()
3450+ self.browser.update()
3451+
3452+ def clear(self):
3453+ self.browser.clear()
3454+
3455+class HunkSelector(QtGui.QFrame):
3456+ def __init__(self, browser, parent):
3457+ QtGui.QFrame.__init__(self, parent)
3458+ self.browser = browser
3459+ self.setFixedWidth(25)
3460+ self.setStyleSheet("border:1px solid lightgray;")
3461+ self.connect(browser.verticalScrollBar(), QtCore.SIGNAL("valueChanged(int)"), self.scrolled)
3462+ self.frame_width = QtGui.QApplication.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth)
3463+
3464+ self.checkbox_pen = QtGui.QPen(QtCore.Qt.black)
3465+ self.checkbox_pen.setWidth(2)
3466+
3467+ def scrolled(self, value):
3468+ self.update()
3469+
3470+ def paintEvent(self, event):
3471+ QtGui.QFrame.paintEvent(self, event)
3472+ browser = self.browser
3473+ if not browser.hunk_list:
3474+ return
3475+ scroll_y = browser.verticalScrollBar().value() - self.frame_width
3476+ painter = QtGui.QPainter(self)
3477+ rect = event.rect()
3478+ painter.setClipRect(rect)
3479+ browser.draw_background(
3480+ QtCore.QRect(1, rect.top(), self.width() - 2, rect.height()),
3481+ painter, scroll_y)
3482+
3483+ # draw checkbox
3484+ top, bottom = rect.top(), rect.bottom()
3485+ painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
3486+ painter.setPen(self.checkbox_pen)
3487+ for hunk, y1, y2 in browser.hunk_list:
3488+ y1 -= scroll_y
3489+ y1 += 4
3490+ if y1 + 13 < top:
3491+ continue
3492+ if bottom < y1:
3493+ break
3494+ painter.fillRect(6, y1, 13, 13, QtCore.Qt.white)
3495+
3496+ painter.drawRect(6, y1, 13, 13)
3497+ if hunk.selected:
3498+ painter.drawLine(9, y1 + 7, 12, y1 + 10)
3499+ painter.drawLine(16, y1 + 3, 12, y1 + 10)
3500+
3501+ del painter
3502+
3503+ def mousePressEvent(self, event):
3504+ if event.button() == QtCore.Qt.LeftButton:
3505+ browser = self.browser
3506+ scroll_y = browser.verticalScrollBar().value()
3507+
3508+ y = event.y() + scroll_y - self.frame_width
3509+ for i, (hunk, top, bottom) in enumerate(browser.hunk_list):
3510+ if top <= y <= bottom:
3511+ browser.toggle_selection(i)
3512+ break
3513+ elif y < top:
3514+ break
3515+ browser.focus_hunk_by_pos(event.y() - self.frame_width)
3516+ QtGui.QFrame.mousePressEvent(self, event)
3517+
3518+class HunkTextBrowser(QtGui.QTextBrowser):
3519+
3520+ def __init__(self, complete=False, parent=None):
3521+ # XXX: This code should be merged with QSimpleDiffView
3522+ QtGui.QTextBrowser.__init__(self, parent)
3523+ self.hunk_list = []
3524+ self.doc = QtGui.QTextDocument(parent)
3525+ self.doc.setUndoRedoEnabled(False)
3526+ self.setDocument(self.doc)
3527+
3528+ option = self.doc.defaultTextOption()
3529+ option.setWrapMode(QtGui.QTextOption.NoWrap)
3530+ self.doc.setDefaultTextOption(option)
3531+ self.rewinded = False
3532+ self.cursor = QtGui.QTextCursor(self.doc)
3533+
3534+ monospacedFont = get_monospace_font()
3535+ self.monospacedFormat = QtGui.QTextCharFormat()
3536+ self.monospacedFormat.setFont(monospacedFont)
3537+ self.monospacedInsertFormat = QtGui.QTextCharFormat(self.monospacedFormat)
3538+ self.monospacedInsertFormat.setForeground(QtGui.QColor(0, 136, 11))
3539+ self.monospacedDeleteFormat = QtGui.QTextCharFormat(self.monospacedFormat)
3540+ self.monospacedDeleteFormat.setForeground(QtGui.QColor(204, 0, 0))
3541+
3542+ self.monospacedInactiveFormat = QtGui.QTextCharFormat(self.monospacedFormat)
3543+ self.monospacedInactiveFormat.setForeground(QtGui.QColor(128, 128, 128))
3544+
3545+ titleFont = QtGui.QFont(monospacedFont)
3546+ titleFont.setPointSize(titleFont.pointSize() * 140 / 100)
3547+ titleFont.setBold(True)
3548+ titleFont.setItalic(True)
3549+
3550+ self.monospacedHunkFormat = QtGui.QTextCharFormat()
3551+ self.monospacedHunkFormat.setFont(titleFont)
3552+ self.monospacedHunkFormat.setForeground(QtCore.Qt.black)
3553+
3554+ from bzrlib.plugins.qbzr.lib.diffview import colors
3555+ self.header_color = colors['blank'][0]
3556+ self.border_pen = QtGui.QPen(QtCore.Qt.gray)
3557+ self.focus_color = QtGui.QColor(0x87, 0xCE, 0xEB, 0x48) # lightBlue
3558+ self.focus_color_inactive = QtGui.QColor(0x87, 0xCE, 0xEB, 0x20) # lightBlue
3559+
3560+ self.complete = complete
3561+ self._focused_index = -1
3562+
3563+ def rewind(self):
3564+ if not self.rewinded:
3565+ self.rewinded = True
3566+ self.verticalScrollBar().setValue(0)
3567+
3568+ def set_parsed_patch(self, change, encoding):
3569+ self.clear()
3570+ cursor = self.cursor
3571+
3572+ if change.edited_lines:
3573+ cursor.insertText(
3574+ gettext("Edited by change editor.\n"), self.monospacedHunkFormat)
3575+ lines = "".join(change.encode_edited_lines(encoding))
3576+ if lines:
3577+ cursor.insertText(lines, self.monospacedInactiveFormat)
3578+ return
3579+
3580+ patch = change.parsed_patch
3581+ texts = change.encode_hunk_texts(encoding)
3582+ if self.complete:
3583+ work_lines = change.encode_work_lines(encoding)
3584+
3585+ def print_hunk(hunk, hunk_texts):
3586+ for line, text in zip(hunk.lines, hunk_texts):
3587+ if isinstance(line, InsertLine):
3588+ fmt = self.monospacedInsertFormat
3589+ elif isinstance(line, RemoveLine):
3590+ fmt = self.monospacedDeleteFormat
3591+ else:
3592+ fmt = self.monospacedFormat
3593+ cursor.insertText(text, fmt)
3594+
3595+ start = 0
3596+ for hunk, hunk_texts in zip(patch.hunks, texts):
3597+ # NOTE: hunk.mod_pos is 1 based value, not 0 based.
3598+ if self.complete:
3599+ lines = "".join([' ' + l for l in work_lines[start:hunk.mod_pos - 1]])
3600+ if lines:
3601+ cursor.insertText(lines, self.monospacedInactiveFormat)
3602+ start = hunk.mod_pos + hunk.mod_range - 1
3603+ y1 = cursor.block().layout().position().y()
3604+ print_hunk(hunk, hunk_texts)
3605+ y2 = cursor.block().layout().position().y()
3606+
3607+ else:
3608+ y1 = cursor.block().layout().position().y()
3609+ cursor.insertText(str(hunk.get_header()), self.monospacedHunkFormat)
3610+ print_hunk(hunk, hunk_texts)
3611+ cursor.insertText("\n", self.monospacedFormat)
3612+ y2 = cursor.block().layout().position().y()
3613+
3614+ self.hunk_list.append((hunk, y1, y2))
3615+
3616+ if self.complete:
3617+ lines = "".join([' ' + l for l in work_lines[start:]])
3618+ if lines:
3619+ cursor.insertText(lines, self.monospacedInactiveFormat)
3620+
3621+ if self.hunk_list:
3622+ self._set_focused_hunk(0)
3623+
3624+ self.update()
3625+
3626+ def update(self):
3627+ QtGui.QTextBrowser.update(self)
3628+ self.viewport().update()
3629+
3630+ def clear(self):
3631+ QtGui.QTextBrowser.clear(self)
3632+ del(self.hunk_list[:])
3633+ self._set_focused_hunk(-1)
3634+
3635+ def paintEvent(self, event):
3636+ if not self.hunk_list:
3637+ QtGui.QTextBrowser.paintEvent(self, event)
3638+ return
3639+ scroll_y = self.verticalScrollBar().value()
3640+
3641+ painter = QtGui.QPainter(self.viewport())
3642+ rect = event.rect()
3643+ painter.setClipRect(rect)
3644+
3645+ self.draw_background(rect, painter, scroll_y)
3646+
3647+ QtGui.QTextBrowser.paintEvent(self, event)
3648+ del painter
3649+
3650+ def draw_background(self, rect, painter, offset):
3651+ left, right, width = rect.left(), rect.right(), rect.width()
3652+ top, bottom = rect.top(), rect.bottom()
3653+ painter.setPen(self.border_pen)
3654+ for i, (hunk, y1, y2) in enumerate(self.hunk_list):
3655+ y1 -= offset
3656+ y2 -= offset
3657+ if bottom < y1 or y2 < top:
3658+ continue
3659+ if not self.complete:
3660+ # Fill header rect.
3661+ painter.fillRect(left, y1, width, 20, self.header_color)
3662+ # Overlay focus rect.
3663+ if i == self._focused_index:
3664+ if self.hasFocus():
3665+ color = self.focus_color
3666+ else:
3667+ color = self.focus_color_inactive
3668+ painter.fillRect(left, y1, width, y2 - y1, color)
3669+ # Draw border.
3670+ painter.drawLine(left, y1, right, y1)
3671+ painter.drawLine(left, y2, right, y2)
3672+
3673+ def move_next(self):
3674+ index = int(self._focused_index + 1)
3675+ if index == len(self.hunk_list):
3676+ index -= 1
3677+ self._set_focused_hunk(index)
3678+ self.setFocus(QtCore.Qt.OtherFocusReason)
3679+
3680+ def move_previous(self):
3681+ index = int(self._focused_index)
3682+ if 1 <= index and index == self._focused_index:
3683+ index -= 1
3684+ self._set_focused_hunk(index)
3685+ self.setFocus(QtCore.Qt.OtherFocusReason)
3686+
3687+ def toggle_selection(self, index):
3688+ if 0 <= index < len(self.hunk_list) and int(index) == index:
3689+ self.hunk_list[index][0].selected = \
3690+ not self.hunk_list[index][0].selected
3691+ self.emit(QtCore.SIGNAL("selectedHunkChanged()"))
3692+
3693+ def focus_hunk_by_pos(self, y):
3694+ index = self.hittest(y)
3695+ self._set_focused_hunk(index, scroll=False)
3696+
3697+ def _set_focused_hunk(self, index, scroll=True):
3698+ self._focused_index = index
3699+ self.update()
3700+ self.emit(QtCore.SIGNAL("focusedHunkChanged()"))
3701+ if scroll and int(index) == index:
3702+ self.scroll_to_hunk(index)
3703+
3704+ def hittest(self, y):
3705+ # NOTE : Value of y is client coordinate.
3706+ # If y is between (N)th and (N+1)th hunks, return (N + 0.5)
3707+ if not self.hunk_list:
3708+ return -1
3709+ y += self.verticalScrollBar().value()
3710+ for i, (hunk, y1, y2) in enumerate(self.hunk_list):
3711+ if y1 <= y <= y2:
3712+ return i
3713+ elif y < y1:
3714+ return i - 0.5
3715+ return i + 0.5
3716+
3717+ def scroll_to_hunk(self, index):
3718+ sbar = self.verticalScrollBar()
3719+ if index < 0:
3720+ sbar.setValue(0)
3721+ elif len(self.hunk_list) <= index:
3722+ sbar.setValue(sbar.maximum())
3723+ else:
3724+ MARGIN = 24
3725+ height = self.viewport().height()
3726+ cur_pos = sbar.value()
3727+ max_pos = self.hunk_list[index][1] - MARGIN
3728+ min_pos = self.hunk_list[index][2] - height + MARGIN
3729+ if max_pos <= min_pos or max_pos < cur_pos:
3730+ sbar.setValue(max_pos)
3731+ elif cur_pos < min_pos:
3732+ sbar.setValue(min_pos)
3733+
3734+ def mousePressEvent(self, event):
3735+ if event.button() == QtCore.Qt.LeftButton:
3736+ self.focus_hunk_by_pos(event.y())
3737+
3738+ QtGui.QTextBrowser.mousePressEvent(self, event)
3739+
3740+ def focusInEvent(self, event):
3741+ self.parent().update()
3742+ QtGui.QTextBrowser.focusInEvent(self, event)
3743+
3744+ def focusOutEvent(self, event):
3745+ self.parent().update()
3746+ QtGui.QTextBrowser.focusOutEvent(self, event)
3747+
3748+ def keyPressEvent(self, event):
3749+ mod, key = int(event.modifiers()), event.key()
3750+ if mod == QtCore.Qt.NoModifier:
3751+ if key == QtCore.Qt.Key_Space:
3752+ self.toggle_selection(self._focused_index)
3753+ return
3754+ QtGui.QTextBrowser.keyPressEvent(self, event)
3755+
3756
3757=== added file 'lib/widgets/shelvelist.py'
3758--- lib/widgets/shelvelist.py 1970-01-01 00:00:00 +0000
3759+++ lib/widgets/shelvelist.py 2011-06-07 22:54:29 +0000
3760@@ -0,0 +1,541 @@
3761+# -*- coding: utf-8 -*-
3762+#
3763+# QBzr - Qt frontend to Bazaar commands
3764+# Copyright (C) 2011 QBzr Developers
3765+#
3766+# This program is free software; you can redistribute it and/or
3767+# modify it under the terms of the GNU General Public License
3768+# as published by the Free Software Foundation; either version 2
3769+# of the License, or (at your option) any later version.
3770+#
3771+# This program is distributed in the hope that it will be useful,
3772+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3773+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3774+# GNU General Public License for more details.
3775+#
3776+# You should have received a copy of the GNU General Public License
3777+# along with this program; if not, write to the Free Software
3778+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
3779+
3780+import sys, time
3781+from PyQt4 import QtCore, QtGui
3782+from PyQt4.QtGui import QKeySequence
3783+
3784+from bzrlib.revision import CURRENT_REVISION
3785+from bzrlib.errors import (
3786+ NoSuchRevision,
3787+ NoSuchRevisionInTree,
3788+ PathsNotVersionedError)
3789+from bzrlib.plugins.qbzr.lib.i18n import gettext, N_
3790+from bzrlib.plugins.qbzr.lib.util import (
3791+ ToolBarThrobberWidget,
3792+ get_apparent_author_name,
3793+ get_set_encoding,
3794+ runs_in_loading_queue,
3795+ get_icon,
3796+ get_monospace_font,
3797+ StandardButton,
3798+ get_tab_width_pixels,
3799+ get_set_tab_width_chars,
3800+ get_qbzr_config,
3801+ )
3802+from bzrlib.plugins.qbzr.lib.widgets.toolbars import (
3803+ FindToolbar, ToolbarPanel, LayoutSelector
3804+ )
3805+from bzrlib.plugins.qbzr.lib.widgets.tab_width_selector import TabWidthMenuSelector
3806+from bzrlib.plugins.qbzr.lib.diffview import (
3807+ SidebySideDiffView,
3808+ SimpleDiffView,
3809+ )
3810+
3811+from bzrlib.plugins.qbzr.lib.uifactory import ui_current_widget
3812+from bzrlib.plugins.qbzr.lib.trace import reports_exception
3813+from bzrlib.plugins.qbzr.lib.logwidget import LogList
3814+from bzrlib.lazy_import import lazy_import
3815+lazy_import(globals(), '''
3816+from bzrlib import transform
3817+from bzrlib.workingtree import WorkingTree
3818+from bzrlib.plugins.qbzr.lib.encoding_selector import EncodingMenuSelector
3819+from bzrlib.plugins.qbzr.lib.diffwindow import DiffItem
3820+from bzrlib.shelf import Unshelver
3821+from bzrlib.shelf_ui import Unshelver as Unshelver_ui
3822+from bzrlib.plugins.qbzr.lib.subprocess import SimpleSubProcessDialog
3823+''')
3824+
3825+class ShelveListWidget(ToolbarPanel):
3826+
3827+ def __init__(self, directory=None, complete=False, ignore_whitespace=False,
3828+ encoding=None, splitters=None, parent=None):
3829+ ToolbarPanel.__init__(self, slender=False, icon_size=22, parent=parent)
3830+
3831+ self.encoding = encoding
3832+ self.directory = directory
3833+
3834+ self.current_diffs = []
3835+ self.complete = complete
3836+ self.ignore_whitespace = ignore_whitespace
3837+ self.show_files = False
3838+ self.load_settings()
3839+
3840+ # build main widgets
3841+ self.shelve_view = QtGui.QTreeWidget(self)
3842+ self.shelve_view.setHeaderLabels([gettext("Id"), gettext("Message")])
3843+ header = self.shelve_view.header()
3844+ header.setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
3845+
3846+ self.file_view = QtGui.QTreeWidget(self)
3847+ self.file_view.setHeaderLabels([gettext("File Name"), gettext("Status")])
3848+ self.file_view.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
3849+ header = self.file_view.header()
3850+ header.setStretchLastSection(False)
3851+ header.setResizeMode(0, QtGui.QHeaderView.Stretch)
3852+ header.setResizeMode(1, QtGui.QHeaderView.ResizeToContents)
3853+ self.stack = QtGui.QStackedWidget(self)
3854+ self.diffviews = (SidebySideDiffView(self), SimpleDiffView(self))
3855+ for view in self.diffviews:
3856+ self.stack.addWidget(view)
3857+ for browser in self.diffviews[0].browsers:
3858+ browser.installEventFilter(self)
3859+
3860+ diff_panel = ToolbarPanel(self)
3861+
3862+ # build diffpanel toolbar
3863+ show_find = diff_panel.add_toolbar_button(
3864+ N_("Find"), icon_name="edit-find", checkable=True,
3865+ shortcut=QtGui.QKeySequence.Find)
3866+ diff_panel.add_separator()
3867+ diff_panel.add_toolbar_button(N_("Unidiff"), icon_name="unidiff",
3868+ checkable=True, shortcut="Ctrl+U", onclick=self.unidiff_toggled)
3869+
3870+ view_menu = QtGui.QMenu(gettext('View Options'), self)
3871+ view_menu.addAction(
3872+ diff_panel.create_button(N_("&Complete"), icon_name="complete",
3873+ checkable=True, checked=complete, onclick=self.complete_toggled)
3874+ )
3875+ view_menu.addAction(
3876+ diff_panel.create_button(N_("Ignore whitespace"), icon_name="whitespace",
3877+ checkable=True, checked=ignore_whitespace, onclick=self.whitespace_toggled)
3878+ )
3879+ self.tabwidth_selector = TabWidthMenuSelector(label_text=gettext("Tab width"),
3880+ onChanged=self.on_tabwidth_changed)
3881+ view_menu.addMenu(self.tabwidth_selector)
3882+ self.encoding_selector = EncodingMenuSelector(self.encoding,
3883+ gettext("Encoding"), self.encoding_changed)
3884+ self.encoding_selector.setIcon(get_icon("format-text-bold", 16))
3885+ view_menu.addMenu(self.encoding_selector)
3886+ diff_panel.add_toolbar_menu(
3887+ N_("&View Options"), view_menu, icon_name="document-properties",
3888+ shortcut="Alt+V")
3889+
3890+ self.find_toolbar = FindToolbar(self, self.diffviews[0].browsers[0], show_find)
3891+ diff_panel.add_widget(self.find_toolbar)
3892+ diff_panel.add_widget(self.stack)
3893+ self.find_toolbar.hide()
3894+
3895+ # Layout widgets
3896+ self.splitter1 = QtGui.QSplitter(QtCore.Qt.Horizontal)
3897+ self.splitter1.addWidget(self.shelve_view)
3898+
3899+ self.splitter2 = QtGui.QSplitter(QtCore.Qt.Horizontal)
3900+ self.splitter2.addWidget(self.file_view)
3901+ self.splitter2.addWidget(diff_panel)
3902+
3903+ self.splitter = QtGui.QSplitter(QtCore.Qt.Vertical)
3904+ self.splitter.addWidget(self.splitter1)
3905+ self.splitter.addWidget(self.splitter2)
3906+ self.splitter.setStretchFactor(0, 1)
3907+
3908+ if splitters:
3909+ splitters.add("shelvelist_splitter", self.splitter)
3910+ splitters.add("shelvelist_splitter1", self.splitter1)
3911+ splitters.add("shelvelist_splitter2", self.splitter2)
3912+
3913+ for sp in (self.splitter, self.splitter1, self.splitter2):
3914+ sp.setChildrenCollapsible(False)
3915+ sp.setStretchFactor(0, 3)
3916+ sp.setStretchFactor(1, 7)
3917+
3918+ pal = QtGui.QPalette()
3919+ pal.setColor(QtGui.QPalette.Window, QtGui.QColor(0,0,0,0))
3920+ self.splitter.setPalette(pal)
3921+
3922+ layout = QtGui.QVBoxLayout()
3923+ layout.setMargin(10)
3924+ layout.addWidget(self.splitter)
3925+ self.add_layout(layout)
3926+
3927+ # build main toolbar
3928+ unshelve_menu = QtGui.QMenu(gettext("Unshelve"), self)
3929+ unshelve_menu.addAction(self.create_button(N_("Dry run"),
3930+ onclick=lambda:self.do_unshelve('dry-run')))
3931+ unshelve_menu.addAction(self.create_button(N_("Keep"),
3932+ onclick=lambda:self.do_unshelve('keep')))
3933+ unshelve_menu.addAction(self.create_button(N_("Delete"),
3934+ onclick=lambda:self.do_unshelve('delete-only')))
3935+
3936+ self.unshelve_button = self.add_toolbar_button(N_("Unshelve"), icon_name="unshelve",
3937+ enabled=False, onclick=lambda:self.do_unshelve('apply'),
3938+ menu=unshelve_menu)
3939+ self.add_separator()
3940+
3941+ layout_selector = \
3942+ LayoutSelector(num=3, onchanged=lambda val:self.set_layout(type=val),
3943+ parent=self, initial_no=self.current_layout)
3944+
3945+ layout_selector.addSeparator()
3946+ layout_selector.addAction(
3947+ self.create_button(gettext("Show filelist"),
3948+ icon_name="file", icon_size=16, checkable=True,
3949+ checked=self.show_files, shortcut="Ctrl+L",
3950+ onclick=lambda val:self.set_layout(show_files=val))
3951+ )
3952+
3953+ self.add_toolbar_menu(N_("&Layout"), layout_selector,
3954+ icon_name="internet-news-reader", shortcut="Alt+L")
3955+
3956+ self.add_toolbar_button(N_("&Refresh"), icon_name="view-refresh",
3957+ shortcut="Ctrl+R", onclick=self.refresh)
3958+
3959+ self.shelf_id = None
3960+
3961+ self.set_layout()
3962+
3963+ # set signals
3964+ self.connect(self.shelve_view, QtCore.SIGNAL("itemSelectionChanged()"),
3965+ self.selected_shelve_changed)
3966+ self.connect(self.file_view, QtCore.SIGNAL("itemSelectionChanged()"),
3967+ self.selected_files_changed)
3968+
3969+ self.loaded = False
3970+ self._loading_diff = False
3971+ self._pending_info = None
3972+ self._selecting_all_files = False
3973+
3974+ def set_layout(self, type=None, show_files=None):
3975+ if type is not None:
3976+ self.current_layout = type
3977+ if show_files is not None:
3978+ self.show_files = show_files
3979+
3980+ self.file_view.setParent(None)
3981+ if self.current_layout == 1:
3982+ self.splitter.setOrientation(QtCore.Qt.Vertical)
3983+ self.splitter1.setOrientation(QtCore.Qt.Horizontal)
3984+ if self.show_files:
3985+ self.splitter1.insertWidget(1, self.file_view)
3986+ elif self.current_layout == 2:
3987+ self.splitter.setOrientation(QtCore.Qt.Horizontal)
3988+ self.splitter1.setOrientation(QtCore.Qt.Vertical)
3989+ if self.show_files:
3990+ self.splitter1.insertWidget(1, self.file_view)
3991+ else:
3992+ self.splitter.setOrientation(QtCore.Qt.Vertical)
3993+ self.splitter2.setOrientation(QtCore.Qt.Horizontal)
3994+ if self.show_files:
3995+ self.splitter2.insertWidget(0, self.file_view)
3996+
3997+ if type is not None:
3998+ # Reset splitter pos after changing type.
3999+ for sp in (self.splitter, self.splitter1, self.splitter2):
4000+ if sp.count() != 2:
4001+ continue
4002+ size = sum(sp.sizes())
4003+ if size > 0:
4004+ size1 = int(size * 0.3)
4005+ sp.setSizes((size1, size - size1))
4006+
4007+ if show_files == False:
4008+ # When filelist is hidden, select all files always.
4009+ self.select_all_files()
4010+
4011+ def on_tabwidth_changed(self, width):
4012+ get_set_tab_width_chars(self.tree.branch, tab_width_chars=width)
4013+ self._on_tabwidth_changed(width)
4014+
4015+ def _on_tabwidth_changed(self, width):
4016+ pixels = get_tab_width_pixels(tab_width_chars=width)
4017+ self.diffviews[0].setTabStopWidths((pixels, pixels))
4018+ self.diffviews[1].setTabStopWidth(pixels)
4019+
4020+ def refresh(self):
4021+ self.loaded = False
4022+ self.clear()
4023+ tree = WorkingTree.open_containing(self.directory)[0]
4024+ tree.lock_read()
4025+ try:
4026+ manager = tree.get_shelf_manager()
4027+ shelves = manager.active_shelves()
4028+ for shelf_id in reversed(shelves):
4029+
4030+ message = manager.get_metadata(shelf_id).get('message')
4031+ item = QtGui.QTreeWidgetItem()
4032+ item.setText(0, unicode(shelf_id))
4033+ item.setText(1, message or gettext('<no message>'))
4034+ item.setIcon(0, get_icon("folder", 16))
4035+ item.shelf_id = shelf_id
4036+ self.shelve_view.addTopLevelItem(item)
4037+ self.tree = tree
4038+ self.manager = manager
4039+
4040+ tabwidth = get_set_tab_width_chars(tree.branch)
4041+ self.tabwidth_selector.setTabWidth(tabwidth)
4042+ self._on_tabwidth_changed(tabwidth)
4043+
4044+ finally:
4045+ tree.unlock()
4046+ self.update()
4047+ self.loaded = True
4048+
4049+ def update(self):
4050+ for view in (self.shelve_view.viewport(), self.file_view.viewport()) + self.diffviews:
4051+ view.update()
4052+
4053+ def clear(self):
4054+ self.shelve_view.clear()
4055+ self.manager = None
4056+
4057+ def show_changes(self, shelf_id):
4058+ cleanup = []
4059+ shelf_file = self.manager.read_shelf(shelf_id)
4060+ cleanup.append(shelf_file.close)
4061+ try:
4062+ records = Unshelver.iter_records(shelf_file)
4063+ revid = Unshelver.parse_metadata(records)['revision_id']
4064+ try:
4065+ base_tree = self.tree.revision_tree(revid)
4066+ except NoSuchRevisionInTree:
4067+ base_tree = self.tree.branch.repository.revision_tree(revid)
4068+ preview = transform.TransformPreview(base_tree)
4069+ cleanup.append(preview.finalize)
4070+ preview.deserialize(records)
4071+
4072+ tabwidth = get_tab_width_pixels(self.tree.branch)
4073+ self.diffviews[0].setTabStopWidths((tabwidth, tabwidth))
4074+ self.diffviews[1].setTabStopWidth(tabwidth)
4075+
4076+ self.load_diff(preview.get_preview_tree(), base_tree)
4077+
4078+ finally:
4079+ for func in cleanup:
4080+ func()
4081+
4082+ def load_diff(self, tree, base_tree):
4083+ self.file_view.clear()
4084+
4085+ changes = tree.iter_changes(base_tree)
4086+
4087+ def changes_key(change):
4088+ return change[1][1] or change[1][0]
4089+
4090+ for (file_id, paths, changed_content, versioned, parent,
4091+ name, kind, executable) in sorted(changes, key=changes_key):
4092+ di = DiffItem.create([base_tree, tree], file_id, paths, changed_content,
4093+ versioned, parent, name, kind, executable)
4094+ if not di:
4095+ continue
4096+
4097+ di.load()
4098+
4099+ old_path, new_path = di.paths
4100+ if di.versioned == (True, False):
4101+ text = old_path
4102+ color = 'red'
4103+ elif di.versioned == (False, True):
4104+ text = new_path
4105+ color = 'blue'
4106+ elif di.paths[0] != di.paths[1]:
4107+ text = u'%s => %s' % (old_path, new_path)
4108+ color = 'purple'
4109+ else:
4110+ text = old_path
4111+ color = None
4112+
4113+ item = QtGui.QTreeWidgetItem()
4114+ item.setText(0, text)
4115+ item.setText(1, gettext(di.status))
4116+ item.setIcon(0, get_icon("file", 16))
4117+ item.diffitem = di
4118+ if color:
4119+ item.setData(0, QtCore.Qt.TextColorRole, color)
4120+ self.file_view.addTopLevelItem(item)
4121+
4122+ def show_diff(self, diffs, refresh):
4123+ self._loading_diff = True
4124+ try:
4125+ cur_len = len(self.current_diffs)
4126+ if not refresh and cur_len <= len(diffs) and self.current_diffs == diffs[0:cur_len]:
4127+ appends = diffs[cur_len:]
4128+ else:
4129+ for view in self.diffviews:
4130+ view.clear()
4131+ self.current_diffs = []
4132+ appends = diffs
4133+ for d in appends:
4134+ lines = d.lines
4135+ groups = d.groups(self.complete, self.ignore_whitespace)
4136+ dates = d.dates[:] # dates will be changed in append_diff
4137+ ulines = d.encode((self.encoding_selector.encoding,
4138+ self.encoding_selector.encoding))
4139+ data = [''.join(l) for l in ulines]
4140+ for view in self.diffviews:
4141+ view.append_diff(list(d.paths), d.file_id, d.kind, d.status, dates,
4142+ d.versioned, d.binary, ulines, groups,
4143+ data, d.properties_changed)
4144+ self.current_diffs.append(d)
4145+ if self._pending_info is not None:
4146+ # Interrupted
4147+ break
4148+ finally:
4149+ self._loading_diff = False
4150+
4151+ def selected_shelve_changed(self):
4152+ items = self.shelve_view.selectedItems()
4153+ if len(items) != 1:
4154+ self.shelf_id = None
4155+ self.unshelve_button.setEnabled(False)
4156+ self.file_view.clear()
4157+ else:
4158+ self.shelf_id = items[0].shelf_id
4159+ self.unshelve_button.setEnabled(True)
4160+ self.show_changes(self.shelf_id)
4161+ if self.show_files:
4162+ self.select_first_file()
4163+ else:
4164+ self.select_all_files()
4165+ self.file_view.viewport().update()
4166+
4167+ def selected_files_changed(self):
4168+ if not self._selecting_all_files:
4169+ self.show_selected_diff()
4170+
4171+ def select_all_files(self):
4172+ try:
4173+ self._selecting_all_files = True
4174+ for i in range(0, self.file_view.topLevelItemCount()):
4175+ self.file_view.topLevelItem(i).setSelected(True)
4176+ finally:
4177+ self._selecting_all_files = False
4178+ self.selected_files_changed()
4179+
4180+ def select_first_file(self):
4181+ if self.file_view.topLevelItemCount() > 0:
4182+ self.file_view.topLevelItem(0).setSelected(True)
4183+
4184+ def show_selected_diff(self, refresh = False):
4185+ # NOTE: SideBySideDiffView.append_diff uses processEvents internally.
4186+ # So, show_selected_diff can be called during another
4187+ # show_selected_diff is running.
4188+ if self._loading_diff:
4189+ if self._pending_info is None:
4190+ self._pending_info = (refresh,)
4191+ self.show_selected_diff_delay()
4192+ elif refresh and not self._pending_info[0]:
4193+ self._pending_info = (True,)
4194+ else:
4195+ diffs = [x.diffitem for x in self.file_view.selectedItems()]
4196+ diffs.sort(key=lambda x:x.paths[0] or x.paths[1])
4197+ self.show_diff(diffs, refresh)
4198+
4199+ def show_selected_diff_delay(self):
4200+ if self._pending_info == None:
4201+ return
4202+ if self._loading_diff:
4203+ QtCore.QTimer.singleShot(100, self.show_selected_diff_delay)
4204+ return
4205+ refresh = self._pending_info[0]
4206+ self._pending_info = None
4207+ self.show_selected_diff(refresh)
4208+
4209+ def unidiff_toggled(self, state):
4210+ index = 1 if state else 0
4211+ self.diffviews[index].rewind()
4212+ self.stack.setCurrentIndex(index)
4213+ if index == 0:
4214+ self.find_toolbar.text_edit = self.diffviews[0].browsers[0]
4215+ else:
4216+ self.find_toolbar.text_edit = self.diffviews[1]
4217+
4218+ def complete_toggled(self, state):
4219+ self.complete = state
4220+ self.show_selected_diff(refresh = True)
4221+
4222+ def whitespace_toggled(self, state):
4223+ self.ignore_whitespace = state
4224+ self.show_selected_diff(refresh = True)
4225+
4226+ def prompt_bool(self, prompt, warning=False):
4227+ if warning:
4228+ func = QtGui.QMessageBox.warning
4229+ else:
4230+ func = QtGui.QMessageBox.question
4231+ ret = func(self, gettext('Shelve'), gettext(prompt),
4232+ QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)
4233+ return (ret == QtGui.QMessageBox.Ok)
4234+
4235+ prompts = {
4236+ "apply" :
4237+ N_("Apply changes in shelf[%(id)d], and remove from the shelf"),
4238+ "dry-run" :
4239+ N_("Simulate to apply changes in shelf[%(id)d] without changing working tree"),
4240+ "keep" :
4241+ N_("Apply changes in shelf[%(id)d], but keep it shelved"),
4242+ "delete-only" :
4243+ N_("Remove shelf[%(id)d] without applying"),
4244+ }
4245+
4246+ def do_unshelve(self, action):
4247+ if not self.shelf_id:
4248+ return
4249+
4250+ prompt = gettext(self.prompts[action]) % {"id":self.shelf_id}
4251+ if action != "dry-run":
4252+ if not self.prompt_bool(prompt, warning=(action=="delete-only")):
4253+ return
4254+ self.unshelve(self.shelf_id, prompt, action)
4255+ self.refresh()
4256+
4257+ def unshelve(self, id, desc, action):
4258+ args = ["unshelve", str(id), '--' + action]
4259+ window = SimpleSubProcessDialog(gettext("Shelve Manager"),
4260+ desc=gettext(desc),
4261+ args=args,
4262+ dir=self.directory,
4263+ auto_start_show_on_failed=True,
4264+ parent=self.window())
4265+ def finished(result):
4266+ if result:
4267+ self.emit(QtCore.SIGNAL("unshelved(int, QString*)"),
4268+ self.shelf_id, action)
4269+
4270+ self.connect(window, QtCore.SIGNAL("subprocessFinished(bool)"), finished)
4271+
4272+ window.exec_()
4273+ self.refresh()
4274+
4275+ def encoding_changed(self, encoding):
4276+ self.show_selected_diff(refresh = True)
4277+
4278+ def eventFilter(self, object, event):
4279+ if event.type() == QtCore.QEvent.FocusIn:
4280+ if object in self.diffviews[0].browsers:
4281+ self.find_toolbar.text_edit = object
4282+ return ToolbarPanel.eventFilter(self, object, event)
4283+
4284+ def load_settings(self):
4285+ config = get_qbzr_config()
4286+ layout = config.get_option("shelvelist_layout")
4287+ if layout not in ("2", "3"):
4288+ layout = "1"
4289+ self.current_layout = int(layout)
4290+ self.show_files = not not config.get_option_as_bool("shelvelist_show_filelist")
4291+
4292+ def save_settings(self):
4293+ config = get_qbzr_config()
4294+ config.set_option("shelvelist_layout", str(self.current_layout))
4295+ config.set_option("shelvelist_show_filelist", str(self.show_files))
4296+ config.save()
4297+
4298+ def hideEvent(self, event):
4299+ self.save_settings()
4300+
4301+
4302
4303=== added file 'lib/widgets/splitters.py'
4304--- lib/widgets/splitters.py 1970-01-01 00:00:00 +0000
4305+++ lib/widgets/splitters.py 2011-06-07 22:54:29 +0000
4306@@ -0,0 +1,47 @@
4307+# -*- coding: utf-8 -*-
4308+#
4309+# QBzr - Qt frontend to Bazaar commands
4310+# Copyright (C) 2011 QBzr Developers
4311+#
4312+# This program is free software; you can redistribute it and/or
4313+# modify it under the terms of the GNU General Public License
4314+# as published by the Free Software Foundation; either version 2
4315+# of the License, or (at your option) any later version.
4316+#
4317+# This program is distributed in the hope that it will be useful,
4318+# but WITHOUT ANY WARRANTY; without even the implied warranty of
4319+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4320+# GNU General Public License for more details.
4321+#
4322+# You should have received a copy of the GNU General Public License
4323+# along with this program; if not, write to the Free Software
4324+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
4325+
4326+from PyQt4 import QtGui, QtCore
4327+from bzrlib.plugins.qbzr.lib.util import (
4328+ get_qbzr_config,
4329+ )
4330+
4331+class Splitters(object):
4332+ """Save and restore splitter state."""
4333+
4334+ def __init__(self, prefix):
4335+ self.prefix = prefix
4336+ self.splitters = []
4337+
4338+ def add(self, name, splitter):
4339+ self.splitters.append((name, splitter))
4340+
4341+ def restore_state(self):
4342+ config = get_qbzr_config()
4343+ for name, splitter in self.splitters:
4344+ data = config.get_option('%s_%s' % (self.prefix, name))
4345+ if data:
4346+ splitter.restoreState(QtCore.QByteArray.fromBase64(data))
4347+
4348+ def save_state(self):
4349+ config = get_qbzr_config()
4350+ for name, splitter in self.splitters:
4351+ value = splitter.saveState().toBase64().data()
4352+ config.set_option('%s_%s' % (self.prefix, name), value)
4353+ config.save()
4354
4355=== added file 'lib/widgets/toolbars.py'
4356--- lib/widgets/toolbars.py 1970-01-01 00:00:00 +0000
4357+++ lib/widgets/toolbars.py 2011-06-07 22:54:29 +0000
4358@@ -0,0 +1,270 @@
4359+# -*- coding: utf-8 -*-
4360+#
4361+# QBzr - Qt frontend to Bazaar commands
4362+# Copyright (C) 2011 QBzr Developers
4363+#
4364+# This program is free software; you can redistribute it and/or
4365+# modify it under the terms of the GNU General Public License
4366+# as published by the Free Software Foundation; either version 2
4367+# of the License, or (at your option) any later version.
4368+#
4369+# This program is distributed in the hope that it will be useful,
4370+# but WITHOUT ANY WARRANTY; without even the implied warranty of
4371+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4372+# GNU General Public License for more details.
4373+#
4374+# You should have received a copy of the GNU General Public License
4375+# along with this program; if not, write to the Free Software
4376+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
4377+
4378+from bzrlib.plugins.qbzr.lib.util import (
4379+ get_icon,
4380+ show_shortcut_hint
4381+ )
4382+
4383+from PyQt4 import QtCore, QtGui
4384+from bzrlib.plugins.qbzr.lib.i18n import gettext, N_
4385+
4386+def create_toolbar_button(text, parent=None, icon_name=None, icon_size=22,
4387+ enabled=True, checkable=False, checked=False,
4388+ shortcut=None, onclick=None):
4389+ if icon_name:
4390+ button = QtGui.QAction(get_icon(icon_name, size=icon_size),
4391+ gettext(text), parent)
4392+ else:
4393+ button = QtGui.QAction(gettext(text), parent)
4394+ if checkable:
4395+ button.setCheckable(True)
4396+ button.setChecked(checked)
4397+ signal = "toggled(bool)"
4398+ else:
4399+ signal = "triggered()"
4400+ if not enabled:
4401+ button.setEnabled(False)
4402+ if shortcut:
4403+ button.setShortcut(shortcut)
4404+ show_shortcut_hint(button)
4405+ if onclick:
4406+ parent.connect(button, QtCore.SIGNAL(signal), onclick)
4407+ return button
4408+
4409+def add_toolbar_button(toolbar, text, parent, icon_name=None, icon_size=22,
4410+ enabled=True, checkable=False, checked=False,
4411+ shortcut=None, onclick=None):
4412+ button = create_toolbar_button(text, parent, icon_name, icon_size,
4413+ enabled, checkable, checked, shortcut, onclick)
4414+ toolbar.addAction(button)
4415+ return button
4416+
4417+
4418+class FindToolbar(QtGui.QToolBar):
4419+
4420+ def __init__(self, window, text_edit, show_action):
4421+ QtGui.QToolBar.__init__(self, gettext("Find"), window)
4422+ self.text_edit = text_edit
4423+ if 0: self.text_edit = QtGui.QTextEdit()
4424+ self.show_action = show_action
4425+
4426+ self.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
4427+ self.setMovable (False)
4428+
4429+ find_label = QtGui.QLabel(gettext("Find: "), self)
4430+ self.addWidget(find_label)
4431+
4432+ self.find_text = QtGui.QLineEdit(self)
4433+ self.addWidget(self.find_text)
4434+ find_label.setBuddy(self.find_text)
4435+
4436+ self.found_palette = QtGui.QPalette()
4437+ self.not_found_palette = QtGui.QPalette()
4438+ self.not_found_palette.setColor(QtGui.QPalette.Active,
4439+ QtGui.QPalette.Base,
4440+ QtCore.Qt.red)
4441+ self.not_found_palette.setColor(QtGui.QPalette.Active,
4442+ QtGui.QPalette.Text,
4443+ QtCore.Qt.white)
4444+
4445+ prev = self.addAction(get_icon("go-previous"), gettext("Previous"))
4446+ prev.setShortcut(QtGui.QKeySequence.FindPrevious)
4447+ show_shortcut_hint(prev)
4448+
4449+ next = self.addAction(get_icon("go-next"), gettext("Next"))
4450+ next.setShortcut(QtGui.QKeySequence.FindNext)
4451+ show_shortcut_hint(next)
4452+
4453+ self.case_sensitive = QtGui.QCheckBox(gettext("Case sensitive"), self)
4454+ self.addWidget(self.case_sensitive)
4455+ self.whole_words = QtGui.QCheckBox(gettext("Whole words"), self)
4456+ self.addWidget(self.whole_words)
4457+
4458+ close_find = QtGui.QAction(self)
4459+ close_find.setIcon(self.style().standardIcon(
4460+ QtGui.QStyle.SP_DialogCloseButton))
4461+ self.addAction(close_find)
4462+ close_find.setShortcut((QtCore.Qt.Key_Escape))
4463+ close_find.setShortcutContext(QtCore.Qt.WidgetWithChildrenShortcut)
4464+ close_find.setStatusTip(gettext("Close find"))
4465+ self.connect(self.show_action,
4466+ QtCore.SIGNAL("toggled (bool)"),
4467+ self.show_action_toggle)
4468+ self.connect(close_find,
4469+ QtCore.SIGNAL("triggered(bool)"),
4470+ self.close_triggered)
4471+ self.connect(self.find_text,
4472+ QtCore.SIGNAL("textChanged(QString)"),
4473+ self.find_text_changed)
4474+ self.connect(next,
4475+ QtCore.SIGNAL("triggered(bool)"),
4476+ self.find_next)
4477+ self.connect(prev,
4478+ QtCore.SIGNAL("triggered(bool)"),
4479+ self.find_prev)
4480+ self.connect(self.case_sensitive,
4481+ QtCore.SIGNAL("stateChanged(int)"),
4482+ self.find_text_changed)
4483+ self.connect(self.whole_words,
4484+ QtCore.SIGNAL("stateChanged(int)"),
4485+ self.find_text_changed)
4486+ self.connect(self.find_text,
4487+ QtCore.SIGNAL("returnPressed()"),
4488+ self.find_next)
4489+
4490+ def show_action_toggle(self, state):
4491+ self.setVisible(state)
4492+ if state:
4493+ self.find_text.setFocus()
4494+ else:
4495+ self.find_text.setText('')
4496+
4497+ def close_triggered(self, state):
4498+ self.show_action.setChecked(False)
4499+
4500+ def find_text_changed(self, text):
4501+ self.find_avoid_moving()
4502+
4503+ def find_get_flags(self):
4504+ flags = QtGui.QTextDocument.FindFlags()
4505+ if self.case_sensitive.isChecked():
4506+ flags = flags | QtGui.QTextDocument.FindCaseSensitively
4507+ if self.whole_words.isChecked():
4508+ flags = flags | QtGui.QTextDocument.FindWholeWords
4509+ return flags
4510+
4511+ def find_avoid_moving(self):
4512+ self.find(self.text_edit.textCursor().selectionStart(), 0,
4513+ self.find_get_flags())
4514+
4515+ def find_next(self):
4516+ self.find(self.text_edit.textCursor().selectionEnd(), 0,
4517+ self.find_get_flags())
4518+
4519+ def find_prev(self, state):
4520+ self.find(self.text_edit.textCursor().selectionStart(),
4521+ self.text_edit.document().characterCount(),
4522+ self.find_get_flags() | QtGui.QTextDocument.FindBackward)
4523+
4524+ def find(self, from_pos, restart_pos, flags):
4525+ doc = self.text_edit.document()
4526+ text = self.find_text.text()
4527+ cursor = doc.find(text, from_pos, flags)
4528+ if cursor.isNull():
4529+ # try again from the restart pos
4530+ cursor = doc.find(text, restart_pos, flags)
4531+ if cursor.isNull():
4532+ cursor = self.text_edit.textCursor()
4533+ cursor.setPosition(cursor.selectionStart())
4534+ self.text_edit.setTextCursor(cursor)
4535+ # Make find_text background red like Firefox
4536+ if len(text) > 0:
4537+ self.find_text.setPalette(self.not_found_palette)
4538+ else:
4539+ self.find_text.setPalette(self.found_palette)
4540+ else:
4541+ self.text_edit.setTextCursor(cursor)
4542+ self.find_text.setPalette(self.found_palette)
4543+
4544+ def set_text_edit(self, new_text_edit):
4545+ if self.text_edit:
4546+ self.text_edit.setTextCursor(QtGui.QTextCursor())
4547+ self.text_edit = new_text_edit
4548+
4549+
4550+class ToolbarPanel(QtGui.QWidget):
4551+ def __init__(self, slender=True, icon_size=16, parent=None):
4552+ QtGui.QWidget.__init__(self, parent)
4553+ vbox = QtGui.QVBoxLayout(self)
4554+ vbox.setSpacing(0)
4555+ vbox.setMargin(0)
4556+
4557+ toolbar = QtGui.QToolBar(self)
4558+ toolbar.setMovable(False)
4559+ toolbar.setIconSize(QtCore.QSize(icon_size,icon_size))
4560+ self.icon_size=icon_size
4561+ if slender:
4562+ self.setStyleSheet('QToolBar { margin:1px; padding:0px; border:none; }')
4563+ toolbar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
4564+
4565+ vbox.addWidget(toolbar)
4566+ self.vbox = vbox
4567+ self.toolbar = toolbar
4568+
4569+ def add_toolbar_button(self, text, icon_name=None, icon_size=0, enabled=True,
4570+ checkable=False, checked=False, shortcut=None, onclick=None, menu=None):
4571+ button = create_toolbar_button(text, self, icon_name=icon_name,
4572+ icon_size=icon_size or self.icon_size, enabled=enabled,
4573+ checkable=checkable, checked=checked, shortcut=shortcut, onclick=onclick)
4574+ if menu is not None:
4575+ button.setMenu(menu)
4576+ self.toolbar.addAction(button)
4577+ return button
4578+
4579+ def add_toolbar_menu(self, text, menu, icon_name=None, icon_size=0, enabled=True, shortcut=None):
4580+ button = self.add_toolbar_button(text, icon_name=icon_name,
4581+ icon_size=icon_size or self.icon_size, enabled=enabled, menu=menu)
4582+ widget = self.toolbar.widgetForAction(button)
4583+ widget.setPopupMode(QtGui.QToolButton.InstantPopup)
4584+ if shortcut:
4585+ widget.setShortcut(shortcut)
4586+ show_shortcut_hint(widget)
4587+ return button
4588+
4589+ def create_button(self, text, icon_name=None, icon_size=0, enabled=True,
4590+ checkable=False, checked=False, shortcut=None, onclick=None):
4591+ return create_toolbar_button(text, self, icon_name=icon_name,
4592+ icon_size=icon_size or self.icon_size, enabled=enabled,
4593+ checkable=checkable, checked=checked, shortcut=shortcut, onclick=onclick)
4594+
4595+ def add_separator(self):
4596+ self.toolbar.addSeparator()
4597+
4598+ def add_widget(self, widget):
4599+ self.vbox.addWidget(widget)
4600+
4601+ def add_layout(self, layout):
4602+ self.vbox.addLayout(layout)
4603+
4604+class LayoutSelector(QtGui.QMenu):
4605+ """Menu to select layout."""
4606+ def __init__(self, num, onchanged, parent=None, initial_no=1):
4607+ QtGui.QMenu.__init__(self, gettext('Layout'), parent)
4608+
4609+ self.current = initial_no
4610+
4611+ def selected(no):
4612+ self.current = initial_no
4613+ onchanged(no)
4614+
4615+ def get_handler(no):
4616+ return lambda:selected(no)
4617+
4618+ group = QtGui.QActionGroup(self)
4619+ self.buttons = []
4620+ for i in range(1, num + 1):
4621+ btn = create_toolbar_button(gettext("Layout %d") % i, self,
4622+ checkable=True, shortcut="Ctrl+%d" % i,
4623+ checked=(i == initial_no),
4624+ onclick=get_handler(i))
4625+ group.addAction(btn)
4626+ self.addAction(btn)
4627+ self.buttons.append(btn)
4628+

Subscribers

People subscribed via source and target branches