From 6f3cc9f63d4e1da531bb3f720dd80df4a77cfd4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Tue, 29 Aug 2006 10:14:33 +0200 Subject: [PATCH] Initial import. --- COPYING | 340 +++++ INSTALL | 0 data/compile.py | 4 + data/images/CoverArtShadow.png | Bin 0 -> 19697 bytes data/images/Picard16.png | Bin 0 -> 485 bytes data/images/Picard32.png | Bin 0 -> 1583 bytes data/images/ToolbarAddDir.png | Bin 0 -> 803 bytes data/images/ToolbarAddFiles.png | Bin 0 -> 1001 bytes data/images/ToolbarAnalyze.png | Bin 0 -> 347 bytes data/images/ToolbarCluster.png | Bin 0 -> 786 bytes data/images/ToolbarListen.png | Bin 0 -> 978 bytes data/images/ToolbarLookup.png | Bin 0 -> 1393 bytes data/images/ToolbarOptions.png | Bin 0 -> 1151 bytes data/images/ToolbarRemove.png | Bin 0 -> 292 bytes data/images/ToolbarSave.png | Bin 0 -> 1150 bytes data/images/ToolbarSubmit.png | Bin 0 -> 1563 bytes data/images/analyze.png | Bin 0 -> 723 bytes data/images/analyze.psd | Bin 0 -> 23957 bytes data/images/cd.png | Bin 0 -> 931 bytes data/images/dir.png | Bin 0 -> 498 bytes data/images/file.png | Bin 0 -> 609 bytes data/images/note.png | Bin 0 -> 419 bytes data/images/reload.png | Bin 0 -> 1364 bytes data/images/remove.png | Bin 0 -> 721 bytes data/images/remove.psd | Bin 0 -> 23051 bytes data/images/search.png | Bin 0 -> 1267 bytes data/picard.qrc | 24 + docs/dnd.txt | 7 + docs/todo.txt | 21 + picard/__init__.py | 1 + picard/album.py | 103 ++ picard/albummanager.py | 67 + picard/api.py | 32 + picard/artist.py | 26 + picard/browser/__init__.py | 0 picard/browser/browser.py | 122 ++ picard/browser/filelookup.py | 123 ++ picard/browser/launch.py | 117 ++ picard/component.py | 293 ++++ picard/config.py | 90 ++ picard/dataobj.py | 45 + picard/file.py | 112 ++ picard/metadata.py | 81 + picard/parsefilename.py | 88 ++ picard/plugins/__init__.py | 0 picard/plugins/cuesheet.py | 187 +++ picard/plugins/mutagenmp3.py | 59 + picard/resources.py | 2469 +++++++++++++++++++++++++++++++ picard/tagger.py | 169 +++ picard/track.py | 44 + picard/ui/__init__.py | 0 picard/ui/coverartbox.py | 61 + picard/ui/itemviews.py | 314 ++++ picard/ui/mainwindow.py | 381 +++++ picard/ui/metadatabox.py | 121 ++ picard/ui/optionsdialog.py | 59 + picard/ui/tageditor.py | 222 +++ picard/util.py | 49 + picard/worker.py | 121 ++ picard/worker_.py | 85 ++ tagger.py | 11 + 61 files changed, 6048 insertions(+) create mode 100644 COPYING create mode 100644 INSTALL create mode 100644 data/compile.py create mode 100644 data/images/CoverArtShadow.png create mode 100644 data/images/Picard16.png create mode 100644 data/images/Picard32.png create mode 100644 data/images/ToolbarAddDir.png create mode 100644 data/images/ToolbarAddFiles.png create mode 100644 data/images/ToolbarAnalyze.png create mode 100644 data/images/ToolbarCluster.png create mode 100644 data/images/ToolbarListen.png create mode 100644 data/images/ToolbarLookup.png create mode 100644 data/images/ToolbarOptions.png create mode 100644 data/images/ToolbarRemove.png create mode 100644 data/images/ToolbarSave.png create mode 100644 data/images/ToolbarSubmit.png create mode 100644 data/images/analyze.png create mode 100644 data/images/analyze.psd create mode 100644 data/images/cd.png create mode 100644 data/images/dir.png create mode 100644 data/images/file.png create mode 100644 data/images/note.png create mode 100644 data/images/reload.png create mode 100644 data/images/remove.png create mode 100644 data/images/remove.psd create mode 100644 data/images/search.png create mode 100644 data/picard.qrc create mode 100644 docs/dnd.txt create mode 100644 docs/todo.txt create mode 100644 picard/__init__.py create mode 100644 picard/album.py create mode 100644 picard/albummanager.py create mode 100644 picard/api.py create mode 100644 picard/artist.py create mode 100644 picard/browser/__init__.py create mode 100644 picard/browser/browser.py create mode 100644 picard/browser/filelookup.py create mode 100644 picard/browser/launch.py create mode 100644 picard/component.py create mode 100644 picard/config.py create mode 100644 picard/dataobj.py create mode 100644 picard/file.py create mode 100644 picard/metadata.py create mode 100644 picard/parsefilename.py create mode 100644 picard/plugins/__init__.py create mode 100644 picard/plugins/cuesheet.py create mode 100644 picard/plugins/mutagenmp3.py create mode 100644 picard/resources.py create mode 100644 picard/tagger.py create mode 100644 picard/track.py create mode 100644 picard/ui/__init__.py create mode 100644 picard/ui/coverartbox.py create mode 100644 picard/ui/itemviews.py create mode 100644 picard/ui/mainwindow.py create mode 100644 picard/ui/metadatabox.py create mode 100644 picard/ui/optionsdialog.py create mode 100644 picard/ui/tageditor.py create mode 100644 picard/util.py create mode 100644 picard/worker.py create mode 100644 picard/worker_.py create mode 100644 tagger.py diff --git a/COPYING b/COPYING new file mode 100644 index 000000000..eeb586b39 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..e69de29bb diff --git a/data/compile.py b/data/compile.py new file mode 100644 index 000000000..a50dd9252 --- /dev/null +++ b/data/compile.py @@ -0,0 +1,4 @@ +#!/usr/bin/env python + +import os +os.system("pyrcc4 picard.qrc -o ../picard/resources.py") diff --git a/data/images/CoverArtShadow.png b/data/images/CoverArtShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..4d03cd2c127d11cdf7a9c230ecec1c8196fd49db GIT binary patch literal 19697 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

pPQe>b_k4 z=!?Cvk0#%1VB+t8apu6sme)-*JN!!lesMQu<3w6|IM={``UU7^;XV7{gAaad7zkDQ zxB=voe-%Xda{G^N%vsvo+gJIS=70dtB?vafU=FXKbi#0p6feRO#8CU?kp5@n=C?AN zUvNGCS1(t;&P7-}ehCMrtGN8{4PO$S|LErS%faR!|9=19o=+2k^9(`i{et__LH_49 z&maLh2mO2A{!8P3Y5ffKOTYJ@g--7vmO0SK^Zx`G0A4X9sa!fB|VK zb#SPI!okfc4J-!Y6Kw!UF-YT;>jxNi?VCk>7$5_XMtglphEvDyGl0?y2%`hW|Hl$h zL>aB-gB5}T4CMSf_m84z00k&0On~|jF4(Z|9)oo7QLtuY@cri-hUwF%!}*{x=upMc&owh2)k$Q|3k77NBj+Q}W zT04v*>M+b;r%pxj1VJlS1XK`_Lry_LxHJ%xkfd)-r6>}#L*HzYfB)=$-+SLXb}{UK zHXJ@15^^U5>&)37YZ^-3C#hD&Y}%E&f8_wtorsAN&ZuH?BK5 z`qZ|z+3*D;(LJQTr}sp7$L<}?{iYF&Bz}bhe18RfVc5$2D_K^n71rn#6q~c7QS6%y zeMjPnsot|d_sY78w~k;~rLl;m?g4F&?m`-(=6wdIuzo#(Er`)5b|kVHAObY_4&sd5 zM-y1`06k5qw!W}2C3>xc<4Obu`kXC1I$@1gU6}`h*t7bnK_W)x(=yCPTS=9|p&ZfZn2tM$287^PP9>OHCWSaC7v_m(`@lPz2d0ll%HL zEIPGiu@VX~6Bb$>-GXuWeDO4&Ad#~i#}P>~5h6f}k+nbES)k8rU7-jp`kGyF{@*U0 zf)M^!P510+BG@dsqscC4zI?m>R9=BlDD_c>Dm_$ewg}Pa2uDznzyu<|kbr0aJ$Bjl zF{kORjL7CLeb)JhEIOg`;JZ1ou2yxy{*j%b`GqYDlZxOXC_1^+fA-8}Vi!-6WFdrX znP_aS24%)l@<4hF0YCi%hUDY-;=<(%W=R?!>xwG7*mN>}iBjUs);%>kJ1}#$g{1vn z+uNsU>!=k9#2hxCBpGm{NIZG6@?ATrD!G~akD#lgy?;)62QyhP0%1(Dwo+ppviN&D zLIF}c7{2Y7iWcp_`O=Q3M*jS;I4{rOH>m}PfQr;h!d)CP$(CY3&p3K_lQiSe&&bWcggFryB?UHJB{Ll^T-34<`m~_|RvPkVPX=Tl<696m8bU z#&IK{lHAp&m$~weZJuo~S`KatVc-}8$E9+<$eq_v+nbP4*3>z0{zgZ*TD&OAGbUW& zKtq?xJ2l;p+H}5OMY8RnCm*k(B+5)wbJ?ue1)i9}Tv6NO~i5X?uenUxGgpZda<&##Ql2e`jM^j1Kyg+ZqaU{ySsiBhyUIBhRT_3vs68MYJ z5Kf}}lC~Q)J)2^D7R{C2I27s3XC!2lQ}>yzA|Y#k;;cX~_L4mv_9dbSoVWype5b1G z>$K8C2{Y!*bcK4I7cANLc|d!&zPPdrB6D)%e)GZP^7`J^_NN$uV`d8+Kde;s^|#w6 zphiXJju6a&oja^x|FjAjywn1=im zg289cS~P>V1W)4&exDsB? z?Z;Uco92f~({k;k3lV|hEgw(KzT9Ld&(8^P9HuajMYECVpBTde#Hnl4Q=|^? zs4`=?rbmDB&$dIqJ;=;&SoWTrLr1&Us+&7?ehR*y%;888Z@>Kb2)OjEK2Fgy+@`NNmv^-_Hqry55o)E7AaI!ri^nvMQ$;Y*oE+$; zAxrTc4aOi5l&leo#M<3&Sekq_^Hkm7pb;A|1q6t8uJF$-YN1A!!F=vkhpQvg%iV#` hnaEd@x3<3p7yz?OXo~sN)aC#H002ovPDHLkV1l}d@dE$= literal 0 HcmV?d00001 diff --git a/data/images/ToolbarAddDir.png b/data/images/ToolbarAddDir.png new file mode 100644 index 0000000000000000000000000000000000000000..eaf4be873c63a5cb5ee2f61d2d34ae716d0728c7 GIT binary patch literal 803 zcmV+;1Kj+HP)ScD^+j%uo^mMtvIBZL4UP=taglKVvK$&#eLnW<~QR$x_CCjv{0XYB_Z)Ya8v z7{-oulu~Xl1@Ju-3TlTNU1f_)i=<>ZlWTRXWo>^2RV}#z(iPpDx!k>pq1hRHZw2Nf zkyWj|t%GPZ%G)`(b>-r|JbdrraH|!FWHMQ8;l~2OP>`7JBAM3k`D1$mZLCs>XQXZg zeBp3Nb2Yh0#1pW(zZVyctjM%(@hd}aPrxut-S77^ITxg}tp&M9&`Nt5iB!gHO1!#h z1<*BJlSq=LimSGq)r5wWAdw&itW)LgLWrW;x<|0vEcgOp4e(h398SA;c{y~nrTIAa zsyh6U6lvWoc#0f_K#;o&M4oSBw}Z|ybVD*R{q5%)wk0$CslM1Yhi(WLO_ hZ)E3T7J2jE#BY~zIS>GK8g~Ey002ovPDHLkV1llKYW)BJ literal 0 HcmV?d00001 diff --git a/data/images/ToolbarAddFiles.png b/data/images/ToolbarAddFiles.png new file mode 100644 index 0000000000000000000000000000000000000000..7c4ee7923234f46445b31d621fa802ac43c0e45c GIT binary patch literal 1001 zcmVyNf19nM7 zK~y-)wUu9JTU8v#Kj-E)y-9A?rrEN#>#B1_r|mjq%47R3Vz`ne*Avt zet*Avet(YQJ~;Qy+0!USJ?$X~t)Nf{f(W0y`NmuCw>*5|(s%M8C=?2E?)=$C1op_t z$Z>;rSt-kRjv^cmS-R>0;Cb3t-v`DR0JN?W3+9Dr~nOkaO5C!cwid_Kp(zyL>% zJceZjd?F)=NJ9p}wrx`B3|i|ZV$ZC%I~~O1djW_iIyrgbIZCAxi;Ii=K0b~U3N^(@ zgP=Va6+vn^d*t=+bC_7O<(EfGZsK$eZ6c%^Zk#% z(vygj-|`RvBZ4ttjMNsj25Gj@(1+UtETywmV8#ZBxRLQ&Hx>@{^c}|C*H0>6VO!VQ zv({x&n_<)?Rk!)*a@)|Jket1_^vmd2+V($YvREvh>VD)PxuPbWD>uzV0rAJ8s>!~t zW&;pK#SPA?DjD4qH79x#*37EjiMHmozN>%D-yK_`qn)Z}n43+m z{WLoEb)9(c^z?M3yQkZ_^5^E=84>>)XxddHQs1Vvz(&SnbLApn0mcS4vf1qQYg1Dn zMcmmBc3Wop&h;Bpm%ca;xIm%)cMcG)Dczda2Y~<;U=zpzTleZqtL2l?8m9Rv_+Ri3 Xs5#MO@?MIz00000NkvXXu0mjfwk_ly literal 0 HcmV?d00001 diff --git a/data/images/ToolbarAnalyze.png b/data/images/ToolbarAnalyze.png new file mode 100644 index 0000000000000000000000000000000000000000..f1fdbba689161f66d0f32058e7f8df4ebc974f41 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fEa{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i>3^>lFzskoK&=l_3uW?cqh=H3G< z4sJ1@kx_8pbDeC*|K^NUQhzk=eXwsa`{f@PV6(O~w?69iH+h%lA7_dd@d!joXuW5f zQvR2Jk*Cp&NWUdcyDG(%JJ>#_wkA9hhzgU?*e|W2AL6*`V1~)6?wL;$#X6F%p8xbN zig}v>cT2Q_c2CxVH5|Jt*v*V1TDC|@Ok|CFeOSv+`j7y%HNQgFpN{O?)dF r9rj(U7wGkuf1FWilV!lhz+u3^tef5IzGGqn(BllAu6{1-oD!M&UXe=Q&*qz^xWoKXK^_>tBIcaVmH~a0k-^}bW0JtbDbNkM%H8_Rm-P`xC zMe~M<*UNgnz7~x}9S6qPKle>L9*?2XXu#au+$WEiMj{btwOZr>Ogl2QLM;-8A${La zwuk_+SPTT_O{DcGW(ew8p#a}&HK?7OKp~&E3#WmQf$e8A8TeMMLiK9}(i@K@hUa;b zz2~0`U?r7;3(L!LxN>wP9iMJ($$5G{9v;Gz&73_6&8I&!<+ttCls%CJRt$oHU}2jv zbvhQZfFV;1Nd=`=8{;r!(*b}=zE zQY^&dR^$B6jtyQSk899u@1BeR2$y>01dJVl04wo=#v zF&cs&_33hc^zZ?EDVL#qd@PvWgRr24eg^LN^>-BiM-R7N6hj+VOIVS7(`&?|!hr=NsjYeGjDfnbE z;j@qUS@2S+#0BOL+Gd`vQ@Zs}>7VygG`j?RR@gb+p7~GQiLjxt?jHdL0H%%WWmBVz QbpQYW07*qoM6N<$f(T1vdH?_b literal 0 HcmV?d00001 diff --git a/data/images/ToolbarListen.png b/data/images/ToolbarListen.png new file mode 100644 index 0000000000000000000000000000000000000000..1b2f30e65f28517d2f5cecb34bdcf81b684fa889 GIT binary patch literal 978 zcmV;@11b zl}}7vMHGj>Gxt6plprmoB!*&LxYMW=iW|F7m+C?-Exy!RQoyEGQ8cVS*d`{Jsx65^(x_+(@_2LS-s9r^p}-?)jh*CVPG-*i&Tr1l zoe@>#Ry1=y>Ql1T$#z36}{O*PHE zHMu!I=j?d4-in9-L{X&ic>Ke%vbBu|UVf?g>{mkt!8O0#{oa=5p0gLbpZj`COYbX2 z^y7QC57hk7UvKk@RW;Vp-r;w&clbc8va+)A@at_Q<>eKtFUjahMBd!GuXo*OSE3Iz zh?gxq4B&5X*j5Hy1t={o&3|*S^-#(B^7T09R`BXtdRvXksj=>z<8>`P=N1Ba8u&;e zhK(_`z_$hvAP!JfRZUe@H2@nbHsHdL*|}L%6>BY!`I!X$C6cfqvs5#J==}gHGA2sx zk{Sa{P5+wruS{MBAP8)>4;BM8x}YMD0)&JUg4qv1knIF-WpeTs^T@?aMPpkT8J03wwqL}VBs)bJj}Tm%r2T1CcS z**Tt1%`=}$;hZC#wpeSifkgoqEN-Hx42|A#Y3PyUIbYN~Wt8tSHKtZYGvNNd!M}lG zfOI-d5LldZ3=R(b6Ge-gX06Tb9V18G&eo9U(uQ-Omd|q*X z-{1nkiOv(@@ehuL0MpY`U-S?3&#x&iK~Vx1u;PM^uXX2+NHU9nT zpQW?2v!1oqIOoj7#Kc1Vj%Q|0^?cI2>8?#hfem08dbB(7B|u%%r%z(!p;$@mf!v&* zExHecxe{jk;(^c3bTlNk%~ju7-4+A^t33*8!o32G=a1IskCmUjA57M~Y_goWOFv%j z+`Re0LomkeZ*$aO=i|KY{`7nc`|UXjWS*8l(j07*qoM6N<$f>P$u A1poj5 literal 0 HcmV?d00001 diff --git a/data/images/ToolbarLookup.png b/data/images/ToolbarLookup.png new file mode 100644 index 0000000000000000000000000000000000000000..e86bfa3bee5c26b3372a354df03c87ce1d5d64aa GIT binary patch literal 1393 zcmV-%1&;cOP)LRSOQViN>K$3j}jFka4c*?6e7VUFeWBs@)#%Mj6I&YuX9+$F%Hm5 zU2ryMasKCb{`$^$z5~C|5dUj&X!ow|z{9{spliPVJTMNt`SSi(Ui-hm^T22B+BkUK z{hRO07u!SWI2sTnNyK!mW=BUyTOWM*pG&~gKX-um8R)*dHV$rkN!U)YSR_d^{{D}@HBOv3@!HG#Um04=Q9p)0@W6wQZ`rc7{q&hLqFkP! zHa$aX3{q(vM`KL}WF&Efl7fMOLHBaKzP@|;jXmRIpT6}I@X+pE+k1O@pW3$V(e^LC z_>$A#ogp)jS+GLlx*m?J!KS#%f=vNKnkKAUw_ct)HCgKEz4`Q~^-GO~*sKcWuA- z-rxRd&FVF}QaOvY2BjoYNwUnaw4(#h_wcSY(*QzxTDs?%dhCW5jkh7SNyD$LMzasi8Ku` z5rskd39*_u3G^Lg|-)ebI*W?k~td92*Vr*iIkGIIKp+@Yyq5e-S29(+R8%UlO}o6 zT!ImuHOK^TvVKtyCJV9ki3fadPBxIr5%Q*xpXD*hV1;0EZ|R zG#X8UAfTh8gMS@*3n}HBd-v|WcuiJ}j*cC>{r20$T(fb{s=n0=R1p9HOYjC!-_0bLbGWv$F@EfBuCX)oQg4H0Hr(anQ?o`?Uc& zpU($-_B{2jFtew7`n(>?!}nb)00000NkvXXu0mjfianjV literal 0 HcmV?d00001 diff --git a/data/images/ToolbarOptions.png b/data/images/ToolbarOptions.png new file mode 100644 index 0000000000000000000000000000000000000000..cc91d65958ba457a0cfe5025a759dae3d10dbaeb GIT binary patch literal 1151 zcmV-_1c3XAP)@kuE^EJD#UMz{kifzpjVdVcK+`YLTID6N3@xlY0c&OO%pF)wFLPI*ha4wkB`t7X6;ggCCltyU|N^uU4CD1seb zpY5lor-y_2%L*;&@r3|JU`b3&%&|8Qmt%;DeHWx85kJA>rZ7W>z_g~{^n#QukBwAZr zY3hvS=Y|)tzH?@t%5biivuE%W%^xLmsbQuS!kha{Vq2)U~n863@#e zMby;P=mQ-EW*0SlICRhUjbv_KkD`q6Ny`;hrKVA_BL%a`$ohaP|I#&1NG$E|xog-sb){3x}TEs9+uX`tD2)?S6)~i$CyV zPd^xp%m#xYugbE_%7<4YNz#IFLnQR*YgYCb=W+VGcDnio$+OvTxo#2gPXpld`4qq3 zpDoKWD^@)M5Q4|W#f9JoJw?ip$1A_}EPJ+RbLz}R20dPiic4_0ZsB#`q@!QO7#!VD zUtfRMZnxhU85yza%4ht34jw!}Wo0FRBLr54JdPt}Pg7cuN$a`G40^oSo-3RO4UG0$ zrWAJ)umV`=bUFi0r?Xg=Wz4B*G&VNk^Z7!ZFzR>d>(ZE2HAaU9AAnB$-d3QvE(PX< zBm;)d&dwk(JTWn`x1pio>#?yhR8_qi2n6h*5n#odl&$AGyuEsZ?oCb5(XSF`m@H6}Q^x@% z%=bD_|D&jL@SqNz7wN5szO;;u4EO4FLSpRN>#Y?d;V}(^N>O60&RrUy{R52l-tl6f R>M8&L002ovPDHLkV1i=@C_MlG literal 0 HcmV?d00001 diff --git a/data/images/ToolbarRemove.png b/data/images/ToolbarRemove.png new file mode 100644 index 0000000000000000000000000000000000000000..4c018915df798d5c722eb28e8a17ed268d4bcbb5 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fY)RhkE51-NdmlLE!rR$#su6|Es;(=ArUw>XPUa(|$9} zVEr}aXx_xV;z7$Zx5b`adDWvK>P)FowHD*GpAVHg($6dv@_VkGwjgUo;|fKt-lmR= zD;9EHK6&Hs4P!m?pN178A6Nae-_G~9jNkUTZ-dkZfyW{eTcw!pz0!WbcPGj-<5A<~ h=?rJrADJl5zdq3Bo=Vn5Z=mBDJYD@<);T3K0RY0qZLk0U literal 0 HcmV?d00001 diff --git a/data/images/ToolbarSave.png b/data/images/ToolbarSave.png new file mode 100644 index 0000000000000000000000000000000000000000..a94e0eab97def13486256451f08973e0b68f9ad8 GIT binary patch literal 1150 zcmV-^1cCdBP)3|zoo&0*WtZL7Wm!I!A_dx#R*N546CW@_G)8>T7t{CvHAq!b z1NtCF0vL;FY#&4)G>VeQiw|fFF*e4CG(l9XCA76R#n#=n({{gSXLo#PcWkLpO#CM| z=jNVs{`Y^+Ju_Ee0iJuK{rx`@m5;`zw2Fo6lFdl^T=Bk@@^5XOuYUF&w*jFz>H46p z_Uw=0i>o6Wv!RtfF`g5hRb@``&$z}^I?MFc^Fyg*#t~Nf+q+*o{qb_dmLlo-{=nH) zTOM!^5A@pyhlgz=zYmHd6O-6VD^Q$voZfZHbh=P>J?7lG>k-eTi{Jb@a4TXF;D>9@ z<9DpE4kre_y4vWy@N`edKJmU#@6O!J_1V$ED@JrSPCS`F@dc25LB}t#t)IU1`Yw4{ zVl^eLv*Z&q_pcv)=;({@eFAXo;74CJ1V@h~R8>gMPN8K|0QiFIMX#)lOlaZmWo!J@ zp%*?6J90nIs)fS~oeoLh+o=$%H`Omna;N*4_-mZX!t{-N?VWFTodB=`1k2)Iq$cg% z$Bw?aWakIlx|XbEJa;iV)We4-7wO>TLkEuoC(Kf$#_iV>x0h6E?zqWh(i|pP`k%SQ zW?vLHGCD#snZ)b$vj0G9t*IDT>-Pr$NF)=uWY@ncEy5@i0C?=kX>?8F%;7x%D2hTX z7K;Fv#rfFXbzAF6r_%@srqb$$9aJ~$pj`0+kj-Z1Y&y=m+Phg((*Qt;R06;~P4@z9 zHcJ6KTv=JQNY%T~H#6|l_W+EI4uN5i*K=gjN#Zjq07F-Ld1v2tGbb1f0lWer?my64 zD@i5T?RGpKj~Nv3hUjS7Mt^S)72Zk;hB03UgEF^=fy)=@XxT=nG6H}s%k$;%u>U}7 ztq4R``uqT>s){Vj$g+$miiE2+(7CtCBo_q%S9t{kmoLz{w~27o1~Xn&=T1>xRt^vm zfz5Yr+(a&yGptq%Gcz-&s){5@$g)gLq@Gi4&Gh&7;9e16xbG6D+M20})SHB=s*=y^ zBoYZ@?V7a!O=32i-QxHAak*TAuIDMt-*_=WRaGiV19UvwK!0x!Z#`2_MQOnF0p#;K z2%sp65Dcy&lgXA^9S+CtNF-vm%gvxDjeLEwaoOKxb#*mPr=!IR5R1i_oSeLQ-xe?K zHhf<1Tx%9T5HwB0GC5-yhuRaNo%d_<$sCALT` zF5FGmbu1POhG8HI7P8qanxA?pY7?c{ zKeVQ`F_IWf+B8b4BB&e{M3JK)_p-3Mz}~aR>@L%{V>Q~O>YL2GH{X2k_rCA@{oWf& zk|f-3Z-4dCPb1!>^%HhckB6E{AqhsUr+bFx@AnVxJJo=vXw-e+!^d~!oxYKN&6GJm zm^Q;mdqOmy9K+M&9uanb5YFBUgFYdkOpojNunl34@YZFEQ! zsjwKLv~hZ*%*jR^&%qy&Fx1xt!8YPwG^1@}<;T_M9tTWEAAj}n-=-MYVQ>GRy-O3C zH`g6_i(Zx1QXX=Rxh(^olFjXbNAM!fI1?IUsoiXUcKB3tnTXf5I>S=> z<*p+qqqeVi|5{U!YWd9Ta8QEV4l&@9Cm2&R=md>uo)ps$KM^>FcXnz06WtY?E3FTI z{APFMfk;S%g5%})NH~mu;D$jTztAh_wmc4)t*)*{YK-UH-2wbqQBeU=6j4}MXxhGg z`|$rw3dApiWw8DcTWxJE>~=eJIvr@523uBEhNjQ2_GM>h$PPZA4+RAUMOPXdoA&Mb zE)k1X-UIUs;8pj^$|yLwe|1fsl$y8ZP}+hfanyDPNSbLvbL$yc#=DW@*P*AS9{PkNOyA%7q>p(f9{o3) zaVVz-Rc8he4Es?wKY*(5_v38M`AUbwkwEi2zxR4eZ>4!e#PX$U;dI?ad|Wai(G4Z1 z#yl_k0GvbtZLD4fZQ67LlT&_hu^hY+8mkt>Am3<5-S59(XmD@`Llki3;`t6F7-oT? zSlA|quwedk2m}Ri3MHv41!qqi?uG+M$yg|-|EBH~GE#IH8S`LXh8_w9gMnceveIJF zZw(;8=nLs9m)pW2B7CJ%MQ$}FC(Y>XYXr}0VYYN2E-ndbRSdEOjU4$a)X&&Zl#E-q z?U)k65WON!{?U)Hf<-}=26pQxZnk%U<~W7SFheU4j)Y(`?KPv+5Je=s1~1VR-Zw z3KqW%r_&0D!-^m&M|V#>Bv}!D2##(r@ZoCb6l_xgu!PH=At%NI=;&=>LJm57P zf+P!vGl=!YCY-!zCn}i+tyWV~nCR1#mP6_}6W6Z)hLO=uNaX74Z$^7Z4H~bVLP}CL zUVkYUW0PLIaj+F<8pm*@bAs@~U~g3$T)q%;bB&}7jGQ5@)zNH(tPqvi*mw^T4YQ-$ z8Vj;k!!#?8Y+niKX}Ji6gRo8sn47FaW|9u+1|HkiWnfm4mW)-P7z#b@cR>C!5Xp(i zl$4ZaTgFDRolY+SSctiE3do9NA*TfjmP0`Fz>tte7Mn(Hk`+SGMdYPGl=M&-2zn!U zc1bb{7a4J`*@khC8u>*pfK@8FJ^72X%9luZ>)ikV N002ovPDHLkV1m#0(hvXu literal 0 HcmV?d00001 diff --git a/data/images/analyze.png b/data/images/analyze.png new file mode 100644 index 0000000000000000000000000000000000000000..ce443f555f235d7fcef3372512d3312d14cd59ac GIT binary patch literal 723 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 T?CYo|kphSWZ$~Bk#pwS5(%k_4 literal 0 HcmV?d00001 diff --git a/data/images/cd.png b/data/images/cd.png new file mode 100644 index 0000000000000000000000000000000000000000..760de9386f7ccfd2ecaa2680aaa70cd3988e16af GIT binary patch literal 931 zcmV;U16=%xP)f8Te``8a3JK<82zC}l1Ui;A@iO=+SV+Qe-&n%0z3b<-GxwJZMs zjaw+V(}>ulx@_2}MWNWaKqR&-Uc%M{weXh6gVL z9|C4u)YEKu$l7Qz=Cd1n9bsZQDpGfhiuaqv73Aq2kf3qVLY1+Vt8ZO*9GHhlhtgu%-jk+uPg8bUNJ%(4J~%cW;NDo*wb}XJ43rxv{aq&kuhjmpzB; zxYr%ELTU5m3q9v!u~jWHP3d631}}f`Bj#0kABKOeVwJ+#~0gU#Dm8 zj*j01H0`+4#X{-ZXmcbxJ3Et0rP`HgnzE&(1T` z=fK?B+ueUcgw&mTx8?fP8#5oZ_IS4UlwPlQrCO;yj|7yQi?lwqqD*+(cr$(Vs9LE# z0Eh#m(;1HB@{s`NLMd=l3Z)da7uEYf05Hbjc`mO%_Gxx9%%#H)XKp%DNa@dEf@UYf zg64HNtq;9mzz z0TxYQt&biCWrx3zi1`R0A}FO05k$Zj!CGNxeauK0j4VSdL!1G*==LU59h96xI zMByWh2N4hikuew;S(yNSb=sUhdyWrZ|BROccMMviB*Wb(P{I#8i on>e<%XnEP;xA*VLo2x9V1Hy;2%BQg6_y7O^07*qoM6N<$g5ayrIRF3v literal 0 HcmV?d00001 diff --git a/data/images/file.png b/data/images/file.png new file mode 100644 index 0000000000000000000000000000000000000000..419bb6884afae04b65197db7b7626e0dade65b44 GIT binary patch literal 609 zcmV-n0-pVeP)lh;^+S#YJ%;-H8i-fVkC=!9}|%=t2no0)yy6 zB#L4cr0OPO#ek(P7(+;fXbd`?mL#|H<|CP;ACNQ5Jm$T3&pqef_b8jqKCV`)S1=f^ zrqk&hGXt4Sh6ja=kt~ux_>{F;twT@t!z9N5$o(9O#d@TOer-hLjV_U!$tU9-UPLg1 zA0VTN1M}o5VA`92f(qE1kiqQ9aTfPe;N&NC_LHl}k7e{1Wfu$VY$J5dxW(MC8hHJ7 z9zxrKq6kFdW!!sselb0Frqm^1S3U*&_zC~k*TG5!Cr8I&nkJ4NKY_5WPc44w)(EsZs|&IN!Teg2hM{;G;-MXPR{E?*F#O2a7P>6esibg>%V?r>02H{AzK$| z&fGt=6g&|PT+Ta2-sBdEPo#tE&~ULPmLD}pBf^ONIW+T zV~TFwMLzaUq5f%+!kN}_m$NS+|AUE00000NkvXXu0mjfw8RkN literal 0 HcmV?d00001 diff --git a/data/images/note.png b/data/images/note.png new file mode 100644 index 0000000000000000000000000000000000000000..fd877cb8d3dd2c473ffebea22bb7926afcf0e0a5 GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHjG<47Zu(Zk74&3=E70o-U3d7N?UF76=$53G1vieVd-} zE6TycSXlUYoY)(qc`nN*((jQ?Z!Ob6)4A5{EDyh0~is8d5}~ zJd8H~>HPcg@9xPBAL`55+WzzG|5wwNeL(&Ep#ujFeE4~Jxs|EzHXdQ)P`0|bQntFh z)V6B>>qZ@&#YO^?(i0OB5++PYJh5T>_Ou`0-}5sY8(SZ~tDY^PH@E)p|Ff_EM}IuI zzv|!>27mVNa`Vz3JV;1<@VxqT!RKGmZRPp@<7{f*IE&l;+^l~8UAy|EBR*SiD<$b@ zfn2_Q{r{LPiC6DdJZW&AK0SQOiWxU5zgRBac!GgpZ)xYxd`+);z~E%?boFyt=akR{ E0K%rMX8-^I literal 0 HcmV?d00001 diff --git a/data/images/reload.png b/data/images/reload.png new file mode 100644 index 0000000000000000000000000000000000000000..cab4d02c756502f922bbff34df34c0056406bd96 GIT binary patch literal 1364 zcmV-a1*`grP)b zm1#^AXBfx-?>jR)yR%CSkD4Z}F=^Tmf|{770@hEqO%szQ{n9is zHEGgX6eKmafTT2OwXsKHJW8z!1VLK`LOl=`0dax7=XjrfU?CiS@JlE8XOfv`e)F4W zo|%^s5&n;jKTAy&;^&>EBHBBo`5EO|sKj&=J z5_Cb3Xb}|nqocOcn7QVqeWz0dr@u@KTRZD39?SzX23GoBb3MSyUw(0^ZDmff>~gB$ zoI%$O1VRQLJess_^m+m#;{k~=9QJeN3zwvG=)Bz$Vg)gg)ls`=U>nzH zUSF+63=0$fFk&_?ZmD@ zc?Mck^<7DVOM82J@iOh}mUc1b4RX!_VG$97nd)|hN(wTZg)gK^L_o+OY+avgFUrrb z_dk3R^J-BR>*^ggbs>p)FV8M3)z7(9XZ@K@nhF@qVOPSI5Z_;`t>7V!6wio%`?=P> zA3pu2HQ3fOOioq8(0B+>0w&hyr!z(7uq*-D9-a>d!)pV>lgu3#<6WMedPCPuFCab# zfSWZH-uC*6wktK|<%Vu;{QXK_`-vYrg7FTH%p?t$ZjC~bI4mJpWT7z$sG36^%FIZv zjn(W8V7$*Fn|I;FwAEE~>4te|Dxga-4h2KwAqW6=g~PIlDMA(iFxz8Gh+v}2@nwv| z{_|(`Ig88U z%-%Ny0HAWkqWLbWYDiTyjEIJ7LTO$Sn$F*e42=4Y zwjJNqu+UBx&J;-%$5e;!r^&ELn(+IpY_e?4oS!pp)0T!Qkdf#F1JK<+Mx3!##qTsP zUG&@%p0g~mVbT}eef!?vhrU2Kn{nKoz45Fth%o?ba^f&J9>kEBT0b&DOv1B6Yh(lH4dhQNwwkZ<1V>QD&5vpGVo|a|^hIHgFiABV;(0R{` zR|+$w;{0^28<*3^uZbcVE|zw(r3W-b^98;e$VZ)-gBS*1HciDJ$>!YH7P5%l`C5O zT5zU1RmBKKOo<2(5#OJqeXYj^t~PZ82t^YlqTmdet=@g?&6^GTF9WaxQ0GL6Mv|Ov zB_X3AA?O|U21fh50QBfwN1{+4fCv%MqNRy3Ce4A(LT%lQu} WXm(sI;eU4?XlBSWnfeh!!bD5TzjAL_|apdMUlG zu)PTFrCp=m>fKvbp|rZi(>6^uJL9~Nlx#9%@vskGCc}I0m-lAgObBBP1|bRzNTlFz zielNi?%*i1Z<^+=%nrB|Y26{j`k2qL&gv?|5$FG7M^!|b?3;!&@$Nl%trp;j^Ek7U z?6HvK=B0yTF)Rz3cjlq!dRMvq%RlU;OO&=UU|iG7D=StqC>@-JhRfOOL9Seeow>Qz zb>AfQCFh)n2eebR!%{YRO@N$1-GUINHG9Z+O zTTVM2O1mC2$H$qya9=GRdgo)Pu-&-vCw>{r#`59#yA(*!1@@=S=-zG+?C<%xk#k*p z;emRlOUp^9w2#p#f-}8jVaWi8E@$&>fBh!(psneZiurl@Y3{6Hj$QOTC(R(DBfUOc zxS~_~b@J6~aO?HRQ^B=}S0#L!)oExxdED0xQt)xhJ$nvE8yo$*A8lJwa@DF3u85$M zFJ5M#NG;TAnd;CF{nLk}58P4JCOWx|Mh1|-QG>19x4@j4$=J{z<1k(bE(F2E=F%dV zv$OqBp6S;7O;$YeuWdhC3g<~d|Lw(xVZ8Jb!V9G_lxObR8atSp3diI{gQKmfQhTh@ z+wH?}K^hd_ZZf+RjDpUeG|j0KQo(A|x=zR#_xaBCf~ay~9}_}U?4(GI2$mKPn*#R^ zm2-M09uN+WUr%w>1nrA+ejK42pO-X;4C-h4SAYQkHIMe-rW>_b00000NkvXXu0mjf DMEP6H literal 0 HcmV?d00001 diff --git a/data/images/remove.psd b/data/images/remove.psd new file mode 100644 index 0000000000000000000000000000000000000000..a919711b5bf2a2b3a94cd7d185714183c7618036 GIT binary patch literal 23051 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 literal 0 HcmV?d00001 diff --git a/data/images/search.png b/data/images/search.png new file mode 100644 index 0000000000000000000000000000000000000000..4e522b23d8a42b180ae98bad8987eeb977314a64 GIT binary patch literal 1267 zcmVDTAjLaB+%Yd6 zk9Re0dWW32a4X-d2sw)^O9q9&f$6DKD(jyH%hK8k)4@XrXqmgLZpZeWq5CS1#gvXM zZ*L{-=OWs$Y8TfnsYsPim2XqV^o(lgSHcPH_ukQml79^4H#crI9X#}DCji^Mz&rr# z_~8A3e{S8f8;W4uNXz0IOJ|JuoD#8^IFV9N%AngMQO~IQT3)C5T;51g#?k;w6R@5^5L(>1YOvB}oR)3$97Q zgb-dg4Df=$$1{4`EOH!(pc;(jIYM${>HNs4OOf-0!xTmVUJ!Ty;5foh3Z|6mW>FAD zj0eK z)tk}Mo6*b}#vwuoH^MVSC_{n=+#t-Vj7FZWdZ?5rN=)^7eP{0l<_aEv8SFSYwA%0C zC9AZ^VAKXiI4~wKM$L>+J0&pXa=9|6+x_gyr`%l2;ja_%_*ih#b~||@7@AdG6|kBG zb@pSG@{MS|ZggnSElJXK@B~^e?}~&6wm4m`S60_JAgD3wn(9tmxzf9&a>m1lFZcAO zCIkb(OKV>I?a!V|n^&%cj-)T{!aj$8`Df=ehp= zew*E1qTNo!8y=Za`R(2CJBCp6zCCjW25$c1cDZv7N2$p_*YB7PKRqbSM~N85fJnsmA~@7wb_fVG2zgNq3v5@Re| zQBiRkz|p3__HP;+8}|~9y|-cgMs#&`fl_K*xY(VE#bQ;*emH*Xp5UU7xIo`gTvv-0^o|D zC>9EgtG+{hku3}W1z?Qlf`#*^RXtvHM3!Z*5*u6A*4B23OfdM#1VFyX=W+0O>V*Py d-2eYI{sF*Z|Ipo-va0|9002ovPDHLkV1mNbUMBzm literal 0 HcmV?d00001 diff --git a/data/picard.qrc b/data/picard.qrc new file mode 100644 index 000000000..a6f187664 --- /dev/null +++ b/data/picard.qrc @@ -0,0 +1,24 @@ + + + images/cd.png + images/CoverArtShadow.png + images/dir.png + images/file.png + images/note.png + images/Picard16.png + images/Picard32.png + images/ToolbarAddDir.png + images/ToolbarAddFiles.png + images/ToolbarAnalyze.png + images/ToolbarCluster.png + images/ToolbarListen.png + images/ToolbarLookup.png + images/ToolbarOptions.png + images/ToolbarRemove.png + images/ToolbarSave.png + images/search.png + images/ToolbarSubmit.png + images/remove.png + images/analyze.png + + \ No newline at end of file diff --git a/docs/dnd.txt b/docs/dnd.txt new file mode 100644 index 000000000..aa32821a5 --- /dev/null +++ b/docs/dnd.txt @@ -0,0 +1,7 @@ +Mime Types +========== + + * text/uri-list + * application/picard.file-list + * application/picard.album-list + * application/picard.cluster-list diff --git a/docs/todo.txt b/docs/todo.txt new file mode 100644 index 000000000..a462d8d01 --- /dev/null +++ b/docs/todo.txt @@ -0,0 +1,21 @@ +TODO List +========= + + * More intelligent drag&drop, needs reimplementing dragMoveEvent + * Convert AlbumTreeView from custom model/view to QTreeWidget (the Python + model/view implementation is slow) + * Save metadata from the "Server Metadata" box + * Allow only one active selection. Either in the file view, or in the album view. + * Removing albums + * Reload album information + * Matching files to tracks + * Clustering + * Matching cluster to album + * Matching multiple files to album + * Lookup file + * Lookup cluster + * Lookup album + * Lookup track + * CD lookup + * Generate cuesheets from albums + * Generate playlists diff --git a/picard/__init__.py b/picard/__init__.py new file mode 100644 index 000000000..ccf9e6286 --- /dev/null +++ b/picard/__init__.py @@ -0,0 +1 @@ +__version__ = '0.8.0' \ No newline at end of file diff --git a/picard/album.py b/picard/album.py new file mode 100644 index 000000000..e9ea81f21 --- /dev/null +++ b/picard/album.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore, QtGui +from threading import RLock +from musicbrainz2.webservice import Query, WebServiceError, ReleaseIncludes +from musicbrainz2.model import VARIOUS_ARTISTS_ID, NS_MMD_1 +from musicbrainz2.utils import extractUuid, extractFragment +from picard.util import formatTime +from picard.dataobj import DataObject +from picard.track import Track +from picard.artist import Artist + +class AlbumLoadError(Exception): + pass + +class Album(DataObject): + + def __init__(self, id, name, artist=None): + DataObject.__init__(self, id, name) + self._lock = RLock() + self.unmatchedFiles = [] + self.artist = artist + self.tracks = [] + self.duration = 0 + + def __str__(self): + return u'' % (self.id, self.name) + + def lock(self): + self._lock.acquire() + + def unlock(self): + self._lock.release() + + def load(self): + self.tagger.log.debug("Loading album %r", self.id) + + query = Query() + release = None + try: + inc = ReleaseIncludes(artist=True, releaseEvents=True, discs=True, tracks=True) + release = query.getReleaseById(self.id, inc) + except WebServiceError, e: + self.hasLoadError = True + raise AlbumLoadError, e + + self.lock() + + self.name = release.title + self.artist = Artist(release.artist.id, release.artist.name) + + self.duration = 0 + self.tracks = [] + for track in release.tracks: + if track.artist: + artist = Artist(track.artist.id, track.artist.name) + else: + artist = Artist(release.artist.id, release.artist.name) + tr = Track(track.id, track.title, artist, self) + tr.duration = track.duration or 0 + self.tracks.append(tr) + self.duration += tr.duration + + self.unlock() + + def getNumTracks(self): + return len(self.tracks) + + def addUnmatchedFile(self, file): + self.unmatchedFiles.append(file) + self.emit(QtCore.SIGNAL("fileAdded(int)"), file.id) + + def getNumUnmatchedFiles(self): + return len(self.unmatchedFiles) + + numUnmatchedFiles = property(getNumUnmatchedFiles) + + def removeFile(self, file): + index = self.unmatchedFiles.index(file) + self.emit(QtCore.SIGNAL("fileAboutToBeRemoved"), index) +# self.test = self.unmatchedFiles[index] + del self.unmatchedFiles[index] + print self.unmatchedFiles + self.emit(QtCore.SIGNAL("fileRemoved"), index) + diff --git a/picard/albummanager.py b/picard/albummanager.py new file mode 100644 index 000000000..d15598fde --- /dev/null +++ b/picard/albummanager.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore +from picard.album import Album +from picard.artist import Artist + +class UnmatchedFiles(Album): + + def __init__(self): + self._origName = u"Unmatched Files (%d)" + Album.__init__(self, u"[unmatched files]", self._origName) + + def addUnmatchedFile(self, file): + self.name = self._origName % (self.numUnmatchedFiles + 1) + Album.addUnmatchedFile(self, file) + + def removeFile(self, file): + self.name = self._origName % (self.numUnmatchedFiles - 1) + Album.removeFile(self, file) + + +class Clusters(Album): + pass + +class AlbumManager(QtCore.QObject): + + def __init__(self): + QtCore.QObject.__init__(self) + self.albums = [] + self.unmatchedFiles = UnmatchedFiles() + self.clusters = Clusters(u"[clusters]", u"Clusters") + + def load(self, albumId): + albumId = unicode(albumId) + album = Album(albumId, "[loading album information]", None) + self.albums.append(album) + self.emit(QtCore.SIGNAL("albumAdded"), album) + self.tagger.worker.loadAlbum(album) + #album.load() + + def getAlbumById(self, id): + for album in self.albums: + if album.id == id: + return album + return None + + def getNumAlbums(self): + return len(self.albums) + diff --git a/picard/api.py b/picard/api.py new file mode 100644 index 000000000..0bce0c3c6 --- /dev/null +++ b/picard/api.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from picard.component import Interface + +class IFileOpener(Interface): + + def getSupportedFormats(self): + pass + + def canOpen(self, fileName): + pass + + def open(self, fileName): + pass + diff --git a/picard/artist.py b/picard/artist.py new file mode 100644 index 000000000..4d83b3634 --- /dev/null +++ b/picard/artist.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from picard.dataobj import DataObject + +class Artist(DataObject): + + def __init__(self, id, name=None): + DataObject.__init__(self, id, name) diff --git a/picard/browser/__init__.py b/picard/browser/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/picard/browser/browser.py b/picard/browser/browser.py new file mode 100644 index 000000000..5654dea9d --- /dev/null +++ b/picard/browser/browser.py @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore +import urllib +import httplib +import BaseHTTPServer + +class TaggerRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): + + def __init__(self,conn,addr,server): + BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, conn, addr, server) + + def do_POST(self): + self.send_error(405, "POST not supported") + + def do_HEAD(self): + self.send_error(405, "HEAD not supported") + + def do_GET(self): + parsedArgs = {} + [action, rest] = urllib.splitquery(self.path) + if rest: + args = rest.split('&'); + for kv in args: + [key, value] = kv.split('=') + parsedArgs[key] = unicode(value) + + if action[0] == '/': + action = action[1:] + self.server.getBrowserIntegrationModule().action(action, parsedArgs) + self.send_response(200) + self.send_header("Content-Type", "text/plain; charset=utf-8") + self.end_headers() + self.wfile.write('Nothing to see here!\n') + + def do_QUIT(self): + self.server.getBrowserIntegrationModule().exitThread = True + self.send_response(200) + self.end_headers() + + def log_message(self, format, *args): + pass + + +class TaggerServer(BaseHTTPServer.HTTPServer, QtCore.QObject): + + def __init__(self, addr, handlerClass): + BaseHTTPServer.HTTPServer.__init__(self, addr, handlerClass) + + def setBrowserIntegrationModule(self, bim): + self.bim = bim + + def getBrowserIntegrationModule(self): + return self.bim + +class BrowserIntegration(QtCore.QThread): + + defaultPort = 8056 + + def __init__(self): + QtCore.QThread.__init__(self) + self.exitThread = False + self.server = None + + def start(self): + self.log.debug("Starting the browser integration") + QtCore.QThread.start(self) + + def stop(self): + self.log.debug("Stopping the browser integration") + if self.isRunning(): + if self.port: + conn = httplib.HTTPConnection("%s:%d" % self.server.server_address) + conn.request("QUIT", "/") + conn.getresponse() + self.wait() + + def action(self, action, args): + self.log.debug("Browser integration event: action=%r, args=%r", action, args) + if action == "init": + self.emit(QtCore.SIGNAL("init(int)"), args) + elif action == "openalbum": + self.emit(QtCore.SIGNAL("loadAlbum(const QString &)"), args["id"]) + else: + self.log.warning("Unknown browser integration event '%s'!", action) + + def run(self): + # Start the HTTP server + port = self.defaultPort + self.port = None + while not self.port: + try: + self.server = TaggerServer(("127.0.0.1", port), TaggerRequestHandler) + self.port = port + except: + port = port + 1 + + # Report the port number back to the main app + self.action("init", self.port) + + self.server.setBrowserIntegrationModule(self) + while not self.exitThread: + self.server.handle_request() + diff --git a/picard/browser/filelookup.py b/picard/browser/filelookup.py new file mode 100644 index 000000000..d0fdff98e --- /dev/null +++ b/picard/browser/filelookup.py @@ -0,0 +1,123 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: RCSL 1.0/RPSL 1.0/GPL 2.0 +# +# Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. +# Portions Copyright (c) 2004 Robert Kaye. All Rights Reserved. +# +# The contents of this file, and the files included with this file, are +# subject to the current version of the RealNetworks Public Source License +# Version 1.0 (the "RPSL") available at +# http://www.helixcommunity.org/content/rpsl unless you have licensed +# the file under the RealNetworks Community Source License Version 1.0 +# (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, +# in which case the RCSL will apply. You may also obtain the license terms +# directly from RealNetworks. You may not use this file except in +# compliance with the RPSL or, if you have a valid RCSL with RealNetworks +# applicable to this file, the RCSL. Please see the applicable RPSL or +# RCSL for the rights, obligations and limitations governing use of the +# contents of the file. +# +# This file is part of the Helix DNA Technology. RealNetworks is the +# developer of the Original Code and owns the copyrights in the portions +# it created. +# +# This file, and the files included with this file, is distributed and made +# available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +# EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, +# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS +# FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. +# +# Technology Compatibility Kit Test Suite(s) Location: +# http://www.helixcommunity.org/content/tck +# +# -------------------------------------------------------------------- +# +# picard is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# picard is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with picard; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Contributor(s): +# Robert Kaye +# +# +# ***** END LICENSE BLOCK ***** + +import sys, urllib, webbrowser, os +#from tunepimp import tunepimp, metadata +#from tunepimp import track as tptrack +#from picard import wpath +import launch + +class FileLookup(launch.Launch): + + def __init__(self, parent, server, port, localPort): + launch.Launch.__init__(self, parent) + self.server = server + self.localPort = int(localPort) + self.port = port + + def _encode(self, text): + return urllib.quote(text.encode('UTF-8', 'replace')) + + def discLookup(self, url): + return self.launch("%s&tport=%d" % (url, self.localPort)) + + def _lookup(self, type_, id_): + url = "http://%s:%d/%s/%s.html?tport=%d" % ( + self._encode(self.server), + self.port, + type_, + id_, + self.localPort) + return self.launch(url) + + def trackLookup(self, trackId): + return self._lookup('track', trackId) + + def albumLookup(self, albumId): + return self._lookup('album', albumId) + + def artistLookup(self, artistId): + return self._lookup('artist', artistId) + + def _search(self, type_, query): + url = "http://%s:%d/search/textsearch.html?limit=25&type=%s&query=%s&tport=%d" % ( + self._encode(self.server), + self.port, + type_, + self._encode(query), + self.localPort) + return self.launch(url) + + def artistSearch(self, query): + return self._search('artist', query) + + def albumSearch(self, query): + return self._search('release', query) + + def trackSearch(self, query): + return self._search('track', query) + + def tagLookup(self, artist, release, track, trackNum, duration, fileName, puid): + url = "http://%s:%d/taglookup.html?tport=%d&artist=%s&release=%s&track=%s&tracknum=%s&duration=%s&filename=%s&puid=%s" % ( + self._encode(self.server), + self.port, + self.localPort, + self._encode(artist), + self._encode(release), + self._encode(track), + trackNum, + duration, + self._encode(wpath.wpath().basename(fileName)), + self._encode(puid)) + return self.launch(url) diff --git a/picard/browser/launch.py b/picard/browser/launch.py new file mode 100644 index 000000000..cc23d5b7a --- /dev/null +++ b/picard/browser/launch.py @@ -0,0 +1,117 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: RCSL 1.0/RPSL 1.0/GPL 2.0 +# +# Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. +# Portions Copyright (c) 2004 Robert Kaye. All Rights Reserved. +# +# The contents of this file, and the files included with this file, are +# subject to the current version of the RealNetworks Public Source License +# Version 1.0 (the "RPSL") available at +# http://www.helixcommunity.org/content/rpsl unless you have licensed +# the file under the RealNetworks Community Source License Version 1.0 +# (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, +# in which case the RCSL will apply. You may also obtain the license terms +# directly from RealNetworks. You may not use this file except in +# compliance with the RPSL or, if you have a valid RCSL with RealNetworks +# applicable to this file, the RCSL. Please see the applicable RPSL or +# RCSL for the rights, obligations and limitations governing use of the +# contents of the file. +# +# This file is part of the Helix DNA Technology. RealNetworks is the +# developer of the Original Code and owns the copyrights in the portions +# it created. +# +# This file, and the files included with this file, is distributed and made +# available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +# EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, +# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS +# FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. +# +# Technology Compatibility Kit Test Suite(s) Location: +# http://www.helixcommunity.org/content/tck +# +# -------------------------------------------------------------------- +# +# picard is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# picard is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with picard; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Contributor(s): +# Robert Kaye +# Lukas Lalinsky +# +# +# ***** END LICENSE BLOCK ***** + +import sys, os, webbrowser, tempfile +#from picard import wpath + +# KDE default browser +if 'KDE_FULL_SESSION' in os.environ and os.environ['KDE_FULL_SESSION'] == 'true' and webbrowser._iscommand('kfmclient'): + webbrowser.register('kfmclient', None, webbrowser.GenericBrowser("kfmclient exec '%s' &")) + if 'BROWSER' in os.environ: + webbrowser._tryorder.insert(len(os.environ['BROWSER'].split(os.pathsep)), 'kfmclient') + else: + webbrowser._tryorder.insert(0, 'kfmclient') + +# GNOME default browser +if 'GNOME_DESKTOP_SESSION_ID' in os.environ and webbrowser._iscommand('gnome-open'): + webbrowser.register('gnome-open', None, webbrowser.GenericBrowser("gnome-open '%s' &")) + if 'BROWSER' in os.environ: + webbrowser._tryorder.insert(len(os.environ['BROWSER'].split(os.pathsep)), 'gnome-open') + else: + webbrowser._tryorder.insert(0, 'gnome-open') + +class Launch(object): + + def __init__(self, parent): + self.parent = parent + + def getTempFile(self): + tempDir = tempfile.gettempdir() + return wpath.wpath().join(tempDir, "post.html") + + def cleanup(self): + try: + os.unlink(self.getTempFile()) + except: + pass + + def launch(self, url): + # If the browser var does not specify the %s, warn the user + browser = os.environ.get('BROWSER') + if browser and browser not in webbrowser._browsers and ('%s' not in browser or '&' not in browser): + dlg = wx.MessageDialog(self.parent, "Your BROWSER variable does not contain a %s and/or a & ."+ + " To ensure that your browser launches correctly and doesn't lock the rest of the "+ + " application, make sure your BROWSER environment varable includes a %s &. For example, "+ + ' BROWSER="firefox \'%s\' &" should work to launch Firefox correctly.', style=wx.OK) + dlg.ShowModal() + + try: + webbrowser.open(url) + return True + except: + return False + + + def post(self, post): + try: + file = open(self.getTempFile(), "w") + file.write(post); + file.close() + except IOError: + dlg = wx.MessageDialog(self.parent, "Could not write a temporary file to launch a browser.", + "HTTP POST Launch", style=wx.OK) + dlg.ShowModal() + + self.launch("file://" + self.getTempFile()) diff --git a/picard/component.py b/picard/component.py new file mode 100644 index 000000000..3b438ea3e --- /dev/null +++ b/picard/component.py @@ -0,0 +1,293 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ----------------------------------------------------------------------------- +# +# Copyright (C) 2003-2006 Edgewall Software +# Copyright (C) 2003-2004 Jonas Borgström +# Copyright (C) 2004-2005 Christopher Lenz +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Author: Jonas Borgström +# Christopher Lenz + +__all__ = ['Component', 'ExtensionPoint', 'implements', 'Interface'] + +from PyQt4 import QtCore +import sip + +import inspect, types, __builtin__ + +############## preliminary: two utility functions ##################### + +def skip_redundant(iterable, skipset=None): + "Redundant items are repeated items or items in the original skipset." + if skipset is None: skipset = set() + for item in iterable: + if item not in skipset: + skipset.add(item) + yield item + + +def remove_redundant(metaclasses): + skipset = set([types.ClassType]) + for meta in metaclasses: # determines the metaclasses to be skipped + skipset.update(inspect.getmro(meta)[1:]) + return tuple(skip_redundant(metaclasses, skipset)) + +################################################################## +## now the core of the module: two mutually recursive functions ## +################################################################## + +memoized_metaclasses_map = {} + +def get_noconflict_metaclass(bases, left_metas, right_metas): + """Not intended to be used outside of this module, unless you know + what you are doing.""" + # make tuple of needed metaclasses in specified priority order + metas = left_metas + tuple(map(type, bases)) + right_metas + needed_metas = remove_redundant(metas) + + # return existing confict-solving meta, if any + if needed_metas in memoized_metaclasses_map: + return memoized_metaclasses_map[needed_metas] + # nope: compute, memoize and return needed conflict-solving meta + elif not needed_metas: # wee, a trivial case, happy us + meta = type + elif len(needed_metas) == 1: # another trivial case + meta = needed_metas[0] + # check for recursion, can happen i.e. for Zope ExtensionClasses + elif needed_metas == bases: + raise TypeError("Incompatible root metatypes", needed_metas) + else: # gotta work ... + metaname = '_' + ''.join([m.__name__ for m in needed_metas]) + meta = classmaker()(metaname, needed_metas, {}) + memoized_metaclasses_map[needed_metas] = meta + return meta + +def classmaker(left_metas=(), right_metas=()): + def make_class(name, bases, adict): + metaclass = get_noconflict_metaclass(bases, left_metas, right_metas) + return metaclass(name, bases, adict) + return make_class + +class Interface(object): + """Marker base class for extension point interfaces.""" + + +class ExtensionPoint(property): + """Marker class for extension points in components.""" + + def __init__(self, interface): + """Create the extension point. + + @param interface: the `Interface` subclass that defines the protocol + for the extension point + """ + property.__init__(self, self.extensions) + self.interface = interface + self.__doc__ = 'List of components that implement `%s`' % \ + self.interface.__name__ + + def extensions(self, component): + """Return a list of components that declare to implement the extension + point interface.""" + extensions = ComponentMeta._registry.get(self.interface, []) + return filter(None, [component.compmgr[cls] for cls in extensions]) + + def __repr__(self): + """Return a textual representation of the extension point.""" + return '' % self.interface.__name__ + + +class ComponentMeta(type): + """Meta class for components. + + Takes care of component and extension point registration. + """ + _components = [] + _registry = {} + + def __new__(cls, name, bases, d): + """Create the component class.""" + + new_class = type.__new__(cls, name, bases, d) + if name == 'Component': + # Don't put the Component base class in the registry + return new_class + + # Only override __init__ for Components not inheriting ComponentManager + if True not in [issubclass(x, ComponentManager) for x in bases]: + # Allow components to have a no-argument initializer so that + # they don't need to worry about accepting the component manager + # as argument and invoking the super-class initializer + init = d.get('__init__') + if not init: + # Because we're replacing the initializer, we need to make sure + # that any inherited initializers are also called. + for init in [b.__init__._original for b in new_class.mro() + if issubclass(b, Component) + and '__init__' in b.__dict__]: + break + def maybe_init(self, compmgr, init=init, cls=new_class): + if cls not in compmgr.components: + compmgr.components[cls] = self + if init: + init(self) + maybe_init._original = init + new_class.__init__ = maybe_init + + if d.get('abstract'): + # Don't put abstract component classes in the registry + return new_class + + ComponentMeta._components.append(new_class) + for interface in d.get('_implements', []): + ComponentMeta._registry.setdefault(interface, []).append(new_class) + for base in [base for base in bases if hasattr(base, '_implements')]: + for interface in base._implements: + ComponentMeta._registry.setdefault(interface, []).append(new_class) + + return new_class + + +class QComponentMeta(ComponentMeta, sip.wrappertype): + """Wrapper metaclass to aviod metaclass conflict. + """ + pass + +def implements(*interfaces): + """ + Can be used in the class definiton of `Component` subclasses to declare + the extension points that are extended. + """ + import sys + + frame = sys._getframe(1) + locals = frame.f_locals + + # Some sanity checks + assert locals is not frame.f_globals and '__module__' in frame.f_locals, \ + 'implements() can only be used in a class definition' + assert not '_implements' in locals, \ + 'implements() can only be used once in a class definition' + + locals['_implements'] = interfaces + + +class Component(QtCore.QObject): + """Base class for components. + + Every component can declare what extension points it provides, as well as + what extension points of other components it extends. + """ + __metaclass__ = QComponentMeta + + def __new__(cls, *args, **kwargs): + """Return an existing instance of the component if it has already been + activated, otherwise create a new instance. + """ + # If this component is also the component manager, just invoke that + if issubclass(cls, ComponentManager): + self = super(Component, cls).__new__(cls) + self.compmgr = self + return self + + # The normal case where the component is not also the component manager + compmgr = args[0] + self = compmgr.components.get(cls) + if self is None: + self = super(Component, cls).__new__(cls) + self.compmgr = compmgr + compmgr.component_activated(self) + return self + + +class ComponentManager(object): + """The component manager keeps a pool of active components.""" + + def __init__(self): + """Initialize the component manager.""" + self.components = {} + self.enabled = {} + if isinstance(self, Component): + self.components[self.__class__] = self + + def __contains__(self, cls): + """Return wether the given class is in the list of active components.""" + return cls in self.components + + def __getitem__(self, cls): + """Activate the component instance for the given class, or return the + existing the instance if the component has already been activated.""" + if cls not in self.enabled: + self.enabled[cls] = self.is_component_enabled(cls) + if not self.enabled[cls]: + return None + component = self.components.get(cls) + if not component: + if cls not in ComponentMeta._components: + raise TracError, 'Component "%s" not registered' % cls.__name__ + try: + component = cls(self) + except TypeError, e: + raise TracError, 'Unable to instantiate component %r (%s)' \ + % (cls, e) + return component + + def component_activated(self, component): + """Can be overridden by sub-classes so that special initialization for + components can be provided. + """ + + def is_component_enabled(self, cls): + """Can be overridden by sub-classes to veto the activation of a + component. + + If this method returns False, the component with the given class will + not be available. + """ + return True + diff --git a/picard/config.py b/picard/config.py new file mode 100644 index 000000000..a93c00e4e --- /dev/null +++ b/picard/config.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore + +defaultConfig = { + u"persist/viewCoverArt": True, + u"persist/viewFileBrowser": False, + u"persist/windowGeometry": QtCore.QRect(10, 10, 780, 680), + u"persist/windowMaximized": False, +} + +class ConfigError(Exception): + pass + +class ConfigGroup(object): + + def __init__(self, config, name): + self.config = config + self.name = name + + def get(self, name, default=QtCore.QVariant()): + key = "%s/%s" % (self.name, name) + if self.config.contains(key): + return self.config.value(key) + else: + return default + + def getString(self, name, default=None): + key = "%s/%s" % (self.name, name) + if self.config.contains(key): + return unicode(self.config.value(key).toString()) + else: + return default + + def getInt(self, name, default=None): + key = "%s/%s" % (self.name, name) + if self.config.contains(key): + value, ok = self.config.value(key).toInt() + if ok: + return value + return default + + def getBool(self, name, default=None): + key = "%s/%s" % (self.name, name) + if self.config.contains(key): + return self.config.value(key).toBool() + else: + return default + + def set(self, name, value): + key = "%s/%s" % (self.name, name) + self.config.setValue(key, QtCore.QVariant(value)) + +class Config(QtCore.QSettings): + + organization = u"MusicBrainz" + application = u"MusicBrainz Picard 1.0" + + def __init__(self): + """Initializes the configuration.""" + QtCore.QSettings.__init__(self, self.organization, self.application) + self.setting = ConfigGroup(self, u"setting") + self.persist = ConfigGroup(self, u"persist") + self.profile = ConfigGroup(self, u"profile/default") + + def switchProfile(self, profileName): + """Sets the current profile.""" + key = u"profile/%s" % (profileName,) + if self.contains(key): + self.profile.name = key + else: + raise ConfigError, "Unknown profile '%s'" % (profileName,) diff --git a/picard/dataobj.py b/picard/dataobj.py new file mode 100644 index 000000000..1045e3e8b --- /dev/null +++ b/picard/dataobj.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore + +class DataObject(QtCore.QObject): + + def __init__(self, id, name): + QtCore.QObject.__init__(self) + self._id = id + self._name = name + + def setId(self, id): + self._id = id + + def getId(self): + return self._id + + id = property(getId, setId) + + def getName(self): + return self._name + + def setName(self, name): + self._name = name + + name = property(getName, setName) + + diff --git a/picard/file.py b/picard/file.py new file mode 100644 index 000000000..c84759c45 --- /dev/null +++ b/picard/file.py @@ -0,0 +1,112 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore +import os.path +from picard.metadata import Metadata + +class AudioProperties(object): + + def __init__(self): + self.length = 0 + self.bitrate = 0 + +class File(QtCore.QObject): + + _idCounter = 1 + + def __init__(self, fileName): + QtCore.QObject.__init__(self) + assert(isinstance(fileName, unicode)) + self._lock = QtCore.QMutex() + self._id = File._idCounter + File._idCounter += 1 + self.fileName = fileName + self.baseFileName = os.path.basename(fileName) + self.album = None + + self.localMetadata = Metadata() + self.serverMetadata = Metadata() + self.audioProperties = AudioProperties() + + def lock(self): + self._lock.lock() + + def unlock(self): + self._lock.unlock() + + def getId(self): + return self._id + + id = property(getId) + + def save(self): + raise NotImplementedError() + + def getNewMetadata(self): + return self.serverMetadata + + def moveToAlbumAsUnlinked(self, album): + """Moves the file to a given album as 'unmatched'.""" + self.removeFromAlbum() + self.log.debug("File #%d moving to album %s as unlinked", self.getId(), album.getId()) + self.album = album + self.album.addUnmatchedFile(self) + + def removeFromAlbum(self): + """Removes the file from whatever album it may be on. Does nothing if + the file is not currently on an album.""" + if self.album is None: + return + self.log.debug("File #%d being removed from album %s", self.getId(), self.album.getId()) + self.album.removeFile(self) + self.album = None + + +class FileManager(QtCore.QObject): + + def __init__(self): + QtCore.QObject.__init__(self) + self.connect(self, QtCore.SIGNAL("fileAdded(int)"), self.onFileAdded) + self.mutex = QtCore.QMutex() + self.files = {} + + def getFile(self, fileId): + locker = QtCore.QMutexLocker(self.mutex) + return self.files[fileId] + + def addFile(self, file): + self.log.debug("Adding file %s", str(file)); + self.mutex.lock() + self.files[file.id] = file + self.mutex.unlock() + self.emit(QtCore.SIGNAL("fileAdded(int)"), file.id) + + def onFileAdded(self, fileId): + file = self.getFile(fileId) + file.moveToAlbumAsUnlinked(self.tagger.albumManager.unmatchedFiles) + + def removeFiles(self, files): + for file in files: + self.mutex.lock() + file.removeFromAlbum() + del self.files[file.id] + self.mutex.unlock() + diff --git a/picard/metadata.py b/picard/metadata.py new file mode 100644 index 000000000..f11f66bd5 --- /dev/null +++ b/picard/metadata.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore +from copy import copy + +class Metadata(QtCore.QObject): + + """Class to handle tag lists. + + @see http://wiki.musicbrainz.org/UnifiedTagging + """ + + def __init__(self): + QtCore.QObject.__init__(self) + self.tags = {} + + def compare(self, other): + return 0.0 + + def copy(self, other): + self.tags = copy(other.tags) + + def set(self, name, value): + self.tags[name.upper()] = value + + def get(self, name, default=u""): + name = name.upper() + if self.tags.has_key(name): + return self.tags[name] + return default + + def __getitem__(self, name): + return self.get(name) + + def __setitem__(self, name, value): + self.set(name, value) + + def __contains__(self, item): + self.tags.has_key(item) + + def getTitle(self): + return self["TITLE"] + + def setTitle(self, value): + self["TITLE"] = value + + title = property(getTitle, setTitle) + + def getArtist(self): + return self["ARTIST"] + + def setArtist(self, value): + self["ARTIST"] = value + + artist = property(getArtist, setArtist) + + def getAlbum(self): + return self["ALBUM"] + + def setAlbum(self, value): + self["ALBUM"] = value + + album = property(getAlbum, setAlbum) + diff --git a/picard/parsefilename.py b/picard/parsefilename.py new file mode 100644 index 000000000..4e3f128cb --- /dev/null +++ b/picard/parsefilename.py @@ -0,0 +1,88 @@ +from picard.metadata import Metadata +import re + +_patterns = [ + # AlbumArtist/1999 - Album/01-TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P.*)(/|\\)((?P\d{4}) - )(?P.*)(/|\\)(?P\d{2})-(?P.*)\.(?:\w{2,5})$"), + # AlbumArtist - Album/01 - TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<artist>.*) - (?P<album>.*)(/|\\)(?P<tracknum>\d{2}) - (?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist - Album/01-TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<artist>.*) - (?P<album>.*)(/|\\)(?P<tracknum>\d{2})-(?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist - Album/01. TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<artist>.*) - (?P<album>.*)(/|\\)(?P<tracknum>\d{2})\. (?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist - Album/01 TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<artist>.*) - (?P<album>.*)(/|\\)(?P<tracknum>\d{2}) (?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist - Album/01_Artist_-_TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<albumartist>.*) - (?P<album>.*)(/|\\)(?P<tracknum>\d{2})_(?P<artist>.*)_-_(?P<title>.*)\.(?:\w{2,5})$"), + # Album/Artist - Album - 01 - TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<artist>.*)(/|\\)(?P=artist) - (?P<album>.*) - (?P<tracknum>\d{2}) - (?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist/Album/Artist - 01 - TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<albumartist>.*)(/|\\)(?P<album>.*)(/|\\)(?P<artist>.*) - (?P<tracknum>\d{2}) - (?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist/Album/01. Artist - TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<albumartist>.*)(/|\\)(?P<album>.*)(/|\\)(?P<tracknum>\d{2})\. (?P<artist>.*) - (?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist/Album/01 - Artist - TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<albumartist>.*)(/|\\)(?P<album>.*)(/|\\)(?P<tracknum>\d{2}) - (?P<artist>.*) - (?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist/Album/01 - TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<artist>.*)(/|\\)(?P<album>.*)(/|\\)(?P<tracknum>\d{2}) - (?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist/Album/01. TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<artist>.*)(/|\\)(?P<album>.*)(/|\\)(?P<tracknum>\d{2})\. (?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist/Album/01 TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<artist>.*)(/|\\)(?P<album>.*)(/|\\)(?P<tracknum>\d{2}) (?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist/Album/Album-01-TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<albumartist>.*)(/|\\)(?P<album>.*)(/|\\)(?P=album)-(?P<tracknum>\d{2})-(?P<artist>.*)-(?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist/Album/Album-01-Artist-TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<artist>.*)(/|\\)(?P<album>.*)(/|\\)(?P=album)-(?P<tracknum>\d{2})-(?P<title>.*)\.(?:\w{2,5})$"), + # AlbumArtist/Album/Artist-01-TrackTitle.ext + re.compile(r"(?:.*(/|\\))?(?P<albumartist>.*)(/|\\)(?P<album>.*)(/|\\)(?P<artist>.*)-(?P<tracknum>\d{2})-(?P<title>.*)\.(?:\w{2,5})$"), +] + +def parseFileName(fileName): + for pattern in _patterns: + match = pattern.match(fileName) + if match: + mdata = Metadata() + #mdata.artist = match.group("albumartist") + mdata.artist = match.group("artist") + mdata.title = match.group("title") + mdata.album = match.group("album") + + return mdata + return None + +if __name__ == "__main__": + # Thanks to folks at http://www.last.fm/group/Get%2BYour%2BDamn%2BTags%2BRight/forum/13179/_/99927 :) + testCases = [ + (u"F:\\Hudba\\2 Unlimited\\No Limit\\01 No Limit.mp3", u"2 Unlimited", u"No Limit", u"No Limit"), + (u"F:\\Hudba\\2 Unlimited\\No Limit\\No Limit-01-No Limit.mp3", u"2 Unlimited", u"No Limit", u"No Limit"), + (u"F:\\Hudba\\2 Unlimited\\No Limit\\No Limit-01-Test-No Limit.mp3", u"Test", u"No Limit", u"No Limit"), + (u"F:\\grooves\\Brian Eno - Another Green World (1975)\\08 - Sombre Reptiles.ogg", u"Brian Eno", u"Another Green World (1975)", u"Sombre Reptiles"), + (u"My Documents/Music/Various Artists/Album/01 - Artist - Track.ogg", u"Artist", u"Album", u"Track"), + (u"M:\\Albums\\Artist\\Album\\artist - 01 - title.mp3", u"artist", u"Album", u"title"), + (u"F:\\artist\\(year) album\\01 - title.mp3", u"artist", u"(year) album", u"title"), + (u"/home/blaster/Data/Audio/Music/Deep Purple/[2003] Bananas/01 - Deep Purple - House of Pain.ogg", u"Deep Purple", u"[2003] Bananas", u"House of Pain"), + (u"\\A\\A Perfect Circle\\(2000) Mer De Noms\\01 - The Hollow.mp3", u"A Perfect Circle", u"(2000) Mer De Noms", u"The Hollow"), + (u"..\\My Music\\Metal\\Sonata Arctica\\Sonata Arctica - Successor - 05 - Shy.mp3", u"Sonata Arctica", u"Successor", u"Shy"), + (u"D:\\Music\\Artist - Album (year)\\01_artist_-_trackname.mp3", u"artist", u"Album (year)", u"trackname"), + (u"root/MP3/Band/Album/band-01-name.mp3", u"band", u"Album", u"name"), + #(u"D:\\Music\\accPlus 64kb\\Artist\\Year - Album\\00 - Title - Artist.acc", u"Artist", u"Year - Album", u"Title"), + (u"C:\\My Documents\\Media\\Audio\\A\\Autolux\\Future Perfect\\01. Turnstile Blues.mp3", u"Autolux", u"Future Perfect", u"Turnstile Blues"), + (u"music\\artist\\1999 - Album Name\\01-TrackName.mp3", u"artist", u"Album Name", u"TrackName"), + ] + ok = 0 + for testCase in testCases: + mdata = parseFileName(testCase[0]) + print testCase[0] + if not mdata: + print "Error" + else: + if mdata.artist != testCase[1]: + print "Error", "-%s-" % mdata.artist, "-%s-" % testCase[1] + elif mdata.album != testCase[2]: + print "Error", "-%s-" % mdata.album, "-%s-" % testCase[2] + elif mdata.title != testCase[3]: + print "Error", "-%s-" % mdata.title, "-%s-" % testCase[3] + else: + ok += 1 + print "OK" + print len(testCases), ok + diff --git a/picard/plugins/__init__.py b/picard/plugins/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/picard/plugins/cuesheet.py b/picard/plugins/cuesheet.py new file mode 100644 index 000000000..96a83068b --- /dev/null +++ b/picard/plugins/cuesheet.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +import re +from picard.api import IFileOpener +from picard.component import Component, implements +from picard.file import File + +_whitespace_re = re.compile('\s', re.UNICODE) +_split_re = re.compile('\s*("[^"]*"|[^ ]+)\s*', re.UNICODE) + +def msfToMs(msf): + msf = msf.split(":") + return ((int(msf[0]) * 60 + int(msf[1])) * 75 + int(msf[2])) * 1000 / 75 + +class CuesheetTrack(list): + + def __init__(self, cuesheet, index): + list.__init__(self) + self.cuesheet = cuesheet + self.index = index + + def find(self, prefix): + return [i for i in self if tuple(i[:len(prefix)]) == tuple(prefix)] + + def getTrackNumber(self): + return self.index + + def getLength(self): + try: + nextTrack = self.cuesheet.tracks[self.index+1] + index0 = self.find((u"INDEX",u"01")) + index1 = nextTrack.find((u"INDEX",u"01")) + return msfToMs(index1[0][2]) - msfToMs(index0[0][2]) + except IndexError: + return 0 + + def getField(self, prefix): + try: + return self.find(prefix)[0][len(prefix)] + except IndexError: + return u"" + + def getArtist(self): + return self.getField((u"PERFORMER",)) + + def getTitle(self): + return self.getField((u"TITLE",)) + + def setArtist(self, artist): + found = False + for item in self: + if item[0] == u"PERFORMER": + if not found: + item[1] = artist + found = True + else: + del item + if not found: + self.append((u"PERFORMER", artist)) + + artist = property(getArtist, setArtist) + +class Cuesheet(object): + + def __init__(self, fileName): + self.fileName = fileName + self.tracks = [] + + def read(self): + f = file(self.fileName) + self.parse(f.readlines()) + f.close() + + def unquote(self, string): + if string.startswith('"'): + if string.endswith('"'): + return string[1:-1] + else: + return string[1:] + return string + + def quote(self, string): + if _whitespace_re.search(string): + return '"' + string.replace('"', '\'') + '"' + return string + + def parse(self, lines): + track = CuesheetTrack(self, 0) + self.tracks = [track] + isUnicode = False + for line in lines: + # remove BOM + if line.startswith('\xfe\xff'): + isUnicode = True + line = line[1:] + # decode to unicode string + line = line.strip() + if isUnicode: + line = line.decode('UTF-8', 'replace') + else: + line = line.decode('ISO-8859-1', 'replace') + # parse the line + split = [self.unquote(s) for s in _split_re.findall(line)] + keyword = split[0].upper() + if keyword == 'TRACK': + trackNum = int(split[1]) + track = CuesheetTrack(self, trackNum) + self.tracks.append(track) + track.append(split) + + def write(self): + lines = [] + for num, track in self.tracks.items(): + for line in track: + indent = 0 + if num > 0: + if line[0] == "TRACK": + indent = 2 + elif line[0] != "FILE": + indent = 4 + line2 = u" ".join([self.quote(s) for s in line]) + lines.append(" " * indent + line2.encode("UTF-8")) + return "\r\n".join(lines) + +class CuesheetVirtualFile(File): + + def __init__(self, cuesheet, track): + File.__init__(self, cuesheet.fileName) + self.cuesheet = cuesheet + self.track = track + self.localMetadata["ARTIST"] = track.getArtist() + self.localMetadata["TITLE"] = track.getTitle() + self.localMetadata["ALBUM"] = cuesheet.tracks[0].getTitle() + self.localMetadata["ALBUMARTIST"] = cuesheet.tracks[0].getArtist() + self.localMetadata["TRACKNUMBER"] = str(track.getTrackNumber()) + self.localMetadata["TOTALTRACKS"] = str(len(cuesheet.tracks) - 1) + self.serverMetadata.copy(self.localMetadata) + self.audioProperties.length = track.getLength() + +class CuesheetOpener(Component): + + implements(IFileOpener) + + def getSupportedFormats(self): + return ((u".cue", u"Cuesheet"),) + + def canOpenFile(self, fileName): + return fileName[-4:].lower() == u".cue" + + def openFile(self, fileName): + cuesheet = Cuesheet(fileName) + cuesheet.read() + files = [] + for track in cuesheet.tracks[1:]: + file = CuesheetVirtualFile(cuesheet, track) + files.append(file) + print files + return files + +if __name__ == "__main__": + cue = Cuesheet("a.cue") + cue.read() + for num, track in cue.tracks.items(): + print num, track + + print "-------" + print cue.write() +# cue.tracks[0].setArtist(0) + + diff --git a/picard/plugins/mutagenmp3.py b/picard/plugins/mutagenmp3.py new file mode 100644 index 000000000..174db14d7 --- /dev/null +++ b/picard/plugins/mutagenmp3.py @@ -0,0 +1,59 @@ +from picard.component import * +from picard.api import IFileOpener +from picard.file import File +from picard.util import encodeFileName +import logging + +class MutagenMp3File(File): + + def read(self): + import mutagen.mp3 + mfile = mutagen.mp3.MP3(encodeFileName(self.fileName)) + + # Local metadata + if mfile.has_key('TIT2'): + self.localMetadata.title = unicode(mfile['TIT2']) + if mfile.has_key('TPE1'): + self.localMetadata.artist = unicode(mfile['TPE1']) + if mfile.has_key('TALB'): + self.localMetadata.album = unicode(mfile['TALB']) + + self.serverMetadata.copy(self.localMetadata) + + # Audio properties + self.audioProperties.length = int(mfile.info.length * 1000) + self.audioProperties.bitrate = mfile.info.bitrate / 1000.0 + + def save(self): + import mutagen.mp3 + mp3File = mutagen.mp3.MP3(encodeFileName(self.fileName)) + mp3File.save() + + +class MutagenMp3Component(Component): + + implements(IFileOpener) + + # IFileOpener + + supportedFormats = { + u".mp3": (MutagenMp3File, u"MPEG Layer-3"), + } + + def getSupportedFormats(self): + return [(key, value[1]) for key, value in self.supportedFormats.items()] + + def canOpenFile(self, fileName): + for ext in self.supportedFormats.keys(): + if fileName.endswith(ext): + return True + return False + + def openFile(self, fileName): + for ext in self.supportedFormats.keys(): + if fileName.endswith(ext): + file = self.supportedFormats[ext][0](fileName) + file.read() + return (file,) + return None + diff --git a/picard/resources.py b/picard/resources.py new file mode 100644 index 000000000..ed2604483 --- /dev/null +++ b/picard/resources.py @@ -0,0 +1,2469 @@ +# Resource object code +# +# Created: ut 29. VIII 10:13:41 2006 +# by: The Resource Compiler for PyQt (Qt v4.1.3) +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore + +qt_resource_data = "\ +\x00\x00\x04\x7e\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd5\x0b\x0a\x0d\x34\x15\x48\x65\x72\x06\x00\x00\x04\x0b\x49\x44\ +\x41\x54\x38\xcb\xad\x95\x5d\x6c\x14\x55\x14\xc7\x7f\x33\xfb\x39\ +\x9d\x6d\xbb\xd3\x65\x97\xdd\xd6\x65\x59\x3e\x96\x22\x05\xda\x92\ +\x56\x8b\x1f\x58\x13\x1f\x30\x42\x34\x46\x7c\xd0\x17\xd3\xf8\x00\ +\x35\x48\x55\x52\x03\xfa\x20\x46\x02\x18\x8b\x69\x6c\x1f\x44\x1f\ +\x34\x8a\x92\xc8\x8b\x0f\x68\x0c\x31\x36\xc6\x88\x34\x41\x54\xac\ +\x25\xb4\xb5\x36\xc5\xd6\xdd\xb6\xd3\x76\xbf\x67\x67\x77\x7c\x68\ +\x77\x6c\xa9\x50\x4c\xfc\x27\x37\xe7\xe6\x9e\x73\xfe\xf7\x7f\xcf\ +\x3d\x33\x57\x60\x01\x9e\x7b\xa3\xfd\xfd\x3f\x12\x95\x8f\xc6\xa6\ +\xb4\x8a\x85\xeb\x92\xcd\x48\xfa\x5c\xf1\xbe\x95\xf2\x6f\x6d\x9d\ +\xaf\x7e\xf6\x1d\xb7\x01\xa1\x38\xe9\xfa\xa0\xad\xf6\xec\x8f\xe1\ +\x8b\xab\x23\x1b\xb3\xa1\x95\x3e\x31\x9e\x13\x9d\x55\x65\x4e\xf1\ +\xcf\xb8\xc6\x54\x3a\xcb\xf4\xd5\xf3\x43\xa9\x64\xc6\x11\x56\xfa\ +\xdb\xbb\x5f\x3b\xfd\xf1\x72\xc4\x96\x22\xe9\xf9\xfe\xc0\xd9\x55\ +\x5b\x1e\x70\x0f\x0f\xf4\xdb\x07\x87\x87\x6d\x23\xbf\x0f\x8a\x23\ +\x13\x93\xd8\x4a\x2b\x50\x9c\x76\x9c\xde\x75\xca\x74\xba\x50\x76\ +\x3d\xe6\xdc\xb9\xeb\x11\xcf\xa5\x8b\xdf\xfc\x3a\x70\x2b\x62\x11\ +\xe0\x87\x6b\xce\xe3\x77\xac\xb0\x0e\x27\x06\xbe\xba\xda\xe8\xbd\ +\xf0\x74\x4f\xc7\x3e\xf1\xbe\x50\xef\xce\xdc\xcc\xf5\xd9\xd1\xc1\ +\x2b\x46\x74\x36\x4e\x3c\x99\x40\xf1\x05\x90\x7d\x41\xc7\x2f\xb1\ +\xad\x9f\xbe\xf4\xfa\x2e\x79\x59\x62\x35\x25\xad\xb3\xe4\x13\x33\ +\xf7\xaf\x1f\x7d\xe8\xe8\x8b\xef\x7d\x02\x70\xec\xe0\x47\x5f\x36\ +\x04\x47\x8f\x24\x54\x55\x48\xce\x4e\xa1\x65\x52\x00\xf8\x82\xeb\ +\x45\xaf\xac\x8d\x4c\x68\xe1\xee\x65\x6b\xfc\xd4\xa1\x17\x3e\x0f\ +\x3b\x72\x3f\xcf\xaa\x85\xc3\x0b\x9d\x0e\x49\xe0\xdb\xa9\x10\xab\ +\x37\xd5\x2f\x4a\x72\xa7\xfb\x98\xf8\x6b\x9c\xca\xc2\xf4\x8d\x7c\ +\xed\x9d\x6f\x77\x9d\x00\xb0\x02\x04\xcb\xe2\x5f\xa4\x26\xed\xdd\ +\xc7\x8e\xbe\xb9\x64\xe7\x07\xdb\xba\x96\xac\x65\x3c\x77\x31\x3a\ +\xd4\xc3\x87\x27\x17\xe9\xe0\xe5\x43\x07\x8f\x03\x27\xcc\x52\xa4\ +\xc6\xed\xd7\x14\xb7\x97\x54\x6a\xee\xb8\xc9\x64\xd2\x1c\x26\x59\ +\xfa\x9f\xb9\xc5\x66\x5f\x14\x37\x32\x3a\x42\x32\x99\xc4\xeb\xf5\ +\xb2\xff\x40\x6b\xad\xa9\x18\x58\xeb\xf7\x07\x00\x48\x24\x13\xb8\ +\x64\xd7\xbf\x2a\x2d\xc2\x28\x14\x00\x78\xec\xc8\x69\x74\x4d\xe3\ +\xcc\xe1\x3d\x00\x28\x8a\x42\x2c\x16\x8b\x00\x97\xc5\xf9\xd8\xdd\ +\x75\x5b\xeb\x49\xa7\xd3\x08\x08\xa6\xd2\xea\x86\x1d\x54\x37\xec\ +\xa0\x5c\xf1\x02\x90\xcd\x66\xe6\x6c\x3a\xce\xba\xda\xbb\x59\x53\ +\xd3\x00\x40\x89\x54\x02\xc0\x3d\x4d\xf7\x02\x6c\x36\x4b\x01\x3c\ +\x5c\x59\x59\xb5\x48\xd5\xbb\xcf\x37\x33\xf0\xd3\xf7\x00\x8c\x8d\ +\x0e\x81\x61\x90\xd7\x73\x64\xd2\x49\xe2\x33\x2a\x00\x43\x57\x7a\ +\x79\x67\xdf\x76\x33\x27\x18\x0c\x01\xbc\x02\x20\xee\x3f\xd0\x5a\ +\x2b\x49\x25\xd8\xed\x76\x3c\x1e\x8f\x19\x14\xf0\x86\xe8\x68\xd9\ +\x46\x7f\x6f\x0f\x15\xde\x4a\x0a\x86\x31\x5f\x07\x83\x32\xb7\x87\ +\x81\xcb\x17\xe8\x68\xd9\x46\xa8\x32\x02\x80\x2c\xcb\xf3\xe5\xf0\ +\xb0\xff\x40\x6b\xad\x08\x44\x56\xfa\xfc\x00\xa8\xaa\x8a\x2c\xcb\ +\xc8\xb2\x8c\x28\x8a\x84\xab\x36\xd0\xb9\xb7\xc9\x24\x17\x05\x01\ +\x57\x79\x05\x03\x97\x2f\xd0\xb9\xb7\x89\x70\xd5\x06\x33\x5e\x55\ +\xe7\x4e\x51\x5e\x56\x0e\x10\x11\x81\xcd\x77\x6e\xdc\x44\x2e\x97\ +\x33\xac\x56\x0b\x33\x33\x33\xa8\xaa\x8a\x24\x49\xc8\xb2\x4c\x4d\ +\xa4\x9e\x53\x6d\xcd\xf4\xf7\xf6\xe0\x5e\x11\x60\xb8\xef\x12\xa7\ +\xda\x9a\xa9\x89\xd4\x9b\x84\xaa\xaa\x92\xcf\xeb\x24\x12\x09\x63\ +\xed\x9a\xb5\x00\x4d\x62\x36\x9b\xdd\xe2\xf7\xfb\x71\xb9\x5c\x82\ +\xae\xe7\x29\xcc\xdf\x78\x31\x41\x55\x55\x2a\x4a\x03\x74\x3c\xdb\ +\x40\x7f\x6f\x0f\x6f\x3d\x53\x4f\x45\x69\xc0\xf4\x01\xe4\xf3\x3a\ +\x08\xa0\x28\x8a\x10\x0c\xae\x22\x93\xc9\x96\x5a\x1d\x0e\xc7\xee\ +\x48\x24\x62\xb6\xcb\xcd\xa0\x28\x8d\x7c\x7d\xb2\x71\xd9\xdf\x65\ +\x75\x75\x35\x4e\xa7\xa3\xc5\x0a\x10\x8b\xc5\x98\x9c\x9c\xbc\x79\ +\xdf\x16\x2f\xee\x36\x7c\x5e\xef\x5c\x6b\x16\x3f\x10\x34\x4d\xc3\ +\xe3\xf1\x70\xee\xdc\x39\x1c\x0e\x07\xb2\xab\x84\x52\x57\x19\xa2\ +\x28\x22\x49\x12\x82\x20\x20\x49\x12\x2e\x97\x0b\x55\x55\xf1\xf9\ +\x7c\x44\xa3\xd1\x25\xb6\x48\x2c\x2e\xdc\x4d\xd7\x75\x2c\x16\x0b\ +\x86\x61\x20\x0a\x16\xb2\xd9\x2c\x9a\xa6\x61\x18\x06\x36\x9b\xed\ +\x96\xca\x6f\x84\xa9\x58\x10\x04\xd2\xe9\x34\x75\x75\xb5\xe8\x7a\ +\x1e\x8b\xc5\x82\xae\xeb\x66\xa0\xdd\x6e\xe7\xbf\xc0\x0a\x10\x8d\ +\x46\x0d\xbf\xdf\x3f\xff\x4c\x79\x96\x4d\x72\xbb\xdd\x00\x84\xc3\ +\xe1\x25\x76\x6c\x6c\xcc\x00\x04\xe1\x89\x27\x1f\xdf\x13\x08\xf8\ +\xcf\xf0\x3f\x62\x6c\x6c\x7c\xfb\xdf\xe7\x60\x9f\x53\x70\x22\xd1\ +\x6a\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x02\xd3\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x02\x65\x49\x44\x41\x54\x78\xda\xb4\ +\x55\x4d\x68\x13\x51\x10\x9e\x99\xcd\x6e\x4d\xd1\x8b\x3f\x07\x11\ +\xc5\x43\x6f\x6a\xfd\x49\x1a\x49\x85\xf6\x62\x0f\x16\x0f\xfe\x5c\ +\x6c\x1a\xc1\x83\xd1\x0a\x42\x0f\x4a\xa1\x45\xbd\xfa\x73\xe8\xa1\ +\x0a\x92\xd4\x43\x0f\x36\xa5\xa0\x3d\x48\x0f\x6a\x0c\x68\xa5\xa5\ +\x31\xa9\xe2\xc5\x4b\x3d\xb7\x8a\x52\x28\x85\xc6\xd6\x7d\x6f\x9c\ +\xdd\x6c\x50\x4a\xd0\x6c\x6a\x1f\xcc\xee\xc7\xee\xec\xf7\x66\xbe\ +\x99\x37\x8b\xcc\x0c\x1b\xb1\xa8\x96\x8f\x22\x5d\xc3\x27\xc2\x97\ +\x07\xeb\xff\x3b\xb1\x24\xd9\x8a\x60\x1e\xfb\x9b\x0f\x56\x2b\x85\ +\x13\xa5\xe6\xe5\x37\xa8\x83\x45\x4d\xd0\x6b\x30\x46\x15\x53\x7c\ +\x66\xb0\x63\x71\x5d\x11\x6b\x0d\xa7\x88\x83\x7d\x02\x0d\x4d\xdc\ +\x2f\xf1\xec\x92\xd8\x4f\x37\xc6\x46\xb1\x92\x7f\xe0\x5f\x84\xc1\ +\x1b\xb7\xf7\xec\xff\xba\x7b\x4e\x05\xb8\x17\x6d\x9a\xd4\x80\x39\ +\x00\x35\x0e\x88\x7d\x84\xdc\x0f\x0c\x4f\xc5\x6d\xc9\x77\xc4\x8d\ +\x5f\xf6\x26\xe4\xd6\xfd\xe1\xe1\xf9\x05\x21\xbb\x40\xc4\xf7\xd5\ +\xa2\xb5\x55\x9e\xbd\x76\x74\x0c\xd4\xdb\x87\x7d\x49\x11\xb9\x94\ +\x0e\x45\x13\x23\xa8\x0c\x35\x20\x84\x27\x9b\xbb\xd2\x07\xf3\xa9\ +\x58\x4e\xc8\x3e\x5b\x5b\x56\xdb\x04\xff\x10\xb7\x5c\xc0\xd4\x47\ +\x7d\x11\x8b\x70\x2d\x1a\x75\x5b\x21\x19\xff\x86\x0c\xa3\xab\x8a\ +\xcf\x78\xaf\xb2\x04\xe4\x75\x04\x4e\x02\x53\xc8\x5f\xf1\x58\x65\ +\x34\x70\xbb\x5b\x38\xe0\x69\xd9\x29\x5c\x6a\x35\x63\x42\x0a\xd7\ +\x52\xc2\xf4\x49\xf0\x3e\x7f\xc5\x23\xb4\xe5\x62\xbb\x50\x96\x10\ +\x78\x7d\xa9\x51\xb2\x29\x63\x25\xd8\xf0\x15\xb1\x54\xbf\x9d\x89\ +\x27\xbc\x88\x43\x8c\x50\x70\x93\x47\x68\x66\xc0\x29\x0f\x37\x08\ +\x9e\xf5\xa7\x31\xe3\x8b\x99\x9d\xb3\xe3\xad\xb7\xb2\xdb\x05\x9f\ +\x25\x86\x8c\x9b\x3e\xc2\x71\x79\xf9\xd6\x2b\x84\xa3\x75\xbe\xa6\ +\x93\x17\x4e\x3c\xbe\x26\xa1\x99\x85\x54\xe7\x9d\x43\x57\xd2\x47\ +\x4c\x5b\x8f\x19\x44\xd1\x22\xc1\x77\x4b\xf3\x94\x48\x71\xf3\x5d\ +\xb2\xf3\xb9\xef\x3e\x46\xa0\x0c\x20\xdd\x8d\x5c\x1c\xd9\x66\x29\ +\x1e\x22\xcb\xe8\x99\x4e\xc6\xe6\x85\xf0\x00\x68\xde\x41\x80\x1f\ +\xd7\x35\x2b\x9a\x12\xc3\x8f\x44\xd3\x65\x8d\xd4\x4d\x4a\xbe\x33\ +\xf4\x4b\x32\x30\x8b\x0a\xee\xc9\x46\xaa\xf6\xe9\x86\xfc\x44\x14\ +\xbe\x5e\x48\x76\x38\x0d\x72\x55\x7a\x7b\xb3\xb4\xcb\x50\x25\xd2\ +\xaa\x66\x45\x79\xe5\x53\xf1\xdf\x3a\xa2\x6e\x90\xcb\x40\xee\xc1\ +\xb9\x79\x5f\xf3\x18\x25\x67\xcf\x0c\xb1\x3a\xb1\xe0\x9f\x66\xaf\ +\x2c\xbd\x9a\x7b\x3f\xf6\x0c\x4b\xcb\xf5\xad\x4a\x63\x71\x74\x32\ +\xd9\xe4\x59\x9d\x33\xe4\x2a\xec\xbf\x22\xe6\xcc\x8b\xa2\x63\xc2\ +\xa3\xaa\x21\x2e\x43\xe7\x54\x99\xa5\xd1\xb1\x76\x94\x80\x73\x2a\ +\x7f\x82\x77\x0a\xd7\xf2\xe0\x46\xfd\x4c\x7f\x09\x30\x00\xef\x78\ +\xf6\x1a\x18\x1d\xd4\xb7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x03\xd2\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\ +\x67\x9b\xee\x3c\x1a\x00\x00\x03\x64\x49\x44\x41\x54\x38\x8d\xb5\ +\x95\x4f\x4c\x5d\x45\x14\x87\xbf\x33\xf7\x3e\x1f\x94\x20\x2d\xa5\ +\x24\x86\x62\x5d\xb8\xd3\xa8\x15\x8a\x1b\xbb\x50\x97\xea\x42\x2d\ +\x2d\xbe\xd4\x5a\x52\xc0\xa6\x56\x53\x95\x36\x52\x13\xca\x8b\x2e\ +\xd4\x45\xb5\x75\x51\x84\x98\x58\x4b\x11\x81\x1a\x4d\x8a\x1b\x8d\ +\xe9\xaa\x12\x20\xd8\x26\x26\x98\xaa\x2d\x89\x42\xd2\xa8\x68\x0a\ +\xf2\x78\x73\xe7\xde\xe3\xe2\xfd\xa1\xc0\x23\x69\x8d\x9d\xe4\x64\ +\x4e\x66\xce\xfd\xce\x6f\xce\xcc\x9d\x11\x55\xe5\x56\x34\x73\x4b\ +\xa8\x37\x0a\x7e\xff\xf8\xd1\x77\x1a\xf7\x3c\x7f\x6d\xf7\xee\x5d\ +\x2f\xfe\x6f\xe0\x64\x32\xb9\x26\xb0\xf6\xb5\xd6\x57\x0f\x96\x86\ +\x1a\xbe\x55\x28\xa6\x6e\xef\xe9\xc7\x6a\x5f\xe8\x8a\xdd\x14\x78\ +\x72\xf2\xe7\x26\x04\x6f\xe3\xc6\x6a\xc2\x30\x2a\x2a\x14\xa3\x11\ +\x7b\x8c\x96\xb4\xdf\x30\x78\xe7\xae\xc4\x1b\xb1\xf8\x6d\x6f\x7b\ +\x9e\x57\x70\x5e\x92\x49\x03\x60\xbd\xe8\x80\x2a\x4d\x35\xcd\xbd\ +\x35\xb9\x39\x3f\xe7\xec\x78\xb6\xde\x8a\x88\x00\x44\x51\xa4\xf1\ +\x78\xfc\xc3\xb2\xb2\xb5\x8d\x07\x5e\x7e\xa9\xf8\xec\x57\x43\x05\ +\xc1\x35\xbf\xdd\xfd\xde\x96\xe6\x9e\xb3\x17\xbb\x9f\xfb\x7a\x4b\ +\x4b\xef\x2b\x46\xf4\xe3\x7b\xb7\x0f\xd4\xfc\xd0\x5f\x6f\xf3\x8a\ +\x55\x35\xd6\xd1\xde\xe1\x77\xb4\x77\xf8\x40\xac\xb2\xb2\xb2\xf1\ +\xf0\xeb\x6d\x25\xe5\xe5\x15\xab\x2f\xc9\xe8\x49\x44\xde\xdc\xba\ +\xaf\x77\xdd\x68\x57\xa2\x0f\x34\x88\x97\x2d\x3c\x0c\xe0\x6f\x6f\ +\xd8\x56\x06\x5c\x05\x28\x2d\x2d\xcd\x7f\x73\xb0\xf5\x50\xc9\xfa\ +\xf2\xf5\x38\xe7\x56\xf0\xea\x5a\x7a\x5b\x8d\xca\xa9\xb1\xee\x9d\ +\xe3\x75\x2d\x3d\xe7\x16\x02\x79\x1a\xf8\x48\x22\x86\x8d\x31\xb5\ +\xc0\xb7\x06\x10\x20\x0e\x50\x55\x55\x4d\x55\x55\x35\x00\x1b\x2a\ +\x36\xe0\xc2\x90\xd9\xb9\x59\x54\x15\x6b\x2d\x90\xf9\x99\x04\xfd\ +\x25\x92\xb0\x21\xb3\x54\x33\x82\xe8\xfd\x00\x2a\x32\x26\x4a\xed\ +\x92\x1a\x03\x4c\x4d\xff\x9a\xf7\xaf\x4c\x5e\x06\x20\x08\x6c\xb6\ +\x0f\x16\x03\x35\xba\xa0\x22\x8f\x02\x84\x84\x13\x82\xd9\x0f\x40\ +\xe4\x7d\xaf\x26\x6c\x5b\x01\x4e\xcd\xa7\xf2\x7e\x46\xe1\x2a\x60\ +\x4f\x6e\x47\xcd\x35\x00\xdf\xf3\xd7\x46\x91\xce\x64\x96\xe2\x2a\ +\x04\xf9\x63\x25\x38\x95\xc2\xf7\x7d\x8a\x8a\x8a\xf2\x60\x17\x04\ +\xa0\x60\xb3\x09\x00\x22\x95\x27\x44\x64\x18\x20\xd4\xf0\x1e\xc4\ +\x5c\x04\x10\x91\x5a\x45\xc6\x60\xd9\x39\x9e\x4f\xcd\x33\x9f\x4a\ +\xe1\x9c\x23\x9d\xb6\x58\x6b\xb1\x81\x45\x01\x17\x2c\x6e\xa2\xa8\ +\x0c\x8d\xde\x71\x69\xe8\x91\xe4\x39\x5f\xd4\x3c\x65\x94\xef\x32\ +\x35\xa6\x56\x45\x33\xe0\xfe\xbe\xc1\xbf\x81\x62\x80\x74\x3a\x4d\ +\x10\x58\x9c\x73\x0c\x0e\x0e\xfc\x13\x45\x8b\x9b\x66\xad\xcd\xed\ +\x1d\x23\x5d\x89\x0b\x7a\xe4\x48\x34\x37\x3d\xb5\x5f\xd1\xa9\x91\ +\xae\xc4\x37\xf7\xed\xeb\x5d\x87\xea\x56\x5f\xe4\x7c\x5e\x71\x7f\ +\xdf\xe0\x02\xc0\x89\xce\x13\xe1\xf1\x0f\x8e\x85\x00\xd3\xd3\x53\ +\x5f\xf4\x0f\xf4\xcf\xaf\x29\x2e\x41\x51\x02\x17\xb0\xe2\x82\x8d\ +\xe4\x0a\x62\x0e\x03\xc4\x9d\x1e\x43\xe4\xf4\x70\x67\xe2\xa7\x25\ +\x35\xfe\xfd\xea\x9f\xa5\xb3\xb3\xb3\x9e\xb5\xd6\x38\xe7\xcc\xc4\ +\xc4\xc4\x42\xfd\x8e\x67\x66\x4e\xf5\x7c\xd2\xbc\xe9\xae\x4d\x45\ +\x81\x0d\x60\x19\x7a\xb4\x3b\xf1\x25\x40\x5d\xd3\xa7\x4f\x62\xe4\ +\xa1\x58\x49\xec\x81\xdc\x9c\x9f\x2d\xba\x0f\x84\xb9\x12\x66\xfb\ +\xe2\x81\xcf\xce\x74\x34\x24\xb6\xcd\x55\xdf\x59\xdd\x16\x04\x01\ +\xab\x3d\x0a\x6a\xc2\xbd\x02\x8d\xe7\x8f\xd6\xe7\x8f\x95\x9f\xbd\ +\x1f\x4c\xd6\xbc\x6c\xb2\x9c\xb9\x4b\x3f\x5e\xee\xdc\xbc\xf9\xc1\ +\x43\x33\x7f\xcd\x78\x22\x62\x0b\x81\x47\xbb\x76\x3e\xbe\x7c\xcc\ +\x68\x46\x86\x02\x51\xd6\x42\xc0\x01\x69\xc0\x8d\x8f\x8f\xcf\x6a\ +\x14\x9d\x3c\xf3\xf9\x80\x13\x91\x77\x0b\x4a\x2e\xd0\x44\x55\xc9\ +\xaa\xce\xa9\xf5\xb2\xe5\x90\xeb\x12\x86\x40\xa0\xaa\xd1\x4d\x81\ +\x97\x0c\x64\x92\xc8\x75\x43\xaa\xff\xe1\xc5\xfd\x17\x97\x17\x8c\ +\x5e\x91\xca\x0c\xd7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ +\x82\ +\x00\x00\x4c\xf1\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x6f\x00\x00\x00\x6f\x08\x06\x00\x00\x00\xe2\xc5\x9e\x60\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x4c\x83\x49\x44\x41\x54\x78\xda\xec\ +\x7d\x07\x98\x94\xe5\xd5\xf6\x3d\x7d\x76\x76\xb6\xf7\xde\x77\x59\ +\x76\x61\xe9\xbd\x0b\xa8\x60\x47\x8d\x9a\x68\x6c\x5f\x4c\x34\x6a\ +\xbe\xc4\x98\x98\x5e\x4c\x8f\x5f\x12\x63\x89\x51\x89\x5d\x6c\x51\ +\x04\xa4\x4a\xef\x6d\x17\x58\x60\x17\x96\xed\xbd\xb7\xe9\xed\x3f\ +\xe7\xbc\x33\xeb\x02\xbb\x08\x88\x89\xd7\x7f\xf9\x9a\x09\xb3\x33\ +\x6f\x7d\xce\x39\xf7\xb9\x4f\x79\x9e\x51\xdd\x7d\xf7\xdd\x7f\x06\ +\xf0\x2d\x7a\xe9\xf0\xe5\xf6\x45\xdd\xfa\xe9\xf5\xec\xd2\xa5\x4b\ +\x7f\x3c\xf8\x43\x2d\x0b\x2e\xdc\x74\xa5\x49\x05\xf5\x17\xe2\x2e\ +\x55\x2a\xf9\x7f\xa8\xd5\x6a\xf9\xd7\xed\x71\xc1\xe5\xb2\xd1\xcb\ +\x4e\x2f\x07\x7c\xf4\xa9\x5e\x67\xa4\x6f\x94\xef\x78\x77\x8d\x46\ +\x07\x9d\xce\x00\xbd\xde\x44\xc7\xa9\xe0\xf1\x78\xe5\x78\x8f\xc7\ +\x03\x87\xd3\x2a\xc7\x79\xbc\x1e\xf9\x4e\xa3\xd6\xc9\xe7\x2e\xb7\ +\x93\xde\x6b\x60\x30\x18\xe5\x7c\x7c\xbc\x4a\xa5\x86\xcf\xe7\xa3\ +\x97\x57\xfe\xbd\x54\x5b\xe0\x5c\xfc\x0f\xbf\xd3\xa8\x55\x17\x78\ +\xbc\x3b\xa2\xdb\xb6\x96\x0d\xec\x2c\xe1\xe9\x14\xc1\xa9\x3e\xd3\ +\xcd\x79\xbd\xf4\xd0\x5e\x3a\x0b\x9d\x8a\x07\x4e\x75\x41\xa7\xf3\ +\xc9\xc0\xa9\x69\x30\xd5\x2a\x0d\x0d\xb4\x1b\x1d\x5d\xf5\xe8\xe8\ +\xac\x43\x67\x47\x2d\x9a\xdb\xaa\xd0\xdd\xd3\x84\xfe\xfe\x2e\xda\ +\xd3\x87\x50\x73\x24\x1d\xa3\x86\xd5\xd6\x2d\x83\x11\x6c\x8a\x40\ +\x74\x64\x32\xd2\x52\x8a\x90\x97\x33\x03\xa6\xa0\x30\x34\x36\x97\ +\xe1\x64\xe5\x1e\xd4\x35\x54\xd0\xb9\x9a\x44\x88\x7a\xad\x01\xc6\ +\xa0\x10\x78\x48\x11\x9c\xce\x6e\xba\x57\x23\x42\x43\x13\x10\x1d\ +\x95\x8c\xb8\x98\x14\x44\x45\x24\x22\x36\x3a\x43\xce\xc7\x1b\xdf\ +\x87\x97\x84\x7e\xb1\x1b\x8f\x89\xd7\xe3\x53\x84\x47\x03\x62\x32\ +\xea\x49\x49\x34\xb0\xb3\x32\x79\x2e\x60\xc4\x95\xc1\x3c\x0b\x19\ +\xb5\x9f\x45\xa3\x3c\x74\x63\x6e\x97\x57\xee\x42\xad\xf6\x21\xcc\ +\x1c\x8c\xa0\x20\x03\x7a\x2d\xfd\x34\x38\xde\xf3\x10\xa0\x4f\x94\ +\x46\xab\xd5\xd3\xf1\x3a\xd8\x48\x18\xcd\x2d\x15\xa8\x6f\x3a\x86\ +\xf2\x93\xdb\xd1\xd6\x5e\x0b\xad\x46\x8f\xf0\xb0\x38\x44\x46\xa5\ +\x20\x2b\x63\xa2\xec\x5f\x53\x77\x58\x2c\x31\x3e\x2e\x9b\xae\xa1\ +\x42\x67\x67\x3d\x8e\x95\x6f\xc3\xd1\xb2\x2d\xb0\x39\x7a\x91\x9f\ +\x33\x1b\x1f\xad\x7f\x06\x2d\xad\xe5\x88\x0d\xd5\x60\x62\x66\x18\ +\x92\x63\x82\xd1\xd9\xe7\x44\x63\x7b\x3d\x46\x65\x84\xa1\x20\x33\ +\x0d\x2d\x9d\x56\x54\xd4\xd7\xa3\xb4\xea\x18\x36\x97\x3a\xe1\x26\ +\x85\xc8\xce\x9e\x86\x9c\x8c\xb1\x48\x4a\xc8\x27\x61\x26\x43\xab\ +\x0b\x22\x0b\x77\x92\x20\xdc\x17\xac\xe0\x5e\xd2\x66\x93\x49\x8f\ +\x84\xb8\x18\x24\x65\xe8\x90\x92\x1c\x8b\x8e\x26\x27\x36\x6f\x3d\ +\x06\x27\x9d\x53\xab\xd1\x7c\x26\x8b\x3e\x2f\xe1\x79\xbc\x5e\x81\ +\x29\xf5\x19\xe6\xae\xd6\xf8\x10\x19\x6a\x42\x6a\x52\x2c\xd2\x72\ +\x82\x91\x91\x15\x85\x8e\x7a\x2f\xd6\xac\x39\x4c\x82\xe8\x25\xa1\ +\x68\xce\x69\xad\x1a\xba\x79\x9d\xd6\x08\x97\xc7\x81\xfa\xfa\xc3\ +\x38\x7c\x64\x0d\x2a\x6b\x0f\xc2\x62\xe9\x26\xed\x0f\xc7\xc8\x11\ +\xb3\x91\x9b\x39\x19\x89\x09\x23\x10\x1d\x9d\x02\x53\x70\x38\x59\ +\xb7\x07\x5d\x3d\x2d\xf2\xaf\x81\x60\x92\x37\xab\xb5\x07\xc7\xca\ +\xb6\x61\xd7\xbe\xb7\xb1\x73\xf7\x5b\x28\xaf\xd8\x8f\xce\xf6\x93\ +\xb8\x6e\x46\x12\x1e\xbe\xa3\x08\xd3\x46\x46\x43\x1f\xa4\x81\xcf\ +\xe9\x41\x5b\x9f\x0b\xb1\x51\x46\x20\xcc\x40\xa3\x0b\xd8\x9b\xfa\ +\x70\xa4\xbc\x0b\xdb\x8b\x9b\xf0\xef\x1d\x75\x38\x58\xb6\x1d\x15\ +\x15\xdb\xe9\x7a\x99\x18\x35\x72\x0e\xf2\x48\x98\xe1\x61\x49\x74\ +\xaf\x5a\x81\xdf\xf3\xb5\x38\x0d\x3d\xfb\xf8\xb1\x89\x98\x30\x39\ +\x19\x29\x89\xf1\x30\x47\x28\x63\x51\xba\xaf\x15\x1e\x07\xc1\xb3\ +\xfa\xb3\xc3\xb2\x76\x78\xab\xf2\xd2\xcd\x7a\xc4\xbc\x0d\x3a\x1d\ +\x68\x8c\x05\x16\x3f\xb1\x64\x15\xc6\x14\xa5\x63\xee\x15\x69\x48\ +\x8c\x8f\x06\xa1\x1d\x18\x61\x3c\x34\xf0\x9f\xee\x3f\x7d\xa4\x08\ +\x5a\xf1\x35\x1d\x9d\xb5\xd8\x5b\xfc\x01\x4e\x56\xec\x46\x5f\x7f\ +\xc7\xc0\x1e\x93\xc6\x5f\x8f\x39\x33\xef\x20\x0b\xb6\x63\xc7\xee\ +\x65\xf0\x95\x79\x31\x22\x77\x06\x8c\xc6\x60\xf1\x59\xfd\x96\x4e\ +\x82\xc6\x13\x70\xd1\xf7\x19\x19\x13\x30\x71\xc2\x75\x48\x4b\x1b\ +\x85\x77\xde\xff\x2d\x1a\x1b\x4b\xf1\x83\xdb\x0b\xf1\xfb\x87\x27\ +\xa2\xd5\xe1\xc1\xf2\xed\x75\x28\x3b\xd9\x85\xdc\x94\x10\xa4\x64\ +\x85\xa1\xc3\xe2\x24\x0c\xf2\x91\xa2\xf4\x61\xed\xae\x06\x5c\x33\ +\x25\x09\xff\xfb\xd8\x34\x5c\x5d\xdc\x8a\x6f\xfd\x62\x2b\x36\x14\ +\xb7\xa0\xbd\xbd\x12\x9b\xb6\x56\x92\x45\x6f\xc6\xd8\x51\x8b\x50\ +\x90\x3f\x97\x94\xd1\x00\xb7\xdb\xe5\x47\x8c\x73\x09\xcf\x8b\x30\ +\x93\x11\x33\x67\xe5\x22\x3d\x2b\x02\x6d\xad\xbd\x38\xb6\xbb\x15\ +\x1a\x6f\x30\x54\x3e\xf6\xd1\xaa\x4f\x3b\xc5\xc5\x09\x8f\x85\x66\ +\xb7\xbb\x10\x64\x30\x11\x74\x84\x20\x31\xd5\x84\xb8\xc8\x38\x1c\ +\x3f\xde\x88\xba\xc6\x76\xf1\x67\x6c\x35\x46\xa3\x06\x63\xc6\xc4\ +\x23\x89\x04\x57\x53\xdd\x83\xd2\xd2\x2a\xb2\x16\x33\xa2\xc3\xc2\ +\xa0\xd3\x6b\xce\x09\x31\x4c\x1a\x34\xa4\x10\x27\x4f\xed\xc6\xf6\ +\xdd\xaf\x91\x10\x4e\xca\xe7\x05\x64\x69\x26\x53\x18\x8e\x9f\xd8\ +\x2e\xd7\xd1\x6a\x83\xd0\xdb\xd7\x4e\x03\xe6\xc0\xc1\x43\xab\xc9\ +\x32\xd7\x23\x24\x34\x06\x4e\x82\x4c\x83\x3e\x08\x66\x33\x59\x7a\ +\x47\x1d\xb6\xed\x7a\x03\x23\xf3\x66\x62\xda\x94\x5b\x30\x71\xe2\ +\x57\xe0\x68\x7b\x05\xf7\x2f\xc9\xc2\xf2\x2d\x75\xf8\xed\x3f\x0e\ +\xa2\xb2\xb1\x1f\xb3\x8b\x62\x51\x56\xd1\x85\x86\xb7\xfa\xc1\x5e\ +\xcc\x47\xfa\x55\xd7\x64\x45\x5a\xbc\x19\x57\x4f\x4a\x04\x2c\x2e\ +\x1a\x70\x0d\xdd\x9b\x1a\x45\x04\xb3\xb7\x5d\x96\x86\x57\xd7\x57\ +\xa3\xb4\xba\x12\xeb\xdb\x9f\x43\x63\x53\x19\x66\x4e\xfd\x1a\x42\ +\x43\xe2\xe8\xfa\xb6\x4f\xe1\x00\x2a\x18\x68\x7c\x74\x46\x17\x76\ +\x6e\xac\xc5\xc6\x4d\x65\x04\xe1\x9d\x98\x3a\x3d\x13\x45\x85\xe9\ +\x04\xc5\x34\xec\x76\x96\xe2\x05\xcb\x8b\x8f\xf0\x0c\x29\x3c\xf6\ +\x61\xc1\x66\x3d\x26\x4c\x49\x20\x2d\x4f\x47\x72\x4a\x28\xe2\x92\ +\x82\xe4\x98\xa6\xbf\xf6\xa1\xda\xdd\x0e\x95\x4e\x51\x19\x86\x11\ +\x22\x79\xd8\xb7\xa7\x1a\xef\xbd\x75\x14\x4d\x2d\x1d\x98\x31\x27\ +\x1d\xf1\x53\xc2\xa1\xd5\x6b\x87\x55\x2c\x26\x24\x5a\xad\x96\x2c\ +\x61\x3b\x36\x6c\xfa\x27\x09\xa7\x4d\xb9\x11\xf2\x7b\x13\xc7\x5d\ +\x8b\x84\x84\x3c\x64\xa6\x8f\x15\xe6\xd8\xdd\xdd\x44\xfb\xab\x31\ +\x73\xda\x57\x91\x9b\x33\x0d\x55\xd5\x07\x69\xe0\x1c\x34\x80\x51\ +\xe4\xef\xb2\x88\x68\xa4\x11\x64\x76\x61\xe3\xd6\x97\x70\xf8\xe8\ +\x06\x34\x34\x55\x61\xd1\x82\x7b\x71\xf7\xb5\x37\x60\xc3\xd6\x2d\ +\xf8\xce\x33\xe5\x8c\x8c\x78\xe2\xdb\x13\x70\xfb\x15\x19\xb0\x5b\ +\x5d\x38\x48\x02\x2c\xab\xea\x46\x0f\xf9\xbf\xf4\xe4\x30\x5c\x39\ +\x2d\x11\x91\xf4\xcc\x20\x01\x1b\x6c\x6e\x3c\xb4\x24\x0f\x29\xf1\ +\x26\x8c\x9a\x94\x00\xab\xd3\x47\xc2\x3b\x42\xe3\xe2\x92\xf3\xdb\ +\xec\x16\x5c\x36\xe7\x1e\x84\x13\xc9\xe1\xfb\x18\x4e\x3d\x55\x6a\ +\x2f\xbc\x6e\x23\x2c\x5d\x06\x1c\xad\x38\x82\xf2\x13\xad\x30\x1a\ +\x34\x84\x56\x3e\x61\x74\x2a\xd5\x45\x91\x43\x3e\x28\x98\x5e\x8c\ +\xdd\x4e\xd6\x11\xed\x60\x9c\x66\x3a\x9d\x91\x96\x8c\x1b\x6f\x1c\ +\x07\x83\x49\x0b\xb7\xd7\x8e\xb2\xc3\x9d\x88\x8a\x36\x33\xb9\x3b\ +\x8d\x80\xf8\xbc\x2a\xd8\x7a\x0d\x44\x00\x6a\x51\xdf\xd8\x01\x0d\ +\xdd\x94\x8e\x78\xab\x5c\xc2\x37\x1c\x69\x52\x89\xe0\x4e\x56\xed\ +\xc3\xba\x8f\x9f\x21\xe8\xeb\x42\x72\x62\x3e\xd1\xf5\x60\x11\x46\ +\x78\x58\xbc\x28\x45\x5e\xce\x4c\x62\x92\xbd\xe4\xf0\x5d\x02\xc1\ +\x0c\xa7\x2a\x62\xa2\xd3\xa6\x7c\x85\x7c\xa4\x81\xa0\xd4\x46\x97\ +\xa0\x01\x22\xf8\x8c\x08\x4f\xc2\xfc\xb9\xdf\x20\x41\x37\x93\x02\ +\x9d\x82\xdd\xd6\x88\xdc\xd4\x14\x3c\xf5\x46\x3d\xfa\xec\x6e\xfc\ +\xf6\xde\x22\xdc\x77\x73\x1e\x40\xc4\xca\xa4\x53\x63\xfe\xe4\x04\ +\xcc\x27\x98\x44\xb0\x0e\xd6\x86\x7e\x54\xb5\x58\x10\x4a\xbe\x5c\ +\xab\x51\x23\x84\x06\x78\xd1\xac\x64\x20\x88\xb4\xd2\xee\xc1\xd5\ +\xb4\x5f\x4d\x53\x3f\x11\x1d\x12\x5e\x55\x17\x21\xc5\x2e\xba\x27\ +\x1f\xae\xbe\xfc\x61\xba\xe7\x50\x21\x4d\x43\x09\x82\xc7\xc6\xa3\ +\xee\x87\x4a\xdf\x2d\x28\x13\x64\xd4\x22\x27\x2f\x14\x85\x45\xc4\ +\x92\x5d\x6a\x42\x12\x37\x2e\x90\x8e\x33\xda\xf1\x01\xa1\xf4\xb2\ +\xf8\x3f\x72\x68\x07\x13\x3f\xf6\x54\x71\x89\x6a\xba\x29\x17\xb6\ +\xaf\x6a\x24\xa8\x2a\x87\x95\xe0\xe4\xe6\x5b\xc6\x09\x8b\x1c\x0c\ +\x85\x2e\x2f\x29\x80\xbe\x93\x84\xa6\x87\xde\xa0\xc3\xc8\x82\x70\ +\xcc\x98\x9d\x0c\x8d\x4b\x0f\x17\xf9\x19\xd5\x10\x12\xd4\x11\x73\ +\xab\x6f\x3c\x8a\x75\x1b\x9f\x25\x2d\xee\xc7\xc2\x79\xdf\x20\xa7\ +\x7e\xad\xc4\x55\x2e\x82\x46\xad\x4a\x8b\x5e\x22\x23\x27\x2a\xf6\ +\x20\x35\x65\x14\x22\x22\x12\xe8\xfc\x1a\xf4\xf4\xb6\x62\xef\xfe\ +\xf7\x10\x19\x9e\x8c\x09\xe3\xae\x82\x39\x38\x92\x08\x51\x3f\xb1\ +\x40\x87\x58\x40\x88\x39\x9a\xe0\x68\x3e\x9a\x5a\x6b\xc9\x52\x75\ +\xf4\x39\xf1\x46\x1a\x9c\xd4\x18\x33\x6e\xbc\x2c\x83\x69\x1f\xd0\ +\x43\xf7\xab\x65\x5a\x4c\x8f\x6c\x54\xe3\xd0\xfe\x66\xfc\x73\xf9\ +\x09\x64\x24\x9a\x31\xf2\xd6\x91\xca\xc3\x3b\x55\x58\xbb\xbd\x5e\ +\x10\x68\xe1\xc4\x04\x8c\xcd\x8b\xc4\x13\x8f\x4c\x86\x36\xd4\x80\ +\xe6\xba\x3e\xfc\xe2\xe9\x7d\x78\x73\xf3\x6e\x6c\xdc\x16\x8e\xcb\ +\xe7\xde\x47\xe8\x10\x44\x8a\x64\x95\x30\x67\xf0\xe6\xb4\x7b\xa1\ +\xf5\x51\xcc\x49\x9e\xd5\xe3\x75\x21\x2b\x2b\x06\x77\xdf\x37\x41\ +\x8c\xe0\xd0\xee\x36\x7a\x56\xf7\xc5\x5a\x5e\x58\x00\x24\xe9\xe5\ +\xfe\xe4\xaa\x62\xd2\xc4\xc8\xec\x91\xe4\xc3\x3a\xb1\x61\xe3\x3e\ +\x94\x1e\x6e\x45\x77\x97\x5d\x98\x9d\x30\x47\xbf\xec\x1c\x0e\x2f\ +\xcc\x86\x30\x22\x1c\xc1\xb0\xd3\xcd\x67\xa4\xc4\xe0\xf6\xaf\x4f\ +\x27\x9a\x9d\x41\x0f\xe3\x84\xdd\x61\x3f\x4b\xb3\xd8\x62\x3a\x3a\ +\x6a\x48\x70\xcf\x90\x42\x74\xe1\xf2\x79\xdf\x42\x7a\xea\x38\x1c\ +\x3d\xbe\x19\x7d\xbd\x6d\x42\x5e\xd4\xc4\x3e\x77\xef\x7d\x0f\x0d\ +\xcd\xe5\x64\x85\xb1\x64\x59\x6e\x51\x81\x70\x12\xe2\xb8\xa2\x2b\ +\x50\x55\x53\x82\x55\x6b\xff\x46\x90\xd7\x46\x3e\xc5\x24\xd0\x6a\ +\x0a\x32\x8b\xff\xe3\x41\xe2\x70\x23\x3c\x82\xe2\xb4\x60\x2d\x46\ +\x91\xdf\xf2\xb8\xbd\x70\x33\xcb\xa2\xc1\x47\x30\x41\xa3\xd9\x00\ +\x0f\x3d\xc7\xe6\xbd\x8d\xb8\xf9\xe7\x5b\x91\x99\x14\x82\x9b\x16\ +\x64\x90\x55\xd3\x30\xb8\x29\xd6\x34\x13\x31\xa3\xd7\x9f\xde\x3a\ +\x86\x8d\x25\xad\x50\x13\x43\x8d\x0c\xd2\xa2\xf4\x50\x0b\x2a\x4e\ +\x75\xe1\xf7\xf7\x8d\xc7\x5d\x0b\xd3\x71\xe4\xe8\x7a\xec\xdc\xf7\ +\x8e\x28\x08\xc3\xbd\x6f\x90\xa2\x32\x59\xc9\x1b\x11\x85\x45\x8b\ +\x8b\x10\x1d\x6b\x26\xa8\xd6\x08\x7f\xd0\xa8\x8c\xa8\xad\xe9\x46\ +\xf1\x91\x0a\x52\x7c\xd7\x69\x61\x82\x32\x54\x14\x76\x11\x92\xf8\ +\xbc\xbe\x73\x59\x5e\xb8\x1f\x3a\xf5\xec\xb9\xb4\xa7\x09\x96\xff\ +\x67\xe8\x07\xef\xe6\x25\x8f\x6e\x20\xe2\x91\x92\x61\x20\x92\xa0\ +\x27\xa1\x78\xc4\x3a\xdd\x44\x68\x46\x16\x44\x62\xfe\x65\x63\x91\ +\x98\x66\x44\x09\x31\x33\xb7\xdb\x8a\x96\x46\x2b\x3a\xbb\xfb\x88\ +\xaa\x57\xa1\xdf\x6e\xf5\x67\x48\x94\x9b\xe2\xec\x05\x07\xc9\x9b\ +\xb6\xbe\x48\x8e\xfb\x14\x59\x4a\x24\x2a\x6b\x0e\x60\x17\x59\x53\ +\x4f\x4f\x33\xc6\x8f\xb9\x0a\xf3\x66\xdf\x4d\x42\xef\x27\x48\xdd\ +\x8b\x29\x13\x6e\x40\x10\x85\x0a\x5d\x9d\x8d\xd8\x5f\xbc\x92\x8e\ +\xa9\xa4\xbf\x43\x68\xa0\x74\x02\x8d\xaf\xbd\xf5\x43\xa4\x26\x17\ +\x62\xca\xc4\x1b\xa1\xa7\x41\x38\x54\xfd\x31\x8a\x0f\xaf\x45\x56\ +\xe6\x44\xb2\xd6\x54\xb2\xea\xfd\xb8\x66\x6e\x1a\x5e\xfb\xb8\x0b\ +\x3f\x78\xf2\x00\x1e\xbd\xb3\x10\x53\xf3\x63\xb0\x7e\x5b\x1d\x9e\ +\xfe\xa0\x1c\x35\x8d\x16\x1a\x4c\x15\x8e\x93\xef\xfb\xc3\xcb\x47\ +\xc4\xd2\x6e\x22\xb8\x9c\xbf\x20\x13\xe3\x46\x44\x83\x71\x63\xf3\ +\x81\x66\x2c\x9c\x99\x44\x71\x67\x3f\xee\xfe\xd5\x76\xd4\xb5\xdb\ +\x30\x3e\x2f\x0a\xe1\x26\xe2\xa9\x3e\x0f\xf6\x1d\x7c\x9f\x9e\x23\ +\x02\x13\xc7\xde\x00\x9f\xc3\x42\x42\x73\x09\x5c\xf2\x20\xde\x70\ +\x5b\x0e\x52\x53\x23\xd1\xd9\xec\x40\x5f\xbb\x06\x2d\x5d\xb5\xf8\ +\xc7\xd3\x7d\xa4\xf4\x6e\x82\x77\x3b\x11\x3a\xd5\x00\x8a\xb9\xdd\ +\x1e\x31\x06\xce\xba\x70\x9c\xec\xd1\xb8\x08\xb9\x86\x8d\x91\xcd\ +\x7e\xd8\x34\x08\x4d\x38\x8d\xb0\xb0\xa6\x92\x6f\xf0\x92\xf4\x54\ +\x74\xb2\x69\x33\xd3\xb0\xf8\xba\x6c\x44\x84\x45\xc1\x61\x6f\x10\ +\x41\xb8\x28\xf8\x9e\x3a\x33\x11\xb9\x85\xe1\xe8\xa5\x1b\x69\xab\ +\xa3\xd8\xa9\xa7\x1d\xef\xbc\xbb\x4f\xb2\x09\x0c\xb3\x2c\xb8\x40\ +\x48\xa8\x51\xeb\x05\x22\xb7\xed\x7c\x05\x15\xd5\xfb\xfc\x96\x6b\ +\x15\x9f\x96\x93\x3e\x11\xa1\x14\x80\xc7\xc5\x65\x10\x2c\x87\x50\ +\x50\x5e\x23\xfe\x4c\x10\x80\x7c\x8b\x9a\xfc\x50\x58\x48\x34\xb1\ +\x33\x3d\x62\xa2\x52\x11\x42\xef\x99\xaa\x57\x56\xed\xc7\xbe\xe2\ +\xe5\x84\x0a\x8d\x42\x70\x0e\x94\xac\x94\xec\xcc\x35\x53\xbf\x4a\ +\x1a\xad\x23\xcb\xec\xc3\xe8\xb1\xf1\xb8\xe7\xaa\x2c\x3c\xf6\xcf\ +\x62\x81\xf0\x19\x85\xb1\x78\xea\xc3\x93\x18\x95\x1a\x8a\x9f\xdf\ +\x3b\x1a\x23\x33\x23\x61\xb1\x3a\xc9\xca\x2d\x68\x6e\xb5\x10\x69\ +\x31\x08\xbc\xb2\xa1\x6a\x08\x85\xca\x1b\x7a\xd1\x43\xe8\x16\x19\ +\x11\x44\x7e\x73\x0c\xaa\x88\xd0\x1c\xad\xed\xc5\x81\x13\x9d\x0a\ +\x34\xd2\x7d\xee\xd8\xfd\x26\xb1\xee\x10\x8c\xcc\x9d\x43\x50\xc8\ +\x5e\xd8\x2d\x29\xb0\x3d\xdb\x9a\x71\x2a\xce\x86\xca\x13\xed\xe8\ +\xea\xed\x10\x92\xd6\xdc\xd4\x2b\xfe\x91\x63\x65\xfe\x97\x93\x18\ +\x5e\x52\x82\xf8\xa8\x38\x64\xe6\x1a\x90\x9e\x1d\x09\x83\x3a\x14\ +\x6b\x3f\x3a\x8a\x16\x22\x61\x43\xc4\xc8\x3c\xa2\x41\x01\xc1\x41\ +\x71\x00\x81\xf4\x14\x28\x20\x4e\xc6\x98\xb1\x99\xe8\xb4\x34\x40\ +\xe7\xd3\xa3\xb0\x20\x83\x34\x39\x12\x2d\xcd\x1d\xa4\x3d\xad\x02\ +\x0e\x06\x83\x16\x5b\x3f\x6e\x40\x45\x39\x3d\x74\x73\x2f\x9a\x3a\ +\x7a\x08\x16\x8c\xe8\xef\x73\x29\x6c\x72\x50\x6a\x4c\x2d\x42\xf0\ +\x90\xef\x5c\x81\xe2\x43\x1f\xc9\xf1\x66\xb2\xba\x39\x33\xef\x42\ +\x7e\xee\x74\xda\x4f\x43\xd6\x6d\x14\xa2\xc4\xd6\x55\x4a\x10\x6a\ +\xb3\xf7\xa1\xb6\xee\x30\x8a\x46\x2d\x20\x8b\x35\x62\x04\x85\x00\ +\x4c\x56\x38\xa2\x56\xb2\x4c\xe4\xcb\x52\x0a\x29\x70\xcf\xc3\xca\ +\x35\x7f\x45\xfe\x88\x59\x04\xc1\xf7\x63\x3d\x31\xd7\x53\x95\x7b\ +\x91\x10\x73\x15\xc1\xa9\x8e\xb4\xde\x82\xb5\x7b\x1a\x31\x97\x84\ +\xf8\xcb\xfb\xc6\xe1\xd7\x4b\x0f\x63\x52\x7e\x14\x9e\xfa\xe1\x54\ +\xc4\x46\x1a\xa0\x72\x7a\x65\x3c\xc6\x13\xc4\xc9\x79\xdd\x5e\x19\ +\x87\x32\x22\x26\xa7\xea\xfb\x51\xa9\xb1\xd0\x39\xab\x71\x05\x85\ +\x11\xd7\x5f\x99\xc5\x90\x03\x0f\x1d\x53\xd3\xe5\xc0\xdf\x5e\x3b\ +\x82\x67\x49\x11\xfa\xfa\x3b\xb1\x75\xc7\xeb\x92\x4e\x4b\x4b\x19\ +\x4d\x02\x21\x85\x23\xe9\xef\xda\xd1\x40\x98\xd6\x20\x71\xb2\x46\ +\xab\x92\x1c\x6a\x20\xf4\x65\xa5\x64\x03\xc8\x20\x58\x9f\xb3\x30\ +\x13\xa9\x49\x89\x08\x09\xd3\x88\xf2\x59\xfb\xdc\xd8\xb0\x92\x2c\ +\x5b\x35\x6c\x10\xa8\xf3\x0b\x4e\x62\x31\xcd\xd8\xb1\x63\x7f\xaa\ +\x53\x65\x6b\xb2\x72\xc2\xf1\x3f\x0f\x8e\x45\x74\x5c\x28\x4e\x95\ +\xba\x50\x72\xa8\x96\x34\xb2\x1d\xa7\x48\x7b\xb6\x6d\xae\xa6\x60\ +\xda\xa2\x58\x14\x69\x0e\x9b\x7e\x7d\x5d\x0f\xba\x3a\x6c\x0a\xd4\ +\x72\x5e\x92\xb5\x4a\xa5\x1a\x24\x38\xb5\xec\x7f\xf0\xd0\x4a\x6c\ +\x23\x0d\x65\x41\xc4\xc5\x66\x12\x3c\xde\x23\xf1\x1c\xe7\x0c\x39\ +\xa1\xec\x76\x3b\xb1\x9d\x06\x60\xf5\xba\x27\x09\x12\x4f\x4a\xd6\ +\xa4\xab\xbb\x91\x7c\x60\x10\x05\xdd\x63\x24\xc6\xf3\x78\x9c\xf4\ +\x72\x0b\x34\xf1\xbf\x3c\x00\x51\x91\xc9\x64\xad\x61\x14\x2e\xa4\ +\x23\x25\xb9\x00\xe5\x27\x77\xa0\xb5\xa3\x1e\x85\x23\x67\x62\x61\ +\xa1\x85\x62\xc2\x83\x78\xfc\x8d\x93\xb8\xe7\xf2\x4c\xdc\x74\x45\ +\xa6\x64\x57\x6e\x9e\x9b\x4a\x61\x48\x28\x54\x14\x12\x30\x9b\x64\ +\x06\xea\x65\xa1\xd1\x5b\x35\xb9\x86\x26\xb2\xc0\x5f\x3e\x5b\x8c\ +\xe3\x75\xbd\x82\x3e\xef\x6e\xae\x95\x58\x31\x9b\x7c\x63\x66\xb2\ +\x19\x1a\x42\x96\xc8\x30\x0a\xbe\x8b\x62\xa0\xa7\x07\x3d\xd5\xd0\ +\x87\x9e\xfe\x2e\x8a\x53\xab\x24\x55\x17\x1a\x12\xab\xa4\xd1\x54\ +\x81\x0c\x92\x5a\x32\x53\x67\x66\xab\x78\x87\xe9\x53\xf3\x30\x79\ +\x4a\xb6\x98\x4f\x5d\x5d\x23\xf6\x6d\xe9\x40\x58\x94\x0e\xa5\x25\ +\x6d\xe8\x25\x32\xa6\x51\x0f\x26\x41\x5e\xd8\x9c\x27\x3d\x25\x25\ +\x25\xef\xd3\x1f\x7d\xfe\x2a\x83\x55\x84\x67\xd4\xe4\x68\x42\xe9\ +\xa6\xd2\x09\x4a\x9a\xea\x2d\xd8\xb3\xa3\x12\xed\xed\xbd\x64\x05\ +\x0e\xb4\xb5\x59\xc8\xe9\xba\xe5\x26\x02\x82\x61\xed\x97\xec\xb8\ +\x66\xf8\x98\x45\x4b\x7e\xae\xa6\xae\x18\xeb\x36\xff\x03\xb1\xd1\ +\xe9\xb8\x62\xc1\xfd\x98\x46\x01\x74\x4c\x74\x1a\xc1\x66\xbf\xc0\ +\x1b\xb3\xcc\xad\x3b\x5f\xc3\xce\xbd\x6f\x23\x3c\x3c\x01\x33\x28\ +\x9e\x9b\x31\xe5\x56\x84\x85\xc5\xa0\xbc\x62\xb7\x08\xad\xaf\xaf\ +\x43\xf2\x9d\x9c\x2e\x0b\x0a\x0a\x85\x9d\x2c\xb3\xbb\xbb\x85\xd4\ +\x4e\x43\xd6\x97\x2b\x42\xe6\xf3\xf0\xc3\xc6\xc5\xe4\x22\x25\x71\ +\x04\x0a\x12\xaa\x10\x13\xd6\x01\x23\x7d\x37\x67\x6c\x1c\xd2\x63\ +\x4d\x28\xcc\x08\x43\x6c\x42\x30\x1a\x28\x3c\x68\xeb\xb0\x93\x7f\ +\xd1\x33\x3e\xe2\x70\x45\x37\xb6\x94\x70\x46\xc5\x8a\x57\x56\x9f\ +\x42\x4b\xb7\x03\x7f\xa6\xb8\xf0\xfe\x1b\x72\x11\x42\x64\x65\xed\ +\xfe\x26\xac\xdb\xdb\x8c\x09\xd9\x6c\x5d\x44\xf6\x08\x6a\xf5\x04\ +\x69\xb3\x27\x24\xe0\xab\xe4\x23\xa3\x23\xf4\xd8\xb4\xfb\x38\x21\ +\x50\x17\xf9\xe1\x02\x7f\xca\xce\x3b\xec\xb8\xb8\x09\x5e\xb5\x3a\ +\x0d\x26\x4c\x8f\x84\xdb\xae\xc6\x32\xb2\xe2\x35\x1f\x51\x10\xdf\ +\xd1\x8d\xb1\xe3\x93\x50\x71\xbc\x17\x9d\x3d\xdd\x92\x3a\xfc\x34\ +\xe1\x09\x6c\x6a\xb4\x6a\xd4\xd5\xf4\xe1\x6f\x7f\xda\x25\x75\x0b\ +\x17\xf9\x15\x1d\xc5\x26\xc2\x5c\x3e\xe1\x32\x12\xe3\xf0\xc5\x85\ +\x11\xa9\x20\x71\xdd\x99\x34\x59\x81\x4e\x2d\x9d\xc3\x8e\x83\xe4\ +\xd4\xbd\x44\x70\x38\xb0\xcd\xce\x9c\x84\x7e\x8a\xd7\x9c\x2e\xab\ +\xb0\x3b\xb6\x44\xb6\x96\x83\xe4\xaf\xa2\xc8\x9f\xdd\x70\xcd\x0f\ +\x91\x18\x37\x82\xd0\xc9\x4e\x96\x94\x87\x5e\xd2\x68\x66\x96\x23\ +\xf3\x66\x23\x29\x69\x84\x68\x32\xc7\x83\xcd\x44\x58\xd6\x6f\x24\ +\x85\x88\xcd\xc0\xdc\x19\x77\x4a\x95\xc0\xed\x72\xa2\x70\xc4\x5c\ +\xd4\x35\x96\x93\x95\xbf\x85\xb6\xf2\xa3\x98\x98\xe1\xc2\xe5\x04\ +\x79\x85\x19\x14\x1a\x91\xc5\x30\xdb\xdc\x75\xa0\x09\x8f\x3d\x57\ +\x8c\x49\xb9\x91\xf8\xe5\x37\xc6\x92\x8f\x51\xc1\x4a\x96\x57\x52\ +\xdb\x83\x55\x6f\x1c\x45\x2b\x31\xeb\xb5\x7f\x9d\x8f\xb1\x53\x29\ +\x0e\xec\x75\x60\x54\x61\x0c\x32\xe3\xcd\x78\xe0\x6f\xfb\xf0\x9b\ +\x57\x4a\xb1\x8c\x04\x18\x4e\x02\x05\x43\x2e\x1d\x17\x4b\x61\xc6\ +\xf7\xbe\x31\x1e\x1d\xed\x16\xfc\x6e\xd9\x6e\xf2\xc5\xe3\x28\x64\ +\xb9\x5c\x51\xee\x61\x4a\x4a\x1c\xc0\xab\xbc\x06\xb8\x2d\x31\xa8\ +\x26\x84\x39\x59\x59\x0d\x17\x09\x51\x13\xae\xd4\x8c\x2e\xa4\x14\ +\xa5\x1e\x4c\x57\x99\xf9\x78\x48\x30\xcc\xea\x02\x82\xe3\xcf\x99\ +\x8d\x59\x88\x88\x38\x6c\x5c\x27\x63\xea\x6e\x44\x56\x5a\x3c\xf9\ +\x2f\xe3\x90\x17\x63\xfc\x6e\x6c\x3c\x84\x9a\xfa\x52\xc9\x47\x26\ +\x27\x8e\x44\x2f\x85\x03\x9c\xa9\x50\xaa\x08\x06\xf4\x5b\x3b\x71\ +\xa8\x74\xad\x10\x90\xd9\xd3\x6f\x17\x2b\xe2\xcf\x1c\x44\x04\x1a\ +\x9b\x2b\xc9\xef\x1d\x41\x72\xd2\x48\x5c\xb3\xe8\x11\xcc\x9e\xf1\ +\x75\x22\x2b\x51\x62\x75\x5c\xb2\x49\x4f\x1b\x8b\x12\x62\x97\x9b\ +\xb7\xbf\x22\xd7\xe3\xf2\xd1\xdb\x1f\xfc\x12\x6b\x3e\x7e\x0a\x0d\ +\xf5\x47\x50\xd6\xd0\x83\xbf\x7c\x78\x0a\xb3\x1e\x5a\x87\x1f\x11\ +\x0c\x82\x14\xf1\x54\x4d\x0f\x6e\xfd\xe5\x0e\x94\xd7\xf4\x62\xd1\ +\xcc\x14\xb2\x4a\x82\x79\x12\xc0\x74\xb2\xa0\x3f\xfc\x6c\x3a\x7e\ +\xff\x8d\x31\xb0\x93\x8f\x5a\xb9\xb5\x16\xae\x16\x2b\xe9\xb7\x93\ +\xf4\xdb\x85\xbb\x6e\xcc\xc3\x0d\x33\x53\xb1\xe1\x60\x33\xd6\x90\ +\x2f\x83\x5e\xfd\x49\xb8\xdb\x49\x6e\xc3\xe9\xc6\x57\x16\xe4\x22\ +\x33\xd6\x80\xaa\x8a\x35\x84\x52\x0d\xf4\xb5\x66\xf8\xca\x0e\xb1\ +\x78\xb7\x8f\xc2\x2f\x4d\x3b\x74\x06\x8d\x54\x4d\x62\x62\x82\x31\ +\x6e\x62\x24\x82\x83\x4c\x44\x1a\xdd\xe7\x5d\xbc\x38\x8d\x6d\x32\ +\x0c\x9e\x1d\x5f\xf0\xe7\x5e\xc4\x27\x19\x91\x92\x90\x8c\x8c\x9c\ +\x10\xa4\x65\x85\x52\xa0\x11\x8c\x77\xdf\x38\x8c\xee\x9e\x46\x8a\ +\xe1\x06\xc7\x2c\x6a\xb2\x50\x37\xf9\x9c\x15\xd0\x52\x7c\x33\x61\ +\xdc\x35\xfe\xe2\xa6\x5b\x72\x7e\xfc\x00\x6a\x8a\x50\x2c\xd6\x6e\ +\xb4\xb6\xd5\x20\x22\x3c\x11\xf1\xe4\x0b\x9d\x4e\x87\x90\x1b\x9d\ +\xce\x44\x10\x56\x8d\x86\xc6\x63\x18\x55\x70\x99\x30\xcd\x3e\x0a\ +\xd2\x03\x09\xe1\x20\x62\x77\xf3\x67\xdf\x2b\xb5\xbc\xe2\xc3\xab\ +\x89\xf8\x28\xc9\x6a\x13\x91\x86\xd1\xa3\xaf\x45\x41\xce\x44\xdc\ +\x31\x6b\x37\xc1\x57\x31\x9e\x5c\x5a\x8d\x10\x93\x96\x82\x66\x17\ +\x1e\x7f\xb1\x84\x48\x97\x0d\xef\x3d\x3e\x1b\x73\x66\xa4\x28\x03\ +\xcf\x5b\x9f\x43\x54\x38\x3d\xc9\x4c\x72\xf0\xe2\xc3\x1d\xf5\x78\ +\xf0\xc6\x11\xa2\xa0\x2c\x3c\xd0\xf1\x57\x4e\x4e\xc4\x7b\xdb\x6a\ +\x89\x6d\xf6\x28\xe1\x31\x53\x69\x42\x14\xf1\x1d\x14\xfc\x17\x8d\ +\x8d\xc6\x9d\xd7\xe6\xe3\xb7\x2f\x94\xa0\xae\xa9\x92\x50\x26\x79\ +\xd8\x2c\x93\x93\xc2\x80\x20\x43\x10\x4c\x46\x23\xba\xfa\x3a\x11\ +\xa4\x37\xe0\xa6\xdb\xc6\x62\xd4\x98\x68\x58\x7b\xc9\x15\x3b\x1c\ +\xc2\x17\x3e\x73\x49\xc8\x27\x30\xe9\x45\x6e\x76\x22\x16\xdd\x90\ +\x4d\x04\x22\x86\x06\x5e\x05\x7b\xbf\x8f\x90\x88\xfc\x20\x67\x77\ +\xcf\xb8\x4b\x86\x0c\x86\xbe\x96\xf6\x66\xd2\xee\x60\x29\x70\x2a\ +\x2c\x91\xe2\x46\x12\x26\xa7\xb4\x98\x74\x98\x28\xc8\xe7\xc4\x32\ +\x97\x8e\x58\x98\x01\xa8\xe1\xef\xd8\xff\x71\x61\x35\x24\x24\x46\ +\xaa\x06\x7c\x8c\x5a\xa5\xc4\x46\x1c\x62\x84\xd2\xe7\xcc\x58\xeb\ +\xea\x8e\x62\xc7\x9e\x65\x58\x72\xed\x4f\x08\x76\x1f\xa3\xef\x29\ +\xd0\x57\xd9\xa1\x25\x65\xc9\x4a\x0f\xc3\xdf\x1e\x99\x0c\xaf\x4e\ +\x8d\x8f\xb7\xd4\xe0\xd5\x0d\xd5\x78\xec\x96\x02\x2c\x22\xd2\x22\ +\xd9\x16\x86\x52\xb5\x4a\xd1\x4e\x22\x33\x46\x72\x1d\x0b\xc6\xc4\ +\x61\x02\x41\xaa\x89\x5d\x86\xc3\xa3\x94\x51\x24\x75\xa6\x92\xf4\ +\x61\x7a\x8c\x29\x60\x3e\x40\x08\xf9\x4c\x17\xfd\x6b\x73\x09\x24\ +\x67\xa6\x84\xf8\xff\xd4\xfb\xfd\xdd\xd9\x79\x42\x17\x21\x5b\x7c\ +\xa2\x09\x33\x67\x14\x20\x37\x3f\x19\x5b\xb7\xd0\xb3\xfb\x74\x74\ +\x09\x2d\xb9\x2d\x1b\x8e\x1f\xaf\x45\xb7\xad\xef\x0c\xb2\x72\xd1\ +\xc2\x93\x44\x1d\xb2\x47\x04\x93\x33\x8e\x45\x6d\x25\x51\xe8\xea\ +\x2a\x9c\x3a\x6e\xc5\xc2\xab\x72\xa4\x7a\xe0\xf3\xa9\xce\x82\x4c\ +\x6b\xbf\x85\xc6\x46\x85\xae\xae\x06\x8a\xc1\x56\x09\x2c\x7a\x7d\ +\x46\xb4\xb6\xd7\xc2\x4e\x37\x17\x1b\x93\x8e\x60\x0a\x70\x33\x08\ +\xfe\x76\xec\x7a\x13\xb5\xb5\x47\x30\x69\xfc\x75\xf2\x10\x9c\xf2\ +\x8a\x8b\xc9\xc6\x8d\xd7\xfd\x44\xf2\x8d\x26\xf2\x69\x9c\xb5\xe0\ +\xc2\x26\xa7\xa2\xf8\x5f\x0b\xc1\x6b\x44\x58\x3c\x26\x4f\xbc\x01\ +\x6b\x37\x3e\x8b\x53\x55\x07\x31\xba\x70\x1e\x31\xbf\x6e\x68\xd5\ +\x2e\x38\x89\x54\xa0\xdd\x4e\xb2\x0c\x22\xab\x73\xe3\xef\xef\x95\ +\x23\x3d\x2e\x18\x77\x5f\x9f\x2b\xbe\x8a\x85\x25\x1b\x59\x15\x28\ +\xf4\xa1\x11\x44\x76\x6e\x14\x5e\xf9\xcd\x6c\x98\xe9\x99\x18\xce\ +\x64\xbf\x48\xb3\xb0\xd2\x0f\x77\xd6\x21\x8e\x2c\x71\x5a\x51\x9c\ +\x90\xf4\x5e\x22\x70\x15\x95\xbd\x28\x20\x12\x64\xc8\x89\x40\xc7\ +\xc9\x6e\x3c\xff\x4e\xb9\x18\xa5\xb5\x73\x2f\x41\x5f\x11\x67\x3b\ +\x4e\x13\x1e\x0b\x9f\x0d\x61\xfc\xa4\x78\xcc\xbb\x32\x43\x3e\xeb\ +\x6e\xd6\xa2\xdb\xd2\x87\x77\xdf\xde\x47\xe8\xa1\x27\x72\xd8\xaf\ +\x74\x23\x9c\x67\xde\x53\xfb\xa9\x95\x6e\x8e\xc5\xc8\x82\x2a\x4e\ +\x36\xe0\xdd\x65\xc7\x28\x7c\xe8\x24\x98\xd4\x63\xde\x15\xe9\x52\ +\x3d\x18\x7c\x83\x2a\x09\x15\xb4\xa8\xa9\xde\x4c\x24\xa2\x97\x2c\ +\x76\xaa\xa4\xbf\xec\xf6\x5e\x49\xfd\x34\x37\x9f\xc0\xb4\xc9\x37\ +\x93\x66\x69\x25\x09\x90\x9c\x54\x20\x24\x64\x0b\xf9\x2e\xbb\xb3\ +\x5f\x7c\xa3\x9e\xe2\x3e\x87\xc3\x26\x0a\x6e\x27\x2b\xeb\x27\x78\ +\xe5\x9a\x1e\xfb\x4b\x4e\x62\xc7\xc6\x64\x4a\x1e\x94\x19\x6b\x7e\ +\xde\x2c\xec\x3b\xb8\x42\x2a\xe8\x39\x59\x13\xc5\x4f\x0b\xe4\xb0\ +\x45\xa9\x15\x96\xb6\xfb\x40\x33\x76\x1e\x6d\xc7\xc3\x4b\xf2\x90\ +\x4e\x74\x9f\x4b\x3f\xfc\x3d\x53\xf6\x95\x1b\x6a\x50\xdf\x69\x25\ +\xe6\x69\x20\x25\xd1\x20\x9e\x7c\x4f\x30\x31\x41\x23\xc5\x66\x41\ +\x06\x35\x2a\x49\x01\x3e\xdc\x58\x8d\xf7\xb7\xd7\xe3\xba\x69\xc9\ +\xc8\x4e\x0e\x91\x34\x1a\x2b\xed\x86\x3d\x0d\x78\xf4\x1f\x07\x31\ +\x87\xc8\x4d\xf1\x91\x56\xd9\x7f\x3c\x09\xf2\x78\xf9\x66\xe4\x8d\ +\xbc\x1e\xe1\x61\xc9\xf0\x9e\x51\xff\xd4\x11\x83\xac\x26\xa1\x6f\ +\x5a\x5f\x8e\x6e\x62\xbc\xc7\x4f\x72\x3c\xe8\x43\x47\x07\x91\x38\ +\xd8\xfd\x89\xfb\xf3\xef\x25\xfa\xd4\x4a\xba\x10\x19\xa7\x9e\x7c\ +\x1b\x51\xec\xf6\x4e\x7a\xaf\x42\x48\xb0\x12\xef\x9d\x89\xeb\x4a\ +\x4c\xe3\xa5\x78\xed\x84\xf8\xb0\xd9\xd3\xef\xc0\xb1\xb2\xcd\xd8\ +\xb5\xef\x5d\x18\x0d\x21\x98\x3a\xf1\x46\xa4\x90\xc0\xb8\xa1\xc8\ +\xa8\x0d\x91\xfc\x65\x18\xbd\x9a\x9a\x4f\x62\xdd\xc6\xe7\x10\x46\ +\x71\x12\x57\x16\x94\x4c\x84\x9a\x84\x6e\x21\x2b\xeb\x92\xea\x03\ +\x53\xe7\xf9\x73\xbf\x89\x24\x12\x30\xb7\x25\x70\x42\x9a\x7b\x55\ +\xa2\x23\x93\x50\xdf\x78\x5c\xf6\xd5\xea\xc3\x94\x9c\xad\xcf\xef\ +\x97\xe8\x1c\x87\x4f\x76\x91\x76\xbb\x24\x40\x17\x8d\x66\xa6\xcc\ +\xf0\x4c\x56\xfd\xf2\xfa\x2a\x7c\x40\x82\x61\xab\x8a\x0d\xd3\xd3\ +\xcb\x28\x15\x00\x7e\xb6\xd6\x1e\xbb\xc4\x71\xad\x3d\x4a\xf5\x3c\ +\x3f\x35\x0c\xba\x60\xad\xf8\x41\xde\xe7\x86\x79\x69\xd8\x75\xbc\ +\x1d\x3f\x7d\xfa\x00\x52\xa3\x4d\x58\xfe\xc4\x3c\xac\x26\x0b\xfd\ +\xf9\xf3\x87\x60\xb5\xdb\xe8\x39\xce\x1e\x47\x66\xf5\x55\xa7\x7a\ +\x50\x53\xd5\x23\x24\x90\xf3\xc9\x5a\xce\x50\x5e\x64\x37\xc4\xb9\ +\x85\x47\x9a\xec\xe6\xf2\xb8\xae\x93\x2e\x6c\x24\x6b\xd1\x22\x83\ +\xa8\xf7\xb4\x39\x31\x88\x8e\x0e\x23\x8a\x5b\x7d\x7a\x0e\x4e\xa5\ +\x92\x20\xd5\x42\x41\xb0\x5e\x1f\x8a\xd0\xd0\x58\x82\xc0\x4c\x89\ +\xe9\xe6\xce\xba\x13\x63\x47\x5f\x49\x6c\xd2\xa2\x34\x2c\xd1\xab\ +\x99\x82\x72\x86\x56\x4e\xee\x66\xa4\x8e\x91\x8a\x78\x02\x05\xbb\ +\x9c\xc4\x66\xcb\x54\xf9\x83\xda\x96\xb6\x4a\x54\x56\x1e\x24\x6b\ +\x76\x48\xd7\x17\x43\x33\x43\xa9\x84\x2b\x9c\x94\xf6\x07\xee\xa7\ +\xd3\x34\x45\xb9\x98\x41\xf3\xa7\x46\x46\x09\x8f\xbf\x7d\x8b\x84\ +\x6a\x23\xe8\x8b\xa2\xc0\xfc\xb1\xaf\x11\xa3\x9d\x9e\x4c\x83\x6d\ +\xa4\x20\x5c\x39\x27\x37\x7d\x70\xc0\xfe\xf1\xe1\x56\xac\xdd\xd5\ +\x88\xbd\xe5\x1d\xd8\x43\x82\x6a\x6b\xb3\x21\x86\x8e\x01\x41\x71\ +\x36\xf9\xd4\xe7\x7f\x3e\x03\xb6\x1f\x6f\xa5\x7d\xad\xe4\x63\x23\ +\x90\xdd\xd8\x43\x82\xd5\x08\x52\x7c\x5a\xef\x8f\xca\x9f\xdc\xf8\ +\x5c\xda\x20\xf8\xe4\xec\x60\x43\x28\x30\x0e\x37\xc7\xd1\xfb\x36\ +\x1a\x00\x3d\xae\x5b\x32\x06\xd9\xf9\x91\xf4\xf0\x0e\x49\x40\x9f\ +\x8e\xcf\x0c\x47\x4e\xb2\x2c\x27\xc1\x5b\x06\xed\x4f\x04\x85\xb4\ +\x2b\x3c\x3c\x9e\x20\x32\x5f\xd8\x24\x0b\x97\xa1\xb2\x85\x02\xef\ +\xed\xbb\x96\xc9\x85\xae\xba\xfc\x61\xe4\xe7\xcf\x11\xc8\x63\x56\ +\x29\x41\xb7\x46\xe7\xf7\x15\x6e\xc9\xcc\xe4\xe7\xce\x82\x83\x42\ +\x05\x17\xf9\x3d\xae\x3e\xa8\xfc\xc4\xc1\xe1\xb0\x48\x75\x81\xc7\ +\xe1\xb4\xb0\xc5\xff\xde\xe4\xb7\x24\xbb\x63\x50\xbb\x96\x8f\x4b\ +\x76\x6a\x3c\x71\xff\x78\x18\x29\xc8\xd6\x7b\xfd\x16\x49\x9f\x81\ +\xc2\x05\x7e\x9f\x9b\x4a\x48\x41\x42\xfd\x5f\x22\x39\xbf\x7a\xee\ +\x20\x9e\x5b\x75\x0a\x7f\x7d\xf3\x28\x1e\xbf\x6f\xac\x52\x85\xa0\ +\xf3\x45\x47\x06\x61\x52\x61\x34\x76\xec\x6b\x26\xd7\xe8\x41\x66\ +\x02\x8d\x55\xb0\x4e\x50\x61\xd8\x38\x4f\x85\x8b\x2d\xc6\x9e\xbf\ +\xf0\x1c\x74\x73\xa9\xe9\x66\x5c\x71\x79\x11\x0a\xc7\xc6\x63\xeb\ +\x26\x2b\x69\xbe\x0a\x27\xcb\xda\x29\x80\xb6\xe2\xe4\xc9\x46\xb4\ +\x75\x77\x9d\x5e\xda\xe0\xc1\xa6\x87\x20\x7a\x21\x71\x9b\x8e\xfc\ +\x17\x5b\x08\x57\x15\x34\x14\xcf\x70\x4a\x4c\xd1\x36\x15\x4e\x55\ +\xee\x27\x18\xae\xc6\x15\xf3\x1f\xc0\x98\x51\x57\xd0\xe0\x5a\x48\ +\xa1\xad\x7e\x56\x1a\x24\xc9\x6b\xf6\x7d\x9c\x41\xe1\x14\x9a\x7c\ +\x4e\x21\x01\x9f\x8f\x95\x40\x4b\x48\xc0\x31\xa1\x95\x7c\x22\x5b\ +\xae\x46\xad\x1d\xb2\x02\xc6\x15\x6c\x2e\xd9\x34\x75\xda\x03\x79\ +\x3b\x11\x8e\x9e\x18\xa4\x9e\xc9\x8a\x4d\xa9\xad\x39\x88\xc4\xd8\ +\xc8\xf2\x42\xc2\x83\x20\x11\x13\xa3\x87\xdd\x0b\x3d\xc1\xe9\x6f\ +\x1e\x9c\x80\x8a\xa6\x7e\xbc\x46\x8c\xf5\xe1\x9b\x46\x20\x36\x92\ +\xc2\x08\x97\x64\x2d\x28\x14\xd1\xc3\x6c\x22\x81\x11\xeb\xcc\xa3\ +\x70\x23\x32\xd4\x28\x2d\x83\xff\x89\x6d\x58\xbb\x75\xd1\xc3\x64\ +\x64\x85\x23\xaf\x30\x9c\x1e\xcc\x85\x86\x0a\x22\x09\x2e\x0b\x36\ +\x6c\x2e\xc5\x3b\xcb\x4a\xb0\x6b\x5b\xc3\x59\xb5\x27\xa6\xfc\x9c\ +\x58\x76\x13\x6c\x30\x1b\xe4\x24\x9a\x39\x38\x82\xfc\x91\x0d\x3d\ +\xbd\x2d\x92\x32\xe3\x41\xb6\xdb\xfb\xd1\x40\xe4\x85\x09\xcb\xa8\ +\x91\xf3\x49\xd9\x9d\xd2\x97\xc2\xb7\xc3\xc4\xa4\xba\xa6\x04\x2b\ +\x56\xff\x05\xe5\x15\x3b\x25\x86\x93\x30\x82\x19\xa7\x57\x49\x1e\ +\x33\x73\xe3\x34\x14\xb7\xfc\x71\x95\xdd\x48\x96\xcc\x15\x78\xa5\ +\x43\x4a\x75\x1a\x7a\x0a\x1c\xd2\xf1\x5b\x0f\xb7\x50\x48\xe7\x56\ +\xac\x2b\x80\xb0\x0c\x93\x7c\x08\x41\x6a\x07\x29\xeb\x63\xff\x28\ +\xc1\x8f\x9e\x29\x26\x1f\x6a\x81\x97\x89\x03\x27\x88\x7b\x9c\x30\ +\x99\x19\x5e\x0b\x25\x81\xf1\xf1\xfe\x16\x52\x79\x8d\x04\xeb\x9c\ +\x3d\xe2\x4a\xbb\x9e\xc8\x4a\x10\x49\xdc\x1c\x11\x84\xb4\xb8\x20\ +\x42\xa5\xee\x41\xea\xfc\x5f\x10\x5e\x10\x69\xd3\x91\x92\x4e\xbc\ +\xba\xf4\x20\x9e\x7f\x7a\x07\x0e\x1f\x2f\x27\x0b\x22\x96\xe8\xd3\ +\x48\xb6\x5c\xcf\x4d\x46\x67\x98\xbf\x02\x77\x7a\x09\xa4\x19\xca\ +\x18\x3e\x12\xe2\x72\x04\x36\x37\x6d\xfb\x17\x3a\xbb\x9a\x60\x22\ +\x61\x76\x92\x9f\xeb\xe9\x69\xc2\x68\x0a\xc2\x4d\xa6\x50\x11\x26\ +\x9f\x8a\x2d\x88\xcb\x42\x1f\xac\xfc\x13\xd1\xff\x7d\x72\x1e\x86\ +\x48\x1f\x67\x65\x48\xf0\x3a\xb1\x30\x1d\x59\xa6\x59\xae\x75\xe8\ +\xc8\x5a\x22\x52\x2d\xd2\x42\x61\x34\x84\xd2\xbe\xba\x4f\xfc\x08\ +\x77\x68\xd1\x3d\xe6\x93\x2f\x4a\x8d\x35\xe3\xed\x4d\x35\x14\xd4\ +\xb7\x49\xfb\x83\x64\x49\x88\x55\xc2\xa0\x56\x84\x49\x42\x32\x87\ +\x19\x40\xf1\x33\xfe\x48\xd0\xf8\x93\x17\x0e\x49\x38\x20\xfb\xf0\ +\xe9\x7a\x1d\x98\x4c\xe8\x33\x7d\x54\x0c\xd6\xed\x6b\xa4\x1b\xa5\ +\x0f\xc9\xb7\xbd\xbe\xf2\x14\xde\xa7\x18\x72\xce\x84\x04\x44\x92\ +\xc5\x72\x78\x91\x40\xe4\xc7\x14\x14\xec\x87\x4d\xdf\xe7\x2f\x3c\ +\xd5\x10\x2f\x6e\x4f\xeb\x27\xc6\x75\xb8\xa4\x91\xc2\x84\x36\x38\ +\x89\x22\xb3\x4f\x62\x2d\xe6\xd7\x50\xc7\xb0\x65\x70\xfb\xb8\x8a\ +\xac\x80\xa1\x83\xdb\xd1\x8d\x34\xd0\xd3\x88\x65\xf6\xf5\x76\x90\ +\x35\x3d\x81\x9a\xda\x43\x44\x52\x1a\x45\x6b\xa3\xa3\x52\xa5\x4a\ +\xff\x09\xd9\xf0\x4a\xe0\xce\x16\x14\x19\x9e\x84\xe4\xe4\x02\x39\ +\xa7\x87\x60\x93\x85\x59\x7c\x64\x35\x09\xab\x59\x60\xb5\xec\xc4\ +\x0e\x1c\x39\xf6\x31\x42\x68\xff\xbc\xdc\x19\xe8\xeb\x6b\x25\x56\ +\xda\x21\x74\xdc\x6c\x32\x90\xaf\x55\xe1\x78\x69\x3b\x42\xf5\x2a\ +\xdc\x79\x79\x86\x18\xd9\x13\x6f\x1e\x47\x55\x1d\xf9\x4d\xb2\x9c\ +\x0d\xfb\x9b\xf0\xc2\xf2\x93\x38\x76\xaa\x5b\x88\x59\x28\x05\xda\ +\x33\x46\xc7\x2a\xd6\x4a\x02\x0e\x63\x21\x07\x90\x85\x0e\x56\xd1\ +\x9f\x63\xb2\x23\x51\xd9\xd2\x8f\xe6\x26\x0b\x9e\xa7\x73\x3d\xf8\ +\xd7\xbd\x98\x51\x10\x83\xaf\x2e\xca\x82\xf4\x48\x92\x52\xf7\xd9\ +\x94\x7e\x52\xd5\x30\x63\x74\xb1\xaf\x61\x7d\x9e\xdd\xa5\x19\xda\ +\x08\x55\x4a\x8a\x53\x18\xb6\x47\x49\x28\x9c\x53\x13\x48\x68\x5e\ +\x8f\x41\x18\x5e\x7b\x67\x2d\xf2\xd5\x33\xc5\x42\x72\xb3\x27\x61\ +\x31\x91\x92\x75\x1f\x3f\x8b\x37\xdf\xfd\x89\x84\x04\x0c\x73\x9c\ +\x71\xf1\x0c\x6a\x06\x65\x41\x9a\xc9\x12\xa3\x63\xd2\xc4\x77\x1a\ +\x65\xee\x81\x06\xad\x6d\xd5\x58\xf1\xd1\xff\x09\x53\xe5\xd2\x4b\ +\x52\xc2\x08\xf2\x99\xfb\x10\x6a\x8e\xc1\x82\x79\xdf\x44\x6c\x74\ +\x2a\x3e\xfc\xe8\xcf\x14\x13\x5a\x30\x6e\xd4\x6c\x7c\x6c\xe8\x92\ +\x1c\xe7\xdf\xde\xaf\xc3\x57\x2f\x4b\xc5\x93\xdf\x9b\x4c\xd7\xd2\ +\xe0\xcf\x14\xa7\xfe\xcf\x2f\xb7\xa3\x20\x8d\x98\xe2\x47\x15\xb0\ +\xb9\xbc\x12\xbf\x2d\xfb\xf5\x2c\x18\xc8\xf2\x22\x49\x60\x46\xb2\ +\xca\xac\xd4\x50\xa8\x38\xcb\x62\x75\x7d\x12\x04\xd1\xb3\x87\x87\ +\xe8\x70\xac\xba\x0f\x5f\xf9\xe9\x56\xec\x28\x6d\xc3\x2d\x73\xd3\ +\xf0\xf7\x47\x26\x22\x3c\x2e\x98\x9c\xa6\x1b\xb6\x2e\x52\xb2\x66\ +\x2b\x22\xe8\x1c\x0e\x97\x56\x9e\xfd\xf3\xdc\x44\x78\x41\x7a\x0f\ +\x14\xf0\xff\x8c\x66\xac\x22\x72\x62\xa0\x78\x29\xdc\x84\xca\x53\ +\x3b\x69\x20\x17\x13\x7c\x1a\xd0\xd0\x74\x94\xe0\x33\x0b\x37\x2f\ +\xf9\x15\xf6\x50\xcc\x57\x7c\x78\x8d\xc4\x77\x67\x66\x13\xb8\x16\ +\xad\x26\x78\x0c\x36\x45\x12\x11\xe9\x14\x08\xe6\xf0\xc0\x6c\x0a\ +\xc7\x8c\xa9\xb7\x51\xc8\x70\x4a\x58\x2a\x27\xad\x8b\x46\x5f\x41\ +\x44\x67\xa1\xa4\xca\x6c\xf6\x5e\xa4\xa5\x8c\xc1\x96\x1d\x2f\x63\ +\xf5\x86\x32\x7a\x29\xe7\x0b\x25\xe8\x4f\x4f\x30\x0b\x4c\x7e\xf7\ +\x9e\xd1\x98\x39\x21\x1e\xcf\xbe\x5d\x8e\x75\x07\x9b\x30\xb5\x20\ +\x1a\x93\x46\xc6\x60\x0c\x05\xd6\x9c\x85\x31\xf8\xc9\x4d\x0c\x09\ +\x31\x8a\xf3\x9a\xaa\x4f\x18\xab\xd2\xdf\xa3\xa2\x98\x93\x94\x92\ +\xd0\xa8\xb6\x59\x8d\x17\x7e\x34\x0d\x37\x51\xac\xd7\xd8\x6e\x45\ +\xe3\xc1\x66\x14\x8c\x4f\xc0\xaa\xfd\xd5\xa8\x26\x1f\x98\x91\x4f\ +\x41\xbf\xde\x2d\xd9\xa0\x4b\x33\x51\xc5\x8d\x7e\xc7\x30\xc2\xfb\ +\xda\xbc\xdd\x50\x5f\xa2\x49\x42\xfa\x10\x62\x6b\x16\x1f\xfe\xf8\ +\xaf\x2a\x22\x37\x4b\x49\x03\xfb\xd0\x4d\xbe\x6e\xe6\xf4\xaf\x61\ +\xdc\x98\x2b\xc9\x02\x1f\x92\xca\x33\xa7\xcd\x3a\xbb\x1b\x08\x1a\ +\xf3\x65\x70\x94\x71\x52\x4c\x5d\x0a\xb2\x5d\xf5\x12\x26\x70\xb0\ +\xce\x3e\x73\xd6\xf4\xdb\x60\xb5\xf5\x91\x75\x29\x0c\x97\x7b\x27\ +\x39\xc6\x73\xd8\x7b\xa5\x22\x3f\x69\xc2\x75\x04\xb9\x31\x44\x36\ +\x8e\x21\x27\xa6\x06\x05\xc9\x0e\x8c\xce\x89\xc7\x82\xf1\x71\x52\ +\x05\x67\xff\x37\x71\x7a\x12\x26\xe6\x44\xa1\xa6\xc3\x4a\xfe\x5b\ +\x8d\x44\xb6\x18\xc9\x53\x39\x24\x73\xd2\xdd\x4f\xac\x96\xae\x1f\ +\x66\xd2\x7f\x32\x95\x82\xa1\xd3\x5f\xb7\x3c\x56\xd5\x8d\x91\x14\ +\xac\xbf\xfa\xb3\x19\x18\x47\x61\x84\x97\xce\xf3\xca\xbb\xe5\x58\ +\xb6\xb5\x16\x57\xcf\x4c\xc5\xd6\x23\x2d\x14\x52\x79\x71\xd7\xe5\ +\x55\x48\x4a\xea\x82\xd7\x7d\x69\x7c\x1e\xb7\x58\x3c\xb9\x62\x18\ +\xe1\x15\x64\xd5\x41\x73\xa9\x66\x78\x11\xb5\x1e\x9b\x4d\xec\xcb\ +\xa8\xc7\xd1\xb2\x0d\x08\x0b\x8d\xc3\xd4\x49\x37\x12\xd4\xe5\x12\ +\x49\x69\x21\x58\x0a\x96\x80\xbd\xb7\xbf\x1d\x47\x8f\x6d\x46\x61\ +\xfe\x5c\xd2\xf4\x14\x62\xa3\x6d\x92\x39\x61\xfe\x10\x46\xc1\x3d\ +\xfb\x33\x6e\x81\x9f\x30\xfe\x1a\x39\x8e\x89\x09\xb7\xda\x85\x91\ +\xa5\xe9\x74\x7a\x1a\x64\x1f\x1d\xbf\x51\xc2\x0f\x9e\xcb\xc0\x83\ +\x3b\x32\x7f\x01\x0a\xf2\x67\xe1\xb6\x29\x74\xde\x9c\x2a\xf2\x43\ +\xc1\x92\xc7\x6c\x22\x3f\xb7\xb3\xb4\x06\xd3\x8b\x62\x11\x4f\x0c\ +\x3a\x4d\x17\xac\x58\x15\x11\x11\xc9\x73\x92\xa5\x39\xfa\x9c\x78\ +\x87\x48\x0d\xfb\xdf\x44\xb6\x3c\x8f\x9f\x70\x98\xc9\xd9\xc5\x06\ +\xa3\x82\x58\xe6\x7e\x0a\xd6\x9f\xfa\xce\x04\x8c\x9b\x92\x08\x34\ +\xf4\x8a\x71\x2e\x59\x9c\x85\x16\xb2\xdc\xbf\xbc\x7b\x5c\x1e\xbf\ +\x28\x33\x1c\x53\xf2\xdb\x10\x12\xdd\xe7\x3f\xc7\x67\xdf\x1c\x82\ +\xde\xc6\x61\xe2\xbc\x7e\x13\x2e\xdd\xf4\x3c\xee\xe3\x0c\x22\xe6\ +\xa8\x82\x31\x28\x02\x57\x5f\xf9\x5d\xe4\xe6\x4c\x81\xd5\xd2\x23\ +\x39\x49\x27\xbd\x2c\x96\x4e\xa9\xef\x55\xd7\x96\x60\xed\x86\x67\ +\x31\xba\x70\x3e\x62\xc8\x6f\x99\x82\x42\x65\x1f\xee\x98\xde\x5f\ +\xb2\x02\xdb\x76\xbd\x8e\xc8\xc8\x24\xe9\x0a\xb3\x59\xfb\xc4\x12\ +\x39\x66\xe4\x1a\x58\x29\x09\x97\x53\x6a\x1c\x8a\xdc\x70\xd5\x63\ +\xf0\x92\x0f\x65\x2b\x0f\x36\x52\x3c\xc8\x63\xc6\x41\x39\x97\x7b\ +\x68\xf0\xf7\x94\x77\xe1\xa1\xa7\x0e\x60\x1a\xb1\xc5\x67\x1f\x9d\ +\x8c\xe8\x94\x50\xf2\x67\x6e\x25\x29\x4d\x81\x36\xd3\xcc\x3f\xbe\ +\x72\x08\xff\xde\x5e\x8f\xff\x59\x9c\x8d\x11\x5c\xc0\xe5\xa2\x2b\ +\x91\x98\xfe\xb6\x7e\x6c\x58\x55\x81\xbf\xbf\x5c\x8a\x23\xd5\x3d\ +\x28\xab\xe9\xc1\xf4\x16\x0b\xf4\x24\x64\x46\xd3\x31\x14\xa4\x3f\ +\x43\x4a\x11\x4a\xfe\xf2\xff\xc8\xa7\x32\x0b\x77\x38\x4c\x08\xe9\ +\x37\x5e\x32\xe1\x49\x4c\x39\x84\x5b\xd3\x7e\x82\xe9\x97\x6a\x76\ +\xa4\x4f\xda\xba\x7d\xf0\x20\x25\x69\x94\x94\x76\x2c\x24\x38\xb7\ +\xdb\xee\x9f\xbc\xe8\x45\x7b\x47\x9d\xc4\x66\x49\x09\x79\x44\xf7\ +\xd7\xe0\xc8\xd1\x0d\x48\x4d\x1d\x2d\x42\xcb\xce\x9a\x8c\xf8\xf8\ +\x1c\x4c\x1e\x7f\x2d\x3e\xde\xb2\x14\x2b\x57\xff\x1f\xa6\x4d\xfe\ +\x0a\x92\x13\x0b\x24\x65\xd6\xd7\xd2\x29\x8c\x95\x6b\x79\x6c\x91\ +\x9c\x7d\xd1\xb0\x25\xaa\x94\x50\xc5\xe1\x74\xd2\xe0\x39\x95\x1e\ +\x15\xaf\x92\x0e\x8b\x0e\x33\xc8\xf7\xef\x6e\xa9\x15\xff\xf6\x95\ +\x45\xd9\x18\x95\x1e\x46\xbe\x59\x8f\xe6\x53\x4e\xbc\xf6\xd1\x29\ +\x3c\xf9\xef\x32\x64\x27\x9a\xf1\x9d\x9b\xf3\x11\x14\x6d\x92\x5e\ +\xcd\xe5\x3b\x1a\xb0\x7e\x6f\x23\x8e\x10\x23\x0d\x23\x25\x58\x3c\ +\x29\x11\xf5\xad\x56\xf4\x75\xdb\x11\xc5\x81\x3a\x57\xd4\xdb\x6d\ +\xd0\x26\x85\xe0\xe6\xf9\xe9\x58\xb6\xbe\x8a\x14\xc8\x3b\xd0\x69\ +\x00\xd5\x25\x12\x9e\xea\x33\x4c\xf1\xba\x40\xd6\x42\x83\x6a\xa7\ +\x20\x1f\x12\x7f\x49\x33\xa9\xdb\x29\x77\x10\x98\x75\x9a\x94\x94\ +\x2f\xfd\x1e\x1c\x06\xb0\x0f\xab\xac\x3a\x20\xcd\xb6\x1c\x0e\x70\ +\xb7\xf3\xc4\x71\x57\x63\x6c\xd1\x62\x82\xd2\x76\xec\x2f\xfe\x10\ +\x1f\xad\x7b\x52\x42\x88\xc1\xc9\xea\xc0\x96\x10\x37\x42\xe2\x43\ +\x66\xa7\xc2\x0a\x55\x7e\x7a\x1c\x28\xa7\x91\xf6\xe7\x26\x87\x20\ +\x31\x2a\x08\x0d\x1d\x36\x7c\xb8\xa7\x11\x9b\x0e\xb5\x22\x92\x04\ +\x1a\x4c\xb1\x5a\xbf\xcd\x8d\x5a\x12\x48\x5a\xac\x89\x20\x71\x22\ +\x46\x8e\x8d\x45\x67\x43\x3f\x7e\xf2\xdc\x21\xac\xa6\x98\xee\xb2\ +\x31\xb1\x78\xeb\x17\x33\xc8\xfa\xc3\x08\xce\x8d\xd2\x84\x64\x56\ +\x49\xcb\x78\x20\xba\x91\x64\x75\x52\x8c\x09\x09\x24\x74\xee\x6f\ +\xf5\x7d\xce\xf1\xdd\xe7\x27\x3c\x70\xea\x89\xe3\x58\x8d\x64\xfd\ +\x7d\xf0\x0e\x04\xab\x3c\xb0\x9c\xb3\xec\xeb\xeb\x42\x57\x77\x83\ +\x54\x00\x82\x8c\xe1\x14\xef\x65\x50\xf0\x1e\x86\xbe\xd6\x0e\x21\ +\x2b\x9c\xdf\xe4\x50\x62\x16\x91\x9c\x98\xe8\x74\x99\x68\xd9\xd5\ +\xdd\x24\x73\x03\xb8\x75\x30\x33\x63\x1c\x59\x6f\xad\x54\x23\x42\ +\x43\x22\x85\xb0\xf8\xe0\x19\x5a\x63\x89\x40\x44\x91\x1f\xe6\xca\ +\x01\x37\xb6\x5e\x3b\x23\x59\x32\x34\xdc\x0e\x61\x27\xb8\x64\xab\ +\xbc\x6e\x7a\x2a\x6e\xa7\x58\x70\x7c\x41\x94\x64\x54\xc2\xc8\xf1\ +\x72\xcb\x1e\x57\xd6\x47\x65\x52\x90\x4f\x82\x6f\x6b\xb1\xa1\xa9\ +\xd1\x0a\x33\x85\x10\xb9\x14\x4a\x68\xd8\x39\xb3\xbf\x94\x24\xb0\ +\x07\x51\x21\x7a\x44\xd0\xab\xb9\xc3\x86\xff\xd4\x76\xe9\x85\xe7\ +\xe5\x1a\xa8\x4e\x1e\x3e\x30\xdd\x49\xe5\x2f\x58\x73\x5b\x3a\xd3\ +\xfc\x75\x9b\x9e\x43\x47\x67\x83\x52\xe3\xd2\x1a\x44\xb4\x9c\x60\ +\x4e\x4b\x29\x44\x46\xfa\x18\xb2\x22\x97\xf4\x72\xf2\xa4\x94\xa2\ +\x51\xf3\x89\x84\xcc\x16\x5f\xc8\x70\x14\x4c\x42\xee\x27\xb2\xf3\ +\xde\x87\xbf\x11\xf2\x13\x11\x9e\xe0\x47\x15\xdf\x70\x33\x43\xa1\ +\xa1\x90\x61\x7c\x7e\x14\x56\x91\xd5\x4d\xc8\x8b\xc2\x83\x77\x14\ +\x8a\xb5\x78\x69\xf0\x35\x5c\x7c\x35\x69\xc9\x87\x71\x3e\x93\xa1\ +\x96\xf6\x8f\x08\xc2\x6d\x0b\x32\xb0\xed\x70\x1b\x9e\x5a\x7e\x42\ +\xa6\x7a\x59\x29\x8e\x73\x73\x7f\x8f\x46\x85\xdb\x09\x22\x7f\xf7\ +\xad\x71\x30\x73\x35\xbd\xd7\x29\x97\xe6\x64\x0d\xe7\x4b\x2f\x74\ +\xbe\xf9\x17\x4b\x78\xd2\xa8\xa5\x91\xae\x63\x8b\xb5\x57\x11\x9c\ +\x17\xc2\x10\x79\xc2\x22\x0b\xae\xb3\xb3\x91\x7c\x55\x96\x14\x57\ +\x33\x52\x8b\x68\x50\xdc\x64\x5d\xbb\x84\x65\x72\xfa\x8b\xe1\x55\ +\x69\x7c\xf2\x48\xc0\xcf\x70\xa9\x27\xa2\xc2\x5d\x69\x41\x86\x10\ +\x29\xf0\x72\x93\x6e\x5e\xf6\x0c\x44\x44\x24\x0d\x24\xbc\x35\x5a\ +\x1d\x09\xd2\xbf\x18\x00\xa7\xb0\x38\x07\xe9\x56\xac\x63\xc9\xec\ +\x54\x2c\x25\xe2\xf1\xde\xa6\x5a\xdc\x73\x75\x0e\x62\xc9\x9a\x60\ +\xf7\x07\xe1\x6c\x41\xde\x40\x3a\x43\x2d\xd6\x9a\x45\xfe\xef\xaa\ +\xa9\x49\x14\x27\x06\x63\xf2\xe8\x58\x29\x11\x6d\xdc\xdb\x24\x53\ +\xc4\x5e\x5c\x7d\x8a\x84\xae\xc5\xef\xbf\x3d\x5e\x62\x43\x9e\xd5\ +\xdf\xd1\xe9\x46\x3b\xb1\xd7\xa4\x98\x20\x12\xa2\xfa\x73\x4f\x8d\ +\x5d\x7a\xe1\xf9\xdb\x26\xd2\x13\x42\x10\x62\x54\x49\x9b\x5e\x80\ +\x21\xf6\xf4\xb5\x62\xf5\xc7\xcf\x0b\xc4\xdd\x74\xfd\xcf\x11\x1b\ +\x97\x01\x73\x50\xa4\x64\x50\xd8\xb1\xe7\xe6\x4c\x95\xe9\xcc\x9c\ +\xcb\xe4\xb6\x40\xa1\xbf\xdc\xb8\x04\xff\xea\x0c\xfe\x64\x74\x1f\ +\x31\xd5\x63\xe5\x5b\x05\xfa\xf2\x72\xa7\x29\x33\x65\xdd\xca\xac\ +\x20\xf6\x91\x66\x62\x89\xdc\xa1\x6c\xe9\x20\x56\xeb\x51\x23\x36\ +\xc2\xc0\x81\x12\x46\x66\x44\x60\x4a\x41\x0c\xde\xd9\x5c\x8b\x55\ +\xc4\x2a\xef\x5a\x92\x2b\xb1\xdf\xc0\x18\xab\x07\xea\x35\x62\xad\ +\xb9\x49\x66\x3c\xff\xc8\x64\x68\x42\x75\x03\x39\xdc\x3b\xaf\xcc\ +\xc2\xa9\xc6\x7e\xfc\x9b\x42\x8a\xbf\xbc\x73\x1c\x09\xe1\x06\xfc\ +\x80\xad\x98\x58\x69\xc5\x91\x76\xff\x24\xce\x38\x52\x30\xed\x7f\ +\x42\x76\x97\x58\x78\x2a\x45\x8b\x53\xd3\x22\x90\x4d\x7e\x61\xd3\ +\xe1\xe3\x14\x9f\xb5\x91\x4f\x4b\x22\xcd\x56\x49\x02\x9a\x67\xb0\ +\x8e\xa2\xd0\xa0\xb7\xb7\x95\x7c\x4e\x9f\x58\x17\xa4\x8d\xde\x24\ +\x31\x1c\x4f\x57\xae\x6a\x38\x28\xb3\x8f\xcc\xa6\x48\xe9\x61\xd1\ +\x10\xb4\xea\x34\x7a\xc9\xa4\xec\x3d\xf0\x01\x2a\x4e\xed\x25\xab\ +\x9b\x8a\x34\x62\xa8\x4a\xeb\x85\x1a\x25\xa5\xeb\xd1\xde\xd9\x8a\ +\xe9\x13\x17\xd2\x31\x7a\x62\x88\x5d\x78\x73\x53\x05\x6e\x21\x5f\ +\x36\x95\x48\x88\x86\x2c\xe4\xa1\x1b\x47\x60\xef\xd1\x76\xfc\xf8\ +\x85\x62\xc4\x13\x5b\xcc\x2f\x8c\x12\xc6\xc8\x0c\xd1\x61\x75\xa1\ +\xa5\xdd\x8a\x5e\x8b\x0b\x59\x69\x61\xc8\xcd\x8e\x90\x63\x04\x16\ +\xfd\xd6\xcb\x89\x6a\xee\x2c\xbf\x33\xca\x88\xb5\xbb\x1b\xd1\xc2\ +\xfe\xcd\xa0\xcc\x9e\x3a\x70\xac\x1d\x6d\x3d\x0e\x4c\x21\x2b\xe5\ +\x59\xb1\xf0\xfe\x27\x2d\xef\x12\x15\x08\x25\xb6\x21\x5a\x3d\x7f\ +\x42\x32\xd6\xee\x2d\x46\x59\xf9\x0e\xcc\x99\x75\xbb\xf4\x5d\x26\ +\x25\x8e\x90\x26\xd9\xfe\xbe\x36\xff\xbc\x36\x8d\x10\x13\x66\x8b\ +\xfc\x37\xc3\x61\x65\xf5\x01\x59\x05\x82\x03\x76\xb5\x4a\x99\xf7\ +\xa0\xd3\x9a\x08\x9e\x82\xa4\xaf\x93\x17\x13\xe0\x49\xfe\x97\xcf\ +\xff\x26\xc2\x43\xe3\xa5\xab\xba\xb8\xf4\x23\xc9\x75\xce\x99\x75\ +\xbf\x4c\x8b\xb6\x39\x8e\x63\xca\xe4\x04\x94\xd4\x79\xa5\x59\xf6\ +\x37\xc1\x63\x51\x44\x83\x3a\x83\xa0\xf3\xef\xdf\x99\x84\x1f\x3d\ +\x5f\x82\x7b\xff\xb0\x1b\xf9\x14\xcf\xa9\x09\x2e\xbb\x29\xe6\xb3\ +\x39\x94\x7e\x49\x17\x0d\x3a\x57\x06\xa6\x8d\x8c\xc1\x35\xb3\x53\ +\x30\x79\x44\x34\x06\x9c\xb6\x57\x09\xec\xbd\xe4\x2f\x47\xa6\x87\ +\xa3\x90\x04\x0c\x62\x98\x3d\xe5\x9d\x78\xe7\xe3\x6a\x24\x51\xcc\ +\x98\x9f\x15\xa9\x40\xb6\xd3\x7b\x09\x2b\x42\xbe\x73\x08\x8f\x9d\ +\xac\xde\x5f\xdf\xba\x14\x17\xf2\xb9\x71\xf3\x82\x54\x3c\xfd\x5e\ +\xa9\x54\x02\xb8\xe3\x39\x8d\x42\x83\xc9\xe3\x6f\x40\x9f\xb5\x83\ +\xc8\x89\x9d\x84\x66\x90\x67\x63\x88\xe4\x0a\xc4\xc6\xad\x2f\xa3\ +\x83\x18\x64\x5e\xce\x34\x69\x97\x60\x56\xca\x61\x41\x1f\x91\x13\ +\xbb\xc3\x4a\x30\xa9\x10\x83\xf0\xf0\x58\x49\x8d\xd5\x37\x94\xe1\ +\x78\xf9\x2e\x99\xad\xd3\xd8\x74\x1c\xe3\xc7\x5e\x8d\xe8\xe8\x34\ +\x22\x21\x9d\x92\xe0\x46\x90\x0f\xdf\xbc\x21\x93\xc2\x16\x0b\x9e\ +\x7e\xeb\x08\x26\x17\x47\xc9\x1a\x28\x69\x29\x0c\x87\xe3\x71\xb8\ +\xb6\x07\x36\x8b\x4b\x08\x88\x89\xa0\x36\x3a\xcc\x88\x24\xf2\x83\ +\x26\xb2\xa4\xfa\x4e\x1b\xc5\x77\xcd\x78\xe4\xc9\x3d\xf8\xd9\xd7\ +\x0b\xb1\xe0\xb2\x34\x25\x34\x60\xe1\xd1\x18\x05\xab\x3d\xb8\xfd\ +\x8a\x14\x14\xe5\x46\xc2\xda\xd4\x83\xa7\xde\x3d\x8a\x2d\xa5\x6d\ +\xb8\xff\xfa\x2c\x64\xa7\x90\x2f\x55\xd1\xf5\x35\x97\xc0\xf2\xd4\ +\x4a\x93\x2e\x5c\x43\x4f\x37\x56\xaa\x0a\x14\xeb\x1c\x2e\x69\x25\ +\x65\x71\x9d\x3e\x31\x62\x70\x29\x7f\x28\xcb\xf4\xf9\x06\xea\x9a\ +\x83\xbf\x67\x82\xc1\x1d\xc9\x79\x34\x50\x15\xe4\xe4\xd9\xa2\x38\ +\xc1\xcc\x84\x82\xc9\x45\x15\x05\xd9\xdd\xbd\x4d\xe8\xec\xa8\x97\ +\x29\x52\xbc\x14\x07\x77\x4f\x8f\x2e\x5c\x28\x05\x5a\x9e\xce\xcc\ +\x7d\x29\xc6\x20\x33\x42\x43\x23\x65\x2a\x94\x9b\xe8\x38\xf7\x70\ +\x36\xb6\x94\xe3\x70\xe9\x26\xe9\x65\x09\x94\xa1\x32\x33\xc6\x8a\ +\xb0\xcb\xca\xb7\x90\xbf\xf3\x62\x77\x70\x35\x2c\x6d\x14\x8a\xa8\ +\x43\x30\x29\x3f\x02\xb5\xcd\xfd\x78\x63\x73\x95\xcc\x31\xe0\x38\ +\x2c\x2b\x25\x04\xb3\x27\x24\x62\xfa\x88\x08\x42\x79\x65\x42\x88\ +\x18\x16\x11\x15\x2b\x91\x98\x78\x12\xe2\xe2\x29\x09\x58\xbe\xb5\ +\x06\xf7\xff\x6d\x1f\x16\x1f\x69\x81\x96\x97\xe7\xa0\x7d\x72\x13\ +\xcc\xc8\x4b\x0e\x15\x68\x2c\x25\xf2\xd2\x4e\x82\x5e\xb7\xaf\x15\ +\xc1\xc4\xb0\x33\xe2\xcd\x38\x58\xde\x21\x5d\x08\x9f\x75\x05\x25\ +\x49\xab\xd2\xbd\xa5\xc5\x73\x93\x95\x79\xc8\xaa\x8f\xea\xee\xbb\ +\xef\x76\x3e\x7a\x45\x9f\xee\xbb\xcf\x58\xb0\x70\xee\xb5\x62\x15\ +\x7c\x61\x9e\x1f\xa6\x37\xe8\x45\x28\x4c\x16\x1c\x76\x87\xbf\xc4\ +\xa1\xf2\x77\x57\x2b\xdf\x2b\x0d\x59\xca\xf7\x5c\xa3\x0b\x4c\x42\ +\x31\x50\xa8\xc0\x03\xd1\xd4\xe5\x85\x39\x38\x5c\x66\xb9\x7a\x7c\ +\x1e\x81\x42\x3e\x3f\xa7\xc8\x78\x8a\x94\x9c\x4b\x0a\xac\xca\x4c\ +\xd7\x20\x22\x20\x01\x95\x30\xe8\x0d\x32\xd3\x96\xfb\x2a\x19\x5e\ +\x6d\x56\x0b\x09\xbd\x59\x6a\x84\x71\xb1\x19\x92\x26\x63\x65\xe0\ +\xd5\x19\x9c\x0e\x1b\xd4\x5a\x5e\x8e\xca\x80\x20\x9d\x8b\xae\x4f\ +\xd7\xf3\xaa\xc9\x4d\xa9\x88\xc4\x30\xfb\x55\x26\x2c\xb6\xb4\xdb\ +\x50\x4c\x83\x6e\xa2\xc1\xcf\x22\x52\xc2\xcd\x40\x3c\x29\x52\xe5\ +\x9f\xe6\xe6\xa1\xf7\x5a\x69\x51\xf1\xa0\xa3\xcf\x49\x04\xc9\x45\ +\x7e\xd8\x25\x64\x94\x93\xf7\x71\x04\x8d\xbc\x20\x0f\xcf\x65\x64\ +\xb2\x15\x4e\x71\x62\x67\xaf\x0d\x56\xb2\x8e\xf8\x70\x25\x59\xe0\ +\xf9\x8c\xfe\x8e\xc7\x47\xaf\xd7\xa3\xb6\xa5\x13\xa9\xa6\x62\x5c\ +\x3b\xd3\x80\x5f\x2f\xd7\x3b\x5e\x7a\xe9\xa5\xdb\xe9\xeb\x46\x7a\ +\x35\xd1\xab\x4d\x2c\xcf\xe6\x70\xc0\xae\x4e\xc1\xf4\x19\xdf\xa0\ +\xc1\x71\x0e\x9c\xc0\x61\xb3\x93\xc6\xbb\x49\x48\xbc\xec\x93\x41\ +\x84\x14\xa0\xf1\xac\x09\x96\xfe\x7e\xbf\x20\xb5\x64\x41\x06\xbf\ +\x99\x2b\x37\xce\xf7\xcf\x1d\x5b\x06\xad\x4f\xea\x70\x67\xe6\x79\ +\x74\x64\x85\x5a\x66\x95\x81\x42\x2c\x9d\xd4\xe5\x74\x48\xb7\xb5\ +\x4c\x19\x23\xe5\x38\x71\xec\x24\xb6\x6d\xd8\x8e\xb0\x88\x10\xcc\ +\xb8\x62\x36\xe2\x92\xe2\x08\x91\x74\xfe\xb8\xb0\x7f\x60\x59\xa8\ +\xc0\x0c\x26\x0e\x2b\xec\x74\xcf\x76\x37\xcf\x05\x57\xe6\xf4\xb1\ +\xb2\x98\x43\x49\x29\x4c\x06\xe9\x18\x4b\xc9\xf6\x60\xde\x65\x7a\ +\x8a\xdb\x3c\x12\xbb\x05\xdc\x99\x6a\x30\xd8\xa8\x94\xf5\xc1\x42\ +\x28\x3e\x64\xe1\x0f\x16\x05\x77\xc6\xd9\x78\xde\x9d\x5a\xa9\xd7\ +\x1d\xd8\x7d\x10\x47\xf7\x1e\xc4\xa8\xa2\x5c\xe4\x8f\x9a\x22\xc5\ +\x68\x8f\xdb\xf3\xd9\x84\x27\xf1\xac\x11\xa1\x55\x15\xe8\xac\xac\ +\xa1\x31\xb1\x0e\xef\xf3\x38\x1c\x0a\x0d\xf2\x4a\xd5\x5f\xaf\x75\ +\x8a\xa0\x8e\x97\x94\x63\xf5\xfb\xeb\x28\x20\xb6\x20\x3c\x2a\x02\ +\x37\x7e\xed\x3a\x24\xa6\xc4\xd3\x00\xd8\x09\x32\x0c\x28\x2b\x2d\ +\xc3\xf2\x65\x2b\x84\xb2\x87\x87\x87\x62\xf1\x4d\x57\x22\x33\x37\ +\x83\x04\xfa\xc9\x85\x7c\x44\x26\xec\x92\xb5\x3a\xbb\x31\xd1\x49\ +\x4a\xc1\x89\x64\xd5\x60\xa1\x8a\x56\xf0\xaa\x48\x5a\x12\xa4\x1b\ +\x1b\x56\x6d\xc6\xe6\xcd\x5b\x11\x11\x1c\x81\xf8\xc4\x14\x24\xa7\ +\xa7\x12\x69\xe9\xf7\x0f\xf0\x27\x73\xe4\xf9\x4f\x9e\x1c\x53\x5b\ +\x53\x83\x0f\x5e\x5f\x21\xf0\x6a\x30\xea\xfd\xfb\x91\x10\x42\xcc\ +\x28\x1c\x3b\x12\xe3\xa7\x14\x41\x4b\x1a\x6d\xb1\xf5\x49\x68\xc1\ +\x93\x61\x07\x37\x0c\xfa\x75\x61\xe0\xbd\xd3\xe1\x84\xf3\xec\xec\ +\x1f\x78\x76\x98\x89\x02\xfb\xe6\xc6\x76\xec\x58\xbf\x06\x7b\x8a\ +\xf7\xe3\xd4\xd1\x23\x48\x4e\x8d\xc5\xc8\xa2\x11\x70\x10\xec\x7f\ +\x96\x14\x99\x8f\xf0\x99\x5b\x3e\x08\x30\xc8\x07\x13\x5a\x69\xce\ +\xc9\x36\x95\x0e\x62\xa7\x4b\x59\x2c\xcd\xed\x56\xa3\xaa\xb2\x1a\ +\xc5\xfb\x0f\xc9\xb2\x13\x3c\x33\x35\x35\x33\x19\x8b\x6e\x58\x28\ +\xe9\x2e\xab\xd5\x8a\xad\x64\x11\x47\x8a\x8f\xc9\xb1\x26\xd2\x92\ +\xa2\xc9\xa3\x91\x9e\x9d\xe6\x9f\x04\xe9\xbd\x28\xa8\x08\xa4\xd0\ +\x02\x13\x14\xc3\x22\x43\x95\x55\x2a\x08\xc7\x82\x82\x09\x42\xed\ +\x5c\x95\x70\x0e\xf8\xee\xc1\xc7\xa8\x08\x5a\xfb\x7b\x7a\x50\x76\ +\xf4\xb8\x58\x1f\xcf\x8e\xed\xb7\x28\x73\xe3\x19\x19\xf6\xef\x2d\ +\x81\x8b\xee\x6d\xda\x9c\xc9\x02\xb5\xee\xf3\xbc\xc7\xc1\xd7\x38\ +\xcd\xdf\x90\x14\xb9\xcb\xc0\x60\x24\x4b\xa3\xff\x0c\xa4\xf0\xbc\ +\x38\x8e\xd3\xe5\x94\xca\xc9\x99\xb2\x1b\xee\x3c\xc3\x5d\xd3\x45\ +\xb0\xef\x74\x79\xc4\x38\xce\x2b\xce\x93\x26\x20\x82\x2b\x5e\x05\ +\xa9\xb7\xbb\x1f\x1a\xba\x99\xe0\x10\x13\xac\x16\x07\x0e\xed\x27\ +\xc6\x36\x7d\x3c\x59\x5f\x22\x59\xdd\x09\x94\x1f\x39\x81\x90\x30\ +\xb3\x08\x8a\x61\xce\xd2\x67\x91\x41\xe1\x81\x86\xc7\x3f\x01\xd3\ +\xeb\x3b\x63\x80\x55\x03\xb0\x30\xd8\xa1\xeb\x74\x04\x4f\x7a\x9d\ +\xbf\x21\xd5\x23\x1a\xcf\x70\x77\xe5\x75\x0b\x91\x5f\x90\x47\x82\ +\x33\x22\x2d\x2b\x0d\x36\x12\x8a\xca\xdf\x1d\xc6\x03\x25\x3e\x99\ +\x2d\xc4\xa9\x90\x17\x0d\x59\x6c\x90\xc9\x48\x7f\xbb\x48\x91\xd2\ +\x31\x7a\x7c\x01\x4e\x96\x55\xa2\xa2\xac\x82\xee\xaf\x1f\x95\xe5\ +\x55\x98\x44\xcf\x10\x98\xb8\x38\xf8\x7e\xa4\xd5\x9c\xce\xc9\x90\ +\x17\x88\x3d\xf9\xbe\x78\x99\x12\x71\x21\x76\xa7\xf2\xac\xfe\x63\ +\x78\x39\x0e\x73\x48\x30\x6e\xbd\xf3\x26\xcc\x98\x3b\x15\xd1\xb1\ +\x51\x82\x4c\xec\x66\x06\x26\x46\xfa\x7b\x7c\x0d\x74\x9f\xbc\x16\ +\x19\x7f\xc7\xcf\x26\xae\x07\xfe\xf1\x50\x0d\x2d\x3c\x65\xe2\xea\ +\x79\x07\xe9\x2a\xff\xd4\x04\x35\xf9\x3a\x07\xba\x3a\xbb\xa4\xdd\ +\x8e\x7d\x8f\x81\x1e\xa0\xa5\xa9\x05\x0d\x75\x4d\x48\xcf\x49\x11\ +\xe1\x31\x9c\xf2\xe0\xb1\x65\xf2\xba\x2d\xfd\x01\xb8\xa4\x81\xe8\ +\xed\xee\x1b\x20\x3d\xa6\x60\x65\x0d\x4c\x1e\x50\x9b\x45\xe9\x9d\ +\xe4\x01\x61\x1f\xc9\x83\xcd\x37\x58\x5b\x55\x87\x93\xe5\x95\xc4\ +\xf6\x3c\x48\x4a\x4d\x44\x5a\x66\x2a\x41\xb7\xb2\xbe\x4b\x66\x5e\ +\x86\x7f\xc0\x7c\xfe\x1e\x50\x9d\x64\x64\xea\xaa\x1b\x48\x28\x55\ +\x42\x10\x72\x46\x66\x23\x3d\x33\x05\x01\x10\xe4\x41\x0a\x25\xc5\ +\xba\xee\x96\xab\x50\x76\xac\x02\xff\x7c\xe2\x45\xf4\x76\xf5\xc9\ +\x7c\x09\xaf\xcc\x3f\x24\x65\xb3\x58\x14\xd2\xc1\xf0\x49\x42\x60\ +\xc5\x68\xa4\xe7\x0b\x8b\x08\x43\x5c\x82\xd2\x88\x54\x57\x53\x4f\ +\x7e\xb7\x42\x84\x31\x6a\x4c\x01\x82\xc9\x77\x5a\xfb\x95\xc9\xa1\ +\xac\x24\x9c\x7b\x0d\x23\x97\x11\x14\x9c\x33\x20\x08\x0f\x59\x8b\ +\xc5\x6a\x95\x7b\xe5\x67\xe4\xf1\x3b\x72\xa0\x14\xad\x4d\x6d\x82\ +\x5e\xd9\x79\x59\x32\xc7\xc3\x45\x42\xb4\x59\x1c\xfe\x6a\xc8\x19\ +\xe9\x61\xf2\xa5\x1e\xa7\xd2\xe2\x78\x2e\x09\x6a\xcf\xcc\x90\xf0\ +\xc3\x30\xec\xf4\xf5\xf6\xcb\x4d\xb2\x56\xf2\x3a\x61\x7d\x14\x2f\ +\x9d\xa2\x01\xce\xcc\x4b\xc7\xb1\xc3\x65\xfe\xd6\x76\xaf\x5f\x73\ +\x81\x7e\xda\x5f\x47\xfe\xa4\xb1\xbe\x19\x2f\x3e\xf9\x32\x1a\x6b\ +\x9b\x31\x6a\xdc\x48\xdc\xfe\xcd\x5b\x69\x20\xc3\xb0\x6f\x67\x31\ +\x5e\x7f\x7e\x99\x0c\xec\xcc\xf9\xd3\x70\xdb\xbd\x37\xa3\xad\xb5\ +\x03\x6b\x3e\x58\x8f\xdd\x9b\xf7\x92\xc0\x7b\x24\x1c\x08\x0a\x0e\ +\xc2\xed\xdf\xba\x0d\xb3\x68\x9f\x77\x5f\x5d\x8e\xf5\x1f\x6e\x20\ +\xc2\x11\x82\x1b\xef\xb8\x8e\x3e\x9b\x8e\x9a\x53\x75\x58\xb3\x7c\ +\x03\x4a\xf6\x94\xa0\xb7\xa7\x97\x34\xd9\x85\xdc\xc2\x5c\x7c\xf7\ +\xa7\xdf\x1e\x68\xfb\xe3\x69\xc3\x56\xf2\xcd\x7b\xb6\x1d\xc0\xa9\ +\x93\x55\x84\x1c\x36\x98\xcc\xc1\x48\x4e\x4b\x42\x50\x90\x51\x42\ +\x8f\x35\xef\x7f\x8c\x03\xbb\x0e\xd2\xbd\x85\x20\x8f\x8e\x17\x41\ +\x95\x9e\xc4\x2d\x77\xdd\x28\xfb\xad\x7a\x6f\x0d\x36\xae\xde\x42\ +\xf7\xd5\x2b\x48\xb4\x3b\x7b\x2f\xdd\x9b\x09\x4d\x0d\xcd\x22\x94\ +\xdb\xef\xbb\x85\x8e\xcb\xc3\x4b\x4b\x5f\xc5\x96\xf5\xdb\x91\x99\ +\x93\x81\xfb\xbf\x7f\x2f\xc5\xa6\x76\x3c\xff\xd7\x97\x65\x3c\xe2\ +\x12\x63\xa1\x27\x6b\x3e\x4e\xe7\xe5\xb9\x1b\x26\x7a\xb6\x69\x73\ +\xa6\xe2\xb6\xbb\x6f\x42\x3f\x11\xae\xa5\x7f\x7f\x05\xf5\x74\x5d\ +\xbe\x27\xe9\x02\xe7\xcc\x2c\x0d\x26\xdf\xef\xac\xcb\x66\xa3\x68\ +\x76\x91\xa2\xac\x3e\xc7\xa7\x09\xcf\xa7\xe4\x65\x69\x00\x58\x78\ +\xac\x61\x3e\xba\x69\x7e\x38\x8e\x37\xec\xe4\x3f\xca\x8f\x9f\x54\ +\x66\xfb\x34\x34\xc9\x1c\xb2\x08\x22\x32\x6c\xa5\xad\xfd\xad\xe8\ +\xe9\xe6\x81\xb4\x2b\x35\x37\x1a\xb8\x3e\xfa\xdb\x66\xb5\x0d\x34\ +\xaf\x71\x99\xc7\x42\x0f\xc4\xb0\xe1\x26\x32\xa2\xd5\xa9\x49\x23\ +\x8f\x62\xc3\x8a\x8d\xf2\xd9\xd8\x49\x45\x88\x8c\x89\x14\x0b\xc8\ +\xca\x49\x13\xab\xe0\xf0\x83\xad\x98\xef\x89\x09\x09\xdf\xd7\x8a\ +\x77\x3e\xc2\x96\x75\xdb\xc5\x2a\xc3\x22\x23\x64\x40\x18\x21\xd8\ +\x9f\x29\xa9\x32\x15\x0d\xae\x11\x0d\xb5\x8d\x78\xf6\x89\xe7\x15\ +\x32\x43\x03\x13\x1d\x17\x4d\xa4\x27\x46\x49\x5f\x92\xb2\xf1\xb9\ +\xfb\x09\x4a\x5d\x84\x08\xdb\x36\xec\x40\x1f\xbd\x37\x1a\x14\x4b\ +\xd9\xf6\xf1\x4e\x52\xaa\x0d\xc2\xb6\x99\xb2\x9b\xcc\x24\x34\x52\ +\x4a\x46\x18\x86\x3f\xb6\x1a\x17\x29\x8d\xca\xaf\xe8\xbd\xf6\x5e\ +\x99\xd6\x16\x68\x42\xe6\xf7\x36\x0b\x2f\xe5\x51\x2d\xf7\x97\x94\ +\x9a\x80\xae\x8e\x6e\x32\x88\x3e\x52\xe2\x83\x98\x36\x7b\x12\xa2\ +\xe2\xa3\x49\xc0\x14\xfa\x74\x92\x72\x84\x78\x04\xf1\x18\xad\xec\ +\x74\x5f\x31\x04\xc1\x53\x67\x4f\x20\xb6\xc2\x15\x2a\xd7\xa7\x64\ +\x58\x06\x59\x1e\xdf\x10\x0b\xa2\xa7\xab\x57\x06\x39\x27\x3f\x8b\ +\x7c\x5b\x28\x36\xaf\xd9\x8a\x26\xb2\xa6\xb6\xe6\x76\x49\x04\xf3\ +\x03\xcd\xbd\x62\x26\xf6\x92\x76\xd7\x10\xcb\xeb\xa3\xfd\x1d\x56\ +\xa7\x32\x41\x84\x97\xf3\xd0\x9c\xbd\x7a\x2e\x7f\xa6\x26\xa8\x61\ +\xdf\xc2\x1d\xd9\x8d\x34\xc0\x56\x12\x30\xb3\xcb\x84\xe4\x04\x4c\ +\x98\x36\x86\xae\x15\x42\x37\x1f\xed\xf7\x63\x3e\x39\x1f\xaf\xc7\ +\xc2\x83\x56\x5a\x5c\x86\xe2\xbd\x87\xa4\xa7\x34\x32\x3a\x82\x08\ +\xd4\x15\x28\x18\x93\x2f\x56\xa3\x53\x6b\x06\x18\x5e\x00\x5e\x19\ +\x82\xdd\x74\x1d\xb6\xd0\xae\xce\x6e\xbc\x47\x96\xcc\xe4\x65\xf4\ +\xf8\x42\x29\x1e\x70\x13\x31\x6b\x7a\x74\x5c\x14\xe6\x2d\x9a\x43\ +\x7e\x2b\x92\xac\xdc\x8c\x2d\x6b\xb7\x11\x6b\xb6\x10\x5d\x37\x61\ +\x02\xf9\xc8\x29\xb3\x26\x10\xb4\xd7\xe3\xe3\x55\x9b\x48\x08\x3d\ +\xfe\x19\xc4\xbe\x81\x31\xd3\x50\x8c\x24\x04\x46\x9c\x9c\x4a\x60\ +\x96\x4b\x5a\xe1\x91\xe1\xf8\x0a\x59\x72\xce\x88\x14\xbc\xf1\xc2\ +\xfb\xd8\xbd\x75\x2f\x29\xb6\x8d\xc8\x60\x2d\x12\xc9\xba\x17\x5e\ +\x33\x8f\x94\xd5\x4a\xf7\x67\xc1\xae\xcd\x7b\xe4\x9a\x7c\x4f\xf3\ +\x17\xcf\x45\x41\x51\x06\xf6\x1d\x2c\x1b\x08\x87\xce\x2d\x3c\x9f\ +\x4a\x42\x06\x17\x59\x59\x4d\x65\x3d\x09\xb0\x47\x6e\x28\x2c\x22\ +\x1c\xe3\xa6\x16\xe1\xe0\xae\x62\xb4\xb7\xb6\x2b\xc5\x69\x12\x5e\ +\x4a\x46\x34\x8a\xc6\x8f\x16\x4d\xe2\xcf\x7a\x7b\xfa\xd1\xdd\xd5\ +\x23\x81\x72\xa0\x69\x59\x59\xfa\x43\x3d\x10\xd4\x07\xba\xe9\x98\ +\xd9\x32\xb4\xa5\x66\xa5\x52\x98\x11\x86\xce\x8e\x2e\xac\x5b\xb1\ +\x01\x3b\xb7\xec\x46\x46\x76\x2a\x16\x2d\xb9\x12\xb9\x23\x73\x06\ +\xf4\x8d\x15\x8a\x49\x44\x7b\x4b\x87\x20\x02\x5b\xe5\xe8\xf1\xa3\ +\x64\xc0\x79\xae\x5c\x7c\x62\x1c\x59\x82\xc3\xaf\xf9\xa4\xbd\x84\ +\x06\x39\xf9\xd9\x34\x70\x37\x90\x85\xaa\xb0\xfa\xdf\x5b\x48\xc9\ +\xf6\xe2\x78\x59\x39\x76\x6f\xdb\x27\x74\x9e\x2d\xcc\xe5\xf2\xca\ +\xf1\x13\xa6\x8d\xc7\xed\xff\xb3\x84\xde\x03\x25\xfb\x2a\x44\x79\ +\xdd\xa4\xf1\x31\x59\x31\x14\x22\x5d\x4b\x44\x24\x8a\xc2\x8c\xd1\ +\xa2\xd0\x6b\x28\x7c\x1a\xe8\x74\x3b\xc7\xc6\xca\x17\x47\x96\x3e\ +\x9a\x5c\x47\x54\x5c\x08\xf9\xbb\x54\xec\xda\xb2\x47\x64\xce\xcf\ +\x60\x20\x8b\x5e\x70\xd5\x3c\x62\xa9\xc0\x7b\xaf\xad\x26\x26\xed\ +\x24\x7f\xe9\xc6\x84\xa9\xe3\x30\x6b\xe1\x74\x70\x6e\x42\x26\x2d\ +\xa9\xce\x8b\xb0\x78\x25\x74\x62\x18\x69\x6f\x69\xf7\x2f\x00\xa3\ +\x15\xa6\x94\x98\x9c\x88\xa4\xb4\x44\xb4\x34\xb7\xc2\x48\xc2\x61\ +\xe1\x8d\x1a\x5b\x20\x5a\x6a\xa4\xa0\x54\x43\xff\x75\x93\xb0\x99\ +\xd4\x24\xd0\xbe\x2a\x7f\xe4\xcb\x10\xcb\xb0\x13\x6c\xd6\x4a\xf6\ +\x45\xd1\x22\x5e\x44\x86\x6e\x94\x2c\x62\xc2\x94\xb1\x72\xfe\x83\ +\xbb\x4b\x50\x41\xfe\xb4\xb5\xa9\x55\xfc\x54\x10\x59\x75\x2e\x91\ +\x10\x75\x80\x15\x06\x60\x5d\xe5\x1b\x48\xdf\xf1\xf9\x84\xd9\x91\ +\x72\xf0\x3d\xfb\x06\xc5\x6a\xcc\x7a\xd9\x2f\x65\x11\xd9\x89\x8b\ +\xd7\xa1\xae\xaa\x95\x2c\xb6\x04\x7a\x8d\x81\x10\xa2\x8f\x7c\x0a\ +\x85\x10\x4a\x46\x41\xee\x2f\x86\x20\xd5\xe9\xf2\x29\x99\x14\x9f\ +\x12\xd8\xfb\xfc\x2d\x15\x4e\x82\x4a\x9b\xd5\x23\x21\x94\xcf\x1b\ +\x48\x36\xfb\x3e\x35\xb5\x15\xe8\x97\x66\x37\xd0\xd7\x13\x24\xcf\ +\xac\x64\x9f\x94\x15\x7e\x65\x85\x27\xba\x85\xcd\x6b\xf7\x60\xd5\ +\x3b\x6b\x68\x3f\x1b\x29\x49\x02\xae\xb9\x65\x31\xa1\x4a\x18\x6c\ +\x7d\x5e\xff\x54\xee\xf3\x64\x9b\xbc\xab\xf8\x19\x82\x19\x1e\x05\ +\x35\xcf\x12\x35\x05\x11\xa3\x0a\xc1\xc4\x69\xe3\x50\x7e\xf4\x24\ +\x6c\xa4\x35\x89\xc9\xf1\x42\xb9\x39\xa6\x33\x87\x06\xcb\x45\x9c\ +\xa4\xf9\x3d\x64\x7d\x89\x29\x0a\x6b\x65\xa6\xd9\xd2\xd8\x42\x96\ +\x79\x00\xa9\xe9\xc9\x38\xb0\xbb\x58\x1c\x3f\xf7\xe4\x70\x58\xc0\ +\x0f\x52\x79\xb2\x46\x82\xfa\x6b\x89\x15\x9e\xa0\x73\xbf\xff\xc6\ +\x87\xf2\x50\x02\xd9\x12\x5f\xaa\x06\x05\xe1\x5a\xb2\xb0\x58\x18\ +\x4c\x06\xb8\xfb\xdc\x14\x63\x1e\x25\xe2\xb2\x8e\x88\x42\x26\x3a\ +\x08\x11\xd8\x67\xaa\xfc\x8b\xf8\x30\x0b\x6e\xa3\xcf\x3e\x78\x63\ +\x95\x40\x78\x29\xed\x2b\xb3\x8b\x3c\x5e\x49\x4e\xf3\x84\xc6\x40\ +\x70\xae\x84\x30\x10\x7f\xc6\xd6\xc6\x09\x87\x50\x7a\xc9\x04\x4b\ +\x52\xc6\x0f\xe8\x9e\x46\x8c\xca\x23\x9f\x47\xcf\xb2\xe3\xa0\x28\ +\xb4\x82\x26\xbe\xb3\xa6\x6e\x9d\xe9\x82\x94\x19\x4d\x10\xa5\xf3\ +\x7a\xbc\xa7\x67\x50\xcc\x46\xb4\x36\x77\x62\xc3\xca\x4d\xe8\x25\ +\x2e\xc0\x4a\xcc\xac\xf7\xe8\xa1\x32\xec\x27\x94\xcb\xc8\xca\x82\ +\x8e\x27\xc9\x68\x34\xc3\xea\x8a\x76\xb0\xe8\xf8\x9e\xfa\xfb\xfb\ +\xc5\x39\xf7\x3a\x7a\x11\x13\x14\x43\x82\x33\x8b\x20\x73\x08\xc6\ +\x58\x43\x8b\x0f\x97\x60\x76\xc1\x0c\x21\x17\x8c\xdf\x4c\x99\x6d\ +\x3e\x1b\xbc\xfd\x5e\x34\xd4\x34\x60\x12\x41\x50\x3a\x41\x5f\x4d\ +\x45\x2d\xf9\xc7\x36\xbc\x41\x0c\x93\x9d\x76\x7b\x5b\x27\x59\x8a\ +\x8b\xb4\x2a\x92\xac\xb6\x10\x1d\x1d\x9d\x58\xf6\xd2\x3b\x38\x5c\ +\x52\x8a\x71\x13\xc6\xc8\xfc\x87\x9e\xae\x1e\xd9\x27\x33\x27\x5d\ +\x82\x6c\x3b\x39\x7d\x8b\xcb\x02\xa3\xc5\x20\x9a\x3b\x6a\x4a\x11\ +\x26\x4e\x1f\x87\x4d\x6b\xb6\xa1\xb9\xb1\x19\xff\x7e\xfd\x43\xf1\ +\x11\xfc\xd0\x85\xe3\x0a\x44\xab\x99\xed\xb1\x45\xf2\x33\xbc\xf5\ +\xf2\x7b\x02\xb7\x6a\xff\x5c\xbe\x88\xa8\x30\x71\x01\xcc\x68\x2d\ +\x96\x7e\x09\x17\xd8\x9f\xfa\x3c\xca\xb2\xfd\xdc\x75\x16\x42\x8a\ +\xca\x8a\x59\x7d\xaa\x5a\x98\xe6\xd6\xf5\x3b\xb0\x63\xe3\x6e\x21\ +\x55\xec\x77\x59\xd8\x56\x95\x12\xb6\xf0\xf5\x98\xb0\x59\xe8\x3f\ +\x66\x88\xac\x9c\x9c\xc4\xe0\x71\xe1\x70\x81\x0d\x01\x3e\x85\x08\ +\xf2\x73\xf1\x7c\x46\x23\x17\x8e\x35\xca\xcf\x06\xac\x78\x77\x15\ +\xc1\xf4\x61\x51\x66\x86\xc9\x93\xc7\x2b\x25\xf1\xd1\xef\xec\xc7\ +\xe2\xc5\x57\x61\xee\xf5\x73\xe4\x9a\xe7\x24\x2c\x6e\xaf\xb2\x02\ +\x2b\x91\x34\x7a\x88\x60\xc4\xc6\x25\xd1\x20\xf8\x48\xfa\xe9\x48\ +\xcb\xce\x91\x3e\x94\x98\xd8\x78\xc2\x7d\xce\x4e\x68\x31\x79\xe6\ +\x0c\xe9\x47\x51\xab\x78\xc1\xb3\x1c\x8c\xcc\x2d\x52\x7e\xef\xc0\ +\x10\x42\x41\x7d\x18\x6e\xb8\xed\x46\x22\x21\x66\x9c\xa2\x00\x99\ +\xfd\x87\xd5\x4a\xfe\x23\x2e\x11\xb1\xf1\x31\x98\x42\x4c\x6b\xec\ +\xe4\x22\x0a\x29\x3a\xc8\x22\x33\x60\xef\xf3\xa0\xa1\xba\x4d\x2c\ +\x2e\x3e\x29\x0d\x23\x47\xe7\x61\xc1\xe2\x85\x52\x7c\x8d\x8d\x4b\ +\x46\x6e\x76\x21\x31\xde\x50\x22\x0f\xe1\x08\x8f\x30\xe1\xa6\xdb\ +\x6f\x41\x44\x64\x1c\x0e\x51\xec\xd4\x4d\x0c\x8e\x05\x95\x92\x96\ +\x05\xb3\x39\x02\xa1\xa1\xc4\x54\x73\xf3\x85\xe9\xb1\x50\x19\xb6\ +\x79\x11\x57\xbd\x51\x2f\xd6\x34\x71\xc6\x78\x8c\x9b\x3c\x46\x16\ +\xff\x49\x48\x4c\x41\x6e\x3e\xc5\x6e\x04\xd1\xe1\x74\x3e\xce\xb5\ +\xea\xf5\xc1\x52\x9d\x98\xbd\x70\x1e\x09\xc9\x40\x21\xc0\x0e\x74\ +\xb4\x77\xc8\xd8\xe5\x8c\xc8\x92\xb4\x61\x3d\xc5\x82\x4c\xb0\x42\ +\x23\x62\x64\xdd\xb4\xa4\x94\x74\xe4\xa5\x71\x8b\x63\x1a\x29\x51\ +\xa4\xe4\x67\xd3\xb3\x72\x48\xe9\x63\xe8\xf9\xb2\x64\x89\x2d\x2d\ +\x91\xa7\xd8\xa4\x14\xe4\xe5\x16\x88\xa0\x12\x69\xdf\x86\xda\x2e\ +\xb4\x36\xf4\x20\x33\x3b\x57\xd0\x2d\xb0\x48\x91\x47\xf2\xb3\x0e\ +\x7a\xa6\x74\x99\x84\xda\xe7\xe5\x59\xc0\x43\xc3\xa7\x54\x15\xfe\ +\x78\xab\x5d\xf7\xc0\x53\x06\x3c\xf2\xed\xff\x43\x27\x69\x7f\x2f\ +\x5b\x00\x69\x08\x53\xee\x10\xb2\x3c\x41\x2f\x72\x88\x4c\xfd\x99\ +\x3e\xf3\x40\x04\x02\x67\xbb\xcd\x29\x94\x97\x41\xc1\x48\xa6\x1f\ +\x42\x81\xac\x91\xe2\x16\x0e\xc8\x3b\xda\xbb\x84\xf8\xb0\x4f\x32\ +\x87\x98\x69\xd0\x23\x10\x4e\xda\xcf\xbd\xf7\xbc\x32\x02\x43\x49\ +\x0f\xf9\x20\x26\x22\xdc\xfd\xc5\xa1\x47\x5c\x7c\xac\xc2\x46\x49\ +\x53\x59\x9b\x2d\xe4\x9f\xd8\xaf\xb1\x7f\x35\x18\xb5\x92\xf3\xe3\ +\xe3\x5a\xc9\x2f\xb7\xb5\xb4\x09\x7b\x64\xb6\x18\x41\xcc\x8e\xad\ +\xb3\x97\xef\xc5\xbf\x1a\x7d\x80\xec\x30\x39\x0a\xa6\x38\x8f\xd3\ +\x78\x6e\x7f\x06\x85\xef\x99\xb3\x26\x6c\x71\xcc\x9c\x39\x29\x10\ +\xc8\xfc\x28\xd9\x1e\x35\x9d\x9f\xaf\xd1\x21\x41\x7d\x22\xb1\x61\ +\x36\x60\x0e\x29\x78\xf5\x5d\x1e\x17\x5e\x44\xaf\xb7\xdb\xaa\x28\ +\x0b\x85\x2e\x0c\xb9\x3c\x71\x86\xc3\x1b\xbe\x07\x46\x0f\xce\x42\ +\xb1\xe5\x33\xab\xb6\xf6\x59\x25\x39\xca\x48\x21\x49\x8b\x7e\x9b\ +\xdf\xb2\x54\xa7\x35\x23\x30\xa1\x8b\x8c\x8a\x46\x53\x47\x0b\x74\ +\x7d\xff\xc4\xb5\xd3\x80\x07\x5e\x74\x0e\x5d\x55\x78\x7e\xd9\x4e\ +\x6c\xdd\xd4\x8c\xa3\x47\xb6\x71\x36\x59\x2e\xca\xeb\xad\xf0\x20\ +\x71\x10\xec\xf5\x97\x82\xf4\x7a\xad\x60\x7e\x20\x55\x24\xa6\xab\ +\xd5\xf8\xb3\x1e\x10\xad\xe1\x9b\xe2\x1b\xe0\x04\x30\xc7\x72\xdc\ +\x10\xa4\x90\x00\x45\x83\x58\x90\xac\x18\x4c\xb7\x59\x23\x95\xc5\ +\xd5\xbc\xfe\xc5\xd6\x54\x22\x54\xb7\x9f\x80\xf0\xf5\xd8\xd7\x49\ +\xae\x8f\x2c\x8c\xad\x4c\x11\x86\x4e\x7c\x97\x4f\xc9\xc3\xd1\x2d\ +\xab\x04\xa2\xa4\x51\xc9\xa0\xfb\xa4\xf2\x3d\x68\x48\xb8\x4c\xe3\ +\x71\xb9\xfc\x0b\xb7\x41\x9e\x51\x88\x03\xf7\x95\xf2\xb9\xfd\x73\ +\xd7\x03\x3e\x96\x9f\x93\xad\x97\x27\xcf\x28\xb5\xb5\xd3\x7f\x8d\ +\x84\x9f\x93\x61\x92\xcf\xc3\xf7\xc8\xe3\x21\xcd\xbe\x9c\x0e\x33\ +\x2a\x6b\xb1\x70\xf6\x84\xf7\x93\x06\x2c\xbd\x12\x22\x05\x98\xa8\ +\x4c\x10\x35\xe8\x07\xc8\xdd\xd9\xfe\x12\x14\xde\x58\x50\x94\x61\ +\x47\x7d\x25\xff\x08\xc8\xf4\xa1\x61\xb3\xde\x78\x15\x96\xdc\xe1\ +\x93\xd9\xa9\xaa\x33\x16\x18\x56\x0d\x51\x8c\x57\x0d\x53\xa4\x1f\ +\xea\xf3\xc0\x1c\x6c\xd1\xea\x33\xf7\xf1\x7d\x32\x85\x6c\x20\xab\ +\x3f\x4c\xf1\x7f\xa8\x73\x07\x16\xa4\x38\xad\xa4\x33\x7c\x23\xf7\ +\x69\x27\xf1\x7d\x7a\x43\xf2\xc0\xfd\x0f\xce\x53\x9e\xcf\xb8\x0c\ +\xb5\xdf\xa7\x7d\x36\x74\x21\x9d\xe3\x5b\x3d\x6a\x64\xc2\x42\xff\ +\xd0\xc2\x7b\xfc\x37\xbf\x13\x08\xf8\x0f\x35\xfa\x7e\xb9\x5d\x40\ +\x43\x17\x5b\x20\x87\x1b\xdf\x7f\xe4\x7f\x87\x16\x5e\x88\x39\xe8\ +\x8c\x25\x02\xbf\xdc\xbe\x48\x1b\xf7\xd9\x0c\xd7\xe2\xf2\xe5\xf6\ +\x05\xda\x84\xcc\x79\xad\x38\x9f\xc9\xae\x5f\x0a\xef\x0b\xb6\x75\ +\xdb\xcb\x51\xde\xbe\x14\x4e\x6f\xdf\xff\xff\xc2\xe3\x6a\x85\x34\ +\x29\xfd\x7f\xb2\xd5\xf4\xac\x44\x45\xc7\x3b\x70\xb8\xbb\x2f\xa0\ +\xe9\xf6\x5c\x7d\xb4\xfc\xfb\x42\x36\x2b\xc5\x42\x41\xa7\xad\x44\ +\xa8\x2c\x06\xae\x1a\xc6\xfc\x21\x75\xb3\xf3\xd9\xf7\x82\x7a\x7a\ +\x89\xb3\xd7\xd5\xd4\xa2\xa1\xa1\x1e\x8d\x0d\x8d\xa8\xa9\xa9\x16\ +\x9a\xfe\xdd\x47\xbe\x2f\x94\x7d\xa8\x8d\x5b\x09\xf9\xc7\x32\xbe\ +\xe8\x5b\x6d\xf7\x0a\x1c\x68\xfa\xa3\x30\x63\xab\xab\x05\x21\xfa\ +\xb4\xcf\x2e\x3c\x1e\x9c\x35\x6b\x56\xe3\xe4\x89\x13\x14\xec\x9a\ +\x07\xe2\xa4\xb9\xf3\x2e\x43\x6e\x6e\xde\x90\xc7\xb4\xb4\xb4\xe0\ +\xc3\xe5\xff\x96\x84\x2b\x27\xb2\x67\xcd\x9e\x83\x09\x13\x27\x7d\ +\xe6\x07\xe4\x7b\x79\xf3\x8d\xd7\xb1\xf4\xc5\xe7\x25\x60\xee\xe9\ +\xe9\x41\xb0\x29\x08\x0f\x3e\xf4\xf0\x59\xc2\xe3\x9f\xd3\xa9\x25\ +\x4d\xee\xb0\x15\x23\x3e\x78\x26\x12\x43\xe6\x50\x9c\x66\xfc\xe2\ +\xa1\x87\xd7\x86\xca\xae\x65\xd8\x5d\xff\x0b\x58\x5c\x9d\x08\xd5\ +\xc7\x93\x92\x5a\x2e\x8d\xe5\x71\xb0\xca\xc1\xf8\x3f\x9e\x7d\x06\ +\x9d\x1d\x9d\xf2\x3e\x2c\x2c\x14\xd1\xd1\x31\xc3\x0a\xaf\xbe\xbe\ +\x0e\xbf\xff\xdd\xef\xd0\xde\xd6\x2a\xf3\xdc\x7e\xfb\xdb\xc7\x2f\ +\x89\xf0\x38\x8d\xc5\x8a\xf0\xce\x3b\x6f\xa3\xaa\xaa\x16\x21\x21\ +\x26\xa9\xd4\x0f\x55\x3b\xa9\xeb\x5d\x85\x2d\xd5\x0f\xa0\xc7\xd9\ +\x8a\x70\x63\x02\x2e\xcb\x58\x8a\xe4\xd0\xcb\xcf\x5a\x71\xfd\xbf\ +\xb9\xb5\x59\xf6\x91\x8f\x7b\x19\xe5\x1d\xaf\xc0\xea\xee\x93\xb5\ +\x7f\xcc\x24\xbc\x10\x7d\xe6\xa5\xf3\x79\x97\x5f\xb1\x08\x0b\x2f\ +\xbf\x5c\x12\xbf\xbc\x80\xb8\xd2\x0f\xe2\x3d\x17\x6d\x12\x8b\xe3\ +\x6c\x0a\xff\xeb\xf1\x5c\xba\x20\x72\xfa\x8c\x19\xb8\xea\xaa\x6b\ +\x44\x70\x4a\x77\x98\x66\x48\x71\x74\xdb\xcb\xc8\xea\x5a\x05\xc2\ +\xbb\x6d\x4d\xe8\xb5\x57\x7c\x61\x84\xd6\xef\xac\xc6\xc1\xa6\x5f\ +\x61\x63\xd5\xed\x38\xd4\xfa\x34\x1c\x9e\x3e\x69\xf6\xe5\xc4\x43\ +\x56\xc4\xcd\x08\x31\xa4\x5d\x1a\xcb\xe3\x8d\xf3\x9c\xe9\xe9\xe9\ +\x30\x04\xf1\xf2\x54\x41\xe2\xff\xce\x15\x1b\x4a\xcb\xbb\x91\xf6\ +\xe5\xfd\xec\x8e\x61\xfd\xd1\xc5\x6e\x51\x51\x91\x92\x33\xf4\x9d\ +\x43\x81\xd2\x42\xaf\x45\x66\xc4\x2a\x34\xf4\xed\x42\x76\xe4\x95\ +\x48\x09\x5b\xf0\x5f\xb7\x3a\x1b\xf9\xb2\xb2\xf6\x17\x51\xd5\xf5\ +\x1e\x5a\xad\x07\x65\x5e\x8e\xe6\x93\x65\x40\x91\x17\xf5\x55\xe4\ +\xc7\xdc\x77\x7e\xf1\xdf\x85\x5c\x98\x97\x62\x94\x34\xd1\x79\x2e\ +\x21\xef\x0b\xec\xfb\x39\x0c\x82\xfa\x3c\x16\x8e\x89\x34\x15\x62\ +\x51\xde\x3b\x04\x47\x0d\x08\xd7\x67\x13\xcc\x44\xfe\xd7\x84\xe6\ +\x24\x48\x3c\xd1\xf1\x12\x8e\xb7\xbf\x80\x4e\xfb\x51\x59\xc7\x94\ +\x85\x26\x69\x3b\x7a\x94\x60\xfe\x59\x9b\xa8\x87\x50\x18\xfd\x10\ +\x8c\xda\xc8\x4b\x2f\xbc\xcf\x2b\x7b\xc6\x35\xc4\xb2\xe3\xc7\x84\ +\x41\xd6\xd5\xd5\x89\xd0\xc7\x8d\x1b\x87\xac\xec\x1c\xc4\xc7\xc7\ +\x0f\xa3\x18\x9f\x7e\x37\x4c\x96\xda\x5b\xb9\x4e\x18\x8e\xfd\x4d\ +\x07\x51\x34\x6e\x34\xe2\xe2\x62\x07\x8e\x6f\x6f\x6f\x93\xa4\x74\ +\x7b\x7b\x3b\xba\xba\xbb\x51\x58\x58\x88\xc8\xc8\xd3\x07\x8e\xbb\ +\xb0\xbb\xba\xbb\xa4\xba\xce\x2e\x23\x23\x33\x43\x7c\xfd\x85\x6c\ +\xed\xb6\x12\xec\xaa\x7d\x04\x8d\x84\x00\x1e\x9f\x55\x84\xc6\x2f\ +\x9e\x55\x16\x11\x16\x0c\xb3\x6f\x04\x46\x44\x7c\x0f\xf9\x09\x4b\ +\x38\xfd\x7f\xfe\x99\x97\xff\x36\xf6\x6f\xd9\xbc\x19\x4f\x3f\xf5\ +\x24\xb6\x6d\xdd\x06\x0b\xc1\xab\x74\x68\xa9\x78\x91\xd3\x20\xe4\ +\x17\x8c\xc4\x37\xee\xbb\x0f\xb7\xdc\x76\x9b\xf2\x7b\x3c\x17\xb8\ +\xed\xdc\xb1\x1d\xdf\x79\xe8\x01\x34\xb5\x76\x22\x3c\xd4\x8c\xd7\ +\x5e\x7f\x73\x40\x78\x5c\x16\xfa\xe7\x73\xcf\x61\xc5\xf2\xf7\xd1\ +\xd4\xdc\x42\x3e\xdc\x87\xc7\x1f\xff\x15\xee\xba\xfb\xde\x81\xe3\ +\xab\xaa\xaa\xf0\xb5\xdb\xbe\x82\xf2\x93\x95\xc2\x87\xa2\xc2\x43\ +\xf1\xda\x1b\xcb\x2e\x48\x78\x4d\x7d\xdb\xb0\xa9\xfa\x2e\x74\xd8\ +\x4f\x81\x7f\xbc\x4b\x26\xb1\xb8\x40\xae\xc7\x80\xd4\xa8\x89\x08\ +\xb2\xcc\x41\xc3\xa1\x74\x6c\x6c\xef\x45\xdf\xe4\x12\x22\x75\xe3\ +\xcf\x3b\x55\x79\x51\xc2\x93\xfe\x0b\x95\x4a\xfa\x3f\x86\x23\x2d\ +\xfc\x9d\xea\x1c\xd0\xc6\xe7\x78\x6b\xd9\x1b\xf8\xe1\xa3\x3f\x40\ +\x53\x53\xa3\x52\x8c\x25\x2b\xcb\x1f\x39\x12\xd5\xd5\x55\xa8\xa6\ +\x81\x3b\xb0\x7f\x2f\x1e\x3c\x52\x8a\xfa\xba\x7a\x3c\xf2\xe8\xa3\ +\x17\x9c\x7f\xed\xec\xea\xc4\xa9\x53\x95\xb2\x10\x6a\x98\x39\xe8\ +\x34\x42\xca\x3e\x78\xd2\xe4\x29\x78\xf6\x99\xa7\xd0\x43\x96\xc5\ +\xc4\xea\xb9\x7f\x3c\x8b\xf1\x13\x26\x62\xf4\xe8\x22\xb9\x9f\x67\ +\x9f\x7a\x1a\xa5\x74\x7d\xae\x8e\x73\xdd\xf0\xd1\xc7\xfe\x80\x31\ +\x63\xc7\x9d\x7f\xb6\xc4\x76\x82\xe8\xff\xf7\x89\x34\x9d\x92\x09\ +\xb4\xec\xdf\x3c\x1e\x0d\x32\x62\x27\x21\x41\xfd\x15\x9c\xda\x1f\ +\x86\x1d\xfb\x1a\xd0\xdc\xba\x8f\xbe\x73\xe0\xc8\xb1\x03\x68\x6e\ +\x69\xc6\x65\x0b\xa6\xc9\xef\xef\xaa\x60\xbc\xf4\xc2\x93\x7e\x45\ +\x82\x90\xb7\xdf\x5a\x86\xd2\xd2\x52\xb1\x96\xd3\x4e\x4a\x03\xd3\ +\xd8\x50\x07\x9b\xd5\x3a\xec\x80\x6f\xd8\xb0\x1e\x3f\xfb\xc9\x8f\ +\xd1\xdc\xd4\x20\xf4\xff\x96\x5b\x6f\xc3\x3d\xff\xf3\x0d\xa4\x11\ +\x29\x6a\xa5\x18\xf1\xd9\xa7\x9f\xc2\x32\x12\xae\xc7\xe3\xc0\x93\ +\x7f\xfb\x0b\xd2\x32\xd2\x71\xcb\x2d\xb7\x5e\xd0\x7d\xb2\xb5\xf2\ +\x94\x2f\x8f\xc7\x2a\xef\xcf\x4c\x12\xcc\x9d\x3b\x57\x2a\x2a\x8f\ +\x3e\xf2\x3d\x69\x8a\x3d\x78\xe0\x20\x5e\x5a\xba\x14\x4f\xfc\xe5\ +\xaf\xd8\xb5\x73\x27\x3e\x5a\xb5\x42\x99\xf6\xe5\xf2\xe0\x9e\x7b\ +\xbe\x81\xdb\x6f\xbf\xe3\x82\x88\x57\x73\xff\x56\xd4\xf7\xed\x91\ +\x09\x3c\x6e\xf9\x0d\xc6\x2c\x8c\x8e\xbb\x1f\x79\x31\xb7\x43\xef\ +\x89\x81\xbd\x76\x2f\x4a\x8d\x64\xd5\x1a\x37\x74\x2a\xad\xfc\x0a\ +\xd8\xf6\xfd\xef\x22\x77\xa2\x05\xf9\xa6\x5b\x3e\x1f\xcb\x53\x7e\ +\xff\xcd\x89\x55\x2b\x57\x60\xc5\x87\xcb\x87\xf4\x85\xdc\x93\xc2\ +\x1d\xd4\x4a\xc1\xf3\xf4\xad\xb7\xb7\x17\xcb\x28\xd0\x3e\x59\x59\ +\x03\xbd\x56\x85\x71\xa4\xed\x8f\xfd\xe4\xa7\xc8\xca\xca\x92\xef\ +\x13\x13\x13\xf1\xf3\x5f\xfd\x5a\xb2\x27\x9b\x37\xf3\xc4\xcc\x2e\ +\x7c\x44\xd7\x5a\xb2\xe4\x46\xa5\xf0\x7b\x89\x36\x16\x04\x2b\xcd\ +\xc9\x93\x27\xf0\xd7\x27\x9e\x90\xc2\xf0\x87\xf4\x3c\xf3\x2e\xbb\ +\x8c\x04\xb7\x12\xf5\x0d\xb5\x52\x60\x9d\x33\x67\xae\x64\x70\x2e\ +\xec\xda\x3e\x38\xbd\x3d\x22\x34\xa3\x5e\x83\xf4\xd0\x05\x98\x94\ +\xfc\x27\x44\x06\x15\x0e\x04\x69\xd3\x67\x4d\x22\x3f\x3c\x12\x1b\ +\x3f\xfe\x18\x5b\xb6\x6c\x43\x77\xb7\x15\xe6\xb8\x3a\xb4\xab\xdf\ +\x83\xd5\x35\x0f\x26\x5d\xdc\xe7\xe7\xf3\x82\xfc\xe1\xc2\x99\xe4\ +\x41\xe5\x6f\x85\x57\x16\xfb\x3e\xfb\xb8\xf2\xb2\x32\xec\xdb\xbb\ +\x97\x18\x96\x4e\x26\x60\xce\x99\x37\x77\x40\x70\x81\x8d\x05\x38\ +\x6d\xc6\x4c\x6c\xd8\xb8\x99\x20\x58\x2d\x8d\xbd\xa7\x2a\x2a\x30\ +\x22\x3f\xff\x92\xfa\x5c\x0e\x81\xee\x7f\xe0\x41\x1c\x3b\x7a\x94\ +\x94\x71\x25\x3a\x3b\xda\xf0\xfd\xef\x7d\x47\x2a\xf7\x9c\x16\x4c\ +\x4b\x4d\xc3\xa3\x3f\x7c\x0c\x29\x29\x29\x17\xe3\x60\xa4\x02\x6f\ +\xb2\x4d\xc7\xac\xbc\xb7\x65\x71\x84\x33\x37\xb3\xd9\x8c\x6b\xae\ +\xbd\x16\xe9\x69\x79\x58\xb1\xe5\x4f\x88\x19\x5b\x8a\xba\x76\x37\ +\x46\x84\x34\x7c\x4e\xc2\x93\x5f\xd4\x32\xe0\xba\xeb\x6f\x10\x1f\ +\xe0\x39\x63\xb2\x04\xf7\x9c\xd4\xd6\xd6\xe2\xa5\x7f\xbd\x28\x4c\ +\x72\xa8\xec\x4b\x6d\x6d\x9d\xf8\x45\xde\xb7\xab\xa3\x03\xeb\xd7\ +\xae\x95\xae\x2a\x65\xd6\x91\x4a\x26\x2e\xf6\x91\x85\x46\x85\x85\ +\xc0\xe6\xb0\xa3\xbf\xaf\x17\xad\xad\x2d\x97\x5c\x78\xbc\x25\x25\ +\x25\xe1\x87\x24\xa0\xa6\xc6\x06\x1c\x25\x21\xb6\xb6\x2a\x0d\x51\ +\x61\xa1\x61\x78\xe8\x3b\xdf\xc1\x9c\xb9\xf3\x2e\xea\xbc\x2a\xad\ +\x1d\x96\x86\x60\x1c\x3f\x3c\x1b\xd9\x9e\x4a\x8c\x9d\x94\x2f\xcf\ +\x3c\xd4\x96\x98\xdf\x89\x42\xf3\x7e\xd4\xf7\x34\xc0\xe5\x8e\xb9\ +\x74\xe9\xb1\xa1\xc8\x06\x0b\xef\xaa\xab\xaf\xc1\x82\x85\x97\x0f\ +\xb9\xcf\xa9\x8a\x53\x78\xf3\x8d\xd7\x24\xf7\x78\x66\x58\xcc\x04\ +\xa1\xa7\xdf\x82\x84\xd8\x28\xf9\xfb\xd5\x57\x5e\xc5\x8b\x2f\x2e\ +\xf5\xaf\xb9\xe2\xf3\xc7\x71\x4a\x73\x2f\xf7\x81\xf0\xb2\x95\x27\ +\xe8\x7c\x1c\x46\x7c\x5e\xdb\xe4\xa9\xd3\xb0\xe4\xc6\x9b\x71\xf4\ +\xc8\xcf\x95\xdf\x43\xa2\x6b\x27\x27\xa7\xe0\xd6\xaf\xde\x7e\xd1\ +\x09\x75\x8f\xd3\x84\x86\xc3\x29\xb0\x55\x76\xe2\xe5\x37\x9e\x45\ +\x45\xf5\x4c\x4c\x9c\x34\x01\xb1\xb1\x71\xc4\x7e\xc3\x05\x3a\x1d\ +\x9e\x4e\x09\xd8\x0f\x34\xfd\x0e\xbd\xf6\x2a\xa5\xff\x47\x1b\x44\ +\x7e\x32\xf4\x73\x0a\x15\x18\x16\x69\x90\xfb\xfa\x86\xaf\x39\xf5\ +\xf4\x74\x0f\xcb\x44\x03\x9d\xd0\xca\xaf\x7b\x71\xb6\x24\x0a\xc1\ +\x21\xa1\x67\x34\x86\xf8\x06\x52\x5f\x7c\x2d\x73\x70\x30\x51\xf4\ +\xe8\xcf\xaf\x14\x43\xfe\x75\xeb\xd6\xad\xf2\x93\x9f\x81\xf9\x71\ +\xf5\x8d\xf5\xf8\xe0\xdf\xff\xc6\x5d\xf7\xdc\x73\x31\x83\x04\xb3\ +\xe3\x32\x84\x7b\x29\x4e\x74\xb5\xc1\xdb\xa7\xc6\xf2\x0f\xdf\xc7\ +\xd6\x2d\xbb\x31\x67\xe6\x55\xb8\xec\xca\x51\xf0\x06\x1f\xc3\xe1\ +\xa6\xa5\xa8\xec\x7a\x97\xd8\xa6\x4b\xd6\x3c\x25\xb4\x46\x6a\xd8\ +\x42\x84\x1b\xf3\x3f\x27\xe1\x7d\xc6\x8d\x17\xf8\xd6\x53\xc0\xe3\ +\xf4\x2f\xaf\xf8\xf0\x77\xbe\x8b\xeb\x6f\x58\x22\x3e\x62\xa8\x7c\ +\x8c\x32\xa7\x4e\x83\x84\x84\xc4\xcf\xe5\x7e\x58\x09\x7f\xfd\x8b\ +\x5f\x60\xe5\x47\xab\x25\xa4\xe0\x2e\x38\x6e\xe5\xeb\xea\xea\xc2\ +\x6f\x7f\xf3\x2b\x8c\xa4\x78\x73\xf2\x94\xa9\x17\x7c\xde\xd4\xf8\ +\x22\x7c\xed\x2b\xf7\x63\xf5\xba\xf7\x71\xb2\xbc\x0a\x21\x86\x64\ +\xa4\xa4\x92\x1f\x0b\x2f\xc1\xfe\xf6\x7f\xa1\xad\x69\x07\x85\x13\ +\xf5\xca\x4a\x5b\x2a\xf9\xa1\x14\xa4\x85\xcd\xc4\xe8\xf8\x47\xe4\ +\x87\x92\xbf\x90\xc2\x4b\x4e\x49\x46\x06\x51\xff\x86\xfa\x7a\x0a\ +\xcc\x5d\x62\x89\x9f\xd5\x97\xa9\x2e\x72\x9d\x65\x86\xc7\x67\x28\ +\x2c\x79\xed\xb5\x57\x29\x16\x53\x8b\x9f\xbb\x99\x18\x68\xf1\xc1\ +\x83\x38\x48\x71\x26\xfb\xee\x9f\xfd\xf4\x27\x78\x61\xe9\x4b\x17\ +\x4c\x5a\xf4\x14\xa6\x8d\x2a\xca\x43\x5a\xda\xb7\x29\xa4\x3a\x81\ +\xaa\x8e\x8f\x10\x9d\x5b\x8c\x1e\xf5\x2e\x54\xf5\x55\x08\x99\xe1\ +\x75\xc8\xbd\xca\xaf\xc0\x61\x44\xd4\x12\x4c\x4c\xfe\x39\xc2\x8c\ +\x79\xe7\x97\x22\xfc\x6f\x08\x6f\xc4\x88\x7c\x09\x84\xfb\x6d\x4e\ +\xa1\xd1\x1c\x72\xd4\xd0\x20\x9d\x6b\x80\xcf\x47\x08\x17\xb3\xad\ +\x5e\xfd\x11\xfe\xef\x89\x3f\x49\x18\xc0\xc1\xf8\x8c\x99\xb3\xf0\ +\xd3\x9f\xff\x02\x5f\xbd\xed\x36\x04\x99\x4c\x08\x26\xb8\xde\xba\ +\x65\x33\xfe\xf2\xc4\x9f\x25\xdd\x76\x31\x5b\x68\xb8\x06\xc6\x9c\ +\x77\xa1\xcd\x7d\x11\x75\xae\xd7\xd1\xd9\x5f\x21\x03\xcf\x0d\x7b\ +\xbc\x36\x4f\x78\x70\x22\x2e\x1f\xf9\x37\xcc\xcb\xfa\x27\x22\x8d\ +\xa3\xce\x3f\xbf\xfb\xdf\x10\x1e\xfb\xb8\xab\xaf\xbe\x16\x91\xe1\ +\x61\x92\xa9\x29\x3d\x72\x08\x3f\xf9\xd1\x0f\x51\x79\xea\xd4\x69\ +\xfb\x71\x22\xe0\xd9\x67\x9e\xc6\x5d\x5f\xbf\x03\x27\x4e\x94\x9f\ +\x45\x9a\x02\xe4\x86\x05\xc7\x59\x99\x0b\xdd\xca\xcb\xcb\xf1\xcb\ +\x9f\xfd\x4c\xd6\x77\xe1\x49\x33\x79\x79\xf9\x78\xf0\xe1\xef\x20\ +\x34\x24\x44\xac\x6f\xf6\xec\xd9\xe2\xb7\x4d\x24\xc4\x57\x5e\xfe\ +\x17\xde\x7a\xf3\xcd\x0b\xbe\x86\xc5\xd5\x8c\xf5\x95\x5f\xc7\xbe\ +\xfa\x3f\xa3\xc7\x56\x0d\xb7\xd3\x2b\x4d\xb8\xd2\x54\xac\x33\x62\ +\x54\xdc\x5d\x08\x6a\xf8\x1e\xf6\xbc\x1f\x89\xb6\xc6\x0b\x53\xc0\ +\xff\x5a\x6e\xf3\x9a\xeb\xae\x47\x49\xf1\x41\x3c\xff\xdc\xb3\x32\ +\xbb\x94\xb3\x19\x65\x47\x8f\xa1\x60\xf4\x68\xf2\x6d\xf1\xa8\xa9\ +\xae\x96\xa4\x70\x19\xc5\x84\x3d\x3d\xbd\x12\xf7\xfd\xe1\x4f\x7f\ +\x1e\x38\x3e\x2c\x3c\x9c\x57\x59\x91\x39\xd5\x2c\xe4\x9f\xfc\xe8\ +\x31\xdc\xf7\xcd\x6f\xe1\x8a\x2b\x17\x9d\x5f\xb2\xb8\xbd\x1d\x8f\ +\xfd\xe0\x11\x54\x56\x56\x48\xea\x8b\x97\x94\xbc\xf3\xee\xbb\xc9\ +\xb7\x4d\x91\xef\xd9\xe2\x1e\xfd\xe1\x8f\x51\x52\x52\x22\xe9\x3b\ +\x26\x20\x7f\xfc\xfd\xef\x09\xde\x47\x62\xca\xd4\x29\x68\x6e\x6e\ +\x96\x05\x87\xc2\xc3\x23\x10\x16\x16\x36\x74\x15\xc6\xd3\x8f\x7d\ +\x0d\x8f\xa1\xbc\xfd\x5d\xe8\xd4\x3e\x81\x47\x59\x9f\x46\x6b\x46\ +\x7a\xc4\x22\xe8\xba\x2f\x47\xc9\x87\xbd\xa8\x38\x51\x47\x56\x7d\ +\x02\xc7\xcb\x8e\x8a\x52\x4f\x98\x54\x24\xf7\xa4\x86\xee\xd2\x09\ +\x8f\xd3\x5d\x0e\xb7\x17\xb6\x9e\x7e\x65\x15\x06\x97\xf3\x1c\x30\ +\xe6\x92\x00\xbc\x87\xfb\xf1\xd5\x4a\x46\x7e\xf0\xc6\x95\xf8\x5f\ +\xfc\xfa\x71\xa4\x65\x64\xe0\x95\x97\xfe\x45\x56\x50\x86\x43\x87\ +\x0f\xe1\x48\xe9\x11\x99\xf4\x22\x13\xed\xc9\xb2\x62\xe3\x62\x25\ +\xe3\x71\xc5\x95\x8b\x4f\x3b\x7e\xfa\xcc\x99\x98\x39\x63\x3a\xd6\ +\xaf\x5f\x2f\xe7\xfe\x70\xe5\x47\x12\x96\x4c\x9a\x3c\x19\x91\x91\ +\x4a\x08\xc2\x29\xaf\x5e\x8b\x5d\xda\xe8\x7b\x29\xde\xe4\x25\x90\ +\x15\x26\xdc\x83\x1f\xfd\xf0\x07\x72\x4c\xa0\x13\xfa\xe6\x25\xd7\ +\xe3\x8e\xaf\xdf\x79\x5a\x58\x30\x66\xec\x58\x3c\xfc\xbf\xdf\xc5\ +\xf7\xbf\xff\x03\x99\xf5\xd3\x53\x51\x81\xff\x7d\xe8\xdb\x78\xfc\ +\x77\xbf\xc7\x1f\xfe\xf0\x3b\xd4\x54\x55\xe2\xcf\x7f\xf9\x1b\x0d\ +\xf8\x35\x43\x8e\x41\x7d\xef\x7a\x9c\xe8\x78\x9b\x9e\xdf\x27\x79\ +\x4d\x9d\xca\x84\xcc\x88\x2b\x30\x3e\xf9\xfb\x30\x3a\x47\x63\xcd\ +\xbe\xf5\x38\x79\xe2\x10\xba\xbb\xbb\xa5\xf5\xbd\xb9\xb9\x0d\xcb\ +\x57\xbd\x01\x5d\xd4\x09\x8c\xcf\xe5\x73\x86\x5f\x3a\xe1\xcd\x9b\ +\xbf\x40\x34\x82\xd7\x10\x33\x05\x19\x51\x50\x50\x38\xec\xbe\x89\ +\x49\xc9\x78\xe0\xfe\x6f\xc9\x43\x73\xbc\x36\x7d\xfa\x8c\xb3\xf6\ +\x09\x21\x78\xe2\xde\x93\x45\x8b\x16\x63\xf5\x47\xab\x28\x40\x2e\ +\x55\xa6\x33\xcb\x4a\x7f\x3c\x4b\x28\x9e\x84\x31\x09\x97\x5f\x79\ +\x25\xc5\x3d\xa7\x6b\x61\x4e\x76\x0e\x59\xe2\x13\x18\xbb\x6c\x19\ +\x1a\x1a\xea\x64\x79\xac\xb4\xf4\x0c\xf4\xf6\xf6\x0d\x08\x8f\xef\ +\xef\xb1\x1f\x7c\x9f\xce\xe9\x46\x44\x44\x38\x52\x92\x53\x06\xd2\ +\x73\xe9\x99\x99\xf8\xc1\xa3\x8f\xca\xdc\x39\x5e\xb5\xe8\xba\x6b\ +\xaf\x1f\x32\x14\xb9\xfd\x8e\xaf\x0b\x32\xb4\xb5\xb7\x29\x0b\xb2\ +\x12\xb9\xb2\x10\xcc\xde\x7b\xef\xbd\x12\xe6\xcc\x9a\x35\x6b\xd8\ +\xec\x4a\x8f\xe3\x24\xfa\x79\xe9\xc9\x20\x35\x22\x74\x23\x50\x14\ +\xf7\x28\x72\xa2\xbe\x2a\xbf\xee\xc9\x39\xe7\xeb\x97\x5c\x8d\x82\ +\x51\xb9\xd8\xb0\xe1\x63\x42\xa1\x12\xa8\x7c\x7a\x68\x43\x6b\xe1\ +\x32\x3b\x49\xd1\xae\x93\x9c\xe8\x39\x37\x9e\x25\x44\x3e\xc3\xf7\ +\x45\xd8\xc8\xbf\xf8\x5c\x2e\xa7\x8f\x04\x78\x41\xc7\x79\x3c\x14\ +\x25\xb9\x5d\xbe\x2f\xd6\xe6\xf5\x1d\x6a\xfe\xb3\xef\x89\x5d\xf0\ +\xbd\xbc\x7b\x8c\xaf\xcd\x52\x3c\xec\x9e\x16\x8b\xc5\xb7\xf2\xc3\ +\xf5\xbe\x1f\xfe\xf8\x41\xdf\xd2\x6d\x05\xbe\x37\x8f\x27\xfb\xda\ +\xfa\x3f\xd9\x9f\x90\xc5\x77\xe7\x9d\x77\x32\x74\xdd\x04\x65\xc6\ +\x09\x37\xb8\x84\x7c\xa1\xfa\x36\x95\xdf\x4c\xd5\x5d\x70\xf2\x99\ +\x83\x79\xf9\xf9\xce\x2f\xda\xc6\x3f\x3e\xdc\xa3\x45\xc3\xce\x59\ +\xe8\x6b\x4c\x1e\x76\x37\x26\x44\x0b\x16\x8d\xc3\xe8\x6b\x8e\xc0\ +\x17\x76\x14\x4e\x87\x9b\xfc\xf9\xa7\xf7\xa2\xaa\x3f\x2d\x0d\xc6\ +\x78\xcc\xaf\x73\x05\xb8\xec\x43\x86\xab\x6c\xcb\xaf\x70\x0d\xb5\ +\x50\xcc\x30\x9f\x7b\xce\xd1\xd8\x74\xe6\xfe\xca\x4f\x73\x9f\xbd\ +\x3c\xa2\x77\xe0\xb7\xf6\x86\xfe\x3b\x70\xac\xd7\x7b\xfa\xb1\x83\ +\xaf\xcd\xef\x65\xaa\xb3\x34\x4f\x79\xe4\xdf\xc0\x82\x41\x67\xfa\ +\xef\xc1\x9b\xc3\xf1\xc9\xaf\x56\xaa\x09\x06\x5b\x8a\x73\x50\x7e\ +\x40\x8d\xa5\x2f\x3f\x89\x1d\x3b\xb6\xa3\xad\xb5\xf5\xb4\x44\x04\ +\xff\xa6\x7c\xab\x65\x2f\x36\x54\xdd\x0c\x9b\x69\x0b\xac\x56\x65\ +\x2d\x1c\xd5\x79\x04\x02\xc3\xaa\x6b\x63\x63\x23\x76\xed\xda\x45\ +\x14\xbc\x46\xf9\x25\xae\xdc\x5c\x4c\x26\x32\x10\x17\x17\xe7\x67\ +\x6b\x1d\xd8\xbf\x7f\x1f\x2a\x2a\x4e\xca\x1c\x34\x0e\x60\xf9\xfb\ +\xd4\xd4\xd4\x4f\x08\x0e\xc5\x45\x3b\x76\xec\x40\x2b\xdd\xf0\x8c\ +\x19\x33\x06\xbe\x63\xbf\xb6\x67\xcf\x1e\x09\x80\x27\x4e\x9c\x88\ +\x9c\x9c\x9c\x01\xa2\xc0\x04\x84\x7d\x52\x51\x51\x11\x51\xf7\xbc\ +\x81\xfd\x0f\x1c\x38\x20\x95\xed\x82\x82\x02\x69\x57\x60\xdf\xc3\ +\xb9\xce\x83\x14\x4c\x8f\x25\x62\x91\x96\xa6\x74\x5b\xf1\x54\xe5\ +\xed\xdb\xb7\x0b\x5b\xe4\x6b\xf2\xb6\x6f\x9f\x72\x9f\x13\x27\x4e\ +\x92\xe7\xe0\x8d\xcf\x75\xfc\xf8\x31\x8c\x19\x33\x06\x49\xe4\x9f\ +\xf9\x5e\x37\x6e\xdc\x28\xc7\xb1\x1f\xdb\xb9\x73\x27\x3d\x7b\xb5\ +\x24\x92\xf9\xc5\x42\x63\x21\xf2\x75\xd9\x52\xd8\xa7\xf1\xf3\xc6\ +\xc4\xc4\x0e\xf8\x51\x7e\x56\xde\x77\x26\x91\x29\x59\xbf\xc5\x35\ +\x11\xe8\x2e\x26\x92\xd7\x45\xf7\xda\x81\x17\x5e\x78\x11\x29\x49\ +\x69\x98\x3b\x67\x21\x26\x4d\x99\x08\xaf\xbe\x92\x98\xe8\xeb\x38\ +\xda\xf6\x1c\xf9\xc6\x56\xe9\x20\xe0\x14\x61\x54\xd0\x58\x98\x75\ +\x17\xd9\x3d\x56\x41\xac\x6a\xe9\xd2\xa5\xa2\x45\xe3\xc7\x8f\x27\ +\xeb\xea\x15\xca\x3e\x72\xe4\x48\x11\x5e\x47\x47\x07\x5e\x7e\xf9\ +\x25\x29\xd3\x4c\x9b\x36\x5d\xb4\x95\x05\xcd\x02\x61\x47\x3e\x62\ +\xc4\x88\x81\x81\x5c\xb9\x72\x25\xd1\xf1\x4a\xa9\x9d\xb1\x80\x59\ +\x48\x7c\xfc\x87\x1f\xae\xc0\x91\x23\x87\x85\x9c\x64\x10\xe3\x0c\ +\x40\xe5\xda\xb5\x6b\x51\x5f\x5f\x2f\xd6\x9e\x9d\x9d\x2d\x83\xd5\ +\xd9\xd9\x89\x15\x2b\x56\x50\xac\x77\x42\xce\xc9\xc2\xe6\x01\x64\ +\xe1\x2d\x5f\xbe\x5c\xe2\xc6\xc1\xc2\x5b\xb7\x6e\x1d\x62\x63\x63\ +\x89\x24\x4d\x97\xeb\xed\xdf\xbf\x1f\xef\xbf\xff\x3e\xed\x5f\x8f\ +\xfb\xef\xbf\x1f\xa1\xa1\xa1\x22\xbc\x95\xc4\x36\x99\xdc\xb0\xf0\ +\xd8\x9a\x56\xaf\x5e\x4d\xd4\x3f\x5c\x84\xc7\x0a\xc3\x9f\xb5\xb5\ +\xb5\xa1\xb8\xb8\x58\x9e\x29\x21\x21\x41\x84\xc2\xf7\xfa\xf6\x5b\ +\x6f\x49\x6a\x6f\xc9\x92\x25\x72\xdd\xdd\xbb\x77\xe3\xd5\x57\x5f\ +\xc5\xad\xb7\xde\x3a\x50\x80\x4e\x8c\x98\x8a\xab\xe6\x7b\xb1\x7a\ +\xcd\x72\x99\x25\xac\xf2\x06\xc3\xda\xef\x46\x63\x7b\x31\x0e\x37\ +\x6d\x46\x93\xf7\xdf\x68\xea\x39\xa0\xac\xf9\xc6\x2b\x1b\x13\x19\ +\x0e\x0f\x4a\xc5\x98\x84\x47\x11\xa4\x8f\xb9\x70\xe1\xf5\x12\x0c\ +\xbe\xfd\xf6\xdb\xb2\x96\xe6\x43\x0f\x3f\x2c\x75\x36\x16\x0e\x6b\ +\x16\x3f\x18\x6f\xeb\x68\x80\x39\xc0\x7d\xe0\x81\x07\xc4\x42\x84\ +\x56\x8f\x29\xc2\xdf\xff\xfe\x77\x19\x4c\x2e\xb1\x30\x93\xe4\x69\ +\xc6\x2c\x34\x6e\x19\xe4\x52\xcb\xe2\xc5\x8b\x45\xb3\x1b\x1b\x1a\ +\x64\x60\x58\x98\xfc\x2f\x6b\x34\x0f\x08\x33\x45\xfe\x3e\x8f\xac\ +\x83\xb5\x9e\x63\xb1\x80\xb2\xb0\x10\x72\x72\xb2\x45\xa1\x02\xd9\ +\x14\x3e\x37\x0b\x71\x70\x75\x9b\xfd\x1f\xd7\x19\xb9\xea\x11\xb0\ +\x66\xde\x87\x2d\xae\x8a\x94\x88\x2d\x95\x83\xef\x98\x98\x68\x98\ +\xcd\xc1\x03\xc7\xf2\xbe\xbc\x9f\xb4\x6f\xd0\xfb\xcb\x28\x3c\xe1\ +\x17\x2b\x28\x2b\xcd\x82\x05\x0b\x30\x69\xd2\x24\x3f\xa2\x58\xa5\ +\x7b\x7c\xdb\xd6\xad\x98\x45\x56\xc6\x5d\xe4\x9b\x37\x6f\xc1\x28\ +\x42\x84\x39\x73\xe6\x0c\x08\xcf\x68\xd2\xe2\xb2\xf9\xb3\x91\x96\ +\x9a\x8c\xd2\x92\x4a\x74\xd9\xcb\x90\x30\xb2\x09\xbe\xa8\xe5\x28\ +\xeb\xdf\x8a\x3e\x8b\x03\x46\x9d\x52\x65\xe7\x66\xa4\x38\xd3\x08\ +\x4c\x49\xf9\x03\x12\xcc\xb3\x2f\x2e\xc3\x52\x76\xfc\x38\xaa\xe9\ +\x21\xe7\xce\x9b\x37\x50\x20\x55\x7e\x06\x2d\x7c\x00\xd3\xcb\x48\ +\x70\xc9\xc9\xc9\x03\x82\xe3\x8d\xad\x72\x2a\x05\xb8\x6c\xb5\xfc\ +\xc0\xbc\x71\x47\x16\x0f\xe4\x68\x0a\xbc\x39\xc9\xcb\x5a\xcc\x03\ +\x7f\x82\xf6\x49\x4c\x4c\x10\x0b\x62\x81\x05\xda\x28\xb8\x12\xc1\ +\x83\x99\x4b\x70\xc9\xca\x52\x47\xb0\xea\xf3\x67\x42\xd8\x5a\x32\ +\x28\x14\xe8\x24\x41\x5e\xe8\xc4\x12\xbe\x67\xee\x8f\x29\x1c\x35\ +\x5a\x2c\x9b\x95\x82\xe1\x6e\xa8\x16\x0d\xd5\xa0\x35\xd5\x02\x7f\ +\x07\x7e\xb7\xfd\x93\x22\xb4\x09\x57\x2e\x5a\x04\x2b\x43\xed\xa6\ +\x4d\x44\xf5\x37\xc8\xf3\xf1\x67\xac\xb4\x67\x6e\xd9\xb9\x59\x28\ +\x5a\xd8\x8d\x88\x89\xef\xa2\x23\xe4\x05\x54\xb4\xaf\x87\xcd\xee\ +\x00\xcf\xc0\xe6\xdf\x57\xd4\xa8\x0d\xc8\x8b\xba\x06\xf3\x32\x5f\ +\x41\x5a\xf8\x35\x17\x97\x1e\xe3\x81\xe5\x81\xe7\x01\x1b\xae\xe5\ +\xae\xb9\xb9\x49\x32\x0b\x0c\x4b\x67\x27\x9c\x53\x84\xc0\xf0\x00\ +\x07\xc8\x0c\x83\x78\x51\xd1\x68\xd9\x9f\xfb\x5d\x98\xdc\x70\x25\ +\xbd\x90\x7c\x17\xc3\x10\x0b\x29\x60\x49\xfc\x1d\x97\x7f\x18\x2e\ +\xe3\x68\x7f\xbe\x17\x16\x14\x43\x36\x5b\x73\x2c\x59\x21\x2b\x04\ +\x0b\xe3\x42\x36\xb6\x6e\x7e\x2d\x5c\xb8\x40\x60\x95\xfd\x99\xd3\ +\xbf\xa8\xcd\xa7\xd6\xe4\xfc\x24\xe9\x4c\xc2\x93\x9f\x9f\x4f\x96\ +\x39\x8f\xfc\xe4\x26\x52\x88\x75\x64\x71\xb3\xc4\x17\x9f\x45\xcc\ +\x7c\xe4\xaf\x9b\x7e\x81\x4d\xb5\x0f\xa2\xc9\xb6\x95\x9e\xb1\x4d\ +\x7e\xfd\x84\x7f\xd1\x9b\x7f\x68\x2c\x25\x6c\x0a\x66\xa5\x3d\x43\ +\xaf\x7f\x22\x26\x78\xe2\x67\x4b\x8f\xb1\x36\x7e\xb2\x50\xcc\x50\ +\x74\x5e\x59\x92\x6a\x28\xed\x97\x35\x4f\xd4\xca\xfa\x62\x01\x27\ +\xae\x68\x7d\x82\x28\xc3\xe1\xc3\x87\xc5\x9a\x19\x92\xf9\x5f\x86\ +\x52\x2b\x0d\x66\x80\xbd\xf5\xcb\x32\x8a\x6e\xb1\xea\x6c\x82\x48\ +\xb6\xf0\x11\x27\x4f\xca\xf7\x6c\xd9\xec\x07\x65\x95\x08\xab\xf5\ +\x82\x59\x3b\x13\x12\x56\x96\x29\x84\x0e\x6b\xd6\xac\x91\xfe\x4c\ +\xf5\x67\xf8\xc5\x47\x46\x88\x59\xb3\x66\x13\x39\xda\x29\x84\x6e\ +\xe6\xcc\x59\x43\x34\x27\x79\x71\xb8\xf9\x2f\xd8\x5b\xff\x07\x99\ +\xf4\xc2\x89\x68\x8f\x4a\xf9\x75\xef\xa4\xd0\x09\xc8\x8b\xbe\x03\ +\xe9\xe1\x8b\xcf\x6b\x5e\xc2\xa7\x5a\x1e\x5f\x3c\x39\x39\x49\x6e\ +\x86\x49\xc3\x50\x1b\x0f\x80\xd1\x18\x24\x6c\x74\x70\x26\x9f\x85\ +\xc4\xc7\x44\x44\x44\x20\xc6\x9f\xa9\x60\xa2\xc1\x7e\x85\x07\x8a\ +\x09\x05\xc3\x26\x6b\x7d\x12\x09\x87\xa1\x91\x7d\x8c\xac\x2e\xe1\ +\xb7\xa4\x1e\x82\x1e\x16\x0e\xfb\xab\x91\xf9\x23\xd1\x4e\xfb\x73\ +\x03\x12\x43\x26\xb3\x4c\xad\x5f\xa9\x02\x30\x1b\xb0\x86\xc1\xf0\ +\x17\x98\x4a\x36\xd8\x52\xf8\xb3\x00\xdd\x9f\x3f\x7f\xbe\x9c\x6f\ +\x13\x31\xcb\xf3\xb5\xbe\xe1\x36\x7e\x56\x5e\x3b\x8d\x73\x9b\x9c\ +\xe3\x3c\x2b\x3d\xd6\xf3\x31\x0e\x34\x3f\x4e\xd6\x67\xe7\x5f\xf3\ +\x16\x6b\x8b\x08\xca\xc1\xc2\xac\x17\xb1\x28\xe7\x03\x14\xc6\x3e\ +\x70\xd1\x82\x1b\xd2\xe7\x31\x29\xe0\x81\xde\xb2\x65\xab\xc0\x55\ +\x00\x4e\xd9\x8a\x58\xe3\x79\x00\x27\x4c\x98\x20\xef\xb7\x6d\xdb\ +\x36\xa8\x2f\xa5\x5e\x58\x19\x93\x13\x86\xb8\x00\x0c\xf2\xfe\x3c\ +\xb8\x4c\xc9\xf5\x44\x4a\x4a\x68\x1f\x4e\x32\xf3\xe7\x2a\x7f\xce\ +\x33\x10\x47\x76\x73\xcb\x04\x2f\x5e\x4a\x04\x20\x9e\x94\x24\x84\ +\x06\x99\x19\x2c\x93\x16\x16\xa8\xb2\xa4\x87\x6b\xa0\x34\xc3\x83\ +\xc7\x0d\x44\x0c\xc7\x7c\x3f\x2c\x0c\x66\xa0\x7c\xdd\x98\x98\x98\ +\xb3\x2a\x10\xfc\x1c\x01\x16\xda\xda\xd6\x76\x16\x7a\x0c\x17\xab\ +\x0e\xd7\xde\x7f\xfa\xe7\xbe\xb3\xd2\x63\x9d\xf6\x23\xe8\x75\xf4\ +\xcb\xca\x52\x3a\x75\x30\xc6\x25\x7c\x0f\xd7\x8c\xd8\x8c\x11\xd1\ +\x77\xc2\xa4\x4b\x3a\xaf\x58\xee\x82\x60\x33\x22\x22\x4a\xfa\x23\ +\x5f\x7f\xfd\x75\xfc\xe3\x1f\xff\xc0\x08\xb2\x10\x5e\xbb\x84\x0b\ +\xa7\xd7\x5e\x7b\xad\x24\x7e\x59\x7b\x39\xab\xce\xd4\xfa\x38\x11\ +\x1c\x66\x8a\x4c\x2a\x58\x03\xaf\xba\xea\x2a\x19\xfc\x40\x80\xcf\ +\xdf\xb1\x15\xb0\x23\x8f\xa1\x81\x63\x21\xe7\xfb\x0b\xaf\x01\x81\ +\x04\x2c\x8f\x15\x24\xd0\xfa\x10\xa0\xff\x2c\x0c\x86\x4c\xa9\x8b\ +\x91\x30\xf9\xdc\x01\xe1\x71\x1c\xc8\x8a\xb4\x87\x68\x3a\x53\x7f\ +\x56\x08\xb6\xf6\x70\xba\x8f\x40\x8c\x17\xb0\xcc\xc1\x90\xc6\xfd\ +\x9a\x2c\x70\x8e\x3f\x07\x5b\x9e\x76\x08\x77\xa1\xfc\x6c\x9c\x66\ +\x58\x0b\xe5\xfd\x87\x15\x3a\xaf\x14\x43\x00\xc0\x93\x24\x27\x27\ +\xff\x06\xd9\x11\xb7\xc8\xaf\xb8\x5c\xaa\x4d\x43\x01\xee\x4f\xaf\ +\xbe\xfa\x6a\xcd\xe0\x9b\x66\x8d\x66\x26\x69\x32\x05\xa1\x87\x06\ +\x94\x17\x11\x9d\x3a\x75\x2a\x0a\xc8\x21\xb3\xa6\xf3\xc3\x30\x83\ +\xe4\xfd\x98\x94\xb0\x35\x8c\xa1\xfd\x6f\x58\x72\xc3\x40\xbc\x15\ +\x78\x30\x66\x94\x1c\x12\xf0\x31\xbc\x3f\x5b\x26\x3b\x76\x16\x2a\ +\x33\x51\x4e\x06\x67\x66\x66\x8a\x70\xd9\x32\x38\x90\xe7\xbf\x79\ +\x7f\x56\x06\x3e\x96\xef\x85\x05\xcd\x34\x9e\x3f\x63\xeb\x09\xf8\ +\x2c\x56\x04\x7e\x1f\xa0\xfa\x7c\x5f\x37\x52\xec\x15\xb0\xfe\x80\ +\xf0\xf8\x3c\x7c\x5e\x3e\x07\x9f\x8b\x8f\x61\x04\x60\xdf\xcb\xd7\ +\x0e\x2c\xb2\xca\x7f\xf3\x3d\x04\x84\xc5\xd7\xe0\xf0\x85\x49\x14\ +\x2b\xcf\x99\x82\xe5\xf3\xf1\x31\xfc\xdc\x67\xb2\xd7\xc6\xbe\x4d\ +\x68\xb3\x16\x63\x7e\xe6\xf3\xc8\x8c\xb8\x71\x60\x25\xde\x0b\x6e\ +\x64\x22\xc8\xa7\x78\xd9\x53\x52\x52\xf2\x3e\xf3\x40\xa6\x07\xf4\ +\xb2\x7e\xa1\x12\xd3\xff\x3f\x6d\x5e\x9f\xc7\x77\xb0\xf1\xd7\xbe\ +\x9d\xb5\x0f\x7c\xe6\x73\x0d\x97\x98\xfe\x02\x66\x73\xff\x7f\xd9\ +\x54\x48\x0a\x59\x70\x5e\x2d\x7c\x97\xcc\xe7\x7d\xb9\x5d\x2a\xd1\ +\xa9\x10\x6b\x9e\x7c\xa9\x4f\xeb\x3b\x93\x6d\xea\xbe\x5c\xfd\xe8\ +\x8b\xbd\xb1\x8f\x26\xdf\x6b\x60\xe2\xef\x7f\x71\xe6\xc0\xc7\x96\ +\xd7\x4d\x34\x3b\xfc\x4b\x01\x7e\x71\x37\x66\xe3\x44\x5a\x7a\x38\ +\xd7\xc0\x7f\xfa\x05\xe8\x65\xe1\x3d\xfb\xe0\x83\x0f\x7e\x6b\x18\ +\x08\x55\xf9\xb8\x01\xe4\x93\x7f\x15\x44\xf8\x72\xfb\x8f\x6e\xcc\ +\x59\xda\xdb\xdb\x57\xf9\x99\xe6\x80\x00\xcf\x25\x08\x36\xc5\x60\ +\x0e\xaf\xa0\x74\xc2\x70\x8b\x14\x2f\xc2\x12\xc4\x50\xfb\xe5\x90\ +\xfe\x67\xe4\xe6\xb7\x32\x9b\x5f\x70\x3d\xfe\x57\x2f\x57\xbf\xce\ +\x45\x58\x3c\x7e\x09\x07\xa6\xab\xb8\xfc\xef\x0d\x5f\x12\x9d\xff\ +\xe8\xe6\xf6\xcb\xc1\xe6\x1f\xff\x7e\xff\xdf\x9e\x4f\x13\x82\xf3\ +\x0c\x41\xea\xfd\x82\xfb\xd2\x41\xfe\xe7\x36\xcf\x20\x01\x3a\x07\ +\xfd\x7b\xde\xfe\x4b\xe3\x7f\x69\xfd\x0c\xf5\x4b\xbf\xf7\x9f\x85\ +\x4e\xef\x20\x96\x39\xd0\xc8\xf3\xff\x04\x18\x00\x5e\x3e\x9e\x0a\ +\xe8\x3d\x73\x59\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\ +\x00\x00\x03\xa3\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd5\x04\x01\x11\x35\x35\x2a\x7d\x29\x4b\x00\x00\x03\x30\x49\x44\ +\x41\x54\x38\xcb\x6d\x93\xcb\x4f\x5c\x65\x18\xc6\x7f\xdf\x77\xce\ +\xf9\x38\x67\xce\x40\xe7\x52\x18\x28\x65\x2e\x0d\x8b\x8a\xb5\x0b\ +\x4d\x69\xa2\x1b\xda\xc4\x6d\x35\x9a\xd6\x94\x52\x75\xd3\x18\x84\ +\xb5\x2b\xff\x00\x8d\x5b\x28\xb8\xd3\x88\xd8\xa4\xba\x6c\xd8\xa8\ +\x45\xa1\xd8\xb9\x40\x24\xb6\x2c\x60\x08\x81\x04\x28\x30\x83\x17\ +\x98\x0e\x73\xae\x6e\x4a\x62\x88\xef\xf2\xc9\xfb\xcb\xb3\x78\x9e\ +\x47\x70\xe2\x86\x86\x07\x2f\x03\x1f\x02\x7d\x40\xee\x85\xbc\x06\ +\x4c\x03\x5f\x8d\x8e\x8c\xe5\xff\xfb\x2f\x4e\xc0\x63\xc9\x44\xf2\ +\xf5\xdb\xb7\x3f\xd8\xef\xe8\xe8\x78\xd5\xb2\xac\x66\x80\x7a\xbd\ +\x5e\xdb\xda\xda\x7c\x32\x31\xf1\x4d\xa4\xba\x5f\x9d\x1b\x1d\x19\ +\x1b\xe4\x7f\x9c\xa7\x1e\xcd\xcd\x7e\xe7\x79\x5e\xb0\xb4\xb4\x14\ +\x2e\x2c\x2c\x84\xa5\x52\x29\x5c\x5c\x5c\x0c\xcb\xe5\x72\x58\xad\ +\x56\x43\xdf\xf7\x83\xd9\xd9\x99\xa9\xa1\xe1\xc1\xa9\x63\x4e\x3b\ +\x76\xee\xef\x1f\x10\x2f\x9d\xef\xb9\x91\xcf\xe7\xe5\xc1\xc1\x01\ +\xbe\xef\x23\x84\x40\x08\x81\x61\x18\x48\x29\x69\x34\x1a\x22\x9b\ +\xcd\x75\x27\x12\x89\xfd\x88\x6d\xbe\x56\x2c\x94\x1e\x68\x43\xc3\ +\x83\x97\x93\x89\xe4\xc7\xb7\xfa\x07\xae\x2e\x2f\x2f\x4b\xdf\xf7\ +\xa9\xd5\x0e\x39\xac\x1d\x50\xab\x1d\x50\xaf\x3f\x47\xd3\x35\x9a\ +\x94\x42\xd3\x74\xc2\x30\xa4\xbb\xbb\xbb\x33\x9f\x7f\x1c\x79\xe5\ +\xe2\x85\x79\xad\xb7\xf7\xd2\xa7\x77\xee\x7c\x94\x76\x1d\x37\x55\ +\xaf\xd7\x71\x5d\x07\x5d\x37\x68\x6e\x6e\x21\xd5\xd6\x4e\x6b\x6b\ +\x1b\x89\x44\x92\x4a\x75\x97\x26\xd5\x84\xe3\xb8\xf8\xbe\x4f\xaa\ +\x2d\xe5\x2e\x2e\xfe\x6e\xe9\x40\xdf\xd9\xce\xb3\xb9\x4a\xa5\x82\ +\x52\x0a\xd7\x73\x89\xda\xcd\xac\xae\xae\x92\x2f\xfc\x06\x10\xde\ +\xb8\xfe\x9e\xc8\xe5\xce\xb1\x52\x5e\x26\x11\x4f\xe2\x79\x1e\x67\ +\xce\x74\x9e\x06\xfa\x24\x90\x33\x4d\x53\x29\xa5\x30\x4d\x13\x21\ +\x20\x1e\x8f\x93\x2f\x3c\x0e\x23\x96\x7d\xd1\xf7\xfd\xd6\xef\x7f\ +\xb8\x1f\xc4\x62\x31\xaa\xd5\x0a\x9e\xe7\xe1\x38\x0e\x86\x61\x18\ +\x40\x4e\x3f\x8e\x53\x29\x45\x10\x04\xe8\xba\x8e\x6d\xdb\x48\x29\ +\x82\x3f\xff\xda\xdf\x00\xd0\x34\xcd\x01\x4c\xc7\x71\xf0\x3c\x0f\ +\x21\x04\xbe\xef\x0b\x40\x48\x60\xad\xd1\x68\x78\x4a\x29\x94\x52\ +\x9c\x3a\x15\xa3\xd1\x68\xf0\xee\x3b\xd7\xa5\x52\xea\x99\xae\xeb\ +\xab\x6f\x5d\x7b\x5b\xad\xaf\xaf\xa3\x54\x13\xae\xeb\xe2\x79\x1e\ +\x87\x87\x87\x3e\xb0\xa6\x03\xd3\xdb\xdb\xdb\xc9\x74\x3a\xdd\x0a\ +\xd0\x9e\x6a\x67\x77\x6f\x87\x9e\x9e\x1e\xf1\xf9\x67\x5f\x98\x80\ +\xb9\xb1\xb1\xc1\xcf\x0f\x7f\x24\x97\x3d\x87\xeb\xba\x44\x22\x11\ +\x76\x76\x77\xea\xc0\x43\xad\xb7\xf7\x52\xa5\xbc\xba\x72\xed\x4a\ +\xdf\xd5\xb8\xa6\x69\xe8\xba\x8e\x65\x5a\xec\x55\xf6\x98\x9f\x2f\ +\xf2\xe4\xc9\x1f\x54\xaa\x15\xda\x5a\x53\x08\x21\x91\x52\xd2\xd5\ +\xd5\xc5\xbd\x7b\x93\xff\xd4\x8f\xea\x9f\x68\xc5\x42\x69\xf3\xe5\ +\x0b\x3d\xe7\x63\xb1\x58\x47\xba\x2b\xdd\x22\x84\x40\x4a\x0d\x5d\ +\x37\x88\x46\x9b\x89\xc7\x13\xd8\x76\x14\x29\x25\x47\x47\x47\x64\ +\xb3\x59\x8a\xc5\xc2\xdf\x4f\x97\x9e\xde\xbf\x3b\x3a\xfe\xa5\x06\ +\x50\x2c\x94\x1e\x58\x11\xf3\x4d\xdb\x8e\x9e\xce\x64\x32\xa6\x94\ +\x12\xc7\x71\x08\x82\x80\x30\x0c\x01\xb0\x2c\x8b\x4c\x26\xc3\xdc\ +\xdc\x23\xe7\x97\x5f\xa7\x67\xee\x8e\x8e\xdf\x04\x34\xed\xb8\xd3\ +\xc5\x42\xe9\xdb\x68\x73\x24\x3b\x3b\x3b\x93\x4b\xa5\xda\x95\x69\ +\x9a\xb2\xa5\xa5\x05\xcb\xb2\x00\xd8\xdc\xda\xf4\x27\x27\x27\x9e\ +\xaf\x94\x57\xbe\x1e\x1d\x19\xbb\xf9\x02\x0b\xc5\x89\x65\xea\xb7\ +\x06\xfa\xdf\xb0\xed\xc8\xfb\xba\xa6\x5f\x11\x52\x74\x09\x21\x44\ +\x10\x04\x9b\x9e\xe7\xfd\x64\x18\xc6\xf8\xc9\x39\xff\x0b\xba\x95\ +\x51\x6e\x4a\x98\xb4\x3a\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x04\xf3\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd5\x06\x1d\x11\x10\x0d\x8a\x83\xfa\x75\x00\x00\x04\x80\x49\x44\ +\x41\x54\x38\xcb\xb5\x94\x6d\x6c\x53\x55\x18\xc7\xff\xe7\xbe\xb4\ +\xbd\xb7\xb4\x6b\x47\xbb\xb6\x6c\x44\x27\xa8\x63\x22\x73\x74\x40\ +\x20\x51\x24\x08\x02\x21\x71\x46\xf0\x03\x26\x46\x33\x41\x64\x82\ +\x7c\xa1\x4e\x21\x12\x11\x70\x01\x51\xc2\x07\x3f\xf8\x32\x21\x8b\ +\xc6\x09\xe2\xe2\x07\x3f\x28\x94\xb1\x18\xc2\x64\x50\x12\x1c\x43\ +\x10\x96\x8d\x95\x6d\x5d\x7b\x57\xfa\x7e\x7b\xef\x3d\xc7\x0f\x76\ +\x49\x21\x63\x10\x13\x9f\xe4\xc9\xc9\x49\xce\xf9\x3d\xff\xf3\x3f\ +\x4f\x1e\xe0\x3e\xb1\x62\xc5\x0a\x82\xff\x10\x13\x5e\x0a\x34\x6d\ +\x6b\x53\x73\xd9\xd5\x84\x10\x89\x32\x4a\x08\x21\x94\x52\x9a\xb5\ +\xd9\xec\xad\x7b\x77\x37\xbf\xf5\x20\x60\xa1\x78\xf3\x6e\xd3\xb6\ +\x67\x32\xd9\xec\xaf\x6b\xd7\xac\x35\x95\x94\x94\x92\xbc\x66\x30\ +\x83\x81\x8a\x3c\xe1\x08\x60\x4d\x26\xc6\xde\x4c\x24\x92\xaf\xd9\ +\xed\xb6\xa5\x7b\x77\x37\x9f\x79\x20\xc5\x3b\x3f\xdc\x31\x2f\x1e\ +\x8f\x77\x35\x6e\x7a\x87\x9c\xb8\x70\x2b\xdf\xab\x08\x39\x8b\x2c\ +\x4b\x06\x85\xc0\x81\xe9\xa9\x54\x2a\xeb\x9f\x06\xcb\xd2\xda\x0a\ +\xd3\xc1\x43\x07\x68\x99\xbb\xac\x6e\xc7\xf6\x9d\xa1\xfb\x2a\x8e\ +\xc5\x94\x8e\x2d\x6f\x6f\x25\xed\xe7\x22\xda\xb0\x6a\x17\xd7\x2d\ +\xa9\x48\x95\x4f\x95\x6f\x53\xc6\xf4\x8c\x6a\xe8\x57\xc2\x09\xed\ +\xf7\xde\xd1\x87\x92\x7f\x0c\xe5\x37\x37\x6e\x35\x1d\x3c\xf4\x69\ +\x27\x00\xdb\xbd\xc0\x3c\x00\xec\xf8\xe0\xfd\x80\x7f\x6e\xdd\xb2\ +\x1b\x8a\x60\xdc\x48\xcb\xe2\x1b\x4b\x67\x8c\xf8\x9c\x12\xb1\x98\ +\x38\x91\x52\x50\xca\xa0\xdb\x24\x51\xcf\xa8\xfa\xe5\x3e\x85\x56\ +\x9a\x69\x46\xf3\x38\x2d\x64\x4e\xcd\x93\xa9\xd3\x1d\x9d\x5d\x13\ +\x81\xb9\x7f\xd5\x46\xb7\xf9\xe7\xfa\xc5\xb3\xfd\x9a\xbe\xe0\x51\ +\xd7\x75\x81\x27\x5a\x5e\xa7\xf9\x5c\xde\x48\x51\xc6\xd2\x00\x4b\ +\x13\xb0\xb4\x92\xd4\x06\x09\x21\xa7\x7a\x22\x20\xf3\xe7\x2d\xb0\ +\x44\x22\x23\x4d\x93\x5a\x21\x08\x82\x83\xe3\x45\x58\x64\xab\xb9\ +\xbc\xd4\xa2\xa9\x1a\x65\x00\x0c\x81\xe7\x74\x06\xa6\x51\x8a\xdc\ +\x90\x92\x0b\xc7\x12\x6a\x18\x04\xe9\x68\x06\x8b\x25\x49\x06\xcf\ +\x0b\xae\x49\xc1\x84\x10\x5e\x37\x0c\xf0\x82\xc0\xc7\x33\x7a\xda\ +\x2c\x72\x1c\x88\xa0\x1a\x8c\xe5\x39\x42\x72\x63\xe9\xfc\xc8\xa9\ +\x4b\x91\xf3\x84\xc3\x14\x46\x01\x5e\x10\x78\x00\xe0\x38\xc2\x4f\ +\x0a\xa6\x94\xea\x66\x51\x10\x45\x8e\xb1\x6b\xe1\xe4\x30\x47\x6c\ +\x9c\x73\x0a\x0c\x35\x6f\x0c\x25\xb2\x7a\x7f\x67\x4f\xe4\xb2\x01\ +\xc8\x3c\x23\x14\x1c\xb3\xe8\x9a\x66\xa8\xaa\xca\x53\x4a\xb5\x49\ +\xc1\x1e\x8f\xe7\x7c\x38\x1c\xae\x2b\x31\x99\xc8\xd5\x9b\xd1\xd2\ +\x9b\xd1\xcc\x19\xc6\x21\x42\x08\x37\xc2\x33\x44\x28\x43\x82\x07\ +\xdc\x20\xcc\xaa\x8c\x46\x9e\xae\x7a\xa8\x94\x28\x4a\x4c\xf5\x7a\ +\x7d\x67\xef\x05\xe6\x0a\x1e\x7f\x19\xec\x38\x39\xb4\xda\xef\xe1\ +\x25\xab\xb4\xc8\x60\xd4\x06\x46\x38\x30\x26\x30\x46\xcd\x8c\x50\ +\x3b\x25\x30\xe5\x72\xb9\x32\xa7\xdb\xfd\xec\xca\xa7\xdc\x5c\xcb\ +\xe1\xaf\x13\xf1\xf8\x58\x70\xd2\x76\x3b\x79\x22\x18\x9a\x55\x5d\ +\x15\xb0\x9a\x05\x75\xf6\x63\x95\xf2\x8d\x68\xbe\x6e\x74\x68\xd0\ +\x2d\x49\xd2\x75\xf0\x04\x5a\x2e\xef\x8a\x84\x07\xb6\x38\x5d\xae\ +\x57\x56\xd7\x38\x20\xa8\x31\xea\x9a\xea\x4e\x5c\xb9\xd2\xbb\xa4\ +\x72\xc6\xc3\x87\x2f\xf7\xf4\xa6\x26\x04\x03\xc0\x4b\x6b\x5e\xfc\ +\xed\xcf\x9e\x4b\x9b\x58\x66\x6c\x78\xdd\xaa\x45\x76\x0d\x82\x37\ +\x9d\x67\xcf\x19\x8c\xbc\x20\x99\x84\x55\x35\x33\xcb\xa6\xd5\xfb\ +\x5d\x38\xf2\xf9\xc7\x74\xf9\xf2\xe7\xb9\xfe\xfe\x7e\x9b\xdd\x5e\ +\xa2\xdd\x4e\xc4\x1b\x1e\x99\x51\xf9\xed\xdd\xf0\x3b\x86\x50\xf3\ +\xbe\x3d\x73\x06\x06\x6e\xfe\xe2\x76\xb9\x73\x0e\x47\xa9\xc9\x3f\ +\xd7\xef\x98\x3e\x7d\xba\xad\xaf\xaf\xef\xf6\xb9\xee\x73\xc3\xd7\ +\xfe\xfe\x4b\x52\xb3\xda\x2e\x87\xd3\xfe\x55\xe3\xa6\xcd\x08\x06\ +\x83\xe0\x79\x5e\xbd\x70\xb1\x3b\xa3\x28\xca\x13\x47\xdb\x7e\x1c\ +\x9a\x74\xba\x35\xef\xdb\xf3\x3a\x80\xb5\x83\x83\x83\x8b\x09\x21\ +\x12\x63\x2c\x5b\x51\x51\x71\x1a\xc0\xd1\xa6\xc0\xf6\x6f\x1a\x1b\ +\x1b\xf7\x12\x8e\xbd\xb7\x61\xfd\x46\x74\x75\x75\x81\x52\x6a\x5c\ +\xb8\xd8\x9d\x89\xc5\x62\x55\xc7\x7e\x38\x7e\xeb\x9e\xe0\xa2\x8f\ +\xe5\x0a\x67\x48\x91\x10\x06\x00\x0d\x0d\x0d\xaf\x4a\xb2\xf9\x8b\ +\x0d\xeb\x37\x92\x50\x28\x04\xb3\xd9\xcc\x3a\x3a\x83\xb9\x48\x64\ +\xb4\xea\xf8\xb1\x9f\x06\xc8\x5d\x20\xa1\xe0\x3b\x0f\x80\xaf\xad\ +\xad\x35\xed\xdf\xbf\x7f\x96\xc7\xe3\xf1\x01\x10\xa2\xd1\x68\xac\ +\xb5\xb5\xf5\x6a\x4b\x4b\x4b\x12\x00\xad\xaf\xaf\x5f\x58\x5e\xe1\ +\xfb\x79\xc3\xfa\x8d\x24\x99\x4c\xc2\xe9\x74\xe2\xa3\x3d\xbb\x6e\ +\x7d\xff\x5d\x5b\x39\x57\xd4\xcf\x26\x00\x62\x61\x35\xcb\xb2\x2c\ +\x05\x02\x81\xd9\x3e\x9f\x6f\xbe\xcf\xe7\x7b\xd9\xe5\x72\xad\xb4\ +\x5a\xad\x35\xd5\xd5\xd5\x33\x0b\x53\x6d\x4a\x7b\x7b\x7b\xe8\x7c\ +\x77\x68\xd1\x81\xcf\x3e\x81\xd7\xeb\x85\xcd\x66\x83\xc3\xe1\xc8\ +\x02\xe0\x8a\x9f\x28\x16\x0a\x8c\xab\xbe\x43\x7d\x91\x2d\x0c\x00\ +\x05\x60\x8c\xe7\x82\x85\xf3\xa7\x55\x3d\x5e\x75\x44\x96\x65\xaf\ +\x12\x1b\x5b\xd6\xd6\xd6\x76\x89\x4c\x30\xf8\xc9\x04\x40\xbe\xc8\ +\xe7\x71\xf0\x78\xea\x85\x02\x74\xdc\xff\xff\x35\xfe\x01\xc0\x62\ +\xff\xd0\xdd\x98\xb2\xab\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x05\x71\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\ +\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd5\x04\x08\x11\x06\x01\x82\xaa\xf7\x44\x00\x00\x04\xfe\x49\x44\ +\x41\x54\x38\xcb\xb5\x95\x4b\x6c\x5c\xd5\x1d\xc6\x7f\xe7\x71\xef\ +\xdc\x3b\x77\x3c\xbe\x09\x8e\x31\x38\xaa\xc0\x4e\x9c\x07\x03\x24\ +\x31\x10\x9b\x46\xa2\xa2\x0d\x20\x10\x22\xcd\xa2\xad\x14\xa1\x40\ +\x58\x44\x91\xb3\x62\x41\x16\x6c\x02\x6a\x17\xa8\x42\x40\x14\x84\ +\x58\x02\x51\xd5\x4a\x51\x05\x0d\x8f\x12\x15\x22\x70\x2c\x6c\x43\ +\x14\x22\xc1\x26\x30\x26\x26\x64\xf2\x18\x27\xe3\x8c\x3d\x9e\xb9\ +\xaf\x73\x58\xc4\x31\x0e\xd0\x4a\x5d\x70\x36\x67\x71\xfe\xe7\x77\ +\xfe\xfa\xce\x77\xbe\x03\xbf\xd0\x10\xff\x6b\x71\x68\xf7\xae\xed\ +\xc0\xc3\xc0\x46\xa0\x6b\xbe\xfe\x3c\x30\x0e\xbc\xf9\xf2\xfe\x57\ +\x5e\xfb\xbf\xc0\xf3\xc0\x67\xee\xda\x38\x78\xdd\xfd\x9b\xef\xcb\ +\x17\xdb\x43\xe9\x38\x1a\x10\x24\x49\xc4\x74\xad\x66\x47\x47\x47\ +\x5b\x1f\x7c\xf8\x9f\x4b\xc0\xd3\x3f\x77\x80\xf8\x19\xe8\xbe\xbb\ +\x36\x0e\x6e\x7b\xe4\xe1\x47\x96\x58\x10\xd5\xa9\x29\xa6\xa7\xeb\ +\x58\x6b\xc8\xb9\x0e\x5e\xce\x65\x49\xd8\x4e\xb1\x58\x24\x49\x33\ +\xfe\xfe\x8f\xbf\x35\x4e\x9c\x38\xf1\xda\xcb\xfb\x5f\x19\x5a\xcc\ +\x51\x3f\x86\x3e\xf0\xc0\x83\x8f\x6f\xd9\xb2\xb5\xfd\xf4\x99\x33\ +\xa2\x5c\x9e\xa0\x36\x3d\x43\x6a\x0c\x52\x69\x1c\x47\x63\x4d\x06\ +\x64\x24\x71\x84\x92\x82\x81\x81\x41\xf7\x72\xbd\xbe\xbe\x7b\xf9\ +\x8d\x3d\xe3\x63\x9f\xbe\xf5\x13\xf0\xd0\xee\x5d\xdb\x7b\x7b\x7a\ +\x9f\xda\xb6\xed\xd1\xf6\x2f\xbe\xf8\x92\xd3\xdf\x9d\x21\x33\x90\ +\x59\xb0\x42\xe2\xba\x1e\x8e\xab\xc1\xa6\xb8\xca\x82\x4d\x01\x43\ +\x9a\x26\xac\x5b\xb7\x5e\x9e\x3a\x35\x59\xea\xe9\xbd\xf9\xf4\xa7\ +\xe3\x9f\x7d\x0e\x20\x17\x35\xfc\x97\xc7\x1e\x7f\x22\x3c\x7b\xf6\ +\x2c\xcd\x56\x93\x62\xb1\x88\xd6\x1a\x84\x20\x33\x96\xc4\x18\xe2\ +\x38\xc1\xa4\x29\x69\xdc\xc4\xa6\x4d\x30\x11\x36\x4b\x88\x5a\x4d\ +\xb6\xfe\x7e\xab\xd6\x5a\xbf\x74\x4d\xc7\x43\xbb\x77\x6d\xbf\xf7\ +\xde\xdf\xfe\x69\xcd\xea\x35\xba\x52\x39\x8b\xb5\x06\xa5\x24\x52\ +\x49\xb2\xcc\xb0\xb4\xa3\x03\xcf\xf7\xf0\xbd\x1c\x8a\x04\x91\xce\ +\xa2\xa5\x41\x09\x81\xb1\xd0\x98\x6b\x51\x2c\x86\x54\xab\x55\xe7\ +\xa6\x9b\x6f\x9a\x1e\x1f\x1b\x1f\xd3\x00\x42\x88\x3f\x0e\x0c\x0c\ +\xba\xf5\x7a\x1d\x21\x2c\x52\x18\x4c\x96\xe2\x08\xb8\x7e\xd9\x12\ +\xbe\xfd\xf6\x1b\x86\x3f\x3a\x82\xc1\x70\xc7\xfa\xdb\xb8\x7b\xc3\ +\xaf\x88\x9b\x73\x34\xd3\x8c\x56\x36\x87\x72\x03\xa4\xae\xb3\x61\ +\xc3\x1d\x72\x62\x62\xe2\x49\x60\x9f\x04\x50\x4a\x6d\xea\xb8\xae\ +\x83\x24\x89\x70\x94\x44\x93\x60\xe3\x19\x7c\x27\xe5\x42\x65\x92\ +\x13\xc7\x8f\xd9\x9e\x9e\xde\x89\x35\xab\xd6\xbe\x7b\xfe\x42\x2d\ +\x3b\xfe\x65\x85\x7c\x61\x29\x97\x67\x66\x11\x42\x20\xa5\x22\x4d\ +\x33\x96\x77\x77\x13\xc5\x71\xf7\x82\xc6\x69\x9a\x05\x5a\x6b\xb4\ +\x52\xb8\xda\xe2\xaa\x16\xca\x4e\xe3\x52\xe7\xdf\x87\xdf\xa7\xab\ +\xeb\x86\xf7\x76\xee\xdc\xd9\xbb\x63\xc7\x8e\x87\xb2\xcc\x6c\x1e\ +\x19\x3b\x4e\x5b\xd8\x89\xeb\x17\xc9\x17\x42\x3c\xcf\x07\x21\xc8\ +\x79\x1e\x49\x12\xeb\x05\xb0\x10\x57\xfc\xac\x94\x42\x2b\xd0\xa2\ +\x89\x34\x0d\x30\x11\x85\x42\x1b\x95\x4a\xe5\xb9\xab\x97\xf2\x75\ +\xf9\xe4\x30\x58\x8b\xf6\xb1\x32\x87\x41\x5d\x71\x8e\xb1\x48\xf9\ +\x83\x17\x34\x80\xd6\x4e\x2b\xcb\x32\xdf\x75\x1c\x32\xd7\x27\x75\ +\x97\xe2\x78\x90\x5a\xcd\x2d\x6b\xfa\x28\x7f\x53\x79\x75\x68\xf7\ +\xae\x5b\x01\x0a\x85\xb6\x17\x7f\x73\xcf\x80\x88\x92\x39\x1a\xcd\ +\x08\xc3\x1c\x08\x89\x94\x92\xb6\x38\xc2\x75\xdc\x6c\x01\x9c\x73\ +\xdd\xef\x6a\xb5\xda\xca\x42\xe0\x93\x26\x79\xd2\x5c\x88\x1b\x28\ +\xe2\x24\x63\x5d\x7f\x0f\x4b\x3b\x2b\xab\x8d\x35\x91\xc5\x9a\x5f\ +\x6f\x1a\x54\xab\xfb\xba\xa9\x56\x4f\xa1\xb5\xa2\x15\x45\x08\x21\ +\x09\xc3\x90\xa9\xa9\x29\xfc\x7c\xbe\xb9\x60\xb7\xfe\xfe\x0d\x52\ +\x48\x79\xff\xda\xb5\x6b\x45\x66\x2c\x42\x39\xb8\x39\x1f\xa1\x7d\ +\x1a\xb1\x21\xdf\xde\x49\x5f\xa9\x5f\xac\x2a\xf5\xcb\x42\x5b\x28\ +\x6a\x97\xce\x63\x92\x18\xc7\x0d\x88\x63\x43\x96\x65\x74\x76\x76\ +\x32\x3c\xfc\x31\x8d\xb9\xc6\xd1\x23\x1f\x1e\x79\x5d\x03\xec\xdb\ +\xb7\xff\x25\xed\xe8\xbf\x6e\xfe\xdd\x66\x27\xe7\xf9\x08\xa5\x89\ +\xa2\x08\x69\x13\xb4\x49\xb8\x70\xe9\x32\xb3\x8d\x16\x52\x4a\x84\ +\x4d\xc9\xbb\x96\xc0\x95\x58\x3b\x8b\x10\x2e\x61\x18\x92\x24\x31\ +\xe5\x89\xb2\x95\x42\xfd\xe1\x9a\x97\x67\x8c\xdd\xf3\xc6\x81\xd7\ +\xad\x54\x1a\xad\x1d\xb4\x93\xc3\x71\x72\xe4\x72\x39\xf2\x9e\x4f\ +\xd8\xde\x4e\xb1\xd8\x46\x21\x08\x00\x87\x28\x16\x34\x1a\x4d\x82\ +\x20\xa0\xa3\xa3\x83\x7f\x1d\x7a\x0b\x29\xe5\x9b\x7b\xf7\xee\xbd\ +\x78\x4d\x56\x8c\x8e\x8e\x1d\xbb\xfd\xf6\xdb\xc4\x5c\xb3\x71\xcf\ +\xaa\xbe\xd5\x0b\x56\xb1\x40\x14\x47\x20\xc0\x51\x12\x29\x2c\x98\ +\x14\x93\x19\xc2\xb0\x83\x65\xcb\x3a\x39\x7c\xf8\x30\x93\x93\x93\ +\xb5\x67\x9f\xfd\xf3\xe0\xfc\x16\xab\xe6\xa3\xd3\x03\xfc\xa3\x47\ +\x47\x3e\x5f\xb1\xa2\xb7\xf4\x55\xf9\xab\x15\x7d\x2b\x57\x12\xe4\ +\x03\xb2\x2c\xc5\x98\x0c\x25\x05\xae\xa3\x50\x58\x0a\xf9\x1c\x5d\ +\x5d\xd7\x93\xa6\x29\x6f\xbf\x7d\x88\x72\xf9\xeb\xd6\xc1\x83\xff\ +\xdc\x74\xf1\xe2\xc5\x08\x48\x17\x83\xe5\xfc\xec\x0c\x7f\x3c\x7c\ +\x64\x79\x77\xb7\xfc\xec\xd8\xf8\x9d\x49\x92\x08\xdf\xf3\x28\x04\ +\x79\xda\x0a\x01\x81\xe7\xe1\xe7\x1c\xa2\xa8\xc5\x27\xa3\x23\xbc\ +\x73\xe8\x10\xb3\xb3\xb3\x07\x9f\x7f\xfe\x85\x1d\xd5\x6a\xb5\x0e\ +\x34\xe6\xc1\x66\x71\xd0\xcb\x79\xfb\xb5\x01\x3a\x9f\xcf\x07\x7b\ +\xf6\x3c\xf5\xae\x31\x59\x4f\x63\xae\xa1\xa3\x28\x12\xc0\x15\xcd\ +\xfd\xbc\xd1\x8e\x5b\x39\xf0\xc6\x81\x2d\x27\x4f\x9e\xac\x01\xd3\ +\x40\x0b\x88\xe6\xa5\x30\xff\xed\xcf\x93\x8b\xd2\x4f\x97\x4a\xa5\ +\xb0\x54\x2a\xdd\xe8\x79\x5e\x70\xee\xdc\xb9\x73\x23\x23\x23\x17\ +\x66\x66\x66\x5a\x57\xbb\xbb\xaa\xeb\x62\xc0\xf7\xfa\xbc\x1e\xcb\ +\xc3\xf7\x5d\x2b\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\ +\x00\x00\x03\xe9\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd5\x0b\x15\x11\x2f\x34\xb0\x7c\xb4\x1f\x00\x00\x03\x76\x49\x44\ +\x41\x54\x38\xcb\xb5\x95\x5f\x68\x5b\x55\x1c\xc7\x3f\xe7\xe6\x36\ +\xbd\x49\x6e\xd6\xa6\xd9\xb2\xb6\xeb\xaa\x73\x45\xa7\xed\x3a\x64\ +\xca\x64\x0a\x82\xe0\xab\x20\xce\x89\x0f\x05\x41\x7c\x56\x61\xf8\ +\xa6\x82\xfa\xaa\xbe\xf9\xa0\x0f\x83\xe9\xd4\xb2\x75\x20\xb8\x87\ +\x81\x3e\xf8\x20\xee\xc1\xfe\x59\x6c\x6b\xbb\x3f\x76\xa5\x25\x49\ +\xdb\x2c\xa6\x69\xd2\x36\xc9\xb9\xe7\xe7\xc3\x4d\xd2\xc8\xb6\xc8\ +\x0a\x7e\xe1\x1c\x7e\xfc\x7e\xe7\x7e\x7f\xbf\x7b\x7e\x7f\x8e\xe2\ +\x3e\x38\xf7\xcd\xd9\xd3\x28\x46\x3d\xed\x21\x08\xad\xa0\x50\x08\ +\x82\x08\x9f\xbc\xf9\xc6\x5b\xef\xb7\x3c\x7c\xe1\xd2\x77\xf2\x20\ +\x28\x14\x0a\x72\xee\xfc\xd9\x46\x04\xf6\xc8\xc8\xc8\x71\x83\x77\ +\x59\x29\xcb\x77\x8e\x22\x1c\x0e\x59\xba\xea\x01\xe0\x79\xda\x57\ +\xdf\x07\xc6\x18\x00\xb4\xae\x12\x0c\x06\x1b\x7a\xbb\x50\xc8\x7f\ +\xf9\xf6\x3b\xef\xee\x6f\x3e\xbc\xb2\x9a\xa6\xb7\xf7\x00\x00\x93\ +\x93\x93\xa4\xd2\x69\x2c\xa5\x7c\x7e\xd9\xb9\x00\x10\x8c\x08\xb1\ +\x58\x27\x43\x83\x43\x0d\x27\x00\xb6\x41\x74\xb1\x58\x64\x62\x7c\ +\x1c\x80\x70\x24\x4c\x5f\x7f\x2f\x27\x9f\x79\x96\x7c\x3e\xc7\xc0\ +\xc0\x00\x47\x8e\x3c\x86\x65\x05\x7c\x22\x23\x88\x48\x43\x06\xc1\ +\xb6\x6d\x52\xe9\x0c\x5a\xeb\x26\x62\xcf\xac\xb7\x3b\x1d\xc4\xe3\ +\x7b\x01\x88\x27\x3a\x39\x79\xe2\x39\x4a\xa5\x12\x8b\x8b\x8b\xfc\ +\x3e\x3e\x8e\x13\x0a\x35\xc5\x48\x83\xa0\x3d\x18\xe4\xa1\xfe\x7e\ +\x06\x07\x87\x58\x5d\xcb\xe0\xba\xee\x0e\xb1\x15\x50\x91\xca\x76\ +\xa1\xea\x38\x4e\xdb\xea\x5a\x86\x3d\xb1\x08\xa1\x50\x88\x85\x85\ +\x9b\x54\xb5\xe6\xe8\xf0\x10\x4a\xfc\x3b\x56\x96\x42\x8c\xa0\x2c\ +\x50\x4a\x61\x3c\x21\xb1\xbf\x9b\xb9\xf9\x79\xe6\xe6\xe7\x88\xc7\ +\xbb\x3e\x6d\x10\x3b\x8e\x93\x4c\x67\x52\x4f\x87\x43\x11\x22\xae\ +\xcb\x0b\xcf\xbf\x48\x36\xbb\xc6\x5f\x0b\xb7\xd9\x28\x6e\x80\xe0\ +\x97\x9b\x31\x48\x3d\x8d\x96\xc2\xb6\x03\x84\x9c\x10\x89\x44\x82\ +\x3f\x66\xae\xd1\xd5\x15\xfb\xec\xe5\x97\x4e\x9d\x69\x64\xe0\xd5\ +\xd7\x5e\x79\xef\xd8\xf0\xb1\x0f\xfb\xfa\x0e\x86\x9d\x70\x1b\x9d\ +\xb1\x1e\xbe\xbd\x92\x64\x36\xbf\xaf\x65\x39\x3a\x01\xbf\x6a\xb6\ +\xbd\xc0\x5d\xb6\x47\xdd\x95\xab\x36\x70\x3b\x97\xfb\xbb\x7a\xe8\ +\xf0\xc3\x3c\x39\xfc\x14\x63\x3f\x5c\x66\xe4\xf5\xd3\x28\x55\x2b\ +\x31\xa5\xfc\x16\x50\xfe\xf2\x13\xc7\x8e\xfd\x1e\xf8\xfc\xab\x8b\ +\x8f\xdb\x40\xae\x5c\xae\x54\x3d\xcf\x23\x1a\x8d\x72\x75\xc9\xe1\ +\x68\xc5\x30\x9b\x2a\xb1\x1b\xf4\xc6\x1c\x8a\x65\xd1\x16\x30\x93\ +\xcd\xae\x56\x3d\xad\x49\x65\x52\x04\x03\xe6\x3f\x5b\xb8\x15\x0a\ +\xb9\x3b\xb2\xad\x03\xcb\xd6\x85\xd1\xb1\xb4\xe3\x84\x24\x1a\xed\ +\xa0\xb8\x51\xe0\xf8\x13\x07\x90\x5d\xf2\x76\x84\xdb\x28\x6d\x95\ +\x4d\x5f\xe9\xe7\x33\x16\x40\x61\x7d\xbd\x6c\x44\xf3\xfd\x8f\xbf\ +\xd2\x93\x88\x93\xdf\xf2\x10\x01\x23\x82\x31\x60\x8c\xd4\x16\xb5\ +\x06\x69\xb6\xd1\xd0\x87\xdb\x03\x2c\xa5\xb3\x55\x60\xc6\x06\x88\ +\xb8\x91\xf1\x5b\x37\x16\x0e\xf5\xf4\x1d\xc6\xdd\xd7\x4f\x2a\x5f\ +\x61\x5b\xd7\xda\xb3\xd6\x65\x52\x9b\x61\xd4\x25\x55\xb7\xf9\xe8\ +\x72\xdb\xd0\x9e\x90\x9c\xbd\xb9\xf4\xcb\xe8\x58\xda\xf6\x3f\x66\ +\xb2\x58\x2c\x9e\xea\x7e\xe4\x20\xb9\xa2\x26\x9d\x2b\x37\xcd\x44\ +\x01\xf1\xc7\xa2\xaa\xc9\xbe\xae\x66\x03\x10\x45\xc5\x13\x26\x26\ +\x92\xd5\xc4\xe6\x6f\x1f\x03\xd8\x40\xfb\xf2\x72\x2a\x19\xdd\x13\ +\x35\x27\x7a\x13\xd6\xcc\xaa\xde\x89\xb6\xe6\xb5\xbe\xab\x7f\xcd\ +\xdf\x1d\x5b\xa2\xa3\x9d\xaa\x67\x98\x9b\x4d\xae\xfd\x34\x3a\xf6\ +\x75\x9d\x78\xef\xf4\xf4\x74\xa4\xbb\xa7\xdb\xba\xf2\xe7\xe6\xdd\ +\x19\x11\xff\x1a\x68\xda\x55\x23\x52\xdf\xa6\xb5\xc0\x46\xc6\x63\ +\x73\xe5\x22\x60\x01\xc6\x06\x36\xb2\xd9\xec\xf5\x6b\x53\x53\x1f\ +\x45\xdc\xd9\x0f\x76\x5b\x66\xfa\xce\xf5\x1b\x53\x97\xbe\x38\x0f\ +\xb8\x40\xa1\xfe\x77\x0e\x10\xae\x29\xdd\x9a\xd7\x07\x81\x00\x15\ +\x60\x13\xc8\x01\x5b\xf7\xea\x4b\xab\xe5\x93\xd1\x1a\xa6\xf9\x29\ +\xf8\x5f\xf0\x0f\xa8\x39\xd1\x64\xf2\x5e\x8a\xb6\x00\x00\x00\x00\ +\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x06\x2f\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x02\x00\x00\x00\xfc\x18\xed\xa3\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x05\xc1\x49\x44\x41\x54\x78\xda\xb4\ +\x56\x09\x50\x13\x67\x14\xde\xfd\x77\x73\x27\x24\x04\x42\x20\x92\ +\x83\x23\x8a\x80\xc1\xa0\x28\xa5\x8c\x4a\x61\x50\xc4\x6a\xb5\x65\ +\xb0\x1d\x69\xb5\x9d\xb6\x2a\xc5\x91\x7a\x8c\x15\x8f\x62\x3d\x86\ +\x8e\x96\x41\x64\x5a\x3b\x8c\x23\xea\x30\xcc\x60\xa7\x4e\x45\xf1\ +\x04\x41\x2b\x56\x04\x54\x10\x91\x43\x4e\x41\x42\xb8\x34\x10\x93\ +\x90\xa4\x6f\x4d\xa5\x28\x12\xb4\x43\xdf\x6c\x92\x7f\xff\xec\x7e\ +\xdf\x7b\xdf\x3b\x76\x31\xec\x7f\x36\x1c\x3e\x1b\x12\x72\x27\x04\ +\xeb\xcc\xd9\x1f\x6b\x1a\x4a\xdd\x27\xa9\x56\xc5\x6c\xda\x95\xba\ +\x82\x42\xc7\x71\x72\x02\xa1\x7d\xbc\x82\xb6\xaf\x3f\x6e\x83\x1e\ +\xb6\x7f\x09\xf6\x1f\xfc\x08\xbe\x37\xae\x3b\x39\xfa\xd4\xb6\xb6\ +\xd9\xf0\x05\x23\xd1\x3d\xa4\xbe\xa7\xf7\x44\x78\xc7\xee\x1d\xcd\ +\xfd\xa6\x11\x8c\x24\x7e\x85\x03\x7c\x7f\x05\x7d\x61\xd8\xca\xfc\ +\x2b\x59\x56\xab\x15\xd6\xe8\x15\x14\x9b\xb3\xa3\x51\xec\x9b\x0d\ +\x7d\x47\xe2\x89\xa9\xde\xb3\x40\xf7\xca\xba\x8a\xb7\x8e\x60\x58\ +\xa5\xb1\x88\xa5\xee\x01\x6d\x8f\xee\x42\x1a\xa2\xe6\x7d\x06\xa7\ +\xb0\x7e\x3d\x81\x2d\x88\xd1\x28\x76\x24\xb2\x19\x20\x02\x34\xf8\ +\x0e\xe2\x8c\xdc\x47\x13\x58\xf2\x00\x3d\x4d\xa9\xb6\xbe\xb0\x31\ +\x25\x7a\xad\x83\xe3\x4a\x04\x06\xfa\x9c\x2d\x3c\x3a\x61\x8d\x56\ +\x5d\x99\x07\x82\xd8\xb4\x06\x7f\x21\xb7\xd0\x62\x85\x07\xa2\x87\ +\x13\x9e\x7b\xfa\x20\x14\xd8\x7f\x6c\x34\x1b\x3a\x74\xec\xa7\xc1\ +\xd5\xc3\x9b\x5c\x26\x43\xb9\x7c\x1f\x06\xc7\x8b\x80\xde\xa2\x8a\ +\x46\xcb\x5d\x97\xf3\x9d\x77\xec\x4b\x4d\x1b\xbd\x70\x73\xf4\xcb\ +\x97\xd5\xa4\xc7\x50\x04\xd9\x27\x93\xfb\xfa\x35\x2c\x3a\xb5\x65\ +\xb1\x12\x0a\x31\x13\x16\x5a\x1d\xdd\x82\x71\xf8\x7c\xf1\x34\x9f\ +\x20\x91\xb3\x1c\xc7\x11\x49\x32\x11\x22\x40\x8a\x91\xb5\x3f\xdc\ +\x59\xa0\xcf\x6b\x5d\xa1\x08\x2c\xfa\x9a\x5d\x71\xfe\xdf\x2e\x9d\ +\x82\x10\xfe\x57\x4d\xf7\xec\x69\x22\xd8\x2c\xb9\xa3\xc9\x2e\x68\ +\xbe\x7c\xbb\xfe\x54\x5e\x81\x50\x28\xf5\x51\x86\x2a\x3d\x54\x6c\ +\xb6\x08\xd1\xe8\x08\x47\x50\x91\xc0\x04\x22\xc0\x90\x80\x68\x00\ +\x3d\x76\xd9\xf6\x31\xa7\xe9\xad\x8c\xc8\xe6\x2e\x7d\xd6\xf9\x87\ +\x2c\x3a\xa1\xf2\xe0\xbb\x39\xb1\xae\x56\x75\xc1\xfe\x91\x9d\xa1\ +\xf9\x85\x2d\x0b\x93\x8a\xe0\x22\x28\x3a\xb9\xd4\x7f\xf6\xcc\x65\ +\x62\x17\x4f\x92\x64\x21\x84\x6c\x99\x68\x6c\xad\x06\x65\xc6\x52\ +\xf2\x40\x7a\x0c\x01\x3f\xfd\x03\x86\xe4\xe3\xf7\xe2\xc2\xe5\x0b\ +\x66\x49\x1a\x1f\xeb\x8a\x2a\xbb\xd8\x74\x32\x7e\x89\x52\xe2\xcc\ +\xd6\x3d\x35\x3a\x3b\x30\x73\xb6\x85\xa4\xfd\x5e\xdb\xdb\xa7\x69\ +\xeb\xa8\x15\x0a\xc4\x1c\x36\x9f\x24\x19\x70\xa3\x48\x3c\x79\xb2\ +\xf2\x5d\x3b\xa9\x2a\xb9\x99\xfb\x8f\xa0\xab\xa3\xbd\x7f\x4e\x7a\ +\x07\x33\x59\x30\x02\x61\x4c\xb2\xb6\x52\x63\x1c\xb2\xf8\x7b\x3b\ +\x42\x01\x52\x3b\x18\xbe\xed\x97\x8a\x16\xed\xc0\xf9\xd2\x8e\xa7\ +\x46\xfe\xfc\xb0\x38\x2f\xcf\xe0\x37\xa9\x05\x88\x80\x8a\xd4\x4b\ +\xc2\x5d\x1c\x32\xc9\x96\x62\x40\xcf\x38\x7a\x77\xe3\xe1\x0a\x06\ +\x9d\x80\xb5\x4e\x67\x8a\xda\x58\xd0\xd2\xfa\x64\xf7\xba\x19\x3f\ +\xad\x0d\xcc\xd9\x1a\x12\x20\x33\x5c\xb9\x96\xdd\xda\x5c\xaa\x1f\ +\xec\xb3\x5a\x2d\x6f\xf4\x44\xfb\x62\xbe\xac\x55\x6b\x4c\x8d\x0f\ +\xd4\xeb\x87\x76\x1d\xab\xba\x56\xad\x9d\xa3\x12\xc9\x5c\xb8\x91\ +\x6a\x71\x74\x84\x7c\xed\xde\x12\xb1\x23\x33\x69\x95\x2a\x7a\x53\ +\x41\x43\x87\x0e\xd6\xd7\xef\x69\xdd\x25\x53\xce\x7c\xef\xa9\x52\ +\xf0\xc7\x41\x8f\xcc\xa1\x22\x88\x8b\x90\x5f\xae\xe8\x5c\x97\x5e\ +\x1e\x14\x7f\x41\x21\xe1\x35\x9e\x58\x9c\xb5\x25\x64\xf9\x5c\xa9\ +\xa7\x1b\x07\xfe\x35\x98\x2c\xc5\x95\x1a\x92\xc0\x0f\x27\x06\x6d\ +\xf8\xd0\x67\x92\x90\x45\x23\x51\x5b\xfb\x83\xd8\x14\x6d\xd6\xc5\ +\xc6\x71\x23\xa0\x92\xdc\xd5\xa7\x97\xb9\xf2\x8e\x6d\x9e\x6d\x30\ +\x5a\x0e\x6e\x0b\x61\xe0\x18\x03\xc7\xa5\x72\xbe\xc8\x9d\xd7\x50\ +\xdb\x9b\x90\x51\xd6\xd4\x39\x70\xfe\x46\x47\xb8\x5a\xbc\x28\xca\ +\x33\x26\x5c\xe1\x40\x43\x97\xca\x3b\x35\xdd\x8f\xda\x74\xbe\x5f\ +\x45\xb2\xed\xa0\x27\x1f\xaf\xa2\x24\xca\x4c\x54\x73\xd9\xac\xd8\ +\x05\x9e\x98\xc1\x5c\x51\xdb\xe3\xe4\xc0\x90\xb9\xb0\x0b\x6f\x77\ +\xb6\xf5\x19\x4e\x15\x35\x07\xfb\x8a\xa6\x2a\xf8\x89\x19\x65\xda\ +\x7e\x43\x49\x5a\x84\x8f\x97\x23\xe5\x93\x56\x9f\x92\x53\x9d\xfe\ +\x47\x53\x49\xda\xbc\x40\x6f\xc7\x71\x24\xca\xbb\xa9\xa1\x93\x08\ +\x5e\x01\x7e\x3d\x5d\x1f\xba\xfe\x12\xf8\x8b\xd1\x10\x4e\xa2\xfc\ +\x92\xb6\x1b\x35\x3d\x9b\x62\x7c\x16\xcd\x95\xdd\x38\x14\xe9\xcc\ +\x67\x24\x64\x94\x53\xf7\x99\xad\x22\x21\x6b\x7f\xe2\xac\x40\x2f\ +\xf6\x92\x3d\x1d\xf6\x25\xa2\x08\x9c\xb8\x04\x84\x7c\xa7\xaa\xeb\ +\xeb\xb4\xd2\x43\x09\x33\xe6\xcc\x74\x85\x7a\x9d\x17\x2c\xd9\xf7\ +\x79\x40\x7b\xb7\xbe\xb8\xb2\x0b\x22\x73\x72\xe3\x7e\xf3\xc1\xe4\ +\xf2\xfa\xde\xd6\xf6\xa7\x18\x81\x63\x66\x0b\x1c\x3f\xac\x54\xf5\ +\xf5\xb7\xdb\x27\xa0\x46\x45\xe6\x8e\x10\xcc\x88\xa2\x36\x17\xbe\ +\x1f\x2c\x59\xb5\x58\x09\x70\x18\x83\xc0\x4c\x56\x91\x80\xb1\x66\ +\x91\xb7\xa7\x2b\x87\x72\x03\xc7\xe9\x04\x82\x12\x72\xe4\x31\x86\ +\x8c\x66\x12\x8a\x98\x86\xfc\x14\x82\xc1\x67\xcf\x5a\x34\x83\x20\ +\xa9\x3d\x02\xb0\xf2\xfb\xdd\xc5\x77\xbb\xae\xa5\x86\x3f\x8f\x0a\ +\xaf\xac\xe9\x86\x3e\xa0\xd3\x50\xca\x97\xd3\x39\x0c\xc2\xa4\x37\ +\xdf\xaf\xeb\x85\x66\x0e\x54\x0a\xb8\x12\x5e\xcd\xed\xc7\x59\x17\ +\x9b\xe6\x87\x4a\xd3\x72\xee\x09\x39\x48\xfb\xc4\x30\x1e\x01\xc2\ +\xaf\x57\x6b\x05\x5c\x9a\xda\x4f\x84\x19\x86\x30\x16\x19\x9f\x5e\ +\x56\xdf\xae\x63\x33\x09\x01\x87\xce\x65\x91\x16\x8b\xb5\xac\xb6\ +\x67\xd0\x68\x4e\xfa\xc4\x17\x33\x0e\x29\x15\x02\x02\xa1\xb0\x84\ +\x0b\x11\x81\xe2\x2d\x1f\x4f\xcd\xbe\xdc\x64\x27\xcf\xcf\x09\x70\ +\x1c\xa6\x30\x8f\x45\xb3\x91\xe9\x9f\x18\xc3\x02\xc4\xa9\x6b\xd4\ +\x53\xa4\x0e\xf0\xa8\x32\x63\xb8\xa6\x47\x7f\xf2\xcf\xb6\x43\xbf\ +\x3d\xc8\xcc\x6f\x58\xf6\x9e\x9c\x43\x47\xbb\xd7\xaa\x9b\x3b\x75\ +\x7e\x0a\xbe\x9f\xcc\xe1\x48\x11\x6f\xbf\xfd\x1c\x80\x41\xef\x3c\ +\x7c\xac\xc3\x4c\x66\x98\x16\x0c\x02\x4f\x5e\x3d\x1d\x1b\xb2\x50\ +\xa3\x09\x8c\x41\x08\xb8\xf4\xad\x3e\x4e\xd1\x33\xdc\xa6\xaf\x39\ +\x97\x77\xb5\x35\x36\xd2\x03\xa3\x11\x6a\xa5\x90\x20\x70\x99\x0b\ +\x8b\xc7\x34\x8e\x53\x45\x30\xd1\x9c\x1c\xe8\xa6\x21\x4b\xf1\x1d\ +\x0d\xc6\x20\x11\x94\xac\x11\x8a\xc4\xda\xdd\x6f\x58\x9a\x7c\x35\ +\xf3\x54\xdd\xe0\xa0\x11\x1b\x30\x05\x04\x88\x76\xae\xf0\xcf\x2d\ +\x6a\xa1\x46\x96\xc1\x7c\xee\x56\x87\xab\x23\xd3\xcb\xdd\x81\xcf\ +\x99\xc8\x57\x93\xb7\xb6\xbf\x05\x18\x00\xb3\x4c\x68\x8a\xf9\xd4\ +\xd4\xe6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x01\xa3\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd5\x04\x1c\x0b\x36\x39\xbb\x24\x9f\x47\x00\x00\x01\x30\x49\x44\ +\x41\x54\x38\xcb\x63\x60\xa0\x10\x30\x62\x13\x2c\xad\x35\xed\x67\ +\x60\xfa\x5a\x40\x48\x33\x13\x13\xc7\x5e\x16\xec\x32\x5f\x0b\x82\ +\x83\x02\x09\xda\xbe\x76\xdd\x7a\x67\x26\x6c\x12\xff\xff\x33\x7e\ +\x23\xd6\x0b\x2c\x04\x6c\xc0\x2a\xfe\xff\x1f\xc3\xbf\x90\x90\x40\ +\x26\x82\x06\x30\x30\x30\x30\x74\x37\x5e\xc3\x08\xa7\x92\x3a\xed\ +\xef\x0c\x0c\x0c\x1c\x0c\x0c\x0c\x0c\x4c\x64\x06\xfe\x3f\x78\x70\ +\x61\x8d\x1a\xc6\xff\x5c\x78\xa3\x0e\x49\x9e\x89\xd2\x74\x40\x56\ +\x2c\x20\xcb\xb3\x30\x30\x30\x30\x64\x15\x5a\x48\x32\xb3\xfc\x89\ +\xfd\xf1\xfd\xbb\x93\x80\xf0\x7f\x77\x06\x86\xff\x0c\xbf\xfe\x7c\ +\x86\x6b\xc0\x27\xcf\xc2\xc0\xc0\xc0\xf0\xf9\xd3\xa7\x3a\x35\x2d\ +\xb6\x0c\x13\x33\x55\x06\x7e\x5e\x75\x06\x7e\x6e\x65\x86\x7b\x4f\ +\xd7\x32\x88\x89\x73\x32\x10\x92\x67\x61\x60\x60\x60\x90\x90\x61\ +\xc8\xb0\xb7\xb7\x66\xf8\xf7\xef\x0f\x03\x33\x33\x3b\xc3\xdd\x27\ +\x6b\x18\x2e\x9d\x7f\xfd\xff\xcd\xeb\xff\x5b\xf1\xc9\xbf\x7a\xc1\ +\xd4\x00\x4f\x07\xf7\x1e\x9e\x67\xe0\xe0\x60\x61\xe0\xe7\x7b\xcb\ +\x70\xf3\xfa\x5b\x86\x77\x6f\xff\x5e\x3c\x7d\xec\x43\x17\x3e\xf9\ +\xb3\x27\xdf\xee\x87\x27\x92\xc4\x4c\xb5\xdb\x22\x62\x2c\x2a\x0c\ +\x0c\x0c\x0c\xb7\xaf\xff\x5c\xb4\x61\xd5\xdd\x78\xe4\x80\x43\x97\ +\x97\x57\x94\xa8\x98\xd8\x79\xf4\x39\xa5\xb1\xc8\x00\x00\xbd\x75\ +\x89\xf9\x6f\x29\x4a\x9e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x01\xe5\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x01\x77\x49\x44\x41\x54\x78\xda\x62\ +\xfc\xff\xff\x3f\x43\x71\xce\x9a\xff\x0c\x04\xc0\x8a\x75\xd5\x0c\ +\xcf\x9e\xdf\x62\x88\xf4\xb0\x67\x38\x75\xe3\x37\x83\xbf\x77\x21\ +\x43\xef\x94\x10\x46\x16\x7c\x9a\x37\x6e\xed\x67\xb8\xfb\xe0\x18\ +\x83\x94\xa4\x1a\x83\xbb\x8b\x07\x43\x66\xd6\x4e\x06\x53\x0b\x05\ +\x06\x46\x46\x46\xa0\x6c\x21\xd8\x62\x16\x7c\x1a\x95\x15\xac\x18\ +\xa6\xcd\x9c\xc8\x90\x99\x96\x87\xd3\x65\x2c\xd8\x34\x9b\x69\xb0\ +\x32\xcc\x9f\x7f\x8b\xc1\xd6\x41\x95\x90\xcf\x18\x98\xd0\x05\x40\ +\x36\x67\x96\xcf\x46\xd1\x7c\xfa\xc4\x03\x86\xa4\xb8\x7c\xa8\xd3\ +\x09\x18\x00\x02\x30\xcd\xd3\x67\x4d\x62\x50\x51\xb4\x66\x30\xb3\ +\x54\x64\xd8\xb9\x67\x07\x71\x5e\x80\x01\x69\x29\x75\x70\xa8\x83\ +\xc2\xc1\xcd\x29\x0d\x2c\x06\xe2\x13\x6d\x00\x48\x31\x48\xe3\x95\ +\xeb\x07\x18\x76\xed\x9b\x45\x7c\x18\x20\x03\x90\x46\x7b\x7d\x49\ +\x86\x53\xc7\xef\x33\x80\xd2\x0b\x08\xa3\x03\xc6\xff\xc7\x12\x51\ +\x44\x19\xad\xe6\x83\x15\x82\x02\x0c\xe4\xfc\x3b\xf7\x8f\xa2\x68\ +\x00\x05\x28\x28\x4c\x80\xfa\x10\x2e\xd8\xb0\xef\x1e\x83\x74\xf0\ +\x51\xb0\x66\x64\xf0\xfd\xe7\x1b\x86\xe9\xd3\xa7\xc3\xf9\xa0\x40\ +\x8d\x8c\x8c\x06\x1b\x0c\xb7\x70\x7d\x8b\xfd\xff\xec\xa9\xcf\xc1\ +\x29\x2d\x31\x29\x07\x2c\xc8\xc1\xc1\x0a\xb6\x05\xa4\x10\x14\xad\ +\xc8\x00\xec\xaa\x65\xea\x08\x03\x80\xf8\x3f\xc8\x8f\xa0\x24\x8a\ +\xe2\x15\xa0\x17\x60\xce\x24\x29\x21\x81\x40\x94\xa7\x03\x38\xfd\ +\x13\x03\x98\x80\x5e\x00\x3b\x17\x94\x60\x40\x1a\x41\x36\x1f\xbc\ +\xf8\x9c\xe1\xe9\x5a\x6b\xa2\x0c\x60\x04\x47\xcd\xf1\xa4\xff\xa0\ +\x80\x04\x81\x00\x27\x25\x06\xa2\x81\xe5\x3c\x46\x80\x00\x03\x00\ +\x94\x65\x92\x1a\xa6\xe6\x94\x0e\x00\x00\x00\x00\x49\x45\x4e\x44\ +\xae\x42\x60\x82\ +\x00\x00\x04\x7f\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ +\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x11\x00\x00\ +\x0b\x11\x01\x7f\x64\x5f\x91\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd5\x09\x1a\x0b\x18\x25\x79\xd9\x51\x49\x00\x00\x04\x0c\x49\x44\ +\x41\x54\x38\xcb\xa5\x95\x7f\x4c\x94\x75\x1c\xc7\x5f\xcf\x71\x02\ +\x29\xe0\xa1\x96\x72\x84\x88\xcd\x69\x56\xc2\x09\xa3\x0d\xee\x16\ +\x85\xb8\x16\x0a\xce\x65\x69\xb2\xa6\x16\xcb\x6a\xfd\xe1\x58\x0b\ +\x19\xee\xdb\x93\xc4\x51\xff\xd0\x06\xe4\xc8\xd6\x9a\x63\x2d\xcc\ +\x2d\x73\xda\x26\xb1\x69\x2d\xd8\x94\x1f\x67\x3b\xa9\x43\x25\x76\ +\xbb\x38\x90\x1e\x91\x2e\x40\xb8\x3b\x9e\xa7\x3f\xe4\xb9\x1d\xe7\ +\x41\x6d\x7d\xb7\x67\x7b\x3e\xcf\xbe\xcf\x6b\xef\xef\xe7\xf3\x7e\ +\x3f\x8f\x44\xc4\x12\x42\x08\xe0\xfd\xb9\xf2\x3d\xa0\x57\x96\xe5\ +\x76\xfe\xef\x12\x42\x68\xa3\xb7\x47\xb4\x99\x99\x69\xcd\xe5\xfa\ +\x4d\x13\x42\x68\x15\x15\x15\xc5\x80\xf4\x2f\xaf\x4a\x80\x41\x2f\ +\x0c\x51\x36\x98\x9b\x3e\x3d\x81\xa6\xaa\xa4\x9a\xcd\xec\xdb\xb7\ +\x97\x84\x84\x84\xf3\x80\xb6\x10\x3c\xa7\xbc\x25\xe5\x83\x13\xe7\ +\xd4\x9c\xf2\x96\x53\x91\x60\x49\x08\x91\x05\x20\xcb\xf2\x30\x60\ +\xb6\xd7\x7d\xc4\xcc\xf4\x3d\x32\x32\x32\x22\x55\x45\x42\xb3\x00\ +\xef\xb1\xc3\x3b\x31\x2f\x67\x4d\x4e\x79\x4b\xbb\x0e\x96\xaa\xab\ +\xab\x65\xc0\x21\x84\x38\xae\xc3\xad\x56\x2b\x92\xf4\xc0\x81\xd4\ +\x28\x82\x1d\x5d\x9f\xed\xa7\xa7\xa7\x87\x83\xf9\xcb\x0a\x2d\xe9\ +\xf1\x85\x00\x46\x60\x49\x4c\x4c\xcc\xb1\x37\x0f\x97\x63\x88\x89\ +\x7d\x17\xa8\xde\xb2\x65\x0b\x9b\x36\x6d\x44\xd3\x54\x24\x49\xc2\ +\x3f\x33\x79\x45\x08\x91\x25\xcb\xf2\xb5\x28\x6a\x19\x18\x18\xc0\ +\xe3\xf1\xf0\xe1\xf7\x93\x00\xe6\xd0\xd1\x9a\x9b\x9b\x9d\xa5\x25\ +\x3b\x9f\x5c\xba\xf4\x21\x02\x7e\x3f\x9a\xa6\xa1\x69\x5a\x08\x90\ +\x64\x4a\xa6\xb6\xd6\x0e\x60\x9e\x6b\x95\x0e\x75\x74\x36\xbd\x44\ +\xde\xdb\xa7\xf5\xad\x96\xee\x93\x65\xd7\x42\x60\x21\x44\x4a\x7c\ +\x7c\xfc\xaf\xcf\x6f\x2f\x34\x3d\xfe\xc4\x53\x48\x92\x14\x9a\x95\ +\x6f\xfc\xee\x7d\xf8\x72\x13\xb5\xf6\x3a\x00\xf3\x05\xef\x86\xd5\ +\x80\xe3\x6a\xf3\x2b\xc1\xdc\x37\xbe\x32\x02\x45\xdd\x27\xcb\xda\ +\xa3\x0e\x43\x08\x91\x95\x9e\x9e\xfe\xb9\xdb\xed\xce\xd6\x9f\xe5\ +\xe6\xe6\x06\xb6\x6d\x2b\x5c\xf2\xf7\x5f\xe3\x68\x9a\xc6\xb2\xc4\ +\x24\x5a\x5b\x5b\x69\xea\x8c\xe5\xe7\x86\x17\xb1\xbe\x73\x66\x9e\ +\xca\x70\xae\xb4\x88\x9f\x53\x00\x1b\xd0\x5a\x55\x75\x94\xb1\x3b\ +\x0a\xd7\x6f\xfe\xc1\xc7\x67\xdd\x7c\x7b\xbc\x98\x82\x23\x67\x17\ +\x84\x02\x9a\xf4\x1f\x02\x93\x05\x38\xd6\x5a\x8a\x39\x71\xe1\x06\ +\xdf\x54\xe5\x53\xf5\x45\x37\x25\x9b\x03\xb8\x5c\xfd\x96\xb0\x81\ +\xea\xfd\x8b\xee\xcb\x70\xd3\x2b\x43\x1e\xaf\x5e\xaf\x4a\x4d\xe3\ +\x72\xfd\x2e\x0e\xd4\xb5\xb1\xcb\x12\xcf\xcb\x25\x45\xd4\xd4\xd4\ +\xe8\x03\x1d\x05\x66\x17\x35\x7c\x38\x74\xcf\xf6\x8d\x64\x6e\x5e\ +\x8f\xa2\x8c\xf1\x49\xcb\x15\x56\xa5\xa6\x51\xb1\x23\x05\xb3\xc9\ +\xc8\xfa\x8c\x75\xa4\x3e\x9a\x86\x2c\xcb\x00\x96\x48\x2b\x1a\x16\ +\x83\xbe\x5a\x6a\x45\x9d\x50\x48\x34\x99\x28\xb4\x24\xa1\x0c\x79\ +\x70\xf5\xfe\x84\xcd\x66\x23\x3e\x2e\x96\x3b\x7f\xde\xe6\xfe\x37\ +\x0b\x87\x9e\xdc\xa8\x60\x1d\xfa\xfa\xee\x4c\x0e\xed\x7e\x86\xb6\ +\x8b\x3f\xf0\x63\x4f\x3f\x18\x8c\xcc\x06\x83\x21\xaf\xca\xb2\xcc\ +\xca\x87\x57\x23\x49\xd2\x82\x70\x43\x24\xf4\xe8\x6b\x56\xf6\x17\ +\xe7\x71\xfa\xbb\x76\xba\xfa\x06\xc9\xb3\xd9\x70\xb9\x6e\x11\xf0\ +\x4f\x03\xe0\xf3\xf9\x14\xbf\xdf\x9f\x2d\xcb\x32\x2b\x56\x3d\x02\ +\x10\x82\xc7\xc5\xc5\x85\xe0\x06\x3d\x45\xca\x90\xc7\x2b\xbf\xf5\ +\x2c\x7b\xb6\x67\x73\xea\xcc\x45\x06\x3d\x5e\x8a\x8a\x4b\x70\xb9\ +\x6e\xe1\x75\xdf\xa4\xa3\x5f\xc5\x18\x1c\xdd\x50\x5f\x5f\x7f\xd7\ +\x6e\xb7\xdf\x18\x19\x19\xb1\xea\xca\x67\xfc\x7e\x0e\x1e\x3c\x40\ +\x65\x65\x25\x80\x23\x04\x56\x86\x3c\x8e\x23\x65\x4f\x53\x5a\x90\ +\x49\xeb\xb9\xcb\x0c\x7a\xbc\xd8\x9e\x2b\x9c\x07\x0d\x8c\xf6\x5a\ +\xa6\x14\x77\x12\xb0\x02\x58\xe9\x74\x3a\x03\x4e\xa7\xb3\x58\x96\ +\x65\xcc\xa9\x69\x34\x36\x36\xe2\xf3\xf9\x42\x9d\x30\xea\x77\xe9\ +\xeb\xd2\x98\x55\x35\x46\x87\x06\x1f\x80\x4e\xfc\xde\x56\xa0\xb8\ +\x2e\x05\xe6\x84\x24\x03\x86\xce\xce\xce\x20\x30\x3c\x31\x31\xb1\ +\xb7\xa1\xa1\xe1\xeb\xb1\xb1\x31\x54\x55\xbd\x1a\x08\x04\xec\xa1\ +\xe4\xad\x7b\xc1\xae\xed\xc8\x37\x63\xc9\xb6\xf0\x58\x8a\x89\x5f\ +\xfa\x6e\x71\xb5\xab\x8b\x8e\x7e\x95\x29\xf7\xa5\xfc\xd1\xbe\x36\ +\x25\x62\x26\x6a\x98\x55\x67\x81\x19\x60\x12\x98\x06\x82\xc0\xac\ +\x11\x60\xc5\x9a\x94\xad\xe7\x3b\xbc\xbd\x7a\x83\xee\x4d\x4d\xd0\ +\xd1\xaf\x12\x67\x98\x2c\x50\x93\x53\xc7\x01\x25\xcc\xf7\x3a\x50\ +\xff\xa3\xa8\x73\xf0\xa0\x0e\x9d\x17\xe9\xad\x87\xbe\xb4\x8c\x8d\ +\x0c\xf7\xea\x75\x42\x62\xec\xda\xeb\xad\x15\x23\xe1\x31\x0d\x83\ +\x4a\x51\x62\xac\xce\x5d\x1a\xa0\xfd\x03\x8c\xf6\xde\xf1\x62\xa0\ +\xea\x2a\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x02\x61\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x01\xf3\x49\x44\x41\x54\x78\xda\x94\ +\x53\x4d\x6b\x13\x51\x14\x3d\x77\xe6\x75\xe2\x84\x04\x1b\x13\x37\ +\xa2\x66\x51\x10\xdb\x66\x61\x8b\x88\x75\xad\x1b\xc5\x45\x71\x21\ +\xdd\x89\x0b\x7f\x80\xb8\xd5\x90\xc1\x45\xbb\x29\xe8\x42\x08\xfe\ +\x02\x83\xe8\x42\x24\x8a\x62\x15\xa4\xea\x26\x62\xc5\x80\xa5\x2d\ +\x18\x43\x48\x85\x68\x0c\x3a\x9d\x96\x24\xb7\xf3\xe6\x23\x99\xa4\ +\x1f\x90\x33\xcc\x3c\xe6\xbd\x77\xcf\x3d\xe7\xde\xf7\x28\x9b\xcd\ +\x3e\xae\x56\xab\x57\x30\x18\xae\xa6\xd3\xe9\x1c\x33\x03\x99\x4c\ +\x86\x07\x85\x8c\x91\x2c\x92\x40\xf8\x94\xb5\x5a\xad\x43\x4f\xf6\ +\xc3\x24\xc7\x00\xc8\xfd\x1c\x8a\xc5\x7a\xa4\x88\x7e\x6d\x44\xe4\ +\x8d\x2e\x91\x9b\xc9\x27\xe3\x1d\x5e\x44\x30\x83\x1f\x20\xa3\x89\ +\x03\xf3\xe4\x29\x60\xda\x9b\x80\x82\x0a\xd8\x9b\x90\xc1\xec\xc9\ +\x71\x16\xf7\x53\xe0\xe4\x27\x74\xf6\x93\xab\xc7\x8f\x65\xf4\x17\ +\x65\x17\x0b\xec\x6c\x23\x74\xcd\xb8\xc5\xdc\xb0\x1a\x78\xfd\x76\ +\x1e\x42\xdb\x82\xa2\x08\x44\xe2\x65\xdc\x7b\x78\x7e\x31\x3d\x77\ +\xa6\xd4\x25\x60\x57\x3e\x05\xfc\xf8\x09\xff\xd6\xd7\xc1\x4a\x05\ +\x27\x47\xc7\x61\x9a\x26\x8e\x1d\x3f\x81\xb0\xae\x4f\x2d\x7e\xf8\ +\x38\x25\x82\x06\x7a\x0a\xea\xf5\xb1\xdd\x66\xb4\xda\x4d\x68\x9a\ +\xc0\xf2\xf7\x92\xfd\xaf\xa1\x5c\x2e\x23\x99\x8c\xfd\xd7\x75\x5d\ +\x51\x3a\x02\xc8\x97\xec\xd7\x82\x9d\x60\x09\x55\x55\x61\x59\x9b\ +\x88\x86\x53\x98\x99\x7e\x80\x8d\x3f\xa7\xb1\xb2\xb6\xfa\xae\xd5\ +\x6e\xe9\x4a\x6f\x49\xd8\x29\x34\x07\xce\x83\x44\x34\x72\xd8\xf6\ +\x4e\xce\xeb\x43\xd7\x43\x4d\x99\x70\x47\x1b\xdd\x7e\x73\xa7\xe5\ +\xeb\xbf\x7e\x60\xe9\x5b\x1e\x43\x21\x5b\x17\x69\xce\xdc\x3f\xb3\ +\x84\x28\x68\x44\x88\x40\x17\x62\x7d\x47\x54\x22\xf7\xe4\x2e\xea\ +\xe6\x7b\x4c\x4e\x4e\xe0\x77\x7d\x08\xd8\x54\xf1\x2c\x7f\x1f\x17\ +\x2e\x03\x07\x87\x4f\x8d\x17\x0a\x9f\x1a\x22\x91\x48\x3c\x37\x0c\ +\xe3\xd2\x6e\x57\x8e\x43\x0b\x18\x4d\x85\x61\x5a\x15\xbc\x79\xf9\ +\x13\x4a\xb3\x88\xf8\xd1\x02\xce\x9e\x1b\xc1\xca\x6a\x11\x0b\xaf\ +\x2a\x06\x39\x57\x72\x0f\xdc\xba\x33\x76\x31\x74\x40\xb9\x6e\xf7\ +\xe2\x48\xf1\x8b\x65\x3c\x7d\xb4\xf6\xe2\xf6\x6c\xea\x86\xaa\xf2\ +\xb5\x46\x9d\x8a\x5f\x3f\x6f\xdd\xdc\x16\x60\x00\xf7\x95\xd5\x0e\ +\xdc\xcd\xd4\x8e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\ +\x00\x00\x06\x1b\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x05\xad\x49\x44\x41\x54\x78\xda\x8c\ +\x55\x79\x4c\x14\x57\x18\xff\xcd\xb1\xb3\xb3\x17\x94\x65\x59\x91\ +\x43\x16\x15\x50\x51\x0e\x0d\x5e\xa0\x6d\x09\x50\x69\xaa\x35\xfa\ +\x8f\x69\x8d\x89\xb5\xd2\xd6\xd8\xcb\x68\x5b\x13\xd3\x36\xbd\x6b\ +\x6a\x13\xa5\xd8\x3f\xb4\xa6\xb5\x31\x92\x18\x4d\xda\x34\x4a\xaa\ +\x22\xa8\x1c\x15\x44\x91\xa3\x20\xf7\xb2\xb0\xba\xc0\xde\xb3\xc7\ +\xec\x2e\xd3\xb7\x63\x35\xda\xa4\xea\x9b\xcc\xbc\x37\xdf\x7c\xef\ +\xf7\xbe\xef\xfb\xfd\xde\x1b\x4a\x92\x24\xdc\x6f\x6f\x7f\xf5\xd1\ +\x4f\x23\xde\xa4\xf5\x13\x76\x51\x8f\x87\x9a\x4a\x21\x09\x46\xad\ +\xa7\x7b\x86\xe6\xef\xf7\x0f\xee\x3b\xd5\x80\xa7\x68\xd4\x7d\xe0\ +\xc3\xc7\x77\xe5\x9d\xbe\x91\x7e\xcd\x94\x39\x3f\x98\x36\xc3\x48\ +\x7b\x42\x34\x9f\x1c\xc3\xd3\xe3\x1e\x11\x76\x7f\x10\xce\xde\x0b\ +\x83\x3e\x21\xa0\x4c\x8f\xeb\xf9\xb0\xea\xd3\x13\x27\x9e\x0a\x38\ +\x0a\x7a\xa1\x67\xe6\x69\xe3\xfc\x92\x59\x03\xdd\x6d\x74\x48\x14\ +\xa9\xb0\x18\xa2\xb4\x71\x7a\xa4\xcc\xc9\x46\x1c\xcf\xc1\x1f\x91\ +\x30\xd4\xd7\x05\xc1\x36\xe2\x5f\x34\xa3\x6d\x63\xe5\xc7\xd5\xe7\ +\x1e\x07\x4c\x47\x1f\x7f\xf5\xf1\xdf\xa6\x18\xd8\x61\x6f\xff\x9f\ +\xbd\x4b\x13\x9a\x37\xd7\x1d\x78\x8b\x5e\x95\xd6\x52\x1e\x72\x8d\ +\xb9\x2d\x03\x9d\x92\xcd\xed\x81\x47\xf0\x22\xce\x38\x13\x1a\x63\ +\xaa\xb2\x63\x22\xb7\x7a\xcf\x17\xeb\x34\x4f\x04\x76\xf8\x54\x73\ +\x99\x88\xd7\xb5\x3a\xc3\x52\xfa\xe5\xae\x23\x27\xa3\xb6\xaf\x77\ +\xff\x5a\x53\x90\x6a\xf9\xcc\xeb\x70\x50\x82\xdb\x0e\x31\xe0\x93\ +\x27\x18\x53\x33\xe8\x04\x8d\x68\x9e\x14\xd3\x0f\x3f\x11\x38\x86\ +\x77\x76\x69\xfd\x13\xdd\x15\x9b\x2b\xad\x0f\x7f\xfc\x66\x77\xe5\ +\x81\x48\x48\x84\x82\xe3\xe5\xf7\x48\x38\x8c\x80\xe0\x86\x41\x1f\ +\xbf\xd0\x2b\xe8\xb6\x3c\x0e\x98\xad\xae\xae\x46\x6a\x8c\xe7\xdc\ +\xdd\x01\xfc\x58\x51\x51\x01\x51\x14\x51\x58\x58\x68\xda\xbe\x7d\ +\xfb\xf0\xff\x4d\x0a\xc4\x2f\x83\x65\xb0\xfe\x11\x5b\x6d\x6d\x2d\ +\xec\x76\x3b\x74\x3a\x1d\x68\x9a\x06\x5b\x56\x56\x86\xa6\xcf\xaf\ +\xf6\x65\x67\x67\xc8\x0e\x3e\x9f\x0f\x05\x05\x05\x45\x57\x1a\x1b\ +\x9b\xf6\xed\xf9\x2e\x11\x8b\x56\xde\x03\xf3\x0b\xe0\x55\xf7\xca\ +\xca\x28\x38\xb9\x7f\x75\x4d\x9e\x94\x9a\xb7\xe6\x50\x79\x79\xf9\ +\xbb\xc5\xc5\xc5\x8f\x96\x42\x10\x84\x68\x3f\x27\x18\x0c\xca\xd1\ +\x52\x14\xb5\xb5\xae\xae\xf6\xe8\x07\xc7\x1b\x13\xc5\x7f\x41\xff\ +\xdb\xa4\xe9\x69\xb9\x37\x67\xbe\x86\x7a\xa7\xe1\x1d\x95\x5a\x3d\ +\x49\xe6\xee\xb0\xd9\x6c\xd4\x03\xb9\x99\xcd\x66\x9c\x20\xb2\x64\ +\x59\x16\x0c\xcb\x6c\xbd\x5a\xdf\x7b\xac\xaf\x6f\x08\x9a\xa2\x52\ +\xcc\x2b\x78\x56\x76\x52\x2a\x79\xdc\x1d\x1f\x06\x45\x33\xf2\x98\ +\x21\xbe\x14\x45\x93\x94\x19\xdc\x6e\x6b\x40\xbe\xe7\x12\xd6\x6e\ +\x79\x0f\xab\x8b\x56\xec\xd4\x68\xb4\x55\x0f\xc8\x8b\xd6\x84\xa2\ +\xa4\x6d\x17\xcf\x37\x1f\xbb\x63\xf5\x61\xf5\xca\x4d\x58\x32\x6d\ +\x40\x7f\x7b\x93\x0c\x6c\xb5\x0c\x92\x30\x25\x42\x5e\x48\x2e\x89\ +\xc7\xe5\x90\xed\x83\x9d\x2d\x38\xb7\xa6\x01\xcb\x53\x5c\x38\x75\ +\x64\x3f\xea\x2e\x37\xff\x40\xcc\x3b\xc9\xad\xa6\x49\xea\x24\x6e\ +\xec\x6c\x6c\xb8\x71\xd4\x76\x07\x48\x9a\x69\x42\x73\xeb\x19\x58\ +\xc6\xbb\x91\xe3\xd7\xa1\xa7\xa5\x1e\xfa\x84\x24\x4c\xdf\xdf\xfa\ +\xa4\x8f\x79\x26\x1e\xfd\x37\x9b\x71\x28\xa7\x06\x55\x67\x06\x10\ +\x0c\xfb\x51\x36\x3f\x80\xaa\xef\xf7\xe3\x6c\xcd\xf9\x4a\x87\xc3\ +\x91\x40\xf3\x3c\xbf\xf7\x7a\x4b\x6f\xa5\x79\x44\xc4\xf2\xa5\x6b\ +\xe1\x74\xdd\x45\x7c\x5c\x32\x21\xd1\x0d\x25\xa7\xc6\x3c\x2f\xfb\ +\x00\x9c\x44\x01\x6d\xac\x5e\x06\x6d\xda\x74\x03\x93\x53\x7e\x70\ +\xb1\x1c\xbc\x11\x1a\xab\x16\xc4\x20\xdf\x68\x47\xdd\xef\xbf\x60\ +\x68\x70\x70\x07\x43\x14\x70\xe5\xe2\xf9\x0e\x24\x18\x66\x81\xa1\ +\x58\xd8\x26\x87\xb0\x60\xfe\x73\x08\x04\x05\x70\x0a\x25\xa9\x2b\ +\x05\x67\x4f\x1b\xee\x86\x03\x48\xc9\x58\x28\xa7\xff\xa6\xee\x14\ +\x32\x52\x74\x18\x19\xf3\x60\x5e\x86\x1e\x0a\x05\x83\x81\x61\x17\ +\xb2\xd2\x62\xd1\x6f\x0d\x20\xc0\xe8\x0b\xe9\x2b\x97\xdb\xc2\x21\ +\x22\x7c\xa5\x52\x45\x6e\x35\x26\x27\xcd\xe8\xed\x6b\x04\xcf\x6b\ +\x61\xb6\x74\x20\x2e\x2e\x09\x6a\x55\x0c\xb2\x04\x8d\x1c\xf9\x2b\ +\xd4\xcf\xd8\x50\x94\x8c\x5b\xb7\xed\x98\x12\xc2\x10\xbd\x22\x4e\ +\xfe\xd1\x8f\xb0\x82\x45\x41\x96\x06\x76\xeb\x28\x6e\xb6\x77\x81\ +\xe6\x38\x85\xcc\x30\x43\x2b\x10\x8e\x84\x60\x32\xe5\x63\x76\xda\ +\x62\x30\x0c\x8b\xcc\xb9\x2b\xa0\xd3\xc4\xc3\xed\x99\x24\x04\x53\ +\xb8\xb0\xf1\x0e\xdc\x82\x08\x7f\x68\x1a\x8b\x16\x27\x22\x27\x4b\ +\x0f\x0d\xcf\x62\xe7\x86\x4c\xf0\x52\x54\xeb\x61\xe2\xaf\x22\x3b\ +\x95\x03\x93\x97\xb3\xea\x13\xcb\xe8\x38\x99\x46\x61\x78\xf4\x16\ +\x0a\x16\xbf\x0c\xa7\xd3\x0a\x87\xc3\x8a\x20\x29\x47\x77\x4f\x3d\ +\x24\x59\x11\x7e\x08\x8e\x6e\x30\xf0\xe1\x6a\xe7\x14\x6c\x53\x01\ +\xb0\x84\xcb\x9e\x21\x27\xd6\x95\xcf\x41\x27\xc9\xe0\x6c\x93\x05\ +\x36\x37\xa0\x49\xcc\x02\x1b\xe5\x5a\xc9\x6b\x90\x9c\xbc\x40\x8e\ +\x7c\xca\x6e\x86\x4e\xab\x27\xc4\x8c\x22\x36\x76\x06\xb4\xda\x78\ +\x42\x1a\x03\xaf\xcf\x45\x3c\x3b\xf1\xe2\xb2\x64\x78\xfd\x11\x18\ +\xe2\x78\x0c\x58\x3c\xe0\x35\x1c\x82\x24\x0b\x87\x33\x88\xf5\xc5\ +\x26\x9c\xbc\x68\x27\x2a\x99\x06\xad\x56\x53\x52\x98\xe8\xd3\x94\ +\x96\x43\xea\x39\x13\xd7\xae\xff\x86\x91\xd1\x4e\x48\xe4\xea\xeb\ +\x6f\x46\x7b\x47\x0d\x1a\xaf\x9d\x42\x4a\x52\x36\x5e\x7f\x29\x17\ +\x63\x93\x5e\xbc\x71\xb0\x15\x67\x1a\xc7\x70\xa5\x73\x82\xf0\xc2\ +\x60\x6f\x55\x1b\x5c\xbe\x10\x72\x73\x8d\xa4\x0c\x8c\x9c\x21\xad\ +\xd5\xd1\x6c\x84\xac\x10\x95\xd9\xd8\x78\x0f\x12\x0d\xb3\xa3\xdb\ +\x1a\x0b\xb2\x56\xc3\x34\x2b\x8f\x6c\x5f\x09\xe9\x69\xb9\x08\x85\ +\x83\xb0\x4e\x09\x98\x9b\xac\x43\x66\x92\x0e\xe9\x06\x1e\xdb\xd6\ +\x65\x60\x56\x92\x96\x8c\x55\xa0\x18\x0a\x3d\xed\x77\x40\xfe\x32\ +\x10\xc9\x89\xc8\x94\x94\x94\x66\x5b\xc6\x46\xb2\x9d\x4e\x2f\x01\ +\x58\x88\xb9\x73\x0a\xc8\x8a\x64\x21\xa7\x05\x0a\x96\x43\x40\xf4\ +\xc0\x90\x90\x46\x16\x9b\x46\x6e\x92\x15\x42\xd0\x45\xe4\xa5\x40\ +\x94\xf4\x50\x18\x08\x7a\x23\x78\x76\x49\x32\x0a\x17\x19\x71\xae\ +\xd9\x86\x71\x8f\x1a\xf9\x45\x2f\x80\x55\x2a\xb9\x3d\xf9\x8b\xb3\ +\xca\x9a\x1b\x46\x95\x1e\xb7\x4d\xa9\x56\x75\x49\x44\xc3\x54\x28\ +\x14\xa0\x38\x4e\x25\x31\x0c\x87\x81\xfe\x56\x8a\xc8\x6f\xfa\x92\ +\xd6\x1a\x19\x9f\x70\xb0\x11\x92\x05\x45\x05\x89\xce\x05\x72\x1e\ +\x49\x38\xdb\x3a\x05\x8e\xa5\x61\xf7\x84\x24\x9b\x72\x9e\xb7\xb4\ +\xe4\x79\xfc\x23\xc0\x00\x88\x85\x8e\xc7\x63\xbe\xeb\xdd\x00\x00\ +\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x01\x24\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\ +\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd6\x01\x0b\x0f\x3a\x39\x93\x22\xea\x6f\x00\x00\x00\xb1\x49\x44\ +\x41\x54\x38\xcb\xed\x92\xb1\x0d\xc2\x40\x0c\x45\x5f\x20\x08\xd8\ +\x80\x9a\x15\xc8\x08\x8c\x41\x4b\xcb\x08\x88\x01\x58\x20\xa2\x65\ +\x0e\x58\x20\x19\x82\x9a\x16\x01\x51\x62\x9b\x82\x08\xa1\x60\x10\ +\xd7\xdf\x93\x7e\xe3\xb3\xfe\x7d\xd9\x86\x48\x24\xf2\x95\xa4\x5b\ +\xc8\x96\xfb\x02\x98\x05\xfa\x94\xc5\x6e\x91\xbd\x17\x52\xa7\x69\ +\xb6\x5d\xcd\xa9\xd5\x48\x80\x5a\xcc\x75\x32\x7b\x2a\x01\xd6\xf9\ +\xe1\x23\x88\x67\xcc\xa5\x12\x4e\xe7\x2b\x66\xa0\x6a\xa8\x81\xa8\ +\x21\x0a\x8d\x82\x88\xd1\xa8\xa1\x0a\xd3\xc9\xd8\xfd\xd8\x33\x2e\ +\x37\xf9\x31\x78\x14\xf1\xaa\xfe\x3f\xb7\x0e\xfd\x76\x0f\x3d\xe7\ +\x4d\x80\x1a\xb0\x10\xe3\x14\x18\xb5\x1a\x02\xde\xea\x2b\xe0\x0e\ +\xdc\x5a\x49\x68\xe2\x81\xd3\x97\x00\xcd\xaf\xc4\x91\x17\x0f\xaf\ +\x51\x3c\xde\x24\x6a\xd1\x4b\x00\x00\x00\x00\x49\x45\x4e\x44\xae\ +\x42\x60\x82\ +\x00\x00\x01\x5b\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x00\xed\x49\x44\x41\x54\x78\xda\x62\ +\xfc\xff\xff\x3f\x03\x2d\x00\x13\x03\x8d\xc0\xa8\xc1\xb4\x37\x98\ +\x68\x70\xdf\x49\xae\x1d\x88\xff\x83\x68\xaa\x1a\xfc\x28\xde\xf0\ +\x3f\x84\x36\xfa\x4f\x51\x50\x3c\xad\x75\x6d\x7f\x5a\xeb\xf6\x1f\ +\x44\x83\xf8\xcc\x72\xa2\x0c\x10\x5a\x18\x2a\xef\x06\x94\x77\xfd\ +\x0f\xa2\x49\x32\x98\x59\x4e\xa4\x42\xba\x79\x17\x23\x88\x06\xf3\ +\x65\x85\x60\xe2\x10\x5a\x56\x18\x28\xbf\x1b\x28\x2f\x54\x41\xaa\ +\xc1\x68\x34\xaa\x8b\x99\xe5\x61\x16\x88\x62\xd5\xcf\xf2\xee\x5a\ +\x03\xb6\x30\x0b\x84\x5b\x20\x2b\x8c\x6a\xa0\xac\x08\xba\x78\x07\ +\x36\x33\x58\x84\xb4\x1a\x18\x91\x05\x5e\xef\xc8\x69\x67\x60\x64\ +\x58\xcf\xf0\x9f\xb1\x03\xc4\xff\xfb\xe8\x0d\x03\x0a\xfd\xf8\x2d\ +\x94\x0f\xa1\x81\xfa\x2b\x81\x54\x25\x86\xc1\xe8\x02\xa2\x1e\x53\ +\x50\x14\xc2\x0c\x40\xd0\xa8\x16\x91\x9d\x41\xfe\x3e\x7e\x83\x4a\ +\xc3\x2c\x78\x4c\xa9\xc1\x8f\xde\x74\x3c\x4a\x30\xfc\x0f\x0c\x82\ +\x0e\xa8\x81\x40\xbe\xd1\x7f\x10\x8d\x4f\x1f\xe3\x68\x79\x3c\x6a\ +\x30\x06\x00\x08\x30\x00\x03\x2d\x6b\x8d\x47\xb8\x91\x60\x00\x00\ +\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\x00\x00\x01\xf2\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\ +\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd5\x0b\x0a\x12\x39\x0d\xf9\xdd\x70\x50\x00\x00\x01\x7f\x49\x44\ +\x41\x54\x38\xcb\xa5\x91\x4d\x88\x52\x51\x18\x86\x9f\x63\x2a\xfe\ +\x40\xa6\x8b\x10\x5a\x04\x41\xb4\x0e\x82\x99\x20\x9a\xe5\x2c\xe3\ +\x62\x11\xb4\xa9\x88\x20\x88\xfe\x98\xdd\x6c\x66\xb6\xb3\x08\xa2\ +\x5d\x50\x33\xce\x2a\x44\xa4\x65\x49\x50\xb6\x6c\x17\x18\x46\x9b\ +\x88\x22\x28\x05\x0b\xb1\x7b\x8f\x47\xcf\xfd\x66\x71\xed\x0a\xe2\ +\x05\xcd\x97\x0f\x0e\x9c\xc3\xf7\xbc\x2f\xef\x51\x97\x2e\x97\xb6\ +\x8a\xc5\xe2\x36\x53\x32\xc6\x04\xe7\xc0\xdc\xda\xdb\xdd\x7f\x42\ +\x84\xd4\x9d\x7b\xb7\xe5\xfa\xd5\x1b\x33\x1f\xb5\xf6\x78\xb6\xf7\ +\x94\x5e\xaf\x77\xa5\x5a\xa9\x3d\x8f\x04\x94\x9c\x8b\xb4\x3e\xb5\ +\xa2\x4c\x78\xdb\x78\x33\x7d\xf5\xa8\x5a\xa9\x3d\x00\x88\x03\xa4\ +\xd3\x19\x8e\xe4\xf2\x91\x00\xe7\x42\x29\x70\x53\x0a\xa5\x14\xb5\ +\x17\xd5\xfb\x40\x00\x30\xc6\xe0\x79\x2e\xaf\x3f\xf6\x69\x76\x32\ +\xcc\xa5\xc3\x0e\x67\x6e\x3a\x52\x48\xe9\xcf\x61\x82\x66\x27\xc3\ +\xe3\x8d\x75\xb4\xb1\x73\x31\x52\xc9\x43\xdc\x7d\x58\x3f\x15\x07\ +\xf0\x3c\x17\x80\x9f\xbf\x35\x5f\xda\x7f\xe7\x02\x9c\x38\x9a\x05\ +\x20\xa6\xb5\x26\x9d\x9e\x33\xfa\x0c\xc5\x5c\xd7\x0d\x13\xfc\x17\ +\xe0\x5f\x07\x4b\x01\x16\x4d\x60\xad\x8f\x1e\x06\x65\x87\xbf\x90\ +\x88\xf9\x08\x20\x22\x28\xa5\x10\x11\x44\xc0\x17\xc1\x5a\x61\x68\ +\x7d\xcc\x48\x18\x8c\x2c\x43\x2b\xe4\xb2\xc9\x09\xc0\xf3\x5c\x8e\ +\xe7\x06\x74\xfb\x86\x1f\x5d\x0f\x44\xe1\x23\x8c\x07\x11\x10\x04\ +\x91\x31\x18\x18\x59\x99\x00\x7e\x75\xda\x9c\x3e\x7b\x8e\x0f\x5f\ +\xff\x8c\x97\x02\x77\x11\xf0\x11\x04\x05\x22\x61\xaa\x95\x93\x05\ +\xea\x2f\x5f\x91\xd7\xdf\xcb\xea\xfc\xb5\x9d\x86\x9b\x38\xb6\xb6\ +\x68\x79\xd9\xe1\xb7\xf7\xef\xca\x9b\xab\x2c\xab\x03\xc2\x87\xb4\ +\xca\xa7\xb0\xe2\xf8\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ +\x82\ +\x00\x00\x03\x12\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x02\xa4\x49\x44\x41\x54\x78\xda\xac\ +\x55\x3b\x6f\x13\x41\x10\x9e\x1d\x4e\x88\xca\xb2\x0c\x12\x05\x75\ +\xda\x40\x41\x5c\xb9\x22\xe0\x28\x05\xb1\x14\x84\x28\xf9\x01\xe9\ +\xc2\x4b\x44\xb6\x8c\x93\x60\x47\x48\x51\xc0\xa1\x82\x02\xa5\x44\ +\x08\xa4\x40\x91\x02\xb9\x8a\x29\x8c\x69\x63\x1a\x68\x2c\x21\x37\ +\xd8\x9d\xdf\x8f\x65\x67\x5f\xe7\xf5\x9d\x10\x12\x39\x69\x6e\x1f\ +\x37\xfb\xed\xb7\xdf\xcc\xec\x31\x00\xb8\x28\x2c\x73\xfb\xce\xad\ +\x35\x38\x85\xe7\xdd\xdb\xf7\xaf\x45\xf3\x86\x89\xd7\xcb\x7a\xbd\ +\xbe\x16\x8d\x46\x1d\x07\xc6\xd8\x3f\xf7\x4d\x3b\x1e\x8f\xa1\xd1\ +\x68\xc0\xdc\xdc\xdc\x27\x8f\x98\x46\x22\x11\x68\xb5\x5a\xe4\x01\ +\x4c\x3b\x32\xb5\x42\x2d\x12\x86\x21\x7d\xdf\x50\xb6\x88\x00\xb1\ +\x58\x0c\x04\xe6\x4d\xa4\xf5\x28\x66\x08\xea\x59\xa1\x00\xdf\x6b\ +\x35\xa8\x9d\x9c\x40\x21\x9f\xb7\x0b\xa7\x81\x90\x81\xed\x67\x33\ +\x19\xf8\x56\xad\x42\xf5\x6b\x05\xd2\x1b\x8f\x25\x86\xe7\x79\x92\ +\xbd\xe7\x9f\x0b\x60\x25\x95\x82\x0b\xcb\xcb\x72\xb8\x72\x74\x24\ +\x1d\x9f\x6e\x6d\xc9\x79\x7a\x3e\x1e\x1e\xc2\x93\xcd\x9c\x3d\x09\ +\xcd\xa7\x3f\x34\xe5\xb7\xed\xd5\x94\x3d\x91\x05\x56\x0c\x82\x81\ +\x60\x61\x9b\x31\x75\x3a\x16\xb2\x80\x21\x53\x0c\x49\x05\x7f\x1a\ +\x25\xa3\xdf\x62\x31\x19\xf5\xa5\x68\x81\xcd\x04\x28\xaa\x96\x7c\ +\xb6\x57\xcf\x4b\xa3\xbe\xd1\xda\x91\x82\xc6\x1b\xe9\x34\x30\xad\ +\xe1\xfc\xe5\x2b\x76\x31\x31\x35\x52\x2c\xc4\xe3\x56\xe3\xfc\xce\ +\x8e\x0d\x5e\x22\x91\xd0\xa7\x9e\x91\x42\xa7\x43\x40\xd3\x6c\x6e\ +\x53\x13\x67\x0e\x28\x81\xa1\x96\x50\x9e\x00\xd0\x91\xc7\xf3\x85\ +\x40\x1b\x10\x57\x53\x70\x52\xca\x66\x09\x9a\xfc\xf5\x53\x14\x98\ +\x19\x39\x8c\xc3\x03\x88\x0a\xc1\xc9\x5b\xb0\x80\x7a\x0d\xbd\x10\ +\xe4\x86\x81\xe0\xa9\x80\x06\x03\x48\xb8\x08\xcc\x05\x47\xbd\x01\ +\xb5\x88\x72\x73\x45\x20\x2c\x78\xa8\x26\xb2\xb9\x9c\x72\x12\xe3\ +\xab\xf1\x05\xc5\x86\x81\x3e\x3e\x33\x3c\x2d\xbb\xfb\xeb\xeb\x4e\ +\x4c\x9e\x17\x8b\x33\x52\x90\xca\x3a\x48\x0c\x4d\xa6\xa0\x53\x79\ +\x14\x07\x30\x9a\xa3\x5f\x24\x9f\x2f\xdd\x55\x31\x49\x1d\xc8\x2a\ +\xb6\x52\xd8\x02\x31\x1a\x82\x1f\xf5\xe9\x72\x7e\xf4\xf0\x01\x7c\ +\x29\x97\xa1\x7c\x7c\x2c\x98\xde\x83\xb0\xa0\x84\xe4\xb1\x39\x22\ +\x2a\xc6\x26\x95\xa6\x80\x67\xd9\x91\xbf\xcc\x73\xd1\x37\x52\x24\ +\x97\x96\x66\x4b\xda\x8f\xb8\x4e\xa0\x99\x1b\x8c\x85\x96\xfc\x8b\ +\xfd\xa2\xf5\xbd\x9e\x4c\x5a\x3f\x9c\x66\x2c\x6f\x39\x54\xfa\x21\ +\x06\x81\x89\xd1\x8d\x5f\x07\xd2\x54\x09\xfb\x04\xcc\x95\xeb\x14\ +\xc8\x60\x30\xf8\xcb\x5d\xeb\xdb\xee\xde\x9e\x0d\xe6\xb5\xc5\x45\ +\x1b\x9b\xe9\x4b\xa9\xd9\x6c\x5a\xf0\x57\x95\x4a\x85\x8b\x09\xde\ +\xeb\xf5\x78\xbb\xdd\xe6\x9d\x4e\x87\x77\xbb\x5d\x39\x26\xeb\xf7\ +\xfb\x5c\x6c\xce\x87\xc3\x21\x1f\x8d\x46\x5c\xfc\x29\xf8\x64\x32\ +\xe1\xb3\x8f\xf8\x59\xf0\x52\xa9\xc4\x05\xe6\x0f\xda\x66\x9e\xae\ +\x53\xba\xf5\x4f\xe9\x9f\xf7\x53\x34\xbb\x04\x7c\x56\xd8\x39\xdd\ +\x9e\xf9\x4f\xdc\x89\xb0\xa1\xb0\xee\x1f\x01\x06\x00\xa6\x8d\xeb\ +\x65\x53\xa3\x8b\x75\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\ +\x82\ +\x00\x00\x03\x23\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\ +\xbb\x7f\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\ +\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ +\xd5\x0b\x0a\x14\x2d\x15\xc0\x92\x43\xe1\x00\x00\x02\xb0\x49\x44\ +\x41\x54\x38\xcb\xd5\x95\xcb\x4b\x94\x61\x14\xc6\x7f\xef\x37\x23\ +\xf3\x35\x33\x2a\xa6\x79\xcb\x21\x28\xd0\xa4\x56\x5d\x34\x37\xb9\ +\x8e\x08\x11\x11\x57\x2e\xa3\x55\x59\xd0\x2e\x68\x51\x7f\x40\xd0\ +\xa2\x4d\x2b\x89\x82\x49\xc7\x4d\xb4\x08\x0a\x0a\x22\x0b\x1a\x33\ +\x75\x34\x2c\x4c\x6b\x70\x9c\x71\x1c\x73\xee\x33\xdf\xe5\x6d\x31\ +\x33\x3a\xe6\x18\x5e\x68\xd1\x59\xbc\xbc\x9c\x73\x78\x9e\x73\x1e\ +\x9e\xf7\xfb\xe0\x7f\x0b\xd1\xdf\xdf\x7f\xda\xc4\x78\x2e\x84\x02\ +\x20\x40\x6c\x6a\xb0\x08\xe5\xea\xe0\xe0\xe0\xd3\x5d\x03\x77\x75\ +\x5d\xf2\x0e\x5c\xbf\x71\x6a\xbb\x86\x27\xee\x91\xcc\xda\x6a\xa0\ +\x73\xc8\xed\xf9\xb0\x1b\x60\xab\x89\xd4\xe3\xf1\x38\x63\x5e\x6f\ +\xc9\x86\x23\x4d\x8d\xb6\xc9\x5f\xc1\x67\xbd\x7d\x3d\x17\x86\xdc\ +\x1e\xef\xce\x81\x0d\x73\xcd\xa6\x56\x52\x5d\x5d\xb3\x6d\x53\xc7\ +\xb9\xf3\x87\xde\x8d\xbe\xfe\xd8\xdb\xd7\x53\xaa\x7c\x7f\xc8\xed\ +\x19\xd8\x02\xac\x58\x84\x23\x9b\x8e\x6a\xaa\xaa\x96\x2d\x2c\xcc\ +\x23\x84\x00\x21\x50\x84\x82\x28\x92\xfb\x44\xeb\xc9\x92\xa4\xbe\ +\x99\xa9\x6b\xc0\x56\x60\x55\x55\x27\x02\x4b\x8b\x67\xed\x07\x1c\ +\xd4\xd5\xd5\x63\x18\xc6\x8e\x75\x94\x52\x6e\x2f\x05\xf0\x3d\x14\ +\x0a\x6a\x87\x1b\x5d\x65\x8b\x4b\x8b\xa4\x64\x39\x93\x6b\x75\xac\ +\x65\x6d\x7f\x05\x55\x2d\xb9\x01\xd2\x15\xdd\x9c\xb9\xdc\xbd\x89\ +\xa1\xd9\x19\x7c\x6f\x05\xe6\x23\x91\x55\xad\xbd\xad\x83\x68\x34\ +\xca\xdb\x39\xb8\x75\xe5\xe2\xbe\x3c\x7c\xef\xe1\x70\xab\x15\x88\ +\x64\x32\x59\x6d\xe1\xc7\x02\xc1\x50\x90\x98\xee\x22\x99\xd6\xf0\ +\xf9\x63\x7b\x02\x6d\xac\x52\x89\x67\xa4\x6e\x05\x7c\xe1\x70\x48\ +\x73\x35\xb9\x48\xc4\x13\xb0\xba\xbf\x17\x17\x8d\xac\xc8\xb4\x6e\ +\xf1\x2b\x43\x6e\x4f\xc0\x30\x4c\xdd\xef\xf7\x33\x39\x17\xa4\xb3\ +\xad\x05\xb9\x47\xd0\x4a\x7b\x19\x89\x54\xc6\x6c\x4a\xbc\xba\x69\ +\x05\xd0\x35\x5d\x93\x48\x92\xa6\x8a\xab\xb6\x9c\xd5\x84\x86\x94\ +\x20\x91\x20\x05\xac\x53\xe5\xee\x42\x88\xa2\xda\xba\x47\xb0\xdb\ +\x2c\xf8\x02\x61\x0d\xf0\x59\x01\x1c\x4e\xbb\x77\x79\x39\x74\xb4\ +\xa5\xf9\x38\xf6\xaa\x3a\xfc\x91\x14\x69\xdd\x2c\x78\x8a\x1c\x85\ +\x40\x90\xbb\x0b\x44\x9e\x6f\x63\xb7\x83\xce\x32\x74\x43\x32\x31\ +\xfd\xed\xe7\x1b\xb7\x27\x60\xcd\xcd\x21\x3e\xc5\xe3\xb1\xde\x86\ +\x63\x8d\xac\xc4\xb2\x04\x22\x99\xa2\xaf\x49\x6e\x32\x89\x44\xe4\ +\xef\xb9\x5c\xbe\x06\x20\x05\x59\x43\x32\x36\x36\xa1\xd5\x26\x47\ +\xef\x16\x7c\x6c\xf3\xfb\x17\x27\xcb\x2b\xca\xcd\xf6\x86\x1a\xc5\ +\x17\xd2\x36\xa6\xcd\xaf\x58\x38\xc5\xba\x20\xa2\x28\x0b\xb5\x95\ +\x36\x34\xc3\xe4\xcb\xf4\xc4\xf2\x4b\xb7\xe7\x51\x01\xb8\x66\x6a\ +\x6a\xca\x51\xdf\x50\xaf\xbc\x98\x49\x96\x7a\x5e\xc8\x82\xb6\x05\ +\x21\xd6\x27\xcd\xd5\x74\x5d\x42\x6c\xc9\x20\x19\x1c\x06\x14\xc0\ +\xb4\x02\xb1\x70\x38\x3c\xfb\x79\x7c\xfc\x8e\xc3\x39\x7d\x7b\xaf\ +\x36\xd3\x57\x66\xbf\x8e\x8f\x3c\x78\x0c\x38\x81\x68\x61\x3b\x15\ +\xb0\xe7\x93\xce\x3c\xeb\x6e\x42\x02\x59\x20\x09\x44\x80\x94\x28\ +\xd1\xa4\xf0\xe7\x6f\x64\xe7\x61\x16\x79\xf3\xdf\xc4\x6f\x97\x71\ +\x39\x10\x00\x75\x1a\x77\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\ +\x60\x82\ +\x00\x00\x02\xd1\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\ +\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xaf\xc8\x37\x05\x8a\xe9\ +\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ +\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ +\x79\x71\xc9\x65\x3c\x00\x00\x02\x63\x49\x44\x41\x54\x78\xda\xb4\ +\x95\xcd\x6b\xd4\x40\x14\xc0\xdf\xc4\x7c\x6c\x76\xdb\x93\x87\x15\ +\xa1\x66\xdd\x76\xaf\xc5\x8f\x93\xa8\xb4\xa7\x6e\x0f\x3d\xf4\x1f\ +\x58\x4f\xd5\xaa\x88\x16\x29\x45\x10\xa5\x20\xde\x44\x44\x44\x11\ +\x7a\x29\xbd\xae\xb0\xbd\x08\xed\xa5\x5d\xa3\xde\xea\xdd\x5b\x56\ +\xa1\xb4\xba\xc5\xd3\x36\x4d\x36\x3b\xe3\xbc\x90\x94\x6c\x32\x63\ +\xf1\xb0\x0f\x5e\x26\xc3\x7b\xef\x97\xf7\x66\xde\x4c\x08\x63\x0c\ +\x06\x21\x0a\x0c\x48\xa4\xe0\x6f\x8a\x62\xd9\xba\xee\xe0\x28\xb3\ +\x6f\x9a\xe6\xae\xcc\x0e\xb8\x14\x69\xdd\x21\xc4\xfa\x98\xcf\xb1\ +\xce\xea\x2a\xc3\x11\xe7\xff\x63\x47\x55\x44\x99\xec\x9b\x86\x33\ +\xf1\xee\x3d\x78\xad\x16\xe0\x88\xf3\x38\xb3\x93\xec\xb1\x90\xe4\ +\xe6\xa5\x83\x62\x31\x2c\x0b\x9a\x77\xe6\xa1\xe8\x7a\x57\xb9\xfd\ +\xcb\x3f\xec\xa5\x4b\x94\xb6\x32\x60\x5c\xd3\xcb\x2b\x2b\x56\x32\ +\x28\x1d\x9c\x86\x86\xcb\xd9\xeb\x41\xae\x5c\x86\x9d\xb9\xb9\xd6\ +\x75\xdf\x2f\x89\x32\x3e\xed\x0c\xe5\xdb\xd3\x6f\xde\x82\x08\xae\ +\x73\xb8\xef\x38\x18\x86\x38\x0e\x0c\x18\xeb\x51\x30\x46\x47\x99\ +\x7d\xef\xae\x22\xcd\x38\x82\x8f\xf0\x72\x7f\x64\x32\xe3\x6e\x8c\ +\x32\x20\x94\x86\x5b\x4e\x3b\x1d\x4a\xbb\x1e\x33\xc7\xc7\x99\xbd\ +\x70\x5f\x2d\x1e\x7a\xe7\x63\xa8\xb0\xdd\xb8\xf1\x27\x7e\x19\xcb\ +\xc6\xf2\xe1\xf8\xbb\x14\x48\xd0\x05\xf6\xa7\xcd\xe8\xde\x6e\x10\ +\xec\xef\xf9\xb9\x91\x73\x5d\x7b\xe1\x81\x7a\xa6\x4b\xcb\x49\xa8\ +\xb4\x8f\xd1\x29\x82\x33\xbd\x64\x61\xc9\x00\x87\x2e\x67\xf3\x6c\ +\x7f\xfd\x26\xf4\xa0\xad\xe9\x95\x8a\xf9\x79\xf9\x69\xee\xac\x61\ +\x8e\x5d\xf4\x3c\x27\xcd\x20\xa2\x23\xbd\x3e\x5c\xb8\xa2\x53\xfa\ +\x75\xf2\xd5\x6b\x70\xeb\xf5\xc8\x53\xc1\xb5\x88\x57\x25\x7c\x9a\ +\xd5\x69\x68\x3e\x79\xdc\xd7\x0d\x52\xf0\x71\xcb\x3d\x7b\x0e\x47\ +\x1b\x1b\xfd\xbb\x1f\x6d\x5b\x52\x72\xd5\xaa\x10\xae\x88\xa0\x93\ +\x2f\x5e\x66\xa0\x48\x2d\xd4\x6a\x99\xea\xd0\x0f\xfd\xd3\x87\xa4\ +\x0f\xdc\x51\xd5\x26\x3a\xb9\x8d\x46\x06\x90\xbf\x51\x83\xad\xdb\ +\xb7\xc0\x9c\x99\xc9\xd8\xd0\x1f\xe3\x30\x5e\x08\x2e\x04\xc1\xc4\ +\xe6\xd2\x22\x98\xb3\xb3\xfd\x50\x9e\xe9\xd6\xfc\x4d\x56\x3c\xf2\ +\xaf\x6d\x3f\x5a\x0a\xe7\x49\x41\xff\xed\xc5\x87\x61\xbc\xf4\x12\ +\xc2\x0b\xa5\x31\x94\x67\xee\xda\x1a\x3b\x98\x9a\x0a\xc7\xe4\x45\ +\x83\xa3\xad\xa9\x52\x7b\xac\xd2\xdb\xed\xc3\x70\x41\x1a\x14\xdf\ +\x6e\x32\xbb\x14\x8c\x82\xce\x9f\x34\xcd\xa9\x13\x52\xc1\x6a\xd3\ +\xba\x4e\xc8\x18\xf7\xf9\xce\xf5\x82\xa8\x72\x61\x1f\x13\x42\x54\ +\xec\xa4\x48\x8d\x08\x96\x16\x0f\x9b\x02\xf7\x0e\x95\x73\x7a\x27\ +\x1e\x10\x0e\x8e\x5f\x4f\x71\xd5\x04\xed\x8b\x73\x7e\x1c\xa1\x1b\ +\x9f\x97\x34\x87\x0c\xea\x67\xfa\x57\x80\x01\x00\x35\x8f\xf6\xe0\ +\xa6\x1b\xb5\x58\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ +\ +" + +qt_resource_name = "\ +\x00\x06\ +\x07\x03\x7d\xc3\ +\x00\x69\ +\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\ +\x00\x0f\ +\x04\x98\x35\xe7\ +\x00\x54\ +\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\x00\x53\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0b\ +\x01\xd8\xc7\xc7\ +\x00\x61\ +\x00\x6e\x00\x61\x00\x6c\x00\x79\x00\x7a\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x11\ +\x0a\xe2\xae\xa7\ +\x00\x54\ +\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\x00\x4c\x00\x69\x00\x73\x00\x74\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\ +\x00\x12\ +\x08\xc2\x5a\x27\ +\x00\x43\ +\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x41\x00\x72\x00\x74\x00\x53\x00\x68\x00\x61\x00\x64\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\ +\x00\x67\ +\x00\x06\ +\x06\x97\x57\x47\ +\x00\x63\ +\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0a\ +\x08\x94\x60\x47\ +\x00\x73\ +\x00\x65\x00\x61\x00\x72\x00\x63\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x11\ +\x02\xa0\xa3\x27\ +\x00\x54\ +\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\x00\x4c\x00\x6f\x00\x6f\x00\x6b\x00\x75\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\ +\x00\x13\ +\x03\xab\xee\x07\ +\x00\x54\ +\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\x00\x41\x00\x64\x00\x64\x00\x46\x00\x69\x00\x6c\x00\x65\x00\x73\x00\x2e\x00\x70\ +\x00\x6e\x00\x67\ +\x00\x0c\ +\x0d\xba\x66\x47\ +\x00\x50\ +\x00\x69\x00\x63\x00\x61\x00\x72\x00\x64\x00\x33\x00\x32\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x08\ +\x06\xa8\x59\xe7\ +\x00\x6e\ +\x00\x6f\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x0c\ +\x0d\x96\x66\x47\ +\x00\x50\ +\x00\x69\x00\x63\x00\x61\x00\x72\x00\x64\x00\x31\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x12\ +\x04\x63\xd7\x47\ +\x00\x54\ +\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\x00\x4f\x00\x70\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x73\x00\x2e\x00\x70\x00\x6e\ +\x00\x67\ +\x00\x08\ +\x00\x28\x5a\xe7\ +\x00\x66\ +\x00\x69\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x11\ +\x04\x65\x98\xc7\ +\x00\x54\ +\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\x00\x53\x00\x75\x00\x62\x00\x6d\x00\x69\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\ +\x00\x11\ +\x06\xa6\xc6\x67\ +\x00\x54\ +\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\x00\x52\x00\x65\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\ +\x00\x12\ +\x07\x21\x5d\xc7\ +\x00\x54\ +\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\x00\x41\x00\x6e\x00\x61\x00\x6c\x00\x79\x00\x7a\x00\x65\x00\x2e\x00\x70\x00\x6e\ +\x00\x67\ +\x00\x07\ +\x0b\x05\x57\x87\ +\x00\x64\ +\x00\x69\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x12\ +\x0c\xc8\xa4\x07\ +\x00\x54\ +\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\x00\x43\x00\x6c\x00\x75\x00\x73\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\ +\x00\x67\ +\x00\x11\ +\x0b\x64\x3a\xe7\ +\x00\x54\ +\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x61\x00\x72\x00\x41\x00\x64\x00\x64\x00\x44\x00\x69\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\ +\x00\x0a\ +\x06\xcb\x4f\xc7\ +\x00\x72\ +\x00\x65\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ +" + +qt_resource_struct = "\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\x02\ +\x00\x00\x01\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x78\x6a\ +\x00\x00\x00\x36\x00\x00\x00\x00\x00\x01\x00\x00\x04\x82\ +\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x60\xc2\ +\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x66\x37\ +\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x00\x73\xe7\ +\x00\x00\x01\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x7a\xcf\ +\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x58\x24\ +\x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\x80\xee\ +\x00\x00\x01\x42\x00\x00\x00\x00\x00\x01\x00\x00\x70\x57\ +\x00\x00\x02\x96\x00\x00\x00\x00\x00\x01\x00\x00\x8b\xa8\ +\x00\x00\x02\x06\x00\x00\x00\x00\x00\x01\x00\x00\x82\x16\ +\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x01\x00\x00\x5b\xcb\ +\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x2f\ +\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x07\x59\ +\x00\x00\x02\x30\x00\x00\x00\x00\x00\x01\x00\x00\x83\x75\ +\x00\x00\x02\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x88\x81\ +\x00\x00\x02\x44\x00\x00\x00\x00\x00\x01\x00\x00\x85\x6b\ +\x00\x00\x01\x58\x00\x00\x00\x00\x00\x01\x00\x00\x71\xfe\ +\x00\x00\x01\x24\x00\x00\x00\x00\x00\x01\x00\x00\x6a\x24\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/picard/tagger.py b/picard/tagger.py new file mode 100644 index 000000000..3f377a639 --- /dev/null +++ b/picard/tagger.py @@ -0,0 +1,169 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtGui, QtCore + +import gettext +import locale +import logging +import os.path +import sys + +import picard.resources + +from picard.albummanager import AlbumManager +from picard.api import IFileOpener +from picard.browser.filelookup import FileLookup +from picard.browser.browser import BrowserIntegration +from picard.component import ComponentManager, Interface, ExtensionPoint, Component +from picard.config import Config +from picard.ui.mainwindow import MainWindow +from picard.worker import WorkerThread +from picard.file import FileManager + +# Install gettext "noop" function. +import __builtin__ +__builtin__.__dict__['N_'] = lambda a: a + +class Tagger(QtGui.QApplication, ComponentManager, Component): + + fileOpeners = ExtensionPoint(IFileOpener) + + def __init__(self, localeDir): + QtGui.QApplication.__init__(self, sys.argv) + ComponentManager.__init__(self) + + self.config = Config() + + logging.basicConfig(level=logging.DEBUG, +# format='%(message)s', + format='%(asctime)s %(levelname)-8s %(pathname)s#%(lineno)d [%(thread)04d]\n%(message)s', + datefmt='%H:%M:%S') + self.log = logging.getLogger('picard') + + QtCore.QObject.tagger = self + QtCore.QObject.config = self.config + QtCore.QObject.log = self.log + + self.setupGettext(localeDir) + self.loadComponents() + + self.worker = WorkerThread() + self.connect(self.worker, QtCore.SIGNAL("addFiles(const QStringList &)"), self.onAddFiles) + + self.browserIntegration = BrowserIntegration() + + self.fileManager = FileManager() + self.albumManager = AlbumManager() + + self.connect(self.browserIntegration, QtCore.SIGNAL("loadAlbum(const QString &)"), self.albumManager.load) + + self.window = MainWindow() + self.connect(self.window, QtCore.SIGNAL("addFiles"), self.onAddFiles) + self.connect(self.window, QtCore.SIGNAL("addDirectory"), self.onAddDirectory) + self.connect(self.worker, QtCore.SIGNAL("statusBarMessage(const QString &)"), self.window.setStatusBarMessage) + self.connect(self.window, QtCore.SIGNAL("search"), self.onSearch) + self.connect(self.window, QtCore.SIGNAL("lookup"), self.onLookup) + + self.worker.start() + self.browserIntegration.start() + + def exit(self): + self.browserIntegration.stop() + self.worker.stop() + + def run(self): + self.window.show() + res = self.exec_() + self.exit() + return res + + def setupGettext(self, localeDir): + """Setup locales, load translations, install gettext functions.""" + if sys.platform == "win32": + try: + locale.setlocale(locale.LC_ALL, os.environ["LANG"]) + except KeyError: + os.environ["LANG"] = locale.getdefaultlocale()[0] + locale.setlocale(locale.LC_ALL, "") + except: + pass + else: + try: + locale.setlocale(locale.LC_ALL, "") + except: + pass + + try: + self.log.debug("Loading gettext translation, localeDir=%r", localeDir) + self.translation = gettext.translation("picard", localeDir) + self.translation.install(True) + except IOError, e: + __builtin__.__dict__['_'] = lambda a: a + self.log.warning(e) + + def loadComponents(self): + # Load default components + default_components = ( + 'picard.plugins.mutagenmp3', + 'picard.plugins.cuesheet', + ) + for module in default_components: + __import__(module) + + def getSupportedFormats(self): + """Returns list of supported formats. + + Format: + [('.mp3', 'MPEG Layer-3 File'), ('.cue', 'Cuesheet'), ...] + """ + formats = [] + for opener in self.fileOpeners: + formats.extend(opener.getSupportedFormats()) + return formats + + def onAddFiles(self, files): + files = [os.path.normpath(unicode(a)) for a in files] + self.log.debug("onAddFiles(%r)", files) + for fileName in files: + for opener in self.fileOpeners: + if opener.canOpenFile(fileName): + self.worker.readFile(fileName, opener.openFile) + + def onAddDirectory(self, directory): + directory = os.path.normpath(directory) + self.log.debug("onAddDirectory(%r)", directory) + self.worker.readDirectory(directory) + + def onSearch(self, text, type_): + lookup = FileLookup(self, "musicbrainz.org", 80, self.browserIntegration.port) + getattr(lookup, type_ + "Search")(text) + + def onLookup(self, metadata): + pass + + def saveFiles(self, files): + for file in files: + self.worker.saveFile(file) + +def main(localeDir=None): + tagger = Tagger(localeDir) + sys.exit(tagger.run()) + diff --git a/picard/track.py b/picard/track.py new file mode 100644 index 000000000..ec40f59cd --- /dev/null +++ b/picard/track.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore, QtGui +from picard.util import formatTime +from picard.dataobj import DataObject + +class Track(DataObject): + + def __init__(self, id, name, artist=None, album=None): + DataObject.__init__(self, id, name) + self.artist = artist + self.album = album + self.duration = 0 + + def __str__(self): + return u"<Track %s, name %s>" % (self.id, self.name) + + def getDuration(self): + return self._duration + + def setDuration(self, duration): + self._duration = duration + self._durationStr = formatTime(duration) + + duration = property(getDuration, setDuration) + diff --git a/picard/ui/__init__.py b/picard/ui/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/picard/ui/coverartbox.py b/picard/ui/coverartbox.py new file mode 100644 index 000000000..8ace35442 --- /dev/null +++ b/picard/ui/coverartbox.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore, QtGui + +class CoverArtBox(QtGui.QGroupBox): + + def __init__(self, parent): + QtGui.QGroupBox.__init__(self, _("Cover Art")) + self.setupUi() + + def test(self): + self.emit(QtCore.SIGNAL("TestSignal"), 1, 4) + + def setupUi(self): + self.layout = QtGui.QVBoxLayout() + + #cover = QtGui.QPixmap("cover.jpg") + #cover = cover.scaled(105, 105, QtCore.Qt.IgnoreAspectRatio, QtCore.Qt.SmoothTransformation); + + img = QtGui.QPixmap(":/images/CoverArtShadow.png") + #painter = QtGui.QPainter(img) + #painter.drawPixmap(1,1,cover) + #painter.end() + + self.coverArt = QtGui.QLabel() + self.coverArt.setPixmap(img) + self.coverArt.setAlignment(QtCore.Qt.AlignTop) + + #amazonLayout = QtGui.QHBoxLayout() + + #self.amazonBuyLabel = QtGui.QLabel('<a href="http://www.amazon.com/">Buy</a> | <a href="http://www.amazon.com/">Info</a>') + #self.amazonBuyLabel.setAlignment(QtCore.Qt.AlignCenter) + + #self.amazonInfoLabel = QtGui.QLabel('') + #self.amazonInfoLabel.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignLeft) + + #amazonLayout.addWidget(self.amazonBuyLabel) + #amazonLayout.addWidget(self.amazonInfoLabel) + + self.layout.addWidget(self.coverArt, 0) + #self.layout.addWidget(self.amazonBuyLabel, 1) + self.setLayout(self.layout) + diff --git a/picard/ui/itemviews.py b/picard/ui/itemviews.py new file mode 100644 index 000000000..169f616dc --- /dev/null +++ b/picard/ui/itemviews.py @@ -0,0 +1,314 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore, QtGui +import os +from picard.album import Album +from picard.file import File +from picard.albummanager import UnmatchedFiles +from picard.util import formatTime, encodeFileName +from picard.ui.tageditor import TagEditor + +__all__ = ["FileTreeView", "AlbumTreeView"] + +class BaseTreeView(QtGui.QTreeWidget): + + def __init__(self, mainWindow, parent): + QtGui.QTreeWidget.__init__(self, parent) + self.mainWindow = mainWindow + + self.numHeaderSections = 3 + self.defaultSectionSizes = (250, 40, 100, 100) + self.setHeaderLabels([_(u"Title"), _(u"Time"), _(u"Artist")]) + self.restoreState() + + self.setAcceptDrops(True) + self.setDragEnabled(True) + self.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) + + self.objectToItem = {} + self.itemToObject = {} + + def restoreState(self): + name = "header" + self.__class__.__name__ + header = self.header() + for i in range(self.numHeaderSections): + size = self.config.persist.getInt("%s%d" % (name, i), \ + self.defaultSectionSizes[i]) + header.resizeSection(i, size) + + def saveState(self): + name = "header" + self.__class__.__name__ + for i in range(self.numHeaderSections): + size = self.header().sectionSize(i) + self.config.persist.set("%s%d" % (name, i), size) + + def registerObject(self, obj, item): + self.objectToItem[obj] = item + self.itemToObject[item] = obj + + def unregisterObject(self, obj, item): + del self.objectToItem[obj] + del self.itemToObject[item] + + def getObjectFromItem(self, item): + return self.itemToObject[item] + + def getItemFromObject(self, obj): + return self.objectToItem[obj] + + def supportedDropActions(self): + return QtCore.Qt.MoveAction | QtCore.Qt.CopyAction + + def mimeTypes(self): + """List of MIME types accepted by this view.""" + return ["text/uri-list", "application/picard.file", "application/picard.album"] + + def startDrag(self, supportedActions): + """Start drag, *without* using pixmap.""" + items = self.selectedItems() + if items: + drag = QtGui.QDrag(self) + drag.setMimeData(self.mimeData(items)) + if drag.start(supportedActions) == QtCore.Qt.MoveAction: + self.log.debug("MoveAction") + + def selectedObjects(self): + items = self.selectedItems() + return [self.itemToObject[item] for item in items] + + +class FileTreeView(BaseTreeView): + + def __init__(self, mainWindow, parent): + BaseTreeView.__init__(self, mainWindow, parent) + + + + # Create the context menu + + self.editTagsAct = QtGui.QAction(_("Edit &Tags..."), self) + self.connect(self.editTagsAct, QtCore.SIGNAL("triggered()"), self.editTags) + + self.lookupAct = QtGui.QAction(QtGui.QIcon(":/images/search.png"), _("&Lookup"), self) + + self.analyzeAct = QtGui.QAction(QtGui.QIcon(":/images/analyze.png"), _("&Analyze"), self) + + self.contextMenu = QtGui.QMenu(self) + self.contextMenu.addAction(self.editTagsAct) + self.contextMenu.addSeparator() + self.contextMenu.addAction(self.lookupAct) + self.contextMenu.addAction(self.analyzeAct) + self.contextMenu.addAction(self.mainWindow.removeAct) + + # Prepare some common icons + + self.dirIcon = QtGui.QIcon(":/images/dir.png") + self.fileIcon = QtGui.QIcon(":/images/file.png") + + # "Unmatched Files" + + self.unmatchedFilesItem = QtGui.QTreeWidgetItem() + self.unmatchedFilesItem.setFlags(QtCore.Qt.ItemIsEnabled) + self.unmatchedFilesItem.setText(0, "Unmatched Files") + self.unmatchedFilesItem.setIcon(0, self.dirIcon) + self.addTopLevelItem(self.unmatchedFilesItem) + self.objectToItem[self.tagger.albumManager.unmatchedFiles] = self.unmatchedFilesItem + self.itemToObject[self.unmatchedFilesItem] = self.tagger.albumManager.unmatchedFiles + + unmatched = self.tagger.albumManager.unmatchedFiles + self.connect(unmatched, QtCore.SIGNAL("fileAdded(int)"), self.addUnmatchedFile) + self.connect(unmatched, QtCore.SIGNAL("fileAboutToBeRemoved"), self.beginRemoveFile) + self.connect(unmatched, QtCore.SIGNAL("fileRemoved"), self.endRemoveFile) + + self.fileGroupsItem = QtGui.QTreeWidgetItem() + self.fileGroupsItem.setFlags(QtCore.Qt.ItemIsEnabled) + self.fileGroupsItem.setText(0, "Track Groups") + self.fileGroupsItem.setIcon(0, self.dirIcon) + self.addTopLevelItem(self.fileGroupsItem) + + #self.connect(self, QtCore.SIGNAL("itemSelectionChanged()"), self.updateSelection) + self.connect(self, QtCore.SIGNAL("doubleClicked(QModelIndex)"), self.handleDoubleClick) + + + def addUnmatchedFile(self, fileId): + unmatchedFiles = self.tagger.albumManager.unmatchedFiles + file = self.tagger.fileManager.getFile(fileId) + fileItem = QtGui.QTreeWidgetItem() + fileItem.setIcon(0, self.fileIcon) + fileItem.setText(0, file.localMetadata.get("TITLE", "")) + fileItem.setText(1, formatTime(file.audioProperties.length)) + fileItem.setText(2, file.localMetadata.get("ARTIST", "")) + self.unmatchedFilesItem.addChild(fileItem) + + self.objectToItem[file] = fileItem + self.itemToObject[fileItem] = file + + # Update title for pseudo-album "Unmatched Tracks" + self.unmatchedFilesItem.setText(0, unmatchedFiles.name) + + +# self.emit(QtCore.SIGNAL("rowsInserted(const QModelIndex &, int, int)"), +# self.createIndex(0, 0, self.tagger.albumManager.unmatchedFiles), +# 0, 0) + + def contextMenuEvent(self, event): + items = self.selectedItems() + + canEditTags = False + canLookup = False + canAnalyze = False + canRemove = False + + if len(items) == 1: + canEditTags = True + canLookup = True + + if len(items) > 0: + #canAnalyze = True + canRemove = True + + self.editTagsAct.setEnabled(canEditTags) + self.lookupAct.setEnabled(canLookup) + self.analyzeAct.setEnabled(canAnalyze) + #self.removeAct.setEnabled(canRemove) + + self.contextMenu.popup(event.globalPos()) + event.accept() + + def removeFiles(self): + files = self.selectedObjects() + self.tagger.fileManager.removeFiles(files) + + def beginRemoveFile(self, row): + file = self.tagger.albumManager.unmatchedFiles.unmatchedFiles[row] + item = self.objectToItem[file] + index = self.unmatchedFilesItem.indexOfChild(item) + self.unmatchedFilesItem.takeChild(index) + del self.objectToItem[file] + del self.itemToObject[item] + + def endRemoveFile(self, row): + # Update title for pseudo-album "Unmatched Tracks" + unmatchedFiles = self.tagger.albumManager.unmatchedFiles + self.unmatchedFilesItem.setText(0, unmatchedFiles.name) + + def openTagEditor(self, obj): + tagEditor = TagEditor(obj.getNewMetadata(), self) + tagEditor.exec_() + self.emit(QtCore.SIGNAL("selectionChanged"), [obj]) + + def editTags(self): + objects = self.selectedObjects() + self.openTagEditor(objects[0]) + + def handleDoubleClick(self, index): + obj = self.itemToObject[self.itemFromIndex(index)] + if isinstance(obj, File): + self.openTagEditor(obj) + + # Drag & drop + + def dropMimeData(self, parent, index, data, action): + """Handle drop.""" + print "dropMimeType" + print data + print [unicode(i) for i in data.formats()] + files = [] + uriList = data.urls() + for uri in uriList: + print uri.scheme() + print uri.host() + if uri.scheme() == "file": + fileName = str(uri.toLocalFile()) + fileName = unicode(QtCore.QUrl.fromPercentEncoding(QtCore.QByteArray(fileName))) + if os.path.isdir(encodeFileName(fileName)): + self.emit(QtCore.SIGNAL("addDirectory"), fileName) + else: + files.append(fileName) + print files + self.emit(QtCore.SIGNAL("addFiles"), files) + return True + + def mimeData(self, items): + """Return MIME data for specified items.""" + fileIds = [] + for item in items: + obj = self.itemToObject[item] + fileIds.append(str(obj.getId())) + mimeData = QtCore.QMimeData() + mimeData.setData("application/picard.file", "\n".join(fileIds)) + return mimeData + + +class AlbumTreeView(BaseTreeView): + + def __init__(self, mainWindow, parent): + BaseTreeView.__init__(self, mainWindow, parent) + + self.cdIcon = QtGui.QIcon(":/images/cd.png") + self.noteIcon = QtGui.QIcon(":/images/note.png") + + self.connect(self.tagger.albumManager, QtCore.SIGNAL("albumAdded"), + self.addAlbum) + self.connect(self.tagger.worker, QtCore.SIGNAL("albumLoaded(QString)"), + self.updateAlbum) + + def addAlbum(self, album): + item = QtGui.QTreeWidgetItem() + item.setText(0, album.name) + item.setIcon(0, self.cdIcon) + font = item.font(0) + font.setBold(True) + for i in range(3): + item.setFont(i, font) + self.registerObject(album, item) + self.addTopLevelItem(item) + + def updateAlbum(self, albumId): + self.log.debug("updateAlbum, %s", albumId) + album = self.tagger.albumManager.getAlbumById(unicode(albumId)) + albumItem = self.getItemFromObject(album) + albumItem.setText(0, album.name) + albumItem.setText(1, formatTime(album.duration)) + albumItem.setText(2, album.artist.name) + i = 1 + for track in album.tracks: + item = QtGui.QTreeWidgetItem() + item.setText(0, "%d. %s" % (i, track.name)) + item.setIcon(0, self.noteIcon) + item.setText(1, formatTime(track.duration)) + item.setText(2, track.artist.name) + self.registerObject(track, item) + albumItem.addChild(item) + i += 1 + + def mimeData(self, items): + """Return MIME data for specified items.""" + albumIds = [] + for item in items: + obj = self.getObjectFromItem(item) + if isinstance(obj, Album): + albumIds.append(str(obj.getId())) + #elif isinstance(obj, Track): + # trackIds.append(str(obj.getId())) + mimeData = QtCore.QMimeData() + mimeData.setData("application/picard.album", "\n".join(albumIds)) + return mimeData + diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py new file mode 100644 index 000000000..886de316a --- /dev/null +++ b/picard/ui/mainwindow.py @@ -0,0 +1,381 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore, QtGui + +import os.path +import sys + +from picard.file import File +from picard.util import decodeFileName, encodeFileName +from picard.ui.coverartbox import CoverArtBox +from picard.ui.metadatabox import MetadataBox +from picard.ui.itemviews import FileTreeView, AlbumTreeView + +class MainWindow(QtGui.QMainWindow): + + def __init__(self, parent=None): + QtGui.QMainWindow.__init__(self, parent) + self.setupUi() + + def setupUi(self): + self.setWindowTitle(_("MusicBrainz Picard")) + icon = QtGui.QIcon() + icon.addFile(":/images/Picard16.png") + icon.addFile(":/images/Picard32.png") + self.setWindowIcon(icon) + + self.createActions() + self.createMenus() + self.createStatusBar() + self.createToolBar() + + centralWidget = QtGui.QWidget(self) + self.setCentralWidget(centralWidget) + + self.splitter = QtGui.QSplitter(centralWidget) + + self.fileTreeView = FileTreeView(self, self.splitter) + self.connect(self.fileTreeView, QtCore.SIGNAL("itemSelectionChanged()"), self.updateFileTreeSelection) + self.connect(self.fileTreeView, QtCore.SIGNAL("addFiles"), QtCore.SIGNAL("addFiles")) + self.connect(self.fileTreeView, QtCore.SIGNAL("addDirectory"), QtCore.SIGNAL("addDirectory")) + + self.albumTreeView = AlbumTreeView(self, self.splitter) + self.connect(self.albumTreeView, QtCore.SIGNAL("itemSelectionChanged()"), self.updateAlbumTreeSelection) + self.connect(self.albumTreeView, QtCore.SIGNAL("addFiles"), QtCore.SIGNAL("addFiles")) + self.connect(self.albumTreeView, QtCore.SIGNAL("addDirectory"), QtCore.SIGNAL("addDirectory")) + + self.splitter.addWidget(self.fileTreeView) + self.splitter.addWidget(self.albumTreeView) + + self.localMetadataBox = MetadataBox(self, _("Local Metadata")) + self.localMetadataBox.setDisabled(True) + self.serverMetadataBox = MetadataBox(self, _("Server Metadata")) + self.serverMetadataBox.setDisabled(True) + + self.coverArtBox = CoverArtBox(self) + if not self.showCoverArtAct.isChecked(): + self.coverArtBox.hide() + + bottomLayout = QtGui.QHBoxLayout() + bottomLayout.addWidget(self.localMetadataBox, 1) + bottomLayout.addWidget(self.serverMetadataBox, 1) + bottomLayout.addWidget(self.coverArtBox, 0) + + mainLayout = QtGui.QVBoxLayout() + mainLayout.addWidget(self.splitter, 1) + mainLayout.addLayout(bottomLayout, 0) + + centralWidget.setLayout(mainLayout) + + self.restoreWindowState() + + def closeEvent(self, event): + self.saveWindowState() + event.accept() + + def saveWindowState(self): + self.config.persist.set("windowState", self.saveState()) + isMaximized = int(self.windowState()) & QtCore.Qt.WindowMaximized != 0 + if isMaximized: + # FIXME: this doesn't include the window frame + geom = self.normalGeometry() + self.config.persist.set("windowPosition", geom.topLeft()) + self.config.persist.set("windowSize", geom.size()) + else: + self.config.persist.set("windowPosition", self.pos()) + self.config.persist.set("windowSize", self.size()) + self.config.persist.set("windowMaximized", isMaximized) + self.config.persist.set("viewCoverArt", self.showCoverArtAct.isChecked()) + self.fileTreeView.saveState() + self.albumTreeView.saveState() + + def restoreWindowState(self): + self.restoreState(self.config.persist.get("windowState").toByteArray()) + pos = self.config.persist.get("windowPosition").toPoint() + self.move(pos) + size = self.config.persist.get("windowSize").toSize() + self.resize(size) + if self.config.persist.getBool("windowMaximized"): + self.setWindowState(QtCore.Qt.WindowMaximized) + + def createStatusBar(self): + # TR: The initial status bar message + self.statusBar().showMessage(_("Ready")) + + def createActions(self): + self.optionsAct = QtGui.QAction(QtGui.QIcon(":/images/ToolbarOptions.png"), "&Options...", self) + #self.openSettingsAct.setShortcut("Ctrl+O") + self.connect(self.optionsAct, QtCore.SIGNAL("triggered()"), self.showOptions) + + self.helpAct = QtGui.QAction(_("&Help..."), self) + # TR: Keyboard shortcut for "Help" + self.helpAct.setShortcut(QtGui.QKeySequence(_("Ctrl+H"))) + #self.connect(self.helpAct, QtCore.SIGNAL("triggered()"), self.showHelp) + + self.aboutAct = QtGui.QAction(_("&About..."), self) + #self.connect(self.aboutAct, QtCore.SIGNAL("triggered()"), self.showAbout) + + self.addFilesAct = QtGui.QAction(QtGui.QIcon(":/images/ToolbarAddFiles.png"), _("&Add Files..."), self) + self.addFilesAct.setStatusTip(_("Add files to the tagger")) + # TR: Keyboard shortcut for "Add Files..." + self.addFilesAct.setShortcut(QtGui.QKeySequence(_("Ctrl+O"))) + self.connect(self.addFilesAct, QtCore.SIGNAL("triggered()"), self.addFiles) + + self.addDirectoryAct = QtGui.QAction(QtGui.QIcon(":/images/ToolbarAddDir.png"), _("A&dd Directory..."), self) + self.addDirectoryAct.setStatusTip(_("Add a directory to the tagger")) + # TR: Keyboard shortcut for "Add Directory..." + self.addDirectoryAct.setShortcut(QtGui.QKeySequence(_("Ctrl+D"))) + self.connect(self.addDirectoryAct, QtCore.SIGNAL("triggered()"), self.addDirectory) + + self.saveAct = QtGui.QAction(QtGui.QIcon(":/images/ToolbarSave.png"), _("&Save Selected Files"), self) + # TR: Keyboard shortcut for "Save files" + self.saveAct.setShortcut(QtGui.QKeySequence(_("Ctrl+S"))) + self.saveAct.setEnabled(False) + self.connect(self.saveAct, QtCore.SIGNAL("triggered()"), self.save) + + self.submitAct = QtGui.QAction(QtGui.QIcon(":/images/ToolbarSubmit.png"), _("S&ubmit PUIDs to MusicBrainz"), self) + self.submitAct.setEnabled(False) + self.connect(self.submitAct, QtCore.SIGNAL("triggered()"), self.submit) + + self.exitAct = QtGui.QAction(_("E&xit"), self) + self.exitAct.setShortcut(QtGui.QKeySequence(_("Ctrl+Q"))) + self.connect(self.exitAct, QtCore.SIGNAL("triggered()"), self.close) + + self.removeAct = QtGui.QAction(QtGui.QIcon(":/images/remove.png"), _("&Remove"), self) + self.removeAct.setShortcut(QtGui.QKeySequence(_("Del"))) + self.removeAct.setEnabled(False) + self.connect(self.removeAct, QtCore.SIGNAL("triggered()"), self.remove) + + self.showFileBrowserAct = QtGui.QAction(_("File &Browser"), self) + self.showFileBrowserAct.setCheckable(True) + #if self.config.persi.value("persist/viewFileBrowser").toBool(): + # self.showFileBrowserAct.setChecked(True) + # self.connect(self.showFileBrowserAct, QtCore.SIGNAL("triggered()"), self.showFileBrowser) + + self.showCoverArtAct = QtGui.QAction(_("&Cover Art"), self) + self.showCoverArtAct.setCheckable(True) + if self.config.persist.getBool("viewCoverArt"): + self.showCoverArtAct.setChecked(True) + self.connect(self.showCoverArtAct, QtCore.SIGNAL("triggered()"), self.showCoverArt) + + self.searchAct = QtGui.QAction(QtGui.QIcon(":/images/search.png"), _("Search"), self) + self.connect(self.searchAct, QtCore.SIGNAL("triggered()"), self.search) + + self.listenAct = QtGui.QAction(QtGui.QIcon(":/images/ToolbarListen.png"), _("Listen"), self) + self.listenAct.setEnabled(False) + self.connect(self.listenAct, QtCore.SIGNAL("triggered()"), self.listen) + + self.cdLookupAct = QtGui.QAction(QtGui.QIcon(":/images/ToolbarLookup.png"), _("&Lookup CD"), self) + self.cdLookupAct.setEnabled(False) + self.cdLookupAct.setShortcut(QtGui.QKeySequence(_("Ctrl+L"))) + + self.analyzeAct = QtGui.QAction(QtGui.QIcon(":/images/analyze.png"), _("Anal&yze"), self) + self.analyzeAct.setEnabled(False) + self.analyzeAct.setShortcut(QtGui.QKeySequence(_("Ctrl+Y"))) + + self.clusterAct = QtGui.QAction(QtGui.QIcon(":/images/ToolbarCluster.png"), _("Cluster"), self) + self.clusterAct.setEnabled(False) + self.clusterAct.setShortcut(QtGui.QKeySequence(_("Ctrl+U"))) + + def createMenus(self): + self.fileMenu = self.menuBar().addMenu(_("&File")) + self.fileMenu.addAction(self.addFilesAct) + self.fileMenu.addAction(self.addDirectoryAct) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.saveAct) + self.fileMenu.addAction(self.submitAct) + self.fileMenu.addSeparator() + self.fileMenu.addAction(self.exitAct) + + self.editMenu = self.menuBar().addMenu(_("&Edit")) + self.editMenu.addSeparator() + self.editMenu.addAction(self.optionsAct) + + self.viewMenu = self.menuBar().addMenu(_("&View")) + self.viewMenu.addAction(self.showFileBrowserAct) + self.viewMenu.addAction(self.showCoverArtAct) + + self.menuBar().addSeparator() + + self.helpMenu = self.menuBar().addMenu(_("&Help")) + self.helpMenu.addAction(self.helpAct) + self.helpMenu.addAction(self.aboutAct) + + def createToolBar(self): + self.mainToolBar = self.addToolBar(self.tr("File")) + self.mainToolBar.setObjectName("fileToolbar") + self.mainToolBar.addAction(self.addFilesAct) + self.mainToolBar.addAction(self.addDirectoryAct) + self.mainToolBar.addSeparator() + self.mainToolBar.addAction(self.saveAct) + self.mainToolBar.addAction(self.submitAct) + self.mainToolBar.addSeparator() + self.mainToolBar.addAction(self.cdLookupAct) + self.mainToolBar.addAction(self.analyzeAct) + self.mainToolBar.addAction(self.clusterAct) + self.mainToolBar.addSeparator() + self.mainToolBar.addAction(self.removeAct) + self.mainToolBar.addSeparator() + self.mainToolBar.addAction(self.optionsAct) + self.mainToolBar.addSeparator() + self.mainToolBar.addAction(self.listenAct) + + self.searchToolBar = self.addToolBar(_("Search")) + self.searchToolBar.setObjectName("searchToolbar") + + searchPanel = QtGui.QWidget(self.searchToolBar) + hbox = QtGui.QHBoxLayout(searchPanel) + + self.searchEdit = QtGui.QLineEdit(searchPanel) + self.connect(self.searchEdit, QtCore.SIGNAL("returnPressed()"), self.search) + hbox.addWidget(self.searchEdit, 0) + + self.searchCombo = QtGui.QComboBox(searchPanel) + self.searchCombo.addItem(_("Album"), QtCore.QVariant("album")) + self.searchCombo.addItem(_("Artist"), QtCore.QVariant("artist")) + self.searchCombo.addItem(_("Track"), QtCore.QVariant("track")) + hbox.addWidget(self.searchCombo, 0) + + #button = QtGui.QPushButton(_("&Search"), searchPanel) + #self.connect(button, QtCore.SIGNAL("clicked()"), self.search) + #hbox.addWidget(button, 0) + + self.searchToolBar.addWidget(searchPanel) + self.searchToolBar.addAction(self.searchAct) + + def setStatusBarMessage(self, message): + """Set the status bar message.""" + self.statusBar().showMessage(message) + + def search(self): + """Search for album, artist or track on MusicBrainz.""" + text = unicode(self.searchEdit.text()) + type = unicode(self.searchCombo.itemData(self.searchCombo.currentIndex()).toString()) + self.log.debug("Search, '%s', %s", text, type) + self.emit(QtCore.SIGNAL("search"), text, type) + + def addFiles(self): + """Add files to the tagger.""" + currentDirectory = self.config.persist.getString("currentDirectory", "") + formats = [] + extensions = [] + for format in self.tagger.getSupportedFormats(): + ext = u"*%s" % format[0] + formats.append(u"%s (%s)" % (format[1], ext)) + extensions.append(ext) + formats.insert(0, _(u"All Supported Formats") + u" (%s)" % u" ".join(extensions)) + files = QtGui.QFileDialog.getOpenFileNames(self, "", currentDirectory, u";;".join(formats)) + if files: + files = [unicode(f) for f in files] + self.config.persist.set("currentDirectory", os.path.dirname(files[0])) + self.emit(QtCore.SIGNAL("addFiles"), files) + + def addDirectory(self): + """Add directory to the tagger.""" + currentDirectory = self.config.persist.getString("currentDirectory", "") + directory = QtGui.QFileDialog.getExistingDirectory(self, "", currentDirectory) + if directory: + directory = unicode(directory) + self.config.persist.set("currentDirectory", directory) + self.emit(QtCore.SIGNAL("addDirectory"), directory) + + def showOptions(self): + dlg = OptionsDialog(self) + dlg.exec_() + + def save(self): + files = [] + for obj in self.selectedObjects: + if isinstance(obj, File): + files.append(obj) + + if files: + self.tagger.saveFiles(files) + + def listen(self): + pass + + def submit(self): + pass + + def updateFileTreeSelection(self): + objs = self.fileTreeView.selectedObjects() + + + def updateAlbumTreeSelection(self): + objs = self.fileTreeView.selectedObjects() + + def updateSelection(self, objects): + self.selectedObjects = objects + + canRemove = False + canSave = False + for obj in objects: + if isinstance(obj, File): + canRemove = True + canSave = True + self.removeAct.setEnabled(canRemove) + self.saveAct.setEnabled(canSave) + + localMetadata = None + serverMetadata = None + statusBar = u"" + if len(objects) == 1: + obj = objects[0] + if isinstance(obj, File): + localMetadata = obj.localMetadata + serverMetadata = obj.serverMetadata + statusBar = obj.fileName + + if localMetadata: + self.localMetadataBox.setArtist(localMetadata["ARTIST"]) + self.localMetadataBox.setAlbum(localMetadata["ALBUM"]) + self.localMetadataBox.setTitle(localMetadata["TITLE"]) + self.localMetadataBox.setDisabled(False) + else: + self.localMetadataBox.clear() + self.localMetadataBox.setDisabled(True) + + if serverMetadata: + self.serverMetadataBox.setArtist(serverMetadata["ARTIST"]) + self.serverMetadataBox.setAlbum(serverMetadata["ALBUM"]) + self.serverMetadataBox.setTitle(serverMetadata["TITLE"]) + self.serverMetadataBox.setDisabled(False) + else: + self.serverMetadataBox.clear() + self.serverMetadataBox.setDisabled(True) + + self.setStatusBarMessage(statusBar) + + def remove(self): + files = [] + for obj in self.selectedObjects: + if isinstance(obj, File): + files.append(obj) + + if files: + self.tagger.fileManager.removeFiles(files) + + def showCoverArt(self): + """Show/hide the cover art box.""" + if self.showCoverArtAct.isChecked(): + self.coverArtBox.show() + else: + self.coverArtBox.hide() diff --git a/picard/ui/metadatabox.py b/picard/ui/metadatabox.py new file mode 100644 index 000000000..1e3234fed --- /dev/null +++ b/picard/ui/metadatabox.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore, QtGui + +class MetadataBox(QtGui.QGroupBox): + + def __init__(self, parent, title): + QtGui.QGroupBox.__init__(self, title) + self.setupUi() + + def setupUi(self): + self.gridlayout = QtGui.QGridLayout() + self.gridlayout.setSpacing(2) + + + self.titleEdit = QtGui.QLineEdit(self) + self.artistEdit = QtGui.QLineEdit(self) + self.albumEdit = QtGui.QLineEdit(self) + #self.titleEdit = QtGui.QComboBox(self) + #self.titleEdit.addItem(u"The Prodigy") + #self.titleEdit.addItem(u"Faithless") + #self.titleEdit.setEditable(True) + #self.titleEdit.setAutoCompletion(True) + #self.titleEdit.lineEdit().setText(u"") + + #self.artistEdit = QtGui.QComboBox(self) + #self.artistEdit.setEditable(True) + + #self.albumEdit = QtGui.QComboBox(self) + #self.albumEdit.setEditable(True) + + self.gridlayout.addWidget(QtGui.QLabel(_("Title:")), 0, 0, QtCore.Qt.AlignRight) + self.gridlayout.addWidget(self.titleEdit, 0, 1, 1, 6) + self.gridlayout.addWidget(QtGui.QLabel(_("Artist:")), 1, 0, QtCore.Qt.AlignRight) + self.gridlayout.addWidget(self.artistEdit, 1, 1, 1, 6) + self.gridlayout.addWidget(QtGui.QLabel(_("Album:")), 2, 0, QtCore.Qt.AlignRight) + self.gridlayout.addWidget(self.albumEdit, 2, 1, 1, 6) + self.gridlayout.addWidget(QtGui.QLabel(_("Track#:")), 3, 0, QtCore.Qt.AlignRight) + + self.trackNumEdit = QtGui.QLineEdit(self) + sizePolicy = self.trackNumEdit.sizePolicy() + sizePolicy.setHorizontalStretch(2) + self.trackNumEdit.setSizePolicy(sizePolicy) + + self.timeEdit = QtGui.QLineEdit(self) + sizePolicy = self.timeEdit.sizePolicy() + sizePolicy.setHorizontalStretch(2) + self.timeEdit.setSizePolicy(sizePolicy) + + #self.dateEdit = QtGui.QDateEdit(self) + self.dateEdit = QtGui.QLineEdit(self) + self.dateEdit.setInputMask("0000-00-00") + sizePolicy = self.dateEdit.sizePolicy() + sizePolicy.setHorizontalStretch(4) + self.dateEdit.setSizePolicy(sizePolicy) + + self.gridlayout.addWidget(self.trackNumEdit, 3, 1) + self.gridlayout.addWidget(QtGui.QLabel(_("Time:")), 3, 2, QtCore.Qt.AlignRight) + self.gridlayout.addWidget(self.timeEdit, 3, 3) + self.gridlayout.addWidget(QtGui.QLabel(_("Date:")), 3, 4, QtCore.Qt.AlignRight) + self.gridlayout.addWidget(self.dateEdit, 3, 5) + + self.lookupButton = QtGui.QPushButton(_("Lookup"), self) + self.connect(self.lookupButton, QtCore.SIGNAL("clicked()"), self.lookup) + + self.gridlayout.addWidget(self.lookupButton, 3, 6) + + #hbox = QtGui.QHBoxLayout() + #hbox.addWidget(QtGui.QLineEdit(self), 1) + #hbox.addWidget(QtGui.QLabel(_("Genre:")), 0) + #hbox.addWidget(QtGui.QLineEdit(self), 2) + #self.gridlayout.addLayout(hbox, 4, 1, 1, 5) + + self.vbox = QtGui.QVBoxLayout(self) + self.vbox.addLayout(self.gridlayout, 0) + self.vbox.addStretch(1) + + def setDisabled(self, val): + self.titleEdit.setDisabled(val) + self.artistEdit.setDisabled(val) + self.albumEdit.setDisabled(val) + self.trackNumEdit.setDisabled(val) + self.timeEdit.setDisabled(val) + self.dateEdit.setDisabled(val) + self.lookupButton.setDisabled(val) + + def setTitle(self, text): + self.titleEdit.setText(text) + + def setArtist(self, text): + self.artistEdit.setText(text) + + def setAlbum(self, text): + self.albumEdit.setText(text) + + def clear(self): + self.setTitle(u"") + self.setArtist(u"") + self.setAlbum(u"") + + def lookup(self): + self.log.debug("lookup") + diff --git a/picard/ui/optionsdialog.py b/picard/ui/optionsdialog.py new file mode 100644 index 000000000..c1d902d89 --- /dev/null +++ b/picard/ui/optionsdialog.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore, QtGui + +class OptionsDialog(QtGui.QDialog): + + def __init__(self, parent=None): + QtGui.QDialog.__init__(self, parent) + self.setupUi() + + def setupUi(self): + self.setWindowTitle(_("Options")) + + self.splitter = QtGui.QSplitter(self) + + self.treeWidget = QtGui.QTreeWidget(self.splitter) + self.splitter.addWidget(self.treeWidget) + self.splitter.addWidget(QtGui.QWidget()) + + self.okButton = QtGui.QPushButton(_("OK"), self) + self.connect(self.okButton, QtCore.SIGNAL("clicked()"), self.onOk) + self.cancelButton = QtGui.QPushButton(_("Cancel"), self) + self.connect(self.cancelButton, QtCore.SIGNAL("clicked()"), self.onCancel) + + buttonLayout = QtGui.QHBoxLayout() + buttonLayout.addStretch() + buttonLayout.addWidget(self.okButton, 0) + buttonLayout.addWidget(self.cancelButton, 0) + + mainLayout = QtGui.QVBoxLayout() + mainLayout.addWidget(self.splitter) + mainLayout.addLayout(buttonLayout) + + self.setLayout(mainLayout) + + def onOk(self): + print "ok" + self.close() + + def onCancel(self): + print "cancel" + self.close() diff --git a/picard/ui/tageditor.py b/picard/ui/tageditor.py new file mode 100644 index 000000000..c6dd86fd7 --- /dev/null +++ b/picard/ui/tageditor.py @@ -0,0 +1,222 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore, QtGui + +class TagEditor(QtGui.QDialog): + + def __init__(self, metadata, parent=None): + QtGui.QDialog.__init__(self, parent) + self.metadata = metadata + self.setupUi() + self.load() + + def setupUi(self): + self.setWindowTitle(_("Tag Editor")) + + self.tabs = QtGui.QTabWidget(self) + + self.gridlayout1 = QtGui.QGridLayout() + self.gridlayout1.setSpacing(2) + + row = 0 + + self.gridlayout1.addWidget(QtGui.QLabel(_("Title:")), row, 0, QtCore.Qt.AlignLeft) + self.titleEdit = QtGui.QLineEdit(self.tabs) + self.gridlayout1.addWidget(self.titleEdit, row, 1) + + row += 1 + + self.gridlayout1.addWidget(QtGui.QLabel(_("Album:")), row, 0, QtCore.Qt.AlignLeft) + self.albumEdit = QtGui.QLineEdit(self.tabs) + self.gridlayout1.addWidget(self.albumEdit, row, 1) + + row += 1 + + self.gridlayout1.addWidget(QtGui.QLabel(_("Artist:")), row, 0, QtCore.Qt.AlignLeft) + self.artistEdit = QtGui.QLineEdit(self.tabs) + self.gridlayout1.addWidget(self.artistEdit, row, 1) + + row += 1 + + self.gridlayout1.addWidget(QtGui.QLabel(_("Track:")), row, 0, QtCore.Qt.AlignLeft) + + self.trackNumberEdit = QtGui.QLineEdit(self.tabs) + self.totalTracksEdit = QtGui.QLineEdit(self.tabs) + + hbox = QtGui.QHBoxLayout() + hbox.addWidget(self.trackNumberEdit, 1) + hbox.addWidget(QtGui.QLabel(_(u" of "))) + hbox.addWidget(self.totalTracksEdit, 1) + hbox.addStretch(9) + + self.gridlayout1.addLayout(hbox, row, 1) + + row += 1 + + self.gridlayout1.addWidget(QtGui.QLabel(_("Disc:")), row, 0, QtCore.Qt.AlignLeft) + + self.discNumberEdit = QtGui.QLineEdit(self.tabs) + self.totalDiscsEdit = QtGui.QLineEdit(self.tabs) + + hbox = QtGui.QHBoxLayout() + hbox.addWidget(self.discNumberEdit, 1) + hbox.addWidget(QtGui.QLabel(_(u" of "))) + hbox.addWidget(self.totalDiscsEdit, 1) + hbox.addStretch(9) + + self.gridlayout1.addLayout(hbox, row, 1) + + row += 1 + + self.gridlayout1.addWidget(QtGui.QLabel(_("Release date:")), row, 0, QtCore.Qt.AlignLeft) + + self.releaseDateEdit = QtGui.QLineEdit(self.tabs) + self.releaseDateEdit.setInputMask("0000-00-00") + + hbox = QtGui.QHBoxLayout() + hbox.addWidget(self.releaseDateEdit, 1) + hbox.addStretch(4) + + self.gridlayout1.addLayout(hbox, row, 1) + + row += 1 + + #self.gridlayout1.addWidget(QtGui.QLabel(_(u"Release date:")), row, 0, QtCore.Qt.AlignLeft) + #self.gridlayout1.addWidget(self.discNumberEdit, row, 1) + + vbox = QtGui.QVBoxLayout() + vbox.addLayout(self.gridlayout1) + vbox.addStretch() + + self.basicTags = QtGui.QWidget() + self.basicTags.setLayout(vbox) + + self.tabs.addTab(self.basicTags, _("&Basic")) + + self.gridlayout2 = QtGui.QGridLayout() + self.gridlayout2.setSpacing(2) + + details = [ + ["sortnameEdit", _("Artist sortname:")], + ["albumArtistEdit", _("Album artist:")], + ["albumArtistSortnameEdit", _("Album artist sortname:")], + ["composerEdit", _("Composer:")], + ["conductorEdit", _("Conductor:")], + ["ensembleEdit", _("Ensemble:")], + ["lyricistEdit", _("Lyricist:")], + ["arrangerEdit", _("Arranger:")], + ["producerEdit", _("Producer:")], + ["engineerEdit", _("Engineer:")], + ["remixerEdit", _("Remixer:")], + ["mixDjEdit", _("Mix DJ:")], + ] + i = 0 + for item in details: + self.gridlayout2.addWidget(QtGui.QLabel(item[1]), i, 0, QtCore.Qt.AlignLeft) + edit = QtGui.QLineEdit(self.tabs) + self.gridlayout2.addWidget(edit, i, 1) + setattr(self, item[0], edit) + i += 1 + + vbox = QtGui.QVBoxLayout() + vbox.addLayout(self.gridlayout2) + vbox.addStretch() + + self.detailsTags = QtGui.QWidget() + self.detailsTags.setLayout(vbox) + + self.tabs.addTab(self.detailsTags, _("&Details")) + self.tabs.addTab(QtGui.QWidget(), _("&MusicBrainz")) + self.tabs.addTab(QtGui.QWidget(), _("&Album Art")) + self.tabs.addTab(QtGui.QWidget(), _("&Info")) + + self.okButton = QtGui.QPushButton(_("OK"), self) + self.connect(self.okButton, QtCore.SIGNAL("clicked()"), self.onOk) + self.cancelButton = QtGui.QPushButton(_("Cancel"), self) + self.connect(self.cancelButton, QtCore.SIGNAL("clicked()"), self.onCancel) + + buttonLayout = QtGui.QHBoxLayout() + buttonLayout.addStretch() + buttonLayout.addWidget(self.okButton, 0) + buttonLayout.addWidget(self.cancelButton, 0) + + mainLayout = QtGui.QVBoxLayout() + mainLayout.addWidget(self.tabs) + mainLayout.addLayout(buttonLayout) + + self.setLayout(mainLayout) + self.resize(QtCore.QSize(500, 350)) + + def onOk(self): + self.save() + self.close() + + def onCancel(self): + self.close() + + def loadField(self, name, edit): + text = self.metadata.get(name, u"") + edit.setText(text) + + def load(self): + self.loadField(u"TITLE", self.titleEdit) + self.loadField(u"ALBUM", self.albumEdit) + self.loadField(u"ARTIST", self.artistEdit) + self.loadField(u"ALBUMARTIST", self.albumArtistEdit) + self.loadField(u"TRACKNUMBER", self.trackNumberEdit) + self.loadField(u"TOTALTRACKS", self.totalTracksEdit) + self.loadField(u"DISCNUMBER", self.discNumberEdit) + self.loadField(u"TOTALDISCS", self.totalDiscsEdit) + # TODO: DATE + self.loadField(u"COMPOSER", self.composerEdit) + self.loadField(u"CONDUCTOR", self.conductorEdit) + self.loadField(u"ENSEMBLE", self.ensembleEdit) + self.loadField(u"LYRICIST", self.lyricistEdit) + self.loadField(u"ARRANGER", self.arrangerEdit) + self.loadField(u"PRODUCER", self.producerEdit) + self.loadField(u"ENGINEER", self.engineerEdit) + self.loadField(u"REMIXER", self.remixerEdit) + self.loadField(u"MIXDJ", self.mixDjEdit) + + def saveField(self, name, edit): + text = unicode(edit.text()) + if text or name in self.metadata: + self.metadata.set(name, text) + + def save(self): + self.saveField(u"TITLE", self.titleEdit) + self.saveField(u"ALBUM", self.albumEdit) + self.saveField(u"ARTIST", self.artistEdit) + self.saveField(u"ALBUMARTIST", self.albumArtistEdit) + self.saveField(u"TRACKNUMBER", self.trackNumberEdit) + self.saveField(u"TOTALTRACKS", self.totalTracksEdit) + self.saveField(u"DISCNUMBER", self.discNumberEdit) + self.saveField(u"TOTALDISCS", self.totalDiscsEdit) + # TODO: DATE + self.saveField(u"COMPOSER", self.composerEdit) + self.saveField(u"CONDUCTOR", self.conductorEdit) + self.saveField(u"ENSEMBLE", self.ensembleEdit) + self.saveField(u"LYRICIST", self.lyricistEdit) + self.saveField(u"ARRANGER", self.arrangerEdit) + self.saveField(u"PRODUCER", self.producerEdit) + self.saveField(u"ENGINEER", self.engineerEdit) + self.saveField(u"REMIXER", self.remixerEdit) + self.saveField(u"MIXDJ", self.mixDjEdit) + diff --git a/picard/util.py b/picard/util.py new file mode 100644 index 000000000..349becf23 --- /dev/null +++ b/picard/util.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2004 Robert Kaye +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +import sys +import os.path + +_ioEncoding = sys.getfilesystemencoding() + +def setIoEncoding(encoding): + _ioEncoding = encoding + +def encodeFileName(fileName): + if isinstance(fileName, unicode): + if os.path.supports_unicode_filenames: + return fileName + else: + return fileName.encode(_ioEncoding, 'replace') + else: + return fileName + +def decodeFileName(fileName): + if isinstance(fileName, unicode): + return fileName + else: + return fileName.decode(_ioEncoding) + +def formatTime(ms): + if ms == 0: + return u"?:??" + else: + return u"%d:%02d" % (ms / 60000, (ms / 1000) % 60) + diff --git a/picard/worker.py b/picard/worker.py new file mode 100644 index 000000000..882d24df0 --- /dev/null +++ b/picard/worker.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore +from Queue import Queue +import os.path +import sys +from picard import util + +class WorkerThread(QtCore.QThread): + + def __init__(self): + QtCore.QThread.__init__(self) + self.exitThread = False + self.queue = Queue() + self.files = [] + + def start(self): + self.log.debug("Starting the worker thread") + QtCore.QThread.start(self) + + def stop(self): + self.log.debug("Stopping the worker thread") + if self.isRunning(): + self.exitThread = True + self.queue.put(None) + self.wait() + + def run(self): + while not self.exitThread: + item = self.queue.get(True) + if not item: + continue + + item[0](item) + + if self.queue.empty(): + # TR: Status bar message + message = QtCore.QString(_(u"Done")) + self.emit(QtCore.SIGNAL("statusBarMessage(const QString &)"), message) + + def loadAlbum(self, album): + """Load the album information from MusicBrainz.""" + self.queue.put((self.doLoadAlbum, album)) + + def doLoadAlbum(self, args): + album = args[1] + + message = QtCore.QString(_(u"Loading album %s ...") % album.id) + self.emit(QtCore.SIGNAL("statusBarMessage(const QString &)"), message) + + album.load() + self.emit(QtCore.SIGNAL("albumLoaded(const QString &)"), album.id) + + def readDirectory(self, directory): + """Read the directory recursively and add all files to the tagger.""" + self.queue.put((self.doReadDirectory, directory)) + + def doReadDirectory(self, args): + root = args[1] + # Show status bar message + message = QtCore.QString(_(u"Reading directory %s ...") % root) + self.emit(QtCore.SIGNAL("statusBarMessage(const QString &)"), message) + # Read the directory listing + files = QtCore.QStringList() + for name in os.listdir(util.encodeFileName(root)): + name = os.path.join(root, name) + if os.path.isdir(name): + self.readDirectory(name) + else: + files.append(QtCore.QString(util.decodeFileName(name))) + if files: + self.emit(QtCore.SIGNAL("addFiles(const QStringList &)"), files) + + def readFile(self, fileName, opener): + self.queue.put((self.doReadFile, (fileName, opener))) + + def doReadFile(self, args): + fileName, opener = args[1] + + # Show status bar message + message = QtCore.QString(_(u"Reading file %s ...") % fileName) + self.emit(QtCore.SIGNAL("statusBarMessage(const QString &)"), message) + + # Load files + files = opener(fileName) + + # And add them to the file manager + for file in files: + self.tagger.fileManager.addFile(file) + + def saveFile(self, file): + self.queue.put((self.doSaveFile, file)) + + def doSaveFile(self, args): + file = args[1] + fileName = file.fileName + + self.log.debug("Saving file %r", file) + + # Show status bar message + message = QtCore.QString(_(u"Saving file %s ...") % fileName) + self.emit(QtCore.SIGNAL("statusBarMessage(const QString &)"), message) + + diff --git a/picard/worker_.py b/picard/worker_.py new file mode 100644 index 000000000..4cf622629 --- /dev/null +++ b/picard/worker_.py @@ -0,0 +1,85 @@ +from PyQt4 import QtCore +from Queue import Queue +from threading import Thread +import os.path +import sys +from picard import util + +class WorkerThread(Thread, QtCore.QObject): + + def __init__(self): + QtCore.QObject.__init__(self) + Thread.__init__(self) + self.exitThread = False + self.queue = Queue() + self.files = [] + + def stop(self): + """Stop the thread""" + self.exitThread = True + self.queue.put(None) + self.join() + + def run(self): + while not self.exitThread: + item = self.queue.get(True) + if not item: + continue + + item[0](item) + + if self.queue.empty(): + # TR: Status bar message + message = QtCore.QString(_(u"Done")) + self.emit(QtCore.SIGNAL("statusBarMessage(const QString &)"), message) + + def loadAlbum(self, album): + """Load the album information from MusicBrainz.""" + self.queue.put((self.doLoadAlbum, album)) + + def doLoadAlbum(self, args): + album = args[1] + + message = QtCore.QString(_(u"Loading album %s ...") % album.id) + self.emit(QtCore.SIGNAL("statusBarMessage(const QString &)"), message) + + album.load() + self.emit(QtCore.SIGNAL("albumLoaded(const QString &)"), album.id) + + def readDirectory(self, directory): + """Read the directory recursively and add all files to the tagger.""" + self.queue.put((self.doReadDirectory, directory)) + + def doReadDirectory(self, args): + root = args[1] + # Show status bar message + message = QtCore.QString(_(u"Reading directory %s ...") % root) + self.emit(QtCore.SIGNAL("statusBarMessage(const QString &)"), message) + # Read the directory listing + files = QtCore.QStringList() + for name in os.listdir(util.encodeFileName(root)): + name = os.path.join(root, name) + if os.path.isdir(name): + self.readDirectory(name) + else: + files.append(QtCore.QString(util.decodeFileName(name))) + if files: + self.emit(QtCore.SIGNAL("addFiles(const QStringList &)"), files) + + def readFile(self, fileName, opener): + self.queue.put((self.doReadFile, (fileName, opener))) + + def doReadFile(self, args): + fileName, opener = args[1] + + # Show status bar message + message = QtCore.QString(_(u"Reading file %s ...") % fileName) + self.emit(QtCore.SIGNAL("statusBarMessage(const QString &)"), message) + + # Load files + files = opener(fileName) + + # And add them to the file manager + for file in files: + self.tagger.fileManager.addFile(file) + diff --git a/tagger.py b/tagger.py new file mode 100644 index 000000000..a3df78e7e --- /dev/null +++ b/tagger.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +import os.path +import sys + +sys.path.insert(0, '.') +from picard.tagger import main + +localeDir = os.path.join(os.path.dirname(sys.argv[0]), 'locale') +main(localeDir) +